From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-eopbgr60089.outbound.protection.outlook.com [40.107.6.89]) by sourceware.org (Postfix) with ESMTPS id 269CC3858D1E for ; Sat, 19 Nov 2022 10:49:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 269CC3858D1E Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=81Tteh8R4FtbzUm9wwNj9UksdRHrzcSluXAq68lcXPE=; b=Bojg2gBTkNqJHIXTGPdEh452rjrd2sZkeXm/deYF1e6vUTP7YpFP6e5tuzDAJ25TWaUyaaySGhqvRMfcLCkYyJkY9qfTfi0+dvgozjeNJsB+khDU00pfnA/ygUamEZ3r2z5srzZqZffUs+NGRLeFX+ynjyxguShoR5jhsZM0bHo= Received: from AS8PR04CA0122.eurprd04.prod.outlook.com (2603:10a6:20b:127::7) by GV1PR08MB8156.eurprd08.prod.outlook.com (2603:10a6:150:90::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5857.8; Sat, 19 Nov 2022 10:49:18 +0000 Received: from VI1EUR03FT042.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:127:cafe::48) by AS8PR04CA0122.outlook.office365.com (2603:10a6:20b:127::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5834.9 via Frontend Transport; Sat, 19 Nov 2022 10:49:18 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by VI1EUR03FT042.mail.protection.outlook.com (100.127.144.197) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5834.8 via Frontend Transport; Sat, 19 Nov 2022 10:49:18 +0000 Received: ("Tessian outbound f394866f3f2b:v130"); Sat, 19 Nov 2022 10:49:17 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 318a3a19c66e477f X-CR-MTA-TID: 64aa7808 Received: from ad203e5a17eb.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id E275A712-2941-48AD-B943-E861EE0B1A85.1; Sat, 19 Nov 2022 10:49:16 +0000 Received: from EUR01-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id ad203e5a17eb.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Sat, 19 Nov 2022 10:49:16 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Aybz208yI/KemuwvtXoWb7Nc9UsXQDC48gaHyop0u+L0MixRtAq5gYtf4WS+lQAXN+nyBdgtavy8v29ar2e3YrDFAEtGeTfiCXC1lwd6FHEsezIHlQ7R8stM2bkH8M9X1ThHG7PO7UuQy4X4Llc5bZ+cxYy0iCEJIhxJP7wGKzpRBWbRm2vMCUOHd13NV4fvSIjMQJqVKAsLHzrKRHIwgcRYmxmptBxK9sM9G5xNfPp2grbWeO8fpXbWtbVjoDOjXqVmhc2h+mB7QxVv8c5toistIEtW1Dyd5/5W4C/P/D9Li/fK8br0P56miV2ik5VLU0pgrNJ2ajT4N9gX6SyWdQ== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=81Tteh8R4FtbzUm9wwNj9UksdRHrzcSluXAq68lcXPE=; b=R4TzMHyKHvOy5ilhuQDPdGzBTcQFBJtINB2IJ2/9RaAtjRaJQgm1tEp30fbuIE0iqUQVzhlO5SSUlPZq0yUvHDx4f7xyob7e/9PIobyAmZNIpWmpjXmndsvrmW0cjttwUOkBt7qlOZQmd8Co517893yvC8x9pu/wFleeuz38zT+WB/v+ZJVeEtJD+1dVYiMadIIsHbPVQhWc0uP1U7b+H+FEOBdZwOeGyILjUshYxawzONJ7L5jCgCx8LYXD9jknS4Jm9+4BC7gMpB7u4YgPU1UzBKo/ij0CBUyzncys01OFp13XTZEdKau+kk5+BTD3NF92zRKyTNDP0zddeXsx1Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=81Tteh8R4FtbzUm9wwNj9UksdRHrzcSluXAq68lcXPE=; b=Bojg2gBTkNqJHIXTGPdEh452rjrd2sZkeXm/deYF1e6vUTP7YpFP6e5tuzDAJ25TWaUyaaySGhqvRMfcLCkYyJkY9qfTfi0+dvgozjeNJsB+khDU00pfnA/ygUamEZ3r2z5srzZqZffUs+NGRLeFX+ynjyxguShoR5jhsZM0bHo= Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by AS2PR08MB8262.eurprd08.prod.outlook.com (2603:10a6:20b:551::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5857.8; Sat, 19 Nov 2022 10:49:05 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::bd2a:aff9:b1a0:2fc7]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::bd2a:aff9:b1a0:2fc7%5]) with mapi id 15.20.5834.009; Sat, 19 Nov 2022 10:49:05 +0000 From: Tamar Christina To: Tamar Christina , Richard Biener CC: "gcc-patches@gcc.gnu.org" , nd , Richard Sandiford Subject: RE: [PATCH 1/2]middle-end: Support early break/return auto-vectorization. Thread-Topic: [PATCH 1/2]middle-end: Support early break/return auto-vectorization. Thread-Index: AQHY7snIAwho+tAVIES+mK7MOEeJC65E4G+AgAAFtPCAAUN5AA== Date: Sat, 19 Nov 2022 10:49:04 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: 5D24EBD53A5BDE49B9F79A0E03F5A478.0 Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: VI1PR08MB5325:EE_|AS2PR08MB8262:EE_|VI1EUR03FT042:EE_|GV1PR08MB8156:EE_ X-MS-Office365-Filtering-Correlation-Id: ac2251f5-8e4f-4ba3-873b-08daca1bb558 x-checkrecipientrouted: true nodisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: vxqNH0ri+uIaH8owxVkpGvMHC5A9aNCI4+37PvQdKA7mKEZuvQxYDxHUtONtvEeUD5YMjgD2CkY9C0V9XfLwbWHpigYL/JuQkUnj5vPVMAUSDYlM4EnyvpAsVJKlxUXz8NjKs6s6WnQub99d4ZSbXX2mVSyP/BnStwA6k8duvn3eDOwR6iNa83amCAHTqHHMOhuUE4JOMduQdylF5WNFVkXKkjZ7Tm4BPCzNaHSJDP0baHnwmqg7YC7cYOp+yc5MLc25lo2JZ1g77t67/QwykqKlCqoDqjfN8xP7jFo7FYUxKeijCO2Svsn994RdRTDf+8pFkrffeYEv9z/vZEleJaRxyj2YqbFdZHPCm0HR2gaK9uZqvnRORrU+zKhMmfc/ZHq2V7u+YywHFMpWWGTGaVH3TaDzmmjJxhFTF8M+2aC8Hi2nOD/nq6Uc1x++ZrPP52oxab+wcJzdyZbWyJVVNZuJcny/R7HrYBK4iQ/ru9m8iweCUCoLyrBE5DBHqxSi5cUAla5p8DcrQ5uaIAa1A+/JDQNyRfjJ69tix0UpL7HwLffhayCAcsyz/BeKMAU29jLiZDiyvMgyFoCqFLAgtA5wOvSKI4iXTtQBtoIWvaq+bhmhn5bYQGiuYHv5PSLuIcoS/gcBzjYAsyrXMg2s6NMZTbHs4xiIJw9vRefRtfiQjjF6YhfPRZs7J1OSfbqrqBsOhmLXSczX8R7IXkyHxpRCfD4hITGFfuXk6QKFRNVebYLNMNF7q0yF20Np5U3AbQCSex0CUz/iDpBzQo+AjoePlU2MivKrdVJ4zwbcBac= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR08MB5325.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(346002)(376002)(366004)(136003)(396003)(39860400002)(451199015)(71200400001)(86362001)(6506007)(66899015)(7696005)(26005)(478600001)(53546011)(9686003)(84970400001)(186003)(110136005)(54906003)(122000001)(66556008)(316002)(64756008)(66446008)(66946007)(66476007)(76116006)(4326008)(41300700001)(38100700002)(8936002)(30864003)(5660300002)(52536014)(33656002)(83380400001)(8676002)(2906002)(38070700005)(55016003)(579004)(559001)(357404004);DIR:OUT;SFP:1101; Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR08MB8262 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: VI1EUR03FT042.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: ee69a47a-514e-4ebe-f64a-08daca1bad7b X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: LDqt1RrBWaiuKlflcmGac4C+hvpIp7FMB8e6ezn6h7CRvGC7gLqbC+TU+YQjB3gY0HsoLzQHUEX+Crr3AU9eWfJUuLB6x5Q+e4IIKVAkOEtaR/yRH5te0fvqC/ApsG3iKzUL1daTig6oJ2jku1sSWDXubZWrkZ8/2Gge+dwJAr/qWXTfn+NRO/7UofBULilUrCEoiI/Bzy26ZtjY4BFIHGwxp6BNEiJw849XkQE3jpmdTEWSB8L2TpAFldu7Jd35423Q+RDG7C4t2aHskw0VoNuuAmz+iwciFa546kSOrazLPaY856HM49Ofs42QnL+cmqWNiHj5A/QF+z4SFzbgdgfmhPseXt28Wmbh8ZXEbr0pkQNz0HIpLYmkQZPU5czcfJvq+tbGBiUCDSRpfPEJUEmLj5pGOM6VRrPDXhs4qMacDLisQVSP35rQtNtKxs15vh7R5Ha9dFd3MEZwUB3NWNakB7v/3NcTisom5kUwmvtX3hPE7AgYJds/dubEWSjcw/Kk6usoi0MwqhmmKCbrF2jm5DVOgObRvH/9nN7vVdXqqWSUwfyCGpsK71LGpVhjo9/tVdl1ufGZyjVdt8zU63NLmB1uV9NUv5MsmkzUiGcdjKCVcLHQnmal+fCqdUDWbwRtaPL/ZGUwi/wSUNPmMoP6EoSrfgQPvvQDHVvqylPAmy0ZCkMm8eoKj5h4tINpNdulj1T/Y9dXbzbMCr5r/u9xEBrQ6BNI1Pv8gndyq2KMuzb5JfPpaP2xr7tCGelu5W3cj0DRsVX4oKIGgR7LSfqAA/wBy9sOACX+Le1ah4o= X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230022)(4636009)(376002)(39860400002)(396003)(136003)(346002)(451199015)(46966006)(36840700001)(40470700004)(66899015)(84970400001)(33656002)(86362001)(2906002)(8676002)(8936002)(4326008)(52536014)(30864003)(81166007)(356005)(83380400001)(36860700001)(110136005)(186003)(336012)(54906003)(316002)(70586007)(47076005)(478600001)(82740400003)(40480700001)(70206006)(41300700001)(5660300002)(82310400005)(40460700003)(7696005)(9686003)(6506007)(53546011)(26005)(55016003)(559001)(579004)(357404004);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Nov 2022 10:49:18.0345 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ac2251f5-8e4f-4ba3-873b-08daca1bb558 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: VI1EUR03FT042.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR08MB8156 X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,KAM_LOTSOFHASH,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBHY2MtcGF0Y2hlcyA8Z2NjLXBh dGNoZXMtDQo+IGJvdW5jZXMrdGFtYXIuY2hyaXN0aW5hPWFybS5jb21AZ2NjLmdudS5vcmc+IE9u IEJlaGFsZiBPZiBUYW1hcg0KPiBDaHJpc3RpbmEgdmlhIEdjYy1wYXRjaGVzDQo+IFNlbnQ6IEZy aWRheSwgTm92ZW1iZXIgMTgsIDIwMjIgNjoyMyBQTQ0KPiBUbzogUmljaGFyZCBCaWVuZXIgPHJn dWVudGhlckBzdXNlLmRlPg0KPiBDYzogZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmc7IG5kIDxuZEBh cm0uY29tPjsgUmljaGFyZCBTYW5kaWZvcmQNCj4gPFJpY2hhcmQuU2FuZGlmb3JkQGFybS5jb20+ DQo+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggMS8yXW1pZGRsZS1lbmQ6IFN1cHBvcnQgZWFybHkgYnJl YWsvcmV0dXJuIGF1dG8tDQo+IHZlY3Rvcml6YXRpb24uDQo+IA0KPiA+IC0tLS0tT3JpZ2luYWwg TWVzc2FnZS0tLS0tDQo+ID4gRnJvbTogUmljaGFyZCBCaWVuZXIgPHJndWVudGhlckBzdXNlLmRl Pg0KPiA+IFNlbnQ6IEZyaWRheSwgTm92ZW1iZXIgMTgsIDIwMjIgMzowNCBQTQ0KPiA+IFRvOiBU YW1hciBDaHJpc3RpbmEgPFRhbWFyLkNocmlzdGluYUBhcm0uY29tPg0KPiA+IENjOiBnY2MtcGF0 Y2hlc0BnY2MuZ251Lm9yZzsgbmQgPG5kQGFybS5jb20+OyBSaWNoYXJkIFNhbmRpZm9yZA0KPiA+ IDxSaWNoYXJkLlNhbmRpZm9yZEBhcm0uY29tPg0KPiA+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggMS8y XW1pZGRsZS1lbmQ6IFN1cHBvcnQgZWFybHkgYnJlYWsvcmV0dXJuIGF1dG8tDQo+ID4gdmVjdG9y aXphdGlvbi4NCj4gPg0KPiA+IE9uIFdlZCwgMiBOb3YgMjAyMiwgVGFtYXIgQ2hyaXN0aW5hIHdy b3RlOg0KPiA+DQo+ID4gPiBIaSBBbGwsDQo+ID4gPg0KPiA+ID4gVGhpcyBwYXRjaCBhZGRzIGlu aXRpYWwgc3VwcG9ydCBmb3IgZWFybHkgYnJlYWsgdmVjdG9yaXphdGlvbiBpbiBHQ0MuDQo+ID4g PiBUaGUgc3VwcG9ydCBpcyBhZGRlZCBmb3IgYW55IHRhcmdldCB0aGF0IGltcGxlbWVudHMgYSB2 ZWN0b3IgY2JyYW5jaA0KPiA+IG9wdGFiLg0KPiA+DQo+ID4gSSdtIGxvb2tpbmcgYXQgdGhpcyBu b3csIGZpcnN0IHNvbWUgaGlnaC1sZXZlbCBxdWVzdGlvbnMuDQo+ID4NCj4gPiBXaHkgZG8gd2Ug bmVlZCBhIG5ldyBjYnJhbmNoIG9wdGFiPyAgSXQgc2VlbXMgaW1wbGVtZW50aW5nDQo+ID4gYSB2 ZWN0b3IgY29tcGFyaXNvbiBhbmQgbWFzayB0ZXN0IGFnYWluc3QgemVybyBzdWZmaWNpZXM/DQo+ IA0KPiAgSXQgZG9lc24ndCBkZWZpbmUgYSBuZXcgb3B0YWIsIEl0J3MganVzdCB1c2luZyB0aGUg ZXhpc3RpbmcgY2JyYW5jaCBvcHRhYiB0bw0KPiBjaGVjaw0KPiB0aGF0IHRoZSB0YXJnZXQgY2Fu IGhhbmRsZSBhIHZlY3RvciBjb21wYXJpc29uIHdpdGggMCBpbiBhIGJyYW5jaCBzdGF0ZW1lbnQu DQo+IA0KPiBOb3RlIHRoYXQgaXQgZG9lc24ndCBnZW5lcmF0ZSBhIGNhbGwgdG8gdGhpcyBvcHRh YiwgR0lNUExFIGV4cGFuc2lvbiBhbHJlYWR5DQo+IHdpbGwuDQo+IA0KPiBUaGUgcmVhc29uIEkg ZG9uJ3QgY2hlY2sgYWdhaW5zdCBqdXN0IGNvbXBhcmlzb24gd2l0aCAwIGFuZCBlcXVhbGl0eSBp cyB0aGF0DQo+IFR5cGljYWxseSBzcGVha2luZyBhIHZlY3RvciBjb21wYXJpc29uIHdpdGggMCBp cyBub3QgZXhwZWN0ZWQgdG8gc2V0IGEgZmxhZy4NCj4gIGkuZS4gdHlwaWNhbGx5IGl0IHJlc3Vs dHMgaW4ganVzdCBhIHZlY3RvciBvZiBCb29sZWFucy4NCj4gDQo+IEEgdmVjdG9yIGNvbXBhcmUg d2l0aCAwIGluIGEgYnJhbmNoIHdpbGwgYmUgbG93ZXJlZCB0byBjYnJhbmNoIHRvZGF5IHNvIEkg anVzdA0KPiB1c2UgdGhlIG9wdGFiIHRvIHNlZSB0aGF0IHRoZSB0YXJnZXQgY2FuIGhhbmRsZSB0 aGlzIGJyYW5jaGluZyBhbmQgbGVhdmUNCj4gaXQgdXAgdG8gdGhlIHRhcmdldCB0byBkbyBob3dl dmVyIGl0IGRlY2lkZXMuDQo+IA0KPiBUaGUgYWx0ZXJuYXRpdmUgd291bGQgcmVxdWlyZSBtZSAo SSB0aGluaykgdG8gcmVkdWNlIHRvIGEgc2NhbGFyIGZvciB0aGUNCj4gZXF1YWxpdHkNCj4gY2hl Y2sgYXMgeW91IG1lbnRpb25lZCwgYnV0IHN1Y2ggY29kZWdlbiB3b3VsZCBiZSB3b3JzZSBmb3Ig dGFyZ2V0cyBsaWtlDQo+IFNWRQ0KPiB3aGljaCBoYXMgbmF0aXZlIHN1cHBvcnQgZm9yIHRoaXMg b3BlcmF0aW9uLiAgV2UnZCBoYXZlIHRvIHVuZG8gdGhlDQo+IHJlZHVjdGlvbiBkdXJpbmcgUlRM Lg0KPiANCj4gRXZlbiBmb3IgdGFyZ2V0cyBsaWtlIE5FT04sIHdlJ2QgaGF2ZSB0byByZXBsYWNl IHRoZSByZWR1Y3Rpb24gY29kZSwNCj4gYmVjYXVzZSB3ZQ0KPiBjYW4gZ2VuZXJhdGUgYmV0dGVy IGNvZGUgYnkgZG9pbmcgdGhlIHJlZHVjdGlvbiB1c2luZyBwYWlyd2lzZSBpbnN0cnVjdGlvbnMu DQo+IA0KPiBUaGVzZSBraW5kcyBvZiBkaWZmZXJlbmNlcyB0b2RheSBhcmUgaGFuZGxlZCBieSBj YnJhbmNoX29wdGFiIGFscmVhZHkgc28gaXQNCj4gc2VlbWVkDQo+IGJldHRlciB0byBqdXN0IHJl LXVzZSBpdC4NCj4gDQo+ID4NCj4gPiBZb3UgaGF2ZSBzb21lIGVsYWJvcmF0ZSBleHBsYW5hdGlv biBvbiBob3cgcGVlbGluZyB3b3JrcyBidXQgSQ0KPiA+IHNvbWV3aGF0IG1pc3MgdGhlIGhpZ2gt bGV2ZWwgaWRlYSBob3cgdG8gdmVjdG9yaXplIHRoZSBlYXJseQ0KPiA+IGV4aXQuICBJJ3ZlIGFw cGxpZWQgdGhlIHBhdGNoZXMgYW5kIGZyb20gbG9va2luZyBhdCBob3cNCj4gPiB2ZWN0LWVhcmx5 LWJyZWFrXzEuYyBnZXRzIHRyYW5zZm9ybWVkIG9uIGFhcmNoNjQgaXQgc2VlbXMgeW91DQo+ID4g dmVjdG9yaXplDQo+ID4NCj4gPiAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspDQo+ID4gIHsN Cj4gPiAgICB2ZWN0X2JbaV0gPSB4ICsgaTsNCj4gPiAgICBpZiAodmVjdF9hW2ldID4geCkNCj4g PiAgICAgIGJyZWFrOw0KPiA+ICAgIHZlY3RfYVtpXSA9IHg7DQo+ID4gIH0NCj4gPg0KPiA+IGFz DQo+ID4NCj4gPiAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOykNCj4gPiAgew0KPiA+ICAgIGlmIChh bnkgKHZlY3RfYVtpXSA+IHgpKQ0KPiA+ICAgICAgYnJlYWs7DQo+ID4gICAgaSArPSBWRjsNCj4g PiAgICB2ZWN0X2JbaV0gPSB4ICsgaTsNCj4gPiAgICB2ZWN0X2FbaV0gPSB4Ow0KPiA+ICB9DQo+ ID4gIGZvciAoOyBpIDwgTjsgaSsrKQ0KPiA+ICB7DQo+ID4gICAgdmVjdF9iW2ldID0geCArIGk7 DQo+ID4gICAgaWYgKHZlY3RfYVtpXSA+IHgpDQo+ID4gICAgICBicmVhazsNCj4gPiAgICB2ZWN0 X2FbaV0gPSB4Ow0KPiA+ICB9DQo+ID4NCj4gPiBBcyB5b3Ugb3V0bGluZSBiZWxvdyB0aGlzIHJl cXVpcmVzIHRoYXQgdGhlIHNpZGUtZWZmZWN0cyBkb25lIGFzIHBhcnQNCj4gPiBvZiA8c3RhdGVt ZW50czE+IGFuZCA8Y29uZGl0aW9uPiBiZWZvcmUgZXhpdGluZyBjYW4gYmUgbW92ZWQgYWZ0ZXIg dGhlDQo+ID4gZXhpdCwgYmFzaWNhbGx5IHlvdSBuZWVkIHRvIGJlIGFibGUgdG8gY29tcHV0ZSB3 aGV0aGVyIGFueSBzY2FsYXINCj4gPiBpdGVyYXRpb24gY292ZXJlZCBieSBhIHZlY3RvciBpdGVy YXRpb24gd2lsbCBleGl0IHRoZSBsb29wIGVhcmx5Lg0KPiA+IENvZGUgZ2VuZXJhdGlvbiB3aXNl IHlvdSdkIHNpbXBseSAiaWdub3JlIiBjb2RlIGdlbmVyYXRpbmcgZWFybHkgZXhpdHMNCj4gPiBh dCB0aGUgcGxhY2UgdGhleSBhcHBlYXIgaW4gdGhlIHNjYWxhciBjb2RlIGFuZCBpbnN0ZWFkIGVt aXQgdGhlbQ0KPiA+IHZlY3Rvcml6ZWQgaW4gdGhlIGxvb3AgaGVhZGVyLg0KPiANCj4gSW5kZWVk LCBUaGlzIGlzIGhvdyBpdCdzIGhhbmRsZWQgdG9kYXkuICBGb3IgZnVsbHkgbWFza2VkIGxvb3Bz IHdlIGNhbiBkbw0KPiBiZXR0ZXINCj4gYW5kIHdvdWxkIGJlIGEgZnV0dXJlIGV4cGFuc2lvbiwg YnV0IHRoaXMgY29kZWdlbiBpcyBzaW1wbGVyIHRvIHN1cHBvcnQNCj4gdG9kYXkNCj4gYW5kIGlz IGJlbmVmaWNpYWwgdG8gYWxsIHRhcmdldHMuDQo+IA0KPiBJdCBhbHNvIGhhcyB0aGUgYmVuZWZp dCB0aGF0IGNvbXBsaWNhdGVkIHJlZHVjdGlvbiB3ZSBkb24ndCBzdXBwb3J0IHRvZGF5DQo+IGRv bid0DQo+IGFib3J0IHZlY3Rvcml6YXRpb24gYmVjYXVzZSB3ZSBqdXN0IHB1bnQgdG8gc2NhbGFy LiBFLmcuIHRvZGF5IHdlIGJhaWwgb3V0IG9uOg0KPiANCj4gaWYgKGFbaV0gPiB4KQ0KPiB7DQo+ ICBiID0gYVtpXTsNCj4gIGMgPSBpOw0KPiB9DQo+IA0KPiBCdXQNCj4gDQo+IGlmIChhW2ldID4g eCkNCj4gew0KPiAgYiA9IGFbaV07DQo+ICBjID0gaTsNCj4gIGJyZWFrOw0KPiB9DQo+IA0KPiBX b3JrcyBmaW5lLiAgRm9yIGZ1bGx5IG1hc2tlZCBsb29wcywgUmljaGFyZCdzIGRlc2lnbiB3aXRo IG11bHRpcGxlIHJncm91cHMNCj4gd291bGQNCj4gQWxsb3cgdXMgdG8gaGFuZGxlIHRoZXNlIHRo aW5ncyBiZXR0ZXIgd2l0aG91dCB0aGUgc2NhbGFyIGxvb3Agc2hvdWxkIHdlDQo+IHdhbnQgdG8N Cj4gSW4gdGhlIGZ1dHVyZS4gVGhlIGN1cnJlbnQgZGVzaWduIGRvZXNuJ3QgcHJvaGliaXQgdGhp cyBjaG9pY2UgaW4gdGhlIGZ1dHVyZS4NCj4gDQo+ID4NCj4gPiA+IENvbmNyZXRlbHkgdGhlIGtp bmQgb2YgbG9vcHMgc3VwcG9ydGVkIGFyZSBvZiB0aGUgZm9ybXM6DQo+ID4gPg0KPiA+ID4gIGZv ciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQ0KPiA+ID4gIHsNCj4gPiA+ICAgIDxzdGF0ZW1lbnRz MT4NCj4gPiA+ICAgIGlmICg8Y29uZGl0aW9uPikNCj4gPiA+ICAgICAgPGFjdGlvbj47DQo+ID4g PiAgICA8c3RhdGVtZW50czI+DQo+ID4gPiAgfQ0KPiA+ID4NCj4gPiA+IHdoZXJlIDxhY3Rpb24+ IGNhbiBiZToNCj4gPiA+ICAtIGJyZWFrDQo+ID4gPiAgLSByZXR1cm4NCj4gPiA+DQo+ID4gPiBB bnkgbnVtYmVyIG9mIHN0YXRlbWVudHMgY2FuIGJlIHVzZWQgYmVmb3JlIHRoZSA8YWN0aW9uPiBv Y2N1cnMuDQo+ID4gPg0KPiA+ID4gU2luY2UgdGhpcyBpcyBhbiBpbml0aWFsIHZlcnNpb24gZm9y IEdDQyAxMyBpdCBoYXMgdGhlIGZvbGxvd2luZyBsaW1pdGF0aW9uczoNCj4gPiA+DQo+ID4gPiAt IE9ubHkgZml4ZWQgc2l6ZWQgaXRlcmF0aW9ucyBhbmQgYnVmZmVycyBhcmUgc3VwcG9ydGVkLiAg VGhhdCBpcyB0byBzYXkgYW55DQo+ID4gPiAgIHZlY3RvcnMgbG9hZGVkIG9yIHN0b3JlZCBtdXN0 IGJlIHRvIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFycmF5cyB3aXRoDQo+IGtub3duDQo+ID4gPiAg IHNpemVzLiBOIG11c3QgYWxzbyBiZSBrbm93bi4NCj4gPg0KPiA+IFdoeT8NCj4gDQo+IE5vdCBh biBpbnRyaW5zaWMgbGltaXRhdGlvbiwganVzdCBvbmUgZG9uZSBmb3IgcHJhY3RpY2FsaXR5IGFu ZCB0byBrZWVwIHRoZSBwYXRjaA0KPiBzaW1wbGVyLiAgVGhlc2UgY2FzZXMgd2VyZSBtb3N0IG9m IHRoZSBjYXNlcyB0aGF0IHdlIHdhbnRlZC4NCj4gDQo+IFN1cHBvcnRpbmcgdGhpcyByZXF1aXJl cyBhZGRpbmcgc3VwcG9ydCBmb3IgbXVsdGlwbGUtZXhpdHMgdG8gYWxsIHRoZSBkaWZmZXJlbnQN Cj4gcGVlbGluZw0KPiBhbmQgdmVyc2lvbmluZyBjb2RlIGF0IG9uY2UsIHdoaWNoIHdvdWxkIGJl IGEgbXVjaCBiaWdnZXIgcGF0Y2guDQo+IA0KPiBBZGRpdGlvbmFsbHkgZm9yIFNWRSAodGhlIG1h aW4gdGFyZ2V0IG9mIHRoZSBjb2RlZ2VuIGNoYW5nZSkgd2UnZCB3YW50IHRvDQo+IGRvIHRoaXMN Cj4gdXNpbmcgZmlyc3QgZmF1bHRpbmcgbG9hZHMsICBidXQgdGhlcmUncyBhIGRlcGVuZGVuY3kg dG8gb3RoZXIgdGhpbmdzIHdlIG11c3QNCj4gc3VwcG9ydCBib3RoIGluIEdJTVBMRSBpdHNlbGYg YW5kIHRoZSB2ZWN0b3JpemVyIGJlZm9yZSB3ZSBjYW4gZG8gdGhpcy4NCj4gDQoNCkFkZGl0aW9u YWxseSBwZWVsaW5nIGZvciBhbGlnbm1lbnQgb25seSB3b3JrcyBmb3IgYSBzaW5nbGUgaW5wdXQg c3RyZWFtIChvciBtdXR1YWxseQ0KYWxpZ25lZCBvbmVzKSB3aGljaCBkZWZlYXRzIHNvbWUgb2Yg b3VyIHVzZS1jYXNlcy4NCg0KRm9yIHZhcmlhYmxlIGxlbmd0aCBJU0FzIHN0YXRpYyBhbGlnbm1l bnQgYWxzbyBkb2Vzbid0IHdvcmssIHNvIHNpbmNlIFNWRSB3YXMgdGhlDQptYWluIHRhcmdldCBv ZiB0aGUgcGF0Y2ggdGhlIGN1cnJlbnQgbGltaXRhdGlvbiB3YXMgYSBzZW5zaWJsZSBvbmUgdG8g c3RhcnQgd2l0aC4NCg0KPiA+DQo+ID4gPiAtIGFueSBzdG9yZXMgaW4gPHN0YXRlbWVudHMxPiBz aG91bGQgbm90IGJlIHRvIHRoZSBzYW1lIG9iamVjdHMgYXMgaW4NCj4gPiA+ICAgPGNvbmRpdGlv bj4uICBMb2FkcyBhcmUgZmluZSBhcyBsb25nIGFzIHRoZXkgZG9uJ3QgaGF2ZSB0aGUgcG9zc2li aWxpdHkgdG8NCj4gPiA+ICAgYWxpYXMuDQo+ID4NCj4gPiBJIHRoaW5rIHRoYXQncyBhIGZ1bmRh bWVudGFsIGxpbWl0YXRpb24gLSB5b3UgaGF2ZSB0byBiZSBhYmxlIHRvIGNvbXB1dGUNCj4gPiB0 aGUgZWFybHkgZXhpdCBjb25kaXRpb24gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdmVjdG9yaXpl ZCBsb29wLiAgRm9yDQo+ID4gYSBzaW5nbGUgYWx0ZXJuYXRlIGV4aXQgaXQgbWlnaHQgYmUgcG9z c2libGUgdG8gYXBwbHkgbG9vcCByb3RhdGlvbiB0bw0KPiA+IG1vdmUgdGhpbmdzIGJ1dCB0aGF0 IGNhbiBpbnRyb2R1Y2UgImJhZCIgY3Jvc3MtaXRlcmF0aW9uIGRlcGVuZGVuY2VzKD8pDQo+ID4N Cj4gDQoNCkkgc2hvdWxkIGJlIGFibGUgdG8gc3VwcG9ydCBXQVItZGVwZW5kZW5jaWVzIHdpdGhv dXQgbXVjaCBlZmZvcnQgdGhvdWdoLA0KdGhhdCB3b3VsZCBsaWtlbHkgYmUgdGhlIGNvbW1vbiBj YXNlIGhlcmUuDQoNCj4gVGhhdCdzIGFuIGludGVyZXN0aW5nIGlkZWEsIEknZCBoYXZlIHRvIHdv cmsgaXQgb3V0IG9uIHBhcGVyLiAgSSBndWVzcyB0aGUgbWFpbg0KPiBkaWZmaWN1bHR5IGNvbXBh cmVkIHRvIHNheSBjbGFzc2ljYWwgbG9vcCByb3RhdGlvbiBpcyB0aGF0IHRoZSBjb25kaXRpb24g aW5zaWRlDQo+IHRoZSBlYXJseSBicmVhayBzdGF0ZW1lbnQgY2FuIGl0c2VsZiBiZSBkZXBlbmRl bnQgb24gb3RoZXIgc3RhdGVtZW50LiAgU28NCj4geW91IHN0aWxsIGhhdmUgdG8gbW92ZSBhICJj aGFpbiIgb2Ygc3RhdGVtZW50cyB3aGljaCB0aGVtc2VsdmVzIHN0aWxsIG5lZWQgdG8NCj4gYmUg dmVjdG9yaXplZC4NCj4gDQo+IFdoZXJlIGl0IGdldHMgZGlmZmljdWx0LCBhbmQgcGFydGlhbGx5 IHdoeSBJIGFsc28gb25seSBzdXBwb3J0IDEgZWFybHkgZXhpdCBpbiB0aGlzDQo+IGZpcnN0DQo+ IHZlcnNpb24gaXMgdGhhdCBhIHNlY29uZCBleGl0IGhhcyBhIGRlcGVuZGVuY3kgb24gdGhlIDFz dCBvbmUuIEFuZCB0aGVyZQ0KPiBtYXkNCj4gYmUgb3RoZXIgc3RhdGVtZW50cyBiZXR3ZWVuIHRo ZSBmaXJzdCBhbmQgc2Vjb25kIGV4aXQuICBUaGlzIGlzIHdoZXJlIEkgdGhpbmsNCj4gbG9vcCBy b3RhdGlvbiB3b3VsZCBmYWxsIGFwYXJ0IHZzIHRoZSBjb2RlIG1vdGlvbiBJJ20gZG9pbmcgbm93 Lg0KPiANCg0KQW5vdGhlciBtYWluIGRpZmZlcmVuY2UgaXMgdGhhdCB3ZSBkb24ndCB3YW50IHRv IHJvdGF0ZSB0aGUgZW50aXJlIGhlYWRlciBhcw0KYSB3aG9sZSwgd2Ugb25seSB3YW50IHRvIG1v dmUgY2VydGFpbiBpbnN0cnVjdGlvbnMsIGFuZCB3aGF0IHRob3NlIGluc3RydWN0aW9ucw0KYXJl IGhpZ2hseSBkZXBlbmRzIG9uIHRoaXMgcGFydGljdWxhciB1c2UgY2FzZS4gIFNvIHdlIHdvdWxk bid0IGJlIGFibGUgdG8gbWFrZQ0KYSBpbmRlcGVuZGVudCBvcHRpbWl6YXRpb24gaGVyZS4NCg0K Q2hlZXJzLA0KVGFtYXINCg0KPiA+ID4gLSBObyBzdXBwb3J0IGZvciBwcm9sb2d1ZSBwZWVsaW5n LiAgU2luY2Ugd2Ugb25seSBzdXBwb3J0IGZpeGVkIGJ1ZmZlcnMNCj4gdGhpcw0KPiA+ID4gICB3 b3VsZG4ndCBiZSBhbiBpc3N1ZSBhcyB3ZSBhc3N1bWUgdGhlIGFycmF5cyBhcmUgY29ycmVjdGx5 IGFsaWduZWQuDQo+ID4NCj4gPiBIdWgsIEkgZG9uJ3QgdW5kZXJzdGFuZCBob3cgcHJvbG9ndWUg b3IgZXBpbG9ndWUgcGVlbGluZyBpcyBhbiBpc3N1ZT8gIElzDQo+ID4gdGhhdCBqdXN0IGJlY2F1 c2UgeW91IGRpZG4ndCBoYW5kbGUgdGhlIGVhcmx5IGV4aXQgdHJpZ2dlcmluZz8NCj4gDQo+IFll YWgsIGl0J3Mgbm90IGFuIGludHJpbnNpYyBsaW1pdGF0aW9uLCBhbmQgdGhlIGNvZGUgaW1wbGVt ZW50ZWQgZG9lc24ndCBoYXZlDQo+IGFueXRoaW5nIHRoYXQgd291bGQgcHJldmVudCB0aGlzIGZy b20gaGFwcGVuaW5nIGluIHRoZSBmdXR1cmUuICBJdCdzIGp1c3QNCj4gc29tZXRoaW5nDQo+IHdl IGRpZG4ndCByZXF1aXJlIGZvciB0aGUgY3VycmVudCB1c2UtY2FzZXMuDQo+IA0KPiBUbyBzdXBw b3J0IHRoaXMgd2UnZCAianVzdCIgbmVlZCB0byBzdXBwb3J0IHByb2xvZ3VlIHBlZWxpbmcgYnkg YnJhbmNoaW5nIHRvDQo+IHRoZSBleGl0IGJsb2NrLCBidXQgd2UnZCBoYXZlIHRvIHNwbGl0IHRo ZSBleGl0IGJsb2NrIHNvIHdlIGtlZXAgc2ltcGxlIHR3bw0KPiBhcmd1bWVudCBwaGkgbm9kZXMg Zm9yIGVhY2ggcGVlbGVkIGl0ZXJhdGlvbi4gaS5lLiBJIGRvbid0IHRoaW5rIHRoZXkgY2FuIGFs bA0KPiBleGl0DQo+IHRvIHRoZSBzYW1lIGJsb2NrIChkbyB3ZSBzdXBwb3J0IHBoaSBub2RlcyB3 aXRoIE4gZW50cmllcz8pIGFzIEkgZG9uJ3QgdGhpbmsNCj4gd2UnZCBiZSBhYmxlIHRvIGhhbmRs ZSB0aGF0IHJlZHVjdGlvbi4gIFNvIEkga25vdyBob3cgdG8gcG90ZW50aWFsbHkgZG8gaXQsDQo+ IGFuZCBrZXB0IGl0IGluIG1pbmQgaW4gdGhlIGltcGxlbWVudGF0aW9uLCBidXQganVzdCBmb3Ig cHJhY3RpY2FsaXR5L3RpbWUNCj4gZGlkIG5vdCBkbyBpdCBhdCB0aGlzIHRpbWUuDQo+IA0KPiA+ DQo+ID4gPiAtIEZ1bGx5IG1hc2tlZCBsb29wcyBvciB1bm1hc2tlZCBsb29wcyBhcmUgc3VwcG9y dGVkLCBidXQgbm90IHBhcnRpYWxseQ0KPiA+IG1hc2tlZA0KPiA+ID4gICBsb29wcy4NCj4gPiA+ IC0gT25seSBvbmUgYWRkaXRpb25hbCBleGl0IGlzIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUuICBU aGUgbWFqb3JpdHkgb2YgdGhlDQo+ID4gY29kZQ0KPiA+ID4gICB3aWxsIGhhbmRsZSBuIGV4aXRz LiBCdXQgbm90IGFsbCBzbyBhdCB0aGlzIHRpbWUgdGhpcyByZXN0cmljdGlvbiBpcyBuZWVkZWQu DQo+ID4gPiAtIFRoZSBlYXJseSBleGl0IG11c3QgYmUgYmVmb3JlIHRoZSBuYXR1cmFsIGxvb3Ag ZXhpdC9sYXRjaC4gIFRoZSB2ZWN0b3JpemVyDQo+IGlzDQo+ID4gPiAgIGRlc2lnbmVkIGluIHdh eSB0byBwcm9wYWdlIHBoaS1ub2RlcyBkb3dud2FyZHMuICBBcyBzdWNoIHN1cHBvcnRpbmcNCj4g PiB0aGlzDQo+ID4gPiAgIGludmVydGVkIGNvbnRyb2wgZmxvdyBpcyBoYXJkLg0KPiA+DQo+ID4g SG93IGRvIHlvdSBpZGVudGlmeSB0aGUgIm5hdHVyYWwiIGV4aXQ/ICBJdCdzIHRoZSBvbmUNCj4g PiBudW1iZXJfb2ZfaXRlcmF0aW9uc19leGl0IHdvcmtzIG9uPyAgWW91ciBub3JtYWxfZXhpdCBw aWNrcyB0aGUNCj4gPiBmaXJzdCBmcm9tIHRoZSBsb29wcyByZWNvcmRlZCBleGl0IGxpc3QgYnV0 IEkgZG9uJ3QgdGhpbmsgdGhhdCBsaXN0DQo+ID4gaXMgb3JkZXJlZCBpbiBhbnkgcGFydGljdWxh ciB3YXkuDQo+IA0KPiBBaCB0aG91Z2h0IGl0IHdhcyBzaW5jZSBkdXJpbmcgdGhlIGxvb3AgYW5h bHlzaXMgaXQncyBhbHdheXMgdGhlIGZpcnN0IGV4aXQuDQo+IEJ1dCBjYW4gZWFzaWx5IHVwZGF0 ZSB0aGUgcGF0Y2ggdG8gZGV0ZXJtaW5lIHRoYXQgaW4gYSBzbWFydGVyIHdheS4NCj4gDQo+ID4N Cj4gPiAibm9ybWFsX2V4aXQiIHdvdWxkIHJhdGhlciBiZSBzaW5nbGVfY291bnRhYmxlX2V4aXQg KCkgb3Igc28/ICBBIGxvb3ANCj4gPiBhbHJlYWR5IGhhcyBhIGxpc3Qgb2YgY29udHJvbF9pdnMg KG5vdCBzdXJlIGlmIHdlIGV2ZXIgaGF2ZSBtb3JlIHRoYW4NCj4gPiBvbmUpLCBJIHdvbmRlciBp ZiB0aGF0IGNhbiBiZSBhbm5vdGF0ZWQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBleGl0DQo+ID4g ZWRnZT8NCj4gPg0KPiA+IEkgdGhpbmsgdGhhdCB2ZWN0X2FuYWx5emVfbG9vcF9mb3JtIHNob3Vs ZCByZWNvcmQgdGhlIGNvdW50aW5nIElWDQo+ID4gZXhpdCBlZGdlIGFuZCB0aGF0IHJlY29yZGVk IGVkZ2Ugc2hvdWxkIGJlIHBhc3NlZCB0byB1dGlsaXRpZXMNCj4gPiBsaWtlIHNscGVlbF9jYW5f ZHVwbGljYXRlX2xvb3BfcCByYXRoZXIgdGhhbiByZS1xdWVyeWluZyAnbm9ybWFsX2V4aXQnLA0K PiA+IGZvciBleGFtcGxlIGlmIHdlJ2QgaGF2ZQ0KPiA+DQo+ID4gZm9yICg7OyArK2ksICsraikN Cj4gPiAgIHsNCj4gPiAgICAgaWYgKGkgPCBuKQ0KPiA+ICAgICAgIGJyZWFrOw0KPiA+ICAgICBh W2ldID0gMDsNCj4gPiAgICAgaWYgKGogPCBtKQ0KPiA+ICAgICAgIGJyZWFrOw0KPiA+ICAgfQ0K PiA+DQo+ID4gd2hpY2ggY291bnRpbmcgSVYgd2UgY2hvb3NlIGFzICJub3JtYWwiIHNob3VsZCBi ZSB1cCB0byB0aGUgdmVjdG9yaXplciwNCj4gPiBub3QgdXAgdG8gdGhlIGxvb3AgaW5mcmFzdHJ1 Y3R1cmUuDQo+IA0KPiBBaCwgVGhhdCdzIGEgZmFpciBlbm91Z2ggcG9pbnQgYW5kIGVhc3kgZW5v dWdoIHRvIGRvLg0KPiANCj4gPg0KPiA+IFRoZSBwYXRjaCBzaG91bGQgbGlrZWx5IGJlIHNwbGl0 LCBkb2luZyBzaW5nbGVfZXhpdCAoKSByZXBsYWNlbWVudHMNCj4gPiB3aXRoLCBzYXksIExPT1Bf VklORk9fSVZfRVhJVCAoLi4pIGZpcnN0Lg0KPiA+DQo+IA0KPiBPaywgSSdsbCBzdGFydCBkb2lu ZyB0aGF0IG5vdyB3aGlsZSB3YWl0aW5nIGZvciB0aGUgZnVsbCByZXZpZXcuDQo+IA0KPiA+DQo+ ID4gPiAtIE5vIHN1cHBvcnQgZm9yIGVwaWxvZ3VlIHZlY3Rvcml6YXRpb24uICBUaGUgb25seSBl cGlsb2d1ZSBzdXBwb3J0ZWQgaXMNCj4gdGhlDQo+ID4gPiAgIHNjYWxhciBmaW5hbCBvbmUuDQo+ ID4gPg0KPiA+ID4gV2l0aCB0aGUgaGVscCBvZiBJUEEgdGhpcyBzdGlsbCBnZXRzIGhpdCBxdWl0 ZSBvZnRlbi4gIER1cmluZyBib290c3RyYXAgaXQNCj4gPiA+IGhpdCByYXRoZXIgZnJlcXVlbnRs eSBhcyB3ZWxsLg0KPiA+ID4NCj4gPiA+IFRoaXMgaW1wbGVtZW50YXRpb24gZG9lcyBub3Qgc3Vw cG9ydCBjb21wbGV0ZWx5IGhhbmRsaW5nIHRoZSBlYXJseQ0KPiBicmVhaw0KPiA+IGluc2lkZQ0K PiA+ID4gdGhlIHZlY3RvciBsb29wIGl0c2VsZiBidXQgaW5zdGVhZCBzdXBwb3J0cyBhZGRpbmcg Y2hlY2tzIHN1Y2ggdGhhdCBpZiB3ZQ0KPiA+IGtub3cNCj4gPiA+IHRoYXQgd2UgaGF2ZSB0byBl eGl0IGluIHRoZSBjdXJyZW50IGl0ZXJhdGlvbiB0aGVuIHdlIGJyYW5jaCB0byBzY2FsYXIgY29k ZQ0KPiA+IHRvDQo+ID4gPiBhY3R1YWxseSBkbyB0aGUgZmluYWwgVkYgaXRlcmF0aW9ucyB3aGlj aCBoYW5kbGVzIGFsbCB0aGUgY29kZSBpbiA8YWN0aW9uPi4NCj4gPiA+DQo+ID4gPiBuaXRlcnMg YW5hbHlzaXMgYW5kIHRoZSBtYWpvcml0eSBvZiB0aGUgdmVjdG9yaXplciB3aXRoIGhhcmRjb2Rl ZA0KPiA+IHNpbmdsZV9leGl0DQo+ID4gPiBoYXZlIGJlZW4gdXBkYXRlZCB3aXRoIHRoZSB1c2Ug b2YgYSBuZXcgZnVuY3Rpb24gbm9ybWFsX2V4aXQgd2hpY2gNCj4gPiByZXR1cm5zIHRoZQ0KPiA+ ID4gbG9vcCdzIG5hdHVyYWwgZXhpdC4NCj4gPiA+DQo+ID4gPiBmb3Igbml0ZXJzIHRoZSBuYXR1 cmFsIGV4aXQgaXMgc3RpbGwgd2hhdCBkZXRlcm1pbmVzIHRoZSBvdmVyYWxsIGl0ZXJhdGlvbnMg YXMNCj4gPiA+IHRoYXQgaXMgdGhlIE8oaXRlcnMpIGZvciB0aGUgbG9vcC4NCj4gPiA+DQo+ID4g PiBGb3IgdGhlIHNjYWxhciBsb29wIHdlIGtub3cgdGhhdCB3aGF0ZXZlciBleGl0IHlvdSB0YWtl IHlvdSBoYXZlIHRvDQo+ID4gcGVyZm9ybSBhdA0KPiA+ID4gbW9zdCBWRiBpdGVyYXRpb25zLg0K PiA+ID4NCj4gPiA+IFdoZW4gdGhlIGxvb3AgaXMgcGVlbGVkIGR1cmluZyB0aGUgY29weWluZyBJ IGhhdmUgdG8gZ28gdGhyb3VnaCBncmVhdA0KPiA+IGxlbmd0aHMgdG8NCj4gPiA+IGtlZXAgdGhl IGRvbWluYXRvcnMgdXAgdG8gZGF0ZS4gIEFsbCBleGl0cyBmcm9tIHRoZSBmaXJzdCBsb29wIGFy ZSByZXdpcmVkDQo+IHRvDQo+ID4gdGhlDQo+ID4gPiBsb29wIGhlYWRlciBvZiB0aGUgc2Vjb25k IGxvb3AuICBCdXQgdGhpcyBjYW4gY2hhbmdlIHRoZSBpbW1lZGlhdGUNCj4gPiBkb21pbmF0b3Iu DQo+ID4NCj4gPiBOb3Qgc3VyZSBob3cgLSBpdCB3b3VsZCBwcm9iYWJseSBoZWxwIHRvIGtlZXAg dGhlIG9yaWdpbmFsIHNjYWxhciBsb29wDQo+ID4gYXMgdGhlIGVwaWxvZ3VlIGFuZCBpbnN0ZWFk IGVtaXQgdGhlIHZlY3RvciBsb29wIGFzIGNvcHkgb24gdGhhdCBsb29wcw0KPiA+IGVudHJ5IGVk Z2Ugc28gd2lyaW5nIHRoZSBhbHRlcm5hdGUgZXhpdHMgdG8gdGhhdCB2ZXJ5IHNhbWUgcGxhY2Ug aXMNCj4gPiB0cml2aWFsPw0KPiANCj4gSG1tIHllcyBmbGlwcGluZyB0aGUgbG9vcCB3aXJpbmcg d291bGQgc2ltcGxpZnkgdGhlIGRvbWluYXRvcnMuIEkgZGlkIGl0IHRoaXMNCj4gd2F5IGJlY2F1 c2UgdGhhdCdzIHRoZSBkaXJlY3Rpb24gbm9ybWFsIGVwaWxvZ3VlIHBlZWxpbmcgZGlkIHRvZGF5 LiAgQnV0DQo+IGxvb2tpbmcNCj4gYXQgdGhlIGNvZGUgdGhpcyBzaG91bGQgYmUgZWFzeSB0byBk by4NCj4gDQo+IEknbGwgYWxzbyBzdGFydCBvbiB0aGlzIG5vdy4NCj4gDQo+ID4NCj4gPiA+IFdl IGhhZCBzcG9rZW4gb24gSVJDIGFib3V0IHJlbW92aW5nIHRoZSBkb21pbmF0b3JzIHZhbGlkYXRp b24gY2FsbCBhdA0KPiB0aGUNCj4gPiBlbmQgb2YNCj4gPiA+IHNscGVlbF90cmVlX2R1cGxpY2F0 ZV9sb29wX3RvX2VkZ2VfY2ZnIGFuZCBsZWF2aW5nIGl0IHVwIHRvIGNmZyBjbGVhbnVwDQo+ID4g dG8NCj4gPiA+IHJlbW92ZSB0aGUgaW50ZXJtZWRpYXRlIGJsb2NrcyB0aGF0IGNhdXNlIHRoZSBk b21pbmF0b3JzIHRvIGZhaWwuDQo+ID4gPg0KPiA+ID4gSG93ZXZlciB0aGlzIHR1cm5lZCBvdXQg bm90IHRvIHdvcmsgYXMgY2ZnY2xlYW51cCBpdHNlbGYgcmVxdWlyZXMgdGhlDQo+ID4gZG9taW5h dG9ycw0KPiA+ID4gZ3JhcGguICAgU28gaXQncyBzb21ld2hhdCBhIGNoaWNrZW4gYW5kIGVnZy4g IFRvIHdvcmsgYXJvdW5kIHRoaXMgSSBhZGRlZA0KPiA+IHNvbWUNCj4gPiA+IHJ1bGVzIGZvciB3 aGVuIEkgdXBkYXRlIHdoYXQgZG9taW5hdG9yIGFuZCBhbHNvIHJlamVjdCB0aGUgZm9ybXMgSSBk b24ndA0KPiA+IHN1cHBvcnQNCj4gPiA+IGR1cmluZyB2ZWN0X2FuYWx5emVfbG9vcF9mb3JtLg0K PiA+ID4NCj4gPiA+IEkgaGF2ZSB0cmllZCB0byBzdHJ1Y3R1cmUgdGhlIHVwZGF0ZXMgdG8gbG9v cC1tYW5pcC5jYyBpbiBhIHdheSB0aGF0IGl0IGZpdHMNCj4gPiA+IHdpdGggdGhlIGN1cnJlbnQg Zmxvdy4gIEkgdGhpbmsgSSBoYXZlIGRvbmUgYSBkZWNlbnQgam9iLCBidXQgdGhlcmUgYXJlDQo+ IHRoaW5ncw0KPiA+IEkNCj4gPiA+IGNhbiBhbHNvIGRvIGRpZmZlcmVudGx5IGlmIHByZWZlcnJl ZCBhbmQgaGF2ZSBwb2ludGVkIHRoZW0gb3V0IGluDQo+ID4gY29tbWVudHMgaW4NCj4gPiA+IHRo ZSBzb3VyY2UuDQo+ID4gPg0KPiA+ID4gRm9yIHRoZSBsb29wIHBlZWxpbmcgd2UgcmV3cml0ZSB0 aGUgbG9vcCBmb3JtOg0KPiA+ID4NCj4gPiA+DQo+ID4gPiAgICAgICAgICAgICAgICAgICAgICBI ZWFkZXINCj4gPiA+ICAgICAgICAgICAgICAgICAgICAgICAtLS0NCj4gPiA+ICAgICAgICAgICAg ICAgICAgICAgICB8eHwNCj4gPiA+ICAgICAgICAgICAgICAgICAgICAgICAgMg0KPiA+ID4gICAg ICAgICAgICAgICAgICAgICAgICB8DQo+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgIHYNCj4g PiA+ICAgICAgICAgICAgICAgICAtLS0tLS0tMzwtLS0tLS0NCj4gPiA+ICAgICAgZWFybHkgZXhp dCB8ICAgICAgfCAgICAgIHwNCj4gPiA+ICAgICAgICAgICAgICAgICB2ICAgICAgdiAgICAgIHwg bGF0Y2gNCj4gPiA+ICAgICAgICAgICAgICAgICA3ICAgICAgNC0tLS0tPjYNCj4gPiA+ICAgICAg ICAgICAgICAgICB8ICAgICAgfA0KPiA+ID4gICAgICAgICAgICAgICAgIHwgICAgICB2DQo+ID4g PiAgICAgICAgICAgICAgICAgfCAgICAgIDgNCj4gPiA+ICAgICAgICAgICAgICAgICB8ICAgICAg fA0KPiA+ID4gICAgICAgICAgICAgICAgIHwgICAgICB2DQo+ID4gPiAgICAgICAgICAgICAgICAg LS0tLS0tPjUNCj4gPiA+DQo+ID4gPiBpbnRvDQo+ID4gPg0KPiA+ID4gICAgICAgICAgICAgICAg ICAgICAgSGVhZGVyDQo+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgLS0tDQo+ID4gPiAgICAg ICAgICAgICAgICAgICAgICAgfHh8DQo+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgIDINCj4g PiA+ICAgICAgICAgICAgICAgICAgICAgICAgfA0KPiA+ID4gICAgICAgICAgICAgICAgICAgICAg ICB2DQo+ID4gPiAgICAgICAgICAgICAgICAgLS0tLS0tLTM8LS0tLS0tDQo+ID4gPiAgICAgIGVh cmx5IGV4aXQgfCAgICAgIHwgICAgICB8DQo+ID4gPiAgICAgICAgICAgICAgICAgdiAgICAgIHYg ICAgICB8IGxhdGNoDQo+ID4gPiAgICAgICAgICAgICAgICAgNyAgICAgIDQtLS0tLT42DQo+ID4g PiAgICAgICAgICAgICAgICAgfCAgICAgIHwNCj4gPiA+ICAgICAgICAgICAgICAgICB8ICAgICAg dg0KPiA+ID4gICAgICAgICAgICAgICAgIHwgICAgICA4DQo+ID4gPiAgICAgICAgICAgICAgICAg fCAgICAgIHwNCj4gPiA+ICAgICAgICAgICAgICAgICB8ICAgICAgdg0KPiA+ID4gICAgICAgICAg ICAgICAgIHwgIE5ldyBIZWFkZXINCj4gPiA+ICAgICAgICAgICAgICAgICB8ICAgICAtLS0NCj4g PiA+ICAgICAgICAgICAgICAgICAtLS0tLT58eHwNCj4gPiA+ICAgICAgICAgICAgICAgICAgICAg ICAgOQ0KPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICB8DQo+ID4gPiAgICAgICAgICAgICAg ICAgICAgICAgIHYNCj4gPiA+ICAgICAgICAgICAgICAgICAtLS0tLS0xMDwtLS0tLQ0KPiA+ID4g ICAgICBlYXJseSBleGl0IHwgICAgICB8ICAgICAgfA0KPiA+ID4gICAgICAgICAgICAgICAgIHYg ICAgICB2ICAgICAgfCBsYXRjaA0KPiA+ID4gICAgICAgICAgICAgICAgIDE0ICAgICAxMS0tLS0+ MTMNCj4gPiA+ICAgICAgICAgICAgICAgICB8ICAgICAgfA0KPiA+ID4gICAgICAgICAgICAgICAg IHwgICAgICB2DQo+ID4gPiAgICAgICAgICAgICAgICAgfCAgICAgIDEyDQo+ID4gPiAgICAgICAg ICAgICAgICAgfCAgICAgIHwNCj4gPiA+ICAgICAgICAgICAgICAgICB8ICAgICAgdg0KPiA+ID4g ICAgICAgICAgICAgICAgIC0tLS0tLT4gNQ0KPiA+ID4NCj4gPiA+IFdoZW4gd2UgdmVjdG9yaXpl IHdlIG1vdmUgYW55IHN0YXRlbWVudCBub3QgcmVsYXRlZCB0byB0aGUgZWFybHkNCj4gYnJlYWsN Cj4gPiBpdHNlbGYgdG8NCj4gPiA+IHRoZSBCQiBhZnRlciB0aGUgZWFybHkgZXhpdCBhbmQgdXBk YXRlIGFsbCByZWZlcmVuY2VzIGFzIGFwcHJvcHJpYXRlLg0KPiA+ID4NCj4gPiA+IFRoaXMgbWVh bnMgdGhhdCB3ZSBjaGVjayBhdCB0aGUgc3RhcnQgb2YgaXRlcmF0aW9ucyB3aGV0aGVyIHdlIGFy ZSBnb2luZw0KPiB0bw0KPiA+IGV4aXQNCj4gPiA+IG9yIG5vdC4gIER1cmluZyB0aGUgYW5hbHlp cyBwaGFzZSB3ZSBjaGVjayB3aGV0aGVyIHdlIGFyZSBhbGxvd2VkIHRvIGRvDQo+ID4gdGhpcw0K PiA+ID4gbW92aW5nIG9mIHN0YXRlbWVudHMuICBBbHNvIG5vdGUgdGhhdCB3ZSBvbmx5IG1vdmUg dGhlIHZlY3Rvcg0KPiBzdGF0ZW1lbnRzDQo+ID4gYW5kDQo+ID4gPiBsZWF2ZSB0aGUgc2NhbGFy cyBhbG9uZS4NCj4gPiA+DQo+ID4gPiBDb2RlZ2VuOg0KPiA+ID4NCj4gPiA+IGZvciBlLmcuDQo+ ID4gPg0KPiA+ID4gI2RlZmluZSBOIDgwMw0KPiA+ID4gdW5zaWduZWQgdmVjdF9hW05dOw0KPiA+ ID4gdW5zaWduZWQgdmVjdF9iW05dOw0KPiA+ID4NCj4gPiA+IHVuc2lnbmVkIHRlc3Q0KHVuc2ln bmVkIHgpDQo+ID4gPiB7DQo+ID4gPiAgdW5zaWduZWQgcmV0ID0gMDsNCj4gPiA+ICBmb3IgKGlu dCBpID0gMDsgaSA8IE47IGkrKykNCj4gPiA+ICB7DQo+ID4gPiAgICB2ZWN0X2JbaV0gPSB4ICsg aTsNCj4gPiA+ICAgIGlmICh2ZWN0X2FbaV0gPiB4KQ0KPiA+ID4gICAgICBicmVhazsNCj4gPiA+ ICAgIHZlY3RfYVtpXSA9IHg7DQo+ID4gPg0KPiA+ID4gIH0NCj4gPiA+ICByZXR1cm4gcmV0Ow0K PiA+ID4gfQ0KPiA+ID4NCj4gPiA+IFdlIGdlbmVyYXRlIGZvciBORU9OOg0KPiA+ID4NCj4gPiA+ IHRlc3Q0Og0KPiA+ID4gICAgICAgICBhZHJwICAgIHgyLCAuTEMwDQo+ID4gPiAgICAgICAgIGFk cnAgICAgeDMsIC5MQU5DSE9SMA0KPiA+ID4gICAgICAgICBkdXAgICAgIHYyLjRzLCB3MA0KPiA+ ID4gICAgICAgICBhZGQgICAgIHgzLCB4MywgOmxvMTI6LkxBTkNIT1IwDQo+ID4gPiAgICAgICAg IG1vdmkgICAgdjQuNHMsIDB4NA0KPiA+ID4gICAgICAgICBhZGQgICAgIHg0LCB4MywgMzIxNg0K PiA+ID4gICAgICAgICBsZHIgICAgIHExLCBbeDIsICM6bG8xMjouTEMwXQ0KPiA+ID4gICAgICAg ICBtb3YgICAgIHgxLCAwDQo+ID4gPiAgICAgICAgIG1vdiAgICAgdzIsIDANCj4gPiA+ICAgICAg ICAgLnAyYWxpZ24gMywsNw0KPiA+ID4gLkwzOg0KPiA+ID4gICAgICAgICBsZHIgICAgIHEwLCBb eDMsIHgxXQ0KPiA+ID4gICAgICAgICBhZGQgICAgIHYzLjRzLCB2MS40cywgdjIuNHMNCj4gPiA+ ICAgICAgICAgYWRkICAgICB2MS40cywgdjEuNHMsIHY0LjRzDQo+ID4gPiAgICAgICAgIGNtaGkg ICAgdjAuNHMsIHYwLjRzLCB2Mi40cw0KPiA+ID4gICAgICAgICB1bWF4cCAgIHYwLjRzLCB2MC40 cywgdjAuNHMNCj4gPiA+ICAgICAgICAgZm1vdiAgICB4NSwgZDANCj4gPiA+ICAgICAgICAgY2Ju eiAgICB4NSwgLkw2DQo+ID4gPiAgICAgICAgIGFkZCAgICAgdzIsIHcyLCAxDQo+ID4gPiAgICAg ICAgIHN0ciAgICAgcTMsIFt4MSwgeDRdDQo+ID4gPiAgICAgICAgIHN0ciAgICAgcTIsIFt4Mywg eDFdDQo+ID4gPiAgICAgICAgIGFkZCAgICAgeDEsIHgxLCAxNg0KPiA+ID4gICAgICAgICBjbXAg ICAgIHcyLCAyMDANCj4gPiA+ICAgICAgICAgYm5lICAgICAuTDMNCj4gPiA+ICAgICAgICAgbW92 ICAgICB3NywgMw0KPiA+ID4gLkwyOg0KPiA+ID4gICAgICAgICBsc2wgICAgIHcyLCB3MiwgMg0K PiA+ID4gICAgICAgICBhZGQgICAgIHg1LCB4MywgMzIxNg0KPiA+ID4gICAgICAgICBhZGQgICAg IHc2LCB3MiwgdzANCj4gPiA+ICAgICAgICAgc3h0dyAgICB4NCwgdzINCj4gPiA+ICAgICAgICAg bGRyICAgICB3MSwgW3gzLCB4NCwgbHNsIDJdDQo+ID4gPiAgICAgICAgIHN0ciAgICAgdzYsIFt4 NSwgeDQsIGxzbCAyXQ0KPiA+ID4gICAgICAgICBjbXAgICAgIHcwLCB3MQ0KPiA+ID4gICAgICAg ICBiY2MgICAgIC5MNA0KPiA+ID4gICAgICAgICBhZGQgICAgIHcxLCB3MiwgMQ0KPiA+ID4gICAg ICAgICBzdHIgICAgIHcwLCBbeDMsIHg0LCBsc2wgMl0NCj4gPiA+ICAgICAgICAgYWRkICAgICB3 NiwgdzEsIHcwDQo+ID4gPiAgICAgICAgIHN4dHcgICAgeDEsIHcxDQo+ID4gPiAgICAgICAgIGxk ciAgICAgdzQsIFt4MywgeDEsIGxzbCAyXQ0KPiA+ID4gICAgICAgICBzdHIgICAgIHc2LCBbeDUs IHgxLCBsc2wgMl0NCj4gPiA+ICAgICAgICAgY21wICAgICB3MCwgdzQNCj4gPiA+ICAgICAgICAg YmNjICAgICAuTDQNCj4gPiA+ICAgICAgICAgYWRkICAgICB3NCwgdzIsIDINCj4gPiA+ICAgICAg ICAgc3RyICAgICB3MCwgW3gzLCB4MSwgbHNsIDJdDQo+ID4gPiAgICAgICAgIHN4dHcgICAgeDEs IHc0DQo+ID4gPiAgICAgICAgIGFkZCAgICAgdzYsIHcxLCB3MA0KPiA+ID4gICAgICAgICBsZHIg ICAgIHc0LCBbeDMsIHgxLCBsc2wgMl0NCj4gPiA+ICAgICAgICAgc3RyICAgICB3NiwgW3g1LCB4 MSwgbHNsIDJdDQo+ID4gPiAgICAgICAgIGNtcCAgICAgdzAsIHc0DQo+ID4gPiAgICAgICAgIGJj YyAgICAgLkw0DQo+ID4gPiAgICAgICAgIHN0ciAgICAgdzAsIFt4MywgeDEsIGxzbCAyXQ0KPiA+ ID4gICAgICAgICBhZGQgICAgIHcyLCB3MiwgMw0KPiA+ID4gICAgICAgICBjbXAgICAgIHc3LCAz DQo+ID4gPiAgICAgICAgIGJlcSAgICAgLkw0DQo+ID4gPiAgICAgICAgIHN4dHcgICAgeDEsIHcy DQo+ID4gPiAgICAgICAgIGFkZCAgICAgdzIsIHcyLCB3MA0KPiA+ID4gICAgICAgICBsZHIgICAg IHc0LCBbeDMsIHgxLCBsc2wgMl0NCj4gPiA+ICAgICAgICAgc3RyICAgICB3MiwgW3g1LCB4MSwg bHNsIDJdDQo+ID4gPiAgICAgICAgIGNtcCAgICAgdzAsIHc0DQo+ID4gPiAgICAgICAgIGJjYyAg ICAgLkw0DQo+ID4gPiAgICAgICAgIHN0ciAgICAgdzAsIFt4MywgeDEsIGxzbCAyXQ0KPiA+ID4g Lkw0Og0KPiA+ID4gICAgICAgICBtb3YgICAgIHcwLCAwDQo+ID4gPiAgICAgICAgIHJldA0KPiA+ ID4gICAgICAgICAucDJhbGlnbiAyLCwzDQo+ID4gPiAuTDY6DQo+ID4gPiAgICAgICAgIG1vdiAg ICAgdzcsIDQNCj4gPiA+ICAgICAgICAgYiAgICAgICAuTDINCj4gPiA+DQo+ID4gPiBhbmQgZm9y IFNWRToNCj4gPiA+DQo+ID4gPiB0ZXN0NDoNCj4gPiA+ICAgICAgICAgYWRycCAgICB4MiwgLkxB TkNIT1IwDQo+ID4gPiAgICAgICAgIGFkZCAgICAgeDIsIHgyLCA6bG8xMjouTEFOQ0hPUjANCj4g PiA+ICAgICAgICAgYWRkICAgICB4NSwgeDIsIDMyMTYNCj4gPiA+ICAgICAgICAgbW92ICAgICB4 MywgMA0KPiA+ID4gICAgICAgICBtb3YgICAgIHcxLCAwDQo+ID4gPiAgICAgICAgIGNudHcgICAg eDQNCj4gPiA+ICAgICAgICAgbW92ICAgICB6MS5zLCB3MA0KPiA+ID4gICAgICAgICBpbmRleCAg IHowLnMsICMwLCAjMQ0KPiA+ID4gICAgICAgICBwdHJ1ZSAgIHAxLmIsIGFsbA0KPiA+ID4gICAg ICAgICBwdHJ1ZSAgIHAwLnMsIGFsbA0KPiA+ID4gICAgICAgICAucDJhbGlnbiAzLCw3DQo+ID4g PiAuTDM6DQo+ID4gPiAgICAgICAgIGxkMXcgICAgejIucywgcDEveiwgW3gyLCB4MywgbHNsIDJd DQo+ID4gPiAgICAgICAgIGFkZCAgICAgejMucywgejAucywgejEucw0KPiA+ID4gICAgICAgICBj bXBsbyAgIHAyLnMsIHAwL3osIHoxLnMsIHoyLnMNCj4gPiA+ICAgICAgICAgYi5hbnkgICAuTDIN Cj4gPiA+ICAgICAgICAgc3QxdyAgICB6My5zLCBwMSwgW3g1LCB4MywgbHNsIDJdDQo+ID4gPiAg ICAgICAgIGFkZCAgICAgdzEsIHcxLCAxDQo+ID4gPiAgICAgICAgIHN0MXcgICAgejEucywgcDEs IFt4MiwgeDMsIGxzbCAyXQ0KPiA+ID4gICAgICAgICBhZGQgICAgIHgzLCB4MywgeDQNCj4gPiA+ ICAgICAgICAgaW5jdyAgICB6MC5zDQo+ID4gPiAgICAgICAgIGNtcCAgICAgdzMsIDgwMw0KPiA+ ID4gICAgICAgICBibHMgICAgIC5MMw0KPiA+ID4gLkw1Og0KPiA+ID4gICAgICAgICBtb3YgICAg IHcwLCAwDQo+ID4gPiAgICAgICAgIHJldA0KPiA+ID4gICAgICAgICAucDJhbGlnbiAyLCwzDQo+ ID4gPiAuTDI6DQo+ID4gPiAgICAgICAgIGNudHcgICAgeDUNCj4gPiA+ICAgICAgICAgbXVsICAg ICB3MSwgdzEsIHc1DQo+ID4gPiAgICAgICAgIGNieiAgICAgdzUsIC5MNQ0KPiA+ID4gICAgICAg ICBzeHR3ICAgIHgxLCB3MQ0KPiA+ID4gICAgICAgICBzdWIgICAgIHc1LCB3NSwgIzENCj4gPiA+ ICAgICAgICAgYWRkICAgICB4NSwgeDUsIHgxDQo+ID4gPiAgICAgICAgIGFkZCAgICAgeDYsIHgy LCAzMjE2DQo+ID4gPiAgICAgICAgIGIgICAgICAgLkw2DQo+ID4gPiAgICAgICAgIC5wMmFsaWdu IDIsLDMNCj4gPiA+IC5MMTQ6DQo+ID4gPiAgICAgICAgIHN0ciAgICAgdzAsIFt4MiwgeDEsIGxz bCAyXQ0KPiA+ID4gICAgICAgICBjbXAgICAgIHgxLCB4NQ0KPiA+ID4gICAgICAgICBiZXEgICAg IC5MNQ0KPiA+ID4gICAgICAgICBtb3YgICAgIHgxLCB4NA0KPiA+ID4gLkw2Og0KPiA+ID4gICAg ICAgICBsZHIgICAgIHczLCBbeDIsIHgxLCBsc2wgMl0NCj4gPiA+ICAgICAgICAgYWRkICAgICB3 NCwgdzAsIHcxDQo+ID4gPiAgICAgICAgIHN0ciAgICAgdzQsIFt4NiwgeDEsIGxzbCAyXQ0KPiA+ ID4gICAgICAgICBhZGQgICAgIHg0LCB4MSwgMQ0KPiA+ID4gICAgICAgICBjbXAgICAgIHcwLCB3 Mw0KPiA+ID4gICAgICAgICBiY3MgICAgIC5MMTQNCj4gPiA+ICAgICAgICAgbW92ICAgICB3MCwg MA0KPiA+ID4gICAgICAgICByZXQNCj4gPiA+DQo+ID4gPiBPbiB0aGUgd29ya2xvYWRzIHRoaXMg d29yayBpcyBiYXNlZCBvbiB3ZSBzZWUgYmV0d2VlbiAyLTN4DQo+IHBlcmZvcm1hbmNlDQo+ID4g dXBsaWZ0DQo+ID4gPiB1c2luZyB0aGlzIHBhdGNoLg0KPiA+ID4NCj4gPiA+IE91dHN0YW5kaW5n IGlzc3VlczoNCj4gPiA+ICAtIFRoZSBwYXRjaCBpcyBmdWxseSBmdW5jdGlvbmFsIGJ1dCBoYXMg dHdvIHRoaW5ncyBJIHdvbmRlciBhYm91dA0KPiA+ID4gICAgKiBJbiB2ZWN0X3RyYW5zZm9ybV9l YXJseV9icmVhayBzaG91bGQgSSBqdXN0IHJlZmFjdG9yDQo+ID4gdmVjdG9yaXphYmxlX2NvbXBh cmlzb24NCj4gPiA+ICAgICAgYW5kIHVzZSBpdCB0byBnZW5lcmF0ZSB0aGUgY29uZGl0aW9uIGJv ZHk/ICBUaGF0IHdvdWxkIGFsc28gZ2V0IHRoZQ0KPiA+IGNvc3RpbmcuDQo+ID4NCj4gPiBJJ20g bG9va2luZyBhdCB2ZWN0b3JpemFibGVfZWFybHlfZXhpdCBhbmQgdmFsaWRhdGVfZWFybHlfZXhp dF9zdG10cw0KPiA+IGFuZCBJIHRoaW5rIHRoYXQgdGhpcyBzaG91bGQgYmUgbW9zdGx5IGRvbmUg YXMgcGFydCBvZiBkZXBlbmRlbmNlDQo+ID4gYW5hbHlzaXMgKGJlY2F1c2UgdGhhdCdzIHdoYXQg aXQgaXMpIHdoaWNoIHNob3VsZCBhbHNvIHJlbW92ZSB0aGUNCj4gPiByZXF1aXJlbWVudCBvZiBv bmx5IGhhbmRsaW5nIGRlY2wtYmFzZWQgYWNjZXNzZXM/DQo+IA0KPiBUaGF0IGlzIGZhaXIgZW5v dWdoLCBkbyB5b3UgaGF2ZSBhIHNwZWNpZmljIHNwb3QgaW4gbWluZCB3aGVyZSB5b3UnZA0KPiBw cmVmZXIgbWUgdG8gc2xvdCBpdCBpbnRvPw0KPiANCj4gPg0KPiA+IEFzIGZvciB2ZWN0X3RyYW5z Zm9ybV9lYXJseV9icmVhaywgc3VyZS4gIEkgZmVhciB0aGF0IHNpbmNlIHlvdQ0KPiA+IHRyYW5z Zm9ybSBpZiAoXzEgPiBfMikgdG8gc29tZSBfMyA9IF8xID4gXzI7IHVzZShfMykgdGhhdCB5b3Ug bmVlZA0KPiA+IHRvIGV4cG9zZSB0aGlzIHRvIHRoZSBib29sIHBhdHRlcm4gaGFuZGxpbmcgbWFj aGluZXJ5IHNvbWVob3cuDQo+ID4gSSBjYW4gc2VlIHRoYXQgbW92aW5nIHN0bXRzIGFyb3VuZCBh bmQgZG9pbmcgaXQgdGhlIHdheSB5b3UgZG8NCj4gPiBjb2RlLWdlbmVyYXRpb24gd2lzZSBpcyBl YXNpZXN0Lg0KPiA+DQo+ID4gSG93IGRvZXMgdGhpcyB3b3JrIHdpdGggU0xQIGJ0dz8gIFlvdSBk b24ndCB0b3VjaCB0cmVlLXZlY3Qtc2xwLmNjIGF0IGFsbA0KPiA+IGJ1dCBub3cgdGhhdCB3ZSBo YXZlIG11bHRpcGxlIEJCcyB0aGVyZSdzIHRoZSBpc3N1ZSBvZiBzcGxpdHRpbmcNCj4gPiBjaGls ZHJlbiBhY3Jvc3MgZGlmZmVyZW50IEJCcyAtIHRoZXJlJ3Mgb25seQ0KPiA+DQo+ID4gICAgICAg ICAgIGlmICgocGhpX3AgfHwgZ2ltcGxlX2NvdWxkX3RyYXBfcCAoc3RtdF9pbmZvLT5zdG10KSkN Cj4gPiAgICAgICAgICAgICAgICYmIChnaW1wbGVfYmIgKGZpcnN0X3N0bXRfaW5mby0+c3RtdCkN Cj4gPiAgICAgICAgICAgICAgICAgICAhPSBnaW1wbGVfYmIgKHN0bXRfaW5mby0+c3RtdCkpKQ0K PiA+ICAgICAgICAgICAgIHsNCj4gPiAgICAgICAgICAgICAgIGlmIChkdW1wX2VuYWJsZWRfcCAo KSkNCj4gPiAgICAgICAgICAgICAgICAgZHVtcF9wcmludGZfbG9jIChNU0dfTUlTU0VEX09QVElN SVpBVElPTiwgdmVjdF9sb2NhdGlvbiwNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiQnVpbGQgU0xQIGZhaWxlZDogZGlmZmVyZW50IEJCIGZvciBQSEkgIg0KPiA+ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvciBwb3NzaWJseSB0cmFwcGluZyBvcGVyYXRp b24gaW4gJUciLA0KPiA+IHN0bXQpOw0KPiA+ICAgICAgICAgICAgICAgLyogTWlzbWF0Y2guICAq Lw0KPiA+ICAgICAgICAgICAgICAgY29udGludWU7DQo+ID4gICAgICAgICAgICAgfQ0KPiA+DQo+ ID4gcmlnaHQgbm93IGFuZCB0aGUgY29kZSBtb3Rpb24geW91IGFwcGx5IGFsc28gbWlnaHQgYnJl YWsgdGhlIGFzc3VtcHRpb25zDQo+ID4gb2YgdGhlIGRlcGVuZGVuY2UgYW5hbHlzaXMgY29kZS4g IEkgc3VwcG9zZSB0aGF0IFNMUGluZyB0aGUgZWFybHkgZXhpdA0KPiA+IGlzbid0IHN1cHBvcnRl ZCwgYWthDQo+ID4NCj4gPiAgZm9yICg7OykNCj4gPiAgICB7DQo+ID4gICAgICAgaWYgKGFbMipp XSA+IHgpIGJyZWFrOw0KPiA+ICAgICAgIGlmIChhWzIqaSArIDEgPiB4KSBicmVhazsNCj4gPiAu Li4NCj4gPiAgICB9DQo+ID4NCj4gPiBvcg0KPiA+ICAgIF8xID0gYVsyKmldID4geCB8IGFbMipp ICsgMSA+IHg7DQo+ID4gICAgaWYgKF8xKSBicmVhazsNCj4gPg0KPiA+ID8NCj4gDQo+IEluZGVl ZCwgU0xQIHRyYXBzIHdpdGggdGhlIGZhaWx1cmUgbWVzc2FnZSB5b3UgaGlnaGxpZ2h0ZWQgYWJv dmUuDQo+IEF0IHRoZSBtb21lbnQgSSBhZGRlZCBhIHJlc3RyaWN0aW9uIHRvIGEgc2luZ2xlIGV4 aXQsIHRoaXMgc3RvcHMgaXQgZnJvbQ0KPiBnZXR0aW5nIHRoYXQgZmFyLiAgKFRoaXMgbGltaXRh dGlvbiBpcyBiZWNhdXNlIHRoZSBjb2RlIG1vdGlvbiBvdmVyIG11bHRpcGxlDQo+IGV4aXRzIGJl Y29tZXMgaW50ZXJlc3RpbmcsIGl0J3Mgbm90IHNwZWNpZmljYWxseSBmb3IgU0xQLCBhbmQgaWYg U0xQIGRpZCB3b3JrIEkNCj4gd291bGQgbW92ZSB0aGUgY2hlY2sgZHVyaW5nIFNMUCBidWlsZCwg b3IgYWZ0ZXIpLg0KPiANCj4gQXNpZGUgZnJvbSB0aGF0LCBkaWZmZXJlbnQgcGFydHMgb2Ygc2xw IGJ1aWxkIGZhaWwgd2l0aCBlLmcuDQo+IA0KPiBCdWlsZCBTTFAgZmFpbGVkOiBkaWZmZXJlbnQg b3BlcmF0aW9uIGluIHN0bXQgXzExID0gXzQgKiB4XzE3KEQpOw0KPiANCj4gKFRoaXMgaXMgdGVz dGNhc2UgNiBpbiBteSBsaXN0IG9mIHRlc3QpLg0KPiANCj4gSHlicmlkIGRvZXMgd29yayB0aG91 Z2gsIGlmIHRoZSBwYXJ0IHdpdGggdGhlIGNvbmRpdGlvbmFsIGlzIGluIHRoZSBub24tU0xQDQo+ IHBhcnQuDQo+IA0KPiA+DQo+ID4gPiAgICAqIFRoZSB0ZXN0Y2FzZSB2ZWN0LWVhcmx5LWJyZWFr XzIuYyBzaG93cyBvbmUgZm9ybSB0aGF0IGN1cnJlbnRseQ0KPiA+IGRvZXNuJ3Qgd29yaw0KPiA+ ID4gICAgICBhbmQgY3Jhc2hlcy4gIFRoZSByZWFzb24gaXMgdGhhdCB0aGVyZSdzIGEgbWlzbWF0 Y2ggYmV0d2VlbiB0aGUgdHlwZXMNCj4gPiByZXF1aXJlZA0KPiA+ID4gICAgICB0byB2ZWN0b3Jp emUgdGhpcy4gIFRoZSB2ZWN0b3IgbG9hZHMgY2F1c2UgbXVsdGlwbGUgc3RhdGVtZW50cyB0byBi ZQ0KPiA+IGdlbmVyYXRlZA0KPiA+ID4gICAgICBhbmQgdGh1cyByZXF1aXJlIG11bHRpcGxlIGNv bXBhcmlzb25zLiAgSW4gdGhpcyBjYXNlIDggb2YgdGhlbS4NCj4gSG93ZXZlcg0KPiA+ID4gICAg ICB3aGVuIGRldGVybWluaW5nIG5jb3BpZXMgdGhlIGVhcmx5IGV4aXQgdXNlcyBhIGJvb2xlYW4g bW9kZSBhbmQgc28NCj4gPiBuY29waWVzDQo+ID4gPiAgICAgIGlzIGFsd2F5cyAxLiAgSWYgSSBm b3JjZSBpdCBpbnN0ZWFkIHRvIGRldGVybWluZSBuY29waWVzIGJhc2VkIG9uIGl0J3MNCj4gPiA+ ICAgICAgb3BlcmFuZHMgaW5zdGVhZCBvZiB0aGUgZmluYWwgdHlwZSB0aGVuIHdlIGdldCB0aGUg Y29uZGl0b25hbA0KPiB2ZWN0b3JpemVkDQo+ID4gPiAgICAgIGJ1dCB0aGUgaXQgaGFzIGEgbWlz bWF0Y2ggY29tcGFyaW5nIGludGVnZXIgdmVjdG9ycyB3aXRoIGJvb2xlYW4uDQo+ID4gPiAgICAg IEl0IGZlZWxzIGxpa2UgSSBuZWVkIHNvbWUga2luZCBvZiBib29sZWFuIHJlZHVjdGlvbnMgaGVy ZS4uICBTaG91bGQgSSBqdXN0DQo+ID4gPiAgICAgIHJlamVjdCB0aGlzIGZvcm0gZm9yIG5vdz8N Cj4gPg0KPiA+IFRoYXQncyBwcm9iYWJseSB0aGUgYm9vbCBwYXR0ZXJuIGhhbmRsaW5nIEkgaGlu dGVkIGF0IGFib3ZlLg0KPiA+IEJvb2xzL2NvbmRpdGlvbnMgYXJlIGF3a3dhcmQsIG1heWJlIHlv dSBzaG91bGQgaGFuZGxlIHRoZQ0KPiA+IEdJTVBMRV9DT05EcyBhcyBwYXR0ZXJucyBjb21wdXRp bmcgdGhlIGFjdHVhbCBjb25kaXRpb24gYXMgbWFzaw0KPiA+IGZlZCBpbnRvIGEgZHVtbXkgLklG Tl9DT05TVU1FX01BU0sgc3RtdD8NCj4gDQo+IEluZGVlZCwgdGhvdWdoIG9uZSBhZGRpdGlvbmFs IGRpZmZpY3VsdHkgaGVyZSBpcyB0aGF0IGluIHRoZSBleGFtcGxlIGZvcg0KPiBpbnN0YW5jZQ0K PiB0aGUgbnVtYmVyIG9mIGNvcGllcyBpcyBuZWVkZWQsIGUuZy4gaWYgeW91IGhhdmUgdG8gZG8g d2lkZW5pbmcgYmVmb3JlIHRoZQ0KPiBjb21wYXJlLg0KPiBUaGlzIG1lYW5zIHRoYXQgeW91IGhh dmUgX2hpLCBfbG8gc3BsaXRzLiBTbyB1bmxlc3MgeW91IHNob3J0IGNpcmN1aXQgdGhpcyBjYW4N Cj4gbGVhZCB0bw0KPiBxdWl0ZSBhIG51bWJlciBvZiBvcGVyYXRpb25zIGJlZm9yZSB5b3UgZXhp dC4NCj4gDQo+IEkgY291bGQgYWxzbyBnZW5lcmF0ZSBhbiBPUiByZWR1Y3Rpb24gaW4gdGhpcyBj YXNlIGluc3RlYWQgb2YgbmVlZGluZyBhIG5ldw0KPiBJRk4sIGJ1dA0KPiBJJ2xsIGdvIHdpdGgg d2hhdGV2ZXIgeW91IHByZWZlci9yZWNvbW1lbmQuDQo+IA0KPiA+DQo+ID4gPiBCb290c3RyYXBw ZWQgUmVndGVzdGVkIG9uIGFhcmNoNjQtbm9uZS1saW51eC1nbnUsIHg4Nl82NC1wYy1saW51eC0N Cj4gZ251DQo+ID4gYW5kIGlzc3Vlcw0KPiA+ID4gbWVudGlvbmVkIGFib3ZlLg0KPiA+ID4NCj4g PiA+IE9LIGVub3VnaCBkZXNpZ24gYW5kIGltcGxlbWVudGF0aW9uIGZvciBHQ0MgMTM/DQo+ID4N Cj4gPiBOb3Qgc3VyZSwgSSBkaWRuJ3QgeWV0IGxvb2sgdGhvcm91Z2hseSBhdCB0aGUgcGF0Y2gg aXRzZWxmLg0KPiANCj4gSSdsbCBsaWdodCBzb21lIGNhbmRsZXMg8J+Yig0KPiANCj4gVGhhbmtz IGZvciB0YWtpbmcgYSBsb29rLA0KPiBUYW1hcg0KPiANCj4gPg0KPiA+IFJpY2hhcmQuDQo+ID4N Cj4gPiA+IFRoYW5rcywNCj4gPiA+IFRhbWFyDQo+ID4gPg0KPiA+ID4gZ2NjL0NoYW5nZUxvZzoN Cj4gPiA+DQo+ID4gPiAJKiBjZmdsb29wLmNjIChub3JtYWxfZXhpdCk6IE5ldy4NCj4gPiA+IAkq IGNmZ2xvb3AuaCAobm9ybWFsX2V4aXQpOiBOZXcuDQo+ID4gPiAJKiBkb2MvbG9vcC50ZXhpIChu b3JtYWxfZXhpdCk6IERvY3VtZW50Lg0KPiA+ID4gCSogZG9jL3NvdXJjZWJ1aWxkLnRleGkgKHZl Y3RfZWFybHlfYnJlYWspOiBEb2N1bWVudC4NCj4gPiA+IAkqIHRyZWUtc2NhbGFyLWV2b2x1dGlv bi5jYyAoZ2V0X2xvb3BfZXhpdF9jb25kaXRpb24pOiBSZWZhY3Rvci4NCj4gPiA+IAkoZ2V0X2Vk Z2VfY29uZGl0aW9uKTogTmV3Lg0KPiA+ID4gCSogdHJlZS1zY2FsYXItZXZvbHV0aW9uLmggKGdl dF9lZGdlX2NvbmRpdGlvbik6IG5ldy4NCj4gPiA+IAkqIHRyZWUtdmVjdC1kYXRhLXJlZnMuY2Mg KHZlY3RfZW5oYW5jZV9kYXRhX3JlZnNfYWxpZ25tZW50KTogR2V0DQo+ID4gbWFpbg0KPiA+ID4g CWV4aXQgZHVyaW5nIHBlZWxpbmcgY2hlY2suDQo+ID4gPiAJKiB0cmVlLXZlY3QtbG9vcC1tYW5p cC5jYw0KPiA+ID4gCShzbHBlZWxfdHJlZV9kdXBsaWNhdGVfbG9vcF90b19lZGdlX2NmZyk6IFN1 cHBvcnQgY29weWluZyBDRkdzDQo+ID4gd2l0aA0KPiA+ID4gCW11bHRpcGxlIGV4aXRzIGFuZCBw bGFjZSBhdCB0aGUgZW5kLg0KPiA+ID4gCSh2ZWN0X3VwZGF0ZV9pdnNfYWZ0ZXJfdmVjdG9yaXpl cik6IFNraXAgb24gZWFybHkgZXhpdHMuDQo+ID4gPiAJKHZlY3RfdXBkYXRlX2l2c19hZnRlcl9l YXJseV9icmVhayk6IE5ldy4NCj4gPiA+IAkoZ2ltcGxlX2ZpbmRfbGFzdF9tZW1fdXNlKTogTmV3 Lg0KPiA+ID4gCShzbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3JfbG9vcHMsDQo+ID4gc2xwZWVs X3VwZGF0ZV9waGlfbm9kZXNfZm9yX2d1YXJkMiwNCj4gPiA+IAlzbHBlZWxfdXBkYXRlX3BoaV9u b2Rlc19mb3JfbGNzc2EsDQo+ID4gdmVjdF9nZW5fdmVjdG9yX2xvb3Bfbml0ZXJzX211bHRfdmYs DQo+ID4gPiAJc2xwZWVsX2Nhbl9kdXBsaWNhdGVfbG9vcF9wLA0KPiA+IHZlY3Rfc2V0X2xvb3Bf Y29uZGl0aW9uX3BhcnRpYWxfdmVjdG9ycyk6DQo+ID4gPiAJVXBkYXRlIGZvciBtdWx0aXBsZSBl eGl0cy4NCj4gPiA+IAkodmVjdF9zZXRfbG9vcF9jb25kaXRpb24sIHZlY3Rfc2V0X2xvb3BfY29u ZGl0aW9uX25vcm1hbCk6DQo+ID4gVXBkYXRlDQo+ID4gPiAJY29uZGl0aW9uIGZvciBlYXJseSBl eGl0cy4NCj4gPiA+IAkodmVjdF9kb19wZWVsaW5nKTogUGVlbCBmb3IgZWFybHkgYnJlYWtzLg0K PiA+ID4gCSogdHJlZS12ZWN0LWxvb3AuY2MgKHZlY3RfZ2V0X2xvb3Bfbml0ZXJzKTogQW5hbHl6 ZSBhbmQgcmV0dXJuIGFsbA0KPiA+ID4gCWV4aXRzLg0KPiA+ID4gCSh2ZWN0X2FuYWx5emVfbG9v cF9mb3JtLCB2ZWN0X2NyZWF0ZV9sb29wX3ZpbmZvKTogQW5hbHl6ZSBhbGwNCj4gPiBjb25kcy4N Cj4gPiA+IAkodmVjdF9kZXRlcm1pbmVfcGFydGlhbF92ZWN0b3JzX2FuZF9wZWVsaW5nKTogU3Vw b3J0IG11bHRpcGxlDQo+ID4gZXhpdHMgYnkNCj4gPiA+IAlwZWVpbmcuDQo+ID4gPiAJKHZlY3Rf YW5hbHl6ZV9sb29wKTogQWRkIGFuYXlzaXMgZm9yIG11bHRpcGxlIGV4aXRzLg0KPiA+ID4gCSht b3ZlX2Vhcmx5X2V4aXRfc3RtdHMsIHZlY3RfdHJhbnNmb3JtX2Vhcmx5X2JyZWFrLA0KPiA+ID4g CXZhbGlkYXRlX2Vhcmx5X2V4aXRfc3RtdHMsIHZlY3Rvcml6YWJsZV9lYXJseV9leGl0KTogTmV3 Lg0KPiA+ID4gCSh2ZWN0b3JpemFibGVfbGl2ZV9vcGVyYXRpb24pOiBJZ25vcmUgZWFybHkgYnJl YWsgc3RhdGVtZW50cy4NCj4gPiA+IAkoc2NhbGVfcHJvZmlsZV9mb3JfdmVjdF9sb29wLCB2ZWN0 X3RyYW5zZm9ybV9sb29wKTogU3VwcG9ydA0KPiA+IG11bHRpcGxlDQo+ID4gPiAJZXhpdHMuDQo+ ID4gPiAJKiB0cmVlLXZlY3Qtc3RtdHMuY2MgKHZlY3Rfc3RtdF9yZWxldmFudF9wKTogQW5hbHl6 ZSBlYXJseSBicmVha3MuDQo+ID4gPiAJKHByZXBhcmVfdmVjX21hc2spOiBFeHBvc2UuDQo+ID4g PiAJKHZlY3RfYW5hbHl6ZV9zdG10LCB2ZWN0X3RyYW5zZm9ybV9zdG10LCB2ZWN0X2lzX3NpbXBs ZV91c2UsDQo+ID4gPiAJdmVjdF9nZXRfdmVjdG9yX3R5cGVzX2Zvcl9zdG10KTogU3VwcG9ydCBs b29wIGNvbnRyb2wvZWFybHkgZXhpdHMuDQo+ID4gPiAJKiB0cmVlLXZlY3Rvcml6ZXIuY2MgKHBh c3NfdmVjdG9yaXplOjpleGVjdXRlKTogUmVjb3JkIGFsbCBleGl0cyBmb3INCj4gPiA+IAlSUE8u DQo+ID4gPiAJKiB0cmVlLXZlY3Rvcml6ZXIuaCAoZW51bSB2ZWN0X2RlZl90eXBlKTogQWRkIHZl Y3RfZWFybHlfZXhpdF9kZWYuDQo+ID4gPiAJKHNscGVlbF9jYW5fZHVwbGljYXRlX2xvb3BfcCk6 IENoYW5nZSBsb29wIHRvIGxvb3BfdmVjX2luZm8uDQo+ID4gPiAJKHN0cnVjdCB2ZWN0X2xvb3Bf Zm9ybV9pbmZvKTogQWRkIGxvb3AgY29uZGl0aW9ucy4NCj4gPiA+IAkoTE9PUF9WSU5GT19FQVJM WV9CUkVBS1MsIHZlY3RfdHJhbnNmb3JtX2Vhcmx5X2JyZWFrLA0KPiA+ID4gCXZlY3Rvcml6YWJs ZV9lYXJseV9leGl0KTogTmV3Lg0KPiA+ID4gCShwcmVwYXJlX3ZlY19tYXNrKTogTmV3Lg0KPiA+ ID4gCSh2ZWNfaW5mbyk6IEFkZCBlYXJseV9icmVha3MuDQo+ID4gPiAJKGxvb3BfdmVjX2luZm9f Zm9yX2xvb3ApOiBNYWtlIGxvb3AgY29uc3QuDQo+ID4gPg0KPiA+ID4gZ2NjL3Rlc3RzdWl0ZS9D aGFuZ2VMb2c6DQo+ID4gPg0KPiA+ID4gCSogbGliL3RhcmdldC1zdXBwb3J0cy5leHAgKHZlY3Rf ZWFybHlfYnJlYWspOiBOZXcuDQo+ID4gPiAJKiBnKysuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFr XzEuY2M6IE5ldyB0ZXN0Lg0KPiA+ID4gCSogZysrLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18y LmNjOiBOZXcgdGVzdC4NCj4gPiA+IAkqIGcrKy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMy5j YzogTmV3IHRlc3QuDQo+ID4gPiAJKiBnY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl8x LmM6IE5ldyB0ZXN0Lg0KPiA+ID4gCSogZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5f MTAuYzogTmV3IHRlc3QuDQo+ID4gPiAJKiBnY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1 bl8yLmM6IE5ldyB0ZXN0Lg0KPiA+ID4gCSogZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1y dW5fMy5jOiBOZXcgdGVzdC4NCj4gPiA+IAkqIGdjYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWst cnVuXzQuYzogTmV3IHRlc3QuDQo+ID4gPiAJKiBnY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFr LXJ1bl81LmM6IE5ldyB0ZXN0Lg0KPiA+ID4gCSogZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVh ay1ydW5fNi5jOiBOZXcgdGVzdC4NCj4gPiA+IAkqIGdjYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJl YWstcnVuXzcuYzogTmV3IHRlc3QuDQo+ID4gPiAJKiBnY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJy ZWFrLXJ1bl84LmM6IE5ldyB0ZXN0Lg0KPiA+ID4gCSogZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1i cmVhay1ydW5fOS5jOiBOZXcgdGVzdC4NCj4gPiA+IAkqIGdjYy5kZy92ZWN0L3ZlY3QtZWFybHkt YnJlYWstdGVtcGxhdGVfMS5jOiBOZXcgdGVzdC4NCj4gPiA+IAkqIGdjYy5kZy92ZWN0L3ZlY3Qt ZWFybHktYnJlYWstdGVtcGxhdGVfMi5jOiBOZXcgdGVzdC4NCj4gPiA+IAkqIGdjYy5kZy92ZWN0 L3ZlY3QtZWFybHktYnJlYWtfMS5jOiBOZXcgdGVzdC4NCj4gPiA+IAkqIGdjYy5kZy92ZWN0L3Zl Y3QtZWFybHktYnJlYWtfMTAuYzogTmV3IHRlc3QuDQo+ID4gPiAJKiBnY2MuZGcvdmVjdC92ZWN0 LWVhcmx5LWJyZWFrXzExLmM6IE5ldyB0ZXN0Lg0KPiA+ID4gCSogZ2NjLmRnL3ZlY3QvdmVjdC1l YXJseS1icmVha18xMi5jOiBOZXcgdGVzdC4NCj4gPiA+IAkqIGdjYy5kZy92ZWN0L3ZlY3QtZWFy bHktYnJlYWtfMTMuYzogTmV3IHRlc3QuDQo+ID4gPiAJKiBnY2MuZGcvdmVjdC92ZWN0LWVhcmx5 LWJyZWFrXzE0LmM6IE5ldyB0ZXN0Lg0KPiA+ID4gCSogZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1i cmVha18xNS5jOiBOZXcgdGVzdC4NCj4gPiA+IAkqIGdjYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJl YWtfMi5jOiBOZXcgdGVzdC4NCj4gPiA+IAkqIGdjYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtf My5jOiBOZXcgdGVzdC4NCj4gPiA+IAkqIGdjYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfNC5j OiBOZXcgdGVzdC4NCj4gPiA+IAkqIGdjYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfNS5jOiBO ZXcgdGVzdC4NCj4gPiA+IAkqIGdjYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfNi5jOiBOZXcg dGVzdC4NCj4gPiA+IAkqIGdjYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfNy5jOiBOZXcgdGVz dC4NCj4gPiA+IAkqIGdjYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfOC5jOiBOZXcgdGVzdC4N Cj4gPiA+IAkqIGdjYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfOS5jOiBOZXcgdGVzdC4NCj4g PiA+DQo+ID4gPiAtLS0gaW5saW5lIGNvcHkgb2YgcGF0Y2ggLS0NCj4gPiA+IGRpZmYgLS1naXQg YS9nY2MvY2ZnbG9vcC5oIGIvZ2NjL2NmZ2xvb3AuaA0KPiA+ID4gaW5kZXgNCj4gPg0KPiA1Mjhi MTIxOWJjMzdhZDhmMTE0ZDVjZjM4MWMwY2ZmODk5ZGIzMWVlLi45YzdmMDE5YTUxYWJmZTJkZThl MWRkNzEzNQ0KPiA+IGRlYTI0NjNiMDI1NmEwIDEwMDY0NA0KPiA+ID4gLS0tIGEvZ2NjL2NmZ2xv b3AuaA0KPiA+ID4gKysrIGIvZ2NjL2NmZ2xvb3AuaA0KPiA+ID4gQEAgLTM4NSw2ICszODUsNyBA QCBleHRlcm4gYmFzaWNfYmxvY2sNCj4gPiAqZ2V0X2xvb3BfYm9keV9pbl9jdXN0b21fb3JkZXIg KGNvbnN0IGNsYXNzIGxvb3AgKiwgdm9pZCAqLA0KPiA+ID4NCj4gPiA+ICBleHRlcm4gYXV0b192 ZWM8ZWRnZT4gZ2V0X2xvb3BfZXhpdF9lZGdlcyAoY29uc3QgY2xhc3MgbG9vcCAqLA0KPiA+IGJh c2ljX2Jsb2NrICogPSBOVUxMKTsNCj4gPiA+ICBleHRlcm4gZWRnZSBzaW5nbGVfZXhpdCAoY29u c3QgY2xhc3MgbG9vcCAqKTsNCj4gPiA+ICtleHRlcm4gZWRnZSBub3JtYWxfZXhpdCAoY29uc3Qg Y2xhc3MgbG9vcCAqKTsNCj4gPiA+ICBleHRlcm4gZWRnZSBzaW5nbGVfbGlrZWx5X2V4aXQgKGNs YXNzIGxvb3AgKmxvb3AsIGNvbnN0IHZlYzxlZGdlPiAmKTsNCj4gPiA+ICBleHRlcm4gdW5zaWdu ZWQgbnVtX2xvb3BfYnJhbmNoZXMgKGNvbnN0IGNsYXNzIGxvb3AgKik7DQo+ID4gPg0KPiA+ID4g ZGlmZiAtLWdpdCBhL2djYy9jZmdsb29wLmNjIGIvZ2NjL2NmZ2xvb3AuY2MNCj4gPiA+IGluZGV4 DQo+ID4NCj4gNTdiZjdiMTg1NWQ0ZGQyMGZiM2Y0MjM4ODEyNDkzMmQwY2EyYjQ4YS4uOTdhNzM3 M2ZiNmQ5NTE0ZGE2MDJkNWJlMA0KPiA+IDEwNTBmMmVjNjYwOTRiYyAxMDA2NDQNCj4gPiA+IC0t LSBhL2djYy9jZmdsb29wLmNjDQo+ID4gPiArKysgYi9nY2MvY2ZnbG9vcC5jYw0KPiA+ID4gQEAg LTE4MTIsNiArMTgxMiwyMCBAQCBzaW5nbGVfZXhpdCAoY29uc3QgY2xhc3MgbG9vcCAqbG9vcCkN Cj4gPiA+ICAgICAgcmV0dXJuIE5VTEw7DQo+ID4gPiAgfQ0KPiA+ID4NCj4gPiA+ICsvKiBSZXR1 cm5zIHRoZSBub3JtYWwgZXhpdCBlZGdlIG9mIExPT1AsIG9yIE5VTEwgaWYgTE9PUCBoYXMgZWl0 aGVyIG5vDQo+ID4gZXhpdC4NCj4gPiA+ICsgICBJZiBsb29wcyBkbyBub3QgaGF2ZSB0aGUgZXhp dHMgcmVjb3JkZWQsIE5VTEwgaXMgcmV0dXJuZWQgYWx3YXlzLiAgKi8NCj4gPiA+ICsNCj4gPiA+ ICtlZGdlDQo+ID4gPiArbm9ybWFsX2V4aXQgKGNvbnN0IGNsYXNzIGxvb3AgKmxvb3ApDQo+ID4g PiArew0KPiA+ID4gKyAgc3RydWN0IGxvb3BfZXhpdCAqZXhpdCA9IGxvb3AtPmV4aXRzLT5uZXh0 Ow0KPiA+ID4gKw0KPiA+ID4gKyAgaWYgKCFsb29wc19zdGF0ZV9zYXRpc2ZpZXNfcCAoTE9PUFNf SEFWRV9SRUNPUkRFRF9FWElUUykpDQo+ID4gPiArICAgIHJldHVybiBOVUxMOw0KPiA+ID4gKw0K PiA+ID4gKyAgcmV0dXJuIGV4aXQtPmU7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gIC8qIFJl dHVybnMgdHJ1ZSB3aGVuIEJCIGhhcyBhbiBpbmNvbWluZyBlZGdlIGV4aXRpbmcgTE9PUC4gICov DQo+ID4gPg0KPiA+ID4gIGJvb2wNCj4gPiA+IGRpZmYgLS1naXQgYS9nY2MvZG9jL2xvb3AudGV4 aSBiL2djYy9kb2MvbG9vcC50ZXhpDQo+ID4gPiBpbmRleA0KPiA+DQo+IDZlODY1N2EwNzRkMjQ0 N2RiN2FlOWI3NWNiZmJiNzEyODJiODQyODcuLmUxZGUyYWM0MGY4N2Y4NzlhYjY5MWY2OGINCj4g PiBkNDFiM2JjMjFhODNiZjcgMTAwNjQ0DQo+ID4gPiAtLS0gYS9nY2MvZG9jL2xvb3AudGV4aQ0K PiA+ID4gKysrIGIvZ2NjL2RvYy9sb29wLnRleGkNCj4gPiA+IEBAIC0yMTEsNiArMjExLDEwIEBA IHJlbGF0aW9uLCBhbmQgYnJlYXRoLWZpcnN0IHNlYXJjaCBvcmRlciwNCj4gPiByZXNwZWN0aXZl bHkuDQo+ID4gPiAgQGl0ZW0gQGNvZGV7c2luZ2xlX2V4aXR9OiBSZXR1cm5zIHRoZSBzaW5nbGUg ZXhpdCBlZGdlIG9mIHRoZSBsb29wLCBvcg0KPiA+ID4gIEBjb2Rle05VTEx9IGlmIHRoZSBsb29w IGhhcyBtb3JlIHRoYW4gb25lIGV4aXQuICBZb3UgY2FuIG9ubHkgdXNlIHRoaXMNCj4gPiA+ICBm dW5jdGlvbiBpZiBAY29kZXtMT09QU19IQVZFX1JFQ09SREVEX0VYSVRTfSBpcyB1c2VkLg0KPiA+ ID4gK2Z1bmN0aW9uIGlmIExPT1BTX0hBVkVfTUFSS0VEX1NJTkdMRV9FWElUUyBwcm9wZXJ0eSBp cyB1c2VkLg0KPiA+ID4gK0BpdGVtIEBjb2Rle25vcm1hbF9leGl0fTogUmV0dXJucyB0aGUgbmF0 dXJhbCBleGl0IGVkZ2Ugb2YgdGhlIGxvb3AsDQo+ID4gPiArZXZlbiBpZiB0aGUgbG9vcCBoYXMg bW9yZSB0aGFuIG9uZSBleGl0LiAgVGhlIG5hdHVyYWwgZXhpdCBpcyB0aGUgZXhpdA0KPiA+ID4g K3RoYXQgd291bGQgbm9ybWFsbHkgYmUgdGFrZW4gd2hlcmUgdGhlIGxvb3AgdG8gYmUgZnVsbHkg ZXhlY3V0ZWQuDQo+ID4gPiAgQGl0ZW0gQGNvZGV7Z2V0X2xvb3BfZXhpdF9lZGdlc306IEVudW1l cmF0ZXMgdGhlIGV4aXQgZWRnZXMgb2YgYQ0KPiA+IGxvb3AuDQo+ID4gPiAgQGl0ZW0gQGNvZGV7 anVzdF9vbmNlX2VhY2hfaXRlcmF0aW9uX3B9OiBSZXR1cm5zIHRydWUgaWYgdGhlIGJhc2ljDQo+ ID4gYmxvY2sNCj4gPiA+ICBpcyBleGVjdXRlZCBleGFjdGx5IG9uY2UgZHVyaW5nIGVhY2ggaXRl cmF0aW9uIG9mIGEgbG9vcCAodGhhdCBpcywgaXQNCj4gPiA+IEBAIC02MjMsNCArNjI3LDQgQEAg bWF4aW11bSB2ZXJib3NpdHkgdGhlIGRldGFpbHMgb2YgYSBkYXRhDQo+ID4gZGVwZW5kZW5jZSBy ZWxhdGlvbnMgYXJyYXksDQo+ID4gPiAgQGNvZGV7ZHVtcF9kaXN0X2Rpcl92ZWN0b3JzfSBwcmlu dHMgb25seSB0aGUgY2xhc3NpY2FsIGRpc3RhbmNlIGFuZA0KPiA+ID4gIGRpcmVjdGlvbiB2ZWN0 b3JzIGZvciBhIGRhdGEgZGVwZW5kZW5jZSByZWxhdGlvbnMgYXJyYXksIGFuZA0KPiA+ID4gIEBj b2Rle2R1bXBfZGF0YV9yZWZlcmVuY2VzfSBwcmludHMgdGhlIGRldGFpbHMgb2YgdGhlIGRhdGEg cmVmZXJlbmNlcw0KPiA+ID4gLWNvbnRhaW5lZCBpbiBhIGRhdGEgcmVmZXJlbmNlIGFycmF5Lg0K PiA+ID4gK2NvbnRhaW5lZCBpbiBhIGRhdGEgcmVmZXJlbmNlIGFycmF5DQo+ID4gPiBkaWZmIC0t Z2l0IGEvZ2NjL2RvYy9zb3VyY2VidWlsZC50ZXhpIGIvZ2NjL2RvYy9zb3VyY2VidWlsZC50ZXhp DQo+ID4gPiBpbmRleA0KPiA+DQo+IGUyMWExZDM4MWUwNWRhMWJmY2NiNTU1MDY4ZWExZGJlYWJk OWZjNzkuLjE2ZmE5NGViZjUzMmQyN2NkOWEzYTQ1YTcNCj4gPiBhYWQ1NzhjYTY5MjA0OTYgMTAw NjQ0DQo+ID4gPiAtLS0gYS9nY2MvZG9jL3NvdXJjZWJ1aWxkLnRleGkNCj4gPiA+ICsrKyBiL2dj Yy9kb2Mvc291cmNlYnVpbGQudGV4aQ0KPiA+ID4gQEAgLTE2NDAsNiArMTY0MCwxMCBAQCBUYXJn ZXQgc3VwcG9ydHMgaGFyZHdhcmUgdmVjdG9ycyBvZg0KPiA+IEBjb2Rle2Zsb2F0fSB3aGVuDQo+ ID4gPiAgQG9wdGlvbnstZnVuc2FmZS1tYXRoLW9wdGltaXphdGlvbnN9IGlzIG5vdCBpbiBlZmZl Y3QuDQo+ID4gPiAgVGhpcyBpbXBsaWVzIEBjb2Rle3ZlY3RfZmxvYXR9Lg0KPiA+ID4NCj4gPiA+ ICtAaXRlbSB2ZWN0X2Vhcmx5X2JyZWFrDQo+ID4gPiArVGFyZ2V0IHN1cHBvcnRzIGhhcmR3YXJl IHZlY3Rvcml6YXRpb24gb2YgbG9vcHMgd2l0aCBlYXJseSBicmVha3MuDQo+ID4gPiArVGhpcyBy ZXF1aXJlcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY2JyYW5jaCBvcHRhYiBmb3IgdmVjdG9y cy4NCj4gPiA+ICsNCj4gPiA+ICBAaXRlbSB2ZWN0X2ludA0KPiA+ID4gIFRhcmdldCBzdXBwb3J0 cyBoYXJkd2FyZSB2ZWN0b3JzIG9mIEBjb2Rle2ludH0uDQo+ID4gPg0KPiA+ID4gZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xLmNjDQo+ID4g Yi9nY2MvdGVzdHN1aXRlL2crKy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMS5jYw0KPiA+ID4g bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiA+IGluZGV4DQo+ID4NCj4gMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmE4MzY0OGNhMzZlMmM4ZmVlYjc4MzM1ZmMNCj4g PiBjZjNmM2I4MmE5N2QyZQ0KPiA+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ID4gKysrIGIvZ2NjL3Rl c3RzdWl0ZS9nKysuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzEuY2MNCj4gPiA+IEBAIC0wLDAg KzEsNjEgQEANCj4gPiA+ICsvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KPiA+ID4gKy8qIHsgZGct cmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAqLw0KPiA+ID4gKy8q IHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCj4gPiA+ICsNCj4g PiA+ICsvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLXcgLU8yIiB9ICovDQo+ID4gPiArDQo+ ID4gPiArdm9pZCBmYW5jeV9hYm9ydChjaGFyICosIGludCwgY29uc3QgY2hhciAqKQ0KPiA+IF9f YXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpOw0KPiA+ID4gK3RlbXBsYXRlIDx1bnNpZ25lZCBO LCB0eXBlbmFtZT4gc3RydWN0IHBvbHlfaW50X3BvZCB7IGludCBjb2VmZnNbTl07DQo+IH07DQo+ ID4gPiArdGVtcGxhdGUgPHVuc2lnbmVkIE4sIHR5cGVuYW1lPiBjbGFzcyBwb2x5X2ludCA6IHB1 YmxpYw0KPiBwb2x5X2ludF9wb2Q8TiwNCj4gPiBpbnQ+IHsNCj4gPiA+ICtwdWJsaWM6DQo+ID4g PiArICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2E+IHBvbHlfaW50ICZvcGVyYXRvcis9KGNvbnN0DQo+ IHBvbHlfaW50X3BvZDxOLA0KPiA+IENhPiAmKTsNCj4gPiA+ICt9Ow0KPiA+ID4gK3RlbXBsYXRl IDx1bnNpZ25lZCBOLCB0eXBlbmFtZSBDPg0KPiA+ID4gK3RlbXBsYXRlIDx0eXBlbmFtZSBDYT4N Cj4gPiA+ICtwb2x5X2ludDxOLCBDPiAmcG9seV9pbnQ8TiwgQz46Om9wZXJhdG9yKz0oY29uc3Qg cG9seV9pbnRfcG9kPE4sDQo+IENhPg0KPiA+ICZhKSB7DQo+ID4gPiArICBmb3IgKGludCBpID0g MDsgaSA8IE47IGkrKykNCj4gPiA+ICsgICAgdGhpcy0+Y29lZmZzW2ldICs9IGEuY29lZmZzW2ld Ow0KPiA+ID4gKyAgcmV0dXJuICp0aGlzOw0KPiA+ID4gK30NCj4gPiA+ICt0ZW1wbGF0ZSA8dW5z aWduZWQgTiwgdHlwZW5hbWUgQ2EsIHR5cGVuYW1lIENiPg0KPiA+ID4gK3BvbHlfaW50PE4sIGxv bmc+IGV4YWN0X2Rpdihwb2x5X2ludF9wb2Q8TiwgQ2E+LCBDYikgew0KPiA+ID4gKyAgcG9seV9p bnQ8TiwgbG9uZz4gcjsNCj4gPiA+ICsgIHJldHVybiByOw0KPiA+ID4gK30NCj4gPiA+ICtzdHJ1 Y3QgdmVjX3ByZWZpeCB7DQo+ID4gPiArICB1bnNpZ25lZCBtX251bTsNCj4gPiA+ICt9Ow0KPiA+ ID4gK3N0cnVjdCB2bF9wdHI7DQo+ID4gPiArc3RydWN0IHZhX2hlYXAgew0KPiA+ID4gKyAgdHlw ZWRlZiB2bF9wdHIgZGVmYXVsdF9sYXlvdXQ7DQo+ID4gPiArfTsNCj4gPiA+ICt0ZW1wbGF0ZSA8 dHlwZW5hbWUsIHR5cGVuYW1lIEEsIHR5cGVuYW1lID0gdHlwZW5hbWUNCj4gPiBBOjpkZWZhdWx0 X2xheW91dD4NCj4gPiA+ICtzdHJ1Y3QgdmVjOw0KPiA+ID4gK3RlbXBsYXRlIDx0eXBlbmFtZSBU LCB0eXBlbmFtZSBBPiBzdHJ1Y3QgdmVjPFQsIEEsIGludD4gew0KPiA+ID4gKyAgVCAmb3BlcmF0 b3JbXSh1bnNpZ25lZCk7DQo+ID4gPiArICB2ZWNfcHJlZml4IG1fdmVjcGZ4Ow0KPiA+ID4gKyAg VCBtX3ZlY2RhdGFbXTsNCj4gPiA+ICt9Ow0KPiA+ID4gK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0 eXBlbmFtZSBBPiBUICZ2ZWM8VCwgQSwNCj4gPiBpbnQ+OjpvcGVyYXRvcltdKHVuc2lnbmVkIGl4 KSB7DQo+ID4gPiArICBtX3ZlY3BmeC5tX251bSA/IGZhbmN5X2Fib3J0KCIiLCA5LCBfX0ZVTkNU SU9OX18pLCAwIDogMDsNCj4gPiA+ICsgIHJldHVybiBtX3ZlY2RhdGFbaXhdOw0KPiA+ID4gK30N Cj4gPiA+ICt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IHZlYzxULCB2YV9oZWFwPiB7DQo+ ID4gPiArICBUICZvcGVyYXRvcltdKHVuc2lnbmVkIGl4KSB7IHJldHVybiBtX3ZlY1tpeF07IH0N Cj4gPiA+ICsgIHZlYzxULCB2YV9oZWFwLCBpbnQ+IG1fdmVjOw0KPiA+ID4gK307DQo+ID4gPiAr Y2xhc3MgYXV0b192ZWMgOiBwdWJsaWMgdmVjPHBvbHlfaW50PDIsIGxvbmc+LCB2YV9oZWFwPiB7 fTsNCj4gPiA+ICt0ZW1wbGF0ZSA8dHlwZW5hbWU+IGNsYXNzIHZlY3Rvcl9idWlsZGVyIDogcHVi bGljIGF1dG9fdmVjIHt9Ow0KPiA+ID4gK2NsYXNzIGludF92ZWN0b3JfYnVpbGRlciA6IHB1Ymxp YyB2ZWN0b3JfYnVpbGRlcjxpbnQ+IHsNCj4gPiA+ICtwdWJsaWM6DQo+ID4gPiArICBpbnRfdmVj dG9yX2J1aWxkZXIocG9seV9pbnQ8MiwgbG9uZz4sIGludCwgaW50KTsNCj4gPiA+ICt9Ow0KPiA+ ID4gK2Jvb2wgdmVjdF9ncm91cGVkX3N0b3JlX3N1cHBvcnRlZCgpIHsNCj4gPiA+ICsgIGludCBp Ow0KPiA+ID4gKyAgcG9seV9pbnQ8MiwgbG9uZz4gbmVsdDsNCj4gPiA+ICsgIGludF92ZWN0b3Jf YnVpbGRlciBzZWwobmVsdCwgMiwgMyk7DQo+ID4gPiArICBmb3IgKGkgPSAwOyBpIDwgNjsgaSsr KQ0KPiA+ID4gKyAgICBzZWxbaV0gKz0gZXhhY3RfZGl2KG5lbHQsIDIpOw0KPiA+ID4gK30NCj4g PiA+ICsNCj4gPiA+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkxPT1AgVkVDVE9S SVpFRCIgInZlY3QiIH0gfSAqLw0KPiA+ID4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysr LmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18yLmNjDQo+ID4gYi9nY2MvdGVzdHN1aXRlL2crKy5k Zy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMi5jYw0KPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gPiA+IGluZGV4DQo+ID4NCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMC4uNmE4MzY0OGNhMzZlMmM4ZmVlYjc4MzM1ZmMNCj4gPiBjZjNmM2I4MmE5N2QyZQ0KPiA+ ID4gLS0tIC9kZXYvbnVsbA0KPiA+ID4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvdmVjdC92 ZWN0LWVhcmx5LWJyZWFrXzIuY2MNCj4gPiA+IEBAIC0wLDAgKzEsNjEgQEANCj4gPiA+ICsvKiB7 IGRnLWRvIGNvbXBpbGUgfSAqLw0KPiA+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFy Z2V0IHZlY3RfZWFybHlfYnJlYWsgfSAqLw0KPiA+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3Rp dmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCj4gPiA+ICsNCj4gPiA+ICsvKiB7IGRnLWFkZGl0aW9u YWwtb3B0aW9ucyAiLXcgLU8yIiB9ICovDQo+ID4gPiArDQo+ID4gPiArdm9pZCBmYW5jeV9hYm9y dChjaGFyICosIGludCwgY29uc3QgY2hhciAqKQ0KPiA+IF9fYXR0cmlidXRlX18oKF9fbm9yZXR1 cm5fXykpOw0KPiA+ID4gK3RlbXBsYXRlIDx1bnNpZ25lZCBOLCB0eXBlbmFtZT4gc3RydWN0IHBv bHlfaW50X3BvZCB7IGludCBjb2VmZnNbTl07DQo+IH07DQo+ID4gPiArdGVtcGxhdGUgPHVuc2ln bmVkIE4sIHR5cGVuYW1lPiBjbGFzcyBwb2x5X2ludCA6IHB1YmxpYw0KPiBwb2x5X2ludF9wb2Q8 TiwNCj4gPiBpbnQ+IHsNCj4gPiA+ICtwdWJsaWM6DQo+ID4gPiArICB0ZW1wbGF0ZSA8dHlwZW5h bWUgQ2E+IHBvbHlfaW50ICZvcGVyYXRvcis9KGNvbnN0DQo+IHBvbHlfaW50X3BvZDxOLA0KPiA+ IENhPiAmKTsNCj4gPiA+ICt9Ow0KPiA+ID4gK3RlbXBsYXRlIDx1bnNpZ25lZCBOLCB0eXBlbmFt ZSBDPg0KPiA+ID4gK3RlbXBsYXRlIDx0eXBlbmFtZSBDYT4NCj4gPiA+ICtwb2x5X2ludDxOLCBD PiAmcG9seV9pbnQ8TiwgQz46Om9wZXJhdG9yKz0oY29uc3QgcG9seV9pbnRfcG9kPE4sDQo+IENh Pg0KPiA+ICZhKSB7DQo+ID4gPiArICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykNCj4gPiA+ ICsgICAgdGhpcy0+Y29lZmZzW2ldICs9IGEuY29lZmZzW2ldOw0KPiA+ID4gKyAgcmV0dXJuICp0 aGlzOw0KPiA+ID4gK30NCj4gPiA+ICt0ZW1wbGF0ZSA8dW5zaWduZWQgTiwgdHlwZW5hbWUgQ2Es IHR5cGVuYW1lIENiPg0KPiA+ID4gK3BvbHlfaW50PE4sIGxvbmc+IGV4YWN0X2Rpdihwb2x5X2lu dF9wb2Q8TiwgQ2E+LCBDYikgew0KPiA+ID4gKyAgcG9seV9pbnQ8TiwgbG9uZz4gcjsNCj4gPiA+ ICsgIHJldHVybiByOw0KPiA+ID4gK30NCj4gPiA+ICtzdHJ1Y3QgdmVjX3ByZWZpeCB7DQo+ID4g PiArICB1bnNpZ25lZCBtX251bTsNCj4gPiA+ICt9Ow0KPiA+ID4gK3N0cnVjdCB2bF9wdHI7DQo+ ID4gPiArc3RydWN0IHZhX2hlYXAgew0KPiA+ID4gKyAgdHlwZWRlZiB2bF9wdHIgZGVmYXVsdF9s YXlvdXQ7DQo+ID4gPiArfTsNCj4gPiA+ICt0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lIEEs IHR5cGVuYW1lID0gdHlwZW5hbWUNCj4gPiBBOjpkZWZhdWx0X2xheW91dD4NCj4gPiA+ICtzdHJ1 Y3QgdmVjOw0KPiA+ID4gK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBBPiBzdHJ1Y3Qg dmVjPFQsIEEsIGludD4gew0KPiA+ID4gKyAgVCAmb3BlcmF0b3JbXSh1bnNpZ25lZCk7DQo+ID4g PiArICB2ZWNfcHJlZml4IG1fdmVjcGZ4Ow0KPiA+ID4gKyAgVCBtX3ZlY2RhdGFbXTsNCj4gPiA+ ICt9Ow0KPiA+ID4gK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBBPiBUICZ2ZWM8VCwg QSwNCj4gPiBpbnQ+OjpvcGVyYXRvcltdKHVuc2lnbmVkIGl4KSB7DQo+ID4gPiArICBtX3ZlY3Bm eC5tX251bSA/IGZhbmN5X2Fib3J0KCIiLCA5LCBfX0ZVTkNUSU9OX18pLCAwIDogMDsNCj4gPiA+ ICsgIHJldHVybiBtX3ZlY2RhdGFbaXhdOw0KPiA+ID4gK30NCj4gPiA+ICt0ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4gc3RydWN0IHZlYzxULCB2YV9oZWFwPiB7DQo+ID4gPiArICBUICZvcGVyYXRvcltd KHVuc2lnbmVkIGl4KSB7IHJldHVybiBtX3ZlY1tpeF07IH0NCj4gPiA+ICsgIHZlYzxULCB2YV9o ZWFwLCBpbnQ+IG1fdmVjOw0KPiA+ID4gK307DQo+ID4gPiArY2xhc3MgYXV0b192ZWMgOiBwdWJs aWMgdmVjPHBvbHlfaW50PDIsIGxvbmc+LCB2YV9oZWFwPiB7fTsNCj4gPiA+ICt0ZW1wbGF0ZSA8 dHlwZW5hbWU+IGNsYXNzIHZlY3Rvcl9idWlsZGVyIDogcHVibGljIGF1dG9fdmVjIHt9Ow0KPiA+ ID4gK2NsYXNzIGludF92ZWN0b3JfYnVpbGRlciA6IHB1YmxpYyB2ZWN0b3JfYnVpbGRlcjxpbnQ+ IHsNCj4gPiA+ICtwdWJsaWM6DQo+ID4gPiArICBpbnRfdmVjdG9yX2J1aWxkZXIocG9seV9pbnQ8 MiwgbG9uZz4sIGludCwgaW50KTsNCj4gPiA+ICt9Ow0KPiA+ID4gK2Jvb2wgdmVjdF9ncm91cGVk X3N0b3JlX3N1cHBvcnRlZCgpIHsNCj4gPiA+ICsgIGludCBpOw0KPiA+ID4gKyAgcG9seV9pbnQ8 MiwgbG9uZz4gbmVsdDsNCj4gPiA+ICsgIGludF92ZWN0b3JfYnVpbGRlciBzZWwobmVsdCwgMiwg Myk7DQo+ID4gPiArICBmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQ0KPiA+ID4gKyAgICBzZWxbaV0g Kz0gZXhhY3RfZGl2KG5lbHQsIDIpOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsvKiB7IGRn LWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0K PiA+ID4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL3ZlY3QvdmVjdC1lYXJseS1i cmVha18zLmNjDQo+ID4gYi9nY2MvdGVzdHN1aXRlL2crKy5kZy92ZWN0L3ZlY3QtZWFybHktYnJl YWtfMy5jYw0KPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiA+IGluZGV4DQo+ID4NCj4g MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTEyZTVjYTQzNGIyYWMz N2MwM2RiYWExMg0KPiA+IDI3M2ZkOGU1YWEyMDE4Yw0KPiA+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ ID4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzMuY2MN Cj4gPiA+IEBAIC0wLDAgKzEsMTYgQEANCj4gPiA+ICsvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0K PiA+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsg fSAqLw0KPiA+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0g Ki8NCj4gPiA+ICsNCj4gPiA+ICsvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLXcgLU8yIiB9 ICovDQo+ID4gPiArDQo+ID4gPiAraW50IGFhcmNoNjRfYWR2c2ltZF92YWxpZF9pbW1lZGlhdGVf aHNfdmFsMzI7DQo+ID4gPiArYm9vbCBhYXJjaDY0X2FkdnNpbWRfdmFsaWRfaW1tZWRpYXRlX2hz KCkgew0KPiA+ID4gKyAgZm9yIChpbnQgc2hpZnQgPSAwOyBzaGlmdCA8IDMyOyBzaGlmdCArPSA4 KQ0KPiA+ID4gKyAgICBpZiAoYWFyY2g2NF9hZHZzaW1kX3ZhbGlkX2ltbWVkaWF0ZV9oc192YWwz MiAmIHNoaWZ0KQ0KPiA+ID4gKyAgICAgIHJldHVybiBhYXJjaDY0X2FkdnNpbWRfdmFsaWRfaW1t ZWRpYXRlX2hzX3ZhbDMyOw0KPiA+ID4gKyAgZm9yICg7OykNCj4gPiA+ICsgICAgOw0KPiA+ID4g K30NCj4gPiA+ICsNCj4gPiA+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkxPT1Ag VkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KPiA+ID4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fMS5jDQo+ID4gYi9nY2MvdGVzdHN1 aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzEuYw0KPiA+ID4gbmV3IGZpbGUg bW9kZSAxMDA2NDQNCj4gPiA+IGluZGV4DQo+ID4NCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMC4uMjQ5NWIzNmE3MmVhZTk0Y2I3YWJjNGEwZA0KPiA+IDE3YTVjOTc5 ZmQ3ODA4Mw0KPiA+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ID4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl8xLmMNCj4gPiA+IEBAIC0wLDAgKzEsMTEg QEANCj4gPiA+ICsvKiB7IGRnLWRvIHJ1biB9ICovDQo+ID4gPiArLyogeyBkZy1yZXF1aXJlLWVm ZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovDQo+ID4gPiArLyogeyBkZy1yZXF1 aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KPiA+ID4gKw0KPiA+ID4gKy8qIHsg ZGctYWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3QgLXNhdmUtdGVtcHMiIH0gKi8NCj4gPiA+ICsN Cj4gPiA+ICsjZGVmaW5lIE4gODAzDQo+ID4gPiArI2RlZmluZSBQIDANCj4gPiA+ICsjaW5jbHVk ZSAidmVjdC1lYXJseS1icmVhay10ZW1wbGF0ZV8xLmMiDQo+ID4gPiArDQo+ID4gPiArLyogeyBk Zy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8N Cj4gPiA+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHkt YnJlYWstcnVuXzEwLmMNCj4gPiBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJs eS1icmVhay1ydW5fMTAuYw0KPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiA+IGluZGV4 DQo+ID4NCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWJjZDdm N2U1N2VmOWExZDQ2NDlkMTg1Ng0KPiA+IDliMzQwNjA1MGU1NDYwMw0KPiA+ID4gLS0tIC9kZXYv bnVsbA0KPiA+ID4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJy ZWFrLXJ1bl8xMC5jDQo+ID4gPiBAQCAtMCwwICsxLDExIEBADQo+ID4gPiArLyogeyBkZy1kbyBy dW4gfSAqLw0KPiA+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFy bHlfYnJlYWsgfSAqLw0KPiA+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZl Y3RfaW50IH0gKi8NCj4gPiA+ICsNCj4gPiA+ICsvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAi LU9mYXN0IC1zYXZlLXRlbXBzIiB9ICovDQo+ID4gPiArDQo+ID4gPiArI2RlZmluZSBOIDgwMA0K PiA+ID4gKyNkZWZpbmUgUCA3OTkNCj4gPiA+ICsjaW5jbHVkZSAidmVjdC1lYXJseS1icmVhay10 ZW1wbGF0ZV8yLmMiDQo+ID4gPiArDQo+ID4gPiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1k dW1wICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8NCj4gPiA+IGRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzIuYw0KPiA+IGIv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl8yLmMNCj4gPiA+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gPiBpbmRleA0KPiA+DQo+IDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYzZjYzMTAxYTQ2NzkwOWYzMjhiZTdmM2FjDQo+ ID4gYmM1YmNiNzIxOTY3ZmYNCj4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ICsrKyBiL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fMi5jDQo+ID4gPiBAQCAt MCwwICsxLDExIEBADQo+ID4gPiArLyogeyBkZy1kbyBydW4gfSAqLw0KPiA+ID4gKy8qIHsgZGct cmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAqLw0KPiA+ID4gKy8q IHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCj4gPiA+ICsNCj4g PiA+ICsvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IC1zYXZlLXRlbXBzIiB9ICov DQo+ID4gPiArDQo+ID4gPiArI2RlZmluZSBOIDgwMw0KPiA+ID4gKyNkZWZpbmUgUCA4MDINCj4g PiA+ICsjaW5jbHVkZSAidmVjdC1lYXJseS1icmVhay10ZW1wbGF0ZV8xLmMiDQo+ID4gPiArDQo+ ID4gPiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2 ZWN0IiB9IH0gKi8NCj4gPiA+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0 L3ZlY3QtZWFybHktYnJlYWstcnVuXzMuYw0KPiA+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVj dC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl8zLmMNCj4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ ID4gPiBpbmRleA0KPiA+DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAuLjYyNmI5NWU5Yjg1MTcwODFkNDFkNzk0ZTkNCj4gPiBlMDI2NGQ2MzAxYzg1ODkNCj4gPiA+ IC0tLSAvZGV2L251bGwNCj4gPiA+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVj dC1lYXJseS1icmVhay1ydW5fMy5jDQo+ID4gPiBAQCAtMCwwICsxLDExIEBADQo+ID4gPiArLyog eyBkZy1kbyBydW4gfSAqLw0KPiA+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0 IHZlY3RfZWFybHlfYnJlYWsgfSAqLw0KPiA+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUt dGFyZ2V0IHZlY3RfaW50IH0gKi8NCj4gPiA+ICsNCj4gPiA+ICsvKiB7IGRnLWFkZGl0aW9uYWwt b3B0aW9ucyAiLU9mYXN0IC1zYXZlLXRlbXBzIiB9ICovDQo+ID4gPiArDQo+ID4gPiArI2RlZmlu ZSBOIDgwMw0KPiA+ID4gKyNkZWZpbmUgUCA1DQo+ID4gPiArI2luY2x1ZGUgInZlY3QtZWFybHkt YnJlYWstdGVtcGxhdGVfMS5jIg0KPiA+ID4gKw0KPiA+ID4gKy8qIHsgZGctZmluYWwgeyBzY2Fu LXRyZWUtZHVtcCAiTE9PUCBWRUNUT1JJWkVEIiAidmVjdCIgfSB9ICovDQo+ID4gPiBkaWZmIC0t Z2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl80LmMN Cj4gPiBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fNC5j DQo+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ID4gaW5kZXgNCj4gPg0KPiAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZTBlNjQyNjEyMDU1MTE1MmE3YmQ4 MDBjDQo+ID4gMTVkOWVkNmFiMTViYWRhDQo+ID4gPiAtLS0gL2Rldi9udWxsDQo+ID4gPiArKysg Yi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzQuYw0KPiA+ ID4gQEAgLTAsMCArMSwxMSBAQA0KPiA+ID4gKy8qIHsgZGctZG8gcnVuIH0gKi8NCj4gPiA+ICsv KiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8NCj4g PiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovDQo+ID4g PiArDQo+ID4gPiArLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1PZmFzdCAtc2F2ZS10ZW1w cyIgfSAqLw0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgTiA4MDMNCj4gPiA+ICsjZGVmaW5lIFAg Mjc4DQo+ID4gPiArI2luY2x1ZGUgInZlY3QtZWFybHktYnJlYWstdGVtcGxhdGVfMS5jIg0KPiA+ ID4gKw0KPiA+ID4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9PUCBWRUNUT1JJ WkVEIiAidmVjdCIgfSB9ICovDQo+ID4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl81LmMNCj4gPiBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fNS5jDQo+ID4gPiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPiA+ID4gaW5kZXgNCj4gPg0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwLi4yNDJjZjQ4NmY5YzQwMDU1ZGYwYWVmNWZkMjMNCj4gPiA4ZDFhZmY3YTdjN2Rh DQo+ID4gPiAtLS0gL2Rldi9udWxsDQo+ID4gPiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92 ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzUuYw0KPiA+ID4gQEAgLTAsMCArMSwxMSBAQA0KPiA+ ID4gKy8qIHsgZGctZG8gcnVuIH0gKi8NCj4gPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZl LXRhcmdldCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8NCj4gPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZm ZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovDQo+ID4gPiArDQo+ID4gPiArLyogeyBkZy1hZGRp dGlvbmFsLW9wdGlvbnMgIi1PZmFzdCAtc2F2ZS10ZW1wcyIgfSAqLw0KPiA+ID4gKw0KPiA+ID4g KyNkZWZpbmUgTiA4MDANCj4gPiA+ICsjZGVmaW5lIFAgNzk5DQo+ID4gPiArI2luY2x1ZGUgInZl Y3QtZWFybHktYnJlYWstdGVtcGxhdGVfMS5jIg0KPiA+ID4gKw0KPiA+ID4gKy8qIHsgZGctZmlu YWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9PUCBWRUNUT1JJWkVEIiAidmVjdCIgfSB9ICovDQo+ID4g PiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFr LXJ1bl82LmMNCj4gPiBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVh ay1ydW5fNi5jDQo+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ID4gaW5kZXgNCj4gPg0K PiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZmU3MTM2YjcyMTNh NDYzY2E2NTczYzYwNA0KPiA+IDc2YjdjOGY1MzFkZGNiDQo+ID4gPiAtLS0gL2Rldi9udWxsDQo+ ID4gPiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVu XzYuYw0KPiA+ID4gQEAgLTAsMCArMSwxMSBAQA0KPiA+ID4gKy8qIHsgZGctZG8gcnVuIH0gKi8N Cj4gPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Vhcmx5X2JyZWFr IH0gKi8NCj4gPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9 ICovDQo+ID4gPiArDQo+ID4gPiArLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1PZmFzdCAt c2F2ZS10ZW1wcyIgfSAqLw0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgTiA4MDMNCj4gPiA+ICsj ZGVmaW5lIFAgMA0KPiA+ID4gKyNpbmNsdWRlICJ2ZWN0LWVhcmx5LWJyZWFrLXRlbXBsYXRlXzIu YyINCj4gPiA+ICsNCj4gPiA+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkxPT1Ag VkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KPiA+ID4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fNy5jDQo+ID4gYi9nY2MvdGVzdHN1 aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzcuYw0KPiA+ID4gbmV3IGZpbGUg bW9kZSAxMDA2NDQNCj4gPiA+IGluZGV4DQo+ID4NCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMC4uMDJmOTNkNzdkYmEzMWI5MzhmNmZkOWU4YzcNCj4gPiBmNWU0YWNk ZTRhZWVjOQ0KPiA+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ID4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl83LmMNCj4gPiA+IEBAIC0wLDAgKzEsMTEg QEANCj4gPiA+ICsvKiB7IGRnLWRvIHJ1biB9ICovDQo+ID4gPiArLyogeyBkZy1yZXF1aXJlLWVm ZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovDQo+ID4gPiArLyogeyBkZy1yZXF1 aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KPiA+ID4gKw0KPiA+ID4gKy8qIHsg ZGctYWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3QgLXNhdmUtdGVtcHMiIH0gKi8NCj4gPiA+ICsN Cj4gPiA+ICsjZGVmaW5lIE4gODAzDQo+ID4gPiArI2RlZmluZSBQIDgwMg0KPiA+ID4gKyNpbmNs dWRlICJ2ZWN0LWVhcmx5LWJyZWFrLXRlbXBsYXRlXzIuYyINCj4gPiA+ICsNCj4gPiA+ICsvKiB7 IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAq Lw0KPiA+ID4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJs eS1icmVhay1ydW5fOC5jDQo+ID4gYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFy bHktYnJlYWstcnVuXzguYw0KPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiA+IGluZGV4 DQo+ID4NCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTYxNDky NTQ2NTYwNmI1NGM2MzgyMjFmZmINCj4gPiA5NWE1ZThkM2JlZTc5Nw0KPiA+ID4gLS0tIC9kZXYv bnVsbA0KPiA+ID4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJy ZWFrLXJ1bl84LmMNCj4gPiA+IEBAIC0wLDAgKzEsMTEgQEANCj4gPiA+ICsvKiB7IGRnLWRvIHJ1 biB9ICovDQo+ID4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJs eV9icmVhayB9ICovDQo+ID4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVj dF9pbnQgfSAqLw0KPiA+ID4gKw0KPiA+ID4gKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICIt T2Zhc3QgLXNhdmUtdGVtcHMiIH0gKi8NCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIE4gODAzDQo+ ID4gPiArI2RlZmluZSBQIDUNCj4gPiA+ICsjaW5jbHVkZSAidmVjdC1lYXJseS1icmVhay10ZW1w bGF0ZV8yLmMiDQo+ID4gPiArDQo+ID4gPiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1w ICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8NCj4gPiA+IGRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzkuYw0KPiA+IGIvZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl85LmMNCj4gPiA+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gPiBpbmRleA0KPiA+DQo+IDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0ZTJiOWMzMDE0NTZlZGE4ZjlhZDdlYWENCj4gPiA2 NzYwNDU2M2YwYWZlZTcNCj4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ICsrKyBiL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fOS5jDQo+ID4gPiBAQCAtMCww ICsxLDExIEBADQo+ID4gPiArLyogeyBkZy1kbyBydW4gfSAqLw0KPiA+ID4gKy8qIHsgZGctcmVx dWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAqLw0KPiA+ID4gKy8qIHsg ZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCj4gPiA+ICsNCj4gPiA+ ICsvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IC1zYXZlLXRlbXBzIiB9ICovDQo+ ID4gPiArDQo+ID4gPiArI2RlZmluZSBOIDgwMw0KPiA+ID4gKyNkZWZpbmUgUCAyNzgNCj4gPiA+ ICsjaW5jbHVkZSAidmVjdC1lYXJseS1icmVhay10ZW1wbGF0ZV8yLmMiDQo+ID4gPiArDQo+ID4g PiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0 IiB9IH0gKi8NCj4gPiA+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3Zl Y3QtZWFybHktYnJlYWstdGVtcGxhdGVfMS5jDQo+ID4gYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92 ZWN0L3ZlY3QtZWFybHktYnJlYWstdGVtcGxhdGVfMS5jDQo+ID4gPiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPiA+ID4gaW5kZXgNCj4gPg0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwLi5hZjcwYThlMmE1YTlkYzk3NTZlZGI1NTgwZg0KPiA+IDJkZTAyZGRjYzk1ZGU5 DQo+ID4gPiAtLS0gL2Rldi9udWxsDQo+ID4gPiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92 ZWN0L3ZlY3QtZWFybHktYnJlYWstdGVtcGxhdGVfMS5jDQo+ID4gPiBAQCAtMCwwICsxLDQ3IEBA DQo+ID4gPiArI2lmbmRlZiBODQo+ID4gPiArI2RlZmluZSBOIDgwMw0KPiA+ID4gKyNlbmRpZg0K PiA+ID4gKw0KPiA+ID4gKyNpZm5kZWYgUA0KPiA+ID4gKyNkZWZpbmUgUCAwDQo+ID4gPiArI2Vu ZGlmDQo+ID4gPiArDQo+ID4gPiArdW5zaWduZWQgdmVjdF9hW05dID0gezB9Ow0KPiA+ID4gK3Vu c2lnbmVkIHZlY3RfYltOXSA9IHswfTsNCj4gPiA+ICsNCj4gPiA+ICtfX2F0dHJpYnV0ZV9fKChu b2lwYSwgbm9pbmxpbmUpKQ0KPiA+ID4gK3Vuc2lnbmVkIHRlc3Q0KHVuc2lnbmVkIHgpDQo+ID4g PiArew0KPiA+ID4gKyB1bnNpZ25lZCByZXQgPSAwOw0KPiA+ID4gKyBmb3IgKGludCBpID0gMDsg aSA8IE47IGkrKykNCj4gPiA+ICsgew0KPiA+ID4gKyAgIHZlY3RfYltpXSA9IHggKyBpOw0KPiA+ ID4gKyAgIGlmICh2ZWN0X2FbaV0gPiB4KQ0KPiA+ID4gKyAgICAgYnJlYWs7DQo+ID4gPiArICAg dmVjdF9hW2ldID0geDsNCj4gPiA+ICsNCj4gPiA+ICsgfQ0KPiA+ID4gKyByZXR1cm4gcmV0Ow0K PiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtleHRlcm4gdm9pZCBhYm9ydCAoKTsNCj4gPiA+ICsN Cj4gPiA+ICtpbnQgbWFpbiAoKQ0KPiA+ID4gK3sNCj4gPiA+ICsNCj4gPiA+ICsgIGludCB4ID0g MTsNCj4gPiA+ICsgIGludCBpZHggPSBQOw0KPiA+ID4gKyAgdmVjdF9hW2lkeF0gPSB4ICsgMTsN Cj4gPiA+ICsNCj4gPiA+ICsgIHRlc3Q0KHgpOw0KPiA+ID4gKw0KPiA+ID4gKyAgaWYgKHZlY3Rf YltpZHhdICE9ICh4ICsgaWR4KSkNCj4gPiA+ICsgICAgYWJvcnQgKCk7DQo+ID4gPiArDQo+ID4g PiArICBpZiAodmVjdF9hW2lkeF0gIT0geCArIDEpDQo+ID4gPiArICAgIGFib3J0ICgpOw0KPiA+ ID4gKw0KPiA+ID4gKyAgaWYgKGlkeCA+IDAgJiYgdmVjdF9hW2lkeC0xXSAhPSB4KQ0KPiA+ID4g KyAgICBhYm9ydCAoKTsNCj4gPiA+ICsNCj4gPiA+ICt9DQo+ID4gPiBkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXRlbXBsYXRlXzIuYw0KPiA+ IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXRlbXBsYXRlXzIu Yw0KPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiA+IGluZGV4DQo+ID4NCj4gMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDBmOTI0ZDkwNDQzN2U3MTU2N2Qy N2NjMWYNCj4gPiAxMDg5ZTU2MDdkY2EwZA0KPiA+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ID4gKysr IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXRlbXBsYXRlXzIu Yw0KPiA+ID4gQEAgLTAsMCArMSw1MCBAQA0KPiA+ID4gKyNpZm5kZWYgTg0KPiA+ID4gKyNkZWZp bmUgTiA4MDMNCj4gPiA+ICsjZW5kaWYNCj4gPiA+ICsNCj4gPiA+ICsjaWZuZGVmIFANCj4gPiA+ ICsjZGVmaW5lIFAgMA0KPiA+ID4gKyNlbmRpZg0KPiA+ID4gKw0KPiA+ID4gK3Vuc2lnbmVkIHZl Y3RfYVtOXSA9IHswfTsNCj4gPiA+ICt1bnNpZ25lZCB2ZWN0X2JbTl0gPSB7MH07DQo+ID4gPiAr DQo+ID4gPiArX19hdHRyaWJ1dGVfXygobm9pcGEsIG5vaW5saW5lKSkNCj4gPiA+ICt1bnNpZ25l ZCB0ZXN0NCh1bnNpZ25lZCB4KQ0KPiA+ID4gK3sNCj4gPiA+ICsgdW5zaWduZWQgcmV0ID0gMDsN Cj4gPiA+ICsgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspDQo+ID4gPiArIHsNCj4gPiA+ICsg ICB2ZWN0X2JbaV0gPSB4ICsgaTsNCj4gPiA+ICsgICBpZiAodmVjdF9hW2ldID4geCkNCj4gPiA+ ICsgICAgIHJldHVybiBpOw0KPiA+ID4gKyAgIHZlY3RfYVtpXSA9IHg7DQo+ID4gPiArDQo+ID4g PiArIH0NCj4gPiA+ICsgcmV0dXJuIHJldDsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArZXh0 ZXJuIHZvaWQgYWJvcnQgKCk7DQo+ID4gPiArDQo+ID4gPiAraW50IG1haW4gKCkNCj4gPiA+ICt7 DQo+ID4gPiArDQo+ID4gPiArICBpbnQgeCA9IDE7DQo+ID4gPiArICBpbnQgaWR4ID0gUDsNCj4g PiA+ICsgIHZlY3RfYVtpZHhdID0geCArIDE7DQo+ID4gPiArDQo+ID4gPiArICB1bnNpZ25lZCBy ZXMgPSB0ZXN0NCh4KTsNCj4gPiA+ICsNCj4gPiA+ICsgIGlmIChyZXMgIT0gaWR4KQ0KPiA+ID4g KyAgICBhYm9ydCAoKTsNCj4gPiA+ICsNCj4gPiA+ICsgIGlmICh2ZWN0X2JbaWR4XSAhPSAoeCAr IGlkeCkpDQo+ID4gPiArICAgIGFib3J0ICgpOw0KPiA+ID4gKw0KPiA+ID4gKyAgaWYgKHZlY3Rf YVtpZHhdICE9IHggKyAxKQ0KPiA+ID4gKyAgICBhYm9ydCAoKTsNCj4gPiA+ICsNCj4gPiA+ICsg IGlmIChpZHggPiAwICYmIHZlY3RfYVtpZHgtMV0gIT0geCkNCj4gPiA+ICsgICAgYWJvcnQgKCk7 DQo+ID4gPiArDQo+ID4gPiArfQ0KPiA+ID4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xLmMNCj4gPiBiL2djYy90ZXN0c3VpdGUvZ2NjLmRn L3ZlY3QvdmVjdC1lYXJseS1icmVha18xLmMNCj4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ ID4gPiBpbmRleA0KPiA+DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAuLjUxZTdkNjQ4OWI5OWMyNWI5YjRiM2QxYzgNCj4gPiAzOWY5ODU2MmI2ZDRkZDcNCj4gPiA+ IC0tLSAvZGV2L251bGwNCj4gPiA+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVj dC1lYXJseS1icmVha18xLmMNCj4gPiA+IEBAIC0wLDAgKzEsMjcgQEANCj4gPiA+ICsvKiB7IGRn LWRvIGNvbXBpbGUgfSAqLw0KPiA+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0 IHZlY3RfZWFybHlfYnJlYWsgfSAqLw0KPiA+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUt dGFyZ2V0IHZlY3RfaW50IH0gKi8NCj4gPiA+ICsNCj4gPiA+ICsvKiB7IGRnLWFkZGl0aW9uYWwt b3B0aW9ucyAiLU9mYXN0IiB9ICovDQo+ID4gPiArDQo+ID4gPiArLyogeyBkZy1maW5hbCB7IHNj YW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8NCj4gPiA+ICsNCj4g PiA+ICsjaWZuZGVmIE4NCj4gPiA+ICsjZGVmaW5lIE4gODAzDQo+ID4gPiArI2VuZGlmDQo+ID4g PiArdW5zaWduZWQgdmVjdF9hW05dOw0KPiA+ID4gK3Vuc2lnbmVkIHZlY3RfYltOXTsNCj4gPiA+ ICsNCj4gPiA+ICt1bnNpZ25lZCB0ZXN0NCh1bnNpZ25lZCB4KQ0KPiA+ID4gK3sNCj4gPiA+ICsg dW5zaWduZWQgcmV0ID0gMDsNCj4gPiA+ICsgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspDQo+ ID4gPiArIHsNCj4gPiA+ICsgICB2ZWN0X2JbaV0gPSB4ICsgaTsNCj4gPiA+ICsgICBpZiAodmVj dF9hW2ldID4geCkNCj4gPiA+ICsgICAgIGJyZWFrOw0KPiA+ID4gKyAgIHZlY3RfYVtpXSA9IHg7 DQo+ID4gPiArDQo+ID4gPiArIH0NCj4gPiA+ICsgcmV0dXJuIHJldDsNCj4gPiA+ICt9DQo+ID4g PiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFr XzEwLmMNCj4gPiBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18x MC5jDQo+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ID4gaW5kZXgNCj4gPg0KPiAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZTRhZDE3NjMyMDJkZmRhYjNl ZDc5NjFlDQo+ID4gYWQ1MTE0ZmNjNjFhMTFiDQo+ID4gPiAtLS0gL2Rldi9udWxsDQo+ID4gPiAr KysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMTAuYw0KPiA+ ID4gQEAgLTAsMCArMSwyOCBAQA0KPiA+ID4gKy8qIHsgZGctZG8gY29tcGlsZSB9ICovDQo+ID4g PiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICov DQo+ID4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0K PiA+ID4gKw0KPiA+ID4gKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3QiIH0gKi8N Cj4gPiA+ICsNCj4gPiA+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkxPT1AgVkVD VE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KPiA+ID4gKw0KPiA+ID4gKyNpZm5kZWYgTg0KPiA+ID4g KyNkZWZpbmUgTiA4MDMNCj4gPiA+ICsjZW5kaWYNCj4gPiA+ICt1bnNpZ25lZCB2ZWN0X2FbTl07 DQo+ID4gPiArdW5zaWduZWQgdmVjdF9iW05dOw0KPiA+ID4gKw0KPiA+ID4gK3Vuc2lnbmVkIHRl c3Q0KHVuc2lnbmVkIHgsaW50IHksIGludCB6KQ0KPiA+ID4gK3sNCj4gPiA+ICsgdW5zaWduZWQg cmV0ID0gMDsNCj4gPiA+ICsgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspDQo+ID4gPiArIHsN Cj4gPiA+ICsgICB2ZWN0X2JbaV0gPSB4ICsgaTsNCj4gPiA+ICsgICBpZiAodmVjdF9hW2ldID4g eCkNCj4gPiA+ICsgICAgIGJyZWFrOw0KPiA+ID4gKyAgIHZlY3RfYVtpXSA9IHg7DQo+ID4gPiAr IH0NCj4gPiA+ICsNCj4gPiA+ICsgcmV0ID0geCArIHkgKiB6Ow0KPiA+ID4gKyByZXR1cm4gcmV0 Ow0KPiA+ID4gK30NCj4gPiA+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0 L3ZlY3QtZWFybHktYnJlYWtfMTEuYw0KPiA+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92 ZWN0LWVhcmx5LWJyZWFrXzExLmMNCj4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gPiBp bmRleA0KPiA+DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE2 MTNkZDk5MDlmYjA5Mjc4ZGQ5MmE4MWENCj4gPiAyNGVmODU0OTk0YTk4OTANCj4gPiA+IC0tLSAv ZGV2L251bGwNCj4gPiA+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJs eS1icmVha18xMS5jDQo+ID4gPiBAQCAtMCwwICsxLDMxIEBADQo+ID4gPiArLyogeyBkZy1kbyBj b21waWxlIH0gKi8NCj4gPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0 X2Vhcmx5X2JyZWFrIH0gKi8NCj4gPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdl dCB2ZWN0X2ludCB9ICovDQo+ID4gPiArDQo+ID4gPiArLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlv bnMgIi1PZmFzdCIgfSAqLw0KPiA+ID4gKw0KPiA+ID4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRy ZWUtZHVtcCAiTE9PUCBWRUNUT1JJWkVEIiAidmVjdCIgfSB9ICovDQo+ID4gPiArDQo+ID4gPiAr I2lmbmRlZiBODQo+ID4gPiArI2RlZmluZSBOIDgwMw0KPiA+ID4gKyNlbmRpZg0KPiA+ID4gK3Vu c2lnbmVkIHZlY3RfYVtOXTsNCj4gPiA+ICt1bnNpZ25lZCB2ZWN0X2JbTl07DQo+ID4gPiArDQo+ ID4gPiArdW5zaWduZWQgdGVzdDQodW5zaWduZWQgeCwgaW50IHkpDQo+ID4gPiArew0KPiA+ID4g KyB1bnNpZ25lZCByZXQgPSAwOw0KPiA+ID4gK2ZvciAoaW50IG8gPSAwOyBvIDwgeTsgbysrKQ0K PiA+ID4gK3sNCj4gPiA+ICsgcmV0ICs9IG87DQo+ID4gPiArIGZvciAoaW50IGkgPSAwOyBpIDwg TjsgaSsrKQ0KPiA+ID4gKyB7DQo+ID4gPiArICAgdmVjdF9iW2ldID0geCArIGk7DQo+ID4gPiAr ICAgaWYgKHZlY3RfYVtpXSA+IHgpDQo+ID4gPiArICAgICBicmVhazsNCj4gPiA+ICsgICB2ZWN0 X2FbaV0gPSB4Ow0KPiA+ID4gKw0KPiA+ID4gKyB9DQo+ID4gPiArfQ0KPiA+ID4gKyByZXR1cm4g cmV0Ow0KPiA+ID4gK30NCj4gPiA+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92 ZWN0L3ZlY3QtZWFybHktYnJlYWtfMTIuYw0KPiA+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVj dC92ZWN0LWVhcmx5LWJyZWFrXzEyLmMNCj4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4g PiBpbmRleA0KPiA+DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu LmNjMTBmMzIzOGYxY2I4ZTEzMDdlMDI0YTNlDQo+ID4gYmNiNWMyNWEzOWQxYjINCj4gPiA+IC0t LSAvZGV2L251bGwNCj4gPiA+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1l YXJseS1icmVha18xMi5jDQo+ID4gPiBAQCAtMCwwICsxLDMxIEBADQo+ID4gPiArLyogeyBkZy1k byBjb21waWxlIH0gKi8NCj4gPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2 ZWN0X2Vhcmx5X2JyZWFrIH0gKi8NCj4gPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRh cmdldCB2ZWN0X2ludCB9ICovDQo+ID4gPiArDQo+ID4gPiArLyogeyBkZy1hZGRpdGlvbmFsLW9w dGlvbnMgIi1PZmFzdCIgfSAqLw0KPiA+ID4gKw0KPiA+ID4gKy8qIHsgZGctZmluYWwgeyBzY2Fu LXRyZWUtZHVtcCAiTE9PUCBWRUNUT1JJWkVEIiAidmVjdCIgfSB9ICovDQo+ID4gPiArDQo+ID4g PiArI2lmbmRlZiBODQo+ID4gPiArI2RlZmluZSBOIDgwMw0KPiA+ID4gKyNlbmRpZg0KPiA+ID4g K3Vuc2lnbmVkIHZlY3RfYVtOXTsNCj4gPiA+ICt1bnNpZ25lZCB2ZWN0X2JbTl07DQo+ID4gPiAr DQo+ID4gPiArdW5zaWduZWQgdGVzdDQodW5zaWduZWQgeCwgaW50IHkpDQo+ID4gPiArew0KPiA+ ID4gKyB1bnNpZ25lZCByZXQgPSAwOw0KPiA+ID4gK2ZvciAoaW50IG8gPSAwOyBvIDwgeTsgbysr KQ0KPiA+ID4gK3sNCj4gPiA+ICsgcmV0ICs9IG87DQo+ID4gPiArIGZvciAoaW50IGkgPSAwOyBp IDwgTjsgaSsrKQ0KPiA+ID4gKyB7DQo+ID4gPiArICAgdmVjdF9iW2ldID0geCArIGk7DQo+ID4g PiArICAgaWYgKHZlY3RfYVtpXSA+IHgpDQo+ID4gPiArICAgICByZXR1cm4gdmVjdF9hW2ldOw0K PiA+ID4gKyAgIHZlY3RfYVtpXSA9IHg7DQo+ID4gPiArDQo+ID4gPiArIH0NCj4gPiA+ICt9DQo+ ID4gPiArIHJldHVybiByZXQ7DQo+ID4gPiArfQ0KPiA+ID4gZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xMy5jDQo+ID4gYi9nY2MvdGVzdHN1 aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMTMuYw0KPiA+ID4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCj4gPiA+IGluZGV4DQo+ID4NCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMC4uNjk2N2I3Mzk1ZWQ3YzE5ZTM4YTQzNmQ2ZQ0KPiA+IGRjZmU3YzE1ODBj NzExMw0KPiA+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ID4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzEzLmMNCj4gPiA+IEBAIC0wLDAgKzEsMjcgQEANCj4g PiA+ICsvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KPiA+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZl Y3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAqLw0KPiA+ID4gKy8qIHsgZGctcmVxdWly ZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCj4gPiA+ICsNCj4gPiA+ICsvKiB7IGRn LWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IiB9ICovDQo+ID4gPiArDQo+ID4gPiArLyogeyBk Zy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8N Cj4gPiA+ICsNCj4gPiA+ICsjaWZuZGVmIE4NCj4gPiA+ICsjZGVmaW5lIE4gODAzDQo+ID4gPiAr I2VuZGlmDQo+ID4gPiArdW5zaWduZWQgdmVjdF9hW05dOw0KPiA+ID4gK3Vuc2lnbmVkIHZlY3Rf YltOXTsNCj4gPiA+ICsNCj4gPiA+ICt1bnNpZ25lZCB0ZXN0NCh1bnNpZ25lZCB4KQ0KPiA+ID4g K3sNCj4gPiA+ICsgdW5zaWduZWQgcmV0ID0gMDsNCj4gPiA+ICsgZm9yIChpbnQgaSA9IDA7IGkg PCBOOyBpKyspDQo+ID4gPiArIHsNCj4gPiA+ICsgICB2ZWN0X2JbaV0gPSB4ICsgaTsNCj4gPiA+ ICsgICBpZiAodmVjdF9hW2ldID4geCkNCj4gPiA+ICsgICAgIHJldHVybiB2ZWN0X2FbaV0gKiB4 Ow0KPiA+ID4gKyAgIHZlY3RfYVtpXSA9IHg7DQo+ID4gPiArDQo+ID4gPiArIH0NCj4gPiA+ICsg cmV0dXJuIHJldDsNCj4gPiA+ICt9DQo+ID4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzE0LmMNCj4gPiBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xNC5jDQo+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KPiA+ID4gaW5kZXgNCj4gPg0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwLi4wM2NjZTVjZjZjYWRlY2I1MjBiNDZiZTY2Ng0KPiA+IGJmNjA4ZTNiYzZhNTExDQo+ ID4gPiAtLS0gL2Rldi9udWxsDQo+ID4gPiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0 L3ZlY3QtZWFybHktYnJlYWtfMTQuYw0KPiA+ID4gQEAgLTAsMCArMSwyNSBAQA0KPiA+ID4gKy8q IHsgZGctZG8gY29tcGlsZSB9ICovDQo+ID4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10 YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovDQo+ID4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVj dGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KPiA+ID4gKw0KPiA+ID4gKy8qIHsgZGctYWRkaXRp b25hbC1vcHRpb25zICItT2Zhc3QiIH0gKi8NCj4gPiA+ICsNCj4gPiA+ICsvKiB7IGRnLWZpbmFs IHsgc2Nhbi10cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KPiA+ID4g Kw0KPiA+ID4gKyNkZWZpbmUgTiA4MDMNCj4gPiA+ICt1bnNpZ25lZCB2ZWN0X2FbTl07DQo+ID4g PiArdW5zaWduZWQgdmVjdF9iW05dOw0KPiA+ID4gKw0KPiA+ID4gK2ludCB0ZXN0NCh1bnNpZ25l ZCB4KQ0KPiA+ID4gK3sNCj4gPiA+ICsgdW5zaWduZWQgcmV0ID0gMDsNCj4gPiA+ICsgZm9yIChp bnQgaSA9IDA7IGkgPCBOOyBpKyspDQo+ID4gPiArIHsNCj4gPiA+ICsgICB2ZWN0X2JbaV0gPSB4 ICsgaTsNCj4gPiA+ICsgICBpZiAodmVjdF9hW2ldID4geCkNCj4gPiA+ICsgICAgIHJldHVybiBp Ow0KPiA+ID4gKyAgIHZlY3RfYVtpXSArPSB4ICogdmVjdF9iW2ldOw0KPiA+ID4gKw0KPiA+ID4g KyB9DQo+ID4gPiArIHJldHVybiByZXQ7DQo+ID4gPiArfQ0KPiA+ID4gZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xNS5jDQo+ID4gYi9nY2Mv dGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMTUuYw0KPiA+ID4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gPiA+IGluZGV4DQo+ID4NCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMC4uZGVjNjg3MmUxMTE1ZmY2NjY5NWY1YTUwMGZmDQo+ID4gYTdj YTAxYzBmOGQzYQ0KPiA+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ID4gKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzE1LmMNCj4gPiA+IEBAIC0wLDAgKzEsMjUg QEANCj4gPiA+ICsvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KPiA+ID4gKy8qIHsgZGctcmVxdWly ZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAqLw0KPiA+ID4gKy8qIHsgZGct cmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCj4gPiA+ICsNCj4gPiA+ICsv KiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IiB9ICovDQo+ID4gPiArDQo+ID4gPiAr LyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9 IH0gKi8NCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIE4gODAzDQo+ID4gPiArdW5zaWduZWQgdmVj dF9hW05dOw0KPiA+ID4gK3Vuc2lnbmVkIHZlY3RfYltOXTsNCj4gPiA+ICsNCj4gPiA+ICtpbnQg dGVzdDQodW5zaWduZWQgeCkNCj4gPiA+ICt7DQo+ID4gPiArIGludCByZXQgPSAwOw0KPiA+ID4g KyBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykNCj4gPiA+ICsgew0KPiA+ID4gKyAgIHZlY3Rf YltpXSA9IHggKyBpOw0KPiA+ID4gKyAgIGlmICh2ZWN0X2FbaV0gPiB4KQ0KPiA+ID4gKyAgICAg cmV0dXJuIGk7DQo+ID4gPiArICAgdmVjdF9hW2ldICs9IHggKiB2ZWN0X2JbaV07DQo+ID4gPiAr DQo+ID4gPiArIH0NCj4gPiA+ICsgcmV0dXJuIHJldDsNCj4gPiA+ICt9DQo+ID4gPiBkaWZmIC0t Z2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzIuYw0KPiA+ IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzIuYw0KPiA+ID4g bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiA+IGluZGV4DQo+ID4NCj4gMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzI2OGY2YWUyNDg1ZDAyNzRmZDg1ZWE1M2MNCj4g PiBjMWU0NGVmNGI4NGQ1Yw0KPiA+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ID4gKysrIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzIuYw0KPiA+ID4gQEAgLTAsMCAr MSwyNyBAQA0KPiA+ID4gKy8qIHsgZGctZG8gY29tcGlsZSB9ICovDQo+ID4gPiArLyogeyBkZy1y ZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovDQo+ID4gPiArLyog eyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KPiA+ID4gKw0KPiA+ ID4gKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3QiIH0gKi8NCj4gPiA+ICsNCj4g PiA+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZl Y3QiIH0gfSAqLw0KPiA+ID4gKw0KPiA+ID4gKyNpbmNsdWRlIDxjb21wbGV4Lmg+DQo+ID4gPiAr DQo+ID4gPiArI2RlZmluZSBOIDEwMjQNCj4gPiA+ICtjb21wbGV4IGRvdWJsZSB2ZWN0X2FbTl07 DQo+ID4gPiArY29tcGxleCBkb3VibGUgdmVjdF9iW05dOw0KPiA+ID4gKw0KPiA+ID4gK2NvbXBs ZXggZG91YmxlIHRlc3Q0KGNvbXBsZXggZG91YmxlIHgpDQo+ID4gPiArew0KPiA+ID4gKyBjb21w bGV4IGRvdWJsZSByZXQgPSAwOw0KPiA+ID4gKyBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykN Cj4gPiA+ICsgew0KPiA+ID4gKyAgIHZlY3RfYltpXSArPSB4ICsgaTsNCj4gPiA+ICsgICBpZiAo dmVjdF9hW2ldID09IHgpDQo+ID4gPiArICAgICByZXR1cm4gaTsNCj4gPiA+ICsgICB2ZWN0X2Fb aV0gKz0geCAqIHZlY3RfYltpXTsNCj4gPiA+ICsNCj4gPiA+ICsgfQ0KPiA+ID4gKyByZXR1cm4g cmV0Ow0KPiA+ID4gK30NCj4gPiA+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92 ZWN0L3ZlY3QtZWFybHktYnJlYWtfMy5jDQo+ID4gYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0 L3ZlY3QtZWFybHktYnJlYWtfMy5jDQo+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ID4g aW5kZXgNCj4gPg0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z YzZkMjhiZDJkNmU2ZTc5NDE0NmJhZjg5DQo+ID4gZTQzYzNiNzAyOTNiN2Q5DQo+ID4gPiAtLS0g L2Rldi9udWxsDQo+ID4gPiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFy bHktYnJlYWtfMy5jDQo+ID4gPiBAQCAtMCwwICsxLDIwIEBADQo+ID4gPiArLyogeyBkZy1kbyBj b21waWxlIH0gKi8NCj4gPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0 X2Vhcmx5X2JyZWFrIH0gKi8NCj4gPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdl dCB2ZWN0X2ludCB9ICovDQo+ID4gPiArDQo+ID4gPiArLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlv bnMgIi1PZmFzdCIgfSAqLw0KPiA+ID4gKw0KPiA+ID4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRy ZWUtZHVtcC1ub3QgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KPiA+ID4gKw0KPiA+ ID4gK3Vuc2lnbmVkIHRlc3Q0KGNoYXIgeCwgY2hhciAqdmVjdCwgaW50IG4pDQo+ID4gPiArew0K PiA+ID4gKyB1bnNpZ25lZCByZXQgPSAwOw0KPiA+ID4gKyBmb3IgKGludCBpID0gMDsgaSA8IG47 IGkrKykNCj4gPiA+ICsgew0KPiA+ID4gKyAgIGlmICh2ZWN0W2ldID4geCkNCj4gPiA+ICsgICAg IHJldHVybiAxOw0KPiA+ID4gKw0KPiA+ID4gKyAgIHZlY3RbaV0gPSB4Ow0KPiA+ID4gKyB9DQo+ ID4gPiArIHJldHVybiByZXQ7DQo+ID4gPiArfQ0KPiA+ID4gZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha180LmMNCj4gPiBiL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha180LmMNCj4gPiA+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0DQo+ID4gPiBpbmRleA0KPiA+DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAuLjIxNmM1NmZhZjMzMDQ0OWJmMTk2OWI3ZTUxDQo+ID4gZmYxZTk0MjcwZGM4 NjENCj4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRn L3ZlY3QvdmVjdC1lYXJseS1icmVha180LmMNCj4gPiA+IEBAIC0wLDAgKzEsMjMgQEANCj4gPiA+ ICsvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KPiA+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3Rp dmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAqLw0KPiA+ID4gKy8qIHsgZGctcmVxdWlyZS1l ZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCj4gPiA+ICsNCj4gPiA+ICsvKiB7IGRnLWFk ZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IiB9ICovDQo+ID4gPiArDQo+ID4gPiArLyogeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wLW5vdCAiTE9PUCBWRUNUT1JJWkVEIiAidmVjdCIgfSB9ICov DQo+ID4gPiArDQo+ID4gPiArI2RlZmluZSBOIDEwMjQNCj4gPiA+ICt1bnNpZ25lZCB2ZWN0W05d Ow0KPiA+ID4gKw0KPiA+ID4gK3Vuc2lnbmVkIHRlc3Q0KHVuc2lnbmVkIHgpDQo+ID4gPiArew0K PiA+ID4gKyB1bnNpZ25lZCByZXQgPSAwOw0KPiA+ID4gKyBmb3IgKGludCBpID0gMDsgaSA8IE47 IGkrKykNCj4gPiA+ICsgew0KPiA+ID4gKyAgIGlmIChpID4gMTYgJiYgdmVjdFtpXSA+IHgpDQo+ ID4gPiArICAgICBicmVhazsNCj4gPiA+ICsNCj4gPiA+ICsgICB2ZWN0W2ldID0geDsNCj4gPiA+ ICsgfQ0KPiA+ID4gKyByZXR1cm4gcmV0Ow0KPiA+ID4gK30NCj4gPiA+IGRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfNS5jDQo+ID4gYi9nY2Mv dGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfNS5jDQo+ID4gPiBuZXcgZmls ZSBtb2RlIDEwMDY0NA0KPiA+ID4gaW5kZXgNCj4gPg0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwLi40YTM2ZDY5NzlkYjFmZDFmOTdiYTJhMjkwZg0KPiA+IDc4YWMz Yjg0ZjZkZTI0DQo+ID4gPiAtLS0gL2Rldi9udWxsDQo+ID4gPiArKysgYi9nY2MvdGVzdHN1aXRl L2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfNS5jDQo+ID4gPiBAQCAtMCwwICsxLDI0IEBA DQo+ID4gPiArLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCj4gPiA+ICsvKiB7IGRnLXJlcXVpcmUt ZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8NCj4gPiA+ICsvKiB7IGRnLXJl cXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovDQo+ID4gPiArDQo+ID4gPiArLyog eyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1PZmFzdCIgfSAqLw0KPiA+ID4gKw0KPiA+ID4gKy8q IHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9PUCBWRUNUT1JJWkVEIiAidmVjdCIgfSB9 ICovDQo+ID4gPiArDQo+ID4gPiArI2RlZmluZSBOIDEwMjQNCj4gPiA+ICt1bnNpZ25lZCB2ZWN0 X2FbTl07DQo+ID4gPiArdW5zaWduZWQgdmVjdF9iW05dOw0KPiA+ID4gKw0KPiA+ID4gK3Vuc2ln bmVkIHRlc3Q0KHVuc2lnbmVkIHgpDQo+ID4gPiArew0KPiA+ID4gKyB1bnNpZ25lZCByZXQgPSAw Ow0KPiA+ID4gKyBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykNCj4gPiA+ICsgew0KPiA+ID4g KyAgIHZlY3RfYltpXSA9IHggKyBpOw0KPiA+ID4gKyAgIGlmICh2ZWN0X2FbaV0gPiB4KQ0KPiA+ ID4gKyAgICAgcmV0dXJuIHZlY3RfYVtpXTsNCj4gPiA+ICsgICB2ZWN0X2FbaV0gPSB4Ow0KPiA+ ID4gKyB9DQo+ID4gPiArIHJldHVybiByZXQ7DQo+ID4gPiArfQ0KPiA+ID4gZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha182LmMNCj4gPiBiL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha182LmMNCj4gPiA+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQo+ID4gPiBpbmRleA0KPiA+DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA5NjMyZDlhZmRhN2UwN2YxYTg0MTc1MTRlDQo+ID4gZjc3 MzU2ZjAwMDQ1YmQNCj4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ICsrKyBiL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha182LmMNCj4gPiA+IEBAIC0wLDAgKzEsMjYg QEANCj4gPiA+ICsvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KPiA+ID4gKy8qIHsgZGctcmVxdWly ZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAqLw0KPiA+ID4gKy8qIHsgZGct cmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCj4gPiA+ICsNCj4gPiA+ICsv KiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IiB9ICovDQo+ID4gPiArDQo+ID4gPiAr LyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLW5vdCAiTE9PUCBWRUNUT1JJWkVEIiAidmVj dCIgfSB9ICovDQo+ID4gPiArDQo+ID4gPiArI2RlZmluZSBOIDEwMjQNCj4gPiA+ICt1bnNpZ25l ZCB2ZWN0X2FbTl07DQo+ID4gPiArdW5zaWduZWQgdmVjdF9iW05dOw0KPiA+ID4gKw0KPiA+ID4g K3Vuc2lnbmVkIHRlc3Q0KHVuc2lnbmVkIHgpDQo+ID4gPiArew0KPiA+ID4gKyB1bnNpZ25lZCBy ZXQgPSAwOw0KPiA+ID4gKyBmb3IgKGludCBpID0gMDsgaSA8IChOLzIpOyBpKz0yKQ0KPiA+ID4g KyB7DQo+ID4gPiArICAgdmVjdF9iW2ldID0geCArIGk7DQo+ID4gPiArICAgdmVjdF9iW2krMV0g PSB4ICsgaSsxOw0KPiA+ID4gKyAgIGlmICh2ZWN0X2FbaV0gPiB4IHx8IHZlY3RfYVtpKzFdID4g eCkNCj4gPiA+ICsgICAgIGJyZWFrOw0KPiA+ID4gKyAgIHZlY3RfYVtpXSArPSB4ICogdmVjdF9i W2ldOw0KPiA+ID4gKyAgIHZlY3RfYVtpKzFdICs9IHggKiB2ZWN0X2JbaSsxXTsNCj4gPiA+ICsg fQ0KPiA+ID4gKyByZXR1cm4gcmV0Ow0KPiA+ID4gK30NCj4gPiA+IGRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfNy5jDQo+ID4gYi9nY2MvdGVz dHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfNy5jDQo+ID4gPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiA+ID4gaW5kZXgNCj4gPg0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwLi4xMGZkOGI0Mjk1MmM0MmYzZDNhMDE0ZGExMA0KPiA+IDM5MzFjYTM5 NDQyM2Q1DQo+ID4gPiAtLS0gL2Rldi9udWxsDQo+ID4gPiArKysgYi9nY2MvdGVzdHN1aXRlL2dj Yy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfNy5jDQo+ID4gPiBAQCAtMCwwICsxLDI3IEBADQo+ ID4gPiArLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCj4gPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZm ZWN0aXZlLXRhcmdldCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8NCj4gPiA+ICsvKiB7IGRnLXJlcXVp cmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovDQo+ID4gPiArDQo+ID4gPiArLyogeyBk Zy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1PZmFzdCIgfSAqLw0KPiA+ID4gKw0KPiA+ID4gKy8qIHsg ZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9PUCBWRUNUT1JJWkVEIiAidmVjdCIgfSB9ICov DQo+ID4gPiArDQo+ID4gPiArI2luY2x1ZGUgPGNvbXBsZXguaD4NCj4gPiA+ICsNCj4gPiA+ICsj ZGVmaW5lIE4gMTAyNA0KPiA+ID4gK2NvbXBsZXggZG91YmxlIHZlY3RfYVtOXTsNCj4gPiA+ICtj b21wbGV4IGRvdWJsZSB2ZWN0X2JbTl07DQo+ID4gPiArDQo+ID4gPiArY29tcGxleCBkb3VibGUg dGVzdDQoY29tcGxleCBkb3VibGUgeCkNCj4gPiA+ICt7DQo+ID4gPiArIGNvbXBsZXggZG91Ymxl IHJldCA9IDA7DQo+ID4gPiArIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQ0KPiA+ID4gKyB7 DQo+ID4gPiArICAgdmVjdF9iW2ldICs9IHggKyBpOw0KPiA+ID4gKyAgIGlmICh2ZWN0X2FbaV0g PT0geCkNCj4gPiA+ICsgICAgIGJyZWFrOw0KPiA+ID4gKyAgIHZlY3RfYVtpXSArPSB4ICogdmVj dF9iW2ldOw0KPiA+ID4gKw0KPiA+ID4gKyB9DQo+ID4gPiArIHJldHVybiByZXQ7DQo+ID4gPiAr fQ0KPiA+ID4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJs eS1icmVha184LmMNCj4gPiBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1i cmVha184LmMNCj4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gPiBpbmRleA0KPiA+DQo+ IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFlNzA2YjI5NTJjZmNl Y2YyMDU0NmE2N2E3DQo+ID4gMzViOGQ5MDJjYmI2MDcNCj4gPiA+IC0tLSAvZGV2L251bGwNCj4g PiA+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha184LmMN Cj4gPiA+IEBAIC0wLDAgKzEsMjcgQEANCj4gPiA+ICsvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0K PiA+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsg fSAqLw0KPiA+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0g Ki8NCj4gPiA+ICsNCj4gPiA+ICsvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IiB9 ICovDQo+ID4gPiArDQo+ID4gPiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09Q IFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8NCj4gPiA+ICsNCj4gPiA+ICsjaW5jbHVkZSA8Y29t cGxleC5oPg0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgTiAxMDI0DQo+ID4gPiArY2hhciB2ZWN0 X2FbTl07DQo+ID4gPiArY2hhciB2ZWN0X2JbTl07DQo+ID4gPiArDQo+ID4gPiArY2hhciB0ZXN0 NChjaGFyIHgsIGNoYXIgKiByZXN0cmljdCByZXMpDQo+ID4gPiArew0KPiA+ID4gKyBjaGFyIHJl dCA9IDA7DQo+ID4gPiArIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQ0KPiA+ID4gKyB7DQo+ ID4gPiArICAgdmVjdF9iW2ldICs9IHggKyBpOw0KPiA+ID4gKyAgIGlmICh2ZWN0X2FbaV0gPiB4 KQ0KPiA+ID4gKyAgICAgYnJlYWs7DQo+ID4gPiArICAgdmVjdF9hW2ldICs9IHggKiB2ZWN0X2Jb aV07DQo+ID4gPiArICAgcmVzW2ldICo9IHZlY3RfYltpXTsNCj4gPiA+ICsgfQ0KPiA+ID4gKyBy ZXR1cm4gcmV0Ow0KPiA+ID4gK30NCj4gPiA+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfOS5jDQo+ID4gYi9nY2MvdGVzdHN1aXRlL2djYy5k Zy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfOS5jDQo+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K PiA+ID4gaW5kZXgNCj4gPg0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwLi4zNTBmMDJmM2M3Y2FlZjQ1N2FkYmUxYmU4MA0KPiA+IDJiYmE1MWNkODE4MzkzDQo+ID4g PiAtLS0gL2Rldi9udWxsDQo+ID4gPiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3Zl Y3QtZWFybHktYnJlYWtfOS5jDQo+ID4gPiBAQCAtMCwwICsxLDI3IEBADQo+ID4gPiArLyogeyBk Zy1kbyBjb21waWxlIH0gKi8NCj4gPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdl dCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8NCj4gPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZl LXRhcmdldCB2ZWN0X2ludCB9ICovDQo+ID4gPiArDQo+ID4gPiArLyogeyBkZy1hZGRpdGlvbmFs LW9wdGlvbnMgIi1PZmFzdCIgfSAqLw0KPiA+ID4gKw0KPiA+ID4gKy8qIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcC1ub3QgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KPiA+ID4g Kw0KPiA+ID4gKyNpZm5kZWYgTg0KPiA+ID4gKyNkZWZpbmUgTiA4MDMNCj4gPiA+ICsjZW5kaWYN Cj4gPiA+ICt1bnNpZ25lZCB2ZWN0X2FbTl07DQo+ID4gPiArdW5zaWduZWQgdmVjdF9iW05dOw0K PiA+ID4gKw0KPiA+ID4gK3Vuc2lnbmVkIHRlc3Q0KHVuc2lnbmVkIHgpDQo+ID4gPiArew0KPiA+ ID4gKyB1bnNpZ25lZCByZXQgPSAwOw0KPiA+ID4gKyBmb3IgKGludCBpID0gMDsgaSA8IE47IGkr KykNCj4gPiA+ICsgew0KPiA+ID4gKyAgIHZlY3RfYVtpXSA9IHggKyBpOw0KPiA+ID4gKyAgIGlm ICh2ZWN0X2FbaV0gPiB4KQ0KPiA+ID4gKyAgICAgYnJlYWs7DQo+ID4gPiArICAgdmVjdF9hW2ld ID0geDsNCj4gPiA+ICsNCj4gPiA+ICsgfQ0KPiA+ID4gKyByZXR1cm4gcmV0Ow0KPiA+ID4gK30N Cj4gPiA+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2xpYi90YXJnZXQtc3VwcG9ydHMuZXhw DQo+IGIvZ2NjL3Rlc3RzdWl0ZS9saWIvdGFyZ2V0LQ0KPiA+IHN1cHBvcnRzLmV4cA0KPiA+ID4g aW5kZXgNCj4gPg0KPiBjY2JiZWU4NDdmNzU1ZDZmMzAxMTZkNWIzOGU0MDI3YTk5OGI0OGZkLi41 Y2JmNTRiZDJhMjNkZmRjNWRjN2IxNDhiDQo+ID4gMGRjNmVkNGM2MzgxNGFlIDEwMDY0NA0KPiA+ ID4gLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9saWIvdGFyZ2V0LXN1cHBvcnRzLmV4cA0KPiA+ID4gKysr IGIvZ2NjL3Rlc3RzdWl0ZS9saWIvdGFyZ2V0LXN1cHBvcnRzLmV4cA0KPiA+ID4gQEAgLTM2NDUs NiArMzY0NSwxOCBAQCBwcm9jIGNoZWNrX2VmZmVjdGl2ZV90YXJnZXRfdmVjdF9pbnQgeyB9IHsN Cj4gPiA+ICAJfX1dDQo+ID4gPiAgfQ0KPiA+ID4NCj4gPiA+ICsjIFJldHVybiAxIGlmIHRoZSB0 YXJnZXQgc3VwcG9ydHMgaGFyZHdhcmUgdmVjdG9yaXphdGlvbiBvZiBlYXJseSBicmVha3MsDQo+ ID4gPiArIyAwIG90aGVyd2lzZS4NCj4gPiA+ICsjDQo+ID4gPiArIyBUaGlzIHdvbid0IGNoYW5n ZSBmb3IgZGlmZmVyZW50IHN1YnRhcmdldHMgc28gY2FjaGUgdGhlIHJlc3VsdC4NCj4gPiA+ICsN Cj4gPiA+ICtwcm9jIGNoZWNrX2VmZmVjdGl2ZV90YXJnZXRfdmVjdF9lYXJseV9icmVhayB7IH0g ew0KPiA+ID4gKyAgICByZXR1cm4gW2NoZWNrX2NhY2hlZF9lZmZlY3RpdmVfdGFyZ2V0X2luZGV4 ZWQgdmVjdF9lYXJseV9icmVhayB7DQo+ID4gPiArICAgICAgZXhwciB7DQo+ID4gPiArCShbaXN0 YXJnZXQgYWFyY2g2NCotKi0qXQ0KPiA+ID4gKwkgJiYgW2NoZWNrX2VmZmVjdGl2ZV90YXJnZXRf YWFyY2g2NF9zdmVdKQ0KPiA+ID4gKwl9fV0NCj4gPiA+ICt9DQo+ID4gPiAgIyBSZXR1cm4gMSBp ZiB0aGUgdGFyZ2V0IHN1cHBvcnRzIGhhcmR3YXJlIHZlY3Rvcml6YXRpb24gb2YgY29tcGxleA0K PiA+IGFkZGl0aW9ucyBvZg0KPiA+ID4gICMgYnl0ZSwgMCBvdGhlcndpc2UuDQo+ID4gPiAgIw0K PiA+ID4gZGlmZiAtLWdpdCBhL2djYy90cmVlLXNjYWxhci1ldm9sdXRpb24uaCBiL2djYy90cmVl LXNjYWxhci1ldm9sdXRpb24uaA0KPiA+ID4gaW5kZXgNCj4gPg0KPiAwZjkwMjA3YmM3MzNkYjNj Zjg1OTc5ZDliMGI5NjJhZWZhMDgzMWQ2Li41YWY3ZDJiYmEwZDYyMTk1NzA0YThkNDFlDQo+ID4g ZjZlNjAwMzI3MTY5NzcwIDEwMDY0NA0KPiA+ID4gLS0tIGEvZ2NjL3RyZWUtc2NhbGFyLWV2b2x1 dGlvbi5oDQo+ID4gPiArKysgYi9nY2MvdHJlZS1zY2FsYXItZXZvbHV0aW9uLmgNCj4gPiA+IEBA IC0yMyw2ICsyMyw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJ ZiBub3Qgc2VlDQo+ID4gPg0KPiA+ID4gIGV4dGVybiB0cmVlIG51bWJlcl9vZl9sYXRjaF9leGVj dXRpb25zIChjbGFzcyBsb29wICopOw0KPiA+ID4gIGV4dGVybiBnY29uZCAqZ2V0X2xvb3BfZXhp dF9jb25kaXRpb24gKGNvbnN0IGNsYXNzIGxvb3AgKik7DQo+ID4gPiArZXh0ZXJuIGdjb25kICpn ZXRfZWRnZV9jb25kaXRpb24gKGVkZ2UpOw0KPiA+ID4NCj4gPiA+ICBleHRlcm4gdm9pZCBzY2V2 X2luaXRpYWxpemUgKHZvaWQpOw0KPiA+ID4gIGV4dGVybiBib29sIHNjZXZfaW5pdGlhbGl6ZWRf cCAodm9pZCk7DQo+ID4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtc2NhbGFyLWV2b2x1dGlvbi5j YyBiL2djYy90cmVlLXNjYWxhci1ldm9sdXRpb24uY2MNCj4gPiA+IGluZGV4DQo+ID4NCj4gN2Uy YTNlOTg2NjE5ZGU4N2U0YWU5ZGFmMTYxOThiZTFmMTNiOTE3Yy4uMzAxMjg3MWRkN2Y5YTdkMTg5 N2Y5NmEyOQ0KPiA+IGIxYjBiMjhkOTBjYjYzZiAxMDA2NDQNCj4gPiA+IC0tLSBhL2djYy90cmVl LXNjYWxhci1ldm9sdXRpb24uY2MNCj4gPiA+ICsrKyBiL2djYy90cmVlLXNjYWxhci1ldm9sdXRp b24uY2MNCj4gPiA+IEBAIC04ODQsNyArODg0LDcgQEAgc2Nldl9kZnM6OmFkZF90b19ldm9sdXRp b24gKHRyZWUgY2hyZWNfYmVmb3JlLA0KPiA+IGVudW0gdHJlZV9jb2RlIGNvZGUsDQo+ID4gPiAg ICByZXR1cm4gcmVzOw0KPiA+ID4gIH0NCj4gPiA+DQo+ID4gPiAtDQo+ID4gPiArDQo+ID4NCj4g Pg0KPiA+ID4gIC8qIEZvbGxvdyB0aGUgc3NhIGVkZ2UgaW50byB0aGUgYmluYXJ5IGV4cHJlc3Np b24gUkhTMCBDT0RFIFJIUzEuDQo+ID4gPiAgICAgUmV0dXJuIHRydWUgaWYgdGhlIHN0cm9uZ2x5 IGNvbm5lY3RlZCBjb21wb25lbnQgaGFzIGJlZW4gZm91bmQuICAqLw0KPiA+ID4NCj4gPiA+IEBA IC0xMjk1LDggKzEyOTUsMTUgQEAgdGFpbF9yZWN1cnNlOg0KPiA+ID4gIGdjb25kICoNCj4gPiA+ ICBnZXRfbG9vcF9leGl0X2NvbmRpdGlvbiAoY29uc3QgY2xhc3MgbG9vcCAqbG9vcCkNCj4gPiA+ ICB7DQo+ID4gPiArICByZXR1cm4gZ2V0X2VkZ2VfY29uZGl0aW9uIChub3JtYWxfZXhpdCAobG9v cCkpOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsvKiBJZiB0aGUgc3RhdGVtZW50IGp1c3Qg YmVmb3JlIHRoZSBFWElUX0VER0UgY29udGFpbnMgYSBjb25kaXRpb24gdGhlbg0KPiA+ID4gKyAg IHJldHVybiB0aGUgY29uZGl0aW9uLCBvdGhlcndpc2UgTlVMTC4gKi8NCj4gPiA+ICsNCj4gPiA+ ICtnY29uZCAqDQo+ID4gPiArZ2V0X2VkZ2VfY29uZGl0aW9uIChlZGdlIGV4aXRfZWRnZSl7DQo+ ID4gPiAgICBnY29uZCAqcmVzID0gTlVMTDsNCj4gPiA+IC0gIGVkZ2UgZXhpdF9lZGdlID0gc2lu Z2xlX2V4aXQgKGxvb3ApOw0KPiA+ID4NCj4gPiA+ICAgIGlmIChkdW1wX2ZpbGUgJiYgKGR1bXBf ZmxhZ3MgJiBUREZfU0NFVikpDQo+ID4gPiAgICAgIGZwcmludGYgKGR1bXBfZmlsZSwgIihnZXRf bG9vcF9leGl0X2NvbmRpdGlvbiBcbiAgIik7DQo+ID4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUt dmVjdC1kYXRhLXJlZnMuY2MgYi9nY2MvdHJlZS12ZWN0LWRhdGEtcmVmcy5jYw0KPiA+ID4gaW5k ZXgNCj4gPg0KPiA0YTIzZDYxNzJhYWExMmFkNzA0OWRjNjI2ZTVjNGFmYmQ1Y2EzZjc0Li4wMmUz NzMxNzE2NzU0MzJjZDMyYzRhNzI0NA0KPiA+IDBlZWJkZmY5ODhiZGNmIDEwMDY0NA0KPiA+ID4g LS0tIGEvZ2NjL3RyZWUtdmVjdC1kYXRhLXJlZnMuY2MNCj4gPiA+ICsrKyBiL2djYy90cmVlLXZl Y3QtZGF0YS1yZWZzLmNjDQo+ID4gPiBAQCAtMjA3Miw3ICsyMDcyLDcgQEAgdmVjdF9lbmhhbmNl X2RhdGFfcmVmc19hbGlnbm1lbnQNCj4gPiAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvKQ0KPiA+ ID4NCj4gPiA+ICAgIC8qIENoZWNrIGlmIHdlIGNhbiBwb3NzaWJseSBwZWVsIHRoZSBsb29wLiAg Ki8NCj4gPiA+ICAgIGlmICghdmVjdF9jYW5fYWR2YW5jZV9pdnNfcCAobG9vcF92aW5mbykNCj4g PiA+IC0gICAgICB8fCAhc2xwZWVsX2Nhbl9kdXBsaWNhdGVfbG9vcF9wIChsb29wLCBzaW5nbGVf ZXhpdCAobG9vcCkpDQo+ID4gPiArICAgICAgfHwgIXNscGVlbF9jYW5fZHVwbGljYXRlX2xvb3Bf cCAobG9vcF92aW5mbywgbm9ybWFsX2V4aXQgKGxvb3ApKQ0KPiA+ID4gICAgICAgIHx8IGxvb3At PmlubmVyKQ0KPiA+ID4gICAgICBkb19wZWVsaW5nID0gZmFsc2U7DQo+ID4gPg0KPiA+ID4gZGlm ZiAtLWdpdCBhL2djYy90cmVlLXZlY3QtbG9vcC1tYW5pcC5jYyBiL2djYy90cmVlLXZlY3QtbG9v cC1tYW5pcC5jYw0KPiA+ID4gaW5kZXgNCj4gPg0KPiAxZDk2MTMwYzk4NWUyZGVmZDE0MWNmZGY2 MDIyMjRjNzNiNGI0MWYyLi4wYjJhNDkyMDc1NGQ4M2FlYjM3OTViNDM1DQo+ID4gNjkzZDYxYWRj ZmU5MmI2IDEwMDY0NA0KPiA+ID4gLS0tIGEvZ2NjL3RyZWUtdmVjdC1sb29wLW1hbmlwLmNjDQo+ ID4gPiArKysgYi9nY2MvdHJlZS12ZWN0LWxvb3AtbWFuaXAuY2MNCj4gPiA+IEBAIC03NzAsNyAr NzcwLDcgQEAgdmVjdF9zZXRfbG9vcF9jb25kaXRpb25fcGFydGlhbF92ZWN0b3JzIChjbGFzcw0K PiBsb29wDQo+ID4gKmxvb3AsDQo+ID4gPiAgICBhZGRfaGVhZGVyX3NlcSAobG9vcCwgaGVhZGVy X3NlcSk7DQo+ID4gPg0KPiA+ID4gICAgLyogR2V0IGEgYm9vbGVhbiByZXN1bHQgdGhhdCB0ZWxs cyB1cyB3aGV0aGVyIHRvIGl0ZXJhdGUuICAqLw0KPiA+ID4gLSAgZWRnZSBleGl0X2VkZ2UgPSBz aW5nbGVfZXhpdCAobG9vcCk7DQo+ID4gPiArICBlZGdlIGV4aXRfZWRnZSA9IG5vcm1hbF9leGl0 IChsb29wKTsNCj4gPiA+ICAgIHRyZWVfY29kZSBjb2RlID0gKGV4aXRfZWRnZS0+ZmxhZ3MgJiBF REdFX1RSVUVfVkFMVUUpID8gRVFfRVhQUiA6DQo+ID4gTkVfRVhQUjsNCj4gPiA+ICAgIHRyZWUg emVyb19jdHJsID0gYnVpbGRfemVyb19jc3QgKFRSRUVfVFlQRSAodGVzdF9jdHJsKSk7DQo+ID4g PiAgICBnY29uZCAqY29uZF9zdG10ID0gZ2ltcGxlX2J1aWxkX2NvbmQgKGNvZGUsIHRlc3RfY3Ry bCwgemVyb19jdHJsLA0KPiA+ID4gQEAgLTc4OSw3ICs3ODksNyBAQCB2ZWN0X3NldF9sb29wX2Nv bmRpdGlvbl9wYXJ0aWFsX3ZlY3RvcnMgKGNsYXNzDQo+IGxvb3ANCj4gPiAqbG9vcCwNCj4gPiA+ ICAgIGlmIChmaW5hbF9pdikNCj4gPiA+ICAgICAgew0KPiA+ID4gICAgICAgIGdhc3NpZ24gKmFz c2lnbiA9IGdpbXBsZV9idWlsZF9hc3NpZ24gKGZpbmFsX2l2LCBvcmlnX25pdGVycyk7DQo+ID4g PiAtICAgICAgZ3NpX2luc2VydF9vbl9lZGdlX2ltbWVkaWF0ZSAoc2luZ2xlX2V4aXQgKGxvb3Ap LCBhc3NpZ24pOw0KPiA+ID4gKyAgICAgIGdzaV9pbnNlcnRfb25fZWRnZV9pbW1lZGlhdGUgKGV4 aXRfZWRnZSwgYXNzaWduKTsNCj4gPiA+ICAgICAgfQ0KPiA+ID4NCj4gPiA+ICAgIHJldHVybiBj b25kX3N0bXQ7DQo+ID4gPiBAQCAtNzk5LDcgKzc5OSw4IEBAIHZlY3Rfc2V0X2xvb3BfY29uZGl0 aW9uX3BhcnRpYWxfdmVjdG9ycyAoY2xhc3MNCj4gbG9vcA0KPiA+ICpsb29wLA0KPiA+ID4gICAg IGxvb3AgaGFuZGxlcyBleGFjdGx5IFZGIHNjYWxhcnMgcGVyIGl0ZXJhdGlvbi4gICovDQo+ID4g Pg0KPiA+ID4gIHN0YXRpYyBnY29uZCAqDQo+ID4gPiAtdmVjdF9zZXRfbG9vcF9jb25kaXRpb25f bm9ybWFsIChjbGFzcyBsb29wICpsb29wLCB0cmVlIG5pdGVycywgdHJlZQ0KPiBzdGVwLA0KPiA+ ID4gK3ZlY3Rfc2V0X2xvb3BfY29uZGl0aW9uX25vcm1hbCAobG9vcF92ZWNfaW5mbyBsb29wX3Zp bmZvLA0KPiA+ID4gKwkJCQljbGFzcyBsb29wICpsb29wLCB0cmVlIG5pdGVycywgdHJlZSBzdGVw LA0KPiA+ID4gIAkJCQl0cmVlIGZpbmFsX2l2LCBib29sIG5pdGVyc19tYXliZV96ZXJvLA0KPiA+ ID4gIAkJCQlnaW1wbGVfc3RtdF9pdGVyYXRvciBsb29wX2NvbmRfZ3NpKQ0KPiA+ID4gIHsNCj4g PiA+IEBAIC04MDcsNyArODA4LDcgQEAgdmVjdF9zZXRfbG9vcF9jb25kaXRpb25fbm9ybWFsIChj bGFzcyBsb29wDQo+ICpsb29wLA0KPiA+IHRyZWUgbml0ZXJzLCB0cmVlIHN0ZXAsDQo+ID4gPiAg ICBnY29uZCAqY29uZF9zdG10Ow0KPiA+ID4gICAgZ2NvbmQgKm9yaWdfY29uZDsNCj4gPiA+ICAg IGVkZ2UgcGUgPSBsb29wX3ByZWhlYWRlcl9lZGdlIChsb29wKTsNCj4gPiA+IC0gIGVkZ2UgZXhp dF9lZGdlID0gc2luZ2xlX2V4aXQgKGxvb3ApOw0KPiA+ID4gKyAgZWRnZSBleGl0X2VkZ2UgPSBu b3JtYWxfZXhpdCAobG9vcCk7DQo+ID4gPiAgICBnaW1wbGVfc3RtdF9pdGVyYXRvciBpbmNyX2dz aTsNCj4gPiA+ICAgIGJvb2wgaW5zZXJ0X2FmdGVyOw0KPiA+ID4gICAgZW51bSB0cmVlX2NvZGUg Y29kZTsNCj4gPiA+IEBAIC04NzIsNyArODczLDExIEBAIHZlY3Rfc2V0X2xvb3BfY29uZGl0aW9u X25vcm1hbCAoY2xhc3MgbG9vcA0KPiA+ICpsb29wLCB0cmVlIG5pdGVycywgdHJlZSBzdGVwLA0K PiA+ID4gIAkgSW4gYm90aCBjYXNlcyB0aGUgbG9vcCBsaW1pdCBpcyBOSVRFUlMgLSBTVEVQLiAg Ki8NCj4gPiA+ICAgICAgICBnaW1wbGVfc2VxIHNlcSA9IE5VTEw7DQo+ID4gPiAgICAgICAgbGlt aXQgPSBmb3JjZV9naW1wbGVfb3BlcmFuZCAobml0ZXJzLCAmc2VxLCB0cnVlLCBOVUxMX1RSRUUp Ow0KPiA+ID4gLSAgICAgIGxpbWl0ID0gZ2ltcGxlX2J1aWxkICgmc2VxLCBNSU5VU19FWFBSLCBU UkVFX1RZUEUgKGxpbWl0KSwgbGltaXQsDQo+ID4gc3RlcCk7DQo+ID4gPiArICAgICAgLyogRm9y IFZMQSBsZWF2ZSBsaW1pdCA9PSBuaXRlcnMuICBUaG91Z2ggSSB3b25kZXIgaWYgbWF5YmUgSSBz aG91bGQNCj4gPiA+ICsJIGZvcmNlIHBhcnRpYWwgbG9vcHMgaGVyZSBhbmQgdXNlDQo+ID4gdmVj dF9zZXRfbG9vcF9jb25kaXRpb25fcGFydGlhbF92ZWN0b3JzDQo+ID4gPiArCSBpbnN0ZWFkLiAg VGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgVkwgY2hlY2sgaXMgdXNlbGVzcyBoZXJlLiAgKi8NCj4g PiA+ICsgICAgICBpZiAoIUxPT1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKSAmJg0K PiA+ICFMT09QX1ZJTkZPX05JVEVSU19LTk9XTl9QIChsb29wX3ZpbmZvKSkNCj4gPiA+ICsJbGlt aXQgPSBnaW1wbGVfYnVpbGQgKCZzZXEsIE1JTlVTX0VYUFIsIFRSRUVfVFlQRSAobGltaXQpLCBs aW1pdCwNCj4gPiBzdGVwKTsNCj4gPiA+ICAgICAgICBpZiAoc2VxKQ0KPiA+ID4gIAl7DQo+ID4g PiAgCSAgYmFzaWNfYmxvY2sgbmV3X2JiID0gZ3NpX2luc2VydF9zZXFfb25fZWRnZV9pbW1lZGlh dGUgKHBlLA0KPiA+IHNlcSk7DQo+ID4gPiBAQCAtOTA3LDcgKzkxMiw4IEBAIHZlY3Rfc2V0X2xv b3BfY29uZGl0aW9uX25vcm1hbCAoY2xhc3MgbG9vcA0KPiAqbG9vcCwNCj4gPiB0cmVlIG5pdGVy cywgdHJlZSBzdGVwLA0KPiA+ID4gICAgZ3NpX2luc2VydF9iZWZvcmUgKCZsb29wX2NvbmRfZ3Np LCBjb25kX3N0bXQsIEdTSV9TQU1FX1NUTVQpOw0KPiA+ID4NCj4gPiA+ICAgIC8qIFJlY29yZCB0 aGUgbnVtYmVyIG9mIGxhdGNoIGl0ZXJhdGlvbnMuICAqLw0KPiA+ID4gLSAgaWYgKGxpbWl0ID09 IG5pdGVycykNCj4gPiA+ICsgIGlmIChsaW1pdCA9PSBuaXRlcnMNCj4gPiA+ICsgICAgICB8fCBM T09QX1ZJTkZPX0VBUkxZX0JSRUFLUyAobG9vcF92aW5mbykpDQo+ID4gPiAgICAgIC8qIENhc2Ug QTogdGhlIGxvb3AgaXRlcmF0ZXMgTklURVJTIHRpbWVzLiAgU3VidHJhY3Qgb25lIHRvIGdldCB0 aGUNCj4gPiA+ICAgICAgICAgbGF0Y2ggY291bnQuICAqLw0KPiA+ID4gICAgICBsb29wLT5uYl9p dGVyYXRpb25zID0gZm9sZF9idWlsZDIgKE1JTlVTX0VYUFIsIG5pdGVyc190eXBlLCBuaXRlcnMs DQo+ID4gPiBAQCAtOTE4LDEwICs5MjQsMTcgQEAgdmVjdF9zZXRfbG9vcF9jb25kaXRpb25fbm9y bWFsIChjbGFzcyBsb29wDQo+ID4gKmxvb3AsIHRyZWUgbml0ZXJzLCB0cmVlIHN0ZXAsDQo+ID4g PiAgICAgIGxvb3AtPm5iX2l0ZXJhdGlvbnMgPSBmb2xkX2J1aWxkMiAoVFJVTkNfRElWX0VYUFIs IG5pdGVyc190eXBlLA0KPiA+ID4gIAkJCQkgICAgICAgbGltaXQsIHN0ZXApOw0KPiA+ID4NCj4g PiA+IC0gIGlmIChmaW5hbF9pdikNCj4gPiA+ICsgIGF1dG9fdmVjPGVkZ2U+IGV4aXRzID0gZ2V0 X2xvb3BfZXhpdF9lZGdlcyAobG9vcCk7DQo+ID4gPiArICAvKiBGb3IgbXVsdGlwbGUgZXhpdHMg d2UndmUgYWxyZWFkeSBtYWludGFpbmVkIExDU1NBIGZvcm0gYW5kIGhhbmRsZWQNCj4gPiA+ICsg ICAgIHRoZSBzY2FsYXIgaXRlcmF0aW9uIHVwZGF0ZSBpbiB0aGUgY29kZSB0aGF0IGRlYWxzIHdp dGggdGhlIG1lcmdlDQo+ID4gPiArICAgICBibG9jayBhbmQgaXRzIHVwZGF0ZWQgZ3VhcmQuICBJ IGNvdWxkIG1vdmUgdGhhdCBjb2RlIGhlcmUgaW5zdGVhZA0KPiA+ID4gKyAgICAgb2YgaW4gdmVj dF91cGRhdGVfaXZzX2FmdGVyX2Vhcmx5X2JyZWFrIGJ1dCBJIGhhdmUgdG8gc3RpbGwgZGVhbA0K PiA+ID4gKyAgICAgd2l0aCB0aGUgdXBkYXRlcyB0byB0aGUgY291bnRlciBgaWAuICBTbyBmb3Ig bm93IEknbGwga2VlcCB0aGVtDQo+ID4gPiArICAgICB0b2dldGhlci4gICovDQo+ID4gPiArICBp ZiAoZmluYWxfaXYgJiYgZXhpdHMubGVuZ3RoICgpID09IDEpDQo+ID4gPiAgICAgIHsNCj4gPiA+ ICAgICAgICBnYXNzaWduICphc3NpZ247DQo+ID4gPiAtICAgICAgZWRnZSBleGl0ID0gc2luZ2xl X2V4aXQgKGxvb3ApOw0KPiA+ID4gKyAgICAgIGVkZ2UgZXhpdCA9IG5vcm1hbF9leGl0IChsb29w KTsNCj4gPiA+ICAgICAgICBnY2NfYXNzZXJ0IChzaW5nbGVfcHJlZF9wIChleGl0LT5kZXN0KSk7 DQo+ID4gPiAgICAgICAgdHJlZSBwaGlfZGVzdA0KPiA+ID4gIAk9IGludGVnZXJfemVyb3AgKGlu aXQpID8gZmluYWxfaXYgOiBjb3B5X3NzYV9uYW1lIChpbmR4X2FmdGVyX2luY3IpOw0KPiA+ID4g QEAgLTk3MiwxMyArOTg1LDE1IEBAIHZlY3Rfc2V0X2xvb3BfY29uZGl0aW9uIChjbGFzcyBsb29w ICpsb29wLA0KPiA+IGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywNCj4gPiA+ICAgIGdjb25kICpv cmlnX2NvbmQgPSBnZXRfbG9vcF9leGl0X2NvbmRpdGlvbiAobG9vcCk7DQo+ID4gPiAgICBnaW1w bGVfc3RtdF9pdGVyYXRvciBsb29wX2NvbmRfZ3NpID0gZ3NpX2Zvcl9zdG10IChvcmlnX2NvbmQp Ow0KPiA+ID4NCj4gPiA+IC0gIGlmIChsb29wX3ZpbmZvICYmIExPT1BfVklORk9fVVNJTkdfUEFS VElBTF9WRUNUT1JTX1ANCj4gPiAobG9vcF92aW5mbykpDQo+ID4gPiArICBpZiAobG9vcF92aW5m bw0KPiA+ID4gKyAgICAgICYmIExPT1BfVklORk9fVVNJTkdfUEFSVElBTF9WRUNUT1JTX1AgKGxv b3BfdmluZm8pKQ0KPiA+ID4gICAgICBjb25kX3N0bXQgPSB2ZWN0X3NldF9sb29wX2NvbmRpdGlv bl9wYXJ0aWFsX3ZlY3RvcnMgKGxvb3AsDQo+IGxvb3BfdmluZm8sDQo+ID4gPiAgCQkJCQkJCSBu aXRlcnMsIGZpbmFsX2l2LA0KPiA+ID4gIAkJCQkJCQkgbml0ZXJzX21heWJlX3plcm8sDQo+ID4g PiAgCQkJCQkJCSBsb29wX2NvbmRfZ3NpKTsNCj4gPiA+ICAgIGVsc2UNCj4gPiA+IC0gICAgY29u ZF9zdG10ID0gdmVjdF9zZXRfbG9vcF9jb25kaXRpb25fbm9ybWFsIChsb29wLCBuaXRlcnMsIHN0 ZXAsDQo+ID4gZmluYWxfaXYsDQo+ID4gPiArICAgIGNvbmRfc3RtdCA9IHZlY3Rfc2V0X2xvb3Bf Y29uZGl0aW9uX25vcm1hbCAobG9vcF92aW5mbywgbG9vcCwNCj4gbml0ZXJzLA0KPiA+ID4gKwkJ CQkJCXN0ZXAsIGZpbmFsX2l2LA0KPiA+ID4gIAkJCQkJCW5pdGVyc19tYXliZV96ZXJvLA0KPiA+ ID4gIAkJCQkJCWxvb3BfY29uZF9nc2kpOw0KPiA+ID4NCj4gPiA+IEBAIC0xMDY2LDcgKzEwODEs NyBAQCBzbHBlZWxfdHJlZV9kdXBsaWNhdGVfbG9vcF90b19lZGdlX2NmZyAoY2xhc3MNCj4gPiBs b29wICpsb29wLA0KPiA+ID4gICAgZWRnZSBleGl0LCBuZXdfZXhpdDsNCj4gPiA+ICAgIGJvb2wg ZHVwbGljYXRlX291dGVyX2xvb3AgPSBmYWxzZTsNCj4gPiA+DQo+ID4gPiAtICBleGl0ID0gc2lu Z2xlX2V4aXQgKGxvb3ApOw0KPiA+ID4gKyAgZXhpdCA9IG5vcm1hbF9leGl0IChsb29wKTsNCj4g PiA+ICAgIGF0X2V4aXQgPSAoZSA9PSBleGl0KTsNCj4gPiA+ICAgIGlmICghYXRfZXhpdCAmJiBl ICE9IGxvb3BfcHJlaGVhZGVyX2VkZ2UgKGxvb3ApKQ0KPiA+ID4gICAgICByZXR1cm4gTlVMTDsN Cj4gPiA+IEBAIC0xMTA0LDExICsxMTE5LDExIEBAIHNscGVlbF90cmVlX2R1cGxpY2F0ZV9sb29w X3RvX2VkZ2VfY2ZnDQo+ID4gKGNsYXNzIGxvb3AgKmxvb3AsDQo+ID4gPiAgICBiYnNbMF0gPSBw cmVoZWFkZXI7DQo+ID4gPiAgICBuZXdfYmJzID0gWE5FV1ZFQyAoYmFzaWNfYmxvY2ssIHNjYWxh cl9sb29wLT5udW1fbm9kZXMgKyAxKTsNCj4gPiA+DQo+ID4gPiAtICBleGl0ID0gc2luZ2xlX2V4 aXQgKHNjYWxhcl9sb29wKTsNCj4gPiA+ICsgIGV4aXQgPSBub3JtYWxfZXhpdCAoc2NhbGFyX2xv b3ApOw0KPiA+ID4gICAgY29weV9iYnMgKGJicywgc2NhbGFyX2xvb3AtPm51bV9ub2RlcyArIDEs IG5ld19iYnMsDQo+ID4gPiAgCSAgICAmZXhpdCwgMSwgJm5ld19leGl0LCBOVUxMLA0KPiA+ID4g IAkgICAgYXRfZXhpdCA/IGxvb3AtPmxhdGNoIDogZS0+c3JjLCB0cnVlKTsNCj4gPiA+IC0gIGV4 aXQgPSBzaW5nbGVfZXhpdCAobG9vcCk7DQo+ID4gPiArICBleGl0ID0gbm9ybWFsX2V4aXQgKGxv b3ApOw0KPiA+ID4gICAgYmFzaWNfYmxvY2sgbmV3X3ByZWhlYWRlciA9IG5ld19iYnNbMF07DQo+ ID4gPg0KPiA+ID4gICAgLyogQmVmb3JlIGluc3RhbGxpbmcgUEhJIGFyZ3VtZW50cyBtYWtlIHN1 cmUgdGhhdCB0aGUgZWRnZXMNCj4gPiA+IEBAIC0xMTc2LDExICsxMTkxLDUzIEBAIHNscGVlbF90 cmVlX2R1cGxpY2F0ZV9sb29wX3RvX2VkZ2VfY2ZnDQo+ID4gKGNsYXNzIGxvb3AgKmxvb3AsDQo+ ID4gPiAgCSAgICAgIGFkZF9waGlfYXJnIChwaGksIG9yaWdfYXJnLCBuZXdfZXhpdCwgb3JpZ19s b2N1cyk7DQo+ID4gPiAgCSAgICB9DQo+ID4gPiAgCX0NCj4gPiA+ICsNCj4gPiA+ICsgICAgICAv KiBJZiBoYXZlIG11bHRpcGxlIGV4aXN0LCB3ZSBub3cgbmVlZCB0byBwb2ludCB0aGUgYWRkaXRp b25hbCBleGl0cw0KPiA+ID4gKwkgZnJvbSB0aGUgb2xkIGxvb3AgdG8gdGhlIGxvb3AgcHJlLWhl YWRlciBvZiB0aGUgbmV3IGNvcGllZCBsb29wLg0KPiA+ID4gKwkgQ3VycmVudGx5IHdlIG9ubHkg c3VwcG9ydCBzaW1wbGUgZWFybHkgYnJlYWsgdmVjdG9yaXphdGlvbiBzbyBhbGwNCj4gPiA+ICsJ IGFkZGl0aW9uYWwgZXhpdHMgbXVzdCBleGl0IHRoZSBsb29wLiBBZGRpdGlvbmFsbHkgd2UgY2Fu IG9ubHkgcGxhY2UNCj4gPiA+ICsJIGNvcGllcyBhdCB0aGUgZW5kLiAgaS5lLiB3ZSBjYW5ub3Qg ZG8gcHJvbG9ndWUgcGVlbGluZy4gICovDQo+ID4gPiArICAgICAgYXV0b192ZWM8ZWRnZT4gZXhp dHMgPSBnZXRfbG9vcF9leGl0X2VkZ2VzIChsb29wKTsNCj4gPiA+ICsgICAgICBib29sIG11bHRp cGxlX2V4aXRzX3AgPSBleGl0cy5sZW5ndGggKCkgPiAxOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAg IC8qIENoZWNrIHRvIHNlZSBpZiBhbGwgb2YgdGhlIGV4aXRzIHBvaW50IHRvIHRoZSBsb29wIGhl YWRlci4gIElmIHRoZXkNCj4gPiA+ICsJIGRvbid0IHRoZW4gd2UgaGF2ZSBhbiBpbnRlcm1lZGlh dGUgQkIgdGhhdCdzIG5vIGxvbmdlciB1c2VmdWwgYWZ0ZXINCj4gPiA+ICsJIHRoZSBjb3B5IGFu ZCB3ZSBzaG91bGQgcmVtb3ZlIGl0LiAqLw0KPiA+ID4gKyAgICAgIGJvb2wgaW1tX2V4aXQgPSB0 cnVlOw0KPiA+ID4gKyAgICAgIGZvciAoYXV0byBleGl0IDogZXhpdHMpDQo+ID4gPiArCXsNCj4g PiA+ICsJICAgaW1tX2V4aXQgPSBpbW1fZXhpdCAmJiBleGl0LT5kZXN0ID09IGxvb3AtPmhlYWRl cjsNCj4gPiA+ICsJICAgaWYgKCFpbW1fZXhpdCkNCj4gPiA+ICsJICAgICBicmVhazsNCj4gPiA+ ICsJfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBleGl0 cy5sZW5ndGggKCk7IGkrKykNCj4gPiA+ICsJew0KPiA+ID4gKwkgIHJlZGlyZWN0X2VkZ2VfYW5k X2JyYW5jaCAoZXhpdHNbaV0sIG5ld19wcmVoZWFkZXIpOw0KPiA+ID4gKwkgIGZsdXNoX3BlbmRp bmdfc3RtdHMgKGV4aXRzW2ldKTsNCj4gPiA+ICsJfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAgIC8q IE1haW4gZXhpdCBtdXN0IGJlIHRoZSBsYXN0IHRvIGJlIHJld3JpdHRlbiBhcyBpdCdzIHRoZSBm aXJzdCBwaGkgbm9kZQ0KPiA+ID4gKwkgZW50cnkuICBUaGUgcmVzdCBhcmUgaW4gYXJyYXkgb3Jk ZXIuICAqLw0KPiA+ID4gICAgICAgIHJlZGlyZWN0X2VkZ2VfYW5kX2JyYW5jaF9mb3JjZSAoZSwg bmV3X3ByZWhlYWRlcik7DQo+ID4gPiAgICAgICAgZmx1c2hfcGVuZGluZ19zdG10cyAoZSk7DQo+ ID4gPiAtICAgICAgc2V0X2ltbWVkaWF0ZV9kb21pbmF0b3IgKENESV9ET01JTkFUT1JTLCBuZXdf cHJlaGVhZGVyLCBlLQ0KPiA+ID5zcmMpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgIC8qIE9ubHkg dXBkYXRlIHRoZSBkb21pbmF0b3JzIG9mIHRoZSBuZXdfcHJlaGVhZGVyIHRvIHRoZSBvbGQgZXhp dA0KPiBpZg0KPiA+ID4gKwkgd2UgaGF2ZSBlZmZlY3RpdmVseSBhIHNpbmdsZSBleGl0LiAgKi8N Cj4gPiA+ICsgICAgICBpZiAoIW11bHRpcGxlX2V4aXRzX3ANCj4gPiA+ICsJICB8fCBleGl0c1sx XS0+c3JjICE9IEVER0VfUFJFRCAoZXhpdHNbMF0tPnNyYywgMCktPnNyYykNCj4gPiA+ICsgICAg ICAgIHNldF9pbW1lZGlhdGVfZG9taW5hdG9yIChDRElfRE9NSU5BVE9SUywgbmV3X3ByZWhlYWRl ciwgZS0NCj4gPiA+c3JjKTsNCj4gPiA+ICsgICAgICBlbHNlDQo+ID4gPiArCXNldF9pbW1lZGlh dGVfZG9taW5hdG9yIChDRElfRE9NSU5BVE9SUywgbmV3X3ByZWhlYWRlciwNCj4gPiBleGl0c1sx XS0+c3JjKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICBhdXRvX3ZlYzxlZGdlPiBuZXdfZXhpdHMg PSBnZXRfbG9vcF9leGl0X2VkZ2VzIChuZXdfbG9vcCk7DQo+ID4gPiAgICAgICAgaWYgKHdhc19p bW1fZG9tIHx8IGR1cGxpY2F0ZV9vdXRlcl9sb29wKQ0KPiA+ID4gLQlzZXRfaW1tZWRpYXRlX2Rv bWluYXRvciAoQ0RJX0RPTUlOQVRPUlMsIGV4aXRfZGVzdCwNCj4gPiBuZXdfZXhpdC0+c3JjKTsN Cj4gPiA+ICsJew0KPiA+ID4gKwkgIGlmICghbXVsdGlwbGVfZXhpdHNfcCkNCj4gPiA+ICsJICAg IHNldF9pbW1lZGlhdGVfZG9taW5hdG9yIChDRElfRE9NSU5BVE9SUywgZXhpdF9kZXN0LA0KPiA+ IG5ld19leGl0LT5zcmMpOw0KPiA+ID4gKwkgIGVsc2UNCj4gPiA+ICsJICAgIHNldF9pbW1lZGlh dGVfZG9taW5hdG9yIChDRElfRE9NSU5BVE9SUywgZXhpdF9kZXN0LA0KPiA+IG5ld19leGl0c1sx XS0+c3JjKTsNCj4gPiA+ICsJfQ0KPiA+ID4NCj4gPiA+ICAgICAgICAvKiBBbmQgcmVtb3ZlIHRo ZSBub24tbmVjZXNzYXJ5IGZvcndhcmRlciBhZ2Fpbi4gIEtlZXAgdGhlIG90aGVyDQo+ID4gPiAg ICAgICAgICAgb25lIHNvIHdlIGhhdmUgYSBwcm9wZXIgcHJlLWhlYWRlciBmb3IgdGhlIGxvb3Ag YXQgdGhlIGV4aXQgZWRnZS4NCj4gKi8NCj4gPiA+IEBAIC0xMTg5LDYgKzEyNDYsMzkgQEAgc2xw ZWVsX3RyZWVfZHVwbGljYXRlX2xvb3BfdG9fZWRnZV9jZmcNCj4gKGNsYXNzDQo+ID4gbG9vcCAq bG9vcCwNCj4gPiA+ICAgICAgICBkZWxldGVfYmFzaWNfYmxvY2sgKHByZWhlYWRlcik7DQo+ID4g PiAgICAgICAgc2V0X2ltbWVkaWF0ZV9kb21pbmF0b3IgKENESV9ET01JTkFUT1JTLCBzY2FsYXJf bG9vcC0+aGVhZGVyLA0KPiA+ID4gIAkJCSAgICAgICBsb29wX3ByZWhlYWRlcl9lZGdlIChzY2Fs YXJfbG9vcCktPnNyYyk7DQo+ID4gPiArDQo+ID4gPiArICAgICAgLyogRmluYWxseSBhZnRlciB3 aXJpbmcgdGhlIG5ldyBlcGlsb2d1ZSB3ZSBuZWVkIHRvIHVwZGF0ZSBpdHMgbWFpbg0KPiA+IGV4 aXQNCj4gPiA+ICsJIHRvIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBleGl0IHdlIHJlY29yZGVkLiAg T3RoZXIgZXhpdHMgYXJlIGFscmVhZHkNCj4gPiA+ICsJIGNvcnJlY3QuICAqLw0KPiA+ID4gKyAg ICAgIGlmICghaW1tX2V4aXQgJiYgbXVsdGlwbGVfZXhpdHNfcCkNCj4gPiA+ICsJew0KPiA+ID4g KwkgIC8qIEZvciBub3cgd2UgZXhwZWN0IGF0IG1vc3QgYSBzaW5nbGUgc3VjY2Vzc29yIGhlcmUs IGJ1dCB3ZSBtaWdodA0KPiA+IGJlDQo+ID4gPiArCSAgICAgYWJsZSB0byBleHRlbmQgdGhpcyB0 byBtdWx0aXBsZS4gICovDQo+ID4gPiArCSAgaWYgKHNpbmdsZV9zdWNjX3AgKG5ld19leGl0LT5k ZXN0KSAmJiBzaW5nbGVfcHJlZF9wIChuZXdfZXhpdC0NCj4gPiA+ZGVzdCkpDQo+ID4gPiArCSAg ICB7DQo+ID4gPiArCSAgICAgIGVkZ2UgZXhpdF9lZGdlID0gc2luZ2xlX3N1Y2NfZWRnZSAobmV3 X2V4aXQtPmRlc3QpOw0KPiA+ID4gKwkgICAgICAvKiBOb3cgY29ycmVjdCB0aGUgZG9taW5hdG9y cyB0aGF0IHdlcmUgbWVzc2VkIHVwIGR1cmluZyB0aGUNCj4gPiBjb3B5aW5nDQo+ID4gPiArCQkg YXMgdGhlIENGRyB3YXMgdHdlYWtlZCBhIGJpdC4gICovDQo+ID4gPiArCSAgICAgIC8qIFRoZSBt YWluIGV4aXQgaXMgbm93IGRvbWluYXRlZCBieSBhIG5ldyBmYWxsIHRocm91Z2ggZWRnZS4gICov DQo+ID4gPiArCSAgICAgIHNldF9pbW1lZGlhdGVfZG9taW5hdG9yIChDRElfRE9NSU5BVE9SUywg ZXhpdF9lZGdlLT5zcmMsDQo+ID4gPiArCQkJCSAgICAgICBuZXdfZXhpdHNbMF0tPnNyYyk7DQo+ ID4gPiArCSAgICAgIC8qIElmIHRoaXMgaXMgYSBmYWxsIHRocm91Z2ggZWRnZSB0aGVuIGRvbid0 IHVwZGF0ZSBkb21zLiAgKi8NCj4gPiA+ICsJICAgICAgaWYgKCFlbXB0eV9ibG9ja19wIChleGl0 X2VkZ2UtPnNyYykpDQo+ID4gPiArCQlzZXRfaW1tZWRpYXRlX2RvbWluYXRvciAoQ0RJX0RPTUlO QVRPUlMsIGV4aXRfZWRnZS0NCj4gPiA+ZGVzdCwNCj4gPiA+ICsJCQkJCSBuZXdfZXhpdHNbMV0t PnNyYyk7DQo+ID4gPiArCSAgICB9DQo+ID4gPiArDQo+ID4gPiArCSAgLyogVGhlIGV4aXRzIGZy b20gdGhlIEJCIHdpdGggdGhlIGVhcmx5IGV4aXQgZG9taW5hdGUgdGhlIG5ldw0KPiA+IGZ1bmN0 aW9uDQo+ID4gPiArCSAgICAgZXhpdCBlZGdlIGFuZCBhbHNvIHRoZSBzZWNvbmQgcGFydCBvZiB0 aGUgbG9vcC4gIFRoZSBlZGdlcyB3ZXJlDQo+ID4gPiArCSAgICAgY29waWVkIGNvcnJlY3RseSBi dXQgdGhlIGRvbXMgYXJlIHdyb25nIGJlY2F1c2UgZHVyaW5nIHRoZQ0KPiA+IGNvcHlpbmcNCj4g PiA+ICsJICAgICBzb21lIG9mIHRoZSBpbnRlcm1lZGlhdGUgZWRnZXMgYXJlIHJld3JpdHRlbi4g ICAqLw0KPiA+ID4gKwkgIHNldF9pbW1lZGlhdGVfZG9taW5hdG9yIChDRElfRE9NSU5BVE9SUywg bmV3X2V4aXRzWzBdLT5zcmMsDQo+ID4gPiArCQkJCSAgIG5ld19leGl0c1sxXS0+c3JjKTsNCj4g PiA+ICsJICBzZXRfaW1tZWRpYXRlX2RvbWluYXRvciAoQ0RJX0RPTUlOQVRPUlMsIG5ld19leGl0 c1swXS0NCj4gPiA+ZGVzdCwNCj4gPiA+ICsJCQkJICAgbmV3X2V4aXRzWzBdLT5zcmMpOw0KPiA+ ID4gKwkgIHNldF9pbW1lZGlhdGVfZG9taW5hdG9yIChDRElfRE9NSU5BVE9SUywgbmV3X2V4aXRz WzFdLQ0KPiA+ID5kZXN0LA0KPiA+ID4gKwkJCQkgICBuZXdfZXhpdHNbMV0tPnNyYyk7DQo+ID4g PiArCX0NCj4gPiA+ICAgICAgfQ0KPiA+ID4gICAgZWxzZSAvKiBBZGQgdGhlIGNvcHkgYXQgZW50 cnkuICAqLw0KPiA+ID4gICAgICB7DQo+ID4gPiBAQCAtMTMxMCwyMCArMTQwMCwyNCBAQCBzbHBl ZWxfYWRkX2xvb3BfZ3VhcmQgKGJhc2ljX2Jsb2NrDQo+IGd1YXJkX2JiLA0KPiA+IHRyZWUgY29u ZCwNCj4gPiA+ICAgKi8NCj4gPiA+DQo+ID4gPiAgYm9vbA0KPiA+ID4gLXNscGVlbF9jYW5fZHVw bGljYXRlX2xvb3BfcCAoY29uc3QgY2xhc3MgbG9vcCAqbG9vcCwgY29uc3RfZWRnZSBlKQ0KPiA+ ID4gK3NscGVlbF9jYW5fZHVwbGljYXRlX2xvb3BfcCAoY29uc3QgbG9vcF92ZWNfaW5mbyBsb29w X3ZpbmZvLA0KPiA+IGNvbnN0X2VkZ2UgZSkNCj4gPiA+ICB7DQo+ID4gPiAtICBlZGdlIGV4aXRf ZSA9IHNpbmdsZV9leGl0IChsb29wKTsNCj4gPiA+ICsgIGNsYXNzIGxvb3AgKmxvb3AgPSBMT09Q X1ZJTkZPX0xPT1AgKGxvb3BfdmluZm8pOw0KPiA+ID4gKyAgZWRnZSBleGl0X2UgPSBub3JtYWxf ZXhpdCAobG9vcCk7DQo+ID4gPiAgICBlZGdlIGVudHJ5X2UgPSBsb29wX3ByZWhlYWRlcl9lZGdl IChsb29wKTsNCj4gPiA+ICAgIGdjb25kICpvcmlnX2NvbmQgPSBnZXRfbG9vcF9leGl0X2NvbmRp dGlvbiAobG9vcCk7DQo+ID4gPiAgICBnaW1wbGVfc3RtdF9pdGVyYXRvciBsb29wX2V4aXRfZ3Np ID0gZ3NpX2xhc3RfYmIgKGV4aXRfZS0+c3JjKTsNCj4gPiA+ICAgIHVuc2lnbmVkIGludCBudW1f YmIgPSBsb29wLT5pbm5lcj8gNSA6IDI7DQo+ID4gPg0KPiA+ID4gKyAgaWYgKExPT1BfVklORk9f RUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKSkNCj4gPiA+ICsgICAgbnVtX2JiICs9IDE7DQo+ID4g PiArDQo+ID4gPiAgICAvKiBBbGwgbG9vcHMgaGF2ZSBhbiBvdXRlciBzY29wZTsgdGhlIG9ubHkg Y2FzZSBsb29wLT5vdXRlciBpcyBOVUxMIGlzIGZvcg0KPiA+ID4gICAgICAgdGhlIGZ1bmN0aW9u IGl0c2VsZi4gICovDQo+ID4gPiAgICBpZiAoIWxvb3Bfb3V0ZXIgKGxvb3ApDQo+ID4gPiAgICAg ICAgfHwgbG9vcC0+bnVtX25vZGVzICE9IG51bV9iYg0KPiA+ID4gICAgICAgIHx8ICFlbXB0eV9i bG9ja19wIChsb29wLT5sYXRjaCkNCj4gPiA+IC0gICAgICB8fCAhc2luZ2xlX2V4aXQgKGxvb3Ap DQo+ID4gPiArICAgICAgfHwgKCFzaW5nbGVfZXhpdCAobG9vcCkgJiYgIUxPT1BfVklORk9fRUFS TFlfQlJFQUtTDQo+IChsb29wX3ZpbmZvKSkNCj4gPiA+ICAgICAgICAvKiBWZXJpZnkgdGhhdCBu ZXcgbG9vcCBleGl0IGNvbmRpdGlvbiBjYW4gYmUgdHJpdmlhbGx5IG1vZGlmaWVkLiAgKi8NCj4g PiA+ICAgICAgICB8fCAoIW9yaWdfY29uZCB8fCBvcmlnX2NvbmQgIT0gZ3NpX3N0bXQgKGxvb3Bf ZXhpdF9nc2kpKQ0KPiA+ID4gICAgICAgIHx8IChlICE9IGV4aXRfZSAmJiBlICE9IGVudHJ5X2Up KQ0KPiA+ID4gQEAgLTE1MjgsNiArMTYyMiwxMiBAQCB2ZWN0X3VwZGF0ZV9pdnNfYWZ0ZXJfdmVj dG9yaXplcg0KPiA+IChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+ID4gPiAgICBncGhpX2l0 ZXJhdG9yIGdzaSwgZ3NpMTsNCj4gPiA+ICAgIGNsYXNzIGxvb3AgKmxvb3AgPSBMT09QX1ZJTkZP X0xPT1AgKGxvb3BfdmluZm8pOw0KPiA+ID4gICAgYmFzaWNfYmxvY2sgdXBkYXRlX2JiID0gdXBk YXRlX2UtPmRlc3Q7DQo+ID4gPiArDQo+ID4gPiArICAvKiBGb3IgZWFybHkgZXhpdHMgd2UnbGwg dXBkYXRlIHRoZSBJVnMgaW4NCj4gPiA+ICsgICAgIHZlY3RfdXBkYXRlX2l2c19hZnRlcl9lYXJs eV9icmVhay4gICovDQo+ID4gPiArICBpZiAoTE9PUF9WSU5GT19FQVJMWV9CUkVBS1MgKGxvb3Bf dmluZm8pKQ0KPiA+ID4gKyAgICByZXR1cm47DQo+ID4gPiArDQo+ID4gPiAgICBiYXNpY19ibG9j ayBleGl0X2JiID0gc2luZ2xlX2V4aXQgKGxvb3ApLT5kZXN0Ow0KPiA+ID4NCj4gPiA+ICAgIC8q IE1ha2Ugc3VyZSB0aGVyZSBleGlzdHMgYSBzaW5nbGUtcHJlZGVjZXNzb3IgZXhpdCBiYjogICov DQo+ID4gPiBAQCAtMTYxMyw2ICsxNzEzLDE4NiBAQCB2ZWN0X3VwZGF0ZV9pdnNfYWZ0ZXJfdmVj dG9yaXplcg0KPiA+IChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+ID4gPiAgICAgICAgLyog Rml4IHBoaSBleHByZXNzaW9ucyBpbiB0aGUgc3VjY2Vzc29yIGJiLiAgKi8NCj4gPiA+ICAgICAg ICBhZGp1c3RfcGhpX2FuZF9kZWJ1Z19zdG10cyAocGhpMSwgdXBkYXRlX2UsIG5pX25hbWUpOw0K PiA+ID4gICAgICB9DQo+ID4gPiArICByZXR1cm47DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4g Ky8qICAgRnVuY3Rpb24gdmVjdF91cGRhdGVfaXZzX2FmdGVyX2Vhcmx5X2JyZWFrLg0KPiA+ID4g Kw0KPiA+ID4gKyAgICAgIkFkdmFuY2UiIHRoZSBpbmR1Y3Rpb24gdmFyaWFibGVzIG9mIExPT1Ag dG8gdGhlIHZhbHVlIHRoZXkgc2hvdWxkDQo+ID4gdGFrZQ0KPiA+ID4gKyAgICAgYWZ0ZXIgdGhl IGV4ZWN1dGlvbiBvZiBMT09QLiAgVGhpcyBpcyBjdXJyZW50bHkgbmVjZXNzYXJ5IGJlY2F1c2Ug dGhlDQo+ID4gPiArICAgICB2ZWN0b3JpemVyIGRvZXMgbm90IGhhbmRsZSBpbmR1Y3Rpb24gdmFy aWFibGVzIHRoYXQgYXJlIHVzZWQgYWZ0ZXIgdGhlDQo+ID4gPiArICAgICBsb29wLiAgU3VjaCBh IHNpdHVhdGlvbiBvY2N1cnMgd2hlbiB0aGUgbGFzdCBpdGVyYXRpb25zIG9mIExPT1AgYXJlDQo+ ID4gPiArICAgICBwZWVsZWQsIGJlY2F1c2Ugb2YgdGhlIGVhcmx5IGV4aXQuICBXaXRoIGFuIGVh cmx5IGV4aXQgd2UgYWx3YXlzIHBlZWwNCj4gdGhlDQo+ID4gPiArICAgICBsb29wLg0KPiA+ID4g Kw0KPiA+ID4gKyAgICAgSW5wdXQ6DQo+ID4gPiArICAgICAtIExPT1BfVklORk8gLSBhIGxvb3Ag aW5mbyBzdHJ1Y3R1cmUgZm9yIHRoZSBsb29wIHRoYXQgaXMgZ29pbmcgdG8gYmUNCj4gPiA+ICsJ CSAgICB2ZWN0b3JpemVkLiBUaGUgbGFzdCBmZXcgaXRlcmF0aW9ucyBvZiBMT09QIHdlcmUgcGVl bGVkLg0KPiA+ID4gKyAgICAgLSBMT09QIC0gYSBsb29wIHRoYXQgaXMgZ29pbmcgdG8gYmUgdmVj dG9yaXplZC4gVGhlIGxhc3QgZmV3IGl0ZXJhdGlvbnMNCj4gPiA+ICsJICAgICAgb2YgTE9PUCB3 ZXJlIHBlZWxlZC4NCj4gPiA+ICsgICAgIC0gVkYgLSBUaGUgbG9vcCB2ZWN0b3JpemF0aW9uIGZh Y3Rvci4NCj4gPiA+ICsgICAgIC0gTklURVJTX09SSUcgLSB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlv bnMgdGhhdCBMT09QIGV4ZWN1dGVzDQo+IChiZWZvcmUNCj4gPiBpdCBpcw0KPiA+ID4gKwkJICAg ICB2ZWN0b3JpemVkKS4gaS5lLCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBpdnMgc2hvdWxkIGJl DQo+ID4gPiArCQkgICAgIGJ1bXBlZC4NCj4gPiA+ICsgICAgIC0gTklURVJTX1ZFQ1RPUiAtIFRo ZSBudW1iZXIgb2YgaXRlcmF0aW9ucyB0aGF0IHRoZSB2ZWN0b3IgTE9PUA0KPiA+IGV4ZWN1dGVz Lg0KPiA+ID4gKyAgICAgLSBVUERBVEVfRSAtIGEgc3VjY2Vzc29yIGVkZ2Ugb2YgTE9PUC0+ZXhp dCB0aGF0IGlzIG9uIHRoZSAob25seSkNCj4gcGF0aA0KPiA+ID4gKwkJICBjb21pbmcgb3V0IGZy b20gTE9PUCBvbiB3aGljaCB0aGVyZSBhcmUgdXNlcyBvZiB0aGUgTE9PUA0KPiA+IGl2cw0KPiA+ ID4gKwkJICAodGhpcyBpcyB0aGUgcGF0aCBmcm9tIExPT1AtPmV4aXQgdG8gZXBpbG9nX2xvb3At DQo+ID4gPnByZWhlYWRlcikuDQo+ID4gPiArDQo+ID4gPiArCQkgIFRoZSBuZXcgZGVmaW5pdGlv bnMgb2YgdGhlIGl2cyBhcmUgcGxhY2VkIGluIExPT1AtPmV4aXQuDQo+ID4gPiArCQkgIFRoZSBw aGkgYXJncyBhc3NvY2lhdGVkIHdpdGggdGhlIGVkZ2UgVVBEQVRFX0UgaW4gdGhlIGJiDQo+ID4g PiArCQkgIFVQREFURV9FLT5kZXN0IGFyZSB1cGRhdGVkIGFjY29yZGluZ2x5Lg0KPiA+ID4gKw0K PiA+ID4gKyAgICAgT3V0cHV0Og0KPiA+ID4gKyAgICAgICAtIElmIGF2YWlsYWJsZSwgdGhlIExD U1NBIHBoaSBub2RlIGZvciB0aGUgbG9vcCBJViB0ZW1wLg0KPiA+ID4gKw0KPiA+ID4gKyAgICAg QXNzdW1wdGlvbiAxOiBMaWtlIHRoZSByZXN0IG9mIHRoZSB2ZWN0b3JpemVyLCB0aGlzIGZ1bmN0 aW9uIGFzc3VtZXMNCj4gPiA+ICsgICAgIGEgc2luZ2xlIGxvb3AgZXhpdCB0aGF0IGhhcyBhIHNp bmdsZSBwcmVkZWNlc3Nvci4NCj4gPiA+ICsNCj4gPiA+ICsgICAgIEFzc3VtcHRpb24gMjogVGhl IHBoaSBub2RlcyBpbiB0aGUgTE9PUCBoZWFkZXIgYW5kIGluIHVwZGF0ZV9iYg0KPiBhcmUNCj4g PiA+ICsgICAgIG9yZ2FuaXplZCBpbiB0aGUgc2FtZSBvcmRlci4NCj4gPiA+ICsNCj4gPiA+ICsg ICAgIEFzc3VtcHRpb24gMzogVGhlIGFjY2VzcyBmdW5jdGlvbiBvZiB0aGUgaXZzIGlzIHNpbXBs ZSBlbm91Z2ggKHNlZQ0KPiA+ID4gKyAgICAgdmVjdF9jYW5fYWR2YW5jZV9pdnNfcCkuICBUaGlz IGFzc3VtcHRpb24gd2lsbCBiZSByZWxheGVkIGluIHRoZQ0KPiA+IGZ1dHVyZS4NCj4gPiA+ICsN Cj4gPiA+ICsgICAgIEFzc3VtcHRpb24gNDogRXhhY3RseSBvbmUgb2YgdGhlIHN1Y2Nlc3NvcnMg b2YgTE9PUCBleGl0LWJiIGlzIG9uIGENCj4gPiBwYXRoDQo+ID4gPiArICAgICBjb21pbmcgb3V0 IG9mIExPT1Agb24gd2hpY2ggdGhlIGl2cyBvZiBMT09QIGFyZSB1c2VkICh0aGlzIGlzIHRoZQ0K PiBwYXRoDQo+ID4gPiArICAgICB0aGF0IGxlYWRzIHRvIHRoZSBlcGlsb2cgbG9vcDsgb3RoZXIg cGF0aHMgc2tpcCB0aGUgZXBpbG9nIGxvb3ApLiAgVGhpcw0KPiA+ID4gKyAgICAgcGF0aCBzdGFy dHMgd2l0aCB0aGUgZWRnZSBVUERBVEVfRSwgYW5kIGl0cyBkZXN0aW5hdGlvbiAoZGVub3RlZA0K PiA+IHVwZGF0ZV9iYikNCj4gPiA+ICsgICAgIG5lZWRzIHRvIGhhdmUgaXRzIHBoaXMgdXBkYXRl ZC4NCj4gPiA+ICsgKi8NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgdHJlZQ0KPiA+ID4gK3ZlY3Rf dXBkYXRlX2l2c19hZnRlcl9lYXJseV9icmVhayAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCBj bGFzcw0KPiBsb29wDQo+ID4gKiwNCj4gPiA+ICsJCQkJICAgcG9seV9pbnQ2NCB2ZiwgdHJlZSBu aXRlcnNfb3JpZywNCj4gPiA+ICsJCQkJICAgdHJlZSBuaXRlcnNfdmVjdG9yLCBlZGdlIHVwZGF0 ZV9lKQ0KPiA+ID4gK3sNCj4gPiA+ICsgIGdwaGlfaXRlcmF0b3IgZ3NpLCBnc2kxOw0KPiA+ID4g KyAgdHJlZSBuaV9uYW1lLCBpdnRtcCA9IE5VTEw7DQo+ID4gPiArICBjbGFzcyBsb29wICpsb29w ID0gTE9PUF9WSU5GT19MT09QIChsb29wX3ZpbmZvKTsNCj4gPiA+ICsgIGJhc2ljX2Jsb2NrIHVw ZGF0ZV9iYiA9IHVwZGF0ZV9lLT5kZXN0Ow0KPiA+ID4gKyAgYXV0b192ZWM8ZWRnZT4gZXhpdHMg PSBnZXRfbG9vcF9leGl0X2VkZ2VzIChsb29wKTsNCj4gPiA+ICsNCj4gPiA+ICsgIGJhc2ljX2Js b2NrIGV4aXRfYmIgPSBleGl0c1swXS0+ZGVzdDsNCj4gPiA+ICsNCj4gPiA+ICsgIGlmICghTE9P UF9WSU5GT19FQVJMWV9CUkVBS1MgKGxvb3BfdmluZm8pKQ0KPiA+ID4gKyAgICByZXR1cm4gTlVM TDsNCj4gPiA+ICsNCj4gPiA+ICsgIGZvciAoZ3NpID0gZ3NpX3N0YXJ0X3BoaXMgKGxvb3AtPmhl YWRlciksIGdzaTEgPSBnc2lfc3RhcnRfcGhpcw0KPiA+ICh1cGRhdGVfYmIpOw0KPiA+ID4gKyAg ICAgICAhZ3NpX2VuZF9wIChnc2kpICYmICFnc2lfZW5kX3AgKGdzaTEpOw0KPiA+ID4gKyAgICAg ICBnc2lfbmV4dCAoJmdzaSksIGdzaV9uZXh0ICgmZ3NpMSkpDQo+ID4gPiArICAgIHsNCj4gPiA+ ICsgICAgICB0cmVlIGluaXRfZXhwcjsNCj4gPiA+ICsgICAgICB0cmVlIHN0ZXBfZXhwcjsNCj4g PiA+ICsgICAgICB0cmVlIHR5cGU7DQo+ID4gPiArICAgICAgdHJlZSB2YXIsIG5pOw0KPiA+ID4g KyAgICAgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGxhc3RfZ3NpOw0KPiA+ID4gKw0KPiA+ID4gKyAg ICAgIGdwaGkgKnBoaSA9IGdzaTEucGhpICgpOw0KPiA+ID4gKyAgICAgIHRyZWUgcGhpX3NzYSA9 IFBISV9BUkdfREVGX0ZST01fRURHRSAocGhpLA0KPiA+IGxvb3BfcHJlaGVhZGVyX2VkZ2UgKGxv b3ApKTsNCj4gPiA+ICsgICAgICBncGhpICpwaGkxID0gYXNfYSA8Z3BoaSAqPiAoU1NBX05BTUVf REVGX1NUTVQgKHBoaV9zc2EpKTsNCj4gPiA+ICsgICAgICBzdG10X3ZlY19pbmZvIHBoaV9pbmZv ID0gbG9vcF92aW5mby0+bG9va3VwX3N0bXQgKGdzaS5waGkgKCkpOw0KPiA+ID4gKyAgICAgIGlm IChkdW1wX2VuYWJsZWRfcCAoKSkNCj4gPiA+ICsJZHVtcF9wcmludGZfbG9jIChNU0dfTk9URSwg dmVjdF9sb2NhdGlvbiwNCj4gPiA+ICsJCQkgInZlY3RfdXBkYXRlX2l2c19hZnRlcl9lYXJseV9i cmVhazogcGhpOiAlRyIsDQo+ID4gPiArCQkJIChnaW1wbGUgKilwaGkpOw0KPiA+ID4gKw0KPiA+ ID4gKyAgICAgIC8qIFNraXAgcmVkdWN0aW9uIGFuZCB2aXJ0dWFsIHBoaXMuICAqLw0KPiA+ID4g KyAgICAgIGlmICghaXZfcGhpX3AgKHBoaV9pbmZvKSkNCj4gPiA+ICsJew0KPiA+ID4gKwkgIGlm IChkdW1wX2VuYWJsZWRfcCAoKSkNCj4gPiA+ICsJICAgIGR1bXBfcHJpbnRmX2xvYyAoTVNHX05P VEUsIHZlY3RfbG9jYXRpb24sDQo+ID4gPiArCQkJICAgICAicmVkdWMgb3IgdmlydHVhbCBwaGku IHNraXAuXG4iKTsNCj4gPiA+ICsJICBjb250aW51ZTsNCj4gPiA+ICsJfQ0KPiA+ID4gKw0KPiA+ ID4gKyAgICAgIC8qIEZvciBtdWx0aXBsZSBleGl0cyB3aGVyZSB3ZSBoYW5kbGUgZWFybHkgZXhp dHMgd2UgbmVlZCB0byBjYXJyeSBvbg0KPiA+ID4gKwkgd2l0aCB0aGUgcHJldmlvdXMgSVYgYXMg bG9vcCBpdGVyYXRpb24gd2FzIG5vdCBkb25lIGJlY2F1c2Ugd2UNCj4gPiBleGl0ZWQNCj4gPiA+ ICsJIGVhcmx5LiAgQXMgc3VjaCBqdXN0IGdyYWIgdGhlIG9yaWdpbmFsIElWLiAgKi8NCj4gPiA+ ICsgICAgICBpZiAoU1RNVF9WSU5GT19UWVBFIChwaGlfaW5mbykgIT0gdW5kZWZfdmVjX2luZm9f dHlwZSkNCj4gPiA+ICsJew0KPiA+ID4gKwkgIHR5cGUgPSBUUkVFX1RZUEUgKGdpbXBsZV9waGlf cmVzdWx0IChwaGkpKTsNCj4gPiA+ICsJICBzdGVwX2V4cHIgPSBTVE1UX1ZJTkZPX0xPT1BfUEhJ X0VWT0xVVElPTl9QQVJUDQo+ID4gKHBoaV9pbmZvKTsNCj4gPiA+ICsJICBzdGVwX2V4cHIgPSB1 bnNoYXJlX2V4cHIgKHN0ZXBfZXhwcik7DQo+ID4gPiArDQo+ID4gPiArCSAgLyogV2UgcHJldmlv dXNseSBnZW5lcmF0ZWQgdGhlIG5ldyBtZXJnZWQgcGhpIGluIHRoZSBzYW1lIEJCIGFzDQo+ID4g dGhlDQo+ID4gPiArCSAgICAgZ3VhcmQuICBTbyB1c2UgdGhhdCB0byBwZXJmb3JtIHRoZSBzY2Fs aW5nIG9uIHJhdGhlciB0aGFuIHRoZQ0KPiA+ID4gKwkgICAgIG5vcm1hbCBsb29wIHBoaSB3aGlj aCBkb24ndCB0YWtlIHRoZSBlYXJseSBicmVha3MgaW50byBhY2NvdW50LiAgKi8NCj4gPiA+ICsJ ICBpbml0X2V4cHIgPSBnaW1wbGVfcGhpX3Jlc3VsdCAocGhpMSk7IC8vUEhJX0FSR19ERUZfRlJP TV9FREdFDQo+ID4gKHBoaTEsIGxvb3BfcHJlaGVhZGVyX2VkZ2UgKGxvb3ApKTsNCj4gPiA+ICsN Cj4gPiA+ICsJICBuaSA9IGZvbGRfYnVpbGQyIChNVUxUX0VYUFIsIFRSRUVfVFlQRSAoc3RlcF9l eHByKSwNCj4gPiA+ICsJCQkgICAgZm9sZF9jb252ZXJ0IChUUkVFX1RZUEUgKHN0ZXBfZXhwciks IGluaXRfZXhwciksDQo+ID4gPiArCQkJICAgIGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAoc3Rl cF9leHByKSwgdmYpKTsNCj4gPiA+ICsNCj4gPiA+ICsJICB2YXIgPSBjcmVhdGVfdG1wX3ZhciAo dHlwZSwgInRtcCIpOw0KPiA+ID4gKw0KPiA+ID4gKwkgIGxhc3RfZ3NpID0gZ3NpX2xhc3RfYmIg KGV4aXRfYmIpOw0KPiA+ID4gKwkgIGdpbXBsZV9zZXEgbmV3X3N0bXRzID0gTlVMTDsNCj4gPiA+ ICsJICBuaV9uYW1lID0gZm9yY2VfZ2ltcGxlX29wZXJhbmQgKG5pLCAmbmV3X3N0bXRzLCBmYWxz ZSwgdmFyKTsNCj4gPiA+ICsJICAvKiBFeGl0X2JiIHNob3VsZG4ndCBiZSBlbXB0eS4gICovDQo+ ID4gPiArCSAgaWYgKCFnc2lfZW5kX3AgKGxhc3RfZ3NpKSkNCj4gPiA+ICsJICAgIGdzaV9pbnNl cnRfc2VxX2FmdGVyICgmbGFzdF9nc2ksIG5ld19zdG10cywgR1NJX1NBTUVfU1RNVCk7DQo+ID4g PiArCSAgZWxzZQ0KPiA+ID4gKwkgICAgZ3NpX2luc2VydF9zZXFfYmVmb3JlICgmbGFzdF9nc2ks IG5ld19zdG10cywgR1NJX1NBTUVfU1RNVCk7DQo+ID4gPiArDQo+ID4gPiArCSAgLyogRml4IHBo aSBleHByZXNzaW9ucyBpbiB0aGUgc3VjY2Vzc29yIGJiLiAgKi8NCj4gPiA+ICsJICBhZGp1c3Rf cGhpX2FuZF9kZWJ1Z19zdG10cyAocGhpLCB1cGRhdGVfZSwgbmlfbmFtZSk7DQo+ID4gPiArCX0N Cj4gPiA+ICsgICAgICBlbHNlIGlmIChTVE1UX1ZJTkZPX1RZUEUgKHBoaV9pbmZvKSA9PSB1bmRl Zl92ZWNfaW5mb190eXBlKQ0KPiA+ID4gKwl7DQo+ID4gPiArCSAgdHlwZSA9IFRSRUVfVFlQRSAo Z2ltcGxlX3BoaV9yZXN1bHQgKHBoaSkpOw0KPiA+ID4gKwkgIHN0ZXBfZXhwciA9IFNUTVRfVklO Rk9fTE9PUF9QSElfRVZPTFVUSU9OX1BBUlQNCj4gPiAocGhpX2luZm8pOw0KPiA+ID4gKwkgIHN0 ZXBfZXhwciA9IHVuc2hhcmVfZXhwciAoc3RlcF9leHByKTsNCj4gPiA+ICsNCj4gPiA+ICsJICAv KiBXZSBwcmV2aW91c2x5IGdlbmVyYXRlZCB0aGUgbmV3IG1lcmdlZCBwaGkgaW4gdGhlIHNhbWUg QkIgYXMNCj4gPiB0aGUNCj4gPiA+ICsJICAgICBndWFyZC4gIFNvIHVzZSB0aGF0IHRvIHBlcmZv cm0gdGhlIHNjYWxpbmcgb24gcmF0aGVyIHRoYW4gdGhlDQo+ID4gPiArCSAgICAgbm9ybWFsIGxv b3AgcGhpIHdoaWNoIGRvbid0IHRha2UgdGhlIGVhcmx5IGJyZWFrcyBpbnRvIGFjY291bnQuICAq Lw0KPiA+ID4gKwkgIGluaXRfZXhwciA9IFBISV9BUkdfREVGX0ZST01fRURHRSAocGhpMSwNCj4g PiBsb29wX3ByZWhlYWRlcl9lZGdlIChsb29wKSk7DQo+ID4gPiArDQo+ID4gPiArCSAgaWYgKHZm LmlzX2NvbnN0YW50ICgpKQ0KPiA+ID4gKwkgICAgew0KPiA+ID4gKwkgICAgICBuaSA9IGZvbGRf YnVpbGQyIChNVUxUX0VYUFIsIFRSRUVfVFlQRSAoc3RlcF9leHByKSwNCj4gPiA+ICsJCQkJZm9s ZF9jb252ZXJ0IChUUkVFX1RZUEUgKHN0ZXBfZXhwciksDQo+ID4gPiArCQkJCQkgICAgICBuaXRl cnNfdmVjdG9yKSwNCj4gPiA+ICsJCQkJYnVpbGRfaW50X2NzdCAoVFJFRV9UWVBFIChzdGVwX2V4 cHIpLCB2ZikpOw0KPiA+ID4gKw0KPiA+ID4gKwkgICAgICBuaSA9IGZvbGRfYnVpbGQyIChNSU5V U19FWFBSLCBUUkVFX1RZUEUgKHN0ZXBfZXhwciksDQo+ID4gPiArCQkJCWZvbGRfY29udmVydCAo VFJFRV9UWVBFIChzdGVwX2V4cHIpLA0KPiA+ID4gKwkJCQkJICAgICAgbml0ZXJzX29yaWcpLA0K PiA+ID4gKwkJCQlmb2xkX2NvbnZlcnQgKFRSRUVfVFlQRSAoc3RlcF9leHByKSwgbmkpKTsNCj4g PiA+ICsJICAgIH0NCj4gPiA+ICsJICBlbHNlDQo+ID4gPiArCSAgICAvKiBJZiB0aGUgbG9vcCdz IFZGIGlzbid0IGNvbnN0YW50IHRoZW4gdGhlIGxvb3AgbXVzdCBoYXZlIGJlZW4NCj4gPiA+ICsJ ICAgICAgIG1hc2tlZCwgc28gYXQgdGhlIGVuZCBvZiB0aGUgbG9vcCB3ZSBrbm93IHdlIGhhdmUg ZmluaXNoZWQNCj4gPiA+ICsJICAgICAgIHRoZSBlbnRpcmUgbG9vcCBhbmQgZm91bmQgbm90aGlu Zy4gICovDQo+ID4gPiArCSAgICBuaSA9IGJ1aWxkX3plcm9fY3N0IChUUkVFX1RZUEUgKHN0ZXBf ZXhwcikpOw0KPiA+ID4gKw0KPiA+ID4gKwkgIGdjY19hc3NlcnQgKFRSRUVfQ09ERSAobmkpID09 IElOVEVHRVJfQ1NUKTsNCj4gPiA+ICsNCj4gPiA+ICsJICB2YXIgPSBjcmVhdGVfdG1wX3ZhciAo dHlwZSwgInRtcCIpOw0KPiA+ID4gKw0KPiA+ID4gKwkgIGxhc3RfZ3NpID0gZ3NpX2xhc3RfYmIg KGV4aXRfYmIpOw0KPiA+ID4gKwkgIGdpbXBsZV9zZXEgbmV3X3N0bXRzID0gTlVMTDsNCj4gPiA+ ICsJICBuaV9uYW1lID0gZm9yY2VfZ2ltcGxlX29wZXJhbmQgKG5pLCAmbmV3X3N0bXRzLCBmYWxz ZSwgdmFyKTsNCj4gPiA+ICsJICAvKiBFeGl0X2JiIHNob3VsZG4ndCBiZSBlbXB0eS4gICovDQo+ ID4gPiArCSAgaWYgKCFnc2lfZW5kX3AgKGxhc3RfZ3NpKSkNCj4gPiA+ICsJICAgIGdzaV9pbnNl cnRfc2VxX2FmdGVyICgmbGFzdF9nc2ksIG5ld19zdG10cywgR1NJX1NBTUVfU1RNVCk7DQo+ID4g PiArCSAgZWxzZQ0KPiA+ID4gKwkgICAgZ3NpX2luc2VydF9zZXFfYmVmb3JlICgmbGFzdF9nc2ks IG5ld19zdG10cywgR1NJX1NBTUVfU1RNVCk7DQo+ID4gPiArDQo+ID4gPiArCSAgYWRqdXN0X3Bo aV9hbmRfZGVidWdfc3RtdHMgKHBoaTEsIHVwZGF0ZV9lLCBuaV9uYW1lKTsNCj4gPiA+ICsNCj4g PiA+ICsJICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgZXhpdHMubGVuZ3RoICgpOyBpKyspDQo+ ID4gPiArCSAgICBhZGp1c3RfcGhpX2FuZF9kZWJ1Z19zdG10cyAocGhpMSwgZXhpdHNbaV0sDQo+ ID4gPiArCQkJCQlidWlsZF9pbnRfY3N0IChUUkVFX1RZUEUNCj4gPiAoc3RlcF9leHByKSwNCj4g PiA+ICsJCQkJCQkgICAgICAgdmYpKTsNCj4gPiA+ICsJICBpdnRtcCA9IGdpbXBsZV9waGlfcmVz dWx0IChwaGkxKTsNCj4gPiA+ICsJfQ0KPiA+ID4gKyAgICAgIGVsc2UNCj4gPiA+ICsJY29udGlu dWU7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIHJldHVybiBpdnRtcDsNCj4gPiA+ ICB9DQo+ID4gPg0KPiA+ID4gIC8qIFJldHVybiBhIGdpbXBsZSB2YWx1ZSBjb250YWluaW5nIHRo ZSBtaXNhbGlnbm1lbnQgKG1lYXN1cmVkIGluDQo+IHZlY3Rvcg0KPiA+ID4gQEAgLTIwOTYsNyAr MjM3Niw3IEBAIHZlY3RfZ2VuX3ZlY3Rvcl9sb29wX25pdGVyc19tdWx0X3ZmDQo+ID4gKGxvb3Bf dmVjX2luZm8gbG9vcF92aW5mbywNCj4gPiA+ICAgIGNsYXNzIGxvb3AgKmxvb3AgPSBMT09QX1ZJ TkZPX0xPT1AgKGxvb3BfdmluZm8pOw0KPiA+ID4gICAgdHJlZSB0eXBlID0gVFJFRV9UWVBFIChu aXRlcnNfdmVjdG9yKTsNCj4gPiA+ICAgIHRyZWUgbG9nX3ZmID0gYnVpbGRfaW50X2NzdCAodHlw ZSwgZXhhY3RfbG9nMiAodmYpKTsNCj4gPiA+IC0gIGJhc2ljX2Jsb2NrIGV4aXRfYmIgPSBzaW5n bGVfZXhpdCAobG9vcCktPmRlc3Q7DQo+ID4gPiArICBiYXNpY19ibG9jayBleGl0X2JiID0gbm9y bWFsX2V4aXQgKGxvb3ApLT5kZXN0Ow0KPiA+ID4NCj4gPiA+ICAgIGdjY19hc3NlcnQgKG5pdGVy c192ZWN0b3JfbXVsdF92Zl9wdHIgIT0gTlVMTCk7DQo+ID4gPiAgICB0cmVlIG5pdGVyc192ZWN0 b3JfbXVsdF92ZiA9IGZvbGRfYnVpbGQyIChMU0hJRlRfRVhQUiwgdHlwZSwNCj4gPiA+IEBAIC0y MTIzLDE5ICsyNDAzLDQ2IEBAIGZpbmRfZ3VhcmRfYXJnIChjbGFzcyBsb29wICpsb29wLCBjbGFz cyBsb29wDQo+ID4gKmVwaWxvZyBBVFRSSUJVVEVfVU5VU0VELA0KPiA+ID4gIAkJZ3BoaSAqbGNz c2FfcGhpKQ0KPiA+ID4gIHsNCj4gPiA+ICAgIGdwaGlfaXRlcmF0b3IgZ3NpOw0KPiA+ID4gLSAg ZWRnZSBlID0gc2luZ2xlX2V4aXQgKGxvb3ApOw0KPiA+ID4gKyAgZWRnZSBlID0gbm9ybWFsX2V4 aXQgKGxvb3ApOw0KPiA+ID4NCj4gPiA+IC0gIGdjY19hc3NlcnQgKHNpbmdsZV9wcmVkX3AgKGUt PmRlc3QpKTsNCj4gPiA+ICAgIGZvciAoZ3NpID0gZ3NpX3N0YXJ0X3BoaXMgKGUtPmRlc3QpOyAh Z3NpX2VuZF9wIChnc2kpOyBnc2lfbmV4dCAoJmdzaSkpDQo+ID4gPiAgICAgIHsNCj4gPiA+ICAg ICAgICBncGhpICpwaGkgPSBnc2kucGhpICgpOw0KPiA+ID4gLSAgICAgIGlmIChvcGVyYW5kX2Vx dWFsX3AgKFBISV9BUkdfREVGIChwaGksIDApLA0KPiA+ID4gLQkJCSAgIFBISV9BUkdfREVGIChs Y3NzYV9waGksIDApLCAwKSkNCj4gPiA+ICsgICAgICAvKiBOZXN0ZWQgbG9vcHMgd2l0aCBtdWx0 aXBsZSBleGl0cyBjYW4gaGF2ZSBkaWZmZXJlbnQgbm8jIHBoaSBub2RlDQo+ID4gPiArCSBhcmd1 bWVudHMgYmV0d2VlbiB0aGUgbWFpbiBsb29wIGFuZCBlcGlsb2cgYXMgZXBpbG9nIGZhbGxzIHRv IHRoZQ0KPiA+ID4gKwkgc2Vjb25kIGxvb3AuICAqLw0KPiA+ID4gKyAgICAgIGlmIChnaW1wbGVf cGhpX251bV9hcmdzIChwaGkpID4gZS0+ZGVzdF9pZHgNCj4gPiA+ICsJICAmJiBvcGVyYW5kX2Vx dWFsX3AgKFBISV9BUkdfREVGIChwaGksIGUtPmRlc3RfaWR4KSwNCj4gPiA+ICsJCQkgICAgICBQ SElfQVJHX0RFRiAobGNzc2FfcGhpLCAwKSwgMCkpDQo+ID4gPiAgCXJldHVybiBQSElfUkVTVUxU IChwaGkpOw0KPiA+ID4gICAgICB9DQo+ID4gPiAgICByZXR1cm4gTlVMTF9UUkVFOw0KPiA+ID4g IH0NCj4gPiA+DQo+ID4gPiArLyogU3RhcnRpbmcgZnJvbSB0aGUgY3VycmVudCBlZGdlIHdhbGsg YWxsIGluc3RydWN0aW9ucyBhbmQgZmluZCB0aGUgbGFzdA0KPiA+ID4gKyAgIFZVU0UvVkRFRiBp biB0aGUgYmFzaWMgYmxvY2suICAqLw0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyB0cmVlDQo+ID4g PiArZ2ltcGxlX2ZpbmRfbGFzdF9tZW1fdXNlIChlZGdlIGUpDQo+ID4gPiArew0KPiA+ID4gKyAg YmFzaWNfYmxvY2sgYmIgPSBlLT5zcmM7DQo+ID4gPiArICB0cmVlIHJlcyA9IE5VTEw7DQo+ID4g PiArICBnaW1wbGVfc3RtdF9pdGVyYXRvciBpdGVyID0gZ3NpX2xhc3RfYmIgKGJiKTsNCj4gPiA+ ICsgIGRvDQo+ID4gPiArICB7DQo+ID4gPiArICAgIGdpbXBsZSAqc3RtdCA9IGdzaV9zdG10IChp dGVyKTsNCj4gPiA+ICsgICAgaWYgKChyZXMgPSBnaW1wbGVfdmRlZiAoc3RtdCkpKQ0KPiA+ID4g KyAgICAgIHJldHVybiByZXM7DQo+ID4gPiArDQo+ID4gPiArICAgIGlmICgocmVzID0gZ2ltcGxl X3Z1c2UgKHN0bXQpKSkNCj4gPiA+ICsgICAgICByZXR1cm4gcmVzOw0KPiA+ID4gKw0KPiA+ID4g KyAgICBnc2lfcHJldiAoJml0ZXIpOw0KPiA+ID4gKyAgfSB3aGlsZSAoIWdzaV9lbmRfcCAoaXRl cikpOw0KPiA+ID4gKw0KPiA+ID4gKyAgcmV0dXJuIE5VTEw7DQo+ID4gPiArfQ0KPiA+ID4gKw0K PiA+ID4gIC8qIEZ1bmN0aW9uIHNscGVlbF90cmVlX2R1cGxpY2F0ZV9sb29wX3RvX2VkZ2VfY2Zn IGR1cGxjaWF0ZXMNCj4gPiBGSVJTVC9TRUNPTkQNCj4gPiA+ICAgICBmcm9tIFNFQ09ORC9GSVJT VCBhbmQgcHV0cyBpdCBhdCB0aGUgb3JpZ2luYWwgbG9vcCdzIHByZWhlYWRlci9leGl0DQo+ID4g PiAgICAgZWRnZSwgdGhlIHR3byBsb29wcyBhcmUgYXJyYW5nZWQgYXMgYmVsb3c6DQo+ID4gPiBA QCAtMjE4NSw2ICsyNDkyLDcgQEAgZmluZF9ndWFyZF9hcmcgKGNsYXNzIGxvb3AgKmxvb3AsIGNs YXNzIGxvb3ANCj4gPiAqZXBpbG9nIEFUVFJJQlVURV9VTlVTRUQsDQo+ID4gPiAgc3RhdGljIHZv aWQNCj4gPiA+ICBzbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3JfbG9vcHMgKGxvb3BfdmVjX2lu Zm8gbG9vcF92aW5mbywNCj4gPiA+ICAJCQkJICAgY2xhc3MgbG9vcCAqZmlyc3QsIGNsYXNzIGxv b3AgKnNlY29uZCwNCj4gPiA+ICsJCQkJICAgdHJlZSAqbGNzc2FfaXZ0bXAsDQo+ID4gPiAgCQkJ CSAgIGJvb2wgY3JlYXRlX2xjc3NhX2Zvcl9pdl9waGlzKQ0KPiA+ID4gIHsNCj4gPiA+ICAgIGdw aGlfaXRlcmF0b3IgZ3NpX3VwZGF0ZSwgZ3NpX29yaWc7DQo+ID4gPiBAQCAtMjE5MiwxMCArMjUw MCwxOCBAQCBzbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3JfbG9vcHMNCj4gPiAobG9vcF92ZWNf aW5mbyBsb29wX3ZpbmZvLA0KPiA+ID4NCj4gPiA+ICAgIGVkZ2UgZmlyc3RfbGF0Y2hfZSA9IEVE R0VfU1VDQyAoZmlyc3QtPmxhdGNoLCAwKTsNCj4gPiA+ICAgIGVkZ2Ugc2Vjb25kX3ByZWhlYWRl cl9lID0gbG9vcF9wcmVoZWFkZXJfZWRnZSAoc2Vjb25kKTsNCj4gPiA+IC0gIGJhc2ljX2Jsb2Nr IGJldHdlZW5fYmIgPSBzaW5nbGVfZXhpdCAoZmlyc3QpLT5kZXN0Ow0KPiA+ID4gKyAgYXV0b192 ZWM8ZWRnZT4gZXhpdHMgPSBnZXRfbG9vcF9leGl0X2VkZ2VzIChmaXJzdCk7DQo+ID4gPiArICBi YXNpY19ibG9jayBiZXR3ZWVuX2JiID0gZXhpdHNbMF0tPmRlc3Q7DQo+ID4gPiArDQo+ID4gPiAr ICBib29sIGVhcmx5X2V4aXQgPSBMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUyAobG9vcF92aW5mbyk7 DQo+ID4gPiArICAvKiBGb3IgZWFybHkgZXhpdHMgd2hlbiB3ZSBjcmVhdGUgdGhlIG1lcmdlIEJC IHdlIG11c3QgbWFpbnRhaW4gaXQgaW4NCj4gPiA+ICsgICAgIExDU1NBIGZvcm0sIG90aGVyd2lz ZSB0aGUgZmluYWwgdmVjdG9yaXplciBwYXNzZXMgd2lsbCBjcmVhdGUgdGhlDQo+ID4gPiArICAg ICB3cm9uZyBQSEkgbm9kZXMgaGVyZS4gICovDQo+ID4gPiArICBjcmVhdGVfbGNzc2FfZm9yX2l2 X3BoaXMgPSBjcmVhdGVfbGNzc2FfZm9yX2l2X3BoaXMgfHwgZWFybHlfZXhpdDsNCj4gPiA+DQo+ ID4gPiAgICBnY2NfYXNzZXJ0IChiZXR3ZWVuX2JiID09IHNlY29uZF9wcmVoZWFkZXJfZS0+c3Jj KTsNCj4gPiA+IC0gIGdjY19hc3NlcnQgKHNpbmdsZV9wcmVkX3AgKGJldHdlZW5fYmIpICYmIHNp bmdsZV9zdWNjX3ANCj4gPiAoYmV0d2Vlbl9iYikpOw0KPiA+ID4gKyAgZ2NjX2Fzc2VydCAoKHNp bmdsZV9wcmVkX3AgKGJldHdlZW5fYmIpICYmIHNpbmdsZV9zdWNjX3ANCj4gPiAoYmV0d2Vlbl9i YikpDQo+ID4gPiArCSAgICAgIHx8IGVhcmx5X2V4aXQpOw0KPiA+ID4gICAgLyogRWl0aGVyIHRo ZSBmaXJzdCBsb29wIG9yIHRoZSBzZWNvbmQgaXMgdGhlIGxvb3AgdG8gYmUgdmVjdG9yaXplZC4g ICovDQo+ID4gPiAgICBnY2NfYXNzZXJ0IChsb29wID09IGZpcnN0IHx8IGxvb3AgPT0gc2Vjb25k KTsNCj4gPiA+DQo+ID4gPiBAQCAtMjIxNSwxMCArMjUzMSw0MCBAQCBzbHBlZWxfdXBkYXRlX3Bo aV9ub2Rlc19mb3JfbG9vcHMNCj4gPiAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0KPiA+ID4g IAl7DQo+ID4gPiAgCSAgdHJlZSBuZXdfcmVzID0gY29weV9zc2FfbmFtZSAoUEhJX1JFU1VMVCAo b3JpZ19waGkpKTsNCj4gPiA+ICAJICBncGhpICpsY3NzYV9waGkgPSBjcmVhdGVfcGhpX25vZGUg KG5ld19yZXMsIGJldHdlZW5fYmIpOw0KPiA+ID4gLQkgIGFkZF9waGlfYXJnIChsY3NzYV9waGks IGFyZywgc2luZ2xlX2V4aXQgKGZpcnN0KSwNCj4gPiBVTktOT1dOX0xPQ0FUSU9OKTsNCj4gPiA+ ICsNCj4gPiA+ICsJICAvKiBUaGUgZmlyc3QgZXhpdCBpcyBhbHdheXMgdGhlIGxvb3AgbGF0Y2gs IHNvIGhhbmRsZSB0aGF0DQo+ID4gPiArCSAgICAgc2VwZXJhdGVseS4gICovDQo+ID4gPiArCSAg Z2NjX2Fzc2VydCAoYXJnKTsNCj4gPiA+ICsJICBhZGRfcGhpX2FyZyAobGNzc2FfcGhpLCBhcmcs IGV4aXRzWzBdLCBVTktOT1dOX0xPQ0FUSU9OKTsNCj4gPiA+ICsNCj4gPiA+ICsJICAvKiBUaGUg ZWFybHkgZXhpdHMgYXJlIHByb2Nlc3NlZCBpbiBvcmRlciBzdGFydGluZyBmcm9tIGV4aXQgMS4g ICovDQo+ID4gPiArCSAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGV4aXRzLmxlbmd0aCAoKTsg aSsrKQ0KPiA+ID4gKwkgICAgew0KPiA+ID4gKwkgICAgICB0cmVlIHBoaV9hcmc7DQo+ID4gPiAr CSAgICAgIGlmIChpdl9waGlfcCAodmVjdF9waGlfaW5mbykpDQo+ID4gPiArCQkvKiBGb3IgaW5k dWN0aW9uIHZhbHVlcyBqdXN0IGNvcHkgdGhlIHByZXZpb3VzIG9uZSBhcyB0aGUNCj4gPiA+ICsJ CSAgIGN1cnJlbnQgaXRlcmF0aW9uIGRpZCBub3QgZmluaXNoLiAgV2UnbGwgdXBkYXRlIGFzIG5l ZWRlZA0KPiA+ID4gKwkJICAgbGF0ZXIgb24uICAqLw0KPiA+ID4gKwkJcGhpX2FyZyA9IGdpbXBs ZV9waGlfcmVzdWx0IChvcmlnX3BoaSk7DQo+ID4gPiArCSAgICAgIGVsc2UNCj4gPiA+ICsJCXBo aV9hcmcgPSBnaW1wbGVfZmluZF9sYXN0X21lbV91c2UgKGV4aXRzW2ldKTsNCj4gPiA+ICsJICAg ICAgLyogSWYgd2UgZGlkbid0IGZpbmQgYW55IGp1c3QgY29weSB0aGUgZXhpc3Rpbmcgb25lIGFu ZCBsZWF2ZQ0KPiA+ID4gKwkJIGl0IHRvIHRoZSBvdGhlcnMgdG8gZml4IGl0IHVwLiAgKi8NCj4g PiA+ICsJICAgICAgaWYgKCFwaGlfYXJnKQ0KPiA+ID4gKwkJcGhpX2FyZyA9IGdpbXBsZV9waGlf cmVzdWx0IChvcmlnX3BoaSk7DQo+ID4gPiArCSAgICAgIGFkZF9waGlfYXJnIChsY3NzYV9waGks IHBoaV9hcmcsIGV4aXRzW2ldLCBVTktOT1dOX0xPQ0FUSU9OKTsNCj4gPiA+ICsJICAgIH0NCj4g PiA+ICAJICBhcmcgPSBuZXdfcmVzOw0KPiA+ID4gIAl9DQo+ID4gPg0KPiA+ID4gKyAgICAgIC8q IE5vcm1hbGx5IGFibGUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgaXRlcmF0b3IgY291bnRl ciBhbmQgdGhlDQo+ID4gPiArCSBpdnRlbXBzIGJ1IGxvb2tpbmcgYXQgdGhlIFNUTVRfVklORk9f VFlQRSBvZiB0aGUgcGhpIG5vZGUuDQo+ID4gPiArCSBob3dldmVyIGZvciBzb21lIHJlYXNvbiB0 aGlzIGlzbid0IGNvbnNpc3RlbnRseSBzZXQuICBJcyB0aGVyZSBhDQo+ID4gPiArCSBiZXR0ZXIg d2F5Pz8uICAqLw0KPiA+ID4gKyAgICAgIGlmIChsY3NzYV9pdnRtcA0KPiA+ID4gKwkgICYmIGl2 X3BoaV9wICh2ZWN0X3BoaV9pbmZvKSkNCj4gPiA+ICsJKmxjc3NhX2l2dG1wID0gYXJnOw0KPiA+ ID4gKw0KPiA+ID4gICAgICAgIC8qIFVwZGF0ZSBQSEkgbm9kZSBpbiB0aGUgc2Vjb25kIGxvb3Ag YnkgcmVwbGFjaW5nIGFyZyBvbiB0aGUgbG9vcCdzDQo+ID4gPiAgCSBpbmNvbWluZyBlZGdlLiAg Ki8NCj4gPiA+ICAgICAgICBhZGp1c3RfcGhpX2FuZF9kZWJ1Z19zdG10cyAodXBkYXRlX3BoaSwg c2Vjb25kX3ByZWhlYWRlcl9lLA0KPiA+IGFyZyk7DQo+ID4gPiBAQCAtMjIyOCw3ICsyNTc0LDgg QEAgc2xwZWVsX3VwZGF0ZV9waGlfbm9kZXNfZm9yX2xvb3BzDQo+ID4gKGxvb3BfdmVjX2luZm8g bG9vcF92aW5mbywNCj4gPiA+ICAgICAgIGZvciBjb3JyZWN0IHZlY3Rvcml6YXRpb24gb2YgbGl2 ZSBzdG10cy4gICovDQo+ID4gPiAgICBpZiAobG9vcCA9PSBmaXJzdCkNCj4gPiA+ICAgICAgew0K PiA+ID4gLSAgICAgIGJhc2ljX2Jsb2NrIG9yaWdfZXhpdCA9IHNpbmdsZV9leGl0IChzZWNvbmQp LT5kZXN0Ow0KPiA+ID4gKyAgICAgIGF1dG9fdmVjPGVkZ2U+IG5ld19leGl0cyA9IGdldF9sb29w X2V4aXRfZWRnZXMgKHNlY29uZCk7DQo+ID4gPiArICAgICAgYmFzaWNfYmxvY2sgb3JpZ19leGl0 ID0gbmV3X2V4aXRzWzBdLT5kZXN0Ow0KPiA+ID4gICAgICAgIGZvciAoZ3NpX29yaWcgPSBnc2lf c3RhcnRfcGhpcyAob3JpZ19leGl0KTsNCj4gPiA+ICAJICAgIWdzaV9lbmRfcCAoZ3NpX29yaWcp OyBnc2lfbmV4dCAoJmdzaV9vcmlnKSkNCj4gPiA+ICAJew0KPiA+ID4gQEAgLTIyNDMsNyArMjU5 MCwxNSBAQCBzbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3JfbG9vcHMNCj4gPiAobG9vcF92ZWNf aW5mbyBsb29wX3ZpbmZvLA0KPiA+ID4NCj4gPiA+ICAJICB0cmVlIG5ld19yZXMgPSBjb3B5X3Nz YV9uYW1lIChvcmlnX2FyZyk7DQo+ID4gPiAgCSAgZ3BoaSAqbGNwaGkgPSBjcmVhdGVfcGhpX25v ZGUgKG5ld19yZXMsIGJldHdlZW5fYmIpOw0KPiA+ID4gLQkgIGFkZF9waGlfYXJnIChsY3BoaSwg b3JpZ19hcmcsIHNpbmdsZV9leGl0IChmaXJzdCksDQo+ID4gVU5LTk9XTl9MT0NBVElPTik7DQo+ ID4gPiArCSAgLyogVGhlIGZpcnN0IGV4aXQgaXMgYWx3YXlzIHRoZSBsb29wIGxhdGNoLCBzbyBo YW5kbGUgdGhhdA0KPiA+ID4gKwkgICAgIHNlcGVyYXRlbHkuICAqLw0KPiA+ID4gKwkgIGFkZF9w aGlfYXJnIChsY3BoaSwgb3JpZ19hcmcsIG5ld19leGl0c1swXSwNCj4gPiBVTktOT1dOX0xPQ0FU SU9OKTsNCj4gPiA+ICsJICAvKiBUaGUgZWFybHkgZXhpdHMgYXJlIHByb2Nlc3NlZCBpbiBvcmRl ciBzdGFydGluZyBmcm9tIGV4aXQgMS4gICovDQo+ID4gPiArCSAgZm9yICh1bnNpZ25lZCBpID0g MTsgaSA8IG5ld19leGl0cy5sZW5ndGggKCk7IGkrKykNCj4gPiA+ICsJICAgIHsNCj4gPiA+ICsJ ICAgICAgdHJlZSBwaGlfYXJnID0gZ2ltcGxlX3BoaV9yZXN1bHQgKG9yaWdfcGhpKTsNCj4gPiA+ ICsJICAgICAgYWRkX3BoaV9hcmcgKGxjcGhpLCBwaGlfYXJnLCBleGl0c1tpXSwgVU5LTk9XTl9M T0NBVElPTik7DQo+ID4gPiArCSAgICB9DQo+ID4gPiAgCX0NCj4gPiA+ICAgICAgfQ0KPiA+ID4g IH0NCj4gPiA+IEBAIC0yMzkzLDEzICsyNzQ4LDExIEBAIHNscGVlbF91cGRhdGVfcGhpX25vZGVz X2Zvcl9ndWFyZDIgKGNsYXNzDQo+ID4gbG9vcCAqbG9vcCwgY2xhc3MgbG9vcCAqZXBpbG9nLA0K PiA+ID4gICAgZ2NjX2Fzc2VydCAoc2luZ2xlX3N1Y2NfcCAobWVyZ2VfYmIpKTsNCj4gPiA+ICAg IGVkZ2UgZSA9IHNpbmdsZV9zdWNjX2VkZ2UgKG1lcmdlX2JiKTsNCj4gPiA+ICAgIGJhc2ljX2Js b2NrIGV4aXRfYmIgPSBlLT5kZXN0Ow0KPiA+ID4gLSAgZ2NjX2Fzc2VydCAoc2luZ2xlX3ByZWRf cCAoZXhpdF9iYikpOw0KPiA+ID4gLSAgZ2NjX2Fzc2VydCAoc2luZ2xlX3ByZWQgKGV4aXRfYmIp ID09IHNpbmdsZV9leGl0IChlcGlsb2cpLT5kZXN0KTsNCj4gPiA+DQo+ID4gPiAgICBmb3IgKGdz aSA9IGdzaV9zdGFydF9waGlzIChleGl0X2JiKTsgIWdzaV9lbmRfcCAoZ3NpKTsgZ3NpX25leHQg KCZnc2kpKQ0KPiA+ID4gICAgICB7DQo+ID4gPiAgICAgICAgZ3BoaSAqdXBkYXRlX3BoaSA9IGdz aS5waGkgKCk7DQo+ID4gPiAtICAgICAgdHJlZSBvbGRfYXJnID0gUEhJX0FSR19ERUYgKHVwZGF0 ZV9waGksIDApOw0KPiA+ID4gKyAgICAgIHRyZWUgb2xkX2FyZyA9IFBISV9BUkdfREVGICh1cGRh dGVfcGhpLCBlLT5kZXN0X2lkeCk7DQo+ID4gPg0KPiA+ID4gICAgICAgIHRyZWUgbWVyZ2VfYXJn ID0gTlVMTF9UUkVFOw0KPiA+ID4NCj4gPiA+IEBAIC0yNDM4LDEyICsyNzkxLDE0IEBAIHN0YXRp YyB2b2lkDQo+ID4gPiAgc2xwZWVsX3VwZGF0ZV9waGlfbm9kZXNfZm9yX2xjc3NhIChjbGFzcyBs b29wICplcGlsb2cpDQo+ID4gPiAgew0KPiA+ID4gICAgZ3BoaV9pdGVyYXRvciBnc2k7DQo+ID4g PiAtICBiYXNpY19ibG9jayBleGl0X2JiID0gc2luZ2xlX2V4aXQgKGVwaWxvZyktPmRlc3Q7DQo+ ID4gPiArICBhdXRvX3ZlYzxlZGdlPiBleGl0cyA9IGdldF9sb29wX2V4aXRfZWRnZXMgKGVwaWxv Zyk7DQo+ID4gPg0KPiA+ID4gLSAgZ2NjX2Fzc2VydCAoc2luZ2xlX3ByZWRfcCAoZXhpdF9iYikp Ow0KPiA+ID4gLSAgZWRnZSBlID0gRURHRV9QUkVEIChleGl0X2JiLCAwKTsNCj4gPiA+IC0gIGZv ciAoZ3NpID0gZ3NpX3N0YXJ0X3BoaXMgKGV4aXRfYmIpOyAhZ3NpX2VuZF9wIChnc2kpOyBnc2lf bmV4dCAoJmdzaSkpDQo+ID4gPiAtICAgIHJlbmFtZV91c2Vfb3AgKFBISV9BUkdfREVGX1BUUl9G Uk9NX0VER0UgKGdzaS5waGkgKCksIGUpKTsNCj4gPiA+ICsgIGZvciAodW5zaWduZWQgaSA9IDA7 IGkgPCBleGl0cy5sZW5ndGggKCk7IGkrKykNCj4gPiA+ICsgICAgew0KPiA+ID4gKyAgICAgIGJh c2ljX2Jsb2NrIGV4aXRfYmIgPSBleGl0c1tpXS0+ZGVzdDsNCj4gPiA+ICsgICAgICBmb3IgKGdz aSA9IGdzaV9zdGFydF9waGlzIChleGl0X2JiKTsgIWdzaV9lbmRfcCAoZ3NpKTsgZ3NpX25leHQg KCZnc2kpKQ0KPiA+ID4gKwlyZW5hbWVfdXNlX29wIChQSElfQVJHX0RFRl9QVFJfRlJPTV9FREdF IChnc2kucGhpICgpLA0KPiA+IGV4aXRzW2ldKSk7DQo+ID4gPiArICAgIH0NCj4gPiA+ICB9DQo+ ID4gPg0KPiA+ID4gIC8qIEVQSUxPR1VFX1ZJTkZPIGlzIGFuIGVwaWxvZ3VlIGxvb3AgdGhhdCB3 ZSBub3cga25vdyB3b3VsZCBuZWVkDQo+IHRvDQo+ID4gPiBAQCAtMjYyMSw2ICsyOTc2LDE0IEBA IHZlY3RfZG9fcGVlbGluZyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0KPiA+IHRyZWUgbml0 ZXJzLCB0cmVlIG5pdGVyc20xLA0KPiA+ID4gICAgICBib3VuZF9lcGlsb2cgKz0gdmYgLSAxOw0K PiA+ID4gICAgaWYgKExPT1BfVklORk9fUEVFTElOR19GT1JfR0FQUyAobG9vcF92aW5mbykpDQo+ ID4gPiAgICAgIGJvdW5kX2VwaWxvZyArPSAxOw0KPiA+ID4gKyAgLyogRm9yIGVhcmx5IGJyZWFr cyB0aGUgc2NhbGFyIGxvb3AgbmVlZHMgdG8gZXhlY3V0ZSBhdCBtb3N0IFZGIHRpbWVzDQo+ID4g PiArICAgICB0byBmaW5kIHRoZSBlbGVtZW50IHRoYXQgY2F1c2VkIHRoZSBicmVhay4gICovDQo+ ID4gPiArICBpZiAoTE9PUF9WSU5GT19FQVJMWV9CUkVBS1MgKGxvb3BfdmluZm8pKQ0KPiA+ID4g KyAgICB7DQo+ID4gPiArICAgICAgYm91bmRfZXBpbG9nID0gdmY7DQo+ID4gPiArICAgICAgLyog Rm9yY2UgYSBzY2FsYXIgZXBpbG9ndWUgYXMgd2UgY2FuJ3QgdmVjdG9yaXplIHRoZSBpbmRleCBm aW5kaW5nLiAgKi8NCj4gPiA+ICsgICAgICB2ZWN0X2VwaWxvZ3VlcyA9IGZhbHNlOw0KPiA+ID4g KyAgICB9DQo+ID4gPiAgICBib29sIGVwaWxvZ19wZWVsaW5nID0gbWF5YmVfbmUgKGJvdW5kX2Vw aWxvZywgMFUpOw0KPiA+ID4gICAgcG9seV91aW50NjQgYm91bmRfc2NhbGFyID0gYm91bmRfZXBp bG9nOw0KPiA+ID4NCj4gPiA+IEBAIC0yNzgwLDE2ICszMTQzLDI0IEBAIHZlY3RfZG9fcGVlbGlu ZyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0KPiA+IHRyZWUgbml0ZXJzLCB0cmVlIG5pdGVy c20xLA0KPiA+ID4gIAkJCQkgIGJvdW5kX3Byb2xvZyArIGJvdW5kX2VwaWxvZykNCj4gPiA+ICAJ CSAgICAgIDogKCFMT09QX1JFUVVJUkVTX1ZFUlNJT05JTkcgKGxvb3BfdmluZm8pDQo+ID4gPiAg CQkJIHx8IHZlY3RfZXBpbG9ndWVzKSk7DQo+ID4gPiArDQo+ID4gPiArICAvKiBXZSBvbmx5IHN1 cHBvcnQgZWFybHkgYnJlYWsgdmVjdG9yaXphdGlvbiBvbiBrbm93biBib3VuZHMgYXQgdGhpcw0K PiA+IHRpbWUuDQo+ID4gPiArICAgICBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlIHZlY3RvciBsb29w IGNhbid0IGJlIGVudGVyZWQgdGhlbiB3ZSB3b24ndA0KPiA+IGdlbmVyYXRlDQo+ID4gPiArICAg ICBpdCBhdCBhbGwuICBTbyBmb3Igbm93IGZvcmNlIHNraXBfdmVjdG9yIG9mZiBiZWNhdXNlIHRo ZSBhZGRpdGlvbmFsDQo+IGNvbnRyb2wNCj4gPiA+ICsgICAgIGZsb3cgbWVzc2VzIHdpdGggdGhl IEJCIGV4aXRzIGFuZCB3ZSd2ZSBhbHJlYWR5IGFuYWx5emVkIHRoZW0uICAqLw0KPiA+ID4gKyBz a2lwX3ZlY3RvciA9IHNraXBfdmVjdG9yICYmICFMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUw0KPiA+ IChsb29wX3ZpbmZvKTsNCj4gPiA+ICsNCj4gPiA+ICAgIC8qIEVwaWxvZyBsb29wIG11c3QgYmUg ZXhlY3V0ZWQgaWYgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIGZvciBlcGlsb2cNCj4gPiA+ICAg ICAgIGxvb3AgaXMga25vd24gYXQgY29tcGlsZSB0aW1lLCBvdGhlcndpc2Ugd2UgbmVlZCB0byBh ZGQgYSBjaGVjayBhdA0KPiA+ID4gICAgICAgdGhlIGVuZCBvZiB2ZWN0b3IgbG9vcCBhbmQgc2tp cCB0byB0aGUgZW5kIG9mIGVwaWxvZyBsb29wLiAgKi8NCj4gPiA+ICAgIGJvb2wgc2tpcF9lcGls b2cgPSAocHJvbG9nX3BlZWxpbmcgPCAwDQo+ID4gPiAgCQkgICAgICB8fCAhTE9PUF9WSU5GT19O SVRFUlNfS05PV05fUCAobG9vcF92aW5mbykNCj4gPiA+ICAJCSAgICAgIHx8ICF2Zi5pc19jb25z dGFudCAoKSk7DQo+ID4gPiAtICAvKiBQRUVMSU5HX0ZPUl9HQVBTIGlzIHNwZWNpYWwgYmVjYXVz ZSBlcGlsb2cgbG9vcCBtdXN0IGJlDQo+IGV4ZWN1dGVkLg0KPiA+ICovDQo+ID4gPiAtICBpZiAo TE9PUF9WSU5GT19QRUVMSU5HX0ZPUl9HQVBTIChsb29wX3ZpbmZvKSkNCj4gPiA+ICsgIC8qIFBF RUxJTkdfRk9SX0dBUFMgYW5kIHBlZWxpbmcgZm9yIGVhcmx5IGJyZWFrcyBhcmUgc3BlY2lhbA0K PiBiZWNhdXNlDQo+ID4gZXBpbG9nDQo+ID4gPiArICAgICBsb29wIG11c3QgYmUgZXhlY3V0ZWQu ICAqLw0KPiA+ID4gKyAgaWYgKExPT1BfVklORk9fUEVFTElOR19GT1JfR0FQUyAobG9vcF92aW5m bykNCj4gPiA+ICsgICAgICB8fCBMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUyAobG9vcF92aW5mbykp DQo+ID4gPiAgICAgIHNraXBfZXBpbG9nID0gZmFsc2U7DQo+ID4gPiAtDQo+ID4gPiAgICBjbGFz cyBsb29wICpzY2FsYXJfbG9vcCA9IExPT1BfVklORk9fU0NBTEFSX0xPT1AgKGxvb3BfdmluZm8p Ow0KPiA+ID4gICAgYXV0b192ZWM8cHJvZmlsZV9jb3VudD4gb3JpZ2luYWxfY291bnRzOw0KPiA+ ID4gICAgYmFzaWNfYmxvY2sgKm9yaWdpbmFsX2JicyA9IE5VTEw7DQo+ID4gPiBAQCAtMjgyOCw3 ICszMTk5LDcgQEAgdmVjdF9kb19wZWVsaW5nIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+ IHRyZWUNCj4gPiBuaXRlcnMsIHRyZWUgbml0ZXJzbTEsDQo+ID4gPiAgICBpZiAocHJvbG9nX3Bl ZWxpbmcpDQo+ID4gPiAgICAgIHsNCj4gPiA+ICAgICAgICBlID0gbG9vcF9wcmVoZWFkZXJfZWRn ZSAobG9vcCk7DQo+ID4gPiAtICAgICAgaWYgKCFzbHBlZWxfY2FuX2R1cGxpY2F0ZV9sb29wX3Ag KGxvb3AsIGUpKQ0KPiA+ID4gKyAgICAgIGlmICghc2xwZWVsX2Nhbl9kdXBsaWNhdGVfbG9vcF9w IChsb29wX3ZpbmZvLCBlKSkNCj4gPiA+ICAJew0KPiA+ID4gIAkgIGR1bXBfcHJpbnRmX2xvYyAo TVNHX01JU1NFRF9PUFRJTUlaQVRJT04sIGxvb3BfbG9jLA0KPiA+ID4gIAkJCSAgICJsb29wIGNh bid0IGJlIGR1cGxpY2F0ZWQgdG8gcHJlaGVhZGVyIGVkZ2UuXG4iKTsNCj4gPiA+IEBAIC0yODQz LDcgKzMyMTQsNyBAQCB2ZWN0X2RvX3BlZWxpbmcgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywN Cj4gdHJlZQ0KPiA+IG5pdGVycywgdHJlZSBuaXRlcnNtMSwNCj4gPiA+ICAJICBnY2NfdW5yZWFj aGFibGUgKCk7DQo+ID4gPiAgCX0NCj4gPiA+ICAgICAgICBwcm9sb2ctPmZvcmNlX3ZlY3Rvcml6 ZSA9IGZhbHNlOw0KPiA+ID4gLSAgICAgIHNscGVlbF91cGRhdGVfcGhpX25vZGVzX2Zvcl9sb29w cyAobG9vcF92aW5mbywgcHJvbG9nLCBsb29wLCB0cnVlKTsNCj4gPiA+ICsgICAgICBzbHBlZWxf dXBkYXRlX3BoaV9ub2Rlc19mb3JfbG9vcHMgKGxvb3BfdmluZm8sIHByb2xvZywgbG9vcCwNCj4g TlVMTCwNCj4gPiB0cnVlKTsNCj4gPiA+ICAgICAgICBmaXJzdF9sb29wID0gcHJvbG9nOw0KPiA+ ID4gICAgICAgIHJlc2V0X29yaWdpbmFsX2NvcHlfdGFibGVzICgpOw0KPiA+ID4NCj4gPiA+IEBA IC0yOTAyLDExICszMjczLDEzIEBAIHZlY3RfZG9fcGVlbGluZyAobG9vcF92ZWNfaW5mbyBsb29w X3ZpbmZvLA0KPiA+IHRyZWUgbml0ZXJzLCB0cmVlIG5pdGVyc20xLA0KPiA+ID4NCj4gPiA+ICAg IGlmIChlcGlsb2dfcGVlbGluZykNCj4gPiA+ICAgICAgew0KPiA+ID4gLSAgICAgIGUgPSBzaW5n bGVfZXhpdCAobG9vcCk7DQo+ID4gPiAtICAgICAgaWYgKCFzbHBlZWxfY2FuX2R1cGxpY2F0ZV9s b29wX3AgKGxvb3AsIGUpKQ0KPiA+ID4gKyAgICAgIGF1dG9fdmVjPGVkZ2U+IGV4aXRzID0gZ2V0 X2xvb3BfZXhpdF9lZGdlcyAobG9vcCk7DQo+ID4gPiArICAgICAgZSA9IGV4aXRzWzBdOw0KPiA+ ID4gKyAgICAgIGlmICghc2xwZWVsX2Nhbl9kdXBsaWNhdGVfbG9vcF9wIChsb29wX3ZpbmZvLCBl KSkNCj4gPiA+ICAJew0KPiA+ID4gLQkgIGR1bXBfcHJpbnRmX2xvYyAoTVNHX01JU1NFRF9PUFRJ TUlaQVRJT04sIGxvb3BfbG9jLA0KPiA+ID4gLQkJCSAgICJsb29wIGNhbid0IGJlIGR1cGxpY2F0 ZWQgdG8gZXhpdCBlZGdlLlxuIik7DQo+ID4gPiArCSAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0K PiA+ID4gKwkgICAgZHVtcF9wcmludGZfbG9jIChNU0dfTUlTU0VEX09QVElNSVpBVElPTiwgbG9v cF9sb2MsDQo+ID4gPiArCQkJICAgICAibG9vcCBjYW4ndCBiZSBkdXBsaWNhdGVkIHRvIGV4aXQg ZWRnZS5cbiIpOw0KPiA+ID4gIAkgIGdjY191bnJlYWNoYWJsZSAoKTsNCj4gPiA+ICAJfQ0KPiA+ ID4gICAgICAgIC8qIFBlZWwgZXBpbG9nIGFuZCBwdXQgaXQgb24gZXhpdCBlZGdlIG9mIGxvb3Au ICBJZiB3ZSBhcmUgdmVjdG9yaXppbmcNCj4gPiA+IEBAIC0yOTIwLDEyICszMjkzLDE2IEBAIHZl Y3RfZG9fcGVlbGluZyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0KPiA+IHRyZWUgbml0ZXJz LCB0cmVlIG5pdGVyc20xLA0KPiA+ID4gICAgICAgIGVwaWxvZyA9IHNscGVlbF90cmVlX2R1cGxp Y2F0ZV9sb29wX3RvX2VkZ2VfY2ZnIChsb29wLCBlcGlsb2csIGUpOw0KPiA+ID4gICAgICAgIGlm ICghZXBpbG9nKQ0KPiA+ID4gIAl7DQo+ID4gPiAtCSAgZHVtcF9wcmludGZfbG9jIChNU0dfTUlT U0VEX09QVElNSVpBVElPTiwgbG9vcF9sb2MsDQo+ID4gPiAtCQkJICAgInNscGVlbF90cmVlX2R1 cGxpY2F0ZV9sb29wX3RvX2VkZ2VfY2ZnDQo+ID4gZmFpbGVkLlxuIik7DQo+ID4gPiArCSAgaWYg KGR1bXBfZW5hYmxlZF9wICgpKQ0KPiA+ID4gKwkgICAgZHVtcF9wcmludGZfbG9jIChNU0dfTUlT U0VEX09QVElNSVpBVElPTiwgbG9vcF9sb2MsDQo+ID4gPiArCQkJICAgICAic2xwZWVsX3RyZWVf ZHVwbGljYXRlX2xvb3BfdG9fZWRnZV9jZmcNCj4gPiBmYWlsZWQuXG4iKTsNCj4gPiA+ICAJICBn Y2NfdW5yZWFjaGFibGUgKCk7DQo+ID4gPiAgCX0NCj4gPiA+ICAgICAgICBlcGlsb2ctPmZvcmNl X3ZlY3Rvcml6ZSA9IGZhbHNlOw0KPiA+ID4gLSAgICAgIHNscGVlbF91cGRhdGVfcGhpX25vZGVz X2Zvcl9sb29wcyAobG9vcF92aW5mbywgbG9vcCwgZXBpbG9nLCBmYWxzZSk7DQo+ID4gPiArDQo+ ID4gPiArICAgICAgdHJlZSBlYXJseV9icmVha19pdl9uYW1lOw0KPiA+ID4gKyAgICAgIHNscGVl bF91cGRhdGVfcGhpX25vZGVzX2Zvcl9sb29wcyAobG9vcF92aW5mbywgbG9vcCwgZXBpbG9nLA0K PiA+ID4gKwkJCQkJICZlYXJseV9icmVha19pdl9uYW1lLCBmYWxzZSk7DQo+ID4gPg0KPiA+ID4g ICAgICAgIC8qIFNjYWxhciB2ZXJzaW9uIGxvb3AgbWF5IGJlIHByZWZlcnJlZC4gIEluIHRoaXMg Y2FzZSwgYWRkIGd1YXJkDQo+ID4gPiAgCSBhbmQgc2tpcCB0byBlcGlsb2cuICBOb3RlIHRoaXMg b25seSBoYXBwZW5zIHdoZW4gdGhlIG51bWJlciBvZg0KPiA+ID4gQEAgLTI5NzgsNiArMzM1NSw3 IEBAIHZlY3RfZG9fcGVlbGluZyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0KPiB0cmVlDQo+ ID4gbml0ZXJzLCB0cmVlIG5pdGVyc20xLA0KPiA+ID4gICAgICAgIHZlY3RfZ2VuX3ZlY3Rvcl9s b29wX25pdGVycyAobG9vcF92aW5mbywgbml0ZXJzLA0KPiA+ID4gIAkJCQkgICBuaXRlcnNfdmVj dG9yLCBzdGVwX3ZlY3RvciwNCj4gPiA+ICAJCQkJICAgbml0ZXJzX25vX292ZXJmbG93KTsNCj4g PiA+ICsNCj4gPiA+ICAgICAgICBpZiAoIWludGVnZXJfb25lcCAoKnN0ZXBfdmVjdG9yKSkNCj4g PiA+ICAJew0KPiA+ID4gIAkgIC8qIE9uIGV4aXQgZnJvbSB0aGUgbG9vcCB3ZSB3aWxsIGhhdmUg YW4gZWFzeSB3YXkgb2YgY2FsY2FsYXRpbmcNCj4gPiA+IEBAIC0yOTg3LDkgKzMzNjUsMTMgQEAg dmVjdF9kb19wZWVsaW5nIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+ID4gdHJlZSBuaXRl cnMsIHRyZWUgbml0ZXJzbTEsDQo+ID4gPiAgCSAgU1NBX05BTUVfREVGX1NUTVQgKG5pdGVyc192 ZWN0b3JfbXVsdF92ZikgPQ0KPiA+IGdpbXBsZV9idWlsZF9ub3AgKCk7DQo+ID4gPiAgCSAgKm5p dGVyc192ZWN0b3JfbXVsdF92Zl92YXIgPSBuaXRlcnNfdmVjdG9yX211bHRfdmY7DQo+ID4gPiAg CX0NCj4gPiA+ICsgICAgICBlbHNlIGlmIChMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUyAobG9vcF92 aW5mbykpDQo+ID4gPiArCXZlY3RfZ2VuX3ZlY3Rvcl9sb29wX25pdGVyc19tdWx0X3ZmIChsb29w X3ZpbmZvLA0KPiA+IGVhcmx5X2JyZWFrX2l2X25hbWUsDQo+ID4gPiArCQkJCQkgICAgICZuaXRl cnNfdmVjdG9yX211bHRfdmYpOw0KPiA+ID4gICAgICAgIGVsc2UNCj4gPiA+ICAJdmVjdF9nZW5f dmVjdG9yX2xvb3Bfbml0ZXJzX211bHRfdmYgKGxvb3BfdmluZm8sICpuaXRlcnNfdmVjdG9yLA0K PiA+ID4gIAkJCQkJICAgICAmbml0ZXJzX3ZlY3Rvcl9tdWx0X3ZmKTsNCj4gPiA+ICsNCj4gPiA+ ICAgICAgICAvKiBVcGRhdGUgSVZzIG9mIG9yaWdpbmFsIGxvb3AgYXMgaWYgdGhleSB3ZXJlIGFk dmFuY2VkIGJ5DQo+ID4gPiAgCSBuaXRlcnNfdmVjdG9yX211bHRfdmYgc3RlcHMuICAqLw0KPiA+ ID4gICAgICAgIGdjY19jaGVja2luZ19hc3NlcnQgKHZlY3RfY2FuX2FkdmFuY2VfaXZzX3AgKGxv b3BfdmluZm8pKTsNCj4gPiA+IEBAIC0yOTk3LDEyICszMzc5LDk3IEBAIHZlY3RfZG9fcGVlbGlu ZyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0KPiA+IHRyZWUgbml0ZXJzLCB0cmVlIG5pdGVy c20xLA0KPiA+ID4gICAgICAgIHZlY3RfdXBkYXRlX2l2c19hZnRlcl92ZWN0b3JpemVyIChsb29w X3ZpbmZvLA0KPiBuaXRlcnNfdmVjdG9yX211bHRfdmYsDQo+ID4gPiAgCQkJCQl1cGRhdGVfZSk7 DQo+ID4gPg0KPiA+ID4gKyAgICAgIC8qIEZvciBlYXJseSBicmVha3Mgd2UgbXVzdCBjcmVhdGUg YSBndWFyZCB0byBjaGVjayBob3cgbWFueQ0KPiA+IGl0ZXJhdGlvbnMNCj4gPiA+ICsJIG9mIHRo ZSBzY2FsYXIgbG9vcCBhcmUgeWV0IHRvIGJlIHBlcmZvcm1lZC4gICovDQo+ID4gPiArICAgICAg aWYgKExPT1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKSkNCj4gPiA+ICsJew0KPiA+ ID4gKwkgIGdjY19hc3NlcnQgKGVhcmx5X2JyZWFrX2l2X25hbWUpOw0KPiA+ID4gKwkgIHRyZWUg aXZ0bXAgPQ0KPiA+ID4gKwkgICAgdmVjdF91cGRhdGVfaXZzX2FmdGVyX2Vhcmx5X2JyZWFrIChs b29wX3ZpbmZvLCBlcGlsb2csIHZmLCBuaXRlcnMsDQo+ID4gPiArCQkJCQkgICAgICAgKm5pdGVy c192ZWN0b3IsIHVwZGF0ZV9lKTsNCj4gPiA+ICsNCj4gPiA+ICsJICB0cmVlIGd1YXJkX2NvbmQg PSBmb2xkX2J1aWxkMiAoRVFfRVhQUiwgYm9vbGVhbl90eXBlX25vZGUsDQo+ID4gPiArCQkJCQkg Zm9sZF9jb252ZXJ0IChUUkVFX1RZUEUgKG5pdGVycyksDQo+ID4gPiArCQkJCQkJICAgICAgIGl2 dG1wKSwNCj4gPiA+ICsJCQkJCSBidWlsZF96ZXJvX2NzdCAoVFJFRV9UWVBFIChuaXRlcnMpKSk7 DQo+ID4gPiArCSAgYmFzaWNfYmxvY2sgZ3VhcmRfYmIgPSBub3JtYWxfZXhpdCAobG9vcCktPmRl c3Q7DQo+ID4gPiArCSAgYXV0b192ZWM8ZWRnZT4gbmV3X2V4aXRzID0gZ2V0X2xvb3BfZXhpdF9l ZGdlcyAoZXBpbG9nKTsNCj4gPiA+ICsJICAvKiBJZiB3ZSBoYWQgYSBmYWxsdGhyb3VnaCBlZGdl LCB0aGUgZ3VhcmQgd2lsbCB0aGUgdGhyZWFkZWQgdGhyb3VnaA0KPiA+ID4gKwkgICAgIGFuZCBz byB3ZSBtYXkgbmVlZCB0byBmaW5kIHRoZSBhY3R1YWwgZmluYWwgZWRnZS4gICovDQo+ID4gPiAr CSAgZWRnZSBmaW5hbF9lZGdlID0gbmV3X2V4aXRzWzBdOw0KPiA+ID4gKwkgIGJhc2ljX2Jsb2Nr IGd1YXJkX3RvOw0KPiA+ID4gKwkgIGJvb2wgZm5fZXhpdF9wID0gZmFsc2U7DQo+ID4gPiArCSAg aWYgKGdzaV9lbmRfcCAoZ3NpX3N0YXJ0X25vbmRlYnVnX2JiIChmaW5hbF9lZGdlLT5kZXN0KSkN Cj4gPiA+ICsJICAgICAgJiYgIWdzaV9lbmRfcCAoZ3NpX3N0YXJ0X3BoaXMgKGZpbmFsX2VkZ2Ut PmRlc3QpKQ0KPiA+ID4gKwkgICAgICAmJiBzaW5nbGVfc3VjY19wIChmaW5hbF9lZGdlLT5kZXN0 KSkNCj4gPiA+ICsJICAgIHsNCj4gPiA+ICsJICAgICAgYXV0byBnc2kgPSBnc2lfc3RhcnRfcGhp cyAoZmluYWxfZWRnZS0+ZGVzdCk7DQo+ID4gPiArCSAgICAgIHdoaWxlICghZ3NpX2VuZF9wIChn c2kpKQ0KPiA+ID4gKwkJZ3NpX3JlbW92ZSAoJmdzaSwgdHJ1ZSk7DQo+ID4gPiArCSAgICAgIGd1 YXJkX3RvID0gZmluYWxfZWRnZS0+ZGVzdDsNCj4gPiA+ICsJICAgICAgZm5fZXhpdF9wID0gdHJ1 ZTsNCj4gPiA+ICsJICAgIH0NCj4gPiA+ICsJICBlbHNlDQo+ID4gPiArCSAgICBndWFyZF90byA9 IHNwbGl0X2VkZ2UgKG5vcm1hbF9leGl0IChlcGlsb2cpKTsNCj4gPiA+ICsNCj4gPiA+ICsJICBl ZGdlIGd1YXJkX2UgPSBzbHBlZWxfYWRkX2xvb3BfZ3VhcmQgKGd1YXJkX2JiLCBndWFyZF9jb25k LA0KPiA+IGd1YXJkX3RvLA0KPiA+ID4gKwkJCQkJICAgZ3VhcmRfYmIsDQo+ID4gPiArCQkJCQkg ICBwcm9iX2VwaWxvZy5pbnZlcnQgKCksDQo+ID4gPiArCQkJCQkgICBpcnJlZF9mbGFnKTsNCj4g PiA+ICsNCj4gPiA+ICsJICBiYXNpY19ibG9jayBkZXN0ID0gc2luZ2xlX3N1Y2MgKGd1YXJkX3Rv KTsNCj4gPiA+ICsJICAvKiBJZiB3ZSBoYXZlIGEgc2luZ2xlIHByZWQgdGhlbiB0aGUgcHJldmlv dXMgYmxvY2sgaXMgdGhlIGltbWVkaWF0ZQ0KPiA+ID4gKwkgICAgIGRvbWluYXRvci4gICBUaGlz IG1heSBvciBtYXkgbm90IGJlIHRoZSBndWFyZCBiYi4gIEhvd2V2ZXIgaWYgd2UNCj4gPiA+ICsJ ICAgICBoYXZlIG11bHRpcGxlIHByZWQgdGhlbiB0aGUgZ3VhcmQgQkIgbXVzdCBiZSB0aGUgZG9t aW5hdG9yIGFzIGFsbA0KPiA+ID4gKwkgICAgIHByZXZpb3VzIGV4aXRzIGdvdCByZXdyaXRlZCB0 byB0aGUgZ3VhcmQgQkIuICAqLw0KPiA+ID4gKwkgIGlmIChzaW5nbGVfcHJlZF9wIChkZXN0KSkN Cj4gPiA+ICsJICAgIHNldF9pbW1lZGlhdGVfZG9taW5hdG9yIChDRElfRE9NSU5BVE9SUywgZGVz dCwgZ3VhcmRfdG8pOw0KPiA+ID4gKwkgIGVsc2UNCj4gPiA+ICsJICAgIHNldF9pbW1lZGlhdGVf ZG9taW5hdG9yIChDRElfRE9NSU5BVE9SUywgZGVzdCwgZ3VhcmRfYmIpOw0KPiA+ID4gKw0KPiA+ ID4gKwkgIC8qIFdlIG11c3QgdXBkYXRlIGFsbCB0aGUgZWRnZXMgZnJvbSB0aGUgbmV3IGd1YXJk X2JiLiAgKi8NCj4gPiA+ICsJICBzbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3JfZ3VhcmQyIChs b29wLCBlcGlsb2csIGd1YXJkX2UsDQo+ID4gPiArCQkJCQkgICAgICBmaW5hbF9lZGdlKTsNCj4g PiA+ICsNCj4gPiA+ICsJICAvKiBJZiB3ZSBoYXZlIGFuIGFkZGl0aW9uYWwgZnVuY3Rpb25lIGV4 aXQgYmxvY2ssIHRoZW4gdGhyZWFkIHRoZQ0KPiA+IHVwZGF0ZXMNCj4gPiA+ICsJICAgICB0aHJv dWdoIHRvIHRoZSBibG9jay4gIExlYXZpbmcgaXQgdXAgdG8gdGhlIExDU1NBIGNsZWFudXAgcGFz cyB3aWxsDQo+ID4gPiArCSAgICAgZ2V0IHRoZSB3cm9uZyB2YWx1ZXMgaGVyZSBhcyBpdCBjYW4n dCBoYW5kbGUgdGhlIG1lcmdlIGJsb2NrIHdlDQo+ID4ganVzdA0KPiA+ID4gKwkgICAgIG1hZGUg Y29ycmVjdGx5LiAgKi8NCj4gPiA+ICsJICBpZiAoZm5fZXhpdF9wKQ0KPiA+ID4gKwkgICAgew0K PiA+ID4gKwkJZ3BoaV9pdGVyYXRvciBnc2lfdXBkYXRlLCBnc2lfb3JpZywgZ3NpX3ZlY3Q7DQo+ ID4gPiArCQlmb3IgKGdzaV9vcmlnID0gZ3NpX3N0YXJ0X3BoaXMgKGVwaWxvZy0+aGVhZGVyKSwN Cj4gPiA+ICsJCSAgICAgZ3NpX3VwZGF0ZSA9IGdzaV9zdGFydF9waGlzIChndWFyZF9lLT5kZXN0 KSwNCj4gPiA+ICsJCSAgICAgZ3NpX3ZlY3QgPSBnc2lfc3RhcnRfcGhpcyAobG9vcC0+aGVhZGVy KTsNCj4gPiA+ICsJCSAgICAgIWdzaV9lbmRfcCAoZ3NpX29yaWcpICYmICFnc2lfZW5kX3AgKGdz aV91cGRhdGUpDQo+ID4gPiArCQkgICAgICYmICFnc2lfZW5kX3AgKGdzaV92ZWN0KTsNCj4gPiA+ ICsJCSAgICAgZ3NpX25leHQgKCZnc2lfb3JpZyksIGdzaV9uZXh0ICgmZ3NpX3VwZGF0ZSksDQo+ ID4gPiArCQkgICAgIGdzaV9uZXh0ICgmZ3NpX3ZlY3QpKQ0KPiA+ID4gKwkJICB7DQo+ID4gPiAr CQkgICAgZ3BoaSAqb3JpZ19waGkgPSBnc2lfb3JpZy5waGkgKCk7DQo+ID4gPiArCQkgICAgZ3Bo aSAqdXBkYXRlX3BoaSA9IGdzaV91cGRhdGUucGhpICgpOw0KPiA+ID4gKwkJICAgIGdwaGkgKnZl Y3RfcGhpID0gZ3NpX3ZlY3QucGhpICgpOw0KPiA+ID4gKwkJICAgIHN0bXRfdmVjX2luZm8gcGhp X2luZm8gPSBsb29wX3ZpbmZvLT5sb29rdXBfc3RtdA0KPiA+ICh2ZWN0X3BoaSk7DQo+ID4gPiAr DQo+ID4gPiArCQkgICAgaWYgKGl2X3BoaV9wIChwaGlfaW5mbykpDQo+ID4gPiArCQkgICAgICBj b250aW51ZTsNCj4gPiA+ICsNCj4gPiA+ICsJCSAgICB0cmVlIHBoaV9hcmcgPSBQSElfQVJHX0RF Rl9GUk9NX0VER0UgKG9yaWdfcGhpLA0KPiA+IHVwZGF0ZV9lKTsNCj4gPiA+ICsJCSAgICBTRVRf UEhJX0FSR19ERUYgKHVwZGF0ZV9waGksIHVwZGF0ZV9lLT5kZXN0X2lkeCwNCj4gPiBwaGlfYXJn KTsNCj4gPiA+ICsNCj4gPiA+ICsJCSAgICBwaGlfYXJnID0gUEhJX0FSR19ERUZfRlJPTV9FREdF IChvcmlnX3BoaSwgZ3VhcmRfZSk7DQo+ID4gPiArCQkgICAgU0VUX1BISV9BUkdfREVGICh1cGRh dGVfcGhpLCBndWFyZF9lLT5kZXN0X2lkeCwNCj4gPiBwaGlfYXJnKTsNCj4gPiA+ICsJCSAgfQ0K PiA+ID4gKwkgICAgfQ0KPiA+ID4gKwkgIGZsdXNoX3BlbmRpbmdfc3RtdHMgKGd1YXJkX2UpOw0K PiA+ID4gKwl9DQo+ID4gPiArDQo+ID4gPiAgICAgICAgaWYgKHNraXBfZXBpbG9nKQ0KPiA+ID4g IAl7DQo+ID4gPiAgCSAgZ3VhcmRfY29uZCA9IGZvbGRfYnVpbGQyIChFUV9FWFBSLCBib29sZWFu X3R5cGVfbm9kZSwNCj4gPiA+ICAJCQkJICAgIG5pdGVycywgbml0ZXJzX3ZlY3Rvcl9tdWx0X3Zm KTsNCj4gPiA+IC0JICBndWFyZF9iYiA9IHNpbmdsZV9leGl0IChsb29wKS0+ZGVzdDsNCj4gPiA+ IC0JICBndWFyZF90byA9IHNwbGl0X2VkZ2UgKHNpbmdsZV9leGl0IChlcGlsb2cpKTsNCj4gPiA+ ICsJICBndWFyZF9iYiA9IG5vcm1hbF9leGl0IChsb29wKS0+ZGVzdDsNCj4gPiA+ICsJICBndWFy ZF90byA9IHNwbGl0X2VkZ2UgKG5vcm1hbF9leGl0IChlcGlsb2cpKTsNCj4gPiA+ICAJICBndWFy ZF9lID0gc2xwZWVsX2FkZF9sb29wX2d1YXJkIChndWFyZF9iYiwgZ3VhcmRfY29uZCwNCj4gPiBn dWFyZF90bywNCj4gPiA+ICAJCQkJCSAgIHNraXBfdmVjdG9yID8gYW5jaG9yIDogZ3VhcmRfYmIs DQo+ID4gPiAgCQkJCQkgICBwcm9iX2VwaWxvZy5pbnZlcnQgKCksDQo+ID4gPiBAQCAtMzAxMCw3 ICszNDc3LDcgQEAgdmVjdF9kb19wZWVsaW5nIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+ IHRyZWUNCj4gPiBuaXRlcnMsIHRyZWUgbml0ZXJzbTEsDQo+ID4gPiAgCSAgaWYgKHZlY3RfZXBp bG9ndWVzKQ0KPiA+ID4gIAkgICAgZXBpbG9ndWVfdmluZm8tPnNraXBfdGhpc19sb29wX2VkZ2Ug PSBndWFyZF9lOw0KPiA+ID4gIAkgIHNscGVlbF91cGRhdGVfcGhpX25vZGVzX2Zvcl9ndWFyZDIg KGxvb3AsIGVwaWxvZywgZ3VhcmRfZSwNCj4gPiA+IC0JCQkJCSAgICAgIHNpbmdsZV9leGl0IChl cGlsb2cpKTsNCj4gPiA+ICsJCQkJCSAgICAgIG5vcm1hbF9leGl0IChlcGlsb2cpKTsNCj4gPiA+ ICAJICAvKiBPbmx5IG5lZWQgdG8gaGFuZGxlIGJhc2ljIGJsb2NrIGJlZm9yZSBlcGlsb2cgbG9v cCBpZiBpdCdzIG5vdA0KPiA+ID4gIAkgICAgIHRoZSBndWFyZF9iYiwgd2hpY2ggaXMgdGhlIGNh c2Ugd2hlbiBza2lwX3ZlY3RvciBpcyB0cnVlLiAgKi8NCj4gPiA+ICAJICBpZiAoZ3VhcmRfYmIg IT0gYmJfYmVmb3JlX2VwaWxvZykNCj4gPiA+IEBAIC0zMDIzLDcgKzM0OTAsNiBAQCB2ZWN0X2Rv X3BlZWxpbmcgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywNCj4gdHJlZQ0KPiA+IG5pdGVycywg dHJlZSBuaXRlcnNtMSwNCj4gPiA+ICAJfQ0KPiA+ID4gICAgICAgIGVsc2UNCj4gPiA+ICAJc2xw ZWVsX3VwZGF0ZV9waGlfbm9kZXNfZm9yX2xjc3NhIChlcGlsb2cpOw0KPiA+ID4gLQ0KPiA+ID4g ICAgICAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgYm91bmQ7DQo+ID4gPiAgICAgICAgaWYgKGJv dW5kX3NjYWxhci5pc19jb25zdGFudCAoJmJvdW5kKSkNCj4gPiA+ICAJew0KPiA+ID4gQEAgLTMx MTQsNyArMzU4MCw2IEBAIHZlY3RfZG9fcGVlbGluZyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZv LA0KPiB0cmVlDQo+ID4gbml0ZXJzLCB0cmVlIG5pdGVyc20xLA0KPiA+ID4NCj4gPiA+ICAgIGFk anVzdF92ZWMucmVsZWFzZSAoKTsNCj4gPiA+ICAgIGZyZWVfb3JpZ2luYWxfY29weV90YWJsZXMg KCk7DQo+ID4gPiAtDQo+ID4gPiAgICByZXR1cm4gdmVjdF9lcGlsb2d1ZXMgPyBlcGlsb2cgOiBO VUxMOw0KPiA+ID4gIH0NCj4gPiA+DQo+ID4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdC1s b29wLmNjIGIvZ2NjL3RyZWUtdmVjdC1sb29wLmNjDQo+ID4gPiBpbmRleA0KPiA+DQo+IGQ1YzJi ZmY4MGJlOWJlMTUyNzA3ZWI5ZDM5MzJjODYzOTQ4ZGFhNzMuLjU0ODk0NmE2YmJmODg5MjA4NmEx N2ZlMzANCj4gPiAwM2RhMmMzZGNlYWRmNWIgMTAwNjQ0DQo+ID4gPiAtLS0gYS9nY2MvdHJlZS12 ZWN0LWxvb3AuY2MNCj4gPiA+ICsrKyBiL2djYy90cmVlLXZlY3QtbG9vcC5jYw0KPiA+ID4gQEAg LTg0NCw4MCArODQ0LDEwNiBAQCB2ZWN0X2ZpeHVwX3NjYWxhcl9jeWNsZXNfd2l0aF9wYXR0ZXJu cw0KPiA+IChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8pDQo+ID4gPiAgICAgaW4gTlVNQkVSX09G X0lURVJBVElPTlNNMS4gIFBsYWNlIHRoZSBjb25kaXRpb24gdW5kZXIgd2hpY2ggdGhlDQo+ID4g PiAgICAgbml0ZXIgaW5mb3JtYXRpb24gaG9sZHMgaW4gQVNTVU1QVElPTlMuDQo+ID4gPg0KPiA+ ID4gLSAgIFJldHVybiB0aGUgbG9vcCBleGl0IGNvbmRpdGlvbi4gICovDQo+ID4gPiArICAgUmV0 dXJuIHRoZSBsb29wIGV4aXQgY29uZGl0aW9ucy4gICovDQo+ID4gPg0KPiA+ID4NCj4gPiA+IC1z dGF0aWMgZ2NvbmQgKg0KPiA+ID4gK3N0YXRpYyB2ZWM8Z2NvbmQgKj4NCj4gPiA+ICB2ZWN0X2dl dF9sb29wX25pdGVycyAoY2xhc3MgbG9vcCAqbG9vcCwgdHJlZSAqYXNzdW1wdGlvbnMsDQo+ID4g PiAgCQkgICAgICB0cmVlICpudW1iZXJfb2ZfaXRlcmF0aW9ucywgdHJlZQ0KPiA+ICpudW1iZXJf b2ZfaXRlcmF0aW9uc20xKQ0KPiA+ID4gIHsNCj4gPiA+IC0gIGVkZ2UgZXhpdCA9IHNpbmdsZV9l eGl0IChsb29wKTsNCj4gPiA+ICsgIGF1dG9fdmVjPGVkZ2U+IGV4aXRzID0gZ2V0X2xvb3BfZXhp dF9lZGdlcyAobG9vcCk7DQo+ID4gPiArICB2ZWM8Z2NvbmQgKj4gY29uZHM7DQo+ID4gPiArICBj b25kcy5jcmVhdGUgKGV4aXRzLmxlbmd0aCAoKSk7DQo+ID4gPiAgICBjbGFzcyB0cmVlX25pdGVy X2Rlc2Mgbml0ZXJfZGVzYzsNCj4gPiA+ICAgIHRyZWUgbml0ZXJfYXNzdW1wdGlvbnMsIG5pdGVy LCBtYXlfYmVfemVybzsNCj4gPiA+IC0gIGdjb25kICpjb25kID0gZ2V0X2xvb3BfZXhpdF9jb25k aXRpb24gKGxvb3ApOw0KPiA+ID4NCj4gPiA+ICAgICphc3N1bXB0aW9ucyA9IGJvb2xlYW5fdHJ1 ZV9ub2RlOw0KPiA+ID4gICAgKm51bWJlcl9vZl9pdGVyYXRpb25zbTEgPSBjaHJlY19kb250X2tu b3c7DQo+ID4gPiAgICAqbnVtYmVyX29mX2l0ZXJhdGlvbnMgPSBjaHJlY19kb250X2tub3c7DQo+ ID4gPiArDQo+ID4gPiAgICBEVU1QX1ZFQ1RfU0NPUEUgKCJnZXRfbG9vcF9uaXRlcnMiKTsNCj4g PiA+DQo+ID4gPiAtICBpZiAoIWV4aXQpDQo+ID4gPiAtICAgIHJldHVybiBjb25kOw0KPiA+ID4g KyAgaWYgKGV4aXRzLmlzX2VtcHR5ICgpKQ0KPiA+ID4gKyAgICByZXR1cm4gY29uZHM7DQo+ID4g Pg0KPiA+ID4gLSAgbWF5X2JlX3plcm8gPSBOVUxMX1RSRUU7DQo+ID4gPiAtICBpZiAoIW51bWJl cl9vZl9pdGVyYXRpb25zX2V4aXRfYXNzdW1wdGlvbnMgKGxvb3AsIGV4aXQsICZuaXRlcl9kZXNj LA0KPiA+IE5VTEwpDQo+ID4gPiAtICAgICAgfHwgY2hyZWNfY29udGFpbnNfdW5kZXRlcm1pbmVk IChuaXRlcl9kZXNjLm5pdGVyKSkNCj4gPiA+IC0gICAgcmV0dXJuIGNvbmQ7DQo+ID4gPiArICBp ZiAoZHVtcF9lbmFibGVkX3AgKCkpDQo+ID4gPiArICAgIGR1bXBfcHJpbnRmX2xvYyAoTVNHX05P VEUsIHZlY3RfbG9jYXRpb24sICJMb29wIGhhcyAlZCBleGl0cy5cbiIsDQo+ID4gPiArCQkgICAg IGV4aXRzLmxlbmd0aCAoKSk7DQo+ID4gPg0KPiA+ID4gLSAgbml0ZXJfYXNzdW1wdGlvbnMgPSBu aXRlcl9kZXNjLmFzc3VtcHRpb25zOw0KPiA+ID4gLSAgbWF5X2JlX3plcm8gPSBuaXRlcl9kZXNj Lm1heV9iZV96ZXJvOw0KPiA+ID4gLSAgbml0ZXIgPSBuaXRlcl9kZXNjLm5pdGVyOw0KPiA+ID4g KyAgZWRnZSBleGl0Ow0KPiA+ID4gKyAgdW5zaWduZWQgaW50IGk7DQo+ID4gPiArICBGT1JfRUFD SF9WRUNfRUxUIChleGl0cywgaSwgZXhpdCkNCj4gPiA+ICsgICAgew0KPiA+ID4gKyAgICAgIGdj b25kICpjb25kID0gZ2V0X2VkZ2VfY29uZGl0aW9uIChleGl0KTsNCj4gPiA+ICsgICAgICBpZiAo Y29uZCkNCj4gPiA+ICsJY29uZHMuc2FmZV9wdXNoIChjb25kKTsNCj4gPiA+DQo+ID4gPiAtICBp ZiAobWF5X2JlX3plcm8gJiYgaW50ZWdlcl96ZXJvcCAobWF5X2JlX3plcm8pKQ0KPiA+ID4gLSAg ICBtYXlfYmVfemVybyA9IE5VTExfVFJFRTsNCj4gPiA+ICsgICAgICBpZiAoZHVtcF9lbmFibGVk X3AgKCkpDQo+ID4gPiArCWR1bXBfcHJpbnRmX2xvYyAoTVNHX05PVEUsIHZlY3RfbG9jYXRpb24s ICJBbmFseXppbmcgZXhpdA0KPiA+ICVkLi4uXG4iLCBpKTsNCj4gPiA+DQo+ID4gPiAtICBpZiAo bWF5X2JlX3plcm8pDQo+ID4gPiAtICAgIHsNCj4gPiA+IC0gICAgICBpZiAoQ09NUEFSSVNPTl9D TEFTU19QIChtYXlfYmVfemVybykpDQo+ID4gPiArICAgICAgbWF5X2JlX3plcm8gPSBOVUxMX1RS RUU7DQo+ID4gPiArICAgICAgaWYgKCFudW1iZXJfb2ZfaXRlcmF0aW9uc19leGl0X2Fzc3VtcHRp b25zIChsb29wLCBleGl0LA0KPiAmbml0ZXJfZGVzYywNCj4gPiBOVUxMKQ0KPiA+ID4gKyAgICAg ICAgICB8fCBjaHJlY19jb250YWluc191bmRldGVybWluZWQgKG5pdGVyX2Rlc2Mubml0ZXIpKQ0K PiA+ID4gKwljb250aW51ZTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICBuaXRlcl9hc3N1bXB0aW9u cyA9IG5pdGVyX2Rlc2MuYXNzdW1wdGlvbnM7DQo+ID4gPiArICAgICAgbWF5X2JlX3plcm8gPSBu aXRlcl9kZXNjLm1heV9iZV96ZXJvOw0KPiA+ID4gKyAgICAgIG5pdGVyID0gbml0ZXJfZGVzYy5u aXRlcjsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICBpZiAobWF5X2JlX3plcm8gJiYgaW50ZWdlcl96 ZXJvcCAobWF5X2JlX3plcm8pKQ0KPiA+ID4gKwltYXlfYmVfemVybyA9IE5VTExfVFJFRTsNCj4g PiA+ICsNCj4gPiA+ICsgICAgICBpZiAobWF5X2JlX3plcm8pDQo+ID4gPiAgCXsNCj4gPiA+IC0J ICAvKiBUcnkgdG8gY29tYmluZSBtYXlfYmVfemVybyB3aXRoIGFzc3VtcHRpb25zLCB0aGlzIGNh biBzaW1wbGlmeQ0KPiA+ID4gLQkgICAgIGNvbXB1dGF0aW9uIG9mIG5pdGVyIGV4cHJlc3Npb24u ICAqLw0KPiA+ID4gLQkgIGlmIChuaXRlcl9hc3N1bXB0aW9ucyAmJiAhaW50ZWdlcl9ub256ZXJv cCAobml0ZXJfYXNzdW1wdGlvbnMpKQ0KPiA+ID4gLQkgICAgbml0ZXJfYXNzdW1wdGlvbnMgPSBm b2xkX2J1aWxkMiAoVFJVVEhfQU5EX0VYUFIsDQo+ID4gYm9vbGVhbl90eXBlX25vZGUsDQo+ID4g PiAtCQkJCQkgICAgIG5pdGVyX2Fzc3VtcHRpb25zLA0KPiA+ID4gLQkJCQkJICAgICBmb2xkX2J1 aWxkMSAoVFJVVEhfTk9UX0VYUFIsDQo+ID4gPiAtDQo+ID4gYm9vbGVhbl90eXBlX25vZGUsDQo+ ID4gPiAtCQkJCQkJCSAgbWF5X2JlX3plcm8pKTsNCj4gPiA+ICsJICBpZiAoQ09NUEFSSVNPTl9D TEFTU19QIChtYXlfYmVfemVybykpDQo+ID4gPiArCSAgICB7DQo+ID4gPiArCSAgICAgIC8qIFRy eSB0byBjb21iaW5lIG1heV9iZV96ZXJvIHdpdGggYXNzdW1wdGlvbnMsIHRoaXMgY2FuDQo+ID4g c2ltcGxpZnkNCj4gPiA+ICsJCSBjb21wdXRhdGlvbiBvZiBuaXRlciBleHByZXNzaW9uLiAgKi8N Cj4gPiA+ICsJICAgICAgaWYgKG5pdGVyX2Fzc3VtcHRpb25zICYmICFpbnRlZ2VyX25vbnplcm9w IChuaXRlcl9hc3N1bXB0aW9ucykpDQo+ID4gPiArCQluaXRlcl9hc3N1bXB0aW9ucyA9IGZvbGRf YnVpbGQyIChUUlVUSF9BTkRfRVhQUiwNCj4gPiBib29sZWFuX3R5cGVfbm9kZSwNCj4gPiA+ICsJ CQkJCQkgbml0ZXJfYXNzdW1wdGlvbnMsDQo+ID4gPiArCQkJCQkJIGZvbGRfYnVpbGQxDQo+ID4g KFRSVVRIX05PVF9FWFBSLA0KPiA+ID4gKw0KPiA+IGJvb2xlYW5fdHlwZV9ub2RlLA0KPiA+ID4g KwkJCQkJCQkgICAgICBtYXlfYmVfemVybykpOw0KPiA+ID4gKwkgICAgICBlbHNlDQo+ID4gPiAr CQluaXRlciA9IGZvbGRfYnVpbGQzIChDT05EX0VYUFIsIFRSRUVfVFlQRSAobml0ZXIpLA0KPiA+ IG1heV9iZV96ZXJvLA0KPiA+ID4gKwkJCQkgICAgIGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAo bml0ZXIpLCAwKSwNCj4gPiA+ICsJCQkJICAgICByZXdyaXRlX3RvX25vbl90cmFwcGluZ19vdmVy Zmxvdw0KPiA+IChuaXRlcikpOw0KPiA+ID4gKw0KPiA+ID4gKwkgICAgICBtYXlfYmVfemVybyA9 IE5VTExfVFJFRTsNCj4gPiA+ICsJICAgIH0NCj4gPiA+ICsJICBlbHNlIGlmIChpbnRlZ2VyX25v bnplcm9wIChtYXlfYmVfemVybykgJiYgaSA9PSAwKQ0KPiA+ID4gKwkgICAgew0KPiA+ID4gKwkg ICAgICAqbnVtYmVyX29mX2l0ZXJhdGlvbnNtMSA9IGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAo bml0ZXIpLCAwKTsNCj4gPiA+ICsJICAgICAgKm51bWJlcl9vZl9pdGVyYXRpb25zID0gYnVpbGRf aW50X2NzdCAoVFJFRV9UWVBFIChuaXRlciksIDEpOw0KPiA+ID4gKwkgICAgICBjb250aW51ZTsN Cj4gPiA+ICsJICAgIH0NCj4gPiA+ICAJICBlbHNlDQo+ID4gPiAtCSAgICBuaXRlciA9IGZvbGRf YnVpbGQzIChDT05EX0VYUFIsIFRSRUVfVFlQRSAobml0ZXIpLCBtYXlfYmVfemVybywNCj4gPiA+ IC0JCQkJIGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAobml0ZXIpLCAwKSwNCj4gPiA+IC0JCQkJ IHJld3JpdGVfdG9fbm9uX3RyYXBwaW5nX292ZXJmbG93IChuaXRlcikpOw0KPiA+ID4gKwkgICAg Y29udGludWU7DQo+ID4gPiArICAgICAgIH0NCj4gPiA+DQo+ID4gPiAtCSAgbWF5X2JlX3plcm8g PSBOVUxMX1RSRUU7DQo+ID4gPiAtCX0NCj4gPiA+IC0gICAgICBlbHNlIGlmIChpbnRlZ2VyX25v bnplcm9wIChtYXlfYmVfemVybykpDQo+ID4gPiArICAgICAgLyogTG9vcCBhc3N1bXB0aW9ucyBh cmUgYmFzZWQgb2ZmIHRoZSBub3JtYWwgZXhpdC4gICovDQo+ID4gPiArICAgICAgaWYgKGkgPT0g MCkNCj4gPiA+ICAJew0KPiA+ID4gLQkgICpudW1iZXJfb2ZfaXRlcmF0aW9uc20xID0gYnVpbGRf aW50X2NzdCAoVFJFRV9UWVBFIChuaXRlciksIDApOw0KPiA+ID4gLQkgICpudW1iZXJfb2ZfaXRl cmF0aW9ucyA9IGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAobml0ZXIpLCAxKTsNCj4gPiA+IC0J ICByZXR1cm4gY29uZDsNCj4gPiA+ICsJICAqYXNzdW1wdGlvbnMgPSBuaXRlcl9hc3N1bXB0aW9u czsNCj4gPiA+ICsJICAqbnVtYmVyX29mX2l0ZXJhdGlvbnNtMSA9IG5pdGVyOw0KPiA+ID4gKw0K PiA+ID4gKwkgIC8qIFdlIHdhbnQgdGhlIG51bWJlciBvZiBsb29wIGhlYWRlciBleGVjdXRpb25z IHdoaWNoIGlzIHRoZQ0KPiA+IG51bWJlcg0KPiA+ID4gKwkgICAgIG9mIGxhdGNoIGV4ZWN1dGlv bnMgcGx1cyBvbmUuDQo+ID4gPiArCSAgICAgPz8/ICBGb3IgVUlOVF9NQVggbGF0Y2ggZXhlY3V0 aW9ucyB0aGlzIG51bWJlciBvdmVyZmxvd3MgdG8NCj4gPiB6ZXJvDQo+ID4gPiArCSAgICAgZm9y IGxvb3BzIGxpa2UgZG8geyBuKys7IH0gd2hpbGUgKG4gIT0gMCk7ICAqLw0KPiA+ID4gKwkgIGlm IChuaXRlciAmJiAhY2hyZWNfY29udGFpbnNfdW5kZXRlcm1pbmVkIChuaXRlcikpDQo+ID4gPiAr CSAgICBuaXRlciA9IGZvbGRfYnVpbGQyIChQTFVTX0VYUFIsIFRSRUVfVFlQRSAobml0ZXIpLA0K PiA+ID4gKwkJCQkgdW5zaGFyZV9leHByIChuaXRlciksDQo+ID4gPiArCQkJCSBidWlsZF9pbnRf Y3N0IChUUkVFX1RZUEUgKG5pdGVyKSwgMSkpOw0KPiA+ID4gKwkgICpudW1iZXJfb2ZfaXRlcmF0 aW9ucyA9IG5pdGVyOw0KPiA+ID4gIAl9DQo+ID4gPiAtICAgICAgZWxzZQ0KPiA+ID4gLQlyZXR1 cm4gY29uZDsNCj4gPiA+ICAgICAgfQ0KPiA+ID4NCj4gPiA+IC0gICphc3N1bXB0aW9ucyA9IG5p dGVyX2Fzc3VtcHRpb25zOw0KPiA+ID4gLSAgKm51bWJlcl9vZl9pdGVyYXRpb25zbTEgPSBuaXRl cjsNCj4gPiA+IC0NCj4gPiA+IC0gIC8qIFdlIHdhbnQgdGhlIG51bWJlciBvZiBsb29wIGhlYWRl ciBleGVjdXRpb25zIHdoaWNoIGlzIHRoZQ0KPiBudW1iZXINCj4gPiA+IC0gICAgIG9mIGxhdGNo IGV4ZWN1dGlvbnMgcGx1cyBvbmUuDQo+ID4gPiAtICAgICA/Pz8gIEZvciBVSU5UX01BWCBsYXRj aCBleGVjdXRpb25zIHRoaXMgbnVtYmVyIG92ZXJmbG93cyB0byB6ZXJvDQo+ID4gPiAtICAgICBm b3IgbG9vcHMgbGlrZSBkbyB7IG4rKzsgfSB3aGlsZSAobiAhPSAwKTsgICovDQo+ID4gPiAtICBp ZiAobml0ZXIgJiYgIWNocmVjX2NvbnRhaW5zX3VuZGV0ZXJtaW5lZCAobml0ZXIpKQ0KPiA+ID4g LSAgICBuaXRlciA9IGZvbGRfYnVpbGQyIChQTFVTX0VYUFIsIFRSRUVfVFlQRSAobml0ZXIpLCB1 bnNoYXJlX2V4cHINCj4gPiAobml0ZXIpLA0KPiA+ID4gLQkJCSAgYnVpbGRfaW50X2NzdCAoVFJF RV9UWVBFIChuaXRlciksIDEpKTsNCj4gPiA+IC0gICpudW1iZXJfb2ZfaXRlcmF0aW9ucyA9IG5p dGVyOw0KPiA+ID4gKyAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0KPiA+ID4gKyAgICBkdW1wX3By aW50Zl9sb2MgKE1TR19OT1RFLCB2ZWN0X2xvY2F0aW9uLCAiQWxsIGxvb3AgZXhpdHMNCj4gc3Vj Y2Vzc2Z1bGx5DQo+ID4gYW5hbHl6ZWQuXG4iKTsNCj4gPiA+DQo+ID4gPiAtICByZXR1cm4gY29u ZDsNCj4gPiA+ICsgIHJldHVybiBjb25kczsNCj4gPiA+ICB9DQo+ID4gPg0KPiA+ID4gIC8qIEZ1 bmN0aW9uIGJiX2luX2xvb3BfcA0KPiA+ID4gQEAgLTE0NTUsNyArMTQ4MSw4IEBAIHZlY3RfY29t cHV0ZV9zaW5nbGVfc2NhbGFyX2l0ZXJhdGlvbl9jb3N0DQo+ID4gKGxvb3BfdmVjX2luZm8gbG9v cF92aW5mbykNCj4gPiA+DQo+ID4gPiAgICAgVmVyaWZ5IHRoYXQgY2VydGFpbiBDRkcgcmVzdHJp Y3Rpb25zIGhvbGQsIGluY2x1ZGluZzoNCj4gPiA+ICAgICAtIHRoZSBsb29wIGhhcyBhIHByZS1o ZWFkZXINCj4gPiA+IC0gICAtIHRoZSBsb29wIGhhcyBhIHNpbmdsZSBlbnRyeSBhbmQgZXhpdA0K PiA+ID4gKyAgIC0gdGhlIGxvb3AgaGFzIGEgc2luZ2xlIGVudHJ5DQo+ID4gPiArICAgLSBuZXN0 ZWQgbG9vcHMgY2FuIGhhdmUgb25seSBhIHNpbmdsZSBleGl0Lg0KPiA+ID4gICAgIC0gdGhlIGxv b3AgZXhpdCBjb25kaXRpb24gaXMgc2ltcGxlIGVub3VnaA0KPiA+ID4gICAgIC0gdGhlIG51bWJl ciBvZiBpdGVyYXRpb25zIGNhbiBiZSBhbmFseXplZCwgaS5lLCBhIGNvdW50YWJsZSBsb29wLiAg VGhlDQo+ID4gPiAgICAgICBuaXRlciBjb3VsZCBiZSBhbmFseXplZCB1bmRlciBzb21lIGFzc3Vt cHRpb25zLiAgKi8NCj4gPiA+IEBAIC0xNDg0LDExICsxNTExLDYgQEAgdmVjdF9hbmFseXplX2xv b3BfZm9ybSAoY2xhc3MgbG9vcCAqbG9vcCwNCj4gPiB2ZWN0X2xvb3BfZm9ybV9pbmZvICppbmZv KQ0KPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCj4gPiA+ICAgICAgICAgICAg ICAgICAgICAgICAgICAoZXhpdC1iYikgICovDQo+ID4gPg0KPiA+ID4gLSAgICAgIGlmIChsb29w LT5udW1fbm9kZXMgIT0gMikNCj4gPiA+IC0JcmV0dXJuIG9wdF9yZXN1bHQ6OmZhaWx1cmVfYXQg KHZlY3RfbG9jYXRpb24sDQo+ID4gPiAtCQkJCSAgICAgICAibm90IHZlY3Rvcml6ZWQ6Ig0KPiA+ ID4gLQkJCQkgICAgICAgIiBjb250cm9sIGZsb3cgaW4gbG9vcC5cbiIpOw0KPiA+ID4gLQ0KPiA+ ID4gICAgICAgIGlmIChlbXB0eV9ibG9ja19wIChsb29wLT5oZWFkZXIpKQ0KPiA+ID4gIAlyZXR1 cm4gb3B0X3Jlc3VsdDo6ZmFpbHVyZV9hdCAodmVjdF9sb2NhdGlvbiwNCj4gPiA+ICAJCQkJICAg ICAgICJub3QgdmVjdG9yaXplZDogZW1wdHkgbG9vcC5cbiIpOw0KPiA+ID4gQEAgLTE1NTksMTEg KzE1ODEsMTMgQEAgdmVjdF9hbmFseXplX2xvb3BfZm9ybSAoY2xhc3MgbG9vcCAqbG9vcCwNCj4g PiB2ZWN0X2xvb3BfZm9ybV9pbmZvICppbmZvKQ0KPiA+ID4gICAgICAgICAgZHVtcF9wcmludGZf bG9jIChNU0dfTk9URSwgdmVjdF9sb2NhdGlvbiwNCj4gPiA+ICAJCQkgIkNvbnNpZGVyaW5nIG91 dGVyLWxvb3AgdmVjdG9yaXphdGlvbi5cbiIpOw0KPiA+ID4gICAgICAgIGluZm8tPmlubmVyX2xv b3BfY29uZCA9IGlubmVyLmxvb3BfY29uZDsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICBpZiAoIXNp bmdsZV9leGl0IChsb29wKSkNCj4gPiA+ICsJcmV0dXJuIG9wdF9yZXN1bHQ6OmZhaWx1cmVfYXQg KHZlY3RfbG9jYXRpb24sDQo+ID4gPiArCQkJCSAgICAgICAibm90IHZlY3Rvcml6ZWQ6IG11bHRp cGxlIGV4aXRzLlxuIik7DQo+ID4gPiArDQo+ID4gPiAgICAgIH0NCj4gPiA+DQo+ID4gPiAtICBp ZiAoIXNpbmdsZV9leGl0IChsb29wKSkNCj4gPiA+IC0gICAgcmV0dXJuIG9wdF9yZXN1bHQ6OmZh aWx1cmVfYXQgKHZlY3RfbG9jYXRpb24sDQo+ID4gPiAtCQkJCSAgICJub3QgdmVjdG9yaXplZDog bXVsdGlwbGUgZXhpdHMuXG4iKTsNCj4gPiA+ICAgIGlmIChFREdFX0NPVU5UIChsb29wLT5oZWFk ZXItPnByZWRzKSAhPSAyKQ0KPiA+ID4gICAgICByZXR1cm4gb3B0X3Jlc3VsdDo6ZmFpbHVyZV9h dCAodmVjdF9sb2NhdGlvbiwNCj4gPiA+ICAJCQkJICAgIm5vdCB2ZWN0b3JpemVkOiINCj4gPiA+ IEBAIC0xNTc5LDIxICsxNjAzLDQ1IEBAIHZlY3RfYW5hbHl6ZV9sb29wX2Zvcm0gKGNsYXNzIGxv b3AgKmxvb3AsDQo+ID4gdmVjdF9sb29wX2Zvcm1faW5mbyAqaW5mbykNCj4gPiA+ICAJCQkJICAg Im5vdCB2ZWN0b3JpemVkOiBsYXRjaCBibG9jayBub3QgZW1wdHkuXG4iKTsNCj4gPiA+DQo+ID4g PiAgICAvKiBNYWtlIHN1cmUgdGhlIGV4aXQgaXMgbm90IGFibm9ybWFsLiAgKi8NCj4gPiA+IC0g IGVkZ2UgZSA9IHNpbmdsZV9leGl0IChsb29wKTsNCj4gPiA+IC0gIGlmIChlLT5mbGFncyAmIEVE R0VfQUJOT1JNQUwpDQo+ID4gPiArICBhdXRvX3ZlYzxlZGdlPiBleGl0cyA9IGdldF9sb29wX2V4 aXRfZWRnZXMgKGxvb3ApOw0KPiA+ID4gKyAgZWRnZSBuZXhpdCA9IG5vcm1hbF9leGl0IChsb29w KTsNCj4gPiA+ICsgIGZvciAoZWRnZSBlIDogZXhpdHMpDQo+ID4gPiArICAgIHsNCj4gPiA+ICsg ICAgICBpZiAoZS0+ZmxhZ3MgJiBFREdFX0FCTk9STUFMKQ0KPiA+ID4gKwlyZXR1cm4gb3B0X3Jl c3VsdDo6ZmFpbHVyZV9hdCAodmVjdF9sb2NhdGlvbiwNCj4gPiA+ICsJCQkJICAgICAgICJub3Qg dmVjdG9yaXplZDoiDQo+ID4gPiArCQkJCSAgICAgICAiIGFibm9ybWFsIGxvb3AgZXhpdCBlZGdl LlxuIik7DQo+ID4gPiArICAgICAgLyogRWFybHkgYnJlYWsgQkIgbXVzdCBiZSBhZnRlciB0aGUg bWFpbiBleGl0IEJCLiAgSW4gdGhlb3J5IHdlDQo+IHNob3VsZA0KPiA+ID4gKwkgYmUgYWJsZSB0 byB2ZWN0b3JpemUgdGhlIGludmVyc2Ugb3JkZXIsIGJ1dCB0aGUgY3VycmVudCBmbG93IGluIHRo ZQ0KPiA+ID4gKwkgdGhlIHZlY3Rvcml6ZXIgYWx3YXlzIGFzc3VtZXMgeW91IHVwZGF0ZSBzdWNj ZXNzIFBISSBub2Rlcywgbm90DQo+ID4gPiArCSBwcmVkcy4gICovDQo+ID4gPiArICAgICAgaWYg KGUgIT0gbmV4aXQgJiYgIWRvbWluYXRlZF9ieV9wIChDRElfRE9NSU5BVE9SUywgbmV4aXQtPnNy YywNCj4gZS0NCj4gPiA+c3JjKSkNCj4gPiA+ICsJcmV0dXJuIG9wdF9yZXN1bHQ6OmZhaWx1cmVf YXQgKHZlY3RfbG9jYXRpb24sDQo+ID4gPiArCQkJCSAgICAgICAibm90IHZlY3Rvcml6ZWQ6Ig0K PiA+ID4gKwkJCQkgICAgICAgIiBhYm5vcm1hbCBsb29wIGV4aXQgZWRnZSBvcmRlci5cbiIpOw0K PiA+ID4gKyAgICB9DQo+ID4gPiArDQo+ID4gPiArICBpZiAoZXhpdHMubGVuZ3RoICgpID4gMikN Cj4gPiA+ICAgICAgcmV0dXJuIG9wdF9yZXN1bHQ6OmZhaWx1cmVfYXQgKHZlY3RfbG9jYXRpb24s DQo+ID4gPiAgCQkJCSAgICJub3QgdmVjdG9yaXplZDoiDQo+ID4gPiAtCQkJCSAgICIgYWJub3Jt YWwgbG9vcCBleGl0IGVkZ2UuXG4iKTsNCj4gPiA+IC0NCj4gPiA+IC0gIGluZm8tPmxvb3BfY29u ZA0KPiA+ID4gKwkJCQkgICAiIHRvbyBtYW55IGV4aXRzLiBPbmx5IDEgYWRkaXRpb25hbCBleGl0 Ig0KPiA+ID4gKwkJCQkgICAiIHN1cHBvcnRlZC5cbiIpOw0KPiA+ID4gKyAgaWYgKGxvb3AtPm51 bV9ub2RlcyAhPSAyICsgZXhpdHMubGVuZ3RoICgpIC0gMSkNCj4gPiA+ICsgICAgcmV0dXJuIG9w dF9yZXN1bHQ6OmZhaWx1cmVfYXQgKHZlY3RfbG9jYXRpb24sDQo+ID4gPiArCQkJCSAgICJub3Qg dmVjdG9yaXplZDoiDQo+ID4gPiArCQkJCSAgICIgdW5zdXBwb3J0ZWQgY29udHJvbCBmbG93IGlu IGxvb3AuXG4iKTsNCj4gPiA+ICsgIGluZm8tPmNvbmRzDQo+ID4gPiAgICAgID0gdmVjdF9nZXRf bG9vcF9uaXRlcnMgKGxvb3AsICZpbmZvLT5hc3N1bXB0aW9ucywNCj4gPiA+ICAJCQkgICAgJmlu Zm8tPm51bWJlcl9vZl9pdGVyYXRpb25zLA0KPiA+ID4gIAkJCSAgICAmaW5mby0+bnVtYmVyX29m X2l0ZXJhdGlvbnNtMSk7DQo+ID4gPiAtICBpZiAoIWluZm8tPmxvb3BfY29uZCkNCj4gPiA+ICsN Cj4gPiA+ICsgIGlmIChpbmZvLT5jb25kcy5sZW5ndGggKCkgPT0gMCkNCj4gPiA+ICAgICAgcmV0 dXJuIG9wdF9yZXN1bHQ6OmZhaWx1cmVfYXQNCj4gPiA+ICAgICAgICAodmVjdF9sb2NhdGlvbiwN Cj4gPiA+ICAgICAgICAgIm5vdCB2ZWN0b3JpemVkOiBjb21wbGljYXRlZCBleGl0IGNvbmRpdGlv bi5cbiIpOw0KPiA+ID4NCj4gPiA+ICsgIGluZm8tPmxvb3BfY29uZCA9IGluZm8tPmNvbmRzWzBd Ow0KPiA+ID4gKw0KPiA+ID4gICAgaWYgKGludGVnZXJfemVyb3AgKGluZm8tPmFzc3VtcHRpb25z KQ0KPiA+ID4gICAgICAgIHx8ICFpbmZvLT5udW1iZXJfb2ZfaXRlcmF0aW9ucw0KPiA+ID4gICAg ICAgIHx8IGNocmVjX2NvbnRhaW5zX3VuZGV0ZXJtaW5lZCAoaW5mby0+bnVtYmVyX29mX2l0ZXJh dGlvbnMpKQ0KPiA+ID4gQEAgLTE2MzgsOCArMTY4NiwxNyBAQCB2ZWN0X2NyZWF0ZV9sb29wX3Zp bmZvIChjbGFzcyBsb29wICpsb29wLA0KPiA+IHZlY19pbmZvX3NoYXJlZCAqc2hhcmVkLA0KPiA+ ID4gICAgaWYgKCFpbnRlZ2VyX29uZXAgKGluZm8tPmFzc3VtcHRpb25zKSAmJiAhbWFpbl9sb29w X2luZm8pDQo+ID4gPiAgICAgIExPT1BfVklORk9fTklURVJTX0FTU1VNUFRJT05TIChsb29wX3Zp bmZvKSA9IGluZm8tDQo+ID5hc3N1bXB0aW9uczsNCj4gPiA+DQo+ID4gPiAtICBzdG10X3ZlY19p bmZvIGxvb3BfY29uZF9pbmZvID0gbG9vcF92aW5mby0+bG9va3VwX3N0bXQgKGluZm8tDQo+ID4g Pmxvb3BfY29uZCk7DQo+ID4gPiAtICBTVE1UX1ZJTkZPX1RZUEUgKGxvb3BfY29uZF9pbmZvKSA9 IGxvb3BfZXhpdF9jdHJsX3ZlY19pbmZvX3R5cGU7DQo+ID4gPiArICB1bnNpZ25lZCBpbnQgaTsN Cj4gPiA+ICsgIGdjb25kICpjb25kOw0KPiA+ID4gKyAgRk9SX0VBQ0hfVkVDX0VMVCAoaW5mby0+ Y29uZHMsIGksIGNvbmQpDQo+ID4gPiArICAgIHsNCj4gPiA+ICsgICAgICBzdG10X3ZlY19pbmZv IGxvb3BfY29uZF9pbmZvID0gbG9vcF92aW5mby0+bG9va3VwX3N0bXQgKGNvbmQpOw0KPiA+ID4g KyAgICAgIFNUTVRfVklORk9fVFlQRSAobG9vcF9jb25kX2luZm8pID0NCj4gbG9vcF9leGl0X2N0 cmxfdmVjX2luZm9fdHlwZTsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgLyogQ2hl Y2sgdG8gc2VlIGlmIHdlJ3JlIHZlY3Rvcml6aW5nIG11bHRpcGxlIGV4aXRzLiAgKi8NCj4gPiA+ ICsgIExPT1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKSA9IGluZm8tPmNvbmRzLmxl bmd0aCAoKSA+IDE7DQo+ID4gPiArDQo+ID4gPiAgICBpZiAoaW5mby0+aW5uZXJfbG9vcF9jb25k KQ0KPiA+ID4gICAgICB7DQo+ID4gPiAgICAgICAgc3RtdF92ZWNfaW5mbyBpbm5lcl9sb29wX2Nv bmRfaW5mbw0KPiA+ID4gQEAgLTIyNzAsMTAgKzIzMjcsMTMgQEANCj4gdmVjdF9kZXRlcm1pbmVf cGFydGlhbF92ZWN0b3JzX2FuZF9wZWVsaW5nDQo+ID4gKGxvb3BfdmVjX2luZm8gbG9vcF92aW5m bywNCj4gPiA+ICAgIGJvb2wgbmVlZF9wZWVsaW5nX29yX3BhcnRpYWxfdmVjdG9yc19wDQo+ID4g PiAgICAgID0gdmVjdF9uZWVkX3BlZWxpbmdfb3JfcGFydGlhbF92ZWN0b3JzX3AgKGxvb3Bfdmlu Zm8pOw0KPiA+ID4NCj4gPiA+IC0gIC8qIERlY2lkZSB3aGV0aGVyIHRvIHZlY3Rvcml6ZSB0aGUg bG9vcCB3aXRoIHBhcnRpYWwgdmVjdG9ycy4gICovDQo+ID4gPiArICAvKiBEZWNpZGUgd2hldGhl ciB0byB2ZWN0b3JpemUgdGhlIGxvb3Agd2l0aCBwYXJ0aWFsIHZlY3RvcnMuICBDdXJyZW50bHkN Cj4gPiA+ICsgICAgIGVhcmx5IGJyZWFrIHZlY3Rvcml6YXRpb24gZG9lcyBub3Qgc3VwcG9ydCBw YXJ0aWFsIHZlY3RvcnMgYXMgd2UgaGF2ZQ0KPiA+ID4gKyAgICAgdG8gcGVlbCBhIHNjYWxhciBs b29wIHRoYXQgd2UgY2FuJ3QgdmVjdG9yaXplLiAgKi8NCj4gPiA+ICAgIExPT1BfVklORk9fVVNJ TkdfUEFSVElBTF9WRUNUT1JTX1AgKGxvb3BfdmluZm8pID0gZmFsc2U7DQo+ID4gPiAgICBMT09Q X1ZJTkZPX0VQSUxfVVNJTkdfUEFSVElBTF9WRUNUT1JTX1AgKGxvb3BfdmluZm8pID0gZmFsc2U7 DQo+ID4gPiAgICBpZiAoTE9PUF9WSU5GT19DQU5fVVNFX1BBUlRJQUxfVkVDVE9SU19QIChsb29w X3ZpbmZvKQ0KPiA+ID4gKyAgICAgICYmICFMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUyAobG9vcF92 aW5mbykNCj4gPiA+ICAgICAgICAmJiBuZWVkX3BlZWxpbmdfb3JfcGFydGlhbF92ZWN0b3JzX3Ap DQo+ID4gPiAgICAgIHsNCj4gPiA+ICAgICAgICAvKiBGb3IgcGFydGlhbC12ZWN0b3ItdXNhZ2U9 MSwgdHJ5IHRvIHB1c2ggdGhlIGhhbmRsaW5nIG9mIHBhcnRpYWwNCj4gPiA+IEBAIC0yNzQ2LDEz ICsyODA2LDE0IEBAIHN0YXJ0X292ZXI6DQo+ID4gPg0KPiA+ID4gICAgLyogSWYgYW4gZXBpbG9n dWUgbG9vcCBpcyByZXF1aXJlZCBtYWtlIHN1cmUgd2UgY2FuIGNyZWF0ZSBvbmUuICAqLw0KPiA+ ID4gICAgaWYgKExPT1BfVklORk9fUEVFTElOR19GT1JfR0FQUyAobG9vcF92aW5mbykNCj4gPiA+ IC0gICAgICB8fCBMT09QX1ZJTkZPX1BFRUxJTkdfRk9SX05JVEVSIChsb29wX3ZpbmZvKSkNCj4g PiA+ICsgICAgICB8fCBMT09QX1ZJTkZPX1BFRUxJTkdfRk9SX05JVEVSIChsb29wX3ZpbmZvKQ0K PiA+ID4gKyAgICAgIHx8IExPT1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKSkNCj4g PiA+ICAgICAgew0KPiA+ID4gICAgICAgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkNCj4gPiA+ICAg ICAgICAgIGR1bXBfcHJpbnRmX2xvYyAoTVNHX05PVEUsIHZlY3RfbG9jYXRpb24sICJlcGlsb2cg bG9vcA0KPiA+IHJlcXVpcmVkXG4iKTsNCj4gPiA+ICAgICAgICBpZiAoIXZlY3RfY2FuX2FkdmFu Y2VfaXZzX3AgKGxvb3BfdmluZm8pDQo+ID4gPiAtCSAgfHwgIXNscGVlbF9jYW5fZHVwbGljYXRl X2xvb3BfcCAoTE9PUF9WSU5GT19MT09QDQo+ID4gKGxvb3BfdmluZm8pLA0KPiA+ID4gLQkJCQkJ ICAgc2luZ2xlX2V4aXQgKExPT1BfVklORk9fTE9PUA0KPiA+ID4gKwkgIHx8ICFzbHBlZWxfY2Fu X2R1cGxpY2F0ZV9sb29wX3AgKGxvb3BfdmluZm8sDQo+ID4gPiArCQkJCQkgICBub3JtYWxfZXhp dCAoTE9PUF9WSU5GT19MT09QDQo+ID4gPiAgCQkJCQkJCSAobG9vcF92aW5mbykpKSkNCj4gPiA+ ICAgICAgICAgIHsNCj4gPiA+ICAJICBvayA9IG9wdF9yZXN1bHQ6OmZhaWx1cmVfYXQgKHZlY3Rf bG9jYXRpb24sDQo+ID4gPiBAQCAtMzIzOSw2ICszMzAwLDggQEAgdmVjdF9hbmFseXplX2xvb3Ag KGNsYXNzIGxvb3AgKmxvb3AsDQo+ID4gdmVjX2luZm9fc2hhcmVkICpzaGFyZWQpDQo+ID4gPiAg CQkgICAgICIqKioqKiBDaG9vc2luZyB2ZWN0b3IgbW9kZSAlc1xuIiwNCj4gPiA+ICAJCSAgICAg R0VUX01PREVfTkFNRSAoZmlyc3RfbG9vcF92aW5mby0+dmVjdG9yX21vZGUpKTsNCj4gPiA+DQo+ ID4gPiArICBsb29wX2Zvcm1faW5mby5jb25kcy5yZWxlYXNlICgpOw0KPiA+ID4gKw0KPiA+ID4g ICAgLyogT25seSB2ZWN0b3JpemUgZXBpbG9ndWVzIGlmIFBBUkFNX1ZFQ1RfRVBJTE9HVUVTX05P TUFTSyBpcw0KPiA+ID4gICAgICAgZW5hYmxlZCwgU0lNRFVJRCBpcyBub3Qgc2V0LCBpdCBpcyB0 aGUgaW5uZXJtb3N0IGxvb3AgYW5kIHdlIGhhdmUNCj4gPiA+ICAgICAgIGVpdGhlciBhbHJlYWR5 IGZvdW5kIHRoZSBsb29wJ3MgU0lNRExFTiBvciB0aGVyZSB3YXMgbm8gU0lNRExFTiB0bw0KPiA+ ID4gQEAgLTMzNTAsNiArMzQxMyw4IEBAIHZlY3RfYW5hbHl6ZV9sb29wIChjbGFzcyBsb29wICps b29wLA0KPiA+IHZlY19pbmZvX3NoYXJlZCAqc2hhcmVkKQ0KPiA+ID4gIAkJCSAgIChmaXJzdF9s b29wX3ZpbmZvLT5lcGlsb2d1ZV92aW5mb3NbMF0tDQo+ID4gPnZlY3Rvcl9tb2RlKSk7DQo+ID4g PiAgICAgIH0NCj4gPiA+DQo+ID4gPiArICBsb29wX2Zvcm1faW5mby5jb25kcy5yZWxlYXNlICgp Ow0KPiA+ID4gKw0KPiA+ID4gICAgcmV0dXJuIGZpcnN0X2xvb3BfdmluZm87DQo+ID4gPiAgfQ0K PiA+ID4NCj4gPiA+IEBAIC03OTA3LDYgKzc5NzIsMjM3IEBAIHZlY3RfdHJhbnNmb3JtX3JlZHVj dGlvbiAobG9vcF92ZWNfaW5mbw0KPiA+IGxvb3BfdmluZm8sDQo+ID4gPiAgICByZXR1cm4gdHJ1 ZTsNCj4gPiA+ICB9DQo+ID4gPg0KPiA+ID4gKy8qICBXaGVuIHZlY3Rvcml6aW5nIGVhcmx5IGJy ZWFrIHN0YXRlbWVudHMgaW5zdHJ1Y3Rpb25zIHRoYXQgaGFwcGVuDQo+ID4gYmVmb3JlDQo+ID4g PiArICAgIHRoZSBlYXJseSBicmVhayBpbiB0aGUgY3VycmVudCBCQiBuZWVkIHRvIGJlIG1vdmVk IHRvIGFmdGVyIHRoZSBlYXJseQ0KPiA+ID4gKyAgICBicmVhay4gIFRoaXMgZnVuY3Rpb24gZGVh bHMgd2l0aCB0aGF0IGFuZCBhc3N1bWVzIHRoYXQgYW55IHZhbGlkYXR5DQo+ID4gPiArICAgIGNo ZWNrcyBoYXMgYWxyZWFkeSBiZWVuIHBlcmZvcm1lZC4NCj4gPiA+ICsNCj4gPiA+ICsgICAgV2hp bGUgbW92aW5nIHRoZSBpbnN0cnVjdGlvbnMgaWYgaXQgZW5jb3VudGVycyBhIFZVU0Ugb3IgVkRF RiBpdCB0aGVuDQo+ID4gPiArICAgIGNvcnJlY3RzIHRoZSBWVVNFUyBhcyBpdCBtb3ZlcyB0aGUg c3RhdGVtZW50cyBhbG9uZy4gIENIQUlORUQNCj4gPiBjb250YWlucw0KPiA+ID4gKyAgICB0aGUg bGlzdCBvZiBTU0FfTkFNRVMgdGhhdCBiZWxvbmcgdG8gdGhlIGRlcGVuZGVuY3kgY2hhaW4gb2Yg dGhlDQo+IGVhcmx5DQo+ID4gPiArICAgIGJyZWFrIGNvbmRpdGlvbmFsLiAgR0RFU1QgaXMgdGhl IGxvY2F0aW9uIGluIHdoaWNoIHRvIGluc2VydCB0aGUgbmV3DQo+ID4gPiArICAgIHN0YXRlbWVu dHMuICBHU1RNVCBpcyB0aGUgaXRlcmF0b3IgdG8gd2FsayB1cCB0byBmaW5kIHN0YXRlbWVudHMg dG8NCj4gPiA+ICsgICAgY29uc2lkZXIgbW92aW5nLiAgUkVBQ0hJTkdfVlVTRSBjb250YWlucyB0 aGUgZG9taW5hdGluZyBWVVNFDQo+ID4gZm91bmQgc28gZmFyDQo+ID4gPiArICAgIGFuZCBDVVJS RU5UX1ZERUYgY29udGFpbnMgdGhlIGxhc3QgVkRFRiB3ZSd2ZSBzZWVuLiAgVGhlc2UgYXJlDQo+ ID4gdXBkYXRlZCBpbg0KPiA+ID4gKyAgICBwcmUtb3JkZXIgYW5kIHVwZGF0ZWQgaW4gcG9zdC1v cmRlciBhZnRlciBtb3ZpbmcgdGhlIGluc3RydWN0aW9uLiAgKi8NCj4gPiA+ICsNCj4gPiA+ICtz dGF0aWMgdm9pZA0KPiA+ID4gK21vdmVfZWFybHlfZXhpdF9zdG10cyAoaGFzaF9zZXQ8dHJlZT4g KmNoYWluZWQsDQo+IGdpbXBsZV9zdG10X2l0ZXJhdG9yDQo+ID4gKmdkZXN0LA0KPiA+ID4gKwkJ ICAgICAgIGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc3RtdCwgdHJlZSAqcmVhY2hpbmdfdnVzZSwN Cj4gPiA+ICsJCSAgICAgICB0cmVlICpjdXJyZW50X3ZkZWYpDQo+ID4gPiArew0KPiA+ID4gKyAg aWYgKGdzaV9lbmRfcCAoKmdzdG10KSkNCj4gPiA+ICsgICAgcmV0dXJuOw0KPiA+ID4gKw0KPiA+ ID4gKyAgZ2ltcGxlICpzdG10ID0gZ3NpX3N0bXQgKCpnc3RtdCk7DQo+ID4gPiArICBpZiAoZ2lt cGxlX2hhc19vcHMgKHN0bXQpKQ0KPiA+ID4gKyAgICB7DQo+ID4gPiArICAgICAgdHJlZSBkZXN0 ID0gTlVMTF9UUkVFOw0KPiA+ID4gKyAgICAgIC8qIFRyeSB0byBmaW5kIHRoZSBTU0FfTkFNRSBi ZWluZyBkZWZpbmVkLiAgRm9yIFN0YXRlbWVudHMgd2l0aCBhbg0KPiA+IExIUw0KPiA+ID4gKwkg dXNlIHRoZSBMSFMsIGlmIG5vdCwgYXNzdW1lIHRoYXQgdGhlIGZpcnN0IGFyZ3VtZW50IG9mIGEg Y2FsbCBpcyB0aGUNCj4gPiA+ICsJIHZhbHVlIGJlaW5nIGRlZmluZWQuICBlLmcuIE1BU0tFRF9M T0FEIGV0Yy4gICovDQo+ID4gPiArICAgICAgaWYgKGdpbXBsZV9oYXNfbGhzIChzdG10KSkNCj4g PiA+ICsJew0KPiA+ID4gKwkgIGlmIChpc19naW1wbGVfYXNzaWduIChzdG10KSkNCj4gPiA+ICsJ ICAgIGRlc3QgPSBnaW1wbGVfYXNzaWduX2xocyAoc3RtdCk7DQo+ID4gPiArCSAgZWxzZSBpZiAo Y29uc3QgZ2NhbGwgKmNhbGwgPSBkeW5fY2FzdCA8Y29uc3QgZ2NhbGwgKj4gKHN0bXQpKQ0KPiA+ ID4gKwkgICAgZGVzdCA9IGdpbXBsZV9jYWxsX2xocyAoY2FsbCk7DQo+ID4gPiArCX0NCj4gPiA+ ICsgICAgICBlbHNlIGlmIChjb25zdCBnY2FsbCAqY2FsbCA9IGR5bl9jYXN0IDxjb25zdCBnY2Fs bCAqPiAoc3RtdCkpDQo+ID4gPiArCWRlc3QgPSBnaW1wbGVfYXJnIChjYWxsLCAwKTsNCj4gPiA+ ICsNCj4gPiA+ICsgICAgICAvKiBEb24ndCBtb3ZlIHRoZSBzY2FsYXIgaW5zdHJ1Y3Rpb25zLiAg Ki8NCj4gPiA+ICsgICAgICBib29sIG1vdmUNCj4gPiA+ICsJPSBkZXN0ICYmIChWRUNUT1JfVFlQ RV9QIChUUkVFX1RZUEUgKGRlc3QpKQ0KPiA+ID4gKwkJICAgfHwgUE9JTlRFUl9UWVBFX1AgKFRS RUVfVFlQRSAoZGVzdCkpKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAvKiBJZiB3ZSBmb3VuZCB0 aGUgZGVmaW5pbmcgc3RhdGVtZW50IG9mIGEgc29tZXRoaW5nIHRoYXQncyBwYXJ0IG9mDQo+IHRo ZQ0KPiA+ID4gKwkgY2hhaW4gdGhlbiBleHBhbmQgdGhlIGNoYWluIHdpdGggdGhlIG5ldyBTU0Ff VkFScyBiZWluZyB1c2VkLiAgKi8NCj4gPiA+ICsgICAgICBpZiAoY2hhaW5lZC0+Y29udGFpbnMg KGRlc3QpKQ0KPiA+ID4gKwl7DQo+ID4gPiArCSAgZm9yICh1bnNpZ25lZCB4ID0gMDsgeCA8IGdp bXBsZV9udW1fYXJncyAoc3RtdCk7IHgrKykNCj4gPiA+ICsJICAgIGlmIChUUkVFX0NPREUgKGdp bXBsZV9hcmcgKHN0bXQsIHgpKSA9PSBTU0FfTkFNRSkNCj4gPiA+ICsJICAgICAgY2hhaW5lZC0+ YWRkIChnaW1wbGVfYXJnIChzdG10LCB4KSk7DQo+ID4gPiArDQo+ID4gPiArCSAgaWYgKGR1bXBf ZW5hYmxlZF9wICgpKQ0KPiA+ID4gKwkgICAgZHVtcF9wcmludGZfbG9jIChNU0dfTk9URSwgdmVj dF9sb2NhdGlvbiwNCj4gPiA+ICsJCQkgICAgICJmb3VuZCBjaGFpbiAlRyIsIHN0bXQpOw0KPiA+ ID4gKwkgIHVwZGF0ZV9zdG10IChzdG10KTsNCj4gPiA+ICsJICBtb3ZlID0gZmFsc2U7DQo+ID4g PiArCX0NCj4gPiA+ICsNCj4gPiA+ICsgICAgICBpZiAobW92ZSkNCj4gPiA+ICsJew0KPiA+ID4g KwkgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkNCj4gPiA+ICsJICAgIGR1bXBfcHJpbnRmX2xvYyAo TVNHX05PVEUsIHZlY3RfbG9jYXRpb24sDQo+ID4gPiArCQkgICAgICAgICAgICAgIm1vdmluZyBz dG10ICVHIiwgc3RtdCk7DQo+ID4gPiArCSAgZ3NpX21vdmVfYmVmb3JlIChnc3RtdCwgZ2Rlc3Qp Ow0KPiA+ID4gKwkgIGdzaV9wcmV2IChnZGVzdCk7DQo+ID4gPiArCSAgdHJlZSB2ZGVmID0gZ2lt cGxlX3ZkZWYgKHN0bXQpOw0KPiA+ID4gKw0KPiA+ID4gKwkgIC8qIElmIHdlJ3ZlIG1vdmVkIGEg VkRFRiwgZXh0cmFjdCB0aGUgZGVmaW5pbmcgTUVNIGFuZCB1cGRhdGUNCj4gPiA+ICsJICAgICB1 c2FnZXMgb2YgaXQuICBUT0RPOiBJIHRoaW5rIHRoaXMgbWF5IG5lZWQgc29tZSBjb25zdHJhaW50 cz8gKi8NCj4gPiA+ICsJICBpZiAodmRlZikNCj4gPiA+ICsJICAgIHsNCj4gPiA+ICsJICAgICAg KmN1cnJlbnRfdmRlZiA9IHZkZWY7DQo+ID4gPiArCSAgICAgICpyZWFjaGluZ192dXNlID0gZ2lt cGxlX3Z1c2UgKHN0bXQpOw0KPiA+ID4gKwkgICAgICBpbW1fdXNlX2l0ZXJhdG9yIGltbV9pdGVy Ow0KPiA+ID4gKwkgICAgICBnaW1wbGUgKnVzZV9zdG10Ow0KPiA+ID4gKwkgICAgICBGT1JfRUFD SF9JTU1fVVNFX1NUTVQgKHVzZV9zdG10LCBpbW1faXRlciwgdmRlZikNCj4gPiA+ICsJCXsNCj4g PiA+ICsJCSAgIGlmICghaXNfYSA8Z3BoaSAqPiAodXNlX3N0bXQpKQ0KPiA+ID4gKwkJICAgICBj b250aW51ZTsNCj4gPiA+ICsJCSAgIGdwaGkgKnBoaV9zdG10ID0gYXNfYSA8Z3BoaSAqPiAodXNl X3N0bXQpOw0KPiA+ID4gKw0KPiA+ID4gKwkJICAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0KPiA+ ID4gKwkJICAgICBkdW1wX3ByaW50Zl9sb2MgKE1TR19OT1RFLCB2ZWN0X2xvY2F0aW9uLA0KPiA+ ID4gKwkJCQkidXBkYXRpbmcgdnVzZSAlRyIsIHVzZV9zdG10KTsNCj4gPiA+ICsJCSAgIGZvciAo dW5zaWduZWQgaSA9IDA7IGkgPCBnaW1wbGVfcGhpX251bV9hcmdzIChwaGlfc3RtdCk7DQo+ID4g aSsrKQ0KPiA+ID4gKwkJICAgIGlmIChnaW1wbGVfcGhpX2FyZ19kZWYgKHBoaV9zdG10LCBpKSA9 PSB2ZGVmKQ0KPiA+ID4gKwkJICAgICAgew0KPiA+ID4gKwkJCVNFVF9VU0UgKFBISV9BUkdfREVG X1BUUiAocGhpX3N0bXQsIGkpLA0KPiA+IGdpbXBsZV92dXNlIChzdG10KSk7DQo+ID4gPiArCQkJ YnJlYWs7DQo+ID4gPiArCQkgICAgICB9DQo+ID4gPiArCQl9DQo+ID4gPiArCSAgICB9DQo+ID4g PiArCSAgdXBkYXRlX3N0bXQgKHN0bXQpOw0KPiA+ID4gKwl9DQo+ID4gPiArICAgIH0NCj4gPiA+ ICsNCj4gPiA+ICsgIGdzaV9wcmV2IChnc3RtdCk7DQo+ID4gPiArICBtb3ZlX2Vhcmx5X2V4aXRf c3RtdHMgKGNoYWluZWQsIGdkZXN0LCBnc3RtdCwgcmVhY2hpbmdfdnVzZSwNCj4gPiBjdXJyZW50 X3ZkZWYpOw0KPiA+ID4gKw0KPiA+ID4gKyAgaWYgKGdpbXBsZV92dXNlIChzdG10KQ0KPiA+ID4g KyAgICAgICYmIHJlYWNoaW5nX3Z1c2UgJiYgKnJlYWNoaW5nX3Z1c2UNCj4gPiA+ICsgICAgICAm JiBnaW1wbGVfdnVzZSAoc3RtdCkgPT0gKmN1cnJlbnRfdmRlZikNCj4gPiA+ICsgICAgew0KPiA+ ID4gKyAgICAgIHVubGlua19zdG10X3ZkZWYgKHN0bXQpOw0KPiA+ID4gKyAgICAgIGdpbXBsZV9z ZXRfdnVzZSAoc3RtdCwgKnJlYWNoaW5nX3Z1c2UpOw0KPiA+ID4gKyAgICAgIHVwZGF0ZV9zdG10 IChzdG10KTsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsvKiBUcmFu c2Zvcm0gdGhlIGRlZmluaXRpb24gc3RtdCBTVE1UX0lORk8gb2YgYW4gZWFybHkgZXhpdA0KPiA+ ID4gKyAgIHZhbHVlLiAgKi8NCj4gPiA+ICsNCj4gPiA+ICtib29sDQo+ID4gPiArdmVjdF90cmFu c2Zvcm1fZWFybHlfYnJlYWsgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywNCj4gPiA+ICsJCQkg ICAgc3RtdF92ZWNfaW5mbyBzdG10X2luZm8sIGdpbXBsZV9zdG10X2l0ZXJhdG9yDQo+ID4gKmdz aSwNCj4gPiA+ICsJCQkgICAgZ2ltcGxlICoqdmVjX3N0bXQsIHNscF90cmVlIHNscF9ub2RlKQ0K PiA+ID4gK3sNCj4gPiA+ICsgIHRyZWUgdmVjdHlwZV9vdXQgPSBTVE1UX1ZJTkZPX1ZFQ1RZUEUg KHN0bXRfaW5mbyk7DQo+ID4gPiArICBpbnQgaTsNCj4gPiA+ICsgIGludCBuY29waWVzOw0KPiA+ ID4gKyAgaW50IHZlY19udW07DQo+ID4gPiArDQo+ID4gPiArICBpZiAoIVNUTVRfVklORk9fUkVM RVZBTlRfUCAoc3RtdF9pbmZvKSkNCj4gPiA+ICsgICAgcmV0dXJuIGZhbHNlOw0KPiA+ID4gKw0K PiA+ID4gKyAgZ2ltcGxlX21hdGNoX29wIG9wOw0KPiA+ID4gKyAgaWYgKCFnaW1wbGVfZXh0cmFj dF9vcCAoc3RtdF9pbmZvLT5zdG10LCAmb3ApKQ0KPiA+ID4gKyAgICBnY2NfdW5yZWFjaGFibGUg KCk7DQo+ID4gPiArICBnY2NfYXNzZXJ0IChvcC5jb2RlLmlzX3RyZWVfY29kZSAoKSk7DQo+ID4g PiArICBhdXRvIGNvZGUgPSB0cmVlX2NvZGUgKG9wLmNvZGUpOw0KPiA+ID4gKw0KPiA+ID4gKyAg dHJlZSB2ZWN0eXBlX2luID0gU1RNVF9WSU5GT19WRUNUWVBFIChzdG10X2luZm8pOw0KPiA+ID4g KyAgZ2NjX2Fzc2VydCAodmVjdHlwZV9pbik7DQo+ID4gPiArDQo+ID4gPiArDQo+ID4gPiArICBp ZiAoc2xwX25vZGUpDQo+ID4gPiArICAgIHsNCj4gPiA+ICsgICAgICBuY29waWVzID0gMTsNCj4g PiA+ICsgICAgICB2ZWNfbnVtID0gU0xQX1RSRUVfTlVNQkVSX09GX1ZFQ19TVE1UUyAoc2xwX25v ZGUpOw0KPiA+ID4gKyAgICB9DQo+ID4gPiArICBlbHNlDQo+ID4gPiArICAgIHsNCj4gPiA+ICsg ICAgICBuY29waWVzID0gdmVjdF9nZXRfbnVtX2NvcGllcyAobG9vcF92aW5mbywgdmVjdHlwZV9p bik7DQo+ID4gPiArICAgICAgdmVjX251bSA9IDE7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsNCj4g PiA+ICsgIHZlY19sb29wX21hc2tzICptYXNrcyA9ICZMT09QX1ZJTkZPX01BU0tTIChsb29wX3Zp bmZvKTsNCj4gPiA+ICsgIGJvb2wgbWFza2VkX2xvb3BfcCA9IExPT1BfVklORk9fRlVMTFlfTUFT S0VEX1AgKGxvb3BfdmluZm8pOw0KPiA+ID4gKw0KPiA+ID4gKyAgLyogVHJhbnNmb3JtLiAgKi8N Cj4gPiA+ICsgIHRyZWUgbmV3X3RlbXAgPSBOVUxMX1RSRUU7DQo+ID4gPiArICBhdXRvX3ZlYzx0 cmVlPiB2ZWNfb3BybmRzMDsNCj4gPiA+ICsgIGF1dG9fdmVjPHRyZWU+IHZlY19vcHJuZHMxOw0K PiA+ID4gKyAgdHJlZSBkZWYwOw0KPiA+ID4gKw0KPiA+ID4gKyAgaWYgKGR1bXBfZW5hYmxlZF9w ICgpKQ0KPiA+ID4gKyAgICBkdW1wX3ByaW50Zl9sb2MgKE1TR19OT1RFLCB2ZWN0X2xvY2F0aW9u LCAidHJhbnNmb3JtIGVhcmx5LQ0KPiA+IGV4aXQuXG4iKTsNCj4gPiA+ICsNCj4gPiA+ICsgIC8q IEZPUk5PVzogTXVsdGlwbGUgdHlwZXMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIGNvbmRpdGlvbi4g ICovDQo+ID4gPiArICBpZiAoY29kZSA9PSBDT05EX0VYUFIpDQo+ID4gPiArICAgIGdjY19hc3Nl cnQgKG5jb3BpZXMgPT0gMSk7DQo+ID4gPiArDQo+ID4gPiArDQo+ID4gPiArICBnaW1wbGUgKnN0 bXQgPSBTVE1UX1ZJTkZPX1NUTVQgKHN0bXRfaW5mbyk7DQo+ID4gPiArICBiYXNpY19ibG9jayBj b25kX2JiID0gZ2ltcGxlX2JiIChzdG10KTsNCj4gPiA+ICsgIGdpbXBsZV9zdG10X2l0ZXJhdG9y ICBjb25kX2dzaSA9IGdzaV9sYXN0X2JiIChjb25kX2JiKTsNCj4gPiA+ICsNCj4gPiA+ICsgIHZl Y3RfZ2V0X3ZlY19kZWZzIChsb29wX3ZpbmZvLCBzdG10X2luZm8sIHNscF9ub2RlLCBuY29waWVz LA0KPiA+ID4gKwkJICAgICBvcC5vcHNbMF0sICZ2ZWNfb3BybmRzMCwgb3Aub3BzWzFdLCAmdmVj X29wcm5kczEsDQo+ID4gPiArCQkgICAgIE5VTEwsIE5VTEwpOw0KPiA+ID4gKw0KPiA+ID4gKyAg Z2ltcGxlICpuZXdfc3RtdCA9IE5VTEw7DQo+ID4gPiArICB0cmVlIGNzdF8wID0gYnVpbGRfemVy b19jc3QgKHRydXRoX3R5cGVfZm9yICh2ZWN0eXBlX291dCkpOw0KPiA+ID4gKyAgdHJlZSBjc3Rf bTEgPSBidWlsZF9taW51c19vbmVfY3N0ICh0cnV0aF90eXBlX2ZvciAodmVjdHlwZV9vdXQpKTsN Cj4gPiA+ICsNCj4gPiA+ICsgIEZPUl9FQUNIX1ZFQ19FTFQgKHZlY19vcHJuZHMwLCBpLCBkZWYw KQ0KPiA+ID4gKyAgICB7DQo+ID4gPiArICAgICAgdHJlZSB2b3BbM10gPSB7IGRlZjAsIHZlY19v cHJuZHMxW2ldLCBOVUxMX1RSRUUgfTsNCj4gPiA+ICsJew0KPiA+ID4gKwkgIHRyZWUgY29uZCA9 IG1ha2VfdGVtcF9zc2FfbmFtZSAodHJ1dGhfdHlwZV9mb3IgKHZlY3R5cGVfb3V0KSwNCj4gPiBO VUxMLCAibWFzayIpOw0KPiA+ID4gKwkgIGdpbXBsZSAqdmVjX2NtcCA9IGdpbXBsZV9idWlsZF9h c3NpZ24gKGNvbmQsIGNvZGUsIHZvcFswXSwNCj4gPiB2b3BbMV0pOw0KPiA+ID4gKwkgIHZlY3Rf ZmluaXNoX3N0bXRfZ2VuZXJhdGlvbiAobG9vcF92aW5mbywgc3RtdF9pbmZvLCB2ZWNfY21wLA0K PiA+ICZjb25kX2dzaSk7DQo+ID4gPiArICAgICAgICAgIGlmIChtYXNrZWRfbG9vcF9wKQ0KPiA+ ID4gKwkgICAgew0KPiA+ID4gKwkgICAgICB0cmVlIG1hc2sgPSB2ZWN0X2dldF9sb29wX21hc2sg KGdzaSwgbWFza3MsIHZlY19udW0gKiBuY29waWVzLA0KPiA+ID4gKwkJCQkJICAgICAgdmVjdHlw ZV9pbiwgaSk7DQo+ID4gPiArCSAgICAgIGNvbmQgPSBwcmVwYXJlX3ZlY19tYXNrIChsb29wX3Zp bmZvLCBUUkVFX1RZUEUgKG1hc2spLCBtYXNrLA0KPiA+ID4gKwkJCQkgICAgICAgY29uZCwgJmNv bmRfZ3NpKTsNCj4gPiA+ICsJICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsJICBuZXdfdGVtcCA9IG1h a2VfdGVtcF9zc2FfbmFtZSAodHJ1dGhfdHlwZV9mb3INCj4gPiAodmVjdHlwZV9vdXQpLCBOVUxM LCAidmV4aXQiKTsNCj4gPiA+ICsgICAgICAgICAgZ2ltcGxlICp2ZWNfY29uZCA9IGdpbXBsZV9i dWlsZF9hc3NpZ24gKG5ld190ZW1wLA0KPiA+IFZFQ19DT05EX0VYUFIsDQo+ID4gPiArCQkJCQkJ ICBjb25kLCBjc3RfbTEsIGNzdF8wKTsNCj4gPiA+ICsJICB2ZWN0X2ZpbmlzaF9zdG10X2dlbmVy YXRpb24gKGxvb3BfdmluZm8sIHN0bXRfaW5mbywgdmVjX2NvbmQsDQo+ID4gJmNvbmRfZ3NpKTsN Cj4gPiA+ICsJICBuZXdfc3RtdCA9IHZlY19jb25kOw0KPiA+ID4gKwl9DQo+ID4gPiArDQo+ID4g PiArICAgICAgaWYgKHNscF9ub2RlKQ0KPiA+ID4gKwlTTFBfVFJFRV9WRUNfU1RNVFMgKHNscF9u b2RlKS5xdWlja19wdXNoIChuZXdfc3RtdCk7DQo+ID4gPiArICAgICAgZWxzZQ0KPiA+ID4gKwlT VE1UX1ZJTkZPX1ZFQ19TVE1UUyAoc3RtdF9pbmZvKS5zYWZlX3B1c2ggKG5ld19zdG10KTsNCj4g PiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgZ2NjX2Fzc2VydCAobmV3X3N0bXQpOw0KPiA+ ID4gKyAgdHJlZSBsaHMgPSBnaW1wbGVfYXNzaWduX2xocyAobmV3X3N0bXQpOw0KPiA+ID4gKw0K PiA+ID4gKyAgdHJlZSB0ID0gZm9sZF9idWlsZDIgKE5FX0VYUFIsIGJvb2xlYW5fdHlwZV9ub2Rl LCBsaHMsDQo+ID4gPiArCQkJYnVpbGRfemVyb19jc3QgKHRydXRoX3R5cGVfZm9yICh2ZWN0eXBl X291dCkpKTsNCj4gPiA+ICsgIHQgPSBjYW5vbmljYWxpemVfY29uZF9leHByX2NvbmQgKHQpOw0K PiA+ID4gKyAgZ2ltcGxlX2NvbmRfc2V0X2NvbmRpdGlvbl9mcm9tX3RyZWUgKChnY29uZCopc3Rt dCwgdCk7DQo+ID4gPiArICB1cGRhdGVfc3RtdCAoc3RtdCk7DQo+ID4gPiArDQo+ID4gPiArICBi YXNpY19ibG9jayBkZXN0X2JiID0gRURHRV9TVUNDIChjb25kX2JiLCAxKS0+ZGVzdDsNCj4gPiA+ ICsgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGRlc3RfZ3NpID0gZ3NpX3N0YXJ0X2JiIChkZXN0X2Ji KTsNCj4gPiA+ICsNCj4gPiA+ICsgIGhhc2hfc2V0PHRyZWU+IGNoYWluZWQ7DQo+ID4gPiArICBn aW1wbGVfc3RtdF9pdGVyYXRvciBnc2kyID0gZ3NpX2Zvcl9zdG10IChuZXdfc3RtdCk7DQo+ID4g PiArICBjaGFpbmVkLmFkZCAobGhzKTsNCj4gPiA+ICsgIHRyZWUgdmRlZjsNCj4gPiA+ICsgIHRy ZWUgdnVzZSA9IGdpbXBsZV92dXNlIChuZXdfc3RtdCk7DQo+ID4gPiArICBtb3ZlX2Vhcmx5X2V4 aXRfc3RtdHMgKCZjaGFpbmVkLCAmZGVzdF9nc2ksICZnc2kyLCAmdnVzZSwgJnZkZWYpOw0KPiA+ ID4gKw0KPiA+ID4gKyAgaWYgKCFzbHBfbm9kZSkNCj4gPiA+ICsgICAgKnZlY19zdG10ID0gU1RN VF9WSU5GT19WRUNfU1RNVFMgKHN0bXRfaW5mbylbMF07DQo+ID4gPiArDQo+ID4gPiArICByZXR1 cm4gdHJ1ZTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArDQo+ID4gPiArDQo+ID4gPiAgLyog VHJhbnNmb3JtIHBoYXNlIG9mIGEgY3ljbGUgUEhJLiAgKi8NCj4gPiA+DQo+ID4gPiAgYm9vbA0K PiA+ID4gQEAgLTgxODUsNiArODQ4MSwxODYgQEAgdmVjdF90cmFuc2Zvcm1fY3ljbGVfcGhpIChs b29wX3ZlY19pbmZvDQo+ID4gbG9vcF92aW5mbywNCj4gPiA+ICAgIHJldHVybiB0cnVlOw0KPiA+ ID4gIH0NCj4gPiA+DQo+ID4gPiArLyogVGhpcyBmdW5jdGlvbiB0cmllcyB0byB2YWxpZGF0ZSB3 aGV0aGVyIGFuIGVhcmx5IGJyZWFrIHZlY3Rvcml6YXRpb24NCj4gPiA+ICsgICBpcyBwb3NzaWJs ZSBmb3IgdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UuIFJldHVybnMgVHJ1ZSBpDQo+ ID4gPiArICAgcG9zc2libGUsIG90aGVyd2lzZSBGYWxzZS4NCj4gPiA+ICsNCj4gPiA+ICsgICBS ZXF1aXJlbWVudHM6DQo+ID4gPiArICAgICAtIEFueSBtZW1vcnkgYWNjZXNzIG11c3QgYmUgdG8g YSBmaXhlZCBzaXplIGJ1ZmZlci4NCj4gPiA+ICsgICAgIC0gVGhlcmUgbXVzdCBub3QgYmUgYW55 IGxvYWRzIGFuZCBzdG9yZXMgdG8gdGhlIHNhbWUgb2JqZWN0Lg0KPiA+ID4gKyAgICAgLSBNdWx0 aXBsZSBsb2FkcyBhcmUgYWxsb3dlZCBhcyBsb25nIGFzIHRoZXkgZG9uJ3QgYWxpYXMuDQo+ID4g PiArDQo+ID4gPiArDQo+ID4gPiArICAgQXJndW1lbnRzOg0KPiA+ID4gKyAgICAgLSBMT09QX1ZJ TkZPOiBsb29wIGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCBsb29wLg0KPiA+ID4gKyAgICAg LSBDSEFJTjogQ3VycmVudGx5IGRldGVjdGVkIHNlcXVlbmNlIG9mIGluc3RydWN0aW9ucyB0aGF0 IGJlbG9uZw0KPiA+ID4gKwkgICAgICB0byB0aGUgY3VycmVudCBlYXJseSBicmVhay4NCj4gPiA+ ICsgICAgIC0gTE9BRFM6IExpc3Qgb2YgYWxsIGxvYWRzIGZvdW5kIGR1cmluZyB0cmF2ZXJzYWwu DQo+ID4gPiArICAgICAtIEJBU0VTOiBMaXN0IG9mIGFsbCBsb2FkIGRhdGFyZWZlcmVuY2VzIGZv dW5kIGR1cmluZyB0cmF2ZXJzYWwuDQo+ID4gPiArICAgICAtIEdTVE1UOiBDdXJyZW50IHBvc2l0 aW9uIHRvIGluc3BlY3QgZm9yIHZhbGlkaXR5LiAgVGhlIHNlcXVlbmNlDQo+ID4gPiArCSAgICAg IHdpbGwgYmUgbW92ZWQgdXB3YXJkcyBmcm9tIHRoaXMgcG9pbnQuICAqLw0KPiA+ID4gKw0KPiA+ ID4gK3N0YXRpYyBib29sDQo+ID4gPiArdmFsaWRhdGVfZWFybHlfZXhpdF9zdG10cyAobG9vcF92 ZWNfaW5mbyBsb29wX3ZpbmZvLCBoYXNoX3NldDx0cmVlPg0KPiA+ICpjaGFpbiwNCj4gPiA+ICsJ CQkgICB2ZWM8dHJlZT4gKmxvYWRzLCB2ZWM8ZGF0YV9yZWZlcmVuY2UgKj4gKmJhc2VzLA0KPiA+ ID4gKwkJCSAgIGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc3RtdCkNCj4gPiA+ICt7DQo+ID4gPiAr ICBpZiAoZ3NpX2VuZF9wICgqZ3N0bXQpKQ0KPiA+ID4gKyAgICByZXR1cm4gdHJ1ZTsNCj4gPiA+ ICsNCj4gPiA+ICsgIGdpbXBsZSAqc3RtdCA9IGdzaV9zdG10ICgqZ3N0bXQpOw0KPiA+ID4gKyAg aWYgKGdpbXBsZV9oYXNfb3BzIChzdG10KSkNCj4gPiA+ICsgICAgew0KPiA+ID4gKyAgICAgIHRy ZWUgZGVzdCA9IE5VTExfVFJFRTsNCj4gPiA+ICsgICAgICAvKiBUcnkgdG8gZmluZCB0aGUgU1NB X05BTUUgYmVpbmcgZGVmaW5lZC4gIEZvciBTdGF0ZW1lbnRzIHdpdGggYW4NCj4gPiBMSFMNCj4g PiA+ICsJIHVzZSB0aGUgTEhTLCBpZiBub3QsIGFzc3VtZSB0aGF0IHRoZSBmaXJzdCBhcmd1bWVu dCBvZiBhIGNhbGwgaXMgdGhlDQo+ID4gPiArCSB2YWx1ZSBiZWluZyBkZWZpbmVkLiAgZS5nLiBN QVNLRURfTE9BRCBldGMuICAqLw0KPiA+ID4gKyAgICAgIGlmIChnaW1wbGVfaGFzX2xocyAoc3Rt dCkpDQo+ID4gPiArCXsNCj4gPiA+ICsJICBpZiAoaXNfZ2ltcGxlX2Fzc2lnbiAoc3RtdCkpDQo+ ID4gPiArCSAgICBkZXN0ID0gZ2ltcGxlX2Fzc2lnbl9saHMgKHN0bXQpOw0KPiA+ID4gKwkgIGVs c2UgaWYgKGNvbnN0IGdjYWxsICpjYWxsID0gZHluX2Nhc3QgPGNvbnN0IGdjYWxsICo+IChzdG10 KSkNCj4gPiA+ICsJICAgIGRlc3QgPSBnaW1wbGVfY2FsbF9saHMgKGNhbGwpOw0KPiA+ID4gKwl9 DQo+ID4gPiArICAgICAgZWxzZSBpZiAoY29uc3QgZ2NhbGwgKmNhbGwgPSBkeW5fY2FzdCA8Y29u c3QgZ2NhbGwgKj4gKHN0bXQpKQ0KPiA+ID4gKwlkZXN0ID0gZ2ltcGxlX2FyZyAoY2FsbCwgMCk7 DQo+ID4gPiArDQo+ID4gPiArICAgICAgLyogRG9uJ3QgbW92ZSB0aGUgc2NhbGFyIGluc3RydWN0 aW9ucy4gICovDQo+ID4gPiArICAgICAgYm9vbCBtb3ZlDQo+ID4gPiArCT0gZGVzdCAmJiAoVkVD VE9SX1RZUEVfUCAoVFJFRV9UWVBFIChkZXN0KSkNCj4gPiA+ICsJCSAgIHx8IFBPSU5URVJfVFlQ RV9QIChUUkVFX1RZUEUgKGRlc3QpKSk7DQo+ID4gPiArDQo+ID4gPiArICAgICAgLyogSWYgd2Ug Zm91bmQgdGhlIGRlZmluaW5nIHN0YXRlbWVudCBvZiBhIHNvbWV0aGluZyB0aGF0J3MgcGFydCBv Zg0KPiB0aGUNCj4gPiA+ICsJIGNoYWluIHRoZW4gZXhwYW5kIHRoZSBjaGFpbiB3aXRoIHRoZSBu ZXcgU1NBX1ZBUnMgYmVpbmcgdXNlZC4gICovDQo+ID4gPiArICAgICAgaWYgKGNoYWluLT5jb250 YWlucyAoZGVzdCkpDQo+ID4gPiArCXsNCj4gPiA+ICsJICBmb3IgKHVuc2lnbmVkIHggPSAwOyB4 IDwgZ2ltcGxlX251bV9hcmdzIChzdG10KTsgeCsrKQ0KPiA+ID4gKwkgICAgaWYgKFRSRUVfQ09E RSAoZ2ltcGxlX2FyZyAoc3RtdCwgeCkpID09IFNTQV9OQU1FKQ0KPiA+ID4gKwkgICAgICBjaGFp bi0+YWRkIChnaW1wbGVfYXJnIChzdG10LCB4KSk7DQo+ID4gPiArDQo+ID4gPiArCSAgaWYgKGR1 bXBfZW5hYmxlZF9wICgpKQ0KPiA+ID4gKwkgICAgICBkdW1wX3ByaW50Zl9sb2MgKE1TR19OT1RF LCB2ZWN0X2xvY2F0aW9uLA0KPiA+ID4gKwkJCQkiZm91bmQgY2hhaW4gJUciLCBzdG10KTsNCj4g PiA+ICsNCj4gPiA+ICsJICBtb3ZlID0gZmFsc2U7DQo+ID4gPiArCX0NCj4gPiA+ICsNCj4gPiA+ ICsgICAgICBzdG10X3ZlY19pbmZvIHN0bXRfdmluZm8gPSBsb29wX3ZpbmZvLT5sb29rdXBfc3Rt dCAoc3RtdCk7DQo+ID4gPiArICAgICAgaWYgKCFzdG10X3ZpbmZvKQ0KPiA+ID4gKwl7DQo+ID4g PiArCSAgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkNCj4gPiA+ICsJICAgICBkdW1wX3ByaW50Zl9s b2MgKE1TR19NSVNTRURfT1BUSU1JWkFUSU9OLCB2ZWN0X2xvY2F0aW9uLA0KPiA+ID4gKwkJCSAg ICAgICJlYXJseSBicmVha3Mgb25seSBzdXBwb3J0ZWQuIFVua25vd24iDQo+ID4gPiArCQkJICAg ICAgIiBzdGF0ZW1lbnQ6ICVHIiwgc3RtdCk7DQo+ID4gPiArCSAgIHJldHVybiBmYWxzZTsNCj4g PiA+ICsJfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAgIGF1dG8gZHJfcmVmID0gU1RNVF9WSU5GT19E QVRBX1JFRiAoc3RtdF92aW5mbyk7DQo+ID4gPiArICAgICAgaWYgKGRyX3JlZikNCj4gPiA+ICsJ ew0KPiA+ID4gKwkgICAvKiBXZSBjdXJyZW5seSBvbmx5IHN1cHBvcnQgc3RhdGljYWxseSBhbGxv Y2F0ZWQgb2JqZWN0cyBkdWUgdG8NCj4gPiA+ICsJICAgICAgbm90IGhhdmluZyBmaXJzdC1mYXVs dGluZyBsb2FkcyBzdXBwb3J0IG9yIHBlZWxpbmcgZm9yIGFsaWdubWVudA0KPiA+ID4gKwkgICAg ICBzdXBwb3J0LiAgQ29tcHV0ZSB0aGUgaXNpemUgb2YgdGhlIHJlZmVyZW5jZWQgb2JqZWN0IChp dCBjb3VsZCBiZQ0KPiA+ID4gKwkgICAgICBkeW5hbWljYWxseSBhbGxvY2F0ZWQpLiAgKi8NCj4g PiA+ICsJICAgdHJlZSBvYmogPSBEUl9CQVNFX0FERFJFU1MgKGRyX3JlZik7DQo+ID4gPiArCSAg IGlmICghb2JqIHx8IFRSRUVfQ09ERSAob2JqKSAhPSBBRERSX0VYUFIpDQo+ID4gPiArCSAgICAg ew0KPiA+ID4gKwkgICAgICAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0KPiA+ID4gKwkJIGR1bXBf cHJpbnRmX2xvYyAoTVNHX01JU1NFRF9PUFRJTUlaQVRJT04sDQo+ID4gdmVjdF9sb2NhdGlvbiwN Cj4gPiA+ICsJCQkJICAiZWFybHkgYnJlYWtzIG9ubHkgc3VwcG9ydGVkIG9uIHN0YXRpY2FsbHki DQo+ID4gPiArCQkJCSAgIiBhbGxvY2F0ZWQgb2JqZWN0cy5cbiIpOw0KPiA+ID4gKwkgICAgICAg cmV0dXJuIGZhbHNlOw0KPiA+ID4gKwkgICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsJICAgdHJlZSBy ZWZvcCA9IFRSRUVfT1BFUkFORCAob2JqLCAwKTsNCj4gPiA+ICsJICAgdHJlZSByZWZiYXNlID0g Z2V0X2Jhc2VfYWRkcmVzcyAocmVmb3ApOw0KPiA+ID4gKwkgICBpZiAoIXJlZmJhc2UgfHwgIURF Q0xfUCAocmVmYmFzZSkNCj4gPiA+ICsJICAgICAgIHx8IFRSRUVfQ09ERSAoREVDTF9TSVpFIChy ZWZiYXNlKSkgIT0gSU5URUdFUl9DU1QpDQo+ID4gPiArCSAgICAgew0KPiA+ID4gKwkgICAgICAg aWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0KPiA+ID4gKwkJIGR1bXBfcHJpbnRmX2xvYyAoTVNHX01J U1NFRF9PUFRJTUlaQVRJT04sDQo+ID4gdmVjdF9sb2NhdGlvbiwNCj4gPiA+ICsJCQkJICAiZWFy bHkgYnJlYWtzIG9ubHkgc3VwcG9ydGVkIG9uIHN0YXRpY2FsbHkiDQo+ID4gPiArCQkJCSAgIiBh bGxvY2F0ZWQgb2JqZWN0cy5cbiIpOw0KPiA+ID4gKwkgICAgICAgcmV0dXJuIGZhbHNlOw0KPiA+ ID4gKwkgICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsJICAgaWYgKCFtb3ZlICYmIERSX0lTX1JFQUQg KGRyX3JlZikpDQo+ID4gPiArCSAgICAgew0KPiA+ID4gKwkJbG9hZHMtPnNhZmVfcHVzaCAoZGVz dCk7DQo+ID4gPiArCQliYXNlcy0+c2FmZV9wdXNoIChkcl9yZWYpOw0KPiA+ID4gKwkgICAgIH0N Cj4gPiA+ICsJICAgZWxzZSBpZiAoRFJfSVNfV1JJVEUgKGRyX3JlZikpDQo+ID4gPiArCSAgICAg ew0KPiA+ID4gKwkJZm9yIChhdXRvIGRyIDogYmFzZXMpDQo+ID4gPiArCQkgIGlmIChzYW1lX2Rh dGFfcmVmc19iYXNlX29iamVjdHMgKGRyLCBkcl9yZWYpKQ0KPiA+ID4gKwkJICAgIHJldHVybiBm YWxzZTsNCj4gPiA+ICsJICAgICB9DQo+ID4gPiArCX0NCj4gPiA+ICsNCj4gPiA+ICsgICAgICBp ZiAobW92ZSkNCj4gPiA+ICsJew0KPiA+ID4gKwkgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkNCj4g PiA+ICsJICAgIGR1bXBfcHJpbnRmX2xvYyAoTVNHX05PVEUsIHZlY3RfbG9jYXRpb24sDQo+ID4g PiArCQkgICAgICAgICAgICAgImFuYWx5emluZyBzdG10ICVHIiwgc3RtdCk7DQo+ID4gPiArDQo+ ID4gPiArCSAgZm9yICh0cmVlIHJlZiA6IGxvYWRzKQ0KPiA+ID4gKwkgICAgaWYgKHN0bXRfbWF5 X2Nsb2JiZXJfcmVmX3AgKHN0bXQsIHJlZiwgdHJ1ZSkpDQo+ID4gPiArCSAgICAgIHsNCj4gPiA+ ICsJICAgICAgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpDQo+ID4gPiArCQkgIGR1bXBfcHJpbnRm X2xvYyAoTVNHX01JU1NFRF9PUFRJTUlaQVRJT04sDQo+ID4gdmVjdF9sb2NhdGlvbiwNCj4gPiA+ ICsJCQkJICAgImVhcmx5IGJyZWFrcyBub3Qgc3VwcG9ydGVkIGFzIG1lbW9yeQ0KPiA+IHVzZWQi DQo+ID4gPiArCQkJCSAgICIgbWF5IGFsaWFzLlxuIik7DQo+ID4gPiArCSAgICAgICAgcmV0dXJu IGZhbHNlOw0KPiA+ID4gKwkgICAgICB9DQo+ID4gPiArCX0NCj4gPiA+ICsgICAgfQ0KPiA+ID4g Kw0KPiA+ID4gKyAgZ3NpX3ByZXYgKGdzdG10KTsNCj4gPiA+ICsgIHJldHVybiB2YWxpZGF0ZV9l YXJseV9leGl0X3N0bXRzIChsb29wX3ZpbmZvLCBjaGFpbiwgbG9hZHMsIGJhc2VzLA0KPiA+IGdz dG10KTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSBj dXJyZW50IGVhcmx5IGJyZWFrIGdpdmVuIGluIFNUTVRfSU5GTyBpcyB2YWxpZCBmb3INCj4gPiA+ ICsgICB2ZWN0b3JpemF0aW9uLiAgKi8NCj4gPiA+ICsNCj4gPiA+ICtib29sDQo+ID4gPiArdmVj dG9yaXphYmxlX2Vhcmx5X2V4aXQgKHZlY19pbmZvICp2aW5mbywNCj4gPiA+ICsJCQlzdG10X3Zl Y19pbmZvIHN0bXRfaW5mbywgc2xwX3RyZWUgLyogc2xwX25vZGUgKi8sDQo+ID4gPiArCQkJc2xw X2luc3RhbmNlIC8qIHNscF9ub2RlX2luc3RhbmNlICovLA0KPiA+ID4gKwkJCXN0bXRfdmVjdG9y X2Zvcl9jb3N0ICogLyogY29zdF92ZWMgKi8pDQo+ID4gPiArew0KPiA+ID4gKyAgbG9vcF92ZWNf aW5mbyBsb29wX3ZpbmZvID0gZHluX2Nhc3QgPGxvb3BfdmVjX2luZm8+ICh2aW5mbyk7DQo+ID4g PiArDQo+ID4gPiArICBpZiAoIWxvb3BfdmluZm8NCj4gPiA+ICsgICAgICB8fCAhaXNfYSA8Z2Nv bmQgKj4gKFNUTVRfVklORk9fU1RNVCAoc3RtdF9pbmZvKSkpDQo+ID4gPiArICAgIHJldHVybiBm YWxzZTsNCj4gPiA+ICsNCj4gPiA+ICsgIGlmIChTVE1UX1ZJTkZPX0RFRl9UWVBFIChzdG10X2lu Zm8pICE9IHZlY3RfZWFybHlfZXhpdF9kZWYpDQo+ID4gPiArICAgIHJldHVybiBmYWxzZTsNCj4g PiA+ICsNCj4gPiA+ICsgIHRyZWUgdmVjdHlwZSA9IFNUTVRfVklORk9fVkVDVFlQRSAoc3RtdF9p bmZvKTsNCj4gPiA+ICsgIHRyZWUgdHJ1dGhfdHlwZSA9IHRydXRoX3R5cGVfZm9yICh2ZWN0eXBl KTsNCj4gPiA+ICsNCj4gPiA+ICsgIGF1dG8gb3B0YWIgPSBkaXJlY3Rfb3B0YWJfaGFuZGxlciAo Y2JyYW5jaF9vcHRhYiwgVFlQRV9NT0RFDQo+ID4gKHRydXRoX3R5cGUpKTsNCj4gPiA+ICsgIGlm IChvcHRhYiA9PSBDT0RFX0ZPUl9ub3RoaW5nKQ0KPiA+ID4gKyAgICB7DQo+ID4gPiArICAgICAg aWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0KPiA+ID4gKwkgIGR1bXBfcHJpbnRmX2xvYyAoTVNHX01J U1NFRF9PUFRJTUlaQVRJT04sIHZlY3RfbG9jYXRpb24sDQo+ID4gPiArCQkJCSAiY2FuJ3QgdmVj dG9yaXplIGVhcmx5IGV4aXQgYmVjYXVzZSB0aGUgIg0KPiA+ID4gKwkJCQkgInRhcmdldCBkb2Vz bid0IHN1cHBvcnQgZmxhZyBzZXR0aW5nIHZlY3RvciAiDQo+ID4gPiArCQkJCSAiY29tcGFyaXNv bnMuXG4iKTsNCj4gPiA+ICsgICAgICByZXR1cm4gZmFsc2U7DQo+ID4gPiArICAgIH0NCj4gPiA+ ICsNCj4gPiA+ICsgIGhhc2hfc2V0PHRyZWU+IGNoYWluOw0KPiA+ID4gKyAgYXV0b192ZWM8dHJl ZT4gbG9hZHM7DQo+ID4gPiArICBhdXRvX3ZlYzxkYXRhX3JlZmVyZW5jZSAqPiBiYXNlczsNCj4g PiA+ICsNCj4gPiA+ICsgIGdpbXBsZSAqc3RtdCA9IFNUTVRfVklORk9fU1RNVCAoc3RtdF9pbmZv KTsNCj4gPiA+ICsgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGdzaSA9IGdzaV9mb3Jfc3RtdCAoc3Rt dCk7DQo+ID4gPiArDQo+ID4gPiArICByZXR1cm4gdmFsaWRhdGVfZWFybHlfZXhpdF9zdG10cyAo bG9vcF92aW5mbywgJmNoYWluLCAmbG9hZHMsICZiYXNlcywNCj4gPiAmZ3NpKTsNCj4gPiA+ICt9 DQo+ID4gPiArDQo+ID4gPiAgLyogVmVjdG9yaXplcyBMQyBQSElzLiAgKi8NCj4gPiA+DQo+ID4g PiAgYm9vbA0KPiA+ID4gQEAgLTk5OTMsMTMgKzEwNDY5LDI0IEBAIHZlY3Rvcml6YWJsZV9saXZl X29wZXJhdGlvbiAodmVjX2luZm8NCj4gKnZpbmZvLA0KPiA+ID4gIAkgICBuZXdfdHJlZSA9IGxh bmVfZXh0cmFjdCA8dmVjX2xocycsIC4uLj47DQo+ID4gPiAgCSAgIGxocycgPSBuZXdfdHJlZTsg ICovDQo+ID4gPg0KPiA+ID4gKyAgICAgIC8qIFdoZW4gdmVjdG9yaXppbmcgYW4gZWFybHkgYnJl YWssIGFueSBsaXZlIHN0YXRlbWVudCB0aGF0IGlzIHVzZWQNCj4gPiA+ICsJIG91dHNpZGUgb2Yg dGhlIGxvb3AgYXJlIGRlYWQuICBUaGUgbG9vcCB3aWxsIG5ldmVyIGdldCB0byB0aGVtLg0KPiA+ ID4gKwkgV2UgY291bGQgY2hhbmdlIHRoZSBsaXZlbmVzcyB2YWx1ZSBkdXJpbmcgYW5hbHlzaXMg aW5zdGVhZCBidXQgc2luY2UNCj4gPiA+ICsJIHRoZSBiZWxvdyBjb2RlIGlzIGludmFsaWQgYW55 d2F5IGp1c3QgaWdub3JlIGl0IGR1cmluZyBjb2RlZ2VuLiAgKi8NCj4gPiA+ICsgICAgICBpZiAo TE9PUF9WSU5GT19FQVJMWV9CUkVBS1MgKGxvb3BfdmluZm8pKQ0KPiA+ID4gKwlyZXR1cm4gdHJ1 ZTsNCj4gPiA+ICsNCj4gPiA+ICAgICAgICBjbGFzcyBsb29wICpsb29wID0gTE9PUF9WSU5GT19M T09QIChsb29wX3ZpbmZvKTsNCj4gPiA+IC0gICAgICBiYXNpY19ibG9jayBleGl0X2JiID0gc2lu Z2xlX2V4aXQgKGxvb3ApLT5kZXN0Ow0KPiA+ID4gKyAgICAgIGJhc2ljX2Jsb2NrIGV4aXRfYmIg PSBub3JtYWxfZXhpdCAobG9vcCktPmRlc3Q7DQo+ID4gPiAgICAgICAgZ2NjX2Fzc2VydCAoc2lu Z2xlX3ByZWRfcCAoZXhpdF9iYikpOw0KPiA+ID4NCj4gPiA+ICAgICAgICB0cmVlIHZlY19saHNf cGhpID0gY29weV9zc2FfbmFtZSAodmVjX2xocyk7DQo+ID4gPiAgICAgICAgZ2ltcGxlICpwaGkg PSBjcmVhdGVfcGhpX25vZGUgKHZlY19saHNfcGhpLCBleGl0X2JiKTsNCj4gPiA+IC0gICAgICBT RVRfUEhJX0FSR19ERUYgKHBoaSwgc2luZ2xlX2V4aXQgKGxvb3ApLT5kZXN0X2lkeCwgdmVjX2xo cyk7DQo+ID4gPiArICAgICAgLyogRm9yIGVhcmx5IGV4aXRzIHdlIG5lZWQgdG8gY29tcHV0ZSB0 aGUgcmlnaHQgZXhpdC4gIFRoZSBjdXJyZW50DQo+ID4gPiArCSBhcHByb2FjaCBwdW50cyB0byBh IHNjYWxhciBsb29wIGluc3RlYWQuICBJZiB3ZSB3ZXJlIHRvIHZlY3Rvcml6ZQ0KPiA+ID4gKwkg dGhlIGV4aXQgY29uZGl0aW9uIGJlbG93IG5lZWRzIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSBk aWZmZXJlbmNlDQo+ID4gPiArCSBiZXR3ZWVuIGEgYGJyZWFrYCBlZGdlIGFuZCBhIGByZXR1cm5g IGVkZ2UuICAqLw0KPiA+ID4gKyAgICAgIFNFVF9QSElfQVJHX0RFRiAocGhpLCBub3JtYWxfZXhp dCAobG9vcCktPmRlc3RfaWR4LCB2ZWNfbGhzKTsNCj4gPiA+DQo+ID4gPiAgICAgICAgZ2ltcGxl X3NlcSBzdG10cyA9IE5VTEw7DQo+ID4gPiAgICAgICAgdHJlZSBuZXdfdHJlZTsNCj4gPiA+IEBA IC0xMDQzOCw3ICsxMDkyNSw4IEBAIHNjYWxlX3Byb2ZpbGVfZm9yX3ZlY3RfbG9vcCAoY2xhc3Mg bG9vcA0KPiAqbG9vcCwNCj4gPiB1bnNpZ25lZCB2ZikNCj4gPiA+ICAgICAgICBzY2FsZV9sb29w X2ZyZXF1ZW5jaWVzIChsb29wLCBwKTsNCj4gPiA+ICAgICAgfQ0KPiA+ID4NCj4gPiA+IC0gIGVk Z2UgZXhpdF9lID0gc2luZ2xlX2V4aXQgKGxvb3ApOw0KPiA+ID4gKyAgZWRnZSBleGl0X2UgPSBu b3JtYWxfZXhpdCAobG9vcCk7DQo+ID4gPiArDQo+ID4gPiAgICBleGl0X2UtPnByb2JhYmlsaXR5 ID0gcHJvZmlsZV9wcm9iYWJpbGl0eTo6YWx3YXlzICgpIC8gKG5ld19lc3Rfbml0ZXIgKw0KPiAx KTsNCj4gPiA+DQo+ID4gPiAgICBlZGdlIGV4aXRfbCA9IHNpbmdsZV9wcmVkX2VkZ2UgKGxvb3At PmxhdGNoKTsNCj4gPiA+IEBAIC0xMDc4Nyw3ICsxMTI3NSw3IEBAIHZlY3RfdHJhbnNmb3JtX2xv b3AgKGxvb3BfdmVjX2luZm8NCj4gPiBsb29wX3ZpbmZvLCBnaW1wbGUgKmxvb3BfdmVjdG9yaXpl ZF9jYWxsKQ0KPiA+ID4gICAgLyogTWFrZSBzdXJlIHRoZXJlIGV4aXN0cyBhIHNpbmdsZS1wcmVk ZWNlc3NvciBleGl0IGJiLiAgRG8gdGhpcyBiZWZvcmUNCj4gPiA+ICAgICAgIHZlcnNpb25pbmcu ICAgKi8NCj4gPiA+ICAgIGVkZ2UgZSA9IHNpbmdsZV9leGl0IChsb29wKTsNCj4gPiA+IC0gIGlm ICghIHNpbmdsZV9wcmVkX3AgKGUtPmRlc3QpKQ0KPiA+ID4gKyAgaWYgKGUgJiYgISBzaW5nbGVf cHJlZF9wIChlLT5kZXN0KSkNCj4gPiA+ICAgICAgew0KPiA+ID4gICAgICAgIHNwbGl0X2xvb3Bf ZXhpdF9lZGdlIChlLCB0cnVlKTsNCj4gPiA+ICAgICAgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkp DQo+ID4gPiBAQCAtMTA4MTMsNyArMTEzMDEsNyBAQCB2ZWN0X3RyYW5zZm9ybV9sb29wIChsb29w X3ZlY19pbmZvDQo+ID4gbG9vcF92aW5mbywgZ2ltcGxlICpsb29wX3ZlY3Rvcml6ZWRfY2FsbCkN Cj4gPiA+ICAgIGlmIChMT09QX1ZJTkZPX1NDQUxBUl9MT09QIChsb29wX3ZpbmZvKSkNCj4gPiA+ ICAgICAgew0KPiA+ID4gICAgICAgIGUgPSBzaW5nbGVfZXhpdCAoTE9PUF9WSU5GT19TQ0FMQVJf TE9PUCAobG9vcF92aW5mbykpOw0KPiA+ID4gLSAgICAgIGlmICghIHNpbmdsZV9wcmVkX3AgKGUt PmRlc3QpKQ0KPiA+ID4gKyAgICAgIGlmIChlICYmICEgc2luZ2xlX3ByZWRfcCAoZS0+ZGVzdCkp DQo+ID4gPiAgCXsNCj4gPiA+ICAJICBzcGxpdF9sb29wX2V4aXRfZWRnZSAoZSwgdHJ1ZSk7DQo+ ID4gPiAgCSAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0KPiA+ID4gQEAgLTExMTQ2LDcgKzExNjM0 LDggQEAgdmVjdF90cmFuc2Zvcm1fbG9vcCAobG9vcF92ZWNfaW5mbw0KPiA+IGxvb3BfdmluZm8s IGdpbXBsZSAqbG9vcF92ZWN0b3JpemVkX2NhbGwpDQo+ID4gPg0KPiA+ID4gICAgLyogTG9vcHMg dmVjdG9yaXplZCB3aXRoIGEgdmFyaWFibGUgZmFjdG9yIHdvbid0IGJlbmVmaXQgZnJvbQ0KPiA+ ID4gICAgICAgdW5yb2xsaW5nL3BlZWxpbmcuICAqLw0KPiA+ID4gLSAgaWYgKCF2Zi5pc19jb25z dGFudCAoKSkNCj4gPiA+ICsgIGlmICghdmYuaXNfY29uc3RhbnQgKCkNCj4gPiA+ICsgICAgICAm JiAhTE9PUF9WSU5GT19FQVJMWV9CUkVBS1MgKGxvb3BfdmluZm8pKQ0KPiA+ID4gICAgICB7DQo+ ID4gPiAgICAgICAgbG9vcC0+dW5yb2xsID0gMTsNCj4gPiA+ICAgICAgICBpZiAoZHVtcF9lbmFi bGVkX3AgKCkpDQo+ID4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdC1zdG10cy5jYyBiL2dj Yy90cmVlLXZlY3Qtc3RtdHMuY2MNCj4gPiA+IGluZGV4DQo+ID4NCj4gNGUwZDc1ZTBkNzU4NmFk NTdhMzc4NTBkOGE3MGY2MTgyZWNiMTNkMC4uNGY5NDQ2YTVjNjk5Mjg4YmUwOTNjNTU2ZQ0KPiA+ IGM1MjdlODdjZjc4ODMxNyAxMDA2NDQNCj4gPiA+IC0tLSBhL2djYy90cmVlLXZlY3Qtc3RtdHMu Y2MNCj4gPiA+ICsrKyBiL2djYy90cmVlLXZlY3Qtc3RtdHMuY2MNCj4gPiA+IEBAIC0zNDIsOSAr MzQyLDI4IEBAIHZlY3Rfc3RtdF9yZWxldmFudF9wIChzdG10X3ZlY19pbmZvDQo+IHN0bXRfaW5m bywNCj4gPiBsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+ID4gPiAgICAqbGl2ZV9wID0gZmFs c2U7DQo+ID4gPg0KPiA+ID4gICAgLyogY29uZCBzdG10IG90aGVyIHRoYW4gbG9vcCBleGl0IGNv bmQuICAqLw0KPiA+ID4gLSAgaWYgKGlzX2N0cmxfc3RtdCAoc3RtdF9pbmZvLT5zdG10KQ0KPiA+ ID4gLSAgICAgICYmIFNUTVRfVklORk9fVFlQRSAoc3RtdF9pbmZvKSAhPSBsb29wX2V4aXRfY3Ry bF92ZWNfaW5mb190eXBlKQ0KPiA+ID4gLSAgICAqcmVsZXZhbnQgPSB2ZWN0X3VzZWRfaW5fc2Nv cGU7DQo+ID4gPiArICBpZiAoaXNfY3RybF9zdG10IChzdG10X2luZm8tPnN0bXQpKQ0KPiA+ID4g KyAgICB7DQo+ID4gPiArICAgICAgLyogSWRlYWxseSBFREdFX0xPT1BfRVhJVCB3b3VsZCBoYXZl IGJlZW4gc2V0IG9uIHRoZSBleGl0IGVkZ2UsDQo+IGJ1dA0KPiA+ID4gKwkgaXQgbG9va3MgbGlr ZSBsb29wX21hbmlwIGRvZXNuJ3QgZG8gdGhhdC4uICBTbyB3ZSBoYXZlIHRvIGRvIGl0DQo+ID4g PiArCSB0aGUgaGFyZCB3YXkuICAqLw0KPiA+ID4gKyAgICAgIGJhc2ljX2Jsb2NrIGJiID0gZ2lt cGxlX2JiIChzdG10X2luZm8tPnN0bXQpOw0KPiA+ID4gKyAgICAgIGJhc2ljX2Jsb2NrICpiYnMg PSBMT09QX1ZJTkZPX0JCUyAobG9vcF92aW5mbyk7DQo+ID4gPiArICAgICAgZWRnZSBleGl0ID0g QlJBTkNIX0VER0UgKGJiKTsNCj4gPiA+ICsgICAgICB1bnNpZ25lZCBuYmJzID0gbG9vcC0+bnVt X25vZGVzOw0KPiA+ID4gKyAgICAgIGJvb2wgZXhpdF9iYiA9IHRydWU7DQo+ID4gPiArICAgICAg Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5iYnM7IGkrKykNCj4gPiA+ICsJew0KPiA+ID4gKwkg IGlmIChleGl0LT5kZXN0ID09IGJic1tpXSkNCj4gPiA+ICsJICAgIHsNCj4gPiA+ICsJICAgICAg ZXhpdF9iYiA9IGZhbHNlOw0KPiA+ID4gKwkgICAgICBicmVhazsNCj4gPiA+ICsJICAgIH0NCj4g PiA+ICsJfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAgIGlmIChleGl0X2JiKQ0KPiA+ID4gKwkqcmVs ZXZhbnQgPSB2ZWN0X3VzZWRfaW5fc2NvcGU7DQo+ID4gPiArICAgIH0NCj4gPiA+DQo+ID4gPiAg ICAvKiBjaGFuZ2luZyBtZW1vcnkuICAqLw0KPiA+ID4gICAgaWYgKGdpbXBsZV9jb2RlIChzdG10 X2luZm8tPnN0bXQpICE9IEdJTVBMRV9QSEkpDQo+ID4gPiBAQCAtMzU3LDYgKzM3NiwxMSBAQCB2 ZWN0X3N0bXRfcmVsZXZhbnRfcCAoc3RtdF92ZWNfaW5mbw0KPiBzdG10X2luZm8sDQo+ID4gbG9v cF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0KPiA+ID4gIAkqcmVsZXZhbnQgPSB2ZWN0X3VzZWRfaW5f c2NvcGU7DQo+ID4gPiAgICAgICAgfQ0KPiA+ID4NCj4gPiA+ICsgIGF1dG9fdmVjPGVkZ2U+IGV4 aXRzID0gZ2V0X2xvb3BfZXhpdF9lZGdlcyAobG9vcCk7DQo+ID4gPiArICBhdXRvX2JpdG1hcCBl eGl0X2JiczsNCj4gPiA+ICsgIGZvciAoZWRnZSBleGl0IDogZXhpdHMpDQo+ID4gPiArICAgIGJp dG1hcF9zZXRfYml0IChleGl0X2JicywgZXhpdC0+ZGVzdC0+aW5kZXgpOw0KPiA+ID4gKw0KPiA+ ID4gICAgLyogdXNlcyBvdXRzaWRlIHRoZSBsb29wLiAgKi8NCj4gPiA+ICAgIEZPUl9FQUNIX1BI SV9PUl9TVE1UX0RFRiAoZGVmX3AsIHN0bXRfaW5mby0+c3RtdCwgb3BfaXRlciwNCj4gPiBTU0Ff T1BfREVGKQ0KPiA+ID4gICAgICB7DQo+ID4gPiBAQCAtMzc1LDcgKzM5OSw3IEBAIHZlY3Rfc3Rt dF9yZWxldmFudF9wIChzdG10X3ZlY19pbmZvIHN0bXRfaW5mbywNCj4gPiBsb29wX3ZlY19pbmZv IGxvb3BfdmluZm8sDQo+ID4gPiAgCSAgICAgIC8qIFdlIGV4cGVjdCBhbGwgc3VjaCB1c2VzIHRv IGJlIGluIHRoZSBsb29wIGV4aXQgcGhpcw0KPiA+ID4gIAkJIChiZWNhdXNlIG9mIGxvb3AgY2xv c2VkIGZvcm0pICAgKi8NCj4gPiA+ICAJICAgICAgZ2NjX2Fzc2VydCAoZ2ltcGxlX2NvZGUgKFVT RV9TVE1UICh1c2VfcCkpID09IEdJTVBMRV9QSEkpOw0KPiA+ID4gLQkgICAgICBnY2NfYXNzZXJ0 IChiYiA9PSBzaW5nbGVfZXhpdCAobG9vcCktPmRlc3QpOw0KPiA+ID4gKwkgICAgICBnY2NfYXNz ZXJ0IChiaXRtYXBfYml0X3AgKGV4aXRfYmJzLCBiYi0+aW5kZXgpKTsNCj4gPiA+DQo+ID4gPiAg ICAgICAgICAgICAgICAqbGl2ZV9wID0gdHJ1ZTsNCj4gPiA+ICAJICAgIH0NCj4gPiA+IEBAIC0x ODQ1LDcgKzE4NjksNyBAQCBjaGVja19sb2FkX3N0b3JlX2Zvcl9wYXJ0aWFsX3ZlY3RvcnMNCj4g PiAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCB0cmVlIHZlY3R5cGUsDQo+ID4gPiAgICAgTUFT S19UWVBFIGlzIHRoZSB0eXBlIG9mIGJvdGggbWFza3MuICBJZiBuZXcgc3RhdGVtZW50cyBhcmUg bmVlZGVkLA0KPiA+ID4gICAgIGluc2VydCB0aGVtIGJlZm9yZSBHU0kuICAqLw0KPiA+ID4NCj4g PiA+IC1zdGF0aWMgdHJlZQ0KPiA+ID4gK3RyZWUNCj4gPiA+ICBwcmVwYXJlX3ZlY19tYXNrIChs b29wX3ZlY19pbmZvIGxvb3BfdmluZm8sIHRyZWUgbWFza190eXBlLCB0cmVlDQo+ID4gbG9vcF9t YXNrLA0KPiA+ID4gIAkJICB0cmVlIHZlY19tYXNrLCBnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3Np KQ0KPiA+ID4gIHsNCj4gPiA+IEBAIC0xMTE1OCwxMSArMTExODIsMTQgQEAgdmVjdF9hbmFseXpl X3N0bXQgKHZlY19pbmZvICp2aW5mbywNCj4gPiA+ICAJCQkgICAgIG5vZGVfaW5zdGFuY2UsIGNv c3RfdmVjKTsNCj4gPiA+ICAgICAgICBpZiAoIXJlcykNCj4gPiA+ICAJcmV0dXJuIHJlczsNCj4g PiA+IC0gICB9DQo+ID4gPiArICAgIH0NCj4gPiA+ICsgIGVsc2UgaWYgKGlzX2N0cmxfc3RtdCAo c3RtdF9pbmZvLT5zdG10KSkNCj4gPiA+ICsgICAgU1RNVF9WSU5GT19ERUZfVFlQRSAoc3RtdF9p bmZvKSA9IHZlY3RfZWFybHlfZXhpdF9kZWY7DQo+ID4gPg0KPiA+ID4gICAgc3dpdGNoIChTVE1U X1ZJTkZPX0RFRl9UWVBFIChzdG10X2luZm8pKQ0KPiA+ID4gICAgICB7DQo+ID4gPiAgICAgICAg Y2FzZSB2ZWN0X2ludGVybmFsX2RlZjoNCj4gPiA+ICsgICAgICBjYXNlIHZlY3RfZWFybHlfZXhp dF9kZWY6DQo+ID4gPiAgICAgICAgICBicmVhazsNCj4gPiA+DQo+ID4gPiAgICAgICAgY2FzZSB2 ZWN0X3JlZHVjdGlvbl9kZWY6DQo+ID4gPiBAQCAtMTExOTUsNiArMTEyMjIsNyBAQCB2ZWN0X2Fu YWx5emVfc3RtdCAodmVjX2luZm8gKnZpbmZvLA0KPiA+ID4gICAgICB7DQo+ID4gPiAgICAgICAg Z2NhbGwgKmNhbGwgPSBkeW5fY2FzdCA8Z2NhbGwgKj4gKHN0bXRfaW5mby0+c3RtdCk7DQo+ID4g PiAgICAgICAgZ2NjX2Fzc2VydCAoU1RNVF9WSU5GT19WRUNUWVBFIChzdG10X2luZm8pDQo+ID4g PiArCQkgIHx8IGdpbXBsZV9jb2RlIChzdG10X2luZm8tPnN0bXQpID09IEdJTVBMRV9DT05EDQo+ ID4gPiAgCQkgIHx8IChjYWxsICYmIGdpbXBsZV9jYWxsX2xocyAoY2FsbCkgPT0gTlVMTF9UUkVF KSk7DQo+ID4gPiAgICAgICAgKm5lZWRfdG9fdmVjdG9yaXplID0gdHJ1ZTsNCj4gPiA+ICAgICAg fQ0KPiA+ID4gQEAgLTExMjM3LDcgKzExMjY1LDkgQEAgdmVjdF9hbmFseXplX3N0bXQgKHZlY19p bmZvICp2aW5mbywNCj4gPiA+ICAJICB8fCB2ZWN0b3JpemFibGVfbGNfcGhpIChhc19hIDxsb29w X3ZlY19pbmZvPiAodmluZm8pLA0KPiA+ID4gIAkJCQkgIHN0bXRfaW5mbywgTlVMTCwgbm9kZSkN Cj4gPiA+ICAJICB8fCB2ZWN0b3JpemFibGVfcmVjdXJyIChhc19hIDxsb29wX3ZlY19pbmZvPiAo dmluZm8pLA0KPiA+ID4gLQkJCQkgICBzdG10X2luZm8sIE5VTEwsIG5vZGUsIGNvc3RfdmVjKSk7 DQo+ID4gPiArCQkJCSAgIHN0bXRfaW5mbywgTlVMTCwgbm9kZSwgY29zdF92ZWMpDQo+ID4gPiAr CSAgfHwgdmVjdG9yaXphYmxlX2Vhcmx5X2V4aXQgKHZpbmZvLCBzdG10X2luZm8sDQo+ID4gPiAr CQkJCSAgICAgIG5vZGUsIG5vZGVfaW5zdGFuY2UsIGNvc3RfdmVjKSk7DQo+ID4gPiAgICBlbHNl DQo+ID4gPiAgICAgIHsNCj4gPiA+ICAgICAgICBpZiAoYmJfdmluZm8pDQo+ID4gPiBAQCAtMTEy NjAsNyArMTEyOTAsMTAgQEAgdmVjdF9hbmFseXplX3N0bXQgKHZlY19pbmZvICp2aW5mbywNCj4g PiA+ICAJCQkJCSBOVUxMLCBOVUxMLCBub2RlLCBjb3N0X3ZlYykNCj4gPiA+ICAJICAgICAgfHwg dmVjdG9yaXphYmxlX2NvbXBhcmlzb24gKHZpbmZvLCBzdG10X2luZm8sIE5VTEwsIE5VTEwsIG5v ZGUsDQo+ID4gPiAgCQkJCQkgIGNvc3RfdmVjKQ0KPiA+ID4gLQkgICAgICB8fCB2ZWN0b3JpemFi bGVfcGhpICh2aW5mbywgc3RtdF9pbmZvLCBOVUxMLCBub2RlLCBjb3N0X3ZlYykpOw0KPiA+ID4g KwkgICAgICB8fCB2ZWN0b3JpemFibGVfcGhpICh2aW5mbywgc3RtdF9pbmZvLCBOVUxMLCBub2Rl LCBjb3N0X3ZlYykNCj4gPiA+ICsJICAgICAgfHwgdmVjdG9yaXphYmxlX2Vhcmx5X2V4aXQgKHZp bmZvLCBzdG10X2luZm8sIG5vZGUsDQo+ID4gPiArCQkJCQkgIG5vZGVfaW5zdGFuY2UsIGNvc3Rf dmVjKSk7DQo+ID4gPiArDQo+ID4gPiAgICAgIH0NCj4gPiA+DQo+ID4gPiAgICBpZiAobm9kZSkN Cj4gPiA+IEBAIC0xMTQxOCw2ICsxMTQ1MSwxMiBAQCB2ZWN0X3RyYW5zZm9ybV9zdG10ICh2ZWNf aW5mbyAqdmluZm8sDQo+ID4gPiAgICAgICAgZ2NjX2Fzc2VydCAoZG9uZSk7DQo+ID4gPiAgICAg ICAgYnJlYWs7DQo+ID4gPg0KPiA+ID4gKyAgICBjYXNlIGxvb3BfZXhpdF9jdHJsX3ZlY19pbmZv X3R5cGU6DQo+ID4gPiArICAgICAgZG9uZSA9IHZlY3RfdHJhbnNmb3JtX2Vhcmx5X2JyZWFrIChh c19hIDxsb29wX3ZlY19pbmZvPiAodmluZm8pLA0KPiA+IHN0bXRfaW5mbywNCj4gPiA+ICsJCQkJ ICAgICAgICAgZ3NpLCAmdmVjX3N0bXQsIHNscF9ub2RlKTsNCj4gPiA+ICsgICAgICBnY2NfYXNz ZXJ0IChkb25lKTsNCj4gPiA+ICsgICAgICBicmVhazsNCj4gPiA+ICsNCj4gPiA+ICAgICAgZGVm YXVsdDoNCj4gPiA+ICAgICAgICBpZiAoIVNUTVRfVklORk9fTElWRV9QIChzdG10X2luZm8pKQ0K PiA+ID4gIAl7DQo+ID4gPiBAQCAtMTE4MTYsNiArMTE4NTUsOSBAQCB2ZWN0X2lzX3NpbXBsZV91 c2UgKHRyZWUgb3BlcmFuZCwgdmVjX2luZm8NCj4gPiAqdmluZm8sIGVudW0gdmVjdF9kZWZfdHlw ZSAqZHQsDQo+ID4gPiAgCWNhc2UgdmVjdF9maXJzdF9vcmRlcl9yZWN1cnJlbmNlOg0KPiA+ID4g IAkgIGR1bXBfcHJpbnRmIChNU0dfTk9URSwgImZpcnN0IG9yZGVyIHJlY3VycmVuY2VcbiIpOw0K PiA+ID4gIAkgIGJyZWFrOw0KPiA+ID4gKwljYXNlIHZlY3RfZWFybHlfZXhpdF9kZWY6DQo+ID4g PiArCSAgZHVtcF9wcmludGYgKE1TR19OT1RFLCAiZWFybHkgZXhpdFxuIik7DQo+ID4gPiArCSAg YnJlYWs7DQo+ID4gPiAgCWNhc2UgdmVjdF91bmtub3duX2RlZl90eXBlOg0KPiA+ID4gIAkgIGR1 bXBfcHJpbnRmIChNU0dfTk9URSwgInVua25vd25cbiIpOw0KPiA+ID4gIAkgIGJyZWFrOw0KPiA+ ID4gQEAgLTEyNDg2LDYgKzEyNTI4LDggQEAgdmVjdF9nZXRfdmVjdG9yX3R5cGVzX2Zvcl9zdG10 ICh2ZWNfaW5mbw0KPiA+ICp2aW5mbywgc3RtdF92ZWNfaW5mbyBzdG10X2luZm8sDQo+ID4gPiAg ICAqbnVuaXRzX3ZlY3R5cGVfb3V0ID0gTlVMTF9UUkVFOw0KPiA+ID4NCj4gPiA+ICAgIGlmIChn aW1wbGVfZ2V0X2xocyAoc3RtdCkgPT0gTlVMTF9UUkVFDQo+ID4gPiArICAgICAgLyogQWxsb3cg dmVjdG9yIGNvbmRpdGlvbmFscyB0aHJvdWdoIGhlcmUuICAqLw0KPiA+ID4gKyAgICAgICYmICFp c19jdHJsX3N0bXQgKHN0bXQpDQo+ID4gPiAgICAgICAgLyogTUFTS19TVE9SRSBoYXMgbm8gbGhz LCBidXQgaXMgb2suICAqLw0KPiA+ID4gICAgICAgICYmICFnaW1wbGVfY2FsbF9pbnRlcm5hbF9w IChzdG10LCBJRk5fTUFTS19TVE9SRSkpDQo+ID4gPiAgICAgIHsNCj4gPiA+IEBAIC0xMjUwMiw3 ICsxMjU0Niw3IEBAIHZlY3RfZ2V0X3ZlY3Rvcl90eXBlc19mb3Jfc3RtdCAodmVjX2luZm8NCj4g PiAqdmluZm8sIHN0bXRfdmVjX2luZm8gc3RtdF9pbmZvLA0KPiA+ID4gIAl9DQo+ID4gPg0KPiA+ ID4gICAgICAgIHJldHVybiBvcHRfcmVzdWx0OjpmYWlsdXJlX2F0IChzdG10LA0KPiA+ID4gLQkJ CQkgICAgICJub3QgdmVjdG9yaXplZDogaXJyZWd1bGFyIHN0bXQuJUciLCBzdG10KTsNCj4gPiA+ ICsJCQkJICAgICAibm90IHZlY3Rvcml6ZWQ6IGlycmVndWxhciBzdG10OiAlRyIsIHN0bXQpOw0K PiA+ID4gICAgICB9DQo+ID4gPg0KPiA+ID4gICAgdHJlZSB2ZWN0eXBlOw0KPiA+ID4gQEAgLTEy NTMxLDYgKzEyNTc1LDggQEAgdmVjdF9nZXRfdmVjdG9yX3R5cGVzX2Zvcl9zdG10ICh2ZWNfaW5m bw0KPiA+ICp2aW5mbywgc3RtdF92ZWNfaW5mbyBzdG10X2luZm8sDQo+ID4gPiAgCXNjYWxhcl90 eXBlID0gVFJFRV9UWVBFIChEUl9SRUYgKGRyKSk7DQo+ID4gPiAgICAgICAgZWxzZSBpZiAoZ2lt cGxlX2NhbGxfaW50ZXJuYWxfcCAoc3RtdCwgSUZOX01BU0tfU1RPUkUpKQ0KPiA+ID4gIAlzY2Fs YXJfdHlwZSA9IFRSRUVfVFlQRSAoZ2ltcGxlX2NhbGxfYXJnIChzdG10LCAzKSk7DQo+ID4gPiAr ICAgICAgZWxzZSBpZiAoaXNfY3RybF9zdG10IChzdG10KSkNCj4gPiA+ICsJc2NhbGFyX3R5cGUg PSBUUkVFX1RZUEUgKGdpbXBsZV9jb25kX3JocyAoc3RtdCkpOw0KPiA+ID4gICAgICAgIGVsc2UN Cj4gPiA+ICAJc2NhbGFyX3R5cGUgPSBUUkVFX1RZUEUgKGdpbXBsZV9nZXRfbGhzIChzdG10KSk7 DQo+ID4gPg0KPiA+ID4gZGlmZiAtLWdpdCBhL2djYy90cmVlLXZlY3Rvcml6ZXIuaCBiL2djYy90 cmVlLXZlY3Rvcml6ZXIuaA0KPiA+ID4gaW5kZXgNCj4gPg0KPiAwMTY5NjFkYTg1MTBjYTdkZDJk MDdlNzE2Y2JlMzU2MjNlZDJkOWE1Li5lZGJiNzIyOGQzYWFlMjliNmY1MWZkYWINCj4gPiAyODRm NDlhYzU3YzY2MTJkIDEwMDY0NA0KPiA+ID4gLS0tIGEvZ2NjL3RyZWUtdmVjdG9yaXplci5oDQo+ ID4gPiArKysgYi9nY2MvdHJlZS12ZWN0b3JpemVyLmgNCj4gPiA+IEBAIC02Myw2ICs2Myw3IEBA IGVudW0gdmVjdF9kZWZfdHlwZSB7DQo+ID4gPiAgICB2ZWN0X2ludGVybmFsX2RlZiwNCj4gPiA+ ICAgIHZlY3RfaW5kdWN0aW9uX2RlZiwNCj4gPiA+ICAgIHZlY3RfcmVkdWN0aW9uX2RlZiwNCj4g PiA+ICsgIHZlY3RfZWFybHlfZXhpdF9kZWYsDQo+ID4gPiAgICB2ZWN0X2RvdWJsZV9yZWR1Y3Rp b25fZGVmLA0KPiA+ID4gICAgdmVjdF9uZXN0ZWRfY3ljbGUsDQo+ID4gPiAgICB2ZWN0X2ZpcnN0 X29yZGVyX3JlY3VycmVuY2UsDQo+ID4gPiBAQCAtODM2LDYgKzgzNywxMCBAQCBwdWJsaWM6DQo+ ID4gPiAgICAgICB3ZSBuZWVkIHRvIHBlZWwgb2ZmIGl0ZXJhdGlvbnMgYXQgdGhlIGVuZCB0byBm b3JtIGFuIGVwaWxvZ3VlIGxvb3AuICAqLw0KPiA+ID4gICAgYm9vbCBwZWVsaW5nX2Zvcl9uaXRl cjsNCj4gPiA+DQo+ID4gPiArICAvKiBXaGVuIHRoZSBsb29wIGhhcyBlYXJseSBicmVha3MgdGhh dCB3ZSBjYW4gdmVjdG9yaXplIHdlIG5lZWQgdG8NCj4gcGVlbA0KPiA+ID4gKyAgICAgdGhlIGxv b3AgZm9yIHRoZSBicmVhayBmaW5kaW5nIGxvb3AuICAqLw0KPiA+ID4gKyAgYm9vbCBlYXJseV9i cmVha3M7DQo+ID4gPiArDQo+ID4gPiAgICAvKiBUcnVlIGlmIHRoZXJlIGFyZSBubyBsb29wIGNh cnJpZWQgZGF0YSBkZXBlbmRlbmNpZXMgaW4gdGhlIGxvb3AuDQo+ID4gPiAgICAgICBJZiBsb29w LT5zYWZlbGVuIDw9IDEsIHRoZW4gdGhpcyBpcyBhbHdheXMgdHJ1ZSwgZWl0aGVyIHRoZSBsb29w DQo+ID4gPiAgICAgICBkaWRuJ3QgaGF2ZSBhbnkgbG9vcCBjYXJyaWVkIGRhdGEgZGVwZW5kZW5j aWVzLCBvciB0aGUgbG9vcCBpcyBiZWluZw0KPiA+ID4gQEAgLTkyMSw2ICs5MjYsNyBAQCBwdWJs aWM6DQo+ID4gPiAgI2RlZmluZSBMT09QX1ZJTkZPX1JFRFVDVElPTl9DSEFJTlMoTCkgICAgIChM KS0+cmVkdWN0aW9uX2NoYWlucw0KPiA+ID4gICNkZWZpbmUgTE9PUF9WSU5GT19QRUVMSU5HX0ZP Ul9HQVBTKEwpICAgICAoTCktPnBlZWxpbmdfZm9yX2dhcHMNCj4gPiA+ICAjZGVmaW5lIExPT1Bf VklORk9fUEVFTElOR19GT1JfTklURVIoTCkgICAgKEwpLT5wZWVsaW5nX2Zvcl9uaXRlcg0KPiA+ ID4gKyNkZWZpbmUgTE9PUF9WSU5GT19FQVJMWV9CUkVBS1MoTCkgICAgICAgICAoTCktPmVhcmx5 X2JyZWFrcw0KPiA+ID4gICNkZWZpbmUgTE9PUF9WSU5GT19OT19EQVRBX0RFUEVOREVOQ0lFUyhM KSAoTCktDQo+ID4gPm5vX2RhdGFfZGVwZW5kZW5jaWVzDQo+ID4gPiAgI2RlZmluZSBMT09QX1ZJ TkZPX1NDQUxBUl9MT09QKEwpCSAgIChMKS0+c2NhbGFyX2xvb3ANCj4gPiA+ICAjZGVmaW5lIExP T1BfVklORk9fU0NBTEFSX0xPT1BfU0NBTElORyhMKSAgKEwpLQ0KPiA+ID5zY2FsYXJfbG9vcF9z Y2FsaW5nDQo+ID4gPiBAQCAtOTcwLDcgKzk3Niw3IEBAIHB1YmxpYzoNCj4gPiA+ICB0eXBlZGVm IG9wdF9wb2ludGVyX3dyYXBwZXIgPGxvb3BfdmVjX2luZm8+IG9wdF9sb29wX3ZlY19pbmZvOw0K PiA+ID4NCj4gPiA+ICBzdGF0aWMgaW5saW5lIGxvb3BfdmVjX2luZm8NCj4gPiA+IC1sb29wX3Zl Y19pbmZvX2Zvcl9sb29wIChjbGFzcyBsb29wICpsb29wKQ0KPiA+ID4gK2xvb3BfdmVjX2luZm9f Zm9yX2xvb3AgKGNvbnN0IGNsYXNzIGxvb3AgKmxvb3ApDQo+ID4gPiAgew0KPiA+ID4gICAgcmV0 dXJuIChsb29wX3ZlY19pbmZvKSBsb29wLT5hdXg7DQo+ID4gPiAgfQ0KPiA+ID4gQEAgLTIxMDcs NyArMjExMyw3IEBAIGNsYXNzIGF1dG9fcHVyZ2VfdmVjdF9sb2NhdGlvbg0KPiA+ID4gICAgIGlu IHRyZWUtdmVjdC1sb29wLW1hbmlwLmNjLiAgKi8NCj4gPiA+ICBleHRlcm4gdm9pZCB2ZWN0X3Nl dF9sb29wX2NvbmRpdGlvbiAoY2xhc3MgbG9vcCAqLCBsb29wX3ZlY19pbmZvLA0KPiA+ID4gIAkJ CQkgICAgIHRyZWUsIHRyZWUsIHRyZWUsIGJvb2wpOw0KPiA+ID4gLWV4dGVybiBib29sIHNscGVl bF9jYW5fZHVwbGljYXRlX2xvb3BfcCAoY29uc3QgY2xhc3MgbG9vcCAqLA0KPiA+IGNvbnN0X2Vk Z2UpOw0KPiA+ID4gK2V4dGVybiBib29sIHNscGVlbF9jYW5fZHVwbGljYXRlX2xvb3BfcCAoY29u c3QgbG9vcF92ZWNfaW5mbywNCj4gPiBjb25zdF9lZGdlKTsNCj4gPiA+ICBjbGFzcyBsb29wICpz bHBlZWxfdHJlZV9kdXBsaWNhdGVfbG9vcF90b19lZGdlX2NmZyAoY2xhc3MgbG9vcCAqLA0KPiA+ ID4gIAkJCQkJCSAgICAgY2xhc3MgbG9vcCAqLCBlZGdlKTsNCj4gPiA+ICBjbGFzcyBsb29wICp2 ZWN0X2xvb3BfdmVyc2lvbmluZyAobG9vcF92ZWNfaW5mbywgZ2ltcGxlICopOw0KPiA+ID4gQEAg LTIzMDYsNiArMjMxMiw3IEBAIHN0cnVjdCB2ZWN0X2xvb3BfZm9ybV9pbmZvDQo+ID4gPiAgICB0 cmVlIG51bWJlcl9vZl9pdGVyYXRpb25zOw0KPiA+ID4gICAgdHJlZSBudW1iZXJfb2ZfaXRlcmF0 aW9uc20xOw0KPiA+ID4gICAgdHJlZSBhc3N1bXB0aW9uczsNCj4gPiA+ICsgIHZlYzxnY29uZCAq PiBjb25kczsNCj4gPiA+ICAgIGdjb25kICpsb29wX2NvbmQ7DQo+ID4gPiAgICBnY29uZCAqaW5u ZXJfbG9vcF9jb25kOw0KPiA+ID4gIH07DQo+ID4gPiBAQCAtMjMyNiw2ICsyMzMzLDkgQEAgZXh0 ZXJuIGJvb2wgdmVjdG9yaXphYmxlX2luZHVjdGlvbg0KPiA+IChsb29wX3ZlY19pbmZvLCBzdG10 X3ZlY19pbmZvLA0KPiA+ID4gIGV4dGVybiBib29sIHZlY3RfdHJhbnNmb3JtX3JlZHVjdGlvbiAo bG9vcF92ZWNfaW5mbywgc3RtdF92ZWNfaW5mbywNCj4gPiA+ICAJCQkJICAgICAgZ2ltcGxlX3N0 bXRfaXRlcmF0b3IgKiwNCj4gPiA+ICAJCQkJICAgICAgZ2ltcGxlICoqLCBzbHBfdHJlZSk7DQo+ ID4gPiArZXh0ZXJuIGJvb2wgdmVjdF90cmFuc2Zvcm1fZWFybHlfYnJlYWsgKGxvb3BfdmVjX2lu Zm8sDQo+IHN0bXRfdmVjX2luZm8sDQo+ID4gPiArCQkJCQlnaW1wbGVfc3RtdF9pdGVyYXRvciAq LA0KPiA+ID4gKwkJCQkJZ2ltcGxlICoqLCBzbHBfdHJlZSk7DQo+ID4gPiAgZXh0ZXJuIGJvb2wg dmVjdF90cmFuc2Zvcm1fY3ljbGVfcGhpIChsb29wX3ZlY19pbmZvLCBzdG10X3ZlY19pbmZvLA0K PiA+ID4gIAkJCQkgICAgICBnaW1wbGUgKiosDQo+ID4gPiAgCQkJCSAgICAgIHNscF90cmVlLCBz bHBfaW5zdGFuY2UpOw0KPiA+ID4gQEAgLTIzMzUsNiArMjM0NSwxMSBAQCBleHRlcm4gYm9vbCB2 ZWN0b3JpemFibGVfcGhpICh2ZWNfaW5mbyAqLA0KPiA+IHN0bXRfdmVjX2luZm8sIGdpbXBsZSAq Kiwgc2xwX3RyZWUsDQo+ID4gPiAgCQkJICAgICAgc3RtdF92ZWN0b3JfZm9yX2Nvc3QgKik7DQo+ ID4gPiAgZXh0ZXJuIGJvb2wgdmVjdG9yaXphYmxlX3JlY3VyciAobG9vcF92ZWNfaW5mbywgc3Rt dF92ZWNfaW5mbywNCj4gPiA+ICAJCQkJICBnaW1wbGUgKiosIHNscF90cmVlLCBzdG10X3ZlY3Rv cl9mb3JfY29zdA0KPiA+ICopOw0KPiA+ID4gK2V4dGVybiBib29sIHZlY3Rvcml6YWJsZV9lYXJs eV9leGl0ICh2ZWNfaW5mbyAqLCBzdG10X3ZlY19pbmZvLA0KPiA+ID4gKwkJCQkgICAgIHNscF90 cmVlLCBzbHBfaW5zdGFuY2UsDQo+ID4gPiArCQkJCSAgICAgc3RtdF92ZWN0b3JfZm9yX2Nvc3Qg Kik7DQo+ID4gPiArZXh0ZXJuIHRyZWUgcHJlcGFyZV92ZWNfbWFzayAobG9vcF92ZWNfaW5mbywg dHJlZSwgdHJlZSwNCj4gPiA+ICsJCQkgICAgICB0cmVlLCBnaW1wbGVfc3RtdF9pdGVyYXRvciAq KTsNCj4gPiA+ICBleHRlcm4gYm9vbCB2ZWN0X2VtdWxhdGVkX3ZlY3Rvcl9wICh0cmVlKTsNCj4g PiA+ICBleHRlcm4gYm9vbCB2ZWN0X2Nhbl92ZWN0b3JpemVfd2l0aG91dF9zaW1kX3AgKHRyZWVf Y29kZSk7DQo+ID4gPiAgZXh0ZXJuIGJvb2wgdmVjdF9jYW5fdmVjdG9yaXplX3dpdGhvdXRfc2lt ZF9wIChjb2RlX2hlbHBlcik7DQo+ID4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdG9yaXpl ci5jYyBiL2djYy90cmVlLXZlY3Rvcml6ZXIuY2MNCj4gPiA+IGluZGV4DQo+ID4NCj4gNmVjNDk1 MTFkNzRiZDJlMGU1ZGQ1MTgyM2E2YzQxMTgwZjA4NzE2Yy4uNGFhNDZjN2MwZDgyMzVkM2I3ODNj ZTkzMA0KPiA+IGU1ZGYzNDgwZTFiM2VmOSAxMDA2NDQNCj4gPiA+IC0tLSBhL2djYy90cmVlLXZl Y3Rvcml6ZXIuY2MNCj4gPiA+ICsrKyBiL2djYy90cmVlLXZlY3Rvcml6ZXIuY2MNCj4gPiA+IEBA IC0xMzgyLDcgKzEzODIsOSBAQCBwYXNzX3ZlY3Rvcml6ZTo6ZXhlY3V0ZSAoZnVuY3Rpb24gKmZ1 bikNCj4gPiA+ICAJIHByZWRpY2F0ZXMgdGhhdCBuZWVkIHRvIGJlIHNoYXJlZCBmb3Igb3B0aW1h bCBwcmVkaWNhdGUgdXNhZ2UuDQo+ID4gPiAgCSBIb3dldmVyIHJlYXNzb2Mgd2lsbCByZS1vcmRl ciB0aGVtIGFuZCBwcmV2ZW50IENTRSBmcm9tIHdvcmtpbmcNCj4gPiA+ICAJIGFzIGl0IHNob3Vs ZC4gIENTRSBvbmx5IHRoZSBsb29wIGJvZHksIG5vdCB0aGUgZW50cnkuICAqLw0KPiA+ID4gLSAg ICAgIGJpdG1hcF9zZXRfYml0IChleGl0X2Jicywgc2luZ2xlX2V4aXQgKGxvb3ApLT5kZXN0LT5p bmRleCk7DQo+ID4gPiArICAgICAgYXV0b192ZWM8ZWRnZT4gZXhpdHMgPSBnZXRfbG9vcF9leGl0 X2VkZ2VzIChsb29wKTsNCj4gPiA+ICsgICAgICBmb3IgKGVkZ2UgZXhpdCA6IGV4aXRzKQ0KPiA+ ID4gKwliaXRtYXBfc2V0X2JpdCAoZXhpdF9iYnMsIGV4aXQtPmRlc3QtPmluZGV4KTsNCj4gPiA+ DQo+ID4gPiAgICAgICAgZWRnZSBlbnRyeSA9IEVER0VfUFJFRCAobG9vcF9wcmVoZWFkZXJfZWRn ZSAobG9vcCktPnNyYywgMCk7DQo+ID4gPiAgICAgICAgZG9fcnBvX3ZuIChmdW4sIGVudHJ5LCBl eGl0X2Jicyk7DQo+ID4gPg0KPiA+ID4NCj4gPiA+DQo+ID4gPg0KPiA+ID4NCj4gPg0KPiA+IC0t DQo+ID4gUmljaGFyZCBCaWVuZXIgPHJndWVudGhlckBzdXNlLmRlPg0KPiA+IFNVU0UgU29mdHdh cmUgU29sdXRpb25zIEdlcm1hbnkgR21iSCwgRnJhbmtlbnN0cmFzc2UgMTQ2LCA5MDQ2MQ0KPiA+ IE51ZXJuYmVyZywNCj4gPiBHZXJtYW55OyBHRjogSXZvIFRvdGV2LCBBbmRyZXcgTXllcnMsIEFu ZHJldyBNY0RvbmFsZCwgQm91ZGllbg0KPiA+IE1vZXJtYW47DQo+ID4gSFJCIDM2ODA5IChBRyBO dWVybmJlcmcpDQo=