From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-relay-3.sys.kth.se (smtp-relay-3.sys.kth.se [IPv6:2001:6b0:1:1200:250:56ff:fead:700c]) by sourceware.org (Postfix) with ESMTPS id 807583858400 for ; Thu, 21 Oct 2021 13:27:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 807583858400 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-3.sys.kth.se (Postfix) with ESMTPS id 4HZpDX6rl4zPNQS for ; Thu, 21 Oct 2021 15:27:08 +0200 (CEST) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp-relay-3.sys.kth.se 4HZpDX6rl4zPNQS 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.922.14; Thu, 21 Oct 2021 15:27:08 +0200 Received: from exdb6.ug.kth.se ([192.168.32.61]) by exdb6.ug.kth.se ([192.168.32.61]) with mapi id 15.02.0922.014; Thu, 21 Oct 2021 15:27:08 +0200 From: Petter Tomner To: "jit@gcc.gnu.org" Subject: SV: [RFC] Setting data segment and loong constants - WIP Thread-Topic: [RFC] Setting data segment and loong constants - WIP Thread-Index: AQHXuoqmNtfxGA76ZkuBuB66scSAWavdh6Xg Date: Thu, 21 Oct 2021 13:27:08 +0000 Message-ID: <67377ebd1d90482aa1123121d344cf92@kth.se> References: <626c20889db34821ae574cae072b26c0@kth.se> In-Reply-To: <626c20889db34821ae574cae072b26c0@kth.se> 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_67377ebd1d90482aa1123121d344cf92kthse_" MIME-Version: 1.0 X-Spam-Status: No, score=-12.6 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, SPF_HELO_NONE, SPF_PASS, TXREP, T_FILL_THIS_FORM_SHORT 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: Thu, 21 Oct 2021 13:27:18 -0000 --_002_67377ebd1d90482aa1123121d344cf92kthse_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable I think I more or less got a working patch for constructors and global rval= ue init. The remaining concern is that type matching on the other entry points only remove one qualifier (not recursive), and does not match on eg.=20 "pointer to const x" made from different function calls. Which makes cast=20 pretty much mandatory for any nested type. I made a "strip all and compare types" for the new entrypoints, but I wonde= r if that just makes it more confusing for the user? I attached a WIP patch.= --_002_67377ebd1d90482aa1123121d344cf92kthse_ Content-Type: text/x-patch; name="0003-ctor.patch" Content-Description: 0003-ctor.patch Content-Disposition: attachment; filename="0003-ctor.patch"; size=130533; creation-date="Thu, 21 Oct 2021 13:25:04 GMT"; modification-date="Thu, 21 Oct 2021 13:25:04 GMT" Content-Transfer-Encoding: base64 RnJvbSBiNjlhNTU4NzZhNDQxODdmZmFiZWM2ZWUzNzUwOWY3NmU0YTc0YTk3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXR0ZXIgVG9tbmVyIDx0b21uZXJAa3RoLnNlPgpEYXRlOiBG cmksIDE1IE9jdCAyMDIxIDIwOjE3OjQwICswMjAwClN1YmplY3Q6IFtQQVRDSCAzLzNdIGN0b3IK CkFkZCBzdXBvcnQgZm9yIGdsb2JhbCBydmFsdWUgaW5pdGlhbGl6YXRpb24gYW5kIGN0b3JzCgpU aGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgaW5pdGlhbGl6YXRpb24gb2YgZ2xvYmFsIHZhcmlh Ymxlcwp3aXRoIHJ2YWx1ZXMgYW5kIGNyZWF0aW5nIGNvbnN0cnVjdG9ycyBmb3IgYXJyYXksIHN0 cnVjdCBhbmQKdW5pb24gdHlwZXMgd2hpY2ggY2FuIGJlIHVzZWQgYXMgcnZhbHVlcy4KCmdjYy9q aXQvCgkqIGppdC1wbGF5YmFjay5jIDoKCShnbG9iYWxfbmV3X2RlY2wpIDogSGFuZGxlIGNvbnN0 IGdsb2JhbCBnZW5lcmF0aW9uCgkobmV3X2dsb2JhbCkgOiBOZXcgZmxhZwoJKGdsb2JhbF9zZXRf aW5pdF9ydmFsdWUpIDogTmV3CgkobmV3X2N0b3IpIDogTmV3CgkobmV3X2dsb2JhbF9pbml0aWFs aXplZCkgOiBGbGFnCgkoYXNfdHJ1dGhfdmFsdWUpIDogRm9sZAoJKG5ld191bmFyeV9vcCkgOiBG b2xkCgkobmV3X2JpbmFyeV9vcCkgOiBGb2xkCgkobmV3X2NvbXBhcmlzb24pIDogRm9sZAoJKG5l d19hcnJheV9hY2Nlc3MpIDogRm9sZAoJKG5ld19kZXJlZmVyZW5jZSkgOiBGb2xkCgkoZ2V0X2Fk ZHJlc3MpIDogRm9sZAoJKiBqaXQtcGxheWJhY2suaCA6CgkocnZhbHVlOjphc190cmVlKSA6IEZv bGQgdG8gREVDTF9JTklUSUFMIGZvciBjb25zdCBWQVJfREVDTAoJKiBqaXQtcmVjb3JkaW5nLmMg OiBTZWUgLmgKCSogaml0LXJlY29yZGluZy5oIDoKCShuZXdfZ2xvYmFsX2luaXRfcnZhbHVlKSA6 IE5ldwoJKG5ld19jdG9yKSA6IE5ldwoJKGN0b3IpIDogTmV3LCBpbmhlcml0cyBydmFsdWUKCShn bG9iYWxfaW5pdF9ydmFsdWUpIDogTmV3LCBpbmhlcml0cyBtZW1lbnRvCgkodHlwZTo6aXNfc3Ry dWN0KSA6IE5ldwoJKHR5cGU6OmlzX3VuaW9uKSA6IE5ldwoJKGZpZWxkOjpnZXRfbmFtZSkgOiBO ZXcKCSogbGliZ2Njaml0KysuaCA6IE5ldyBlbnRyeXBvaW50cwoJKiBsaWJnY2NqaXQuYyA6IFNl ZSAuaAoJKiBsaWJnY2NqaXQuaCA6CgkoZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1Y3Rvcikg OiBOZXcKCShnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlKSA6IE5ldwoJKExJ QkdDQ0pJVF9IQVZFX0NUT1JTKSA6IE5ldwoJKiBsaWJnY2NqaXQubWFwIDogTmV3IGVudHJ5cG9p bnRzIGFkZGVkIHRvIEFCSSAxNgoKZ2NjL3Rlc3RzdWl0ZS8KCSogaml0LmRnL3Rlc3QtZXJyb3It Z2xvYmFsLWluaXQtdG9vLXNtYWxsLWFycmF5LmMgOiBBbGwgbmV3CgkqIGppdC5kZy90ZXN0LWVy cm9yLWdsb2JhbC1sdmFsdWUtaW5pdC5jCgkqIGppdC5kZy90ZXN0LWVycm9yLWdsb2JhbC1ub25j b25zdC1pbml0LmMKCSogaml0LmRnL3Rlc3QtZ2xvYmFsLWluaXQtcnZhbHVlLmMKCSogaml0LmRn L3Rlc3QtbG9jYWwtaW5pdC1ydmFsdWUuYwoKZ2NjL2ppdC9kb2NzL3RvcGljcy8KCSogZXhwcmVz c2lvbnMucnN0IDogVXBkYXRlZCBkb2NzCi0tLQogZ2NjL2ppdC9kb2NzL3RvcGljcy9leHByZXNz aW9ucy5yc3QgICAgICAgICAgIHwgICA4OSArKwogZ2NjL2ppdC9qaXQtY29tbW9uLmggICAgICAg ICAgICAgICAgICAgICAgICAgIHwgICAgOSArCiBnY2Mvaml0L2ppdC1wbGF5YmFjay5jICAgICAg ICAgICAgICAgICAgICAgICAgfCAgMjgwICsrKy0KIGdjYy9qaXQvaml0LXBsYXliYWNrLmggICAg ICAgICAgICAgICAgICAgICAgICB8ICAgMjUgKy0KIGdjYy9qaXQvaml0LXJlY29yZGluZy5jICAg ICAgICAgICAgICAgICAgICAgICB8ICA0MzYgKysrKystCiBnY2Mvaml0L2ppdC1yZWNvcmRpbmcu aCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDkyICsrCiBnY2Mvaml0L2xpYmdjY2ppdCsrLmgg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQ0ICsKIGdjYy9qaXQvbGliZ2Njaml0LmMgICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAyMjkgKystCiBnY2Mvaml0L2xpYmdjY2ppdC5oICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDc3ICsKIGdjYy9qaXQvbGliZ2Njaml0Lm1hcCAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKy0KIGdjYy90ZXN0c3VpdGUvaml0LmRnL2Fs bC1ub24tZmFpbGluZy10ZXN0cy5oICB8ICAgMTQgKwogLi4uL2ppdC5kZy90ZXN0LWVycm9yLWN0 b3Itc3RydWN0LXRvby1iaWcuYyAgIHwgICA4NiArCiAuLi4vdGVzdC1lcnJvci1jdG9yLXN0cnVj dC13cm9uZy1maWVsZC1uYW1lLmMgfCAgIDgxICsKIC4uLi90ZXN0LWVycm9yLWN0b3Itc3RydWN0 LXdyb25nLXR5cGUuYyAgICAgICB8ICAgODUgKwogLi4uL3Rlc3QtZXJyb3ItY3Rvci11bmlvbi13 cm9uZy1maWVsZC1uYW1lLmMgIHwgICA4MCArCiAuLi4vaml0LmRnL3Rlc3QtZXJyb3ItZ2xvYmFs LWFsbHJlYWR5LWluaXQuYyAgfCAgIDQ2ICsKIC4uLi9qaXQuZGcvdGVzdC1lcnJvci1nbG9iYWwt Y29tbW9uLXNlY3Rpb24uYyB8ICAgNTQgKwogLi4uL3Rlc3QtZXJyb3ItZ2xvYmFsLWluaXQtdG9v LXNtYWxsLWFycmF5LmMgIHwgICA2NCArCiAuLi4vaml0LmRnL3Rlc3QtZXJyb3ItZ2xvYmFsLWx2 YWx1ZS1pbml0LmMgICAgfCAgIDYwICsKIC4uLi9qaXQuZGcvdGVzdC1lcnJvci1nbG9iYWwtbm9u Y29uc3QtaW5pdC5jICB8ICAgODAgKwogLi4uL2ppdC5kZy90ZXN0LWdsb2JhbC1pbml0LXJ2YWx1 ZS5jICAgICAgICAgIHwgMTM5NCArKysrKysrKysrKysrKysrKwogZ2NjL3Rlc3RzdWl0ZS9qaXQu ZGcvdGVzdC1sb2NhbC1pbml0LXJ2YWx1ZS5jIHwgIDU3NiArKysrKysrCiAyMiBmaWxlcyBjaGFu Z2VkLCAzODgwIGluc2VydGlvbnMoKyksIDI1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAw NjQ0IGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItY3Rvci1zdHJ1Y3QtdG9vLWJpZy5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1jdG9y LXN0cnVjdC13cm9uZy1maWVsZC1uYW1lLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1 aXRlL2ppdC5kZy90ZXN0LWVycm9yLWN0b3Itc3RydWN0LXdyb25nLXR5cGUuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItY3Rvci11bmlvbi13cm9u Zy1maWVsZC1uYW1lLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90 ZXN0LWVycm9yLWdsb2JhbC1hbGxyZWFkeS1pbml0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2Mv dGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWdsb2JhbC1jb21tb24tc2VjdGlvbi5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1nbG9iYWwtaW5p dC10b28tc21hbGwtYXJyYXkuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvaml0 LmRnL3Rlc3QtZXJyb3ItZ2xvYmFsLWx2YWx1ZS1pbml0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBn Y2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWdsb2JhbC1ub25jb25zdC1pbml0LmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWdsb2JhbC1pbml0LXJ2 YWx1ZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1sb2Nh bC1pbml0LXJ2YWx1ZS5jCgpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9kb2NzL3RvcGljcy9leHByZXNz aW9ucy5yc3QgYi9nY2Mvaml0L2RvY3MvdG9waWNzL2V4cHJlc3Npb25zLnJzdAppbmRleCAzMGEz Yjk3ODBmOS4uM2ExNzM4ZTQ2MjggMTAwNjQ0Ci0tLSBhL2djYy9qaXQvZG9jcy90b3BpY3MvZXhw cmVzc2lvbnMucnN0CisrKyBiL2djYy9qaXQvZG9jcy90b3BpY3MvZXhwcmVzc2lvbnMucnN0CkBA IC0xNzYsNiArMTc2LDYzIEBAIFNpbXBsZSBleHByZXNzaW9ucwogICAgdW5kZXJseWluZyBzdHJp bmcsIHNvIGl0IGlzIHZhbGlkIHRvIHBhc3MgaW4gYSBwb2ludGVyIHRvIGFuIG9uLXN0YWNrCiAg ICBidWZmZXIuCiAKKy4uIGZ1bmN0aW9uOjogZ2NjX2ppdF9ydmFsdWUgKlwKKwkgICAgICBnY2Nf aml0X2NvbnRleHRfbmV3X2NvbnN0cnVjdG9yIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsXAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY2Nfaml0X2xvY2F0 aW9uICpsb2MsXAorCQkJCSAgICAgICAgICAgICAgIGdjY19qaXRfdHlwZSAqdHlwZSxcCisJCQkJ ICAgICAgICAgICAgICAgc2l6ZV90IGFycl9sZW5ndGgsXAorCQkJCSAgICAgICAgICAgICAgIGdj Y19qaXRfZmllbGQgKipmaWVsZHMsXAorCQkJCSAgICAgICAgICAgICAgIGdjY19qaXRfcnZhbHVl ICoqdmFsdWVzKQorCisgICBDcmVhdGUgYSBjb25zdHJ1Y3RvciBmb3IgYW4gYXJyYXksIHVuaW9u IG9yIHN0cnVjdCBhcyBhIHJ2YWx1ZS4KKworICAgUmV0dXJucyBOVUxMIG9uIGVycm9yLiBUaGUg dHdvIHBhcmFtZXRlciBhcnJheXMgYXJlIGNvcGllZCBhbmQKKyAgIGRvIG5vdCBoYXZlIHRvIG91 dGxpdmUgdGhlIGNvbnRleHQuCisKKyAgIGBgdHlwZWBgIHNwZWNpZmllcyB3aGF0IHRoZSBjb25z dHJ1Y3RvciB3aWxsIGJ1aWxkLgorCisgICBGb3IgYSBzdHJ1Y3Qgb3IgdW5pb24gYGB0eXBlYGAs IGVhY2ggZmllbGQgaW4gYGBmaWVsZHNgYCBzcGVjaWZpZXMKKyAgIHdoaWNoIGZpZWxkIGluIHRo ZSBzdHJ1Y3Qgb3IgdW5pb24gdHlwZSB0byBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcKKyAgIHZh bHVlIGluIGBgdmFsdWVzYGAuIGBgZmllbGRzYGAgYW5kIGBgdmFsdWVzYGAgYXJlIHBhaXJlZCBi eSBpbmRleAorICAgYW5kIHRoZSBwYWlyIG5lZWQgdG8gaGF2ZSB0aGUgc2FtZSB1bnF1YWxpZmll ZCB0eXBlLgorCisgICBGb3IgYW4gYXJyYXkgYGB0eXBlYGAsIHRoZSBgYGZpZWxkc2BgIHBhcmFt ZXRlciBpcyBpZ25vcmVkLgorICAgCisgICBgYGFycl9sZW5ndGhgYCBzcGVjaWZpZXMgdGhlIG51 bWJlciBvZiBlbGVtZW50cyBpbiBgYHZhbHVlc2BgLgorICAgRm9yIHN0cnVjdCBhbmQgdW5pb25z LCBgYGZpZWxkc2BgIG5lZWQgdG8gaGF2ZSB0aGUgc2FtZSBsZW5ndGggYXMKKyAgIGBgdmFsdWVz YGAuCisKKyAgIEZvciB1bmlvbnMsIGBgYXJyX2xlbmd0aGBgIG5lZWQgdG8gYmUgMS4KKworICAg Rm9yIG5vbi11bmlvbnMsIGlmIGBgYXJyX2xlbmd0aGBgIGlzIDAsIHRoZSBhcnJheSBwYXJhbWV0 ZXJzIHdpbGwgYmUKKyAgIGlnbm9yZWQgYW5kIHplcm8gaW5pdGlhbGl6YXRpb24gd2lsbCBiZSB1 c2VkLgorIAorICAgRm9yIGFuIGFycmF5IGBgdHlwZWBgLCBpZiB0aGUgYXJyYXkgdHlwZSBpdHNl bGYgaGFzIG1vcmUgZWxlbWVudHMgdGhhbgorICAgYGB2YWx1ZXNgYCwgdGhlIGxlZnQtb3ZlciBl bGVtZW50cyB3aWxsIGJlIHplcm9lZC4gRWFjaCB2YWx1ZSBpbgorICAgYGB2YWx1ZXNgYCBuZWVk IHRvIGJlIHRoZSBzYW1lIHVucXVhbGlmaWVkIHR5cGUgYXMgdGhlIGFycmF5IGVsZW1lbnRzLgor CisgICBGb3IgYSBzdHJ1Y3QgYGB0eXBlYGAsIHRoZSBmaWVsZHMgaW4gYGBmaWVsZHNgYCBkbyBu b3QgaGF2ZSB0byBiZSBpbgorICAgZGVmaW5pdGlvbiBvcmRlciwgYnV0IGJlaW5nIGluIG9yZGVy IGF2b2lkcyBhIHNvcnQgb3BlcmF0aW9uLiBBbnkKKyAgIGZpZWxkIGluIHRoZSBzdHJ1Y3QgdGhh dCBpcyBub3Qgc3BlY2lmaWVkIGluIGBgZmllbGRzYGAgd2lsbCBiZSB6ZXJvZWQuCisgICAgICAK KyAgIEEgTlVMTCB2YWx1ZSBpbiBgYHZhbHVlc2BgIGlzIGEgc2hvcnRoYW5kIGZvciB6ZXJvIGlu aXRpYWxpemF0aW9uCisgICBvZiB0aGUgY29ycmVzcG9uZGluZyBmaWVsZCBvciBhcnJheSBlbGVt ZW50LiAKKworICAgVGhlIGNvbnN0cnVjdG9yIHJ2YWx1ZSBjYW4gYmUgdXNlZCBmb3IgYXNzaWdu bWVudCB0byBsb2NhbHMuCisgICBJdCBjYW4gYmUgdXNlZCB0byBpbml0aWFsaXplIGdsb2JhbCB2 YXJpYWJsZXMgd2l0aAorICAgOmZ1bmM6YGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9y dmFsdWVgLiBJdCBjYW4gYWxzbyBiZSB1c2VkIGFzIGEKKyAgIHRlbXBvcmFyeSB2YWx1ZSBmb3Ig ZnVuY3Rpb24gY2FsbHMgYW5kIHJldHVybiB2YWx1ZXMuCisKKyAgIFRoZSBjb25zdHJ1Y3RvciBj YW4gY29udGFpbiBuZXN0ZWQgY29uc3RydWN0b3JzLiBOb3RlIHRoYXQgYSBzdHJpbmcKKyAgIGxp dGVyYWwgcnZhbHVlIGNhbid0IGJlIHVzZWQgdG8gY29uc3RydWN0IGEgY2hhciBhcnJheS4gSXQg bmVlZCBvbmUKKyAgIHJ2YWx1ZSBmb3IgZWFjaCBjaGFyLgorCisgICBUaGlzIGVudHJ5cG9pbnQg d2FzIGFkZGVkIGluIDpyZWY6YExJQkdDQ0pJVF9BQklfMTZgOyB5b3UgY2FuIHRlc3QgZm9yIGl0 cworICAgcHJlc2Vuc2UgdXNpbmc6CisKKyAgIC4uIGNvZGUtYmxvY2s6OiBjCisgICAgICNpZmRl ZiBMSUJHQ0NKSVRfSEFWRV9DVE9SUworCiBWZWN0b3IgZXhwcmVzc2lvbnMKICoqKioqKioqKioq KioqKioqKgogCkBAIC02ODEsNiArNzM4LDM4IEBAIEdsb2JhbCB2YXJpYWJsZXMKIAogICAgICAg I2lmZGVmIExJQkdDQ0pJVF9IQVZFX2djY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcgogCisu LiBmdW5jdGlvbjo6IGdjY19qaXRfbHZhbHVlICpcCisJICAgICAgZ2NjX2ppdF9nbG9iYWxfc2V0 X2luaXRpYWxpemVyX3J2YWx1ZSAoZ2NjX2ppdF9sdmFsdWUgKmdsb2JhbCwKKwkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY2Nfaml0X3J2YWx1ZSAqaW5pdF92 YWx1ZSkKKworICAgU2V0IHRoZSBpbml0aWFsIHZhbHVlIG9mIGEgZ2xvYmFsIHdpdGggYW4gcnZh bHVlLgorCisgICBUaGUgcnZhbHVlIG5lZWQgdG8gYmUgYSBjb25zdGFudCBleHByZXNzaW9uLCBp LmUuIG5vIGZ1bmN0aW9uIGNhbGxzLgorCisgICBUaGUgZ2xvYmFsIGNhbid0IGhhdmUgdGhlIGBg a2luZGBgIDpyZWY6YEdDQ19KSVRfR0xPQkFMX0lNUE9SVEVEYC4KKyAgIAorICAgQXMgYSBub24t Y29tcHJlaGVuc2l2ZSBleGFtcGxlIGl0IGlzIE9LIHRvIGRvIHRoZSBlcXVpdmFsZW50IG9mOgor CisgICAuLiBjb2RlLWJsb2NrOjogYworCisgICAgICAgaW50IGZvbyA9IDMgKiAyOyAvKiBydmFs dWUgZnJvbSBnY2Nfaml0X2NvbnRleHRfbmV3X2JpbmFyeV9vcCAqLworICAgICAgIGludCBhcnJb XSA9IHsxLDIsMyw0fTsgLyogcnZhbHVlIGZyb20gZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1 Y3RvciAqLworICAgICAgIGludCAqYmFyID0gJmFyclsyXSArIDE7IC8qIHJ2YWx1ZSBmcm9tIG5l c3RlZCAiZ2V0IGFkZHJlc3MiIG9mICJhcnJheSBhY2Nlc3MiICovCisgICAgICAgY29uc3QgaW50 IGJheiA9IDM7IC8qIHJ2YWx1ZSBmcm9tIGdjY19qaXRfY29udGV4dF9ydmFsdWVfZnJvbV9pbnQg Ki8KKyAgICAgICBpbnQgYm96ID0gYmF6OyAvKiBydmFsdWUgZnJvbSBnY2Nfaml0X2x2YWx1ZV9h c19ydmFsdWUgKi8KKworICAgVXNlIHRvZ2V0aGVyIHdpdGggOnJlZjpgZ2NjX2ppdF9jb250ZXh0 X25ld19jb25zdHJ1Y3RvcmAgdG8KKyAgIGluaXRpYWxpemUgc3RydWN0cywgdW5pb25zIGFuZCBh cnJheXMuCisKKyAgIE9uIHN1Y2Nlc3MsIHJldHVybnMgdGhlIGBgZ2xvYmFsYGAgcGFyYW1ldGVy IHVuY2hhbmdlZC4gT3RoZXJ3aXNlLCBgYE5VTExgYC4KKworICAgVGhpcyBlbnRyeXBvaW50IHdh cyBhZGRlZCBpbiA6cmVmOmBMSUJHQ0NKSVRfQUJJXzE2YDsgeW91IGNhbiB0ZXN0IGZvciBpdHMK KyAgIHByZXNlbmNlIHVzaW5nOgorCisgICAuLiBjb2RlLWJsb2NrOjogYworCisgICAgICAjaWZk ZWYgTElCR0NDSklUX0hBVkVfQ1RPUlMKKwogV29ya2luZyB3aXRoIHBvaW50ZXJzLCBzdHJ1Y3Rz IGFuZCB1bmlvbnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK ZGlmZiAtLWdpdCBhL2djYy9qaXQvaml0LWNvbW1vbi5oIGIvZ2NjL2ppdC9qaXQtY29tbW9uLmgK aW5kZXggYmMwNDUzZmJhMDUuLjdjOTM3NDc4NzkzIDEwMDY0NAotLS0gYS9nY2Mvaml0L2ppdC1j b21tb24uaAorKysgYi9nY2Mvaml0L2ppdC1jb21tb24uaApAQCAtMjAzLDYgKzIwMywxNSBAQCBl bnVtIGlubmVyX2Jvb2xfb3B0aW9uCiAgIE5VTV9JTk5FUl9CT09MX09QVElPTlMKIH07CiAKKy8q IEZsYWdzIGZvciBnbG9iYWwgdmFyaWFibGVzIGNsYXNzLiBGb3Igd2hlbiB0aGUgcGxheWJhY2sg b2YgdGhlCisgICBnbG9iYWwgbmVlZCB0byBrbm93IHdoYXQgd2lsbCBoYXBwZW4gdG8gaXQgbGF0 ZXIuICovCitlbnVtIGdsb2JhbF92YXJfZmxhZ3MKK3sKKyAgR0xPQkFMX1ZBUl9GTEFHU19OT05F ID0gMCwKKyAgR0xPQkFMX1ZBUl9GTEFHU19XSUxMX0JFX1JWQUxfSU5JVCA9IDEsCisgIEdMT0JB TF9WQVJfRkxBR1NfV0lMTF9CRV9CTE9CX0lOSVQgPSAyLAorfTsKKwogfSAvLyBuYW1lc3BhY2Ug Z2NjOjpqaXQKIAogfSAvLyBuYW1lc3BhY2UgZ2NjCmRpZmYgLS1naXQgYS9nY2Mvaml0L2ppdC1w bGF5YmFjay5jIGIvZ2NjL2ppdC9qaXQtcGxheWJhY2suYwppbmRleCAxZjRkYzMxYTFjMS4uOTE0 YWZkNmJkOWYgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvaml0LXBsYXliYWNrLmMKKysrIGIvZ2NjL2pp dC9qaXQtcGxheWJhY2suYwpAQCAtMTA3LDYgKzEwNyw0MyBAQCBuYW1lc3BhY2Ugaml0IHsKICBQ bGF5YmFjay4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLwogCisvKiBGb2xkIGEgcmVhZG9ubHkgbm9uLXZvbGF0 aWxlIHZhcmlhYmxlIHdpdGggYW4gaW5pdGlhbCBjb25zdGFudCB2YWx1ZSwKKyAgIHRvIHRoYXQg dmFsdWUuCisKKyAgIE90aGVyd2lzZSByZXR1cm4gdGhlIGFyZ3VtZW50IHVuY2hhbmdlZC4KKwor ICAgVGhpcyBmb2xkIGlzIG5lZWRlZCBmb3Igc2V0dGluZyBhIHZhcmlhYmxlJ3MgREVDTF9JTklU SUFMIHRvIHRoZSB2YWx1ZQorICAgb2YgYSBjb25zdCB2YXJpYWJsZS4gVGhlIGMtZnJvbnRlbmQg ZG9lcyB0aGlzIGluIGl0cyBvd24gc3BlY2lhbAorICAgZm9sZCgpLCBzbyB3ZSBsaWZ0IHRoaXMg cGFydCBvdXQgYW5kIGRvIGl0IGV4cGxpY2l0bHkgd2hlcmUgdGhlcmUgaXMgYQorICAgcG90ZW50 aWFsIGZvciB2YXJpYWJsZXMgdG8gYmUgdXNlZCBhcyBydmFsdWVzLiAqLworc3RhdGljIHRyZWUK K2ZvbGRfY29uc3RfdmFyICh0cmVlIG5vZGUpCit7CisgIC8qIFNlZSBjX2Z1bGx5X2ZvbGRfaW50 ZXJuYWwgaW4gYy1mb2xkLmMgYW5kIGRlY2xfY29uc3RhbnRfdmFsdWVfMQorICAgICBpbiBjLXR5 cGVjay5jICovCisgIGlmIChWQVJfUCAobm9kZSkKKyAgICAgICYmIFRSRUVfUkVBRE9OTFkgKG5v ZGUpCisgICAgICAmJiAhVFJFRV9USElTX1ZPTEFUSUxFIChub2RlKQorICAgICAgJiYgREVDTF9J TklUSUFMIChub2RlKSAhPSBOVUxMX1RSRUUKKyAgICAgIC8qICJUaGlzIGlzIGludmFsaWQgaWYg aW5pdGlhbCB2YWx1ZSBpcyBub3QgY29uc3RhbnQuCisJICBJZiBpdCBoYXMgZWl0aGVyIGEgZnVu Y3Rpb24gY2FsbCwgYSBtZW1vcnkgcmVmZXJlbmNlLAorCSAgb3IgYSB2YXJpYWJsZSwgdGhlbiBy ZS1ldmFsdWF0aW5nIGl0IGNvdWxkIGdpdmUgZGlmZmVyZW50CisJICByZXN1bHRzLiIgKi8KKyAg ICAgICYmIFRSRUVfQ09OU1RBTlQgKERFQ0xfSU5JVElBTCAobm9kZSkpKQorICAgIHsKKyAgICAg IHRyZWUgcmV0ID0gREVDTF9JTklUSUFMIChub2RlKTsKKyAgICAgIC8qICJBdm9pZCB1bndhbnRl ZCB0cmVlIHNoYXJpbmcgYmV0d2VlbiB0aGUgaW5pdGlhbGl6ZXIgYW5kIGN1cnJlbnQKKwkgIGZ1 bmN0aW9uJ3MgYm9keSB3aGVyZSB0aGUgdHJlZSBjYW4gYmUgbW9kaWZpZWQgZS5nLiBieSB0aGUK KwkgIGdpbXBsaWZpZXIuIiAgKi8KKyAgICAgIGlmIChUUkVFX1NUQVRJQyAobm9kZSkpCisJcmV0 ID0gdW5zaGFyZV9leHByIChyZXQpOworCisgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICBy ZXR1cm4gbm9kZTsKK30KKwogLyogQnVpbGQgYSBTVFJJTkdfQ1NUIHRyZWUgZm9yIFNUUiwgb3Ig cmV0dXJuIE5VTEwgaWYgaXQgaXMgTlVMTC4KICAgIFRoZSBUUkVFX1RZUEUgaXMgbm90IGluaXRp YWxpemVkLiAgKi8KIApAQCAtNTQ3LDE1ICs1ODQsMjggQEAgcGxheWJhY2s6OmNvbnRleHQ6Ogog Z2xvYmFsX25ld19kZWNsIChsb2NhdGlvbiAqbG9jLAogCQkgZW51bSBnY2Nfaml0X2dsb2JhbF9r aW5kIGtpbmQsCiAJCSB0eXBlICp0eXBlLAotCQkgY29uc3QgY2hhciAqbmFtZSkKKwkJIGNvbnN0 IGNoYXIgKm5hbWUsCisJCSBlbnVtIGdsb2JhbF92YXJfZmxhZ3MgZmxhZ3MpCiB7CiAgIGdjY19h c3NlcnQgKHR5cGUpOwogICBnY2NfYXNzZXJ0IChuYW1lKTsKKworICB0cmVlIHR5cGVfdHJlZSA9 IHR5cGUtPmFzX3RyZWUgKCk7CisKICAgdHJlZSBpbm5lciA9IGJ1aWxkX2RlY2wgKFVOS05PV05f TE9DQVRJT04sIFZBUl9ERUNMLAogCQkJICAgZ2V0X2lkZW50aWZpZXIgKG5hbWUpLAotCQkJICAg dHlwZS0+YXNfdHJlZSAoKSk7CisJCQkgICB0eXBlX3RyZWUpOworCiAgIFRSRUVfUFVCTElDIChp bm5lcikgPSAoa2luZCAhPSBHQ0NfSklUX0dMT0JBTF9JTlRFUk5BTCk7Ci0gIERFQ0xfQ09NTU9O IChpbm5lcikgPSAxOworCisKKyAgaW50IHdpbGxfYmVfaW5pdCA9IGZsYWdzICYgKEdMT0JBTF9W QVJfRkxBR1NfV0lMTF9CRV9SVkFMX0lOSVQgfAorCQkJICAgICAgR0xPQkFMX1ZBUl9GTEFHU19X SUxMX0JFX0JMT0JfSU5JVCk7CisKKyAgLyogQSBWQVJfREVDTCB3aXRoIERFQ0xfSU5JVElBTCB3 aWxsIG5vdCBlbmQgdXAgaW4gLmNvbW1vbiBzZWN0aW9uICovCisgIGlmICghd2lsbF9iZV9pbml0 KQorICAgIERFQ0xfQ09NTU9OIChpbm5lcikgPSAxOworCiAgIHN3aXRjaCAoa2luZCkKICAgICB7 CiAgICAgZGVmYXVsdDoKQEAgLTU3NCw2ICs2MjQsOSBAQCBnbG9iYWxfbmV3X2RlY2wgKGxvY2F0 aW9uICpsb2MsCiAgICAgICBicmVhazsKICAgICB9CiAKKyAgaWYgKFRZUEVfUkVBRE9OTFkgKHR5 cGVfdHJlZSkpCisgICAgVFJFRV9SRUFET05MWShpbm5lcikgPSAxOworCiAgIGlmIChsb2MpCiAg ICAgc2V0X3RyZWVfbG9jYXRpb24gKGlubmVyLCBsb2MpOwogCkBAIC01OTgsMTMgKzY1MSwxNzgg QEAgcGxheWJhY2s6OmNvbnRleHQ6OgogbmV3X2dsb2JhbCAobG9jYXRpb24gKmxvYywKIAkgICAg ZW51bSBnY2Nfaml0X2dsb2JhbF9raW5kIGtpbmQsCiAJICAgIHR5cGUgKnR5cGUsCi0JICAgIGNv bnN0IGNoYXIgKm5hbWUpCisJICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJICAgIGVudW0gZ2xvYmFs X3Zhcl9mbGFncyBmbGFncykKIHsKLSAgdHJlZSBpbm5lciA9IGdsb2JhbF9uZXdfZGVjbCAobG9j LCBraW5kLCB0eXBlLCBuYW1lKTsKKyAgdHJlZSBpbm5lciA9CisgICAgZ2xvYmFsX25ld19kZWNs IChsb2MsIGtpbmQsIHR5cGUsIG5hbWUsIGZsYWdzKTsKIAogICByZXR1cm4gZ2xvYmFsX2ZpbmFs aXplX2x2YWx1ZSAoaW5uZXIpOwogfQogCisvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHVzYWdlIHdp dGggd2Fsa190cmVlIGluIGdsb2JhbF9zZXRfaW5pdF9ydmFsdWUuCisgICBJZiB0aGUgdHJlZSBj b250YWlucyBhIERFQ0xfVkFSIHdpdGhvdXQgREVDTF9JTklUSUFMIHNldCwgaXQgd2lsbCBiZQor ICAgcmV0dXJuZWQuCisKKyAgIE90aGVyd2lzZSwgcmV0dXJucyBOVUxMX1RSRUUuICovCitzdGF0 aWMgdHJlZQordmFsaWRhdGVfdmFyX2hhc19pbml0ICh0cmVlICp0cCwgaW50ICp3YWxrX3N1YnRy ZWUsIHZvaWQgKmRhdGEpCit7CisgICh2b2lkKSBkYXRhOworICAodm9pZCkgd2Fsa19zdWJ0cmVl OworCisgIGlmIChWQVJfUCAoKnRwKSAmJiBERUNMX0lOSVRJQUwgKCp0cCkgPT0gTlVMTF9UUkVF KQorICAgIHJldHVybiAqdHA7CisgIHJldHVybiBOVUxMX1RSRUU7Cit9CisKK3ZvaWQKK3BsYXli YWNrOjpjb250ZXh0OjoKK2dsb2JhbF9zZXRfaW5pdF9ydmFsdWUgKGx2YWx1ZSogdmFyaWFibGUs CisJCQlydmFsdWUqIGluaXQpCit7CisgIHRyZWUgaW5uZXIgPSB2YXJpYWJsZS0+YXNfdHJlZSAo KTsKKworICAvKiBXZSBuZWVkIHRvIGZvbGQgYWxsIGV4cHJlc3Npb25zIGFzIG11Y2ggYXMgcG9z c2libGUuIFRoZSBjb2RlCisgICAgIGZvciBhIERFQ0xfSU5JVElBTCBvbmx5IGhhbmRsZXMgc29t ZSBvcGVyYXRpb25zLAorICAgICBldGMgYWRkaXRpb24sIG1pbnVzLCAnYWRkcmVzcyBvZicuIFNl ZSBvdXRwdXRfYWRkcmVzc2VkX2NvbnN0YW50cygpCisgICAgIGluIHZhcmFzbS5jICAqLworICB0 cmVlIGluaXRfdHJlZSA9IGluaXQtPmFzX3RyZWUgKCk7CisgIHRyZWUgZm9sZGVkID0gZm9sZF9j b25zdF92YXIgKGluaXRfdHJlZSk7CisKKyAgaWYgKCFUUkVFX0NPTlNUQU5UIChmb2xkZWQpKQor ICAgIHsKKyAgICAgIHRyZWUgbmFtZSA9IERFQ0xfTkFNRSAoaW5uZXIpOworCisgICAgICBhZGRf ZXJyb3IgKE5VTEwsCisJCSAiaW5pdCBydmFsdWUgZm9yIHRoZSBnbG9iYWwgdmFyaWFibGUgJXMg ZG9lcyBub3Qgc2VlbSIKKwkJICIgdG8gYmUgY29uc3RhbnQiLAorCQkgbmFtZSAhPSBOVUxMX1RS RUUgPyBJREVOVElGSUVSX1BPSU5URVIgKG5hbWUpIDogTlVMTCk7CisgICAgICByZXR1cm47Cisg ICAgfQorCisgIC8qIEZpbmQgYW55IFZBUl9ERUNMIHdpdGhvdXQgREVDTF9JTklUSUFMIHNldC4K KyAgICAgQXNzdW1lIHRoYXQgYW55IC4uLl9DU1QgaXMgT0sgdG8gc2F2ZSBzb21lIENQVS4KKyAg ICAgSGFuZGxlIENPTlNUUlVDVE9ScyBleHBsaWNpdGx5IHRvIGF2b2lkIHRyZWUgd2Fsa3MKKyAg ICAgb24gYXJyYXkgaW5pdHMgY29uc2lzdGluZyBvZiBvbmx5IC4uLl9DU1RzLiAqLworICB0cmVl IHNpbm5lciA9IE5VTExfVFJFRTsKKyAgCisgIGlmIChUUkVFX0NPREUgKGZvbGRlZCkgPT0gQ09O U1RSVUNUT1IpCisgICAgeworICAgICAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCBpZHg7CisgICAg ICB0cmVlIGVsdDsKKyAgICAgIEZPUl9FQUNIX0NPTlNUUlVDVE9SX1ZBTFVFIChDT05TVFJVQ1RP Ul9FTFRTIChmb2xkZWQpLCBpZHgsIGVsdCkKKwl7CisJICBpZiAoIUNPTlNUQU5UX0NMQVNTX1Ag KGVsdCkpCisJICAgIHNpbm5lciA9IHdhbGtfdHJlZSAoJmVsdCwgdmFsaWRhdGVfdmFyX2hhc19p bml0LCBOVUxMLCBOVUxMKTsKKwkgIGlmIChzaW5uZXIgIT0gTlVMTF9UUkVFKQorCSAgICBicmVh azsKKwl9CisgICAgfQorICBlbHNlIGlmICghQ09OU1RBTlRfQ0xBU1NfUCAoZm9sZGVkKSkKKyAg ICBzaW5uZXIgPSB3YWxrX3RyZWUgKCZmb2xkZWQsIHZhbGlkYXRlX3Zhcl9oYXNfaW5pdCwgTlVM TCwgTlVMTCk7CisKKyAgaWYgKHNpbm5lciAhPSBOVUxMX1RSRUUpCisgICAgeworICAgICAgdHJl ZSBuYW1lID0gREVDTF9OQU1FIChpbm5lcik7CisgICAgICB0cmVlIHJ2bmFtZSA9IERFQ0xfTkFN RSAoc2lubmVyKTsKKyAgICAgIGFkZF9lcnJvciAoTlVMTCwKKwkJICJjYW4ndCBpbml0aWFsaXpl ICVzIHdpdGggJXMgc2luY2UgaXQgaGFzIG5vICIKKwkJICJpbml0aWFsIHZhbHVlIHNldCIsCisJ CSBuYW1lICE9IE5VTExfVFJFRSA/IElERU5USUZJRVJfUE9JTlRFUiAobmFtZSkgOiBOVUxMLAor CQkgcnZuYW1lICE9IE5VTExfVFJFRSA/IElERU5USUZJRVJfUE9JTlRFUiAocnZuYW1lKSA6IE5V TEwpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBERUNMX0lOSVRJQUwgKGlubmVyKSA9IGZv bGRlZDsKK30KKworcGxheWJhY2s6OnJ2YWx1ZSAqCitwbGF5YmFjazo6Y29udGV4dDo6CituZXdf Y3RvciAobG9jYXRpb24gKmxvYywKKwkgIHR5cGUgKnR5cGUsCisJICBjb25zdCBhdXRvX3ZlYzxm aWVsZCo+ICpmaWVsZHMsCisJICBjb25zdCBhdXRvX3ZlYzxydmFsdWUqPiAqcnZhbHVlcykKK3sK KyAgdHJlZSB0eXBlX3RyZWUgPSB0eXBlLT5hc190cmVlICgpOworCisgIC8qIEhhbmRsZSBlbXB0 eSBjdG9ycyBmaXJzdC4gSS5lLiBzZXQgZXZlcnl0aGluZyB0byAwICovCisgIGlmIChydmFsdWVz LT5sZW5ndGggKCkgPT0gMCkKKyAgICByZXR1cm4gbmV3IHJ2YWx1ZSAodGhpcywgYnVpbGRfY29u c3RydWN0b3IgKHR5cGVfdHJlZSwgTlVMTCkpOworCisgIC8qIEhhbmRsZSBhcnJheXMgKGFuZCBy ZXR1cm4pICovCisgIGlmIChUUkVFX0NPREUgKHR5cGVfdHJlZSkgPT0gQVJSQVlfVFlQRSkKKyAg ICB7CisgICAgICBpbnQgbiA9IHJ2YWx1ZXMtPmxlbmd0aCAoKTsKKyAgICAgIC8qIFRoZSB2ZWMg Zm9yIHRoZSBjb25zdHJ1Y3RvciBub2RlICovCisgICAgICB2ZWM8Y29uc3RydWN0b3JfZWx0LCB2 YV9nYz4gKnYgPSBOVUxMOworICAgICAgdmVjX2FsbG9jKHYsIG4pOworCisgICAgICBmb3IgKGlu dCBpID0gMDsgaSA8IG47IGkrKykKKwl7CisJICAvKiBudWxsIHJ2YWx1ZXMgaW5kaWNhdGUgdGhh dCB0aGUgZWxlbWVudCBzaG91bGQgYmUgemVyb2VkICovCisJICBpZiAoKCpydmFsdWVzKVtpXSkK KwkgICAgQ09OU1RSVUNUT1JfQVBQRU5EX0VMVCh2LAorCQkJCSAgIGJ1aWxkX2ludF9jc3QgKHNp emVfdHlwZV9ub2RlLCBpKSwKKwkJCQkgICAoKnJ2YWx1ZXMpW2ldLT5hc190cmVlICgpKTsKKwkg IGVsc2UKKwkgICAgQ09OU1RSVUNUT1JfQVBQRU5EX0VMVCh2LAorCQkJCSAgIGJ1aWxkX2ludF9j c3QgKHNpemVfdHlwZV9ub2RlLCBpKSwKKwkJCQkgICBidWlsZF96ZXJvX2NzdCAoVFJFRV9UWVBF ICh0eXBlX3RyZWUpKSk7CisJfQorCisgICAgICB0cmVlIGN0b3IgPSBidWlsZF9jb25zdHJ1Y3Rv ciAodHlwZV90cmVlLCB2KTsKKworICAgICAgaWYgKGxvYykKKwlzZXRfdHJlZV9sb2NhdGlvbiAo Y3RvciwgbG9jKTsKKworICAgICAgcmV0dXJuIG5ldyBydmFsdWUodGhpcywgY3Rvcik7CisgICAg fQorCisgIC8qIEhhbmRsZSBzdHJ1Y3RzIGFuZCB1bmlvbnMgKi8KKyAgaW50IG4gPSBmaWVsZHMt Pmxlbmd0aCAoKTsKKworICAvKiBUaGUgdmVjIGZvciB0aGUgY29uc3RydWN0b3Igbm9kZSAqLwor ICB2ZWM8Y29uc3RydWN0b3JfZWx0LCB2YV9nYz4gKnYgPSBOVUxMOworICB2ZWNfYWxsb2Modiwg bik7CisKKyAgaW50IGkgPSAwOworICB0cmVlIGZpZWxkID0gVFlQRV9GSUVMRFMgKHR5cGVfdHJl ZSk7CisKKyAgLyogSXRlcmF0ZSBvdmVyIHRoZSBmaWVsZHMsIGJ1aWxkaW5nIGluaXRpYWxpemF0 aW9ucy4gKi8KKyAgZm9yICg7IGZpZWxkICYmIGkgPCBuOyBmaWVsZCA9IERFQ0xfQ0hBSU4gKGZp ZWxkKSwgaSsrKQorICAgIHsKKyAgICAgIC8qIElmIHRoZSB2YWx1ZSBpcyBOVUxMLCBpdCBtZWFu cyB3ZSBzaG91bGQgemVybyB0aGUgZmllbGQgKi8KKyAgICAgIGlmICgoKnJ2YWx1ZXMpW2ldKQor CUNPTlNUUlVDVE9SX0FQUEVORF9FTFQodiwgZmllbGQsICgqcnZhbHVlcylbaV0tPmFzX3RyZWUg KCkpOworICAgICAgZWxzZQorCXsKKwkgIHRyZWUgemVyb19jc3QgPSBidWlsZF96ZXJvX2NzdCAo VFJFRV9UWVBFIChmaWVsZCkpOworCSAgQ09OU1RSVUNUT1JfQVBQRU5EX0VMVCh2LCBmaWVsZCwg emVyb19jc3QpOworCX0KKyAgICB9CisKKyAgLyogQW55IGZpZWxkcyByZW1haW5pbmcgYXJlIHNl dCB0byAwLCBmb3Igc3RydWN0cyAobm90IHVuaW9ucykgKi8KKyAgaWYgKFRSRUVfQ09ERSAodHlw ZV90cmVlKSA9PSBSRUNPUkRfVFlQRSkKKyAgICB7CisgICAgICBmb3IgKDsgZmllbGQgJiYgaSA8 IG47IGZpZWxkID0gREVDTF9DSEFJTiAoZmllbGQpLCBpKyspCisJeworCSAgdHJlZSB6ZXJvX2Nz dCA9IGJ1aWxkX3plcm9fY3N0IChUUkVFX1RZUEUgKGZpZWxkKSk7CisJICBDT05TVFJVQ1RPUl9B UFBFTkRfRUxUKHYsIGZpZWxkLCB6ZXJvX2NzdCk7CisJfQorICAgICAgLyogQXNzZXJ0IHRoYXQg d2UgZ290IGFzIG1hbnkgZmllbGRzIGFzIHdlIHRoaW5rIHdlIGdvdCAqLworICAgICAgZ2NjX2Fz c2VydCAoZmllbGQgPT0gTlVMTF9UUkVFKTsKKyAgICAgIGdjY19hc3NlcnQgKG4gPT0gaSk7Cisg ICAgfQorCisgIHRyZWUgY3RvciA9IGJ1aWxkX2NvbnN0cnVjdG9yICh0eXBlX3RyZWUsIHYpOwor CisgIGlmIChsb2MpCisgICAgc2V0X3RyZWVfbG9jYXRpb24gKGN0b3IsIGxvYyk7CisKKyAgcmV0 dXJuIG5ldyBydmFsdWUodGhpcywgYnVpbGRfY29uc3RydWN0b3IgKHR5cGVfdHJlZSwgdikpOwor fQorCiAvKiBGaWxsICdjb25zdHJ1Y3Rvcl9lbGVtZW50cycgd2l0aCB0aGUgbWVtb3J5IGNvbnRl bnQgb2YKICAgICdpbml0aWFsaXplcicuICBFYWNoIGVsZW1lbnQgb2YgdGhlIGluaXRpYWxpemVy IGlzIG9mIHRoZSBzaXplIG9mCiAgICB0eXBlIFQuICBJbiB1c2UgYnkgbmV3X2dsb2JhbF9pbml0 aWFsaXplZC4qLwpAQCAtNjM4LDkgKzg1NiwxMCBAQCBuZXdfZ2xvYmFsX2luaXRpYWxpemVkIChs b2NhdGlvbiAqbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGVsZW1lbnRfc2l6 ZSwKIAkJCXNpemVfdCBpbml0aWFsaXplcl9udW1fZWxlbSwKIAkJCWNvbnN0IHZvaWQgKmluaXRp YWxpemVyLAotCQkJY29uc3QgY2hhciAqbmFtZSkKKwkJCWNvbnN0IGNoYXIgKm5hbWUsCisJCQll bnVtIGdsb2JhbF92YXJfZmxhZ3MgZmxhZ3MpCiB7Ci0gIHRyZWUgaW5uZXIgPSBnbG9iYWxfbmV3 X2RlY2wgKGxvYywga2luZCwgdHlwZSwgbmFtZSk7CisgIHRyZWUgaW5uZXIgPSBnbG9iYWxfbmV3 X2RlY2wgKGxvYywga2luZCwgdHlwZSwgbmFtZSwgZmxhZ3MpOwogCiAgIHZlYzxjb25zdHJ1Y3Rv cl9lbHQsIHZhX2djPiAqY29uc3RydWN0b3JfZWxlbWVudHMgPSBOVUxMOwogCkBAIC0xMTA5LDcg KzEzMjgsOCBAQCBhc190cnV0aF92YWx1ZSAodHJlZSBleHByLCBsb2NhdGlvbiAqbG9jKQogICBp ZiAobG9jKQogICAgIHNldF90cmVlX2xvY2F0aW9uICh0eXBlZF96ZXJvLCBsb2MpOwogCi0gIGV4 cHIgPSBidWlsZDIgKE5FX0VYUFIsIGludGVnZXJfdHlwZV9ub2RlLCBleHByLCB0eXBlZF96ZXJv KTsKKyAgZXhwciA9IGZvbGRfYnVpbGQyX2xvYyAoVU5LTk9XTl9MT0NBVElPTiwKKyAgICBORV9F WFBSLCBpbnRlZ2VyX3R5cGVfbm9kZSwgZXhwciwgdHlwZWRfemVybyk7CiAgIGlmIChsb2MpCiAg ICAgc2V0X3RyZWVfbG9jYXRpb24gKGV4cHIsIGxvYyk7CiAKQEAgLTExNDUsNiArMTM2NSw4IEBA IG5ld191bmFyeV9vcCAobG9jYXRpb24gKmxvYywKICAgZ2NjX2Fzc2VydCAoYSk7CiAKICAgdHJl ZSBub2RlID0gYS0+YXNfdHJlZSAoKTsKKyAgbm9kZSA9IGZvbGRfY29uc3RfdmFyIChub2RlKTsK KwogICB0cmVlIGlubmVyX3Jlc3VsdCA9IE5VTEw7CiAKICAgc3dpdGNoIChvcCkKQEAgLTExNzYs NiArMTM5OCwxMCBAQCBuZXdfdW5hcnlfb3AgKGxvY2F0aW9uICpsb2MsCiAgIGlubmVyX3Jlc3Vs dCA9IGJ1aWxkMSAoaW5uZXJfb3AsCiAJCQkgcmVzdWx0X3R5cGUtPmFzX3RyZWUgKCksCiAJCQkg bm9kZSk7CisKKyAgLyogVHJ5IHRvIGZvbGQgKi8KKyAgaW5uZXJfcmVzdWx0ID0gZm9sZCAoaW5u ZXJfcmVzdWx0KTsKKwogICBpZiAobG9jKQogICAgIHNldF90cmVlX2xvY2F0aW9uIChpbm5lcl9y ZXN1bHQsIGxvYyk7CiAKQEAgLTEyMDAsNyArMTQyNiwxMCBAQCBuZXdfYmluYXJ5X29wIChsb2Nh dGlvbiAqbG9jLAogICBnY2NfYXNzZXJ0IChiKTsKIAogICB0cmVlIG5vZGVfYSA9IGEtPmFzX3Ry ZWUgKCk7CisgIG5vZGVfYSA9IGZvbGRfY29uc3RfdmFyIChub2RlX2EpOworCiAgIHRyZWUgbm9k ZV9iID0gYi0+YXNfdHJlZSAoKTsKKyAgbm9kZV9iID0gZm9sZF9jb25zdF92YXIgKG5vZGVfYik7 CiAKICAgc3dpdGNoIChvcCkKICAgICB7CkBAIC0xMjc1LDYgKzE1MDQsMTAgQEAgbmV3X2JpbmFy eV9vcCAobG9jYXRpb24gKmxvYywKIAkJCSAgICByZXN1bHRfdHlwZS0+YXNfdHJlZSAoKSwKIAkJ CSAgICBub2RlX2EsCiAJCQkgICAgbm9kZV9iKTsKKworICAvKiBUcnkgdG8gZm9sZCB0aGUgZXhw cmVzc2lvbiAqLworICBpbm5lcl9leHByID0gZm9sZCAoaW5uZXJfZXhwcik7CisKICAgaWYgKGxv YykKICAgICBzZXRfdHJlZV9sb2NhdGlvbiAoaW5uZXJfZXhwciwgbG9jKTsKIApAQCAtMTMyMiwx MCArMTU1NSwxOSBAQCBuZXdfY29tcGFyaXNvbiAobG9jYXRpb24gKmxvYywKICAgICAgIGJyZWFr OwogICAgIH0KIAorICB0cmVlIG5vZGVfYSA9IGEtPmFzX3RyZWUgKCk7CisgIG5vZGVfYSA9IGZv bGRfY29uc3RfdmFyIChub2RlX2EpOworICB0cmVlIG5vZGVfYiA9IGItPmFzX3RyZWUgKCk7Cisg IG5vZGVfYiA9IGZvbGRfY29uc3RfdmFyIChub2RlX2IpOworCiAgIHRyZWUgaW5uZXJfZXhwciA9 IGJ1aWxkMiAoaW5uZXJfb3AsCiAJCQkgICAgYm9vbGVhbl90eXBlX25vZGUsCi0JCQkgICAgYS0+ YXNfdHJlZSAoKSwKLQkJCSAgICBiLT5hc190cmVlICgpKTsKKwkJCSAgICBub2RlX2EsCisJCQkg ICAgbm9kZV9iKTsKKworICAvKiBUcnkgdG8gZm9sZCAqLworICBpbm5lcl9leHByID0gZm9sZCAo aW5uZXJfZXhwcik7CisKICAgaWYgKGxvYykKICAgICBzZXRfdHJlZV9sb2NhdGlvbiAoaW5uZXJf ZXhwciwgbG9jKTsKICAgcmV0dXJuIG5ldyBydmFsdWUgKHRoaXMsIGlubmVyX2V4cHIpOwpAQCAt MTQyNSw2ICsxNjY3LDggQEAgcGxheWJhY2s6OmNvbnRleHQ6OmJ1aWxkX2Nhc3QgKHBsYXliYWNr Ojpsb2NhdGlvbiAqbG9jLAogCiAgICAgIE9ubHkgc29tZSBraW5kcyBvZiBjYXN0IGFyZSBjdXJy ZW50bHkgc3VwcG9ydGVkIGhlcmUuICAqLwogICB0cmVlIHRfZXhwciA9IGV4cHItPmFzX3RyZWUg KCk7CisgIHRfZXhwciA9IGZvbGRfY29uc3RfdmFyICh0X2V4cHIpOworCiAgIHRyZWUgdF9kc3Rf dHlwZSA9IHR5cGVfLT5hc190cmVlICgpOwogICB0cmVlIHRfcmV0ID0gTlVMTDsKICAgdF9yZXQg PSB0YXJnZXRtLmNvbnZlcnRfdG9fdHlwZSAodF9kc3RfdHlwZSwgdF9leHByKTsKQEAgLTE1MDcs NyArMTc1MSwxMCBAQCBuZXdfYXJyYXlfYWNjZXNzIChsb2NhdGlvbiAqbG9jLAogICAgICAgIGMt ZmFtaWx5L2MtY29tbW9uLmM6IHBvaW50ZXJfaW50X3N1bQogICAqLwogICB0cmVlIHRfcHRyID0g cHRyLT5hc190cmVlICgpOworICB0X3B0ciA9IGZvbGRfY29uc3RfdmFyICh0X3B0cik7CiAgIHRy ZWUgdF9pbmRleCA9IGluZGV4LT5hc190cmVlICgpOworICB0X2luZGV4ID0gZm9sZF9jb25zdF92 YXIgKHRfaW5kZXgpOworCiAgIHRyZWUgdF90eXBlX3B0ciA9IFRSRUVfVFlQRSAodF9wdHIpOwog ICB0cmVlIHRfdHlwZV9zdGFyX3B0ciA9IFRSRUVfVFlQRSAodF90eXBlX3B0cik7CiAKQEAgLTE1 MTUsNiArMTc2Miw3IEBAIG5ld19hcnJheV9hY2Nlc3MgKGxvY2F0aW9uICpsb2MsCiAgICAgewog ICAgICAgdHJlZSB0X3Jlc3VsdCA9IGJ1aWxkNCAoQVJSQVlfUkVGLCB0X3R5cGVfc3Rhcl9wdHIs IHRfcHRyLCB0X2luZGV4LAogCQkJICAgICAgTlVMTF9UUkVFLCBOVUxMX1RSRUUpOworICAgICAg dF9yZXN1bHQgPSBmb2xkICh0X3Jlc3VsdCk7CiAgICAgICBpZiAobG9jKQogCXNldF90cmVlX2xv Y2F0aW9uICh0X3Jlc3VsdCwgbG9jKTsKICAgICAgIHJldHVybiBuZXcgbHZhbHVlICh0aGlzLCB0 X3Jlc3VsdCk7CkBAIC0xNTI0LDEyICsxNzcyLDE0IEBAIG5ld19hcnJheV9hY2Nlc3MgKGxvY2F0 aW9uICpsb2MsCiAgICAgICAvKiBDb252ZXJ0IGluZGV4IHRvIGFuIG9mZnNldCBpbiBieXRlcy4g ICovCiAgICAgICB0cmVlIHRfc2l6ZW9mID0gc2l6ZV9pbl9ieXRlcyAodF90eXBlX3N0YXJfcHRy KTsKICAgICAgIHRfaW5kZXggPSBmb2xkX2J1aWxkMSAoQ09OVkVSVF9FWFBSLCBzaXpldHlwZSwg dF9pbmRleCk7Ci0gICAgICB0cmVlIHRfb2Zmc2V0ID0gYnVpbGQyIChNVUxUX0VYUFIsIHNpemV0 eXBlLCB0X2luZGV4LCB0X3NpemVvZik7CisgICAgICB0cmVlIHRfb2Zmc2V0ID0gZm9sZF9idWls ZDJfbG9jIChVTktOT1dOX0xPQ0FUSU9OLAorCU1VTFRfRVhQUiwgc2l6ZXR5cGUsIHRfaW5kZXgs IHRfc2l6ZW9mKTsKIAogICAgICAgLyogTG9jYXRlIChwdHIgKyBvZmZzZXQpLiAgKi8KLSAgICAg IHRyZWUgdF9hZGRyZXNzID0gYnVpbGQyIChQT0lOVEVSX1BMVVNfRVhQUiwgdF90eXBlX3B0ciwg dF9wdHIsIHRfb2Zmc2V0KTsKKyAgICAgIHRyZWUgdF9hZGRyZXNzID0gZm9sZF9idWlsZDJfbG9j IChVTktOT1dOX0xPQ0FUSU9OLAorCVBPSU5URVJfUExVU19FWFBSLCB0X3R5cGVfcHRyLCB0X3B0 ciwgdF9vZmZzZXQpOwogCi0gICAgICB0cmVlIHRfaW5kaXJlY3Rpb24gPSBidWlsZDEgKElORElS RUNUX1JFRiwgdF90eXBlX3N0YXJfcHRyLCB0X2FkZHJlc3MpOworICAgICAgdHJlZSB0X2luZGly ZWN0aW9uID0gZm9sZF9idWlsZDEgKElORElSRUNUX1JFRiwgdF90eXBlX3N0YXJfcHRyLCB0X2Fk ZHJlc3MpOwogICAgICAgaWYgKGxvYykKIAl7CiAJICBzZXRfdHJlZV9sb2NhdGlvbiAodF9zaXpl b2YsIGxvYyk7CkBAIC0xNTc3LDcgKzE4MjcsNyBAQCBuZXdfZGVyZWZlcmVuY2UgKHRyZWUgcHRy LAogICBnY2NfYXNzZXJ0IChwdHIpOwogCiAgIHRyZWUgdHlwZSA9IFRSRUVfVFlQRSAoVFJFRV9U WVBFKHB0cikpOwotICB0cmVlIGRhdHVtID0gYnVpbGQxIChJTkRJUkVDVF9SRUYsIHR5cGUsIHB0 cik7CisgIHRyZWUgZGF0dW0gPSBmb2xkX2J1aWxkMSAoSU5ESVJFQ1RfUkVGLCB0eXBlLCBwdHIp OwogICBpZiAobG9jKQogICAgIHNldF90cmVlX2xvY2F0aW9uIChkYXR1bSwgbG9jKTsKICAgcmV0 dXJuIGRhdHVtOwpAQCAtMTczMSw3ICsxOTgxLDcgQEAgZ2V0X2FkZHJlc3MgKGxvY2F0aW9uICps b2MpCiAgIHRyZWUgdF9sdmFsdWUgPSBhc190cmVlICgpOwogICB0cmVlIHRfdGhpc3R5cGUgPSBU UkVFX1RZUEUgKHRfbHZhbHVlKTsKICAgdHJlZSB0X3B0cnR5cGUgPSBidWlsZF9wb2ludGVyX3R5 cGUgKHRfdGhpc3R5cGUpOwotICB0cmVlIHB0ciA9IGJ1aWxkMSAoQUREUl9FWFBSLCB0X3B0cnR5 cGUsIHRfbHZhbHVlKTsKKyAgdHJlZSBwdHIgPSBmb2xkX2J1aWxkMSAoQUREUl9FWFBSLCB0X3B0 cnR5cGUsIHRfbHZhbHVlKTsKICAgaWYgKGxvYykKICAgICBnZXRfY29udGV4dCAoKS0+c2V0X3Ry ZWVfbG9jYXRpb24gKHB0ciwgbG9jKTsKICAgaWYgKG1hcmtfYWRkcmVzc2FibGUgKGxvYykpCmRp ZmYgLS1naXQgYS9nY2Mvaml0L2ppdC1wbGF5YmFjay5oIGIvZ2NjL2ppdC9qaXQtcGxheWJhY2su aAppbmRleCBmNjcwYzllODFkZi4uZDQ0NWQ3Y2NiOTUgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvaml0 LXBsYXliYWNrLmgKKysrIGIvZ2NjL2ppdC9qaXQtcGxheWJhY2suaApAQCAtMTA5LDcgKzEwOSw4 IEBAIHB1YmxpYzoKICAgbmV3X2dsb2JhbCAobG9jYXRpb24gKmxvYywKIAkgICAgICBlbnVtIGdj Y19qaXRfZ2xvYmFsX2tpbmQga2luZCwKIAkgICAgICB0eXBlICp0eXBlLAotCSAgICAgIGNvbnN0 IGNoYXIgKm5hbWUpOworCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJICAgICAgZW51bSBnbG9i YWxfdmFyX2ZsYWdzIGZsYWdzKTsKIAogICBsdmFsdWUgKgogICBuZXdfZ2xvYmFsX2luaXRpYWxp emVkIChsb2NhdGlvbiAqbG9jLApAQCAtMTE4LDcgKzExOSwxOSBAQCBwdWJsaWM6CiAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCBlbGVtZW50X3NpemUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBpbml0aWFsaXplcl9udW1fZWxlbSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3Qgdm9pZCAqaW5pdGlhbGl6ZXIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKm5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICpuYW1lLAorCQkJICBlbnVtIGdsb2JhbF92YXJfZmxhZ3MgZmxhZ3MpOworCisgIHJ2YWx1 ZSAqCisgIG5ld19jdG9yIChsb2NhdGlvbiAqbG9nLAorCSAgICB0eXBlICp0eXBlLAorCSAgICBj b25zdCBhdXRvX3ZlYzxmaWVsZCo+ICpmaWVsZHMsCisJICAgIGNvbnN0IGF1dG9fdmVjPHJ2YWx1 ZSo+ICpydmFsdWVzKTsKKworCisgIHZvaWQKKyAgZ2xvYmFsX3NldF9pbml0X3J2YWx1ZSAobHZh bHVlKiB2YXJpYWJsZSwKKwkJCSAgcnZhbHVlKiBpbml0KTsKIAogICB0ZW1wbGF0ZSA8dHlwZW5h bWUgSE9TVF9UWVBFPgogICBydmFsdWUgKgpAQCAtMjg2LDcgKzI5OSw4IEBAIHByaXZhdGU6CiAg IGdsb2JhbF9uZXdfZGVjbCAobG9jYXRpb24gKmxvYywKICAgICAgICAgICAgICAgICAgICBlbnVt IGdjY19qaXRfZ2xvYmFsX2tpbmQga2luZCwKICAgICAgICAgICAgICAgICAgICB0eXBlICp0eXBl LAotICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpOworCQkgICBjb25zdCBjaGFy ICpuYW1lLAorCQkgICBlbnVtIGdsb2JhbF92YXJfZmxhZ3MgZmxhZ3MpOwogICBsdmFsdWUgKgog ICBnbG9iYWxfZmluYWxpemVfbHZhbHVlICh0cmVlIGlubmVyKTsKIApAQCAtNjM1LDcgKzY0OSwx MCBAQCBwdWJsaWM6CiAgIHJ2YWx1ZSAqCiAgIGFzX3J2YWx1ZSAoKSB7IHJldHVybiB0aGlzOyB9 CiAKLSAgdHJlZSBhc190cmVlICgpIGNvbnN0IHsgcmV0dXJuIG1faW5uZXI7IH0KKyAgdHJlZSBh c190cmVlICgpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gbV9pbm5lcjsKKyAgfQogCiAgIGNvbnRl eHQgKmdldF9jb250ZXh0ICgpIGNvbnN0IHsgcmV0dXJuIG1fY3R4dDsgfQogCmRpZmYgLS1naXQg YS9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuYyBiL2djYy9qaXQvaml0LXJlY29yZGluZy5jCmluZGV4 IDhkMzQ5NTZmYzY3Li4yZTI2NmM5NWJlZiAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9qaXQtcmVjb3Jk aW5nLmMKKysrIGIvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmMKQEAgLTEwNjQsNiArMTA2NCwxNSBA QCByZWNvcmRpbmc6OmNvbnRleHQ6Om5ld19nbG9iYWwgKHJlY29yZGluZzo6bG9jYXRpb24gKmxv YywKICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordm9pZAorcmVjb3JkaW5nOjpjb250ZXh0OjpuZXdf Z2xvYmFsX2luaXRfcnZhbHVlIChsdmFsdWUgKnZhcmlhYmxlLAorCQkJCQkgICAgcnZhbHVlICpp bml0KQoreworICByZWNvcmRpbmc6Omdsb2JhbF9pbml0X3J2YWx1ZSAqb2JqID0KKyAgICBuZXcg cmVjb3JkaW5nOjpnbG9iYWxfaW5pdF9ydmFsdWUgKHRoaXMsIHZhcmlhYmxlLCBpbml0KTsKKyAg cmVjb3JkIChvYmopOworfQorCiAvKiBDcmVhdGUgYSByZWNvcmRpbmc6Om1lbWVudG9fb2ZfbmV3 X3N0cmluZ19saXRlcmFsIGluc3RhbmNlIGFuZCBhZGQgaXQKICAgIHRvIHRoaXMgY29udGV4dCdz IGxpc3Qgb2YgbWVtZW50b3MuCiAKQEAgLTEwOTYsNiArMTEwNSwyMzMgQEAgcmVjb3JkaW5nOjpj b250ZXh0OjpuZXdfcnZhbHVlX2Zyb21fdmVjdG9yIChsb2NhdGlvbiAqbG9jLAogICByZXR1cm4g cmVzdWx0OwogfQogCisKKy8qIEZvciBzb3J0aW5nICovCitzdHJ1Y3QgZmllbGR2YWxfcGFpciB7 CisgIGdjYzo6aml0OjpyZWNvcmRpbmc6OmZpZWxkICpmaWVsZDsKKyAgZ2NjOjpqaXQ6OnJlY29y ZGluZzo6cnZhbHVlICp2YWx1ZTsKK307CisKK3N0YXRpYyBpbnQgY21wX2ZpZWxkdmFsdWUgKGNv bnN0IHZvaWQgKmwsIGNvbnN0IHZvaWQgKnIpCit7CisgIGNvbnN0IGZpZWxkdmFsX3BhaXIgKnBf bCA9IChjb25zdCBmaWVsZHZhbF9wYWlyKilsOworICBjb25zdCBmaWVsZHZhbF9wYWlyICpwX3Ig PSAoY29uc3QgZmllbGR2YWxfcGFpciopcjsKKyAgCisgIHJldHVybiBzdHJjbXAgKHBfbC0+Zmll bGQtPmdldF9uYW1lICgpLT5jX3N0ciAoKSwKKwkJIHBfci0+ZmllbGQtPmdldF9uYW1lICgpLT5j X3N0ciAoKSk7Cit9CisKK3JlY29yZGluZzo6cnZhbHVlICoKK3JlY29yZGluZzo6Y29udGV4dDo6 bmV3X2N0b3IgKHJlY29yZGluZzo6bG9jYXRpb24gKmxvYywKKwkJCSAgICAgIHJlY29yZGluZzo6 dHlwZSAqdHlwZSwKKwkJCSAgICAgIGludCBhcnJfbGVuZ3RoLAorCQkJICAgICAgZmllbGQgKipm aWVsZHNfYXJyLAorCQkJICAgICAgcnZhbHVlICoqdmFsdWVzKQoreworICByZWNvcmRpbmc6OmN0 b3IgKnJlc3VsdCA9IG5ldyBjdG9yICh0aGlzLCBsb2MsIHR5cGUpOworCisgIC8qIFdlIG5lZWQg dG8gY29weSBmaWVsZHMgYW5kIHZhbHVlcyBpbnRvIHJlc3VsdCdzIGF1dG9fdmVjOnMuCisKKyAg ICAgV2UgYWxzbyBkbyBzb21lIHZhbGlkYXRpb24gYW5kIHJldHVybiBOVUxMIG9uIGVycm9yLCBk ZWxldGluZworICAgICByZXN1bHQuICovCisKKyAgaWYgKHR5cGUtPmlzX2FycmF5ICgpICE9IE5V TEwpCisgICAgeworICAgICAgcmVzdWx0LT5tX3ZhbHVlcy5yZXNlcnZlIChhcnJfbGVuZ3RoLCBm YWxzZSk7CisKKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyX2xlbmd0aDsgaSsrKQorCXJl c3VsdC0+bV92YWx1ZXMucXVpY2tfcHVzaCAodmFsdWVzW2ldKTsKKyAgICB9CisgIGVsc2UgaWYg KHR5cGUtPmlzX3VuaW9uICgpKQorICAgIHsKKyAgICAgIC8qIENoZWNrIHRoYXQgdGhlIGZpZWxk IGFjdHVhbGx5IGV4aXN0cyBpbiB0aGUgdW5pb24sIHRoZW4gY29weSAqLworICAgICAgCisgICAg ICBmaWVsZCAqZmllbGRfY3RvciA9IGZpZWxkc19hcnJbMF07CisgICAgICAKKyAgICAgIGNvbXBv dW5kX3R5cGUgKmN0ID0gcmVpbnRlcnByZXRfY2FzdDxjb21wb3VuZF90eXBlICo+KHR5cGUpOwor CisgICAgICBmaWVsZHMgKmZpZWxkc191bmlvbiA9IGN0LT5nZXRfZmllbGRzICgpOworICAgICAg aW50IG5fZmllbGRzID0gZmllbGRzX3VuaW9uLT5sZW5ndGggKCk7CisKKyAgICAgIHJlY29yZGlu Zzo6dHlwZSAqZmllbGRfY3Rvcl90eXBlID0gZmllbGRfY3Rvci0+Z2V0X3R5cGUgKCktPnVucXVh bGlmaWVkICgpOworICAgICAgCisgICAgICBjb25zdCBjaGFyICpmaWVsZF9jdG9yX25hbWUgPSBm aWVsZF9jdG9yLT5nZXRfbmFtZSAoKS0+Y19zdHIgKCk7CisKKyAgICAgIGludCBoaXQgPSAwOwor ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuX2ZpZWxkczsgaSsrKQorCXsKKwkgIGZpZWxkICpm aWVsZF91bmlvbiA9IGZpZWxkc191bmlvbi0+Z2V0X2ZpZWxkIChpKTsKKworCSAgLyogRG8gdGhl IGZpZWxkcyBoYXZlIHRoZSBzYW1lIHVucXVhbGlmaWVkIHR5cGUgYW5kIHRoZSBzYW1lIG5hbWU/ ICovCisJICBpZiAoCisJCXR5cGVzX2tpbmRhX3NhbWUgKGZpZWxkX3VuaW9uLT5nZXRfdHlwZSAo KSwKKwkJCQkgIGZpZWxkX2N0b3JfdHlwZSkKKwkJJiYKKwkJKDAgPT0gc3RyY21wIChmaWVsZF91 bmlvbi0+Z2V0X25hbWUgKCktPmNfc3RyICgpLAorCQkJICAgICAgZmllbGRfY3Rvcl9uYW1lKSkK KwkgICAgICkKKwkgICAgeworCSAgICAgIGhpdCA9IDE7CisJICAgICAgYnJlYWs7CisJICAgIH0K Kwl9CisKKyAgICAgIGlmICghaGl0KQorCXsKKwkgIGFkZF9lcnJvcigKKwkgICAgbG9jLAorCSAg ICAiZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1Y3RvcjogY29uc3RydWN0b3IgZmllbGQgZG9l cyBub3QgZXhpc3QgIgorCSAgICAiaW4gdGhlIHVuaW9uIHR5cGUgKGZpZWxkOiAlcyAlcykodHlw ZTogJXMpIiwKKwkgICAgZmllbGRfY3Rvci0+Z2V0X3R5cGUgKCktPmdldF9kZWJ1Z19zdHJpbmcg KCksCisJICAgIGZpZWxkX2N0b3ItPmdldF9uYW1lICgpLT5jX3N0ciAoKSwKKwkgICAgdHlwZS0+ Z2V0X2RlYnVnX3N0cmluZyAoKSk7CisJICBnb3RvIGVycjsKKwl9CisgICAKKyAgICAgIHJlc3Vs dC0+bV92YWx1ZXMuc2FmZV9wdXNoICh2YWx1ZXNbMF0pOworICAgICAgcmVzdWx0LT5tX2ZpZWxk cy5zYWZlX3B1c2ggKGZpZWxkc19hcnJbMF0pOworICAgIH0KKyAgZWxzZSBpZiAodHlwZS0+aXNf c3RydWN0ICgpKQorICAgIHsKKyAgICAgIC8qIElmIHRoZSB0eXBlIGlzIGEgc3RydWN0LCB3ZSBt aWdodCBuZWVkIHRvIHNvcnQgdGhlIGZpZWxkcyBhbmQgYWRkCisJIGludGVybWl0dGVudCBmaWVs ZHMgd2l0aCBudWxsIHZhbHVlcyB0byB6ZXJvIHRoZW0gbGF0ZXIuCisKKwkgV2UgYWxzbyB3YW50 IGFueSBlcnJvciBoZXJlIGF0IHRoZSBjYWxsIHNpdGUgbm90IGF0IHJlcGxheSB0aW1lLiAqLwor CisgICAgICBjb21wb3VuZF90eXBlICpjdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29tcG91bmRfdHlw ZSAqPih0eXBlKTsKKworICAgICAgZmllbGRzICpmaWVsZHNfc3RydWN0ID0gY3QtPmdldF9maWVs ZHMgKCk7CisgICAgICBpbnQgbl9maWVsZHMgPSBmaWVsZHNfc3RydWN0LT5sZW5ndGggKCk7CisK KyAgICAgIGlmIChuX2ZpZWxkcyA8IGFycl9sZW5ndGgpCisJeworCSAgYWRkX2Vycm9yKAorCSAg ICBsb2MsCisJICAgICJnY2Nfaml0X2NvbnRleHRfbmV3X2NvbnN0cnVjdG9yOiBtb3JlIGZpZWxk cyBpbiBjb25zdHJ1Y3RvciB0aGFuICIKKwkgICAgImluIHRoZSB0YXJnZXQgc3RydWN0Iik7CisJ ICBnb3RvIGVycjsKKwl9CisKKyAgICAgIC8qIFNvcnRlZCBmaWVsZHMgc2hvdWxkIGJlIHRoZSBu b3JtYWwgY2FzZSBzbyB3ZSBjaGVjayBpZiB0aGUgZmllbGRzCisJIGFyZSBzb3J0ZWQgYmVmb3Jl IHNvcnRpbmcgdGhlbSB0byBzYXZlIHNvbWUgQ1BVIHRpbWUgKi8KKyAgICAgIGludCBpc19zb3J0 ZWQgPSAxOworCisgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFycl9sZW5ndGg7IGkrKykKKwl7 CisJICBmaWVsZCAqZmllbGRfc3RydWN0ID0gZmllbGRzX3N0cnVjdC0+Z2V0X2ZpZWxkIChpKTsK KworCSAgZmllbGQgKmZpZWxkX2N0b3IgPSBmaWVsZHNfYXJyW2ldOworCisJICAvKiBEbyB0aGUg ZmllbGRzIGhhdmUgdGhlIHNhbWUgdW5xdWFsaWZpZWQgdHlwZSBhbmQgdGhlIHNhbWUgbmFtZT8g Ki8KKwkgIGlmICgKKwkJdHlwZXNfa2luZGFfc2FtZSAoZmllbGRfc3RydWN0LT5nZXRfdHlwZSAo KSwKKwkJCQkgIGZpZWxkX2N0b3ItPmdldF90eXBlICgpKQorCQkmJgorCQkoMCA9PSBzdHJjbXAg KGZpZWxkX3N0cnVjdC0+Z2V0X25hbWUgKCktPmNfc3RyICgpLAorCQkJICAgICAgZmllbGRfY3Rv ci0+Z2V0X25hbWUgKCktPmNfc3RyICgpKSkKKwkgICAgICkKKwkgICAgOworCSAgZWxzZQorCSAg ICB7CisJICAgICAgaXNfc29ydGVkID0gMDsKKwkgICAgICBicmVhazsKKwkgICAgfQorCX0KKwor ICAgICAgaWYgKGlzX3NvcnRlZCkKKwl7CisJICByZXN1bHQtPm1fdmFsdWVzLnJlc2VydmUgKGFy cl9sZW5ndGgsIGZhbHNlKTsKKwkgIHJlc3VsdC0+bV9maWVsZHMucmVzZXJ2ZSAoYXJyX2xlbmd0 aCwgZmFsc2UpOworCisJICBmb3IgKGludCBpID0gMDsgaSA8IGFycl9sZW5ndGg7IGkrKykKKwkg ICAgeworCSAgICAgIHJlc3VsdC0+bV92YWx1ZXMucXVpY2tfcHVzaCAodmFsdWVzW2ldKTsKKwkg ICAgICByZXN1bHQtPm1fZmllbGRzLnF1aWNrX3B1c2ggKGZpZWxkc19hcnJbaV0pOworCSAgICB9 CisJfQorICAgICAgZWxzZQorCXsKKwkgIGludCBuX2hpdHMgPSAwOworCSAgLyogRm9yIGFsbCBm aWVsZHMgaW4gdGhlIHN0cnVjdCB0eXBlLCBmaW5kIHRoZSBjb3JyZW5zcG9uZGluZworCSAgICAg ZmllbGQgaW4gdGhlIGN0b3IgYW5kIHB1c2ggaXQgdG8gdGhlIHZlY3RvcnMuIElmIGEgZmllbGQg aXMKKwkgICAgIG1pc3NpbmcgaW4gdGhlIGN0b3IsIHB1c2ggYSBudWxsIHZhbHVlIHRvIGluZGlj YXRlIHRoYXQgaXQKKwkgICAgIG5lZWRzIHplcm9pbmcuCisKKwkgICAgIFRoZSBjLWZyb250IGVu ZCBzb3J0cyB0aGUgc3RydWN0IGZpZWxkcyB3aGVuIHRoZXkgYXJlIG1vcmUKKwkgICAgIHRoYW4g MTUsIHNlZSBjLWRlY2wuYyA6IGZpbmlzaF9zdHJ1Y3QoKSwgdG8gZG8gZmFuY3kgc2VhcmNoZXMK KwkgICAgIGZvciBiaWcgc3RydWN0cyBhbmQgZmFzdCBsaW5lYXIgZm9yIHNtYWxsLCBidXQgd2Ug ZG8gYmluYXJ5CisJICAgICBhbHdheXMgdG8gc2F2ZSBzb21lIGNvZGUgY29tcGxleGl0eS4gKi8K KwkgIGF1dG9fdmVjPGZpZWxkdmFsX3BhaXI+IHZfZmllbGR2YWxzOworCSAgdl9maWVsZHZhbHMu cmVzZXJ2ZSAoYXJyX2xlbmd0aCwgZmFsc2UpOworCisJICBmb3IgKGludCBpID0gMDsgaSA8IGFy cl9sZW5ndGg7IGkrKykKKwkgICAgdl9maWVsZHZhbHMucXVpY2tfcHVzaCAoCisJICAgICAge3Jl aW50ZXJwcmV0X2Nhc3Q8ZmllbGQgKj4oZmllbGRzX2FycltpXSksCisJICAgICAgIHJlaW50ZXJw cmV0X2Nhc3Q8cnZhbHVlICo+KHZhbHVlc1tpXSl9KTsKKworCSAgdl9maWVsZHZhbHMucXNvcnQg KGNtcF9maWVsZHZhbHVlKTsKKwkgIAorCSAgZm9yIChpbnQgaSA9IDA7IGkgPCBuX2ZpZWxkczsg aSsrKQorCSAgICB7CisJICAgICAgZmllbGQgKmZpZWxkX3N0cnVjdCA9IGZpZWxkc19zdHJ1Y3Qt PmdldF9maWVsZCAoaSk7CisKKwkgICAgICBmaWVsZHZhbF9wYWlyIGtleSA9IHtmaWVsZF9zdHJ1 Y3QsIE5VTEx9OworCisJICAgICAgZmllbGR2YWxfcGFpciAqYW5zID0gdl9maWVsZHZhbHMuYnNl YXJjaCAoJmtleSwgY21wX2ZpZWxkdmFsdWUpOworCisJICAgICAgaWYgKGFucykKKwkJeworCQkg IG5faGl0cysrOworCisJCSAgaWYgKCF0eXBlc19raW5kYV9zYW1lIChmaWVsZF9zdHJ1Y3QtPmdl dF90eXBlICgpLAorCQkJCQkgYW5zLT5maWVsZC0+Z2V0X3R5cGUgKCkpKQorCQkgICAgeworCQkg ICAgICBhZGRfZXJyb3IoCisJCQlsb2MsCisJCQkiZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1 Y3RvcjoiCisJCQkidHlwZSBvZiBzdHJ1Y3QgZmllbGQgZGlmZmVycyBmcm9tIHR5cGUgb2YgY29u c3RydWN0IGZpZWxkIgorCQkJIiAoc3RydWN0OiAlcyAlcykoY3RvcjogJXMgJXMpIiwKKwkJCWZp ZWxkX3N0cnVjdC0+Z2V0X3R5cGUgKCktPmdldF9kZWJ1Z19zdHJpbmcgKCksCisJCQlmaWVsZF9z dHJ1Y3QtPmdldF9uYW1lICgpLT5jX3N0ciAoKSwKKwkJCWFucy0+ZmllbGQtPmdldF90eXBlICgp LT5nZXRfZGVidWdfc3RyaW5nICgpLAorCQkJYW5zLT5maWVsZC0+Z2V0X25hbWUgKCktPmNfc3Ry ICgpKTsKKwkJICAgICAgZ290byBlcnI7CisJCSAgICB9CisKKwkJICByZXN1bHQtPm1fdmFsdWVz LnNhZmVfcHVzaCAoYW5zLT52YWx1ZSk7CisJCSAgcmVzdWx0LT5tX2ZpZWxkcy5zYWZlX3B1c2gg KGFucy0+ZmllbGQpOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgLyogUHVzaCBudWxsIHZh bHVlIGlmIG5vdCBmb3VuZCwgdG8gemVybyB0aGUgZmllbGQuICovCisJCSAgcmVzdWx0LT5tX3Zh bHVlcy5zYWZlX3B1c2ggKE5VTEwpOworCQkgIHJlc3VsdC0+bV9maWVsZHMuc2FmZV9wdXNoIChm aWVsZF9zdHJ1Y3QpOworCQl9CisJICAgIH0KKworCSAgLyogVmVyaWZ5IHRoYXQgd2UgZm91bmQg YWxsIHRoZSBmaWVsZHMgc3BlY2lmaWVkLiAqLworCSAgaWYgKG5faGl0cyAhPSBhcnJfbGVuZ3Ro KQorCSAgICB7CisJICAgICAgYWRkX2Vycm9yKAorCQlsb2MsCisJCSJnY2Nfaml0X2NvbnRleHRf bmV3X2NvbnN0cnVjdG9yOiIKKwkJImNvdWxkIG5vdCBmaW5kIG1hdGNoaW5nIGZpZWxkIGluIHN0 cnVjdCBmb3IiCisJCSIgYWxsIGZpZWxkcyBpbiBjb25zdHJ1Y3RvciIpOworCSAgICAgIGdvdG8g ZXJyOwkgICAgCisJICAgIH0KKwl9CisgICAgfQorICBlbHNlCisgICAgZ2NjX3VucmVhY2hhYmxl KCk7CisKKyAgcmVjb3JkIChyZXN1bHQpOworICByZXR1cm4gcmVzdWx0OworCisgZXJyOgorICBk ZWxldGUgcmVzdWx0OworICByZXR1cm4gTlVMTDsKK30KKwogLyogQ3JlYXRlIGEgcmVjb3JkaW5n Ojp1bmFyeV9vcCBpbnN0YW5jZSBhbmQgYWRkIGl0IHRvIHRoaXMgY29udGV4dCdzCiAgICBsaXN0 IG9mIG1lbWVudG9zLgogCkBAIC00NjUyLDExICs0ODg4LDEzIEBAIHJlY29yZGluZzo6Z2xvYmFs OjpyZXBsYXlfaW50byAocmVwbGF5ZXIgKnIpCiAJCQkJIG1faW5pdGlhbGl6ZXJfbnVtX2J5dGVz CiAJCQkJIC8gbV90eXBlLT5kZXJlZmVyZW5jZSAoKS0+Z2V0X3NpemUgKCksCiAJCQkJIG1faW5p dGlhbGl6ZXIsCi0JCQkJIHBsYXliYWNrX3N0cmluZyAobV9uYW1lKSkKKwkJCQkgcGxheWJhY2tf c3RyaW5nIChtX25hbWUpLAorCQkJCSBmbGFncykKICAgICA6IHItPm5ld19nbG9iYWwgKHBsYXli YWNrX2xvY2F0aW9uIChyLCBtX2xvYyksCiAJCSAgICAgbV9raW5kLAogCQkgICAgIG1fdHlwZS0+ cGxheWJhY2tfdHlwZSAoKSwKLQkJICAgICBwbGF5YmFja19zdHJpbmcgKG1fbmFtZSkpKTsKKwkJ ICAgICBwbGF5YmFja19zdHJpbmcgKG1fbmFtZSksCisJCSAgICAgZmxhZ3MpKTsKIH0KIAogLyog T3ZlcnJpZGUgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YKQEAgLTU1ODMsNiArNTgyMSwx MjUgQEAgcmVjb3JkaW5nOjptZW1lbnRvX29mX25ld19ydmFsdWVfZnJvbV92ZWN0b3I6OndyaXRl X3JlcHJvZHVjZXIgKHJlcHJvZHVjZXIgJnIpCiAJICAgZWxlbWVudHNfaWQpOwogfQogCit2b2lk CityZWNvcmRpbmc6OmN0b3I6OnZpc2l0X2NoaWxkcmVuIChydmFsdWVfdmlzaXRvciAqdikKK3sK KyAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtX3ZhbHVlcy5sZW5ndGggKCk7IGkrKykK KyAgICB2LT52aXNpdCAobV92YWx1ZXNbaV0pOworfQorCityZWNvcmRpbmc6OnN0cmluZyAqCity ZWNvcmRpbmc6OmN0b3I6Om1ha2VfZGVidWdfc3RyaW5nICgpCit7CisgIHJldHVybiBzdHJpbmc6 OmZyb21fcHJpbnRmIChtX2N0eHQsCisJCQkgICAgICAiY3RvciIpOworfQorCit2b2lkCityZWNv cmRpbmc6OmN0b3I6OndyaXRlX3JlcHJvZHVjZXIgKHJlcHJvZHVjZXIgJnIpCit7CisgIGNvbnN0 IGNoYXIgKmlkID0gci5tYWtlX2lkZW50aWZpZXIgKHRoaXMsICJydmFsdWUiKTsKKyAgdHlwZSAq dHlwZSA9IGdldF90eXBlKCk7CisKKyAgci53cml0ZSAoIiAgZ2NjX2ppdF9ydmFsdWUgKiVzO1xu IiwgaWQpOworICByLndyaXRlICgiICB7XG4iKTsgLyogT3BlbiBzY29wZSBmb3IgbG9jYWxzICov CisKKyAgLyogV3JpdGUgdGhlIGFycmF5IG9mIHZhbHVlcyAqLworICByLndyaXRlICgiICAgIGdj Y19qaXRfcnZhbHVlICp2YWx1ZXNbXSA9IHtcbiIpOworICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp IDwgbV92YWx1ZXMubGVuZ3RoICgpOyBpKyspCisgICAgci53cml0ZSAoIiAgICAgICAgJXMsXG4i LCByLmdldF9pZGVudGlmaWVyIChtX3ZhbHVlc1tpXSkpOworICByLndyaXRlICgiICAgICAgfTtc biIpOworCisgIC8qIFdyaXRlIHRoZSBhcnJheSBvZiBmaWVsZHMgKi8KKyAgaWYgKHR5cGUtPmlz X2FycmF5ICgpKQorICAgIHIud3JpdGUgKCIgICAgZ2NjX2ppdF9maWVsZCAqKmZpZWxkcyA9IE5V TEw7XG4iKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIHIud3JpdGUgKCIgICAgZ2NjX2ppdF9maWVs ZCAqZmllbGRzW10gPSB7XG4iKTsKKyAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Zp ZWxkcy5sZW5ndGggKCk7IGkrKykKKwlyLndyaXRlICgiICAgICAgICAlcyxcbiIsIHIuZ2V0X2lk ZW50aWZpZXIgKG1fZmllbGRzW2ldKSk7CisgICAgICByLndyaXRlICgiICAgICAgfTtcbiIpOwor ICAgIH0KKyAgci53cml0ZSAoCisiICAgICVzID1cbiIKKyIgICAgICBnY2Nfaml0X2NvbnRleHRf bmV3X2NvbnN0cnVjdG9yICglcyxcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAlcywgLyogZ2NjX2ppdF9sb2NhdGlvbiAqbG9jICovXG4iCisiICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJXMsIC8qIGdjY19qaXRfdHlwZSAqdHlwZSAqL1xu IgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVpLCAvKiBpbnQgYXJy X2xlbmd0aCAqL1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZp ZWxkcyxcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMp O1xuIiwKKwkgICBpZCwKKwkgICByLmdldF9pZGVudGlmaWVyIChnZXRfY29udGV4dCAoKSksCisJ ICAgci5nZXRfaWRlbnRpZmllciAobV9sb2MpLAorCSAgIHIuZ2V0X2lkZW50aWZpZXJfYXNfdHlw ZSAoZ2V0X3R5cGUgKCkpLAorCSAgIG1fdmFsdWVzLmxlbmd0aCAoKSk7CisKKyAgci53cml0ZSAo IiAgfVxuIik7IC8qIENsb3NlIHNjb3BlIGZvciBsb2NhbHMgKi8KK30KKwordm9pZAorcmVjb3Jk aW5nOjpjdG9yOjpyZXBsYXlfaW50byAocmVwbGF5ZXIgKnIpCit7CisgIGF1dG9fdmVjPHBsYXli YWNrOjpydmFsdWUgKj4gcGxheWJhY2tfdmFsdWVzOworICBhdXRvX3ZlYzxwbGF5YmFjazo6Zmll bGQgKj4gcGxheWJhY2tfZmllbGRzOworCisgIGludCBuID0gbV92YWx1ZXMubGVuZ3RoKCk7CisK KyAgdHlwZSAqdHlwZSA9IGdldF90eXBlICgpOworCisgIC8qIEhhbmRsZSBhcnJheXMsIGFuZCBy ZXR1cm4gKi8KKyAgaWYgKHR5cGUtPmlzX2FycmF5ICgpKQorICAgIHsKKyAgICAgIHBsYXliYWNr X3ZhbHVlcy5yZXNlcnZlIChuLCBmYWxzZSk7CisKKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg bjsgaSsrKQorCXsKKwkgIC8qIG51bGwgbV92YWx1ZXMgZWxlbWVudCBpbmRpY2F0ZXMgemVybyBj dG9yICovCisJICBwbGF5YmFja192YWx1ZXMucXVpY2tfcHVzaCAobV92YWx1ZXNbaV0gPworCQkJ CSAgICAgIG1fdmFsdWVzW2ldLT5wbGF5YmFja19ydmFsdWUgKCkgOgorCQkJCSAgICAgIE5VTEwp OworCX0KKyAgICAgIHNldF9wbGF5YmFja19vYmogKHItPm5ld19jdG9yIChwbGF5YmFja19sb2Nh dGlvbiAociwgbV9sb2MpLAorCQkJCSAgICAgZ2V0X3R5cGUgKCktPnBsYXliYWNrX3R5cGUgKCks CisJCQkJICAgICBOVUxMLAorCQkJCSAgICAgJnBsYXliYWNrX3ZhbHVlcykpOworICAgICAgcmV0 dXJuOworICAgIH0KKyAgLyogSGFuZGxlIHVuaW9ucywgYW5kIHJldHVybiAqLworICBlbHNlIGlm ICh0eXBlLT5pc191bmlvbiAoKSkKKyAgICB7CisgICAgICBwbGF5YmFja192YWx1ZXMuc2FmZV9w dXNoIChtX3ZhbHVlc1swXSA/CisJCQkJICAgbV92YWx1ZXNbMF0tPnBsYXliYWNrX3J2YWx1ZSAo KSA6CisJCQkJICAgTlVMTCk7CisgICAgICBwbGF5YmFja19maWVsZHMuc2FmZV9wdXNoIChtX2Zp ZWxkc1swXS0+cGxheWJhY2tfZmllbGQgKCkpOworCisgICAgICBzZXRfcGxheWJhY2tfb2JqIChy LT5uZXdfY3RvciAocGxheWJhY2tfbG9jYXRpb24gKHIsIG1fbG9jKSwKKwkJCQkgICAgIGdldF90 eXBlICgpLT5wbGF5YmFja190eXBlICgpLAorCQkJCSAgICAgJnBsYXliYWNrX2ZpZWxkcywKKwkJ CQkgICAgICZwbGF5YmFja192YWx1ZXMpKTsKKworICAgICAgcmV0dXJuOworICAgIH0KKyAgLyog Li4uIGVsc2UsIGhhbmRsZSBzdHJ1Y3RzICovCisKKyAgcGxheWJhY2tfdmFsdWVzLnJlc2VydmUg KG4sIGZhbHNlKTsKKyAgcGxheWJhY2tfZmllbGRzLnJlc2VydmUgKG4sIGZhbHNlKTsKKworICBm b3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICB7CisgICAgICAvKiBudWxsIG1fdmFsdWVz IGVsZW1lbnQgaW5kaWNhdGVzIHplcm8gY3RvciAqLworICAgICAgcGxheWJhY2tfdmFsdWVzLnF1 aWNrX3B1c2ggKG1fdmFsdWVzW2ldID8KKwkJCQkgICAgbV92YWx1ZXNbaV0tPnBsYXliYWNrX3J2 YWx1ZSAoKSA6CisJCQkJICAgIE5VTEwpOworICAgICAgcGxheWJhY2tfZmllbGRzLnF1aWNrX3B1 c2ggKG1fZmllbGRzW2ldLT5wbGF5YmFja19maWVsZCAoKSk7CisgICAgfQorCisgIHNldF9wbGF5 YmFja19vYmogKHItPm5ld19jdG9yIChwbGF5YmFja19sb2NhdGlvbiAociwgbV9sb2MpLAorCQkJ CSBnZXRfdHlwZSAoKS0+cGxheWJhY2tfdHlwZSAoKSwKKwkJCQkgJnBsYXliYWNrX2ZpZWxkcywK KwkJCQkgJnBsYXliYWNrX3ZhbHVlcykpOworfQorCiAvKiBUaGUgaW1wbGVtZW50YXRpb24gb2Yg Y2xhc3MgZ2NjOjpqaXQ6OnJlY29yZGluZzo6dW5hcnlfb3AuICAqLwogCiAvKiBJbXBsZW1lbnRh dGlvbiBvZiBwdXJlIHZpcnR1YWwgaG9vayByZWNvcmRpbmc6Om1lbWVudG86OnJlcGxheV9pbnRv CkBAIC03NTU2LDYgKzc5MTMsODEgQEAgcmVjb3JkaW5nOjp0b3BfbGV2ZWxfYXNtOjp3cml0ZV9y ZXByb2R1Y2VyIChyZXByb2R1Y2VyICZyKQogCSAgIG1fYXNtX3N0bXRzLT5nZXRfZGVidWdfc3Ry aW5nICgpKTsKIH0KIAordm9pZAorcmVjb3JkaW5nOjpnbG9iYWxfaW5pdF9ydmFsdWU6OnJlcGxh eV9pbnRvIChyZXBsYXllciAqcikKK3sKKyAgci0+Z2xvYmFsX3NldF9pbml0X3J2YWx1ZSAobV92 YXJpYWJsZS0+cGxheWJhY2tfbHZhbHVlKCksCisJCQkgICAgICAgbV9pbml0LT5wbGF5YmFja19y dmFsdWUoKSk7Cit9CisKK3ZvaWQKK3JlY29yZGluZzo6Z2xvYmFsX2luaXRfcnZhbHVlOjp3cml0 ZV9yZXByb2R1Y2VyIChyZXByb2R1Y2VyICZyKQoreworICByLndyaXRlICgKKyAgICAiICBnY2Nf aml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlICglcywgLyogbHZhbHVlICpnbG9iYWwg Ki9cbiIKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlcyk7 LyogcnZhbHVlICppbml0ICovXG4iLAorICAgIHIuZ2V0X2lkZW50aWZpZXIgKG1fdmFyaWFibGUp LAorICAgIHIuZ2V0X2lkZW50aWZpZXJfYXNfcnZhbHVlIChtX2luaXQpKTsKK30KKwordm9pZAor cmVjb3JkaW5nOjpnbG9iYWxfaW5pdF9ydmFsdWU6OndyaXRlX3RvX2R1bXAgKGR1bXAgJmQpCit7 CisgIGQud3JpdGUgKCIlcztcbiIsIGdldF9kZWJ1Z19zdHJpbmcgKCkpOworfQorCityZWNvcmRp bmc6OnN0cmluZyAqCityZWNvcmRpbmc6Omdsb2JhbF9pbml0X3J2YWx1ZTo6bWFrZV9kZWJ1Z19z dHJpbmcgKCkKK3sKKyAgICByZXR1cm4gc3RyaW5nOjpmcm9tX3ByaW50ZihtX2N0eHQsICIlcyA9 ICVzIiwKKyAgICAgIG1fdmFyaWFibGUtPmdldF9kZWJ1Z19zdHJpbmcgKCksCisgICAgICBtX2lu aXQtPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworfQorCisvKiBTdHJpcCBxdWFsaWZpZXJzIGFuZCBj b3VudCBwb2ludGVyIGRlcHRoLCByZXR1cm5pbmcgdHJ1ZQorICAgaWYgdGhlIHR5cGVzJyBiYXNl IHR5cGUgYW5kIHBvaW50ZXIgZGVwdGggYXJlCisgICB0aGUgc2FtZSwgb3RoZXJ3aXNlIGZhbHNl LgorCisgICBEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LiBDYWxsICd0eXBlc19raW5kYV9zYW1l JyAqLworYm9vbAordHlwZXNfa2luZGFfc2FtZV9pbnRlcm5hbCAocmVjb3JkaW5nOjp0eXBlICph LCByZWNvcmRpbmc6OnR5cGUgKmIpCit7CisgIGludCBwdHJfZGVwdGhbMl0gPSB7fTsKKyAgcmVj b3JkaW5nOjp0eXBlICpiYXNlX3R5cGVzWzJdOworICByZWNvcmRpbmc6OnR5cGUgKnR5cGVzWzJd ID0ge2EsIGJ9OworCisgIC8qIFN0cmlwIHF1YWxpZmllcnMgYW5kIGNvdW50IHBvaW50ZXJuZXNz ICovCisgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKQorICAgIHsKKyAgICAgIHJlY29yZGlu Zzo6dHlwZSAqdCA9IHR5cGVzW2ldOworICAgICAgd2hpbGUgKHRydWUpCisJeworCSAgaWYgKCF0 KQorCSAgICByZXR1cm4gZmFsc2U7IC8qIFNob3VsZCBvbmx5IGhhcHBlbiBvbiBiYWQgaW5wdXQg Ki8KKworCSAgcmVjb3JkaW5nOjp0eXBlICpwb2ludGVkX3RvX3R5cGUgPSB0LT5pc19wb2ludGVy KCk7CisJICBpZiAocG9pbnRlZF90b190eXBlICE9IE5VTEwpCisJICAgIHsKKwkgICAgICBwdHJf ZGVwdGhbaV0rKzsKKwkgICAgICB0ID0gcG9pbnRlZF90b190eXBlOworCSAgICAgIGNvbnRpbnVl OworCSAgICB9CisKKwkgIC8qIHVucXVhbGlmaWVkKCkgcmV0dXJucyAndGhpcycgb24gYmFzZSB0 eXBlcyAqLworCSAgcmVjb3JkaW5nOjp0eXBlICpuZXh0ID0gdC0+dW5xdWFsaWZpZWQgKCk7CisJ ICBpZiAobmV4dCA9PSB0KQorCSAgICB7CisJICAgICAgYmFzZV90eXBlc1tpXSA9IHQ7CisJICAg ICAgYnJlYWs7CisJICAgIH0KKwkgIHQgPSBuZXh0OworCX0KKyAgICB9CisKKyAgcmV0dXJuIGJh c2VfdHlwZXNbMF0gPT0gYmFzZV90eXBlc1sxXSAmJgorICAgIChwdHJfZGVwdGhbMF0gPT0gcHRy X2RlcHRoWzFdKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgZ2NjOjpqaXQKIAogfSAvLyBuYW1lc3Bh Y2UgZ2NjCmRpZmYgLS1naXQgYS9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuaCBiL2djYy9qaXQvaml0 LXJlY29yZGluZy5oCmluZGV4IGQ1ZTBjMzU5YTQ4Li5hZmQ2MTEzMmU2OSAxMDA2NDQKLS0tIGEv Z2NjL2ppdC9qaXQtcmVjb3JkaW5nLmgKKysrIGIvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmgKQEAg LTE0OSw2ICsxNDksMTcgQEAgcHVibGljOgogCSAgICAgIHR5cGUgKnR5cGUsCiAJICAgICAgY29u c3QgY2hhciAqbmFtZSk7CiAKKyAgcnZhbHVlICoKKyAgbmV3X2N0b3IgKGxvY2F0aW9uICpsb2Ms CisJICAgIHR5cGUgKnR5cGUsCisJICAgIGludCBhcnJfbGVuZ3RoLAorCSAgICBmaWVsZCAqKmZp ZWxkcywKKwkgICAgcnZhbHVlICoqdmFsdWVzKTsKKworICB2b2lkCisgIG5ld19nbG9iYWxfaW5p dF9ydmFsdWUgKGx2YWx1ZSAqdmFyaWFibGUsCisJCQkgIHJ2YWx1ZSAqaW5pdCk7CisKICAgdGVt cGxhdGUgPHR5cGVuYW1lIEhPU1RfVFlQRT4KICAgcnZhbHVlICoKICAgbmV3X3J2YWx1ZV9mcm9t X2NvbnN0ICh0eXBlICp0eXBlLApAQCAtNTQ3LDYgKzU1OCw4IEBAIHB1YmxpYzoKICAgdmlydHVh bCBib29sIGlzX2NvbXBsZXggKCkgY29uc3QgPSAwOwogICB2aXJ0dWFsIHR5cGUgKmlzX3BvaW50 ZXIgKCkgPSAwOwogICB2aXJ0dWFsIHR5cGUgKmlzX2FycmF5ICgpID0gMDsKKyAgdmlydHVhbCBi b29sIGlzX3N0cnVjdCAoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICB2aXJ0dWFsIGJvb2wg aXNfdW5pb24gKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgdmlydHVhbCBib29sIGlzX3Zv aWQgKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgdmlydHVhbCBib29sIGhhc19rbm93bl9z aXplICgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgLyogVXNlZCB0byBwYWlyIGNvbXBsZXgg ZmxvYXQgdHlwZXMgd2l0aCByZWFsIGZsb2F0IHR5cGUKQEAgLTg3Myw2ICs4ODYsNyBAQCBwdWJs aWM6CiAgIHt9CiAKICAgdHlwZSAqIGdldF90eXBlICgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsg fQorICBzdHJpbmcgKiBnZXRfbmFtZSAoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KIAogICBj b21wb3VuZF90eXBlICogZ2V0X2NvbnRhaW5lciAoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5l cjsgfQogICB2b2lkIHNldF9jb250YWluZXIgKGNvbXBvdW5kX3R5cGUgKmMpIHsgbV9jb250YWlu ZXIgPSBjOyB9CkBAIC05NzksNiArOTkzLDggQEAgcHVibGljOgogCiAgIGNvbnN0IGNoYXIgKmFj Y2Vzc19hc190eXBlIChyZXByb2R1Y2VyICZyKSBGSU5BTCBPVkVSUklERTsKIAorICB2aXJ0dWFs IGJvb2wgaXNfc3RydWN0ICgpIGNvbnN0IEZJTkFMIE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0K KwogcHJpdmF0ZToKICAgc3RyaW5nICogbWFrZV9kZWJ1Z19zdHJpbmcgKCkgRklOQUwgT1ZFUlJJ REU7CiAgIHZvaWQgd3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNlciAmcikgRklOQUwgT1ZFUlJJ REU7CkBAIC0xMDE3LDYgKzEwMzMsOCBAQCBwdWJsaWM6CiAKICAgdm9pZCByZXBsYXlfaW50byAo cmVwbGF5ZXIgKnIpIEZJTkFMIE9WRVJSSURFOwogCisgIHZpcnR1YWwgYm9vbCBpc191bmlvbiAo KSBjb25zdCBGSU5BTCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisKIHByaXZhdGU6CiAgIHN0 cmluZyAqIG1ha2VfZGVidWdfc3RyaW5nICgpIEZJTkFMIE9WRVJSSURFOwogICB2b2lkIHdyaXRl X3JlcHJvZHVjZXIgKHJlcHJvZHVjZXIgJnIpIEZJTkFMIE9WRVJSSURFOwpAQCAtMTQxNCw2ICsx NDMyLDIxIEBAIHB1YmxpYzoKICAgICBtX2luaXRpYWxpemVyX251bV9ieXRlcyA9IG51bV9ieXRl czsKICAgfQogCisgIHZvaWQgc2V0X2ZsYWdzIChpbnQgZmxhZ19maWVsZHMpCisgIHsKKyAgICBm bGFncyA9IChlbnVtIGdsb2JhbF92YXJfZmxhZ3MpKGZsYWdzIHwgZmxhZ19maWVsZHMpOworICB9 CisgIC8qIFJldHVybnMgdHJ1ZSBpZiBhbnkgb2YgdGhlIGZsYWdzIGluIHRoZSBhcmd1bWVudCBp cyBzZXQgKi8KKyAgYm9vbCB0ZXN0X2ZsYWdzX2FueW9mIChpbnQgZmxhZ19maWVsZHMpIGNvbnN0 CisgIHsKKyAgICByZXR1cm4gZmxhZ3MgJiBmbGFnX2ZpZWxkczsKKyAgfQorCisgIGVudW0gZ2Nj X2ppdF9nbG9iYWxfa2luZCBnZXRfa2luZCgpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gbV9raW5k OworICB9CisKIHByaXZhdGU6CiAgIHN0cmluZyAqIG1ha2VfZGVidWdfc3RyaW5nICgpIEZJTkFM IE9WRVJSSURFIHsgcmV0dXJuIG1fbmFtZTsgfQogICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KQEAg LTE0MjYsOSArMTQ1OSwxMSBAQCBwcml2YXRlOgogCiBwcml2YXRlOgogICBlbnVtIGdjY19qaXRf Z2xvYmFsX2tpbmQgbV9raW5kOworICBlbnVtIGdsb2JhbF92YXJfZmxhZ3MgZmxhZ3MgPSBHTE9C QUxfVkFSX0ZMQUdTX05PTkU7CiAgIHN0cmluZyAqbV9uYW1lOwogICB2b2lkICptX2luaXRpYWxp emVyOwogICBzaXplX3QgbV9pbml0aWFsaXplcl9udW1fYnl0ZXM7CisgIAogfTsKIAogdGVtcGxh dGUgPHR5cGVuYW1lIEhPU1RfVFlQRT4KQEAgLTE1MTIsNiArMTU0NywzMiBAQCBwcml2YXRlOgog ICBhdXRvX3ZlYzxydmFsdWUgKj4gbV9lbGVtZW50czsKIH07CiAKK2NsYXNzIGN0b3IgOiBwdWJs aWMgcnZhbHVlCit7CitwdWJsaWM6CisgIGN0b3IgKGNvbnRleHQgKmN0eHQsCisJbG9jYXRpb24g KmxvYywKKwl0eXBlICp0eXBlKQorICA6IHJ2YWx1ZSAoY3R4dCwgbG9jLCB0eXBlKQorICB7IH0K KworICB2b2lkIHJlcGxheV9pbnRvIChyZXBsYXllciAqcikgRklOQUwgT1ZFUlJJREU7CisKKyAg dm9pZCB2aXNpdF9jaGlsZHJlbiAocnZhbHVlX3Zpc2l0b3IgKikgRklOQUwgT1ZFUlJJREU7CisK K3ByaXZhdGU6CisgIHN0cmluZyAqIG1ha2VfZGVidWdfc3RyaW5nICgpIEZJTkFMIE9WRVJSSURF OworICB2b2lkIHdyaXRlX3JlcHJvZHVjZXIgKHJlcHJvZHVjZXIgJnIpIEZJTkFMIE9WRVJSSURF OworICBlbnVtIHByZWNlZGVuY2UgZ2V0X3ByZWNlZGVuY2UgKCkgY29uc3QgRklOQUwgT1ZFUlJJ REUKKyAgeworICAgIHJldHVybiBQUkVDRURFTkNFX1BSSU1BUlk7CisgIH0KKworcHVibGljOgor ICBhdXRvX3ZlYzxmaWVsZCAqPiBtX2ZpZWxkczsKKyAgYXV0b192ZWM8cnZhbHVlICo+IG1fdmFs dWVzOworfTsKKwogY2xhc3MgdW5hcnlfb3AgOiBwdWJsaWMgcnZhbHVlCiB7CiBwdWJsaWM6CkBA IC0yMzU1LDYgKzI0MTYsMjQgQEAgcHJpdmF0ZToKICAgc3RyaW5nICptX2FzbV9zdG10czsKIH07 CiAKK2NsYXNzIGdsb2JhbF9pbml0X3J2YWx1ZSA6IHB1YmxpYyBtZW1lbnRvCit7CitwdWJsaWM6 CisgIGdsb2JhbF9pbml0X3J2YWx1ZSAoY29udGV4dCAqY3R4dCwgbHZhbHVlICp2YXJpYWJsZSwg cnZhbHVlICppbml0KSA6CisgICAgbWVtZW50byhjdHh0KSwgbV92YXJpYWJsZSAodmFyaWFibGUp LCBtX2luaXQgKGluaXQpIHt9OworCisgIHZvaWQgd3JpdGVfdG9fZHVtcCAoZHVtcCAmZCkgRklO QUwgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgIHZvaWQgcmVwbGF5X2ludG8gKHJlcGxheWVyICpy KSBGSU5BTCBPVkVSUklERTsKKyAgc3RyaW5nICogbWFrZV9kZWJ1Z19zdHJpbmcgKCkgRklOQUwg T1ZFUlJJREU7CisgIHZvaWQgd3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNlciAmcikgRklOQUwg T1ZFUlJJREU7CisKK3ByaXZhdGU6CisgIGx2YWx1ZSAqbV92YXJpYWJsZTsKKyAgcnZhbHVlICpt X2luaXQ7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBnY2M6OmppdDo6cmVjb3JkaW5nCiAKIC8qIENy ZWF0ZSBhIHJlY29yZGluZzo6bWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgaW5zdGFu Y2UgYW5kIGFkZApAQCAtMjM3NCw2ICsyNDUzLDE5IEBAIHJlY29yZGluZzo6Y29udGV4dDo6bmV3 X3J2YWx1ZV9mcm9tX2NvbnN0IChyZWNvcmRpbmc6OnR5cGUgKnR5cGUsCiAgIHJldHVybiByZXN1 bHQ7CiB9CiAKK2Jvb2wKK3R5cGVzX2tpbmRhX3NhbWVfaW50ZXJuYWwgKHJlY29yZGluZzo6dHlw ZSAqYSwKKwkJCSAgIHJlY29yZGluZzo6dHlwZSAqYik7CisKKy8qIFN0cmlwICphbGwqIHF1YWxp ZmllcnMgYW5kIGNvdW50IHBvaW50ZXIgZGVwdGgsIHJldHVybmluZyB0cnVlCisgICBpZiB0aGUg dHlwZXMgYW5kIHBvaW50ZXIgZGVwdGggYXJlIHRoZSBzYW1lLCBvdGhlcndpc2UgZmFsc2UuICov CitzdGF0aWMgaW5saW5lIGJvb2wKK3R5cGVzX2tpbmRhX3NhbWUgKHJlY29yZGluZzo6dHlwZSAq YSwgcmVjb3JkaW5nOjp0eXBlICpiKQoreworICAvKiBIYW5kbGUgdHJpdmlhbCBjYXNlIGhlcmUs IHRvIGFsbG93IGZvciBpbmxpbmluZy4gKi8KKyAgcmV0dXJuIGEgPT0gYiB8fCB0eXBlc19raW5k YV9zYW1lX2ludGVybmFsIChhLCBiKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgZ2NjOjpqaXQKIAog fSAvLyBuYW1lc3BhY2UgZ2NjCmRpZmYgLS1naXQgYS9nY2Mvaml0L2xpYmdjY2ppdCsrLmggYi9n Y2Mvaml0L2xpYmdjY2ppdCsrLmgKaW5kZXggYjk0Y2RjODVjOGUuLjAxOTE3Mjg1NGE3IDEwMDY0 NAotLS0gYS9nY2Mvaml0L2xpYmdjY2ppdCsrLmgKKysrIGIvZ2NjL2ppdC9saWJnY2NqaXQrKy5o CkBAIC0yMDYsNiArMjA2LDExIEBAIG5hbWVzcGFjZSBnY2NqaXQKICAgICBydmFsdWUgbmV3X3J2 YWx1ZSAodHlwZSB2ZWN0b3JfdHlwZSwKIAkJICAgICAgIHN0ZDo6dmVjdG9yPHJ2YWx1ZT4gZWxl bWVudHMpIGNvbnN0OwogCisgICAgcnZhbHVlIG5ld19jb25zdHJ1Y3RvciAodHlwZSB0eXBlXywK KwkJCSAgICBzdGQ6OnZlY3RvcjxmaWVsZD4gJmZpZWxkcywKKwkJCSAgICBzdGQ6OnZlY3Rvcjxy dmFsdWU+ICZ2YWx1ZXMsCisJCQkgICAgbG9jYXRpb24gbG9jID0gbG9jYXRpb24gKCkpOworCiAg ICAgLyogR2VuZXJpYyB1bmFyeSBvcGVyYXRpb25zLi4uICAqLwogICAgIHJ2YWx1ZSBuZXdfdW5h cnlfb3AgKGVudW0gZ2NjX2ppdF91bmFyeV9vcCBvcCwKIAkJCSB0eXBlIHJlc3VsdF90eXBlLApA QCAtNTA5LDYgKzUxNCw3IEBAIG5hbWVzcGFjZSBnY2NqaXQKIAogICAgIHJ2YWx1ZSBnZXRfYWRk cmVzcyAobG9jYXRpb24gbG9jID0gbG9jYXRpb24gKCkpOwogICAgIGx2YWx1ZSBzZXRfaW5pdGlh bGl6ZXIgKGNvbnN0IHZvaWQgKmJsb2IsIHNpemVfdCBudW1fYnl0ZXMpOworICAgIGx2YWx1ZSBz ZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChydmFsdWUgaW5pdF92YWx1ZSk7CiAgIH07CiAKICAgY2xh c3MgcGFyYW0gOiBwdWJsaWMgbHZhbHVlCkBAIC0xODkxLDYgKzE4OTcsNDQgQEAgbHZhbHVlOjpz ZXRfaW5pdGlhbGl6ZXIgKGNvbnN0IHZvaWQgKmJsb2IsIHNpemVfdCBudW1fYnl0ZXMpCiAgIHJl dHVybiAqdGhpczsKIH0KIAoraW5saW5lIGx2YWx1ZQorbHZhbHVlOjpzZXRfaW5pdGlhbGl6ZXJf cnZhbHVlIChydmFsdWUgaW5pdF92YWx1ZSkKK3sKKyAgcmV0dXJuIGx2YWx1ZSAoZ2NjX2ppdF9n bG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoCisJCSAgIGdldF9pbm5lcl9sdmFsdWUgKCks CisJCSAgIGluaXRfdmFsdWUuZ2V0X2lubmVyX3J2YWx1ZSgpKSk7Cit9CisKK2lubGluZSBydmFs dWUKK2NvbnRleHQ6Om5ld19jb25zdHJ1Y3RvciAodHlwZSB0eXBlXywKKwkJCSAgc3RkOjp2ZWN0 b3I8ZmllbGQ+ICZmaWVsZHMsCisJCQkgIHN0ZDo6dmVjdG9yPHJ2YWx1ZT4gJnZhbHVlcywKKwkJ CSAgbG9jYXRpb24gbG9jKQoreworICBmaWVsZCAqcGZpZWxkcyA9IG51bGxwdHI7CisgIGlmIChm aWVsZHMuc2l6ZSgpKQorICAgIHBmaWVsZHMgPSAmZmllbGRzWzBdOworCisgIGdjY19qaXRfZmll bGQgKipmaWVsZHNfYXJyID0KKyAgICByZWludGVycHJldF9jYXN0PGdjY19qaXRfZmllbGQgKio+ IChwZmllbGRzKTsKKworICBydmFsdWUgKnB2YWx1ZXMgPSBudWxscHRyOworICBpZiAodmFsdWVz LnNpemUoKSkKKyAgICBwdmFsdWVzID0gJnZhbHVlc1swXTsKKworICBnY2Nfaml0X3J2YWx1ZSAq KnZhbHVlc19hcnIgPQorICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Z2NjX2ppdF9ydmFsdWUgKio+IChw dmFsdWVzKTsKKworICByZXR1cm4gcnZhbHVlICgKKwkgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Nv bnN0cnVjdG9yIChtX2lubmVyX2N0eHQsCisJCQkJCSAgICBsb2MuZ2V0X2lubmVyX2xvY2F0aW9u ICgpLAorCQkJCQkgICAgdHlwZV8uZ2V0X2lubmVyX3R5cGUoKSwKKwkJCQkJICAgIChpbnQpdmFs dWVzLnNpemUoKSwKKwkJCQkJICAgIGZpZWxkc19hcnIsCisJCQkJCSAgICB2YWx1ZXNfYXJyKSk7 Cit9CisKKwogLy8gY2xhc3MgcGFyYW0gOiBwdWJsaWMgbHZhbHVlCiBpbmxpbmUgcGFyYW06OnBh cmFtICgpIDogbHZhbHVlICgpIHt9CiBpbmxpbmUgcGFyYW06OnBhcmFtIChnY2Nfaml0X3BhcmFt ICppbm5lcikKZGlmZiAtLWdpdCBhL2djYy9qaXQvbGliZ2Njaml0LmMgYi9nY2Mvaml0L2xpYmdj Y2ppdC5jCmluZGV4IDk3YzVhYmE2NDNlLi41NmYzMTBmMzk4ZiAxMDA2NDQKLS0tIGEvZ2NjL2pp dC9saWJnY2NqaXQuYworKysgYi9nY2Mvaml0L2xpYmdjY2ppdC5jCkBAIC0zMzUsNyArMzM1LDcg QEAgaml0X2Vycm9yIChnY2M6OmppdDo6cmVjb3JkaW5nOjpjb250ZXh0ICpjdHh0LAogCiAgICBU aGlzIGlzIGltcGxlbWVudGVkIGJ5IGNhbGxpbmcgdGhlCiAgICBnY2M6OmppdDo6cmVjb3JkaW5n Ojp0eXBlOjphY2NlcHRzX3dyaXRlc19mcm9tIHZpcnR1YWwgZnVuY3Rpb24gb24KLSAgIExUWVBF LiAgKi8KKyAgIExUWVBFLiBGb3IgY29uc3QgdHlwZXMgYWNjZXB0c193cml0ZXNfZnJvbSBhbHdh eXMgcmV0dXJucyBmYWxzZS4gKi8KIAogc3RhdGljIGJvb2wKIGNvbXBhdGlibGVfdHlwZXMgKGdj Yzo6aml0OjpyZWNvcmRpbmc6OnR5cGUgKmx0eXBlLApAQCAtMTEzMCw2ICsxMTMwLDIxNSBAQCBn Y2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAogICByZXR1 cm4gKGdjY19qaXRfbHZhbHVlICopY3R4dC0+bmV3X2dsb2JhbCAobG9jLCBraW5kLCB0eXBlLCBu YW1lKTsKIH0KIAorLyogUHVibGljIGVudHJ5cG9pbnQuICBTZWUgZGVzY3JpcHRpb24gaW4gbGli Z2Njaml0LmguCisKKyAgIEJ1aWxkcyBhIGN0b3IgZm9yIGFycmF5cywgdW5pb25zIGFuZCBzdHJ1 Y3RzLgorCisgICBUaGUgd2F5IG1hbnkgZW50cnlwb2ludHMgY29tcGFyZSB0eXBlcyBmb3Igc2Ft ZW5lc3MgaXMgYWJpdAorICAgYnJva2VuLCBzaW5jZSB0aGV5IG9ubHkgc3RyaXAgb25lIHF1YWxp ZmllciwgbWFraW5nIGVnLgorICAgJ2NvbnN0IHZvbGF0aWxlIGludCcgYW5kICd2b2xhdGlsZSBj b25zdCBpbnQnIGluY29tcGF0aWJsZSwKKyAgIG9yICdjb25zdCB2b2xhdGlsZSBpbnQnIGFuZCAn aW50JyBpbmNvbXBhdGlibGUuIE9yCisgICAnY29uc3Qgdm9sYXRpbGUgaW50JyBpbmNvbXBhdGli bGUgd2l0aCBpdCBzZWxmIGlmIHRoZSB0eXBlcworICAgd2VyZSBidWlsdCBmcm9tIHR3byBkaWZm ZXJlbnQgZnVuY3Rpb24gY2FsbHMuCisKKyAgIEhvd2V2ZXIsIGZvciB0aGUgY29uc3RydWN0b3Ig d2UgbmVlZCB0byBzdHJpcCBldmVyeXRoaW5nLiAqLworCitleHRlcm4gZ2NjX2ppdF9ydmFsdWUg KgorZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1Y3RvciAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0 LAorCQkJCSBnY2Nfaml0X2xvY2F0aW9uICpsb2MsCisJCQkJIGdjY19qaXRfdHlwZSAqdHlwZSwK KwkJCQkgaW50IGFycl9sZW5ndGgsCisJCQkJIGdjY19qaXRfZmllbGQgKipmaWVsZHMsCisJCQkJ IGdjY19qaXRfcnZhbHVlICoqdmFsdWVzKQoreworICBSRVRVUk5fTlVMTF9JRl9GQUlMIChjdHh0 LCBOVUxMLCBsb2MsICJOVUxMIGNvbnRleHQiKTsKKyAgSklUX0xPR19GVU5DIChjdHh0LT5nZXRf bG9nZ2VyICgpKTsKKyAgUkVUVVJOX05VTExfSUZfRkFJTCAodHlwZSwgY3R4dCwgbG9jLCAiTlVM TCB0eXBlIik7CisKKyAgYm9vbCBpc191bmlvbiA9IHR5cGUtPmlzX3VuaW9uICgpOworICBib29s IGlzX3N0cnVjdCA9IHR5cGUtPmlzX3N0cnVjdCAoKTsKKyAgYm9vbCBpc19hcnJheSA9IHR5cGUt PmlzX2FycmF5ICgpICE9IE5VTEw7IC8qIGlzX2FycmF5KCkgcmV0dXJucyBwdHIgKi8KKworICBS RVRVUk5fTlVMTF9JRl9GQUlMIChpc191bmlvbiB8fCBpc19zdHJ1Y3QgfHwgaXNfYXJyYXksCisJ CSAgICAgICBjdHh0LCBsb2MsCisJCSAgICAgICAiY29uc3RydWN0b3IgdHlwZSBub3QgYW4gdW5p b24sIGFycmF5IG9yIHN0cnVjdCIpOworCisgIGlmIChpc19hcnJheSkKKyAgICBmaWVsZHMgPSBO VUxMOyAvKiBmaWVsZHMgYXJlIGlnbm9yZWQgZm9yIGFycmF5IGNvbnN0cnVjdG9ycyAqLworICBp ZiAoIWFycl9sZW5ndGgpCisgICAgeworICAgICAgLyogSWdub3JlIGZpZWxkcyBhbmQgdmFsdWVz IGlmIGFycl9sZW5ndGggaXMgemVybyAqLworICAgICAgZmllbGRzID0gTlVMTDsKKyAgICAgIHZh bHVlcyA9IE5VTEw7CisgICAgfQorCisgIGlmIChpc191bmlvbikKKyAgICBSRVRVUk5fTlVMTF9J Rl9GQUlMIChhcnJfbGVuZ3RoID09IDEsIGN0eHQsIGxvYywKKwkJCSAidW5pb24gY29uc3RydWN0 b3IgJ2Fycl9sZW5ndGgnIG5vdCAxIik7CisKKyAgaWYgKGFycl9sZW5ndGgpCisgICAgeworICAg ICAgaWYgKGlzX3N0cnVjdCB8fCBpc191bmlvbikKKwlSRVRVUk5fTlVMTF9JRl9GQUlMICgKKwkg IGZpZWxkcyAmJiB2YWx1ZXMsCisJICBjdHh0LCBsb2MsCisJICAiJ2ZpZWxkcycgYW5kL29yICd2 YWx1ZXMnIE5VTEwgd2l0aCBub24temVybyAnYXJyX2xlbmd0aCciKTsKKyAgICAgIGVsc2UgaWYg KGlzX2FycmF5KQorCXsKKwkgIFJFVFVSTl9OVUxMX0lGX0ZBSUwgKAorCSAgICB2YWx1ZXMsCisJ ICAgIGN0eHQsIGxvYywKKwkgICAgIid2YWx1ZXMnIE5VTEwgd2l0aCBub24temVybyAnYXJyX2xl bmd0aCciKTsKKworCSAgZ2NjOjpqaXQ6OnJlY29yZGluZzo6YXJyYXlfdHlwZSAqYXJyX3R5cGUg PQorCSAgICByZWludGVycHJldF9jYXN0PGdjYzo6aml0OjpyZWNvcmRpbmc6OmFycmF5X3R5cGUq Pih0eXBlKTsKKwkgIGludCBuX2VsID0gYXJyX3R5cGUtPm51bV9lbGVtZW50cyAoKTsKKworCSAg UkVUVVJOX05VTExfSUZfRkFJTCAoCisJICAgIG5fZWwgPj0gYXJyX2xlbmd0aCwKKwkgICAgY3R4 dCwgbG9jLAorCSAgICAiYXJyYXkgY29uc3RydWN0b3IgaGFzIG1vcmUgdmFsdWVzIHRoYW4gdGhl IGFycmF5IHR5cGUncyBsZW5ndGgiKTsKKwl9CisgICAgfQorCisgIGlmIChmaWVsZHMgJiYgdmFs dWVzKSAvKiBVbmlvbiBvciBzdHJ1Y3QgKi8KKyAgICB7CisgICAgICBmb3IgKGludCBpID0gMDsg aSA8IGFycl9sZW5ndGg7IGkrKykKKwl7CisJICBSRVRVUk5fTlVMTF9JRl9GQUlMX1BSSU5URjEg KAorCSAgICBmaWVsZHNbaV0sCisJICAgIGN0eHQsIGxvYywKKwkgICAgIk5VTEwgZmllbGQgaW4g J2ZpZWxkcycsIGF0IGluZGV4ICVkIiwgaSk7CisKKwkgIGlmICh2YWx1ZXNbaV0pCisJICAgIHsK KwkgICAgICBSRVRVUk5fTlVMTF9JRl9GQUlMX1BSSU5URjEgKAorCQkhdmFsdWVzW2ldLT5nZXRf dHlwZSAoKS0+aXNfdm9pZCAoKSwKKwkJY3R4dCwgbG9jLAorCQkiY2FuJ3QgY29uc3RydWN0IHRo ZSB2b2lkIHR5cGUsIGF0IGluZGV4ICVkIiwgaSk7CisJICAgICAgUkVUVVJOX05VTExfSUZfRkFJ TF9QUklOVEYzICgKKwkJZ2NjOjpqaXQ6OnR5cGVzX2tpbmRhX3NhbWUgKHZhbHVlc1tpXS0+Z2V0 X3R5cGUgKCksCisJCQkJCSAgICBmaWVsZHNbaV0tPmdldF90eXBlICgpKSwKKwkJY3R4dCwgbG9j LAorCQkidmFsdWUgYW5kIGZpZWxkIG5vdCB0aGUgc2FtZSB1bnF1YWxpZmllZCB0eXBlLCBhdCBp bmRleCAlZCIKKwkJIiAoZmllbGQgdHlwZTogJXMpKHZhbHVlIHR5cGU6ICVzKSIsCisJCWksCisJ CWZpZWxkc1tpXS0+Z2V0X3R5cGUgKCktPmdldF9kZWJ1Z19zdHJpbmcgKCksCisJCXZhbHVlc1tp XS0+Z2V0X3R5cGUgKCktPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworCSAgICB9CisJfQorICAgIH0K KyAgZWxzZSBpZiAodmFsdWVzKSAvKiBBcnJheSAqLworICAgIHsKKyAgICAgIC8qIEZvciBhcnJh eXMsIGFsbCB2YWx1ZXMgbmVlZCB0byBiZSB0aGUgc2FtZSB0eXBlICovCisgICAgICBnY2M6Ompp dDo6cmVjb3JkaW5nOjp0eXBlICp0eXBlMCA9IE5VTEw7CisgICAgICBpbnQgaSA9IDA7CisgICAg ICAvKiBGaW5kIGZpcnN0IG5vbi1udWxsIHZhbHVlICovCisgICAgICBmb3IgKDtpIDwgYXJyX2xl bmd0aDsgaSsrKQorCXsKKwkgIGlmICh2YWx1ZXNbaV0pCisJICAgIGJyZWFrOworCX0KKworICAg ICAgaWYgKGkgPCBhcnJfbGVuZ3RoKSAvKiBBbGwgdmFsdWVzIG1pZ2h0IGJlIG51bGwgKi8KKyAg ICAgICB0eXBlMCA9IHZhbHVlc1tpXS0+Z2V0X3R5cGUgKCk7CisKKyAgICAgIC8qIElmIHdlIGdv dCBhIHR5cGUwLCBjaGVjayB0aGF0IGFsbCBvdGhlciB2YWx1ZXMgaGF2ZQorCSB0aGUgc2FtZSB0 eXBlICovCisgICAgICBmb3IgKDsgaSA8IGFycl9sZW5ndGg7IGkrKykKKwl7CisJICBpZiAodmFs dWVzW2ldKQorCSAgICBSRVRVUk5fTlVMTF9JRl9GQUlMX1BSSU5URjMgKAorCSAgICAgIGdjYzo6 aml0Ojp0eXBlc19raW5kYV9zYW1lICh0eXBlMCwKKwkJCQkJICB2YWx1ZXNbaV0tPmdldF90eXBl ICgpKSwKKwkgICAgICBjdHh0LCBsb2MsCisJICAgICAgInZhbHVlIHR5cGUgYXQgaW5kZXggJWQg ZGlmZmVyIGZyb20gZmlyc3QgdmFsdWUgdHlwZSIKKwkgICAgICAiIChmaXJzdCB0eXBlOiAlcyko ZGlmZmVyZW50IHR5cGU6ICVzKSIsCisJICAgICAgaSwKKwkgICAgICB0eXBlMC0+Z2V0X2RlYnVn X3N0cmluZyAoKSwKKwkgICAgICB2YWx1ZXNbaV0tPmdldF90eXBlICgpLT5nZXRfZGVidWdfc3Ry aW5nICgpKTsKKwl9CisKKyAgICAgIC8qIENvbXBhcmUgdHlwZTAgd2l0aCB0aGUgZWxlbWVudCB0 eXBlIHNwZWNpZmllZCBpbiB0aGUKKwkgdHlwZSBvZiB0aGUgYXJyYXkuICovCisgICAgICBpZiAo dHlwZTApCisJeworCSAgZ2NjOjpqaXQ6OnJlY29yZGluZzo6dHlwZSAqZWxfdHlwZSA9CisJICAg IHR5cGUtPmlzX2FycmF5ICgpOworCisJICBSRVRVUk5fTlVMTF9JRl9GQUlMX1BSSU5URjIgKAor CSAgICBnY2M6OmppdDo6dHlwZXNfa2luZGFfc2FtZSAodHlwZTAsIGVsX3R5cGUpLAorCSAgICBj dHh0LCBsb2MsCisJICAgICJhcnJheSBlbGVtZW50IHZhbHVlIHR5cGVzIGRpZmZlciBmcm9tIHR5 cGVzIGluICd2YWx1ZXMnIgorCSAgICAiIChlbGVtZW50IHR5cGU6ICVzKSgndmFsdWVzJyB0eXBl OiAlcykiLAorCSAgICBlbF90eXBlLT5nZXRfZGVidWdfc3RyaW5nICgpLAorCSAgICB0eXBlMC0+ Z2V0X2RlYnVnX3N0cmluZyAoKSk7CisJfQorICAgIH0KKworICByZXR1cm4gKGdjY19qaXRfcnZh bHVlICopY3R4dC0+bmV3X2N0b3IgKAorICAgIGxvYywKKyAgICB0eXBlLAorICAgIGFycl9sZW5n dGgsCisgICAgcmVpbnRlcnByZXRfY2FzdDxnY2M6OmppdDo6cmVjb3JkaW5nOjpmaWVsZCoqPihm aWVsZHMpLAorICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Z2NjOjpqaXQ6OnJlY29yZGluZzo6cnZhbHVl Kio+KHZhbHVlcykpOworfQorCisvKiBQdWJsaWMgZW50cnlwb2ludC4gIFNlZSBkZXNjcmlwdGlv biBpbiBsaWJnY2NqaXQuaC4gKi8KKworZXh0ZXJuIGdjY19qaXRfbHZhbHVlICoKK2djY19qaXRf Z2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGdjY19qaXRfbHZhbHVlICpnbG9iYWwsCisJ CQkJICAgICAgIGdjY19qaXRfcnZhbHVlICppbml0X3J2YWx1ZSkKK3sKKyAgUkVUVVJOX05VTExf SUZfRkFJTCAoZ2xvYmFsLCBOVUxMLCBOVUxMLCJOVUxMIGdsb2JhbCIpOworICAKKyAgZ2NjOjpq aXQ6OnJlY29yZGluZzo6Y29udGV4dCAqY3R4dCA9IGdsb2JhbC0+Z2V0X2NvbnRleHQgKCk7Cisg IFJFVFVSTl9OVUxMX0lGX0ZBSUwgKGN0eHQsIE5VTEwsIE5VTEwsIk5VTEwgY29udGV4dCIpOwor ICBKSVRfTE9HX0ZVTkMgKGN0eHQtPmdldF9sb2dnZXIgKCkpOworICBSRVRVUk5fTlVMTF9JRl9G QUlMIChpbml0X3J2YWx1ZSwgY3R4dCwgTlVMTCwiTlVMTCBpbml0X3J2YWx1ZSIpOworCisgIFJF VFVSTl9OVUxMX0lGX0ZBSUxfUFJJTlRGMSAoZ2xvYmFsLT5pc19nbG9iYWwgKCksCisJCQkgICAg ICAgY3R4dCwgTlVMTCwKKwkJCSAgICAgICAibHZhbHVlIFwiJXNcIiBub3QgYSBnbG9iYWwiLAor CQkJICAgICAgIGdsb2JhbC0+Z2V0X2RlYnVnX3N0cmluZyAoKSk7CisKKyAgZ2NjOjpqaXQ6OnJl Y29yZGluZzo6Z2xvYmFsICpnYmwgPQorICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Z2NjOjpqaXQ6OnJl Y29yZGluZzo6Z2xvYmFsICo+IChnbG9iYWwpOworICAKKyAgUkVUVVJOX05VTExfSUZfRkFJTF9Q UklOVEYxIChnYmwtPmdldF9raW5kICgpICE9CisJCQkgICAgICAgR0NDX0pJVF9HTE9CQUxfSU1Q T1JURUQsCisJCQkgICAgICAgY3R4dCwgTlVMTCwKKwkJCSAgICAgICAiY2FuJ3QgaW5pdGlhbGl6 ZSBcIiVzXCIsIGl0IGlzIGltcG9ydGVkIiwKKwkJCSAgICAgICBnbG9iYWwtPmdldF9kZWJ1Z19z dHJpbmcgKCkpOworCisgIFJFVFVSTl9OVUxMX0lGX0ZBSUxfUFJJTlRGNCAoZ2NjOjpqaXQ6OnR5 cGVzX2tpbmRhX3NhbWUgKAorCQkJCSBnbG9iYWwtPmdldF90eXBlICgpLAorCQkJCSBpbml0X3J2 YWx1ZS0+Z2V0X3R5cGUoKSksCisJCQkgICAgICAgY3R4dCwgTlVMTCwKKwkJCSAgICAgICAibWlz bWF0Y2hpbmcgdHlwZXM6IgorCQkJICAgICAgICIgaW5pdGlhbGl6aW5nICVzICh0eXBlOiAlcykg d2l0aCAlcyAodHlwZTogJXMpIiwKKwkJCSAgICAgICBnbG9iYWwtPmdldF9kZWJ1Z19zdHJpbmcg KCksCisJCQkgICAgICAgZ2xvYmFsLT5nZXRfdHlwZSAoKS0+Z2V0X2RlYnVnX3N0cmluZyAoKSwK KwkJCSAgICAgICBpbml0X3J2YWx1ZS0+Z2V0X2RlYnVnX3N0cmluZyAoKSwKKwkJCSAgICAgICBp bml0X3J2YWx1ZS0+Z2V0X3R5cGUgKCktPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworCisgIC8qIENo ZWNrIHRoYXQgdGhlcmUgYXJlIG5vIGluaXRpYWxpemVycyBzZXQgZm9yIHRoZSBnbG9iYWwgeWV0 ICovCisgIFJFVFVSTl9OVUxMX0lGX0ZBSUxfUFJJTlRGMSAoIWdibC0+dGVzdF9mbGFnc19hbnlv ZiAoCisJCQkJICBnY2M6OmppdDo6R0xPQkFMX1ZBUl9GTEFHU19XSUxMX0JFX1JWQUxfSU5JVCB8 CisJCQkJICBnY2M6OmppdDo6R0xPQkFMX1ZBUl9GTEFHU19XSUxMX0JFX0JMT0JfSU5JVCksCisJ CQkgICAgICAgY3R4dCwgTlVMTCwKKwkJCSAgICAgICAiZ2xvYmFsIHZhcmlhYmxlIGFsbHJlYWR5 IGluaXRpYWxpemVkOiAlcyIsCisJCQkgICAgICAgZ2xvYmFsLT5nZXRfZGVidWdfc3RyaW5nICgp KTsKKworICAvKiBUaGUgZ2xvYmFsIG5lZWQgdG8ga25vdyBkdXJpbmcgcGxheWJhY2sgdGhhdCBp dCB3aWxsIGJlCisgICAgIGluaXRpYWxpemVkLiAqLworICBnYmwtPnNldF9mbGFncyAoZ2NjOjpq aXQ6OkdMT0JBTF9WQVJfRkxBR1NfV0lMTF9CRV9SVkFMX0lOSVQpOworCisgIGN0eHQtPm5ld19n bG9iYWxfaW5pdF9ydmFsdWUgKGdsb2JhbCwgaW5pdF9ydmFsdWUpOworCisgIHJldHVybiBnbG9i YWw7Cit9CisKIC8qIFB1YmxpYyBlbnRyeXBvaW50LiAgU2VlIGRlc2NyaXB0aW9uIGluIGxpYmdj Y2ppdC5oLgogCiAgICBBZnRlciBlcnJvci1jaGVja2luZywgdGhlIHJlYWwgd29yayBpcyBkb25l IGJ5IHRoZQpAQCAtMTE2Myw4ICsxMzcyLDIyIEBAIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFs aXplciAoZ2NjX2ppdF9sdmFsdWUgKmdsb2JhbCwKICAgICAiIGdsb2JhbCBcIiVzXCIgaGFzIHNp emUgJXp1IHdoZXJlYXMgaW5pdGlhbGl6ZXIgaGFzIHNpemUgJXp1IiwKICAgICBnbG9iYWwtPmdl dF9kZWJ1Z19zdHJpbmcgKCksIGx2YWx1ZV9zaXplLCBudW1fYnl0ZXMpOwogCi0gIHJlaW50ZXJw cmV0X2Nhc3QgPGdjYzo6aml0OjpyZWNvcmRpbmc6Omdsb2JhbCAqPiAoZ2xvYmFsKQotICAgIC0+ c2V0X2luaXRpYWxpemVyIChibG9iLCBudW1fYnl0ZXMpOworICAvKiBDaGVjayB0aGF0IHRoZSBy dmFsdWUgaW5pdGlhbGl6ZXIgaXMgbm90IHNldCBmb3IgdGhpcyBnbG9iYWwuCisgICAgIE5vdGUg dGhhdCB3ZSBkbyBub3QgY2hlY2sgaWYgdGhpcyBibG9iIHR5cGUgaW5pdGlhbGl6ZXIgaXMKKyAg ICAgYWxscmVhZHkgc2V0LCBzaW5jZSB0aGF0IGNoZWNrIHdhcyBub3QgcHJlc2VudCB3aGVuIHRo ZSBlbnRyeXBvaW50CisgICAgIHdhcyBpbml0aWFsbHkgd3JpdHRlbi4gKi8KKyAgZ2NjOjpqaXQ6 OnJlY29yZGluZzo6Z2xvYmFsICpnYmwgPQorICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Z2NjOjpqaXQ6 OnJlY29yZGluZzo6Z2xvYmFsICo+IChnbG9iYWwpOworICBSRVRVUk5fTlVMTF9JRl9GQUlMX1BS SU5URjEgKCFnYmwtPnRlc3RfZmxhZ3NfYW55b2YgKAorCQkJCSAgZ2NjOjpqaXQ6OkdMT0JBTF9W QVJfRkxBR1NfV0lMTF9CRV9SVkFMX0lOSVQpLAorCQkJICAgICAgIE5VTEwsIE5VTEwsCisJCQkg ICAgICAgImdsb2JhbCB2YXJpYWJsZSBhbGxyZWFkeSBpbml0aWFsaXplZDogJXMiLAorCQkJICAg ICAgIGdsb2JhbC0+Z2V0X2RlYnVnX3N0cmluZyAoKSk7CisKKyAgZ2JsLT5zZXRfaW5pdGlhbGl6 ZXIgKGJsb2IsIG51bV9ieXRlcyk7CisgIC8qIFRoZSBnbG9iYWwgbmVlZCB0byBrbm93IGR1cmlu ZyBwbGF5YmFjayB0aGF0IGl0IHdpbGwgYmUKKyAgICAgaW5pdGlhbGl6ZWQuICovICAKKyAgZ2Js LT5zZXRfZmxhZ3MgKGdjYzo6aml0OjpHTE9CQUxfVkFSX0ZMQUdTX1dJTExfQkVfQkxPQl9JTklU KTsKIAogICByZXR1cm4gZ2xvYmFsOwogfQpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9saWJnY2NqaXQu aCBiL2djYy9qaXQvbGliZ2Njaml0LmgKaW5kZXggYzUxMGM1Y2M5MDIuLjJmY2UzOTlkNmZmIDEw MDY0NAotLS0gYS9nY2Mvaml0L2xpYmdjY2ppdC5oCisrKyBiL2djYy9qaXQvbGliZ2Njaml0LmgK QEAgLTc5NSw2ICs3OTUsODMgQEAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKGdjY19qaXRf Y29udGV4dCAqY3R4dCwKIAkJCSAgICBnY2Nfaml0X3R5cGUgKnR5cGUsCiAJCQkgICAgY29uc3Qg Y2hhciAqbmFtZSk7CiAKKyNkZWZpbmUgTElCR0NDSklUX0hBVkVfQ1RPUlMKKworLyogQ3JlYXRl IGEgY29uc3RydWN0b3IgZm9yIGFuIGFycmF5LCB1bmlvbiBvciBzdHJ1Y3QgYXMgYSBydmFsdWUu CisKKyAgIFJldHVybnMgTlVMTCBvbiBlcnJvci4gVGhlIHR3byBwYXJhbWV0ZXIgYXJyYXlzIGFy ZSBjb3BpZWQgYW5kCisgICBkbyBub3QgaGF2ZSB0byBvdXRsaXZlIHRoZSBjb250ZXh0LgorCisg ICAndHlwZScgc3BlY2lmaWVzIHdoYXQgdGhlIGNvbnN0cnVjdG9yIHdpbGwgYnVpbGQuCisKKyAg IEZvciBhIHN0cnVjdCBvciB1bmlvbiAndHlwZScsIGVhY2ggZmllbGQgaW4gJ2ZpZWxkcycgc3Bl Y2lmaWVzCisgICB3aGljaCBmaWVsZCBpbiB0aGUgc3RydWN0IG9yIHVuaW9uIHR5cGUgdG8gc2V0 IHRvIHRoZSBjb3JyZXNwb25kaW5nCisgICB2YWx1ZSBpbiAndmFsdWVzJy4gJ2ZpZWxkcycgYW5k ICd2YWx1ZXMnIGFyZSBwYWlyZWQgYnkgaW5kZXgKKyAgIGFuZCB0aGUgcGFpciBuZWVkIHRvIGhh dmUgdGhlIHNhbWUgdW5xdWFsaWZpZWQgdHlwZS4KKworICAgRm9yIGFuIGFycmF5ICd0eXBlJywg dGhlICdmaWVsZHMnIHBhcmFtZXRlciBpcyBpZ25vcmVkLgorICAgCisgICAnYXJyX2xlbmd0aCcg c3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gJ3ZhbHVlcycuCisgICBGb3Igc3Ry dWN0IGFuZCB1bmlvbnMsICdmaWVsZHMnIG5lZWQgdG8gaGF2ZSB0aGUgc2FtZSBsZW5ndGggYXMK KyAgICd2YWx1ZXMnLgorCisgICBGb3IgdW5pb25zLCAnYXJyX2xlbmd0aCcgbmVlZCB0byBiZSAx LgorCisgICBGb3Igbm9uLXVuaW9ucywgaWYgJ2Fycl9sZW5ndGgnIGlzIDAsIHRoZSBhcnJheSBw YXJhbWV0ZXJzIHdpbGwgYmUKKyAgIGlnbm9yZWQgYW5kIHplcm8gaW5pdGlhbGl6YXRpb24gd2ls bCBiZSB1c2VkLgorIAorICAgRm9yIGFuIGFycmF5ICd0eXBlJywgaWYgdGhlIGFycmF5IHR5cGUg aXRzZWxmIGhhcyBtb3JlIGVsZW1lbnRzIHRoYW4KKyAgICd2YWx1ZXMnLCB0aGUgbGVmdC1vdmVy IGVsZW1lbnRzIHdpbGwgYmUgemVyb2VkLiBFYWNoIHZhbHVlIGluCisgICAndmFsdWVzJyBuZWVk IHRvIGJlIHRoZSBzYW1lIHVucXVhbGlmaWVkIHR5cGUgYXMgdGhlIGFycmF5IGVsZW1lbnRzLgor CisgICBGb3IgYSBzdHJ1Y3QgJ3R5cGUnLCB0aGUgZmllbGRzIGluICdmaWVsZHMnIGRvIG5vdCBo YXZlIHRvIGJlIGluCisgICBkZWZpbml0aW9uIG9yZGVyLCBidXQgYmVpbmcgaW4gb3JkZXIgYXZv aWRzIGEgc29ydCBvcGVyYXRpb24uIEFueQorICAgZmllbGQgaW4gdGhlIHN0cnVjdCB0aGF0IGlz IG5vdCBzcGVjaWZpZWQgaW4gJ2ZpZWxkcycgd2lsbCBiZSB6ZXJvZWQuCisgICAgICAKKyAgIEEg TlVMTCB2YWx1ZSBpbiAndmFsdWVzJyBpcyBhIHNob3J0aGFuZCBmb3IgemVybyBpbml0aWFsaXph dGlvbgorICAgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQgb3IgYXJyYXkgZWxlbWVudC4gCisK KyAgIFRoZSBjb25zdHJ1Y3RvciBydmFsdWUgY2FuIGJlIHVzZWQgZm9yIGFzc2lnbm1lbnQgdG8g bG9jYWxzLgorICAgSXQgY2FuIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZSBnbG9iYWwgdmFyaWFibGVz IHdpdGgKKyAgICdnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlJy4gSXQgY2Fu IGFsc28gYmUgdXNlZCBhcyBhCisgICB0ZW1wb3JhcnkgdmFsdWUgZm9yIGZ1bmN0aW9uIGNhbGxz IGFuZCByZXR1cm4gdmFsdWVzLgorCisgICBUaGUgY29uc3RydWN0b3IgY2FuIGNvbnRhaW4gbmVz dGVkIGNvbnN0cnVjdG9ycy4gTm90ZSB0aGF0IGEgc3RyaW5nCisgICBsaXRlcmFsIHJ2YWx1ZSBj YW4ndCBiZSB1c2VkIHRvIGNvbnN0cnVjdCBhIGNoYXIgYXJyYXkuIEl0IG5lZWQgb25lCisgICBy dmFsdWUgZm9yIGVhY2ggY2hhci4KKworICAgVGhpcyBlbnRyeXBvaW50IHdhcyBhZGRlZCBpbiBM SUJHQ0NKSVRfQUJJXzE2OyB5b3UgY2FuIHRlc3QgZm9yIGl0cworICAgcHJlc2Vuc2UgdXNpbmc6 CisgICAgICNpZmRlZiBMSUJHQ0NKSVRfSEFWRV9DVE9SUworCisqLworZXh0ZXJuIGdjY19qaXRf cnZhbHVlICoKK2djY19qaXRfY29udGV4dF9uZXdfY29uc3RydWN0b3IgKGdjY19qaXRfY29udGV4 dCAqY3R4dCwKKwkJCQkgZ2NjX2ppdF9sb2NhdGlvbiAqbG9jLAorCQkJCSBnY2Nfaml0X3R5cGUg KnR5cGUsCisJCQkJIGludCBhcnJfbGVuZ3RoLAorCQkJCSBnY2Nfaml0X2ZpZWxkICoqZmllbGRz LAorCQkJCSBnY2Nfaml0X3J2YWx1ZSAqKnZhbHVlcyk7CisKKy8qIFNldCB0aGUgaW5pdGlhbCB2 YWx1ZSBvZiBhIGdsb2JhbCB3aXRoIGFuIHJ2YWx1ZS4KKworICAgVGhlIHJ2YWx1ZSBuZWVkIHRv IGJlIGEgY29uc3RhbnQgZXhwcmVzc2lvbiwgaS5lLiBubyBmdW5jdGlvbiBjYWxscy4KKworICAg VGhlIGdsb2JhbCBjYW4ndCBoYXZlIHRoZSAna2luZCcgR0NDX0pJVF9HTE9CQUxfSU1QT1JURUQu CisgICAKKyAgIFVzZSB0b2dldGhlciB3aXRoIGdjY19qaXRfY29udGV4dF9uZXdfY29uc3RydWN0 b3IoKSB0bworICAgaW5pdGlhbGl6ZSBzdHJ1Y3RzLCB1bmlvbnMgYW5kIGFycmF5cy4KKworICAg T24gc3VjY2VzcywgcmV0dXJucyB0aGUgJ2dsb2JhbCcgcGFyYW1ldGVyLiBPdGhlcndpc2UsIE5V TEwuCisKKyAgIFRoaXMgZW50cnlwb2ludCB3YXMgYWRkZWQgaW4gTElCR0NDSklUX0FCSV8xNjsg eW91IGNhbiB0ZXN0IGZvciBpdHMKKyAgIHByZXNlbmNlIHVzaW5nOgorICAgICAjaWZkZWYgTElC R0NDSklUX0hBVkVfQ1RPUlMKKyovCitleHRlcm4gZ2NjX2ppdF9sdmFsdWUgKgorZ2NjX2ppdF9n bG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZ2NjX2ppdF9sdmFsdWUgKmdsb2JhbCwKKwkJ CQkgICAgICAgZ2NjX2ppdF9ydmFsdWUgKmluaXRfdmFsdWUpOworCiAjZGVmaW5lIExJQkdDQ0pJ VF9IQVZFX2djY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcgogCiAvKiBTZXQgYW4gaW5pdGlh bCB2YWx1ZSBmb3IgYSBnbG9iYWwsIHdoaWNoIG11c3QgYmUgYW4gYXJyYXkgb2YKZGlmZiAtLWdp dCBhL2djYy9qaXQvbGliZ2Njaml0Lm1hcCBiL2djYy9qaXQvbGliZ2Njaml0Lm1hcAppbmRleCA0 MDIyZGJiNmZiYy4uYzVhMWFmZGVhY2YgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvbGliZ2Njaml0Lm1h cAorKysgYi9nY2Mvaml0L2xpYmdjY2ppdC5tYXAKQEAgLTIwOCw5ICsyMDgsMTEgQEAgTElCR0ND SklUX0FCSV8xNSB7CiAKIExJQkdDQ0pJVF9BQklfMTYgewogICBnbG9iYWw6CisgICAgZ2NjX2pp dF9jb250ZXh0X25ld19jb25zdHJ1Y3RvcjsKICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1 ZV9mcm9tX2NvbXBsZXhfZG91YmxlOwogICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zy b21fY29tcGxleF9sb25nX2RvdWJsZTsKLSAgICBnY2Nfaml0X2NvbnRleHRfc2V0X2Jvb2xfZW5h YmxlX2NvbXBsZXhfdHlwZXM7CiAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9s b25nX2RvdWJsZTsKICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2xvbmdfbG9u ZzsKKyAgICBnY2Nfaml0X2NvbnRleHRfc2V0X2Jvb2xfZW5hYmxlX2NvbXBsZXhfdHlwZXM7Cisg ICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZTsKIH0gTElCR0NDSklUX0FC SV8xNTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1 aXRlL2ppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaCBiL2djYy90ZXN0c3VpdGUvaml0LmRn L2FsbC1ub24tZmFpbGluZy10ZXN0cy5oCmluZGV4IDg0MTZiMzEyYmFkLi4yNmY0NWZlMDgxMSAx MDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvYWxsLW5vbi1mYWlsaW5nLXRlc3RzLmgK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvYWxsLW5vbi1mYWlsaW5nLXRlc3RzLmgKQEAgLTIx MSw2ICsyMTEsMTMgQEAKICN1bmRlZiBjcmVhdGVfY29kZQogI3VuZGVmIHZlcmlmeV9jb2RlCiAK Ky8qIHRlc3QtZ2xvYmFsLWluaXQtcnZhbHVlLmMgKi8KKyNkZWZpbmUgY3JlYXRlX2NvZGUgY3Jl YXRlX2NvZGVfZ2xvYmFsX2luaXRfcnZhbHVlCisjZGVmaW5lIHZlcmlmeV9jb2RlIHZlcmlmeV9j b2RlX2dsb2JhbF9pbml0X3J2YWx1ZQorI2luY2x1ZGUgInRlc3QtZ2xvYmFsLWluaXQtcnZhbHVl LmMiCisjdW5kZWYgY3JlYXRlX2NvZGUKKyN1bmRlZiB2ZXJpZnlfY29kZQorCiAvKiB0ZXN0LWds b2JhbC1zZXQtaW5pdGlhbGl6ZXIuYyAqLwogI2RlZmluZSBjcmVhdGVfY29kZSBjcmVhdGVfY29k ZV9nbG9iYWxfc2V0X2luaXRpYWxpemVyCiAjZGVmaW5lIHZlcmlmeV9jb2RlIHZlcmlmeV9jb2Rl X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXIKQEAgLTIzMiw2ICsyMzksMTMgQEAKICN1bmRlZiBjcmVh dGVfY29kZQogI3VuZGVmIHZlcmlmeV9jb2RlCiAKKy8qIHRlc3QtbG9jYWwtaW5pdC1ydmFsdWUu YyAqLworI2RlZmluZSBjcmVhdGVfY29kZSBjcmVhdGVfY29kZV9sb2NhbF9pbml0X3J2YWx1ZQor I2RlZmluZSB2ZXJpZnlfY29kZSB2ZXJpZnlfY29kZV9sb2NhbF9pbml0X3J2YWx1ZQorI2luY2x1 ZGUgInRlc3QtbG9jYWwtaW5pdC1ydmFsdWUuYyIKKyN1bmRlZiBjcmVhdGVfY29kZQorI3VuZGVm IHZlcmlmeV9jb2RlCisKIC8qIHRlc3QtbG9uZy1uYW1lcy5jICovCiAjZGVmaW5lIGNyZWF0ZV9j b2RlIGNyZWF0ZV9jb2RlX2xvbmdfbmFtZXMKICNkZWZpbmUgdmVyaWZ5X2NvZGUgdmVyaWZ5X2Nv ZGVfbG9uZ19uYW1lcwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJv ci1jdG9yLXN0cnVjdC10b28tYmlnLmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9y LWN0b3Itc3RydWN0LXRvby1iaWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uNmYwYjk4MDYyODUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2ppdC5k Zy90ZXN0LWVycm9yLWN0b3Itc3RydWN0LXRvby1iaWcuYwpAQCAtMCwwICsxLDg2IEBACisvKgor CisgIFRlc3QgdGhhdCB0aGUgcHJvcGVyIGVycm9yIGlzIHRyaWdnZXJlZCB3aGVuIHdlIGJ1aWxk IGEgY3RvcgorICBmb3IgYW4gc3RydWN0IHR5cGUsIGJ1dCBoYXZlIHRvbyBtYW55IGZpZWxkcy4K KworKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNs dWRlICJsaWJnY2NqaXQuaCIKKyNpbmNsdWRlICJoYXJuZXNzLmgiCisKK3ZvaWQKK2NyZWF0ZV9j b2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgZ2NjX2pp dF90eXBlICppbnRfdHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBH Q0NfSklUX1RZUEVfSU5UKTsKKyAgCisgIGdjY19qaXRfZmllbGQgKmIxID0gZ2NjX2ppdF9jb250 ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAwLAorCQkJCQkJIGludF90eXBlLAorCQkJCQkJ ICJhIik7CisgIGdjY19qaXRfZmllbGQgKmIyID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAo Y3R4dCwKKwkJCQkJCSAwLAorCQkJCQkJIGludF90eXBlLAorCQkJCQkJICJiIik7CisgIGdjY19q aXRfZmllbGQgKmIzID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAw LAorCQkJCQkJIGludF90eXBlLAorCQkJCQkJICJjIik7CisgIGdjY19qaXRfZmllbGQgKmZpZWxk c19iW10gPSB7YjEsIGIyLCBiM307CisKKyAgZ2NjX2ppdF90eXBlICpzdHJ1Y3RfYmFyX3R5cGUg PQorICAgIGdjY19qaXRfc3RydWN0X2FzX3R5cGUgKAorICAgICAgZ2NjX2ppdF9jb250ZXh0X25l d19zdHJ1Y3RfdHlwZSAoY3R4dCwKKwkJCQkgICAgICAgMCwKKwkJCQkgICAgICAgImJhciIsCisJ CQkJICAgICAgIDMsCisJCQkJICAgICAgIGZpZWxkc19iKSk7CisgIAorICBnY2Nfaml0X2ZpZWxk ICpiMTEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJICAwLAorCQkJ CQkJICBpbnRfdHlwZSwKKwkJCQkJCSAgImEiKTsKKyAgZ2NjX2ppdF9maWVsZCAqYjIyID0gZ2Nj X2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAgMCwKKwkJCQkJCSAgaW50X3R5 cGUsCisJCQkJCQkgICJiIik7CisgIGdjY19qaXRfZmllbGQgKmIzMyA9IGdjY19qaXRfY29udGV4 dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgIDAsCisJCQkJCQkgIGludF90eXBlLAorCQkJCQkJ ICAiYyIpOworICBnY2Nfaml0X2ZpZWxkICpiNDQgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxk IChjdHh0LAorCQkJCQkJICAwLAorCQkJCQkJICBpbnRfdHlwZSwKKwkJCQkJCSAgImMiKTsKKwor ICBnY2Nfaml0X2ZpZWxkICpmaWVsZHNfY3RvcltdID0ge2IxMSwgYjIyLCBiMzMsIGI0NH07Cisg IGdjY19qaXRfcnZhbHVlICp2YWx1ZXNbXSA9IHswLDAsMCwwfTsKKworICBnY2Nfaml0X3J2YWx1 ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfY29uc3RydWN0b3IKKyAgICAoY3R4dCwgMCwK KyAgICAgc3RydWN0X2Jhcl90eXBlLAorICAgICA0LAorICAgICBmaWVsZHNfY3RvciwKKyAgICAg dmFsdWVzKTsKKworICBDSEVDS19WQUxVRSAoY3RvciwgTlVMTCk7Cit9CisKK3ZvaWQKK3Zlcmlm eV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIGdjY19qaXRfcmVzdWx0ICpyZXN1bHQpCit7 CisgIC8qIEVuc3VyZSB0aGF0IHRoZSBiYWQgQVBJIHVzYWdlIHByZXZlbnRzIHRoZSBBUEkgZ2l2 aW5nIGEgYm9ndXMKKyAgICAgcmVzdWx0IGJhY2suICAqLworICBDSEVDS19WQUxVRSAocmVzdWx0 LCBOVUxMKTsKKworICAvKiBWZXJpZnkgdGhhdCB0aGUgY29ycmVjdCBlcnJvciBtZXNzYWdlIHdh cyBlbWl0dGVkLiAqLworICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29udGV4dF9nZXRf Zmlyc3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAiZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1 Y3RvcjogbW9yZSBmaWVsZHMgaW4gIgorCQkgICAgICAiY29uc3RydWN0b3IgdGhhbiBpbiB0aGUg dGFyZ2V0IHN0cnVjdCIpOworICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29udGV4dF9n ZXRfbGFzdF9lcnJvciAoY3R4dCksCisJCSAgICAgICJnY2Nfaml0X2NvbnRleHRfbmV3X2NvbnN0 cnVjdG9yOiBtb3JlIGZpZWxkcyBpbiAiCisJCSAgICAgICJjb25zdHJ1Y3RvciB0aGFuIGluIHRo ZSB0YXJnZXQgc3RydWN0Iik7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90 ZXN0LWVycm9yLWN0b3Itc3RydWN0LXdyb25nLWZpZWxkLW5hbWUuYyBiL2djYy90ZXN0c3VpdGUv aml0LmRnL3Rlc3QtZXJyb3ItY3Rvci1zdHJ1Y3Qtd3JvbmctZmllbGQtbmFtZS5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mMjY5Y2NhZDQ4OAotLS0gL2Rldi9udWxs CisrKyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItY3Rvci1zdHJ1Y3Qtd3Jvbmct ZmllbGQtbmFtZS5jCkBAIC0wLDAgKzEsODEgQEAKKy8qCisKKyAgVGVzdCB0aGF0IHRoZSBwcm9w ZXIgZXJyb3IgaXMgdHJpZ2dlcmVkIHdoZW4gd2UgYnVpbGQgYSBjdG9yCisgIGZvciBhbiBzdHJ1 Y3QgdHlwZSwgYnV0IGhhcyB0aGUgbmFtZSB3cm9uZyBvbiBhIGZpZWxkLgorCisqLworCisjaW5j bHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImxpYmdjY2pp dC5oIgorI2luY2x1ZGUgImhhcm5lc3MuaCIKKwordm9pZAorY3JlYXRlX2NvZGUgKGdjY19qaXRf Y29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9kYXRhKQoreworICBnY2Nfaml0X3R5cGUgKmludF90 eXBlID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LAorICAgIEdDQ19KSVRfVFlQRV9J TlQpOworICAKKyAgZ2NjX2ppdF9maWVsZCAqYjEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxk IChjdHh0LAorCQkJCQkJIDAsCisJCQkJCQkgaW50X3R5cGUsCisJCQkJCQkgImEiKTsKKyAgZ2Nj X2ppdF9maWVsZCAqYjIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJ IDAsCisJCQkJCQkgaW50X3R5cGUsCisJCQkJCQkgImIiKTsKKyAgZ2NjX2ppdF9maWVsZCAqYjMg PSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJIDAsCisJCQkJCQkgaW50 X3R5cGUsCisJCQkJCQkgImMiKTsKKyAgZ2NjX2ppdF9maWVsZCAqZmllbGRzX2JbXSA9IHtiMSwg YjIsIGIzfTsKKworICBnY2Nfaml0X3R5cGUgKnN0cnVjdF9iYXJfdHlwZSA9CisgICAgZ2NjX2pp dF9zdHJ1Y3RfYXNfdHlwZSAoCisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF90eXBl IChjdHh0LAorCQkJCSAgICAgICAwLAorCQkJCSAgICAgICAiYmFyIiwKKwkJCQkgICAgICAgMywK KwkJCQkgICAgICAgZmllbGRzX2IpKTsKKyAgCisgIGdjY19qaXRfZmllbGQgKmIxMSA9IGdjY19q aXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgIDAsCisJCQkJCQkgIGludF90eXBl LAorCQkJCQkJICAiYSIpOworICBnY2Nfaml0X2ZpZWxkICpiMjIgPSBnY2Nfaml0X2NvbnRleHRf bmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJICAwLAorCQkJCQkJICBpbnRfdHlwZSwKKwkJCQkJCSAg ImJiIik7IC8qIHdyb25nICovCisgIGdjY19qaXRfZmllbGQgKmIzMyA9IGdjY19qaXRfY29udGV4 dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgIDAsCisJCQkJCQkgIGludF90eXBlLAorCQkJCQkJ ICAiYyIpOworICBnY2Nfaml0X2ZpZWxkICpmaWVsZHNfY3RvcltdID0ge2IxMSwgYjIyLCBiMzN9 OworICBnY2Nfaml0X3J2YWx1ZSAqdmFsdWVzW10gPSB7MCwwLDB9OworCisgIGdjY19qaXRfcnZh bHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1Y3RvcgorICAgIChjdHh0LCAw LAorICAgICBzdHJ1Y3RfYmFyX3R5cGUsCisgICAgIDMsCisgICAgIGZpZWxkc19jdG9yLAorICAg ICB2YWx1ZXMpOworCisgIENIRUNLX1ZBTFVFIChjdG9yLCBOVUxMKTsKK30KKwordm9pZAordmVy aWZ5X2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgZ2NjX2ppdF9yZXN1bHQgKnJlc3VsdCkK K3sKKyAgLyogRW5zdXJlIHRoYXQgdGhlIGJhZCBBUEkgdXNhZ2UgcHJldmVudHMgdGhlIEFQSSBn aXZpbmcgYSBib2d1cworICAgICByZXN1bHQgYmFjay4gICovCisgIENIRUNLX1ZBTFVFIChyZXN1 bHQsIE5VTEwpOworCisgIC8qIFZlcmlmeSB0aGF0IHRoZSBjb3JyZWN0IGVycm9yIG1lc3NhZ2Ug d2FzIGVtaXR0ZWQuICovCisgIENIRUNLX1NUUklOR19WQUxVRSAoZ2NjX2ppdF9jb250ZXh0X2dl dF9maXJzdF9lcnJvciAoY3R4dCksCisJCSAgICAgICJnY2Nfaml0X2NvbnRleHRfbmV3X2NvbnN0 cnVjdG9yOiBjb3VsZCBub3QgZmluZCAiCisJCSAgICAgICJtYXRjaGluZyBmaWVsZCBpbiBzdHJ1 Y3QgZm9yIGFsbCBmaWVsZHMgaW4gY29uc3RydWN0b3IiKTsKKyAgQ0hFQ0tfU1RSSU5HX1ZBTFVF IChnY2Nfaml0X2NvbnRleHRfZ2V0X2xhc3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAiZ2NjX2pp dF9jb250ZXh0X25ld19jb25zdHJ1Y3RvcjogY291bGQgbm90IGZpbmQgIgorCQkgICAgICAibWF0 Y2hpbmcgZmllbGQgaW4gc3RydWN0IGZvciBhbGwgZmllbGRzIGluIGNvbnN0cnVjdG9yIik7Cit9 CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWN0b3Itc3RydWN0 LXdyb25nLXR5cGUuYyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItY3Rvci1zdHJ1 Y3Qtd3JvbmctdHlwZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4z ZWZmYTBiZmQ4YgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3Qt ZXJyb3ItY3Rvci1zdHJ1Y3Qtd3JvbmctdHlwZS5jCkBAIC0wLDAgKzEsODUgQEAKKy8qCisKKyAg VGVzdCB0aGF0IHRoZSBwcm9wZXIgZXJyb3IgaXMgdHJpZ2dlcmVkIHdoZW4gd2UgYnVpbGQgYSBj dG9yCisgIGZvciBhbiBzdHJ1Y3QgdHlwZSwgYnV0IGhhcyB0aGUgdHlwZSB3cm9uZyBvbiBhIGZp ZWxkLgorCisqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKwor I2luY2x1ZGUgImxpYmdjY2ppdC5oIgorI2luY2x1ZGUgImhhcm5lc3MuaCIKKwordm9pZAorY3Jl YXRlX2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9kYXRhKQoreworICBn Y2Nfaml0X3R5cGUgKmludF90eXBlID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LAor ICAgIEdDQ19KSVRfVFlQRV9JTlQpOworICBnY2Nfaml0X3R5cGUgKmZsb2F0X3R5cGUgPSBnY2Nf aml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsCisgICAgR0NDX0pJVF9UWVBFX0ZMT0FUKTsKKyAg CisgIGdjY19qaXRfZmllbGQgKmIxID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwK KwkJCQkJCSAwLAorCQkJCQkJIGludF90eXBlLAorCQkJCQkJICJhIik7CisgIGdjY19qaXRfZmll bGQgKmIyID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAwLAorCQkJ CQkJIGludF90eXBlLAorCQkJCQkJICJiIik7CisgIGdjY19qaXRfZmllbGQgKmIzID0gZ2NjX2pp dF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAwLAorCQkJCQkJIGludF90eXBlLAor CQkJCQkJICJjIik7CisgIGdjY19qaXRfZmllbGQgKmZpZWxkc19iW10gPSB7YjEsIGIyLCBiM307 CisKKyAgZ2NjX2ppdF90eXBlICpzdHJ1Y3RfYmFyX3R5cGUgPQorICAgIGdjY19qaXRfc3RydWN0 X2FzX3R5cGUgKAorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfdHlwZSAoY3R4dCwK KwkJCQkgICAgICAgMCwKKwkJCQkgICAgICAgImJhciIsCisJCQkJICAgICAgIDMsCisJCQkJICAg ICAgIGZpZWxkc19iKSk7CisgIAorICBnY2Nfaml0X2ZpZWxkICpiMTEgPSBnY2Nfaml0X2NvbnRl eHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJICAwLAorCQkJCQkJICBpbnRfdHlwZSwKKwkJCQkJ CSAgImEiKTsKKyAgZ2NjX2ppdF9maWVsZCAqYjIyID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVs ZCAoY3R4dCwKKwkJCQkJCSAgMCwKKwkJCQkJCSAgZmxvYXRfdHlwZSwgLyogd3JvbmcgKi8KKwkJ CQkJCSAgImIiKTsKKyAgZ2NjX2ppdF9maWVsZCAqYjMzID0gZ2NjX2ppdF9jb250ZXh0X25ld19m aWVsZCAoY3R4dCwKKwkJCQkJCSAgMCwKKwkJCQkJCSAgaW50X3R5cGUsCisJCQkJCQkgICJjIik7 CisgIGdjY19qaXRfZmllbGQgKmZpZWxkc19jdG9yW10gPSB7YjExLCBiMjIsIGIzM307CisgIGdj Y19qaXRfcnZhbHVlICp2YWx1ZXNbXSA9IHswLDAsMH07CisKKyAgZ2NjX2ppdF9ydmFsdWUgKmN0 b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2NvbnN0cnVjdG9yCisgICAgKGN0eHQsIDAsCisgICAg IHN0cnVjdF9iYXJfdHlwZSwKKyAgICAgMywKKyAgICAgZmllbGRzX2N0b3IsCisgICAgIHZhbHVl cyk7CisKKyAgQ0hFQ0tfVkFMVUUgKGN0b3IsIE5VTEwpOworfQorCit2b2lkCit2ZXJpZnlfY29k ZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCBnY2Nfaml0X3Jlc3VsdCAqcmVzdWx0KQoreworICAv KiBFbnN1cmUgdGhhdCB0aGUgYmFkIEFQSSB1c2FnZSBwcmV2ZW50cyB0aGUgQVBJIGdpdmluZyBh IGJvZ3VzCisgICAgIHJlc3VsdCBiYWNrLiAgKi8KKyAgQ0hFQ0tfVkFMVUUgKHJlc3VsdCwgTlVM TCk7CisKKyAgLyogVmVyaWZ5IHRoYXQgdGhlIGNvcnJlY3QgZXJyb3IgbWVzc2FnZSB3YXMgZW1p dHRlZC4gKi8KKyAgQ0hFQ0tfU1RSSU5HX1ZBTFVFIChnY2Nfaml0X2NvbnRleHRfZ2V0X2ZpcnN0 X2Vycm9yIChjdHh0KSwKKwkJICAgICAgImdjY19qaXRfY29udGV4dF9uZXdfY29uc3RydWN0b3I6 IHR5cGUgb2Ygc3RydWN0ICIKKwkJICAgICAgImZpZWxkIGRpZmZlcnMgZnJvbSB0eXBlIG9mIGNv bnN0cnVjdCBmaWVsZCAiCisJCSAgICAgICIoc3RydWN0OiBpbnQgYikoY3RvcjogZmxvYXQgYiki KTsKKyAgQ0hFQ0tfU1RSSU5HX1ZBTFVFIChnY2Nfaml0X2NvbnRleHRfZ2V0X2xhc3RfZXJyb3Ig KGN0eHQpLAorCQkgICAgICAiZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1Y3RvcjogdHlwZSBv ZiBzdHJ1Y3QgIgorCQkgICAgICAiZmllbGQgZGlmZmVycyBmcm9tIHR5cGUgb2YgY29uc3RydWN0 IGZpZWxkICIKKwkJICAgICAgIihzdHJ1Y3Q6IGludCBiKShjdG9yOiBmbG9hdCBiKSIpOworfQpk aWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1jdG9yLXVuaW9uLXdy b25nLWZpZWxkLW5hbWUuYyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItY3Rvci11 bmlvbi13cm9uZy1maWVsZC1uYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLmY1Yjc2MDk1ZjY5Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQu ZGcvdGVzdC1lcnJvci1jdG9yLXVuaW9uLXdyb25nLWZpZWxkLW5hbWUuYwpAQCAtMCwwICsxLDgw IEBACisvKgorCisgIFRlc3QgdGhhdCB0aGUgcHJvcGVyIGVycm9yIGlzIHRyaWdnZXJlZCB3aGVu IHdlIGJ1aWxkIGEgY3RvcgorICBmb3IgYW4gdW5pb24gdHlwZSwgYnV0IGRvbid0IHByb3ZpZGUg YSBjb3JyZWN0IGZpZWxkLgorCisqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8 c3RkaW8uaD4KKworI2luY2x1ZGUgImxpYmdjY2ppdC5oIgorI2luY2x1ZGUgImhhcm5lc3MuaCIK Kwordm9pZAorY3JlYXRlX2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9k YXRhKQoreworICBnY2Nfaml0X3R5cGUgKmludF90eXBlID0gZ2NjX2ppdF9jb250ZXh0X2dldF90 eXBlIChjdHh0LAorICAgIEdDQ19KSVRfVFlQRV9JTlQpOworICBnY2Nfaml0X3R5cGUgKmZsb2F0 X3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsCisgICAgR0NDX0pJVF9UWVBF X0ZMT0FUKTsKKyAgZ2NjX2ppdF90eXBlICpkb3VibGVfdHlwZSA9IGdjY19qaXRfY29udGV4dF9n ZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfRE9VQkxFKTsKKworICBnY2Nfaml0X2Zp ZWxkICpiMSA9IGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgMCwKKwkJ CQkJCSBpbnRfdHlwZSwKKwkJCQkJCSAiYSIpOworICBnY2Nfaml0X2ZpZWxkICpiMiA9IGdjY19q aXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgMCwKKwkJCQkJCSBmbG9hdF90eXBl LAorCQkJCQkJICJiIik7CisgIGdjY19qaXRfZmllbGQgKmIzID0gZ2NjX2ppdF9jb250ZXh0X25l d19maWVsZCAoY3R4dCwKKwkJCQkJCSAwLAorCQkJCQkJIGRvdWJsZV90eXBlLAorCQkJCQkJICJj Iik7CisgIGdjY19qaXRfZmllbGQgKmZpZWxkc19iW10gPSB7YjEsIGIyLCBiM307CisKKyAgZ2Nj X2ppdF90eXBlICp1bmlvbl9iYXJfdHlwZSA9CisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3Vu aW9uX3R5cGUgKGN0eHQsCisJCQkJICAgICAgMCwKKwkJCQkgICAgICAiYmFyIiwKKwkJCQkgICAg ICAzLAorCQkJCSAgICAgIGZpZWxkc19iKTsKKyAgCisgIGdjY19qaXRfZmllbGQgKmIzMyA9IGdj Y19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgIDAsCisJCQkJCQkgIGRvdWJs ZV90eXBlLAorCQkJCQkJICAiY2MiKTsgLyogd3JvbmcgKi8KKworCisgIGdjY19qaXRfZmllbGQg KmZpZWxkc19jdG9yW10gPSB7YjMzfTsKKyAgZ2NjX2ppdF9ydmFsdWUgKnZhbHVlc1tdID0gezB9 OworCisgIGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1 Y3RvcgorICAgIChjdHh0LCAwLAorICAgICB1bmlvbl9iYXJfdHlwZSwKKyAgICAgMSwKKyAgICAg ZmllbGRzX2N0b3IsCisgICAgIHZhbHVlcyk7CisKKyAgQ0hFQ0tfVkFMVUUgKGN0b3IsIE5VTEwp OworfQorCit2b2lkCit2ZXJpZnlfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCBnY2Nfaml0 X3Jlc3VsdCAqcmVzdWx0KQoreworICAvKiBFbnN1cmUgdGhhdCB0aGUgYmFkIEFQSSB1c2FnZSBw cmV2ZW50cyB0aGUgQVBJIGdpdmluZyBhIGJvZ3VzCisgICAgIHJlc3VsdCBiYWNrLiAgKi8KKyAg Q0hFQ0tfVkFMVUUgKHJlc3VsdCwgTlVMTCk7CisKKyAgLyogVmVyaWZ5IHRoYXQgdGhlIGNvcnJl Y3QgZXJyb3IgbWVzc2FnZSB3YXMgZW1pdHRlZC4gKi8KKyAgQ0hFQ0tfU1RSSU5HX1ZBTFVFIChn Y2Nfaml0X2NvbnRleHRfZ2V0X2ZpcnN0X2Vycm9yIChjdHh0KSwKKwkJICAgICAgImdjY19qaXRf Y29udGV4dF9uZXdfY29uc3RydWN0b3I6IGNvbnN0cnVjdG9yIGZpZWxkICIKKwkJICAgICAgImRv ZXMgbm90IGV4aXN0IGluIHRoZSB1bmlvbiB0eXBlIChmaWVsZDogZG91YmxlIGNjKSIKKwkJICAg ICAgIih0eXBlOiB1bmlvbiBiYXIpIik7CisgIENIRUNLX1NUUklOR19WQUxVRSAoZ2NjX2ppdF9j b250ZXh0X2dldF9sYXN0X2Vycm9yIChjdHh0KSwKKwkJICAgICAgImdjY19qaXRfY29udGV4dF9u ZXdfY29uc3RydWN0b3I6IGNvbnN0cnVjdG9yIGZpZWxkICIKKwkJICAgICAgImRvZXMgbm90IGV4 aXN0IGluIHRoZSB1bmlvbiB0eXBlIChmaWVsZDogZG91YmxlIGNjKSIKKwkJICAgICAgIih0eXBl OiB1bmlvbiBiYXIpIik7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0 LWVycm9yLWdsb2JhbC1hbGxyZWFkeS1pbml0LmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0 LWVycm9yLWdsb2JhbC1hbGxyZWFkeS1pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjdlYWYxODIwMjlkCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9qaXQuZGcvdGVzdC1lcnJvci1nbG9iYWwtYWxscmVhZHktaW5pdC5jCkBAIC0wLDAgKzEsNDYg QEAKKy8qCisKKyAgVGVzdCB0aGF0IHdlIGNhbid0IHNldCB0aGUgaW5pdGlhbGl6ZXIgb24gYSBn bG9iYWwgdHdpY2UuCisKKyovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRp by5oPgorCisjaW5jbHVkZSAibGliZ2Njaml0LmgiCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCit2 b2lkCitjcmVhdGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEp Cit7CisgIGdjY19qaXRfdHlwZSAqaW50X3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUg KGN0eHQsIEdDQ19KSVRfVFlQRV9JTlQpOworCisgIGdjY19qaXRfbHZhbHVlICpiYXIgPSAgZ2Nj X2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgIGN0eHQsIE5VTEwsCisgICAgR0NDX0pJVF9H TE9CQUxfRVhQT1JURUQsCisgICAgaW50X3R5cGUsCisgICAgImdsb2JhbF9sdmFsdWVpbml0X2lu dF8wIik7CisKKyAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoCisgICAg YmFyLAorICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0LCBpbnRf dHlwZSwgMSkpOworICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlICgKKyAg ICBiYXIsCisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKGN0eHQsIGlu dF90eXBlLCAxKSk7Cit9CisKK3ZvaWQKK3ZlcmlmeV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0 eHQsIGdjY19qaXRfcmVzdWx0ICpyZXN1bHQpCit7CisgIC8qIEVuc3VyZSB0aGF0IHRoZSBiYWQg QVBJIHVzYWdlIHByZXZlbnRzIHRoZSBBUEkgZ2l2aW5nIGEgYm9ndXMKKyAgICAgcmVzdWx0IGJh Y2suICAqLworICBDSEVDS19WQUxVRSAocmVzdWx0LCBOVUxMKTsKKworICAvKiBWZXJpZnkgdGhh dCB0aGUgY29ycmVjdCBlcnJvciBtZXNzYWdlIHdhcyBlbWl0dGVkLiAqLworICBDSEVDS19TVFJJ TkdfVkFMVUUgKGdjY19qaXRfY29udGV4dF9nZXRfZmlyc3RfZXJyb3IgKGN0eHQpLAorCQkgICAg ICAiZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZTogZ2xvYmFsIHZhcmlhYmxl ICIKKwkJICAgICAgImFsbHJlYWR5IGluaXRpYWxpemVkOiBnbG9iYWxfbHZhbHVlaW5pdF9pbnRf MCIpOworICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29udGV4dF9nZXRfbGFzdF9lcnJv ciAoY3R4dCksCisJCSAgICAgICJnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVl OiBnbG9iYWwgdmFyaWFibGUgIgorCQkgICAgICAiYWxscmVhZHkgaW5pdGlhbGl6ZWQ6IGdsb2Jh bF9sdmFsdWVpbml0X2ludF8wIik7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5k Zy90ZXN0LWVycm9yLWdsb2JhbC1jb21tb24tc2VjdGlvbi5jIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQu ZGcvdGVzdC1lcnJvci1nbG9iYWwtY29tbW9uLXNlY3Rpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uMDAwZjU5NDg5YTIKLS0tIC9kZXYvbnVsbAorKysgYi9nY2Mv dGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWdsb2JhbC1jb21tb24tc2VjdGlvbi5jCkBAIC0w LDAgKzEsNTQgQEAKKy8qCisKKyAgVGVzdCB0aGF0IHRoZSBwcm9wZXIgZXJyb3IgaXMgdHJpZ2dl cmVkIHdoZW4gd2UgaW5pdGlhbGl6ZQorICBhIGdsb2JhbCB3aXRoIGEgZ2xvYmFsIHRoYXQgaGFz IG5vIERFQ0xfSU5JVElBTCAoYW5kIGlzIG1hcmtlZAorICBERUNMX0NPTU1PTihOT0RFKSA9IDEp LgorCisqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lu Y2x1ZGUgImxpYmdjY2ppdC5oIgorI2luY2x1ZGUgImhhcm5lc3MuaCIKKwordm9pZAorY3JlYXRl X2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9kYXRhKQoreworICBnY2Nf aml0X3R5cGUgKmludF90eXBlID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LAorICAg IEdDQ19KSVRfVFlQRV9JTlQpOworCisgIC8qIGNvbnN0IGludCBmb287CisgICAgIGludCBiYXIg PSBmb287CisgICAqLworICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9u ZXdfZ2xvYmFsICgKKyAgICBjdHh0LCBOVUxMLAorICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVE LAorICAgIGdjY19qaXRfdHlwZV9nZXRfY29uc3QgKGludF90eXBlKSwKKyAgICAiZ2xvYmFsX2Nv bnN0X2ludF8wIik7CisgIGdjY19qaXRfbHZhbHVlICpiYXIgPSAgZ2NjX2ppdF9jb250ZXh0X25l d19nbG9iYWwgKAorICAgIGN0eHQsIE5VTEwsCisgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQs CisgICAgaW50X3R5cGUsCisgICAgImdsb2JhbF9sdmFsdWVpbml0X2ludF8wIik7IAorICBnY2Nf aml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChiYXIsCisJCQkJCSBnY2Nfaml0X2x2 YWx1ZV9hc19ydmFsdWUgKGZvbykpOworfQorCit2b2lkCit2ZXJpZnlfY29kZSAoZ2NjX2ppdF9j b250ZXh0ICpjdHh0LCBnY2Nfaml0X3Jlc3VsdCAqcmVzdWx0KQoreworICAvKiBFbnN1cmUgdGhh dCB0aGUgYmFkIEFQSSB1c2FnZSBwcmV2ZW50cyB0aGUgQVBJIGdpdmluZyBhIGJvZ3VzCisgICAg IHJlc3VsdCBiYWNrLiAgKi8KKyAgQ0hFQ0tfVkFMVUUgKHJlc3VsdCwgTlVMTCk7CisKKyAgLyog VmVyaWZ5IHRoYXQgdGhlIGNvcnJlY3QgZXJyb3IgbWVzc2FnZSB3YXMgZW1pdHRlZC4gKi8KKyAg Q0hFQ0tfU1RSSU5HX1ZBTFVFIChnY2Nfaml0X2NvbnRleHRfZ2V0X2ZpcnN0X2Vycm9yIChjdHh0 KSwKKwkJICAgICAgImNhbid0IGluaXRpYWxpemUgZ2xvYmFsX2x2YWx1ZWluaXRfaW50XzAgIgor CQkgICAgICAid2l0aCBnbG9iYWxfY29uc3RfaW50XzAgc2luY2UgaXQgaGFzIG5vICIKKwkJICAg ICAgImluaXRpYWwgdmFsdWUgc2V0Iik7CisgIENIRUNLX1NUUklOR19WQUxVRSAoZ2NjX2ppdF9j b250ZXh0X2dldF9sYXN0X2Vycm9yIChjdHh0KSwKKwkJICAgICAgImNhbid0IGluaXRpYWxpemUg Z2xvYmFsX2x2YWx1ZWluaXRfaW50XzAgIgorCQkgICAgICAid2l0aCBnbG9iYWxfY29uc3RfaW50 XzAgc2luY2UgaXQgaGFzIG5vICIKKwkJICAgICAgImluaXRpYWwgdmFsdWUgc2V0Iik7Cit9CmRp ZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWdsb2JhbC1pbml0LXRv by1zbWFsbC1hcnJheS5jIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1nbG9iYWwt aW5pdC10b28tc21hbGwtYXJyYXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uMTM3YmFlNmM2YjUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2ppdC5k Zy90ZXN0LWVycm9yLWdsb2JhbC1pbml0LXRvby1zbWFsbC1hcnJheS5jCkBAIC0wLDAgKzEsNjQg QEAKKy8qCisKKyAgVGVzdCB0aGF0IHRoZSBwcm9wZXIgZXJyb3IgaXMgdHJpZ2dlcmVkIHdoZW4g d2UgaW5pdGlhbGl6ZQorICBhIGdsb2JhbCB3aXRoIGFub3RoZXIgbm9uLWNvbnN0IGdsb2JhbCdz IHJ2YWx1ZS4KKworICBVc2luZyBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVl KCkKKworKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNp bmNsdWRlICJsaWJnY2NqaXQuaCIKKyNpbmNsdWRlICJoYXJuZXNzLmgiCisKK3ZvaWQKK2NyZWF0 ZV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIHZvaWQgKnVzZXJfZGF0YSkKK3sgLyogZmxv YXQgZm9vWzFdID0gezEsMn07ICovCisKKyAgZ2NjX2ppdF90eXBlICpmbG9hdF90eXBlID0gZ2Nj X2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LAorICAgIEdDQ19KSVRfVFlQRV9GTE9BVCk7Cisg IGdjY19qaXRfdHlwZSAqYXJyX3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X3R5cGUg KGN0eHQsCisJCQkJCQkJICAgMCwKKwkJCQkJCQkgICBmbG9hdF90eXBlLAorCQkJCQkJCSAgIDEp OworICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF8xID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVf ZnJvbV9pbnQgKAorICAgIGN0eHQsIGZsb2F0X3R5cGUsIDEpOworICBnY2Nfaml0X3J2YWx1ZSAq cnZhbF8yID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgIGN0eHQs IGZsb2F0X3R5cGUsIDIpOworCisgIGdjY19qaXRfcnZhbHVlICp2YWx1ZXNbXSA9IHtydmFsXzEs IHJ2YWxfMn07CisKKyAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3 X2NvbnN0cnVjdG9yIChjdHh0LAorCQkJCQkJCSAgMCwKKwkJCQkJCQkgIGFycl90eXBlLAorCQkJ CQkJCSAgMiwKKwkJCQkJCQkgIDAsCisJCQkJCQkJICB2YWx1ZXMpOworICBpZiAoIWN0b3IpCisg ICAgcmV0dXJuOworICAKKyAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9ICBnY2Nfaml0X2NvbnRleHRf bmV3X2dsb2JhbCAoCisgICAgY3R4dCwgTlVMTCwKKyAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRF RCwKKyAgICBhcnJfdHlwZSwKKyAgICAiZ2xvYmFsX2Zsb2F0YXJyXzEyIik7CisgIGdjY19qaXRf Z2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywgY3Rvcik7Cit9CisKK3ZvaWQKK3Zl cmlmeV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIGdjY19qaXRfcmVzdWx0ICpyZXN1bHQp Cit7CisgIC8qIEVuc3VyZSB0aGF0IHRoZSBiYWQgQVBJIHVzYWdlIHByZXZlbnRzIHRoZSBBUEkg Z2l2aW5nIGEgYm9ndXMKKyAgICAgcmVzdWx0IGJhY2suICAqLworICBDSEVDS19WQUxVRSAocmVz dWx0LCBOVUxMKTsKKworICAvKiBWZXJpZnkgdGhhdCB0aGUgY29ycmVjdCBlcnJvciBtZXNzYWdl IHdhcyBlbWl0dGVkLiAqLworICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29udGV4dF9n ZXRfZmlyc3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAiZ2NjX2ppdF9jb250ZXh0X25ld19jb25z dHJ1Y3RvcjogYXJyYXkgY29uc3RydWN0b3IgaGFzIgorCQkgICAgICAiIG1vcmUgdmFsdWVzIHRo YW4gdGhlIGFycmF5IHR5cGUncyBsZW5ndGgiKTsKKyAgQ0hFQ0tfU1RSSU5HX1ZBTFVFIChnY2Nf aml0X2NvbnRleHRfZ2V0X2xhc3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAiZ2NjX2ppdF9jb250 ZXh0X25ld19jb25zdHJ1Y3RvcjogYXJyYXkgY29uc3RydWN0b3IgaGFzIgorCQkgICAgICAiIG1v cmUgdmFsdWVzIHRoYW4gdGhlIGFycmF5IHR5cGUncyBsZW5ndGgiKTsKK30KZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItZ2xvYmFsLWx2YWx1ZS1pbml0LmMgYi9n Y2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWdsb2JhbC1sdmFsdWUtaW5pdC5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jNmUxZjBlYTRmZQotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItZ2xvYmFsLWx2YWx1ZS1p bml0LmMKQEAgLTAsMCArMSw2MCBAQAorLyoKKworICBUZXN0IHRoYXQgdGhlIHByb3BlciBlcnJv ciBpcyB0cmlnZ2VyZWQgd2hlbiB3ZSBpbml0aWFsaXplCisgIGEgZ2xvYmFsIHdpdGggYW5vdGhl ciBub24tY29uc3QgZ2xvYmFsJ3MgcnZhbHVlLgorCisgIFVzaW5nIGdjY19qaXRfZ2xvYmFsX3Nl dF9pbml0aWFsaXplcl9ydmFsdWUoKQorCisqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5j bHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImxpYmdjY2ppdC5oIgorI2luY2x1ZGUgImhhcm5l c3MuaCIKKwordm9pZAorY3JlYXRlX2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgdm9pZCAq dXNlcl9kYXRhKQoreworICBnY2Nfaml0X3R5cGUgKmludF90eXBlID0gZ2NjX2ppdF9jb250ZXh0 X2dldF90eXBlIChjdHh0LAorICAgIEdDQ19KSVRfVFlQRV9JTlQpOworCisgIGdjY19qaXRfbHZh bHVlICpmb287CisgIHsgLyogaW50IGJhcjsgKi8KKyAgICBmb28gPSAgZ2NjX2ppdF9jb250ZXh0 X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VY UE9SVEVELAorICAgICAgaW50X3R5cGUsCisgICAgICAiZ2xvYmFsX2x2YWx1ZWluaXRfaW50MSIp OworICAgIGdjY19qaXRfcnZhbHVlICpydmFsID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVf ZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDMpOworICAgIGdjY19qaXRfZ2xvYmFs X3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywKKyAgICAgIHJ2YWwpOworICB9CisgIHsgLyog aW50IGZvbyA9IGJhcjsgKi8KKwkgICAgIAorICAgIGdjY19qaXRfbHZhbHVlICpiYXIgPSAgZ2Nj X2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19K SVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgaW50X3R5cGUsCisgICAgICAiZ2xvYmFsX2x2YWx1 ZWluaXRfaW50MiIpOyAKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVl IChiYXIsCisJCQkJCSAgIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZSAoZm9vKSk7CisgIH0KK30K Kwordm9pZAordmVyaWZ5X2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgZ2NjX2ppdF9yZXN1 bHQgKnJlc3VsdCkKK3sKKyAgLyogRW5zdXJlIHRoYXQgdGhlIGJhZCBBUEkgdXNhZ2UgcHJldmVu dHMgdGhlIEFQSSBnaXZpbmcgYSBib2d1cworICAgICByZXN1bHQgYmFjay4gICovCisgIENIRUNL X1ZBTFVFIChyZXN1bHQsIE5VTEwpOworCisgIC8qIFZlcmlmeSB0aGF0IHRoZSBjb3JyZWN0IGVy cm9yIG1lc3NhZ2Ugd2FzIGVtaXR0ZWQuICovCisgIENIRUNLX1NUUklOR19WQUxVRSAoZ2NjX2pp dF9jb250ZXh0X2dldF9maXJzdF9lcnJvciAoY3R4dCksCisJCSAgICAgICJpbml0IHJ2YWx1ZSBm b3IgdGhlIGdsb2JhbCB2YXJpYWJsZSAiCisJCSAgICAgICJnbG9iYWxfbHZhbHVlaW5pdF9pbnQy IGRvZXMgbm90IHNlZW0gdG8gYmUgY29uc3RhbnQiKTsKKyAgQ0hFQ0tfU1RSSU5HX1ZBTFVFIChn Y2Nfaml0X2NvbnRleHRfZ2V0X2xhc3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAiaW5pdCBydmFs dWUgZm9yIHRoZSBnbG9iYWwgdmFyaWFibGUgIgorCQkgICAgICAiZ2xvYmFsX2x2YWx1ZWluaXRf aW50MiBkb2VzIG5vdCBzZWVtIHRvIGJlIGNvbnN0YW50Iik7Cit9CmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWdsb2JhbC1ub25jb25zdC1pbml0LmMgYi9nY2Mv dGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWdsb2JhbC1ub25jb25zdC1pbml0LmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQwNGRiOGJhOGFiCi0tLSAvZGV2L251 bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1nbG9iYWwtbm9uY29uc3Qt aW5pdC5jCkBAIC0wLDAgKzEsODAgQEAKKy8qCisKKyAgVGVzdCB0aGF0IHRoZSBwcm9wZXIgZXJy b3IgaXMgdHJpZ2dlcmVkIHdoZW4gd2UgaW5pdGlhbGl6ZQorICBhIGdsb2JhbCB3aXRoIGEgZnVu Y3Rpb24gY2FsbC4KKworICBVc2luZyBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZh bHVlKCkKKworKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisK KyNpbmNsdWRlICJsaWJnY2NqaXQuaCIKKyNpbmNsdWRlICJoYXJuZXNzLmgiCisKK3ZvaWQKK2Ny ZWF0ZV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAg Z2NjX2ppdF90eXBlICppbnRfdHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwK KyAgICBHQ0NfSklUX1RZUEVfSU5UKTsKKyAgCisgIGdjY19qaXRfZnVuY3Rpb24gKmZuX2ludF8z OyAKKyAgeyAvKiBpbnQgZm9vICgpIHsgaW50IGxvY2FsID0gMzsgcmV0dXJuIGxvY2FsO30gKi8K KyAgICBmbl9pbnRfMyA9CisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0 LAorCQkJCSAgICAwLAorCQkJCSAgICBHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorCQkJCSAg ICBpbnRfdHlwZSwKKwkJCQkgICAgImZuX2ludF8zIiwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCwK KwkJCQkgICAgMCk7CisgICAgZ2NjX2ppdF9ibG9jayAqYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9u X25ld19ibG9jayAoZm5faW50XzMsICJzdGFydCIpOworICAgIGdjY19qaXRfbHZhbHVlICpsb2Nh bCA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2xvY2FsIChmbl9pbnRfMywKKwkJCQkJCQkwLAorCQkJ CQkJCWludF90eXBlLAorCQkJCQkJCSJsb2NhbCIpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFs ID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50 X3R5cGUsIDMpOworCisgICAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVudCAoYmxvY2ssIDAs IGxvY2FsLCBydmFsKTsKKworICAgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuIChibG9j aywKKwkJCQkgICAwLAorCQkJCSAgIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZShsb2NhbCkpOwor CQkJCQkJCSAgCisgIH0KKworICB7IC8qIGludCBiYXIgPSBmb28oKTsgKi8KKyAgICBnY2Nfaml0 X3J2YWx1ZSAqcnZhbCA9CisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2NhbGwgKGN0eHQsCisJ CQkgICAgICAgIDAsCisJCQkJZm5faW50XzMsCisJCQkJMCwwKTsKKwkJCQkJCSAgICAgCisgICAg Z2NjX2ppdF9sdmFsdWUgKmZvbyA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAg ICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBpbnRf dHlwZSwKKyAgICAgICJnbG9iYWxfbm9uY29uc3RfaW50Iik7IAorICAgIGdjY19qaXRfZ2xvYmFs X3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywKKyAgICAgIHJ2YWwpOworICB9Cit9CisKK3Zv aWQKK3ZlcmlmeV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIGdjY19qaXRfcmVzdWx0ICpy ZXN1bHQpCit7CisgIC8qIEVuc3VyZSB0aGF0IHRoZSBiYWQgQVBJIHVzYWdlIHByZXZlbnRzIHRo ZSBBUEkgZ2l2aW5nIGEgYm9ndXMKKyAgICAgcmVzdWx0IGJhY2suICAqLworICBDSEVDS19WQUxV RSAocmVzdWx0LCBOVUxMKTsKKworICAvKiBWZXJpZnkgdGhhdCB0aGUgY29ycmVjdCBlcnJvciBt ZXNzYWdlIHdhcyBlbWl0dGVkLiAqLworICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29u dGV4dF9nZXRfZmlyc3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAiaW5pdCBydmFsdWUgZm9yIHRo ZSBnbG9iYWwgdmFyaWFibGUgIgorCQkgICAgICAiZ2xvYmFsX25vbmNvbnN0X2ludCBkb2VzIG5v dCBzZWVtIHRvIGJlIGNvbnN0YW50Iik7CisgIENIRUNLX1NUUklOR19WQUxVRSAoZ2NjX2ppdF9j b250ZXh0X2dldF9sYXN0X2Vycm9yIChjdHh0KSwKKwkJICAgICAgImluaXQgcnZhbHVlIGZvciB0 aGUgZ2xvYmFsIHZhcmlhYmxlICIKKwkJICAgICAgImdsb2JhbF9ub25jb25zdF9pbnQgZG9lcyBu b3Qgc2VlbSB0byBiZSBjb25zdGFudCIpOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9q aXQuZGcvdGVzdC1nbG9iYWwtaW5pdC1ydmFsdWUuYyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rl c3QtZ2xvYmFsLWluaXQtcnZhbHVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLmRkN2M0Mjc3YzY4Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQu ZGcvdGVzdC1nbG9iYWwtaW5pdC1ydmFsdWUuYwpAQCAtMCwwICsxLDEzOTQgQEAKKworCisjaW5j bHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImxpYmdjY2pp dC5oIgorI2luY2x1ZGUgImhhcm5lc3MuaCIKKworLyogVGhpcyB0ZXN0Y2FzZSBjaGVja3MgdGhh dCBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlKCkgd29ya3MKKyAgIHdpdGgg cnZhbHVlcywgZXNwZWNpYWxseSB3aXRoIGdjY19qaXRfY29udGV4dF9uZXdfY29uc3RydWN0b3Io KSBmb3IKKyAgIHN0cnVjdCwgdW5pb25zIGFuZCBhcnJheXMuICovCisKK3ZvaWQKK2NyZWF0ZV9j b2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgZ2NjX2pp dF90eXBlICppbnRfdHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBH Q0NfSklUX1RZUEVfSU5UKTsKKyAgZ2NjX2ppdF90eXBlICpzaG9ydF90eXBlID0gZ2NjX2ppdF9j b250ZXh0X2dldF90eXBlIChjdHh0LAorICAgIEdDQ19KSVRfVFlQRV9TSE9SVCk7CisgIGdjY19q aXRfdHlwZSAqcGludF90eXBlID0gZ2NjX2ppdF90eXBlX2dldF9wb2ludGVyIChpbnRfdHlwZSk7 CisgIGdjY19qaXRfdHlwZSAqZG91YmxlX3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUg KGN0eHQsCisgICAgR0NDX0pJVF9UWVBFX0RPVUJMRSk7CisgIGdjY19qaXRfdHlwZSAqZmxvYXRf dHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVf RkxPQVQpOworICBnY2Nfaml0X3R5cGUgKmJvb2xfdHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRf dHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfQk9PTCk7CisgIGdjY19qaXRfdHlwZSAqY2hh cl90eXBlID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LAorICAgIEdDQ19KSVRfVFlQ RV9DSEFSKTsKKyAgZ2NjX2ppdF90eXBlICpjcGNoYXJfdHlwZSA9IGdjY19qaXRfY29udGV4dF9n ZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfQ09OU1RfQ0hBUl9QVFIpOworICBnY2Nf aml0X3R5cGUgKnNpemVfdHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAg ICBHQ0NfSklUX1RZUEVfU0laRV9UKTsKKworICAvKiBNYWtlIGEgc3RydWN0OiBzdHJ1Y3QgZmkg eyBmbG9hdCBmOyBpbnQgaTt9ICovCisgIGdjY19qaXRfZmllbGQgKmYxID0gZ2NjX2ppdF9jb250 ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAwLAorCQkJCQkJIGZsb2F0X3R5cGUsCisJCQkJ CQkgImYiKTsKKyAgZ2NjX2ppdF9maWVsZCAqZjIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxk IChjdHh0LAorCQkJCQkJIDAsCisJCQkJCQkgaW50X3R5cGUsCisJCQkJCQkgImkiKTsKKyAgZ2Nj X2ppdF9maWVsZCAqZmllbGRzW10gPSB7ZjEsIGYyfTsKKworICBnY2Nfaml0X3R5cGUgKnN0cnVj dF9maV90eXBlID0KKyAgICBnY2Nfaml0X3N0cnVjdF9hc190eXBlICgKKyAgICAgIGdjY19qaXRf Y29udGV4dF9uZXdfc3RydWN0X3R5cGUgKGN0eHQsCisJCQkJICAgICAgIDAsCisJCQkJICAgICAg ICJmaSIsCisJCQkJICAgICAgIDIsCisJCQkJICAgICAgIGZpZWxkcykpOworCisgIC8qIE1ha2Ug YSBzdHJ1Y3Q6CisKKyAgICAgc3RydWN0IGJhciB7CisgICAgICAgaW50IGlpOworICAgICAgIHN0 cnVjdCBmaSBmaTsKKyAgICAgICBmbG9hdCBmZjsKKyAgICAgfQorICAqLworICBmMSA9IGdjY19q aXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJICAwLAorCQkJCSAgZmxvYXRfdHlwZSwK KwkJCQkgICJmZiIpOworICBmMiA9IGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJ CQkJICAwLAorCQkJCSAgaW50X3R5cGUsCisJCQkJICAiaWkiKTsKKyAgZ2NjX2ppdF9maWVsZCAq ZmkgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJIDAsCisJCQkJCQkg c3RydWN0X2ZpX3R5cGUsCisJCQkJCQkgImZpIik7CisgIGdjY19qaXRfZmllbGQgKmZpZWxkczJb XSA9IHtmMSwgZmksIGYyfTsKKworICBnY2Nfaml0X3R5cGUgKnN0cnVjdF9iYXJfdHlwZSA9Cisg ICAgZ2NjX2ppdF9zdHJ1Y3RfYXNfdHlwZSAoCisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3N0 cnVjdF90eXBlIChjdHh0LAorCQkJCSAgICAgICAwLAorCQkJCSAgICAgICAiYmFyIiwKKwkJCQkg ICAgICAgMywKKwkJCQkgICAgICAgZmllbGRzMikpOworCisgIC8qIE1ha2UgYW4gdW5pb246CisK KyAgICAgdW5pb24gdWJhciB7CisgICAgICAgZmxvYXQgZmY7CisgICAgICAgaW50IGlpOworICAg ICB9OworICAqLworICBmMSA9IGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJ ICAwLAorCQkJCSAgZmxvYXRfdHlwZSwKKwkJCQkgICJmZiIpOworICBmMiA9IGdjY19qaXRfY29u dGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJICAwLAorCQkJCSAgaW50X3R5cGUsCisJCQkJICAi aWkiKTsKKyAgZ2NjX2ppdF9maWVsZCAqZmllbGRzM1tdID0ge2YxLCBmMn07CisgIAorICBnY2Nf aml0X3R5cGUgKnViYXIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3VuaW9uX3R5cGUgKGN0eHQsCisJ CQkJCQkgICAgICAgMCwKKwkJCQkJCSAgICAgICAidWJhciIsCisJCQkJCQkgICAgICAgMiwKKwkJ CQkJCSAgICAgICBmaWVsZHMzKTsKKyAgCisgIHsgLyogc3RydWN0IGJhciBiYXIgPSB7LmlpID0g NCwgLmZmID0gMSwgLmZpID0gey5pID0gMywgLmYgPSAyfX07CisgICAgICAgSS5lLiBuZXN0ZWQg c3RydWN0IGFuZCBuZXN0ZWQgY3RvcnMgaW4gIndyb25nIiBvcmRlci4KKyAgICAgKi8KKyAgICBn Y2Nfaml0X2x2YWx1ZSAqYmFyID0gZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAg Y3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgc3RydWN0 X2Jhcl90eXBlLAorICAgICAgImdsb2JhbF9zdHJ1Y3RfYmFyXzEiKTsKKworICAgIGdjY19qaXRf cnZhbHVlICpmdmFsID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAg ICAgY3R4dCwgZmxvYXRfdHlwZSwgMik7CisgICAgZ2NjX2ppdF9ydmFsdWUgKml2YWwgPSBnY2Nf aml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwg Myk7CisgICAgCisgICAgZ2NjX2ppdF9maWVsZCAqZmlfZiA9IGdjY19qaXRfY29udGV4dF9uZXdf ZmllbGQgKGN0eHQsCisJCQkJCQkgICAwLAorCQkJCQkJICAgZmxvYXRfdHlwZSwKKwkJCQkJCSAg ICJmIik7CisgICAgZ2NjX2ppdF9maWVsZCAqZmlfaSA9IGdjY19qaXRfY29udGV4dF9uZXdfZmll bGQgKGN0eHQsCisJCQkJCQkgICAwLAorCQkJCQkJICAgaW50X3R5cGUsCisJCQkJCQkgICAiaSIp OyAgIAorICAgIAorICAgIGdjY19qaXRfcnZhbHVlICp2YWxzW10gPSB7IGl2YWwsIGZ2YWx9Owor ICAgIGdjY19qaXRfZmllbGQgKmZpZWxkc1tdID0ge2ZpX2ksIGZpX2Z9OworICAgIAorICAgIGdj Y19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1Y3RvcgorICAg ICAgKGN0eHQsIDAsCisgICAgICAgc3RydWN0X2ZpX3R5cGUsCisgICAgICAgMiwKKyAgICAgICBm aWVsZHMsCisgICAgICAgdmFscyk7CisKKyAgICBpdmFsID0gZ2NjX2ppdF9jb250ZXh0X25ld19y dmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDQpOworICAgIGZ2YWwgPSBn Y2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBmbG9hdF90 eXBlLCAxKTsKKworICAgIGdjY19qaXRfZmllbGQgKmJhcl9maSA9IGdjY19qaXRfY29udGV4dF9u ZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgICAgICAgMCwKKwkJCQkJCSAgICAgICBzdHJ1Y3RfZmlf dHlwZSwKKwkJCQkJCSAgICAgICAiZmkiKTsKKyAgICBnY2Nfaml0X2ZpZWxkICpiYXJfZmYgPSBn Y2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJICAgICAgIDAsCisJCQkJCQkg ICAgICAgZmxvYXRfdHlwZSwKKwkJCQkJCSAgICAgICAiZmYiKTsKKyAgICBnY2Nfaml0X2ZpZWxk ICpiYXJfaWkgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJICAgICAg IDAsCisJCQkJCQkgICAgICAgaW50X3R5cGUsCisJCQkJCQkgICAgICAgImlpIik7CisgICAgCisg ICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHMyW10gPSB7aXZhbCwgZnZhbCwgY3Rvcn07CisgICAgZ2Nj X2ppdF9maWVsZCAqZmllbGRzMltdID0ge2Jhcl9paSwgYmFyX2ZmLCBiYXJfZml9OworCisgICAg Z2NjX2ppdF9ydmFsdWUgKmN0b3JfYmFyID0gZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1Y3Rv cgorICAgICAgKGN0eHQsIDAsCisgICAgICAgc3RydWN0X2Jhcl90eXBlLAorICAgICAgIDMsCisg ICAgICAgZmllbGRzMiwKKyAgICAgICB2YWxzMik7CisgICAgCisgICAgZ2NjX2ppdF9nbG9iYWxf c2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoYmFyLCBjdG9yX2Jhcik7CisgIH0KKyAgeyAvKiBzdHJ1 Y3QgYmFyIGJhciA9IHsxLCB7MiwgM30sIDR9OworICAgICAgIEkuZS4gbmVzdGVkIHN0cnVjdCBh bmQgbmVzdGVkIGN0b3JzIGluICJyaWdodCIgb3JkZXIuCisgICAgICovCisgICAgZ2NjX2ppdF9s dmFsdWUgKmJhciA9IGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5V TEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIHN0cnVjdF9iYXJfdHlw ZSwKKyAgICAgICJnbG9iYWxfc3RydWN0X2Jhcl8yIik7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAq ZnZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQs IGZsb2F0X3R5cGUsIDIpOworICAgIGdjY19qaXRfcnZhbHVlICppdmFsID0gZ2NjX2ppdF9jb250 ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDMpOworICAg IAorICAgIGdjY19qaXRfZmllbGQgKmZpX2YgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChj dHh0LAorCQkJCQkJICAgMCwKKwkJCQkJCSAgIGZsb2F0X3R5cGUsCisJCQkJCQkgICAiZiIpOwor ICAgIGdjY19qaXRfZmllbGQgKmZpX2kgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0 LAorCQkJCQkJICAgMCwKKwkJCQkJCSAgIGludF90eXBlLAorCQkJCQkJICAgImkiKTsgICAKKyAg ICAKKyAgICBnY2Nfaml0X3J2YWx1ZSAqdmFsc1tdID0geyBmdmFsLCBpdmFsfTsKKyAgICBnY2Nf aml0X2ZpZWxkICpmaWVsZHNbXSA9IHtmaV9mLCBmaV9pfTsKKyAgICAKKyAgICBnY2Nfaml0X3J2 YWx1ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfY29uc3RydWN0b3IKKyAgICAgIChjdHh0 LCAwLAorICAgICAgIHN0cnVjdF9maV90eXBlLAorICAgICAgIDIsCisgICAgICAgZmllbGRzLAor ICAgICAgIHZhbHMpOworCisgICAgaXZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zy b21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCA0KTsKKyAgICBmdmFsID0gZ2NjX2ppdF9j b250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgZmxvYXRfdHlwZSwgMSk7 CisKKyAgICBnY2Nfaml0X2ZpZWxkICpiYXJfZmkgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxk IChjdHh0LAorCQkJCQkJICAgICAgIDAsCisJCQkJCQkgICAgICAgc3RydWN0X2ZpX3R5cGUsCisJ CQkJCQkgICAgICAgImZpIik7CisgICAgZ2NjX2ppdF9maWVsZCAqYmFyX2ZmID0gZ2NjX2ppdF9j b250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAgICAgICAwLAorCQkJCQkJICAgICAgIGZs b2F0X3R5cGUsCisJCQkJCQkgICAgICAgImZmIik7CisgICAgZ2NjX2ppdF9maWVsZCAqYmFyX2lp ID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAgICAgICAwLAorCQkJ CQkJICAgICAgIGludF90eXBlLAorCQkJCQkJICAgICAgICJpaSIpOworICAgIAorICAgIGdjY19q aXRfcnZhbHVlICp2YWxzMltdID0ge2Z2YWwsIGN0b3IsIGl2YWx9OworICAgIGdjY19qaXRfZmll bGQgKmZpZWxkczJbXSA9IHtiYXJfZmYsIGJhcl9maSwgYmFyX2lpfTsKKworICAgIGdjY19qaXRf cnZhbHVlICpjdG9yX2JhciA9IGdjY19qaXRfY29udGV4dF9uZXdfY29uc3RydWN0b3IKKyAgICAg IChjdHh0LCAwLAorICAgICAgIHN0cnVjdF9iYXJfdHlwZSwKKyAgICAgICAzLAorICAgICAgIGZp ZWxkczIsCisgICAgICAgdmFsczIpOworICAgIAorICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0 aWFsaXplcl9ydmFsdWUgKGJhciwgY3Rvcl9iYXIpOworICB9CisgIHsgLyogc3RydWN0IGZpIGZv byA9IHsyLCAzfTsgKi8KKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gZ2NjX2ppdF9jb250ZXh0 X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VY UE9SVEVELAorICAgICAgc3RydWN0X2ZpX3R5cGUsCisgICAgICAiZ2xvYmFsX3N0cnVjdF9maV8x Iik7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqZnZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZh bHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGZsb2F0X3R5cGUsIDIpOworICAgIGdjY19qaXRf cnZhbHVlICppdmFsID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAg ICAgY3R4dCwgaW50X3R5cGUsIDMpOworICAgIAorICAgIGdjY19qaXRfZmllbGQgKmYxID0gZ2Nj X2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAgIDAsCisJCQkJCQkgICBmbG9h dF90eXBlLAorCQkJCQkJICAgImYiKTsKKyAgICBnY2Nfaml0X2ZpZWxkICpmMiA9IGdjY19qaXRf Y29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgICAwLAorCQkJCQkJICAgaW50X3R5cGUs CisJCQkJCQkgICAiaSIpOyAgICAKKyAgICAKKyAgICBnY2Nfaml0X3J2YWx1ZSAqdmFsc1tdID0g eyBmdmFsLCBpdmFsfTsKKyAgICBnY2Nfaml0X2ZpZWxkICpmaWVsZHNbXSA9IHtmMSwgZjJ9Owor ICAgIAorICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19jb25z dHJ1Y3RvcgorICAgICAgKGN0eHQsIDAsCisgICAgICAgc3RydWN0X2ZpX3R5cGUsCisgICAgICAg MiwKKyAgICAgICBmaWVsZHMsCisgICAgICAgdmFscyk7CisgICAgCisgICAgZ2NjX2ppdF9nbG9i YWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLCBjdG9yKTsKKyAgfQorICB7IC8qIHN0cnVj dCBmaSBmb28gPSB7LmkgPSAzLCAuZiA9IDJ9OworCisgICAgICAgSS5lLiAid3JvbmciIG9yZGVy IG9mIGZpZWxkcy4gICovCisgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9IGdjY19qaXRfY29udGV4 dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9F WFBPUlRFRCwKKyAgICAgIHN0cnVjdF9maV90eXBlLAorICAgICAgImdsb2JhbF9zdHJ1Y3RfZmlf MiIpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmZ2YWwgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2 YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBmbG9hdF90eXBlLCAyKTsKKyAgICBnY2Nfaml0 X3J2YWx1ZSAqaXZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAg ICAgIGN0eHQsIGludF90eXBlLCAzKTsKKyAgICAKKyAgICBnY2Nfaml0X2ZpZWxkICpmMSA9IGdj Y19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgICAwLAorCQkJCQkJICAgZmxv YXRfdHlwZSwKKwkJCQkJCSAgICJmIik7CisgICAgZ2NjX2ppdF9maWVsZCAqZjIgPSBnY2Nfaml0 X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJICAgMCwKKwkJCQkJCSAgIGludF90eXBl LAorCQkJCQkJICAgImkiKTsgICAgCisgICAgCisgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHNbXSA9 IHsgaXZhbCwgZnZhbH07CisgICAgZ2NjX2ppdF9maWVsZCAqZmllbGRzW10gPSB7ZjIsIGYxfTsK KyAgICAKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfY29u c3RydWN0b3IKKyAgICAgIChjdHh0LCAwLAorICAgICAgIHN0cnVjdF9maV90eXBlLAorICAgICAg IDIsCisgICAgICAgZmllbGRzLAorICAgICAgIHZhbHMpOworICAgIGdjY19qaXRfZ2xvYmFsX3Nl dF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywgY3Rvcik7CisgIH0KKyAgeyAvKiBzdHJ1Y3QgZmkg Zm9vID0gezAsIDB9OyAobnVsbCBpbml0KSAqLworICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSBn Y2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0ND X0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBzdHJ1Y3RfZmlfdHlwZSwKKyAgICAgICJnbG9i YWxfc3RydWN0X2ZpXzQiKTsKKworICAgIGdjY19qaXRfZmllbGQgKmYxID0gZ2NjX2ppdF9jb250 ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAgIDAsCisJCQkJCQkgICBmbG9hdF90eXBlLAor CQkJCQkJICAgImYiKTsKKyAgICBnY2Nfaml0X2ZpZWxkICpmMiA9IGdjY19qaXRfY29udGV4dF9u ZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgICAwLAorCQkJCQkJICAgaW50X3R5cGUsCisJCQkJCQkg ICAiaSIpOyAgICAKKyAgICAKKyAgICBnY2Nfaml0X3J2YWx1ZSAqdmFsc1tdID0geyAwLCAwfTsK KyAgICBnY2Nfaml0X2ZpZWxkICpmaWVsZHNbXSA9IHtmMSwgZjJ9OworICAgIAorICAgIGdjY19q aXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1Y3RvcgorICAgICAg KGN0eHQsIDAsCisgICAgICAgc3RydWN0X2ZpX3R5cGUsCisgICAgICAgMiwKKyAgICAgICBmaWVs ZHMsCisgICAgICAgdmFscyk7CisgICAgCisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxp emVyX3J2YWx1ZSAoZm9vLCBjdG9yKTsKKyAgfQorICB7IC8qIHN0cnVjdCBmaSBmb28gPSB7Lmkg PSAwfTsKKworICAgICAgIEkuZS4gIndyb25nIiBvcmRlciBvZiBmaWVsZHMuCisgICAgICAgTnVs bCBpbml0IHZhbHVlcy4gKi8KKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gZ2NjX2ppdF9jb250 ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFM X0VYUE9SVEVELAorICAgICAgc3RydWN0X2ZpX3R5cGUsCisgICAgICAiZ2xvYmFsX3N0cnVjdF9m aV81Iik7CisKKyAgICBnY2Nfaml0X2ZpZWxkICpmMiA9IGdjY19qaXRfY29udGV4dF9uZXdfZmll bGQgKGN0eHQsCisJCQkJCQkgICAwLAorCQkJCQkJICAgaW50X3R5cGUsCisJCQkJCQkgICAiaSIp OyAgICAKKyAgICAKKyAgICBnY2Nfaml0X3J2YWx1ZSAqdmFsc1tdID0gezB9OworICAgIGdjY19q aXRfZmllbGQgKmZpZWxkc1tdID0ge2YyfTsKKyAgICAKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY3Rv ciA9IGdjY19qaXRfY29udGV4dF9uZXdfY29uc3RydWN0b3IKKyAgICAgIChjdHh0LCAwLAorICAg ICAgIHN0cnVjdF9maV90eXBlLAorICAgICAgIDEsCisgICAgICAgZmllbGRzLAorICAgICAgIHZh bHMpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywgY3Rv cik7CisgIH0KKyAgeyAvKiBzdHJ1Y3QgZmkgZm9vID0ge307IChudWxsIGluaXQpCisKKyAgICAg ICBOdWxsIGZpZWxkcyBhbmQgdmFsdWVzLiAqLworICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSBn Y2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0ND X0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBzdHJ1Y3RfZmlfdHlwZSwKKyAgICAgICJnbG9i YWxfc3RydWN0X2ZpXzYiKTsKKworICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9j b250ZXh0X25ld19jb25zdHJ1Y3RvcgorICAgICAgKGN0eHQsIDAsCisgICAgICAgc3RydWN0X2Zp X3R5cGUsCisgICAgICAgMCwKKyAgICAgICAwLAorICAgICAgIDApOworICAgIGdjY19qaXRfZ2xv YmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywgY3Rvcik7CisgIH0KKyAgeyAvKiBzdHJ1 Y3QgZmkgZm9vID0gezIgKiAyLCAzfTsgKi8KKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gZ2Nj X2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19K SVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgc3RydWN0X2ZpX3R5cGUsCisgICAgICAiZ2xvYmFs X3N0cnVjdF9maV8zIik7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqZnZhbCA9IGdjY19qaXRfY29u dGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGZsb2F0X3R5cGUsIDIpOwor ICAgIGdjY19qaXRfcnZhbHVlICpmdmFsMiA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zy b21faW50ICgKKyAgICAgIGN0eHQsIGZsb2F0X3R5cGUsIDIpOworICAgIGdjY19qaXRfcnZhbHVl ICppdmFsID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4 dCwgaW50X3R5cGUsIDMpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsX211bCA9IGdjY19qaXRf Y29udGV4dF9uZXdfYmluYXJ5X29wIChjdHh0LCAwLAorICAgICAgR0NDX0pJVF9CSU5BUllfT1Bf TVVMVCwKKyAgICAgIGZsb2F0X3R5cGUsCisgICAgICBmdmFsLAorICAgICAgZnZhbDIpOworICAg IAorICAgIGdjY19qaXRfZmllbGQgKmYxID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4 dCwKKwkJCQkJCSAgIDAsCisJCQkJCQkgICBmbG9hdF90eXBlLAorCQkJCQkJICAgImYiKTsKKyAg ICBnY2Nfaml0X2ZpZWxkICpmMiA9IGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJ CQkJCQkgICAwLAorCQkJCQkJICAgaW50X3R5cGUsCisJCQkJCQkgICAiaSIpOyAgICAKKyAgICAK KyAgICBnY2Nfaml0X3J2YWx1ZSAqdmFsc1tdID0geyBydmFsX211bCwgaXZhbH07CisgICAgZ2Nj X2ppdF9maWVsZCAqZmllbGRzW10gPSB7ZjEsIGYyfTsKKyAgICAKKyAgICBnY2Nfaml0X3J2YWx1 ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfY29uc3RydWN0b3IKKyAgICAgIChjdHh0LCAw LAorICAgICAgIHN0cnVjdF9maV90eXBlLAorICAgICAgIDIsCisgICAgICAgZmllbGRzLAorICAg ICAgIHZhbHMpOworICAgIAorICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFs dWUgKGZvbywgY3Rvcik7CisgIH0KKyAgeyAvKiB1bmlvbiB1YmFyIGZvbyA9IHsuZmYgPSAzfTsg Ki8KKyAgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9IGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFs ICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAg ICAgIHViYXIsCisgICAgICAiZ2xvYmFsX3VuaW9uX3Vmb29fZmYzIik7CisgICAgIAorICAgICBn Y2Nfaml0X2ZpZWxkICpmMSA9IGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJ CQkgICAgMCwKKwkJCQkJCSAgICBmbG9hdF90eXBlLAorCQkJCQkJICAgICJmZiIpOworICAgICBn Y2Nfaml0X3J2YWx1ZSAqZnZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50 ICgKKyAgICAgICBjdHh0LCBmbG9hdF90eXBlLCAzKTsKKyAgICAgCisgICAgIGdjY19qaXRfcnZh bHVlICp2YWxzW10gPSB7ZnZhbH07CisgICAgIGdjY19qaXRfZmllbGQgKmZpZWxkc1tdID0ge2Yx fTsKKworICAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfY29u c3RydWN0b3IgKAorICAgICAgIGN0eHQsCisgICAgICAgMCwKKyAgICAgICB1YmFyLAorICAgICAg IDEsCisgICAgICAgZmllbGRzLAorICAgICAgIHZhbHMpOworICAgICAKKyAgICAgZ2NjX2ppdF9n bG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLCBjdG9yKTsKKyAgfQorICB7IC8qIGlu dCBmb28gPSAzOyAqLworICAgIGdjY19qaXRfcnZhbHVlICpydmFsID0gZ2NjX2ppdF9jb250ZXh0 X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDMpOyAKKyAgICBn Y2Nfaml0X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAg IGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIGludF90 eXBlLAorICAgICAgImdsb2JhbF9pbnQxXzMiKTsgCisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2lu aXRpYWxpemVyX3J2YWx1ZSAoZm9vLAorICAgICAgcnZhbCk7CisgIH0KKyAgeyAvKiBUcnkgdGhl IGFib3ZlLCBidXQgd2l0aCBvcHBvc2l0ZSBvcmRlciBvZiBnbG9iYWwgYW5kIGxpdGVyYWwgY2Fs bHMgKi8KKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xv YmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwK KyAgICAgIGludF90eXBlLAorICAgICAgImdsb2JhbF9pbnQyXzMiKTsKKyAgICBnY2Nfaml0X3J2 YWx1ZSAqcnZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAg IGN0eHQsIGludF90eXBlLCAzKTsgICAgCisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxp emVyX3J2YWx1ZSAoZm9vLAorICAgICAgcnZhbCk7CisgIH0KKyAgeyAvKiBpbnQgZm9vID0gMyAq ICgzICsgMykgKi8KKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9u ZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBP UlRFRCwKKyAgICAgIGludF90eXBlLAorICAgICAgImdsb2JhbF9pbnQzXzE4Iik7CisgICAgZ2Nj X2ppdF9ydmFsdWUgKnJ2YWwzXzAgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2lu dCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwz XzEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBp bnRfdHlwZSwgMyk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwzXzIgPSBnY2Nfaml0X2NvbnRl eHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7CisgICAg Z2NjX2ppdF9ydmFsdWUgKnJ2YWxfcGx1cyA9IGdjY19qaXRfY29udGV4dF9uZXdfYmluYXJ5X29w IChjdHh0LCAwLAorICAgICAgR0NDX0pJVF9CSU5BUllfT1BfUExVUywKKyAgICAgIGludF90eXBl LAorICAgICAgcnZhbDNfMCwKKyAgICAgIHJ2YWwzXzEpOworICAgIGdjY19qaXRfcnZhbHVlICpy dmFsX211bCA9IGdjY19qaXRfY29udGV4dF9uZXdfYmluYXJ5X29wIChjdHh0LCAwLAorICAgICAg R0NDX0pJVF9CSU5BUllfT1BfTVVMVCwKKyAgICAgIGludF90eXBlLAorICAgICAgcnZhbF9wbHVz LAorICAgICAgcnZhbDNfMik7CisgICAgCisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxp emVyX3J2YWx1ZSAoZm9vLAorICAgICAgcnZhbF9tdWwpOworICB9CisgIHsgLyogaW50IGZvbyA9 IDM7IGludCAqcGZvbyA9ICZmb287ICovCisgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9ICBnY2Nf aml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJ VF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBpbnRfdHlwZSwKKyAgICAgICJnbG9iYWxfaW50NF8z Iik7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1 ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7ICAgIAorICAgIGdjY19qaXRf Z2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywKKyAgICAgIHJ2YWwpOworCisgICAg Z2NjX2ppdF9sdmFsdWUgKnBmb28gPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAg ICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgcGlu dF90eXBlLAorICAgICAgImdsb2JhbF9waW50NSIpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9p bml0aWFsaXplcl9ydmFsdWUgKHBmb28sCisgICAgICBnY2Nfaml0X2x2YWx1ZV9nZXRfYWRkcmVz cyAoZm9vLCAwKSk7CisgIH0KKyAgeyAvKiBpbnQgZm9vID0gMzsgaW50ICpwZm9vID0gJmZvbyAr IDE7ICovCisgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2ds b2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQs CisgICAgICBpbnRfdHlwZSwKKyAgICAgICJnbG9iYWxfaW50Nl8zIik7CisgICAgZ2NjX2ppdF9y dmFsdWUgKnJ2YWwgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAg ICBjdHh0LCBpbnRfdHlwZSwgMyk7ICAgIAorICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFs aXplcl9ydmFsdWUgKGZvbywKKyAgICAgIHJ2YWwpOworCisgICAgZ2NjX2ppdF9sdmFsdWUgKnBm b28gPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAg ICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgcGludF90eXBlLAorICAgICAgImds b2JhbF9waW50NyIpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUg KHBmb28sCisgICAgICBnY2Nfaml0X2x2YWx1ZV9nZXRfYWRkcmVzcyAoCisJZ2NjX2ppdF9jb250 ZXh0X25ld19hcnJheV9hY2Nlc3MoCisJICBjdHh0LAorCSAgMCwKKwkgIGdjY19qaXRfbHZhbHVl X2dldF9hZGRyZXNzKGZvbywgMCksCisJICBnY2Nfaml0X2NvbnRleHRfb25lKGN0eHQsIGludF90 eXBlKSksCisJMCkpOworICB9CisgIHsgLyogZG91YmxlIGZvbyA9IDM7ICovCisgICAgZ2NjX2pp dF9sdmFsdWUgKmRvdWJsZTEgPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorCWN0eHQs IE5VTEwsCisJR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisJZG91YmxlX3R5cGUsCisJImdsb2Jh bF9kb3VibGUxXzMiKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbCA9IGdjY19qaXRfY29udGV4 dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGRvdWJsZV90eXBlLCAzKTsKKyAg ICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChkb3VibGUxLAorICAgICAg cnZhbCk7CisgIH0KKyAgeyAvKiBkb3VibGUgZm9vID0gMyAqIDMgKyAzICovCisgICAgZ2NjX2pp dF9sdmFsdWUgKmRvdWJsZTEgPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorCWN0eHQs IE5VTEwsCisJR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisJZG91YmxlX3R5cGUsCisJImdsb2Jh bF9kb3VibGUyXzEyIik7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwgPSBnY2Nfaml0X2NvbnRl eHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBkb3VibGVfdHlwZSwgMyk7Cisg ICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfbXVsID0gZ2NjX2ppdF9jb250ZXh0X25ld19iaW5hcnlf b3AgKGN0eHQsIDAsCisgICAgICBHQ0NfSklUX0JJTkFSWV9PUF9NVUxULAorICAgICAgZG91Ymxl X3R5cGUsCisgICAgICBydmFsLAorICAgICAgcnZhbCk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2 YWxfcGx1cyA9IGdjY19qaXRfY29udGV4dF9uZXdfYmluYXJ5X29wIChjdHh0LCAwLAorICAgICAg R0NDX0pJVF9CSU5BUllfT1BfUExVUywKKyAgICAgIGRvdWJsZV90eXBlLAorICAgICAgcnZhbF9t dWwsCisgICAgICBydmFsKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZh bHVlIChkb3VibGUxLAorICAgICAgcnZhbF9wbHVzKTsKKyAgfQorICB7IC8qIGJvb2wgZm9vID0g MyArIDMgPD0gNjsgKi8KKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4 dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9F WFBPUlRFRCwKKyAgICAgIGJvb2xfdHlwZSwKKyAgICAgICJnbG9iYWxfYm9vbDFfMSIpOworICAg IGdjY19qaXRfcnZhbHVlICpydmFsM18wID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJv bV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDMpOworICAgIGdjY19qaXRfcnZhbHVlICpy dmFsM18xID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4 dCwgaW50X3R5cGUsIDMpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsNiA9IGdjY19qaXRfY29u dGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCA2KTsKKyAg ICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF9wbHVzID0gZ2NjX2ppdF9jb250ZXh0X25ld19iaW5hcnlf b3AgKGN0eHQsCisgICAgICAwLAorICAgICAgR0NDX0pJVF9CSU5BUllfT1BfUExVUywKKyAgICAg IGludF90eXBlLAorICAgICAgcnZhbDNfMCwKKyAgICAgIHJ2YWwzXzEpOworICAgIGdjY19qaXRf cnZhbHVlICpydmFsX2xlID0gZ2NjX2ppdF9jb250ZXh0X25ld19jb21wYXJpc29uIChjdHh0LAor ICAgICAgMCwKKyAgICAgIEdDQ19KSVRfQ09NUEFSSVNPTl9MRSwKKyAgICAgIHJ2YWxfcGx1cywK KyAgICAgIHJ2YWw2KTsKKyAgICAKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJf cnZhbHVlIChmb28sCisgICAgICBydmFsX2xlKTsKKyAgfQorICBnY2Nfaml0X2x2YWx1ZSAqZ2xv YmFsX2ludGFycl8xMjM0OworICB7IC8qIGludCBmb29bXSA9IHsxLDIsMyw0fTsgKi8KKworICAg IGdjY19qaXRfdHlwZSAqYXJyX3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X3R5cGUg KGN0eHQsCisJCQkJCQkJICAgICAwLAorCQkJCQkJCSAgICAgaW50X3R5cGUsCisJCQkJCQkJICAg ICA0KTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF8xID0gZ2NjX2ppdF9jb250ZXh0X25ld19y dmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDEpOworICAgIGdjY19qaXRf cnZhbHVlICpydmFsXzIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisg ICAgICBjdHh0LCBpbnRfdHlwZSwgMik7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfMyA9IGdj Y19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBl LCAzKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF80ID0gZ2NjX2ppdF9jb250ZXh0X25ld19y dmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDQpOworCisgICAgZ2NjX2pp dF9ydmFsdWUgKnZhbHVlc1tdID0ge3J2YWxfMSwgcnZhbF8yLCBydmFsXzMsIHJ2YWxfNH07Cisg ICAgCisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2NvbnN0 cnVjdG9yIChjdHh0LAorCQkJCQkJCSAgICAwLAorCQkJCQkJCSAgICBhcnJfdHlwZSwKKwkJCQkJ CQkgICAgNCwKKwkJCQkJCQkgICAgMCwKKwkJCQkJCQkgICAgdmFsdWVzKTsKKyAgICBnbG9iYWxf aW50YXJyXzEyMzQgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBO VUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBhcnJfdHlwZSwKKyAg ICAgICJnbG9iYWxfaW50YXJyXzEyMzQiKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlh bGl6ZXJfcnZhbHVlIChnbG9iYWxfaW50YXJyXzEyMzQsIGN0b3IpOworICB9CisgIHsgLyogZmxv YXQgZm9vWzRdID0gezEsMn07ICovCisKKyAgICBnY2Nfaml0X3R5cGUgKmFycl90eXBlID0gZ2Nj X2ppdF9jb250ZXh0X25ld19hcnJheV90eXBlIChjdHh0LAorCQkJCQkJCSAgICAgMCwKKwkJCQkJ CQkgICAgIGZsb2F0X3R5cGUsCisJCQkJCQkJICAgICA0KTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAq cnZhbF8xID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4 dCwgZmxvYXRfdHlwZSwgMSk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfMiA9IGdjY19qaXRf Y29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGZsb2F0X3R5cGUsIDIp OworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHVlc1tdID0ge3J2YWxfMSwgcnZhbF8yfTsKKyAg ICAKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfY29uc3Ry dWN0b3IgKGN0eHQsCisJCQkJCQkJICAgIDAsCisJCQkJCQkJICAgIGFycl90eXBlLAorCQkJCQkJ CSAgICAyLAorCQkJCQkJCSAgICAwLAorCQkJCQkJCSAgICB2YWx1ZXMpOworICAgIGdjY19qaXRf bHZhbHVlICpmb28gPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwg TlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgYXJyX3R5cGUsCisg ICAgICAiZ2xvYmFsX2Zsb2F0YXJyXzEyIik7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRp YWxpemVyX3J2YWx1ZSAoZm9vLCBjdG9yKTsKKyAgfQorICB7IC8qIGZsb2F0IGZvb1s0XSA9IHsx LDIsMH07IChudWxsIGluaXQpICovCisKKyAgICBnY2Nfaml0X3R5cGUgKmFycl90eXBlID0gZ2Nj X2ppdF9jb250ZXh0X25ld19hcnJheV90eXBlIChjdHh0LAorCQkJCQkJCSAgICAgMCwKKwkJCQkJ CQkgICAgIGZsb2F0X3R5cGUsCisJCQkJCQkJICAgICA0KTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAq cnZhbF8xID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4 dCwgZmxvYXRfdHlwZSwgMSk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfMiA9IGdjY19qaXRf Y29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGZsb2F0X3R5cGUsIDIp OworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHVlc1tdID0ge3J2YWxfMSwgcnZhbF8yLCAwfTsK KyAgICAKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfY29u c3RydWN0b3IgKGN0eHQsCisJCQkJCQkJICAgIDAsCisJCQkJCQkJICAgIGFycl90eXBlLAorCQkJ CQkJCSAgICAyLAorCQkJCQkJCSAgICAwLAorCQkJCQkJCSAgICB2YWx1ZXMpOworICAgIGdjY19q aXRfbHZhbHVlICpmb28gPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4 dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgYXJyX3R5cGUs CisgICAgICAiZ2xvYmFsX2Zsb2F0YXJyXzEyMCIpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9p bml0aWFsaXplcl9ydmFsdWUgKGZvbywgY3Rvcik7CisgIH0KKyAgeyAvKiBmbG9hdCBmb29bNF0g PSB7fTsgKG51bGwgaW5pdCkgKi8KKworICAgIGdjY19qaXRfdHlwZSAqYXJyX3R5cGUgPSBnY2Nf aml0X2NvbnRleHRfbmV3X2FycmF5X3R5cGUgKGN0eHQsCisJCQkJCQkJICAgICAwLAorCQkJCQkJ CSAgICAgZmxvYXRfdHlwZSwKKwkJCQkJCQkgICAgIDQpOworICAgIAorICAgIGdjY19qaXRfcnZh bHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1Y3RvciAoY3R4dCwKKwkJCQkJ CQkgICAgMCwKKwkJCQkJCQkgICAgYXJyX3R5cGUsCisJCQkJCQkJICAgIDAsCisJCQkJCQkJICAg IDAsCisJCQkJCQkJICAgIDApOworICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSAgZ2NjX2ppdF9j b250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xP QkFMX0VYUE9SVEVELAorICAgICAgYXJyX3R5cGUsCisgICAgICAiZ2xvYmFsX2Zsb2F0YXJyXzAw MDAiKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sIGN0 b3IpOworICB9CisgIHsgLyogZmxvYXQgZm9vWzRdID0ge05VTEwgLCBOVUxMLCAzLCBOVUxMfTsg KG51bGwgaW5pdCkgKi8KKworICAgIGdjY19qaXRfdHlwZSAqYXJyX3R5cGUgPSBnY2Nfaml0X2Nv bnRleHRfbmV3X2FycmF5X3R5cGUgKGN0eHQsCisJCQkJCQkJICAgICAwLAorCQkJCQkJCSAgICAg ZmxvYXRfdHlwZSwKKwkJCQkJCQkgICAgIDgpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsMyA9 IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGZsb2F0 X3R5cGUsIDMpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsNSA9IGdjY19qaXRfY29udGV4dF9u ZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGZsb2F0X3R5cGUsIDUpOworICAgIGdj Y19qaXRfcnZhbHVlICpydmFsNiA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50 ICgKKyAgICAgIGN0eHQsIGZsb2F0X3R5cGUsIDYpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnZh bHVlc1tdID0gezAsIDAsIHJ2YWwzLCAwLCBydmFsNSwgcnZhbDYsIDAgfTsKKyAgICAKKyAgICBn Y2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfY29uc3RydWN0b3IgKGN0 eHQsCisJCQkJCQkJICAgIDAsCisJCQkJCQkJICAgIGFycl90eXBlLAorCQkJCQkJCSAgICA3LAor CQkJCQkJCSAgICAwLAorCQkJCQkJCSAgICB2YWx1ZXMpOworICAgIGdjY19qaXRfbHZhbHVlICpm b28gPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAg ICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgYXJyX3R5cGUsCisgICAgICAiZ2xv YmFsX2Zsb2F0YXJyXzAwMzA1NjAwIik7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxp emVyX3J2YWx1ZSAoZm9vLCBjdG9yKTsKKyAgfQorICB7IC8qIGludCAqZm9vWzRdID0gezAsICZn bG9iYWxfaW50YXJyXzEyMzRbMV19OyAqLworCisgICAgZ2NjX2ppdF90eXBlICphcnJfdHlwZSA9 IGdjY19qaXRfY29udGV4dF9uZXdfYXJyYXlfdHlwZSAoY3R4dCwKKwkJCQkJCQkgICAgIDAsCisJ CQkJCQkJICAgICBwaW50X3R5cGUsCisJCQkJCQkJICAgICA0KTsKKyAgICBnY2Nfaml0X3J2YWx1 ZSAqcnZhbF8xID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAg Y3R4dCwgaW50X3R5cGUsIDEpOworICAgIGdjY19qaXRfbHZhbHVlICphcnJfYWNjZXNzID0gZ2Nj X2ppdF9jb250ZXh0X25ld19hcnJheV9hY2Nlc3MgKAorICAgICAgY3R4dCwKKyAgICAgIDAsCisg ICAgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKGdsb2JhbF9pbnRhcnJfMTIzNCksCisgICAg ICBydmFsXzEpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsXzIgPSBnY2Nfaml0X2x2YWx1ZV9n ZXRfYWRkcmVzcyAoYXJyX2FjY2VzcywgMCk7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqdmFsdWVz W10gPSB7MCwgcnZhbF8yfTsKKyAgICAKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19q aXRfY29udGV4dF9uZXdfY29uc3RydWN0b3IgKGN0eHQsCisJCQkJCQkJICAgIDAsCisJCQkJCQkJ ICAgIGFycl90eXBlLAorCQkJCQkJCSAgICAyLAorCQkJCQkJCSAgICAwLAorCQkJCQkJCSAgICB2 YWx1ZXMpOworICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSAgZ2NjX2ppdF9jb250ZXh0X25ld19n bG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVE LAorICAgICAgYXJyX3R5cGUsCisgICAgICAiZ2xvYmFsX3BpbnRhcnJfeDJ4eCIpOworICAgIGdj Y19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywgY3Rvcik7CisgIH0KKyAg eyAvKiBjaGFyIGZvb1s0XSA9IHsncScsJ3cnLCdlJywwfTsgKi8KKworICAgIGdjY19qaXRfdHlw ZSAqYXJyX3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X3R5cGUgKGN0eHQsCisJCQkJ CQkJICAgICAwLAorCQkJCQkJCSAgICAgY2hhcl90eXBlLAorCQkJCQkJCSAgICAgNCk7CisKKwor ICAgIGdjY19qaXRfcnZhbHVlICpydmFsc1tdID0geworICAgICAgZ2NjX2ppdF9jb250ZXh0X25l d19ydmFsdWVfZnJvbV9pbnQgKCBjdHh0LCBjaGFyX3R5cGUsICdxJyksCisgICAgICBnY2Nfaml0 X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoIGN0eHQsIGNoYXJfdHlwZSwgJ3cnKSwKKyAg ICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICggY3R4dCwgY2hhcl90eXBl LCAnZScpLAorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKCBjdHh0 LCBjaGFyX3R5cGUsIDApICAgICAKKyAgICB9OworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3Ig PSBnY2Nfaml0X2NvbnRleHRfbmV3X2NvbnN0cnVjdG9yIChjdHh0LAorCQkJCQkJCSAgICAwLAor CQkJCQkJCSAgICBhcnJfdHlwZSwKKwkJCQkJCQkgICAgNCwKKwkJCQkJCQkgICAgMCwKKwkJCQkJ CQkgICAgcnZhbHMpOworICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSAgZ2NjX2ppdF9jb250ZXh0 X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VY UE9SVEVELAorICAgICAgYXJyX3R5cGUsCisgICAgICAiZ2xvYmFsX2NoYXJhcnJfcXdlIik7Cisg ICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLCBjdG9yKTsKKyAg fQorICB7IC8qIGludCBmb29bMl1bMl0gPSB7ezEsMn0sezMsNH19OyAqLworCisgICAgZ2NjX2pp dF90eXBlICpyb3dfdHlwZSA9IGdjY19qaXRfY29udGV4dF9uZXdfYXJyYXlfdHlwZSAoY3R4dCwK KwkJCQkJCQkgICAgIDAsCisJCQkJCQkJICAgICBpbnRfdHlwZSwKKwkJCQkJCQkgICAgIDIpOwor ICAgIAorICAgIGdjY19qaXRfdHlwZSAqYXJyX3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2Fy cmF5X3R5cGUgKGN0eHQsCisJCQkJCQkJICAgICAwLAorCQkJCQkJCSAgICAgcm93X3R5cGUsCisJ CQkJCQkJICAgICAyKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbHNfcm93MFtdID0geworICAg ICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKCBjdHh0LCBpbnRfdHlwZSwg MSksCisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoIGN0eHQsIGlu dF90eXBlLCAyKQorICAgIH07CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxzX3JvdzFbXSA9IHsK KyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICggY3R4dCwgaW50X3R5 cGUsIDMpLAorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKCBjdHh0 LCBpbnRfdHlwZSwgNCkKKyAgICB9OworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3Jfcm93MCA9 CisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2NvbnN0cnVjdG9yIChjdHh0LAorCQkJCSAgICAg ICAwLAorCQkJCSAgICAgICByb3dfdHlwZSwKKwkJCQkgICAgICAgMiwKKwkJCQkgICAgICAgMCwK KwkJCQkgICAgICAgcnZhbHNfcm93MCk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3Jfcm93MSA9 CisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2NvbnN0cnVjdG9yIChjdHh0LAorCQkJCSAgICAg ICAwLAorCQkJCSAgICAgICByb3dfdHlwZSwKKwkJCQkgICAgICAgMiwKKwkJCQkgICAgICAgMCwK KwkJCQkgICAgICAgcnZhbHNfcm93MSk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3JzX3Jvd1td ID0ge2N0b3Jfcm93MCwgY3Rvcl9yb3cxfTsKKyAgICAKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY3Rv cl9hcnIgPQorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1Y3RvciAoY3R4dCwKKwkJ CQkgICAgICAgMCwKKwkJCQkgICAgICAgYXJyX3R5cGUsCisJCQkJICAgICAgIDIsCisJCQkJICAg ICAgIDAsCisJCQkJICAgICAgIGN0b3JzX3Jvdyk7CisgICAgCisgICAgZ2NjX2ppdF9sdmFsdWUg KmZvbyA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAor ICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBhcnJfdHlwZSwKKyAgICAgICJn bG9iYWxfaW50MngybWF0cml4XzEyMzQiKTsKKyAgICAKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRf aW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sIGN0b3JfYXJyKTsKKyAgfSAgCisgIHsgLyogY29uc3Qg Y2hhciAqZm9vWzRdID0geyJxd2UiLCAiYXNkIn07ICovCisKKyAgICBnY2Nfaml0X3R5cGUgKmFy cl90eXBlID0gZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV90eXBlIChjdHh0LAorCQkJCQkJCSAg ICAgMCwKKwkJCQkJCQkgICAgIGNwY2hhcl90eXBlLAorCQkJCQkJCSAgICAgNCk7CisKKworICAg IGdjY19qaXRfcnZhbHVlICpydmFsc1tdID0geworICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19z dHJpbmdfbGl0ZXJhbCAoY3R4dCwgInF3ZSIpLAorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19z dHJpbmdfbGl0ZXJhbCAoY3R4dCwgImFzZCIpCisgICAgfTsKKworICAgIGdjY19qaXRfcnZhbHVl ICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1Y3RvciAoY3R4dCwKKwkJCQkJCQkg ICAgMCwKKwkJCQkJCQkgICAgYXJyX3R5cGUsCisJCQkJCQkJICAgIDIsCisJCQkJCQkJICAgIDAs CisJCQkJCQkJICAgIHJ2YWxzKTsKKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRf Y29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dM T0JBTF9FWFBPUlRFRCwKKyAgICAgIGFycl90eXBlLAorICAgICAgImdsb2JhbF9jcGNoYXJhcnJf cXdlX2FzZCIpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZv bywgY3Rvcik7CisgIH0KKyAgeyAvKiBjb25zdCBpbnQgZm9vID0gMzsKKyAgICAgICBpbnQgYmFy ID0gZm9vOworICAgICAqLworICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSAgZ2NjX2ppdF9jb250 ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFM X0VYUE9SVEVELAorICAgICAgZ2NjX2ppdF90eXBlX2dldF9jb25zdCAoaW50X3R5cGUpLAorICAg ICAgImdsb2JhbF9jb25zdF9pbnRfMyIpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsMyA9IGdj Y19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBl LCAzKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sCisJ cnZhbDMpOworICAgIGdjY19qaXRfbHZhbHVlICpiYXIgPSAgZ2NjX2ppdF9jb250ZXh0X25ld19n bG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVE LAorICAgICAgaW50X3R5cGUsCisgICAgICAiZ2xvYmFsX2x2YWx1ZWluaXRfaW50XzMiKTsgCisg ICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoYmFyLAorCQkJCQkgICBn Y2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKGZvbykpOworICB9CisgIHsgLyogaW50IGZvbyA9IDMg KiAyOworICAgICAgIGludCBhcnJbXSA9IHsxLDIsMyw0fTsKKyAgICAgICBpbnQgKmJhciA9ICZh cnJbMl0gKyAxCisKKyAgICAgICBFeGFtcGxlIGluIHRoZSBkb2NzLgorICAgICAqLworCisgICAg Z2NjX2ppdF90eXBlICphcnJfdHlwZSA9IGdjY19qaXRfY29udGV4dF9uZXdfYXJyYXlfdHlwZSAo Y3R4dCwKKwkJCQkJCQkgICAgIDAsCisJCQkJCQkJICAgICBpbnRfdHlwZSwKKwkJCQkJCQkgICAg IDQpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsXzEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2 YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMSk7CisgICAgZ2NjX2ppdF9y dmFsdWUgKnJ2YWxfMiA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAg ICAgIGN0eHQsIGludF90eXBlLCAyKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF8zID0gZ2Nj X2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUs IDMpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsXzQgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2 YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgNCk7CisKKyAgICBnY2Nfaml0 X3J2YWx1ZSAqdmFsdWVzW10gPSB7cnZhbF8xLCBydmFsXzIsIHJ2YWxfMywgcnZhbF80fTsKKyAg ICAKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfY29uc3Ry dWN0b3IgKGN0eHQsCisJCQkJCQkJICAgIDAsCisJCQkJCQkJICAgIGFycl90eXBlLAorCQkJCQkJ CSAgICA0LAorCQkJCQkJCSAgICAwLAorCQkJCQkJCSAgICB2YWx1ZXMpOworICAgIGdjY19qaXRf bHZhbHVlICpnbG9iYWxfaW50YXJyXzEyMzQgPQorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19n bG9iYWwgKGN0eHQsIE5VTEwsCisJCQkJICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKwkJCQkg IGFycl90eXBlLAorCQkJCSAgImdsb2JhbF9pbnRhcnJfMTIzNF8yIik7CisgICAgCisgICAgZ2Nj X2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZ2xvYmFsX2ludGFycl8xMjM0LCBj dG9yKTsKKworICAgIGdjY19qaXRfbHZhbHVlICpiYXIgPQorICAgICAgZ2NjX2ppdF9jb250ZXh0 X25ld19nbG9iYWwgKGN0eHQsIE5VTEwsCisJCQkJICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwK KwkJCQkgIGludF90eXBlLAorCQkJCSAgImdsb2JhbF9pbnRfNiIpOworICAgIGdjY19qaXRfZ2xv YmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUKKyAgICAgIChiYXIsCisgICAgICAgZ2NjX2ppdF9j b250ZXh0X25ld19iaW5hcnlfb3AKKwkgKGN0eHQsIDAsIEdDQ19KSVRfQklOQVJZX09QX01VTFQs CisJICBpbnRfdHlwZSwKKwkgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50IChj dHh0LCBpbnRfdHlwZSwgMyksCisJICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2lu dCAoY3R4dCwgaW50X3R5cGUsIDIpKSk7CisgICAgCisgICAgZ2NjX2ppdF9sdmFsdWUgKnBmb28g PQorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKGN0eHQsIE5VTEwsCisJCQkJICBH Q0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKwkJCQkgIGdjY19qaXRfdHlwZV9nZXRfcG9pbnRlciAo aW50X3R5cGUpLAorCQkJCSAgImdsb2JhbF9waW50XzQiKTsKKyAgICAvKiBpbnQgKmJhciA9ICZh cnJbMl0gKyAxOworCisgICAgICAgSW4gcHJhY3RpY2Ugd2UgY291bGQganVzdCBkbyAmZm9vWzNd CisgICAgICAgYnV0IGp1c3QgcHJvdmUgZm9sZGluZyB0aGlzIHdvcmtzLiAqLworICAgIGdjY19q aXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKAorICAgICAgIHBmb28sCisgICAgICAg Z2NjX2ppdF9sdmFsdWVfZ2V0X2FkZHJlc3MgKAorICAgICAgICAgZ2NjX2ppdF9jb250ZXh0X25l d19hcnJheV9hY2Nlc3MgKAorICAgICAgICAgICBjdHh0LCAwLCAKKyAgICAgICAgICAgZ2NjX2pp dF9sdmFsdWVfZ2V0X2FkZHJlc3MgKAorCSAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9h Y2Nlc3MgKAorCSAgICAgICBjdHh0LCAwLAorCSAgICAgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFs dWUgKGdsb2JhbF9pbnRhcnJfMTIzNCksCisJICAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZh bHVlX2Zyb21faW50IChjdHh0LCBpbnRfdHlwZSwgMikpLAorCSAgICAgICAwKSwKKwkgICBnY2Nf aml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoY3R4dCwgaW50X3R5cGUsIDEpKSwKKwkg ICAwKSk7CisgIH0KKyAgeyAvKiAgc3RhdGljIGludCBiYXIgPSAxMTsKKyAgICAgICAgaW50IGZv byAoKSB7IHJldHVybiBiYXI7IH0gKi8KKyAgICAKKyAgICBnY2Nfaml0X2x2YWx1ZSAqYmFyID0g IGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBH Q0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIGludF90eXBlLAorICAgICAgImdsb2JhbF9z dGF0aWNfaW50XzExIik7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwxID0gZ2NjX2ppdF9jb250 ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDExKTsKKyAg ICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChiYXIsCisJcnZhbDEpOwor CisgICAgZ2NjX2ppdF9mdW5jdGlvbiAqZm4xMSA9CisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3 X2Z1bmN0aW9uIChjdHh0LAorCQkJCSAgICAwLAorCQkJCSAgICBHQ0NfSklUX0ZVTkNUSU9OX0VY UE9SVEVELAorCQkJCSAgICBpbnRfdHlwZSwKKwkJCQkgICAgImZuX2ludF8xMSIsCisJCQkJICAg IDAsCisJCQkJICAgIDAsCisJCQkJICAgIDApOworICAgIGdjY19qaXRfYmxvY2sgKmJsb2NrID0g Z2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZuMTEsICJzdGFydCIpOworCisgICAgZ2NjX2pp dF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKGJsb2NrLAorCQkJCSAgIDAsCisJCQkJICAgZ2NjX2pp dF9sdmFsdWVfYXNfcnZhbHVlKGJhcikpOworCQkJCQkJCSAgCisgIH0KKyAgeyAvKiBzdGF0aWMg Y29uc3QgaW50IGNiYXIgPSAxMTsKKyAgICAgICBpbnQgY2ZvbyAoKSB7IHJldHVybiBjYmFyOyB9 ICovCisKKyAgICBnY2Nfaml0X2x2YWx1ZSAqYmFyID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xv YmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwK KyAgICAgIGdjY19qaXRfdHlwZV9nZXRfY29uc3QgKGludF90eXBlKSwKKyAgICAgICJnbG9iYWxf c3RhdGljX2NpbnRfMTEiKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbDEgPSBnY2Nfaml0X2Nv bnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMTEpOwor ICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGJhciwKKwlydmFsMSk7 CisKKyAgICBnY2Nfaml0X2Z1bmN0aW9uICpmbjExID0KKyAgICAgIGdjY19qaXRfY29udGV4dF9u ZXdfZnVuY3Rpb24gKGN0eHQsCisJCQkJICAgIDAsCisJCQkJICAgIEdDQ19KSVRfRlVOQ1RJT05f RVhQT1JURUQsCisJCQkJICAgIGludF90eXBlLAorCQkJCSAgICAiZm5fY2ludF8xMSIsCisJCQkJ ICAgIDAsCisJCQkJICAgIDAsCisJCQkJICAgIDApOworICAgIGdjY19qaXRfYmxvY2sgKmJsb2Nr ID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZuMTEsICJzdGFydCIpOworCisgICAgZ2Nj X2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKGJsb2NrLAorCQkJCSAgIDAsCisJCQkJICAgZ2Nj X2ppdF9sdmFsdWVfYXNfcnZhbHVlKGJhcikpOworICB9CisgIHsgLyogc3RhdGljIGNvbnN0IGlu dCBjYmFyID0gMTI7CisgICAgICAgY29uc3QgaW50KiBjZm9vICgpIHsgcmV0dXJuICZjYmFyOyB9 ICovCisKKyAgICBnY2Nfaml0X2x2YWx1ZSAqYmFyID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xv YmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwK KyAgICAgIGdjY19qaXRfdHlwZV9nZXRfY29uc3QgKGludF90eXBlKSwKKyAgICAgICJnbG9iYWxf c3RhdGljX2NpbnRfMTIiKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbDEgPSBnY2Nfaml0X2Nv bnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMTIpOwor ICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGJhciwKKwlydmFsMSk7 CisKKyAgICBnY2Nfaml0X2Z1bmN0aW9uICpmbjExID0KKyAgICAgIGdjY19qaXRfY29udGV4dF9u ZXdfZnVuY3Rpb24gKGN0eHQsCisJCQkJICAgIDAsCisJCQkJICAgIEdDQ19KSVRfRlVOQ1RJT05f RVhQT1JURUQsCisJCQkJICAgIGdjY19qaXRfdHlwZV9nZXRfcG9pbnRlcihpbnRfdHlwZSksCisJ CQkJICAgICJmbl9jaW50XzEyIiwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCk7 CisKKyAgICBnY2Nfaml0X2Jsb2NrICpibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2Nr IChmbjExLCAic3RhcnQiKTsKKworICAgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuIChi bG9jaywKKwkJCQkgICAwLAorCQkJCSAgIGdjY19qaXRfbHZhbHVlX2dldF9hZGRyZXNzIChiYXIs IDApKTsKKyAgfQorICB7IC8qIGNvbnN0IGludCBmb28gPSAzOworICAgICAgIHNob3J0IGJhciA9 IChzaG9ydClmb287CisKKyAgICAgICBBc3N1cmUgY2FzdHMgZm9sZAorICAgICAqLworICAgIGdj Y19qaXRfbHZhbHVlICpmb28gPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAg Y3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgZ2NjX2pp dF90eXBlX2dldF9jb25zdCAoaW50X3R5cGUpLAorICAgICAgImdsb2JhbF9jb25zdF9pbnRfNCIp OworICAgIGdjY19qaXRfcnZhbHVlICpydmFsMyA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVl X2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAzKTsKKyAgICBnY2Nfaml0X2dsb2Jh bF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sCisJcnZhbDMpOworICAgIGdjY19qaXRfbHZh bHVlICpiYXIgPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVM TCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgc2hvcnRfdHlwZSwKKyAg ICAgICJnbG9iYWxfbHZhbHVlaW5pdF9zaG9ydF8zIik7IAorICAgIGdjY19qaXRfZ2xvYmFsX3Nl dF9pbml0aWFsaXplcl9ydmFsdWUgKAorICAgICAgYmFyLAorICAgICAgZ2NjX2ppdF9jb250ZXh0 X25ld19jYXN0KCBjdHh0LCAwLAorCQkJCWdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZSAoZm9vKSwK KwkJCQlzaG9ydF90eXBlKSk7CisgIH0KKyAgeyAvKiBjb25zdCBpbnQgZm9vID0gMzsKKyAgICAg ICBjb25zdCBpbnQgY29uc3QgKmJhciA9ICZmb287ICovCisgICAgZ2NjX2ppdF9sdmFsdWUgKmZv byA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAg ICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBnY2Nfaml0X3R5cGVfZ2V0X2NvbnN0 IChpbnRfdHlwZSksCisgICAgICAiZ2xvYmFsX2NvbnN0X2ludF82Iik7CisgICAgZ2NjX2ppdF9y dmFsdWUgKnJ2YWwzID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAg ICAgY3R4dCwgaW50X3R5cGUsIDMpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXpl cl9ydmFsdWUgKGZvbywKKwlydmFsMyk7CisgICAgZ2NjX2ppdF9sdmFsdWUgKmJhciA9ICBnY2Nf aml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJ VF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBnY2Nfaml0X3R5cGVfZ2V0X2NvbnN0ICgKKyAgICAg ICAgZ2NjX2ppdF90eXBlX2dldF9wb2ludGVyICgKKyAgICAgICAgICBnY2Nfaml0X3R5cGVfZ2V0 X2NvbnN0ICgKKwkgICAgaW50X3R5cGUpKSksCisgICAgICAiZ2xvYmFsX2x2YWx1ZWluaXRfY3Bj aW50XzMiKTsgCisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoCisg ICAgICBiYXIsCisgICAgICBnY2Nfaml0X2x2YWx1ZV9nZXRfYWRkcmVzcyAoZm9vLCAwKSk7Cisg IH0KKyAgeyAvKiBjb25zdCBpbnQgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDY0KSkpIGZvbyA9 IDM7CisgICAgICAgaW50IGJhciA9IGZvbzsKKworICAgICAgIEFzc3VyZSBhbGlnbmVtZW50IGRv ZXMgbm90IG1ha2UgdGhlIGNvbnN0YW50ICJtaXNzIgorICAgICAgIG9yIHNvbWV0aGluZyBzdHJh bmdlLgorICAgICAqLworICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSAgZ2NjX2ppdF9jb250ZXh0 X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VY UE9SVEVELAorICAgICAgZ2NjX2ppdF90eXBlX2dldF9jb25zdCAoZ2NjX2ppdF90eXBlX2dldF9h bGlnbmVkIChpbnRfdHlwZSwgNjQpKSwKKyAgICAgICJnbG9iYWxfY29uc3RfaW50XzciKTsKKyAg ICBnY2Nfaml0X3J2YWx1ZSAqcnZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21f aW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCA0KTsKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRf aW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sCisJcnZhbCk7CisgICAgZ2NjX2ppdF9sdmFsdWUgKmJh ciA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAg ICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBpbnRfdHlwZSwKKyAgICAgICJnbG9i YWxfbHZhbHVlaW5pdF9pbnRfNCIpOyAKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6 ZXJfcnZhbHVlIChiYXIsCisJCQkJCSAgIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZSAoZm9vKSk7 CisgIH0KKyAgeworICAgIC8qIHVuaW9uIHVwaW50c2l6ZSB7IHNpemVfdCBzOyBpbnQgKnAgfSB1 ID0gey5zID0gMHgwRUVGQkVFRn07ICovCisgICAgZ2NjX2ppdF9maWVsZCAqZjEgPSBnY2Nfaml0 X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJICAgMCwKKwkJCQkJCSAgIHNpemVfdHlw ZSwKKwkJCQkJCSAgICJzIik7CisgICAgZ2NjX2ppdF9maWVsZCAqZjIgPSBnY2Nfaml0X2NvbnRl eHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJICAgMCwKKwkJCQkJCSAgIHBpbnRfdHlwZSwKKwkJ CQkJCSAgICJwIik7CisgICAgZ2NjX2ppdF9maWVsZCAqZmllbGRzMVtdID0ge2YxLCBmMn07Cisg IAorICAgIGdjY19qaXRfdHlwZSAqdWJhciA9IGdjY19qaXRfY29udGV4dF9uZXdfdW5pb25fdHlw ZSAoY3R4dCwKKwkJCQkJCQkgMCwKKwkJCQkJCQkgInVwaW50c2l6ZSIsCisJCQkJCQkJIDIsCisJ CQkJCQkJIGZpZWxkczEpOworICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSAgZ2NjX2ppdF9jb250 ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFM X0VYUE9SVEVELAorICAgICAgZ2NjX2ppdF90eXBlX2dldF9jb25zdCAodWJhciksCisgICAgICAi Z2xvYmFsX2NvbnN0X3VwaW50c2l6ZV8xIik7CisKKyAgICAKKyAgICBnY2Nfaml0X2ZpZWxkICpm ZiA9IGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgICAwLAorCQkJCQkJ ICAgc2l6ZV90eXBlLAorCQkJCQkJICAgInMiKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqdmFsID0g Z2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9sb25nX2xvbmcgKAorICAgICAgY3R4dCwg c2l6ZV90eXBlLCAweEJBQUFBQkJFRUVFRkJFRUYpOworICAgICAKKyAgICBnY2Nfaml0X3J2YWx1 ZSAqdmFsc1tdID0ge3ZhbH07CisgICAgZ2NjX2ppdF9maWVsZCAqZmllbGRzMltdID0ge2ZmfTsK KworICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0KKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdf Y29uc3RydWN0b3IgKGN0eHQsCisJCQkJICAgICAgIDAsCisJCQkJICAgICAgIHViYXIsCisJCQkJ ICAgICAgIDEsCisJCQkJICAgICAgIGZpZWxkczIsCisJCQkJICAgICAgIHZhbHMpOworCisgICAg Z2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLCBjdG9yKTsKKyAgfQor fQorCitzdHJ1Y3QgZmkgeworICBmbG9hdCBmOworICBpbnQgaTsKK307CisKK3N0cnVjdCBiYXIx IHsKKyAgZmxvYXQgZmY7CisgIHN0cnVjdCBmaSBmaTsKKyAgaW50IGlpOworfTsKKwordW5pb24g dWJhcjEgeworICBmbG9hdCBmZjsKKyAgaW50IGlpOworfTsKKwordW5pb24gdXBpbnRzaXplIHsK KyAgc2l6ZV90IHM7CisgIGludCAqcDsKK307CisKK2ludCB0ZXN0X2FsaWduZWQ2NF93b3Jrc19p bl9saW5rZXJfMSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoNjQpKSkgPSAwOworaW50IHRlc3Rf YWxpZ25lZDY0X3dvcmtzX2luX2xpbmtlcl8yIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg2NCkp KSA9IDA7CisKK3ZvaWQKK3ZlcmlmeV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIGdjY19q aXRfcmVzdWx0ICpyZXN1bHQpCit7CisgIENIRUNLX05PTl9OVUxMIChyZXN1bHQpOworICBnY2Nf aml0X2NvbnRleHRfY29tcGlsZV90b19maWxlIChjdHh0LCBHQ0NfSklUX09VVFBVVF9LSU5EX09C SkVDVF9GSUxFLCAiYS5vdXQiKTsKKyAgeworICAgIHN0cnVjdCBmaSAqZmkgPSBnY2Nfaml0X3Jl c3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfc3RydWN0X2ZpXzEiKTsKKworICAgIENI RUNLX1ZBTFVFIChmaS0+ZiwgMik7CisgICAgQ0hFQ0tfVkFMVUUgKGZpLT5pLCAzKTsKKyAgfQor ICB7CisgICAgc3RydWN0IGZpICpmaSA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3Vs dCwgImdsb2JhbF9zdHJ1Y3RfZmlfMiIpOworCisgICAgQ0hFQ0tfVkFMVUUgKGZpLT5mLCAyKTsK KyAgICBDSEVDS19WQUxVRSAoZmktPmksIDMpOworICB9CisgIHsKKyAgICBzdHJ1Y3QgZmkgKmZp ID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX3N0cnVjdF9maV8z Iik7CisKKyAgICBDSEVDS19WQUxVRSAoZmktPmYsIDIgKiAyKTsKKyAgICBDSEVDS19WQUxVRSAo ZmktPmksIDMpOworICB9CisgIHsKKyAgICBzdHJ1Y3QgZmkgKmZpID0gZ2NjX2ppdF9yZXN1bHRf Z2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX3N0cnVjdF9maV80Iik7CisKKyAgICBDSEVDS19W QUxVRSAoZmktPmYsIDApOworICAgIENIRUNLX1ZBTFVFIChmaS0+aSwgMCk7CisgIH0KKyAgewor ICAgIHN0cnVjdCBmaSAqZmkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJn bG9iYWxfc3RydWN0X2ZpXzUiKTsKKworICAgIENIRUNLX1ZBTFVFIChmaS0+ZiwgMCk7CisgICAg Q0hFQ0tfVkFMVUUgKGZpLT5pLCAwKTsKKyAgfQorICB7CisgICAgc3RydWN0IGZpICpmaSA9IGdj Y19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9zdHJ1Y3RfZmlfNiIpOwor CisgICAgQ0hFQ0tfVkFMVUUgKGZpLT5mLCAwKTsKKyAgICBDSEVDS19WQUxVRSAoZmktPmksIDAp OworICB9ICAKKyAgeworICAgIHN0cnVjdCBiYXIxICpiYXIgPSBnY2Nfaml0X3Jlc3VsdF9nZXRf Z2xvYmFsIChyZXN1bHQsICJnbG9iYWxfc3RydWN0X2Jhcl8xIik7CisKKyAgICBDSEVDS19WQUxV RSAoYmFyLT5mZiwgMSk7CisgICAgQ0hFQ0tfVkFMVUUgKGJhci0+aWksIDQpOworICAgIENIRUNL X1ZBTFVFIChiYXItPmZpLmYsIDIpOworICAgIENIRUNLX1ZBTFVFIChiYXItPmZpLmksIDMpOwor CisgICAgYmFyID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX3N0 cnVjdF9iYXJfMiIpOworCisgICAgQ0hFQ0tfVkFMVUUgKGJhci0+ZmYsIDEpOworICAgIENIRUNL X1ZBTFVFIChiYXItPmlpLCA0KTsKKyAgICBDSEVDS19WQUxVRSAoYmFyLT5maS5mLCAyKTsKKyAg ICBDSEVDS19WQUxVRSAoYmFyLT5maS5pLCAzKTsKKyAgfQorICB7CisgICAgdW5pb24gdWJhcjEg KmZvbyA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwKKwkJCQkJCSAiZ2xvYmFs X3VuaW9uX3Vmb29fZmYzIik7CisgICAgQ0hFQ0tfVkFMVUUgKGZvby0+ZmYsIDMpOworICB9Cisg IHsKKyAgICBpbnQgKmZvbyA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImds b2JhbF9pbnQxXzMiKTsKKworICAgIENIRUNLX1ZBTFVFICgqZm9vLCAzKTsKKyAgfQorICB7Cisg ICAgaW50ICpmb28gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxf aW50Ml8zIik7CisKKyAgICBDSEVDS19WQUxVRSAoKmZvbywgMyk7CisgIH0KKyAgeworICAgIGlu dCAqZm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX2ludDNf MTgiKTsKKworICAgIENIRUNLX1ZBTFVFICgqZm9vLCAxOCk7CisgIH0KKyAgeworICAgIGludCAq Zm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX2ludDRfMyIp OworICAgIGludCAqKnBmb28gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJn bG9iYWxfcGludDUiKTsKKworICAgIENIRUNLX1ZBTFVFICgqZm9vLCAzKTsKKyAgICBDSEVDS19W QUxVRSAoZm9vLCAqcGZvbyk7CisgICAgQ0hFQ0tfVkFMVUUgKCoqcGZvbywgMyk7CisgIH0KKyAg eworICAgIGludCAqZm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xv YmFsX2ludDZfMyIpOworICAgIGludCAqKnBmb28gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFs IChyZXN1bHQsICJnbG9iYWxfcGludDciKTsKKworICAgIENIRUNLX1ZBTFVFICgqZm9vLCAzKTsK KyAgICBDSEVDS19WQUxVRSAoZm9vICsgMSwgKnBmb28pOworICAgIENIRUNLX1ZBTFVFICgqKCpw Zm9vIC0gMSksIDMpOworICB9CisgIHsKKyAgICBpbnQgKmZvbyA9IGdjY19qaXRfcmVzdWx0X2dl dF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9sdmFsdWVpbml0X2ludF8zIik7CisKKyAgICBDSEVD S19WQUxVRSAoKmZvbywgMyk7CisgIH0KKyAgeworICAgIGRvdWJsZSAqZm9vID0gZ2NjX2ppdF9y ZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX2RvdWJsZTFfMyIpOworCisgICAgQ0hF Q0tfVkFMVUUgKCpmb28sIDMpOworICB9CisgIHsKKyAgICBkb3VibGUgKmZvbyA9IGdjY19qaXRf cmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9kb3VibGUyXzEyIik7CisKKyAgICBD SEVDS19WQUxVRSAoKmZvbywgMTIpOworICB9CisgIHsKKyAgICBfQm9vbCAqZm9vID0gZ2NjX2pp dF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX2Jvb2wxXzEiKTsKKworICAgIENI RUNLX1ZBTFVFICgqZm9vLCAxKTsKKyAgfQorICB7CisgICAgaW50ICpmb28gPSBnY2Nfaml0X3Jl c3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfaW50YXJyXzEyMzQiKTsKKworICAgIENI RUNLX1ZBTFVFIChmb29bMF0sIDEpOworICAgIENIRUNLX1ZBTFVFIChmb29bMV0sIDIpOworICAg IENIRUNLX1ZBTFVFIChmb29bMl0sIDMpOworICAgIENIRUNLX1ZBTFVFIChmb29bM10sIDQpOwor ICB9CisgIHsKKyAgICBmbG9hdCAqZm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVz dWx0LCAiZ2xvYmFsX2Zsb2F0YXJyXzEyIik7CisKKyAgICBDSEVDS19WQUxVRSAoZm9vWzBdLCAx KTsKKyAgICBDSEVDS19WQUxVRSAoZm9vWzFdLCAyKTsKKyAgICBDSEVDS19WQUxVRSAoZm9vWzJd LCAwKTsKKyAgICBDSEVDS19WQUxVRSAoZm9vWzNdLCAwKTsKKyAgfQorICB7CisgICAgZmxvYXQg KmZvbyA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9mbG9hdGFy cl8xMjAiKTsKKworICAgIENIRUNLX1ZBTFVFIChmb29bMF0sIDEpOworICAgIENIRUNLX1ZBTFVF IChmb29bMV0sIDIpOworICAgIENIRUNLX1ZBTFVFIChmb29bMl0sIDApOworICAgIENIRUNLX1ZB TFVFIChmb29bM10sIDApOworICB9CisgIHsKKyAgICBmbG9hdCAqZm9vID0gZ2NjX2ppdF9yZXN1 bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX2Zsb2F0YXJyXzAwMDAiKTsKKworICAgIENI RUNLX1ZBTFVFIChmb29bMF0sIDApOworICAgIENIRUNLX1ZBTFVFIChmb29bMV0sIDApOworICAg IENIRUNLX1ZBTFVFIChmb29bMl0sIDApOworICAgIENIRUNLX1ZBTFVFIChmb29bM10sIDApOwor ICB9CisgIHsKKyAgICBmbG9hdCAqZm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVz dWx0LCAiZ2xvYmFsX2Zsb2F0YXJyXzAwMzA1NjAwIik7CisKKyAgICBmbG9hdCBrZXlbXSA9IHsw LDAsMywwLDUsNiwwLDB9OworCisgICAgQ0hFQ0tfVkFMVUUgKG1lbWNtcCAoZm9vLCBrZXksIHNp emVvZiBrZXkpLCAwKTsKKyAgfSAgICAKKyAgeworICAgIGludCAqKmZvbyA9IGdjY19qaXRfcmVz dWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9waW50YXJyX3gyeHgiKTsKKworICAgIENI RUNLX1ZBTFVFIChmb29bMF0sIDApOworICAgIENIRUNLX1ZBTFVFICgqZm9vWzFdLCAyKTsKKyAg fQorICB7CisgICAgY2hhciAqZm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0 LCAiZ2xvYmFsX2NoYXJhcnJfcXdlIik7CisgICAgY29uc3QgY2hhciAqa2V5ID0gInF3ZSI7Cisg ICAgQ0hFQ0tfVkFMVUUgKHN0cmNtcCAoZm9vLCBrZXkpLCAwKTsKKyAgfQorICB7CisgICAgaW50 ICpmb28gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfaW50Mngy bWF0cml4XzEyMzQiKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKQorICAgICAg Q0hFQ0tfVkFMVUUgKGZvb1tpXSwgaSArIDEpOworICB9CisgIHsKKyAgICBjb25zdCBjaGFyICoq Zm9vID0KKyAgICAgIGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9j cGNoYXJhcnJfcXdlX2FzZCIpOworCisgICAgQ0hFQ0tfVkFMVUUgKHN0cmNtcCAoZm9vWzBdLCAi cXdlIiksIDApOworICAgIENIRUNLX1ZBTFVFIChzdHJjbXAgKGZvb1sxXSwgImFzZCIpLCAwKTsg ICAgCisgIH0KKyAgeworICAgIGludCAqKnBpbnQgPQorICAgICAgZ2NjX2ppdF9yZXN1bHRfZ2V0 X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX3BpbnRfNCIpOworICAgIGludCAqZm9vID0KKyAgICAg IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9pbnRfNiIpOyAgICAK KyAgICBDSEVDS19WQUxVRSAoKipwaW50LCA0KTsKKyAgICBDSEVDS19WQUxVRSAoKmZvbywgNik7 ICAgIAorICB9CisgIHsKKyAgICBpbnQgKCpmbikodm9pZCkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRf Y29kZSAocmVzdWx0LCAiZm5faW50XzExIik7CisgICAgQ0hFQ0tfVkFMVUUgKGZuICgpLCAxMSk7 CisgIH0KKyAgeworICAgIGludCAoKmZuKSh2b2lkKSA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2Rl IChyZXN1bHQsICJmbl9jaW50XzExIik7CisgICAgQ0hFQ0tfVkFMVUUgKGZuICgpLCAxMSk7Cisg IH0KKyAgeworICAgIHNob3J0ICpmb28gPQorICAgICAgZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUg KHJlc3VsdCwgImdsb2JhbF9sdmFsdWVpbml0X3Nob3J0XzMiKTsKKyAgICBDSEVDS19WQUxVRSAo KmZvbywgMyk7CisgIH0KKyAgeworICAgIGludCAqKmZvbyA9CisgICAgICBnY2Nfaml0X3Jlc3Vs dF9nZXRfY29kZSAocmVzdWx0LCAiZ2xvYmFsX2x2YWx1ZWluaXRfY3BjaW50XzMiKTsKKyAgICBD SEVDS19WQUxVRSAoKipmb28sIDMpOworICB9CisgIHsKKyAgICBpbnQgKmZvbyA9CisgICAgICBn Y2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiZ2xvYmFsX2x2YWx1ZWluaXRfaW50XzQi KTsKKyAgICBDSEVDS19WQUxVRSAoKmZvbywgNCk7CisKKyAgICBpbnQgKmJhciA9CisgICAgICBn Y2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiZ2xvYmFsX2NvbnN0X2ludF83Iik7Cisg ICAgQ0hFQ0tfVkFMVUUgKCpiYXIsIDQpOworICAgIC8qIFRoZSBsaW5rZXIgZG9lcyBub3QgaGF2 ZSB0byBzdXBwb3J0IHVwIHRvIDY0IGFsaWdubWVudCwgc28gdGVzdCB0aGF0CisgICAgICAgaXQg ZG9lcyBiZWZvcmUgdGVzdGluZyB0aGF0IGl0IHdvcmtzIGluIGxpYmdjY2ppdC4gKi8KKyAgICBp ZiAoKHNpemVfdCkgJnRlc3RfYWxpZ25lZDY0X3dvcmtzX2luX2xpbmtlcl8xICUgNjQgPT0gMCAm JgorCShzaXplX3QpICZ0ZXN0X2FsaWduZWQ2NF93b3Jrc19pbl9saW5rZXJfMiAlIDY0ID09IDAp CisgICAgICBDSEVDS19WQUxVRSAoKHNpemVfdCkgYmFyICUgNjQsIDApOyAvKiBfX2F0dHJpYnV0 ZV9fICgoYWxpZ25lZCAoNjQpKSkgKi8KKyAgfQorICB7CisgICAgdW5pb24gdXBpbnRzaXplICpm b28gPQorICAgICAgZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImdsb2JhbF9jb25z dF91cGludHNpemVfMSIpOworICAgIENIRUNLX1ZBTFVFIChmb28tPnAsICh2b2lkKikweEJBQUFB QkJFRUVFRkJFRUYpOworICB9ICAKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvaml0LmRn L3Rlc3QtbG9jYWwtaW5pdC1ydmFsdWUuYyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtbG9j YWwtaW5pdC1ydmFsdWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u N2NhMjZlOTAzNGYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0 LWxvY2FsLWluaXQtcnZhbHVlLmMKQEAgLTAsMCArMSw1NzYgQEAKKworCisjaW5jbHVkZSA8c3Rk aW8uaD4KKworI2luY2x1ZGUgImxpYmdjY2ppdC5oIgorCisjaW5jbHVkZSAiaGFybmVzcy5oIgor CisvKiBUaGlzIHRlc3RjYXNlIGNoZWNrcyB0aGF0IGdjY19qaXRfY29udGV4dF9uZXdfY29uc3Ry dWN0b3IoKSB3b3JrcworICAgd2l0aCBsb2NhbHMuIFRlc3RzIHRoYXQgY29uc3RydWN0b3JzIGNh biBiZSB1c2VkIGFzIHJldHVybgorICAgdmFsdWVzIG9yIGZ1bmN0aW9uIGNhbGwgdmFsdWVzLiBU ZXN0IHRoYXQgY29uc3RydWN0b3JzIGNhbiBoYXZlIHNpZGUKKyAgIGVmZmVjdHMgYW5kIGJlIGFz c2lnbmVkIHRvIGxvY2Fscy4KKyAqLworCit2b2lkCitjcmVhdGVfY29kZSAoZ2NjX2ppdF9jb250 ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCit7CisgIGdjY19qaXRfdHlwZSAqaW50X3R5cGUg PSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsCisgICAgR0NDX0pJVF9UWVBFX0lOVCk7 CisgIGdjY19qaXRfdHlwZSAqcGludF90eXBlID0gZ2NjX2ppdF90eXBlX2dldF9wb2ludGVyIChp bnRfdHlwZSk7CisgIGdjY19qaXRfdHlwZSAqZG91YmxlX3R5cGUgPSBnY2Nfaml0X2NvbnRleHRf Z2V0X3R5cGUgKGN0eHQsCisgICAgR0NDX0pJVF9UWVBFX0RPVUJMRSk7CisgIGdjY19qaXRfdHlw ZSAqZmxvYXRfdHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0Nf SklUX1RZUEVfRkxPQVQpOworICBnY2Nfaml0X3R5cGUgKmJvb2xfdHlwZSA9IGdjY19qaXRfY29u dGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfQk9PTCk7CisgIGdjY19qaXRf dHlwZSAqc2l6ZV90eXBlID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LAorICAgIEdD Q19KSVRfVFlQRV9TSVpFX1QpOworICBnY2Nfaml0X3R5cGUgKnZvaWRwdHJfdHlwZSA9IGdjY19q aXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfVk9JRF9QVFIpOyAg CisKKyAgLyogTWFrZSBhIHN0cnVjdDogc3RydWN0IGZpIHsgZmxvYXQgZjsgaW50IGk7fSAqLwor ICBnY2Nfaml0X2ZpZWxkICpmMSA9IGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJ CQkJCQkgMCwKKwkJCQkJCSBmbG9hdF90eXBlLAorCQkJCQkJICJmIik7CisgIGdjY19qaXRfZmll bGQgKmYyID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAwLAorCQkJ CQkJIGludF90eXBlLAorCQkJCQkJICJpIik7CisgIGdjY19qaXRfZmllbGQgKmZpZWxkc1tdID0g e2YxLCBmMn07CisKKyAgZ2NjX2ppdF90eXBlICpzdHJ1Y3RfZmlfdHlwZSA9CisgICAgZ2NjX2pp dF9zdHJ1Y3RfYXNfdHlwZSAoCisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF90eXBl IChjdHh0LAorCQkJCSAgICAgICAwLAorCQkJCSAgICAgICAiZmkiLAorCQkJCSAgICAgICAyLAor CQkJCSAgICAgICBmaWVsZHMpKTsKKworICAvKiBNYWtlIGEgc3RydWN0OgorCisgICAgIHN0cnVj dCBiYXIgeworICAgICAgIGludCBpaTsKKyAgICAgICBpbnQgYXJyWzUwXTsKKyAgICAgICBmbG9h dCBmZjsKKyAgICAgfQorICAqLworICBmMSA9IGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0 eHQsCisJCQkJICAwLAorCQkJCSAgZmxvYXRfdHlwZSwKKwkJCQkgICJmZiIpOworICBmMiA9IGdj Y19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJICAwLAorCQkJCSAgaW50X3R5cGUs CisJCQkJICAiaWkiKTsKKyAgZ2NjX2ppdF90eXBlICppbnQ1MGFycl90eXBlID0KKyAgICBnY2Nf aml0X2NvbnRleHRfbmV3X2FycmF5X3R5cGUgKGN0eHQsCisJCQkJICAgIDAsCisJCQkJICAgIGlu dF90eXBlLAorCQkJCSAgICA1MCk7CisgIGdjY19qaXRfZmllbGQgKmZpID0gZ2NjX2ppdF9jb250 ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAwLAorCQkJCQkJIGludDUwYXJyX3R5cGUsCisJ CQkJCQkgImFyciIpOworICBnY2Nfaml0X2ZpZWxkICpmaWVsZHMyW10gPSB7ZjEsIGZpLCBmMn07 CisKKyAgZ2NjX2ppdF90eXBlICpzdHJ1Y3RfYmFyX3R5cGUgPQorICAgIGdjY19qaXRfc3RydWN0 X2FzX3R5cGUgKAorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfdHlwZSAoY3R4dCwK KwkJCQkgICAgICAgMCwKKwkJCQkgICAgICAgImJhciIsCisJCQkJICAgICAgIDMsCisJCQkJICAg ICAgIGZpZWxkczIpKTsKKworICAvKiBNYWtlIGFuIHVuaW9uOgorCisgICAgIHVuaW9uIHViYXIg eworICAgICAgIGZsb2F0IGZmOworICAgICAgIGludCBpaTsKKyAgICAgfTsKKyAgKi8KKyAgZjEg PSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCSAgMCwKKwkJCQkgIGZsb2F0 X3R5cGUsCisJCQkJICAiZmYiKTsKKyAgZjIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChj dHh0LAorCQkJCSAgMCwKKwkJCQkgIGludF90eXBlLAorCQkJCSAgImlpIik7CisgIGdjY19qaXRf ZmllbGQgKmZpZWxkczNbXSA9IHtmMSwgZjJ9OworICAKKyAgZ2NjX2ppdF90eXBlICp1YmFyID0g Z2NjX2ppdF9jb250ZXh0X25ld191bmlvbl90eXBlIChjdHh0LAorCQkJCQkJICAgICAgIDAsCisJ CQkJCQkgICAgICAgInViYXIiLAorCQkJCQkJICAgICAgIDIsCisJCQkJCQkgICAgICAgZmllbGRz Myk7CisgIAorICAodm9pZCkgdWJhcjsKKyAgKHZvaWQpIHN0cnVjdF9iYXJfdHlwZTsKKyAgKHZv aWQpIHN0cnVjdF9maV90eXBlOworICAodm9pZCkgYm9vbF90eXBlOworICAodm9pZCkgZG91Ymxl X3R5cGU7CisgICh2b2lkKSBwaW50X3R5cGU7CisgICh2b2lkKSB2b2lkcHRyX3R5cGU7CisgICh2 b2lkKSBzaXplX3R5cGU7CisKKyAgZ2NjX2ppdF9mdW5jdGlvbiAqZm5faW50XzM7IAorICB7IC8q IGludCBmb28gKCkgeyBpbnQgbG9jYWwgPSAzOyByZXR1cm4gbG9jYWw7fSAqLworICAgIGZuX2lu dF8zID0KKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsCisJCQkJICAg IDAsCisJCQkJICAgIEdDQ19KSVRfRlVOQ1RJT05fRVhQT1JURUQsCisJCQkJICAgIGludF90eXBl LAorCQkJCSAgICAiZm5faW50XzMiLAorCQkJCSAgICAwLAorCQkJCSAgICAwLAorCQkJCSAgICAw KTsKKyAgICBnY2Nfaml0X2Jsb2NrICpibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2Nr IChmbl9pbnRfMywgInN0YXJ0Iik7CisgICAgZ2NjX2ppdF9sdmFsdWUgKmxvY2FsID0gZ2NjX2pp dF9mdW5jdGlvbl9uZXdfbG9jYWwgKGZuX2ludF8zLAorCQkJCQkJCTAsCisJCQkJCQkJaW50X3R5 cGUsCisJCQkJCQkJImxvY2FsIik7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwgPSBnY2Nfaml0 X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7 CisKKyAgICBnY2Nfaml0X2Jsb2NrX2FkZF9hc3NpZ25tZW50IChibG9jaywgMCwgbG9jYWwsIHJ2 YWwpOworCisgICAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKGJsb2NrLAorCQkJCSAg IDAsCisJCQkJICAgZ2NjX2ppdF9sdmFsdWVfYXNfcnZhbHVlKGxvY2FsKSk7CisJCQkJCQkJICAK KyAgfQorICB7IC8qIHN0cnVjdCBmaSBmb28oKSB7IHJldHVybiAoc3RydWN0IGZpKXsxLDJ9O30g Ki8KKyAgICBnY2Nfaml0X2Z1bmN0aW9uICpmbiA9CisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3 X2Z1bmN0aW9uIChjdHh0LAorCQkJCSAgICAwLAorCQkJCSAgICBHQ0NfSklUX0ZVTkNUSU9OX0VY UE9SVEVELAorCQkJCSAgICBzdHJ1Y3RfZmlfdHlwZSwKKwkJCQkgICAgImZuX2ZpXzFfMiIsCisJ CQkJICAgIDAsCisJCQkJICAgIDAsCisJCQkJICAgIDApOworICAgIGdjY19qaXRfYmxvY2sgKmJs b2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZuLCAic3RhcnQiKTsKKworICAgIGdj Y19qaXRfcnZhbHVlICpydmFsX2YxID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9p bnQgKAorICAgICAgY3R4dCwgZmxvYXRfdHlwZSwgMSk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2 YWxfaTIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0 LCBpbnRfdHlwZSwgMik7CisKKyAgICBnY2Nfaml0X2ZpZWxkICpmX2YgPSBnY2Nfaml0X2NvbnRl eHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJICAgMCwKKwkJCQkJCSAgIGZsb2F0X3R5cGUsCisJ CQkJCQkgICAiZiIpOworICAgIGdjY19qaXRfZmllbGQgKmZfaSA9IGdjY19qaXRfY29udGV4dF9u ZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgICAwLAorCQkJCQkJICAgaW50X3R5cGUsCisJCQkJCQkg ICAiaSIpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHNbXSA9IHsgcnZhbF9mMSwgcnZhbF9p Mn07CisgICAgZ2NjX2ppdF9maWVsZCAqZmllbGRzW10gPSB7Zl9mLCBmX2l9OworCisgICAgZ2Nj X2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2NvbnN0cnVjdG9yCisgICAg ICAoY3R4dCwgMCwKKyAgICAgICBzdHJ1Y3RfZmlfdHlwZSwKKyAgICAgICAyLAorICAgICAgIGZp ZWxkcywKKyAgICAgICB2YWxzKTsKKworICAgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJu IChibG9jaywKKwkJCQkgICAwLAorCQkJCSAgIGN0b3IpOworICB9CisgIHsgLyogc3RydWN0IGZp IGZvbygpIHsgc3RydWN0IGZpIGxvY2FsID0gezEsMn07CisgICAgICAgICAgICAgICAgICAgICAg ICAgbG9jYWwgPSAoc3RydWN0IGZpKXs1LDZ9OworICAgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybiBsb2NhbDt9ICovCisgICAgZ2NjX2ppdF9mdW5jdGlvbiAqZm4gPQorICAgICAgZ2NjX2pp dF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwKKwkJCQkgICAgMCwKKwkJCQkgICAgR0NDX0pJ VF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgICAgc3RydWN0X2ZpX3R5cGUsCisJCQkJICAgICJm bl9maV81XzYiLAorCQkJCSAgICAwLAorCQkJCSAgICAwLAorCQkJCSAgICAwKTsKKyAgICBnY2Nf aml0X2x2YWx1ZSAqbG9jYWwgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19sb2NhbCAoZm4sCisJCQkJ CQkJMCwKKwkJCQkJCQlzdHJ1Y3RfZmlfdHlwZSwKKwkJCQkJCQkibG9jYWwiKTsKKyAgICBnY2Nf aml0X2Jsb2NrICpibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChmbiwgInN0YXJ0 Iik7CisKKyAgICB7CisgICAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF9mMSA9CisJZ2NjX2ppdF9j b250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKGN0eHQsIGZsb2F0X3R5cGUsIDEpOworICAgICAg Z2NjX2ppdF9ydmFsdWUgKnJ2YWxfaTIgPQorCWdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zy b21faW50IChjdHh0LCBpbnRfdHlwZSwgMik7CisKKyAgICAgIGdjY19qaXRfZmllbGQgKmZfZiA9 IGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgICAgICAwLAorCQkJCQkJ ICAgICAgZmxvYXRfdHlwZSwKKwkJCQkJCSAgICAgICJmIik7CisgICAgICBnY2Nfaml0X2ZpZWxk ICpmX2kgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJICAgICAgMCwK KwkJCQkJCSAgICAgIGludF90eXBlLAorCQkJCQkJICAgICAgImkiKTsKKworICAgICAgZ2NjX2pp dF9ydmFsdWUgKnZhbHNbXSA9IHsgcnZhbF9mMSwgcnZhbF9pMn07CisgICAgICBnY2Nfaml0X2Zp ZWxkICpmaWVsZHNbXSA9IHtmX2YsIGZfaX07CisKKyAgICAgIGdjY19qaXRfcnZhbHVlICpjdG9y ID0gZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1Y3RvcgorCShjdHh0LCAwLAorCSBzdHJ1Y3Rf ZmlfdHlwZSwKKwkgMiwKKwkgZmllbGRzLAorCSB2YWxzKTsKKyAgICAgIGdjY19qaXRfYmxvY2tf YWRkX2Fzc2lnbm1lbnQgKGJsb2NrLCAwLCBsb2NhbCwgY3Rvcik7CisgICAgfQorICAgIHsKKyAg ICAgIGdjY19qaXRfcnZhbHVlICpydmFsX2YxID0KKwlnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1 ZV9mcm9tX2ludCAoY3R4dCwgZmxvYXRfdHlwZSwgNSk7CisgICAgICBnY2Nfaml0X3J2YWx1ZSAq cnZhbF9pMiA9CisJZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKGN0eHQsIGlu dF90eXBlLCA2KTsKKworICAgICAgZ2NjX2ppdF9maWVsZCAqZl9mID0gZ2NjX2ppdF9jb250ZXh0 X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAgICAgIDAsCisJCQkJCQkgICAgICBmbG9hdF90eXBl LAorCQkJCQkJICAgICAgImYiKTsKKyAgICAgIGdjY19qaXRfZmllbGQgKmZfaSA9IGdjY19qaXRf Y29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgICAgICAwLAorCQkJCQkJICAgICAgaW50 X3R5cGUsCisJCQkJCQkgICAgICAiaSIpOworCisgICAgICBnY2Nfaml0X3J2YWx1ZSAqdmFsc1td ID0geyBydmFsX2YxLCBydmFsX2kyfTsKKyAgICAgIGdjY19qaXRfZmllbGQgKmZpZWxkc1tdID0g e2ZfZiwgZl9pfTsKKworICAgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRl eHRfbmV3X2NvbnN0cnVjdG9yCisJKGN0eHQsIDAsCisJIHN0cnVjdF9maV90eXBlLAorCSAyLAor CSBmaWVsZHMsCisJIHZhbHMpOworICAgICAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVudCAo YmxvY2ssIDAsIGxvY2FsLCBjdG9yKTsKKyAgICB9CisgICAgCisgICAgCisgICAgZ2NjX2ppdF9i bG9ja19lbmRfd2l0aF9yZXR1cm4gKGJsb2NrLAorCQkJCSAgIDAsCisJCQkJICAgZ2NjX2ppdF9s dmFsdWVfYXNfcnZhbHVlKGxvY2FsKSk7CisgIH0KKyAgeyAvKiBzdHJ1Y3QgZmkgZm9vKCkgeyBz dHJ1Y3QgZmkgbG9jYWwgPSB7MSwgZm5faW50XzMoKX07CisgICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIGxvY2FsO30KKworICAgICAgIFRoZSBjdG9yIGhhcyBhIHNpZGUgZWZmZWN0IChm dW5jY2FsbCkgKi8KKyAgICBnY2Nfaml0X2Z1bmN0aW9uICpmbiA9CisgICAgICBnY2Nfaml0X2Nv bnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LAorCQkJCSAgICAwLAorCQkJCSAgICBHQ0NfSklUX0ZV TkNUSU9OX0VYUE9SVEVELAorCQkJCSAgICBzdHJ1Y3RfZmlfdHlwZSwKKwkJCQkgICAgImZuX2Zp XzFfMyIsCisJCQkJICAgIDAsCisJCQkJICAgIDAsCisJCQkJICAgIDApOworICAgIGdjY19qaXRf bHZhbHVlICpsb2NhbCA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2xvY2FsIChmbiwKKwkJCQkJCQkw LAorCQkJCQkJCXN0cnVjdF9maV90eXBlLAorCQkJCQkJCSJsb2NhbCIpOworICAgIGdjY19qaXRf YmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZuLCAic3RhcnQiKTsK KworICAgIHsKKyAgICAgIGdjY19qaXRfcnZhbHVlICpydmFsX2YxID0KKwlnY2Nfaml0X2NvbnRl eHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoY3R4dCwgZmxvYXRfdHlwZSwgMSk7CisgICAgICBnY2Nf aml0X3J2YWx1ZSAqcnZhbF9pMiA9CisJZ2NjX2ppdF9jb250ZXh0X25ld19jYWxsIChjdHh0LCAw LCBmbl9pbnRfMywgMCwgMCk7CisKKyAgICAgIGdjY19qaXRfZmllbGQgKmZfZiA9IGdjY19qaXRf Y29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgICAgICAwLAorCQkJCQkJICAgICAgZmxv YXRfdHlwZSwKKwkJCQkJCSAgICAgICJmIik7CisgICAgICBnY2Nfaml0X2ZpZWxkICpmX2kgPSBn Y2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJICAgICAgMCwKKwkJCQkJCSAg ICAgIGludF90eXBlLAorCQkJCQkJICAgICAgImkiKTsKKworICAgICAgZ2NjX2ppdF9ydmFsdWUg KnZhbHNbXSA9IHsgcnZhbF9mMSwgcnZhbF9pMn07CisgICAgICBnY2Nfaml0X2ZpZWxkICpmaWVs ZHNbXSA9IHtmX2YsIGZfaX07CisKKyAgICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2pp dF9jb250ZXh0X25ld19jb25zdHJ1Y3RvcgorCShjdHh0LCAwLAorCSBzdHJ1Y3RfZmlfdHlwZSwK KwkgMiwKKwkgZmllbGRzLAorCSB2YWxzKTsKKyAgICAgIGdjY19qaXRfYmxvY2tfYWRkX2Fzc2ln bm1lbnQgKGJsb2NrLCAwLCBsb2NhbCwgY3Rvcik7CisgICAgfQorICAgIAorICAgIAorICAgIGdj Y19qaXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuIChibG9jaywKKwkJCQkgICAwLAorCQkJCSAgIGdj Y19qaXRfbHZhbHVlX2FzX3J2YWx1ZShsb2NhbCkpOworICB9ICAgCisgIHsgLyogc3RydWN0IGZp IGZvbyhmaSkgeyByZXR1cm4gZmk7fQorICAgICAgIHN0cnVjdCBmaSBiYXIoKSB7IHJldHVybiBm b28oKHN0cnVjdCBmaSl7MywgNH0pOyB9IAorICAgICAqLworCisgICAgZ2NjX2ppdF9wYXJhbSAq ZmlfcGFyYW0gPQorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19wYXJhbSAoY3R4dCwgMCwgc3Ry dWN0X2ZpX3R5cGUsICJmaSIpOworICAgIAorICAgIGdjY19qaXRfZnVuY3Rpb24gKmZuMCA9Cisg ICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LAorCQkJCSAgICAwLAorCQkJ CSAgICBHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorCQkJCSAgICBzdHJ1Y3RfZmlfdHlwZSwK KwkJCQkgICAgImZuX2ZpX3hfeCIsCisJCQkJICAgIDEsCisJCQkJICAgICZmaV9wYXJhbSwKKwkJ CQkgICAgMCk7CisgICAgZ2NjX2ppdF9ibG9jayAqYmxvY2swID0gZ2NjX2ppdF9mdW5jdGlvbl9u ZXdfYmxvY2sgKGZuMCwgInN0YXJ0Iik7CisgICAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1 cm4gKGJsb2NrMCwKKwkJCQkgICAwLAorCQkJCSAgIGdjY19qaXRfcGFyYW1fYXNfcnZhbHVlICgK KwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjY19qaXRfZnVuY3Rpb25fZ2V0X3BhcmFt IChmbjAsIDApKSk7CisKKyAgICBnY2Nfaml0X2Z1bmN0aW9uICpmbiA9CisgICAgICBnY2Nfaml0 X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LAorCQkJCSAgICAwLAorCQkJCSAgICBHQ0NfSklU X0ZVTkNUSU9OX0VYUE9SVEVELAorCQkJCSAgICBzdHJ1Y3RfZmlfdHlwZSwKKwkJCQkgICAgImZu X2ZpXzNfNCIsCisJCQkJICAgIDAsCisJCQkJICAgIDAsCisJCQkJICAgIDApOworICAgIGdjY19q aXRfYmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZuLCAic3RhcnQi KTsKKworICAgIGdjY19qaXRfcnZhbHVlICpydmFsX2YxID0gZ2NjX2ppdF9jb250ZXh0X25ld19y dmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgZmxvYXRfdHlwZSwgMyk7CisgICAgZ2NjX2pp dF9ydmFsdWUgKnJ2YWxfaTIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAo CisgICAgICBjdHh0LCBpbnRfdHlwZSwgNCk7CisKKyAgICBnY2Nfaml0X2ZpZWxkICpmX2YgPSBn Y2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJICAgMCwKKwkJCQkJCSAgIGZs b2F0X3R5cGUsCisJCQkJCQkgICAiZiIpOworICAgIGdjY19qaXRfZmllbGQgKmZfaSA9IGdjY19q aXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgICAwLAorCQkJCQkJICAgaW50X3R5 cGUsCisJCQkJCQkgICAiaSIpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHNbXSA9IHsgcnZh bF9mMSwgcnZhbF9pMn07CisgICAgZ2NjX2ppdF9maWVsZCAqZmllbGRzW10gPSB7Zl9mLCBmX2l9 OworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2NvbnN0 cnVjdG9yCisgICAgICAoY3R4dCwgMCwKKyAgICAgICBzdHJ1Y3RfZmlfdHlwZSwKKyAgICAgICAy LAorICAgICAgIGZpZWxkcywKKyAgICAgICB2YWxzKTsKKworICAgIGdjY19qaXRfcnZhbHVlICpj YWxsID0gZ2NjX2ppdF9jb250ZXh0X25ld19jYWxsIChjdHh0LCAwLCBmbjAsIDEsICZjdG9yKTsK KworICAgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuIChibG9jaywKKwkJCQkgICAwLAor CQkJCSAgIGNhbGwpOworICB9CisgIHsgLyogc3RydWN0IGJhciBmb28oKSB7IHN0cnVjdCBiYXIg bG9jYWwgPSB7fTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsO30KKyAg ICAgKi8KKyAgICBnY2Nfaml0X2Z1bmN0aW9uICpmbiA9CisgICAgICBnY2Nfaml0X2NvbnRleHRf bmV3X2Z1bmN0aW9uIChjdHh0LAorCQkJCSAgICAwLAorCQkJCSAgICBHQ0NfSklUX0ZVTkNUSU9O X0VYUE9SVEVELAorCQkJCSAgICBzdHJ1Y3RfYmFyX3R5cGUsCisJCQkJICAgICJmbl9iYXJfMHMi LAorCQkJCSAgICAwLAorCQkJCSAgICAwLAorCQkJCSAgICAwKTsKKyAgICBnY2Nfaml0X2x2YWx1 ZSAqbG9jYWwgPQorICAgICAgZ2NjX2ppdF9mdW5jdGlvbl9uZXdfbG9jYWwgKGZuLAorCQkJCSAg MCwKKwkJCQkgIHN0cnVjdF9iYXJfdHlwZSwKKwkJCQkgICJsb2NhbCIpOworICAgIGdjY19qaXRf YmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZuLCAic3RhcnQiKTsK KworICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19jb25zdHJ1 Y3RvcgorCShjdHh0LCAwLAorCSBzdHJ1Y3RfYmFyX3R5cGUsCisJIDAsCisJIDAsCisJIDApOwor ICAgIGdjY19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnQgKGJsb2NrLCAwLCBsb2NhbCwgY3Rvcik7 CisgICAKKyAgICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoYmxvY2ssCisJCQkJICAg MCwKKwkJCQkgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUobG9jYWwpKTsKKyAgfQorICB7IC8q IHN0cnVjdCBiYXIgZm9vKCkgeyBzdHJ1Y3QgYmFyIGxvY2FsOworICAgICAgICAgICAgICAgICAg ICAgICAgICBsb2NhbC5hcnIgPSAoaW50IFs1MF0pezEsMiwzLDQsNSw2fTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsO30KKyAgICAgKi8KKyAgICBnY2Nfaml0X2Z1bmN0 aW9uICpmbiA9CisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LAorCQkJ CSAgICAwLAorCQkJCSAgICBHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorCQkJCSAgICBzdHJ1 Y3RfYmFyX3R5cGUsCisJCQkJICAgICJmbl9iYXJfMTIzcyIsCisJCQkJICAgIDAsCisJCQkJICAg IDAsCisJCQkJICAgIDApOworICAgIGdjY19qaXRfbHZhbHVlICpsb2NhbCA9CisgICAgICBnY2Nf aml0X2Z1bmN0aW9uX25ld19sb2NhbCAoZm4sCisJCQkJICAwLAorCQkJCSAgc3RydWN0X2Jhcl90 eXBlLAorCQkJCSAgImxvY2FsIik7CisgICAgZ2NjX2ppdF9ibG9jayAqYmxvY2sgPSBnY2Nfaml0 X2Z1bmN0aW9uX25ld19ibG9jayAoZm4sICJzdGFydCIpOworCisgICAgZ2NjX2ppdF9ydmFsdWUg KnZhbHVlc1s2XTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQorICAgICAgdmFs dWVzW2ldID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKGN0eHQsIGludF90 eXBlLCBpICsgMSk7CisgICAgCisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2Nv bnRleHRfbmV3X2NvbnN0cnVjdG9yCisJKGN0eHQsIDAsCisJIGludDUwYXJyX3R5cGUsCisJIDYs CisJIDAsCisJIHZhbHVlcyk7CisKKyAgICBnY2Nfaml0X2x2YWx1ZSAqYXJyX2x2ID0gZ2NjX2pp dF9sdmFsdWVfYWNjZXNzX2ZpZWxkIChsb2NhbCwKKwkJCQkJCQkgIDAsCisJCQkJCQkJICBmaSk7 CisgICAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVudCAoYmxvY2ssIDAsIGFycl9sdiwgY3Rv cik7CisJCQkJCQkJICAKKyAgICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoYmxvY2ss CisJCQkJICAgMCwKKwkJCQkgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUobG9jYWwpKTsKKyAg fQorICB7IC8qIGludFs1MF0gZm9vKCkgeyBpbnQgYXJyWzUwXTsKKyAgICAgICAgICAgICAgICAg ICAgICAgYXJyID0gKGludCBbNTBdKXsxLDIsMyw0LDUsNn07CisgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiBhcnI7fQorCisgICAgICAgTi5COiBOb3QgYSB0eXBvLCByZXR1cm5pbmcgYW4g YXJyYXkuIAorICAgICAqLworICAgIGdjY19qaXRfZnVuY3Rpb24gKmZuID0KKyAgICAgIGdjY19q aXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsCisJCQkJICAgIDAsCisJCQkJICAgIEdDQ19K SVRfRlVOQ1RJT05fRVhQT1JURUQsCisJCQkJICAgIGludDUwYXJyX3R5cGUsCisJCQkJICAgICJm bl9pbnQ1MGFycl8xMjNzIiwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCk7Cisg ICAgZ2NjX2ppdF9sdmFsdWUgKmxvY2FsID0KKyAgICAgIGdjY19qaXRfZnVuY3Rpb25fbmV3X2xv Y2FsIChmbiwKKwkJCQkgIDAsCisJCQkJICBpbnQ1MGFycl90eXBlLAorCQkJCSAgImxvY2FsIik7 CisgICAgZ2NjX2ppdF9ibG9jayAqYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAo Zm4sICJzdGFydCIpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHVlc1s2XTsKKworICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQorICAgICAgdmFsdWVzW2ldID0gZ2NjX2ppdF9jb250 ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKGN0eHQsIGludF90eXBlLCBpICsgMSk7CisgICAgCisg ICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2NvbnN0cnVjdG9y CisJKGN0eHQsIDAsCisJIGludDUwYXJyX3R5cGUsCisJIDYsCisJIDAsCisJIHZhbHVlcyk7CisK KyAgICBnY2Nfaml0X2Jsb2NrX2FkZF9hc3NpZ25tZW50IChibG9jaywgMCwgbG9jYWwsIGN0b3Ip OworCQkJCQkJCSAgCisgICAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKGJsb2NrLAor CQkJCSAgIDAsCisJCQkJICAgZ2NjX2ppdF9sdmFsdWVfYXNfcnZhbHVlKGxvY2FsKSk7CisgIH0K K30KKworc3RydWN0IGZpMiB7CisgIGZsb2F0IGY7CisgIGludCBpOworfTsKKworc3RydWN0IGJh cjIgeworICBmbG9hdCBmZjsKKyAgaW50IGFycls1MF07CisgIGludCBpaTsKK307CisKK3VuaW9u IHViYXIyIHsKKyAgZmxvYXQgZmY7CisgIGludCBpaTsKK307CisKK3N0cnVjdCBpbnQ1MGFyciB7 CisgIGludCBhcnJbNTBdOworfTsKKwordm9pZAorc2NyYW1ibGVfc3RhY2sodm9pZCkKKyAgewor ICAgIGNoYXIgKnAgPSBhbGxvY2EoMTAwKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDsg aSsrKQorICAgICAgKnArKyA9IDB4RjA7CisgICAgYXNtKCIiKTsgLyogRG9uJ3QgdG91Y2ggbXkg Y29kZSwgb3B0aW1pemVycy4gKi8KKyAgfQorCit2b2lkCit2ZXJpZnlfY29kZSAoZ2NjX2ppdF9j b250ZXh0ICpjdHh0LCBnY2Nfaml0X3Jlc3VsdCAqcmVzdWx0KQoreworICBDSEVDS19OT05fTlVM TCAocmVzdWx0KTsKKworICB7CisgICAgc3RydWN0IGZpMiAoKmZuKSAodm9pZCkgPSBnY2Nfaml0 X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiZm5fZmlfMV8yIik7CisgICAgc2NyYW1ibGVfc3Rh Y2soKTsKKyAgICBzdHJ1Y3QgZmkyIGZpID0gZm4oKTsKKyAgICBDSEVDS19WQUxVRSAoZmkuZiwg MSk7CisgICAgQ0hFQ0tfVkFMVUUgKGZpLmksIDIpOworICB9CisgIHsKKyAgICBzdHJ1Y3QgZmky ICgqZm4pICh2b2lkKSA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJmbl9maV81 XzYiKTsKKyAgICBzdHJ1Y3QgZmkyIGZpID0gZm4oKTsKKyAgICBDSEVDS19WQUxVRSAoZmkuZiwg NSk7CisgICAgQ0hFQ0tfVkFMVUUgKGZpLmksIDYpOworICB9CisgIHsKKyAgICBzdHJ1Y3QgZmky ICgqZm4pICh2b2lkKSA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJmbl9maV8x XzMiKTsKKyAgICBzdHJ1Y3QgZmkyIGZpID0gZm4oKTsKKyAgICBDSEVDS19WQUxVRSAoZmkuZiwg MSk7CisgICAgQ0hFQ0tfVkFMVUUgKGZpLmksIDMpOworICB9ICAKKyAgeworICAgIHN0cnVjdCBm aTIgKCpmbikgKHZvaWQpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImZuX2Zp XzNfNCIpOworICAgIHN0cnVjdCBmaTIgZmkgPSBmbigpOworICAgIENIRUNLX1ZBTFVFIChmaS5m LCAzKTsKKyAgICBDSEVDS19WQUxVRSAoZmkuaSwgNCk7CisgIH0KKyAgeworICAgIHNjcmFtYmxl X3N0YWNrKCk7CisgICAgc3RydWN0IGJhcjIgKCpmbikgKHZvaWQpID0gZ2NjX2ppdF9yZXN1bHRf Z2V0X2NvZGUgKHJlc3VsdCwgImZuX2Jhcl8wcyIpOworICAgIHN0cnVjdCBiYXIyIGJhciA9IGZu KCk7CisgICAgc3RydWN0IGJhcjIga2V5ID0ge307CisKKyAgICBDSEVDS19WQUxVRSAoYmFyLmZm LCAwKTsKKyAgICBDSEVDS19WQUxVRSAoYmFyLmlpLCAwKTsKKyAgICBDSEVDS19WQUxVRSAobWVt Y21wICgmYmFyLmFyciwgJmtleS5hcnIsIHNpemVvZiAoa2V5LmFycikpLCAwKTsKKyAgfQorICB7 CisgICAgc2NyYW1ibGVfc3RhY2soKTsKKyAgICBzdHJ1Y3QgYmFyMiAoKmZuKSAodm9pZCkgPSBn Y2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiZm5fYmFyXzEyM3MiKTsKKyAgICBzdHJ1 Y3QgYmFyMiBiYXIgPSBmbigpOworICAgIHN0cnVjdCBiYXIyIGtleSA9IHsuYXJyID0gezEsMiwz LDQsNSw2fSB9OworCisgICAgQ0hFQ0tfVkFMVUUgKG1lbWNtcCAoJmJhci5hcnIsICZrZXkuYXJy LCBzaXplb2YgKGtleS5hcnIpKSwgMCk7CisgIH0KKyAgeworICAgIHNjcmFtYmxlX3N0YWNrKCk7 CisgICAgLyogVGhpcyBpcyBhYml0IHNoYWR5LiBMZXRzIGp1c3QgcHJldGVuZCB0aGF0IGFycmF5 IHJldHVybnMgw6AgbGEgRm9ydHJhbgorICAgICAgIGlzIHRoZSBzYW1lIHRoaW5nIGFzIHJldHVy bmluZyBhIHN0cnVjdCB3aXRoIGFuIGFycmF5IGluIGl0IGluIEMuICovCisgICAgc3RydWN0IGlu dDUwYXJyICgqZm4pICh2b2lkKSA9CisgICAgICBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVz dWx0LCAiZm5faW50NTBhcnJfMTIzcyIpOworICAgIHN0cnVjdCBpbnQ1MGFyciBhbnMgPSBmbigp OworICAgIGludCBrZXlbNTBdID0gezEsMiwzLDQsNSw2fTsKKworICAgIENIRUNLX1ZBTFVFICht ZW1jbXAgKGFucy5hcnIsIGtleSwgc2l6ZW9mIChrZXkpKSwgMCk7CisgIH0KK30KLS0gCjIuMzAu MgoK --_002_67377ebd1d90482aa1123121d344cf92kthse_--