From owner-freebsd-net@FreeBSD.ORG Mon May 17 20:01:32 2010 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id AEF1E106564A; Mon, 17 May 2010 20:01:32 +0000 (UTC) (envelope-from gelraen.ua@gmail.com) Received: from fg-out-1718.google.com (fg-out-1718.google.com [72.14.220.153]) by mx1.freebsd.org (Postfix) with ESMTP id B6EA08FC15; Mon, 17 May 2010 20:01:31 +0000 (UTC) Received: by fg-out-1718.google.com with SMTP id 22so1248058fge.13 for ; Mon, 17 May 2010 13:01:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:mime-version:received:in-reply-to :references:from:date:message-id:subject:to:cc:content-type; bh=izLA6BGa29sIhsk5zzAxW9cayHXFebsStGAi7zETJcs=; b=x6PTQNMUVx7Ny38+hXgxK3vapUPacG9H7Ah07zMRA91kulrh+pABxNmaBSwiFqvkzo vVJKjHpIEm/XXXLIKYq5VjoDeOVWPtmA+3ImibrkUOiMjoc+s6vSlfscn8z9WbM7z+L4 AHKfKst5ILwptUH4oHY1THhL7jEgK4H0Tsocw= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type; b=fQ28b/favchvmXnRytT8o9h8xWgZltchpUi7KCUFqkgVfPhzBZRRf/gwrp9lCE0rDi KEW+mKZ7XLJm6wrsTQ8cq3cTjg1ReawrL5VMySsTnd7CWusd+NbHpghkHn1WHRjszMVB qihHoukPx2QLcH5D38M+pMLk4S3SfAiKKJve4= Received: by 10.204.46.153 with SMTP id j25mr1904bkf.191.1274126490687; Mon, 17 May 2010 13:01:30 -0700 (PDT) MIME-Version: 1.0 Received: by 10.204.153.212 with HTTP; Mon, 17 May 2010 13:01:10 -0700 (PDT) In-Reply-To: <4B4BBE59.9010908@elischer.org> References: <4B4BBE59.9010908@elischer.org> From: Maxim Ignatenko Date: Mon, 17 May 2010 23:01:10 +0300 Message-ID: To: Julian Elischer , Alexander Motin Content-Type: multipart/mixed; boundary=0016e6d77f74e05a000486cfb045 Cc: freebsd-net@freebsd.org Subject: Re: ng_patch node X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 17 May 2010 20:01:32 -0000 --0016e6d77f74e05a000486cfb045 Content-Type: text/plain; charset=UTF-8 Extended and improved version of ng_patch node: 1) added new operations ('*', '/', unary '-', '<<', '>>') 2) single node now able to apply arbitrary number of changes 3) m_pullup replaced with m_copydata/m_copyback 4) ntoh/hton used to apply changes correctly 5) checksum handling 6) added some stats --0016e6d77f74e05a000486cfb045 Content-Type: application/octet-stream; name="ng_patch.diff" Content-Disposition: attachment; filename="ng_patch.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g9bepv970 SW5kZXg6IHNoYXJlL21hbi9tYW40L01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNoYXJlL21hbi9t YW40L01ha2VmaWxlCShyZXZpc2lvbiAyMDYzNDUpCisrKyBzaGFyZS9tYW4vbWFuNC9NYWtlZmls ZQkod29ya2luZyBjb3B5KQpAQCAtMjY3LDYgKzI2Nyw3IEBACiAJbmdfbmF0LjQgXAogCW5nX25l dGZsb3cuNCBcCiAJbmdfb25lMm1hbnkuNCBcCisJbmdfcGF0Y2guNCBcCiAJbmdfcHBwLjQgXAog CW5nX3BwcG9lLjQgXAogCW5nX3BwdHBncmUuNCBcCkluZGV4OiBzaGFyZS9tYW4vbWFuNC9uZ19w YXRjaC40Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIHNoYXJlL21hbi9tYW40L25nX3BhdGNoLjQJKHJldmlzaW9u IDApCisrKyBzaGFyZS9tYW4vbWFuNC9uZ19wYXRjaC40CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx LDIzNSBAQAorLlwiIENvcHlyaWdodCAoYykgMjAxMCBNYXhpbSBJZ25hdGVua28gPGdlbHJhZW4u dWFAZ21haWwuY29tPgorLlwiIENvcHlyaWdodCAoYykgMjAxMCBWYWRpbSBHb25jaGFyb3YgPHZh ZGltbnVjbGlnaHRAdHB1LnJ1PgorLlwiIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisuXCIKKy5cIiBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y IHdpdGhvdXQKKy5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKy5cIiBhcmUgbWV0OgorLlwiIDEuIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIg ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLgorLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisuXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorLlwiICAgIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli dXRpb24uCisuXCIKKy5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1Ig QU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisuXCIgQU5ZIEVYUFJFU1MgT1IgSU1QTElF RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisuXCIgSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UKKy5cIiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI RSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorLlwiIEZPUiBBTlkgRElSRUNULCBJ TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM CisuXCIgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U IE9GIFNVQlNUSVRVVEUgR09PRFMKKy5cIiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKy5cIiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU UklDVAorLlwiIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKy5cIiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisuXCIgU1VDSCBE QU1BR0UuCisuXCIKKy5cIiAkRnJlZUJTRCQKKy5cIgorLkRkIEphbnVhcnkgNiwgMjAxMAorLkR0 IE5HX1BBVENIIDQKKy5PcworLlNoIE5BTUUKKy5ObSBuZ19wYXRjaAorLk5kICJ0cml2aWFsIG1i dWYgZGF0YSBtb2RpZnlpbmcgbmV0Z3JhcGggbm9kZSB0eXBlIgorLlNoIFNZTk9QU0lTCisuSW4g bmV0Z3JhcGgvbmdfcGF0Y2guaAorLlNoIERFU0NSSVBUSU9OCitUaGUKKy5ObSBwYXRjaAorbm9k ZSBwZXJmb3JtcyBkYXRhIG1vZGlmaWNhdGlvbiBvZiBwYWNrZXRzIHBhc3NpbmcgdGhyb3VnaCBp dC4KK01vZGlmaWNhdGlvbnMgYXJlIHJlc3RyaWN0ZWQgdG8gYSBzdWJzZXQgb2YgQyBsYW5ndWFn ZSBvcGVyYXRpb25zCitvbiB1bnNpZ25lZCBpbnRlZ2VycyBvZiA4LCAxNiwgMzIgb3IgNjQgYml0 IHNpemUuCitUaGVzZSBhcmU6IHNldCB0byBuZXcgdmFsdWUgKD0pLCBhZGRpdGlvbiAoKz0pLCBz dWJ0cmFjdGlvbiAoLT0pLAorbXVsdGlwbGljYXRpb24gKCo9KSwgZGl2aXNpb24gKC89KSwgbmVn YXRpb24gKD0gLSksCitiaXR3aXNlIEFORCAoJj0pLCBiaXR3aXNlIE9SICh8PSksIGJpdHdpc2Ug ZVhjbHVzaXZlIE9SIChePSksCitzaGlmdCBsZWZ0ICg8PD0pLCBzaGlmdCByaWdodCAoPj49KS4K K0EgbmVnYXRpb24gb3BlcmF0aW9uIGlzIHRoZSBvbmUgZXhjZXB0aW9uOiBpbnRlZ2VyIGlzIHRy ZWF0ZWQgYXMgc2lnbmVkCithbmQgc2Vjb25kIG9wZXJhbmQgKHRoZQorLlZhIHZhbHVlICkKK2lz IG5vdCB1c2VkLgorVGhlcmUgbWF5IGJlIHNldmVyYWwgbW9kaWZpY2F0aW9uIG9wZXJhdGlvbnMs IHRoZXkgYXJlIGFsbCBhcHBsaWVkCit0byBhIHBhY2tldCBzZXF1ZW50aWFsbHkgaW4gb3JkZXIg dGhleSB3ZXJlIHNwZWNpZmllZCBieSB1c2VyLgorRGF0YSBwYXlsb2FkIG9mIHBhY2tldCBpcyB2 aWV3ZWQgYXMgYXJyYXkgb2YgYnl0ZXMsIHdpdGggemVybyBvZmZzZXQKK2NvcnJlc3BvbmRpbmcg dG8gdGhlIHZlcnkgZmlyc3QgYnl0ZSBvZiBwYWNrZXQgaGVhZGVycywgYW5kCisuVmEgbGVuZ3Ro CitieXRlcyBiZWdpbm5pbmcgZnJvbQorLlZhIG9mZnNldAorYXJlIHRha2VuIGFzIGEgc2luZ2xl IGludGVnZXIgaW4gbmV0d29yayBieXRlIG9yZGVyLgorLlNoIEhPT0tTCitUaGlzIG5vZGUgdHlw ZSBoYXMgdHdvIGhvb2tzOgorLkJsIC10YWcgLXdpZHRoIGluZGVudAorLkl0IFZhIGluCitQYWNr ZXRzIHJlY2VpdmVkIG9uIHRoaXMgaG9vayBhcmUgbW9kaWZpZWQgYWNjb3JkaW5nIHRvIHJ1bGVz IHNwZWNpZmllZAoraW4gY29uZmlnIGFuZCB0aGVuIGZvcndhcmRlZCB0bworLkFyIG91dAoraG9v aywgaWYgaXQgZXhpc3RzIGFuZCBjb25uZWN0ZWQuCitPdGhlcndpc2UgdGhleSBhcmUgcmVmbGVj dGVkIGJhY2sgdG8gdGhlCisuQXIgaW4KK2hvb2suCisuSXQgVmEgb3V0CitQYWNrZXRzIHJlY2Vp dmVkIG9uIHRoaXMgaG9vayBhcmUgZm9yd2FyZGVkIHRvCisuQXIgaW4KK2hvb2sgd2l0aG91dCBh bnkgY2hhbmdlcy4KKy5FbAorLlNoIENPTlRST0wgTUVTU0FHRVMKK1RoaXMgbm9kZSB0eXBlIHN1 cHBvcnRzIHRoZSBnZW5lcmljIGNvbnRyb2wgbWVzc2FnZXMsIHBsdXMgdGhlIGZvbGxvd2luZzoK Ky5CbCAtdGFnIC13aWR0aCBpbmRlbnQKKy5JdCBEdiBOR01fUEFUQ0hfU0VUQ09ORklHIFBxIExp IHNldGNvbmZpZworVGhpcyBjb21tYW5kIHNldHMgdGhlIHNlcXVlbmNlIG9mIG1vZGlmeSBvcGVy YXRpb25zCit0aGF0IHdpbGwgYmUgYXBwbGllZCB0byBpbmNvbWluZyBkYXRhIG9uIGEgaG9vay4K K1RoZSBmb2xsb3dpbmcKKy5WdCAic3RydWN0IG5nX3BhdGNoX2NvbmZpZyIKK211c3QgYmUgc3Vw cGxpZWQgYXMgYW4gYXJndW1lbnQ6CisuQmQgLWxpdGVyYWwgLW9mZnNldCA0bgorc3RydWN0IG5n X3BhdGNoX29wIHsKKwl1aW50NjRfdAl2YWx1ZTsKKwl1aW50MzJfdAlvZmZzZXQ7CisJdWludDE2 X3QJbGVuZ3RoOyAvKiAxLDIsNCBvciA4IGJ5dGVzICovCisJdWludDE2X3QJbW9kZTsKK307Cisv KiBQYXRjaGluZyBtb2RlcyAqLworI2RlZmluZSBOR19QQVRDSF9NT0RFX1NFVAkxCisjZGVmaW5l IE5HX1BBVENIX01PREVfQURECTIKKyNkZWZpbmUgTkdfUEFUQ0hfTU9ERV9TVUIJMworI2RlZmlu ZSBOR19QQVRDSF9NT0RFX01VTAk0CisjZGVmaW5lIE5HX1BBVENIX01PREVfRElWCTUKKyNkZWZp bmUgTkdfUEFUQ0hfTU9ERV9ORUcJNgorI2RlZmluZSBOR19QQVRDSF9NT0RFX0FORAk3CisjZGVm aW5lIE5HX1BBVENIX01PREVfT1IJOAorI2RlZmluZSBOR19QQVRDSF9NT0RFX1hPUgk5CisjZGVm aW5lIE5HX1BBVENIX01PREVfU0hMCTEwCisjZGVmaW5lIE5HX1BBVENIX01PREVfU0hSCTExCisK K3N0cnVjdCBuZ19wYXRjaF9jb25maWcgeworCXVpbnQzMl90CWNvdW50OworCXVpbnQzMl90CWNz dW1fZmxhZ3M7CisJc3RydWN0IG5nX3BhdGNoX29wIG9wc1tdOworfTsKKy5FZAorLlBwCitUaGUK Ky5WYSBjc3VtX2ZsYWdzCitjYW4gYmUgc2V0IHRvIGFueSBjb21iaW5hdGlvbiBvZiBDU1VNX0lQ LCBDU1VNX1RDUCwgQ1NVTV9TQ1RQIGFuZCBDU1VNX1VEUAorKG90aGVyIHZhbHVlcyBhcmUgaWdu b3JlZCkgZm9yIGluc3RydWN0aW5nIHRoZSBJUCBzdGFjayB0byByZWNhbGN1bGF0ZSB0aGUKK2Nv cnJlc3BvbmRpbmcgY2hlY2tzdW0gYmVmb3JlIHRyYW5zbWl0dGluZyBwYWNrZXQgb24gb3V0cHV0 IGludGVyZmFjZS4KK1RoZQorLk5tCitub2RlIGRvZXMgbm90IGRvIGFueSBjaGVja3N1bSBjb3Jy ZWN0aW9uIGJ5IGl0c2VsZi4KKy5JdCBEdiBOR01fUEFUQ0hfR0VUQ09ORklHIFBxIExpIGdldGNv bmZpZworVGhpcyBjb250cm9sIG1lc3NhZ2Ugb2J0YWlucyBjdXJyZW50IHNldCBvZiBtb2RpZnkg b3BlcmF0aW9ucywKK3JldHVybmVkIGFzCisuVnQgInN0cnVjdCBuZ19wYXRjaF9jb25maWciIC4K Ky5JdCBEdiBOR01fUEFUQ0hfR0VUX1NUQVRTIFBxIExpIGdldHN0YXRzCitSZXR1cm5zIG5vZGUg c3RhdGlzdGljcyBhcyBhCisuVnQgInN0cnVjdCBuZ19wYXRjaF9zdGF0cyIgLgorLkl0IER2IE5H TV9QQVRDSF9DTFJfU1RBVFMgUHEgTGkgY2xyc3RhdHMKK0NsZWFyIG5vZGUgc3RhdGlzdGljcy4K Ky5JdCBEdiBOR01fUEFUQ0hfR0VUQ0xSX1NUQVRTIFBxIExpIGdldGNscnN0YXRzCitUaGlzIGNv bW1hbmQgaXMgaWRlbnRpY2FsIHRvCisuRHYgTkdNX1BBVENIX0dFVF9TVEFUUyAsCitleGNlcHQg dGhhdCB0aGUgc3RhdGlzdGljcyBhcmUgYWxzbyBhdG9taWNhbGx5IGNsZWFyZWQuCisuRWwKKy5T aCBTSFVURE9XTgorVGhpcyBub2RlIHNodXRzIGRvd24gdXBvbiByZWNlaXB0IG9mIGEKKy5EdiBO R01fU0hVVERPV04KK2NvbnRyb2wgbWVzc2FnZSwgb3Igd2hlbiBhbGwgaG9va3MgaGF2ZSBiZWVu IGRpc2Nvbm5lY3RlZC4KKy5TaCBFWEFNUExFUworVGhlCisuTm0KK25vZGUgYWxsb3dzIHRvIG1v ZGlmeSBUVEwgYW5kIFRPUy9EU0NQIGZpZWxkcyBpbiBJUCBwYWNrZXRzLgorU3VwcG9zZSB5b3Ug aGF2ZSB0d28gYWRqYWNlbnQgc2ltcGxleCBsaW5rcyB0byByZW1vdGUgbmV0d29yaworKGUuZy5c JiBzYXRlbGxpdGUpLCBzbyB0aGF0IHRoZSBwYWNrZXRzIGV4cGlyaW5nIGluIGJldHdlZW4KK3dp bGwgZ2VuZXJhdGUgdW53YW50ZWQgSUNNUC1yZXBsaWVzIHdoaWNoIGhhdmUgdG8gZ28gZm9ydGgs IG5vdCBiYWNrLgorVGh1cyB5b3UgbmVlZCB0byByYWlzZSBUVEwgb2YgZXZlcnkgcGFja2V0IGVu dGVyaW5nIGxpbmsgbGluayBieSAyCit0byBlbnN1cmUgdGhlIFRUTCB3aWxsIG5vdCByZWFjaCB6 ZXJvIHRoZXJlLgorU28geW91IHNldHVwCisuWHIgaXBmdyA4CitydWxlIHdpdGgKKy5DbSBuZXRn cmFwaAorYWN0aW9uIHRvIGluamVjdCBwYWNrZXRzIGdvaW5nIHRvIG90aGVyIGVuZCBvZiBzaW1w bGV4IGxpbmsgYnkgdGhlCitmb2xsb3dpbmcKKy5YciBuZ2N0bCA4CitzY3JpcHQ6CisuQmQgLWxp dGVyYWwgLW9mZnNldCA0bgorL3Vzci9zYmluL25nY3RsIC1mLSA8PC1TRVEKKwlta3BlZXIgaXBm dzogcGF0Y2ggMjAwIGluCisJbmFtZSBpcGZ3OjIwMCB0dGxfYWRkCisJbXNnIHR0bF9hZGQ6IHNl dGNvbmZpZyB7IGNvdW50PTEgY3N1bV9mbGFncz0xIG9wcz1bCVxlCisJCXsgbW9kZT0yIHZhbHVl PTMgbGVuZ3RoPTEgb2Zmc2V0PTggfSBdIH0KK1NFUQorL3NiaW4vaXBmdyBhZGQgMTUwIG5ldGdy YXBoIDIwMCBpcCBmcm9tIGFueSB0byBzaW1wbGV4LnJlbW90ZS5uZXQKKy5FZAorLlBwCitIZXJl CisuRHEgTGkgdHRsX2FkZAorbm9kZSBvZiB0eXBlCisuTm0KK2NvbmZpZ3VyZWQgdG8gYWRkICht b2RlIAorLkR2IE5HX1BBVENIX01PREVfQUREICkKK2EKKy5WYSB2YWx1ZQorb2YgMyB0byBhIG9u ZS1ieXRlIFRUTCBmaWVsZCwgd2hpY2ggaXMgOXRoIGJ5dGUgb2YgSVAgcGFja2V0IGhlYWRlci4K Ky5QcAorQW5vdGhlciBleGFtcGxlIHdvdWxkIGJlIHR3byBjb25zZWN1dGl2ZSBtb2RpZmljYXRp b25zIG9mIHBhY2tldCBUT1MKK2ZpZWxkOiBzYXksIHlvdSBuZWVkIHRvIGNsZWFyIHRoZQorLkR2 IElQVE9TX1RIUk9VR0hQVVQKK2JpdCBhbmQgc2V0IHRoZQorLkR2IElQVE9TX01JTkNPU1QKK2Jp dC4KK1NvIHlvdSBkbzoKKy5CZCAtbGl0ZXJhbCAtb2Zmc2V0IDRuCisvdXNyL3NiaW4vbmdjdGwg LWYtIDw8LVNFUQorCW1rcGVlciBpcGZ3OiBwYXRjaCAzMDAgaW4KKwluYW1lIGlwZnc6MzAwIHRv c19jaGcKKwltc2cgdG9zX2NoZzogc2V0Y29uZmlnIHsgY291bnQ9MiBjc3VtX2ZsYWdzPTEgb3Bz PVsJXGUKKwkJeyBtb2RlPTcgdmFsdWU9MHhmNyBsZW5ndGg9MSBvZmZzZXQ9MSB9CQlcZQorCQl7 IG1vZGU9OCB2YWx1ZT0weDAyIGxlbmd0aD0xIG9mZnNldD0xIH0gXSB9CitTRVEKKy9zYmluL2lw ZncgYWRkIDE2MCBuZXRncmFwaCA2MDAgaXAgZnJvbSBhbnkgdG8gYW55IG5vdCBkc3QtcG9ydCA4 MAorLkVkCisuUHAKK1RoaXMgZmlyc3QgZG9lcworLkR2IE5HX1BBVENIX01PREVfQU5ECitjbGVh cmluZyB0aGUgZm91cnRoIGJpdCBhbmQgdGhlbgorLkR2IE5HX1BBVENIX01PREVfT1IKK3NldHRp bmcgdGhlIHRoaXJkIGJpdC4KKy5QcAorSW4gYm90aCBleGFtcGxlcyB0aGUKKy5WYSBjc3VtX2Zs YWdzCitmaWVsZCBpbmRpY2F0ZXMgdGhhdCBJUCBjaGVja3N1bSAoYnV0IG5vdCBUQ1Agb3IgVURQ IGNoZWNrc3VtKSBzaG91bGQgYmUKK3JlY2FsY3VsYXRlZCBiZWZvcmUgdHJhbnNtaXQuCisuUHAK K05vdGU6IG9uZSBzaG91bGQgZW5zdXJlIHRoYXQgcGFja2V0cyBhcmUgcmV0dXJuZWQgdG8gaXBm dyBhZnRlciBwcm9jZXNzaW5nCitpbnNpZGUKKy5YciBuZXRncmFwaCA0ICwKK2J5IHNldHRpbmcg YXBwcm9wcmlhdGUKKy5YciBzeXNjdGwgOAordmFyaWFibGU6CisuQmQgLWxpdGVyYWwgLW9mZnNl dCA0bgorc3lzY3RsIG5ldC5pbmV0LmlwLmZ3Lm9uZV9wYXNzPTAKKy5FZAorLlNoIFNFRSBBTFNP CisuWHIgbmV0Z3JhcGggNCAsCisuWHIgbmdfaXBmdyA0ICwKKy5YciBuZ2N0bCA4CisuU2ggSElT VE9SWQorVGhlCisuTm0KK25vZGUgdHlwZSB3YXMgaW1wbGVtZW50ZWQgaW4KKy5GeCA4LjEgLgor LlNoIEFVVEhPUlMKKy5BbiAiTWF4aW0gSWduYXRlbmtvIiBBcSBnZWxyYWVuLnVhQGdtYWlsLmNv bSAuCitUaGlzIG1hbnVhbCBwYWdlIHdhcyB3cml0dGVuIGJ5CisuQW4gIlZhZGltIEdvbmNoYXJv diIgQXEgdmFkaW1udWNsaWdodEB0cHUucnUgLgorLlNoIEJVR1MKK05vZGUgYmxpbmRseSB0cmll cyB0byBhcHBseSBldmVyeSBwYXRjaGluZyBvcGVyYXRpb24gdG8gZWFjaCBwYWNrZXQKKyhleGNl cHQgdGhvc2Ugd2hpY2ggb2Zmc2V0IGlmIGdyZWF0ZXIgdGhhbiBsZW5ndGggb2YgdGhlIHBhY2tl dCksCitzbyBiZSBzdXJlIHRoYXQgeW91IHN1cHBseSBvbmx5IHRoZSByaWdodCBwYWNrZXRzIHRv IGl0IChlLmcuIGNoYW5naW5nCitieXRlcyBpbiB0aGUgQVJQIHBhY2tldHMgbWVhbnQgdG8gYmUg aW4gSVAgaGVhZGVyIGNvdWxkIGNvcnJ1cHQKK3RoZW0gYW5kIG1ha2UgeW91ciBtYWNoaW5lIHVu cmVhY2hhYmxlIGZyb20gdGhlIG5ldHdvcmspLgorLlBwCisuRW0gISEhIFdBUk5JTkcgISEhCisu UHAKK091dHB1dCBwYXRoIG9mIHRoZSBJUCBzdGFjayBhc3N1bWVzIGNvcnJlY3QgZmllbGRzIGFu ZCBsZW5ndGhzIGluIHRoZQorcGFja2V0cyAtIGNoYW5naW5nIHRoZW0gYnkgbWlzdGFrZSB0byBp bmNvcnJlY3QgdmFsdWVzIGNhbiBjYXVzZQordW5wcmVkaWN0YWJsZSByZXN1bHRzIGluY2x1ZGlu ZyBrZXJuZWwgcGFuaWNzLgpJbmRleDogc3lzL25ldGdyYXBoL25nX3BhdGNoLmMKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotLS0gc3lzL25ldGdyYXBoL25nX3BhdGNoLmMJKHJldmlzaW9uIDApCisrKyBzeXMvbmV0Z3Jh cGgvbmdfcGF0Y2guYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1ODYgQEAKKy8qCisgKiBuZ19w YXRjaC5jCisgKi8KKworLyotCisgKiAgIENvcHlyaWdodCAoQykgMjAxMCBieSBNYXhpbSBJZ25h dGVua28KKyAqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0ICAgICoKKyAqICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyAgICoKKyAqICAgIGFyZSBtZXQ6ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAq ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0ICAgICoKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gICAgICoKKyAqICAgICAqIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 ICoKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lciBpbiAgICoKKyAqICAgICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgICAgICAgICoKKyAqICAgICAgIGRp c3RyaWJ1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAgICoKKyAqICAg IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IEJVVCBOT1QgICAgICoKKyAqICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SICoKKyAqICAgQSBQQVJUSUNVTEFSIFBV UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgICoK KyAqICAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsICoKKyAqICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCAgICAgICoKKyAqICAgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV U0UsICoKKyAqICAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZICoKKyAqICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAgICoKKyAqICAgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP RiBUSEUgVVNFICoKKyAqICAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gICoKKyAqCisgKiBBdXRob3I6IE1heGltIEln bmF0ZW5rbyA8Z2VscmFlbi51YUBnbWFpbC5jb20+CisgKgorICogJEZyZWVCU0QkCisgKi8KKwor I2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRl IDxzeXMvbWJ1Zi5oPgorI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNsdWRlIDxzeXMvY3R5 cGUuaD4KKyNpbmNsdWRlIDxzeXMvZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+CS8q IGJlNjR0b2goKSwgaHRvYmU2NCgpICovCisjaW5jbHVkZSA8bmV0Z3JhcGgvbmdfbWVzc2FnZS5o PgorI2luY2x1ZGUgPG5ldGdyYXBoL25nX3BhcnNlLmg+CisjaW5jbHVkZSA8bmV0Z3JhcGgvbmdf cGF0Y2guaD4KKyNpbmNsdWRlIDxuZXRncmFwaC9uZXRncmFwaC5oPgorCitzdGF0aWMgbmdfY29u c3RydWN0b3JfdAluZ19wYXRjaF9jb25zdHJ1Y3RvcjsKK3N0YXRpYyBuZ19yY3Ztc2dfdAluZ19w YXRjaF9yY3Ztc2c7CitzdGF0aWMgbmdfc2h1dGRvd25fdAluZ19wYXRjaF9zaHV0ZG93bjsKK3N0 YXRpYyBuZ19uZXdob29rX3QJbmdfcGF0Y2hfbmV3aG9vazsKK3N0YXRpYyBuZ19yY3ZkYXRhX3QJ bmdfcGF0Y2hfcmN2ZGF0YTsKK3N0YXRpYyBuZ19kaXNjb25uZWN0X3QJbmdfcGF0Y2hfZGlzY29u bmVjdDsKKworI2RlZmluZSBPRkZTRVRPRihzLCBlKSAoKGNoYXIgKikmKChzICopMCktPmUgLSAo Y2hhciAqKSgocyAqKTApKQorCitzdGF0aWMgaW50CituZ19wYXRjaF9jb25maWdfZ2V0bGVuKGNv bnN0IHN0cnVjdCBuZ19wYXJzZV90eXBlICp0eXBlLAorCQljb25zdCB1X2NoYXIgKnN0YXJ0LCBj b25zdCB1X2NoYXIgKmJ1ZikKK3sKKwljb25zdCBzdHJ1Y3QgbmdfcGF0Y2hfY29uZmlnICpwOwor CXAgPSAoY29uc3Qgc3RydWN0IG5nX3BhdGNoX2NvbmZpZyAqKShidWYgLSBPRkZTRVRPRihzdHJ1 Y3QgbmdfcGF0Y2hfY29uZmlnLCBvcHMpKTsKKwlyZXR1cm4gKHAtPmNvdW50KTsKK30KKworc3Rh dGljIGNvbnN0IHN0cnVjdCBuZ19wYXJzZV9zdHJ1Y3RfZmllbGQgbmdfcGF0Y2hfb3BfdHlwZV9m aWVsZHNbXQorCT0gTkdfUEFUQ0hfT1BfVFlQRV9JTkZPOworc3RhdGljIGNvbnN0IHN0cnVjdCBu Z19wYXJzZV90eXBlIG5nX3BhdGNoX29wX3R5cGUgPSB7CisJJm5nX3BhcnNlX3N0cnVjdF90eXBl LAorCSZuZ19wYXRjaF9vcF90eXBlX2ZpZWxkcworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBu Z19wYXJzZV9hcnJheV9pbmZvIG5nX3BhdGNoX2NvbmZhcnJfaW5mbyA9IHsKKwkmbmdfcGF0Y2hf b3BfdHlwZSwKKwkmbmdfcGF0Y2hfY29uZmlnX2dldGxlbgorfTsKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgbmdfcGFyc2VfdHlwZSBuZ19wYXRjaF9jb25mYXJyX3R5cGUgPSB7CisJJm5nX3BhcnNlX2Fy cmF5X3R5cGUsCisJJm5nX3BhdGNoX2NvbmZhcnJfaW5mbworfTsKKworc3RhdGljIGNvbnN0IHN0 cnVjdCBuZ19wYXJzZV9zdHJ1Y3RfZmllbGQgbmdfcGF0Y2hfY29uZmlnX3R5cGVfZmllbGRzW10K Kwk9IE5HX1BBVENIX0NPTkZJR19UWVBFX0lORk87CitzdGF0aWMgY29uc3Qgc3RydWN0IG5nX3Bh cnNlX3R5cGUgbmdfcGF0Y2hfY29uZmlnX3R5cGUgPSB7CisJJm5nX3BhcnNlX3N0cnVjdF90eXBl LAorCSZuZ19wYXRjaF9jb25maWdfdHlwZV9maWVsZHMKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgbmdfcGFyc2Vfc3RydWN0X2ZpZWxkIG5nX3BhdGNoX3N0YXRzX2ZpZWxkc1tdCisJPSBOR19Q QVRDSF9TVEFUU19UWVBFX0lORk87CitzdGF0aWMgY29uc3Qgc3RydWN0IG5nX3BhcnNlX3R5cGUg bmdfcGF0Y2hfc3RhdHNfdHlwZSA9IHsKKwkmbmdfcGFyc2Vfc3RydWN0X3R5cGUsCisJJm5nX3Bh dGNoX3N0YXRzX2ZpZWxkcworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZ19jbWRsaXN0IG5n X3BhdGNoX2NtZGxpc3RbXSA9IHsKKwl7CisJCU5HTV9QQVRDSF9DT09LSUUsCisJCU5HTV9QQVRD SF9HRVRDT05GSUcsCisJCSJnZXRjb25maWciLAorCQlOVUxMLAorCQkmbmdfcGF0Y2hfY29uZmln X3R5cGUKKwl9LAorCXsKKwkJTkdNX1BBVENIX0NPT0tJRSwKKwkJTkdNX1BBVENIX1NFVENPTkZJ RywKKwkJInNldGNvbmZpZyIsCisJCSZuZ19wYXRjaF9jb25maWdfdHlwZSwKKwkJTlVMTAorCX0s CisJeworCQlOR01fUEFUQ0hfQ09PS0lFLAorCQlOR01fUEFUQ0hfR0VUX1NUQVRTLAorCQkiZ2V0 c3RhdHMiLAorCQlOVUxMLAorCQkmbmdfcGF0Y2hfc3RhdHNfdHlwZQorCX0sCisJeworCQlOR01f UEFUQ0hfQ09PS0lFLAorCQlOR01fUEFUQ0hfQ0xSX1NUQVRTLAorCQkiY2xyc3RhdHMiLAorCQlO VUxMLAorCQlOVUxMCisJfSwKKwl7CisJCU5HTV9QQVRDSF9DT09LSUUsCisJCU5HTV9QQVRDSF9H RVRDTFJfU1RBVFMsCisJCSJnZXRjbHJzdGF0cyIsCisJCU5VTEwsCisJCSZuZ19wYXRjaF9zdGF0 c190eXBlCisJfSwKKwl7IDAgfQorfTsKKworc3RhdGljIHN0cnVjdCBuZ190eXBlIHR5cGVzdHJ1 Y3QgPSB7CisJLnZlcnNpb24gPQlOR19BQklfVkVSU0lPTiwKKwkubmFtZSA9CQlOR19QQVRDSF9O T0RFX1RZUEUsCisJLmNvbnN0cnVjdG9yID0JbmdfcGF0Y2hfY29uc3RydWN0b3IsCisJLnJjdm1z ZyA9CW5nX3BhdGNoX3Jjdm1zZywKKwkuc2h1dGRvd24gPQluZ19wYXRjaF9zaHV0ZG93biwKKwku bmV3aG9vayA9CW5nX3BhdGNoX25ld2hvb2ssCisJLnJjdmRhdGEgPQluZ19wYXRjaF9yY3ZkYXRh LAorCS5kaXNjb25uZWN0ID0JbmdfcGF0Y2hfZGlzY29ubmVjdCwKKwkuY21kbGlzdCA9CW5nX3Bh dGNoX2NtZGxpc3QsCit9OworTkVUR1JBUEhfSU5JVChwYXRjaCwgJnR5cGVzdHJ1Y3QpOworCit1 bmlvbiBwYXRjaF92YWwgeworCXVpbnQ4X3QJCXYxOworCXVpbnQxNl90CXYyOworCXVpbnQzMl90 CXY0OworCXVpbnQ2NF90CXY4OworfTsKKworc3RydWN0IG5nX3BhdGNoX3ByaXYgeworCWhvb2tf cAkJaW47CisJaG9va19wCQlvdXQ7CisJc3RydWN0IG5nX3BhdGNoX2NvbmZpZyAqY29uZmlnOwor CXVuaW9uIHBhdGNoX3ZhbCAqdmFsOworCXN0cnVjdCBuZ19wYXRjaF9zdGF0cyBzdGF0czsKK307 Cit0eXBlZGVmIHN0cnVjdCBuZ19wYXRjaF9wcml2ICpwcml2X3A7CisKKyNkZWZpbmUgTkdfUEFU Q0hfQ09ORl9TSVpFKGNvdW50KQkoc2l6ZW9mKHN0cnVjdCBuZ19wYXRjaF9jb25maWcpICsgXAor CQkoY291bnQpICogc2l6ZW9mKHN0cnVjdCBuZ19wYXRjaF9vcCkpCisKK3N0YXRpYyB2b2lkIGRv X3BhdGNoKHByaXZfcCBjb25mLCBzdHJ1Y3QgbWJ1ZiAqbSk7CisKK3N0YXRpYyBpbnQKK25nX3Bh dGNoX2NvbnN0cnVjdG9yKG5vZGVfcCBub2RlKQoreworCXByaXZfcCBwcml2ZGF0YTsKKworCXBy aXZkYXRhID0gbWFsbG9jKHNpemVvZigqcHJpdmRhdGEpLCBNX05FVEdSQVBILAorCQlNX1dBSVQg fCBNX1pFUk8pOworLyoJaWYgKHByaXZkYXRhID09IE5VTEwpCisJCXJldHVybiAoRU5PTUVNKTsK KyovCisJTkdfTk9ERV9TRVRfUFJJVkFURShub2RlLCBwcml2ZGF0YSk7CisJcHJpdmRhdGEtPmlu ID0gTlVMTDsKKwlwcml2ZGF0YS0+b3V0ID0gTlVMTDsKKwlwcml2ZGF0YS0+Y29uZmlnID0gTlVM TDsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CituZ19wYXRjaF9uZXdob29rKG5vZGVf cCBub2RlLCBob29rX3AgaG9vaywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwljb25zdCBwcml2X3Ag cHJpdnAgPSBOR19OT0RFX1BSSVZBVEUobm9kZSk7CisKKwlpZiAoc3RybmNtcChuYW1lLCBOR19Q QVRDSF9IT09LX0lOLAorCSAgICBzdHJsZW4oTkdfUEFUQ0hfSE9PS19JTikpID09IDApIHsKKwkJ cHJpdnAtPmluID0gaG9vazsKKwl9IGVsc2UgaWYgKHN0cm5jbXAobmFtZSwgTkdfUEFUQ0hfSE9P S19PVVQsCisJICAgIHN0cmxlbihOR19QQVRDSF9IT09LX09VVCkpID09IDApIHsKKwkJcHJpdnAt Pm91dCA9IGhvb2s7CisJfSBlbHNlCisJCXJldHVybiAoRUlOVkFMKTsKKwlyZXR1cm4oMCk7Cit9 CisKK3N0YXRpYyBpbnQKK25nX3BhdGNoX3Jjdm1zZyhub2RlX3Agbm9kZSwgaXRlbV9wIGl0ZW0s IGhvb2tfcCBsYXN0aG9vaykKK3sKKwljb25zdCBwcml2X3AgcHJpdnAgPSBOR19OT0RFX1BSSVZB VEUobm9kZSk7CisJc3RydWN0IG5nX21lc2cgKnJlc3AgPSBOVUxMOworCWludCBlcnJvciA9IDA7 CisJc3RydWN0IG5nX21lc2cgKm1zZzsKKwlzdHJ1Y3QgbmdfcGF0Y2hfY29uZmlnICpjb25mOwor CWludCBpLCBjbGVhciA9IDA7CisKKwlOR0lfR0VUX01TRyhpdGVtLCBtc2cpOworCXN3aXRjaCAo bXNnLT5oZWFkZXIudHlwZWNvb2tpZSkgeworCWNhc2UgTkdNX1BBVENIX0NPT0tJRToKKwkJc3dp dGNoIChtc2ctPmhlYWRlci5jbWQpIHsKKwkJY2FzZSBOR01fUEFUQ0hfR0VUQ09ORklHOgorCQkJ aWYgKHByaXZwLT5jb25maWcgPT0gTlVMTCkKKwkJCQlicmVhazsKKwkJCU5HX01LUkVTUE9OU0Uo cmVzcCwgbXNnLCBOR19QQVRDSF9DT05GX1NJWkUocHJpdnAtPmNvbmZpZy0+Y291bnQpLCBNX1dB SVQpOworLyoJCQlpZiAoIXJlc3ApIHsKKwkJCQllcnJvciA9IEVOT01FTTsKKwkJCQlicmVhazsK KwkJCX0KKyovCisJCQliY29weShwcml2cC0+Y29uZmlnLCByZXNwLT5kYXRhLCBOR19QQVRDSF9D T05GX1NJWkUocHJpdnAtPmNvbmZpZy0+Y291bnQpKTsKKwkJCWJyZWFrOworCQljYXNlIE5HTV9Q QVRDSF9TRVRDT05GSUc6CisJCQl7CisJCQl1bmlvbiBwYXRjaF92YWwgKm5ld3ZhbDsKKwkJCXN0 cnVjdCBuZ19wYXRjaF9jb25maWcgKm5ld2NvbmY7CisJCQlpZiAobXNnLT5oZWFkZXIuYXJnbGVu IDwgc2l6ZW9mKHN0cnVjdCBuZ19wYXRjaF9jb25maWcpKSB7CisJCQkJZXJyb3IgPSBFSU5WQUw7 CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWNvbmYgPSAoc3RydWN0IG5nX3BhdGNoX2NvbmZpZyAq KW1zZy0+ZGF0YTsKKwkJCWlmIChtc2ctPmhlYWRlci5hcmdsZW4gPCBOR19QQVRDSF9DT05GX1NJ WkUoY29uZi0+Y291bnQpKSB7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJYnJlYWs7CisJCQl9 CisKKwkJCWZvcihpID0gMDsgaSA8IGNvbmYtPmNvdW50OyBpKyspIHsKKwkJCQlzd2l0Y2goY29u Zi0+b3BzW2ldLmxlbmd0aCkgeworCQkJCWNhc2UgMToKKwkJCQljYXNlIDI6CisJCQkJY2FzZSA0 OgorCQkJCWNhc2UgODoKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJZXJyb3IgPSBF SU5WQUw7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAoZXJyb3IgIT0gMCkKKwkJCQkJYnJl YWs7CisJCQl9CisKKwkJCWNvbmYtPmNzdW1fZmxhZ3MgJj0gQ1NVTV9JUCB8IENTVU1fVENQIHwg Q1NVTV9VRFAgfCBDU1VNX1NDVFA7CisKKwkJCWlmIChlcnJvciA9PSAwKSB7CisJCQkJbmV3Y29u ZiA9IG1hbGxvYyhOR19QQVRDSF9DT05GX1NJWkUoY29uZi0+Y291bnQpLCBNX05FVEdSQVBILCBN X1dBSVQpOworLyoJCQkJaWYgKG5ld2NvbmYgPT0gTlVMTCkgeworCQkJCQllcnJvciA9IEVOT01F TTsKKwkJCQkJYnJlYWs7CisJCQkJfQorKi8KKwkJCQluZXd2YWwgPSBtYWxsb2MoY29uZi0+Y291 bnQgKiBzaXplb2YodW5pb24gcGF0Y2hfdmFsKSwKKwkJCQkgICAgTV9ORVRHUkFQSCwgTV9XQUlU KTsKKy8qCQkJCWlmIChuZXd2YWwgPT0gTlVMTCkgeworCQkJCQllcnJvciA9IEVOT01FTTsKKwkJ CQkJZnJlZShuZXdjb25mLCBNX05FVEdSQVBIKTsKKwkJCQkJYnJlYWs7CisJCQkJfSovCisJCQkJ Zm9yKGkgPSAwOyBpIDwgY29uZi0+Y291bnQ7IGkrKykgeworCQkJCQlzd2l0Y2ggKGNvbmYtPm9w c1tpXS5sZW5ndGgpIHsKKwkJCQkJY2FzZSAxOgorCQkJCQkJbmV3dmFsW2ldLnYxID0gY29uZi0+ b3BzW2ldLnZhbHVlOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgMjoKKwkJCQkJCW5ld3ZhbFtp XS52MiA9IGNvbmYtPm9wc1tpXS52YWx1ZTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDQ6CisJ CQkJCQluZXd2YWxbaV0udjQgPSBjb25mLT5vcHNbaV0udmFsdWU7CisJCQkJCQlicmVhazsKKwkJ CQkJY2FzZSA4OgorCQkJCQkJbmV3dmFsW2ldLnY4ID0gY29uZi0+b3BzW2ldLnZhbHVlOworCQkJ CQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQkJYmNvcHkoY29uZiwgbmV3Y29uZiwgTkdfUEFU Q0hfQ09ORl9TSVpFKGNvbmYtPmNvdW50KSk7CisJCQkJaWYgKHByaXZwLT52YWwgIT0gTlVMTCkK KwkJCQkJZnJlZShwcml2cC0+dmFsLCBNX05FVEdSQVBIKTsKKwkJCQlwcml2cC0+dmFsID0gbmV3 dmFsOworCQkJCWlmIChwcml2cC0+Y29uZmlnICE9IE5VTEwpCisJCQkJCWZyZWUocHJpdnAtPmNv bmZpZywgTV9ORVRHUkFQSCk7CisJCQkJcHJpdnAtPmNvbmZpZyA9IG5ld2NvbmY7CisJCQl9CisJ CQlicmVhazsKKwkJCX0KKwkJY2FzZSBOR01fUEFUQ0hfR0VUQ0xSX1NUQVRTOgorCQkJY2xlYXIg PSAxOworCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJY2FzZSBOR01fUEFUQ0hfR0VUX1NUQVRTOgor CQkJTkdfTUtSRVNQT05TRShyZXNwLCBtc2csIHNpemVvZihzdHJ1Y3QgbmdfcGF0Y2hfc3RhdHMp LCBNX1dBSVQpOworLyoKKwkJCWlmIChyZXNwID09IE5VTEwpCisJCQkJcmV0dXJuIChFTk9NRU0p OworKi8KKwkJCWJjb3B5KCYocHJpdnAtPnN0YXRzKSwgcmVzcC0+ZGF0YSwgc2l6ZW9mKHN0cnVj dCBuZ19wYXRjaF9zdGF0cykpOworCQkJaWYgKGNsZWFyID09IDApCisJCQkJYnJlYWs7CisJCQkv KiBlbHNlIEZBTExUSFJPVUdIICovCisJCWNhc2UgTkdNX1BBVENIX0NMUl9TVEFUUzoKKwkJCWJ6 ZXJvKCYocHJpdnAtPnN0YXRzKSwgc2l6ZW9mKHN0cnVjdCBuZ19wYXRjaF9zdGF0cykpOworCQkJ YnJlYWs7CisJCWRlZmF1bHQ6CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJ CWJyZWFrOworCWRlZmF1bHQ6CisJCWVycm9yID0gRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlO R19SRVNQT05EX01TRyhlcnJvciwgbm9kZSwgaXRlbSwgcmVzcCk7CisJTkdfRlJFRV9NU0cobXNn KTsKKwlyZXR1cm4oZXJyb3IpOworfQorCitzdGF0aWMgdm9pZAorZG9fcGF0Y2gocHJpdl9wIHBy aXZwLCBzdHJ1Y3QgbWJ1ZiAqbSkKK3sKKwl1aW50NjRfdCBidWY7CisJaW50IGksIHBhdGNoZWQg PSAwOworCXN0cnVjdCBuZ19wYXRjaF9jb25maWcgKmNvbmYgPSBwcml2cC0+Y29uZmlnOworCisJ Zm9yKGkgPSAwOyBpIDwgY29uZi0+Y291bnQ7IGkrKykgeworCQlpZiAoY29uZi0+b3BzW2ldLm9m ZnNldCArIGNvbmYtPm9wc1tpXS5sZW5ndGggPiBtLT5tX3BrdGhkci5sZW4pCisJCQljb250aW51 ZTsKKworCQkvKiBmb3IgIj0iIG9wZXJhdGlvbiB3ZSBkb24ndCBuZWVkIHRvIGNvcHkgZGF0YSBm cm9tIG1idWYgKi8KKwkJaWYgKGNvbmYtPm9wc1tpXS5tb2RlICE9IE5HX1BBVENIX01PREVfU0VU KSB7CisJCQltX2NvcHlkYXRhKG0sIGNvbmYtPm9wc1tpXS5vZmZzZXQsCisJCQkgICAgY29uZi0+ b3BzW2ldLmxlbmd0aCwgKGNhZGRyX3QpICZidWYpOworCQl9CisJCQorCQlzd2l0Y2ggKGNvbmYt Pm9wc1tpXS5sZW5ndGgpIHsKKwkJY2FzZSAxOgorCQkJc3dpdGNoIChjb25mLT5vcHNbaV0ubW9k ZSkgeworCQkJY2FzZSBOR19QQVRDSF9NT0RFX1NFVDoKKwkJCQkqKCh1aW50OF90ICopJmJ1Zikg PSBwcml2cC0+dmFsW2ldLnYxOworCQkJCWJyZWFrOworCQkJY2FzZSBOR19QQVRDSF9NT0RFX0FE RDoKKwkJCQkqKCh1aW50OF90ICopJmJ1ZikgKz0gcHJpdnAtPnZhbFtpXS52MTsKKwkJCQlicmVh azsKKwkJCWNhc2UgTkdfUEFUQ0hfTU9ERV9TVUI6CisJCQkJKigodWludDhfdCAqKSZidWYpIC09 IHByaXZwLT52YWxbaV0udjE7CisJCQkJYnJlYWs7CisJCQljYXNlIE5HX1BBVENIX01PREVfTVVM OgorCQkJCSooKHVpbnQ4X3QgKikmYnVmKSAqPSBwcml2cC0+dmFsW2ldLnYxOworCQkJCWJyZWFr OworCQkJY2FzZSBOR19QQVRDSF9NT0RFX0RJVjoKKwkJCQkqKCh1aW50OF90ICopJmJ1ZikgLz0g cHJpdnAtPnZhbFtpXS52MTsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkdfUEFUQ0hfTU9ERV9ORUc6 CisJCQkJKigoaW50OF90ICopJmJ1ZikgPSAtICooKGludDhfdCAqKSZidWYpOworCQkJCWJyZWFr OworCQkJY2FzZSBOR19QQVRDSF9NT0RFX0FORDoKKwkJCQkqKCh1aW50OF90ICopJmJ1ZikgJj0g cHJpdnAtPnZhbFtpXS52MTsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkdfUEFUQ0hfTU9ERV9PUjoK KwkJCQkqKCh1aW50OF90ICopJmJ1ZikgfD0gcHJpdnAtPnZhbFtpXS52MTsKKwkJCQlicmVhazsK KwkJCWNhc2UgTkdfUEFUQ0hfTU9ERV9YT1I6CisJCQkJKigodWludDhfdCAqKSZidWYpIF49IHBy aXZwLT52YWxbaV0udjE7CisJCQkJYnJlYWs7CisJCQljYXNlIE5HX1BBVENIX01PREVfU0hMOgor CQkJCSooKHVpbnQ4X3QgKikmYnVmKSA8PD0gcHJpdnAtPnZhbFtpXS52MTsKKwkJCQlicmVhazsK KwkJCWNhc2UgTkdfUEFUQ0hfTU9ERV9TSFI6CisJCQkJKigodWludDhfdCAqKSZidWYpID4+PSBw cml2cC0+dmFsW2ldLnYxOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgMjoK KwkJCSooKGludDE2X3QgKikmYnVmKSA9ICBudG9ocygqKChpbnQxNl90ICopJmJ1ZikpOworCQkJ c3dpdGNoIChjb25mLT5vcHNbaV0ubW9kZSkgeworCQkJY2FzZSBOR19QQVRDSF9NT0RFX1NFVDoK KwkJCQkqKCh1aW50MTZfdCAqKSZidWYpID0gcHJpdnAtPnZhbFtpXS52MjsKKwkJCQlicmVhazsK KwkJCWNhc2UgTkdfUEFUQ0hfTU9ERV9BREQ6CisJCQkJKigodWludDE2X3QgKikmYnVmKSArPSBw cml2cC0+dmFsW2ldLnYyOworCQkJCWJyZWFrOworCQkJY2FzZSBOR19QQVRDSF9NT0RFX1NVQjoK KwkJCQkqKCh1aW50MTZfdCAqKSZidWYpIC09IHByaXZwLT52YWxbaV0udjI7CisJCQkJYnJlYWs7 CisJCQljYXNlIE5HX1BBVENIX01PREVfTVVMOgorCQkJCSooKHVpbnQxNl90ICopJmJ1ZikgKj0g cHJpdnAtPnZhbFtpXS52MjsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkdfUEFUQ0hfTU9ERV9ESVY6 CisJCQkJKigodWludDE2X3QgKikmYnVmKSAvPSBwcml2cC0+dmFsW2ldLnYyOworCQkJCWJyZWFr OworCQkJY2FzZSBOR19QQVRDSF9NT0RFX05FRzoKKwkJCQkqKChpbnQxNl90ICopJmJ1ZikgPSAt ICooKGludDE2X3QgKikmYnVmKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkdfUEFUQ0hfTU9ERV9B TkQ6CisJCQkJKigodWludDE2X3QgKikmYnVmKSAmPSBwcml2cC0+dmFsW2ldLnYyOworCQkJCWJy ZWFrOworCQkJY2FzZSBOR19QQVRDSF9NT0RFX09SOgorCQkJCSooKHVpbnQxNl90ICopJmJ1Zikg fD0gcHJpdnAtPnZhbFtpXS52MjsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkdfUEFUQ0hfTU9ERV9Y T1I6CisJCQkJKigodWludDE2X3QgKikmYnVmKSBePSBwcml2cC0+dmFsW2ldLnYyOworCQkJCWJy ZWFrOworCQkJY2FzZSBOR19QQVRDSF9NT0RFX1NITDoKKwkJCQkqKCh1aW50MTZfdCAqKSZidWYp IDw8PSBwcml2cC0+dmFsW2ldLnYyOworCQkJCWJyZWFrOworCQkJY2FzZSBOR19QQVRDSF9NT0RF X1NIUjoKKwkJCQkqKCh1aW50MTZfdCAqKSZidWYpID4+PSBwcml2cC0+dmFsW2ldLnYyOworCQkJ CWJyZWFrOworCQkJfQorCQkJKigoaW50MTZfdCAqKSZidWYpID0gIGh0b25zKCooKGludDE2X3Qg KikmYnVmKSk7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJKigoaW50MzJfdCAqKSZidWYpID0g IG50b2hsKCooKGludDMyX3QgKikmYnVmKSk7CisJCQlzd2l0Y2ggKGNvbmYtPm9wc1tpXS5tb2Rl KSB7CisJCQljYXNlIE5HX1BBVENIX01PREVfU0VUOgorCQkJCSooKHVpbnQzMl90ICopJmJ1Zikg PSBwcml2cC0+dmFsW2ldLnY0OworCQkJCWJyZWFrOworCQkJY2FzZSBOR19QQVRDSF9NT0RFX0FE RDoKKwkJCQkqKCh1aW50MzJfdCAqKSZidWYpICs9IHByaXZwLT52YWxbaV0udjQ7CisJCQkJYnJl YWs7CisJCQljYXNlIE5HX1BBVENIX01PREVfU1VCOgorCQkJCSooKHVpbnQzMl90ICopJmJ1Zikg LT0gcHJpdnAtPnZhbFtpXS52NDsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkdfUEFUQ0hfTU9ERV9N VUw6CisJCQkJKigodWludDMyX3QgKikmYnVmKSAqPSBwcml2cC0+dmFsW2ldLnY0OworCQkJCWJy ZWFrOworCQkJY2FzZSBOR19QQVRDSF9NT0RFX0RJVjoKKwkJCQkqKCh1aW50MzJfdCAqKSZidWYp IC89IHByaXZwLT52YWxbaV0udjQ7CisJCQkJYnJlYWs7CisJCQljYXNlIE5HX1BBVENIX01PREVf TkVHOgorCQkJCSooKGludDMyX3QgKikmYnVmKSA9IC0gKigoaW50MzJfdCAqKSZidWYpOworCQkJ CWJyZWFrOworCQkJY2FzZSBOR19QQVRDSF9NT0RFX0FORDoKKwkJCQkqKCh1aW50MzJfdCAqKSZi dWYpICY9IHByaXZwLT52YWxbaV0udjQ7CisJCQkJYnJlYWs7CisJCQljYXNlIE5HX1BBVENIX01P REVfT1I6CisJCQkJKigodWludDMyX3QgKikmYnVmKSB8PSBwcml2cC0+dmFsW2ldLnY0OworCQkJ CWJyZWFrOworCQkJY2FzZSBOR19QQVRDSF9NT0RFX1hPUjoKKwkJCQkqKCh1aW50MzJfdCAqKSZi dWYpIF49IHByaXZwLT52YWxbaV0udjQ7CisJCQkJYnJlYWs7CisJCQljYXNlIE5HX1BBVENIX01P REVfU0hMOgorCQkJCSooKHVpbnQzMl90ICopJmJ1ZikgPDw9IHByaXZwLT52YWxbaV0udjQ7CisJ CQkJYnJlYWs7CisJCQljYXNlIE5HX1BBVENIX01PREVfU0hSOgorCQkJCSooKHVpbnQzMl90ICop JmJ1ZikgPj49IHByaXZwLT52YWxbaV0udjQ7CisJCQkJYnJlYWs7CisJCQl9CisJCQkqKChpbnQz Ml90ICopJmJ1ZikgPSAgaHRvbmwoKigoaW50MzJfdCAqKSZidWYpKTsKKwkJCWJyZWFrOworCQlj YXNlIDg6CisJCQkqKChpbnQ2NF90ICopJmJ1ZikgPSAgYmU2NHRvaCgqKChpbnQ2NF90ICopJmJ1 ZikpOworCQkJc3dpdGNoIChjb25mLT5vcHNbaV0ubW9kZSkgeworCQkJY2FzZSBOR19QQVRDSF9N T0RFX1NFVDoKKwkJCQkqKCh1aW50NjRfdCAqKSZidWYpID0gcHJpdnAtPnZhbFtpXS52ODsKKwkJ CQlicmVhazsKKwkJCWNhc2UgTkdfUEFUQ0hfTU9ERV9BREQ6CisJCQkJKigodWludDY0X3QgKikm YnVmKSArPSBwcml2cC0+dmFsW2ldLnY4OworCQkJCWJyZWFrOworCQkJY2FzZSBOR19QQVRDSF9N T0RFX1NVQjoKKwkJCQkqKCh1aW50NjRfdCAqKSZidWYpIC09IHByaXZwLT52YWxbaV0udjg7CisJ CQkJYnJlYWs7CisJCQljYXNlIE5HX1BBVENIX01PREVfTVVMOgorCQkJCSooKHVpbnQ2NF90ICop JmJ1ZikgKj0gcHJpdnAtPnZhbFtpXS52ODsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkdfUEFUQ0hf TU9ERV9ESVY6CisJCQkJKigodWludDY0X3QgKikmYnVmKSAvPSBwcml2cC0+dmFsW2ldLnY4Owor CQkJCWJyZWFrOworCQkJY2FzZSBOR19QQVRDSF9NT0RFX05FRzoKKwkJCQkqKChpbnQ2NF90ICop JmJ1ZikgPSAtICooKGludDY0X3QgKikmYnVmKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkdfUEFU Q0hfTU9ERV9BTkQ6CisJCQkJKigodWludDY0X3QgKikmYnVmKSAmPSBwcml2cC0+dmFsW2ldLnY4 OworCQkJCWJyZWFrOworCQkJY2FzZSBOR19QQVRDSF9NT0RFX09SOgorCQkJCSooKHVpbnQ2NF90 ICopJmJ1ZikgfD0gcHJpdnAtPnZhbFtpXS52ODsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkdfUEFU Q0hfTU9ERV9YT1I6CisJCQkJKigodWludDY0X3QgKikmYnVmKSBePSBwcml2cC0+dmFsW2ldLnY4 OworCQkJCWJyZWFrOworCQkJY2FzZSBOR19QQVRDSF9NT0RFX1NITDoKKwkJCQkqKCh1aW50NjRf dCAqKSZidWYpIDw8PSBwcml2cC0+dmFsW2ldLnY4OworCQkJCWJyZWFrOworCQkJY2FzZSBOR19Q QVRDSF9NT0RFX1NIUjoKKwkJCQkqKCh1aW50NjRfdCAqKSZidWYpID4+PSBwcml2cC0+dmFsW2ld LnY4OworCQkJCWJyZWFrOworCQkJfQorCQkJKigoaW50NjRfdCAqKSZidWYpID0gIGh0b2JlNjQo KigoaW50NjRfdCAqKSZidWYpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJbV9jb3B5YmFjayhtLCBj b25mLT5vcHNbaV0ub2Zmc2V0LCBjb25mLT5vcHNbaV0ubGVuZ3RoLAorCQkgICAgKGNfY2FkZHJf dCkgJmJ1Zik7CisJCXBhdGNoZWQgPSAxOworCX0KKwlpZiAocGF0Y2hlZCA+IDApCisJCXByaXZw LT5zdGF0cy5wYXRjaGVkKys7Cit9CisKK3N0YXRpYyBpbnQKK25nX3BhdGNoX3JjdmRhdGEoaG9v a19wIGhvb2ssIGl0ZW1fcCBpdGVtKQoreworCWNvbnN0IHByaXZfcCBwcml2ID0gTkdfTk9ERV9Q UklWQVRFKE5HX0hPT0tfTk9ERShob29rKSk7CisJaW50IGVycm9yOworCXN0cnVjdCBtYnVmICpt OworCWhvb2tfcCB0YXJnZXQ7CisJcHJpdi0+c3RhdHMucmVjZWl2ZWQrKzsKKworCU5HSV9HRVRf TShpdGVtLCBtKTsKKwlpZiAocHJpdi0+Y29uZmlnICE9IE5VTEwgJiYgaG9vayA9PSBwcml2LT5p biAmJgorCSAgICAobS0+bV9mbGFncyAmIE1fUEtUSERSKSAhPSAwKSB7CisJCW0gPSBtX3Vuc2hh cmUobSxNX05PV0FJVCk7CisJCWlmIChtID09IE5VTEwpIHsKKwkJCXByaXYtPnN0YXRzLmRyb3Bw ZWQrKzsKKwkJCU5HX0ZSRUVfSVRFTShpdGVtKTsKKwkJCXJldHVybiAoRU5PTUVNKTsKKwkJfQor CQlkb19wYXRjaChwcml2LCBtKTsKKwkJbS0+bV9mbGFncyB8PSBwcml2LT5jb25maWctPmNzdW1f ZmxhZ3M7CisJfQorCisJdGFyZ2V0ID0gTlVMTDsKKwlpZiAoaG9vayA9PSBwcml2LT5pbikgewor CQlpZiAocHJpdi0+b3V0ICE9IE5VTEwpCisJCQl0YXJnZXQgPSBwcml2LT5vdXQ7CisJCWVsc2UK KwkJCXRhcmdldCA9IHByaXYtPmluOyAvKiByZXR1cm4gZnJhbWVzIG9uICdpbicgaG9vayBpZiAn b3V0JyBub3QgY29ubmVjdGVkKi8KKwl9CisJaWYgKGhvb2sgPT0gcHJpdi0+b3V0ICYmIHByaXYt PmluICE9IE5VTEwpCisJCXRhcmdldCA9IHByaXYtPmluOworCisJaWYgKHRhcmdldCA9PSBOVUxM KSB7CisJCXByaXYtPnN0YXRzLmRyb3BwZWQrKzsKKwkJTkdfRlJFRV9JVEVNKGl0ZW0pOworCQlO R19GUkVFX00obSk7CisJCXJldHVybiAoMCk7CisJfQorCisJTkdfRldEX05FV19EQVRBKGVycm9y LCBpdGVtLCB0YXJnZXQsIG0pOworCisJcmV0dXJuIChlcnJvcik7Cit9CisKK3N0YXRpYyBpbnQK K25nX3BhdGNoX3NodXRkb3duKG5vZGVfcCBub2RlKQoreworCWNvbnN0IHByaXZfcCBwcml2ZGF0 YSA9IE5HX05PREVfUFJJVkFURShub2RlKTsKKworCWlmIChwcml2ZGF0YS0+dmFsICE9IE5VTEwp CisJCWZyZWUocHJpdmRhdGEtPnZhbCwgTV9ORVRHUkFQSCk7CisJaWYgKHByaXZkYXRhLT5jb25m aWcgIT0gTlVMTCkKKwkJZnJlZShwcml2ZGF0YS0+Y29uZmlnLCBNX05FVEdSQVBIKTsKKwlOR19O T0RFX1NFVF9QUklWQVRFKG5vZGUsIE5VTEwpOworCU5HX05PREVfVU5SRUYobm9kZSk7CisJZnJl ZShwcml2ZGF0YSwgTV9ORVRHUkFQSCk7CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAor bmdfcGF0Y2hfZGlzY29ubmVjdChob29rX3AgaG9vaykKK3sKKwlwcml2X3AgcHJpdiA9IE5HX05P REVfUFJJVkFURShOR19IT09LX05PREUoaG9vaykpOworCisJaWYgKGhvb2sgPT0gcHJpdi0+aW4p IHsKKwkJcHJpdi0+aW4gPSBOVUxMOworCX0KKwlpZiAoaG9vayA9PSBwcml2LT5vdXQpIHsKKwkJ cHJpdi0+b3V0ID0gTlVMTDsKKwl9CisJaWYgKChOR19OT0RFX05VTUhPT0tTKE5HX0hPT0tfTk9E RShob29rKSkgPT0gMCkKKwkmJiAoTkdfTk9ERV9JU19WQUxJRChOR19IT09LX05PREUoaG9vaykp KSkgLyogYWxyZWFkeSBzaHV0dGluZyBkb3duPyAqLworCQluZ19ybW5vZGVfc2VsZihOR19IT09L X05PREUoaG9vaykpOworCXJldHVybiAoMCk7Cit9CkluZGV4OiBzeXMvbmV0Z3JhcGgvbmdfcGF0 Y2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSBzeXMvbmV0Z3JhcGgvbmdfcGF0Y2guaAkocmV2aXNpb24gMCkK KysrIHN5cy9uZXRncmFwaC9uZ19wYXRjaC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNCBA QAorLyoKKyAqIG5nX3BhdGNoLmgKKyAqLworCisvKi0KKyAqICAgQ29weXJpZ2h0IChDKSAyMDEw IGJ5IE1heGltIElnbmF0ZW5rbworICogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKgorICogICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQgICAgKgorICogICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0 dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zICAgKgorICogICAgYXJl IG1ldDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgICAgKgorICogICAgICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAgICAgKgorICog ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQgKgorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluICAgKgorICogICAgICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSAgICAgICAg KgorICogICAgICAgZGlzdHJpYnV0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU T1JTICAgKgorICogICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgQlVUIE5PVCAgICAgKgorICogICBMSU1JVEVEIFRPLCBUSEUgSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgKgorICogICBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF IENPUFlSSUdIVCAgKgorICogICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgKgorICogICBTUEVDSUFMLCBFWEVNUExB UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UICAgICAgKgor ICogICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ Q0VTOyBMT1NTIE9GIFVTRSwgKgorICogICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgKgorICogICBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU ICAgKgorICogICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgKgorICogICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgKgorICoKKyAqIEF1 dGhvcjogTWF4aW0gSWduYXRlbmtvIDxnZWxyYWVuLnVhQGdtYWlsLmNvbT4KKyAqCisgKiAkRnJl ZUJTRCQKKyAqLworCisjaWZuZGVmIF9ORVRHUkFQSF9OR19QQVRDSF9IXworI2RlZmluZSBfTkVU R1JBUEhfTkdfUEFUQ0hfSF8KKworLyogTm9kZSB0eXBlIG5hbWUuICovCisjZGVmaW5lIE5HX1BB VENIX05PREVfVFlQRQkicGF0Y2giCisKKy8qIE5vZGUgdHlwZSBjb29raWUuICovCisjZGVmaW5l IE5HTV9QQVRDSF9DT09LSUUJMTI2MjQ0NTUwOQorCisvKiBIb29rIG5hbWVzICovCisjZGVmaW5l IE5HX1BBVENIX0hPT0tfSU4JImluIgorI2RlZmluZSBOR19QQVRDSF9IT09LX09VVAkib3V0Igor CisvKiBOZXRncmFwaCBjb21tYW5kcyB1bmRlcnN0b29kIGJ5IHRoaXMgbm9kZSB0eXBlICovCitl bnVtIHsKKwlOR01fUEFUQ0hfU0VUQ09ORklHID0gMSwKKwlOR01fUEFUQ0hfR0VUQ09ORklHLAor CU5HTV9QQVRDSF9HRVRfU1RBVFMsCisJTkdNX1BBVENIX0NMUl9TVEFUUywKKwlOR01fUEFUQ0hf R0VUQ0xSX1NUQVRTCit9OworCisvKiBQYXRjaGluZyBtb2RlcyAqLworZW51bSB7CisJTkdfUEFU Q0hfTU9ERV9TRVQgPSAxLAorCU5HX1BBVENIX01PREVfQUREID0gMiwKKwlOR19QQVRDSF9NT0RF X1NVQiA9IDMsCisJTkdfUEFUQ0hfTU9ERV9NVUwgPSA0LAorCU5HX1BBVENIX01PREVfRElWID0g NSwKKwlOR19QQVRDSF9NT0RFX05FRyA9IDYsCisJTkdfUEFUQ0hfTU9ERV9BTkQgPSA3LAorCU5H X1BBVENIX01PREVfT1IgPSA4LAorCU5HX1BBVENIX01PREVfWE9SID0gOSwKKwlOR19QQVRDSF9N T0RFX1NITCA9IDEwLAorCU5HX1BBVENIX01PREVfU0hSID0gMTEKK307CisKK3N0cnVjdCBuZ19w YXRjaF9vcCB7CisJdWludDY0X3QJdmFsdWU7CisJdWludDMyX3QJb2Zmc2V0OworCXVpbnQxNl90 CWxlbmd0aDsJLyogMSwyLDQgb3IgOCAoYnl0ZXMpICovCisJdWludDE2X3QJbW9kZTsKK307CisK KyNkZWZpbmUgTkdfUEFUQ0hfT1BfVFlQRV9JTkZPCXsJXAorCQl7ICJ2YWx1ZSIsCSZuZ19wYXJz ZV91aW50NjRfdHlwZQl9LAlcCisJCXsgIm9mZnNldCIsCSZuZ19wYXJzZV91aW50MzJfdHlwZQl9 LAlcCisJCXsgImxlbmd0aCIsCSZuZ19wYXJzZV91aW50MTZfdHlwZQl9LAlcCisJCXsgIm1vZGUi LAkmbmdfcGFyc2VfdWludDE2X3R5cGUJfSwJXAorCQl7IE5VTEwgfSBcCit9CisKK3N0cnVjdCBu Z19wYXRjaF9jb25maWcgeworCXVpbnQzMl90CWNvdW50OworCXVpbnQzMl90CWNzdW1fZmxhZ3M7 CisJc3RydWN0IG5nX3BhdGNoX29wCW9wc1tdOworfTsKKworI2RlZmluZSBOR19QQVRDSF9DT05G SUdfVFlQRV9JTkZPCXsJXAorCQl7ICJjb3VudCIsCSZuZ19wYXJzZV91aW50MzJfdHlwZQl9LAlc CisJCXsgImNzdW1fZmxhZ3MiLAkmbmdfcGFyc2VfdWludDMyX3R5cGUJfSwJXAorCQl7ICJvcHMi LAkmbmdfcGF0Y2hfY29uZmFycl90eXBlCX0sCVwKKwkJeyBOVUxMIH0gXAorfQorCitzdHJ1Y3Qg bmdfcGF0Y2hfc3RhdHMgeworCXVpbnQ2NF90CXJlY2VpdmVkOworCXVpbnQ2NF90CXBhdGNoZWQ7 CisJdWludDY0X3QJZHJvcHBlZDsKK307CisKKyNkZWZpbmUgTkdfUEFUQ0hfU1RBVFNfVFlQRV9J TkZPIHsJXAorCQl7ICJyZWNlaXZlZCIsCSZuZ19wYXJzZV91aW50NjRfdHlwZQl9LAlcCisJCXsg InBhdGNoZWQiLAkmbmdfcGFyc2VfdWludDY0X3R5cGUJfSwJXAorCQl7ICJkcm9wcGVkIiwJJm5n X3BhcnNlX3VpbnQ2NF90eXBlCX0sCVwKKwkJeyBOVUxMIH0gXAorfQorCisjZW5kaWYgLyogX05F VEdSQVBIX05HX1BBVENIX0hfICovCkluZGV4OiBzeXMvbW9kdWxlcy9uZXRncmFwaC9wYXRjaC9N YWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvbW9kdWxlcy9uZXRncmFwaC9wYXRjaC9NYWtlZmls ZQkocmV2aXNpb24gMCkKKysrIHN5cy9tb2R1bGVzL25ldGdyYXBoL3BhdGNoL01ha2VmaWxlCShy ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKKyMgJEZyZWVCU0QkCisKK0tNT0Q9CW5nX3BhdGNo CitTUkNTPSAJbmdfcGF0Y2guYworCisuaW5jbHVkZSA8YnNkLmttb2QubWs+Cg== --0016e6d77f74e05a000486cfb045--