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.web12.17521.1595956806202440477 for ; Tue, 28 Jul 2020 10:20:06 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=Du9PnCp0; spf=pass (domain: intel.com, ip: 134.134.136.126, mailfrom: michael.d.kinney@intel.com) IronPort-SDR: SDj5UZ9sW3h96USHLjTyJZff0MiI2Efv8S/ASfn0p8L8uy89vRdYoIPWEyErhVWP6+hYuxGLJ/ Gei1YkCtBB4w== X-IronPort-AV: E=McAfee;i="6000,8403,9696"; a="138793272" X-IronPort-AV: E=Sophos;i="5.75,406,1589266800"; d="scan'208";a="138793272" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Jul 2020 10:20:04 -0700 IronPort-SDR: CU8TFclfI/MJewH/VEIqD5Fi79iJ/0A6muYIj36Dwq/x2TZzbHqPxVN+e6WAij9HuzVTzpOh+s 6goa99ry1XUQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,406,1589266800"; d="scan'208";a="328400286" Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83]) by FMSMGA003.fm.intel.com with ESMTP; 28 Jul 2020 10:20:04 -0700 Received: from fmsmsx606.amr.corp.intel.com (10.18.126.86) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 28 Jul 2020 10:19:59 -0700 Received: from FMSEDG001.ED.cps.intel.com (10.1.192.133) by fmsmsx606.amr.corp.intel.com (10.18.126.86) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.1713.5 via Frontend Transport; Tue, 28 Jul 2020 10:19:59 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.103) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 28 Jul 2020 10:19:56 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lN+ALGrIjqW8pbiH7Zs60TpVpVUYxEFtuMCsiG8X/MljJNTn8V6kR9orWrD0pNyO/KZD25ye40L4v/5e1XXzlS99qkpEEO5zttpyAPT84QL6ZSNPX/hp4oLj+y7Ny/ZIxuoobnqA3+BpP/02G/7LpAYd3rtezEItC6DLiOhJwTMdA/xB0VWt8RjQts+VDqoyH6BLVyvsYQpj8Hmhm4iysg/d+ZMbzpGayWnQ0dFVqKNCVBYlmbbpUkc7KFoADMTAFFpjKxJ9MtbRxaI+2pGt5z6pgYCO8M0OqEG7Fxa++AJDzUl/XDXFqjDyrogzWkfnUnRMhK/AFqZWH5hoiZUz9A== 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=7Ls8Mwxc1L9KWc6480KDUJG3392MS+GHwUYMbnZHb68=; b=BmzbGeJvnnj9HY2Nsz/0PCzAosvk8HEZ9ppAbWaiYyjagGS5MGNSn6uCUBzDAmsW2rcCCVVvyFlpzLkqS0jUrIyi4N85ffTkfzpdVwbpOMi53OtdHw8u0qg5q0rWt3Q/s+pgJQ3j+q1aYXnwwQuKpLsFkNI20LD8y93FGHLWJJF3UTDvtKosj2dX2wJbIQGcmHzQxalt5WSsl5h4f9w0tDsJJWo2MUJ4grTbk9JT57hgjnxEHrc2VsJ8NamizP8jC3r08K0+oGLdkmg5MGiNfHTAb2LgSIdLak557VBYW4gTMEALKyhK8bLqmwg1j5beNqFvA9SZ8g3CxJppfX4eEg== 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=7Ls8Mwxc1L9KWc6480KDUJG3392MS+GHwUYMbnZHb68=; b=Du9PnCp0CyKAsRHbLHvX2E9qLjb/VeCawVYfkNraUHDwrZMboIbfnMfdpYuPRCZW+uIPZFvQm//XaJAiK48/Q+S1JhIrvUSJMAciNHs3IaBw0ffCsuy4OzpJ/Mrcccwp0ENY9E3qG/YD6OwsYrpuk9DJ54uNjwyjczjfY9wOqbY= Received: from MN2PR11MB4461.namprd11.prod.outlook.com (2603:10b6:208:192::29) by BL0PR11MB3315.namprd11.prod.outlook.com (2603:10b6:208:6c::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3216.24; Tue, 28 Jul 2020 17:19:40 +0000 Received: from MN2PR11MB4461.namprd11.prod.outlook.com ([fe80::201e:29f2:a02:c260]) by MN2PR11MB4461.namprd11.prod.outlook.com ([fe80::201e:29f2:a02:c260%4]) with mapi id 15.20.3216.033; Tue, 28 Jul 2020 17:19:40 +0000 From: "Michael D Kinney" To: "devel@edk2.groups.io" , "tim.lewis@insyde.com" , "spbrogan@outlook.com" , "Ni, Ray" , "Kinney, Michael D" CC: "Shao, Ming" , "Dong, Eric" , 'Laszlo Ersek' , 'Sean Brogan' , 'Bret Barkelew' , "Yao, Jiewen" Subject: Re: [edk2-devel] [PATCH v4] UefiCpuPkg/MtrrLib/UnitTest: Add host based unit test Thread-Topic: [edk2-devel] [PATCH v4] UefiCpuPkg/MtrrLib/UnitTest: Add host based unit test Thread-Index: AQHWZLtS/jErZPd4FUeXp+MHB8EhG6kdMXGAgAAJ4oCAAAE+oA== Date: Tue, 28 Jul 2020 17:19:40 +0000 Message-ID: References: <04ae01d66502$67338d20$359aa760$@insyde.com> In-Reply-To: <04ae01d66502$67338d20$359aa760$@insyde.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.2.0.6 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: ecfb1b34-979f-40d9-f980-08d8331a6999 x-ms-traffictypediagnostic: BL0PR11MB3315: x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr 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: nGUCtfcLXan4/sXelAl1pmgg1crBuCrepFRvYqwgnR/1yeEVxEojjGXS0rLrwY00u4IWM2fj3kqHxpaMRFrCvMC3ajxjiQPs4kezE1YT1bWA0glmIft9O3wiqe0AkN4vuDMgzVjesB9TWa36CiPRmRTBEKfFmwQRvsP0voajYB1B5357vlDx76UbtEexMghXBlHqgYiyIu6ehIf/ZcARsGZrcU2gXopKNp/d07yTznFE+ePp2xg5xtZQhZPQUrYoYrLGBfq5TsM+wzZRtBzmRvz4CcCbhmlsz6FtK8E86ZWZ1xx7hvz+IaKJAi2anVnM1QWkwIB56XjHRVuW+KJuzPrNyrv6kraS9ZyyWqkPjwD35o2BHEDqHyy2TxJ3+JbzoRxT4PDtnPdC4fe4/Pga6lJccb38cd4Qz5IVonKCVp/EtiuokxjgVJQ1VaBhqVnA x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR11MB4461.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(4636009)(39860400002)(366004)(346002)(136003)(396003)(376002)(55016002)(54906003)(52536014)(316002)(9686003)(83380400001)(53546011)(19627235002)(6506007)(86362001)(110136005)(966005)(71200400001)(30864003)(4326008)(8676002)(478600001)(5660300002)(107886003)(66556008)(8936002)(33656002)(26005)(45080400002)(66946007)(66446008)(64756008)(66476007)(76116006)(2906002)(7696005)(186003)(579004)(569008);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: YHjFPwZ6KGXoY5wiZ3pXCNZocs7K2g7JZNxeTKNMs4WoNViyfDo3H7qzBySatCPx9bMgO9IlwTXnvLHWEhhrxKxeamxon65sgFLCiqZgjc7afuoXZdyYtWkAGAs+nNcs9AyUbDHttkvSIiUZ4iho9ZE3o8Gl4AKfzFj3h/sF91q4wmiZo2gI3wCzRLCegoMs6MF9qxJK8okZJk/jo2keJBaAzjYLw8ADSIcBmgZKRg3IWE+Uj7KqQSvij3F/oQNfYEoV5ONoNQXSeAfdp5GIcCNjzccK5pxXji4cgz+HEOHnQY+vjctuvK6W/eADWGbkkl71yoqOf6utEhdO0G0Rl1ROVKkQjmzNV+HmJE7OqGzXNk/4uGA/4FtoJW2u+uJIUNSIk48WCuJqq4iDhk1lDnwAMybK6/aZuNcINjw7O7a1cul4nBYBzk5X8xN0YSxYE8DCchxl/h/FgFgGp9awpy3cqr1qeY+IrBkxYTJAD0M= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN2PR11MB4461.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ecfb1b34-979f-40d9-f980-08d8331a6999 X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Jul 2020 17:19:40.5230 (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: u0oaRq1QLQ18/++zwJ/Hhn9/gc8I089GXl57M/3sK4PnUUuzKxAV8T/Ap9Yr5NUVN0N4r9n4FXY42looGI99sm1lSOnEn9YDFHuMhbZ0+qU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL0PR11MB3315 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 U2VhbiBhbmQgVGltLA0KDQpSYXkgaGFzIGFscmVhZHkgb3BlbmVkIGEgQlogdG8gd29yayBvbiB0 aGlzIHRvcGljLg0KDQpodHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcuY2dp P2lkPTI4NjMNCg0KSSBsaWtlIHRoZSBpZGVhIGlmIHRoZSBzdGF0aWMgc2VlZC4gIFRoYXQgbWF5 IGJlIGEgc2ltcGxlcg0Kd2F5IHRvIHJldXNlIGEgc21hbGxlciBzZXQgb2YgcmFuZG9tIHRlc3Qg dmVjdG9ycyBpbiBDSQ0KYW5kIHN0aWxsIHByb3ZpZGUgYSB3YXkgZm9yIGRldmVsb3BlcnMgYW5k IHJlbGVhc2UgdGVzdGluZw0KdG8gcnVuIGEgbXVjaCBsYXJnZXIgc2V0IG9mIHJhbmRvbSB0ZXN0 IHZlY3RvcnMuDQoNCk1pa2UNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9t OiBkZXZlbEBlZGsyLmdyb3Vwcy5pbyA8ZGV2ZWxAZWRrMi5ncm91cHMuaW8+IE9uDQo+IEJlaGFs ZiBPZiBUaW0gTGV3aXMNCj4gU2VudDogVHVlc2RheSwgSnVseSAyOCwgMjAyMCAxMDoxMyBBTQ0K PiBUbzogZGV2ZWxAZWRrMi5ncm91cHMuaW87IHNwYnJvZ2FuQG91dGxvb2suY29tOyBOaSwgUmF5 DQo+IDxyYXkubmlAaW50ZWwuY29tPg0KPiBDYzogS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwu ZC5raW5uZXlAaW50ZWwuY29tPjsNCj4gU2hhbywgTWluZyA8bWluZy5zaGFvQGludGVsLmNvbT47 IERvbmcsIEVyaWMNCj4gPGVyaWMuZG9uZ0BpbnRlbC5jb20+OyAnTGFzemxvIEVyc2VrJw0KPiA8 bGVyc2VrQHJlZGhhdC5jb20+OyAnU2VhbiBCcm9nYW4nDQo+IDxzZWFuLmJyb2dhbkBtaWNyb3Nv ZnQuY29tPjsgJ0JyZXQgQmFya2VsZXcnDQo+IDxCcmV0LkJhcmtlbGV3QG1pY3Jvc29mdC5jb20+ OyBZYW8sIEppZXdlbg0KPiA8amlld2VuLnlhb0BpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFJlOiBb ZWRrMi1kZXZlbF0gW1BBVENIIHY0XQ0KPiBVZWZpQ3B1UGtnL010cnJMaWIvVW5pdFRlc3Q6IEFk ZCBob3N0IGJhc2VkIHVuaXQgdGVzdA0KPiANCj4gU2VhbiAtLQ0KPiANCj4gV2hhdCBJIGhhdmUg c2VlbiBkb25lIGZvciBmdXp6IHRlc3RpbmcgaXMgdG8gKGEpIHJlcG9ydA0KPiB0aGUgc2VlZCB1 c2VkIHRvIGluaXRpYWxpemUgdGhlIFJORyBpbiB0aGUgbG9nIGFuZCB0aGVuDQo+IChiKSBwcm92 aWRlIGFuIG9wdGlvbiB0byBmb3JjZSB0aGUgc2VlZCB0byB0aGF0IHZhbHVlLg0KPiBVc2luZyBh IHN0YXRpYyBzZWVkIG1pZ2h0IGFjdHVhbGx5IGJlIHRoZSBkZWZhdWx0IGZvciBDSQ0KPiBydW5z LCBidXQgc3RhbmQtYWxvbmUgcnVucyBjb3VsZCB1c2UgYSByYW5kb20gdmFsdWUuDQo+IA0KPiBK dXN0IGEgdGhvdWdodC4NCj4gDQo+IFRpbQ0KPiANCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0t LS0NCj4gRnJvbTogZGV2ZWxAZWRrMi5ncm91cHMuaW8gPGRldmVsQGVkazIuZ3JvdXBzLmlvPiBP bg0KPiBCZWhhbGYgT2YgU2Vhbg0KPiBTZW50OiBUdWVzZGF5LCBKdWx5IDI4LCAyMDIwIDk6Mzgg QU0NCj4gVG86IGRldmVsQGVkazIuZ3JvdXBzLmlvOyByYXkubmlAaW50ZWwuY29tDQo+IENjOiBN aWNoYWVsIEQgS2lubmV5IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47IE1pbmcNCj4gU2hh byA8bWluZy5zaGFvQGludGVsLmNvbT47IEVyaWMgRG9uZw0KPiA8ZXJpYy5kb25nQGludGVsLmNv bT47IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb20+Ow0KPiBTZWFuIEJyb2dhbiA8c2Vh bi5icm9nYW5AbWljcm9zb2Z0LmNvbT47IEJyZXQgQmFya2VsZXcNCj4gPEJyZXQuQmFya2VsZXdA bWljcm9zb2Z0LmNvbT47IEppZXdlbiBZYW8NCj4gPGppZXdlbi55YW9AaW50ZWwuY29tPg0KPiBT dWJqZWN0OiBSZTogW2VkazItZGV2ZWxdIFtQQVRDSCB2NF0NCj4gVWVmaUNwdVBrZy9NdHJyTGli L1VuaXRUZXN0OiBBZGQgaG9zdCBiYXNlZCB1bml0IHRlc3QNCj4gDQo+IFJheSwNCj4gDQo+IEkg d29ycnkgdGhhdCB0aGlzIHN0eWxlIG9mIHRlc3Rpbmcgd2lsbCBsZWFkIHRvDQo+IGluY29uc2lz dGFudCByZXN1bHRzLg0KPiBHZW5lcmF0aW5nIHJhbmRvbSB0ZXN0IGNhc2VzIG1lYW5zIHRoYXQg dGhlIHRlc3QgY2FzZXMNCj4gb24gYW55IGdpdmVuIHJ1bg0KPiBjb3VsZCBmaW5kIGEgYnVnIGlu IHRoaXMgY29kZSB3aXRob3V0IHRoaXMgY29kZQ0KPiBjaGFuZ2luZy4gICBJIHRoaW5rIHRoaXMN Cj4gdHlwZSBvZiB0ZXN0aW5nIChmdXp6IHRlc3RpbmcgbGlrZSkgaXMgZ3JlYXQgYnV0IEkgdGhp bmsNCj4gd2UgbWlnaHQgd2FudA0KPiB0byBjb25zaWRlciB0aGlzIGEgZGlmZmVyZW50IHRlc3Qg dHlwZSBhbmQgdHJlYXQgaXQNCj4gZGlmZmVyZW50bHkuDQo+IA0KPiBGb3IgdW5pdCB0ZXN0aW5n IHRoZSBtdHJyIGxpYiBpdCB3b3VsZCBtYWtlIG1vcmUgc2Vuc2UNCj4gdG8gaWRlbnRpZnkgYSBm ZXcNCj4gdW5pcXVlIHBhc3NpbmcgYW5kIGZhaWxpbmcgdGVzdHMgYW5kIHN0YXRpY2FsbHkgYWRk DQo+IHRob3NlLiAgSWYgdGhlcmUgYXJlDQo+IGVkZ2UgY2FzZXMgb3IgbW9yZSBjYXNlcyBuZWVk ZWQgdG8gZ2V0IGZ1bGwgY29kZQ0KPiBjb3ZlcmFnZSB0aGVuDQo+IGRldmVsb3BpbmcgdGhvc2Ug d291bGQgYmUgZ3JlYXQuDQo+IA0KPiBBbm90aGVyIHBvaW50IGlzIG9uY2Ugd2Ugc3RhcnQgdHJh Y2tpbmcgY29kZSBjb3ZlcmFnZQ0KPiB5b3VyIHJhbmRvbSB0ZXN0DQo+IGdlbmVyYXRpb24gd2ls bCBsZWFkIHRvIGRpZmZlcmVudCByZXN1bHRzIHdoaWNoIHdpbGwNCj4gbWFrZSBpdCBoYXJkIHRv DQo+IHRyYWNrIHRoZSBtZXRyaWNzIHJlbGlhYmx5Lg0KPiANCj4gRmluYWxseSwgaWYgZWRrMiBj b21tdW5pdHkgd2FudHMgdG8gc3VwcG9ydCBmdXp6IHRlc3RpbmcNCj4gKHdoaWNoIGkgdGhpbmsN Cj4gaXMgZ29vZCkgd2Ugc2hvdWxkIGFkZCBkZXRhaWxzIGFib3V0IGhvdyB0byBhZGQgZnV6eg0K PiB0ZXN0aW5nIHRvIGVkazIgYW5kDQo+ICAgaG93IHRvIGV4Y2x1ZGUgaXQgZnJvbSBQUi9DSSB0 ZXN0IHJ1bnMuDQo+IA0KPiBUaG91Z2h0cz8NCj4gDQo+IFRoYW5rcw0KPiBTZWFuDQo+IA0KPiAN Cj4gDQo+IA0KPiBPbiA3LzI4LzIwMjAgMTo0MyBBTSwgTmksIFJheSB3cm90ZToNCj4gPiBBZGQg aG9zdCBiYXNlZCB1bml0IHRlc3RzIGZvciB0aGUgTXRyckxpYiBzZXJ2aWNlcy4NCj4gPiBUaGUg QmFzZUxpYiBzZXJ2aWNlcyBBc21DcHVpZCgpLCBBc21SZWFkTXNyNjQoKSwgYW5kDQo+ID4gQXNt V3JpdGVNc3I2NCgpIGFyZSBob29rZWQgYW5kIHByb3ZpZGUgc2ltcGxlDQo+IGVtdWxhdGlvbg0K PiA+IG9mIHRoZSBDUFVJRCBsZWFmcyBhbmQgTVNScyByZXF1aXJlZCBieSB0aGUgTXRyckxpYiB0 bw0KPiA+IHJ1biBhcyBhIGhvc3QgYmFzZWQgdW5pdCB0ZXN0Lg0KPiA+DQo+ID4gVGVzdCBjYXNl cyBhcmUgZGV2ZWxvcGVkIGZvciBlYWNoIG9mIHRoZSBBUEkuDQo+ID4NCj4gPiBGb3IgdGhlIG1v c3QgaW1wb3J0YW50IEFQSXMNCj4gTXRyclNldE1lbW9yeUF0dHJpYnV0ZXNJbk10cnJTZXR0aW5n cygpDQo+ID4gYW5kIE10cnJTZXRNZW1vcnlBdHRyaWJ1dGVJbk10cnJTZXR0aW5ncygpLCByYW5k b20NCj4gaW5wdXRzIGFyZQ0KPiA+IGdlbmVyYXRlZCBhbmQgZmVkIHRvIHRoZSBBUElzIHRvIG1h a2Ugc3VyZSB0aGUNCj4gaW1wbGVtZW50YXRpb24gaXMNCj4gPiBnb29kLiBUaGUgdGVzdCBhcHBs aWNhdGlvbiBhY2NlcHRzIGFuIG9wdGlvbmFsDQo+IHBhcmFtZXRlciB3aGljaA0KPiA+IHNwZWNp ZmllcyBob3cgbWFueSBpdGVyYXRpb25zIG9mIGZlZWRpbmcgcmFuZG9tIGlucHV0cw0KPiB0byB0 aGUgdHdvDQo+ID4gQVBJcy4gVGhlIG92ZXJhbGwgbnVtYmVyIG9mIHRlc3QgY2FzZXMgaW5jcmVh c2VzIHdoZW4NCj4gdGhlIGl0ZXJhdGlvbg0KPiA+IGluY3JlYXNlcy4gRGVmYXVsdCBpdGVyYXRp b24gaXMgMTAgd2hlbiBubyBwYXJhbWV0ZXINCj4gaXMgc3BlY2lmaWVkLg0KPiA+DQo+ID4gU2ln bmVkLW9mZi1ieTogUmF5IE5pIDxyYXkubmlAaW50ZWwuY29tPg0KPiA+IFNpZ25lZC1vZmYtYnk6 IE1pY2hhZWwgRCBLaW5uZXkNCj4gPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPg0KPiA+IFNp Z25lZC1vZmYtYnk6IE1pbmcgU2hhbyA8bWluZy5zaGFvQGludGVsLmNvbT4NCj4gPiBDYzogTWlj aGFlbCBEIEtpbm5leSA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+DQo+ID4gQ2M6IEVyaWMg RG9uZyA8ZXJpYy5kb25nQGludGVsLmNvbT4NCj4gPiBDYzogTGFzemxvIEVyc2VrIDxsZXJzZWtA cmVkaGF0LmNvbT4NCj4gPiBDYzogTWluZyBTaGFvIDxtaW5nLnNoYW9AaW50ZWwuY29tPg0KPiA+ IENjOiBTZWFuIEJyb2dhbiA8c2Vhbi5icm9nYW5AbWljcm9zb2Z0LmNvbT4NCj4gPiBDYzogQnJl dCBCYXJrZWxldyA8QnJldC5CYXJrZWxld0BtaWNyb3NvZnQuY29tPg0KPiA+IENjOiBKaWV3ZW4g WWFvIDxqaWV3ZW4ueWFvQGludGVsLmNvbT4NCj4gPiAtLS0NCj4gPiAgIC4uLi9NdHJyTGliL1Vu aXRUZXN0L010cnJMaWJVbml0VGVzdC5jICAgICAgICB8IDExMzkNCj4gKysrKysrKysrKysrKysr KysNCj4gPiAgIC4uLi9NdHJyTGliL1VuaXRUZXN0L010cnJMaWJVbml0VGVzdC5oICAgICAgICB8 ICAxODINCj4gKysrDQo+ID4gICAuLi4vTXRyckxpYi9Vbml0VGVzdC9NdHJyTGliVW5pdFRlc3RI b3N0LmluZiAgfCAgIDM5DQo+ICsNCj4gPiAgIFVlZmlDcHVQa2cvTGlicmFyeS9NdHJyTGliL1Vu aXRUZXN0L1N1cHBvcnQuYyB8ICA5MjMNCj4gKysrKysrKysrKysrKw0KPiA+ICAgVWVmaUNwdVBr Zy9UZXN0L1VlZmlDcHVQa2dIb3N0VGVzdC5kc2MgICAgICAgIHwgICAzMQ0KPiArDQo+ID4gICBV ZWZpQ3B1UGtnL1VlZmlDcHVQa2cuY2kueWFtbCAgICAgICAgICAgICAgICAgfCAgIDEyDQo+ICst DQo+ID4gICA2IGZpbGVzIGNoYW5nZWQsIDIzMjUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigt KQ0KPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+IFVlZmlDcHVQa2cvTGlicmFyeS9NdHJyTGli L1VuaXRUZXN0L010cnJMaWJVbml0VGVzdC5jDQo+ID4gICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4g VWVmaUNwdVBrZy9MaWJyYXJ5L010cnJMaWIvVW5pdFRlc3QvTXRyckxpYlVuaXRUZXN0LmgNCj4g PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiBVZWZpQ3B1UGtnL0xpYnJhcnkvTXRyckxpYi9Vbml0 VGVzdC9NdHJyTGliVW5pdFRlc3RIb3N0Lg0KPiBpbmYNCj4gPiAgIGNyZWF0ZSBtb2RlIDEwMDY0 NA0KPiBVZWZpQ3B1UGtnL0xpYnJhcnkvTXRyckxpYi9Vbml0VGVzdC9TdXBwb3J0LmMNCj4gPiAg IGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiBVZWZpQ3B1UGtnL1Rlc3QvVWVmaUNwdVBrZ0hvc3RUZXN0 LmRzYw0KPiA+DQo+ID4gZGlmZiAtLWdpdA0KPiBhL1VlZmlDcHVQa2cvTGlicmFyeS9NdHJyTGli L1VuaXRUZXN0L010cnJMaWJVbml0VGVzdC5jDQo+IGIvVWVmaUNwdVBrZy9MaWJyYXJ5L010cnJM aWIvVW5pdFRlc3QvTXRyckxpYlVuaXRUZXN0LmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K PiA+IGluZGV4IDAwMDAwMDAwMDAuLjEyM2UxYzc0MWENCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4g KysrDQo+IGIvVWVmaUNwdVBrZy9MaWJyYXJ5L010cnJMaWIvVW5pdFRlc3QvTXRyckxpYlVuaXRU ZXN0LmMNCj4gPiBAQCAtMCwwICsxLDExMzkgQEANCj4gPiArLyoqIEBmaWxlDQo+ID4NCj4gPiAr ICBVbml0IHRlc3RzIG9mIHRoZSBNdHJyTGliIGluc3RhbmNlIG9mIHRoZSBNdHJyTGliDQo+IGNs YXNzDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBDb3B5cmlnaHQgKGMpIDIwMjAsIEludGVsIENv cnBvcmF0aW9uLiBBbGwgcmlnaHRzDQo+IHJlc2VydmVkLjxCUj4NCj4gPg0KPiA+ICsgIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4NCj4gPiArDQo+ID4N Cj4gPiArKiovDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArI2luY2x1ZGUgIk10cnJMaWJVbml0VGVz dC5oIg0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gK1NUQVRJQyBDT05TVCBNVFJSX0xJQl9TWVNURU1f UEFSQU1FVEVSDQo+IG1EZWZhdWx0U3lzdGVtUGFyYW1ldGVyID0gew0KPiA+DQo+ID4gKyAgNDIs IFRSVUUsIFRSVUUsIENhY2hlVW5jYWNoZWFibGUsIDEyDQo+ID4NCj4gPiArfTsNCj4gPg0KPiA+ ICsNCj4gPg0KPiA+ICtTVEFUSUMgTVRSUl9MSUJfU1lTVEVNX1BBUkFNRVRFUiBtU3lzdGVtUGFy YW1ldGVyc1tdDQo+ID0gew0KPiA+DQo+ID4gKyAgeyAzOCwgVFJVRSwgVFJVRSwgQ2FjaGVVbmNh Y2hlYWJsZSwgICAgMTIgfSwNCj4gPg0KPiA+ICsgIHsgMzgsIFRSVUUsIFRSVUUsIENhY2hlV3Jp dGVCYWNrLCAgICAgIDEyIH0sDQo+ID4NCj4gPiArICB7IDM4LCBUUlVFLCBUUlVFLCBDYWNoZVdy aXRlVGhyb3VnaCwgICAxMiB9LA0KPiA+DQo+ID4gKyAgeyAzOCwgVFJVRSwgVFJVRSwgQ2FjaGVX cml0ZVByb3RlY3RlZCwgMTIgfSwNCj4gPg0KPiA+ICsgIHsgMzgsIFRSVUUsIFRSVUUsIENhY2hl V3JpdGVDb21iaW5pbmcsIDEyIH0sDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICB7IDQyLCBUUlVF LCBUUlVFLCBDYWNoZVVuY2FjaGVhYmxlLCAgICAxMiB9LA0KPiA+DQo+ID4gKyAgeyA0MiwgVFJV RSwgVFJVRSwgQ2FjaGVXcml0ZUJhY2ssICAgICAgMTIgfSwNCj4gPg0KPiA+ICsgIHsgNDIsIFRS VUUsIFRSVUUsIENhY2hlV3JpdGVUaHJvdWdoLCAgIDEyIH0sDQo+ID4NCj4gPiArICB7IDQyLCBU UlVFLCBUUlVFLCBDYWNoZVdyaXRlUHJvdGVjdGVkLCAxMiB9LA0KPiA+DQo+ID4gKyAgeyA0Miwg VFJVRSwgVFJVRSwgQ2FjaGVXcml0ZUNvbWJpbmluZywgMTIgfSwNCj4gPg0KPiA+ICsNCj4gPg0K PiA+ICsgIHsgNDgsIFRSVUUsIFRSVUUsIENhY2hlVW5jYWNoZWFibGUsICAgIDEyIH0sDQo+ID4N Cj4gPiArICB7IDQ4LCBUUlVFLCBUUlVFLCBDYWNoZVdyaXRlQmFjaywgICAgICAxMiB9LA0KPiA+ DQo+ID4gKyAgeyA0OCwgVFJVRSwgVFJVRSwgQ2FjaGVXcml0ZVRocm91Z2gsICAgMTIgfSwNCj4g Pg0KPiA+ICsgIHsgNDgsIFRSVUUsIFRSVUUsIENhY2hlV3JpdGVQcm90ZWN0ZWQsIDEyIH0sDQo+ ID4NCj4gPiArICB7IDQ4LCBUUlVFLCBUUlVFLCBDYWNoZVdyaXRlQ29tYmluaW5nLCAxMiB9LA0K PiA+DQo+ID4gK307DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArVUlOVDMyICAgICAgICAgICAgICAg ICAgICBtRml4ZWRNdHJyc0luZGV4W10gPSB7DQo+ID4NCj4gPiArICBNU1JfSUEzMl9NVFJSX0ZJ WDY0S18wMDAwMCwNCj4gPg0KPiA+ICsgIE1TUl9JQTMyX01UUlJfRklYMTZLXzgwMDAwLA0KPiA+ DQo+ID4gKyAgTVNSX0lBMzJfTVRSUl9GSVgxNktfQTAwMDAsDQo+ID4NCj4gPiArICBNU1JfSUEz Ml9NVFJSX0ZJWDRLX0MwMDAwLA0KPiA+DQo+ID4gKyAgTVNSX0lBMzJfTVRSUl9GSVg0S19DODAw MCwNCj4gPg0KPiA+ICsgIE1TUl9JQTMyX01UUlJfRklYNEtfRDAwMDAsDQo+ID4NCj4gPiArICBN U1JfSUEzMl9NVFJSX0ZJWDRLX0Q4MDAwLA0KPiA+DQo+ID4gKyAgTVNSX0lBMzJfTVRSUl9GSVg0 S19FMDAwMCwNCj4gPg0KPiA+ICsgIE1TUl9JQTMyX01UUlJfRklYNEtfRTgwMDAsDQo+ID4NCj4g PiArICBNU1JfSUEzMl9NVFJSX0ZJWDRLX0YwMDAwLA0KPiA+DQo+ID4gKyAgTVNSX0lBMzJfTVRS Ul9GSVg0S19GODAwMA0KPiA+DQo+ID4gK307DQo+ID4NCj4gPiArU1RBVElDX0FTU0VSVCAoDQo+ ID4NCj4gPiArICAoQVJSQVlfU0laRSAobUZpeGVkTXRycnNJbmRleCkgPT0NCj4gTVRSUl9OVU1C RVJfT0ZfRklYRURfTVRSUiksDQo+ID4NCj4gPiArICAiZ0ZpeGVkTXRyckluZGV4IGRvZXMgTk9U IGNvbnRhaW4gYWxsIHRoZSBmaXhlZA0KPiBNVFJScyEiDQo+ID4NCj4gPiArICApOw0KPiA+DQo+ ID4gKw0KPiA+DQo+ID4gKy8vDQo+ID4NCj4gPiArLy8gQ29udGV4dCBzdHJ1Y3R1cmUgdG8gYmUg dXNlZCBmb3IgbW9zdCBvZiB0aGUgdGVzdA0KPiBjYXNlcy4NCj4gPg0KPiA+ICsvLw0KPiA+DQo+ ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPg0KPiA+ICsgIENPTlNUIE1UUlJfTElCX1NZU1RFTV9Q QVJBTUVURVIgKlN5c3RlbVBhcmFtZXRlcjsNCj4gPg0KPiA+ICt9IE1UUlJfTElCX1RFU1RfQ09O VEVYVDsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsvLw0KPiA+DQo+ID4gKy8vIENvbnRleHQgc3Ry dWN0dXJlIHRvIGJlIHVzZWQgZm9yDQo+IEdldEZpcm13YXJlVmFyaWFibGVNdHJyQ291bnQoKSB0 ZXN0Lg0KPiA+DQo+ID4gKy8vDQo+ID4NCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+DQo+ID4g KyAgVUlOVDMyDQo+IE51bWJlck9mUmVzZXJ2ZWRWYXJpYWJsZU10cnJzOw0KPiA+DQo+ID4gKyAg Q09OU1QgTVRSUl9MSUJfU1lTVEVNX1BBUkFNRVRFUiAqU3lzdGVtUGFyYW1ldGVyOw0KPiA+DQo+ ID4gK30gTVRSUl9MSUJfR0VUX0ZJUk1XQVJFX1ZBUklBQkxFX01UUlJfQ09VTlRfQ09OVEVYVDsN Cj4gPg0KPiA+ICsNCj4gPg0KPiA+ICtTVEFUSUMgQ0hBUjggKm1DYWNoZURlc2NyaXB0aW9uW10g PSB7ICJVQyIsICJXQyIsDQo+ICJOL0EiLCAiTi9BIiwgIldUIiwgIldQIiwgIldCIiB9Ow0KPiA+ DQo+ID4gKw0KPiA+DQo+ID4gKy8qKg0KPiA+DQo+ID4gKyAgQ29tcGFyZSB0aGUgYWN0dWFsIG1l bW9yeSByYW5nZXMgYWdhaW5zdCBleHBlY3RlZA0KPiBtZW1vcnkgcmFuZ2VzIGFuZCByZXR1cm4g UEFTUyB3aGVuIHRoZXkgbWF0Y2guDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBAcGFyYW0gRXhw ZWN0ZWRNZW1vcnlSYW5nZXMgICAgIEV4cGVjdGVkIG1lbW9yeQ0KPiByYW5nZXMuDQo+ID4NCj4g PiArICBAcGFyYW0gRXhwZWN0ZWRNZW1vcnlSYW5nZUNvdW50IENvdW50IG9mIGV4cGVjdGVkDQo+ IG1lbW9yeSByYW5nZXMuDQo+ID4NCj4gPiArICBAcGFyYW0gQWN0dWFsUmFuZ2VzICAgICAgICAg ICAgIEFjdHVhbCBtZW1vcnkNCj4gcmFuZ2VzLg0KPiA+DQo+ID4gKyAgQHBhcmFtIEFjdHVhbFJh bmdlQ291bnQgICAgICAgICBDb3VudCBvZiBhY3R1YWwNCj4gbWVtb3J5IHJhbmdlcy4NCj4gPg0K PiA+ICsNCj4gPg0KPiA+ICsgIEByZXR2YWwgVU5JVF9URVNUX1BBU1NFRCAgVGVzdCBwYXNzZWQu DQo+ID4NCj4gPiArICBAcmV0dmFsIG90aGVycyAgICAgICAgICAgIFRlc3QgZmFpbGVkLg0KPiA+ DQo+ID4gKyoqLw0KPiA+DQo+ID4gK1VOSVRfVEVTVF9TVEFUVVMNCj4gPg0KPiA+ICtWZXJpZnlN ZW1vcnlSYW5nZXMgKA0KPiA+DQo+ID4gKyAgSU4gTVRSUl9NRU1PUllfUkFOR0UgICpFeHBlY3Rl ZE1lbW9yeVJhbmdlcywNCj4gPg0KPiA+ICsgIElOIFVJTlROICAgICAgICAgICAgICBFeHBlY3Rl ZE1lbW9yeVJhbmdlQ291bnQsDQo+ID4NCj4gPiArICBJTiBNVFJSX01FTU9SWV9SQU5HRSAgKkFj dHVhbFJhbmdlcywNCj4gPg0KPiA+ICsgIElOIFVJTlROICAgICAgICAgICAgICBBY3R1YWxSYW5n ZUNvdW50DQo+ID4NCj4gPiArICApDQo+ID4NCj4gPiArew0KPiA+DQo+ID4gKyAgVUlOVE4gIElu ZGV4Ow0KPiA+DQo+ID4gKyAgVVRfQVNTRVJUX0VRVUFMIChFeHBlY3RlZE1lbW9yeVJhbmdlQ291 bnQsDQo+IEFjdHVhbFJhbmdlQ291bnQpOw0KPiA+DQo+ID4gKyAgZm9yIChJbmRleCA9IDA7IElu ZGV4IDwgRXhwZWN0ZWRNZW1vcnlSYW5nZUNvdW50Ow0KPiBJbmRleCsrKSB7DQo+ID4NCj4gPiAr ICAgIFVUX0FTU0VSVF9FUVVBTA0KPiAoRXhwZWN0ZWRNZW1vcnlSYW5nZXNbSW5kZXhdLkJhc2VB ZGRyZXNzLA0KPiBBY3R1YWxSYW5nZXNbSW5kZXhdLkJhc2VBZGRyZXNzKTsNCj4gPg0KPiA+ICsg ICAgVVRfQVNTRVJUX0VRVUFMDQo+IChFeHBlY3RlZE1lbW9yeVJhbmdlc1tJbmRleF0uTGVuZ3Ro LA0KPiBBY3R1YWxSYW5nZXNbSW5kZXhdLkxlbmd0aCk7DQo+ID4NCj4gPiArICAgIFVUX0FTU0VS VF9FUVVBTA0KPiAoRXhwZWN0ZWRNZW1vcnlSYW5nZXNbSW5kZXhdLlR5cGUsDQo+IEFjdHVhbFJh bmdlc1tJbmRleF0uVHlwZSk7DQo+ID4NCj4gPiArICB9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiAr ICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gPg0KPiA+ICt9DQo+ID4NCj4gPiArDQo+ID4N Cj4gPiArLyoqDQo+ID4NCj4gPiArICBEdW1wIHRoZSBtZW1vcnkgcmFuZ2VzLg0KPiA+DQo+ID4g Kw0KPiA+DQo+ID4gKyAgQHBhcmFtIFJhbmdlcyAgICAgICBNZW1vcnkgcmFuZ2VzIHRvIGR1bXAu DQo+ID4NCj4gPiArICBAcGFyYW0gUmFuZ2VDb3VudCAgIENvdW50IG9mIG1lbW9yeSByYW5nZXMu DQo+ID4NCj4gPiArKiovDQo+ID4NCj4gPiArVk9JRA0KPiA+DQo+ID4gK0R1bXBNZW1vcnlSYW5n ZXMgKA0KPiA+DQo+ID4gKyAgTVRSUl9NRU1PUllfUkFOR0UgICAgKlJhbmdlcywNCj4gPg0KPiA+ ICsgIFVJTlROICAgICAgICAgICAgICAgIFJhbmdlQ291bnQNCj4gPg0KPiA+ICsgICkNCj4gPg0K PiA+ICt7DQo+ID4NCj4gPiArICBVSU5UTiAgICAgSW5kZXg7DQo+ID4NCj4gPiArICBmb3IgKElu ZGV4ID0gMDsgSW5kZXggPCBSYW5nZUNvdW50OyBJbmRleCsrKSB7DQo+ID4NCj4gPiArICAgIFVU X0xPR19JTkZPICgiXHR7IDB4JTAxNmxseCwgMHglMDE2bGx4LCAlYSB9LFxuIiwNCj4gUmFuZ2Vz W0luZGV4XS5CYXNlQWRkcmVzcywgUmFuZ2VzW0luZGV4XS5MZW5ndGgsDQo+IG1DYWNoZURlc2Ny aXB0aW9uW1Jhbmdlc1tJbmRleF0uVHlwZV0pOw0KPiA+DQo+ID4gKyAgfQ0KPiA+DQo+ID4gK30N Cj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsvKioNCj4gPg0KPiA+ICsqKi8NCj4gPg0KPiA+ICsNCj4g Pg0KPiA+ICsvKioNCj4gPg0KPiA+ICsgIEdlbmVyYXRlIHJhbmRvbSBjb3VudCBvZiBNVFJScyBm b3IgZWFjaCBjYWNoZSB0eXBlLg0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHBhcmFtIFRvdGFs Q291bnQgVG90YWwgTVRSUiBjb3VudC4NCj4gPg0KPiA+ICsgIEBwYXJhbSBVY0NvdW50ICAgIFJl dHVybiBjb3VudCBvZiBVbmNhY2hlYWJsZSB0eXBlLg0KPiA+DQo+ID4gKyAgQHBhcmFtIFd0Q291 bnQgICAgUmV0dXJuIGNvdW50IG9mIFdyaXRlIFRocm91Z2gNCj4gdHlwZS4NCj4gPg0KPiA+ICsg IEBwYXJhbSBXYkNvdW50ICAgIFJldHVybiBjb3VudCBvZiBXcml0ZSBCYWNrIHR5cGUuDQo+ID4N Cj4gPiArICBAcGFyYW0gV3BDb3VudCAgICBSZXR1cm4gY291bnQgb2YgV3JpdGUgUHJvdGVjdGVk DQo+IHR5cGUuDQo+ID4NCj4gPiArICBAcGFyYW0gV2NDb3VudCAgICBSZXR1cm4gY291bnQgb2Yg V3JpdGUgQ29tYmluaW5nDQo+IHR5cGUuDQo+ID4NCj4gPiArKiovDQo+ID4NCj4gPiArVk9JRA0K PiA+DQo+ID4gK0dlbmVyYXRlUmFuZG9tTWVtb3J5VHlwZUNvbWJpbmF0aW9uICgNCj4gPg0KPiA+ ICsgIElOICBVSU5UMzIgVG90YWxDb3VudCwNCj4gPg0KPiA+ICsgIE9VVCBVSU5UMzIgKlVjQ291 bnQsDQo+ID4NCj4gPiArICBPVVQgVUlOVDMyICpXdENvdW50LA0KPiA+DQo+ID4gKyAgT1VUIFVJ TlQzMiAqV2JDb3VudCwNCj4gPg0KPiA+ICsgIE9VVCBVSU5UMzIgKldwQ291bnQsDQo+ID4NCj4g PiArICBPVVQgVUlOVDMyICpXY0NvdW50DQo+ID4NCj4gPiArICApDQo+ID4NCj4gPiArew0KPiA+ DQo+ID4gKyAgVUlOVE4gIEluZGV4Ow0KPiA+DQo+ID4gKyAgVUlOVDMyIFRvdGFsTXRyckNvdW50 Ow0KPiA+DQo+ID4gKyAgVUlOVDMyICpDb3VudFBlclR5cGVbNV07DQo+ID4NCj4gPiArDQo+ID4N Cj4gPiArICBDb3VudFBlclR5cGVbMF0gPSBVY0NvdW50Ow0KPiA+DQo+ID4gKyAgQ291bnRQZXJU eXBlWzFdID0gV3RDb3VudDsNCj4gPg0KPiA+ICsgIENvdW50UGVyVHlwZVsyXSA9IFdiQ291bnQ7 DQo+ID4NCj4gPiArICBDb3VudFBlclR5cGVbM10gPSBXcENvdW50Ow0KPiA+DQo+ID4gKyAgQ291 bnRQZXJUeXBlWzRdID0gV2NDb3VudDsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIC8vDQo+ID4N Cj4gPiArICAvLyBJbml0aWFsaXplIHRoZSBjb3VudCBvZiBlYWNoIGNhY2hlIHR5cGUgdG8gMC4N Cj4gPg0KPiA+ICsgIC8vDQo+ID4NCj4gPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBBUlJB WV9TSVpFIChDb3VudFBlclR5cGUpOw0KPiBJbmRleCsrKSB7DQo+ID4NCj4gPiArICAgICooQ291 bnRQZXJUeXBlW0luZGV4XSkgPSAwOw0KPiA+DQo+ID4gKyAgfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ ID4gKyAgLy8NCj4gPg0KPiA+ICsgIC8vIFBpY2sgYSByYW5kb20gY291bnQgb2YgTVRSUnMNCj4g Pg0KPiA+ICsgIC8vDQo+ID4NCj4gPiArICBUb3RhbE10cnJDb3VudCA9IFJhbmRvbTMyICgxLCBU b3RhbENvdW50KTsNCj4gPg0KPiA+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFRvdGFsTXRy ckNvdW50OyBJbmRleCsrKSB7DQo+ID4NCj4gPiArICAgIC8vDQo+ID4NCj4gPiArICAgIC8vIEZv ciBlYWNoIG9mIHRoZW0sIHBpY2sgYSByYW5kb20gY2FjaGUgdHlwZS4NCj4gPg0KPiA+ICsgICAg Ly8NCj4gPg0KPiA+ICsgICAgKCooQ291bnRQZXJUeXBlW1JhbmRvbTMyICgwLCBBUlJBWV9TSVpF DQo+IChDb3VudFBlclR5cGUpIC0gMSldKSkrKzsNCj4gPg0KPiA+ICsgIH0NCj4gPg0KPiA+ICt9 DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArLyoqDQo+ID4NCj4gPiArICBVbml0IHRlc3Qgb2YgTXRy ckxpYiBzZXJ2aWNlDQo+IE10cnJTZXRNZW1vcnlBdHRyaWJ1dGUoKQ0KPiA+DQo+ID4gKw0KPiA+ DQo+ID4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAgICBJZ25vcmVkDQo+ID4NCj4gPiArDQo+ID4N Cj4gPiArICBAcmV0dmFsICBVTklUX1RFU1RfUEFTU0VEICAgICAgICAgICAgIFRoZSBVbml0IHRl c3QNCj4gaGFzIGNvbXBsZXRlZCBhbmQgdGhlIHRlc3QNCj4gPg0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSB3YXMNCj4gc3VjY2Vzc2Z1bC4NCj4gPg0K PiA+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRCAgQSB0ZXN0IGNhc2UN Cj4gYXNzZXJ0aW9uIGhhcyBmYWlsZWQuDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArKiovDQo+ID4N Cj4gPiArVU5JVF9URVNUX1NUQVRVUw0KPiA+DQo+ID4gK0VGSUFQSQ0KPiA+DQo+ID4gK1VuaXRU ZXN0TXRyclNldE1lbW9yeUF0dHJpYnV0ZXNJbk10cnJTZXR0aW5ncyAoDQo+ID4NCj4gPiArICBJ TiBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4dA0KPiA+DQo+ID4gKyAgKQ0KPiA+DQo+ID4gK3sN Cj4gPg0KPiA+ICsgIENPTlNUIE1UUlJfTElCX1NZU1RFTV9QQVJBTUVURVIgKlN5c3RlbVBhcmFt ZXRlcjsNCj4gPg0KPiA+ICsgIFJFVFVSTl9TVEFUVVMgICAgICAgICAgICAgICAgICAgU3RhdHVz Ow0KPiA+DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICBVY0NvdW50Ow0K PiA+DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICBXdENvdW50Ow0KPiA+ DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICBXYkNvdW50Ow0KPiA+DQo+ ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICBXcENvdW50Ow0KPiA+DQo+ID4g KyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICBXY0NvdW50Ow0KPiA+DQo+ID4gKw0K PiA+DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICBNdHJySW5kZXg7DQo+ ID4NCj4gPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICpTY3JhdGNoOw0KPiA+ DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICBTY3JhdGNoU2l6ZTsNCj4g Pg0KPiA+ICsgIE1UUlJfU0VUVElOR1MgICAgICAgICAgICAgICAgICAgTG9jYWxNdHJyczsNCj4g Pg0KPiA+ICsNCj4gPg0KPiA+ICsgIE1UUlJfTUVNT1JZX1JBTkdFDQo+IFJhd010cnJSYW5nZVtN VFJSX05VTUJFUl9PRl9WQVJJQUJMRV9NVFJSXTsNCj4gPg0KPiA+ICsgIE1UUlJfTUVNT1JZX1JB TkdFDQo+IEV4cGVjdGVkTWVtb3J5UmFuZ2VzW01UUlJfTlVNQkVSX09GX0ZJWEVEX01UUlIgKiBz aXplb2YNCj4gKFVJTlQ2NCkgKyAyICogTVRSUl9OVU1CRVJfT0ZfVkFSSUFCTEVfTVRSUiArIDFd Ow0KPiA+DQo+ID4gKyAgVUlOVDMyDQo+IEV4cGVjdGVkVmFyaWFibGVNdHJyVXNhZ2U7DQo+ID4N Cj4gPiArICBVSU5UTg0KPiBFeHBlY3RlZE1lbW9yeVJhbmdlc0NvdW50Ow0KPiA+DQo+ID4gKw0K PiA+DQo+ID4gKyAgTVRSUl9NRU1PUllfUkFOR0UNCj4gQWN0dWFsTWVtb3J5UmFuZ2VzW01UUlJf TlVNQkVSX09GX0ZJWEVEX01UUlIgICAqIHNpemVvZg0KPiAoVUlOVDY0KSArIDIgKiBNVFJSX05V TUJFUl9PRl9WQVJJQUJMRV9NVFJSICsgMV07DQo+ID4NCj4gPiArICBVSU5UMzINCj4gQWN0dWFs VmFyaWFibGVNdHJyVXNhZ2U7DQo+ID4NCj4gPiArICBVSU5UTg0KPiBBY3R1YWxNZW1vcnlSYW5n ZXNDb3VudDsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIE1UUlJfU0VUVElOR1MgICAgICAgICAg ICAgKk10cnJzWzJdOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgU3lzdGVtUGFyYW1ldGVyID0g KE1UUlJfTElCX1NZU1RFTV9QQVJBTUVURVIgKikNCj4gQ29udGV4dDsNCj4gPg0KPiA+ICsgIEdl bmVyYXRlUmFuZG9tTWVtb3J5VHlwZUNvbWJpbmF0aW9uICgNCj4gPg0KPiA+ICsgICAgU3lzdGVt UGFyYW1ldGVyLT5WYXJpYWJsZU10cnJDb3VudCAtDQo+IFBhdGNoUGNkR2V0MzIgKFBjZENwdU51 bWJlck9mUmVzZXJ2ZWRWYXJpYWJsZU10cnJzKSwNCj4gPg0KPiA+ICsgICAgJlVjQ291bnQsICZX dENvdW50LCAmV2JDb3VudCwgJldwQ291bnQsICZXY0NvdW50DQo+ID4NCj4gPiArICAgICk7DQo+ ID4NCj4gPiArICBHZW5lcmF0ZVZhbGlkQW5kQ29uZmlndXJhYmxlTXRyclBhaXJzICgNCj4gPg0K PiA+ICsgICAgU3lzdGVtUGFyYW1ldGVyLT5QaHlzaWNhbEFkZHJlc3NCaXRzLA0KPiBSYXdNdHJy UmFuZ2UsDQo+ID4NCj4gPiArICAgIFVjQ291bnQsIFd0Q291bnQsIFdiQ291bnQsIFdwQ291bnQs IFdjQ291bnQNCj4gPg0KPiA+ICsgICAgKTsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEV4cGVj dGVkVmFyaWFibGVNdHJyVXNhZ2UgPSBVY0NvdW50ICsgV3RDb3VudCArDQo+IFdiQ291bnQgKyBX cENvdW50ICsgV2NDb3VudDsNCj4gPg0KPiA+ICsgIEV4cGVjdGVkTWVtb3J5UmFuZ2VzQ291bnQg PSBBUlJBWV9TSVpFDQo+IChFeHBlY3RlZE1lbW9yeVJhbmdlcyk7DQo+ID4NCj4gPiArICBHZXRF ZmZlY3RpdmVNZW1vcnlSYW5nZXMgKA0KPiA+DQo+ID4gKyAgICBTeXN0ZW1QYXJhbWV0ZXItPkRl ZmF1bHRDYWNoZVR5cGUsDQo+ID4NCj4gPiArICAgIFN5c3RlbVBhcmFtZXRlci0+UGh5c2ljYWxB ZGRyZXNzQml0cywNCj4gPg0KPiA+ICsgICAgUmF3TXRyclJhbmdlLCBFeHBlY3RlZFZhcmlhYmxl TXRyclVzYWdlLA0KPiA+DQo+ID4gKyAgICBFeHBlY3RlZE1lbW9yeVJhbmdlcywgJkV4cGVjdGVk TWVtb3J5UmFuZ2VzQ291bnQNCj4gPg0KPiA+ICsgICAgKTsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ ICsgIFVUX0xPR19JTkZPICgNCj4gPg0KPiA+ICsgICAgIlRvdGFsIE1UUlIgWyVkXTogVUM9JWQs IFdUPSVkLCBXQj0lZCwgV1A9JWQsDQo+IFdDPSVkXG4iLA0KPiA+DQo+ID4gKyAgICBFeHBlY3Rl ZFZhcmlhYmxlTXRyclVzYWdlLCBVY0NvdW50LCBXdENvdW50LA0KPiBXYkNvdW50LCBXcENvdW50 LCBXY0NvdW50DQo+ID4NCj4gPiArICAgICk7DQo+ID4NCj4gPiArICBVVF9MT0dfSU5GTyAoIi0t LSBFeHBlY3RlZCBNZW1vcnkgUmFuZ2VzIFslZF0gLS0tDQo+IFxuIiwgRXhwZWN0ZWRNZW1vcnlS YW5nZXNDb3VudCk7DQo+ID4NCj4gPiArICBEdW1wTWVtb3J5UmFuZ2VzIChFeHBlY3RlZE1lbW9y eVJhbmdlcywNCj4gRXhwZWN0ZWRNZW1vcnlSYW5nZXNDb3VudCk7DQo+ID4NCj4gPiArDQo+ID4N Cj4gPiArICAvLw0KPiA+DQo+ID4gKyAgLy8gRGVmYXVsdCBjYWNoZSB0eXBlIGlzIGFsd2F5cyBh biBJTlBVVA0KPiA+DQo+ID4gKyAgLy8NCj4gPg0KPiA+ICsgIFplcm9NZW0gKCZMb2NhbE10cnJz LCBzaXplb2YgKExvY2FsTXRycnMpKTsNCj4gPg0KPiA+ICsgIExvY2FsTXRycnMuTXRyckRlZlR5 cGUgPSBNdHJyR2V0RGVmYXVsdE1lbW9yeVR5cGUNCj4gKCk7DQo+ID4NCj4gPiArICBTY3JhdGNo U2l6ZSAgICAgICAgICAgID0gU0NSQVRDSF9CVUZGRVJfU0laRTsNCj4gPg0KPiA+ICsgIE10cnJz WzBdICAgICAgICAgICAgICAgPSAmTG9jYWxNdHJyczsNCj4gPg0KPiA+ICsgIE10cnJzWzFdICAg ICAgICAgICAgICAgPSBOVUxMOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgZm9yIChNdHJySW5k ZXggPSAwOyBNdHJySW5kZXggPCBBUlJBWV9TSVpFIChNdHJycyk7DQo+IE10cnJJbmRleCsrKSB7 DQo+ID4NCj4gPiArICAgIFNjcmF0Y2ggPSBjYWxsb2MgKFNjcmF0Y2hTaXplLCBzaXplb2YgKFVJ TlQ4KSk7DQo+ID4NCj4gPiArICAgIFN0YXR1cyA9IE10cnJTZXRNZW1vcnlBdHRyaWJ1dGVzSW5N dHJyU2V0dGluZ3MNCj4gKE10cnJzW010cnJJbmRleF0sIFNjcmF0Y2gsICZTY3JhdGNoU2l6ZSwN Cj4gRXhwZWN0ZWRNZW1vcnlSYW5nZXMsIEV4cGVjdGVkTWVtb3J5UmFuZ2VzQ291bnQpOw0KPiA+ DQo+ID4gKyAgICBpZiAoU3RhdHVzID09IFJFVFVSTl9CVUZGRVJfVE9PX1NNQUxMKSB7DQo+ID4N Cj4gPiArICAgICAgU2NyYXRjaCA9IHJlYWxsb2MgKFNjcmF0Y2gsIFNjcmF0Y2hTaXplKTsNCj4g Pg0KPiA+ICsgICAgICBTdGF0dXMgPSBNdHJyU2V0TWVtb3J5QXR0cmlidXRlc0luTXRyclNldHRp bmdzDQo+IChNdHJyc1tNdHJySW5kZXhdLCBTY3JhdGNoLCAmU2NyYXRjaFNpemUsDQo+IEV4cGVj dGVkTWVtb3J5UmFuZ2VzLCBFeHBlY3RlZE1lbW9yeVJhbmdlc0NvdW50KTsNCj4gPg0KPiA+ICsg ICAgfQ0KPiA+DQo+ID4gKyAgICBVVF9BU1NFUlRfU1RBVFVTX0VRVUFMIChTdGF0dXMsIFJFVFVS Tl9TVUNDRVNTKTsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgICAgaWYgKE10cnJzW010cnJJbmRl eF0gPT0gTlVMTCkgew0KPiA+DQo+ID4gKyAgICAgIFplcm9NZW0gKCZMb2NhbE10cnJzLCBzaXpl b2YgKExvY2FsTXRycnMpKTsNCj4gPg0KPiA+ICsgICAgICBNdHJyR2V0QWxsTXRycnMgKCZMb2Nh bE10cnJzKTsNCj4gPg0KPiA+ICsgICAgfQ0KPiA+DQo+ID4gKyAgICBBY3R1YWxNZW1vcnlSYW5n ZXNDb3VudCA9IEFSUkFZX1NJWkUNCj4gKEFjdHVhbE1lbW9yeVJhbmdlcyk7DQo+ID4NCj4gPiAr ICAgIENvbGxlY3RUZXN0UmVzdWx0ICgNCj4gPg0KPiA+ICsgICAgICBTeXN0ZW1QYXJhbWV0ZXIt PkRlZmF1bHRDYWNoZVR5cGUsDQo+IFN5c3RlbVBhcmFtZXRlci0+UGh5c2ljYWxBZGRyZXNzQml0 cywgU3lzdGVtUGFyYW1ldGVyLQ0KPiA+VmFyaWFibGVNdHJyQ291bnQsDQo+ID4NCj4gPiArICAg ICAgJkxvY2FsTXRycnMsIEFjdHVhbE1lbW9yeVJhbmdlcywNCj4gJkFjdHVhbE1lbW9yeVJhbmdl c0NvdW50LCAmQWN0dWFsVmFyaWFibGVNdHJyVXNhZ2UNCj4gPg0KPiA+ICsgICAgICApOw0KPiA+ DQo+ID4gKw0KPiA+DQo+ID4gKyAgICBVVF9MT0dfSU5GTyAoIi0tLSBBY3R1YWwgTWVtb3J5IFJh bmdlcyBbJWRdIC0tLQ0KPiBcbiIsIEFjdHVhbE1lbW9yeVJhbmdlc0NvdW50KTsNCj4gPg0KPiA+ ICsgICAgRHVtcE1lbW9yeVJhbmdlcyAoQWN0dWFsTWVtb3J5UmFuZ2VzLA0KPiBBY3R1YWxNZW1v cnlSYW5nZXNDb3VudCk7DQo+ID4NCj4gPiArICAgIFZlcmlmeU1lbW9yeVJhbmdlcyAoRXhwZWN0 ZWRNZW1vcnlSYW5nZXMsDQo+IEV4cGVjdGVkTWVtb3J5UmFuZ2VzQ291bnQsIEFjdHVhbE1lbW9y eVJhbmdlcywNCj4gQWN0dWFsTWVtb3J5UmFuZ2VzQ291bnQpOw0KPiA+DQo+ID4gKyAgICBVVF9B U1NFUlRfVFJVRSAoRXhwZWN0ZWRWYXJpYWJsZU10cnJVc2FnZSA+PQ0KPiBBY3R1YWxWYXJpYWJs ZU10cnJVc2FnZSk7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICAgIFplcm9NZW0gKCZMb2NhbE10 cnJzLCBzaXplb2YgKExvY2FsTXRycnMpKTsNCj4gPg0KPiA+ICsgIH0NCj4gPg0KPiA+ICsNCj4g Pg0KPiA+ICsgIGZyZWUgKFNjcmF0Y2gpOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgcmV0dXJu IFVOSVRfVEVTVF9QQVNTRUQ7DQo+ID4NCj4gPiArfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKy8q Kg0KPiA+DQo+ID4gKyAgVGVzdCByb3V0aW5lIHRvIGNoZWNrIHdoZXRoZXIgaW52YWxpZCBiYXNl L3NpemUgY2FuDQo+IGJlIHJlamVjdGVkLg0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHBhcmFt IENvbnRleHQgICBQb2ludGVyIHRvDQo+IE1UUlJfTElCX1NZU1RFTV9QQVJBTUVURVIuDQo+ID4N Cj4gPiArDQo+ID4NCj4gPiArICBAcmV0dXJuIFRlc3Qgc3RhdHVzLg0KPiA+DQo+ID4gKyoqLw0K PiA+DQo+ID4gK1VOSVRfVEVTVF9TVEFUVVMNCj4gPg0KPiA+ICtFRklBUEkNCj4gPg0KPiA+ICtV bml0VGVzdEludmFsaWRNZW1vcnlMYXlvdXRzICgNCj4gPg0KPiA+ICsgIElOIFVOSVRfVEVTVF9D T05URVhUICAgICAgICAgIENvbnRleHQNCj4gPg0KPiA+ICsgICkNCj4gPg0KPiA+ICt7DQo+ID4N Cj4gPiArICBDT05TVCBNVFJSX0xJQl9TWVNURU1fUEFSQU1FVEVSICpTeXN0ZW1QYXJhbWV0ZXI7 DQo+ID4NCj4gPiArICBNVFJSX01FTU9SWV9SQU5HRQ0KPiBSYW5nZXNbTVRSUl9OVU1CRVJfT0Zf VkFSSUFCTEVfTVRSUiAqIDIgKyAxXTsNCj4gPg0KPiA+ICsgIFVJTlROICAgICAgICAgICAgICAg ICAgICAgICAgICAgUmFuZ2VDb3VudDsNCj4gPg0KPiA+ICsgIFVJTlQ2NCAgICAgICAgICAgICAg ICAgICAgICAgICAgTWF4QWRkcmVzczsNCj4gPg0KPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAg ICAgICAgICAgICAgSW5kZXg7DQo+ID4NCj4gPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAg ICAgICAgIEJhc2VBZGRyZXNzOw0KPiA+DQo+ID4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAg ICAgICAgICBMZW5ndGg7DQo+ID4NCj4gPiArICBSRVRVUk5fU1RBVFVTICAgICAgICAgICAgICAg ICAgIFN0YXR1czsNCj4gPg0KPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAg U2NyYXRjaFNpemU7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBTeXN0ZW1QYXJhbWV0ZXIgPSAo TVRSUl9MSUJfU1lTVEVNX1BBUkFNRVRFUiAqKQ0KPiBDb250ZXh0Ow0KPiA+DQo+ID4gKw0KPiA+ DQo+ID4gKyAgUmFuZ2VDb3VudCA9IFJhbmRvbTMyICgxLCBBUlJBWV9TSVpFIChSYW5nZXMpKTsN Cj4gPg0KPiA+ICsgIE1heEFkZHJlc3MgPSAxdWxsIDw8IFN5c3RlbVBhcmFtZXRlci0NCj4gPlBo eXNpY2FsQWRkcmVzc0JpdHM7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBmb3IgKEluZGV4ID0g MDsgSW5kZXggPCBSYW5nZUNvdW50OyBJbmRleCsrKSB7DQo+ID4NCj4gPiArICAgIGRvIHsNCj4g Pg0KPiA+ICsgICAgICBCYXNlQWRkcmVzcyA9IFJhbmRvbTY0ICgwLCBNYXhBZGRyZXNzKTsNCj4g Pg0KPiA+ICsgICAgICBMZW5ndGggICAgICA9IFJhbmRvbTY0ICgxLCBNYXhBZGRyZXNzIC0NCj4g QmFzZUFkZHJlc3MpOw0KPiA+DQo+ID4gKyAgICB9IHdoaWxlICgoKEJhc2VBZGRyZXNzICYgMHhG RkYpID09IDApIHx8ICgoTGVuZ3RoDQo+ICYgMHhGRkYpID09IDApKTsNCj4gPg0KPiA+ICsNCj4g Pg0KPiA+ICsgICAgUmFuZ2VzW0luZGV4XS5CYXNlQWRkcmVzcyA9IEJhc2VBZGRyZXNzOw0KPiA+ DQo+ID4gKyAgICBSYW5nZXNbSW5kZXhdLkxlbmd0aCAgICAgID0gTGVuZ3RoOw0KPiA+DQo+ID4g KyAgICBSYW5nZXNbSW5kZXhdLlR5cGUgICAgICAgID0NCj4gR2VuZXJhdGVSYW5kb21DYWNoZVR5 cGUgKCk7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICAgIFN0YXR1cyA9IE10cnJTZXRNZW1vcnlB dHRyaWJ1dGUgKA0KPiA+DQo+ID4gKyAgICAgIFJhbmdlc1tJbmRleF0uQmFzZUFkZHJlc3MsDQo+ IFJhbmdlc1tJbmRleF0uTGVuZ3RoLCBSYW5nZXNbSW5kZXhdLlR5cGUNCj4gPg0KPiA+ICsgICAg ICApOw0KPiA+DQo+ID4gKyAgICBVVF9BU1NFUlRfVFJVRSAoUkVUVVJOX0VSUk9SIChTdGF0dXMp KTsNCj4gPg0KPiA+ICsgIH0NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIFNjcmF0Y2hTaXplID0g MDsNCj4gPg0KPiA+ICsgIFN0YXR1cyA9IE10cnJTZXRNZW1vcnlBdHRyaWJ1dGVzSW5NdHJyU2V0 dGluZ3MNCj4gKE5VTEwsIE5VTEwsICZTY3JhdGNoU2l6ZSwgUmFuZ2VzLCBSYW5nZUNvdW50KTsN Cj4gPg0KPiA+ICsgIFVUX0FTU0VSVF9UUlVFIChSRVRVUk5fRVJST1IgKFN0YXR1cykpOw0KPiA+ DQo+ID4gKw0KPiA+DQo+ID4gKyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNTRUQ7DQo+ID4NCj4gPiAr fQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKy8qKg0KPiA+DQo+ID4gKyAgVW5pdCB0ZXN0IG9mIE10 cnJMaWIgc2VydmljZSBJc010cnJTdXBwb3J0ZWQoKQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAg QHBhcmFtW2luXSAgQ29udGV4dCAgICBJZ25vcmVkDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBA cmV0dmFsICBVTklUX1RFU1RfUEFTU0VEICAgICAgICAgICAgIFRoZSBVbml0IHRlc3QNCj4gaGFz IGNvbXBsZXRlZCBhbmQgdGhlIHRlc3QNCj4gPg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2FzZSB3YXMNCj4gc3VjY2Vzc2Z1bC4NCj4gPg0KPiA+ICsgIEBy ZXR2YWwgIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRCAgQSB0ZXN0IGNhc2UNCj4gYXNzZXJ0 aW9uIGhhcyBmYWlsZWQuDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArKiovDQo+ID4NCj4gPiArVU5J VF9URVNUX1NUQVRVUw0KPiA+DQo+ID4gK0VGSUFQSQ0KPiA+DQo+ID4gK1VuaXRUZXN0SXNNdHJy U3VwcG9ydGVkICgNCj4gPg0KPiA+ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0DQo+ ID4NCj4gPiArICApDQo+ID4NCj4gPiArew0KPiA+DQo+ID4gKyAgTVRSUl9MSUJfU1lTVEVNX1BB UkFNRVRFUiAgU3lzdGVtUGFyYW1ldGVyOw0KPiA+DQo+ID4gKyAgTVRSUl9MSUJfVEVTVF9DT05U RVhUICAgICAgKkxvY2FsQ29udGV4dDsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIExvY2FsQ29u dGV4dCA9IChNVFJSX0xJQl9URVNUX0NPTlRFWFQgKikgQ29udGV4dDsNCj4gPg0KPiA+ICsNCj4g Pg0KPiA+ICsgIENvcHlNZW0gKCZTeXN0ZW1QYXJhbWV0ZXIsIExvY2FsQ29udGV4dC0NCj4gPlN5 c3RlbVBhcmFtZXRlciwgc2l6ZW9mIChTeXN0ZW1QYXJhbWV0ZXIpKTsNCj4gPg0KPiA+ICsgIC8v DQo+ID4NCj4gPiArICAvLyBNVFJSIGNhcGFiaWxpdHkgb2ZmIGluIENQVUlEIGxlYWYuDQo+ID4N Cj4gPiArICAvLw0KPiA+DQo+ID4gKyAgU3lzdGVtUGFyYW1ldGVyLk10cnJTdXBwb3J0ZWQgPSBG QUxTRTsNCj4gPg0KPiA+ICsgIEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7 DQo+ID4NCj4gPiArICBVVF9BU1NFUlRfRkFMU0UgKElzTXRyclN1cHBvcnRlZCAoKSk7DQo+ID4N Cj4gPiArDQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgLy8gTVRSUiBjYXBhYmlsaXR5IG9u IGluIENQVUlEIGxlYWYsIGJ1dCBubw0KPiB2YXJpYWJsZSBvciBmaXhlZCBNVFJScy4NCj4gPg0K PiA+ICsgIC8vDQo+ID4NCj4gPiArICBTeXN0ZW1QYXJhbWV0ZXIuTXRyclN1cHBvcnRlZCA9IFRS VUU7DQo+ID4NCj4gPiArICBTeXN0ZW1QYXJhbWV0ZXIuVmFyaWFibGVNdHJyQ291bnQgPSAwOw0K PiA+DQo+ID4gKyAgU3lzdGVtUGFyYW1ldGVyLkZpeGVkTXRyclN1cHBvcnRlZCA9IEZBTFNFOw0K PiA+DQo+ID4gKyAgSW5pdGlhbGl6ZU10cnJSZWdzICgmU3lzdGVtUGFyYW1ldGVyKTsNCj4gPg0K PiA+ICsgIFVUX0FTU0VSVF9GQUxTRSAoSXNNdHJyU3VwcG9ydGVkICgpKTsNCj4gPg0KPiA+ICsN Cj4gPg0KPiA+ICsgIC8vDQo+ID4NCj4gPiArICAvLyBNVFJSIGNhcGFiaWxpdHkgb24gaW4gQ1BV SUQgbGVhZiwgYnV0IG5vDQo+IHZhcmlhYmxlIE1UUlJzLg0KPiA+DQo+ID4gKyAgLy8NCj4gPg0K PiA+ICsgIFN5c3RlbVBhcmFtZXRlci5NdHJyU3VwcG9ydGVkID0gVFJVRTsNCj4gPg0KPiA+ICsg IFN5c3RlbVBhcmFtZXRlci5WYXJpYWJsZU10cnJDb3VudCA9IDA7DQo+ID4NCj4gPiArICBTeXN0 ZW1QYXJhbWV0ZXIuRml4ZWRNdHJyU3VwcG9ydGVkID0gVFJVRTsNCj4gPg0KPiA+ICsgIEluaXRp YWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+ID4NCj4gPiArICBVVF9BU1NFUlRf RkFMU0UgKElzTXRyclN1cHBvcnRlZCAoKSk7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICAvLw0K PiA+DQo+ID4gKyAgLy8gTVRSUiBjYXBhYmlsaXR5IG9uIGluIENQVUlEIGxlYWYsIGJ1dCBubyBm aXhlZA0KPiBNVFJScy4NCj4gPg0KPiA+ICsgIC8vDQo+ID4NCj4gPiArICBTeXN0ZW1QYXJhbWV0 ZXIuTXRyclN1cHBvcnRlZCA9IFRSVUU7DQo+ID4NCj4gPiArICBTeXN0ZW1QYXJhbWV0ZXIuVmFy aWFibGVNdHJyQ291bnQgPSA3Ow0KPiA+DQo+ID4gKyAgU3lzdGVtUGFyYW1ldGVyLkZpeGVkTXRy clN1cHBvcnRlZCA9IEZBTFNFOw0KPiA+DQo+ID4gKyAgSW5pdGlhbGl6ZU10cnJSZWdzICgmU3lz dGVtUGFyYW1ldGVyKTsNCj4gPg0KPiA+ICsgIFVUX0FTU0VSVF9GQUxTRSAoSXNNdHJyU3VwcG9y dGVkICgpKTsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIC8vDQo+ID4NCj4gPiArICAvLyBNVFJS IGNhcGFiaWxpdHkgb24gaW4gQ1BVSUQgbGVhZiB3aXRoIGJvdGgNCj4gdmFyaWFibGUgYW5kIGZp eGVkIE1UUlJzLg0KPiA+DQo+ID4gKyAgLy8NCj4gPg0KPiA+ICsgIFN5c3RlbVBhcmFtZXRlci5N dHJyU3VwcG9ydGVkID0gVFJVRTsNCj4gPg0KPiA+ICsgIFN5c3RlbVBhcmFtZXRlci5WYXJpYWJs ZU10cnJDb3VudCA9IDc7DQo+ID4NCj4gPiArICBTeXN0ZW1QYXJhbWV0ZXIuRml4ZWRNdHJyU3Vw cG9ydGVkID0gVFJVRTsNCj4gPg0KPiA+ICsgIEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBh cmFtZXRlcik7DQo+ID4NCj4gPiArICBVVF9BU1NFUlRfVFJVRSAoSXNNdHJyU3VwcG9ydGVkICgp KTsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiA+ DQo+ID4gK30NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsvKioNCj4gPg0KPiA+ICsgIFVuaXQgdGVz dCBvZiBNdHJyTGliIHNlcnZpY2UgR2V0VmFyaWFibGVNdHJyQ291bnQoKQ0KPiA+DQo+ID4gKw0K PiA+DQo+ID4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAgICBJZ25vcmVkDQo+ID4NCj4gPiArDQo+ ID4NCj4gPiArICBAcmV0dmFsICBVTklUX1RFU1RfUEFTU0VEICAgICAgICAgICAgIFRoZSBVbml0 IHRlc3QNCj4gaGFzIGNvbXBsZXRlZCBhbmQgdGhlIHRlc3QNCj4gPg0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSB3YXMNCj4gc3VjY2Vzc2Z1bC4NCj4g Pg0KPiA+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRCAgQSB0ZXN0IGNh c2UNCj4gYXNzZXJ0aW9uIGhhcyBmYWlsZWQuDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArKiovDQo+ ID4NCj4gPiArVU5JVF9URVNUX1NUQVRVUw0KPiA+DQo+ID4gK0VGSUFQSQ0KPiA+DQo+ID4gK1Vu aXRUZXN0R2V0VmFyaWFibGVNdHJyQ291bnQgKA0KPiA+DQo+ID4gKyAgSU4gVU5JVF9URVNUX0NP TlRFWFQgIENvbnRleHQNCj4gPg0KPiA+ICsgICkNCj4gPg0KPiA+ICt7DQo+ID4NCj4gPiArICBV SU5UMzIgICAgICAgICAgICAgICAgICAgIFJlc3VsdDsNCj4gPg0KPiA+ICsgIE1UUlJfTElCX1NZ U1RFTV9QQVJBTUVURVIgU3lzdGVtUGFyYW1ldGVyOw0KPiA+DQo+ID4gKyAgTVRSUl9MSUJfVEVT VF9DT05URVhUICAgICAqTG9jYWxDb250ZXh0Ow0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgTG9j YWxDb250ZXh0ID0gKE1UUlJfTElCX1RFU1RfQ09OVEVYVCAqKSBDb250ZXh0Ow0KPiA+DQo+ID4g Kw0KPiA+DQo+ID4gKyAgQ29weU1lbSAoJlN5c3RlbVBhcmFtZXRlciwgTG9jYWxDb250ZXh0LQ0K PiA+U3lzdGVtUGFyYW1ldGVyLCBzaXplb2YgKFN5c3RlbVBhcmFtZXRlcikpOw0KPiA+DQo+ID4g KyAgLy8NCj4gPg0KPiA+ICsgIC8vIElmIE1UUlIgY2FwYWJpbGl0eSBvZmYgaW4gQ1BVSUQgbGVh ZiwgdGhlbiB0aGUNCj4gY291bnQgaXMgYWx3YXlzIDAuDQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ ID4gKyAgU3lzdGVtUGFyYW1ldGVyLk10cnJTdXBwb3J0ZWQgPSBGQUxTRTsNCj4gPg0KPiA+ICsg IGZvciAoU3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxlTXRyckNvdW50ID0gMTsNCj4gU3lzdGVtUGFy YW1ldGVyLlZhcmlhYmxlTXRyckNvdW50IDw9DQo+IE1UUlJfTlVNQkVSX09GX1ZBUklBQkxFX01U UlI7DQo+IFN5c3RlbVBhcmFtZXRlci5WYXJpYWJsZU10cnJDb3VudCsrKSB7DQo+ID4NCj4gPiAr ICAgIEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+ID4NCj4gPiArICAg IFJlc3VsdCA9IEdldFZhcmlhYmxlTXRyckNvdW50ICgpOw0KPiA+DQo+ID4gKyAgICBVVF9BU1NF UlRfRVFVQUwgKFJlc3VsdCwgMCk7DQo+ID4NCj4gPiArICB9DQo+ID4NCj4gPiArDQo+ID4NCj4g PiArICAvLw0KPiA+DQo+ID4gKyAgLy8gVHJ5IGFsbCBzdXBwb3J0ZWQgdmFyaWFibGUgTVRSUiBj b3VudHMuDQo+ID4NCj4gPiArICAvLyBJZiB2YXJpYWJsZSBNVFJSIGNvdW50IGlzID4NCj4gTVRS Ul9OVU1CRVJfT0ZfVkFSSUFCTEVfTVRSUiwgdGhlbiBhbiBBU1NFUlQoKQ0KPiA+DQo+ID4gKyAg Ly8gaXMgZ2VuZXJhdGVkLg0KPiA+DQo+ID4gKyAgLy8NCj4gPg0KPiA+ICsgIFN5c3RlbVBhcmFt ZXRlci5NdHJyU3VwcG9ydGVkID0gVFJVRTsNCj4gPg0KPiA+ICsgIGZvciAoU3lzdGVtUGFyYW1l dGVyLlZhcmlhYmxlTXRyckNvdW50ID0gMTsNCj4gU3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxlTXRy ckNvdW50IDw9DQo+IE1UUlJfTlVNQkVSX09GX1ZBUklBQkxFX01UUlI7DQo+IFN5c3RlbVBhcmFt ZXRlci5WYXJpYWJsZU10cnJDb3VudCsrKSB7DQo+ID4NCj4gPiArICAgIEluaXRpYWxpemVNdHJy UmVncyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+ID4NCj4gPiArICAgIFJlc3VsdCA9IEdldFZhcmlh YmxlTXRyckNvdW50ICgpOw0KPiA+DQo+ID4gKyAgICBVVF9BU1NFUlRfRVFVQUwgKFJlc3VsdCwN Cj4gU3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxlTXRyckNvdW50KTsNCj4gPg0KPiA+ICsgIH0NCj4g Pg0KPiA+ICsNCj4gPg0KPiA+ICsgIC8vDQo+ID4NCj4gPiArICAvLyBFeHBlY3QgQVNTRVJUKCkg aWYgdmFyaWFibGUgTVRSUiBjb3VudCBpcyA+DQo+IE1UUlJfTlVNQkVSX09GX1ZBUklBQkxFX01U UlINCj4gPg0KPiA+ICsgIC8vDQo+ID4NCj4gPiArICBTeXN0ZW1QYXJhbWV0ZXIuVmFyaWFibGVN dHJyQ291bnQgPQ0KPiBNVFJSX05VTUJFUl9PRl9WQVJJQUJMRV9NVFJSICsgMTsNCj4gPg0KPiA+ ICsgIEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+ID4NCj4gPiArICBV VF9FWFBFQ1RfQVNTRVJUX0ZBSUxVUkUgKEdldFZhcmlhYmxlTXRyckNvdW50ICgpLA0KPiBOVUxM KTsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIFN5c3RlbVBhcmFtZXRlci5NdHJyU3VwcG9ydGVk ID0gVFJVRTsNCj4gPg0KPiA+ICsgIFN5c3RlbVBhcmFtZXRlci5WYXJpYWJsZU10cnJDb3VudCA9 IE1BWF9VSU5UODsNCj4gPg0KPiA+ICsgIEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFt ZXRlcik7DQo+ID4NCj4gPiArICBVVF9FWFBFQ1RfQVNTRVJUX0ZBSUxVUkUgKEdldFZhcmlhYmxl TXRyckNvdW50ICgpLA0KPiBOVUxMKTsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIHJldHVybiBV TklUX1RFU1RfUEFTU0VEOw0KPiA+DQo+ID4gK30NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsvKioN Cj4gPg0KPiA+ICsgIFVuaXQgdGVzdCBvZiBNdHJyTGliIHNlcnZpY2UNCj4gR2V0RmlybXdhcmVW YXJpYWJsZU10cnJDb3VudCgpDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBAcGFyYW1baW5dICBD b250ZXh0ICAgIElnbm9yZWQNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEByZXR2YWwgIFVOSVRf VEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQgdGVzdA0KPiBoYXMgY29tcGxldGVkIGFu ZCB0aGUgdGVzdA0KPiA+DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjYXNlIHdhcw0KPiBzdWNjZXNzZnVsLg0KPiA+DQo+ID4gKyAgQHJldHZhbCAgVU5JVF9U RVNUX0VSUk9SX1RFU1RfRkFJTEVEICBBIHRlc3QgY2FzZQ0KPiBhc3NlcnRpb24gaGFzIGZhaWxl ZC4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsqKi8NCj4gPg0KPiA+ICtVTklUX1RFU1RfU1RBVFVT DQo+ID4NCj4gPiArRUZJQVBJDQo+ID4NCj4gPiArVW5pdFRlc3RHZXRGaXJtd2FyZVZhcmlhYmxl TXRyckNvdW50ICgNCj4gPg0KPiA+ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0DQo+ ID4NCj4gPiArICApDQo+ID4NCj4gPiArew0KPiA+DQo+ID4gKyAgVUlOVDMyDQo+IFJlc3VsdDsN Cj4gPg0KPiA+ICsgIFVJTlQzMg0KPiBSZXNlcnZlZE10cnJzOw0KPiA+DQo+ID4gKyAgTVRSUl9M SUJfU1lTVEVNX1BBUkFNRVRFUg0KPiBTeXN0ZW1QYXJhbWV0ZXI7DQo+ID4NCj4gPiArICBNVFJS X0xJQl9HRVRfRklSTVdBUkVfVkFSSUFCTEVfTVRSUl9DT1VOVF9DT05URVhUDQo+ICpMb2NhbENv bnRleHQ7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBMb2NhbENvbnRleHQgPQ0KPiAoTVRSUl9M SUJfR0VUX0ZJUk1XQVJFX1ZBUklBQkxFX01UUlJfQ09VTlRfQ09OVEVYVCAqKQ0KPiBDb250ZXh0 Ow0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQ29weU1lbSAoJlN5c3RlbVBhcmFtZXRlciwgTG9j YWxDb250ZXh0LQ0KPiA+U3lzdGVtUGFyYW1ldGVyLCBzaXplb2YgKFN5c3RlbVBhcmFtZXRlcikp Ow0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgSW5pdGlhbGl6ZU10cnJSZWdzICgmU3lzdGVtUGFy YW1ldGVyKTsNCj4gPg0KPiA+ICsgIC8vDQo+ID4NCj4gPiArICAvLyBQb3NpdGl2ZSB0ZXN0IGNh c2VzIGZvciBWQ05UID0gMTAgYW5kIFJlc2VydmVkDQo+IFBDRCBpbiByYW5nZSAwLi4xMA0KPiA+ DQo+ID4gKyAgLy8NCj4gPg0KPiA+ICsgIGZvciAoUmVzZXJ2ZWRNdHJycyA9IDA7IFJlc2VydmVk TXRycnMgPD0NCj4gU3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxlTXRyckNvdW50OyBSZXNlcnZlZE10 cnJzKyspIHsNCj4gPg0KPiA+ICsgICAgUGF0Y2hQY2RTZXQzMg0KPiAoUGNkQ3B1TnVtYmVyT2ZS ZXNlcnZlZFZhcmlhYmxlTXRycnMsIFJlc2VydmVkTXRycnMpOw0KPiA+DQo+ID4gKyAgICBSZXN1 bHQgPSBHZXRGaXJtd2FyZVZhcmlhYmxlTXRyckNvdW50ICgpOw0KPiA+DQo+ID4gKyAgICBVVF9B U1NFUlRfRVFVQUwgKFJlc3VsdCwNCj4gU3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxlTXRyckNvdW50 IC0gUmVzZXJ2ZWRNdHJycyk7DQo+ID4NCj4gPiArICB9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiAr ICAvLw0KPiA+DQo+ID4gKyAgLy8gTmVnYXRpdmUgdGVzdCBjYXNlcyB3aGVuIFJlc2VydmVkIFBD RCBpcyBsYXJnZXINCj4gdGhhbiBWQ05UDQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgZm9y IChSZXNlcnZlZE10cnJzID0NCj4gU3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxlTXRyckNvdW50ICsg MTsgUmVzZXJ2ZWRNdHJycyA8PQ0KPiAyNTU7IFJlc2VydmVkTXRycnMrKykgew0KPiA+DQo+ID4g KyAgICBQYXRjaFBjZFNldDMyDQo+IChQY2RDcHVOdW1iZXJPZlJlc2VydmVkVmFyaWFibGVNdHJy cywgUmVzZXJ2ZWRNdHJycyk7DQo+ID4NCj4gPiArICAgIFJlc3VsdCA9IEdldEZpcm13YXJlVmFy aWFibGVNdHJyQ291bnQgKCk7DQo+ID4NCj4gPiArICAgIFVUX0FTU0VSVF9FUVVBTCAoUmVzdWx0 LCAwKTsNCj4gPg0KPiA+ICsgIH0NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIC8vDQo+ID4NCj4g PiArICAvLyBOZWdhdGl2ZSB0ZXN0IGNhc2VzIHdoZW4gUmVzZXJ2ZWQgUENEIGlzIGxhcmdlcg0K PiB0aGFuIFZDTlQNCj4gPg0KPiA+ICsgIC8vDQo+ID4NCj4gPiArICBQYXRjaFBjZFNldDMyIChQ Y2RDcHVOdW1iZXJPZlJlc2VydmVkVmFyaWFibGVNdHJycywNCj4gTUFYX1VJTlQzMik7DQo+ID4N Cj4gPiArICBSZXN1bHQgPSBHZXRGaXJtd2FyZVZhcmlhYmxlTXRyckNvdW50ICgpOw0KPiA+DQo+ ID4gKyAgVVRfQVNTRVJUX0VRVUFMIChSZXN1bHQsIDApOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4g KyAgLy8NCj4gPg0KPiA+ICsgIC8vIE5lZ2F0aXZlIHRlc3QgY2FzZSB3aGVuIE1UUlJzIGFyZSBu b3Qgc3VwcG9ydGVkDQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgU3lzdGVtUGFyYW1ldGVy Lk10cnJTdXBwb3J0ZWQgPSBGQUxTRTsNCj4gPg0KPiA+ICsgIEluaXRpYWxpemVNdHJyUmVncyAo JlN5c3RlbVBhcmFtZXRlcik7DQo+ID4NCj4gPiArICBQYXRjaFBjZFNldDMyIChQY2RDcHVOdW1i ZXJPZlJlc2VydmVkVmFyaWFibGVNdHJycywNCj4gMik7DQo+ID4NCj4gPiArICBSZXN1bHQgPSBH ZXRGaXJtd2FyZVZhcmlhYmxlTXRyckNvdW50ICgpOw0KPiA+DQo+ID4gKyAgVVRfQVNTRVJUX0VR VUFMIChSZXN1bHQsIDApOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgLy8NCj4gPg0KPiA+ICsg IC8vIE5lZ2F0aXZlIHRlc3QgY2FzZSB3aGVuIEZpeGVkIE1UUlJzIGFyZSBub3QNCj4gc3VwcG9y dGVkDQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgU3lzdGVtUGFyYW1ldGVyLk10cnJTdXBw b3J0ZWQgPSBUUlVFOw0KPiA+DQo+ID4gKyAgU3lzdGVtUGFyYW1ldGVyLkZpeGVkTXRyclN1cHBv cnRlZCA9IEZBTFNFOw0KPiA+DQo+ID4gKyAgSW5pdGlhbGl6ZU10cnJSZWdzICgmU3lzdGVtUGFy YW1ldGVyKTsNCj4gPg0KPiA+ICsgIFBhdGNoUGNkU2V0MzIgKFBjZENwdU51bWJlck9mUmVzZXJ2 ZWRWYXJpYWJsZU10cnJzLA0KPiAyKTsNCj4gPg0KPiA+ICsgIFJlc3VsdCA9IEdldEZpcm13YXJl VmFyaWFibGVNdHJyQ291bnQgKCk7DQo+ID4NCj4gPiArICBVVF9BU1NFUlRfRVFVQUwgKFJlc3Vs dCwgMCk7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgLy8gRXhwZWN0 IEFTU0VSVCgpIGlmIHZhcmlhYmxlIE1UUlIgY291bnQgaXMgPg0KPiBNVFJSX05VTUJFUl9PRl9W QVJJQUJMRV9NVFJSDQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgU3lzdGVtUGFyYW1ldGVy LkZpeGVkTXRyclN1cHBvcnRlZCA9IFRSVUU7DQo+ID4NCj4gPiArICBTeXN0ZW1QYXJhbWV0ZXIu VmFyaWFibGVNdHJyQ291bnQgPQ0KPiBNVFJSX05VTUJFUl9PRl9WQVJJQUJMRV9NVFJSICsgMTsN Cj4gPg0KPiA+ICsgIEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+ID4N Cj4gPiArICBVVF9FWFBFQ1RfQVNTRVJUX0ZBSUxVUkUNCj4gKEdldEZpcm13YXJlVmFyaWFibGVN dHJyQ291bnQgKCksIE5VTEwpOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgcmV0dXJuIFVOSVRf VEVTVF9QQVNTRUQ7DQo+ID4NCj4gPiArfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKy8qKg0KPiA+ DQo+ID4gKyAgVW5pdCB0ZXN0IG9mIE10cnJMaWIgc2VydmljZQ0KPiBNdHJyR2V0TWVtb3J5QXR0 cmlidXRlKCkNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICAg SWdub3JlZA0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHJldHZhbCAgVU5JVF9URVNUX1BBU1NF RCAgICAgICAgICAgICBUaGUgVW5pdCB0ZXN0DQo+IGhhcyBjb21wbGV0ZWQgYW5kIHRoZSB0ZXN0 DQo+ID4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug d2FzDQo+IHN1Y2Nlc3NmdWwuDQo+ID4NCj4gPiArICBAcmV0dmFsICBVTklUX1RFU1RfRVJST1Jf VEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNlDQo+IGFzc2VydGlvbiBoYXMgZmFpbGVkLg0KPiA+DQo+ ID4gKw0KPiA+DQo+ID4gKyoqLw0KPiA+DQo+ID4gK1VOSVRfVEVTVF9TVEFUVVMNCj4gPg0KPiA+ ICtFRklBUEkNCj4gPg0KPiA+ICtVbml0VGVzdE10cnJHZXRNZW1vcnlBdHRyaWJ1dGUgKA0KPiA+ DQo+ID4gKyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENvbnRleHQNCj4gPg0KPiA+ICsgICkNCj4g Pg0KPiA+ICt7DQo+ID4NCj4gPiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gPg0KPiA+ ICt9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArLyoqDQo+ID4NCj4gPiArICBVbml0IHRlc3Qgb2Yg TXRyckxpYiBzZXJ2aWNlIE10cnJHZXRGaXhlZE10cnIoKQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4g KyAgQHBhcmFtW2luXSAgQ29udGV4dCAgICBJZ25vcmVkDQo+ID4NCj4gPiArDQo+ID4NCj4gPiAr ICBAcmV0dmFsICBVTklUX1RFU1RfUEFTU0VEICAgICAgICAgICAgIFRoZSBVbml0IHRlc3QNCj4g aGFzIGNvbXBsZXRlZCBhbmQgdGhlIHRlc3QNCj4gPg0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2FzZSB3YXMNCj4gc3VjY2Vzc2Z1bC4NCj4gPg0KPiA+ICsg IEByZXR2YWwgIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRCAgQSB0ZXN0IGNhc2UNCj4gYXNz ZXJ0aW9uIGhhcyBmYWlsZWQuDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArKiovDQo+ID4NCj4gPiAr VU5JVF9URVNUX1NUQVRVUw0KPiA+DQo+ID4gK0VGSUFQSQ0KPiA+DQo+ID4gK1VuaXRUZXN0TXRy ckdldEZpeGVkTXRyciAoDQo+ID4NCj4gPiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4 dA0KPiA+DQo+ID4gKyAgKQ0KPiA+DQo+ID4gK3sNCj4gPg0KPiA+ICsgIE1UUlJfRklYRURfU0VU VElOR1MgICAgICAgKlJlc3VsdDsNCj4gPg0KPiA+ICsgIE1UUlJfRklYRURfU0VUVElOR1MgICAg ICAgRXhwZWN0ZWRGaXhlZFNldHRpbmdzOw0KPiA+DQo+ID4gKyAgTVRSUl9GSVhFRF9TRVRUSU5H UyAgICAgICBGaXhlZFNldHRpbmdzOw0KPiA+DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAg ICAgICBJbmRleDsNCj4gPg0KPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgTXNySW5k ZXg7DQo+ID4NCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEJ5dGVJbmRleDsNCj4g Pg0KPiA+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgTXNyVmFsdWU7DQo+ID4NCj4gPiAr ICBNVFJSX0xJQl9TWVNURU1fUEFSQU1FVEVSIFN5c3RlbVBhcmFtZXRlcjsNCj4gPg0KPiA+ICsg IE1UUlJfTElCX1RFU1RfQ09OVEVYVCAgICAgKkxvY2FsQ29udGV4dDsNCj4gPg0KPiA+ICsNCj4g Pg0KPiA+ICsgIExvY2FsQ29udGV4dCA9IChNVFJSX0xJQl9URVNUX0NPTlRFWFQgKikgQ29udGV4 dDsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIENvcHlNZW0gKCZTeXN0ZW1QYXJhbWV0ZXIsIExv Y2FsQ29udGV4dC0NCj4gPlN5c3RlbVBhcmFtZXRlciwgc2l6ZW9mIChTeXN0ZW1QYXJhbWV0ZXIp KTsNCj4gPg0KPiA+ICsgIEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+ ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgLy8gU2V0IHJhbmRvbSBjYWNoZSB0eXBlIHRvIGRp ZmZlcmVudCByYW5nZXMgdW5kZXINCj4gMU1CIGFuZCBtYWtlIHN1cmUNCj4gPg0KPiA+ICsgIC8v IHRoZSBmaXhlZCBNVFJSIHNldHRpbmdzIGFyZSBleHBlY3RlZC4NCj4gPg0KPiA+ICsgIC8vIFRy eSAxMDAgdGltZXMuDQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgZm9yIChJbmRleCA9IDA7 IEluZGV4IDwgMTAwOyBJbmRleCsrKSB7DQo+ID4NCj4gPiArICAgIGZvciAoTXNySW5kZXggPSAw OyBNc3JJbmRleCA8IEFSUkFZX1NJWkUNCj4gKG1GaXhlZE10cnJzSW5kZXgpOyBNc3JJbmRleCsr KSB7DQo+ID4NCj4gPiArICAgICAgTXNyVmFsdWUgPSAwOw0KPiA+DQo+ID4gKyAgICAgIGZvciAo Qnl0ZUluZGV4ID0gMDsgQnl0ZUluZGV4IDwgc2l6ZW9mDQo+IChVSU5UNjQpOyBCeXRlSW5kZXgr Kykgew0KPiA+DQo+ID4gKyAgICAgICAgTXNyVmFsdWUgPSBNc3JWYWx1ZSB8IExTaGlmdFU2NA0K PiAoR2VuZXJhdGVSYW5kb21DYWNoZVR5cGUgKCksIEJ5dGVJbmRleCAqIDgpOw0KPiA+DQo+ID4g KyAgICAgIH0NCj4gPg0KPiA+ICsgICAgICBFeHBlY3RlZEZpeGVkU2V0dGluZ3MuTXRycltNc3JJ bmRleF0gPQ0KPiBNc3JWYWx1ZTsNCj4gPg0KPiA+ICsgICAgICBBc21Xcml0ZU1zcjY0IChtRml4 ZWRNdHJyc0luZGV4W01zckluZGV4XSwNCj4gTXNyVmFsdWUpOw0KPiA+DQo+ID4gKyAgICB9DQo+ ID4NCj4gPiArDQo+ID4NCj4gPiArICAgIFJlc3VsdCA9IE10cnJHZXRGaXhlZE10cnIgKCZGaXhl ZFNldHRpbmdzKTsNCj4gPg0KPiA+ICsgICAgVVRfQVNTRVJUX0VRVUFMIChSZXN1bHQsICZGaXhl ZFNldHRpbmdzKTsNCj4gPg0KPiA+ICsgICAgVVRfQVNTRVJUX01FTV9FUVVBTCAoJkZpeGVkU2V0 dGluZ3MsDQo+ICZFeHBlY3RlZEZpeGVkU2V0dGluZ3MsIHNpemVvZiAoRml4ZWRTZXR0aW5ncykp Ow0KPiA+DQo+ID4gKyAgfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgLy8NCj4gPg0KPiA+ICsg IC8vIE5lZ2F0aXZlIHRlc3QgY2FzZSB3aGVuIE1UUlJzIGFyZSBub3Qgc3VwcG9ydGVkDQo+ID4N Cj4gPiArICAvLw0KPiA+DQo+ID4gKyAgU3lzdGVtUGFyYW1ldGVyLk10cnJTdXBwb3J0ZWQgPSBG QUxTRTsNCj4gPg0KPiA+ICsgIEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7 DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBaZXJvTWVtICgmRml4ZWRTZXR0aW5ncywgc2l6ZW9m IChGaXhlZFNldHRpbmdzKSk7DQo+ID4NCj4gPiArICBaZXJvTWVtICgmRXhwZWN0ZWRGaXhlZFNl dHRpbmdzLCBzaXplb2YNCj4gKEV4cGVjdGVkRml4ZWRTZXR0aW5ncykpOw0KPiA+DQo+ID4gKyAg UmVzdWx0ID0gTXRyckdldEZpeGVkTXRyciAoJkZpeGVkU2V0dGluZ3MpOw0KPiA+DQo+ID4gKyAg VVRfQVNTRVJUX0VRVUFMIChSZXN1bHQsICZGaXhlZFNldHRpbmdzKTsNCj4gPg0KPiA+ICsgIFVU X0FTU0VSVF9NRU1fRVFVQUwgKCZFeHBlY3RlZEZpeGVkU2V0dGluZ3MsDQo+ICZGaXhlZFNldHRp bmdzLCBzaXplb2YgKEV4cGVjdGVkRml4ZWRTZXR0aW5ncykpOw0KPiA+DQo+ID4gKw0KPiA+DQo+ ID4gKyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNTRUQ7DQo+ID4NCj4gPiArfQ0KPiA+DQo+ID4gKw0K PiA+DQo+ID4gKy8qKg0KPiA+DQo+ID4gKyAgVW5pdCB0ZXN0IG9mIE10cnJMaWIgc2VydmljZSBN dHJyR2V0QWxsTXRycnMoKQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHBhcmFtW2luXSAgQ29u dGV4dCAgICBJZ25vcmVkDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBAcmV0dmFsICBVTklUX1RF U1RfUEFTU0VEICAgICAgICAgICAgIFRoZSBVbml0IHRlc3QNCj4gaGFzIGNvbXBsZXRlZCBhbmQg dGhlIHRlc3QNCj4gPg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2FzZSB3YXMNCj4gc3VjY2Vzc2Z1bC4NCj4gPg0KPiA+ICsgIEByZXR2YWwgIFVOSVRfVEVT VF9FUlJPUl9URVNUX0ZBSUxFRCAgQSB0ZXN0IGNhc2UNCj4gYXNzZXJ0aW9uIGhhcyBmYWlsZWQu DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArKiovDQo+ID4NCj4gPiArVU5JVF9URVNUX1NUQVRVUw0K PiA+DQo+ID4gK0VGSUFQSQ0KPiA+DQo+ID4gK1VuaXRUZXN0TXRyckdldEFsbE10cnJzICgNCj4g Pg0KPiA+ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICAgICAgQ29udGV4dA0KPiA+DQo+ID4gKyAg KQ0KPiA+DQo+ID4gK3sNCj4gPg0KPiA+ICsgIE1UUlJfU0VUVElOR1MgICAgICAgICAgICAgKlJl c3VsdDsNCj4gPg0KPiA+ICsgIE1UUlJfU0VUVElOR1MgICAgICAgICAgICAgTXRycnM7DQo+ID4N Cj4gPiArICBNVFJSX1NFVFRJTkdTICAgICAgICAgICAgIEV4cGVjdGVkTXRycnM7DQo+ID4NCj4g PiArICBNVFJSX1ZBUklBQkxFX1NFVFRJTkcNCj4gVmFyaWFibGVNdHJyW01UUlJfTlVNQkVSX09G X1ZBUklBQkxFX01UUlJdOw0KPiA+DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBJ bmRleDsNCj4gPg0KPiA+ICsgIE1UUlJfTElCX1NZU1RFTV9QQVJBTUVURVIgU3lzdGVtUGFyYW1l dGVyOw0KPiA+DQo+ID4gKyAgTVRSUl9MSUJfVEVTVF9DT05URVhUICAgICAqTG9jYWxDb250ZXh0 Ow0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgTG9jYWxDb250ZXh0ID0gKE1UUlJfTElCX1RFU1Rf Q09OVEVYVCAqKSBDb250ZXh0Ow0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQ29weU1lbSAoJlN5 c3RlbVBhcmFtZXRlciwgTG9jYWxDb250ZXh0LQ0KPiA+U3lzdGVtUGFyYW1ldGVyLCBzaXplb2Yg KFN5c3RlbVBhcmFtZXRlcikpOw0KPiA+DQo+ID4gKyAgSW5pdGlhbGl6ZU10cnJSZWdzICgmU3lz dGVtUGFyYW1ldGVyKTsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIGZvciAoSW5kZXggPSAwOyBJ bmRleCA8DQo+IFN5c3RlbVBhcmFtZXRlci5WYXJpYWJsZU10cnJDb3VudDsgSW5kZXgrKykgew0K PiA+DQo+ID4gKyAgICBHZW5lcmF0ZVJhbmRvbU10cnJQYWlyDQo+IChTeXN0ZW1QYXJhbWV0ZXIu UGh5c2ljYWxBZGRyZXNzQml0cywNCj4gR2VuZXJhdGVSYW5kb21DYWNoZVR5cGUgKCksICZWYXJp YWJsZU10cnJbSW5kZXhdLCBOVUxMKTsNCj4gPg0KPiA+ICsgICAgQXNtV3JpdGVNc3I2NCAoTVNS X0lBMzJfTVRSUl9QSFlTQkFTRTAgKyAoSW5kZXgNCj4gPDwgMSksIFZhcmlhYmxlTXRycltJbmRl eF0uQmFzZSk7DQo+ID4NCj4gPiArICAgIEFzbVdyaXRlTXNyNjQgKE1TUl9JQTMyX01UUlJfUEhZ U01BU0swICsgKEluZGV4DQo+IDw8IDEpLCBWYXJpYWJsZU10cnJbSW5kZXhdLk1hc2spOw0KPiA+ DQo+ID4gKyAgfQ0KPiA+DQo+ID4gKyAgUmVzdWx0ID0gTXRyckdldEFsbE10cnJzICgmTXRycnMp Ow0KPiA+DQo+ID4gKyAgVVRfQVNTRVJUX0VRVUFMIChSZXN1bHQsICZNdHJycyk7DQo+ID4NCj4g PiArICBVVF9BU1NFUlRfTUVNX0VRVUFMIChNdHJycy5WYXJpYWJsZXMuTXRyciwNCj4gVmFyaWFi bGVNdHJyLCBzaXplb2YgKE1UUlJfVkFSSUFCTEVfU0VUVElORykgKg0KPiBTeXN0ZW1QYXJhbWV0 ZXIuVmFyaWFibGVNdHJyQ291bnQpOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgLy8NCj4gPg0K PiA+ICsgIC8vIE5lZ2F0aXZlIHRlc3QgY2FzZSB3aGVuIE1UUlJzIGFyZSBub3Qgc3VwcG9ydGVk DQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgWmVyb01lbSAoJkV4cGVjdGVkTXRycnMsIHNp emVvZiAoRXhwZWN0ZWRNdHJycykpOw0KPiA+DQo+ID4gKyAgWmVyb01lbSAoJk10cnJzLCBzaXpl b2YgKE10cnJzKSk7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBTeXN0ZW1QYXJhbWV0ZXIuTXRy clN1cHBvcnRlZCA9IEZBTFNFOw0KPiA+DQo+ID4gKyAgSW5pdGlhbGl6ZU10cnJSZWdzICgmU3lz dGVtUGFyYW1ldGVyKTsNCj4gPg0KPiA+ICsgIFJlc3VsdCA9IE10cnJHZXRBbGxNdHJycyAoJk10 cnJzKTsNCj4gPg0KPiA+ICsgIFVUX0FTU0VSVF9FUVVBTCAoUmVzdWx0LCAmTXRycnMpOw0KPiA+ DQo+ID4gKyAgVVRfQVNTRVJUX01FTV9FUVVBTCAoJkV4cGVjdGVkTXRycnMsICZNdHJycywgc2l6 ZW9mDQo+IChFeHBlY3RlZE10cnJzKSk7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICAvLw0KPiA+ DQo+ID4gKyAgLy8gRXhwZWN0IEFTU0VSVCgpIGlmIHZhcmlhYmxlIE1UUlIgY291bnQgaXMgPg0K PiBNVFJSX05VTUJFUl9PRl9WQVJJQUJMRV9NVFJSDQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4g KyAgU3lzdGVtUGFyYW1ldGVyLk10cnJTdXBwb3J0ZWQgPSBUUlVFOw0KPiA+DQo+ID4gKyAgU3lz dGVtUGFyYW1ldGVyLlZhcmlhYmxlTXRyckNvdW50ID0NCj4gTVRSUl9OVU1CRVJfT0ZfVkFSSUFC TEVfTVRSUiArIDE7DQo+ID4NCj4gPiArICBJbml0aWFsaXplTXRyclJlZ3MgKCZTeXN0ZW1QYXJh bWV0ZXIpOw0KPiA+DQo+ID4gKyAgVVRfRVhQRUNUX0FTU0VSVF9GQUlMVVJFIChNdHJyR2V0QWxs TXRycnMgKCZNdHJycyksDQo+IE5VTEwpOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgcmV0dXJu IFVOSVRfVEVTVF9QQVNTRUQ7DQo+ID4NCj4gPiArfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKy8q Kg0KPiA+DQo+ID4gKyAgVW5pdCB0ZXN0IG9mIE10cnJMaWIgc2VydmljZSBNdHJyU2V0QWxsTXRy cnMoKQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAgICBJZ25v cmVkDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBAcmV0dmFsICBVTklUX1RFU1RfUEFTU0VEICAg ICAgICAgICAgIFRoZSBVbml0IHRlc3QNCj4gaGFzIGNvbXBsZXRlZCBhbmQgdGhlIHRlc3QNCj4g Pg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSB3YXMN Cj4gc3VjY2Vzc2Z1bC4NCj4gPg0KPiA+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9FUlJPUl9URVNU X0ZBSUxFRCAgQSB0ZXN0IGNhc2UNCj4gYXNzZXJ0aW9uIGhhcyBmYWlsZWQuDQo+ID4NCj4gPiAr DQo+ID4NCj4gPiArKiovDQo+ID4NCj4gPiArVU5JVF9URVNUX1NUQVRVUw0KPiA+DQo+ID4gK0VG SUFQSQ0KPiA+DQo+ID4gK1VuaXRUZXN0TXRyclNldEFsbE10cnJzICgNCj4gPg0KPiA+ICsgIElO IFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0DQo+ID4NCj4gPiArICApDQo+ID4NCj4gPiArew0K PiA+DQo+ID4gKyAgTVRSUl9TRVRUSU5HUyAgICAgICAgICAgICAgICAgICAqUmVzdWx0Ow0KPiA+ DQo+ID4gKyAgTVRSUl9TRVRUSU5HUyAgICAgICAgICAgICAgICAgICBNdHJyczsNCj4gPg0KPiA+ ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ID4NCj4gPiArICBN U1JfSUEzMl9NVFJSX0RFRl9UWVBFX1JFR0lTVEVSIERlZmF1bHQ7DQo+ID4NCj4gPiArICBNVFJS X0xJQl9TWVNURU1fUEFSQU1FVEVSICAgICAgIFN5c3RlbVBhcmFtZXRlcjsNCj4gPg0KPiA+ICsg IE1UUlJfTElCX1RFU1RfQ09OVEVYVCAgICAgICAgICAgKkxvY2FsQ29udGV4dDsNCj4gPg0KPiA+ ICsNCj4gPg0KPiA+ICsgIExvY2FsQ29udGV4dCA9IChNVFJSX0xJQl9URVNUX0NPTlRFWFQgKikg Q29udGV4dDsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIENvcHlNZW0gKCZTeXN0ZW1QYXJhbWV0 ZXIsIExvY2FsQ29udGV4dC0NCj4gPlN5c3RlbVBhcmFtZXRlciwgc2l6ZW9mIChTeXN0ZW1QYXJh bWV0ZXIpKTsNCj4gPg0KPiA+ICsgIEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRl cik7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBEZWZhdWx0LlVpbnQ2NCA9IDA7DQo+ID4NCj4g PiArICBEZWZhdWx0LkJpdHMuRSA9IDE7DQo+ID4NCj4gPiArICBEZWZhdWx0LkJpdHMuRkUgPSAx Ow0KPiA+DQo+ID4gKyAgRGVmYXVsdC5CaXRzLlR5cGUgPSBHZW5lcmF0ZVJhbmRvbUNhY2hlVHlw ZSAoKTsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIFplcm9NZW0gKCZNdHJycywgc2l6ZW9mIChN dHJycykpOw0KPiA+DQo+ID4gKyAgTXRycnMuTXRyckRlZlR5cGUgPSBEZWZhdWx0LlVpbnQ2NDsN Cj4gPg0KPiA+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8DQo+IFN5c3RlbVBhcmFtZXRlci5W YXJpYWJsZU10cnJDb3VudDsgSW5kZXgrKykgew0KPiA+DQo+ID4gKyAgICBHZW5lcmF0ZVJhbmRv bU10cnJQYWlyDQo+IChTeXN0ZW1QYXJhbWV0ZXIuUGh5c2ljYWxBZGRyZXNzQml0cywNCj4gR2Vu ZXJhdGVSYW5kb21DYWNoZVR5cGUgKCksDQo+ICZNdHJycy5WYXJpYWJsZXMuTXRycltJbmRleF0s IE5VTEwpOw0KPiA+DQo+ID4gKyAgfQ0KPiA+DQo+ID4gKyAgUmVzdWx0ID0gTXRyclNldEFsbE10 cnJzICgmTXRycnMpOw0KPiA+DQo+ID4gKyAgVVRfQVNTRVJUX0VRVUFMIChSZXN1bHQsICZNdHJy cyk7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBVVF9BU1NFUlRfRVFVQUwgKEFzbVJlYWRNc3I2 NA0KPiAoTVNSX0lBMzJfTVRSUl9ERUZfVFlQRSksIE10cnJzLk10cnJEZWZUeXBlKTsNCj4gPg0K PiA+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8DQo+IFN5c3RlbVBhcmFtZXRlci5WYXJpYWJs ZU10cnJDb3VudDsgSW5kZXgrKykgew0KPiA+DQo+ID4gKyAgICBVVF9BU1NFUlRfRVFVQUwgKEFz bVJlYWRNc3I2NA0KPiAoTVNSX0lBMzJfTVRSUl9QSFlTQkFTRTAgKyAoSW5kZXggPDwgMSkpLA0K PiBNdHJycy5WYXJpYWJsZXMuTXRycltJbmRleF0uQmFzZSk7DQo+ID4NCj4gPiArICAgIFVUX0FT U0VSVF9FUVVBTCAoQXNtUmVhZE1zcjY0DQo+IChNU1JfSUEzMl9NVFJSX1BIWVNNQVNLMCArIChJ bmRleCA8PCAxKSksDQo+IE10cnJzLlZhcmlhYmxlcy5NdHJyW0luZGV4XS5NYXNrKTsNCj4gPg0K PiA+ICsgIH0NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VE Ow0KPiA+DQo+ID4gK30NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsvKioNCj4gPg0KPiA+ICsgIFVu aXQgdGVzdCBvZiBNdHJyTGliIHNlcnZpY2UNCj4gTXRyckdldE1lbW9yeUF0dHJpYnV0ZUluVmFy aWFibGVNdHJyKCkNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQg ICAgSWdub3JlZA0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHJldHZhbCAgVU5JVF9URVNUX1BB U1NFRCAgICAgICAgICAgICBUaGUgVW5pdCB0ZXN0DQo+IGhhcyBjb21wbGV0ZWQgYW5kIHRoZSB0 ZXN0DQo+ID4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh c2Ugd2FzDQo+IHN1Y2Nlc3NmdWwuDQo+ID4NCj4gPiArICBAcmV0dmFsICBVTklUX1RFU1RfRVJS T1JfVEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNlDQo+IGFzc2VydGlvbiBoYXMgZmFpbGVkLg0KPiA+ DQo+ID4gKw0KPiA+DQo+ID4gKyoqLw0KPiA+DQo+ID4gK1VOSVRfVEVTVF9TVEFUVVMNCj4gPg0K PiA+ICtFRklBUEkNCj4gPg0KPiA+ICtVbml0VGVzdE10cnJHZXRNZW1vcnlBdHRyaWJ1dGVJblZh cmlhYmxlTXRyciAoDQo+ID4NCj4gPiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4dA0K PiA+DQo+ID4gKyAgKQ0KPiA+DQo+ID4gK3sNCj4gPg0KPiA+ICsgIE1UUlJfTElCX1RFU1RfQ09O VEVYVCAgICAgICAgICAgKkxvY2FsQ29udGV4dDsNCj4gPg0KPiA+ICsgIE1UUlJfTElCX1NZU1RF TV9QQVJBTUVURVIgICAgICAgU3lzdGVtUGFyYW1ldGVyOw0KPiA+DQo+ID4gKyAgVUlOVDMyICAg ICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQ7DQo+ID4NCj4gPiArICBNVFJSX1ZBUklBQkxF X1NFVFRJTkcNCj4gVmFyaWFibGVTZXR0aW5nW01UUlJfTlVNQkVSX09GX1ZBUklBQkxFX01UUlJd Ow0KPiA+DQo+ID4gKyAgVkFSSUFCTEVfTVRSUg0KPiBWYXJpYWJsZU10cnJbTVRSUl9OVU1CRVJf T0ZfVkFSSUFCTEVfTVRSUl07DQo+ID4NCj4gPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAg ICAgICAgIFZhbGlkTXRyckJpdHNNYXNrOw0KPiA+DQo+ID4gKyAgVUlOVDY0DQo+IFZhbGlkTXRy ckFkZHJlc3NNYXNrOw0KPiA+DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAg ICBJbmRleDsNCj4gPg0KPiA+ICsgIE1TUl9JQTMyX01UUlJfUEhZU0JBU0VfUkVHSVNURVIgQmFz ZTsNCj4gPg0KPiA+ICsgIE1TUl9JQTMyX01UUlJfUEhZU01BU0tfUkVHSVNURVIgTWFzazsNCj4g Pg0KPiA+ICsNCj4gPg0KPiA+ICsgIExvY2FsQ29udGV4dCA9IChNVFJSX0xJQl9URVNUX0NPTlRF WFQgKikgQ29udGV4dDsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIENvcHlNZW0gKCZTeXN0ZW1Q YXJhbWV0ZXIsIExvY2FsQ29udGV4dC0NCj4gPlN5c3RlbVBhcmFtZXRlciwgc2l6ZW9mIChTeXN0 ZW1QYXJhbWV0ZXIpKTsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEluaXRpYWxpemVNdHJyUmVn cyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBWYWxpZE10cnJC aXRzTWFzayAgICA9ICgxdWxsIDw8DQo+IFN5c3RlbVBhcmFtZXRlci5QaHlzaWNhbEFkZHJlc3NC aXRzKSAtIDE7DQo+ID4NCj4gPiArICBWYWxpZE10cnJBZGRyZXNzTWFzayA9IFZhbGlkTXRyckJp dHNNYXNrICYNCj4gMHhmZmZmZmZmZmZmZmZmMDAwVUxMOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4g KyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwNCj4gU3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxlTXRy ckNvdW50OyBJbmRleCsrKSB7DQo+ID4NCj4gPiArICAgIEdlbmVyYXRlUmFuZG9tTXRyclBhaXIN Cj4gKFN5c3RlbVBhcmFtZXRlci5QaHlzaWNhbEFkZHJlc3NCaXRzLA0KPiBHZW5lcmF0ZVJhbmRv bUNhY2hlVHlwZSAoKSwgJlZhcmlhYmxlU2V0dGluZ1tJbmRleF0sDQo+IE5VTEwpOw0KPiA+DQo+ ID4gKyAgICBBc21Xcml0ZU1zcjY0IChNU1JfSUEzMl9NVFJSX1BIWVNCQVNFMCArIChJbmRleA0K PiA8PCAxKSwgVmFyaWFibGVTZXR0aW5nW0luZGV4XS5CYXNlKTsNCj4gPg0KPiA+ICsgICAgQXNt V3JpdGVNc3I2NCAoTVNSX0lBMzJfTVRSUl9QSFlTTUFTSzAgKyAoSW5kZXgNCj4gPDwgMSksIFZh cmlhYmxlU2V0dGluZ1tJbmRleF0uTWFzayk7DQo+ID4NCj4gPiArICB9DQo+ID4NCj4gPiArICBS ZXN1bHQgPSBNdHJyR2V0TWVtb3J5QXR0cmlidXRlSW5WYXJpYWJsZU10cnINCj4gKFZhbGlkTXRy ckJpdHNNYXNrLCBWYWxpZE10cnJBZGRyZXNzTWFzaywgVmFyaWFibGVNdHJyKTsNCj4gPg0KPiA+ ICsgIFVUX0FTU0VSVF9FUVVBTCAoUmVzdWx0LA0KPiBTeXN0ZW1QYXJhbWV0ZXIuVmFyaWFibGVN dHJyQ291bnQpOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4 IDwNCj4gU3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxlTXRyckNvdW50OyBJbmRleCsrKSB7DQo+ID4N Cj4gPiArICAgIEJhc2UuVWludDY0ICAgID0gVmFyaWFibGVNdHJyW0luZGV4XS5CYXNlQWRkcmVz czsNCj4gPg0KPiA+ICsgICAgQmFzZS5CaXRzLlR5cGUgPSAoVUlOVDMyKQ0KPiBWYXJpYWJsZU10 cnJbSW5kZXhdLlR5cGU7DQo+ID4NCj4gPiArICAgIFVUX0FTU0VSVF9FUVVBTCAoQmFzZS5VaW50 NjQsDQo+IFZhcmlhYmxlU2V0dGluZ1tJbmRleF0uQmFzZSk7DQo+ID4NCj4gPiArDQo+ID4NCj4g PiArICAgIE1hc2suVWludDY0ICAgID0gfihWYXJpYWJsZU10cnJbSW5kZXhdLkxlbmd0aCAtDQo+ IDEpICYgVmFsaWRNdHJyQml0c01hc2s7DQo+ID4NCj4gPiArICAgIE1hc2suQml0cy5WICAgID0g MTsNCj4gPg0KPiA+ICsgICAgVVRfQVNTRVJUX0VRVUFMIChNYXNrLlVpbnQ2NCwNCj4gVmFyaWFi bGVTZXR0aW5nW0luZGV4XS5NYXNrKTsNCj4gPg0KPiA+ICsgIH0NCj4gPg0KPiA+ICsNCj4gPg0K PiA+ICsgIC8vDQo+ID4NCj4gPiArICAvLyBOZWdhdGl2ZSB0ZXN0IGNhc2Ugd2hlbiBNVFJScyBh cmUgbm90IHN1cHBvcnRlZA0KPiA+DQo+ID4gKyAgLy8NCj4gPg0KPiA+ICsgIFN5c3RlbVBhcmFt ZXRlci5NdHJyU3VwcG9ydGVkID0gRkFMU0U7DQo+ID4NCj4gPiArICBJbml0aWFsaXplTXRyclJl Z3MgKCZTeXN0ZW1QYXJhbWV0ZXIpOw0KPiA+DQo+ID4gKyAgUmVzdWx0ID0gTXRyckdldE1lbW9y eUF0dHJpYnV0ZUluVmFyaWFibGVNdHJyDQo+IChWYWxpZE10cnJCaXRzTWFzaywgVmFsaWRNdHJy QWRkcmVzc01hc2ssIFZhcmlhYmxlTXRycik7DQo+ID4NCj4gPiArICBVVF9BU1NFUlRfRVFVQUwg KFJlc3VsdCwgMCk7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgLy8g RXhwZWN0IEFTU0VSVCgpIGlmIHZhcmlhYmxlIE1UUlIgY291bnQgaXMgPg0KPiBNVFJSX05VTUJF Ul9PRl9WQVJJQUJMRV9NVFJSDQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgU3lzdGVtUGFy YW1ldGVyLk10cnJTdXBwb3J0ZWQgPSBUUlVFOw0KPiA+DQo+ID4gKyAgU3lzdGVtUGFyYW1ldGVy LlZhcmlhYmxlTXRyckNvdW50ID0NCj4gTVRSUl9OVU1CRVJfT0ZfVkFSSUFCTEVfTVRSUiArIDE7 DQo+ID4NCj4gPiArICBJbml0aWFsaXplTXRyclJlZ3MgKCZTeXN0ZW1QYXJhbWV0ZXIpOw0KPiA+ DQo+ID4gKyAgVVRfRVhQRUNUX0FTU0VSVF9GQUlMVVJFDQo+IChNdHJyR2V0TWVtb3J5QXR0cmli dXRlSW5WYXJpYWJsZU10cnINCj4gKFZhbGlkTXRyckJpdHNNYXNrLCBWYWxpZE10cnJBZGRyZXNz TWFzaywgVmFyaWFibGVNdHJyKSwNCj4gTlVMTCk7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBy ZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gPg0KPiA+ICt9DQo+ID4NCj4gPiArDQo+ID4NCj4g PiArLyoqDQo+ID4NCj4gPiArICBVbml0IHRlc3Qgb2YgTXRyckxpYiBzZXJ2aWNlDQo+IE10cnJE ZWJ1Z1ByaW50QWxsTXRycnMoKQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHBhcmFtW2luXSAg Q29udGV4dCAgICBJZ25vcmVkDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBAcmV0dmFsICBVTklU X1RFU1RfUEFTU0VEICAgICAgICAgICAgIFRoZSBVbml0IHRlc3QNCj4gaGFzIGNvbXBsZXRlZCBh bmQgdGhlIHRlc3QNCj4gPg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2FzZSB3YXMNCj4gc3VjY2Vzc2Z1bC4NCj4gPg0KPiA+ICsgIEByZXR2YWwgIFVOSVRf VEVTVF9FUlJPUl9URVNUX0ZBSUxFRCAgQSB0ZXN0IGNhc2UNCj4gYXNzZXJ0aW9uIGhhcyBmYWls ZWQuDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArKiovDQo+ID4NCj4gPiArVU5JVF9URVNUX1NUQVRV Uw0KPiA+DQo+ID4gK0VGSUFQSQ0KPiA+DQo+ID4gK1VuaXRUZXN0TXRyckRlYnVnUHJpbnRBbGxN dHJycyAoDQo+ID4NCj4gPiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4dA0KPiA+DQo+ ID4gKyAgKQ0KPiA+DQo+ID4gK3sNCj4gPg0KPiA+ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VE Ow0KPiA+DQo+ID4gK30NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsvKioNCj4gPg0KPiA+ICsgIFVu aXQgdGVzdCBvZiBNdHJyTGliIHNlcnZpY2UNCj4gTXRyckdldERlZmF1bHRNZW1vcnlUeXBlKCku DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBAcGFyYW1baW5dICBDb250ZXh0ICAgIElnbm9yZWQN Cj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9QQVNTRUQgICAgICAg ICAgICAgVGhlIFVuaXQgdGVzdA0KPiBoYXMgY29tcGxldGVkIGFuZCB0aGUgdGVzdA0KPiA+DQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHdhcw0KPiBz dWNjZXNzZnVsLg0KPiA+DQo+ID4gKyAgQHJldHZhbCAgVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJ TEVEICBBIHRlc3QgY2FzZQ0KPiBhc3NlcnRpb24gaGFzIGZhaWxlZC4NCj4gPg0KPiA+ICsNCj4g Pg0KPiA+ICsqKi8NCj4gPg0KPiA+ICtVTklUX1RFU1RfU1RBVFVTDQo+ID4NCj4gPiArRUZJQVBJ DQo+ID4NCj4gPiArVW5pdFRlc3RNdHJyR2V0RGVmYXVsdE1lbW9yeVR5cGUgKA0KPiA+DQo+ID4g KyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENvbnRleHQNCj4gPg0KPiA+ICsgICkNCj4gPg0KPiA+ ICt7DQo+ID4NCj4gPiArICBNVFJSX0xJQl9URVNUX0NPTlRFWFQgICAgICpMb2NhbENvbnRleHQ7 DQo+ID4NCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiA+DQo+ID4g KyAgTVRSUl9NRU1PUllfQ0FDSEVfVFlQRSAgICBSZXN1bHQ7DQo+ID4NCj4gPiArICBNVFJSX0xJ Ql9TWVNURU1fUEFSQU1FVEVSIFN5c3RlbVBhcmFtZXRlcjsNCj4gPg0KPiA+ICsgIE1UUlJfTUVN T1JZX0NBQ0hFX1RZUEUgICAgQ2FjaGVUeXBlWzVdOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAg Q2FjaGVUeXBlWzBdID0gQ2FjaGVVbmNhY2hlYWJsZTsNCj4gPg0KPiA+ICsgIENhY2hlVHlwZVsx XSA9IENhY2hlV3JpdGVDb21iaW5pbmc7DQo+ID4NCj4gPiArICBDYWNoZVR5cGVbMl0gPSBDYWNo ZVdyaXRlVGhyb3VnaDsNCj4gPg0KPiA+ICsgIENhY2hlVHlwZVszXSA9IENhY2hlV3JpdGVQcm90 ZWN0ZWQ7DQo+ID4NCj4gPiArICBDYWNoZVR5cGVbNF0gPSBDYWNoZVdyaXRlQmFjazsNCj4gPg0K PiA+ICsNCj4gPg0KPiA+ICsgIExvY2FsQ29udGV4dCA9IChNVFJSX0xJQl9URVNUX0NPTlRFWFQg KikgQ29udGV4dDsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIENvcHlNZW0gKCZTeXN0ZW1QYXJh bWV0ZXIsIExvY2FsQ29udGV4dC0NCj4gPlN5c3RlbVBhcmFtZXRlciwgc2l6ZW9mIChTeXN0ZW1Q YXJhbWV0ZXIpKTsNCj4gPg0KPiA+ICsgIC8vDQo+ID4NCj4gPiArICAvLyBJZiBNVFJScyBhcmUg c3VwcG9ydGVkLCB0aGVuIGFsd2F5cyByZXR1cm4gdGhlDQo+IGNhY2hlIHR5cGUgaW4gdGhlIE1T Ug0KPiA+DQo+ID4gKyAgLy8gTVNSX0lBMzJfTVRSUl9ERUZfVFlQRQ0KPiA+DQo+ID4gKyAgLy8N Cj4gPg0KPiA+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IEFSUkFZX1NJWkUgKENhY2hlVHlw ZSk7DQo+IEluZGV4KyspIHsNCj4gPg0KPiA+ICsgICAgU3lzdGVtUGFyYW1ldGVyLkRlZmF1bHRD YWNoZVR5cGUgPQ0KPiBDYWNoZVR5cGVbSW5kZXhdOw0KPiA+DQo+ID4gKyAgICBJbml0aWFsaXpl TXRyclJlZ3MgKCZTeXN0ZW1QYXJhbWV0ZXIpOw0KPiA+DQo+ID4gKyAgICBSZXN1bHQgPSBNdHJy R2V0RGVmYXVsdE1lbW9yeVR5cGUgKCk7DQo+ID4NCj4gPiArICAgIFVUX0FTU0VSVF9FUVVBTCAo UmVzdWx0LA0KPiBTeXN0ZW1QYXJhbWV0ZXIuRGVmYXVsdENhY2hlVHlwZSk7DQo+ID4NCj4gPiAr ICB9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgLy8gSWYgTVRSUnMg YXJlIG5vdCBzdXBwb3J0ZWQsIHRoZW4gYWx3YXlzIHJldHVybg0KPiBDYWNoZVVuY2FjaGVhYmxl DQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgU3lzdGVtUGFyYW1ldGVyLk10cnJTdXBwb3J0 ZWQgPSBGQUxTRTsNCj4gPg0KPiA+ICsgIEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFt ZXRlcik7DQo+ID4NCj4gPiArICBSZXN1bHQgPSBNdHJyR2V0RGVmYXVsdE1lbW9yeVR5cGUgKCk7 DQo+ID4NCj4gPiArICBVVF9BU1NFUlRfRVFVQUwgKFJlc3VsdCwgQ2FjaGVVbmNhY2hlYWJsZSk7 DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBTeXN0ZW1QYXJhbWV0ZXIuTXRyclN1cHBvcnRlZCA9 IFRSVUU7DQo+ID4NCj4gPiArICBTeXN0ZW1QYXJhbWV0ZXIuRml4ZWRNdHJyU3VwcG9ydGVkID0g RkFMU0U7DQo+ID4NCj4gPiArICBJbml0aWFsaXplTXRyclJlZ3MgKCZTeXN0ZW1QYXJhbWV0ZXIp Ow0KPiA+DQo+ID4gKyAgUmVzdWx0ID0gTXRyckdldERlZmF1bHRNZW1vcnlUeXBlICgpOw0KPiA+ DQo+ID4gKyAgVVRfQVNTRVJUX0VRVUFMIChSZXN1bHQsIENhY2hlVW5jYWNoZWFibGUpOw0KPiA+ DQo+ID4gKw0KPiA+DQo+ID4gKyAgU3lzdGVtUGFyYW1ldGVyLk10cnJTdXBwb3J0ZWQgPSBUUlVF Ow0KPiA+DQo+ID4gKyAgU3lzdGVtUGFyYW1ldGVyLkZpeGVkTXRyclN1cHBvcnRlZCA9IFRSVUU7 DQo+ID4NCj4gPiArICBTeXN0ZW1QYXJhbWV0ZXIuVmFyaWFibGVNdHJyQ291bnQgPSAwOw0KPiA+ DQo+ID4gKyAgSW5pdGlhbGl6ZU10cnJSZWdzICgmU3lzdGVtUGFyYW1ldGVyKTsNCj4gPg0KPiA+ ICsgIFJlc3VsdCA9IE10cnJHZXREZWZhdWx0TWVtb3J5VHlwZSAoKTsNCj4gPg0KPiA+ICsgIFVU X0FTU0VSVF9FUVVBTCAoUmVzdWx0LCBDYWNoZVVuY2FjaGVhYmxlKTsNCj4gPg0KPiA+ICsNCj4g Pg0KPiA+ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiA+DQo+ID4gK30NCj4gPg0KPiA+ ICsNCj4gPg0KPiA+ICsvKioNCj4gPg0KPiA+ICsgIFVuaXQgdGVzdCBvZiBNdHJyTGliIHNlcnZp Y2UNCj4gTXRyclNldE1lbW9yeUF0dHJpYnV0ZUluTXRyclNldHRpbmdzKCkuDQo+ID4NCj4gPiAr DQo+ID4NCj4gPiArICBAcGFyYW1baW5dICBDb250ZXh0ICAgIElnbm9yZWQNCj4gPg0KPiA+ICsN Cj4gPg0KPiA+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVu aXQgdGVzdA0KPiBoYXMgY29tcGxldGVkIGFuZCB0aGUgdGVzdA0KPiA+DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHdhcw0KPiBzdWNjZXNzZnVsLg0K PiA+DQo+ID4gKyAgQHJldHZhbCAgVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEICBBIHRlc3Qg Y2FzZQ0KPiBhc3NlcnRpb24gaGFzIGZhaWxlZC4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsqKi8N Cj4gPg0KPiA+ICtVTklUX1RFU1RfU1RBVFVTDQo+ID4NCj4gPiArRUZJQVBJDQo+ID4NCj4gPiAr VW5pdFRlc3RNdHJyU2V0TWVtb3J5QXR0cmlidXRlSW5NdHJyU2V0dGluZ3MgKA0KPiA+DQo+ID4g KyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENvbnRleHQNCj4gPg0KPiA+ICsgICkNCj4gPg0KPiA+ ICt7DQo+ID4NCj4gPiArICBDT05TVCBNVFJSX0xJQl9TWVNURU1fUEFSQU1FVEVSICpTeXN0ZW1Q YXJhbWV0ZXI7DQo+ID4NCj4gPiArICBSRVRVUk5fU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0 YXR1czsNCj4gPg0KPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgVWNDb3Vu dDsNCj4gPg0KPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgV3RDb3VudDsN Cj4gPg0KPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgV2JDb3VudDsNCj4g Pg0KPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgV3BDb3VudDsNCj4gPg0K PiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgV2NDb3VudDsNCj4gPg0KPiA+ ICsNCj4gPg0KPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgTXRyckluZGV4 Ow0KPiA+DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4g Pg0KPiA+ICsgIE1UUlJfU0VUVElOR1MgICAgICAgICAgICAgICAgICAgTG9jYWxNdHJyczsNCj4g Pg0KPiA+ICsNCj4gPg0KPiA+ICsgIE1UUlJfTUVNT1JZX1JBTkdFDQo+IFJhd010cnJSYW5nZVtN VFJSX05VTUJFUl9PRl9WQVJJQUJMRV9NVFJSXTsNCj4gPg0KPiA+ICsgIE1UUlJfTUVNT1JZX1JB TkdFDQo+IEV4cGVjdGVkTWVtb3J5UmFuZ2VzW01UUlJfTlVNQkVSX09GX0ZJWEVEX01UUlIgKiBz aXplb2YNCj4gKFVJTlQ2NCkgKyAyICogTVRSUl9OVU1CRVJfT0ZfVkFSSUFCTEVfTVRSUiArIDFd Ow0KPiA+DQo+ID4gKyAgVUlOVDMyDQo+IEV4cGVjdGVkVmFyaWFibGVNdHJyVXNhZ2U7DQo+ID4N Cj4gPiArICBVSU5UTg0KPiBFeHBlY3RlZE1lbW9yeVJhbmdlc0NvdW50Ow0KPiA+DQo+ID4gKw0K PiA+DQo+ID4gKyAgTVRSUl9NRU1PUllfUkFOR0UNCj4gQWN0dWFsTWVtb3J5UmFuZ2VzW01UUlJf TlVNQkVSX09GX0ZJWEVEX01UUlIgKiBzaXplb2YNCj4gKFVJTlQ2NCkgKyAyICogTVRSUl9OVU1C RVJfT0ZfVkFSSUFCTEVfTVRSUiArIDFdOw0KPiA+DQo+ID4gKyAgVUlOVDMyDQo+IEFjdHVhbFZh cmlhYmxlTXRyclVzYWdlOw0KPiA+DQo+ID4gKyAgVUlOVE4NCj4gQWN0dWFsTWVtb3J5UmFuZ2Vz Q291bnQ7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBNVFJSX1NFVFRJTkdTICAgICAgICAgICAg ICAgICAgICpNdHJyc1syXTsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIFN5c3RlbVBhcmFtZXRl ciA9IChNVFJSX0xJQl9TWVNURU1fUEFSQU1FVEVSICopDQo+IENvbnRleHQ7DQo+ID4NCj4gPiAr ICBHZW5lcmF0ZVJhbmRvbU1lbW9yeVR5cGVDb21iaW5hdGlvbiAoDQo+ID4NCj4gPiArICAgIFN5 c3RlbVBhcmFtZXRlci0+VmFyaWFibGVNdHJyQ291bnQgLQ0KPiBQYXRjaFBjZEdldDMyIChQY2RD cHVOdW1iZXJPZlJlc2VydmVkVmFyaWFibGVNdHJycyksDQo+ID4NCj4gPiArICAgICZVY0NvdW50 LCAmV3RDb3VudCwgJldiQ291bnQsICZXcENvdW50LCAmV2NDb3VudA0KPiA+DQo+ID4gKyAgICAp Ow0KPiA+DQo+ID4gKyAgR2VuZXJhdGVWYWxpZEFuZENvbmZpZ3VyYWJsZU10cnJQYWlycyAoDQo+ ID4NCj4gPiArICAgIFN5c3RlbVBhcmFtZXRlci0+UGh5c2ljYWxBZGRyZXNzQml0cywNCj4gUmF3 TXRyclJhbmdlLA0KPiA+DQo+ID4gKyAgICBVY0NvdW50LCBXdENvdW50LCBXYkNvdW50LCBXcENv dW50LCBXY0NvdW50DQo+ID4NCj4gPiArICAgICk7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBF eHBlY3RlZFZhcmlhYmxlTXRyclVzYWdlID0gVWNDb3VudCArIFd0Q291bnQgKw0KPiBXYkNvdW50 ICsgV3BDb3VudCArIFdjQ291bnQ7DQo+ID4NCj4gPiArICBFeHBlY3RlZE1lbW9yeVJhbmdlc0Nv dW50ID0gQVJSQVlfU0laRQ0KPiAoRXhwZWN0ZWRNZW1vcnlSYW5nZXMpOw0KPiA+DQo+ID4gKyAg R2V0RWZmZWN0aXZlTWVtb3J5UmFuZ2VzICgNCj4gPg0KPiA+ICsgICAgU3lzdGVtUGFyYW1ldGVy LT5EZWZhdWx0Q2FjaGVUeXBlLA0KPiA+DQo+ID4gKyAgICBTeXN0ZW1QYXJhbWV0ZXItPlBoeXNp Y2FsQWRkcmVzc0JpdHMsDQo+ID4NCj4gPiArICAgIFJhd010cnJSYW5nZSwgRXhwZWN0ZWRWYXJp YWJsZU10cnJVc2FnZSwNCj4gPg0KPiA+ICsgICAgRXhwZWN0ZWRNZW1vcnlSYW5nZXMsICZFeHBl Y3RlZE1lbW9yeVJhbmdlc0NvdW50DQo+ID4NCj4gPiArICAgICk7DQo+ID4NCj4gPiArDQo+ID4N Cj4gPiArICBVVF9MT0dfSU5GTyAoIi0tLSBFeHBlY3RlZCBNZW1vcnkgUmFuZ2VzIFslZF0gLS0t DQo+IFxuIiwgRXhwZWN0ZWRNZW1vcnlSYW5nZXNDb3VudCk7DQo+ID4NCj4gPiArICBEdW1wTWVt b3J5UmFuZ2VzIChFeHBlY3RlZE1lbW9yeVJhbmdlcywNCj4gRXhwZWN0ZWRNZW1vcnlSYW5nZXND b3VudCk7DQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgLy8gRGVmYXVsdCBjYWNoZSB0eXBl IGlzIGFsd2F5cyBhbiBJTlBVVA0KPiA+DQo+ID4gKyAgLy8NCj4gPg0KPiA+ICsgIFplcm9NZW0g KCZMb2NhbE10cnJzLCBzaXplb2YgKExvY2FsTXRycnMpKTsNCj4gPg0KPiA+ICsgIExvY2FsTXRy cnMuTXRyckRlZlR5cGUgPSBNdHJyR2V0RGVmYXVsdE1lbW9yeVR5cGUNCj4gKCk7DQo+ID4NCj4g PiArICBNdHJyc1swXSAgICAgICAgICAgICAgID0gJkxvY2FsTXRycnM7DQo+ID4NCj4gPiArICBN dHJyc1sxXSAgICAgICAgICAgICAgID0gTlVMTDsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIGZv ciAoTXRyckluZGV4ID0gMDsgTXRyckluZGV4IDwgQVJSQVlfU0laRSAoTXRycnMpOw0KPiBNdHJy SW5kZXgrKykgew0KPiA+DQo+ID4gKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPA0KPiBFeHBl Y3RlZE1lbW9yeVJhbmdlc0NvdW50OyBJbmRleCsrKSB7DQo+ID4NCj4gPiArICAgICAgU3RhdHVz ID0gTXRyclNldE1lbW9yeUF0dHJpYnV0ZUluTXRyclNldHRpbmdzICgNCj4gPg0KPiA+ICsgICAg ICAgICAgICAgICAgIE10cnJzW010cnJJbmRleF0sDQo+ID4NCj4gPiArDQo+IEV4cGVjdGVkTWVt b3J5UmFuZ2VzW0luZGV4XS5CYXNlQWRkcmVzcywNCj4gPg0KPiA+ICsgICAgICAgICAgICAgICAg IEV4cGVjdGVkTWVtb3J5UmFuZ2VzW0luZGV4XS5MZW5ndGgsDQo+ID4NCj4gPiArICAgICAgICAg ICAgICAgICBFeHBlY3RlZE1lbW9yeVJhbmdlc1tJbmRleF0uVHlwZQ0KPiA+DQo+ID4gKyAgICAg ICAgICAgICAgICAgKTsNCj4gPg0KPiA+ICsgICAgICBVVF9BU1NFUlRfVFJVRSAoU3RhdHVzID09 IFJFVFVSTl9TVUNDRVNTIHx8DQo+IFN0YXR1cyA9PSBSRVRVUk5fT1VUX09GX1JFU09VUkNFUyB8 fCBTdGF0dXMgPT0NCj4gUkVUVVJOX0JVRkZFUl9UT09fU01BTEwpOw0KPiA+DQo+ID4gKyAgICAg IGlmIChTdGF0dXMgPT0gUkVUVVJOX09VVF9PRl9SRVNPVVJDRVMgfHwgU3RhdHVzDQo+ID09IFJF VFVSTl9CVUZGRVJfVE9PX1NNQUxMKSB7DQo+ID4NCj4gPiArICAgICAgICByZXR1cm4gVU5JVF9U RVNUX1NLSVBQRUQ7DQo+ID4NCj4gPiArICAgICAgfQ0KPiA+DQo+ID4gKyAgICB9DQo+ID4NCj4g PiArDQo+ID4NCj4gPiArICAgIGlmIChNdHJyc1tNdHJySW5kZXhdID09IE5VTEwpIHsNCj4gPg0K PiA+ICsgICAgICBaZXJvTWVtICgmTG9jYWxNdHJycywgc2l6ZW9mIChMb2NhbE10cnJzKSk7DQo+ ID4NCj4gPiArICAgICAgTXRyckdldEFsbE10cnJzICgmTG9jYWxNdHJycyk7DQo+ID4NCj4gPiAr ICAgIH0NCj4gPg0KPiA+ICsgICAgQWN0dWFsTWVtb3J5UmFuZ2VzQ291bnQgPSBBUlJBWV9TSVpF DQo+IChBY3R1YWxNZW1vcnlSYW5nZXMpOw0KPiA+DQo+ID4gKyAgICBDb2xsZWN0VGVzdFJlc3Vs dCAoDQo+ID4NCj4gPiArICAgICAgU3lzdGVtUGFyYW1ldGVyLT5EZWZhdWx0Q2FjaGVUeXBlLA0K PiBTeXN0ZW1QYXJhbWV0ZXItPlBoeXNpY2FsQWRkcmVzc0JpdHMsIFN5c3RlbVBhcmFtZXRlci0N Cj4gPlZhcmlhYmxlTXRyckNvdW50LA0KPiA+DQo+ID4gKyAgICAgICZMb2NhbE10cnJzLCBBY3R1 YWxNZW1vcnlSYW5nZXMsDQo+ICZBY3R1YWxNZW1vcnlSYW5nZXNDb3VudCwgJkFjdHVhbFZhcmlh YmxlTXRyclVzYWdlDQo+ID4NCj4gPiArICAgICAgKTsNCj4gPg0KPiA+ICsgICAgVVRfTE9HX0lO Rk8gKCItLS0gQWN0dWFsIE1lbW9yeSBSYW5nZXMgWyVkXSAtLS0NCj4gXG4iLCBBY3R1YWxNZW1v cnlSYW5nZXNDb3VudCk7DQo+ID4NCj4gPiArICAgIER1bXBNZW1vcnlSYW5nZXMgKEFjdHVhbE1l bW9yeVJhbmdlcywNCj4gQWN0dWFsTWVtb3J5UmFuZ2VzQ291bnQpOw0KPiA+DQo+ID4gKyAgICBW ZXJpZnlNZW1vcnlSYW5nZXMgKEV4cGVjdGVkTWVtb3J5UmFuZ2VzLA0KPiBFeHBlY3RlZE1lbW9y eVJhbmdlc0NvdW50LCBBY3R1YWxNZW1vcnlSYW5nZXMsDQo+IEFjdHVhbE1lbW9yeVJhbmdlc0Nv dW50KTsNCj4gPg0KPiA+ICsgICAgVVRfQVNTRVJUX1RSVUUgKEV4cGVjdGVkVmFyaWFibGVNdHJy VXNhZ2UgPj0NCj4gQWN0dWFsVmFyaWFibGVNdHJyVXNhZ2UpOw0KPiA+DQo+ID4gKw0KPiA+DQo+ ID4gKyAgICBaZXJvTWVtICgmTG9jYWxNdHJycywgc2l6ZW9mIChMb2NhbE10cnJzKSk7DQo+ID4N Cj4gPiArICB9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NF RDsNCj4gPg0KPiA+ICt9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArLyoqDQo+ ID4NCj4gPiArICBQcmVwIHJvdXRpbmUgZm9yDQo+IFVuaXRUZXN0R2V0RmlybXdhcmVWYXJpYWJs ZU10cnJDb3VudCgpLg0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHBhcmFtIENvbnRleHQgIFBv aW50IHRvIGEgVUlOVDMyIGRhdGEgdG8gc2F2ZSB0aGUNCj4gUGNkQ3B1TnVtYmVyT2ZSZXNlcnZl ZFZhcmlhYmxlTXRycnMuDQo+ID4NCj4gPiArKiovDQo+ID4NCj4gPiArVU5JVF9URVNUX1NUQVRV Uw0KPiA+DQo+ID4gK0VGSUFQSQ0KPiA+DQo+ID4gK1NhdmVQY2RWYWx1ZSAoDQo+ID4NCj4gPiAr ICBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4dA0KPiA+DQo+ID4gKyAgKQ0KPiA+DQo+ID4gK3sN Cj4gPg0KPiA+ICsgIE1UUlJfTElCX0dFVF9GSVJNV0FSRV9WQVJJQUJMRV9NVFJSX0NPVU5UX0NP TlRFWFQNCj4gKkxvY2FsQ29udGV4dDsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIExvY2FsQ29u dGV4dCA9DQo+IChNVFJSX0xJQl9HRVRfRklSTVdBUkVfVkFSSUFCTEVfTVRSUl9DT1VOVF9DT05U RVhUICopDQo+IENvbnRleHQ7DQo+ID4NCj4gPiArICBMb2NhbENvbnRleHQtPk51bWJlck9mUmVz ZXJ2ZWRWYXJpYWJsZU10cnJzID0NCj4gUGF0Y2hQY2RHZXQzMiAoUGNkQ3B1TnVtYmVyT2ZSZXNl cnZlZFZhcmlhYmxlTXRycnMpOw0KPiA+DQo+ID4gKyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNTRUQ7 DQo+ID4NCj4gPiArfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKy8qKg0KPiA+DQo+ID4gKyAgQ2xl YW4gdXAgcm91dGluZSBmb3INCj4gVW5pdFRlc3RHZXRGaXJtd2FyZVZhcmlhYmxlTXRyckNvdW50 KCkuDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBAcGFyYW0gQ29udGV4dCAgUG9pbnQgdG8gYSBV SU5UMzIgZGF0YSB0byBzYXZlIHRoZQ0KPiBQY2RDcHVOdW1iZXJPZlJlc2VydmVkVmFyaWFibGVN dHJycy4NCj4gPg0KPiA+ICsqKi8NCj4gPg0KPiA+ICtWT0lEDQo+ID4NCj4gPiArRUZJQVBJDQo+ ID4NCj4gPiArUmVzdG9yZVBjZFZhbHVlICgNCj4gPg0KPiA+ICsgIFVOSVRfVEVTVF9DT05URVhU ICBDb250ZXh0DQo+ID4NCj4gPiArICApDQo+ID4NCj4gPiArew0KPiA+DQo+ID4gKyAgTVRSUl9M SUJfR0VUX0ZJUk1XQVJFX1ZBUklBQkxFX01UUlJfQ09VTlRfQ09OVEVYVA0KPiAqTG9jYWxDb250 ZXh0Ow0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgTG9jYWxDb250ZXh0ID0NCj4gKE1UUlJfTElC X0dFVF9GSVJNV0FSRV9WQVJJQUJMRV9NVFJSX0NPVU5UX0NPTlRFWFQgKikNCj4gQ29udGV4dDsN Cj4gPg0KPiA+ICsgIFBhdGNoUGNkU2V0MzIgKFBjZENwdU51bWJlck9mUmVzZXJ2ZWRWYXJpYWJs ZU10cnJzLA0KPiBMb2NhbENvbnRleHQtPk51bWJlck9mUmVzZXJ2ZWRWYXJpYWJsZU10cnJzKTsN Cj4gPg0KPiA+ICt9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArLyoqDQo+ID4NCj4gPiArICBJbml0 aWFsaXplIHRoZSB1bml0IHRlc3QgZnJhbWV3b3JrLCBzdWl0ZSwgYW5kIHVuaXQNCj4gdGVzdHMg Zm9yIHRoZQ0KPiA+DQo+ID4gKyAgUmVzZXRTeXN0ZW1MaWIgYW5kIHJ1biB0aGUgUmVzZXRTeXN0 ZW1MaWIgdW5pdA0KPiB0ZXN0Lg0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHBhcmFtIEl0ZXJh dGlvbiAgICAgICAgICAgICAgIEl0ZXJhdGlvbiBvZiB0ZXN0aW5nDQo+IE10cnJTZXRNZW1vcnlB dHRyaWJ1dGVJbk10cnJTZXR0aW5ncw0KPiA+DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGFuZA0KPiBNdHJyU2V0TWVtb3J5QXR0cmlidXRlc0luTXRyclNldHRpbmdzIHVz aW5nIHJhbmRvbQ0KPiBpbnB1dHMuDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBAcmV0dmFsICBF RklfU1VDQ0VTUyAgICAgICAgICAgQWxsIHRlc3QgY2FzZXMgd2VyZQ0KPiBkaXNwYXRjaGVkLg0K PiA+DQo+ID4gKyAgQHJldHZhbCAgRUZJX09VVF9PRl9SRVNPVVJDRVMgIFRoZXJlIGFyZSBub3Qg ZW5vdWdoDQo+IHJlc291cmNlcyBhdmFpbGFibGUgdG8NCj4gPg0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplIHRoZSB1bml0DQo+IHRlc3RzLg0KPiA+DQo+ ID4gKyoqLw0KPiA+DQo+ID4gK1NUQVRJQw0KPiA+DQo+ID4gK0VGSV9TVEFUVVMNCj4gPg0KPiA+ ICtFRklBUEkNCj4gPg0KPiA+ICtVbml0VGVzdGluZ0VudHJ5ICgNCj4gPg0KPiA+ICsgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICBJdGVyYXRpb24NCj4gPg0KPiA+ICsgICkNCj4gPg0KPiA+ ICt7DQo+ID4NCj4gPiArICBFRklfU1RBVFVTDQo+IFN0YXR1czsNCj4gPg0KPiA+ICsgIFVOSVRf VEVTVF9GUkFNRVdPUktfSEFORExFDQo+IEZyYW1ld29yazsNCj4gPg0KPiA+ICsgIFVOSVRfVEVT VF9TVUlURV9IQU5ETEUNCj4gTXRyckFwaVRlc3RzOw0KPiA+DQo+ID4gKyAgVUlOVE4NCj4gSW5k ZXg7DQo+ID4NCj4gPiArICBVSU5UTg0KPiBTeXN0ZW1JbmRleDsNCj4gPg0KPiA+ICsgIE1UUlJf TElCX1RFU1RfQ09OVEVYVA0KPiBDb250ZXh0Ow0KPiA+DQo+ID4gKyAgTVRSUl9MSUJfR0VUX0ZJ Uk1XQVJFX1ZBUklBQkxFX01UUlJfQ09VTlRfQ09OVEVYVA0KPiBHZXRGaXJtd2FyZVZhcmlhYmxl TXRyckNvdW50Q29udGV4dDsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIENvbnRleHQuU3lzdGVt UGFyYW1ldGVyDQo+ID0gJm1EZWZhdWx0U3lzdGVtUGFyYW1ldGVyOw0KPiA+DQo+ID4gKyAgR2V0 RmlybXdhcmVWYXJpYWJsZU10cnJDb3VudENvbnRleHQuU3lzdGVtUGFyYW1ldGVyDQo+ID0gJm1E ZWZhdWx0U3lzdGVtUGFyYW1ldGVyOw0KPiA+DQo+ID4gKyAgRnJhbWV3b3JrID0gTlVMTDsNCj4g Pg0KPiA+ICsNCj4gPg0KPiA+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIiVhIHYlYVxuIiwgVU5J VF9URVNUX0FQUF9OQU1FLA0KPiBVTklUX1RFU1RfQVBQX1ZFUlNJT04pKTsNCj4gPg0KPiA+ICsN Cj4gPg0KPiA+ICsgIC8vDQo+ID4NCj4gPiArICAvLyBTZXR1cCB0aGUgdGVzdCBmcmFtZXdvcmsg Zm9yIHJ1bm5pbmcgdGhlIHRlc3RzLg0KPiA+DQo+ID4gKyAgLy8NCj4gPg0KPiA+ICsgIFN0YXR1 cyA9IEluaXRVbml0VGVzdEZyYW1ld29yayAoJkZyYW1ld29yaywNCj4gVU5JVF9URVNUX0FQUF9O QU1FLCBnRWZpQ2FsbGVyQmFzZU5hbWUsDQo+IFVOSVRfVEVTVF9BUFBfVkVSU0lPTik7DQo+ID4N Cj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4NCj4gPiArICAgIERFQlVHICgo REVCVUdfRVJST1IsICJGYWlsZWQgaW4NCj4gSW5pdFVuaXRUZXN0RnJhbWV3b3JrLiBTdGF0dXMg PSAlclxuIiwgU3RhdHVzKSk7DQo+ID4NCj4gPiArICAgIGdvdG8gRVhJVDsNCj4gPg0KPiA+ICsg IH0NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIC8vDQo+ID4NCj4gPiArICAvLyAtLS0tLS0tLS0t LS0tLVN1aXRlLS0tLS0tLS0tLS1EZXNjcmlwdGlvbi0tLS0tLS0NCj4gLS0tLS0tLU5hbWUtLS0t LS0tLS0tRnVuY3Rpb24tLS0tLS0tLVByZS0tLVBvc3QtLS0tLS0tLS0NCj4gLS0tLS0tLS0tLUNv bnRleHQtLS0tLS0tLS0tLQ0KPiA+DQo+ID4gKyAgLy8NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsg IC8vDQo+ID4NCj4gPiArICAvLyBQb3B1bGF0ZSB0aGUgTXRyckxpYiBBUEkgVW5pdCBUZXN0IFN1 aXRlLg0KPiA+DQo+ID4gKyAgLy8NCj4gPg0KPiA+ICsgIFN0YXR1cyA9IENyZWF0ZVVuaXRUZXN0 U3VpdGUgKCZNdHJyQXBpVGVzdHMsDQo+IEZyYW1ld29yaywgIk10cnJMaWIgQVBJIFRlc3RzIiwg Ik10cnJMaWIuTXRyckxpYiIsIE5VTEwsDQo+IE5VTEwpOw0KPiA+DQo+ID4gKyAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiA+DQo+ID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiRmFp bGVkIGluDQo+IENyZWF0ZVVuaXRUZXN0U3VpdGUgZm9yIE10cnJMaWIgQVBJIFRlc3RzXG4iKSk7 DQo+ID4NCj4gPiArICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+DQo+ID4g KyAgICBnb3RvIEVYSVQ7DQo+ID4NCj4gPiArICB9DQo+ID4NCj4gPiArICBBZGRUZXN0Q2FzZSAo TXRyckFwaVRlc3RzLCAiVGVzdCBJc010cnJTdXBwb3J0ZWQiLA0KPiAiTXRyclN1cHBvcnRlZCIs DQo+IFVuaXRUZXN0SXNNdHJyU3VwcG9ydGVkLCAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0K PiBOVUxMLCAmQ29udGV4dCk7DQo+ID4NCj4gPiArICBBZGRUZXN0Q2FzZSAoTXRyckFwaVRlc3Rz LCAiVGVzdA0KPiBHZXRWYXJpYWJsZU10cnJDb3VudCIsDQo+ICJHZXRWYXJpYWJsZU10cnJDb3Vu dCIsDQo+IFVuaXRUZXN0R2V0VmFyaWFibGVNdHJyQ291bnQsICAgICAgICAgICAgICAgICBOVUxM LA0KPiBOVUxMLCAmQ29udGV4dCk7DQo+ID4NCj4gPiArICBBZGRUZXN0Q2FzZSAoTXRyckFwaVRl c3RzLCAiVGVzdA0KPiBHZXRGaXJtd2FyZVZhcmlhYmxlTXRyckNvdW50IiwNCj4gIkdldEZpcm13 YXJlVmFyaWFibGVNdHJyQ291bnQiLA0KPiBVbml0VGVzdEdldEZpcm13YXJlVmFyaWFibGVNdHJy Q291bnQsDQo+IFNhdmVQY2RWYWx1ZSwgUmVzdG9yZVBjZFZhbHVlLA0KPiAmR2V0RmlybXdhcmVW YXJpYWJsZU10cnJDb3VudENvbnRleHQpOw0KPiA+DQo+ID4gKyAgQWRkVGVzdENhc2UgKE10cnJB cGlUZXN0cywgIlRlc3QNCj4gTXRyckdldE1lbW9yeUF0dHJpYnV0ZSIsDQo+ICJNdHJyR2V0TWVt b3J5QXR0cmlidXRlIiwNCj4gVW5pdFRlc3RNdHJyR2V0TWVtb3J5QXR0cmlidXRlLCAgICAgICAg ICAgICAgIE5VTEwsDQo+IE5VTEwsICZDb250ZXh0KTsNCj4gPg0KPiA+ICsgIEFkZFRlc3RDYXNl IChNdHJyQXBpVGVzdHMsICJUZXN0IE10cnJHZXRGaXhlZE10cnIiLA0KPiAiTXRyckdldEZpeGVk TXRyciIsDQo+IFVuaXRUZXN0TXRyckdldEZpeGVkTXRyciwgICAgICAgICAgICAgICAgICAgICBO VUxMLA0KPiBOVUxMLCAmQ29udGV4dCk7DQo+ID4NCj4gPiArICBBZGRUZXN0Q2FzZSAoTXRyckFw aVRlc3RzLCAiVGVzdCBNdHJyR2V0QWxsTXRycnMiLA0KPiAiTXRyckdldEFsbE10cnJzIiwNCj4g VW5pdFRlc3RNdHJyR2V0QWxsTXRycnMsICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+IE5V TEwsICZDb250ZXh0KTsNCj4gPg0KPiA+ICsgIEFkZFRlc3RDYXNlIChNdHJyQXBpVGVzdHMsICJU ZXN0IE10cnJTZXRBbGxNdHJycyIsDQo+ICJNdHJyU2V0QWxsTXRycnMiLA0KPiBVbml0VGVzdE10 cnJTZXRBbGxNdHJycywgICAgICAgICAgICAgICAgICAgICAgTlVMTCwNCj4gTlVMTCwgJkNvbnRl eHQpOw0KPiA+DQo+ID4gKyAgQWRkVGVzdENhc2UgKE10cnJBcGlUZXN0cywgIlRlc3QNCj4gTXRy ckdldE1lbW9yeUF0dHJpYnV0ZUluVmFyaWFibGVNdHJyIiwNCj4gIk10cnJHZXRNZW1vcnlBdHRy aWJ1dGVJblZhcmlhYmxlTXRyciIsDQo+IFVuaXRUZXN0TXRyckdldE1lbW9yeUF0dHJpYnV0ZUlu VmFyaWFibGVNdHJyLCBOVUxMLA0KPiBOVUxMLCAmQ29udGV4dCk7DQo+ID4NCj4gPiArICBBZGRU ZXN0Q2FzZSAoTXRyckFwaVRlc3RzLCAiVGVzdA0KPiBNdHJyRGVidWdQcmludEFsbE10cnJzIiwN Cj4gIk10cnJEZWJ1Z1ByaW50QWxsTXRycnMiLA0KPiBVbml0VGVzdE10cnJEZWJ1Z1ByaW50QWxs TXRycnMsICAgICAgICAgICAgICAgTlVMTCwNCj4gTlVMTCwgJkNvbnRleHQpOw0KPiA+DQo+ID4g KyAgQWRkVGVzdENhc2UgKE10cnJBcGlUZXN0cywgIlRlc3QNCj4gTXRyckdldERlZmF1bHRNZW1v cnlUeXBlIiwNCj4gIk10cnJHZXREZWZhdWx0TWVtb3J5VHlwZSIsDQo+IFVuaXRUZXN0TXRyckdl dERlZmF1bHRNZW1vcnlUeXBlLCAgICAgICAgICAgICBOVUxMLA0KPiBOVUxMLCAmQ29udGV4dCk7 DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBmb3IgKFN5c3RlbUluZGV4ID0gMDsgU3lzdGVtSW5k ZXggPCBBUlJBWV9TSVpFDQo+IChtU3lzdGVtUGFyYW1ldGVycyk7IFN5c3RlbUluZGV4KyspIHsN Cj4gPg0KPiA+ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgSXRlcmF0aW9uOyBJbmRleCsr KSB7DQo+ID4NCj4gPiArICAgICAgQWRkVGVzdENhc2UgKE10cnJBcGlUZXN0cywgIlRlc3QNCj4g SW52YWxpZE1lbW9yeUxheW91dHMiLA0KPiAiSW52YWxpZE1lbW9yeUxheW91dHMiLA0KPiBVbml0 VGVzdEludmFsaWRNZW1vcnlMYXlvdXRzLA0KPiBJbml0aWFsaXplU3lzdGVtLCBOVUxMLA0KPiAm bVN5c3RlbVBhcmFtZXRlcnNbU3lzdGVtSW5kZXhdKTsNCj4gPg0KPiA+ICsgICAgICBBZGRUZXN0 Q2FzZSAoTXRyckFwaVRlc3RzLCAiVGVzdA0KPiBNdHJyU2V0TWVtb3J5QXR0cmlidXRlSW5NdHJy U2V0dGluZ3MiLA0KPiAiTXRyclNldE1lbW9yeUF0dHJpYnV0ZUluTXRyclNldHRpbmdzIiwNCj4g VW5pdFRlc3RNdHJyU2V0TWVtb3J5QXR0cmlidXRlSW5NdHJyU2V0dGluZ3MsDQo+IEluaXRpYWxp emVTeXN0ZW0sIE5VTEwsDQo+ICZtU3lzdGVtUGFyYW1ldGVyc1tTeXN0ZW1JbmRleF0pOw0KPiA+ DQo+ID4gKyAgICAgIEFkZFRlc3RDYXNlIChNdHJyQXBpVGVzdHMsICJUZXN0DQo+IE10cnJTZXRN ZW1vcnlBdHRyaWJ1dGVzSW5NdHJyU2V0dGluZ3MiLA0KPiAiTXRyclNldE1lbW9yeUF0dHJpYnV0 ZXNJbk10cnJTZXR0aW5ncyIsDQo+IFVuaXRUZXN0TXRyclNldE1lbW9yeUF0dHJpYnV0ZXNJbk10 cnJTZXR0aW5ncywNCj4gSW5pdGlhbGl6ZVN5c3RlbSwgTlVMTCwNCj4gJm1TeXN0ZW1QYXJhbWV0 ZXJzW1N5c3RlbUluZGV4XSk7DQo+ID4NCj4gPiArICAgIH0NCj4gPg0KPiA+ICsgIH0NCj4gPg0K PiA+ICsgIC8vDQo+ID4NCj4gPiArICAvLyBFeGVjdXRlIHRoZSB0ZXN0cy4NCj4gPg0KPiA+ICsg IC8vDQo+ID4NCj4gPiArICBzcmFuZCAoKHVuc2lnbmVkIGludCkgdGltZSAoTlVMTCkpOw0KPiA+ DQo+ID4gKyAgU3RhdHVzID0gUnVuQWxsVGVzdFN1aXRlcyAoRnJhbWV3b3JrKTsNCj4gPg0KPiA+ ICsNCj4gPg0KPiA+ICtFWElUOg0KPiA+DQo+ID4gKyAgaWYgKEZyYW1ld29yayAhPSBOVUxMKSB7 DQo+ID4NCj4gPiArICAgIEZyZWVVbml0VGVzdEZyYW1ld29yayAoRnJhbWV3b3JrKTsNCj4gPg0K PiA+ICsgIH0NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4NCj4g PiArfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKy8qKg0KPiA+DQo+ID4gKyAgU3RhbmRhcmQgUE9T SVggQyBlbnRyeSBwb2ludCBmb3IgaG9zdCBiYXNlZCB1bml0DQo+IHRlc3QgZXhlY3V0aW9uLg0K PiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHBhcmFtIEFyZ2MgIE51bWJlciBvZiBhcmd1bWVudHMu DQo+ID4NCj4gPiArICBAcGFyYW0gQXJndiAgQXJyYXkgb2YgYXJndW1lbnRzLg0KPiA+DQo+ID4g Kw0KPiA+DQo+ID4gKyAgQHJldHVybiBUZXN0IGFwcGxpY2F0aW9uIGV4aXQgY29kZS4NCj4gPg0K PiA+ICsqKi8NCj4gPg0KPiA+ICtJTlQzMg0KPiA+DQo+ID4gK21haW4gKA0KPiA+DQo+ID4gKyAg SU5UMzIgQXJnYywNCj4gPg0KPiA+ICsgIENIQVI4ICpBcmd2W10NCj4gPg0KPiA+ICsgICkNCj4g Pg0KPiA+ICt7DQo+ID4NCj4gPiArICBVSU5UTiAgICBJdGVyYXRpb247DQo+ID4NCj4gPiArDQo+ ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgLy8gRmlyc3QgcGFyYW1ldGVyIHNwZWNpZmllcyB0 aGUgdGVzdCBpdGVyYXRpb25zLg0KPiA+DQo+ID4gKyAgLy8gRGVmYXVsdCBpcyAxMC4NCj4gPg0K PiA+ICsgIC8vDQo+ID4NCj4gPiArICBJdGVyYXRpb24gPSAxMDsNCj4gPg0KPiA+ICsgIGlmIChB cmdjID09IDIpIHsNCj4gPg0KPiA+ICsgICAgSXRlcmF0aW9uID0gYXRvaSAoQXJndlsxXSk7DQo+ ID4NCj4gPiArICB9DQo+ID4NCj4gPiArICByZXR1cm4gVW5pdFRlc3RpbmdFbnRyeSAoSXRlcmF0 aW9uKTsNCj4gPg0KPiA+ICt9DQo+ID4NCj4gPiBkaWZmIC0tZ2l0DQo+IGEvVWVmaUNwdVBrZy9M aWJyYXJ5L010cnJMaWIvVW5pdFRlc3QvTXRyckxpYlVuaXRUZXN0LmgNCj4gYi9VZWZpQ3B1UGtn L0xpYnJhcnkvTXRyckxpYi9Vbml0VGVzdC9NdHJyTGliVW5pdFRlc3QuaA0KPiA+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMC4uOTc1MDUyMzEzMw0KPiA+IC0tLSAv ZGV2L251bGwNCj4gPiArKysNCj4gYi9VZWZpQ3B1UGtnL0xpYnJhcnkvTXRyckxpYi9Vbml0VGVz dC9NdHJyTGliVW5pdFRlc3QuaA0KPiA+IEBAIC0wLDAgKzEsMTgyIEBADQo+ID4gKy8qKiBAZmls ZQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQ29weXJpZ2h0IChjKSAyMDIwLCBJbnRlbCBDb3Jw b3JhdGlvbi4gQWxsIHJpZ2h0cw0KPiByZXNlcnZlZC48QlI+DQo+ID4NCj4gPiArICBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+DQo+ID4gKw0KPiA+DQo+ ID4gKyoqLw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyNpZm5kZWYgX01UUlJfU1VQUE9SVF9IXw0K PiA+DQo+ID4gKyNkZWZpbmUgX01UUlJfU1VQUE9SVF9IXw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4g KyNpbmNsdWRlIDxzdGRpby5oPg0KPiA+DQo+ID4gKyNpbmNsdWRlIDxzdGRsaWIuaD4NCj4gPg0K PiA+ICsjaW5jbHVkZSA8c3RyaW5nLmg+DQo+ID4NCj4gPiArI2luY2x1ZGUgPHN0ZGFyZy5oPg0K PiA+DQo+ID4gKyNpbmNsdWRlIDxzdGRkZWYuaD4NCj4gPg0KPiA+ICsjaW5jbHVkZSA8c2V0am1w Lmg+DQo+ID4NCj4gPiArI2luY2x1ZGUgPGNtb2NrYS5oPg0KPiA+DQo+ID4gKyNpbmNsdWRlIDx0 aW1lLmg+DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArI2luY2x1ZGUgPFVlZmkuaD4NCj4gPg0KPiA+ ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTGliLmg+DQo+ID4NCj4gPiArI2luY2x1ZGUgPExpYnJh cnkvQmFzZU1lbW9yeUxpYi5oPg0KPiA+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGli Lmg+DQo+ID4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvVW5pdFRlc3RMaWIuaD4NCj4gPg0KPiA+ ICsjaW5jbHVkZSA8TGlicmFyeS9NdHJyTGliLmg+DQo+ID4NCj4gPiArI2luY2x1ZGUgPExpYnJh cnkvVW5pdFRlc3RIb3N0QmFzZUxpYi5oPg0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyNpbmNsdWRl IDxSZWdpc3Rlci9BcmNoaXRlY3R1cmFsTXNyLmg+DQo+ID4NCj4gPiArI2luY2x1ZGUgPFJlZ2lz dGVyL0NwdWlkLmg+DQo+ID4NCj4gPiArI2luY2x1ZGUgPFJlZ2lzdGVyL01zci5oPg0KPiA+DQo+ ID4gKw0KPiA+DQo+ID4gKyNkZWZpbmUgVU5JVF9URVNUX0FQUF9OQU1FICAgICAgICAiTXRyckxp YiBVbml0DQo+IFRlc3RzIg0KPiA+DQo+ID4gKyNkZWZpbmUgVU5JVF9URVNUX0FQUF9WRVJTSU9O ICAgICAiMS4wIg0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyNkZWZpbmUgU0NSQVRDSF9CVUZGRVJf U0laRSAgICAgICBTSVpFXzE2S0INCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICt0eXBlZGVmIHN0cnVj dCB7DQo+ID4NCj4gPiArICBVSU5UOCAgICAgICAgICAgICAgICAgIFBoeXNpY2FsQWRkcmVzc0Jp dHM7DQo+ID4NCj4gPiArICBCT09MRUFOICAgICAgICAgICAgICAgIE10cnJTdXBwb3J0ZWQ7DQo+ ID4NCj4gPiArICBCT09MRUFOICAgICAgICAgICAgICAgIEZpeGVkTXRyclN1cHBvcnRlZDsNCj4g Pg0KPiA+ICsgIE1UUlJfTUVNT1JZX0NBQ0hFX1RZUEUgRGVmYXVsdENhY2hlVHlwZTsNCj4gPg0K PiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgVmFyaWFibGVNdHJyQ291bnQ7DQo+ID4NCj4g PiArfSBNVFJSX0xJQl9TWVNURU1fUEFSQU1FVEVSOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gK2V4 dGVybiBVSU5UMzINCj4gbUZpeGVkTXRycnNJbmRleFtdOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4g Ky8qKg0KPiA+DQo+ID4gKyAgSW5pdGlhbGl6ZSB0aGUgTVRSUiByZWdpc3RlcnMuDQo+ID4NCj4g PiArDQo+ID4NCj4gPiArICBAcGFyYW0gU3lzdGVtUGFyYW1ldGVyIFN5c3RlbSBwYXJhbWV0ZXIg dGhhdA0KPiBjb250cm9scyB0aGUgTVRSUiByZWdpc3RlcnMgaW5pdGlhbGl6YXRpb24uDQo+ID4N Cj4gPiArKiovDQo+ID4NCj4gPiArVU5JVF9URVNUX1NUQVRVUw0KPiA+DQo+ID4gK0VGSUFQSQ0K PiA+DQo+ID4gK0luaXRpYWxpemVNdHJyUmVncyAoDQo+ID4NCj4gPiArICBJTiBNVFJSX0xJQl9T WVNURU1fUEFSQU1FVEVSICAqU3lzdGVtUGFyYW1ldGVyDQo+ID4NCj4gPiArICApOw0KPiA+DQo+ ID4gKw0KPiA+DQo+ID4gKy8qKg0KPiA+DQo+ID4gKyAgSW5pdGlhbGl6ZSB0aGUgTVRSUiByZWdp c3RlcnMuDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBAcGFyYW0gQ29udGV4dCBTeXN0ZW0gcGFy YW1ldGVyIHRoYXQgY29udHJvbHMgdGhlDQo+IE1UUlIgcmVnaXN0ZXJzIGluaXRpYWxpemF0aW9u Lg0KPiA+DQo+ID4gKyoqLw0KPiA+DQo+ID4gK1VOSVRfVEVTVF9TVEFUVVMNCj4gPg0KPiA+ICtF RklBUEkNCj4gPg0KPiA+ICtJbml0aWFsaXplU3lzdGVtICgNCj4gPg0KPiA+ICsgIElOIFVOSVRf VEVTVF9DT05URVhUICAgICAgICBDb250ZXh0DQo+ID4NCj4gPiArICApOw0KPiA+DQo+ID4gKw0K PiA+DQo+ID4gKy8qKg0KPiA+DQo+ID4gKyAgUmV0dXJuIGEgcmFuZG9tIG1lbW9yeSBjYWNoZSB0 eXBlLg0KPiA+DQo+ID4gKyoqLw0KPiA+DQo+ID4gK01UUlJfTUVNT1JZX0NBQ0hFX1RZUEUNCj4g Pg0KPiA+ICtHZW5lcmF0ZVJhbmRvbUNhY2hlVHlwZSAoDQo+ID4NCj4gPiArICBWT0lEDQo+ID4N Cj4gPiArICApOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKy8qKg0KPiA+DQo+ID4gKyAgR2VuZXJh dGUgcmFuZG9tIE1UUlJzLg0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHBhcmFtIFBoeXNpY2Fs QWRkcmVzc0JpdHMgIFBoeXNpY2FsIGFkZHJlc3MgYml0cy4NCj4gPg0KPiA+ICsgIEBwYXJhbSBS YXdNZW1vcnlSYW5nZXMgICAgICBSZXR1cm4gdGhlIHJhbmRvbWx5DQo+IGdlbmVyYXRlZCBNVFJS cy4NCj4gPg0KPiA+ICsgIEBwYXJhbSBVY0NvdW50ICAgICAgICAgICAgICBDb3VudCBvZiBVbmNh Y2hlYWJsZQ0KPiBNVFJScy4NCj4gPg0KPiA+ICsgIEBwYXJhbSBXdENvdW50ICAgICAgICAgICAg ICBDb3VudCBvZiBXcml0ZSBUaHJvdWdoDQo+IE1UUlJzLg0KPiA+DQo+ID4gKyAgQHBhcmFtIFdi Q291bnQgICAgICAgICAgICAgIENvdW50IG9mIFdyaXRlIEJhY2sNCj4gTVRSUnMuDQo+ID4NCj4g PiArICBAcGFyYW0gV3BDb3VudCAgICAgICAgICAgICAgQ291bnQgb2YgV3JpdGUNCj4gUHJvdGVj dGVkIE1UUlJzLg0KPiA+DQo+ID4gKyAgQHBhcmFtIFdjQ291bnQgICAgICAgICAgICAgIENvdW50 IG9mIFdyaXRlDQo+IENvbWJpbmluZyBNVFJScy4NCj4gPg0KPiA+ICsqKi8NCj4gPg0KPiA+ICtW T0lEDQo+ID4NCj4gPiArR2VuZXJhdGVWYWxpZEFuZENvbmZpZ3VyYWJsZU10cnJQYWlycyAoDQo+ ID4NCj4gPiArICBJTiAgICAgVUlOVDMyDQo+IFBoeXNpY2FsQWRkcmVzc0JpdHMsDQo+ID4NCj4g PiArICBJTiBPVVQgTVRSUl9NRU1PUllfUkFOR0UgICAgICAgICAqUmF3TWVtb3J5UmFuZ2VzLA0K PiA+DQo+ID4gKyAgSU4gICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgVWNDb3VudCwNCj4g Pg0KPiA+ICsgIElOICAgICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIFd0Q291bnQsDQo+ID4N Cj4gPiArICBJTiAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBXYkNvdW50LA0KPiA+DQo+ ID4gKyAgSU4gICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgV3BDb3VudCwNCj4gPg0KPiA+ ICsgIElOICAgICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIFdjQ291bnQNCj4gPg0KPiA+ICsg ICk7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArLyoqDQo+ID4NCj4gPiArICBDb252ZXJ0IHRoZSBN VFJSIEJBU0UvTUFTSyBhcnJheSB0byBtZW1vcnkgcmFuZ2VzLg0KPiA+DQo+ID4gKw0KPiA+DQo+ ID4gKyAgQHBhcmFtIERlZmF1bHRUeXBlICAgICAgICAgIERlZmF1bHQgbWVtb3J5IHR5cGUuDQo+ ID4NCj4gPiArICBAcGFyYW0gUGh5c2ljYWxBZGRyZXNzQml0cyAgUGh5c2ljYWwgYWRkcmVzcyBi aXRzLg0KPiA+DQo+ID4gKyAgQHBhcmFtIFJhd01lbW9yeVJhbmdlcyAgICAgIFJhdyBtZW1vcnkg cmFuZ2VzLg0KPiA+DQo+ID4gKyAgQHBhcmFtIFJhd01lbW9yeVJhbmdlQ291bnQgIENvdW50IG9m IHJhdyBtZW1vcnkNCj4gcmFuZ2VzLg0KPiA+DQo+ID4gKyAgQHBhcmFtIE1lbW9yeVJhbmdlcyAg ICAgICAgIE1lbW9yeSByYW5nZXMuDQo+ID4NCj4gPiArICBAcGFyYW0gTWVtb3J5UmFuZ2VDb3Vu dCAgICAgQ291bnQgb2YgbWVtb3J5IHJhbmdlcy4NCj4gPg0KPiA+ICsqKi8NCj4gPg0KPiA+ICtW T0lEDQo+ID4NCj4gPiArR2V0RWZmZWN0aXZlTWVtb3J5UmFuZ2VzICgNCj4gPg0KPiA+ICsgIElO IE1UUlJfTUVNT1JZX0NBQ0hFX1RZUEUgRGVmYXVsdFR5cGUsDQo+ID4NCj4gPiArICBJTiBVSU5U MzIgICAgICAgICAgICAgICAgIFBoeXNpY2FsQWRkcmVzc0JpdHMsDQo+ID4NCj4gPiArICBJTiBN VFJSX01FTU9SWV9SQU5HRSAgICAgICpSYXdNZW1vcnlSYW5nZXMsDQo+ID4NCj4gPiArICBJTiBV SU5UMzIgICAgICAgICAgICAgICAgIFJhd01lbW9yeVJhbmdlQ291bnQsDQo+ID4NCj4gPiArICBP VVQgTVRSUl9NRU1PUllfUkFOR0UgICAgICpNZW1vcnlSYW5nZXMsDQo+ID4NCj4gPiArICBPVVQg VUlOVE4gICAgICAgICAgICAgICAgICpNZW1vcnlSYW5nZUNvdW50DQo+ID4NCj4gPiArICApOw0K PiA+DQo+ID4gKw0KPiA+DQo+ID4gKy8qKg0KPiA+DQo+ID4gKyAgR2VuZXJhdGUgcmFuZG9tIE1U UlIgQkFTRS9NQVNLIGZvciBhIHNwZWNpZmllZA0KPiB0eXBlLg0KPiA+DQo+ID4gKw0KPiA+DQo+ ID4gKyAgQHBhcmFtIFBoeXNpY2FsQWRkcmVzc0JpdHMgUGh5c2ljYWwgYWRkcmVzcyBiaXRzLg0K PiA+DQo+ID4gKyAgQHBhcmFtIENhY2hlVHlwZSAgICAgICAgICAgQ2FjaGUgdHlwZS4NCj4gPg0K PiA+ICsgIEBwYXJhbSBNdHJyUGFpciAgICAgICAgICAgIFJldHVybiB0aGUgcmFuZG9tIE1UUlIu DQo+ID4NCj4gPiArICBAcGFyYW0gTXRyck1lbW9yeVJhbmdlICAgICBSZXR1cm4gdGhlIHJhbmRv bSBtZW1vcnkNCj4gcmFuZ2UuDQo+ID4NCj4gPiArKiovDQo+ID4NCj4gPiArVk9JRA0KPiA+DQo+ ID4gK0dlbmVyYXRlUmFuZG9tTXRyclBhaXIgKA0KPiA+DQo+ID4gKyAgSU4gIFVJTlQzMiAgICAg ICAgICAgICAgICAgUGh5c2ljYWxBZGRyZXNzQml0cywNCj4gPg0KPiA+ICsgIElOICBNVFJSX01F TU9SWV9DQUNIRV9UWVBFIENhY2hlVHlwZSwNCj4gPg0KPiA+ICsgIE9VVCBNVFJSX1ZBUklBQkxF X1NFVFRJTkcgICpNdHJyUGFpciwNCj4gT1BUSU9OQUwNCj4gPg0KPiA+ICsgIE9VVCBNVFJSX01F TU9SWV9SQU5HRSAgICAgICpNdHJyTWVtb3J5UmFuZ2UNCj4gT1BUSU9OQUwNCj4gPg0KPiA+ICsg ICk7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArLyoqDQo+ID4NCj4gPiArICBDb2xsZWN0IHRoZSB0 ZXN0IHJlc3VsdC4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEBwYXJhbSBEZWZhdWx0VHlwZSAg ICAgICAgICBEZWZhdWx0IG1lbW9yeSB0eXBlLg0KPiA+DQo+ID4gKyAgQHBhcmFtIFBoeXNpY2Fs QWRkcmVzc0JpdHMgIFBoeXNpY2FsIGFkZHJlc3MgYml0cy4NCj4gPg0KPiA+ICsgIEBwYXJhbSBW YXJpYWJsZU10cnJDb3VudCAgICBDb3VudCBvZiB2YXJpYWJsZQ0KPiBNVFJScy4NCj4gPg0KPiA+ ICsgIEBwYXJhbSBNdHJycyAgICAgICAgICAgICAgICBNVFJSIHNldHRpbmdzIHRvDQo+IGNvbGxl Y3QgZnJvbS4NCj4gPg0KPiA+ICsgIEBwYXJhbSBSYW5nZXMgICAgICAgICAgICAgICBSZXR1cm4g dGhlIG1lbW9yeQ0KPiByYW5nZXMuDQo+ID4NCj4gPiArICBAcGFyYW0gUmFuZ2VDb3VudCAgICAg ICAgICAgUmV0dXJuIHRoZSBjb3VudCBvZg0KPiBtZW1vcnkgcmFuZ2VzLg0KPiA+DQo+ID4gKyAg QHBhcmFtIE10cnJDb3VudCAgICAgICAgICAgIFJldHVybiB0aGUgY291bnQgb2YNCj4gdmFyaWFi bGUgTVRSUnMgYmVpbmcgdXNlZC4NCj4gPg0KPiA+ICsqKi8NCj4gPg0KPiA+ICtWT0lEDQo+ID4N Cj4gPiArQ29sbGVjdFRlc3RSZXN1bHQgKA0KPiA+DQo+ID4gKyAgSU4gICAgIE1UUlJfTUVNT1JZ X0NBQ0hFX1RZUEUgRGVmYXVsdFR5cGUsDQo+ID4NCj4gPiArICBJTiAgICAgVUlOVDMyICAgICAg ICAgICAgICAgICBQaHlzaWNhbEFkZHJlc3NCaXRzLA0KPiA+DQo+ID4gKyAgSU4gICAgIFVJTlQz MiAgICAgICAgICAgICAgICAgVmFyaWFibGVNdHJyQ291bnQsDQo+ID4NCj4gPiArICBJTiAgICAg TVRSUl9TRVRUSU5HUyAgICAgICAgICAqTXRycnMsDQo+ID4NCj4gPiArICBPVVQgICAgTVRSUl9N RU1PUllfUkFOR0UgICAgICAqUmFuZ2VzLA0KPiA+DQo+ID4gKyAgSU4gT1VUIFVJTlROICAgICAg ICAgICAgICAgICAgKlJhbmdlQ291bnQsDQo+ID4NCj4gPiArICBPVVQgICAgVUlOVDMyICAgICAg ICAgICAgICAgICAqTXRyckNvdW50DQo+ID4NCj4gPiArICApOw0KPiA+DQo+ID4gKw0KPiA+DQo+ ID4gKy8qKg0KPiA+DQo+ID4gKyAgUmV0dXJuIGEgNjRiaXQgcmFuZG9tIG51bWJlci4NCj4gPg0K PiA+ICsNCj4gPg0KPiA+ICsgIEBwYXJhbSBTdGFydCAgU3RhcnQgb2YgdGhlIHJhbmRvbSBudW1i ZXIgcmFuZ2UuDQo+ID4NCj4gPiArICBAcGFyYW0gTGltaXQgIExpbWl0IG9mIHRoZSByYW5kb20g bnVtYmVyIHJhbmdlLg0KPiA+DQo+ID4gKyAgQHJldHVybiA2NGJpdCByYW5kb20gbnVtYmVyDQo+ ID4NCj4gPiArKiovDQo+ID4NCj4gPiArVUlOVDY0DQo+ID4NCj4gPiArUmFuZG9tNjQgKA0KPiA+ DQo+ID4gKyAgVUlOVDY0ICBTdGFydCwNCj4gPg0KPiA+ICsgIFVJTlQ2NCAgTGltaXQNCj4gPg0K PiA+ICsgICk7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArLyoqDQo+ID4NCj4gPiArICBSZXR1cm4g YSAzMmJpdCByYW5kb20gbnVtYmVyLg0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHBhcmFtIFN0 YXJ0ICBTdGFydCBvZiB0aGUgcmFuZG9tIG51bWJlciByYW5nZS4NCj4gPg0KPiA+ICsgIEBwYXJh bSBMaW1pdCAgTGltaXQgb2YgdGhlIHJhbmRvbSBudW1iZXIgcmFuZ2UuDQo+ID4NCj4gPiArICBA cmV0dXJuIDMyYml0IHJhbmRvbSBudW1iZXINCj4gPg0KPiA+ICsqKi8NCj4gPg0KPiA+ICtVSU5U MzINCj4gPg0KPiA+ICtSYW5kb20zMiAoDQo+ID4NCj4gPiArICBVSU5UMzIgIFN0YXJ0LA0KPiA+ DQo+ID4gKyAgVUlOVDMyICBMaW1pdA0KPiA+DQo+ID4gKyAgKTsNCj4gPg0KPiA+ICsjZW5kaWYN Cj4gPg0KPiA+IGRpZmYgLS1naXQNCj4gYS9VZWZpQ3B1UGtnL0xpYnJhcnkvTXRyckxpYi9Vbml0 VGVzdC9NdHJyTGliVW5pdFRlc3RIb3MNCj4gdC5pbmYNCj4gYi9VZWZpQ3B1UGtnL0xpYnJhcnkv TXRyckxpYi9Vbml0VGVzdC9NdHJyTGliVW5pdFRlc3RIb3MNCj4gdC5pbmYNCj4gPiBuZXcgZmls ZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAuLjQ0NzIzOGRjODENCj4gPiAtLS0g L2Rldi9udWxsDQo+ID4gKysrDQo+IGIvVWVmaUNwdVBrZy9MaWJyYXJ5L010cnJMaWIvVW5pdFRl c3QvTXRyckxpYlVuaXRUZXN0SG9zDQo+IHQuaW5mDQo+ID4gQEAgLTAsMCArMSwzOSBAQA0KPiA+ ICsjIyBAZmlsZQ0KPiA+DQo+ID4gKyMgVW5pdCB0ZXN0cyBvZiB0aGUgTXRyckxpYiBpbnN0YW5j ZSBvZiB0aGUgTXRyckxpYg0KPiBjbGFzcw0KPiA+DQo+ID4gKyMNCj4gPg0KPiA+ICsjIENvcHly aWdodCAoYykgMjAyMCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMNCj4gcmVzZXJ2ZWQu PEJSPg0KPiA+DQo+ID4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1Q YXRlbnQNCj4gPg0KPiA+ICsjIw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gK1tEZWZpbmVzXQ0KPiA+ DQo+ID4gKyAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgID0gMHgwMDAxMDAwNg0KPiA+ DQo+ID4gKyAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAgICAgID0NCj4gTXRyckxpYlVuaXRU ZXN0SG9zdA0KPiA+DQo+ID4gKyAgRklMRV9HVUlEICAgICAgICAgICAgICAgICAgICAgID0gQTE1 NDJEODQtQjY0RC0NCj4gNDg0Ny04ODVFLTA1MDkwODQzNzZBQg0KPiA+DQo+ID4gKyAgTU9EVUxF X1RZUEUgICAgICAgICAgICAgICAgICAgID0gSE9TVF9BUFBMSUNBVElPTg0KPiA+DQo+ID4gKyAg VkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAgICAgID0gMS4wDQo+ID4NCj4gPiArDQo+ID4NCj4g PiArIw0KPiA+DQo+ID4gKyMgVGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpcyBmb3IgcmVmZXJl bmNlIG9ubHkgYW5kDQo+IG5vdCByZXF1aXJlZCBieSB0aGUgYnVpbGQgdG9vbHMuDQo+ID4NCj4g PiArIw0KPiA+DQo+ID4gKyMgIFZBTElEX0FSQ0hJVEVDVFVSRVMgICAgICAgICAgID0gSUEzMiBY NjQNCj4gPg0KPiA+ICsjDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArW1NvdXJjZXNdDQo+ID4NCj4g PiArICBNdHJyTGliVW5pdFRlc3QuYw0KPiA+DQo+ID4gKyAgTXRyckxpYlVuaXRUZXN0LmgNCj4g Pg0KPiA+ICsgIFN1cHBvcnQuYw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gK1tQYWNrYWdlc10NCj4g Pg0KPiA+ICsgIE1kZVBrZy9NZGVQa2cuZGVjDQo+ID4NCj4gPiArICBVZWZpQ3B1UGtnL1VlZmlD cHVQa2cuZGVjDQo+ID4NCj4gPiArICBVbml0VGVzdEZyYW1ld29ya1BrZy9Vbml0VGVzdEZyYW1l d29ya1BrZy5kZWMNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICtbTGlicmFyeUNsYXNzZXNdDQo+ID4N Cj4gPiArICBCYXNlTGliDQo+ID4NCj4gPiArICBCYXNlTWVtb3J5TGliDQo+ID4NCj4gPiArICBE ZWJ1Z0xpYg0KPiA+DQo+ID4gKyAgTXRyckxpYg0KPiA+DQo+ID4gKyAgVW5pdFRlc3RMaWINCj4g Pg0KPiA+ICsNCj4gPg0KPiA+ICtbUGNkXQ0KPiA+DQo+ID4gKw0KPiBnVWVmaUNwdVBrZ1Rva2Vu U3BhY2VHdWlkLlBjZENwdU51bWJlck9mUmVzZXJ2ZWRWYXJpYWJsZQ0KPiBNdHJycyAgICMjIFNP TUVUSU1FU19DT05TVU1FUw0KPiA+DQo+ID4gZGlmZiAtLWdpdA0KPiBhL1VlZmlDcHVQa2cvTGli cmFyeS9NdHJyTGliL1VuaXRUZXN0L1N1cHBvcnQuYw0KPiBiL1VlZmlDcHVQa2cvTGlicmFyeS9N dHJyTGliL1VuaXRUZXN0L1N1cHBvcnQuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4g aW5kZXggMDAwMDAwMDAwMC4uYTdlZWQ0NTk0MA0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysg Yi9VZWZpQ3B1UGtnL0xpYnJhcnkvTXRyckxpYi9Vbml0VGVzdC9TdXBwb3J0LmMNCj4gPiBAQCAt MCwwICsxLDkyMyBAQA0KPiA+ICsvKiogQGZpbGUNCj4gPg0KPiA+ICsgIFVuaXQgdGVzdHMgb2Yg dGhlIE10cnJMaWIgaW5zdGFuY2Ugb2YgdGhlIE10cnJMaWINCj4gY2xhc3MNCj4gPg0KPiA+ICsN Cj4gPg0KPiA+ICsgIENvcHlyaWdodCAoYykgMjAxOCAtIDIwMjAsIEludGVsIENvcnBvcmF0aW9u LiBBbGwNCj4gcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPg0KPiA+ICsgIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArKiov DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArI2luY2x1ZGUgIk10cnJMaWJVbml0VGVzdC5oIg0KPiA+ DQo+ID4gKw0KPiA+DQo+ID4gK01UUlJfTUVNT1JZX0NBQ0hFX1RZUEUgbU1lbW9yeUNhY2hlVHlw ZXNbXSA9IHsNCj4gPg0KPiA+ICsgIENhY2hlVW5jYWNoZWFibGUsIENhY2hlV3JpdGVDb21iaW5p bmcsDQo+IENhY2hlV3JpdGVUaHJvdWdoLCBDYWNoZVdyaXRlUHJvdGVjdGVkLCBDYWNoZVdyaXRl QmFjaw0KPiA+DQo+ID4gKyAgfTsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICtVSU5UNjQNCj4gbUZp eGVkTXRycnNWYWx1ZVtNVFJSX05VTUJFUl9PRl9GSVhFRF9NVFJSXTsNCj4gPg0KPiA+ICtNU1Jf SUEzMl9NVFJSX1BIWVNCQVNFX1JFR0lTVEVSDQo+IG1WYXJpYWJsZU10cnJzUGh5c0Jhc2VbTVRS Ul9OVU1CRVJfT0ZfVkFSSUFCTEVfTVRSUl07DQo+ID4NCj4gPiArTVNSX0lBMzJfTVRSUl9QSFlT TUFTS19SRUdJU1RFUg0KPiBtVmFyaWFibGVNdHJyc1BoeXNNYXNrW01UUlJfTlVNQkVSX09GX1ZB UklBQkxFX01UUlJdOw0KPiA+DQo+ID4gK01TUl9JQTMyX01UUlJfREVGX1RZUEVfUkVHSVNURVIg IG1EZWZUeXBlTXNyOw0KPiA+DQo+ID4gK01TUl9JQTMyX01UUlJDQVBfUkVHSVNURVIgICAgICAg IG1NdHJyQ2FwTXNyOw0KPiA+DQo+ID4gK0NQVUlEX1ZFUlNJT05fSU5GT19FRFgNCj4gbUNwdWlk VmVyc2lvbkluZm9FZHg7DQo+ID4NCj4gPiArQ1BVSURfVklSX1BIWV9BRERSRVNTX1NJWkVfRUFY DQo+IG1DcHVpZFZpclBoeUFkZHJlc3NTaXplRWF4Ow0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKy8q Kg0KPiA+DQo+ID4gKyAgUmV0cmlldmVzIENQVUlEIGluZm9ybWF0aW9uLg0KPiA+DQo+ID4gKw0K PiA+DQo+ID4gKyAgRXhlY3V0ZXMgdGhlIENQVUlEIGluc3RydWN0aW9uIHdpdGggRUFYIHNldCB0 byB0aGUNCj4gdmFsdWUgc3BlY2lmaWVkIGJ5IEluZGV4Lg0KPiA+DQo+ID4gKyAgVGhpcyBmdW5j dGlvbiBhbHdheXMgcmV0dXJucyBJbmRleC4NCj4gPg0KPiA+ICsgIElmIEVheCBpcyBub3QgTlVM TCwgdGhlbiB0aGUgdmFsdWUgb2YgRUFYIGFmdGVyDQo+IENQVUlEIGlzIHJldHVybmVkIGluIEVh eC4NCj4gPg0KPiA+ICsgIElmIEVieCBpcyBub3QgTlVMTCwgdGhlbiB0aGUgdmFsdWUgb2YgRUJY IGFmdGVyDQo+IENQVUlEIGlzIHJldHVybmVkIGluIEVieC4NCj4gPg0KPiA+ICsgIElmIEVjeCBp cyBub3QgTlVMTCwgdGhlbiB0aGUgdmFsdWUgb2YgRUNYIGFmdGVyDQo+IENQVUlEIGlzIHJldHVy bmVkIGluIEVjeC4NCj4gPg0KPiA+ICsgIElmIEVkeCBpcyBub3QgTlVMTCwgdGhlbiB0aGUgdmFs dWUgb2YgRURYIGFmdGVyDQo+IENQVUlEIGlzIHJldHVybmVkIGluIEVkeC4NCj4gPg0KPiA+ICsg IFRoaXMgZnVuY3Rpb24gaXMgb25seSBhdmFpbGFibGUgb24gSUEtMzIgYW5kIHg2NC4NCj4gPg0K PiA+ICsNCj4gPg0KPiA+ICsgIEBwYXJhbSAgSW5kZXggVGhlIDMyLWJpdCB2YWx1ZSB0byBsb2Fk IGludG8gRUFYDQo+IHByaW9yIHRvIGludm9raW5nIHRoZSBDUFVJRA0KPiA+DQo+ID4gKyAgICAg ICAgICAgICAgICBpbnN0cnVjdGlvbi4NCj4gPg0KPiA+ICsgIEBwYXJhbSAgRWF4ICAgVGhlIHBv aW50ZXIgdG8gdGhlIDMyLWJpdCBFQVggdmFsdWUNCj4gcmV0dXJuZWQgYnkgdGhlIENQVUlEDQo+ ID4NCj4gPiArICAgICAgICAgICAgICAgIGluc3RydWN0aW9uLiBUaGlzIGlzIGFuIG9wdGlvbmFs DQo+IHBhcmFtZXRlciB0aGF0IG1heSBiZSBOVUxMLg0KPiA+DQo+ID4gKyAgQHBhcmFtICBFYngg ICBUaGUgcG9pbnRlciB0byB0aGUgMzItYml0IEVCWCB2YWx1ZQ0KPiByZXR1cm5lZCBieSB0aGUg Q1BVSUQNCj4gPg0KPiA+ICsgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMgYW4g b3B0aW9uYWwNCj4gcGFyYW1ldGVyIHRoYXQgbWF5IGJlIE5VTEwuDQo+ID4NCj4gPiArICBAcGFy YW0gIEVjeCAgIFRoZSBwb2ludGVyIHRvIHRoZSAzMi1iaXQgRUNYIHZhbHVlDQo+IHJldHVybmVk IGJ5IHRoZSBDUFVJRA0KPiA+DQo+ID4gKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbi4gVGhp cyBpcyBhbiBvcHRpb25hbA0KPiBwYXJhbWV0ZXIgdGhhdCBtYXkgYmUgTlVMTC4NCj4gPg0KPiA+ ICsgIEBwYXJhbSAgRWR4ICAgVGhlIHBvaW50ZXIgdG8gdGhlIDMyLWJpdCBFRFggdmFsdWUNCj4g cmV0dXJuZWQgYnkgdGhlIENQVUlEDQo+ID4NCj4gPiArICAgICAgICAgICAgICAgIGluc3RydWN0 aW9uLiBUaGlzIGlzIGFuIG9wdGlvbmFsDQo+IHBhcmFtZXRlciB0aGF0IG1heSBiZSBOVUxMLg0K PiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHJldHVybiBJbmRleC4NCj4gPg0KPiA+ICsNCj4gPg0K PiA+ICsqKi8NCj4gPg0KPiA+ICtVSU5UMzINCj4gPg0KPiA+ICtFRklBUEkNCj4gPg0KPiA+ICtV bml0VGVzdE10cnJMaWJBc21DcHVpZCAoDQo+ID4NCj4gPiArICBJTiAgICAgIFVJTlQzMiAgICAg ICAgICAgICAgICAgICAgSW5kZXgsDQo+ID4NCj4gPiArICBPVVQgICAgIFVJTlQzMiAgICAgICAg ICAgICAgICAgICAgKkVheCwgIE9QVElPTkFMDQo+ID4NCj4gPiArICBPVVQgICAgIFVJTlQzMiAg ICAgICAgICAgICAgICAgICAgKkVieCwgIE9QVElPTkFMDQo+ID4NCj4gPiArICBPVVQgICAgIFVJ TlQzMiAgICAgICAgICAgICAgICAgICAgKkVjeCwgIE9QVElPTkFMDQo+ID4NCj4gPiArICBPVVQg ICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgKkVkeCAgIE9QVElPTkFMDQo+ID4NCj4gPiAr ICApDQo+ID4NCj4gPiArew0KPiA+DQo+ID4gKyAgc3dpdGNoIChJbmRleCkgew0KPiA+DQo+ID4g KyAgY2FzZSBDUFVJRF9WRVJTSU9OX0lORk86DQo+ID4NCj4gPiArICAgIGlmIChFZHggIT0gTlVM TCkgew0KPiA+DQo+ID4gKyAgICAgICpFZHggPSBtQ3B1aWRWZXJzaW9uSW5mb0VkeC5VaW50MzI7 DQo+ID4NCj4gPiArICAgIH0NCj4gPg0KPiA+ICsgICAgcmV0dXJuIEluZGV4Ow0KPiA+DQo+ID4g KyAgICBicmVhazsNCj4gPg0KPiA+ICsgIGNhc2UgQ1BVSURfRVhURU5ERURfRlVOQ1RJT046DQo+ ID4NCj4gPiArICAgIGlmIChFYXggIT0gTlVMTCkgew0KPiA+DQo+ID4gKyAgICAgICpFYXggPSBD UFVJRF9WSVJfUEhZX0FERFJFU1NfU0laRTsNCj4gPg0KPiA+ICsgICAgfQ0KPiA+DQo+ID4gKyAg ICByZXR1cm4gSW5kZXg7DQo+ID4NCj4gPiArICAgIGJyZWFrOw0KPiA+DQo+ID4gKyAgY2FzZSBD UFVJRF9WSVJfUEhZX0FERFJFU1NfU0laRToNCj4gPg0KPiA+ICsgICAgaWYgKEVheCAhPSBOVUxM KSB7DQo+ID4NCj4gPiArICAgICAgKkVheCA9IG1DcHVpZFZpclBoeUFkZHJlc3NTaXplRWF4LlVp bnQzMjsNCj4gPg0KPiA+ICsgICAgfQ0KPiA+DQo+ID4gKyAgICByZXR1cm4gSW5kZXg7DQo+ID4N Cj4gPiArICAgIGJyZWFrOw0KPiA+DQo+ID4gKyAgfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAg Ly8NCj4gPg0KPiA+ICsgIC8vIFNob3VsZCBuZXZlciBmYWxsIHRocm91Z2ggdG8gaGVyZQ0KPiA+ DQo+ID4gKyAgLy8NCj4gPg0KPiA+ICsgIEFTU0VSVChGQUxTRSk7DQo+ID4NCj4gPiArICByZXR1 cm4gSW5kZXg7DQo+ID4NCj4gPiArfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKy8qKg0KPiA+DQo+ ID4gKyAgUmV0dXJucyBhIDY0LWJpdCBNYWNoaW5lIFNwZWNpZmljIFJlZ2lzdGVyKE1TUikuDQo+ ID4NCj4gPiArDQo+ID4NCj4gPiArICBSZWFkcyBhbmQgcmV0dXJucyB0aGUgNjQtYml0IE1TUiBz cGVjaWZpZWQgYnkNCj4gSW5kZXguIE5vIHBhcmFtZXRlciBjaGVja2luZyBpcw0KPiA+DQo+ID4g KyAgcGVyZm9ybWVkIG9uIEluZGV4LCBhbmQgc29tZSBJbmRleCB2YWx1ZXMgbWF5IGNhdXNlDQo+ IENQVSBleGNlcHRpb25zLiBUaGUNCj4gPg0KPiA+ICsgIGNhbGxlciBtdXN0IGVpdGhlciBndWFy YW50ZWUgdGhhdCBJbmRleCBpcyB2YWxpZCwNCj4gb3IgdGhlIGNhbGxlciBtdXN0IHNldCB1cA0K PiA+DQo+ID4gKyAgZXhjZXB0aW9uIGhhbmRsZXJzIHRvIGNhdGNoIHRoZSBleGNlcHRpb25zLiBU aGlzDQo+IGZ1bmN0aW9uIGlzIG9ubHkgYXZhaWxhYmxlDQo+ID4NCj4gPiArICBvbiBJQS0zMiBh bmQgeDY0Lg0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHBhcmFtICBNc3JJbmRleCBUaGUgMzIt Yml0IE1TUiBpbmRleCB0byByZWFkLg0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHJldHVybiBU aGUgdmFsdWUgb2YgdGhlIE1TUiBpZGVudGlmaWVkIGJ5DQo+IE1zckluZGV4Lg0KPiA+DQo+ID4g Kw0KPiA+DQo+ID4gKyoqLw0KPiA+DQo+ID4gK1VJTlQ2NA0KPiA+DQo+ID4gK0VGSUFQSQ0KPiA+ DQo+ID4gK1VuaXRUZXN0TXRyckxpYkFzbVJlYWRNc3I2NCgNCj4gPg0KPiA+ICsgIElOIFVJTlQz MiAgTXNySW5kZXgNCj4gPg0KPiA+ICsgICkNCj4gPg0KPiA+ICt7DQo+ID4NCj4gPiArICBVSU5U MzIgSW5kZXg7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXgg PCBBUlJBWV9TSVpFDQo+IChtRml4ZWRNdHJyc1ZhbHVlKTsgSW5kZXgrKykgew0KPiA+DQo+ID4g KyAgICBpZiAoTXNySW5kZXggPT0gbUZpeGVkTXRycnNJbmRleFtJbmRleF0pIHsNCj4gPg0KPiA+ ICsgICAgICByZXR1cm4gbUZpeGVkTXRycnNWYWx1ZVtJbmRleF07DQo+ID4NCj4gPiArICAgIH0N Cj4gPg0KPiA+ICsgIH0NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIGlmICgoTXNySW5kZXggPj0g TVNSX0lBMzJfTVRSUl9QSFlTQkFTRTApICYmDQo+ID4NCj4gPiArICAgICAgKE1zckluZGV4IDw9 IE1TUl9JQTMyX01UUlJfUEhZU01BU0swICsNCj4gKE1UUlJfTlVNQkVSX09GX1ZBUklBQkxFX01U UlIgPDwgMSkpKSB7DQo+ID4NCj4gPiArICAgIGlmIChNc3JJbmRleCAlIDIgPT0gMCkgew0KPiA+ DQo+ID4gKyAgICAgIEluZGV4ID0gKE1zckluZGV4IC0gTVNSX0lBMzJfTVRSUl9QSFlTQkFTRTAp ID4+DQo+IDE7DQo+ID4NCj4gPiArICAgICAgcmV0dXJuIG1WYXJpYWJsZU10cnJzUGh5c0Jhc2Vb SW5kZXhdLlVpbnQ2NDsNCj4gPg0KPiA+ICsgICAgfSBlbHNlIHsNCj4gPg0KPiA+ICsgICAgICBJ bmRleCA9IChNc3JJbmRleCAtIE1TUl9JQTMyX01UUlJfUEhZU01BU0swKSA+Pg0KPiAxOw0KPiA+ DQo+ID4gKyAgICAgIHJldHVybiBtVmFyaWFibGVNdHJyc1BoeXNNYXNrW0luZGV4XS5VaW50NjQ7 DQo+ID4NCj4gPiArICAgIH0NCj4gPg0KPiA+ICsgIH0NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsg IGlmIChNc3JJbmRleCA9PSBNU1JfSUEzMl9NVFJSX0RFRl9UWVBFKSB7DQo+ID4NCj4gPiArICAg IHJldHVybiBtRGVmVHlwZU1zci5VaW50NjQ7DQo+ID4NCj4gPiArICB9DQo+ID4NCj4gPiArDQo+ ID4NCj4gPiArICBpZiAoTXNySW5kZXggPT0gTVNSX0lBMzJfTVRSUkNBUCkgew0KPiA+DQo+ID4g KyAgICByZXR1cm4gbU10cnJDYXBNc3IuVWludDY0Ow0KPiA+DQo+ID4gKyAgfQ0KPiA+DQo+ID4g Kw0KPiA+DQo+ID4gKyAgLy8NCj4gPg0KPiA+ICsgIC8vIFNob3VsZCBuZXZlciBmYWxsIHRocm91 Z2ggdG8gaGVyZQ0KPiA+DQo+ID4gKyAgLy8NCj4gPg0KPiA+ICsgIEFTU0VSVChGQUxTRSk7DQo+ ID4NCj4gPiArICByZXR1cm4gMDsNCj4gPg0KPiA+ICt9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiAr LyoqDQo+ID4NCj4gPiArICBXcml0ZXMgYSA2NC1iaXQgdmFsdWUgdG8gYSBNYWNoaW5lIFNwZWNp ZmljDQo+IFJlZ2lzdGVyKE1TUiksIGFuZCByZXR1cm5zIHRoZQ0KPiA+DQo+ID4gKyAgdmFsdWUu DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBXcml0ZXMgdGhlIDY0LWJpdCB2YWx1ZSBzcGVjaWZp ZWQgYnkgVmFsdWUgdG8gdGhlDQo+IE1TUiBzcGVjaWZpZWQgYnkgSW5kZXguIFRoZQ0KPiA+DQo+ ID4gKyAgNjQtYml0IHZhbHVlIHdyaXR0ZW4gdG8gdGhlIE1TUiBpcyByZXR1cm5lZC4gTm8NCj4g cGFyYW1ldGVyIGNoZWNraW5nIGlzDQo+ID4NCj4gPiArICBwZXJmb3JtZWQgb24gSW5kZXggb3Ig VmFsdWUsIGFuZCBzb21lIG9mIHRoZXNlIG1heQ0KPiBjYXVzZSBDUFUgZXhjZXB0aW9ucy4gVGhl DQo+ID4NCj4gPiArICBjYWxsZXIgbXVzdCBlaXRoZXIgZ3VhcmFudGVlIHRoYXQgSW5kZXggYW5k IFZhbHVlDQo+IGFyZSB2YWxpZCwgb3IgdGhlIGNhbGxlcg0KPiA+DQo+ID4gKyAgbXVzdCBlc3Rh Ymxpc2ggcHJvcGVyIGV4Y2VwdGlvbiBoYW5kbGVycy4gVGhpcw0KPiBmdW5jdGlvbiBpcyBvbmx5 IGF2YWlsYWJsZSBvbg0KPiA+DQo+ID4gKyAgSUEtMzIgYW5kIHg2NC4NCj4gPg0KPiA+ICsNCj4g Pg0KPiA+ICsgIEBwYXJhbSAgTXNySW5kZXggVGhlIDMyLWJpdCBNU1IgaW5kZXggdG8gd3JpdGUu DQo+ID4NCj4gPiArICBAcGFyYW0gIFZhbHVlIFRoZSA2NC1iaXQgdmFsdWUgdG8gd3JpdGUgdG8g dGhlIE1TUi4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEByZXR1cm4gVmFsdWUNCj4gPg0KPiA+ ICsNCj4gPg0KPiA+ICsqKi8NCj4gPg0KPiA+ICtVSU5UNjQNCj4gPg0KPiA+ICtFRklBUEkNCj4g Pg0KPiA+ICtVbml0VGVzdE10cnJMaWJBc21Xcml0ZU1zcjY0KA0KPiA+DQo+ID4gKyAgSU4gICAg ICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIE1zckluZGV4LA0KPiA+DQo+ID4gKyAgSU4gICAg ICBVSU5UNjQgICAgICAgICAgICAgICAgICAgIFZhbHVlDQo+ID4NCj4gPiArICApDQo+ID4NCj4g PiArew0KPiA+DQo+ID4gKyAgVUlOVDMyIEluZGV4Ow0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAg Zm9yIChJbmRleCA9IDA7IEluZGV4IDwgQVJSQVlfU0laRQ0KPiAobUZpeGVkTXRycnNWYWx1ZSk7 IEluZGV4KyspIHsNCj4gPg0KPiA+ICsgICAgaWYgKE1zckluZGV4ID09IG1GaXhlZE10cnJzSW5k ZXhbSW5kZXhdKSB7DQo+ID4NCj4gPiArICAgICAgbUZpeGVkTXRycnNWYWx1ZVtJbmRleF0gPSBW YWx1ZTsNCj4gPg0KPiA+ICsgICAgICByZXR1cm4gVmFsdWU7DQo+ID4NCj4gPiArICAgIH0NCj4g Pg0KPiA+ICsgIH0NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIGlmICgoTXNySW5kZXggPj0gTVNS X0lBMzJfTVRSUl9QSFlTQkFTRTApICYmDQo+ID4NCj4gPiArICAgICAgKE1zckluZGV4IDw9IE1T Ul9JQTMyX01UUlJfUEhZU01BU0swICsNCj4gKE1UUlJfTlVNQkVSX09GX1ZBUklBQkxFX01UUlIg PDwgMSkpKSB7DQo+ID4NCj4gPiArICAgIGlmIChNc3JJbmRleCAlIDIgPT0gMCkgew0KPiA+DQo+ ID4gKyAgICAgIEluZGV4ID0gKE1zckluZGV4IC0gTVNSX0lBMzJfTVRSUl9QSFlTQkFTRTApID4+ DQo+IDE7DQo+ID4NCj4gPiArICAgICAgbVZhcmlhYmxlTXRycnNQaHlzQmFzZVtJbmRleF0uVWlu dDY0ID0gVmFsdWU7DQo+ID4NCj4gPiArICAgICAgcmV0dXJuIFZhbHVlOw0KPiA+DQo+ID4gKyAg ICB9IGVsc2Ugew0KPiA+DQo+ID4gKyAgICAgIEluZGV4ID0gKE1zckluZGV4IC0gTVNSX0lBMzJf TVRSUl9QSFlTTUFTSzApID4+DQo+IDE7DQo+ID4NCj4gPiArICAgICAgbVZhcmlhYmxlTXRycnNQ aHlzTWFza1tJbmRleF0uVWludDY0ID0gVmFsdWU7DQo+ID4NCj4gPiArICAgICAgcmV0dXJuIFZh bHVlOw0KPiA+DQo+ID4gKyAgICB9DQo+ID4NCj4gPiArICB9DQo+ID4NCj4gPiArDQo+ID4NCj4g PiArICBpZiAoTXNySW5kZXggPT0gTVNSX0lBMzJfTVRSUl9ERUZfVFlQRSkgew0KPiA+DQo+ID4g KyAgICBtRGVmVHlwZU1zci5VaW50NjQgPSBWYWx1ZTsNCj4gPg0KPiA+ICsgICAgcmV0dXJuIFZh bHVlOw0KPiA+DQo+ID4gKyAgfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgaWYgKE1zckluZGV4 ID09IE1TUl9JQTMyX01UUlJDQVApIHsNCj4gPg0KPiA+ICsgICAgbU10cnJDYXBNc3IuVWludDY0 ID0gVmFsdWU7DQo+ID4NCj4gPiArICAgIHJldHVybiBWYWx1ZTsNCj4gPg0KPiA+ICsgIH0NCj4g Pg0KPiA+ICsNCj4gPg0KPiA+ICsgIC8vDQo+ID4NCj4gPiArICAvLyBTaG91bGQgbmV2ZXIgZmFs bCB0aHJvdWdoIHRvIGhlcmUNCj4gPg0KPiA+ICsgIC8vDQo+ID4NCj4gPiArICBBU1NFUlQoRkFM U0UpOw0KPiA+DQo+ID4gKyAgcmV0dXJuIDA7DQo+ID4NCj4gPiArfQ0KPiA+DQo+ID4gKw0KPiA+ DQo+ID4gKy8qKg0KPiA+DQo+ID4gKyAgSW5pdGlhbGl6ZSB0aGUgTVRSUiByZWdpc3RlcnMuDQo+ ID4NCj4gPiArDQo+ID4NCj4gPiArICBAcGFyYW0gU3lzdGVtUGFyYW1ldGVyIFN5c3RlbSBwYXJh bWV0ZXIgdGhhdA0KPiBjb250cm9scyB0aGUgTVRSUiByZWdpc3RlcnMgaW5pdGlhbGl6YXRpb24u DQo+ID4NCj4gPiArKiovDQo+ID4NCj4gPiArVU5JVF9URVNUX1NUQVRVUw0KPiA+DQo+ID4gK0VG SUFQSQ0KPiA+DQo+ID4gK0luaXRpYWxpemVNdHJyUmVncyAoDQo+ID4NCj4gPiArICBJTiBNVFJS X0xJQl9TWVNURU1fUEFSQU1FVEVSICAqU3lzdGVtUGFyYW1ldGVyDQo+ID4NCj4gPiArICApDQo+ ID4NCj4gPiArew0KPiA+DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBJbmRleDsN Cj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIFNldE1lbSAobUZpeGVkTXRycnNWYWx1ZSwgc2l6ZW9m DQo+IChtRml4ZWRNdHJyc1ZhbHVlKSwgU3lzdGVtUGFyYW1ldGVyLT5EZWZhdWx0Q2FjaGVUeXBl KTsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IEFSUkFZ X1NJWkUNCj4gKG1WYXJpYWJsZU10cnJzUGh5c0Jhc2UpOyBJbmRleCsrKSB7DQo+ID4NCj4gPiAr ICAgIG1WYXJpYWJsZU10cnJzUGh5c0Jhc2VbSW5kZXhdLlVpbnQ2NCAgICAgICAgID0gMDsNCj4g Pg0KPiA+ICsgICAgbVZhcmlhYmxlTXRycnNQaHlzQmFzZVtJbmRleF0uQml0cy5UeXBlICAgICAg PQ0KPiBTeXN0ZW1QYXJhbWV0ZXItPkRlZmF1bHRDYWNoZVR5cGU7DQo+ID4NCj4gPiArICAgIG1W YXJpYWJsZU10cnJzUGh5c0Jhc2VbSW5kZXhdLkJpdHMuUmVzZXJ2ZWQxID0gMDsNCj4gPg0KPiA+ ICsNCj4gPg0KPiA+ICsgICAgbVZhcmlhYmxlTXRycnNQaHlzTWFza1tJbmRleF0uVWludDY0ICAg ICAgICAgPSAwOw0KPiA+DQo+ID4gKyAgICBtVmFyaWFibGVNdHJyc1BoeXNNYXNrW0luZGV4XS5C aXRzLlYgICAgICAgICA9IDA7DQo+ID4NCj4gPiArICAgIG1WYXJpYWJsZU10cnJzUGh5c01hc2tb SW5kZXhdLkJpdHMuUmVzZXJ2ZWQxID0gMDsNCj4gPg0KPiA+ICsgIH0NCj4gPg0KPiA+ICsNCj4g Pg0KPiA+ICsgIG1EZWZUeXBlTXNyLkJpdHMuRSAgICAgICAgID0gMTsNCj4gPg0KPiA+ICsgIG1E ZWZUeXBlTXNyLkJpdHMuRkUgICAgICAgID0gMTsNCj4gPg0KPiA+ICsgIG1EZWZUeXBlTXNyLkJp dHMuVHlwZSAgICAgID0gU3lzdGVtUGFyYW1ldGVyLQ0KPiA+RGVmYXVsdENhY2hlVHlwZTsNCj4g Pg0KPiA+ICsgIG1EZWZUeXBlTXNyLkJpdHMuUmVzZXJ2ZWQxID0gMDsNCj4gPg0KPiA+ICsgIG1E ZWZUeXBlTXNyLkJpdHMuUmVzZXJ2ZWQyID0gMDsNCj4gPg0KPiA+ICsgIG1EZWZUeXBlTXNyLkJp dHMuUmVzZXJ2ZWQzID0gMDsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIG1NdHJyQ2FwTXNyLkJp dHMuU01SUiAgICAgID0gMDsNCj4gPg0KPiA+ICsgIG1NdHJyQ2FwTXNyLkJpdHMuV0MgICAgICAg ID0gMDsNCj4gPg0KPiA+ICsgIG1NdHJyQ2FwTXNyLkJpdHMuVkNOVCAgICAgID0gU3lzdGVtUGFy YW1ldGVyLQ0KPiA+VmFyaWFibGVNdHJyQ291bnQ7DQo+ID4NCj4gPiArICBtTXRyckNhcE1zci5C aXRzLkZJWCAgICAgICA9IFN5c3RlbVBhcmFtZXRlci0NCj4gPkZpeGVkTXRyclN1cHBvcnRlZDsN Cj4gPg0KPiA+ICsgIG1NdHJyQ2FwTXNyLkJpdHMuUmVzZXJ2ZWQxID0gMDsNCj4gPg0KPiA+ICsg IG1NdHJyQ2FwTXNyLkJpdHMuUmVzZXJ2ZWQyID0gMDsNCj4gPg0KPiA+ICsgIG1NdHJyQ2FwTXNy LkJpdHMuUmVzZXJ2ZWQzID0gMDsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIG1DcHVpZFZlcnNp b25JbmZvRWR4LkJpdHMuTVRSUg0KPiA9IFN5c3RlbVBhcmFtZXRlci0+TXRyclN1cHBvcnRlZDsN Cj4gPg0KPiA+ICsgIG1DcHVpZFZpclBoeUFkZHJlc3NTaXplRWF4LkJpdHMuUGh5c2ljYWxBZGRy ZXNzQml0cw0KPiA9IFN5c3RlbVBhcmFtZXRlci0+UGh5c2ljYWxBZGRyZXNzQml0czsNCj4gPg0K PiA+ICsNCj4gPg0KPiA+ICsgIC8vDQo+ID4NCj4gPiArICAvLyBIb29rIEJhc2VMaWIgZnVuY3Rp b25zIHVzZWQgYnkgTXRyckxpYiB0aGF0DQo+IHJlcXVpcmUgc29tZSBlbXVsYXRpb24uDQo+ID4N Cj4gPiArICAvLw0KPiA+DQo+ID4gKyAgZ1VuaXRUZXN0SG9zdEJhc2VMaWIuWDg2LT5Bc21DcHVp ZCAgICAgID0NCj4gVW5pdFRlc3RNdHJyTGliQXNtQ3B1aWQ7DQo+ID4NCj4gPiArICBnVW5pdFRl c3RIb3N0QmFzZUxpYi5YODYtPkFzbVJlYWRNc3I2NCAgPQ0KPiBVbml0VGVzdE10cnJMaWJBc21S ZWFkTXNyNjQ7DQo+ID4NCj4gPiArICBnVW5pdFRlc3RIb3N0QmFzZUxpYi5YODYtPkFzbVdyaXRl TXNyNjQgPQ0KPiBVbml0VGVzdE10cnJMaWJBc21Xcml0ZU1zcjY0Ow0KPiA+DQo+ID4gKw0KPiA+ DQo+ID4gKyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNTRUQ7DQo+ID4NCj4gPiArfQ0KPiA+DQo+ID4g Kw0KPiA+DQo+ID4gKy8qKg0KPiA+DQo+ID4gKyAgSW5pdGlhbGl6ZSB0aGUgTVRSUiByZWdpc3Rl cnMuDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBAcGFyYW0gQ29udGV4dCBTeXN0ZW0gcGFyYW1l dGVyIHRoYXQgY29udHJvbHMgdGhlDQo+IE1UUlIgcmVnaXN0ZXJzIGluaXRpYWxpemF0aW9uLg0K PiA+DQo+ID4gKyoqLw0KPiA+DQo+ID4gK1VOSVRfVEVTVF9TVEFUVVMNCj4gPg0KPiA+ICtFRklB UEkNCj4gPg0KPiA+ICtJbml0aWFsaXplU3lzdGVtICgNCj4gPg0KPiA+ICsgIElOIFVOSVRfVEVT VF9DT05URVhUICAgICAgICBDb250ZXh0DQo+ID4NCj4gPiArICApDQo+ID4NCj4gPiArew0KPiA+ DQo+ID4gKyAgcmV0dXJuIEluaXRpYWxpemVNdHJyUmVncw0KPiAoKE1UUlJfTElCX1NZU1RFTV9Q QVJBTUVURVIgKikgQ29udGV4dCk7DQo+ID4NCj4gPiArfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4g Ky8qKg0KPiA+DQo+ID4gKyAgQ29sbGVjdCB0aGUgdGVzdCByZXN1bHQuDQo+ID4NCj4gPiArDQo+ ID4NCj4gPiArICBAcGFyYW0gRGVmYXVsdFR5cGUgICAgICAgICAgRGVmYXVsdCBtZW1vcnkgdHlw ZS4NCj4gPg0KPiA+ICsgIEBwYXJhbSBQaHlzaWNhbEFkZHJlc3NCaXRzICBQaHlzaWNhbCBhZGRy ZXNzIGJpdHMuDQo+ID4NCj4gPiArICBAcGFyYW0gVmFyaWFibGVNdHJyQ291bnQgICAgQ291bnQg b2YgdmFyaWFibGUNCj4gTVRSUnMuDQo+ID4NCj4gPiArICBAcGFyYW0gTXRycnMgICAgICAgICAg ICAgICAgTVRSUiBzZXR0aW5ncyB0bw0KPiBjb2xsZWN0IGZyb20uDQo+ID4NCj4gPiArICBAcGFy YW0gUmFuZ2VzICAgICAgICAgICAgICAgUmV0dXJuIHRoZSBtZW1vcnkNCj4gcmFuZ2VzLg0KPiA+ DQo+ID4gKyAgQHBhcmFtIFJhbmdlQ291bnQgICAgICAgICAgIFJldHVybiB0aGUgY291bnQgb2YN Cj4gbWVtb3J5IHJhbmdlcy4NCj4gPg0KPiA+ICsgIEBwYXJhbSBNdHJyQ291bnQgICAgICAgICAg ICBSZXR1cm4gdGhlIGNvdW50IG9mDQo+IHZhcmlhYmxlIE1UUlJzIGJlaW5nIHVzZWQuDQo+ID4N Cj4gPiArKiovDQo+ID4NCj4gPiArVk9JRA0KPiA+DQo+ID4gK0NvbGxlY3RUZXN0UmVzdWx0ICgN Cj4gPg0KPiA+ICsgIElOICAgICBNVFJSX01FTU9SWV9DQUNIRV9UWVBFIERlZmF1bHRUeXBlLA0K PiA+DQo+ID4gKyAgSU4gICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgUGh5c2ljYWxBZGRyZXNz Qml0cywNCj4gPg0KPiA+ICsgIElOICAgICBVSU5UMzIgICAgICAgICAgICAgICAgIFZhcmlhYmxl TXRyckNvdW50LA0KPiA+DQo+ID4gKyAgSU4gICAgIE1UUlJfU0VUVElOR1MgICAgICAgICAgKk10 cnJzLA0KPiA+DQo+ID4gKyAgT1VUICAgIE1UUlJfTUVNT1JZX1JBTkdFICAgICAgKlJhbmdlcywN Cj4gPg0KPiA+ICsgIElOIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgICpSYW5nZUNvdW50LA0K PiA+DQo+ID4gKyAgT1VUICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgKk10cnJDb3VudA0KPiA+ DQo+ID4gKyAgKQ0KPiA+DQo+ID4gK3sNCj4gPg0KPiA+ICsgIFVJTlROICAgICAgICAgICAgIElu ZGV4Ow0KPiA+DQo+ID4gKyAgVUlOVDY0ICAgICAgICAgICAgTXRyclZhbGlkQml0c01hc2s7DQo+ ID4NCj4gPiArICBVSU5UNjQgICAgICAgICAgICBNdHJyVmFsaWRBZGRyZXNzTWFzazsNCj4gPg0K PiA+ICsgIE1UUlJfTUVNT1JZX1JBTkdFIFJhd01lbW9yeVJhbmdlc1tBUlJBWV9TSVpFDQo+IChN dHJycy0+VmFyaWFibGVzLk10cnIpXTsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEFTU0VSVCAo TXRycnMgIT0gTlVMTCk7DQo+ID4NCj4gPiArICBBU1NFUlQgKFZhcmlhYmxlTXRyckNvdW50IDw9 IEFSUkFZX1NJWkUgKE10cnJzLQ0KPiA+VmFyaWFibGVzLk10cnIpKTsNCj4gPg0KPiA+ICsNCj4g Pg0KPiA+ICsgIE10cnJWYWxpZEJpdHNNYXNrID0gKDF1bGwgPDwgUGh5c2ljYWxBZGRyZXNzQml0 cykgLQ0KPiAxOw0KPiA+DQo+ID4gKyAgTXRyclZhbGlkQWRkcmVzc01hc2sgPSBNdHJyVmFsaWRC aXRzTWFzayAmDQo+IH4weEZGRnVsbDsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgICpNdHJyQ291 bnQgPSAwOw0KPiA+DQo+ID4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgVmFyaWFibGVNdHJy Q291bnQ7IEluZGV4KyspDQo+IHsNCj4gPg0KPiA+ICsgICAgaWYgKCgoTVNSX0lBMzJfTVRSUl9Q SFlTTUFTS19SRUdJU1RFUiAqKSAmTXRycnMtDQo+ID5WYXJpYWJsZXMuTXRycltJbmRleF0uTWFz ayktPkJpdHMuViA9PSAxKSB7DQo+ID4NCj4gPiArICAgICAgUmF3TWVtb3J5UmFuZ2VzWypNdHJy Q291bnRdLkJhc2VBZGRyZXNzID0NCj4gTXRycnMtPlZhcmlhYmxlcy5NdHJyW0luZGV4XS5CYXNl ICYNCj4gTXRyclZhbGlkQWRkcmVzc01hc2s7DQo+ID4NCj4gPiArICAgICAgUmF3TWVtb3J5UmFu Z2VzWypNdHJyQ291bnRdLlR5cGUgICAgICAgID0NCj4gPg0KPiA+ICsgICAgICAgICgoTVNSX0lB MzJfTVRSUl9QSFlTQkFTRV9SRUdJU1RFUiAqKSAmTXRycnMtDQo+ID5WYXJpYWJsZXMuTXRycltJ bmRleF0uQmFzZSktPkJpdHMuVHlwZTsNCj4gPg0KPiA+ICsgICAgICBSYXdNZW1vcnlSYW5nZXNb Kk10cnJDb3VudF0uTGVuZ3RoICAgICAgPQ0KPiA+DQo+ID4gKyAgICAgICAgICAoKH4oTXRycnMt PlZhcmlhYmxlcy5NdHJyW0luZGV4XS5NYXNrICYNCj4gTXRyclZhbGlkQWRkcmVzc01hc2spKSAm IE10cnJWYWxpZEJpdHNNYXNrKSArIDE7DQo+ID4NCj4gPiArICAgICAgKCpNdHJyQ291bnQpKys7 DQo+ID4NCj4gPiArICAgIH0NCj4gPg0KPiA+ICsgIH0NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsg IEdldEVmZmVjdGl2ZU1lbW9yeVJhbmdlcyAoRGVmYXVsdFR5cGUsDQo+IFBoeXNpY2FsQWRkcmVz c0JpdHMsIFJhd01lbW9yeVJhbmdlcywgKk10cnJDb3VudCwNCj4gUmFuZ2VzLCBSYW5nZUNvdW50 KTsNCj4gPg0KPiA+ICt9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArLyoqDQo+ID4NCj4gPiArICBS ZXR1cm4gYSAzMmJpdCByYW5kb20gbnVtYmVyLg0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHBh cmFtIFN0YXJ0ICBTdGFydCBvZiB0aGUgcmFuZG9tIG51bWJlciByYW5nZS4NCj4gPg0KPiA+ICsg IEBwYXJhbSBMaW1pdCAgTGltaXQgb2YgdGhlIHJhbmRvbSBudW1iZXIgcmFuZ2UuDQo+ID4NCj4g PiArICBAcmV0dXJuIDMyYml0IHJhbmRvbSBudW1iZXINCj4gPg0KPiA+ICsqKi8NCj4gPg0KPiA+ ICtVSU5UMzINCj4gPg0KPiA+ICtSYW5kb20zMiAoDQo+ID4NCj4gPiArICBVSU5UMzIgIFN0YXJ0 LA0KPiA+DQo+ID4gKyAgVUlOVDMyICBMaW1pdA0KPiA+DQo+ID4gKyAgKQ0KPiA+DQo+ID4gK3sN Cj4gPg0KPiA+ICsgIHJldHVybiAoVUlOVDMyKSAoKChkb3VibGUpIHJhbmQgKCkgLyBSQU5EX01B WCkgKg0KPiAoTGltaXQgLSBTdGFydCkpICsgU3RhcnQ7DQo+ID4NCj4gPiArfQ0KPiA+DQo+ID4g Kw0KPiA+DQo+ID4gKy8qKg0KPiA+DQo+ID4gKyAgUmV0dXJuIGEgNjRiaXQgcmFuZG9tIG51bWJl ci4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEBwYXJhbSBTdGFydCAgU3RhcnQgb2YgdGhlIHJh bmRvbSBudW1iZXIgcmFuZ2UuDQo+ID4NCj4gPiArICBAcGFyYW0gTGltaXQgIExpbWl0IG9mIHRo ZSByYW5kb20gbnVtYmVyIHJhbmdlLg0KPiA+DQo+ID4gKyAgQHJldHVybiA2NGJpdCByYW5kb20g bnVtYmVyDQo+ID4NCj4gPiArKiovDQo+ID4NCj4gPiArVUlOVDY0DQo+ID4NCj4gPiArUmFuZG9t NjQgKA0KPiA+DQo+ID4gKyAgVUlOVDY0ICBTdGFydCwNCj4gPg0KPiA+ICsgIFVJTlQ2NCAgTGlt aXQNCj4gPg0KPiA+ICsgICkNCj4gPg0KPiA+ICt7DQo+ID4NCj4gPiArICByZXR1cm4gKFVJTlQ2 NCkgKCgoZG91YmxlKSByYW5kICgpIC8gUkFORF9NQVgpICoNCj4gKExpbWl0IC0gU3RhcnQpKSAr IFN0YXJ0Ow0KPiA+DQo+ID4gK30NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsvKioNCj4gPg0KPiA+ ICsgIEdlbmVyYXRlIHJhbmRvbSBNVFJSIEJBU0UvTUFTSyBmb3IgYSBzcGVjaWZpZWQNCj4gdHlw ZS4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEBwYXJhbSBQaHlzaWNhbEFkZHJlc3NCaXRzIFBo eXNpY2FsIGFkZHJlc3MgYml0cy4NCj4gPg0KPiA+ICsgIEBwYXJhbSBDYWNoZVR5cGUgICAgICAg ICAgIENhY2hlIHR5cGUuDQo+ID4NCj4gPiArICBAcGFyYW0gTXRyclBhaXIgICAgICAgICAgICBS ZXR1cm4gdGhlIHJhbmRvbSBNVFJSLg0KPiA+DQo+ID4gKyAgQHBhcmFtIE10cnJNZW1vcnlSYW5n ZSAgICAgUmV0dXJuIHRoZSByYW5kb20gbWVtb3J5DQo+IHJhbmdlLg0KPiA+DQo+ID4gKyoqLw0K PiA+DQo+ID4gK1ZPSUQNCj4gPg0KPiA+ICtHZW5lcmF0ZVJhbmRvbU10cnJQYWlyICgNCj4gPg0K PiA+ICsgIElOICBVSU5UMzIgICAgICAgICAgICAgICAgIFBoeXNpY2FsQWRkcmVzc0JpdHMsDQo+ ID4NCj4gPiArICBJTiAgTVRSUl9NRU1PUllfQ0FDSEVfVFlQRSBDYWNoZVR5cGUsDQo+ID4NCj4g PiArICBPVVQgTVRSUl9WQVJJQUJMRV9TRVRUSU5HICAqTXRyclBhaXIsDQo+IE9QVElPTkFMDQo+ ID4NCj4gPiArICBPVVQgTVRSUl9NRU1PUllfUkFOR0UgICAgICAqTXRyck1lbW9yeVJhbmdlDQo+ IE9QVElPTkFMDQo+ID4NCj4gPiArICApDQo+ID4NCj4gPiArew0KPiA+DQo+ID4gKyAgTVNSX0lB MzJfTVRSUl9QSFlTQkFTRV9SRUdJU1RFUiBQaHlzQmFzZTsNCj4gPg0KPiA+ICsgIE1TUl9JQTMy X01UUlJfUEhZU01BU0tfUkVHSVNURVIgUGh5c01hc2s7DQo+ID4NCj4gPiArICBVSU5UMzIgICAg ICAgICAgICAgICAgICAgICAgICAgIFNpemVTaGlmdDsNCj4gPg0KPiA+ICsgIFVJTlQzMiAgICAg ICAgICAgICAgICAgICAgICAgICAgQmFzZVNoaWZ0Ow0KPiA+DQo+ID4gKyAgVUlOVDY0ICAgICAg ICAgICAgICAgICAgICAgICAgICBSYW5kb21Cb3VuZGFyeTsNCj4gPg0KPiA+ICsgIFVJTlQ2NCAg ICAgICAgICAgICAgICAgICAgICAgICAgTWF4UGh5c2ljYWxBZGRyZXNzOw0KPiA+DQo+ID4gKyAg VUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgICBSYW5nZVNpemU7DQo+ID4NCj4gPiArICBV SU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgIFJhbmdlQmFzZTsNCj4gPg0KPiA+ICsgIFVJ TlQ2NA0KPiBQaHlzQmFzZVBoeU1hc2tWYWxpZEJpdHNNYXNrOw0KPiA+DQo+ID4gKw0KPiA+DQo+ ID4gKyAgTWF4UGh5c2ljYWxBZGRyZXNzID0gMXVsbCA8PCBQaHlzaWNhbEFkZHJlc3NCaXRzOw0K PiA+DQo+ID4gKyAgZG8gew0KPiA+DQo+ID4gKyAgICBTaXplU2hpZnQgPSBSYW5kb20zMiAoMTIs IFBoeXNpY2FsQWRkcmVzc0JpdHMgLQ0KPiAxKTsNCj4gPg0KPiA+ICsgICAgUmFuZ2VTaXplID0g MXVsbCA8PCBTaXplU2hpZnQ7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICAgIEJhc2VTaGlmdCA9 IFJhbmRvbTMyIChTaXplU2hpZnQsDQo+IFBoeXNpY2FsQWRkcmVzc0JpdHMgLSAxKTsNCj4gPg0K PiA+ICsgICAgUmFuZG9tQm91bmRhcnkgPSBSYW5kb202NCAoMCwgMXVsbCA8PA0KPiAoUGh5c2lj YWxBZGRyZXNzQml0cyAtIEJhc2VTaGlmdCkpOw0KPiA+DQo+ID4gKyAgICBSYW5nZUJhc2UgPSBS YW5kb21Cb3VuZGFyeSA8PCBCYXNlU2hpZnQ7DQo+ID4NCj4gPiArICB9IHdoaWxlIChSYW5nZUJh c2UgPCBTSVpFXzFNQiB8fCBSYW5nZUJhc2UgPg0KPiBNYXhQaHlzaWNhbEFkZHJlc3MgLSAxKTsN Cj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIFBoeXNCYXNlUGh5TWFza1ZhbGlkQml0c01hc2sgPSAo TWF4UGh5c2ljYWxBZGRyZXNzDQo+IC0gMSkgJiAweGZmZmZmZmZmZmZmZmYwMDBVTEw7DQo+ID4N Cj4gPiArDQo+ID4NCj4gPiArICBQaHlzQmFzZS5VaW50NjQgICAgPSAwOw0KPiA+DQo+ID4gKyAg UGh5c0Jhc2UuQml0cy5UeXBlID0gQ2FjaGVUeXBlOw0KPiA+DQo+ID4gKyAgUGh5c0Jhc2UuVWlu dDY0ICAgfD0gUmFuZ2VCYXNlICYNCj4gUGh5c0Jhc2VQaHlNYXNrVmFsaWRCaXRzTWFzazsNCj4g Pg0KPiA+ICsgIFBoeXNNYXNrLlVpbnQ2NCAgICA9IDA7DQo+ID4NCj4gPiArICBQaHlzTWFzay5C aXRzLlYgICAgPSAxOw0KPiA+DQo+ID4gKyAgUGh5c01hc2suVWludDY0ICAgfD0gKCh+UmFuZ2VT aXplKSArIDEpICYNCj4gUGh5c0Jhc2VQaHlNYXNrVmFsaWRCaXRzTWFzazsNCj4gPg0KPiA+ICsN Cj4gPg0KPiA+ICsgIGlmIChNdHJyUGFpciAhPSBOVUxMKSB7DQo+ID4NCj4gPiArICAgIE10cnJQ YWlyLT5CYXNlID0gUGh5c0Jhc2UuVWludDY0Ow0KPiA+DQo+ID4gKyAgICBNdHJyUGFpci0+TWFz ayA9IFBoeXNNYXNrLlVpbnQ2NDsNCj4gPg0KPiA+ICsgIH0NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ ICsgIGlmIChNdHJyTWVtb3J5UmFuZ2UgIT0gTlVMTCkgew0KPiA+DQo+ID4gKyAgICBNdHJyTWVt b3J5UmFuZ2UtPkJhc2VBZGRyZXNzID0gUmFuZ2VCYXNlOw0KPiA+DQo+ID4gKyAgICBNdHJyTWVt b3J5UmFuZ2UtPkxlbmd0aCAgICAgID0gUmFuZ2VTaXplOw0KPiA+DQo+ID4gKyAgICBNdHJyTWVt b3J5UmFuZ2UtPlR5cGUgICAgICAgID0gQ2FjaGVUeXBlOw0KPiA+DQo+ID4gKyAgfQ0KPiA+DQo+ ID4gK30NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsvKioNCj4gPg0KPiA+ICsg IENoZWNrIHdoZXRoZXIgdGhlIFJhbmdlIG92ZXJsYXBzIHdpdGggYW55IG9uZSBpbg0KPiBSYW5n ZXMuDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBAcGFyYW0gUmFuZ2UgIFRoZSBtZW1vcnkgcmFu Z2UgdG8gY2hlY2suDQo+ID4NCj4gPiArICBAcGFyYW0gUmFuZ2VzIFRoZSBtZW1vcnkgcmFuZ2Vz Lg0KPiA+DQo+ID4gKyAgQHBhcmFtIENvdW50ICBDb3VudCBvZiBtZW1vcnkgcmFuZ2VzLg0KPiA+ DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHJldHVybiBUUlVFIHdoZW4gb3ZlcmxhcCBleGlzdHMuDQo+ ID4NCj4gPiArKiovDQo+ID4NCj4gPiArQk9PTEVBTg0KPiA+DQo+ID4gK1Jhbmdlc092ZXJsYXAg KA0KPiA+DQo+ID4gKyAgSU4gTVRSUl9NRU1PUllfUkFOR0UgKlJhbmdlLA0KPiA+DQo+ID4gKyAg SU4gTVRSUl9NRU1PUllfUkFOR0UgKlJhbmdlcywNCj4gPg0KPiA+ICsgIElOIFVJTlROICAgICAg ICAgICAgIENvdW50DQo+ID4NCj4gPiArICApDQo+ID4NCj4gPiArew0KPiA+DQo+ID4gKyAgd2hp bGUgKENvdW50LS0gIT0gMCkgew0KPiA+DQo+ID4gKyAgICAvLw0KPiA+DQo+ID4gKyAgICAvLyBU d28gcmFuZ2VzIG92ZXJsYXAgd2hlbjoNCj4gPg0KPiA+ICsgICAgLy8gMS4gcmFuZ2UjMi5iYXNl IGlzIGluIHRoZSBtaWRkbGUgb2YgcmFuZ2UjMQ0KPiA+DQo+ID4gKyAgICAvLyAyLiByYW5nZSMx LmJhc2UgaXMgaW4gdGhlIG1pZGRsZSBvZiByYW5nZSMyDQo+ID4NCj4gPiArICAgIC8vDQo+ID4N Cj4gPiArICAgIGlmICgoUmFuZ2UtPkJhc2VBZGRyZXNzIDw9DQo+IFJhbmdlc1tDb3VudF0uQmFz ZUFkZHJlc3MgJiYgUmFuZ2VzW0NvdW50XS5CYXNlQWRkcmVzcyA8DQo+IFJhbmdlLT5CYXNlQWRk cmVzcyArIFJhbmdlLT5MZW5ndGgpDQo+ID4NCj4gPiArICAgICB8fCAoUmFuZ2VzW0NvdW50XS5C YXNlQWRkcmVzcyA8PSBSYW5nZS0NCj4gPkJhc2VBZGRyZXNzICYmIFJhbmdlLT5CYXNlQWRkcmVz cyA8DQo+IFJhbmdlc1tDb3VudF0uQmFzZUFkZHJlc3MgKyBSYW5nZXNbQ291bnRdLkxlbmd0aCkp IHsNCj4gPg0KPiA+ICsgICAgICByZXR1cm4gVFJVRTsNCj4gPg0KPiA+ICsgICAgfQ0KPiA+DQo+ ID4gKyAgfQ0KPiA+DQo+ID4gKyAgcmV0dXJuIEZBTFNFOw0KPiA+DQo+ID4gK30NCj4gPg0KPiA+ ICsNCj4gPg0KPiA+ICsvKioNCj4gPg0KPiA+ICsgIEdlbmVyYXRlIHJhbmRvbSBNVFJScy4NCj4g Pg0KPiA+ICsNCj4gPg0KPiA+ICsgIEBwYXJhbSBQaHlzaWNhbEFkZHJlc3NCaXRzICBQaHlzaWNh bCBhZGRyZXNzIGJpdHMuDQo+ID4NCj4gPiArICBAcGFyYW0gUmF3TWVtb3J5UmFuZ2VzICAgICAg UmV0dXJuIHRoZSByYW5kb21seQ0KPiBnZW5lcmF0ZWQgTVRSUnMuDQo+ID4NCj4gPiArICBAcGFy YW0gVWNDb3VudCAgICAgICAgICAgICAgQ291bnQgb2YgVW5jYWNoZWFibGUNCj4gTVRSUnMuDQo+ ID4NCj4gPiArICBAcGFyYW0gV3RDb3VudCAgICAgICAgICAgICAgQ291bnQgb2YgV3JpdGUgVGhy b3VnaA0KPiBNVFJScy4NCj4gPg0KPiA+ICsgIEBwYXJhbSBXYkNvdW50ICAgICAgICAgICAgICBD b3VudCBvZiBXcml0ZSBCYWNrDQo+IE1UUlJzLg0KPiA+DQo+ID4gKyAgQHBhcmFtIFdwQ291bnQg ICAgICAgICAgICAgIENvdW50IG9mIFdyaXRlDQo+IFByb3RlY3RlZCBNVFJScy4NCj4gPg0KPiA+ ICsgIEBwYXJhbSBXY0NvdW50ICAgICAgICAgICAgICBDb3VudCBvZiBXcml0ZSBDb21iaW5lDQo+ IE1UUlJzLg0KPiA+DQo+ID4gKyoqLw0KPiA+DQo+ID4gK1ZPSUQNCj4gPg0KPiA+ICtHZW5lcmF0 ZVZhbGlkQW5kQ29uZmlndXJhYmxlTXRyclBhaXJzICgNCj4gPg0KPiA+ICsgIElOICAgICBVSU5U MzINCj4gUGh5c2ljYWxBZGRyZXNzQml0cywNCj4gPg0KPiA+ICsgIElOIE9VVCBNVFJSX01FTU9S WV9SQU5HRSAgICAgICAgICpSYXdNZW1vcnlSYW5nZXMsDQo+ID4NCj4gPiArICBJTiAgICAgVUlO VDMyICAgICAgICAgICAgICAgICAgICBVY0NvdW50LA0KPiA+DQo+ID4gKyAgSU4gICAgIFVJTlQz MiAgICAgICAgICAgICAgICAgICAgV3RDb3VudCwNCj4gPg0KPiA+ICsgIElOICAgICBVSU5UMzIg ICAgICAgICAgICAgICAgICAgIFdiQ291bnQsDQo+ID4NCj4gPiArICBJTiAgICAgVUlOVDMyICAg ICAgICAgICAgICAgICAgICBXcENvdW50LA0KPiA+DQo+ID4gKyAgSU4gICAgIFVJTlQzMiAgICAg ICAgICAgICAgICAgICAgV2NDb3VudA0KPiA+DQo+ID4gKyAgKQ0KPiA+DQo+ID4gK3sNCj4gPg0K PiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ID4NCj4gPiAr DQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgLy8gMS4gR2VuZXJhdGUgVUMsIFdULCBXQiBp biBvcmRlci4NCj4gPg0KPiA+ICsgIC8vDQo+ID4NCj4gPiArICBmb3IgKEluZGV4ID0gMDsgSW5k ZXggPCBVY0NvdW50OyBJbmRleCsrKSB7DQo+ID4NCj4gPiArICAgIEdlbmVyYXRlUmFuZG9tTXRy clBhaXIgKFBoeXNpY2FsQWRkcmVzc0JpdHMsDQo+IENhY2hlVW5jYWNoZWFibGUsIE5VTEwsICZS YXdNZW1vcnlSYW5nZXNbSW5kZXhdKTsNCj4gPg0KPiA+ICsgIH0NCj4gPg0KPiA+ICsNCj4gPg0K PiA+ICsgIGZvciAoSW5kZXggPSBVY0NvdW50OyBJbmRleCA8IFVjQ291bnQgKyBXdENvdW50Ow0K PiBJbmRleCsrKSB7DQo+ID4NCj4gPiArICAgIEdlbmVyYXRlUmFuZG9tTXRyclBhaXIgKFBoeXNp Y2FsQWRkcmVzc0JpdHMsDQo+IENhY2hlV3JpdGVUaHJvdWdoLCBOVUxMLCAmUmF3TWVtb3J5UmFu Z2VzW0luZGV4XSk7DQo+ID4NCj4gPiArICB9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBmb3Ig KEluZGV4ID0gVWNDb3VudCArIFd0Q291bnQ7IEluZGV4IDwgVWNDb3VudCArDQo+IFd0Q291bnQg KyBXYkNvdW50OyBJbmRleCsrKSB7DQo+ID4NCj4gPiArICAgIEdlbmVyYXRlUmFuZG9tTXRyclBh aXIgKFBoeXNpY2FsQWRkcmVzc0JpdHMsDQo+IENhY2hlV3JpdGVCYWNrLCBOVUxMLCAmUmF3TWVt b3J5UmFuZ2VzW0luZGV4XSk7DQo+ID4NCj4gPiArICB9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiAr ICAvLw0KPiA+DQo+ID4gKyAgLy8gMi4gR2VuZXJhdGUgV1AgTVRSUiBhbmQgRE8gTk9UIG92ZXJs YXAgd2l0aCBXVCwNCj4gV0IuDQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgZm9yIChJbmRl eCA9IFVjQ291bnQgKyBXdENvdW50ICsgV2JDb3VudDsgSW5kZXggPA0KPiBVY0NvdW50ICsgV3RD b3VudCArIFdiQ291bnQgKyBXcENvdW50OyBJbmRleCsrKSB7DQo+ID4NCj4gPiArICAgIEdlbmVy YXRlUmFuZG9tTXRyclBhaXIgKFBoeXNpY2FsQWRkcmVzc0JpdHMsDQo+IENhY2hlV3JpdGVQcm90 ZWN0ZWQsIE5VTEwsICZSYXdNZW1vcnlSYW5nZXNbSW5kZXhdKTsNCj4gPg0KPiA+ICsgICAgd2hp bGUgKFJhbmdlc092ZXJsYXAgKCZSYXdNZW1vcnlSYW5nZXNbSW5kZXhdLA0KPiAmUmF3TWVtb3J5 UmFuZ2VzW1VjQ291bnRdLCBXdENvdW50ICsgV2JDb3VudCkpIHsNCj4gPg0KPiA+ICsgICAgICBH ZW5lcmF0ZVJhbmRvbU10cnJQYWlyIChQaHlzaWNhbEFkZHJlc3NCaXRzLA0KPiBDYWNoZVdyaXRl UHJvdGVjdGVkLCBOVUxMLCAmUmF3TWVtb3J5UmFuZ2VzW0luZGV4XSk7DQo+ID4NCj4gPiArICAg IH0NCj4gPg0KPiA+ICsgIH0NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIC8vDQo+ID4NCj4gPiAr ICAvLyAzLiBHZW5lcmF0ZSBXQyBNVFJSIGFuZCBETyBOT1Qgb3ZlcmxhcCB3aXRoIFdULA0KPiBX QiwgV1AuDQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgZm9yIChJbmRleCA9IFVjQ291bnQg KyBXdENvdW50ICsgV2JDb3VudCArIFdwQ291bnQ7DQo+IEluZGV4IDwgVWNDb3VudCArIFd0Q291 bnQgKyBXYkNvdW50ICsgV3BDb3VudCArIFdjQ291bnQ7DQo+IEluZGV4KyspIHsNCj4gPg0KPiA+ ICsgICAgR2VuZXJhdGVSYW5kb21NdHJyUGFpciAoUGh5c2ljYWxBZGRyZXNzQml0cywNCj4gQ2Fj aGVXcml0ZUNvbWJpbmluZywgTlVMTCwgJlJhd01lbW9yeVJhbmdlc1tJbmRleF0pOw0KPiA+DQo+ ID4gKyAgICB3aGlsZSAoUmFuZ2VzT3ZlcmxhcCAoJlJhd01lbW9yeVJhbmdlc1tJbmRleF0sDQo+ ICZSYXdNZW1vcnlSYW5nZXNbVWNDb3VudF0sIFd0Q291bnQgKyBXYkNvdW50ICsgV3BDb3VudCkp DQo+IHsNCj4gPg0KPiA+ICsgICAgICBHZW5lcmF0ZVJhbmRvbU10cnJQYWlyIChQaHlzaWNhbEFk ZHJlc3NCaXRzLA0KPiBDYWNoZVdyaXRlQ29tYmluaW5nLCBOVUxMLCAmUmF3TWVtb3J5UmFuZ2Vz W0luZGV4XSk7DQo+ID4NCj4gPiArICAgIH0NCj4gPg0KPiA+ICsgIH0NCj4gPg0KPiA+ICt9DQo+ ID4NCj4gPiArDQo+ID4NCj4gPiArLyoqDQo+ID4NCj4gPiArICBSZXR1cm4gYSByYW5kb20gbWVt b3J5IGNhY2hlIHR5cGUuDQo+ID4NCj4gPiArKiovDQo+ID4NCj4gPiArTVRSUl9NRU1PUllfQ0FD SEVfVFlQRQ0KPiA+DQo+ID4gK0dlbmVyYXRlUmFuZG9tQ2FjaGVUeXBlICgNCj4gPg0KPiA+ICsg IFZPSUQNCj4gPg0KPiA+ICsgICkNCj4gPg0KPiA+ICt7DQo+ID4NCj4gPiArICAgIHJldHVybiBt TWVtb3J5Q2FjaGVUeXBlc1tSYW5kb20zMiAoMCwgQVJSQVlfU0laRQ0KPiAobU1lbW9yeUNhY2hl VHlwZXMpIC0gMSldOw0KPiA+DQo+ID4gK30NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsvKioNCj4g Pg0KPiA+ICsgIENvbXBhcmUgZnVuY3Rpb24gdXNlZCBieSBxc29ydCgpLg0KPiA+DQo+ID4gKyoq Lw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKy8qKg0KPiA+DQo+ID4gKyAgQ29tcGFyZSBmdW5jdGlv biB1c2VkIGJ5IHFzb3J0KCkuDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBAcGFyYW0gTGVmdCAg IExlZnQgb3BlcmFuZCB0byBjb21wYXJlLg0KPiA+DQo+ID4gKyAgQHBhcmFtIFJpZ2h0ICBSaWdo dCBvcGVyYW5kIHRvIGNvbXBhcmUuDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBAcmV0dmFsIDAg IExlZnQgPT0gUmlnaHQNCj4gPg0KPiA+ICsgIEByZXR2YWwgLTEgTGVmdCA8IFJpZ2h0DQo+ID4N Cj4gPiArICBAcmV0dmFsIDEgIExlZnQgPiBSaWdodA0KPiA+DQo+ID4gKyoqLw0KPiA+DQo+ID4g K0lOVDMyDQo+ID4NCj4gPiArQ29tcGFyZUZ1bmNVaW50NjQgKA0KPiA+DQo+ID4gKyAgQ09OU1Qg Vk9JRCAqIExlZnQsDQo+ID4NCj4gPiArICBDT05TVCBWT0lEICogUmlnaHQNCj4gPg0KPiA+ICsg ICkNCj4gPg0KPiA+ICt7DQo+ID4NCj4gPiArICAgIElOVDY0IERlbHRhOw0KPiA+DQo+ID4gKyAg ICBEZWx0YSA9ICgqKFVJTlQ2NCopTGVmdCAtICooVUlOVDY0KilSaWdodCk7DQo+ID4NCj4gPiAr ICAgIGlmIChEZWx0YSA+IDApIHsNCj4gPg0KPiA+ICsgICAgICByZXR1cm4gMTsNCj4gPg0KPiA+ ICsgICAgfSBlbHNlIGlmIChEZWx0YSA9PSAwKSB7DQo+ID4NCj4gPiArICAgICAgcmV0dXJuIDA7 DQo+ID4NCj4gPiArICAgIH0gZWxzZSB7DQo+ID4NCj4gPiArICAgICAgcmV0dXJuIC0xOw0KPiA+ DQo+ID4gKyAgICB9DQo+ID4NCj4gPiArfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKy8qKg0KPiA+ DQo+ID4gKyAgRGV0ZXJtaW4gdGhlIG1lbW9yeSBjYWNoZSB0eXBlIGZvciB0aGUgUmFuZ2UuDQo+ ID4NCj4gPiArDQo+ID4NCj4gPiArICBAcGFyYW0gRGVmYXVsdFR5cGUgRGVmYXVsdCBjYWNoZSB0 eXBlLg0KPiA+DQo+ID4gKyAgQHBhcmFtIFJhbmdlICAgICAgIFRoZSBtZW1vcnkgcmFuZ2UgdG8g ZGV0ZXJtaW4gdGhlDQo+IGNhY2hlIHR5cGUuDQo+ID4NCj4gPiArICBAcGFyYW0gUmFuZ2VzICAg ICAgVGhlIGVudGlyZSBtZW1vcnkgcmFuZ2VzLg0KPiA+DQo+ID4gKyAgQHBhcmFtIFJhbmdlQ291 bnQgIENvdW50IG9mIHRoZSBlbnRpcmUgbWVtb3J5DQo+IHJhbmdlcy4NCj4gPg0KPiA+ICsqKi8N Cj4gPg0KPiA+ICtWT0lEDQo+ID4NCj4gPiArRGV0ZXJtaW5lTWVtb3J5Q2FjaGVUeXBlICgNCj4g Pg0KPiA+ICsgIElOICAgICBNVFJSX01FTU9SWV9DQUNIRV9UWVBFIERlZmF1bHRUeXBlLA0KPiA+ DQo+ID4gKyAgSU4gT1VUIE1UUlJfTUVNT1JZX1JBTkdFICAgICAgKlJhbmdlLA0KPiA+DQo+ID4g KyAgSU4gICAgIE1UUlJfTUVNT1JZX1JBTkdFICAgICAgKlJhbmdlcywNCj4gPg0KPiA+ICsgIElO ICAgICBVSU5UMzIgICAgICAgICAgICAgICAgIFJhbmdlQ291bnQNCj4gPg0KPiA+ICsgICkNCj4g Pg0KPiA+ICt7DQo+ID4NCj4gPiArICBVSU5UMzIgSW5kZXg7DQo+ID4NCj4gPiArICBSYW5nZS0+ VHlwZSA9IENhY2hlSW52YWxpZDsNCj4gPg0KPiA+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8 IFJhbmdlQ291bnQ7IEluZGV4KyspIHsNCj4gPg0KPiA+ICsgICAgaWYgKFJhbmdlc092ZXJsYXAg KFJhbmdlLCAmUmFuZ2VzW0luZGV4XSwgMSkpIHsNCj4gPg0KPiA+ICsgICAgICBpZiAoUmFuZ2Vz W0luZGV4XS5UeXBlIDwgUmFuZ2UtPlR5cGUpIHsNCj4gPg0KPiA+ICsgICAgICAgIFJhbmdlLT5U eXBlID0gUmFuZ2VzW0luZGV4XS5UeXBlOw0KPiA+DQo+ID4gKyAgICAgIH0NCj4gPg0KPiA+ICsg ICAgfQ0KPiA+DQo+ID4gKyAgfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgaWYgKFJhbmdlLT5U eXBlID09IENhY2hlSW52YWxpZCkgew0KPiA+DQo+ID4gKyAgICBSYW5nZS0+VHlwZSA9IERlZmF1 bHRUeXBlOw0KPiA+DQo+ID4gKyAgfQ0KPiA+DQo+ID4gK30NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ ICsvKioNCj4gPg0KPiA+ICsgIEdldCB0aGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgdGhhdCBkb2Vz IE5PVCBlcXVhbHMNCj4gdG8gQXJyYXlbSW5kZXhdLg0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAg QHBhcmFtIEluZGV4ICAgQ3VycmVudCBlbGVtZW50Lg0KPiA+DQo+ID4gKyAgQHBhcmFtIEFycmF5 ICAgQXJyYXkgdG8gc2Nhbi4NCj4gPg0KPiA+ICsgIEBwYXJhbSBDb3VudCAgIENvdW50IG9mIHRo ZSBhcnJheS4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEByZXR1cm4gTmV4dCBlbGVtZW50IHRo YXQgZG9lc24ndCBlcXVhbCB0byBjdXJyZW50DQo+IG9uZS4NCj4gPg0KPiA+ICsqKi8NCj4gPg0K PiA+ICtVSU5UMzINCj4gPg0KPiA+ICtHZXROZXh0RGlmZmVyZW50RWxlbWVudEluU29ydGVkQXJy YXkgKA0KPiA+DQo+ID4gKyAgSU4gVUlOVDMyIEluZGV4LA0KPiA+DQo+ID4gKyAgSU4gVUlOVDY0 ICpBcnJheSwNCj4gPg0KPiA+ICsgIElOIFVJTlQzMiBDb3VudA0KPiA+DQo+ID4gKyAgKQ0KPiA+ DQo+ID4gK3sNCj4gPg0KPiA+ICsgIFVJTlQ2NCBDdXJyZW50RWxlbWVudDsNCj4gPg0KPiA+ICsg IEN1cnJlbnRFbGVtZW50ID0gQXJyYXlbSW5kZXhdOw0KPiA+DQo+ID4gKyAgd2hpbGUgKEN1cnJl bnRFbGVtZW50ID09IEFycmF5W0luZGV4XSAmJiBJbmRleCA8DQo+IENvdW50KSB7DQo+ID4NCj4g PiArICAgIEluZGV4Kys7DQo+ID4NCj4gPiArICB9DQo+ID4NCj4gPiArICByZXR1cm4gSW5kZXg7 DQo+ID4NCj4gPiArfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKy8qKg0KPiA+DQo+ID4gKyAgUmVt b3ZlIHRoZSBkdXBsaWNhdGVzIGZyb20gdGhlIGFycmF5Lg0KPiA+DQo+ID4gKw0KPiA+DQo+ID4g KyAgQHBhcmFtIEFycmF5ICBUaGUgYXJyYXkgdG8gb3BlcmF0ZSBvbi4NCj4gPg0KPiA+ICsgIEBw YXJhbSBDb3VudCAgQ291bnQgb2YgdGhlIGFycmF5Lg0KPiA+DQo+ID4gKyoqLw0KPiA+DQo+ID4g K1ZPSUQNCj4gPg0KPiA+ICtSZW1vdmVEdXBsaWNhdGVzSW5Tb3J0ZWRBcnJheSAoDQo+ID4NCj4g PiArICBJTiBPVVQgVUlOVDY0ICpBcnJheSwNCj4gPg0KPiA+ICsgIElOIE9VVCBVSU5UMzIgKkNv dW50DQo+ID4NCj4gPiArICApDQo+ID4NCj4gPiArew0KPiA+DQo+ID4gKyAgVUlOVDMyIEluZGV4 Ow0KPiA+DQo+ID4gKyAgVUlOVDMyIE5ld0NvdW50Ow0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAg SW5kZXggICAgPSAwOw0KPiA+DQo+ID4gKyAgTmV3Q291bnQgPSAwOw0KPiA+DQo+ID4gKyAgd2hp bGUgKEluZGV4IDwgKkNvdW50KSB7DQo+ID4NCj4gPiArICAgIEFycmF5W05ld0NvdW50XSA9IEFy cmF5W0luZGV4XTsNCj4gPg0KPiA+ICsgICAgTmV3Q291bnQrKzsNCj4gPg0KPiA+ICsgICAgSW5k ZXggPSBHZXROZXh0RGlmZmVyZW50RWxlbWVudEluU29ydGVkQXJyYXkNCj4gKEluZGV4LCBBcnJh eSwgKkNvdW50KTsNCj4gPg0KPiA+ICsgIH0NCj4gPg0KPiA+ICsgICpDb3VudCA9IE5ld0NvdW50 Ow0KPiA+DQo+ID4gK30NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsvKioNCj4gPg0KPiA+ICsgIFJl dHVybiBUUlVFIHdoZW4gQWRkcmVzcyBpcyBpbiB0aGUgUmFuZ2UuDQo+ID4NCj4gPiArDQo+ID4N Cj4gPiArICBAcGFyYW0gQWRkcmVzcyBUaGUgYWRkcmVzcyB0byBjaGVjay4NCj4gPg0KPiA+ICsg IEBwYXJhbSBSYW5nZSAgIFRoZSByYW5nZSB0byBjaGVjay4NCj4gPg0KPiA+ICsgIEByZXR1cm4g VFJVRSB3aGVuIEFkZHJlc3MgaXMgaW4gdGhlIFJhbmdlLg0KPiA+DQo+ID4gKyoqLw0KPiA+DQo+ ID4gK0JPT0xFQU4NCj4gPg0KPiA+ICtBZGRyZXNzSW5SYW5nZSAoDQo+ID4NCj4gPiArICBJTiBV SU5UNjQgICAgICAgICAgICBBZGRyZXNzLA0KPiA+DQo+ID4gKyAgSU4gTVRSUl9NRU1PUllfUkFO R0UgUmFuZ2UNCj4gPg0KPiA+ICsgICkNCj4gPg0KPiA+ICt7DQo+ID4NCj4gPiArICAgIHJldHVy biAoQWRkcmVzcyA+PSBSYW5nZS5CYXNlQWRkcmVzcykgJiYgKEFkZHJlc3MNCj4gPD0gUmFuZ2Uu QmFzZUFkZHJlc3MgKyBSYW5nZS5MZW5ndGggLSAxKTsNCj4gPg0KPiA+ICt9DQo+ID4NCj4gPiAr DQo+ID4NCj4gPiArLyoqDQo+ID4NCj4gPiArICBHZXQgdGhlIG92ZXJsYXAgYml0IGZsYWcuDQo+ ID4NCj4gPiArDQo+ID4NCj4gPiArICBAcGFyYW0gUmF3TWVtb3J5UmFuZ2VzICAgICBSYXcgbWVt b3J5IHJhbmdlcy4NCj4gPg0KPiA+ICsgIEBwYXJhbSBSYXdNZW1vcnlSYW5nZUNvdW50IENvdW50 IG9mIHJhdyBtZW1vcnkNCj4gcmFuZ2VzLg0KPiA+DQo+ID4gKyAgQHBhcmFtIEFkZHJlc3MgICAg ICAgICAgICAgVGhlIGFkZHJlc3MgdG8gY2hlY2suDQo+ID4NCj4gPiArKiovDQo+ID4NCj4gPiAr VUlOVDY0DQo+ID4NCj4gPiArR2V0T3ZlcmxhcEJpdEZsYWcgKA0KPiA+DQo+ID4gKyAgSU4gTVRS Ul9NRU1PUllfUkFOR0UgKlJhd01lbW9yeVJhbmdlcywNCj4gPg0KPiA+ICsgIElOIFVJTlQzMiAg ICAgICAgICAgIFJhd01lbW9yeVJhbmdlQ291bnQsDQo+ID4NCj4gPiArICBJTiBVSU5UNjQgICAg ICAgICAgICBBZGRyZXNzDQo+ID4NCj4gPiArICApDQo+ID4NCj4gPiArew0KPiA+DQo+ID4gKyAg VUlOVDY0IE92ZXJsYXBCaXRGbGFnOw0KPiA+DQo+ID4gKyAgVUlOVDMyIEluZGV4Ow0KPiA+DQo+ ID4gKyAgT3ZlcmxhcEJpdEZsYWcgPSAwOw0KPiA+DQo+ID4gKyAgZm9yIChJbmRleCA9IDA7IElu ZGV4IDwgUmF3TWVtb3J5UmFuZ2VDb3VudDsNCj4gSW5kZXgrKykgew0KPiA+DQo+ID4gKyAgICBp ZiAoQWRkcmVzc0luUmFuZ2UgKEFkZHJlc3MsDQo+IFJhd01lbW9yeVJhbmdlc1tJbmRleF0pKSB7 DQo+ID4NCj4gPiArICAgICAgT3ZlcmxhcEJpdEZsYWcgfD0gKDF1bGwgPDwgSW5kZXgpOw0KPiA+ DQo+ID4gKyAgICB9DQo+ID4NCj4gPiArICB9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICByZXR1 cm4gT3ZlcmxhcEJpdEZsYWc7DQo+ID4NCj4gPiArfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKy8q Kg0KPiA+DQo+ID4gKyAgUmV0dXJuIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBmbGFncy4NCj4g Pg0KPiA+ICsNCj4gPg0KPiA+ICsgIEBwYXJhbSBGbGFnMSBGbGFnIDENCj4gPg0KPiA+ICsgIEBw YXJhbSBGbGFnMiBGbGFnIDINCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEByZXR2YWwgMCAgIEZs YWcxID09IEZsYWcyDQo+ID4NCj4gPiArICBAcmV0dmFsIDEgICBGbGFnMSBpcyBhIHN1YnNldCBv ZiBGbGFnMg0KPiA+DQo+ID4gKyAgQHJldHZhbCAyICAgRmxhZzIgaXMgYSBzdWJzZXQgb2YgRmxh ZzENCj4gPg0KPiA+ICsgIEByZXR2YWwgMyAgIE5vIHN1YnNldCByZWxhdGlvbnMgYmV0d2VlbiBG bGFnMSBhbmQNCj4gRmxhZzIuDQo+ID4NCj4gPiArKiovDQo+ID4NCj4gPiArVUlOVDMyDQo+ID4N Cj4gPiArQ2hlY2tPdmVybGFwQml0RmxhZ3NSZWxhdGlvbiAoDQo+ID4NCj4gPiArICBJTiBVSU5U NjQgRmxhZzEsDQo+ID4NCj4gPiArICBJTiBVSU5UNjQgRmxhZzINCj4gPg0KPiA+ICsgICkNCj4g Pg0KPiA+ICt7DQo+ID4NCj4gPiArICAgIGlmIChGbGFnMSA9PSBGbGFnMikgcmV0dXJuIDA7DQo+ ID4NCj4gPiArICAgIGlmICgoRmxhZzEgfCBGbGFnMikgPT0gRmxhZzIpIHJldHVybiAxOw0KPiA+ DQo+ID4gKyAgICBpZiAoKEZsYWcxIHwgRmxhZzIpID09IEZsYWcxKSByZXR1cm4gMjsNCj4gPg0K PiA+ICsgICAgcmV0dXJuIDM7DQo+ID4NCj4gPiArfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKy8q Kg0KPiA+DQo+ID4gKyAgUmV0dXJuIFRSVUUgd2hlbiB0aGUgRW5kcG9pbnQgaXMgaW4gYW55IG9m IHRoZQ0KPiBSYW5nZXMuDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBAcGFyYW0gRW5kcG9pbnQg ICAgVGhlIGVuZHBvaW50IHRvIGNoZWNrLg0KPiA+DQo+ID4gKyAgQHBhcmFtIFJhbmdlcyAgICAg IFRoZSBtZW1vcnkgcmFuZ2VzLg0KPiA+DQo+ID4gKyAgQHBhcmFtIFJhbmdlQ291bnQgIENvdW50 IG9mIG1lbW9yeSByYW5nZXMuDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBAcmV0dmFsIFRSVUUg IEVuZHBvaW50IGlzIGluIG9uZSBvZiB0aGUgcmFuZ2UuDQo+ID4NCj4gPiArICBAcmV0dmFsIEZB TFNFIEVuZHBvaW50IGlzIG5vdCBpbiBhbnkgb2YgdGhlIHJhbmdlcy4NCj4gPg0KPiA+ICsqKi8N Cj4gPg0KPiA+ICtCT09MRUFODQo+ID4NCj4gPiArSXNFbmRwb2ludEluUmFuZ2VzICgNCj4gPg0K PiA+ICsgIElOIFVJTlQ2NCAgICAgICAgICAgIEVuZHBvaW50LA0KPiA+DQo+ID4gKyAgSU4gTVRS Ul9NRU1PUllfUkFOR0UgKlJhbmdlcywNCj4gPg0KPiA+ICsgIElOIFVJTlROICAgICAgICAgICAg IFJhbmdlQ291bnQNCj4gPg0KPiA+ICsgICkNCj4gPg0KPiA+ICt7DQo+ID4NCj4gPiArICAgIFVJ TlQzMiBJbmRleDsNCj4gPg0KPiA+ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUmFuZ2VD b3VudDsgSW5kZXgrKykgew0KPiA+DQo+ID4gKyAgICAgIGlmIChBZGRyZXNzSW5SYW5nZSAoRW5k cG9pbnQsIFJhbmdlc1tJbmRleF0pKSB7DQo+ID4NCj4gPiArICAgICAgICByZXR1cm4gVFJVRTsN Cj4gPg0KPiA+ICsgICAgICB9DQo+ID4NCj4gPiArICAgIH0NCj4gPg0KPiA+ICsgICAgcmV0dXJu IEZBTFNFOw0KPiA+DQo+ID4gK30NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsv KioNCj4gPg0KPiA+ICsgIENvbXBhY3QgYWRqYWNlbnQgcmFuZ2VzIG9mIHRoZSBzYW1lIHR5cGUu DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBAcGFyYW0gRGVmYXVsdFR5cGUgICAgICAgICAgICAg ICAgICAgIERlZmF1bHQNCj4gbWVtb3J5IHR5cGUuDQo+ID4NCj4gPiArICBAcGFyYW0gUGh5c2lj YWxBZGRyZXNzQml0cyAgICAgICAgICAgIFBoeXNpY2FsDQo+IGFkZHJlc3MgYml0cy4NCj4gPg0K PiA+ICsgIEBwYXJhbSBFZmZlY3RpdmVNdHJyTWVtb3J5UmFuZ2VzICAgICAgTWVtb3J5IHJhbmdl cw0KPiB0byBjb21wYWN0Lg0KPiA+DQo+ID4gKyAgQHBhcmFtIEVmZmVjdGl2ZU10cnJNZW1vcnlS YW5nZXNDb3VudCBSZXR1cm4gdGhlDQo+IG5ldyBjb3VudCBvZiBtZW1vcnkgcmFuZ2VzLg0KPiA+ DQo+ID4gKyoqLw0KPiA+DQo+ID4gK1ZPSUQNCj4gPg0KPiA+ICtDb21wYWN0QW5kRXh0ZW5kRWZm ZWN0aXZlTXRyck1lbW9yeVJhbmdlcyAoDQo+ID4NCj4gPiArICBJTiAgICAgTVRSUl9NRU1PUllf Q0FDSEVfVFlQRSBEZWZhdWx0VHlwZSwNCj4gPg0KPiA+ICsgIElOICAgICBVSU5UMzIgICAgICAg ICAgICAgICAgIFBoeXNpY2FsQWRkcmVzc0JpdHMsDQo+ID4NCj4gPiArICBJTiBPVVQgTVRSUl9N RU1PUllfUkFOR0UNCj4gKipFZmZlY3RpdmVNdHJyTWVtb3J5UmFuZ2VzLA0KPiA+DQo+ID4gKyAg SU4gT1VUIFVJTlRODQo+ICpFZmZlY3RpdmVNdHJyTWVtb3J5UmFuZ2VzQ291bnQNCj4gPg0KPiA+ ICsgICkNCj4gPg0KPiA+ICt7DQo+ID4NCj4gPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAg ICAgICBNYXhBZGRyZXNzOw0KPiA+DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgTmV3UmFuZ2VzQ291bnRBdE1vc3Q7DQo+ID4NCj4gPiArICBNVFJSX01FTU9SWV9SQU5HRSAg ICAgICAgICAgICAqTmV3UmFuZ2VzOw0KPiA+DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAg ICAgICAgICAgTmV3UmFuZ2VzQ291bnRBY3R1YWw7DQo+ID4NCj4gPiArICBNVFJSX01FTU9SWV9S QU5HRQ0KPiAqQ3VycmVudFJhbmdlSW5OZXdSYW5nZXM7DQo+ID4NCj4gPiArICBNVFJSX01FTU9S WV9DQUNIRV9UWVBFDQo+IEN1cnJlbnRSYW5nZVR5cGVJbk9sZFJhbmdlczsNCj4gPg0KPiA+ICsN Cj4gPg0KPiA+ICsgIE1UUlJfTUVNT1JZX1JBTkdFICAgICAgICAgICAgICpPbGRSYW5nZXM7DQo+ ID4NCj4gPiArICBNVFJSX01FTU9SWV9SQU5HRSAgICAgICAgICAgICBPbGRMYXN0UmFuZ2U7DQo+ ID4NCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBPbGRSYW5nZXNJbmRleDsN Cj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIE5ld1Jhbmdlc0NvdW50QWN0dWFsID0gMDsNCj4gPg0K PiA+ICsgIE5ld1Jhbmdlc0NvdW50QXRNb3N0ID0NCj4gKkVmZmVjdGl2ZU10cnJNZW1vcnlSYW5n ZXNDb3VudCArIDI7ICAgLy8gQXQgbW9zdCB3aXRoIDINCj4gbW9yZSByYW5nZSBlbnRyaWVzLg0K PiA+DQo+ID4gKyAgTmV3UmFuZ2VzICAgICAgICAgICAgPSAoTVRSUl9NRU1PUllfUkFOR0UgKikg Y2FsbG9jDQo+IChOZXdSYW5nZXNDb3VudEF0TW9zdCwgc2l6ZW9mIChNVFJSX01FTU9SWV9SQU5H RSkpOw0KPiA+DQo+ID4gKyAgT2xkUmFuZ2VzICAgICAgICAgICAgPSAqRWZmZWN0aXZlTXRyck1l bW9yeVJhbmdlczsNCj4gPg0KPiA+ICsgIGlmIChPbGRSYW5nZXNbMF0uQmFzZUFkZHJlc3MgPiAw KSB7DQo+ID4NCj4gPiArICAgIE5ld1Jhbmdlc1tOZXdSYW5nZXNDb3VudEFjdHVhbF0uQmFzZUFk ZHJlc3MgPSAwOw0KPiA+DQo+ID4gKyAgICBOZXdSYW5nZXNbTmV3UmFuZ2VzQ291bnRBY3R1YWxd Lkxlbmd0aCAgICAgID0NCj4gT2xkUmFuZ2VzWzBdLkJhc2VBZGRyZXNzOw0KPiA+DQo+ID4gKyAg ICBOZXdSYW5nZXNbTmV3UmFuZ2VzQ291bnRBY3R1YWxdLlR5cGUgICAgICAgID0NCj4gRGVmYXVs dFR5cGU7DQo+ID4NCj4gPiArICAgIE5ld1Jhbmdlc0NvdW50QWN0dWFsKys7DQo+ID4NCj4gPiAr ICB9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBPbGRSYW5nZXNJbmRleCA9IDA7DQo+ID4NCj4g PiArICB3aGlsZSAoT2xkUmFuZ2VzSW5kZXggPA0KPiAqRWZmZWN0aXZlTXRyck1lbW9yeVJhbmdl c0NvdW50KSB7DQo+ID4NCj4gPiArICAgIEN1cnJlbnRSYW5nZVR5cGVJbk9sZFJhbmdlcyA9DQo+ IE9sZFJhbmdlc1tPbGRSYW5nZXNJbmRleF0uVHlwZTsNCj4gPg0KPiA+ICsgICAgQ3VycmVudFJh bmdlSW5OZXdSYW5nZXMgPSBOVUxMOw0KPiA+DQo+ID4gKyAgICBpZiAoTmV3UmFuZ2VzQ291bnRB Y3R1YWwgPiAwKSAgIC8vIFdlIG5lZWQgdG8NCj4gY2hlY2sgQ3VycmVudE5ld1JhbmdlIGZpcnN0 IGJlZm9yZSBnZW5lcmF0ZSBhIG5ldw0KPiBOZXdSYW5nZS4NCj4gPg0KPiA+ICsgICAgew0KPiA+ DQo+ID4gKyAgICAgIEN1cnJlbnRSYW5nZUluTmV3UmFuZ2VzID0NCj4gJk5ld1Jhbmdlc1tOZXdS YW5nZXNDb3VudEFjdHVhbCAtIDFdOw0KPiA+DQo+ID4gKyAgICB9DQo+ID4NCj4gPiArICAgIGlm IChDdXJyZW50UmFuZ2VJbk5ld1JhbmdlcyAhPSBOVUxMICYmDQo+IEN1cnJlbnRSYW5nZUluTmV3 UmFuZ2VzLT5UeXBlID09DQo+IEN1cnJlbnRSYW5nZVR5cGVJbk9sZFJhbmdlcykgew0KPiA+DQo+ ID4gKyAgICAgIEN1cnJlbnRSYW5nZUluTmV3UmFuZ2VzLT5MZW5ndGggKz0NCj4gT2xkUmFuZ2Vz W09sZFJhbmdlc0luZGV4XS5MZW5ndGg7DQo+ID4NCj4gPiArICAgIH0gZWxzZSB7DQo+ID4NCj4g PiArICAgICAgTmV3UmFuZ2VzW05ld1Jhbmdlc0NvdW50QWN0dWFsXS5CYXNlQWRkcmVzcyA9DQo+ IE9sZFJhbmdlc1tPbGRSYW5nZXNJbmRleF0uQmFzZUFkZHJlc3M7DQo+ID4NCj4gPiArICAgICAg TmV3UmFuZ2VzW05ld1Jhbmdlc0NvdW50QWN0dWFsXS5MZW5ndGggICAgICs9DQo+IE9sZFJhbmdl c1tPbGRSYW5nZXNJbmRleF0uTGVuZ3RoOw0KPiA+DQo+ID4gKyAgICAgIE5ld1Jhbmdlc1tOZXdS YW5nZXNDb3VudEFjdHVhbF0uVHlwZSAgICAgICAgPQ0KPiBDdXJyZW50UmFuZ2VUeXBlSW5PbGRS YW5nZXM7DQo+ID4NCj4gPiArICAgICAgd2hpbGUgKE9sZFJhbmdlc0luZGV4ICsgMSA8DQo+ICpF ZmZlY3RpdmVNdHJyTWVtb3J5UmFuZ2VzQ291bnQgJiYNCj4gT2xkUmFuZ2VzW09sZFJhbmdlc0lu ZGV4ICsgMV0uVHlwZSA9PQ0KPiBDdXJyZW50UmFuZ2VUeXBlSW5PbGRSYW5nZXMpDQo+ID4NCj4g PiArICAgICAgew0KPiA+DQo+ID4gKyAgICAgICAgT2xkUmFuZ2VzSW5kZXgrKzsNCj4gPg0KPiA+ ICsgICAgICAgIE5ld1Jhbmdlc1tOZXdSYW5nZXNDb3VudEFjdHVhbF0uTGVuZ3RoICs9DQo+IE9s ZFJhbmdlc1tPbGRSYW5nZXNJbmRleF0uTGVuZ3RoOw0KPiA+DQo+ID4gKyAgICAgIH0NCj4gPg0K PiA+ICsgICAgICBOZXdSYW5nZXNDb3VudEFjdHVhbCsrOw0KPiA+DQo+ID4gKyAgICB9DQo+ID4N Cj4gPiArDQo+ID4NCj4gPiArICAgIE9sZFJhbmdlc0luZGV4Kys7DQo+ID4NCj4gPiArICB9DQo+ ID4NCj4gPiArDQo+ID4NCj4gPiArICBNYXhBZGRyZXNzID0gKDF1bGwgPDwgUGh5c2ljYWxBZGRy ZXNzQml0cykgLSAxOw0KPiA+DQo+ID4gKyAgT2xkTGFzdFJhbmdlID0NCj4gT2xkUmFuZ2VzWygq RWZmZWN0aXZlTXRyck1lbW9yeVJhbmdlc0NvdW50KSAtIDFdOw0KPiA+DQo+ID4gKyAgQ3VycmVu dFJhbmdlSW5OZXdSYW5nZXMgPQ0KPiAmTmV3UmFuZ2VzW05ld1Jhbmdlc0NvdW50QWN0dWFsIC0g MV07DQo+ID4NCj4gPiArICBpZiAoT2xkTGFzdFJhbmdlLkJhc2VBZGRyZXNzICsgT2xkTGFzdFJh bmdlLkxlbmd0aA0KPiAtIDEgPCBNYXhBZGRyZXNzKSB7DQo+ID4NCj4gPiArICAgIGlmIChDdXJy ZW50UmFuZ2VJbk5ld1Jhbmdlcy0+VHlwZSA9PSBEZWZhdWx0VHlwZSkNCj4gew0KPiA+DQo+ID4g KyAgICAgIEN1cnJlbnRSYW5nZUluTmV3UmFuZ2VzLT5MZW5ndGggPSBNYXhBZGRyZXNzIC0NCj4g Q3VycmVudFJhbmdlSW5OZXdSYW5nZXMtPkJhc2VBZGRyZXNzICsgMTsNCj4gPg0KPiA+ICsgICAg fSBlbHNlIHsNCj4gPg0KPiA+ICsgICAgICBOZXdSYW5nZXNbTmV3UmFuZ2VzQ291bnRBY3R1YWxd LkJhc2VBZGRyZXNzID0NCj4gT2xkTGFzdFJhbmdlLkJhc2VBZGRyZXNzICsgT2xkTGFzdFJhbmdl Lkxlbmd0aDsNCj4gPg0KPiA+ICsgICAgICBOZXdSYW5nZXNbTmV3UmFuZ2VzQ291bnRBY3R1YWxd Lkxlbmd0aCA9DQo+IE1heEFkZHJlc3MgLSBOZXdSYW5nZXNbTmV3UmFuZ2VzQ291bnRBY3R1YWxd LkJhc2VBZGRyZXNzDQo+ICsgMTsNCj4gPg0KPiA+ICsgICAgICBOZXdSYW5nZXNbTmV3UmFuZ2Vz Q291bnRBY3R1YWxdLlR5cGUgPQ0KPiBEZWZhdWx0VHlwZTsNCj4gPg0KPiA+ICsgICAgICBOZXdS YW5nZXNDb3VudEFjdHVhbCsrOw0KPiA+DQo+ID4gKyAgICB9DQo+ID4NCj4gPiArICB9DQo+ID4N Cj4gPiArDQo+ID4NCj4gPiArICBmcmVlICgqRWZmZWN0aXZlTXRyck1lbW9yeVJhbmdlcyk7DQo+ ID4NCj4gPiArICAqRWZmZWN0aXZlTXRyck1lbW9yeVJhbmdlcyA9IE5ld1JhbmdlczsNCj4gPg0K PiA+ICsgICpFZmZlY3RpdmVNdHJyTWVtb3J5UmFuZ2VzQ291bnQgPQ0KPiBOZXdSYW5nZXNDb3Vu dEFjdHVhbDsNCj4gPg0KPiA+ICt9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArLyoqDQo+ID4NCj4g PiArICBDb2xsZWN0IGFsbCB0aGUgZW5kcG9pbnRzIGluIHRoZSByYXcgbWVtb3J5IHJhbmdlcy4N Cj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEBwYXJhbSBFbmRwb2ludHMgICAgICAgICAgIFJldHVy biB0aGUgY29sbGVjdGVkDQo+IGVuZHBvaW50cy4NCj4gPg0KPiA+ICsgIEBwYXJhbSBFbmRQb2lu dENvdW50ICAgICAgIFJldHVybiB0aGUgY291bnQgb2YNCj4gZW5kcG9pbnRzLg0KPiA+DQo+ID4g KyAgQHBhcmFtIFJhd01lbW9yeVJhbmdlcyAgICAgUmF3IG1lbW9yeSByYW5nZXMuDQo+ID4NCj4g PiArICBAcGFyYW0gUmF3TWVtb3J5UmFuZ2VDb3VudCBDb3VudCBvZiByYXcgbWVtb3J5DQo+IHJh bmdlcy4NCj4gPg0KPiA+ICsqKi8NCj4gPg0KPiA+ICtWT0lEDQo+ID4NCj4gPiArQ29sbGVjdEVu ZHBvaW50cyAoDQo+ID4NCj4gPiArICBJTiBPVVQgVUlOVDY0ICAgICAgICAqRW5kcG9pbnRzLA0K PiA+DQo+ID4gKyAgSU4gT1VUIFVJTlQzMiAgICAgICAgKkVuZFBvaW50Q291bnQsDQo+ID4NCj4g PiArICBJTiBNVFJSX01FTU9SWV9SQU5HRSAqUmF3TWVtb3J5UmFuZ2VzLA0KPiA+DQo+ID4gKyAg SU4gVUlOVDMyICAgICAgICAgICAgUmF3TWVtb3J5UmFuZ2VDb3VudA0KPiA+DQo+ID4gKyAgKQ0K PiA+DQo+ID4gK3sNCj4gPg0KPiA+ICsgIFVJTlQzMiBJbmRleDsNCj4gPg0KPiA+ICsgIFVJTlQz MiBSYXdSYW5nZUluZGV4Ow0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQVNTRVJUICgoUmF3TWVt b3J5UmFuZ2VDb3VudCA8PCAxKSA9PQ0KPiAqRW5kUG9pbnRDb3VudCk7DQo+ID4NCj4gPiArDQo+ ID4NCj4gPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCAqRW5kUG9pbnRDb3VudDsgSW5kZXgg Kz0gMikNCj4gew0KPiA+DQo+ID4gKyAgICBSYXdSYW5nZUluZGV4ID0gSW5kZXggPj4gMTsNCj4g Pg0KPiA+ICsgICAgRW5kcG9pbnRzW0luZGV4XSA9DQo+IFJhd01lbW9yeVJhbmdlc1tSYXdSYW5n ZUluZGV4XS5CYXNlQWRkcmVzczsNCj4gPg0KPiA+ICsgICAgRW5kcG9pbnRzW0luZGV4ICsgMV0g PQ0KPiBSYXdNZW1vcnlSYW5nZXNbUmF3UmFuZ2VJbmRleF0uQmFzZUFkZHJlc3MgKw0KPiBSYXdN ZW1vcnlSYW5nZXNbUmF3UmFuZ2VJbmRleF0uTGVuZ3RoIC0gMTsNCj4gPg0KPiA+ICsgIH0NCj4g Pg0KPiA+ICsNCj4gPg0KPiA+ICsgIHFzb3J0IChFbmRwb2ludHMsICpFbmRQb2ludENvdW50LCBz aXplb2YgKFVJTlQ2NCksDQo+IENvbXBhcmVGdW5jVWludDY0KTsNCj4gPg0KPiA+ICsgIFJlbW92 ZUR1cGxpY2F0ZXNJblNvcnRlZEFycmF5IChFbmRwb2ludHMsDQo+IEVuZFBvaW50Q291bnQpOw0K PiA+DQo+ID4gK30NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsvKioNCj4gPg0KPiA+ICsgIENvbnZl cnQgdGhlIE1UUlIgQkFTRS9NQVNLIGFycmF5IHRvIG1lbW9yeSByYW5nZXMuDQo+ID4NCj4gPiAr DQo+ID4NCj4gPiArICBAcGFyYW0gRGVmYXVsdFR5cGUgICAgICAgICAgRGVmYXVsdCBtZW1vcnkg dHlwZS4NCj4gPg0KPiA+ICsgIEBwYXJhbSBQaHlzaWNhbEFkZHJlc3NCaXRzICBQaHlzaWNhbCBh ZGRyZXNzIGJpdHMuDQo+ID4NCj4gPiArICBAcGFyYW0gUmF3TWVtb3J5UmFuZ2VzICAgICAgUmF3 IG1lbW9yeSByYW5nZXMuDQo+ID4NCj4gPiArICBAcGFyYW0gUmF3TWVtb3J5UmFuZ2VDb3VudCAg Q291bnQgb2YgcmF3IG1lbW9yeQ0KPiByYW5nZXMuDQo+ID4NCj4gPiArICBAcGFyYW0gTWVtb3J5 UmFuZ2VzICAgICAgICAgTWVtb3J5IHJhbmdlcy4NCj4gPg0KPiA+ICsgIEBwYXJhbSBNZW1vcnlS YW5nZUNvdW50ICAgICBDb3VudCBvZiBtZW1vcnkgcmFuZ2VzLg0KPiA+DQo+ID4gKyoqLw0KPiA+ DQo+ID4gK1ZPSUQNCj4gPg0KPiA+ICtHZXRFZmZlY3RpdmVNZW1vcnlSYW5nZXMgKA0KPiA+DQo+ ID4gKyAgSU4gTVRSUl9NRU1PUllfQ0FDSEVfVFlQRSBEZWZhdWx0VHlwZSwNCj4gPg0KPiA+ICsg IElOIFVJTlQzMiAgICAgICAgICAgICAgICAgUGh5c2ljYWxBZGRyZXNzQml0cywNCj4gPg0KPiA+ ICsgIElOIE1UUlJfTUVNT1JZX1JBTkdFICAgICAgKlJhd01lbW9yeVJhbmdlcywNCj4gPg0KPiA+ ICsgIElOIFVJTlQzMiAgICAgICAgICAgICAgICAgUmF3TWVtb3J5UmFuZ2VDb3VudCwNCj4gPg0K PiA+ICsgIE9VVCBNVFJSX01FTU9SWV9SQU5HRSAgICAgKk1lbW9yeVJhbmdlcywNCj4gPg0KPiA+ ICsgIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgKk1lbW9yeVJhbmdlQ291bnQNCj4gPg0KPiA+ ICsgICkNCj4gPg0KPiA+ICt7DQo+ID4NCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgSW5k ZXg7DQo+ID4NCj4gPiArICBVSU5UMzIgICAgICAgICAgICAgICAgQWxsRW5kUG9pbnRzQ291bnQ7 DQo+ID4NCj4gPiArICBVSU5UNjQgICAgICAgICAgICAgICAgKkFsbEVuZFBvaW50c0luY2x1c2l2 ZTsNCj4gPg0KPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICBBbGxSYW5nZVBpZWNlc0NvdW50 TWF4Ow0KPiA+DQo+ID4gKyAgTVRSUl9NRU1PUllfUkFOR0UgICAgICpBbGxSYW5nZVBpZWNlczsN Cj4gPg0KPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICBBbGxSYW5nZVBpZWNlc0NvdW50QWN0 dWFsOw0KPiA+DQo+ID4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgIE92ZXJsYXBCaXRGbGFnMTsN Cj4gPg0KPiA+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICBPdmVybGFwQml0RmxhZzI7DQo+ID4N Cj4gPiArICBJTlQzMiAgICAgICAgICAgICAgICAgT3ZlcmxhcEZsYWdSZWxhdGlvbjsNCj4gPg0K PiA+ICsNCj4gPg0KPiA+ICsgIGlmIChSYXdNZW1vcnlSYW5nZUNvdW50ID09IDApIHsNCj4gPg0K PiA+ICsgICAgTWVtb3J5UmFuZ2VzWzBdLkJhc2VBZGRyZXNzID0gMDsNCj4gPg0KPiA+ICsgICAg TWVtb3J5UmFuZ2VzWzBdLkxlbmd0aCAgICAgID0gKDF1bGwgPDwNCj4gUGh5c2ljYWxBZGRyZXNz Qml0cyk7DQo+ID4NCj4gPiArICAgIE1lbW9yeVJhbmdlc1swXS5UeXBlICAgICAgICA9IERlZmF1 bHRUeXBlOw0KPiA+DQo+ID4gKyAgICAqTWVtb3J5UmFuZ2VDb3VudCA9IDE7DQo+ID4NCj4gPiAr ICAgIHJldHVybjsNCj4gPg0KPiA+ICsgIH0NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEFsbEVu ZFBvaW50c0NvdW50ICAgICAgICAgPSBSYXdNZW1vcnlSYW5nZUNvdW50IDw8DQo+IDE7DQo+ID4N Cj4gPiArICBBbGxFbmRQb2ludHNJbmNsdXNpdmUgICAgID0gY2FsbG9jDQo+IChBbGxFbmRQb2lu dHNDb3VudCwgc2l6ZW9mIChVSU5UNjQpKTsNCj4gPg0KPiA+ICsgIEFsbFJhbmdlUGllY2VzQ291 bnRNYXggICAgPSBSYXdNZW1vcnlSYW5nZUNvdW50ICogMw0KPiArIDE7DQo+ID4NCj4gPiArICBB bGxSYW5nZVBpZWNlcyAgICAgICAgICAgID0gY2FsbG9jDQo+IChBbGxSYW5nZVBpZWNlc0NvdW50 TWF4LCBzaXplb2YgKE1UUlJfTUVNT1JZX1JBTkdFKSk7DQo+ID4NCj4gPiArICBDb2xsZWN0RW5k cG9pbnRzIChBbGxFbmRQb2ludHNJbmNsdXNpdmUsDQo+ICZBbGxFbmRQb2ludHNDb3VudCwgUmF3 TWVtb3J5UmFuZ2VzLA0KPiBSYXdNZW1vcnlSYW5nZUNvdW50KTsNCj4gPg0KPiA+ICsNCj4gPg0K PiA+ICsgIGZvciAoSW5kZXggPSAwLCBBbGxSYW5nZVBpZWNlc0NvdW50QWN0dWFsID0gMDsNCj4g SW5kZXggPCBBbGxFbmRQb2ludHNDb3VudCAtIDE7IEluZGV4KyspIHsNCj4gPg0KPiA+ICsgICAg T3ZlcmxhcEJpdEZsYWcxID0gR2V0T3ZlcmxhcEJpdEZsYWcNCj4gKFJhd01lbW9yeVJhbmdlcywg UmF3TWVtb3J5UmFuZ2VDb3VudCwNCj4gQWxsRW5kUG9pbnRzSW5jbHVzaXZlW0luZGV4XSk7DQo+ ID4NCj4gPiArICAgIE92ZXJsYXBCaXRGbGFnMiA9IEdldE92ZXJsYXBCaXRGbGFnDQo+IChSYXdN ZW1vcnlSYW5nZXMsIFJhd01lbW9yeVJhbmdlQ291bnQsDQo+IEFsbEVuZFBvaW50c0luY2x1c2l2 ZVtJbmRleCArIDFdKTsNCj4gPg0KPiA+ICsgICAgT3ZlcmxhcEZsYWdSZWxhdGlvbiA9DQo+IENo ZWNrT3ZlcmxhcEJpdEZsYWdzUmVsYXRpb24gKE92ZXJsYXBCaXRGbGFnMSwNCj4gT3ZlcmxhcEJp dEZsYWcyKTsNCj4gPg0KPiA+ICsgICAgc3dpdGNoIChPdmVybGFwRmxhZ1JlbGF0aW9uKSB7DQo+ ID4NCj4gPiArICAgICAgY2FzZSAwOiAgIC8vIFsxLCAyXQ0KPiA+DQo+ID4gKw0KPiBBbGxSYW5n ZVBpZWNlc1tBbGxSYW5nZVBpZWNlc0NvdW50QWN0dWFsXS5CYXNlQWRkcmVzcyA9DQo+IEFsbEVu ZFBvaW50c0luY2x1c2l2ZVtJbmRleF07DQo+ID4NCj4gPiArDQo+IEFsbFJhbmdlUGllY2VzW0Fs bFJhbmdlUGllY2VzQ291bnRBY3R1YWxdLkxlbmd0aCAgICAgID0NCj4gQWxsRW5kUG9pbnRzSW5j bHVzaXZlW0luZGV4ICsgMV0gLQ0KPiBBbGxFbmRQb2ludHNJbmNsdXNpdmVbSW5kZXhdICsgMTsN Cj4gPg0KPiA+ICsgICAgICAgIEFsbFJhbmdlUGllY2VzQ291bnRBY3R1YWwrKzsNCj4gPg0KPiA+ ICsgICAgICAgIGJyZWFrOw0KPiA+DQo+ID4gKyAgICAgIGNhc2UgMTogICAvLyBbMSwgMikNCj4g Pg0KPiA+ICsNCj4gQWxsUmFuZ2VQaWVjZXNbQWxsUmFuZ2VQaWVjZXNDb3VudEFjdHVhbF0uQmFz ZUFkZHJlc3MgPQ0KPiBBbGxFbmRQb2ludHNJbmNsdXNpdmVbSW5kZXhdOw0KPiA+DQo+ID4gKw0K PiBBbGxSYW5nZVBpZWNlc1tBbGxSYW5nZVBpZWNlc0NvdW50QWN0dWFsXS5MZW5ndGggICAgICA9 DQo+IChBbGxFbmRQb2ludHNJbmNsdXNpdmVbSW5kZXggKyAxXSAtIDEpIC0NCj4gQWxsRW5kUG9p bnRzSW5jbHVzaXZlW0luZGV4XSArIDE7DQo+ID4NCj4gPiArICAgICAgICBBbGxSYW5nZVBpZWNl c0NvdW50QWN0dWFsKys7DQo+ID4NCj4gPiArICAgICAgICBicmVhazsNCj4gPg0KPiA+ICsgICAg ICBjYXNlIDI6ICAgLy8gKDEsIDJdDQo+ID4NCj4gPiArDQo+IEFsbFJhbmdlUGllY2VzW0FsbFJh bmdlUGllY2VzQ291bnRBY3R1YWxdLkJhc2VBZGRyZXNzID0NCj4gQWxsRW5kUG9pbnRzSW5jbHVz aXZlW0luZGV4XSArIDE7DQo+ID4NCj4gPiArDQo+IEFsbFJhbmdlUGllY2VzW0FsbFJhbmdlUGll Y2VzQ291bnRBY3R1YWxdLkxlbmd0aCAgICAgID0NCj4gQWxsRW5kUG9pbnRzSW5jbHVzaXZlW0lu ZGV4ICsgMV0gLQ0KPiAoQWxsRW5kUG9pbnRzSW5jbHVzaXZlW0luZGV4XSArIDEpICsgMTsNCj4g Pg0KPiA+ICsgICAgICAgIEFsbFJhbmdlUGllY2VzQ291bnRBY3R1YWwrKzsNCj4gPg0KPiA+ICsN Cj4gPg0KPiA+ICsgICAgICAgIGlmICghSXNFbmRwb2ludEluUmFuZ2VzDQo+IChBbGxFbmRQb2lu dHNJbmNsdXNpdmVbSW5kZXhdLCBBbGxSYW5nZVBpZWNlcywNCj4gQWxsUmFuZ2VQaWVjZXNDb3Vu dEFjdHVhbCkpIHsNCj4gPg0KPiA+ICsNCj4gQWxsUmFuZ2VQaWVjZXNbQWxsUmFuZ2VQaWVjZXND b3VudEFjdHVhbF0uQmFzZUFkZHJlc3MgPQ0KPiBBbGxFbmRQb2ludHNJbmNsdXNpdmVbSW5kZXhd Ow0KPiA+DQo+ID4gKw0KPiBBbGxSYW5nZVBpZWNlc1tBbGxSYW5nZVBpZWNlc0NvdW50QWN0dWFs XS5MZW5ndGggICAgICA9DQo+IDE7DQo+ID4NCj4gPiArICAgICAgICAgIEFsbFJhbmdlUGllY2Vz Q291bnRBY3R1YWwrKzsNCj4gPg0KPiA+ICsgICAgICAgIH0NCj4gPg0KPiA+ICsgICAgICAgIGJy ZWFrOw0KPiA+DQo+ID4gKyAgICAgIGNhc2UgMzogICAvLyAoMSwgMikNCj4gPg0KPiA+ICsNCj4g QWxsUmFuZ2VQaWVjZXNbQWxsUmFuZ2VQaWVjZXNDb3VudEFjdHVhbF0uQmFzZUFkZHJlc3MgPQ0K PiBBbGxFbmRQb2ludHNJbmNsdXNpdmVbSW5kZXhdICsgMTsNCj4gPg0KPiA+ICsNCj4gQWxsUmFu Z2VQaWVjZXNbQWxsUmFuZ2VQaWVjZXNDb3VudEFjdHVhbF0uTGVuZ3RoICAgICAgPQ0KPiAoQWxs RW5kUG9pbnRzSW5jbHVzaXZlW0luZGV4ICsgMV0gLSAxKSAtDQo+IChBbGxFbmRQb2ludHNJbmNs dXNpdmVbSW5kZXhdICsgMSkgKyAxOw0KPiA+DQo+ID4gKyAgICAgICAgaWYNCj4gKEFsbFJhbmdl UGllY2VzW0FsbFJhbmdlUGllY2VzQ291bnRBY3R1YWxdLkxlbmd0aCA9PSAwKQ0KPiAvLyBPbmx5 IGluIGNhc2UgMyBjYW4gZXhpc3RzIExlbmd0aD0wLCB3ZSBzaG91bGQgc2tpcA0KPiBzdWNoICJz ZWdtZW50Ii4NCj4gPg0KPiA+ICsgICAgICAgICAgYnJlYWs7DQo+ID4NCj4gPiArICAgICAgICBB bGxSYW5nZVBpZWNlc0NvdW50QWN0dWFsKys7DQo+ID4NCj4gPiArICAgICAgICBpZiAoIUlzRW5k cG9pbnRJblJhbmdlcw0KPiAoQWxsRW5kUG9pbnRzSW5jbHVzaXZlW0luZGV4XSwgQWxsUmFuZ2VQ aWVjZXMsDQo+IEFsbFJhbmdlUGllY2VzQ291bnRBY3R1YWwpKSB7DQo+ID4NCj4gPiArDQo+IEFs bFJhbmdlUGllY2VzW0FsbFJhbmdlUGllY2VzQ291bnRBY3R1YWxdLkJhc2VBZGRyZXNzID0NCj4g QWxsRW5kUG9pbnRzSW5jbHVzaXZlW0luZGV4XTsNCj4gPg0KPiA+ICsNCj4gQWxsUmFuZ2VQaWVj ZXNbQWxsUmFuZ2VQaWVjZXNDb3VudEFjdHVhbF0uTGVuZ3RoICAgICAgPQ0KPiAxOw0KPiA+DQo+ ID4gKyAgICAgICAgICBBbGxSYW5nZVBpZWNlc0NvdW50QWN0dWFsKys7DQo+ID4NCj4gPiArICAg ICAgICB9DQo+ID4NCj4gPiArICAgICAgICBicmVhazsNCj4gPg0KPiA+ICsgICAgICBkZWZhdWx0 Og0KPiA+DQo+ID4gKyAgICAgICAgQVNTRVJUIChGQUxTRSk7DQo+ID4NCj4gPiArICAgIH0NCj4g Pg0KPiA+ICsgIH0NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRl eCA8IEFsbFJhbmdlUGllY2VzQ291bnRBY3R1YWw7DQo+IEluZGV4KyspIHsNCj4gPg0KPiA+ICsg ICAgRGV0ZXJtaW5lTWVtb3J5Q2FjaGVUeXBlIChEZWZhdWx0VHlwZSwNCj4gJkFsbFJhbmdlUGll Y2VzW0luZGV4XSwgUmF3TWVtb3J5UmFuZ2VzLA0KPiBSYXdNZW1vcnlSYW5nZUNvdW50KTsNCj4g Pg0KPiA+ICsgIH0NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIENvbXBhY3RBbmRFeHRlbmRFZmZl Y3RpdmVNdHJyTWVtb3J5UmFuZ2VzDQo+IChEZWZhdWx0VHlwZSwgUGh5c2ljYWxBZGRyZXNzQml0 cywgJkFsbFJhbmdlUGllY2VzLA0KPiAmQWxsUmFuZ2VQaWVjZXNDb3VudEFjdHVhbCk7DQo+ID4N Cj4gPiArICBBU1NFUlQgKCpNZW1vcnlSYW5nZUNvdW50ID49DQo+IEFsbFJhbmdlUGllY2VzQ291 bnRBY3R1YWwpOw0KPiA+DQo+ID4gKyAgbWVtY3B5IChNZW1vcnlSYW5nZXMsIEFsbFJhbmdlUGll Y2VzLA0KPiBBbGxSYW5nZVBpZWNlc0NvdW50QWN0dWFsICogc2l6ZW9mIChNVFJSX01FTU9SWV9S QU5HRSkpOw0KPiA+DQo+ID4gKyAgKk1lbW9yeVJhbmdlQ291bnQgPSBBbGxSYW5nZVBpZWNlc0Nv dW50QWN0dWFsOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgZnJlZSAoQWxsRW5kUG9pbnRzSW5j bHVzaXZlKTsNCj4gPg0KPiA+ICsgIGZyZWUgKEFsbFJhbmdlUGllY2VzKTsNCj4gPg0KPiA+ICt9 DQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvVWVmaUNwdVBrZy9UZXN0L1VlZmlDcHVQa2dIb3N0VGVz dC5kc2MNCj4gYi9VZWZpQ3B1UGtnL1Rlc3QvVWVmaUNwdVBrZ0hvc3RUZXN0LmRzYw0KPiA+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMC4uOGE1YzQ1NjgzMA0KPiA+ IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9VZWZpQ3B1UGtnL1Rlc3QvVWVmaUNwdVBrZ0hvc3RU ZXN0LmRzYw0KPiA+IEBAIC0wLDAgKzEsMzEgQEANCj4gPiArIyMgQGZpbGUNCj4gPg0KPiA+ICsj IFVlZmlDcHVQa2cgRFNDIGZpbGUgdXNlZCB0byBidWlsZCBob3N0LWJhc2VkIHVuaXQNCj4gdGVz dHMuDQo+ID4NCj4gPiArIw0KPiA+DQo+ID4gKyMgQ29weXJpZ2h0IChjKSAyMDIwLCBJbnRlbCBD b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cw0KPiByZXNlcnZlZC48QlI+DQo+ID4NCj4gPiArIyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+DQo+ID4gKyMNCj4g Pg0KPiA+ICsjIw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gK1tEZWZpbmVzXQ0KPiA+DQo+ID4gKyAg UExBVEZPUk1fTkFNRSAgICAgICAgICAgPSBVZWZpQ3B1UGtnSG9zdFRlc3QNCj4gPg0KPiA+ICsg IFBMQVRGT1JNX0dVSUQgICAgICAgICAgID0gRTAwQjk1OTktNUI3NC00RkY3LUFCOUYtDQo+IDgx ODNGQjEzQjJGOQ0KPiA+DQo+ID4gKyAgUExBVEZPUk1fVkVSU0lPTiAgICAgICAgPSAwLjENCj4g Pg0KPiA+ICsgIERTQ19TUEVDSUZJQ0FUSU9OICAgICAgID0gMHgwMDAxMDAwNQ0KPiA+DQo+ID4g KyAgT1VUUFVUX0RJUkVDVE9SWSAgICAgICAgPSBCdWlsZC9VZWZpQ3B1UGtnL0hvc3RUZXN0DQo+ ID4NCj4gPiArICBTVVBQT1JURURfQVJDSElURUNUVVJFUyA9IElBMzJ8WDY0DQo+ID4NCj4gPiAr ICBCVUlMRF9UQVJHRVRTICAgICAgICAgICA9IE5PT1BUDQo+ID4NCj4gPiArICBTS1VJRF9JREVO VElGSUVSICAgICAgICA9IERFRkFVTFQNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICshaW5jbHVkZQ0K PiBVbml0VGVzdEZyYW1ld29ya1BrZy9Vbml0VGVzdEZyYW1ld29ya1BrZ0hvc3QuZHNjLmluYw0K PiA+DQo+ID4gKw0KPiA+DQo+ID4gK1tMaWJyYXJ5Q2xhc3Nlc10NCj4gPg0KPiA+ICsgIE10cnJM aWJ8VWVmaUNwdVBrZy9MaWJyYXJ5L010cnJMaWIvTXRyckxpYi5pbmYNCj4gPg0KPiA+ICsNCj4g Pg0KPiA+ICtbUGNkc1BhdGNoYWJsZUluTW9kdWxlXQ0KPiA+DQo+ID4gKw0KPiBnVWVmaUNwdVBr Z1Rva2VuU3BhY2VHdWlkLlBjZENwdU51bWJlck9mUmVzZXJ2ZWRWYXJpYWJsZQ0KPiBNdHJyc3ww DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArW0NvbXBvbmVudHNdDQo+ID4NCj4gPiArICAjDQo+ID4N Cj4gPiArICAjIEJ1aWxkIEhPU1RfQVBQTElDQVRJT04gdGhhdCB0ZXN0cyB0aGUgTXRyckxpYg0K PiA+DQo+ID4gKyAgIw0KPiA+DQo+ID4gKw0KPiBVZWZpQ3B1UGtnL0xpYnJhcnkvTXRyckxpYi9V bml0VGVzdC9NdHJyTGliVW5pdFRlc3RIb3N0Lg0KPiBpbmYNCj4gPg0KPiA+IGRpZmYgLS1naXQg YS9VZWZpQ3B1UGtnL1VlZmlDcHVQa2cuY2kueWFtbA0KPiBiL1VlZmlDcHVQa2cvVWVmaUNwdVBr Zy5jaS55YW1sDQo+ID4gaW5kZXggOTllNDYwYThiMC4uNDU1OWI0MDEwNSAxMDA2NDQNCj4gPiAt LS0gYS9VZWZpQ3B1UGtnL1VlZmlDcHVQa2cuY2kueWFtbA0KPiA+ICsrKyBiL1VlZmlDcHVQa2cv VWVmaUNwdVBrZy5jaS55YW1sDQo+ID4gQEAgLTgsNiArOCwxMCBAQA0KPiA+ICAgICAgICJDb21w aWxlclBsdWdpbiI6IHsNCj4gPg0KPiA+ICAgICAgICAgICAiRHNjUGF0aCI6ICJVZWZpQ3B1UGtn LmRzYyINCj4gPg0KPiA+ICAgICAgIH0sDQo+ID4NCj4gPiArICAgICMjIG9wdGlvbnMgZGVmaW5l ZA0KPiBjaS9QbHVnaW4vSG9zdFVuaXRUZXN0Q29tcGlsZXJQbHVnaW4NCj4gPg0KPiA+ICsgICAg Ikhvc3RVbml0VGVzdENvbXBpbGVyUGx1Z2luIjogew0KPiA+DQo+ID4gKyAgICAgICAgIkRzY1Bh dGgiOiAiVGVzdC9VZWZpQ3B1UGtnSG9zdFRlc3QuZHNjIg0KPiA+DQo+ID4gKyAgICB9LA0KPiA+ DQo+ID4gICAgICAgIkNoYXJFbmNvZGluZ0NoZWNrIjogew0KPiA+DQo+ID4gICAgICAgICAgICJJ Z25vcmVGaWxlcyI6IFtdDQo+ID4NCj4gPiAgICAgICB9LA0KPiA+DQo+ID4gQEAgLTE4LDcgKzIy LDkgQEANCj4gPiAgICAgICAgICAgICAgICJVZWZpQ3B1UGtnL1VlZmlDcHVQa2cuZGVjIg0KPiA+ DQo+ID4gICAgICAgICAgIF0sDQo+ID4NCj4gPiAgICAgICAgICAgIyBGb3IgaG9zdCBiYXNlZCB1 bml0IHRlc3RzDQo+ID4NCj4gPiAtICAgICAgICAiQWNjZXB0YWJsZURlcGVuZGVuY2llcy1IT1NU X0FQUExJQ0FUSU9OIjpbXSwNCj4gPg0KPiA+ICsgICAgICAgICJBY2NlcHRhYmxlRGVwZW5kZW5j aWVzLUhPU1RfQVBQTElDQVRJT04iOlsNCj4gPg0KPiA+ICsNCj4gIlVuaXRUZXN0RnJhbWV3b3Jr UGtnL1VuaXRUZXN0RnJhbWV3b3JrUGtnLmRlYyINCj4gPg0KPiA+ICsgICAgICAgIF0sDQo+ID4N Cj4gPiAgICAgICAgICAgIyBGb3IgVUVGSSBzaGVsbCBiYXNlZCBhcHBzDQo+ID4NCj4gPiAgICAg ICAgICAgIkFjY2VwdGFibGVEZXBlbmRlbmNpZXMtDQo+IFVFRklfQVBQTElDQVRJT04iOltdLA0K PiA+DQo+ID4gICAgICAgICAgICJJZ25vcmVJbmYiOiBbXQ0KPiA+DQo+ID4gQEAgLTMwLDYgKzM2 LDEwIEBADQo+ID4gICAgICAgICAgICAgICAiVWVmaUNwdVBrZy9SZXNldFZlY3Rvci9WdGYwL1Z0 ZjAuaW5mIg0KPiA+DQo+ID4gICAgICAgICAgIF0NCj4gPg0KPiA+ICAgICAgIH0sDQo+ID4NCj4g PiArICAgICJIb3N0VW5pdFRlc3REc2NDb21wbGV0ZUNoZWNrIjogew0KPiA+DQo+ID4gKyAgICAg ICAgIklnbm9yZUluZiI6IFsiIl0sDQo+ID4NCj4gPiArICAgICAgICAiRHNjUGF0aCI6ICJUZXN0 L1VlZmlDcHVQa2dIb3N0VGVzdC5kc2MiDQo+ID4NCj4gPiArICAgIH0sDQo+ID4NCj4gPiAgICAg ICAiR3VpZENoZWNrIjogew0KPiA+DQo+ID4gICAgICAgICAgICJJZ25vcmVHdWlkTmFtZSI6IFsi U2VjQ29yZSIsDQo+ICJSZXNldFZlY3RvciJdLCAjIEV4cGVjdGVkIGR1cGxpY2F0aW9uIGZvcg0K PiBnRWZpRmlybXdhcmVWb2x1bWVUb3BGaWxlR3VpZA0KPiA+DQo+ID4gICAgICAgICAgICJJZ25v cmVHdWlkVmFsdWUiOiBbXSwNCj4gPg0KPiANCj4gDQo+IA0KPiANCj4gDQo+IA0KDQo=