From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-relay-2.sys.kth.se (smtp-relay-2.sys.kth.se [IPv6:2001:6b0:1:1200:250:56ff:fead:963e]) by sourceware.org (Postfix) with ESMTPS id 320363858402 for ; Tue, 23 Nov 2021 10:51:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 320363858402 Received: from exdb5.ug.kth.se (exdb5.ug.kth.se [192.168.32.60]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp-relay-2.sys.kth.se (Postfix) with ESMTPS id 4Hz1CD2C0RzPMfd; Tue, 23 Nov 2021 11:51:03 +0100 (CET) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp-relay-2.sys.kth.se 4Hz1CD2C0RzPMfd Received: from exdb6.ug.kth.se (192.168.32.61) by exdb5.ug.kth.se (192.168.32.60) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.14; Tue, 23 Nov 2021 11:51:02 +0100 Received: from exdb6.ug.kth.se ([192.168.32.61]) by exdb6.ug.kth.se ([192.168.32.61]) with mapi id 15.02.0986.014; Tue, 23 Nov 2021 11:51:01 +0100 From: Petter Tomner To: David Malcolm , Antoni Boucher , "jit@gcc.gnu.org" Subject: SV: [PATCH] libgccjit: Add function to set the initial value of a global variable [PR96089] Thread-Topic: [PATCH] libgccjit: Add function to set the initial value of a global variable [PR96089] Thread-Index: AQHX4A5BvSF/jycHYEaAgABQ/pvBR6wQ4v/4 Date: Tue, 23 Nov 2021 10:51:01 +0000 Message-ID: References: <7d6762623f658712a4b802cc3d6524c106affa2b.camel@zoho.com> <62c178b5bb0ab004def3c7869da2b03846e5134c.camel@zoho.com>, In-Reply-To: Accept-Language: sv-SE, en-US Content-Language: sv-SE X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-originating-ip: [192.168.32.250] Content-Type: multipart/mixed; boundary="_002_ac3bb1dcaf524ec6892c03526b3e4503kthse_" MIME-Version: 1.0 X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, SPF_HELO_NONE, SPF_PASS, TXREP, T_FILL_THIS_FORM_SHORT, WEIRD_QUOTING autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: jit@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Jit mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Nov 2021 10:51:17 -0000 --_002_ac3bb1dcaf524ec6892c03526b3e4503kthse_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi! Does it work with pointers to other symbols and unions? I don't think const= ant symbols end up in the .rdata section unless they are marked for that. I did a similar patch that I just dropped in a RFC mail some time ago. (See= attachment). If I remember correctly there need to be alot of folding to not segfault de= eper into gcc on expressions that are not one literal, for e.g. pointer arithmetic. Regards, Petter=20 Fr=E5n: Gcc-patches f=F6r= Antoni Boucher via Gcc-patches Skickat: den 23 november 2021 03:01 Till: David Malcolm Kopia: jit@gcc.gnu.org; gcc-patches@gcc.gnu.org =C4mne: Re: [PATCH] libgccjit: Add function to set the initial value of a g= lobal variable [PR96089] =A0 =20 Hi David! I updated the patch to allow initializing global variables with values of type array or struct. I also fixed the bug I was talking in my previous message by using the following workaround: I create a new memento for the action of setting the global variable initial value and as such, both the global variable and the initial value are bound to exist when setting the global variable initializer. Is that workaround good enough? (I guess that workaround could be used to fix the same issue that we have for inline assembly.) Thanks for the review! Le vendredi 11 juin 2021 =E0 16:44 -0400, Antoni Boucher a =E9crit=A0: > David: this one wasn't reviewed yet by you, so you can review it. >=20 > Le jeudi 20 mai 2021 =E0 21:27 -0400, Antoni Boucher a =E9crit=A0: > > Hi. > >=20 > > I made this patch to set an arbitrary value to a global variable. > >=20 > > This patch suffers from the same issue as inline assembly > > (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D100380), i.e. it > > segfaults if the `rvalue` is created after the global variable. > > It seems to be a design issue so I'm not sure what would be the fix > > for > > it and having it fixed would allow me to test this new function > > much > > more and see if things are missing (i.e. it might require a way to > > create a constant struct). > > See the link above for an explanation of this issue. > >=20 > > Thanks for the review. >=20 = --_002_ac3bb1dcaf524ec6892c03526b3e4503kthse_ Content-Type: text/x-patch; name="0003-Add-suport-for-global-rvalue-initialization-and-ctor.patch" Content-Description: 0003-Add-suport-for-global-rvalue-initialization-and-ctor.patch Content-Disposition: attachment; filename="0003-Add-suport-for-global-rvalue-initialization-and-ctor.patch"; size=125148; creation-date="Tue, 23 Nov 2021 10:06:33 GMT"; modification-date="Tue, 23 Nov 2021 10:06:33 GMT" Content-Transfer-Encoding: base64 RnJvbSBlNjg1MGYzNDE3YmMwYzM1ZDk3MTJlODUwZTUyNzQxMTc1MjcwMjFjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXR0ZXIgVG9tbmVyIDx0b21uZXJAa3RoLnNlPgpEYXRlOiBT dW4sIDI0IE9jdCAyMDIxIDIxOjEzOjQ0ICswMjAwClN1YmplY3Q6IFtQQVRDSCAzLzVdIEFkZCBz dXBvcnQgZm9yIGdsb2JhbCBydmFsdWUgaW5pdGlhbGl6YXRpb24gYW5kIGN0b3JzCgpUaGlzIHBh dGNoIGFkZHMgc3VwcG9ydCBmb3IgaW5pdGlhbGl6YXRpb24gb2YgZ2xvYmFsIHZhcmlhYmxlcwp3 aXRoIHJ2YWx1ZXMgYW5kIGNyZWF0aW5nIGNvbnN0cnVjdG9ycyBmb3IgYXJyYXksIHN0cnVjdCBh bmQKdW5pb24gdHlwZXMgd2hpY2ggY2FuIGJlIHVzZWQgYXMgcnZhbHVlcy4KCmdjYy9qaXQvCgkq IGppdC1wbGF5YmFjay5jIDoKCShnbG9iYWxfbmV3X2RlY2wpIDogSGFuZGxlIGNvbnN0IGdsb2Jh bCBnZW5lcmF0aW9uCgkobmV3X2dsb2JhbCkgOiBOZXcgZmxhZwoJKGdsb2JhbF9zZXRfaW5pdF9y dmFsdWUpIDogTmV3CgkobmV3X2N0b3IpIDogTmV3CgkobmV3X2dsb2JhbF9pbml0aWFsaXplZCkg OiBGbGFnCgkoYXNfdHJ1dGhfdmFsdWUpIDogRm9sZAoJKG5ld191bmFyeV9vcCkgOiBGb2xkCgko bmV3X2JpbmFyeV9vcCkgOiBGb2xkCgkobmV3X2NvbXBhcmlzb24pIDogRm9sZAoJKG5ld19hcnJh eV9hY2Nlc3MpIDogRm9sZAoJKG5ld19kZXJlZmVyZW5jZSkgOiBGb2xkCgkoZ2V0X2FkZHJlc3Mp IDogRm9sZAoJKiBqaXQtcGxheWJhY2suaCA6CgkoZ2xvYmFsX3NldF9pbml0X3J2YWx1ZSkgOiBO ZXcKCShuZXdfY3RvcikgOiBOZXcKCSogaml0LXJlY29yZGluZy5jIDogU2VlIC5oCgkqIGppdC1y ZWNvcmRpbmcuaCA6CgkobmV3X2dsb2JhbF9pbml0X3J2YWx1ZSkgOiBOZXcKCShuZXdfY3Rvcikg OiBOZXcKCShjdG9yKSA6IE5ldywgaW5oZXJpdHMgcnZhbHVlCgkoZ2xvYmFsX2luaXRfcnZhbHVl KSA6IE5ldywgaW5oZXJpdHMgbWVtZW50bwoJKHR5cGU6OmlzX3N0cnVjdCkgOiBOZXcKCSh0eXBl Ojppc191bmlvbikgOiBOZXcKCShmaWVsZDo6Z2V0X25hbWUpIDogTmV3CgkqIGxpYmdjY2ppdCsr LmggOiBOZXcgZW50cnlwb2ludHMKCSogbGliZ2Njaml0LmMgOiBTZWUgLmgKCSogbGliZ2Njaml0 LmggOgoJKGdjY19qaXRfY29udGV4dF9uZXdfY29uc3RydWN0b3IpIDogTmV3CgkoZ2NjX2ppdF9n bG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSkgOiBOZXcKCShMSUJHQ0NKSVRfSEFWRV9DVE9S UykgOiBOZXcKCSogbGliZ2Njaml0Lm1hcCA6IE5ldyBlbnRyeXBvaW50cyBhZGRlZCB0byBBQkkg MTYKCmdjYy90ZXN0c3VpdGUvCgkqIGppdC5kZy90ZXN0LWVycm9yLWN0b3Itc3RydWN0LXRvby1i aWcuYzogTmV3CgkqIGppdC5kZy90ZXN0LWVycm9yLWN0b3Itc3RydWN0LXdyb25nLWZpZWxkLW5h bWUuYzogTmV3CgkqIGppdC5kZy90ZXN0LWVycm9yLWN0b3Itc3RydWN0LXdyb25nLXR5cGUuYzog TmV3CgkqIGppdC5kZy90ZXN0LWVycm9yLWN0b3ItdW5pb24td3JvbmctZmllbGQtbmFtZS5jOiBO ZXcKCSogaml0LmRnL3Rlc3QtZXJyb3ItZ2xvYmFsLWFsbHJlYWR5LWluaXQuYzogTmV3CgkqIGpp dC5kZy90ZXN0LWVycm9yLWdsb2JhbC1jb21tb24tc2VjdGlvbi5jOiBOZXcKCSogaml0LmRnL3Rl c3QtZXJyb3ItZ2xvYmFsLWluaXQtdG9vLXNtYWxsLWFycmF5LmM6IE5ldwoJKiBqaXQuZGcvdGVz dC1lcnJvci1nbG9iYWwtbHZhbHVlLWluaXQuYzogTmV3CgkqIGppdC5kZy90ZXN0LWVycm9yLWds b2JhbC1ub25jb25zdC1pbml0LmM6IE5ldwoJKiBqaXQuZGcvdGVzdC1nbG9iYWwtaW5pdC1ydmFs dWUuYzogTmV3CgkqIGppdC5kZy90ZXN0LWxvY2FsLWluaXQtcnZhbHVlLmM6IE5ldwoKZ2NjL2pp dC9kb2NzL3RvcGljcy8KCSogZXhwcmVzc2lvbnMucnN0IDogVXBkYXRlZCBkb2NzCi0tLQogZ2Nj L2ppdC9kb2NzL3RvcGljcy9leHByZXNzaW9ucy5yc3QgICAgICAgICAgIHwgIDExNyArKwogZ2Nj L2ppdC9qaXQtY29tbW9uLmggICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgOSArCiBnY2Mv aml0L2ppdC1wbGF5YmFjay5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgMjY3ICsrKy0KIGdj Yy9qaXQvaml0LXBsYXliYWNrLmggICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjUgKy0KIGdj Yy9qaXQvaml0LXJlY29yZGluZy5jICAgICAgICAgICAgICAgICAgICAgICB8ICAzNzQgKysrKy0K IGdjYy9qaXQvaml0LXJlY29yZGluZy5oICAgICAgICAgICAgICAgICAgICAgICB8ICAxMTIgKysK IGdjYy9qaXQvbGliZ2Njaml0KysuaCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDQgKwog Z2NjL2ppdC9saWJnY2NqaXQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDI4OSArKyst CiBnY2Mvaml0L2xpYmdjY2ppdC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTA3ICsr CiBnY2Mvaml0L2xpYmdjY2ppdC5tYXAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA0ICst CiBnY2MvdGVzdHN1aXRlL2ppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaCAgfCAgIDE0ICsK IC4uLi9qaXQuZGcvdGVzdC1lcnJvci1jdG9yLXN0cnVjdC10b28tYmlnLmMgICB8ICAgODYgKysK IC4uLi90ZXN0LWVycm9yLWN0b3Itc3RydWN0LXdyb25nLWZpZWxkLW5hbWUuYyB8ICAgODMgKysK IC4uLi90ZXN0LWVycm9yLWN0b3Itc3RydWN0LXdyb25nLXR5cGUuYyAgICAgICB8ICAgNzYgKysK IC4uLi90ZXN0LWVycm9yLWN0b3ItdW5pb24td3JvbmctZmllbGQtbmFtZS5jICB8ICAgODAgKysK IC4uLi9qaXQuZGcvdGVzdC1lcnJvci1nbG9iYWwtYWxscmVhZHktaW5pdC5jICB8ICAgNDYgKwog Li4uL2ppdC5kZy90ZXN0LWVycm9yLWdsb2JhbC1jb21tb24tc2VjdGlvbi5jIHwgICA1NCArCiAu Li4vdGVzdC1lcnJvci1nbG9iYWwtaW5pdC10b28tc21hbGwtYXJyYXkuYyAgfCAgIDY0ICsKIC4u Li9qaXQuZGcvdGVzdC1lcnJvci1nbG9iYWwtbHZhbHVlLWluaXQuYyAgICB8ICAgNjAgKwogLi4u L2ppdC5kZy90ZXN0LWVycm9yLWdsb2JhbC1ub25jb25zdC1pbml0LmMgIHwgICA4MCArKwogLi4u L2ppdC5kZy90ZXN0LWdsb2JhbC1pbml0LXJ2YWx1ZS5jICAgICAgICAgIHwgMTIxMSArKysrKysr KysrKysrKysrKwogZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1sb2NhbC1pbml0LXJ2YWx1ZS5j IHwgIDUzMiArKysrKysrKwogMjIgZmlsZXMgY2hhbmdlZCwgMzcwOSBpbnNlcnRpb25zKCspLCAy NSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90 ZXN0LWVycm9yLWN0b3Itc3RydWN0LXRvby1iaWcuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90 ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItY3Rvci1zdHJ1Y3Qtd3JvbmctZmllbGQtbmFtZS5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1jdG9y LXN0cnVjdC13cm9uZy10eXBlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2pp dC5kZy90ZXN0LWVycm9yLWN0b3ItdW5pb24td3JvbmctZmllbGQtbmFtZS5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1nbG9iYWwtYWxscmVhZHkt aW5pdC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJv ci1nbG9iYWwtY29tbW9uLXNlY3Rpb24uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3Vp dGUvaml0LmRnL3Rlc3QtZXJyb3ItZ2xvYmFsLWluaXQtdG9vLXNtYWxsLWFycmF5LmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWdsb2JhbC1sdmFs dWUtaW5pdC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1l cnJvci1nbG9iYWwtbm9uY29uc3QtaW5pdC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3Rz dWl0ZS9qaXQuZGcvdGVzdC1nbG9iYWwtaW5pdC1ydmFsdWUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtbG9jYWwtaW5pdC1ydmFsdWUuYwoKZGlmZiAtLWdp dCBhL2djYy9qaXQvZG9jcy90b3BpY3MvZXhwcmVzc2lvbnMucnN0IGIvZ2NjL2ppdC9kb2NzL3Rv cGljcy9leHByZXNzaW9ucy5yc3QKaW5kZXggMzBhM2I5NzgwZjkuLjNiMzhjYWIwMjVjIDEwMDY0 NAotLS0gYS9nY2Mvaml0L2RvY3MvdG9waWNzL2V4cHJlc3Npb25zLnJzdAorKysgYi9nY2Mvaml0 L2RvY3MvdG9waWNzL2V4cHJlc3Npb25zLnJzdApAQCAtMTc2LDYgKzE3Niw5MSBAQCBTaW1wbGUg ZXhwcmVzc2lvbnMKICAgIHVuZGVybHlpbmcgc3RyaW5nLCBzbyBpdCBpcyB2YWxpZCB0byBwYXNz IGluIGEgcG9pbnRlciB0byBhbiBvbi1zdGFjawogICAgYnVmZmVyLgogCisuLiBmdW5jdGlvbjo6 IGdjY19qaXRfcnZhbHVlICpcCisJICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1Y3Rv ciAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ2NjX2ppdF9sb2NhdGlvbiAqbG9jLFwKKwkJCQkgICAgICAgICAg ICAgICBnY2Nfaml0X3R5cGUgKnR5cGUsXAorCQkJCSAgICAgICAgICAgICAgIHNpemVfdCBhcnJf bGVuZ3RoLFwKKwkJCQkgICAgICAgICAgICAgICBnY2Nfaml0X2ZpZWxkICoqZmllbGRzLFwKKwkJ CQkgICAgICAgICAgICAgICBnY2Nfaml0X3J2YWx1ZSAqKnZhbHVlcykKKworICAgQ3JlYXRlIGEg Y29uc3RydWN0b3IgZm9yIGFuIGFycmF5LCB1bmlvbiBvciBzdHJ1Y3QgYXMgYSBydmFsdWUuCisK KyAgIFJldHVybnMgTlVMTCBvbiBlcnJvci4gVGhlIHR3byBwYXJhbWV0ZXIgYXJyYXlzIGFyZSBj b3BpZWQgYW5kCisgICBkbyBub3QgaGF2ZSB0byBvdXRsaXZlIHRoZSBjb250ZXh0LgorCisgICBg YHR5cGVgYCBzcGVjaWZpZXMgd2hhdCB0aGUgY29uc3RydWN0b3Igd2lsbCBidWlsZC4KKworICAg YGBhcnJfbGVuZ3RoYGAgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYGB2YWx1 ZXNgYC4KKyAgIAorICAgQ29uc3RydWN0aW5nIHN0cnVjdHMKKyAgICIiIiIiIiIiIiIiIiIiIiIi IiIiCisKKyAgIEZvciBhIHN0cnVjdCwgZWFjaCBmaWVsZCBpbiBgYGZpZWxkc2BgIHNwZWNpZmll cworICAgd2hpY2ggZmllbGQgaW4gdGhlIHN0cnVjdCB0byBzZXQgdG8gdGhlIGNvcnJlc3BvbmRp bmcKKyAgIHZhbHVlIGluIGBgdmFsdWVzYGAuIGBgZmllbGRzYGAgYW5kIGBgdmFsdWVzYGAgYXJl IHBhaXJlZCBieSBpbmRleAorICAgYW5kIHRoZSBwYWlyIG5lZWQgdG8gaGF2ZSB0aGUgc2FtZSB1 bnF1YWxpZmllZCB0eXBlLgorCisgICBBIE5VTEwgdmFsdWUgaW4gYGB2YWx1ZXNgYCBpcyBhIHNo b3J0aGFuZCBmb3IgemVybyBpbml0aWFsaXphdGlvbgorICAgb2YgdGhlIGNvcnJlc3BvbmRpbmcg ZmllbGQgb3IgYXJyYXkgZWxlbWVudC4KKworICAgVGhlIGZpZWxkcyBpbiBgYGZpZWxkc2BgIGhh dmUgdG8gYmUgaW4gZGVmaW5pdGlvbiBvcmRlciwgYnV0IHRoZXJlCisgICBjYW4gYmUgZ2Fwcy4g QW55IGZpZWxkIGluIHRoZSBzdHJ1Y3QgdGhhdCBpcyBub3Qgc3BlY2lmaWVkIGluCisgICBgYGZp ZWxkc2BgIHdpbGwgYmUgemVyb2VkLgorCisgICBUaGUgZmllbGRzIGluIGBgZmllbGRzYGAgbmVl ZCB0byBiZSB0aGUgc2FtZSBvYmplY3RzIHRoYXQgd2VyZSB1c2VkCisgICB0byBjcmVhdGUgdGhl IHN0cnVjdC4KKworICAgYGBmaWVsZHNgYCBuZWVkIHRvIGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFz IGBgdmFsdWVzYGAuIAorICAgCisgICBJZiBgYGFycl9sZW5ndGhgYCBpcyAwLCB0aGUgYXJyYXkg cGFyYW1ldGVycyB3aWxsIGJlCisgICBpZ25vcmVkIGFuZCB6ZXJvIGluaXRpYWxpemF0aW9uIHdp bGwgYmUgdXNlZC4KKyAgIAorCisgICBDb25zdHJ1Y3RpbmcgYXJyYXlzCisgICAiIiIiIiIiIiIi IiIiIiIiIiIiCisgICAKKyAgIEZvciBhbiBhcnJheSB0eXBlLCB0aGUgYGBmaWVsZHNgYCBwYXJh bWV0ZXIgaXMgaWdub3JlZC4KKworICAgRWFjaCB2YWx1ZSBpbiBgYHZhbHVlc2BgIHNldHMgdGhl IGNvcnJlc3BvbmRpbmcgdmFsdWUgaW4gdGhlIGFycmF5LgorICAgSWYgdGhlIGFycmF5IHR5cGUg aXRzZWxmIGhhcyBtb3JlIGVsZW1lbnRzIHRoYW4gYGB2YWx1ZXNgYCwgdGhlCisgICBsZWZ0LW92 ZXIgZWxlbWVudHMgd2lsbCBiZSB6ZXJvZWQuCisKKyAgIEVhY2ggdmFsdWUgaW4gYGB2YWx1ZXNg YCBuZWVkIHRvIGJlIHRoZSBzYW1lIHVucXVhbGlmaWVkIHR5cGUgYXMgdGhlCisgICBhcnJheSB0 eXBlJ3MgZWxlbWVudHMnIHR5cGUuCisKKyAgIElmIGBgYXJyX2xlbmd0aGBgIGlzIDAsIHRoZSBh cnJheSBwYXJhbWV0ZXJzIHdpbGwgYmUKKyAgIGlnbm9yZWQgYW5kIHplcm8gaW5pdGlhbGl6YXRp b24gd2lsbCBiZSB1c2VkLgorCisgICBDb25zdHJ1Y3RpbmcgdW5pb25zCisgICAiIiIiIiIiIiIi IiIiIiIiIiIiCisKKyAgIEZvciB1bmlvbnMsIGBgYXJyX2xlbmd0aGBgIG5lZWQgdG8gYmUgMS4g VGhlcmUgbmVlZCB0byBiZSBvbmUgZmllbGQKKyAgIGluIGBgZmllbGRzYGAgYW5kIG9uZSB2YWx1 ZSBpbiBgYHZhbHVlc2BgIHdoaWNoIHNwZWNpZmllZCB3aGljaCBmaWVsZAorICAgaW4gdGhlIHVu aW9uIHRvIHNldCB0byB3aGF0IHZhbHVlLiBUaGUgcGFpciBuZWVkIHRvIGhhdmUgdGhlIHNhbWUK KyAgIHVucXVhbGlmaWVkIHR5cGUuCisKKyAgIFRoZSBmaWVsZCBpbiBgYGZpZWxkc2BgIG5lZWQg dG8gYmUgb25lIG9mIHRoZSBvYmplY3RzIHRoYXQgd2VyZSB1c2VkCisgICB0byBjcmVhdGUgdGhl IHVuaW9uLgorCisgICBSZW1hcmtzCisgICAiIiIiIiIiCisKKyAgIFRoZSBjb25zdHJ1Y3RvciBy dmFsdWUgY2FuIGJlIHVzZWQgZm9yIGFzc2lnbm1lbnQgdG8gbG9jYWxzLgorICAgSXQgY2FuIGJl IHVzZWQgdG8gaW5pdGlhbGl6ZSBnbG9iYWwgdmFyaWFibGVzIHdpdGgKKyAgIDpmdW5jOmBnY2Nf aml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlYC4gSXQgY2FuIGFsc28gYmUgdXNlZCBh cyBhCisgICB0ZW1wb3JhcnkgdmFsdWUgZm9yIGZ1bmN0aW9uIGNhbGxzIGFuZCByZXR1cm4gdmFs dWVzLgorCisgICBUaGUgY29uc3RydWN0b3IgY2FuIGNvbnRhaW4gbmVzdGVkIGNvbnN0cnVjdG9y cy4gTm90ZSB0aGF0IGEgc3RyaW5nCisgICBsaXRlcmFsIHJ2YWx1ZSBjYW4ndCBiZSB1c2VkIHRv IGNvbnN0cnVjdCBhIGNoYXIgYXJyYXkuIEl0IG5lZWQgb25lCisgICBydmFsdWUgZm9yIGVhY2gg Y2hhci4KKworICAgVGhpcyBlbnRyeXBvaW50IHdhcyBhZGRlZCBpbiA6cmVmOmBMSUJHQ0NKSVRf QUJJXzE2YDsgeW91IGNhbiB0ZXN0IGZvciBpdHMKKyAgIHByZXNlbnNlIHVzaW5nOgorCisgICAu LiBjb2RlLWJsb2NrOjogYworICAgICAjaWZkZWYgTElCR0NDSklUX0hBVkVfQ1RPUlMKKwogVmVj dG9yIGV4cHJlc3Npb25zCiAqKioqKioqKioqKioqKioqKioKIApAQCAtNjgxLDYgKzc2NiwzOCBA QCBHbG9iYWwgdmFyaWFibGVzCiAKICAgICAgICNpZmRlZiBMSUJHQ0NKSVRfSEFWRV9nY2Nfaml0 X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXIKIAorLi4gZnVuY3Rpb246OiBnY2Nfaml0X2x2YWx1ZSAq XAorCSAgICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGdjY19qaXRf bHZhbHVlICpnbG9iYWwsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ2NjX2ppdF9ydmFsdWUgKmluaXRfdmFsdWUpCisKKyAgIFNldCB0aGUgaW5pdGlhbCB2 YWx1ZSBvZiBhIGdsb2JhbCB3aXRoIGFuIHJ2YWx1ZS4KKworICAgVGhlIHJ2YWx1ZSBuZWVkIHRv IGJlIGEgY29uc3RhbnQgZXhwcmVzc2lvbiwgaS5lLiBubyBmdW5jdGlvbiBjYWxscy4KKworICAg VGhlIGdsb2JhbCBjYW4ndCBoYXZlIHRoZSBgYGtpbmRgYCA6cmVmOmBHQ0NfSklUX0dMT0JBTF9J TVBPUlRFRGAuCisKKyAgIEFzIGEgbm9uLWNvbXByZWhlbnNpdmUgZXhhbXBsZSBpdCBpcyBPSyB0 byBkbyB0aGUgZXF1aXZhbGVudCBvZjoKKworICAgLi4gY29kZS1ibG9jazo6IGMKKworICAgICAg IGludCBmb28gPSAzICogMjsgLyogcnZhbHVlIGZyb20gZ2NjX2ppdF9jb250ZXh0X25ld19iaW5h cnlfb3AgKi8KKyAgICAgICBpbnQgYXJyW10gPSB7MSwyLDMsNH07IC8qIHJ2YWx1ZSBmcm9tIGdj Y19qaXRfY29udGV4dF9uZXdfY29uc3RydWN0b3IgKi8KKyAgICAgICBpbnQgKmJhciA9ICZhcnJb Ml0gKyAxOyAvKiBydmFsdWUgZnJvbSBuZXN0ZWQgImdldCBhZGRyZXNzIiBvZiAiYXJyYXkgYWNj ZXNzIiAqLworICAgICAgIGNvbnN0IGludCBiYXogPSAzOyAvKiBydmFsdWUgZnJvbSBnY2Nfaml0 X2NvbnRleHRfcnZhbHVlX2Zyb21faW50ICovCisgICAgICAgaW50IGJveiA9IGJhejsgLyogcnZh bHVlIGZyb20gZ2NjX2ppdF9sdmFsdWVfYXNfcnZhbHVlICovCisKKyAgIFVzZSB0b2dldGhlciB3 aXRoIDpyZWY6YGdjY19qaXRfY29udGV4dF9uZXdfY29uc3RydWN0b3JgIHRvCisgICBpbml0aWFs aXplIHN0cnVjdHMsIHVuaW9ucyBhbmQgYXJyYXlzLgorCisgICBPbiBzdWNjZXNzLCByZXR1cm5z IHRoZSBgYGdsb2JhbGBgIHBhcmFtZXRlciB1bmNoYW5nZWQuIE90aGVyd2lzZSwgYGBOVUxMYGAu CisKKyAgIFRoaXMgZW50cnlwb2ludCB3YXMgYWRkZWQgaW4gOnJlZjpgTElCR0NDSklUX0FCSV8x NmA7IHlvdSBjYW4gdGVzdCBmb3IgaXRzCisgICBwcmVzZW5jZSB1c2luZzoKKworICAgLi4gY29k ZS1ibG9jazo6IGMKKworICAgICAgI2lmZGVmIExJQkdDQ0pJVF9IQVZFX0NUT1JTCisKIFdvcmtp bmcgd2l0aCBwb2ludGVycywgc3RydWN0cyBhbmQgdW5pb25zCiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9nY2Mvaml0L2ppdC1jb21tb24u aCBiL2djYy9qaXQvaml0LWNvbW1vbi5oCmluZGV4IGJjMDQ1M2ZiYTA1Li43YzkzNzQ3ODc5MyAx MDA2NDQKLS0tIGEvZ2NjL2ppdC9qaXQtY29tbW9uLmgKKysrIGIvZ2NjL2ppdC9qaXQtY29tbW9u LmgKQEAgLTIwMyw2ICsyMDMsMTUgQEAgZW51bSBpbm5lcl9ib29sX29wdGlvbgogICBOVU1fSU5O RVJfQk9PTF9PUFRJT05TCiB9OwogCisvKiBGbGFncyBmb3IgZ2xvYmFsIHZhcmlhYmxlcyBjbGFz cy4gRm9yIHdoZW4gdGhlIHBsYXliYWNrIG9mIHRoZQorICAgZ2xvYmFsIG5lZWQgdG8ga25vdyB3 aGF0IHdpbGwgaGFwcGVuIHRvIGl0IGxhdGVyLiAqLworZW51bSBnbG9iYWxfdmFyX2ZsYWdzCit7 CisgIEdMT0JBTF9WQVJfRkxBR1NfTk9ORSA9IDAsCisgIEdMT0JBTF9WQVJfRkxBR1NfV0lMTF9C RV9SVkFMX0lOSVQgPSAxLAorICBHTE9CQUxfVkFSX0ZMQUdTX1dJTExfQkVfQkxPQl9JTklUID0g MiwKK307CisKIH0gLy8gbmFtZXNwYWNlIGdjYzo6aml0CiAKIH0gLy8gbmFtZXNwYWNlIGdjYwpk aWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcGxheWJhY2suYyBiL2djYy9qaXQvaml0LXBsYXliYWNr LmMKaW5kZXggMWY0ZGMzMWExYzEuLjcxZjBlNzI4M2JhIDEwMDY0NAotLS0gYS9nY2Mvaml0L2pp dC1wbGF5YmFjay5jCisrKyBiL2djYy9qaXQvaml0LXBsYXliYWNrLmMKQEAgLTEwNyw2ICsxMDcs NDMgQEAgbmFtZXNwYWNlIGppdCB7CiAgUGxheWJhY2suCiAgKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorLyog Rm9sZCBhIHJlYWRvbmx5IG5vbi12b2xhdGlsZSB2YXJpYWJsZSB3aXRoIGFuIGluaXRpYWwgY29u c3RhbnQgdmFsdWUsCisgICB0byB0aGF0IHZhbHVlLgorCisgICBPdGhlcndpc2UgcmV0dXJuIHRo ZSBhcmd1bWVudCB1bmNoYW5nZWQuCisKKyAgIFRoaXMgZm9sZCBpcyBuZWVkZWQgZm9yIHNldHRp bmcgYSB2YXJpYWJsZSdzIERFQ0xfSU5JVElBTCB0byB0aGUgdmFsdWUKKyAgIG9mIGEgY29uc3Qg dmFyaWFibGUuIFRoZSBjLWZyb250ZW5kIGRvZXMgdGhpcyBpbiBpdHMgb3duIHNwZWNpYWwKKyAg IGZvbGQoKSwgc28gd2UgbGlmdCB0aGlzIHBhcnQgb3V0IGFuZCBkbyBpdCBleHBsaWNpdGx5IHdo ZXJlIHRoZXJlIGlzIGEKKyAgIHBvdGVudGlhbCBmb3IgdmFyaWFibGVzIHRvIGJlIHVzZWQgYXMg cnZhbHVlcy4gKi8KK3N0YXRpYyB0cmVlCitmb2xkX2NvbnN0X3ZhciAodHJlZSBub2RlKQorewor ICAvKiBTZWUgY19mdWxseV9mb2xkX2ludGVybmFsIGluIGMtZm9sZC5jIGFuZCBkZWNsX2NvbnN0 YW50X3ZhbHVlXzEKKyAgICAgaW4gYy10eXBlY2suYyAqLworICBpZiAoVkFSX1AgKG5vZGUpCisg ICAgICAmJiBUUkVFX1JFQURPTkxZIChub2RlKQorICAgICAgJiYgIVRSRUVfVEhJU19WT0xBVElM RSAobm9kZSkKKyAgICAgICYmIERFQ0xfSU5JVElBTCAobm9kZSkgIT0gTlVMTF9UUkVFCisgICAg ICAvKiAiVGhpcyBpcyBpbnZhbGlkIGlmIGluaXRpYWwgdmFsdWUgaXMgbm90IGNvbnN0YW50Lgor CSAgSWYgaXQgaGFzIGVpdGhlciBhIGZ1bmN0aW9uIGNhbGwsIGEgbWVtb3J5IHJlZmVyZW5jZSwK KwkgIG9yIGEgdmFyaWFibGUsIHRoZW4gcmUtZXZhbHVhdGluZyBpdCBjb3VsZCBnaXZlIGRpZmZl cmVudAorCSAgcmVzdWx0cy4iICovCisgICAgICAmJiBUUkVFX0NPTlNUQU5UIChERUNMX0lOSVRJ QUwgKG5vZGUpKSkKKyAgICB7CisgICAgICB0cmVlIHJldCA9IERFQ0xfSU5JVElBTCAobm9kZSk7 CisgICAgICAvKiAiQXZvaWQgdW53YW50ZWQgdHJlZSBzaGFyaW5nIGJldHdlZW4gdGhlIGluaXRp YWxpemVyIGFuZCBjdXJyZW50CisJICBmdW5jdGlvbidzIGJvZHkgd2hlcmUgdGhlIHRyZWUgY2Fu IGJlIG1vZGlmaWVkIGUuZy4gYnkgdGhlCisJICBnaW1wbGlmaWVyLiIgICovCisgICAgICBpZiAo VFJFRV9TVEFUSUMgKG5vZGUpKQorCXJldCA9IHVuc2hhcmVfZXhwciAocmV0KTsKKworICAgICAg cmV0dXJuIHJldDsKKyAgICB9CisKKyAgcmV0dXJuIG5vZGU7Cit9CisKIC8qIEJ1aWxkIGEgU1RS SU5HX0NTVCB0cmVlIGZvciBTVFIsIG9yIHJldHVybiBOVUxMIGlmIGl0IGlzIE5VTEwuCiAgICBU aGUgVFJFRV9UWVBFIGlzIG5vdCBpbml0aWFsaXplZC4gICovCiAKQEAgLTU0NywxNSArNTg0LDI4 IEBAIHBsYXliYWNrOjpjb250ZXh0OjoKIGdsb2JhbF9uZXdfZGVjbCAobG9jYXRpb24gKmxvYywK IAkJIGVudW0gZ2NjX2ppdF9nbG9iYWxfa2luZCBraW5kLAogCQkgdHlwZSAqdHlwZSwKLQkJIGNv bnN0IGNoYXIgKm5hbWUpCisJCSBjb25zdCBjaGFyICpuYW1lLAorCQkgZW51bSBnbG9iYWxfdmFy X2ZsYWdzIGZsYWdzKQogewogICBnY2NfYXNzZXJ0ICh0eXBlKTsKICAgZ2NjX2Fzc2VydCAobmFt ZSk7CisKKyAgdHJlZSB0eXBlX3RyZWUgPSB0eXBlLT5hc190cmVlICgpOworCiAgIHRyZWUgaW5u ZXIgPSBidWlsZF9kZWNsIChVTktOT1dOX0xPQ0FUSU9OLCBWQVJfREVDTCwKIAkJCSAgIGdldF9p ZGVudGlmaWVyIChuYW1lKSwKLQkJCSAgIHR5cGUtPmFzX3RyZWUgKCkpOworCQkJICAgdHlwZV90 cmVlKTsKKwogICBUUkVFX1BVQkxJQyAoaW5uZXIpID0gKGtpbmQgIT0gR0NDX0pJVF9HTE9CQUxf SU5URVJOQUwpOwotICBERUNMX0NPTU1PTiAoaW5uZXIpID0gMTsKKworCisgIGludCB3aWxsX2Jl X2luaXQgPSBmbGFncyAmIChHTE9CQUxfVkFSX0ZMQUdTX1dJTExfQkVfUlZBTF9JTklUIHwKKwkJ CSAgICAgIEdMT0JBTF9WQVJfRkxBR1NfV0lMTF9CRV9CTE9CX0lOSVQpOworCisgIC8qIEEgVkFS X0RFQ0wgd2l0aCBERUNMX0lOSVRJQUwgd2lsbCBub3QgZW5kIHVwIGluIC5jb21tb24gc2VjdGlv biAqLworICBpZiAoIXdpbGxfYmVfaW5pdCkKKyAgICBERUNMX0NPTU1PTiAoaW5uZXIpID0gMTsK KwogICBzd2l0Y2ggKGtpbmQpCiAgICAgewogICAgIGRlZmF1bHQ6CkBAIC01NzQsNiArNjI0LDkg QEAgZ2xvYmFsX25ld19kZWNsIChsb2NhdGlvbiAqbG9jLAogICAgICAgYnJlYWs7CiAgICAgfQog CisgIGlmIChUWVBFX1JFQURPTkxZICh0eXBlX3RyZWUpKQorICAgIFRSRUVfUkVBRE9OTFkoaW5u ZXIpID0gMTsKKwogICBpZiAobG9jKQogICAgIHNldF90cmVlX2xvY2F0aW9uIChpbm5lciwgbG9j KTsKIApAQCAtNTk4LDEzICs2NTEsMTY1IEBAIHBsYXliYWNrOjpjb250ZXh0OjoKIG5ld19nbG9i YWwgKGxvY2F0aW9uICpsb2MsCiAJICAgIGVudW0gZ2NjX2ppdF9nbG9iYWxfa2luZCBraW5kLAog CSAgICB0eXBlICp0eXBlLAotCSAgICBjb25zdCBjaGFyICpuYW1lKQorCSAgICBjb25zdCBjaGFy ICpuYW1lLAorCSAgICBlbnVtIGdsb2JhbF92YXJfZmxhZ3MgZmxhZ3MpCiB7Ci0gIHRyZWUgaW5u ZXIgPSBnbG9iYWxfbmV3X2RlY2wgKGxvYywga2luZCwgdHlwZSwgbmFtZSk7CisgIHRyZWUgaW5u ZXIgPQorICAgIGdsb2JhbF9uZXdfZGVjbCAobG9jLCBraW5kLCB0eXBlLCBuYW1lLCBmbGFncyk7 CiAKICAgcmV0dXJuIGdsb2JhbF9maW5hbGl6ZV9sdmFsdWUgKGlubmVyKTsKIH0KIAorLyogSGVs cGVyIGZ1bmN0aW9uIGZvciB1c2FnZSB3aXRoIHdhbGtfdHJlZSBpbiBnbG9iYWxfc2V0X2luaXRf cnZhbHVlLgorICAgSWYgdGhlIHRyZWUgY29udGFpbnMgYSBERUNMX1ZBUiB3aXRob3V0IERFQ0xf SU5JVElBTCBzZXQsIGl0IHdpbGwgYmUKKyAgIHJldHVybmVkLgorCisgICBPdGhlcndpc2UsIHJl dHVybnMgTlVMTF9UUkVFLiAqLworc3RhdGljIHRyZWUKK3ZhbGlkYXRlX3Zhcl9oYXNfaW5pdCAo dHJlZSAqdHAsIGludCAqd2Fsa19zdWJ0cmVlLCB2b2lkICpkYXRhKQoreworICAodm9pZCkgZGF0 YTsKKyAgKHZvaWQpIHdhbGtfc3VidHJlZTsKKworICBpZiAoVkFSX1AgKCp0cCkgJiYgREVDTF9J TklUSUFMICgqdHApID09IE5VTExfVFJFRSkKKyAgICByZXR1cm4gKnRwOworICByZXR1cm4gTlVM TF9UUkVFOworfQorCit2b2lkCitwbGF5YmFjazo6Y29udGV4dDo6CitnbG9iYWxfc2V0X2luaXRf cnZhbHVlIChsdmFsdWUqIHZhcmlhYmxlLAorCQkJcnZhbHVlKiBpbml0KQoreworICB0cmVlIGlu bmVyID0gdmFyaWFibGUtPmFzX3RyZWUgKCk7CisKKyAgLyogV2UgbmVlZCB0byBmb2xkIGFsbCBl eHByZXNzaW9ucyBhcyBtdWNoIGFzIHBvc3NpYmxlLiBUaGUgY29kZQorICAgICBmb3IgYSBERUNM X0lOSVRJQUwgb25seSBoYW5kbGVzIHNvbWUgb3BlcmF0aW9ucywKKyAgICAgZXRjIGFkZGl0aW9u LCBtaW51cywgJ2FkZHJlc3Mgb2YnLiBTZWUgb3V0cHV0X2FkZHJlc3NlZF9jb25zdGFudHMoKQor ICAgICBpbiB2YXJhc20uYyAgKi8KKyAgdHJlZSBpbml0X3RyZWUgPSBpbml0LT5hc190cmVlICgp OworICB0cmVlIGZvbGRlZCA9IGZvbGRfY29uc3RfdmFyIChpbml0X3RyZWUpOworCisgIC8qIEZp bmQgYW55IFZBUl9ERUNMIHdpdGhvdXQgREVDTF9JTklUSUFMIHNldC4KKyAgICAgQXNzdW1lIHRo YXQgYW55IC4uLl9DU1QgaXMgT0sgdG8gc2F2ZSBzb21lIENQVS4KKyAgICAgSGFuZGxlIENPTlNU UlVDVE9ScyBleHBsaWNpdGx5IHRvIGF2b2lkIHRyZWUgd2Fsa3MKKyAgICAgb24gYXJyYXkgaW5p dHMgY29uc2lzdGluZyBvZiBvbmx5IC4uLl9DU1RzLiAqLworICB0cmVlIHNpbm5lciA9IE5VTExf VFJFRTsKKworICBpZiAoVFJFRV9DT0RFIChmb2xkZWQpID09IENPTlNUUlVDVE9SKQorICAgIHsK KyAgICAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgaWR4OworICAgICAgdHJlZSBlbHQ7CisgICAg ICBGT1JfRUFDSF9DT05TVFJVQ1RPUl9WQUxVRSAoQ09OU1RSVUNUT1JfRUxUUyAoZm9sZGVkKSwg aWR4LCBlbHQpCisJeworCSAgaWYgKCFDT05TVEFOVF9DTEFTU19QIChlbHQpKQorCSAgICBzaW5u ZXIgPSB3YWxrX3RyZWUgKCZlbHQsIHZhbGlkYXRlX3Zhcl9oYXNfaW5pdCwgTlVMTCwgTlVMTCk7 CisJICBpZiAoc2lubmVyICE9IE5VTExfVFJFRSkKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKyAg ZWxzZSBpZiAoIUNPTlNUQU5UX0NMQVNTX1AgKGZvbGRlZCkpCisgICAgc2lubmVyID0gd2Fsa190 cmVlICgmZm9sZGVkLCB2YWxpZGF0ZV92YXJfaGFzX2luaXQsIE5VTEwsIE5VTEwpOworCisgIGlm IChzaW5uZXIgIT0gTlVMTF9UUkVFKQorICAgIHsKKyAgICAgIHRyZWUgbmFtZSA9IERFQ0xfTkFN RSAoaW5uZXIpOworICAgICAgdHJlZSBydm5hbWUgPSBERUNMX05BTUUgKHNpbm5lcik7CisgICAg ICBhZGRfZXJyb3IgKE5VTEwsCisJCSAiY2FuJ3QgaW5pdGlhbGl6ZSAlcyB3aXRoICVzIHNpbmNl IGl0IGhhcyBubyAiCisJCSAiaW5pdGlhbCB2YWx1ZSBzZXQiLAorCQkgbmFtZSAhPSBOVUxMX1RS RUUgPyBJREVOVElGSUVSX1BPSU5URVIgKG5hbWUpIDogTlVMTCwKKwkJIHJ2bmFtZSAhPSBOVUxM X1RSRUUgPyBJREVOVElGSUVSX1BPSU5URVIgKHJ2bmFtZSkgOiBOVUxMKTsKKyAgICAgIHJldHVy bjsKKyAgICB9CisKKyAgaWYgKCFUUkVFX0NPTlNUQU5UIChmb2xkZWQpKQorICAgIHsKKyAgICAg IHRyZWUgbmFtZSA9IERFQ0xfTkFNRSAoaW5uZXIpOworCisgICAgICBhZGRfZXJyb3IgKE5VTEws CisJCSAiaW5pdCBydmFsdWUgZm9yIHRoZSBnbG9iYWwgdmFyaWFibGUgJXMgZG9lcyBub3Qgc2Vl bSIKKwkJICIgdG8gYmUgY29uc3RhbnQiLAorCQkgbmFtZSAhPSBOVUxMX1RSRUUgPyBJREVOVElG SUVSX1BPSU5URVIgKG5hbWUpIDogTlVMTCk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIERF Q0xfSU5JVElBTCAoaW5uZXIpID0gZm9sZGVkOworfQorCitwbGF5YmFjazo6cnZhbHVlICoKK3Bs YXliYWNrOjpjb250ZXh0OjoKK25ld19jdG9yIChsb2NhdGlvbiAqbG9jLAorCSAgdHlwZSAqdHlw ZSwKKwkgIGNvbnN0IGF1dG9fdmVjPGZpZWxkKj4gKmZpZWxkcywKKwkgIGNvbnN0IGF1dG9fdmVj PHJ2YWx1ZSo+ICpydmFsdWVzKQoreworICB0cmVlIHR5cGVfdHJlZSA9IHR5cGUtPmFzX3RyZWUg KCk7CisKKyAgLyogSGFuZGxlIGVtcHR5IGN0b3JzIGZpcnN0LiBJLmUuIHNldCBldmVyeXRoaW5n IHRvIDAgKi8KKyAgaWYgKHJ2YWx1ZXMtPmxlbmd0aCAoKSA9PSAwKQorICAgIHJldHVybiBuZXcg cnZhbHVlICh0aGlzLCBidWlsZF9jb25zdHJ1Y3RvciAodHlwZV90cmVlLCBOVUxMKSk7CisKKyAg LyogSGFuZGxlIGFycmF5cyAoYW5kIHJldHVybikgKi8KKyAgaWYgKFRSRUVfQ09ERSAodHlwZV90 cmVlKSA9PSBBUlJBWV9UWVBFKQorICAgIHsKKyAgICAgIGludCBuID0gcnZhbHVlcy0+bGVuZ3Ro ICgpOworICAgICAgLyogVGhlIHZlYyBmb3IgdGhlIGNvbnN0cnVjdG9yIG5vZGUgKi8KKyAgICAg IHZlYzxjb25zdHJ1Y3Rvcl9lbHQsIHZhX2djPiAqdiA9IE5VTEw7CisgICAgICB2ZWNfYWxsb2Mo diwgbik7CisKKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQorCXsKKwkgIHJ2YWx1 ZSAqcnYgPSAoKnJ2YWx1ZXMpW2ldOworCSAgLyogbnVsbCBydmFsdWVzIGluZGljYXRlIHRoYXQg dGhlIGVsZW1lbnQgc2hvdWxkIGJlIHplcm9lZCAqLworCSAgaWYgKHJ2KQorCSAgICBDT05TVFJV Q1RPUl9BUFBFTkRfRUxUKHYsCisJCQkJICAgYnVpbGRfaW50X2NzdCAoc2l6ZV90eXBlX25vZGUs IGkpLAorCQkJCSAgIHJ2LT5hc190cmVlICgpKTsKKwkgIGVsc2UKKwkgICAgQ09OU1RSVUNUT1Jf QVBQRU5EX0VMVCh2LAorCQkJCSAgIGJ1aWxkX2ludF9jc3QgKHNpemVfdHlwZV9ub2RlLCBpKSwK KwkJCQkgICBidWlsZF96ZXJvX2NzdCAoVFJFRV9UWVBFICh0eXBlX3RyZWUpKSk7CisJfQorCisg ICAgICB0cmVlIGN0b3IgPSBidWlsZF9jb25zdHJ1Y3RvciAodHlwZV90cmVlLCB2KTsKKworICAg ICAgaWYgKGxvYykKKwlzZXRfdHJlZV9sb2NhdGlvbiAoY3RvciwgbG9jKTsKKworICAgICAgcmV0 dXJuIG5ldyBydmFsdWUodGhpcywgY3Rvcik7CisgICAgfQorCisgIC8qIEhhbmRsZSBzdHJ1Y3Rz IGFuZCB1bmlvbnMgKi8KKyAgaW50IG4gPSBmaWVsZHMtPmxlbmd0aCAoKTsKKworICAvKiBUaGUg dmVjIGZvciB0aGUgY29uc3RydWN0b3Igbm9kZSAqLworICB2ZWM8Y29uc3RydWN0b3JfZWx0LCB2 YV9nYz4gKnYgPSBOVUxMOworICB2ZWNfYWxsb2Modiwgbik7CisKKyAgLyogSXRlcmF0ZSBvdmVy IHRoZSBmaWVsZHMsIGJ1aWxkaW5nIGluaXRpYWxpemF0aW9ucy4gKi8KKyAgZm9yIChpbnQgaSA9 IDA7aSA8IG47IGkrKykKKyAgICB7CisgICAgICB0cmVlIGZpZWxkID0gKCpmaWVsZHMpW2ldLT5h c190cmVlKCk7CisgICAgICBydmFsdWUgKnJ2ID0gKCpydmFsdWVzKVtpXTsKKyAgICAgIC8qIElm IHRoZSB2YWx1ZSBpcyBOVUxMLCBpdCBtZWFucyB3ZSBzaG91bGQgemVybyB0aGUgZmllbGQgKi8K KyAgICAgIGlmIChydikKKwlDT05TVFJVQ1RPUl9BUFBFTkRfRUxUKHYsIGZpZWxkLCBydi0+YXNf dHJlZSAoKSk7CisgICAgICBlbHNlCisJeworCSAgdHJlZSB6ZXJvX2NzdCA9IGJ1aWxkX3plcm9f Y3N0IChUUkVFX1RZUEUgKGZpZWxkKSk7CisJICBDT05TVFJVQ1RPUl9BUFBFTkRfRUxUKHYsIGZp ZWxkLCB6ZXJvX2NzdCk7CisJfQorICAgIH0KKworICB0cmVlIGN0b3IgPSBidWlsZF9jb25zdHJ1 Y3RvciAodHlwZV90cmVlLCB2KTsKKworICBpZiAobG9jKQorICAgIHNldF90cmVlX2xvY2F0aW9u IChjdG9yLCBsb2MpOworCisgIHJldHVybiBuZXcgcnZhbHVlKHRoaXMsIGJ1aWxkX2NvbnN0cnVj dG9yICh0eXBlX3RyZWUsIHYpKTsKK30KKwogLyogRmlsbCAnY29uc3RydWN0b3JfZWxlbWVudHMn IHdpdGggdGhlIG1lbW9yeSBjb250ZW50IG9mCiAgICAnaW5pdGlhbGl6ZXInLiAgRWFjaCBlbGVt ZW50IG9mIHRoZSBpbml0aWFsaXplciBpcyBvZiB0aGUgc2l6ZSBvZgogICAgdHlwZSBULiAgSW4g dXNlIGJ5IG5ld19nbG9iYWxfaW5pdGlhbGl6ZWQuKi8KQEAgLTYzOCw5ICs4NDMsMTAgQEAgbmV3 X2dsb2JhbF9pbml0aWFsaXplZCAobG9jYXRpb24gKmxvYywKICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCBlbGVtZW50X3NpemUsCiAJCQlzaXplX3QgaW5pdGlhbGl6ZXJfbnVtX2VsZW0s CiAJCQljb25zdCB2b2lkICppbml0aWFsaXplciwKLQkJCWNvbnN0IGNoYXIgKm5hbWUpCisJCQlj b25zdCBjaGFyICpuYW1lLAorCQkJZW51bSBnbG9iYWxfdmFyX2ZsYWdzIGZsYWdzKQogewotICB0 cmVlIGlubmVyID0gZ2xvYmFsX25ld19kZWNsIChsb2MsIGtpbmQsIHR5cGUsIG5hbWUpOworICB0 cmVlIGlubmVyID0gZ2xvYmFsX25ld19kZWNsIChsb2MsIGtpbmQsIHR5cGUsIG5hbWUsIGZsYWdz KTsKIAogICB2ZWM8Y29uc3RydWN0b3JfZWx0LCB2YV9nYz4gKmNvbnN0cnVjdG9yX2VsZW1lbnRz ID0gTlVMTDsKIApAQCAtMTEwOSw3ICsxMzE1LDggQEAgYXNfdHJ1dGhfdmFsdWUgKHRyZWUgZXhw ciwgbG9jYXRpb24gKmxvYykKICAgaWYgKGxvYykKICAgICBzZXRfdHJlZV9sb2NhdGlvbiAodHlw ZWRfemVybywgbG9jKTsKIAotICBleHByID0gYnVpbGQyIChORV9FWFBSLCBpbnRlZ2VyX3R5cGVf bm9kZSwgZXhwciwgdHlwZWRfemVybyk7CisgIGV4cHIgPSBmb2xkX2J1aWxkMl9sb2MgKFVOS05P V05fTE9DQVRJT04sCisgICAgTkVfRVhQUiwgaW50ZWdlcl90eXBlX25vZGUsIGV4cHIsIHR5cGVk X3plcm8pOwogICBpZiAobG9jKQogICAgIHNldF90cmVlX2xvY2F0aW9uIChleHByLCBsb2MpOwog CkBAIC0xMTQ1LDYgKzEzNTIsOCBAQCBuZXdfdW5hcnlfb3AgKGxvY2F0aW9uICpsb2MsCiAgIGdj Y19hc3NlcnQgKGEpOwogCiAgIHRyZWUgbm9kZSA9IGEtPmFzX3RyZWUgKCk7CisgIG5vZGUgPSBm b2xkX2NvbnN0X3ZhciAobm9kZSk7CisKICAgdHJlZSBpbm5lcl9yZXN1bHQgPSBOVUxMOwogCiAg IHN3aXRjaCAob3ApCkBAIC0xMTc2LDYgKzEzODUsMTAgQEAgbmV3X3VuYXJ5X29wIChsb2NhdGlv biAqbG9jLAogICBpbm5lcl9yZXN1bHQgPSBidWlsZDEgKGlubmVyX29wLAogCQkJIHJlc3VsdF90 eXBlLT5hc190cmVlICgpLAogCQkJIG5vZGUpOworCisgIC8qIFRyeSB0byBmb2xkICovCisgIGlu bmVyX3Jlc3VsdCA9IGZvbGQgKGlubmVyX3Jlc3VsdCk7CisKICAgaWYgKGxvYykKICAgICBzZXRf dHJlZV9sb2NhdGlvbiAoaW5uZXJfcmVzdWx0LCBsb2MpOwogCkBAIC0xMjAwLDcgKzE0MTMsMTAg QEAgbmV3X2JpbmFyeV9vcCAobG9jYXRpb24gKmxvYywKICAgZ2NjX2Fzc2VydCAoYik7CiAKICAg dHJlZSBub2RlX2EgPSBhLT5hc190cmVlICgpOworICBub2RlX2EgPSBmb2xkX2NvbnN0X3ZhciAo bm9kZV9hKTsKKwogICB0cmVlIG5vZGVfYiA9IGItPmFzX3RyZWUgKCk7CisgIG5vZGVfYiA9IGZv bGRfY29uc3RfdmFyIChub2RlX2IpOwogCiAgIHN3aXRjaCAob3ApCiAgICAgewpAQCAtMTI3NSw2 ICsxNDkxLDEwIEBAIG5ld19iaW5hcnlfb3AgKGxvY2F0aW9uICpsb2MsCiAJCQkgICAgcmVzdWx0 X3R5cGUtPmFzX3RyZWUgKCksCiAJCQkgICAgbm9kZV9hLAogCQkJICAgIG5vZGVfYik7CisKKyAg LyogVHJ5IHRvIGZvbGQgdGhlIGV4cHJlc3Npb24gKi8KKyAgaW5uZXJfZXhwciA9IGZvbGQgKGlu bmVyX2V4cHIpOworCiAgIGlmIChsb2MpCiAgICAgc2V0X3RyZWVfbG9jYXRpb24gKGlubmVyX2V4 cHIsIGxvYyk7CiAKQEAgLTEzMjIsMTAgKzE1NDIsMTkgQEAgbmV3X2NvbXBhcmlzb24gKGxvY2F0 aW9uICpsb2MsCiAgICAgICBicmVhazsKICAgICB9CiAKKyAgdHJlZSBub2RlX2EgPSBhLT5hc190 cmVlICgpOworICBub2RlX2EgPSBmb2xkX2NvbnN0X3ZhciAobm9kZV9hKTsKKyAgdHJlZSBub2Rl X2IgPSBiLT5hc190cmVlICgpOworICBub2RlX2IgPSBmb2xkX2NvbnN0X3ZhciAobm9kZV9iKTsK KwogICB0cmVlIGlubmVyX2V4cHIgPSBidWlsZDIgKGlubmVyX29wLAogCQkJICAgIGJvb2xlYW5f dHlwZV9ub2RlLAotCQkJICAgIGEtPmFzX3RyZWUgKCksCi0JCQkgICAgYi0+YXNfdHJlZSAoKSk7 CisJCQkgICAgbm9kZV9hLAorCQkJICAgIG5vZGVfYik7CisKKyAgLyogVHJ5IHRvIGZvbGQgKi8K KyAgaW5uZXJfZXhwciA9IGZvbGQgKGlubmVyX2V4cHIpOworCiAgIGlmIChsb2MpCiAgICAgc2V0 X3RyZWVfbG9jYXRpb24gKGlubmVyX2V4cHIsIGxvYyk7CiAgIHJldHVybiBuZXcgcnZhbHVlICh0 aGlzLCBpbm5lcl9leHByKTsKQEAgLTE0MjUsNiArMTY1NCw4IEBAIHBsYXliYWNrOjpjb250ZXh0 OjpidWlsZF9jYXN0IChwbGF5YmFjazo6bG9jYXRpb24gKmxvYywKIAogICAgICBPbmx5IHNvbWUg a2luZHMgb2YgY2FzdCBhcmUgY3VycmVudGx5IHN1cHBvcnRlZCBoZXJlLiAgKi8KICAgdHJlZSB0 X2V4cHIgPSBleHByLT5hc190cmVlICgpOworICB0X2V4cHIgPSBmb2xkX2NvbnN0X3ZhciAodF9l eHByKTsKKwogICB0cmVlIHRfZHN0X3R5cGUgPSB0eXBlXy0+YXNfdHJlZSAoKTsKICAgdHJlZSB0 X3JldCA9IE5VTEw7CiAgIHRfcmV0ID0gdGFyZ2V0bS5jb252ZXJ0X3RvX3R5cGUgKHRfZHN0X3R5 cGUsIHRfZXhwcik7CkBAIC0xNTA3LDcgKzE3MzgsMTAgQEAgbmV3X2FycmF5X2FjY2VzcyAobG9j YXRpb24gKmxvYywKICAgICAgICBjLWZhbWlseS9jLWNvbW1vbi5jOiBwb2ludGVyX2ludF9zdW0K ICAgKi8KICAgdHJlZSB0X3B0ciA9IHB0ci0+YXNfdHJlZSAoKTsKKyAgdF9wdHIgPSBmb2xkX2Nv bnN0X3ZhciAodF9wdHIpOwogICB0cmVlIHRfaW5kZXggPSBpbmRleC0+YXNfdHJlZSAoKTsKKyAg dF9pbmRleCA9IGZvbGRfY29uc3RfdmFyICh0X2luZGV4KTsKKwogICB0cmVlIHRfdHlwZV9wdHIg PSBUUkVFX1RZUEUgKHRfcHRyKTsKICAgdHJlZSB0X3R5cGVfc3Rhcl9wdHIgPSBUUkVFX1RZUEUg KHRfdHlwZV9wdHIpOwogCkBAIC0xNTE1LDYgKzE3NDksNyBAQCBuZXdfYXJyYXlfYWNjZXNzIChs b2NhdGlvbiAqbG9jLAogICAgIHsKICAgICAgIHRyZWUgdF9yZXN1bHQgPSBidWlsZDQgKEFSUkFZ X1JFRiwgdF90eXBlX3N0YXJfcHRyLCB0X3B0ciwgdF9pbmRleCwKIAkJCSAgICAgIE5VTExfVFJF RSwgTlVMTF9UUkVFKTsKKyAgICAgIHRfcmVzdWx0ID0gZm9sZCAodF9yZXN1bHQpOwogICAgICAg aWYgKGxvYykKIAlzZXRfdHJlZV9sb2NhdGlvbiAodF9yZXN1bHQsIGxvYyk7CiAgICAgICByZXR1 cm4gbmV3IGx2YWx1ZSAodGhpcywgdF9yZXN1bHQpOwpAQCAtMTUyNCwxMiArMTc1OSwxNCBAQCBu ZXdfYXJyYXlfYWNjZXNzIChsb2NhdGlvbiAqbG9jLAogICAgICAgLyogQ29udmVydCBpbmRleCB0 byBhbiBvZmZzZXQgaW4gYnl0ZXMuICAqLwogICAgICAgdHJlZSB0X3NpemVvZiA9IHNpemVfaW5f Ynl0ZXMgKHRfdHlwZV9zdGFyX3B0cik7CiAgICAgICB0X2luZGV4ID0gZm9sZF9idWlsZDEgKENP TlZFUlRfRVhQUiwgc2l6ZXR5cGUsIHRfaW5kZXgpOwotICAgICAgdHJlZSB0X29mZnNldCA9IGJ1 aWxkMiAoTVVMVF9FWFBSLCBzaXpldHlwZSwgdF9pbmRleCwgdF9zaXplb2YpOworICAgICAgdHJl ZSB0X29mZnNldCA9IGZvbGRfYnVpbGQyX2xvYyAoVU5LTk9XTl9MT0NBVElPTiwKKwlNVUxUX0VY UFIsIHNpemV0eXBlLCB0X2luZGV4LCB0X3NpemVvZik7CiAKICAgICAgIC8qIExvY2F0ZSAocHRy ICsgb2Zmc2V0KS4gICovCi0gICAgICB0cmVlIHRfYWRkcmVzcyA9IGJ1aWxkMiAoUE9JTlRFUl9Q TFVTX0VYUFIsIHRfdHlwZV9wdHIsIHRfcHRyLCB0X29mZnNldCk7CisgICAgICB0cmVlIHRfYWRk cmVzcyA9IGZvbGRfYnVpbGQyX2xvYyAoVU5LTk9XTl9MT0NBVElPTiwKKwlQT0lOVEVSX1BMVVNf RVhQUiwgdF90eXBlX3B0ciwgdF9wdHIsIHRfb2Zmc2V0KTsKIAotICAgICAgdHJlZSB0X2luZGly ZWN0aW9uID0gYnVpbGQxIChJTkRJUkVDVF9SRUYsIHRfdHlwZV9zdGFyX3B0ciwgdF9hZGRyZXNz KTsKKyAgICAgIHRyZWUgdF9pbmRpcmVjdGlvbiA9IGZvbGRfYnVpbGQxIChJTkRJUkVDVF9SRUYs IHRfdHlwZV9zdGFyX3B0ciwgdF9hZGRyZXNzKTsKICAgICAgIGlmIChsb2MpCiAJewogCSAgc2V0 X3RyZWVfbG9jYXRpb24gKHRfc2l6ZW9mLCBsb2MpOwpAQCAtMTU3Nyw3ICsxODE0LDcgQEAgbmV3 X2RlcmVmZXJlbmNlICh0cmVlIHB0ciwKICAgZ2NjX2Fzc2VydCAocHRyKTsKIAogICB0cmVlIHR5 cGUgPSBUUkVFX1RZUEUgKFRSRUVfVFlQRShwdHIpKTsKLSAgdHJlZSBkYXR1bSA9IGJ1aWxkMSAo SU5ESVJFQ1RfUkVGLCB0eXBlLCBwdHIpOworICB0cmVlIGRhdHVtID0gZm9sZF9idWlsZDEgKElO RElSRUNUX1JFRiwgdHlwZSwgcHRyKTsKICAgaWYgKGxvYykKICAgICBzZXRfdHJlZV9sb2NhdGlv biAoZGF0dW0sIGxvYyk7CiAgIHJldHVybiBkYXR1bTsKQEAgLTE3MzEsNyArMTk2OCw3IEBAIGdl dF9hZGRyZXNzIChsb2NhdGlvbiAqbG9jKQogICB0cmVlIHRfbHZhbHVlID0gYXNfdHJlZSAoKTsK ICAgdHJlZSB0X3RoaXN0eXBlID0gVFJFRV9UWVBFICh0X2x2YWx1ZSk7CiAgIHRyZWUgdF9wdHJ0 eXBlID0gYnVpbGRfcG9pbnRlcl90eXBlICh0X3RoaXN0eXBlKTsKLSAgdHJlZSBwdHIgPSBidWls ZDEgKEFERFJfRVhQUiwgdF9wdHJ0eXBlLCB0X2x2YWx1ZSk7CisgIHRyZWUgcHRyID0gZm9sZF9i dWlsZDEgKEFERFJfRVhQUiwgdF9wdHJ0eXBlLCB0X2x2YWx1ZSk7CiAgIGlmIChsb2MpCiAgICAg Z2V0X2NvbnRleHQgKCktPnNldF90cmVlX2xvY2F0aW9uIChwdHIsIGxvYyk7CiAgIGlmIChtYXJr X2FkZHJlc3NhYmxlIChsb2MpKQpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcGxheWJhY2suaCBi L2djYy9qaXQvaml0LXBsYXliYWNrLmgKaW5kZXggZjY3MGM5ZTgxZGYuLmQ0NDVkN2NjYjk1IDEw MDY0NAotLS0gYS9nY2Mvaml0L2ppdC1wbGF5YmFjay5oCisrKyBiL2djYy9qaXQvaml0LXBsYXli YWNrLmgKQEAgLTEwOSw3ICsxMDksOCBAQCBwdWJsaWM6CiAgIG5ld19nbG9iYWwgKGxvY2F0aW9u ICpsb2MsCiAJICAgICAgZW51bSBnY2Nfaml0X2dsb2JhbF9raW5kIGtpbmQsCiAJICAgICAgdHlw ZSAqdHlwZSwKLQkgICAgICBjb25zdCBjaGFyICpuYW1lKTsKKwkgICAgICBjb25zdCBjaGFyICpu YW1lLAorCSAgICAgIGVudW0gZ2xvYmFsX3Zhcl9mbGFncyBmbGFncyk7CiAKICAgbHZhbHVlICoK ICAgbmV3X2dsb2JhbF9pbml0aWFsaXplZCAobG9jYXRpb24gKmxvYywKQEAgLTExOCw3ICsxMTks MTkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZWxlbWVudF9z aXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5pdGlhbGl6ZXJfbnVtX2Vs ZW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluaXRpYWxpemVyLAot ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgZW51bSBnbG9iYWxfdmFyX2Zs YWdzIGZsYWdzKTsKKworICBydmFsdWUgKgorICBuZXdfY3RvciAobG9jYXRpb24gKmxvZywKKwkg ICAgdHlwZSAqdHlwZSwKKwkgICAgY29uc3QgYXV0b192ZWM8ZmllbGQqPiAqZmllbGRzLAorCSAg ICBjb25zdCBhdXRvX3ZlYzxydmFsdWUqPiAqcnZhbHVlcyk7CisKKworICB2b2lkCisgIGdsb2Jh bF9zZXRfaW5pdF9ydmFsdWUgKGx2YWx1ZSogdmFyaWFibGUsCisJCQkgIHJ2YWx1ZSogaW5pdCk7 CiAKICAgdGVtcGxhdGUgPHR5cGVuYW1lIEhPU1RfVFlQRT4KICAgcnZhbHVlICoKQEAgLTI4Niw3 ICsyOTksOCBAQCBwcml2YXRlOgogICBnbG9iYWxfbmV3X2RlY2wgKGxvY2F0aW9uICpsb2MsCiAg ICAgICAgICAgICAgICAgICAgZW51bSBnY2Nfaml0X2dsb2JhbF9raW5kIGtpbmQsCiAgICAgICAg ICAgICAgICAgICAgdHlwZSAqdHlwZSwKLSAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpu YW1lKTsKKwkJICAgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgZW51bSBnbG9iYWxfdmFyX2ZsYWdz IGZsYWdzKTsKICAgbHZhbHVlICoKICAgZ2xvYmFsX2ZpbmFsaXplX2x2YWx1ZSAodHJlZSBpbm5l cik7CiAKQEAgLTYzNSw3ICs2NDksMTAgQEAgcHVibGljOgogICBydmFsdWUgKgogICBhc19ydmFs dWUgKCkgeyByZXR1cm4gdGhpczsgfQogCi0gIHRyZWUgYXNfdHJlZSAoKSBjb25zdCB7IHJldHVy biBtX2lubmVyOyB9CisgIHRyZWUgYXNfdHJlZSAoKSBjb25zdAorICB7CisgICAgcmV0dXJuIG1f aW5uZXI7CisgIH0KIAogICBjb250ZXh0ICpnZXRfY29udGV4dCAoKSBjb25zdCB7IHJldHVybiBt X2N0eHQ7IH0KIApkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmMgYi9nY2Mvaml0 L2ppdC1yZWNvcmRpbmcuYwppbmRleCA4ZDM0OTU2ZmM2Ny4uOWE1YjczNWE0MGYgMTAwNjQ0Ci0t LSBhL2djYy9qaXQvaml0LXJlY29yZGluZy5jCisrKyBiL2djYy9qaXQvaml0LXJlY29yZGluZy5j CkBAIC0xMDY0LDYgKzEwNjQsMTUgQEAgcmVjb3JkaW5nOjpjb250ZXh0OjpuZXdfZ2xvYmFsIChy ZWNvcmRpbmc6OmxvY2F0aW9uICpsb2MsCiAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3ZvaWQKK3Jl Y29yZGluZzo6Y29udGV4dDo6bmV3X2dsb2JhbF9pbml0X3J2YWx1ZSAobHZhbHVlICp2YXJpYWJs ZSwKKwkJCQkJICAgIHJ2YWx1ZSAqaW5pdCkKK3sKKyAgcmVjb3JkaW5nOjpnbG9iYWxfaW5pdF9y dmFsdWUgKm9iaiA9CisgICAgbmV3IHJlY29yZGluZzo6Z2xvYmFsX2luaXRfcnZhbHVlICh0aGlz LCB2YXJpYWJsZSwgaW5pdCk7CisgIHJlY29yZCAob2JqKTsKK30KKwogLyogQ3JlYXRlIGEgcmVj b3JkaW5nOjptZW1lbnRvX29mX25ld19zdHJpbmdfbGl0ZXJhbCBpbnN0YW5jZSBhbmQgYWRkIGl0 CiAgICB0byB0aGlzIGNvbnRleHQncyBsaXN0IG9mIG1lbWVudG9zLgogCkBAIC0xMDk2LDYgKzEx MDUsNDYgQEAgcmVjb3JkaW5nOjpjb250ZXh0OjpuZXdfcnZhbHVlX2Zyb21fdmVjdG9yIChsb2Nh dGlvbiAqbG9jLAogICByZXR1cm4gcmVzdWx0OwogfQogCityZWNvcmRpbmc6OnJ2YWx1ZSAqCity ZWNvcmRpbmc6OmNvbnRleHQ6Om5ld19jdG9yIChyZWNvcmRpbmc6OmxvY2F0aW9uICpsb2MsCisJ CQkgICAgICByZWNvcmRpbmc6OnR5cGUgKnR5cGUsCisJCQkgICAgICBpbnQgYXJyX2xlbmd0aCwK KwkJCSAgICAgIGZpZWxkICoqZmllbGRzLAorCQkJICAgICAgcnZhbHVlICoqdmFsdWVzKQorewor ICByZWNvcmRpbmc6OmN0b3IgKnJlc3VsdCA9IG5ldyBjdG9yICh0aGlzLCBsb2MsIHR5cGUpOwor CisgIC8qIFdlIG5lZWQgdG8gY29weSBmaWVsZHMgYW5kIHZhbHVlcyBpbnRvIHJlc3VsdCdzIGF1 dG9fdmVjOnMuICovCisgIGlmICh0eXBlLT5pc19hcnJheSAoKSAhPSBOVUxMKQorICAgIHsKKyAg ICAgIHJlc3VsdC0+bV92YWx1ZXMucmVzZXJ2ZSAoYXJyX2xlbmd0aCwgZmFsc2UpOworCisgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IGFycl9sZW5ndGg7IGkrKykKKwlyZXN1bHQtPm1fdmFsdWVz LnF1aWNrX3B1c2ggKHZhbHVlc1tpXSk7CisgICAgfQorICBlbHNlIGlmICh0eXBlLT5pc191bmlv biAoKSkKKyAgICB7CisgICAgICByZXN1bHQtPm1fdmFsdWVzLnNhZmVfcHVzaCAodmFsdWVzWzBd KTsKKyAgICAgIHJlc3VsdC0+bV9maWVsZHMuc2FmZV9wdXNoIChmaWVsZHNbMF0pOworICAgIH0K KyAgZWxzZSBpZiAodHlwZS0+aXNfc3RydWN0ICgpKQorICAgIHsKKyAgICAgIHJlc3VsdC0+bV92 YWx1ZXMucmVzZXJ2ZSAoYXJyX2xlbmd0aCwgZmFsc2UpOworICAgICAgcmVzdWx0LT5tX2ZpZWxk cy5yZXNlcnZlIChhcnJfbGVuZ3RoLCBmYWxzZSk7CisKKyAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgYXJyX2xlbmd0aDsgaSsrKQorCXsKKwkgIHJlc3VsdC0+bV92YWx1ZXMucXVpY2tfcHVzaCAo dmFsdWVzW2ldKTsKKwkgIHJlc3VsdC0+bV9maWVsZHMucXVpY2tfcHVzaCAoZmllbGRzW2ldKTsK Kwl9CisgICAgfQorICBlbHNlCisgICAgZ2NjX3VucmVhY2hhYmxlKCk7CisKKyAgcmVjb3JkIChy ZXN1bHQpOworICByZXR1cm4gcmVzdWx0OworfQorCiAvKiBDcmVhdGUgYSByZWNvcmRpbmc6OnVu YXJ5X29wIGluc3RhbmNlIGFuZCBhZGQgaXQgdG8gdGhpcyBjb250ZXh0J3MKICAgIGxpc3Qgb2Yg bWVtZW50b3MuCiAKQEAgLTQ2NTIsMTEgKzQ3MDEsMTMgQEAgcmVjb3JkaW5nOjpnbG9iYWw6OnJl cGxheV9pbnRvIChyZXBsYXllciAqcikKIAkJCQkgbV9pbml0aWFsaXplcl9udW1fYnl0ZXMKIAkJ CQkgLyBtX3R5cGUtPmRlcmVmZXJlbmNlICgpLT5nZXRfc2l6ZSAoKSwKIAkJCQkgbV9pbml0aWFs aXplciwKLQkJCQkgcGxheWJhY2tfc3RyaW5nIChtX25hbWUpKQorCQkJCSBwbGF5YmFja19zdHJp bmcgKG1fbmFtZSksCisJCQkJIGZsYWdzKQogICAgIDogci0+bmV3X2dsb2JhbCAocGxheWJhY2tf bG9jYXRpb24gKHIsIG1fbG9jKSwKIAkJICAgICBtX2tpbmQsCiAJCSAgICAgbV90eXBlLT5wbGF5 YmFja190eXBlICgpLAotCQkgICAgIHBsYXliYWNrX3N0cmluZyAobV9uYW1lKSkpOworCQkgICAg IHBsYXliYWNrX3N0cmluZyAobV9uYW1lKSwKKwkJICAgICBmbGFncykpOwogfQogCiAvKiBPdmVy cmlkZSB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZgpAQCAtNTU4Myw2ICs1NjM0LDEyNSBA QCByZWNvcmRpbmc6Om1lbWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX3ZlY3Rvcjo6d3JpdGVfcmVw cm9kdWNlciAocmVwcm9kdWNlciAmcikKIAkgICBlbGVtZW50c19pZCk7CiB9CiAKK3ZvaWQKK3Jl Y29yZGluZzo6Y3Rvcjo6dmlzaXRfY2hpbGRyZW4gKHJ2YWx1ZV92aXNpdG9yICp2KQoreworICBm b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1fdmFsdWVzLmxlbmd0aCAoKTsgaSsrKQorICAg IHYtPnZpc2l0IChtX3ZhbHVlc1tpXSk7Cit9CisKK3JlY29yZGluZzo6c3RyaW5nICoKK3JlY29y ZGluZzo6Y3Rvcjo6bWFrZV9kZWJ1Z19zdHJpbmcgKCkKK3sKKyAgcmV0dXJuIHN0cmluZzo6ZnJv bV9wcmludGYgKG1fY3R4dCwKKwkJCSAgICAgICJjdG9yIik7Cit9CisKK3ZvaWQKK3JlY29yZGlu Zzo6Y3Rvcjo6d3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNlciAmcikKK3sKKyAgY29uc3QgY2hh ciAqaWQgPSByLm1ha2VfaWRlbnRpZmllciAodGhpcywgInJ2YWx1ZSIpOworICB0eXBlICp0eXBl ID0gZ2V0X3R5cGUoKTsKKworICByLndyaXRlICgiICBnY2Nfaml0X3J2YWx1ZSAqJXM7XG4iLCBp ZCk7CisgIHIud3JpdGUgKCIgIHtcbiIpOyAvKiBPcGVuIHNjb3BlIGZvciBsb2NhbHMgKi8KKwor ICAvKiBXcml0ZSB0aGUgYXJyYXkgb2YgdmFsdWVzICovCisgIHIud3JpdGUgKCIgICAgZ2NjX2pp dF9ydmFsdWUgKnZhbHVlc1tdID0ge1xuIik7CisgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt X3ZhbHVlcy5sZW5ndGggKCk7IGkrKykKKyAgICByLndyaXRlICgiICAgICAgICAlcyxcbiIsIHIu Z2V0X2lkZW50aWZpZXIgKG1fdmFsdWVzW2ldKSk7CisgIHIud3JpdGUgKCIgICAgICB9O1xuIik7 CisKKyAgLyogV3JpdGUgdGhlIGFycmF5IG9mIGZpZWxkcyAqLworICBpZiAodHlwZS0+aXNfYXJy YXkgKCkpCisgICAgci53cml0ZSAoIiAgICBnY2Nfaml0X2ZpZWxkICoqZmllbGRzID0gTlVMTDtc biIpOworICBlbHNlCisgICAgeworICAgICAgci53cml0ZSAoIiAgICBnY2Nfaml0X2ZpZWxkICpm aWVsZHNbXSA9IHtcbiIpOworICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZmllbGRz Lmxlbmd0aCAoKTsgaSsrKQorCXIud3JpdGUgKCIgICAgICAgICVzLFxuIiwgci5nZXRfaWRlbnRp ZmllciAobV9maWVsZHNbaV0pKTsKKyAgICAgIHIud3JpdGUgKCIgICAgICB9O1xuIik7CisgICAg fQorICByLndyaXRlICgKKyIgICAgJXMgPVxuIgorIiAgICAgIGdjY19qaXRfY29udGV4dF9uZXdf Y29uc3RydWN0b3IgKCVzLFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICVzLCAvKiBnY2Nfaml0X2xvY2F0aW9uICpsb2MgKi9cbiIKKyIgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAlcywgLyogZ2NjX2ppdF90eXBlICp0eXBlICovXG4iCisi ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJWksIC8qIGludCBhcnJfbGVu Z3RoICovXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRz LFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyk7XG4i LAorCSAgIGlkLAorCSAgIHIuZ2V0X2lkZW50aWZpZXIgKGdldF9jb250ZXh0ICgpKSwKKwkgICBy LmdldF9pZGVudGlmaWVyIChtX2xvYyksCisJICAgci5nZXRfaWRlbnRpZmllcl9hc190eXBlIChn ZXRfdHlwZSAoKSksCisJICAgbV92YWx1ZXMubGVuZ3RoICgpKTsKKworICByLndyaXRlICgiICB9 XG4iKTsgLyogQ2xvc2Ugc2NvcGUgZm9yIGxvY2FscyAqLworfQorCit2b2lkCityZWNvcmRpbmc6 OmN0b3I6OnJlcGxheV9pbnRvIChyZXBsYXllciAqcikKK3sKKyAgYXV0b192ZWM8cGxheWJhY2s6 OnJ2YWx1ZSAqPiBwbGF5YmFja192YWx1ZXM7CisgIGF1dG9fdmVjPHBsYXliYWNrOjpmaWVsZCAq PiBwbGF5YmFja19maWVsZHM7CisKKyAgaW50IG4gPSBtX3ZhbHVlcy5sZW5ndGgoKTsKKworICB0 eXBlICp0eXBlID0gZ2V0X3R5cGUgKCk7CisKKyAgLyogSGFuZGxlIGFycmF5cywgYW5kIHJldHVy biAqLworICBpZiAodHlwZS0+aXNfYXJyYXkgKCkpCisgICAgeworICAgICAgcGxheWJhY2tfdmFs dWVzLnJlc2VydmUgKG4sIGZhbHNlKTsKKworICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBp KyspCisJeworCSAgLyogbnVsbCBtX3ZhbHVlcyBlbGVtZW50IGluZGljYXRlcyB6ZXJvIGN0b3Ig Ki8KKwkgIHBsYXliYWNrX3ZhbHVlcy5xdWlja19wdXNoIChtX3ZhbHVlc1tpXSA/CisJCQkJICAg ICAgbV92YWx1ZXNbaV0tPnBsYXliYWNrX3J2YWx1ZSAoKSA6CisJCQkJICAgICAgTlVMTCk7CisJ fQorICAgICAgc2V0X3BsYXliYWNrX29iaiAoci0+bmV3X2N0b3IgKHBsYXliYWNrX2xvY2F0aW9u IChyLCBtX2xvYyksCisJCQkJICAgICBnZXRfdHlwZSAoKS0+cGxheWJhY2tfdHlwZSAoKSwKKwkJ CQkgICAgIE5VTEwsCisJCQkJICAgICAmcGxheWJhY2tfdmFsdWVzKSk7CisgICAgICByZXR1cm47 CisgICAgfQorICAvKiBIYW5kbGUgdW5pb25zLCBhbmQgcmV0dXJuICovCisgIGVsc2UgaWYgKHR5 cGUtPmlzX3VuaW9uICgpKQorICAgIHsKKyAgICAgIHBsYXliYWNrX3ZhbHVlcy5zYWZlX3B1c2gg KG1fdmFsdWVzWzBdID8KKwkJCQkgICBtX3ZhbHVlc1swXS0+cGxheWJhY2tfcnZhbHVlICgpIDoK KwkJCQkgICBOVUxMKTsKKyAgICAgIHBsYXliYWNrX2ZpZWxkcy5zYWZlX3B1c2ggKG1fZmllbGRz WzBdLT5wbGF5YmFja19maWVsZCAoKSk7CisKKyAgICAgIHNldF9wbGF5YmFja19vYmogKHItPm5l d19jdG9yIChwbGF5YmFja19sb2NhdGlvbiAociwgbV9sb2MpLAorCQkJCSAgICAgZ2V0X3R5cGUg KCktPnBsYXliYWNrX3R5cGUgKCksCisJCQkJICAgICAmcGxheWJhY2tfZmllbGRzLAorCQkJCSAg ICAgJnBsYXliYWNrX3ZhbHVlcykpOworCisgICAgICByZXR1cm47CisgICAgfQorICAvKiAuLi4g ZWxzZSwgaGFuZGxlIHN0cnVjdHMgKi8KKworICBwbGF5YmFja192YWx1ZXMucmVzZXJ2ZSAobiwg ZmFsc2UpOworICBwbGF5YmFja19maWVsZHMucmVzZXJ2ZSAobiwgZmFsc2UpOworCisgIGZvciAo aW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgIHsKKyAgICAgIC8qIG51bGwgbV92YWx1ZXMgZWxl bWVudCBpbmRpY2F0ZXMgemVybyBjdG9yICovCisgICAgICBwbGF5YmFja192YWx1ZXMucXVpY2tf cHVzaCAobV92YWx1ZXNbaV0gPworCQkJCSAgICBtX3ZhbHVlc1tpXS0+cGxheWJhY2tfcnZhbHVl ICgpIDoKKwkJCQkgICAgTlVMTCk7CisgICAgICBwbGF5YmFja19maWVsZHMucXVpY2tfcHVzaCAo bV9maWVsZHNbaV0tPnBsYXliYWNrX2ZpZWxkICgpKTsKKyAgICB9CisKKyAgc2V0X3BsYXliYWNr X29iaiAoci0+bmV3X2N0b3IgKHBsYXliYWNrX2xvY2F0aW9uIChyLCBtX2xvYyksCisJCQkJIGdl dF90eXBlICgpLT5wbGF5YmFja190eXBlICgpLAorCQkJCSAmcGxheWJhY2tfZmllbGRzLAorCQkJ CSAmcGxheWJhY2tfdmFsdWVzKSk7Cit9CisKIC8qIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBjbGFz cyBnY2M6OmppdDo6cmVjb3JkaW5nOjp1bmFyeV9vcC4gICovCiAKIC8qIEltcGxlbWVudGF0aW9u IG9mIHB1cmUgdmlydHVhbCBob29rIHJlY29yZGluZzo6bWVtZW50bzo6cmVwbGF5X2ludG8KQEAg LTc1NTYsNiArNzcyNiwyMDYgQEAgcmVjb3JkaW5nOjp0b3BfbGV2ZWxfYXNtOjp3cml0ZV9yZXBy b2R1Y2VyIChyZXByb2R1Y2VyICZyKQogCSAgIG1fYXNtX3N0bXRzLT5nZXRfZGVidWdfc3RyaW5n ICgpKTsKIH0KIAordm9pZAorcmVjb3JkaW5nOjpnbG9iYWxfaW5pdF9ydmFsdWU6OnJlcGxheV9p bnRvIChyZXBsYXllciAqcikKK3sKKyAgci0+Z2xvYmFsX3NldF9pbml0X3J2YWx1ZSAobV92YXJp YWJsZS0+cGxheWJhY2tfbHZhbHVlKCksCisJCQkgICAgICAgbV9pbml0LT5wbGF5YmFja19ydmFs dWUoKSk7Cit9CisKK3ZvaWQKK3JlY29yZGluZzo6Z2xvYmFsX2luaXRfcnZhbHVlOjp3cml0ZV9y ZXByb2R1Y2VyIChyZXByb2R1Y2VyICZyKQoreworICByLndyaXRlICgKKyAgICAiICBnY2Nfaml0 X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlICglcywgLyogbHZhbHVlICpnbG9iYWwgKi9c biIKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlcyk7Lyog cnZhbHVlICppbml0ICovXG4iLAorICAgIHIuZ2V0X2lkZW50aWZpZXIgKG1fdmFyaWFibGUpLAor ICAgIHIuZ2V0X2lkZW50aWZpZXJfYXNfcnZhbHVlIChtX2luaXQpKTsKK30KKwordm9pZAorcmVj b3JkaW5nOjpnbG9iYWxfaW5pdF9ydmFsdWU6OndyaXRlX3RvX2R1bXAgKGR1bXAgJmQpCit7Cisg IGQud3JpdGUgKCIlcztcbiIsIGdldF9kZWJ1Z19zdHJpbmcgKCkpOworfQorCityZWNvcmRpbmc6 OnN0cmluZyAqCityZWNvcmRpbmc6Omdsb2JhbF9pbml0X3J2YWx1ZTo6bWFrZV9kZWJ1Z19zdHJp bmcgKCkKK3sKKyAgICByZXR1cm4gc3RyaW5nOjpmcm9tX3ByaW50ZihtX2N0eHQsICIlcyA9ICVz IiwKKyAgICAgIG1fdmFyaWFibGUtPmdldF9kZWJ1Z19zdHJpbmcgKCksCisgICAgICBtX2luaXQt PmdldF9kZWJ1Z19zdHJpbmcgKCkpOworfQorCitlbnVtIHN0cmlwX2ZsYWdzIHsKKyAgU1RSSVBf RkxBR19OT05FLAorICBTVFJJUF9GTEFHX0FSUiwKKyAgU1RSSVBfRkxBR19WRUMKK307CisKKy8q IFN0cmlwcyB0eXBlIGRvd24gdG8gYXJyYXksIHZlY3RvciBvciBiYXNlIHR5cGUgKHdoaWNoZXZl ciBjb21lcyBmaXJzdCkKKworICAgQWxzbyBzYXZlcyAncHRyX2RlcHRoJyBhbmQgc2V0cyAnZmxh Z3MnIGZvciBhcnJheSBvciB2ZWN0b3IgdHlwZXMgKi8KK3N0YXRpYworcmVjb3JkaW5nOjp0eXBl ICoKK3N0cmlwX2FuZF9jb3VudCAocmVjb3JkaW5nOjp0eXBlICp0eXBlX3RvX3N0cmlwLAorCQkg aW50ICZwdHJfZGVwdGgsCisJCSBzdHJpcF9mbGFncyAmZmxhZ3MpCit7CisgIHJlY29yZGluZzo6 dHlwZSAqdCA9IHR5cGVfdG9fc3RyaXA7CisKKyAgd2hpbGUgKHRydWUpCisgICAgeworICAgICAg aWYgKCF0KQorCWdjY191bnJlYWNoYWJsZSAoKTsgLyogU2hvdWxkIG9ubHkgaGFwcGVuIG9uIGNv cnJ1cHQgaW5wdXQgKi8KKworICAgICAgcmVjb3JkaW5nOjp0eXBlICpwb2ludGVkX3RvX3R5cGUg PSB0LT5pc19wb2ludGVyKCk7CisgICAgICBpZiAocG9pbnRlZF90b190eXBlICE9IE5VTEwpCisJ eworCSAgcHRyX2RlcHRoKys7CisJICB0ID0gcG9pbnRlZF90b190eXBlOworCSAgY29udGludWU7 CisJfQorCisgICAgICByZWNvcmRpbmc6OnR5cGUgKmFycmF5X2VsID0gdC0+aXNfYXJyYXkgKCk7 CisgICAgICBpZiAoYXJyYXlfZWwgIT0gTlVMTCkKKwl7CisJICBmbGFncyA9IFNUUklQX0ZMQUdf QVJSOworCSAgYnJlYWs7CisJfQorCisgICAgICByZWNvcmRpbmc6OnR5cGUgKnZlYyA9IHQtPmR5 bl9jYXN0X3ZlY3Rvcl90eXBlICgpOworICAgICAgaWYgKHZlYyAhPSBOVUxMKQorCXsKKwkgIGZs YWdzID0gU1RSSVBfRkxBR19WRUM7CisJICBicmVhazsKKwl9CisKKyAgICAgIC8qIHVucXVhbGlm aWVkKCkgcmV0dXJucyAndGhpcycgb24gYmFzZSB0eXBlcyAqLworICAgICAgcmVjb3JkaW5nOjp0 eXBlICpuZXh0ID0gdC0+dW5xdWFsaWZpZWQgKCk7CisgICAgICBpZiAobmV4dCA9PSB0KQorCXsK KwkgIGJyZWFrOworCX0KKyAgICAgIHQgPSBuZXh0OworICAgIH0KKworICByZXR1cm4gdDsKK30K KworLyogU3RyaXAgcXVhbGlmaWVycyBhbmQgY291bnQgcG9pbnRlciBkZXB0aCwgcmV0dXJuaW5n IHRydWUKKyAgIGlmIHRoZSB0eXBlcycgYmFzZSB0eXBlIGFuZCBwb2ludGVyIGRlcHRoIGFyZQor ICAgdGhlIHNhbWUsIG90aGVyd2lzZSBmYWxzZS4KKworICAgRm9yIGFycmF5IGFuZCB2ZWN0b3Ig dHlwZXMgdGhlIG51bWJlciBvZiBlbGVtZW50IGFsc28KKyAgIGhhcyB0byBtYXRjaC4KKworICAg RG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseS4gQ2FsbCAndHlwZXNfa2luZGFfc2FtZScgKi8KK2Jv b2wKK3R5cGVzX2tpbmRhX3NhbWVfaW50ZXJuYWwgKHJlY29yZGluZzo6dHlwZSAqYSwgcmVjb3Jk aW5nOjp0eXBlICpiKQoreworICBpbnQgcHRyX2RlcHRoX2EgPSAwOworICBpbnQgcHRyX2RlcHRo X2IgPSAwOworICByZWNvcmRpbmc6OnR5cGUgKmJhc2VfYTsKKyAgcmVjb3JkaW5nOjp0eXBlICpi YXNlX2I7CisKKyAgc3RyaXBfZmxhZ3MgZmxhZ3NfYSA9IFNUUklQX0ZMQUdfTk9ORTsKKyAgc3Ry aXBfZmxhZ3MgZmxhZ3NfYiA9IFNUUklQX0ZMQUdfTk9ORTsKKworICBiYXNlX2EgPSBzdHJpcF9h bmRfY291bnQgKGEsIHB0cl9kZXB0aF9hLCBmbGFnc19hKTsKKyAgYmFzZV9iID0gc3RyaXBfYW5k X2NvdW50IChiLCBwdHJfZGVwdGhfYiwgZmxhZ3NfYik7CisKKyAgaWYgKHB0cl9kZXB0aF9hICE9 IHB0cl9kZXB0aF9iKQorICAgIHJldHVybiBmYWxzZTsKKworICBpZiAoYmFzZV9hID09IGJhc2Vf YikKKyAgICByZXR1cm4gdHJ1ZTsKKworICBpZiAoZmxhZ3NfYSAhPSBmbGFnc19iKQorICAgIHJl dHVybiBmYWxzZTsKKworICAvKiBJZiB0aGUgImJhc2UgdHlwZSIgaXMgYW4gYXJyYXkgb3IgdmVj dG9yIHdlIG1pZ2h0IG5lZWQgdG8KKyAgICAgY2hlY2sgZGVlcGVyLiAqLworICBpZiAoZmxhZ3Nf YSA9PSBTVFJJUF9GTEFHX0FSUikKKyAgICB7CisgICAgICByZWNvcmRpbmc6OmFycmF5X3R5cGUg KmFycl9hID0KKwlzdGF0aWNfY2FzdDxyZWNvcmRpbmc6OmFycmF5X3R5cGUqPiAoYmFzZV9hKTsK KyAgICAgIHJlY29yZGluZzo6YXJyYXlfdHlwZSAqYXJyX2IgPQorCXN0YXRpY19jYXN0PHJlY29y ZGluZzo6YXJyYXlfdHlwZSo+IChiYXNlX2IpOworCisgICAgICBpZiAoYXJyX2EtPm51bV9lbGVt ZW50cyAoKSAhPSBhcnJfYi0+bnVtX2VsZW1lbnRzICgpKQorCXJldHVybiBmYWxzZTsKKworICAg ICAgLyogaXNfYXJyYXkgcmV0dXJucyBlbGVtZW50IHR5cGUgKi8KKyAgICAgIHJlY29yZGluZzo6 dHlwZSAqZWxfYSA9IGFycl9hLT5pc19hcnJheSAoKTsKKyAgICAgIHJlY29yZGluZzo6dHlwZSAq ZWxfYiA9IGFycl9iLT5pc19hcnJheSAoKTsKKworICAgICAgaWYgKGVsX2EgPT0gZWxfYikKKwly ZXR1cm4gdHJ1ZTsKKworICAgICAgcmV0dXJuIHR5cGVzX2tpbmRhX3NhbWVfaW50ZXJuYWwgKGVs X2EsIGVsX2IpOworICAgIH0KKyAgaWYgKGZsYWdzX2EgPT0gU1RSSVBfRkxBR19WRUMpCisgICAg eworICAgICAgcmVjb3JkaW5nOjp2ZWN0b3JfdHlwZSAqYXJyX2EgPQorCXN0YXRpY19jYXN0PHJl Y29yZGluZzo6dmVjdG9yX3R5cGUqPiAoYmFzZV9hKTsKKyAgICAgIHJlY29yZGluZzo6dmVjdG9y X3R5cGUgKmFycl9iID0KKwlzdGF0aWNfY2FzdDxyZWNvcmRpbmc6OnZlY3Rvcl90eXBlKj4gKGJh c2VfYik7CisKKyAgICAgIGlmIChhcnJfYS0+Z2V0X251bV91bml0cyAoKSAhPSBhcnJfYi0+Z2V0 X251bV91bml0cyAoKSkKKwlyZXR1cm4gZmFsc2U7CisKKyAgICAgIHJlY29yZGluZzo6dHlwZSAq ZWxfYSA9IGFycl9hLT5nZXRfZWxlbWVudF90eXBlICgpOworICAgICAgcmVjb3JkaW5nOjp0eXBl ICplbF9iID0gYXJyX2ItPmdldF9lbGVtZW50X3R5cGUgKCk7CisKKyAgICAgIGlmIChlbF9hID09 IGVsX2IpCisJcmV0dXJuIHRydWU7CisKKyAgICAgIHJldHVybiB0eXBlc19raW5kYV9zYW1lX2lu dGVybmFsIChlbF9hLCBlbF9iKTsKKyAgICB9CisKKyAgcmV0dXJuIGZhbHNlOworfQorCityZWNv cmRpbmc6OnR5cGUgKgorc3RyaXBfb3V0ZXJfcXVhbGlmaWVycyAocmVjb3JkaW5nOjp0eXBlICp0 eXBlKQoreworICB3aGlsZSAodHJ1ZSkKKyAgICB7CisgICAgICBpZiAoIXR5cGUpCisJZ2NjX3Vu cmVhY2hhYmxlICgpOyAvKiBTaG91bGQgb25seSBoYXBwZW4gb24gY29ycnVwdCBpbnB1dCAqLwor CisgICAgICAvKiB1bnF1YWxpZmllZCgpIHJldHVybnMgJ3RoaXMnIG9uIGJhc2UgdHlwZXMsIHZl Y3RvciwgYXJyYXlzIGFuZAorCSBwb2ludGVycy4gKi8KKyAgICAgIHJlY29yZGluZzo6dHlwZSAq bmV4dCA9IHR5cGUtPnVucXVhbGlmaWVkICgpOworICAgICAgaWYgKG5leHQgPT0gdHlwZSkKKwl7 CisJICBicmVhazsKKwl9CisgICAgICB0eXBlID0gbmV4dDsKKyAgICB9CisKKyAgcmV0dXJuIHR5 cGU7Cit9CisKK3JlY29yZGluZzo6dHlwZSAqCitnZXRfc3RyaXBwZWRfc3VidHlwZSAocmVjb3Jk aW5nOjp0eXBlICp0eXBlKQoreworICByZWNvcmRpbmc6OnR5cGUgKnN0cmlwcGVkID0gc3RyaXBf b3V0ZXJfcXVhbGlmaWVycyAodHlwZSk7CisgIHJlY29yZGluZzo6dHlwZSAqc3VidHlwZTsKKwor ICBpZiAoKHN1YnR5cGUgPSBzdHJpcHBlZC0+aXNfcG9pbnRlcigpKSkKKyAgICByZXR1cm4gc3Ry aXBfb3V0ZXJfcXVhbGlmaWVycyAoc3VidHlwZSk7CisKKyAgaWYgKChzdWJ0eXBlID0gc3RyaXBw ZWQtPmlzX2FycmF5ICgpKSkKKyAgICByZXR1cm4gc3RyaXBfb3V0ZXJfcXVhbGlmaWVycyAoc3Vi dHlwZSk7CisKKyAgaWYgKChzdWJ0eXBlID0gc3RyaXBwZWQtPmR5bl9jYXN0X3ZlY3Rvcl90eXBl ICgpKSkKKyAgICByZXR1cm4gc3RyaXBfb3V0ZXJfcXVhbGlmaWVycyAoc3VidHlwZSk7CisKKyAg cmV0dXJuIE5VTEw7Cit9CisKIH0gLy8gbmFtZXNwYWNlIGdjYzo6aml0CiAKIH0gLy8gbmFtZXNw YWNlIGdjYwpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmggYi9nY2Mvaml0L2pp dC1yZWNvcmRpbmcuaAppbmRleCBkNWUwYzM1OWE0OC4uMmU1MjlmNGJmNTIgMTAwNjQ0Ci0tLSBh L2djYy9qaXQvaml0LXJlY29yZGluZy5oCisrKyBiL2djYy9qaXQvaml0LXJlY29yZGluZy5oCkBA IC0xNDksNiArMTQ5LDE3IEBAIHB1YmxpYzoKIAkgICAgICB0eXBlICp0eXBlLAogCSAgICAgIGNv bnN0IGNoYXIgKm5hbWUpOwogCisgIHJ2YWx1ZSAqCisgIG5ld19jdG9yIChsb2NhdGlvbiAqbG9j LAorCSAgICB0eXBlICp0eXBlLAorCSAgICBpbnQgYXJyX2xlbmd0aCwKKwkgICAgZmllbGQgKipm aWVsZHMsCisJICAgIHJ2YWx1ZSAqKnZhbHVlcyk7CisKKyAgdm9pZAorICBuZXdfZ2xvYmFsX2lu aXRfcnZhbHVlIChsdmFsdWUgKnZhcmlhYmxlLAorCQkJICBydmFsdWUgKmluaXQpOworCiAgIHRl bXBsYXRlIDx0eXBlbmFtZSBIT1NUX1RZUEU+CiAgIHJ2YWx1ZSAqCiAgIG5ld19ydmFsdWVfZnJv bV9jb25zdCAodHlwZSAqdHlwZSwKQEAgLTU0Nyw2ICs1NTgsOCBAQCBwdWJsaWM6CiAgIHZpcnR1 YWwgYm9vbCBpc19jb21wbGV4ICgpIGNvbnN0ID0gMDsKICAgdmlydHVhbCB0eXBlICppc19wb2lu dGVyICgpID0gMDsKICAgdmlydHVhbCB0eXBlICppc19hcnJheSAoKSA9IDA7CisgIHZpcnR1YWwg Ym9vbCBpc19zdHJ1Y3QgKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgdmlydHVhbCBib29s IGlzX3VuaW9uICgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgIHZpcnR1YWwgYm9vbCBpc192 b2lkICgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgIHZpcnR1YWwgYm9vbCBoYXNfa25vd25f c2l6ZSAoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgIC8qIFVzZWQgdG8gcGFpciBjb21wbGV4 IGZsb2F0IHR5cGVzIHdpdGggcmVhbCBmbG9hdCB0eXBlCkBAIC02MjAsNiArNjMzLDggQEAgcHVi bGljOgogICAgICAgfQogICB9CiAKKyAgdHlwZSAqZ2V0X2Jhc2VfdHlwZSAoKSB7IHJldHVybiB0 aGlzOyB9CisKICAgYm9vbCBpc19pbnQgKCkgY29uc3QgRklOQUwgT1ZFUlJJREU7CiAgIGJvb2wg aXNfZmxvYXQgKCkgY29uc3QgRklOQUwgT1ZFUlJJREU7CiAgIGJvb2wgaXNfYm9vbCAoKSBjb25z dCBGSU5BTCBPVkVSUklERTsKQEAgLTg3Myw2ICs4ODgsNyBAQCBwdWJsaWM6CiAgIHt9CiAKICAg dHlwZSAqIGdldF90eXBlICgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICBzdHJpbmcgKiBn ZXRfbmFtZSAoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KIAogICBjb21wb3VuZF90eXBlICog Z2V0X2NvbnRhaW5lciAoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5lcjsgfQogICB2b2lkIHNl dF9jb250YWluZXIgKGNvbXBvdW5kX3R5cGUgKmMpIHsgbV9jb250YWluZXIgPSBjOyB9CkBAIC05 NzksNiArOTk1LDggQEAgcHVibGljOgogCiAgIGNvbnN0IGNoYXIgKmFjY2Vzc19hc190eXBlIChy ZXByb2R1Y2VyICZyKSBGSU5BTCBPVkVSUklERTsKIAorICB2aXJ0dWFsIGJvb2wgaXNfc3RydWN0 ICgpIGNvbnN0IEZJTkFMIE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KKwogcHJpdmF0ZToKICAg c3RyaW5nICogbWFrZV9kZWJ1Z19zdHJpbmcgKCkgRklOQUwgT1ZFUlJJREU7CiAgIHZvaWQgd3Jp dGVfcmVwcm9kdWNlciAocmVwcm9kdWNlciAmcikgRklOQUwgT1ZFUlJJREU7CkBAIC0xMDE3LDYg KzEwMzUsOCBAQCBwdWJsaWM6CiAKICAgdm9pZCByZXBsYXlfaW50byAocmVwbGF5ZXIgKnIpIEZJ TkFMIE9WRVJSSURFOwogCisgIHZpcnR1YWwgYm9vbCBpc191bmlvbiAoKSBjb25zdCBGSU5BTCBP VkVSUklERSB7IHJldHVybiB0cnVlOyB9CisKIHByaXZhdGU6CiAgIHN0cmluZyAqIG1ha2VfZGVi dWdfc3RyaW5nICgpIEZJTkFMIE9WRVJSSURFOwogICB2b2lkIHdyaXRlX3JlcHJvZHVjZXIgKHJl cHJvZHVjZXIgJnIpIEZJTkFMIE9WRVJSSURFOwpAQCAtMTQxNCw2ICsxNDM0LDIxIEBAIHB1Ymxp YzoKICAgICBtX2luaXRpYWxpemVyX251bV9ieXRlcyA9IG51bV9ieXRlczsKICAgfQogCisgIHZv aWQgc2V0X2ZsYWdzIChpbnQgZmxhZ19maWVsZHMpCisgIHsKKyAgICBmbGFncyA9IChlbnVtIGds b2JhbF92YXJfZmxhZ3MpKGZsYWdzIHwgZmxhZ19maWVsZHMpOworICB9CisgIC8qIFJldHVybnMg dHJ1ZSBpZiBhbnkgb2YgdGhlIGZsYWdzIGluIHRoZSBhcmd1bWVudCBpcyBzZXQgKi8KKyAgYm9v bCB0ZXN0X2ZsYWdzX2FueW9mIChpbnQgZmxhZ19maWVsZHMpIGNvbnN0CisgIHsKKyAgICByZXR1 cm4gZmxhZ3MgJiBmbGFnX2ZpZWxkczsKKyAgfQorCisgIGVudW0gZ2NjX2ppdF9nbG9iYWxfa2lu ZCBnZXRfa2luZCgpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gbV9raW5kOworICB9CisKIHByaXZh dGU6CiAgIHN0cmluZyAqIG1ha2VfZGVidWdfc3RyaW5nICgpIEZJTkFMIE9WRVJSSURFIHsgcmV0 dXJuIG1fbmFtZTsgfQogICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KQEAgLTE0MjYsOSArMTQ2MSwx MSBAQCBwcml2YXRlOgogCiBwcml2YXRlOgogICBlbnVtIGdjY19qaXRfZ2xvYmFsX2tpbmQgbV9r aW5kOworICBlbnVtIGdsb2JhbF92YXJfZmxhZ3MgZmxhZ3MgPSBHTE9CQUxfVkFSX0ZMQUdTX05P TkU7CiAgIHN0cmluZyAqbV9uYW1lOwogICB2b2lkICptX2luaXRpYWxpemVyOwogICBzaXplX3Qg bV9pbml0aWFsaXplcl9udW1fYnl0ZXM7CisgIAogfTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIEhP U1RfVFlQRT4KQEAgLTE1MTIsNiArMTU0OSwzMiBAQCBwcml2YXRlOgogICBhdXRvX3ZlYzxydmFs dWUgKj4gbV9lbGVtZW50czsKIH07CiAKK2NsYXNzIGN0b3IgOiBwdWJsaWMgcnZhbHVlCit7Citw dWJsaWM6CisgIGN0b3IgKGNvbnRleHQgKmN0eHQsCisJbG9jYXRpb24gKmxvYywKKwl0eXBlICp0 eXBlKQorICA6IHJ2YWx1ZSAoY3R4dCwgbG9jLCB0eXBlKQorICB7IH0KKworICB2b2lkIHJlcGxh eV9pbnRvIChyZXBsYXllciAqcikgRklOQUwgT1ZFUlJJREU7CisKKyAgdm9pZCB2aXNpdF9jaGls ZHJlbiAocnZhbHVlX3Zpc2l0b3IgKikgRklOQUwgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgIHN0 cmluZyAqIG1ha2VfZGVidWdfc3RyaW5nICgpIEZJTkFMIE9WRVJSSURFOworICB2b2lkIHdyaXRl X3JlcHJvZHVjZXIgKHJlcHJvZHVjZXIgJnIpIEZJTkFMIE9WRVJSSURFOworICBlbnVtIHByZWNl ZGVuY2UgZ2V0X3ByZWNlZGVuY2UgKCkgY29uc3QgRklOQUwgT1ZFUlJJREUKKyAgeworICAgIHJl dHVybiBQUkVDRURFTkNFX1BSSU1BUlk7CisgIH0KKworcHVibGljOgorICBhdXRvX3ZlYzxmaWVs ZCAqPiBtX2ZpZWxkczsKKyAgYXV0b192ZWM8cnZhbHVlICo+IG1fdmFsdWVzOworfTsKKwogY2xh c3MgdW5hcnlfb3AgOiBwdWJsaWMgcnZhbHVlCiB7CiBwdWJsaWM6CkBAIC0yMzU1LDYgKzI0MTgs MjQgQEAgcHJpdmF0ZToKICAgc3RyaW5nICptX2FzbV9zdG10czsKIH07CiAKK2NsYXNzIGdsb2Jh bF9pbml0X3J2YWx1ZSA6IHB1YmxpYyBtZW1lbnRvCit7CitwdWJsaWM6CisgIGdsb2JhbF9pbml0 X3J2YWx1ZSAoY29udGV4dCAqY3R4dCwgbHZhbHVlICp2YXJpYWJsZSwgcnZhbHVlICppbml0KSA6 CisgICAgbWVtZW50byhjdHh0KSwgbV92YXJpYWJsZSAodmFyaWFibGUpLCBtX2luaXQgKGluaXQp IHt9OworCisgIHZvaWQgd3JpdGVfdG9fZHVtcCAoZHVtcCAmZCkgRklOQUwgT1ZFUlJJREU7CisK K3ByaXZhdGU6CisgIHZvaWQgcmVwbGF5X2ludG8gKHJlcGxheWVyICpyKSBGSU5BTCBPVkVSUklE RTsKKyAgc3RyaW5nICogbWFrZV9kZWJ1Z19zdHJpbmcgKCkgRklOQUwgT1ZFUlJJREU7CisgIHZv aWQgd3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNlciAmcikgRklOQUwgT1ZFUlJJREU7CisKK3By aXZhdGU6CisgIGx2YWx1ZSAqbV92YXJpYWJsZTsKKyAgcnZhbHVlICptX2luaXQ7Cit9OworCiB9 IC8vIG5hbWVzcGFjZSBnY2M6OmppdDo6cmVjb3JkaW5nCiAKIC8qIENyZWF0ZSBhIHJlY29yZGlu Zzo6bWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgaW5zdGFuY2UgYW5kIGFkZApAQCAt MjM3NCw2ICsyNDU1LDM3IEBAIHJlY29yZGluZzo6Y29udGV4dDo6bmV3X3J2YWx1ZV9mcm9tX2Nv bnN0IChyZWNvcmRpbmc6OnR5cGUgKnR5cGUsCiAgIHJldHVybiByZXN1bHQ7CiB9CiAKK2Jvb2wK K3R5cGVzX2tpbmRhX3NhbWVfaW50ZXJuYWwgKHJlY29yZGluZzo6dHlwZSAqYSwKKwkJCSAgIHJl Y29yZGluZzo6dHlwZSAqYik7CisKKy8qIFN0cmlwICphbGwqIHF1YWxpZmllcnMgYW5kIGNvdW50 IHBvaW50ZXIgZGVwdGgsIHJldHVybmluZyB0cnVlCisgICBpZiB0aGUgdHlwZXMgYW5kIHBvaW50 ZXIgZGVwdGggYXJlIHRoZSBzYW1lLCBvdGhlcndpc2UgZmFsc2UuCisKKyAgIEZvciBhcnJheSBh bmQgdmVjdG9yIHR5cGVzIHRoZSBudW1iZXIgb2YgZWxlbWVudCBhbHNvCisgICBoYXMgdG8gbWF0 Y2gsIGFzd2VsbCBhcyB0aGUgZWxlbWVudCB0eXBlcyB0aGVtc2VsZi4gKi8KK3N0YXRpYyBpbmxp bmUgYm9vbAordHlwZXNfa2luZGFfc2FtZSAocmVjb3JkaW5nOjp0eXBlICphLCByZWNvcmRpbmc6 OnR5cGUgKmIpCit7CisgIC8qIEhhbmRsZSB0cml2aWFsIGNhc2UgaGVyZSwgdG8gYWxsb3cgZm9y IGlubGluaW5nLiAqLworICByZXR1cm4gYSA9PSBiIHx8IHR5cGVzX2tpbmRhX3NhbWVfaW50ZXJu YWwgKGEsIGIpOworfQorCisvKiBTdHJpcHMgcXVhbGlmaWVycyBkb3duIHRvIGEgcG9pbnRlciwg YXJyYXksIHVuaW9uLCB2ZWN0b3IKKyAgIG9yIGJhc2UgdHlwZS4gKi8KK3JlY29yZGluZzo6dHlw ZSAqCitzdHJpcF9vdXRlcl9xdWFsaWZpZXJzIChyZWNvcmRpbmc6OnR5cGUgKnR5cGUpOworCisv KiBGb3IgYSBwb2ludGVyLCBhcnJheSBvciB2ZWN0b3I7IHJldHVybnMgaXRzIHBvaW50ZWQgdG8g dHlwZQorICAgZm9yIHBvaW50ZXJzIG9yIGVsZW1lbnQgdHlwZSBmb3IgYXJyYXkgb3IgdmVjdG9y cy4KKworICAgVGhlIHJldHVybmVkIHR5cGUgaXMgc3RyaXBwZWQgb2YgcXVhbGlmaWVycy4KKwor ICAgSWYgdGhlIGFyZ3VtZW50IGlzIG5vdCBhIHBvaW50ZXIsIGFycmF5IG9yIHZlY3RvciwgTlVM TAorICAgaXMgcmV0dXJuZWQuICovCityZWNvcmRpbmc6OnR5cGUgKgorZ2V0X3N0cmlwcGVkX3N1 YnR5cGUgKHJlY29yZGluZzo6dHlwZSAqdHlwZSk7CisKIH0gLy8gbmFtZXNwYWNlIGdjYzo6aml0 CiAKIH0gLy8gbmFtZXNwYWNlIGdjYwpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9saWJnY2NqaXQrKy5o IGIvZ2NjL2ppdC9saWJnY2NqaXQrKy5oCmluZGV4IGI5NGNkYzg1YzhlLi4wMTkxNzI4NTRhNyAx MDA2NDQKLS0tIGEvZ2NjL2ppdC9saWJnY2NqaXQrKy5oCisrKyBiL2djYy9qaXQvbGliZ2Njaml0 KysuaApAQCAtMjA2LDYgKzIwNiwxMSBAQCBuYW1lc3BhY2UgZ2Njaml0CiAgICAgcnZhbHVlIG5l d19ydmFsdWUgKHR5cGUgdmVjdG9yX3R5cGUsCiAJCSAgICAgICBzdGQ6OnZlY3RvcjxydmFsdWU+ IGVsZW1lbnRzKSBjb25zdDsKIAorICAgIHJ2YWx1ZSBuZXdfY29uc3RydWN0b3IgKHR5cGUgdHlw ZV8sCisJCQkgICAgc3RkOjp2ZWN0b3I8ZmllbGQ+ICZmaWVsZHMsCisJCQkgICAgc3RkOjp2ZWN0 b3I8cnZhbHVlPiAmdmFsdWVzLAorCQkJICAgIGxvY2F0aW9uIGxvYyA9IGxvY2F0aW9uICgpKTsK KwogICAgIC8qIEdlbmVyaWMgdW5hcnkgb3BlcmF0aW9ucy4uLiAgKi8KICAgICBydmFsdWUgbmV3 X3VuYXJ5X29wIChlbnVtIGdjY19qaXRfdW5hcnlfb3Agb3AsCiAJCQkgdHlwZSByZXN1bHRfdHlw ZSwKQEAgLTUwOSw2ICs1MTQsNyBAQCBuYW1lc3BhY2UgZ2Njaml0CiAKICAgICBydmFsdWUgZ2V0 X2FkZHJlc3MgKGxvY2F0aW9uIGxvYyA9IGxvY2F0aW9uICgpKTsKICAgICBsdmFsdWUgc2V0X2lu aXRpYWxpemVyIChjb25zdCB2b2lkICpibG9iLCBzaXplX3QgbnVtX2J5dGVzKTsKKyAgICBsdmFs dWUgc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAocnZhbHVlIGluaXRfdmFsdWUpOwogICB9OwogCiAg IGNsYXNzIHBhcmFtIDogcHVibGljIGx2YWx1ZQpAQCAtMTg5MSw2ICsxODk3LDQ0IEBAIGx2YWx1 ZTo6c2V0X2luaXRpYWxpemVyIChjb25zdCB2b2lkICpibG9iLCBzaXplX3QgbnVtX2J5dGVzKQog ICByZXR1cm4gKnRoaXM7CiB9CiAKK2lubGluZSBsdmFsdWUKK2x2YWx1ZTo6c2V0X2luaXRpYWxp emVyX3J2YWx1ZSAocnZhbHVlIGluaXRfdmFsdWUpCit7CisgIHJldHVybiBsdmFsdWUgKGdjY19q aXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKAorCQkgICBnZXRfaW5uZXJfbHZhbHVl ICgpLAorCQkgICBpbml0X3ZhbHVlLmdldF9pbm5lcl9ydmFsdWUoKSkpOworfQorCitpbmxpbmUg cnZhbHVlCitjb250ZXh0OjpuZXdfY29uc3RydWN0b3IgKHR5cGUgdHlwZV8sCisJCQkgIHN0ZDo6 dmVjdG9yPGZpZWxkPiAmZmllbGRzLAorCQkJICBzdGQ6OnZlY3RvcjxydmFsdWU+ICZ2YWx1ZXMs CisJCQkgIGxvY2F0aW9uIGxvYykKK3sKKyAgZmllbGQgKnBmaWVsZHMgPSBudWxscHRyOworICBp ZiAoZmllbGRzLnNpemUoKSkKKyAgICBwZmllbGRzID0gJmZpZWxkc1swXTsKKworICBnY2Nfaml0 X2ZpZWxkICoqZmllbGRzX2FyciA9CisgICAgcmVpbnRlcnByZXRfY2FzdDxnY2Nfaml0X2ZpZWxk ICoqPiAocGZpZWxkcyk7CisKKyAgcnZhbHVlICpwdmFsdWVzID0gbnVsbHB0cjsKKyAgaWYgKHZh bHVlcy5zaXplKCkpCisgICAgcHZhbHVlcyA9ICZ2YWx1ZXNbMF07CisKKyAgZ2NjX2ppdF9ydmFs dWUgKip2YWx1ZXNfYXJyID0KKyAgICByZWludGVycHJldF9jYXN0PGdjY19qaXRfcnZhbHVlICoq PiAocHZhbHVlcyk7CisKKyAgcmV0dXJuIHJ2YWx1ZSAoCisJICAgZ2NjX2ppdF9jb250ZXh0X25l d19jb25zdHJ1Y3RvciAobV9pbm5lcl9jdHh0LAorCQkJCQkgICAgbG9jLmdldF9pbm5lcl9sb2Nh dGlvbiAoKSwKKwkJCQkJICAgIHR5cGVfLmdldF9pbm5lcl90eXBlKCksCisJCQkJCSAgICAoaW50 KXZhbHVlcy5zaXplKCksCisJCQkJCSAgICBmaWVsZHNfYXJyLAorCQkJCQkgICAgdmFsdWVzX2Fy cikpOworfQorCisKIC8vIGNsYXNzIHBhcmFtIDogcHVibGljIGx2YWx1ZQogaW5saW5lIHBhcmFt OjpwYXJhbSAoKSA6IGx2YWx1ZSAoKSB7fQogaW5saW5lIHBhcmFtOjpwYXJhbSAoZ2NjX2ppdF9w YXJhbSAqaW5uZXIpCmRpZmYgLS1naXQgYS9nY2Mvaml0L2xpYmdjY2ppdC5jIGIvZ2NjL2ppdC9s aWJnY2NqaXQuYwppbmRleCA5N2M1YWJhNjQzZS4uZmU5YTMyMWU2ZmMgMTAwNjQ0Ci0tLSBhL2dj Yy9qaXQvbGliZ2Njaml0LmMKKysrIGIvZ2NjL2ppdC9saWJnY2NqaXQuYwpAQCAtMzM1LDcgKzMz NSw3IEBAIGppdF9lcnJvciAoZ2NjOjpqaXQ6OnJlY29yZGluZzo6Y29udGV4dCAqY3R4dCwKIAog ICAgVGhpcyBpcyBpbXBsZW1lbnRlZCBieSBjYWxsaW5nIHRoZQogICAgZ2NjOjpqaXQ6OnJlY29y ZGluZzo6dHlwZTo6YWNjZXB0c193cml0ZXNfZnJvbSB2aXJ0dWFsIGZ1bmN0aW9uIG9uCi0gICBM VFlQRS4gICovCisgICBMVFlQRS4gRm9yIGNvbnN0IHR5cGVzIGFjY2VwdHNfd3JpdGVzX2Zyb20g YWx3YXlzIHJldHVybnMgZmFsc2UuICovCiAKIHN0YXRpYyBib29sCiBjb21wYXRpYmxlX3R5cGVz IChnY2M6OmppdDo6cmVjb3JkaW5nOjp0eXBlICpsdHlwZSwKQEAgLTExMzAsNiArMTEzMCwyNzUg QEAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKGdjY19qaXRfY29udGV4dCAqY3R4dCwKICAg cmV0dXJuIChnY2Nfaml0X2x2YWx1ZSAqKWN0eHQtPm5ld19nbG9iYWwgKGxvYywga2luZCwgdHlw ZSwgbmFtZSk7CiB9CiAKKy8qIFB1YmxpYyBlbnRyeXBvaW50LiAgU2VlIGRlc2NyaXB0aW9uIGlu IGxpYmdjY2ppdC5oLgorCisgICBCdWlsZHMgYSBjdG9yIGZvciBhcnJheXMsIHVuaW9ucyBhbmQg c3RydWN0cy4KKworICAgVGhlIHdheSBtYW55IGVudHJ5cG9pbnRzIGNvbXBhcmUgdHlwZXMgZm9y IHNhbWVuZXNzIGlzIGFiaXQKKyAgIGJyb2tlbiwgc2luY2UgdGhleSBvbmx5IHN0cmlwIG9uZSBx dWFsaWZpZXIsIG1ha2luZyBlZy4KKyAgICdjb25zdCB2b2xhdGlsZSBpbnQnIGFuZCAndm9sYXRp bGUgY29uc3QgaW50JyBpbmNvbXBhdGlibGUsCisgICBvciAnY29uc3Qgdm9sYXRpbGUgaW50JyBh bmQgJ2ludCcgaW5jb21wYXRpYmxlLiBPcgorICAgJ2NvbnN0IHZvbGF0aWxlIGludCcgaW5jb21w YXRpYmxlIHdpdGggaXQgc2VsZiBpZiB0aGUgdHlwZXMKKyAgIHdlcmUgYnVpbHQgZnJvbSB0d28g ZGlmZmVyZW50IGZ1bmN0aW9uIGNhbGxzLgorCisgICBIb3dldmVyLCBmb3IgdGhlIGNvbnN0cnVj dG9yIHdlIG5lZWQgdG8gc3RyaXAgZXZlcnl0aGluZy4gKi8KKworZXh0ZXJuIGdjY19qaXRfcnZh bHVlICoKK2djY19qaXRfY29udGV4dF9uZXdfY29uc3RydWN0b3IgKGdjY19qaXRfY29udGV4dCAq Y3R4dCwKKwkJCQkgZ2NjX2ppdF9sb2NhdGlvbiAqbG9jLAorCQkJCSBnY2Nfaml0X3R5cGUgKnR5 cGUsCisJCQkJIGludCBhcnJfbGVuZ3RoLAorCQkJCSBnY2Nfaml0X2ZpZWxkICoqZmllbGRzLAor CQkJCSBnY2Nfaml0X3J2YWx1ZSAqKnZhbHVlcykKK3sKKyAgdXNpbmcgbmFtZXNwYWNlIGdjYzo6 aml0OjpyZWNvcmRpbmc7CisKKyAgUkVUVVJOX05VTExfSUZfRkFJTCAoY3R4dCwgTlVMTCwgbG9j LCAiTlVMTCBjb250ZXh0Iik7CisgIEpJVF9MT0dfRlVOQyAoY3R4dC0+Z2V0X2xvZ2dlciAoKSk7 CisgIFJFVFVSTl9OVUxMX0lGX0ZBSUwgKHR5cGUsIGN0eHQsIGxvYywgIk5VTEwgdHlwZSIpOwor CisgIGJvb2wgaXNfdW5pb24gPSB0eXBlLT5pc191bmlvbiAoKTsKKyAgYm9vbCBpc19zdHJ1Y3Qg PSB0eXBlLT5pc19zdHJ1Y3QgKCk7CisgIGJvb2wgaXNfYXJyYXkgPSB0eXBlLT5pc19hcnJheSAo KSAhPSBOVUxMOyAvKiBpc19hcnJheSgpIHJldHVybnMgcHRyICovCisKKyAgUkVUVVJOX05VTExf SUZfRkFJTCAoaXNfdW5pb24gfHwgaXNfc3RydWN0IHx8IGlzX2FycmF5LAorCQkgICAgICAgY3R4 dCwgbG9jLAorCQkgICAgICAgImNvbnN0cnVjdG9yIHR5cGUgbm90IGFuIHVuaW9uLCBhcnJheSBv ciBzdHJ1Y3QiKTsKKworICBpZiAoaXNfYXJyYXkpCisgICAgZmllbGRzID0gTlVMTDsgLyogZmll bGRzIGFyZSBpZ25vcmVkIGZvciBhcnJheSBjb25zdHJ1Y3RvcnMgKi8KKyAgaWYgKCFhcnJfbGVu Z3RoKQorICAgIHsKKyAgICAgIC8qIElnbm9yZSBmaWVsZHMgYW5kIHZhbHVlcyBpZiBhcnJfbGVu Z3RoIGlzIHplcm8gKi8KKyAgICAgIGZpZWxkcyA9IE5VTEw7CisgICAgICB2YWx1ZXMgPSBOVUxM OworICAgIH0KKworICBpZiAoaXNfdW5pb24pCisgICAgUkVUVVJOX05VTExfSUZfRkFJTCAoYXJy X2xlbmd0aCA9PSAxLCBjdHh0LCBsb2MsCisJCQkgInVuaW9uIGNvbnN0cnVjdG9yICdhcnJfbGVu Z3RoJyBub3QgMSIpOworCisgIGlmIChhcnJfbGVuZ3RoKQorICAgIHsKKyAgICAgIGlmIChpc19z dHJ1Y3QgfHwgaXNfdW5pb24pCisJeworCSAgUkVUVVJOX05VTExfSUZfRkFJTCAoCisJICAgIGZp ZWxkcyAmJiB2YWx1ZXMsCisJICAgIGN0eHQsIGxvYywKKwkgICAgIidmaWVsZHMnIGFuZC9vciAn dmFsdWVzJyBOVUxMIHdpdGggbm9uLXplcm8gJ2Fycl9sZW5ndGgnIik7CisKKwkgIGNvbXBvdW5k X3R5cGUgKmN0ID0gcmVpbnRlcnByZXRfY2FzdDxjb21wb3VuZF90eXBlICo+KHR5cGUpOworCSAg Z2NjOjpqaXQ6OnJlY29yZGluZzo6ZmllbGRzICpmaWVsZHNfc3RydWN0ID0gY3QtPmdldF9maWVs ZHMgKCk7CisJICBpbnQgbl9maWVsZHMgPSBmaWVsZHNfc3RydWN0LT5sZW5ndGggKCk7CisKKwkg IFJFVFVSTl9OVUxMX0lGX0ZBSUwgKAorCSAgICBuX2ZpZWxkcyA+PSBhcnJfbGVuZ3RoLAorCSAg ICBjdHh0LCBsb2MsCisJICAgICJtb3JlIGZpZWxkcyBpbiBjb25zdHJ1Y3RvciB0aGFuIGluIHRo ZSB0YXJnZXQgc3RydWN0IG9yIHVuaW9uIik7CisKKwkgIFJFVFVSTl9OVUxMX0lGX0ZBSUwgKAor CSAgICBjdC0+aGFzX2tub3duX3NpemUoKSwKKwkgICAgY3R4dCwgbG9jLAorCSAgICAic3RydWN0 IGNhbid0IGJlIG9wYXF1ZSIpOworCX0KKyAgICAgIGVsc2UgaWYgKGlzX2FycmF5KQorCXsKKwkg IFJFVFVSTl9OVUxMX0lGX0ZBSUwgKAorCSAgICB2YWx1ZXMsCisJICAgIGN0eHQsIGxvYywKKwkg ICAgIid2YWx1ZXMnIE5VTEwgd2l0aCBub24temVybyAnYXJyX2xlbmd0aCciKTsKKworCSAgZ2Nj OjpqaXQ6OnJlY29yZGluZzo6YXJyYXlfdHlwZSAqYXJyX3R5cGUgPQorCSAgICByZWludGVycHJl dF9jYXN0PGdjYzo6aml0OjpyZWNvcmRpbmc6OmFycmF5X3R5cGUqPih0eXBlKTsKKwkgIGludCBu X2VsID0gYXJyX3R5cGUtPm51bV9lbGVtZW50cyAoKTsKKworCSAgUkVUVVJOX05VTExfSUZfRkFJ TCAoCisJICAgIG5fZWwgPj0gYXJyX2xlbmd0aCwKKwkgICAgY3R4dCwgbG9jLAorCSAgICAiYXJy YXkgY29uc3RydWN0b3IgaGFzIG1vcmUgdmFsdWVzIHRoYW4gdGhlIGFycmF5IHR5cGUncyBsZW5n dGgiKTsKKwl9CisgICAgfQorCisgIGlmIChmaWVsZHMgJiYgdmFsdWVzKSAvKiBVbmlvbiBvciBz dHJ1Y3QgKi8KKyAgICB7CisgICAgICBpbnQgaWR4ID0gMDsgLyogUnVubmVyIGluZGV4ICovCisK KyAgICAgIGNvbXBvdW5kX3R5cGUgKmN0ID0gcmVpbnRlcnByZXRfY2FzdDxjb21wb3VuZF90eXBl ICo+KHR5cGUpOworICAgICAgZ2NjOjpqaXQ6OnJlY29yZGluZzo6ZmllbGRzICpmaWVsZHNfc3Ry dWN0ID0gY3QtPmdldF9maWVsZHMgKCk7CisgICAgICBpbnQgbl9maWVsZHNfaW5fc3RydWN0ID0g ZmllbGRzX3N0cnVjdC0+bGVuZ3RoICgpOworCisgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFy cl9sZW5ndGg7IGkrKykKKwl7CisJICBnY2M6OmppdDo6cmVjb3JkaW5nOjpmaWVsZCAqZiA9IGZp ZWxkc1tpXTsKKwkgIGdjYzo6aml0OjpyZWNvcmRpbmc6OnJ2YWx1ZSAqcnYgPSB2YWx1ZXNbaV07 CisKKwkgIFJFVFVSTl9OVUxMX0lGX0ZBSUxfUFJJTlRGMSAoCisJICAgIGYsCisJICAgIGN0eHQs IGxvYywKKwkgICAgIk5VTEwgZmllbGQgaW4gJ2ZpZWxkcycsIGF0IGluZGV4ICVkIiwgaSk7CisK KwkgIFJFVFVSTl9OVUxMX0lGX0ZBSUxfUFJJTlRGMiAoCisJICAgIGYtPmdldF9jb250YWluZXIg KCkgPT0KKwkgICAgc3RhdGljX2Nhc3Q8Z2NjOjpqaXQ6OnJlY29yZGluZzo6dHlwZSo+KHR5cGUp LAorCSAgICBjdHh0LCBsb2MsCisJICAgICJmaWVsZCBhdCBpbmRleCAlZCwgd2FzIG5vdCB1c2Vk IHdoZW4gY3JlYXRpbmcgIgorCSAgICAidGhlIHVuaW9uIG9yIHN0cnVjdCAoJXMpIiwKKwkgICAg aSwKKwkgICAgZi0+Z2V0X2RlYnVnX3N0cmluZygpKTsKKworCSAgLyogRmllbGRzIGluIHRoZSBj b25zdHJ1Y3RvciBuZWVkIHRvIGJlIGluIHN0cnVjdCBkZWZpbml0aW9uIG9yZGVyLAorCSAgICAg YnV0IHRoZXJlIGNhbiBiZSBnYXBzLiAqLworCSAgaW50IGo7CisJICBmb3IgKGogPSBpZHg7IGog PCBuX2ZpZWxkc19pbl9zdHJ1Y3Q7IGorKykKKwkgICAgeworCSAgICAgIGZpZWxkICpmcyA9IGZp ZWxkc19zdHJ1Y3QtPmdldF9maWVsZCAoaik7CisJICAgICAgaWYgKGZzID09IGYpCisJCXsKKwkJ ICBpZHggPSBqOyAvKiBBZHZhbmNlIHJ1bm5lciBpbmRleCBmb3IgbmV4dCBpdGVyYXRpb24gKi8K KwkJICBicmVhazsKKwkJfQorCSAgICB9CisKKwkgIFJFVFVSTl9OVUxMX0lGX0ZBSUxfUFJJTlRG MyAoCisJICAgIGogIT0gbl9maWVsZHNfaW5fc3RydWN0LAorCSAgICBjdHh0LCBsb2MsCisJICAg ICJmaWVsZCBhdCBpbmRleCAlZCBpbiAnZmllbGRzJyBpcyBub3QgaW4gZGVmaW5pdGlvbiBvcmRl ciIKKwkgICAgIihzdHJ1Y3Q6ICVzKSAoY3RvciBmaWVsZDogJXMpIiwKKwkgICAgaSwKKwkgICAg dHlwZS0+Z2V0X2RlYnVnX3N0cmluZyAoKSwKKwkgICAgZi0+Z2V0X2RlYnVnX3N0cmluZyAoKSk7 CisKKwkgIGlmIChydikKKwkgICAgeworCSAgICAgIGdjYzo6aml0OjpyZWNvcmRpbmc6OnR5cGUg KnJ2X3R5cGUgPSBydi0+Z2V0X3R5cGUgKCk7CisKKwkgICAgICBSRVRVUk5fTlVMTF9JRl9GQUlM X1BSSU5URjEgKAorCQkhcnZfdHlwZS0+aXNfdm9pZCAoKSwKKwkJY3R4dCwgbG9jLAorCQkiY2Fu J3QgY29uc3RydWN0IHRoZSB2b2lkIHR5cGUsIGF0IGluZGV4ICVkIiwgaSk7CisJICAgICAgUkVU VVJOX05VTExfSUZfRkFJTF9QUklOVEYzICgKKwkJZ2NjOjpqaXQ6OnR5cGVzX2tpbmRhX3NhbWUg KHJ2X3R5cGUsCisJCQkJCSAgICBmLT5nZXRfdHlwZSAoKSksCisJCWN0eHQsIGxvYywKKwkJInZh bHVlIGFuZCBmaWVsZCBub3QgdGhlIHNhbWUgdW5xdWFsaWZpZWQgdHlwZSwgYXQgaW5kZXggJWQi CisJCSIgKGZpZWxkIHR5cGU6ICVzKSh2YWx1ZSB0eXBlOiAlcykiLAorCQlpLAorCQlmLT5nZXRf dHlwZSAoKS0+Z2V0X2RlYnVnX3N0cmluZyAoKSwKKwkJcnZfdHlwZS0+Z2V0X2RlYnVnX3N0cmlu ZyAoKSk7CisJICAgIH0KKwl9CisgICAgfQorICBlbHNlIGlmICh2YWx1ZXMpIC8qIEFycmF5ICov CisgICAgeworICAgICAgLyogRm9yIGFycmF5cywgYWxsIHZhbHVlcyBuZWVkIHRvIGJlIHRoZSBz YW1lIGJhc2UgdHlwZSAqLworICAgICAgZ2NjOjpqaXQ6OnJlY29yZGluZzo6dHlwZSAqdHlwZTAg PSBOVUxMOworICAgICAgaW50IGkgPSAwOworICAgICAgLyogRmluZCBmaXJzdCBub24tbnVsbCB2 YWx1ZSAqLworICAgICAgZm9yICg7aSA8IGFycl9sZW5ndGg7IGkrKykKKwl7CisJICBpZiAodmFs dWVzW2ldKQorCSAgICBicmVhazsKKwl9CisKKyAgICAgIGlmIChpIDwgYXJyX2xlbmd0aCkgLyog QWxsIHZhbHVlcyBtaWdodCBiZSBudWxsICovCisJdHlwZTAgPSB2YWx1ZXNbaV0tPmdldF90eXBl ICgpOworCisgICAgICAvKiBJZiB3ZSBnb3QgYSB0eXBlMCwgY2hlY2sgdGhhdCBhbGwgb3RoZXIg dmFsdWVzIGhhdmUKKwkgdGhlIHNhbWUgdHlwZSAqLworICAgICAgZm9yICg7IGkgPCBhcnJfbGVu Z3RoOyBpKyspCisJeworCSAgaWYgKHZhbHVlc1tpXSkKKwkgICAgUkVUVVJOX05VTExfSUZfRkFJ TF9QUklOVEYzICgKKwkgICAgICBnY2M6OmppdDo6dHlwZXNfa2luZGFfc2FtZSAodHlwZTAsCisJ CQkJCSAgdmFsdWVzW2ldLT5nZXRfdHlwZSAoKSksCisJICAgICAgY3R4dCwgbG9jLAorCSAgICAg ICJ2YWx1ZSB0eXBlIGF0IGluZGV4ICVkIGRpZmZlciBmcm9tIGZpcnN0IHZhbHVlIHR5cGUiCisJ ICAgICAgIiAoZmlyc3QgdHlwZTogJXMpKGRpZmZlcmVudCB0eXBlOiAlcykiLAorCSAgICAgIGks CisJICAgICAgdHlwZTAtPmdldF9kZWJ1Z19zdHJpbmcgKCksCisJICAgICAgdmFsdWVzW2ldLT5n ZXRfdHlwZSAoKS0+Z2V0X2RlYnVnX3N0cmluZyAoKSk7CisJfQorCisgICAgICAvKiBDb21wYXJl IHR5cGUwIHdpdGggdGhlIGVsZW1lbnQgdHlwZSBzcGVjaWZpZWQgaW4gdGhlCisJIHR5cGUgb2Yg dGhlIGFycmF5LiAqLworICAgICAgaWYgKHR5cGUwKQorCXsKKwkgIGdjYzo6aml0OjpyZWNvcmRp bmc6OnR5cGUgKmVsX3R5cGUgPQorCSAgICB0eXBlLT5pc19hcnJheSAoKTsKKworCSAgUkVUVVJO X05VTExfSUZfRkFJTF9QUklOVEYyICgKKwkgICAgZ2NjOjpqaXQ6OnR5cGVzX2tpbmRhX3NhbWUg KHR5cGUwLCBlbF90eXBlKSwKKwkgICAgY3R4dCwgbG9jLAorCSAgICAiYXJyYXkgZWxlbWVudCB2 YWx1ZSB0eXBlcyBkaWZmZXIgZnJvbSB0eXBlcyBpbiAndmFsdWVzJyIKKwkgICAgIiAoZWxlbWVu dCB0eXBlOiAlcykoJ3ZhbHVlcycgdHlwZTogJXMpIiwKKwkgICAgZWxfdHlwZS0+Z2V0X2RlYnVn X3N0cmluZyAoKSwKKwkgICAgdHlwZTAtPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworCX0KKyAgICB9 CisKKyAgcmV0dXJuIChnY2Nfaml0X3J2YWx1ZSAqKWN0eHQtPm5ld19jdG9yICgKKyAgICBsb2Ms CisgICAgdHlwZSwKKyAgICBhcnJfbGVuZ3RoLAorICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Z2NjOjpq aXQ6OnJlY29yZGluZzo6ZmllbGQqKj4oZmllbGRzKSwKKyAgICByZWludGVycHJldF9jYXN0PGdj Yzo6aml0OjpyZWNvcmRpbmc6OnJ2YWx1ZSoqPih2YWx1ZXMpKTsKK30KKworLyogUHVibGljIGVu dHJ5cG9pbnQuICBTZWUgZGVzY3JpcHRpb24gaW4gbGliZ2Njaml0LmguICovCisKK2V4dGVybiBn Y2Nfaml0X2x2YWx1ZSAqCitnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChn Y2Nfaml0X2x2YWx1ZSAqZ2xvYmFsLAorCQkJCSAgICAgICBnY2Nfaml0X3J2YWx1ZSAqaW5pdF9y dmFsdWUpCit7CisgIFJFVFVSTl9OVUxMX0lGX0ZBSUwgKGdsb2JhbCwgTlVMTCwgTlVMTCwiTlVM TCBnbG9iYWwiKTsKKyAgCisgIGdjYzo6aml0OjpyZWNvcmRpbmc6OmNvbnRleHQgKmN0eHQgPSBn bG9iYWwtPmdldF9jb250ZXh0ICgpOworICBSRVRVUk5fTlVMTF9JRl9GQUlMIChjdHh0LCBOVUxM LCBOVUxMLCJOVUxMIGNvbnRleHQiKTsKKyAgSklUX0xPR19GVU5DIChjdHh0LT5nZXRfbG9nZ2Vy ICgpKTsKKyAgUkVUVVJOX05VTExfSUZfRkFJTCAoaW5pdF9ydmFsdWUsIGN0eHQsIE5VTEwsIk5V TEwgaW5pdF9ydmFsdWUiKTsKKworICBSRVRVUk5fTlVMTF9JRl9GQUlMX1BSSU5URjEgKGdsb2Jh bC0+aXNfZ2xvYmFsICgpLAorCQkJICAgICAgIGN0eHQsIE5VTEwsCisJCQkgICAgICAgImx2YWx1 ZSBcIiVzXCIgbm90IGEgZ2xvYmFsIiwKKwkJCSAgICAgICBnbG9iYWwtPmdldF9kZWJ1Z19zdHJp bmcgKCkpOworCisgIGdjYzo6aml0OjpyZWNvcmRpbmc6Omdsb2JhbCAqZ2JsID0KKyAgICByZWlu dGVycHJldF9jYXN0PGdjYzo6aml0OjpyZWNvcmRpbmc6Omdsb2JhbCAqPiAoZ2xvYmFsKTsKKyAg CisgIFJFVFVSTl9OVUxMX0lGX0ZBSUxfUFJJTlRGMSAoZ2JsLT5nZXRfa2luZCAoKSAhPQorCQkJ ICAgICAgIEdDQ19KSVRfR0xPQkFMX0lNUE9SVEVELAorCQkJICAgICAgIGN0eHQsIE5VTEwsCisJ CQkgICAgICAgImNhbid0IGluaXRpYWxpemUgXCIlc1wiLCBpdCBpcyBpbXBvcnRlZCIsCisJCQkg ICAgICAgZ2xvYmFsLT5nZXRfZGVidWdfc3RyaW5nICgpKTsKKworICBSRVRVUk5fTlVMTF9JRl9G QUlMX1BSSU5URjQgKGdjYzo6aml0Ojp0eXBlc19raW5kYV9zYW1lICgKKwkJCQkgZ2xvYmFsLT5n ZXRfdHlwZSAoKSwKKwkJCQkgaW5pdF9ydmFsdWUtPmdldF90eXBlKCkpLAorCQkJICAgICAgIGN0 eHQsIE5VTEwsCisJCQkgICAgICAgIm1pc21hdGNoaW5nIHR5cGVzOiIKKwkJCSAgICAgICAiIGlu aXRpYWxpemluZyAlcyAodHlwZTogJXMpIHdpdGggJXMgKHR5cGU6ICVzKSIsCisJCQkgICAgICAg Z2xvYmFsLT5nZXRfZGVidWdfc3RyaW5nICgpLAorCQkJICAgICAgIGdsb2JhbC0+Z2V0X3R5cGUg KCktPmdldF9kZWJ1Z19zdHJpbmcgKCksCisJCQkgICAgICAgaW5pdF9ydmFsdWUtPmdldF9kZWJ1 Z19zdHJpbmcgKCksCisJCQkgICAgICAgaW5pdF9ydmFsdWUtPmdldF90eXBlICgpLT5nZXRfZGVi dWdfc3RyaW5nICgpKTsKKworICAvKiBDaGVjayB0aGF0IHRoZXJlIGFyZSBubyBpbml0aWFsaXpl cnMgc2V0IGZvciB0aGUgZ2xvYmFsIHlldCAqLworICBSRVRVUk5fTlVMTF9JRl9GQUlMX1BSSU5U RjEgKCFnYmwtPnRlc3RfZmxhZ3NfYW55b2YgKAorCQkJCSAgZ2NjOjpqaXQ6OkdMT0JBTF9WQVJf RkxBR1NfV0lMTF9CRV9SVkFMX0lOSVQgfAorCQkJCSAgZ2NjOjpqaXQ6OkdMT0JBTF9WQVJfRkxB R1NfV0lMTF9CRV9CTE9CX0lOSVQpLAorCQkJICAgICAgIGN0eHQsIE5VTEwsCisJCQkgICAgICAg Imdsb2JhbCB2YXJpYWJsZSBhbGxyZWFkeSBpbml0aWFsaXplZDogJXMiLAorCQkJICAgICAgIGds b2JhbC0+Z2V0X2RlYnVnX3N0cmluZyAoKSk7CisKKyAgLyogVGhlIGdsb2JhbCBuZWVkIHRvIGtu b3cgZHVyaW5nIHBsYXliYWNrIHRoYXQgaXQgd2lsbCBiZQorICAgICBpbml0aWFsaXplZC4gKi8K KyAgZ2JsLT5zZXRfZmxhZ3MgKGdjYzo6aml0OjpHTE9CQUxfVkFSX0ZMQUdTX1dJTExfQkVfUlZB TF9JTklUKTsKKworICBjdHh0LT5uZXdfZ2xvYmFsX2luaXRfcnZhbHVlIChnbG9iYWwsIGluaXRf cnZhbHVlKTsKKworICByZXR1cm4gZ2xvYmFsOworfQorCiAvKiBQdWJsaWMgZW50cnlwb2ludC4g IFNlZSBkZXNjcmlwdGlvbiBpbiBsaWJnY2NqaXQuaC4KIAogICAgQWZ0ZXIgZXJyb3ItY2hlY2tp bmcsIHRoZSByZWFsIHdvcmsgaXMgZG9uZSBieSB0aGUKQEAgLTExNjMsOCArMTQzMiwyMiBAQCBn Y2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXIgKGdjY19qaXRfbHZhbHVlICpnbG9iYWwsCiAg ICAgIiBnbG9iYWwgXCIlc1wiIGhhcyBzaXplICV6dSB3aGVyZWFzIGluaXRpYWxpemVyIGhhcyBz aXplICV6dSIsCiAgICAgZ2xvYmFsLT5nZXRfZGVidWdfc3RyaW5nICgpLCBsdmFsdWVfc2l6ZSwg bnVtX2J5dGVzKTsKIAotICByZWludGVycHJldF9jYXN0IDxnY2M6OmppdDo6cmVjb3JkaW5nOjpn bG9iYWwgKj4gKGdsb2JhbCkKLSAgICAtPnNldF9pbml0aWFsaXplciAoYmxvYiwgbnVtX2J5dGVz KTsKKyAgLyogQ2hlY2sgdGhhdCB0aGUgcnZhbHVlIGluaXRpYWxpemVyIGlzIG5vdCBzZXQgZm9y IHRoaXMgZ2xvYmFsLgorICAgICBOb3RlIHRoYXQgd2UgZG8gbm90IGNoZWNrIGlmIHRoaXMgYmxv YiB0eXBlIGluaXRpYWxpemVyIGlzCisgICAgIGFsbHJlYWR5IHNldCwgc2luY2UgdGhhdCBjaGVj ayB3YXMgbm90IHByZXNlbnQgd2hlbiB0aGUgZW50cnlwb2ludAorICAgICB3YXMgaW5pdGlhbGx5 IHdyaXR0ZW4uICovCisgIGdjYzo6aml0OjpyZWNvcmRpbmc6Omdsb2JhbCAqZ2JsID0KKyAgICBy ZWludGVycHJldF9jYXN0PGdjYzo6aml0OjpyZWNvcmRpbmc6Omdsb2JhbCAqPiAoZ2xvYmFsKTsK KyAgUkVUVVJOX05VTExfSUZfRkFJTF9QUklOVEYxICghZ2JsLT50ZXN0X2ZsYWdzX2FueW9mICgK KwkJCQkgIGdjYzo6aml0OjpHTE9CQUxfVkFSX0ZMQUdTX1dJTExfQkVfUlZBTF9JTklUKSwKKwkJ CSAgICAgICBOVUxMLCBOVUxMLAorCQkJICAgICAgICJnbG9iYWwgdmFyaWFibGUgYWxscmVhZHkg aW5pdGlhbGl6ZWQ6ICVzIiwKKwkJCSAgICAgICBnbG9iYWwtPmdldF9kZWJ1Z19zdHJpbmcgKCkp OworCisgIGdibC0+c2V0X2luaXRpYWxpemVyIChibG9iLCBudW1fYnl0ZXMpOworICAvKiBUaGUg Z2xvYmFsIG5lZWQgdG8ga25vdyBkdXJpbmcgcGxheWJhY2sgdGhhdCBpdCB3aWxsIGJlCisgICAg IGluaXRpYWxpemVkLiAqLyAgCisgIGdibC0+c2V0X2ZsYWdzIChnY2M6OmppdDo6R0xPQkFMX1ZB Ul9GTEFHU19XSUxMX0JFX0JMT0JfSU5JVCk7CiAKICAgcmV0dXJuIGdsb2JhbDsKIH0KZGlmZiAt LWdpdCBhL2djYy9qaXQvbGliZ2Njaml0LmggYi9nY2Mvaml0L2xpYmdjY2ppdC5oCmluZGV4IGM1 MTBjNWNjOTAyLi4wYjNhY2QwYjlmYSAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9saWJnY2NqaXQuaAor KysgYi9nY2Mvaml0L2xpYmdjY2ppdC5oCkBAIC03OTUsNiArNzk1LDExMyBAQCBnY2Nfaml0X2Nv bnRleHRfbmV3X2dsb2JhbCAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAogCQkJICAgIGdjY19qaXRf dHlwZSAqdHlwZSwKIAkJCSAgICBjb25zdCBjaGFyICpuYW1lKTsKIAorI2RlZmluZSBMSUJHQ0NK SVRfSEFWRV9DVE9SUworCisvKgorICAgQ3JlYXRlIGEgY29uc3RydWN0b3IgZm9yIGFuIGFycmF5 LCB1bmlvbiBvciBzdHJ1Y3QgYXMgYSBydmFsdWUuCisKKyAgIFJldHVybnMgTlVMTCBvbiBlcnJv ci4gVGhlIHR3byBwYXJhbWV0ZXIgYXJyYXlzIGFyZSBjb3BpZWQgYW5kCisgICBkbyBub3QgaGF2 ZSB0byBvdXRsaXZlIHRoZSBjb250ZXh0LgorCisgICBgdHlwZWAgc3BlY2lmaWVzIHdoYXQgdGhl IGNvbnN0cnVjdG9yIHdpbGwgYnVpbGQuCisKKyAgIGBhcnJfbGVuZ3RoYCBzcGVjaWZpZXMgdGhl IG51bWJlciBvZiBlbGVtZW50cyBpbiBgdmFsdWVzYC4KKworICAgQ29uc3RydWN0aW5nIHN0cnVj dHMKKyAgICIiIiIiIiIiIiIiIiIiIiIiIiIiCisKKyAgIEZvciBhIHN0cnVjdCwgZWFjaCBmaWVs ZCBpbiBgZmllbGRzYCBzcGVjaWZpZXMKKyAgIHdoaWNoIGZpZWxkIGluIHRoZSBzdHJ1Y3QgdG8g c2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nCisgICB2YWx1ZSBpbiBgdmFsdWVzYC4gYGZpZWxkc2Ag YW5kIGB2YWx1ZXNgIGFyZSBwYWlyZWQgYnkgaW5kZXgKKyAgIGFuZCB0aGUgcGFpciBuZWVkIHRv IGhhdmUgdGhlIHNhbWUgdW5xdWFsaWZpZWQgdHlwZS4KKworICAgQSBOVUxMIHZhbHVlIGluIGB2 YWx1ZXNgIGlzIGEgc2hvcnRoYW5kIGZvciB6ZXJvIGluaXRpYWxpemF0aW9uCisgICBvZiB0aGUg Y29ycmVzcG9uZGluZyBmaWVsZC4KKworICAgVGhlIGZpZWxkcyBpbiBgZmllbGRzYCBoYXZlIHRv IGJlIGluIGRlZmluaXRpb24gb3JkZXIsIGJ1dCB0aGVyZQorICAgY2FuIGJlIGdhcHMuIEFueSBm aWVsZCBpbiB0aGUgc3RydWN0IHRoYXQgaXMgbm90IHNwZWNpZmllZCBpbgorICAgYGBmaWVsZHNg YCB3aWxsIGJlIHplcm9lZC4KKworICAgVGhlIGZpZWxkcyBpbiBgZmllbGRzYCBuZWVkIHRvIGJl IHRoZSBzYW1lIG9iamVjdHMgdGhhdCB3ZXJlIHVzZWQKKyAgIHRvIGNyZWF0ZSB0aGUgc3RydWN0 LgorCisgICBgZmllbGRzYCBuZWVkIHRvIGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFzIGB2YWx1ZXNg LgorCisgICBJZiBgYXJyX2xlbmd0aGAgaXMgMCwgdGhlIGFycmF5IHBhcmFtZXRlcnMgd2lsbCBi ZQorICAgaWdub3JlZCBhbmQgemVybyBpbml0aWFsaXphdGlvbiB3aWxsIGJlIHVzZWQuCisKKyAg IENvbnN0cnVjdGluZyBhcnJheXMKKyAgICIiIiIiIiIiIiIiIiIiIiIiIiIKKworICAgRm9yIGFu IGFycmF5IHR5cGUsIHRoZSBgZmllbGRzYCBwYXJhbWV0ZXIgaXMgaWdub3JlZC4KKworICAgYGFy cl9sZW5ndGhgIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGB2YWx1ZXNgLgor CisgICBFYWNoIHZhbHVlIGluIGB2YWx1ZXNgIHNldHMgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUg aW4gdGhlIGFycmF5LgorICAgSWYgdGhlIGFycmF5IHR5cGUgaXRzZWxmIGhhcyBtb3JlIGVsZW1l bnRzIHRoYW4gYHZhbHVlc2AsIHRoZQorICAgbGVmdC1vdmVyIGVsZW1lbnRzIHdpbGwgYmUgemVy b2VkLgorCisgICBFYWNoIHZhbHVlIGluIGB2YWx1ZXNgIG5lZWQgdG8gYmUgdGhlIHNhbWUgdW5x dWFsaWZpZWQgdHlwZSBhcyB0aGUKKyAgIGFycmF5IHR5cGUncyBlbGVtZW50IHR5cGUuCisKKyAg IElmIGBhcnJfbGVuZ3RoYCBpcyAwLCB0aGUgYXJyYXkgcGFyYW1ldGVycyB3aWxsIGJlCisgICBp Z25vcmVkIGFuZCB6ZXJvIGluaXRpYWxpemF0aW9uIHdpbGwgYmUgdXNlZC4KKworICAgQ29uc3Ry dWN0aW5nIHVuaW9ucworICAgIiIiIiIiIiIiIiIiIiIiIiIiIgorCisgICBGb3IgdW5pb25zLCBg YXJyX2xlbmd0aGAgbmVlZCB0byBiZSAxLiBUaGVyZSBuZWVkIHRvIGJlIG9uZSBmaWVsZAorICAg aW4gYGZpZWxkc2AgYW5kIG9uZSB2YWx1ZSBpbiBgdmFsdWVzYCB3aGljaCBzcGVjaWZpZWQgd2hp Y2ggZmllbGQKKyAgIGluIHRoZSB1bmlvbiB0byBzZXQgdG8gd2hhdCB2YWx1ZS4gVGhlIHBhaXIg bmVlZCB0byBoYXZlIHRoZSBzYW1lCisgICB1bnF1YWxpZmllZCB0eXBlLgorCisgICBUaGUgZmll bGQgaW4gYGZpZWxkc2AgbmVlZCB0byBiZSBvbmUgb2YgdGhlIG9iamVjdHMgdGhhdCB3ZXJlIHVz ZWQKKyAgIHRvIGNyZWF0ZSB0aGUgdW5pb24uCisKKyAgIFJlbWFya3MKKyAgICIiIiIiIiIKKwor ICAgVGhlIGNvbnN0cnVjdG9yIHJ2YWx1ZSBjYW4gYmUgdXNlZCBmb3IgYXNzaWdubWVudCB0byBs b2NhbHMuCisgICBJdCBjYW4gYmUgdXNlZCB0byBpbml0aWFsaXplIGdsb2JhbCB2YXJpYWJsZXMg d2l0aAorICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZS4gSXQgY2FuIGFs c28gYmUgdXNlZCBhcyBhCisgICB0ZW1wb3JhcnkgdmFsdWUgZm9yIGZ1bmN0aW9uIGNhbGxzIGFu ZCByZXR1cm4gdmFsdWVzLgorCisgICBUaGUgY29uc3RydWN0b3IgY2FuIGNvbnRhaW4gbmVzdGVk IGNvbnN0cnVjdG9ycy4gTm90ZSB0aGF0IGEgc3RyaW5nCisgICBsaXRlcmFsIHJ2YWx1ZSBjYW4n dCBiZSB1c2VkIHRvIGNvbnN0cnVjdCBhIGNoYXIgYXJyYXkuIEl0IG5lZWQgb25lCisgICBydmFs dWUgZm9yIGVhY2ggY2hhci4KKworICAgVGhpcyBlbnRyeXBvaW50IHdhcyBhZGRlZCBpbiBMSUJH Q0NKSVRfQUJJXzE2OyB5b3UgY2FuIHRlc3QgZm9yIGl0cworICAgcHJlc2Vuc2UgdXNpbmc6Cisg ICAgICNpZmRlZiBMSUJHQ0NKSVRfSEFWRV9DVE9SUworCisqLworZXh0ZXJuIGdjY19qaXRfcnZh bHVlICoKK2djY19qaXRfY29udGV4dF9uZXdfY29uc3RydWN0b3IgKGdjY19qaXRfY29udGV4dCAq Y3R4dCwKKwkJCQkgZ2NjX2ppdF9sb2NhdGlvbiAqbG9jLAorCQkJCSBnY2Nfaml0X3R5cGUgKnR5 cGUsCisJCQkJIGludCBhcnJfbGVuZ3RoLAorCQkJCSBnY2Nfaml0X2ZpZWxkICoqZmllbGRzLAor CQkJCSBnY2Nfaml0X3J2YWx1ZSAqKnZhbHVlcyk7CisKKy8qIFNldCB0aGUgaW5pdGlhbCB2YWx1 ZSBvZiBhIGdsb2JhbCB3aXRoIGFuIHJ2YWx1ZS4KKworICAgVGhlIHJ2YWx1ZSBuZWVkIHRvIGJl IGEgY29uc3RhbnQgZXhwcmVzc2lvbiwgaS5lLiBubyBmdW5jdGlvbiBjYWxscy4KKworICAgVGhl IGdsb2JhbCBjYW4ndCBoYXZlIHRoZSAna2luZCcgR0NDX0pJVF9HTE9CQUxfSU1QT1JURUQuCisg ICAKKyAgIFVzZSB0b2dldGhlciB3aXRoIGdjY19qaXRfY29udGV4dF9uZXdfY29uc3RydWN0b3Io KSB0bworICAgaW5pdGlhbGl6ZSBzdHJ1Y3RzLCB1bmlvbnMgYW5kIGFycmF5cy4KKworICAgT24g c3VjY2VzcywgcmV0dXJucyB0aGUgJ2dsb2JhbCcgcGFyYW1ldGVyLiBPdGhlcndpc2UsIE5VTEwu CisKKyAgIFRoaXMgZW50cnlwb2ludCB3YXMgYWRkZWQgaW4gTElCR0NDSklUX0FCSV8xNjsgeW91 IGNhbiB0ZXN0IGZvciBpdHMKKyAgIHByZXNlbmNlIHVzaW5nOgorICAgICAjaWZkZWYgTElCR0ND SklUX0hBVkVfQ1RPUlMKKyovCitleHRlcm4gZ2NjX2ppdF9sdmFsdWUgKgorZ2NjX2ppdF9nbG9i YWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZ2NjX2ppdF9sdmFsdWUgKmdsb2JhbCwKKwkJCQkg ICAgICAgZ2NjX2ppdF9ydmFsdWUgKmluaXRfdmFsdWUpOworCiAjZGVmaW5lIExJQkdDQ0pJVF9I QVZFX2djY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcgogCiAvKiBTZXQgYW4gaW5pdGlhbCB2 YWx1ZSBmb3IgYSBnbG9iYWwsIHdoaWNoIG11c3QgYmUgYW4gYXJyYXkgb2YKZGlmZiAtLWdpdCBh L2djYy9qaXQvbGliZ2Njaml0Lm1hcCBiL2djYy9qaXQvbGliZ2Njaml0Lm1hcAppbmRleCA0MDIy ZGJiNmZiYy4uYzVhMWFmZGVhY2YgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvbGliZ2Njaml0Lm1hcAor KysgYi9nY2Mvaml0L2xpYmdjY2ppdC5tYXAKQEAgLTIwOCw5ICsyMDgsMTEgQEAgTElCR0NDSklU X0FCSV8xNSB7CiAKIExJQkdDQ0pJVF9BQklfMTYgewogICBnbG9iYWw6CisgICAgZ2NjX2ppdF9j b250ZXh0X25ld19jb25zdHJ1Y3RvcjsKICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9m cm9tX2NvbXBsZXhfZG91YmxlOwogICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21f Y29tcGxleF9sb25nX2RvdWJsZTsKLSAgICBnY2Nfaml0X2NvbnRleHRfc2V0X2Jvb2xfZW5hYmxl X2NvbXBsZXhfdHlwZXM7CiAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9sb25n X2RvdWJsZTsKICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2xvbmdfbG9uZzsK KyAgICBnY2Nfaml0X2NvbnRleHRfc2V0X2Jvb2xfZW5hYmxlX2NvbXBsZXhfdHlwZXM7CisgICAg Z2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZTsKIH0gTElCR0NDSklUX0FCSV8x NTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRl L2ppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaCBiL2djYy90ZXN0c3VpdGUvaml0LmRnL2Fs bC1ub24tZmFpbGluZy10ZXN0cy5oCmluZGV4IDg0MTZiMzEyYmFkLi4yNmY0NWZlMDgxMSAxMDA2 NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvYWxsLW5vbi1mYWlsaW5nLXRlc3RzLmgKKysr IGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvYWxsLW5vbi1mYWlsaW5nLXRlc3RzLmgKQEAgLTIxMSw2 ICsyMTEsMTMgQEAKICN1bmRlZiBjcmVhdGVfY29kZQogI3VuZGVmIHZlcmlmeV9jb2RlCiAKKy8q IHRlc3QtZ2xvYmFsLWluaXQtcnZhbHVlLmMgKi8KKyNkZWZpbmUgY3JlYXRlX2NvZGUgY3JlYXRl X2NvZGVfZ2xvYmFsX2luaXRfcnZhbHVlCisjZGVmaW5lIHZlcmlmeV9jb2RlIHZlcmlmeV9jb2Rl X2dsb2JhbF9pbml0X3J2YWx1ZQorI2luY2x1ZGUgInRlc3QtZ2xvYmFsLWluaXQtcnZhbHVlLmMi CisjdW5kZWYgY3JlYXRlX2NvZGUKKyN1bmRlZiB2ZXJpZnlfY29kZQorCiAvKiB0ZXN0LWdsb2Jh bC1zZXQtaW5pdGlhbGl6ZXIuYyAqLwogI2RlZmluZSBjcmVhdGVfY29kZSBjcmVhdGVfY29kZV9n bG9iYWxfc2V0X2luaXRpYWxpemVyCiAjZGVmaW5lIHZlcmlmeV9jb2RlIHZlcmlmeV9jb2RlX2ds b2JhbF9zZXRfaW5pdGlhbGl6ZXIKQEAgLTIzMiw2ICsyMzksMTMgQEAKICN1bmRlZiBjcmVhdGVf Y29kZQogI3VuZGVmIHZlcmlmeV9jb2RlCiAKKy8qIHRlc3QtbG9jYWwtaW5pdC1ydmFsdWUuYyAq LworI2RlZmluZSBjcmVhdGVfY29kZSBjcmVhdGVfY29kZV9sb2NhbF9pbml0X3J2YWx1ZQorI2Rl ZmluZSB2ZXJpZnlfY29kZSB2ZXJpZnlfY29kZV9sb2NhbF9pbml0X3J2YWx1ZQorI2luY2x1ZGUg InRlc3QtbG9jYWwtaW5pdC1ydmFsdWUuYyIKKyN1bmRlZiBjcmVhdGVfY29kZQorI3VuZGVmIHZl cmlmeV9jb2RlCisKIC8qIHRlc3QtbG9uZy1uYW1lcy5jICovCiAjZGVmaW5lIGNyZWF0ZV9jb2Rl IGNyZWF0ZV9jb2RlX2xvbmdfbmFtZXMKICNkZWZpbmUgdmVyaWZ5X2NvZGUgdmVyaWZ5X2NvZGVf bG9uZ19uYW1lcwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1j dG9yLXN0cnVjdC10b28tYmlnLmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWN0 b3Itc3RydWN0LXRvby1iaWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uYTY2Yjg5NGRmZGUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90 ZXN0LWVycm9yLWN0b3Itc3RydWN0LXRvby1iaWcuYwpAQCAtMCwwICsxLDg2IEBACisvKgorCisg IFRlc3QgdGhhdCB0aGUgcHJvcGVyIGVycm9yIGlzIHRyaWdnZXJlZCB3aGVuIHdlIGJ1aWxkIGEg Y3RvcgorICBmb3IgYW4gc3RydWN0IHR5cGUsIGJ1dCBoYXZlIHRvbyBtYW55IGZpZWxkcy4KKwor Ki8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRl ICJsaWJnY2NqaXQuaCIKKyNpbmNsdWRlICJoYXJuZXNzLmgiCisKK3ZvaWQKK2NyZWF0ZV9jb2Rl IChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgZ2NjX2ppdF90 eXBlICppbnRfdHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0Nf SklUX1RZUEVfSU5UKTsKKyAgCisgIGdjY19qaXRfZmllbGQgKmIxID0gZ2NjX2ppdF9jb250ZXh0 X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAwLAorCQkJCQkJIGludF90eXBlLAorCQkJCQkJICJh Iik7CisgIGdjY19qaXRfZmllbGQgKmIyID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4 dCwKKwkJCQkJCSAwLAorCQkJCQkJIGludF90eXBlLAorCQkJCQkJICJiIik7CisgIGdjY19qaXRf ZmllbGQgKmIzID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAwLAor CQkJCQkJIGludF90eXBlLAorCQkJCQkJICJjIik7CisgIGdjY19qaXRfZmllbGQgKmZpZWxkc19i W10gPSB7YjEsIGIyLCBiM307CisKKyAgZ2NjX2ppdF90eXBlICpzdHJ1Y3RfYmFyX3R5cGUgPQor ICAgIGdjY19qaXRfc3RydWN0X2FzX3R5cGUgKAorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19z dHJ1Y3RfdHlwZSAoY3R4dCwKKwkJCQkgICAgICAgMCwKKwkJCQkgICAgICAgImJhciIsCisJCQkJ ICAgICAgIDMsCisJCQkJICAgICAgIGZpZWxkc19iKSk7CisgIAorICBnY2Nfaml0X2ZpZWxkICpi MTEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJICAwLAorCQkJCQkJ ICBpbnRfdHlwZSwKKwkJCQkJCSAgImEiKTsKKyAgZ2NjX2ppdF9maWVsZCAqYjIyID0gZ2NjX2pp dF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAgMCwKKwkJCQkJCSAgaW50X3R5cGUs CisJCQkJCQkgICJiIik7CisgIGdjY19qaXRfZmllbGQgKmIzMyA9IGdjY19qaXRfY29udGV4dF9u ZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgIDAsCisJCQkJCQkgIGludF90eXBlLAorCQkJCQkJICAi YyIpOworICBnY2Nfaml0X2ZpZWxkICpiNDQgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChj dHh0LAorCQkJCQkJICAwLAorCQkJCQkJICBpbnRfdHlwZSwKKwkJCQkJCSAgImMiKTsKKworICBn Y2Nfaml0X2ZpZWxkICpmaWVsZHNfY3RvcltdID0ge2IxMSwgYjIyLCBiMzMsIGI0NH07CisgIGdj Y19qaXRfcnZhbHVlICp2YWx1ZXNbXSA9IHswLDAsMCwwfTsKKworICBnY2Nfaml0X3J2YWx1ZSAq Y3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfY29uc3RydWN0b3IKKyAgICAoY3R4dCwgMCwKKyAg ICAgc3RydWN0X2Jhcl90eXBlLAorICAgICA0LAorICAgICBmaWVsZHNfY3RvciwKKyAgICAgdmFs dWVzKTsKKworICBDSEVDS19WQUxVRSAoY3RvciwgTlVMTCk7Cit9CisKK3ZvaWQKK3ZlcmlmeV9j b2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIGdjY19qaXRfcmVzdWx0ICpyZXN1bHQpCit7Cisg IC8qIEVuc3VyZSB0aGF0IHRoZSBiYWQgQVBJIHVzYWdlIHByZXZlbnRzIHRoZSBBUEkgZ2l2aW5n IGEgYm9ndXMKKyAgICAgcmVzdWx0IGJhY2suICAqLworICBDSEVDS19WQUxVRSAocmVzdWx0LCBO VUxMKTsKKworICAvKiBWZXJpZnkgdGhhdCB0aGUgY29ycmVjdCBlcnJvciBtZXNzYWdlIHdhcyBl bWl0dGVkLiAqLworICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29udGV4dF9nZXRfZmly c3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAiZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1Y3Rv cjogbW9yZSBmaWVsZHMgaW4gIgorCQkgICAgICAiY29uc3RydWN0b3IgdGhhbiBpbiB0aGUgdGFy Z2V0IHN0cnVjdCBvciB1bmlvbiIpOworICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29u dGV4dF9nZXRfbGFzdF9lcnJvciAoY3R4dCksCisJCSAgICAgICJnY2Nfaml0X2NvbnRleHRfbmV3 X2NvbnN0cnVjdG9yOiBtb3JlIGZpZWxkcyBpbiAiCisJCSAgICAgICJjb25zdHJ1Y3RvciB0aGFu IGluIHRoZSB0YXJnZXQgc3RydWN0IG9yIHVuaW9uIik7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWN0b3Itc3RydWN0LXdyb25nLWZpZWxkLW5hbWUuYyBi L2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItY3Rvci1zdHJ1Y3Qtd3JvbmctZmllbGQt bmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yYjMxYjJmYzEy MwotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItY3Rv ci1zdHJ1Y3Qtd3JvbmctZmllbGQtbmFtZS5jCkBAIC0wLDAgKzEsODMgQEAKKy8qCisKKyAgVGVz dCB0aGF0IHRoZSBwcm9wZXIgZXJyb3IgaXMgdHJpZ2dlcmVkIHdoZW4gd2UgYnVpbGQgYSBjdG9y CisgIGZvciBhbiBzdHJ1Y3QgdHlwZSwgYnV0IGhhcyB0aGUgbmFtZSB3cm9uZyBvbiBhIGZpZWxk LgorCisqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lu Y2x1ZGUgImxpYmdjY2ppdC5oIgorI2luY2x1ZGUgImhhcm5lc3MuaCIKKwordm9pZAorY3JlYXRl X2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9kYXRhKQoreworICBnY2Nf aml0X3R5cGUgKmludF90eXBlID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LAorICAg IEdDQ19KSVRfVFlQRV9JTlQpOworCisgIGdjY19qaXRfZmllbGQgKmIxID0gZ2NjX2ppdF9jb250 ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAwLAorCQkJCQkJIGludF90eXBlLAorCQkJCQkJ ICJhIik7CisgIGdjY19qaXRfZmllbGQgKmIyID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAo Y3R4dCwKKwkJCQkJCSAwLAorCQkJCQkJIGludF90eXBlLAorCQkJCQkJICJiIik7CisgIGdjY19q aXRfZmllbGQgKmIzID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAw LAorCQkJCQkJIGludF90eXBlLAorCQkJCQkJICJjIik7CisgIGdjY19qaXRfZmllbGQgKmI0ID0g Z2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAwLAorCQkJCQkJIGludF90 eXBlLAorCQkJCQkJICJkIik7CisgIGdjY19qaXRfZmllbGQgKmI1ID0gZ2NjX2ppdF9jb250ZXh0 X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAwLAorCQkJCQkJIGludF90eXBlLAorCQkJCQkJICJk Iik7CisgIGdjY19qaXRfZmllbGQgKmZpZWxkc19iW10gPSB7YjEsIGIyLCBiMywgYjQsIGI1fTsK KworICBnY2Nfaml0X3R5cGUgKnN0cnVjdF9iYXJfdHlwZSA9CisgICAgZ2NjX2ppdF9zdHJ1Y3Rf YXNfdHlwZSAoCisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF90eXBlIChjdHh0LAor CQkJCSAgICAgICAwLAorCQkJCSAgICAgICAiYmFyIiwKKwkJCQkgICAgICAgNSwKKwkJCQkgICAg ICAgZmllbGRzX2IpKTsKKworCisgIGdjY19qaXRfZmllbGQgKmI0NCA9IGdjY19qaXRfY29udGV4 dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgIDAsCisJCQkJCQkgIGludF90eXBlLAorCQkJCQkJ ICAiZCIpOworCisgIGdjY19qaXRfZmllbGQgKmZpZWxkc19jdG9yW10gPSB7YjEsIGIyLCBiNDQs IGI1fTsKKyAgZ2NjX2ppdF9ydmFsdWUgKnZhbHVlc1tdID0gezAsMCwwLDB9OworCisgIGdjY19q aXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1Y3RvcgorICAgIChj dHh0LCAwLAorICAgICBzdHJ1Y3RfYmFyX3R5cGUsCisgICAgIDQsCisgICAgIGZpZWxkc19jdG9y LAorICAgICB2YWx1ZXMpOworCisgIENIRUNLX1ZBTFVFIChjdG9yLCBOVUxMKTsKK30KKwordm9p ZAordmVyaWZ5X2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgZ2NjX2ppdF9yZXN1bHQgKnJl c3VsdCkKK3sKKyAgLyogRW5zdXJlIHRoYXQgdGhlIGJhZCBBUEkgdXNhZ2UgcHJldmVudHMgdGhl IEFQSSBnaXZpbmcgYSBib2d1cworICAgICByZXN1bHQgYmFjay4gICovCisgIENIRUNLX1ZBTFVF IChyZXN1bHQsIE5VTEwpOworCisgIC8qIFZlcmlmeSB0aGF0IHRoZSBjb3JyZWN0IGVycm9yIG1l c3NhZ2Ugd2FzIGVtaXR0ZWQuICovCisgIENIRUNLX1NUUklOR19WQUxVRSAoZ2NjX2ppdF9jb250 ZXh0X2dldF9maXJzdF9lcnJvciAoY3R4dCksCisJCSAgICAgICJnY2Nfaml0X2NvbnRleHRfbmV3 X2NvbnN0cnVjdG9yOiBmaWVsZCBhdCBpbmRleCAyLCB3YXMgIgorCQkgICAgICAibm90IHVzZWQg d2hlbiBjcmVhdGluZyB0aGUgdW5pb24gb3Igc3RydWN0IChkKSIpOworICBDSEVDS19TVFJJTkdf VkFMVUUgKGdjY19qaXRfY29udGV4dF9nZXRfbGFzdF9lcnJvciAoY3R4dCksCisJCSAgICAgICJn Y2Nfaml0X2NvbnRleHRfbmV3X2NvbnN0cnVjdG9yOiBmaWVsZCBhdCBpbmRleCAyLCB3YXMgIgor CQkgICAgICAibm90IHVzZWQgd2hlbiBjcmVhdGluZyB0aGUgdW5pb24gb3Igc3RydWN0IChkKSIp OworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1jdG9yLXN0 cnVjdC13cm9uZy10eXBlLmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWN0b3It c3RydWN0LXdyb25nLXR5cGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uOTg3YjZiOGZjYmQKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90 ZXN0LWVycm9yLWN0b3Itc3RydWN0LXdyb25nLXR5cGUuYwpAQCAtMCwwICsxLDc2IEBACisvKgor CisgIFRlc3QgdGhhdCB0aGUgcHJvcGVyIGVycm9yIGlzIHRyaWdnZXJlZCB3aGVuIHdlIGJ1aWxk IGEgY3RvcgorICBmb3IgYW4gc3RydWN0IHR5cGUsIGJ1dCBoYXMgdGhlIHR5cGUgd3Jvbmcgb24g YSBmaWVsZC4KKworKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+ CisKKyNpbmNsdWRlICJsaWJnY2NqaXQuaCIKKyNpbmNsdWRlICJoYXJuZXNzLmgiCisKK3ZvaWQK K2NyZWF0ZV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIHZvaWQgKnVzZXJfZGF0YSkKK3sK KyAgZ2NjX2ppdF90eXBlICppbnRfdHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4 dCwKKyAgICBHQ0NfSklUX1RZUEVfSU5UKTsKKyAgZ2NjX2ppdF90eXBlICpmbG9hdF90eXBlID0g Z2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LAorICAgIEdDQ19KSVRfVFlQRV9GTE9BVCk7 CisKKyAgZ2NjX2ppdF9maWVsZCAqYjEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0 LAorCQkJCQkJIDAsCisJCQkJCQkgaW50X3R5cGUsCisJCQkJCQkgImEiKTsKKyAgZ2NjX2ppdF9m aWVsZCAqYjIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJIDAsCisJ CQkJCQkgaW50X3R5cGUsCisJCQkJCQkgImIiKTsKKyAgZ2NjX2ppdF9maWVsZCAqYjMgPSBnY2Nf aml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJIDAsCisJCQkJCQkgaW50X3R5cGUs CisJCQkJCQkgImMiKTsKKyAgZ2NjX2ppdF9maWVsZCAqZmllbGRzX2JbXSA9IHtiMSwgYjIsIGIz fTsKKworICBnY2Nfaml0X3R5cGUgKnN0cnVjdF9iYXJfdHlwZSA9CisgICAgZ2NjX2ppdF9zdHJ1 Y3RfYXNfdHlwZSAoCisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF90eXBlIChjdHh0 LAorCQkJCSAgICAgICAwLAorCQkJCSAgICAgICAiYmFyIiwKKwkJCQkgICAgICAgMywKKwkJCQkg ICAgICAgZmllbGRzX2IpKTsKKyAgZ2NjX2ppdF9ydmFsdWUgKmZydiA9IGdjY19qaXRfY29udGV4 dF9uZXdfcnZhbHVlX2Zyb21fZG91YmxlIChjdHh0LAorCQkJCQkJCQlmbG9hdF90eXBlLAorCQkJ CQkJCQkxMik7CisKKyAgZ2NjX2ppdF9maWVsZCAqZmllbGRzX2N0b3JbXSA9IHtiMn07CisgIGdj Y19qaXRfcnZhbHVlICp2YWx1ZXNbXSA9IHtmcnZ9OworCisgIGdjY19qaXRfcnZhbHVlICpjdG9y ID0gZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1Y3RvcgorICAgIChjdHh0LCAwLAorICAgICBz dHJ1Y3RfYmFyX3R5cGUsCisgICAgIDEsCisgICAgIGZpZWxkc19jdG9yLAorICAgICB2YWx1ZXMp OworCisgIENIRUNLX1ZBTFVFIChjdG9yLCBOVUxMKTsKK30KKwordm9pZAordmVyaWZ5X2NvZGUg KGdjY19qaXRfY29udGV4dCAqY3R4dCwgZ2NjX2ppdF9yZXN1bHQgKnJlc3VsdCkKK3sKKyAgLyog RW5zdXJlIHRoYXQgdGhlIGJhZCBBUEkgdXNhZ2UgcHJldmVudHMgdGhlIEFQSSBnaXZpbmcgYSBi b2d1cworICAgICByZXN1bHQgYmFjay4gICovCisgIENIRUNLX1ZBTFVFIChyZXN1bHQsIE5VTEwp OworCisgIC8qIFZlcmlmeSB0aGF0IHRoZSBjb3JyZWN0IGVycm9yIG1lc3NhZ2Ugd2FzIGVtaXR0 ZWQuICovCisgIENIRUNLX1NUUklOR19WQUxVRSAoZ2NjX2ppdF9jb250ZXh0X2dldF9maXJzdF9l cnJvciAoY3R4dCksCisJCSAgICAgICJnY2Nfaml0X2NvbnRleHRfbmV3X2NvbnN0cnVjdG9yOiB2 YWx1ZSBhbmQgZmllbGQgbm90ICIKKwkJICAgICAgInRoZSBzYW1lIHVucXVhbGlmaWVkIHR5cGUs ICIKKwkJICAgICAgImF0IGluZGV4IDAgKGZpZWxkIHR5cGU6IGludCkodmFsdWUgdHlwZTogZmxv YXQpIik7CisgIENIRUNLX1NUUklOR19WQUxVRSAoZ2NjX2ppdF9jb250ZXh0X2dldF9sYXN0X2Vy cm9yIChjdHh0KSwKKwkJICAgICAgImdjY19qaXRfY29udGV4dF9uZXdfY29uc3RydWN0b3I6IHZh bHVlIGFuZCBmaWVsZCBub3QgIgorCQkgICAgICAidGhlIHNhbWUgdW5xdWFsaWZpZWQgdHlwZSwg IgorCQkgICAgICAiYXQgaW5kZXggMCAoZmllbGQgdHlwZTogaW50KSh2YWx1ZSB0eXBlOiBmbG9h dCkiKTsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItY3Rv ci11bmlvbi13cm9uZy1maWVsZC1uYW1lLmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVy cm9yLWN0b3ItdW5pb24td3JvbmctZmllbGQtbmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi42NWM4NTA2MGY2ZgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0 c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItY3Rvci11bmlvbi13cm9uZy1maWVsZC1uYW1lLmMKQEAg LTAsMCArMSw4MCBAQAorLyoKKworICBUZXN0IHRoYXQgdGhlIHByb3BlciBlcnJvciBpcyB0cmln Z2VyZWQgd2hlbiB3ZSBidWlsZCBhIGN0b3IKKyAgZm9yIGFuIHVuaW9uIHR5cGUsIGJ1dCBkb24n dCBwcm92aWRlIGEgY29ycmVjdCBmaWVsZC4KKworKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgor I2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJsaWJnY2NqaXQuaCIKKyNpbmNsdWRlICJo YXJuZXNzLmgiCisKK3ZvaWQKK2NyZWF0ZV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIHZv aWQgKnVzZXJfZGF0YSkKK3sKKyAgZ2NjX2ppdF90eXBlICppbnRfdHlwZSA9IGdjY19qaXRfY29u dGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfSU5UKTsKKyAgZ2NjX2ppdF90 eXBlICpmbG9hdF90eXBlID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LAorICAgIEdD Q19KSVRfVFlQRV9GTE9BVCk7CisgIGdjY19qaXRfdHlwZSAqZG91YmxlX3R5cGUgPSBnY2Nfaml0 X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsCisgICAgR0NDX0pJVF9UWVBFX0RPVUJMRSk7CisKKyAg Z2NjX2ppdF9maWVsZCAqYjEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJ CQkJIDAsCisJCQkJCQkgaW50X3R5cGUsCisJCQkJCQkgImEiKTsKKyAgZ2NjX2ppdF9maWVsZCAq YjIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJIDAsCisJCQkJCQkg ZmxvYXRfdHlwZSwKKwkJCQkJCSAiYiIpOworICBnY2Nfaml0X2ZpZWxkICpiMyA9IGdjY19qaXRf Y29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgMCwKKwkJCQkJCSBkb3VibGVfdHlwZSwK KwkJCQkJCSAiYyIpOworICBnY2Nfaml0X2ZpZWxkICpmaWVsZHNfYltdID0ge2IxLCBiMiwgYjN9 OworCisgIGdjY19qaXRfdHlwZSAqdW5pb25fYmFyX3R5cGUgPQorICAgICAgZ2NjX2ppdF9jb250 ZXh0X25ld191bmlvbl90eXBlIChjdHh0LAorCQkJCSAgICAgIDAsCisJCQkJICAgICAgImJhciIs CisJCQkJICAgICAgMywKKwkJCQkgICAgICBmaWVsZHNfYik7CisKKyAgZ2NjX2ppdF9maWVsZCAq YjMzID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAgMCwKKwkJCQkJ CSAgZG91YmxlX3R5cGUsCisJCQkJCQkgICJjYyIpOyAvKiB3cm9uZyAqLworCisKKyAgZ2NjX2pp dF9maWVsZCAqZmllbGRzX2N0b3JbXSA9IHtiMzN9OworICBnY2Nfaml0X3J2YWx1ZSAqdmFsdWVz W10gPSB7MH07CisKKyAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3 X2NvbnN0cnVjdG9yCisgICAgKGN0eHQsIDAsCisgICAgIHVuaW9uX2Jhcl90eXBlLAorICAgICAx LAorICAgICBmaWVsZHNfY3RvciwKKyAgICAgdmFsdWVzKTsKKworICBDSEVDS19WQUxVRSAoY3Rv ciwgTlVMTCk7Cit9CisKK3ZvaWQKK3ZlcmlmeV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQs IGdjY19qaXRfcmVzdWx0ICpyZXN1bHQpCit7CisgIC8qIEVuc3VyZSB0aGF0IHRoZSBiYWQgQVBJ IHVzYWdlIHByZXZlbnRzIHRoZSBBUEkgZ2l2aW5nIGEgYm9ndXMKKyAgICAgcmVzdWx0IGJhY2su ICAqLworICBDSEVDS19WQUxVRSAocmVzdWx0LCBOVUxMKTsKKworICAvKiBWZXJpZnkgdGhhdCB0 aGUgY29ycmVjdCBlcnJvciBtZXNzYWdlIHdhcyBlbWl0dGVkLiAqLworICBDSEVDS19TVFJJTkdf VkFMVUUgKGdjY19qaXRfY29udGV4dF9nZXRfZmlyc3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAi Z2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1Y3RvcjogZmllbGQgYXQgIgorCQkgICAgICAiaW5k ZXggMCwgd2FzIG5vdCB1c2VkIHdoZW4gY3JlYXRpbmcgdGhlICIKKwkJICAgICAgInVuaW9uIG9y IHN0cnVjdCAoY2MpIik7CisgIENIRUNLX1NUUklOR19WQUxVRSAoZ2NjX2ppdF9jb250ZXh0X2dl dF9sYXN0X2Vycm9yIChjdHh0KSwKKwkJICAgICAgImdjY19qaXRfY29udGV4dF9uZXdfY29uc3Ry dWN0b3I6IGZpZWxkIGF0ICIKKwkJICAgICAgImluZGV4IDAsIHdhcyBub3QgdXNlZCB3aGVuIGNy ZWF0aW5nIHRoZSAiCisJCSAgICAgICJ1bmlvbiBvciBzdHJ1Y3QgKGNjKSIpOworfQpkaWZmIC0t Z2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1nbG9iYWwtYWxscmVhZHktaW5p dC5jIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1nbG9iYWwtYWxscmVhZHktaW5p dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43ZWFmMTgyMDI5ZAot LS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItZ2xvYmFs LWFsbHJlYWR5LWluaXQuYwpAQCAtMCwwICsxLDQ2IEBACisvKgorCisgIFRlc3QgdGhhdCB3ZSBj YW4ndCBzZXQgdGhlIGluaXRpYWxpemVyIG9uIGEgZ2xvYmFsIHR3aWNlLgorCisqLworCisjaW5j bHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImxpYmdjY2pp dC5oIgorI2luY2x1ZGUgImhhcm5lc3MuaCIKKwordm9pZAorY3JlYXRlX2NvZGUgKGdjY19qaXRf Y29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9kYXRhKQoreworICBnY2Nfaml0X3R5cGUgKmludF90 eXBlID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCBHQ0NfSklUX1RZUEVfSU5UKTsK KworICBnY2Nfaml0X2x2YWx1ZSAqYmFyID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgK KyAgICBjdHh0LCBOVUxMLAorICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgIGludF90 eXBlLAorICAgICJnbG9iYWxfbHZhbHVlaW5pdF9pbnRfMCIpOworCisgIGdjY19qaXRfZ2xvYmFs X3NldF9pbml0aWFsaXplcl9ydmFsdWUgKAorICAgIGJhciwKKyAgICBnY2Nfaml0X2NvbnRleHRf bmV3X3J2YWx1ZV9mcm9tX2ludCAoY3R4dCwgaW50X3R5cGUsIDEpKTsKKyAgZ2NjX2ppdF9nbG9i YWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoCisgICAgYmFyLAorICAgIGdjY19qaXRfY29udGV4 dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0LCBpbnRfdHlwZSwgMSkpOworfQorCit2b2lkCit2 ZXJpZnlfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCBnY2Nfaml0X3Jlc3VsdCAqcmVzdWx0 KQoreworICAvKiBFbnN1cmUgdGhhdCB0aGUgYmFkIEFQSSB1c2FnZSBwcmV2ZW50cyB0aGUgQVBJ IGdpdmluZyBhIGJvZ3VzCisgICAgIHJlc3VsdCBiYWNrLiAgKi8KKyAgQ0hFQ0tfVkFMVUUgKHJl c3VsdCwgTlVMTCk7CisKKyAgLyogVmVyaWZ5IHRoYXQgdGhlIGNvcnJlY3QgZXJyb3IgbWVzc2Fn ZSB3YXMgZW1pdHRlZC4gKi8KKyAgQ0hFQ0tfU1RSSU5HX1ZBTFVFIChnY2Nfaml0X2NvbnRleHRf Z2V0X2ZpcnN0X2Vycm9yIChjdHh0KSwKKwkJICAgICAgImdjY19qaXRfZ2xvYmFsX3NldF9pbml0 aWFsaXplcl9ydmFsdWU6IGdsb2JhbCB2YXJpYWJsZSAiCisJCSAgICAgICJhbGxyZWFkeSBpbml0 aWFsaXplZDogZ2xvYmFsX2x2YWx1ZWluaXRfaW50XzAiKTsKKyAgQ0hFQ0tfU1RSSU5HX1ZBTFVF IChnY2Nfaml0X2NvbnRleHRfZ2V0X2xhc3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAiZ2NjX2pp dF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZTogZ2xvYmFsIHZhcmlhYmxlICIKKwkJICAg ICAgImFsbHJlYWR5IGluaXRpYWxpemVkOiBnbG9iYWxfbHZhbHVlaW5pdF9pbnRfMCIpOworfQpk aWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1nbG9iYWwtY29tbW9u LXNlY3Rpb24uYyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItZ2xvYmFsLWNvbW1v bi1zZWN0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjAyZDli MjFmZjhiCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJv ci1nbG9iYWwtY29tbW9uLXNlY3Rpb24uYwpAQCAtMCwwICsxLDU0IEBACisvKgorCisgIFRlc3Qg dGhhdCB0aGUgcHJvcGVyIGVycm9yIGlzIHRyaWdnZXJlZCB3aGVuIHdlIGluaXRpYWxpemUKKyAg YSBnbG9iYWwgd2l0aCBhIGdsb2JhbCB0aGF0IGhhcyBubyBERUNMX0lOSVRJQUwgKGFuZCBpcyBt YXJrZWQKKyAgREVDTF9DT01NT04oTk9ERSkgPSAxKS4KKworKi8KKworI2luY2x1ZGUgPHN0ZGxp Yi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJsaWJnY2NqaXQuaCIKKyNpbmNs dWRlICJoYXJuZXNzLmgiCisKK3ZvaWQKK2NyZWF0ZV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0 eHQsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgZ2NjX2ppdF90eXBlICppbnRfdHlwZSA9IGdjY19q aXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfSU5UKTsKKworICAv KiBjb25zdCBpbnQgZm9vOworICAgICBpbnQgYmFyID0gZm9vOworICAgKi8KKyAgZ2NjX2ppdF9s dmFsdWUgKmZvbyA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgY3R4dCwgTlVM TCwKKyAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICBnY2Nfaml0X3R5cGVfZ2V0X2Nv bnN0IChpbnRfdHlwZSksCisgICAgImdsb2JhbF9jb25zdF9pbnRfMCIpOworICBnY2Nfaml0X2x2 YWx1ZSAqYmFyID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICBjdHh0LCBOVUxM LAorICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgIGludF90eXBlLAorICAgICJnbG9i YWxfbHZhbHVlaW5pdF9pbnRfMCIpOworICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJf cnZhbHVlIChiYXIsCisJCQkJCSBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKGZvbykpOworfQor Cit2b2lkCit2ZXJpZnlfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCBnY2Nfaml0X3Jlc3Vs dCAqcmVzdWx0KQoreworICAvKiBFbnN1cmUgdGhhdCB0aGUgYmFkIEFQSSB1c2FnZSBwcmV2ZW50 cyB0aGUgQVBJIGdpdmluZyBhIGJvZ3VzCisgICAgIHJlc3VsdCBiYWNrLiAgKi8KKyAgQ0hFQ0tf VkFMVUUgKHJlc3VsdCwgTlVMTCk7CisKKyAgLyogVmVyaWZ5IHRoYXQgdGhlIGNvcnJlY3QgZXJy b3IgbWVzc2FnZSB3YXMgZW1pdHRlZC4gKi8KKyAgQ0hFQ0tfU1RSSU5HX1ZBTFVFIChnY2Nfaml0 X2NvbnRleHRfZ2V0X2ZpcnN0X2Vycm9yIChjdHh0KSwKKwkJICAgICAgImNhbid0IGluaXRpYWxp emUgZ2xvYmFsX2x2YWx1ZWluaXRfaW50XzAgIgorCQkgICAgICAid2l0aCBnbG9iYWxfY29uc3Rf aW50XzAgc2luY2UgaXQgaGFzIG5vICIKKwkJICAgICAgImluaXRpYWwgdmFsdWUgc2V0Iik7Cisg IENIRUNLX1NUUklOR19WQUxVRSAoZ2NjX2ppdF9jb250ZXh0X2dldF9sYXN0X2Vycm9yIChjdHh0 KSwKKwkJICAgICAgImNhbid0IGluaXRpYWxpemUgZ2xvYmFsX2x2YWx1ZWluaXRfaW50XzAgIgor CQkgICAgICAid2l0aCBnbG9iYWxfY29uc3RfaW50XzAgc2luY2UgaXQgaGFzIG5vICIKKwkJICAg ICAgImluaXRpYWwgdmFsdWUgc2V0Iik7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2pp dC5kZy90ZXN0LWVycm9yLWdsb2JhbC1pbml0LXRvby1zbWFsbC1hcnJheS5jIGIvZ2NjL3Rlc3Rz dWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1nbG9iYWwtaW5pdC10b28tc21hbGwtYXJyYXkuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTM3YmFlNmM2YjUKLS0tIC9kZXYv bnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWdsb2JhbC1pbml0LXRv by1zbWFsbC1hcnJheS5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisKKyAgVGVzdCB0aGF0IHRoZSBw cm9wZXIgZXJyb3IgaXMgdHJpZ2dlcmVkIHdoZW4gd2UgaW5pdGlhbGl6ZQorICBhIGdsb2JhbCB3 aXRoIGFub3RoZXIgbm9uLWNvbnN0IGdsb2JhbCdzIHJ2YWx1ZS4KKworICBVc2luZyBnY2Nfaml0 X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlKCkKKworKi8KKworI2luY2x1ZGUgPHN0ZGxp Yi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJsaWJnY2NqaXQuaCIKKyNpbmNs dWRlICJoYXJuZXNzLmgiCisKK3ZvaWQKK2NyZWF0ZV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0 eHQsIHZvaWQgKnVzZXJfZGF0YSkKK3sgLyogZmxvYXQgZm9vWzFdID0gezEsMn07ICovCisKKyAg Z2NjX2ppdF90eXBlICpmbG9hdF90eXBlID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0 LAorICAgIEdDQ19KSVRfVFlQRV9GTE9BVCk7CisgIGdjY19qaXRfdHlwZSAqYXJyX3R5cGUgPSBn Y2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X3R5cGUgKGN0eHQsCisJCQkJCQkJICAgMCwKKwkJCQkJ CQkgICBmbG9hdF90eXBlLAorCQkJCQkJCSAgIDEpOworICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF8x ID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgIGN0eHQsIGZsb2F0 X3R5cGUsIDEpOworICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF8yID0gZ2NjX2ppdF9jb250ZXh0X25l d19ydmFsdWVfZnJvbV9pbnQgKAorICAgIGN0eHQsIGZsb2F0X3R5cGUsIDIpOworCisgIGdjY19q aXRfcnZhbHVlICp2YWx1ZXNbXSA9IHtydmFsXzEsIHJ2YWxfMn07CisKKyAgZ2NjX2ppdF9ydmFs dWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2NvbnN0cnVjdG9yIChjdHh0LAorCQkJCQkJ CSAgMCwKKwkJCQkJCQkgIGFycl90eXBlLAorCQkJCQkJCSAgMiwKKwkJCQkJCQkgIDAsCisJCQkJ CQkJICB2YWx1ZXMpOworICBpZiAoIWN0b3IpCisgICAgcmV0dXJuOworICAKKyAgZ2NjX2ppdF9s dmFsdWUgKmZvbyA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgY3R4dCwgTlVM TCwKKyAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICBhcnJfdHlwZSwKKyAgICAiZ2xv YmFsX2Zsb2F0YXJyXzEyIik7CisgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFs dWUgKGZvbywgY3Rvcik7Cit9CisKK3ZvaWQKK3ZlcmlmeV9jb2RlIChnY2Nfaml0X2NvbnRleHQg KmN0eHQsIGdjY19qaXRfcmVzdWx0ICpyZXN1bHQpCit7CisgIC8qIEVuc3VyZSB0aGF0IHRoZSBi YWQgQVBJIHVzYWdlIHByZXZlbnRzIHRoZSBBUEkgZ2l2aW5nIGEgYm9ndXMKKyAgICAgcmVzdWx0 IGJhY2suICAqLworICBDSEVDS19WQUxVRSAocmVzdWx0LCBOVUxMKTsKKworICAvKiBWZXJpZnkg dGhhdCB0aGUgY29ycmVjdCBlcnJvciBtZXNzYWdlIHdhcyBlbWl0dGVkLiAqLworICBDSEVDS19T VFJJTkdfVkFMVUUgKGdjY19qaXRfY29udGV4dF9nZXRfZmlyc3RfZXJyb3IgKGN0eHQpLAorCQkg ICAgICAiZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1Y3RvcjogYXJyYXkgY29uc3RydWN0b3Ig aGFzIgorCQkgICAgICAiIG1vcmUgdmFsdWVzIHRoYW4gdGhlIGFycmF5IHR5cGUncyBsZW5ndGgi KTsKKyAgQ0hFQ0tfU1RSSU5HX1ZBTFVFIChnY2Nfaml0X2NvbnRleHRfZ2V0X2xhc3RfZXJyb3Ig KGN0eHQpLAorCQkgICAgICAiZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1Y3RvcjogYXJyYXkg Y29uc3RydWN0b3IgaGFzIgorCQkgICAgICAiIG1vcmUgdmFsdWVzIHRoYW4gdGhlIGFycmF5IHR5 cGUncyBsZW5ndGgiKTsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3Qt ZXJyb3ItZ2xvYmFsLWx2YWx1ZS1pbml0LmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVy cm9yLWdsb2JhbC1sdmFsdWUtaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi5jNmUxZjBlYTRmZQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvaml0 LmRnL3Rlc3QtZXJyb3ItZ2xvYmFsLWx2YWx1ZS1pbml0LmMKQEAgLTAsMCArMSw2MCBAQAorLyoK KworICBUZXN0IHRoYXQgdGhlIHByb3BlciBlcnJvciBpcyB0cmlnZ2VyZWQgd2hlbiB3ZSBpbml0 aWFsaXplCisgIGEgZ2xvYmFsIHdpdGggYW5vdGhlciBub24tY29uc3QgZ2xvYmFsJ3MgcnZhbHVl LgorCisgIFVzaW5nIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUoKQorCisq LworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUg ImxpYmdjY2ppdC5oIgorI2luY2x1ZGUgImhhcm5lc3MuaCIKKwordm9pZAorY3JlYXRlX2NvZGUg KGdjY19qaXRfY29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9kYXRhKQoreworICBnY2Nfaml0X3R5 cGUgKmludF90eXBlID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LAorICAgIEdDQ19K SVRfVFlQRV9JTlQpOworCisgIGdjY19qaXRfbHZhbHVlICpmb287CisgIHsgLyogaW50IGJhcjsg Ki8KKyAgICBmb28gPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwg TlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgaW50X3R5cGUsCisg ICAgICAiZ2xvYmFsX2x2YWx1ZWluaXRfaW50MSIpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFs ID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50 X3R5cGUsIDMpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZv bywKKyAgICAgIHJ2YWwpOworICB9CisgIHsgLyogaW50IGZvbyA9IGJhcjsgKi8KKwkgICAgIAor ICAgIGdjY19qaXRfbHZhbHVlICpiYXIgPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAor ICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAg aW50X3R5cGUsCisgICAgICAiZ2xvYmFsX2x2YWx1ZWluaXRfaW50MiIpOyAKKyAgICBnY2Nfaml0 X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChiYXIsCisJCQkJCSAgIGdjY19qaXRfbHZh bHVlX2FzX3J2YWx1ZSAoZm9vKSk7CisgIH0KK30KKwordm9pZAordmVyaWZ5X2NvZGUgKGdjY19q aXRfY29udGV4dCAqY3R4dCwgZ2NjX2ppdF9yZXN1bHQgKnJlc3VsdCkKK3sKKyAgLyogRW5zdXJl IHRoYXQgdGhlIGJhZCBBUEkgdXNhZ2UgcHJldmVudHMgdGhlIEFQSSBnaXZpbmcgYSBib2d1cwor ICAgICByZXN1bHQgYmFjay4gICovCisgIENIRUNLX1ZBTFVFIChyZXN1bHQsIE5VTEwpOworCisg IC8qIFZlcmlmeSB0aGF0IHRoZSBjb3JyZWN0IGVycm9yIG1lc3NhZ2Ugd2FzIGVtaXR0ZWQuICov CisgIENIRUNLX1NUUklOR19WQUxVRSAoZ2NjX2ppdF9jb250ZXh0X2dldF9maXJzdF9lcnJvciAo Y3R4dCksCisJCSAgICAgICJpbml0IHJ2YWx1ZSBmb3IgdGhlIGdsb2JhbCB2YXJpYWJsZSAiCisJ CSAgICAgICJnbG9iYWxfbHZhbHVlaW5pdF9pbnQyIGRvZXMgbm90IHNlZW0gdG8gYmUgY29uc3Rh bnQiKTsKKyAgQ0hFQ0tfU1RSSU5HX1ZBTFVFIChnY2Nfaml0X2NvbnRleHRfZ2V0X2xhc3RfZXJy b3IgKGN0eHQpLAorCQkgICAgICAiaW5pdCBydmFsdWUgZm9yIHRoZSBnbG9iYWwgdmFyaWFibGUg IgorCQkgICAgICAiZ2xvYmFsX2x2YWx1ZWluaXRfaW50MiBkb2VzIG5vdCBzZWVtIHRvIGJlIGNv bnN0YW50Iik7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9y LWdsb2JhbC1ub25jb25zdC1pbml0LmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9y LWdsb2JhbC1ub25jb25zdC1pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLmQwNGRiOGJhOGFiCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQu ZGcvdGVzdC1lcnJvci1nbG9iYWwtbm9uY29uc3QtaW5pdC5jCkBAIC0wLDAgKzEsODAgQEAKKy8q CisKKyAgVGVzdCB0aGF0IHRoZSBwcm9wZXIgZXJyb3IgaXMgdHJpZ2dlcmVkIHdoZW4gd2UgaW5p dGlhbGl6ZQorICBhIGdsb2JhbCB3aXRoIGEgZnVuY3Rpb24gY2FsbC4KKworICBVc2luZyBnY2Nf aml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlKCkKKworKi8KKworI2luY2x1ZGUgPHN0 ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJsaWJnY2NqaXQuaCIKKyNp bmNsdWRlICJoYXJuZXNzLmgiCisKK3ZvaWQKK2NyZWF0ZV9jb2RlIChnY2Nfaml0X2NvbnRleHQg KmN0eHQsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgZ2NjX2ppdF90eXBlICppbnRfdHlwZSA9IGdj Y19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfSU5UKTsKKyAg CisgIGdjY19qaXRfZnVuY3Rpb24gKmZuX2ludF8zOyAKKyAgeyAvKiBpbnQgZm9vICgpIHsgaW50 IGxvY2FsID0gMzsgcmV0dXJuIGxvY2FsO30gKi8KKyAgICBmbl9pbnRfMyA9CisgICAgICBnY2Nf aml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LAorCQkJCSAgICAwLAorCQkJCSAgICBHQ0Nf SklUX0ZVTkNUSU9OX0VYUE9SVEVELAorCQkJCSAgICBpbnRfdHlwZSwKKwkJCQkgICAgImZuX2lu dF8zIiwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCk7CisgICAgZ2NjX2ppdF9i bG9jayAqYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZm5faW50XzMsICJzdGFy dCIpOworICAgIGdjY19qaXRfbHZhbHVlICpsb2NhbCA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2xv Y2FsIChmbl9pbnRfMywKKwkJCQkJCQkwLAorCQkJCQkJCWludF90eXBlLAorCQkJCQkJCSJsb2Nh bCIpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFs dWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDMpOworCisgICAgZ2NjX2ppdF9i bG9ja19hZGRfYXNzaWdubWVudCAoYmxvY2ssIDAsIGxvY2FsLCBydmFsKTsKKworICAgIGdjY19q aXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuIChibG9jaywKKwkJCQkgICAwLAorCQkJCSAgIGdjY19q aXRfbHZhbHVlX2FzX3J2YWx1ZShsb2NhbCkpOworCQkJCQkJCSAgCisgIH0KKworICB7IC8qIGlu dCBiYXIgPSBmb28oKTsgKi8KKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbCA9CisgICAgICBnY2Nf aml0X2NvbnRleHRfbmV3X2NhbGwgKGN0eHQsCisJCQkgICAgICAgIDAsCisJCQkJZm5faW50XzMs CisJCQkJMCwwKTsKKwkJCQkJCSAgICAgCisgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9ICBnY2Nf aml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJ VF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBpbnRfdHlwZSwKKyAgICAgICJnbG9iYWxfbm9uY29u c3RfaW50Iik7IAorICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZv bywKKyAgICAgIHJ2YWwpOworICB9Cit9CisKK3ZvaWQKK3ZlcmlmeV9jb2RlIChnY2Nfaml0X2Nv bnRleHQgKmN0eHQsIGdjY19qaXRfcmVzdWx0ICpyZXN1bHQpCit7CisgIC8qIEVuc3VyZSB0aGF0 IHRoZSBiYWQgQVBJIHVzYWdlIHByZXZlbnRzIHRoZSBBUEkgZ2l2aW5nIGEgYm9ndXMKKyAgICAg cmVzdWx0IGJhY2suICAqLworICBDSEVDS19WQUxVRSAocmVzdWx0LCBOVUxMKTsKKworICAvKiBW ZXJpZnkgdGhhdCB0aGUgY29ycmVjdCBlcnJvciBtZXNzYWdlIHdhcyBlbWl0dGVkLiAqLworICBD SEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29udGV4dF9nZXRfZmlyc3RfZXJyb3IgKGN0eHQp LAorCQkgICAgICAiaW5pdCBydmFsdWUgZm9yIHRoZSBnbG9iYWwgdmFyaWFibGUgIgorCQkgICAg ICAiZ2xvYmFsX25vbmNvbnN0X2ludCBkb2VzIG5vdCBzZWVtIHRvIGJlIGNvbnN0YW50Iik7Cisg IENIRUNLX1NUUklOR19WQUxVRSAoZ2NjX2ppdF9jb250ZXh0X2dldF9sYXN0X2Vycm9yIChjdHh0 KSwKKwkJICAgICAgImluaXQgcnZhbHVlIGZvciB0aGUgZ2xvYmFsIHZhcmlhYmxlICIKKwkJICAg ICAgImdsb2JhbF9ub25jb25zdF9pbnQgZG9lcyBub3Qgc2VlbSB0byBiZSBjb25zdGFudCIpOwor fQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1nbG9iYWwtaW5pdC1ydmFs dWUuYyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZ2xvYmFsLWluaXQtcnZhbHVlLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmI3ZThjOWNmM2U1Ci0tLSAvZGV2 L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1nbG9iYWwtaW5pdC1ydmFsdWUu YwpAQCAtMCwwICsxLDEyMTEgQEAKKworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxz dHJpbmcuaD4KKworI2luY2x1ZGUgImxpYmdjY2ppdC5oIgorI2luY2x1ZGUgImhhcm5lc3MuaCIK KworLyogVGhpcyB0ZXN0Y2FzZSBjaGVja3MgdGhhdCBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlh bGl6ZXJfcnZhbHVlKCkgd29ya3MKKyAgIHdpdGggcnZhbHVlcywgZXNwZWNpYWxseSB3aXRoIGdj Y19qaXRfY29udGV4dF9uZXdfY29uc3RydWN0b3IoKSBmb3IKKyAgIHN0cnVjdCwgdW5pb25zIGFu ZCBhcnJheXMuICovCisKK3ZvaWQKK2NyZWF0ZV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQs IHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgZ2NjX2ppdF90eXBlICppbnRfdHlwZSA9IGdjY19qaXRf Y29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfSU5UKTsKKyAgZ2NjX2pp dF90eXBlICpzaG9ydF90eXBlID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LAorICAg IEdDQ19KSVRfVFlQRV9TSE9SVCk7CisgIGdjY19qaXRfdHlwZSAqcGludF90eXBlID0gZ2NjX2pp dF90eXBlX2dldF9wb2ludGVyIChpbnRfdHlwZSk7CisgIGdjY19qaXRfdHlwZSAqZG91YmxlX3R5 cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsCisgICAgR0NDX0pJVF9UWVBFX0RP VUJMRSk7CisgIGdjY19qaXRfdHlwZSAqZmxvYXRfdHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRf dHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfRkxPQVQpOworICBnY2Nfaml0X3R5cGUgKmJv b2xfdHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZ UEVfQk9PTCk7CisgIGdjY19qaXRfdHlwZSAqY2hhcl90eXBlID0gZ2NjX2ppdF9jb250ZXh0X2dl dF90eXBlIChjdHh0LAorICAgIEdDQ19KSVRfVFlQRV9DSEFSKTsKKyAgZ2NjX2ppdF90eXBlICpj cGNoYXJfdHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklU X1RZUEVfQ09OU1RfQ0hBUl9QVFIpOworICBnY2Nfaml0X3R5cGUgKnNpemVfdHlwZSA9IGdjY19q aXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfU0laRV9UKTsKKwor ICAvKiBNYWtlIGEgc3RydWN0OiBzdHJ1Y3QgZmkgeyBmbG9hdCBmOyBpbnQgaTt9ICovCisgIGdj Y19qaXRfZmllbGQgKmZpX2YgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJ CQkJICAgMCwKKwkJCQkJCSAgIGZsb2F0X3R5cGUsCisJCQkJCQkgICAiZiIpOworICBnY2Nfaml0 X2ZpZWxkICpmaV9pID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAg IDAsCisJCQkJCQkgICBpbnRfdHlwZSwKKwkJCQkJCSAgICJpIik7CisgIGdjY19qaXRfZmllbGQg KmZpZWxkc1tdID0ge2ZpX2YsIGZpX2l9OworCisgIGdjY19qaXRfdHlwZSAqc3RydWN0X2ZpX3R5 cGUgPQorICAgIGdjY19qaXRfc3RydWN0X2FzX3R5cGUgKAorICAgICAgZ2NjX2ppdF9jb250ZXh0 X25ld19zdHJ1Y3RfdHlwZSAoY3R4dCwKKwkJCQkgICAgICAgMCwKKwkJCQkgICAgICAgImZpIiwK KwkJCQkgICAgICAgMiwKKwkJCQkgICAgICAgZmllbGRzKSk7CisKKyAgLyogTWFrZSBhIHN0cnVj dDoKKworICAgICBzdHJ1Y3QgYmFyIHsKKyAgICAgICBpbnQgaWk7CisgICAgICAgc3RydWN0IGZp IGZpOworICAgICAgIGZsb2F0IGZmOworICAgICB9CisgICovCisgIGdjY19qaXRfZmllbGQgKmJh cl9mZiA9IGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJICAwLAorCQkJCSAg ZmxvYXRfdHlwZSwKKwkJCQkgICJmZiIpOworICBnY2Nfaml0X2ZpZWxkICpiYXJfaWkgPSBnY2Nf aml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCSAgMCwKKwkJCQkgIGludF90eXBlLAor CQkJCSAgImlpIik7CisgIGdjY19qaXRfZmllbGQgKmJhcl9maSA9IGdjY19qaXRfY29udGV4dF9u ZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgMCwKKwkJCQkJCSBzdHJ1Y3RfZmlfdHlwZSwKKwkJCQkJ CSAiZmkiKTsKKyAgZ2NjX2ppdF9maWVsZCAqZmllbGRzMltdID0ge2Jhcl9mZiwgYmFyX2ZpLCBi YXJfaWl9OworCisgIGdjY19qaXRfdHlwZSAqc3RydWN0X2Jhcl90eXBlID0KKyAgICBnY2Nfaml0 X3N0cnVjdF9hc190eXBlICgKKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfc3RydWN0X3R5cGUg KGN0eHQsCisJCQkJICAgICAgIDAsCisJCQkJICAgICAgICJiYXIiLAorCQkJCSAgICAgICAzLAor CQkJCSAgICAgICBmaWVsZHMyKSk7CisKKyAgLyogTWFrZSBhbiB1bmlvbjoKKworICAgICB1bmlv biB1YmFyIHsKKyAgICAgICBmbG9hdCBmZjsKKyAgICAgICBpbnQgaWk7CisgICAgIH07CisgICov CisgIGdjY19qaXRfZmllbGQgKnViYXJfZmYgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChj dHh0LAorCQkJCSAgMCwKKwkJCQkgIGZsb2F0X3R5cGUsCisJCQkJICAiZmYiKTsKKyAgZ2NjX2pp dF9maWVsZCAqdWJhcl9paSA9IGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJ ICAwLAorCQkJCSAgaW50X3R5cGUsCisJCQkJICAiaWkiKTsKKyAgZ2NjX2ppdF9maWVsZCAqZmll bGRzM1tdID0ge3ViYXJfZmYsIHViYXJfaWl9OworCisgIGdjY19qaXRfdHlwZSAqdWJhciA9IGdj Y19qaXRfY29udGV4dF9uZXdfdW5pb25fdHlwZSAoY3R4dCwKKwkJCQkJCSAgICAgICAwLAorCQkJ CQkJICAgICAgICJ1YmFyIiwKKwkJCQkJCSAgICAgICAyLAorCQkJCQkJICAgICAgIGZpZWxkczMp OworCisgIHsgLyogc3RydWN0IGJhciBiYXIgPSB7MSwgezIsIDN9LCA0fTsKKyAgICAgICBJLmUu IG5lc3RlZCBjdG9ycworICAgICAqLworICAgIGdjY19qaXRfbHZhbHVlICpiYXIgPSBnY2Nfaml0 X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9H TE9CQUxfRVhQT1JURUQsCisgICAgICBzdHJ1Y3RfYmFyX3R5cGUsCisgICAgICAiZ2xvYmFsX3N0 cnVjdF9iYXJfMiIpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmZ2YWwgPSBnY2Nfaml0X2NvbnRl eHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBmbG9hdF90eXBlLCAyKTsKKyAg ICBnY2Nfaml0X3J2YWx1ZSAqaXZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21f aW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAzKTsKKworICAgIGdjY19qaXRfcnZhbHVlICp2 YWxzW10gPSB7IGZ2YWwsIGl2YWx9OworICAgIGdjY19qaXRfZmllbGQgKmZpZWxkc1tdID0ge2Zp X2YsIGZpX2l9OworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRf bmV3X2NvbnN0cnVjdG9yCisgICAgICAoY3R4dCwgMCwKKyAgICAgICBzdHJ1Y3RfZmlfdHlwZSwK KyAgICAgICAyLAorICAgICAgIGZpZWxkcywKKyAgICAgICB2YWxzKTsKKworICAgIGl2YWwgPSBn Y2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlw ZSwgNCk7CisgICAgZnZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgK KyAgICAgIGN0eHQsIGZsb2F0X3R5cGUsIDEpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHMy W10gPSB7ZnZhbCwgY3RvciwgaXZhbH07CisgICAgZ2NjX2ppdF9maWVsZCAqZmllbGRzMltdID0g e2Jhcl9mZiwgYmFyX2ZpLCBiYXJfaWl9OworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3JfYmFy ID0gZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1Y3RvcgorICAgICAgKGN0eHQsIDAsCisgICAg ICAgc3RydWN0X2Jhcl90eXBlLAorICAgICAgIDMsCisgICAgICAgZmllbGRzMiwKKyAgICAgICB2 YWxzMik7CisKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChiYXIs IGN0b3JfYmFyKTsKKyAgfQorICB7IC8qIHN0cnVjdCBmaSBmb28gPSB7MiwgM307ICovCisgICAg Z2NjX2ppdF9sdmFsdWUgKmZvbyA9IGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAg IGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIHN0cnVj dF9maV90eXBlLAorICAgICAgImdsb2JhbF9zdHJ1Y3RfZmlfMSIpOworCisgICAgZ2NjX2ppdF9y dmFsdWUgKmZ2YWwgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAg ICBjdHh0LCBmbG9hdF90eXBlLCAyKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqaXZhbCA9IGdjY19q aXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAz KTsKKworICAgIGdjY19qaXRfcnZhbHVlICp2YWxzW10gPSB7IGZ2YWwsIGl2YWx9OworICAgIGdj Y19qaXRfZmllbGQgKmZpZWxkc1tdID0ge2ZpX2YsIGZpX2l9OworCisgICAgZ2NjX2ppdF9ydmFs dWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2NvbnN0cnVjdG9yCisgICAgICAoY3R4dCwg MCwKKyAgICAgICBzdHJ1Y3RfZmlfdHlwZSwKKyAgICAgICAyLAorICAgICAgIGZpZWxkcywKKyAg ICAgICB2YWxzKTsKKworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUg KGZvbywgY3Rvcik7CisgIH0KKyAgeyAvKiBzdHJ1Y3QgZmkgZm9vID0gezAsIDB9OyAobnVsbCBp bml0KSAqLworICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ds b2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQs CisgICAgICBzdHJ1Y3RfZmlfdHlwZSwKKyAgICAgICJnbG9iYWxfc3RydWN0X2ZpXzQiKTsKKwor ICAgIGdjY19qaXRfcnZhbHVlICp2YWxzW10gPSB7IDAsIDB9OworICAgIGdjY19qaXRfZmllbGQg KmZpZWxkc1tdID0ge2ZpX2YsIGZpX2l9OworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBn Y2Nfaml0X2NvbnRleHRfbmV3X2NvbnN0cnVjdG9yCisgICAgICAoY3R4dCwgMCwKKyAgICAgICBz dHJ1Y3RfZmlfdHlwZSwKKyAgICAgICAyLAorICAgICAgIGZpZWxkcywKKyAgICAgICB2YWxzKTsK KworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywgY3Rvcik7 CisgIH0KKyAgeyAvKiBzdHJ1Y3QgZmkgZm9vID0gey5pID0gMH07CisKKyAgICAgICBOdWxsIGlu aXQgdmFsdWVzLiAqLworICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSBnY2Nfaml0X2NvbnRleHRf bmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQ T1JURUQsCisgICAgICBzdHJ1Y3RfZmlfdHlwZSwKKyAgICAgICJnbG9iYWxfc3RydWN0X2ZpXzUi KTsKKworICAgIGdjY19qaXRfcnZhbHVlICp2YWxzW10gPSB7MH07CisgICAgZ2NjX2ppdF9maWVs ZCAqZmllbGRzW10gPSB7ZmlfaX07CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19q aXRfY29udGV4dF9uZXdfY29uc3RydWN0b3IKKyAgICAgIChjdHh0LCAwLAorICAgICAgIHN0cnVj dF9maV90eXBlLAorICAgICAgIDEsCisgICAgICAgZmllbGRzLAorICAgICAgIHZhbHMpOworICAg IGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywgY3Rvcik7CisgIH0K KyAgeyAvKiBzdHJ1Y3QgZmkgZm9vID0ge307IChudWxsIGluaXQpCisKKyAgICAgICBOdWxsIGZp ZWxkcyBhbmQgdmFsdWVzLiAqLworICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSBnY2Nfaml0X2Nv bnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9C QUxfRVhQT1JURUQsCisgICAgICBzdHJ1Y3RfZmlfdHlwZSwKKyAgICAgICJnbG9iYWxfc3RydWN0 X2ZpXzYiKTsKKworICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25l d19jb25zdHJ1Y3RvcgorICAgICAgKGN0eHQsIDAsCisgICAgICAgc3RydWN0X2ZpX3R5cGUsCisg ICAgICAgMCwKKyAgICAgICAwLAorICAgICAgIDApOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9p bml0aWFsaXplcl9ydmFsdWUgKGZvbywgY3Rvcik7CisgIH0KKyAgeyAvKiBzdHJ1Y3QgZmkgZm9v ID0gezIgKiAyLCAzfTsgKi8KKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gZ2NjX2ppdF9jb250 ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFM X0VYUE9SVEVELAorICAgICAgc3RydWN0X2ZpX3R5cGUsCisgICAgICAiZ2xvYmFsX3N0cnVjdF9m aV8zIik7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqZnZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdf cnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGZsb2F0X3R5cGUsIDIpOworICAgIGdjY19q aXRfcnZhbHVlICpmdmFsMiA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgK KyAgICAgIGN0eHQsIGZsb2F0X3R5cGUsIDIpOworICAgIGdjY19qaXRfcnZhbHVlICppdmFsID0g Z2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5 cGUsIDMpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsX211bCA9IGdjY19qaXRfY29udGV4dF9u ZXdfYmluYXJ5X29wIChjdHh0LCAwLAorICAgICAgR0NDX0pJVF9CSU5BUllfT1BfTVVMVCwKKyAg ICAgIGZsb2F0X3R5cGUsCisgICAgICBmdmFsLAorICAgICAgZnZhbDIpOworCisgICAgZ2NjX2pp dF9ydmFsdWUgKnZhbHNbXSA9IHsgcnZhbF9tdWwsIGl2YWx9OworICAgIGdjY19qaXRfZmllbGQg KmZpZWxkc1tdID0ge2ZpX2YsIGZpX2l9OworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBn Y2Nfaml0X2NvbnRleHRfbmV3X2NvbnN0cnVjdG9yCisgICAgICAoY3R4dCwgMCwKKyAgICAgICBz dHJ1Y3RfZmlfdHlwZSwKKyAgICAgICAyLAorICAgICAgIGZpZWxkcywKKyAgICAgICB2YWxzKTsK KworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywgY3Rvcik7 CisgIH0KKyAgeyAvKiB1bmlvbiB1YmFyIGZvbyA9IHsuZmYgPSAzfTsgKi8KKyAgICAgZ2NjX2pp dF9sdmFsdWUgKmZvbyA9IGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQs IE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIHViYXIsCisgICAg ICAiZ2xvYmFsX3VuaW9uX3Vmb29fZmYzIik7CisKKyAgICAgZ2NjX2ppdF9ydmFsdWUgKmZ2YWwg PSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICAgY3R4dCwgZmxv YXRfdHlwZSwgMyk7CisKKyAgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHNbXSA9IHtmdmFsfTsKKyAg ICAgZ2NjX2ppdF9maWVsZCAqZmllbGRzW10gPSB7dWJhcl9mZn07CisKKyAgICAgZ2NjX2ppdF9y dmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2NvbnN0cnVjdG9yICgKKyAgICAgICBj dHh0LAorICAgICAgIDAsCisgICAgICAgdWJhciwKKyAgICAgICAxLAorICAgICAgIGZpZWxkcywK KyAgICAgICB2YWxzKTsKKworICAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZh bHVlIChmb28sIGN0b3IpOworICB9CisgIHsgLyogaW50IGZvbyA9IDM7ICovCisgICAgZ2NjX2pp dF9ydmFsdWUgKnJ2YWwgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisg ICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7CisgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9ICBnY2Nf aml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJ VF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBpbnRfdHlwZSwKKyAgICAgICJnbG9iYWxfaW50MV8z Iik7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLAorICAg ICAgcnZhbCk7CisgIH0KKyAgeyAvKiBUcnkgdGhlIGFib3ZlLCBidXQgd2l0aCBvcHBvc2l0ZSBv cmRlciBvZiBnbG9iYWwgYW5kIGxpdGVyYWwgY2FsbHMgKi8KKyAgICBnY2Nfaml0X2x2YWx1ZSAq Zm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisg ICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIGludF90eXBlLAorICAgICAgImds b2JhbF9pbnQyXzMiKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbCA9IGdjY19qaXRfY29udGV4 dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAzKTsKKyAgICBn Y2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sCisgICAgICBydmFsKTsK KyAgfQorICB7IC8qIGludCBmb28gPSAzICogKDMgKyAzKSAqLworICAgIGdjY19qaXRfbHZhbHVl ICpmb28gPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwK KyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgaW50X3R5cGUsCisgICAgICAi Z2xvYmFsX2ludDNfMTgiKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbDNfMCA9IGdjY19qaXRf Y29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAzKTsK KyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbDNfMSA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVl X2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAzKTsKKyAgICBnY2Nfaml0X3J2YWx1 ZSAqcnZhbDNfMiA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAg IGN0eHQsIGludF90eXBlLCAzKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF9wbHVzID0gZ2Nj X2ppdF9jb250ZXh0X25ld19iaW5hcnlfb3AgKGN0eHQsIDAsCisgICAgICBHQ0NfSklUX0JJTkFS WV9PUF9QTFVTLAorICAgICAgaW50X3R5cGUsCisgICAgICBydmFsM18wLAorICAgICAgcnZhbDNf MSk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfbXVsID0gZ2NjX2ppdF9jb250ZXh0X25ld19i aW5hcnlfb3AgKGN0eHQsIDAsCisgICAgICBHQ0NfSklUX0JJTkFSWV9PUF9NVUxULAorICAgICAg aW50X3R5cGUsCisgICAgICBydmFsX3BsdXMsCisgICAgICBydmFsM18yKTsKKworICAgIGdjY19q aXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywKKyAgICAgIHJ2YWxfbXVsKTsK KyAgfQorICB7IC8qIGludCBmb28gPSAzOyBpbnQgKnBmb28gPSAmZm9vOyAqLworICAgIGdjY19q aXRfbHZhbHVlICpmb28gPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4 dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgaW50X3R5cGUs CisgICAgICAiZ2xvYmFsX2ludDRfMyIpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsID0gZ2Nj X2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUs IDMpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywKKyAg ICAgIHJ2YWwpOworCisgICAgZ2NjX2ppdF9sdmFsdWUgKnBmb28gPSAgZ2NjX2ppdF9jb250ZXh0 X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VY UE9SVEVELAorICAgICAgcGludF90eXBlLAorICAgICAgImdsb2JhbF9waW50NSIpOworICAgIGdj Y19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKHBmb28sCisgICAgICBnY2Nfaml0 X2x2YWx1ZV9nZXRfYWRkcmVzcyAoZm9vLCAwKSk7CisgIH0KKyAgeyAvKiBpbnQgZm9vID0gMzsg aW50ICpwZm9vID0gJmZvbyArIDE7ICovCisgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9ICBnY2Nf aml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJ VF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBpbnRfdHlwZSwKKyAgICAgICJnbG9iYWxfaW50Nl8z Iik7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1 ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7CisgICAgZ2NjX2ppdF9nbG9i YWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLAorICAgICAgcnZhbCk7CisKKyAgICBnY2Nf aml0X2x2YWx1ZSAqcGZvbyA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBj dHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBwaW50X3R5 cGUsCisgICAgICAiZ2xvYmFsX3BpbnQ3Iik7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRp YWxpemVyX3J2YWx1ZSAocGZvbywKKyAgICAgIGdjY19qaXRfbHZhbHVlX2dldF9hZGRyZXNzICgK KwlnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X2FjY2VzcygKKwkgIGN0eHQsCisJICAwLAorCSAg Z2NjX2ppdF9sdmFsdWVfZ2V0X2FkZHJlc3MoZm9vLCAwKSwKKwkgIGdjY19qaXRfY29udGV4dF9v bmUoY3R4dCwgaW50X3R5cGUpKSwKKwkwKSk7CisgIH0KKyAgeyAvKiBkb3VibGUgZm9vID0gMzsg Ki8KKyAgICBnY2Nfaml0X2x2YWx1ZSAqZG91YmxlMSA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2ds b2JhbCAoCisJY3R4dCwgTlVMTCwKKwlHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKwlkb3VibGVf dHlwZSwKKwkiZ2xvYmFsX2RvdWJsZTFfMyIpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsID0g Z2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgZG91Ymxl X3R5cGUsIDMpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGRv dWJsZTEsCisgICAgICBydmFsKTsKKyAgfQorICB7IC8qIGRvdWJsZSBmb28gPSAzICogMyArIDMg Ki8KKyAgICBnY2Nfaml0X2x2YWx1ZSAqZG91YmxlMSA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2ds b2JhbCAoCisJY3R4dCwgTlVMTCwKKwlHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKwlkb3VibGVf dHlwZSwKKwkiZ2xvYmFsX2RvdWJsZTJfMTIiKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbCA9 IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGRvdWJs ZV90eXBlLCAzKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF9tdWwgPSBnY2Nfaml0X2NvbnRl eHRfbmV3X2JpbmFyeV9vcCAoY3R4dCwgMCwKKyAgICAgIEdDQ19KSVRfQklOQVJZX09QX01VTFQs CisgICAgICBkb3VibGVfdHlwZSwKKyAgICAgIHJ2YWwsCisgICAgICBydmFsKTsKKyAgICBnY2Nf aml0X3J2YWx1ZSAqcnZhbF9wbHVzID0gZ2NjX2ppdF9jb250ZXh0X25ld19iaW5hcnlfb3AgKGN0 eHQsIDAsCisgICAgICBHQ0NfSklUX0JJTkFSWV9PUF9QTFVTLAorICAgICAgZG91YmxlX3R5cGUs CisgICAgICBydmFsX211bCwKKyAgICAgIHJ2YWwpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9p bml0aWFsaXplcl9ydmFsdWUgKGRvdWJsZTEsCisgICAgICBydmFsX3BsdXMpOworICB9CisgIHsg LyogYm9vbCBmb28gPSAzICsgMyA8PSA2OyAqLworICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSAg Z2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdD Q19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgYm9vbF90eXBlLAorICAgICAgImdsb2JhbF9i b29sMV8xIik7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwzXzAgPSBnY2Nfaml0X2NvbnRleHRf bmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7CisgICAgZ2Nj X2ppdF9ydmFsdWUgKnJ2YWwzXzEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2lu dCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWw2 ID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50 X3R5cGUsIDYpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsX3BsdXMgPSBnY2Nfaml0X2NvbnRl eHRfbmV3X2JpbmFyeV9vcCAoY3R4dCwKKyAgICAgIDAsCisgICAgICBHQ0NfSklUX0JJTkFSWV9P UF9QTFVTLAorICAgICAgaW50X3R5cGUsCisgICAgICBydmFsM18wLAorICAgICAgcnZhbDNfMSk7 CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfbGUgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2NvbXBh cmlzb24gKGN0eHQsCisgICAgICAwLAorICAgICAgR0NDX0pJVF9DT01QQVJJU09OX0xFLAorICAg ICAgcnZhbF9wbHVzLAorICAgICAgcnZhbDYpOworCisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2lu aXRpYWxpemVyX3J2YWx1ZSAoZm9vLAorICAgICAgcnZhbF9sZSk7CisgIH0KKyAgZ2NjX2ppdF9s dmFsdWUgKmdsb2JhbF9pbnRhcnJfMTIzNDsKKyAgeyAvKiBpbnQgZm9vW10gPSB7MSwyLDMsNH07 ICovCisKKyAgICBnY2Nfaml0X3R5cGUgKmFycl90eXBlID0gZ2NjX2ppdF9jb250ZXh0X25ld19h cnJheV90eXBlIChjdHh0LAorCQkJCQkJCSAgICAgMCwKKwkJCQkJCQkgICAgIGludF90eXBlLAor CQkJCQkJCSAgICAgNCk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfMSA9IGdjY19qaXRfY29u dGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAxKTsKKyAg ICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF8yID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJv bV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDIpOworICAgIGdjY19qaXRfcnZhbHVlICpy dmFsXzMgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0 LCBpbnRfdHlwZSwgMyk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfNCA9IGdjY19qaXRfY29u dGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCA0KTsKKwor ICAgIGdjY19qaXRfcnZhbHVlICp2YWx1ZXNbXSA9IHtydmFsXzEsIHJ2YWxfMiwgcnZhbF8zLCBy dmFsXzR9OworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3 X2NvbnN0cnVjdG9yIChjdHh0LAorCQkJCQkJCSAgICAwLAorCQkJCQkJCSAgICBhcnJfdHlwZSwK KwkJCQkJCQkgICAgNCwKKwkJCQkJCQkgICAgMCwKKwkJCQkJCQkgICAgdmFsdWVzKTsKKyAgICBn bG9iYWxfaW50YXJyXzEyMzQgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBj dHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBhcnJfdHlw ZSwKKyAgICAgICJnbG9iYWxfaW50YXJyXzEyMzQiKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRf aW5pdGlhbGl6ZXJfcnZhbHVlIChnbG9iYWxfaW50YXJyXzEyMzQsIGN0b3IpOworICB9CisgIHsg LyogZmxvYXQgZm9vWzRdID0gezEsMn07ICovCisKKyAgICBnY2Nfaml0X3R5cGUgKmFycl90eXBl ID0gZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV90eXBlIChjdHh0LAorCQkJCQkJCSAgICAgMCwK KwkJCQkJCQkgICAgIGZsb2F0X3R5cGUsCisJCQkJCQkJICAgICA0KTsKKyAgICBnY2Nfaml0X3J2 YWx1ZSAqcnZhbF8xID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAg ICAgY3R4dCwgZmxvYXRfdHlwZSwgMSk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfMiA9IGdj Y19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGZsb2F0X3R5 cGUsIDIpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHVlc1tdID0ge3J2YWxfMSwgcnZhbF8y fTsKKworICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19jb25z dHJ1Y3RvciAoY3R4dCwKKwkJCQkJCQkgICAgMCwKKwkJCQkJCQkgICAgYXJyX3R5cGUsCisJCQkJ CQkJICAgIDIsCisJCQkJCQkJICAgIDAsCisJCQkJCQkJICAgIHZhbHVlcyk7CisgICAgZ2NjX2pp dF9sdmFsdWUgKmZvbyA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0 LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBhcnJfdHlwZSwK KyAgICAgICJnbG9iYWxfZmxvYXRhcnJfMTIiKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5p dGlhbGl6ZXJfcnZhbHVlIChmb28sIGN0b3IpOworICB9CisgIHsgLyogZmxvYXQgZm9vWzRdID0g ezEsMiwwfTsgKG51bGwgaW5pdCkgKi8KKworICAgIGdjY19qaXRfdHlwZSAqYXJyX3R5cGUgPSBn Y2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X3R5cGUgKGN0eHQsCisJCQkJCQkJICAgICAwLAorCQkJ CQkJCSAgICAgZmxvYXRfdHlwZSwKKwkJCQkJCQkgICAgIDQpOworICAgIGdjY19qaXRfcnZhbHVl ICpydmFsXzEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBj dHh0LCBmbG9hdF90eXBlLCAxKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF8yID0gZ2NjX2pp dF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgZmxvYXRfdHlwZSwg Mik7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqdmFsdWVzW10gPSB7cnZhbF8xLCBydmFsXzIsIDB9 OworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2NvbnN0 cnVjdG9yIChjdHh0LAorCQkJCQkJCSAgICAwLAorCQkJCQkJCSAgICBhcnJfdHlwZSwKKwkJCQkJ CQkgICAgMiwKKwkJCQkJCQkgICAgMCwKKwkJCQkJCQkgICAgdmFsdWVzKTsKKyAgICBnY2Nfaml0 X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQs IE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIGFycl90eXBlLAor ICAgICAgImdsb2JhbF9mbG9hdGFycl8xMjAiKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5p dGlhbGl6ZXJfcnZhbHVlIChmb28sIGN0b3IpOworICB9CisgIHsgLyogZmxvYXQgZm9vWzRdID0g e307IChudWxsIGluaXQpICovCisKKyAgICBnY2Nfaml0X3R5cGUgKmFycl90eXBlID0gZ2NjX2pp dF9jb250ZXh0X25ld19hcnJheV90eXBlIChjdHh0LAorCQkJCQkJCSAgICAgMCwKKwkJCQkJCQkg ICAgIGZsb2F0X3R5cGUsCisJCQkJCQkJICAgICA0KTsKKworICAgIGdjY19qaXRfcnZhbHVlICpj dG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1Y3RvciAoY3R4dCwKKwkJCQkJCQkgICAg MCwKKwkJCQkJCQkgICAgYXJyX3R5cGUsCisJCQkJCQkJICAgIDAsCisJCQkJCQkJICAgIDAsCisJ CQkJCQkJICAgIDApOworICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSAgZ2NjX2ppdF9jb250ZXh0 X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VY UE9SVEVELAorICAgICAgYXJyX3R5cGUsCisgICAgICAiZ2xvYmFsX2Zsb2F0YXJyXzAwMDAiKTsK KyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sIGN0b3IpOwor ICB9CisgIHsgLyogZmxvYXQgZm9vWzRdID0ge05VTEwgLCBOVUxMLCAzLCBOVUxMfTsgKG51bGwg aW5pdCkgKi8KKworICAgIGdjY19qaXRfdHlwZSAqYXJyX3R5cGUgPSBnY2Nfaml0X2NvbnRleHRf bmV3X2FycmF5X3R5cGUgKGN0eHQsCisJCQkJCQkJICAgICAwLAorCQkJCQkJCSAgICAgZmxvYXRf dHlwZSwKKwkJCQkJCQkgICAgIDgpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsMyA9IGdjY19q aXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGZsb2F0X3R5cGUs IDMpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsNSA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZh bHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGZsb2F0X3R5cGUsIDUpOworICAgIGdjY19qaXRf cnZhbHVlICpydmFsNiA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAg ICAgIGN0eHQsIGZsb2F0X3R5cGUsIDYpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHVlc1td ID0gezAsIDAsIHJ2YWwzLCAwLCBydmFsNSwgcnZhbDYsIDAgfTsKKworICAgIGdjY19qaXRfcnZh bHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1Y3RvciAoY3R4dCwKKwkJCQkJ CQkgICAgMCwKKwkJCQkJCQkgICAgYXJyX3R5cGUsCisJCQkJCQkJICAgIDcsCisJCQkJCQkJICAg IDAsCisJCQkJCQkJICAgIHZhbHVlcyk7CisgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9ICBnY2Nf aml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJ VF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBhcnJfdHlwZSwKKyAgICAgICJnbG9iYWxfZmxvYXRh cnJfMDAzMDU2MDAiKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVl IChmb28sIGN0b3IpOworICB9CisgIHsgLyogaW50ICpmb29bNF0gPSB7MCwgJmdsb2JhbF9pbnRh cnJfMTIzNFsxXX07ICovCisKKyAgICBnY2Nfaml0X3R5cGUgKmFycl90eXBlID0gZ2NjX2ppdF9j b250ZXh0X25ld19hcnJheV90eXBlIChjdHh0LAorCQkJCQkJCSAgICAgMCwKKwkJCQkJCQkgICAg IHBpbnRfdHlwZSwKKwkJCQkJCQkgICAgIDQpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsXzEg PSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRf dHlwZSwgMSk7CisgICAgZ2NjX2ppdF9sdmFsdWUgKmFycl9hY2Nlc3MgPSBnY2Nfaml0X2NvbnRl eHRfbmV3X2FycmF5X2FjY2VzcyAoCisgICAgICBjdHh0LAorICAgICAgMCwKKyAgICAgIGdjY19q aXRfbHZhbHVlX2FzX3J2YWx1ZSAoZ2xvYmFsX2ludGFycl8xMjM0KSwKKyAgICAgIHJ2YWxfMSk7 CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfMiA9IGdjY19qaXRfbHZhbHVlX2dldF9hZGRyZXNz IChhcnJfYWNjZXNzLCAwKTsKKworICAgIGdjY19qaXRfcnZhbHVlICp2YWx1ZXNbXSA9IHswLCBy dmFsXzJ9OworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3 X2NvbnN0cnVjdG9yIChjdHh0LAorCQkJCQkJCSAgICAwLAorCQkJCQkJCSAgICBhcnJfdHlwZSwK KwkJCQkJCQkgICAgMiwKKwkJCQkJCQkgICAgMCwKKwkJCQkJCQkgICAgdmFsdWVzKTsKKyAgICBn Y2Nfaml0X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAg IGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIGFycl90 eXBlLAorICAgICAgImdsb2JhbF9waW50YXJyX3gyeHgiKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9z ZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sIGN0b3IpOworICB9CisgIHsgLyogY2hhciBmb29b NF0gPSB7J3EnLCd3JywnZScsMH07ICovCisKKyAgICBnY2Nfaml0X3R5cGUgKmFycl90eXBlID0g Z2NjX2ppdF9jb250ZXh0X25ld19hcnJheV90eXBlIChjdHh0LAorCQkJCQkJCSAgICAgMCwKKwkJ CQkJCQkgICAgIGNoYXJfdHlwZSwKKwkJCQkJCQkgICAgIDQpOworCisKKyAgICBnY2Nfaml0X3J2 YWx1ZSAqcnZhbHNbXSA9IHsKKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21f aW50ICggY3R4dCwgY2hhcl90eXBlLCAncScpLAorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19y dmFsdWVfZnJvbV9pbnQgKCBjdHh0LCBjaGFyX3R5cGUsICd3JyksCisgICAgICBnY2Nfaml0X2Nv bnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoIGN0eHQsIGNoYXJfdHlwZSwgJ2UnKSwKKyAgICAg IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICggY3R4dCwgY2hhcl90eXBlLCAw KQorICAgIH07CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9u ZXdfY29uc3RydWN0b3IgKGN0eHQsCisJCQkJCQkJICAgIDAsCisJCQkJCQkJICAgIGFycl90eXBl LAorCQkJCQkJCSAgICA0LAorCQkJCQkJCSAgICAwLAorCQkJCQkJCSAgICBydmFscyk7CisgICAg Z2NjX2ppdF9sdmFsdWUgKmZvbyA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAg ICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBhcnJf dHlwZSwKKyAgICAgICJnbG9iYWxfY2hhcmFycl9xd2UiKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9z ZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sIGN0b3IpOworICB9CisgIHsgLyogaW50IGZvb1sy XVsyXSA9IHt7MSwyfSx7Myw0fX07ICovCisKKyAgICBnY2Nfaml0X3R5cGUgKnJvd190eXBlID0g Z2NjX2ppdF9jb250ZXh0X25ld19hcnJheV90eXBlIChjdHh0LAorCQkJCQkJCSAgICAgMCwKKwkJ CQkJCQkgICAgIGludF90eXBlLAorCQkJCQkJCSAgICAgMik7CisKKyAgICBnY2Nfaml0X3R5cGUg KmFycl90eXBlID0gZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV90eXBlIChjdHh0LAorCQkJCQkJ CSAgICAgMCwKKwkJCQkJCQkgICAgIHJvd190eXBlLAorCQkJCQkJCSAgICAgMik7CisgICAgZ2Nj X2ppdF9ydmFsdWUgKnJ2YWxzX3JvdzBbXSA9IHsKKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdf cnZhbHVlX2Zyb21faW50ICggY3R4dCwgaW50X3R5cGUsIDEpLAorICAgICAgZ2NjX2ppdF9jb250 ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKCBjdHh0LCBpbnRfdHlwZSwgMikKKyAgICB9OworICAg IGdjY19qaXRfcnZhbHVlICpydmFsc19yb3cxW10gPSB7CisgICAgICBnY2Nfaml0X2NvbnRleHRf bmV3X3J2YWx1ZV9mcm9tX2ludCAoIGN0eHQsIGludF90eXBlLCAzKSwKKyAgICAgIGdjY19qaXRf Y29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICggY3R4dCwgaW50X3R5cGUsIDQpCisgICAgfTsK KworICAgIGdjY19qaXRfcnZhbHVlICpjdG9yX3JvdzAgPQorICAgICAgZ2NjX2ppdF9jb250ZXh0 X25ld19jb25zdHJ1Y3RvciAoY3R4dCwKKwkJCQkgICAgICAgMCwKKwkJCQkgICAgICAgcm93X3R5 cGUsCisJCQkJICAgICAgIDIsCisJCQkJICAgICAgIDAsCisJCQkJICAgICAgIHJ2YWxzX3JvdzAp OworICAgIGdjY19qaXRfcnZhbHVlICpjdG9yX3JvdzEgPQorICAgICAgZ2NjX2ppdF9jb250ZXh0 X25ld19jb25zdHJ1Y3RvciAoY3R4dCwKKwkJCQkgICAgICAgMCwKKwkJCQkgICAgICAgcm93X3R5 cGUsCisJCQkJICAgICAgIDIsCisJCQkJICAgICAgIDAsCisJCQkJICAgICAgIHJ2YWxzX3JvdzEp OworICAgIGdjY19qaXRfcnZhbHVlICpjdG9yc19yb3dbXSA9IHtjdG9yX3JvdzAsIGN0b3Jfcm93 MX07CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY3Rvcl9hcnIgPQorICAgICAgZ2NjX2ppdF9jb250 ZXh0X25ld19jb25zdHJ1Y3RvciAoY3R4dCwKKwkJCQkgICAgICAgMCwKKwkJCQkgICAgICAgYXJy X3R5cGUsCisJCQkJICAgICAgIDIsCisJCQkJICAgICAgIDAsCisJCQkJICAgICAgIGN0b3JzX3Jv dyk7CisKKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xv YmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwK KyAgICAgIGFycl90eXBlLAorICAgICAgImdsb2JhbF9pbnQyeDJtYXRyaXhfMTIzNCIpOworCisg ICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLCBjdG9yX2Fycik7 CisgIH0KKyAgeyAvKiBjb25zdCBjaGFyICpmb29bNF0gPSB7InF3ZSIsICJhc2QifTsgKi8KKwor ICAgIGdjY19qaXRfdHlwZSAqYXJyX3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X3R5 cGUgKGN0eHQsCisJCQkJCQkJICAgICAwLAorCQkJCQkJCSAgICAgY3BjaGFyX3R5cGUsCisJCQkJ CQkJICAgICA0KTsKKworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxzW10gPSB7CisgICAgICBn Y2Nfaml0X2NvbnRleHRfbmV3X3N0cmluZ19saXRlcmFsIChjdHh0LCAicXdlIiksCisgICAgICBn Y2Nfaml0X2NvbnRleHRfbmV3X3N0cmluZ19saXRlcmFsIChjdHh0LCAiYXNkIikKKyAgICB9Owor CisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2NvbnN0cnVj dG9yIChjdHh0LAorCQkJCQkJCSAgICAwLAorCQkJCQkJCSAgICBhcnJfdHlwZSwKKwkJCQkJCQkg ICAgMiwKKwkJCQkJCQkgICAgMCwKKwkJCQkJCQkgICAgcnZhbHMpOworICAgIGdjY19qaXRfbHZh bHVlICpmb28gPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVM TCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgYXJyX3R5cGUsCisgICAg ICAiZ2xvYmFsX2NwY2hhcmFycl9xd2VfYXNkIik7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2lu aXRpYWxpemVyX3J2YWx1ZSAoZm9vLCBjdG9yKTsKKyAgfQorICB7IC8qIGNvbnN0IGludCBmb28g PSAzOworICAgICAgIGludCBiYXIgPSBmb287CisgICAgICovCisgICAgZ2NjX2ppdF9sdmFsdWUg KmZvbyA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAor ICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBnY2Nfaml0X3R5cGVfZ2V0X2Nv bnN0IChpbnRfdHlwZSksCisgICAgICAiZ2xvYmFsX2NvbnN0X2ludF8zIik7CisgICAgZ2NjX2pp dF9ydmFsdWUgKnJ2YWwzID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAor ICAgICAgY3R4dCwgaW50X3R5cGUsIDMpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFs aXplcl9ydmFsdWUgKGZvbywKKwlydmFsMyk7CisgICAgZ2NjX2ppdF9sdmFsdWUgKmJhciA9ICBn Y2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0ND X0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBpbnRfdHlwZSwKKyAgICAgICJnbG9iYWxfbHZh bHVlaW5pdF9pbnRfMyIpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFs dWUgKGJhciwKKwkJCQkJICAgZ2NjX2ppdF9sdmFsdWVfYXNfcnZhbHVlIChmb28pKTsKKyAgfQor ICB7IC8qIGludCBmb28gPSAzICogMjsKKyAgICAgICBpbnQgYXJyW10gPSB7MSwyLDMsNH07Cisg ICAgICAgaW50ICpiYXIgPSAmYXJyWzJdICsgMQorCisgICAgICAgRXhhbXBsZSBpbiB0aGUgZG9j cy4KKyAgICAgKi8KKworICAgIGdjY19qaXRfdHlwZSAqYXJyX3R5cGUgPSBnY2Nfaml0X2NvbnRl eHRfbmV3X2FycmF5X3R5cGUgKGN0eHQsCisJCQkJCQkJICAgICAwLAorCQkJCQkJCSAgICAgaW50 X3R5cGUsCisJCQkJCQkJICAgICA0KTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF8xID0gZ2Nj X2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUs IDEpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsXzIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2 YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMik7CisgICAgZ2NjX2ppdF9y dmFsdWUgKnJ2YWxfMyA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAg ICAgIGN0eHQsIGludF90eXBlLCAzKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF80ID0gZ2Nj X2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUs IDQpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHVlc1tdID0ge3J2YWxfMSwgcnZhbF8yLCBy dmFsXzMsIHJ2YWxfNH07CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRfY29u dGV4dF9uZXdfY29uc3RydWN0b3IgKGN0eHQsCisJCQkJCQkJICAgIDAsCisJCQkJCQkJICAgIGFy cl90eXBlLAorCQkJCQkJCSAgICA0LAorCQkJCQkJCSAgICAwLAorCQkJCQkJCSAgICB2YWx1ZXMp OworICAgIGdjY19qaXRfbHZhbHVlICpnbG9iYWxfaW50YXJyXzEyMzQgPQorICAgICAgZ2NjX2pp dF9jb250ZXh0X25ld19nbG9iYWwgKGN0eHQsIE5VTEwsCisJCQkJICBHQ0NfSklUX0dMT0JBTF9F WFBPUlRFRCwKKwkJCQkgIGFycl90eXBlLAorCQkJCSAgImdsb2JhbF9pbnRhcnJfMTIzNF8yIik7 CisKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChnbG9iYWxfaW50 YXJyXzEyMzQsIGN0b3IpOworCisgICAgZ2NjX2ppdF9sdmFsdWUgKmJhciA9CisgICAgICBnY2Nf aml0X2NvbnRleHRfbmV3X2dsb2JhbCAoY3R4dCwgTlVMTCwKKwkJCQkgIEdDQ19KSVRfR0xPQkFM X0VYUE9SVEVELAorCQkJCSAgaW50X3R5cGUsCisJCQkJICAiZ2xvYmFsX2ludF82Iik7CisgICAg Z2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZQorICAgICAgKGJhciwKKyAgICAg ICBnY2Nfaml0X2NvbnRleHRfbmV3X2JpbmFyeV9vcAorCSAoY3R4dCwgMCwgR0NDX0pJVF9CSU5B UllfT1BfTVVMVCwKKwkgIGludF90eXBlLAorCSAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVf ZnJvbV9pbnQgKGN0eHQsIGludF90eXBlLCAzKSwKKwkgIGdjY19qaXRfY29udGV4dF9uZXdfcnZh bHVlX2Zyb21faW50IChjdHh0LCBpbnRfdHlwZSwgMikpKTsKKworICAgIGdjY19qaXRfbHZhbHVl ICpwZm9vID0KKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsIChjdHh0LCBOVUxMLAor CQkJCSAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisJCQkJICBnY2Nfaml0X3R5cGVfZ2V0X3Bv aW50ZXIgKGludF90eXBlKSwKKwkJCQkgICJnbG9iYWxfcGludF80Iik7CisgICAgLyogaW50ICpi YXIgPSAmYXJyWzJdICsgMTsKKworICAgICAgIEluIHByYWN0aWNlIHdlIGNvdWxkIGp1c3QgZG8g JmZvb1szXQorICAgICAgIGJ1dCBqdXN0IHByb3ZlIGZvbGRpbmcgdGhpcyB3b3Jrcy4gKi8KKyAg ICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlICgKKyAgICAgICBwZm9vLAor ICAgICAgIGdjY19qaXRfbHZhbHVlX2dldF9hZGRyZXNzICgKKwkgZ2NjX2ppdF9jb250ZXh0X25l d19hcnJheV9hY2Nlc3MgKAorCSAgIGN0eHQsIDAsCisJICAgZ2NjX2ppdF9sdmFsdWVfZ2V0X2Fk ZHJlc3MgKAorCSAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9hY2Nlc3MgKAorCSAgICAg ICBjdHh0LCAwLAorCSAgICAgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKGdsb2JhbF9pbnRh cnJfMTIzNCksCisJICAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50IChj dHh0LCBpbnRfdHlwZSwgMikpLAorCSAgICAgICAwKSwKKwkgICBnY2Nfaml0X2NvbnRleHRfbmV3 X3J2YWx1ZV9mcm9tX2ludCAoY3R4dCwgaW50X3R5cGUsIDEpKSwKKwkgICAwKSk7CisgIH0KKyAg eyAvKiAgc3RhdGljIGludCBiYXIgPSAxMTsKKwlpbnQgZm9vICgpIHsgcmV0dXJuIGJhcjsgfSAq LworCisgICAgZ2NjX2ppdF9sdmFsdWUgKmJhciA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2Jh bCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisg ICAgICBpbnRfdHlwZSwKKyAgICAgICJnbG9iYWxfc3RhdGljX2ludF8xMSIpOworICAgIGdjY19q aXRfcnZhbHVlICpydmFsMSA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgK KyAgICAgIGN0eHQsIGludF90eXBlLCAxMSk7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRp YWxpemVyX3J2YWx1ZSAoYmFyLAorCXJ2YWwxKTsKKworICAgIGdjY19qaXRfZnVuY3Rpb24gKmZu MTEgPQorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwKKwkJCQkgICAg MCwKKwkJCQkgICAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgICAgaW50X3R5cGUs CisJCQkJICAgICJmbl9pbnRfMTEiLAorCQkJCSAgICAwLAorCQkJCSAgICAwLAorCQkJCSAgICAw KTsKKyAgICBnY2Nfaml0X2Jsb2NrICpibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2Nr IChmbjExLCAic3RhcnQiKTsKKworICAgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuIChi bG9jaywKKwkJCQkgICAwLAorCQkJCSAgIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZShiYXIpKTsK KyAgfQorICB7IC8qIHN0YXRpYyBjb25zdCBpbnQgY2JhciA9IDExOworICAgICAgIGludCBjZm9v ICgpIHsgcmV0dXJuIGNiYXI7IH0gKi8KKworICAgIGdjY19qaXRfbHZhbHVlICpiYXIgPSAgZ2Nj X2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19K SVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgZ2NjX2ppdF90eXBlX2dldF9jb25zdCAoaW50X3R5 cGUpLAorICAgICAgImdsb2JhbF9zdGF0aWNfY2ludF8xMSIpOworICAgIGdjY19qaXRfcnZhbHVl ICpydmFsMSA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0 eHQsIGludF90eXBlLCAxMSk7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2 YWx1ZSAoYmFyLAorCXJ2YWwxKTsKKworICAgIGdjY19qaXRfZnVuY3Rpb24gKmZuMTEgPQorICAg ICAgZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwKKwkJCQkgICAgMCwKKwkJCQkg ICAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgICAgaW50X3R5cGUsCisJCQkJICAg ICJmbl9jaW50XzExIiwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCk7CisgICAg Z2NjX2ppdF9ibG9jayAqYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZm4xMSwg InN0YXJ0Iik7CisKKyAgICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoYmxvY2ssCisJ CQkJICAgMCwKKwkJCQkgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUoYmFyKSk7CisgIH0KKyAg eyAvKiBzdGF0aWMgY29uc3QgaW50IGNiYXIgPSAxMjsKKyAgICAgICBjb25zdCBpbnQqIGNmb28g KCkgeyByZXR1cm4gJmNiYXI7IH0gKi8KKworICAgIGdjY19qaXRfbHZhbHVlICpiYXIgPSAgZ2Nj X2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19K SVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgZ2NjX2ppdF90eXBlX2dldF9jb25zdCAoaW50X3R5 cGUpLAorICAgICAgImdsb2JhbF9zdGF0aWNfY2ludF8xMiIpOworICAgIGdjY19qaXRfcnZhbHVl ICpydmFsMSA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0 eHQsIGludF90eXBlLCAxMik7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2 YWx1ZSAoYmFyLAorCXJ2YWwxKTsKKworICAgIGdjY19qaXRfZnVuY3Rpb24gKmZuMTEgPQorICAg ICAgZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwKKwkJCQkgICAgMCwKKwkJCQkg ICAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgICAgZ2NjX2ppdF90eXBlX2dldF9w b2ludGVyKGludF90eXBlKSwKKwkJCQkgICAgImZuX2NpbnRfMTIiLAorCQkJCSAgICAwLAorCQkJ CSAgICAwLAorCQkJCSAgICAwKTsKKworICAgIGdjY19qaXRfYmxvY2sgKmJsb2NrID0gZ2NjX2pp dF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZuMTEsICJzdGFydCIpOworCisgICAgZ2NjX2ppdF9ibG9j a19lbmRfd2l0aF9yZXR1cm4gKGJsb2NrLAorCQkJCSAgIDAsCisJCQkJICAgZ2NjX2ppdF9sdmFs dWVfZ2V0X2FkZHJlc3MgKGJhciwgMCkpOworICB9CisgIHsgLyogY29uc3QgaW50IGZvbyA9IDM7 CisgICAgICAgc2hvcnQgYmFyID0gKHNob3J0KWZvbzsKKworICAgICAgIEFzc3VyZSBjYXN0cyBm b2xkCisgICAgICovCisgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9ICBnY2Nfaml0X2NvbnRleHRf bmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQ T1JURUQsCisgICAgICBnY2Nfaml0X3R5cGVfZ2V0X2NvbnN0IChpbnRfdHlwZSksCisgICAgICAi Z2xvYmFsX2NvbnN0X2ludF80Iik7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwzID0gZ2NjX2pp dF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDMp OworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywKKwlydmFs Myk7CisgICAgZ2NjX2ppdF9sdmFsdWUgKmJhciA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2Jh bCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisg ICAgICBzaG9ydF90eXBlLAorICAgICAgImdsb2JhbF9sdmFsdWVpbml0X3Nob3J0XzMiKTsKKyAg ICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlICgKKyAgICAgIGJhciwKKyAg ICAgIGdjY19qaXRfY29udGV4dF9uZXdfY2FzdCggY3R4dCwgMCwKKwkJCQlnY2Nfaml0X2x2YWx1 ZV9hc19ydmFsdWUgKGZvbyksCisJCQkJc2hvcnRfdHlwZSkpOworICB9CisgIHsgLyogY29uc3Qg aW50IGZvbyA9IDM7CisgICAgICAgY29uc3QgaW50IGNvbnN0ICpiYXIgPSAmZm9vOyAqLworICAg IGdjY19qaXRfbHZhbHVlICpmb28gPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAg ICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgZ2Nj X2ppdF90eXBlX2dldF9jb25zdCAoaW50X3R5cGUpLAorICAgICAgImdsb2JhbF9jb25zdF9pbnRf NiIpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsMyA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZh bHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAzKTsKKyAgICBnY2Nfaml0X2ds b2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sCisJcnZhbDMpOworICAgIGdjY19qaXRf bHZhbHVlICpiYXIgPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwg TlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgZ2NjX2ppdF90eXBl X2dldF9jb25zdCAoCisJZ2NjX2ppdF90eXBlX2dldF9wb2ludGVyICgKKwkgIGdjY19qaXRfdHlw ZV9nZXRfY29uc3QgKAorCSAgICBpbnRfdHlwZSkpKSwKKyAgICAgICJnbG9iYWxfbHZhbHVlaW5p dF9jcGNpbnRfMyIpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUg KAorICAgICAgYmFyLAorICAgICAgZ2NjX2ppdF9sdmFsdWVfZ2V0X2FkZHJlc3MgKGZvbywgMCkp OworICB9CisgIHsgLyogY29uc3QgaW50IF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg2NCkpKSBm b28gPSAzOworICAgICAgIGludCBiYXIgPSBmb287CisKKyAgICAgICBBc3N1cmUgYWxpZ25lbWVu dCBkb2VzIG5vdCBtYWtlIHRoZSBjb25zdGFudCAibWlzcyIKKyAgICAgICBvciBzb21ldGhpbmcg c3RyYW5nZS4KKyAgICAgKi8KKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29u dGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JB TF9FWFBPUlRFRCwKKyAgICAgIGdjY19qaXRfdHlwZV9nZXRfY29uc3QgKGdjY19qaXRfdHlwZV9n ZXRfYWxpZ25lZCAoaW50X3R5cGUsIDY0KSksCisgICAgICAiZ2xvYmFsX2NvbnN0X2ludF83Iik7 CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9m cm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgNCk7CisgICAgZ2NjX2ppdF9nbG9iYWxf c2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLAorCXJ2YWwpOworICAgIGdjY19qaXRfbHZhbHVl ICpiYXIgPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwK KyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgaW50X3R5cGUsCisgICAgICAi Z2xvYmFsX2x2YWx1ZWluaXRfaW50XzQiKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlh bGl6ZXJfcnZhbHVlIChiYXIsCisJCQkJCSAgIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZSAoZm9v KSk7CisgIH0KKyAgeworICAgIC8qIHVuaW9uIHVwaW50c2l6ZSB7IHNpemVfdCBzOyBpbnQgKnAg fSB1ID0gey5zID0gMHgwRUVGQkVFRn07ICovCisgICAgZ2NjX2ppdF9maWVsZCAqZjEgPSBnY2Nf aml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJICAgMCwKKwkJCQkJCSAgIHNpemVf dHlwZSwKKwkJCQkJCSAgICJzIik7CisgICAgZ2NjX2ppdF9maWVsZCAqZjIgPSBnY2Nfaml0X2Nv bnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJICAgMCwKKwkJCQkJCSAgIHBpbnRfdHlwZSwK KwkJCQkJCSAgICJwIik7CisgICAgZ2NjX2ppdF9maWVsZCAqZmllbGRzMVtdID0ge2YxLCBmMn07 CisKKyAgICBnY2Nfaml0X3R5cGUgKnViYXIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3VuaW9uX3R5 cGUgKGN0eHQsCisJCQkJCQkJIDAsCisJCQkJCQkJICJ1cGludHNpemUiLAorCQkJCQkJCSAyLAor CQkJCQkJCSBmaWVsZHMxKTsKKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29u dGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JB TF9FWFBPUlRFRCwKKyAgICAgIGdjY19qaXRfdHlwZV9nZXRfY29uc3QgKHViYXIpLAorICAgICAg Imdsb2JhbF9jb25zdF91cGludHNpemVfMSIpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbCA9 IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fbG9uZ19sb25nICgKKyAgICAgIGN0eHQs IHNpemVfdHlwZSwgMHhCQUFBQUJCRUVFRUZCRUVGKTsKKworICAgIGdjY19qaXRfcnZhbHVlICp2 YWxzW10gPSB7dmFsfTsKKyAgICBnY2Nfaml0X2ZpZWxkICpmaWVsZHMyW10gPSB7ZjF9OworCisg ICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPQorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19jb25z dHJ1Y3RvciAoY3R4dCwKKwkJCQkgICAgICAgMCwKKwkJCQkgICAgICAgdWJhciwKKwkJCQkgICAg ICAgMSwKKwkJCQkgICAgICAgZmllbGRzMiwKKwkJCQkgICAgICAgdmFscyk7CisKKyAgICBnY2Nf aml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sIGN0b3IpOworICB9Cit9CisK K3N0cnVjdCBmaSB7CisgIGZsb2F0IGY7CisgIGludCBpOworfTsKKworc3RydWN0IGJhcjEgewor ICBmbG9hdCBmZjsKKyAgc3RydWN0IGZpIGZpOworICBpbnQgaWk7Cit9OworCit1bmlvbiB1YmFy MSB7CisgIGZsb2F0IGZmOworICBpbnQgaWk7Cit9OworCit1bmlvbiB1cGludHNpemUgeworICBz aXplX3QgczsKKyAgaW50ICpwOworfTsKKworaW50IHRlc3RfYWxpZ25lZDY0X3dvcmtzX2luX2xp bmtlcl8xIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg2NCkpKSA9IDA7CitpbnQgdGVzdF9hbGln bmVkNjRfd29ya3NfaW5fbGlua2VyXzIgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDY0KSkpID0g MDsKKwordm9pZAordmVyaWZ5X2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgZ2NjX2ppdF9y ZXN1bHQgKnJlc3VsdCkKK3sKKyAgQ0hFQ0tfTk9OX05VTEwgKHJlc3VsdCk7CisKKyAgeworICAg IHN0cnVjdCBmaSAqZmkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9i YWxfc3RydWN0X2ZpXzEiKTsKKworICAgIENIRUNLX1ZBTFVFIChmaS0+ZiwgMik7CisgICAgQ0hF Q0tfVkFMVUUgKGZpLT5pLCAzKTsKKyAgfQorICB7CisgICAgc3RydWN0IGZpICpmaSA9IGdjY19q aXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9zdHJ1Y3RfZmlfMyIpOworCisg ICAgQ0hFQ0tfVkFMVUUgKGZpLT5mLCAyICogMik7CisgICAgQ0hFQ0tfVkFMVUUgKGZpLT5pLCAz KTsKKyAgfQorICB7CisgICAgc3RydWN0IGZpICpmaSA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9i YWwgKHJlc3VsdCwgImdsb2JhbF9zdHJ1Y3RfZmlfNCIpOworCisgICAgQ0hFQ0tfVkFMVUUgKGZp LT5mLCAwKTsKKyAgICBDSEVDS19WQUxVRSAoZmktPmksIDApOworICB9CisgIHsKKyAgICBzdHJ1 Y3QgZmkgKmZpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX3N0 cnVjdF9maV81Iik7CisKKyAgICBDSEVDS19WQUxVRSAoZmktPmYsIDApOworICAgIENIRUNLX1ZB TFVFIChmaS0+aSwgMCk7CisgIH0KKyAgeworICAgIHN0cnVjdCBmaSAqZmkgPSBnY2Nfaml0X3Jl c3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfc3RydWN0X2ZpXzYiKTsKKworICAgIENI RUNLX1ZBTFVFIChmaS0+ZiwgMCk7CisgICAgQ0hFQ0tfVkFMVUUgKGZpLT5pLCAwKTsKKyAgfQor ICB7CisgICAgdW5pb24gdWJhcjEgKmZvbyA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJl c3VsdCwKKwkJCQkJCSAiZ2xvYmFsX3VuaW9uX3Vmb29fZmYzIik7CisgICAgQ0hFQ0tfVkFMVUUg KGZvby0+ZmYsIDMpOworICB9CisgIHsKKyAgICBpbnQgKmZvbyA9IGdjY19qaXRfcmVzdWx0X2dl dF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9pbnQxXzMiKTsKKworICAgIENIRUNLX1ZBTFVFICgq Zm9vLCAzKTsKKyAgfQorICB7CisgICAgaW50ICpmb28gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xv YmFsIChyZXN1bHQsICJnbG9iYWxfaW50Ml8zIik7CisKKyAgICBDSEVDS19WQUxVRSAoKmZvbywg Myk7CisgIH0KKyAgeworICAgIGludCAqZm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAo cmVzdWx0LCAiZ2xvYmFsX2ludDNfMTgiKTsKKworICAgIENIRUNLX1ZBTFVFICgqZm9vLCAxOCk7 CisgIH0KKyAgeworICAgIGludCAqZm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVz dWx0LCAiZ2xvYmFsX2ludDRfMyIpOworICAgIGludCAqKnBmb28gPSBnY2Nfaml0X3Jlc3VsdF9n ZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfcGludDUiKTsKKworICAgIENIRUNLX1ZBTFVFICgq Zm9vLCAzKTsKKyAgICBDSEVDS19WQUxVRSAoZm9vLCAqcGZvbyk7CisgICAgQ0hFQ0tfVkFMVUUg KCoqcGZvbywgMyk7CisgIH0KKyAgeworICAgIGludCAqZm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0 X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX2ludDZfMyIpOworICAgIGludCAqKnBmb28gPSBnY2Nf aml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfcGludDciKTsKKworICAgIENI RUNLX1ZBTFVFICgqZm9vLCAzKTsKKyAgICBDSEVDS19WQUxVRSAoZm9vICsgMSwgKnBmb28pOwor ICAgIENIRUNLX1ZBTFVFICgqKCpwZm9vIC0gMSksIDMpOworICB9CisgIHsKKyAgICBpbnQgKmZv byA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9sdmFsdWVpbml0 X2ludF8zIik7CisKKyAgICBDSEVDS19WQUxVRSAoKmZvbywgMyk7CisgIH0KKyAgeworICAgIGRv dWJsZSAqZm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX2Rv dWJsZTFfMyIpOworCisgICAgQ0hFQ0tfVkFMVUUgKCpmb28sIDMpOworICB9CisgIHsKKyAgICBk b3VibGUgKmZvbyA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9k b3VibGUyXzEyIik7CisKKyAgICBDSEVDS19WQUxVRSAoKmZvbywgMTIpOworICB9CisgIHsKKyAg ICBfQm9vbCAqZm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFs X2Jvb2wxXzEiKTsKKworICAgIENIRUNLX1ZBTFVFICgqZm9vLCAxKTsKKyAgfQorICB7CisgICAg aW50ICpmb28gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfaW50 YXJyXzEyMzQiKTsKKworICAgIENIRUNLX1ZBTFVFIChmb29bMF0sIDEpOworICAgIENIRUNLX1ZB TFVFIChmb29bMV0sIDIpOworICAgIENIRUNLX1ZBTFVFIChmb29bMl0sIDMpOworICAgIENIRUNL X1ZBTFVFIChmb29bM10sIDQpOworICB9CisgIHsKKyAgICBmbG9hdCAqZm9vID0gZ2NjX2ppdF9y ZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX2Zsb2F0YXJyXzEyIik7CisKKyAgICBD SEVDS19WQUxVRSAoZm9vWzBdLCAxKTsKKyAgICBDSEVDS19WQUxVRSAoZm9vWzFdLCAyKTsKKyAg ICBDSEVDS19WQUxVRSAoZm9vWzJdLCAwKTsKKyAgICBDSEVDS19WQUxVRSAoZm9vWzNdLCAwKTsK KyAgfQorICB7CisgICAgZmxvYXQgKmZvbyA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJl c3VsdCwgImdsb2JhbF9mbG9hdGFycl8xMjAiKTsKKworICAgIENIRUNLX1ZBTFVFIChmb29bMF0s IDEpOworICAgIENIRUNLX1ZBTFVFIChmb29bMV0sIDIpOworICAgIENIRUNLX1ZBTFVFIChmb29b Ml0sIDApOworICAgIENIRUNLX1ZBTFVFIChmb29bM10sIDApOworICB9CisgIHsKKyAgICBmbG9h dCAqZm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX2Zsb2F0 YXJyXzAwMDAiKTsKKworICAgIENIRUNLX1ZBTFVFIChmb29bMF0sIDApOworICAgIENIRUNLX1ZB TFVFIChmb29bMV0sIDApOworICAgIENIRUNLX1ZBTFVFIChmb29bMl0sIDApOworICAgIENIRUNL X1ZBTFVFIChmb29bM10sIDApOworICB9CisgIHsKKyAgICBmbG9hdCAqZm9vID0gZ2NjX2ppdF9y ZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX2Zsb2F0YXJyXzAwMzA1NjAwIik7CisK KyAgICBmbG9hdCBrZXlbXSA9IHswLDAsMywwLDUsNiwwLDB9OworCisgICAgQ0hFQ0tfVkFMVUUg KG1lbWNtcCAoZm9vLCBrZXksIHNpemVvZiBrZXkpLCAwKTsKKyAgfQorICB7CisgICAgaW50ICoq Zm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX3BpbnRhcnJf eDJ4eCIpOworCisgICAgQ0hFQ0tfVkFMVUUgKGZvb1swXSwgMCk7CisgICAgQ0hFQ0tfVkFMVUUg KCpmb29bMV0sIDIpOworICB9CisgIHsKKyAgICBjaGFyICpmb28gPSBnY2Nfaml0X3Jlc3VsdF9n ZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfY2hhcmFycl9xd2UiKTsKKyAgICBjb25zdCBjaGFy ICprZXkgPSAicXdlIjsKKyAgICBDSEVDS19WQUxVRSAoc3RyY21wIChmb28sIGtleSksIDApOwor ICB9CisgIHsKKyAgICBpbnQgKmZvbyA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3Vs dCwgImdsb2JhbF9pbnQyeDJtYXRyaXhfMTIzNCIpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkg PCA0OyBpKyspCisgICAgICBDSEVDS19WQUxVRSAoZm9vW2ldLCBpICsgMSk7CisgIH0KKyAgewor ICAgIGNvbnN0IGNoYXIgKipmb28gPQorICAgICAgZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAo cmVzdWx0LCAiZ2xvYmFsX2NwY2hhcmFycl9xd2VfYXNkIik7CisKKyAgICBDSEVDS19WQUxVRSAo c3RyY21wIChmb29bMF0sICJxd2UiKSwgMCk7CisgICAgQ0hFQ0tfVkFMVUUgKHN0cmNtcCAoZm9v WzFdLCAiYXNkIiksIDApOworICB9CisgIHsKKyAgICBpbnQgKipwaW50ID0KKyAgICAgIGdjY19q aXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9waW50XzQiKTsKKyAgICBpbnQg KmZvbyA9CisgICAgICBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxf aW50XzYiKTsKKyAgICBDSEVDS19WQUxVRSAoKipwaW50LCA0KTsKKyAgICBDSEVDS19WQUxVRSAo KmZvbywgNik7CisgIH0KKyAgeworICAgIGludCAoKmZuKSh2b2lkKSA9IGdjY19qaXRfcmVzdWx0 X2dldF9jb2RlIChyZXN1bHQsICJmbl9pbnRfMTEiKTsKKyAgICBDSEVDS19WQUxVRSAoZm4gKCks IDExKTsKKyAgfQorICB7CisgICAgaW50ICgqZm4pKHZvaWQpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0 X2NvZGUgKHJlc3VsdCwgImZuX2NpbnRfMTEiKTsKKyAgICBDSEVDS19WQUxVRSAoZm4gKCksIDEx KTsKKyAgfQorICB7CisgICAgc2hvcnQgKmZvbyA9CisgICAgICBnY2Nfaml0X3Jlc3VsdF9nZXRf Y29kZSAocmVzdWx0LCAiZ2xvYmFsX2x2YWx1ZWluaXRfc2hvcnRfMyIpOworICAgIENIRUNLX1ZB TFVFICgqZm9vLCAzKTsKKyAgfQorICB7CisgICAgaW50ICoqZm9vID0KKyAgICAgIGdjY19qaXRf cmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJnbG9iYWxfbHZhbHVlaW5pdF9jcGNpbnRfMyIpOwor ICAgIENIRUNLX1ZBTFVFICgqKmZvbywgMyk7CisgIH0KKyAgeworICAgIGludCAqZm9vID0KKyAg ICAgIGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJnbG9iYWxfbHZhbHVlaW5pdF9p bnRfNCIpOworICAgIENIRUNLX1ZBTFVFICgqZm9vLCA0KTsKKworICAgIGludCAqYmFyID0KKyAg ICAgIGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJnbG9iYWxfY29uc3RfaW50Xzci KTsKKyAgICBDSEVDS19WQUxVRSAoKmJhciwgNCk7CisgICAgLyogVGhlIGxpbmtlciBkb2VzIG5v dCBoYXZlIHRvIHN1cHBvcnQgdXAgdG8gNjQgYWxpZ25tZW50LCBzbyB0ZXN0IHRoYXQKKyAgICAg ICBpdCBkb2VzIGJlZm9yZSB0ZXN0aW5nIHRoYXQgaXQgd29ya3MgaW4gbGliZ2Njaml0LiAqLwor ICAgIGlmICgoc2l6ZV90KSAmdGVzdF9hbGlnbmVkNjRfd29ya3NfaW5fbGlua2VyXzEgJSA2NCA9 PSAwICYmCisJKHNpemVfdCkgJnRlc3RfYWxpZ25lZDY0X3dvcmtzX2luX2xpbmtlcl8yICUgNjQg PT0gMCkKKyAgICAgIENIRUNLX1ZBTFVFICgoc2l6ZV90KSBiYXIgJSA2NCwgMCk7IC8qIF9fYXR0 cmlidXRlX18gKChhbGlnbmVkICg2NCkpKSAqLworICB9CisgIHsKKyAgICB1bmlvbiB1cGludHNp emUgKmZvbyA9CisgICAgICBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiZ2xvYmFs X2NvbnN0X3VwaW50c2l6ZV8xIik7CisgICAgQ0hFQ0tfVkFMVUUgKGZvby0+cCwgKHZvaWQqKTB4 QkFBQUFCQkVFRUVGQkVFRik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvaml0 LmRnL3Rlc3QtbG9jYWwtaW5pdC1ydmFsdWUuYyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3Qt bG9jYWwtaW5pdC1ydmFsdWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uNDQzNjY2YWFiYTQKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90 ZXN0LWxvY2FsLWluaXQtcnZhbHVlLmMKQEAgLTAsMCArMSw1MzIgQEAKKworCisjaW5jbHVkZSA8 c3RkaW8uaD4KKworI2luY2x1ZGUgImxpYmdjY2ppdC5oIgorCisjaW5jbHVkZSAiaGFybmVzcy5o IgorCisvKiBUaGlzIHRlc3RjYXNlIGNoZWNrcyB0aGF0IGdjY19qaXRfY29udGV4dF9uZXdfY29u c3RydWN0b3IoKSB3b3JrcworICAgd2l0aCBsb2NhbHMuIFRlc3RzIHRoYXQgY29uc3RydWN0b3Jz IGNhbiBiZSB1c2VkIGFzIHJldHVybgorICAgdmFsdWVzIG9yIGZ1bmN0aW9uIGNhbGwgdmFsdWVz LiBUZXN0IHRoYXQgY29uc3RydWN0b3JzIGNhbiBoYXZlIHNpZGUKKyAgIGVmZmVjdHMgYW5kIGJl IGFzc2lnbmVkIHRvIGxvY2Fscy4KKyAqLworCit2b2lkCitjcmVhdGVfY29kZSAoZ2NjX2ppdF9j b250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCit7CisgIGdjY19qaXRfdHlwZSAqaW50X3R5 cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsCisgICAgR0NDX0pJVF9UWVBFX0lO VCk7CisgIGdjY19qaXRfdHlwZSAqcGludF90eXBlID0gZ2NjX2ppdF90eXBlX2dldF9wb2ludGVy IChpbnRfdHlwZSk7CisgIGdjY19qaXRfdHlwZSAqZG91YmxlX3R5cGUgPSBnY2Nfaml0X2NvbnRl eHRfZ2V0X3R5cGUgKGN0eHQsCisgICAgR0NDX0pJVF9UWVBFX0RPVUJMRSk7CisgIGdjY19qaXRf dHlwZSAqZmxvYXRfdHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBH Q0NfSklUX1RZUEVfRkxPQVQpOworICBnY2Nfaml0X3R5cGUgKmJvb2xfdHlwZSA9IGdjY19qaXRf Y29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfQk9PTCk7CisgIGdjY19q aXRfdHlwZSAqc2l6ZV90eXBlID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LAorICAg IEdDQ19KSVRfVFlQRV9TSVpFX1QpOworICBnY2Nfaml0X3R5cGUgKnZvaWRwdHJfdHlwZSA9IGdj Y19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfVk9JRF9QVFIp OworCisgIC8qIE1ha2UgYSBzdHJ1Y3Q6IHN0cnVjdCBmaSB7IGZsb2F0IGY7IGludCBpO30gKi8K KyAgZ2NjX2ppdF9maWVsZCAqZmlfZiA9IGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQs CisJCQkJCQkgMCwKKwkJCQkJCSBmbG9hdF90eXBlLAorCQkJCQkJICJmIik7CisgIGdjY19qaXRf ZmllbGQgKmZpX2kgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJIDAs CisJCQkJCQkgaW50X3R5cGUsCisJCQkJCQkgImkiKTsKKyAgZ2NjX2ppdF9maWVsZCAqZmllbGRz W10gPSB7ZmlfZiwgZmlfaX07CisKKyAgZ2NjX2ppdF90eXBlICpzdHJ1Y3RfZmlfdHlwZSA9Cisg ICAgZ2NjX2ppdF9zdHJ1Y3RfYXNfdHlwZSAoCisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3N0 cnVjdF90eXBlIChjdHh0LAorCQkJCSAgICAgICAwLAorCQkJCSAgICAgICAiZmkiLAorCQkJCSAg ICAgICAyLAorCQkJCSAgICAgICBmaWVsZHMpKTsKKworICAvKiBNYWtlIGEgc3RydWN0OgorCisg ICAgIHN0cnVjdCBiYXIgeworICAgICAgIGludCBpaTsKKyAgICAgICBpbnQgYXJyWzUwXTsKKyAg ICAgICBmbG9hdCBmZjsKKyAgICAgfQorICAqLworICBnY2Nfaml0X2ZpZWxkICpiYXJfZmYgPSBn Y2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCSAgMCwKKwkJCQkgIGZsb2F0X3R5 cGUsCisJCQkJICAiZmYiKTsKKyAgZ2NjX2ppdF9maWVsZCAqYmFyX2lpID0gZ2NjX2ppdF9jb250 ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkgIDAsCisJCQkJICBpbnRfdHlwZSwKKwkJCQkgICJp aSIpOworICBnY2Nfaml0X3R5cGUgKmludDUwYXJyX3R5cGUgPQorICAgIGdjY19qaXRfY29udGV4 dF9uZXdfYXJyYXlfdHlwZSAoY3R4dCwKKwkJCQkgICAgMCwKKwkJCQkgICAgaW50X3R5cGUsCisJ CQkJICAgIDUwKTsKKyAgZ2NjX2ppdF9maWVsZCAqYmFyX2ZpID0gZ2NjX2ppdF9jb250ZXh0X25l d19maWVsZCAoY3R4dCwKKwkJCQkJCSAwLAorCQkJCQkJIGludDUwYXJyX3R5cGUsCisJCQkJCQkg ImFyciIpOworICBnY2Nfaml0X2ZpZWxkICpmaWVsZHMyW10gPSB7YmFyX2ZmLCBiYXJfZmksIGJh cl9paX07CisKKyAgZ2NjX2ppdF90eXBlICpzdHJ1Y3RfYmFyX3R5cGUgPQorICAgIGdjY19qaXRf c3RydWN0X2FzX3R5cGUgKAorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfdHlwZSAo Y3R4dCwKKwkJCQkgICAgICAgMCwKKwkJCQkgICAgICAgImJhciIsCisJCQkJICAgICAgIDMsCisJ CQkJICAgICAgIGZpZWxkczIpKTsKKworICAvKiBNYWtlIGFuIHVuaW9uOgorCisgICAgIHVuaW9u IHViYXIgeworICAgICAgIGZsb2F0IGZmOworICAgICAgIGludCBpaTsKKyAgICAgfTsKKyAgKi8K KyAgZ2NjX2ppdF9maWVsZCAqdWJhcl9mZiA9IGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0 eHQsCisJCQkJCQkgICAgICAwLAorCQkJCQkJICAgICAgZmxvYXRfdHlwZSwKKwkJCQkJCSAgICAg ICJmZiIpOworICBnY2Nfaml0X2ZpZWxkICp1YmFyX2lpID0gZ2NjX2ppdF9jb250ZXh0X25ld19m aWVsZCAoY3R4dCwKKwkJCQkJCSAgICAgIDAsCisJCQkJCQkgICAgICBpbnRfdHlwZSwKKwkJCQkJ CSAgICAgICJpaSIpOworICBnY2Nfaml0X2ZpZWxkICpmaWVsZHMzW10gPSB7dWJhcl9mZiwgdWJh cl9paX07CisgIGdjY19qaXRfdHlwZSAqdWJhciA9IGdjY19qaXRfY29udGV4dF9uZXdfdW5pb25f dHlwZSAoY3R4dCwKKwkJCQkJCSAgICAgICAwLAorCQkJCQkJICAgICAgICJ1YmFyIiwKKwkJCQkJ CSAgICAgICAyLAorCQkJCQkJICAgICAgIGZpZWxkczMpOworCisgICh2b2lkKSB1YmFyOworICAo dm9pZCkgc3RydWN0X2Jhcl90eXBlOworICAodm9pZCkgc3RydWN0X2ZpX3R5cGU7CisgICh2b2lk KSBib29sX3R5cGU7CisgICh2b2lkKSBkb3VibGVfdHlwZTsKKyAgKHZvaWQpIHBpbnRfdHlwZTsK KyAgKHZvaWQpIHZvaWRwdHJfdHlwZTsKKyAgKHZvaWQpIHNpemVfdHlwZTsKKworICBnY2Nfaml0 X2Z1bmN0aW9uICpmbl9pbnRfMzsKKyAgeyAvKiBpbnQgZm9vICgpIHsgaW50IGxvY2FsID0gMzsg cmV0dXJuIGxvY2FsO30gKi8KKyAgICBmbl9pbnRfMyA9CisgICAgICBnY2Nfaml0X2NvbnRleHRf bmV3X2Z1bmN0aW9uIChjdHh0LAorCQkJCSAgICAwLAorCQkJCSAgICBHQ0NfSklUX0ZVTkNUSU9O X0VYUE9SVEVELAorCQkJCSAgICBpbnRfdHlwZSwKKwkJCQkgICAgImZuX2ludF8zIiwKKwkJCQkg ICAgMCwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCk7CisgICAgZ2NjX2ppdF9ibG9jayAqYmxvY2sg PSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZm5faW50XzMsICJzdGFydCIpOworICAgIGdj Y19qaXRfbHZhbHVlICpsb2NhbCA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2xvY2FsIChmbl9pbnRf MywKKwkJCQkJCQkwLAorCQkJCQkJCWludF90eXBlLAorCQkJCQkJCSJsb2NhbCIpOworICAgIGdj Y19qaXRfcnZhbHVlICpydmFsID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQg KAorICAgICAgY3R4dCwgaW50X3R5cGUsIDMpOworCisgICAgZ2NjX2ppdF9ibG9ja19hZGRfYXNz aWdubWVudCAoYmxvY2ssIDAsIGxvY2FsLCBydmFsKTsKKworICAgIGdjY19qaXRfYmxvY2tfZW5k X3dpdGhfcmV0dXJuIChibG9jaywKKwkJCQkgICAwLAorCQkJCSAgIGdjY19qaXRfbHZhbHVlX2Fz X3J2YWx1ZShsb2NhbCkpOworICB9CisgIHsgLyogc3RydWN0IGZpIGZvbygpIHsgcmV0dXJuIChz dHJ1Y3QgZmkpezEsMn07fSAqLworICAgIGdjY19qaXRfZnVuY3Rpb24gKmZuID0KKyAgICAgIGdj Y19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsCisJCQkJICAgIDAsCisJCQkJICAgIEdD Q19KSVRfRlVOQ1RJT05fRVhQT1JURUQsCisJCQkJICAgIHN0cnVjdF9maV90eXBlLAorCQkJCSAg ICAiZm5fZmlfMV8yIiwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCk7CisgICAg Z2NjX2ppdF9ibG9jayAqYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZm4sICJz dGFydCIpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfZjEgPSBnY2Nfaml0X2NvbnRleHRf bmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBmbG9hdF90eXBlLCAxKTsKKyAgICBn Y2Nfaml0X3J2YWx1ZSAqcnZhbF9pMiA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21f aW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAyKTsKKworICAgIGdjY19qaXRfcnZhbHVlICp2 YWxzW10gPSB7IHJ2YWxfZjEsIHJ2YWxfaTJ9OworICAgIGdjY19qaXRfZmllbGQgKmZpZWxkc1td ID0ge2ZpX2YsIGZpX2l9OworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2Nv bnRleHRfbmV3X2NvbnN0cnVjdG9yCisgICAgICAoY3R4dCwgMCwKKyAgICAgICBzdHJ1Y3RfZmlf dHlwZSwKKyAgICAgICAyLAorICAgICAgIGZpZWxkcywKKyAgICAgICB2YWxzKTsKKworICAgIGdj Y19qaXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuIChibG9jaywKKwkJCQkgICAwLAorCQkJCSAgIGN0 b3IpOworICB9CisgIHsgLyoKKyAgICAgICBzdHJ1Y3QgZmkgZm9vKCkKKyAgICAgICB7CisJIHN0 cnVjdCBmaSBsb2NhbCA9IHsxLDJ9OworCSBsb2NhbCA9IChzdHJ1Y3QgZmkpezUsNn07CisJIHJl dHVybiBsb2NhbDsKKyAgICAgICB9CisgICAgICovCisgICAgZ2NjX2ppdF9mdW5jdGlvbiAqZm4g PQorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwKKwkJCQkgICAgMCwK KwkJCQkgICAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgICAgc3RydWN0X2ZpX3R5 cGUsCisJCQkJICAgICJmbl9maV81XzYiLAorCQkJCSAgICAwLAorCQkJCSAgICAwLAorCQkJCSAg ICAwKTsKKyAgICBnY2Nfaml0X2x2YWx1ZSAqbG9jYWwgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19s b2NhbCAoZm4sCisJCQkJCQkJMCwKKwkJCQkJCQlzdHJ1Y3RfZmlfdHlwZSwKKwkJCQkJCQkibG9j YWwiKTsKKyAgICBnY2Nfaml0X2Jsb2NrICpibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Js b2NrIChmbiwgInN0YXJ0Iik7CisKKyAgICB7CisgICAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF9m MSA9CisJZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKGN0eHQsIGZsb2F0X3R5 cGUsIDEpOworICAgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfaTIgPQorCWdjY19qaXRfY29udGV4 dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0LCBpbnRfdHlwZSwgMik7CisKKyAgICAgIGdjY19q aXRfcnZhbHVlICp2YWxzW10gPSB7IHJ2YWxfZjEsIHJ2YWxfaTJ9OworICAgICAgZ2NjX2ppdF9m aWVsZCAqZmllbGRzW10gPSB7ZmlfZiwgZmlfaX07CisKKyAgICAgIGdjY19qaXRfcnZhbHVlICpj dG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1Y3RvcgorCShjdHh0LCAwLAorCSBzdHJ1 Y3RfZmlfdHlwZSwKKwkgMiwKKwkgZmllbGRzLAorCSB2YWxzKTsKKyAgICAgIGdjY19qaXRfYmxv Y2tfYWRkX2Fzc2lnbm1lbnQgKGJsb2NrLCAwLCBsb2NhbCwgY3Rvcik7CisgICAgfQorICAgIHsK KyAgICAgIGdjY19qaXRfcnZhbHVlICpydmFsX2YxID0KKwlnY2Nfaml0X2NvbnRleHRfbmV3X3J2 YWx1ZV9mcm9tX2ludCAoY3R4dCwgZmxvYXRfdHlwZSwgNSk7CisgICAgICBnY2Nfaml0X3J2YWx1 ZSAqcnZhbF9pMiA9CisJZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKGN0eHQs IGludF90eXBlLCA2KTsKKworICAgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHNbXSA9IHsgcnZhbF9m MSwgcnZhbF9pMn07CisgICAgICBnY2Nfaml0X2ZpZWxkICpmaWVsZHNbXSA9IHtmaV9mLCBmaV9p fTsKKworICAgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2Nv bnN0cnVjdG9yCisJKGN0eHQsIDAsCisJIHN0cnVjdF9maV90eXBlLAorCSAyLAorCSBmaWVsZHMs CisJIHZhbHMpOworICAgICAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVudCAoYmxvY2ssIDAs IGxvY2FsLCBjdG9yKTsKKyAgICB9CisKKyAgICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVy biAoYmxvY2ssCisJCQkJICAgMCwKKwkJCQkgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUobG9j YWwpKTsKKyAgfQorICB7IC8qIHN0cnVjdCBmaSBmb28oKSB7IHN0cnVjdCBmaSBsb2NhbCA9IHsx LCBmbl9pbnRfMygpfTsKKwkJCSByZXR1cm4gbG9jYWw7fQorCisgICAgICAgVGhlIGN0b3IgaGFz IGEgc2lkZSBlZmZlY3QgKGZ1bmNjYWxsKSAqLworICAgIGdjY19qaXRfZnVuY3Rpb24gKmZuID0K KyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsCisJCQkJICAgIDAsCisJ CQkJICAgIEdDQ19KSVRfRlVOQ1RJT05fRVhQT1JURUQsCisJCQkJICAgIHN0cnVjdF9maV90eXBl LAorCQkJCSAgICAiZm5fZmlfMV8zIiwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCwKKwkJCQkgICAg MCk7CisgICAgZ2NjX2ppdF9sdmFsdWUgKmxvY2FsID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfbG9j YWwgKGZuLAorCQkJCQkJCTAsCisJCQkJCQkJc3RydWN0X2ZpX3R5cGUsCisJCQkJCQkJImxvY2Fs Iik7CisgICAgZ2NjX2ppdF9ibG9jayAqYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9j ayAoZm4sICJzdGFydCIpOworCisgICAgeworICAgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfZjEg PQorCWdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0LCBmbG9hdF90eXBl LCAxKTsKKyAgICAgIGdjY19qaXRfcnZhbHVlICpydmFsX2kyID0KKwlnY2Nfaml0X2NvbnRleHRf bmV3X2NhbGwgKGN0eHQsIDAsIGZuX2ludF8zLCAwLCAwKTsKKworICAgICAgZ2NjX2ppdF9ydmFs dWUgKnZhbHNbXSA9IHsgcnZhbF9mMSwgcnZhbF9pMn07CisgICAgICBnY2Nfaml0X2ZpZWxkICpm aWVsZHNbXSA9IHtmaV9mLCBmaV9pfTsKKworICAgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBn Y2Nfaml0X2NvbnRleHRfbmV3X2NvbnN0cnVjdG9yCisJKGN0eHQsIDAsCisJIHN0cnVjdF9maV90 eXBlLAorCSAyLAorCSBmaWVsZHMsCisJIHZhbHMpOworICAgICAgZ2NjX2ppdF9ibG9ja19hZGRf YXNzaWdubWVudCAoYmxvY2ssIDAsIGxvY2FsLCBjdG9yKTsKKyAgICB9CisKKyAgICBnY2Nfaml0 X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoYmxvY2ssCisJCQkJICAgMCwKKwkJCQkgICBnY2Nfaml0 X2x2YWx1ZV9hc19ydmFsdWUobG9jYWwpKTsKKyAgfQorICB7IC8qIHN0cnVjdCBmaSBmb28oZmkp IHsgcmV0dXJuIGZpO30KKyAgICAgICBzdHJ1Y3QgZmkgYmFyKCkgeyByZXR1cm4gZm9vKChzdHJ1 Y3QgZmkpezMsIDR9KTsgfQorICAgICAqLworCisgICAgZ2NjX2ppdF9wYXJhbSAqZmlfcGFyYW0g PQorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19wYXJhbSAoY3R4dCwgMCwgc3RydWN0X2ZpX3R5 cGUsICJmaSIpOworCisgICAgZ2NjX2ppdF9mdW5jdGlvbiAqZm4wID0KKyAgICAgIGdjY19qaXRf Y29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsCisJCQkJICAgIDAsCisJCQkJICAgIEdDQ19KSVRf RlVOQ1RJT05fRVhQT1JURUQsCisJCQkJICAgIHN0cnVjdF9maV90eXBlLAorCQkJCSAgICAiZm5f ZmlfeF94IiwKKwkJCQkgICAgMSwKKwkJCQkgICAgJmZpX3BhcmFtLAorCQkJCSAgICAwKTsKKyAg ICBnY2Nfaml0X2Jsb2NrICpibG9jazAgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZm4w LCAic3RhcnQiKTsKKyAgICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoYmxvY2swLAor CQkJCSAgIDAsCisJCQkJICAgZ2NjX2ppdF9wYXJhbV9hc19ydmFsdWUgKAorCQkJCSAgICAgZ2Nj X2ppdF9mdW5jdGlvbl9nZXRfcGFyYW0gKGZuMCwgMCkpKTsKKworICAgIGdjY19qaXRfZnVuY3Rp b24gKmZuID0KKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsCisJCQkJ ICAgIDAsCisJCQkJICAgIEdDQ19KSVRfRlVOQ1RJT05fRVhQT1JURUQsCisJCQkJICAgIHN0cnVj dF9maV90eXBlLAorCQkJCSAgICAiZm5fZmlfM180IiwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCwK KwkJCQkgICAgMCk7CisgICAgZ2NjX2ppdF9ibG9jayAqYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9u X25ld19ibG9jayAoZm4sICJzdGFydCIpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfZjEg PSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBmbG9h dF90eXBlLCAzKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF9pMiA9IGdjY19qaXRfY29udGV4 dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCA0KTsKKworICAg IGdjY19qaXRfcnZhbHVlICp2YWxzW10gPSB7IHJ2YWxfZjEsIHJ2YWxfaTJ9OworICAgIGdjY19q aXRfZmllbGQgKmZpZWxkc1tdID0ge2ZpX2YsIGZpX2l9OworCisgICAgZ2NjX2ppdF9ydmFsdWUg KmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2NvbnN0cnVjdG9yCisgICAgICAoY3R4dCwgMCwK KyAgICAgICBzdHJ1Y3RfZmlfdHlwZSwKKyAgICAgICAyLAorICAgICAgIGZpZWxkcywKKyAgICAg ICB2YWxzKTsKKworICAgIGdjY19qaXRfcnZhbHVlICpjYWxsID0gZ2NjX2ppdF9jb250ZXh0X25l d19jYWxsIChjdHh0LCAwLCBmbjAsIDEsICZjdG9yKTsKKworICAgIGdjY19qaXRfYmxvY2tfZW5k X3dpdGhfcmV0dXJuIChibG9jaywKKwkJCQkgICAwLAorCQkJCSAgIGNhbGwpOworICB9CisgIHsg Lyogc3RydWN0IGJhciBmb28oKSB7IHN0cnVjdCBiYXIgbG9jYWwgPSB7fTsKKwkJCSAgcmV0dXJu IGxvY2FsO30KKyAgICAgKi8KKyAgICBnY2Nfaml0X2Z1bmN0aW9uICpmbiA9CisgICAgICBnY2Nf aml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LAorCQkJCSAgICAwLAorCQkJCSAgICBHQ0Nf SklUX0ZVTkNUSU9OX0VYUE9SVEVELAorCQkJCSAgICBzdHJ1Y3RfYmFyX3R5cGUsCisJCQkJICAg ICJmbl9iYXJfMHMiLAorCQkJCSAgICAwLAorCQkJCSAgICAwLAorCQkJCSAgICAwKTsKKyAgICBn Y2Nfaml0X2x2YWx1ZSAqbG9jYWwgPQorICAgICAgZ2NjX2ppdF9mdW5jdGlvbl9uZXdfbG9jYWwg KGZuLAorCQkJCSAgMCwKKwkJCQkgIHN0cnVjdF9iYXJfdHlwZSwKKwkJCQkgICJsb2NhbCIpOwor ICAgIGdjY19qaXRfYmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZu LCAic3RhcnQiKTsKKworICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0 X25ld19jb25zdHJ1Y3RvcgorCShjdHh0LCAwLAorCSBzdHJ1Y3RfYmFyX3R5cGUsCisJIDAsCisJ IDAsCisJIDApOworICAgIGdjY19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnQgKGJsb2NrLCAwLCBs b2NhbCwgY3Rvcik7CisKKyAgICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoYmxvY2ss CisJCQkJICAgMCwKKwkJCQkgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUobG9jYWwpKTsKKyAg fQorICB7IC8qIHN0cnVjdCBiYXIgZm9vKCkgeyBzdHJ1Y3QgYmFyIGxvY2FsOworCQkJICBsb2Nh bC5hcnIgPSAoaW50IFs1MF0pezEsMiwzLDQsNSw2fTsKKwkJCSAgcmV0dXJuIGxvY2FsO30KKyAg ICAgKi8KKyAgICBnY2Nfaml0X2Z1bmN0aW9uICpmbiA9CisgICAgICBnY2Nfaml0X2NvbnRleHRf bmV3X2Z1bmN0aW9uIChjdHh0LAorCQkJCSAgICAwLAorCQkJCSAgICBHQ0NfSklUX0ZVTkNUSU9O X0VYUE9SVEVELAorCQkJCSAgICBzdHJ1Y3RfYmFyX3R5cGUsCisJCQkJICAgICJmbl9iYXJfMTIz cyIsCisJCQkJICAgIDAsCisJCQkJICAgIDAsCisJCQkJICAgIDApOworICAgIGdjY19qaXRfbHZh bHVlICpsb2NhbCA9CisgICAgICBnY2Nfaml0X2Z1bmN0aW9uX25ld19sb2NhbCAoZm4sCisJCQkJ ICAwLAorCQkJCSAgc3RydWN0X2Jhcl90eXBlLAorCQkJCSAgImxvY2FsIik7CisgICAgZ2NjX2pp dF9ibG9jayAqYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZm4sICJzdGFydCIp OworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHVlc1s2XTsKKworICAgIGZvciAoaW50IGkgPSAw OyBpIDwgNjsgaSsrKQorICAgICAgdmFsdWVzW2ldID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFs dWVfZnJvbV9pbnQgKGN0eHQsIGludF90eXBlLCBpICsgMSk7CisKKyAgICBnY2Nfaml0X3J2YWx1 ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfY29uc3RydWN0b3IKKwkoY3R4dCwgMCwKKwkg aW50NTBhcnJfdHlwZSwKKwkgNiwKKwkgMCwKKwkgdmFsdWVzKTsKKworICAgIGdjY19qaXRfbHZh bHVlICphcnJfbHYgPSBnY2Nfaml0X2x2YWx1ZV9hY2Nlc3NfZmllbGQgKGxvY2FsLAorCQkJCQkJ CSAgMCwKKwkJCQkJCQkgIGJhcl9maSk7CisgICAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVu dCAoYmxvY2ssIDAsIGFycl9sdiwgY3Rvcik7CisKKyAgICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRo X3JldHVybiAoYmxvY2ssCisJCQkJICAgMCwKKwkJCQkgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFs dWUobG9jYWwpKTsKKyAgfQorICB7IC8qIGludFs1MF0gZm9vKCkgeyBpbnQgYXJyWzUwXTsKKwkJ ICAgICAgIGFyciA9IChpbnQgWzUwXSl7MSwyLDMsNCw1LDZ9OworCQkgICAgICAgcmV0dXJuIGFy cjt9CisKKyAgICAgICBOLkI6IE5vdCBhIHR5cG8sIHJldHVybmluZyBhbiBhcnJheS4KKyAgICAg Ki8KKyAgICBnY2Nfaml0X2Z1bmN0aW9uICpmbiA9CisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3 X2Z1bmN0aW9uIChjdHh0LAorCQkJCSAgICAwLAorCQkJCSAgICBHQ0NfSklUX0ZVTkNUSU9OX0VY UE9SVEVELAorCQkJCSAgICBpbnQ1MGFycl90eXBlLAorCQkJCSAgICAiZm5faW50NTBhcnJfMTIz cyIsCisJCQkJICAgIDAsCisJCQkJICAgIDAsCisJCQkJICAgIDApOworICAgIGdjY19qaXRfbHZh bHVlICpsb2NhbCA9CisgICAgICBnY2Nfaml0X2Z1bmN0aW9uX25ld19sb2NhbCAoZm4sCisJCQkJ ICAwLAorCQkJCSAgaW50NTBhcnJfdHlwZSwKKwkJCQkgICJsb2NhbCIpOworICAgIGdjY19qaXRf YmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZuLCAic3RhcnQiKTsK KworICAgIGdjY19qaXRfcnZhbHVlICp2YWx1ZXNbNl07CisKKyAgICBmb3IgKGludCBpID0gMDsg aSA8IDY7IGkrKykKKyAgICAgIHZhbHVlc1tpXSA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVl X2Zyb21faW50IChjdHh0LCBpbnRfdHlwZSwgaSArIDEpOworCisgICAgZ2NjX2ppdF9ydmFsdWUg KmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2NvbnN0cnVjdG9yCisJKGN0eHQsIDAsCisJIGlu dDUwYXJyX3R5cGUsCisJIDYsCisJIDAsCisJIHZhbHVlcyk7CisKKyAgICBnY2Nfaml0X2Jsb2Nr X2FkZF9hc3NpZ25tZW50IChibG9jaywgMCwgbG9jYWwsIGN0b3IpOworCisgICAgZ2NjX2ppdF9i bG9ja19lbmRfd2l0aF9yZXR1cm4gKGJsb2NrLAorCQkJCSAgIDAsCisJCQkJICAgZ2NjX2ppdF9s dmFsdWVfYXNfcnZhbHVlKGxvY2FsKSk7CisgIH0KK30KKworc3RydWN0IGZpMiB7CisgIGZsb2F0 IGY7CisgIGludCBpOworfTsKKworc3RydWN0IGJhcjIgeworICBmbG9hdCBmZjsKKyAgaW50IGFy cls1MF07CisgIGludCBpaTsKK307CisKK3VuaW9uIHViYXIyIHsKKyAgZmxvYXQgZmY7CisgIGlu dCBpaTsKK307CisKK3N0cnVjdCBpbnQ1MGFyciB7CisgIGludCBhcnJbNTBdOworfTsKKwordm9p ZAorc2NyYW1ibGVfc3RhY2sodm9pZCkKKyAgeworICAgIGNoYXIgKnAgPSBhbGxvY2EoMTAwKTsK KyAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDsgaSsrKQorICAgICAgKnArKyA9IDB4RjA7Cisg ICAgYXNtKCIiKTsgLyogRG9uJ3QgdG91Y2ggbXkgY29kZSwgb3B0aW1pemVycy4gKi8KKyAgfQor Cit2b2lkCit2ZXJpZnlfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCBnY2Nfaml0X3Jlc3Vs dCAqcmVzdWx0KQoreworICBDSEVDS19OT05fTlVMTCAocmVzdWx0KTsKKworICB7CisgICAgc3Ry dWN0IGZpMiAoKmZuKSAodm9pZCkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAi Zm5fZmlfMV8yIik7CisgICAgc2NyYW1ibGVfc3RhY2soKTsKKyAgICBzdHJ1Y3QgZmkyIGZpID0g Zm4oKTsKKyAgICBDSEVDS19WQUxVRSAoZmkuZiwgMSk7CisgICAgQ0hFQ0tfVkFMVUUgKGZpLmks IDIpOworICB9CisgIHsKKyAgICBzdHJ1Y3QgZmkyICgqZm4pICh2b2lkKSA9IGdjY19qaXRfcmVz dWx0X2dldF9jb2RlIChyZXN1bHQsICJmbl9maV81XzYiKTsKKyAgICBzdHJ1Y3QgZmkyIGZpID0g Zm4oKTsKKyAgICBDSEVDS19WQUxVRSAoZmkuZiwgNSk7CisgICAgQ0hFQ0tfVkFMVUUgKGZpLmks IDYpOworICB9CisgIHsKKyAgICBzdHJ1Y3QgZmkyICgqZm4pICh2b2lkKSA9IGdjY19qaXRfcmVz dWx0X2dldF9jb2RlIChyZXN1bHQsICJmbl9maV8xXzMiKTsKKyAgICBzdHJ1Y3QgZmkyIGZpID0g Zm4oKTsKKyAgICBDSEVDS19WQUxVRSAoZmkuZiwgMSk7CisgICAgQ0hFQ0tfVkFMVUUgKGZpLmks IDMpOworICB9ICAKKyAgeworICAgIHN0cnVjdCBmaTIgKCpmbikgKHZvaWQpID0gZ2NjX2ppdF9y ZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImZuX2ZpXzNfNCIpOworICAgIHN0cnVjdCBmaTIgZmkg PSBmbigpOworICAgIENIRUNLX1ZBTFVFIChmaS5mLCAzKTsKKyAgICBDSEVDS19WQUxVRSAoZmku aSwgNCk7CisgIH0KKyAgeworICAgIHNjcmFtYmxlX3N0YWNrKCk7CisgICAgc3RydWN0IGJhcjIg KCpmbikgKHZvaWQpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImZuX2Jhcl8w cyIpOworICAgIHN0cnVjdCBiYXIyIGJhciA9IGZuKCk7CisgICAgc3RydWN0IGJhcjIga2V5ID0g e307CisKKyAgICBDSEVDS19WQUxVRSAoYmFyLmZmLCAwKTsKKyAgICBDSEVDS19WQUxVRSAoYmFy LmlpLCAwKTsKKyAgICBDSEVDS19WQUxVRSAobWVtY21wICgmYmFyLmFyciwgJmtleS5hcnIsIHNp emVvZiAoa2V5LmFycikpLCAwKTsKKyAgfQorICB7CisgICAgc2NyYW1ibGVfc3RhY2soKTsKKyAg ICBzdHJ1Y3QgYmFyMiAoKmZuKSAodm9pZCkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVz dWx0LCAiZm5fYmFyXzEyM3MiKTsKKyAgICBzdHJ1Y3QgYmFyMiBiYXIgPSBmbigpOworICAgIHN0 cnVjdCBiYXIyIGtleSA9IHsuYXJyID0gezEsMiwzLDQsNSw2fSB9OworCisgICAgQ0hFQ0tfVkFM VUUgKG1lbWNtcCAoJmJhci5hcnIsICZrZXkuYXJyLCBzaXplb2YgKGtleS5hcnIpKSwgMCk7Cisg IH0KKyAgeworICAgIHNjcmFtYmxlX3N0YWNrKCk7CisgICAgLyogVGhpcyBpcyBhYml0IHNoYWR5 LiBMZXRzIGp1c3QgcHJldGVuZCB0aGF0IGFycmF5IHJldHVybnMgw6AgbGEgRm9ydHJhbgorICAg ICAgIGlzIHRoZSBzYW1lIHRoaW5nIGFzIHJldHVybmluZyBhIHN0cnVjdCB3aXRoIGFuIGFycmF5 IGluIGl0IGluIEMuICovCisgICAgc3RydWN0IGludDUwYXJyICgqZm4pICh2b2lkKSA9CisgICAg ICBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiZm5faW50NTBhcnJfMTIzcyIpOwor ICAgIHN0cnVjdCBpbnQ1MGFyciBhbnMgPSBmbigpOworICAgIGludCBrZXlbNTBdID0gezEsMiwz LDQsNSw2fTsKKworICAgIENIRUNLX1ZBTFVFIChtZW1jbXAgKGFucy5hcnIsIGtleSwgc2l6ZW9m IChrZXkpKSwgMCk7CisgIH0KK30KLS0gCjIuMzAuMgoK --_002_ac3bb1dcaf524ec6892c03526b3e4503kthse_--