From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2139.outbound.protection.outlook.com [40.107.94.139]) by sourceware.org (Postfix) with ESMTPS id CDEE0388980F; Tue, 27 Jul 2021 00:45:14 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org CDEE0388980F ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=l6I1dlCe+DBi5LFfq5t4xmAymv0WyfBM/NHIpN6cqJtQDzOd4COd5Qp3b+lDLKlZcG4VTC2Esaho5Dg/qJL4cUaTEmTOEvozHzgxwQWvYYVQLoXenGl5LHYay9n11wPT8ykkgnhp1kyEyEMvQWTJCAwZu/2AV1/IVOvj/gt/urAEdj1uIWOAqlK4G7zza6fQjZ+T/1IuL4PGmdJ8I9H1PxaAIJ9V9/bpsIcfofgRuBO4spHLQikLUqM2mtcaVcsKe8aGjBkzIua9bEK9mSKTkqLOwyB6MFPpbKi/vpuuI3wffZ7wfoYhf4fPILhj3M06My6iyn2h7+/jCO9jqRDDXQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Nt/XkgqRWzwOqYqsECQmN/5buqbU+tcIKb4wZhmnlhE=; b=fpkMC0dOs2w1MjhGwg/efmwBUcc1YOprSb887d/4SKDcRIeX+l9a8bPGtafbUCby8RAkeIbIDcPXZ5n4hn7fCcWVJBttaOSkxa8yR3ADGIJ1gU71yqZyzhu3rMQistllLxNvvKnV9U8FQABXrcysZHgjj5hyfT9oQyglZtv7EY1Zv2sn4NkmQSeXNzLMfj/4Eb9HMg9MNSgT31NL8vu4TfZeOBtukckkvpYM0ZCN1mOK+TotrcuHaDZypCrXwmkgZDHHYQS+SnZJXOpcnl30Y7lp97Yww80qzLm07Y+PXpwgyCObZCtrG7FUMjb0bhW5JOpKyptbGO0+kyZ0bphALw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microsoft.com; dmarc=pass action=none header.from=microsoft.com; dkim=pass header.d=microsoft.com; arc=none Received: from MWHPR2101MB0811.namprd21.prod.outlook.com (2603:10b6:301:7b::39) by MWHPR21MB0752.namprd21.prod.outlook.com (2603:10b6:300:76::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4394.1; Tue, 27 Jul 2021 00:45:11 +0000 Received: from MWHPR2101MB0811.namprd21.prod.outlook.com ([fe80::10c5:f8d0:d956:a6e2]) by MWHPR2101MB0811.namprd21.prod.outlook.com ([fe80::10c5:f8d0:d956:a6e2%7]) with mapi id 15.20.4373.005; Tue, 27 Jul 2021 00:45:11 +0000 From: Victor Tong To: "gcc-patches@gcc.gnu.org" , "pinskia@gcc.gnu.org" Subject: [PATCH] Propagate get_nonzero_bits information in division [PR77980] Thread-Topic: [PATCH] Propagate get_nonzero_bits information in division [PR77980] Thread-Index: AQHXgn/n5ys7KICWaEeSU7Cpo2ZElA== Date: Tue, 27 Jul 2021 00:45:11 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Enabled=True; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SiteId=72f988bf-86f1-41af-91ab-2d7cd011db47; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SetDate=2021-07-27T00:45:10.832Z; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Name=General; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_ContentBits=0; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Method=Standard; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 08d935af-7ad7-485d-daf9-08d95097ca69 x-ms-traffictypediagnostic: MWHPR21MB0752: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:7691; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: euLgn2muSFPzJopADVoKCEt2u8kBVi0JX5j3L2q1xT7o6XbdDflpJzP+i0cNCt13ItUvYGUQhEzLbaD+YtoJLtcNnM079dtpBcXuBWRU1snldoXO8ow8qKiOxP+elYdnuSsMQ+5+sPY4OCcRJqbSv13DxoMzKrz3tWjuIHVS2qw6SSDgw6m9ZuV5b83wmRDIfscH5eqRaP9hUQE/ZAS0rEmnnczB1G3dGmGu6wqlEDDqxL/cWtbfX4QVFPc0K5iz8QxtZMufSZQJ430lHqvB7mwbbz1IQBIn7oxbtPRfjr+iTEcsH9+8Q8snWNqVRzYar9R61q/H9GL8SX56jVZqYGVr8PFoPHnajdVFioiqv1qZLWFzRCoVXL8ywaIKReuFNG2kVgWlfO+2DCmK8qHi4Dmm9rRYtwWvsO9GcFX/iPLaBGhYrI2twiFHm/ruxGqYyZGByl0KF6LTgv7SKVubC+ugeYSJ+Q2Rx3PpkpmvMhO2JKp0SALsVFlR+JOkDKD1ih8DF7+zW3RhiRX5SWeFBCww4bpNwlogL8WcEJ/CoIdj8iFEISG4VEvo9fc28G4XPQ24zUVtuf4CKt9Ty03NEJcRTTKaLOuQT92MDArMiTH2OgDgtUnzdy+iej1xNDalAo9T2NAhXhv/+uj3PV8bliavzTfKt8jKnTQrRToqhxz/3LWrC3Wdo3Oje8ruyPjEAsJ2cNzzhm5gppe0SivGYZh2qq+twQBs6rOB7E5XRFl51vf52BkAQaytwdtS/ujqgDzBd43mvV555gTggJX8WYoflxJzaAg/4XQIf4Mupvk= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MWHPR2101MB0811.namprd21.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(186003)(8936002)(66476007)(10290500003)(2906002)(316002)(55016002)(7696005)(8676002)(86362001)(38100700002)(76116006)(9686003)(110136005)(66616009)(66556008)(64756008)(122000001)(71200400001)(66946007)(66446008)(99936003)(82960400001)(82950400001)(8990500004)(6506007)(33656002)(26005)(450100002)(52536014)(5660300002)(508600001)(966005)(38070700004); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?5rIYOQeM6PMiE6aUwFjmqJy6cV573S5bOPaxlLca5Hir5AjXaVDEw7iA1B?= =?iso-8859-1?Q?BkGTtiYlBJM0QLdqLdvk5od/6Sf+R75rkE5qVUQfL+XqSgH3kOSxhNWV68?= =?iso-8859-1?Q?cUNW1L6ZzHQuTH0ujUC5lPeues0zDAjAPoTa59IbM5M2Pgvp93ulvgGsim?= =?iso-8859-1?Q?0lg6MLzcPKFX+f6fe2sstBnow61O0+JBK3geu8uzlGbY5p4ldl1V6gAah4?= =?iso-8859-1?Q?s5s3Oi10bj4nOonpIxMUC8y6s0HscOcGgoCBajTHJMKqXmT7vfPJdyI5j4?= =?iso-8859-1?Q?/Ovkx0YWngd6KQ+lm6D4VRNyxmcHTKY2klDtSzH+IOgkIcyFZfN9aq57SF?= =?iso-8859-1?Q?/7m3yWJ6TeTgfYQYvBcJPLgw7Zu44mGFoL+yox1hqoBIf2gxdyoGPbMfJm?= =?iso-8859-1?Q?3/5ljf3BRQDDb6OSKuUn6mcl0ts+upnYK2qrfMVikgPPMeZGS+5tLqTFmq?= =?iso-8859-1?Q?8PmnkK/ND2AHT2EHPHX7vC50mRDiNz0W/LUIT5CYCBIGn9X1Ovt3zbrIwk?= =?iso-8859-1?Q?5Z3ZY/6jsHooDLd2wgnAuzjUWr5GsClORxCYKangTLH9r+Y/VFlj8L877s?= =?iso-8859-1?Q?VXD9YCeTIe7bBWwLfDcupOfiULf0EmfpGquJv3EBwqtlolFa/OFZJtxRmd?= =?iso-8859-1?Q?y21JIwqZoMMWdcAahyuIITPz10dFNragbsTw3cKv5SK5woXoRN3oLa7DFu?= =?iso-8859-1?Q?HHHv0L3Gj8MBcTAG5Msj91X/sYed356xOT4tgzS4/nD1UWBNsctOSgsXkL?= =?iso-8859-1?Q?GUC3+SfV1zY0aphQGlpkZwcVeFj9+oulJgmOf4cHXcVNU/zWUe18CCj94a?= =?iso-8859-1?Q?3c7UOlyZ1lZG7Aae4AinLx71SjadxmlY4CoKm/e5o5HpBhajhnMkYYPNqD?= =?iso-8859-1?Q?xU3b4Vwvfpuyw+cqWCABn1UEKj34h5Amtf+UU15kFuRlL0kTStAQmgL1SC?= =?iso-8859-1?Q?DxFPdrxbLRZPkjeXbp+eUDwW8H/mipWgdkapC+Dw4JS4adXtbtsJjLQP6A?= =?iso-8859-1?Q?0OBiEYtd3gvJ12Olfj/m7Jie/oeYcLBdGnQcR5v+v1SFIRtASHS59417MZ?= =?iso-8859-1?Q?6J/w0oa/dAoeKd6cWTf9t3vTvG+1i8pFaovRt3V+uL0xjoKmFQct7XBISi?= =?iso-8859-1?Q?VtK3qKvnymD0YIzHkWwIg/UDnDD7IfoPTBTxW4KSLEF40KLWiowWpqGW52?= =?iso-8859-1?Q?VQfl8u+obqhxyrROliAXnY6fr1TnAmxXgKAYiC+SQGXkH01lwPzuz+m2NZ?= =?iso-8859-1?Q?z4Z25ol1VIYrHmzaWbFnF5qthkhRibT204xZsX3bvKLG4RIhQh5vlVkiWS?= =?iso-8859-1?Q?NKk9X4vsd7MC+Lc1UtxBM0SVsOeSn3/NwMxJKRWVTBu5tHw=3D?= x-ms-exchange-transport-forked: True Content-Type: multipart/mixed; boundary="_002_MWHPR2101MB0811F1402244BB86625AAB0ACCE99MWHPR2101MB0811_" MIME-Version: 1.0 X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MWHPR2101MB0811.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 08d935af-7ad7-485d-daf9-08d95097ca69 X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Jul 2021 00:45:11.4555 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 72f988bf-86f1-41af-91ab-2d7cd011db47 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: jnU2W9x9xMpR3VevJAQsidgrjaFkPKyTFhwIzKTdrFmq6zDaXcHEi6sW9ZhFHMc8vfPLjr8PkL3VPweG9NitQg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR21MB0752 X-Spam-Status: No, score=-2.3 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FORGED_SPF_HELO, KAM_SHORT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NONE, TXREP 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: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 27 Jul 2021 00:45:16 -0000 --_002_MWHPR2101MB0811F1402244BB86625AAB0ACCE99MWHPR2101MB0811_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable This change enables the "t1 !=3D 0" check to be optimized away in this code= :=0A= =0A= int x1 =3D 0;=0A= unsigned int x2 =3D 1;=0A= =0A= int main ()=0A= {=0A= int t1 =3D x1*(1/(x2+x2));=0A= if (t1 !=3D 0) __builtin_abort();=0A= return 0;=0A= }=0A= =0A= The change utilizes the VRP framework to propagate the get_nonzero_bits inf= ormation from the "x2+x2" expression to the "1/(x2+x2)" division expression= . Specifically, the framework knows that the least significant bit of the "= x2+x2" expression must be zero.=0A= =0A= The get_nonzero_bits information of the left hand side and right hand side = of expressions needed to be passed down to operator_div::wi_fold() in the V= RP framework. The majority of this change involves adding two additional pa= rameters to propagate this information. There are future opportunities to u= se the non zero bit information to perform better optimizations in other ty= pes of expressions.=0A= =0A= The changes were tested against x86_64-pc-linux-gnu and all tests in "make = -k check" passed.=0A= =0A= The original approach was to implement a match.pd pattern to support this b= ut the pattern wasn't being triggered. More context is available in: https:= //gcc.gnu.org/bugzilla/show_bug.cgi?id=3D77980=0A= =0A= Thanks,=0A= Victor= --_002_MWHPR2101MB0811F1402244BB86625AAB0ACCE99MWHPR2101MB0811_ Content-Type: application/octet-stream; name="pr77980.patch" Content-Description: pr77980.patch Content-Disposition: attachment; filename="pr77980.patch"; size=57519; creation-date="Tue, 27 Jul 2021 00:41:02 GMT"; modification-date="Tue, 27 Jul 2021 00:41:02 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9naW1wbGUtcmFuZ2UuY2MgYi9nY2MvZ2ltcGxlLXJhbmdlLmNjCmlu ZGV4IGU5NGJiMzU1ZGUzLi42ZWNhMDg4NWMwOSAxMDA2NDQKLS0tIGEvZ2NjL2dpbXBsZS1yYW5n ZS5jYworKysgYi9nY2MvZ2ltcGxlLXJhbmdlLmNjCkBAIC0yMTYsOSArMjE2LDExIEBAIGdpbXBs ZV9yYW5nZV9mb2xkIChpcmFuZ2UgJnJlcywgY29uc3QgZ2ltcGxlICpzdG10LAogCQkgICBjb25z dCBpcmFuZ2UgJnIxLCBjb25zdCBpcmFuZ2UgJnIyKQogewogICBnY2NfY2hlY2tpbmdfYXNzZXJ0 IChnaW1wbGVfcmFuZ2VfaGFuZGxlciAoc3RtdCkpOworICB0cmVlIHR5cGUgPSBnaW1wbGVfZXhw cl90eXBlIChzdG10KTsKKyAgdW5zaWduZWQgcHJlYyA9IFRZUEVfUFJFQ0lTSU9OICh0eXBlKTsK IAotICBnaW1wbGVfcmFuZ2VfaGFuZGxlciAoc3RtdCktPmZvbGRfcmFuZ2UgKHJlcywgZ2ltcGxl X2V4cHJfdHlwZSAoc3RtdCksCi0JCQkJCSAgIHIxLCByMik7CisgIGdpbXBsZV9yYW5nZV9oYW5k bGVyIChzdG10KS0+Zm9sZF9yYW5nZSAocmVzLCB0eXBlLAorCQkJCQkgICByMSwgcjIsIHdpOjpz aHdpICgtMSwgcHJlYyksIHdpOjpzaHdpICgtMSwgcHJlYykpOwogCiAgIC8vIElmIHRoZXJlIGFy ZSBhbnkgZ2ltcGxlIGxvb2t1cHMsIGRvIHRob3NlIG5vdy4KICAgZ2ltcGxlX3JhbmdlX2FkanVz dG1lbnQgKHJlcywgc3RtdCk7CkBAIC02MzAsNiArNjMyLDcgQEAgcmFuZ2Vfb2ZfYnVpbHRpbl91 YnNhbl9jYWxsIChyYW5nZV9xdWVyeSAmcXVlcnksIGlyYW5nZSAmciwgZ2NhbGwgKmNhbGwsCiAg IGdjY19jaGVja2luZ19hc3NlcnQgKGNvZGUgPT0gUExVU19FWFBSIHx8IGNvZGUgPT0gTUlOVVNf RVhQUgogCQkgICAgICAgfHwgY29kZSA9PSBNVUxUX0VYUFIpOwogICB0cmVlIHR5cGUgPSBnaW1w bGVfY2FsbF9yZXR1cm5fdHlwZSAoY2FsbCk7CisgIHVuc2lnbmVkIHByZWMgPSBUWVBFX1BSRUNJ U0lPTiAodHlwZSk7CiAgIHJhbmdlX29wZXJhdG9yICpvcCA9IHJhbmdlX29wX2hhbmRsZXIgKGNv ZGUsIHR5cGUpOwogICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChvcCk7CiAgIGludF9yYW5nZV9tYXgg aXIwLCBpcjE7CkBAIC02NDIsNyArNjQ1LDcgQEAgcmFuZ2Vfb2ZfYnVpbHRpbl91YnNhbl9jYWxs IChyYW5nZV9xdWVyeSAmcXVlcnksIGlyYW5nZSAmciwgZ2NhbGwgKmNhbGwsCiAgIC8vIFByZXRl bmQgdGhlIGFyaXRobWV0aWMgaXMgd3JhcHBpbmcuICBJZiB0aGVyZSBpcyBhbnkgb3ZlcmZsb3cs CiAgIC8vIHdlJ2xsIGNvbXBsYWluLCBidXQgd2lsbCBhY3R1YWxseSBkbyB3cmFwcGluZyBvcGVy YXRpb24uCiAgIGZsYWdfd3JhcHYgPSAxOwotICBvcC0+Zm9sZF9yYW5nZSAociwgdHlwZSwgaXIw LCBpcjEpOworICBvcC0+Zm9sZF9yYW5nZSAociwgdHlwZSwgaXIwLCBpcjEsIHdpOjpzaHdpICgt MSwgcHJlYyksIHdpOjpzaHdpICgtMSwgcHJlYykpOwogICBmbGFnX3dyYXB2ID0gc2F2ZWRfZmxh Z193cmFwdjsKIAogICAvLyBJZiBmb3IgYm90aCBhcmd1bWVudHMgdnJwX3ZhbHVlaXplIHJldHVy bmVkIG5vbi1OVUxMLCB0aGlzIHNob3VsZApkaWZmIC0tZ2l0IGEvZ2NjL2lwYS1jcC5jIGIvZ2Nj L2lwYS1jcC5jCmluZGV4IDYwNDFmNzVkODI0Li5kYzI1YjI4ZTM3YSAxMDA2NDQKLS0tIGEvZ2Nj L2lwYS1jcC5jCisrKyBiL2djYy9pcGEtY3AuYwpAQCAtMTYwNyw3ICsxNjA3LDkgQEAgaXBhX3Zh bHVlX3JhbmdlX2Zyb21famZ1bmMgKGlwYV9ub2RlX3BhcmFtcyAqaW5mbywgY2dyYXBoX2VkZ2Ug KmNzLAogCSAgdHJlZSBvcCA9IGlwYV9nZXRfamZfcGFzc190aHJvdWdoX29wZXJhbmQgKGpmdW5j KTsKIAkgIHZhbHVlX3JhbmdlIG9wX3ZyIChvcCwgb3ApOwogCi0JICByYW5nZV9mb2xkX2JpbmFy eV9leHByICgmb3BfcmVzLCBvcGVyYXRpb24sIHZyX3R5cGUsICZzcmN2ciwgJm9wX3ZyKTsKKwkg IHJhbmdlX2ZvbGRfYmluYXJ5X2V4cHIgKCZvcF9yZXMsIG9wZXJhdGlvbiwgdnJfdHlwZSwgJnNy Y3ZyLCAmb3BfdnIsCisJCQkJCQkJd2k6OnNod2kgKC0xLCBUWVBFX1BSRUNJU0lPTih2cl90eXBl KSksCisJCQkJCQkJd2k6OnNod2kgKC0xLCBUWVBFX1BSRUNJU0lPTih2cl90eXBlKSkpOwogCSAg aWYgKGlwYV92cl9vcGVyYXRpb25fYW5kX3R5cGVfZWZmZWN0cyAoJnJlcywKIAkJCQkJCSAmb3Bf cmVzLAogCQkJCQkJIE5PUF9FWFBSLCBwYXJtX3R5cGUsCkBAIC0yNDU1LDcgKzI0NTcsOSBAQCBw cm9wYWdhdGVfdnJfYWNyb3NzX2p1bXBfZnVuY3Rpb24gKGNncmFwaF9lZGdlICpjcywgaXBhX2p1 bXBfZnVuYyAqamZ1bmMsCiAJICB2YWx1ZV9yYW5nZSBvcF9yZXMscmVzOwogCiAJICByYW5nZV9m b2xkX2JpbmFyeV9leHByICgmb3BfcmVzLCBvcGVyYXRpb24sIG9wZXJhbmRfdHlwZSwKLQkJCQkg ICZzcmNfbGF0cy0+bV92YWx1ZV9yYW5nZS5tX3ZyLCAmb3BfdnIpOworCQkJCSAgJnNyY19sYXRz LT5tX3ZhbHVlX3JhbmdlLm1fdnIsICZvcF92ciwKKwkJCQkgIHdpOjpzaHdpICgtMSwgVFlQRV9Q UkVDSVNJT04ob3BlcmFuZF90eXBlKSksCisJCQkJICB3aTo6c2h3aSAoLTEsIFRZUEVfUFJFQ0lT SU9OKG9wZXJhbmRfdHlwZSkpKTsKIAkgIGlwYV92cl9vcGVyYXRpb25fYW5kX3R5cGVfZWZmZWN0 cyAoJnZyLAogCQkJCQkgICAgICZvcF9yZXMsCiAJCQkJCSAgICAgTk9QX0VYUFIsIHBhcmFtX3R5 cGUsCmRpZmYgLS1naXQgYS9nY2MvaXBhLWZuc3VtbWFyeS5jIGIvZ2NjL2lwYS1mbnN1bW1hcnku YwppbmRleCAxOGJiYWUxNDViOS4uMDNhYjYzYTIxYmQgMTAwNjQ0Ci0tLSBhL2djYy9pcGEtZm5z dW1tYXJ5LmMKKysrIGIvZ2NjL2lwYS1mbnN1bW1hcnkuYwpAQCAtNTA2LDcgKzUwNiw5IEBAIGV2 YWx1YXRlX2NvbmRpdGlvbnNfZm9yX2tub3duX2FyZ3MgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9k ZSwKIAkJICAgICAgdmFsdWVfcmFuZ2Ugb3AwIChvcC0+dmFsWzBdLCBvcC0+dmFsWzBdKTsKIAkJ ICAgICAgcmFuZ2VfZm9sZF9iaW5hcnlfZXhwciAoJnJlcywgb3AtPmNvZGUsIG9wLT50eXBlLAog CQkJCQkgICAgICBvcC0+aW5kZXggPyAmb3AwIDogJnZyLAotCQkJCQkgICAgICBvcC0+aW5kZXgg PyAmdnIgOiAmb3AwKTsKKwkJCQkJICAgICAgb3AtPmluZGV4ID8gJnZyIDogJm9wMCwKKwkJCQkJ ICAgICAgd2k6OnNod2kgKC0xLCBUWVBFX1BSRUNJU0lPTihvcC0+dHlwZSkpLAorCQkJCQkgICAg ICB3aTo6c2h3aSAoLTEsIFRZUEVfUFJFQ0lTSU9OKG9wLT50eXBlKSkpOwogCQkgICAgfQogCQkg IGVsc2UKIAkJICAgIGdjY191bnJlYWNoYWJsZSAoKTsKQEAgLTUxOSw3ICs1MjEsOSBAQCBldmFs dWF0ZV9jb25kaXRpb25zX2Zvcl9rbm93bl9hcmdzIChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUs CiAJCSAgdmFsdWVfcmFuZ2UgdmFsX3ZyIChjLT52YWwsIGMtPnZhbCk7CiAJCSAgcmFuZ2VfZm9s ZF9iaW5hcnlfZXhwciAoJnJlcywgYy0+Y29kZSwgYm9vbGVhbl90eXBlX25vZGUsCiAJCQkJCSAg JnZyLAotCQkJCQkgICZ2YWxfdnIpOworCQkJCQkgICZ2YWxfdnIsCisJCQkJCSAgd2k6OnNod2kg KC0xLCBUWVBFX1BSRUNJU0lPTihvcC0+dHlwZSkpLAorCQkJCQkgIHdpOjpzaHdpICgtMSwgVFlQ RV9QUkVDSVNJT04ob3AtPnR5cGUpKSk7CiAJCSAgaWYgKHJlcy56ZXJvX3AgKCkpCiAJCSAgICBj b250aW51ZTsKIAkJfQpkaWZmIC0tZ2l0IGEvZ2NjL3JhbmdlLW9wLmNjIGIvZ2NjL3JhbmdlLW9w LmNjCmluZGV4IGFiOGY0ZTIxMWFjLi4zZmRlZDE3ZmNmZCAxMDA2NDQKLS0tIGEvZ2NjL3Jhbmdl LW9wLmNjCisrKyBiL2djYy9yYW5nZS1vcC5jYwpAQCAtMTI2LDcgKzEyNiw5IEBAIHJhbmdlX29w ZXJhdG9yOjp3aV9mb2xkIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCSBjb25zdCB3aWRlX2lu dCAmbGhfbGIgQVRUUklCVVRFX1VOVVNFRCwKIAkJCSBjb25zdCB3aWRlX2ludCAmbGhfdWIgQVRU UklCVVRFX1VOVVNFRCwKIAkJCSBjb25zdCB3aWRlX2ludCAmcmhfbGIgQVRUUklCVVRFX1VOVVNF RCwKLQkJCSBjb25zdCB3aWRlX2ludCAmcmhfdWIgQVRUUklCVVRFX1VOVVNFRCkgY29uc3QKKwkJ CSBjb25zdCB3aWRlX2ludCAmcmhfdWIgQVRUUklCVVRFX1VOVVNFRCwKKyAgICAgICBjb25zdCB3 aWRlX2ludCAmbGhfbnogQVRUUklCVVRFX1VOVVNFRCwKKyAgICAgICBjb25zdCB3aWRlX2ludCAm cmhfbnogQVRUUklCVVRFX1VOVVNFRCkgY29uc3QKIHsKICAgZ2NjX2NoZWNraW5nX2Fzc2VydCAo aXJhbmdlOjpzdXBwb3J0c190eXBlX3AgKHR5cGUpKTsKICAgci5zZXRfdmFyeWluZyAodHlwZSk7 CkBAIC0xMzgsNyArMTQwLDkgQEAgcmFuZ2Vfb3BlcmF0b3I6OndpX2ZvbGQgKGlyYW5nZSAmciwg dHJlZSB0eXBlLAogYm9vbAogcmFuZ2Vfb3BlcmF0b3I6OmZvbGRfcmFuZ2UgKGlyYW5nZSAmciwg dHJlZSB0eXBlLAogCQkJICAgIGNvbnN0IGlyYW5nZSAmbGgsCi0JCQkgICAgY29uc3QgaXJhbmdl ICZyaCkgY29uc3QKKwkJCSAgICBjb25zdCBpcmFuZ2UgJnJoLAorCQkJICAgIGNvbnN0IHdpZGVf aW50JiBsaF9ueiwKKwkJCSAgICBjb25zdCB3aWRlX2ludCYgcmhfbnopIGNvbnN0CiB7CiAgIGdj Y19jaGVja2luZ19hc3NlcnQgKGlyYW5nZTo6c3VwcG9ydHNfdHlwZV9wICh0eXBlKSk7CiAgIGlm IChlbXB0eV9yYW5nZV92YXJ5aW5nIChyLCB0eXBlLCBsaCwgcmgpKQpAQCAtMTUxLDcgKzE1NSw3 IEBAIHJhbmdlX29wZXJhdG9yOjpmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKICAg aWYgKG51bV9saCA9PSAxICYmIG51bV9yaCA9PSAxKQogICAgIHsKICAgICAgIHdpX2ZvbGQgKHIs IHR5cGUsIGxoLmxvd2VyX2JvdW5kICgwKSwgbGgudXBwZXJfYm91bmQgKDApLAotCSAgICAgICBy aC5sb3dlcl9ib3VuZCAoMCksIHJoLnVwcGVyX2JvdW5kICgwKSk7CisJICAgICAgIHJoLmxvd2Vy X2JvdW5kICgwKSwgcmgudXBwZXJfYm91bmQgKDApLCBsaF9ueiwgcmhfbnopOwogICAgICAgcmV0 dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNjQsNyArMTY4LDcgQEAgcmFuZ2Vfb3BlcmF0b3I6OmZv bGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCXdpZGVfaW50IGxoX3ViID0gbGgudXBw ZXJfYm91bmQgKHgpOwogCXdpZGVfaW50IHJoX2xiID0gcmgubG93ZXJfYm91bmQgKHkpOwogCXdp ZGVfaW50IHJoX3ViID0gcmgudXBwZXJfYm91bmQgKHkpOwotCXdpX2ZvbGQgKHRtcCwgdHlwZSwg bGhfbGIsIGxoX3ViLCByaF9sYiwgcmhfdWIpOworCXdpX2ZvbGQgKHRtcCwgdHlwZSwgbGhfbGIs IGxoX3ViLCByaF9sYiwgcmhfdWIsIGxoX256LCByaF9ueik7CiAJci51bmlvbl8gKHRtcCk7CiAJ aWYgKHIudmFyeWluZ19wICgpKQogCSAgcmV0dXJuIHRydWU7CkBAIC0zOTIsNyArMzk2LDkgQEAg Y2xhc3Mgb3BlcmF0b3JfZXF1YWwgOiBwdWJsaWMgcmFuZ2Vfb3BlcmF0b3IKIHB1YmxpYzoKICAg dmlydHVhbCBib29sIGZvbGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICAgY29u c3QgaXJhbmdlICZvcDEsCi0JCQkgICBjb25zdCBpcmFuZ2UgJm9wMikgY29uc3Q7CisJCQkgICBj b25zdCBpcmFuZ2UgJm9wMiwKKwkJCSAgIGNvbnN0IHdpZGVfaW50ICZuejEsCisJCQkgICBjb25z dCB3aWRlX2ludCAmbnoyKSBjb25zdDsKICAgdmlydHVhbCBib29sIG9wMV9yYW5nZSAoaXJhbmdl ICZyLCB0cmVlIHR5cGUsCiAJCQkgIGNvbnN0IGlyYW5nZSAmbGhzLAogCQkJICBjb25zdCBpcmFu Z2UgJnZhbCkgY29uc3Q7CkBAIC00MDQsNyArNDEwLDkgQEAgcHVibGljOgogYm9vbAogb3BlcmF0 b3JfZXF1YWw6OmZvbGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICAgIGNvbnN0 IGlyYW5nZSAmb3AxLAotCQkJICAgIGNvbnN0IGlyYW5nZSAmb3AyKSBjb25zdAorCQkJICAgIGNv bnN0IGlyYW5nZSAmb3AyLAorCQkJICAgIGNvbnN0IHdpZGVfaW50ICZuejEgQVRUUklCVVRFX1VO VVNFRCwKKwkJCSAgICBjb25zdCB3aWRlX2ludCAmbnoyIEFUVFJJQlVURV9VTlVTRUQpIGNvbnN0 CiB7CiAgIGlmIChlbXB0eV9yYW5nZV92YXJ5aW5nIChyLCB0eXBlLCBvcDEsIG9wMikpCiAgICAg cmV0dXJuIHRydWU7CkBAIC00NzcsNyArNDg1LDkgQEAgY2xhc3Mgb3BlcmF0b3Jfbm90X2VxdWFs IDogcHVibGljIHJhbmdlX29wZXJhdG9yCiBwdWJsaWM6CiAgIHZpcnR1YWwgYm9vbCBmb2xkX3Jh bmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCSAgIGNvbnN0IGlyYW5nZSAmb3AxLAotCQkJ ICAgY29uc3QgaXJhbmdlICZvcDIpIGNvbnN0OworCQkJICAgY29uc3QgaXJhbmdlICZvcDIsCisJ CQkgICBjb25zdCB3aWRlX2ludCAmbnoxLAorCQkJICAgY29uc3Qgd2lkZV9pbnQgJm56MikgY29u c3Q7CiAgIHZpcnR1YWwgYm9vbCBvcDFfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJ ICBjb25zdCBpcmFuZ2UgJmxocywKIAkJCSAgY29uc3QgaXJhbmdlICZvcDIpIGNvbnN0OwpAQCAt NDg5LDcgKzQ5OSw5IEBAIHB1YmxpYzoKIGJvb2wKIG9wZXJhdG9yX25vdF9lcXVhbDo6Zm9sZF9y YW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkJY29uc3QgaXJhbmdlICZvcDEsCi0JCQkJ Y29uc3QgaXJhbmdlICZvcDIpIGNvbnN0CisJCQkJY29uc3QgaXJhbmdlICZvcDIsCisJCQkJY29u c3Qgd2lkZV9pbnQgJm56MSBBVFRSSUJVVEVfVU5VU0VELAorCQkJCWNvbnN0IHdpZGVfaW50ICZu ejIgQVRUUklCVVRFX1VOVVNFRCkgY29uc3QKIHsKICAgaWYgKGVtcHR5X3JhbmdlX3Zhcnlpbmcg KHIsIHR5cGUsIG9wMSwgb3AyKSkKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTYwOCw3ICs2MjAsOSBA QCBjbGFzcyBvcGVyYXRvcl9sdCA6ICBwdWJsaWMgcmFuZ2Vfb3BlcmF0b3IKIHB1YmxpYzoKICAg dmlydHVhbCBib29sIGZvbGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICAgY29u c3QgaXJhbmdlICZvcDEsCi0JCQkgICBjb25zdCBpcmFuZ2UgJm9wMikgY29uc3Q7CisJCQkgICBj b25zdCBpcmFuZ2UgJm9wMiwKKwkJCSAgIGNvbnN0IHdpZGVfaW50ICZuejEsCisJCQkgICBjb25z dCB3aWRlX2ludCAmbnoyKSBjb25zdDsKICAgdmlydHVhbCBib29sIG9wMV9yYW5nZSAoaXJhbmdl ICZyLCB0cmVlIHR5cGUsCiAJCQkgIGNvbnN0IGlyYW5nZSAmbGhzLAogCQkJICBjb25zdCBpcmFu Z2UgJm9wMikgY29uc3Q7CkBAIC02MjAsNyArNjM0LDkgQEAgcHVibGljOgogYm9vbAogb3BlcmF0 b3JfbHQ6OmZvbGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJIGNvbnN0IGlyYW5n ZSAmb3AxLAotCQkJIGNvbnN0IGlyYW5nZSAmb3AyKSBjb25zdAorCQkJIGNvbnN0IGlyYW5nZSAm b3AyLAorICAgICAgIGNvbnN0IHdpZGVfaW50ICZuejEgQVRUUklCVVRFX1VOVVNFRCwKKyAgICAg ICBjb25zdCB3aWRlX2ludCAmbnoyIEFUVFJJQlVURV9VTlVTRUQpIGNvbnN0CiB7CiAgIGlmIChl bXB0eV9yYW5nZV92YXJ5aW5nIChyLCB0eXBlLCBvcDEsIG9wMikpCiAgICAgcmV0dXJuIHRydWU7 CkBAIC02ODUsNyArNzAxLDkgQEAgY2xhc3Mgb3BlcmF0b3JfbGUgOiAgcHVibGljIHJhbmdlX29w ZXJhdG9yCiBwdWJsaWM6CiAgIHZpcnR1YWwgYm9vbCBmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRy ZWUgdHlwZSwKIAkJCSAgIGNvbnN0IGlyYW5nZSAmb3AxLAotCQkJICAgY29uc3QgaXJhbmdlICZv cDIpIGNvbnN0OworCQkJICAgY29uc3QgaXJhbmdlICZvcDIsCisJCQkgICBjb25zdCB3aWRlX2lu dCAmbnoxLAorCQkJICAgY29uc3Qgd2lkZV9pbnQgJm56MikgY29uc3Q7CiAgIHZpcnR1YWwgYm9v bCBvcDFfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICBjb25zdCBpcmFuZ2UgJmxo cywKIAkJCSAgY29uc3QgaXJhbmdlICZvcDIpIGNvbnN0OwpAQCAtNjk3LDcgKzcxNSw5IEBAIHB1 YmxpYzoKIGJvb2wKIG9wZXJhdG9yX2xlOjpmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlw ZSwKIAkJCSBjb25zdCBpcmFuZ2UgJm9wMSwKLQkJCSBjb25zdCBpcmFuZ2UgJm9wMikgY29uc3QK KwkJCSBjb25zdCBpcmFuZ2UgJm9wMiwKKyAgICAgICBjb25zdCB3aWRlX2ludCAmbnoxIEFUVFJJ QlVURV9VTlVTRUQsCisgICAgICAgY29uc3Qgd2lkZV9pbnQgJm56MiBBVFRSSUJVVEVfVU5VU0VE KSBjb25zdAogewogICBpZiAoZW1wdHlfcmFuZ2VfdmFyeWluZyAociwgdHlwZSwgb3AxLCBvcDIp KQogICAgIHJldHVybiB0cnVlOwpAQCAtNzYyLDcgKzc4Miw5IEBAIGNsYXNzIG9wZXJhdG9yX2d0 IDogIHB1YmxpYyByYW5nZV9vcGVyYXRvcgogcHVibGljOgogICB2aXJ0dWFsIGJvb2wgZm9sZF9y YW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgICBjb25zdCBpcmFuZ2UgJm9wMSwKLQkJ CSAgIGNvbnN0IGlyYW5nZSAmb3AyKSBjb25zdDsKKwkJCSAgIGNvbnN0IGlyYW5nZSAmb3AyLAor CQkJICAgY29uc3Qgd2lkZV9pbnQgJm56MSwKKwkJCSAgIGNvbnN0IHdpZGVfaW50ICZuejIpIGNv bnN0OwogICB2aXJ0dWFsIGJvb2wgb3AxX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJ CSAgY29uc3QgaXJhbmdlICZsaHMsCiAJCQkgIGNvbnN0IGlyYW5nZSAmb3AyKSBjb25zdDsKQEAg LTc3Myw3ICs3OTUsOSBAQCBwdWJsaWM6CiAKIGJvb2wKIG9wZXJhdG9yX2d0Ojpmb2xkX3Jhbmdl IChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKLQkJCSBjb25zdCBpcmFuZ2UgJm9wMSwgY29uc3QgaXJh bmdlICZvcDIpIGNvbnN0CisJCQkgY29uc3QgaXJhbmdlICZvcDEsIGNvbnN0IGlyYW5nZSAmb3Ay LAorICAgICAgIGNvbnN0IHdpZGVfaW50ICZuejEgQVRUUklCVVRFX1VOVVNFRCwKKyAgICAgICBj b25zdCB3aWRlX2ludCAmbnoyIEFUVFJJQlVURV9VTlVTRUQpIGNvbnN0CiB7CiAgIGlmIChlbXB0 eV9yYW5nZV92YXJ5aW5nIChyLCB0eXBlLCBvcDEsIG9wMikpCiAgICAgcmV0dXJuIHRydWU7CkBA IC04MzcsNyArODYxLDkgQEAgY2xhc3Mgb3BlcmF0b3JfZ2UgOiAgcHVibGljIHJhbmdlX29wZXJh dG9yCiBwdWJsaWM6CiAgIHZpcnR1YWwgYm9vbCBmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUg dHlwZSwKIAkJCSAgIGNvbnN0IGlyYW5nZSAmb3AxLAotCQkJICAgY29uc3QgaXJhbmdlICZvcDIp IGNvbnN0OworCQkJICAgY29uc3QgaXJhbmdlICZvcDIsCisJCQkgICBjb25zdCB3aWRlX2ludCAm bnoxLAorCQkJICAgY29uc3Qgd2lkZV9pbnQgJm56MikgY29uc3Q7CiAgIHZpcnR1YWwgYm9vbCBv cDFfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICBjb25zdCBpcmFuZ2UgJmxocywK IAkJCSAgY29uc3QgaXJhbmdlICZvcDIpIGNvbnN0OwpAQCAtODQ5LDcgKzg3NSw5IEBAIHB1Ymxp YzoKIGJvb2wKIG9wZXJhdG9yX2dlOjpmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwK IAkJCSBjb25zdCBpcmFuZ2UgJm9wMSwKLQkJCSBjb25zdCBpcmFuZ2UgJm9wMikgY29uc3QKKwkJ CSBjb25zdCBpcmFuZ2UgJm9wMiwKKwkJCSBjb25zdCB3aWRlX2ludCAmbnoxIEFUVFJJQlVURV9V TlVTRUQsCisJCQkgY29uc3Qgd2lkZV9pbnQgJm56MiBBVFRSSUJVVEVfVU5VU0VEKSBjb25zdAog ewogICBpZiAoZW1wdHlfcmFuZ2VfdmFyeWluZyAociwgdHlwZSwgb3AxLCBvcDIpKQogICAgIHJl dHVybiB0cnVlOwpAQCAtOTIyLDEzICs5NTAsMTcgQEAgcHVibGljOgogCQkgICAgICAgIGNvbnN0 IHdpZGVfaW50ICZsaF9sYiwKIAkJICAgICAgICBjb25zdCB3aWRlX2ludCAmbGhfdWIsCiAJCSAg ICAgICAgY29uc3Qgd2lkZV9pbnQgJnJoX2xiLAotCQkgICAgICAgIGNvbnN0IHdpZGVfaW50ICZy aF91YikgY29uc3Q7CisJCSAgICAgICAgY29uc3Qgd2lkZV9pbnQgJnJoX3ViLAorCQkgICAgICAg IGNvbnN0IHdpZGVfaW50ICZsaF9ueiwKKwkJICAgICAgICBjb25zdCB3aWRlX2ludCAmcmhfbnop IGNvbnN0OwogfSBvcF9wbHVzOwogCiB2b2lkCiBvcGVyYXRvcl9wbHVzOjp3aV9mb2xkIChpcmFu Z2UgJnIsIHRyZWUgdHlwZSwKIAkJCWNvbnN0IHdpZGVfaW50ICZsaF9sYiwgY29uc3Qgd2lkZV9p bnQgJmxoX3ViLAotCQkJY29uc3Qgd2lkZV9pbnQgJnJoX2xiLCBjb25zdCB3aWRlX2ludCAmcmhf dWIpIGNvbnN0CisJCQljb25zdCB3aWRlX2ludCAmcmhfbGIsIGNvbnN0IHdpZGVfaW50ICZyaF91 YiwKKwkJCWNvbnN0IHdpZGVfaW50ICZsaF9ueiBBVFRSSUJVVEVfVU5VU0VELAorCQkJY29uc3Qg d2lkZV9pbnQgJnJoX256IEFUVFJJQlVURV9VTlVTRUQpIGNvbnN0CiB7CiAgIHdpOjpvdmVyZmxv d190eXBlIG92X2xiLCBvdl91YjsKICAgc2lnbm9wIHMgPSBUWVBFX1NJR04gKHR5cGUpOwpAQCAt OTQyLDcgKzk3NCw5IEBAIG9wZXJhdG9yX3BsdXM6Om9wMV9yYW5nZSAoaXJhbmdlICZyLCB0cmVl IHR5cGUsCiAJCQkgIGNvbnN0IGlyYW5nZSAmbGhzLAogCQkJICBjb25zdCBpcmFuZ2UgJm9wMikg Y29uc3QKIHsKLSAgcmV0dXJuIHJhbmdlX29wX2hhbmRsZXIgKE1JTlVTX0VYUFIsIHR5cGUpLT5m b2xkX3JhbmdlIChyLCB0eXBlLCBsaHMsIG9wMik7CisgIHJldHVybiByYW5nZV9vcF9oYW5kbGVy IChNSU5VU19FWFBSLCB0eXBlKS0+Zm9sZF9yYW5nZSAociwgdHlwZSwgbGhzLCBvcDIsCisJCQkg IHdpOjpzaHdpICgtMSwgVFlQRV9QUkVDSVNJT04odHlwZSkpLAorCQkJICB3aTo6c2h3aSAoLTEs IFRZUEVfUFJFQ0lTSU9OKHR5cGUpKSk7CiB9CiAKIGJvb2wKQEAgLTk1MCw3ICs5ODQsOSBAQCBv cGVyYXRvcl9wbHVzOjpvcDJfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICBjb25z dCBpcmFuZ2UgJmxocywKIAkJCSAgY29uc3QgaXJhbmdlICZvcDEpIGNvbnN0CiB7Ci0gIHJldHVy biByYW5nZV9vcF9oYW5kbGVyIChNSU5VU19FWFBSLCB0eXBlKS0+Zm9sZF9yYW5nZSAociwgdHlw ZSwgbGhzLCBvcDEpOworICByZXR1cm4gcmFuZ2Vfb3BfaGFuZGxlciAoTUlOVVNfRVhQUiwgdHlw ZSktPmZvbGRfcmFuZ2UgKHIsIHR5cGUsIGxocywgb3AxLAorCQkJICB3aTo6c2h3aSAoLTEsIFRZ UEVfUFJFQ0lTSU9OKHR5cGUpKSwKKwkJCSAgd2k6OnNod2kgKC0xLCBUWVBFX1BSRUNJU0lPTih0 eXBlKSkpOwogfQogCiAKQEAgLTk2NywxMyArMTAwMywxNyBAQCBwdWJsaWM6CiAJCSAgICAgICAg Y29uc3Qgd2lkZV9pbnQgJmxoX2xiLAogCQkgICAgICAgIGNvbnN0IHdpZGVfaW50ICZsaF91YiwK IAkJICAgICAgICBjb25zdCB3aWRlX2ludCAmcmhfbGIsCi0JCSAgICAgICAgY29uc3Qgd2lkZV9p bnQgJnJoX3ViKSBjb25zdDsKKwkJICAgICAgICBjb25zdCB3aWRlX2ludCAmcmhfdWIsCisJCSAg ICAgICAgY29uc3Qgd2lkZV9pbnQgJmxoX256LAorCQkgICAgICAgIGNvbnN0IHdpZGVfaW50ICZy aF9ueikgY29uc3Q7CiB9IG9wX21pbnVzOwogCiB2b2lkIAogb3BlcmF0b3JfbWludXM6OndpX2Zv bGQgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJIGNvbnN0IHdpZGVfaW50ICZsaF9sYiwgY29u c3Qgd2lkZV9pbnQgJmxoX3ViLAotCQkJIGNvbnN0IHdpZGVfaW50ICZyaF9sYiwgY29uc3Qgd2lk ZV9pbnQgJnJoX3ViKSBjb25zdAorCQkJIGNvbnN0IHdpZGVfaW50ICZyaF9sYiwgY29uc3Qgd2lk ZV9pbnQgJnJoX3ViLAorCQkJIGNvbnN0IHdpZGVfaW50ICZsaF9ueiBBVFRSSUJVVEVfVU5VU0VE LAorCQkJIGNvbnN0IHdpZGVfaW50ICZyaF9ueiBBVFRSSUJVVEVfVU5VU0VEKSBjb25zdAogewog ICB3aTo6b3ZlcmZsb3dfdHlwZSBvdl9sYiwgb3ZfdWI7CiAgIHNpZ25vcCBzID0gVFlQRV9TSUdO ICh0eXBlKTsKQEAgLTk4Nyw3ICsxMDI3LDkgQEAgb3BlcmF0b3JfbWludXM6Om9wMV9yYW5nZSAo aXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgICBjb25zdCBpcmFuZ2UgJmxocywKIAkJCSAgIGNv bnN0IGlyYW5nZSAmb3AyKSBjb25zdAogewotICByZXR1cm4gcmFuZ2Vfb3BfaGFuZGxlciAoUExV U19FWFBSLCB0eXBlKS0+Zm9sZF9yYW5nZSAociwgdHlwZSwgbGhzLCBvcDIpOworICByZXR1cm4g cmFuZ2Vfb3BfaGFuZGxlciAoUExVU19FWFBSLCB0eXBlKS0+Zm9sZF9yYW5nZSAociwgdHlwZSwg bGhzLCBvcDIsCisJCQkgd2k6OnNod2kgKC0xLCBUWVBFX1BSRUNJU0lPTih0eXBlKSksCisJCQkg d2k6OnNod2kgKC0xLCBUWVBFX1BSRUNJU0lPTih0eXBlKSkpOwogfQogCiBib29sCkBAIC05OTUs NyArMTAzNyw4IEBAIG9wZXJhdG9yX21pbnVzOjpvcDJfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0 eXBlLAogCQkJICAgY29uc3QgaXJhbmdlICZsaHMsCiAJCQkgICBjb25zdCBpcmFuZ2UgJm9wMSkg Y29uc3QKIHsKLSAgcmV0dXJuIGZvbGRfcmFuZ2UgKHIsIHR5cGUsIG9wMSwgbGhzKTsKKyAgcmV0 dXJuIGZvbGRfcmFuZ2UgKHIsIHR5cGUsIG9wMSwgbGhzLCB3aTo6c2h3aSAoLTEsIFRZUEVfUFJF Q0lTSU9OKHR5cGUpKSwKKwkJCQkJIHdpOjpzaHdpICgtMSwgVFlQRV9QUkVDSVNJT04odHlwZSkp KTsKIH0KIAogCkBAIC0xMDA2LDEzICsxMDQ5LDE3IEBAIHB1YmxpYzoKIAkJICAgICAgICBjb25z dCB3aWRlX2ludCAmbGhfbGIsCiAJCSAgICAgICAgY29uc3Qgd2lkZV9pbnQgJmxoX3ViLAogCQkg ICAgICAgIGNvbnN0IHdpZGVfaW50ICZyaF9sYiwKLQkJICAgICAgICBjb25zdCB3aWRlX2ludCAm cmhfdWIpIGNvbnN0OworCQkgICAgICAgIGNvbnN0IHdpZGVfaW50ICZyaF91YiwKKwkJICAgICAg ICBjb25zdCB3aWRlX2ludCAmbGhfbnosCisJCSAgICAgICAgY29uc3Qgd2lkZV9pbnQgJnJoX256 KSBjb25zdDsKIH0gb3BfbWluOwogCiB2b2lkCiBvcGVyYXRvcl9taW46OndpX2ZvbGQgKGlyYW5n ZSAmciwgdHJlZSB0eXBlLAogCQkgICAgICAgY29uc3Qgd2lkZV9pbnQgJmxoX2xiLCBjb25zdCB3 aWRlX2ludCAmbGhfdWIsCi0JCSAgICAgICBjb25zdCB3aWRlX2ludCAmcmhfbGIsIGNvbnN0IHdp ZGVfaW50ICZyaF91YikgY29uc3QKKwkJICAgICAgIGNvbnN0IHdpZGVfaW50ICZyaF9sYiwgY29u c3Qgd2lkZV9pbnQgJnJoX3ViLAorCQkgICAgICAgY29uc3Qgd2lkZV9pbnQgJmxoX256IEFUVFJJ QlVURV9VTlVTRUQsCisJCSAgICAgICBjb25zdCB3aWRlX2ludCAmcmhfbnogQVRUUklCVVRFX1VO VVNFRCkgY29uc3QKIHsKICAgc2lnbm9wIHMgPSBUWVBFX1NJR04gKHR5cGUpOwogICB3aWRlX2lu dCBuZXdfbGIgPSB3aTo6bWluIChsaF9sYiwgcmhfbGIsIHMpOwpAQCAtMTAyOCwxMyArMTA3NSwx NyBAQCBwdWJsaWM6CiAJCSAgICAgICAgY29uc3Qgd2lkZV9pbnQgJmxoX2xiLAogCQkgICAgICAg IGNvbnN0IHdpZGVfaW50ICZsaF91YiwKIAkJICAgICAgICBjb25zdCB3aWRlX2ludCAmcmhfbGIs Ci0JCSAgICAgICAgY29uc3Qgd2lkZV9pbnQgJnJoX3ViKSBjb25zdDsKKwkJICAgICAgICBjb25z dCB3aWRlX2ludCAmcmhfdWIsCisJCSAgICAgICAgY29uc3Qgd2lkZV9pbnQgJmxoX256LAorCQkg ICAgICAgIGNvbnN0IHdpZGVfaW50ICZyaF9ueikgY29uc3Q7CiB9IG9wX21heDsKIAogdm9pZAog b3BlcmF0b3JfbWF4Ojp3aV9mb2xkIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJICAgICAgIGNv bnN0IHdpZGVfaW50ICZsaF9sYiwgY29uc3Qgd2lkZV9pbnQgJmxoX3ViLAotCQkgICAgICAgY29u c3Qgd2lkZV9pbnQgJnJoX2xiLCBjb25zdCB3aWRlX2ludCAmcmhfdWIpIGNvbnN0CisJCSAgICAg ICBjb25zdCB3aWRlX2ludCAmcmhfbGIsIGNvbnN0IHdpZGVfaW50ICZyaF91YiwKKwkJICAgICAg IGNvbnN0IHdpZGVfaW50ICZsaF9ueiBBVFRSSUJVVEVfVU5VU0VELAorCQkgICAgICAgY29uc3Qg d2lkZV9pbnQgJnJoX256IEFUVFJJQlVURV9VTlVTRUQpIGNvbnN0CiB7CiAgIHNpZ25vcCBzID0g VFlQRV9TSUdOICh0eXBlKTsKICAgd2lkZV9pbnQgbmV3X2xiID0gd2k6Om1heCAobGhfbGIsIHJo X2xiLCBzKTsKQEAgLTExMjMsNyArMTE3NCw5IEBAIHB1YmxpYzoKIAkJICAgICAgICBjb25zdCB3 aWRlX2ludCAmbGhfbGIsCiAJCSAgICAgICAgY29uc3Qgd2lkZV9pbnQgJmxoX3ViLAogCQkgICAg ICAgIGNvbnN0IHdpZGVfaW50ICZyaF9sYiwKLQkJICAgICAgICBjb25zdCB3aWRlX2ludCAmcmhf dWIpIGNvbnN0OworCQkgICAgICAgIGNvbnN0IHdpZGVfaW50ICZyaF91YiwKKwkJICAgICAgICBj b25zdCB3aWRlX2ludCAmbGhfbnosCisJCSAgICAgICAgY29uc3Qgd2lkZV9pbnQgJnJoX256KSBj b25zdDsKICAgdmlydHVhbCBib29sIHdpX29wX292ZXJmbG93cyAod2lkZV9pbnQgJnJlcywgdHJl ZSB0eXBlLAogCQkJCWNvbnN0IHdpZGVfaW50ICZ3MCwgY29uc3Qgd2lkZV9pbnQgJncxKSBjb25z dDsKICAgdmlydHVhbCBib29sIG9wMV9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCkBAIC0x MTQ4LDcgKzEyMDEsOCBAQCBvcGVyYXRvcl9tdWx0OjpvcDFfcmFuZ2UgKGlyYW5nZSAmciwgdHJl ZSB0eXBlLAogCiAgIGlmIChvcDIuc2luZ2xldG9uX3AgKCZvZmZzZXQpICYmICFpbnRlZ2VyX3pl cm9wIChvZmZzZXQpKQogICAgIHJldHVybiByYW5nZV9vcF9oYW5kbGVyIChUUlVOQ19ESVZfRVhQ UiwgdHlwZSktPmZvbGRfcmFuZ2UgKHIsIHR5cGUsCi0JCQkJCQkJCWxocywgb3AyKTsKKwkJCQkJ CQkJbGhzLCBvcDIsIHdpOjpzaHdpICgtMSwgVFlQRV9QUkVDSVNJT04odHlwZSkpLAorCQkJCQkJ CQl3aTo6c2h3aSAoLTEsIFRZUEVfUFJFQ0lTSU9OKHR5cGUpKSk7CiAgIHJldHVybiBmYWxzZTsK IH0KIApAQCAtMTE4Miw3ICsxMjM2LDkgQEAgb3BlcmF0b3JfbXVsdDo6d2lfb3Bfb3ZlcmZsb3dz ICh3aWRlX2ludCAmcmVzLCB0cmVlIHR5cGUsCiB2b2lkIAogb3BlcmF0b3JfbXVsdDo6d2lfZm9s ZCAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQljb25zdCB3aWRlX2ludCAmbGhfbGIsIGNvbnN0 IHdpZGVfaW50ICZsaF91YiwKLQkJCWNvbnN0IHdpZGVfaW50ICZyaF9sYiwgY29uc3Qgd2lkZV9p bnQgJnJoX3ViKSBjb25zdAorCQkJY29uc3Qgd2lkZV9pbnQgJnJoX2xiLCBjb25zdCB3aWRlX2lu dCAmcmhfdWIsCisgICAgICBjb25zdCB3aWRlX2ludCAmbGhfbnogQVRUUklCVVRFX1VOVVNFRCwK KyAgICAgIGNvbnN0IHdpZGVfaW50ICZyaF9ueiBBVFRSSUJVVEVfVU5VU0VEKSBjb25zdAogewog ICBpZiAoVFlQRV9PVkVSRkxPV19VTkRFRklORUQgKHR5cGUpKQogICAgIHsKQEAgLTEyNjcsNyAr MTMyMyw5IEBAIHB1YmxpYzoKIAkJICAgICAgICBjb25zdCB3aWRlX2ludCAmbGhfbGIsCiAJCSAg ICAgICAgY29uc3Qgd2lkZV9pbnQgJmxoX3ViLAogCQkgICAgICAgIGNvbnN0IHdpZGVfaW50ICZy aF9sYiwKLQkJICAgICAgICBjb25zdCB3aWRlX2ludCAmcmhfdWIpIGNvbnN0OworCQkgICAgICAg IGNvbnN0IHdpZGVfaW50ICZyaF91YiwKKwkJICAgICAgICBjb25zdCB3aWRlX2ludCAmbGhfbnos CisJCSAgICAgICAgY29uc3Qgd2lkZV9pbnQgJnJoX256KSBjb25zdDsKICAgdmlydHVhbCBib29s IHdpX29wX292ZXJmbG93cyAod2lkZV9pbnQgJnJlcywgdHJlZSB0eXBlLAogCQkJCWNvbnN0IHdp ZGVfaW50ICYsIGNvbnN0IHdpZGVfaW50ICYpIGNvbnN0OwogcHJpdmF0ZToKQEAgLTEzMTksNyAr MTM3Nyw5IEBAIG9wZXJhdG9yX2Rpdjo6d2lfb3Bfb3ZlcmZsb3dzICh3aWRlX2ludCAmcmVzLCB0 cmVlIHR5cGUsCiB2b2lkCiBvcGVyYXRvcl9kaXY6OndpX2ZvbGQgKGlyYW5nZSAmciwgdHJlZSB0 eXBlLAogCQkgICAgICAgY29uc3Qgd2lkZV9pbnQgJmxoX2xiLCBjb25zdCB3aWRlX2ludCAmbGhf dWIsCi0JCSAgICAgICBjb25zdCB3aWRlX2ludCAmcmhfbGIsIGNvbnN0IHdpZGVfaW50ICZyaF91 YikgY29uc3QKKwkJICAgICAgIGNvbnN0IHdpZGVfaW50ICZyaF9sYiwgY29uc3Qgd2lkZV9pbnQg JnJoX3ViLAorCQkgICAgICAgY29uc3Qgd2lkZV9pbnQgJmxoX256IEFUVFJJQlVURV9VTlVTRUQs CisJCSAgICAgICBjb25zdCB3aWRlX2ludCAmcmhfbnopIGNvbnN0CiB7CiAgIC8vIElmIHdlIGtu b3cgd2Ugd2lsbCBkaXZpZGUgYnkgemVyby4uLgogICBpZiAocmhfbGIgPT0gMCAmJiByaF91YiA9 PSAwKQpAQCAtMTM3Niw2ICsxNDM2LDM2IEBAIG9wZXJhdG9yX2Rpdjo6d2lfZm9sZCAoaXJhbmdl ICZyLCB0cmVlIHR5cGUsCiAJCQl3aTo6b25lIChwcmVjKSwgZGl2aXNvcl9tYXgpOwogICAgICAg ci51bmlvbl8gKHRtcCk7CiAgICAgfQorCisgIC8vIEhhbmRsZToKKyAgLy8geDIuMF8xID0geDJE LjI0NDc7CisgIC8vICMgUkFOR0UgWzAsIDQyOTQ5NjcyOTVdIE5PTlpFUk8gNDI5NDk2NzI5NAor ICAvLyBfMiA9IHgyLjBfMSAqIDI7CisgIC8vICMgUkFOR0UgWzAsIDFdIE5PTlpFUk8gMQorICAv LyBfMyA9IDEgLyBfMjsKKyAgLy8gd2hlcmUgdGhlIGxhc3QgYml0IG9mIF8yIGlzIGtub3duIHRv IGJlIHplcm8gYmVjYXVzZSBvZiB0aGUgKiAyCisgIC8vIEZyb20gdGhhdCBpbmZvcm1hdGlvbiwg d2Uga25vdyB0aGF0IF8yIGNhbid0IGhvbGQgdGhlIHZhbHVlIG9mIDEgc28gXzMgY2FuJ3QgYmUg MSBhcyB3ZWxsCisgIGlmIChkaXZpZGVuZF9taW4gPT0gZGl2aWRlbmRfbWF4CisgICAgICAmJiB3 aTo6Z3RfcChkaXZpZGVuZF9taW4sIHdpOjp6ZXJvKHByZWMpLCBzaWduKQorICAgICAgJiYgd2k6 OmdlX3AoZGl2aXNvcl9taW4sIHdpOjp6ZXJvKHByZWMpLCBzaWduKQorICAgICAgJiYgci5udW1f cGFpcnMoKSA9PSAxCisgICAgICAmJiByaF9ueiAhPSAtMQorICAgICAgJiYgci5sb3dlcl9ib3Vu ZCgwKSAhPSByLnVwcGVyX2JvdW5kKDApKQorICAgIHsKKyAgICAgIGlmICh3aTo6Z2VfcChyLnVw cGVyX2JvdW5kKDApLCB3aTo6b25lKHByZWMpLCBzaWduKSkKKyAgICAgICAgeworICAgICAgICAg IC8vIFVzZSB0aGUgbm9uemVybyBiaXRzIG9mIHRoZSBkaXZpc29yIHRvIHNlZSBpZiBkaXZpZGVu ZF9taW4gaXMKKyAgICAgICAgICAvLyBhIHBvc3NpYmxlIHJlc3VsdC4gSWYgaXQgaXNuJ3QsIHRo ZW4gdGhlIHJlc3VsdCBvZiB0aGUgZGl2aXNpb24KKyAgICAgICAgICAvLyBjYW4gbmV2ZXIgYmUg MS4KKyAgICAgICAgICBhdXRvIGRpdmlzb3JaZXJvQml0cyA9IH5yaF9uejsKKyAgICAgICAgICBp ZiAod2k6OmdlX3AoZGl2aXNvclplcm9CaXRzLCBkaXZpZGVuZF9taW4sIHNpZ24pKQorICAgICAg ICAgICAgeworICAgICAgICAgICAgICB2YWx1ZV9yYW5nZV93aXRoX292ZXJmbG93KHIsIHR5cGUs IHIubG93ZXJfYm91bmQoMCksIHdpOjp6ZXJvKHByZWMpKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgIAorICAgIH0KKwogICAvLyBXZSBzaG91bGRuJ3Qgc3RpbGwgaGF2ZSB1bmRlZmlu ZWQgaGVyZS4KICAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoIXIudW5kZWZpbmVkX3AgKCkpOwogfQpA QCAtMTQxMCw3ICsxNTAwLDkgQEAgb3BlcmF0b3JfZXhhY3RfZGl2aWRlOjpvcDFfcmFuZ2UgKGly YW5nZSAmciwgdHJlZSB0eXBlLAogICAvLyBJZiBvcDIgaXMgYSBtdWx0aXBsZSBvZiAyLCB3ZSB3 b3VsZCBiZSBhYmxlIHRvIHNldCBzb21lIG5vbi16ZXJvIGJpdHMuCiAgIGlmIChvcDIuc2luZ2xl dG9uX3AgKCZvZmZzZXQpCiAgICAgICAmJiAhaW50ZWdlcl96ZXJvcCAob2Zmc2V0KSkKLSAgICBy ZXR1cm4gcmFuZ2Vfb3BfaGFuZGxlciAoTVVMVF9FWFBSLCB0eXBlKS0+Zm9sZF9yYW5nZSAociwg dHlwZSwgbGhzLCBvcDIpOworICAgIHJldHVybiByYW5nZV9vcF9oYW5kbGVyIChNVUxUX0VYUFIs IHR5cGUpLT5mb2xkX3JhbmdlIChyLCB0eXBlLCBsaHMsIG9wMiwKKwkJCQkJCQkJCQkJd2k6OnNo d2kgKC0xLCBUWVBFX1BSRUNJU0lPTih0eXBlKSksCisJCQkJCQkJCQkJCXdpOjpzaHdpICgtMSwg VFlQRV9QUkVDSVNJT04odHlwZSkpKTsKICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xNDIzLDEx ICsxNTE1LDE0IEBAIHB1YmxpYzoKIAkJCSAgY29uc3QgaXJhbmdlICZvcDIpIGNvbnN0OwogICB2 aXJ0dWFsIGJvb2wgZm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgICBjb25z dCBpcmFuZ2UgJm9wMSwKLQkJCSAgIGNvbnN0IGlyYW5nZSAmb3AyKSBjb25zdDsKKwkJCSAgIGNv bnN0IGlyYW5nZSAmb3AyLAorCQkJICAgY29uc3Qgd2lkZV9pbnQgJm56MSwKKwkJCSAgIGNvbnN0 IHdpZGVfaW50ICZuejIpIGNvbnN0OwogCiAgIHZpcnR1YWwgdm9pZCB3aV9mb2xkIChpcmFuZ2Ug JnIsIHRyZWUgdHlwZSwKIAkJCWNvbnN0IHdpZGVfaW50ICZsaF9sYiwgY29uc3Qgd2lkZV9pbnQg JmxoX3ViLAotCQkJY29uc3Qgd2lkZV9pbnQgJnJoX2xiLCBjb25zdCB3aWRlX2ludCAmcmhfdWIp IGNvbnN0OworCQkJY29uc3Qgd2lkZV9pbnQgJnJoX2xiLCBjb25zdCB3aWRlX2ludCAmcmhfdWIs CisgICAgICBjb25zdCB3aWRlX2ludCAmbGhfbnosIGNvbnN0IHdpZGVfaW50ICZyaF9ueikgY29u c3Q7CiAgIHZpcnR1YWwgYm9vbCB3aV9vcF9vdmVyZmxvd3MgKHdpZGVfaW50ICZyZXMsCiAJCQkJ dHJlZSB0eXBlLAogCQkJCWNvbnN0IHdpZGVfaW50ICYsCkBAIC0xNDM5LDEyICsxNTM0LDE2IEBA IGNsYXNzIG9wZXJhdG9yX3JzaGlmdCA6IHB1YmxpYyBjcm9zc19wcm9kdWN0X29wZXJhdG9yCiBw dWJsaWM6CiAgIHZpcnR1YWwgYm9vbCBmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwK IAkJCSAgIGNvbnN0IGlyYW5nZSAmb3AxLAotCQkJICAgY29uc3QgaXJhbmdlICZvcDIpIGNvbnN0 OworCQkJICAgY29uc3QgaXJhbmdlICZvcDIsCisJCQkgICBjb25zdCB3aWRlX2ludCAmbnoxLAor CQkJICAgY29uc3Qgd2lkZV9pbnQgJm56MikgY29uc3Q7CiAgIHZpcnR1YWwgdm9pZCB3aV9mb2xk IChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCWNvbnN0IHdpZGVfaW50ICZsaF9sYiwKIAkJCWNv bnN0IHdpZGVfaW50ICZsaF91YiwKIAkJCWNvbnN0IHdpZGVfaW50ICZyaF9sYiwKLQkJCWNvbnN0 IHdpZGVfaW50ICZyaF91YikgY29uc3Q7CisJCQljb25zdCB3aWRlX2ludCAmcmhfdWIsCisJCQlj b25zdCB3aWRlX2ludCAmbGhfbnosCisJCQljb25zdCB3aWRlX2ludCAmcmhfbnopIGNvbnN0Owog ICB2aXJ0dWFsIGJvb2wgd2lfb3Bfb3ZlcmZsb3dzICh3aWRlX2ludCAmcmVzLAogCQkJCXRyZWUg dHlwZSwKIAkJCQljb25zdCB3aWRlX2ludCAmdzAsCkBAIC0xNDU4LDcgKzE1NTcsOSBAQCBwdWJs aWM6CiBib29sCiBvcGVyYXRvcl9sc2hpZnQ6OmZvbGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0 eXBlLAogCQkJICAgICBjb25zdCBpcmFuZ2UgJm9wMSwKLQkJCSAgICAgY29uc3QgaXJhbmdlICZv cDIpIGNvbnN0CisJCQkgICAgIGNvbnN0IGlyYW5nZSAmb3AyLAorCQkJICAgICBjb25zdCB3aWRl X2ludCAmbnoxIEFUVFJJQlVURV9VTlVTRUQsCisJCQkgICAgIGNvbnN0IHdpZGVfaW50ICZuejIg QVRUUklCVVRFX1VOVVNFRCkgY29uc3QKIHsKICAgaW50X3JhbmdlX21heCBzaGlmdF9yYW5nZTsK ICAgaWYgKCFnZXRfc2hpZnRfcmFuZ2UgKHNoaWZ0X3JhbmdlLCB0eXBlLCBvcDIpKQpAQCAtMTQ4 MiwyMCArMTU4MywyNiBAQCBvcGVyYXRvcl9sc2hpZnQ6OmZvbGRfcmFuZ2UgKGlyYW5nZSAmciwg dHJlZSB0eXBlLAogICAgICAgYm9vbCBzYXZlZF9mbGFnX3dyYXB2X3BvaW50ZXIgPSBmbGFnX3dy YXB2X3BvaW50ZXI7CiAgICAgICBmbGFnX3dyYXB2ID0gMTsKICAgICAgIGZsYWdfd3JhcHZfcG9p bnRlciA9IDE7Ci0gICAgICBib29sIGIgPSBvcF9tdWx0LmZvbGRfcmFuZ2UgKHIsIHR5cGUsIG9w MSwgbXVsdCk7CisgICAgICBib29sIGIgPSBvcF9tdWx0LmZvbGRfcmFuZ2UgKHIsIHR5cGUsIG9w MSwgbXVsdCwgCisJCQkJCQkJCQkJCXdpOjpzaHdpICgtMSwgVFlQRV9QUkVDSVNJT04odHlwZSkp LAorCQkJCQkJCQkJCQl3aTo6c2h3aSAoLTEsIFRZUEVfUFJFQ0lTSU9OKHR5cGUpKSk7CiAgICAg ICBmbGFnX3dyYXB2ID0gc2F2ZWRfZmxhZ193cmFwdjsKICAgICAgIGZsYWdfd3JhcHZfcG9pbnRl ciA9IHNhdmVkX2ZsYWdfd3JhcHZfcG9pbnRlcjsKICAgICAgIHJldHVybiBiOwogICAgIH0KICAg ZWxzZQogICAgIC8vIE90aGVyd2lzZSwgaW52b2tlIHRoZSBnZW5lcmljIGZvbGQgcm91dGluZS4K LSAgICByZXR1cm4gcmFuZ2Vfb3BlcmF0b3I6OmZvbGRfcmFuZ2UgKHIsIHR5cGUsIG9wMSwgc2hp ZnRfcmFuZ2UpOworICAgIHJldHVybiByYW5nZV9vcGVyYXRvcjo6Zm9sZF9yYW5nZSAociwgdHlw ZSwgb3AxLCBzaGlmdF9yYW5nZSwKKwkJCQkJCQkJCQkJd2k6OnNod2kgKC0xLCBUWVBFX1BSRUNJ U0lPTih0eXBlKSksCisJCQkJCQkJCQkJCXdpOjpzaHdpICgtMSwgVFlQRV9QUkVDSVNJT04odHlw ZSkpKTsKIH0KIAogdm9pZAogb3BlcmF0b3JfbHNoaWZ0Ojp3aV9mb2xkIChpcmFuZ2UgJnIsIHRy ZWUgdHlwZSwKIAkJCSAgY29uc3Qgd2lkZV9pbnQgJmxoX2xiLCBjb25zdCB3aWRlX2ludCAmbGhf dWIsCi0JCQkgIGNvbnN0IHdpZGVfaW50ICZyaF9sYiwgY29uc3Qgd2lkZV9pbnQgJnJoX3ViKSBj b25zdAorCQkJICBjb25zdCB3aWRlX2ludCAmcmhfbGIsIGNvbnN0IHdpZGVfaW50ICZyaF91YiwK KwkJCSAgY29uc3Qgd2lkZV9pbnQgJmxoX256IEFUVFJJQlVURV9VTlVTRUQsCisJCQkgIGNvbnN0 IHdpZGVfaW50ICZyaF9ueiBBVFRSSUJVVEVfVU5VU0VEKSBjb25zdAogewogICBzaWdub3Agc2ln biA9IFRZUEVfU0lHTiAodHlwZSk7CiAgIHVuc2lnbmVkIHByZWMgPSBUWVBFX1BSRUNJU0lPTiAo dHlwZSk7CkBAIC0xNTk4LDEwICsxNzA1LDE0IEBAIG9wZXJhdG9yX2xzaGlmdDo6b3AxX3Jhbmdl IChpcmFuZ2UgJnIsCiAJICBpbnRfcmFuZ2VfbWF4IHRtcCA9IGxoczsKIAkgIHV0eXBlID0gdW5z aWduZWRfdHlwZV9mb3IgKHR5cGUpOwogCSAgcmFuZ2VfY2FzdCAodG1wLCB1dHlwZSk7Ci0JICBv cF9yc2hpZnQuZm9sZF9yYW5nZSAociwgdXR5cGUsIHRtcCwgb3AyKTsKKwkgIG9wX3JzaGlmdC5m b2xkX3JhbmdlIChyLCB1dHlwZSwgdG1wLCBvcDIsIAorCQkJCQkJCQkJCQkJCXdpOjpzaHdpICgt MSwgVFlQRV9QUkVDSVNJT04odHlwZSkpLAorCQkJCQkJCQkJCQkJCXdpOjpzaHdpICgtMSwgVFlQ RV9QUkVDSVNJT04odHlwZSkpKTsKIAl9CiAgICAgICBlbHNlCi0Jb3BfcnNoaWZ0LmZvbGRfcmFu Z2UgKHIsIHV0eXBlLCBsaHMsIG9wMik7CisJb3BfcnNoaWZ0LmZvbGRfcmFuZ2UgKHIsIHV0eXBl LCBsaHMsIG9wMiwgCisJCQkJCQkJCQkJCQl3aTo6c2h3aSAoLTEsIFRZUEVfUFJFQ0lTSU9OKHR5 cGUpKSwKKwkJCQkJCQkJCQkJCXdpOjpzaHdpICgtMSwgVFlQRV9QUkVDSVNJT04odHlwZSkpKTsK IAogICAgICAgLy8gU3RhcnQgd2l0aCByYW5nZXMgd2hpY2ggY2FuIHByb2R1Y2UgdGhlIExIUyBi eSByaWdodCBzaGlmdGluZyB0aGUKICAgICAgIC8vIHJlc3VsdCBieSB0aGUgc2hpZnQgYW1vdW50 LgpAQCAtMTY1Myw3ICsxNzY0LDkgQEAgb3BlcmF0b3JfcnNoaWZ0OjpvcDFfcmFuZ2UgKGlyYW5n ZSAmciwKICAgICAgIC8vIEZvbGRpbmcgdGhlIG9yaWdpbmFsIG9wZXJhdGlvbiBtYXkgZGlzY2Fy ZCBzb21lIGltcG9zc2libGUKICAgICAgIC8vIHJhbmdlcyBmcm9tIHRoZSBMSFMuCiAgICAgICBp bnRfcmFuZ2VfbWF4IGxoc19yZWZpbmVkOwotICAgICAgb3BfcnNoaWZ0LmZvbGRfcmFuZ2UgKGxo c19yZWZpbmVkLCB0eXBlLCBpbnRfcmFuZ2U8MT4gKHR5cGUpLCBvcDIpOworICAgICAgb3BfcnNo aWZ0LmZvbGRfcmFuZ2UgKGxoc19yZWZpbmVkLCB0eXBlLCBpbnRfcmFuZ2U8MT4gKHR5cGUpLCBv cDIsCisJCQkJCQl3aTo6c2h3aSAoLTEsIFRZUEVfUFJFQ0lTSU9OKHR5cGUpKSwKKwkJCQkJCXdp OjpzaHdpICgtMSwgVFlQRV9QUkVDSVNJT04odHlwZSkpKTsKICAgICAgIGxoc19yZWZpbmVkLmlu dGVyc2VjdCAobGhzKTsKICAgICAgIGlmIChsaHNfcmVmaW5lZC51bmRlZmluZWRfcCAoKSkKIAl7 CkBAIC0xNjYyLDcgKzE3NzUsOSBAQCBvcGVyYXRvcl9yc2hpZnQ6Om9wMV9yYW5nZSAoaXJhbmdl ICZyLAogCX0KICAgICAgIGludF9yYW5nZV9tYXggc2hpZnRfcmFuZ2UgKHNoaWZ0LCBzaGlmdCk7 CiAgICAgICBpbnRfcmFuZ2VfbWF4IGxiLCB1YjsKLSAgICAgIG9wX2xzaGlmdC5mb2xkX3Jhbmdl IChsYiwgdHlwZSwgbGhzX3JlZmluZWQsIHNoaWZ0X3JhbmdlKTsKKyAgICAgIG9wX2xzaGlmdC5m b2xkX3JhbmdlIChsYiwgdHlwZSwgbGhzX3JlZmluZWQsIHNoaWZ0X3JhbmdlLAorCQkJCQkJd2k6 OnNod2kgKC0xLCBUWVBFX1BSRUNJU0lPTih0eXBlKSksCisJCQkJCQl3aTo6c2h3aSAoLTEsIFRZ UEVfUFJFQ0lTSU9OKHR5cGUpKSk7CiAgICAgICAvLyAgICBMSFMKICAgICAgIC8vIDAwMDAgMDEx MSA9IE9QMSA+PiAzCiAgICAgICAvLwpAQCAtMTY3NCw3ICsxNzg5LDkgQEAgb3BlcmF0b3JfcnNo aWZ0OjpvcDFfcmFuZ2UgKGlyYW5nZSAmciwKIAkJCQkJICAgIGJ1aWxkX21pbnVzX29uZV9jc3Qg KHR5cGUpLAogCQkJCQkgICAgc2hpZnQpKTsKICAgICAgIGludF9yYW5nZV9tYXggbWFza19yYW5n ZSAoYnVpbGRfemVyb19jc3QgKHR5cGUpLCBtYXNrKTsKLSAgICAgIG9wX3BsdXMuZm9sZF9yYW5n ZSAodWIsIHR5cGUsIGxiLCBtYXNrX3JhbmdlKTsKKyAgICAgIG9wX3BsdXMuZm9sZF9yYW5nZSAo dWIsIHR5cGUsIGxiLCBtYXNrX3JhbmdlLCAKKwkJCQkJCXdpOjpzaHdpICgtMSwgVFlQRV9QUkVD SVNJT04odHlwZSkpLAorCQkJCQkJd2k6OnNod2kgKC0xLCBUWVBFX1BSRUNJU0lPTih0eXBlKSkp OwogICAgICAgciA9IGxiOwogICAgICAgci51bmlvbl8gKHViKTsKICAgICAgIGlmICghbGhzX3Jl ZmluZWQuY29udGFpbnNfcCAoYnVpbGRfemVyb19jc3QgKHR5cGUpKSkKQEAgLTE3MDksNyArMTgy Niw5IEBAIG9wZXJhdG9yX3JzaGlmdDo6d2lfb3Bfb3ZlcmZsb3dzICh3aWRlX2ludCAmcmVzLAog Ym9vbAogb3BlcmF0b3JfcnNoaWZ0Ojpmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwK IAkJCSAgICAgY29uc3QgaXJhbmdlICZvcDEsCi0JCQkgICAgIGNvbnN0IGlyYW5nZSAmb3AyKSBj b25zdAorCQkJICAgICBjb25zdCBpcmFuZ2UgJm9wMiwKKwkJCSAgICAgY29uc3Qgd2lkZV9pbnQg Jm56MSwKKwkJCSAgICAgY29uc3Qgd2lkZV9pbnQgJm56MikgY29uc3QKIHsKICAgaW50X3Jhbmdl X21heCBzaGlmdDsKICAgaWYgKCFnZXRfc2hpZnRfcmFuZ2UgKHNoaWZ0LCB0eXBlLCBvcDIpKQpA QCAtMTcyMSwxMyArMTg0MCwxNiBAQCBvcGVyYXRvcl9yc2hpZnQ6OmZvbGRfcmFuZ2UgKGlyYW5n ZSAmciwgdHJlZSB0eXBlLAogICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gIHJldHVybiBy YW5nZV9vcGVyYXRvcjo6Zm9sZF9yYW5nZSAociwgdHlwZSwgb3AxLCBzaGlmdCk7CisgIHJldHVy biByYW5nZV9vcGVyYXRvcjo6Zm9sZF9yYW5nZSAociwgdHlwZSwgb3AxLCBzaGlmdCwgCisJCQkJ CQkJCQkJCQkJCQkJCQkgbnoxLCBuejIpOwogfQogCiB2b2lkCiBvcGVyYXRvcl9yc2hpZnQ6Ondp X2ZvbGQgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICBjb25zdCB3aWRlX2ludCAmbGhfbGIs IGNvbnN0IHdpZGVfaW50ICZsaF91YiwKLQkJCSAgY29uc3Qgd2lkZV9pbnQgJnJoX2xiLCBjb25z dCB3aWRlX2ludCAmcmhfdWIpIGNvbnN0CisJCQkgIGNvbnN0IHdpZGVfaW50ICZyaF9sYiwgY29u c3Qgd2lkZV9pbnQgJnJoX3ViLAorCQkJICBjb25zdCB3aWRlX2ludCAmbGhfbnogQVRUUklCVVRF X1VOVVNFRCwKKwkJCSAgY29uc3Qgd2lkZV9pbnQgJnJoX256IEFUVFJJQlVURV9VTlVTRUQpIGNv bnN0CiB7CiAgIHdpX2Nyb3NzX3Byb2R1Y3QgKHIsIHR5cGUsIGxoX2xiLCBsaF91YiwgcmhfbGIs IHJoX3ViKTsKIH0KQEAgLTE3MzgsNyArMTg2MCw5IEBAIGNsYXNzIG9wZXJhdG9yX2Nhc3Q6IHB1 YmxpYyByYW5nZV9vcGVyYXRvcgogcHVibGljOgogICB2aXJ0dWFsIGJvb2wgZm9sZF9yYW5nZSAo aXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgICBjb25zdCBpcmFuZ2UgJm9wMSwKLQkJCSAgIGNv bnN0IGlyYW5nZSAmb3AyKSBjb25zdDsKKwkJCSAgIGNvbnN0IGlyYW5nZSAmb3AyLAorCQkJICAg Y29uc3Qgd2lkZV9pbnQgJm56MSwKKwkJCSAgIGNvbnN0IHdpZGVfaW50ICZuejIpIGNvbnN0Owog ICB2aXJ0dWFsIGJvb2wgb3AxX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCSAgY29u c3QgaXJhbmdlICZsaHMsCiAJCQkgIGNvbnN0IGlyYW5nZSAmb3AyKSBjb25zdDsKQEAgLTE4MTks NyArMTk0Myw5IEBAIG9wZXJhdG9yX2Nhc3Q6OmZvbGRfcGFpciAoaXJhbmdlICZyLCB1bnNpZ25l ZCBpbmRleCwKIGJvb2wKIG9wZXJhdG9yX2Nhc3Q6OmZvbGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJl ZSB0eXBlIEFUVFJJQlVURV9VTlVTRUQsCiAJCQkgICBjb25zdCBpcmFuZ2UgJmlubmVyLAotCQkJ ICAgY29uc3QgaXJhbmdlICZvdXRlcikgY29uc3QKKwkJCSAgIGNvbnN0IGlyYW5nZSAmb3V0ZXIs CisJCQkgICBjb25zdCB3aWRlX2ludCAmaW5uZXJfbnogQVRUUklCVVRFX1VOVVNFRCwKKwkJCSAg IGNvbnN0IHdpZGVfaW50ICZvdXRlcl9ueiBBVFRSSUJVVEVfVU5VU0VEKSBjb25zdAogewogICBp ZiAoZW1wdHlfcmFuZ2VfdmFyeWluZyAociwgdHlwZSwgaW5uZXIsIG91dGVyKSkKICAgICByZXR1 cm4gdHJ1ZTsKQEAgLTE5MDMsNyArMjAyOSw5IEBAIG9wZXJhdG9yX2Nhc3Q6Om9wMV9yYW5nZSAo aXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJICByYW5nZV9vcF9oYW5kbGVyIChQTFVTX0VYUFIsIHR5 cGUpLT5mb2xkX3JhbmdlIChsaHNfbmVnLAogCQkJCQkJCSAgdHlwZSwKIAkJCQkJCQkgIGNvbnZl cnRlZF9saHMsCi0JCQkJCQkJICBsaW1fcmFuZ2UpOworCQkJCQkJCSAgbGltX3JhbmdlLAorCQkJ CQkJCQl3aTo6c2h3aSAoLTEsIFRZUEVfUFJFQ0lTSU9OKHR5cGUpKSwKKwkJCQkJCQkJd2k6OnNo d2kgKC0xLCBUWVBFX1BSRUNJU0lPTih0eXBlKSkpOwogCSAgLy8gbGhzX25lZyBub3cgaGFzIGFs bCB0aGUgbmVnYXRpdmUgdmVyc2lvbnMgb2YgdGhlIExIUy4KIAkgIC8vIE5vdyB1bmlvbiBpbiBh bGwgdGhlIHZhbHVlcyBmcm9tIFNJR05FRCBNSU4gKDB4ODAwMDApIHRvCiAJICAvLyBsaW0tMSBp biBvcmRlciB0byBmaWxsIGluIGFsbCB0aGUgcmFuZ2VzIHdpdGggdGhlIHVwcGVyCkBAIC0xOTM4 LDE0ICsyMDY2LDE4IEBAIG9wZXJhdG9yX2Nhc3Q6Om9wMV9yYW5nZSAoaXJhbmdlICZyLCB0cmVl IHR5cGUsCiAgICAgICAvLyB0aGUgcmFuZ2Ugb2YgdGhlIFJIUyBieSB0aGlzIGFzc2lnbm1lbnQu CiAgICAgICAvLwogICAgICAgLy8gQ2FzdCB0aGUgcmFuZ2Ugb2YgdGhlIFJIUyB0byB0aGUgdHlw ZSBvZiB0aGUgTEhTLgotICAgICAgZm9sZF9yYW5nZSAodG1wLCBsaHNfdHlwZSwgaW50X3Jhbmdl PDE+ICh0eXBlKSwgaW50X3JhbmdlPDE+IChsaHNfdHlwZSkpOworICAgICAgZm9sZF9yYW5nZSAo dG1wLCBsaHNfdHlwZSwgaW50X3JhbmdlPDE+ICh0eXBlKSwgaW50X3JhbmdlPDE+IChsaHNfdHlw ZSksCisJCQkJCQkJCQl3aTo6c2h3aSAoLTEsIFRZUEVfUFJFQ0lTSU9OKGxoc190eXBlKSksCisJ CQkJCQkJCQl3aTo6c2h3aSAoLTEsIFRZUEVfUFJFQ0lTSU9OKGxoc190eXBlKSkpOwogICAgICAg Ly8gSW50ZXJzZWN0IHRoaXMgd2l0aCB0aGUgTEhTIHJhbmdlIHdpbGwgcHJvZHVjZSB0aGUgcmFu Z2UsCiAgICAgICAvLyB3aGljaCB3aWxsIGJlIGNhc3QgdG8gdGhlIFJIUyB0eXBlIGJlZm9yZSBy ZXR1cm5pbmcuCiAgICAgICB0bXAuaW50ZXJzZWN0IChsaHMpOwogICAgIH0KIAogICAvLyBDYXN0 IHRoZSBjYWxjdWxhdGVkIHJhbmdlIHRvIHRoZSB0eXBlIG9mIHRoZSBSSFMuCi0gIGZvbGRfcmFu Z2UgKHIsIHR5cGUsIHRtcCwgaW50X3JhbmdlPDE+ICh0eXBlKSk7CisgIGZvbGRfcmFuZ2UgKHIs IHR5cGUsIHRtcCwgaW50X3JhbmdlPDE+ICh0eXBlKSwKKwkJCQkJCQl3aTo6c2h3aSAoLTEsIFRZ UEVfUFJFQ0lTSU9OKHR5cGUpKSwKKwkJCQkJCQl3aTo6c2h3aSAoLTEsIFRZUEVfUFJFQ0lTSU9O KHR5cGUpKSk7CiAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xOTU1LDcgKzIwODcsOSBAQCBjbGFz cyBvcGVyYXRvcl9sb2dpY2FsX2FuZCA6IHB1YmxpYyByYW5nZV9vcGVyYXRvcgogcHVibGljOgog ICB2aXJ0dWFsIGJvb2wgZm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgICBj b25zdCBpcmFuZ2UgJmxoLAotCQkJICAgY29uc3QgaXJhbmdlICZyaCkgY29uc3Q7CisJCQkgICBj b25zdCBpcmFuZ2UgJnJoLAorCQkJICAgY29uc3Qgd2lkZV9pbnQgJmxoX256LAorCQkJICAgY29u c3Qgd2lkZV9pbnQgJnJoX256KSBjb25zdDsKICAgdmlydHVhbCBib29sIG9wMV9yYW5nZSAoaXJh bmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgIGNvbnN0IGlyYW5nZSAmbGhzLAogCQkJICBjb25zdCBp cmFuZ2UgJm9wMikgY29uc3Q7CkBAIC0xOTY4LDcgKzIxMDIsOSBAQCBwdWJsaWM6CiBib29sCiBv cGVyYXRvcl9sb2dpY2FsX2FuZDo6Zm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJ CQkJICBjb25zdCBpcmFuZ2UgJmxoLAotCQkJCSAgY29uc3QgaXJhbmdlICZyaCkgY29uc3QKKwkJ CQkgIGNvbnN0IGlyYW5nZSAmcmgsCisJCQkJICBjb25zdCB3aWRlX2ludCAmbGhfbnogQVRUUklC VVRFX1VOVVNFRCwKKwkJCQkgIGNvbnN0IHdpZGVfaW50ICZyaF9ueiBBVFRSSUJVVEVfVU5VU0VE KSBjb25zdAogewogICBpZiAoZW1wdHlfcmFuZ2VfdmFyeWluZyAociwgdHlwZSwgbGgsIHJoKSkK ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIwMjIsNyArMjE1OCw5IEBAIGNsYXNzIG9wZXJhdG9yX2Jp dHdpc2VfYW5kIDogcHVibGljIHJhbmdlX29wZXJhdG9yCiBwdWJsaWM6CiAgIHZpcnR1YWwgYm9v bCBmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCSAgIGNvbnN0IGlyYW5nZSAm bGgsCi0JCQkgICBjb25zdCBpcmFuZ2UgJnJoKSBjb25zdDsKKwkJCSAgIGNvbnN0IGlyYW5nZSAm cmgsCisJCQkgICBjb25zdCB3aWRlX2ludCAmbGhfbnosCisJCQkgICBjb25zdCB3aWRlX2ludCAm cmhfbnopIGNvbnN0OwogICB2aXJ0dWFsIGJvb2wgb3AxX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUg dHlwZSwKIAkJCSAgY29uc3QgaXJhbmdlICZsaHMsCiAJCQkgIGNvbnN0IGlyYW5nZSAmb3AyKSBj b25zdDsKQEAgLTIwMzMsNyArMjE3MSw5IEBAIHB1YmxpYzoKIAkJICAgICAgICBjb25zdCB3aWRl X2ludCAmbGhfbGIsCiAJCSAgICAgICAgY29uc3Qgd2lkZV9pbnQgJmxoX3ViLAogCQkgICAgICAg IGNvbnN0IHdpZGVfaW50ICZyaF9sYiwKLQkJICAgICAgICBjb25zdCB3aWRlX2ludCAmcmhfdWIp IGNvbnN0OworCQkgICAgICAgIGNvbnN0IHdpZGVfaW50ICZyaF91YiwKKwkJICAgICAgICBjb25z dCB3aWRlX2ludCAmbGhfbnosCisJCSAgICAgICAgY29uc3Qgd2lkZV9pbnQgJnJoX256KSBjb25z dDsKIHByaXZhdGU6CiAgIHZvaWQgc2ltcGxlX29wMV9yYW5nZV9zb2x2ZXIgKGlyYW5nZSAmciwg dHJlZSB0eXBlLAogCQkJCWNvbnN0IGlyYW5nZSAmbGhzLApAQCAtMjEwNyw5ICsyMjQ3LDEyIEBA IG9wZXJhdG9yX2JpdHdpc2VfYW5kOjpyZW1vdmVfaW1wb3NzaWJsZV9yYW5nZXMgKGlyYW5nZSAm ciwKIGJvb2wKIG9wZXJhdG9yX2JpdHdpc2VfYW5kOjpmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRy ZWUgdHlwZSwKIAkJCQkgIGNvbnN0IGlyYW5nZSAmbGgsCi0JCQkJICBjb25zdCBpcmFuZ2UgJnJo KSBjb25zdAorCQkJCSAgY29uc3QgaXJhbmdlICZyaCwKKwkJCQkgIGNvbnN0IHdpZGVfaW50ICZs aF9ueiwKKwkJCQkgIGNvbnN0IHdpZGVfaW50ICZyaF9ueikgY29uc3QKIHsKLSAgaWYgKHJhbmdl X29wZXJhdG9yOjpmb2xkX3JhbmdlIChyLCB0eXBlLCBsaCwgcmgpKQorICBpZiAocmFuZ2Vfb3Bl cmF0b3I6OmZvbGRfcmFuZ2UgKHIsIHR5cGUsIGxoLCByaCwgCisJCQkJCQkJCQkJCQkJCQkJCWxo X256LCByaF9ueikpCiAgICAgewogICAgICAgLy8gRklYTUU6IFRoaXMgaXMgdGVtcG9yYXJpbHkg ZGlzYWJsZWQgYmVjYXVzZSwgdGhvdWdoIGl0CiAgICAgICAvLyBnZW5lcmF0ZXMgYmV0dGVyIHJh bmdlcywgaXQncyBub3RpY2VhYmx5IHNsb3dlciBmb3IgZXZycC4KQEAgLTIyNTIsNyArMjM5NSw5 IEBAIG9wZXJhdG9yX2JpdHdpc2VfYW5kOjp3aV9mb2xkIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwK IAkJCSAgICAgICBjb25zdCB3aWRlX2ludCAmbGhfbGIsCiAJCQkgICAgICAgY29uc3Qgd2lkZV9p bnQgJmxoX3ViLAogCQkJICAgICAgIGNvbnN0IHdpZGVfaW50ICZyaF9sYiwKLQkJCSAgICAgICBj b25zdCB3aWRlX2ludCAmcmhfdWIpIGNvbnN0CisJCQkgICAgICAgY29uc3Qgd2lkZV9pbnQgJnJo X3ViLAorCQkJICAgICAgIGNvbnN0IHdpZGVfaW50ICZsaF9ueiBBVFRSSUJVVEVfVU5VU0VELAor CQkJICAgICAgIGNvbnN0IHdpZGVfaW50ICZyaF9ueiBBVFRSSUJVVEVfVU5VU0VEKSBjb25zdAog ewogICBpZiAod2lfb3B0aW1pemVfYW5kX29yIChyLCBCSVRfQU5EX0VYUFIsIHR5cGUsIGxoX2xi LCBsaF91YiwgcmhfbGIsIHJoX3ViKSkKICAgICByZXR1cm47CkBAIC0yNDMyLDcgKzI1NzcsOSBA QCBjbGFzcyBvcGVyYXRvcl9sb2dpY2FsX29yIDogcHVibGljIHJhbmdlX29wZXJhdG9yCiBwdWJs aWM6CiAgIHZpcnR1YWwgYm9vbCBmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJ CSAgIGNvbnN0IGlyYW5nZSAmbGgsCi0JCQkgICBjb25zdCBpcmFuZ2UgJnJoKSBjb25zdDsKKwkJ CSAgIGNvbnN0IGlyYW5nZSAmcmgsCisJCQkgICBjb25zdCB3aWRlX2ludCAmbGhfbnosCisJCQkg ICBjb25zdCB3aWRlX2ludCAmcmhfbnopIGNvbnN0OwogICB2aXJ0dWFsIGJvb2wgb3AxX3Jhbmdl IChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCSAgY29uc3QgaXJhbmdlICZsaHMsCiAJCQkgIGNv bnN0IGlyYW5nZSAmb3AyKSBjb25zdDsKQEAgLTI0NDQsNyArMjU5MSw5IEBAIHB1YmxpYzoKIGJv b2wKIG9wZXJhdG9yX2xvZ2ljYWxfb3I6OmZvbGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBl IEFUVFJJQlVURV9VTlVTRUQsCiAJCQkJIGNvbnN0IGlyYW5nZSAmbGgsCi0JCQkJIGNvbnN0IGly YW5nZSAmcmgpIGNvbnN0CisJCQkJIGNvbnN0IGlyYW5nZSAmcmgsCisJCQkJIGNvbnN0IHdpZGVf aW50ICZsaF9ueiBBVFRSSUJVVEVfVU5VU0VELAorCQkJCSBjb25zdCB3aWRlX2ludCAmcmhfbnog QVRUUklCVVRFX1VOVVNFRCkgY29uc3QKIHsKICAgaWYgKGVtcHR5X3JhbmdlX3ZhcnlpbmcgKHIs IHR5cGUsIGxoLCByaCkpCiAgICAgcmV0dXJuIHRydWU7CkBAIC0yNDk3LDcgKzI2NDYsOSBAQCBw dWJsaWM6CiAJCSAgICAgICAgY29uc3Qgd2lkZV9pbnQgJmxoX2xiLAogCQkgICAgICAgIGNvbnN0 IHdpZGVfaW50ICZsaF91YiwKIAkJICAgICAgICBjb25zdCB3aWRlX2ludCAmcmhfbGIsCi0JCSAg ICAgICAgY29uc3Qgd2lkZV9pbnQgJnJoX3ViKSBjb25zdDsKKwkJICAgICAgICBjb25zdCB3aWRl X2ludCAmcmhfdWIsCisJCSAgICAgICAgY29uc3Qgd2lkZV9pbnQgJmxoX256LAorCQkgICAgICAg IGNvbnN0IHdpZGVfaW50ICZyaF9ueikgY29uc3Q7CiB9IG9wX2JpdHdpc2Vfb3I7CiAKIHZvaWQK QEAgLTI1MDUsNyArMjY1Niw5IEBAIG9wZXJhdG9yX2JpdHdpc2Vfb3I6OndpX2ZvbGQgKGlyYW5n ZSAmciwgdHJlZSB0eXBlLAogCQkJICAgICAgY29uc3Qgd2lkZV9pbnQgJmxoX2xiLAogCQkJICAg ICAgY29uc3Qgd2lkZV9pbnQgJmxoX3ViLAogCQkJICAgICAgY29uc3Qgd2lkZV9pbnQgJnJoX2xi LAotCQkJICAgICAgY29uc3Qgd2lkZV9pbnQgJnJoX3ViKSBjb25zdAorCQkJICAgICAgY29uc3Qg d2lkZV9pbnQgJnJoX3ViLAorCQkJICAgICAgY29uc3Qgd2lkZV9pbnQgJmxoX256IEFUVFJJQlVU RV9VTlVTRUQsCisJCQkgICAgICBjb25zdCB3aWRlX2ludCAmcmhfbnogQVRUUklCVVRFX1VOVVNF RCkgY29uc3QKIHsKICAgaWYgKHdpX29wdGltaXplX2FuZF9vciAociwgQklUX0lPUl9FWFBSLCB0 eXBlLCBsaF9sYiwgbGhfdWIsIHJoX2xiLCByaF91YikpCiAgICAgcmV0dXJuOwpAQCAtMjU3Nyw3 ICsyNzMwLDkgQEAgcHVibGljOgogCQkgICAgICAgIGNvbnN0IHdpZGVfaW50ICZsaF9sYiwKIAkJ ICAgICAgICBjb25zdCB3aWRlX2ludCAmbGhfdWIsCiAJCSAgICAgICAgY29uc3Qgd2lkZV9pbnQg JnJoX2xiLAotCQkgICAgICAgIGNvbnN0IHdpZGVfaW50ICZyaF91YikgY29uc3Q7CisJCSAgICAg ICAgY29uc3Qgd2lkZV9pbnQgJnJoX3ViLAorCQkgICAgICAgIGNvbnN0IHdpZGVfaW50ICZsaF9u eiwKKwkJICAgICAgICBjb25zdCB3aWRlX2ludCAmcmhfbnopIGNvbnN0OwogICB2aXJ0dWFsIGJv b2wgb3AxX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCSAgY29uc3QgaXJhbmdlICZs aHMsCiAJCQkgIGNvbnN0IGlyYW5nZSAmb3AyKSBjb25zdDsKQEAgLTI1OTEsNyArMjc0Niw5IEBA IG9wZXJhdG9yX2JpdHdpc2VfeG9yOjp3aV9mb2xkIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJ CSAgICAgICBjb25zdCB3aWRlX2ludCAmbGhfbGIsCiAJCQkgICAgICAgY29uc3Qgd2lkZV9pbnQg JmxoX3ViLAogCQkJICAgICAgIGNvbnN0IHdpZGVfaW50ICZyaF9sYiwKLQkJCSAgICAgICBjb25z dCB3aWRlX2ludCAmcmhfdWIpIGNvbnN0CisJCQkgICAgICAgY29uc3Qgd2lkZV9pbnQgJnJoX3Vi LAorCQkJICAgICAgIGNvbnN0IHdpZGVfaW50ICZsaF9ueiBBVFRSSUJVVEVfVU5VU0VELAorCQkJ ICAgICAgIGNvbnN0IHdpZGVfaW50ICZyaF9ueiBBVFRSSUJVVEVfVU5VU0VEKSBjb25zdAogewog ICBzaWdub3Agc2lnbiA9IFRZUEVfU0lHTiAodHlwZSk7CiAgIHdpZGVfaW50IG1heWJlX25vbnpl cm9fbGgsIG11c3RiZV9ub256ZXJvX2xoOwpAQCAtMjY2Niw3ICsyODIzLDkgQEAgcHVibGljOgog CQkgICAgICAgIGNvbnN0IHdpZGVfaW50ICZsaF9sYiwKIAkJICAgICAgICBjb25zdCB3aWRlX2lu dCAmbGhfdWIsCiAJCSAgICAgICAgY29uc3Qgd2lkZV9pbnQgJnJoX2xiLAotCQkgICAgICAgIGNv bnN0IHdpZGVfaW50ICZyaF91YikgY29uc3Q7CisJCSAgICAgICAgY29uc3Qgd2lkZV9pbnQgJnJo X3ViLAorCQkgICAgICAgIGNvbnN0IHdpZGVfaW50ICZsaF9ueiwKKwkJICAgICAgICBjb25zdCB3 aWRlX2ludCAmcmhfbnopIGNvbnN0OwogICB2aXJ0dWFsIGJvb2wgb3AxX3JhbmdlIChpcmFuZ2Ug JnIsIHRyZWUgdHlwZSwKIAkJCSAgY29uc3QgaXJhbmdlICZsaHMsCiAJCQkgIGNvbnN0IGlyYW5n ZSAmb3AyKSBjb25zdDsKQEAgLTI2ODAsNyArMjgzOSw5IEBAIG9wZXJhdG9yX3RydW5jX21vZDo6 d2lfZm9sZCAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgICAgIGNvbnN0IHdpZGVfaW50ICZs aF9sYiwKIAkJCSAgICAgY29uc3Qgd2lkZV9pbnQgJmxoX3ViLAogCQkJICAgICBjb25zdCB3aWRl X2ludCAmcmhfbGIsCi0JCQkgICAgIGNvbnN0IHdpZGVfaW50ICZyaF91YikgY29uc3QKKwkJCSAg ICAgY29uc3Qgd2lkZV9pbnQgJnJoX3ViLAorCQkJICAgICBjb25zdCB3aWRlX2ludCAmbGhfbnog QVRUUklCVVRFX1VOVVNFRCwKKwkJCSAgICAgY29uc3Qgd2lkZV9pbnQgJnJoX256IEFUVFJJQlVU RV9VTlVTRUQpIGNvbnN0CiB7CiAgIHdpZGVfaW50IG5ld19sYiwgbmV3X3ViLCB0bXA7CiAgIHNp Z25vcCBzaWduID0gVFlQRV9TSUdOICh0eXBlKTsKQEAgLTI3ODQsNyArMjk0NSw5IEBAIGNsYXNz IG9wZXJhdG9yX2xvZ2ljYWxfbm90IDogcHVibGljIHJhbmdlX29wZXJhdG9yCiBwdWJsaWM6CiAg IHZpcnR1YWwgYm9vbCBmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCSAgIGNv bnN0IGlyYW5nZSAmbGgsCi0JCQkgICBjb25zdCBpcmFuZ2UgJnJoKSBjb25zdDsKKwkJCSAgIGNv bnN0IGlyYW5nZSAmcmgsCisJCQkgICBjb25zdCB3aWRlX2ludCAmbGhfbnosCisJCQkgICBjb25z dCB3aWRlX2ludCAmcmhfbnopIGNvbnN0OwogICB2aXJ0dWFsIGJvb2wgb3AxX3JhbmdlIChpcmFu Z2UgJnIsIHRyZWUgdHlwZSwKIAkJCSAgY29uc3QgaXJhbmdlICZsaHMsCiAJCQkgIGNvbnN0IGly YW5nZSAmb3AyKSBjb25zdDsKQEAgLTI4MDcsNyArMjk3MCw5IEBAIHB1YmxpYzoKIGJvb2wKIG9w ZXJhdG9yX2xvZ2ljYWxfbm90Ojpmb2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJ CQkgIGNvbnN0IGlyYW5nZSAmbGgsCi0JCQkJICBjb25zdCBpcmFuZ2UgJnJoIEFUVFJJQlVURV9V TlVTRUQpIGNvbnN0CisJCQkJICBjb25zdCBpcmFuZ2UgJnJoIEFUVFJJQlVURV9VTlVTRUQsCisJ CQkJICBjb25zdCB3aWRlX2ludCAmbGhfbnogQVRUUklCVVRFX1VOVVNFRCwKKwkJCQkgIGNvbnN0 IHdpZGVfaW50ICZyaF9ueiBBVFRSSUJVVEVfVU5VU0VEKSBjb25zdAogewogICBpZiAoZW1wdHlf cmFuZ2VfdmFyeWluZyAociwgdHlwZSwgbGgsIHJoKSkKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI4 MjYsNyArMjk5MSw5IEBAIG9wZXJhdG9yX2xvZ2ljYWxfbm90OjpvcDFfcmFuZ2UgKGlyYW5nZSAm ciwKIAkJCQkgY29uc3QgaXJhbmdlICZvcDIpIGNvbnN0CiB7CiAgIC8vIExvZ2ljYWwgTk9UIGlz IGludm9sdXRhcnkuLi5kbyBpdCBhZ2Fpbi4KLSAgcmV0dXJuIGZvbGRfcmFuZ2UgKHIsIHR5cGUs IGxocywgb3AyKTsKKyAgcmV0dXJuIGZvbGRfcmFuZ2UgKHIsIHR5cGUsIGxocywgb3AyLCAKKwkJ CQkJCQkJCQkgd2k6OnNod2kgKC0xLCBUWVBFX1BSRUNJU0lPTih0eXBlKSksCisJCQkJCQkJCQkJ IHdpOjpzaHdpICgtMSwgVFlQRV9QUkVDSVNJT04odHlwZSkpKTsKIH0KIAogCkBAIC0yODM1LDcg KzMwMDIsOSBAQCBjbGFzcyBvcGVyYXRvcl9iaXR3aXNlX25vdCA6IHB1YmxpYyByYW5nZV9vcGVy YXRvcgogcHVibGljOgogICB2aXJ0dWFsIGJvb2wgZm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0cmVl IHR5cGUsCiAJCQkgICBjb25zdCBpcmFuZ2UgJmxoLAotCQkJICAgY29uc3QgaXJhbmdlICZyaCkg Y29uc3Q7CisJCQkgICBjb25zdCBpcmFuZ2UgJnJoLAorCQkJICAgY29uc3Qgd2lkZV9pbnQgJmxo X256LAorCQkJICAgY29uc3Qgd2lkZV9pbnQgJnJoX256KSBjb25zdDsKICAgdmlydHVhbCBib29s IG9wMV9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgIGNvbnN0IGlyYW5nZSAmbGhz LAogCQkJICBjb25zdCBpcmFuZ2UgJm9wMikgY29uc3Q7CkBAIC0yODQ0LDE5ICszMDEzLDIxIEBA IHB1YmxpYzoKIGJvb2wKIG9wZXJhdG9yX2JpdHdpc2Vfbm90Ojpmb2xkX3JhbmdlIChpcmFuZ2Ug JnIsIHRyZWUgdHlwZSwKIAkJCQkgIGNvbnN0IGlyYW5nZSAmbGgsCi0JCQkJICBjb25zdCBpcmFu Z2UgJnJoKSBjb25zdAorCQkJCSAgY29uc3QgaXJhbmdlICZyaCwKKwkJCQkgIGNvbnN0IHdpZGVf aW50ICZsaF9ueiwKKwkJCQkgIGNvbnN0IHdpZGVfaW50ICZyaF9ueikgY29uc3QKIHsKICAgaWYg KGVtcHR5X3JhbmdlX3ZhcnlpbmcgKHIsIHR5cGUsIGxoLCByaCkpCiAgICAgcmV0dXJuIHRydWU7 CiAKICAgaWYgKHR5cGVzX2NvbXBhdGlibGVfcCAodHlwZSwgYm9vbGVhbl90eXBlX25vZGUpKQot ICAgIHJldHVybiBvcF9sb2dpY2FsX25vdC5mb2xkX3JhbmdlIChyLCB0eXBlLCBsaCwgcmgpOwor ICAgIHJldHVybiBvcF9sb2dpY2FsX25vdC5mb2xkX3JhbmdlIChyLCB0eXBlLCBsaCwgcmgsIGxo X256LCByaF9ueik7CiAKICAgLy8gflggaXMgc2ltcGx5IC0xIC0gWC4KICAgaW50X3JhbmdlPDE+ IG1pbnVzb25lICh0eXBlLCB3aTo6bWludXNfb25lIChUWVBFX1BSRUNJU0lPTiAodHlwZSkpLAog CQkJIHdpOjptaW51c19vbmUgKFRZUEVfUFJFQ0lTSU9OICh0eXBlKSkpOwogICByZXR1cm4gcmFu Z2Vfb3BfaGFuZGxlciAoTUlOVVNfRVhQUiwgdHlwZSktPmZvbGRfcmFuZ2UgKHIsIHR5cGUsIG1p bnVzb25lLAotCQkJCQkJCSAgbGgpOworCQkJCQkJCSAgbGgsIGxoX256LCByaF9ueik7CiB9CiAK IGJvb2wKQEAgLTI4NjgsNyArMzAzOSw5IEBAIG9wZXJhdG9yX2JpdHdpc2Vfbm90OjpvcDFfcmFu Z2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogICAgIHJldHVybiBvcF9sb2dpY2FsX25vdC5vcDFf cmFuZ2UgKHIsIHR5cGUsIGxocywgb3AyKTsKIAogICAvLyB+WCBpcyAtMSAtIFggYW5kIHNpbmNl IGJpdHdpc2UgTk9UIGlzIGludm9sdXRhcnkuLi5kbyBpdCBhZ2Fpbi4KLSAgcmV0dXJuIGZvbGRf cmFuZ2UgKHIsIHR5cGUsIGxocywgb3AyKTsKKyAgcmV0dXJuIGZvbGRfcmFuZ2UgKHIsIHR5cGUs IGxocywgb3AyLCAKKwkJCQkJCQkJCQkgd2k6OnNod2kgKC0xLCBUWVBFX1BSRUNJU0lPTih0eXBl KSksCisJCQkJCQkJCQkJIHdpOjpzaHdpICgtMSwgVFlQRV9QUkVDSVNJT04odHlwZSkpKTsKIH0K IAogCkBAIC0yODc3LDEzICszMDUwLDE3IEBAIGNsYXNzIG9wZXJhdG9yX2NzdCA6IHB1YmxpYyBy YW5nZV9vcGVyYXRvcgogcHVibGljOgogICB2aXJ0dWFsIGJvb2wgZm9sZF9yYW5nZSAoaXJhbmdl ICZyLCB0cmVlIHR5cGUsCiAJCQkgICBjb25zdCBpcmFuZ2UgJm9wMSwKLQkJCSAgIGNvbnN0IGly YW5nZSAmb3AyKSBjb25zdDsKKwkJCSAgIGNvbnN0IGlyYW5nZSAmb3AyLAorCQkJICAgY29uc3Qg d2lkZV9pbnQgJm56MSwKKwkJCSAgIGNvbnN0IHdpZGVfaW50ICZuejIpIGNvbnN0OwogfSBvcF9p bnRlZ2VyX2NzdDsKIAogYm9vbAogb3BlcmF0b3JfY3N0Ojpmb2xkX3JhbmdlIChpcmFuZ2UgJnIs IHRyZWUgdHlwZSBBVFRSSUJVVEVfVU5VU0VELAogCQkJICBjb25zdCBpcmFuZ2UgJmxoLAotCQkJ ICBjb25zdCBpcmFuZ2UgJnJoIEFUVFJJQlVURV9VTlVTRUQpIGNvbnN0CisJCQkgIGNvbnN0IGly YW5nZSAmcmggQVRUUklCVVRFX1VOVVNFRCwKKwkJCSAgY29uc3Qgd2lkZV9pbnQgJmxoX256IEFU VFJJQlVURV9VTlVTRUQsCisJCQkgIGNvbnN0IHdpZGVfaW50ICZyaF9ueiBBVFRSSUJVVEVfVU5V U0VEKSBjb25zdAogewogICByID0gbGg7CiAgIHJldHVybiB0cnVlOwpAQCAtMjg5NSw3ICszMDcy LDkgQEAgY2xhc3Mgb3BlcmF0b3JfaWRlbnRpdHkgOiBwdWJsaWMgcmFuZ2Vfb3BlcmF0b3IKIHB1 YmxpYzoKICAgdmlydHVhbCBib29sIGZvbGRfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAog CQkJICAgY29uc3QgaXJhbmdlICZvcDEsCi0JCQkgICBjb25zdCBpcmFuZ2UgJm9wMikgY29uc3Q7 CisJCQkgICBjb25zdCBpcmFuZ2UgJm9wMiwKKwkJCSAgIGNvbnN0IHdpZGVfaW50ICZuejEsCisJ CQkgICBjb25zdCB3aWRlX2ludCAmbnoyKSBjb25zdDsKICAgdmlydHVhbCBib29sIG9wMV9yYW5n ZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgIGNvbnN0IGlyYW5nZSAmbGhzLAogCQkJICBj b25zdCBpcmFuZ2UgJm9wMikgY29uc3Q7CkBAIC0yOTA0LDcgKzMwODMsOSBAQCBwdWJsaWM6CiBi b29sCiBvcGVyYXRvcl9pZGVudGl0eTo6Zm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUg QVRUUklCVVRFX1VOVVNFRCwKIAkJCSAgICAgICBjb25zdCBpcmFuZ2UgJmxoLAotCQkJICAgICAg IGNvbnN0IGlyYW5nZSAmcmggQVRUUklCVVRFX1VOVVNFRCkgY29uc3QKKwkJCSAgICAgICBjb25z dCBpcmFuZ2UgJnJoIEFUVFJJQlVURV9VTlVTRUQsCisJCQkgICAgICAgY29uc3Qgd2lkZV9pbnQg JmxoX256IEFUVFJJQlVURV9VTlVTRUQsCisJCQkgICAgICAgY29uc3Qgd2lkZV9pbnQgJnJoX256 IEFUVFJJQlVURV9VTlVTRUQpIGNvbnN0CiB7CiAgIHIgPSBsaDsKICAgcmV0dXJuIHRydWU7CkBA IC0yOTI1LDEzICszMTA2LDE3IEBAIGNsYXNzIG9wZXJhdG9yX3Vua25vd24gOiBwdWJsaWMgcmFu Z2Vfb3BlcmF0b3IKIHB1YmxpYzoKICAgdmlydHVhbCBib29sIGZvbGRfcmFuZ2UgKGlyYW5nZSAm ciwgdHJlZSB0eXBlLAogCQkJICAgY29uc3QgaXJhbmdlICZvcDEsCi0JCQkgICBjb25zdCBpcmFu Z2UgJm9wMikgY29uc3Q7CisJCQkgICBjb25zdCBpcmFuZ2UgJm9wMiwKKwkJCSAgIGNvbnN0IHdp ZGVfaW50ICZuejEsCisJCQkgICBjb25zdCB3aWRlX2ludCAmbnoyKSBjb25zdDsKIH0gb3BfdW5r bm93bjsKIAogYm9vbAogb3BlcmF0b3JfdW5rbm93bjo6Zm9sZF9yYW5nZSAoaXJhbmdlICZyLCB0 cmVlIHR5cGUsCiAJCQkgICAgICBjb25zdCBpcmFuZ2UgJmxoIEFUVFJJQlVURV9VTlVTRUQsCi0J CQkgICAgICBjb25zdCBpcmFuZ2UgJnJoIEFUVFJJQlVURV9VTlVTRUQpIGNvbnN0CisJCQkgICAg ICBjb25zdCBpcmFuZ2UgJnJoIEFUVFJJQlVURV9VTlVTRUQsCisJCQkgICAgICBjb25zdCB3aWRl X2ludCAmbGhfbnogQVRUUklCVVRFX1VOVVNFRCwKKwkJCSAgICAgIGNvbnN0IHdpZGVfaW50ICZy aF9ueiBBVFRSSUJVVEVfVU5VU0VEKSBjb25zdAogewogICByLnNldF92YXJ5aW5nICh0eXBlKTsK ICAgcmV0dXJuIHRydWU7CkBAIC0yOTQ1LDcgKzMxMzAsOSBAQCBjbGFzcyBvcGVyYXRvcl9hYnMg OiBwdWJsaWMgcmFuZ2Vfb3BlcmF0b3IKIAkJICAgICAgICBjb25zdCB3aWRlX2ludCAmbGhfbGIs CiAJCSAgICAgICAgY29uc3Qgd2lkZV9pbnQgJmxoX3ViLAogCQkgICAgICAgIGNvbnN0IHdpZGVf aW50ICZyaF9sYiwKLQkJICAgICAgICBjb25zdCB3aWRlX2ludCAmcmhfdWIpIGNvbnN0OworCQkg ICAgICAgIGNvbnN0IHdpZGVfaW50ICZyaF91YiwKKwkJICAgICAgICBjb25zdCB3aWRlX2ludCAm bGhfbnosCisJCSAgICAgICAgY29uc3Qgd2lkZV9pbnQgJnJoX256KSBjb25zdDsKICAgdmlydHVh bCBib29sIG9wMV9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgIGNvbnN0IGlyYW5n ZSAmbGhzLAogCQkJICBjb25zdCBpcmFuZ2UgJm9wMikgY29uc3Q7CkBAIC0yOTU1LDcgKzMxNDIs OSBAQCB2b2lkCiBvcGVyYXRvcl9hYnM6OndpX2ZvbGQgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAog CQkgICAgICAgY29uc3Qgd2lkZV9pbnQgJmxoX2xiLCBjb25zdCB3aWRlX2ludCAmbGhfdWIsCiAJ CSAgICAgICBjb25zdCB3aWRlX2ludCAmcmhfbGIgQVRUUklCVVRFX1VOVVNFRCwKLQkJICAgICAg IGNvbnN0IHdpZGVfaW50ICZyaF91YiBBVFRSSUJVVEVfVU5VU0VEKSBjb25zdAorCQkgICAgICAg Y29uc3Qgd2lkZV9pbnQgJnJoX3ViIEFUVFJJQlVURV9VTlVTRUQsCisJCSAgICAgICBjb25zdCB3 aWRlX2ludCAmbGhfbnogQVRUUklCVVRFX1VOVVNFRCwKKwkJICAgICAgIGNvbnN0IHdpZGVfaW50 ICZyaF9ueiBBVFRSSUJVVEVfVU5VU0VEKSBjb25zdAogewogICB3aWRlX2ludCBtaW4sIG1heDsK ICAgc2lnbm9wIHNpZ24gPSBUWVBFX1NJR04gKHR5cGUpOwpAQCAtMzA1NiwxNCArMzI0NSwxNyBA QCBjbGFzcyBvcGVyYXRvcl9hYnN1IDogcHVibGljIHJhbmdlX29wZXJhdG9yCiAgcHVibGljOgog ICB2aXJ0dWFsIHZvaWQgd2lfZm9sZCAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQljb25zdCB3 aWRlX2ludCAmbGhfbGIsIGNvbnN0IHdpZGVfaW50ICZsaF91YiwKLQkJCWNvbnN0IHdpZGVfaW50 ICZyaF9sYiwgY29uc3Qgd2lkZV9pbnQgJnJoX3ViKSBjb25zdDsKKwkJCWNvbnN0IHdpZGVfaW50 ICZyaF9sYiwgY29uc3Qgd2lkZV9pbnQgJnJoX3ViLAorCQkJY29uc3Qgd2lkZV9pbnQgJmxoX256 LCBjb25zdCB3aWRlX2ludCAmcmhfbnopIGNvbnN0OwogfSBvcF9hYnN1OwogCiB2b2lkCiBvcGVy YXRvcl9hYnN1Ojp3aV9mb2xkIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCWNvbnN0IHdpZGVf aW50ICZsaF9sYiwgY29uc3Qgd2lkZV9pbnQgJmxoX3ViLAogCQkJY29uc3Qgd2lkZV9pbnQgJnJo X2xiIEFUVFJJQlVURV9VTlVTRUQsCi0JCQljb25zdCB3aWRlX2ludCAmcmhfdWIgQVRUUklCVVRF X1VOVVNFRCkgY29uc3QKKwkJCWNvbnN0IHdpZGVfaW50ICZyaF91YiBBVFRSSUJVVEVfVU5VU0VE LAorCQkJY29uc3Qgd2lkZV9pbnQgJmxoX256IEFUVFJJQlVURV9VTlVTRUQsCisJCQljb25zdCB3 aWRlX2ludCAmcmhfbnogQVRUUklCVVRFX1VOVVNFRCkgY29uc3QKIHsKICAgd2lkZV9pbnQgbmV3 X2xiLCBuZXdfdWI7CiAKQEAgLTMxMDAsNyArMzI5Miw5IEBAIGNsYXNzIG9wZXJhdG9yX25lZ2F0 ZSA6IHB1YmxpYyByYW5nZV9vcGVyYXRvcgogIHB1YmxpYzoKICAgdmlydHVhbCBib29sIGZvbGRf cmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICAgY29uc3QgaXJhbmdlICZvcDEsCi0J CQkgICBjb25zdCBpcmFuZ2UgJm9wMikgY29uc3Q7CisJCQkgICBjb25zdCBpcmFuZ2UgJm9wMiwK KwkJCSAgIGNvbnN0IHdpZGVfaW50ICZuejEsCisJCQkgICBjb25zdCB3aWRlX2ludCAmbnoyKSBj b25zdDsKICAgdmlydHVhbCBib29sIG9wMV9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJ CQkgIGNvbnN0IGlyYW5nZSAmbGhzLAogCQkJICBjb25zdCBpcmFuZ2UgJm9wMikgY29uc3Q7CkBA IC0zMTA5LDE0ICszMzAzLDE2IEBAIGNsYXNzIG9wZXJhdG9yX25lZ2F0ZSA6IHB1YmxpYyByYW5n ZV9vcGVyYXRvcgogYm9vbAogb3BlcmF0b3JfbmVnYXRlOjpmb2xkX3JhbmdlIChpcmFuZ2UgJnIs IHRyZWUgdHlwZSwKIAkJCSAgICAgY29uc3QgaXJhbmdlICZsaCwKLQkJCSAgICAgY29uc3QgaXJh bmdlICZyaCkgY29uc3QKKwkJCSAgICAgY29uc3QgaXJhbmdlICZyaCwKKwkJCSAgICAgY29uc3Qg d2lkZV9pbnQgJmxoX256LAorCQkJICAgICBjb25zdCB3aWRlX2ludCAmcmhfbnopIGNvbnN0CiB7 CiAgIGlmIChlbXB0eV9yYW5nZV92YXJ5aW5nIChyLCB0eXBlLCBsaCwgcmgpKQogICAgIHJldHVy biB0cnVlOwogICAvLyAtWCBpcyBzaW1wbHkgMCAtIFguCiAgIHJldHVybiByYW5nZV9vcF9oYW5k bGVyIChNSU5VU19FWFBSLCB0eXBlKS0+Zm9sZF9yYW5nZSAociwgdHlwZSwKIAkJCQkJCQkgIHJh bmdlX3plcm8gKHR5cGUpLAotCQkJCQkJCSAgbGgpOworCQkJCQkJCSAgbGgsIGxoX256LCByaF9u eik7CiB9CiAKIGJvb2wKQEAgLTMxMjUsNyArMzMyMSw5IEBAIG9wZXJhdG9yX25lZ2F0ZTo6b3Ax X3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCSAgICBjb25zdCBpcmFuZ2UgJm9wMikg Y29uc3QKIHsKICAgLy8gTkVHQVRFIGlzIGludm9sdXRvcnkuCi0gIHJldHVybiBmb2xkX3Jhbmdl IChyLCB0eXBlLCBsaHMsIG9wMik7CisgIHJldHVybiBmb2xkX3JhbmdlIChyLCB0eXBlLCBsaHMs IG9wMiwgCisJCQkJCQkJCQkJIHdpOjpzaHdpICgtMSwgVFlQRV9QUkVDSVNJT04odHlwZSkpLAor CQkJCQkJCQkJCSB3aTo6c2h3aSAoLTEsIFRZUEVfUFJFQ0lTSU9OKHR5cGUpKSk7CiB9CiAKIApA QCAtMzEzNCw3ICszMzMyLDkgQEAgY2xhc3Mgb3BlcmF0b3JfYWRkcl9leHByIDogcHVibGljIHJh bmdlX29wZXJhdG9yCiBwdWJsaWM6CiAgIHZpcnR1YWwgYm9vbCBmb2xkX3JhbmdlIChpcmFuZ2Ug JnIsIHRyZWUgdHlwZSwKIAkJCSAgIGNvbnN0IGlyYW5nZSAmb3AxLAotCQkJICAgY29uc3QgaXJh bmdlICZvcDIpIGNvbnN0OworCQkJICAgY29uc3QgaXJhbmdlICZvcDIsCisJCQkgICBjb25zdCB3 aWRlX2ludCAmbnoxLAorCQkJICAgY29uc3Qgd2lkZV9pbnQgJm56MikgY29uc3Q7CiAgIHZpcnR1 YWwgYm9vbCBvcDFfcmFuZ2UgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJICBjb25zdCBpcmFu Z2UgJmxocywKIAkJCSAgY29uc3QgaXJhbmdlICZvcDIpIGNvbnN0OwpAQCAtMzE0Myw3ICszMzQz LDkgQEAgcHVibGljOgogYm9vbAogb3BlcmF0b3JfYWRkcl9leHByOjpmb2xkX3JhbmdlIChpcmFu Z2UgJnIsIHRyZWUgdHlwZSwKIAkJCQljb25zdCBpcmFuZ2UgJmxoLAotCQkJCWNvbnN0IGlyYW5n ZSAmcmgpIGNvbnN0CisJCQkJY29uc3QgaXJhbmdlICZyaCwKKwkJCQljb25zdCB3aWRlX2ludCAm bGhfbnogQVRUUklCVVRFX1VOVVNFRCwKKwkJCQljb25zdCB3aWRlX2ludCAmcmhfbnogQVRUUklC VVRFX1VOVVNFRCkgY29uc3QKIHsKICAgaWYgKGVtcHR5X3JhbmdlX3ZhcnlpbmcgKHIsIHR5cGUs IGxoLCByaCkpCiAgICAgcmV0dXJuIHRydWU7CkBAIC0zMTYzLDcgKzMzNjUsOSBAQCBvcGVyYXRv cl9hZGRyX2V4cHI6Om9wMV9yYW5nZSAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgICAgICAg Y29uc3QgaXJhbmdlICZsaHMsCiAJCQkgICAgICAgY29uc3QgaXJhbmdlICZvcDIpIGNvbnN0CiB7 Ci0gIHJldHVybiBvcGVyYXRvcl9hZGRyX2V4cHI6OmZvbGRfcmFuZ2UgKHIsIHR5cGUsIGxocywg b3AyKTsKKyAgcmV0dXJuIG9wZXJhdG9yX2FkZHJfZXhwcjo6Zm9sZF9yYW5nZSAociwgdHlwZSwg bGhzLCBvcDIsCisJCQkgICAgICAgd2k6OnNod2kgKC0xLCBUWVBFX1BSRUNJU0lPTih0eXBlKSks CisJCQkgICAgICAgd2k6OnNod2kgKC0xLCBUWVBFX1BSRUNJU0lPTih0eXBlKSkpOwogfQogCiAK QEAgLTMxNzQsNyArMzM3OCw5IEBAIHB1YmxpYzoKIAkJICAgICAgICBjb25zdCB3aWRlX2ludCAm bGhfbGIsCiAJCSAgICAgICAgY29uc3Qgd2lkZV9pbnQgJmxoX3ViLAogCQkgICAgICAgIGNvbnN0 IHdpZGVfaW50ICZyaF9sYiwKLQkJICAgICAgICBjb25zdCB3aWRlX2ludCAmcmhfdWIpIGNvbnN0 OworCQkgICAgICAgIGNvbnN0IHdpZGVfaW50ICZyaF91YiwKKwkJICAgICAgICBjb25zdCB3aWRl X2ludCAmbGhfbnosCisJCSAgICAgICAgY29uc3Qgd2lkZV9pbnQgJnJoX256KSBjb25zdDsKIH0g b3BfcG9pbnRlcl9wbHVzOwogCiB2b2lkCkBAIC0zMTgyLDcgKzMzODgsOSBAQCBwb2ludGVyX3Bs dXNfb3BlcmF0b3I6OndpX2ZvbGQgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAogCQkJCWNvbnN0IHdp ZGVfaW50ICZsaF9sYiwKIAkJCQljb25zdCB3aWRlX2ludCAmbGhfdWIsCiAJCQkJY29uc3Qgd2lk ZV9pbnQgJnJoX2xiLAotCQkJCWNvbnN0IHdpZGVfaW50ICZyaF91YikgY29uc3QKKwkJCQljb25z dCB3aWRlX2ludCAmcmhfdWIsCisJCQkJY29uc3Qgd2lkZV9pbnQgJmxoX256IEFUVFJJQlVURV9V TlVTRUQsCisJCQkJY29uc3Qgd2lkZV9pbnQgJnJoX256IEFUVFJJQlVURV9VTlVTRUQpIGNvbnN0 CiB7CiAgIC8vIENoZWNrIGZvciBbMCwwXSArIGNvbnN0LCBhbmQgc2ltcGx5IHJldHVybiB0aGUg Y29uc3QuCiAgIGlmIChsaF9sYiA9PSAwICYmIGxoX3ViID09IDAgJiYgcmhfbGIgPT0gcmhfdWIp CkBAIC0zMjI3LDcgKzM0MzUsOCBAQCBjbGFzcyBwb2ludGVyX21pbl9tYXhfb3BlcmF0b3IgOiBw dWJsaWMgcmFuZ2Vfb3BlcmF0b3IKIHB1YmxpYzoKICAgdmlydHVhbCB2b2lkIHdpX2ZvbGQgKGly YW5nZSAmIHIsIHRyZWUgdHlwZSwKIAkJCWNvbnN0IHdpZGVfaW50ICZsaF9sYiwgY29uc3Qgd2lk ZV9pbnQgJmxoX3ViLAotCQkJY29uc3Qgd2lkZV9pbnQgJnJoX2xiLCBjb25zdCB3aWRlX2ludCAm cmhfdWIpIGNvbnN0OworCQkJY29uc3Qgd2lkZV9pbnQgJnJoX2xiLCBjb25zdCB3aWRlX2ludCAm cmhfdWIsCisJCQljb25zdCB3aWRlX2ludCAmbGhfbnosIGNvbnN0IHdpZGVfaW50ICZyaF9ueikg Y29uc3Q7CiB9IG9wX3B0cl9taW5fbWF4OwogCiB2b2lkCkBAIC0zMjM1LDcgKzM0NDQsOSBAQCBw b2ludGVyX21pbl9tYXhfb3BlcmF0b3I6OndpX2ZvbGQgKGlyYW5nZSAmciwgdHJlZSB0eXBlLAog CQkJCSAgIGNvbnN0IHdpZGVfaW50ICZsaF9sYiwKIAkJCQkgICBjb25zdCB3aWRlX2ludCAmbGhf dWIsCiAJCQkJICAgY29uc3Qgd2lkZV9pbnQgJnJoX2xiLAotCQkJCSAgIGNvbnN0IHdpZGVfaW50 ICZyaF91YikgY29uc3QKKwkJCQkgICBjb25zdCB3aWRlX2ludCAmcmhfdWIsCisJCQkJICAgY29u c3Qgd2lkZV9pbnQgJmxoX256IEFUVFJJQlVURV9VTlVTRUQsCisJCQkJICAgY29uc3Qgd2lkZV9p bnQgJnJoX256IEFUVFJJQlVURV9VTlVTRUQpIGNvbnN0CiB7CiAgIC8vIEZvciBNSU4vTUFYIGV4 cHJlc3Npb25zIHdpdGggcG9pbnRlcnMsIHdlIG9ubHkgY2FyZSBhYm91dAogICAvLyBudWxsbmVz cy4gIElmIGJvdGggYXJlIG5vbiBudWxsLCB0aGVuIHRoZSByZXN1bHQgaXMgbm9ubnVsbC4KQEAg LTMyNTYsNyArMzQ2Nyw4IEBAIGNsYXNzIHBvaW50ZXJfYW5kX29wZXJhdG9yIDogcHVibGljIHJh bmdlX29wZXJhdG9yCiBwdWJsaWM6CiAgIHZpcnR1YWwgdm9pZCB3aV9mb2xkIChpcmFuZ2UgJnIs IHRyZWUgdHlwZSwKIAkJCWNvbnN0IHdpZGVfaW50ICZsaF9sYiwgY29uc3Qgd2lkZV9pbnQgJmxo X3ViLAotCQkJY29uc3Qgd2lkZV9pbnQgJnJoX2xiLCBjb25zdCB3aWRlX2ludCAmcmhfdWIpIGNv bnN0OworCQkJY29uc3Qgd2lkZV9pbnQgJnJoX2xiLCBjb25zdCB3aWRlX2ludCAmcmhfdWIsCisJ CQljb25zdCB3aWRlX2ludCAmbGhfbnosIGNvbnN0IHdpZGVfaW50ICZyaF9ueikgY29uc3Q7CiB9 IG9wX3BvaW50ZXJfYW5kOwogCiB2b2lkCkBAIC0zMjY0LDcgKzM0NzYsOSBAQCBwb2ludGVyX2Fu ZF9vcGVyYXRvcjo6d2lfZm9sZCAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQkgICAgICAgY29u c3Qgd2lkZV9pbnQgJmxoX2xiLAogCQkJICAgICAgIGNvbnN0IHdpZGVfaW50ICZsaF91YiwKIAkJ CSAgICAgICBjb25zdCB3aWRlX2ludCAmcmhfbGIgQVRUUklCVVRFX1VOVVNFRCwKLQkJCSAgICAg ICBjb25zdCB3aWRlX2ludCAmcmhfdWIgQVRUUklCVVRFX1VOVVNFRCkgY29uc3QKKwkJCSAgICAg ICBjb25zdCB3aWRlX2ludCAmcmhfdWIgQVRUUklCVVRFX1VOVVNFRCwKKwkJCSAgICAgICBjb25z dCB3aWRlX2ludCAmbGhfbnogQVRUUklCVVRFX1VOVVNFRCwKKwkJCSAgICAgICBjb25zdCB3aWRl X2ludCAmcmhfbnogQVRUUklCVVRFX1VOVVNFRCkgY29uc3QKIHsKICAgLy8gRm9yIHBvaW50ZXIg dHlwZXMsIHdlIGFyZSByZWFsbHkgb25seSBpbnRlcmVzdGVkIGluIGFzc2VydGluZwogICAvLyB3 aGV0aGVyIHRoZSBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBub24tTlVMTC4KQEAgLTMyODYsNyAr MzUwMCw4IEBAIHB1YmxpYzoKIAkJCSAgY29uc3QgaXJhbmdlICZvcDEpIGNvbnN0OwogICB2aXJ0 dWFsIHZvaWQgd2lfZm9sZCAoaXJhbmdlICZyLCB0cmVlIHR5cGUsCiAJCQljb25zdCB3aWRlX2lu dCAmbGhfbGIsIGNvbnN0IHdpZGVfaW50ICZsaF91YiwKLQkJCWNvbnN0IHdpZGVfaW50ICZyaF9s YiwgY29uc3Qgd2lkZV9pbnQgJnJoX3ViKSBjb25zdDsKKwkJCWNvbnN0IHdpZGVfaW50ICZyaF9s YiwgY29uc3Qgd2lkZV9pbnQgJnJoX3ViLAorCQkJY29uc3Qgd2lkZV9pbnQgJmxoX256LCBjb25z dCB3aWRlX2ludCAmcmhfbnopIGNvbnN0OwogfSBvcF9wb2ludGVyX29yOwogCiBib29sCkBAIC0z MzE3LDcgKzM1MzIsOSBAQCBwb2ludGVyX29yX29wZXJhdG9yOjp3aV9mb2xkIChpcmFuZ2UgJnIs IHRyZWUgdHlwZSwKIAkJCSAgICAgIGNvbnN0IHdpZGVfaW50ICZsaF9sYiwKIAkJCSAgICAgIGNv bnN0IHdpZGVfaW50ICZsaF91YiwKIAkJCSAgICAgIGNvbnN0IHdpZGVfaW50ICZyaF9sYiwKLQkJ CSAgICAgIGNvbnN0IHdpZGVfaW50ICZyaF91YikgY29uc3QKKwkJCSAgICAgIGNvbnN0IHdpZGVf aW50ICZyaF91YiwKKwkJCSAgICAgIGNvbnN0IHdpZGVfaW50ICZsaF9ueiBBVFRSSUJVVEVfVU5V U0VELAorCQkJICAgICAgY29uc3Qgd2lkZV9pbnQgJnJoX256IEFUVFJJQlVURV9VTlVTRUQpIGNv bnN0CiB7CiAgIC8vIEZvciBwb2ludGVyIHR5cGVzLCB3ZSBhcmUgcmVhbGx5IG9ubHkgaW50ZXJl c3RlZCBpbiBhc3NlcnRpbmcKICAgLy8gd2hldGhlciB0aGUgZXhwcmVzc2lvbiBldmFsdWF0ZXMg dG8gbm9uLU5VTEwuCkBAIC0zNDY0LDcgKzM2ODEsOSBAQCByYW5nZV9jYXN0IChpcmFuZ2UgJnIs IHRyZWUgdHlwZSkKICAgaW50X3JhbmdlX21heCB0bXAgPSByOwogICByYW5nZV9vcGVyYXRvciAq b3AgPSByYW5nZV9vcF9oYW5kbGVyIChDT05WRVJUX0VYUFIsIHR5cGUpOwogICAvLyBDYWxsIG9w X2NvbnZlcnQsIGlmIGl0IGZhaWxzLCB0aGUgcmVzdWx0IGlzIHZhcnlpbmcuCi0gIGlmICghb3At PmZvbGRfcmFuZ2UgKHIsIHR5cGUsIHRtcCwgaW50X3JhbmdlPDE+ICh0eXBlKSkpCisgIGlmICgh b3AtPmZvbGRfcmFuZ2UgKHIsIHR5cGUsIHRtcCwgaW50X3JhbmdlPDE+ICh0eXBlKSwKKwkJCQkJ CQkJCQkJIHdpOjpzaHdpICgtMSwgVFlQRV9QUkVDSVNJT04odHlwZSkpLAorCQkJCQkJCQkJCQkg d2k6OnNod2kgKC0xLCBUWVBFX1BSRUNJU0lPTih0eXBlKSkpKQogICAgIHIuc2V0X3Zhcnlpbmcg KHR5cGUpOwogfQogCkBAIC0zNjIzLDcgKzM4NDIsOSBAQCByYW5nZV9vcF9sc2hpZnRfdGVzdHMg KCkKIAkJCQlidWlsZF9pbnRfY3N0IChiaWdfdHlwZSwgNDgpKTsKICAgICBvcF9iaXR3aXNlX2Fu ZC5mb2xkX3JhbmdlIChyZXMsIGJpZ190eXBlLAogCQkJICAgICAgIGludF9yYW5nZSA8MT4gKGJp Z190eXBlKSwKLQkJCSAgICAgICBpbnRfcmFuZ2UgPDE+IChiaWdfbnVtLCBiaWdfbnVtKSk7CisJ CQkgICAgICAgaW50X3JhbmdlIDwxPiAoYmlnX251bSwgYmlnX251bSksCisJCQkgICAgICAgd2k6 OnNod2kgKC0xLCBUWVBFX1BSRUNJU0lPTihiaWdfdHlwZSkpLAorCQkJICAgICAgIHdpOjpzaHdp ICgtMSwgVFlQRV9QUkVDSVNJT04oYmlnX3R5cGUpKSk7CiAgICAgLy8gdmFsID0gMHg4LDAwMDAs MDAwMCwwMDAwCiAgICAgdHJlZSB2YWwgPSBmb2xkX2J1aWxkMiAoTFNISUZUX0VYUFIsIGJpZ190 eXBlLAogCQkJICAgIGJ1aWxkX2ludF9jc3QgKGJpZ190eXBlLCAweDgpLApAQCAtMzY1MCw3ICsz ODcxLDkgQEAgcmFuZ2Vfb3BfbHNoaWZ0X3Rlc3RzICgpCiAgICAgICAvLyAgb3AxIDw8IDEgICBz aG91bGQgYmUgWzB4ODAwMCwweDgwMDBdIDw8IDEsCiAgICAgICAvLyAgd2hpY2ggc2hvdWxkIHJl c3VsdCBpbiBbMCwwXS4KICAgICAgIGludF9yYW5nZV9tYXggcmVzdWx0OwotICAgICAgb3BfbHNo aWZ0LmZvbGRfcmFuZ2UgKHJlc3VsdCwgdW5zaWduZWRfdHlwZV9ub2RlLCBvcDEsIHNoaWZ0KTsK KyAgICAgIG9wX2xzaGlmdC5mb2xkX3JhbmdlIChyZXN1bHQsIHVuc2lnbmVkX3R5cGVfbm9kZSwg b3AxLCBzaGlmdCwKKwkJCSAgICAgICB3aTo6c2h3aSAoLTEsIFRZUEVfUFJFQ0lTSU9OKHVuc2ln bmVkX3R5cGVfbm9kZSkpLAorCQkJICAgICAgIHdpOjpzaHdpICgtMSwgVFlQRV9QUkVDSVNJT04o dW5zaWduZWRfdHlwZV9ub2RlKSkpOwogICAgICAgQVNTRVJUX1RSVUUgKHJlc3VsdCA9PSB6ZXJv KTsKICAgICB9CiAgIC8vIHNpZ25lZCBWQVJZSU5HID0gb3AxIDw8IDEgc2hvdWxkIGJlIFZBUllJ TkcuCkBAIC0zNjczLDcgKzM4OTYsOSBAQCByYW5nZV9vcF9sc2hpZnRfdGVzdHMgKCkKICAgICAg IC8vICBvcDEgPDwgMSAgIHNodW91bGQgYmUgWzB4ODAwMCwweDgwMDBdIDw8IDEsCiAgICAgICAv LyAgd2hpY2ggc2hvdWxkIHJlc3VsdCBpbiBbMCwwXS4KICAgICAgIGludF9yYW5nZV9tYXggcmVz dWx0OwotICAgICAgb3BfbHNoaWZ0LmZvbGRfcmFuZ2UgKHJlc3VsdCwgdW5zaWduZWRfdHlwZV9u b2RlLCBvcDEsIHNoaWZ0KTsKKyAgICAgIG9wX2xzaGlmdC5mb2xkX3JhbmdlIChyZXN1bHQsIHVu c2lnbmVkX3R5cGVfbm9kZSwgb3AxLCBzaGlmdCwKKwkJCSAgICAgICB3aTo6c2h3aSAoLTEsIFRZ UEVfUFJFQ0lTSU9OKHVuc2lnbmVkX3R5cGVfbm9kZSkpLAorCQkJICAgICAgIHdpOjpzaHdpICgt MSwgVFlQRV9QUkVDSVNJT04odW5zaWduZWRfdHlwZV9ub2RlKSkpOwogICAgICAgQVNTRVJUX1RS VUUgKHJlc3VsdCA9PSB6ZXJvKTsKICAgICB9CiB9CkBAIC0zNzU4LDQgKzM5ODMsNCBAQCByYW5n ZV9vcF90ZXN0cyAoKQogCiB9IC8vIG5hbWVzcGFjZSBzZWxmdGVzdAogCi0jZW5kaWYgLy8gQ0hF Q0tJTkdfUAorI2VuZGlmIC8vIENIRUNLSU5HX1AKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl CmRpZmYgLS1naXQgYS9nY2MvcmFuZ2Utb3AuaCBiL2djYy9yYW5nZS1vcC5oCmluZGV4IGQzZDQ0 MDgzMDkzLi4yNjgzNjk1ZjljMSAxMDA2NDQKLS0tIGEvZ2NjL3JhbmdlLW9wLmgKKysrIGIvZ2Nj L3JhbmdlLW9wLmgKQEAgLTUyLDcgKzUyLDkgQEAgcHVibGljOgogICAvLyBQZXJmb3JtIGFuIG9w ZXJhdGlvbiBiZXR3ZWVuIDIgcmFuZ2VzIGFuZCByZXR1cm4gaXQuCiAgIHZpcnR1YWwgYm9vbCBm b2xkX3JhbmdlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkJCSAgIGNvbnN0IGlyYW5nZSAmbGgs Ci0JCQkgICBjb25zdCBpcmFuZ2UgJnJoKSBjb25zdDsKKwkJCSAgIGNvbnN0IGlyYW5nZSAmcmgs CisJCQkgICBjb25zdCB3aWRlX2ludCYgbGhfbnosCisJCQkgICBjb25zdCB3aWRlX2ludCYgcmhf bnopIGNvbnN0OwogCiAgIC8vIFJldHVybiB0aGUgcmFuZ2UgZm9yIG9wWzEyXSBpbiB0aGUgZ2Vu ZXJhbCBjYXNlLiAgTEhTIGlzIHRoZSByYW5nZSBmb3IKICAgLy8gdGhlIExIUyBvZiB0aGUgZXhw cmVzc2lvbiwgT1BbMTJdaXMgdGhlIHJhbmdlIGZvciB0aGUgb3RoZXIKQEAgLTc4LDcgKzgwLDkg QEAgcHJvdGVjdGVkOgogCQkgICAgICAgIGNvbnN0IHdpZGVfaW50ICZsaF9sYiwKIAkJICAgICAg ICBjb25zdCB3aWRlX2ludCAmbGhfdWIsCiAJCSAgICAgICAgY29uc3Qgd2lkZV9pbnQgJnJoX2xi LAotCQkgICAgICAgIGNvbnN0IHdpZGVfaW50ICZyaF91YikgY29uc3Q7CisJCSAgICAgICAgY29u c3Qgd2lkZV9pbnQgJnJoX3ViLAorCQkgICAgICAgIGNvbnN0IHdpZGVfaW50ICZsaF9ueiwgCisJ CSAgICAgICAgY29uc3Qgd2lkZV9pbnQgJnJoX256KSBjb25zdDsKIH07CiAKIGV4dGVybiByYW5n ZV9vcGVyYXRvciAqcmFuZ2Vfb3BfaGFuZGxlciAoZW51bSB0cmVlX2NvZGUgY29kZSwgdHJlZSB0 eXBlKTsKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ByNzc5ODAtbmVnLmMgYi9n Y2MvdGVzdHN1aXRlL2djYy5kZy9wcjc3OTgwLW5lZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi4zNGQ3OTFkZDU2NAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL3ByNzc5ODAtbmVnLmMKQEAgLTAsMCArMSw0MiBAQAorLyogeyBkZy1kbyBj b21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1mZHVtcC10cmVlLXZycDEiIH0gKi8K KworaW50IHgxID0gMDsKK2ludCB4MiA9IDE7CisKK2ludCB0ZXN0MSAoKQoreworCWludCB0MSA9 IHgxKigxLyh4Mit4MikpOworCS8vIHkyIGNhbiBiZSBuZWdhdGl2ZSBzbyB0MSE9MCBjYW5ub3Qg YmUgb3B0aW1pemVkIGF3YXkKKwlpZiAodDEgIT0gMCkgX19idWlsdGluX2Fib3J0KCk7CisJcmV0 dXJuIDA7Cit9CisKK2ludCB0ZXN0MiAoaW50IHkxLCBpbnQgeTIpCit7CisJaW50IHQxID0geTEq KDEvKHkyK3kyKSk7CisJLy8geTIgY2FuIGJlIG5lZ2F0aXZlIHNvIHQxIT0wIGNhbm5vdCBiZSBv cHRpbWl6ZWQgYXdheQorCWlmICh0MSAhPSAwKSBfX2J1aWx0aW5fYWJvcnQoKTsKKwlyZXR1cm4g MDsKK30KKworaW50IHRlc3QzIChpbnQgeTEsIHVuc2lnbmVkIGludCB5MikKK3sKKwlpbnQgdDEg PSB5MSooMi8oeTIreTIpKTsKKwkvLyB5MiBjYW4gZXF1YWwgMSBzbyAyLyh5Mit5MikgY2FuIGVx dWFsIDEgYW5kIHRoZSB2YWx1ZSBvZiB0MQorCS8vIHdvdWxkIGJlIGRlcGVuZGVudCBvbiB5MSBz byB0MSE9MCBjYW5ub3QgYmUgb3B0aW1pemVkIGF3YXkKKwlpZiAodDEgIT0gMCkgX19idWlsdGlu X2Fib3J0KCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCB0ZXN0NCAoaW50IHkxLCB1bnNpZ25lZCBp bnQgeTIpCit7CisJaW50IHQxID0geTEqKDQvKHkyK3kyK3kyK3kyKSk7CisJLy8geTIgY2FuIGVx dWFsIDEgc28gNC8oeTIreTIreTIreTIpIGNhbiBlcXVhbCAxIGFuZCB0aGUgdmFsdWUgb2YgdDEK KwkvLyB3b3VsZCBiZSBkZXBlbmRlbnQgb24geTEgc28gdDEhPTAgY2Fubm90IGJlIG9wdGltaXpl ZCBhd2F5CisJaWYgKHQxICE9IDApIF9fYnVpbHRpbl9hYm9ydCgpOworCXJldHVybiAwOworfQor CisvLyBBbGwgaWYgc3RhdGVtZW50cyBzaG91bGRuJ3QgZ2V0IG9wdGltaXplZCBhd2F5CisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgImlmIFxcXCgiIDQgInZycDEiIH0gfSAq LwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI3Nzk4MC5jIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvcHI3Nzk4MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi42M2I2ZjFiYTVmMQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRn L3ByNzc5ODAuYwpAQCAtMCwwICsxLDQyIEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyog eyBkZy1vcHRpb25zICItTzIgLWZkdW1wLXRyZWUtdnJwMSIgfSAqLworCitpbnQgeDEgPSAwOwor dW5zaWduZWQgaW50IHgyID0gMTsKKworaW50IHRlc3QxICgpCit7CisJaW50IHQxID0geDEqKDEv KHgyK3gyKSk7CisJLy8gVGhpcyBjaGVjayBzaG91bGQgYmUgb3B0aW1pemVkIGF3YXkgYmVjYXVz ZSB3ZSBrbm93IHRoYXQgCisJLy8gdDEgY2FuIG9ubHkgYmUgMCBiZWNhdXNlIDEvKHgyK3gyKSBj YW4gbmV2ZXIgYmUgMSwgYmVjYXVzZQorCS8vIHgyK3gyIGNhbiBuZXZlciBiZSAxKQorCWlmICh0 MSAhPSAwKSBfX2J1aWx0aW5fYWJvcnQoKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHRlc3QyIChp bnQgeTEsIHVuc2lnbmVkIGludCB5MikKK3sKKwlpbnQgdDEgPSB5MSooMS8oeTIreTIpKTsKKwkv LyBUaGlzIGNoZWNrIHNob3VsZCBiZSBvcHRpbWl6ZWQgYXdheSBiZWNhdXNlIHdlIGtub3cgdGhh dCAKKwkvLyB0MSBjYW4gb25seSBiZSAwIGJlY2F1c2UgMS8oeTIreTIpIGNhbiBuZXZlciBiZSAx IGJlY2F1c2UKKwkvLyB5Mit5MiBjYW4gbmV2ZXIgYmUgMQorCWlmICh0MSAhPSAwKSBfX2J1aWx0 aW5fYWJvcnQoKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHRlc3QzIChpbnQgeTEsIHVuc2lnbmVk IGludCB5MikKK3sKKwlpbnQgdDEgPSB5MSooMi8oeTIreTIreTIreTIpKTsKKwlpZiAodDEgIT0g MCkgX19idWlsdGluX2Fib3J0KCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCB0ZXN0NCAoaW50IHkx LCB1bnNpZ25lZCBpbnQgeTIpCit7CisJaW50IHQxID0geTEqKDMvKHkyK3kyK3kyK3kyKSk7CisJ aWYgKHQxICE9IDApIF9fYnVpbHRpbl9hYm9ydCgpOworCXJldHVybiAwOworfQorCisvLyBBbGwg aWYgc3RhdGVtZW50cyBzaG91bGQgZ2V0IG9wdGltaXplZCBhd2F5CisvKiB7IGRnLWZpbmFsIHsg c2Nhbi10cmVlLWR1bXAtdGltZXMgImlmIFxcXCgiIDAgInZycDEiIH0gfSAqLwpkaWZmIC0tZ2l0 IGEvZ2NjL3RyZWUtZGF0YS1yZWYuYyBiL2djYy90cmVlLWRhdGEtcmVmLmMKaW5kZXggZTZkZDVm MTViZWQuLmIwMDVkZTE5MWU2IDEwMDY0NAotLS0gYS9nY2MvdHJlZS1kYXRhLXJlZi5jCisrKyBi L2djYy90cmVlLWRhdGEtcmVmLmMKQEAgLTYxNCw3ICs2MTQsOSBAQCBjb21wdXRlX2Rpc3RyaWJ1 dGl2ZV9yYW5nZSAodHJlZSB0eXBlLCB2YWx1ZV9yYW5nZSAmb3AwX3JhbmdlLAogICBpZiAocmVz dWx0X3JhbmdlKQogICAgIHsKICAgICAgIHJhbmdlX29wZXJhdG9yICpvcCA9IHJhbmdlX29wX2hh bmRsZXIgKGNvZGUsIHR5cGUpOwotICAgICAgb3AtPmZvbGRfcmFuZ2UgKCpyZXN1bHRfcmFuZ2Us IHR5cGUsIG9wMF9yYW5nZSwgb3AxX3JhbmdlKTsKKyAgICAgIG9wLT5mb2xkX3JhbmdlICgqcmVz dWx0X3JhbmdlLCB0eXBlLCBvcDBfcmFuZ2UsIG9wMV9yYW5nZSwgCisJCQkJCQkJCQkJCXdpOjpz aHdpICgtMSwgVFlQRV9QUkVDSVNJT04odHlwZSkpLAorCQkJCQkJCQkJCQl3aTo6c2h3aSAoLTEs IFRZUEVfUFJFQ0lTSU9OKHR5cGUpKSk7CiAgICAgfQogCiAgIC8qIFRoZSBkaXN0cmlidXRpdmUg cHJvcGVydHkgZ3VhcmFudGVlcyB0aGF0IGlmIFRZUEUgaXMgbm8gbmFycm93ZXIKQEAgLTY2Miw3 ICs2NjQsOSBAQCBjb21wdXRlX2Rpc3RyaWJ1dGl2ZV9yYW5nZSAodHJlZSB0eXBlLCB2YWx1ZV9y YW5nZSAmb3AwX3JhbmdlLAogICByYW5nZV9vcGVyYXRvciAqb3AgPSByYW5nZV9vcF9oYW5kbGVy IChjb2RlLCBzc2l6ZXR5cGUpOwogICBib29sIHNhdmVkX2ZsYWdfd3JhcHYgPSBmbGFnX3dyYXB2 OwogICBmbGFnX3dyYXB2ID0gMTsKLSAgb3AtPmZvbGRfcmFuZ2UgKHdpZGVfcmFuZ2UsIHNzaXpl dHlwZSwgb3AwX3JhbmdlLCBvcDFfcmFuZ2UpOworICBvcC0+Zm9sZF9yYW5nZSAod2lkZV9yYW5n ZSwgc3NpemV0eXBlLCBvcDBfcmFuZ2UsIG9wMV9yYW5nZSwKKwkJCQkJCQkJCXdpOjpzaHdpICgt MSwgVFlQRV9QUkVDSVNJT04odHlwZSkpLAorCQkJCQkJCQkJd2k6OnNod2kgKC0xLCBUWVBFX1BS RUNJU0lPTih0eXBlKSkpOwogICBmbGFnX3dyYXB2ID0gc2F2ZWRfZmxhZ193cmFwdjsKICAgaWYg KHdpZGVfcmFuZ2UubnVtX3BhaXJzICgpICE9IDEgfHwgIXJhbmdlX2ludF9jc3RfcCAoJndpZGVf cmFuZ2UpKQogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL2djYy90cmVlLXZycC5jIGIv Z2NjL3RyZWUtdnJwLmMKaW5kZXggMTJlNmU2ZjNlMjIuLjhmMjYyZThhNzViIDEwMDY0NAotLS0g YS9nY2MvdHJlZS12cnAuYworKysgYi9nY2MvdHJlZS12cnAuYwpAQCAtMTAyNiw3ICsxMDI2LDkg QEAgcmFuZ2VfZm9sZF9iaW5hcnlfc3ltYm9saWNzX3AgKHZhbHVlX3JhbmdlICp2ciwKICAgICAg IGNvbnN0IHJhbmdlX29wZXJhdG9yICpvcCA9IGdldF9yYW5nZV9vcF9oYW5kbGVyICh2ciwgY29k ZSwgZXhwcl90eXBlKTsKICAgICAgIHZyMC5ub3JtYWxpemVfc3ltYm9saWNzICgpOwogICAgICAg dnIxLm5vcm1hbGl6ZV9zeW1ib2xpY3MgKCk7Ci0gICAgICByZXR1cm4gb3AtPmZvbGRfcmFuZ2Ug KCp2ciwgZXhwcl90eXBlLCB2cjAsIHZyMSk7CisgICAgICByZXR1cm4gb3AtPmZvbGRfcmFuZ2Ug KCp2ciwgZXhwcl90eXBlLCB2cjAsIHZyMSwKKwkJCQkJCXdpOjpzaHdpICgtMSwgVFlQRV9QUkVD SVNJT04oZXhwcl90eXBlKSksCisJCQkJCQl3aTo6c2h3aSAoLTEsIFRZUEVfUFJFQ0lTSU9OKGV4 cHJfdHlwZSkpKTsKICAgICB9CiAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTEwNDcsNyArMTA0OSw5 IEBAIHJhbmdlX2ZvbGRfdW5hcnlfc3ltYm9saWNzX3AgKHZhbHVlX3JhbmdlICp2ciwKIAkgIC8q IC1YIGlzIHNpbXBseSAwIC0gWC4gICovCiAJICB2YWx1ZV9yYW5nZSB6ZXJvOwogCSAgemVyby5z ZXRfemVybyAodnIwLT50eXBlICgpKTsKLQkgIHJhbmdlX2ZvbGRfYmluYXJ5X2V4cHIgKHZyLCBN SU5VU19FWFBSLCBleHByX3R5cGUsICZ6ZXJvLCB2cjApOworCSAgcmFuZ2VfZm9sZF9iaW5hcnlf ZXhwciAodnIsIE1JTlVTX0VYUFIsIGV4cHJfdHlwZSwgJnplcm8sIHZyMCwKKwkJCQkJCXdpOjpz aHdpICgtMSwgVFlQRV9QUkVDSVNJT04oZXhwcl90eXBlKSksCisJCQkJCQl3aTo6c2h3aSAoLTEs IFRZUEVfUFJFQ0lTSU9OKGV4cHJfdHlwZSkpKTsKIAkgIHJldHVybiB0cnVlOwogCX0KICAgICAg IGlmIChjb2RlID09IEJJVF9OT1RfRVhQUikKQEAgLTEwNTUsMTMgKzEwNTksMTcgQEAgcmFuZ2Vf Zm9sZF91bmFyeV9zeW1ib2xpY3NfcCAodmFsdWVfcmFuZ2UgKnZyLAogCSAgLyogflggaXMgc2lt cGx5IC0xIC0gWC4gICovCiAJICB2YWx1ZV9yYW5nZSBtaW51c29uZTsKIAkgIG1pbnVzb25lLnNl dCAoYnVpbGRfaW50X2NzdCAodnIwLT50eXBlICgpLCAtMSkpOwotCSAgcmFuZ2VfZm9sZF9iaW5h cnlfZXhwciAodnIsIE1JTlVTX0VYUFIsIGV4cHJfdHlwZSwgJm1pbnVzb25lLCB2cjApOworCSAg cmFuZ2VfZm9sZF9iaW5hcnlfZXhwciAodnIsIE1JTlVTX0VYUFIsIGV4cHJfdHlwZSwgJm1pbnVz b25lLCB2cjAsCisJCQkJCQl3aTo6c2h3aSAoLTEsIFRZUEVfUFJFQ0lTSU9OKGV4cHJfdHlwZSkp LAorCQkJCQkJd2k6OnNod2kgKC0xLCBUWVBFX1BSRUNJU0lPTihleHByX3R5cGUpKSk7CiAJICBy ZXR1cm4gdHJ1ZTsKIAl9CiAgICAgICBjb25zdCByYW5nZV9vcGVyYXRvciAqb3AgPSBnZXRfcmFu Z2Vfb3BfaGFuZGxlciAodnIsIGNvZGUsIGV4cHJfdHlwZSk7CiAgICAgICB2YWx1ZV9yYW5nZSB2 cjBfY3N0ICgqdnIwKTsKICAgICAgIHZyMF9jc3Qubm9ybWFsaXplX3N5bWJvbGljcyAoKTsKLSAg ICAgIHJldHVybiBvcC0+Zm9sZF9yYW5nZSAoKnZyLCBleHByX3R5cGUsIHZyMF9jc3QsIHZhbHVl X3JhbmdlIChleHByX3R5cGUpKTsKKyAgICAgIHJldHVybiBvcC0+Zm9sZF9yYW5nZSAoKnZyLCBl eHByX3R5cGUsIHZyMF9jc3QsIHZhbHVlX3JhbmdlIChleHByX3R5cGUpLAorCQkJCQkJd2k6OnNo d2kgKC0xLCBUWVBFX1BSRUNJU0lPTihleHByX3R5cGUpKSwKKwkJCQkJCXdpOjpzaHdpICgtMSwg VFlQRV9QUkVDSVNJT04oZXhwcl90eXBlKSkpOwogICAgIH0KICAgcmV0dXJuIGZhbHNlOwogfQpA QCAtMTA3Myw3ICsxMDgxLDkgQEAgcmFuZ2VfZm9sZF9iaW5hcnlfZXhwciAodmFsdWVfcmFuZ2Ug KnZyLAogCQkJZW51bSB0cmVlX2NvZGUgY29kZSwKIAkJCXRyZWUgZXhwcl90eXBlLAogCQkJY29u c3QgdmFsdWVfcmFuZ2UgKnZyMF8sCi0JCQljb25zdCB2YWx1ZV9yYW5nZSAqdnIxXykKKwkJCWNv bnN0IHZhbHVlX3JhbmdlICp2cjFfLAorICAgICAgY29uc3Qgd2lkZV9pbnQmIG56MCwKKyAgICAg IGNvbnN0IHdpZGVfaW50JiBuejEpCiB7CiAgIGlmICghc3VwcG9ydGVkX3R5cGVzX3AgKHZyLCBl eHByX3R5cGUpCiAgICAgICB8fCAhZGVmaW5lZF9yYW5nZXNfcCAodnIsIHZyMF8sIHZyMV8pKQpA QCAtMTA5Myw3ICsxMTAzLDcgQEAgcmFuZ2VfZm9sZF9iaW5hcnlfZXhwciAodmFsdWVfcmFuZ2Ug KnZyLAogICAgIHZyMS5zZXRfdmFyeWluZyAoZXhwcl90eXBlKTsKICAgdnIwLm5vcm1hbGl6ZV9h ZGRyZXNzZXMgKCk7CiAgIHZyMS5ub3JtYWxpemVfYWRkcmVzc2VzICgpOwotICBvcC0+Zm9sZF9y YW5nZSAoKnZyLCBleHByX3R5cGUsIHZyMCwgdnIxKTsKKyAgb3AtPmZvbGRfcmFuZ2UgKCp2ciwg ZXhwcl90eXBlLCB2cjAsIHZyMSwgbnowLCBuejEpOwogfQogCiAvKiBQZXJmb3JtIGEgdW5hcnkg b3BlcmF0aW9uIG9uIGEgcmFuZ2UuICAqLwpAQCAtMTExNiw3ICsxMTI2LDkgQEAgcmFuZ2VfZm9s ZF91bmFyeV9leHByICh2YWx1ZV9yYW5nZSAqdnIsCiAKICAgdmFsdWVfcmFuZ2UgdnIwX2NzdCAo KnZyMCk7CiAgIHZyMF9jc3Qubm9ybWFsaXplX2FkZHJlc3NlcyAoKTsKLSAgb3AtPmZvbGRfcmFu Z2UgKCp2ciwgZXhwcl90eXBlLCB2cjBfY3N0LCB2YWx1ZV9yYW5nZSAoZXhwcl90eXBlKSk7Cisg IG9wLT5mb2xkX3JhbmdlICgqdnIsIGV4cHJfdHlwZSwgdnIwX2NzdCwgdmFsdWVfcmFuZ2UgKGV4 cHJfdHlwZSksCisJCQkJCQl3aTo6c2h3aSAoLTEsIFRZUEVfUFJFQ0lTSU9OKGV4cHJfdHlwZSkp LAorCQkJCQkJd2k6OnNod2kgKC0xLCBUWVBFX1BSRUNJU0lPTihleHByX3R5cGUpKSk7CiB9CiAK IC8qIElmIHRoZSByYW5nZSBvZiB2YWx1ZXMgdGFrZW4gYnkgT1AgY2FuIGJlIGluZmVycmVkIGFm dGVyIFNUTVQgZXhlY3V0ZXMsCkBAIC00NjE4LDcgKzQ2MzAsOCBAQCBkZXRlcm1pbmVfdmFsdWVf cmFuZ2VfMSAodmFsdWVfcmFuZ2UgKnZyLCB0cmVlIGV4cHIpCiAgICAgICBkZXRlcm1pbmVfdmFs dWVfcmFuZ2VfMSAoJnZyMCwgVFJFRV9PUEVSQU5EIChleHByLCAwKSk7CiAgICAgICBkZXRlcm1p bmVfdmFsdWVfcmFuZ2VfMSAoJnZyMSwgVFJFRV9PUEVSQU5EIChleHByLCAxKSk7CiAgICAgICBy YW5nZV9mb2xkX2JpbmFyeV9leHByICh2ciwgVFJFRV9DT0RFIChleHByKSwgVFJFRV9UWVBFIChl eHByKSwKLQkJCSAgICAgICZ2cjAsICZ2cjEpOworCQkJICAgICAgJnZyMCwgJnZyMSwgd2k6OnNo d2kgKC0xLCBUWVBFX1BSRUNJU0lPTihUUkVFX1RZUEUgKGV4cHIpKSksCisJCQkgICAgICB3aTo6 c2h3aSAoLTEsIFRZUEVfUFJFQ0lTSU9OKFRSRUVfVFlQRSAoZXhwcikpKSk7CiAgICAgfQogICBl bHNlIGlmIChVTkFSWV9DTEFTU19QIChleHByKSkKICAgICB7CkBAIC00NjYyLDQgKzQ2NzUsNCBA QCBkZXRlcm1pbmVfdmFsdWVfcmFuZ2UgKHRyZWUgZXhwciwgd2lkZV9pbnQgKm1pbiwgd2lkZV9p bnQgKm1heCkKICAgICB9CiAKICAgcmV0dXJuIFZSX1ZBUllJTkc7Ci19Cit9ClwgTm8gbmV3bGlu ZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdnJwLmggYi9nY2MvdHJlZS12 cnAuaAppbmRleCA5ODlkODQzMGM5OC4uMDY1MDZlZTdhZjMgMTAwNjQ0Ci0tLSBhL2djYy90cmVl LXZycC5oCisrKyBiL2djYy90cmVlLXZycC5oCkBAIC01MSw3ICs1MSw4IEBAIGV4dGVybiBpbnQg b3BlcmFuZF9sZXNzX3AgKHRyZWUsIHRyZWUpOwogdm9pZCByYW5nZV9mb2xkX3VuYXJ5X2V4cHIg KHZhbHVlX3JhbmdlICosIGVudW0gdHJlZV9jb2RlLCB0cmVlIHR5cGUsCiAJCQkgICAgY29uc3Qg dmFsdWVfcmFuZ2UgKiwgdHJlZSBvcDBfdHlwZSk7CiB2b2lkIHJhbmdlX2ZvbGRfYmluYXJ5X2V4 cHIgKHZhbHVlX3JhbmdlICosIGVudW0gdHJlZV9jb2RlLCB0cmVlIHR5cGUsCi0JCQkgICAgIGNv bnN0IHZhbHVlX3JhbmdlICosIGNvbnN0IHZhbHVlX3JhbmdlICopOworCQkJICAgICBjb25zdCB2 YWx1ZV9yYW5nZSAqLCBjb25zdCB2YWx1ZV9yYW5nZSAqLCAKKwkJCSAgICAgY29uc3Qgd2lkZV9p bnQmLCBjb25zdCB3aWRlX2ludCYpOwogCiBleHRlcm4gZW51bSB2YWx1ZV9yYW5nZV9raW5kIGlu dGVyc2VjdF9yYW5nZV93aXRoX25vbnplcm9fYml0cwogICAoZW51bSB2YWx1ZV9yYW5nZV9raW5k LCB3aWRlX2ludCAqLCB3aWRlX2ludCAqLCBjb25zdCB3aWRlX2ludCAmLCBzaWdub3ApOwpkaWZm IC0tZ2l0IGEvZ2NjL3ZyLXZhbHVlcy5jIGIvZ2NjL3ZyLXZhbHVlcy5jCmluZGV4IDA4YjIzN2Iy NjMyLi5mOTE4MjY0ZTQ2MCAxMDA2NDQKLS0tIGEvZ2NjL3ZyLXZhbHVlcy5jCisrKyBiL2djYy92 ci12YWx1ZXMuYwpAQCAtODI1LDE1ICs4MjUsMjIgQEAgdnJfdmFsdWVzOjpleHRyYWN0X3Jhbmdl X2Zyb21fYmluYXJ5X2V4cHIgKHZhbHVlX3JhbmdlX2VxdWl2ICp2ciwKICAgLyogR2V0IHZhbHVl IHJhbmdlcyBmb3IgZWFjaCBvcGVyYW5kLiAgRm9yIGNvbnN0YW50IG9wZXJhbmRzLCBjcmVhdGUK ICAgICAgYSBuZXcgdmFsdWUgcmFuZ2Ugd2l0aCB0aGUgb3BlcmFuZCB0byBzaW1wbGlmeSBwcm9j ZXNzaW5nLiAgKi8KICAgdmFsdWVfcmFuZ2UgdnIwLCB2cjE7CisgIHdpZGVfaW50IG5vbnplcm8w ID0gd2k6OnNod2kgKC0xLCBUWVBFX1BSRUNJU0lPTihleHByX3R5cGUpKSwgbm9uemVybzEgPSB3 aTo6c2h3aSAoLTEsIFRZUEVfUFJFQ0lTSU9OKGV4cHJfdHlwZSkpOwogICBpZiAoVFJFRV9DT0RF IChvcDApID09IFNTQV9OQU1FKQotICAgIHZyMCA9ICooZ2V0X3ZhbHVlX3JhbmdlIChvcDApKTsK KyAgICB7CisgICAgICB2cjAgPSAqKGdldF92YWx1ZV9yYW5nZSAob3AwKSk7CisgICAgICBub256 ZXJvMCA9IGdldF9ub256ZXJvX2JpdHMob3AwKTsKKyAgICB9CiAgIGVsc2UgaWYgKGlzX2dpbXBs ZV9taW5faW52YXJpYW50IChvcDApKQogICAgIHZyMC5zZXQgKG9wMCk7CiAgIGVsc2UKICAgICB2 cjAuc2V0X3ZhcnlpbmcgKFRSRUVfVFlQRSAob3AwKSk7CiAKICAgaWYgKFRSRUVfQ09ERSAob3Ax KSA9PSBTU0FfTkFNRSkKLSAgICB2cjEgPSAqKGdldF92YWx1ZV9yYW5nZSAob3AxKSk7CisgICAg eworICAgICAgdnIxID0gKihnZXRfdmFsdWVfcmFuZ2UgKG9wMSkpOworICAgICAgbm9uemVybzEg PSBnZXRfbm9uemVyb19iaXRzKG9wMSk7CisgICAgfQogICBlbHNlIGlmIChpc19naW1wbGVfbWlu X2ludmFyaWFudCAob3AxKSkKICAgICB2cjEuc2V0IChvcDEpOwogICBlbHNlCkBAIC04NTAsNyAr ODU3LDcgQEAgdnJfdmFsdWVzOjpleHRyYWN0X3JhbmdlX2Zyb21fYmluYXJ5X2V4cHIgKHZhbHVl X3JhbmdlX2VxdWl2ICp2ciwKIAl2cjEgPSB2YWx1ZV9yYW5nZSAodnJwX3ZhbF9taW4gKGV4cHJf dHlwZSksIHZycF92YWxfbWF4IChleHByX3R5cGUpKTsKICAgICB9CiAKLSAgcmFuZ2VfZm9sZF9i aW5hcnlfZXhwciAodnIsIGNvZGUsIGV4cHJfdHlwZSwgJnZyMCwgJnZyMSk7CisgIHJhbmdlX2Zv bGRfYmluYXJ5X2V4cHIgKHZyLCBjb2RlLCBleHByX3R5cGUsICZ2cjAsICZ2cjEsIG5vbnplcm8w LCBub256ZXJvMSk7CiAKICAgLyogU2V0IHZhbHVlX3JhbmdlIGZvciBuIGluIGZvbGxvd2luZyBz ZXF1ZW5jZToKICAgICAgZGVmID0gX19idWlsdGluX21lbWNociAoYXJnLCAwLCBzeikKQEAgLTkx MSw3ICs5MTgsNyBAQCB2cl92YWx1ZXM6OmV4dHJhY3RfcmFuZ2VfZnJvbV9iaW5hcnlfZXhwciAo dmFsdWVfcmFuZ2VfZXF1aXYgKnZyLAogICAgICAgZWxzZQogCW5fdnIxLnNldCAob3AxLCBvcDEp OwogCi0gICAgICByYW5nZV9mb2xkX2JpbmFyeV9leHByICh2ciwgY29kZSwgZXhwcl90eXBlLCAm dnIwLCAmbl92cjEpOworICAgICAgcmFuZ2VfZm9sZF9iaW5hcnlfZXhwciAodnIsIGNvZGUsIGV4 cHJfdHlwZSwgJnZyMCwgJm5fdnIxLCBub256ZXJvMCwgbm9uemVybzEpOwogICAgIH0KIAogICBp ZiAodnItPnZhcnlpbmdfcCAoKQpAQCAtOTM1LDcgKzk0Miw3IEBAIHZyX3ZhbHVlczo6ZXh0cmFj dF9yYW5nZV9mcm9tX2JpbmFyeV9leHByICh2YWx1ZV9yYW5nZV9lcXVpdiAqdnIsCiAgICAgICBl bHNlCiAJbl92cjAuc2V0IChvcDApOwogCi0gICAgICByYW5nZV9mb2xkX2JpbmFyeV9leHByICh2 ciwgY29kZSwgZXhwcl90eXBlLCAmbl92cjAsICZ2cjEpOworICAgICAgcmFuZ2VfZm9sZF9iaW5h cnlfZXhwciAodnIsIGNvZGUsIGV4cHJfdHlwZSwgJm5fdnIwLCAmdnIxLCBub256ZXJvMCwgbm9u emVybzEpOwogICAgIH0KIAogICAvKiBJZiB3ZSBkaWRuJ3QgZGVyaXZlIGEgcmFuZ2UgZm9yIE1J TlVTX0VYUFIsIGFuZApAQCAtMTMxOCw3ICsxMzI1LDggQEAgdnJfdmFsdWVzOjpleHRyYWN0X3Jh bmdlX2Jhc2ljICh2YWx1ZV9yYW5nZV9lcXVpdiAqdnIsIGdpbXBsZSAqc3RtdCkKIAkJCQkJCSAg ICAgdHlwZSwgb3AwKTsKIAkJICAgICAgZXh0cmFjdF9yYW5nZV9mcm9tX3VuYXJ5X2V4cHIgKCZ2 cjEsIE5PUF9FWFBSLAogCQkJCQkJICAgICB0eXBlLCBvcDEpOwotCQkgICAgICByYW5nZV9mb2xk X2JpbmFyeV9leHByICh2ciwgc3ViY29kZSwgdHlwZSwgJnZyMCwgJnZyMSk7CisJCSAgICAgIHJh bmdlX2ZvbGRfYmluYXJ5X2V4cHIgKHZyLCBzdWJjb2RlLCB0eXBlLCAmdnIwLCAmdnIxLCAKKwkJ CQkJCQkJIHdpOjpzaHdpICgtMSwgVFlQRV9QUkVDSVNJT04odHlwZSkpLCB3aTo6c2h3aSAoLTEs IFRZUEVfUFJFQ0lTSU9OKHR5cGUpKSk7CiAJCSAgICAgIGZsYWdfd3JhcHYgPSBzYXZlZF9mbGFn X3dyYXB2OwogCQkgICAgfQogCQkgIHJldHVybjsKQEAgLTE3MjMsNyArMTczMSw5IEBAIGJvdW5k c19vZl92YXJfaW5fbG9vcCAodHJlZSAqbWluLCB0cmVlICptYXgsIHJhbmdlX3F1ZXJ5ICpxdWVy eSwKIAkgICAgICB0cmVlIHRlbSA9IHdpZGVfaW50X3RvX3RyZWUgKFRSRUVfVFlQRSAoaW5pdCks IHd0bXApOwogCSAgICAgIHZyMS5zZXQgKHRlbSwgdGVtKTsKIAkgICAgICByYW5nZV9mb2xkX2Jp bmFyeV9leHByICgmbWF4dnIsIFBMVVNfRVhQUiwKLQkJCQkgICAgICBUUkVFX1RZUEUgKGluaXQp LCAmdnIwLCAmdnIxKTsKKwkJCQkgICAgICBUUkVFX1RZUEUgKGluaXQpLCAmdnIwLCAmdnIxLCAK KwkJCQkgICAgICB3aTo6c2h3aSAoLTEsIFRZUEVfUFJFQ0lTSU9OKFRSRUVfVFlQRShpbml0KSkp LAorCQkJCSAgICAgIHdpOjpzaHdpICgtMSwgVFlQRV9QUkVDSVNJT04oVFJFRV9UWVBFKGluaXQp KSkpOwogCiAJICAgICAgLyogTGlrZXdpc2UgaWYgdGhlIGFkZGl0aW9uIGRpZC4gICovCiAJICAg ICAgaWYgKG1heHZyLmtpbmQgKCkgPT0gVlJfUkFOR0UpCkBAIC00MjUwLDQgKzQyNjAsNCBAQCB2 cl92YWx1ZXM6OnN3YXBfdnJfdmFsdWUgKHRyZWUgdmFyLCB2YWx1ZV9yYW5nZV9lcXVpdiAqdnIp CiAgICAgcmV0dXJuIE5VTEw7CiAgIHN0ZDo6c3dhcCAodnJfdmFsdWVbU1NBX05BTUVfVkVSU0lP TiAodmFyKV0sIHZyKTsKICAgcmV0dXJuIHZyOwotfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m IGZpbGUK --_002_MWHPR2101MB0811F1402244BB86625AAB0ACCE99MWHPR2101MB0811_--