From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id E4107740038 for ; Mon, 26 Feb 2024 13:44:02 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=/gtqh8gBl5D8m8aze6xWVqQvSl8WAgGqYTTDNpWzD6E=; c=relaxed/simple; d=groups.io; h=ARC-Seal:ARC-Message-Signature:ARC-Authentication-Results:From:To:CC:Subject:Thread-Topic:Thread-Index:Date:Message-ID:References:In-Reply-To:Accept-Language:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Language:Content-Type:Content-Transfer-Encoding; s=20140610; t=1708955041; v=1; b=qGqaBxb0BMJjIr2bIukx39IlLfQ011ORYts4RnlBhDVb3H+7M7ZLGpQu8HDy3BzaneObZ6tY vh5mAtGVos2lwyC6ReMvtWE8TXPrvGpSQtAvzj3yIkJQxT9HeoD3/jXpfswnkOW96EdOTMG9pqT Bm7KNF1gZo0lACPdGaYaMD+U= X-Received: by 127.0.0.2 with SMTP id 7lDKYY7687511xqKnQnfCTJa; Mon, 26 Feb 2024 05:44:01 -0800 X-Received: from NAM11-CO1-obe.outbound.protection.outlook.com (NAM11-CO1-obe.outbound.protection.outlook.com [40.107.220.56]) by mx.groups.io with SMTP id smtpd.web10.20496.1708955040715506852 for ; Mon, 26 Feb 2024 05:44:01 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Zn9mKDddNENsPzjllj5HBFeiRlgHcAE4m1p5w65uPmGjl6TF2XJH6bkjHjaqWAx7p+0rU+fEbnC9ps+PLs+QoOlhc02s+wJFXeTFoKjsbZC4ih6gfZW4deSY+47rDjhimNiFuUSOfMfQaVyfYSEnrbZwpd3UrGjzLYlJJegjZYoA5wW40W/0NByjdod9gGMu/haRNwQ5Kn2r1pnffPy9DLmlfqC+8v7RYV3k2zyvH8fO/Ueo6Fh5Gch+2LSzPv5rpEZkDCewpFPoSXG4pD1RrmYs0vXw8ZpmYBRMoweT3Z7ro0oCMUFQV7CTHI8IZfP3H8P/KLRetcebSY1CzITYOA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=7LiFoSeqqJApdirTJrZZVrQEJHZIMTztEUdrZy5aVvw=; b=TO8JeZI5J09Y5fkOGBI9VRZm/O5VRyhZxUeR7ElPsUFoR6ILJezNofqNntlMRawEMEXqCNM8yJomhQ2Z4iSFAkfFxk7Xax61JazjcgRWDmXmcV15J1UkK14IPdzP2dyKv6bOp+3X3Gn/VM4zBdcAjfreu8OzWuhD8Hzd18xfppIv3jUqlsXaHim/mItXI6KatsQiesc4Syx+/DoVcyMTroMjUCfIVIkdt0ao8dzK6zkMbAjiZpqTS0qA4kBFKa1/edl61LGC8B9fIX08EExzSmExxkwBBXPcWrCk1wGhOvHxTHbdwu4jHembjaFAGRlfc1U7+OnVjVVGNGZib2hTXA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none X-Received: from MW4PR12MB7031.namprd12.prod.outlook.com (2603:10b6:303:1ef::6) by CH0PR12MB5331.namprd12.prod.outlook.com (2603:10b6:610:d6::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7316.34; Mon, 26 Feb 2024 13:43:49 +0000 X-Received: from MW4PR12MB7031.namprd12.prod.outlook.com ([fe80::aa79:3ab0:fbcd:d61b]) by MW4PR12MB7031.namprd12.prod.outlook.com ([fe80::aa79:3ab0:fbcd:d61b%5]) with mapi id 15.20.7316.034; Mon, 26 Feb 2024 13:43:49 +0000 From: "Nickle Wang via groups.io" To: Mike Maslenkin CC: "devel@edk2.groups.io" , Igor Kulchytskyy , Abner Chang , Nick Ramirez Subject: Re: [edk2-devel] [PATCH v2 2/6] RedfishPkg: implement Redfish HTTP protocol Thread-Topic: [edk2-devel] [PATCH v2 2/6] RedfishPkg: implement Redfish HTTP protocol Thread-Index: AQHaZkuGvyZ6S8dclkaty1tyFdt2IbEX82swgAAkCYCABIrlcA== Date: Mon, 26 Feb 2024 13:43:49 +0000 Message-ID: References: <20240222091122.644-1-nicklew@nvidia.com> <9A76E719-1472-4E4C-A480-B38C7D305AAF@gmail.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MW4PR12MB7031:EE_|CH0PR12MB5331:EE_ x-ms-office365-filtering-correlation-id: 4455d709-c4c6-42e7-9020-08dc36d0f63e x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam-message-info: veaLSJuYu8s8/5Dix5wu2ooxAsuohjiD+xSE5znlTtPJxCXWgGZOOrCTMzr2qEKiR7QgqXshLQAovEJxL18teoQomWqaCRoCxj/+DKOLas8ylDXvqu5m2Qh6GWlC5JEJ5O9dGGzsz6/0Vo7j7hBbD4nJ161O1MYZckB6BFFvxdYoTfiMgNNppzSuXAkILz8hJ+IKSK0762YTfDZoDA2tzyvD0mKzQj1PSPhudXfLjqpQIa4uyennhVaU9UY5hWbbWBgb2x3iePH+V33H+8N1JytQMLo7RVLqvH1SKnVbfR6iEDzbslajMTePwy5cns5J5Yve2u2cWA1MTBrr+5polvKSbZ2N0OUt8Cnc4vgykCdeS94PvR7o3N8tEFPdCADWTim9qGUJJgj4IyoisOiO4BEwrD72AEHi0IoNzjQCfqGH4w/0dh0al5KzV2Di3F0MR6h1VHFqDtwtnkxwMsuiIxolp9Iy97xkOC57DAqDIslDXj0e1MzCDvmo9hN8A69yhnlMyPgd8Hm9zk66yJb9Xhj7BSVzZEIX28Hl/odaODOgQ0/12UatA6WYGLvfLavLD9ReYKM4eFfDde34kzpJmmpSfXNy1hOCwjn5we0VuEGqs9L/I3QTbU+CEvEMsg7TGdPMTu4rhb/I1e3CfEA6pkMqmFDX0LtdiJFkpEzTa2wzfnNvKrXB2rJ1zmhd0+dne5nckmkDOEmPhQZDJ8qMsg== x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?K1VRM0hha1UyZGd0MS9kVS92aVdURWpTQmlTWEpPRm5tU21rRzNoR3N4NlVO?= =?utf-8?B?SkxGdC82R2ZoQVlkamYzTkl6d2Y0UWpWSlo5Z1JFUUgrWGpJdUNJY0NZdE5j?= =?utf-8?B?d2ZkMGJFZlhBNWZYRVpFWkhSdW13YUUrcDByaXpCb0dFWGFlS1Z4aDFCand1?= =?utf-8?B?Z0Z6cVdDMUlxRWlxRURTU2FRd2VqOUpxeHdQeENNUGdML1grekNlTHBFVW5m?= =?utf-8?B?aUNYN2Iyb0wzbHlIdnZZZ2pJVTJOdHlEQjFkVVVQdXU1azJDQkR0Rm50YlZp?= =?utf-8?B?VHlUQ0tSZFRCQ1pid21lZGFleDl6WjVZTTd0RUtCd2VyRVQ3OHMvTVQrTHBw?= =?utf-8?B?M0tNek1hRGxOWmltWlZNK1MvVUY1M3BuNjlRN3lqWGx2TzRSYUEvZHJyaTVW?= =?utf-8?B?S2kyZ0YyV0RnaDFyejV5Njc1N3VubHpuOEthUmxTVlBaNjBCRDkrM1JwYlFO?= =?utf-8?B?RVRpNkJ0QVZjbEtzTlNteWlxNmtWZGdwSUVuZERuMHBieXRuM25ILyswci9w?= =?utf-8?B?VHl0R3c4akFVWnQ1VWFsZXMybjJwbzVWNHV4UHBQbXRWbEpoWGFZN2Mvd1pw?= =?utf-8?B?dmcxL0pjbjAzVXNIS0lSdFltNFJ3YnVSY1ExM2hvWFF6c0NaTzl1ZGtzMm0w?= =?utf-8?B?T3Z3RTc0RS9Ed3lDMnZ5QjNsalRFalhIU29KRHFJSUZvQzB2UklRYzBxVFYw?= =?utf-8?B?M2ZLbG9heVExbWF0ZTVVYzZMSmVPZ0lMdzFMUzJUSVVNUXR1Z2tSczNibytj?= =?utf-8?B?Sjkxb2xEbXA2WTJmejFQOFZSUzZ2Q2dsOFVtN3FRY1gzSG9QTEd5WDYwZHlu?= =?utf-8?B?K2RlYStwS2E0MGhQUEYzbmJ1UWJlVndxdGVvV0poUWtqZFdONGcwdlJmUlpl?= =?utf-8?B?YlZ4SnU3Yi9zWmx6S0lCRE4xakFtTmVJaWp5b1RIZ01ndXNVQ1hjUTgzRVh1?= =?utf-8?B?aUNxdzdud29QYWQvVjRYQlZWK0dYYjZFbUdaUUNhQkF4YTMvbkl3Y3VlQTJQ?= =?utf-8?B?L1BTclVyWWJ0dnBSTmtKTWlhaVI1S015MmREazEzdFc5c0dYVE5HN25VcEUw?= =?utf-8?B?OUNxelFxV3RqOHZ2ams1ZmhVdXI0RTZhNTNtK09Vdm5UOXhPd0NQSytuQTdL?= =?utf-8?B?MU94c1RmSHdSZXlZNjdxMzJJRE11NUo2T3RIUEZRQm8xRkFHVXBZWldYTEwv?= =?utf-8?B?S01ZNEg2OG83NDVjV2I3UjVrc2ExbUMvd213V1p6Rm81YkxkUEp2dTc5NWZ1?= =?utf-8?B?NG9FV29FUUw3RlIvdTlZVE1uYlhhUUQzMUZ5Uk9vZzVONlJRcHBCNUxxTnh4?= =?utf-8?B?MWxOVHVVb05ITGtKd3hjeVNQejdOUWJoZDIrcnlYekFFZXQ2SWRHTGNoMG1Q?= =?utf-8?B?b0Q1aC9KYlNueU9FYkpVSVpwSGt2V1lzdS9CZlVRbVNDSUZ0cGNqcnFrNnNZ?= =?utf-8?B?RTFrRmdDTXZ1Z3pOYVJGMGgzTHNORzAwdWhILzBtaktyNUlzTVBDRUdIT25t?= =?utf-8?B?NnArNlF0NkdFZzk5cDhlZnFRODJPbXhJSDlhaXVMTHpqUk44YUxVVkR1T2l3?= =?utf-8?B?YTV6WTU5NTRqaWw2bzB3bGdoT050R1EzcmdLOURQSHowVnlnN1FUMFE2eU1w?= =?utf-8?B?ZW1BenZiK3F2NWJTNWV3MTRuci9pT3BZNW43ZENQZk9HODV1MmMrMG9RWXla?= =?utf-8?B?U0FPV2UzRUNxU3pUY3I2NldPVldQb3hYUXNDQlp2M2NodHhISmdTa2JFUU9j?= =?utf-8?B?ZFJxZnRvZFJ4RDBQM052OXhvaksvUTY3SDFzc2lFcUpqSWtLMHd4bGVLcmRr?= =?utf-8?B?TjZLNGdRZldwSVhEVGpXTVpkWld3N3RHblMrT0pjN2FHR3V2S1RSM1pQeGo4?= =?utf-8?B?Y2lJd2xGSTlnWkRadWpSMTZZQnBCUE54VjVtRHgrVmJQWFJ0RG94WWUvK0Z4?= =?utf-8?B?VjdzOVdWQ0Irbzh3TVNQWHVWczd3WHBNUEJ0c0haYXlsU2lHQ0Q2bkt6Z3Uw?= =?utf-8?B?cUVKdmg0aHFaQUdmbjQ3aWRRUVVxT3RUaG5Wa0JTcGllUVB5VkNBanMzT1Rq?= =?utf-8?B?ckZuTm1XWEx4ZHkvNVpEWnlFa0xMNXlqYlcyTDdYTmtqTUhWeHRFdG43c0cw?= =?utf-8?B?YnVpdW9ZT3djWGFlbTd1QUtxYnl6c2laSzV6dHArdTU0UWZtdUk3MGxoK09i?= =?utf-8?Q?NF3iIQkv84zX01z/5MQLzGjR+re5Ex9pDuGHoqQTVjQu?= MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW4PR12MB7031.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4455d709-c4c6-42e7-9020-08dc36d0f63e X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Feb 2024 13:43:49.2075 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 7igs1E5GNFjTH8YqaikaChLFlDaGYUtWuLM6FduVLH1FrjG+lsKuy+ZTcsQJ4oPE+ie/kXxwij2f2me0hy6zVA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH0PR12MB5331 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,nicklew@nvidia.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: EMRsGZvLaVXizhHEluEfYFC0x7686176AA= Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b=qGqaBxb0; dmarc=pass (policy=none) header.from=groups.io; spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io; arc=reject ("signature check failed: fail, {[1] = sig:microsoft.com:reject}") SGkgTWlrZSwNCg0KPiBTbyBmaW5hbGx5IHdlIGhhdmUNCj4gSHR0cEZyZWVIZWFkZXJGaWVsZHMg KFJlc3BvbnNlLT5IZWFkZXJzLCBSZXNwb25zZS0+SGVhZGVyQ291bnQpOw0KPiBidXQgUmVzcG9u c2UtPkhlYWRlckNvdW50IGRvZXMgbm90IGNvdW50IHBhcnRpYWxseSBhbGxvY2F0ZWQgZWxlbWVu dHMuIFJpZ2h0Pw0KPg0KPiBUbyBmaXggdGhpcywgaXQgaXMgcmVxdWlyZWQgdG8gc2V0DQo+ICpE c3RIZWFkZXJDb3VudCA9IFNyY0hlYWRlckNvdW50IHVuY29uZGl0aW9uYWxseSByaWdodCBhZnRl cg0KPiBEc3RIZWFkZXJzICBhbGxvY2F0aW9uLCBhbmQgSHR0cEZyZWVIZWFkZXJGaWVsZHMoKSB3 aWxsIGRvIHRoZSB3b3JrDQo+IHRoZW4uDQoNCkkgZm9sbG93IHlvdXIgc3VnZ2VzdGlvbiB0byB1 cGRhdGUgRHN0SGVhZGVyQ291bnQgcmlnaHQgYWZ0ZXIgRHN0SGVhZGVycyBpcyBhbGxvY2F0ZWQu ICBTbywgSHR0cEZyZWVIZWFkZXJGaWVsZHMgY2FuIHJlbGVhc2UgaGVhZGVycyBjb3JyZWN0bHku IEkgYWxzbyBjcmVhdGUgYSBtYWNybyB0byBpbXBsZW1lbnRlZCBBc2NpaVN0ckNweS4gUGxlYXNl IGNoZWNrIGJlbG93IGxpbmsgdG8gc2VlIG15IGNoYW5nZXM6DQpodHRwczovL2dpdGh1Yi5jb20v dGlhbm9jb3JlL2VkazIvY29tcGFyZS8wZjM5MWIxYzJmOTg4ZDkwYTNhYzcyM2IzMTRhYzI4YmE3 YjBiOGRmLi5mMGZhMWI4ZmRjZDkzM2JlYjUyZmQzMTI3YzI0NzY0NDNjMDBlZjhkDQoNClRoYW5r cywNCk5pY2tsZQ0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IE1pa2Ug TWFzbGVua2luIDxtaWtlLm1hc2xlbmtpbkBnbWFpbC5jb20+DQo+IFNlbnQ6IFNhdHVyZGF5LCBG ZWJydWFyeSAyNCwgMjAyNCAxMjowNSBBTQ0KPiBUbzogTmlja2xlIFdhbmcgPG5pY2tsZXdAbnZp ZGlhLmNvbT4NCj4gQ2M6IGRldmVsQGVkazIuZ3JvdXBzLmlvOyBJZ29yIEt1bGNoeXRza3l5IDxp Z29ya0BhbWkuY29tPjsgQWJuZXIgQ2hhbmcNCj4gPGFibmVyLmNoYW5nQGFtZC5jb20+OyBOaWNr IFJhbWlyZXogPG5yYW1pcmV6QG52aWRpYS5jb20+DQo+IFN1YmplY3Q6IFJlOiBbZWRrMi1kZXZl bF0gW1BBVENIIHYyIDIvNl0gUmVkZmlzaFBrZzogaW1wbGVtZW50IFJlZGZpc2ggSFRUUA0KPiBw cm90b2NvbA0KPg0KPiBFeHRlcm5hbCBlbWFpbDogVXNlIGNhdXRpb24gb3BlbmluZyBsaW5rcyBv ciBhdHRhY2htZW50cw0KPg0KPg0KPiBIaSBOaWNrbGUsDQo+DQo+IE9uIEZyaSwgRmViIDIzLCAy MDI0IGF0IDU6MDfigK9QTSBOaWNrbGUgV2FuZyA8bmlja2xld0BudmlkaWEuY29tPiB3cm90ZToN Cj4gPg0KPiA+IFRoYW5rcyBmb3IgeW91ciByZXZpZXcsIE1pa2UuDQo+ID4NCj4gPiA+ICVzL1Jl c3JvdWNlL1Jlc291cmNlLyB0aGlzIGNvbWVzIGZyb20gUmVkZmlzaENsaWVudCBhdXRvZ2VuZXJh dGVkIGZpbGVzLi4uDQo+ID4NCj4gPiBUeXBvcyBhcmUgQWRkcmVzc2VkLiBJIHdpbGwgc2VuZCB2 MyBsYXRlci4NCj4gPg0KPiA+ID4+ICtPTl9FUlJPUjoNCj4gPiA+PiArDQo+ID4gPj4gKyAgUmVs ZWFzZVJlZGZpc2hQYXlsb2FkIChOZXdQYXlsb2FkKTsNCj4gPiA+PiArDQo+ID4gPg0KPiA+ID4g TmV3UGF5bG9hZC0+U2VydmljZSAgaXMgbGVha2VkDQo+ID4NCj4gPiBOZXdQYXlsb2FkLT5TZXJ2 aWNlIHdpbGwgYmUgcmVsZWFzZWQgaW4gUmVsZWFzZVJlZGZpc2hQYXlsb2FkIGZ1bmN0aW9uLg0K PiBSZWxlYXNlUmVkZmlzaFNlcnZpY2UoKSB3aWxsIGJlIGNhbGxlZCBpbiBSZWxlYXNlUmVkZmlz aFBheWxvYWQoKSB3aGVuIFNlcnZpY2UgaXMNCj4gbm90IE5VTEwuIFBsZWFzZSBsZXQgbWUga25v dyBpZiBJIG1pc3VuZGVyc3RhbmQgeW91ciBjb21tZW50Lg0KPg0KPiBPaCwgSSBzZWUuDQo+IEkg bWlzc2VkIFJlbGVhc2VSZWRmaXNoU2VydmljZSgpIGNhbGwuDQo+DQo+ID4NCj4gPg0KPiA+ID4+ ICsgICAgKCpEc3RIZWFkZXJzKVtJbmRleF0uRmllbGRWYWx1ZSA9IEFsbG9jYXRlQ29weVBvb2wg KEFzY2lpU3RyU2l6ZQ0KPiAoU3JjSGVhZGVyc1tJbmRleF0uRmllbGRWYWx1ZSksIFNyY0hlYWRl cnNbSW5kZXhdLkZpZWxkVmFsdWUpOw0KPiA+ID4+ICsgICAgaWYgKCgqRHN0SGVhZGVycylbSW5k ZXhdLkZpZWxkVmFsdWUgPT0gTlVMTCkgew0KPiA+ID4+ICsgICAgICByZXR1cm4gRUZJX09VVF9P Rl9SRVNPVVJDRVM7DQo+ID4gPg0KPiA+ID4gTG9va3MgbGlrZSBvcmV2aW91cyBhbGxvY2F0aW9u cyBsZWFrZWQuDQo+ID4gPiBEaWRuJ3QgeW91IHRoaW5rIHRvIGltcGxlbWVudCBzbXRoIGxpa2Ug dGhpcyAuLi4uPw0KPiA+DQo+ID4gWWVzLCBJIGNhbiBpbXBsZW1lbnQgQXNjaWlTdHJEdXAoKSBo ZXJlLiBCdXQgdGhpcyB3b24ndCBmaXggdGhlIGFsbG9jYXRpb24gbGVha2luZywNCj4gcmlnaHQ/ IFRvIGZpeCBhbGxvY2F0aW9uIGxlYWtpbmcsIG15IGlkZWEgaXMgdG8gY2FsbCBIdHRwRnJlZUhl YWRlckZpZWxkcygpIGJlZm9yZQ0KPiByZXR1cm5pbmcgRUZJX09VVF9PRl9SRVNPVVJDRVMuICBI dHRwRnJlZUhlYWRlckZpZWxkcygpIHdpbGwgc2tpcCBOVUxMDQo+IEZpZWxkTmFtZSBhbmQgRmll bGRWYWx1ZSBhdXRvbWF0aWNhbGx5LiBEb2VzIHRoaXMgc291bmQgZ29vZCB0byB5b3U/DQo+ID4N Cj4gPiBJIHRoaW5rIEkgY292ZXJlZCBhbGwgeW91ciBjb21tZW50cywgYnV0IEkgYW0gYmFkIHRv IGZpbmQgcmV2aWV3IGNvbW1lbnQgaW4NCj4gZW1haWwuIElmIEkgbWlzc2VkIGFueSByZXZpZXcg Y29tbWVudCwgcGxlYXNlIGtpbmRseSBsZXQgbWUga25vdy4gVGhhbmtzIQ0KPg0KPiBBc2NpaVN0 ckR1cCgpIGlzIG5vdCBoYW5keSBoZXJlLCBiZWNhdXNlIGl0IHJlcXVpcmVzIHByZWFsbG9jYXRl ZCBidWZmZXIuDQo+IEkgbWVudGlvbmVkIGFib3V0IGZ1bmN0aW9uIHNpbWlsYXIgdG8gU3RyRHVw IGp1c3QgdG8gZ2V0IHNob3J0ZXIgYW5kDQo+IGNsZWFuZXIgY29kZS4NCj4NCj4gSSB0aGluayBJ IHVuZGVyc3Rvb2QgdGhlIGlkZWEgbm93Lg0KPiBJJ20ganVzdCBsb29raW5nIGludG8gY29kZSBh bmQgYXNzdW1lIHRoYXQgaWYgZnVuY3Rpb24gcmV0dXJucyBhbg0KPiBlcnJvciwgaXQgbXVzdCBk ZWFsbG9jYXRlL2NsZWFudXAgcmVzb3VyY2VzLg0KPg0KPiBTbyBmaW5hbGx5IHdlIGhhdmUNCj4g SHR0cEZyZWVIZWFkZXJGaWVsZHMgKFJlc3BvbnNlLT5IZWFkZXJzLCBSZXNwb25zZS0+SGVhZGVy Q291bnQpOw0KPiBidXQgUmVzcG9uc2UtPkhlYWRlckNvdW50IGRvZXMgbm90IGNvdW50IHBhcnRp YWxseSBhbGxvY2F0ZWQgZWxlbWVudHMuIFJpZ2h0Pw0KPg0KPiBUbyBmaXggdGhpcywgaXQgaXMg cmVxdWlyZWQgdG8gc2V0DQo+ICpEc3RIZWFkZXJDb3VudCA9IFNyY0hlYWRlckNvdW50IHVuY29u ZGl0aW9uYWxseSByaWdodCBhZnRlcg0KPiBEc3RIZWFkZXJzICBhbGxvY2F0aW9uLCBhbmQgSHR0 cEZyZWVIZWFkZXJGaWVsZHMoKSB3aWxsIGRvIHRoZSB3b3JrDQo+IHRoZW4uDQo+DQo+IFJlZ2Fy ZHMsDQo+IE1pa2UuDQo+DQo+ID4NCj4gPiBSZWdhcmRzLA0KPiA+IE5pY2tsZQ0KPiA+DQo+ID4g PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gRnJvbTogTWlrZSBNYXNsZW5raW4g PG1pa2UubWFzbGVua2luQGdtYWlsLmNvbT4NCj4gPiA+IFNlbnQ6IEZyaWRheSwgRmVicnVhcnkg MjMsIDIwMjQgNzoyOSBQTQ0KPiA+ID4gVG86IGRldmVsQGVkazIuZ3JvdXBzLmlvOyBOaWNrbGUg V2FuZyA8bmlja2xld0BudmlkaWEuY29tPg0KPiA+ID4gQ2M6IElnb3IgS3VsY2h5dHNreXkgPGln b3JrQGFtaS5jb20+OyBBYm5lciBDaGFuZw0KPiA8YWJuZXIuY2hhbmdAYW1kLmNvbT47DQo+ID4g PiBOaWNrIFJhbWlyZXogPG5yYW1pcmV6QG52aWRpYS5jb20+DQo+ID4gPiBTdWJqZWN0OiBSZTog W2VkazItZGV2ZWxdIFtQQVRDSCB2MiAyLzZdIFJlZGZpc2hQa2c6IGltcGxlbWVudCBSZWRmaXNo IEhUVFANCj4gPiA+IHByb3RvY29sDQo+ID4gPg0KPiA+ID4gRXh0ZXJuYWwgZW1haWw6IFVzZSBj YXV0aW9uIG9wZW5pbmcgbGlua3Mgb3IgYXR0YWNobWVudHMNCj4gPiA+DQo+ID4gPg0KPiA+ID4g SGkgTmlja2xlLA0KPiA+ID4NCj4gPiA+ICVzL1Jlc3JvdWNlL1Jlc291cmNlLyB0aGlzIGNvbWVz IGZyb20gUmVkZmlzaENsaWVudCBhdXRvZ2VuZXJhdGVkIGZpbGVzLi4uDQo+ID4gPiB0aGVyZSBh cmUgdGhvdXNhbmRzIG9mICJSZXNyb3VjZSIgdHlwb3MuDQo+ID4gPg0KPiA+ID4gcGxlYXNlLCBm aW5kIG15IG1pbm9yIG5vdGVzIGJlbG93Og0KPiA+ID4NCj4gPiA+DQo+ID4gPiBPbiBUaHUsIEZl YiAyMiwgMjAyNCBhdCAxMjoxMeKAr1BNIE5pY2tsZSBXYW5nIHZpYSBncm91cHMuaW8NCj4gPiA+ IDxuaWNrbGV3PW52aWRpYS5jb21AZ3JvdXBzLmlvPiB3cm90ZToNCj4gPiA+ID4NCj4gPiA+ID4g aW1wbGVtZW50IFJlZGZpc2ggSFRUUCBwcm90b2NvbCBkcml2ZXIuDQo+ID4gPiA+DQo+ID4gPiA+ IFNpZ25lZC1vZmYtYnk6IE5pY2tsZSBXYW5nIDxuaWNrbGV3QG52aWRpYS5jb20+DQo+ID4gPiA+ IENvLWF1dGhvcmVkLWJ5OiBJZ29yIEt1bGNoeXRza3l5IDxpZ29ya0BhbWkuY29tPg0KPiA+ID4g PiBDYzogQWJuZXIgQ2hhbmcgPGFibmVyLmNoYW5nQGFtZC5jb20+DQo+ID4gPiA+IENjOiBJZ29y IEt1bGNoeXRza3l5IDxpZ29ya0BhbWkuY29tPg0KPiA+ID4gPiBDYzogTmljayBSYW1pcmV6IDxu cmFtaXJlekBudmlkaWEuY29tPg0KPiA+ID4gPiAtLS0NCj4gPiA+ID4gUmVkZmlzaFBrZy9SZWRm aXNoUGtnLmRlYyAgICAgICAgICAgICAgICAgICAgIHwgICAgNyArLQ0KPiA+ID4gPiBSZWRmaXNo UGtnL1JlZGZpc2hDb21wb25lbnRzLmRzYy5pbmMgICAgICAgICAgfCAgICAzICstDQo+ID4gPiA+ IFJlZGZpc2hQa2cvUmVkZmlzaFBrZy5kc2MgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKw0K PiA+ID4gPiBSZWRmaXNoUGtnL1JlZGZpc2hIdHRwRHhlL1JlZGZpc2hIdHRwRHhlLmluZiAgfCAg IDczICsNCj4gPiA+ID4gUmVkZmlzaFBrZy9SZWRmaXNoSHR0cER4ZS9SZWRmaXNoSHR0cERhdGEu aCAgIHwgIDI1NiArKysrDQo+ID4gPiA+IFJlZGZpc2hQa2cvUmVkZmlzaEh0dHBEeGUvUmVkZmlz aEh0dHBEeGUuaCAgICB8ICAgNDQgKw0KPiA+ID4gPiAuLi4vUmVkZmlzaEh0dHBEeGUvUmVkZmlz aEh0dHBPcGVyYXRpb24uaCAgICAgfCAgIDc2ICsNCj4gPiA+ID4gUmVkZmlzaFBrZy9SZWRmaXNo SHR0cER4ZS9SZWRmaXNoSHR0cERhdGEuYyAgIHwgIDY2NyArKysrKysrKw0KPiA+ID4gPiBSZWRm aXNoUGtnL1JlZGZpc2hIdHRwRHhlL1JlZGZpc2hIdHRwRHhlLmMgICAgfCAxMzQ0ICsrKysrKysr KysrKysrKysrDQo+ID4gPiA+IC4uLi9SZWRmaXNoSHR0cER4ZS9SZWRmaXNoSHR0cE9wZXJhdGlv bi5jICAgICB8ICA2OTMgKysrKysrKysrDQo+ID4gPiA+IFJlZGZpc2hQa2cvUmVkZmlzaC5mZGYu aW5jICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKy0NCj4gPiA+ID4gMTEgZmlsZXMgY2hhbmdl ZCwgMzE2NCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQ0KPiA+ID4gPiBjcmVhdGUgbW9k ZSAxMDA2NDQgUmVkZmlzaFBrZy9SZWRmaXNoSHR0cER4ZS9SZWRmaXNoSHR0cER4ZS5pbmYNCj4g PiA+ID4gY3JlYXRlIG1vZGUgMTAwNjQ0IFJlZGZpc2hQa2cvUmVkZmlzaEh0dHBEeGUvUmVkZmlz aEh0dHBEYXRhLmgNCj4gPiA+ID4gY3JlYXRlIG1vZGUgMTAwNjQ0IFJlZGZpc2hQa2cvUmVkZmlz aEh0dHBEeGUvUmVkZmlzaEh0dHBEeGUuaA0KPiA+ID4gPiBjcmVhdGUgbW9kZSAxMDA2NDQgUmVk ZmlzaFBrZy9SZWRmaXNoSHR0cER4ZS9SZWRmaXNoSHR0cE9wZXJhdGlvbi5oDQo+ID4gPiA+IGNy ZWF0ZSBtb2RlIDEwMDY0NCBSZWRmaXNoUGtnL1JlZGZpc2hIdHRwRHhlL1JlZGZpc2hIdHRwRGF0 YS5jDQo+ID4gPiA+IGNyZWF0ZSBtb2RlIDEwMDY0NCBSZWRmaXNoUGtnL1JlZGZpc2hIdHRwRHhl L1JlZGZpc2hIdHRwRHhlLmMNCj4gPiA+ID4gY3JlYXRlIG1vZGUgMTAwNjQ0IFJlZGZpc2hQa2cv UmVkZmlzaEh0dHBEeGUvUmVkZmlzaEh0dHBPcGVyYXRpb24uYw0KPiA+ID4gPg0KPiA+ID4gPiBk aWZmIC0tZ2l0IGEvUmVkZmlzaFBrZy9SZWRmaXNoUGtnLmRlYyBiL1JlZGZpc2hQa2cvUmVkZmlz aFBrZy5kZWMNCj4gPiA+ID4gaW5kZXggOWI0MjRlZmRmMy4uMTE0ZjhkMmFkOCAxMDA2NDQNCj4g PiA+ID4gLS0tIGEvUmVkZmlzaFBrZy9SZWRmaXNoUGtnLmRlYw0KPiA+ID4gPiArKysgYi9SZWRm aXNoUGtnL1JlZGZpc2hQa2cuZGVjDQo+ID4gPiA+IEBAIC0xNTcsOCArMTU3LDExIEBADQo+ID4g PiA+ICAgIyBzZXQgdG8gRUZJX1JFU1RfRVhfUFJPVE9DT0wuDQo+ID4gPiA+ICAgIw0KPiA+ID4g Pg0KPiA+ID4NCj4gZ0VmaVJlZGZpc2hQa2dUb2tlblNwYWNlR3VpZC5QY2RSZWRmaXNoU2VuZFJl Y2VpdmVUaW1lb3V0fDUwMDB8VUlOVDMyfDANCj4gPiA+IHgwMDAwMTAwOQ0KPiA+ID4gPiAtICAj IyBUaGlzIGlzIHVzZWQgdG8gZW5hYmxlIEhUVFAgY29udGVudCBlbmNvZGluZyBvbiBSZWRmaXNo DQo+IGNvbW11bmljYXRpb24uDQo+ID4gPiA+IC0NCj4gPiA+DQo+IGdFZmlSZWRmaXNoUGtnVG9r ZW5TcGFjZUd1aWQuUGNkUmVkZmlzaFNlcnZpY2VDb250ZW50RW5jb2Rpbmd8VFJVRXxCT09MRQ0K PiA+ID4gQU58MHgwMDAwMTAwQQ0KPiA+ID4gPiArICAjDQo+ID4gPiA+ICsgICMgVGhpcyBQQ0Qg c3RyaW5nIGlzIGludHJvZHVjZWQgZm9yIHBsYXRmb3JtIGRldmVsb3BlciB0byBzZXQgdGhlIGVu Y29kaW5nDQo+ID4gPiBtZXRob2Qgc3VwcG9ydGVkIGJ5IEJNQyBSZWRmaXNoLg0KPiA+ID4gPiAr ICAjIEN1cnJlbnRseSBvbmx5ICJOb25lIiBhbmQgImd6aXAiIGFyZSBzdXBwb3J0ZWQuDQo+ID4g PiA+ICsgICMNCj4gPiA+ID4gKw0KPiA+ID4NCj4gZ0VmaVJlZGZpc2hQa2dUb2tlblNwYWNlR3Vp ZC5QY2RSZWRmaXNoU2VydmljZUNvbnRlbnRFbmNvZGluZ3wiTm9uZSJ8Vk9JRA0KPiA+ID4gKnww eDAwMDAxMDBBDQo+ID4gPiA+ICAgIw0KPiA+ID4gPiAgICMgVXNlIGJlbG93IFBDRHMgdG8gY29u dHJvbCBSZWRmaHMgSFRUUCBwcm90b2NvbC4NCj4gPiA+ID4gICAjDQo+ID4gPiA+IGRpZmYgLS1n aXQgYS9SZWRmaXNoUGtnL1JlZGZpc2hDb21wb25lbnRzLmRzYy5pbmMNCj4gPiA+IGIvUmVkZmlz aFBrZy9SZWRmaXNoQ29tcG9uZW50cy5kc2MuaW5jDQo+ID4gPiA+IGluZGV4IDQ2NGZmYzg2MDYu LmQ2YzViNzNkN2YgMTAwNjQ0DQo+ID4gPiA+IC0tLSBhL1JlZGZpc2hQa2cvUmVkZmlzaENvbXBv bmVudHMuZHNjLmluYw0KPiA+ID4gPiArKysgYi9SZWRmaXNoUGtnL1JlZGZpc2hDb21wb25lbnRz LmRzYy5pbmMNCj4gPiA+ID4gQEAgLTcsNyArNyw3IEBADQo+ID4gPiA+ICMgIlJlZGZpc2hEZWZp bmVzLmRzYy5pbmMiLg0KPiA+ID4gPiAjDQo+ID4gPiA+ICMgKEMpIENvcHlyaWdodCAyMDIwLTIw MjEgSGV3bGV0dCBQYWNrYXJkIEVudGVycHJpc2UgRGV2ZWxvcG1lbnQgTFA8QlI+DQo+ID4gPiA+ IC0jIENvcHlyaWdodCAoYykgMjAyMywgTlZJRElBIENPUlBPUkFUSU9OICYgQUZGSUxJQVRFUy4g QWxsIHJpZ2h0cw0KPiByZXNlcnZlZC4NCj4gPiA+ID4gKyMgQ29weXJpZ2h0IChjKSAyMDIzLTIw MjQsIE5WSURJQSBDT1JQT1JBVElPTiAmIEFGRklMSUFURVMuIEFsbCByaWdodHMNCj4gPiA+IHJl c2VydmVkLg0KPiA+ID4gPiAjDQo+ID4gPiA+ICMgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPiA+ID4gIw0KPiA+ID4gPiBAQCAtMjgsNCArMjgsNSBA QA0KPiA+ID4gPiAgIFJlZGZpc2hQa2cvUmVkZmlzaENvbmZpZ0hhbmRsZXIvUmVkZmlzaENvbmZp Z0hhbmRsZXJEcml2ZXIuaW5mDQo+ID4gPiA+ICAgUmVkZmlzaFBrZy9SZWRmaXNoUGxhdGZvcm1D b25maWdEeGUvUmVkZmlzaFBsYXRmb3JtQ29uZmlnRHhlLmluZg0KPiA+ID4gPg0KPiBNZGVNb2R1 bGVQa2cvVW5pdmVyc2FsL1JlZ3VsYXJFeHByZXNzaW9uRHhlL1JlZ3VsYXJFeHByZXNzaW9uRHhl LmluZg0KPiA+ID4gPiArICBSZWRmaXNoUGtnL1JlZGZpc2hIdHRwRHhlL1JlZGZpc2hIdHRwRHhl LmluZg0KPiA+ID4gPiAhZW5kaWYNCj4gPiA+ID4gZGlmZiAtLWdpdCBhL1JlZGZpc2hQa2cvUmVk ZmlzaFBrZy5kc2MgYi9SZWRmaXNoUGtnL1JlZGZpc2hQa2cuZHNjDQo+ID4gPiA+IGluZGV4IDI1 ZWQxOTMxODIuLjU4NDllN2NmOWUgMTAwNjQ0DQo+ID4gPiA+IC0tLSBhL1JlZGZpc2hQa2cvUmVk ZmlzaFBrZy5kc2MNCj4gPiA+ID4gKysrIGIvUmVkZmlzaFBrZy9SZWRmaXNoUGtnLmRzYw0KPiA+ ID4gPiBAQCAtNDUsNiArNDUsOCBAQA0KPiA+ID4gPg0KPiA+ID4NCj4gVWVmaUhpaVNlcnZpY2Vz TGlifE1kZU1vZHVsZVBrZy9MaWJyYXJ5L1VlZmlIaWlTZXJ2aWNlc0xpYi9VZWZpSGlpU2Vydmlj ZXNMaWIuDQo+ID4gPiBpbmYNCj4gPiA+ID4NCj4gPiA+DQo+IFJlZGZpc2hQbGF0Zm9ybUNyZWRl bnRpYWxMaWJ8UmVkZmlzaFBrZy9MaWJyYXJ5L1BsYXRmb3JtQ3JlZGVudGlhbExpYk51bGwvUGxh dGYNCj4gPiA+IG9ybUNyZWRlbnRpYWxMaWJOdWxsLmluZg0KPiA+ID4gPg0KPiA+ID4NCj4gUmVk ZmlzaENvbnRlbnRDb2RpbmdMaWJ8UmVkZmlzaFBrZy9MaWJyYXJ5L1JlZGZpc2hDb250ZW50Q29k aW5nTGliTnVsbC9SZWRmaQ0KPiA+ID4gc2hDb250ZW50Q29kaW5nTGliTnVsbC5pbmYNCj4gPiA+ ID4gKw0KPiA+ID4NCj4gUmVwb3J0U3RhdHVzQ29kZUxpYnxNZGVNb2R1bGVQa2cvTGlicmFyeS9E eGVSZXBvcnRTdGF0dXNDb2RlTGliL0R4ZVJlcG8NCj4gPiA+IHJ0U3RhdHVzQ29kZUxpYi5pbmYN Cj4gPiA+ID4gKyAgU29ydExpYnxNZGVNb2R1bGVQa2cvTGlicmFyeS9VZWZpU29ydExpYi9VZWZp U29ydExpYi5pbmYNCj4gPiA+ID4NCj4gPiA+ID4gICAjIE5VTEwgaW5zdGFuY2Ugb2YgSVBNSSBy ZWxhdGVkIGxpYnJhcnkuDQo+ID4gPiA+ICAgSXBtaUxpYnxNZGVNb2R1bGVQa2cvTGlicmFyeS9C YXNlSXBtaUxpYk51bGwvQmFzZUlwbWlMaWJOdWxsLmluZg0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEv UmVkZmlzaFBrZy9SZWRmaXNoSHR0cER4ZS9SZWRmaXNoSHR0cER4ZS5pbmYNCj4gPiA+IGIvUmVk ZmlzaFBrZy9SZWRmaXNoSHR0cER4ZS9SZWRmaXNoSHR0cER4ZS5pbmYNCj4gPiA+ID4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gPiA+ID4gaW5kZXggMDAwMDAwMDAwMC4uYzdkZmRmZmFjZg0KPiA+ ID4gPiAtLS0gL2Rldi9udWxsDQo+ID4gPiA+ICsrKyBiL1JlZGZpc2hQa2cvUmVkZmlzaEh0dHBE eGUvUmVkZmlzaEh0dHBEeGUuaW5mDQo+ID4gPiA+IEBAIC0wLDAgKzEsNzMgQEANCj4gPiA+ID4g KyMjIEBmaWxlDQo+ID4gPiA+ICsjICBSZWRmaXNoSHR0cER4ZSBpcyB0aGUgRFhFIGRyaXZlciB3 aGljaCBwcm92aWRlcw0KPiA+ID4gPiArIyAgRWRrSUlSZWRmaXNoSHR0cFByb3RvY29sIHRvIEVE SzIgUmVkZmlzaCBGZWF0dXJlDQo+ID4gPiA+ICsjICBkcml2ZXJzIGZvciBIVFRQIG9wZXJhdGlv bi4NCj4gPiA+ID4gKyMNCj4gPiA+ID4gKyMgIENvcHlyaWdodCAoYykgMjAyMy0yMDI0LCBOVklE SUEgQ09SUE9SQVRJT04gJiBBRkZJTElBVEVTLiBBbGwgcmlnaHRzDQo+ID4gPiByZXNlcnZlZC4N Cj4gPiA+ID4gKyMNCj4gPiA+ID4gKyMgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1D bGF1c2UtUGF0ZW50DQo+ID4gPiA+ICsjDQo+ID4gPiA+ICsjIw0KPiA+ID4gPiArDQo+ID4gPiA+ ICtbRGVmaW5lc10NCj4gPiA+ID4gKyAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgID0g MHgwMDAxMDAwYg0KPiA+ID4gPiArICBCQVNFX05BTUUgICAgICAgICAgICAgICAgICAgICAgPSBS ZWRmaXNoSHR0cER4ZQ0KPiA+ID4gPiArICBGSUxFX0dVSUQgICAgICAgICAgICAgICAgICAgICAg PSA4NUFEQjJGMS1EQTkzLTQ3RDQtQUY0Ri0zRDkyMEQ5QkQyQzANCj4gPiA+ID4gKyAgTU9EVUxF X1RZUEUgICAgICAgICAgICAgICAgICAgID0gRFhFX0RSSVZFUg0KPiA+ID4gPiArICBWRVJTSU9O X1NUUklORyAgICAgICAgICAgICAgICAgPSAxLjANCj4gPiA+ID4gKyAgRU5UUllfUE9JTlQgICAg ICAgICAgICAgICAgICAgID0gUmVkZmlzaEh0dHBFbnRyeVBvaW50DQo+ID4gPiA+ICsgIFVOTE9B RF9JTUFHRSAgICAgICAgICAgICAgICAgICA9IFJlZGZpc2hIdHRwRHJpdmVyVW5sb2FkDQo+ID4g PiA+ICsNCj4gPiA+ID4gKyMNCj4gPiA+ID4gKyMgIFZBTElEX0FSQ0hJVEVDVFVSRVMgICAgICAg ICAgID0gSUEzMiBYNjQgQVJNIEFBUkNINjQgUklTQ1Y2NA0KPiA+ID4gPiArIw0KPiA+ID4gPiAr DQo+ID4gPiA+ICtbU291cmNlc10NCj4gPiA+ID4gKyAgUmVkZmlzaEh0dHBEYXRhLmMNCj4gPiA+ ID4gKyAgUmVkZmlzaEh0dHBEYXRhLmgNCj4gPiA+ID4gKyAgUmVkZmlzaEh0dHBEeGUuYw0KPiA+ ID4gPiArICBSZWRmaXNoSHR0cER4ZS5oDQo+ID4gPiA+ICsgIFJlZGZpc2hIdHRwT3BlcmF0aW9u LmMNCj4gPiA+ID4gKyAgUmVkZmlzaEh0dHBPcGVyYXRpb24uaA0KPiA+ID4gPiArDQo+ID4gPiA+ ICtbUGFja2FnZXNdDQo+ID4gPiA+ICsgIE1kZVBrZy9NZGVQa2cuZGVjDQo+ID4gPiA+ICsgIE1k ZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVjDQo+ID4gPiA+ICsgIE5ldHdvcmtQa2cvTmV0d29y a1BrZy5kZWMNCj4gPiA+ID4gKyAgUmVkZmlzaFBrZy9SZWRmaXNoUGtnLmRlYw0KPiA+ID4gPiAr DQo+ID4gPiA+ICtbTGlicmFyeUNsYXNzZXMuQVJNXQ0KPiA+ID4gPiArICBBcm1Tb2Z0RmxvYXRM aWINCj4gPiA+ID4gKw0KPiA+ID4gPiArW0xpYnJhcnlDbGFzc2VzXQ0KPiA+ID4gPiArICBCYXNl TGliDQo+ID4gPiA+ICsgIEJhc2VNZW1vcnlMaWINCj4gPiA+ID4gKyAgUmVkZmlzaENvbnRlbnRD b2RpbmdMaWINCj4gPiA+ID4gKyAgRGVidWdMaWINCj4gPiA+ID4gKyAgSHR0cExpYg0KPiA+ID4g PiArICBKc29uTGliDQo+ID4gPiA+ICsgIE1lbW9yeUFsbG9jYXRpb25MaWINCj4gPiA+ID4gKyAg UHJpbnRMaWINCj4gPiA+ID4gKyAgUmVkZmlzaERlYnVnTGliDQo+ID4gPiA+ICsgIFJlcG9ydFN0 YXR1c0NvZGVMaWINCj4gPiA+ID4gKyAgVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliDQo+ID4gPiA+ ICsgIFVlZmlEcml2ZXJFbnRyeVBvaW50DQo+ID4gPiA+ICsgIFVlZmlMaWINCj4gPiA+ID4gKw0K PiA+ID4gPiArW1Byb3RvY29sc10NCj4gPiA+ID4gKyAgZ0Vka0lJUmVkZmlzaEh0dHBQcm90b2Nv bEd1aWQgICAgICAgICAgICAgIyMgUFJPRFVDRUQNCj4gPiA+ID4gKyAgZ0Vka0lJUmVkZmlzaENy ZWRlbnRpYWxQcm90b2NvbEd1aWQgICAgICAgIyMgQ09OU1VNRVMNCj4gPiA+ID4gKyAgZ0VmaVJl c3RFeFByb3RvY29sR3VpZCAgICAgICAgICAgICAgICAgICAgIyMgQ09OU1VFTVMNCj4gPiA+ID4g Kw0KPiA+ID4gPiArW1BjZF0NCj4gPiA+ID4gKyAgZ0VmaVJlZGZpc2hQa2dUb2tlblNwYWNlR3Vp ZC5QY2RIdHRwR2V0UmV0cnkNCj4gPiA+ID4gKyAgZ0VmaVJlZGZpc2hQa2dUb2tlblNwYWNlR3Vp ZC5QY2RIdHRwUHV0UmV0cnkNCj4gPiA+ID4gKyAgZ0VmaVJlZGZpc2hQa2dUb2tlblNwYWNlR3Vp ZC5QY2RIdHRwUGF0Y2hSZXRyeQ0KPiA+ID4gPiArICBnRWZpUmVkZmlzaFBrZ1Rva2VuU3BhY2VH dWlkLlBjZEh0dHBQb3N0UmV0cnkNCj4gPiA+ID4gKyAgZ0VmaVJlZGZpc2hQa2dUb2tlblNwYWNl R3VpZC5QY2RIdHRwRGVsZXRlUmV0cnkNCj4gPiA+ID4gKyAgZ0VmaVJlZGZpc2hQa2dUb2tlblNw YWNlR3VpZC5QY2RIdHRwUmV0cnlXYWl0SW5TZWNvbmQNCj4gPiA+ID4gKyAgZ0VmaVJlZGZpc2hQ a2dUb2tlblNwYWNlR3VpZC5QY2RIdHRwQ2FjaGVEaXNhYmxlZA0KPiA+ID4gPiArICBnRWZpUmVk ZmlzaFBrZ1Rva2VuU3BhY2VHdWlkLlBjZFJlZGZpc2hTZXJ2aWNlQ29udGVudEVuY29kaW5nDQo+ ID4gPiA+ICsNCj4gPiA+ID4gK1tEZXBleF0NCj4gPiA+ID4gKyAgVFJVRQ0KPiA+ID4gPiBkaWZm IC0tZ2l0IGEvUmVkZmlzaFBrZy9SZWRmaXNoSHR0cER4ZS9SZWRmaXNoSHR0cERhdGEuaA0KPiA+ ID4gYi9SZWRmaXNoUGtnL1JlZGZpc2hIdHRwRHhlL1JlZGZpc2hIdHRwRGF0YS5oDQo+ID4gPiA+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gPiA+IGluZGV4IDAwMDAwMDAwMDAuLjZiZTYxMDE0 MmUNCj4gPiA+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ID4gPiArKysgYi9SZWRmaXNoUGtnL1JlZGZp c2hIdHRwRHhlL1JlZGZpc2hIdHRwRGF0YS5oDQo+ID4gPiA+IEBAIC0wLDAgKzEsMjU2IEBADQo+ ID4gPiA+ICsvKiogQGZpbGUNCj4gPiA+ID4gKyAgRGVmaW5pdGlvbnMgb2YgUmVkZmlzaEh0dHBE YXRhDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQ29weXJpZ2h0IChjKSAyMDIzLTIwMjQsIE5WSURJ QSBDT1JQT1JBVElPTiAmIEFGRklMSUFURVMuIEFsbCByaWdodHMNCj4gPiA+IHJlc2VydmVkLg0K PiA+ID4gPiArDQo+ID4gPiA+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1 c2UtUGF0ZW50DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiArDQo+ID4gPiA+ICsj aWZuZGVmIEVES0lJX1JFREZJU0hfSFRUUF9EQVRBX0hfDQo+ID4gPiA+ICsjZGVmaW5lIEVES0lJ X1JFREZJU0hfSFRUUF9EQVRBX0hfDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyNpbmNsdWRlICJSZWRm aXNoSHR0cER4ZS5oIg0KPiA+ID4gPiArDQo+ID4gPiA+ICsjZGVmaW5lIFJFREZJU0hfSFRUUF9E UklWRVJfU0lHTkFUVVJFICAgU0lHTkFUVVJFXzMyICgncicsICdmJywgJ2gnLA0KPiAncCcpDQo+ ID4gPiA+ICsjZGVmaW5lIFJFREZJU0hfSFRUUF9DQUNIRV9TSUdOQVRVUkUgICAgU0lHTkFUVVJF XzMyICgncicsICdmJywgJ2MnLA0KPiAnaCcpDQo+ID4gPiA+ICsjZGVmaW5lIFJFREZJU0hfSFRU UF9TRVJWSUNFX1NJR05BVFVSRSAgU0lHTkFUVVJFXzMyICgncicsICdmJywgJ3MnLA0KPiAndicp DQo+ID4gPiA+ICsjZGVmaW5lIFJFREZJU0hfSFRUUF9QQVlMT0FEX1NJR05BVFVSRSAgU0lHTkFU VVJFXzMyICgncicsICdmJywgJ3AnLA0KPiAnbCcpDQo+ID4gPiA+ICsjZGVmaW5lIFJFREZJU0hf SFRUUF9CQVNJQ19BVVRIX1NUUiAgICAgIkJhc2ljICINCj4gPiA+ID4gKw0KPiA+ID4gPiArLy8v DQo+ID4gPiA+ICsvLy8gUkVERklTSF9TRVJWSUNFX1BSSVZBVEUgZGVmaW5pdGlvbi4NCj4gPiA+ ID4gKy8vLw0KPiA+ID4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ID4gPiArICBVSU5UMzIgICAg ICAgICAgICAgICAgICBTaWduYXR1cmU7DQo+ID4gPiA+ICsgIENIQVI4ICAgICAgICAgICAgICAg ICAgICpIb3N0Ow0KPiA+ID4gPiArICBDSEFSOCAgICAgICAgICAgICAgICAgICAqSG9zdE5hbWU7 DQo+ID4gPiA+ICsgIENIQVI4ICAgICAgICAgICAgICAgICAgICpCYXNpY0F1dGg7DQo+ID4gPiA+ ICsgIENIQVI4ICAgICAgICAgICAgICAgICAgICpTZXNzaW9uVG9rZW47DQo+ID4gPiA+ICsgIEVG SV9SRVNUX0VYX1BST1RPQ09MICAgICpSZXN0RXg7DQo+ID4gPiA+ICt9IFJFREZJU0hfU0VSVklD RV9QUklWQVRFOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsvLy8NCj4gPiA+ID4gKy8vLyBSRURGSVNI X1BBWUxPQURfUFJJVkFURSBkZWZpbml0aW9uLg0KPiA+ID4gPiArLy8vDQo+ID4gPiA+ICt0eXBl ZGVmIHN0cnVjdCB7DQo+ID4gPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgIFNpZ25h dHVyZTsNCj4gPiA+ID4gKyAgUkVERklTSF9TRVJWSUNFX1BSSVZBVEUgICAgKlNlcnZpY2U7DQo+ ID4gPiA+ICsgIEVES0lJX0pTT05fVkFMVUUgICAgICAgICAgIEpzb25WYWx1ZTsNCj4gPiA+ID4g K30gUkVERklTSF9QQVlMT0FEX1BSSVZBVEU7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8vLw0KPiA+ ID4gPiArLy8vIERlZmluaXRpb24gb2YgUkVERklTSF9IVFRQX0NBQ0hFX0RBVEENCj4gPiA+ID4g Ky8vLw0KPiA+ID4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ID4gPiArICBVSU5UMzIgICAgICAg ICAgICAgIFNpZ25hdHVyZTsNCj4gPiA+ID4gKyAgTElTVF9FTlRSWSAgICAgICAgICBMaXN0Ow0K PiA+ID4gPiArICBFRklfU1RSSU5HICAgICAgICAgIFVyaTsNCj4gPiA+ID4gKyAgVUlOVE4gICAg ICAgICAgICAgICBIaXRDb3VudDsNCj4gPiA+ID4gKyAgUkVERklTSF9SRVNQT05TRSAgICAqUmVz cG9uc2U7DQo+ID4gPiA+ICt9IFJFREZJU0hfSFRUUF9DQUNIRV9EQVRBOw0KPiA+ID4gPiArDQo+ ID4gPiA+ICsjZGVmaW5lIFJFREZJU0hfSFRUUF9DQUNIRV9GUk9NX0xJU1QoYSkgIENSIChhLA0K PiA+ID4gUkVERklTSF9IVFRQX0NBQ0hFX0RBVEEsIExpc3QsIFJFREZJU0hfSFRUUF9DQUNIRV9T SUdOQVRVUkUpDQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8vLw0KPiA+ID4gPiArLy8vIERlZmluaXRp b24gb2YgUkVERklTSF9IVFRQX0NBQ0hFX0xJU1QNCj4gPiA+ID4gKy8vLw0KPiA+ID4gPiArdHlw ZWRlZiBzdHJ1Y3Qgew0KPiA+ID4gPiArICBMSVNUX0VOVFJZICAgIEhlYWQ7DQo+ID4gPiA+ICsg IFVJTlROICAgICAgICAgQ291bnQ7DQo+ID4gPiA+ICsgIFVJTlROICAgICAgICAgQ2FwYWNpdHk7 DQo+ID4gPiA+ICt9IFJFREZJU0hfSFRUUF9DQUNIRV9MSVNUOw0KPiA+ID4gPiArDQo+ID4gPiA+ ICsvLy8NCj4gPiA+ID4gKy8vLyBEZWZpbml0aW9uIG9mIFJFREZJU0hfSFRUUF9SRVRSWV9TRVRU SU5HDQo+ID4gPiA+ICsvLy8NCj4gPiA+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiA+ID4gKyAg VUlOVDE2ICAgIE1heGltdW1SZXRyeUdldDsNCj4gPiA+ID4gKyAgVUlOVDE2ICAgIE1heGltdW1S ZXRyeVB1dDsNCj4gPiA+ID4gKyAgVUlOVDE2ICAgIE1heGltdW1SZXRyeVBvc3Q7DQo+ID4gPiA+ ICsgIFVJTlQxNiAgICBNYXhpbXVtUmV0cnlQYXRjaDsNCj4gPiA+ID4gKyAgVUlOVDE2ICAgIE1h eGltdW1SZXRyeURlbGV0ZTsNCj4gPiA+ID4gKyAgVUlOVE4gICAgIFJldHJ5V2FpdDsNCj4gPiA+ ID4gK30gUkVERklTSF9IVFRQX1JFVFJZX1NFVFRJTkc7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8v Lw0KPiA+ID4gPiArLy8vIERlZmluaXRpb24gb2YgUkVERklTSF9IVFRQX0NBQ0hFX1BSSVZBVEUN Cj4gPiA+ID4gKy8vLw0KPiA+ID4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ID4gPiArICBVSU5U MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2lnbmF0dXJlOw0KPiA+ID4gPiArICBF RklfSEFORExFICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VIYW5kbGU7DQo+ID4gPiA+ ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWNoZURpc2FibGVkOw0K PiA+ID4gPiArICBFRklfRVZFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90aWZ5RXZl bnQ7DQo+ID4gPiA+ICsgIFJFREZJU0hfSFRUUF9DQUNIRV9MSVNUICAgICAgICAgICAgICBDYWNo ZUxpc3Q7DQo+ID4gPiA+ICsgIEVES0lJX1JFREZJU0hfSFRUUF9QUk9UT0NPTCAgICAgICAgICBQ cm90b2NvbDsNCj4gPiA+ID4gKyAgRURLSUlfUkVERklTSF9DUkVERU5USUFMX1BST1RPQ09MICAg ICpDcmVkZW50aWFsUHJvdG9jb2w7DQo+ID4gPiA+ICsgIFJFREZJU0hfSFRUUF9SRVRSWV9TRVRU SU5HICAgICAgICAgICBSZXRyeVNldHRpbmc7DQo+ID4gPiA+ICt9IFJFREZJU0hfSFRUUF9DQUNI RV9QUklWQVRFOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsjZGVmaW5lIFJFREZJU0hfSFRUUF9DQUNI RV9QUklWQVRFX0ZST01fVEhJUyhhKSAgQ1IgKGEsDQo+ID4gPiBSRURGSVNIX0hUVFBfQ0FDSEVf UFJJVkFURSwgUHJvdG9jb2wsDQo+IFJFREZJU0hfSFRUUF9EUklWRVJfU0lHTkFUVVJFKQ0KPiA+ ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAgU2VhcmNoIG9uIGdpdmVuIExpc3RIZWFk ZXIgZm9yIGdpdmVuIFVSSSBzdHJpbmcuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHBhcmFtW2lu XSAgICBMaXN0SGVhZGVyICBUYXJnZXQgbGlzdCB0byBzZWFyY2guDQo+ID4gPiA+ICsgIEBwYXJh bVtpbl0gICAgVXJpICAgICAgICAgVGFyZ2V0IFVSSSB0byBzZWFyY2guDQo+ID4gPiA+ICsNCj4g PiA+ID4gKyAgQHJldHZhbCBSRURGSVNIX0hUVFBfQ0FDSEVfREFUQSAgIFRhcmdldCBjYWNoZSBk YXRhIGlzIGZvdW5kLg0KPiA+ID4gPiArICBAcmV0dmFsIE5VTEwgICAgICAgICAgICAgICAgICAg ICAgTm8gY2FjaGUgZGF0YSB3aXRoIGdpdmVuIFVSSSBpcyBmb3VuZC4NCj4gPiA+ID4gKw0KPiA+ ID4gPiArKiovDQo+ID4gPiA+ICtSRURGSVNIX0hUVFBfQ0FDSEVfREFUQSAqDQo+ID4gPiA+ICtG aW5kSHR0cENhY2hlRGF0YSAoDQo+ID4gPiA+ICsgIElOICBMSVNUX0VOVFJZICAqTGlzdEhlYWRl ciwNCj4gPiA+ID4gKyAgSU4gIEVGSV9TVFJJTkcgIFVyaQ0KPiA+ID4gPiArICApOw0KPiA+ID4g PiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAgVGhpcyBmdW5jdGlvbiBjb3B5IHRoZSBkYXRh IGluIFNyY1Jlc3BvbnNlIHRvIERzdFJlc3BvbnNlLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEBw YXJhbVtpbl0gIFNyY1Jlc3BvbnNlICAgICAgU291cmNlIFJlc3BvbnNlIHRvIGNvcHkuDQo+ID4g PiA+ICsgIEBwYXJhbVtvdXRdIERzdFJlc3BvbnNlICAgICAgRGVzdGluYXRpb24gUmVzcG9uc2Uu DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHJldHZhbCAgICAgRUZJX1NVQ0NFU1MgICAgICBSZXNw b25zZSBpcyBjb3BpZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ID4gPiArICBAcmV0dmFsICAgICBPdGhl cnMgICAgICAgICAgIEVycm9yIG9jY3Vycy4NCj4gPiA+ID4gKw0KPiA+ID4gPiArKiovDQo+ID4g PiA+ICtFRklfU1RBVFVTDQo+ID4gPiA+ICtDb3B5UmVkZmlzaFJlc3BvbnNlICgNCj4gPiA+ID4g KyAgSU4gIFJFREZJU0hfUkVTUE9OU0UgICpTcmNSZXNwb25zZSwNCj4gPiA+ID4gKyAgT1VUIFJF REZJU0hfUkVTUE9OU0UgICpEc3RSZXNwb25zZQ0KPiA+ID4gPiArICApOw0KPiA+ID4gPiArDQo+ ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAgUmVsZWFzZSBhbGwgY2FjaGUgZnJvbSBsaXN0Lg0KPiA+ ID4gPiArDQo+ID4gPiA+ICsgIEBwYXJhbVtpbl0gICAgQ2FjaGVMaXN0ICAgIFRoZSBsaXN0IHRv IGJlIHJlbGVhc2VkLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgICAgQWxsIGNhY2hlIGRhdGEgYXJlIHJlbGVhc2VkLg0KPiA+ID4gPiArICBAcmV0 dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgIENhY2hlTGlzdCBpcyBOVUxMLg0KPiA+ID4gPiAr DQo+ID4gPiA+ICsqKi8NCj4gPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ID4gK1JlbGVhc2VDYWNo ZUxpc3QgKA0KPiA+ID4gPiArICBJTiAgUkVERklTSF9IVFRQX0NBQ0hFX0xJU1QgICpDYWNoZUxp c3QNCj4gPiA+ID4gKyAgKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgIEFk ZCBuZXcgY2FjaGUgYnkgZ2l2ZW4gVVJJIGFuZCBIVFRQIHJlc3BvbnNlIHRvIHNwZWNpZnkgTGlz dC4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcGFyYW1baW5dICAgIExpc3QgICAgICBUYXJnZXQg Y2FjaGUgbGlzdCB0byBhZGQuDQo+ID4gPiA+ICsgIEBwYXJhbVtpbl0gICAgVXJpICAgICAgIFRo ZSBVUkkgc3RyaW5nIG1hdGNoaW5nIHRvIHRoaXMgY2FjaGUgZGF0YS4NCj4gPiA+ID4gKyAgQHBh cmFtW2luXSAgICBSZXNwb25zZSAgSFRUUCByZXNwb25zZS4NCj4gPiA+ID4gKw0KPiA+ID4gPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgQ2FjaGUgZGF0YSBpcyBhZGRlZC4NCj4gPiA+ID4gKyAg QHJldHZhbCBPdGhlcnMgICAgICAgIEZhaWwgdG8gYWRkIGNhY2hlIGRhdGEuDQo+ID4gPiA+ICsN Cj4gPiA+ID4gKyoqLw0KPiA+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gPiArQWRkSHR0cENhY2hl RGF0YSAoDQo+ID4gPiA+ICsgIElOICBSRURGSVNIX0hUVFBfQ0FDSEVfTElTVCAgKkxpc3QsDQo+ ID4gPiA+ICsgIElOICBFRklfU1RSSU5HICAgICAgICAgICAgICAgVXJpLA0KPiA+ID4gPiArICBJ TiAgUkVERklTSF9SRVNQT05TRSAgICAgICAgICpSZXNwb25zZQ0KPiA+ID4gPiArICApOw0KPiA+ ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAgRGVsZXRlIGEgY2FjaGUgZGF0YSBieSBn aXZlbiBjYWNoZSBpbnN0YW5jZS4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcGFyYW1baW5dICAg IExpc3QgICAgVGFyZ2V0IGNhY2hlIGxpc3QgdG8gYmUgcmVtb3ZlZC4NCj4gPiA+ID4gKyAgQHBh cmFtW2luXSAgICBEYXRhICAgIFBvaW50ZXIgdG8gdGhlIGluc3RhbmNlIHRvIGJlIGRlbGV0ZWQu DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgIENhY2hlIGRhdGEg aXMgcmVtb3ZlZC4NCj4gPiA+ID4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgIEZhaWwgdG8gcmVt b3ZlIGNhY2hlIGRhdGEuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiArRUZJX1NU QVRVUw0KPiA+ID4gPiArRGVsZXRlSHR0cENhY2hlRGF0YSAoDQo+ID4gPiA+ICsgIElOICBSRURG SVNIX0hUVFBfQ0FDSEVfTElTVCAgKkxpc3QsDQo+ID4gPiA+ICsgIElOICBSRURGSVNIX0hUVFBf Q0FDSEVfREFUQSAgKkRhdGENCj4gPiA+ID4gKyAgKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoq DQo+ID4gPiA+ICsgIFRoaXMgZnVuY3Rpb24gcmVsZWFzZSBSZWRmaXNoIFBheWxvYWQuDQo+ID4g PiA+ICsNCj4gPiA+ID4gKyAgQHBhcmFtW2luXSAgUGF5bG9hZCAgICAgICAgIFBvaW50ZXIgdG8g cGF5bG9hZCBpbnN0YW5jZS4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcmV0dmFsICAgICBFRklf U1VDQ0VTUyAgICAgUGF5bG9hZCBpcyByZWxlYXNlZC4NCj4gPiA+ID4gKyAgQHJldHZhbCAgICAg T3RoZXJzICAgICAgICAgIEVycm9yIG9jY3Vycy4NCj4gPiA+ID4gKw0KPiA+ID4gPiArKiovDQo+ ID4gPiA+ICtFRklfU1RBVFVTDQo+ID4gPiA+ICtSZWxlYXNlUmVkZmlzaFBheWxvYWQgKA0KPiA+ ID4gPiArICBJTiBSRURGSVNIX1BBWUxPQURfUFJJVkFURSAgKlBheWxvYWQNCj4gPiA+ID4gKyAg KTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgIFRoaXMgZnVuY3Rpb24gY3Jl YXQgbmV3IHBheWxvYWQuIFNlcnZlciBhbmQgSnNvbk9iaiBhcmUNCj4gPiA+ID4gKyAgY29waWVk IHRvIG5ld2x5IGNyZWF0ZWQgcGF5bG9hZC4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcGFyYW1b aW5dICBTZXJ2aWNlICAgICAgICAgIFBvaW50ZXIgdG8gU2VydmljZSBpbnN0YW5jZS4NCj4gPiA+ ID4gKyAgQHBhcmFtW2luXSAgSnNvbk9iaiAgICAgICAgICBQb2ludGVyIHRvIEpTT04gb2JqZWN0 Lg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEByZXR2YWwgICAgIFJFREZJU0hfUEFZTE9BRF9QUklW QVRFICBOZXdseSBjcmVhdGVkIHBheWxvYWQuDQo+ID4gPiA+ICsgIEByZXR2YWwgICAgIE5VTEwg ICAgICAgICAgICAgRXJyb3Igb2NjdXJzLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsqKi8NCj4gPiA+ ID4gK1JFREZJU0hfUEFZTE9BRF9QUklWQVRFICoNCj4gPiA+ID4gK0NyZWF0ZVJlZGZpc2hQYXls b2FkICgNCj4gPiA+ID4gKyAgSU4gUkVERklTSF9TRVJWSUNFX1BSSVZBVEUgICpTZXJ2aWNlLA0K PiA+ID4gPiArICBJTiBFREtJSV9KU09OX1ZBTFVFICAgICAgICAgSnNvblZhbHVlDQo+ID4gPiA+ ICsgICk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICBUaGlzIGZ1bmN0aW9u IHJlbGVhc2UgUmVkZmlzaCBTZXJ2aWNlLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEBwYXJhbVtp bl0gIFNlcnZpY2UgICAgICAgICBQb2ludGVyIHRvIHNlcnZpY2UgaW5zdGFuY2UuDQo+ID4gPiA+ ICsNCj4gPiA+ID4gKyAgQHJldHZhbCAgICAgRUZJX1NVQ0NFU1MgICAgIFNlcnZpY2UgaXMgcmVs ZWFzZWQuDQo+ID4gPiA+ICsgIEByZXR2YWwgICAgIE90aGVycyAgICAgICAgICBFcnJvciBvY2N1 cnMuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4g PiArUmVsZWFzZVJlZGZpc2hTZXJ2aWNlICgNCj4gPiA+ID4gKyAgSU4gUkVERklTSF9TRVJWSUNF X1BSSVZBVEUgICpTZXJ2aWNlDQo+ID4gPiA+ICsgICk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8q Kg0KPiA+ID4gPiArICBUaGlzIGZ1bmN0aW9uIGNyZWF0IG5ldyBzZXJ2aWNlLiBIb3N0IGFuZCBI b3N0TmFtZSBhcmUgY29waWVkIHRvDQo+ID4gPiA+ICsgIG5ld2x5IGNyZWF0ZWQgc2VydmljZSBp bnN0YW5jZS4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcGFyYW1baW5dICBIb3N0ICAgICAgICAg ICAgSG9zdCBzdHJpbmcuDQo+ID4gPiA+ICsgIEBwYXJhbVtpbl0gIEhvc3ROYW1lICAgICAgICBI b3N0bmFtZSBzdHJpbmcuDQo+ID4gPiA+ICsgIEBwYXJhbVtpbl0gIEJhc2ljQXV0aCAgICAgICBC YXNpYyBBdXRob3JpemF0aW9uIHN0cmluZy4NCj4gPiA+ID4gKyAgQHBhcmFtW2luXSAgU2Vzc2lv blRva2VuICAgIFNlc3Npb24gdG9rZW4gc3RyaW5nLg0KPiA+ID4gPiArICBAcGFyYW1baW5dICBS ZXN0RXggICAgICAgICAgUmVzdCBFWCBwcm90b2NvbCBpbnN0YW5jZS4NCj4gPiA+ID4gKw0KPiA+ ID4gPiArICBAcmV0dmFsICAgICBSRURGSVNIX1BBWUxPQURfUFJJVkFURSAgTmV3bHkgY3JlYXRl ZCBzZXJ2aWNlLg0KPiA+ID4gPiArICBAcmV0dmFsICAgICBOVUxMICAgICAgICAgICAgIEVycm9y IG9jY3Vycy4NCj4gPiA+ID4gKw0KPiA+ID4gPiArKiovDQo+ID4gPiA+ICtSRURGSVNIX1NFUlZJ Q0VfUFJJVkFURSAqDQo+ID4gPiA+ICtDcmVhdGVSZWRmaXNoU2VydmljZSAoDQo+ID4gPiA+ICsg IElOIENIQVI4ICAgICAgICAgICAgICAgICAqSG9zdCwNCj4gPiA+ID4gKyAgSU4gQ0hBUjggICAg ICAgICAgICAgICAgICpIb3N0TmFtZSwNCj4gPiA+ID4gKyAgSU4gQ0hBUjggICAgICAgICAgICAg ICAgICpCYXNpY0F1dGggT1BUSU9OQUwsDQo+ID4gPiA+ICsgIElOIENIQVI4ICAgICAgICAgICAg ICAgICAqU2Vzc2lvblRva2VuIE9QVElPTkFMLA0KPiA+ID4gPiArICBJTiBFRklfUkVTVF9FWF9Q Uk9UT0NPTCAgKlJlc3RFeA0KPiA+ID4gPiArICApOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKioN Cj4gPiA+ID4gKyAgVGhpcyBmdW5jdGlvbiB1cGRhdGUgc2Vzc2lvbiB0b2tlbiBpbiBSZWRmaXNo IFNlcnZpY2UuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHBhcmFtW2luXSAgU2VydmljZSAgICAg ICAgIFBvaW50ZXIgdG8gc2VydmljZSBpbnN0YW5jZS4NCj4gPiA+ID4gKyAgQHBhcmFtW2luXSAg VG9rZW4gICAgICAgICAgIFNlc3Npb24gdG9rZW4uDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHJl dHZhbCAgICAgRUZJX1NVQ0NFU1MgICAgIFNlc3Npb24gdG9rZW4gaXMgdXBkYXRlZC4NCj4gPiA+ ID4gKyAgQHJldHZhbCAgICAgT3RoZXJzICAgICAgICAgIEVycm9yIG9jY3Vycy4NCj4gPiA+ID4g Kw0KPiA+ID4gPiArKiovDQo+ID4gPiA+ICtFRklfU1RBVFVTDQo+ID4gPiA+ICtVcGRhdGVTZXNz aW9uVG9rZW4gKA0KPiA+ID4gPiArICBJTiBSRURGSVNIX1NFUlZJQ0VfUFJJVkFURSAgKlNlcnZp Y2UsDQo+ID4gPiA+ICsgIElOIENIQVI4ICAgICAgICAgICAgICAgICAgICAqVG9rZW4NCj4gPiA+ ID4gKyAgKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArI2VuZGlmDQo+ID4gPiA+IGRpZmYgLS1naXQg YS9SZWRmaXNoUGtnL1JlZGZpc2hIdHRwRHhlL1JlZGZpc2hIdHRwRHhlLmgNCj4gPiA+IGIvUmVk ZmlzaFBrZy9SZWRmaXNoSHR0cER4ZS9SZWRmaXNoSHR0cER4ZS5oDQo+ID4gPiA+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0DQo+ID4gPiA+IGluZGV4IDAwMDAwMDAwMDAuLmNmNmJhOWNiNDcNCj4gPiA+ ID4gLS0tIC9kZXYvbnVsbA0KPiA+ID4gPiArKysgYi9SZWRmaXNoUGtnL1JlZGZpc2hIdHRwRHhl L1JlZGZpc2hIdHRwRHhlLmgNCj4gPiA+ID4gQEAgLTAsMCArMSw0NCBAQA0KPiA+ID4gPiArLyoq IEBmaWxlDQo+ID4gPiA+ICsgIERlZmluaXRpb25zIG9mIFJlZGZpc2hIdHRwRHhlDQo+ID4gPiA+ ICsNCj4gPiA+ID4gKyAgQ29weXJpZ2h0IChjKSAyMDIzLTIwMjQsIE5WSURJQSBDT1JQT1JBVElP TiAmIEFGRklMSUFURVMuIEFsbCByaWdodHMNCj4gPiA+IHJlc2VydmVkLg0KPiA+ID4gPiArDQo+ ID4gPiA+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ ID4gPiA+ICsNCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiArDQo+ID4gPiA+ICsjaWZuZGVmIEVES0lJ X1JFREZJU0hfSFRUUF9EWEVfSF8NCj4gPiA+ID4gKyNkZWZpbmUgRURLSUlfUkVERklTSF9IVFRQ X0RYRV9IXw0KPiA+ID4gPiArDQo+ID4gPiA+ICsjaW5jbHVkZSA8VWVmaS5oPg0KPiA+ID4gPiAr I2luY2x1ZGUgPEluZHVzdHJ5U3RhbmRhcmQvSHR0cDExLmg+DQo+ID4gPiA+ICsNCj4gPiA+ID4g KyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlMaWIuaD4NCj4gPiA+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5 L0Jhc2VMaWIuaD4NCj4gPiA+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4N Cj4gPiA+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1JlZGZpc2hDb250ZW50Q29kaW5nTGliLmg+DQo+ ID4gPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPiA+ID4gPiArI2luY2x1ZGUg PExpYnJhcnkvSHR0cExpYi5oPg0KPiA+ID4gPiArI2luY2x1ZGUgPExpYnJhcnkvSnNvbkxpYi5o Pg0KPiA+ID4gPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliLmg+ DQo+ID4gPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9uTGliLmg+DQo+ID4g PiA+ICsjaW5jbHVkZSA8TGlicmFyeS9SZWRmaXNoRGVidWdMaWIuaD4NCj4gPiA+ID4gKyNpbmNs dWRlIDxMaWJyYXJ5L1JlcG9ydFN0YXR1c0NvZGVMaWIuaD4NCj4gPiA+ID4gKyNpbmNsdWRlIDxM aWJyYXJ5L1ByaW50TGliLmg+DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyNpbmNsdWRlIDxQcm90b2Nv bC9IdHRwLmg+DQo+ID4gPiA+ICsjaW5jbHVkZSA8UHJvdG9jb2wvRWRrSUlSZWRmaXNoSHR0cFBy b3RvY29sLmg+DQo+ID4gPiA+ICsjaW5jbHVkZSA8UHJvdG9jb2wvRWRrSUlSZWRmaXNoQ3JlZGVu dGlhbC5oPg0KPiA+ID4gPiArI2luY2x1ZGUgPFByb3RvY29sL1Jlc3RFeC5oPg0KPiA+ID4gPiAr DQo+ID4gPiA+ICsjZGVmaW5lIElTX0VNUFRZX1NUUklORyhhKSAgKChhKSA9PSBOVUxMIHx8IChh KVswXSA9PSAnXDAnKQ0KPiA+ID4gPiArI2RlZmluZSBSRURGSVNIX0hUVFBfQ0FDSEVfTElTVF9T SVpFICAgICAgMHg4MA0KPiA+ID4gPiArI2RlZmluZSBSRURGSVNIX0VSUk9SX01TR19NQVggICAg ICAgICAgICAgMTI4DQo+ID4gPiA+ICsjZGVmaW5lIFJFREZJU0hfREVCVUdfU1RSSU5HX0xFTkdU SCAgICAgICAyMDANCj4gPiA+ID4gKyNkZWZpbmUgUkVERklTSF9IT1NUX05BTUVfTUFYICAgICAg ICAgICAgIDY0ICAgLy8gSVB2NiBtYXhpbXVtIGxlbmd0aA0KPiAoMzkpDQo+ID4gPiArICJodHRw czovLyIgKDgpICsgcG9ydCBudW1iZXIgKG1heGltdW0gNSkNCj4gPiA+ID4gKyNkZWZpbmUgUkVE RklTSF9IVFRQX0VSUk9SX1JFUE9SVCAgICAgICAgICJSZWRmaXNoIEhUVFAgJWENCj4gZmFpbHVy ZSgweCV4KToNCj4gPiA+ICVzIg0KPiA+ID4gPiArI2RlZmluZSBSRURGSVNIX0hUVFBfQ0FDSEVf REVCVUcgICAgICAgICAgREVCVUdfTUFOQUdFQUJJTElUWQ0KPiA+ID4gPiArI2RlZmluZSBSRURG SVNIX0hUVFBfQ0FDSEVfREVCVUdfRFVNUA0KPiBERUJVR19NQU5BR0VBQklMSVRZDQo+ID4gPiA+ ICsjZGVmaW5lIFJFREZJU0hfSFRUUF9DQUNIRV9ERUJVR19SRVFVRVNUDQo+IERFQlVHX01BTkFH RUFCSUxJVFkNCj4gPiA+ID4gKw0KPiA+ID4gPiArI2VuZGlmDQo+ID4gPiA+IGRpZmYgLS1naXQg YS9SZWRmaXNoUGtnL1JlZGZpc2hIdHRwRHhlL1JlZGZpc2hIdHRwT3BlcmF0aW9uLmgNCj4gPiA+ IGIvUmVkZmlzaFBrZy9SZWRmaXNoSHR0cER4ZS9SZWRmaXNoSHR0cE9wZXJhdGlvbi5oDQo+ID4g PiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gPiA+IGluZGV4IDAwMDAwMDAwMDAuLmQyZjdj ZjRjMjcNCj4gPiA+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ID4gPiArKysgYi9SZWRmaXNoUGtnL1Jl ZGZpc2hIdHRwRHhlL1JlZGZpc2hIdHRwT3BlcmF0aW9uLmgNCj4gPiA+ID4gQEAgLTAsMCArMSw3 NiBAQA0KPiA+ID4gPiArLyoqIEBmaWxlDQo+ID4gPiA+ICsgIERlZmluaXRpb25zIG9mIFJlZGZp c2hIdHRwT3BlcmF0aW9uDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQ29weXJpZ2h0IChjKSAyMDI0 LCBOVklESUEgQ09SUE9SQVRJT04gJiBBRkZJTElBVEVTLiBBbGwgcmlnaHRzDQo+IHJlc2VydmVk Lg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1D bGF1c2UtUGF0ZW50DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiArDQo+ID4gPiA+ ICsjaWZuZGVmIEVES0lJX1JFREZJU0hfSFRUUF9PUEVSQVRJT05fSF8NCj4gPiA+ID4gKyNkZWZp bmUgRURLSUlfUkVERklTSF9IVFRQX09QRVJBVElPTl9IXw0KPiA+ID4gPiArDQo+ID4gPiA+ICsj aW5jbHVkZSAiUmVkZmlzaEh0dHBEeGUuaCINCj4gPiA+ID4gKw0KPiA+ID4gPiArI2RlZmluZSBS RURGSVNIX0NPTlRFTlRfTEVOR1RIX1NJWkUgICAgICAgICAgICAgIDgwDQo+ID4gPiA+ICsjZGVm aW5lIFJFREZJU0hfQ09NTU9OX0hFQURFUl9TSVpFICAgICAgICAgICAgICAgNQ0KPiA+ID4gPiAr I2RlZmluZSBSRURGSVNIX0hUVFBfSEVBREVSX09EQVRBX1ZFUlNJT05fU1RSICAgICJPRGF0YS0N Cj4gVmVyc2lvbiINCj4gPiA+ID4gKyNkZWZpbmUgUkVERklTSF9IVFRQX0hFQURFUl9PREFUQV9W RVJTSU9OX1ZBTFVFICAiNC4wIg0KPiA+ID4gPiArI2RlZmluZSBSRURGSVNIX0hUVFBfSEVBREVS X1VTRVJfQUdFTlRfVkFMVUUgICAgICJlZGsycmVkZmlzaCINCj4gPiA+ID4gKyNkZWZpbmUgUkVE RklTSF9IVFRQX0hFQURFUl9DT05ORUNUSU9OX1NUUiAgICAgICAiQ29ubmVjdGlvbiINCj4gPiA+ ID4gKyNkZWZpbmUgUkVERklTSF9IVFRQX0hFQURFUl9DT05ORUNUSU9OX1ZBTFVFICAgICAiS2Vl cC1BbGl2ZSINCj4gPiA+ID4gKyNkZWZpbmUgUkVERklTSF9IVFRQX0NPTlRFTlRfRU5DT0RJTkdf Tk9ORSAgICAgICAiTm9uZSINCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgIFRo aXMgZnVuY3Rpb24gZnJlZSByZXNvdXJjZXMgaW4gUmVxdWVzdC4gUmVxdWVzdCBpcyBubyBsb25n ZXIgYXZhaWxhYmxlDQo+ID4gPiA+ICsgIGFmdGVyIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBzdWNj ZXNzZnVsbHkuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHBhcmFtW2luXSAgUmVxdWVzdCAgICAg IEhUVFAgcmVxdWVzdCB0byBiZSByZWxlYXNlZC4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcmV0 dmFsICAgICBFRklfU1VDQ0VTUyAgICAgUmVzcm91Y2UgaXMgcmVsZWFzZWQgc3VjY2Vzc2Z1bGx5 Lg0KPiA+ID4gPiArICBAcmV0dmFsICAgICBPdGhlcnMgICAgICAgICAgRXJyb3JzIG9jY3VyLg0K PiA+ID4gPiArDQo+ID4gPiA+ICsqKi8NCj4gPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ID4gK1Jl bGVhc2VSZWRmaXNoUmVxdWVzdCAoDQo+ID4gPiA+ICsgIElOICBSRURGSVNIX1JFUVVFU1QgICpS ZXF1ZXN0DQo+ID4gPiA+ICsgICk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiAr ICBUaGlzIGZ1bmN0aW9uIGZyZWUgcmVzb3VyY2VzIGluIGdpdmVuIFJlc3BvbnNlLg0KPiA+ID4g PiArDQo+ID4gPiA+ICsgIEBwYXJhbVtpbl0gIFJlc3BvbnNlICAgICBIVFRQIHJlc3BvbnNlIHRv IGJlIHJlbGVhc2VkLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEByZXR2YWwgICAgIEVGSV9TVUND RVNTICAgICBSZXNyb3VjZSBpcyByZWxlYXNlZCBzdWNjZXNzZnVsbHkuDQo+ID4gPiA+ICsgIEBy ZXR2YWwgICAgIE90aGVycyAgICAgICAgICBFcnJvcnMgb2NjdXIuDQo+ID4gPiA+ICsNCj4gPiA+ ID4gKyoqLw0KPiA+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gPiArUmVsZWFzZVJlZGZpc2hSZXNw b25zZSAoDQo+ID4gPiA+ICsgIElOICBSRURGSVNIX1JFU1BPTlNFICAqUmVzcG9uc2UNCj4gPiA+ ID4gKyAgKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgIFRoaXMgZnVuY3Rp b24gc2VuZCBSZWRmaXNoIHJlcXVlc3QgdG8gUmVkZmlzaCBzZXJ2aWNlIGJ5IGNhbGxpbmcNCj4g PiA+ID4gKyAgUmVzdCBFeCBwcm90b2NvbC4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcGFyYW1b aW5dICAgU2VydmljZSAgICAgICBQb2ludGVyIHRvIFJlZGZpc2ggc2VydmljZS4NCj4gPiA+ID4g KyAgQHBhcmFtW2luXSAgIFVyaSAgICAgICAgICAgVXJpIG9mIFJlZGZpc2ggc2VydmljZS4NCj4g PiA+ID4gKyAgQHBhcmFtW2luXSAgIE1ldGhvZCAgICAgICAgSFRUUCBtZXRob2QuDQo+ID4gPiA+ ICsgIEBwYXJhbVtpbl0gICBSZXF1ZXN0ICAgICBSZXF1ZXN0IGRhdGEuIFRoaXMgaXMgb3B0aW9u YWwuDQo+ID4gPiA+ICsgIEBwYXJhbVtvdXRdICBSZXNwb25zZSAgICBSZWRmaXNoIHJlc3BvbnNl IGRhdGEuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHJldHZhbCAgICAgRUZJX1NVQ0NFU1MgICAg IFJlcXVlc3QgaXMgc2VudCBhbmQgcmVjZWl2ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ID4gPiArICBA cmV0dmFsICAgICBPdGhlcnMgICAgICAgICAgRXJyb3JzIG9jY3VyLg0KPiA+ID4gPiArDQo+ID4g PiA+ICsqKi8NCj4gPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ID4gK0h0dHBTZW5kUmVjZWl2ZSAo DQo+ID4gPiA+ICsgIElOICBSRURGSVNIX1NFUlZJQ0UgICBTZXJ2aWNlLA0KPiA+ID4gPiArICBJ TiAgRUZJX1NUUklORyAgICAgICAgVXJpLA0KPiA+ID4gPiArICBJTiAgRUZJX0hUVFBfTUVUSE9E ICAgTWV0aG9kLA0KPiA+ID4gPiArICBJTiAgUkVERklTSF9SRVFVRVNUICAgKlJlcXVlc3QgIE9Q VElPTkFMLA0KPiA+ID4gPiArICBPVVQgUkVERklTSF9SRVNQT05TRSAgKlJlc3BvbnNlDQo+ID4g PiA+ICsgICk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyNlbmRpZg0KPiA+ID4gPiBkaWZmIC0tZ2l0 IGEvUmVkZmlzaFBrZy9SZWRmaXNoSHR0cER4ZS9SZWRmaXNoSHR0cERhdGEuYw0KPiA+ID4gYi9S ZWRmaXNoUGtnL1JlZGZpc2hIdHRwRHhlL1JlZGZpc2hIdHRwRGF0YS5jDQo+ID4gPiA+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQo+ID4gPiA+IGluZGV4IDAwMDAwMDAwMDAuLmJmOTVlOWY4ZDQNCj4g PiA+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ID4gPiArKysgYi9SZWRmaXNoUGtnL1JlZGZpc2hIdHRw RHhlL1JlZGZpc2hIdHRwRGF0YS5jDQo+ID4gPiA+IEBAIC0wLDAgKzEsNjY3IEBADQo+ID4gPiA+ ICsvKiogQGZpbGUNCj4gPiA+ID4gKyAgUmVkZmlzaEh0dHBEYXRhIGhhbmRsZXMgaW50ZXJuYWwg ZGF0YSB0byBzdXBwb3J0IFJlZGZpc2ggSFRUUCBwcm90b2NvbC4NCj4gPiA+ID4gKw0KPiA+ID4g PiArICBDb3B5cmlnaHQgKGMpIDIwMjMtMjAyNCwgTlZJRElBIENPUlBPUkFUSU9OICYgQUZGSUxJ QVRFUy4gQWxsIHJpZ2h0cw0KPiA+ID4gcmVzZXJ2ZWQuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAg U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPiA+ID4gKw0K PiA+ID4gPiArKiovDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyNpbmNsdWRlICJSZWRmaXNoSHR0cERh dGEuaCINCj4gPiA+ID4gKyNpbmNsdWRlICJSZWRmaXNoSHR0cE9wZXJhdGlvbi5oIg0KPiA+ID4g PiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAgVGhpcyBmdW5jdGlvbiB1cGRhdGUgc2Vzc2lv biB0b2tlbiBpbiBSZWRmaXNoIFNlcnZpY2UuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHBhcmFt W2luXSAgU2VydmljZSAgICAgICAgIFBvaW50ZXIgdG8gc2VydmljZSBpbnN0YW5jZS4NCj4gPiA+ ID4gKyAgQHBhcmFtW2luXSAgVG9rZW4gICAgICAgICAgIFNlc3Npb24gdG9rZW4uDQo+ID4gPiA+ ICsNCj4gPiA+ID4gKyAgQHJldHZhbCAgICAgRUZJX1NVQ0NFU1MgICAgIFNlc3Npb24gdG9rZW4g aXMgdXBkYXRlZC4NCj4gPiA+ID4gKyAgQHJldHZhbCAgICAgT3RoZXJzICAgICAgICAgIEVycm9y IG9jY3Vycy4NCj4gPiA+ID4gKw0KPiA+ID4gPiArKiovDQo+ID4gPiA+ICtFRklfU1RBVFVTDQo+ ID4gPiA+ICtVcGRhdGVTZXNzaW9uVG9rZW4gKA0KPiA+ID4gPiArICBJTiBSRURGSVNIX1NFUlZJ Q0VfUFJJVkFURSAgKlNlcnZpY2UsDQo+ID4gPiA+ICsgIElOIENIQVI4ICAgICAgICAgICAgICAg ICAgICAqVG9rZW4NCj4gPiA+ID4gKyAgKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArICBpZiAoKFNl cnZpY2UgPT0gTlVMTCkgfHwgSVNfRU1QVFlfU1RSSU5HIChUb2tlbikpIHsNCj4gPiA+ID4gKyAg ICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKyAgaWYgKFNlcnZpY2UtPlNlc3Npb25Ub2tlbiAhPSBOVUxMKSB7DQo+ID4gPiA+ ICsgICAgRnJlZVBvb2wgKFNlcnZpY2UtPlNlc3Npb25Ub2tlbik7DQo+ID4gPiA+ICsgIH0NCj4g PiA+ID4gKw0KPiA+ID4gPiArICBTZXJ2aWNlLT5TZXNzaW9uVG9rZW4gPSBBbGxvY2F0ZUNvcHlQ b29sIChBc2NpaVN0clNpemUgKFRva2VuKSwgVG9rZW4pOw0KPiA+ID4gPiArICBpZiAoU2Vydmlj ZS0+U2Vzc2lvblRva2VuID09IE5VTEwpIHsNCj4gPiA+ID4gKyAgICByZXR1cm4gRUZJX09VVF9P Rl9SRVNPVVJDRVM7DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICByZXR1cm4g RUZJX1NVQ0NFU1M7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4g PiArICBUaGlzIGZ1bmN0aW9uIHJlbGVhc2UgUmVkZmlzaCBTZXJ2aWNlLg0KPiA+ID4gPiArDQo+ ID4gPiA+ICsgIEBwYXJhbVtpbl0gIFNlcnZpY2UgICAgICAgICBQb2ludGVyIHRvIHNlcnZpY2Ug aW5zdGFuY2UuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHJldHZhbCAgICAgRUZJX1NVQ0NFU1Mg ICAgIFNlcnZpY2UgaXMgcmVsZWFzZWQuDQo+ID4gPiA+ICsgIEByZXR2YWwgICAgIE90aGVycyAg ICAgICAgICBFcnJvciBvY2N1cnMuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiAr RUZJX1NUQVRVUw0KPiA+ID4gPiArUmVsZWFzZVJlZGZpc2hTZXJ2aWNlICgNCj4gPiA+ID4gKyAg SU4gUkVERklTSF9TRVJWSUNFX1BSSVZBVEUgICpTZXJ2aWNlDQo+ID4gPiA+ICsgICkNCj4gPiA+ ID4gK3sNCj4gPiA+ID4gKyAgaWYgKFNlcnZpY2UgPT0gTlVMTCkgew0KPiA+ID4gPiArICAgIHJl dHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ ID4gPiArICBpZiAoU2VydmljZS0+SG9zdCAhPSBOVUxMKSB7DQo+ID4gPiA+ICsgICAgRnJlZVBv b2wgKFNlcnZpY2UtPkhvc3QpOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAg aWYgKFNlcnZpY2UtPkhvc3ROYW1lICE9IE5VTEwpIHsNCj4gPiA+ID4gKyAgICBGcmVlUG9vbCAo U2VydmljZS0+SG9zdE5hbWUpOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAg aWYgKFNlcnZpY2UtPkJhc2ljQXV0aCAhPSBOVUxMKSB7DQo+ID4gPiA+ICsgICAgWmVyb01lbSAo U2VydmljZS0+QmFzaWNBdXRoLCBBc2NpaVN0clNpemUgKFNlcnZpY2UtPkJhc2ljQXV0aCkpOw0K PiA+ID4gPiArICAgIEZyZWVQb29sIChTZXJ2aWNlLT5CYXNpY0F1dGgpOw0KPiA+ID4gPiArICB9 DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgaWYgKFNlcnZpY2UtPlNlc3Npb25Ub2tlbiAhPSBOVUxM KSB7DQo+ID4gPiA+ICsgICAgWmVyb01lbSAoU2VydmljZS0+U2Vzc2lvblRva2VuLCBBc2NpaVN0 clNpemUgKFNlcnZpY2UtPlNlc3Npb25Ub2tlbikpOw0KPiA+ID4gPiArICAgIEZyZWVQb29sIChT ZXJ2aWNlLT5TZXNzaW9uVG9rZW4pOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4g KyAgRnJlZVBvb2wgKFNlcnZpY2UpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIHJldHVybiBFRklf U1VDQ0VTUzsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsg IFRoaXMgZnVuY3Rpb24gY3JlYXQgbmV3IHNlcnZpY2UuIEhvc3QgYW5kIEhvc3ROYW1lIGFyZSBj b3BpZWQgdG8NCj4gPiA+ID4gKyAgbmV3bHkgY3JlYXRlZCBzZXJ2aWNlIGluc3RhbmNlLg0KPiA+ ID4gPiArDQo+ID4gPiA+ICsgIEBwYXJhbVtpbl0gIEhvc3QgICAgICAgICAgICBIb3N0IHN0cmlu Zy4NCj4gPiA+ID4gKyAgQHBhcmFtW2luXSAgSG9zdE5hbWUgICAgICAgIEhvc3RuYW1lIHN0cmlu Zy4NCj4gPiA+ID4gKyAgQHBhcmFtW2luXSAgQmFzaWNBdXRoICAgICAgIEJhc2ljIEF1dGhvcml6 YXRpb24gc3RyaW5nLg0KPiA+ID4gPiArICBAcGFyYW1baW5dICBTZXNzaW9uVG9rZW4gICAgU2Vz c2lvbiB0b2tlbiBzdHJpbmcuDQo+ID4gPiA+ICsgIEBwYXJhbVtpbl0gIFJlc3RFeCAgICAgICAg ICBSZXN0IEVYIHByb3RvY29sIGluc3RhbmNlLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEByZXR2 YWwgICAgIFJFREZJU0hfUEFZTE9BRF9QUklWQVRFICBOZXdseSBjcmVhdGVkIHNlcnZpY2UuDQo+ ID4gPiA+ICsgIEByZXR2YWwgICAgIE5VTEwgICAgICAgICAgICAgRXJyb3Igb2NjdXJzLg0KPiA+ ID4gPiArDQo+ID4gPiA+ICsqKi8NCj4gPiA+ID4gK1JFREZJU0hfU0VSVklDRV9QUklWQVRFICoN Cj4gPiA+ID4gK0NyZWF0ZVJlZGZpc2hTZXJ2aWNlICgNCj4gPiA+ID4gKyAgSU4gQ0hBUjggICAg ICAgICAgICAgICAgICpIb3N0LA0KPiA+ID4gPiArICBJTiBDSEFSOCAgICAgICAgICAgICAgICAg Kkhvc3ROYW1lLA0KPiA+ID4gPiArICBJTiBDSEFSOCAgICAgICAgICAgICAgICAgKkJhc2ljQXV0 aCBPUFRJT05BTCwNCj4gPiA+ID4gKyAgSU4gQ0hBUjggICAgICAgICAgICAgICAgICpTZXNzaW9u VG9rZW4gT1BUSU9OQUwsDQo+ID4gPiA+ICsgIElOIEVGSV9SRVNUX0VYX1BST1RPQ09MICAqUmVz dEV4DQo+ID4gPiA+ICsgICkNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKyAgUkVERklTSF9TRVJWSUNF X1BSSVZBVEUgICpOZXdTZXJ2aWNlOw0KPiA+ID4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgQXV0aFN0clNpemU7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgaWYgKElTX0VNUFRZX1NUUklO RyAoSG9zdCkgfHwgSVNfRU1QVFlfU1RSSU5HIChIb3N0TmFtZSkgfHwgKFJlc3RFeA0KPiA9PQ0K PiA+ID4gTlVMTCkpIHsNCj4gPiA+ID4gKyAgICByZXR1cm4gTlVMTDsNCj4gPiA+ID4gKyAgfQ0K PiA+ID4gPiArDQo+ID4gPiA+ICsgIE5ld1NlcnZpY2UgPSBBbGxvY2F0ZVplcm9Qb29sIChzaXpl b2YgKFJFREZJU0hfU0VSVklDRV9QUklWQVRFKSk7DQo+ID4gPiA+ICsgIGlmIChOZXdTZXJ2aWNl ID09IE5VTEwpIHsNCj4gPiA+ID4gKyAgICByZXR1cm4gTlVMTDsNCj4gPiA+ID4gKyAgfQ0KPiA+ ID4gPiArDQo+ID4gPiA+ICsgIE5ld1NlcnZpY2UtPlNpZ25hdHVyZSA9IFJFREZJU0hfSFRUUF9T RVJWSUNFX1NJR05BVFVSRTsNCj4gPiA+ID4gKyAgTmV3U2VydmljZS0+SG9zdCAgICAgID0gQWxs b2NhdGVDb3B5UG9vbCAoQXNjaWlTdHJTaXplIChIb3N0KSwgSG9zdCk7DQo+ID4gPiA+ICsgIGlm IChOZXdTZXJ2aWNlLT5Ib3N0ID09IE5VTEwpIHsNCj4gPiA+ID4gKyAgICBnb3RvIE9OX0VSUk9S Ow0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgTmV3U2VydmljZS0+SG9zdE5h bWUgPSBBbGxvY2F0ZUNvcHlQb29sIChBc2NpaVN0clNpemUgKEhvc3ROYW1lKSwNCj4gPiA+IEhv c3ROYW1lKTsNCj4gPiA+ID4gKyAgaWYgKE5ld1NlcnZpY2UtPkhvc3ROYW1lID09IE5VTEwpIHsN Cj4gPiA+ID4gKyAgICBnb3RvIE9OX0VSUk9SOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4g PiA+ID4gKyAgaWYgKCFJU19FTVBUWV9TVFJJTkcgKEJhc2ljQXV0aCkpIHsNCj4gPiA+ID4gKyAg ICBBdXRoU3RyU2l6ZSAgICAgICAgICAgPSBBc2NpaVN0clNpemUgKEJhc2ljQXV0aCkgKyBBc2Np aVN0ckxlbg0KPiA+ID4gKFJFREZJU0hfSFRUUF9CQVNJQ19BVVRIX1NUUik7DQo+ID4gPiA+ICsg ICAgTmV3U2VydmljZS0+QmFzaWNBdXRoID0gQWxsb2NhdGVaZXJvUG9vbCAoQXV0aFN0clNpemUp Ow0KPiA+ID4gPiArICAgIGlmIChOZXdTZXJ2aWNlLT5CYXNpY0F1dGggPT0gTlVMTCkgew0KPiA+ ID4gPiArICAgICAgZ290byBPTl9FUlJPUjsNCj4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ICsNCj4g PiA+ID4gKyAgICBBc2NpaVNQcmludCAoTmV3U2VydmljZS0+QmFzaWNBdXRoLCBBdXRoU3RyU2l6 ZSwgIiVhJWEiLA0KPiA+ID4gUkVERklTSF9IVFRQX0JBU0lDX0FVVEhfU1RSLCBCYXNpY0F1dGgp Ow0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgaWYgKCFJU19FTVBUWV9TVFJJ TkcgKFNlc3Npb25Ub2tlbikpIHsNCj4gPiA+ID4gKyAgICBOZXdTZXJ2aWNlLT5TZXNzaW9uVG9r ZW4gPSBBbGxvY2F0ZUNvcHlQb29sIChBc2NpaVN0clNpemUNCj4gKFNlc3Npb25Ub2tlbiksDQo+ ID4gPiBTZXNzaW9uVG9rZW4pOw0KPiA+ID4gPiArICAgIGlmIChOZXdTZXJ2aWNlLT5TZXNzaW9u VG9rZW4gPT0gTlVMTCkgew0KPiA+ID4gPiArICAgICAgZ290byBPTl9FUlJPUjsNCj4gPiA+ID4g KyAgICB9DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBOZXdTZXJ2aWNlLT5S ZXN0RXggPSBSZXN0RXg7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgcmV0dXJuIE5ld1NlcnZpY2U7 DQo+ID4gPiA+ICsNCj4gPiA+ID4gK09OX0VSUk9SOg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIFJl bGVhc2VSZWRmaXNoU2VydmljZSAoTmV3U2VydmljZSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAg cmV0dXJuIE5VTEw7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4g PiArICBUaGlzIGZ1bmN0aW9uIHJlbGVhc2UgUmVkZmlzaCBQYXlsb2FkLg0KPiA+ID4gPiArDQo+ ID4gPiA+ICsgIEBwYXJhbVtpbl0gIFBheWxvYWQgICAgICAgICBQb2ludGVyIHRvIHBheWxvYWQg aW5zdGFuY2UuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHJldHZhbCAgICAgRUZJX1NVQ0NFU1Mg ICAgIFBheWxvYWQgaXMgcmVsZWFzZWQuDQo+ID4gPiA+ICsgIEByZXR2YWwgICAgIE90aGVycyAg ICAgICAgICBFcnJvciBvY2N1cnMuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiAr RUZJX1NUQVRVUw0KPiA+ID4gPiArUmVsZWFzZVJlZGZpc2hQYXlsb2FkICgNCj4gPiA+ID4gKyAg SU4gUkVERklTSF9QQVlMT0FEX1BSSVZBVEUgICpQYXlsb2FkDQo+ID4gPiA+ICsgICkNCj4gPiA+ ID4gK3sNCj4gPiA+ID4gKyAgaWYgKFBheWxvYWQgPT0gTlVMTCkgew0KPiA+ID4gPiArICAgIHJl dHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ ID4gPiArICBpZiAoUGF5bG9hZC0+U2VydmljZSAhPSBOVUxMKSB7DQo+ID4gPiA+ICsgICAgUmVs ZWFzZVJlZGZpc2hTZXJ2aWNlIChQYXlsb2FkLT5TZXJ2aWNlKTsNCj4gPiA+ID4gKyAgfQ0KPiA+ ID4gPiArDQo+ID4gPiA+ICsgIGlmIChQYXlsb2FkLT5Kc29uVmFsdWUgIT0gTlVMTCkgew0KPiA+ ID4gPiArICAgIEpzb25WYWx1ZUZyZWUgKFBheWxvYWQtPkpzb25WYWx1ZSk7DQo+ID4gPiA+ICsg IH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBGcmVlUG9vbCAoUGF5bG9hZCk7DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAgVGhpcyBmdW5jdGlvbiBjcmVhdCBuZXcgcGF5bG9hZC4g U2VydmVyIGFuZCBKc29uT2JqIGFyZQ0KPiA+ID4gPiArICBjb3BpZWQgdG8gbmV3bHkgY3JlYXRl ZCBwYXlsb2FkLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEBwYXJhbVtpbl0gIFNlcnZpY2UgICAg ICAgICAgUG9pbnRlciB0byBTZXJ2aWNlIGluc3RhbmNlLg0KPiA+ID4gPiArICBAcGFyYW1baW5d ICBKc29uVmFsdWUgICAgICAgIFBvaW50ZXIgdG8gSlNPTiB2YWx1ZS4NCj4gPiA+ID4gKw0KPiA+ ID4gPiArICBAcmV0dmFsICAgICBSRURGSVNIX1BBWUxPQURfUFJJVkFURSAgTmV3bHkgY3JlYXRl ZCBwYXlsb2FkLg0KPiA+ID4gPiArICBAcmV0dmFsICAgICBOVUxMICAgICAgICAgICAgICAgICAg ICAgRXJyb3Igb2NjdXJzLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsqKi8NCj4gPiA+ID4gK1JFREZJ U0hfUEFZTE9BRF9QUklWQVRFICoNCj4gPiA+ID4gK0NyZWF0ZVJlZGZpc2hQYXlsb2FkICgNCj4g PiA+ID4gKyAgSU4gUkVERklTSF9TRVJWSUNFX1BSSVZBVEUgICpTZXJ2aWNlLA0KPiA+ID4gPiAr ICBJTiBFREtJSV9KU09OX1ZBTFVFICAgICAgICAgSnNvblZhbHVlDQo+ID4gPiA+ICsgICkNCj4g PiA+ID4gK3sNCj4gPiA+ID4gKyAgUkVERklTSF9QQVlMT0FEX1BSSVZBVEUgICpOZXdQYXlsb2Fk Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIGlmICgoU2VydmljZSA9PSBOVUxMKSB8fCAoSnNvblZh bHVlID09IE5VTEwpKSB7DQo+ID4gPiA+ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4gPiA+ICsgIH0N Cj4gPiA+ID4gKw0KPiA+ID4gPiArICBOZXdQYXlsb2FkID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6 ZW9mIChSRURGSVNIX1BBWUxPQURfUFJJVkFURSkpOw0KPiA+ID4gPiArICBpZiAoTmV3UGF5bG9h ZCA9PSBOVUxMKSB7DQo+ID4gPiA+ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4gPiA+ICsgIH0NCj4g PiA+ID4gKw0KPiA+ID4gPiArICBOZXdQYXlsb2FkLT5TaWduYXR1cmUgPSBSRURGSVNIX0hUVFBf UEFZTE9BRF9TSUdOQVRVUkU7DQo+ID4gPiA+ICsgIE5ld1BheWxvYWQtPlNlcnZpY2UgICA9IENy ZWF0ZVJlZGZpc2hTZXJ2aWNlIChTZXJ2aWNlLT5Ib3N0LCBTZXJ2aWNlLQ0KPiA+ID4gPkhvc3RO YW1lLCBTZXJ2aWNlLT5CYXNpY0F1dGgsIFNlcnZpY2UtPlNlc3Npb25Ub2tlbiwgU2VydmljZS0+ UmVzdEV4KTsNCj4gPiA+ID4gKyAgaWYgKE5ld1BheWxvYWQtPlNlcnZpY2UgPT0gTlVMTCkgew0K PiA+ID4gPiArICAgIGdvdG8gT05fRVJST1I7DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ ID4gPiArICBOZXdQYXlsb2FkLT5Kc29uVmFsdWUgPSBKc29uVmFsdWVDbG9uZSAoSnNvblZhbHVl KTsNCj4gPiA+ID4gKyAgaWYgKE5ld1BheWxvYWQtPkpzb25WYWx1ZSA9PSBOVUxMKSB7DQo+ID4g PiA+ICsgICAgZ290byBPTl9FUlJPUjsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ ICsgIHJldHVybiBOZXdQYXlsb2FkOw0KPiA+ID4gPiArDQo+ID4gPiA+ICtPTl9FUlJPUjoNCj4g PiA+ID4gKw0KPiA+ID4gPiArICBSZWxlYXNlUmVkZmlzaFBheWxvYWQgKE5ld1BheWxvYWQpOw0K PiA+ID4gPiArDQo+ID4gPg0KPiA+ID4NCj4gPiA+IE5ld1BheWxvYWQtPlNlcnZpY2UgIGlzIGxl YWtlZA0KPiA+ID4NCj4gPiA+DQo+ID4gPiA+ICsgIHJldHVybiBOVUxMOw0KPiA+ID4gPiArfQ0K PiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAgVGhpcyBmdW5jdGlvbiBjb3B5IHRo ZSBkYXRhIGluIFNyY1Jlc3BvbnNlIHRvIERzdFJlc3BvbnNlLg0KPiA+ID4gPiArDQo+ID4gPiA+ ICsgIEBwYXJhbVtpbl0gIFNyY1Jlc3BvbnNlICAgICAgU291cmNlIFJlc3BvbnNlIHRvIGNvcHku DQo+ID4gPiA+ICsgIEBwYXJhbVtvdXRdIERzdFJlc3BvbnNlICAgICAgRGVzdGluYXRpb24gUmVz cG9uc2UuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHJldHZhbCAgICAgRUZJX1NVQ0NFU1MgICAg ICBSZXNwb25zZSBpcyBjb3BpZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ID4gPiArICBAcmV0dmFsICAg ICBPdGhlcnMgICAgICAgICAgIEVycm9yIG9jY3Vycy4NCj4gPiA+ID4gKw0KPiA+ID4gPiArKiov DQo+ID4gPiA+ICtFRklfU1RBVFVTDQo+ID4gPiA+ICtDb3B5UmVkZmlzaFJlc3BvbnNlICgNCj4g PiA+ID4gKyAgSU4gIFJFREZJU0hfUkVTUE9OU0UgICpTcmNSZXNwb25zZSwNCj4gPiA+ID4gKyAg T1VUIFJFREZJU0hfUkVTUE9OU0UgICpEc3RSZXNwb25zZQ0KPiA+ID4gPiArICApDQo+ID4gPiA+ ICt7DQo+ID4gPiA+ICsgIFJFREZJU0hfUEFZTE9BRF9QUklWQVRFICAqUGF5bG9hZDsNCj4gPiA+ ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiA+ID4gPiArDQo+ID4gPiA+ ICsgIGlmICgoU3JjUmVzcG9uc2UgPT0gTlVMTCkgfHwgKERzdFJlc3BvbnNlID09IE5VTEwpKSB7 DQo+ID4gPiA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiA+ID4gKyAg fQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIGlmIChTcmNSZXNwb25zZSA9PSBEc3RSZXNwb25zZSkg ew0KPiA+ID4gPiArICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4g PiArDQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIC8vIFN0YXR1cyBjb2RlDQo+ID4gPiA+ICsg IC8vDQo+ID4gPiA+ICsgIGlmIChTcmNSZXNwb25zZS0+U3RhdHVzQ29kZSAhPSBOVUxMKSB7DQo+ ID4gPiA+ICsgICAgRHN0UmVzcG9uc2UtPlN0YXR1c0NvZGUgPSBBbGxvY2F0ZUNvcHlQb29sIChz aXplb2YNCj4gPiA+IChFRklfSFRUUF9TVEFUVVNfQ09ERSksIFNyY1Jlc3BvbnNlLT5TdGF0dXND b2RlKTsNCj4gPiA+ID4gKyAgICBpZiAoRHN0UmVzcG9uc2UtPlN0YXR1c0NvZGUgPT0gTlVMTCkg ew0KPiA+ID4gPiArICAgICAgZ290byBPTl9FUlJPUjsNCj4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAvLw0KPiA+ID4gPiArICAvLyBIZWFkZXINCj4g PiA+ID4gKyAgLy8NCj4gPiA+ID4gKyAgaWYgKChTcmNSZXNwb25zZS0+SGVhZGVyQ291bnQgPiAw KSAmJiAoU3JjUmVzcG9uc2UtPkhlYWRlcnMgIT0gTlVMTCkpDQo+IHsNCj4gPiA+ID4gKyAgICBE c3RSZXNwb25zZS0+SGVhZGVyQ291bnQgPSAwOw0KPiA+ID4gPiArICAgIERzdFJlc3BvbnNlLT5I ZWFkZXJzICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAoRUZJX0hUVFBfSEVBREVSKQ0K PiAqDQo+ID4gPiBTcmNSZXNwb25zZS0+SGVhZGVyQ291bnQpOw0KPiA+ID4gPiArICAgIGlmIChE c3RSZXNwb25zZS0+SGVhZGVycyA9PSBOVUxMKSB7DQo+ID4gPiA+ICsgICAgICBnb3RvIE9OX0VS Uk9SOw0KPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIGZvciAoSW5kZXgg PSAwOyBJbmRleCA8IFNyY1Jlc3BvbnNlLT5IZWFkZXJDb3VudDsgSW5kZXgrKykgew0KPiA+ID4g PiArICAgICAgRHN0UmVzcG9uc2UtPkhlYWRlcnNbSW5kZXhdLkZpZWxkTmFtZSA9IEFsbG9jYXRl Q29weVBvb2wNCj4gKEFzY2lpU3RyU2l6ZQ0KPiA+ID4gKFNyY1Jlc3BvbnNlLT5IZWFkZXJzW0lu ZGV4XS5GaWVsZE5hbWUpLCBTcmNSZXNwb25zZS0NCj4gPiA+ID5IZWFkZXJzW0luZGV4XS5GaWVs ZE5hbWUpOw0KPiA+ID4gPiArICAgICAgaWYgKERzdFJlc3BvbnNlLT5IZWFkZXJzW0luZGV4XS5G aWVsZE5hbWUgPT0gTlVMTCkgew0KPiA+ID4gPiArICAgICAgICBnb3RvIE9OX0VSUk9SOw0KPiA+ ID4gPiArICAgICAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgICBEc3RSZXNwb25zZS0+SGVh ZGVyc1tJbmRleF0uRmllbGRWYWx1ZSA9IEFsbG9jYXRlQ29weVBvb2wNCj4gKEFzY2lpU3RyU2l6 ZQ0KPiA+ID4gKFNyY1Jlc3BvbnNlLT5IZWFkZXJzW0luZGV4XS5GaWVsZFZhbHVlKSwgU3JjUmVz cG9uc2UtDQo+ID4gPiA+SGVhZGVyc1tJbmRleF0uRmllbGRWYWx1ZSk7DQo+ID4gPiA+ICsgICAg ICBpZiAoRHN0UmVzcG9uc2UtPkhlYWRlcnNbSW5kZXhdLkZpZWxkVmFsdWUgPT0gTlVMTCkgew0K PiA+ID4gPiArICAgICAgICBnb3RvIE9OX0VSUk9SOw0KPiA+ID4gPiArICAgICAgfQ0KPiA+ID4g PiArDQo+ID4gPiA+ICsgICAgICBEc3RSZXNwb25zZS0+SGVhZGVyQ291bnQgKz0gMTsNCj4gPiA+ ID4gKyAgICB9DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAvLw0KPiA+ID4g PiArICAvLyBQYXlsb2FkDQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIGlmIChTcmNSZXNwb25z ZS0+UGF5bG9hZCAhPSBOVUxMKSB7DQo+ID4gPiA+ICsgICAgUGF5bG9hZCA9IChSRURGSVNIX1BB WUxPQURfUFJJVkFURSAqKVNyY1Jlc3BvbnNlLT5QYXlsb2FkOw0KPiA+ID4gPiArICAgIGlmIChQ YXlsb2FkLT5TaWduYXR1cmUgIT0gUkVERklTSF9IVFRQX1BBWUxPQURfU0lHTkFUVVJFKSB7DQo+ ID4gPiA+ICsgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6IHNpZ25hdHVyZSBjaGVjayBm YWlsdXJlXG4iLCBfX2Z1bmNfXykpOw0KPiA+ID4gPiArICAgICAgZ290byBPTl9FUlJPUjsNCj4g PiA+ID4gKyAgICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBEc3RSZXNwb25zZS0+UGF5bG9h ZCA9IENyZWF0ZVJlZGZpc2hQYXlsb2FkIChQYXlsb2FkLT5TZXJ2aWNlLA0KPiBQYXlsb2FkLQ0K PiA+ID4gPkpzb25WYWx1ZSk7DQo+ID4gPiA+ICsgICAgaWYgKERzdFJlc3BvbnNlLT5QYXlsb2Fk ICA9PSBOVUxMKSB7DQo+ID4gPiA+ICsgICAgICBnb3RvIE9OX0VSUk9SOw0KPiA+ID4gPiArICAg IH0NCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIHJldHVybiBFRklfU1VDQ0VT UzsNCj4gPiA+ID4gKw0KPiA+ID4gPiArT05fRVJST1I6DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAg UmVsZWFzZVJlZGZpc2hSZXNwb25zZSAoRHN0UmVzcG9uc2UpOw0KPiA+ID4gPiArDQo+ID4gPiA+ ICsgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0K PiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgIFRoaXMgZnVuY3Rpb24gY2xvbmUgaW5wdXQgcmVzcG9u c2UgYW5kIHJldHVybiB0byBjYWxsZXINCj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcGFyYW1baW5d ICBSZXNwb25zZSAgICAgIFJlc3BvbnNlIHRvIGNsb25lLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsg IEByZXR2YWwgICAgIFJFREZJU0hfUkVTUE9OU0UgKiAgUmVzcG9uc2UgaXMgY2xvbmVkLg0KPiA+ ID4gPiArICBAcmV0dmFsICAgICBOVUxMICAgICAgICAgICAgICAgIEVycm9ycyBvY2N1ci4NCj4g PiA+ID4gKw0KPiA+ID4gPiArKiovDQo+ID4gPiA+ICtSRURGSVNIX1JFU1BPTlNFICoNCj4gPiA+ ID4gK0Nsb25lUmVkZmlzaFJlc3BvbnNlICgNCj4gPiA+ID4gKyAgSU4gUkVERklTSF9SRVNQT05T RSAgKlJlc3BvbnNlDQo+ID4gPiA+ICsgICkNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKyAgRUZJX1NU QVRVUyAgICAgICAgU3RhdHVzOw0KPiA+ID4gPiArICBSRURGSVNIX1JFU1BPTlNFICAqTmV3UmVz cG9uc2U7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgaWYgKFJlc3BvbnNlID09IE5VTEwpIHsNCj4g PiA+ID4gKyAgICByZXR1cm4gTlVMTDsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ ICsgIE5ld1Jlc3BvbnNlID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChSRURGSVNIX1JFU1BP TlNFKSk7DQo+ID4gPiA+ICsgIGlmIChOZXdSZXNwb25zZSA9PSBOVUxMKSB7DQo+ID4gPiA+ICsg ICAgcmV0dXJuIE5VTEw7DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBTdGF0 dXMgPSBDb3B5UmVkZmlzaFJlc3BvbnNlIChSZXNwb25zZSwgTmV3UmVzcG9uc2UpOw0KPiA+ID4g PiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiA+ICsgICAgRnJlZVBvb2wgKE5l d1Jlc3BvbnNlKTsNCj4gPiA+ID4gKyAgICByZXR1cm4gTlVMTDsNCj4gPiA+ID4gKyAgfQ0KPiA+ ID4gPiArDQo+ID4gPiA+ICsgIHJldHVybiBOZXdSZXNwb25zZTsNCj4gPiA+ID4gK30NCj4gPiA+ ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgIFJlbGVhc2UgUkVERklTSF9IVFRQX0NBQ0hF X0RBVEEgcmVzb3VyY2UNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcGFyYW1baW5dICAgIERhdGEg ICAgUG9pbnRlciB0byBSRURGSVNIX0hUVFBfQ0FDSEVfREFUQSBpbnN0YW5jZQ0KPiA+ID4gPiAr DQo+ID4gPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgUkVERklTSF9IVFRQ X0NBQ0hFX0RBVEEgaXMgcmVsZWFzZWQNCj4gPiA+IHN1Y2Nlc3NmdWxseS4NCj4gPiA+ID4gKyAg QHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICBEYXRhIGlzIE5VTEwNCj4gPiA+ID4gKw0K PiA+ID4gPiArKiovDQo+ID4gPiA+ICtFRklfU1RBVFVTDQo+ID4gPiA+ICtSZWxlYXNlSHR0cENh Y2hlRGF0YSAoDQo+ID4gPiA+ICsgIElOIFJFREZJU0hfSFRUUF9DQUNIRV9EQVRBICAqRGF0YQ0K PiA+ID4gPiArICApDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgIGlmIChEYXRhID09IE5VTEwpIHsN Cj4gPiA+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ID4gPiArICB9 DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgaWYgKERhdGEtPlVyaSAhPSBOVUxMKSB7DQo+ID4gPiA+ ICsgICAgRnJlZVBvb2wgKERhdGEtPlVyaSk7DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ ID4gPiArICBpZiAoRGF0YS0+UmVzcG9uc2UgIT0gTlVMTCkgew0KPiA+ID4gPiArICAgIFJlbGVh c2VSZWRmaXNoUmVzcG9uc2UgKERhdGEtPlJlc3BvbnNlKTsNCj4gPiA+ID4gKyAgICBGcmVlUG9v bCAoRGF0YS0+UmVzcG9uc2UpOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAg RnJlZVBvb2wgKERhdGEpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIHJldHVybiBFRklfU1VDQ0VT UzsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgIENyZWF0 ZSBuZXcgY2FjaGUgZGF0YS4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcGFyYW1baW5dICAgIFVy aSAgICAgICBUaGUgVVJJIHN0cmluZyBtYXRjaGluZyB0byB0aGlzIGNhY2hlIGRhdGEuDQo+ID4g PiA+ICsgIEBwYXJhbVtpbl0gICAgUmVzcG9uc2UgIEhUVFAgcmVzcG9uc2UuDQo+ID4gPiA+ICsN Cj4gPiA+ID4gKyAgQHJldHZhbCBSRURGSVNIX0hUVFBfQ0FDSEVfREFUQSAqICAgUG9pbnRlciB0 byBuZXdseSBjcmVhdGVkIGNhY2hlDQo+ID4gPiBkYXRhLg0KPiA+ID4gPiArICBAcmV0dmFsIE5V TEwgICAgICAgICAgICAgICAgICAgICAgICBObyBtZW1vcnkgYXZhaWxhYmxlLg0KPiA+ID4gPiAr DQo+ID4gPiA+ICsqKi8NCj4gPiA+ID4gK1JFREZJU0hfSFRUUF9DQUNIRV9EQVRBICoNCj4gPiA+ ID4gK05ld0h0dHBDYWNoZURhdGEgKA0KPiA+ID4gPiArICBJTiAgRUZJX1NUUklORyAgICAgICAg VXJpLA0KPiA+ID4gPiArICBJTiAgUkVERklTSF9SRVNQT05TRSAgKlJlc3BvbnNlDQo+ID4gPiA+ ICsgICkNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKyAgUkVERklTSF9IVFRQX0NBQ0hFX0RBVEEgICpO ZXdEYXRhOw0KPiA+ID4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgU2l6ZTsNCj4gPiA+ ID4gKw0KPiA+ID4gPiArICBpZiAoSVNfRU1QVFlfU1RSSU5HIChVcmkpIHx8IChSZXNwb25zZSA9 PSBOVUxMKSkgew0KPiA+ID4gPiArICAgIHJldHVybiBOVUxMOw0KPiA+ID4gPiArICB9DQo+ID4g PiA+ICsNCj4gPiA+ID4gKyAgTmV3RGF0YSA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAoUkVE RklTSF9IVFRQX0NBQ0hFX0RBVEEpKTsNCj4gPiA+ID4gKyAgaWYgKE5ld0RhdGEgPT0gTlVMTCkg ew0KPiA+ID4gPiArICAgIHJldHVybiBOVUxMOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4g PiA+ID4gKyAgTmV3RGF0YS0+U2lnbmF0dXJlID0gUkVERklTSF9IVFRQX0NBQ0hFX1NJR05BVFVS RTsNCj4gPiA+ID4gKyAgU2l6ZSAgICAgICAgICAgICAgID0gU3RyU2l6ZSAoVXJpKTsNCj4gPiA+ ID4gKyAgTmV3RGF0YS0+VXJpICAgICAgID0gQWxsb2NhdGVDb3B5UG9vbCAoU2l6ZSwgVXJpKTsN Cj4gPiA+ID4gKyAgaWYgKE5ld0RhdGEtPlVyaSA9PSBOVUxMKSB7DQo+ID4gPiA+ICsgICAgZ290 byBPTl9FUlJPUjsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIE5ld0RhdGEt PlJlc3BvbnNlID0gUmVzcG9uc2U7DQo+ID4gPiA+ICsgIE5ld0RhdGEtPkhpdENvdW50ID0gMTsN Cj4gPiA+ID4gKw0KPiA+ID4gPiArICByZXR1cm4gTmV3RGF0YTsNCj4gPiA+ID4gKw0KPiA+ID4g PiArT05fRVJST1I6DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgaWYgKE5ld0RhdGEgIT0gTlVMTCkg ew0KPiA+ID4gPiArICAgIFJlbGVhc2VIdHRwQ2FjaGVEYXRhIChOZXdEYXRhKTsNCj4gPiA+ID4g KyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIHJldHVybiBOVUxMOw0KPiA+ID4gPiArfQ0KPiA+ ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAgU2VhcmNoIG9uIGdpdmVuIExpc3RIZWFk ZXIgZm9yIGdpdmVuIFVSSSBzdHJpbmcuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHBhcmFtW2lu XSAgICBMaXN0SGVhZGVyICBUYXJnZXQgbGlzdCB0byBzZWFyY2guDQo+ID4gPiA+ICsgIEBwYXJh bVtpbl0gICAgVXJpICAgICAgICAgVGFyZ2V0IFVSSSB0byBzZWFyY2guDQo+ID4gPiA+ICsNCj4g PiA+ID4gKyAgQHJldHZhbCBSRURGSVNIX0hUVFBfQ0FDSEVfREFUQSAgIFRhcmdldCBjYWNoZSBk YXRhIGlzIGZvdW5kLg0KPiA+ID4gPiArICBAcmV0dmFsIE5VTEwgICAgICAgICAgICAgICAgICAg ICAgTm8gY2FjaGUgZGF0YSB3aXRoIGdpdmVuIFVSSSBpcyBmb3VuZC4NCj4gPiA+ID4gKw0KPiA+ ID4gPiArKiovDQo+ID4gPiA+ICtSRURGSVNIX0hUVFBfQ0FDSEVfREFUQSAqDQo+ID4gPiA+ICtG aW5kSHR0cENhY2hlRGF0YSAoDQo+ID4gPiA+ICsgIElOICBMSVNUX0VOVFJZICAqTGlzdEhlYWRl ciwNCj4gPiA+ID4gKyAgSU4gIEVGSV9TVFJJTkcgIFVyaQ0KPiA+ID4gPiArICApDQo+ID4gPiA+ ICt7DQo+ID4gPiA+ICsgIExJU1RfRU5UUlkgICAgICAgICAgICAgICAqTGlzdDsNCj4gPiA+ID4g KyAgUkVERklTSF9IVFRQX0NBQ0hFX0RBVEEgICpEYXRhOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsg IGlmIChJU19FTVBUWV9TVFJJTkcgKFVyaSkpIHsNCj4gPiA+ID4gKyAgICByZXR1cm4gTlVMTDsN Cj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIGlmIChJc0xpc3RFbXB0eSAoTGlz dEhlYWRlcikpIHsNCj4gPiA+ID4gKyAgICByZXR1cm4gTlVMTDsNCj4gPiA+ID4gKyAgfQ0KPiA+ ID4gPiArDQo+ID4gPiA+ICsgIERhdGEgPSBOVUxMOw0KPiA+ID4gPiArICBMaXN0ID0gR2V0Rmly c3ROb2RlIChMaXN0SGVhZGVyKTsNCj4gPiA+ID4gKyAgd2hpbGUgKCFJc051bGwgKExpc3RIZWFk ZXIsIExpc3QpKSB7DQo+ID4gPiA+ICsgICAgRGF0YSA9IFJFREZJU0hfSFRUUF9DQUNIRV9GUk9N X0xJU1QgKExpc3QpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgaWYgKFN0ckNtcCAoRGF0YS0+ VXJpLCBVcmkpID09IDApIHsNCj4gPiA+ID4gKyAgICAgIHJldHVybiBEYXRhOw0KPiA+ID4gPiAr ICAgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIExpc3QgPSBHZXROZXh0Tm9kZSAoTGlzdEhl YWRlciwgTGlzdCk7DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICByZXR1cm4g TlVMTDsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgIFNl YXJjaCBvbiBnaXZlbiBMaXN0SGVhZGVyIGFuZCByZXR1cm4gY2FjaGUgZGF0YSB3aXRoIG1pbmlt dW0gaGl0DQo+IGNvdW50Lg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEBwYXJhbVtpbl0gICAgTGlz dEhlYWRlciAgVGFyZ2V0IGxpc3QgdG8gc2VhcmNoLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEBy ZXR2YWwgUkVERklTSF9IVFRQX0NBQ0hFX0RBVEEgICBUYXJnZXQgY2FjaGUgZGF0YSBpcyByZXR1 cm5lZC4NCj4gPiA+ID4gKyAgQHJldHZhbCBOVUxMICAgICAgICAgICAgICAgICAgICAgIE5vIGNh Y2hlIGRhdGEgaXMgZm91bmQuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiArUkVE RklTSF9IVFRQX0NBQ0hFX0RBVEEgKg0KPiA+ID4gPiArRmluZFVudXNlZEh0dHBDYWNoZURhdGEg KA0KPiA+ID4gPiArICBJTiAgTElTVF9FTlRSWSAgKkxpc3RIZWFkZXINCj4gPiA+ID4gKyAgKQ0K PiA+ID4gPiArew0KPiA+ID4gPiArICBMSVNUX0VOVFJZICAgICAgICAgICAgICAgKkxpc3Q7DQo+ ID4gPiA+ICsgIFJFREZJU0hfSFRUUF9DQUNIRV9EQVRBICAqRGF0YTsNCj4gPiA+ID4gKyAgUkVE RklTSF9IVFRQX0NBQ0hFX0RBVEEgICpVbnVzZWREYXRhOw0KPiA+ID4gPiArICBVSU5UTiAgICAg ICAgICAgICAgICAgICAgSGl0Q291bnQ7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgaWYgKElzTGlz dEVtcHR5IChMaXN0SGVhZGVyKSkgew0KPiA+ID4gPiArICAgIHJldHVybiBOVUxMOw0KPiA+ID4g PiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgRGF0YSAgICAgICA9IE5VTEw7DQo+ID4gPiA+ ICsgIFVudXNlZERhdGEgPSBOVUxMOw0KPiA+ID4gPiArICBIaXRDb3VudCAgID0gMDsNCj4gPiA+ ID4gKw0KPiA+ID4gPiArICBMaXN0ICAgICAgID0gR2V0Rmlyc3ROb2RlIChMaXN0SGVhZGVyKTsN Cj4gPiA+ID4gKyAgRGF0YSAgICAgICA9IFJFREZJU0hfSFRUUF9DQUNIRV9GUk9NX0xJU1QgKExp c3QpOw0KPiA+ID4gPiArICBVbnVzZWREYXRhID0gRGF0YTsNCj4gPiA+ID4gKyAgSGl0Q291bnQg ICA9IERhdGEtPkhpdENvdW50Ow0KPiA+ID4gPiArICBMaXN0ICAgICAgID0gR2V0TmV4dE5vZGUg KExpc3RIZWFkZXIsIExpc3QpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIHdoaWxlICghSXNOdWxs IChMaXN0SGVhZGVyLCBMaXN0KSkgew0KPiA+ID4gPiArICAgIERhdGEgPSBSRURGSVNIX0hUVFBf Q0FDSEVfRlJPTV9MSVNUIChMaXN0KTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIGlmIChEYXRh LT5IaXRDb3VudCA8IEhpdENvdW50KSB7DQo+ID4gPiA+ICsgICAgICBIaXRDb3VudCAgID0gRGF0 YS0+SGl0Q291bnQ7DQo+ID4gPiA+ICsgICAgICBVbnVzZWREYXRhID0gRGF0YTsNCj4gPiA+ID4g KyAgICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBMaXN0ID0gR2V0TmV4dE5vZGUgKExpc3RI ZWFkZXIsIExpc3QpOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgcmV0dXJu IFVudXNlZERhdGE7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4g PiArICBEZWxldGUgYSBjYWNoZSBkYXRhIGJ5IGdpdmVuIGNhY2hlIGluc3RhbmNlLg0KPiA+ID4g PiArDQo+ID4gPiA+ICsgIEBwYXJhbVtpbl0gICAgTGlzdCAgICBUYXJnZXQgY2FjaGUgbGlzdCB0 byBiZSByZW1vdmVkLg0KPiA+ID4gPiArICBAcGFyYW1baW5dICAgIERhdGEgICAgUG9pbnRlciB0 byB0aGUgaW5zdGFuY2UgdG8gYmUgZGVsZXRlZC4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgQ2FjaGUgZGF0YSBpcyByZW1vdmVkLg0KPiA+ID4gPiArICBAcmV0 dmFsIE90aGVycyAgICAgICAgRmFpbCB0byByZW1vdmUgY2FjaGUgZGF0YS4NCj4gPiA+ID4gKw0K PiA+ID4gPiArKiovDQo+ID4gPiA+ICtFRklfU1RBVFVTDQo+ID4gPiA+ICtEZWxldGVIdHRwQ2Fj aGVEYXRhICgNCj4gPiA+ID4gKyAgSU4gIFJFREZJU0hfSFRUUF9DQUNIRV9MSVNUICAqTGlzdCwN Cj4gPiA+ID4gKyAgSU4gIFJFREZJU0hfSFRUUF9DQUNIRV9EQVRBICAqRGF0YQ0KPiA+ID4gPiAr ICApDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgIGlmICgoTGlzdCA9PSBOVUxMKSB8fCAoRGF0YSA9 PSBOVUxMKSkgew0KPiA+ID4gPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBERUJVRyAoKFJFREZJU0hfSFRUUF9D QUNIRV9ERUJVRywgIiVhOiBkZWxldGU6ICVzXG4iLCBfX2Z1bmNfXywNCj4gPiA+IERhdGEtPlVy aSkpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIFJlbW92ZUVudHJ5TGlzdCAoJkRhdGEtPkxpc3Qp Ow0KPiA+ID4gPiArICAtLUxpc3QtPkNvdW50Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIHJldHVy biBSZWxlYXNlSHR0cENhY2hlRGF0YSAoRGF0YSk7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4g PiA+ID4gKy8qKg0KPiA+ID4gPiArICBBZGQgbmV3IGNhY2hlIGJ5IGdpdmVuIFVSSSBhbmQgSFRU UCByZXNwb25zZSB0byBzcGVjaWZ5IExpc3QuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHBhcmFt W2luXSAgICBMaXN0ICAgICAgVGFyZ2V0IGNhY2hlIGxpc3QgdG8gYWRkLg0KPiA+ID4gPiArICBA cGFyYW1baW5dICAgIFVyaSAgICAgICBUaGUgVVJJIHN0cmluZyBtYXRjaGluZyB0byB0aGlzIGNh Y2hlIGRhdGEuDQo+ID4gPiA+ICsgIEBwYXJhbVtpbl0gICAgUmVzcG9uc2UgIEhUVFAgcmVzcG9u c2UuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgIENhY2hlIGRh dGEgaXMgYWRkZWQuDQo+ID4gPiA+ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICBGYWlsIHRvIGFk ZCBjYWNoZSBkYXRhLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsqKi8NCj4gPiA+ID4gK0VGSV9TVEFU VVMNCj4gPiA+ID4gK0FkZEh0dHBDYWNoZURhdGEgKA0KPiA+ID4gPiArICBJTiAgUkVERklTSF9I VFRQX0NBQ0hFX0xJU1QgICpMaXN0LA0KPiA+ID4gPiArICBJTiAgRUZJX1NUUklORyAgICAgICAg ICAgICAgIFVyaSwNCj4gPiA+ID4gKyAgSU4gIFJFREZJU0hfUkVTUE9OU0UgICAgICAgICAqUmVz cG9uc2UNCj4gPiA+ID4gKyAgKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArICBSRURGSVNIX0hUVFBf Q0FDSEVfREFUQSAgKk5ld0RhdGE7DQo+ID4gPiA+ICsgIFJFREZJU0hfSFRUUF9DQUNIRV9EQVRB ICAqT2xkRGF0YTsNCj4gPiA+ID4gKyAgUkVERklTSF9IVFRQX0NBQ0hFX0RBVEEgICpVbnVzZWRE YXRhOw0KPiA+ID4gPiArICBSRURGSVNIX1JFU1BPTlNFICAgICAgICAgKk5ld1Jlc3BvbnNlOw0K PiA+ID4gPiArDQo+ID4gPiA+ICsgIGlmICgoTGlzdCA9PSBOVUxMKSB8fCBJU19FTVBUWV9TVFJJ TkcgKFVyaSkgfHwgKFJlc3BvbnNlID09IE5VTEwpKSB7DQo+ID4gPiA+ICsgICAgcmV0dXJuIEVG SV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsg IC8vDQo+ID4gPiA+ICsgIC8vIElmIHNhbWUgY2FjaGUgZGF0YSBleGlzdCwgcmVwbGFjZSBpdCB3 aXRoIGxhdGVzdCBvbmUuDQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIE9sZERhdGEgPSBGaW5k SHR0cENhY2hlRGF0YSAoJkxpc3QtPkhlYWQsIFVyaSk7DQo+ID4gPiA+ICsgIGlmIChPbGREYXRh ICE9IE5VTEwpIHsNCj4gPiA+ID4gKyAgICBEZWxldGVIdHRwQ2FjaGVEYXRhIChMaXN0LCBPbGRE YXRhKTsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsg IC8vIENoZWNrIGNhcGFjaXR5DQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIGlmIChMaXN0LT5D b3VudCA+PSBMaXN0LT5DYXBhY2l0eSkgew0KPiA+ID4gPiArICAgIERFQlVHICgoUkVERklTSF9I VFRQX0NBQ0hFX0RFQlVHLCAiJWE6IGxpc3QgaXMgZnVsbCBhbmQgcmV0aXJlDQo+IHVudXNlZA0K PiA+ID4gY2FjaGVcbiIsIF9fZnVuY19fKSk7DQo+ID4gPiA+ICsgICAgVW51c2VkRGF0YSA9IEZp bmRVbnVzZWRIdHRwQ2FjaGVEYXRhICgmTGlzdC0+SGVhZCk7DQo+ID4gPiA+ICsgICAgaWYgKFVu dXNlZERhdGEgPT0gTlVMTCkgew0KPiA+ID4gPiArICAgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVT T1VSQ0VTOw0KPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIERlbGV0ZUh0 dHBDYWNoZURhdGEgKExpc3QsIFVudXNlZERhdGEpOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKyAgLy8NCj4gPiA+ID4gKyAgLy8gQ2xvbmUgYSBsb2NhbCBjb3B5DQo+ID4gPiA+ ICsgIC8vDQo+ID4gPiA+ICsgIE5ld1Jlc3BvbnNlID0gQ2xvbmVSZWRmaXNoUmVzcG9uc2UgKFJl c3BvbnNlKTsNCj4gPiA+ID4gKyAgaWYgKE5ld1Jlc3BvbnNlID09IE5VTEwpIHsNCj4gPiA+ID4g KyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4g Kw0KPiA+ID4gPiArICBOZXdEYXRhID0gTmV3SHR0cENhY2hlRGF0YSAoVXJpLCBOZXdSZXNwb25z ZSk7DQo+ID4gPiA+ICsgIGlmIChOZXdEYXRhID09IE5VTEwpIHsNCj4gPiA+ID4gKyAgICByZXR1 cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4g PiArICBJbnNlcnRUYWlsTGlzdCAoJkxpc3QtPkhlYWQsICZOZXdEYXRhLT5MaXN0KTsNCj4gPiA+ ID4gKyAgKytMaXN0LT5Db3VudDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBERUJVRyAoKFJFREZJ U0hfSFRUUF9DQUNIRV9ERUJVRywgIiVhOiBjYWNoZSglZC8lZCkgJXNcbiIsDQo+ID4gPiBfX2Z1 bmNfXywgTGlzdC0+Q291bnQsIExpc3QtPkNhcGFjaXR5LCBOZXdEYXRhLT5VcmkpKTsNCj4gPiA+ ID4gKw0KPiA+ID4gPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICBSZWxlYXNlIGFsbCBjYWNoZSBmcm9tIGxpc3Qu DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHBhcmFtW2luXSAgICBDYWNoZUxpc3QgICAgVGhlIGxp c3QgdG8gYmUgcmVsZWFzZWQuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICAgICBBbGwgY2FjaGUgZGF0YSBhcmUgcmVsZWFzZWQuDQo+ID4gPiA+ICsg IEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgQ2FjaGVMaXN0IGlzIE5VTEwuDQo+ID4g PiA+ICsNCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gPiArUmVsZWFz ZUNhY2hlTGlzdCAoDQo+ID4gPiA+ICsgIElOICBSRURGSVNIX0hUVFBfQ0FDSEVfTElTVCAgKkNh Y2hlTGlzdA0KPiA+ID4gPiArICApDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgIExJU1RfRU5UUlkg ICAgICAgICAgICAgICAqTGlzdDsNCj4gPiA+ID4gKyAgTElTVF9FTlRSWSAgICAgICAgICAgICAg ICpOZXh0Ow0KPiA+ID4gPiArICBSRURGSVNIX0hUVFBfQ0FDSEVfREFUQSAgKkRhdGE7DQo+ID4g PiA+ICsNCj4gPiA+ID4gKyAgaWYgKENhY2hlTGlzdCA9PSBOVUxMKSB7DQo+ID4gPiA+ICsgICAg cmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ ID4gPiA+ICsgIGlmIChJc0xpc3RFbXB0eSAoJkNhY2hlTGlzdC0+SGVhZCkpIHsNCj4gPiA+ID4g KyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4g PiArICBEYXRhID0gTlVMTDsNCj4gPiA+ID4gKyAgTmV4dCA9IE5VTEw7DQo+ID4gPiA+ICsgIExp c3QgPSBHZXRGaXJzdE5vZGUgKCZDYWNoZUxpc3QtPkhlYWQpOw0KPiA+ID4gPiArICB3aGlsZSAo IUlzTnVsbCAoJkNhY2hlTGlzdC0+SGVhZCwgTGlzdCkpIHsNCj4gPiA+ID4gKyAgICBEYXRhID0g UkVERklTSF9IVFRQX0NBQ0hFX0ZST01fTElTVCAoTGlzdCk7DQo+ID4gPiA+ICsgICAgTmV4dCA9 IEdldE5leHROb2RlICgmQ2FjaGVMaXN0LT5IZWFkLCBMaXN0KTsNCj4gPiA+ID4gKw0KPiA+ID4g PiArICAgIERlbGV0ZUh0dHBDYWNoZURhdGEgKENhY2hlTGlzdCwgRGF0YSk7DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKyAgICBMaXN0ID0gTmV4dDsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4g PiA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiA+ID4gK30NCj4gPiA+ID4gZGlmZiAtLWdp dCBhL1JlZGZpc2hQa2cvUmVkZmlzaEh0dHBEeGUvUmVkZmlzaEh0dHBEeGUuYw0KPiA+ID4gYi9S ZWRmaXNoUGtnL1JlZGZpc2hIdHRwRHhlL1JlZGZpc2hIdHRwRHhlLmMNCj4gPiA+ID4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gPiA+ID4gaW5kZXggMDAwMDAwMDAwMC4uMzk5NThkNDg2NQ0KPiA+ ID4gPiAtLS0gL2Rldi9udWxsDQo+ID4gPiA+ICsrKyBiL1JlZGZpc2hQa2cvUmVkZmlzaEh0dHBE eGUvUmVkZmlzaEh0dHBEeGUuYw0KPiA+ID4gPiBAQCAtMCwwICsxLDEzNDQgQEANCj4gPiA+ID4g Ky8qKiBAZmlsZQ0KPiA+ID4gPiArICBSZWRmaXNoSHR0cER4ZSBwcm9kdWNlcyBFZGtJSVJlZGZp c2hIdHRwUHJvdG9jb2wNCj4gPiA+ID4gKyAgZm9yIEVESzIgUmVkZmlzaCBGZWF0dXJlIGRyaXZl ciB0byBkbyBIVFRQIG9wZXJhdGlvbnMuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQ29weXJpZ2h0 IChjKSAyMDIzLTIwMjQsIE5WSURJQSBDT1JQT1JBVElPTiAmIEFGRklMSUFURVMuIEFsbCByaWdo dHMNCj4gPiA+IHJlc2VydmVkLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyoqLw0K PiA+ID4gPiArDQo+ID4gPiA+ICsjaW5jbHVkZSAiUmVkZmlzaEh0dHBEeGUuaCINCj4gPiA+ID4g KyNpbmNsdWRlICJSZWRmaXNoSHR0cERhdGEuaCINCj4gPiA+ID4gKyNpbmNsdWRlICJSZWRmaXNo SHR0cE9wZXJhdGlvbi5oIg0KPiA+ID4gPiArDQo+ID4gPiA+ICtSRURGSVNIX0hUVFBfQ0FDSEVf UFJJVkFURSAgKm1SZWRmaXNoSHR0cENhY2hlUHJpdmF0ZSA9IE5VTEw7DQo+ID4gPiA+ICsNCj4g PiA+ID4gKy8qKg0KPiA+ID4gPiArICBEZWJ1ZyBvdXRwdXQgdGhlIGNhY2hlIGxpc3QuDQo+ID4g PiA+ICsNCj4gPiA+ID4gKyAgQHBhcmFtW2luXSAgICBNc2cgICAgICAgICAgICBEZWJ1ZyBtZXNz YWdlIHN0cmluZy4NCj4gPiA+ID4gKyAgQHBhcmFtW2luXSAgICBFcnJvckxldmVsICAgICBPdXRw dXQgZXJyb3IgbGV2ZWwuDQo+ID4gPiA+ICsgIEBwYXJhbVtpbl0gICAgQ2FjaGVMaXN0ICAgICAg VGFyZ2V0IGxpc3QgdG8gZHVtcC4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgICAgICAgIERlYnVnIGR1bXAgZmluaXNoZWQuDQo+ID4gPiA+ICsgIEByZXR2 YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgSHR0cENhY2hlTGlzdCBpcyBOVUxMLg0KPiA+ID4g PiArDQo+ID4gPiA+ICsqKi8NCj4gPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ID4gK0RlYnVnUHJp bnRIdHRwQ2FjaGVMaXN0ICgNCj4gPiA+ID4gKyAgSU4gIENPTlNUIENIQVI4ICAgICAgICAgICAg ICAqTXNnLA0KPiA+ID4gPiArICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgIEVycm9yTGV2 ZWwsDQo+ID4gPiA+ICsgIElOICBSRURGSVNIX0hUVFBfQ0FDSEVfTElTVCAgKkNhY2hlTGlzdA0K PiA+ID4gPiArICApDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgIExJU1RfRU5UUlkgICAgICAgICAg ICAgICAqTGlzdDsNCj4gPiA+ID4gKyAgUkVERklTSF9IVFRQX0NBQ0hFX0RBVEEgICpEYXRhOw0K PiA+ID4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ID4gPiA+ICsNCj4g PiA+ID4gKyAgaWYgKENhY2hlTGlzdCA9PSBOVUxMKSB7DQo+ID4gPiA+ICsgICAgcmV0dXJuIEVG SV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsg IGlmICghSVNfRU1QVFlfU1RSSU5HIChNc2cpKSB7DQo+ID4gPiA+ICsgICAgREVCVUcgKChFcnJv ckxldmVsLCAiJWFcbiIsIE1zZykpOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4g KyAgaWYgKElzTGlzdEVtcHR5ICgmQ2FjaGVMaXN0LT5IZWFkKSkgew0KPiA+ID4gPiArICAgIERF QlVHICgoRXJyb3JMZXZlbCwgImxpc3QgaXMgZW1wdHlcbiIpKTsNCj4gPiA+ID4gKyAgICByZXR1 cm4gRUZJX05PVF9GT1VORDsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIERF QlVHICgoRXJyb3JMZXZlbCwgImxpc3QgY291bnQ6ICVkIGNhcGFjaXR5OiAlZFxuIiwgQ2FjaGVM aXN0LT5Db3VudCwNCj4gPiA+IENhY2hlTGlzdC0+Q2FwYWNpdHkpKTsNCj4gPiA+ID4gKyAgRGF0 YSAgPSBOVUxMOw0KPiA+ID4gPiArICBJbmRleCA9IDA7DQo+ID4gPiA+ICsgIExpc3QgID0gR2V0 Rmlyc3ROb2RlICgmQ2FjaGVMaXN0LT5IZWFkKTsNCj4gPiA+ID4gKyAgd2hpbGUgKCFJc051bGwg KCZDYWNoZUxpc3QtPkhlYWQsIExpc3QpKSB7DQo+ID4gPiA+ICsgICAgRGF0YSA9IFJFREZJU0hf SFRUUF9DQUNIRV9GUk9NX0xJU1QgKExpc3QpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgREVC VUcgKChFcnJvckxldmVsLCAiJWQpIFVyaTogJXMgSGl0OiAlZFxuIiwgKytJbmRleCwgRGF0YS0+ VXJpLCBEYXRhLQ0KPiA+ID4gPkhpdENvdW50KSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBM aXN0ID0gR2V0TmV4dE5vZGUgKCZDYWNoZUxpc3QtPkhlYWQsIExpc3QpOw0KPiA+ID4gPiArICB9 DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ID4gPiArfQ0K PiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBDaGVjayBIVFRQ IHN0YXR1cyBjb2RlIHRvIHNlZSBpZiB3ZSBsaWtlIHRvIHJldHJ5IEhUVFAgcmVxdWVzdCBvciBu b3QuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHBhcmFtW2luXSAgU3RhdHVzQ29kZSAgICAgIEhU VFAgc3RhdHVzIGNvZGUuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHJldHZhbCAgICAgQk9PTEVB TiAgICAgICAgIFJldHVybiB0cnVlIHdoZW4gd2UgbGlrZSB0byByZXRyeSByZXF1ZXN0Lg0KPiA+ ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuIGZhbHNlIHdoZW4gd2Ug ZG9uJ3Qgd2FudCB0byByZXRyeSByZXF1ZXN0Lg0KPiA+ID4gPiArDQo+ID4gPiA+ICsqKi8NCj4g PiA+ID4gK0JPT0xFQU4NCj4gPiA+ID4gK1JlZGZpc2hSZXRyeVJlcXVpcmVkICgNCj4gPiA+ID4g KyAgSU4gRUZJX0hUVFBfU1RBVFVTX0NPREUgICpTdGF0dXNDb2RlDQo+ID4gPiA+ICsgICkNCj4g PiA+ID4gK3sNCj4gPiA+ID4gKyAgaWYgKFN0YXR1c0NvZGUgPT0gTlVMTCkgew0KPiA+ID4gPiAr ICAgIHJldHVybiBUUlVFOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgaWYg KCgqU3RhdHVzQ29kZSA9PSBIVFRQX1NUQVRVU181MDBfSU5URVJOQUxfU0VSVkVSX0VSUk9SKSB8 fA0KPiA+ID4gPiArICAgICAgKCpTdGF0dXNDb2RlID09IEhUVFBfU1RBVFVTX1VOU1VQUE9SVEVE X1NUQVRVUykpDQo+ID4gPiA+ICsgIHsNCj4gPiA+ID4gKyAgICByZXR1cm4gVFJVRTsNCj4gPiA+ ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIHJldHVybiBGQUxTRTsNCj4gPiA+ID4gK30N Cj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQ29udmVydCBV bmljb2RlIHN0cmluZyB0byBBU0NJSSBzdHJpbmcuIEl0J3MgY2FsbCByZXNwb25zaWJpbGl0eSB0 byByZWxlYXNlDQo+ID4gPiByZXR1cm5lZCBidWZmZXIuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAg QHBhcmFtW2luXSAgVW5pY29kZVN0ciAgICAgIFVuaWNvZGUgc3RyaW5nIHRvIGNvbnZlcnQuDQo+ ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHJldHZhbCAgICAgQ0hBUjggKiAgICAgICAgIEFTQ0lJIHN0 cmluZyByZXR1cm5lZC4NCj4gPiA+ID4gKyAgQHJldHZhbCAgICAgTlVMTCAgICAgICAgICAgIEVy cm9ycyBvY2N1ci4NCj4gPiA+ID4gKw0KPiA+ID4gPiArKiovDQo+ID4gPiA+ICtDSEFSOCAqDQo+ ID4gPiA+ICtTdHJpbmdVbmljb2RlVG9Bc2NpaSAoDQo+ID4gPiA+ICsgIElOIEVGSV9TVFJJTkcg IFVuaWNvZGVTdHINCj4gPiA+ID4gKyAgKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArICBDSEFSOCAg ICAgICAqQXNjaWlTdHI7DQo+ID4gPiA+ICsgIFVJTlROICAgICAgIEFzY2lpU3RyU2l6ZTsNCj4g PiA+ID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIGlmIChJ U19FTVBUWV9TVFJJTkcgKFVuaWNvZGVTdHIpKSB7DQo+ID4gPiA+ICsgICAgcmV0dXJuIE5VTEw7 DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBBc2NpaVN0clNpemUgPSBTdHJM ZW4gKFVuaWNvZGVTdHIpICsgMTsNCj4gPiA+ID4gKyAgQXNjaWlTdHIgICAgID0gQWxsb2NhdGVa ZXJvUG9vbCAoQXNjaWlTdHJTaXplKTsNCj4gPiA+ID4gKyAgaWYgKEFzY2lpU3RyID09IE5VTEwp IHsNCj4gPiA+ID4gKyAgICByZXR1cm4gTlVMTDsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ ID4gPiA+ICsgIFN0YXR1cyA9IFVuaWNvZGVTdHJUb0FzY2lpU3RyUyAoVW5pY29kZVN0ciwgQXNj aWlTdHIsIEFzY2lpU3RyU2l6ZSk7DQo+ID4gPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gPiA+ID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiVW5pY29kZVN0clRvQXNjaWlT dHJTIGZhaWxlZDogJXJcbiIsIFN0YXR1cykpOw0KPiA+ID4gPiArICAgIEZyZWVQb29sIChBc2Np aVN0cik7DQo+ID4gPiA+ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4g Kw0KPiA+ID4gPiArICByZXR1cm4gQXNjaWlTdHI7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4g PiA+ID4gKy8qKg0KPiA+ID4gPiArICBSZXR1cm4gSFRUUCBtZXRob2QgaW4gQVNDSUkgc3RyaW5n LiBDYWxsZXIgZG9lcyBub3QgbmVlZA0KPiA+ID4gPiArICB0byBmcmVlIHJldHVybmVkIHN0cmlu ZyBidWZmZXIuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHBhcmFtW2luXSAgTWV0aG9kICAgICAg ICAgSFRUUCBtZXRob2QuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHJldHZhbCBDSEFSOCAqICAg TWV0aG9kIGluIHN0cmluZy4NCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiArQ0hBUjggKg0KPiA+ID4g PiArSHR0cE1ldGhvZFRvU3RyaW5nICgNCj4gPiA+ID4gKyAgSU4gIEVGSV9IVFRQX01FVEhPRCAg TWV0aG9kDQo+ID4gPiA+ICsgICkNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKyAgc3dpdGNoIChNZXRo b2QpIHsNCj4gPiA+ID4gKyAgICBjYXNlIEh0dHBNZXRob2RHZXQ6DQo+ID4gPiA+ICsgICAgICBy ZXR1cm4gSFRUUF9NRVRIT0RfR0VUOw0KPiA+ID4gPiArICAgICAgYnJlYWs7DQo+ID4gPiA+ICsg ICAgY2FzZSBIdHRwTWV0aG9kUG9zdDoNCj4gPiA+ID4gKyAgICAgIHJldHVybiBIVFRQX01FVEhP RF9QT1NUOw0KPiA+ID4gPiArICAgICAgYnJlYWs7DQo+ID4gPiA+ICsgICAgY2FzZSBIdHRwTWV0 aG9kUGF0Y2g6DQo+ID4gPiA+ICsgICAgICByZXR1cm4gSFRUUF9NRVRIT0RfUEFUQ0g7DQo+ID4g PiA+ICsgICAgICBicmVhazsNCj4gPiA+ID4gKyAgICBjYXNlIEh0dHBNZXRob2RQdXQ6DQo+ID4g PiA+ICsgICAgICByZXR1cm4gSFRUUF9NRVRIT0RfUFVUOw0KPiA+ID4gPiArICAgICAgYnJlYWs7 DQo+ID4gPiA+ICsgICAgY2FzZSBIdHRwTWV0aG9kRGVsZXRlOg0KPiA+ID4gPiArICAgICAgcmV0 dXJuIEhUVFBfTUVUSE9EX0RFTEVURTsNCj4gPiA+ID4gKyAgICAgIGJyZWFrOw0KPiA+ID4gPiAr ICAgIGRlZmF1bHQ6DQo+ID4gPiA+ICsgICAgICBicmVhazsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4g PiArDQo+ID4gPiA+ICsgIHJldHVybiAiVW5rbm93biI7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICBSZXBvcnQgSFRUUCBjb21tdW5pY2F0aW9uIGVycm9y IHZpYSByZXBvcnQgc3RhdHVzIGNvZGUuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHBhcmFtW2lu XSAgTWV0aG9kICAgICAgICAgSFRUUCBtZXRob2QuDQo+ID4gPiA+ICsgIEBwYXJhbVtpbl0gIFVy aSAgICAgICAgICAgIFRoZSBVUkkgd2hpY2ggaGFzIGZhaWx1cmUuDQo+ID4gPiA+ICsgIEBwYXJh bVtpbl0gIEh0dHBTdGF0dXNDb2RlIEhUVFAgc3RhdHVzIGNvZGUuDQo+ID4gPiA+ICsNCj4gPiA+ ID4gKyoqLw0KPiA+ID4gPiArVk9JRA0KPiA+ID4gPiArUmVwb3J0SHR0cEVycm9yICgNCj4gPiA+ ID4gKyAgSU4gIEVGSV9IVFRQX01FVEhPRCAgICAgICBNZXRob2QsDQo+ID4gPiA+ICsgIElOICBF RklfU1RSSU5HICAgICAgICAgICAgVXJpLA0KPiA+ID4gPiArICBJTiAgRUZJX0hUVFBfU1RBVFVT X0NPREUgICpIdHRwU3RhdHVzQ29kZSAgT1BUSU9OQUwNCj4gPiA+ID4gKyAgKQ0KPiA+ID4gPiAr ew0KPiA+ID4gPiArICBDSEFSOCAgRXJyb3JNc2dbUkVERklTSF9FUlJPUl9NU0dfTUFYXTsNCj4g PiA+ID4gKw0KPiA+ID4gPiArICBpZiAoSVNfRU1QVFlfU1RSSU5HIChVcmkpKSB7DQo+ID4gPiA+ ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOiBubyBVUkkgdG8gcmVwb3J0IGVycm9yIHN0 YXR1c1xuIiwNCj4gX19mdW5jX18pKTsNCj4gPiA+ID4gKyAgICByZXR1cm47DQo+ID4gPiA+ICsg IH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAvLw0KPiA+ID4gPiArICAvLyBSZXBvcnQgZmFpbHVy ZSBvZiBVUkkgYW5kIEhUVFAgc3RhdHVzIGNvZGUuDQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsg IEFzY2lpU1ByaW50IChFcnJvck1zZywgc2l6ZW9mIChFcnJvck1zZyksIFJFREZJU0hfSFRUUF9F UlJPUl9SRVBPUlQsDQo+ID4gPiBIdHRwTWV0aG9kVG9TdHJpbmcgKE1ldGhvZCksIChIdHRwU3Rh dHVzQ29kZSA9PSBOVUxMID8NCj4gPiA+IEhUVFBfU1RBVFVTX1VOU1VQUE9SVEVEX1NUQVRVUyA6 ICpIdHRwU3RhdHVzQ29kZSksIFVyaSk7DQo+ID4gPiA+ICsgIERFQlVHICgoREVCVUdfRVJST1Is ICIlYVxuIiwgRXJyb3JNc2cpKTsNCj4gPiA+ID4gKyAgLy8NCj4gPiA+ID4gKyAgLy8gVE9ETzoN Cj4gPiA+ID4gKyAgLy8gQmVsb3cgUEkgc3RhdHVzIGNvZGUgaXMgYXBwcm92ZWQgYnkgUElXRyBh bmQgd2FpdCBmb3Igc3BlY2lmaWNhdGlvbg0KPiA+ID4gcHVibGlzaGVkLg0KPiA+ID4gPiArICAv LyBXZSB3aWxsIHVuY29tbWVudCBiZWxvdyByZXBvcnQgc3RhdHVzIGNvZGUgYWZ0ZXIgUEkgc3Rh dHVzIGNvZGUgZ2V0DQo+ID4gPiBwdWJsaXNoZWQuDQo+ID4gPiA+ICsgIC8vIFJFRjoNCj4gPiA+ DQo+IGh0dHBzOi8vYnVnemlsbGEudGkvDQo+ICUyRiZkYXRhPTA1JTdDMDIlN0NuaWNrbGV3JTQw bnZpZGlhLmNvbSU3Q2I4MjIwM2MyZDYxMjQwNjA4NTAzMDhkDQo+IGMzNDg5NDAyMCU3QzQzMDgz ZDE1NzI3MzQwYzFiN2RiMzllZmQ5Y2NjMTdhJTdDMCU3QzAlN0M2Mzg0NDMwMTENCj4gMzUwOTQy NTkyJTdDVW5rbm93biU3Q1RXRnBiR1pzYjNkOGV5SldJam9pTUM0d0xqQXdNREFpTENKUUlqb2lW Mg0KPiBsdU16SWlMQ0pCVGlJNklrMWhhV3dpTENKWFZDSTZNbjAlM0QlN0MwJTdDJTdDJTdDJnNk YXRhPVBiWEtvVFhmNw0KPiBIUlh0N3ExcWhSYnRtd0VxQWlzQTFxZWJsVE41R1VNUGU4JTNEJnJl c2VydmVkPTANCj4gPiA+DQo+IGFub2NvcmUub3JnJTJGc2hvd19idWcuY2dpJTNGaWQlM0Q0NDgz JmRhdGE9MDUlN0MwMiU3Q25pY2tsZXclNDBudmkNCj4gPiA+DQo+IGRpYS5jb20lN0NmNjU5YzU0 YzNlZGI0MzUyN2MzNjA4ZGMzNDYyYWIyYSU3QzQzMDgzZDE1NzI3MzQwYzFiN2RiDQo+ID4gPg0K PiAzOWVmZDljY2MxN2ElN0MwJTdDMCU3QzYzODQ0Mjg0NTYwMTA1MTM5NiU3Q1Vua25vd24lN0NU V0ZwYkdacw0KPiA+ID4NCj4gYjNkOGV5SldJam9pTUM0d0xqQXdNREFpTENKUUlqb2lWMmx1TXpJ aUxDSkJUaUk2SWsxaGFXd2lMQ0pYVkNJNk1uMCUNCj4gPiA+DQo+IDNEJTdDMCU3QyU3QyU3QyZz ZGF0YT1UMWJON0ttVGExdjQ5Y09Ga2Q5JTJGOWhsemtkemJIUExlYnhTaVVrcA0KPiA+ID4gVnVV NCUzRCZyZXNlcnZlZD0wDQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIC8vIFJFUE9SVF9TVEFU VVNfQ09ERV9XSVRIX0VYVEVOREVEX0RBVEEgKA0KPiA+ID4gPiArICAvLyAgRUZJX0VSUk9SX0NP REUgfCBFRklfRVJST1JfTUFKT1IsDQo+ID4gPiA+ICsgIC8vICBFRklfQ09NUFVUSU5HX1VOSVRf TUFOQUdFQUJJTElUWSB8DQo+ID4gPiBFRklfTUFOQUdFQUJJTElUWV9FQ19SRURGSVNIX0NPTU1V TklDQVRJT05fRVJST1IsDQo+ID4gPiA+ICsgIC8vICBFcnJvck1zZywNCj4gPiA+ID4gKyAgLy8g IEFzY2lpU3RyU2l6ZSAoRXJyb3JNc2cpDQo+ID4gPiA+ICsgIC8vICApOw0KPiA+ID4gPiArfQ0K PiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAgVGhpcyBmdW5jdGlvbiBjcmVhdGUg UmVkZmlzaCBzZXJ2aWNlLiBJdCdzIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGZyZWUNCj4g cmV0dXJuZWQNCj4gPiA+ID4gKyAgUmVkZmlzaCBzZXJ2aWNlIGJ5IGNhbGxpbmcgRnJlZVNlcnZp Y2UgKCkuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAg ICAgICAgICAgICAgUG9pbnRlciB0bw0KPiBFREtJSV9SRURGSVNIX0hUVFBfUFJPVE9DT0wNCj4g PiA+IGluc3RhbmNlLg0KPiA+ID4gPiArICBAcGFyYW1baW5dICBSZWRmaXNoQ29uZmlnU2Vydmlj ZUluZm8gICBSZWRmaXNoIGNvbmZpZyBzZXJ2aWNlDQo+IGluZm9ybWF0aW9uLg0KPiA+ID4gPiAr DQo+ID4gPiA+ICsgIEByZXR2YWwgICAgIFJFREZJU0hfU0VSVklDRSAgUmVkZmlzaCBzZXJ2aWNl IGlzIGNyZWF0ZWQuDQo+ID4gPiA+ICsgIEByZXR2YWwgICAgIE5VTEwgICAgICAgICAgICAgRXJy b3JzIG9jY3VyLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsqKi8NCj4gPiA+ID4gK1JFREZJU0hfU0VS VklDRQ0KPiA+ID4gPiArRUZJQVBJDQo+ID4gPiA+ICtSZWRmaXNoQ3JlYXRlUmVkZmlzaFNlcnZp Y2UgKA0KPiA+ID4gPiArICBJTiAgRURLSUlfUkVERklTSF9IVFRQX1BST1RPQ09MICAgICAgICAg KlRoaXMsDQo+ID4gPiA+ICsgIElOICBSRURGSVNIX0NPTkZJR19TRVJWSUNFX0lORk9STUFUSU9O DQo+ICpSZWRmaXNoQ29uZmlnU2VydmljZUluZm8NCj4gPiA+ID4gKyAgKQ0KPiA+ID4gPiArew0K PiA+ID4gPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ID4gPiAr ICBSRURGSVNIX0hUVFBfQ0FDSEVfUFJJVkFURSAgKlByaXZhdGU7DQo+ID4gPiA+ICsgIFJFREZJ U0hfU0VSVklDRV9QUklWQVRFICAgICAqTmV3U2VydmljZTsNCj4gPiA+ID4gKyAgQ0hBUjggICAg ICAgICAgICAgICAgICAgICAgICpBc2NpaUxvY2F0aW9uOw0KPiA+ID4gPiArICBDSEFSOCAgICAg ICAgICAgICAgICAgICAgICAgKkhvc3Q7DQo+ID4gPiA+ICsgIENIQVI4ICAgICAgICAgICAgICAg ICAgICAgICAqQmFzaWNBdXRoU3RyaW5nOw0KPiA+ID4gPiArICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgICAgQmFzaWNBdXRoU3RyU2l6ZTsNCj4gPiA+ID4gKyAgQ0hBUjggICAgICAgICAgICAg ICAgICAgICAgICpFbmNvZGVkQXV0aFN0cmluZzsNCj4gPiA+ID4gKyAgVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgIEVuY29kZWRBdXRoU3RyU2l6ZTsNCj4gPiA+ID4gKyAgRURLSUlfUkVERklT SF9BVVRIX01FVEhPRCAgIEF1dGhNZXRob2Q7DQo+ID4gPiA+ICsgIENIQVI4ICAgICAgICAgICAg ICAgICAgICAgICAqVXNlcm5hbWU7DQo+ID4gPiA+ICsgIENIQVI4ICAgICAgICAgICAgICAgICAg ICAgICAqUGFzc3dvcmQ7DQo+ID4gPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICBV c2VybmFtZVNpemU7DQo+ID4gPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICBQYXNz d29yZFNpemU7DQo+ID4gPiA+ICsgIEVGSV9SRVNUX0VYX1BST1RPQ09MICAgICAgICAqUmVzdEV4 Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIGlmICgoVGhpcyA9PSBOVUxMKSB8fCAoUmVkZmlzaENv bmZpZ1NlcnZpY2VJbmZvID09IE5VTEwpKSB7DQo+ID4gPiA+ICsgICAgcmV0dXJuIE5VTEw7DQo+ ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBERUJVRyAoKFJFREZJU0hfSFRUUF9D QUNIRV9ERUJVRywgIiVhOiBzZXJ2aWNlIGxvY2F0aW9uOiAlc1xuIiwNCj4gPiA+IF9fZnVuY19f LCBSZWRmaXNoQ29uZmlnU2VydmljZUluZm8tPlJlZGZpc2hTZXJ2aWNlTG9jYXRpb24pKTsNCj4g PiA+ID4gKw0KPiA+ID4gPiArICBQcml2YXRlICAgICAgICAgICAgPSBSRURGSVNIX0hUVFBfQ0FD SEVfUFJJVkFURV9GUk9NX1RISVMgKFRoaXMpOw0KPiA+ID4gPiArICBCYXNpY0F1dGhTdHJpbmcg ICAgPSBOVUxMOw0KPiA+ID4gPiArICBFbmNvZGVkQXV0aFN0cmluZyAgPSBOVUxMOw0KPiA+ID4g PiArICBVc2VybmFtZSAgICAgICAgICAgPSBOVUxMOw0KPiA+ID4gPiArICBQYXNzd29yZCAgICAg ICAgICAgPSBOVUxMOw0KPiA+ID4gPiArICBOZXdTZXJ2aWNlICAgICAgICAgPSBOVUxMOw0KPiA+ ID4gPiArICBBc2NpaUxvY2F0aW9uICAgICAgPSBOVUxMOw0KPiA+ID4gPiArICBIb3N0ICAgICAg ICAgICAgICAgPSBOVUxMOw0KPiA+ID4gPiArICBCYXNpY0F1dGhTdHJTaXplICAgPSAwOw0KPiA+ ID4gPiArICBFbmNvZGVkQXV0aFN0clNpemUgPSAwOw0KPiA+ID4gPiArICBVc2VybmFtZVNpemUg ICAgICAgPSAwOw0KPiA+ID4gPiArICBQYXNzd29yZFNpemUgICAgICAgPSAwOw0KPiA+ID4gPiAr DQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIC8vIEJ1aWxkIGhvc3QgYW5kIGhvc3QgbmFtZSBm cm9tIHNlcnZpY2UgbG9jYXRpb24NCj4gPiA+ID4gKyAgLy8NCj4gPiA+ID4gKyAgaWYgKCFJU19F TVBUWV9TVFJJTkcgKFJlZGZpc2hDb25maWdTZXJ2aWNlSW5mby0NCj4gPlJlZGZpc2hTZXJ2aWNl TG9jYXRpb24pKSB7DQo+ID4gPiA+ICsgICAgQXNjaWlMb2NhdGlvbiA9IFN0cmluZ1VuaWNvZGVU b0FzY2lpIChSZWRmaXNoQ29uZmlnU2VydmljZUluZm8tDQo+ID4gPiA+UmVkZmlzaFNlcnZpY2VM b2NhdGlvbik7DQo+ID4gPiA+ICsgICAgaWYgKEFzY2lpTG9jYXRpb24gPT0gTlVMTCkgew0KPiA+ ID4gPiArICAgICAgZ290byBPTl9SRUxFQVNFOw0KPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gKw0K PiA+ID4gPiArICAgIEhvc3QgPSBBbGxvY2F0ZVplcm9Qb29sIChSRURGSVNIX0hPU1RfTkFNRV9N QVgpOw0KPiA+ID4gPiArICAgIGlmIChBc2NpaUxvY2F0aW9uID09IE5VTEwpIHsNCj4gPiA+ID4g KyAgICAgIGdvdG8gT05fUkVMRUFTRTsNCj4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ICsNCj4gPiA+ ID4gKyAgICBpZiAoUmVkZmlzaENvbmZpZ1NlcnZpY2VJbmZvLT5SZWRmaXNoU2VydmljZVVzZUh0 dHBzKSB7DQo+ID4gPiA+ICsgICAgICBBc2NpaVNQcmludCAoSG9zdCwgUkVERklTSF9IT1NUX05B TUVfTUFYLCAiaHR0cHM6Ly8lYSIsDQo+ID4gPiBBc2NpaUxvY2F0aW9uKTsNCj4gPiA+ID4gKyAg ICB9IGVsc2Ugew0KPiA+ID4gPiArICAgICAgQXNjaWlTUHJpbnQgKEhvc3QsIFJFREZJU0hfSE9T VF9OQU1FX01BWCwgImh0dHA6Ly8lYSIsDQo+IEFzY2lpTG9jYXRpb24pOw0KPiA+ID4gPiArICAg IH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIERFQlVHICgoUkVERklTSF9IVFRQX0NBQ0hFX0RF QlVHLCAiJWE6IEhvc3Q6ICVhXG4iLCBfX2Z1bmNfXywNCj4gPiA+IEhvc3QpKTsNCj4gPiA+ID4g KyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIC8vIEZpbmQgUmVzdCBF eCBwcm90b2NvbA0KPiA+ID4gPiArICAvLw0KPiA+ID4gPiArICBpZiAoUmVkZmlzaENvbmZpZ1Nl cnZpY2VJbmZvLT5SZWRmaXNoU2VydmljZVJlc3RFeEhhbmRsZSAhPSBOVUxMKSB7DQo+ID4gPiA+ ICsgICAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ID4gPiA+ICsgICAgICAgICAg ICAgICAgICAgIFJlZGZpc2hDb25maWdTZXJ2aWNlSW5mby0+UmVkZmlzaFNlcnZpY2VSZXN0RXhI YW5kbGUsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICZnRWZpUmVzdEV4UHJvdG9jb2xH dWlkLA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmUmVzdEV4DQo+ID4g PiA+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gPiA+ICsgIH0gZWxzZSB7DQo+ID4gPiA+ ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOiBSZXN0IEV4IHByb3RvY29sIGlzIG5vdCBh dmFpbGFibGVcbiIsDQo+ID4gPiBfX2Z1bmNfXykpOw0KPiA+ID4gPiArICAgIGdvdG8gT05fUkVM RUFTRTsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsg IC8vIEdldCBjcmVkZW50aWFsDQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIGlmIChQcml2YXRl LT5DcmVkZW50aWFsUHJvdG9jb2wgPT0gTlVMTCkgew0KPiA+ID4gPiArICAgIC8vDQo+ID4gPiA+ ICsgICAgLy8gTm8gY3JlZGVudGlhbCBhdmFpbGFibGUgb24gdGhpcyBzeXN0ZW0uDQo+ID4gPiA+ ICsgICAgLy8NCj4gPiA+ID4gKyAgICBERUJVRyAoKERFQlVHX1dBUk4sICIlYTogbm8gY3JlZGVu dGlhbCBwcm90b2NvbCBhdmFpbGFibGVcbiIsDQo+ID4gPiBfX2Z1bmNfXykpOw0KPiA+ID4gPiAr ICB9IGVsc2Ugew0KPiA+ID4gPiArICAgIFN0YXR1cyA9IFByaXZhdGUtPkNyZWRlbnRpYWxQcm90 b2NvbC0+R2V0QXV0aEluZm8gKA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQcml2YXRlLT5DcmVkZW50aWFsUHJvdG9jb2wsDQo+ID4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZBdXRoTWV0aG9kLA0K PiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmVXNl cm5hbWUsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZQYXNzd29yZA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOw0KPiA+ID4gPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykgfHwgSVNf RU1QVFlfU1RSSU5HIChVc2VybmFtZSkgfHwNCj4gPiA+IElTX0VNUFRZX1NUUklORyAoUGFzc3dv cmQpKSB7DQo+ID4gPiA+ICsgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6IGNhbm5vdCBn ZXQgYXV0aGVudGljYXRpb24gaW5mb3JtYXRpb246DQo+ID4gPiAlclxuIiwgX19mdW5jX18sIFN0 YXR1cykpOw0KPiA+ID4gPiArICAgICAgZ290byBPTl9SRUxFQVNFOw0KPiA+ID4gPiArICAgIH0g ZWxzZSB7DQo+ID4gPiA+ICsgICAgICBERUJVRyAoKFJFREZJU0hfSFRUUF9DQUNIRV9ERUJVRywg IiVhOiBBdXRoIG1ldGhvZDogMHgleA0KPiA+ID4gdXNlcm5hbWU6ICVhIHBhc3N3b3JkOiAlYVxu IiwgX19mdW5jX18sIEF1dGhNZXRob2QsIFVzZXJuYW1lLA0KPiBQYXNzd29yZCkpOw0KPiA+ID4g PiArDQo+ID4gPiA+ICsgICAgICAvLw0KPiA+ID4gPiArICAgICAgLy8gUGVyZm9ybSBiYXNlNjQg ZW5jb2RpbmcgKFJGQyA3NjE3KQ0KPiA+ID4gPiArICAgICAgLy8NCj4gPiA+ID4gKyAgICAgIFVz ZXJuYW1lU2l6ZSAgICAgPSBBc2NpaVN0clNpemUgKFVzZXJuYW1lKTsNCj4gPiA+ID4gKyAgICAg IFBhc3N3b3JkU2l6ZSAgICAgPSBBc2NpaVN0clNpemUgKFBhc3N3b3JkKTsNCj4gPiA+ID4gKyAg ICAgIEJhc2ljQXV0aFN0clNpemUgPSAgVXNlcm5hbWVTaXplICsgUGFzc3dvcmRTaXplOyAgLy8g b25lIGJ5dGUgdGFrZW4NCj4gZnJvbQ0KPiA+ID4gbnVsbC10ZXJtaW5hdG9yIGZvciAnOicNCj4g PiA+ID4gKyAgICAgIEJhc2ljQXV0aFN0cmluZyAgPSBBbGxvY2F0ZVplcm9Qb29sIChCYXNpY0F1 dGhTdHJTaXplKTsNCj4gPiA+ID4gKyAgICAgIGlmIChCYXNpY0F1dGhTdHJpbmcgPT0gTlVMTCkg ew0KPiA+ID4gPiArICAgICAgICBnb3RvIE9OX1JFTEVBU0U7DQo+ID4gPiA+ICsgICAgICB9DQo+ ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgIEFzY2lpU1ByaW50ICgNCj4gPiA+ID4gKyAgICAgICAg QmFzaWNBdXRoU3RyaW5nLA0KPiA+ID4gPiArICAgICAgICBCYXNpY0F1dGhTdHJTaXplLA0KPiA+ ID4gPiArICAgICAgICAiJWE6JWEiLA0KPiA+ID4gPiArICAgICAgICBVc2VybmFtZSwNCj4gPiA+ ID4gKyAgICAgICAgUGFzc3dvcmQNCj4gPiA+ID4gKyAgICAgICAgKTsNCj4gPiA+ID4gKw0KPiA+ ID4gPiArICAgICAgU3RhdHVzID0gQmFzZTY0RW5jb2RlICgNCj4gPiA+ID4gKyAgICAgICAgICAg ICAgICAgKENPTlNUIFVJTlQ4ICopQmFzaWNBdXRoU3RyaW5nLA0KPiA+ID4gPiArICAgICAgICAg ICAgICAgICBCYXNpY0F1dGhTdHJTaXplLA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICBFbmNv ZGVkQXV0aFN0cmluZywNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgJkVuY29kZWRBdXRoU3Ry U2l6ZQ0KPiA+ID4gPiArICAgICAgICAgICAgICAgICApOw0KPiA+ID4gPiArICAgICAgaWYgKChT dGF0dXMgPT0gRUZJX0JVRkZFUl9UT09fU01BTEwpICYmIChFbmNvZGVkQXV0aFN0clNpemUgPiAw KSkgew0KPiA+ID4gPiArICAgICAgICBFbmNvZGVkQXV0aFN0cmluZyA9IEFsbG9jYXRlWmVyb1Bv b2wgKEVuY29kZWRBdXRoU3RyU2l6ZSk7DQo+ID4gPiA+ICsgICAgICAgIGlmIChFbmNvZGVkQXV0 aFN0cmluZyA9PSBOVUxMKSB7DQo+ID4gPiA+ICsgICAgICAgICAgZ290byBPTl9SRUxFQVNFOw0K PiA+ID4gPiArICAgICAgICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgICAgU3RhdHVzID0g QmFzZTY0RW5jb2RlICgNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAoQ09OU1QgVUlOVDgg KilCYXNpY0F1dGhTdHJpbmcsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgQmFzaWNBdXRo U3RyU2l6ZSwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICBFbmNvZGVkQXV0aFN0cmluZywN Cj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAmRW5jb2RlZEF1dGhTdHJTaXplDQo+ID4gPiA+ ICsgICAgICAgICAgICAgICAgICAgKTsNCj4gPiA+ID4gKyAgICAgICAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPiA+ID4gPiArICAgICAgICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTog QmFzZTY0RW5jb2RlIGZhaWx1cmU6ICVyXG4iLA0KPiBfX2Z1bmNfXywNCj4gPiA+IFN0YXR1cykp Ow0KPiA+ID4gPiArICAgICAgICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgICAgREVCVUcg KChSRURGSVNIX0hUVFBfQ0FDSEVfREVCVUcsICIlYTogQmFzaWMgYXV0aG9yaXphdGlvbjoNCj4g PiA+ICVhXG4iLCBfX2Z1bmNfXywgRW5jb2RlZEF1dGhTdHJpbmcpKTsNCj4gPiA+ID4gKyAgICAg IH0gZWxzZSB7DQo+ID4gPiA+ICsgICAgICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTogQmFz ZTY0RW5jb2RlIGZhaWx1cmU6ICVyXG4iLA0KPiBfX2Z1bmNfXywNCj4gPiA+IFN0YXR1cykpOw0K PiA+ID4gPiArICAgICAgICBnb3RvIE9OX1JFTEVBU0U7DQo+ID4gPiA+ICsgICAgICB9DQo+ID4g PiA+ICsgICAgfQ0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgTmV3U2Vydmlj ZSA9IENyZWF0ZVJlZGZpc2hTZXJ2aWNlIChIb3N0LCBBc2NpaUxvY2F0aW9uLA0KPiBFbmNvZGVk QXV0aFN0cmluZywNCj4gPiA+IE5VTEwsIFJlc3RFeCk7DQo+ID4gPiA+ICsgIGlmIChOZXdTZXJ2 aWNlID09IE5VTEwpIHsNCj4gPiA+ID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6IENy ZWF0ZVJlZGZpc2hTZXJ2aWNlXG4iLCBfX2Z1bmNfXykpOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ ICsNCj4gPiA+ID4gK09OX1JFTEVBU0U6DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgaWYgKEJhc2lj QXV0aFN0cmluZyAhPSBOVUxMKSB7DQo+ID4gPiA+ICsgICAgWmVyb01lbSAoQmFzaWNBdXRoU3Ry aW5nLCBCYXNpY0F1dGhTdHJTaXplKTsNCj4gPiA+ID4gKyAgICBGcmVlUG9vbCAoQmFzaWNBdXRo U3RyaW5nKTsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIGlmIChFbmNvZGVk QXV0aFN0cmluZyAhPSBOVUxMKSB7DQo+ID4gPiA+ICsgICAgWmVyb01lbSAoQmFzaWNBdXRoU3Ry aW5nLCBFbmNvZGVkQXV0aFN0clNpemUpOw0KPiA+ID4gPiArICAgIEZyZWVQb29sIChFbmNvZGVk QXV0aFN0cmluZyk7DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBpZiAoVXNl cm5hbWUgIT0gTlVMTCkgew0KPiA+ID4gPiArICAgIFplcm9NZW0gKFVzZXJuYW1lLCBVc2VybmFt ZVNpemUpOw0KPiA+ID4gPiArICAgIEZyZWVQb29sIChVc2VybmFtZSk7DQo+ID4gPiA+ICsgIH0N Cj4gPiA+ID4gKw0KPiA+ID4gPiArICBpZiAoUGFzc3dvcmQgIT0gTlVMTCkgew0KPiA+ID4gPiAr ICAgIFplcm9NZW0gKFBhc3N3b3JkLCBQYXNzd29yZFNpemUpOw0KPiA+ID4gPiArICAgIEZyZWVQ b29sIChQYXNzd29yZCk7DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBpZiAo QXNjaWlMb2NhdGlvbiAhPSBOVUxMKSB7DQo+ID4gPiA+ICsgICAgRnJlZVBvb2wgKEFzY2lpTG9j YXRpb24pOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgaWYgKEhvc3QgIT0g TlVMTCkgew0KPiA+ID4gPiArICAgIEZyZWVQb29sIChIb3N0KTsNCj4gPiA+ID4gKyAgfQ0KPiA+ ID4gPiArDQo+ID4gPiA+ICsgIHJldHVybiBOZXdTZXJ2aWNlOw0KPiA+ID4gPiArfQ0KPiA+ID4g PiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAgVGhpcyBmdW5jdGlvbiBmcmVlIHJlc291cmNl cyBpbiBSZWRmaXNoIHNlcnZpY2UuIFJlZGZpc2hTZXJ2aWNlIGlzIG5vIGxvbmdlcg0KPiA+ID4g YXZhaWxhYmxlDQo+ID4gPiA+ICsgIGFmdGVyIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBzdWNjZXNz ZnVsbHkuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAg IFBvaW50ZXIgdG8gRURLSUlfUkVERklTSF9IVFRQX1BST1RPQ09MDQo+ID4gPiBpbnN0YW5jZS4N Cj4gPiA+ID4gKyAgQHBhcmFtW2luXSAgUmVkZmlzaFNlcnZpY2UgIFBvaW50ZXIgdG8gUmVkZmlz aCBzZXJ2aWNlIHRvIGJlIHJlbGVhc2VkLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEByZXR2YWwg ICAgIEVGSV9TVUNDRVNTICAgICBSZXNyb3VjZSBpcyByZWxlYXNlZCBzdWNjZXNzZnVsbHkuDQo+ ID4gPiA+ICsgIEByZXR2YWwgICAgIE90aGVycyAgICAgICAgICBFcnJvcnMgb2NjdXIuDQo+ID4g PiA+ICsNCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gPiArRUZJQVBJ DQo+ID4gPiA+ICtSZWRmaXNoRnJlZVJlZGZpc2hTZXJ2aWNlICgNCj4gPiA+ID4gKyAgSU4gIEVE S0lJX1JFREZJU0hfSFRUUF9QUk9UT0NPTCAgKlRoaXMsDQo+ID4gPiA+ICsgIElOICBSRURGSVNI X1NFUlZJQ0UgICAgICAgICAgICAgIFJlZGZpc2hTZXJ2aWNlDQo+ID4gPiA+ICsgICkNCj4gPiA+ ID4gK3sNCj4gPiA+ID4gKyAgUkVERklTSF9TRVJWSUNFX1BSSVZBVEUgICpTZXJ2aWNlOw0KPiA+ ID4gPiArDQo+ID4gPiA+ICsgIGlmICgoVGhpcyA9PSBOVUxMKSB8fCAoUmVkZmlzaFNlcnZpY2Ug PT0gTlVMTCkpIHsNCj4gPiA+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0K PiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgU2VydmljZSA9IChSRURGSVNIX1NF UlZJQ0VfUFJJVkFURSAqKVJlZGZpc2hTZXJ2aWNlOw0KPiA+ID4gPiArICBpZiAoU2VydmljZS0+ U2lnbmF0dXJlICE9IFJFREZJU0hfSFRUUF9TRVJWSUNFX1NJR05BVFVSRSkgew0KPiA+ID4gPiAr ICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTogc2lnbmF0dXJlIGNoZWNrIGZhaWx1cmVcbiIs IF9fZnVuY19fKSk7DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICByZXR1cm4g UmVsZWFzZVJlZGZpc2hTZXJ2aWNlIChTZXJ2aWNlKTsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0K PiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBKU09OIHZhbHVl IGluIGdpdmVuIFJlZGZpc2hQYXlsb2FkLiBSZXR1cm5lZCBKU09ODQo+ID4gPiB2YWx1ZQ0KPiA+ ID4gPiArICBpcyBhIHJlZmVyZW5jZSB0byB0aGUgSlNPTiB2YWx1ZSBpbiBSZWRmaXNoUGF5bG9h ZC4gQW55IG1vZGlmaWNhdGlvbiB0bw0KPiA+ID4gcmV0dXJuZWQNCj4gPiA+ID4gKyAgSlNPTiB2 YWx1ZSB3aWxsIGNoYW5nZSBKU09OIHZhbHVlIGluIFJlZGZpc2hQYXlsb2FkLg0KPiA+ID4gPiAr DQo+ID4gPiA+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICBQb2ludGVyIHRvIEVES0lJ X1JFREZJU0hfSFRUUF9QUk9UT0NPTA0KPiA+ID4gaW5zdGFuY2UuDQo+ID4gPiA+ICsgIEBwYXJh bVtpbl0gIFJlZGZpc2hQYXlsb2FkICBQb2ludGVyIHRvIFJlZGZpc2ggcGF5bG9hZC4NCj4gPiA+ ID4gKw0KPiA+ID4gPiArICBAcmV0dmFsICAgICBFREtJSV9KU09OX1ZBTFVFICAgSlNPTiB2YWx1 ZSBpcyByZXR1cm5lZC4NCj4gPiA+ID4gKyAgQHJldHZhbCAgICAgTlVMTCAgICAgICAgICAgICAg IEVycm9ycyBvY2N1ci4NCj4gPiA+ID4gKw0KPiA+ID4gPiArKiovDQo+ID4gPiA+ICtFREtJSV9K U09OX1ZBTFVFDQo+ID4gPiA+ICtFRklBUEkNCj4gPiA+ID4gK1JlZGZpc2hKc29uSW5SZWRmaXNo UGF5bG9hZCAoDQo+ID4gPiA+ICsgIElOICBFREtJSV9SRURGSVNIX0hUVFBfUFJPVE9DT0wgICpU aGlzLA0KPiA+ID4gPiArICBJTiAgUkVERklTSF9QQVlMT0FEICAgICAgICAgICAgICBSZWRmaXNo UGF5bG9hZA0KPiA+ID4gPiArICApDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgIFJFREZJU0hfUEFZ TE9BRF9QUklWQVRFICAqUGF5bG9hZDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBpZiAoKFRoaXMg PT0gTlVMTCkgfHwgKFJlZGZpc2hQYXlsb2FkID09IE5VTEwpKSB7DQo+ID4gPiA+ICsgICAgcmV0 dXJuIE5VTEw7DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBQYXlsb2FkID0g KFJFREZJU0hfUEFZTE9BRF9QUklWQVRFICopUmVkZmlzaFBheWxvYWQ7DQo+ID4gPiA+ICsgIGlm IChQYXlsb2FkLT5TaWduYXR1cmUgIT0gUkVERklTSF9IVFRQX1BBWUxPQURfU0lHTkFUVVJFKSB7 DQo+ID4gPiA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOiBzaWduYXR1cmUgY2hlY2sg ZmFpbHVyZVxuIiwgX19mdW5jX18pKTsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ ICsgIHJldHVybiBQYXlsb2FkLT5Kc29uVmFsdWU7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4g PiA+ID4gKy8qKg0KPiA+ID4gPiArICBQZXJmb3JtIEhUVFAgR0VUIHRvIEdldCByZWRmaXNoIHJl c291cmNlIGZyb20gZ2l2ZW4gcmVzb3VyY2UgVVJJIHdpdGgNCj4gPiA+ID4gKyAgY2FjaGUgbWVj aGFuaXNtIHN1cHBvcnRlZC4gSXQncyBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBmcmVlIFJl c3BvbnNlDQo+ID4gPiA+ICsgIGJ5IGNhbGxpbmcgRnJlZVJlc3BvbnNlICgpLg0KPiA+ID4gPiAr DQo+ID4gPiA+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgUG9pbnRlciB0byBFREtJSV9S RURGSVNIX0hUVFBfUFJPVE9DT0wNCj4gaW5zdGFuY2UuDQo+ID4gPiA+ICsgIEBwYXJhbVtpbl0g IFNlcnZpY2UgICAgICAgUmVkZmlzaCBzZXJ2aWNlIGluc3RhbmNlIHRvIHBlcmZvcm0gSFRUUCBH RVQuDQo+ID4gPiA+ICsgIEBwYXJhbVtpbl0gIFVyaSAgICAgICAgICAgVGFyZ2V0IHJlc291cmNl IFVSSS4NCj4gPiA+ID4gKyAgQHBhcmFtW2luXSAgUmVxdWVzdCAgICAgICBBZGRpdGlvbmFsIHJl cXVlc3QgY29udGV4dC4gVGhpcyBpcyBvcHRpb25hbC4NCj4gPiA+ID4gKyAgQHBhcmFtW291dF0g UmVzcG9uc2UgICAgICBIVFRQIHJlc3BvbnNlIGZyb20gcmVkZmlzaCBzZXJ2aWNlLg0KPiA+ID4g PiArICBAcGFyYW1baW5dICBVc2VDYWNoZSAgICAgIElmIGl0IGlzIFRSVUUsIHRoaXMgZnVuY3Rp b24gd2lsbCBzZWFyY2ggZm9yDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2FjaGUgZmlyc3QuIElmIGl0IGlzIEZBTFNFLCB0aGlzIGZ1bmN0aW9uDQo+ID4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBxdWVyeSBSZWRmaXNoIFVSSSBkaXJlY3RseS4N Cj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcmV0dmFsICAgICBFRklfU1VDQ0VTUyAgICAgUmVzcm91 Y2UgaXMgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ID4gPiArICBAcmV0dmFsICAgICBPdGhl cnMgICAgICAgICAgRXJyb3JzIG9jY3VyLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsqKi8NCj4gPiA+ ID4gK0VGSV9TVEFUVVMNCj4gPiA+ID4gK0VGSUFQSQ0KPiA+ID4gPiArUmVkZmlzaEdldFJlc291 cmNlICgNCj4gPiA+ID4gKyAgSU4gIEVES0lJX1JFREZJU0hfSFRUUF9QUk9UT0NPTCAgKlRoaXMs DQo+ID4gPiA+ICsgIElOICBSRURGSVNIX1NFUlZJQ0UgICAgICAgICAgICAgIFNlcnZpY2UsDQo+ ID4gPiA+ICsgIElOICBFRklfU1RSSU5HICAgICAgICAgICAgICAgICAgIFVyaSwNCj4gPiA+ID4g KyAgSU4gIFJFREZJU0hfUkVRVUVTVCAgICAgICAgICAgICAgKlJlcXVlc3QgT1BUSU9OQUwsDQo+ ID4gPiA+ICsgIE9VVCBSRURGSVNIX1JFU1BPTlNFICAgICAgICAgICAgICpSZXNwb25zZSwNCj4g PiA+ID4gKyAgSU4gIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgVXNlQ2FjaGUNCj4gPiA+ ID4gKyAgKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAg ICAgU3RhdHVzOw0KPiA+ID4gPiArICBSRURGSVNIX0hUVFBfQ0FDSEVfREFUQSAgICAgKkNhY2hl RGF0YTsNCj4gPiA+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgIFJldHJ5Q291bnQ7 DQo+ID4gPiA+ICsgIFJFREZJU0hfSFRUUF9DQUNIRV9QUklWQVRFICAqUHJpdmF0ZTsNCj4gPiA+ ID4gKw0KPiA+ID4gPiArICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwgKFNlcnZpY2UgPT0gTlVMTCkg fHwgKFJlc3BvbnNlID09IE5VTEwpIHx8DQo+ID4gPiBJU19FTVBUWV9TVFJJTkcgKFVyaSkpIHsN Cj4gPiA+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ID4gPiArICB9 DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgREVCVUcgKChSRURGSVNIX0hUVFBfQ0FDSEVfREVCVUcs ICIlYTogR2V0IFVSSTogJXMgY2FjaGU6DQo+ICVhXG4iLA0KPiA+ID4gX19mdW5jX18sIFVyaSwg KFVzZUNhY2hlID8gInRydWUiIDogImZhbHNlIikpKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBQ cml2YXRlICAgID0gUkVERklTSF9IVFRQX0NBQ0hFX1BSSVZBVEVfRlJPTV9USElTIChUaGlzKTsN Cj4gPiA+ID4gKyAgQ2FjaGVEYXRhICA9IE5VTEw7DQo+ID4gPiA+ICsgIFJldHJ5Q291bnQgPSAw Ow0KPiA+ID4gPiArICBaZXJvTWVtIChSZXNwb25zZSwgc2l6ZW9mIChSRURGSVNIX1JFU1BPTlNF KSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgaWYgKFByaXZhdGUtPkNhY2hlRGlzYWJsZWQpIHsN Cj4gPiA+ID4gKyAgICBVc2VDYWNoZSA9IEZBTFNFOw0KPiA+ID4gPiArICAgIERFQlVHICgoUkVE RklTSF9IVFRQX0NBQ0hFX0RFQlVHLCAiJWE6IGNhY2hlIGlzIGRpc2FibGVkIGJ5DQo+ID4gPiBQ Q0QhXG4iLCBfX2Z1bmNfXykpOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAg Ly8NCj4gPiA+ID4gKyAgLy8gU2VhcmNoIGZvciBjYWNoZSBsaXN0Lg0KPiA+ID4gPiArICAvLw0K PiA+ID4gPiArICBpZiAoVXNlQ2FjaGUpIHsNCj4gPiA+ID4gKyAgICBDYWNoZURhdGEgPSBGaW5k SHR0cENhY2hlRGF0YSAoJlByaXZhdGUtPkNhY2hlTGlzdC5IZWFkLCBVcmkpOw0KPiA+ID4gPiAr ICAgIGlmIChDYWNoZURhdGEgIT0gTlVMTCkgew0KPiA+ID4gPiArICAgICAgREVCVUcgKChSRURG SVNIX0hUVFBfQ0FDSEVfREVCVUdfUkVRVUVTVCwgIiVhOiBjYWNoZSBoaXQhDQo+ICVzXG4iLA0K PiA+ID4gX19mdW5jX18sIFVyaSkpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgICAvLw0KPiA+ ID4gPiArICAgICAgLy8gQ29weSBjYWNoZWQgcmVzcG9uc2UgdG8gY2FsbGVyJ3MgYnVmZmVyLg0K PiA+ID4gPiArICAgICAgLy8NCj4gPiA+ID4gKyAgICAgIFN0YXR1cyAgICAgICAgICAgICAgID0g Q29weVJlZGZpc2hSZXNwb25zZSAoQ2FjaGVEYXRhLT5SZXNwb25zZSwNCj4gUmVzcG9uc2UpOw0K PiA+ID4gPiArICAgICAgQ2FjaGVEYXRhLT5IaXRDb3VudCArPSAxOw0KPiA+ID4gPiArICAgICAg cmV0dXJuIFN0YXR1czsNCj4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0K PiA+ID4gPiArICAvLw0KPiA+ID4gPiArICAvLyBHZXQgcmVzb3VyY2UgZnJvbSByZWRmaXNoIHNl cnZpY2UuDQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIGRvIHsNCj4gPiA+ID4gKyAgICBSZXRy eUNvdW50ICs9IDE7DQo+ID4gPiA+ICsgICAgU3RhdHVzICAgICAgPSBIdHRwU2VuZFJlY2VpdmUg KA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlLA0KPiA+ID4gPiArICAgICAg ICAgICAgICAgICAgICBVcmksDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgIEh0dHBNZXRo b2RHZXQsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgIFJlcXVlc3QsDQo+ID4gPiA+ICsg ICAgICAgICAgICAgICAgICAgIFJlc3BvbnNlDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICk7DQo+ID4gPiA+ICsgICAgREVCVUcgKChSRURGSVNIX0hUVFBfQ0FDSEVfREVCVUdfUkVRVUVT VCwgIiVhOiBIVFRQIHJlcXVlc3Q6DQo+ID4gPiAlcyA6JXJcbiIsIF9fZnVuY19fLCBVcmksIFN0 YXR1cykpOw0KPiA+ID4gPiArICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpIHx8IChSZXRyeUNv dW50ID49IFByaXZhdGUtDQo+ID4gPiA+UmV0cnlTZXR0aW5nLk1heGltdW1SZXRyeUdldCkpIHsN Cj4gPiA+ID4gKyAgICAgIGJyZWFrOw0KPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gKw0KPiA+ID4g PiArICAgIC8vDQo+ID4gPiA+ICsgICAgLy8gUmV0cnkgd2hlbiBCTUMgaXMgbm90IHJlYWR5Lg0K PiA+ID4gPiArICAgIC8vDQo+ID4gPiA+ICsgICAgaWYgKChSZXNwb25zZS0+U3RhdHVzQ29kZSAh PSBOVUxMKSkgew0KPiA+ID4gPiArICAgICAgREVCVUdfQ09ERSAoDQo+ID4gPiA+ICsgICAgICAg IER1bXBSZWRmaXNoUmVzcG9uc2UgKE5VTEwsIERFQlVHX0VSUk9SLCBSZXNwb25zZSk7DQo+ID4g PiA+ICsgICAgICAgICk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgIGlmICghUmVkZmlzaFJl dHJ5UmVxdWlyZWQgKFJlc3BvbnNlLT5TdGF0dXNDb2RlKSkgew0KPiA+ID4gPiArICAgICAgICBi cmVhazsNCj4gPiA+ID4gKyAgICAgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICAgLy8NCj4g PiA+ID4gKyAgICAgIC8vIFJlbGVhc2UgcmVzcG9uc2UgZm9yIG5leHQgcm91bmQgb2YgcmVxdWVz dC4NCj4gPiA+ID4gKyAgICAgIC8vDQo+ID4gPiA+ICsgICAgICBUaGlzLT5GcmVlUmVzcG9uc2Ug KFRoaXMsIFJlc3BvbnNlKTsNCj4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAg ICBERUJVRyAoKERFQlVHX1dBUk4sICIlYTogUmVkZmlzaEdldEJ5VXJpRXggZmFpbGVkLCByZXRy eQ0KPiAoJWQvJWQpXG4iLA0KPiA+ID4gX19mdW5jX18sIFJldHJ5Q291bnQsIFByaXZhdGUtPlJl dHJ5U2V0dGluZy5NYXhpbXVtUmV0cnlHZXQpKTsNCj4gPiA+ID4gKyAgICBpZiAoUHJpdmF0ZS0+ UmV0cnlTZXR0aW5nLlJldHJ5V2FpdCA+IDApIHsNCj4gPiA+ID4gKyAgICAgIGdCUy0+U3RhbGwg KFByaXZhdGUtPlJldHJ5U2V0dGluZy5SZXRyeVdhaXQpOw0KPiA+ID4gPiArICAgIH0NCj4gPiA+ ID4gKyAgfSB3aGlsZSAoVFJVRSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiA+ID4gPiArICAgIERFQlVHX0NPREUgKA0KPiA+ID4gPiArICAgICAg RHVtcFJlZGZpc2hSZXNwb25zZSAoTlVMTCwgREVCVUdfRVJST1IsIFJlc3BvbnNlKTsNCj4gPiA+ ID4gKyAgICAgICk7DQo+ID4gPiA+ICsgICAgLy8NCj4gPiA+ID4gKyAgICAvLyBSZXBvcnQgc3Rh dHVzIGNvZGUgZm9yIFJlZGZpc2ggZmFpbHVyZQ0KPiA+ID4gPiArICAgIC8vDQo+ID4gPiA+ICsg ICAgUmVwb3J0SHR0cEVycm9yIChIdHRwTWV0aG9kR2V0LCBVcmksIFJlc3BvbnNlLT5TdGF0dXND b2RlKTsNCj4gPiA+ID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6IGdldCAlcyBmYWls ZWQgKCVkLyVkKTogJXJcbiIsIF9fZnVuY19fLA0KPiBVcmksDQo+ID4gPiBSZXRyeUNvdW50LCBQ cml2YXRlLT5SZXRyeVNldHRpbmcuTWF4aW11bVJldHJ5R2V0LCBTdGF0dXMpKTsNCj4gPiA+ID4g KyAgICBnb3RvIE9OX1JFTEVBU0U7DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiAr ICBpZiAoIVByaXZhdGUtPkNhY2hlRGlzYWJsZWQpIHsNCj4gPiA+ID4gKyAgICAvLw0KPiA+ID4g PiArICAgIC8vIEtlZXAgcmVzcG9uc2UgaW4gY2FjaGUgbGlzdA0KPiA+ID4gPiArICAgIC8vDQo+ ID4gPiA+ICsgICAgU3RhdHVzID0gQWRkSHR0cENhY2hlRGF0YSAoJlByaXZhdGUtPkNhY2hlTGlz dCwgVXJpLCBSZXNwb25zZSk7DQo+ID4gPiA+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiA+ID4gPiArICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOiBmYWlsZWQgdG8gY2Fj aGUgJXM6ICVyXG4iLCBfX2Z1bmNfXywgVXJpLA0KPiA+ID4gU3RhdHVzKSk7DQo+ID4gPiA+ICsg ICAgICBnb3RvIE9OX1JFTEVBU0U7DQo+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ ICsgICAgREVCVUdfQ09ERSAoDQo+ID4gPiA+ICsgICAgICBEZWJ1Z1ByaW50SHR0cENhY2hlTGlz dCAoX19mdW5jX18sDQo+ID4gPiBSRURGSVNIX0hUVFBfQ0FDSEVfREVCVUdfRFVNUCwgJlByaXZh dGUtPkNhY2hlTGlzdCk7DQo+ID4gPiA+ICsgICAgICApOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ ICsNCj4gPiA+ID4gK09OX1JFTEVBU0U6DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgcmV0dXJuIFN0 YXR1czsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgIFRo aXMgZnVuY3Rpb24gZnJlZSByZXNvdXJjZXMgaW4gUmVxdWVzdC4gUmVxdWVzdCBpcyBubyBsb25n ZXIgYXZhaWxhYmxlDQo+ID4gPiA+ICsgIGFmdGVyIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBzdWNj ZXNzZnVsbHkuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAg IFBvaW50ZXIgdG8gRURLSUlfUkVERklTSF9IVFRQX1BST1RPQ09MDQo+IGluc3RhbmNlLg0KPiA+ ID4gPiArICBAcGFyYW1baW5dICBSZXF1ZXN0ICAgICAgSFRUUCByZXF1ZXN0IHRvIGJlIHJlbGVh c2VkLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEByZXR2YWwgICAgIEVGSV9TVUNDRVNTICAgICBS ZXNyb3VjZSBpcyByZWxlYXNlZCBzdWNjZXNzZnVsbHkuDQo+ID4gPiA+ICsgIEByZXR2YWwgICAg IE90aGVycyAgICAgICAgICBFcnJvcnMgb2NjdXIuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyoqLw0K PiA+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gPiArRUZJQVBJDQo+ID4gPiA+ICtSZWRmaXNoRnJl ZVJlcXVlc3QgKA0KPiA+ID4gPiArICBJTiAgRURLSUlfUkVERklTSF9IVFRQX1BST1RPQ09MICAq VGhpcywNCj4gPiA+ID4gKyAgSU4gIFJFREZJU0hfUkVRVUVTVCAgICAgICAgICAgICAgKlJlcXVl c3QNCj4gPiA+ID4gKyAgKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArICBpZiAoKFRoaXMgPT0gTlVM TCkgfHwgKFJlcXVlc3QgPT0gTlVMTCkpIHsNCj4gPiA+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFM SURfUEFSQU1FVEVSOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgREVCVUcg KChSRURGSVNIX0hUVFBfQ0FDSEVfREVCVUcsICIlYTogZW50cnlcbiIsIF9fZnVuY19fKSk7DQo+ ID4gPiA+ICsNCj4gPiA+ID4gKyAgcmV0dXJuIFJlbGVhc2VSZWRmaXNoUmVxdWVzdCAoUmVxdWVz dCk7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICBUaGlz IGZ1bmN0aW9uIGZyZWUgcmVzb3VyY2VzIGluIGdpdmVuIFJlc3BvbnNlLg0KPiA+ID4gPiArDQo+ ID4gPiA+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICBQb2ludGVyIHRvIEVES0lJX1JFREZJ U0hfSFRUUF9QUk9UT0NPTA0KPiBpbnN0YW5jZS4NCj4gPiA+ID4gKyAgQHBhcmFtW2luXSAgUmVz cG9uc2UgICAgIEhUVFAgcmVzcG9uc2UgdG8gYmUgcmVsZWFzZWQuDQo+ID4gPiA+ICsNCj4gPiA+ ID4gKyAgQHJldHZhbCAgICAgRUZJX1NVQ0NFU1MgICAgIFJlc3JvdWNlIGlzIHJlbGVhc2VkIHN1 Y2Nlc3NmdWxseS4NCj4gPiA+ID4gKyAgQHJldHZhbCAgICAgT3RoZXJzICAgICAgICAgIEVycm9y cyBvY2N1ci4NCj4gPiA+ID4gKw0KPiA+ID4gPiArKiovDQo+ID4gPiA+ICtFRklfU1RBVFVTDQo+ ID4gPiA+ICtFRklBUEkNCj4gPiA+ID4gK1JlZGZpc2hGcmVlUmVzcG9uc2UgKA0KPiA+ID4gPiAr ICBJTiAgRURLSUlfUkVERklTSF9IVFRQX1BST1RPQ09MICAqVGhpcywNCj4gPiA+ID4gKyAgSU4g IFJFREZJU0hfUkVTUE9OU0UgICAgICAgICAgICAgKlJlc3BvbnNlDQo+ID4gPiA+ICsgICkNCj4g PiA+ID4gK3sNCj4gPiA+ID4gKyAgaWYgKChUaGlzID09IE5VTEwpIHx8IChSZXNwb25zZSA9PSBO VUxMKSkgew0KPiA+ID4gPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4g PiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBERUJVRyAoKFJFREZJU0hfSFRUUF9DQUNI RV9ERUJVRywgIiVhOiBlbnRyeVxuIiwgX19mdW5jX18pKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiAr ICByZXR1cm4gUmVsZWFzZVJlZGZpc2hSZXNwb25zZSAoUmVzcG9uc2UpOw0KPiA+ID4gPiArfQ0K PiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAgVGhpcyBmdW5jdGlvbiBleHBpcmUg dGhlIGNhY2hlZCByZXNwb25zZSBvZiBnaXZlbiBVUkkuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAg QHBhcmFtW2luXSAgVGhpcyAgICAgICAgIFBvaW50ZXIgdG8gRURLSUlfUkVERklTSF9IVFRQX1BS T1RPQ09MDQo+IGluc3RhbmNlLg0KPiA+ID4gPiArICBAcGFyYW1baW5dICBVcmkgICAgICAgICAg VGFyZ2V0IHJlc3BvbnNlIG9mIFVSSS4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcmV0dmFsICAg ICBFRklfU1VDQ0VTUyAgICAgVGFyZ2V0IHJlc3BvbnNlIGlzIGV4cGlyZWQgc3VjY2Vzc2Z1bGx5 Lg0KPiA+ID4gPiArICBAcmV0dmFsICAgICBPdGhlcnMgICAgICAgICAgRXJyb3JzIG9jY3VyLg0K PiA+ID4gPiArDQo+ID4gPiA+ICsqKi8NCj4gPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ID4gK0VG SUFQSQ0KPiA+ID4gPiArUmVkZmlzaEV4cGlyZVJlc3BvbnNlICgNCj4gPiA+ID4gKyAgSU4gIEVE S0lJX1JFREZJU0hfSFRUUF9QUk9UT0NPTCAgKlRoaXMsDQo+ID4gPiA+ICsgIElOICBFRklfU1RS SU5HICAgICAgICAgICAgICAgICAgIFVyaQ0KPiA+ID4gPiArICApDQo+ID4gPiA+ICt7DQo+ID4g PiA+ICsgIFJFREZJU0hfSFRUUF9DQUNIRV9QUklWQVRFICAqUHJpdmF0ZTsNCj4gPiA+ID4gKyAg UkVERklTSF9IVFRQX0NBQ0hFX0RBVEEgICAgICpDYWNoZURhdGE7DQo+ID4gPiA+ICsNCj4gPiA+ ID4gKyAgaWYgKChUaGlzID09IE5VTEwpIHx8IElTX0VNUFRZX1NUUklORyAoVXJpKSkgew0KPiA+ ID4gPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gPiA+ICsgIH0NCj4g PiA+ID4gKw0KPiA+ID4gPiArICBERUJVRyAoKFJFREZJU0hfSFRUUF9DQUNIRV9ERUJVRywgIiVh OiBleHBpcmUgVVJJOiAlc1xuIiwNCj4gX19mdW5jX18sDQo+ID4gPiBVcmkpKTsNCj4gPiA+ID4g Kw0KPiA+ID4gPiArICBQcml2YXRlID0gUkVERklTSF9IVFRQX0NBQ0hFX1BSSVZBVEVfRlJPTV9U SElTIChUaGlzKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBDYWNoZURhdGEgPSBGaW5kSHR0cENh Y2hlRGF0YSAoJlByaXZhdGUtPkNhY2hlTGlzdC5IZWFkLCBVcmkpOw0KPiA+ID4gPiArICBpZiAo Q2FjaGVEYXRhID09IE5VTEwpIHsNCj4gPiA+ID4gKyAgICByZXR1cm4gRUZJX05PVF9GT1VORDsN Cj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIHJldHVybiBEZWxldGVIdHRwQ2Fj aGVEYXRhICgmUHJpdmF0ZS0+Q2FjaGVMaXN0LCBDYWNoZURhdGEpOw0KPiA+ID4gPiArfQ0KPiA+ ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAgUGVyZm9ybSBIVFRQIFBBVENIIHRvIHNl bmQgcmVkZmlzaCByZXNvdXJjZSB0byBnaXZlbiByZXNvdXJjZSBVUkkuDQo+ID4gPiA+ICsgIEl0 J3MgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZnJlZSBSZXNwb25zZSBieSBjYWxsaW5nIEZy ZWVSZXNwb25zZSAoKS4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcGFyYW1baW5dICBUaGlzICAg ICAgICAgIFBvaW50ZXIgdG8gRURLSUlfUkVERklTSF9IVFRQX1BST1RPQ09MDQo+IGluc3RhbmNl Lg0KPiA+ID4gPiArICBAcGFyYW1baW5dICBTZXJ2aWNlICAgICAgIFJlZGZpc2ggc2VydmljZSBp bnN0YW5jZSB0byBwZXJmb3JtIEhUVFAgUEFUQ0guDQo+ID4gPiA+ICsgIEBwYXJhbVtpbl0gIFVy aSAgICAgICAgICAgVGFyZ2V0IHJlc291cmNlIFVSSS4NCj4gPiA+ID4gKyAgQHBhcmFtW2luXSAg Q29udGVudCAgICAgICBEYXRhIHRvIHBhdGNoLg0KPiA+ID4gPiArICBAcGFyYW1baW5dICBDb250 ZW50U2l6ZSAgIFNpemUgb2YgdGhlIENvbnRlbnQgdG8gYmUgc2VuZCB0byBSZWRmaXNoDQo+IHNl cnZpY2UuDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBvcHRp b25hbC4gV2hlbiBDb250ZW50U2l6ZSBpcyAwLCBDb250ZW50U2l6ZQ0KPiA+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlzIHRoZSBzaXplIG9mIENvbnRlbnQuDQo+ID4gPiA+ICsg IEBwYXJhbVtpbl0gIENvbnRlbnRUeXBlICAgVHlwZSBvZiB0aGUgQ29udGVudCB0byBiZSBzZW5k IHRvIFJlZGZpc2gNCj4gc2VydmljZS4NCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBUaGlzIGlzIG9wdGlvbmFsLiBXaGVuIENvbnRlbnRUeXBlIGlzIE5VTEwsIGNvbnRlbnQN Cj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlIEhUVFBfQ09OVEVOVF9U WVBFX0FQUF9KU09OIHdpbGwgYmUgdXNlZC4NCj4gPiA+ID4gKyAgQHBhcmFtW291dF0gUmVzcG9u c2UgICAgICBIVFRQIHJlc3BvbnNlIGZyb20gcmVkZmlzaCBzZXJ2aWNlLg0KPiA+ID4gPiArDQo+ ID4gPiA+ICsgIEByZXR2YWwgICAgIEVGSV9TVUNDRVNTICAgICBSZXNyb3VjZSBpcyByZXR1cm5l ZCBzdWNjZXNzZnVsbHkuDQo+ID4gPiA+ICsgIEByZXR2YWwgICAgIE90aGVycyAgICAgICAgICBF cnJvcnMgb2NjdXIuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiArRUZJX1NUQVRV Uw0KPiA+ID4gPiArRUZJQVBJDQo+ID4gPiA+ICtSZWRmaXNoUGF0Y2hSZXNvdXJjZSAoDQo+ID4g PiA+ICsgIElOICBFREtJSV9SRURGSVNIX0hUVFBfUFJPVE9DT0wgICpUaGlzLA0KPiA+ID4gPiAr ICBJTiAgUkVERklTSF9TRVJWSUNFICAgICAgICAgICAgICBTZXJ2aWNlLA0KPiA+ID4gPiArICBJ TiAgRUZJX1NUUklORyAgICAgICAgICAgICAgICAgICBVcmksDQo+ID4gPiA+ICsgIElOICBDSEFS OCAgICAgICAgICAgICAgICAgICAgICAgICpDb250ZW50LA0KPiA+ID4gPiArICBJTiAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50U2l6ZSBPUFRJT05BTCwNCj4gPiA+ID4gKyAg SU4gIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAgKkNvbnRlbnRUeXBlIE9QVElPTkFMLA0K PiA+ID4gPiArICBPVVQgUkVERklTSF9SRVNQT05TRSAgICAgICAgICAgICAqUmVzcG9uc2UNCj4g PiA+ID4gKyAgKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArICBFRklfU1RBVFVTICAgICAgICAgICAg ICAgICAgU3RhdHVzOw0KPiA+ID4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgUmV0 cnlDb3VudDsNCj4gPiA+ID4gKyAgUkVERklTSF9SRVFVRVNUICAgICAgICAgICAgIFJlcXVlc3Q7 DQo+ID4gPiA+ICsgIFJFREZJU0hfSFRUUF9DQUNIRV9QUklWQVRFICAqUHJpdmF0ZTsNCj4gPiA+ ID4gKw0KPiA+ID4gPiArICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwgKFNlcnZpY2UgPT0gTlVMTCkg fHwgKFJlc3BvbnNlID09IE5VTEwpIHx8DQo+ID4gPiBJU19FTVBUWV9TVFJJTkcgKFVyaSkgfHwg SVNfRU1QVFlfU1RSSU5HIChDb250ZW50KSkgew0KPiA+ID4gPiArICAgIHJldHVybiBFRklfSU5W QUxJRF9QQVJBTUVURVI7DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBERUJV RyAoKFJFREZJU0hfSFRUUF9DQUNIRV9ERUJVRywgIiVhOiBQYXRjaCBVUkk6ICVzXG4iLA0KPiBf X2Z1bmNfXywNCj4gPiA+IFVyaSkpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIFByaXZhdGUgICAg PSBSRURGSVNIX0hUVFBfQ0FDSEVfUFJJVkFURV9GUk9NX1RISVMgKFRoaXMpOw0KPiA+ID4gPiAr ICBSZXRyeUNvdW50ID0gMDsNCj4gPiA+ID4gKyAgWmVyb01lbSAoUmVzcG9uc2UsIHNpemVvZiAo UkVERklTSF9SRVNQT05TRSkpOw0KPiA+ID4gPiArICBaZXJvTWVtICgmUmVxdWVzdCwgc2l6ZW9m IChSRURGSVNIX1JFUVVFU1QpKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBSZXF1ZXN0LkNvbnRl bnQgICAgICAgPSBDb250ZW50Ow0KPiA+ID4gPiArICBSZXF1ZXN0LkNvbnRlbnRMZW5ndGggPSBD b250ZW50U2l6ZTsNCj4gPiA+ID4gKyAgUmVxdWVzdC5Db250ZW50VHlwZSAgID0gQ29udGVudFR5 cGU7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgLy8NCj4gPiA+ID4gKyAgLy8gUGF0Y2ggcmVzb3Vy Y2UgdG8gcmVkZmlzaCBzZXJ2aWNlLg0KPiA+ID4gPiArICAvLw0KPiA+ID4gPiArICBkbyB7DQo+ ID4gPiA+ICsgICAgUmV0cnlDb3VudCArPSAxOw0KPiA+ID4gPiArICAgIFN0YXR1cyAgICAgID0g SHR0cFNlbmRSZWNlaXZlICgNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgU2VydmljZSwN Cj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgVXJpLA0KPiA+ID4gPiArICAgICAgICAgICAg ICAgICAgICBIdHRwTWV0aG9kUGF0Y2gsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICZS ZXF1ZXN0LA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICBSZXNwb25zZQ0KPiA+ID4gPiAr ICAgICAgICAgICAgICAgICAgICApOw0KPiA+ID4gPiArICAgIERFQlVHICgoUkVERklTSF9IVFRQ X0NBQ0hFX0RFQlVHX1JFUVVFU1QsICIlYTogSFRUUCByZXF1ZXN0Og0KPiA+ID4gJXMgOiVyXG4i LCBfX2Z1bmNfXywgVXJpLCBTdGF0dXMpKTsNCj4gPiA+ID4gKyAgICBpZiAoIUVGSV9FUlJPUiAo U3RhdHVzKSB8fCAoUmV0cnlDb3VudCA+PSBQcml2YXRlLQ0KPiA+ID4gPlJldHJ5U2V0dGluZy5N YXhpbXVtUmV0cnlQYXRjaCkpIHsNCj4gPiA+ID4gKyAgICAgIGJyZWFrOw0KPiA+ID4gPiArICAg IH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIC8vDQo+ID4gPiA+ICsgICAgLy8gUmV0cnkgd2hl biBCTUMgaXMgbm90IHJlYWR5Lg0KPiA+ID4gPiArICAgIC8vDQo+ID4gPiA+ICsgICAgaWYgKChS ZXNwb25zZS0+U3RhdHVzQ29kZSAhPSBOVUxMKSkgew0KPiA+ID4gPiArICAgICAgREVCVUdfQ09E RSAoDQo+ID4gPiA+ICsgICAgICAgIER1bXBSZWRmaXNoUmVzcG9uc2UgKE5VTEwsIERFQlVHX0VS Uk9SLCBSZXNwb25zZSk7DQo+ID4gPiA+ICsgICAgICAgICk7DQo+ID4gPiA+ICsNCj4gPiA+ID4g KyAgICAgIGlmICghUmVkZmlzaFJldHJ5UmVxdWlyZWQgKFJlc3BvbnNlLT5TdGF0dXNDb2RlKSkg ew0KPiA+ID4gPiArICAgICAgICBicmVhazsNCj4gPiA+ID4gKyAgICAgIH0NCj4gPiA+ID4gKw0K PiA+ID4gPiArICAgICAgLy8NCj4gPiA+ID4gKyAgICAgIC8vIFJlbGVhc2UgcmVzcG9uc2UgZm9y IG5leHQgcm91bmQgb2YgcmVxdWVzdC4NCj4gPiA+ID4gKyAgICAgIC8vDQo+ID4gPiA+ICsgICAg ICBUaGlzLT5GcmVlUmVzcG9uc2UgKFRoaXMsIFJlc3BvbnNlKTsNCj4gPiA+ID4gKyAgICB9DQo+ ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBERUJVRyAoKERFQlVHX1dBUk4sICIlYTogUmVkZmlzaFBh dGNoVG9VcmlFeCBmYWlsZWQsIHJldHJ5DQo+ICglZC8lZClcbiIsDQo+ID4gPiBfX2Z1bmNfXywg UmV0cnlDb3VudCwgUHJpdmF0ZS0+UmV0cnlTZXR0aW5nLk1heGltdW1SZXRyeVBhdGNoKSk7DQo+ ID4gPiA+ICsgICAgaWYgKFByaXZhdGUtPlJldHJ5U2V0dGluZy5SZXRyeVdhaXQgPiAwKSB7DQo+ ID4gPiA+ICsgICAgICBnQlMtPlN0YWxsIChQcml2YXRlLT5SZXRyeVNldHRpbmcuUmV0cnlXYWl0 KTsNCj4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ICsgIH0gd2hpbGUgKFRSVUUpOw0KPiA+ID4gPiAr DQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIC8vIFJlZGZpc2ggcmVzb3VyY2UgaXMgdXBkYXRl ZC4gQXV0b21hdGljYWxseSBleHBpcmUgdGhlIGNhY2hlZCByZXNwb25zZQ0KPiA+ID4gPiArICAv LyBzbyBhcHBsaWNhdGlvbiBjYW4gZGlyZWN0bHkgZ2V0IHJlc291cmNlIGZyb20gUmVkZmlzaCBz ZXJ2aWNlIGFnYWluLg0KPiA+ID4gPiArICAvLw0KPiA+ID4gPiArICBERUJVRyAoKFJFREZJU0hf SFRUUF9DQUNIRV9ERUJVRywgIiVhOiBSZXNvdXJjZSBpcyB1cGRhdGVkLA0KPiBleHBpcmUNCj4g PiA+IFVSSTogJXNcbiIsIF9fZnVuY19fLCBVcmkpKTsNCj4gPiA+ID4gKyAgUmVkZmlzaEV4cGly ZVJlc3BvbnNlIChUaGlzLCBVcmkpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gPiA+ID4gKyAgICBERUJVR19DT0RFICgNCj4gPiA+ID4gKyAgICAg IER1bXBSZWRmaXNoUmVzcG9uc2UgKE5VTEwsIERFQlVHX0VSUk9SLCBSZXNwb25zZSk7DQo+ID4g PiA+ICsgICAgICApOw0KPiA+ID4gPiArICAgIC8vDQo+ID4gPiA+ICsgICAgLy8gUmVwb3J0IHN0 YXR1cyBjb2RlIGZvciBSZWRmaXNoIGZhaWx1cmUNCj4gPiA+ID4gKyAgICAvLw0KPiA+ID4gPiAr ICAgIFJlcG9ydEh0dHBFcnJvciAoSHR0cE1ldGhvZFBhdGNoLCBVcmksIFJlc3BvbnNlLT5TdGF0 dXNDb2RlKTsNCj4gPiA+ID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6IHBhdGNoICVz IGZhaWxlZCAoJWQvJWQpOiAlclxuIiwNCj4gX19mdW5jX18sDQo+ID4gPiBVcmksIFJldHJ5Q291 bnQsIFByaXZhdGUtPlJldHJ5U2V0dGluZy5NYXhpbXVtUmV0cnlQYXRjaCwgU3RhdHVzKSk7DQo+ ID4gPiA+ICsgICAgZ290byBPTl9SRUxFQVNFOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4g PiA+ID4gK09OX1JFTEVBU0U6DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgcmV0dXJuIFN0YXR1czsN Cj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgIFBlcmZvcm0g SFRUUCBQVVQgdG8gc2VuZCByZWRmaXNoIHJlc291cmNlIHRvIGdpdmVuIHJlc291cmNlIFVSSS4N Cj4gPiA+ID4gKyAgSXQncyBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBmcmVlIFJlc3BvbnNl IGJ5IGNhbGxpbmcgRnJlZVJlc3BvbnNlICgpLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEBwYXJh bVtpbl0gIFRoaXMgICAgICAgICAgUG9pbnRlciB0byBFREtJSV9SRURGSVNIX0hUVFBfUFJPVE9D T0wNCj4gaW5zdGFuY2UuDQo+ID4gPiA+ICsgIEBwYXJhbVtpbl0gIFNlcnZpY2UgICAgICAgUmVk ZmlzaCBzZXJ2aWNlIGluc3RhbmNlIHRvIHBlcmZvcm0gSFRUUCBQVVQuDQo+ID4gPiA+ICsgIEBw YXJhbVtpbl0gIFVyaSAgICAgICAgICAgVGFyZ2V0IHJlc291cmNlIFVSSS4NCj4gPiA+ID4gKyAg QHBhcmFtW2luXSAgQ29udGVudCAgICAgICBEYXRhIHRvIHB1dC4NCj4gPiA+ID4gKyAgQHBhcmFt W2luXSAgQ29udGVudFNpemUgICBTaXplIG9mIHRoZSBDb250ZW50IHRvIGJlIHNlbmQgdG8gUmVk ZmlzaA0KPiBzZXJ2aWNlLg0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRo aXMgaXMgb3B0aW9uYWwuIFdoZW4gQ29udGVudFNpemUgaXMgMCwgQ29udGVudFNpemUNCj4gPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyB0aGUgc2l6ZSBvZiBDb250ZW50Lg0K PiA+ID4gPiArICBAcGFyYW1baW5dICBDb250ZW50VHlwZSAgIFR5cGUgb2YgdGhlIENvbnRlbnQg dG8gYmUgc2VuZCB0byBSZWRmaXNoDQo+IHNlcnZpY2UuDQo+ID4gPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVGhpcyBpcyBvcHRpb25hbC4gV2hlbiBDb250ZW50VHlwZSBpcyBOVUxM LCBjb250ZW50DQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSBIVFRQ X0NPTlRFTlRfVFlQRV9BUFBfSlNPTiB3aWxsIGJlIHVzZWQuDQo+ID4gPiA+ICsgIEBwYXJhbVtv dXRdIFJlc3BvbnNlICAgICAgSFRUUCByZXNwb25zZSBmcm9tIHJlZGZpc2ggc2VydmljZS4NCj4g PiA+ID4gKw0KPiA+ID4gPiArICBAcmV0dmFsICAgICBFRklfU1VDQ0VTUyAgICAgUmVzcm91Y2Ug aXMgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ID4gPiArICBAcmV0dmFsICAgICBPdGhlcnMg ICAgICAgICAgRXJyb3JzIG9jY3VyLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsqKi8NCj4gPiA+ID4g K0VGSV9TVEFUVVMNCj4gPiA+ID4gK0VGSUFQSQ0KPiA+ID4gPiArUmVkZmlzaFB1dFJlc291cmNl ICgNCj4gPiA+ID4gKyAgSU4gIEVES0lJX1JFREZJU0hfSFRUUF9QUk9UT0NPTCAgKlRoaXMsDQo+ ID4gPiA+ICsgIElOICBSRURGSVNIX1NFUlZJQ0UgICAgICAgICAgICAgIFNlcnZpY2UsDQo+ID4g PiA+ICsgIElOICBFRklfU1RSSU5HICAgICAgICAgICAgICAgICAgIFVyaSwNCj4gPiA+ID4gKyAg SU4gIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAgKkNvbnRlbnQsDQo+ID4gPiA+ICsgIElO ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRTaXplIE9QVElPTkFMLA0KPiA+ ID4gPiArICBJTiAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICAqQ29udGVudFR5cGUgT1BU SU9OQUwsDQo+ID4gPiA+ICsgIE9VVCBSRURGSVNIX1JFU1BPTlNFICAgICAgICAgICAgICpSZXNw b25zZQ0KPiA+ID4gPiArICApDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgIEVGSV9TVEFUVVMgICAg ICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICBSZXRyeUNvdW50Ow0KPiA+ID4gPiArICBSRURGSVNIX1JFUVVFU1QgICAgICAgICAgICAg UmVxdWVzdDsNCj4gPiA+ID4gKyAgUkVERklTSF9IVFRQX0NBQ0hFX1BSSVZBVEUgICpQcml2YXRl Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIGlmICgoVGhpcyA9PSBOVUxMKSB8fCAoU2VydmljZSA9 PSBOVUxMKSB8fCAoUmVzcG9uc2UgPT0gTlVMTCkgfHwNCj4gPiA+IElTX0VNUFRZX1NUUklORyAo VXJpKSB8fCBJU19FTVBUWV9TVFJJTkcgKENvbnRlbnQpKSB7DQo+ID4gPiA+ICsgICAgcmV0dXJu IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ ICsgIERFQlVHICgoUkVERklTSF9IVFRQX0NBQ0hFX0RFQlVHLCAiJWE6IFB1dCBVUkk6ICVzXG4i LCBfX2Z1bmNfXywNCj4gPiA+IFVyaSkpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIFByaXZhdGUg ICAgPSBSRURGSVNIX0hUVFBfQ0FDSEVfUFJJVkFURV9GUk9NX1RISVMgKFRoaXMpOw0KPiA+ID4g PiArICBSZXRyeUNvdW50ID0gMDsNCj4gPiA+ID4gKyAgWmVyb01lbSAoUmVzcG9uc2UsIHNpemVv ZiAoUkVERklTSF9SRVNQT05TRSkpOw0KPiA+ID4gPiArICBaZXJvTWVtICgmUmVxdWVzdCwgc2l6 ZW9mIChSRURGSVNIX1JFUVVFU1QpKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBSZXF1ZXN0LkNv bnRlbnQgICAgICAgPSBDb250ZW50Ow0KPiA+ID4gPiArICBSZXF1ZXN0LkNvbnRlbnRMZW5ndGgg PSBDb250ZW50U2l6ZTsNCj4gPiA+ID4gKyAgUmVxdWVzdC5Db250ZW50VHlwZSAgID0gQ29udGVu dFR5cGU7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgLy8NCj4gPiA+ID4gKyAgLy8gUGF0Y2ggcmVz b3VyY2UgdG8gcmVkZmlzaCBzZXJ2aWNlLg0KPiA+ID4gPiArICAvLw0KPiA+ID4gPiArICBkbyB7 DQo+ID4gPiA+ICsgICAgUmV0cnlDb3VudCArPSAxOw0KPiA+ID4gPiArICAgIFN0YXR1cyAgICAg ID0gSHR0cFNlbmRSZWNlaXZlICgNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgU2Vydmlj ZSwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgVXJpLA0KPiA+ID4gPiArICAgICAgICAg ICAgICAgICAgICBIdHRwTWV0aG9kUHV0LA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAm UmVxdWVzdCwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgUmVzcG9uc2UNCj4gPiA+ID4g KyAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiA+ID4gKyAgICBERUJVRyAoKFJFREZJU0hfSFRU UF9DQUNIRV9ERUJVR19SRVFVRVNULCAiJWE6IEhUVFAgcmVxdWVzdDoNCj4gPiA+ICVzIDolclxu IiwgX19mdW5jX18sIFVyaSwgU3RhdHVzKSk7DQo+ID4gPiA+ICsgICAgaWYgKCFFRklfRVJST1Ig KFN0YXR1cykgfHwgKFJldHJ5Q291bnQgPj0gUHJpdmF0ZS0NCj4gPiA+ID5SZXRyeVNldHRpbmcu TWF4aW11bVJldHJ5UHV0KSkgew0KPiA+ID4gPiArICAgICAgYnJlYWs7DQo+ID4gPiA+ICsgICAg fQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgLy8NCj4gPiA+ID4gKyAgICAvLyBSZXRyeSB3aGVu IEJNQyBpcyBub3QgcmVhZHkuDQo+ID4gPiA+ICsgICAgLy8NCj4gPiA+ID4gKyAgICBpZiAoKFJl c3BvbnNlLT5TdGF0dXNDb2RlICE9IE5VTEwpKSB7DQo+ID4gPiA+ICsgICAgICBERUJVR19DT0RF ICgNCj4gPiA+ID4gKyAgICAgICAgRHVtcFJlZGZpc2hSZXNwb25zZSAoTlVMTCwgREVCVUdfRVJS T1IsIFJlc3BvbnNlKTsNCj4gPiA+ID4gKyAgICAgICAgKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiAr ICAgICAgaWYgKCFSZWRmaXNoUmV0cnlSZXF1aXJlZCAoUmVzcG9uc2UtPlN0YXR1c0NvZGUpKSB7 DQo+ID4gPiA+ICsgICAgICAgIGJyZWFrOw0KPiA+ID4gPiArICAgICAgfQ0KPiA+ID4gPiArDQo+ ID4gPiA+ICsgICAgICAvLw0KPiA+ID4gPiArICAgICAgLy8gUmVsZWFzZSByZXNwb25zZSBmb3Ig bmV4dCByb3VuZCBvZiByZXF1ZXN0Lg0KPiA+ID4gPiArICAgICAgLy8NCj4gPiA+ID4gKyAgICAg IFRoaXMtPkZyZWVSZXNwb25zZSAoVGhpcywgUmVzcG9uc2UpOw0KPiA+ID4gPiArICAgIH0NCj4g PiA+ID4gKw0KPiA+ID4gPiArICAgIERFQlVHICgoREVCVUdfV0FSTiwgIiVhOiBSZWRmaXNoUHV0 VG9VcmkgZmFpbGVkLCByZXRyeSAoJWQvJWQpXG4iLA0KPiA+ID4gX19mdW5jX18sIFJldHJ5Q291 bnQsIFByaXZhdGUtPlJldHJ5U2V0dGluZy5NYXhpbXVtUmV0cnlQdXQpKTsNCj4gPiA+ID4gKyAg ICBpZiAoUHJpdmF0ZS0+UmV0cnlTZXR0aW5nLlJldHJ5V2FpdCA+IDApIHsNCj4gPiA+ID4gKyAg ICAgIGdCUy0+U3RhbGwgKFByaXZhdGUtPlJldHJ5U2V0dGluZy5SZXRyeVdhaXQpOw0KPiA+ID4g PiArICAgIH0NCj4gPiA+ID4gKyAgfSB3aGlsZSAoVFJVRSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4g KyAgLy8NCj4gPiA+ID4gKyAgLy8gUmVkZmlzaCByZXNvdXJjZSBpcyB1cGRhdGVkLiBBdXRvbWF0 aWNhbGx5IGV4cGlyZSB0aGUgY2FjaGVkIHJlc3BvbnNlDQo+ID4gPiA+ICsgIC8vIHNvIGFwcGxp Y2F0aW9uIGNhbiBkaXJlY3RseSBnZXQgcmVzb3VyY2UgZnJvbSBSZWRmaXNoIHNlcnZpY2UgYWdh aW4uDQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIERFQlVHICgoUkVERklTSF9IVFRQX0NBQ0hF X0RFQlVHLCAiJWE6IFJlc291cmNlIGlzIHVwZGF0ZWQsDQo+IGV4cGlyZQ0KPiA+ID4gVVJJOiAl c1xuIiwgX19mdW5jX18sIFVyaSkpOw0KPiA+ID4gPiArICBSZWRmaXNoRXhwaXJlUmVzcG9uc2Ug KFRoaXMsIFVyaSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiA+ID4gPiArICAgIERFQlVHX0NPREUgKA0KPiA+ID4gPiArICAgICAgRHVtcFJlZGZp c2hSZXNwb25zZSAoTlVMTCwgREVCVUdfRVJST1IsIFJlc3BvbnNlKTsNCj4gPiA+ID4gKyAgICAg ICk7DQo+ID4gPiA+ICsgICAgLy8NCj4gPiA+ID4gKyAgICAvLyBSZXBvcnQgc3RhdHVzIGNvZGUg Zm9yIFJlZGZpc2ggZmFpbHVyZQ0KPiA+ID4gPiArICAgIC8vDQo+ID4gPiA+ICsgICAgUmVwb3J0 SHR0cEVycm9yIChIdHRwTWV0aG9kUHV0LCBVcmksIFJlc3BvbnNlLT5TdGF0dXNDb2RlKTsNCj4g PiA+ID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6IHB1dCAlcyBmYWlsZWQgKCVkLyVk KTogJXJcbiIsIF9fZnVuY19fLA0KPiBVcmksDQo+ID4gPiBSZXRyeUNvdW50LCBQcml2YXRlLT5S ZXRyeVNldHRpbmcuTWF4aW11bVJldHJ5UHV0LCBTdGF0dXMpKTsNCj4gPiA+ID4gKyAgICBnb3Rv IE9OX1JFTEVBU0U7DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArT05fUkVMRUFT RToNCj4gPiA+ID4gKw0KPiA+ID4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ID4gPiArfQ0KPiA+ ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAgUGVyZm9ybSBIVFRQIFBPU1QgdG8gc2Vu ZCByZWRmaXNoIHJlc291cmNlIHRvIGdpdmVuIHJlc291cmNlIFVSSS4NCj4gPiA+ID4gKyAgSXQn cyBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBmcmVlIFJlc3BvbnNlIGJ5IGNhbGxpbmcgRnJl ZVJlc3BvbnNlICgpLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAg ICAgICAgUG9pbnRlciB0byBFREtJSV9SRURGSVNIX0hUVFBfUFJPVE9DT0wNCj4gaW5zdGFuY2Uu DQo+ID4gPiA+ICsgIEBwYXJhbVtpbl0gIFNlcnZpY2UgICAgICAgUmVkZmlzaCBzZXJ2aWNlIGlu c3RhbmNlIHRvIHBlcmZvcm0gSFRUUCBQT1NULg0KPiA+ID4gPiArICBAcGFyYW1baW5dICBVcmkg ICAgICAgICAgIFRhcmdldCByZXNvdXJjZSBVUkkuDQo+ID4gPiA+ICsgIEBwYXJhbVtpbl0gIENv bnRlbnQgICAgICAgRGF0YSB0byBwb3N0Lg0KPiA+ID4gPiArICBAcGFyYW1baW5dICBDb250ZW50 U2l6ZSAgIFNpemUgb2YgdGhlIENvbnRlbnQgdG8gYmUgc2VuZCB0byBSZWRmaXNoDQo+IHNlcnZp Y2UuDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBvcHRpb25h bC4gV2hlbiBDb250ZW50U2l6ZSBpcyAwLCBDb250ZW50U2l6ZQ0KPiA+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlzIHRoZSBzaXplIG9mIENvbnRlbnQuDQo+ID4gPiA+ICsgIEBw YXJhbVtpbl0gIENvbnRlbnRUeXBlICAgVHlwZSBvZiB0aGUgQ29udGVudCB0byBiZSBzZW5kIHRv IFJlZGZpc2gNCj4gc2VydmljZS4NCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBUaGlzIGlzIG9wdGlvbmFsLiBXaGVuIENvbnRlbnRUeXBlIGlzIE5VTEwsIGNvbnRlbnQNCj4g PiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlIEhUVFBfQ09OVEVOVF9UWVBF X0FQUF9KU09OIHdpbGwgYmUgdXNlZC4NCj4gPiA+ID4gKyAgQHBhcmFtW291dF0gUmVzcG9uc2Ug ICAgICBIVFRQIHJlc3BvbnNlIGZyb20gcmVkZmlzaCBzZXJ2aWNlLg0KPiA+ID4gPiArDQo+ID4g PiA+ICsgIEByZXR2YWwgICAgIEVGSV9TVUNDRVNTICAgICBSZXNyb3VjZSBpcyByZXR1cm5lZCBz dWNjZXNzZnVsbHkuDQo+ID4gPiA+ICsgIEByZXR2YWwgICAgIE90aGVycyAgICAgICAgICBFcnJv cnMgb2NjdXIuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiArRUZJX1NUQVRVUw0K PiA+ID4gPiArRUZJQVBJDQo+ID4gPiA+ICtSZWRmaXNoUG9zdFJlc291cmNlICgNCj4gPiA+ID4g KyAgSU4gIEVES0lJX1JFREZJU0hfSFRUUF9QUk9UT0NPTCAgKlRoaXMsDQo+ID4gPiA+ICsgIElO ICBSRURGSVNIX1NFUlZJQ0UgICAgICAgICAgICAgIFNlcnZpY2UsDQo+ID4gPiA+ICsgIElOICBF RklfU1RSSU5HICAgICAgICAgICAgICAgICAgIFVyaSwNCj4gPiA+ID4gKyAgSU4gIENIQVI4ICAg ICAgICAgICAgICAgICAgICAgICAgKkNvbnRlbnQsDQo+ID4gPiA+ICsgIElOICBVSU5UTiAgICAg ICAgICAgICAgICAgICAgICAgIENvbnRlbnRTaXplIE9QVElPTkFMLA0KPiA+ID4gPiArICBJTiAg Q0hBUjggICAgICAgICAgICAgICAgICAgICAgICAqQ29udGVudFR5cGUgT1BUSU9OQUwsDQo+ID4g PiA+ICsgIE9VVCBSRURGSVNIX1JFU1BPTlNFICAgICAgICAgICAgICpSZXNwb25zZQ0KPiA+ID4g PiArICApDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAg ICBTdGF0dXM7DQo+ID4gPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICBSZXRyeUNv dW50Ow0KPiA+ID4gPiArICBSRURGSVNIX1JFUVVFU1QgICAgICAgICAgICAgUmVxdWVzdDsNCj4g PiA+ID4gKyAgUkVERklTSF9IVFRQX0NBQ0hFX1BSSVZBVEUgICpQcml2YXRlOw0KPiA+ID4gPiAr DQo+ID4gPiA+ICsgIGlmICgoVGhpcyA9PSBOVUxMKSB8fCAoU2VydmljZSA9PSBOVUxMKSB8fCAo UmVzcG9uc2UgPT0gTlVMTCkgfHwNCj4gPiA+IElTX0VNUFRZX1NUUklORyAoVXJpKSB8fCBJU19F TVBUWV9TVFJJTkcgKENvbnRlbnQpKSB7DQo+ID4gPiA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElE X1BBUkFNRVRFUjsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIERFQlVHICgo UkVERklTSF9IVFRQX0NBQ0hFX0RFQlVHLCAiJWE6IFBvc3QgVVJJOiAlc1xuIiwNCj4gX19mdW5j X18sDQo+ID4gPiBVcmkpKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBQcml2YXRlICAgID0gUkVE RklTSF9IVFRQX0NBQ0hFX1BSSVZBVEVfRlJPTV9USElTIChUaGlzKTsNCj4gPiA+ID4gKyAgUmV0 cnlDb3VudCA9IDA7DQo+ID4gPiA+ICsgIFplcm9NZW0gKFJlc3BvbnNlLCBzaXplb2YgKFJFREZJ U0hfUkVTUE9OU0UpKTsNCj4gPiA+ID4gKyAgWmVyb01lbSAoJlJlcXVlc3QsIHNpemVvZiAoUkVE RklTSF9SRVFVRVNUKSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgUmVxdWVzdC5Db250ZW50ICAg ICAgID0gQ29udGVudDsNCj4gPiA+ID4gKyAgUmVxdWVzdC5Db250ZW50TGVuZ3RoID0gQ29udGVu dFNpemU7DQo+ID4gPiA+ICsgIFJlcXVlc3QuQ29udGVudFR5cGUgICA9IENvbnRlbnRUeXBlOw0K PiA+ID4gPiArDQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIC8vIFBhdGNoIHJlc291cmNlIHRv IHJlZGZpc2ggc2VydmljZS4NCj4gPiA+ID4gKyAgLy8NCj4gPiA+ID4gKyAgZG8gew0KPiA+ID4g PiArICAgIFJldHJ5Q291bnQgKz0gMTsNCj4gPiA+ID4gKyAgICBTdGF0dXMgICAgICA9IEh0dHBT ZW5kUmVjZWl2ZSAoDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgIFNlcnZpY2UsDQo+ID4g PiA+ICsgICAgICAgICAgICAgICAgICAgIFVyaSwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgSHR0cE1ldGhvZFBvc3QsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICZSZXF1ZXN0 LA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICBSZXNwb25zZQ0KPiA+ID4gPiArICAgICAg ICAgICAgICAgICAgICApOw0KPiA+ID4gPiArICAgIERFQlVHICgoUkVERklTSF9IVFRQX0NBQ0hF X0RFQlVHX1JFUVVFU1QsICIlYTogSFRUUCByZXF1ZXN0Og0KPiA+ID4gJXMgOiVyXG4iLCBfX2Z1 bmNfXywgVXJpLCBTdGF0dXMpKTsNCj4gPiA+ID4gKyAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVz KSB8fCAoUmV0cnlDb3VudCA+PSBQcml2YXRlLQ0KPiA+ID4gPlJldHJ5U2V0dGluZy5NYXhpbXVt UmV0cnlQb3N0KSkgew0KPiA+ID4gPiArICAgICAgYnJlYWs7DQo+ID4gPiA+ICsgICAgfQ0KPiA+ ID4gPiArDQo+ID4gPiA+ICsgICAgLy8NCj4gPiA+ID4gKyAgICAvLyBSZXRyeSB3aGVuIEJNQyBp cyBub3QgcmVhZHkuDQo+ID4gPiA+ICsgICAgLy8NCj4gPiA+ID4gKyAgICBpZiAoKFJlc3BvbnNl LT5TdGF0dXNDb2RlICE9IE5VTEwpKSB7DQo+ID4gPiA+ICsgICAgICBERUJVR19DT0RFICgNCj4g PiA+ID4gKyAgICAgICAgRHVtcFJlZGZpc2hSZXNwb25zZSAoTlVMTCwgREVCVUdfRVJST1IsIFJl c3BvbnNlKTsNCj4gPiA+ID4gKyAgICAgICAgKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICAg aWYgKCFSZWRmaXNoUmV0cnlSZXF1aXJlZCAoUmVzcG9uc2UtPlN0YXR1c0NvZGUpKSB7DQo+ID4g PiA+ICsgICAgICAgIGJyZWFrOw0KPiA+ID4gPiArICAgICAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ ICsgICAgICAvLw0KPiA+ID4gPiArICAgICAgLy8gUmVsZWFzZSByZXNwb25zZSBmb3IgbmV4dCBy b3VuZCBvZiByZXF1ZXN0Lg0KPiA+ID4gPiArICAgICAgLy8NCj4gPiA+ID4gKyAgICAgIFRoaXMt PkZyZWVSZXNwb25zZSAoVGhpcywgUmVzcG9uc2UpOw0KPiA+ID4gPiArICAgIH0NCj4gPiA+ID4g Kw0KPiA+ID4gPiArICAgIERFQlVHICgoREVCVUdfV0FSTiwgIiVhOiBSZWRmaXNoUG9zdFRvVXJp IGZhaWxlZCwgcmV0cnkgKCVkLyVkKVxuIiwNCj4gPiA+IF9fZnVuY19fLCBSZXRyeUNvdW50LCBQ cml2YXRlLT5SZXRyeVNldHRpbmcuTWF4aW11bVJldHJ5UG9zdCkpOw0KPiA+ID4gPiArICAgIGlm IChQcml2YXRlLT5SZXRyeVNldHRpbmcuUmV0cnlXYWl0ID4gMCkgew0KPiA+ID4gPiArICAgICAg Z0JTLT5TdGFsbCAoUHJpdmF0ZS0+UmV0cnlTZXR0aW5nLlJldHJ5V2FpdCk7DQo+ID4gPiA+ICsg ICAgfQ0KPiA+ID4gPiArICB9IHdoaWxlIChUUlVFKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAv Lw0KPiA+ID4gPiArICAvLyBSZWRmaXNoIHJlc291cmNlIGlzIHVwZGF0ZWQuIEF1dG9tYXRpY2Fs bHkgZXhwaXJlIHRoZSBjYWNoZWQgcmVzcG9uc2UNCj4gPiA+ID4gKyAgLy8gc28gYXBwbGljYXRp b24gY2FuIGRpcmVjdGx5IGdldCByZXNvdXJjZSBmcm9tIFJlZGZpc2ggc2VydmljZSBhZ2Fpbi4N Cj4gPiA+ID4gKyAgLy8NCj4gPiA+ID4gKyAgREVCVUcgKChSRURGSVNIX0hUVFBfQ0FDSEVfREVC VUcsICIlYTogUmVzb3VyY2UgaXMgdXBkYXRlZCwNCj4gZXhwaXJlDQo+ID4gPiBVUkk6ICVzXG4i LCBfX2Z1bmNfXywgVXJpKSk7DQo+ID4gPiA+ICsgIFJlZGZpc2hFeHBpcmVSZXNwb25zZSAoVGhp cywgVXJpKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+ID4gPiA+ICsgICAgREVCVUdfQ09ERSAoDQo+ID4gPiA+ICsgICAgICBEdW1wUmVkZmlzaFJl c3BvbnNlIChOVUxMLCBERUJVR19FUlJPUiwgUmVzcG9uc2UpOw0KPiA+ID4gPiArICAgICAgKTsN Cj4gPiA+ID4gKyAgICAvLw0KPiA+ID4gPiArICAgIC8vIFJlcG9ydCBzdGF0dXMgY29kZSBmb3Ig UmVkZmlzaCBmYWlsdXJlDQo+ID4gPiA+ICsgICAgLy8NCj4gPiA+ID4gKyAgICBSZXBvcnRIdHRw RXJyb3IgKEh0dHBNZXRob2RQb3N0LCBVcmksIFJlc3BvbnNlLT5TdGF0dXNDb2RlKTsNCj4gPiA+ ID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6IHBvc3QgJXMgZmFpbGVkICglZC8lZCk6 ICVyXG4iLCBfX2Z1bmNfXywNCj4gVXJpLA0KPiA+ID4gUmV0cnlDb3VudCwgUHJpdmF0ZS0+UmV0 cnlTZXR0aW5nLk1heGltdW1SZXRyeVBvc3QsIFN0YXR1cykpOw0KPiA+ID4gPiArICAgIGdvdG8g T05fUkVMRUFTRTsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICtPTl9SRUxFQVNF Og0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gPiA+ICt9DQo+ID4g PiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICBQZXJmb3JtIEhUVFAgREVMRVRFIHRvIGRl bGV0ZSByZWRmaXNoIHJlc291cmNlIG9uIGdpdmVuIHJlc291cmNlIFVSSS4NCj4gPiA+ID4gKyAg SXQncyBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBmcmVlIFJlc3BvbnNlIGJ5IGNhbGxpbmcg RnJlZVJlc3BvbnNlICgpLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEBwYXJhbVtpbl0gIFRoaXMg ICAgICAgICAgUG9pbnRlciB0byBFREtJSV9SRURGSVNIX0hUVFBfUFJPVE9DT0wNCj4gaW5zdGFu Y2UuDQo+ID4gPiA+ICsgIEBwYXJhbVtpbl0gIFNlcnZpY2UgICAgICAgUmVkZmlzaCBzZXJ2aWNl IGluc3RhbmNlIHRvIHBlcmZvcm0gSFRUUA0KPiBERUxFVEUuDQo+ID4gPiA+ICsgIEBwYXJhbVtp bl0gIFVyaSAgICAgICAgICAgVGFyZ2V0IHJlc291cmNlIFVSSS4NCj4gPiA+ID4gKyAgQHBhcmFt W2luXSAgQ29udGVudCAgICAgICBKU09OIHJlcHJlc2VudGVkIHByb3BlcnRpZXMgdG8gYmUgZGVs ZXRlZC4gVGhpcw0KPiBpcw0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9w dGlvbmFsLg0KPiA+ID4gPiArICBAcGFyYW1baW5dICBDb250ZW50U2l6ZSAgIFNpemUgb2YgdGhl IENvbnRlbnQgdG8gYmUgc2VuZCB0byBSZWRmaXNoDQo+IHNlcnZpY2UuDQo+ID4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBvcHRpb25hbC4gV2hlbiBDb250ZW50U2l6 ZSBpcyAwLCBDb250ZW50U2l6ZQ0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlzIHRoZSBzaXplIG9mIENvbnRlbnQgaWYgQ29udGVudCBpcyBub3QgTlVMTC4NCj4gPiA+ID4g KyAgQHBhcmFtW2luXSAgQ29udGVudFR5cGUgICBUeXBlIG9mIHRoZSBDb250ZW50IHRvIGJlIHNl bmQgdG8gUmVkZmlzaA0KPiBzZXJ2aWNlLg0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFRoaXMgaXMgb3B0aW9uYWwuIFdoZW4gQ29udGVudCBpcyBub3QgTlVMTCBhbmQNCj4g PiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSBpcyBOVUxMLCBj b250ZW50IHR5cGUNCj4gPiA+IEhUVFBfQ09OVEVOVF9UWVBFX0FQUF9KU09ODQo+ID4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSB1c2VkLg0KPiA+ID4gPiArICBAcGFy YW1bb3V0XSBSZXNwb25zZSAgICAgIEhUVFAgcmVzcG9uc2UgZnJvbSByZWRmaXNoIHNlcnZpY2Uu DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHJldHZhbCAgICAgRUZJX1NVQ0NFU1MgICAgIFJlc3Jv dWNlIGlzIHJldHVybmVkIHN1Y2Nlc3NmdWxseS4NCj4gPiA+ID4gKyAgQHJldHZhbCAgICAgT3Ro ZXJzICAgICAgICAgIEVycm9ycyBvY2N1ci4NCj4gPiA+ID4gKw0KPiA+ID4gPiArKiovDQo+ID4g PiA+ICtFRklfU1RBVFVTDQo+ID4gPiA+ICtFRklBUEkNCj4gPiA+ID4gK1JlZGZpc2hEZWxldGVS ZXNvdXJjZSAoDQo+ID4gPiA+ICsgIElOICBFREtJSV9SRURGSVNIX0hUVFBfUFJPVE9DT0wgICpU aGlzLA0KPiA+ID4gPiArICBJTiAgUkVERklTSF9TRVJWSUNFICAgICAgICAgICAgICBTZXJ2aWNl LA0KPiA+ID4gPiArICBJTiAgRUZJX1NUUklORyAgICAgICAgICAgICAgICAgICBVcmksDQo+ID4g PiA+ICsgIElOICBDSEFSOCAgICAgICAgICAgICAgICAgICAgICAgICpDb250ZW50IE9QVElPTkFM LA0KPiA+ID4gPiArICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50U2l6 ZSBPUFRJT05BTCwNCj4gPiA+ID4gKyAgSU4gIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAg KkNvbnRlbnRUeXBlIE9QVElPTkFMLA0KPiA+ID4gPiArICBPVVQgUkVERklTSF9SRVNQT05TRSAg ICAgICAgICAgICAqUmVzcG9uc2UNCj4gPiA+ID4gKyAgKQ0KPiA+ID4gPiArew0KPiA+ID4gPiAr ICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ID4gPiArICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgUmV0cnlDb3VudDsNCj4gPiA+ID4gKyAgUkVERklTSF9SRVFV RVNUICAgICAgICAgICAgIFJlcXVlc3Q7DQo+ID4gPiA+ICsgIFJFREZJU0hfSFRUUF9DQUNIRV9Q UklWQVRFICAqUHJpdmF0ZTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBpZiAoKFRoaXMgPT0gTlVM TCkgfHwgKFNlcnZpY2UgPT0gTlVMTCkgfHwgKFJlc3BvbnNlID09IE5VTEwpIHx8DQo+ID4gPiBJ U19FTVBUWV9TVFJJTkcgKFVyaSkpIHsNCj4gPiA+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURf UEFSQU1FVEVSOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgREVCVUcgKChS RURGSVNIX0hUVFBfQ0FDSEVfREVCVUcsICIlYTogRGVsZXRlIFVSSTogJXNcbiIsDQo+IF9fZnVu Y19fLA0KPiA+ID4gVXJpKSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgUHJpdmF0ZSAgICA9IFJF REZJU0hfSFRUUF9DQUNIRV9QUklWQVRFX0ZST01fVEhJUyAoVGhpcyk7DQo+ID4gPiA+ICsgIFJl dHJ5Q291bnQgPSAwOw0KPiA+ID4gPiArICBaZXJvTWVtIChSZXNwb25zZSwgc2l6ZW9mIChSRURG SVNIX1JFU1BPTlNFKSk7DQo+ID4gPiA+ICsgIFplcm9NZW0gKCZSZXF1ZXN0LCBzaXplb2YgKFJF REZJU0hfUkVRVUVTVCkpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIFJlcXVlc3QuQ29udGVudCAg ICAgICA9IENvbnRlbnQ7DQo+ID4gPiA+ICsgIFJlcXVlc3QuQ29udGVudExlbmd0aCA9IENvbnRl bnRTaXplOw0KPiA+ID4gPiArICBSZXF1ZXN0LkNvbnRlbnRUeXBlICAgPSBDb250ZW50VHlwZTsN Cj4gPiA+ID4gKw0KPiA+ID4gPiArICAvLw0KPiA+ID4gPiArICAvLyBQYXRjaCByZXNvdXJjZSB0 byByZWRmaXNoIHNlcnZpY2UuDQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIGRvIHsNCj4gPiA+ ID4gKyAgICBSZXRyeUNvdW50ICs9IDE7DQo+ID4gPiA+ICsgICAgU3RhdHVzICAgICAgPSBIdHRw U2VuZFJlY2VpdmUgKA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlLA0KPiA+ ID4gPiArICAgICAgICAgICAgICAgICAgICBVcmksDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAg ICAgIEh0dHBNZXRob2REZWxldGUsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICZSZXF1 ZXN0LA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICBSZXNwb25zZQ0KPiA+ID4gPiArICAg ICAgICAgICAgICAgICAgICApOw0KPiA+ID4gPiArICAgIERFQlVHICgoUkVERklTSF9IVFRQX0NB Q0hFX0RFQlVHX1JFUVVFU1QsICIlYTogSFRUUCByZXF1ZXN0Og0KPiA+ID4gJXMgOiVyXG4iLCBf X2Z1bmNfXywgVXJpLCBTdGF0dXMpKTsNCj4gPiA+ID4gKyAgICBpZiAoIUVGSV9FUlJPUiAoU3Rh dHVzKSB8fCAoUmV0cnlDb3VudCA+PSBQcml2YXRlLQ0KPiA+ID4gPlJldHJ5U2V0dGluZy5NYXhp bXVtUmV0cnlEZWxldGUpKSB7DQo+ID4gPiA+ICsgICAgICBicmVhazsNCj4gPiA+ID4gKyAgICB9 DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAvLw0KPiA+ID4gPiArICAgIC8vIFJldHJ5IHdoZW4g Qk1DIGlzIG5vdCByZWFkeS4NCj4gPiA+ID4gKyAgICAvLw0KPiA+ID4gPiArICAgIGlmICgoUmVz cG9uc2UtPlN0YXR1c0NvZGUgIT0gTlVMTCkpIHsNCj4gPiA+ID4gKyAgICAgIERFQlVHX0NPREUg KA0KPiA+ID4gPiArICAgICAgICBEdW1wUmVkZmlzaFJlc3BvbnNlIChOVUxMLCBERUJVR19FUlJP UiwgUmVzcG9uc2UpOw0KPiA+ID4gPiArICAgICAgICApOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsg ICAgICBpZiAoIVJlZGZpc2hSZXRyeVJlcXVpcmVkIChSZXNwb25zZS0+U3RhdHVzQ29kZSkpIHsN Cj4gPiA+ID4gKyAgICAgICAgYnJlYWs7DQo+ID4gPiA+ICsgICAgICB9DQo+ID4gPiA+ICsNCj4g PiA+ID4gKyAgICAgIC8vDQo+ID4gPiA+ICsgICAgICAvLyBSZWxlYXNlIHJlc3BvbnNlIGZvciBu ZXh0IHJvdW5kIG9mIHJlcXVlc3QuDQo+ID4gPiA+ICsgICAgICAvLw0KPiA+ID4gPiArICAgICAg VGhpcy0+RnJlZVJlc3BvbnNlIChUaGlzLCBSZXNwb25zZSk7DQo+ID4gPiA+ICsgICAgfQ0KPiA+ ID4gPiArDQo+ID4gPiA+ICsgICAgREVCVUcgKChERUJVR19XQVJOLCAiJWE6IFJlZGZpc2hEZWxl dGVCeVVyaSBmYWlsZWQsIHJldHJ5DQo+ICglZC8lZClcbiIsDQo+ID4gPiBfX2Z1bmNfXywgUmV0 cnlDb3VudCwgUHJpdmF0ZS0+UmV0cnlTZXR0aW5nLk1heGltdW1SZXRyeURlbGV0ZSkpOw0KPiA+ ID4gPiArICAgIGlmIChQcml2YXRlLT5SZXRyeVNldHRpbmcuUmV0cnlXYWl0ID4gMCkgew0KPiA+ ID4gPiArICAgICAgZ0JTLT5TdGFsbCAoUHJpdmF0ZS0+UmV0cnlTZXR0aW5nLlJldHJ5V2FpdCk7 DQo+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiArICB9IHdoaWxlIChUUlVFKTsNCj4gPiA+ID4gKw0K PiA+ID4gPiArICAvLw0KPiA+ID4gPiArICAvLyBSZWRmaXNoIHJlc291cmNlIGlzIHVwZGF0ZWQu IEF1dG9tYXRpY2FsbHkgZXhwaXJlIHRoZSBjYWNoZWQgcmVzcG9uc2UNCj4gPiA+ID4gKyAgLy8g c28gYXBwbGljYXRpb24gY2FuIGRpcmVjdGx5IGdldCByZXNvdXJjZSBmcm9tIFJlZGZpc2ggc2Vy dmljZSBhZ2Fpbi4NCj4gPiA+ID4gKyAgLy8NCj4gPiA+ID4gKyAgREVCVUcgKChSRURGSVNIX0hU VFBfQ0FDSEVfREVCVUcsICIlYTogUmVzb3VyY2UgaXMgdXBkYXRlZCwNCj4gZXhwaXJlDQo+ID4g PiBVUkk6ICVzXG4iLCBfX2Z1bmNfXywgVXJpKSk7DQo+ID4gPiA+ICsgIFJlZGZpc2hFeHBpcmVS ZXNwb25zZSAoVGhpcywgVXJpKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+ID4gPiA+ICsgICAgREVCVUdfQ09ERSAoDQo+ID4gPiA+ICsgICAgICBE dW1wUmVkZmlzaFJlc3BvbnNlIChOVUxMLCBERUJVR19FUlJPUiwgUmVzcG9uc2UpOw0KPiA+ID4g PiArICAgICAgKTsNCj4gPiA+ID4gKyAgICAvLw0KPiA+ID4gPiArICAgIC8vIFJlcG9ydCBzdGF0 dXMgY29kZSBmb3IgUmVkZmlzaCBmYWlsdXJlDQo+ID4gPiA+ICsgICAgLy8NCj4gPiA+ID4gKyAg ICBSZXBvcnRIdHRwRXJyb3IgKEh0dHBNZXRob2REZWxldGUsIFVyaSwgUmVzcG9uc2UtPlN0YXR1 c0NvZGUpOw0KPiA+ID4gPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTogZGVsZXRlICVz IGZhaWxlZCAoJWQvJWQpOiAlclxuIiwNCj4gX19mdW5jX18sDQo+ID4gPiBVcmksIFJldHJ5Q291 bnQsIFByaXZhdGUtPlJldHJ5U2V0dGluZy5NYXhpbXVtUmV0cnlEZWxldGUsIFN0YXR1cykpOw0K PiA+ID4gPiArICAgIGdvdG8gT05fUkVMRUFTRTsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ ID4gPiA+ICtPTl9SRUxFQVNFOg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIHJldHVybiBTdGF0dXM7 DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gK0VES0lJX1JFREZJU0hfSFRUUF9QUk9U T0NPTCAgbUVka0lJUmVkZmlzaEh0dHBQcm90b2NvbCA9IHsNCj4gPiA+ID4gKyAgRURLSUlfUkVE RklTSF9IVFRQX1BST1RPQ09MX1JFVklTSU9OLA0KPiA+ID4gPiArICBSZWRmaXNoQ3JlYXRlUmVk ZmlzaFNlcnZpY2UsDQo+ID4gPiA+ICsgIFJlZGZpc2hGcmVlUmVkZmlzaFNlcnZpY2UsDQo+ID4g PiA+ICsgIFJlZGZpc2hKc29uSW5SZWRmaXNoUGF5bG9hZCwNCj4gPiA+ID4gKyAgUmVkZmlzaEdl dFJlc291cmNlLA0KPiA+ID4gPiArICBSZWRmaXNoUGF0Y2hSZXNvdXJjZSwNCj4gPiA+ID4gKyAg UmVkZmlzaFB1dFJlc291cmNlLA0KPiA+ID4gPiArICBSZWRmaXNoUG9zdFJlc291cmNlLA0KPiA+ ID4gPiArICBSZWRmaXNoRGVsZXRlUmVzb3VyY2UsDQo+ID4gPiA+ICsgIFJlZGZpc2hGcmVlUmVx dWVzdCwNCj4gPiA+ID4gKyAgUmVkZmlzaEZyZWVSZXNwb25zZSwNCj4gPiA+ID4gKyAgUmVkZmlz aEV4cGlyZVJlc3BvbnNlDQo+ID4gPiA+ICt9Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4g PiA+ID4gKyAgVW5sb2FkcyBhbiBpbWFnZS4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcGFyYW1b aW5dICBJbWFnZUhhbmRsZSAgICAgICAgIEhhbmRsZSB0aGF0IGlkZW50aWZpZXMgdGhlIGltYWdl IHRvIGJlDQo+ID4gPiB1bmxvYWRlZC4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcmV0dmFsIEVG SV9TVUNDRVNTICAgICAgICAgICAgIFRoZSBpbWFnZSBoYXMgYmVlbiB1bmxvYWRlZC4NCj4gPiA+ ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICBJbWFnZUhhbmRsZSBpcyBub3Qg YSB2YWxpZCBpbWFnZQ0KPiA+ID4gaGFuZGxlLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsqKi8NCj4g PiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ID4gK0VGSUFQSQ0KPiA+ID4gPiArUmVkZmlzaEh0dHBE cml2ZXJVbmxvYWQgKA0KPiA+ID4gPiArICBJTiBFRklfSEFORExFICBJbWFnZUhhbmRsZQ0KPiA+ ID4gPiArICApDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgIGlmIChtUmVkZmlzaEh0dHBDYWNoZVBy aXZhdGUgPT0gTlVMTCkgew0KPiA+ID4gPiArICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiA+ ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIGlmICghSXNMaXN0RW1wdHkgKCZtUmVkZmlz aEh0dHBDYWNoZVByaXZhdGUtPkNhY2hlTGlzdC5IZWFkKSkgew0KPiA+ID4gPiArICAgIFJlbGVh c2VDYWNoZUxpc3QgKCZtUmVkZmlzaEh0dHBDYWNoZVByaXZhdGUtPkNhY2hlTGlzdCk7DQo+ID4g PiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBnQlMtPlVuaW5zdGFsbE11bHRpcGxlUHJv dG9jb2xJbnRlcmZhY2VzICgNCj4gPiA+ID4gKyAgICAgICAgIEltYWdlSGFuZGxlLA0KPiA+ID4g PiArICAgICAgICAgJmdFZGtJSVJlZGZpc2hIdHRwUHJvdG9jb2xHdWlkLA0KPiA+ID4gPiArICAg ICAgICAgJm1SZWRmaXNoSHR0cENhY2hlUHJpdmF0ZS0+UHJvdG9jb2wsDQo+ID4gPiA+ICsgICAg ICAgICBOVUxMDQo+ID4gPiA+ICsgICAgICAgICApOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEZy ZWVQb29sIChtUmVkZmlzaEh0dHBDYWNoZVByaXZhdGUpOw0KPiA+ID4gPiArICBtUmVkZmlzaEh0 dHBDYWNoZVByaXZhdGUgPSBOVUxMOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIHJldHVybiBFRklf U1VDQ0VTUzsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsg IFRoaXMgaXMgYSBFREtJSV9SRURGSVNIX0NSRURFTlRJQUxfUFJPVE9DT0wgbm90aWZpY2F0aW9u IGV2ZW50DQo+IGhhbmRsZXIuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHBhcmFtW2luXSBFdmVu dCAgICBFdmVudCB3aG9zZSBub3RpZmljYXRpb24gZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZC4N Cj4gPiA+ID4gKyAgQHBhcmFtW2luXSBDb250ZXh0ICBQb2ludGVyIHRvIHRoZSBub3RpZmljYXRp b24gZnVuY3Rpb24ncyBjb250ZXh0Lg0KPiA+ID4gPiArDQo+ID4gPiA+ICsqKi8NCj4gPiA+ID4g K1ZPSUQNCj4gPiA+ID4gK0VGSUFQSQ0KPiA+ID4gPiArQ3JlZGVudGlhbFByb3RvY29sSW5zdGFs bGVkICgNCj4gPiA+ID4gKyAgSU4gIEVGSV9FVkVOVCAgRXZlbnQsDQo+ID4gPiA+ICsgIElOICBW T0lEICAgICAgICpDb250ZXh0DQo+ID4gPiA+ICsgICkNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKyAg RUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gPiA+ID4gKyAgUkVERklTSF9I VFRQX0NBQ0hFX1BSSVZBVEUgICpQcml2YXRlOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIFByaXZh dGUgPSAoUkVERklTSF9IVFRQX0NBQ0hFX1BSSVZBVEUgKilDb250ZXh0Ow0KPiA+ID4gPiArICBp ZiAoUHJpdmF0ZS0+U2lnbmF0dXJlICE9IFJFREZJU0hfSFRUUF9EUklWRVJfU0lHTkFUVVJFKSB7 DQo+ID4gPiA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOiBzaWduYXR1cmUgY2hlY2sg ZmFpbHVyZVxuIiwgX19mdW5jX18pKTsNCj4gPiA+ID4gKyAgICByZXR1cm47DQo+ID4gPiA+ICsg IH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAvLw0KPiA+ID4gPiArICAvLyBMb2NhdGUgSElJIGRh dGFiYXNlIHByb3RvY29sLg0KPiA+ID4gPiArICAvLw0KPiA+ID4gPiArICBTdGF0dXMgPSBnQlMt PkxvY2F0ZVByb3RvY29sICgNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICZnRWRrSUlSZWRm aXNoQ3JlZGVudGlhbFByb3RvY29sR3VpZCwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgIE5V TEwsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmUHJpdmF0ZS0+Q3JlZGVu dGlhbFByb3RvY29sDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICApOw0KPiA+ID4gPiArICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiA+ICsgICAgcmV0dXJuOw0KPiA+ID4gPiAr ICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgZ0JTLT5DbG9zZUV2ZW50IChFdmVudCk7DQo+ID4g PiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICBNYWluIGVudHJ5IGZv ciB0aGlzIGRyaXZlci4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcGFyYW1baW5dIEltYWdlSGFu ZGxlICAgICBJbWFnZSBoYW5kbGUgdGhpcyBkcml2ZXIuDQo+ID4gPiA+ICsgIEBwYXJhbVtpbl0g U3lzdGVtVGFibGUgICAgIFBvaW50ZXIgdG8gU3lzdGVtVGFibGUuDQo+ID4gPiA+ICsNCj4gPiA+ ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgVGhpcyBmdW5jdGlvbiBhbHdheXMgY29tcGxl dGUgc3VjY2Vzc2Z1bGx5Lg0KPiA+ID4gPiArDQo+ID4gPiA+ICsqKi8NCj4gPiA+ID4gK0VGSV9T VEFUVVMNCj4gPiA+ID4gK0VGSUFQSQ0KPiA+ID4gPiArUmVkZmlzaEh0dHBFbnRyeVBvaW50ICgN Cj4gPiA+ID4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgSW1hZ2VIYW5kbGUsDQo+ID4gPiA+ICsg IElOIEVGSV9TWVNURU1fVEFCTEUgICpTeXN0ZW1UYWJsZQ0KPiA+ID4gPiArICApDQo+ID4gPiA+ ICt7DQo+ID4gPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiA+ID4gKyAgVk9JRCAgICAg ICAgKlJlZ2lzdHJhdGlvbjsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBpZiAobVJlZGZpc2hIdHRw Q2FjaGVQcml2YXRlICE9IE5VTEwpIHsNCj4gPiA+ID4gKyAgICByZXR1cm4gRUZJX0FMUkVBRFlf U1RBUlRFRDsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIG1SZWRmaXNoSHR0 cENhY2hlUHJpdmF0ZSA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZg0KPiA+ID4gKFJFREZJU0hf SFRUUF9DQUNIRV9QUklWQVRFKSk7DQo+ID4gPiA+ICsgIGlmIChtUmVkZmlzaEh0dHBDYWNoZVBy aXZhdGUgPT0gTlVMTCkgew0KPiA+ID4gPiArICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNF UzsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIC8v IEluaXRpYWwgY2FjaGUgbGlzdCBhbmQgcHJvdG9jb2wgaW5zdGFuY2UuDQo+ID4gPiA+ICsgIC8v DQo+ID4gPiA+ICsgIG1SZWRmaXNoSHR0cENhY2hlUHJpdmF0ZS0+U2lnbmF0dXJlICAgPQ0KPiA+ ID4gUkVERklTSF9IVFRQX0RSSVZFUl9TSUdOQVRVUkU7DQo+ID4gPiA+ICsgIG1SZWRmaXNoSHR0 cENhY2hlUHJpdmF0ZS0+SW1hZ2VIYW5kbGUgPSBJbWFnZUhhbmRsZTsNCj4gPiA+ID4gKyAgQ29w eU1lbSAoJm1SZWRmaXNoSHR0cENhY2hlUHJpdmF0ZS0+UHJvdG9jb2wsDQo+ID4gPiAmbUVka0lJ UmVkZmlzaEh0dHBQcm90b2NvbCwgc2l6ZW9mIChFREtJSV9SRURGSVNIX0hUVFBfUFJPVE9DT0wp KTsNCj4gPiA+ID4gKyAgbVJlZGZpc2hIdHRwQ2FjaGVQcml2YXRlLT5DYWNoZUxpc3QuQ2FwYWNp dHkgPQ0KPiA+ID4gUkVERklTSF9IVFRQX0NBQ0hFX0xJU1RfU0laRTsNCj4gPiA+ID4gKyAgbVJl ZGZpc2hIdHRwQ2FjaGVQcml2YXRlLT5DYWNoZUxpc3QuQ291bnQgICAgPSAweDAwOw0KPiA+ID4g PiArICBtUmVkZmlzaEh0dHBDYWNoZVByaXZhdGUtPkNhY2hlRGlzYWJsZWQgICAgICA9IFBjZEdl dEJvb2wNCj4gPiA+IChQY2RIdHRwQ2FjaGVEaXNhYmxlZCk7DQo+ID4gPiA+ICsgIEluaXRpYWxp emVMaXN0SGVhZCAoJm1SZWRmaXNoSHR0cENhY2hlUHJpdmF0ZS0+Q2FjaGVMaXN0LkhlYWQpOw0K PiA+ID4gPiArDQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIC8vIEdldCByZXRyeSBzZXR0aW5n cw0KPiA+ID4gPiArICAvLw0KPiA+ID4gPiArICBtUmVkZmlzaEh0dHBDYWNoZVByaXZhdGUtPlJl dHJ5U2V0dGluZy5NYXhpbXVtUmV0cnlHZXQgICAgPQ0KPiBQY2RHZXQxNg0KPiA+ID4gKFBjZEh0 dHBHZXRSZXRyeSk7DQo+ID4gPiA+ICsgIG1SZWRmaXNoSHR0cENhY2hlUHJpdmF0ZS0+UmV0cnlT ZXR0aW5nLk1heGltdW1SZXRyeVB1dCAgICA9DQo+IFBjZEdldDE2DQo+ID4gPiAoUGNkSHR0cFB1 dFJldHJ5KTsNCj4gPiA+ID4gKyAgbVJlZGZpc2hIdHRwQ2FjaGVQcml2YXRlLT5SZXRyeVNldHRp bmcuTWF4aW11bVJldHJ5UGF0Y2ggID0NCj4gUGNkR2V0MTYNCj4gPiA+IChQY2RIdHRwUGF0Y2hS ZXRyeSk7DQo+ID4gPiA+ICsgIG1SZWRmaXNoSHR0cENhY2hlUHJpdmF0ZS0+UmV0cnlTZXR0aW5n Lk1heGltdW1SZXRyeVBvc3QgICA9DQo+IFBjZEdldDE2DQo+ID4gPiAoUGNkSHR0cFBvc3RSZXRy eSk7DQo+ID4gPiA+ICsgIG1SZWRmaXNoSHR0cENhY2hlUHJpdmF0ZS0+UmV0cnlTZXR0aW5nLk1h eGltdW1SZXRyeURlbGV0ZSA9DQo+IFBjZEdldDE2DQo+ID4gPiAoUGNkSHR0cERlbGV0ZVJldHJ5 KTsNCj4gPiA+ID4gKyAgbVJlZGZpc2hIdHRwQ2FjaGVQcml2YXRlLT5SZXRyeVNldHRpbmcuUmV0 cnlXYWl0ICAgICAgICAgID0gUGNkR2V0MTYNCj4gPiA+IChQY2RIdHRwUmV0cnlXYWl0SW5TZWNv bmQpICogMTAwMDAwMFU7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgLy8NCj4gPiA+ID4gKyAgLy8g SW5zdGFsbCB0aGUgZ0Vka0lJUmVkZmlzaEh0dHBQcm90b2NvbEd1aWQgb250byBIYW5kbGUuDQo+ ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIFN0YXR1cyA9IGdCUy0+SW5zdGFsbE11bHRpcGxlUHJv dG9jb2xJbnRlcmZhY2VzICgNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICZtUmVkZmlzaEh0 dHBDYWNoZVByaXZhdGUtPkltYWdlSGFuZGxlLA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAg JmdFZGtJSVJlZGZpc2hIdHRwUHJvdG9jb2xHdWlkLA0KPiA+ID4gPiArICAgICAgICAgICAgICAg ICAgJm1SZWRmaXNoSHR0cENhY2hlUHJpdmF0ZS0+UHJvdG9jb2wsDQo+ID4gPiA+ICsgICAgICAg ICAgICAgICAgICBOVUxMDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICApOw0KPiA+ID4gPiAr ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiA+ICsgICAgREVCVUcgKChERUJVR19F UlJPUiwgIiVhOiBjYW5ub3QgaW5zdGFsbCBSZWRmaXNoIGh0dHAgcHJvdG9jb2w6DQo+ICVyXG4i LA0KPiA+ID4gX19mdW5jX18sIFN0YXR1cykpOw0KPiA+ID4gPiArICAgIFJlZGZpc2hIdHRwRHJp dmVyVW5sb2FkIChJbWFnZUhhbmRsZSk7DQo+ID4gPiA+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4g PiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIC8vIEluc3Rh bGwgcHJvdG9jb2wgbm90aWZpY2F0aW9uIGlmIGNyZWRlbnRpYWwgcHJvdG9jb2wgaXMgaW5zdGFs bGVkLg0KPiA+ID4gPiArICAvLw0KPiA+ID4gPiArICBtUmVkZmlzaEh0dHBDYWNoZVByaXZhdGUt Pk5vdGlmeUV2ZW50ID0gRWZpQ3JlYXRlUHJvdG9jb2xOb3RpZnlFdmVudCAoDQo+ID4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnRWRrSUlSZWRmaXNo Q3JlZGVudGlhbFByb3RvY29sR3VpZCwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVFBMX0NBTExCQUNLLA0KPiA+ID4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDcmVkZW50aWFsUHJvdG9jb2xJbnN0YWxs ZWQsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG1SZWRmaXNoSHR0cENhY2hlUHJpdmF0ZSwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJlJlZ2lzdHJhdGlvbg0KPiA+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiA+ID4gPiArICBpZiAobVJl ZGZpc2hIdHRwQ2FjaGVQcml2YXRlLT5Ob3RpZnlFdmVudCA9PSBOVUxMKSB7DQo+ID4gPiA+ICsg ICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOiBmYWlsZWQgdG8gY3JlYXRlIHByb3RvY29sIG5v dGlmaWNhdGlvbiBmb3INCj4gPiA+IGdFZGtJSVJlZGZpc2hDcmVkZW50aWFsUHJvdG9jb2xHdWlk XG4iLCBfX2Z1bmNfXykpOw0KPiA+ID4gPiArICAgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ID4gPiAr ICAgIFJlZGZpc2hIdHRwRHJpdmVyVW5sb2FkIChJbWFnZUhhbmRsZSk7DQo+ID4gPiA+ICsgICAg cmV0dXJuIFN0YXR1czsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIHJldHVy biBFRklfU1VDQ0VTUzsNCj4gPiA+ID4gK30NCj4gPiA+ID4gZGlmZiAtLWdpdCBhL1JlZGZpc2hQ a2cvUmVkZmlzaEh0dHBEeGUvUmVkZmlzaEh0dHBPcGVyYXRpb24uYw0KPiA+ID4gYi9SZWRmaXNo UGtnL1JlZGZpc2hIdHRwRHhlL1JlZGZpc2hIdHRwT3BlcmF0aW9uLmMNCj4gPiA+ID4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gPiA+ID4gaW5kZXggMDAwMDAwMDAwMC4uNTY1MjgxOGQxNg0KPiA+ ID4gPiAtLS0gL2Rldi9udWxsDQo+ID4gPiA+ICsrKyBiL1JlZGZpc2hQa2cvUmVkZmlzaEh0dHBE eGUvUmVkZmlzaEh0dHBPcGVyYXRpb24uYw0KPiA+ID4gPiBAQCAtMCwwICsxLDY5MyBAQA0KPiA+ ID4gPiArLyoqIEBmaWxlDQo+ID4gPiA+ICsgIFJlZGZpc2hIdHRwT3BlcmF0aW9uIGhhbmRsZXMg SFRUUCBvcGVyYXRpb25zLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIENvcHlyaWdodCAoYykgMjAy NCwgTlZJRElBIENPUlBPUkFUSU9OICYgQUZGSUxJQVRFUy4gQWxsIHJpZ2h0cw0KPiByZXNlcnZl ZC4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTIt Q2xhdXNlLVBhdGVudA0KPiA+ID4gPiArDQo+ID4gPiA+ICsqKi8NCj4gPiA+ID4gKw0KPiA+ID4g PiArI2luY2x1ZGUgIlJlZGZpc2hIdHRwT3BlcmF0aW9uLmgiDQo+ID4gPiA+ICsjaW5jbHVkZSAi UmVkZmlzaEh0dHBEYXRhLmgiDQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICBU aGlzIGZ1bmN0aW9uIGNvcGllcyBhbGwgaGVhZGVycyBpbiBTcmNIZWFkZXJzIHRvIERzdEhlYWRl cnMuDQo+ID4gPiA+ICsgIEl0J3MgY2FsbCByZXNwb25zaWJpbGl0eSB0byByZWxlYXNlIHJldHVy bmVkIERzdEhlYWRlcnMuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHBhcmFtW2luXSAgU3JjSGVh ZGVycyAgICAgIFNvdXJjZSBoZWFkZXJzLg0KPiA+ID4gPiArICBAcGFyYW1baW5dICBTcmNIZWFk ZXJDb3VudCAgTnVtYmVyIG9mIGhlYWRlciBpbiBzb3VyY2UgaGVhZGVycy4NCj4gPiA+ID4gKyAg QHBhcmFtW291dF0gRHN0SGVhZGVycyAgICAgIERlc3RpbmF0aW9uIGhlYWRlcnMuDQo+ID4gPiA+ ICsgIEBwYXJhbVtvdXRdIERzdEhlYWRlckNvdW50ICBOdW1iZXIgb2YgaGVhZGVyIGluIGRlc2ln bmF0aW9uDQo+IGhlYWRlcnMuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHJldHZhbCAgICAgRUZJ X1NVQ0NFU1MgICAgIEhlYWRlcnMgYXJlIGNvcGllZCBzdWNjZXNzZnVsbHkuDQo+ID4gPiA+ICsg IEByZXR2YWwgICAgIE90aGVycyAgICAgICAgICBFcnJvcnMgb2NjdXIuDQo+ID4gPiA+ICsNCj4g PiA+ID4gKyoqLw0KPiA+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gPiArQ29weUh0dHBIZWFkZXJz ICgNCj4gPiA+ID4gKyAgSU4gIEVGSV9IVFRQX0hFQURFUiAgKlNyY0hlYWRlcnMsDQo+ID4gPiA+ ICsgIElOICBVSU5UTiAgICAgICAgICAgIFNyY0hlYWRlckNvdW50LA0KPiA+ID4gPiArICBPVVQg RUZJX0hUVFBfSEVBREVSICAqKkRzdEhlYWRlcnMsDQo+ID4gPiA+ICsgIE9VVCBVSU5UTiAgICAg ICAgICAgICpEc3RIZWFkZXJDb3VudA0KPiA+ID4gPiArICApDQo+ID4gPiA+ICt7DQo+ID4gPiA+ ICsgIFVJTlROICBJbmRleDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBpZiAoKFNyY0hlYWRlcnMg PT0gTlVMTCkgfHwgKFNyY0hlYWRlckNvdW50ID09IDApIHx8IChEc3RIZWFkZXJzID09DQo+IE5V TEwpDQo+ID4gPiB8fCAoRHN0SGVhZGVyQ291bnQgPT0gTlVMTCkpIHsNCj4gPiA+ID4gKyAgICBy ZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4g PiA+ID4gKyAgKkRzdEhlYWRlckNvdW50ID0gMDsNCj4gPiA+ID4gKyAgKkRzdEhlYWRlcnMgICAg ID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChFRklfSFRUUF9IRUFERVIpICoNCj4gPiA+IFNy Y0hlYWRlckNvdW50KTsNCj4gPiA+ID4gKyAgaWYgKCpEc3RIZWFkZXJzID09IE5VTEwpIHsNCj4g PiA+ID4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gPiA+ICsgIH0NCj4g PiA+ID4gKw0KPiA+ID4gPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBTcmNIZWFkZXJDb3Vu dDsgSW5kZXgrKykgew0KPiA+ID4gPiArICAgICgqRHN0SGVhZGVycylbSW5kZXhdLkZpZWxkTmFt ZSA9IEFsbG9jYXRlQ29weVBvb2wgKEFzY2lpU3RyU2l6ZQ0KPiA+ID4gKFNyY0hlYWRlcnNbSW5k ZXhdLkZpZWxkTmFtZSksIFNyY0hlYWRlcnNbSW5kZXhdLkZpZWxkTmFtZSk7DQo+ID4gPiA+ICsg ICAgaWYgKCgqRHN0SGVhZGVycylbSW5kZXhdLkZpZWxkTmFtZSA9PSBOVUxMKSB7DQo+ID4gPiA+ ICsgICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gPiA+ICsgICAgfQ0KPiA+ ID4gPiArDQo+ID4gPiA+ICsgICAgKCpEc3RIZWFkZXJzKVtJbmRleF0uRmllbGRWYWx1ZSA9IEFs bG9jYXRlQ29weVBvb2wgKEFzY2lpU3RyU2l6ZQ0KPiA+ID4gKFNyY0hlYWRlcnNbSW5kZXhdLkZp ZWxkVmFsdWUpLCBTcmNIZWFkZXJzW0luZGV4XS5GaWVsZFZhbHVlKTsNCj4gPiA+ID4gKyAgICBp ZiAoKCpEc3RIZWFkZXJzKVtJbmRleF0uRmllbGRWYWx1ZSA9PSBOVUxMKSB7DQo+ID4gPiA+ICsg ICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gPg0KPiA+ID4NCj4gPiA+DQo+ ID4gPiBMb29rcyBsaWtlIG9yZXZpb3VzIGFsbG9jYXRpb25zIGxlYWtlZC4NCj4gPiA+IERpZG4n dCB5b3UgdGhpbmsgdG8gaW1wbGVtZW50IHNtdGggbGlrZSB0aGlzDQo+ID4gPg0KPiBodHRwczov L2dpdGh1Yi5jby8NCj4gJTJGJmRhdGE9MDUlN0MwMiU3Q25pY2tsZXclNDBudmlkaWEuY29tJTdD YjgyMjAzYzJkNjEyNDA2MDg1MDMwOGQNCj4gYzM0ODk0MDIwJTdDNDMwODNkMTU3MjczNDBjMWI3 ZGIzOWVmZDljY2MxN2ElN0MwJTdDMCU3QzYzODQ0MzAxMQ0KPiAzNTA5NTYyNDUlN0NVbmtub3du JTdDVFdGcGJHWnNiM2Q4ZXlKV0lqb2lNQzR3TGpBd01EQWlMQ0pRSWpvaVYyDQo+IGx1TXpJaUxD SkJUaUk2SWsxaGFXd2lMQ0pYVkNJNk1uMCUzRCU3QzAlN0MlN0MlN0Mmc2RhdGE9ajdvekE4S1hn Wg0KPiBMcFUxSG9FMHhzV3VhN056eng2NkJxZEEwUUdhcjF4cUElM0QmcmVzZXJ2ZWQ9MA0KPiA+ ID4NCj4gbSUyRnRpYW5vY29yZSUyRmVkazIlMkZibG9iJTJGbWFzdGVyJTJGT3ZtZlBrZyUyRlhl bkJ1c0R4ZSUyRkhlbHANCj4gPiA+DQo+IGVycy5jJTIzTDQmZGF0YT0wNSU3QzAyJTdDbmlja2xl dyU0MG52aWRpYS5jb20lN0NmNjU5YzU0YzNlZGI0MzUyN2MNCj4gPiA+DQo+IDM2MDhkYzM0NjJh YjJhJTdDNDMwODNkMTU3MjczNDBjMWI3ZGIzOWVmZDljY2MxN2ElN0MwJTdDMCU3QzYzODQNCj4g PiA+DQo+IDQyODQ1NjAxMDU5NzE5JTdDVW5rbm93biU3Q1RXRnBiR1pzYjNkOGV5SldJam9pTUM0 d0xqQXdNREFpTENKDQo+ID4gPg0KPiBRSWpvaVYybHVNeklpTENKQlRpSTZJazFoYVd3aUxDSlhW Q0k2TW4wJTNEJTdDMCU3QyU3QyU3QyZzZGF0YT1vWXYNCj4gPiA+IFhrZmpPcGFrTU9YVjF3Nm5Z VnBoRFJ1UE03UjczbHFyOFFWcWglMkJJNCUzRCZyZXNlcnZlZD0wID8NCj4gPiA+DQo+ID4gPg0K PiA+ID4gPiArICAgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICpEc3RIZWFkZXJDb3VudCAr PSAxOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgcmV0dXJuIEVGSV9TVUND RVNTOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAgVGhp cyBmdW5jdGlvbiBmcmVlIHJlc291cmNlcyBpbiBSZXF1ZXN0LiBSZXF1ZXN0IGlzIG5vIGxvbmdl ciBhdmFpbGFibGUNCj4gPiA+ID4gKyAgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHN1Y2Nl c3NmdWxseS4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcGFyYW1baW5dICBSZXF1ZXN0ICAgICAg SFRUUCByZXF1ZXN0IHRvIGJlIHJlbGVhc2VkLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEByZXR2 YWwgICAgIEVGSV9TVUNDRVNTICAgICBSZXNyb3VjZSBpcyByZWxlYXNlZCBzdWNjZXNzZnVsbHku DQo+ID4gPiA+ICsgIEByZXR2YWwgICAgIE90aGVycyAgICAgICAgICBFcnJvcnMgb2NjdXIuDQo+ ID4gPiA+ICsNCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gPiArUmVs ZWFzZVJlZGZpc2hSZXF1ZXN0ICgNCj4gPiA+ID4gKyAgSU4gIFJFREZJU0hfUkVRVUVTVCAgKlJl cXVlc3QNCj4gPiA+ID4gKyAgKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArICBpZiAoUmVxdWVzdCA9 PSBOVUxMKSB7DQo+ID4gPiA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4g PiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIGlmICgoUmVxdWVzdC0+SGVhZGVycyAh PSBOVUxMKSAmJiAoUmVxdWVzdC0+SGVhZGVyQ291bnQgPiAwKSkgew0KPiA+ID4gPiArICAgIEh0 dHBGcmVlSGVhZGVyRmllbGRzIChSZXF1ZXN0LT5IZWFkZXJzLCBSZXF1ZXN0LT5IZWFkZXJDb3Vu dCk7DQo+ID4gPiA+ICsgICAgUmVxdWVzdC0+SGVhZGVycyAgICAgPSBOVUxMOw0KPiA+ID4gPiAr ICAgIFJlcXVlc3QtPkhlYWRlckNvdW50ID0gMDsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ ID4gPiA+ICsgIGlmIChSZXF1ZXN0LT5Db250ZW50ICE9IE5VTEwpIHsNCj4gPiA+ID4gKyAgICBG cmVlUG9vbCAoUmVxdWVzdC0+Q29udGVudCk7DQo+ID4gPiA+ICsgICAgUmVxdWVzdC0+Q29udGVu dCA9IE5VTEw7DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBpZiAoUmVxdWVz dC0+Q29udGVudFR5cGUgIT0gTlVMTCkgew0KPiA+ID4gPiArICAgIEZyZWVQb29sIChSZXF1ZXN0 LT5Db250ZW50VHlwZSk7DQo+ID4gPiA+ICsgICAgUmVxdWVzdC0+Q29udGVudFR5cGUgPSBOVUxM Ow0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgUmVxdWVzdC0+Q29udGVudExl bmd0aCA9IDA7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAgVGhpcyBmdW5jdGlv biBmcmVlIHJlc291cmNlcyBpbiBnaXZlbiBSZXNwb25zZS4NCj4gPiA+ID4gKw0KPiA+ID4gPiAr ICBAcGFyYW1baW5dICBSZXNwb25zZSAgICAgSFRUUCByZXNwb25zZSB0byBiZSByZWxlYXNlZC4N Cj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcmV0dmFsICAgICBFRklfU1VDQ0VTUyAgICAgUmVzcm91 Y2UgaXMgcmVsZWFzZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ID4gPiArICBAcmV0dmFsICAgICBPdGhl cnMgICAgICAgICAgRXJyb3JzIG9jY3VyLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsqKi8NCj4gPiA+ ID4gK0VGSV9TVEFUVVMNCj4gPiA+ID4gK1JlbGVhc2VSZWRmaXNoUmVzcG9uc2UgKA0KPiA+ID4g PiArICBJTiAgUkVERklTSF9SRVNQT05TRSAgKlJlc3BvbnNlDQo+ID4gPiA+ICsgICkNCj4gPiA+ ID4gK3sNCj4gPiA+ID4gKyAgaWYgKFJlc3BvbnNlID09IE5VTEwpIHsNCj4gPiA+ID4gKyAgICBy ZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4g PiA+ID4gKyAgaWYgKChSZXNwb25zZS0+SGVhZGVycyAhPSBOVUxMKSAmJiAoUmVzcG9uc2UtPkhl YWRlckNvdW50ID4gMCkpIHsNCj4gPiA+ID4gKyAgICBIdHRwRnJlZUhlYWRlckZpZWxkcyAoUmVz cG9uc2UtPkhlYWRlcnMsIFJlc3BvbnNlLT5IZWFkZXJDb3VudCk7DQo+ID4gPiA+ICsgICAgUmVz cG9uc2UtPkhlYWRlcnMgICAgID0gTlVMTDsNCj4gPiA+ID4gKyAgICBSZXNwb25zZS0+SGVhZGVy Q291bnQgPSAwOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgaWYgKFJlc3Bv bnNlLT5QYXlsb2FkICE9IE5VTEwpIHsNCj4gPiA+ID4gKyAgICBSZWxlYXNlUmVkZmlzaFBheWxv YWQgKFJlc3BvbnNlLT5QYXlsb2FkKTsNCj4gPiA+ID4gKyAgICBSZXNwb25zZS0+UGF5bG9hZCA9 IE5VTEw7DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBpZiAoUmVzcG9uc2Ut PlN0YXR1c0NvZGUgIT0gTlVMTCkgew0KPiA+ID4gPiArICAgIEZyZWVQb29sIChSZXNwb25zZS0+ U3RhdHVzQ29kZSk7DQo+ID4gPiA+ICsgICAgUmVzcG9uc2UtPlN0YXR1c0NvZGUgPSBOVUxMOw0K PiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0K PiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAgVGhpcyBmdW5j dGlvbiBmcmVlIHJlc291cmNlcyBpbiBnaXZlbiBIVFRQIG1lc3NhZ2UuDQo+ID4gPiA+ICsNCj4g PiA+ID4gKyAgQHBhcmFtW2luXSAgSHR0cE1lc3NhZ2UgICAgIEhUVFAgbWVzc2FnZSB0byBiZSBy ZWxlYXNlZC4NCj4gPiA+ID4gKyAgQHBhcmFtW2luXSAgSXNSZXF1ZXN0ICAgICAgIFRSVUUgaWYg dGhpcyBpcyByZXF1ZXN0IHR5cGUgb2YgSFRUUCBtZXNzYWdlLg0KPiA+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRkFMU0UgaWYgdGhpcyBpcyByZXNwb25zZSB0eXBlIG9mIEhU VFAgbWVzc2FnZS4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcmV0dmFsICAgICBFRklfU1VDQ0VT UyAgICAgUmVzcm91Y2UgaXMgcmVsZWFzZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ID4gPiArICBAcmV0 dmFsICAgICBPdGhlcnMgICAgICAgICAgRXJyb3JzIG9jY3VyLg0KPiA+ID4gPiArDQo+ID4gPiA+ ICsqKi8NCj4gPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ID4gK1JlbGVhc2VIdHRwTWVzc2FnZSAo DQo+ID4gPiA+ICsgIElOICBFRklfSFRUUF9NRVNTQUdFICAqSHR0cE1lc3NhZ2UsDQo+ID4gPiA+ ICsgIElOICBCT09MRUFOICAgICAgICAgICBJc1JlcXVlc3QNCj4gPiA+ID4gKyAgKQ0KPiA+ID4g PiArew0KPiA+ID4gPiArICBpZiAoSHR0cE1lc3NhZ2UgPT0gTlVMTCkgew0KPiA+ID4gPiArICAg IHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0K PiA+ID4gPiArICBpZiAoSXNSZXF1ZXN0KSB7DQo+ID4gPiA+ICsgICAgaWYgKEh0dHBNZXNzYWdl LT5EYXRhLlJlcXVlc3QgIT0gTlVMTCkgew0KPiA+ID4gPiArICAgICAgaWYgKEh0dHBNZXNzYWdl LT5EYXRhLlJlcXVlc3QtPlVybCAhPSBOVUxMKSB7DQo+ID4gPiA+ICsgICAgICAgIEZyZWVQb29s IChIdHRwTWVzc2FnZS0+RGF0YS5SZXF1ZXN0LT5VcmwpOw0KPiA+ID4gPiArICAgICAgfQ0KPiA+ ID4gPiArDQo+ID4gPiA+ICsgICAgICBGcmVlUG9vbCAoSHR0cE1lc3NhZ2UtPkRhdGEuUmVxdWVz dCk7DQo+ID4gPiA+ICsgICAgICBIdHRwTWVzc2FnZS0+RGF0YS5SZXF1ZXN0ID0gTlVMTDsNCj4g PiA+ID4gKyAgICB9DQo+ID4gPiA+ICsgIH0gZWxzZSB7DQo+ID4gPiA+ICsgICAgaWYgKEh0dHBN ZXNzYWdlLT5EYXRhLlJlc3BvbnNlICE9IE5VTEwpIHsNCj4gPiA+ID4gKyAgICAgIEZyZWVQb29s IChIdHRwTWVzc2FnZS0+RGF0YS5SZXNwb25zZSk7DQo+ID4gPiA+ICsgICAgICBIdHRwTWVzc2Fn ZS0+RGF0YS5SZXNwb25zZSA9IE5VTEw7DQo+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiArICB9DQo+ ID4gPiA+ICsNCj4gPiA+ID4gKyAgaWYgKEh0dHBNZXNzYWdlLT5Cb2R5ICE9IE5VTEwpIHsNCj4g PiA+ID4gKyAgICBGcmVlUG9vbCAoSHR0cE1lc3NhZ2UtPkJvZHkpOw0KPiA+ID4gPiArICAgIEh0 dHBNZXNzYWdlLT5Cb2R5ID0gTlVMTDsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ ICsgIGlmIChIdHRwTWVzc2FnZS0+SGVhZGVycyAhPSBOVUxMKSB7DQo+ID4gPiA+ICsgICAgSHR0 cEZyZWVIZWFkZXJGaWVsZHMgKEh0dHBNZXNzYWdlLT5IZWFkZXJzLCBIdHRwTWVzc2FnZS0NCj4g PiA+ID5IZWFkZXJDb3VudCk7DQo+ID4gPiA+ICsgICAgSHR0cE1lc3NhZ2UtPkhlYWRlcnMgICAg ID0gTlVMTDsNCj4gPiA+ID4gKyAgICBIdHRwTWVzc2FnZS0+SGVhZGVyQ291bnQgPSAwOw0KPiA+ ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAgVGhpcyBmdW5jdGlv biBidWlsZCBSZWRmaXNoIG1lc3NhZ2UgZm9yIHNlbmRpbmcgZGF0YSB0byBSZWRmaXNoIHNlcnZp Y2UuDQo+ID4gPiA+ICsgIEl0J3MgY2FsbCByZXNwb25zaWJpbGl0eSB0byBwcm9wZXJseSByZWxl YXNlIHJldHVybmVkIEhUVFAgbWVzc2FnZSBieQ0KPiA+ID4gPiArICBjYWxsaW5nIFJlbGVhc2VI dHRwTWVzc2FnZS4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcGFyYW1baW5dICAgU2VydmljZVBy aXZhdGUgICAgUG9pbnRlciB0byBSZWRmaXNoIHNlcnZpY2UgcHJpdmF0ZSBkYXRhLg0KPiA+ID4g PiArICBAcGFyYW1baW5dICAgVXJpICAgICAgICAgICAgICAgUmVkZmlzaCBzZXJ2aWNlIFVSSS4N Cj4gPiA+ID4gKyAgQHBhcmFtW2luXSAgIE1ldGhvZCAgICAgICAgICAgIEhUVFAgbWV0aG9kLg0K PiA+ID4gPiArICBAcGFyYW1baW5dICAgUmVxdWVzdCAgICAgICAgICAgQWRkaXRpb25hbCBkYXRh IHRvIHNlbmQgdG8gUmVkZmlzaCBzZXJ2aWNlLg0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVGhpcyBpcyBvcHRpb25hbC4NCj4gPiA+ID4gKyAgQHBhcmFtW2luXSAg IENvbnRlbnRFbmNvZGluZyAgIENvbnRlbnQgZW5jb2RpbmcgbWV0aG9kIHRvIGNvbXByZXNzDQo+ IEhUVFANCj4gPiA+IGNvbnRleHQuDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBUaGlzIGlzIG9wdGlvbmFsLiBXaGVuIENvbnRlbnRFbmNvZGluZyBpcyBOVUxMLA0K PiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gY29tcHJlc3MgbWV0 aG9kIHdpbGwgYmUgcGVyZm9ybWVkLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEByZXR2YWwgICAg IEVGSV9IVFRQX01FU1NBR0UgKiAgIFBvaW50ZXIgdG8gbmV3bHkgY3JlYXRlZCBIVFRQDQo+IG1l c3NhZ2UuDQo+ID4gPiA+ICsgIEByZXR2YWwgICAgIE5VTEwgICAgICAgICAgICAgICAgIEVycm9y IG9jY3VycmVkLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsqKi8NCj4gPiA+ID4gK0VGSV9IVFRQX01F U1NBR0UgKg0KPiA+ID4gPiArQnVpbGRSZXF1ZXN0TWVzc2FnZSAoDQo+ID4gPiA+ICsgIElOIFJF REZJU0hfU0VSVklDRV9QUklWQVRFICAqU2VydmljZVByaXZhdGUsDQo+ID4gPiA+ICsgIElOIEVG SV9TVFJJTkcgICAgICAgICAgICAgICBVcmksDQo+ID4gPiA+ICsgIElOIEVGSV9IVFRQX01FVEhP RCAgICAgICAgICBNZXRob2QsDQo+ID4gPiA+ICsgIElOIFJFREZJU0hfUkVRVUVTVCAgICAgICAg ICAqUmVxdWVzdCBPUFRJT05BTCwNCj4gPiA+ID4gKyAgSU4gQ0hBUjggICAgICAgICAgICAgICAg ICAgICpDb250ZW50RW5jb2RpbmcgT1BUSU9OQUwNCj4gPiA+ID4gKyAgKQ0KPiA+ID4gPiArew0K PiA+ID4gPiArICBFRklfU1RBVFVTICAgICAgICAgICAgIFN0YXR1czsNCj4gPiA+ID4gKyAgRUZJ X1NUUklORyAgICAgICAgICAgICBVcmw7DQo+ID4gPiA+ICsgIFVJTlROICAgICAgICAgICAgICAg ICAgVXJsU2l6ZTsNCj4gPiA+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICBJbmRleDsNCj4g PiA+ID4gKyAgRUZJX0hUVFBfTUVTU0FHRSAgICAgICAqUmVxdWVzdE1zZzsNCj4gPiA+ID4gKyAg RUZJX0hUVFBfUkVRVUVTVF9EQVRBICAqUmVxdWVzdERhdGE7DQo+ID4gPiA+ICsgIFVJTlROICAg ICAgICAgICAgICAgICAgSGVhZGVyQ291bnQ7DQo+ID4gPiA+ICsgIFVJTlROICAgICAgICAgICAg ICAgICAgSGVhZGVySW5kZXg7DQo+ID4gPiA+ICsgIEVGSV9IVFRQX0hFQURFUiAgICAgICAgKkhl YWRlcnM7DQo+ID4gPiA+ICsgIENIQVI4ICAgICAgICAgICAgICAgICAgQ29udGVudExlbmd0aFN0 cltSRURGSVNIX0NPTlRFTlRfTEVOR1RIX1NJWkVdOw0KPiA+ID4gPiArICBWT0lEICAgICAgICAg ICAgICAgICAgICpDb250ZW50Ow0KPiA+ID4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgIENv bnRlbnRMZW5ndGg7DQo+ID4gPiA+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgSGFzQ29udGVu dDsNCj4gPiA+ID4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICBEb0NvbnRlbnRFbmNvZGluZzsN Cj4gPiA+ID4gKw0KPiA+ID4gPiArICBSZXF1ZXN0TXNnICAgICAgICA9IE5VTEw7DQo+ID4gPiA+ ICsgIFJlcXVlc3REYXRhICAgICAgID0gTlVMTDsNCj4gPiA+ID4gKyAgVXJsICAgICAgICAgICAg ICAgPSBOVUxMOw0KPiA+ID4gPiArICBVcmxTaXplICAgICAgICAgICA9IDA7DQo+ID4gPiA+ICsg IENvbnRlbnQgICAgICAgICAgID0gTlVMTDsNCj4gPiA+ID4gKyAgQ29udGVudExlbmd0aCAgICAg PSAwOw0KPiA+ID4gPiArICBIZWFkZXJDb3VudCAgICAgICA9IFJFREZJU0hfQ09NTU9OX0hFQURF Ul9TSVpFOw0KPiA+ID4gPiArICBIZWFkZXJJbmRleCAgICAgICA9IDA7DQo+ID4gPiA+ICsgIEhl YWRlcnMgICAgICAgICAgID0gTlVMTDsNCj4gPiA+ID4gKyAgSGFzQ29udGVudCAgICAgICAgPSBG QUxTRTsNCj4gPiA+ID4gKyAgRG9Db250ZW50RW5jb2RpbmcgPSBGQUxTRTsNCj4gPiA+ID4gKw0K PiA+ID4gPiArICBpZiAoKFNlcnZpY2VQcml2YXRlID09IE5VTEwpIHx8IChJU19FTVBUWV9TVFJJ TkcgKFVyaSkpKSB7DQo+ID4gPiA+ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4gPiA+ICsgIH0NCj4g PiA+ID4gKw0KPiA+ID4gPiArICBpZiAoTWV0aG9kID49IEh0dHBNZXRob2RNYXgpIHsNCj4gPiA+ ID4gKyAgICByZXR1cm4gTlVMTDsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsg IERFQlVHICgoUkVERklTSF9IVFRQX0NBQ0hFX0RFQlVHX1JFUVVFU1QsICIlYTogJXNcbiIsDQo+ IF9fZnVuY19fLA0KPiA+ID4gVXJpKSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgLy8NCj4gPiA+ ID4gKyAgLy8gQnVpbGQgZnVsbCBVUkwgZm9yIEhUVFAgcXVlcnkuDQo+ID4gPiA+ICsgIC8vDQo+ ID4gPiA+ICsgIFVybFNpemUgPSAoQXNjaWlTdHJMZW4gKFNlcnZpY2VQcml2YXRlLT5Ib3N0KSAr IFN0ckxlbiAoVXJpKSArIDEpICogc2l6ZW9mDQo+ID4gPiAoQ0hBUjE2KTsNCj4gPiA+ID4gKyAg VXJsICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKFVybFNpemUpOw0KPiA+ID4gPiArICBpZiAoVXJs ID09IE5VTEwpIHsNCj4gPiA+ID4gKyAgICByZXR1cm4gTlVMTDsNCj4gPiA+ID4gKyAgfQ0KPiA+ ID4gPiArDQo+ID4gPiA+ICsgIFVuaWNvZGVTUHJpbnQgKFVybCwgVXJsU2l6ZSwgTCIlYSVzIiwg U2VydmljZVByaXZhdGUtPkhvc3QsIFVyaSk7DQo+ID4gPiA+ICsgIERFQlVHICgoUkVERklTSF9I VFRQX0NBQ0hFX0RFQlVHX1JFUVVFU1QsICIlYTogVXJsOiAlc1xuIiwNCj4gPiA+IF9fZnVuY19f LCBVcmwpKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAvLw0KPiA+ID4gPiArICAvLyBTdGVwIDE6 IGJ1aWxkIHRoZSBIVFRQIGhlYWRlcnMuDQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIGlmICgh SVNfRU1QVFlfU1RSSU5HIChTZXJ2aWNlUHJpdmF0ZS0+U2Vzc2lvblRva2VuKQ0KPiB8fCAhSVNf RU1QVFlfU1RSSU5HDQo+ID4gPiAoU2VydmljZVByaXZhdGUtPkJhc2ljQXV0aCkpIHsNCj4gPiA+ ID4gKyAgICBIZWFkZXJDb3VudCsrOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4g KyAgaWYgKChSZXF1ZXN0ICE9IE5VTEwpICYmIChSZXF1ZXN0LT5IZWFkZXJDb3VudCA+IDApKSB7 DQo+ID4gPiA+ICsgICAgSGVhZGVyQ291bnQgKz0gUmVxdWVzdC0+SGVhZGVyQ291bnQ7DQo+ID4g PiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAvLw0KPiA+ID4gPiArICAvLyBDaGVjayBh bmQgc2VlIGlmIHdlIHdpbGwgZG8gY29udGVudCBlbmNvZGluZyBvciBub3QNCj4gPiA+ID4gKyAg Ly8NCj4gPiA+ID4gKyAgaWYgKCFJU19FTVBUWV9TVFJJTkcgKENvbnRlbnRFbmNvZGluZykpIHsN Cj4gPiA+ID4gKyAgICBpZiAoQXNjaWlTdHJDbXAgKENvbnRlbnRFbmNvZGluZywNCj4gPiA+IFJF REZJU0hfSFRUUF9DT05URU5UX0VOQ09ESU5HX05PTkUpICE9IDApIHsNCj4gPiA+ID4gKyAgICAg IERvQ29udGVudEVuY29kaW5nID0gVFJVRTsNCj4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ICsgIH0N Cj4gPiA+ID4gKw0KPiA+ID4gPiArICBpZiAoKFJlcXVlc3QgIT0gTlVMTCkgJiYgIUlTX0VNUFRZ X1NUUklORyAoUmVxdWVzdC0+Q29udGVudCkpIHsNCj4gPiA+ID4gKyAgICBIZWFkZXJDb3VudCAr PSAyOw0KPiA+ID4gPiArICAgIEhhc0NvbnRlbnQgICA9IFRSVUU7DQo+ID4gPiA+ICsgICAgaWYg KERvQ29udGVudEVuY29kaW5nKSB7DQo+ID4gPiA+ICsgICAgICBIZWFkZXJDb3VudCArPSAxOw0K PiA+ID4gPiArICAgIH0NCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEhlYWRl cnMgPSBBbGxvY2F0ZVplcm9Qb29sIChIZWFkZXJDb3VudCAqIHNpemVvZiAoRUZJX0hUVFBfSEVB REVSKSk7DQo+ID4gPiA+ICsgIGlmIChIZWFkZXJzID09IE5VTEwpIHsNCj4gPiA+ID4gKyAgICBn b3RvIE9OX0VSUk9SOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgaWYgKCFJ U19FTVBUWV9TVFJJTkcgKFNlcnZpY2VQcml2YXRlLT5TZXNzaW9uVG9rZW4pKSB7DQo+ID4gPiA+ ICsgICAgU3RhdHVzID0gSHR0cFNldEZpZWxkTmFtZUFuZFZhbHVlICgmSGVhZGVyc1tIZWFkZXJJ bmRleCsrXSwNCj4gPiA+IEhUVFBfSEVBREVSX1hfQVVUSF9UT0tFTiwgU2VydmljZVByaXZhdGUt PlNlc3Npb25Ub2tlbik7DQo+ID4gPiA+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiA+ID4gPiArICAgICAgZ290byBPTl9FUlJPUjsNCj4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ICsg IH0gZWxzZSBpZiAoIUlTX0VNUFRZX1NUUklORyAoU2VydmljZVByaXZhdGUtPkJhc2ljQXV0aCkp IHsNCj4gPiA+ID4gKyAgICBTdGF0dXMgPSBIdHRwU2V0RmllbGROYW1lQW5kVmFsdWUgKCZIZWFk ZXJzW0hlYWRlckluZGV4KytdLA0KPiA+ID4gSFRUUF9IRUFERVJfQVVUSE9SSVpBVElPTiwgU2Vy dmljZVByaXZhdGUtPkJhc2ljQXV0aCk7DQo+ID4gPiA+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiA+ID4gPiArICAgICAgZ290byBPTl9FUlJPUjsNCj4gPiA+ID4gKyAgICB9DQo+ ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBpZiAoUmVxdWVzdCAhPSBOVUxMKSB7 DQo+ID4gPiA+ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUmVxdWVzdC0+SGVhZGVyQ291 bnQ7IEluZGV4KyspIHsNCj4gPiA+ID4gKyAgICAgIFN0YXR1cyA9IEh0dHBTZXRGaWVsZE5hbWVB bmRWYWx1ZSAoJkhlYWRlcnNbSGVhZGVySW5kZXgrK10sDQo+IFJlcXVlc3QtDQo+ID4gPiA+SGVh ZGVyc1tJbmRleF0uRmllbGROYW1lLCBSZXF1ZXN0LT5IZWFkZXJzW0luZGV4XS5GaWVsZFZhbHVl KTsNCj4gPiA+ID4gKyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiA+ID4gKyAg ICAgICAgZ290byBPTl9FUlJPUjsNCj4gPiA+ID4gKyAgICAgIH0NCj4gPiA+ID4gKyAgICB9DQo+ ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBTdGF0dXMgPSBIdHRwU2V0RmllbGRO YW1lQW5kVmFsdWUgKCZIZWFkZXJzW0hlYWRlckluZGV4KytdLA0KPiA+ID4gSFRUUF9IRUFERVJf SE9TVCwgU2VydmljZVByaXZhdGUtPkhvc3ROYW1lKTsNCj4gPiA+ID4gKyAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiA+ID4gPiArICAgIGdvdG8gT05fRVJST1I7DQo+ID4gPiA+ICsgIH0N Cj4gPiA+ID4gKw0KPiA+ID4gPiArICBTdGF0dXMgPSBIdHRwU2V0RmllbGROYW1lQW5kVmFsdWUg KCZIZWFkZXJzW0hlYWRlckluZGV4KytdLA0KPiA+ID4gUkVERklTSF9IVFRQX0hFQURFUl9PREFU QV9WRVJTSU9OX1NUUiwNCj4gPiA+IFJFREZJU0hfSFRUUF9IRUFERVJfT0RBVEFfVkVSU0lPTl9W QUxVRSk7DQo+ID4gPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiA+ID4gKyAg ICBnb3RvIE9OX0VSUk9SOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgU3Rh dHVzID0gSHR0cFNldEZpZWxkTmFtZUFuZFZhbHVlICgmSGVhZGVyc1tIZWFkZXJJbmRleCsrXSwN Cj4gPiA+IEhUVFBfSEVBREVSX0FDQ0VQVCwgSFRUUF9DT05URU5UX1RZUEVfQVBQX0pTT04pOw0K PiA+ID4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiA+ICsgICAgZ290byBP Tl9FUlJPUjsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIFN0YXR1cyA9IEh0 dHBTZXRGaWVsZE5hbWVBbmRWYWx1ZSAoJkhlYWRlcnNbSGVhZGVySW5kZXgrK10sDQo+ID4gPiBI VFRQX0hFQURFUl9VU0VSX0FHRU5ULA0KPiBSRURGSVNIX0hUVFBfSEVBREVSX1VTRVJfQUdFTlRf VkFMVUUpOw0KPiA+ID4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiA+ICsg ICAgZ290byBPTl9FUlJPUjsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIFN0 YXR1cyA9IEh0dHBTZXRGaWVsZE5hbWVBbmRWYWx1ZSAoJkhlYWRlcnNbSGVhZGVySW5kZXgrK10s DQo+ID4gPiBSRURGSVNIX0hUVFBfSEVBREVSX0NPTk5FQ1RJT05fU1RSLA0KPiA+ID4gUkVERklT SF9IVFRQX0hFQURFUl9DT05ORUNUSU9OX1ZBTFVFKTsNCj4gPiA+ID4gKyAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiA+ID4gPiArICAgIGdvdG8gT05fRVJST1I7DQo+ID4gPiA+ICsgIH0N Cj4gPiA+ID4gKw0KPiA+ID4gPiArICAvLw0KPiA+ID4gPiArICAvLyBIYW5kbGUgY29udGVudCBo ZWFkZXINCj4gPiA+ID4gKyAgLy8NCj4gPiA+ID4gKyAgaWYgKEhhc0NvbnRlbnQpIHsNCj4gPiA+ ID4gKyAgICBpZiAoUmVxdWVzdC0+Q29udGVudFR5cGUgPT0gTlVMTCkgew0KPiA+ID4gPiArICAg ICAgU3RhdHVzID0gSHR0cFNldEZpZWxkTmFtZUFuZFZhbHVlICgmSGVhZGVyc1tIZWFkZXJJbmRl eCsrXSwNCj4gPiA+IEhUVFBfSEVBREVSX0NPTlRFTlRfVFlQRSwgSFRUUF9DT05URU5UX1RZUEVf QVBQX0pTT04pOw0KPiA+ID4gPiArICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ ID4gPiArICAgICAgICBnb3RvIE9OX0VSUk9SOw0KPiA+ID4gPiArICAgICAgfQ0KPiA+ID4gPiAr ICAgIH0gZWxzZSB7DQo+ID4gPiA+ICsgICAgICBTdGF0dXMgPSBIdHRwU2V0RmllbGROYW1lQW5k VmFsdWUgKCZIZWFkZXJzW0hlYWRlckluZGV4KytdLA0KPiA+ID4gSFRUUF9IRUFERVJfQ09OVEVO VF9UWVBFLCBSZXF1ZXN0LT5Db250ZW50VHlwZSk7DQo+ID4gPiA+ICsgICAgICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ID4gPiA+ICsgICAgICAgIGdvdG8gT05fRVJST1I7DQo+ID4gPiA+ ICsgICAgICB9DQo+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgaWYgKFJl cXVlc3QtPkNvbnRlbnRMZW5ndGggPT0gMCkgew0KPiA+ID4gPiArICAgICAgUmVxdWVzdC0+Q29u dGVudExlbmd0aCA9ICBBc2NpaVN0ckxlbiAoUmVxdWVzdC0+Q29udGVudCk7DQo+ID4gPiA+ICsg ICAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgQXNjaWlTUHJpbnQgKA0KPiA+ID4gPiArICAg ICAgQ29udGVudExlbmd0aFN0ciwNCj4gPiA+ID4gKyAgICAgIHNpemVvZiAoQ29udGVudExlbmd0 aFN0ciksDQo+ID4gPiA+ICsgICAgICAiJWx1IiwNCj4gPiA+ID4gKyAgICAgIChVSU5UNjQpUmVx dWVzdC0+Q29udGVudExlbmd0aA0KPiA+ID4gPiArICAgICAgKTsNCj4gPiA+ID4gKyAgICBTdGF0 dXMgPSBIdHRwU2V0RmllbGROYW1lQW5kVmFsdWUgKCZIZWFkZXJzW0hlYWRlckluZGV4KytdLA0K PiA+ID4gSFRUUF9IRUFERVJfQ09OVEVOVF9MRU5HVEgsIENvbnRlbnRMZW5ndGhTdHIpOw0KPiA+ ID4gPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiA+ID4gKyAgICAgIGdvdG8g T05fRVJST1I7DQo+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgLy8NCj4g PiA+ID4gKyAgICAvLyBFbmNvZGluZw0KPiA+ID4gPiArICAgIC8vDQo+ID4gPiA+ICsgICAgaWYg KERvQ29udGVudEVuY29kaW5nKSB7DQo+ID4gPiA+ICsgICAgICAvLw0KPiA+ID4gPiArICAgICAg Ly8gV2UgY3VycmVudGx5IG9ubHkgc3VwcG9ydCBnemlwIENvbnRlbnQtRW5jb2RpbmcuDQo+ID4g PiA+ICsgICAgICAvLw0KPiA+ID4gPiArICAgICAgU3RhdHVzID0gIFJlZGZpc2hDb250ZW50RW5j b2RlICgNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgIENvbnRlbnRFbmNvZGluZywNCj4gPiA+ ID4gKyAgICAgICAgICAgICAgICAgIFJlcXVlc3QtPkNvbnRlbnQsDQo+ID4gPiA+ICsgICAgICAg ICAgICAgICAgICBSZXF1ZXN0LT5Db250ZW50TGVuZ3RoLA0KPiA+ID4gPiArICAgICAgICAgICAg ICAgICAgJkNvbnRlbnQsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAmQ29udGVudExlbmd0 aA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgKTsNCj4gPiA+ID4gKyAgICAgIGlmIChTdGF0 dXMgPT0gRUZJX0lOVkFMSURfUEFSQU1FVEVSKSB7DQo+ID4gPiA+ICsgICAgICAgIERFQlVHICgo REVCVUdfRVJST1IsICIlYTogRXJyb3IgdG8gZW5jb2RlIGNvbnRlbnQuXG4iLA0KPiBfX2Z1bmNf XykpOw0KPiA+ID4gPiArICAgICAgICBnb3RvIE9OX0VSUk9SOw0KPiA+ID4gPiArICAgICAgfSBl bHNlIGlmIChTdGF0dXMgPT0gRUZJX1VOU1VQUE9SVEVEKSB7DQo+ID4gPiA+ICsgICAgICAgIERv Q29udGVudEVuY29kaW5nID0gRkFMU0U7DQo+ID4gPiA+ICsgICAgICAgIERFQlVHICgoUkVERklT SF9IVFRQX0NBQ0hFX0RFQlVHX1JFUVVFU1QsICIlYTogTm8gY29udGVudA0KPiA+ID4gY29kaW5n IGZvciAlYSEgVXNlIHJhdyBkYXRhIGluc3RlYWQuXG4iLCBfX2Z1bmNfXywgQ29udGVudEVuY29k aW5nKSk7DQo+ID4gPiA+ICsgICAgICAgIFN0YXR1cyA9IEh0dHBTZXRGaWVsZE5hbWVBbmRWYWx1 ZSAoJkhlYWRlcnNbSGVhZGVySW5kZXgrK10sDQo+ID4gPiBIVFRQX0hFQURFUl9DT05URU5UX0VO Q09ESU5HLA0KPiBIVFRQX0NPTlRFTlRfRU5DT0RJTkdfSURFTlRJVFkpOw0KPiA+ID4gPiArICAg ICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiA+ICsgICAgICAgICAgZ290byBP Tl9FUlJPUjsNCj4gPiA+ID4gKyAgICAgICAgfQ0KPiA+ID4gPiArICAgICAgfSBlbHNlIHsNCj4g PiA+ID4gKyAgICAgICAgU3RhdHVzID0gSHR0cFNldEZpZWxkTmFtZUFuZFZhbHVlICgmSGVhZGVy c1tIZWFkZXJJbmRleCsrXSwNCj4gPiA+IEhUVFBfSEVBREVSX0NPTlRFTlRfRU5DT0RJTkcsIEhU VFBfQ09OVEVOVF9FTkNPRElOR19HWklQKTsNCj4gPiA+ID4gKyAgICAgICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiA+ID4gPiArICAgICAgICAgIGdvdG8gT05fRVJST1I7DQo+ID4gPiA+ ICsgICAgICAgIH0NCj4gPiA+ID4gKyAgICAgIH0NCj4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKyAgICAvLw0KPiA+ID4gPiArICAgIC8vIFdoZW4gdGhlIGNvbnRlbnQgaXMgZnJv bSBjYWxsZXIsIHdlIHVzZSBvdXIgb3duIGNvcHkgc28gdGhhdCB3ZQ0KPiBwcm9wZXJseQ0KPiA+ ID4gcmVsZWFzZSBpdCBsYXRlci4NCj4gPiA+ID4gKyAgICAvLw0KPiA+ID4gPiArICAgIGlmICgh RG9Db250ZW50RW5jb2RpbmcpIHsNCj4gPiA+ID4gKyAgICAgIENvbnRlbnQgPSBBbGxvY2F0ZUNv cHlQb29sIChSZXF1ZXN0LT5Db250ZW50TGVuZ3RoLCBSZXF1ZXN0LQ0KPiA+Q29udGVudCk7DQo+ ID4gPiA+ICsgICAgICBpZiAoQ29udGVudCA9PSBOVUxMKSB7DQo+ID4gPiA+ICsgICAgICAgIGdv dG8gT05fRVJST1I7DQo+ID4gPiA+ICsgICAgICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAg IENvbnRlbnRMZW5ndGggPSBSZXF1ZXN0LT5Db250ZW50TGVuZ3RoOw0KPiA+ID4gPiArICAgIH0N Cj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIC8vIFN0 ZXAgMjogYnVpbGQgdGhlIHJlc3Qgb2YgSFRUUCByZXF1ZXN0IGluZm8uDQo+ID4gPiA+ICsgIC8v DQo+ID4gPiA+ICsgIFJlcXVlc3REYXRhID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChFRklf SFRUUF9SRVFVRVNUX0RBVEEpKTsNCj4gPiA+ID4gKyAgaWYgKFJlcXVlc3REYXRhID09IE5VTEwp IHsNCj4gPiA+ID4gKyAgICBnb3RvIE9OX0VSUk9SOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKyAgUmVxdWVzdERhdGEtPk1ldGhvZCA9IE1ldGhvZDsNCj4gPiA+ID4gKyAgUmVx dWVzdERhdGEtPlVybCAgICA9IFVybDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAvLw0KPiA+ID4g PiArICAvLyBTdGVwIDM6IGZpbGwgaW4gRUZJX0hUVFBfTUVTU0FHRQ0KPiA+ID4gPiArICAvLw0K PiA+ID4gPiArICBSZXF1ZXN0TXNnID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChFRklfSFRU UF9NRVNTQUdFKSk7DQo+ID4gPiA+ICsgIGlmIChSZXF1ZXN0TXNnID09IE5VTEwpIHsNCj4gPiA+ ID4gKyAgICBnb3RvIE9OX0VSUk9SOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4g KyAgQVNTRVJUIChIZWFkZXJJbmRleCA9PSBIZWFkZXJDb3VudCk7DQo+ID4gPiA+ICsgIFJlcXVl c3RNc2ctPkRhdGEuUmVxdWVzdCA9IFJlcXVlc3REYXRhOw0KPiA+ID4gPiArICBSZXF1ZXN0TXNn LT5IZWFkZXJDb3VudCAgPSBIZWFkZXJJbmRleDsNCj4gPiA+ID4gKyAgUmVxdWVzdE1zZy0+SGVh ZGVycyAgICAgID0gSGVhZGVyczsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBpZiAoSGFzQ29udGVu dCkgew0KPiA+ID4gPiArICAgIFJlcXVlc3RNc2ctPkJvZHlMZW5ndGggPSBDb250ZW50TGVuZ3Ro Ow0KPiA+ID4gPiArICAgIFJlcXVlc3RNc2ctPkJvZHkgICAgICAgPSBDb250ZW50Ow0KPiA+ID4g PiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgcmV0dXJuIFJlcXVlc3RNc2c7DQo+ID4gPiA+ ICsNCj4gPiA+ID4gK09OX0VSUk9SOg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIGlmIChIZWFkZXJz ICE9IE5VTEwpIHsNCj4gPiA+ID4gKyAgICBIdHRwRnJlZUhlYWRlckZpZWxkcyAoSGVhZGVycywg SGVhZGVySW5kZXgpOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgaWYgKFJl cXVlc3REYXRhICE9IE5VTEwpIHsNCj4gPiA+ID4gKyAgICBGcmVlUG9vbCAoUmVxdWVzdERhdGEp Ow0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgaWYgKFJlcXVlc3RNc2cgIT0g TlVMTCkgew0KPiA+ID4gPiArICAgIEZyZWVQb29sIChSZXF1ZXN0TXNnKTsNCj4gPiA+ID4gKyAg fQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIGlmIChVcmwgIT0gTlVMTCkgew0KPiA+ID4gPiArICAg IEZyZWVQb29sIChVcmwpOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgcmV0 dXJuIE5VTEw7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiAr ICBUaGlzIGZ1bmN0aW9uIHBhcnNlIHJlc3BvbnNlIG1lc3NhZ2UgZnJvbSBSZWRmaXNoIHNlcnZp Y2UsIGFuZA0KPiA+ID4gPiArICBidWlsZCBSZWRmaXNoIHJlc3BvbnNlIGZvciBjYWxsZXIuIEl0 J3MgY2FsbCByZXNwb25zaWJpbGl0eSB0bw0KPiA+ID4gPiArICBwcm9wZXJseSByZWxlYXNlIFJl ZGZpc2ggcmVzcG9uc2UgYnkgY2FsbGluZyBSZWxlYXNlUmVkZmlzaFJlc3BvbnNlLg0KPiA+ID4g PiArDQo+ID4gPiA+ICsgIEBwYXJhbVtpbl0gICBTZXJ2aWNlUHJpdmF0ZSAgIFBvaW50ZXIgdG8g UmVkZmlzaCBzZXJ2aWNlIHByaXZhdGUgZGF0YS4NCj4gPiA+ID4gKyAgQHBhcmFtW2luXSAgIFJl c3BvbnNlTXNnICAgICAgUmVzcG9uc2UgbWVzc2FnZSBmcm9tIFJlZGZpc2ggc2VydmljZS4NCj4g PiA+ID4gKyAgQHBhcmFtW291dF0gIFJlZGZpc2hSZXNwb25zZSAgUmVkZmlzaCByZXNwb25zZSBk YXRhLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEByZXR2YWwgICAgIEVGSV9TVUNDRVNTICAgICBS ZWRmaXNoIHJlc3BvbnNlIGlzIHJldHVybmVkIHN1Y2Nlc3NmdWxseS4NCj4gPiA+ID4gKyAgQHJl dHZhbCAgICAgT3RoZXJzICAgICAgICAgIEVycm9ycyBvY2N1ci4NCj4gPiA+ID4gKw0KPiA+ID4g PiArKiovDQo+ID4gPiA+ICtFRklfU1RBVFVTDQo+ID4gPiA+ICtQYXJzZVJlc3BvbnNlTWVzc2Fn ZSAoDQo+ID4gPiA+ICsgIElOICBSRURGSVNIX1NFUlZJQ0VfUFJJVkFURSAgKlNlcnZpY2VQcml2 YXRlLA0KPiA+ID4gPiArICBJTiAgRUZJX0hUVFBfTUVTU0FHRSAgICAgICAgICpSZXNwb25zZU1z ZywNCj4gPiA+ID4gKyAgT1VUIFJFREZJU0hfUkVTUE9OU0UgICAgICAgICAqUmVkZmlzaFJlc3Bv bnNlDQo+ID4gPiA+ICsgICkNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKyAgRUZJX1NUQVRVUyAgICAg ICAgU3RhdHVzOw0KPiA+ID4gPiArICBFREtJSV9KU09OX1ZBTFVFICBKc29uRGF0YTsNCj4gPiA+ ID4gKyAgRUZJX0hUVFBfSEVBREVSICAgKkNvbnRlbnRFbmNvZGVkSGVhZGVyOw0KPiA+ID4gPiAr ICBWT0lEICAgICAgICAgICAgICAqRGVjb2RlZEJvZHk7DQo+ID4gPiA+ICsgIFVJTlROICAgICAg ICAgICAgIERlY29kZWRMZW5ndGg7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgaWYgKChTZXJ2aWNl UHJpdmF0ZSA9PSBOVUxMKSB8fCAoUmVzcG9uc2VNc2cgPT0gTlVMTCkgfHwNCj4gKFJlZGZpc2hS ZXNwb25zZQ0KPiA+ID4gPT0gTlVMTCkpIHsNCj4gPiA+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFM SURfUEFSQU1FVEVSOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgREVCVUcg KChSRURGSVNIX0hUVFBfQ0FDSEVfREVCVUdfUkVRVUVTVCwgIiVhXG4iLCBfX2Z1bmNfXykpOw0K PiA+ID4gPiArDQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIC8vIEluaXRpYWxpemF0aW9uDQo+ ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIEpzb25EYXRhICAgICAgICAgICAgICAgICAgICAgPSBO VUxMOw0KPiA+ID4gPiArICBSZWRmaXNoUmVzcG9uc2UtPkhlYWRlckNvdW50ID0gMDsNCj4gPiA+ ID4gKyAgUmVkZmlzaFJlc3BvbnNlLT5IZWFkZXJzICAgICA9IE5VTEw7DQo+ID4gPiA+ICsgIFJl ZGZpc2hSZXNwb25zZS0+UGF5bG9hZCAgICAgPSBOVUxMOw0KPiA+ID4gPiArICBSZWRmaXNoUmVz cG9uc2UtPlN0YXR1c0NvZGUgID0gTlVMTDsNCj4gPiA+ID4gKyAgRGVjb2RlZEJvZHkgICAgICAg ICAgICAgICAgICA9IE5VTEw7DQo+ID4gPiA+ICsgIERlY29kZWRMZW5ndGggICAgICAgICAgICAg ICAgPSAwOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIC8vIFJldHVybiB0 aGUgSFRUUCBTdGF0dXNDb2RlLg0KPiA+ID4gPiArICAvLw0KPiA+ID4gPiArICBpZiAoUmVzcG9u c2VNc2ctPkRhdGEuUmVzcG9uc2UgIT0gTlVMTCkgew0KPiA+ID4gPiArICAgIERFQlVHICgoUkVE RklTSF9IVFRQX0NBQ0hFX0RFQlVHX1JFUVVFU1QsICIlYTogc3RhdHVzOiAlZFxuIiwNCj4gPiA+ IF9fZnVuY19fLCBSZXNwb25zZU1zZy0+RGF0YS5SZXNwb25zZS0+U3RhdHVzQ29kZSkpOw0KPiA+ ID4gPiArICAgIFJlZGZpc2hSZXNwb25zZS0+U3RhdHVzQ29kZSA9IEFsbG9jYXRlQ29weVBvb2wg KHNpemVvZg0KPiA+ID4gKEVGSV9IVFRQX1NUQVRVU19DT0RFKSwgJlJlc3BvbnNlTXNnLT5EYXRh LlJlc3BvbnNlLT5TdGF0dXNDb2RlKTsNCj4gPiA+ID4gKyAgICBpZiAoUmVkZmlzaFJlc3BvbnNl LT5TdGF0dXNDb2RlID09IE5VTEwpIHsNCj4gPiA+ID4gKyAgICAgIERFQlVHICgoREVCVUdfRVJS T1IsICIlYTogRmFpbGVkIHRvIGNyZWF0ZSBzdGF0dXMgY29kZS5cbiIsDQo+IF9fZnVuY19fKSk7 DQo+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgLy8N Cj4gPiA+ID4gKyAgLy8gUmV0dXJuIHRoZSBIVFRQIGhlYWRlcnMuDQo+ID4gPiA+ICsgIC8vDQo+ ID4gPiA+ICsgIGlmIChSZXNwb25zZU1zZy0+SGVhZGVycyAhPSBOVUxMKSB7DQo+ID4gPiA+ICsg ICAgREVCVUcgKChSRURGSVNIX0hUVFBfQ0FDSEVfREVCVUdfUkVRVUVTVCwgIiVhOiBoZWFkZXIg Y291bnQ6DQo+ID4gPiAlZFxuIiwgX19mdW5jX18sIFJlc3BvbnNlTXNnLT5IZWFkZXJDb3VudCkp Ow0KPiA+ID4gPiArICAgIFN0YXR1cyA9IENvcHlIdHRwSGVhZGVycyAoDQo+ID4gPiA+ICsgICAg ICAgICAgICAgICBSZXNwb25zZU1zZy0+SGVhZGVycywNCj4gPiA+ID4gKyAgICAgICAgICAgICAg IFJlc3BvbnNlTXNnLT5IZWFkZXJDb3VudCwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICZSZWRm aXNoUmVzcG9uc2UtPkhlYWRlcnMsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAmUmVkZmlzaFJl c3BvbnNlLT5IZWFkZXJDb3VudA0KPiA+ID4gPiArICAgICAgICAgICAgICAgKTsNCj4gPiA+ID4g KyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiA+ICsgICAgICBERUJVRyAoKERF QlVHX0VSUk9SLCAiJWE6IEZhaWxlZCB0byBjb3B5IEhUVFAgaGVhZGVyczogJXJcbiIsDQo+ID4g PiBfX2Z1bmNfXywgU3RhdHVzKSk7DQo+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiArICB9DQo+ID4g PiA+ICsNCj4gPiA+ID4gKyAgLy8NCj4gPiA+ID4gKyAgLy8gUmV0dXJuIHRoZSBIVFRQIGJvZHku DQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIGlmICgoUmVzcG9uc2VNc2ctPkJvZHlMZW5ndGgg IT0gMCkgJiYgKFJlc3BvbnNlTXNnLT5Cb2R5ICE9IE5VTEwpKSB7DQo+ID4gPiA+ICsgICAgREVC VUcgKChSRURGSVNIX0hUVFBfQ0FDSEVfREVCVUdfUkVRVUVTVCwgIiVhOiBib2R5IGxlbmd0aDoN Cj4gPiA+ICVkXG4iLCBfX2Z1bmNfXywgUmVzcG9uc2VNc2ctPkJvZHlMZW5ndGgpKTsNCj4gPiA+ ID4gKyAgICAvLw0KPiA+ID4gPiArICAgIC8vIENoZWNrIGlmIGRhdGEgaXMgZW5jb2RlZC4NCj4g PiA+ID4gKyAgICAvLw0KPiA+ID4gPiArICAgIENvbnRlbnRFbmNvZGVkSGVhZGVyID0gSHR0cEZp bmRIZWFkZXIgKFJlZGZpc2hSZXNwb25zZS0NCj4gPkhlYWRlckNvdW50LA0KPiA+ID4gUmVkZmlz aFJlc3BvbnNlLT5IZWFkZXJzLCBIVFRQX0hFQURFUl9DT05URU5UX0VOQ09ESU5HKTsNCj4gPiA+ ID4gKyAgICBpZiAoQ29udGVudEVuY29kZWRIZWFkZXIgIT0gTlVMTCkgew0KPiA+ID4gPiArICAg ICAgLy8NCj4gPiA+ID4gKyAgICAgIC8vIFRoZSBjb250ZW50IGlzIGVuY29kZWQuDQo+ID4gPiA+ ICsgICAgICAvLw0KPiA+ID4gPiArICAgICAgU3RhdHVzID0gUmVkZmlzaENvbnRlbnREZWNvZGUg KA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICBDb250ZW50RW5jb2RlZEhlYWRlci0+RmllbGRW YWx1ZSwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgUmVzcG9uc2VNc2ctPkJvZHksDQo+ID4g PiA+ICsgICAgICAgICAgICAgICAgIFJlc3BvbnNlTXNnLT5Cb2R5TGVuZ3RoLA0KPiA+ID4gPiAr ICAgICAgICAgICAgICAgICAmRGVjb2RlZEJvZHksDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAg ICZEZWNvZGVkTGVuZ3RoDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICk7DQo+ID4gPiA+ICsg ICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiA+ICsgICAgICAgIERFQlVHICgo REVCVUdfRVJST1IsICIlYTogRmFpbGVkIHRvIGRlY29tcHJlc3MgdGhlIHJlc3BvbnNlDQo+ID4g PiBjb250ZW50OiAlciBkZWNvZGluZyBtZXRob2Q6ICVhXG4uIiwgX19mdW5jX18sIFN0YXR1cywN Cj4gQ29udGVudEVuY29kZWRIZWFkZXItDQo+ID4gPiA+RmllbGRWYWx1ZSkpOw0KPiA+ID4gPiAr ICAgICAgICBnb3RvIE9OX0VSUk9SOw0KPiA+ID4gPiArICAgICAgfQ0KPiA+ID4gPiArDQo+ID4g PiA+ICsgICAgICBKc29uRGF0YSA9IEpzb25Mb2FkQnVmZmVyIChEZWNvZGVkQm9keSwgRGVjb2Rl ZExlbmd0aCwgMCwgTlVMTCk7DQo+ID4gPiA+ICsgICAgICBGcmVlUG9vbCAoRGVjb2RlZEJvZHkp Ow0KPiA+ID4gPiArICAgIH0gZWxzZSB7DQo+ID4gPiA+ICsgICAgICBKc29uRGF0YSA9IEpzb25M b2FkQnVmZmVyIChSZXNwb25zZU1zZy0+Qm9keSwgUmVzcG9uc2VNc2ctDQo+ID4gPiA+Qm9keUxl bmd0aCwgMCwgTlVMTCk7DQo+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAg aWYgKCFKc29uVmFsdWVJc051bGwgKEpzb25EYXRhKSkgew0KPiA+ID4gPiArICAgICAgUmVkZmlz aFJlc3BvbnNlLT5QYXlsb2FkID0gQ3JlYXRlUmVkZmlzaFBheWxvYWQgKFNlcnZpY2VQcml2YXRl LA0KPiA+ID4gSnNvbkRhdGEpOw0KPiA+ID4gPiArICAgICAgaWYgKFJlZGZpc2hSZXNwb25zZS0+ UGF5bG9hZCA9PSBOVUxMKSB7DQo+ID4gPiA+ICsgICAgICAgIERFQlVHICgoREVCVUdfRVJST1Is ICIlYTogRmFpbGVkIHRvIGNyZWF0ZSBwYXlsb2FkXG4uIiwNCj4gX19mdW5jX18pKTsNCj4gPiA+ ID4gKyAgICAgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICAgSnNvblZhbHVlRnJlZSAoSnNv bkRhdGEpOw0KPiA+ID4gPiArICAgIH0gZWxzZSB7DQo+ID4gPiA+ICsgICAgICBERUJVRyAoKERF QlVHX0VSUk9SLCAiJWE6IE5vIHBheWxvYWQgYXZhaWxhYmxlXG4iLCBfX2Z1bmNfXykpOw0KPiA+ ID4gPiArICAgIH0NCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIHJldHVybiBF RklfU1VDQ0VTUzsNCj4gPiA+ID4gKw0KPiA+ID4gPiArT05fRVJST1I6DQo+ID4gPiA+ICsNCj4g PiA+ID4gKyAgaWYgKFJlZGZpc2hSZXNwb25zZSAhPSBOVUxMKSB7DQo+ID4gPiA+ICsgICAgUmVs ZWFzZVJlZGZpc2hSZXNwb25zZSAoUmVkZmlzaFJlc3BvbnNlKTsNCj4gPiA+ID4gKyAgfQ0KPiA+ ID4gPiArDQo+ID4gPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICBUaGlzIGZ1bmN0aW9uIHNlbmQgUmVkZmlzaCByZXF1 ZXN0IHRvIFJlZGZpc2ggc2VydmljZSBieSBjYWxsaW5nDQo+ID4gPiA+ICsgIFJlc3QgRXggcHJv dG9jb2wuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHBhcmFtW2luXSAgIFNlcnZpY2UgICAgICAg UG9pbnRlciB0byBSZWRmaXNoIHNlcnZpY2UuDQo+ID4gPiA+ICsgIEBwYXJhbVtpbl0gICBVcmkg ICAgICAgICAgIFVyaSBvZiBSZWRmaXNoIHNlcnZpY2UuDQo+ID4gPiA+ICsgIEBwYXJhbVtpbl0g ICBNZXRob2QgICAgICAgIEhUVFAgbWV0aG9kLg0KPiA+ID4gPiArICBAcGFyYW1baW5dICAgUmVx dWVzdCAgICAgUmVxdWVzdCBkYXRhLiBUaGlzIGlzIG9wdGlvbmFsLg0KPiA+ID4gPiArICBAcGFy YW1bb3V0XSAgUmVzcG9uc2UgICAgUmVkZmlzaCByZXNwb25zZSBkYXRhLg0KPiA+ID4gPiArDQo+ ID4gPiA+ICsgIEByZXR2YWwgICAgIEVGSV9TVUNDRVNTICAgICBSZXF1ZXN0IGlzIHNlbnQgYW5k IHJlY2VpdmVkIHN1Y2Nlc3NmdWxseS4NCj4gPiA+ID4gKyAgQHJldHZhbCAgICAgT3RoZXJzICAg ICAgICAgIEVycm9ycyBvY2N1ci4NCj4gPiA+ID4gKw0KPiA+ID4gPiArKiovDQo+ID4gPiA+ICtF RklfU1RBVFVTDQo+ID4gPiA+ICtIdHRwU2VuZFJlY2VpdmUgKA0KPiA+ID4gPiArICBJTiAgUkVE RklTSF9TRVJWSUNFICAgU2VydmljZSwNCj4gPiA+ID4gKyAgSU4gIEVGSV9TVFJJTkcgICAgICAg IFVyaSwNCj4gPiA+ID4gKyAgSU4gIEVGSV9IVFRQX01FVEhPRCAgIE1ldGhvZCwNCj4gPiA+ID4g KyAgSU4gIFJFREZJU0hfUkVRVUVTVCAgICpSZXF1ZXN0ICBPUFRJT05BTCwNCj4gPiA+ID4gKyAg T1VUIFJFREZJU0hfUkVTUE9OU0UgICpSZXNwb25zZQ0KPiA+ID4gPiArICApDQo+ID4gPiA+ICt7 DQo+ID4gPiA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gPiA+ICsg IEVGSV9TVEFUVVMgICAgICAgICAgICAgICBSZXN0RXhTdGF0dXM7DQo+ID4gPiA+ICsgIEVGSV9I VFRQX01FU1NBR0UgICAgICAgICAqUmVxdWVzdE1zZzsNCj4gPiA+ID4gKyAgRUZJX0hUVFBfTUVT U0FHRSAgICAgICAgIFJlc3BvbnNlTXNnOw0KPiA+ID4gPiArICBSRURGSVNIX1NFUlZJQ0VfUFJJ VkFURSAgKlNlcnZpY2VQcml2YXRlOw0KPiA+ID4gPiArICBFRklfSFRUUF9IRUFERVIgICAgICAg ICAgKlhBdXRoVG9rZW5IZWFkZXI7DQo+ID4gPiA+ICsgIENIQVI4ICAgICAgICAgICAgICAgICAg ICAqSHR0cENvbnRlbnRFbmNvZGluZzsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBpZiAoKFNlcnZp Y2UgPT0gTlVMTCkgfHwgSVNfRU1QVFlfU1RSSU5HIChVcmkpIHx8IChSZXNwb25zZSA9PSBOVUxM KSkgew0KPiA+ID4gPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gPiA+ ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBERUJVRyAoKFJFREZJU0hfSFRUUF9DQUNIRV9E RUJVR19SRVFVRVNULCAiJWE6IE1ldGhvZDogMHgleA0KPiA+ID4gJXNcbiIsIF9fZnVuY19fLCBN ZXRob2QsIFVyaSkpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIFNlcnZpY2VQcml2YXRlID0gKFJF REZJU0hfU0VSVklDRV9QUklWQVRFICopU2VydmljZTsNCj4gPiA+ID4gKyAgaWYgKFNlcnZpY2VQ cml2YXRlLT5TaWduYXR1cmUgIT0gUkVERklTSF9IVFRQX1NFUlZJQ0VfU0lHTkFUVVJFKSB7DQo+ ID4gPiA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOiBzaWduYXR1cmUgY2hlY2sgZmFp bHVyZVxuIiwgX19mdW5jX18pKTsNCj4gPiA+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFS QU1FVEVSOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgWmVyb01lbSAoJlJl c3BvbnNlTXNnLCBzaXplb2YgKFJlc3BvbnNlTXNnKSk7DQo+ID4gPiA+ICsgIEh0dHBDb250ZW50 RW5jb2RpbmcgPSAoQ0hBUjggKilQY2RHZXRQdHINCj4gPiA+IChQY2RSZWRmaXNoU2VydmljZUNv bnRlbnRFbmNvZGluZyk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgUmVxdWVzdE1zZyA9IEJ1aWxk UmVxdWVzdE1lc3NhZ2UgKFNlcnZpY2UsIFVyaSwgTWV0aG9kLCBSZXF1ZXN0LA0KPiA+ID4gSHR0 cENvbnRlbnRFbmNvZGluZyk7DQo+ID4gPiA+ICsgIGlmIChSZXF1ZXN0TXNnID09IE5VTEwpIHsN Cj4gPiA+ID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6IGNhbm5vdCBidWlsZCByZXF1 ZXN0IG1lc3NhZ2UgZm9yICVzXG4iLA0KPiA+ID4gX19mdW5jX18sIFVyaSkpOw0KPiA+ID4gPiAr ICAgIHJldHVybiBFRklfUFJPVE9DT0xfRVJST1I7DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0K PiA+ID4gPiArICAvLw0KPiA+ID4gPiArICAvLyBjYWxsIFJFU1RFeCB0byBnZXQgcmVzcG9uc2Ug ZnJvbSBSRVNUIHNlcnZpY2UuDQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIFJlc3RFeFN0YXR1 cyA9IFNlcnZpY2VQcml2YXRlLT5SZXN0RXgtPlNlbmRSZWNlaXZlIChTZXJ2aWNlUHJpdmF0ZS0N Cj4gPlJlc3RFeCwNCj4gPiA+IFJlcXVlc3RNc2csICZSZXNwb25zZU1zZyk7DQo+ID4gPiA+ICsg IGlmIChFRklfRVJST1IgKFJlc3RFeFN0YXR1cykpIHsNCj4gPiA+ID4gKyAgICBERUJVRyAoKERF QlVHX0VSUk9SLCAiJWE6ICVzIFNlbmRSZWNlaXZlIGZhaWx1cmU6ICVyXG4iLCBfX2Z1bmNfXywN Cj4gPiA+IFVyaSwgUmVzdEV4U3RhdHVzKSk7DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ ID4gPiArICAvLw0KPiA+ID4gPiArICAvLyBSZXR1cm4gc3RhdHVzIGNvZGUsIGhlYWRlcnMgYW5k IHBheWxvYWQgdG8gY2FsbGVyIGFzIG11Y2ggYXMgcG9zc2libGUNCj4gZXZlbg0KPiA+ID4gd2hl biBSZXN0RXggcmV0dXJucyBmYWlsdXJlLg0KPiA+ID4gPiArICAvLw0KPiA+ID4gPiArICBTdGF0 dXMgPSBQYXJzZVJlc3BvbnNlTWVzc2FnZSAoU2VydmljZVByaXZhdGUsICZSZXNwb25zZU1zZywN Cj4gUmVzcG9uc2UpOw0KPiA+ID4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4g PiA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOiAlcyBwYXJzZSByZXNwb25zZSBmYWls dXJlOiAlclxuIiwNCj4gX19mdW5jX18sDQo+ID4gPiBVcmksIFN0YXR1cykpOw0KPiA+ID4gPiAr ICB9IGVsc2Ugew0KPiA+ID4gPiArICAgIC8vDQo+ID4gPiA+ICsgICAgLy8gQ2FwdHVyZSBzZXNz aW9uIHRva2VuIGluIGhlYWRlcg0KPiA+ID4gPiArICAgIC8vDQo+ID4gPiA+ICsgICAgaWYgKChN ZXRob2QgPT0gSHR0cE1ldGhvZFBvc3QpICYmDQo+ID4gPiA+ICsgICAgICAgIChSZXNwb25zZS0+ U3RhdHVzQ29kZSAhPSBOVUxMKSAmJg0KPiA+ID4gPiArICAgICAgICAoKCpSZXNwb25zZS0+U3Rh dHVzQ29kZSA9PSBIVFRQX1NUQVRVU18yMDBfT0spIHx8ICgqUmVzcG9uc2UtDQo+ID4gPiA+U3Rh dHVzQ29kZSA9PSBIVFRQX1NUQVRVU18yMDRfTk9fQ09OVEVOVCkpKQ0KPiA+ID4gPiArICAgIHsN Cj4gPiA+ID4gKyAgICAgIFhBdXRoVG9rZW5IZWFkZXIgPSBIdHRwRmluZEhlYWRlciAoUmVzcG9u c2VNc2cuSGVhZGVyQ291bnQsDQo+ID4gPiBSZXNwb25zZU1zZy5IZWFkZXJzLCBIVFRQX0hFQURF Ul9YX0FVVEhfVE9LRU4pOw0KPiA+ID4gPiArICAgICAgaWYgKFhBdXRoVG9rZW5IZWFkZXIgIT0g TlVMTCkgew0KPiA+ID4gPiArICAgICAgICBTdGF0dXMgPSBVcGRhdGVTZXNzaW9uVG9rZW4gKFNl cnZpY2VQcml2YXRlLCBYQXV0aFRva2VuSGVhZGVyLQ0KPiA+ID4gPkZpZWxkVmFsdWUpOw0KPiA+ ID4gPiArICAgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiA+ICsgICAgICAg ICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOiB1cGRhdGUgc2Vzc2lvbiB0b2tlbiBmYWlsdXJl OiAlclxuIiwNCj4gPiA+IF9fZnVuY19fLCBTdGF0dXMpKTsNCj4gPiA+ID4gKyAgICAgICAgfQ0K PiA+ID4gPiArICAgICAgfQ0KPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiAr DQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIC8vIFJlbGVhc2UgcmVzb3VyY2VzDQo+ID4gPiA+ ICsgIC8vDQo+ID4gPiA+ICsgIGlmIChSZXF1ZXN0TXNnICE9IE5VTEwpIHsNCj4gPiA+ID4gKyAg ICBSZWxlYXNlSHR0cE1lc3NhZ2UgKFJlcXVlc3RNc2csIFRSVUUpOw0KPiA+ID4gPiArICAgIEZy ZWVQb29sIChSZXF1ZXN0TXNnKTsNCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsg IFJlbGVhc2VIdHRwTWVzc2FnZSAoJlJlc3BvbnNlTXNnLCBGQUxTRSk7DQo+ID4gPiA+ICsNCj4g PiA+ID4gKyAgcmV0dXJuIFJlc3RFeFN0YXR1czsNCj4gPiA+ID4gK30NCj4gPiA+ID4gZGlmZiAt LWdpdCBhL1JlZGZpc2hQa2cvUmVkZmlzaC5mZGYuaW5jIGIvUmVkZmlzaFBrZy9SZWRmaXNoLmZk Zi5pbmMNCj4gPiA+ID4gaW5kZXggM2U1YTc3NzY2ZS4uNWNiZTM1OTJmZCAxMDA2NDQNCj4gPiA+ ID4gLS0tIGEvUmVkZmlzaFBrZy9SZWRmaXNoLmZkZi5pbmMNCj4gPiA+ID4gKysrIGIvUmVkZmlz aFBrZy9SZWRmaXNoLmZkZi5pbmMNCj4gPiA+ID4gQEAgLTYsNyArNiw3IEBADQo+ID4gPiA+ICMg dG8gYmUgYnVpbHQgaW4gdGhlIGZpcm13YXJlIHZvbHVtZS4NCj4gPiA+ID4gIw0KPiA+ID4gPiAj IChDKSBDb3B5cmlnaHQgMjAyMC0yMDIxIEhld2xldHQgUGFja2FyZCBFbnRlcnByaXNlIERldmVs b3BtZW50IExQPEJSPg0KPiA+ID4gPiAtIyBDb3B5cmlnaHQgKGMpIDIwMjMsIE5WSURJQSBDT1JQ T1JBVElPTiAmIEFGRklMSUFURVMuIEFsbCByaWdodHMNCj4gcmVzZXJ2ZWQuDQo+ID4gPiA+ICsj IENvcHlyaWdodCAoYykgMjAyMy0yMDI0LCBOVklESUEgQ09SUE9SQVRJT04gJiBBRkZJTElBVEVT LiBBbGwgcmlnaHRzDQo+ID4gPiByZXNlcnZlZC4NCj4gPiA+ID4gIw0KPiA+ID4gPiAjICAgIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gPiA+ICMNCj4g PiA+ID4gQEAgLTIwLDQgKzIwLDUgQEANCj4gPiA+ID4gICBJTkYgUmVkZmlzaFBrZy9SZWRmaXNo Q29uZmlnSGFuZGxlci9SZWRmaXNoQ29uZmlnSGFuZGxlckRyaXZlci5pbmYNCj4gPiA+ID4gICBJ TkYgUmVkZmlzaFBrZy9SZWRmaXNoUGxhdGZvcm1Db25maWdEeGUvUmVkZmlzaFBsYXRmb3JtQ29u ZmlnRHhlLmluZg0KPiA+ID4gPiAgIElORg0KPiA+ID4gTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9S ZWd1bGFyRXhwcmVzc2lvbkR4ZS9SZWd1bGFyRXhwcmVzc2lvbkR4ZS5pbmYNCj4gPiA+ID4gKyAg SU5GIFJlZGZpc2hQa2cvUmVkZmlzaEh0dHBEeGUvUmVkZmlzaEh0dHBEeGUuaW5mDQo+ID4gPiA+ ICFlbmRpZg0KPiA+ID4gPiAtLQ0KPiA+ID4gPiAyLjM0LjENCj4gPiA+ID4NCj4gPiA+ID4NCj4g PiA+ID4NCj4gPiA+ID4gDQo+ID4gPiA+DQo+ID4gPg0KPiA+ID4gUmVnYXJkcywNCj4gPiA+IE1p a2UuDQo+ID4gPiA+DQoNCgotPS09LT0tPS09LT0tPS09LT0tPS09LQpHcm91cHMuaW8gTGlua3M6 IFlvdSByZWNlaXZlIGFsbCBtZXNzYWdlcyBzZW50IHRvIHRoaXMgZ3JvdXAuClZpZXcvUmVwbHkg T25saW5lICgjMTE1OTU4KTogaHR0cHM6Ly9lZGsyLmdyb3Vwcy5pby9nL2RldmVsL21lc3NhZ2Uv MTE1OTU4Ck11dGUgVGhpcyBUb3BpYzogaHR0cHM6Ly9ncm91cHMuaW8vbXQvMTA0NTA1NDA0Lzc2 ODYxNzYKR3JvdXAgT3duZXI6IGRldmVsK293bmVyQGVkazIuZ3JvdXBzLmlvClVuc3Vic2NyaWJl OiBodHRwczovL2VkazIuZ3JvdXBzLmlvL2cvZGV2ZWwvdW5zdWIgW3JlYmVjY2FAb3BlbmZ3Lmlv XQotPS09LT0tPS09LT0tPS09LT0tPS09LQoKDQo=