From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by mx.groups.io with SMTP id smtpd.web09.9780.1607584706655939520 for ; Wed, 09 Dec 2020 23:18:27 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=EuA51f54; spf=pass (domain: intel.com, ip: 134.134.136.126, mailfrom: michael.d.kinney@intel.com) IronPort-SDR: zg8x7Kh3Ke0GQOn4BH+QPQDDz6tQlhig4lag0/NXqUU14okNjt4c46tX2Y1ldslpjRWIWQ9VQr MP8gfSOaKtuA== X-IronPort-AV: E=McAfee;i="6000,8403,9830"; a="161967814" X-IronPort-AV: E=Sophos;i="5.78,407,1599548400"; d="scan'208";a="161967814" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Dec 2020 23:18:25 -0800 IronPort-SDR: F0JT8mhtsTErBowGfbkrd8AK7Z6pkIMkOl/VKyrjsNBjLOvyVVLWJSxF+PJRE+sWTHetj2qJ86 51ZUAS7v3GsQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.78,407,1599548400"; d="scan'208";a="318865586" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by fmsmga008.fm.intel.com with ESMTP; 09 Dec 2020 23:18:24 -0800 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 9 Dec 2020 23:18:24 -0800 Received: from fmsmsx604.amr.corp.intel.com (10.18.126.84) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 9 Dec 2020 23:18:24 -0800 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by fmsmsx604.amr.corp.intel.com (10.18.126.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5 via Frontend Transport; Wed, 9 Dec 2020 23:18:23 -0800 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.101) by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.1713.5; Wed, 9 Dec 2020 23:18:23 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Zopv8Cs19GIvx83xW80JSXIa0Pr2LwSxg9qLDG65lu5hcpV0lkKbkkqMtwXkaKJI4yOBPHr5H4qtzKYptXimKpHwSUGEqer4I35442bC152HHVPgU2ZN75SaDvECtQS7rYfFsUhnpNzVIxmR+uJsFtzjvvDKe0k4dsbkxwwHxeJLsoXG/NjFEgIN58tQgy0ylYXg53MHlUhGU/naJqEH0nI3CBLK9PTSYcRwRMLkyZ4B3AgTRdEzo5jK90lPBXD430yjnNnw5wBmF63B09aiZv92RAynp6WcthhU87oCNtQi36uU4nd87F87Bf1LzVcjJZYJIbvSKKdVmY8zNtJHgw== 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=VAePnVA2QM2vgwcRrRiOCwwJ64Y04GvsigX6j0UxpXw=; b=GW999z1J2WEYH+sQnZ8J/a2Ex7oKuqCkI3WL77USShEZ83oUhy11bDA8rkllppiBUqK6fbJ8F3r8ngvXbqfhGIRzFq0/tCp4IEdQ56/CmKZ7Sv9m/TJuLf9Vhqj+NwVZMPru+Ln0C9ttkagyToMpQbzbrj1Ur23ebLRt8KsxfUvR2NEypffHQ9yhw5jAj07xuqwzwhUB8+6j2BoJ1779x7kAttJFhnV+XUUeHxJUX3ATVSvkjwSHvfXhlC8GfyJV4F/Cgx/mjEFwZw3mTUp9lHZmg4OC0MQrpVYShKlIxi2LfGqqVljLCNdnET1d0Vagu796E5k9cx8jNSF4c8PunA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=VAePnVA2QM2vgwcRrRiOCwwJ64Y04GvsigX6j0UxpXw=; b=EuA51f54TQOT3pnD6QdvkBvJC+2pqwyr3J8LLKoMLVAlSOb/9PMqxky7KQCkYDS/svATw4cqlbus67bNMhO3w0nPySgtVNdoCivKc+0azky2izFrfWCbvoZ+ooUIZl8anbB0cKcFf3KrlpoEEth/d3+8Jhd78QIIlAqgjez02lQ= Received: from BL0PR11MB3236.namprd11.prod.outlook.com (2603:10b6:208:60::18) by BL0PR11MB2881.namprd11.prod.outlook.com (2603:10b6:208:7e::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3654.13; Thu, 10 Dec 2020 07:18:21 +0000 Received: from BL0PR11MB3236.namprd11.prod.outlook.com ([fe80::dcf8:f2f2:db7c:1cec]) by BL0PR11MB3236.namprd11.prod.outlook.com ([fe80::dcf8:f2f2:db7c:1cec%7]) with mapi id 15.20.3632.023; Thu, 10 Dec 2020 07:18:21 +0000 From: "Michael D Kinney" To: "devel@edk2.groups.io" , "gaoliming@byosoft.com.cn" , "Wu, Hao A" , "Kinney, Michael D" CC: 'Bret Barkelew' Subject: Re: [edk2-devel] [Patch v2 1/1] MdeModulePkg/Variable/RuntimeDxe: Restore Variable Lock Protocol behavior Thread-Topic: [edk2-devel] [Patch v2 1/1] MdeModulePkg/Variable/RuntimeDxe: Restore Variable Lock Protocol behavior Thread-Index: AQHWzlYPPZcdKMdMc0mnZSr0zwhQ96nvmogAgAAOfgCAAEEZYA== Date: Thu, 10 Dec 2020 07:18:21 +0000 Message-ID: References: <20201209180605.1409-1-michael.d.kinney@intel.com> <004d01d6cea2$d9b15670$8d140350$@byosoft.com.cn> In-Reply-To: <004d01d6cea2$d9b15670$8d140350$@byosoft.com.cn> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.5.1.3 authentication-results: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=intel.com; x-originating-ip: [24.19.191.44] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 1350182e-934a-4745-1ab6-08d89cdbc689 x-ms-traffictypediagnostic: BL0PR11MB2881: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: x5SgtLfEALrBYRLcaQ5IjYeaEAqngx/5etu++JA2fBM8wIz8puv174FMnWYpVQSeOZjPLvQjn0yFWEBTqMrUWsfiLBbXTZYQtQAH660tyAWmc1jl+PHu8xg8GMIy6m2uAxVMvyVivSgd6IH6TzCKjYOqLpsXzDBRkG9RF77c0vWmO2VOlQ8eJqjf5WkafDB9IlTgzU7UNLonXxRQLdrknpxNP/zJwW2Q1gAFVI7M/WHBoudnyvM1t4/LsnnLch2AJsJVBuGv1oZ231hKKny/DJFYgcSkXhIUaRnrlMZ5TONRkhX5xQZIkFq8IhonjsGbrvMDGr4Nnh3Yr3gPX2XTkLxjMdYsgAKBKwQTn/yYdkfMLkCSzYPehCWJ5iJQ7N10ER1rWO4XdvopLlMgBZxvOA== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR11MB3236.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(376002)(346002)(136003)(66946007)(5660300002)(66556008)(66476007)(45080400002)(2906002)(8676002)(508600001)(71200400001)(966005)(66446008)(64756008)(52536014)(4326008)(8936002)(86362001)(30864003)(110136005)(26005)(9686003)(7696005)(53546011)(55016002)(83380400001)(76116006)(33656002)(186003)(6506007)(559001)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: =?utf-8?B?eVVQNjJzMjRpTUo5ZWJwa2NEMHhuS3hHZFRMbVEwekM1UWs5YmduemR4bVBm?= =?utf-8?B?dGpML0haWTJMcE9DditWTGJHYUpsZ0MrYS9EUWw2Q01nbFVvN1ZXR0k3N1BR?= =?utf-8?B?TlBJanJkOVhJbXBLOVk3d1N4ZFBTa1FEaWRLNlQwT0locW1ZdVkrS2Y5eHdi?= =?utf-8?B?emJLMHNZNXA0UG5nWm1aZlB3czRqSnRGckV4OVhNWHlaYlZFSkJUTGY1RVRW?= =?utf-8?B?UkN0VCtwbWZDOEhVYzRYYXlGTElYR0JrZGdudS9IZVQ3Q3hQeG9wbmlDYzBo?= =?utf-8?B?N1Erd3F4Zm5sdU5SK21iUVNKN2xKK1FOOUkyYkFBWHdRaXVlcUFrNEJ4cUp4?= =?utf-8?B?MWFsUkdBYzFnV3JZQ2xueVhhRWxaZUE2elM4TXFvZ09JTkU4SUhlMEg5Z3Jx?= =?utf-8?B?QjUxTzU1VFZieFgrUlNwcHRMY2NiaVlybFNtZXFUY3ZEc3N4ZFlBU1dHS0No?= =?utf-8?B?cEpMcXlXTFRTR3FWMFgwUHRzMFlGQm02SXhmN0F1VWwwbUNOMEE5ZWNtR3h0?= =?utf-8?B?VnM5V2tqcWRmd2xJL0g4WUo1MElnMVcxVVd5Yk44bjBGTHRFMG96aDh6T0c4?= =?utf-8?B?RURKQVdvVW1qYUdOcmVBV3lFcndKTHBxSTFSU01hbHhNOTFJZWJDcEJJY1dW?= =?utf-8?B?VStTbVNRaTVzclZiUm9EODBDVmFWWi9HcE8wTEFCT0xUOHJ0ZzNUeENzYmhZ?= =?utf-8?B?cUJqZjdiZ3J5b2d5cURMelZLRjdkQ1V1Rys3WUFyTDZUTjltMCtpaVp6SnNH?= =?utf-8?B?RkhlakxMUENkUFRTaEpxUGxmNVVrRFV3U0xmOExFdDN2UVEwTWdtbHVwcFhp?= =?utf-8?B?SWhJZmdFZkJNWkQzUUlEUGpydmZiS3pZVFVDU2JLdXZCOSsyalVIT3h2OWxB?= =?utf-8?B?YTZEK3V5ZDJuUTRZaXFkbHFNd0RRRExJamRoQnlMdlFnMWlQdjVmWC9qL1NR?= =?utf-8?B?am5wSmRHUHpaNWgrMzhVOXlueE85VnNOaEtneklFZ01jRnRsbEJVZmdQQVVR?= =?utf-8?B?blNQZVY2a0JMazdhbEJRYzNYZGExL0pudEVoZ05nMDdBZVZZbjhQdzBSWGpH?= =?utf-8?B?VDJqVnN2eGdhdG1nekNLMHlhVStsTktlN1ZKY1IrOG5VT0ZLQWtYNFNiQzJ4?= =?utf-8?B?Q1NiVCtIb2FvZnhhVTh0ZEdObCs1bGkwUi9NTmh2dVF5MElQdDJuV1B6TDFt?= =?utf-8?B?cHZJSTVGWUNOZkMveVpOSEloeHBFcnh4cEUzbUxIRUwzMWFYbytIclVUeGJH?= =?utf-8?B?ZTJlVzBYN1RpaVR4SlpLTll0aEhELzV3NEhoVVVVcVBhWkh3WXBRcXJRdDEw?= =?utf-8?Q?/SeUDEuVj9R24=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BL0PR11MB3236.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1350182e-934a-4745-1ab6-08d89cdbc689 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Dec 2020 07:18:21.3821 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 8CU+IPPZY0XB+RgYtDNvMja3ZuH1P/r5jzUt+bZ6g1f+KGWrrWkMMEFtCQIXWAN+hOfmAjexdz2VUHa/7bTdtmEmQalx0FXAxRWQ47StV34= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL0PR11MB2881 Return-Path: michael.d.kinney@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 TGltaW5nLA0KDQpJIGJlbGlldmUgdGhlIGR1cGxpY2F0ZWQgY29kZSBhcmUgZnJvbSBpbnRlcm5h bCB3b3JrZXIgZnVuY3Rpb25zIGluIHRoYXQgbGlicmFyeSBhbmQNCndlIGRvIG5vdCB3YW50IHRv IGFkZCB0aG9zZSBBUElzIHRvIHRoZSBsaWIgY2xhc3MuDQoNClRoZSBjb2RlIGR1cGxpY2F0aW9u IHNob3VsZCBiZSBzaG9ydCBsaXZlZCBhcyB0aGUgZ29hbCBpcyB0byByZW1vdmUgVmFyaWFibGUg TG9jaw0KUHJvdG9jb2wgaW4gdGhlIGZ1dHVyZS4NCg0KTWlrZQ0KDQo+IC0tLS0tT3JpZ2luYWwg TWVzc2FnZS0tLS0tDQo+IEZyb206IGRldmVsQGVkazIuZ3JvdXBzLmlvIDxkZXZlbEBlZGsyLmdy b3Vwcy5pbz4gT24gQmVoYWxmIE9mIGdhb2xpbWluZw0KPiBTZW50OiBXZWRuZXNkYXksIERlY2Vt YmVyIDksIDIwMjAgNzoxNiBQTQ0KPiBUbzogV3UsIEhhbyBBIDxoYW8uYS53dUBpbnRlbC5jb20+ OyBkZXZlbEBlZGsyLmdyb3Vwcy5pbzsgS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5u ZXlAaW50ZWwuY29tPg0KPiBDYzogJ0JyZXQgQmFya2VsZXcnIDxicmV0LmJhcmtlbGV3QG1pY3Jv c29mdC5jb20+DQo+IFN1YmplY3Q6IOWbnuWkjTogW2VkazItZGV2ZWxdIFtQYXRjaCB2MiAxLzFd IE1kZU1vZHVsZVBrZy9WYXJpYWJsZS9SdW50aW1lRHhlOiBSZXN0b3JlIFZhcmlhYmxlIExvY2sg UHJvdG9jb2wgYmVoYXZpb3INCj4gDQo+IE1pa2U6DQo+ICAgSSBhZ3JlZSBIYW8gY29tbWVudC4g VGhlcmUgaXMgdGhlIHNpbWlsYXIgY29kZSBsb2dpYyBpbiBWYXJpYWJsZVBvbGljeUxpYg0KPiBs aWJyYXJ5LiBUaGV5IGNhbiBiZSBzaGFyZWQuDQo+IA0KPiAgIEJlc2lkZXMsIEkgc3VnZ2VzdCB0 byBzcGxpdCB0aGlzIHBhdGNoLiBPbmUgaXMgdGhlIGJ1ZyBmaXggdG8gcmVzdG9yZQ0KPiBWYXJp YWJsZSBMb2NrIFByb3RvY29sIGJlaGF2aW9yLCBhbm90aGVyIGlzIHRvIGFkZCBWYXJpYWJsZSBk cml2ZXIgdW5pdA0KPiB0ZXN0Lg0KPiANCj4gVGhhbmtzDQo+IExpbWluZw0KPiA+IC0tLS0t6YKu 5Lu25Y6f5Lu2LS0tLS0NCj4gPiDlj5Hku7bkuro6IFd1LCBIYW8gQSA8aGFvLmEud3VAaW50ZWwu Y29tPg0KPiA+IOWPkemAgeaXtumXtDogMjAyMOW5tDEy5pyIMTDml6UgMTA6MjUNCj4gPiDmlLbk u7bkuro6IGRldmVsQGVkazIuZ3JvdXBzLmlvOyBLaW5uZXksIE1pY2hhZWwgRA0KPiA+IDxtaWNo YWVsLmQua2lubmV5QGludGVsLmNvbT4NCj4gPiDmioTpgIE6IEJyZXQgQmFya2VsZXcgPGJyZXQu YmFya2VsZXdAbWljcm9zb2Z0LmNvbT47IExpbWluZyBHYW8NCj4gPiA8Z2FvbGltaW5nQGJ5b3Nv ZnQuY29tLmNuPg0KPiA+IOS4u+mimDogUkU6IFtlZGsyLWRldmVsXSBbUGF0Y2ggdjIgMS8xXSBN ZGVNb2R1bGVQa2cvVmFyaWFibGUvUnVudGltZUR4ZToNCj4gPiBSZXN0b3JlIFZhcmlhYmxlIExv Y2sgUHJvdG9jb2wgYmVoYXZpb3INCj4gPg0KPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0t LS0NCj4gPiA+IEZyb206IGRldmVsQGVkazIuZ3JvdXBzLmlvIDxkZXZlbEBlZGsyLmdyb3Vwcy5p bz4gT24gQmVoYWxmIE9mIE1pY2hhZWwNCj4gPiA+IEQgS2lubmV5DQo+ID4gPiBTZW50OiBUaHVy c2RheSwgRGVjZW1iZXIgMTAsIDIwMjAgMjowNiBBTQ0KPiA+ID4gVG86IGRldmVsQGVkazIuZ3Jv dXBzLmlvDQo+ID4gPiBDYzogQnJldCBCYXJrZWxldyA8YnJldC5iYXJrZWxld0BtaWNyb3NvZnQu Y29tPjsgV3UsIEhhbyBBDQo+ID4gPiA8aGFvLmEud3VAaW50ZWwuY29tPjsgTGltaW5nIEdhbyA8 Z2FvbGltaW5nQGJ5b3NvZnQuY29tLmNuPjsgQnJldA0KPiA+ID4gQmFya2VsZXcgPEJyZXQuQmFy a2VsZXdAbWljcm9zb2Z0LmNvbT4NCj4gPiA+IFN1YmplY3Q6IFtlZGsyLWRldmVsXSBbUGF0Y2gg djIgMS8xXSBNZGVNb2R1bGVQa2cvVmFyaWFibGUvUnVudGltZUR4ZToNCj4gPiA+IFJlc3RvcmUg VmFyaWFibGUgTG9jayBQcm90b2NvbCBiZWhhdmlvcg0KPiA+ID4NCj4gPiA+IEZyb206IEJyZXQg QmFya2VsZXcgPGJyZXQuYmFya2VsZXdAbWljcm9zb2Z0LmNvbT4NCj4gPiA+DQo+ID4gPiBodHRw czovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcuY2dpP2lkPTMxMTENCj4gPiA+DQo+ ID4gPiBUaGUgVmFyaWFibGVMb2NrIHNoaW0gY3VycmVudGx5IGZhaWxzIGlmIGNhbGxlZCB0d2lj ZSBiZWNhdXNlIHRoZQ0KPiB1bmRlcmx5aW5nDQo+ID4gPiBWYXJpYWJsZSBQb2xpY3kgZW5naW5l IHJldHVybnMgYW4gZXJyb3IgaWYgYSBwb2xpY3kgaXMgc2V0IG9uIGFuDQo+IGV4aXN0aW5nDQo+ ID4gdmFyaWFibGUuDQo+ID4gPg0KPiA+ID4gVGhpcyBicmVha3MgZXhpc3RpbmcgY29kZSB3aGlj aCBleHBlY3QgaXQgdG8gc2lsZW50bHkgcGFzcyBpZiBhIHZhcmlhYmxlDQo+IGlzDQo+ID4gbG9j a2VkDQo+ID4gPiBtdWx0aXBsZSB0aW1lcyAoYmVjYXVzZSBpdCBzaG91bGQgImJlIGxvY2tlZCIp Lg0KPiA+ID4NCj4gPiA+IFJlZmFjdG9yIHRoZSBzaGltIHRvIGNvbmZpcm0gdGhhdCB0aGUgdmFy aWFibGUgaXMgaW5kZWVkIGxvY2tlZCBhbmQgdGhlbg0KPiA+ID4gY2hhbmdlIHRoZSBlcnJvciB0 byBFRklfU1VDQ0VTUyBhbmQgZ2VuZXJhdGUgYSBERUJVR19FUlJPUiBtZXNzYWdlDQo+ID4gc28N Cj4gPiA+IHRoZSBkdXBsaWNhdGUgbG9jayBjYW4gYmUgcmVwb3J0ZWQgaW4gYSBkZWJ1ZyBsb2cg YW5kIHJlbW92ZWQuDQo+ID4NCj4gPg0KPiA+IEhlbGxvLA0KPiA+DQo+ID4gSXMgaXQgcG9zc2li bGUgdG8gcmV1c2U6DQo+ID4gICAgIGEpIEV2YWx1YXRlUG9saWN5TWF0Y2goKSBhbmQgR2V0QmVz dFBvbGljeU1hdGNoKCkgZnVuY3Rpb25zDQo+ID4gICAgIGIpIE1hY3JvcyBsaWtlIEdFVF9ORVhU X1BPTElDWSwgR0VUX1BPTElDWV9OQU1FIGFuZCBldGMuDQo+ID4gdW5kZXIgTWRlTW9kdWxlUGtn XExpYnJhcnlcVmFyaWFibGVQb2xpY3lMaWIgdG8gcmVkdWNlIGR1cGxpY2F0ZSBjb2Rlcz8NCj4g Pg0KPiA+IEEgY291cGxlIG9mIG1pbm9yIGlubGluZSBjb21tZW50cyBiZWxvdzoNCj4gPg0KPiA+ DQo+ID4gPg0KPiA+ID4gQWRkIGhvc3QgYmFzZWQgdW5pdCB0ZXN0cyBmb3IgdGhlIG11bHRpcGxl IGxvY2sgY2FzZSB1c2luZyBWYXJpYWJsZSBMb2NrDQo+ID4gPiBQcm90b2NvbCwgVmFyaWFibGUg UG9saWN5IFByb3RvY29sLCBhbmQgbWl4ZXMgb2YgVmFyaWFibGUgTG9jayBQcm90b2NvbA0KPiBh bmQNCj4gPiA+IFZhcmlhYmxlIFBvbGljeSBQcm90b2NvbC4NCj4gPiA+DQo+ID4gPiBDYzogTWlj aGFlbCBEIEtpbm5leSA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+DQo+ID4gPiBDYzogSGFv IEEgV3UgPGhhby5hLnd1QGludGVsLmNvbT4NCj4gPiA+IENjOiBMaW1pbmcgR2FvIDxnYW9saW1p bmdAYnlvc29mdC5jb20uY24+DQo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBCcmV0IEJhcmtlbGV3IDxC cmV0LkJhcmtlbGV3QG1pY3Jvc29mdC5jb20+DQo+ID4gPiAtLS0NCj4gPiA+ICBNZGVNb2R1bGVQ a2cvVGVzdC9NZGVNb2R1bGVQa2dIb3N0VGVzdC5kc2MgICAgfCAgMTEgKw0KPiA+ID4gIC4uLi9W YXJpYWJsZUxvY2tSZXF1ZXN0VG9Mb2NrVW5pdFRlc3QuYyAgICAgICB8IDQzNA0KPiA+ICsrKysr KysrKysrKysrKysrKw0KPiA+ID4gIC4uLi9WYXJpYWJsZUxvY2tSZXF1ZXN0VG9Mb2NrVW5pdFRl c3QuaW5mICAgICB8ICAzNiArKw0KPiA+ID4gIC4uLi9SdW50aW1lRHhlL1ZhcmlhYmxlTG9ja1Jl cXVlc3RUb0xvY2suYyAgICB8IDM2Mw0KPiA+ICsrKysrKysrKysrKystLQ0KPiA+ID4gIDQgZmls ZXMgY2hhbmdlZCwgODA5IGluc2VydGlvbnMoKyksIDM1IGRlbGV0aW9ucygtKSAgY3JlYXRlIG1v ZGUgMTAwNjQ0DQo+ID4gPiBNZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1J1bnRpbWVE eGUvUnVudGltZUR4ZVVuaXRUZXN0L1ZhcmkNCj4gPiA+IGFibGVMb2NrUmVxdWVzdFRvTG9ja1Vu aXRUZXN0LmMNCj4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gPiA+IE1kZU1vZHVsZVBrZy9V bml2ZXJzYWwvVmFyaWFibGUvUnVudGltZUR4ZS9SdW50aW1lRHhlVW5pdFRlc3QvVmFyaQ0KPiA+ ID4gYWJsZUxvY2tSZXF1ZXN0VG9Mb2NrVW5pdFRlc3QuaW5mDQo+ID4gPg0KPiA+ID4gZGlmZiAt LWdpdCBhL01kZU1vZHVsZVBrZy9UZXN0L01kZU1vZHVsZVBrZ0hvc3RUZXN0LmRzYw0KPiA+ID4g Yi9NZGVNb2R1bGVQa2cvVGVzdC9NZGVNb2R1bGVQa2dIb3N0VGVzdC5kc2MNCj4gPiA+IGluZGV4 IDcyYTExOWRiNDU2OC4uNGRhNDY5MmM4NDUxIDEwMDY0NA0KPiA+ID4gLS0tIGEvTWRlTW9kdWxl UGtnL1Rlc3QvTWRlTW9kdWxlUGtnSG9zdFRlc3QuZHNjDQo+ID4gPiArKysgYi9NZGVNb2R1bGVQ a2cvVGVzdC9NZGVNb2R1bGVQa2dIb3N0VGVzdC5kc2MNCj4gPiA+IEBAIC0xOSw2ICsxOSw5IEBA IFtEZWZpbmVzXQ0KPiA+ID4NCj4gPiA+ICAhaW5jbHVkZSBVbml0VGVzdEZyYW1ld29ya1BrZy9V bml0VGVzdEZyYW1ld29ya1BrZ0hvc3QuZHNjLmluYw0KPiA+ID4NCj4gPiA+ICtbTGlicmFyeUNs YXNzZXNdDQo+ID4gPiArICBTYWZlSW50TGlifE1kZVBrZy9MaWJyYXJ5L0Jhc2VTYWZlSW50TGli L0Jhc2VTYWZlSW50TGliLmluZg0KPiA+ID4gKw0KPiA+ID4gIFtDb21wb25lbnRzXQ0KPiA+ID4N Cj4gPiA+IE1kZU1vZHVsZVBrZy9MaWJyYXJ5L0R4ZVJlc2V0U3lzdGVtTGliL1VuaXRUZXN0L01v Y2tVZWZpUnVudGltZVNlcg0KPiA+ID4gdmljZXNUYWJsZUxpYi5pbmYNCj4gPiA+DQo+ID4gPiBA QCAtMzAsMyArMzMsMTEgQEAgW0NvbXBvbmVudHNdDQo+ID4gPg0KPiA+ID4gUmVzZXRTeXN0ZW1M aWJ8TWRlTW9kdWxlUGtnL0xpYnJhcnkvRHhlUmVzZXRTeXN0ZW1MaWIvRHhlUmVzZXRTeXN0DQo+ ID4gPiBlbUxpYi5pbmYNCj4gPiA+DQo+ID4gPiBVZWZpUnVudGltZVNlcnZpY2VzVGFibGVMaWJ8 TWRlTW9kdWxlUGtnL0xpYnJhcnkvRHhlUmVzZXRTeXN0ZW1MaWIvDQo+ID4gPiBVbml0VGVzdC9N b2NrVWVmaVJ1bnRpbWVTZXJ2aWNlc1RhYmxlTGliLmluZg0KPiA+ID4gICAgfQ0KPiA+ID4gKw0K PiA+ID4gKw0KPiA+ID4gTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9SdW50aW1lRHhl L1J1bnRpbWVEeGVVbml0VGVzdC9WYXJpDQo+ID4gPiBhYmxlTG9ja1JlcXVlc3RUb0xvY2tVbml0 VGVzdC5pbmYgew0KPiA+ID4gKyAgICA8TGlicmFyeUNsYXNzZXM+DQo+ID4gPiArDQo+ID4gPg0K PiA+IFZhcmlhYmxlUG9saWN5TGlifE1kZU1vZHVsZVBrZy9MaWJyYXJ5L1ZhcmlhYmxlUG9saWN5 TGliL1ZhcmlhYmxlUG9saWN5TGkNCj4gPiA+IGIuaW5mDQo+ID4gPiArDQo+ID4gPg0KPiA+IFZh cmlhYmxlUG9saWN5SGVscGVyTGlifE1kZU1vZHVsZVBrZy9MaWJyYXJ5L1ZhcmlhYmxlUG9saWN5 SGVscGVyTGliL1ZhDQo+ID4gPiByaWFibGVQb2xpY3lIZWxwZXJMaWIuaW5mDQo+ID4gPiArICAg IDxQY2RzRml4ZWRBdEJ1aWxkPg0KPiA+ID4gKw0KPiA+ID4gKw0KPiA+ID4gZ0VmaU1kZU1vZHVs ZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEFsbG93VmFyaWFibGVQb2xpY3lFbmZvcmNlbWVudERpcw0K PiA+ID4gYWJsDQo+ID4gPiArIGV8VFJVRQ0KPiA+ID4gKyAgfQ0KPiA+ID4gZGlmZiAtLWdpdA0K PiA+ID4gYS9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1J1bnRpbWVEeGUvUnVudGlt ZUR4ZVVuaXRUZXN0L1ZhDQo+ID4gPiByaWFibGVMb2NrUmVxdWVzdFRvTG9ja1VuaXRUZXN0LmMN Cj4gPiA+IGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9SdW50aW1lRHhlL1J1bnRp bWVEeGVVbml0VGVzdC9WYQ0KPiA+ID4gcmlhYmxlTG9ja1JlcXVlc3RUb0xvY2tVbml0VGVzdC5j DQo+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi4y ZjRjNGQyZjc5ZjQNCj4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ICsrKw0KPiA+ID4gYi9NZGVN b2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1J1bnRpbWVEeGUvUnVudGltZUR4ZVVuaXRUZXN0 L1ZhDQo+ID4gPiByaQ0KPiA+ID4gKysrIGFibGVMb2NrUmVxdWVzdFRvTG9ja1VuaXRUZXN0LmMN Cj4gPiA+IEBAIC0wLDAgKzEsNDM0IEBADQo+ID4gPiArLyoqIEBmaWxlDQo+ID4gPiArICBUaGlz IGlzIGEgaG9zdC1iYXNlZCB1bml0IHRlc3QgZm9yIHRoZSBWYXJpYWJsZUxvY2tSZXF1ZXN0VG9M b2NrDQo+IHNoaW0uDQo+ID4gPiArDQo+ID4gPiArICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBD b3Jwb3JhdGlvbi4NCj4gPiA+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1 c2UtUGF0ZW50DQo+ID4gPiArDQo+ID4gPiArKiovDQo+ID4gPiArDQo+ID4gPiArI2luY2x1ZGUg PHN0ZGlvLmg+DQo+ID4gPiArI2luY2x1ZGUgPHN0cmluZy5oPg0KPiA+ID4gKyNpbmNsdWRlIDxz dGRhcmcuaD4NCj4gPiA+ICsjaW5jbHVkZSA8c3RkZGVmLmg+DQo+ID4gPiArI2luY2x1ZGUgPHNl dGptcC5oPg0KPiA+ID4gKyNpbmNsdWRlIDxjbW9ja2EuaD4NCj4gPiA+ICsNCj4gPiA+ICsjaW5j bHVkZSA8VWVmaS5oPg0KPiA+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+ID4g PiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KPiA+ID4gKyNpbmNsdWRlIDxM aWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4gI2luY2x1ZGUNCj4gPiA+ICs8TGlicmFyeS9V bml0VGVzdExpYi5oPiAjaW5jbHVkZSA8TGlicmFyeS9WYXJpYWJsZVBvbGljeUxpYi5oPiAjaW5j bHVkZQ0KPiA+ID4gKzxMaWJyYXJ5L1ZhcmlhYmxlUG9saWN5SGVscGVyTGliLmg+DQo+ID4gPiAr DQo+ID4gPiArI2luY2x1ZGUgPFByb3RvY29sL1ZhcmlhYmxlTG9jay5oPg0KPiA+ID4gKw0KPiA+ ID4gKyNkZWZpbmUgVU5JVF9URVNUX05BTUUgICAgICAgICJWYXJQb2wvVmFyTG9jayBTaGltIFVu aXQgVGVzdCINCj4gPiA+ICsjZGVmaW5lIFVOSVRfVEVTVF9WRVJTSU9OICAgICAiMS4wIg0KPiA+ ID4gKw0KPiA+ID4gKy8vLz09PSBDT0RFIFVOREVSIFRFU1QNCj4gPiA+ICs9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4gPiA+ID09PT09 PT09PT09PT09DQo+ID4gPiArPT09PQ0KPiA+ID4gKw0KPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ ICtFRklBUEkNCj4gPiA+ICtWYXJpYWJsZUxvY2tSZXF1ZXN0VG9Mb2NrICgNCj4gPiA+ICsgIElO IENPTlNUIEVES0lJX1ZBUklBQkxFX0xPQ0tfUFJPVE9DT0wgICpUaGlzLA0KPiA+ID4gKyAgSU4g ICAgICAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgKlZhcmlhYmxlTmFtZSwNCj4gPiA+ ICsgIElOICAgICAgIEVGSV9HVUlEICAgICAgICAgICAgICAgICAgICAgICpWZW5kb3JHdWlkDQo+ ID4gPiArICApOw0KPiA+ID4gKw0KPiA+ID4gKy8vLz09PSBURVNUIERBVEENCj4gPiA+ICs9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4g PiA+ID09PT09PT09PT09PT09DQo+ID4gPiArPT09PT09PT09PT0NCj4gPiA+ICsNCj4gPiA+ICsv Lw0KPiA+ID4gKy8vIFRlc3QgR1VJRCAxIHtGOTU1QkEyRC00QTJDLTQ4MEMtQkZEMS0zQ0M1MjI2 MTA1OTJ9DQo+ID4gPiArLy8NCj4gPiA+ICtFRklfR1VJRCAgbVRlc3RHdWlkMSA9IHsNCj4gPiA+ ICsgIDB4Zjk1NWJhMmQsIDB4NGEyYywgMHg0ODBjLCB7MHhiZiwgMHhkMSwgMHgzYywgMHhjNSwg MHgyMiwgMHg2MSwgMHg1LA0KPiA+ID4gKzB4OTJ9IH07DQo+ID4gPiArDQo+ID4gPiArLy8NCj4g PiA+ICsvLyBUZXN0IEdVSUQgMiB7MkRFQTc5OUUtNUU3My00M0I5LTg3MEUtQzk0NUNFODJBRjNB fQ0KPiA+ID4gKy8vDQo+ID4gPiArRUZJX0dVSUQgIG1UZXN0R3VpZDIgPSB7DQo+ID4gPiArICAw eDJkZWE3OTllLCAweDVlNzMsIDB4NDNiOSwgezB4ODcsIDB4ZSwgMHhjOSwgMHg0NSwgMHhjZSwg MHg4MiwgMHhhZiwNCj4gPiA+ICsweDNhfSB9Ow0KPiA+ID4gKw0KPiA+ID4gKy8vDQo+ID4gPiAr Ly8gVGVzdCBHVUlEIDMgezY5OEEyQkZELUE2MTYtNDgyRC1CODhDLTcxMDBCRDY2ODJBOX0NCj4g PiA+ICsvLw0KPiA+ID4gK0VGSV9HVUlEICBtVGVzdEd1aWQzID0gew0KPiA+ID4gKyAgMHg2OThh MmJmZCwgMHhhNjE2LCAweDQ4MmQsIHsweGI4LCAweDhjLCAweDcxLCAweDAsIDB4YmQsIDB4NjYs IDB4ODIsDQo+ID4gPiArMHhhOX0gfTsNCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIFRFU1RfVkFS XzFfTkFNRSAgICAgICAgICAgICAgTCJUZXN0VmFyMSINCj4gPiA+ICsjZGVmaW5lIFRFU1RfVkFS XzJfTkFNRSAgICAgICAgICAgICAgTCJUZXN0VmFyMiINCj4gPiA+ICsjZGVmaW5lIFRFU1RfVkFS XzNfTkFNRSAgICAgICAgICAgICAgTCJUZXN0VmFyMyINCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5l IFRFU1RfUE9MSUNZX0FUVFJJQlVURVNfTlVMTCAgMA0KPiA+ID4gKyNkZWZpbmUgVEVTVF9QT0xJ Q1lfTUlOX1NJWkVfTlVMTCAgICAwDQo+ID4gPiArI2RlZmluZSBURVNUX1BPTElDWV9NQVhfU0la RV9OVUxMICAgIE1BWF9VSU5UMzINCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIFRFU1RfUE9MSUNZ X01JTl9TSVpFXzEwICAgICAgMTANCj4gPiA+ICsjZGVmaW5lIFRFU1RfUE9MSUNZX01BWF9TSVpF XzIwMCAgICAgMjAwDQo+ID4gPiArDQo+ID4gPiArLy8vPT09IEhFTFBFUiBGVU5DVElPTlMNCj4g PiA+ICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0NCj4gPiA+ID09PT09PT09PT09PT09DQo+ID4gPiArPT09PQ0KPiA+ID4gKw0KPiA+ID4g Ky8qKg0KPiA+ID4gKyAgTW9ja2VkIHZlcnNpb24gb2YgR2V0VmFyaWFibGUsIGZvciB0ZXN0aW5n Lg0KPiA+ID4gKw0KPiA+ID4gKyAgQHBhcmFtICBWYXJpYWJsZU5hbWUNCj4gPiA+ICsgIEBwYXJh bSAgVmVuZG9yR3VpZA0KPiA+ID4gKyAgQHBhcmFtICBBdHRyaWJ1dGVzDQo+ID4gPiArICBAcGFy YW0gIERhdGFTaXplDQo+ID4gPiArICBAcGFyYW0gIERhdGENCj4gPiA+ICsqKi8NCj4gPiA+ICtF RklfU1RBVFVTDQo+ID4gPiArRUZJQVBJDQo+ID4gPiArU3R1YkdldFZhcmlhYmxlTnVsbCAoDQo+ ID4gPiArICBJTiAgICAgQ0hBUjE2ICAgICpWYXJpYWJsZU5hbWUsDQo+ID4gPiArICBJTiAgICAg RUZJX0dVSUQgICpWZW5kb3JHdWlkLA0KPiA+ID4gKyAgT1VUICAgIFVJTlQzMiAgICAqQXR0cmli dXRlcywgIE9QVElPTkFMDQo+ID4gPiArICBJTiBPVVQgVUlOVE4gICAgICpEYXRhU2l6ZSwNCj4g PiA+ICsgIE9VVCAgICBWT0lEICAgICAgKkRhdGEgICAgICAgICBPUFRJT05BTA0KPiA+ID4gKyAg KQ0KPiA+ID4gK3sNCj4gPiA+ICsgIFVJTlQzMiAgICAgIE1vY2tlZEF0dHI7DQo+ID4gPiArICBV SU5UTiAgICAgICBNb2NrZWREYXRhU2l6ZTsNCj4gPiA+ICsgIFZPSUQgICAgICAgICpNb2NrZWRE YXRhOw0KPiA+ID4gKyAgRUZJX1NUQVRVUyAgTW9ja2VkUmV0dXJuOw0KPiA+ID4gKw0KPiA+ID4g KyAgY2hlY2tfZXhwZWN0ZWRfcHRyIChWYXJpYWJsZU5hbWUpOw0KPiA+ID4gKyAgY2hlY2tfZXhw ZWN0ZWRfcHRyIChWZW5kb3JHdWlkKTsNCj4gPiA+ICsgIGNoZWNrX2V4cGVjdGVkX3B0ciAoRGF0 YVNpemUpOw0KPiA+ID4gKw0KPiA+ID4gKyAgTW9ja2VkQXR0ciAgICAgPSAoVUlOVDMyKW1vY2so KTsNCj4gPiA+ICsgIE1vY2tlZERhdGFTaXplID0gKFVJTlROKW1vY2soKTsNCj4gPiA+ICsgIE1v Y2tlZERhdGEgICAgID0gKFZPSUQqKShVSU5UTiltb2NrKCk7DQo+ID4gPiArICBNb2NrZWRSZXR1 cm4gICA9IChFRklfU1RBVFVTKW1vY2soKTsNCj4gPiA+ICsNCj4gPiA+ICsgIGlmIChBdHRyaWJ1 dGVzICE9IE5VTEwpIHsNCj4gPiA+ICsgICAgKkF0dHJpYnV0ZXMgPSBNb2NrZWRBdHRyOw0KPiA+ ID4gKyAgfQ0KPiA+ID4gKyAgaWYgKERhdGEgIT0gTlVMTCAmJiAhRUZJX0VSUk9SIChNb2NrZWRS ZXR1cm4pKSB7DQo+ID4gPiArICAgIENvcHlNZW0gKERhdGEsIE1vY2tlZERhdGEsIE1vY2tlZERh dGFTaXplKTsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICpEYXRhU2l6ZSA9IE1vY2tlZERhdGFTaXpl Ow0KPiA+ID4gKw0KPiA+ID4gKyAgcmV0dXJuIE1vY2tlZFJldHVybjsNCj4gPiA+ICt9DQo+ID4g PiArDQo+ID4gPiArLy8NCj4gPiA+ICsvLyBBbnl0aGluZyB5b3UgdGhpbmsgbWlnaHQgYmUgaGVs cGZ1bCB0aGF0IGlzbid0IGEgdGVzdCBpdHNlbGYuDQo+ID4gPiArLy8NCj4gPiA+ICsNCj4gPiA+ ICsvKioNCj4gPiA+ICsgIFRoaXMgaXMgYSBjb21tb24gc2V0dXAgZnVuY3Rpb24gdGhhdCB3aWxs IGVuc3VyZSB0aGUgbGlicmFyeSBpcw0KPiA+ID4gK2Fsd2F5cw0KPiA+ID4gKyAgaW5pdGlhbGl6 ZWQgd2l0aCB0aGUgc3R1YmJlZCBHZXRWYXJpYWJsZS4NCj4gPiA+ICsNCj4gPiA+ICsgIE5vdCB1 c2VkIGJ5IGFsbCB0ZXN0IGNhc2VzLCBidXQgYnkgbW9zdC4NCj4gPiA+ICsNCj4gPiA+ICsgIEBw YXJhbVtpbl0gIENvbnRleHQgIFVuaXQgdGVzdCBjYXNlIGNvbnRleHQgKiovIFNUQVRJQw0KPiA+ ID4gK1VOSVRfVEVTVF9TVEFUVVMgRUZJQVBJIExpYkluaXRNb2NrZWQgKA0KPiA+ID4gKyAgSU4g VU5JVF9URVNUX0NPTlRFWFQgIENvbnRleHQNCj4gPiA+ICsgICkNCj4gPiA+ICt7DQo+ID4gPiAr ICByZXR1cm4gRUZJX0VSUk9SIChJbml0VmFyaWFibGVQb2xpY3lMaWIgKFN0dWJHZXRWYXJpYWJs ZU51bGwpKSA/DQo+ID4gPiArVU5JVF9URVNUX0VSUk9SX1BSRVJFUVVJU0lURV9OT1RfTUVUIDog VU5JVF9URVNUX1BBU1NFRDsgfQ0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAgQ29tbW9u IGNsZWFudXAgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGxpYnJhcnkgaXMgYWx3YXlz DQo+ID4gPiArZGUtaW5pdGlhbGl6ZWQNCj4gPiA+ICsgIHByaW9yIHRvIHRoZSBuZXh0IHRlc3Qg Y2FzZS4NCj4gPiA+ICsNCj4gPiA+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgIFVuaXQgdGVzdCBj YXNlIGNvbnRleHQgKiovIFNUQVRJQyBWT0lEIEVGSUFQSQ0KPiA+ID4gK0xpYkNsZWFudXAgKA0K PiA+ID4gKyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENvbnRleHQNCj4gPiA+ICsgICkNCj4gPiA+ ICt7DQo+ID4gPiArICBEZWluaXRWYXJpYWJsZVBvbGljeUxpYigpOw0KPiA+ID4gK30NCj4gPiA+ ICsNCj4gPiA+ICsvLy89PT0gVEVTVCBDQVNFUw0KPiA+ID4gKz09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiA+ID4gPT09PT09PT09PT09 PT0NCj4gPiA+ICs9PT09PT09PT09DQo+ID4gPiArDQo+ID4gPiArLy8vPT09PT0gU0hJTSBTVUlU RQ0KPiA+ID4gKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQ0KPiA+ID4gPT0NCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgIFRlc3Qg Q2FzZSB0aGF0IGxvY2tzIGEgc2luZ2xlIHZhcmlhYmxlIHVzaW5nIHRoZSBWYXJpYWJsZSBMb2Nr DQo+IFByb3RvY29sLg0KPiA+ID4gKyAgVGhlIGNhbGwgaXMgZXhwZWN0ZWQgdG8gc3VjY2VlZC4N Cj4gPiA+ICsNCj4gPiA+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgIFVuaXQgdGVzdCBjYXNlIGNv bnRleHQgKiovIFVOSVRfVEVTVF9TVEFUVVMNCj4gPiA+ICtFRklBUEkgTG9ja2luZ1dpdGhvdXRB bnlQb2xpY2llc1Nob3VsZFN1Y2NlZWQgKA0KPiA+ID4gKyAgSU4gVU5JVF9URVNUX0NPTlRFWFQg IENvbnRleHQNCj4gPiA+ICsgICkNCj4gPiA+ICt7DQo+ID4gPiArICBFRklfU1RBVFVTICBTdGF0 dXM7DQo+ID4gPiArDQo+ID4gPiArICBTdGF0dXMgPSBWYXJpYWJsZUxvY2tSZXF1ZXN0VG9Mb2Nr IChOVUxMLCBURVNUX1ZBUl8xX05BTUUsDQo+ID4gPiArICZtVGVzdEd1aWQxKTsgIFVUX0FTU0VS VF9OT1RfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+ID4gKw0KPiA+ID4gKyAgcmV0dXJuIFVOSVRf VEVTVF9QQVNTRUQ7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAgVGVz dCBDYXNlIHRoYXQgbG9ja3MgdGhlIHNhbWUgdmFyaWFibGUgdHdpY2UgdXNpbmcgdGhlIFZhcmlh YmxlIExvY2sNCj4gPiBQcm9jb2wuDQo+ID4NCj4gPg0KPiA+IE1pbm9yIGNvbW1lbnQsIHR5cG8g Zm9yICdQcm9jb2wnIC0+ICdQcm90b2NvbCcNCj4gPg0KPiA+DQo+ID4gPiArICBCb3RoIGNhbGxz IGFyZSBleHBlY3RlZCB0byBzdWNjZWVkLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHBhcmFtW2luXSAg Q29udGV4dCAgVW5pdCB0ZXN0IGNhc2UgY29udGV4dA0KPiA+ID4gKyAgKiovDQo+ID4gPiArVU5J VF9URVNUX1NUQVRVUw0KPiA+ID4gK0VGSUFQSQ0KPiA+ID4gK0xvY2tpbmdUd2ljZVNob3VsZFN1 Y2NlZWQgKA0KPiA+ID4gKyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENvbnRleHQNCj4gPiA+ICsg ICkNCj4gPiA+ICt7DQo+ID4gPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ID4gPiArDQo+ID4g PiArICBTdGF0dXMgPSBWYXJpYWJsZUxvY2tSZXF1ZXN0VG9Mb2NrIChOVUxMLCBURVNUX1ZBUl8x X05BTUUsDQo+ID4gPiArICZtVGVzdEd1aWQxKTsgIFVUX0FTU0VSVF9OT1RfRUZJX0VSUk9SIChT dGF0dXMpOw0KPiA+ID4gKw0KPiA+ID4gKyAgU3RhdHVzID0gVmFyaWFibGVMb2NrUmVxdWVzdFRv TG9jayAoTlVMTCwgVEVTVF9WQVJfMV9OQU1FLA0KPiA+ID4gKyAmbVRlc3RHdWlkMSk7ICBVVF9B U1NFUlRfTk9UX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gPiA+ICsNCj4gPiA+ICsgIHJldHVybiBV TklUX1RFU1RfUEFTU0VEOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsg IFRlc3QgQ2FzZSB0aGF0IGxvY2tzIGEgdmFyaWFibGUgdXNpbmcgdGhlIFZhcmlhYmxlIFBvbGlj eSBQcm90b2NvbA0KPiA+ID4gK3RoZW4gbG9ja3MNCj4gPiA+ICsgIHRoZSBzYW1lIHZhcmlhYmxl IHVzaW5nIHRoZSBWYXJpYWJsZSBMb2NrIFByb3RvY29sLg0KPiA+ID4gKyAgQm90aCBjYWxscyBh cmUgZXhwZWN0ZWQgdG8gc3VjY2VlZC4NCj4gPiA+ICsNCj4gPiA+ICsgIEBwYXJhbVtpbl0gIENv bnRleHQgIFVuaXQgdGVzdCBjYXNlIGNvbnRleHQNCj4gPiA+ICsgICoqLw0KPiA+ID4gK1VOSVRf VEVTVF9TVEFUVVMNCj4gPiA+ICtFRklBUEkNCj4gPiA+ICtMb2NraW5nQUxvY2tlZFZhcmlhYmxl U2hvdWxkU3VjY2VlZCAoDQo+ID4gPiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4dA0K PiA+ID4gKyAgKQ0KPiA+ID4gK3sNCj4gPiA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgU3Rh dHVzOw0KPiA+ID4gKyAgVkFSSUFCTEVfUE9MSUNZX0VOVFJZICAqTmV3RW50cnk7DQo+ID4gPiAr DQo+ID4gPiArICAvLw0KPiA+ID4gKyAgLy8gQ3JlYXRlIGEgdmFyaWFibGUgcG9saWN5IHRoYXQg bG9ja3MgdGhlIHZhcmlhYmxlLg0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIFN0YXR1cyA9IENyZWF0 ZUJhc2ljVmFyaWFibGVQb2xpY3kgKA0KPiA+ID4gKyAgICAgICAgICAgICAmbVRlc3RHdWlkMSwN Cj4gPiA+ICsgICAgICAgICAgICAgVEVTVF9WQVJfMV9OQU1FLA0KPiA+ID4gKyAgICAgICAgICAg ICBURVNUX1BPTElDWV9NSU5fU0laRV9OVUxMLA0KPiA+ID4gKyAgICAgICAgICAgICBURVNUX1BP TElDWV9NQVhfU0laRV8yMDAsDQo+ID4gPiArICAgICAgICAgICAgIFRFU1RfUE9MSUNZX0FUVFJJ QlVURVNfTlVMTCwNCj4gPiA+ICsgICAgICAgICAgICAgVEVTVF9QT0xJQ1lfQVRUUklCVVRFU19O VUxMLA0KPiA+ID4gKyAgICAgICAgICAgICBWQVJJQUJMRV9QT0xJQ1lfVFlQRV9MT0NLX05PVywN Cj4gPiA+ICsgICAgICAgICAgICAgJk5ld0VudHJ5DQo+ID4gPiArICAgICAgICAgICAgICk7DQo+ ID4gPiArICBVVF9BU1NFUlRfTk9UX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gPiA+ICsNCj4gPiA+ ICsgIC8vDQo+ID4gPiArICAvLyBSZWdpc3RlciB0aGUgbmV3IHBvbGljeS4NCj4gPiA+ICsgIC8v DQo+ID4gPiArICBTdGF0dXMgPSBSZWdpc3RlclZhcmlhYmxlUG9saWN5IChOZXdFbnRyeSk7DQo+ ID4gPiArDQo+ID4gPiArICBTdGF0dXMgPSBWYXJpYWJsZUxvY2tSZXF1ZXN0VG9Mb2NrIChOVUxM LCBURVNUX1ZBUl8xX05BTUUsDQo+ID4gPiArICZtVGVzdEd1aWQxKTsgIFVUX0FTU0VSVF9OT1Rf RUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+ID4gKw0KPiA+ID4gKyAgRnJlZVBvb2wgKE5ld0VudHJ5 KTsNCj4gPiA+ICsNCj4gPiA+ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiA+ID4gK30N Cj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgIFRlc3QgQ2FzZSB0aGF0IGxvY2tzIGEgdmFy aWFibGUgdXNpbmcgdGhlIFZhcmlhYmxlIFBvbGljeSBQcm90b2NvbA0KPiA+ID4gK3dpdGggYQ0K PiA+ID4gKyAgcG9saWN5IG90aGVyIHRoYW4gTE9DS19OT1cgdGhlbiBhdHRlbXB0cyB0byBsb2Nr IHRoZSBzYW1lIHZhcmlhYmxlDQo+ID4gPiArdXNpbmcgdGhlDQo+ID4gPiArICBWYXJpYWJsZSBM b2NrIFByb3RvY29sLiAgVGhlIGNhbGwgdG8gVmFyaWFibGUgUG9saWN5IGlzIGV4cGVjdGVkIHRv DQo+ID4gPiArc3VjY2NlZA0KPiA+DQo+ID4NCj4gPiAnc3VjY2NlZCcgLT4gJ3N1Y2NlZWQnDQo+ ID4NCj4gPg0KPiA+ID4gKyAgYW5kIHRoZSBjYWxsIHRvIFZhcmlhYmxlIExvY2sgaXMgZXhwZWN0 ZWQgdG8gZmFpbC4NCj4gPiA+ICsNCj4gPiA+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgIFVuaXQg dGVzdCBjYXNlIGNvbnRleHQNCj4gPiA+ICsgICoqLw0KPiA+ID4gK1VOSVRfVEVTVF9TVEFUVVMN Cj4gPiA+ICtFRklBUEkNCj4gPiA+ICtMb2NraW5nQW5VbmxvY2tlZFZhcmlhYmxlU2hvdWxkRmFp bCAoDQo+ID4gPiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAgICAgIENvbnRleHQNCj4gPiA+ICsg ICkNCj4gPiA+ICt7DQo+ID4gPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgIFN0YXR1czsN Cj4gPiA+ICsgIFZBUklBQkxFX1BPTElDWV9FTlRSWSAgICAgKk5ld0VudHJ5Ow0KPiA+ID4gKw0K PiA+ID4gKyAgLy8gQ3JlYXRlIGEgdmFyaWFibGUgcG9saWN5IHRoYXQgbG9ja3MgdGhlIHZhcmlh YmxlLg0KPiA+ID4gKyAgU3RhdHVzID0gQ3JlYXRlVmFyU3RhdGVWYXJpYWJsZVBvbGljeSAoJm1U ZXN0R3VpZDEsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBURVNUX1ZBUl8xX05BTUUsDQo+ID4gPiArDQo+ID4gVEVTVF9QT0xJQ1lfTUlOX1NJWkVfTlVM TCwNCj4gPiA+ICsNCj4gPiBURVNUX1BPTElDWV9NQVhfU0laRV8yMDAsDQo+ID4gPiArDQo+ID4g VEVTVF9QT0xJQ1lfQVRUUklCVVRFU19OVUxMLA0KPiA+ID4gKw0KPiA+IFRFU1RfUE9MSUNZX0FU VFJJQlVURVNfTlVMTCwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZtVGVzdEd1aWQyLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFRFU1RfVkFSXzJfTkFNRSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZOZXdFbnRyeSk7DQo+ID4gPiArIFVUX0FTU0VSVF9OT1RfRUZJX0VS Uk9SIChTdGF0dXMpOw0KPiA+ID4gKw0KPiA+ID4gKyAgLy8gUmVnaXN0ZXIgdGhlIG5ldyBwb2xp Y3kuDQo+ID4gPiArICBTdGF0dXMgPSBSZWdpc3RlclZhcmlhYmxlUG9saWN5IChOZXdFbnRyeSk7 DQo+ID4gPiArDQo+ID4gPiArICBTdGF0dXMgPSBWYXJpYWJsZUxvY2tSZXF1ZXN0VG9Mb2NrIChO VUxMLCBURVNUX1ZBUl8xX05BTUUsDQo+ID4gPiArICZtVGVzdEd1aWQxKTsgIFVUX0FTU0VSVF9U UlVFIChFRklfRVJST1IgKFN0YXR1cykpOw0KPiA+ID4gKw0KPiA+ID4gKyAgRnJlZVBvb2wgKE5l d0VudHJ5KTsNCj4gPiA+ICsNCj4gPiA+ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiA+ ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgIFRlc3QgQ2FzZSB0aGF0IGxvY2tz IGEgdmFyaWFibGUgdXNpbmcgVmFyaWFibGUgTG9jayBQcm90b2NvbCBQb2xpY3kNCj4gPiA+ICtQ cm90b2NvbA0KPiA+ID4gKyAgdGhlbiBhbmQgdGhlbiBhdHRlbXB0cyB0byBsb2NrIHRoZSBzYW1l IHZhcmlhYmxlIHVzaW5nIHRoZSBWYXJpYWJsZQ0KPiA+ID4gK1BvbGljeQ0KPiA+ID4gKyAgUHJv dG9jb2wuICBUaGUgY2FsbCB0byBWYXJpYWJsZSBMb2NrIGlzIGV4cGVjdGVkIHRvIHN1Y2NjZWQg YW5kIHRoZQ0KPiA+DQo+ID4NCj4gPiAnc3VjY2NlZCcgLT4gJ3N1Y2NlZWQnDQo+ID4NCj4gPiBC ZXN0IFJlZ2FyZHMsDQo+ID4gSGFvIFd1DQo+ID4NCj4gPg0KPiA+ID4gK2NhbGwgdG8NCj4gPiA+ ICsgIFZhcmlhYmxlIFBvbGljeSBpcyBleHBlY3RlZCB0byBmYWlsLg0KPiA+ID4gKw0KPiA+ID4g KyAgQHBhcmFtW2luXSAgQ29udGV4dCAgVW5pdCB0ZXN0IGNhc2UgY29udGV4dA0KPiA+ID4gKyAg KiovDQo+ID4gPiArVU5JVF9URVNUX1NUQVRVUw0KPiA+ID4gK0VGSUFQSQ0KPiA+ID4gK1NldHRp bmdQb2xpY3lGb3JBTG9ja2VkVmFyaWFibGVTaG91bGRGYWlsICgNCj4gPiA+ICsgIElOIFVOSVRf VEVTVF9DT05URVhUICAgICAgQ29udGV4dA0KPiA+ID4gKyAgKQ0KPiA+ID4gK3sNCj4gPiA+ICsg IEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ID4gKyAgVkFSSUFCTEVfUE9M SUNZX0VOVFJZICAgICAqTmV3RW50cnk7DQo+ID4gPiArDQo+ID4gPiArICAvLyBMb2NrIHRoZSB2 YXJpYWJsZS4NCj4gPiA+ICsgIFN0YXR1cyA9IFZhcmlhYmxlTG9ja1JlcXVlc3RUb0xvY2sgKE5V TEwsIFRFU1RfVkFSXzFfTkFNRSwNCj4gPiA+ICsgJm1UZXN0R3VpZDEpOyAgVVRfQVNTRVJUX05P VF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4gPiArDQo+ID4gPiArICAvLyBDcmVhdGUgYSB2YXJp YWJsZSBwb2xpY3kgdGhhdCBsb2NrcyB0aGUgdmFyaWFibGUuDQo+ID4gPiArICBTdGF0dXMgPSBD cmVhdGVWYXJTdGF0ZVZhcmlhYmxlUG9saWN5ICgmbVRlc3RHdWlkMSwNCj4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFU1RfVkFSXzFfTkFNRSwNCj4gPiA+ ICsNCj4gPiBURVNUX1BPTElDWV9NSU5fU0laRV9OVUxMLA0KPiA+ID4gKw0KPiA+IFRFU1RfUE9M SUNZX01BWF9TSVpFXzIwMCwNCj4gPiA+ICsNCj4gPiBURVNUX1BPTElDWV9BVFRSSUJVVEVTX05V TEwsDQo+ID4gPiArDQo+ID4gVEVTVF9QT0xJQ1lfQVRUUklCVVRFU19OVUxMLA0KPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1UZXN0R3VpZDIsDQo+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLA0KPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVTVF9WQVJfMl9OQU1FLA0K PiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJk5ld0VudHJ5 KTsNCj4gPiA+ICsgVVRfQVNTRVJUX05PVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4gPiArDQo+ ID4gPiArICAvLyBSZWdpc3RlciB0aGUgbmV3IHBvbGljeS4NCj4gPiA+ICsgIFN0YXR1cyA9IFJl Z2lzdGVyVmFyaWFibGVQb2xpY3kgKE5ld0VudHJ5KTsgIFVUX0FTU0VSVF9UUlVFDQo+ID4gPiAr IChFRklfRVJST1IgKFN0YXR1cykpOw0KPiA+ID4gKw0KPiA+ID4gKyAgRnJlZVBvb2wgKE5ld0Vu dHJ5KTsNCj4gPiA+ICsNCj4gPiA+ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiA+ID4g K30NCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgIE1haW4gZW50cnkgcG9pbnQgdG8gdGhp cyB1bml0IHRlc3QgYXBwbGljYXRpb24uDQo+ID4gPiArDQo+ID4gPiArICBTZXRzIHVwIGFuZCBy dW5zIHRoZSB0ZXN0IHN1aXRlcy4NCj4gPiA+ICsqKi8NCj4gPiA+ICtWT0lEDQo+ID4gPiArRUZJ QVBJDQo+ID4gPiArVW5pdFRlc3RNYWluICgNCj4gPiA+ICsgIFZPSUQNCj4gPiA+ICsgICkNCj4g PiA+ICt7DQo+ID4gPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ ID4gKyAgVU5JVF9URVNUX0ZSQU1FV09SS19IQU5ETEUgIEZyYW1ld29yazsNCj4gPiA+ICsgIFVO SVRfVEVTVF9TVUlURV9IQU5ETEUgICAgICBTaGltVGVzdHM7DQo+ID4gPiArDQo+ID4gPiArICBG cmFtZXdvcmsgPSBOVUxMOw0KPiA+ID4gKw0KPiA+ID4gKyAgREVCVUcgKChERUJVR19JTkZPLCAi JWEgdiVhXG4iLCBVTklUX1RFU1RfTkFNRSwNCj4gPiA+IFVOSVRfVEVTVF9WRVJTSU9OKSk7DQo+ ID4gPiArDQo+ID4gPiArICAvLw0KPiA+ID4gKyAgLy8gU3RhcnQgc2V0dGluZyB1cCB0aGUgdGVz dCBmcmFtZXdvcmsgZm9yIHJ1bm5pbmcgdGhlIHRlc3RzLg0KPiA+ID4gKyAgLy8NCj4gPiA+ICsg IFN0YXR1cyA9IEluaXRVbml0VGVzdEZyYW1ld29yayAoJkZyYW1ld29yaywgVU5JVF9URVNUX05B TUUsDQo+ID4gPiArIGdFZmlDYWxsZXJCYXNlTmFtZSwgVU5JVF9URVNUX1ZFUlNJT04pOyAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAi RmFpbGVkIGluIEluaXRVbml0VGVzdEZyYW1ld29yay4gU3RhdHVzDQo+ID4gPiA9ICVyXG4iLCBT dGF0dXMpKTsNCj4gPiA+ICsgICAgZ290byBFWElUOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ ID4gKyAgLy8NCj4gPiA+ICsgIC8vIEFkZCBhbGwgdGVzdCBzdWl0ZXMgYW5kIHRlc3RzLg0KPiA+ ID4gKyAgLy8NCj4gPiA+ICsgIFN0YXR1cyA9IENyZWF0ZVVuaXRUZXN0U3VpdGUgKA0KPiA+ID4g KyAgICAgICAgICAgICAmU2hpbVRlc3RzLCBGcmFtZXdvcmssDQo+ID4gPiArICAgICAgICAgICAg ICJWYXJpYWJsZSBMb2NrIFNoaW0gVGVzdHMiLCAiVmFyUG9saWN5LlZhckxvY2tTaGltIiwgTlVM TCwNCj4gPiBOVUxMDQo+ID4gPiArICAgICAgICAgICAgICk7DQo+ID4gPiArICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ID4gPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICJGYWlsZWQg aW4gQ3JlYXRlVW5pdFRlc3RTdWl0ZSBmb3INCj4gPiA+IFNoaW1UZXN0c1xuIikpOw0KPiA+ID4g KyAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiA+ICsgICAgZ290byBFWElU Ow0KPiA+ID4gKyAgfQ0KPiA+ID4gKyAgQWRkVGVzdENhc2UgKA0KPiA+ID4gKyAgICBTaGltVGVz dHMsDQo+ID4gPiArICAgICJMb2NraW5nIGEgdmFyaWFibGUgd2l0aCBubyBtYXRjaGluZyBwb2xp Y2llcyBzaG91bGQgYWx3YXlzIHdvcmsiLA0KPiA+ID4gIkVtcHR5UG9saWNpZXMiLA0KPiA+ID4g KyAgICBMb2NraW5nV2l0aG91dEFueVBvbGljaWVzU2hvdWxkU3VjY2VlZCwgTGliSW5pdE1vY2tl ZCwNCj4gPiBMaWJDbGVhbnVwLA0KPiA+ID4gTlVMTA0KPiA+ID4gKyAgICApOw0KPiA+ID4gKyAg QWRkVGVzdENhc2UgKA0KPiA+ID4gKyAgICBTaGltVGVzdHMsDQo+ID4gPiArICAgICJMb2NraW5n IGEgdmFyaWFibGUgdHdpY2Ugc2hvdWxkIGFsd2F5cyB3b3JrIiwgIkRvdWJsZUxvY2siLA0KPiA+ ID4gKyAgICBMb2NraW5nVHdpY2VTaG91bGRTdWNjZWVkLCBMaWJJbml0TW9ja2VkLCBMaWJDbGVh bnVwLCBOVUxMDQo+ID4gPiArICAgICk7DQo+ID4gPiArICBBZGRUZXN0Q2FzZSAoDQo+ID4gPiAr ICAgIFNoaW1UZXN0cywNCj4gPiA+ICsgICAgIkxvY2tpbmcgYSB2YXJpYWJsZSB0aGF0J3MgYWxy ZWFkeSBsb2NrZWQgYnkgYW5vdGhlciBwb2xpY3kgc2hvdWxkDQo+ID4gd29yayIsDQo+ID4gPiAi TG9ja0FmdGVyUG9saWN5IiwNCj4gPiA+ICsgICAgTG9ja2luZ0FMb2NrZWRWYXJpYWJsZVNob3Vs ZFN1Y2NlZWQsIExpYkluaXRNb2NrZWQsIExpYkNsZWFudXAsDQo+ID4gTlVMTA0KPiA+ID4gKyAg ICApOw0KPiA+ID4gKyAgQWRkVGVzdENhc2UgKA0KPiA+ID4gKyAgICBTaGltVGVzdHMsDQo+ID4g PiArICAgICJMb2NraW5nIGEgdmFyaWFibGUgdGhhdCBhbHJlYWR5IGhhcyBhbiB1bmxvY2tlZCBw b2xpY3kgc2hvdWxkDQo+IGZhaWwiLA0KPiA+ID4gIkxvY2tBZnRlclVubG9ja2VkUG9saWN5IiwN Cj4gPiA+ICsgICAgTG9ja2luZ0FuVW5sb2NrZWRWYXJpYWJsZVNob3VsZEZhaWwsIExpYkluaXRN b2NrZWQsIExpYkNsZWFudXAsDQo+ID4gTlVMTA0KPiA+ID4gKyAgICApOw0KPiA+ID4gKyAgQWRk VGVzdENhc2UgKA0KPiA+ID4gKyAgICBTaGltVGVzdHMsDQo+ID4gPiArICAgICJBZGRpbmcgYSBw b2xpY3kgZm9yIGEgdmFyaWFibGUgdGhhdCBoYXMgcHJldmlvdXNseSBiZWVuIGxvY2tlZA0KPiBz aG91bGQNCj4gPiA+IGFsd2F5cyBmYWlsIiwgIlNldFBvbGljeUFmdGVyTG9jayIsDQo+ID4gPiAr ICAgIFNldHRpbmdQb2xpY3lGb3JBTG9ja2VkVmFyaWFibGVTaG91bGRGYWlsLCBMaWJJbml0TW9j a2VkLA0KPiA+IExpYkNsZWFudXAsDQo+ID4gPiBOVUxMDQo+ID4gPiArICAgICk7DQo+ID4gPiAr DQo+ID4gPiArICAvLw0KPiA+ID4gKyAgLy8gRXhlY3V0ZSB0aGUgdGVzdHMuDQo+ID4gPiArICAv Lw0KPiA+ID4gKyAgU3RhdHVzID0gUnVuQWxsVGVzdFN1aXRlcyAoRnJhbWV3b3JrKTsNCj4gPiA+ ICsNCj4gPiA+ICtFWElUOg0KPiA+ID4gKyAgaWYgKEZyYW1ld29yayAhPSBOVUxMKSB7DQo+ID4g PiArICAgIEZyZWVVbml0VGVzdEZyYW1ld29yayAoRnJhbWV3b3JrKTsNCj4gPiA+ICsgIH0NCj4g PiA+ICsNCj4gPiA+ICsgIHJldHVybjsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLy8vDQo+ ID4gPiArLy8vIEF2b2lkIEVDQyBlcnJvciBmb3IgZnVuY3Rpb24gbmFtZSB0aGF0IHN0YXJ0cyB3 aXRoIGxvd2VyIGNhc2UNCj4gPiA+ICtsZXR0ZXIgLy8vICNkZWZpbmUgTWFpbiBtYWluDQo+ID4g PiArDQo+ID4gPiArLyoqDQo+ID4gPiArICBTdGFuZGFyZCBQT1NJWCBDIGVudHJ5IHBvaW50IGZv ciBob3N0IGJhc2VkIHVuaXQgdGVzdCBleGVjdXRpb24uDQo+ID4gPiArDQo+ID4gPiArICBAcGFy YW1baW5dIEFyZ2MgIE51bWJlciBvZiBhcmd1bWVudHMNCj4gPiA+ICsgIEBwYXJhbVtpbl0gQXJn diAgQXJyYXkgb2YgcG9pbnRlcnMgdG8gYXJndW1lbnRzDQo+ID4gPiArDQo+ID4gPiArICBAcmV0 dmFsIDAgICAgICBTdWNjZXNzDQo+ID4gPiArICBAcmV0dmFsIG90aGVyICBFcnJvcg0KPiA+ID4g KyoqLw0KPiA+ID4gK0lOVDMyDQo+ID4gPiArTWFpbiAoDQo+ID4gPiArICBJTiBJTlQzMiAgQXJn YywNCj4gPiA+ICsgIElOIENIQVI4ICAqQXJndltdDQo+ID4gPiArICApDQo+ID4gPiArew0KPiA+ ID4gKyAgVW5pdFRlc3RNYWluICgpOw0KPiA+ID4gKyAgcmV0dXJuIDA7DQo+ID4gPiArfQ0KPiA+ ID4gZGlmZiAtLWdpdA0KPiA+ID4gYS9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1J1 bnRpbWVEeGUvUnVudGltZUR4ZVVuaXRUZXN0L1ZhDQo+ID4gPiByaWFibGVMb2NrUmVxdWVzdFRv TG9ja1VuaXRUZXN0LmluZg0KPiA+ID4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxl L1J1bnRpbWVEeGUvUnVudGltZUR4ZVVuaXRUZXN0L1ZhDQo+ID4gPiByaWFibGVMb2NrUmVxdWVz dFRvTG9ja1VuaXRUZXN0LmluZg0KPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiA+IGlu ZGV4IDAwMDAwMDAwMDAwMC4uMmE2NTlkN2UxMzcwDQo+ID4gPiAtLS0gL2Rldi9udWxsDQo+ID4g PiArKysNCj4gPiA+IGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9SdW50aW1lRHhl L1J1bnRpbWVEeGVVbml0VGVzdC9WYQ0KPiA+ID4gcmkNCj4gPiA+ICsrKyBhYmxlTG9ja1JlcXVl c3RUb0xvY2tVbml0VGVzdC5pbmYNCj4gPiA+IEBAIC0wLDAgKzEsMzYgQEANCj4gPiA+ICsjIyBA ZmlsZQ0KPiA+ID4gKyMgVGhpcyBpcyBhIGhvc3QtYmFzZWQgdW5pdCB0ZXN0IGZvciB0aGUgVmFy aWFibGVMb2NrUmVxdWVzdFRvTG9jaw0KPiBzaGltLg0KPiA+ID4gKyMNCj4gPiA+ICsjIENvcHly aWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLg0KPiA+ID4gKyMgU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQgIyMNCj4gPiA+ICsNCj4gPiA+ICtbRGVmaW5l c10NCj4gPiA+ICsgIElORl9WRVJTSU9OICAgICAgICAgPSAweDAwMDEwMDE3DQo+ID4gPiArICBC QVNFX05BTUUgICAgICAgICAgID0gVmFyaWFibGVMb2NrUmVxdWVzdFRvTG9ja1VuaXRUZXN0DQo+ ID4gPiArICBGSUxFX0dVSUQgICAgICAgICAgID0gQTczODhCNkMtNzI3NC00NzE3LTk2NDktQkRD NURGRDFGQ0JFDQo+ID4gPiArICBWRVJTSU9OX1NUUklORyAgICAgID0gMS4wDQo+ID4gPiArICBN T0RVTEVfVFlQRSAgICAgICAgID0gSE9TVF9BUFBMSUNBVElPTg0KPiA+ID4gKw0KPiA+ID4gKyMN Cj4gPiA+ICsjIFRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gaXMgZm9yIHJlZmVyZW5jZSBvbmx5 IGFuZCBub3QgcmVxdWlyZWQgYnkNCj4gdGhlDQo+ID4gPiBidWlsZCB0b29scy4NCj4gPiA+ICsj DQo+ID4gPiArIyAgVkFMSURfQVJDSElURUNUVVJFUyAgICAgICAgICAgPSBJQTMyIFg2NCBBUk0g QUFSQ0g2NA0KPiA+ID4gKyMNCj4gPiA+ICsNCj4gPiA+ICtbU291cmNlc10NCj4gPiA+ICsgIFZh cmlhYmxlTG9ja1JlcXVlc3RUb0xvY2tVbml0VGVzdC5jDQo+ID4gPiArICAuLi9WYXJpYWJsZUxv Y2tSZXF1ZXN0VG9Mb2NrLmMNCj4gPiA+ICsNCj4gPiA+ICtbUGFja2FnZXNdDQo+ID4gPiArICBN ZGVQa2cvTWRlUGtnLmRlYw0KPiA+ID4gKyAgTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kZWMN Cj4gPiA+ICsgIFVuaXRUZXN0RnJhbWV3b3JrUGtnL1VuaXRUZXN0RnJhbWV3b3JrUGtnLmRlYw0K PiA+ID4gKw0KPiA+ID4gK1tMaWJyYXJ5Q2xhc3Nlc10NCj4gPiA+ICsgIFVuaXRUZXN0TGliDQo+ ID4gPiArICBEZWJ1Z0xpYg0KPiA+ID4gKyAgVmFyaWFibGVQb2xpY3lMaWINCj4gPiA+ICsgIFZh cmlhYmxlUG9saWN5SGVscGVyTGliDQo+ID4gPiArICBCYXNlTWVtb3J5TGliDQo+ID4gPiArICBN ZW1vcnlBbGxvY2F0aW9uTGliDQo+ID4gPiBkaWZmIC0tZ2l0DQo+ID4gPiBhL01kZU1vZHVsZVBr Zy9Vbml2ZXJzYWwvVmFyaWFibGUvUnVudGltZUR4ZS9WYXJpYWJsZUxvY2tSZXF1ZXN0VG9MDQo+ ID4gPiBvY2suYw0KPiA+ID4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1J1bnRp bWVEeGUvVmFyaWFibGVMb2NrUmVxdWVzdFRvTA0KPiA+ID4gb2NrLmMNCj4gPiA+IGluZGV4IDRh YTg1NGFhZjI2MC4uMTkxZGU2YjkwN2M1IDEwMDY0NA0KPiA+ID4gLS0tDQo+ID4gPiBhL01kZU1v ZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUnVudGltZUR4ZS9WYXJpYWJsZUxvY2tSZXF1ZXN0 VG9MDQo+ID4gPiBvY2suYw0KPiA+ID4gKysrDQo+ID4gPiBiL01kZU1vZHVsZVBrZy9Vbml2ZXJz YWwvVmFyaWFibGUvUnVudGltZUR4ZS9WYXJpYWJsZUxvY2tSZXF1ZXN0VG9MDQo+ID4gPiBvDQo+ ID4gPiArKysgY2suYw0KPiA+ID4gQEAgLTEsNjcgKzEsMzYwIEBADQo+ID4gPiAtLyoqIEBmaWxl IC0tIFZhcmlhYmxlTG9ja1JlcXVlc3RUb0xvY2suYyAtVGVtcG9yYXJ5IGxvY2F0aW9uIG9mIHRo ZQ0KPiA+ID4gUmVxdWVzdFRvTG9jayBzaGltIGNvZGUgd2hpbGUgLXByb2plY3RzIGFyZSBtb3Zl ZCB0byBWYXJpYWJsZVBvbGljeS4NCj4gPiA+IFNob3VsZCBiZSByZW1vdmVkIHdoZW4gZGVwcmVj YXRlZC4NCj4gPiA+ICsvKiogQGZpbGUNCj4gPiA+ICsgIFRlbXBvcmFyeSBsb2NhdGlvbiBvZiB0 aGUgUmVxdWVzdFRvTG9jayBzaGltIGNvZGUgd2hpbGUgcHJvamVjdHMNCj4gPiA+ICsgIGFyZSBt b3ZlZCB0byBWYXJpYWJsZVBvbGljeS4gU2hvdWxkIGJlIHJlbW92ZWQgd2hlbiBkZXByZWNhdGVk Lg0KPiA+ID4NCj4gPiA+IC1Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4NCj4g PiA+IC1TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ID4g KyAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uDQo+ID4gPiArICBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ID4NCj4gPiA+ICAqKi8N Cj4gPiA+DQo+ID4gPiAgI2luY2x1ZGUgPFVlZmkuaD4NCj4gPiA+IC0NCj4gPiA+ICAjaW5jbHVk ZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPiA+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1v cnlMaWIuaD4NCj4gPiA+ICAjaW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9uTGliLmg+ DQo+ID4gPiAtDQo+ID4gPiAtI2luY2x1ZGUgPFByb3RvY29sL1ZhcmlhYmxlTG9jay5oPg0KPiA+ ID4gLQ0KPiA+ID4gLSNpbmNsdWRlIDxQcm90b2NvbC9WYXJpYWJsZVBvbGljeS5oPg0KPiA+ID4g ICNpbmNsdWRlIDxMaWJyYXJ5L1ZhcmlhYmxlUG9saWN5TGliLmg+DQo+ID4gPiAgI2luY2x1ZGUg PExpYnJhcnkvVmFyaWFibGVQb2xpY3lIZWxwZXJMaWIuaD4NCj4gPiA+ICsjaW5jbHVkZSA8UHJv dG9jb2wvVmFyaWFibGVMb2NrLmg+DQo+ID4gPg0KPiA+ID4gKy8vDQo+ID4gPiArLy8gTk9URTog RE8gTk9UIFVTRSBUSEVTRSBNQUNST1Mgb24gYW55IHN0cnVjdHVyZSB0aGF0IGhhcyBub3QgYmVl bg0KPiA+ID4gdmFsaWRhdGVkLg0KPiA+ID4gKy8vICAgICAgIEN1cnJlbnQgdGFibGUgZGF0YSBo YXMgYWxyZWFkeSBiZWVuIHNhbml0aXplZC4NCj4gPiA+ICsvLw0KPiA+ID4gKyNkZWZpbmUgR0VU X05FWFRfUE9MSUNZKEN1clBvbGljeSkNCj4gPiA+ICsoVkFSSUFCTEVfUE9MSUNZX0VOVFJZKiko KFVJTlQ4KilDdXJQb2xpY3kgKyBDdXJQb2xpY3ktPlNpemUpICNkZWZpbmUNCj4gPiA+ICtHRVRf UE9MSUNZX05BTUUoQ3VyUG9saWN5KSAgKENIQVIxNiopKChVSU5UTilDdXJQb2xpY3kgKw0KPiA+ ID4gK0N1clBvbGljeS0+T2Zmc2V0VG9OYW1lKQ0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgTUFU Q0hfUFJJT1JJVFlfRVhBQ1QgIDANCj4gPiA+ICsjZGVmaW5lIE1BVENIX1BSSU9SSVRZX01JTiAg ICBNQVhfVUlOVDgNCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgIFRoaXMgaGVscGVyIGZ1 bmN0aW9uIGV2YWx1YXRlcyBhIHBvbGljeSBhbmQgZGV0ZXJtaW5lcyB3aGV0aGVyIGl0DQo+ID4g PiArbWF0Y2hlcyB0aGUNCj4gPiA+ICsgIHRhcmdldCB2YXJpYWJsZS4gSWYgbWF0Y2hlZCwgd2ls bCBhbHNvIHJldHVybiBhIHZhbHVlIGNvcnJlc3BvbmRpbmcNCj4gPiA+ICt0byB0aGUNCj4gPiA+ ICsgIHByaW9yaXR5IG9mIHRoZSBtYXRjaC4NCj4gPiA+ICsNCj4gPiA+ICsgIFRoZSBydWxlcyBm b3IgImJlc3QgbWF0Y2giIGFyZSBsaXN0ZWQgaW4gdGhlIFZhcmlhYmxlIFBvbGljeSBTcGVjLg0K PiA+ID4gKyAgUGVyZmVjdCBuYW1lIG1hdGNoZXMgd2lsbCByZXR1cm4gMC4NCj4gPiA+ICsgIFNp bmdsZSB3aWxkY2FyZCBjaGFyYWN0ZXJzIHdpbGwgcmV0dXJuIHRoZSBudW1iZXIgb2Ygd2lsZGNh cmQNCj4gPiBjaGFyYWN0ZXJzLg0KPiA+ID4gKyAgRnVsbCBuYW1lc3BhY2VzIHdpbGwgcmV0dXJu IE1BWF9VSU5UOC4NCj4gPiA+ICsNCj4gPiA+ICsgIEBwYXJhbVtpbl0gIEV2YWxFbnRyeSAgICAg IFBvaW50ZXIgdG8gdGhlIHBvbGljeSBlbnRyeSBiZWluZw0KPiA+IGV2YWx1YXRlZC4NCj4gPiA+ ICsgIEBwYXJhbVtpbl0gIFZhcmlhYmxlTmFtZSAgIFNhbWUgYXMgRUZJX1NFVF9WQVJJQUJMRS4N Cj4gPiA+ICsgIEBwYXJhbVtpbl0gIFZlbmRvckd1aWQgICAgIFNhbWUgYXMgRUZJX1NFVF9WQVJJ QUJMRS4NCj4gPiA+ICsgIEBwYXJhbVtvdXRdIE1hdGNoUHJpb3JpdHkgIFtPcHRpb25hbF0gT24g ZmluZGluZyBhIG1hdGNoLCB0aGlzIHZhbHVlDQo+ID4gPiBjb250YWlucw0KPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHByaW9yaXR5IG9mIHRoZSBtYXRjaC4gTG93ZXIN Cj4gPiBudW1iZXIgPT0gaGlnaGVyDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwcmlvcml0eS4gT25seSB2YWxpZCBpZiBhIG1hdGNoIGZvdW5kLg0KPiA+ID4gKw0KPiA+ID4g KyAgQHJldHZhbCAgVFJVRSAgIEN1cnJlbnQgZW50cnkgbWF0Y2hlcyB0aGUgdGFyZ2V0IHZhcmlh YmxlLg0KPiA+ID4gKyAgQHJldHZhbCAgRkFMU0UgIEN1cnJlbnQgZW50cnkgZG9lcyBub3QgbWF0 Y2ggYXQgYWxsLg0KPiA+ID4gKw0KPiA+ID4gKyoqLw0KPiA+ID4gK1NUQVRJQw0KPiA+ID4gK0JP T0xFQU4NCj4gPiA+ICtFdmFsdWF0ZVBvbGljeU1hdGNoICgNCj4gPiA+ICsgIElOIENPTlNUIFZB UklBQkxFX1BPTElDWV9FTlRSWSAgKkV2YWxFbnRyeSwNCj4gPiA+ICsgIElOIENPTlNUIENIQVIx NiAgICAgICAgICAgICAgICAgKlZhcmlhYmxlTmFtZSwNCj4gPiA+ICsgIElOIENPTlNUIEVGSV9H VUlEICAgICAgICAgICAgICAgKlZlbmRvckd1aWQsDQo+ID4gPiArICBPVVQgVUlOVDggICAgICAg ICAgICAgICAgICAgICAgICpNYXRjaFByaW9yaXR5ICBPUFRJT05BTA0KPiA+ID4gKyAgKQ0KPiA+ ID4gK3sNCj4gPiA+ICsgIEJPT0xFQU4gIFJlc3VsdDsNCj4gPiA+ICsgIENIQVIxNiAgICpQb2xp Y3lOYW1lOw0KPiA+ID4gKyAgVUlOVDggICAgQ2FsY3VsYXRlZFByaW9yaXR5Ow0KPiA+ID4gKyAg VUlOVE4gICAgSW5kZXg7DQo+ID4gPiArDQo+ID4gPiArICBSZXN1bHQgPSBGQUxTRTsNCj4gPiA+ ICsgIENhbGN1bGF0ZWRQcmlvcml0eSA9IE1BVENIX1BSSU9SSVRZX0VYQUNUOw0KPiA+ID4gKw0K PiA+ID4gKyAgLy8NCj4gPiA+ICsgIC8vIFN0ZXAgMTogSWYgdGhlIEdVSUQgZG9lc24ndCBtYXRj aCwgd2UncmUgZG9uZS4gTm8gbmVlZCB0byBldmFsdWF0ZQ0KPiA+ID4gYW55dGhpbmcgZWxzZS4N Cj4gPiA+ICsgIC8vDQo+ID4gPiArICBpZiAoIUNvbXBhcmVHdWlkICgmRXZhbEVudHJ5LT5OYW1l c3BhY2UsIFZlbmRvckd1aWQpKSB7DQo+ID4gPiArICAgIGdvdG8gRXhpdDsNCj4gPiA+ICsgIH0N Cj4gPiA+ICsNCj4gPiA+ICsgIC8vDQo+ID4gPiArICAvLyBJZiB0aGUgR1VJRCBtYXRjaGVzLCBj aGVjayB0byBzZWUgd2hldGhlciB0aGVyZSBpcyBhIE5hbWUNCj4gPiA+ICsgYXNzb2NpYXRlZCAg Ly8gd2l0aCB0aGUgcG9saWN5LiBJZiBub3QsIHRoaXMgcG9saWN5IG1hdGNoZXMgdGhlIGVudGly ZQ0KPiA+ID4gbmFtZXNwYWNlLg0KPiA+ID4gKyAgLy8gTWlzc2luZyBOYW1lIGlzIGluZGljYXRl ZCBieSBzaXplIGJlaW5nIGVxdWFsIHRvIG5hbWUuDQo+ID4gPiArICAvLw0KPiA+ID4gKyAgaWYg KEV2YWxFbnRyeS0+U2l6ZSA9PSBFdmFsRW50cnktPk9mZnNldFRvTmFtZSkgew0KPiA+ID4gKyAg ICBDYWxjdWxhdGVkUHJpb3JpdHkgPSBNQVRDSF9QUklPUklUWV9NSU47DQo+ID4gPiArICAgIFJl c3VsdCA9IFRSVUU7DQo+ID4gPiArICAgIGdvdG8gRXhpdDsNCj4gPiA+ICsgIH0NCj4gPiA+ICsN Cj4gPiA+ICsgIC8vDQo+ID4gPiArICAvLyBOb3cgdGhhdCB3ZSBrbm93IHRoZSBuYW1lIGV4aXN0 cywgZ2V0IGl0Lg0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIFBvbGljeU5hbWUgPSBHRVRfUE9MSUNZ X05BTUUgKEV2YWxFbnRyeSk7DQo+ID4gPiArDQo+ID4gPiArICAvLw0KPiA+ID4gKyAgLy8gRXZh bHVhdGUgdGhlIG5hbWUgYWdhaW5zdCB0aGUgcG9saWN5IG5hbWUgYW5kIGNoZWNrIGZvciBhIG1h dGNoLg0KPiA+ID4gKyAgLy8gQWNjb3VudCBmb3IgYW55IHdpbGRjYXJkcy4NCj4gPiA+ICsgIC8v DQo+ID4gPiArICBJbmRleCA9IDA7DQo+ID4gPiArICBSZXN1bHQgPSBUUlVFOw0KPiA+ID4gKyAg Ly8NCj4gPiA+ICsgIC8vIEtlZXAgZ29pbmcgdW50aWwgdGhlIGVuZCBvZiBib3RoIHN0cmluZ3Mu DQo+ID4gPiArICAvLw0KPiA+ID4gKyAgd2hpbGUgKFBvbGljeU5hbWVbSW5kZXhdICE9IENIQVJf TlVMTCB8fCBWYXJpYWJsZU5hbWVbSW5kZXhdICE9DQo+ID4gPiBDSEFSX05VTEwpIHsNCj4gPiA+ ICsgICAgLy8NCj4gPiA+ICsgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIG1hdGNoLi4uDQo+ID4g PiArICAgIC8vDQo+ID4gPiArICAgIGlmIChQb2xpY3lOYW1lW0luZGV4XSAhPSBWYXJpYWJsZU5h bWVbSW5kZXhdIHx8IFBvbGljeU5hbWVbSW5kZXhdDQo+ID4gPT0NCj4gPiA+ICcjJykgew0KPiA+ ID4gKyAgICAgIC8vDQo+ID4gPiArICAgICAgLy8gSWYgdGhpcyBpcyBhIG51bWVyaWNhbCB3aWxk Y2FyZCwgd2UgY2FuIGNvbnNpZGVyIGl0IGEgbWF0Y2ggaWYNCj4gd2UNCj4gPiBhbHRlcg0KPiA+ ID4gKyAgICAgIC8vIHRoZSBwcmlvcml0eS4NCj4gPiA+ICsgICAgICAvLw0KPiA+ID4gKyAgICAg IGlmIChQb2xpY3lOYW1lW0luZGV4XSA9PSBMJyMnICYmDQo+ID4gPiArICAgICAgICAgICAgKChM JzAnIDw9IFZhcmlhYmxlTmFtZVtJbmRleF0gJiYgVmFyaWFibGVOYW1lW0luZGV4XSA8PQ0KPiA+ IEwnOScpIHx8DQo+ID4gPiArICAgICAgICAgICAgIChMJ0EnIDw9IFZhcmlhYmxlTmFtZVtJbmRl eF0gJiYgVmFyaWFibGVOYW1lW0luZGV4XSA8PQ0KPiA+IEwnRicpIHx8DQo+ID4gPiArICAgICAg ICAgICAgIChMJ2EnIDw9IFZhcmlhYmxlTmFtZVtJbmRleF0gJiYgVmFyaWFibGVOYW1lW0luZGV4 XSA8PQ0KPiA+IEwnZicpKSkgew0KPiA+ID4gKyAgICAgICAgaWYgKENhbGN1bGF0ZWRQcmlvcml0 eSA8IE1BVENIX1BSSU9SSVRZX01JTikgew0KPiA+ID4gKyAgICAgICAgICBDYWxjdWxhdGVkUHJp b3JpdHkrKzsNCj4gPiA+ICsgICAgICAgIH0NCj4gPiA+ICsgICAgICAvLw0KPiA+ID4gKyAgICAg IC8vIE90aGVyd2lzZSwgbm90IGEgbWF0Y2guDQo+ID4gPiArICAgICAgLy8NCj4gPiA+ICsgICAg ICB9IGVsc2Ugew0KPiA+ID4gKyAgICAgICAgUmVzdWx0ID0gRkFMU0U7DQo+ID4gPiArICAgICAg ICBnb3RvIEV4aXQ7DQo+ID4gPiArICAgICAgfQ0KPiA+ID4gKyAgICB9DQo+ID4gPiArICAgIElu ZGV4Kys7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArRXhpdDoNCj4gPiA+ICsgIGlmIChS ZXN1bHQgJiYgTWF0Y2hQcmlvcml0eSAhPSBOVUxMKSB7DQo+ID4gPiArICAgICpNYXRjaFByaW9y aXR5ID0gQ2FsY3VsYXRlZFByaW9yaXR5Ow0KPiA+ID4gKyAgfQ0KPiA+ID4gKyAgcmV0dXJuIFJl c3VsdDsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICBUaGlzIGhlbHBl ciBmdW5jdGlvbiB3YWxrcyB0aGUgY3VycmVudCBwb2xpY3kgdGFibGUgYW5kIHJldHVybnMgYQ0K PiA+ID4gK3BvaW50ZXINCj4gPiA+ICsgIHRvIHRoZSBiZXN0IG1hdGNoLCBpZiBhbnkgYXJlIGZv dW5kLiBMZXZlcmFnZXMgRXZhbHVhdGVQb2xpY3lNYXRjaCgpDQo+ID4gPiArdG8NCj4gPiA+ICsg IGRldGVybWluZSAiYmVzdCIuDQo+ID4gPiArDQo+ID4gPiArICBAcGFyYW1baW5dICBQb2xpY3lU YWJsZSAgICAgIFBvaW50ZXIgdG8gY3VycmVudCBwb2xpY3kgdGFibGUuDQo+ID4gPiArICBAcGFy YW1baW5dICBQb2xpY3lUYWJsZVNpemUgIFNpemUgb2YgY3VycmVudCBwb2xpY3kgdGFibGUuDQo+ ID4gPiArICBAcGFyYW1baW5dICBWYXJpYWJsZU5hbWUgICAgIFNhbWUgYXMgRUZJX1NFVF9WQVJJ QUJMRS4NCj4gPiA+ICsgIEBwYXJhbVtpbl0gIFZlbmRvckd1aWQgICAgICAgU2FtZSBhcyBFRklf U0VUX1ZBUklBQkxFLg0KPiA+ID4gKyAgQHBhcmFtW291dF0gUmV0dXJuUHJpb3JpdHkgICBbT3B0 aW9uYWxdIElmIHBvaW50ZXIgaXMgcHJvdmlkZWQsDQo+IHJldHVybg0KPiA+IHRoZQ0KPiA+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlvcml0eSBvZiB0aGUgbWF0Y2guIFNh bWUgYXMNCj4gPiBFdmFsdWF0ZVBvbGljeU1hdGNoKCkuDQo+ID4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE9ubHkgdmFsaWQgaWYgYSBtYXRjaCBpcyByZXR1cm5lZC4NCj4gPiA+ ICsNCj4gPiA+ICsgIEByZXR2YWwgICAgIFZBUklBQkxFX1BPTElDWV9FTlRSWSogICAgQmVzdCBt YXRjaCB0aGF0IHdhcw0KPiA+IGZvdW5kLg0KPiA+ID4gKyAgQHJldHZhbCAgICAgTlVMTCAgICAg ICAgICAgICAgICAgICAgICBObyBtYXRjaCB3YXMgZm91bmQuDQo+ID4gPiArDQo+ID4gPiArKiov DQo+ID4gPiArU1RBVElDDQo+ID4gPiArVkFSSUFCTEVfUE9MSUNZX0VOVFJZKg0KPiA+ID4gK0dl dEJlc3RQb2xpY3lNYXRjaCAoDQo+ID4gPiArICBJTiBVSU5UOCAgICAgICAgICAgKlBvbGljeVRh YmxlLA0KPiA+ID4gKyAgSU4gVUlOVDMyICAgICAgICAgIFBvbGljeVRhYmxlU2l6ZSwNCj4gPiA+ ICsgIElOIENPTlNUIENIQVIxNiAgICAqVmFyaWFibGVOYW1lLA0KPiA+ID4gKyAgSU4gQ09OU1Qg RUZJX0dVSUQgICpWZW5kb3JHdWlkLA0KPiA+ID4gKyAgT1VUIFVJTlQ4ICAgICAgICAgICpSZXR1 cm5Qcmlvcml0eSAgT1BUSU9OQUwNCj4gPiA+ICsgICkNCj4gPiA+ICt7DQo+ID4gPiArICBWQVJJ QUJMRV9QT0xJQ1lfRU5UUlkgICpCZXN0UmVzdWx0Ow0KPiA+ID4gKyAgVkFSSUFCTEVfUE9MSUNZ X0VOVFJZICAqQ3VycmVudEVudHJ5Ow0KPiA+ID4gKyAgVUlOVDggICAgICAgICAgICAgICAgICBN YXRjaFByaW9yaXR5Ow0KPiA+ID4gKyAgVUlOVDggICAgICAgICAgICAgICAgICBDdXJyZW50UHJp b3JpdHk7DQo+ID4gPiArDQo+ID4gPiArICBCZXN0UmVzdWx0ID0gTlVMTDsNCj4gPiA+ICsgIE1h dGNoUHJpb3JpdHkgPSBNQVRDSF9QUklPUklUWV9FWEFDVDsNCj4gPiA+ICsNCj4gPiA+ICsgIC8v DQo+ID4gPiArICAvLyBXYWxrIGFsbCBlbnRyaWVzIGluIHRoZSB0YWJsZSwgbG9va2luZyBmb3Ig bWF0Y2hlcy4NCj4gPiA+ICsgIC8vDQo+ID4gPiArICBDdXJyZW50RW50cnkgPSAoVkFSSUFCTEVf UE9MSUNZX0VOVFJZKilQb2xpY3lUYWJsZTsNCj4gPiA+ICsgIHdoaWxlICgoVUlOVE4pQ3VycmVu dEVudHJ5IDwgKFVJTlROKSgoVUlOVDgqKVBvbGljeVRhYmxlICsNCj4gPiA+IFBvbGljeVRhYmxl U2l6ZSkpIHsNCj4gPiA+ICsgICAgLy8NCj4gPiA+ICsgICAgLy8gQ2hlY2sgZm9yIGEgbWF0Y2gu DQo+ID4gPiArICAgIC8vDQo+ID4gPiArICAgIGlmIChFdmFsdWF0ZVBvbGljeU1hdGNoIChDdXJy ZW50RW50cnksIFZhcmlhYmxlTmFtZSwgVmVuZG9yR3VpZCwNCj4gPiA+ICZDdXJyZW50UHJpb3Jp dHkpKSB7DQo+ID4gPiArICAgICAgLy8NCj4gPiA+ICsgICAgICAvLyBJZiBtYXRjaCBpcyBiZXR0 ZXIsIHRha2UgaXQuDQo+ID4gPiArICAgICAgLy8NCj4gPiA+ICsgICAgICBpZiAoQmVzdFJlc3Vs dCA9PSBOVUxMIHx8IEN1cnJlbnRQcmlvcml0eSA8IE1hdGNoUHJpb3JpdHkpIHsNCj4gPiA+ICsg ICAgICAgIEJlc3RSZXN1bHQgPSBDdXJyZW50RW50cnk7DQo+ID4gPiArICAgICAgICBNYXRjaFBy aW9yaXR5ID0gQ3VycmVudFByaW9yaXR5Ow0KPiA+ID4gKyAgICAgIH0NCj4gPiA+ICsNCj4gPiA+ ICsgICAgICAvLw0KPiA+ID4gKyAgICAgIC8vIElmIHlvdSd2ZSBoaXQgdGhlIGhpZ2hlc3QtcHJp b3JpdHkgbWF0Y2gsIGNhbiBleGl0IG5vdy4NCj4gPiA+ICsgICAgICAvLw0KPiA+ID4gKyAgICAg IGlmIChNYXRjaFByaW9yaXR5ID09IDApIHsNCj4gPiA+ICsgICAgICAgIGJyZWFrOw0KPiA+ID4g KyAgICAgIH0NCj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAvLw0KPiA+ID4gKyAg ICAvLyBJZiB3ZSdyZSBzdGlsbCBpbiB0aGUgbG9vcCwgbW92ZSB0byB0aGUgbmV4dCBlbnRyeS4N Cj4gPiA+ICsgICAgLy8NCj4gPiA+ICsgICAgQ3VycmVudEVudHJ5ID0gR0VUX05FWFRfUE9MSUNZ IChDdXJyZW50RW50cnkpOyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIC8vIElm IGEgcmV0dXJuIHByaW9yaXR5IHdhcyByZXF1ZXN0ZWQsIHJldHVybiBpdC4NCj4gPiA+ICsgIC8v DQo+ID4gPiArICBpZiAoUmV0dXJuUHJpb3JpdHkgIT0gTlVMTCkgew0KPiA+ID4gKyAgICAqUmV0 dXJuUHJpb3JpdHkgPSBNYXRjaFByaW9yaXR5Ow0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4g KyAgcmV0dXJuIEJlc3RSZXN1bHQ7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ ID4gKyAgVGhpcyBoZWxwZXIgZnVuY3Rpb24gd2lsbCBkdW1wIGFuZCB3YWxrIHRoZSBjdXJyZW50 IHBvbGljeSB0YWJsZXMgdG8NCj4gPiA+ICtkZXRlcm1pbmUNCj4gPiA+ICsgIHdoZXRoZXIgYSBt YXRjaGluZyBwb2xpY3kgYWxyZWFkeSBleGlzdHMgdGhhdCBzYXRpc2ZpZXMgdGhlIGxvY2sNCj4g cmVxdWVzdC4NCj4gPiA+ICsNCj4gPiA+ICsgIEBwYXJhbVtpbl0gVmFyaWFibGVOYW1lICBBIHBv aW50ZXIgdG8gdGhlIHZhcmlhYmxlIG5hbWUgdGhhdCBpcw0KPiA+IGJlaW5nDQo+ID4gPiBzZWFy Y2hlZC4NCj4gPiA+ICsgIEBwYXJhbVtpbl0gVmVuZG9yR3VpZCAgICBBIHBvaW50ZXIgdG8gdGhl IHZlbmRvciBHVUlEIHRoYXQgaXMgYmVpbmcNCj4gPiA+IHNlYXJjaGVkLg0KPiA+ID4gKw0KPiA+ ID4gKyAgQHJldHZhbCAgVFJVRSAgIFdlIGNhbiBzYWZlbHkgYXNzdW1lIHRoaXMgdmFyaWFibGUg aXMgbG9ja2VkLg0KPiA+ID4gKyAgQHJldHZhbCAgRkFMU0UgIEFuIGVycm9yIGhhcyBvY2N1cnJl ZCBvciB3ZSBjYW5ub3QgcHJvdmUgdGhhdCB0aGUNCj4gPiB2YXJpYWJsZQ0KPiA+ID4gaXMNCj4g PiA+ICsgICAgICAgICAgICAgICAgICBsb2NrZWQuDQo+ID4gPiArDQo+ID4gPiArKiovDQo+ID4g PiArU1RBVElDDQo+ID4gPiArQk9PTEVBTg0KPiA+ID4gK0lzVmFyaWFibGVBbHJlYWR5TG9ja2Vk ICgNCj4gPiA+ICsgIElOIENIQVIxNiAgICAqVmFyaWFibGVOYW1lLA0KPiA+ID4gKyAgSU4gRUZJ X0dVSUQgICpWZW5kb3JHdWlkDQo+ID4gPiArICApDQo+ID4gPiArew0KPiA+ID4gKyAgRUZJX1NU QVRVUyAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gPiArICBVSU5UOCAgICAgICAgICAgICAgICAg ICpQb2xpY3lUYWJsZTsNCj4gPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgUG9saWN5VGFi bGVTaXplOw0KPiA+ID4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICBSZXN1bHQ7DQo+ID4gPiAr ICBWQVJJQUJMRV9QT0xJQ1lfRU5UUlkgICpNYXRjaFBvbGljeTsNCj4gPiA+ICsgIFVJTlQ4ICAg ICAgICAgICAgICAgICAgTWF0Y2hQcmlvcml0eTsNCj4gPiA+ICsNCj4gPiA+ICsgIFJlc3VsdCA9 IFRSVUU7DQo+ID4gPiArDQo+ID4gPiArICAvLw0KPiA+ID4gKyAgLy8gRmlyc3QsIHdlIG5lZWQg dG8gZHVtcCB0aGUgZXhpc3RpbmcgcG9saWN5IHRhYmxlLg0KPiA+ID4gKyAgLy8NCj4gPiA+ICsg IFBvbGljeVRhYmxlU2l6ZSA9IDA7DQo+ID4gPiArICBQb2xpY3lUYWJsZSA9IE5VTEw7DQo+ID4g PiArICBTdGF0dXMgPSBEdW1wVmFyaWFibGVQb2xpY3kgKFBvbGljeVRhYmxlLCAmUG9saWN5VGFi bGVTaXplKTsgIGlmDQo+ID4gPiArIChTdGF0dXMgIT0gRUZJX0JVRkZFUl9UT09fU01BTEwpIHsN Cj4gPiA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhIC0gRmFpbGVkIHRvIGRldGVybWlu ZSBwb2xpY3kgdGFibGUNCj4gPiA+IHNpemUhICVyXG4iLCBfX0ZVTkNUSU9OX18sIFN0YXR1cykp Ow0KPiA+ID4gKyAgICByZXR1cm4gRkFMU0U7DQo+ID4gPiArICB9DQo+ID4gPiArICBQb2xpY3lU YWJsZSA9IEFsbG9jYXRlWmVyb1Bvb2wgKFBvbGljeVRhYmxlU2l6ZSk7ICBpZiAoUG9saWN5VGFi bGUgPT0NCj4gPiA+ICsgTlVMTCkgew0KPiA+ID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAi JWEgLSBGYWlsZWQgdG8gYWxsb2NhdGVkIHNwYWNlIGZvciBwb2xpY3kNCj4gPiB0YWJsZSENCj4g PiA+IDB4JVhcbiIsIF9fRlVOQ1RJT05fXywgUG9saWN5VGFibGVTaXplKSk7DQo+ID4gPiArICAg IHJldHVybiBGQUxTRTsNCj4gPiA+ICsgIH0NCj4gPiA+ICsgIFN0YXR1cyA9IER1bXBWYXJpYWJs ZVBvbGljeSAoUG9saWN5VGFibGUsICZQb2xpY3lUYWJsZVNpemUpOyAgaWYNCj4gPiA+ICsgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWEg LSBGYWlsZWQgdG8gZHVtcCBwb2xpY3kgdGFibGUhICVyXG4iLA0KPiA+ID4gX19GVU5DVElPTl9f LCBTdGF0dXMpKTsNCj4gPiA+ICsgICAgUmVzdWx0ID0gRkFMU0U7DQo+ID4gPiArICAgIGdvdG8g RXhpdDsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIC8vDQo+ID4gPiArICAvLyBOb3cg d2UgbmVlZCB0byB3YWxrIHRoZSB0YWJsZSBsb29raW5nIGZvciBhIG1hdGNoLg0KPiA+ID4gKyAg Ly8NCj4gPiA+ICsgIE1hdGNoUG9saWN5ID0gR2V0QmVzdFBvbGljeU1hdGNoICgNCj4gPiA+ICsg ICAgICAgICAgICAgICAgICBQb2xpY3lUYWJsZSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICBQ b2xpY3lUYWJsZVNpemUsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgVmFyaWFibGVOYW1lLA0K PiA+ID4gKyAgICAgICAgICAgICAgICAgIFZlbmRvckd1aWQsDQo+ID4gPiArICAgICAgICAgICAg ICAgICAgJk1hdGNoUHJpb3JpdHkNCj4gPiA+ICsgICAgICAgICAgICAgICAgICApOw0KPiA+ID4g KyAgaWYgKE1hdGNoUG9saWN5ICE9IE5VTEwgJiYgTWF0Y2hQcmlvcml0eSAhPSBNQVRDSF9QUklP UklUWV9FWEFDVCkNCj4gPiB7DQo+ID4gPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYSAt IFdlIHdvdWxkIG5vdCBoYXZlIGV4cGVjdGVkIGENCj4gPiBub24tZXhhY3QNCj4gPiA+IG1hdGNo ISAlZFxuIiwgX19GVU5DVElPTl9fLCBNYXRjaFByaW9yaXR5KSk7DQo+ID4gPiArICAgIFJlc3Vs dCA9IEZBTFNFOw0KPiA+ID4gKyAgICBnb3RvIEV4aXQ7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ ID4gPiArICAvLw0KPiA+ID4gKyAgLy8gTm93IHdlIGNhbiBjaGVjayB0byBzZWUgd2hldGhlciB0 aGlzIHZhcmlhYmxlIGlzIGN1cnJlbnRseSBsb2NrZWQuDQo+ID4gPiArICAvLw0KPiA+ID4gKyAg aWYgKE1hdGNoUG9saWN5LT5Mb2NrUG9saWN5VHlwZSAhPQ0KPiA+IFZBUklBQkxFX1BPTElDWV9U WVBFX0xPQ0tfTk9XKSB7DQo+ID4gPiArICAgIERFQlVHICgoREVCVUdfSU5GTywgIiVhIC0gUG9s aWN5IG1heSBub3QgbG9jayB2YXJpYWJsZSEgJWRcbiIsDQo+ID4gPiBfX0ZVTkNUSU9OX18sIE1h dGNoUG9saWN5LT5Mb2NrUG9saWN5VHlwZSkpOw0KPiA+ID4gKyAgICBSZXN1bHQgPSBGQUxTRTsN Cj4gPiA+ICsgICAgZ290byBFeGl0Ow0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gK0V4aXQ6 DQo+ID4gPiArICBpZiAoUG9saWN5VGFibGUgIT0gTlVMTCkgew0KPiA+ID4gKyAgICBGcmVlUG9v bCAoUG9saWN5VGFibGUpOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgcmV0dXJuIFJl c3VsdDsNCj4gPiA+ICt9DQo+ID4gPg0KPiA+ID4gIC8qKg0KPiA+ID4gICAgREVQUkVDQVRFRC4g VEhJUyBJUyBPTkxZIEhFUkUgQVMgQSBDT05WRU5JRU5DRSBXSElMRQ0KPiA+IFBPUlRJTkcuDQo+ ID4gPiAtICBNYXJrIGEgdmFyaWFibGUgdGhhdCB3aWxsIGJlY29tZSByZWFkLW9ubHkgYWZ0ZXIg bGVhdmluZyB0aGUgRFhFDQo+IHBoYXNlDQo+ID4gb2YNCj4gPiA+IGV4ZWN1dGlvbi4NCj4gPiA+ IC0gIFdyaXRlIHJlcXVlc3QgY29taW5nIGZyb20gU01NIGVudmlyb25tZW50IHRocm91Z2gNCj4g PiA+IEVGSV9TTU1fVkFSSUFCTEVfUFJPVE9DT0wgaXMgYWxsb3dlZC4NCj4gPiA+ICsgIE1hcmsg YSB2YXJpYWJsZSB0aGF0IHdpbGwgYmVjb21lIHJlYWQtb25seSBhZnRlciBsZWF2aW5nIHRoZSBE WEUNCj4gPiA+ICsgcGhhc2Ugb2YgIGV4ZWN1dGlvbi4gV3JpdGUgcmVxdWVzdCBjb21pbmcgZnJv bSBTTU0gZW52aXJvbm1lbnQNCj4gPiA+IHRocm91Z2gNCj4gPiA+ICsgRUZJX1NNTV9WQVJJQUJM RV9QUk9UT0NPTCBpcyBhbGxvd2VkLg0KPiA+ID4NCj4gPiA+ICAgIEBwYXJhbVtpbl0gVGhpcyAg ICAgICAgICBUaGUgVkFSSUFCTEVfTE9DS19QUk9UT0NPTA0KPiA+IGluc3RhbmNlLg0KPiA+ID4g LSAgQHBhcmFtW2luXSBWYXJpYWJsZU5hbWUgIEEgcG9pbnRlciB0byB0aGUgdmFyaWFibGUgbmFt ZSB0aGF0IHdpbGwgYmUNCj4gPiA+IG1hZGUgcmVhZC1vbmx5IHN1YnNlcXVlbnRseS4NCj4gPiA+ IC0gIEBwYXJhbVtpbl0gVmVuZG9yR3VpZCAgICBBIHBvaW50ZXIgdG8gdGhlIHZlbmRvciBHVUlE IHRoYXQgd2lsbCBiZQ0KPiA+IG1hZGUNCj4gPiA+IHJlYWQtb25seSBzdWJzZXF1ZW50bHkuDQo+ ID4gPiArICBAcGFyYW1baW5dIFZhcmlhYmxlTmFtZSAgQSBwb2ludGVyIHRvIHRoZSB2YXJpYWJs ZSBuYW1lIHRoYXQgd2lsbCBiZQ0KPiA+ID4gbWFkZQ0KPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJlYWQtb25seSBzdWJzZXF1ZW50bHkuDQo+ID4gPiArICBAcGFyYW1baW5dIFZl bmRvckd1aWQgICAgQSBwb2ludGVyIHRvIHRoZSB2ZW5kb3IgR1VJRCB0aGF0IHdpbGwgYmUNCj4g PiBtYWRlDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZC1vbmx5IHN1YnNl cXVlbnRseS4NCj4gPiA+DQo+ID4gPiAtICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBU aGUgdmFyaWFibGUgc3BlY2lmaWVkIGJ5IHRoZQ0KPiA+IFZhcmlhYmxlTmFtZSBhbmQNCj4gPiA+ IHRoZSBWZW5kb3JHdWlkIHdhcyBtYXJrZWQNCj4gPiA+IC0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGFzIHBlbmRpbmcgdG8gYmUgcmVhZC1vbmx5Lg0KPiA+ID4gKyAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHZhcmlhYmxlIHNwZWNpZmllZCBieSB0aGUNCj4gPiBW YXJpYWJsZU5hbWUgYW5kDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 aGUgVmVuZG9yR3VpZCB3YXMgbWFya2VkIGFzDQo+ID4gcGVuZGluZyB0byBiZQ0KPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZC1vbmx5Lg0KPiA+ID4gICAgQHJldHZh bCBFRklfSU5WQUxJRF9QQVJBTUVURVIgVmFyaWFibGVOYW1lIG9yIFZlbmRvckd1aWQgaXMNCj4g PiBOVUxMLg0KPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3IgVmFyaWFi bGVOYW1lIGlzIGFuIGVtcHR5DQo+ID4gc3RyaW5nLg0KPiA+ID4gLSAgQHJldHZhbCBFRklfQUND RVNTX0RFTklFRA0KPiA+IEVGSV9FTkRfT0ZfRFhFX0VWRU5UX0dST1VQX0dVSUQNCj4gPiA+IG9y IEVGSV9FVkVOVF9HUk9VUF9SRUFEWV9UT19CT09UIGhhcw0KPiA+ID4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYWxyZWFkeSBiZWVuIHNpZ25hbGVkLg0KPiA+ID4gLSAgQHJldHZh bCBFRklfT1VUX09GX1JFU09VUkNFUyAgVGhlcmUgaXMgbm90IGVub3VnaCByZXNvdXJjZSB0bw0K PiA+IGhvbGQNCj4gPiA+IHRoZSBsb2NrIHJlcXVlc3QuDQo+ID4gPiArICBAcmV0dmFsIEVGSV9B Q0NFU1NfREVOSUVEDQo+ID4gRUZJX0VORF9PRl9EWEVfRVZFTlRfR1JPVVBfR1VJRA0KPiA+ID4g b3INCj4gPiA+ICsNCj4gPiBFRklfRVZFTlRfR1JPVVBfUkVBRFlfVE9fQk9PVCBoYXMgYWxyZWFk eSBiZWVuDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWxlZC4N Cj4gPiA+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgIFRoZXJlIGlzIG5vdCBlbm91 Z2ggcmVzb3VyY2UgdG8NCj4gPiBob2xkDQo+ID4gPiB0aGUgbG9jaw0KPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC4NCj4gPiA+ICAqKi8NCj4gPiA+ICBFRklf U1RBVFVTDQo+ID4gPiAgRUZJQVBJDQo+ID4gPiAgVmFyaWFibGVMb2NrUmVxdWVzdFRvTG9jayAo DQo+ID4gPiAtICBJTiBDT05TVCBFREtJSV9WQVJJQUJMRV9MT0NLX1BST1RPQ09MICpUaGlzLA0K PiA+ID4gLSAgSU4gICAgICAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAqVmFyaWFibGVO YW1lLA0KPiA+ID4gLSAgSU4gICAgICAgRUZJX0dVSUQgICAgICAgICAgICAgICAgICAgICAqVmVu ZG9yR3VpZA0KPiA+ID4gKyAgSU4gQ09OU1QgRURLSUlfVkFSSUFCTEVfTE9DS19QUk9UT0NPTCAg KlRoaXMsDQo+ID4gPiArICBJTiBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq VmFyaWFibGVOYW1lLA0KPiA+ID4gKyAgSU4gRUZJX0dVSUQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKlZlbmRvckd1aWQNCj4gPiA+ICAgICkNCj4gPiA+ICB7DQo+ID4gPiAtICBFRklfU1RB VFVTICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gPiAtICBWQVJJQUJMRV9QT0xJQ1lfRU5UUlkg ICAqTmV3UG9saWN5Ow0KPiA+ID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICBTdGF0dXM7DQo+ ID4gPiArICBWQVJJQUJMRV9QT0xJQ1lfRU5UUlkgICpOZXdQb2xpY3k7DQo+ID4gPiArDQo+ID4g PiArICBERUJVRyAoKERFQlVHX0VSUk9SLCAiISEhIERFUFJFQ0FURUQgSU5URVJGQUNFICEhISAl YSgpIHdpbGwgZ28NCj4gPiBhd2F5DQo+ID4gPiArIHNvb24hXG4iLCBfX0ZVTkNUSU9OX18pKTsg IERFQlVHICgoREVCVUdfRVJST1IsICIhISEgREVQUkVDQVRFRA0KPiA+ID4gKyBJTlRFUkZBQ0Ug ISEhIFBsZWFzZSBtb3ZlIHRvIHVzZSBWYXJpYWJsZSBQb2xpY3khXG4iKSk7ICBERUJVRw0KPiA+ ID4gKyAoKERFQlVHX0VSUk9SLCAiISEhIERFUFJFQ0FURUQgSU5URVJGQUNFICEhISBWYXJpYWJs ZTogJWcgJXNcbiIsDQo+ID4gPiArIFZlbmRvckd1aWQsIFZhcmlhYmxlTmFtZSkpOw0KPiA+ID4N Cj4gPiA+ICAgIE5ld1BvbGljeSA9IE5VTEw7DQo+ID4gPiAtICBTdGF0dXMgPSBDcmVhdGVCYXNp Y1ZhcmlhYmxlUG9saWN5KCBWZW5kb3JHdWlkLA0KPiA+ID4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVmFyaWFibGVOYW1lLA0KPiA+ID4gLQ0KPiA+IFZBUklBQkxFX1BP TElDWV9OT19NSU5fU0laRSwNCj4gPiA+IC0NCj4gPiBWQVJJQUJMRV9QT0xJQ1lfTk9fTUFYX1NJ WkUsDQo+ID4gPiAtDQo+ID4gVkFSSUFCTEVfUE9MSUNZX05PX01VU1RfQVRUUiwNCj4gPiA+IC0N Cj4gPiBWQVJJQUJMRV9QT0xJQ1lfTk9fQ0FOVF9BVFRSLA0KPiA+ID4gLQ0KPiA+IFZBUklBQkxF X1BPTElDWV9UWVBFX0xPQ0tfTk9XLA0KPiA+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJk5ld1BvbGljeSApOw0KPiA+ID4gKyAgU3RhdHVzID0gQ3JlYXRlQmFzaWNW YXJpYWJsZVBvbGljeSgNCj4gPiA+ICsgICAgICAgICAgICAgVmVuZG9yR3VpZCwNCj4gPiA+ICsg ICAgICAgICAgICAgVmFyaWFibGVOYW1lLA0KPiA+ID4gKyAgICAgICAgICAgICBWQVJJQUJMRV9Q T0xJQ1lfTk9fTUlOX1NJWkUsDQo+ID4gPiArICAgICAgICAgICAgIFZBUklBQkxFX1BPTElDWV9O T19NQVhfU0laRSwNCj4gPiA+ICsgICAgICAgICAgICAgVkFSSUFCTEVfUE9MSUNZX05PX01VU1Rf QVRUUiwNCj4gPiA+ICsgICAgICAgICAgICAgVkFSSUFCTEVfUE9MSUNZX05PX0NBTlRfQVRUUiwN Cj4gPiA+ICsgICAgICAgICAgICAgVkFSSUFCTEVfUE9MSUNZX1RZUEVfTE9DS19OT1csDQo+ID4g PiArICAgICAgICAgICAgICZOZXdQb2xpY3kNCj4gPiA+ICsgICAgICAgICAgICAgKTsNCj4gPiA+ ICAgIGlmICghRUZJX0VSUk9SKCBTdGF0dXMgKSkgew0KPiA+ID4gLSAgICBTdGF0dXMgPSBSZWdp c3RlclZhcmlhYmxlUG9saWN5KCBOZXdQb2xpY3kgKTsNCj4gPiA+ICsgICAgU3RhdHVzID0gUmVn aXN0ZXJWYXJpYWJsZVBvbGljeSAoTmV3UG9saWN5KTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgLy8N Cj4gPiA+ICsgICAgLy8gSWYgdGhlIGVycm9yIHJldHVybmVkIGlzIEVGSV9BTFJFQURZX1NUQVJU RUQsIHdlIG5lZWQgdG8gY2hlY2sNCj4gPiB0aGUNCj4gPiA+ICsgICAgLy8gY3VycmVudCBkYXRh YmFzZSBmb3IgdGhlIHZhcmlhYmxlIGFuZCBzZWUgd2hldGhlciBpdCdzIGxvY2tlZC4NCj4gSWYg aXQncw0KPiA+ID4gKyAgICAvLyBsb2NrZWQsIHdlJ3JlIHN0aWxsIGZpbmUsIGJ1dCBhbHNvIGdl bmVyYXRlIGEgREVCVUdfRVJST1INCj4gPiBtZXNzYWdlIHNvDQo+ID4gPiB0aGUNCj4gPiA+ICsg ICAgLy8gZHVwbGljYXRlIGxvY2sgY2FuIGJlIHJlbW92ZWQuDQo+ID4gPiArICAgIC8vDQo+ID4g PiArICAgIGlmIChTdGF0dXMgPT0gRUZJX0FMUkVBRFlfU1RBUlRFRCkgew0KPiA+ID4gKyAgICAg IGlmIChJc1ZhcmlhYmxlQWxyZWFkeUxvY2tlZCAoVmFyaWFibGVOYW1lLCBWZW5kb3JHdWlkKSkg ew0KPiA+ID4gKyAgICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiAgVmFyaWFibGU6ICVnICVz IGlzIGFscmVhZHkNCj4gPiBsb2NrZWQhXG4iLA0KPiA+ID4gVmVuZG9yR3VpZCwgVmFyaWFibGVO YW1lKSk7DQo+ID4gPiArICAgICAgICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gPiA+ICsgICAg ICB9DQo+ID4gPiArICAgIH0NCj4gPiA+ICAgIH0NCj4gPiA+IC0gIGlmIChFRklfRVJST1IoIFN0 YXR1cyApKSB7DQo+ID4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiAgICAg IERFQlVHKCggREVCVUdfRVJST1IsICIlYSAtIEZhaWxlZCB0byBsb2NrIHZhcmlhYmxlICVzISAl clxuIiwNCj4gPiA+IF9fRlVOQ1RJT05fXywgVmFyaWFibGVOYW1lLCBTdGF0dXMgKSk7DQo+ID4g PiAtICAgIEFTU0VSVF9FRklfRVJST1IoIFN0YXR1cyApOw0KPiA+ID4gICAgfQ0KPiA+ID4gICAg aWYgKE5ld1BvbGljeSAhPSBOVUxMKSB7DQo+ID4gPiAgICAgIEZyZWVQb29sKCBOZXdQb2xpY3kg KTsNCj4gPiA+IC0tDQo+ID4gPiAyLjI5LjIud2luZG93cy4yDQo+ID4gPg0KPiA+ID4NCj4gPiA+ DQo+ID4gPg0KPiA+ID4NCj4gDQo+IA0KPiANCj4gDQo+IA0KPiANCj4gDQoNCg==