From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from EUR04-VI1-obe.outbound.protection.outlook.com (EUR04-VI1-obe.outbound.protection.outlook.com [40.107.8.70]) by mx.groups.io with SMTP id smtpd.web11.3797.1587487756447339804 for ; Tue, 21 Apr 2020 09:49:18 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@armh.onmicrosoft.com header.s=selector2-armh-onmicrosoft-com header.b=BxGJrVcP; spf=pass (domain: arm.com, ip: 40.107.8.70, mailfrom: samer.el-haj-mahmoud@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=/fg9s62o0qPWrquPmXn1uSzOJmW8DPINsV4g3pZXN1g=; b=BxGJrVcPoAa8nuKlTFecTTnkxGnTrF6julr/poIf0xjtSIGeAKoAoUGcHo/QzKpSG1ylGw7rlKOa77hWX5R0OzwvpE/1yr2Rr6mxj1H/D9XGzwA52BX+fxIXPWhNPcrKPubfMlED51o52yhlxPu2+Wz4ZT/zOZ3O4LDFJcZXQT4= Received: from DB6PR0201CA0010.eurprd02.prod.outlook.com (2603:10a6:4:3f::20) by AM0PR08MB5380.eurprd08.prod.outlook.com (2603:10a6:208:183::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2921.25; Tue, 21 Apr 2020 16:49:13 +0000 Received: from DB5EUR03FT019.eop-EUR03.prod.protection.outlook.com (2603:10a6:4:3f:cafe::cf) by DB6PR0201CA0010.outlook.office365.com (2603:10a6:4:3f::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2921.25 via Frontend Transport; Tue, 21 Apr 2020 16:49:13 +0000 Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; edk2.groups.io; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;edk2.groups.io; dmarc=bestguesspass 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; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DB5EUR03FT019.mail.protection.outlook.com (10.152.20.163) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2900.15 via Frontend Transport; Tue, 21 Apr 2020 16:49:12 +0000 Received: ("Tessian outbound ecb846ece464:v53"); Tue, 21 Apr 2020 16:49:12 +0000 X-CR-MTA-TID: 64aa7808 Received: from 0078bafeeb4f.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 57F959EC-25DE-404E-85F7-E2E911929AA8.1; Tue, 21 Apr 2020 16:49:07 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 0078bafeeb4f.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 21 Apr 2020 16:49:07 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GcW0ghNe3B+dcFTaI/C1gNUQWCQtytcPMmsz9AdSm57Mv2kDttbCu+2RmJtZY7JbdXjiVYIfOmg/RgmDO1cpLeni8Qrd011qfUWJ500tj4kZ8Xi0rKLWwKp0QE+bAgAPirxhCAxtwfmsI7eKjMygnZJ+a9b61Qj3oYbrn/m5FZ+kDEDUlTUMOsjxcxU9s4g1JMVfn49Su93+uSiRIolHuQfcoF8g8B6/6Y6bTOysEsE5TViNomaCeIES/lIju4C3hoqZOhEGHunBwqtp82a16bHvBrOvsjyv5vY4XtRWStc4RXiFWHwX1g6VUjn5XGGqsnEFqmI04g+iwjwAKnR2mA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/fg9s62o0qPWrquPmXn1uSzOJmW8DPINsV4g3pZXN1g=; b=DFvMtKac8I7qndF1Z0J8BH5ZoS/0MvBZ1yGR6aIIZFCEpSD2Qbo0fhKd9Yx7dWCZcuR2qvhFvM0bjv2GEKmzMGajRZrDQB/buj7HJ2/L7wE29OKTsssIHlJWiozWIWDHy47taM8r4eaZ7fC6L5eSOWAQdxFq5LjY0E4UpIYInauMycObn5WhCwyKlAKXpl21B6iDWcCDA/ePLqW4RX8GigG6VoT6g1iKsWa7Vm7frXoG2SayET1MlW4XW0q+ybKbeXYbZFY4i5AVvVDOUeh0TZROlDOK746/lATlT8k0aB7GTVqrK/7zcgOw2TsTHPGriQfy72IaOsB6kINGYbwuCw== 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=/fg9s62o0qPWrquPmXn1uSzOJmW8DPINsV4g3pZXN1g=; b=BxGJrVcPoAa8nuKlTFecTTnkxGnTrF6julr/poIf0xjtSIGeAKoAoUGcHo/QzKpSG1ylGw7rlKOa77hWX5R0OzwvpE/1yr2Rr6mxj1H/D9XGzwA52BX+fxIXPWhNPcrKPubfMlED51o52yhlxPu2+Wz4ZT/zOZ3O4LDFJcZXQT4= Received: from DB7PR08MB3260.eurprd08.prod.outlook.com (2603:10a6:5:21::23) by DB7PR08MB3593.eurprd08.prod.outlook.com (2603:10a6:10:49::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2921.29; Tue, 21 Apr 2020 16:49:04 +0000 Received: from DB7PR08MB3260.eurprd08.prod.outlook.com ([fe80::990e:ed79:bec0:9dac]) by DB7PR08MB3260.eurprd08.prod.outlook.com ([fe80::990e:ed79:bec0:9dac%7]) with mapi id 15.20.2921.027; Tue, 21 Apr 2020 16:49:04 +0000 From: "Samer El-Haj-Mahmoud" To: Vladimir Olovyannikov , "devel@edk2.groups.io" , Ray Ni , Zhichao Gao CC: nd Subject: Re: [edk2-devel] [PATCH 1/1] ShellPkg/DynamicCommand: add HttpDynamicCommand Thread-Topic: [edk2-devel] [PATCH 1/1] ShellPkg/DynamicCommand: add HttpDynamicCommand Thread-Index: AQHV0xp60E9pnJ5deE+cW1VmcKoG8aiA5OcQgAHh/gCAAYkF8A== Date: Tue, 21 Apr 2020 16:49:02 +0000 Message-ID: References: <20200125005718.8931-1-vladimir.olovyannikov@broadcom.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: f99faebe-c6d5-4ded-b8b5-bf37e4240c72.1 x-checkrecipientchecked: true Authentication-Results-Original: spf=none (sender IP is ) smtp.mailfrom=Samer.El-Haj-Mahmoud@arm.com; x-originating-ip: [217.140.111.135] x-ms-publictraffictype: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 38647517-9f77-44e9-7812-08d7e613eb9f x-ms-traffictypediagnostic: DB7PR08MB3593:|AM0PR08MB5380: X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true nodisclaimer: true x-ms-oob-tlc-oobclassifiers: OLM:2449;OLM:2449; x-forefront-prvs: 038002787A X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB7PR08MB3260.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(10009020)(6019001)(4636009)(39860400002)(366004)(396003)(136003)(346002)(376002)(316002)(83080400001)(71200400001)(8676002)(2906002)(8936002)(81156014)(478600001)(5660300002)(966005)(30864003)(26005)(55016002)(6506007)(53546011)(9686003)(66446008)(64756008)(66556008)(66476007)(76116006)(7696005)(19627235002)(186003)(66946007)(86362001)(110136005)(52536014)(4326008)(33656002)(579004)(559001);DIR:OUT;SFP:1101; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: xMiGSUHXxgktZAFcizoEXxrlREnLSSI/Op2Fx4jobz80UqGvxTGySWqH1yv+pfelbD2CTYF6+024JOd5DeVWm2uY0V+Ecqw0AXJNOuQ6b5rBD459T51EmjV9I9hqg7NWsIE3CWFolgMorvjDTrVU4ciTsVr16SrfO2QndLSA59aGuVpF6Z8/skGRgJ3RzG48iqPXdr/mJFhdDDD9dsdi3bxkCI08or4OhiJnk/HGwWRyPnEHp4OoXI4ku4kN0G7jbF/oewdBpTRbAstvaFQUq4OVy9gUV4q/M0UzlDJL6Ay+IEqWUe3v/jbVGApIBU767LD3s9+DNu6NIaHimSEEL78YvQCAeINWXKgAG7OxXU3u8gwJYf/yzm3Dq8AG6axS4R+mk00TUwBcli5KfxXoLUrGvSYMQOEUFSZPmGaD6u+CXJ3Qow+9csK7ezuJ0qtpFXF8giP3U0pTS3aG/nQQbHWdcvzqZYqHvWJm966MCcTVtyH/rRDubg+/FLO+0JalzOtTSO5gedonaux4c+VHaw== x-ms-exchange-antispam-messagedata: PaV1T1pXpeDaQoT/jkltOZPurYmZ3ftF1Mt+ZgZ/7kCPtuXsu7X7aUfgenFrGUnII8reQ11kzpNaJEqgozJ7DiSKUysBSWk/mD9yFYEiEZAPSStwb3aDUYrwx2cnrqqU+8c0yrngri6ST4E63RnKCA== x-ms-exchange-transport-forked: True MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3593 Original-Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Samer.El-Haj-Mahmoud@arm.com; Return-Path: Samer.El-Haj-Mahmoud@arm.com X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5EUR03FT019.eop-EUR03.prod.protection.outlook.com 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;SFTY:;SFS:(10009020)(6019001)(4636009)(39860400002)(376002)(396003)(346002)(136003)(46966005)(186003)(9686003)(5660300002)(55016002)(478600001)(81166007)(7696005)(47076004)(86362001)(966005)(52536014)(83080400001)(82740400003)(33656002)(19627235002)(4326008)(356005)(30864003)(2906002)(53546011)(336012)(6506007)(70206006)(70586007)(81156014)(26005)(316002)(110136005)(8936002)(8676002)(559001)(579004);DIR:OUT;SFP:1101; X-MS-Office365-Filtering-Correlation-Id-Prvs: 7c507219-8990-4bb7-ac79-08d7e613e666 X-Forefront-PRVS: 038002787A X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: prmITVyrZoPUYM/lS+3Zb+DKI7DknYbdOOsHyBYmk2G5RfzrveEbRD+CC0sEIRzQu0Kwkx4yhfRy4Lv/08E3l8W3fMfkR6Js5x+bsXGFp9WTQwjWvDxTPRg8S/Axe8VlkITQKFZ78nQliqKxgF593TtsZictc0lPkckbZbDJUGGo6y3WWrd0fAi/fF3Qh1lhw3vFM0QBOn3enZVgjca0nTG5vTHUUgrlC+JWe7k2rjIHiKFkJY2wulk2u0C7zJ3ZCTdd/SPrWXiUaNzYcFKpfwVVU7JL6mABYMpWU2oJWi+AMPVor4Gi4fQYjKDPzxNNVR2kmix4zwmTF/ylks7azoZoab6nx2fkMNutT49FniCOpFf+Pi4TvPshWsnEBiFCVyW6h1fr05izdAbpRgeEXkfFJKNQREGUHOWlatc8Egknjia+eUuXDFtqoqlxoIATNUSrvS/CmcBcrLdA0tAsAQBIbxY1CPuLejyXC5RDhbCWYZSGgbz45ek0kd0AwxPgukNBFJkHA2bLVjTZ37RhtgP3Qx00icD0cEBfoGd6WZSREf7vdhOlZ0uhFZTIGyS4H93KH0JFvexQYGcwBwN+SA== X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Apr 2020 16:49:12.7918 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 38647517-9f77-44e9-7812-08d7e613eb9f 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-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB5380 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 VGhhbmtzIFZsYWRpbWlyIGZvciB0aGUgZXhwbGFuYXRpb24uIA0KDQpXb25kZXJpbmcgd2hhdCBp cyBtb3JlIHVzZWZ1bCB0byB1c2VyczoNCg0KICAxLSBIYXZpbmcgdGhlICdodHRwJyBhbmQgJ3Rm dHAnIGNvbW1hbmRzIHNoYXJlIGEgY29tbW9uIGludGVyZmFjZSB0byBtYWtlIGl0IGVhc2llciB0 byBzY3JpcHQgdXNpbmcgZWl0aGVyIHRvb2wvcHJvdG9jb2wgKGFzIGV4cGxhaW5lZCBiZWxvdykN Ck9yDQogIDItIEhhdmluZyBhIG1vcmUgbmF0dXJhbCBzdXBwb3J0IGZvciBVUklzIGluICdodHRw JyBjb21tYW5kLCBzaW1pbGFyIHRvIHdoYXQgaXMgY29tbW9uIGluIG90aGVyIGh0dHAgQ0xJIGNs aWVudHMgbGlrZSBjdXJsDQoNCklmICgxKSBpcyBpbXBvcnRhbnQgZW5vdWdoIGZvciB1c2Vycywg dGhlbiBjb3VsZCB3ZSBlbnRlcnRhaW4gYWRkaW5nICgyKSBpbiBhZGRpdGlvbiB0byAoMSkuDQoN ClRoYW5rcywNCi0tU2FtZXINCg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZy b206IFZsYWRpbWlyIE9sb3Z5YW5uaWtvdiA8dmxhZGltaXIub2xvdnlhbm5pa292QGJyb2FkY29t LmNvbT4NCj4gU2VudDogTW9uZGF5LCBBcHJpbCAyMCwgMjAyMCAxOjEwIFBNDQo+IFRvOiBTYW1l ciBFbC1IYWotTWFobW91ZCA8U2FtZXIuRWwtSGFqLU1haG1vdWRAYXJtLmNvbT47DQo+IGRldmVs QGVkazIuZ3JvdXBzLmlvOyBSYXkgTmkgPHJheS5uaUBpbnRlbC5jb20+OyBaaGljaGFvIEdhbw0K PiA8emhpY2hhby5nYW9AaW50ZWwuY29tPg0KPiBDYzogbmQgPG5kQGFybS5jb20+DQo+IFN1Ympl Y3Q6IFJFOiBbZWRrMi1kZXZlbF0gW1BBVENIIDEvMV0gU2hlbGxQa2cvRHluYW1pY0NvbW1hbmQ6 IGFkZA0KPiBIdHRwRHluYW1pY0NvbW1hbmQNCj4gDQo+IEhpIFNhbWVyLA0KPiA+IC0tLS0tT3Jp Z2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gRnJvbTogU2FtZXIgRWwtSGFqLU1haG1vdWQgPFNhbWVy LkVsLUhhai1NYWhtb3VkQGFybS5jb20+DQo+ID4gU2VudDogU3VuZGF5LCBBcHJpbCAxOSwgMjAy MCA1OjMxIEFNDQo+ID4gVG86IGRldmVsQGVkazIuZ3JvdXBzLmlvOyB2bGFkaW1pci5vbG92eWFu bmlrb3ZAYnJvYWRjb20uY29tOyBSYXkgTmkNCj4gPiA8cmF5Lm5pQGludGVsLmNvbT47IFpoaWNo YW8gR2FvIDx6aGljaGFvLmdhb0BpbnRlbC5jb20+DQo+ID4gQ2M6IG5kIDxuZEBhcm0uY29tPg0K PiA+IFN1YmplY3Q6IFJFOiBbZWRrMi1kZXZlbF0gW1BBVENIIDEvMV0gU2hlbGxQa2cvRHluYW1p Y0NvbW1hbmQ6IGFkZA0KPiA+IEh0dHBEeW5hbWljQ29tbWFuZA0KPiA+DQo+ID4gVGVzdGVkLUJ5 OiBTYW1lciBFbC1IYWotTWFobW91ZCA8U2FtZXIuRWwtSGFqLU1haG1vdWRAYXJtLmNvbT4NCj4g Pg0KPiA+IEkgdGVzdGVkIG9uIEFhcmNoNjQgKFJQaTQpIGFuZCB0aGUgY29tbWFuZCBzZWVtcyB0 byB3b3JrIHdlbGwuDQo+ID4NCj4gPiBPbmUgcXVlc3Rpb246IHdoeSBpcyB0aGUgaW5wdXQgYXJn dW1lbnRzICJob3N0Wzpwb3J0XSIgYW5kIHRoZSByZW1vdGUNCj4gZmlsZQ0KPiA+ICJodHRwX3Vy aSIgbm90IHRyZWF0ZWQgYXMgYSBzaW5nbGUgImh0dHBfdXJpIiBhcmd1bWVudD8NCj4gPg0KPiA+ IEZvciBleGFtcGxlLCBpbnN0ZWFkIG9mOg0KPiA+ICAgIGZzMDpcPiBodHRwIGh0dHA6Ly8xOTIu MTY4LjEuMTo4MDgwIGRpcjEvZmlsZTEuZGF0IGZpbGUyLmRhdA0KPiA+DQo+ID4gV2h5IG5vdDoN Cj4gPiAgIGZzMDpcPiBodHRwIGh0dHA6Ly8xOTIuMTY4LjEuMTo4MDgwL2RpcjEvZmlsZTEuZGF0 IGZpbGUyLmRhdA0KPiBUaGUgaWRlYSB3YXMgdG8gbWFrZSBpdCAxMDAlIGNvbXBhdGlibGUgd2l0 aCB0ZnRwIGNvbW1hbmQuDQo+IFRoaXMgd2F5LCBvbmUgY291bGQgZWFzaWx5IHN1cHBvcnQgYm90 aCBpbiBvbmUgc2NyaXB0IGxpa2UgdGhpczoNCj4gc2V0IC12IGV0aF9pbnQgIiAtaSBldGgwIg0K PiAuLi4NCj4gIyBTZXQgdXBkYXRlIHByb3RvY29sIG9uIHNvbWUgbG93LWxldmVsIGluaXQNCj4g c2V0IHVwZF9wcm90byBodHRwIChvciB0ZnRwLCBvciBzb21ldGhpbmcgZWxzZSBpZiBuZWVkZWQg YW5kIHN1cHBvcnRlZCkNCj4gLi4uDQo+ICMgU2V0IHByb3RvY29sLXNwZWNpZmljIHBhcmFtZXRl cnMNCj4gaWYgIiV1X3Byb3RvJSIgPT0gInRmdHAiIHRoZW4NCj4gICBzZXQgLXYgIHRmdHBfYmxr X3BhcmFtICIgLXMgJXRmdHBfYmxvY2tzaXplJSINCj4gICBzZXQgLXYgdGZ0cF93aW5fcGFyYW0g IiAtdyAldGZ0cF93aW5kb3dzaXplJSINCj4gZW5kaWYNCj4gLi4uDQo+ICMgIlVuaXZlcnNhbGl6 ZSIgdHJhbnNmZXIgY29tbWFuZA0KPiBzZXQgLXYgdHJhbnNmZXJfY21kICIldV9wcm90byUgJWV0 aF9pbnQlICV0ZnRwX2Jsa19wYXJhbSUNCj4gJXRmdHBfd2luX3BhcmFtJQ0KPiAlc2VydmVyaXAl ICV0ZnRwX2RpciUiDQo+IC4uLg0KPiAjIFVzZSB1bml2ZXJzYWwgdHJhbnNmZXIgY29tbWFuZCB3 aXRoIG5vIGNoYW5nZXMgZm9yIGFueSB1cGRhdGUgcHJvdG9jb2wNCj4gKGJlIGl0IHRmdHAsIGh0 dHAsIGV0Yy4pLg0KPiAldHJhbnNmZXJfY21kJS9tZDVzdW0udHh0ICVlc3Bfcm9vdCVcbWQ1c3Vt LnR4dA0KPiAuLi4NCj4gDQo+IFRoYW5rcywNCj4gVmxhZGltaXINCj4gPg0KPiA+DQo+ID4NCj4g PiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiBGcm9tOiBkZXZlbEBlZGsyLmdy b3Vwcy5pbyA8ZGV2ZWxAZWRrMi5ncm91cHMuaW8+IE9uIEJlaGFsZiBPZg0KPiA+IFZsYWRpbWly DQo+ID4gPiBPbG92eWFubmlrb3YgdmlhIEdyb3Vwcy5Jbw0KPiA+ID4gU2VudDogRnJpZGF5LCBK YW51YXJ5IDI0LCAyMDIwIDc6NTcgUE0NCj4gPiA+IFRvOiBkZXZlbEBlZGsyLmdyb3Vwcy5pbzsg UmF5IE5pIDxyYXkubmlAaW50ZWwuY29tPjsgWmhpY2hhbyBHYW8NCj4gPiA+IDx6aGljaGFvLmdh b0BpbnRlbC5jb20+DQo+ID4gPiBDYzogVmxhZGltaXIgT2xvdnlhbm5pa292IDx2bGFkaW1pci5v bG92eWFubmlrb3ZAYnJvYWRjb20uY29tPg0KPiA+ID4gU3ViamVjdDogW2VkazItZGV2ZWxdIFtQ QVRDSCAxLzFdIFNoZWxsUGtnL0R5bmFtaWNDb21tYW5kOiBhZGQNCj4gPiA+IEh0dHBEeW5hbWlj Q29tbWFuZA0KPiA+ID4NCj4gPiA+IEludHJvZHVjZSBhbiBodHRwIGNsaWVudCB1dGlsaXppbmcg RURLMiBIVFRQIHByb3RvY29sLCB0bw0KPiA+ID4gYWxsb3cgZmFzdCBpbWFnZSBkb3dubG9hZGlu ZyBmcm9tIGh0dHAvaHR0cHMgc2VydmVycy4NCj4gPiA+IEhUVFAgZG93bmxvYWQgc3BlZWQgaXMg dXN1YWxseSB4MzAgdGltZXMgZmFzdGVyIHRoYW4gdGZ0cC4NCj4gPiA+IFRoZSBjbGllbnQgaXMg YmFzZWQgb24gdGhlIHNhbWUgYXBwcm9hY2ggYXMgdGZ0cCBkeW5hbWljIGNvbW1hbmQsIGFuZA0K PiA+ID4gdXNlcyB0aGUgc2FtZSBVRUZJIFNoZWxsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzLiBU aGlzIG1ha2VzIGl0IGVhc3kNCj4gPiA+IGludGVncmF0aW5nIGh0dHAgaW50byBleGlzdGluZyBV RUZJIFNoZWxsIHNjcmlwdHMuDQo+ID4gPiBOb3RlIHRoYXQgdG8gZW5hYmxlIEhUVFAgZG93bmxv YWQsIGZlYXR1cmUgUGNkDQo+ID4gPiBnRWZpTmV0d29ya1BrZ1Rva2VuU3BhY2VHdWlkLlBjZEFs bG93SHR0cENvbm5lY3Rpb25zIG11c3QNCj4gPiA+IGJlIHNldCB0byBUUlVFLg0KPiA+ID4NCj4g PiA+IFNpZ25lZC1vZmYtYnk6IFZsYWRpbWlyIE9sb3Z5YW5uaWtvdg0KPiA+IDx2bGFkaW1pci5v bG92eWFubmlrb3ZAYnJvYWRjb20uY29tPg0KPiA+ID4gLS0tDQo+ID4gPiAgLi4uL0R5bmFtaWND b21tYW5kL0h0dHBEeW5hbWljQ29tbWFuZC9IdHRwLmMgIHwgMTYzOQ0KPiA+ID4gKysrKysrKysr KysrKysrKysNCj4gPiA+ICAuLi4vRHluYW1pY0NvbW1hbmQvSHR0cER5bmFtaWNDb21tYW5kL0h0 dHAuaCAgfCAgIDg4ICsNCj4gPiA+ICAuLi4vSHR0cER5bmFtaWNDb21tYW5kL0h0dHAudW5pICAg ICAgICAgICAgICAgfCAgIDk1ICsNCj4gPiA+ICAuLi4vSHR0cER5bmFtaWNDb21tYW5kL0h0dHBB cHAuYyAgICAgICAgICAgICAgfCAgIDUzICsNCj4gPiA+ICAuLi4vSHR0cER5bmFtaWNDb21tYW5k L0h0dHBBcHAuaW5mICAgICAgICAgICAgfCAgIDU4ICsNCj4gPiA+ICAuLi4vSHR0cER5bmFtaWND b21tYW5kL0h0dHBEeW5hbWljQ29tbWFuZC5jICAgfCAgMTM0ICsrDQo+ID4gPiAgLi4uL0h0dHBE eW5hbWljQ29tbWFuZC9IdHRwRHluYW1pY0NvbW1hbmQuaW5mIHwgICA2MyArDQo+ID4gPiAgU2hl bGxQa2cvSW5jbHVkZS9HdWlkL1NoZWxsTGliSGlpR3VpZC5oICAgICAgIHwgICAgNyArLQ0KPiA+ ID4gIFNoZWxsUGtnL1NoZWxsUGtnLmRlYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEg Kw0KPiA+ID4gIFNoZWxsUGtnL1NoZWxsUGtnLmRzYyAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAgIDUgKw0KPiA+ID4gIDEwIGZpbGVzIGNoYW5nZWQsIDIxNDIgaW5zZXJ0aW9ucygrKSwgMSBk ZWxldGlvbigtKQ0KPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiA+ID4gU2hlbGxQa2cvRHlu YW1pY0NvbW1hbmQvSHR0cER5bmFtaWNDb21tYW5kL0h0dHAuYw0KPiA+ID4gIGNyZWF0ZSBtb2Rl IDEwMDY0NA0KPiA+ID4gU2hlbGxQa2cvRHluYW1pY0NvbW1hbmQvSHR0cER5bmFtaWNDb21tYW5k L0h0dHAuaA0KPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiA+ID4gU2hlbGxQa2cvRHluYW1p Y0NvbW1hbmQvSHR0cER5bmFtaWNDb21tYW5kL0h0dHAudW5pDQo+ID4gPiAgY3JlYXRlIG1vZGUg MTAwNjQ0DQo+ID4gPiBTaGVsbFBrZy9EeW5hbWljQ29tbWFuZC9IdHRwRHluYW1pY0NvbW1hbmQv SHR0cEFwcC5jDQo+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+ID4gPiBTaGVsbFBrZy9EeW5h bWljQ29tbWFuZC9IdHRwRHluYW1pY0NvbW1hbmQvSHR0cEFwcC5pbmYNCj4gPiA+ICBjcmVhdGUg bW9kZSAxMDA2NDQNCj4gPiA+DQo+ID4gU2hlbGxQa2cvRHluYW1pY0NvbW1hbmQvSHR0cER5bmFt aWNDb21tYW5kL0h0dHBEeW5hbWljQ29tbWFuZA0KPiA+IC5jDQo+ID4gPiAgY3JlYXRlIG1vZGUg MTAwNjQ0DQo+ID4gPg0KPiA+IFNoZWxsUGtnL0R5bmFtaWNDb21tYW5kL0h0dHBEeW5hbWljQ29t bWFuZC9IdHRwRHluYW1pY0NvbW1hbmQNCj4gPiAuaW4NCj4gPiA+IGYNCj4gPiA+DQo+ID4gPiBk aWZmIC0tZ2l0IGEvU2hlbGxQa2cvRHluYW1pY0NvbW1hbmQvSHR0cER5bmFtaWNDb21tYW5kL0h0 dHAuYw0KPiA+ID4gYi9TaGVsbFBrZy9EeW5hbWljQ29tbWFuZC9IdHRwRHluYW1pY0NvbW1hbmQv SHR0cC5jDQo+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ID4gaW5kZXggMDAwMDAwMDAw MDAwLi40ZTBhZjM0MTczNDgNCj4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ICsrKyBiL1NoZWxs UGtnL0R5bmFtaWNDb21tYW5kL0h0dHBEeW5hbWljQ29tbWFuZC9IdHRwLmMNCj4gPiA+IEBAIC0w LDAgKzEsMTYzOSBAQA0KPiA+ID4gKy8qKiBAZmlsZQ0KPiA+ID4gKyAgVGhlIGltcGxlbWVudGF0 aW9uIGZvciB0aGUgJ2h0dHAnIFNoZWxsIGNvbW1hbmQuDQo+ID4gPiArDQo+ID4gPiArICBDb3B5 cmlnaHQgKGMpIDIwMTUsIEFSTSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ID4g KyAgQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuDQo+IDxCUj4NCj4gPiA+ICsgIChDKSBDb3B5cmlnaHQgMjAxNSBIZXdsZXR0 IFBhY2thcmQgRW50ZXJwcmlzZSBEZXZlbG9wbWVudCBMUDxCUj4NCj4gPiA+ICsgIENvcHlyaWdo dCAoYykgMjAyMCwgQnJvYWRjb20uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIDxCUj4NCj4gPiA+ICsN Cj4gPiA+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ ID4gPiArKiovDQo+ID4gPiArDQo+ID4gPiArI2luY2x1ZGUgIkh0dHAuaCINCj4gPiA+ICsNCj4g PiA+ICsjZGVmaW5lIElQNF9DT05GSUcyX0lOVEVSRkFDRV9JTkZPX05BTUVfTEVOR1RIIDMyDQo+ ID4gPiArRUZJX0hJSV9IQU5ETEUgICBtSHR0cEhpaUhhbmRsZTsNCj4gPiA+ICsNCj4gPiA+ICsv Kg0KPiA+ID4gKyAgIENvbnN0YW50IHN0cmluZ3MgYW5kIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8g dGhlIG1lc3NhZ2UNCj4gPiA+ICsgICBpbmRpY2F0aW5nIHRoZSBhbW91bnQgb2YgcHJvZ3Jlc3Mg aW4gdGhlIGRvd2xvYWRpbmcgb2YgYSBIVFRQDQo+IGZpbGUuDQo+ID4gPiArKi8NCj4gPiA+ICsN Cj4gPiA+ICsvLyBOdW1iZXIgb2Ygc3RlcHMgaW4gdGhlIHByb2dyZXNzaW9uIHNsaWRlcg0KPiA+ ID4gKyNkZWZpbmUgSFRUUF9QUk9HUkVTU19TTElERVJfU1RFUFMgIFwNCj4gPiA+ICsgICgoc2l6 ZW9mIChIVFRQX1BST0dSX0ZSQU1FKSAvIHNpemVvZiAoQ0hBUjE2KSkgLSAzKQ0KPiA+ID4gKw0K PiA+ID4gKy8vIFNpemUgaW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMgcGx1cyBvbmUgKGZpbmFsIHpl cm8pIG9mIHRoZSBtZXNzYWdlDQo+IHRvDQo+ID4gPiArLy8gaW5kaWNhdGUgdGhlIHByb2dyZXNz IG9mIGFuIEhUVFAgZG93bmxvYWQuIFRoZSBmb3JtYXQgaXMNCj4gIlsocHJvZ3Jlc3MNCj4gPiBz bGlkZXI6DQo+ID4gPiArLy8gNDAgY2hhcmFjdGVycyldIChuYiBvZiBLQnl0ZXMgZG93bmxvYWRl ZCBzbyBmYXI6IDcgY2hhcmFjdGVycykNCj4gS2IiLg0KPiA+IFRoZXJlDQo+ID4gPiArLy8gYXJl IHRodXMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIEhUVFBfUFJPR1JfRlJBTUVbXSBwbHVz IDExDQo+ID4gPiBjaGFyYWN0ZXJzDQo+ID4gPiArLy8gKDIgLy8gc3BhY2VzLCAiS2IiIGFuZCBz ZXZlbiBjaGFyYWN0ZXJzIGZvciB0aGUgbnVtYmVyIG9mIEtCeXRlcykuDQo+ID4gPiArI2RlZmlu ZSBIVFRQX1BST0dSRVNTX01FU1NBR0VfU0laRSAgXA0KPiA+ID4gKyAgKChzaXplb2YgKEhUVFBf UFJPR1JfRlJBTUUpIC8gc2l6ZW9mIChDSEFSMTYpKSArIDEyKQ0KPiA+ID4gKw0KPiA+ID4gKy8v DQo+ID4gPiArLy8gQnVmZmVyIHNpemUuIE5vdGUgdGhhdCBsYXJnZXIgYnVmZmVyIGRvZXMgbm90 IG1lYW4gYmV0dGVyIHNwZWVkIQ0KPiA+ID4gKy8vDQo+ID4gPiArI2RlZmluZSBERUZBVUxUX0JV Rl9TSVpFICAgICAgU0laRV8zMktCDQo+ID4gPiArI2RlZmluZSBNQVhfQlVGX1NJWkUgICAgICAg ICAgU0laRV80TUINCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIFRJTUVSX01BWF9USU1FT1VUX1Mg ICAxMA0KPiA+ID4gKw0KPiA+ID4gKy8vIEZpbGUgbmFtZSB0byB1c2Ugd2hlbiBVUkkgZW5kcyB3 aXRoICIvIg0KPiA+ID4gKyNkZWZpbmUgREVGQVVMVF9IVE1MX0ZJTEUgICAgIEwiaW5kZXguaHRt bCINCj4gPiA+ICsjZGVmaW5lIERFRkFVTFRfSFRUUF9QUk9UTyAgICBMImh0dHAiDQo+ID4gPiAr DQo+ID4gPiArLy8gU3RyaW5nIHRvIGRlbGV0ZSB0aGUgSFRUUCBwcm9ncmVzcyBtZXNzYWdlIHRv IGJlIGFibGUgdG8gdXBkYXRlIGl0DQo+IDoNCj4gPiA+ICsvLyAoSFRUUF9QUk9HUkVTU19NRVNT QUdFX1NJWkUtMSkgJ1xiJw0KPiA+ID4gKyNkZWZpbmUgSFRUUF9QUk9HUkVTU19ERUwgXA0KPiA+ ID4gKw0KPiA+ID4NCj4gPiBMIlxiXGJcYlxiXGJcYlxiXGJcYlxiXGJcYlxiXGJcYlxiXGJcYlxi XGJcYlxiXGJcYlxiXGJcYlxiXGJcYlxiXGJcDQo+ID4gYlxiXGJcDQo+ID4gPiArXGJcYlxiXGJc YlxiXGJcYlxiXGJcYlxiXGJcYlxiXGJcYlxiIg0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgSFRU UF9LQiAgICAgICAgICAgICAgTCJcYlxiXGJcYlxiXGJcYlxiXGJcYiINCj4gPiA+ICsvLyBGcmFt ZSBmb3IgdGhlIHByb2dyZXNzaW9uIHNsaWRlcg0KPiA+ID4gKyNkZWZpbmUgSFRUUF9QUk9HUl9G UkFNRSAgICAgTCJbDQo+IF0iDQo+ID4gPiArDQo+ID4gPiArLy8gU3RyaW5nIGRlc2NyaXB0aW9u cyBmb3Igc2VydmVyIGVycm9ycw0KPiA+ID4gK1NUQVRJQyBDT05TVCBDSEFSMTYgKkVyclN0YXR1 c0Rlc2NbXSA9DQo+ID4gPiArew0KPiA+ID4gKyAgTCI0MDAgQmFkIFJlcXVlc3QiLA0KPiA+ID4g KyAgTCI0MDEgVW5hdXRob3JpemVkIiwNCj4gPiA+ICsgIEwiNDAyIFBheW1lbnQgcmVxdWlyZWQi LA0KPiA+ID4gKyAgTCI0MDMgRm9yYmlkZGVuIiwNCj4gPiA+ICsgIEwiNDA0IE5vdCBGb3VuZCIs DQo+ID4gPiArICBMIjQwNSBNZXRob2Qgbm90IGFsbG93ZWQiLA0KPiA+ID4gKyAgTCI0MDYgTm90 IGFjY2VwdGFibGUiLA0KPiA+ID4gKyAgTCI0MDcgUHJveHkgYXV0aGVudGljYXRpb24gcmVxdWly ZWQiLA0KPiA+ID4gKyAgTCI0MDggUmVxdWVzdCB0aW1lIG91dCIsDQo+ID4gPiArICBMIjQwOSBD b25mbGljdCIsDQo+ID4gPiArICBMIjQxMCBHb25lIiwNCj4gPiA+ICsgIEwiNDExIExlbmd0aCBy ZXF1aXJlZCIsDQo+ID4gPiArICBMIjQxMiBQcmVjb25kaXRpb24gZmFpbGVkIiwNCj4gPiA+ICsg IEwiNDEzIFJlcXVlc3QgZW50aXR5IHRvbyBsYXJnZSIsDQo+ID4gPiArICBMIjQxNCBSZXF1ZXN0 IFVSSSB0byBsYXJnZSIsDQo+ID4gPiArICBMIjQxNSBVbnN1cHBvcnRlZCBtZWRpYSB0eXBlIiwN Cj4gPiA+ICsgIEwiNDE2IFJlcXVlc3RlZCByYW5nZSBub3Qgc2F0aXNmaWVkIiwNCj4gPiA+ICsg IEwiNDE3IEV4cGVjdGF0aW9uIGZhaWxlZCIsDQo+ID4gPiArICBMIjUwMCBJbnRlcm5hbCBzZXJ2 ZXIgZXJyb3IiLA0KPiA+ID4gKyAgTCI1MDEgTm90IGltcGxlbWVudGVkIiwNCj4gPiA+ICsgIEwi NTAyIEJhZCBnYXRld2F5IiwNCj4gPiA+ICsgIEwiNTAzIFNlcnZpY2UgdW5hdmFpbGFibGUiLA0K PiA+ID4gKyAgTCI1MDQgR2F0ZXdheSB0aW1lb3V0IiwNCj4gPiA+ICsgIEwiNTA1IEhUVFAgdmVy c2lvbiBub3Qgc3VwcG9ydGVkIg0KPiA+ID4gK307DQo+ID4gPiArDQo+ID4gPiArLy8gTG9jYWwg RmlsZSBIYW5kbGUNCj4gPiA+ICtTVEFUSUMgU0hFTExfRklMRV9IQU5ETEUgICAgIG1GaWxlSGFu ZGxlID0gTlVMTDsNCj4gPiA+ICsNCj4gPiA+ICsvLyBQYXRoIG9mIHRoZSBsb2NhbCBmaWxlLCBV bmljb2RlIGVuY29kZWQNCj4gPiA+ICtTVEFUSUMgQ09OU1QgQ0hBUjE2ICAgICAgICAgKm1Mb2Nh bEZpbGVQYXRoOw0KPiA+ID4gKw0KPiA+ID4gK1NUQVRJQyBCT09MRUFOIGdSZXF1ZXN0Q2FsbGJh Y2tDb21wbGV0ZSA9IEZBTFNFOw0KPiA+ID4gK1NUQVRJQyBCT09MRUFOIGdSZXNwb25zZUNhbGxi YWNrQ29tcGxldGUgPSBGQUxTRTsNCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgIENsZWFu cyBvZmYgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzIGFuZCB0YWJzLg0KPiA+ID4gKw0KPiA+ ID4gKyAgQHBhcmFtW2luXSBTdHJpbmcgcG9pbnRlciB0byB0aGUgc3RyaW5nIHRvIHRyaW0gdGhl bSBvZmYuDQo+ID4gPiArKiovDQo+ID4gPiArU1RBVElDDQo+ID4gPiArRUZJX1NUQVRVUw0KPiA+ ID4gK1RyaW1TcGFjZXMoDQo+ID4gPiArICBJTiBDSEFSMTYgKipTdHJpbmcNCj4gPiA+ICsgICkN Cj4gPiA+ICt7DQo+ID4gPiArICBBU1NFUlQoU3RyaW5nICE9IE5VTEwpOw0KPiA+ID4gKyAgQVNT RVJUKCpTdHJpbmchPSBOVUxMKTsNCj4gPiA+ICsgIC8vDQo+ID4gPiArICAvLyBSZW1vdmUgYW55 IHNwYWNlcyBhbmQgdGFicyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSAoKlN0cmluZykuDQo+ID4g PiArICAvLw0KPiA+ID4gKyAgd2hpbGUgKCgoKlN0cmluZylbMF0gPT0gTCcgJykgfHwgKCgqU3Ry aW5nKVswXSA9PSBMJ1x0JykpIHsNCj4gPiA+ICsgICAgQ29weU1lbSgoKlN0cmluZyksICgqU3Ry aW5nKSsxLCBTdHJTaXplKCgqU3RyaW5nKSkgLQ0KPiA+IHNpemVvZigoKlN0cmluZylbMF0pKTsN Cj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIC8vDQo+ID4gPiArICAvLyBSZW1vdmUgYW55 IHNwYWNlcyBhbmQgdGFicyBhdCB0aGUgZW5kIG9mIHRoZSAoKlN0cmluZykuDQo+ID4gPiArICAv Lw0KPiA+ID4gKyAgd2hpbGUgKChTdHJMZW4gKCpTdHJpbmcpID4gMCkgJiYgKCgoKlN0cmluZylb U3RyTGVuKCgqU3RyaW5nKSktMV0NCj4gPT0gTCcgJykgfHwNCj4gPiA+ICgoKlN0cmluZylbU3Ry TGVuKCgqU3RyaW5nKSktMV0gPT0gTCdcdCcpKSkgew0KPiA+ID4gKyAgICAoKlN0cmluZylbU3Ry TGVuKCgqU3RyaW5nKSktMV0gPSBDSEFSX05VTEw7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4g PiArICByZXR1cm4gKEVGSV9TVUNDRVNTKTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArDQo+ ID4gPiArLyoNCj4gPiA+ICsgKiBDYWxsYmFja3MgZm9yIHJlcXVlc3QgYW5kIHJlc3BvbnNlLg0K PiA+ID4gKyAqIFdlIGp1c3QgYWNrbm93bGVkZ2UgdGhhdCBvcGVyYXRpb24gaGFzIGNvbXBsZXRl ZCBoZXJlLg0KPiA+ID4gKyAqLw0KPiA+ID4gK1NUQVRJQw0KPiA+ID4gK1ZPSUQNCj4gPiA+ICtF RklBUEkNCj4gPiA+ICtSZXF1ZXN0Q2FsbGJhY2sgKA0KPiA+ID4gKyAgSU4gRUZJX0VWRU5UIEV2 ZW50LA0KPiA+ID4gKyAgSU4gVk9JRCAqQ29udGV4dA0KPiA+ID4gKykNCj4gPiA+ICt7DQo+ID4g PiArICBnUmVxdWVzdENhbGxiYWNrQ29tcGxldGUgPSBUUlVFOw0KPiA+ID4gK30NCj4gPiA+ICsN Cj4gPiA+ICtTVEFUSUMNCj4gPiA+ICtWT0lEDQo+ID4gPiArRUZJQVBJDQo+ID4gPiArUmVzcG9u c2VDYWxsYmFjayAoDQo+ID4gPiArICBJTiBFRklfRVZFTlQgRXZlbnQsDQo+ID4gPiArICBJTiBW T0lEICpDb250ZXh0DQo+ID4gPiArKQ0KPiA+ID4gK3sNCj4gPiA+ICsgIGdSZXNwb25zZUNhbGxi YWNrQ29tcGxldGUgPSBUUlVFOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsNCj4gPiA+ICsv KioNCj4gPiA+ICsgIENoZWNrIGFuZCBjb252ZXJ0IHRoZSBVSU5UMTYgb3B0aW9uIHZhbHVlcyBv ZiB0aGUgJ2h0dHAnIGNvbW1hbmQNCj4gPiA+ICsNCj4gPiA+ICsgIEBwYXJhbVtpbl0gIFZhbHVl U3RyICBWYWx1ZSBhcyBhbiBVbmljb2RlIGVuY29kZWQgc3RyaW5nDQo+ID4gPiArICBAcGFyYW1b b3V0XSBWYWx1ZSAgICAgVUlOVDE2IHZhbHVlDQo+ID4gPiArDQo+ID4gPiArICBAcmV0dXJuICAg ICBUUlVFICAgICAgVGhlIHZhbHVlIHdhcyByZXR1cm5lZC4NCj4gPiA+ICsgIEByZXR1cm4gICAg IEZBTFNFICAgICBBIHBhcnNpbmcgZXJyb3Igb2NjdXJlZC4NCj4gPiA+ICsqKi8NCj4gPiA+ICtT VEFUSUMNCj4gPiA+ICtCT09MRUFODQo+ID4gPiArU3RyaW5nVG9VaW50MTYgKA0KPiA+ID4gKyAg SU4gICBDT05TVCBDSEFSMTYgICpWYWx1ZVN0ciwNCj4gPiA+ICsgIE9VVCAgVUlOVDE2ICAgICAg ICAqVmFsdWUNCj4gPiA+ICsgICk7DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICBHZXQg dGhlIG5hbWUgb2YgdGhlIE5JQy4NCj4gPiA+ICsNCj4gPiA+ICsgIEBwYXJhbVtpbl0gICBDb250 cm9sbGVySGFuZGxlICBUaGUgbmV0d29yayBwaHlzaWNhbCBkZXZpY2UgaGFuZGxlLg0KPiA+ID4g KyAgQHBhcmFtW2luXSAgIE5pY051bWJlciAgICAgICAgIFRoZSBuZXR3b3JrIHBoeXNpY2FsIGRl dmljZSBudW1iZXIuDQo+ID4gPiArICBAcGFyYW1bb3V0XSAgTmljTmFtZSAgICAgICAgICAgQWRk cmVzcyB3aGVyZSB0byBzdG9yZSB0aGUgTklDIG5hbWUuDQo+ID4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVGhlIG1lbW9yeSBhcmVhIGhhcyB0byBiZSBhdCBsZWFzdA0KPiA+ ID4gKw0KPiBJUDRfQ09ORklHMl9JTlRFUkZBQ0VfSU5GT19OQU1FX0xFTkdUSA0KPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBieXRlIHdpZGUuDQo+ID4gPiAr DQo+ID4gPiArICBAcmV0dXJuICBFRklfU1VDQ0VTUyAgVGhlIG5hbWUgb2YgdGhlIE5JQyB3YXMg cmV0dXJuZWQuDQo+ID4gPiArICBAcmV0dXJuICBPdGhlcnMgICAgICAgVGhlIGNyZWF0aW9uIG9m IHRoZSBjaGlsZCBmb3IgdGhlIE1hbmFnZWQNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICBOZXR3b3JrIFNlcnZpY2UgZmFpbGVkIG9yIHRoZSBvcGVuaW5nIG9mDQo+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgdGhlIE1hbmFnZWQgTmV0d29yayBQcm90b2NvbCBmYWlsZWQgb3IN Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICB0aGUgb3BlcmF0aW9uYWwgcGFyYW1ldGVy cyBmb3IgdGhlDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgTWFuYWdlZCBOZXR3b3Jr IFByb3RvY29sIGNvdWxkIG5vdCBiZQ0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIHJl YWQuDQo+ID4gPiArKiovDQo+ID4gPiArU1RBVElDDQo+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4g K0dldE5pY05hbWUgKA0KPiA+ID4gKyAgSU4gICBFRklfSEFORExFICBDb250cm9sbGVySGFuZGxl LA0KPiA+ID4gKyAgSU4gICBVSU5UTiAgICAgICBOaWNOdW1iZXIsDQo+ID4gPiArICBPVVQgIENI QVIxNiAgICAgICpOaWNOYW1lDQo+ID4gPiArICApOw0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ ID4gKyAgQ3JlYXRlIGEgY2hpbGQgZm9yIHRoZSBzZXJ2aWNlIGlkZW50aWZpZWQgYnkgaXRzIHNl cnZpY2UgYmluZGluZw0KPiBwcm90b2NvbA0KPiA+IEdVSUQNCj4gPiA+ICsgIGFuZCBnZXQgZnJv bSB0aGUgY2hpbGQgdGhlIGludGVyZmFjZSBvZiB0aGUgcHJvdG9jb2wgaWRlbnRpZmllZCBieQ0K PiBpdHMNCj4gPiBHVUlELg0KPiA+ID4gKw0KPiA+ID4gKyAgQHBhcmFtW2luXSAgIENvbnRyb2xs ZXJIYW5kbGUgICAgICAgICAgICBDb250cm9sbGVyIGhhbmRsZS4NCj4gPiA+ICsgIEBwYXJhbVtp bl0gICBTZXJ2aWNlQmluZGluZ1Byb3RvY29sR3VpZCAgU2VydmljZSBiaW5kaW5nIHByb3RvY29s DQo+IEdVSUQNCj4gPiBvZg0KPiA+ID4gdGhlDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UgdG8gYmUgY3JlYXRlZC4NCj4gPiA+ICsgIEBw YXJhbVtpbl0gICBQcm90b2NvbEd1aWQgICAgICAgICAgICAgICAgR1VJRCBvZiB0aGUgcHJvdG9j b2wgdG8gYmUNCj4gb3Blbi4NCj4gPiA+ICsgIEBwYXJhbVtvdXRdICBDaGlsZEhhbmRsZSAgICAg ICAgICAgICAgICAgQWRkcmVzcyB3aGVyZSB0aGUgaGFuZGxlcg0KPiBvZiB0aGUNCj4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlZCBjaGlsZCBp cyByZXR1cm5lZC4NCj4gTlVMTCBpcw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm5lZCBpbiBjYXNlIG9mIGVycm9yLg0KPiA+ID4gKyAgQHBh cmFtW291dF0gIEludGVyZmFjZSAgICAgICAgICAgICAgICAgICBBZGRyZXNzIHdoZXJlIGEgcG9p bnRlciB0bw0KPiB0aGUNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcHJvdG9jb2wgaW50ZXJmYWNlIGlzDQo+IHJldHVybmVkIGluDQo+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugb2Ygc3VjY2Vzcy4N Cj4gPiA+ICsNCj4gPiA+ICsgIEByZXR1cm4gIEVGSV9TVUNDRVNTICBUaGUgY2hpbGQgd2FzIGNy ZWF0ZWQgYW5kIHRoZSBwcm90b2NvbA0KPiBvcGVuZWQuDQo+ID4gPiArICBAcmV0dXJuICBPdGhl cnMgICAgICAgRWl0aGVyIHRoZSBjcmVhdGlvbiBvZiB0aGUgY2hpbGQgb3IgdGhlDQo+IG9wZW5p bmcNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgcHJvdG9jb2wgZmFpbGVk Lg0KPiA+ID4gKyoqLw0KPiA+ID4gK1NUQVRJQw0KPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ICtD cmVhdGVTZXJ2aWNlQ2hpbGRBbmRPcGVuUHJvdG9jb2wgKA0KPiA+ID4gKyAgSU4gICBFRklfSEFO RExFICBDb250cm9sbGVySGFuZGxlLA0KPiA+ID4gKyAgSU4gICBFRklfR1VJRCAgICAqU2Vydmlj ZUJpbmRpbmdQcm90b2NvbEd1aWQsDQo+ID4gPiArICBJTiAgIEVGSV9HVUlEICAgICpQcm90b2Nv bEd1aWQsDQo+ID4gPiArICBPVVQgIEVGSV9IQU5ETEUgICpDaGlsZEhhbmRsZSwNCj4gPiA+ICsg IE9VVCAgVk9JRCAgICAgICAgKipJbnRlcmZhY2UNCj4gPiA+ICsgICk7DQo+ID4gPiArDQo+ID4g PiArLyoqDQo+ID4gPiArICBDbG9zZSB0aGUgcHJvdG9jb2wgaWRlbnRpZmllZCBieSBpdHMgR1VJ RCBvbiB0aGUgY2hpbGQgaGFuZGxlIG9mDQo+IHRoZQ0KPiA+IHNlcnZpY2UNCj4gPiA+ICsgIGlk ZW50aWZpZWQgYnkgaXRzIHNlcnZpY2UgYmluZGluZyBwcm90b2NvbCBHVUlELCB0aGVuIGRlc3Ry b3kgdGhlDQo+IGNoaWxkDQo+ID4gPiArICBoYW5kbGUuDQo+ID4gPiArDQo+ID4gPiArICBAcGFy YW1baW5dICBDb250cm9sbGVySGFuZGxlICAgICAgICAgICAgQ29udHJvbGxlciBoYW5kbGUuDQo+ ID4gPiArICBAcGFyYW1baW5dICBTZXJ2aWNlQmluZGluZ1Byb3RvY29sR3VpZCAgU2VydmljZSBi aW5kaW5nIHByb3RvY29sDQo+IEdVSUQNCj4gPiBvZg0KPiA+ID4gdGhlDQo+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZSB0byBiZSBkZXN0cm95 ZWQuDQo+ID4gPiArICBAcGFyYW1baW5dICBQcm90b2NvbEd1aWQgICAgICAgICAgICAgICAgR1VJ RCBvZiB0aGUgcHJvdG9jb2wgdG8gYmUNCj4gY2xvc2VkLg0KPiA+ID4gKyAgQHBhcmFtW2luXSAg Q2hpbGRIYW5kbGUgICAgICAgICAgICAgICAgIEhhbmRsZSBvZiB0aGUgY2hpbGQgdG8gYmUNCj4g ZGVzdHJveWVkLg0KPiA+ID4gKw0KPiA+ID4gKyoqLw0KPiA+ID4gK1NUQVRJQw0KPiA+ID4gK1ZP SUQNCj4gPiA+ICtDbG9zZVByb3RvY29sQW5kRGVzdHJveVNlcnZpY2VDaGlsZCAoDQo+ID4gPiAr ICBJTiAgRUZJX0hBTkRMRSAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiA+ICsgIElOICBFRklfR1VJ RCAgICAqU2VydmljZUJpbmRpbmdQcm90b2NvbEd1aWQsDQo+ID4gPiArICBJTiAgRUZJX0dVSUQg ICAgKlByb3RvY29sR3VpZCwNCj4gPiA+ICsgIElOICBFRklfSEFORExFICBDaGlsZEhhbmRsZQ0K PiA+ID4gKyAgKTsNCj4gPiA+ICsNCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgIFdvcmtl ciBmdW5jdGlvbiB0aGF0IGRvd25sb2FkIHRoZSBkYXRhIG9mIGEgZmlsZSBmcm9tIGEgSFRUUCBz ZXJ2ZXINCj4gPiBnaXZlbg0KPiA+ID4gKyAgdGhlIHBhdGggb2YgdGhlIGZpbGUgYW5kIGl0cyBz aXplLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHBhcmFtW2luXSAgIENvbnRleHQgICAgICAgICAgIEEg cG9pbnRlciB0byB0aGUgZG93bmxvYWQgY29udGV4dC4NCj4gPiA+ICsNCj4gPiA+ICsgIEByZXR2 YWwgIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgZmlsZSB3YXMgZG93bmxvYWRlZC4NCj4gPiA+ ICsgIEByZXR2YWwgIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBBIG1lbW9yeSBhbGxvY2F0aW9uIGZh aWxlZC4NCj4gPiA+ICsgIEByZXR2YWwgIE90aGVycyAgICAgICAgICAgICAgICBUaGUgZG93bmxv YWRpbmcgb2YgdGhlIGZpbGUNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmcm9tIHRoZSBzZXJ2ZXIgZmFpbGVkLg0KPiA+ID4gKw0KPiA+ID4gKyoqLw0KPiA+ID4gK1NU QVRJQw0KPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ICtEb3dubG9hZEZpbGUgKA0KPiA+ID4gKyAg SU4gICBET1dOTE9BRF9DT05URVhUICAgKkNvbnRleHQNCj4gPiA+ICsgICk7DQo+ID4gPiArDQo+ ID4gPiArU1RBVElDIENPTlNUIFNIRUxMX1BBUkFNX0lURU0gUGFyYW1MaXN0W10gPSB7DQo+ID4g PiArICB7TCItaSIsIFR5cGVWYWx1ZX0sDQo+ID4gPiArICB7TCItbCIsIFR5cGVWYWx1ZX0sDQo+ ID4gPiArICB7TCItcCIsIFR5cGVWYWx1ZX0sDQo+ID4gPiArICB7TCItcyIsIFR5cGVWYWx1ZX0s DQo+ID4gPiArICB7TCItdCIsIFR5cGVWYWx1ZX0sDQo+ID4gPiArICB7TlVMTCAsIFR5cGVNYXh9 DQo+ID4gPiArICB9Ow0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAgRnVuY3Rpb24gZm9y ICdodHRwJyBjb21tYW5kLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHBhcmFtW2luXSBJbWFnZUhhbmRs ZSAgSGFuZGxlIHRvIHRoZSBJbWFnZSAoTlVMTCBpZiBJbnRlcm5hbCkuDQo+ID4gPiArICBAcGFy YW1baW5dIFN5c3RlbVRhYmxlICBQb2ludGVyIHRvIHRoZSBTeXN0ZW0gVGFibGUgKE5VTEwgaWYN Cj4gSW50ZXJuYWwpLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHVybiAgU0hFTExfU1VDQ0VTUyAg ICAgICAgICAgIFRoZSAnaHR0cCcgY29tbWFuZCBjb21wbGV0ZWQNCj4gPiBzdWNjZXNzZnVsbHku DQo+ID4gPiArICBAcmV0dXJuICBTSEVMTF9BQk9SVEVEICAgICAgICAgICAgVGhlIFNoZWxsIExp YnJhcnkgaW5pdGlhbGl6YXRpb24NCj4gZmFpbGVkLg0KPiA+ID4gKyAgQHJldHVybiAgU0hFTExf SU5WQUxJRF9QQVJBTUVURVIgIEF0IGxlYXN0IG9uZSBvZiB0aGUgY29tbWFuZCdzDQo+ID4gPiBh cmd1bWVudHMgaXMNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu b3QgdmFsaWQuDQo+ID4gPiArICBAcmV0dXJuICBTSEVMTF9PVVRfT0ZfUkVTT1VSQ0VTICAgQSBt ZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuDQo+ID4gPiArICBAcmV0dXJuICBTSEVMTF9OT1RfRk9V TkQgICAgICAgICAgTmV0d29yayBJbnRlcmZhY2UgQ2FyZCBub3QgZm91bmQuDQo+ID4gPiArICBA cmV0dXJuICBTSEVMTF9VTlNVUFBPUlRFRCAgICAgICAgQ29tbWFuZCB3YXMgdmFsaWQsIGJ1dCB0 aGUgc2VydmVyDQo+ID4gPiByZXR1cm5lZA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGEgc3RhdHVzIGNvZGUgaW5kaWNhdGluZyBzb21lDQo+IGVycm9yLg0KPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4YW1pbmUgdGhlIGZpbGUg cmVxdWVzdGVkIGZvcg0KPiBlcnJvciBib2R5Lg0KPiA+ID4gKw0KPiA+ID4gKyoqLw0KPiA+ID4g K1NIRUxMX1NUQVRVUw0KPiA+ID4gK1J1bkh0dHAgKA0KPiA+ID4gKyAgSU4gRUZJX0hBTkRMRSAg ICAgICAgSW1hZ2VIYW5kbGUsDQo+ID4gPiArICBJTiBFRklfU1lTVEVNX1RBQkxFICAqU3lzdGVt VGFibGUNCj4gPiA+ICsgICkNCj4gPiA+ICt7DQo+ID4gPiArICBFRklfU1RBVFVTICAgICAgICAg ICAgICBTdGF0dXM7DQo+ID4gPiArICBMSVNUX0VOVFJZICAgICAgICAgICAgICAqQ2hlY2tQYWNr YWdlOw0KPiA+ID4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgKlByb2JsZW1QYXJhbTsNCj4g PiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgIFBhcmFtQ291bnQ7DQo+ID4gPiArICBDT05T VCBDSEFSMTYgICAgICAgICAgICAqVXNlck5pY05hbWU7DQo+ID4gPiArICBCT09MRUFOICAgICAg ICAgICAgICAgICBOaWNGb3VuZDsNCj4gPiA+ICsgIENPTlNUIENIQVIxNiAgICAgICAgICAgICpW YWx1ZVN0cjsNCj4gPiA+ICsgIENPTlNUIENIQVIxNiAgICAgICAgICAgICpSZW1vdGVGaWxlUGF0 aDsNCj4gPiA+ICsgIENPTlNUIENIQVIxNiAgICAgICAgICAgICpXYWxrZXI7DQo+ID4gPiArICBD T05TVCBDSEFSMTYgICAgICAgICAgICAqUHJveHlTZXJ2ZXJBZGRyOw0KPiA+ID4gKyAgRUZJX0hU VFBfQ09ORklHX0RBVEEgICAgSHR0cENvbmZpZ0RhdGE7DQo+ID4gPiArICBFRklfSFRUUHY0X0FD Q0VTU19QT0lOVCBJUHY0Tm9kZTsNCj4gPiA+ICsgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICpI YW5kbGVzOw0KPiA+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgSGFuZGxlQ291bnQ7DQo+ ID4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICBOaWNOdW1iZXI7DQo+ID4gPiArICBVSU5U TiAgICAgICAgICAgICAgICAgICBJbml0aWFsU2l6ZTsNCj4gPiA+ICsgIENIQVIxNg0KPiA+ID4g TmljTmFtZVtJUDRfQ09ORklHMl9JTlRFUkZBQ0VfSU5GT19OQU1FX0xFTkdUSF07DQo+ID4gPiAr ICBFRklfSEFORExFICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlOw0KPiA+ID4gKyAgRUZJ X0hBTkRMRSAgICAgICAgICAgICAgSHR0cENoaWxkSGFuZGxlOw0KPiA+ID4gKyAgRE9XTkxPQURf Q09OVEVYVCAgICAgICAgQ29udGV4dDsNCj4gPiA+ICsNCj4gPiA+ICsgIFByb2JsZW1QYXJhbSAg ICAgICAgPSBOVUxMOw0KPiA+ID4gKyAgTmljRm91bmQgICAgICAgICAgICA9IEZBTFNFOw0KPiA+ ID4gKyAgSGFuZGxlcyAgICAgICAgICAgICA9IE5VTEw7DQo+ID4gPiArDQo+ID4gPiArICAvLw0K PiA+ID4gKyAgLy8gSW5pdGlhbGl6ZSB0aGUgU2hlbGwgbGlicmFyeSAod2UgbXVzdCBiZSBpbiBu b24tYXV0by1pbml0Li4uKQ0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIFN0YXR1cyA9IFNoZWxsSW5p dGlhbGl6ZSAoKTsNCj4gPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiA+ICsg ICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gPiA+ICsgICAgcmV0dXJuIFNIRUxMX0FC T1JURUQ7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBaZXJvTWVtICgmQ29udGV4dCwg c2l6ZW9mIChDb250ZXh0KSk7DQo+ID4gPiArDQo+ID4gPiArICAvLw0KPiA+ID4gKyAgLy8gUGFy c2UgdGhlIGNvbW1hbmQgbGluZS4NCj4gPiA+ICsgIC8vDQo+ID4gPiArICBTdGF0dXMgPSBTaGVs bENvbW1hbmRMaW5lUGFyc2UgKFBhcmFtTGlzdCwgJkNoZWNrUGFja2FnZSwNCj4gPiA+ICZQcm9i bGVtUGFyYW0sIFRSVUUpOw0KPiA+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ ID4gKyAgICBpZiAoKFN0YXR1cyA9PSBFRklfVk9MVU1FX0NPUlJVUFRFRCkgJiYNCj4gPiA+ICsg ICAgICAgIChQcm9ibGVtUGFyYW0gIT0gTlVMTCkgKSB7DQo+ID4gPiArICAgICAgU2hlbGxQcmlu dEhpaUV4ICgNCj4gPiA+ICsgICAgICAgIC0xLCAtMSwgTlVMTCwgU1RSSU5HX1RPS0VOIChTVFJf R0VOX1BST0JMRU0pLCBtSHR0cEhpaUhhbmRsZSwNCj4gPiA+ICsgICAgICAgIEhUVFBfQVBQX05B TUUsIFByb2JsZW1QYXJhbQ0KPiA+ID4gKyAgICAgICAgKTsNCj4gPiA+ICsgICAgICBTSEVMTF9G UkVFX05PTl9OVUxMIChQcm9ibGVtUGFyYW0pOw0KPiA+ID4gKyAgICB9IGVsc2Ugew0KPiA+ID4g KyAgICAgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ID4gKyAgICB9DQo+ID4gPiArICAgIGdvdG8gRXJy b3I7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICAvLw0KPiA+ID4gKyAgLy8gQ2hlY2sg dGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzDQo+ID4gPiArICAvLw0KPiA+ID4gKyAgU3RhdHVzID0g RUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ID4gKw0KPiA+ID4gKyAgUGFyYW1Db3VudCA9IFNo ZWxsQ29tbWFuZExpbmVHZXRDb3VudCAoQ2hlY2tQYWNrYWdlKTsNCj4gPiA+ICsgIGlmIChQYXJh bUNvdW50ID4gNCkgew0KPiA+ID4gKyAgICBTaGVsbFByaW50SGlpRXggKA0KPiA+ID4gKyAgICAg IC0xLCAtMSwgTlVMTCwgU1RSSU5HX1RPS0VOIChTVFJfR0VOX1RPT19NQU5ZKSwNCj4gPiA+ICsg ICAgICBtSHR0cEhpaUhhbmRsZSwgSFRUUF9BUFBfTkFNRQ0KPiA+ID4gKyAgICAgICk7DQo+ID4g PiArICAgIGdvdG8gRXJyb3I7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBpZiAoUGFy YW1Db3VudCA8IDMpIHsNCj4gPiA+ICsgICAgU2hlbGxQcmludEhpaUV4ICgNCj4gPiA+ICsgICAg ICAtMSwgLTEsIE5VTEwsIFNUUklOR19UT0tFTiAoU1RSX0dFTl9UT09fRkVXKSwNCj4gPiA+ICsg ICAgICBtSHR0cEhpaUhhbmRsZSwgSFRUUF9BUFBfTkFNRQ0KPiA+ID4gKyAgICAgICk7DQo+ID4g PiArICAgIGdvdG8gRXJyb3I7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBaZXJvTWVt ICgmSHR0cENvbmZpZ0RhdGEsIHNpemVvZiAoSHR0cENvbmZpZ0RhdGEpKTsNCj4gPiA+ICsgIFpl cm9NZW0gKCZJUHY0Tm9kZSwgc2l6ZW9mIChJUHY0Tm9kZSkpOw0KPiA+ID4gKyAgSVB2NE5vZGUu VXNlRGVmYXVsdEFkZHJlc3MgPSBUUlVFOw0KPiA+ID4gKw0KPiA+ID4gKyAgSHR0cENvbmZpZ0Rh dGEuSHR0cFZlcnNpb24gPSBIdHRwVmVyc2lvbjExOw0KPiA+ID4gKyAgSHR0cENvbmZpZ0RhdGEu QWNjZXNzUG9pbnQuSVB2NE5vZGUgPSAmSVB2NE5vZGU7DQo+ID4gPiArDQo+ID4gPiArICAvLw0K PiA+ID4gKyAgLy8gR2V0IHRoZSBob3N0IGFkZHJlc3MgKG5vdCBuZWNlc3NhcmlseSBJUHY0IGZv cm1hdCkNCj4gPiA+ICsgIC8vDQo+ID4gPiArICBWYWx1ZVN0ciA9IFNoZWxsQ29tbWFuZExpbmVH ZXRSYXdWYWx1ZSAoQ2hlY2tQYWNrYWdlLCAxKTsNCj4gPiA+ICsgIGlmICghVmFsdWVTdHIpIHsN Cj4gPiA+ICsgICAgU2hlbGxQcmludEhpaUV4ICgNCj4gPiA+ICsgICAgICAtMSwgLTEsIE5VTEws IFNUUklOR19UT0tFTiAoU1RSX0dFTl9QQVJBTV9JTlYpLA0KPiA+IG1IdHRwSGlpSGFuZGxlLA0K PiA+ID4gKyAgICAgIEhUVFBfQVBQX05BTUUsIFZhbHVlU3RyDQo+ID4gPiArICAgICAgKTsNCj4g PiA+ICsgICAgZ290byBFcnJvcjsNCj4gPiA+ICsgIH0gZWxzZSB7DQo+ID4gPiArICAgIFVJTlRO IFN0YXJ0U2l6ZTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgU3RhcnRTaXplID0gMDsNCj4gPiA+ICsg ICAgaWYgKCFTdHJTdHIgKFZhbHVlU3RyLCBMIjovLyIpKSB7DQo+ID4gPiArICAgICAgQ29udGV4 dC5TZXJ2ZXJBZGRyQW5kUHJvdG8gPSBTdHJuQ2F0R3JvdyAoDQo+ID4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZDb250ZXh0LlNlcnZlckFkZHJBbmRQcm90bywNCj4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlN0YXJ0U2l6ZSwNCj4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVGQVVMVF9IVFRQX1BS T1RPLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJMZW4g KERFRkFVTFRfSFRUUF9QUk9UTykNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsNCj4gPiA+ICsgICAgICBDb250ZXh0LlNlcnZlckFkZHJBbmRQcm90byA9IFN0 cm5DYXRHcm93ICgNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JkNvbnRleHQuU2VydmVyQWRkckFuZFByb3RvLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmU3RhcnRTaXplLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBMIjovLyIsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFN0ckxlbiAoTCI6Ly8iKQ0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOw0KPiA+ID4gKyAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgIENv bnRleHQuU2VydmVyQWRkckFuZFByb3RvID0gU3RybkNhdEdyb3cgKA0KPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJkNvbnRleHQuU2VydmVyQWRkckFuZFByb3RvLA0K PiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlN0YXJ0U2l6ZSwNCj4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlU3RyLA0KPiA+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyTGVuIChWYWx1ZVN0cikNCj4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gPiArICAgIGlm ICghQ29udGV4dC5TZXJ2ZXJBZGRyQW5kUHJvdG8pIHsNCj4gPiA+ICsgICAgICBTdGF0dXMgPSBF RklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiA+ICsgICAgICBnb3RvIEVycm9yOw0KPiA+ID4gKyAg ICB9DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBSZW1vdGVGaWxlUGF0aCA9IFNoZWxs Q29tbWFuZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQYWNrYWdlLCAyKTsNCj4gPiA+ICsgIEFTU0VS VCAoUmVtb3RlRmlsZVBhdGggIT0gTlVMTCk7DQo+ID4gPiArICBpZiAoUmVtb3RlRmlsZVBhdGgp IHsNCj4gPiA+ICsgICAgVHJpbVNwYWNlcyAoKENIQVIxNiAqKikmUmVtb3RlRmlsZVBhdGgpOw0K PiA+ID4gKyAgfSBlbHNlIHsNCj4gPiA+ICsgICAgU3RhdHVzID0gRUZJX0lOVkFMSURfUEFSQU1F VEVSOw0KPiA+ID4gKyAgICBnb3RvIEVycm9yOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4g KyAgaWYgKFBhcmFtQ291bnQgPT0gNCkgew0KPiA+ID4gKyAgICBtTG9jYWxGaWxlUGF0aCA9IFNo ZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQYWNrYWdlLCAzKTsNCj4gPiA+ICsgIH0g ZWxzZSB7DQo+ID4gPiArICAgIFdhbGtlciA9IFJlbW90ZUZpbGVQYXRoICsgU3RyTGVuIChSZW1v dGVGaWxlUGF0aCk7DQo+ID4gPiArICAgIHdoaWxlICgoLS1XYWxrZXIpID49IFJlbW90ZUZpbGVQ YXRoKSB7DQo+ID4gPiArICAgICAgaWYgKCgqV2Fsa2VyID09IEwnXFwnKSB8fA0KPiA+ID4gKyAg ICAgICAgICAoKldhbGtlciA9PSBMJy8nICkgICAgKSB7DQo+ID4gPiArICAgICAgICBicmVhazsN Cj4gPiA+ICsgICAgICB9DQo+ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgbUxvY2Fs RmlsZVBhdGggPSBXYWxrZXIgKyAxOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgaWYg KCFTdHJMZW4gKG1Mb2NhbEZpbGVQYXRoKSkgew0KPiA+ID4gKyAgICBtTG9jYWxGaWxlUGF0aCA9 IERFRkFVTFRfSFRNTF9GSUxFOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgSW5pdGlh bFNpemUgPSAwOw0KPiA+ID4gKyAgQ29udGV4dC5VUkkgPSBTdHJuQ2F0R3JvdyAoDQo+ID4gPiAr ICAgICAgICAgICAgICAgICAgJkNvbnRleHQuVVJJLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAg ICZJbml0aWFsU2l6ZSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICBSZW1vdGVGaWxlUGF0aCwN Cj4gPiA+ICsgICAgICAgICAgICAgICAgICBTdHJMZW4gKFJlbW90ZUZpbGVQYXRoKQ0KPiA+ID4g KyAgICAgICAgICAgICAgICAgICk7DQo+ID4gPiArICBpZiAoIUNvbnRleHQuVVJJKSB7DQo+ID4g PiArICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ID4gKyAgICBnb3RvIEVy cm9yOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIC8vIEdldCB0 aGUgbmFtZSBvZiB0aGUgTmV0d29yayBJbnRlcmZhY2UgQ2FyZCB0byBiZSB1c2VkIGlmIGFueS4N Cj4gPiA+ICsgIC8vDQo+ID4gPiArICBVc2VyTmljTmFtZSA9IFNoZWxsQ29tbWFuZExpbmVHZXRW YWx1ZSAoQ2hlY2tQYWNrYWdlLCBMIi1pIik7DQo+ID4gPiArDQo+ID4gPiArICBWYWx1ZVN0ciA9 IFNoZWxsQ29tbWFuZExpbmVHZXRWYWx1ZSAoQ2hlY2tQYWNrYWdlLCBMIi1sIik7DQo+ID4gPiAr ICBpZiAoVmFsdWVTdHIgIT0gTlVMTCkgew0KPiA+ID4gKyAgICBpZiAoIVN0cmluZ1RvVWludDE2 ICgNCj4gPiA+ICsgICAgICAgICBWYWx1ZVN0ciwNCj4gPiA+ICsgICAgICAgICAmSHR0cENvbmZp Z0RhdGEuQWNjZXNzUG9pbnQuSVB2NE5vZGUtPkxvY2FsUG9ydA0KPiA+ID4gKyAgICAgICApDQo+ ID4gPiArICAgICApIHsNCj4gPiA+ICsgICAgICBnb3RvIEVycm9yOw0KPiA+ID4gKyAgICB9DQo+ ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICAvLyBJcyBwcm94eSBzZXJ2ZXIgdXNlZD8NCj4g PiA+ICsgIFByb3h5U2VydmVyQWRkciA9IFNoZWxsQ29tbWFuZExpbmVHZXRWYWx1ZSAoQ2hlY2tQ YWNrYWdlLCBMIi1wIik7DQo+ID4gPiArICBpZiAoUHJveHlTZXJ2ZXJBZGRyKSB7DQo+ID4gPiAr ICAgIFVJTlROIFN0cmluZ1NpemU7DQo+ID4gPiArDQo+ID4gPiArICAgIFN0cmluZ1NpemUgPSBT dHJMZW4gKFByb3h5U2VydmVyQWRkcikgKyAxOw0KPiA+ID4gKyAgICAgIENvbnRleHQuUHJveHlT ZXJ2ZXJBZGRyID0gQWxsb2NhdGVQb29sIChTdHJpbmdTaXplKTsNCj4gPiA+ICsgICAgICBpZiAo IUNvbnRleHQuUHJveHlTZXJ2ZXJBZGRyKSB7DQo+ID4gPiArICAgICAgICBTdGF0dXMgPSBFRklf T1VUX09GX1JFU09VUkNFUzsNCj4gPiA+ICsgICAgICAgIGdvdG8gRXJyb3I7DQo+ID4gPiArICAg ICAgfQ0KPiA+ID4gKyAgICAgIFVuaWNvZGVTdHJUb0FzY2lpU3RyUyAoDQo+ID4gPiArICAgICAg ICBQcm94eVNlcnZlckFkZHIsDQo+ID4gPiArICAgICAgICBDb250ZXh0LlByb3h5U2VydmVyQWRk ciwNCj4gPiA+ICsgICAgICAgIFN0cmluZ1NpemUNCj4gPiA+ICsgICAgICAgICk7DQo+ID4gPiAr ICB9DQo+ID4gPiArDQo+ID4gPiArICBDb250ZXh0LkJ1ZmZlclNpemUgPSBERUZBVUxUX0JVRl9T SVpFOw0KPiA+ID4gKw0KPiA+ID4gKyAgLy8gQnkgZGVmYXVsdCwgdGhlIGJ1ZmZlciBzaXplIGlz IDFNLiBUaGlzIGNhbiBiZSBjaGFuZ2VkIHdpdGggLXMNCj4gPiBwYXJhbWV0ZXIuDQo+ID4gPiAr ICBWYWx1ZVN0ciA9IFNoZWxsQ29tbWFuZExpbmVHZXRWYWx1ZSAoQ2hlY2tQYWNrYWdlLCBMIi1z Iik7DQo+ID4gPiArICAgIGlmIChWYWx1ZVN0ciAhPSBOVUxMKSB7DQo+ID4gPiArICAgICAgQ29u dGV4dC5CdWZmZXJTaXplID0gU2hlbGxTdHJUb1VpbnRuIChWYWx1ZVN0cik7DQo+ID4gPiArICAg ICAgaWYgKCFDb250ZXh0LkJ1ZmZlclNpemUgfHwgQ29udGV4dC5CdWZmZXJTaXplID4gTUFYX0JV Rl9TSVpFKSB7DQo+ID4gPiArICAgICAgICBTaGVsbFByaW50SGlpRXggKA0KPiA+ID4gKyAgICAg ICAgICAtMSwgLTEsIE5VTEwsIFNUUklOR19UT0tFTiAoU1RSX0dFTl9QQVJBTV9JTlYpLA0KPiA+ ID4gKyAgICAgICAgICBtSHR0cEhpaUhhbmRsZSwgSFRUUF9BUFBfTkFNRSwgVmFsdWVTdHINCj4g PiA+ICsgICAgICAgICAgKTsNCj4gPiA+ICsgICAgICAgIGdvdG8gRXJyb3I7DQo+ID4gPiArICAg ICAgfQ0KPiA+ID4gKyAgICB9DQo+ID4gPiArDQo+ID4gPiArICBWYWx1ZVN0ciA9IFNoZWxsQ29t bWFuZExpbmVHZXRWYWx1ZSAoQ2hlY2tQYWNrYWdlLCBMIi10Iik7DQo+ID4gPiArICBpZiAoVmFs dWVTdHIgIT0gTlVMTCkgew0KPiA+ID4gKyAgICBIdHRwQ29uZmlnRGF0YS5UaW1lT3V0TWlsbGlz ZWMgPSBTaGVsbFN0clRvVWludG4gKFZhbHVlU3RyKTsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4g PiA+ICsgIC8vDQo+ID4gPiArICAvLyBMb2NhdGUgYWxsIEhUVFAgU2VydmljZSBCaW5kaW5nIHBy b3RvY29scw0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIFN0YXR1cyA9IGdCUy0+TG9jYXRlSGFuZGxl QnVmZmVyICgNCj4gPiA+ICsgICAgICAgICAgICAgQnlQcm90b2NvbCwNCj4gPiA+ICsgICAgICAg ICAgICAgJmdFZmlNYW5hZ2VkTmV0d29ya1NlcnZpY2VCaW5kaW5nUHJvdG9jb2xHdWlkLA0KPiA+ ID4gKyAgICAgICAgICAgICBOVUxMLA0KPiA+ID4gKyAgICAgICAgICAgICAmSGFuZGxlQ291bnQs DQo+ID4gPiArICAgICAgICAgICAgICZIYW5kbGVzDQo+ID4gPiArICAgICAgICAgICAgICk7DQo+ ID4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpIHx8IChIYW5kbGVDb3VudCA9PSAwKSkgew0K PiA+ID4gKyAgICBTaGVsbFByaW50SGlpRXggKA0KPiA+ID4gKyAgICAgIC0xLCAtMSwgTlVMTCwg U1RSSU5HX1RPS0VOIChTVFJfSFRUUF9FUlJfTk9fTklDKSwNCj4gPiBtSHR0cEhpaUhhbmRsZQ0K PiA+ID4gKyAgICAgICk7DQo+ID4gPiArICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ ID4gPiArICAgICAgU3RhdHVzID0gRUZJX05PVF9GT1VORDsNCj4gPiA+ICsgICAgfQ0KPiA+ID4g KyAgICBnb3RvIEVycm9yOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgU3RhdHVzID0g RUZJX05PVF9GT1VORDsNCj4gPiA+ICsNCj4gPiA+ICsgIGZvciAoTmljTnVtYmVyID0gMDsNCj4g PiA+ICsgICAgICAgKE5pY051bWJlciA8IEhhbmRsZUNvdW50KSAmJiAoU3RhdHVzICE9IEVGSV9T VUNDRVNTKTsNCj4gPiA+ICsgICAgICAgTmljTnVtYmVyKyspIHsNCj4gPiA+ICsgICAgQ29udHJv bGxlckhhbmRsZSA9IEhhbmRsZXNbTmljTnVtYmVyXTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgU3Rh dHVzID0gR2V0TmljTmFtZSAoQ29udHJvbGxlckhhbmRsZSwgTmljTnVtYmVyLCBOaWNOYW1lKTsN Cj4gPiA+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ID4gKyAgICAgIFNoZWxs UHJpbnRIaWlFeCAoDQo+ID4gPiArICAgICAgICAtMSwgLTEsIE5VTEwsIFNUUklOR19UT0tFTiAo U1RSX0hUVFBfRVJSX05JQ19OQU1FKSwNCj4gPiA+ICsgICAgICAgIG1IdHRwSGlpSGFuZGxlLCBO aWNOdW1iZXIsIFN0YXR1cw0KPiA+ID4gKyAgICAgICk7DQo+ID4gPiArICAgICAgY29udGludWU7 DQo+ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgaWYgKFVzZXJOaWNOYW1lICE9IE5V TEwpIHsNCj4gPiA+ICsgICAgICBpZiAoU3RyQ21wIChOaWNOYW1lLCBVc2VyTmljTmFtZSkgIT0g MCkgew0KPiA+ID4gKyAgICAgICAgY29udGludWU7DQo+ID4gPiArICAgICAgfQ0KPiA+ID4gKyAg ICAgIE5pY0ZvdW5kID0gVFJVRTsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICBT dGF0dXMgPSBDcmVhdGVTZXJ2aWNlQ2hpbGRBbmRPcGVuUHJvdG9jb2wgKA0KPiA+ID4gKyAgICAg ICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ID4gPiArICAgICAgICAgICAgICAgJmdFZmlI dHRwU2VydmljZUJpbmRpbmdQcm90b2NvbEd1aWQsDQo+ID4gPiArICAgICAgICAgICAgICAgJmdF ZmlIdHRwUHJvdG9jb2xHdWlkLA0KPiA+ID4gKyAgICAgICAgICAgICAgICZIdHRwQ2hpbGRIYW5k bGUsDQo+ID4gPiArICAgICAgICAgICAgICAgKFZPSUQqKikmQ29udGV4dC5IdHRwDQo+ID4gPiAr ICAgICAgICAgICAgICk7DQo+ID4gPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g PiA+ICsgICAgICBTaGVsbFByaW50SGlpRXggKA0KPiA+ID4gKyAgICAgICAgLTEsIC0xLCBOVUxM LCBTVFJJTkdfVE9LRU4gKFNUUl9IVFRQX0VSUl9PUEVOX1BST1RPQ09MKSwNCj4gPiA+ICsgICAg ICAgIG1IdHRwSGlpSGFuZGxlLCBOaWNOYW1lLCBTdGF0dXMNCj4gPiA+ICsgICAgICAgICk7DQo+ ID4gPiArICAgICAgY29udGludWU7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAg U3RhdHVzID0gQ29udGV4dC5IdHRwLT5Db25maWd1cmUgKENvbnRleHQuSHR0cCwgJkh0dHBDb25m aWdEYXRhKTsNCj4gPiA+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ID4gKyAg ICAgIFNoZWxsUHJpbnRIaWlFeCAoDQo+ID4gPiArICAgICAgICAtMSwgLTEsIE5VTEwsIFNUUklO R19UT0tFTiAoU1RSX0hUVFBfRVJSX0NPTkZJR1VSRSksDQo+ID4gPiArICAgICAgICBtSHR0cEhp aUhhbmRsZSwgTmljTmFtZSwgU3RhdHVzDQo+ID4gPiArICAgICAgICApOw0KPiA+ID4gKyAgICAg IGdvdG8gTmV4dEhhbmRsZTsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICBTdGF0 dXMgPSBEb3dubG9hZEZpbGUgKCZDb250ZXh0KTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgU2hlbGxQ cmludEhpaUV4ICgNCj4gPiA+ICsgICAgICAtMSwgLTEsIE5VTEwsIFNUUklOR19UT0tFTiAoU1RS X0dFTl9DUkxGKSwgbUh0dHBIaWlIYW5kbGUNCj4gPiA+ICsgICAgICApOw0KPiA+ID4gKw0KPiA+ ID4gKyAgICBDbG9zZVByb3RvY29sQW5kRGVzdHJveVNlcnZpY2VDaGlsZCAoDQo+ID4gPiArICAg ICAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiA+ICsgICAgICAmZ0VmaUh0dHBTZXJ2aWNlQmluZGlu Z1Byb3RvY29sR3VpZCwNCj4gPiA+ICsgICAgICAmZ0VmaUh0dHBQcm90b2NvbEd1aWQsDQo+ID4g PiArICAgICAgSHR0cENoaWxkSGFuZGxlDQo+ID4gPiArICAgICAgKTsNCj4gPiA+ICsNCj4gPiA+ ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ID4gKyAgICAgIFNoZWxsUHJpbnRI aWlFeCAoDQo+ID4gPiArICAgICAgICAtMSwgLTEsIE5VTEwsIFNUUklOR19UT0tFTiAoU1RSX0hU VFBfRVJSX0RPV05MT0FEKSwNCj4gPiA+ICsgICAgICAgIG1IdHRwSGlpSGFuZGxlLCBSZW1vdGVG aWxlUGF0aCwgTmljTmFtZSwgU3RhdHVzDQo+ID4gPiArICAgICAgICApOw0KPiA+ID4gKyAgICAg IC8vIElmIGEgdXNlciBhYm9ydGVkIHRoZSBvcGVyYXRpb24sIGRvIG5vdCB0cnkgYW5vdGhlcg0K PiBjb250cm9sbGVyLg0KPiA+ID4gKyAgICAgIGlmIChTdGF0dXMgPT0gRUZJX0FCT1JURUQpIHsN Cj4gPiA+ICsgICAgICAgIGdvdG8gRXJyb3I7DQo+ID4gPiArICAgICAgfQ0KPiA+ID4gKw0KPiA+ ID4gKyAgICAgIGdvdG8gTmV4dEhhbmRsZTsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4g KyAgICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gPiA+ICsNCj4gPiA+ICtOZXh0SGFuZGxlOg0K PiA+ID4gKyAgICBpZiAoU3RhdHVzID09IEVGSV9IVFRQX0VSUk9SKSB7DQo+ID4gPiArICAgICAg Z290byBFcnJvcjsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAg aWYgKChVc2VyTmljTmFtZSAhPSBOVUxMKSAmJiAoIU5pY0ZvdW5kKSkgew0KPiA+ID4gKyAgICBT aGVsbFByaW50SGlpRXggKA0KPiA+ID4gKyAgICAgIC0xLCAtMSwgTlVMTCwgU1RSSU5HX1RPS0VO IChTVFJfSFRUUF9FUlJfTklDX05PVF9GT1VORCksDQo+ID4gPiArICAgICAgbUh0dHBIaWlIYW5k bGUsIFVzZXJOaWNOYW1lDQo+ID4gPiArICAgICAgKTsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4g PiA+ICtFcnJvcjoNCj4gPiA+ICsgIFNoZWxsQ29tbWFuZExpbmVGcmVlVmFyTGlzdCAoQ2hlY2tQ YWNrYWdlKTsNCj4gPiA+ICsgIFNIRUxMX0ZSRUVfTk9OX05VTEwgKEhhbmRsZXMpOw0KPiA+ID4g KyAgU0hFTExfRlJFRV9OT05fTlVMTCAoQ29udGV4dC5Qcm94eVNlcnZlckFkZHIpOw0KPiA+ID4g KyAgU0hFTExfRlJFRV9OT05fTlVMTCAoQ29udGV4dC5TZXJ2ZXJBZGRyQW5kUHJvdG8pOw0KPiA+ ID4gKyAgU0hFTExfRlJFRV9OT05fTlVMTCAoQ29udGV4dC5VUkkpOw0KPiA+ID4gKw0KPiA+ID4g KyAgcmV0dXJuIFN0YXR1cyAmIH5NQVhfQklUOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsv KioNCj4gPiA+ICsgIENoZWNrIGFuZCBjb252ZXJ0IHRoZSBVSU5UMTYgb3B0aW9uIHZhbHVlcyBv ZiB0aGUgJ2h0dHAnIGNvbW1hbmQNCj4gPiA+ICsNCj4gPiA+ICsgIEBwYXJhbVtpbl0gIFZhbHVl U3RyICBWYWx1ZSBhcyBhbiBVbmljb2RlIGVuY29kZWQgc3RyaW5nDQo+ID4gPiArICBAcGFyYW1b b3V0XSBWYWx1ZSAgICAgVUlOVDE2IHZhbHVlDQo+ID4gPiArDQo+ID4gPiArICBAcmV0dXJuICAg ICBUUlVFICAgICAgVGhlIHZhbHVlIHdhcyByZXR1cm5lZC4NCj4gPiA+ICsgIEByZXR1cm4gICAg IEZBTFNFICAgICBBIHBhcnNpbmcgZXJyb3Igb2NjdXJlZC4NCj4gPiA+ICsqKi8NCj4gPiA+ICtT VEFUSUMNCj4gPiA+ICtCT09MRUFODQo+ID4gPiArU3RyaW5nVG9VaW50MTYgKA0KPiA+ID4gKyAg SU4gICBDT05TVCBDSEFSMTYgICpWYWx1ZVN0ciwNCj4gPiA+ICsgIE9VVCAgVUlOVDE2ICAgICAg ICAqVmFsdWUNCj4gPiA+ICsgICkNCj4gPiA+ICt7DQo+ID4gPiArICBVSU5UTiAgVmFsOw0KPiA+ ID4gKw0KPiA+ID4gKyAgVmFsID0gU2hlbGxTdHJUb1VpbnRuIChWYWx1ZVN0cik7DQo+ID4gPiAr ICBpZiAoVmFsID4gTUFYX1VJTlQxNikgew0KPiA+ID4gKyAgICBTaGVsbFByaW50SGlpRXggKA0K PiA+ID4gKyAgICAgIC0xLCAtMSwgTlVMTCwgU1RSSU5HX1RPS0VOIChTVFJfR0VOX1BBUkFNX0lO ViksDQo+ID4gPiArICAgICAgbUh0dHBIaWlIYW5kbGUsIEhUVFBfQVBQX05BTUUsIFZhbHVlU3Ry DQo+ID4gPiArICAgICAgKTsNCj4gPiA+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiA+ID4gKyAgfQ0K PiA+ID4gKw0KPiA+ID4gKyAgKlZhbHVlID0gKFVJTlQxNilWYWw7DQo+ID4gPiArICByZXR1cm4g VFJVRTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICBHZXQgdGhlIG5h bWUgb2YgdGhlIE5JQy4NCj4gPiA+ICsNCj4gPiA+ICsgIEBwYXJhbVtpbl0gICBDb250cm9sbGVy SGFuZGxlICBUaGUgbmV0d29yayBwaHlzaWNhbCBkZXZpY2UgaGFuZGxlLg0KPiA+ID4gKyAgQHBh cmFtW2luXSAgIE5pY051bWJlciAgICAgICAgIFRoZSBuZXR3b3JrIHBoeXNpY2FsIGRldmljZSBu dW1iZXIuDQo+ID4gPiArICBAcGFyYW1bb3V0XSAgTmljTmFtZSAgICAgICAgICAgQWRkcmVzcyB3 aGVyZSB0byBzdG9yZSB0aGUgTklDIG5hbWUuDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVGhlIG1lbW9yeSBhcmVhIGhhcyB0byBiZSBhdCBsZWFzdA0KPiA+ID4gKw0K PiBJUDRfQ09ORklHMl9JTlRFUkZBQ0VfSU5GT19OQU1FX0xFTkdUSA0KPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBieXRlIHdpZGUuDQo+ID4gPiArDQo+ID4g PiArICBAcmV0dXJuICBFRklfU1VDQ0VTUyAgVGhlIG5hbWUgb2YgdGhlIE5JQyB3YXMgcmV0dXJu ZWQuDQo+ID4gPiArICBAcmV0dXJuICBPdGhlcnMgICAgICAgVGhlIGNyZWF0aW9uIG9mIHRoZSBj aGlsZCBmb3IgdGhlIE1hbmFnZWQNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBOZXR3 b3JrIFNlcnZpY2UgZmFpbGVkIG9yIHRoZSBvcGVuaW5nIG9mDQo+ID4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgdGhlIE1hbmFnZWQgTmV0d29yayBQcm90b2NvbCBmYWlsZWQgb3INCj4gPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICB0aGUgb3BlcmF0aW9uYWwgcGFyYW1ldGVycyBmb3Ig dGhlDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgTWFuYWdlZCBOZXR3b3JrIFByb3Rv Y29sIGNvdWxkIG5vdCBiZQ0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWQuDQo+ ID4gPiArKiovDQo+ID4gPiArU1RBVElDDQo+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gK0dldE5p Y05hbWUgKA0KPiA+ID4gKyAgSU4gICBFRklfSEFORExFICBDb250cm9sbGVySGFuZGxlLA0KPiA+ ID4gKyAgSU4gICBVSU5UTiAgICAgICBOaWNOdW1iZXIsDQo+ID4gPiArICBPVVQgIENIQVIxNiAg ICAgICpOaWNOYW1lDQo+ID4gPiArICApDQo+ID4gPiArew0KPiA+ID4gKyAgRUZJX1NUQVRVUyAg ICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ID4gKyAgRUZJX0hBTkRMRSAgICAgICAgICAg ICAgICAgICAgTW5wSGFuZGxlOw0KPiA+ID4gKyAgRUZJX01BTkFHRURfTkVUV09SS19QUk9UT0NP TCAgKk1ucDsNCj4gPiA+ICsgIEVGSV9TSU1QTEVfTkVUV09SS19NT0RFICAgICAgIFNucE1vZGU7 DQo+ID4gPiArDQo+ID4gPiArICBTdGF0dXMgPSBDcmVhdGVTZXJ2aWNlQ2hpbGRBbmRPcGVuUHJv dG9jb2wgKA0KPiA+ID4gKyAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiA+ID4gKyAg ICAgICAgICAgICAmZ0VmaU1hbmFnZWROZXR3b3JrU2VydmljZUJpbmRpbmdQcm90b2NvbEd1aWQs DQo+ID4gPiArICAgICAgICAgICAgICZnRWZpTWFuYWdlZE5ldHdvcmtQcm90b2NvbEd1aWQsDQo+ ID4gPiArICAgICAgICAgICAgICZNbnBIYW5kbGUsDQo+ID4gPiArICAgICAgICAgICAgIChWT0lE KiopJk1ucA0KPiA+ID4gKyAgICAgICAgICAgICApOw0KPiA+ID4gKyAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPiA+ID4gKyAgICBnb3RvIEVycm9yOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0K PiA+ID4gKyAgU3RhdHVzID0gTW5wLT5HZXRNb2RlRGF0YSAoTW5wLCBOVUxMLCAmU25wTW9kZSk7 DQo+ID4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpICYmIChTdGF0dXMgIT0gRUZJX05PVF9T VEFSVEVEKSkgew0KPiA+ID4gKyAgICBnb3RvIEVycm9yOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0K PiA+ID4gKyAgVW5pY29kZVNQcmludCAoDQo+ID4gPiArICAgIE5pY05hbWUsDQo+ID4gPiArICAg IElQNF9DT05GSUcyX0lOVEVSRkFDRV9JTkZPX05BTUVfTEVOR1RILA0KPiA+ID4gKyAgICBTbnBN b2RlLklmVHlwZSA9PSBORVRfSUZUWVBFX0VUSEVSTkVUID8NCj4gPiA+ICsgICAgTCJldGglZCIg Og0KPiA+ID4gKyAgICBMInVuayVkIiwNCj4gPiA+ICsgICAgTmljTnVtYmVyDQo+ID4gPiArICAg ICk7DQo+ID4gPiArDQo+ID4gPiArICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gPiA+ICsNCj4g PiA+ICtFcnJvcjoNCj4gPiA+ICsNCj4gPiA+ICsgIGlmIChNbnBIYW5kbGUgIT0gTlVMTCkgew0K PiA+ID4gKyAgICBDbG9zZVByb3RvY29sQW5kRGVzdHJveVNlcnZpY2VDaGlsZCAoDQo+ID4gPiAr ICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiA+ICsgICAgICAmZ0VmaU1hbmFnZWROZXR3b3Jr U2VydmljZUJpbmRpbmdQcm90b2NvbEd1aWQsDQo+ID4gPiArICAgICAgJmdFZmlNYW5hZ2VkTmV0 d29ya1Byb3RvY29sR3VpZCwNCj4gPiA+ICsgICAgICBNbnBIYW5kbGUNCj4gPiA+ICsgICAgICAp Ow0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiA+ICt9 DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICBDcmVhdGUgYSBjaGlsZCBmb3IgdGhlIHNl cnZpY2UgaWRlbnRpZmllZCBieSBpdHMgc2VydmljZSBiaW5kaW5nDQo+IHByb3RvY29sDQo+ID4g R1VJRA0KPiA+ID4gKyAgYW5kIGdldCBmcm9tIHRoZSBjaGlsZCB0aGUgaW50ZXJmYWNlIG9mIHRo ZSBwcm90b2NvbCBpZGVudGlmaWVkIGJ5DQo+IGl0cw0KPiA+IEdVSUQuDQo+ID4gPiArDQo+ID4g PiArICBAcGFyYW1baW5dICAgQ29udHJvbGxlckhhbmRsZSAgICAgICAgICAgIENvbnRyb2xsZXIg aGFuZGxlLg0KPiA+ID4gKyAgQHBhcmFtW2luXSAgIFNlcnZpY2VCaW5kaW5nUHJvdG9jb2xHdWlk ICBTZXJ2aWNlIGJpbmRpbmcgcHJvdG9jb2wNCj4gR1VJRA0KPiA+IG9mDQo+ID4gPiB0aGUNCj4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZSB0 byBiZSBjcmVhdGVkLg0KPiA+ID4gKyAgQHBhcmFtW2luXSAgIFByb3RvY29sR3VpZCAgICAgICAg ICAgICAgICBHVUlEIG9mIHRoZSBwcm90b2NvbCB0byBiZQ0KPiBvcGVuLg0KPiA+ID4gKyAgQHBh cmFtW291dF0gIENoaWxkSGFuZGxlICAgICAgICAgICAgICAgICBBZGRyZXNzIHdoZXJlIHRoZSBo YW5kbGVyDQo+IG9mIHRoZQ0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjcmVhdGVkIGNoaWxkIGlzIHJldHVybmVkLg0KPiBOVUxMIGlzDQo+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkIGluIGNh c2Ugb2YgZXJyb3IuDQo+ID4gPiArICBAcGFyYW1bb3V0XSAgSW50ZXJmYWNlICAgICAgICAgICAg ICAgICAgIEFkZHJlc3Mgd2hlcmUgYSBwb2ludGVyIHRvDQo+IHRoZQ0KPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbCBpbnRlcmZhY2UgaXMN Cj4gcmV0dXJuZWQgaW4NCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2FzZSBvZiBzdWNjZXNzLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHVybiAgRUZJ X1NVQ0NFU1MgIFRoZSBjaGlsZCB3YXMgY3JlYXRlZCBhbmQgdGhlIHByb3RvY29sDQo+IG9wZW5l ZC4NCj4gPiA+ICsgIEByZXR1cm4gIE90aGVycyAgICAgICBFaXRoZXIgdGhlIGNyZWF0aW9uIG9m IHRoZSBjaGlsZCBvciB0aGUNCj4gb3BlbmluZw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgIG9mIHRoZSBwcm90b2NvbCBmYWlsZWQuDQo+ID4gPiArKiovDQo+ID4gPiArU1RBVElDDQo+ ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gK0NyZWF0ZVNlcnZpY2VDaGlsZEFuZE9wZW5Qcm90b2Nv bCAoDQo+ID4gPiArICBJTiAgIEVGSV9IQU5ETEUgIENvbnRyb2xsZXJIYW5kbGUsDQo+ID4gPiAr ICBJTiAgIEVGSV9HVUlEICAgICpTZXJ2aWNlQmluZGluZ1Byb3RvY29sR3VpZCwNCj4gPiA+ICsg IElOICAgRUZJX0dVSUQgICAgKlByb3RvY29sR3VpZCwNCj4gPiA+ICsgIE9VVCAgRUZJX0hBTkRM RSAgKkNoaWxkSGFuZGxlLA0KPiA+ID4gKyAgT1VUICBWT0lEICAgICAgICAqKkludGVyZmFjZQ0K PiA+ID4gKyAgKQ0KPiA+ID4gK3sNCj4gPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiA+ ICsNCj4gPiA+ICsgICpDaGlsZEhhbmRsZSA9IE5VTEw7DQo+ID4gPiArICBTdGF0dXMgPSBOZXRM aWJDcmVhdGVTZXJ2aWNlQ2hpbGQgKA0KPiA+ID4gKyAgICAgICAgICAgICBDb250cm9sbGVySGFu ZGxlLA0KPiA+ID4gKyAgICAgICAgICAgICBnSW1hZ2VIYW5kbGUsDQo+ID4gPiArICAgICAgICAg ICAgIFNlcnZpY2VCaW5kaW5nUHJvdG9jb2xHdWlkLA0KPiA+ID4gKyAgICAgICAgICAgICBDaGls ZEhhbmRsZQ0KPiA+ID4gKyAgICAgICAgICAgICApOw0KPiA+ID4gKyAgaWYgKCFFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gPiA+ICsgICAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiA+ ID4gKyAgICAgICAgICAgICAgICpDaGlsZEhhbmRsZSwNCj4gPiA+ICsgICAgICAgICAgICAgICBQ cm90b2NvbEd1aWQsDQo+ID4gPiArICAgICAgICAgICAgICAgSW50ZXJmYWNlLA0KPiA+ID4gKyAg ICAgICAgICAgICAgIGdJbWFnZUhhbmRsZSwNCj4gPiA+ICsgICAgICAgICAgICAgICBDb250cm9s bGVySGFuZGxlLA0KPiA+ID4gKyAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0dFVF9Q Uk9UT0NPTA0KPiA+ID4gKyAgICAgICAgICAgICAgICk7DQo+ID4gPiArICAgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gPiA+ICsgICAgICBOZXRMaWJEZXN0cm95U2VydmljZUNoaWxkICgN Cj4gPiA+ICsgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ID4gPiArICAgICAgICBnSW1hZ2VI YW5kbGUsDQo+ID4gPiArICAgICAgICBTZXJ2aWNlQmluZGluZ1Byb3RvY29sR3VpZCwNCj4gPiA+ ICsgICAgICAgICpDaGlsZEhhbmRsZQ0KPiA+ID4gKyAgICAgICAgKTsNCj4gPiA+ICsgICAgICAq Q2hpbGRIYW5kbGUgPSBOVUxMOw0KPiA+ID4gKyAgICB9DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ ID4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4g PiA+ICsgIENsb3NlIHRoZSBwcm90b2NvbCBpZGVudGlmaWVkIGJ5IGl0cyBHVUlEIG9uIHRoZSBj aGlsZCBoYW5kbGUgb2YNCj4gdGhlDQo+ID4gc2VydmljZQ0KPiA+ID4gKyAgaWRlbnRpZmllZCBi eSBpdHMgc2VydmljZSBiaW5kaW5nIHByb3RvY29sIEdVSUQsIHRoZW4gZGVzdHJveSB0aGUNCj4g Y2hpbGQNCj4gPiA+ICsgIGhhbmRsZS4NCj4gPiA+ICsNCj4gPiA+ICsgIEBwYXJhbVtpbl0gIENv bnRyb2xsZXJIYW5kbGUgICAgICAgICAgICBDb250cm9sbGVyIGhhbmRsZS4NCj4gPiA+ICsgIEBw YXJhbVtpbl0gIFNlcnZpY2VCaW5kaW5nUHJvdG9jb2xHdWlkICBTZXJ2aWNlIGJpbmRpbmcgcHJv dG9jb2wNCj4gR1VJRA0KPiA+IG9mDQo+ID4gPiB0aGUNCj4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlIHRvIGJlIGRlc3Ryb3llZC4NCj4gPiA+ ICsgIEBwYXJhbVtpbl0gIFByb3RvY29sR3VpZCAgICAgICAgICAgICAgICBHVUlEIG9mIHRoZSBw cm90b2NvbCB0byBiZQ0KPiBjbG9zZWQuDQo+ID4gPiArICBAcGFyYW1baW5dICBDaGlsZEhhbmRs ZSAgICAgICAgICAgICAgICAgSGFuZGxlIG9mIHRoZSBjaGlsZCB0byBiZQ0KPiBkZXN0cm95ZWQu DQo+ID4gPiArDQo+ID4gPiArKiovDQo+ID4gPiArU1RBVElDDQo+ID4gPiArVk9JRA0KPiA+ID4g K0Nsb3NlUHJvdG9jb2xBbmREZXN0cm95U2VydmljZUNoaWxkICgNCj4gPiA+ICsgIElOICBFRklf SEFORExFICBDb250cm9sbGVySGFuZGxlLA0KPiA+ID4gKyAgSU4gIEVGSV9HVUlEICAgICpTZXJ2 aWNlQmluZGluZ1Byb3RvY29sR3VpZCwNCj4gPiA+ICsgIElOICBFRklfR1VJRCAgICAqUHJvdG9j b2xHdWlkLA0KPiA+ID4gKyAgSU4gIEVGSV9IQU5ETEUgIENoaWxkSGFuZGxlDQo+ID4gPiArICAp DQo+ID4gPiArew0KPiA+ID4gKyAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gPiA+ICsgICAgQ2hp bGRIYW5kbGUsDQo+ID4gPiArICAgIFByb3RvY29sR3VpZCwNCj4gPiA+ICsgICAgZ0ltYWdlSGFu ZGxlLA0KPiA+ID4gKyAgICBDb250cm9sbGVySGFuZGxlDQo+ID4gPiArICAgICk7DQo+ID4gPiAr DQo+ID4gPiArICBOZXRMaWJEZXN0cm95U2VydmljZUNoaWxkICgNCj4gPiA+ICsgICAgQ29udHJv bGxlckhhbmRsZSwNCj4gPiA+ICsgICAgZ0ltYWdlSGFuZGxlLA0KPiA+ID4gKyAgICBTZXJ2aWNl QmluZGluZ1Byb3RvY29sR3VpZCwNCj4gPiA+ICsgICAgQ2hpbGRIYW5kbGUNCj4gPiA+ICsgICAg KTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICBXYWl0IHVudGlsIG9w ZXJhdGlvbiBjb21wbGV0ZXMuIENvbXBsZXRpb24gaXMgaW5kaWNhdGVkIGJ5DQo+ID4gPiArICBz ZXR0aW5nIG9mIGFuIGFwcHJvcHJpYXRlIHZhcmlhYmxlLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHBh cmFtW2luXSAgIENvbnRleHQgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBIVFRQIGRvd25s b2FkDQo+IGNvbnRleHQuDQo+ID4gPiArICBAcGFyYW1baW5dICAgQ2FsbEJhY2tDb21wbGV0ZSAg ICBBIHBvaW50ZXIgdG8gdGhlIGNhbGxiYWNrDQo+IGNvbXBsZXRpb24NCj4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHNldCBieSB0aGUgY2FsbGJhY2su DQo+ID4gPiArDQo+ID4gPiArICBAcmV0dXJuICBFRklfU1VDQ0VTUyAgICAgICAgICAgICBDYWxs YmFjayBzaWduYWxsZWQgY29tcGxldGlvbi4NCj4gPiA+ICsgIEByZXR1cm4gIEVGSV9USU1FT1VU ICAgICAgICAgICAgIFRpbWVkIG91dCB3YWl0aW5nIGZvciBjb21wbGV0aW9uLg0KPiA+ID4gKyAg QHJldHVybiAgT3RoZXJzICAgICAgICAgICAgICAgICAgRXJyb3Igd2FpdGluZyBmb3IgY29tcGxl dGlvbi4NCj4gPiA+ICsqKi8NCj4gPiA+ICtTVEFUSUMNCj4gPiA+ICtFRklfU1RBVFVTDQo+ID4g PiArV2FpdEZvckNvbXBsZXRpb24gKA0KPiA+ID4gKyAgSU4gRE9XTkxPQURfQ09OVEVYVCAgKkNv bnRleHQsDQo+ID4gPiArICBJTiBPVVQgQk9PTEVBTiAgICAgICAqQ2FsbEJhY2tDb21wbGV0ZQ0K PiA+ID4gKyAgKQ0KPiA+ID4gK3sNCj4gPiA+ICsgIEVGSV9TVEFUVVMgICBTdGF0dXM7DQo+ID4g PiArICBFRklfRVZFTlQgICAgV2FpdEV2dDsNCj4gPiA+ICsNCj4gPiA+ICsgIFN0YXR1cyA9IEVG SV9TVUNDRVNTOw0KPiA+ID4gKw0KPiA+ID4gKyAgLy8gVXNlIGEgdGltZXIgdG8gbWVhc3VyZSB0 aW1lb3V0LiBDYW5ub3QgdXNlIFN0YWxsIGhlcmUhDQo+ID4gPiArICBTdGF0dXMgPSBnQlMtPkNy ZWF0ZUV2ZW50ICgNCj4gPiA+ICsgICAgICAgICAgICAgICAgIEVWVF9USU1FUiwNCj4gPiA+ICsg ICAgICAgICAgICAgICAgIFRQTF9DQUxMQkFDSywNCj4gPiA+ICsgICAgICAgICAgICAgICAgIE5V TEwsDQo+ID4gPiArICAgICAgICAgICAgICAgICBOVUxMLA0KPiA+ID4gKyAgICAgICAgICAgICAg ICAgJldhaXRFdnQNCj4gPiA+ICsgICAgICAgICAgICAgICAgICk7DQo+ID4gPiArICAgQVNTRVJU X0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gPiA+ICsNCj4gPiA+ICsgICBpZiAoIUVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPiA+ID4gKyAgICAgU3RhdHVzID0gZ0JTLT5TZXRUaW1lcigNCj4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICBXYWl0RXZ0LA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg IFRpbWVyUmVsYXRpdmUsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgRUZJX1RJTUVSX1BF UklPRF9TRUNPTkRTIChUSU1FUl9NQVhfVElNRU9VVF9TKQ0KPiA+ID4gKyAgICAgICAgICAgICAg ICAgICAgICk7DQo+ID4gPiArDQo+ID4gPiArICAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMp Ow0KPiA+ID4gKyAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIHdoaWxlICghICpDYWxsQmFja0NvbXBs ZXRlICYmDQo+ID4gPiArICAgICAgICAgKCFFRklfRVJST1IgKFN0YXR1cykpICYmDQo+ID4gPiAr ICAgICAgICAgRUZJX0VSUk9SIChnQlMtPkNoZWNrRXZlbnQgKFdhaXRFdnQpKQ0KPiA+ID4gKyAg ICAgICAgKSB7DQo+ID4gPiArICAgIFN0YXR1cyA9IENvbnRleHQtPkh0dHAtPlBvbGwgKENvbnRl eHQtPkh0dHApOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgZ0JTLT5TZXRUaW1lciAo V2FpdEV2dCwgVGltZXJDYW5jZWwsIDApOw0KPiA+ID4gKyAgZ0JTLT5DbG9zZUV2ZW50IChXYWl0 RXZ0KTsNCj4gPiA+ICsNCj4gPiA+ICsgIGlmICgqQ2FsbEJhY2tDb21wbGV0ZSkgew0KPiA+ID4g KyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBp ZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ID4gKyAgICBTdGF0dXMgPSBFRklfVElNRU9V VDsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gPiAr fQ0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAgR2VuZXJhdGUgYW5kIHNlbmQgYSByZXF1 ZXN0IHRvIHRoZSBodHRwIHNlcnZlci4NCj4gPiA+ICsNCj4gPiA+ICsgIEBwYXJhbVtpbl0gICBD b250ZXh0ICAgICAgICAgICBIVFRQIGRvd25sb2FkIGNvbnRleHQuDQo+ID4gPiArICBAcGFyYW1b aW5dICAgRG93bmxvYWRVcmwgICAgICAgRnVsbHkgcXVhbGlmaWVkIFVSTCB0byBiZQ0KPiBkb3du bG9hZGVkLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHVybiBFRklfU1VDQ0VTUyAgICAgICAgICAg IFJlcXVlc3QgaGFzIGJlZW4gc2VudCBzdWNjZXNzZnVsbHkuDQo+ID4gPiArICBAcmV0dXJuIEVG SV9JTlZBTElEX1BBUkFNRVRFUiAgSW52YWxpZCBVUkwuDQo+ID4gPiArICBAcmV0dXJuIEVGSV9P VVRfT0ZfUkVTT1VSQ0VTICAgT3V0IG9mIG1lbW9yeS4NCj4gPiA+ICsgIEByZXR1cm4gRUZJX0RF VklDRV9FUlJPUiAgICAgICBJZiBIVFRQUyBpcyB1c2VkLCB0aGlzIHByb2JhYmx5DQo+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbnMgdGhhdCBUTFMgc3VwcG9ydCBl aXRoZXIgd2FzDQo+IG5vdA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGluc3RhbGxlZCBvciBub3QgY29uZmlndXJlZC4NCj4gPiA+ICsgIEByZXR1cm4gT3RoZXJzICAg ICAgICAgICAgICAgICBFcnJvciBzZW5kaW5nIHRoZSByZXF1ZXN0Lg0KPiA+ID4gKyoqLw0KPiA+ ID4gKw0KPiA+ID4gK1NUQVRJQw0KPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ICtTZW5kUmVxdWVz dCAoDQo+ID4gPiArICBJTiBET1dOTE9BRF9DT05URVhUICAqQ29udGV4dCwNCj4gPiA+ICsgIElO IENIQVIxNiAgICAgICAgICAgICpEb3dubG9hZFVybA0KPiA+ID4gKyAgKQ0KPiA+ID4gK3sNCj4g PiA+ICsgICAgRUZJX0hUVFBfUkVRVUVTVF9EQVRBICAgICAgIFJlcXVlc3REYXRhOw0KPiA+ID4g KyAgICBFRklfSFRUUF9IRUFERVIgICAgICAgICAgICAgUmVxdWVzdEhlYWRlcjsNCj4gPiA+ICsg ICAgRUZJX0hUVFBfTUVTU0FHRSAgICAgICAgICAgIFJlcXVlc3RNZXNzYWdlOw0KPiA+ID4gKyAg ICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ID4gKw0KPiA+ID4gKyAg ICBaZXJvTWVtICgmUmVxdWVzdERhdGEsIHNpemVvZiAoUmVxdWVzdERhdGEpKTsNCj4gPiA+ICsg ICAgWmVyb01lbSAoJlJlcXVlc3RIZWFkZXIsIHNpemVvZiAoUmVxdWVzdEhlYWRlcikpOw0KPiA+ ID4gKyAgICBaZXJvTWVtICgmUmVxdWVzdE1lc3NhZ2UsIHNpemVvZiAoUmVxdWVzdE1lc3NhZ2Up KTsNCj4gPiA+ICsgICAgWmVyb01lbSAoJkNvbnRleHQtPlJlcXVlc3RUb2tlbiwgc2l6ZW9mIChD b250ZXh0LQ0KPiA+ID5SZXF1ZXN0VG9rZW4pKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgUmVxdWVz dEhlYWRlci5GaWVsZE5hbWUgPSAiSG9zdCI7DQo+ID4gPiArICAgIGlmIChDb250ZXh0LT5Qcm94 eVNlcnZlckFkZHIpIHsNCj4gPiA+ICsgICAgICBSZXF1ZXN0SGVhZGVyLkZpZWxkVmFsdWUgPSBD b250ZXh0LT5Qcm94eVNlcnZlckFkZHI7DQo+ID4gPiArICAgIH0gZWxzZSB7DQo+ID4gPiArICAg ICAgICBDSEFSMTYgICpIb3N0Ow0KPiA+ID4gKyAgICAgICAgVUlOVE4gICBTdHJpbmdTaXplOw0K PiA+ID4gKw0KPiA+ID4gKyAgICAgICAgSG9zdCA9IChDSEFSMTYgKilDb250ZXh0LT5TZXJ2ZXJB ZGRyQW5kUHJvdG87DQo+ID4gPiArICAgICAgICB3aGlsZSAoKkhvc3QgIT0gQ0hBUl9OVUxMICYm ICpIb3N0ICE9IEwnLycpIHsNCj4gPiA+ICsgICAgICAgICAgSG9zdCsrOw0KPiA+ID4gKyAgICAg ICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgaWYgKCpIb3N0ID09IENIQVJfTlVMTCkgew0K PiA+ID4gKyAgICAgICAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ID4gKyAg ICAgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgLy8NCj4gPiA+ICsgICAgICAgIC8vIEdl dCB0aGUgbmV4dCBzbGFzaA0KPiA+ID4gKyAgICAgICAgLy8NCj4gPiA+ICsgICAgICAgIEhvc3Qr KzsNCj4gPiA+ICsgICAgICAgIC8vDQo+ID4gPiArICAgICAgICAvLyBBbmQgbm93IHRoZSBob3N0 IG5hbWUNCj4gPiA+ICsgICAgICAgIC8vDQo+ID4gPiArICAgICAgICBIb3N0Kys7DQo+ID4gPiAr DQo+ID4gPiArICAgICAgICBTdHJpbmdTaXplID0gU3RyTGVuIChIb3N0KSArIDE7DQo+ID4gPiAr ICAgICAgICBSZXF1ZXN0SGVhZGVyLkZpZWxkVmFsdWUgPSBBbGxvY2F0ZVBvb2wgKFN0cmluZ1Np emUpOw0KPiA+ID4gKyAgICAgICAgaWYgKCFSZXF1ZXN0SGVhZGVyLkZpZWxkVmFsdWUpIHsNCj4g PiA+ICsgICAgICAgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ID4gKyAgICAg ICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgVW5pY29kZVN0clRvQXNjaWlTdHJTIChIb3N0 LCBSZXF1ZXN0SGVhZGVyLkZpZWxkVmFsdWUsDQo+IFN0cmluZ1NpemUpOw0KPiA+ID4gKyAgICB9 DQo+ID4gPiArDQo+ID4gPiArICAgIFJlcXVlc3RNZXNzYWdlLkhlYWRlckNvdW50Kys7DQo+ID4g PiArDQo+ID4gPiArICAgIFJlcXVlc3REYXRhLk1ldGhvZCA9IEh0dHBNZXRob2RHZXQ7DQo+ID4g PiArICAgIFJlcXVlc3REYXRhLlVybCA9IERvd25sb2FkVXJsOw0KPiA+ID4gKw0KPiA+ID4gKyAg ICBSZXF1ZXN0TWVzc2FnZS5EYXRhLlJlcXVlc3QgPSAmUmVxdWVzdERhdGE7DQo+ID4gPiArICAg IFJlcXVlc3RNZXNzYWdlLkhlYWRlcnMgPSAmUmVxdWVzdEhlYWRlcjsNCj4gPiA+ICsgICAgUmVx dWVzdE1lc3NhZ2UuQm9keUxlbmd0aCA9IDA7DQo+ID4gPiArICAgIFJlcXVlc3RNZXNzYWdlLkJv ZHkgPSBOVUxMOw0KPiA+ID4gKyAgICBDb250ZXh0LT5SZXF1ZXN0VG9rZW4uRXZlbnQgPSBOVUxM Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICAvLw0KPiA+ID4gKyAgICAvLyBDb21wbGV0aW9uIGNhbGxi YWNrIGV2ZW50IHRvIGJlIHNldCB3aGVuIFJlcXVlc3QgY29tcGxldGVzLg0KPiA+ID4gKyAgICAv Lw0KPiA+ID4gKyAgICBTdGF0dXMgPSBnQlMtPkNyZWF0ZUV2ZW50ICgNCj4gPiA+ICsgICAgICBF VlRfTk9USUZZX1NJR05BTCwNCj4gPiA+ICsgICAgICBUUExfQ0FMTEJBQ0ssDQo+ID4gPiArICAg ICAgUmVxdWVzdENhbGxiYWNrLA0KPiA+ID4gKyAgICAgIENvbnRleHQsDQo+ID4gPiArICAgICAg JkNvbnRleHQtPlJlcXVlc3RUb2tlbi5FdmVudA0KPiA+ID4gKyAgICAgICk7DQo+ID4gPiArICAg IEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4gPiArDQo+ID4gPiArICAgIENvbnRleHQt PlJlcXVlc3RUb2tlbi5TdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gPiA+ICsgICAgQ29udGV4dC0+ UmVxdWVzdFRva2VuLk1lc3NhZ2UgPSAmUmVxdWVzdE1lc3NhZ2U7DQo+ID4gPiArICAgIGdSZXF1 ZXN0Q2FsbGJhY2tDb21wbGV0ZSA9IEZBTFNFOw0KPiA+ID4gKyAgICBTdGF0dXMgPSBDb250ZXh0 LT5IdHRwLT5SZXF1ZXN0IChDb250ZXh0LT5IdHRwLCAmQ29udGV4dC0NCj4gPiA+UmVxdWVzdFRv a2VuKTsNCj4gPiA+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ID4gKyAgICAg IGdvdG8gRXJyb3I7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgU3RhdHVzID0g V2FpdEZvckNvbXBsZXRpb24gKENvbnRleHQsICZnUmVxdWVzdENhbGxiYWNrQ29tcGxldGUpOw0K PiA+ID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiArICAgICAgQ29udGV4 dC0+SHR0cC0+Q2FuY2VsIChDb250ZXh0LT5IdHRwLCAmQ29udGV4dC0+UmVxdWVzdFRva2VuKTsN Cj4gPiA+ICsgICAgfQ0KPiA+ID4gK0Vycm9yOg0KPiA+ID4gKyAgICBTSEVMTF9GUkVFX05PTl9O VUxMIChSZXF1ZXN0SGVhZGVyLkZpZWxkVmFsdWUpOw0KPiA+ID4gKyAgICBpZiAoQ29udGV4dC0+ UmVxdWVzdFRva2VuLkV2ZW50KSB7DQo+ID4gPiArICAgICAgZ0JTLT5DbG9zZUV2ZW50IChDb250 ZXh0LT5SZXF1ZXN0VG9rZW4uRXZlbnQpOw0KPiA+ID4gKyAgICAgIFplcm9NZW0gKCZDb250ZXh0 LT5SZXF1ZXN0VG9rZW4sIHNpemVvZiAoQ29udGV4dC0NCj4gPiA+UmVxdWVzdFRva2VuKSk7DQo+ ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gPiA+ICt9 DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICBVcGRhdGUgdGhlIHByb2dyZXNzIG9mIGEg ZmlsZSBkb3dubG9hZA0KPiA+ID4gKyAgVGhpcyBwcm9jZWR1cmUgaXMgY2FsbGVkIGVhY2ggdGlt ZSBhIG5ldyBIVFRQIGJvZHkgcG9ydGlvbiBpcw0KPiByZWNlaXZlZC4NCj4gPiA+ICsNCj4gPiA+ ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICAgICBIVFRQIGRvd25sb2FkIGNvbnRleHQuDQo+ID4g PiArICBAcGFyYW1baW5dICBEb3dubG9hZExlbiAgUG9ydGlvbiBzaXplLCBpbiBieXRlcy4NCj4g PiA+ICsgIEBwYXJhbVtpbl0gIEJ1ZmZlciAgICAgICBUaGUgcG9pbnRlciB0byB0aGUgcGFyc2Vk IGJ1ZmZlci4NCj4gPiA+ICsNCj4gPiA+ICsgIEByZXR2YWwgIEVGSV9TVUNDRVNTICAgICBQb3J0 aW9uIHNhdmVkLg0KPiA+ID4gKyAgQHJldHZhbCAgT3RoZXIgICAgICAgICAgIEVycm9yIHNhdmlu ZyB0aGUgcG9ydGlvbi4NCj4gPiA+ICsNCj4gPiA+ICsqKi8NCj4gPiA+ICtTVEFUSUMNCj4gPiA+ ICtFRklfU1RBVFVTDQo+ID4gPiArRUZJQVBJDQo+ID4gPiArU2F2ZVBvcnRpb24gKA0KPiA+ID4g KyAgSU4gRE9XTkxPQURfQ09OVEVYVCAgICAgKkNvbnRleHQsDQo+ID4gPiArICBJTiBVSU5UTiAg ICAgICAgICAgICAgICBEb3dubG9hZExlbiwNCj4gPiA+ICsgIElOIENIQVI4ICAgICAgICAgICAg ICAgICpCdWZmZXINCj4gPiA+ICsgICkNCj4gPiA+ICt7DQo+ID4gPiArICBDSEFSMTYgICAgICAg ICAgICBQcm9ncmVzc1tIVFRQX1BST0dSRVNTX01FU1NBR0VfU0laRV07DQo+ID4gPiArICBVSU5U TiAgICAgICAgICAgICBOYk9mS2I7DQo+ID4gPiArICBVSU5UTiAgICAgICAgICAgICBJbmRleDsN Cj4gPiA+ICsgIFVJTlROICAgICAgICAgICAgIExhc3RTdGVwOw0KPiA+ID4gKyAgVUlOVE4gICAg ICAgICAgICAgU3RlcDsNCj4gPiA+ICsgIEVGSV9TVEFUVVMgICAgICAgIFN0YXR1czsNCj4gPiA+ ICsNCj4gPiA+ICsgIExhc3RTdGVwID0gMDsNCj4gPiA+ICsgIFN0ZXAgPSAwOw0KPiA+ID4gKyAg U2hlbGxTZXRGaWxlUG9zaXRpb24gKG1GaWxlSGFuZGxlLCBDb250ZXh0LT5MYXN0UmVwb3J0ZWRO Yk9mQnl0ZXMpOw0KPiA+ID4gKyAgU3RhdHVzID0gU2hlbGxXcml0ZUZpbGUgKG1GaWxlSGFuZGxl LCAmRG93bmxvYWRMZW4sIEJ1ZmZlcik7DQo+ID4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ID4gPiArICAgIGlmIChDb250ZXh0LT5Db250ZW50RG93bmxvYWRlZCA+IDApIHsNCj4g PiA+ICsgICAgICBTaGVsbFByaW50SGlpRXggKA0KPiA+ID4gKyAgICAgICAgLTEsIC0xLCBOVUxM LCBTVFJJTkdfVE9LRU4gKFNUUl9HRU5fQ1JMRiksIG1IdHRwSGlpSGFuZGxlDQo+ID4gPiArICAg ICAgICApOw0KPiA+ID4gKyAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgIFNoZWxsUHJpbnRIaWlF eCAoDQo+ID4gPiArICAgICAgLTEsIC0xLCBOVUxMLCBTVFJJTkdfVE9LRU4gKFNUUl9IVFRQX0VS Ul9XUklURSksDQo+ID4gPiArICAgICAgbUh0dHBIaWlIYW5kbGUsIG1Mb2NhbEZpbGVQYXRoLCBT dGF0dXMNCj4gPiA+ICsgICAgICApOw0KPiA+ID4gKw0KPiA+ID4gKyAgICByZXR1cm4gU3RhdHVz Ow0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgaWYgKENvbnRleHQtPkNvbnRlbnREb3du bG9hZGVkID09IDApIHsNCj4gPiA+ICsgICAgU2hlbGxQcmludEV4ICgtMSwgLTEsIEwiJXMgICAg ICAgMCBLYiIsIEhUVFBfUFJPR1JfRlJBTUUpOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4g KyAgQ29udGV4dC0+Q29udGVudERvd25sb2FkZWQgKz0gRG93bmxvYWRMZW47DQo+ID4gPiArICBO Yk9mS2IgPSBDb250ZXh0LT5Db250ZW50RG93bmxvYWRlZCA+PiAxMDsNCj4gPiA+ICsNCj4gPiA+ ICsgIFByb2dyZXNzWzBdID0gTCdcMCc7DQo+ID4gPiArICBpZiAoQ29udGV4dC0+Q29udGVudExl bmd0aCkgew0KPiA+ID4gKyAgICBMYXN0U3RlcCAgPSAoQ29udGV4dC0+TGFzdFJlcG9ydGVkTmJP ZkJ5dGVzICoNCj4gPiA+IEhUVFBfUFJPR1JFU1NfU0xJREVSX1NURVBTKSAvDQo+ID4gPiArICAg ICAgICAgICAgICAgICBDb250ZXh0LT5Db250ZW50TGVuZ3RoOw0KPiA+ID4gKyAgICBTdGVwICAg ICAgPSAoQ29udGV4dC0+Q29udGVudERvd25sb2FkZWQgKg0KPiA+IEhUVFBfUFJPR1JFU1NfU0xJ REVSX1NURVBTKQ0KPiA+ID4gLw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgQ29udGV4dC0+Q29u dGVudExlbmd0aDsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIENvbnRleHQtPkxhc3RS ZXBvcnRlZE5iT2ZCeXRlcyA9IENvbnRleHQtPkNvbnRlbnREb3dubG9hZGVkOw0KPiA+ID4gKw0K PiA+ID4gKyAgaWYgKFN0ZXAgPD0gTGFzdFN0ZXApIHsNCj4gPiA+ICsgICAgaWYgKCFDb250ZXh0 LT5Db250ZW50TGVuZ3RoKSB7DQo+ID4gPiArICAgICAgLy8NCj4gPiA+ICsgICAgICAvLyBVcGRh dGUgZG93bmxvYWRlZCBzaXplLCB0aGVyZSBpcyBubyBsZW5ndGggaW5mbyBhdmFpbGFibGUuDQo+ ID4gPiArICAgICAgLy8NCj4gPiA+ICsgICAgICBTaGVsbFByaW50RXggKC0xLCAtMSwgTCIlcyIs IEhUVFBfS0IpOw0KPiA+ID4gKyAgICAgIFNoZWxsUHJpbnRFeCAoLTEsIC0xLCBMIiU3ZCBLYiIs IE5iT2ZLYik7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgcmV0dXJuIEVGSV9T VUNDRVNTOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgU2hlbGxQcmludEV4ICgtMSwg LTEsIEwiJXMiLCBIVFRQX1BST0dSRVNTX0RFTCk7DQo+ID4gPiArDQo+ID4gPiArICBTdGF0dXMg PSBTdHJDcHlTIChQcm9ncmVzcywgSFRUUF9QUk9HUkVTU19NRVNTQUdFX1NJWkUsDQo+ID4gPiBI VFRQX1BST0dSX0ZSQU1FKTsNCj4gPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g PiA+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIGZv ciAoSW5kZXggPSAxOyBJbmRleCA8IFN0ZXA7IEluZGV4KyspIHsNCj4gPiA+ICsgICAgUHJvZ3Jl c3NbSW5kZXhdID0gTCc9JzsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIGlmIChTdGVw KSB7DQo+ID4gPiArICAgIFByb2dyZXNzW1N0ZXBdID0gTCc+JzsNCj4gPiA+ICsgIH0NCj4gPiA+ ICsNCj4gPiA+ICsgIFVuaWNvZGVTUHJpbnQgKA0KPiA+ID4gKyAgICBQcm9ncmVzcyArIChzaXpl b2YgKEhUVFBfUFJPR1JfRlJBTUUpIC8gc2l6ZW9mIChDSEFSMTYpKSAtIDEsDQo+ID4gPiArICAg IHNpemVvZiAoUHJvZ3Jlc3MpIC0gc2l6ZW9mIChIVFRQX1BST0dSX0ZSQU1FKSwNCj4gPiA+ICsg ICAgTCIgJTdkIEtiIiwNCj4gPiA+ICsgICAgTmJPZktiDQo+ID4gPiArICAgICk7DQo+ID4gPiAr DQo+ID4gPiArDQo+ID4gPiArICBTaGVsbFByaW50RXggKC0xLCAtMSwgTCIlcyIsIFByb2dyZXNz KTsNCj4gPiA+ICsNCj4gPiA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiA+ICt9DQo+ID4g PiArDQo+ID4gPiArLyoqDQo+ID4gPiArICBSZXBsYWNlIHRoZSBvcmlnaW5hbCBIb3N0IGFuZCBV Ukkgd2l0aCBIb3N0IGFuZCBVUkkgcmV0dXJuZWQgYnkgdGhlDQo+ID4gPiArICBIVFRQIHNlcnZl ciBpbiAnTG9jYXRpb24nIGhlYWRlciAocmVkaXJlY3Rpb24pLg0KPiA+ID4gKw0KPiA+ID4gKyAg QHBhcmFtW2luXSAgIExvY2F0aW9uICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlICdMb2NhdGlv bicgc3RyaW5nDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3Zp ZGVkIGJ5IEhUVFAgc2VydmVyLg0KPiA+ID4gKyAgQHBhcmFtW2luXSAgIENvbnRleHQgICAgICAg ICAgICBBIHBvaW50ZXIgdG8gSFRUUCBkb3dubG9hZCBjb250ZXh0Lg0KPiA+ID4gKyAgQHBhcmFt W2luXSAgIERvd25sb2FkVXJsICAgICAgICBGdWxseSBxdWFsaWZpZWQgSFRUUCBVUkwuDQo+ID4g PiArDQo+ID4gPiArICBAcmV0dXJuICBFRklfU1VDQ0VTUyAgICAgICAgICAgIEhvc3QgYW5kIFVS SSB3ZXJlIHN1Y2Nlc3NmdWxseSBzZXQuDQo+ID4gPiArICBAcmV0dXJuICBFRklfT1VUX09GX1JF U09VUkNFUyAgIEVycm9yIHNldHRpbmcgSG9zdCBvciBVUkkuDQo+ID4gPiArKiovDQo+ID4gPiAr DQo+ID4gPiArU1RBVElDDQo+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gK1NldEhvc3RVUkkgKA0K PiA+ID4gKyAgSU4gQ0hBUjggICAgICAgICAgICAqTG9jYXRpb24sDQo+ID4gPiArICBJTiBET1dO TE9BRF9DT05URVhUICpDb250ZXh0LA0KPiA+ID4gKyAgSU4gQ0hBUjE2ICAgICAgICAgICAqRG93 bmxvYWRVcmwNCj4gPiA+ICsgICkNCj4gPiA+ICt7DQo+ID4gPiArICBFRklfU1RBVFVTIFN0YXR1 czsNCj4gPiA+ICsgIFVJTlROICAgICAgU3RyaW5nU2l6ZTsNCj4gPiA+ICsgIENIQVI4ICAgICAg KlRtcDsNCj4gPiA+ICsgIENIQVIxNiAgICAgKlVybDsNCj4gPiA+ICsNCj4gPiA+ICsgIFRtcCA9 IE5VTEw7DQo+ID4gPiArICBVcmwgPSBOVUxMOw0KPiA+ID4gKw0KPiA+ID4gKyAgU3RyaW5nU2l6 ZSA9IChBc2NpaVN0clNpemUgKExvY2F0aW9uKSAqIHNpemVvZiAoQ0hBUjE2KSk7DQo+ID4gPiAr ICBVcmwgPSBBbGxvY2F0ZVplcm9Qb29sIChTdHJpbmdTaXplKTsNCj4gPiA+ICsgIGlmICghVXJs KSB7DQo+ID4gPiArICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiA+ICsgIH0N Cj4gPiA+ICsNCj4gPiA+ICsgIFN0YXR1cyA9IEFzY2lpU3RyVG9Vbmljb2RlU3RyUyAoDQo+ID4g PiArICAgICAgICAgICAgICAgICAoQ09OU1QgQ0hBUjggKilMb2NhdGlvbiwNCj4gPiA+ICsgICAg ICAgICAgICAgICAgIFVybCwNCj4gPiA+ICsgICAgICAgICAgICAgICAgIFN0cmluZ1NpemUNCj4g PiA+ICsgICAgICAgICAgICAgICAgICk7DQo+ID4gPiArDQo+ID4gPiArICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+ID4gPiArICAgICAgICBnb3RvIEVycm9yOw0KPiA+ID4gKyAgfQ0KPiA+ ID4gKw0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIC8vIElmIGFuIEhUVFAgc2VydmVyIHJlZGlyZWN0 IHRvIHRoZSBzYW1lIGxvY2F0aW9uIG1vcmUgdGhhbiBvbmNlLA0KPiA+ID4gKyAgLy8gdGhlbiBz dG9wIGF0dGVtcHRzIGFuZCB0ZWxsIGl0IGlzIG5vdCByZWFjaGFibGUuDQo+ID4gPiArICAvLw0K PiA+ID4gKyAgaWYgKCFTdHJDbXAgKFVybCwgRG93bmxvYWRVcmwpKSB7DQo+ID4gPiArICAgIFN0 YXR1cyA9IEVGSV9OT19NQVBQSU5HOw0KPiA+ID4gKyAgICBnb3RvIEVycm9yOw0KPiA+ID4gKyAg fQ0KPiA+ID4gKw0KPiA+ID4gKyAgaWYgKEFzY2lpU3RyU3RyIChMb2NhdGlvbiwgIjovLyIpKSB7 DQo+ID4gPiArICAgIENIQVI4ICAgICAgKldhbGtlcjsNCj4gPiA+ICsgICAgVUlOVE4gICAgICBJ ZHg7DQo+ID4gPiArICAgIFVJTlROICAgICAgU3RlcDsNCj4gPiA+ICsNCj4gPiA+ICsgICAgSWR4 ID0gMDsNCj4gPiA+ICsgICAgV2Fsa2VyID0gTG9jYXRpb247DQo+ID4gPiArDQo+ID4gPiArICAg IGZvciAoU3RlcCA9IDA7IFN0ZXAgPCAyOyBTdGVwKyspIHsNCj4gPiA+ICsgICAgICBmb3IgKDsg KldhbGtlciAhPSAnLycgJiYgKldhbGtlciAhPSAnXDAnOyBXYWxrZXIrKykgew0KPiA+ID4gKyAg ICAgICAgSWR4Kys7DQo+ID4gPiArICAgICAgfQ0KPiA+ID4gKyAgICAgIGlmICghU3RlcCkgew0K PiA+ID4gKyAgICAgICAgLy8NCj4gPiA+ICsgICAgICAgIC8vIFNraXAgIi8vIg0KPiA+ID4gKyAg ICAgICAgLy8NCj4gPiA+ICsgICAgICAgIElkeCArPSAyOw0KPiA+ID4gKyAgICAgICAgV2Fsa2Vy ICs9IDI7DQo+ID4gPiArICAgICAgfQ0KPiA+ID4gKyAgICB9DQo+ID4gPiArDQo+ID4gPiArICAg IFRtcCA9IEFsbG9jYXRlWmVyb1Bvb2wgKElkeCArIDEpOw0KPiA+ID4gKyAgICBpZiAoIVRtcCkg ew0KPiA+ID4gKyAgICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ID4gKyAg ICAgIGdvdG8gRXJyb3I7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgQ29weU1l bSAoVG1wLCBMb2NhdGlvbiwgSWR4KTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgLy8NCj4gPiA+ICsg ICAgLy8gTG9jYXRpb24gbm93IHBvaW50cyB0byBVUkkNCj4gPiA+ICsgICAgLy8NCj4gPiA+ICsg ICAgTG9jYXRpb24gKz0gSWR4Ow0KPiA+ID4gKyAgICBTdHJpbmdTaXplID0gKElkeCArIDEpICog c2l6ZW9mIChDSEFSMTYpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICBTSEVMTF9GUkVFX05PTl9OVUxM IChDb250ZXh0LT5TZXJ2ZXJBZGRyQW5kUHJvdG8pOw0KPiA+ID4gKw0KPiA+ID4gKyAgICBDb250 ZXh0LT5TZXJ2ZXJBZGRyQW5kUHJvdG8gPSBBbGxvY2F0ZVplcm9Qb29sIChTdHJpbmdTaXplKTsN Cj4gPiA+ICsgICAgaWYgKCFDb250ZXh0LT5TZXJ2ZXJBZGRyQW5kUHJvdG8pIHsNCj4gPiA+ICsg ICAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiA+ICsgICAgICBnb3RvIEVy cm9yOw0KPiA+ID4gKyAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgIFN0YXR1cyA9IEFzY2lpU3Ry VG9Vbmljb2RlU3RyUyAoDQo+ID4gPiArICAgICAgICAgICAgICAgKENPTlNUIENIQVI4ICopVG1w LA0KPiA+ID4gKyAgICAgICAgICAgICAgIENvbnRleHQtPlNlcnZlckFkZHJBbmRQcm90bywNCj4g PiA+ICsgICAgICAgICAgICAgICBTdHJpbmdTaXplDQo+ID4gPiArICAgICAgICAgICAgICAgKTsN Cj4gPiA+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ID4gKyAgICAgIGdvdG8g RXJyb3I7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIFNIRUxM X0ZSRUVfTk9OX05VTEwgKENvbnRleHQtPlVSSSk7DQo+ID4gPiArDQo+ID4gPiArICBTdHJpbmdT aXplID0gQXNjaWlTdHJTaXplIChMb2NhdGlvbikgKiBzaXplb2YgKENIQVIxNik7DQo+ID4gPiAr ICBDb250ZXh0LT5VUkkgPSBBbGxvY2F0ZVplcm9Qb29sIChTdHJpbmdTaXplKTsNCj4gPiA+ICsg IGlmICghQ29udGV4dC0+VVJJKSB7DQo+ID4gPiArICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVT T1VSQ0VTOw0KPiA+ID4gKyAgICBnb3RvIEVycm9yOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ ID4gKyAgLy8NCj4gPiA+ICsgIC8vIE5vdyBtYWtlIGNoYW5nZXMgdG8gdGhlIFVSSSBwYXJ0Lg0K PiA+ID4gKyAgLy8NCj4gPiA+ICsgIFN0YXR1cyA9IEFzY2lpU3RyVG9Vbmljb2RlU3RyUyAoDQo+ ID4gPiArICAgICAgICAgICAgIChDT05TVCBDSEFSOCAqKUxvY2F0aW9uLA0KPiA+ID4gKyAgICAg ICAgICAgICBDb250ZXh0LT5VUkksDQo+ID4gPiArICAgICAgICAgICAgIFN0cmluZ1NpemUNCj4g PiA+ICsgICAgICAgICAgICAgKTsNCj4gPiA+ICtFcnJvcjoNCj4gPiA+ICsgIFNIRUxMX0ZSRUVf Tk9OX05VTEwgKFRtcCk7DQo+ID4gPiArICBTSEVMTF9GUkVFX05PTl9OVUxMIChVcmwpOw0KPiA+ ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4g PiArICBNZXNzYWdlIHBhcnNlciBjYWxsYmFjay4NCj4gPiA+ICsgIFNhdmUgYSBwb3J0aW9uIG9m IEhUVFAgYm9keS4NCj4gPiA+ICsNCj4gPiA+ICsgIEBwYXJhbVtpbl0gICBFdmVudFR5cGUgICAg ICAgVHlwZSBvZiBldmVudC4gQ2FuIGJlIGVpdGhlcg0KPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBPbkNvbXBsZXRlIG9yIE9uRGF0YS4NCj4gPiA+ICsgIEBwYXJhbVtpbl0g ICBEYXRhICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIgd2l0aCBkYXRhLg0KPiA+ ID4gKyAgQHBhcmFtW2luXSAgIExlbmd0aCAgICAgICAgICBEYXRhIGxlbmd0aCBvZiB0aGlzIHBv cnRpb24uDQo+ID4gPiArICBAcGFyYW1baW5dICAgQ29udGV4dCAgICAgICAgIEEgcG9pbnRlciB0 byB0aGUgSFRUUCBkb3dubG9hZA0KPiBjb250ZXh0Lg0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHVy biAgICAgIEVGSV9TVUNDRVNTICAgIFRoZSBwb3J0aW9uIHdhcyBwcm9jZXNzZWQgc3VjY2Vzc2Z1 bGx5Lg0KPiA+ID4gKyAgQHJldHVybiAgICAgIE90aGVyICAgICAgICAgIEVycm9yIHJldHVybmVk IGJ5IFNhdmVQb3J0aW9uLg0KPiA+ID4gKyoqLw0KPiA+ID4gKw0KPiA+ID4gK1NUQVRJQw0KPiA+ ID4gK0VGSV9TVEFUVVMNCj4gPiA+ICtFRklBUEkNCj4gPiA+ICtQYXJzZU1zZyAoDQo+ID4gPiAr ICBJTiBIVFRQX0JPRFlfUEFSU0VfRVZFTlQgICAgICBFdmVudFR5cGUsDQo+ID4gPiArICBJTiBD SEFSOCAgICAgICAgICAgICAgICAgICAgICAqRGF0YSwNCj4gPiA+ICsgIElOIFVJTlROICAgICAg ICAgICAgICAgICAgICAgIExlbmd0aCwNCj4gPiA+ICsgIElOIFZPSUQgICAgICAgICAgICAgICAg ICAgICAgICpDb250ZXh0DQo+ID4gPiArICApDQo+ID4gPiArew0KPiA+ID4gKyAgaWYgKCFEYXRh IHx8DQo+ID4gPiArICAgICAgKEV2ZW50VHlwZSA9PSBCb2R5UGFyc2VFdmVudE9uQ29tcGxldGUp IHx8DQo+ID4gPiArICAgICAgKCFDb250ZXh0KQ0KPiA+ID4gKyAgICAgKSB7DQo+ID4gPiArICAg IHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIHJldHVy biBTYXZlUG9ydGlvbiAoQ29udGV4dCwgTGVuZ3RoLCBEYXRhKTsNCj4gPiA+ICt9DQo+ID4gPiAr DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICBHZXQgSFRUUCBzZXJ2ZXIgcmVzcG9uc2Ug YW5kIGNvbGxlY3QgdGhlIHdob2xlIGJvZHkgYXMgYSBmaWxlLg0KPiA+ID4gKyAgU2V0IGFwcHJv cHJpYXRlIHN0YXR1cyBpbiBDb250ZXh0IChSRVFfT0ssIFJFUV9SRVBFQVQsIFJFUV9FUlJPUiku DQo+ID4gPiArICBOb3RlIHRoYXQgZXZlbiBpZiBIVFRQIHNlcnZlciByZXR1cm5zIGFuIGVycm9y IGNvZGUsIGl0IG1pZ2h0IHNlbmQNCj4gPiA+ICsgIHRoZSBib2R5IGFzIHdlbGwuIFRoaXMgYm9k eSB3aWxsIGJlIGNvbGxlY3RlZCBpbiB0aGUgcmVzdWx0YW50DQo+IGZpbGUuDQo+ID4gPiArDQo+ ID4gPiArICBAcGFyYW1baW5dICAgQ29udGV4dCAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgSFRU UCBkb3dubG9hZA0KPiBjb250ZXh0Lg0KPiA+ID4gKyAgQHBhcmFtW2luXSAgIERvd25sb2FkZWRV cmwgICBBIHBvaW50ZXIgdG8gdGhlIGZ1bGx5IHF1YWxpZmllZCBVUkwNCj4gdG8NCj4gPiA+IGRv d25sb2FkLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHVybiAgRUZJX1NVQ0NFU1MgICAgICAgICBW YWxpZCBmaWxlLiBCb2R5IHN1Y2Nlc3NmdWxseQ0KPiBjb2xsZWN0ZWQuDQo+ID4gPiArICBAcmV0 dXJuICBFRklfSFRUUF9FUlJPUiAgICAgIFJlc3BvbnNlIGlzIGEgdmFsaWQgSFRUUCByZXNwb25z ZSwgYnV0DQo+IHRoZQ0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVFRQ IHNlcnZlcg0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2F0ZWQg YW4gZXJyb3IgKEhUVFAgY29kZSA+PSA0MDApLg0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBSZXNwb25zZSBib2R5IG1heSBjb250YWluIGZ1bGwNCj4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgSFRUUCBzZXJ2ZXIgcmVzcG9uc2UuDQo+ID4gPiArICBA cmV0dXJuIE90aGVycyAgICAgICAgICAgICAgIEVycm9yIGdldHRpbmcgdGhlIHJlcG9uc2UgZnJv bSB0aGUNCj4gSFRUUCBzZXJ2ZXIuDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFJlc3BvbnNlIGJvZHkgaXMgbm90IGNvbGxlY3RlZC4NCj4gPiA+ICsqKi8NCj4gPiA+ICtT VEFUSUMNCj4gPiA+ICtFRklfU1RBVFVTDQo+ID4gPiArR2V0UmVzcG9uc2UgKA0KPiA+ID4gKyAg SU4gRE9XTkxPQURfQ09OVEVYVCAqQ29udGV4dCwNCj4gPiA+ICsgIElOIENIQVIxNiAgICAgICAg ICAgKkRvd25sb2FkVXJsDQo+ID4gPiArICApDQo+ID4gPiArew0KPiA+ID4gKyAgICBFRklfSFRU UF9SRVNQT05TRV9EQVRBICAgICAgUmVzcG9uc2VEYXRhOw0KPiA+ID4gKyAgICBFRklfSFRUUF9N RVNTQUdFICAgICAgICAgICAgUmVzcG9uc2VNZXNzYWdlOw0KPiA+ID4gKyAgICBFRklfU1RBVFVT ICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ID4gKyAgICBWT0lEICAgICAgICAgICAgICAg ICAgICAgICAgKk1zZ1BhcnNlcjsNCj4gPiA+ICsgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAg ICAgIElzVHJ1bmtlZDsNCj4gPiA+ICsNCj4gPiA+ICsgICAgWmVyb01lbSAoJlJlc3BvbnNlRGF0 YSwgc2l6ZW9mIChSZXNwb25zZURhdGEpKTsNCj4gPiA+ICsgICAgWmVyb01lbSAoJlJlc3BvbnNl TWVzc2FnZSwgc2l6ZW9mIChSZXNwb25zZU1lc3NhZ2UpKTsNCj4gPiA+ICsgICAgWmVyb01lbSAo JkNvbnRleHQtPlJlc3BvbnNlVG9rZW4sIHNpemVvZiAoQ29udGV4dC0NCj4gPiA+UmVzcG9uc2VU b2tlbikpOw0KPiA+ID4gKyAgICBJc1RydW5rZWQgPSBGQUxTRTsNCj4gPiA+ICsNCj4gPiA+ICsg ICAgUmVzcG9uc2VNZXNzYWdlLkJvZHkgPSBDb250ZXh0LT5CdWZmZXI7DQo+ID4gPiArICAgIENv bnRleHQtPlJlc3BvbnNlVG9rZW4uU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+ID4gPiArICAgIENv bnRleHQtPlJlc3BvbnNlVG9rZW4uTWVzc2FnZSA9ICZSZXNwb25zZU1lc3NhZ2U7DQo+ID4gPiAr ICAgIENvbnRleHQtPkNvbnRlbnRMZW5ndGggPSAwOw0KPiA+ID4gKyAgICBDb250ZXh0LT5TdGF0 dXMgPSBSRVFfT0s7DQo+ID4gPiArICAgIE1zZ1BhcnNlciA9IE5VTEw7DQo+ID4gPiArICAgIFJl c3BvbnNlRGF0YS5TdGF0dXNDb2RlID0gSFRUUF9TVEFUVVNfVU5TVVBQT1JURURfU1RBVFVTOw0K PiA+ID4gKyAgICBSZXNwb25zZU1lc3NhZ2UuRGF0YS5SZXNwb25zZSA9ICZSZXNwb25zZURhdGE7 DQo+ID4gPiArICAgIENvbnRleHQtPlJlc3BvbnNlVG9rZW4uRXZlbnQgPSBOVUxMOw0KPiA+ID4g Kw0KPiA+ID4gKyAgICBkbyB7DQo+ID4gPiArICAgICAgU0hFTExfRlJFRV9OT05fTlVMTCAoUmVz cG9uc2VNZXNzYWdlLkhlYWRlcnMpOw0KPiA+ID4gKyAgICAgIFJlc3BvbnNlTWVzc2FnZS5IZWFk ZXJDb3VudCA9IDA7DQo+ID4gPiArICAgICAgZ1Jlc3BvbnNlQ2FsbGJhY2tDb21wbGV0ZSA9IEZB TFNFOw0KPiA+ID4gKyAgICAgIFJlc3BvbnNlTWVzc2FnZS5Cb2R5TGVuZ3RoID0gQ29udGV4dC0+ QnVmZmVyU2l6ZTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICBpZiAoU2hlbGxHZXRFeGVjdXRpb25C cmVha0ZsYWcgKCkpIHsNCj4gPiA+ICsgICAgICAgIFN0YXR1cyA9IEVGSV9BQk9SVEVEOw0KPiA+ ID4gKyAgICAgICAgYnJlYWs7DQo+ID4gPiArICAgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAg IGlmICghQ29udGV4dC0+Q29udGVudERvd25sb2FkZWQgJiYgIUNvbnRleHQtDQo+ID4gPlJlc3Bv bnNlVG9rZW4uRXZlbnQpIHsNCj4gPiA+ICsgICAgICAgIFN0YXR1cyA9IGdCUy0+Q3JlYXRlRXZl bnQgKA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICBFVlRfTk9USUZZX1NJR05BTCwNCj4gPiA+ ICsgICAgICAgICAgICAgICAgICAgVFBMX0NBTExCQUNLLA0KPiA+ID4gKyAgICAgICAgICAgICAg ICAgICBSZXNwb25zZUNhbGxiYWNrLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICBDb250ZXh0 LA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAmQ29udGV4dC0+UmVzcG9uc2VUb2tlbi5FdmVu dA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICApOw0KPiA+ID4gKyAgICAgICAgQVNTRVJUX0VG SV9FUlJPUiAoU3RhdHVzKTsNCj4gPiA+ICsgICAgICB9IGVsc2Ugew0KPiA+ID4gKyAgICAgICAg UmVzcG9uc2VNZXNzYWdlLkRhdGEuUmVzcG9uc2UgPSBOVUxMOw0KPiA+ID4gKyAgICAgIH0NCj4g PiA+ICsNCj4gPiA+ICsgICAgICBTdGF0dXMgPSBDb250ZXh0LT5IdHRwLT5SZXNwb25zZSAoQ29u dGV4dC0+SHR0cCwgJkNvbnRleHQtDQo+ID4gPiA+UmVzcG9uc2VUb2tlbik7DQo+ID4gPiArICAg ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ID4gKyAgICAgICAgYnJlYWs7DQo+ID4g PiArICAgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAgIFN0YXR1cyA9IFdhaXRGb3JDb21wbGV0 aW9uIChDb250ZXh0LA0KPiAmZ1Jlc3BvbnNlQ2FsbGJhY2tDb21wbGV0ZSk7DQo+ID4gPiArICAg ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSAmJiBSZXNwb25zZU1lc3NhZ2UuSGVhZGVyQ291bnQp IHsNCj4gPiA+ICsgICAgICAgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KPiA+ID4gKyAgICAgIH0N Cj4gPiA+ICsNCj4gPiA+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiAr ICAgICAgICBDb250ZXh0LT5IdHRwLT5DYW5jZWwgKENvbnRleHQtPkh0dHAsDQo+ICZDb250ZXh0 LT5SZXNwb25zZVRva2VuKTsNCj4gPiA+ICsgICAgICAgIGJyZWFrOw0KPiA+ID4gKyAgICAgIH0N Cj4gPiA+ICsNCj4gPiA+ICsgICAgICBpZiAoIUNvbnRleHQtPkNvbnRlbnREb3dubG9hZGVkKSB7 DQo+ID4gPiArICAgICAgICBFRklfSFRUUF9IRUFERVIgKkhlYWRlcjsNCj4gPiA+ICsgICAgICAg IEJPT0xFQU4gICAgICAgICBSZWRpcmVjdGlvbjsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgIFJl ZGlyZWN0aW9uID0NCj4gPiA+ICsgICAgICAgICAgKChSZXNwb25zZURhdGEuU3RhdHVzQ29kZSA+ PQ0KPiA+IEhUVFBfU1RBVFVTXzMwMF9NVUxUSVBMRV9DSE9JQ0VTKQ0KPiA+ID4gJiYNCj4gPiA+ ICsgICAgICAgICAgIChSZXNwb25zZURhdGEuU3RhdHVzQ29kZSA8PQ0KPiA+ID4gSFRUUF9TVEFU VVNfMzA3X1RFTVBPUkFSWV9SRURJUkVDVCkNCj4gPiA+ICsgICAgICAgICAgKSB8fA0KPiA+ID4g KyAgICAgICAgICAoUmVzcG9uc2VEYXRhLlN0YXR1c0NvZGUgPT0NCj4gPiA+IEhUVFBfU1RBVFVT XzMwOF9QRVJNQU5FTlRfUkVESVJFQ1QpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgaWYgKFJl ZGlyZWN0aW9uKSB7DQo+ID4gPiArICAgICAgICAgIC8vDQo+ID4gPiArICAgICAgICAgIC8vIE5l ZWQgdG8gcmVwZWF0IHRoZSByZXF1ZXN0IHdpdGggbmV3IExvY2F0aW9uIChzZXJ2ZXINCj4gcmVk aXJlY3RlZCkuDQo+ID4gPiArICAgICAgICAgIC8vDQo+ID4gPiArICAgICAgICAgIENvbnRleHQt PlN0YXR1cyA9IFJFUV9ORUVEX1JFUEVBVDsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAgSGVh ZGVyID0gSHR0cEZpbmRIZWFkZXIgKA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIFJlc3Bv bnNlTWVzc2FnZS5IZWFkZXJDb3VudCwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICBSZXNw b25zZU1lc3NhZ2UuSGVhZGVycywNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAiTG9jYXRp b24iDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiA+ICsgICAgICAgICAgaWYg KEhlYWRlcikgew0KPiA+ID4gKyAgICAgICAgICAgIFN0YXR1cyA9IFNldEhvc3RVUkkgKEhlYWRl ci0+RmllbGRWYWx1ZSwgQ29udGV4dCwNCj4gRG93bmxvYWRVcmwpOw0KPiA+ID4gKyAgICAgICAg ICAgIGlmIChTdGF0dXMgPT0gRUZJX05PX01BUFBJTkcpIHsNCj4gPiA+ICsgICAgICAgICAgICAg IFNoZWxsUHJpbnRIaWlFeCAoDQo+ID4gPiArICAgICAgICAgICAgICAgIC0xLCAtMSwgTlVMTCwg U1RSSU5HX1RPS0VOIChTVFJfSFRUUF9FUlJfU1RBVFVTQ09ERSksDQo+ID4gPiArICAgICAgICAg ICAgICAgIG1IdHRwSGlpSGFuZGxlLCBDb250ZXh0LT5TZXJ2ZXJBZGRyQW5kUHJvdG8sDQo+ID4g PiArICAgICAgICAgICAgICAgIEwiUmVjdXJzaXZlIEhUVFAgc2VydmVyIHJlbG9jYXRpb24iLA0K PiA+ID4gKyAgICAgICAgICAgICAgICBDb250ZXh0LT5VUkkNCj4gPiA+ICsgICAgICAgICAgICAg ICAgKTsNCj4gPiA+ICsgICAgICAgICAgICB9DQo+ID4gPiArICAgICAgICAgIH0gZWxzZSB7DQo+ ID4gPiArICAgICAgICAgICAgLy8NCj4gPiA+ICsgICAgICAgICAgICAvLyBCYWQgcmVwbHkgZnJv bSB0aGUgc2VydmVyLiBTZXJ2ZXIgbXVzdCBzcGVjaWZ5IHRoZQ0KPiBsb2NhdGlvbi4NCj4gPiA+ ICsgICAgICAgICAgICAvLyBJbmRpY2F0ZSB0aGF0IHJlc291cmNlIHdhcyBub3QgZm91bmQsIGFu ZCBubyBib2R5DQo+IGNvbGxlY3RlZC4NCj4gPiA+ICsgICAgICAgICAgICAvLw0KPiA+ID4gKyAg ICAgICAgICAgIFN0YXR1cyA9IEVGSV9OT1RfRk9VTkQ7DQo+ID4gPiArICAgICAgICAgIH0NCj4g PiA+ICsNCj4gPiA+ICsgICAgICAgICAgQ29udGV4dC0+SHR0cC0+Q2FuY2VsIChDb250ZXh0LT5I dHRwLCAmQ29udGV4dC0NCj4gPiA+UmVzcG9uc2VUb2tlbik7DQo+ID4gPiArDQo+ID4gPiArICAg ICAgICAgIGJyZWFrOw0KPiA+ID4gKyAgICAgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAg Ly8NCj4gPiA+ICsgICAgICAgIC8vIEluaXQgbWVzc2FnZS1ib2R5IHBhcnNlciBieSBoZWFkZXIg aW5mb3JtYXRpb24uDQo+ID4gPiArICAgICAgICAvLw0KPiA+ID4gKyAgICAgICAgaWYgKCFNc2dQ YXJzZXIpIHsNCj4gPiA+ICsgICAgICAgICAgU3RhdHVzID0gSHR0cEluaXRNc2dQYXJzZXIgKA0K PiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIFJlc3BvbnNlTWVzc2FnZS5EYXRhLlJlcXVlc3Qt Pk1ldGhvZCwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICBSZXNwb25zZURhdGEuU3RhdHVz Q29kZSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICBSZXNwb25zZU1lc3NhZ2UuSGVhZGVy Q291bnQsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgUmVzcG9uc2VNZXNzYWdlLkhlYWRl cnMsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgUGFyc2VNc2csDQo+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgQ29udGV4dCwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAmTXNn UGFyc2VyDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiA+ICsgICAgICAgICAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ID4gKyAgICAgICAgICAgIGJyZWFrOw0KPiA+ ID4gKyAgICAgICAgICB9DQo+ID4gPiArICAgICAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgICAg ICAvLw0KPiA+ID4gKyAgICAgICAgLy8gSWYgaXQgaXMgYSB0cnVua2VkIG1lc3NhZ2UsIHJlbHkg b24gdGhlIHBhcnNlci4NCj4gPiA+ICsgICAgICAgIC8vDQo+ID4gPiArICAgICAgICBIZWFkZXIg PSBIdHRwRmluZEhlYWRlciAoDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS ZXNwb25zZU1lc3NhZ2UuSGVhZGVyQ291bnQsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBSZXNwb25zZU1lc3NhZ2UuSGVhZGVycywNCj4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJUcmFuc2Zlci1FbmNvZGluZyINCj4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7DQo+ID4gPiArICAgICAgICBJc1RydW5rZWQgPSAoSGVhZGVyICYmDQo+ ID4gPiArICAgICAgICAgICAgICAgICAgICAgIUFzY2lpU3RyQ21wIChIZWFkZXItPkZpZWxkVmFs dWUsICJjaHVua2VkIikNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gPiArDQo+ ID4gPiArICAgICAgICBIdHRwR2V0RW50aXR5TGVuZ3RoIChNc2dQYXJzZXIsICZDb250ZXh0LT5D b250ZW50TGVuZ3RoKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgIGlmIChSZXNwb25zZURhdGEu U3RhdHVzQ29kZSA+PSBIVFRQX1NUQVRVU180MDBfQkFEX1JFUVVFU1QNCj4gPiAmJg0KPiA+ID4g KyAgICAgICAgICAgIChSZXNwb25zZURhdGEuU3RhdHVzQ29kZSAhPQ0KPiA+ID4gSFRUUF9TVEFU VVNfMzA4X1BFUk1BTkVOVF9SRURJUkVDVCkNCj4gPiA+ICsgICAgICAgICAgICkgew0KPiA+ID4g KyAgICAgICAgICAgICAgIC8vDQo+ID4gPiArICAgICAgICAgICAgICAgLy8gU2VydmVyIHJlcG9y dGVkIGFuIGVycm9yIHZpYSBSZXNwb25zZSBjb2RlLg0KPiA+ID4gKyAgICAgICAgICAgICAgIC8v IENvbGxlY3QgdGhlIGJvZHkgaWYgYW55Lg0KPiA+ID4gKyAgICAgICAgICAgICAgIC8vDQo+ID4g PiArICAgICAgICAgICAgICAgaWYgKENvbnRleHQtPlN0YXR1cyAhPSBSRVFfRVJST1IpIHsNCj4g PiA+ICsgICAgICAgICAgICAgICAgIENvbnRleHQtPlN0YXR1cyA9IFJFUV9FUlJPUjsNCj4gPiA+ ICsgICAgICAgICAgICAgICAgIFNoZWxsUHJpbnRIaWlFeCAoDQo+ID4gPiArICAgICAgICAgICAg ICAgICAgIC0xLCAtMSwgTlVMTCwgU1RSSU5HX1RPS0VODQo+IChTVFJfSFRUUF9FUlJfU1RBVFVT Q09ERSksDQo+ID4gPiArICAgICAgICAgICAgICAgICAgIG1IdHRwSGlpSGFuZGxlLCBDb250ZXh0 LT5TZXJ2ZXJBZGRyQW5kUHJvdG8sDQo+ID4gPiArICAgICAgICAgICAgICAgICAgIEVyclN0YXR1 c0Rlc2NbUmVzcG9uc2VEYXRhLlN0YXR1c0NvZGUgLQ0KPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEhUVFBfU1RBVFVTXzQwMF9CQURfUkVRVUVTVF0sDQo+ID4gPiArICAg ICAgICAgICAgICAgICAgIENvbnRleHQtPlVSSQ0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAp Ow0KPiA+ID4gKyAgICAgICAgICAgICAgICB9DQo+ID4gPiArICAgICAgICB9DQo+ID4gPiArICAg ICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAgIC8vIERvIE5PVCB0cnkgdG8gcGFyc2UgYW4gZW1w dHkgYm9keS4NCj4gPiA+ICsgICAgICBpZiAoUmVzcG9uc2VNZXNzYWdlLkJvZHlMZW5ndGggfHwg SXNUcnVua2VkKSB7DQo+ID4gPiArICAgICAgICBTdGF0dXMgPSBIdHRwUGFyc2VNZXNzYWdlQm9k eSAoDQo+ID4gPiArICAgICAgICAgICAgICAgICAgIE1zZ1BhcnNlciwNCj4gPiA+ICsgICAgICAg ICAgICAgICAgICAgUmVzcG9uc2VNZXNzYWdlLkJvZHlMZW5ndGgsDQo+ID4gPiArICAgICAgICAg ICAgICAgICAgIFJlc3BvbnNlTWVzc2FnZS5Cb2R5DQo+ID4gPiArICAgICAgICAgICAgICAgICAg ICk7DQo+ID4gPiArICAgICAgfQ0KPiA+ID4gKyAgICB9IHdoaWxlICghSHR0cElzTWVzc2FnZUNv bXBsZXRlIChNc2dQYXJzZXIpICYmDQo+ID4gPiArICAgICAgICAgICAgICFFRklfRVJST1IgKFN0 YXR1cykgJiYNCj4gPiA+ICsgICAgICAgICAgICAgUmVzcG9uc2VNZXNzYWdlLkJvZHlMZW5ndGgN Cj4gPiA+ICsgICAgICAgICAgICAgKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgU0hFTExfRlJFRV9O T05fTlVMTCAoTXNnUGFyc2VyKTsNCj4gPiA+ICsgICAgaWYgKENvbnRleHQtPlJlc3BvbnNlVG9r ZW4uRXZlbnQpIHsNCj4gPiA+ICsgICAgICBnQlMtPkNsb3NlRXZlbnQgKENvbnRleHQtPlJlc3Bv bnNlVG9rZW4uRXZlbnQpOw0KPiA+ID4gKyAgICAgIFplcm9NZW0gKCZDb250ZXh0LT5SZXNwb25z ZVRva2VuLCBzaXplb2YgKENvbnRleHQtDQo+ID4gPlJlc3BvbnNlVG9rZW4pKTsNCj4gPiA+ICsg ICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ID4gK30NCj4gPiA+ ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgIFdvcmtlciBmdW5jdGlvbiB0aGF0IGRvd25sb2FkIHRo ZSBkYXRhIG9mIGEgZmlsZSBmcm9tIGEgSFRUUCBzZXJ2ZXINCj4gPiBnaXZlbg0KPiA+ID4gKyAg dGhlIHBhdGggb2YgdGhlIGZpbGUgYW5kIGl0cyBzaXplLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHBh cmFtW2luXSAgIENvbnRleHQgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgSFRUUCBkb3dubG9h ZA0KPiBjb250ZXh0Lg0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHZhbCAgRUZJX1NVQ0NFU1MgICAg ICAgICAgIFRoZSBmaWxlIHdhcyBkb3dubG9hZGVkLg0KPiA+ID4gKyAgQHJldHZhbCAgRUZJX09V VF9PRl9SRVNPVVJDRVMgIEEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLg0KPiA+ID4gKyAgI3Jl dHZhbCAgRUZJX0hUVFBfRVJST1IgICAgICAgIFRoZSBzZXJ2ZXIgcmV0dXJuZWQgYSB2YWxpZCBI VFRQDQo+IGVycm9yLg0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4 YW1pbmUgdGhlIG1Mb2NhbEZpbGVQYXRoIGZpbGUNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0byBnZXQgZXJyb3IgYm9keS4NCj4gPiA+ICsgIEByZXR2YWwgIE90aGVy cyAgICAgICAgICAgICAgICBUaGUgZG93bmxvYWRpbmcgb2YgdGhlIGZpbGUgZnJvbSB0aGUNCj4g c2VydmVyDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbGVkLg0K PiA+ID4gKw0KPiA+ID4gKyoqLw0KPiA+ID4gK1NUQVRJQw0KPiA+ID4gK0VGSV9TVEFUVVMNCj4g PiA+ICtEb3dubG9hZEZpbGUgKA0KPiA+ID4gKyAgSU4gICBET1dOTE9BRF9DT05URVhUICAgKkNv bnRleHQNCj4gPiA+ICsgICkNCj4gPiA+ICt7DQo+ID4gPiArICBFRklfU1RBVFVTICAgICAgICAg ICAgU3RhdHVzOw0KPiA+ID4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICpEb3dubG9hZFVybDsN Cj4gPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICBVcmxTaXplOw0KPiA+ID4gKw0KPiA+ID4g KyAgQVNTRVJUIChDb250ZXh0KTsNCj4gPiA+ICsNCj4gPiA+ICsgIERvd25sb2FkVXJsID0gTlVM TDsNCj4gPiA+ICsNCj4gPiA+ICsgIENvbnRleHQtPkJ1ZmZlciA9IEFsbG9jYXRlUG9vbCAoQ29u dGV4dC0+QnVmZmVyU2l6ZSk7DQo+ID4gPiArICBpZiAoIUNvbnRleHQtPkJ1ZmZlcikgew0KPiA+ ID4gKyAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiA+ICsgICAgZ290byBP Tl9FWElUOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIC8vIE9Q RU4gRklMRQ0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIGlmICghRUZJX0VSUk9SIChTaGVsbEZpbGVF eGlzdHMgKG1Mb2NhbEZpbGVQYXRoKSkpIHsNCj4gPiA+ICsgICAgU2hlbGxEZWxldGVGaWxlQnlO YW1lIChtTG9jYWxGaWxlUGF0aCk7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBTdGF0 dXMgPSBTaGVsbE9wZW5GaWxlQnlOYW1lICgNCj4gPiA+ICsgICAgICAgICAgICAgbUxvY2FsRmls ZVBhdGgsDQo+ID4gPiArICAgICAgICAgICAgICZtRmlsZUhhbmRsZSwNCj4gPiA+ICsgICAgICAg ICAgICAgRUZJX0ZJTEVfTU9ERV9DUkVBVEUgfA0KPiA+ID4gKyAgICAgICAgICAgICBFRklfRklM RV9NT0RFX1dSSVRFICB8DQo+ID4gPiArICAgICAgICAgICAgIEVGSV9GSUxFX01PREVfUkVBRCwN Cj4gPiA+ICsgICAgICAgICAgICAgMCk7DQo+ID4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ID4gPiArICAgIFNoZWxsUHJpbnRIaWlFeCAoDQo+ID4gPiArICAgICAgLTEsIC0xLCBO VUxMLCBTVFJJTkdfVE9LRU4gKFNUUl9HRU5fRklMRV9PUEVOX0ZBSUwpLA0KPiA+ID4gKyAgICAg IG1IdHRwSGlpSGFuZGxlLCBIVFRQX0FQUF9OQU1FLCBtTG9jYWxGaWxlUGF0aA0KPiA+ID4gKyAg ICAgICk7DQo+ID4gPiArICAgIGdvdG8gT05fRVhJVDsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4g PiA+ICsgIGRvIHsNCj4gPiA+ICsgICAgU0hFTExfRlJFRV9OT05fTlVMTCAoRG93bmxvYWRVcmwp Ow0KPiA+ID4gKyAgICBVcmxTaXplID0gMDsNCj4gPiA+ICsgICAgRG93bmxvYWRVcmwgPSBTdHJu Q2F0R3JvdyAoDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAmRG93bmxvYWRVcmwsDQo+ID4g PiArICAgICAgICAgICAgICAgICAgICAmVXJsU2l6ZSwNCj4gPiA+ICsgICAgICAgICAgICAgICAg ICAgIENvbnRleHQtPlNlcnZlckFkZHJBbmRQcm90bywNCj4gPiA+ICsgICAgICAgICAgICAgICAg ICAgIFN0ckxlbiAoQ29udGV4dC0+U2VydmVyQWRkckFuZFByb3RvKQ0KPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgKTsNCj4gPiA+ICsgICAgaWYgKENvbnRleHQtPlVSSVswXSAhPSBMJy8nKSB7 DQo+ID4gPiArICAgICAgRG93bmxvYWRVcmwgPSBTdHJuQ2F0R3JvdyAoDQo+ID4gPiArICAgICAg ICAgICZEb3dubG9hZFVybCwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgJlVybFNpemUs DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgIEwiLyIsDQo+ID4gPiArICAgICAgICAgICAg ICAgICAgICAgIFN0ckxlbiAoQ29udGV4dC0+U2VydmVyQWRkckFuZFByb3RvKQ0KPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgICApOw0KPiA+ID4gKyAgICB9DQo+ID4gPiArDQo+ID4gPiArICAg IERvd25sb2FkVXJsID0gU3RybkNhdEdyb3cgKA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg JkRvd25sb2FkVXJsLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgJlVybFNpemUsDQo+ID4g PiArICAgICAgICAgICAgICAgICAgICBDb250ZXh0LT5VUkksDQo+ID4gPiArICAgICAgICAgICAg ICAgICAgICBTdHJMZW4gKENvbnRleHQtPlVSSSkpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICBTaGVs bFByaW50SGlpRXggKA0KPiA+ID4gKyAgICAgIC0xLCAtMSwgTlVMTCwgU1RSSU5HX1RPS0VOIChT VFJfSFRUUF9ET1dOTE9BRElORyksDQo+ID4gPiArICAgICAgbUh0dHBIaWlIYW5kbGUsIERvd25s b2FkVXJsKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgU3RhdHVzID0gU2VuZFJlcXVlc3QgKENvbnRl eHQsIERvd25sb2FkVXJsKTsNCj4gPiA+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiA+ID4gKyAgICAgIGdvdG8gT05fRVhJVDsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4g KyAgICBTdGF0dXMgPSBHZXRSZXNwb25zZSAoQ29udGV4dCwgRG93bmxvYWRVcmwpOw0KPiA+ID4g Kw0KPiA+ID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiArICAgICAgZ290 byBPTl9FWElUOw0KPiA+ID4gKyAgICB9DQo+ID4gPiArICB9IHdoaWxlIChDb250ZXh0LT5TdGF0 dXMgPT0gUkVRX05FRURfUkVQRUFUKTsNCj4gPiA+ICsNCj4gPiA+ICsgIGlmIChDb250ZXh0LT5T dGF0dXMgPT0gUkVRX0VSUk9SKSB7DQo+ID4gPiArICAgIFN0YXR1cyA9IEVGSV9IVFRQX0VSUk9S Ow0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gK09OX0VYSVQ6DQo+ID4gPiArICAvLw0KPiA+ ID4gKyAgLy8gQ0xPU0UgRklMRQ0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIGlmIChtRmlsZUhhbmRs ZSkgew0KPiA+ID4gKyAgICBTaGVsbENsb3NlRmlsZSAoJm1GaWxlSGFuZGxlKTsNCj4gPiA+ICsg IH0NCj4gPiA+ICsNCj4gPiA+ICsgIFNIRUxMX0ZSRUVfTk9OX05VTEwgKERvd25sb2FkVXJsKTsN Cj4gPiA+ICsgIFNIRUxMX0ZSRUVfTk9OX05VTEwgKENvbnRleHQtPkJ1ZmZlcik7DQo+ID4gPiAr DQo+ID4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsvKioN Cj4gPiA+ICsgIFJldHJpdmUgSElJIHBhY2thZ2UgbGlzdCBmcm9tIEltYWdlSGFuZGxlIGFuZCBw dWJsaXNoIHRvIEhJSQ0KPiBkYXRhYmFzZS4NCj4gPiA+ICsNCj4gPiA+ICsgIEBwYXJhbSBJbWFn ZUhhbmRsZSAgICAgICAgICAgIFRoZSBpbWFnZSBoYW5kbGUgb2YgdGhlIHByb2Nlc3MuDQo+ID4g PiArDQo+ID4gPiArICBAcmV0dXJuIEhJSSBoYW5kbGUuDQo+ID4gPiArKiovDQo+ID4gPiArRUZJ X0hJSV9IQU5ETEUNCj4gPiA+ICtJbml0aWFsaXplSGlpUGFja2FnZSAoDQo+ID4gPiArICBFRklf SEFORExFICAgICAgICAgICAgICAgICAgSW1hZ2VIYW5kbGUNCj4gPiA+ICsgICkNCj4gPiA+ICt7 DQo+ID4gPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ID4gKyAg RUZJX0hJSV9QQUNLQUdFX0xJU1RfSEVBREVSICpQYWNrYWdlTGlzdDsNCj4gPiA+ICsgIEVGSV9I SUlfSEFORExFICAgICAgICAgICAgICBIaWlIYW5kbGU7DQo+ID4gPiArDQo+ID4gPiArICAvLw0K PiA+ID4gKyAgLy8gUmV0cmlldmUgSElJIHBhY2thZ2UgbGlzdCBmcm9tIEltYWdlSGFuZGxlDQo+ ID4gPiArICAvLw0KPiA+ID4gKyAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiA+ID4g KyAgICAgICAgICAgICBJbWFnZUhhbmRsZSwNCj4gPiA+ICsgICAgICAgICAgICAgJmdFZmlIaWlQ YWNrYWdlTGlzdFByb3RvY29sR3VpZCwNCj4gPiA+ICsgICAgICAgICAgICAgKFZPSUQgKiopJlBh Y2thZ2VMaXN0LA0KPiA+ID4gKyAgICAgICAgICAgICBJbWFnZUhhbmRsZSwNCj4gPiA+ICsgICAg ICAgICAgICAgTlVMTCwNCj4gPiA+ICsgICAgICAgICAgICAgRUZJX09QRU5fUFJPVE9DT0xfR0VU X1BST1RPQ09MDQo+ID4gPiArICAgICAgICAgICAgICk7DQo+ID4gPiArICBBU1NFUlRfRUZJX0VS Uk9SIChTdGF0dXMpOw0KPiA+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ID4g KyAgICByZXR1cm4gTlVMTDsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIC8vDQo+ID4g PiArICAvLyBQdWJsaXNoIEhJSSBwYWNrYWdlIGxpc3QgdG8gSElJIERhdGFiYXNlLg0KPiA+ID4g KyAgLy8NCj4gPiA+ICsgIFN0YXR1cyA9IGdIaWlEYXRhYmFzZS0+TmV3UGFja2FnZUxpc3QgKA0K PiA+ID4gKyAgICAgICAgICAgICBnSGlpRGF0YWJhc2UsDQo+ID4gPiArICAgICAgICAgICAgIFBh Y2thZ2VMaXN0LA0KPiA+ID4gKyAgICAgICAgICAgICBOVUxMLA0KPiA+ID4gKyAgICAgICAgICAg ICAmSGlpSGFuZGxlDQo+ID4gPiArICAgICAgICAgICAgICk7DQo+ID4gPiArICBBU1NFUlRfRUZJ X0VSUk9SIChTdGF0dXMpOw0KPiA+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ ID4gKyAgICByZXR1cm4gTlVMTDsNCj4gPiA+ICsgIH0NCj4gPiA+ICsgIHJldHVybiBIaWlIYW5k bGU7DQo+ID4gPiArfQ0KPiA+ID4gZGlmZiAtLWdpdCBhL1NoZWxsUGtnL0R5bmFtaWNDb21tYW5k L0h0dHBEeW5hbWljQ29tbWFuZC9IdHRwLmgNCj4gPiA+IGIvU2hlbGxQa2cvRHluYW1pY0NvbW1h bmQvSHR0cER5bmFtaWNDb21tYW5kL0h0dHAuaA0KPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uZGFlYmU5Y2YxNzMxDQo+ID4gPiAtLS0gL2Rldi9u dWxsDQo+ID4gPiArKysgYi9TaGVsbFBrZy9EeW5hbWljQ29tbWFuZC9IdHRwRHluYW1pY0NvbW1h bmQvSHR0cC5oDQo+ID4gPiBAQCAtMCwwICsxLDg4IEBADQo+ID4gPiArLyoqIEBmaWxlDQo+ID4g PiArICBIZWFkZXIgZmlsZSBmb3IgJ2h0dHAnIGNvbW1hbmQgZnVuY3Rpb25zLg0KPiA+ID4gKw0K PiA+ID4gKyAgQ29weXJpZ2h0IChjKSAyMDEwIC0gMjAxNywgSW50ZWwgQ29ycG9yYXRpb24uIEFs bCByaWdodHMgcmVzZXJ2ZWQuDQo+IDxCUj4NCj4gPiA+ICsgIENvcHlyaWdodCAoYykgMjAxNSwg QVJNIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4gPiArICBDb3B5cmlnaHQgKGMp IDIwMjAsIEJyb2FkY29tLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiA+ICsNCj4gPiA+ ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gPiAr DQo+ID4gPiArKiovDQo+ID4gPiArDQo+ID4gPiArI2lmbmRlZiBfSFRUUF9IXw0KPiA+ID4gKyNk ZWZpbmUgX0hUVFBfSF8NCj4gPiA+ICsNCj4gPiA+ICsjaW5jbHVkZSA8VWVmaS5oPg0KPiA+ID4g Kw0KPiA+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VMaWIuaD4NCj4gPiA+ICsjaW5jbHVkZSA8 TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQo+ID4gPiArI2luY2x1ZGUgPExpYnJhcnkvRGVidWdM aWIuaD4NCj4gPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9IaWlMaWIuaD4NCj4gPiA+ICsjaW5jbHVk ZSA8TGlicmFyeS9IdHRwTGliLmg+DQo+ID4gPiArI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxs b2NhdGlvbkxpYi5oPg0KPiA+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L05ldExpYi5oPg0KPiA+ID4g KyNpbmNsdWRlIDxMaWJyYXJ5L1ByaW50TGliLmg+DQo+ID4gPiArI2luY2x1ZGUgPExpYnJhcnkv U2hlbGxMaWIuaD4NCj4gPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFi bGVMaWIuaD4NCj4gPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpSGlpU2VydmljZXNMaWIuaD4N Cj4gPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpTGliLmg+DQo+ID4gPiArI2luY2x1ZGUgPExp YnJhcnkvVWVmaVJ1bnRpbWVTZXJ2aWNlc1RhYmxlTGliLmg+DQo+ID4gPiArDQo+ID4gPiArI2lu Y2x1ZGUgPFByb3RvY29sL0hpaVBhY2thZ2VMaXN0Lmg+DQo+ID4gPiArI2luY2x1ZGUgPFByb3Rv Y29sL0h0dHBVdGlsaXRpZXMuaD4NCj4gPiA+ICsjaW5jbHVkZSA8UHJvdG9jb2wvU2VydmljZUJp bmRpbmcuaD4NCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIEhUVFBfQVBQX05BTUUgTCJodHRwIg0K PiA+ID4gKw0KPiA+ID4gK2V4dGVybiBFRklfSElJX0hBTkRMRSBtSHR0cEhpaUhhbmRsZTsNCj4g PiA+ICsNCj4gPiA+ICt0eXBlZGVmIGVudW0gew0KPiA+ID4gKyAgUkVRX09LID0gMCwNCj4gPiA+ ICsgIFJFUV9ORUVEX1JFUEVBVCA9IDEsDQo+ID4gPiArICBSRVFfRVJST1IgPSAyDQo+ID4gPiAr fSBSRVFfU1RBVFVTOw0KPiA+ID4gKw0KPiA+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiA+ICsg IFVJTlROICAgICAgICAgICAgICAgICBDb250ZW50RG93bmxvYWRlZDsNCj4gPiA+ICsgIFVJTlRO ICAgICAgICAgICAgICAgICBDb250ZW50TGVuZ3RoOw0KPiA+ID4gKyAgVUlOVE4gICAgICAgICAg ICAgICAgIExhc3RSZXBvcnRlZE5iT2ZCeXRlczsNCj4gPiA+ICsgIFVJTlROICAgICAgICAgICAg ICAgICBCdWZmZXJTaXplOw0KPiA+ID4gKyAgUkVRX1NUQVRVUyAgICAgICAgICAgIFN0YXR1czsN Cj4gPiA+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAqQnVmZmVyOw0KPiA+ID4gKyAgQ0hBUjgg ICAgICAgICAgICAgICAgICpQcm94eVNlcnZlckFkZHI7DQo+ID4gPiArICBDSEFSMTYgICAgICAg ICAgICAgICAgKlNlcnZlckFkZHJBbmRQcm90bzsNCj4gPiA+ICsgIENIQVIxNiAgICAgICAgICAg ICAgICAqVVJJOw0KPiA+ID4gKyAgRUZJX0hUVFBfVE9LRU4gICAgICAgIFJlc3BvbnNlVG9rZW47 DQo+ID4gPiArICBFRklfSFRUUF9UT0tFTiAgICAgICAgUmVxdWVzdFRva2VuOw0KPiA+ID4gKyAg RUZJX0hUVFBfUFJPVE9DT0wgICAgICpIdHRwOw0KPiA+ID4gK30gRE9XTkxPQURfQ09OVEVYVDsN Cj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgIEZ1bmN0aW9uIGZvciAnaHR0cCcgY29tbWFu ZC4NCj4gPiA+ICsNCj4gPiA+ICsgIEBwYXJhbVtpbl0gIEltYWdlSGFuZGxlICAgICBUaGUgaW1h Z2UgaGFuZGxlLg0KPiA+ID4gKyAgQHBhcmFtW2luXSAgU3lzdGVtVGFibGUgICAgIFRoZSBzeXN0 ZW0gdGFibGUuDQo+ID4gPiArDQo+ID4gPiArICBAcmV0dmFsIFNIRUxMX1NVQ0NFU1MgICAgICAg ICAgICBDb21tYW5kIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuDQo+ID4gPiArICBAcmV0dmFsIFNI RUxMX0lOVkFMSURfUEFSQU1FVEVSICBDb21tYW5kIHVzYWdlIGVycm9yLg0KPiA+ID4gKyAgQHJl dHZhbCBTSEVMTF9BQk9SVEVEICAgICAgICAgICAgVGhlIHVzZXIgYWJvcnRzIHRoZSBvcGVyYXRp b24uDQo+ID4gPiArICBAcmV0dmFsIHZhbHVlICAgICAgICAgICAgICAgICAgICBVbmtub3duIGVy cm9yLg0KPiA+ID4gKyoqLw0KPiA+ID4gK1NIRUxMX1NUQVRVUw0KPiA+ID4gK1J1bkh0dHAgKA0K PiA+ID4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgSW1hZ2VIYW5kbGUsDQo+ID4gPiArICBJTiBF RklfU1lTVEVNX1RBQkxFICAqU3lzdGVtVGFibGUNCj4gPiA+ICsgICk7DQo+ID4gPiArDQo+ID4g PiArLyoqDQo+ID4gPiArICBSZXRyaXZlIEhJSSBwYWNrYWdlIGxpc3QgZnJvbSBJbWFnZUhhbmRs ZSBhbmQgcHVibGlzaCB0byBISUkNCj4gZGF0YWJhc2UuDQo+ID4gPiArDQo+ID4gPiArICBAcGFy YW0gSW1hZ2VIYW5kbGUgICAgICAgICAgICBUaGUgaW1hZ2UgaGFuZGxlIG9mIHRoZSBwcm9jZXNz Lg0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHVybiBISUkgaGFuZGxlLg0KPiA+ID4gKyoqLw0KPiA+ ID4gK0VGSV9ISUlfSEFORExFDQo+ID4gPiArSW5pdGlhbGl6ZUhpaVBhY2thZ2UgKA0KPiA+ID4g KyAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgIEltYWdlSGFuZGxlDQo+ID4gPiArICApOw0K PiA+ID4gKyNlbmRpZiAvLyBfSFRUUF9IXw0KPiA+ID4gZGlmZiAtLWdpdCBhL1NoZWxsUGtnL0R5 bmFtaWNDb21tYW5kL0h0dHBEeW5hbWljQ29tbWFuZC9IdHRwLnVuaQ0KPiA+ID4gYi9TaGVsbFBr Zy9EeW5hbWljQ29tbWFuZC9IdHRwRHluYW1pY0NvbW1hbmQvSHR0cC51bmkNCj4gPiA+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQo+ID4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLmFiNjJmZmFjYjgxMg0K PiA+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ID4gKysrIGIvU2hlbGxQa2cvRHluYW1pY0NvbW1hbmQv SHR0cER5bmFtaWNDb21tYW5kL0h0dHAudW5pDQo+ID4gPiBAQCAtMCwwICsxLDk1IEBADQo+ID4g PiArLy8gLyoqDQo+ID4gPiArLy8NCj4gPiA+ICsvLyAoQykgQ29weXJpZ2h0IDIwMTUtMjAxNiBI ZXdsZXR0IFBhY2thcmQgRW50ZXJwcmlzZSBEZXZlbG9wbWVudA0KPiA+IExQPEJSPg0KPiA+ID4g Ky8vIENvcHlyaWdodCAoYykgMjAxMCAtIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln aHRzIHJlc2VydmVkLg0KPiA8QlI+DQo+ID4gPiArLy8gQ29weXJpZ2h0IChjKSAyMDIwLCBCcm9h ZGNvbS4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4gPiArLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPiA+ICsvLw0KPiA+ID4gKy8vIE1vZHVs ZSBOYW1lOg0KPiA+ID4gKy8vDQo+ID4gPiArLy8gSHR0cC51bmkNCj4gPiA+ICsvLw0KPiA+ID4g Ky8vIEFic3RyYWN0Og0KPiA+ID4gKy8vDQo+ID4gPiArLy8gU3RyaW5nIGRlZmluaXRpb25zIGZv ciBVRUZJIFNoZWxsIEhUVFAgY29tbWFuZA0KPiA+ID4gKy8vDQo+ID4gPiArLy8NCj4gPiA+ICsv LyAqKi8NCj4gPiA+ICsNCj4gPiA+ICsvPSMNCj4gPiA+ICsNCj4gPiA+ICsjbGFuZ2RlZiAgIGVu LVVTICJlbmdsaXNoIg0KPiA+ID4gKw0KPiA+ID4gKyNzdHJpbmcgU1RSX0dFTl9UT09fTUFOWSAg ICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICIlSCVzJU46IFRvbw0KPiA+IG1hbnkNCj4gPiA+IGFy Z3VtZW50cy4gVHJ5IGhlbHAgaHR0cC5cclxuIg0KPiA+ID4gKyNzdHJpbmcgU1RSX0dFTl9UT09f RkVXICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICIlSCVzJU46IFRvbyBmZXcNCj4gPiA+IGFy Z3VtZW50cy4gVHJ5IGhlbHAgaHR0cC5cclxuIg0KPiA+ID4gKyNzdHJpbmcgU1RSX0dFTl9QQVJB TV9JTlYgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICIlSCVzJU46IEludmFsaWQNCj4gPiA+IGFy Z3VtZW50IC0gJyVIJXMlTicuIFRyeSBoZWxwIGh0dHAuXHJcbiINCj4gPiA+ICsjc3RyaW5nIFNU Ul9HRU5fUFJPQkxFTSAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAiJUglcyVOOiBVbmtub3du DQo+ID4gZmxhZw0KPiA+ID4gLSAnJUglcyVOJy4gVHJ5IGhlbHAgaHR0cC5cclxuIg0KPiA+ID4g KyNzdHJpbmcgU1RSX0dFTl9GSUxFX09QRU5fRkFJTCAgICAgI2xhbmd1YWdlIGVuLVVTICIlSCVz JU46IENhbm5vdA0KPiA+ID4gb3BlbiBmaWxlIC0gJyVIJXMlTidcclxuIg0KPiA+ID4gKyNzdHJp bmcgU1RSX0dFTl9DUkxGICAgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICJcclxuIg0KPiA+ ID4gKw0KPiA+ID4gKyNzdHJpbmcgU1RSX0hUVFBfRVJSX05PX05JQyAgICAgICAgI2xhbmd1YWdl IGVuLVVTICJObyBuZXR3b3JrDQo+ID4gaW50ZXJmYWNlDQo+ID4gPiBjYXJkIGZvdW5kLlxyXG4i DQo+ID4gPiArI3N0cmluZyBTVFJfSFRUUF9FUlJfTklDX05BTUUgICAgICAjbGFuZ3VhZ2UgZW4t VVMgIkZhaWxlZCB0byBnZXQgdGhlDQo+ID4gPiBuYW1lIG9mIHRoZSBuZXR3b3JrIGludGVyZmFj ZSBjYXJkIG51bWJlciAlZCAtICVyXHJcbiINCj4gPiA+ICsjc3RyaW5nIFNUUl9IVFRQX0VSUl9P UEVOX1BST1RPQ09MICNsYW5ndWFnZSBlbi1VUyAiVW5hYmxlIHRvDQo+ID4gb3Blbg0KPiA+ID4g SFRUUCBwcm90b2NvbCBvbiAnJUglcyVOJyAtICVyXHJcbiINCj4gPiA+ICsjc3RyaW5nIFNUUl9I VFRQX0VSUl9DT05GSUdVUkUgICAgICNsYW5ndWFnZSBlbi1VUyAiVW5hYmxlIHRvDQo+ID4gY29u ZmlndXJlDQo+ID4gPiBIVFRQIHByb3RvY29sIG9uICclSCVzJU4nIC0gJXJcclxuIg0KPiA+ID4g KyNzdHJpbmcgU1RSX0hUVFBfRVJSX0RPV05MT0FEICAgICAgI2xhbmd1YWdlIGVuLVVTICJVbmFi bGUgdG8NCj4gPiA+IGRvd25sb2FkIHRoZSBmaWxlICclSCVzJU4nIG9uICclSCVzJU4nIC0gJXJc clxuIg0KPiA+ID4gKyNzdHJpbmcgU1RSX0hUVFBfRVJSX1dSSVRFICAgICAgICAgI2xhbmd1YWdl IGVuLVVTICJVbmFibGUgdG8gd3JpdGUNCj4gaW50bw0KPiA+IGZpbGUNCj4gPiA+ICclSCVzJU4n IC0gJXJcclxuIg0KPiA+ID4gKyNzdHJpbmcgU1RSX0hUVFBfRVJSX05JQ19OT1RfRk9VTkQgI2xh bmd1YWdlIGVuLVVTICJOZXR3b3JrDQo+ID4gPiBJbnRlcmZhY2UgQ2FyZCAnJUglcyVOJyBub3Qg Zm91bmQuXHJcbiINCj4gPiA+ICsjc3RyaW5nIFNUUl9IVFRQX0VSUl9TVEFUVVNDT0RFICAgICNs YW5ndWFnZSBlbi1VUyAiXHInJUglcyVOJw0KPiA+IHJlcG9ydHMNCj4gPiA+ICclcycgZm9yICcl SCVzJU4nIFxyXG4iDQo+ID4gPiArI3N0cmluZyBTVFJfSFRUUF9ET1dOTE9BRElORyAgICAgICAj bGFuZ3VhZ2UgZW4tVVMgIkRvd25sb2FkaW5nDQo+ID4gPiAnJUglcyVOJ1xyXG4iDQo+ID4gPiAr DQo+ID4gPiArI3N0cmluZyBTVFJfR0VUX0hFTFBfSFRUUCAgICAgICAgICAjbGFuZ3VhZ2UgZW4t VVMgIiINCj4gPiA+ICsiLlRIIGh0dHAgMCAiRG93bmxvYWQgYSBmaWxlIGZyb20gSFRUUCBzZXJ2 ZXIuIlxyXG4iDQo+ID4gPiArIi5TSCBOQU1FXHJcbiINCj4gPiA+ICsiRG93bmxvYWQgYSBmaWxl IGZyb20gSFRUUCBzZXJ2ZXIuXHJcbiINCj4gPiA+ICsiLlNIIFNZTk9QU0lTXHJcbiINCj4gPiA+ ICsiIFxyXG4iDQo+ID4gPiArIkhUVFAgWy1pIGludGVyZmFjZV0gWy1sIDxwb3J0Pl0gWy10IDx0 aW1lb3V0Pl1cclxuIg0KPiA+ID4gKyIgICAgICBob3N0Wzpwb3J0XSBodHRwX3VyaSBbbG9jYWxm aWxlcGF0aF1cclxuIg0KPiA+ID4gKyIuU0ggT1BUSU9OU1xyXG4iDQo+ID4gPiArIiBcclxuIg0K PiA+ID4gKyIgIC1pIGludGVyZmFjZSAgICAgLSBTcGVjaWZpZXMgYW4gYWRhcHRlciBuYW1lLCBp LmUuLCBldGgwLlxyXG4iDQo+ID4gPiArIiAgLWwgcG9ydCAgICAgICAgICAtIFNwZWNpZmllcyB0 aGUgbG9jYWwgcG9ydCBudW1iZXIuIERlZmF1bHQgdmFsdWUNCj4gaXMgMFxyXG4iDQo+ID4gPiAr IiAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgcG9ydCBudW1iZXIgaXMgYXV0b21hdGljYWxs eQ0KPiBhc3NpZ25lZC5cclxuIg0KPiA+ID4gKyIgIC10IDx0aW1lb3V0PiAgICAgLSBUaGUgbnVt YmVyIG9mIHNlY29uZHMgdG8gd2FpdCBmb3IgYSByZXNwb25zZQ0KPiA+IGFmdGVyXHJcbiINCj4g PiA+ICsiICAgICAgICAgICAgICAgICAgICAgc2VuZGluZyBhIHJlcXVlc3QgcGFja2V0LiBEZWZh dWx0IHZhbHVlIGlzIDANCj4gd2hpY2ggaXMNCj4gPiA+ICdhdXRvbWF0aWMnLlxyXG4iDQo+ID4g PiArIiAgaG9zdCAgICAgICAgICAgICAtIFNwZWNpZnkgSFRUUCBTZXJ2ZXIgSVB2NCBhZGRyZXNz LlxyXG4NCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIGVpdGhlciBhZGRyZXNz IG9yICdodHRwIChvcg0KPiBodHRwcyk6Ly9hZGRyJ1xyXG4NCj4gPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgQ2FuIHVzZSBhZGRyZXNzZXMgcmVzb2x2YWJsZSBieSBETlMgYXMgd2VsbC4NCj4g XHJcbg0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICBQb3J0IGNhbiBiZSBzcGVjaWZpZWQg YWZ0ZXIgJzonIGlmIG5lZWRlZC4gXHJcbg0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICBC eSBkZWZhdWx0IHBvcnQgODAgaXMgdXNlZC5cclxuIg0KPiA+ID4gKyIgIGh0dHBfdXJpICAgICAg ICAgLSBIVFRQIHNlcnZlciBVUkkgdG8gZG93bmxvYWQgdGhlIGZpbGUuXHJcbiINCj4gPiA+ICsi ICBsb2NhbGZpbGVwYXRoICAgIC0gTG9jYWwgZGVzdGluYXRpb24gZmlsZSBwYXRoLlxyXG4iDQo+ ID4gPiArIi5TSCBERVNDUklQVElPTlxyXG4iDQo+ID4gPiArIiBcclxuIg0KPiA+ID4gKyJOT1RF UzpcclxuIg0KPiA+ID4gKyIgIDEuIFRoZSBIVFRQIGNvbW1hbmQgYWxsb3dzIGdldGluZyBvZiB0 aGUgZmlsZSBzcGVjaWZpZWQgYnkgaXRzDQo+ID4gPiAnaHR0cF91cmknXHJcbiINCj4gPiA+ICsi ICAgICBwYXRoIGZyb20gdGhlIEhUVFAgc2VydmVyIHNwZWNpZmllZCBieSBpdHMgJ2hvc3QnIElQ djQgYWRkcmVzcy4NCj4gSWYNCj4gPiB0aGVcclxuIg0KPiA+ID4gKyIgICAgIG9wdGlvbmFsICds b2NhbGZpbGVwYXRoJyBwYXJhbWV0ZXIgaXMgcHJvdmlkZWQsIHRoZSBkb3dubG9hZGVkDQo+IGZp bGUNCj4gPiBpc1xyXG4iDQo+ID4gPiArIiAgICAgc3RvcmVkIGxvY2FsbHkgdXNpbmcgdGhlIHBy b3ZpZGVkIGZpbGUgcGF0aC4gSWYgdGhlIGxvY2FsIGZpbGUNCj4gcGF0aCBpc1xyXG4iDQo+ID4g PiArIiAgICAgbm90IHNwZWNpZmllZCwgdGhlIGZpbGUgaXMgc3RvcmVkIGluIHRoZSBjdXJyZW50 IGRpcmVjdG9yeQ0KPiB1c2luZyB0aGUNCj4gPiBmaWxlXHJcbiINCj4gPiA+ICsiICAgICBzZXJ2 ZXIncyBuYW1lLlxyXG4iDQo+ID4gPiArIiAgMi4gQmVmb3JlIHVzaW5nIHRoZSBIVFRQIGNvbW1h bmQsIHRoZSBuZXR3b3JrIGludGVyZmFjZSBpbnRlbmRlZA0KPiB0bw0KPiA+ID4gYmVcclxuIg0K PiA+ID4gKyIgICAgIHVzZWQgdG8gcmV0cmlldmUgdGhlIGZpbGUgbXVzdCBiZSBjb25maWd1cmVk LiBUaGlzDQo+IGNvbmZpZ3VyYXRpb24gbWF5DQo+ID4gPiBiZVxyXG4iDQo+ID4gPiArIiAgICAg ZG9uZSBieSBtZWFucyBvZiB0aGUgJ2lmY29uZmlnJyBjb21tYW5kLlxyXG4iDQo+ID4gPiArIiAg My4gSWYgYSBuZXR3b3JrIGludGVyZmFjZSBpcyBkZWZpbmVkIHdpdGggdGhlICctaScgb3B0aW9u IHRoZW4NCj4gb25seQ0KPiA+IHRoaXNcclxuIg0KPiA+ID4gKyIgICAgIGludGVyZmFjZSB3aWxs IGJlIHVzZWQgdG8gcmV0cmlldmUgdGhlIHJlbW90ZSBmaWxlLiBPdGhlcndpc2UsDQo+IGFsbA0K PiA+ID4gbmV0d29ya1xyXG4iDQo+ID4gPiArIiAgICAgaW50ZXJmYWNlcyBhcmUgdHJpZWQgaW4g dGhlIG9yZGVyIHRoZXkgaGF2ZSBiZWVuIGRpc2NvdmVyZWQNCj4gZHVyaW5nDQo+ID4gPiB0aGVc clxuIg0KPiA+ID4gKyIgICAgIERYRSBwaGFzZS5cclxuIg0KPiA+ID4gKyIuU0ggRVhBTVBMRVNc clxuIg0KPiA+ID4gKyIgXHJcbiINCj4gPiA+ICsiRVhBTVBMRVM6XHJcbiINCj4gPiA+ICsiICAq IFRvIGdldCB0aGUgZmlsZSAiZGlyMS9maWxlMS5kYXQiIGZyb20gdGhlIEhUVFAgc2VydmVyDQo+ IDE5Mi4xNjguMS4xLCBwb3J0DQo+ID4gPiA4MDgwLCBhbmRcclxuIg0KPiA+ID4gKyIgICAgc3Rv cmUgaXQgYXMgZmlsZTIuZGF0IGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSA6XHJcbiINCj4gPiA+ ICsiICAgIGZzMDpcPiBodHRwIDE5Mi4xNjguMS4xOjgwODAgZGlyMS9maWxlMS5kYXQgZmlsZTIu ZGF0XHJcbiINCj4gPiA+ICsiICAqIFRvIGdldCB0aGUgZmlsZSAvaW1hZ2UuYmluIHZpYSBIVFRQ UyBmcm9tIHNlcnZlciAxOTIuMTY4LjEuMSBhdA0KPiBwb3J0IDQ0Mw0KPiA+ID4gXHJcbiINCj4g PiA+ICsiICAgIChkZWZhdWx0IEhUVFBTIHBvcnQpLCBhbmQgc3RvcmUgaXQgaW4gdGhlIGN1cnJl bnQgZGlyZWN0b3J5Og0KPiBcclxuIg0KPiA+ID4gKyIgICAgZnMwOlw+IGh0dHAgaHR0cHM6Ly8x OTIuMTY4LjEuMSBpbWFnZS5iaW5cclxuIg0KPiA+ID4gKyIuU0ggUkVUVVJOVkFMVUVTXHJcbiIN Cj4gPiA+ICsiIFxyXG4iDQo+ID4gPiArIlJFVFVSTiBWQUxVRVM6XHJcbiINCj4gPiA+ICsiICBT SEVMTF9TVUNDRVNTICAgICAgICAgICAgIFRoZSBhY3Rpb24gd2FzIGNvbXBsZXRlZCBhcw0KPiBy ZXF1ZXN0ZWQuXHJcbiINCj4gPiA+ICsiICBTSEVMTF9JTlZBTElEX1BBUkFNRVRFUiAgIE9uZSBv ZiB0aGUgcGFzc2VkLWluIHBhcmFtZXRlcnMgd2FzDQo+ID4gPiBpbmNvcnJlY3RseVxyXG4iDQo+ ID4gPiArIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWQgb3IgaXRzIHZhbHVl IHdhcyBvdXQgb2YNCj4gYm91bmRzLlxyXG4iDQo+ID4gPiArIiAgU0hFTExfSFRUUF9FUlJPUiAg ICAgICAgICBObyBFRkkgZXJyb3JzLCBidXQgdGhlIHNlcnZlciByZXBvcnRlZCBhDQo+IHN0YXR1 cw0KPiA+ID4gY29kZVxyXG4NCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdo aWNoIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGVycm9yLiBJZg0KPiBhbiBlcnJvciBib2R5DQo+ ID4gPiBzZW50XHJcbg0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgdGhl IHNlcnZlciwgaXQgd291bGQgYmUgc2F2ZWQgYXMNCj4gbG9jYWxmaWxlcGF0aA0KPiA+IHBhcmFt ZXRlci4iDQo+ID4gPiBkaWZmIC0tZ2l0IGEvU2hlbGxQa2cvRHluYW1pY0NvbW1hbmQvSHR0cER5 bmFtaWNDb21tYW5kL0h0dHBBcHAuYw0KPiA+ID4gYi9TaGVsbFBrZy9EeW5hbWljQ29tbWFuZC9I dHRwRHluYW1pY0NvbW1hbmQvSHR0cEFwcC5jDQo+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K PiA+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi43YmQ1YjQ2ZDM5OTcNCj4gPiA+IC0tLSAvZGV2L251 bGwNCj4gPiA+ICsrKyBiL1NoZWxsUGtnL0R5bmFtaWNDb21tYW5kL0h0dHBEeW5hbWljQ29tbWFu ZC9IdHRwQXBwLmMNCj4gPiA+IEBAIC0wLDAgKzEsNTMgQEANCj4gPiA+ICsvKiogQGZpbGUNCj4g PiA+ICsgIEVudHJ5cG9pbnQgb2YgImh0dHAiIHNoZWxsIHN0YW5kYWxvbmUgYXBwbGljYXRpb24u DQo+ID4gPiArDQo+ID4gPiArICBDb3B5cmlnaHQgKGMpIDIwMTAgLSAyMDE3LCBJbnRlbCBDb3Jw b3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gPEJSPg0KPiA+ID4gKyAgQ29weXJpZ2h0 IChjKSAyMDE1LCBBUk0gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiA+ICsgIENv cHlyaWdodCAoYykgMjAyMCwgQnJvYWRjb20uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ ID4gKw0KPiA+ID4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRl bnQNCj4gPiA+ICsNCj4gPiA+ICsqKi8NCj4gPiA+ICsjaW5jbHVkZSAiSHR0cC5oIg0KPiA+ID4g Kw0KPiA+ID4gKy8qDQo+ID4gPiArICogU3RyaW5nIHRva2VuIElEIG9mIGhlbHAgbWVzc2FnZSB0 ZXh0Lg0KPiA+ID4gKyAqIFNoZWxsIHN1cHBvcnRzIHRvIGZpbmQgaGVscCBtZXNzYWdlIGluIHRo ZSByZXNvdXJjZSBzZWN0aW9uIG9mIGFuDQo+ID4gPiArICogYXBwbGljYXRpb24gaW1hZ2UgaWYg KiAuTUFOIGZpbGUgaXMgbm90IGZvdW5kLg0KPiA+ID4gKyAqIFRoaXMgZ2xvYmFsIHZhcmlhYmxl IGlzIGFkZGVkIHRvIG1ha2UgYnVpbGQgdG9vbCByZWNvZ25pemVzDQo+ID4gPiArICogdGhhdCB0 aGUgaGVscCBzdHJpbmcgaXMgY29uc3VtZWQgYnkgdXNlciBhbmQgdGhlbiBidWlsZCB0b29sIHdp bGwNCj4gPiA+ICsgKiBhZGQgdGhlIHN0cmluZyBpbnRvIHRoZSByZXNvdXJjZSBzZWN0aW9uLg0K PiA+ID4gKyAqIFRodXMgdGhlIGFwcGxpY2F0aW9uIGNhbiB1c2UgJy0/JyBvcHRpb24gdG8gc2hv dyBoZWxwIG1lc3NhZ2UgaW4NCj4gU2hlbGwuDQo+ID4gPiArICovDQo+ID4gPiArR0xPQkFMX1JF TU9WRV9JRl9VTlJFRkVSRU5DRUQNCj4gPiA+ICtFRklfU1RSSU5HX0lEIG1TdHJpbmdIZWxwVG9r ZW5JZCA9IFNUUklOR19UT0tFTg0KPiA+IChTVFJfR0VUX0hFTFBfSFRUUCk7DQo+ID4gPiArDQo+ ID4gPiArLyoqDQo+ID4gPiArICBFbnRyeSBwb2ludCBvZiBIdHRwIHN0YW5kYWxvbmUgYXBwbGlj YXRpb24uDQo+ID4gPiArDQo+ID4gPiArICBAcGFyYW0gSW1hZ2VIYW5kbGUgICAgICAgICAgICBU aGUgaW1hZ2UgaGFuZGxlIG9mIHRoZSBwcm9jZXNzLg0KPiA+ID4gKyAgQHBhcmFtIFN5c3RlbVRh YmxlICAgICAgICAgICAgVGhlIEVGSSBTeXN0ZW0gVGFibGUgcG9pbnRlci4NCj4gPiA+ICsNCj4g PiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIEh0dHAgY29tbWFuZCBpcyBleGVj dXRlZCBzdWNlc3NmdWxseS4NCj4gPiA+ICsgIEByZXR2YWwgRUZJX0FCT1JURUQgICAgICAgICAg IEhJSSBwYWNrYWdlIHdhcyBmYWlsZWQgdG8gaW5pdGlhbGl6ZS4NCj4gPiA+ICsgIEByZXR2YWwg b3RoZXJzICAgICAgICAgICAgICAgIE90aGVyIGVycm9ycyB3aGVuIGV4ZWN1dGluZyBodHRwDQo+ IGNvbW1hbmQuDQo+ID4gPiArKiovDQo+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gK0VGSUFQSQ0K PiA+ID4gK0h0dHBBcHBJbml0aWFsaXplICgNCj4gPiA+ICsgIElOIEVGSV9IQU5ETEUgICAgICAg ICAgICAgICBJbWFnZUhhbmRsZSwNCj4gPiA+ICsgIElOIEVGSV9TWVNURU1fVEFCTEUgICAgICAg ICAqU3lzdGVtVGFibGUNCj4gPiA+ICsgICkNCj4gPiA+ICt7DQo+ID4gPiArICBFRklfU1RBVFVT ICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ID4gKyAgbUh0dHBIaWlIYW5kbGUgPSBJbml0 aWFsaXplSGlpUGFja2FnZSAoSW1hZ2VIYW5kbGUpOw0KPiA+ID4gKyAgaWYgKG1IdHRwSGlpSGFu ZGxlID09IE5VTEwpIHsNCj4gPiA+ICsgICAgcmV0dXJuIEVGSV9BQk9SVEVEOw0KPiA+ID4gKyAg fQ0KPiA+ID4gKw0KPiA+ID4gKyAgU3RhdHVzID0gKEVGSV9TVEFUVVMpUnVuSHR0cCAoSW1hZ2VI YW5kbGUsIFN5c3RlbVRhYmxlKTsNCj4gPiA+ICsNCj4gPiA+ICsgIEhpaVJlbW92ZVBhY2thZ2Vz IChtSHR0cEhpaUhhbmRsZSk7DQo+ID4gPiArDQo+ID4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ ID4gK30NCj4gPiA+IGRpZmYgLS1naXQNCj4gPiBhL1NoZWxsUGtnL0R5bmFtaWNDb21tYW5kL0h0 dHBEeW5hbWljQ29tbWFuZC9IdHRwQXBwLmluZg0KPiA+ID4gYi9TaGVsbFBrZy9EeW5hbWljQ29t bWFuZC9IdHRwRHluYW1pY0NvbW1hbmQvSHR0cEFwcC5pbmYNCj4gPiA+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0DQo+ID4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLmQwOGQ0N2ZiMzdkNQ0KPiA+ID4gLS0t IC9kZXYvbnVsbA0KPiA+ID4gKysrIGIvU2hlbGxQa2cvRHluYW1pY0NvbW1hbmQvSHR0cER5bmFt aWNDb21tYW5kL0h0dHBBcHAuaW5mDQo+ID4gPiBAQCAtMCwwICsxLDU4IEBADQo+ID4gPiArIyMg IEBmaWxlDQo+ID4gPiArIyBQcm92aWRlcyBTaGVsbCAnaHR0cCcgc3RhbmRhbG9uZSBhcHBsaWNh dGlvbi4NCj4gPiA+ICsjDQo+ID4gPiArIyBDb3B5cmlnaHQgKGMpIDIwMTAgLSAyMDE5LCBJbnRl bCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gPEJSPg0KPiA+ID4gKyMgQ29w eXJpZ2h0IChjKSAyMDE1LCBBUk0gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiA+ ICsjIENvcHlyaWdodCAoYykgMjAyMCwgQnJvYWRjb20uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJS Pg0KPiA+ID4gKyMNCj4gPiA+ICsjICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xh dXNlLVBhdGVudA0KPiA+ID4gKyMNCj4gPiA+ICsjDQo+ID4gPiArIyMNCj4gPiA+ICsNCj4gPiA+ ICtbRGVmaW5lc10NCj4gPiA+ICsgIElORl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICA9IDB4 MDAwMTAwMDYNCj4gPiA+ICsgIEJBU0VfTkFNRSAgICAgICAgICAgICAgICAgICAgICA9IGh0dHAN Cj4gPiA+ICsgIEZJTEVfR1VJRCAgICAgICAgICAgICAgICAgICAgICA9DQo+IDU2QjAwRkI3LTkx RDItODY5Qi1DRTVDLTI2Q0QxQTg5QzczQw0KPiA+ID4gKyAgTU9EVUxFX1RZUEUgICAgICAgICAg ICAgICAgICAgID0gVUVGSV9BUFBMSUNBVElPTg0KPiA+ID4gKyAgVkVSU0lPTl9TVFJJTkcgICAg ICAgICAgICAgICAgID0gMS4wDQo+ID4gPiArICBFTlRSWV9QT0lOVCAgICAgICAgICAgICAgICAg ICAgPSBIdHRwQXBwSW5pdGlhbGl6ZQ0KPiA+ID4gKyMNCj4gPiA+ICsjICBUaGlzIGZsYWcgc3Bl Y2lmaWVzIHdoZXRoZXIgSElJIHJlc291cmNlIHNlY3Rpb24gaXMgZ2VuZXJhdGVkIGludG8NCj4g UEUNCj4gPiBpbWFnZS4NCj4gPiA+ICsjDQo+ID4gPiArICBVRUZJX0hJSV9SRVNPVVJDRV9TRUNU SU9OICAgICAgPSBUUlVFDQo+ID4gPiArDQo+ID4gPiArW1NvdXJjZXMuY29tbW9uXQ0KPiA+ID4g KyAgSHR0cC5jDQo+ID4gPiArICBIdHRwQXBwLmMNCj4gPiA+ICsgIEh0dHAuaA0KPiA+ID4gKyAg SHR0cC51bmkNCj4gPiA+ICsNCj4gPiA+ICtbUGFja2FnZXNdDQo+ID4gPiArICBFbWJlZGRlZFBr Zy9FbWJlZGRlZFBrZy5kZWMNCj4gPiA+ICsgIE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVj DQo+ID4gPiArICBNZGVQa2cvTWRlUGtnLmRlYw0KPiA+ID4gKyAgTmV0d29ya1BrZy9OZXR3b3Jr UGtnLmRlYw0KPiA+ID4gKyAgU2hlbGxQa2cvU2hlbGxQa2cuZGVjDQo+ID4gPiArDQo+ID4gPiAr W0xpYnJhcnlDbGFzc2VzXQ0KPiA+ID4gKyAgQmFzZUxpYg0KPiA+ID4gKyAgQmFzZU1lbW9yeUxp Yg0KPiA+ID4gKyAgRGVidWdMaWINCj4gPiA+ICsgIEZpbGVIYW5kbGVMaWINCj4gPiA+ICsgIEhp aUxpYg0KPiA+ID4gKyAgSHR0cExpYg0KPiA+ID4gKyAgTWVtb3J5QWxsb2NhdGlvbkxpYg0KPiA+ ID4gKyAgTmV0TGliDQo+ID4gPiArICBTaGVsbExpYg0KPiA+ID4gKyAgVWVmaUFwcGxpY2F0aW9u RW50cnlQb2ludA0KPiA+ID4gKyAgVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliDQo+ID4gPiArICBV ZWZpSGlpU2VydmljZXNMaWINCj4gPiA+ICsgIFVlZmlMaWINCj4gPiA+ICsgIFVlZmlSdW50aW1l U2VydmljZXNUYWJsZUxpYg0KPiA+ID4gKw0KPiA+ID4gK1tQcm90b2NvbHNdDQo+ID4gPiArICBn RWZpSGlpUGFja2FnZUxpc3RQcm90b2NvbEd1aWQgICAgICAgICAgICAgICAgICMjIENPTlNVTUVT DQo+ID4gPiArICBnRWZpSHR0cFByb3RvY29sR3VpZCAgICAgICAgICAgICAgICAgICAgICAgICAj IyBDT05TVU1FUw0KPiA+ID4gKyAgZ0VmaUh0dHBTZXJ2aWNlQmluZGluZ1Byb3RvY29sR3VpZCAg ICAgICAgICAgIyMgQ09OU1VNRVMNCj4gPiA+ICsgIGdFZmlNYW5hZ2VkTmV0d29ya1NlcnZpY2VC aW5kaW5nUHJvdG9jb2xHdWlkICAgIyMgQ09OU1VNRVMNCj4gPiA+IGRpZmYgLS1naXQNCj4gPiA+ DQo+ID4gYS9TaGVsbFBrZy9EeW5hbWljQ29tbWFuZC9IdHRwRHluYW1pY0NvbW1hbmQvSHR0cER5 bmFtaWNDb21tYQ0KPiA+IG5kLg0KPiA+ID4gYw0KPiA+ID4NCj4gPiBiL1NoZWxsUGtnL0R5bmFt aWNDb21tYW5kL0h0dHBEeW5hbWljQ29tbWFuZC9IdHRwRHluYW1pY0NvbW1hDQo+ID4gbmQuDQo+ ID4gPiBjDQo+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ID4gaW5kZXggMDAwMDAwMDAw MDAwLi5iYTY1NDc0OWEwNzUNCj4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ICsrKw0KPiA+ID4N Cj4gPiBiL1NoZWxsUGtnL0R5bmFtaWNDb21tYW5kL0h0dHBEeW5hbWljQ29tbWFuZC9IdHRwRHlu YW1pY0NvbW1hDQo+ID4gbmQuDQo+ID4gPiBjDQo+ID4gPiBAQCAtMCwwICsxLDEzNCBAQA0KPiA+ ID4gKy8qKiBAZmlsZQ0KPiA+ID4gKyAgUHJvZHVjZSAiaHR0cCIgc2hlbGwgZHluYW1pYyBjb21t YW5kLg0KPiA+ID4gKw0KPiA+ID4gKyAgQ29weXJpZ2h0IChjKSAyMDEwIC0gMjAxNywgSW50ZWwg Q29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+IDxCUj4NCj4gPiA+ICsgIENvcHly aWdodCAoYykgMjAxNSwgQVJNIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4gPiAr ICBDb3B5cmlnaHQgKGMpIDIwMjAsIEJyb2FkY29tLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4N Cj4gPiA+ICsNCj4gPiA+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2Ut UGF0ZW50DQo+ID4gPiArDQo+ID4gPiArKiovDQo+ID4gPiArI2luY2x1ZGUgPFByb3RvY29sL1No ZWxsRHluYW1pY0NvbW1hbmQuaD4NCj4gPiA+ICsjaW5jbHVkZSAiSHR0cC5oIg0KPiA+ID4gKw0K PiA+ID4gKy8qKg0KPiA+ID4gKyAgVGhpcyBpcyB0aGUgc2hlbGwgY29tbWFuZCBoYW5kbGVyIGZ1 bmN0aW9uIHBvaW50ZXIgY2FsbGJhY2sgdHlwZS4NCj4gVGhpcw0KPiA+ID4gKyAgZnVuY3Rpb24g aGFuZGxlcyB0aGUgY29tbWFuZCB3aGVuIGl0IGlzIGludm9rZWQgaW4gdGhlIHNoZWxsLg0KPiA+ ID4gKw0KPiA+ID4gKyAgQHBhcmFtW2luXSBUaGlzICAgICAgICAgICAgICAgVGhlIGluc3RhbmNl IG9mIHRoZQ0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX1NIRUxM X0RZTkFNSUNfQ09NTUFORF9QUk9UT0NPTC4NCj4gPiA+ICsgIEBwYXJhbVtpbl0gU3lzdGVtVGFi bGUgICAgICAgIFRoZSBwb2ludGVyIHRvIHRoZSBzeXN0ZW0gdGFibGUuDQo+ID4gPiArICBAcGFy YW1baW5dIFNoZWxsUGFyYW1ldGVycyAgICBUaGUgcGFyYW1ldGVycyBhc3NvY2lhdGVkIHdpdGgg dGhlDQo+ID4gPiBjb21tYW5kLg0KPiA+ID4gKyAgQHBhcmFtW2luXSBTaGVsbCAgICAgICAgICAg ICAgVGhlIGluc3RhbmNlIG9mIHRoZSBzaGVsbCBwcm90b2NvbA0KPiB1c2VkIGluDQo+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29udGV4dCBvZiBwcm9jZXNzaW5n IHRoaXMNCj4gY29tbWFuZC4NCj4gPiA+ICsNCj4gPiA+ICsgIEByZXR1cm4gRUZJX1NVQ0NFU1Mg ICAgICAgICAgIHRoZSBvcGVyYXRpb24gd2FzIHN1Y2Vzc2Z1bA0KPiA+ID4gKyAgQHJldHVybiBv dGhlciAgICAgICAgICAgICAgICAgdGhlIG9wZXJhdGlvbiBmYWlsZWQuDQo+ID4gPiArKiovDQo+ ID4gPiArU0hFTExfU1RBVFVTDQo+ID4gPiArRUZJQVBJDQo+ID4gPiArSHR0cENvbW1hbmRIYW5k bGVyICgNCj4gPiA+ICsgIElOIEVGSV9TSEVMTF9EWU5BTUlDX0NPTU1BTkRfUFJPVE9DT0wgICAg KlRoaXMsDQo+ID4gPiArICBJTiBFRklfU1lTVEVNX1RBQkxFICAgICAgICAgICAgICAgICAgICAg ICpTeXN0ZW1UYWJsZSwNCj4gPiA+ICsgIElOIEVGSV9TSEVMTF9QQVJBTUVURVJTX1BST1RPQ09M ICAgICAgICAgKlNoZWxsUGFyYW1ldGVycywNCj4gPiA+ICsgIElOIEVGSV9TSEVMTF9QUk9UT0NP TCAgICAgICAgICAgICAgICAgICAgKlNoZWxsDQo+ID4gPiArICApDQo+ID4gPiArew0KPiA+ID4g KyAgZ0VmaVNoZWxsUGFyYW1ldGVyc1Byb3RvY29sID0gU2hlbGxQYXJhbWV0ZXJzOw0KPiA+ID4g KyAgZ0VmaVNoZWxsUHJvdG9jb2wgICAgICAgICAgID0gU2hlbGw7DQo+ID4gPiArDQo+ID4gPiAr ICByZXR1cm4gUnVuSHR0cCAoZ0ltYWdlSGFuZGxlLCBTeXN0ZW1UYWJsZSk7DQo+ID4gPiArfQ0K PiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAgVGhpcyBpcyB0aGUgY29tbWFuZCBoZWxwIGhh bmRsZXIgZnVuY3Rpb24gcG9pbnRlciBjYWxsYmFjayB0eXBlLg0KPiBUaGlzDQo+ID4gPiArICBm dW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZGlzcGxheWluZyBoZWxwIGluZm9ybWF0aW9uIGZv ciB0aGUNCj4gYXNzb2NpYXRlZA0KPiA+ID4gKyAgY29tbWFuZC4NCj4gPiA+ICsNCj4gPiA+ICsg IEBwYXJhbVtpbl0gVGhpcyAgICAgICAgVGhlIGluc3RhbmNlIG9mIHRoZQ0KPiA+ID4gRUZJX1NI RUxMX0RZTkFNSUNfQ09NTUFORF9QUk9UT0NPTC4NCj4gPiA+ICsgIEBwYXJhbVtpbl0gTGFuZ3Vh Z2UgICAgVGhlIHBvaW50ZXIgdG8gdGhlIGxhbmd1YWdlIHN0cmluZyB0byB1c2UuDQo+ID4gPiAr DQo+ID4gPiArICBAcmV0dXJuIHN0cmluZyAgICAgICAgIFBvb2wgYWxsb2NhdGVkIGhlbHAgc3Ry aW5nLCBtdXN0IGJlIGZyZWVkIGJ5DQo+IGNhbGxlcg0KPiA+ID4gKyoqLw0KPiA+ID4gK0NIQVIx NiAqDQo+ID4gPiArRUZJQVBJDQo+ID4gPiArSHR0cENvbW1hbmRHZXRIZWxwICgNCj4gPiA+ICsg IElOIEVGSV9TSEVMTF9EWU5BTUlDX0NPTU1BTkRfUFJPVE9DT0wgICAgKlRoaXMsDQo+ID4gPiAr ICBJTiBDT05TVCBDSEFSOCAgICAgICAgICAgICAgICAgICAgICAgICAgICpMYW5ndWFnZQ0KPiA+ ID4gKyAgKQ0KPiA+ID4gK3sNCj4gPiA+ICsgIHJldHVybiBIaWlHZXRTdHJpbmcobUh0dHBIaWlI YW5kbGUsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgIFNUUklOR19UT0tFTiAoU1RSX0dF VF9IRUxQX0hUVFApLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICBMYW5ndWFnZSk7DQo+ ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK0VGSV9TSEVMTF9EWU5BTUlDX0NPTU1BTkRfUFJPVE9D T0wgbUh0dHBEeW5hbWljQ29tbWFuZA0KPiA+ID0gew0KPiA+ID4gKyAgSFRUUF9BUFBfTkFNRSwN Cj4gPiA+ICsgIEh0dHBDb21tYW5kSGFuZGxlciwNCj4gPiA+ICsgIEh0dHBDb21tYW5kR2V0SGVs cA0KPiA+ID4gK307DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICBFbnRyeSBwb2ludCBv ZiBIdHRwIER5bmFtaWMgQ29tbWFuZC4NCj4gPiA+ICsNCj4gPiA+ICsgIFByb2R1Y2UgdGhlIER5 bmFtaWNDb21tYW5kIHByb3RvY29sIHRvIGhhbmRsZSAiaHR0cCIgY29tbWFuZC4NCj4gPiA+ICsN Cj4gPiA+ICsgIEBwYXJhbSBJbWFnZUhhbmRsZSAgICAgICAgICAgIFRoZSBpbWFnZSBoYW5kbGUg b2YgdGhlIHByb2Nlc3MuDQo+ID4gPiArICBAcGFyYW0gU3lzdGVtVGFibGUgICAgICAgICAgICBU aGUgRUZJIFN5c3RlbSBUYWJsZSBwb2ludGVyLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICAgICAgSHR0cCBjb21tYW5kIGlzIGV4ZWN1dGVkIHN1Y2Vzc2Z1bGx5 Lg0KPiA+ID4gKyAgQHJldHZhbCBFRklfQUJPUlRFRCAgICAgICAgICAgSElJIHBhY2thZ2Ugd2Fz IGZhaWxlZCB0byBpbml0aWFsaXplLg0KPiA+ID4gKyAgQHJldHZhbCBvdGhlcnMgICAgICAgICAg ICAgICAgT3RoZXIgZXJyb3JzIHdoZW4gZXhlY3V0aW5nIGh0dHANCj4gY29tbWFuZC4NCj4gPiA+ ICsqKi8NCj4gPiA+ICtFRklfU1RBVFVTDQo+ID4gPiArRUZJQVBJDQo+ID4gPiArSHR0cENvbW1h bmRJbml0aWFsaXplICgNCj4gPiA+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICBJbWFn ZUhhbmRsZSwNCj4gPiA+ICsgIElOIEVGSV9TWVNURU1fVEFCTEUgICAgICAgICAqU3lzdGVtVGFi bGUNCj4gPiA+ICsgICkNCj4gPiA+ICt7DQo+ID4gPiArICBFRklfU1RBVFVTICAgICAgICAgICAg ICAgICAgU3RhdHVzOw0KPiA+ID4gKw0KPiA+ID4gKyAgbUh0dHBIaWlIYW5kbGUgPSBJbml0aWFs aXplSGlpUGFja2FnZSAoSW1hZ2VIYW5kbGUpOw0KPiA+ID4gKyAgaWYgKG1IdHRwSGlpSGFuZGxl ID09IE5VTEwpIHsNCj4gPiA+ICsgICAgcmV0dXJuIEVGSV9BQk9SVEVEOw0KPiA+ID4gKyAgfQ0K PiA+ID4gKw0KPiA+ID4gKyAgU3RhdHVzID0gZ0JTLT5JbnN0YWxsUHJvdG9jb2xJbnRlcmZhY2Ug KA0KPiA+ID4gKyAgICAgICAgICAgICAmSW1hZ2VIYW5kbGUsDQo+ID4gPiArICAgICAgICAgICAg ICZnRWZpU2hlbGxEeW5hbWljQ29tbWFuZFByb3RvY29sR3VpZCwNCj4gPiA+ICsgICAgICAgICAg ICAgRUZJX05BVElWRV9JTlRFUkZBQ0UsDQo+ID4gPiArICAgICAgICAgICAgICZtSHR0cER5bmFt aWNDb21tYW5kDQo+ID4gPiArICAgICAgICAgICAgICk7DQo+ID4gPiArICBBU1NFUlRfRUZJX0VS Uk9SIChTdGF0dXMpOw0KPiA+ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiA+ICt9DQo+ID4gPiAr DQo+ID4gPiArLyoqDQo+ID4gPiArICBIdHRwIGRyaXZlciB1bmxvYWQgaGFuZGxlci4NCj4gPiA+ ICsNCj4gPiA+ICsgIEBwYXJhbSBJbWFnZUhhbmRsZSAgICAgICAgICAgIFRoZSBpbWFnZSBoYW5k bGUgb2YgdGhlIHByb2Nlc3MuDQo+ID4gPiArDQo+ID4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICAgICBUaGUgaW1hZ2UgaXMgdW5sb2FkZWQuDQo+ID4gPiArICBAcmV0dmFsIE90aGVy cyAgICAgICAgICAgICAgICBGYWlsZWQgdG8gdW5sb2FkIHRoZSBpbWFnZS4NCj4gPiA+ICsqKi8N Cj4gPiA+ICtFRklfU1RBVFVTDQo+ID4gPiArRUZJQVBJDQo+ID4gPiArSHR0cFVubG9hZCAoDQo+ ID4gPiArICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgSW1hZ2VIYW5kbGUNCj4gPiA+ICsp DQo+ID4gPiArew0KPiA+ID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgIFN0YXR1czsN Cj4gPiA+ICsgIFN0YXR1cyA9IGdCUy0+VW5pbnN0YWxsUHJvdG9jb2xJbnRlcmZhY2UgKA0KPiA+ ID4gKyAgICAgICAgICAgICBJbWFnZUhhbmRsZSwNCj4gPiA+ICsgICAgICAgICAgICAgJmdFZmlT aGVsbER5bmFtaWNDb21tYW5kUHJvdG9jb2xHdWlkLA0KPiA+ID4gKyAgICAgICAgICAgICAmbUh0 dHBEeW5hbWljQ29tbWFuZA0KPiA+ID4gKyAgICAgICAgICAgICApOw0KPiA+ID4gKyAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ID4gKyAg fQ0KPiA+ID4gKw0KPiA+ID4gKyAgSGlpUmVtb3ZlUGFja2FnZXMgKG1IdHRwSGlpSGFuZGxlKTsN Cj4gPiA+ICsNCj4gPiA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiA+ICt9DQo+ID4gPiBk aWZmIC0tZ2l0DQo+ID4gPg0KPiA+IGEvU2hlbGxQa2cvRHluYW1pY0NvbW1hbmQvSHR0cER5bmFt aWNDb21tYW5kL0h0dHBEeW5hbWljQ29tbWENCj4gPiBuZC4NCj4gPiA+IGluZg0KPiA+ID4NCj4g PiBiL1NoZWxsUGtnL0R5bmFtaWNDb21tYW5kL0h0dHBEeW5hbWljQ29tbWFuZC9IdHRwRHluYW1p Y0NvbW1hDQo+ID4gbmQuDQo+ID4gPiBpbmYNCj4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ ID4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjVkNDZlZTIzODRkNQ0KPiA+ID4gLS0tIC9kZXYvbnVs bA0KPiA+ID4gKysrDQo+ID4gPg0KPiA+IGIvU2hlbGxQa2cvRHluYW1pY0NvbW1hbmQvSHR0cER5 bmFtaWNDb21tYW5kL0h0dHBEeW5hbWljQ29tbWENCj4gPiBuZC4NCj4gPiA+IGluZg0KPiA+ID4g QEAgLTAsMCArMSw2MyBAQA0KPiA+ID4gKyMjICBAZmlsZQ0KPiA+ID4gKyMgUHJvdmlkZXMgU2hl bGwgJ2h0dHAnIGR5bmFtaWMgY29tbWFuZC4NCj4gPiA+ICsjDQo+ID4gPiArIyBDb3B5cmlnaHQg KGMpIDIwMTAgLSAyMDE5LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4N Cj4gPEJSPg0KPiA+ID4gKyMgQ29weXJpZ2h0IChjKSAyMDE1LCBBUk0gTHRkLiBBbGwgcmlnaHRz IHJlc2VydmVkLjxCUj4NCj4gPiA+ICsjIENvcHlyaWdodCAoYykgMjAyMCwgQnJvYWRjb20uIEFs bCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ID4gKyMNCj4gPiA+ICsjICBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ID4gKyMNCj4gPiA+ICsjDQo+ID4g PiArIyMNCj4gPiA+ICsNCj4gPiA+ICtbRGVmaW5lc10NCj4gPiA+ICsgIElORl9WRVJTSU9OICAg ICAgICAgICAgICAgICAgICA9IDB4MDAwMTAwMDYNCj4gPiA+ICsgIEJBU0VfTkFNRSAgICAgICAg ICAgICAgICAgICAgICA9IGh0dHBEeW5hbWljQ29tbWFuZA0KPiA+ID4gKyAgRklMRV9HVUlEICAg ICAgICAgICAgICAgICAgICAgID0NCj4gMTk2MThCQ0UtNTVBRS0wOUM2LTM3RTktNENFMDQwODRD N0ExDQo+ID4gPiArICBNT0RVTEVfVFlQRSAgICAgICAgICAgICAgICAgICAgPSBEWEVfRFJJVkVS DQo+ID4gPiArICBWRVJTSU9OX1NUUklORyAgICAgICAgICAgICAgICAgPSAxLjANCj4gPiA+ICsg IEVOVFJZX1BPSU5UICAgICAgICAgICAgICAgICAgICA9IEh0dHBDb21tYW5kSW5pdGlhbGl6ZQ0K PiA+ID4gKyAgVU5MT0FEX0lNQUdFICAgICAgICAgICAgICAgICAgID0gSHR0cFVubG9hZA0KPiA+ ID4gKyMNCj4gPiA+ICsjICBUaGlzIGZsYWcgc3BlY2lmaWVzIHdoZXRoZXIgSElJIHJlc291cmNl IHNlY3Rpb24gaXMgZ2VuZXJhdGVkIGludG8NCj4gUEUNCj4gPiBpbWFnZS4NCj4gPiA+ICsjDQo+ ID4gPiArICBVRUZJX0hJSV9SRVNPVVJDRV9TRUNUSU9OICAgICAgPSBUUlVFDQo+ID4gPiArDQo+ ID4gPiArW1NvdXJjZXMuY29tbW9uXQ0KPiA+ID4gKyAgSHR0cC5jDQo+ID4gPiArICBIdHRwRHlu YW1pY0NvbW1hbmQuYw0KPiA+ID4gKyAgSHR0cC5oDQo+ID4gPiArICBIdHRwLnVuaQ0KPiA+ID4g Kw0KPiA+ID4gK1tQYWNrYWdlc10NCj4gPiA+ICsgIEVtYmVkZGVkUGtnL0VtYmVkZGVkUGtnLmRl Yw0KPiA+ID4gKyAgTWRlUGtnL01kZVBrZy5kZWMNCj4gPiA+ICsgIE1kZU1vZHVsZVBrZy9NZGVN b2R1bGVQa2cuZGVjDQo+ID4gPiArICBOZXR3b3JrUGtnL05ldHdvcmtQa2cuZGVjDQo+ID4gPiAr ICBTaGVsbFBrZy9TaGVsbFBrZy5kZWMNCj4gPiA+ICsNCj4gPiA+ICtbTGlicmFyeUNsYXNzZXNd DQo+ID4gPiArICBCYXNlTGliDQo+ID4gPiArICBCYXNlTWVtb3J5TGliDQo+ID4gPiArICBEZWJ1 Z0xpYg0KPiA+ID4gKyAgRmlsZUhhbmRsZUxpYg0KPiA+ID4gKyAgSGlpTGliDQo+ID4gPiArICBI dHRwTGliDQo+ID4gPiArICBNZW1vcnlBbGxvY2F0aW9uTGliDQo+ID4gPiArICBOZXRMaWINCj4g PiA+ICsgIFNoZWxsTGliDQo+ID4gPiArICBVZWZpQm9vdFNlcnZpY2VzVGFibGVMaWINCj4gPiA+ ICsgIFVlZmlEcml2ZXJFbnRyeVBvaW50DQo+ID4gPiArICBVZWZpSGlpU2VydmljZXNMaWINCj4g PiA+ICsgIFVlZmlMaWINCj4gPiA+ICsgIFVlZmlSdW50aW1lU2VydmljZXNUYWJsZUxpYg0KPiA+ ID4gKw0KPiA+ID4gK1tQcm90b2NvbHNdDQo+ID4gPiArICBnRWZpSGlpUGFja2FnZUxpc3RQcm90 b2NvbEd1aWQgICAgICAgICAgICAgICAgICMjIENPTlNVTUVTDQo+ID4gPiArICBnRWZpSHR0cFBy b3RvY29sR3VpZCAgICAgICAgICAgICAgICAgICAgICAgICAjIyBDT05TVU1FUw0KPiA+ID4gKyAg Z0VmaUh0dHBTZXJ2aWNlQmluZGluZ1Byb3RvY29sR3VpZCAgICAgICAgICAgIyMgQ09OU1VNRVMN Cj4gPiA+ICsgIGdFZmlNYW5hZ2VkTmV0d29ya1NlcnZpY2VCaW5kaW5nUHJvdG9jb2xHdWlkICAg IyMgQ09OU1VNRVMNCj4gPiA+ICsgIGdFZmlTaGVsbER5bmFtaWNDb21tYW5kUHJvdG9jb2xHdWlk ICAgICAgICAgICAgIyMgUFJPRFVDRVMNCj4gPiA+ICsNCj4gPiA+ICtbREVQRVhdDQo+ID4gPiAr ICBUUlVFDQo+ID4gPiBkaWZmIC0tZ2l0IGEvU2hlbGxQa2cvSW5jbHVkZS9HdWlkL1NoZWxsTGli SGlpR3VpZC5oDQo+ID4gPiBiL1NoZWxsUGtnL0luY2x1ZGUvR3VpZC9TaGVsbExpYkhpaUd1aWQu aA0KPiA+ID4gaW5kZXggNWRhOTEyODMzM2E0Li5kNWYyY2VhYzA3YTkgMTAwNjQ0DQo+ID4gPiAt LS0gYS9TaGVsbFBrZy9JbmNsdWRlL0d1aWQvU2hlbGxMaWJIaWlHdWlkLmgNCj4gPiA+ICsrKyBi L1NoZWxsUGtnL0luY2x1ZGUvR3VpZC9TaGVsbExpYkhpaUd1aWQuaA0KPiA+ID4gQEAgLTU4LDcg KzU4LDExIEBADQo+ID4gPiAgICB7IFwNCj4gPiA+ICAgICAgMHg3MzhhOTMxNCwgMHg4MmMxLCAw eDQ1OTIsIHsgMHg4ZiwgMHhmNywgMHhjMSwgMHhiZCwgMHhmMSwgMHhiMiwNCj4gMHgwZSwNCj4g PiAweGQ0DQo+ID4gPiB9IFwNCj4gPiA+ICAgIH0NCj4gPiA+IC0NCj4gPiA+ICsNCj4gPiA+ICsj ZGVmaW5lIFNIRUxMX0hUVFBfSElJX0dVSUQgXA0KPiA+ID4gKyAgeyBcDQo+ID4gPiArICAgIDB4 MzkwZjg0YjMsIDB4MjIxYywgMHg0ZDllLCB7IDB4YjUsIDB4MDYsIDB4NmQsIDB4YjksIDB4NDIs IDB4M2UsDQo+IDB4MGEsDQo+ID4gPiAweDdlIH0gXA0KPiA+ID4gKyAgfQ0KPiA+ID4NCj4gPiA+ ICAjZGVmaW5lIFNIRUxMX0JDRkdfSElJX0dVSUQgXA0KPiA+ID4gICAgeyBcDQo+ID4gPiBAQCAt NzUsNiArNzksNyBAQCBleHRlcm4gRUZJX0dVSUQgZ1NoZWxsTGV2ZWwzSGlpR3VpZDsNCj4gPiA+ ICBleHRlcm4gRUZJX0dVSUQgZ1NoZWxsTmV0d29yazFIaWlHdWlkOw0KPiA+ID4gIGV4dGVybiBF RklfR1VJRCBnU2hlbGxOZXR3b3JrMkhpaUd1aWQ7DQo+ID4gPiAgZXh0ZXJuIEVGSV9HVUlEIGdT aGVsbFRmdHBIaWlHdWlkOw0KPiA+ID4gK2V4dGVybiBFRklfR1VJRCBnU2hlbGxIdHRwSGlpR3Vp ZDsNCj4gPiA+ICBleHRlcm4gRUZJX0dVSUQgZ1NoZWxsQmNmZ0hpaUd1aWQ7DQo+ID4gPg0KPiA+ ID4gICNlbmRpZg0KPiA+ID4gZGlmZiAtLWdpdCBhL1NoZWxsUGtnL1NoZWxsUGtnLmRlYyBiL1No ZWxsUGtnL1NoZWxsUGtnLmRlYw0KPiA+ID4gaW5kZXggYzE3ZTM1OGQxNWVkLi5mODBhMjk2MmRm ZDEgMTAwNjQ0DQo+ID4gPiAtLS0gYS9TaGVsbFBrZy9TaGVsbFBrZy5kZWMNCj4gPiA+ICsrKyBi L1NoZWxsUGtnL1NoZWxsUGtnLmRlYw0KPiA+ID4gQEAgLTUwLDYgKzUwLDcgQEAgW0d1aWRzXQ0K PiA+ID4gICAgZ1NoZWxsTmV0d29yazFIaWlHdWlkICAgICAgICAgICA9IHsweGYzZDMwMWJiLCAw eGY0YTUsIDB4NDVhOCwNCj4gezB4YjAsIDB4YjcsDQo+ID4gPiAweGZhLCAweDk5LCAweDljLCAw eDYyLCAweDM3LCAweGFlfX0NCj4gPiA+ICAgIGdTaGVsbE5ldHdvcmsySGlpR3VpZCAgICAgICAg ICAgPSB7MHgxNzRiMmI1LCAweGY1MDUsIDB4NGIxMiwNCj4gezB4YWEsIDB4NjAsDQo+ID4gPiAw eDU5LCAweGRmLCAweGY4LCAweGQ2LCAweGVhLCAweDM3fX0NCj4gPiA+ICAgIGdTaGVsbFRmdHBI aWlHdWlkICAgICAgICAgICAgICAgPSB7MHg3MzhhOTMxNCwgMHg4MmMxLCAweDQ1OTIsDQo+IHsw eDhmLCAweGY3LCAweGMxLA0KPiA+ID4gMHhiZCwgMHhmMSwgMHhiMiwgMHgwZSwgMHhkNH19DQo+ ID4gPiArICBnU2hlbGxIdHRwSGlpR3VpZCAgICAgICAgICAgICAgID0gezB4MzkwZjg0YjMsIDB4 MjIxYywgMHg0ZDllLA0KPiB7MHhiNSwgMHgwNiwNCj4gPiAweDZkLA0KPiA+ID4gMHhiOSwgMHg0 MiwgMHgzZSwgMHgwYSwgMHg3ZX19DQo+ID4gPiAgICBnU2hlbGxCY2ZnSGlpR3VpZCAgICAgICAg ICAgICAgID0gezB4NWY1ZjYwNWQsIDB4MTU4MywgMHg0YTJkLA0KPiB7MHhhNiwgMHhiMiwgMHhl YiwNCj4gPiA+IDB4MTIsIDB4ZGEsIDB4YjQsIDB4YTIsIDB4YjZ9fQ0KPiA+ID4gICAgZ1NoZWxs QWNwaVZpZXdIaWlHdWlkICAgICAgICAgICA9IHsweGRhOGNjZGY0LCAweGVkOGYsIDB4NGZmYywN Cj4gezB4YjUsIDB4ZWYsDQo+ID4gMHgyZSwNCj4gPiA+IDB4ZjUsIDB4NWUsIDB4MjQsIDB4OTMs IDB4MmF9fQ0KPiA+ID4gICAgIyBGSUxFX0dVSUQgYXMgZGVmaW5lZCBpbiBTaGVsbFBrZy9BcHBs aWNhdGlvbi9TaGVsbC9TaGVsbC5pbmYNCj4gPiA+IGRpZmYgLS1naXQgYS9TaGVsbFBrZy9TaGVs bFBrZy5kc2MgYi9TaGVsbFBrZy9TaGVsbFBrZy5kc2MNCj4gPiA+IGluZGV4IDkxNDkzNDAwY2Fi Ny4uYWVlMDAyNDUxODVkIDEwMDY0NA0KPiA+ID4gLS0tIGEvU2hlbGxQa2cvU2hlbGxQa2cuZHNj DQo+ID4gPiArKysgYi9TaGVsbFBrZy9TaGVsbFBrZy5kc2MNCj4gPiA+IEBAIC0xMzcsNiArMTM3 LDExIEBAIFtDb21wb25lbnRzXQ0KPiA+ID4gICAgICAgIGdFZmlTaGVsbFBrZ1Rva2VuU3BhY2VH dWlkLlBjZFNoZWxsTGliQXV0b0luaXRpYWxpemV8RkFMU0UNCj4gPiA+ICAgIH0NCj4gPiA+ICAg IFNoZWxsUGtnL0R5bmFtaWNDb21tYW5kL1RmdHBEeW5hbWljQ29tbWFuZC9UZnRwQXBwLmluZg0K PiA+ID4gKw0KPiA+ID4NCj4gPiBTaGVsbFBrZy9EeW5hbWljQ29tbWFuZC9IdHRwRHluYW1pY0Nv bW1hbmQvSHR0cER5bmFtaWNDb21tYW5kDQo+ID4gLmluDQo+ID4gPiBmIHsNCj4gPiA+ICsgICAg PFBjZHNGaXhlZEF0QnVpbGQ+DQo+ID4gPiArICAgICAgZ0VmaVNoZWxsUGtnVG9rZW5TcGFjZUd1 aWQuUGNkU2hlbGxMaWJBdXRvSW5pdGlhbGl6ZXxGQUxTRQ0KPiA+ID4gKyAgfQ0KPiA+ID4gKyAg U2hlbGxQa2cvRHluYW1pY0NvbW1hbmQvSHR0cER5bmFtaWNDb21tYW5kL0h0dHBBcHAuaW5mDQo+ ID4gPg0KPiA+IFNoZWxsUGtnL0R5bmFtaWNDb21tYW5kL0RwRHluYW1pY0NvbW1hbmQvRHBEeW5h bWljQ29tbWFuZC5pbmYNCj4gPiA+IHsNCj4gPiA+ICAgICAgPFBjZHNGaXhlZEF0QnVpbGQ+DQo+ ID4gPiAgICAgICAgZ0VmaVNoZWxsUGtnVG9rZW5TcGFjZUd1aWQuUGNkU2hlbGxMaWJBdXRvSW5p dGlhbGl6ZXxGQUxTRQ0KPiA+ID4gLS0NCj4gPiA+IDIuMTcuMQ0KPiA+ID4NCj4gPiA+DQo+ID4g PiANCg==