Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pIXzc-0000ii-Hy for pgsql-hackers@arkaria.postgresql.org; Thu, 19 Jan 2023 16:42:25 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pIXzb-00055M-Eq for pgsql-hackers@arkaria.postgresql.org; Thu, 19 Jan 2023 16:42:23 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pIXza-00054R-T0 for pgsql-hackers@lists.postgresql.org; Thu, 19 Jan 2023 16:42:23 +0000 Received: from mail-40134.protonmail.ch ([185.70.40.134]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pIXzR-0006h6-I3 for pgsql-hackers@lists.postgresql.org; Thu, 19 Jan 2023 16:42:22 +0000 Date: Thu, 19 Jan 2023 16:42:06 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pm.me; s=protonmail3; t=1674146529; x=1674405729; bh=cWMt+yCESQqv1aL2d1VMrH/2xf9lVnIv9XubzTGsCS4=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector; b=VZVUVe0q9bvz0Mbe0ka2LqTVuqnmJgqf5CA0NxZLvUxB4dK00AKrhRgelzAQmn6uJ MB8hq7aeLnaXxIrVsLGN2tzK/H8k3dowqKYSAqxkXjE6++t6rco0OxCpHdQhf3yaKw bKtsjQxZNEQwfYEIBvTSZNP9aNW6JSN4XVJyEBLWirqqFPI4hOe5H9Se2ZTwUXHZpG K/4wg7CoVV2K4+gLTf6J/i45UvrRdY89uWKA7rWZVZm5nYhS6KKe4TyYBSLOimBuao Lc+elg2aqz1tJPTFf0q53ujkEeN2rx6sqzwkiTrqqzaCfHEJqig1bNtp08ra4/10Y5 3nM7aTnr4r3Dg== To: Tomas Vondra From: gkokolatos@pm.me Cc: Michael Paquier , Justin Pryzby , pgsql-hackers@lists.postgresql.org, Rachel Heaton Subject: Re: Add LZ4 compression in pg_dump Message-ID: <7zu6GYFi72jByVk2SEe_nd8r1DHhwA35vSntAE9sAfiMX9Lfk6bwimkwmu7GDgYaEvL27SE4qF1uK4_LHWQM4H-SXOwkMAI-GV8PKGmED_E=@pm.me> In-Reply-To: <6ab89d42-0345-b96e-02d4-68e171cdbe03@enterprisedb.com> References: <20230114214308.GC9837@telsasoft.com> <20230116015625.GH9837@telsasoft.com> <41036470-041b-08a3-469d-fe07de2bc58e@enterprisedb.com> <6ab89d42-0345-b96e-02d4-68e171cdbe03@enterprisedb.com> Feedback-ID: 6383013:user:proton MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_K2qqM7t42dUIRepy8KMEQ6vZbE1YknGEILBowG8gVDk" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --b1_K2qqM7t42dUIRepy8KMEQ6vZbE1YknGEILBowG8gVDk Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable ------- Original Message ------- On Thursday, January 19th, 2023 at 4:45 PM, Tomas Vondra wrote: >=20 >=20 > On 1/18/23 20:05, gkokolatos@pm.me wrote: >=20 > > ------- Original Message ------- > > On Wednesday, January 18th, 2023 at 3:00 PM, Tomas Vondra tomas.vondra@= enterprisedb.com wrote: > >=20 > > > Hi, > > >=20 > > > On 1/16/23 16:14, gkokolatos@pm.me wrote: > > >=20 > > > > Hi, > > > >=20 > > > > I admit I am completely at lost as to what is expected from me anym= ore. > >=20 > > > >=20 > > > Unfortunately, this plays against this patch - I'm certainly in favor= of > > > adding lz4 (and other compression algos) into pg_dump, but if I commi= t > > > 0001 we get little benefit, and the other parts actually adding lz4/z= std > > > are treated as "WIP / for completeness" so it's unclear when we'd get= to > > > commit them. > >=20 > > Thank you for your kindness and for taking the time to explain. > >=20 > > > So if I could recommend one thing, it'd be to get at least one of tho= se > > > WIP patches into a shape that's likely committable right after 0001. > >=20 > > This was clearly my fault. I misunderstood a suggestion upthread to foc= us > > on the first patch of the series and ignore documentation and comments = on > > the rest. > >=20 > > Please find v21 to contain 0002 and 0003 in a state which I no longer c= onsider > > as WIP but worthy of proper consideration. Some guidance on where is be= st to add > > documentation in 0002 for the function pointers in CompressFileHandle w= ill > > be welcomed. >=20 >=20 > This is internal-only API, not meant for use by regular users and/or > extension authors, so I don't think we need sgml docs. I'd just add > regular code-level documentation to compress_io.h. >=20 > For inspiration see docs for "struct ReorderBuffer" in reorderbuffer.h, > or "struct _archiveHandle" in pg_backup_archiver.h. >=20 > Or what other kind of documentation you had in mind? This is exactly what I was after. I was between compress_io.c and compress_= io.h. Thank you. > > > > I had posted v19-0001 for a committer's consideration and v19-000{2= ,3} for completeness. > > > > Please find a rebased v20 attached. > > >=20 > > > I took a quick look at 0001, so a couple comments (sorry if some of t= his > > > was already discussed in the thread): > >=20 > > Much appreciated! > >=20 > > > 1) I don't think a "refactoring" patch should reference particular > > > compression algorithms (lz4/zstd), and in particular I don't think we > > > should have "not yet implemented" messages. We only have a couple oth= er > > > places doing that, when we didn't have a better choice. But here we c= an > > > simply reject the algorithm when parsing the options, we don't need t= o > > > do that in a dozen other places. > >=20 > > I have now removed lz4/zstd from where they were present with the excep= tion > > of pg_dump.c which is responsible for parsing. >=20 >=20 > I'm not sure I understand why leave the lz4/zstd in this place? You are right, it is not obvious. Those were added in 5e73a60488 which is already committed in master and I didn't want to backtrack. Of course, I am not opposing in doing so if you wish. >=20 > > > 2) I wouldn't reorder the cases in WriteDataToArchive, i.e. I'd keep > > > "none" at the end. It might make backpatches harder. > >=20 > > Agreed. However a 'default' is needed in order to avoid compilation war= nings. > > Also note that 0002 completely does away with cases within WriteDataToA= rchive. >=20 >=20 > OK, although that's also a consequence of using a "switch" instead of > plan "if" branches. >=20 > Furthermore, I'm not sure we really need the pg_fatal() about invalid > compression method in these default blocks. I mean, how could we even > get to these places when the build does not support the algorithm? All > of this (ReadDataFromArchive, WriteDataToArchive, EndCompressor, ...) > happens looong after the compressor was initialized and the method > checked, no? So maybe either this should simply do Assert(false) or use > a different error message. I like Assert(false). > > > 3) While building, I get bunch of warnings about missing cfdopen() > > > prototype and pg_backup_archiver.c not knowing about cfdopen() and > > > adding an implicit prototype (so I doubt it actually works). > >=20 > > Fixed. cfdopen() got prematurely introduced in 5e73a6048 and then got r= emoved > > in 69fb29d1af. v20 failed to properly take 69fb29d1af in consideration.= Note > > that cfdopen is removed in 0002 which explains why cfbot didn't complai= n. >=20 >=20 > OK. >=20 > > > 4) "cfp" struct no longer wraps gzFile, but the comment was not updat= ed. > > > FWIW I'm not sure switching to "void *" is an improvement, maybe it'd= be > > > better to have a "union" of correct types? > >=20 > > Please find and updated comment and a union in place of the void *. Als= o > > note that 0002 completely does away with cfp in favour of a new struct > > CompressFileHandle. I maintained the void * there because it is used by > > private methods of the compressors. 0003 contains such an example with > > LZ4CompressorState. >=20 >=20 > I wonder if this (and also the previous item) makes sense to keep 0001 > and 0002 or to combine them. The "intermediate" state is a bit annoying. Agreed. It was initially submitted as one patch. Then it was requested to b= e split up in two parts, one to expand the use of the existing API and one to replace with the new interface. Unfortunately the expansion of usage of the existing API requires some tweaking, but that is not a very good reason for the current patch set. I should have done a better job there. Please find v22 attach which combines back 0001 and 0002. It is missing the documentation that was discussed above as I wanted to give a quick feedback= . Let me know if you think that the combined version is the one to move forwa= rd with. Cheers, //Georgios >=20 > > > 5) cfopen/cfdopen are missing comments. cfopen_internal has an update= d > > > comment, but that's a static function while cfopen/cfdopen are the > > > actual API. > >=20 > > Added comments to cfopen/cfdopen. >=20 >=20 > OK. >=20 >=20 > regards >=20 > -- > Tomas Vondra > EnterpriseDB: http://www.enterprisedb.com > The Enterprise PostgreSQL Company --b1_K2qqM7t42dUIRepy8KMEQ6vZbE1YknGEILBowG8gVDk Content-Type: text/x-patch; name=v22-0002-Add-LZ4-compression-to-pg_dump.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v22-0002-Add-LZ4-compression-to-pg_dump.patch RnJvbSA0ODQ1MWQyMzE2YTcwMTZiZmIyODI0YzMzYmEzODU5NGVjMDM5NTNlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFdlZCwgMTggSmFuIDIwMjMgMTg6MTU6NDIgKzAwMDAKU3ViamVjdDogW1BBVENIIHYy MiAyLzJdIEFkZCBMWjQgY29tcHJlc3Npb24gdG8gcGdfZHVtcAoKVGhpcyBpcyBtb3N0bHkgZG9u ZSB3aXRoaW4gcGdfZHVtcCdzIGNvbXByZXNzaW9uIHN0cmVhbWluZyBhbmQgZmlsZSBBUElzLgpJ dCBpcyBjb25maW5lZCB3aXRoaW4gdGhlIG5ld2x5IGludHJvZHVjZWQgY29tcHJlc3NfbHo0Lntj LGh9IGZpbGVzLgoKVGhlIGZpcnN0IG9uZSwgaXMgYWltZWQgYXQgaW5saW5lZCB1c2UgY2FzZXMg YW5kIHRodXMgc2ltcGxlCmx6NC5oIGNhbGxzIGNhbiBiZSB1c2VkIGRpcmVjdGx5LiBUaGUgc2Vj b25kIG9uZSBpcyBnZW5lcmF0aW5nIG91dHB1dCwgb3IgaXMKcGFyc2luZyBpbnB1dCwgd2hpY2gg Y2FuIGJlIHJlYWQvZ2VuZXJhdGVkIHZpYSB0aGUgbHo0IHV0aWxpdHkuCgpXaGVyZXZlciB0aGUg TFo0RiBhcGkgZG9lcyBub3QgaW1wbGVtZW50IGFsbCB0aGUgZnVuY3Rpb25hbGl0eSBjb3JyZXNw b25kaW5nCnRvIGZyZWFkKCksIGZ3cml0ZSgpLCBmZ2V0cygpLCBmZ2V0YygpLCBmZW9mKCksIGFu ZCBmY2xvc2UoKSwgaXQgaGFzIGJlZW4KaW1wbGVtZW50ZWQgbG9jYWx5LgotLS0KIGRvYy9zcmMv c2dtbC9yZWYvcGdfZHVtcC5zZ21sICAgICAgICB8ICAxMyArLQogc3JjL2Jpbi9wZ19kdW1wL01h a2VmaWxlICAgICAgICAgICAgIHwgICAyICsKIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5j ICAgICAgICB8ICAyMiArLQogc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5jICAgICAgIHwg NjE4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNz X2x6NC5oICAgICAgIHwgIDIyICsKIHNyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCAgICAgICAg ICB8ICAgOCArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jIHwgIDE0ICst CiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgfCAgIDUgKy0KIHNyYy9iaW4v cGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsICAgICB8ICA4MiArKystCiBzcmMvdG9vbHMvcGdpbmNs dWRlL2NwbHVzcGx1c2NoZWNrICAgfCAgIDEgKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QgICAgIHwgICAxICsKIDExIGZpbGVzIGNoYW5nZWQsIDc3MCBpbnNlcnRpb25zKCspLCAx OCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAvY29tcHJl c3NfbHo0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0 LmgKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXAuc2dtbCBiL2RvYy9zcmMv c2dtbC9yZWYvcGdfZHVtcC5zZ21sCmluZGV4IDJjOTM4Y2Q3ZTEuLjQ5ZDIxODkwNWYgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9y ZWYvcGdfZHVtcC5zZ21sCkBAIC0zMzAsOSArMzMwLDEwIEBAIFBvc3RncmVTUUwgZG9jdW1lbnRh dGlvbgogICAgICAgICAgICBtYWNoaW5lLXJlYWRhYmxlIGZvcm1hdCB0aGF0IDxhcHBsaWNhdGlv bj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4KICAgICAgICAgICAgY2FuIHJlYWQuIEEgZGlyZWN0 b3J5IGZvcm1hdCBhcmNoaXZlIGNhbiBiZSBtYW5pcHVsYXRlZCB3aXRoCiAgICAgICAgICAgIHN0 YW5kYXJkIFVuaXggdG9vbHM7IGZvciBleGFtcGxlLCBmaWxlcyBpbiBhbiB1bmNvbXByZXNzZWQg YXJjaGl2ZQotICAgICAgICAgICBjYW4gYmUgY29tcHJlc3NlZCB3aXRoIHRoZSA8YXBwbGljYXRp b24+Z3ppcDwvYXBwbGljYXRpb24+IHRvb2wuCi0gICAgICAgICAgIFRoaXMgZm9ybWF0IGlzIGNv bXByZXNzZWQgYnkgZGVmYXVsdCBhbmQgYWxzbyBzdXBwb3J0cyBwYXJhbGxlbAotICAgICAgICAg ICBkdW1wcy4KKyAgICAgICAgICAgY2FuIGJlIGNvbXByZXNzZWQgd2l0aCB0aGUgPGFwcGxpY2F0 aW9uPmd6aXA8L2FwcGxpY2F0aW9uPiBvcgorICAgICAgICAgICA8YXBwbGljYXRpb24+bHo0PC9h cHBsaWNhdGlvbj50b29sLgorICAgICAgICAgICBUaGlzIGZvcm1hdCBpcyBjb21wcmVzc2VkIGJ5 IGRlZmF1bHQgdXNpbmcgPGxpdGVyYWw+Z3ppcDwvbGl0ZXJhbD4KKyAgICAgICAgICAgYW5kIGFs c28gc3VwcG9ydHMgcGFyYWxsZWwgZHVtcHMuCiAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAg PC9saXN0aXRlbT4KICAgICAgICAgPC92YXJsaXN0ZW50cnk+CkBAIC02NTQsNyArNjU1LDcgQEAg UG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICAgPHBhcmE+CiAgICAgICAgIFNwZWNpZnkg dGhlIGNvbXByZXNzaW9uIG1ldGhvZCBhbmQvb3IgdGhlIGNvbXByZXNzaW9uIGxldmVsIHRvIHVz ZS4KICAgICAgICAgVGhlIGNvbXByZXNzaW9uIG1ldGhvZCBjYW4gYmUgc2V0IHRvIDxsaXRlcmFs Pmd6aXA8L2xpdGVyYWw+IG9yCi0gICAgICAgIDxsaXRlcmFsPm5vbmU8L2xpdGVyYWw+IGZvciBu byBjb21wcmVzc2lvbi4KKyAgICAgICAgPGxpdGVyYWw+bHo0PC9saXRlcmFsPiBvciA8bGl0ZXJh bD5ub25lPC9saXRlcmFsPiBmb3Igbm8gY29tcHJlc3Npb24uCiAgICAgICAgIEEgY29tcHJlc3Np b24gZGV0YWlsIHN0cmluZyBjYW4gb3B0aW9uYWxseSBiZSBzcGVjaWZpZWQuICBJZiB0aGUKICAg ICAgICAgZGV0YWlsIHN0cmluZyBpcyBhbiBpbnRlZ2VyLCBpdCBzcGVjaWZpZXMgdGhlIGNvbXBy ZXNzaW9uIGxldmVsLgogICAgICAgICBPdGhlcndpc2UsIGl0IHNob3VsZCBiZSBhIGNvbW1hLXNl cGFyYXRlZCBsaXN0IG9mIGl0ZW1zLCBlYWNoIG9mIHRoZQpAQCAtNjc1LDggKzY3Niw4IEBAIFBv c3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgICBpbmRpdmlkdWFsIHRhYmxlLWRhdGEgc2Vn bWVudHMsIGFuZCB0aGUgZGVmYXVsdCBpcyB0byBjb21wcmVzcyB1c2luZwogICAgICAgICA8bGl0 ZXJhbD5nemlwPC9saXRlcmFsPiBhdCBhIG1vZGVyYXRlIGxldmVsLiBGb3IgcGxhaW4gdGV4dCBv dXRwdXQsCiAgICAgICAgIHNldHRpbmcgYSBub256ZXJvIGNvbXByZXNzaW9uIGxldmVsIGNhdXNl cyB0aGUgZW50aXJlIG91dHB1dCBmaWxlIHRvIGJlIGNvbXByZXNzZWQsCi0gICAgICAgIGFzIHRo b3VnaCBpdCBoYWQgYmVlbiBmZWQgdGhyb3VnaCA8YXBwbGljYXRpb24+Z3ppcDwvYXBwbGljYXRp b24+OyBidXQgdGhlIGRlZmF1bHQKLSAgICAgICAgaXMgbm90IHRvIGNvbXByZXNzLgorICAgICAg ICBhcyB0aG91Z2ggaXQgaGFkIGJlZW4gZmVkIHRocm91Z2ggPGFwcGxpY2F0aW9uPmd6aXA8L2Fw cGxpY2F0aW9uPiBvcgorICAgICAgICA8YXBwbGljYXRpb24+bHo0PC9hcHBsaWNhdGlvbj47IGJ1 dCB0aGUgZGVmYXVsdCBpcyBub3QgdG8gY29tcHJlc3MuCiAgICAgICAgPC9wYXJhPgogICAgICAg IDxwYXJhPgogICAgICAgICBUaGUgdGFyIGFyY2hpdmUgZm9ybWF0IGN1cnJlbnRseSBkb2VzIG5v dCBzdXBwb3J0IGNvbXByZXNzaW9uIGF0IGFsbC4KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVt cC9NYWtlZmlsZSBiL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQppbmRleCA3YTE5ZjVkNjE3Li5h MTQwMTM3N2FiIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKKysrIGIvc3Jj L2Jpbi9wZ19kdW1wL01ha2VmaWxlCkBAIC0xNyw2ICsxNyw3IEBAIHRvcF9idWlsZGRpciA9IC4u Ly4uLy4uCiBpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiAKIGV4 cG9ydCBHWklQX1BST0dSQU09JChHWklQKQorZXhwb3J0IExaNAogZXhwb3J0IHdpdGhfaWN1CiAK IG92ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChsaWJwcV9zcmNkaXIpICQoQ1BQRkxBR1MpCkBAIC0y NSw2ICsyNiw3IEBAIExERkxBR1NfSU5URVJOQUwgKz0gLUwkKHRvcF9idWlsZGRpcikvc3JjL2Zl X3V0aWxzIC1scGdmZXV0aWxzICQobGlicHFfcGdwb3J0KQogT0JKUyA9IFwKIAkkKFdJTjMyUkVT KSBcCiAJY29tcHJlc3NfZ3ppcC5vIFwKKwljb21wcmVzc19sejQubyBcCiAJY29tcHJlc3NfaW8u byBcCiAJZHVtcHV0aWxzLm8gXAogCXBhcmFsbGVsLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19kdW1wL2NvbXByZXNzX2lvLmMgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwppbmRl eCBkNjAxMTFiMmI4Li45Njk0N2NkM2VhIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29t cHJlc3NfaW8uYworKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwpAQCAtNTYsNyAr NTYsNyBAQAogICoJSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFuZGxlIHRyaWVzIHRvIGRlZmZl ciB0aGUgY29tcHJlc3Npb24gYnkgdGhlCiAgKglmaWxlbmFtZSBzdWZmaXguIElmIHRoZSBzdWZm aXggaXMgbm90IHlldCBrbm93biwgdGhlbiBpdCB0cmllcyB0byBzaW1wbHkKICAqCW9wZW4gdGhl IGZpbGUsIGFuZCBpZiBpdCBmYWlscywgaXQgdHJpZXMgdG8gb3BlbiB0aGUgc2FtZSBmaWxlIHdp dGggdGhlIC5negotICoJc3VmZml4LgorICoJc3VmZml4LCBhbmQgdGhlbiBhZ2FpbiB3aXRoIHRo ZSAubHo0IHN1ZmZpeC4KICAqCiAgKiBJREVOVElGSUNBVElPTgogICoJICAgc3JjL2Jpbi9wZ19k dW1wL2NvbXByZXNzX2lvLmMKQEAgLTcwLDYgKzcwLDcgQEAKIAogI2luY2x1ZGUgImNvbXByZXNz X2lvLmgiCiAjaW5jbHVkZSAiY29tcHJlc3NfZ3ppcC5oIgorI2luY2x1ZGUgImNvbXByZXNzX2x6 NC5oIgogI2luY2x1ZGUgInBnX2JhY2t1cF91dGlscy5oIgogCiAvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KQEAgLTE0Niw2ICsxNDcsOSBAQCBBbGxvY2F0ZUNvbXByZXNzb3IoY29uc3QgcGdfY29t cHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLAogCQljYXNlIFBHX0NPTVBSRVNT SU9OX0daSVA6CiAJCQlJbml0Q29tcHJlc3Nvckd6aXAoY3MsIGNvbXByZXNzaW9uX3NwZWMpOwog CQkJYnJlYWs7CisJCWNhc2UgUEdfQ09NUFJFU1NJT05fTFo0OgorCQkJSW5pdENvbXByZXNzb3JM WjQoY3MsIGNvbXByZXNzaW9uX3NwZWMpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlwZ19m YXRhbCgiaW52YWxpZCBjb21wcmVzc2lvbiBtZXRob2QgXCIlc1wiIiwKIAkJCQkJIGdldF9jb21w cmVzc19hbGdvcml0aG1fbmFtZShjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkpOwpAQCAtMzM5 LDYgKzM0Myw5IEBAIEluaXRDb21wcmVzc0ZpbGVIYW5kbGUoY29uc3QgcGdfY29tcHJlc3Nfc3Bl Y2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQogCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6 CiAJCQlJbml0Q29tcHJlc3NHemlwKENGSCwgY29tcHJlc3Npb25fc3BlYyk7CiAJCQlicmVhazsK KwkJY2FzZSBQR19DT01QUkVTU0lPTl9MWjQ6CisJCQlJbml0Q29tcHJlc3NMWjQoQ0ZILCBjb21w cmVzc2lvbl9zcGVjKTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcGdfZmF0YWwoImludmFs aWQgY29tcHJlc3Npb24gbWV0aG9kIFwiJXNcIiIsCiAJCQkJCSBnZXRfY29tcHJlc3NfYWxnb3Jp dGhtX25hbWUoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0pKTsKQEAgLTM1Nyw3ICszNjQsNyBA QCBJbml0Q29tcHJlc3NGaWxlSGFuZGxlKGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24g Y29tcHJlc3Npb25fc3BlYykKICAqIHRocm91Z2hvdXQuIE90aGVyd2lzZSB0aGUgY29tcHJlc3Np b24gd2lsbCBiZSBkZWZlcnJlZCBieSBpdGVyYXRpdmVseSB0cnlpbmcKICAqIHRvIG9wZW4gdGhl IGZpbGUgYXQgJ3BhdGgnLCBmaXJzdCBhcyBpcywgdGhlbiBieSBhcHBlbmRpbmcga25vd24gY29t cHJlc3Npb24KICAqIHN1ZmZpeGVzLiBTbyBpZiB5b3UgcGFzcyAiZm9vIiBhcyAncGF0aCcsIHRo aXMgd2lsbCBvcGVuIGVpdGhlciAiZm9vIiBvcgotICogImZvby5neiIsIHRyeWluZyBpbiB0aGF0 IG9yZGVyLgorICogImZvby5neiIgb3IgImZvby5sejQiLCB0cnlpbmcgaW4gdGhhdCBvcmRlci4K ICAqCiAgKiBPbiBmYWlsdXJlLCByZXR1cm4gTlVMTCB3aXRoIGFuIGVycm9yIGNvZGUgaW4gZXJy bm8uCiAgKi8KQEAgLTM5NSw2ICs0MDIsMTcgQEAgSW5pdERpc2NvdmVyQ29tcHJlc3NGaWxlSGFu ZGxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpCiAJCQlpZiAoZXhpc3RzKQog CQkJCWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fR1pJUDsKIAkJ fQorI2VuZGlmCisjaWZkZWYgVVNFX0xaNAorCQlpZiAoIWV4aXN0cykKKwkJeworCQkJZnJlZV9r ZWVwX2Vycm5vKGZuYW1lKTsKKwkJCWZuYW1lID0gcHNwcmludGYoIiVzLmx6NCIsIHBhdGgpOwor CQkJZXhpc3RzID0gKHN0YXQoZm5hbWUsICZzdCkgPT0gMCk7CisKKwkJCWlmIChleGlzdHMpCisJ CQkJY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9MWjQ7CisJCX0K ICNlbmRpZgogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5j IGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAuLmM5N2UxNjE4N2EKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3Bn X2R1bXAvY29tcHJlc3NfbHo0LmMKQEAgLTAsMCArMSw2MTggQEAKKy8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICoKKyAqIGNvbXByZXNzX2x6NC5jCisgKgkgUm91dGluZXMgZm9yIGFyY2hpdmVycyB0byB3 cml0ZSBhbiB1bmNvbXByZXNzZWQgb3IgY29tcHJlc3NlZCBkYXRhCisgKgkgc3RyZWFtLgorICoK KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRz IG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgor ICoJICAgc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5jCisgKgorICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorI2luY2x1ZGUgInBnX2JhY2t1cF91 dGlscy5oIgorCisjaW5jbHVkZSAiY29tcHJlc3NfbHo0LmgiCisKKyNpZmRlZiBVU0VfTFo0Cisj aW5jbHVkZSA8bHo0Lmg+CisjaW5jbHVkZSA8bHo0ZnJhbWUuaD4KKworI2RlZmluZSBMWjRfT1VU X1NJWkUJKDQgKiAxMDI0KQorI2RlZmluZSBMWjRfSU5fU0laRQkJKDE2ICogMTAyNCkKKworLyoK KyAqIExaNEZfSEVBREVSX1NJWkVfTUFYIGZpcnN0IGFwcGVhcmVkIGluIHYxLjcuNSBvZiB0aGUg bGlicmFyeS4KKyAqIFJlZGVmaW5lIGl0IGZvciBpbnN0YWxsYXRpb25zIHdpdGggYSBsZXNzZXIg dmVyc2lvbi4KKyAqLworI2lmbmRlZiBMWjRGX0hFQURFUl9TSVpFX01BWAorI2RlZmluZSBMWjRG X0hFQURFUl9TSVpFX01BWAkzMgorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICogQ29tcHJlc3NvciBBUEkKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3R5cGVk ZWYgc3RydWN0IExaNENvbXByZXNzb3JTdGF0ZQoreworCWNoYXIJICAgKm91dGJ1ZjsKKwlzaXpl X3QJCW91dHNpemU7Cit9IExaNENvbXByZXNzb3JTdGF0ZTsKKworLyogUHJpdmF0ZSByb3V0aW5l cyB0aGF0IHN1cHBvcnQgTFo0IGNvbXByZXNzZWQgZGF0YSBJL08gKi8KK3N0YXRpYyB2b2lkIFJl YWREYXRhRnJvbUFyY2hpdmVMWjQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAq Y3MpOworc3RhdGljIHZvaWQgV3JpdGVEYXRhVG9BcmNoaXZlTFo0KEFyY2hpdmVIYW5kbGUgKkFI LCBDb21wcmVzc29yU3RhdGUgKmNzLAorCQkJCQkJCQkgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVf dCBkTGVuKTsKK3N0YXRpYyB2b2lkIEVuZENvbXByZXNzb3JMWjQoQXJjaGl2ZUhhbmRsZSAqQUgs IENvbXByZXNzb3JTdGF0ZSAqY3MpOworCitzdGF0aWMgdm9pZAorUmVhZERhdGFGcm9tQXJjaGl2 ZUxaNChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykKK3sKKwlMWjRfc3Ry ZWFtRGVjb2RlX3QgbHo0U3RyZWFtRGVjb2RlOworCWNoYXIJICAgKmJ1ZjsKKwljaGFyCSAgICpk ZWNidWY7CisJc2l6ZV90CQlidWZsZW47CisJc2l6ZV90CQljbnQ7CisKKwlidWZsZW4gPSBMWjRf SU5fU0laRTsKKwlidWYgPSBwZ19tYWxsb2MoYnVmbGVuKTsKKwlkZWNidWYgPSBwZ19tYWxsb2Mo YnVmbGVuKTsKKworCUxaNF9zZXRTdHJlYW1EZWNvZGUoJmx6NFN0cmVhbURlY29kZSwgTlVMTCwg MCk7CisKKwl3aGlsZSAoKGNudCA9IGNzLT5yZWFkRihBSCwgJmJ1ZiwgJmJ1ZmxlbikpKQorCXsK KwkJaW50CQkJZGVjQnl0ZXMgPSBMWjRfZGVjb21wcmVzc19zYWZlX2NvbnRpbnVlKCZsejRTdHJl YW1EZWNvZGUsCisJCQkJCQkJCQkJCQkJCQlidWYsIGRlY2J1ZiwKKwkJCQkJCQkJCQkJCQkJCWNu dCwgYnVmbGVuKTsKKworCQlhaHdyaXRlKGRlY2J1ZiwgMSwgZGVjQnl0ZXMsIEFIKTsKKwl9CisK KwlwZ19mcmVlKGJ1Zik7CisJcGdfZnJlZShkZWNidWYpOworfQorCitzdGF0aWMgdm9pZAorV3Jp dGVEYXRhVG9BcmNoaXZlTFo0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNz LAorCQkJCQkgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKQoreworCUxaNENvbXByZXNz b3JTdGF0ZSAqTFo0Y3MgPSAoTFo0Q29tcHJlc3NvclN0YXRlICopIGNzLT5wcml2YXRlX2RhdGE7 CisJc2l6ZV90CQljb21wcmVzc2VkOworCXNpemVfdAkJcmVxdWlyZWRzaXplID0gTFo0X2NvbXBy ZXNzQm91bmQoZExlbik7CisKKwlpZiAocmVxdWlyZWRzaXplID4gTFo0Y3MtPm91dHNpemUpCisJ eworCQlMWjRjcy0+b3V0YnVmID0gcGdfcmVhbGxvYyhMWjRjcy0+b3V0YnVmLCByZXF1aXJlZHNp emUpOworCQlMWjRjcy0+b3V0c2l6ZSA9IHJlcXVpcmVkc2l6ZTsKKwl9CisKKwljb21wcmVzc2Vk ID0gTFo0X2NvbXByZXNzX2RlZmF1bHQoZGF0YSwgTFo0Y3MtPm91dGJ1ZiwKKwkJCQkJCQkJCSAg ZExlbiwgTFo0Y3MtPm91dHNpemUpOworCisJaWYgKGNvbXByZXNzZWQgPD0gMCkKKwkJcGdfZmF0 YWwoImZhaWxlZCB0byBMWjQgY29tcHJlc3MgZGF0YSIpOworCisJY3MtPndyaXRlRihBSCwgTFo0 Y3MtPm91dGJ1ZiwgY29tcHJlc3NlZCk7Cit9CisKK3N0YXRpYyB2b2lkCitFbmRDb21wcmVzc29y TFo0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKQoreworCUxaNENvbXBy ZXNzb3JTdGF0ZSAqTFo0Y3M7CisKKwlMWjRjcyA9IChMWjRDb21wcmVzc29yU3RhdGUgKikgY3Mt PnByaXZhdGVfZGF0YTsKKwlpZiAoTFo0Y3MpCisJeworCQlwZ19mcmVlKExaNGNzLT5vdXRidWYp OworCQlwZ19mcmVlKExaNGNzKTsKKwkJY3MtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJfQorfQor CisKKy8qIFB1YmxpYyByb3V0aW5lcyB0aGF0IHN1cHBvcnQgTFo0IGNvbXByZXNzZWQgZGF0YSBJ L08gKi8KK3ZvaWQKK0luaXRDb21wcmVzc29yTFo0KENvbXByZXNzb3JTdGF0ZSAqY3MsIGNvbnN0 IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKK3sKKwljcy0+cmVh ZERhdGEgPSBSZWFkRGF0YUZyb21BcmNoaXZlTFo0OworCWNzLT53cml0ZURhdGEgPSBXcml0ZURh dGFUb0FyY2hpdmVMWjQ7CisJY3MtPmVuZCA9IEVuZENvbXByZXNzb3JMWjQ7CisKKwljcy0+Y29t cHJlc3Npb25fc3BlYyA9IGNvbXByZXNzaW9uX3NwZWM7CisKKwkvKiBXaWxsIGJlIGxhenkgaW5p dCdkICovCisJY3MtPnByaXZhdGVfZGF0YSA9IHBnX21hbGxvYzAoc2l6ZW9mKExaNENvbXByZXNz b3JTdGF0ZSkpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvbXByZXNzIEZp bGUgQVBJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogU3RhdGUgbmVl ZGVkIGZvciBMWjQgKGRlKWNvbXByZXNzaW9uIHVzaW5nIHRoZSBDb21wcmVzc0ZpbGVIYW5kbGUg QVBJLgorICovCit0eXBlZGVmIHN0cnVjdCBMWjRGaWxlCit7CisJRklMRQkgICAqZnA7CisKKwlM WjRGX3ByZWZlcmVuY2VzX3QgcHJlZnM7CisKKwlMWjRGX2NvbXByZXNzaW9uQ29udGV4dF90IGN0 eDsKKwlMWjRGX2RlY29tcHJlc3Npb25Db250ZXh0X3QgZHR4OworCisJYm9vbAkJaW5pdGVkOwor CWJvb2wJCWNvbXByZXNzaW5nOworCisJc2l6ZV90CQlidWZsZW47CisJY2hhcgkgICAqYnVmZmVy OworCisJc2l6ZV90CQlvdmVyZmxvd2FsbG9jbGVuOworCXNpemVfdAkJb3ZlcmZsb3dsZW47CisJ Y2hhcgkgICAqb3ZlcmZsb3didWY7CisKKwlzaXplX3QJCWVycmNvZGU7Cit9CQkJTFo0RmlsZTsK KworLyoKKyAqIExaNCBlcXVpdmFsZW50IHRvIGZlb2YoKSBvciBnemVvZigpLiBUaGUgZW5kIG9m IGZpbGUKKyAqIGlzIHJlYWNoZWQgaWYgdGhlcmUgaXMgbm8gZGVjb21wcmVzc2VkIG91dHB1dCBp biB0aGUKKyAqIG92ZXJmbG93IGJ1ZmZlciBhbmQgdGhlIGVuZCBvZiB0aGUgZmlsZSBpcyByZWFj aGVkLgorICovCitzdGF0aWMgaW50CitMWjRGaWxlX2VvZihDb21wcmVzc0ZpbGVIYW5kbGUgKkNG SCkKK3sKKwlMWjRGaWxlICAgICpmcyA9IChMWjRGaWxlICopIENGSC0+cHJpdmF0ZV9kYXRhOwor CisJcmV0dXJuIGZzLT5vdmVyZmxvd2xlbiA9PSAwICYmIGZlb2YoZnMtPmZwKTsKK30KKworc3Rh dGljIGNvbnN0IGNoYXIgKgorTFo0RmlsZV9nZXRfZXJyb3IoQ29tcHJlc3NGaWxlSGFuZGxlICpD RkgpCit7CisJTFo0RmlsZSAgICAqZnMgPSAoTFo0RmlsZSAqKSBDRkgtPnByaXZhdGVfZGF0YTsK Kwljb25zdCBjaGFyICplcnJtc2c7CisKKwlpZiAoTFo0Rl9pc0Vycm9yKGZzLT5lcnJjb2RlKSkK KwkJZXJybXNnID0gTFo0Rl9nZXRFcnJvck5hbWUoZnMtPmVycmNvZGUpOworCWVsc2UKKwkJZXJy bXNnID0gc3RyZXJyb3IoZXJybm8pOworCisJcmV0dXJuIGVycm1zZzsKK30KKworLyoKKyAqIFBy ZXBhcmUgYW4gYWxyZWFkeSBhbGxvYydlZCBMWjRGaWxlIHN0cnVjdCBmb3Igc3Vic2VxdWVudCBj YWxscy4KKyAqCisgKiBJdCBjcmVhdGVzIHRoZSBuZXNzYXJ5IGNvbnRleHRzIGZvciB0aGUgb3Bl cmF0aW9ucy4gV2hlbiBjb21wcmVzc2luZywKKyAqIGl0IGFkZGl0aW9uYWxseSB3cml0ZXMgdGhl IExaNCBoZWFkZXIgaW4gdGhlIG91dHB1dCBzdHJlYW0uCisgKi8KK3N0YXRpYyBpbnQKK0xaNEZp bGVfaW5pdChMWjRGaWxlICogZnMsIGludCBzaXplLCBib29sIGNvbXByZXNzaW5nKQoreworCXNp emVfdAkJc3RhdHVzOworCisJaWYgKGZzLT5pbml0ZWQpCisJCXJldHVybiAwOworCisJZnMtPmNv bXByZXNzaW5nID0gY29tcHJlc3Npbmc7CisJZnMtPmluaXRlZCA9IHRydWU7CisKKwlpZiAoZnMt PmNvbXByZXNzaW5nKQorCXsKKwkJZnMtPmJ1ZmxlbiA9IExaNEZfY29tcHJlc3NCb3VuZChMWjRf SU5fU0laRSwgJmZzLT5wcmVmcyk7CisJCWlmIChmcy0+YnVmbGVuIDwgTFo0Rl9IRUFERVJfU0la RV9NQVgpCisJCQlmcy0+YnVmbGVuID0gTFo0Rl9IRUFERVJfU0laRV9NQVg7CisKKwkJc3RhdHVz ID0gTFo0Rl9jcmVhdGVDb21wcmVzc2lvbkNvbnRleHQoJmZzLT5jdHgsIExaNEZfVkVSU0lPTik7 CisJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkKKwkJeworCQkJZnMtPmVycmNvZGUgPSBzdGF0 dXM7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCWZzLT5idWZmZXIgPSBwZ19tYWxsb2MoZnMtPmJ1 Zmxlbik7CisJCXN0YXR1cyA9IExaNEZfY29tcHJlc3NCZWdpbihmcy0+Y3R4LCBmcy0+YnVmZmVy LCBmcy0+YnVmbGVuLAorCQkJCQkJCQkJJmZzLT5wcmVmcyk7CisKKwkJaWYgKExaNEZfaXNFcnJv cihzdGF0dXMpKQorCQl7CisJCQlmcy0+ZXJyY29kZSA9IHN0YXR1czsKKwkJCXJldHVybiAxOwor CQl9CisKKwkJaWYgKGZ3cml0ZShmcy0+YnVmZmVyLCAxLCBzdGF0dXMsIGZzLT5mcCkgIT0gc3Rh dHVzKQorCQl7CisJCQllcnJubyA9IGVycm5vID8gOiBFTk9TUEM7CisJCQlyZXR1cm4gMTsKKwkJ fQorCX0KKwllbHNlCisJeworCQlzdGF0dXMgPSBMWjRGX2NyZWF0ZURlY29tcHJlc3Npb25Db250 ZXh0KCZmcy0+ZHR4LCBMWjRGX1ZFUlNJT04pOworCQlpZiAoTFo0Rl9pc0Vycm9yKHN0YXR1cykp CisJCXsKKwkJCWZzLT5lcnJjb2RlID0gc3RhdHVzOworCQkJcmV0dXJuIDE7CisJCX0KKworCQlm cy0+YnVmbGVuID0gc2l6ZSA+IExaNF9PVVRfU0laRSA/IHNpemUgOiBMWjRfT1VUX1NJWkU7CisJ CWZzLT5idWZmZXIgPSBwZ19tYWxsb2MoZnMtPmJ1Zmxlbik7CisKKwkJZnMtPm92ZXJmbG93YWxs b2NsZW4gPSBmcy0+YnVmbGVuOworCQlmcy0+b3ZlcmZsb3didWYgPSBwZ19tYWxsb2MoZnMtPm92 ZXJmbG93YWxsb2NsZW4pOworCQlmcy0+b3ZlcmZsb3dsZW4gPSAwOworCX0KKworCXJldHVybiAw OworfQorCisvKgorICogUmVhZCBhbHJlYWR5IGRlY29tcHJlc3NlZCBjb250ZW50IGZyb20gdGhl IG92ZXJmbG93IGJ1ZmZlciBpbnRvICdwdHInIHVwIHRvCisgKiAnc2l6ZScgYnl0ZXMsIGlmIGF2 YWlsYWJsZS4gSWYgdGhlIGVvbF9mbGFnIGlzIHNldCwgdGhlbiBzdG9wIGF0IHRoZSBmaXJzdAor ICogb2NjdXJhbmNlIG9mIHRoZSBuZXcgbGluZSBjaGFyIHByaW9yIHRvICdzaXplJyBieXRlcy4K KyAqCisgKiBBbnkgdW5yZWFkIGNvbnRlbnQgaW4gdGhlIG92ZXJmbG93IGJ1ZmZlciwgaXMgbW92 ZWQgdG8gdGhlIGJlZ2lubmluZy4KKyAqLworc3RhdGljIGludAorTFo0RmlsZV9yZWFkX292ZXJm bG93KExaNEZpbGUgKiBmcywgdm9pZCAqcHRyLCBpbnQgc2l6ZSwgYm9vbCBlb2xfZmxhZykKK3sK KwljaGFyCSAgICpwOworCWludAkJCXJlYWRsZW4gPSAwOworCisJaWYgKGZzLT5vdmVyZmxvd2xl biA9PSAwKQorCQlyZXR1cm4gMDsKKworCWlmIChmcy0+b3ZlcmZsb3dsZW4gPj0gc2l6ZSkKKwkJ cmVhZGxlbiA9IHNpemU7CisJZWxzZQorCQlyZWFkbGVuID0gZnMtPm92ZXJmbG93bGVuOworCisJ aWYgKGVvbF9mbGFnICYmIChwID0gbWVtY2hyKGZzLT5vdmVyZmxvd2J1ZiwgJ1xuJywgcmVhZGxl bikpKQorCQkvKiBJbmNsdWRlIHRoZSBsaW5lIHRlcm1pbmF0aW5nIGNoYXIgKi8KKwkJcmVhZGxl biA9IHAgLSBmcy0+b3ZlcmZsb3didWYgKyAxOworCisJbWVtY3B5KHB0ciwgZnMtPm92ZXJmbG93 YnVmLCByZWFkbGVuKTsKKwlmcy0+b3ZlcmZsb3dsZW4gLT0gcmVhZGxlbjsKKworCWlmIChmcy0+ b3ZlcmZsb3dsZW4gPiAwKQorCQltZW1tb3ZlKGZzLT5vdmVyZmxvd2J1ZiwgZnMtPm92ZXJmbG93 YnVmICsgcmVhZGxlbiwgZnMtPm92ZXJmbG93bGVuKTsKKworCXJldHVybiByZWFkbGVuOworfQor CisvKgorICogVGhlIHdvcmtob3JzZSBmb3IgcmVhZGluZyBkZWNvbXByZXNzZWQgY29udGVudCBv dXQgb2YgYW4gTFo0IGNvbXByZXNzZWQKKyAqIHN0cmVhbS4KKyAqCisgKiBJdCB3aWxsIHJlYWQg dXAgdG8gJ3B0cnNpemUnIGRlY29tcHJlc3NlZCBjb250ZW50LCBvciB1cCB0byB0aGUgbmV3IGxp bmUgY2hhcgorICogaWYgZm91bmQgZmlyc3Qgd2hlbiB0aGUgZW9sX2ZsYWcgaXMgc2V0LiBJdCBp cyBwb3NzaWJsZSB0aGF0IHRoZSBkZWNvbXByZXNzZWQKKyAqIG91dHB1dCBnZW5lcmF0ZWQgYnkg cmVhZGluZyBhbnkgY29tcHJlc3NlZCBpbnB1dCB2aWEgdGhlIExaNEYgQVBJLCBleGNlZWRzCisg KiAncHRyc2l6ZScuIEFueSBleGNlZWRpbmcgZGVjb21wcmVzc2VkIGNvbnRlbnQgaXMgc3RvcmVk IGF0IGFuIG92ZXJmbG93CisgKiBidWZmZXIgd2l0aGluIExaNEZpbGUuIE9mIGNvdXJzZSwgd2hl biB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLCBpdCB3aWxsIGZpcnN0CisgKiB0cnkgdG8gY29uc3Vt ZSBhbnkgZGVjb21wcmVzc2VkIGNvbnRlbnQgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBvdmVyZmxv dworICogYnVmZmVyLCBiZWZvcmUgZGVjb21wcmVzc2luZyBuZXcgY29udGVudC4KKyAqLworc3Rh dGljIGludAorTFo0RmlsZV9yZWFkX2ludGVybmFsKExaNEZpbGUgKiBmcywgdm9pZCAqcHRyLCBp bnQgcHRyc2l6ZSwgYm9vbCBlb2xfZmxhZykKK3sKKwlzaXplX3QJCWRzaXplID0gMDsKKwlzaXpl X3QJCXJzaXplOworCXNpemVfdAkJc2l6ZSA9IHB0cnNpemU7CisJYm9vbAkJZW9sX2ZvdW5kID0g ZmFsc2U7CisKKwl2b2lkCSAgICpyZWFkYnVmOworCisJLyogTGF6eSBpbml0ICovCisJaWYgKCFm cy0+aW5pdGVkICYmIExaNEZpbGVfaW5pdChmcywgc2l6ZSwgZmFsc2UgLyogZGVjb21wcmVzc2lu ZyAqLyApKQorCQlyZXR1cm4gLTE7CisKKwkvKiBWZXJmaXkgdGhhdCB0aGVyZSBpcyBlbm91Z2gg c3BhY2UgaW4gdGhlIG91dGJ1ZiAqLworCWlmIChzaXplID4gZnMtPmJ1ZmxlbikKKwl7CisJCWZz LT5idWZsZW4gPSBzaXplOworCQlmcy0+YnVmZmVyID0gcGdfcmVhbGxvYyhmcy0+YnVmZmVyLCBz aXplKTsKKwl9CisKKwkvKiB1c2UgYWxyZWFkeSBkZWNvbXByZXNzZWQgY29udGVudCBpZiBhdmFp bGFibGUgKi8KKwlkc2l6ZSA9IExaNEZpbGVfcmVhZF9vdmVyZmxvdyhmcywgcHRyLCBzaXplLCBl b2xfZmxhZyk7CisJaWYgKGRzaXplID09IHNpemUgfHwgKGVvbF9mbGFnICYmIG1lbWNocihwdHIs ICdcbicsIGRzaXplKSkpCisJCXJldHVybiBkc2l6ZTsKKworCXJlYWRidWYgPSBwZ19tYWxsb2Mo c2l6ZSk7CisKKwlkbworCXsKKwkJY2hhcgkgICAqcnA7CisJCWNoYXIJICAgKnJlbmQ7CisKKwkJ cnNpemUgPSBmcmVhZChyZWFkYnVmLCAxLCBzaXplLCBmcy0+ZnApOworCQlpZiAocnNpemUgPCBz aXplICYmICFmZW9mKGZzLT5mcCkpCisJCQlyZXR1cm4gLTE7CisKKwkJcnAgPSAoY2hhciAqKSBy ZWFkYnVmOworCQlyZW5kID0gKGNoYXIgKikgcmVhZGJ1ZiArIHJzaXplOworCisJCXdoaWxlIChy cCA8IHJlbmQpCisJCXsKKwkJCXNpemVfdAkJc3RhdHVzOworCQkJc2l6ZV90CQlvdXRsZW4gPSBm cy0+YnVmbGVuOworCQkJc2l6ZV90CQlyZWFkX3JlbWFpbiA9IHJlbmQgLSBycDsKKworCQkJbWVt c2V0KGZzLT5idWZmZXIsIDAsIG91dGxlbik7CisJCQlzdGF0dXMgPSBMWjRGX2RlY29tcHJlc3Mo ZnMtPmR0eCwgZnMtPmJ1ZmZlciwgJm91dGxlbiwKKwkJCQkJCQkJCSBycCwgJnJlYWRfcmVtYWlu LCBOVUxMKTsKKwkJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkKKwkJCXsKKwkJCQlmcy0+ZXJy Y29kZSA9IHN0YXR1czsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisKKwkJCXJwICs9IHJlYWRfcmVt YWluOworCisJCQkvKgorCQkJICogZmlsbCBpbiB3aGF0IHNwYWNlIGlzIGF2YWlsYWJsZSBpbiBw dHIgaWYgdGhlIGVvbCBmbGFnIGlzIHNldCwKKwkJCSAqIGVpdGhlciBza2lwIGlmIG9uZSBhbHJl YWR5IGZvdW5kIG9yIGZpbGwgdXAgdG8gRU9MIGlmIHByZXNlbnQKKwkJCSAqIGluIHRoZSBvdXRi dWYKKwkJCSAqLworCQkJaWYgKG91dGxlbiA+IDAgJiYgZHNpemUgPCBzaXplICYmIGVvbF9mb3Vu ZCA9PSBmYWxzZSkKKwkJCXsKKwkJCQljaGFyCSAgICpwOworCQkJCXNpemVfdAkJbGliID0gKGVv bF9mbGFnID09IDApID8gc2l6ZSAtIGRzaXplIDogc2l6ZSAtIDEgLSBkc2l6ZTsKKwkJCQlzaXpl X3QJCWxlbiA9IG91dGxlbiA8IGxpYiA/IG91dGxlbiA6IGxpYjsKKworCQkJCWlmIChlb2xfZmxh ZyA9PSB0cnVlICYmCisJCQkJCShwID0gbWVtY2hyKGZzLT5idWZmZXIsICdcbicsIG91dGxlbikp ICYmCisJCQkJCShzaXplX3QpIChwIC0gZnMtPmJ1ZmZlciArIDEpIDw9IGxlbikKKwkJCQl7CisJ CQkJCWxlbiA9IHAgLSBmcy0+YnVmZmVyICsgMTsKKwkJCQkJZW9sX2ZvdW5kID0gdHJ1ZTsKKwkJ CQl9CisKKwkJCQltZW1jcHkoKGNoYXIgKikgcHRyICsgZHNpemUsIGZzLT5idWZmZXIsIGxlbik7 CisJCQkJZHNpemUgKz0gbGVuOworCisJCQkJLyogbW92ZSB3aGF0IGRpZCBub3QgZml0LCBpZiBh bnksIGF0IHRoZSBiZWdpbmluZyBvZiB0aGUgYnVmICovCisJCQkJaWYgKGxlbiA8IG91dGxlbikK KwkJCQkJbWVtbW92ZShmcy0+YnVmZmVyLCBmcy0+YnVmZmVyICsgbGVuLCBvdXRsZW4gLSBsZW4p OworCQkJCW91dGxlbiAtPSBsZW47CisJCQl9CisKKwkJCS8qIGlmIHRoZXJlIGlzIGF2YWlsYWJs ZSBvdXRwdXQsIHNhdmUgaXQgKi8KKwkJCWlmIChvdXRsZW4gPiAwKQorCQkJeworCQkJCXdoaWxl IChmcy0+b3ZlcmZsb3dsZW4gKyBvdXRsZW4gPiBmcy0+b3ZlcmZsb3dhbGxvY2xlbikKKwkJCQl7 CisJCQkJCWZzLT5vdmVyZmxvd2FsbG9jbGVuICo9IDI7CisJCQkJCWZzLT5vdmVyZmxvd2J1ZiA9 IHBnX3JlYWxsb2MoZnMtPm92ZXJmbG93YnVmLAorCQkJCQkJCQkJCQkJIGZzLT5vdmVyZmxvd2Fs bG9jbGVuKTsKKwkJCQl9CisKKwkJCQltZW1jcHkoZnMtPm92ZXJmbG93YnVmICsgZnMtPm92ZXJm bG93bGVuLCBmcy0+YnVmZmVyLCBvdXRsZW4pOworCQkJCWZzLT5vdmVyZmxvd2xlbiArPSBvdXRs ZW47CisJCQl9CisJCX0KKwl9IHdoaWxlIChyc2l6ZSA9PSBzaXplICYmIGRzaXplIDwgc2l6ZSAm JiBlb2xfZm91bmQgPT0gMCk7CisKKwlwZ19mcmVlKHJlYWRidWYpOworCisJcmV0dXJuIChpbnQp IGRzaXplOworfQorCisvKgorICogQ29tcHJlc3Mgc2l6ZSBieXRlcyBmcm9tIHB0ciBhbmQgd3Jp dGUgdGhlbSB0byB0aGUgc3RyZWFtLgorICovCitzdGF0aWMgc2l6ZV90CitMWjRGaWxlX3dyaXRl KGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQor eworCUxaNEZpbGUgICAgKmZzID0gKExaNEZpbGUgKikgQ0ZILT5wcml2YXRlX2RhdGE7CisJc2l6 ZV90CQlzdGF0dXM7CisJaW50CQkJcmVtYWluaW5nID0gc2l6ZTsKKworCWlmICghZnMtPmluaXRl ZCAmJiBMWjRGaWxlX2luaXQoZnMsIHNpemUsIHRydWUpKQorCQlyZXR1cm4gLTE7CisKKwl3aGls ZSAocmVtYWluaW5nID4gMCkKKwl7CisJCWludAkJCWNodW5rID0gcmVtYWluaW5nIDwgTFo0X0lO X1NJWkUgPyByZW1haW5pbmcgOiBMWjRfSU5fU0laRTsKKworCQlyZW1haW5pbmcgLT0gY2h1bms7 CisKKwkJc3RhdHVzID0gTFo0Rl9jb21wcmVzc1VwZGF0ZShmcy0+Y3R4LCBmcy0+YnVmZmVyLCBm cy0+YnVmbGVuLAorCQkJCQkJCQkJIHB0ciwgY2h1bmssIE5VTEwpOworCQlpZiAoTFo0Rl9pc0Vy cm9yKHN0YXR1cykpCisJCXsKKwkJCWZzLT5lcnJjb2RlID0gc3RhdHVzOworCQkJcmV0dXJuIC0x OworCQl9CisKKwkJaWYgKGZ3cml0ZShmcy0+YnVmZmVyLCAxLCBzdGF0dXMsIGZzLT5mcCkgIT0g c3RhdHVzKQorCQl7CisJCQllcnJubyA9IGVycm5vID8gOiBFTk9TUEM7CisJCQlyZXR1cm4gMTsK KwkJfQorCX0KKworCXJldHVybiBzaXplOworfQorCisvKgorICogZnJlYWQoKSBlcXVpdmFsZW50 IGltcGxlbWVudGF0aW9uIGZvciBMWjQgY29tcHJlc3NlZCBmaWxlcy4KKyAqLworc3RhdGljIHNp emVfdAorTFo0RmlsZV9yZWFkKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENvbXByZXNzRmlsZUhh bmRsZSAqQ0ZIKQoreworCUxaNEZpbGUgICAgKmZzID0gKExaNEZpbGUgKikgQ0ZILT5wcml2YXRl X2RhdGE7CisJaW50CQkJcmV0OworCisJcmV0ID0gTFo0RmlsZV9yZWFkX2ludGVybmFsKGZzLCBw dHIsIHNpemUsIGZhbHNlKTsKKwlpZiAocmV0ICE9IHNpemUgJiYgIUxaNEZpbGVfZW9mKENGSCkp CisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6ICVzIiwgTFo0Rmls ZV9nZXRfZXJyb3IoQ0ZIKSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogZmdldGMoKSBl cXVpdmFsZW50IGltcGxlbWVudGF0aW9uIGZvciBMWjQgY29tcHJlc3NlZCBmaWxlcy4KKyAqLwor c3RhdGljIGludAorTFo0RmlsZV9nZXRjKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCUxa NEZpbGUgICAgKmZzID0gKExaNEZpbGUgKikgQ0ZILT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQg Y2hhciBjOworCisJaWYgKExaNEZpbGVfcmVhZF9pbnRlcm5hbChmcywgJmMsIDEsIGZhbHNlKSAh PSAxKQorCXsKKwkJaWYgKCFMWjRGaWxlX2VvZihDRkgpKQorCQkJcGdfZmF0YWwoImNvdWxkIG5v dCByZWFkIGZyb20gaW5wdXQgZmlsZTogJXMiLCBMWjRGaWxlX2dldF9lcnJvcihDRkgpKTsKKwkJ ZWxzZQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogZW5kIG9m IGZpbGUiKTsKKwl9CisKKwlyZXR1cm4gYzsKK30KKworLyoKKyAqIGZnZXRzKCkgZXF1aXZhbGVu dCBpbXBsZW1lbnRhdGlvbiBmb3IgTFo0IGNvbXByZXNzZWQgZmlsZXMuCisgKi8KK3N0YXRpYyBj aGFyICoKK0xaNEZpbGVfZ2V0cyhjaGFyICpwdHIsIGludCBzaXplLCBDb21wcmVzc0ZpbGVIYW5k bGUgKkNGSCkKK3sKKwlMWjRGaWxlICAgICpmcyA9IChMWjRGaWxlICopIENGSC0+cHJpdmF0ZV9k YXRhOworCXNpemVfdAkJZHNpemU7CisKKwlkc2l6ZSA9IExaNEZpbGVfcmVhZF9pbnRlcm5hbChm cywgcHRyLCBzaXplLCB0cnVlKTsKKwlpZiAoZHNpemUgPCAwKQorCQlwZ19mYXRhbCgiY291bGQg bm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsIExaNEZpbGVfZ2V0X2Vycm9yKENGSCkpOwor CisJLyogRG9uZSByZWFkaW5nICovCisJaWYgKGRzaXplID09IDApCisJCXJldHVybiBOVUxMOwor CisJcmV0dXJuIHB0cjsKK30KKworLyoKKyAqIEZpbmFsaXplIChkZSljb21wcmVzc2lvbiBvZiBh IHN0cmVhbS4gV2hlbiBjb21wcmVzc2luZyBpdCB3aWxsIHdyaXRlIGFueQorICogcmVtYWluaW5n IGNvbnRlbnQgYW5kL29yIGdlbmVyYXRlZCBmb290ZXIgZnJvbSB0aGUgTFo0IEFQSS4KKyAqLwor c3RhdGljIGludAorTFo0RmlsZV9jbG9zZShDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlG SUxFCSAgICpmcDsKKwlMWjRGaWxlICAgICpmcyA9IChMWjRGaWxlICopIENGSC0+cHJpdmF0ZV9k YXRhOworCXNpemVfdAkJc3RhdHVzOworCWludAkJCXJldDsKKworCWZwID0gZnMtPmZwOworCWlm IChmcy0+aW5pdGVkKQorCXsKKwkJaWYgKGZzLT5jb21wcmVzc2luZykKKwkJeworCQkJc3RhdHVz ID0gTFo0Rl9jb21wcmVzc0VuZChmcy0+Y3R4LCBmcy0+YnVmZmVyLCBmcy0+YnVmbGVuLCBOVUxM KTsKKwkJCWlmIChMWjRGX2lzRXJyb3Ioc3RhdHVzKSkKKwkJCQlwZ19mYXRhbCgiZmFpbGVkIHRv IGVuZCBjb21wcmVzc2lvbjogJXMiLAorCQkJCQkJIExaNEZfZ2V0RXJyb3JOYW1lKHN0YXR1cykp OworCQkJZWxzZSBpZiAoKHJldCA9IGZ3cml0ZShmcy0+YnVmZmVyLCAxLCBzdGF0dXMsIGZzLT5m cCkpICE9IHN0YXR1cykKKwkJCXsKKwkJCQllcnJubyA9IGVycm5vID8gOiBFTk9TUEM7CisJCQkJ V1JJVEVfRVJST1JfRVhJVDsKKwkJCX0KKworCQkJc3RhdHVzID0gTFo0Rl9mcmVlQ29tcHJlc3Np b25Db250ZXh0KGZzLT5jdHgpOworCQkJaWYgKExaNEZfaXNFcnJvcihzdGF0dXMpKQorCQkJCXBn X2ZhdGFsKCJmYWlsZWQgdG8gZW5kIGNvbXByZXNzaW9uOiAlcyIsCisJCQkJCQkgTFo0Rl9nZXRF cnJvck5hbWUoc3RhdHVzKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlzdGF0dXMgPSBMWjRGX2Zy ZWVEZWNvbXByZXNzaW9uQ29udGV4dChmcy0+ZHR4KTsKKwkJCWlmIChMWjRGX2lzRXJyb3Ioc3Rh dHVzKSkKKwkJCQlwZ19mYXRhbCgiZmFpbGVkIHRvIGVuZCBkZWNvbXByZXNzaW9uOiAlcyIsCisJ CQkJCQkgTFo0Rl9nZXRFcnJvck5hbWUoc3RhdHVzKSk7CisJCQlwZ19mcmVlKGZzLT5vdmVyZmxv d2J1Zik7CisJCX0KKworCQlwZ19mcmVlKGZzLT5idWZmZXIpOworCX0KKworCXBnX2ZyZWUoZnMp OworCisJcmV0dXJuIGZjbG9zZShmcCk7Cit9CisKK3N0YXRpYyBpbnQKK0xaNEZpbGVfb3Blbihj b25zdCBjaGFyICpwYXRoLCBpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUsCisJCQkgQ29tcHJlc3NG aWxlSGFuZGxlICpDRkgpCit7CisJRklMRQkgICAqZnA7CisJTFo0RmlsZSAgICAqbHo0ZnAgPSAo TFo0RmlsZSAqKSBDRkgtPnByaXZhdGVfZGF0YTsKKworCWlmIChmZCA+PSAwKQorCQlmcCA9IGZk b3BlbihmZCwgbW9kZSk7CisJZWxzZQorCQlmcCA9IGZvcGVuKHBhdGgsIG1vZGUpOworCWlmIChm cCA9PSBOVUxMKQorCXsKKwkJbHo0ZnAtPmVycmNvZGUgPSBlcnJubzsKKwkJcmV0dXJuIDE7CisJ fQorCisJbHo0ZnAtPmZwID0gZnA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorTFo0 RmlsZV9vcGVuX3dyaXRlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsIENvbXBy ZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCWNoYXIJICAgKmZuYW1lOworCWludAkJCXJldDsKKwor CWZuYW1lID0gcHNwcmludGYoIiVzLmx6NCIsIHBhdGgpOworCXJldCA9IENGSC0+b3Blbl9mdW5j KGZuYW1lLCAtMSwgbW9kZSwgQ0ZIKTsKKwlwZ19mcmVlKGZuYW1lKTsKKworCXJldHVybiByZXQ7 Cit9CisKK3ZvaWQKK0luaXRDb21wcmVzc0xaNChDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCwgY29u c3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQoreworCUxaNEZp bGUgICAgKmx6NGZwOworCisJQ0ZILT5vcGVuX2Z1bmMgPSBMWjRGaWxlX29wZW47CisJQ0ZILT5v cGVuX3dyaXRlX2Z1bmMgPSBMWjRGaWxlX29wZW5fd3JpdGU7CisJQ0ZILT5yZWFkX2Z1bmMgPSBM WjRGaWxlX3JlYWQ7CisJQ0ZILT53cml0ZV9mdW5jID0gTFo0RmlsZV93cml0ZTsKKwlDRkgtPmdl dHNfZnVuYyA9IExaNEZpbGVfZ2V0czsKKwlDRkgtPmdldGNfZnVuYyA9IExaNEZpbGVfZ2V0YzsK KwlDRkgtPmVvZl9mdW5jID0gTFo0RmlsZV9lb2Y7CisJQ0ZILT5jbG9zZV9mdW5jID0gTFo0Rmls ZV9jbG9zZTsKKwlDRkgtPmdldF9lcnJvcl9mdW5jID0gTFo0RmlsZV9nZXRfZXJyb3I7CisKKwlD RkgtPmNvbXByZXNzaW9uX3NwZWMgPSBjb21wcmVzc2lvbl9zcGVjOworCWx6NGZwID0gcGdfbWFs bG9jMChzaXplb2YoKmx6NGZwKSk7CisJaWYgKENGSC0+Y29tcHJlc3Npb25fc3BlYy5sZXZlbCA+ PSAwKQorCQlsejRmcC0+cHJlZnMuY29tcHJlc3Npb25MZXZlbCA9IENGSC0+Y29tcHJlc3Npb25f c3BlYy5sZXZlbDsKKworCUNGSC0+cHJpdmF0ZV9kYXRhID0gbHo0ZnA7Cit9CisjZWxzZQkJCQkJ CQkvKiBVU0VfTFo0ICovCit2b2lkCitJbml0Q29tcHJlc3NvckxaNChDb21wcmVzc29yU3RhdGUg KmNzLCBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCit7 CisJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRo ICVzIiwgIkxaNCIpOworfQorCit2b2lkCitJbml0Q29tcHJlc3NMWjQoQ29tcHJlc3NGaWxlSGFu ZGxlICpDRkgsIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3Bl YykKK3sKKwlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9u IHdpdGggJXMiLCAiTFo0Iik7Cit9CisjZW5kaWYJCQkJCQkJLyogVVNFX0xaNCAqLwpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5oIGIvc3JjL2Jpbi9wZ19kdW1wL2Nv bXByZXNzX2x6NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjc0NTk1 ZGIxYjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfbHo0LmgK QEAgLTAsMCArMSwyMiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogY29tcHJlc3NfbHo0 LmgKKyAqCSBJbnRlcmZhY2UgdG8gY29tcHJlc3NfaW8uYyByb3V0aW5lcworICoKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBV bml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICAgc3Jj L2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8K KyNpZm5kZWYgX0NPTVBSRVNTX0xaNF9IXworI2RlZmluZSBfQ09NUFJFU1NfTFo0X0hfCisKKyNp bmNsdWRlICJjb21wcmVzc19pby5oIgorCitleHRlcm4gdm9pZCBJbml0Q29tcHJlc3NvckxaNChD b21wcmVzc29yU3RhdGUgKmNzLCBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXBy ZXNzaW9uX3NwZWMpOworZXh0ZXJuIHZvaWQgSW5pdENvbXByZXNzTFo0KENvbXByZXNzRmlsZUhh bmRsZSAqQ0ZILCBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3Nw ZWMpOworCisjZW5kaWYJCQkJCQkJLyogX0NPTVBSRVNTX0xaNF9IXyAqLwpkaWZmIC0tZ2l0IGEv c3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkIGIvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxk CmluZGV4IGFhMmM5MTgyOWMuLjQ3M2Q0MGQ0NTYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVt cC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKQEAgLTMsNiAr Myw3IEBACiBwZ19kdW1wX2NvbW1vbl9zb3VyY2VzID0gZmlsZXMoCiAgICdjb21wcmVzc19pby5j JywKICAgJ2NvbXByZXNzX2d6aXAuYycsCisgICdjb21wcmVzc19sejQuYycsCiAgICdkdW1wdXRp bHMuYycsCiAgICdwYXJhbGxlbC5jJywKICAgJ3BnX2JhY2t1cF9hcmNoaXZlci5jJywKQEAgLTE3 LDcgKzE4LDcgQEAgcGdfZHVtcF9jb21tb25fc291cmNlcyA9IGZpbGVzKAogcGdfZHVtcF9jb21t b24gPSBzdGF0aWNfbGlicmFyeSgnbGlicGdkdW1wX2NvbW1vbicsCiAgIHBnX2R1bXBfY29tbW9u X3NvdXJjZXMsCiAgIGNfcGNoOiBwY2hfcG9zdGdyZXNfZmVfaCwKLSAgZGVwZW5kZW5jaWVzOiBb ZnJvbnRlbmRfY29kZSwgbGlicHEsIHpsaWJdLAorICBkZXBlbmRlbmNpZXM6IFtmcm9udGVuZF9j b2RlLCBsaWJwcSwgbHo0LCB6bGliXSwKICAga3dhcmdzOiBpbnRlcm5hbF9saWJfYXJncywKICkK IApAQCAtODUsNyArODYsMTAgQEAgdGVzdHMgKz0gewogICAnc2QnOiBtZXNvbi5jdXJyZW50X3Nv dXJjZV9kaXIoKSwKICAgJ2JkJzogbWVzb24uY3VycmVudF9idWlsZF9kaXIoKSwKICAgJ3RhcCc6 IHsKLSAgICAnZW52JzogeydHWklQX1BST0dSQU0nOiBnemlwLnBhdGgoKX0sCisgICAgJ2Vudic6 IHsKKyAgICAgICdHWklQX1BST0dSQU0nOiBnemlwLnBhdGgoKSwKKyAgICAgICdMWjQnOiBwcm9n cmFtX2x6NC5mb3VuZCgpID8gcHJvZ3JhbV9sejQucGF0aCgpIDogJycsCisgICAgfSwKICAgICAn dGVzdHMnOiBbCiAgICAgICAndC8wMDFfYmFzaWMucGwnLAogICAgICAgJ3QvMDAyX3BnX2R1bXAu cGwnLApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jIGIv c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCmluZGV4IGNjM2I3ZjA5OTIuLjcw MDVmZmNkNWIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIu YworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKQEAgLTM5NSw2ICsz OTUsMTAgQEAgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQogI2lmbmRlZiBIQVZFX0xJQloK IAkJCQlpZiAoQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9O X0daSVApCiAJCQkJCXN1cHBvcnRzX2NvbXByZXNzaW9uID0gZmFsc2U7CisjZW5kaWYKKyNpZm5k ZWYgVVNFX0xaNAorCQkJCWlmIChBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdf Q09NUFJFU1NJT05fTFo0KQorCQkJCQlzdXBwb3J0c19jb21wcmVzc2lvbiA9IGZhbHNlOwogI2Vu ZGlmCiAJCQkJaWYgKHN1cHBvcnRzX2NvbXByZXNzaW9uID09IGZhbHNlKQogCQkJCQlwZ19mYXRh bCgiY2Fubm90IHJlc3RvcmUgZnJvbSBjb21wcmVzc2VkIGFyY2hpdmUgKGNvbXByZXNzaW9uIG5v dCBzdXBwb3J0ZWQgaW4gdGhpcyBpbnN0YWxsYXRpb24pIik7CkBAIC0yMDc0LDcgKzIwNzgsNyBA QCBfZGlzY292ZXJBcmNoaXZlRm9ybWF0KEFyY2hpdmVIYW5kbGUgKkFIKQogCiAJCS8qCiAJCSAq IENoZWNrIGlmIHRoZSBzcGVjaWZpZWQgYXJjaGl2ZSBpcyBhIGRpcmVjdG9yeS4gSWYgc28sIGNo ZWNrIGlmCi0JCSAqIHRoZXJlJ3MgYSAidG9jLmRhdCIgKG9yICJ0b2MuZGF0Lmd6IikgZmlsZSBp biBpdC4KKwkJICogdGhlcmUncyBhICJ0b2MuZGF0IiAob3IgInRvYy5kYXQue2d6LGx6NH0iKSBm aWxlIGluIGl0LgogCQkgKi8KIAkJaWYgKHN0YXQoQUgtPmZTcGVjLCAmc3QpID09IDAgJiYgU19J U0RJUihzdC5zdF9tb2RlKSkKIAkJewpAQCAtMjA4NCw2ICsyMDg4LDEwIEBAIF9kaXNjb3ZlckFy Y2hpdmVGb3JtYXQoQXJjaGl2ZUhhbmRsZSAqQUgpCiAjaWZkZWYgSEFWRV9MSUJaCiAJCQlpZiAo X2ZpbGVFeGlzdHNJbkRpcmVjdG9yeShBSC0+ZlNwZWMsICJ0b2MuZGF0Lmd6IikpCiAJCQkJcmV0 dXJuIEFILT5mb3JtYXQ7CisjZW5kaWYKKyNpZmRlZiBVU0VfTFo0CisJCQlpZiAoX2ZpbGVFeGlz dHNJbkRpcmVjdG9yeShBSC0+ZlNwZWMsICJ0b2MuZGF0Lmx6NCIpKQorCQkJCXJldHVybiBBSC0+ Zm9ybWF0OwogI2VuZGlmCiAJCQlwZ19mYXRhbCgiZGlyZWN0b3J5IFwiJXNcIiBkb2VzIG5vdCBh cHBlYXIgdG8gYmUgYSB2YWxpZCBhcmNoaXZlIChcInRvYy5kYXRcIiBkb2VzIG5vdCBleGlzdCki LAogCQkJCQkgQUgtPmZTcGVjKTsKQEAgLTM3NDcsNiArMzc1NSwxMCBAQCBSZWFkSGVhZChBcmNo aXZlSGFuZGxlICpBSCkKICNpZm5kZWYgSEFWRV9MSUJaCiAJCWlmIChBSC0+Y29tcHJlc3Npb25f c3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKIAkJCXVuc3VwcG9ydGVkID0g dHJ1ZTsKKyNlbmRpZgorI2lmbmRlZiBVU0VfTFo0CisJCWlmIChBSC0+Y29tcHJlc3Npb25fc3Bl Yy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fTFo0KQorCQkJdW5zdXBwb3J0ZWQgPSB0cnVl OwogI2VuZGlmCiAJCWlmICh1bnN1cHBvcnRlZCkKIAkJCXBnX2ZhdGFsKCJhcmNoaXZlIGlzIGNv bXByZXNzZWQsIGJ1dCB0aGlzIGluc3RhbGxhdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNz aW9uIik7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuYwppbmRleCA1MjdjNzY1MWFiLi4wODEwNTMzN2IxIDEwMDY0NAotLS0g YS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1w LmMKQEAgLTcxNSwxMyArNzE1LDEyIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQlj YXNlIFBHX0NPTVBSRVNTSU9OX05PTkU6CiAJCQkvKiBmYWxsdGhyb3VnaCAqLwogCQljYXNlIFBH X0NPTVBSRVNTSU9OX0daSVA6CisJCQkvKiBmYWxsdGhyb3VnaCAqLworCQljYXNlIFBHX0NPTVBS RVNTSU9OX0xaNDoKIAkJCWJyZWFrOwogCQljYXNlIFBHX0NPTVBSRVNTSU9OX1pTVEQ6CiAJCQlw Z19mYXRhbCgiY29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJaU1RE Iik7CiAJCQlicmVhazsKLQkJY2FzZSBQR19DT01QUkVTU0lPTl9MWjQ6Ci0JCQlwZ19mYXRhbCgi Y29tcHJlc3Npb24gd2l0aCAlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCIsICJMWjQiKTsKLQkJCWJy ZWFrOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVt cC5wbCBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCmluZGV4IGYzYmE5MjYzMjEu LmY0OTdlYzYwNDAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBs CisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCkBAIC0xMzksNiArMTM5LDgw IEBAIG15ICVwZ2R1bXBfcnVucyA9ICgKIAkJCWFyZ3MgICAgPT4gWyAnLWQnLCAiJHRlbXBkaXIv Y29tcHJlc3Npb25fZ3ppcF9wbGFpbi5zcWwuZ3oiLCBdLAogCQl9LAogCX0sCisKKwkjIERvIG5v dCB1c2UgLS1uby1zeW5jIHRvIGdpdmUgdGVzdCBjb3ZlcmFnZSBmb3IgZGF0YSBzeW5jLgorCWNv bXByZXNzaW9uX2x6NF9jdXN0b20gPT4geworCQl0ZXN0X2tleSAgICAgICA9PiAnY29tcHJlc3Np b24nLAorCQljb21waWxlX29wdGlvbiA9PiAnbHo0JywKKwkJZHVtcF9jbWQgICAgICAgPT4gWwor CQkJJ3BnX2R1bXAnLCAgICAgICctLWZvcm1hdD1jdXN0b20nLAorCQkJJy0tY29tcHJlc3M9bHo0 JywgIi0tZmlsZT0kdGVtcGRpci9jb21wcmVzc2lvbl9sejRfY3VzdG9tLmR1bXAiLAorCQkJJ3Bv c3RncmVzJywKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLAorCQkJ Ii0tZmlsZT0kdGVtcGRpci9jb21wcmVzc2lvbl9sejRfY3VzdG9tLnNxbCIsCisJCQkiJHRlbXBk aXIvY29tcHJlc3Npb25fbHo0X2N1c3RvbS5kdW1wIiwKKwkJXSwKKwkJY29tbWFuZF9saWtlID0+ IHsKKwkJCWNvbW1hbmQgPT4gWworCQkJCSdwZ19yZXN0b3JlJywKKwkJCQknLWwnLCAiJHRlbXBk aXIvY29tcHJlc3Npb25fbHo0X2N1c3RvbS5kdW1wIiwKKwkJCV0sCisJCQlleHBlY3RlZCA9PiBx ci9Db21wcmVzc2lvbjogbHo0LywKKwkJCW5hbWUgPT4gJ2RhdGEgY29udGVudCBpcyBsejQgY29t cHJlc3NlZCcKKwkJfSwKKwl9LAorCisJIyBEbyBub3QgdXNlIC0tbm8tc3luYyB0byBnaXZlIHRl c3QgY292ZXJhZ2UgZm9yIGRhdGEgc3luYy4KKwljb21wcmVzc2lvbl9sejRfZGlyID0+IHsKKwkJ dGVzdF9rZXkgICAgICAgPT4gJ2NvbXByZXNzaW9uJywKKwkJY29tcGlsZV9vcHRpb24gPT4gJ2x6 NCcsCisJCWR1bXBfY21kICAgICAgID0+IFsKKwkJCSdwZ19kdW1wJywgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnLS1qb2JzPTInLAorCQkJJy0tZm9ybWF0PWRpcmVjdG9yeScsICAgICAg ICAgICAgICAgICAgICctLWNvbXByZXNzPWx6NDoxJywKKwkJCSItLWZpbGU9JHRlbXBkaXIvY29t cHJlc3Npb25fbHo0X2RpciIsICdwb3N0Z3JlcycsCisJCV0sCisJCSMgR2l2ZSBjb3ZlcmFnZSBm b3IgbWFudWFsbHkgY29tcHJlc3NlZCBibG9iLnRvYyBmaWxlcyBkdXJpbmcKKwkJIyByZXN0b3Jl LgorCQljb21wcmVzc19jbWQgPT4geworCQkJcHJvZ3JhbSA9PiAkRU5WeydMWjQnfSwKKwkJCWFy Z3MgICAgPT4gWworCQkJCScteicsICctZicsICctLXJtJywKKwkJCQkiJHRlbXBkaXIvY29tcHJl c3Npb25fbHo0X2Rpci9ibG9icy50b2MiLAorCQkJCSIkdGVtcGRpci9jb21wcmVzc2lvbl9sejRf ZGlyL2Jsb2JzLnRvYy5sejQiLAorCQkJXSwKKwkJfSwKKwkJIyBWZXJpZnkgdGhhdCBkYXRhIGZp bGVzIHdoZXJlIGNvbXByZXNzZWQKKwkJZ2xvYl9wYXR0ZXJucyA9PiBbCisJCQkiJHRlbXBkaXIv Y29tcHJlc3Npb25fbHo0X2Rpci90b2MuZGF0IiwKKwkJICAgICIkdGVtcGRpci9jb21wcmVzc2lv bl9sejRfZGlyLyouZGF0Lmx6NCIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19y ZXN0b3JlJywgJy0tam9icz0yJywKKwkJCSItLWZpbGU9JHRlbXBkaXIvY29tcHJlc3Npb25fbHo0 X2Rpci5zcWwiLAorCQkJIiR0ZW1wZGlyL2NvbXByZXNzaW9uX2x6NF9kaXIiLAorCQldLAorCX0s CisKKwljb21wcmVzc2lvbl9sejRfcGxhaW4gPT4geworCQl0ZXN0X2tleSAgICAgICA9PiAnY29t cHJlc3Npb24nLAorCQljb21waWxlX29wdGlvbiA9PiAnbHo0JywKKwkJZHVtcF9jbWQgICAgICAg PT4gWworCQkJJ3BnX2R1bXAnLCAnLS1mb3JtYXQ9cGxhaW4nLCAnLS1jb21wcmVzcz1sejQnLAor CQkJIi0tZmlsZT0kdGVtcGRpci9jb21wcmVzc2lvbl9sejRfcGxhaW4uc3FsLmx6NCIsICdwb3N0 Z3JlcycsCisJCV0sCisJCSMgRGVjb21wcmVzcyB0aGUgZ2VuZXJhdGVkIGZpbGUgdG8gcnVuIHRo cm91Z2ggdGhlIHRlc3RzLgorCQljb21wcmVzc19jbWQgPT4geworCQkJcHJvZ3JhbSA9PiAkRU5W eydMWjQnfSwKKwkJCWFyZ3MgICAgPT4gWworCQkJCSctZCcsICctZicsCisJCQkJIiR0ZW1wZGly L2NvbXByZXNzaW9uX2x6NF9wbGFpbi5zcWwubHo0IiwKKwkJCQkiJHRlbXBkaXIvY29tcHJlc3Np b25fbHo0X3BsYWluLnNxbCIsCisJCQldLAorCQl9LAorCX0sCisKIAljbGVhbiA9PiB7CiAJCWR1 bXBfY21kID0+IFsKIAkJCSdwZ19kdW1wJywKQEAgLTQxNzUsMTEgKzQyNDksMTEgQEAgZm9yZWFj aCBteSAkcnVuIChzb3J0IGtleXMgJXBnZHVtcF9ydW5zKQogCW15ICRydW5fZGIgICA9ICdwb3N0 Z3Jlcyc7CiAKIAkjIFNraXAgY29tbWFuZC1sZXZlbCB0ZXN0cyBmb3IgZ3ppcCBpZiB0aGVyZSBp cyBubyBzdXBwb3J0IGZvciBpdC4KLQlpZiAoICAgZGVmaW5lZCgkcGdkdW1wX3J1bnN7JHJ1bn0t Pntjb21waWxlX29wdGlvbn0pCi0JCSYmICRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBpbGVfb3B0 aW9ufSBlcSAnZ3ppcCcKLQkJJiYgISRzdXBwb3J0c19nemlwKQorCWlmICgkcGdkdW1wX3J1bnN7 JHJ1bn0tPntjb21waWxlX29wdGlvbn0gJiYKKwkJKCRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBp bGVfb3B0aW9ufSBlcSAnZ3ppcCcgJiYgISRzdXBwb3J0c19nemlwKSB8fAorCQkoJHBnZHVtcF9y dW5zeyRydW59LT57Y29tcGlsZV9vcHRpb259IGVxICdsejQnICYmICEkc3VwcG9ydHNfbHo0KSkK IAl7Ci0JCW5vdGUgIiRydW46IHNraXBwZWQgZHVlIHRvIG5vIGd6aXAgc3VwcG9ydCI7CisJCW5v dGUgIiRydW46IHNraXBwZWQgZHVlIHRvIG5vICRwZ2R1bXBfcnVuc3skcnVufS0+e2NvbXBpbGVf b3B0aW9ufSBzdXBwb3J0IjsKIAkJbmV4dDsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy90b29scy9w Z2luY2x1ZGUvY3BsdXNwbHVzY2hlY2sgYi9zcmMvdG9vbHMvcGdpbmNsdWRlL2NwbHVzcGx1c2No ZWNrCmluZGV4IGRhOGU0ODYxZjQuLjFmN2Y4MTdlNGQgMTAwNzU1Ci0tLSBhL3NyYy90b29scy9w Z2luY2x1ZGUvY3BsdXNwbHVzY2hlY2sKKysrIGIvc3JjL3Rvb2xzL3BnaW5jbHVkZS9jcGx1c3Bs dXNjaGVjawpAQCAtMTUyLDYgKzE1Miw3IEBAIGRvCiAJIyBhcyBmaWVsZCBuYW1lcywgd2hpY2gg aXMgdW5mb3J0dW5hdGUgYnV0IHdlIHdvbid0IGNoYW5nZSBpdCBub3cuCiAJdGVzdCAiJGYiID0g c3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuaCAmJiBjb250aW51ZQogCXRlc3QgIiRmIiA9 IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5oICYmIGNvbnRpbnVlCisJdGVzdCAiJGYiID0g c3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2x6NC5oICYmIGNvbnRpbnVlCiAJdGVzdCAiJGYiID0g c3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmggJiYgY29udGludWUKIAl0ZXN0ICIkZiIgPSBzcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggJiYgY29udGludWUKIAl0ZXN0ICIkZiIg PSBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oICYmIGNvbnRpbnVlCmRpZmYgLS1naXQgYS9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CmluZGV4IDg0MDE5MWQ2ODAuLjIzMjIyOGQ0MjcgMTAwNjQ0Ci0tLSBhL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CkBAIC0xMzgxLDYgKzEzODEsNyBAQCBMV0xvY2sKIExXTG9ja0hhbmRsZQogTFdMb2Nr TW9kZQogTFdMb2NrUGFkZGVkCitMWjRDb21wcmVzc29yU3RhdGUKIExaNEZfY29tcHJlc3Npb25D b250ZXh0X3QKIExaNEZfZGVjb21wcmVzc09wdGlvbnNfdAogTFo0Rl9kZWNvbXByZXNzaW9uQ29u dGV4dF90Ci0tIAoyLjM0LjEKCg== --b1_K2qqM7t42dUIRepy8KMEQ6vZbE1YknGEILBowG8gVDk Content-Type: text/x-patch; name=v22-0001-Introduce-Compressor-API-in-pg_dump-and-use-it-t.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v22-0001-Introduce-Compressor-API-in-pg_dump-and-use-it-t.patch RnJvbSAxZmMxOTVmOWMzN2E4ZjE3NWI3ZjI4NDNjY2Q0Njk1M2Y2YjE5YjBmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9yZ2lvcyBLb2tvbGF0b3MgPGdrb2tvbGF0b3NAcG0ubWU+ CkRhdGU6IFdlZCwgMTggSmFuIDIwMjMgMTg6MjA6NDMgKzAwMDAKU3ViamVjdDogW1BBVENIIHYy MiAxLzJdIEludHJvZHVjZSBDb21wcmVzc29yIEFQSSBpbiBwZ19kdW1wIGFuZCB1c2UgaXQKIHRo cm91Z2hvdXQKClRoZSBwdXJwb3NlIG9mIHRoaXMgQVBJIGlzIHRvIGFsbG93IGZvciBlYXNpZXIg YWRkaXRpb24gb2YgbmV3IGNvbXByZXNzaW9uCm1ldGhvZHMuIENvbXByZXNzRmlsZUhhbmRsZSBp cyBzdWJzdGl0dXRpbmcgdGhlIGNmcCogZmFtaWx5IG9mIGZ1bmN0aW9ucyB1bmRlciBhCnN0cnVj dCBvZiBmdW5jdGlvbiBwb2ludGVycyBmb3Igb3BlbmluZywgd3JpdGluZywgZXRjLiBUaGUgaW1w bGVtZW50b3Igb2YgYSBuZXcKY29tcHJlc3Npb24gbWV0aG9kIGlzIG5vdyBhYmxlIHRvICJzaW1w bHkiIGp1c3QgYWRkIHRob3NlIGRlZmluaXRpb25zLgoKQ3VzdG9tIGNvbXByZXNzZWQgYXJjaGl2 ZXMgbm93IG5lZWQgdG8gc3RvcmUgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobSBpbiB0aGVpcgpo ZWFkZXIuIFRoaXMgcmVxdWlyZXMgYSBidW1wIGluIHRoZSB2ZXJzaW9uIG51bWJlci4gVGhlIGxl dmVsIG9mIGNvbXByZXNzaW9uCmlzIG5vIGxvbmdlciBzdG9yZWQgaW4gdGhlIGR1bXAgYXMgaXQg aXMgbm93IGlycmVsZXZhbnQuCgpDb21taXQgIGJmOWFhNDkwZGIgaW50cm9kdWNlZCBjZnAgaW4g Y29tcHJlc3NfaW8ue2MsaH0gd2l0aCB0aGUgaW50ZW50IG9mCnVuaWZ5aW5nIGNvbXByZXNzaW9u IHJlbGF0ZWQgY29kZSBhbmQgYWxsb3cgZm9yIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYWRkaXRpb25h bAphcmNoaXZlIGZvcm1hdHMuIEhvd2V2ZXIsIHBnX2JhY2t1cF9hcmNoaXZlci5jIHdhcyBub3Qg dXNpbmcgdGhhdCBBUEkuIFRoaXMKY29tbWl0IHRlYWNoZXMgcGdfYmFja3VwX2FyY2hpdmVyLmMg YWJvdXQgaXQuCi0tLQogc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlICAgICAgICAgICAgICB8ICAg MSArCiBzcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5jICAgICAgIHwgNDA2ICsrKysrKysr KysrKysKIHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmggICAgICAgfCAgMjIgKwogc3Jj L2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmMgICAgICAgICB8IDgxNSArKysrKysrKystLS0tLS0t LS0tLS0tLS0tLQogc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lvLmggICAgICAgICB8ICA3MCAr Ky0KIHNyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jICB8IDE5OCArKystLS0tCiBzcmMvYmluL3Bn X2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggIHwgIDMyICstCiBzcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwX2N1c3RvbS5jICAgIHwgIDIzICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2Rp cmVjdG9yeS5jIHwgIDk0ICstLQogc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwgICAg ICB8ICAxMCArLQogc3JjL3Rvb2xzL3BnaW5jbHVkZS9jcGx1c3BsdXNjaGVjayAgICB8ICAgMSAr CiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgIHwgICAyICsKIDEzIGZpbGVz IGNoYW5nZWQsIDkxNiBpbnNlcnRpb25zKCspLCA3NTkgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9k ZSAxMDA2NDQgc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19nemlwLmgKCmRpZmYgLS1naXQgYS9zcmMvYmlu L3BnX2R1bXAvTWFrZWZpbGUgYi9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKaW5kZXggZWYxZWQw ZjNlNS4uN2ExOWY1ZDYxNyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlCisr KyBiL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQpAQCAtMjQsNiArMjQsNyBAQCBMREZMQUdTX0lO VEVSTkFMICs9IC1MJCh0b3BfYnVpbGRkaXIpL3NyYy9mZV91dGlscyAtbHBnZmV1dGlscyAkKGxp YnBxX3BncG9ydCkKIAogT0JKUyA9IFwKIAkkKFdJTjMyUkVTKSBcCisJY29tcHJlc3NfZ3ppcC5v IFwKIAljb21wcmVzc19pby5vIFwKIAlkdW1wdXRpbHMubyBcCiAJcGFyYWxsZWwubyBcCmRpZmYg LS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfZ3ppcC5jIGIvc3JjL2Jpbi9wZ19kdW1w L2NvbXByZXNzX2d6aXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5m MzY1YjkzYjc2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6 aXAuYwpAQCAtMCwwICsxLDQwNiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogY29tcHJl c3NfZ3ppcC5jCisgKgkgUm91dGluZXMgZm9yIGFyY2hpdmVycyB0byB3cml0ZSBhbiB1bmNvbXBy ZXNzZWQgb3IgY29tcHJlc3NlZCBkYXRhCisgKgkgc3RyZWFtLgorICoKKyAqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91 cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJz aXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICAgc3JjL2Jpbi9w Z19kdW1wL2NvbXByZXNzX2d6aXAuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5j bHVkZSAicG9zdGdyZXNfZmUuaCIKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImNv bXByZXNzX2d6aXAuaCIKKyNpbmNsdWRlICJwZ19iYWNrdXBfdXRpbHMuaCIKKworI2lmZGVmIEhB VkVfTElCWgorI2luY2x1ZGUgInpsaWIuaCIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg KiBDb21wcmVzc29yIEFQSQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3R5cGVkZWYg c3RydWN0IEd6aXBDb21wcmVzc29yU3RhdGUKK3sKKwl6X3N0cmVhbXAJenA7CisKKwl2b2lkCSAg ICpvdXRidWY7CisJc2l6ZV90CQlvdXRzaXplOworfSBHemlwQ29tcHJlc3NvclN0YXRlOworCisv KiBQcml2YXRlIHJvdXRpbmVzIHRoYXQgc3VwcG9ydCBnemlwIGNvbXByZXNzZWQgZGF0YSBJL08g Ki8KK3N0YXRpYyB2b2lkCitEZWZsYXRlQ29tcHJlc3Nvckd6aXAoQXJjaGl2ZUhhbmRsZSAqQUgs IENvbXByZXNzb3JTdGF0ZSAqY3MsIGJvb2wgZmx1c2gpCit7CisJR3ppcENvbXByZXNzb3JTdGF0 ZSAqZ3ppcGNzID0gKEd6aXBDb21wcmVzc29yU3RhdGUgKikgY3MtPnByaXZhdGVfZGF0YTsKKwl6 X3N0cmVhbXAJenAgPSBnemlwY3MtPnpwOworCXZvaWQJICAgKm91dCA9IGd6aXBjcy0+b3V0YnVm OworCWludAkJCXJlcyA9IFpfT0s7CisKKwl3aGlsZSAoZ3ppcGNzLT56cC0+YXZhaWxfaW4gIT0g MCB8fCBmbHVzaCkKKwl7CisJCXJlcyA9IGRlZmxhdGUoenAsIGZsdXNoID8gWl9GSU5JU0ggOiBa X05PX0ZMVVNIKTsKKwkJaWYgKHJlcyA9PSBaX1NUUkVBTV9FUlJPUikKKwkJCXBnX2ZhdGFsKCJj b3VsZCBub3QgY29tcHJlc3MgZGF0YTogJXMiLCB6cC0+bXNnKTsKKwkJaWYgKChmbHVzaCAmJiAo enAtPmF2YWlsX291dCA8IGd6aXBjcy0+b3V0c2l6ZSkpCisJCQl8fCAoenAtPmF2YWlsX291dCA9 PSAwKQorCQkJfHwgKHpwLT5hdmFpbF9pbiAhPSAwKQorCQkJKQorCQl7CisJCQkvKgorCQkJICog RXh0cmEgcGFyYW5vaWE6IGF2b2lkIHplcm8tbGVuZ3RoIGNodW5rcywgc2luY2UgYSB6ZXJvIGxl bmd0aAorCQkJICogY2h1bmsgaXMgdGhlIEVPRiBtYXJrZXIgaW4gdGhlIGN1c3RvbSBmb3JtYXQu IFRoaXMgc2hvdWxkIG5ldmVyCisJCQkgKiBoYXBwZW4gYnV0Li4uCisJCQkgKi8KKwkJCWlmICh6 cC0+YXZhaWxfb3V0IDwgZ3ppcGNzLT5vdXRzaXplKQorCQkJeworCQkJCS8qCisJCQkJICogQW55 IHdyaXRlIGZ1bmN0aW9uIHNob3VsZCBkbyBpdHMgb3duIGVycm9yIGNoZWNraW5nIGJ1dCB0bwor CQkJCSAqIG1ha2Ugc3VyZSB3ZSBkbyBhIGNoZWNrIGhlcmUgYXMgd2VsbC4uLgorCQkJCSAqLwor CQkJCXNpemVfdAkJbGVuID0gZ3ppcGNzLT5vdXRzaXplIC0genAtPmF2YWlsX291dDsKKworCQkJ CWNzLT53cml0ZUYoQUgsIChjaGFyICopIG91dCwgbGVuKTsKKwkJCX0KKwkJCXpwLT5uZXh0X291 dCA9IG91dDsKKwkJCXpwLT5hdmFpbF9vdXQgPSBnemlwY3MtPm91dHNpemU7CisJCX0KKworCQlp ZiAocmVzID09IFpfU1RSRUFNX0VORCkKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQK K0VuZENvbXByZXNzb3JHemlwKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNz KQoreworCUd6aXBDb21wcmVzc29yU3RhdGUgKmd6aXBjcyA9IChHemlwQ29tcHJlc3NvclN0YXRl ICopIGNzLT5wcml2YXRlX2RhdGE7CisJel9zdHJlYW1wCXpwOworCisJaWYgKGd6aXBjcy0+enAp CisJeworCQl6cCA9IGd6aXBjcy0+enA7CisJCXpwLT5uZXh0X2luID0gTlVMTDsKKwkJenAtPmF2 YWlsX2luID0gMDsKKworCQkvKiBGbHVzaCBhbnkgcmVtYWluaW5nIGRhdGEgZnJvbSB6bGliIGJ1 ZmZlciAqLworCQlEZWZsYXRlQ29tcHJlc3Nvckd6aXAoQUgsIGNzLCB0cnVlKTsKKworCQlpZiAo ZGVmbGF0ZUVuZCh6cCkgIT0gWl9PSykKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgY29t cHJlc3Npb24gc3RyZWFtOiAlcyIsIHpwLT5tc2cpOworCisJCXBnX2ZyZWUoZ3ppcGNzLT5vdXRi dWYpOworCQlwZ19mcmVlKGd6aXBjcy0+enApOworCX0KKworCXBnX2ZyZWUoZ3ppcGNzKTsKKwlj cy0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK1dyaXRlRGF0YVRvQXJj aGl2ZUd6aXAoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCisJCQkJCSAg IGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKQoreworCUd6aXBDb21wcmVzc29yU3RhdGUg Kmd6aXBjcyA9IChHemlwQ29tcHJlc3NvclN0YXRlICopIGNzLT5wcml2YXRlX2RhdGE7CisJel9z dHJlYW1wCXpwOworCisJaWYgKCFnemlwY3MtPnpwKQorCXsKKwkJenAgPSBnemlwY3MtPnpwID0g KHpfc3RyZWFtcCkgcGdfbWFsbG9jKHNpemVvZih6X3N0cmVhbSkpOworCQl6cC0+emFsbG9jID0g Wl9OVUxMOworCQl6cC0+emZyZWUgPSBaX05VTEw7CisJCXpwLT5vcGFxdWUgPSBaX05VTEw7CisK KwkJLyoKKwkJICogb3V0c2l6ZSBpcyB0aGUgYnVmZmVyIHNpemUgd2UgdGVsbCB6bGliIGl0IGNh biBvdXRwdXQgdG8uICBXZQorCQkgKiBhY3R1YWxseSBhbGxvY2F0ZSBvbmUgZXh0cmEgYnl0ZSBi ZWNhdXNlIHNvbWUgcm91dGluZXMgd2FudCB0bworCQkgKiBhcHBlbmQgYSB0cmFpbGluZyB6ZXJv IGJ5dGUgdG8gdGhlIHpsaWIgb3V0cHV0LgorCQkgKi8KKwkJZ3ppcGNzLT5vdXRidWYgPSBwZ19t YWxsb2MoWkxJQl9PVVRfU0laRSArIDEpOworCQlnemlwY3MtPm91dHNpemUgPSBaTElCX09VVF9T SVpFOworCisJCS8qCisJCSAqIEEgbGV2ZWwgb2YgemVybyBzaW1wbHkgY29waWVzIHRoZSBpbnB1 dCBvbmUgYmxvY2sgYXQgdGhlIHRpbWUuCisJCSAqIFRoaXMgaXMgcHJvYmFibHkgbm90IHdoYXQg dGhlIHVzZXIgd2FudGVkIHdoZW4gY2FsbGluZyB0aGlzCisJCSAqIGludGVyZmFjZS4KKwkJICov CisJCWlmIChjcy0+Y29tcHJlc3Npb25fc3BlYy5sZXZlbCA9PSAwKQorCQkJcGdfZmF0YWwoInJl cXVlc3RlZCB0byBjb21wcmVzcyB0aGUgYXJjaGl2ZSB5ZXQgbm8gbGV2ZWwgd2FzIHNwZWNpZmll ZCIpOworCisJCWlmIChkZWZsYXRlSW5pdCh6cCwgY3MtPmNvbXByZXNzaW9uX3NwZWMubGV2ZWwp ICE9IFpfT0spCisJCQlwZ19mYXRhbCgiY291bGQgbm90IGluaXRpYWxpemUgY29tcHJlc3Npb24g bGlicmFyeTogJXMiLCB6cC0+bXNnKTsKKworCQkvKiBKdXN0IGJlIHBhcmFub2lkIC0gbWF5YmUg RW5kIGlzIGNhbGxlZCBhZnRlciBTdGFydCwgd2l0aCBubyBXcml0ZSAqLworCQl6cC0+bmV4dF9v dXQgPSBnemlwY3MtPm91dGJ1ZjsKKwkJenAtPmF2YWlsX291dCA9IGd6aXBjcy0+b3V0c2l6ZTsK Kwl9CisKKwlnemlwY3MtPnpwLT5uZXh0X2luID0gKHZvaWQgKikgdW5jb25zdGlmeSh2b2lkICos IGRhdGEpOworCWd6aXBjcy0+enAtPmF2YWlsX2luID0gZExlbjsKKwlEZWZsYXRlQ29tcHJlc3Nv ckd6aXAoQUgsIGNzLCBmYWxzZSk7Cit9CisKK3N0YXRpYyB2b2lkCitSZWFkRGF0YUZyb21BcmNo aXZlR3ppcChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykKK3sKKwl6X3N0 cmVhbXAJenA7CisJY2hhcgkgICAqb3V0OworCWludAkJCXJlcyA9IFpfT0s7CisJc2l6ZV90CQlj bnQ7CisJY2hhcgkgICAqYnVmOworCXNpemVfdAkJYnVmbGVuOworCisJenAgPSAoel9zdHJlYW1w KSBwZ19tYWxsb2Moc2l6ZW9mKHpfc3RyZWFtKSk7CisJenAtPnphbGxvYyA9IFpfTlVMTDsKKwl6 cC0+emZyZWUgPSBaX05VTEw7CisJenAtPm9wYXF1ZSA9IFpfTlVMTDsKKworCWJ1ZiA9IHBnX21h bGxvYyhaTElCX0lOX1NJWkUpOworCWJ1ZmxlbiA9IFpMSUJfSU5fU0laRTsKKworCW91dCA9IHBn X21hbGxvYyhaTElCX09VVF9TSVpFICsgMSk7CisKKwlpZiAoaW5mbGF0ZUluaXQoenApICE9IFpf T0spCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgaW5pdGlhbGl6ZSBjb21wcmVzc2lvbiBsaWJyYXJ5 OiAlcyIsCisJCQkJIHpwLT5tc2cpOworCisJLyogbm8gbWluaW1hbCBjaHVuayBzaXplIGZvciB6 bGliICovCisJd2hpbGUgKChjbnQgPSBjcy0+cmVhZEYoQUgsICZidWYsICZidWZsZW4pKSkKKwl7 CisJCXpwLT5uZXh0X2luID0gKHZvaWQgKikgYnVmOworCQl6cC0+YXZhaWxfaW4gPSBjbnQ7CisK KwkJd2hpbGUgKHpwLT5hdmFpbF9pbiA+IDApCisJCXsKKwkJCXpwLT5uZXh0X291dCA9ICh2b2lk ICopIG91dDsKKwkJCXpwLT5hdmFpbF9vdXQgPSBaTElCX09VVF9TSVpFOworCisJCQlyZXMgPSBp bmZsYXRlKHpwLCAwKTsKKwkJCWlmIChyZXMgIT0gWl9PSyAmJiByZXMgIT0gWl9TVFJFQU1fRU5E KQorCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgdW5jb21wcmVzcyBkYXRhOiAlcyIsIHpwLT5tc2cp OworCisJCQlvdXRbWkxJQl9PVVRfU0laRSAtIHpwLT5hdmFpbF9vdXRdID0gJ1wwJzsKKwkJCWFo d3JpdGUob3V0LCAxLCBaTElCX09VVF9TSVpFIC0genAtPmF2YWlsX291dCwgQUgpOworCQl9CisJ fQorCisJenAtPm5leHRfaW4gPSBOVUxMOworCXpwLT5hdmFpbF9pbiA9IDA7CisJd2hpbGUgKHJl cyAhPSBaX1NUUkVBTV9FTkQpCisJeworCQl6cC0+bmV4dF9vdXQgPSAodm9pZCAqKSBvdXQ7CisJ CXpwLT5hdmFpbF9vdXQgPSBaTElCX09VVF9TSVpFOworCQlyZXMgPSBpbmZsYXRlKHpwLCAwKTsK KwkJaWYgKHJlcyAhPSBaX09LICYmIHJlcyAhPSBaX1NUUkVBTV9FTkQpCisJCQlwZ19mYXRhbCgi Y291bGQgbm90IHVuY29tcHJlc3MgZGF0YTogJXMiLCB6cC0+bXNnKTsKKworCQlvdXRbWkxJQl9P VVRfU0laRSAtIHpwLT5hdmFpbF9vdXRdID0gJ1wwJzsKKwkJYWh3cml0ZShvdXQsIDEsIFpMSUJf T1VUX1NJWkUgLSB6cC0+YXZhaWxfb3V0LCBBSCk7CisJfQorCisJaWYgKGluZmxhdGVFbmQoenAp ICE9IFpfT0spCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgY29tcHJlc3Npb24gbGlicmFy eTogJXMiLCB6cC0+bXNnKTsKKworCWZyZWUoYnVmKTsKKwlmcmVlKG91dCk7CisJZnJlZSh6cCk7 Cit9CisKKy8qIFB1YmxpYyByb3V0aW5lcyB0aGF0IHN1cHBvcnQgZ3ppcCBjb21wcmVzc2VkIGRh dGEgSS9PICovCit2b2lkCitJbml0Q29tcHJlc3Nvckd6aXAoQ29tcHJlc3NvclN0YXRlICpjcywg Y29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQoreworCUd6 aXBDb21wcmVzc29yU3RhdGUgKmd6aXBjczsKKworCWNzLT5yZWFkRGF0YSA9IFJlYWREYXRhRnJv bUFyY2hpdmVHemlwOworCWNzLT53cml0ZURhdGEgPSBXcml0ZURhdGFUb0FyY2hpdmVHemlwOwor CWNzLT5lbmQgPSBFbmRDb21wcmVzc29yR3ppcDsKKworCWNzLT5jb21wcmVzc2lvbl9zcGVjID0g Y29tcHJlc3Npb25fc3BlYzsKKworCWd6aXBjcyA9IChHemlwQ29tcHJlc3NvclN0YXRlICopIHBn X21hbGxvYzAoc2l6ZW9mKEd6aXBDb21wcmVzc29yU3RhdGUpKTsKKworCWNzLT5wcml2YXRlX2Rh dGEgPSBnemlwY3M7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb21wcmVz cyBGaWxlIEFQSQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworc3RhdGljIHNpemVf dAorR3ppcF9yZWFkKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAq Q0ZIKQoreworCWd6RmlsZQkJZ3pmcCA9IChnekZpbGUpIENGSC0+cHJpdmF0ZV9kYXRhOworCXNp emVfdAkJcmV0OworCisJcmV0ID0gZ3pyZWFkKGd6ZnAsIHB0ciwgc2l6ZSk7CisJaWYgKHJldCAh PSBzaXplICYmICFnemVvZihnemZwKSkKKwl7CisJCWludAkJCWVycm51bTsKKwkJY29uc3QgY2hh ciAqZXJybXNnID0gZ3plcnJvcihnemZwLCAmZXJybnVtKTsKKworCQlwZ19mYXRhbCgiY291bGQg bm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsCisJCQkJIGVycm51bSA9PSBaX0VSUk5PID8g c3RyZXJyb3IoZXJybm8pIDogZXJybXNnKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0 aWMgc2l6ZV90CitHemlwX3dyaXRlKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIENvbXBy ZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCWd6RmlsZQkJZ3pmcCA9IChnekZpbGUpIENGSC0+cHJp dmF0ZV9kYXRhOworCisJcmV0dXJuIGd6d3JpdGUoZ3pmcCwgcHRyLCBzaXplKTsKK30KKworc3Rh dGljIGludAorR3ppcF9nZXRjKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCWd6RmlsZQkJ Z3pmcCA9IChnekZpbGUpIENGSC0+cHJpdmF0ZV9kYXRhOworCWludAkJCXJldDsKKworCWVycm5v ID0gMDsKKwlyZXQgPSBnemdldGMoZ3pmcCk7CisJaWYgKHJldCA9PSBFT0YpCisJeworCQlpZiAo IWd6ZW9mKGd6ZnApKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmls ZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQllbHNlCisJCQlwZ19mYXRhbCgiY291bGQgbm90 IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiBlbmQgb2YgZmlsZSIpOworCX0KKworCXJldHVybiByZXQ7 Cit9CisKK3N0YXRpYyBjaGFyICoKK0d6aXBfZ2V0cyhjaGFyICpwdHIsIGludCBzaXplLCBDb21w cmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlnekZpbGUJCWd6ZnAgPSAoZ3pGaWxlKSBDRkgtPnBy aXZhdGVfZGF0YTsKKworCXJldHVybiBnemdldHMoZ3pmcCwgcHRyLCBzaXplKTsKK30KKworc3Rh dGljIGludAorR3ppcF9jbG9zZShDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlnekZpbGUJ CWd6ZnAgPSAoZ3pGaWxlKSBDRkgtPnByaXZhdGVfZGF0YTsKKwlpbnQJCQlzYXZlX2Vycm5vOwor CWludAkJCXJldDsKKworCUNGSC0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKworCXJldCA9IGd6Y2xv c2UoZ3pmcCk7CisKKwlzYXZlX2Vycm5vID0gZXJybm87CisJZXJybm8gPSBzYXZlX2Vycm5vOwor CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorR3ppcF9lb2YoQ29tcHJlc3NGaWxlSGFu ZGxlICpDRkgpCit7CisJZ3pGaWxlCQlnemZwID0gKGd6RmlsZSkgQ0ZILT5wcml2YXRlX2RhdGE7 CisKKwlyZXR1cm4gZ3plb2YoZ3pmcCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK0d6aXBf Z2V0X2Vycm9yKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQoreworCWd6RmlsZQkJZ3pmcCA9IChn ekZpbGUpIENGSC0+cHJpdmF0ZV9kYXRhOworCWNvbnN0IGNoYXIgKmVycm1zZzsKKwlpbnQJCQll cnJudW07CisKKwllcnJtc2cgPSBnemVycm9yKGd6ZnAsICZlcnJudW0pOworCWlmIChlcnJudW0g PT0gWl9FUlJOTykKKwkJZXJybXNnID0gc3RyZXJyb3IoZXJybm8pOworCisJcmV0dXJuIGVycm1z ZzsKK30KKworc3RhdGljIGludAorR3ppcF9vcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmZCwg Y29uc3QgY2hhciAqbW9kZSwgQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCit7CisJZ3pGaWxlCQln emZwOworCWNoYXIJCW1vZGVfY29tcHJlc3Npb25bMzJdOworCisJaWYgKENGSC0+Y29tcHJlc3Np b25fc3BlYy5sZXZlbCAhPSBaX0RFRkFVTFRfQ09NUFJFU1NJT04pCisJeworCQkvKgorCQkgKiB1 c2VyIGhhcyBzcGVjaWZpZWQgYSBjb21wcmVzc2lvbiBsZXZlbCwgc28gdGVsbCB6bGliIHRvIHVz ZSBpdAorCQkgKi8KKwkJc25wcmludGYobW9kZV9jb21wcmVzc2lvbiwgc2l6ZW9mKG1vZGVfY29t cHJlc3Npb24pLCAiJXMlZCIsCisJCQkJIG1vZGUsIENGSC0+Y29tcHJlc3Npb25fc3BlYy5sZXZl bCk7CisJfQorCWVsc2UKKwkJc3RyY3B5KG1vZGVfY29tcHJlc3Npb24sIG1vZGUpOworCisJaWYg KGZkID49IDApCisJCWd6ZnAgPSBnemRvcGVuKGR1cChmZCksIG1vZGVfY29tcHJlc3Npb24pOwor CWVsc2UKKwkJZ3pmcCA9IGd6b3BlbihwYXRoLCBtb2RlX2NvbXByZXNzaW9uKTsKKworCWlmIChn emZwID09IE5VTEwpCisJCXJldHVybiAxOworCisJQ0ZILT5wcml2YXRlX2RhdGEgPSBnemZwOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK0d6aXBfb3Blbl93cml0ZShjb25zdCBjaGFy ICpwYXRoLCBjb25zdCBjaGFyICptb2RlLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlj aGFyCSAgICpmbmFtZTsKKwlpbnQJCQlyZXQ7CisJaW50CQkJc2F2ZV9lcnJubzsKKworCWZuYW1l ID0gcHNwcmludGYoIiVzLmd6IiwgcGF0aCk7CisJcmV0ID0gQ0ZILT5vcGVuX2Z1bmMoZm5hbWUs IC0xLCBtb2RlLCBDRkgpOworCisJc2F2ZV9lcnJubyA9IGVycm5vOworCXBnX2ZyZWUoZm5hbWUp OworCWVycm5vID0gc2F2ZV9lcnJubzsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQKK0luaXRD b21wcmVzc0d6aXAoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgsIGNvbnN0IHBnX2NvbXByZXNzX3Nw ZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKK3sKKwlDRkgtPm9wZW5fZnVuYyA9IEd6aXBf b3BlbjsKKwlDRkgtPm9wZW5fd3JpdGVfZnVuYyA9IEd6aXBfb3Blbl93cml0ZTsKKwlDRkgtPnJl YWRfZnVuYyA9IEd6aXBfcmVhZDsKKwlDRkgtPndyaXRlX2Z1bmMgPSBHemlwX3dyaXRlOworCUNG SC0+Z2V0c19mdW5jID0gR3ppcF9nZXRzOworCUNGSC0+Z2V0Y19mdW5jID0gR3ppcF9nZXRjOwor CUNGSC0+Y2xvc2VfZnVuYyA9IEd6aXBfY2xvc2U7CisJQ0ZILT5lb2ZfZnVuYyA9IEd6aXBfZW9m OworCUNGSC0+Z2V0X2Vycm9yX2Z1bmMgPSBHemlwX2dldF9lcnJvcjsKKworCUNGSC0+Y29tcHJl c3Npb25fc3BlYyA9IGNvbXByZXNzaW9uX3NwZWM7CisKKwlDRkgtPnByaXZhdGVfZGF0YSA9IE5V TEw7Cit9CisjZWxzZQkJCQkJCQkvKiBIQVZFX0xJQlogKi8KK3ZvaWQKK0luaXRDb21wcmVzc29y R3ppcChDb21wcmVzc29yU3RhdGUgKmNzLCBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9u IGNvbXByZXNzaW9uX3NwZWMpCit7CisJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3Vw cG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwgImd6aXAiKTsKK30KKwordm9pZAorSW5pdENvbXBy ZXNzR3ppcChDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCwgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lm aWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQoreworCXBnX2ZhdGFsKCJ0aGlzIGJ1aWxkIGRvZXMg bm90IHN1cHBvcnQgY29tcHJlc3Npb24gd2l0aCAlcyIsICJnemlwIik7Cit9CisjZW5kaWYJCQkJ CQkJLyogSEFWRV9MSUJaICovCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3Nf Z3ppcC5oIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwLi42ZGZkMGViMDRkCi0tLSAvZGV2L251bGwKKysrIGIvc3Jj L2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAuaApAQCAtMCwwICsxLDIyIEBACisvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqCisgKiBjb21wcmVzc19nemlwLmgKKyAqCSBJbnRlcmZhY2UgdG8gY29tcHJl c3NfaW8uYyByb3V0aW5lcworICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIy LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJp Z2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAq CisgKiBJREVOVElGSUNBVElPTgorICoJICAgc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2d6aXAu aAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIF9DT01QUkVTU19HWklQX0hf CisjZGVmaW5lIF9DT01QUkVTU19HWklQX0hfCisKKyNpbmNsdWRlICJjb21wcmVzc19pby5oIgor CitleHRlcm4gdm9pZCBJbml0Q29tcHJlc3Nvckd6aXAoQ29tcHJlc3NvclN0YXRlICpjcywgY29u c3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKK2V4dGVybiB2 b2lkIEluaXRDb21wcmVzc0d6aXAoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgsIGNvbnN0IHBnX2Nv bXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7CisKKyNlbmRpZgkJCQkJCQkv KiBfQ09NUFJFU1NfR1pJUF9IXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2NvbXBy ZXNzX2lvLmMgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwppbmRleCA3YTJjODBiYmM0 Li5kNjAxMTFiMmI4IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwor KysgYi9zcmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uYwpAQCAtOSw0MiArOSw1NCBAQAogICoK ICAqIFRoaXMgZmlsZSBpbmNsdWRlcyB0d28gQVBJcyBmb3IgZGVhbGluZyB3aXRoIGNvbXByZXNz ZWQgZGF0YS4gVGhlIGZpcnN0CiAgKiBwcm92aWRlcyBtb3JlIGZsZXhpYmlsaXR5LCB1c2luZyBj YWxsYmFja3MgdG8gcmVhZC93cml0ZSBkYXRhIGZyb20gdGhlCi0gKiB1bmRlcmx5aW5nIHN0cmVh bS4gVGhlIHNlY29uZCBBUEkgaXMgYSB3cmFwcGVyIGFyb3VuZCBmb3Blbi9nem9wZW4gYW5kCisg KiB1bmRlcmx5aW5nIHN0cmVhbS4gVGhlIHNlY29uZCBBUEkgaXMgYSB3cmFwcGVyIGFyb3VuZCBm b3BlbiBhbmQKICAqIGZyaWVuZHMsIHByb3ZpZGluZyBhbiBpbnRlcmZhY2Ugc2ltaWxhciB0byB0 aG9zZSwgYnV0IGFic3RyYWN0cyBhd2F5Ci0gKiB0aGUgcG9zc2libGUgY29tcHJlc3Npb24uIEJv dGggQVBJcyB1c2UgbGlieiBmb3IgdGhlIGNvbXByZXNzaW9uLCBidXQKLSAqIHRoZSBzZWNvbmQg QVBJIHVzZXMgZ3ppcCBoZWFkZXJzLCBzbyB0aGUgcmVzdWx0aW5nIGZpbGVzIGNhbiBiZSBlYXNp bHkKLSAqIG1hbmlwdWxhdGVkIHdpdGggdGhlIGd6aXAgdXRpbGl0eS4KKyAqIHRoZSBwb3NzaWJs ZSBjb21wcmVzc2lvbi4gVGhlIHNlY29uZCBBUEkgaXMgYWltZWQgZm9yIHRoZSByZXN1bHRpbmcK KyAqIGZpbGVzIHRvIGJlIGVhc2lseSBtYW5pcHVsYXRlZCB3aXRoIGFuIGV4dGVybmFsIGNvbXBy ZXNzaW9uIHV0aWxpdHkKKyAqIHByb2dyYW0uCisgKgorICogVGhpcyBmaWxlIGFsc28gaW5jbHVk ZXMgdGhlIGltcGxlbWVudGF0aW9uIHdoZW4gY29tcHJlc3Npb24gaXMgbm9uZSBmb3IKKyAqIGJv dGggQVBJJ3MuCiAgKgogICogQ29tcHJlc3NvciBBUEkKICAqIC0tLS0tLS0tLS0tLS0tCiAgKgog ICoJVGhlIGludGVyZmFjZSBmb3Igd3JpdGluZyB0byBhbiBhcmNoaXZlIGNvbnNpc3RzIG9mIHRo cmVlIGZ1bmN0aW9uczoKLSAqCUFsbG9jYXRlQ29tcHJlc3NvciwgV3JpdGVEYXRhVG9BcmNoaXZl IGFuZCBFbmRDb21wcmVzc29yLiBGaXJzdCB5b3UgY2FsbAotICoJQWxsb2NhdGVDb21wcmVzc29y LCB0aGVuIHdyaXRlIGFsbCB0aGUgZGF0YSBieSBjYWxsaW5nIFdyaXRlRGF0YVRvQXJjaGl2ZQot ICoJYXMgbWFueSB0aW1lcyBhcyBuZWVkZWQsIGFuZCBmaW5hbGx5IEVuZENvbXByZXNzb3IuIFdy aXRlRGF0YVRvQXJjaGl2ZQotICoJYW5kIEVuZENvbXByZXNzb3Igd2lsbCBjYWxsIHRoZSBXcml0 ZUZ1bmMgdGhhdCB3YXMgcHJvdmlkZWQgdG8KLSAqCUFsbG9jYXRlQ29tcHJlc3NvciBmb3IgZWFj aCBjaHVuayBvZiBjb21wcmVzc2VkIGRhdGEuCi0gKgotICoJVGhlIGludGVyZmFjZSBmb3IgcmVh ZGluZyBhbiBhcmNoaXZlIGNvbnNpc3RzIG9mIGp1c3Qgb25lIGZ1bmN0aW9uOgotICoJUmVhZERh dGFGcm9tQXJjaGl2ZS4gUmVhZERhdGFGcm9tQXJjaGl2ZSByZWFkcyB0aGUgd2hvbGUgY29tcHJl c3NlZCBpbnB1dAotICoJc3RyZWFtLCBieSByZXBlYXRlZGx5IGNhbGxpbmcgdGhlIGdpdmVuIFJl YWRGdW5jLiBSZWFkRnVuYyByZXR1cm5zIHRoZQotICoJY29tcHJlc3NlZCBkYXRhIGNodW5rIGF0 IGEgdGltZSwgYW5kIFJlYWREYXRhRnJvbUFyY2hpdmUgZGVjb21wcmVzc2VzIGl0Ci0gKglhbmQg cGFzc2VzIHRoZSBkZWNvbXByZXNzZWQgZGF0YSB0byBhaHdyaXRlKCksIHVudGlsIFJlYWRGdW5j IHJldHVybnMgMAotICoJdG8gc2lnbmFsIEVPRi4KKyAqCUFsbG9jYXRlQ29tcHJlc3Nvciwgd3Jp dGVEYXRhLCBhbmQgRW5kQ29tcHJlc3Nvci4gRmlyc3QgeW91IGNhbGwKKyAqCUFsbG9jYXRlQ29t cHJlc3NvciwgdGhlbiB3cml0ZSBhbGwgdGhlIGRhdGEgYnkgY2FsbGluZyB3cml0ZURhdGEgYXMg bWFueQorICoJdGltZXMgYXMgbmVlZGVkLCBhbmQgZmluYWxseSBFbmRDb21wcmVzc29yLiB3cml0 ZURhdGEgd2lsbCBjYWxsIHRoZQorICoJV3JpdGVGdW5jIHRoYXQgd2FzIHByb3ZpZGVkIHRvIEFs bG9jYXRlQ29tcHJlc3NvciBmb3IgZWFjaCBjaHVuayBvZgorICoJY29tcHJlc3NlZCBkYXRhLgog ICoKLSAqCVRoZSBpbnRlcmZhY2UgaXMgdGhlIHNhbWUgZm9yIGNvbXByZXNzZWQgYW5kIHVuY29t cHJlc3NlZCBzdHJlYW1zLgorICoJVGhlIGludGVyZmFjZSBmb3IgcmVhZGluZyBhbiBhcmNoaXZl IGNvbnNpc3RzIG9mIHRoZSBzYW1lIHRocmVlIGZ1bmN0aW9uczoKKyAqCUFsbG9jYXRlQ29tcHJl c3NvciwgcmVhZERhdGEsIGFuZCBFbmRDb21wcmVzc29yLiBGaXJzdCB5b3UgY2FsbAorICogIEFs bG9jYXRlQ29tcHJlc3NvciwgdGhlbiByZWFkIGFsbCB0aGUgZGF0YSBieSBjYWxsaW5nIHJlYWRE YXRhIHRvIHJlYWQgdGhlCisgKgl3aG9sZSBjb21wcmVzc2VkIHN0cmVhbSB3aGljaCByZXBlYXRl ZGx5IGNhbGxzIHRoZSBnaXZlbiBSZWFkRnVuYy4gUmVhZEZ1bmMKKyAqCXJldHVybnMgdGhlIGNv bXByZXNzZWQgZGF0YSBvbmUgY2h1bmsgYXQgYSB0aW1lLiBUaGVuIHJlYWREYXRhIGRlY29tcHJl c3NlcworICoJaXQgYW5kIHBhc3NlcyB0aGUgZGVjb21wcmVzc2VkIGRhdGEgdG8gYWh3cml0ZSgp LCB1bnRpbCBSZWFkRnVuYyByZXR1cm5zIDAKKyAqCXRvIHNpZ25hbCBFT0YuIFRoZSBpbnRlcmZh Y2UgaXMgdGhlIHNhbWUgZm9yIGNvbXByZXNzZWQgYW5kIHVuY29tcHJlc3NlZAorICoJc3RyZWFt cy4KICAqCiAgKiBDb21wcmVzc2VkIHN0cmVhbSBBUEkKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KICAqCi0gKglUaGUgY29tcHJlc3NlZCBzdHJlYW0gQVBJIGlzIGEgd3JhcHBlciBhcm91bmQg dGhlIEMgc3RhbmRhcmQgZm9wZW4oKSBhbmQKLSAqCWxpYnoncyBnem9wZW4oKSBBUElzLiBJdCBh bGxvd3MgeW91IHRvIHVzZSB0aGUgc2FtZSBmdW5jdGlvbnMgZm9yCi0gKgljb21wcmVzc2VkIGFu ZCB1bmNvbXByZXNzZWQgc3RyZWFtcy4gY2ZvcGVuX3JlYWQoKSBmaXJzdCB0cmllcyB0byBvcGVu Ci0gKgl0aGUgZmlsZSB3aXRoIGdpdmVuIG5hbWUsIGFuZCBpZiBpdCBmYWlscywgaXQgdHJpZXMg dG8gb3BlbiB0aGUgc2FtZQotICoJZmlsZSB3aXRoIHRoZSAuZ3ogc3VmZml4LiBjZm9wZW5fd3Jp dGUoKSBvcGVucyBhIGZpbGUgZm9yIHdyaXRpbmcsIGFuCi0gKglleHRyYSBhcmd1bWVudCBzcGVj aWZpZXMgaWYgdGhlIGZpbGUgc2hvdWxkIGJlIGNvbXByZXNzZWQsIGFuZCBhZGRzIHRoZQotICoJ Lmd6IHN1ZmZpeCB0byB0aGUgZmlsZW5hbWUgaWYgc28uIFRoaXMgYWxsb3dzIHlvdSB0byBlYXNp bHkgaGFuZGxlIGJvdGgKLSAqCWNvbXByZXNzZWQgYW5kIHVuY29tcHJlc3NlZCBmaWxlcy4KKyAq CVRoZSBjb21wcmVzc2VkIHN0cmVhbSBBUEkgaXMgcHJvdmlkaW5nIGEgc2V0IG9mIGZ1bmN0aW9u IHBvaW50ZXJzIGZvcgorICogIG9wZW5pbmcsIHJlYWRpbmcsIHdyaXRpbmcsIGFuZCBmaW5hbGx5 IGNsb3NpbmcgZmlsZXMuIFRoZSBpbXBsZW1lbnRlZAorICogIGZ1bmN0aW9uIHBvaW50ZXJzIGFy ZSBkb2N1bWVudGVkIGluIHRoZSBjb3JyZXNwb25kaW5nIGhlYWRlciBmaWxlIGFuZCBhcmUKKyAq ICBjb21tb24gZm9yIGFsbCBzdHJlYW1zLiBJdCBhbGxvd3MgdGhlIGNhbGxlciB0byB1c2UgdGhl IHNhbWUgZnVuY3Rpb25zIGZvcgorICogIGJvdGggY29tcHJlc3NlZCBhbmQgdW5jb21wcmVzc2Vk IHN0cmVhbXMuCisgKgorICogIFRoZSBpbnRlcmZhY2UgY29uc2lzdHMgb2YgdGhyZWUgZnVuY3Rp b25zLCBJbml0Q29tcHJlc3NGaWxlSGFuZGxlLAorICogIEluaXREaXNjb3ZlckNvbXByZXNzRmls ZUhhbmRsZSwgYW5kIEVuZENvbXByZXNzRmlsZUhhbmRsZS4gSWYgdGhlCisgKiAgY29tcHJlc3Np b24gaXMga25vd24sIHRoZW4gc3RhcnQgYnkgY2FsbGluZyBJbml0Q29tcHJlc3NGaWxlSGFuZGxl LAorICogIG90aGVyd2lzZSBkaXNjb3ZlciBpdCBieSB1c2luZyBJbml0RGlzY292ZXJDb21wcmVz c0ZpbGVIYW5kbGUuIFRoZW4gY2FsbAorICogIHRoZSBmdW5jdGlvbiBwb2ludGVycyBhcyByZXF1 aXJlZCBmb3IgdGhlIHJlYWQvd3JpdGUgb3BlcmF0aW9ucy4gRmluYWxseQorICogIGNhbGwgRW5k Q29tcHJlc3NGaWxlSGFuZGxlIHRvIGVuZCB0aGUgc3RyZWFtLgorICoKKyAqCUluaXREaXNjb3Zl ckNvbXByZXNzRmlsZUhhbmRsZSB0cmllcyB0byBkZWZmZXIgdGhlIGNvbXByZXNzaW9uIGJ5IHRo ZQorICoJZmlsZW5hbWUgc3VmZml4LiBJZiB0aGUgc3VmZml4IGlzIG5vdCB5ZXQga25vd24sIHRo ZW4gaXQgdHJpZXMgdG8gc2ltcGx5CisgKglvcGVuIHRoZSBmaWxlLCBhbmQgaWYgaXQgZmFpbHMs IGl0IHRyaWVzIHRvIG9wZW4gdGhlIHNhbWUgZmlsZSB3aXRoIHRoZSAuZ3oKKyAqCXN1ZmZpeC4K ICAqCiAgKiBJREVOVElGSUNBVElPTgogICoJICAgc3JjL2Jpbi9wZ19kdW1wL2NvbXByZXNzX2lv LmMKQEAgLTUzLDcgKzY1LDExIEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgogCisj aW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKwogI2luY2x1ZGUgImNv bXByZXNzX2lvLmgiCisjaW5jbHVkZSAiY29tcHJlc3NfZ3ppcC5oIgogI2luY2x1ZGUgInBnX2Jh Y2t1cF91dGlscy5oIgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTYxLDExMCArNzcs ODIgQEAKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKLS8qIHR5cGVkZWYgYXBwZWFy cyBpbiBjb21wcmVzc19pby5oICovCi1zdHJ1Y3QgQ29tcHJlc3NvclN0YXRlCisvKiBQcml2YXRl IHJvdXRpbmVzICovCisKK3N0YXRpYyB2b2lkCitSZWFkRGF0YUZyb21BcmNoaXZlTm9uZShBcmNo aXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykKIHsKLQlwZ19jb21wcmVzc19zcGVj aWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWM7Ci0JV3JpdGVGdW5jCXdyaXRlRjsKKwlzaXplX3QJ CWNudDsKKwljaGFyCSAgICpidWY7CisJc2l6ZV90CQlidWZsZW47CiAKLSNpZmRlZiBIQVZFX0xJ QloKLQl6X3N0cmVhbXAJenA7Ci0JY2hhcgkgICAqemxpYk91dDsKLQlzaXplX3QJCXpsaWJPdXRT aXplOwotI2VuZGlmCi19OworCWJ1ZiA9IHBnX21hbGxvYyhaTElCX09VVF9TSVpFKTsKKwlidWZs ZW4gPSBaTElCX09VVF9TSVpFOwogCi0vKiBSb3V0aW5lcyB0aGF0IHN1cHBvcnQgemxpYiBjb21w cmVzc2VkIGRhdGEgSS9PICovCi0jaWZkZWYgSEFWRV9MSUJaCi1zdGF0aWMgdm9pZCBJbml0Q29t cHJlc3NvclpsaWIoQ29tcHJlc3NvclN0YXRlICpjcywgaW50IGxldmVsKTsKLXN0YXRpYyB2b2lk IERlZmxhdGVDb21wcmVzc29yWmxpYihBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRl ICpjcywKLQkJCQkJCQkJICBib29sIGZsdXNoKTsKLXN0YXRpYyB2b2lkIFJlYWREYXRhRnJvbUFy Y2hpdmVabGliKEFyY2hpdmVIYW5kbGUgKkFILCBSZWFkRnVuYyByZWFkRik7Ci1zdGF0aWMgdm9p ZCBXcml0ZURhdGFUb0FyY2hpdmVabGliKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3Rh dGUgKmNzLAotCQkJCQkJCQkgICBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgZExlbik7Ci1zdGF0 aWMgdm9pZCBFbmRDb21wcmVzc29yWmxpYihBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0 YXRlICpjcyk7Ci0jZW5kaWYKKwl3aGlsZSAoKGNudCA9IGNzLT5yZWFkRihBSCwgJmJ1ZiwgJmJ1 ZmxlbikpKQorCXsKKwkJYWh3cml0ZShidWYsIDEsIGNudCwgQUgpOworCX0KIAotLyogUm91dGlu ZXMgdGhhdCBzdXBwb3J0IHVuY29tcHJlc3NlZCBkYXRhIEkvTyAqLwotc3RhdGljIHZvaWQgUmVh ZERhdGFGcm9tQXJjaGl2ZU5vbmUoQXJjaGl2ZUhhbmRsZSAqQUgsIFJlYWRGdW5jIHJlYWRGKTsK LXN0YXRpYyB2b2lkIFdyaXRlRGF0YVRvQXJjaGl2ZU5vbmUoQXJjaGl2ZUhhbmRsZSAqQUgsIENv bXByZXNzb3JTdGF0ZSAqY3MsCi0JCQkJCQkJCSAgIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBk TGVuKTsKKwlmcmVlKGJ1Zik7Cit9CiAKLS8qIFB1YmxpYyBpbnRlcmZhY2Ugcm91dGluZXMgKi8K Ky8qIENvbXByZXNzb3IgQVBJIE5vbmUgaW1wbGVtZW50YXRpb24gKi8KIAotLyogQWxsb2NhdGUg YSBuZXcgY29tcHJlc3NvciAqLwotQ29tcHJlc3NvclN0YXRlICoKLUFsbG9jYXRlQ29tcHJlc3Nv cihjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCi0JCQkJ ICAgV3JpdGVGdW5jIHdyaXRlRikKK3N0YXRpYyB2b2lkCitXcml0ZURhdGFUb0FyY2hpdmVOb25l KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAorCQkJCQkgICBjb25zdCB2 b2lkICpkYXRhLCBzaXplX3QgZExlbikKIHsKLQlDb21wcmVzc29yU3RhdGUgKmNzOwotCi0jaWZu ZGVmIEhBVkVfTElCWgotCWlmIChjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19DT01Q UkVTU0lPTl9HWklQKQotCQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNv bXByZXNzaW9uIHdpdGggJXMiLCAiZ3ppcCIpOwotI2VuZGlmCi0KLQljcyA9IChDb21wcmVzc29y U3RhdGUgKikgcGdfbWFsbG9jMChzaXplb2YoQ29tcHJlc3NvclN0YXRlKSk7Ci0JY3MtPndyaXRl RiA9IHdyaXRlRjsKLQljcy0+Y29tcHJlc3Npb25fc3BlYyA9IGNvbXByZXNzaW9uX3NwZWM7Ci0K LQkvKgotCSAqIFBlcmZvcm0gY29tcHJlc3Npb24gYWxnb3JpdGhtIHNwZWNpZmljIGluaXRpYWxp emF0aW9uLgotCSAqLwotI2lmZGVmIEhBVkVfTElCWgotCWlmIChjcy0+Y29tcHJlc3Npb25fc3Bl Yy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKLQkJSW5pdENvbXByZXNzb3JabGli KGNzLCBjcy0+Y29tcHJlc3Npb25fc3BlYy5sZXZlbCk7Ci0jZW5kaWYKKwljcy0+d3JpdGVGKEFI LCBkYXRhLCBkTGVuKTsKK30KIAotCXJldHVybiBjczsKK3N0YXRpYyB2b2lkCitFbmRDb21wcmVz c29yTm9uZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykKK3sKKwkvKiBu byBvcCAqLwogfQogCi0vKgotICogUmVhZCBhbGwgY29tcHJlc3NlZCBkYXRhIGZyb20gdGhlIGlu cHV0IHN0cmVhbSAodmlhIHJlYWRGKSBhbmQgcHJpbnQgaXQKLSAqIG91dCB3aXRoIGFod3JpdGUo KS4KLSAqLwotdm9pZAotUmVhZERhdGFGcm9tQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCwKLQkJ CQkJY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLAotCQkJ CQlSZWFkRnVuYyByZWFkRikKK3N0YXRpYyB2b2lkCitJbml0Q29tcHJlc3Nvck5vbmUoQ29tcHJl c3NvclN0YXRlICpjcywKKwkJCQkgICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNv bXByZXNzaW9uX3NwZWMpCiB7Ci0JaWYgKGNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBH X0NPTVBSRVNTSU9OX05PTkUpCi0JCVJlYWREYXRhRnJvbUFyY2hpdmVOb25lKEFILCByZWFkRik7 Ci0JaWYgKGNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBHX0NPTVBSRVNTSU9OX0daSVAp Ci0JewotI2lmZGVmIEhBVkVfTElCWgotCQlSZWFkRGF0YUZyb21BcmNoaXZlWmxpYihBSCwgcmVh ZEYpOwotI2Vsc2UKLQkJcGdfZmF0YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21w cmVzc2lvbiB3aXRoICVzIiwgImd6aXAiKTsKLSNlbmRpZgotCX0KKwljcy0+cmVhZERhdGEgPSBS ZWFkRGF0YUZyb21BcmNoaXZlTm9uZTsKKwljcy0+d3JpdGVEYXRhID0gV3JpdGVEYXRhVG9BcmNo aXZlTm9uZTsKKwljcy0+ZW5kID0gRW5kQ29tcHJlc3Nvck5vbmU7CisKKwljcy0+Y29tcHJlc3Np b25fc3BlYyA9IGNvbXByZXNzaW9uX3NwZWM7CiB9CiAKKy8qIFB1YmxpYyBpbnRlcmZhY2Ugcm91 dGluZXMgKi8KKwogLyoKLSAqIENvbXByZXNzIGFuZCB3cml0ZSBkYXRhIHRvIHRoZSBvdXRwdXQg c3RyZWFtICh2aWEgd3JpdGVGKS4KKyAqIEFsbG9jYXRlIGEgbmV3IGNvbXByZXNzb3IuCiAgKi8K LXZvaWQKLVdyaXRlRGF0YVRvQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0 YXRlICpjcywKLQkJCQkgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZExlbikKK0NvbXByZXNz b3JTdGF0ZSAqCitBbGxvY2F0ZUNvbXByZXNzb3IoY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNh dGlvbiBjb21wcmVzc2lvbl9zcGVjLAorCQkJCSAgIFJlYWRGdW5jIHJlYWRGLCBXcml0ZUZ1bmMg d3JpdGVGKQogewotCXN3aXRjaCAoY3MtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtKQorCUNv bXByZXNzb3JTdGF0ZSAqY3M7CisKKwljcyA9IChDb21wcmVzc29yU3RhdGUgKikgcGdfbWFsbG9j MChzaXplb2YoQ29tcHJlc3NvclN0YXRlKSk7CisJY3MtPnJlYWRGID0gcmVhZEY7CisJY3MtPndy aXRlRiA9IHdyaXRlRjsKKworCXN3aXRjaCAoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0pCiAJ ewotCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6Ci0jaWZkZWYgSEFWRV9MSUJaCi0JCQlXcml0 ZURhdGFUb0FyY2hpdmVabGliKEFILCBjcywgZGF0YSwgZExlbik7Ci0jZWxzZQotCQkJcGdfZmF0 YWwoInRoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbiB3aXRoICVzIiwgImd6 aXAiKTsKLSNlbmRpZgotCQkJYnJlYWs7CiAJCWNhc2UgUEdfQ09NUFJFU1NJT05fTk9ORToKLQkJ CVdyaXRlRGF0YVRvQXJjaGl2ZU5vbmUoQUgsIGNzLCBkYXRhLCBkTGVuKTsKKwkJCUluaXRDb21w cmVzc29yTm9uZShjcywgY29tcHJlc3Npb25fc3BlYyk7CisJCQlicmVhazsKKwkJY2FzZSBQR19D T01QUkVTU0lPTl9HWklQOgorCQkJSW5pdENvbXByZXNzb3JHemlwKGNzLCBjb21wcmVzc2lvbl9z cGVjKTsKIAkJCWJyZWFrOwotCQljYXNlIFBHX0NPTVBSRVNTSU9OX0xaNDoKLQkJCS8qIGZhbGx0 aHJvdWdoICovCi0JCWNhc2UgUEdfQ09NUFJFU1NJT05fWlNURDoKLQkJCXBnX2ZhdGFsKCJpbnZh bGlkIGNvbXByZXNzaW9uIG1ldGhvZCIpOworCQlkZWZhdWx0OgorCQkJcGdfZmF0YWwoImludmFs aWQgY29tcHJlc3Npb24gbWV0aG9kIFwiJXNcIiIsCisJCQkJCSBnZXRfY29tcHJlc3NfYWxnb3Jp dGhtX25hbWUoY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0pKTsKIAkJCWJyZWFrOwogCX0KKwor CXJldHVybiBjczsKIH0KIAogLyoKQEAgLTE3Myw1MjcgKzE2MSwyNjggQEAgV3JpdGVEYXRhVG9B cmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzLAogdm9pZAogRW5k Q29tcHJlc3NvcihBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcykKIHsKLSNp ZmRlZiBIQVZFX0xJQloKLQlpZiAoY3MtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09IFBH X0NPTVBSRVNTSU9OX0daSVApCi0JCUVuZENvbXByZXNzb3JabGliKEFILCBjcyk7Ci0jZW5kaWYK LQlmcmVlKGNzKTsKKwljcy0+ZW5kKEFILCBjcyk7CisJcGdfZnJlZShjcyk7CiB9CiAKLS8qIFBy aXZhdGUgcm91dGluZXMsIHNwZWNpZmljIHRvIGVhY2ggY29tcHJlc3Npb24gbWV0aG9kLiAqLwot Ci0jaWZkZWYgSEFWRV9MSUJaCi0vKgotICogRnVuY3Rpb25zIGZvciB6bGliIGNvbXByZXNzZWQg b3V0cHV0LgorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb21wcmVzc2VkIHN0cmVhbSBB UEkKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKLXN0YXRpYyB2b2lkCi1Jbml0Q29t cHJlc3NvclpsaWIoQ29tcHJlc3NvclN0YXRlICpjcywgaW50IGxldmVsKQorLyogUHJpdmF0ZSBy b3V0aW5lcyAqLworCitzdGF0aWMgaW50CitoYXNTdWZmaXgoY29uc3QgY2hhciAqZmlsZW5hbWUs IGNvbnN0IGNoYXIgKnN1ZmZpeCkKIHsKLQl6X3N0cmVhbXAJenA7Ci0KLQl6cCA9IGNzLT56cCA9 ICh6X3N0cmVhbXApIHBnX21hbGxvYyhzaXplb2Yoel9zdHJlYW0pKTsKLQl6cC0+emFsbG9jID0g Wl9OVUxMOwotCXpwLT56ZnJlZSA9IFpfTlVMTDsKLQl6cC0+b3BhcXVlID0gWl9OVUxMOwotCi0J LyoKLQkgKiB6bGliT3V0U2l6ZSBpcyB0aGUgYnVmZmVyIHNpemUgd2UgdGVsbCB6bGliIGl0IGNh biBvdXRwdXQgdG8uICBXZQotCSAqIGFjdHVhbGx5IGFsbG9jYXRlIG9uZSBleHRyYSBieXRlIGJl Y2F1c2Ugc29tZSByb3V0aW5lcyB3YW50IHRvIGFwcGVuZCBhCi0JICogdHJhaWxpbmcgemVybyBi eXRlIHRvIHRoZSB6bGliIG91dHB1dC4KLQkgKi8KLQljcy0+emxpYk91dCA9IChjaGFyICopIHBn X21hbGxvYyhaTElCX09VVF9TSVpFICsgMSk7Ci0JY3MtPnpsaWJPdXRTaXplID0gWkxJQl9PVVRf U0laRTsKLQotCWlmIChkZWZsYXRlSW5pdCh6cCwgbGV2ZWwpICE9IFpfT0spCi0JCXBnX2ZhdGFs KCJjb3VsZCBub3QgaW5pdGlhbGl6ZSBjb21wcmVzc2lvbiBsaWJyYXJ5OiAlcyIsCi0JCQkJIHpw LT5tc2cpOwotCi0JLyogSnVzdCBiZSBwYXJhbm9pZCAtIG1heWJlIEVuZCBpcyBjYWxsZWQgYWZ0 ZXIgU3RhcnQsIHdpdGggbm8gV3JpdGUgKi8KLQl6cC0+bmV4dF9vdXQgPSAodm9pZCAqKSBjcy0+ emxpYk91dDsKLQl6cC0+YXZhaWxfb3V0ID0gY3MtPnpsaWJPdXRTaXplOworCWludAkJCWZpbGVu YW1lbGVuID0gc3RybGVuKGZpbGVuYW1lKTsKKwlpbnQJCQlzdWZmaXhsZW4gPSBzdHJsZW4oc3Vm Zml4KTsKKworCWlmIChmaWxlbmFtZWxlbiA8IHN1ZmZpeGxlbikKKwkJcmV0dXJuIDA7CisKKwly ZXR1cm4gbWVtY21wKCZmaWxlbmFtZVtmaWxlbmFtZWxlbiAtIHN1ZmZpeGxlbl0sCisJCQkJICBz dWZmaXgsCisJCQkJICBzdWZmaXhsZW4pID09IDA7CiB9CiAKKy8qIGZyZWUoKSB3aXRob3V0IGNo YW5naW5nIGVycm5vOyB1c2VmdWwgaW4gc2V2ZXJhbCBwbGFjZXMgYmVsb3cgKi8KIHN0YXRpYyB2 b2lkCi1FbmRDb21wcmVzc29yWmxpYihBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRl ICpjcykKK2ZyZWVfa2VlcF9lcnJubyh2b2lkICpwKQogewotCXpfc3RyZWFtcAl6cCA9IGNzLT56 cDsKKwlpbnQJCQlzYXZlX2Vycm5vID0gZXJybm87CiAKLQl6cC0+bmV4dF9pbiA9IE5VTEw7Ci0J enAtPmF2YWlsX2luID0gMDsKKwlmcmVlKHApOworCWVycm5vID0gc2F2ZV9lcnJubzsKK30KKwor LyoKKyAqIENvbXByZXNzZWQgc3RyZWFtIEFQSSBOb25lIGltcGxlbWVudGF0aW9uCisgKi8KK3N0 YXRpYyBzaXplX3QKK3JlYWRfbm9uZSh2b2lkICpwdHIsIHNpemVfdCBzaXplLCBDb21wcmVzc0Zp bGVIYW5kbGUgKkNGSCkKK3sKKwlGSUxFCSAgICpmcCA9IChGSUxFICopIENGSC0+cHJpdmF0ZV9k YXRhOworCXNpemVfdAkJcmV0OwogCi0JLyogRmx1c2ggYW55IHJlbWFpbmluZyBkYXRhIGZyb20g emxpYiBidWZmZXIgKi8KLQlEZWZsYXRlQ29tcHJlc3NvclpsaWIoQUgsIGNzLCB0cnVlKTsKKwlp ZiAoc2l6ZSA9PSAwKQorCQlyZXR1cm4gMDsKIAotCWlmIChkZWZsYXRlRW5kKHpwKSAhPSBaX09L KQotCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGNvbXByZXNzaW9uIHN0cmVhbTogJXMiLCB6 cC0+bXNnKTsKKwlyZXQgPSBmcmVhZChwdHIsIDEsIHNpemUsIGZwKTsKKwlpZiAocmV0ICE9IHNp emUgJiYgIWZlb2YoZnApKQorCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBm aWxlOiAlcyIsCisJCQkJIHN0cmVycm9yKGVycm5vKSk7CiAKLQlmcmVlKGNzLT56bGliT3V0KTsK LQlmcmVlKGNzLT56cCk7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQKLURlZmxhdGVD b21wcmVzc29yWmxpYihBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywgYm9v bCBmbHVzaCkKK3N0YXRpYyBzaXplX3QKK3dyaXRlX25vbmUoY29uc3Qgdm9pZCAqcHRyLCBzaXpl X3Qgc2l6ZSwgQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCiB7Ci0Jel9zdHJlYW1wCXpwID0gY3Mt PnpwOwotCWNoYXIJICAgKm91dCA9IGNzLT56bGliT3V0OwotCWludAkJCXJlcyA9IFpfT0s7Ci0K LQl3aGlsZSAoY3MtPnpwLT5hdmFpbF9pbiAhPSAwIHx8IGZsdXNoKQotCXsKLQkJcmVzID0gZGVm bGF0ZSh6cCwgZmx1c2ggPyBaX0ZJTklTSCA6IFpfTk9fRkxVU0gpOwotCQlpZiAocmVzID09IFpf U1RSRUFNX0VSUk9SKQotCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb21wcmVzcyBkYXRhOiAlcyIs IHpwLT5tc2cpOwotCQlpZiAoKGZsdXNoICYmICh6cC0+YXZhaWxfb3V0IDwgY3MtPnpsaWJPdXRT aXplKSkKLQkJCXx8ICh6cC0+YXZhaWxfb3V0ID09IDApCi0JCQl8fCAoenAtPmF2YWlsX2luICE9 IDApCi0JCQkpCi0JCXsKLQkJCS8qCi0JCQkgKiBFeHRyYSBwYXJhbm9pYTogYXZvaWQgemVyby1s ZW5ndGggY2h1bmtzLCBzaW5jZSBhIHplcm8gbGVuZ3RoCi0JCQkgKiBjaHVuayBpcyB0aGUgRU9G IG1hcmtlciBpbiB0aGUgY3VzdG9tIGZvcm1hdC4gVGhpcyBzaG91bGQgbmV2ZXIKLQkJCSAqIGhh cHBlbiBidXQuLi4KLQkJCSAqLwotCQkJaWYgKHpwLT5hdmFpbF9vdXQgPCBjcy0+emxpYk91dFNp emUpCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBBbnkgd3JpdGUgZnVuY3Rpb24gc2hvdWxkIGRvIGl0 cyBvd24gZXJyb3IgY2hlY2tpbmcgYnV0IHRvCi0JCQkJICogbWFrZSBzdXJlIHdlIGRvIGEgY2hl Y2sgaGVyZSBhcyB3ZWxsLi4uCi0JCQkJICovCi0JCQkJc2l6ZV90CQlsZW4gPSBjcy0+emxpYk91 dFNpemUgLSB6cC0+YXZhaWxfb3V0OwotCi0JCQkJY3MtPndyaXRlRihBSCwgb3V0LCBsZW4pOwot CQkJfQotCQkJenAtPm5leHRfb3V0ID0gKHZvaWQgKikgb3V0OwotCQkJenAtPmF2YWlsX291dCA9 IGNzLT56bGliT3V0U2l6ZTsKLQkJfQorCXJldHVybiBmd3JpdGUocHRyLCAxLCBzaXplLCAoRklM RSAqKSBDRkgtPnByaXZhdGVfZGF0YSk7Cit9CiAKLQkJaWYgKHJlcyA9PSBaX1NUUkVBTV9FTkQp Ci0JCQlicmVhazsKLQl9CitzdGF0aWMgY29uc3QgY2hhciAqCitnZXRfZXJyb3Jfbm9uZShDb21w cmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlyZXR1cm4gc3RyZXJyb3IoZXJybm8pOwogfQogCi1z dGF0aWMgdm9pZAotV3JpdGVEYXRhVG9BcmNoaXZlWmxpYihBcmNoaXZlSGFuZGxlICpBSCwgQ29t cHJlc3NvclN0YXRlICpjcywKLQkJCQkJICAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGRMZW4p CitzdGF0aWMgY2hhciAqCitnZXRzX25vbmUoY2hhciAqcHRyLCBpbnQgc2l6ZSwgQ29tcHJlc3NG aWxlSGFuZGxlICpDRkgpCiB7Ci0JY3MtPnpwLT5uZXh0X2luID0gKHZvaWQgKikgdW5jb25zdGlm eShjaGFyICosIGRhdGEpOwotCWNzLT56cC0+YXZhaWxfaW4gPSBkTGVuOwotCURlZmxhdGVDb21w cmVzc29yWmxpYihBSCwgY3MsIGZhbHNlKTsKKwlyZXR1cm4gZmdldHMocHRyLCBzaXplLCAoRklM RSAqKSBDRkgtPnByaXZhdGVfZGF0YSk7CiB9CiAKLXN0YXRpYyB2b2lkCi1SZWFkRGF0YUZyb21B cmNoaXZlWmxpYihBcmNoaXZlSGFuZGxlICpBSCwgUmVhZEZ1bmMgcmVhZEYpCitzdGF0aWMgaW50 CitnZXRjX25vbmUoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpCiB7Ci0Jel9zdHJlYW1wCXpwOwot CWNoYXIJICAgKm91dDsKLQlpbnQJCQlyZXMgPSBaX09LOwotCXNpemVfdAkJY250OwotCWNoYXIJ ICAgKmJ1ZjsKLQlzaXplX3QJCWJ1ZmxlbjsKKwlGSUxFCSAgICpmcCA9IChGSUxFICopIENGSC0+ cHJpdmF0ZV9kYXRhOworCWludAkJCXJldDsKIAotCXpwID0gKHpfc3RyZWFtcCkgcGdfbWFsbG9j KHNpemVvZih6X3N0cmVhbSkpOwotCXpwLT56YWxsb2MgPSBaX05VTEw7Ci0JenAtPnpmcmVlID0g Wl9OVUxMOwotCXpwLT5vcGFxdWUgPSBaX05VTEw7CisJcmV0ID0gZmdldGMoZnApOworCWlmIChy ZXQgPT0gRU9GKQorCXsKKwkJaWYgKCFmZW9mKGZwKSkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qg cmVhZCBmcm9tIGlucHV0IGZpbGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZWxzZQorCQkJ cGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmlsZTogZW5kIG9mIGZpbGUiKTsK Kwl9CiAKLQlidWYgPSBwZ19tYWxsb2MoWkxJQl9JTl9TSVpFKTsKLQlidWZsZW4gPSBaTElCX0lO X1NJWkU7CisJcmV0dXJuIHJldDsKK30KIAotCW91dCA9IHBnX21hbGxvYyhaTElCX09VVF9TSVpF ICsgMSk7CitzdGF0aWMgaW50CitjbG9zZV9ub25lKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQor eworCUZJTEUJICAgKmZwID0gKEZJTEUgKikgQ0ZILT5wcml2YXRlX2RhdGE7CisJaW50CQkJcmV0 ID0gMDsKIAotCWlmIChpbmZsYXRlSW5pdCh6cCkgIT0gWl9PSykKLQkJcGdfZmF0YWwoImNvdWxk IG5vdCBpbml0aWFsaXplIGNvbXByZXNzaW9uIGxpYnJhcnk6ICVzIiwKLQkJCQkgenAtPm1zZyk7 CisJQ0ZILT5wcml2YXRlX2RhdGEgPSBOVUxMOwogCi0JLyogbm8gbWluaW1hbCBjaHVuayBzaXpl IGZvciB6bGliICovCi0Jd2hpbGUgKChjbnQgPSByZWFkRihBSCwgJmJ1ZiwgJmJ1ZmxlbikpKQot CXsKLQkJenAtPm5leHRfaW4gPSAodm9pZCAqKSBidWY7Ci0JCXpwLT5hdmFpbF9pbiA9IGNudDsK KwlpZiAoZnApCisJCXJldCA9IGZjbG9zZShmcCk7CiAKLQkJd2hpbGUgKHpwLT5hdmFpbF9pbiA+ IDApCi0JCXsKLQkJCXpwLT5uZXh0X291dCA9ICh2b2lkICopIG91dDsKLQkJCXpwLT5hdmFpbF9v dXQgPSBaTElCX09VVF9TSVpFOworCXJldHVybiByZXQ7Cit9CiAKLQkJCXJlcyA9IGluZmxhdGUo enAsIDApOwotCQkJaWYgKHJlcyAhPSBaX09LICYmIHJlcyAhPSBaX1NUUkVBTV9FTkQpCi0JCQkJ cGdfZmF0YWwoImNvdWxkIG5vdCB1bmNvbXByZXNzIGRhdGE6ICVzIiwgenAtPm1zZyk7CitzdGF0 aWMgaW50Citlb2Zfbm9uZShDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCkKK3sKKwlyZXR1cm4gZmVv ZigoRklMRSAqKSBDRkgtPnByaXZhdGVfZGF0YSk7Cit9CiAKLQkJCW91dFtaTElCX09VVF9TSVpF IC0genAtPmF2YWlsX291dF0gPSAnXDAnOwotCQkJYWh3cml0ZShvdXQsIDEsIFpMSUJfT1VUX1NJ WkUgLSB6cC0+YXZhaWxfb3V0LCBBSCk7Ci0JCX0KLQl9CitzdGF0aWMgaW50CitvcGVuX25vbmUo Y29uc3QgY2hhciAqcGF0aCwgaW50IGZkLCBjb25zdCBjaGFyICptb2RlLCBDb21wcmVzc0ZpbGVI YW5kbGUgKkNGSCkKK3sKKwlBc3NlcnQoQ0ZILT5wcml2YXRlX2RhdGEgPT0gTlVMTCk7CiAKLQl6 cC0+bmV4dF9pbiA9IE5VTEw7Ci0JenAtPmF2YWlsX2luID0gMDsKLQl3aGlsZSAocmVzICE9IFpf U1RSRUFNX0VORCkKLQl7Ci0JCXpwLT5uZXh0X291dCA9ICh2b2lkICopIG91dDsKLQkJenAtPmF2 YWlsX291dCA9IFpMSUJfT1VUX1NJWkU7Ci0JCXJlcyA9IGluZmxhdGUoenAsIDApOwotCQlpZiAo cmVzICE9IFpfT0sgJiYgcmVzICE9IFpfU1RSRUFNX0VORCkKLQkJCXBnX2ZhdGFsKCJjb3VsZCBu b3QgdW5jb21wcmVzcyBkYXRhOiAlcyIsIHpwLT5tc2cpOwotCi0JCW91dFtaTElCX09VVF9TSVpF IC0genAtPmF2YWlsX291dF0gPSAnXDAnOwotCQlhaHdyaXRlKG91dCwgMSwgWkxJQl9PVVRfU0la RSAtIHpwLT5hdmFpbF9vdXQsIEFIKTsKLQl9CisJaWYgKGZkID49IDApCisJCUNGSC0+cHJpdmF0 ZV9kYXRhID0gZmRvcGVuKGR1cChmZCksIG1vZGUpOworCWVsc2UKKwkJQ0ZILT5wcml2YXRlX2Rh dGEgPSBmb3BlbihwYXRoLCBtb2RlKTsKIAotCWlmIChpbmZsYXRlRW5kKHpwKSAhPSBaX09LKQot CQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIGNvbXByZXNzaW9uIGxpYnJhcnk6ICVzIiwgenAt Pm1zZyk7CisJaWYgKENGSC0+cHJpdmF0ZV9kYXRhID09IE5VTEwpCisJCXJldHVybiAxOwogCi0J ZnJlZShidWYpOwotCWZyZWUob3V0KTsKLQlmcmVlKHpwKTsKKwlyZXR1cm4gMDsKIH0KLSNlbmRp ZgkJCQkJCQkvKiBIQVZFX0xJQlogKi8KLQogCi0vKgotICogRnVuY3Rpb25zIGZvciB1bmNvbXBy ZXNzZWQgb3V0cHV0LgotICovCi0KLXN0YXRpYyB2b2lkCi1SZWFkRGF0YUZyb21BcmNoaXZlTm9u ZShBcmNoaXZlSGFuZGxlICpBSCwgUmVhZEZ1bmMgcmVhZEYpCitzdGF0aWMgaW50CitvcGVuX3dy aXRlX25vbmUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwgQ29tcHJlc3NGaWxl SGFuZGxlICpDRkgpCiB7Ci0Jc2l6ZV90CQljbnQ7Ci0JY2hhcgkgICAqYnVmOwotCXNpemVfdAkJ YnVmbGVuOwotCi0JYnVmID0gcGdfbWFsbG9jKFpMSUJfT1VUX1NJWkUpOwotCWJ1ZmxlbiA9IFpM SUJfT1VUX1NJWkU7CisJQXNzZXJ0KENGSC0+cHJpdmF0ZV9kYXRhID09IE5VTEwpOwogCi0Jd2hp bGUgKChjbnQgPSByZWFkRihBSCwgJmJ1ZiwgJmJ1ZmxlbikpKQotCXsKLQkJYWh3cml0ZShidWYs IDEsIGNudCwgQUgpOwotCX0KKwlDRkgtPnByaXZhdGVfZGF0YSA9IGZvcGVuKHBhdGgsIG1vZGUp OworCWlmIChDRkgtPnByaXZhdGVfZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gMTsKIAotCWZyZWUo YnVmKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQKLVdyaXRlRGF0YVRvQXJjaGl2ZU5v bmUoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzb3JTdGF0ZSAqY3MsCi0JCQkJCSAgIGNvbnN0 IGNoYXIgKmRhdGEsIHNpemVfdCBkTGVuKQorSW5pdENvbXByZXNzTm9uZShDb21wcmVzc0ZpbGVI YW5kbGUgKkNGSCwKKwkJCQkgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVz c2lvbl9zcGVjKQogewotCWNzLT53cml0ZUYoQUgsIGRhdGEsIGRMZW4pOworCUNGSC0+b3Blbl9m dW5jID0gb3Blbl9ub25lOworCUNGSC0+b3Blbl93cml0ZV9mdW5jID0gb3Blbl93cml0ZV9ub25l OworCUNGSC0+cmVhZF9mdW5jID0gcmVhZF9ub25lOworCUNGSC0+d3JpdGVfZnVuYyA9IHdyaXRl X25vbmU7CisJQ0ZILT5nZXRzX2Z1bmMgPSBnZXRzX25vbmU7CisJQ0ZILT5nZXRjX2Z1bmMgPSBn ZXRjX25vbmU7CisJQ0ZILT5jbG9zZV9mdW5jID0gY2xvc2Vfbm9uZTsKKwlDRkgtPmVvZl9mdW5j ID0gZW9mX25vbmU7CisJQ0ZILT5nZXRfZXJyb3JfZnVuYyA9IGdldF9lcnJvcl9ub25lOworCisJ Q0ZILT5wcml2YXRlX2RhdGEgPSBOVUxMOwogfQogCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQotICogQ29tcHJlc3NlZCBzdHJlYW0gQVBJCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAq LwotCiAvKgotICogY2ZwIHJlcHJlc2VudHMgYW4gb3BlbiBzdHJlYW0sIHdyYXBwaW5nIHRoZSB1 bmRlcmx5aW5nIEZJTEUgb3IgZ3pGaWxlCi0gKiBwb2ludGVyLiBUaGlzIGlzIG9wYXF1ZSB0byB0 aGUgY2FsbGVycy4KKyAqIFB1YmxpYyBpbnRlcmZhY2UKICAqLwotc3RydWN0IGNmcAotewotCUZJ TEUJICAgKnVuY29tcHJlc3NlZGZwOwotI2lmZGVmIEhBVkVfTElCWgotCWd6RmlsZQkJY29tcHJl c3NlZGZwOwotI2VuZGlmCi19OwotCi0jaWZkZWYgSEFWRV9MSUJaCi1zdGF0aWMgaW50CWhhc1N1 ZmZpeChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqc3VmZml4KTsKLSNlbmRpZgot Ci0vKiBmcmVlKCkgd2l0aG91dCBjaGFuZ2luZyBlcnJubzsgdXNlZnVsIGluIHNldmVyYWwgcGxh Y2VzIGJlbG93ICovCi1zdGF0aWMgdm9pZAotZnJlZV9rZWVwX2Vycm5vKHZvaWQgKnApCi17Ci0J aW50CQkJc2F2ZV9lcnJubyA9IGVycm5vOwotCi0JZnJlZShwKTsKLQllcnJubyA9IHNhdmVfZXJy bm87Ci19CiAKIC8qCi0gKiBPcGVuIGEgZmlsZSBmb3IgcmVhZGluZy4gJ3BhdGgnIGlzIHRoZSBm aWxlIHRvIG9wZW4sIGFuZCAnbW9kZScgc2hvdWxkCi0gKiBiZSBlaXRoZXIgInIiIG9yICJyYiIu Ci0gKgotICogSWYgdGhlIGZpbGUgYXQgJ3BhdGgnIGRvZXMgbm90IGV4aXN0LCB3ZSBhcHBlbmQg dGhlICIuZ3oiIHN1ZmZpeCAoaWYgJ3BhdGgnCi0gKiBkb2Vzbid0IGFscmVhZHkgaGF2ZSBpdCkg YW5kIHRyeSBhZ2Fpbi4gU28gaWYgeW91IHBhc3MgImZvbyIgYXMgJ3BhdGgnLAotICogdGhpcyB3 aWxsIG9wZW4gZWl0aGVyICJmb28iIG9yICJmb28uZ3oiLgotICoKLSAqIE9uIGZhaWx1cmUsIHJl dHVybiBOVUxMIHdpdGggYW4gZXJyb3IgY29kZSBpbiBlcnJuby4KKyAqIEluaXRpYWxpemUgYSBj b21wcmVzcyBmaWxlIGhhbmRsZSBmb3IgdGhlIHNwZWNpZmllZCBjb21wcmVzc2lvbiBhbGdvcml0 aG0uCiAgKi8KLWNmcCAqCi1jZm9wZW5fcmVhZChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFy ICptb2RlKQorQ29tcHJlc3NGaWxlSGFuZGxlICoKK0luaXRDb21wcmVzc0ZpbGVIYW5kbGUoY29u c3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQogewotCWNmcAkJ ICAgKmZwOworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIOwogCi0JcGdfY29tcHJlc3Nfc3BlY2lm aWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjID0gezB9OworCUNGSCA9IHBnX21hbGxvYzAoc2l6ZW9m KENvbXByZXNzRmlsZUhhbmRsZSkpOwogCi0jaWZkZWYgSEFWRV9MSUJaCi0JaWYgKGhhc1N1ZmZp eChwYXRoLCAiLmd6IikpCisJc3dpdGNoIChjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkKIAl7 Ci0JCWNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fR1pJUDsKLQkJ ZnAgPSBjZm9wZW4ocGF0aCwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7CisJCWNhc2UgUEdfQ09N UFJFU1NJT05fTk9ORToKKwkJCUluaXRDb21wcmVzc05vbmUoQ0ZILCBjb21wcmVzc2lvbl9zcGVj KTsKKwkJCWJyZWFrOworCQljYXNlIFBHX0NPTVBSRVNTSU9OX0daSVA6CisJCQlJbml0Q29tcHJl c3NHemlwKENGSCwgY29tcHJlc3Npb25fc3BlYyk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJ CXBnX2ZhdGFsKCJpbnZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCBcIiVzXCIiLAorCQkJCQkgZ2V0 X2NvbXByZXNzX2FsZ29yaXRobV9uYW1lKGNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtKSk7CisJ CQlicmVhazsKIAl9Ci0JZWxzZQotI2VuZGlmCi0JewotCQljb21wcmVzc2lvbl9zcGVjLmFsZ29y aXRobSA9IFBHX0NPTVBSRVNTSU9OX05PTkU7Ci0JCWZwID0gY2ZvcGVuKHBhdGgsIG1vZGUsIGNv bXByZXNzaW9uX3NwZWMpOwotI2lmZGVmIEhBVkVfTElCWgotCQlpZiAoZnAgPT0gTlVMTCkKLQkJ ewotCQkJY2hhcgkgICAqZm5hbWU7CiAKLQkJCWZuYW1lID0gcHNwcmludGYoIiVzLmd6IiwgcGF0 aCk7Ci0JCQljb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX0daSVA7 Ci0JCQlmcCA9IGNmb3BlbihmbmFtZSwgbW9kZSwgY29tcHJlc3Npb25fc3BlYyk7Ci0JCQlmcmVl X2tlZXBfZXJybm8oZm5hbWUpOwotCQl9Ci0jZW5kaWYKLQl9Ci0JcmV0dXJuIGZwOworCXJldHVy biBDRkg7CiB9CiAKIC8qCi0gKiBPcGVuIGEgZmlsZSBmb3Igd3JpdGluZy4gJ3BhdGgnIGluZGlj YXRlcyB0aGUgcGF0aCBuYW1lLCBhbmQgJ21vZGUnIG11c3QKLSAqIGJlIGEgZmlsZW1vZGUgYXMg YWNjZXB0ZWQgYnkgZm9wZW4oKSBhbmQgZ3pvcGVuKCkgdGhhdCBpbmRpY2F0ZXMgd3JpdGluZwot ICogKCJ3IiwgIndiIiwgImEiLCBvciAiYWIiKS4KKyAqIE9wZW4gYSBmaWxlIGZvciByZWFkaW5n LiAncGF0aCcgaXMgdGhlIGZpbGUgdG8gb3BlbiwgYW5kICdtb2RlJyBzaG91bGQKKyAqIGJlIGVp dGhlciAiciIgb3IgInJiIi4KICAqCi0gKiBJZiAnY29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0n IGlzIEdaSVAsIGEgZ3ppcCBjb21wcmVzc2VkIHN0cmVhbSBpcyBvcGVuZWQsCi0gKiBhbmQgJ2Nv bXByZXNzaW9uX3NwZWMubGV2ZWwnIHVzZWQuIFRoZSAiLmd6IiBzdWZmaXggaXMgYXV0b21hdGlj YWxseSBhZGRlZCB0bwotICogJ3BhdGgnIGluIHRoYXQgY2FzZS4KKyAqIElmIHRoZSBmaWxlIGF0 ICdwYXRoJyBjb250YWlucyB0aGUgc3VmZml4IG9mIGEgc3VwcG9ydGVkIGNvbXByZXNzaW9uIG1l dGhvZCwKKyAqIGN1cnJlbnRseSB0aGlzIGluY2x1ZGVzIG9ubHkgIi5neiIsIHRoZW4gdGhpcyBj b21wcmVzc2lvbiB3aWxsIGJlIHVzZWQKKyAqIHRocm91Z2hvdXQuIE90aGVyd2lzZSB0aGUgY29t cHJlc3Npb24gd2lsbCBiZSBkZWZlcnJlZCBieSBpdGVyYXRpdmVseSB0cnlpbmcKKyAqIHRvIG9w ZW4gdGhlIGZpbGUgYXQgJ3BhdGgnLCBmaXJzdCBhcyBpcywgdGhlbiBieSBhcHBlbmRpbmcga25v d24gY29tcHJlc3Npb24KKyAqIHN1ZmZpeGVzLiBTbyBpZiB5b3UgcGFzcyAiZm9vIiBhcyAncGF0 aCcsIHRoaXMgd2lsbCBvcGVuIGVpdGhlciAiZm9vIiBvcgorICogImZvby5neiIsIHRyeWluZyBp biB0aGF0IG9yZGVyLgogICoKICAqIE9uIGZhaWx1cmUsIHJldHVybiBOVUxMIHdpdGggYW4gZXJy b3IgY29kZSBpbiBlcnJuby4KICAqLwotY2ZwICoKLWNmb3Blbl93cml0ZShjb25zdCBjaGFyICpw YXRoLCBjb25zdCBjaGFyICptb2RlLAotCQkJIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRp b24gY29tcHJlc3Npb25fc3BlYykKK0NvbXByZXNzRmlsZUhhbmRsZSAqCitJbml0RGlzY292ZXJD b21wcmVzc0ZpbGVIYW5kbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSkKIHsK LQljZnAJCSAgICpmcDsKLQotCWlmIChjb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9PSBQR19D T01QUkVTU0lPTl9OT05FKQotCQlmcCA9IGNmb3BlbihwYXRoLCBtb2RlLCBjb21wcmVzc2lvbl9z cGVjKTsKLQllbHNlCi0JewotI2lmZGVmIEhBVkVfTElCWgotCQljaGFyCSAgICpmbmFtZTsKLQot CQlmbmFtZSA9IHBzcHJpbnRmKCIlcy5neiIsIHBhdGgpOwotCQlmcCA9IGNmb3BlbihmbmFtZSwg bW9kZSwgY29tcHJlc3Npb25fc3BlYyk7Ci0JCWZyZWVfa2VlcF9lcnJubyhmbmFtZSk7Ci0jZWxz ZQotCQlwZ19mYXRhbCgidGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdp dGggJXMiLCAiZ3ppcCIpOwotCQlmcCA9IE5VTEw7CQkJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQg Ki8KLSNlbmRpZgotCX0KLQlyZXR1cm4gZnA7Ci19CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgg PSBOVUxMOworCXN0cnVjdCBzdGF0IHN0OworCWNoYXIJICAgKmZuYW1lOworCXBnX2NvbXByZXNz X3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyA9IHswfTsKIAotLyoKLSAqIE9wZW5zIGZp bGUgJ3BhdGgnIGluICdtb2RlJy4gSWYgY29tcHJlc3Npb24gaXMgR1pJUCwgdGhlIGZpbGUKLSAq IGlzIG9wZW5lZCB3aXRoIGxpYnogZ3pvcGVuKCksIG90aGVyd2lzZSB3aXRoIHBsYWluIGZvcGVu KCkuCi0gKgotICogT24gZmFpbHVyZSwgcmV0dXJuIE5VTEwgd2l0aCBhbiBlcnJvciBjb2RlIGlu IGVycm5vLgotICovCi1jZnAgKgotY2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIg Km1vZGUsCi0JICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9z cGVjKQotewotCWNmcAkJICAgKmZwID0gcGdfbWFsbG9jKHNpemVvZihjZnApKTsKKwljb21wcmVz c2lvbl9zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX05PTkU7CiAKLQlpZiAoY29tcHJl c3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKLQl7Ci0jaWZkZWYg SEFWRV9MSUJaCi0JCWlmIChjb21wcmVzc2lvbl9zcGVjLmxldmVsICE9IFpfREVGQVVMVF9DT01Q UkVTU0lPTikKLQkJewotCQkJLyogdXNlciBoYXMgc3BlY2lmaWVkIGEgY29tcHJlc3Npb24gbGV2 ZWwsIHNvIHRlbGwgemxpYiB0byB1c2UgaXQgKi8KLQkJCWNoYXIJCW1vZGVfY29tcHJlc3Npb25b MzJdOworCUFzc2VydChzdHJjbXAobW9kZSwgInIiKSA9PSAwIHx8IHN0cmNtcChtb2RlLCAicmIi KSA9PSAwKTsKIAotCQkJc25wcmludGYobW9kZV9jb21wcmVzc2lvbiwgc2l6ZW9mKG1vZGVfY29t cHJlc3Npb24pLCAiJXMlZCIsCi0JCQkJCSBtb2RlLCBjb21wcmVzc2lvbl9zcGVjLmxldmVsKTsK LQkJCWZwLT5jb21wcmVzc2VkZnAgPSBnem9wZW4ocGF0aCwgbW9kZV9jb21wcmVzc2lvbik7Ci0J CX0KLQkJZWxzZQotCQl7Ci0JCQkvKiBkb24ndCBzcGVjaWZ5IGEgbGV2ZWwsIGp1c3QgdXNlIHRo ZSB6bGliIGRlZmF1bHQgKi8KLQkJCWZwLT5jb21wcmVzc2VkZnAgPSBnem9wZW4ocGF0aCwgbW9k ZSk7Ci0JCX0KKwlmbmFtZSA9IHN0cmR1cChwYXRoKTsKIAotCQlmcC0+dW5jb21wcmVzc2VkZnAg PSBOVUxMOwotCQlpZiAoZnAtPmNvbXByZXNzZWRmcCA9PSBOVUxMKQotCQl7Ci0JCQlmcmVlX2tl ZXBfZXJybm8oZnApOwotCQkJZnAgPSBOVUxMOwotCQl9Ci0jZWxzZQotCQlwZ19mYXRhbCgidGhp cyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uIHdpdGggJXMiLCAiZ3ppcCIpOwot I2VuZGlmCi0JfQorCWlmIChoYXNTdWZmaXgoZm5hbWUsICIuZ3oiKSkKKwkJY29tcHJlc3Npb25f c3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lPTl9HWklQOwogCWVsc2UKIAl7Ci0jaWZkZWYg SEFWRV9MSUJaCi0JCWZwLT5jb21wcmVzc2VkZnAgPSBOVUxMOwotI2VuZGlmCi0JCWZwLT51bmNv bXByZXNzZWRmcCA9IGZvcGVuKHBhdGgsIG1vZGUpOwotCQlpZiAoZnAtPnVuY29tcHJlc3NlZGZw ID09IE5VTEwpCi0JCXsKLQkJCWZyZWVfa2VlcF9lcnJubyhmcCk7Ci0JCQlmcCA9IE5VTEw7Ci0J CX0KLQl9Ci0KLQlyZXR1cm4gZnA7Ci19Ci0KLQotaW50Ci1jZnJlYWQodm9pZCAqcHRyLCBpbnQg c2l6ZSwgY2ZwICpmcCkKLXsKLQlpbnQJCQlyZXQ7Ci0KLQlpZiAoc2l6ZSA9PSAwKQotCQlyZXR1 cm4gMDsKKwkJYm9vbAkJZXhpc3RzOwogCisJCWV4aXN0cyA9IChzdGF0KHBhdGgsICZzdCkgPT0g MCk7CisJCS8qIGF2b2lkIHVudXNlZCB3YXJuaW5nIGlmIGl0IGlzIG5vdCBidWlsZCB3aXRoIGNv bXByZXNzaW9uICovCisJCWlmIChleGlzdHMpCisJCQljb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRo bSA9IFBHX0NPTVBSRVNTSU9OX05PTkU7CiAjaWZkZWYgSEFWRV9MSUJaCi0JaWYgKGZwLT5jb21w cmVzc2VkZnApCi0JewotCQlyZXQgPSBnenJlYWQoZnAtPmNvbXByZXNzZWRmcCwgcHRyLCBzaXpl KTsKLQkJaWYgKHJldCAhPSBzaXplICYmICFnemVvZihmcC0+Y29tcHJlc3NlZGZwKSkKKwkJaWYg KCFleGlzdHMpCiAJCXsKLQkJCWludAkJCWVycm51bTsKLQkJCWNvbnN0IGNoYXIgKmVycm1zZyA9 IGd6ZXJyb3IoZnAtPmNvbXByZXNzZWRmcCwgJmVycm51bSk7CisJCQlmcmVlX2tlZXBfZXJybm8o Zm5hbWUpOworCQkJZm5hbWUgPSBwc3ByaW50ZigiJXMuZ3oiLCBwYXRoKTsKKwkJCWV4aXN0cyA9 IChzdGF0KGZuYW1lLCAmc3QpID09IDApOwogCi0JCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQg ZnJvbSBpbnB1dCBmaWxlOiAlcyIsCi0JCQkJCSBlcnJudW0gPT0gWl9FUlJOTyA/IHN0cmVycm9y KGVycm5vKSA6IGVycm1zZyk7CisJCQlpZiAoZXhpc3RzKQorCQkJCWNvbXByZXNzaW9uX3NwZWMu YWxnb3JpdGhtID0gUEdfQ09NUFJFU1NJT05fR1pJUDsKIAkJfQotCX0KLQllbHNlCiAjZW5kaWYK LQl7Ci0JCXJldCA9IGZyZWFkKHB0ciwgMSwgc2l6ZSwgZnAtPnVuY29tcHJlc3NlZGZwKTsKLQkJ aWYgKHJldCAhPSBzaXplICYmICFmZW9mKGZwLT51bmNvbXByZXNzZWRmcCkpCi0JCQlSRUFEX0VS Uk9SX0VYSVQoZnAtPnVuY29tcHJlc3NlZGZwKTsKIAl9Ci0JcmV0dXJuIHJldDsKLX0KIAotaW50 Ci1jZndyaXRlKGNvbnN0IHZvaWQgKnB0ciwgaW50IHNpemUsIGNmcCAqZnApCi17Ci0jaWZkZWYg SEFWRV9MSUJaCi0JaWYgKGZwLT5jb21wcmVzc2VkZnApCi0JCXJldHVybiBnendyaXRlKGZwLT5j b21wcmVzc2VkZnAsIHB0ciwgc2l6ZSk7Ci0JZWxzZQotI2VuZGlmCi0JCXJldHVybiBmd3JpdGUo cHRyLCAxLCBzaXplLCBmcC0+dW5jb21wcmVzc2VkZnApOwotfQotCi1pbnQKLWNmZ2V0YyhjZnAg KmZwKQotewotCWludAkJCXJldDsKLQotI2lmZGVmIEhBVkVfTElCWgotCWlmIChmcC0+Y29tcHJl c3NlZGZwKQotCXsKLQkJcmV0ID0gZ3pnZXRjKGZwLT5jb21wcmVzc2VkZnApOwotCQlpZiAocmV0 ID09IEVPRikKLQkJewotCQkJaWYgKCFnemVvZihmcC0+Y29tcHJlc3NlZGZwKSkKLQkJCQlwZ19m YXRhbCgiY291bGQgbm90IHJlYWQgZnJvbSBpbnB1dCBmaWxlOiAlcyIsIHN0cmVycm9yKGVycm5v KSk7Ci0JCQllbHNlCi0JCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZyb20gaW5wdXQgZmls ZTogZW5kIG9mIGZpbGUiKTsKLQkJfQotCX0KLQllbHNlCi0jZW5kaWYKKwlDRkggPSBJbml0Q29t cHJlc3NGaWxlSGFuZGxlKGNvbXByZXNzaW9uX3NwZWMpOworCWlmIChDRkgtPm9wZW5fZnVuYyhm bmFtZSwgLTEsIG1vZGUsIENGSCkpCiAJewotCQlyZXQgPSBmZ2V0YyhmcC0+dW5jb21wcmVzc2Vk ZnApOwotCQlpZiAocmV0ID09IEVPRikKLQkJCVJFQURfRVJST1JfRVhJVChmcC0+dW5jb21wcmVz c2VkZnApOworCQlmcmVlX2tlZXBfZXJybm8oQ0ZIKTsKKwkJQ0ZIID0gTlVMTDsKIAl9CisJZnJl ZV9rZWVwX2Vycm5vKGZuYW1lKTsKIAotCXJldHVybiByZXQ7Ci19Ci0KLWNoYXIgKgotY2ZnZXRz KGNmcCAqZnAsIGNoYXIgKmJ1ZiwgaW50IGxlbikKLXsKLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAo ZnAtPmNvbXByZXNzZWRmcCkKLQkJcmV0dXJuIGd6Z2V0cyhmcC0+Y29tcHJlc3NlZGZwLCBidWYs IGxlbik7Ci0JZWxzZQotI2VuZGlmCi0JCXJldHVybiBmZ2V0cyhidWYsIGxlbiwgZnAtPnVuY29t cHJlc3NlZGZwKTsKLX0KLQotaW50Ci1jZmNsb3NlKGNmcCAqZnApCi17Ci0JaW50CQkJcmVzdWx0 OwotCi0JaWYgKGZwID09IE5VTEwpCi0JewotCQllcnJubyA9IEVCQURGOwotCQlyZXR1cm4gRU9G OwotCX0KLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoZnAtPmNvbXByZXNzZWRmcCkKLQl7Ci0JCXJl c3VsdCA9IGd6Y2xvc2UoZnAtPmNvbXByZXNzZWRmcCk7Ci0JCWZwLT5jb21wcmVzc2VkZnAgPSBO VUxMOwotCX0KLQllbHNlCi0jZW5kaWYKLQl7Ci0JCXJlc3VsdCA9IGZjbG9zZShmcC0+dW5jb21w cmVzc2VkZnApOwotCQlmcC0+dW5jb21wcmVzc2VkZnAgPSBOVUxMOwotCX0KLQlmcmVlX2tlZXBf ZXJybm8oZnApOwotCi0JcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gQ0ZIOwogfQogCisvKgorICog Q2xvc2UgYW4gb3BlbiBmaWxlIGhhbmRsZSBhbmQgcmVsZWFzZSBpdHMgbWVtb3J5LgorICoKKyAq IE9uIGZhaWx1cmUsIHJldHVybnMgYW4gZXJyb3IgdmFsdWUgYW5kIHNldHMgZXJybm8gYXBwcm9w cmlhdGVseS4KKyAqLwogaW50Ci1jZmVvZihjZnAgKmZwKQotewotI2lmZGVmIEhBVkVfTElCWgot CWlmIChmcC0+Y29tcHJlc3NlZGZwKQotCQlyZXR1cm4gZ3plb2YoZnAtPmNvbXByZXNzZWRmcCk7 Ci0JZWxzZQotI2VuZGlmCi0JCXJldHVybiBmZW9mKGZwLT51bmNvbXByZXNzZWRmcCk7Ci19Ci0K LWNvbnN0IGNoYXIgKgotZ2V0X2NmcF9lcnJvcihjZnAgKmZwKQorRW5kQ29tcHJlc3NGaWxlSGFu ZGxlKENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKQogewotI2lmZGVmIEhBVkVfTElCWgotCWlmIChm cC0+Y29tcHJlc3NlZGZwKQotCXsKLQkJaW50CQkJZXJybnVtOwotCQljb25zdCBjaGFyICplcnJt c2cgPSBnemVycm9yKGZwLT5jb21wcmVzc2VkZnAsICZlcnJudW0pOwotCi0JCWlmIChlcnJudW0g IT0gWl9FUlJOTykKLQkJCXJldHVybiBlcnJtc2c7Ci0JfQotI2VuZGlmCi0JcmV0dXJuIHN0cmVy cm9yKGVycm5vKTsKLX0KKwlpbnQJCQlyZXQgPSAwOwogCi0jaWZkZWYgSEFWRV9MSUJaCi1zdGF0 aWMgaW50Ci1oYXNTdWZmaXgoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnN1ZmZp eCkKLXsKLQlpbnQJCQlmaWxlbmFtZWxlbiA9IHN0cmxlbihmaWxlbmFtZSk7Ci0JaW50CQkJc3Vm Zml4bGVuID0gc3RybGVuKHN1ZmZpeCk7CisJaWYgKENGSC0+cHJpdmF0ZV9kYXRhKQorCQlyZXQg PSBDRkgtPmNsb3NlX2Z1bmMoQ0ZIKTsKIAotCWlmIChmaWxlbmFtZWxlbiA8IHN1ZmZpeGxlbikK LQkJcmV0dXJuIDA7CisJZnJlZV9rZWVwX2Vycm5vKENGSCk7CiAKLQlyZXR1cm4gbWVtY21wKCZm aWxlbmFtZVtmaWxlbmFtZWxlbiAtIHN1ZmZpeGxlbl0sCi0JCQkJICBzdWZmaXgsCi0JCQkJICBz dWZmaXhsZW4pID09IDA7CisJcmV0dXJuIHJldDsKIH0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX2R1bXAvY29tcHJlc3NfaW8uaCBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19p by5oCmluZGV4IGE0MjlkYzQ3ODkuLmJkMmI1NjIzYTUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdf ZHVtcC9jb21wcmVzc19pby5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21wcmVzc19pby5oCkBA IC0zNywzMiArMzcsNjQgQEAgdHlwZWRlZiB2b2lkICgqV3JpdGVGdW5jKSAoQXJjaGl2ZUhhbmRs ZSAqQUgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7CiAgKi8KIHR5cGVkZWYgc2l6ZV90 ICgqUmVhZEZ1bmMpIChBcmNoaXZlSGFuZGxlICpBSCwgY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZs ZW4pOwogCi0vKiBzdHJ1Y3QgZGVmaW5pdGlvbiBhcHBlYXJzIGluIGNvbXByZXNzX2lvLmMgKi8K IHR5cGVkZWYgc3RydWN0IENvbXByZXNzb3JTdGF0ZSBDb21wcmVzc29yU3RhdGU7CitzdHJ1Y3Qg Q29tcHJlc3NvclN0YXRlCit7CisJLyoKKwkgKiBSZWFkIGFsbCBjb21wcmVzc2VkIGRhdGEgZnJv bSB0aGUgaW5wdXQgc3RyZWFtICh2aWEgcmVhZEYpIGFuZCBwcmludCBpdAorCSAqIG91dCB3aXRo IGFod3JpdGUoKS4KKwkgKi8KKwl2b2lkCQkoKnJlYWREYXRhKSAoQXJjaGl2ZUhhbmRsZSAqQUgs IENvbXByZXNzb3JTdGF0ZSAqY3MpOworCisJLyoKKwkgKiBDb21wcmVzcyBhbmQgd3JpdGUgZGF0 YSB0byB0aGUgb3V0cHV0IHN0cmVhbSAodmlhIHdyaXRlRikuCisJICovCisJdm9pZAkJKCp3cml0 ZURhdGEpIChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NvclN0YXRlICpjcywKKwkJCQkJCQkg IGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVuKTsKKworCS8qCisJICogRW5kIGNvbXByZXNz aW9uIGFuZCBmbHVzaCBpbnRlcm5hbCBidWZmZXJzIGlmIGFueS4KKwkgKi8KKwl2b2lkCQkoKmVu ZCkgKEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc29yU3RhdGUgKmNzKTsKKworCVJlYWRGdW5j CXJlYWRGOworCVdyaXRlRnVuYwl3cml0ZUY7CisKKwlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9u IGNvbXByZXNzaW9uX3NwZWM7CisJdm9pZAkgICAqcHJpdmF0ZV9kYXRhOworfTsKIAogZXh0ZXJu IENvbXByZXNzb3JTdGF0ZSAqQWxsb2NhdGVDb21wcmVzc29yKGNvbnN0IHBnX2NvbXByZXNzX3Nw ZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYywKKwkJCQkJCQkJCQkgICBSZWFkRnVuYyByZWFk RiwKIAkJCQkJCQkJCQkgICBXcml0ZUZ1bmMgd3JpdGVGKTsKLWV4dGVybiB2b2lkIFJlYWREYXRh RnJvbUFyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgsCi0JCQkJCQkJCWNvbnN0IHBnX2NvbXByZXNz X3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYywKLQkJCQkJCQkJUmVhZEZ1bmMgcmVhZEYp OwotZXh0ZXJuIHZvaWQgV3JpdGVEYXRhVG9BcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFILCBDb21w cmVzc29yU3RhdGUgKmNzLAotCQkJCQkJCSAgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkTGVu KTsKIGV4dGVybiB2b2lkIEVuZENvbXByZXNzb3IoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNz b3JTdGF0ZSAqY3MpOwogCisvKgorICogQ29tcHJlc3MgRmlsZSBIYW5kbGUKKyAqLwordHlwZWRl ZiBzdHJ1Y3QgQ29tcHJlc3NGaWxlSGFuZGxlIENvbXByZXNzRmlsZUhhbmRsZTsKIAotdHlwZWRl ZiBzdHJ1Y3QgY2ZwIGNmcDsKK3N0cnVjdCBDb21wcmVzc0ZpbGVIYW5kbGUKK3sKKwlpbnQJCQko Km9wZW5fZnVuYykgKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmZCwgY29uc3QgY2hhciAqbW9kZSwK KwkJCQkJCQkgIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKKwlpbnQJCQkoKm9wZW5fd3JpdGVf ZnVuYykgKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCisJCQkJCQkJCQlDb21w cmVzc0ZpbGVIYW5kbGUgKmN4dCk7CisJc2l6ZV90CQkoKnJlYWRfZnVuYykgKHZvaWQgKnB0ciwg c2l6ZV90IHNpemUsIENvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKKwlzaXplX3QJCSgqd3JpdGVf ZnVuYykgKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsCisJCQkJCQkJICAgc3RydWN0IENv bXByZXNzRmlsZUhhbmRsZSAqQ0ZIKTsKKwljaGFyCSAgICooKmdldHNfZnVuYykgKGNoYXIgKnMs IGludCBzaXplLCBDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCk7CisJaW50CQkJKCpnZXRjX2Z1bmMp IChDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCk7CisJaW50CQkJKCplb2ZfZnVuYykgKENvbXByZXNz RmlsZUhhbmRsZSAqQ0ZIKTsKKwlpbnQJCQkoKmNsb3NlX2Z1bmMpIChDb21wcmVzc0ZpbGVIYW5k bGUgKkNGSCk7CisJY29uc3QgY2hhciAqKCpnZXRfZXJyb3JfZnVuYykgKENvbXByZXNzRmlsZUhh bmRsZSAqQ0ZIKTsKIAotZXh0ZXJuIGNmcCAqY2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0 IGNoYXIgKm1vZGUsCi0JCQkJICAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21w cmVzc2lvbl9zcGVjKTsKLWV4dGVybiBjZnAgKmNmb3Blbl9yZWFkKGNvbnN0IGNoYXIgKnBhdGgs IGNvbnN0IGNoYXIgKm1vZGUpOwotZXh0ZXJuIGNmcCAqY2ZvcGVuX3dyaXRlKGNvbnN0IGNoYXIg KnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsCi0JCQkJCQkgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lm aWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKLWV4dGVybiBpbnQJY2ZyZWFkKHZvaWQgKnB0ciwg aW50IHNpemUsIGNmcCAqZnApOwotZXh0ZXJuIGludAljZndyaXRlKGNvbnN0IHZvaWQgKnB0ciwg aW50IHNpemUsIGNmcCAqZnApOwotZXh0ZXJuIGludAljZmdldGMoY2ZwICpmcCk7Ci1leHRlcm4g Y2hhciAqY2ZnZXRzKGNmcCAqZnAsIGNoYXIgKmJ1ZiwgaW50IGxlbik7Ci1leHRlcm4gaW50CWNm Y2xvc2UoY2ZwICpmcCk7Ci1leHRlcm4gaW50CWNmZW9mKGNmcCAqZnApOwotZXh0ZXJuIGNvbnN0 IGNoYXIgKmdldF9jZnBfZXJyb3IoY2ZwICpmcCk7CisJcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlv biBjb21wcmVzc2lvbl9zcGVjOworCXZvaWQJICAgKnByaXZhdGVfZGF0YTsKK307CiAKK2V4dGVy biBDb21wcmVzc0ZpbGVIYW5kbGUgKkluaXRDb21wcmVzc0ZpbGVIYW5kbGUoY29uc3QgcGdfY29t cHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKK2V4dGVybiBDb21wcmVzc0Zp bGVIYW5kbGUgKkluaXREaXNjb3ZlckNvbXByZXNzRmlsZUhhbmRsZShjb25zdCBjaGFyICpwYXRo LAorCQkJCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKm1vZGUpOworZXh0ZXJuIGludAlFbmRDb21w cmVzc0ZpbGVIYW5kbGUoQ29tcHJlc3NGaWxlSGFuZGxlICpDRkgpOwogI2VuZGlmCmRpZmYgLS1n aXQgYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24u YnVpbGQKaW5kZXggY2E2MmY5YTM3NC4uYWEyYzkxODI5YyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w Z19kdW1wL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZApAQCAt Miw2ICsyLDcgQEAKIAogcGdfZHVtcF9jb21tb25fc291cmNlcyA9IGZpbGVzKAogICAnY29tcHJl c3NfaW8uYycsCisgICdjb21wcmVzc19nemlwLmMnLAogICAnZHVtcHV0aWxzLmMnLAogICAncGFy YWxsZWwuYycsCiAgICdwZ19iYWNrdXBfYXJjaGl2ZXIuYycsCmRpZmYgLS1naXQgYS9zcmMvYmlu L3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X2FyY2hpdmVyLmMKaW5kZXggN2Y3YTBmMWNlNy4uY2MzYjdmMDk5MiAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXBfYXJjaGl2ZXIuYwpAQCAtMzEsNiArMzEsNyBAQAogI2VuZGlmCiAKICNpbmNsdWRl ICJjb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAiY29tcHJlc3NfaW8uaCIKICNpbmNsdWRlICJk dW1wdXRpbHMuaCIKICNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKICNpbmNsdWRl ICJsaWIvc3RyaW5naW5mby5oIgpAQCAtNDMsMTMgKzQ0LDYgQEAKICNkZWZpbmUgVEVYVF9EVU1Q X0hFQURFUiAiLS1cbi0tIFBvc3RncmVTUUwgZGF0YWJhc2UgZHVtcFxuLS1cblxuIgogI2RlZmlu ZSBURVhUX0RVTVBBTExfSEVBREVSICItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVy IGR1bXBcbi0tXG5cbiIKIAotLyogc3RhdGUgbmVlZGVkIHRvIHNhdmUvcmVzdG9yZSBhbiBhcmNo aXZlJ3Mgb3V0cHV0IHRhcmdldCAqLwotdHlwZWRlZiBzdHJ1Y3QgX291dHB1dENvbnRleHQKLXsK LQl2b2lkCSAgICpPRjsKLQlpbnQJCQlnek91dDsKLX0gT3V0cHV0Q29udGV4dDsKLQogLyoKICAq IFN0YXRlIGZvciB0cmFja2luZyBUb2NFbnRyeXMgdGhhdCBhcmUgcmVhZHkgdG8gcHJvY2VzcyBk dXJpbmcgYSBwYXJhbGxlbAogICogcmVzdG9yZS4gIChUaGlzIHVzZWQgdG8gYmUgYSBsaXN0LCBh bmQgd2Ugc3RpbGwgY2FsbCBpdCB0aGF0LCB0aG91Z2ggbm93CkBAIC0xMDEsOCArOTUsOCBAQCBz dGF0aWMgdm9pZCBkdW1wX2xvX2J1ZihBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgdm9pZCBk dW1wVGltZXN0YW1wKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICptc2csIHRpbWVfdCB0 aW0pOwogc3RhdGljIHZvaWQgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFy ICpmaWxlbmFtZSwKIAkJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXBy ZXNzaW9uX3NwZWMpOwotc3RhdGljIE91dHB1dENvbnRleHQgU2F2ZU91dHB1dChBcmNoaXZlSGFu ZGxlICpBSCk7Ci1zdGF0aWMgdm9pZCBSZXN0b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBP dXRwdXRDb250ZXh0IHNhdmVkQ29udGV4dCk7CitzdGF0aWMgQ29tcHJlc3NGaWxlSGFuZGxlICpT YXZlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFIKTsKK3N0YXRpYyB2b2lkIFJlc3RvcmVPdXRwdXQo QXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzRmlsZUhhbmRsZSAqc2F2ZWRPdXRwdXQpOwogCiBz dGF0aWMgaW50CXJlc3RvcmVfdG9jX2VudHJ5KEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAq dGUsIGJvb2wgaXNfcGFyYWxsZWwpOwogc3RhdGljIHZvaWQgcmVzdG9yZV90b2NfZW50cmllc19w cmVmb3JrKEFyY2hpdmVIYW5kbGUgKkFILApAQCAtMjc3LDExICsyNzEsOCBAQCBDbG9zZUFyY2hp dmUoQXJjaGl2ZSAqQUhYKQogCUFILT5DbG9zZVB0cihBSCk7CiAKIAkvKiBDbG9zZSB0aGUgb3V0 cHV0ICovCi0JZXJybm8gPSAwOwkJCQkJLyogaW4gY2FzZSBnemNsb3NlKCkgZG9lc24ndCBzZXQg aXQgKi8KLQlpZiAoQUgtPmd6T3V0KQotCQlyZXMgPSBHWkNMT1NFKEFILT5PRik7Ci0JZWxzZSBp ZiAoQUgtPk9GICE9IHN0ZG91dCkKLQkJcmVzID0gZmNsb3NlKEFILT5PRik7CisJZXJybm8gPSAw OworCXJlcyA9IEVuZENvbXByZXNzRmlsZUhhbmRsZShBSC0+T0YpOwogCiAJaWYgKHJlcyAhPSAw KQogCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIG91dHB1dCBmaWxlOiAlbSIpOwpAQCAtMzYy LDggKzM1Myw5IEBAIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkKIAlBcmNoaXZlSGFuZGxl ICpBSCA9IChBcmNoaXZlSGFuZGxlICopIEFIWDsKIAlSZXN0b3JlT3B0aW9ucyAqcm9wdCA9IEFI LT5wdWJsaWMucm9wdDsKIAlib29sCQlwYXJhbGxlbF9tb2RlOworCWJvb2wJCXN1cHBvcnRzX2Nv bXByZXNzaW9uOwogCVRvY0VudHJ5ICAgKnRlOwotCU91dHB1dENvbnRleHQgc2F2OworCUNvbXBy ZXNzRmlsZUhhbmRsZSAqc2F2OwogCiAJQUgtPnN0YWdlID0gU1RBR0VfSU5JVElBTElaSU5HOwog CkBAIC0zOTEsMTcgKzM4MywyNCBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJLyoK IAkgKiBNYWtlIHN1cmUgd2Ugd29uJ3QgbmVlZCAoZGUpY29tcHJlc3Npb24gd2UgaGF2ZW4ndCBn b3QKIAkgKi8KLSNpZm5kZWYgSEFWRV9MSUJaCi0JaWYgKEFILT5jb21wcmVzc2lvbl9zcGVjLmFs Z29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQICYmCisJc3VwcG9ydHNfY29tcHJlc3Npb24g PSB0cnVlOworCWlmIChBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gIT0gUEdfQ09NUFJF U1NJT05fTk9ORSAmJgorCQlBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09N UFJFU1NJT05fR1pJUCAmJgogCQlBSC0+UHJpbnRUb2NEYXRhUHRyICE9IE5VTEwpCiAJewogCQlm b3IgKHRlID0gQUgtPnRvYy0+bmV4dDsgdGUgIT0gQUgtPnRvYzsgdGUgPSB0ZS0+bmV4dCkKIAkJ ewogCQkJaWYgKHRlLT5oYWREdW1wZXIgJiYgKHRlLT5yZXFzICYgUkVRX0RBVEEpICE9IDApCi0J CQkJcGdfZmF0YWwoImNhbm5vdCByZXN0b3JlIGZyb20gY29tcHJlc3NlZCBhcmNoaXZlIChjb21w cmVzc2lvbiBub3Qgc3VwcG9ydGVkIGluIHRoaXMgaW5zdGFsbGF0aW9uKSIpOworCQkJeworI2lm bmRlZiBIQVZFX0xJQloKKwkJCQlpZiAoQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID09 IFBHX0NPTVBSRVNTSU9OX0daSVApCisJCQkJCXN1cHBvcnRzX2NvbXByZXNzaW9uID0gZmFsc2U7 CisjZW5kaWYKKwkJCQlpZiAoc3VwcG9ydHNfY29tcHJlc3Npb24gPT0gZmFsc2UpCisJCQkJCXBn X2ZhdGFsKCJjYW5ub3QgcmVzdG9yZSBmcm9tIGNvbXByZXNzZWQgYXJjaGl2ZSAoY29tcHJlc3Np b24gbm90IHN1cHBvcnRlZCBpbiB0aGlzIGluc3RhbGxhdGlvbikiKTsKKwkJCX0KIAkJfQogCX0K LSNlbmRpZgogCiAJLyoKIAkgKiBQcmVwYXJlIGluZGV4IGFycmF5cywgc28gd2UgY2FuIGFzc3Vt ZSB3ZSBoYXZlIHRoZW0gdGhyb3VnaG91dCByZXN0b3JlLgpAQCAtMTEyOCw3ICsxMTI3LDcgQEAg UHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCkKIAlUb2NFbnRyeSAgICp0ZTsKIAlwZ19jb21w cmVzc19zcGVjaWZpY2F0aW9uIG91dF9jb21wcmVzc2lvbl9zcGVjID0gezB9OwogCXRlU2VjdGlv bgljdXJTZWN0aW9uOwotCU91dHB1dENvbnRleHQgc2F2OworCUNvbXByZXNzRmlsZUhhbmRsZSAq c2F2OwogCWNvbnN0IGNoYXIgKmZtdE5hbWU7CiAJY2hhcgkJc3RhbXBfc3RyWzY0XTsKIApAQCAt MTE0NCw5ICsxMTQzLDEwIEBAIFByaW50VE9DU3VtbWFyeShBcmNoaXZlICpBSFgpCiAJCXN0cmNw eShzdGFtcF9zdHIsICJbdW5rbm93bl0iKTsKIAogCWFocHJpbnRmKEFILCAiO1xuOyBBcmNoaXZl IGNyZWF0ZWQgYXQgJXNcbiIsIHN0YW1wX3N0cik7Ci0JYWhwcmludGYoQUgsICI7ICAgICBkYm5h bWU6ICVzXG47ICAgICBUT0MgRW50cmllczogJWRcbjsgICAgIENvbXByZXNzaW9uOiAlZFxuIiwK KwlhaHByaW50ZihBSCwgIjsgICAgIGRibmFtZTogJXNcbjsgICAgIFRPQyBFbnRyaWVzOiAlZFxu OyAgICAgQ29tcHJlc3Npb246ICVzXG4iLAogCQkJIHNhbml0aXplX2xpbmUoQUgtPmFyY2hkYm5h bWUsIGZhbHNlKSwKLQkJCSBBSC0+dG9jQ291bnQsIEFILT5jb21wcmVzc2lvbl9zcGVjLmxldmVs KTsKKwkJCSBBSC0+dG9jQ291bnQsCisJCQkgZ2V0X2NvbXByZXNzX2FsZ29yaXRobV9uYW1lKEFI LT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSkpOwogCiAJc3dpdGNoIChBSC0+Zm9ybWF0KQog CXsKQEAgLTE1MDMsOTUgKzE1MDMsNjAgQEAgc3RhdGljIHZvaWQKIFNldE91dHB1dChBcmNoaXZl SGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJCSAgY29uc3QgcGdfY29tcHJlc3Nf c3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQogewotCWludAkJCWZuOworCUNvbXByZXNz RmlsZUhhbmRsZSAqQ0ZIOworCWNvbnN0IGNoYXIgKm1vZGU7CisJaW50CQkJZm4gPSAtMTsKIAog CWlmIChmaWxlbmFtZSkKIAl7CiAJCWlmIChzdHJjbXAoZmlsZW5hbWUsICItIikgPT0gMCkKIAkJ CWZuID0gZmlsZW5vKHN0ZG91dCk7Ci0JCWVsc2UKLQkJCWZuID0gLTE7CiAJfQogCWVsc2UgaWYg KEFILT5GSCkKIAkJZm4gPSBmaWxlbm8oQUgtPkZIKTsKIAllbHNlIGlmIChBSC0+ZlNwZWMpCiAJ ewotCQlmbiA9IC0xOwogCQlmaWxlbmFtZSA9IEFILT5mU3BlYzsKIAl9CiAJZWxzZQogCQlmbiA9 IGZpbGVubyhzdGRvdXQpOwogCi0JLyogSWYgY29tcHJlc3Npb24gZXhwbGljaXRseSByZXF1ZXN0 ZWQsIHVzZSBnem9wZW4gKi8KLSNpZmRlZiBIQVZFX0xJQloKLQlpZiAoY29tcHJlc3Npb25fc3Bl Yy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKLQl7Ci0JCWNoYXIJCWZtb2RlWzE0 XTsKLQotCQkvKiBEb24ndCB1c2UgUEdfQklOQVJZX3ggc2luY2UgdGhpcyBpcyB6bGliICovCi0J CXNwcmludGYoZm1vZGUsICJ3YiVkIiwgY29tcHJlc3Npb25fc3BlYy5sZXZlbCk7Ci0JCWlmIChm biA+PSAwKQotCQkJQUgtPk9GID0gZ3pkb3BlbihkdXAoZm4pLCBmbW9kZSk7Ci0JCWVsc2UKLQkJ CUFILT5PRiA9IGd6b3BlbihmaWxlbmFtZSwgZm1vZGUpOwotCQlBSC0+Z3pPdXQgPSAxOwotCX0K KwlpZiAoQUgtPm1vZGUgPT0gYXJjaE1vZGVBcHBlbmQpCisJCW1vZGUgPSBQR19CSU5BUllfQTsK IAllbHNlCi0jZW5kaWYKLQl7CQkJCQkJCS8qIFVzZSBmb3BlbiAqLwotCQlpZiAoQUgtPm1vZGUg PT0gYXJjaE1vZGVBcHBlbmQpCi0JCXsKLQkJCWlmIChmbiA+PSAwKQotCQkJCUFILT5PRiA9IGZk b3BlbihkdXAoZm4pLCBQR19CSU5BUllfQSk7Ci0JCQllbHNlCi0JCQkJQUgtPk9GID0gZm9wZW4o ZmlsZW5hbWUsIFBHX0JJTkFSWV9BKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCWlmIChmbiA+PSAw KQotCQkJCUFILT5PRiA9IGZkb3BlbihkdXAoZm4pLCBQR19CSU5BUllfVyk7Ci0JCQllbHNlCi0J CQkJQUgtPk9GID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKLQkJfQotCQlBSC0+Z3pP dXQgPSAwOwotCX0KKwkJbW9kZSA9IFBHX0JJTkFSWV9XOwogCi0JaWYgKCFBSC0+T0YpCisJQ0ZI ID0gSW5pdENvbXByZXNzRmlsZUhhbmRsZShjb21wcmVzc2lvbl9zcGVjKTsKKworCWlmIChDRkgt Pm9wZW5fZnVuYyhmaWxlbmFtZSwgZm4sIG1vZGUsIENGSCkpCiAJewogCQlpZiAoZmlsZW5hbWUp CiAJCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsIGZp bGVuYW1lKTsKIAkJZWxzZQogCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxl OiAlbSIpOwogCX0KKworCUFILT5PRiA9IENGSDsKIH0KIAotc3RhdGljIE91dHB1dENvbnRleHQK K3N0YXRpYyBDb21wcmVzc0ZpbGVIYW5kbGUgKgogU2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpB SCkKIHsKLQlPdXRwdXRDb250ZXh0IHNhdjsKLQotCXNhdi5PRiA9IEFILT5PRjsKLQlzYXYuZ3pP dXQgPSBBSC0+Z3pPdXQ7Ci0KLQlyZXR1cm4gc2F2OworCXJldHVybiAoQ29tcHJlc3NGaWxlSGFu ZGxlICopIEFILT5PRjsKIH0KIAogc3RhdGljIHZvaWQKLVJlc3RvcmVPdXRwdXQoQXJjaGl2ZUhh bmRsZSAqQUgsIE91dHB1dENvbnRleHQgc2F2ZWRDb250ZXh0KQorUmVzdG9yZU91dHB1dChBcmNo aXZlSGFuZGxlICpBSCwgQ29tcHJlc3NGaWxlSGFuZGxlICpzYXZlZE91dHB1dCkKIHsKIAlpbnQJ CQlyZXM7CiAKLQllcnJubyA9IDA7CQkJCQkvKiBpbiBjYXNlIGd6Y2xvc2UoKSBkb2Vzbid0IHNl dCBpdCAqLwotCWlmIChBSC0+Z3pPdXQpCi0JCXJlcyA9IEdaQ0xPU0UoQUgtPk9GKTsKLQllbHNl Ci0JCXJlcyA9IGZjbG9zZShBSC0+T0YpOworCWVycm5vID0gMDsKKwlyZXMgPSBFbmRDb21wcmVz c0ZpbGVIYW5kbGUoQUgtPk9GKTsKIAogCWlmIChyZXMgIT0gMCkKIAkJcGdfZmF0YWwoImNvdWxk IG5vdCBjbG9zZSBvdXRwdXQgZmlsZTogJW0iKTsKIAotCUFILT5nek91dCA9IHNhdmVkQ29udGV4 dC5nek91dDsKLQlBSC0+T0YgPSBzYXZlZENvbnRleHQuT0Y7CisJQUgtPk9GID0gc2F2ZWRPdXRw dXQ7CiB9CiAKIApAQCAtMTcxNSwyMSArMTY4MCwyMCBAQCBhaHdyaXRlKGNvbnN0IHZvaWQgKnB0 ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgQXJjaGl2ZUhhbmRsZSAqQUgpCiAKIAkJYnl0 ZXNfd3JpdHRlbiA9IHNpemUgKiBubWVtYjsKIAl9Ci0JZWxzZSBpZiAoQUgtPmd6T3V0KQotCQli eXRlc193cml0dGVuID0gR1pXUklURShwdHIsIHNpemUsIG5tZW1iLCBBSC0+T0YpOwogCWVsc2Ug aWYgKEFILT5DdXN0b21PdXRQdHIpCiAJCWJ5dGVzX3dyaXR0ZW4gPSBBSC0+Q3VzdG9tT3V0UHRy KEFILCBwdHIsIHNpemUgKiBubWVtYik7CiAKKwkvKgorCSAqIElmIHdlJ3JlIGRvaW5nIGEgcmVz dG9yZSwgYW5kIGl0J3MgZGlyZWN0IHRvIERCLCBhbmQgd2UncmUgY29ubmVjdGVkCisJICogdGhl biBzZW5kIGl0IHRvIHRoZSBEQi4KKwkgKi8KKwllbHNlIGlmIChSZXN0b3JpbmdUb0RCKEFIKSkK KwkJYnl0ZXNfd3JpdHRlbiA9IEV4ZWN1dGVTcWxDb21tYW5kQnVmKCZBSC0+cHVibGljLCAoY29u c3QgY2hhciAqKSBwdHIsIHNpemUgKiBubWVtYik7CiAJZWxzZQogCXsKLQkJLyoKLQkJICogSWYg d2UncmUgZG9pbmcgYSByZXN0b3JlLCBhbmQgaXQncyBkaXJlY3QgdG8gREIsIGFuZCB3ZSdyZQot CQkgKiBjb25uZWN0ZWQgdGhlbiBzZW5kIGl0IHRvIHRoZSBEQi4KLQkJICovCi0JCWlmIChSZXN0 b3JpbmdUb0RCKEFIKSkKLQkJCWJ5dGVzX3dyaXR0ZW4gPSBFeGVjdXRlU3FsQ29tbWFuZEJ1Zigm QUgtPnB1YmxpYywgKGNvbnN0IGNoYXIgKikgcHRyLCBzaXplICogbm1lbWIpOwotCQllbHNlCi0J CQlieXRlc193cml0dGVuID0gZndyaXRlKHB0ciwgc2l6ZSwgbm1lbWIsIEFILT5PRikgKiBzaXpl OworCQlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSCA9IChDb21wcmVzc0ZpbGVIYW5kbGUgKikgQUgt Pk9GOworCisJCWJ5dGVzX3dyaXR0ZW4gPSBDRkgtPndyaXRlX2Z1bmMocHRyLCBzaXplICogbm1l bWIsIENGSCk7CiAJfQogCiAJaWYgKGJ5dGVzX3dyaXR0ZW4gIT0gc2l6ZSAqIG5tZW1iKQpAQCAt MjA3Miw2ICsyMDM2LDE4IEBAIFJlYWRTdHIoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJcmV0dXJuIGJ1 ZjsKIH0KIAorc3RhdGljIGJvb2wKK19maWxlRXhpc3RzSW5EaXJlY3RvcnkoY29uc3QgY2hhciAq ZGlyLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljaGFyCQli dWZbTUFYUEdQQVRIXTsKKworCWlmIChzbnByaW50ZihidWYsIE1BWFBHUEFUSCwgIiVzLyVzIiwg ZGlyLCBmaWxlbmFtZSkgPj0gTUFYUEdQQVRIKQorCQlwZ19mYXRhbCgiZGlyZWN0b3J5IG5hbWUg dG9vIGxvbmc6IFwiJXNcIiIsIGRpcik7CisKKwlyZXR1cm4gKHN0YXQoYnVmLCAmc3QpID09IDAg JiYgU19JU1JFRyhzdC5zdF9tb2RlKSk7Cit9CisKIHN0YXRpYyBpbnQKIF9kaXNjb3ZlckFyY2hp dmVGb3JtYXQoQXJjaGl2ZUhhbmRsZSAqQUgpCiB7CkBAIC0yMTAyLDI2ICsyMDc4LDEyIEBAIF9k aXNjb3ZlckFyY2hpdmVGb3JtYXQoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCSAqLwogCQlpZiAoc3Rh dChBSC0+ZlNwZWMsICZzdCkgPT0gMCAmJiBTX0lTRElSKHN0LnN0X21vZGUpKQogCQl7Ci0JCQlj aGFyCQlidWZbTUFYUEdQQVRIXTsKLQotCQkJaWYgKHNucHJpbnRmKGJ1ZiwgTUFYUEdQQVRILCAi JXMvdG9jLmRhdCIsIEFILT5mU3BlYykgPj0gTUFYUEdQQVRIKQotCQkJCXBnX2ZhdGFsKCJkaXJl Y3RvcnkgbmFtZSB0b28gbG9uZzogXCIlc1wiIiwKLQkJCQkJCSBBSC0+ZlNwZWMpOwotCQkJaWYg KHN0YXQoYnVmLCAmc3QpID09IDAgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSkKLQkJCXsKLQkJCQlB SC0+Zm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKKwkJCUFILT5mb3JtYXQgPSBhcmNoRGlyZWN0b3J5 OworCQkJaWYgKF9maWxlRXhpc3RzSW5EaXJlY3RvcnkoQUgtPmZTcGVjLCAidG9jLmRhdCIpKQog CQkJCXJldHVybiBBSC0+Zm9ybWF0OwotCQkJfQotCiAjaWZkZWYgSEFWRV9MSUJaCi0JCQlpZiAo c25wcmludGYoYnVmLCBNQVhQR1BBVEgsICIlcy90b2MuZGF0Lmd6IiwgQUgtPmZTcGVjKSA+PSBN QVhQR1BBVEgpCi0JCQkJcGdfZmF0YWwoImRpcmVjdG9yeSBuYW1lIHRvbyBsb25nOiBcIiVzXCIi LAotCQkJCQkJIEFILT5mU3BlYyk7Ci0JCQlpZiAoc3RhdChidWYsICZzdCkgPT0gMCAmJiBTX0lT UkVHKHN0LnN0X21vZGUpKQotCQkJewotCQkJCUFILT5mb3JtYXQgPSBhcmNoRGlyZWN0b3J5Owor CQkJaWYgKF9maWxlRXhpc3RzSW5EaXJlY3RvcnkoQUgtPmZTcGVjLCAidG9jLmRhdC5neiIpKQog CQkJCXJldHVybiBBSC0+Zm9ybWF0OwotCQkJfQogI2VuZGlmCiAJCQlwZ19mYXRhbCgiZGlyZWN0 b3J5IFwiJXNcIiBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCBhcmNoaXZlIChcInRvYy5k YXRcIiBkb2VzIG5vdCBleGlzdCkiLAogCQkJCQkgQUgtPmZTcGVjKTsKQEAgLTIyMTksNiArMjE4 MSw4IEBAIF9hbGxvY0FIKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZlRm9ybWF0 IGZtdCwKIAkJIFNldHVwV29ya2VyUHRyVHlwZSBzZXR1cFdvcmtlclB0cikKIHsKIAlBcmNoaXZl SGFuZGxlICpBSDsKKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsKKwlwZ19jb21wcmVzc19zcGVj aWZpY2F0aW9uIG91dF9jb21wcmVzc19zcGVjID0gezB9OwogCiAJcGdfbG9nX2RlYnVnKCJhbGxv Y2F0aW5nIEFIIGZvciAlcywgZm9ybWF0ICVkIiwKIAkJCQkgRmlsZVNwZWMgPyBGaWxlU3BlYyA6 ICIoc3RkaW8pIiwgZm10KTsKQEAgLTIyNzIsOCArMjIzNiwxMSBAQCBfYWxsb2NBSChjb25zdCBj aGFyICpGaWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQsCiAJbWVtc2V0KCYoQUgtPnNx bHBhcnNlKSwgMCwgc2l6ZW9mKEFILT5zcWxwYXJzZSkpOwogCiAJLyogT3BlbiBzdGRvdXQgd2l0 aCBubyBjb21wcmVzc2lvbiBmb3IgQUggb3V0cHV0IGhhbmRsZSAqLwotCUFILT5nek91dCA9IDA7 Ci0JQUgtPk9GID0gc3Rkb3V0OworCW91dF9jb21wcmVzc19zcGVjLmFsZ29yaXRobSA9IFBHX0NP TVBSRVNTSU9OX05PTkU7CisJQ0ZIID0gSW5pdENvbXByZXNzRmlsZUhhbmRsZShvdXRfY29tcHJl c3Nfc3BlYyk7CisJaWYgKENGSC0+b3Blbl9mdW5jKE5VTEwsIGZpbGVubyhzdGRvdXQpLCBQR19C SU5BUllfQSwgQ0ZIKSkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIHN0ZG91dCBmb3IgYXBw ZW5kaW5nOiAlbSIpOworCUFILT5PRiA9IENGSDsKIAogCS8qCiAJICogT24gV2luZG93cywgd2Ug bmVlZCB0byB1c2UgYmluYXJ5IG1vZGUgdG8gcmVhZC93cml0ZSBub24tdGV4dCBmaWxlcywKQEAg LTM2ODYsMTIgKzM2NTMsNyBAQCBXcml0ZUhlYWQoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJQUgtPldy aXRlQnl0ZVB0cihBSCwgQUgtPmludFNpemUpOwogCUFILT5Xcml0ZUJ5dGVQdHIoQUgsIEFILT5v ZmZTaXplKTsKIAlBSC0+V3JpdGVCeXRlUHRyKEFILCBBSC0+Zm9ybWF0KTsKLQkvKgotCSAqIEZv ciBub3cgdGhlIGNvbXByZXNzaW9uIHR5cGUgaXMgaW1wbGllZCBieSB0aGUgbGV2ZWwuICBUaGlz IHdpbGwgbmVlZAotCSAqIHRvIGNoYW5nZSBvbmNlIHN1cHBvcnQgZm9yIG1vcmUgY29tcHJlc3Np b24gYWxnb3JpdGhtcyBpcyBhZGRlZCwKLQkgKiByZXF1aXJpbmcgYSBmb3JtYXQgYnVtcC4KLQkg Ki8KLQlXcml0ZUludChBSCwgQUgtPmNvbXByZXNzaW9uX3NwZWMubGV2ZWwpOworCUFILT5Xcml0 ZUJ5dGVQdHIoQUgsIEFILT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSk7CiAJY3J0bSA9ICps b2NhbHRpbWUoJkFILT5jcmVhdGVEYXRlKTsKIAlXcml0ZUludChBSCwgY3J0bS50bV9zZWMpOwog CVdyaXRlSW50KEFILCBjcnRtLnRtX21pbik7CkBAIC0zNzYyLDEwICszNzI0LDExIEBAIFJlYWRI ZWFkKEFyY2hpdmVIYW5kbGUgKkFIKQogCQlwZ19mYXRhbCgiZXhwZWN0ZWQgZm9ybWF0ICglZCkg ZGlmZmVycyBmcm9tIGZvcm1hdCBmb3VuZCBpbiBmaWxlICglZCkiLAogCQkJCSBBSC0+Zm9ybWF0 LCBmbXQpOwogCi0JLyogR3Vlc3MgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCBiYXNlZCBvbiB0aGUg bGV2ZWwgKi8KLQlBSC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPSBQR19DT01QUkVTU0lP Tl9OT05FOwotCWlmIChBSC0+dmVyc2lvbiA+PSBLX1ZFUlNfMV8yKQorCWlmIChBSC0+dmVyc2lv biA+PSBLX1ZFUlNfMV8xNSkKKwkJQUgtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtID0gQUgt PlJlYWRCeXRlUHRyKEFIKTsKKwllbHNlIGlmIChBSC0+dmVyc2lvbiA+PSBLX1ZFUlNfMV8yKQog CXsKKwkJLyogR3Vlc3MgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCBiYXNlZCBvbiB0aGUgbGV2ZWwg Ki8KIAkJaWYgKEFILT52ZXJzaW9uIDwgS19WRVJTXzFfNCkKIAkJCUFILT5jb21wcmVzc2lvbl9z cGVjLmxldmVsID0gQUgtPlJlYWRCeXRlUHRyKEFIKTsKIAkJZWxzZQpAQCAtMzc3NywxMCArMzc0 MCwxNyBAQCBSZWFkSGVhZChBcmNoaXZlSGFuZGxlICpBSCkKIAllbHNlCiAJCUFILT5jb21wcmVz c2lvbl9zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX0daSVA7CiAKKwlpZiAoQUgtPmNv bXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtICE9IFBHX0NPTVBSRVNTSU9OX05PTkUpCisJeworCQli b29sCQl1bnN1cHBvcnRlZCA9IGZhbHNlOworCiAjaWZuZGVmIEhBVkVfTElCWgotCWlmIChBSC0+ Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gPT0gUEdfQ09NUFJFU1NJT05fR1pJUCkKLQkJcGdf ZmF0YWwoImFyY2hpdmUgaXMgY29tcHJlc3NlZCwgYnV0IHRoaXMgaW5zdGFsbGF0aW9uIGRvZXMg bm90IHN1cHBvcnQgY29tcHJlc3Npb24iKTsKKwkJaWYgKEFILT5jb21wcmVzc2lvbl9zcGVjLmFs Z29yaXRobSA9PSBQR19DT01QUkVTU0lPTl9HWklQKQorCQkJdW5zdXBwb3J0ZWQgPSB0cnVlOwog I2VuZGlmCisJCWlmICh1bnN1cHBvcnRlZCkKKwkJCXBnX2ZhdGFsKCJhcmNoaXZlIGlzIGNvbXBy ZXNzZWQsIGJ1dCB0aGlzIGluc3RhbGxhdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9u Iik7CisJfQogCiAJaWYgKEFILT52ZXJzaW9uID49IEtfVkVSU18xXzQpCiAJewpkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oIGIvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF9hcmNoaXZlci5oCmluZGV4IGY3MjQ0NmVkNWIuLjE4YjM4YzE3YWIgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaAorKysgYi9zcmMvYmlu L3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKQEAgLTMyLDMwICszMiw2IEBACiAKICNkZWZp bmUgTE9CQlVGU0laRSAxNjM4NAogCi0jaWZkZWYgSEFWRV9MSUJaCi0jaW5jbHVkZSA8emxpYi5o PgotI2RlZmluZSBHWkNMT1NFKGZoKSBnemNsb3NlKGZoKQotI2RlZmluZSBHWldSSVRFKHAsIHMs IG4sIGZoKSBnendyaXRlKGZoLCBwLCAobikgKiAocykpCi0jZGVmaW5lIEdaUkVBRChwLCBzLCBu LCBmaCkgZ3pyZWFkKGZoLCBwLCAobikgKiAocykpCi0jZGVmaW5lIEdaRU9GKGZoKQlnemVvZihm aCkKLSNlbHNlCi0jZGVmaW5lIEdaQ0xPU0UoZmgpIGZjbG9zZShmaCkKLSNkZWZpbmUgR1pXUklU RShwLCBzLCBuLCBmaCkgKGZ3cml0ZShwLCBzLCBuLCBmaCkgKiAocykpCi0jZGVmaW5lIEdaUkVB RChwLCBzLCBuLCBmaCkgZnJlYWQocCwgcywgbiwgZmgpCi0jZGVmaW5lIEdaRU9GKGZoKQlmZW9m KGZoKQotLyogdGhpcyBpcyBqdXN0IHRoZSByZWRlZmluaXRpb24gb2YgYSBsaWJ6IGNvbnN0YW50 ICovCi0jZGVmaW5lIFpfREVGQVVMVF9DT01QUkVTU0lPTiAoLTEpCi0KLXR5cGVkZWYgc3RydWN0 IF96X3N0cmVhbQotewotCXZvaWQJICAgKm5leHRfaW47Ci0Jdm9pZAkgICAqbmV4dF9vdXQ7Ci0J c2l6ZV90CQlhdmFpbF9pbjsKLQlzaXplX3QJCWF2YWlsX291dDsKLX0gel9zdHJlYW07Ci10eXBl ZGVmIHpfc3RyZWFtICp6X3N0cmVhbXA7Ci0jZW5kaWYKLQogLyogRGF0YSBibG9jayB0eXBlcyAq LwogI2RlZmluZSBCTEtfREFUQSAxCiAjZGVmaW5lIEJMS19CTE9CUyAzCkBAIC04OSwxMCArNjUs MTMgQEAgdHlwZWRlZiB6X3N0cmVhbSAqel9zdHJlYW1wOwogI2RlZmluZSBLX1ZFUlNfMV8xMyBN QUtFX0FSQ0hJVkVfVkVSU0lPTigxLCAxMywgMCkJLyogY2hhbmdlIHNlYXJjaF9wYXRoCiAJCQkJ CQkJCQkJCQkJICogYmVoYXZpb3IgKi8KICNkZWZpbmUgS19WRVJTXzFfMTQgTUFLRV9BUkNISVZF X1ZFUlNJT04oMSwgMTQsIDApCS8qIGFkZCB0YWJsZWFtICovCisjZGVmaW5lIEtfVkVSU18xXzE1 IE1BS0VfQVJDSElWRV9WRVJTSU9OKDEsIDE1LCAwKQkvKiBhZGQKKwkJCQkJCQkJCQkJCQkgKiBj b21wcmVzc2lvbl9hbGdvcml0aG0KKwkJCQkJCQkJCQkJCQkgKiBpbiBoZWFkZXIgKi8KIAogLyog Q3VycmVudCBhcmNoaXZlIHZlcnNpb24gbnVtYmVyICh0aGUgZm9ybWF0IHdlIGNhbiBvdXRwdXQp ICovCiAjZGVmaW5lIEtfVkVSU19NQUpPUiAxCi0jZGVmaW5lIEtfVkVSU19NSU5PUiAxNAorI2Rl ZmluZSBLX1ZFUlNfTUlOT1IgMTUKICNkZWZpbmUgS19WRVJTX1JFViAwCiAjZGVmaW5lIEtfVkVS U19TRUxGIE1BS0VfQVJDSElWRV9WRVJTSU9OKEtfVkVSU19NQUpPUiwgS19WRVJTX01JTk9SLCBL X1ZFUlNfUkVWKQogCkBAIC0zMTksOCArMjk4LDcgQEAgc3RydWN0IF9hcmNoaXZlSGFuZGxlCiAK IAljaGFyCSAgICpmU3BlYzsJCQkvKiBBcmNoaXZlIEZpbGUgU3BlYyAqLwogCUZJTEUJICAgKkZI OwkJCQkvKiBHZW5lcmFsIHB1cnBvc2UgZmlsZSBoYW5kbGUgKi8KLQl2b2lkCSAgICpPRjsKLQlp bnQJCQlnek91dDsJCQkvKiBPdXRwdXQgZmlsZSAqLworCXZvaWQJICAgKk9GOwkJCQkvKiBPdXRw dXQgZmlsZSAqLwogCiAJc3RydWN0IF90b2NFbnRyeSAqdG9jOwkJLyogSGVhZGVyIG9mIGNpcmN1 bGFyIGxpc3Qgb2YgVE9DIGVudHJpZXMgKi8KIAlpbnQJCQl0b2NDb3VudDsJCS8qIE51bWJlciBv ZiBUT0MgZW50cmllcyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9j dXN0b20uYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfY3VzdG9tLmMKaW5kZXggZDFlNTQ2 NDRhOS4uNTEyYWIwNDNhZiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9j dXN0b20uYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2N1c3RvbS5jCkBAIC0yOTgs NyArMjk4LDkgQEAgX1N0YXJ0RGF0YShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQog CV9Xcml0ZUJ5dGUoQUgsIEJMS19EQVRBKTsJLyogQmxvY2sgdHlwZSAqLwogCVdyaXRlSW50KEFI LCB0ZS0+ZHVtcElkKTsJLyogRm9yIHNhbml0eSBjaGVjayAqLwogCi0JY3R4LT5jcyA9IEFsbG9j YXRlQ29tcHJlc3NvcihBSC0+Y29tcHJlc3Npb25fc3BlYywgX0N1c3RvbVdyaXRlRnVuYyk7CisJ Y3R4LT5jcyA9IEFsbG9jYXRlQ29tcHJlc3NvcihBSC0+Y29tcHJlc3Npb25fc3BlYywKKwkJCQkJ CQkJIE5VTEwsCisJCQkJCQkJCSBfQ3VzdG9tV3JpdGVGdW5jKTsKIH0KIAogLyoKQEAgLTMxNywx NSArMzE5LDE1IEBAIF9Xcml0ZURhdGEoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IHZvaWQgKmRh dGEsIHNpemVfdCBkTGVuKQogCUNvbXByZXNzb3JTdGF0ZSAqY3MgPSBjdHgtPmNzOwogCiAJaWYg KGRMZW4gPiAwKQotCQkvKiBXcml0ZURhdGFUb0FyY2hpdmUoKSBpbnRlcm5hbGx5IHRocm93cyB3 cml0ZSBlcnJvcnMgKi8KLQkJV3JpdGVEYXRhVG9BcmNoaXZlKEFILCBjcywgZGF0YSwgZExlbik7 CisJCS8qIHdyaXRlRGF0YSgpIGludGVybmFsbHkgdGhyb3dzIHdyaXRlIGVycm9ycyAqLworCQlj cy0+d3JpdGVEYXRhKEFILCBjcywgZGF0YSwgZExlbik7CiB9CiAKIC8qCiAgKiBDYWxsZWQgYnkg dGhlIGFyY2hpdmVyIHdoZW4gYSBkdW1wZXIncyAnRGF0YUR1bXBlcicgcm91dGluZSBoYXMKICAq IGZpbmlzaGVkLgogICoKLSAqIE9wdGlvbmFsLgorICogTWFuZGF0b3J5LgogICovCiBzdGF0aWMg dm9pZAogX0VuZERhdGEoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKQEAgLTMzMyw2 ICszMzUsOCBAQCBfRW5kRGF0YShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKQogCWxj bENvbnRleHQgKmN0eCA9IChsY2xDb250ZXh0ICopIEFILT5mb3JtYXREYXRhOwogCiAJRW5kQ29t cHJlc3NvcihBSCwgY3R4LT5jcyk7CisJY3R4LT5jcyA9IE5VTEw7CisKIAkvKiBTZW5kIHRoZSBl bmQgbWFya2VyICovCiAJV3JpdGVJbnQoQUgsIDApOwogfQpAQCAtMzc3LDcgKzM4MSw5IEBAIF9T dGFydExPKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUsIE9pZCBvaWQpCiAKIAlXcml0 ZUludChBSCwgb2lkKTsKIAotCWN0eC0+Y3MgPSBBbGxvY2F0ZUNvbXByZXNzb3IoQUgtPmNvbXBy ZXNzaW9uX3NwZWMsIF9DdXN0b21Xcml0ZUZ1bmMpOworCWN0eC0+Y3MgPSBBbGxvY2F0ZUNvbXBy ZXNzb3IoQUgtPmNvbXByZXNzaW9uX3NwZWMsCisJCQkJCQkJCSBOVUxMLAorCQkJCQkJCQkgX0N1 c3RvbVdyaXRlRnVuYyk7CiB9CiAKIC8qCkBAIC01NjYsNyArNTcyLDEyIEBAIF9QcmludFRvY0Rh dGEoQXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIHN0YXRpYyB2b2lkCiBfUHJpbnRE YXRhKEFyY2hpdmVIYW5kbGUgKkFIKQogewotCVJlYWREYXRhRnJvbUFyY2hpdmUoQUgsIEFILT5j b21wcmVzc2lvbl9zcGVjLCBfQ3VzdG9tUmVhZEZ1bmMpOworCUNvbXByZXNzb3JTdGF0ZSAqY3M7 CisKKwljcyA9IEFsbG9jYXRlQ29tcHJlc3NvcihBSC0+Y29tcHJlc3Npb25fc3BlYywKKwkJCQkJ CQlfQ3VzdG9tUmVhZEZ1bmMsIE5VTEwpOworCWNzLT5yZWFkRGF0YShBSCwgY3MpOworCUVuZENv bXByZXNzb3IoQUgsIGNzKTsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL3NyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXBfZGlyZWN0b3J5LmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X2RpcmVjdG9yeS5jCmluZGV4IDY4MDBjM2NjZWUuLmEyZjg4OTk1YzAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfZGlyZWN0b3J5LmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF9kaXJlY3RvcnkuYwpAQCAtNTAsOSArNTAsOCBAQCB0eXBlZGVmIHN0cnVjdAog CSAqLwogCWNoYXIJICAgKmRpcmVjdG9yeTsKIAotCWNmcAkJICAgKmRhdGFGSDsJCQkvKiBjdXJy ZW50bHkgb3BlbiBkYXRhIGZpbGUgKi8KLQotCWNmcAkJICAgKkxPc1RvY0ZIOwkJLyogZmlsZSBo YW5kbGUgZm9yIGJsb2JzLnRvYyAqLworCUNvbXByZXNzRmlsZUhhbmRsZSAqZGF0YUZIOyAvKiBj dXJyZW50bHkgb3BlbiBkYXRhIGZpbGUgKi8KKwlDb21wcmVzc0ZpbGVIYW5kbGUgKkxPc1RvY0ZI OyAvKiBmaWxlIGhhbmRsZSBmb3IgYmxvYnMudG9jICovCiAJUGFyYWxsZWxTdGF0ZSAqcHN0YXRl OwkJLyogZm9yIHBhcmFsbGVsIGJhY2t1cCAvIHJlc3RvcmUgKi8KIH0gbGNsQ29udGV4dDsKIApA QCAtMTk4LDExICsxOTcsMTEgQEAgSW5pdEFyY2hpdmVGbXRfRGlyZWN0b3J5KEFyY2hpdmVIYW5k bGUgKkFIKQogCWVsc2UKIAl7CQkJCQkJCS8qIFJlYWQgTW9kZSAqLwogCQljaGFyCQlmbmFtZVtN QVhQR1BBVEhdOwotCQljZnAJCSAgICp0b2NGSDsKKwkJQ29tcHJlc3NGaWxlSGFuZGxlICp0b2NG SDsKIAogCQlzZXRGaWxlUGF0aChBSCwgZm5hbWUsICJ0b2MuZGF0Iik7CiAKLQkJdG9jRkggPSBj Zm9wZW5fcmVhZChmbmFtZSwgUEdfQklOQVJZX1IpOworCQl0b2NGSCA9IEluaXREaXNjb3ZlckNv bXByZXNzRmlsZUhhbmRsZShmbmFtZSwgUEdfQklOQVJZX1IpOwogCQlpZiAodG9jRkggPT0gTlVM TCkKIAkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBpbnB1dCBmaWxlIFwiJXNcIjogJW0iLCBm bmFtZSk7CiAKQEAgLTIxOCw3ICsyMTcsNyBAQCBJbml0QXJjaGl2ZUZtdF9EaXJlY3RvcnkoQXJj aGl2ZUhhbmRsZSAqQUgpCiAJCVJlYWRUb2MoQUgpOwogCiAJCS8qIE5vdGhpbmcgZWxzZSBpbiB0 aGUgZmlsZSwgc28gY2xvc2UgaXQgYWdhaW4uLi4gKi8KLQkJaWYgKGNmY2xvc2UodG9jRkgpICE9 IDApCisJCWlmIChFbmRDb21wcmVzc0ZpbGVIYW5kbGUodG9jRkgpICE9IDApCiAJCQlwZ19mYXRh bCgiY291bGQgbm90IGNsb3NlIFRPQyBmaWxlOiAlbSIpOwogCQljdHgtPmRhdGFGSCA9IE5VTEw7 CiAJfQpAQCAtMzI3LDkgKzMyNiw5IEBAIF9TdGFydERhdGEoQXJjaGl2ZUhhbmRsZSAqQUgsIFRv Y0VudHJ5ICp0ZSkKIAogCXNldEZpbGVQYXRoKEFILCBmbmFtZSwgdGN0eC0+ZmlsZW5hbWUpOwog Ci0JY3R4LT5kYXRhRkggPSBjZm9wZW5fd3JpdGUoZm5hbWUsIFBHX0JJTkFSWV9XLAotCQkJCQkJ CSAgIEFILT5jb21wcmVzc2lvbl9zcGVjKTsKLQlpZiAoY3R4LT5kYXRhRkggPT0gTlVMTCkKKwlj dHgtPmRhdGFGSCA9IEluaXRDb21wcmVzc0ZpbGVIYW5kbGUoQUgtPmNvbXByZXNzaW9uX3NwZWMp OworCisJaWYgKGN0eC0+ZGF0YUZILT5vcGVuX3dyaXRlX2Z1bmMoZm5hbWUsIFBHX0JJTkFSWV9X LCBjdHgtPmRhdGFGSCkpCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBc IiVzXCI6ICVtIiwgZm5hbWUpOwogfQogCkBAIC0zNDYsMTUgKzM0NSwxNiBAQCBzdGF0aWMgdm9p ZAogX1dyaXRlRGF0YShBcmNoaXZlSGFuZGxlICpBSCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90 IGRMZW4pCiB7CiAJbGNsQ29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERh dGE7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkggPSBjdHgtPmRhdGFGSDsKIAogCWVycm5vID0g MDsKLQlpZiAoZExlbiA+IDAgJiYgY2Z3cml0ZShkYXRhLCBkTGVuLCBjdHgtPmRhdGFGSCkgIT0g ZExlbikKKwlpZiAoZExlbiA+IDAgJiYgQ0ZILT53cml0ZV9mdW5jKGRhdGEsIGRMZW4sIENGSCkg IT0gZExlbikKIAl7CiAJCS8qIGlmIHdyaXRlIGRpZG4ndCBzZXQgZXJybm8sIGFzc3VtZSBwcm9i bGVtIGlzIG5vIGRpc2sgc3BhY2UgKi8KIAkJaWYgKGVycm5vID09IDApCiAJCQllcnJubyA9IEVO T1NQQzsKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCB3cml0ZSB0byBvdXRwdXQgZmlsZTogJXMiLAot CQkJCSBnZXRfY2ZwX2Vycm9yKGN0eC0+ZGF0YUZIKSk7CisJCQkJIENGSC0+Z2V0X2Vycm9yX2Z1 bmMoQ0ZIKSk7CiAJfQogfQogCkBAIC0zNzAsNyArMzcwLDcgQEAgX0VuZERhdGEoQXJjaGl2ZUhh bmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSkKIAlsY2xDb250ZXh0ICpjdHggPSAobGNsQ29udGV4dCAq KSBBSC0+Zm9ybWF0RGF0YTsKIAogCS8qIENsb3NlIHRoZSBmaWxlICovCi0JaWYgKGNmY2xvc2Uo Y3R4LT5kYXRhRkgpICE9IDApCisJaWYgKEVuZENvbXByZXNzRmlsZUhhbmRsZShjdHgtPmRhdGFG SCkgIT0gMCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBkYXRhIGZpbGU6ICVtIik7CiAK IAljdHgtPmRhdGFGSCA9IE5VTEw7CkBAIC0zODUsMjYgKzM4NSwyNSBAQCBfUHJpbnRGaWxlRGF0 YShBcmNoaXZlSGFuZGxlICpBSCwgY2hhciAqZmlsZW5hbWUpCiAJc2l6ZV90CQljbnQ7CiAJY2hh cgkgICAqYnVmOwogCXNpemVfdAkJYnVmbGVuOwotCWNmcAkJICAgKmNmcDsKKwlDb21wcmVzc0Zp bGVIYW5kbGUgKkNGSDsKIAogCWlmICghZmlsZW5hbWUpCiAJCXJldHVybjsKIAotCWNmcCA9IGNm b3Blbl9yZWFkKGZpbGVuYW1lLCBQR19CSU5BUllfUik7Ci0KLQlpZiAoIWNmcCkKKwlDRkggPSBJ bml0RGlzY292ZXJDb21wcmVzc0ZpbGVIYW5kbGUoZmlsZW5hbWUsIFBHX0JJTkFSWV9SKTsKKwlp ZiAoIUNGSCkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGlucHV0IGZpbGUgXCIlc1wiOiAl bSIsIGZpbGVuYW1lKTsKIAogCWJ1ZiA9IHBnX21hbGxvYyhaTElCX09VVF9TSVpFKTsKIAlidWZs ZW4gPSBaTElCX09VVF9TSVpFOwogCi0Jd2hpbGUgKChjbnQgPSBjZnJlYWQoYnVmLCBidWZsZW4s IGNmcCkpKQorCXdoaWxlICgoY250ID0gQ0ZILT5yZWFkX2Z1bmMoYnVmLCBidWZsZW4sIENGSCkp KQogCXsKIAkJYWh3cml0ZShidWYsIDEsIGNudCwgQUgpOwogCX0KIAogCWZyZWUoYnVmKTsKLQlp ZiAoY2ZjbG9zZShjZnApICE9IDApCisJaWYgKEVuZENvbXByZXNzRmlsZUhhbmRsZShDRkgpICE9 IDApCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgZGF0YSBmaWxlIFwiJXNcIjogJW0iLCBm aWxlbmFtZSk7CiB9CiAKQEAgLTQzNSw2ICs0MzQsNyBAQCBfTG9hZExPcyhBcmNoaXZlSGFuZGxl ICpBSCkKIHsKIAlPaWQJCQlvaWQ7CiAJbGNsQ29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikg QUgtPmZvcm1hdERhdGE7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkg7CiAJY2hhcgkJdG9jZm5h bWVbTUFYUEdQQVRIXTsKIAljaGFyCQlsaW5lW01BWFBHUEFUSF07CiAKQEAgLTQ0MiwxNCArNDQy LDE0IEBAIF9Mb2FkTE9zKEFyY2hpdmVIYW5kbGUgKkFIKQogCiAJc2V0RmlsZVBhdGgoQUgsIHRv Y2ZuYW1lLCAiYmxvYnMudG9jIik7CiAKLQljdHgtPkxPc1RvY0ZIID0gY2ZvcGVuX3JlYWQodG9j Zm5hbWUsIFBHX0JJTkFSWV9SKTsKKwlDRkggPSBjdHgtPkxPc1RvY0ZIID0gSW5pdERpc2NvdmVy Q29tcHJlc3NGaWxlSGFuZGxlKHRvY2ZuYW1lLCBQR19CSU5BUllfUik7CiAKIAlpZiAoY3R4LT5M T3NUb2NGSCA9PSBOVUxMKQogCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gbGFyZ2Ugb2JqZWN0 IFRPQyBmaWxlIFwiJXNcIiBmb3IgaW5wdXQ6ICVtIiwKIAkJCQkgdG9jZm5hbWUpOwogCiAJLyog UmVhZCB0aGUgTE9zIFRPQyBmaWxlIGxpbmUtYnktbGluZSwgYW5kIHByb2Nlc3MgZWFjaCBMTyAq LwotCXdoaWxlICgoY2ZnZXRzKGN0eC0+TE9zVG9jRkgsIGxpbmUsIE1BWFBHUEFUSCkpICE9IE5V TEwpCisJd2hpbGUgKChDRkgtPmdldHNfZnVuYyhsaW5lLCBNQVhQR1BBVEgsIENGSCkpICE9IE5V TEwpCiAJewogCQljaGFyCQlsb2ZuYW1lW01BWFBHUEFUSCArIDFdOwogCQljaGFyCQlwYXRoW01B WFBHUEFUSF07CkBAIC00NjQsMTEgKzQ2NCwxMSBAQCBfTG9hZExPcyhBcmNoaXZlSGFuZGxlICpB SCkKIAkJX1ByaW50RmlsZURhdGEoQUgsIHBhdGgpOwogCQlFbmRSZXN0b3JlTE8oQUgsIG9pZCk7 CiAJfQotCWlmICghY2Zlb2YoY3R4LT5MT3NUb2NGSCkpCisJaWYgKCFDRkgtPmVvZl9mdW5jKENG SCkpCiAJCXBnX2ZhdGFsKCJlcnJvciByZWFkaW5nIGxhcmdlIG9iamVjdCBUT0MgZmlsZSBcIiVz XCIiLAogCQkJCSB0b2NmbmFtZSk7CiAKLQlpZiAoY2ZjbG9zZShjdHgtPkxPc1RvY0ZIKSAhPSAw KQorCWlmIChFbmRDb21wcmVzc0ZpbGVIYW5kbGUoY3R4LT5MT3NUb2NGSCkgIT0gMCkKIAkJcGdf ZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBsYXJnZSBvYmplY3QgVE9DIGZpbGUgXCIlc1wiOiAlbSIs CiAJCQkJIHRvY2ZuYW1lKTsKIApAQCAtNDg4LDE1ICs0ODgsMTYgQEAgX1dyaXRlQnl0ZShBcmNo aXZlSGFuZGxlICpBSCwgY29uc3QgaW50IGkpCiB7CiAJdW5zaWduZWQgY2hhciBjID0gKHVuc2ln bmVkIGNoYXIpIGk7CiAJbGNsQ29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1h dERhdGE7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkggPSBjdHgtPmRhdGFGSDsKIAogCWVycm5v ID0gMDsKLQlpZiAoY2Z3cml0ZSgmYywgMSwgY3R4LT5kYXRhRkgpICE9IDEpCisJaWYgKENGSC0+ d3JpdGVfZnVuYygmYywgMSwgQ0ZIKSAhPSAxKQogCXsKIAkJLyogaWYgd3JpdGUgZGlkbid0IHNl dCBlcnJubywgYXNzdW1lIHByb2JsZW0gaXMgbm8gZGlzayBzcGFjZSAqLwogCQlpZiAoZXJybm8g PT0gMCkKIAkJCWVycm5vID0gRU5PU1BDOwogCQlwZ19mYXRhbCgiY291bGQgbm90IHdyaXRlIHRv IG91dHB1dCBmaWxlOiAlcyIsCi0JCQkJIGdldF9jZnBfZXJyb3IoY3R4LT5kYXRhRkgpKTsKKwkJ CQkgQ0ZILT5nZXRfZXJyb3JfZnVuYyhDRkgpKTsKIAl9CiAKIAlyZXR1cm4gMTsKQEAgLTUxMiw4 ICs1MTMsOSBAQCBzdGF0aWMgaW50CiBfUmVhZEJ5dGUoQXJjaGl2ZUhhbmRsZSAqQUgpCiB7CiAJ bGNsQ29udGV4dCAqY3R4ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7CisJQ29tcHJl c3NGaWxlSGFuZGxlICpDRkggPSBjdHgtPmRhdGFGSDsKIAotCXJldHVybiBjZmdldGMoY3R4LT5k YXRhRkgpOworCXJldHVybiBDRkgtPmdldGNfZnVuYyhDRkgpOwogfQogCiAvKgpAQCAtNTI0LDE1 ICs1MjYsMTYgQEAgc3RhdGljIHZvaWQKIF9Xcml0ZUJ1ZihBcmNoaXZlSGFuZGxlICpBSCwgY29u c3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQogewogCWxjbENvbnRleHQgKmN0eCA9IChsY2xDb250 ZXh0ICopIEFILT5mb3JtYXREYXRhOworCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIID0gY3R4LT5k YXRhRkg7CiAKIAllcnJubyA9IDA7Ci0JaWYgKGNmd3JpdGUoYnVmLCBsZW4sIGN0eC0+ZGF0YUZI KSAhPSBsZW4pCisJaWYgKENGSC0+d3JpdGVfZnVuYyhidWYsIGxlbiwgQ0ZIKSAhPSBsZW4pCiAJ ewogCQkvKiBpZiB3cml0ZSBkaWRuJ3Qgc2V0IGVycm5vLCBhc3N1bWUgcHJvYmxlbSBpcyBubyBk aXNrIHNwYWNlICovCiAJCWlmIChlcnJubyA9PSAwKQogCQkJZXJybm8gPSBFTk9TUEM7CiAJCXBn X2ZhdGFsKCJjb3VsZCBub3Qgd3JpdGUgdG8gb3V0cHV0IGZpbGU6ICVzIiwKLQkJCQkgZ2V0X2Nm cF9lcnJvcihjdHgtPmRhdGFGSCkpOworCQkJCSBDRkgtPmdldF9lcnJvcl9mdW5jKENGSCkpOwog CX0KIH0KIApAQCAtNTQ1LDEyICs1NDgsMTMgQEAgc3RhdGljIHZvaWQKIF9SZWFkQnVmKEFyY2hp dmVIYW5kbGUgKkFILCB2b2lkICpidWYsIHNpemVfdCBsZW4pCiB7CiAJbGNsQ29udGV4dCAqY3R4 ID0gKGxjbENvbnRleHQgKikgQUgtPmZvcm1hdERhdGE7CisJQ29tcHJlc3NGaWxlSGFuZGxlICpD RkggPSBjdHgtPmRhdGFGSDsKIAogCS8qCi0JICogSWYgdGhlcmUgd2FzIGFuIEkvTyBlcnJvciwg d2UgYWxyZWFkeSBleGl0ZWQgaW4gY2ZyZWFkKCksIHNvIGhlcmUgd2UKKwkgKiBJZiB0aGVyZSB3 YXMgYW4gSS9PIGVycm9yLCB3ZSBhbHJlYWR5IGV4aXRlZCBpbiByZWFkRigpLCBzbyBoZXJlIHdl CiAJICogZXhpdCBvbiBzaG9ydCByZWFkcy4KIAkgKi8KLQlpZiAoY2ZyZWFkKGJ1ZiwgbGVuLCBj dHgtPmRhdGFGSCkgIT0gbGVuKQorCWlmIChDRkgtPnJlYWRfZnVuYyhidWYsIGxlbiwgQ0ZIKSAh PSBsZW4pCiAJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmcm9tIGlucHV0IGZpbGU6IGVuZCBv ZiBmaWxlIik7CiB9CiAKQEAgLTU3Myw3ICs1NzcsNyBAQCBfQ2xvc2VBcmNoaXZlKEFyY2hpdmVI YW5kbGUgKkFIKQogCiAJaWYgKEFILT5tb2RlID09IGFyY2hNb2RlV3JpdGUpCiAJewotCQljZnAJ CSAgICp0b2NGSDsKKwkJQ29tcHJlc3NGaWxlSGFuZGxlICp0b2NGSDsKIAkJcGdfY29tcHJlc3Nf c3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjID0gezB9OwogCQljaGFyCQlmbmFtZVtNQVhQ R1BBVEhdOwogCkBAIC01ODQsOCArNTg4LDggQEAgX0Nsb3NlQXJjaGl2ZShBcmNoaXZlSGFuZGxl ICpBSCkKIAogCQkvKiBUaGUgVE9DIGlzIGFsd2F5cyBjcmVhdGVkIHVuY29tcHJlc3NlZCAqLwog CQljb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSA9IFBHX0NPTVBSRVNTSU9OX05PTkU7Ci0JCXRv Y0ZIID0gY2ZvcGVuX3dyaXRlKGZuYW1lLCBQR19CSU5BUllfVywgY29tcHJlc3Npb25fc3BlYyk7 Ci0JCWlmICh0b2NGSCA9PSBOVUxMKQorCQl0b2NGSCA9IEluaXRDb21wcmVzc0ZpbGVIYW5kbGUo Y29tcHJlc3Npb25fc3BlYyk7CisJCWlmICh0b2NGSC0+b3Blbl93cml0ZV9mdW5jKGZuYW1lLCBQ R19CSU5BUllfVywgdG9jRkgpKQogCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBm aWxlIFwiJXNcIjogJW0iLCBmbmFtZSk7CiAJCWN0eC0+ZGF0YUZIID0gdG9jRkg7CiAKQEAgLTU5 OCw3ICs2MDIsNyBAQCBfQ2xvc2VBcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFIKQogCQlXcml0ZUhl YWQoQUgpOwogCQlBSC0+Zm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKIAkJV3JpdGVUb2MoQUgpOwot CQlpZiAoY2ZjbG9zZSh0b2NGSCkgIT0gMCkKKwkJaWYgKEVuZENvbXByZXNzRmlsZUhhbmRsZSh0 b2NGSCkgIT0gMCkKIAkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgVE9DIGZpbGU6ICVtIik7 CiAJCVdyaXRlRGF0YUNodW5rcyhBSCwgY3R4LT5wc3RhdGUpOwogCkBAIC02NDksOCArNjUzLDgg QEAgX1N0YXJ0TE9zKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUpCiAKIAkvKiBUaGUg TE8gVE9DIGZpbGUgaXMgbmV2ZXIgY29tcHJlc3NlZCAqLwogCWNvbXByZXNzaW9uX3NwZWMuYWxn b3JpdGhtID0gUEdfQ09NUFJFU1NJT05fTk9ORTsKLQljdHgtPkxPc1RvY0ZIID0gY2ZvcGVuX3dy aXRlKGZuYW1lLCAiYWIiLCBjb21wcmVzc2lvbl9zcGVjKTsKLQlpZiAoY3R4LT5MT3NUb2NGSCA9 PSBOVUxMKQorCWN0eC0+TE9zVG9jRkggPSBJbml0Q29tcHJlc3NGaWxlSGFuZGxlKGNvbXByZXNz aW9uX3NwZWMpOworCWlmIChjdHgtPkxPc1RvY0ZILT5vcGVuX3dyaXRlX2Z1bmMoZm5hbWUsICJh YiIsIGN0eC0+TE9zVG9jRkgpKQogCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZp bGUgXCIlc1wiOiAlbSIsIGZuYW1lKTsKIH0KIApAQCAtNjY3LDkgKzY3MSw4IEBAIF9TdGFydExP KEFyY2hpdmVIYW5kbGUgKkFILCBUb2NFbnRyeSAqdGUsIE9pZCBvaWQpCiAKIAlzbnByaW50Zihm bmFtZSwgTUFYUEdQQVRILCAiJXMvYmxvYl8ldS5kYXQiLCBjdHgtPmRpcmVjdG9yeSwgb2lkKTsK IAotCWN0eC0+ZGF0YUZIID0gY2ZvcGVuX3dyaXRlKGZuYW1lLCBQR19CSU5BUllfVywgQUgtPmNv bXByZXNzaW9uX3NwZWMpOwotCi0JaWYgKGN0eC0+ZGF0YUZIID09IE5VTEwpCisJY3R4LT5kYXRh RkggPSBJbml0Q29tcHJlc3NGaWxlSGFuZGxlKEFILT5jb21wcmVzc2lvbl9zcGVjKTsKKwlpZiAo Y3R4LT5kYXRhRkgtPm9wZW5fd3JpdGVfZnVuYyhmbmFtZSwgUEdfQklOQVJZX1csIGN0eC0+ZGF0 YUZIKSkKIAkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxlIFwiJXNcIjogJW0i LCBmbmFtZSk7CiB9CiAKQEAgLTY4MiwxOCArNjg1LDE5IEBAIHN0YXRpYyB2b2lkCiBfRW5kTE8o QXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSwgT2lkIG9pZCkKIHsKIAlsY2xDb250ZXh0 ICpjdHggPSAobGNsQ29udGV4dCAqKSBBSC0+Zm9ybWF0RGF0YTsKKwlDb21wcmVzc0ZpbGVIYW5k bGUgKkNGSCA9IGN0eC0+TE9zVG9jRkg7CiAJY2hhcgkJYnVmWzUwXTsKIAlpbnQJCQlsZW47CiAK LQkvKiBDbG9zZSB0aGUgTE8gZGF0YSBmaWxlIGl0c2VsZiAqLwotCWlmIChjZmNsb3NlKGN0eC0+ ZGF0YUZIKSAhPSAwKQotCQlwZ19mYXRhbCgiY291bGQgbm90IGNsb3NlIExPIGRhdGEgZmlsZTog JW0iKTsKKwkvKiBDbG9zZSB0aGUgQkxPQiBkYXRhIGZpbGUgaXRzZWxmICovCisJaWYgKEVuZENv bXByZXNzRmlsZUhhbmRsZShjdHgtPmRhdGFGSCkgIT0gMCkKKwkJcGdfZmF0YWwoImNvdWxkIG5v dCBjbG9zZSBibG9iIGRhdGEgZmlsZTogJW0iKTsKIAljdHgtPmRhdGFGSCA9IE5VTEw7CiAKIAkv KiByZWdpc3RlciB0aGUgTE8gaW4gYmxvYnMudG9jICovCiAJbGVuID0gc25wcmludGYoYnVmLCBz aXplb2YoYnVmKSwgIiV1IGJsb2JfJXUuZGF0XG4iLCBvaWQsIG9pZCk7Ci0JaWYgKGNmd3JpdGUo YnVmLCBsZW4sIGN0eC0+TE9zVG9jRkgpICE9IGxlbikKLQkJcGdfZmF0YWwoImNvdWxkIG5vdCB3 cml0ZSB0byBMT3MgVE9DIGZpbGUiKTsKKwlpZiAoQ0ZILT53cml0ZV9mdW5jKGJ1ZiwgbGVuLCBD RkgpICE9IGxlbikKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCB3cml0ZSB0byBibG9icyBUT0MgZmls ZSIpOwogfQogCiAvKgpAQCAtNzA2LDggKzcxMCw4IEBAIF9FbmRMT3MoQXJjaGl2ZUhhbmRsZSAq QUgsIFRvY0VudHJ5ICp0ZSkKIHsKIAlsY2xDb250ZXh0ICpjdHggPSAobGNsQ29udGV4dCAqKSBB SC0+Zm9ybWF0RGF0YTsKIAotCWlmIChjZmNsb3NlKGN0eC0+TE9zVG9jRkgpICE9IDApCi0JCXBn X2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgTE9zIFRPQyBmaWxlOiAlbSIpOworCWlmIChFbmRDb21w cmVzc0ZpbGVIYW5kbGUoY3R4LT5MT3NUb2NGSCkgIT0gMCkKKwkJcGdfZmF0YWwoImNvdWxkIG5v dCBjbG9zZSBibG9icyBUT0MgZmlsZTogJW0iKTsKIAljdHgtPkxPc1RvY0ZIID0gTlVMTDsKIH0K IApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwgYi9zcmMvYmlu L3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbAppbmRleCAyZWVlZjJhNDc4Li5mM2JhOTI2MzIxIDEw MDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbAorKysgYi9zcmMvYmlu L3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbApAQCAtOTQsNyArOTQsNyBAQCBteSAlcGdkdW1wX3J1 bnMgPSAoCiAJCQljb21tYW5kID0+IFsKIAkJCQkncGdfcmVzdG9yZScsICctbCcsICIkdGVtcGRp ci9jb21wcmVzc2lvbl9nemlwX2N1c3RvbS5kdW1wIiwKIAkJCV0sCi0JCQlleHBlY3RlZCA9PiBx ci9Db21wcmVzc2lvbjogMS8sCisJCQlleHBlY3RlZCA9PiBxci9Db21wcmVzc2lvbjogZ3ppcC8s CiAJCQluYW1lICAgICA9PiAnZGF0YSBjb250ZW50IGlzIGd6aXAtY29tcHJlc3NlZCcKIAkJfSwK IAl9LApAQCAtMjM5LDggKzIzOSw4IEBAIG15ICVwZ2R1bXBfcnVucyA9ICgKIAkJCWNvbW1hbmQg PT4KIAkJCSAgWyAncGdfcmVzdG9yZScsICctbCcsICIkdGVtcGRpci9kZWZhdWx0c19jdXN0b21f Zm9ybWF0LmR1bXAiLCBdLAogCQkJZXhwZWN0ZWQgPT4gJHN1cHBvcnRzX2d6aXAgPwotCQkJcXIv Q29tcHJlc3Npb246IC0xLyA6Ci0JCQlxci9Db21wcmVzc2lvbjogMC8sCisJCQlxci9Db21wcmVz c2lvbjogZ3ppcC8gOgorCQkJcXIvQ29tcHJlc3Npb246IG5vbmUvLAogCQkJbmFtZSA9PiAnZGF0 YSBjb250ZW50IGlzIGd6aXAtY29tcHJlc3NlZCBieSBkZWZhdWx0IGlmIGF2YWlsYWJsZScsCiAJ CX0sCiAJfSwKQEAgLTI2NCw4ICsyNjQsOCBAQCBteSAlcGdkdW1wX3J1bnMgPSAoCiAJCQljb21t YW5kID0+CiAJCQkgIFsgJ3BnX3Jlc3RvcmUnLCAnLWwnLCAiJHRlbXBkaXIvZGVmYXVsdHNfZGly X2Zvcm1hdCIsIF0sCiAJCQlleHBlY3RlZCA9PiAkc3VwcG9ydHNfZ3ppcCA/Ci0JCQlxci9Db21w cmVzc2lvbjogLTEvIDoKLQkJCXFyL0NvbXByZXNzaW9uOiAwLywKKwkJCXFyL0NvbXByZXNzaW9u OiBnemlwLyA6CisJCQlxci9Db21wcmVzc2lvbjogbm9uZS8sCiAJCQluYW1lID0+ICdkYXRhIGNv bnRlbnQgaXMgZ3ppcC1jb21wcmVzc2VkIGJ5IGRlZmF1bHQnLAogCQl9LAogCQlnbG9iX3BhdHRl cm5zID0+IFsKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luY2x1ZGUvY3BsdXNwbHVzY2hlY2sg Yi9zcmMvdG9vbHMvcGdpbmNsdWRlL2NwbHVzcGx1c2NoZWNrCmluZGV4IGU1MmZlOWY1MDkuLmRh OGU0ODYxZjQgMTAwNzU1Ci0tLSBhL3NyYy90b29scy9wZ2luY2x1ZGUvY3BsdXNwbHVzY2hlY2sK KysrIGIvc3JjL3Rvb2xzL3BnaW5jbHVkZS9jcGx1c3BsdXNjaGVjawpAQCAtMTUwLDYgKzE1MCw3 IEBAIGRvCiAKIAkjIHBnX2R1bXAgaXMgbm90IEMrKy1jbGVhbiBiZWNhdXNlIGl0IHVzZXMgInB1 YmxpYyIgYW5kICJuYW1lc3BhY2UiCiAJIyBhcyBmaWVsZCBuYW1lcywgd2hpY2ggaXMgdW5mb3J0 dW5hdGUgYnV0IHdlIHdvbid0IGNoYW5nZSBpdCBub3cuCisJdGVzdCAiJGYiID0gc3JjL2Jpbi9w Z19kdW1wL2NvbXByZXNzX2d6aXAuaCAmJiBjb250aW51ZQogCXRlc3QgIiRmIiA9IHNyYy9iaW4v cGdfZHVtcC9jb21wcmVzc19pby5oICYmIGNvbnRpbnVlCiAJdGVzdCAiJGYiID0gc3JjL2Jpbi9w Z19kdW1wL3BhcmFsbGVsLmggJiYgY29udGludWUKIAl0ZXN0ICIkZiIgPSBzcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggJiYgY29udGludWUKZGlmZiAtLWdpdCBhL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKaW5kZXggMjNiYWZlYzVmNy4uODQwMTkxZDY4MCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKQEAgLTQyOCw2ICs0MjgsNyBAQCBDb21waWxlZEV4cHJTdGF0ZQogQ29tcG9zaXRlSU9EYXRh CiBDb21wb3NpdGVUeXBlU3RtdAogQ29tcG91bmRBZmZpeEZsYWcKK0NvbXByZXNzRmlsZUhhbmRs ZQogQ29tcHJlc3Npb25Mb2NhdGlvbgogQ29tcHJlc3NvclN0YXRlCiBDb21wdXRlWGlkSG9yaXpv bnNSZXN1bHQKQEAgLTEwMzQsNiArMTAzNSw3IEBAIEd1Y1N0YWNrCiBHdWNTdGFja1N0YXRlCiBH dWNTdHJpbmdBc3NpZ25Ib29rCiBHdWNTdHJpbmdDaGVja0hvb2sKK0d6aXBDb21wcmVzc29yU3Rh dGUKIEhBTkRMRQogSEFTSEFDVElPTgogSEFTSEJVQ0tFVAotLSAKMi4zNC4xCgo= --b1_K2qqM7t42dUIRepy8KMEQ6vZbE1YknGEILBowG8gVDk--