From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by mx.groups.io with SMTP id smtpd.web11.12954.1669099347479023584 for ; Mon, 21 Nov 2022 22:42:27 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=ZmqCMqdM; spf=pass (domain: intel.com, ip: 192.55.52.151, mailfrom: jian.j.wang@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669099347; x=1700635347; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=x0VeJn/EKLGcaIUwwWOx6KYFespcvHrQNWc9KJFw7x4=; b=ZmqCMqdMzvwRd0x7BsC6106Wqx3C5i9ZHwjCI6e/w4hvHwO02R4qDW10 4Icv6KVznk5bmQviOhJI0G70dlmu8T47jLbr9SNAFQc8MmlT3zemKgieV Hd6//3WwVqkPOoofA3QsJeUjPsOqYtqXpE7enlJkaKKRhrSZw1BagkxMs CZHQwhh9kOKpWPeXWX0XmLYIokKc5tKwnJczpsIHg7a+wxxkcU0OJXvgc +H03ydKyMSHL80Az3DhSVDUR7XX66CJJEXLyGuvEpuGiFhVFA50AexP/1 LP9q6sg/UuLtZgn8PV1odrplSJimX9dTq0mxgc621Z9K3tUeVElO+Yp5T g==; X-IronPort-AV: E=McAfee;i="6500,9779,10538"; a="294136400" X-IronPort-AV: E=Sophos;i="5.96,183,1665471600"; d="scan'208";a="294136400" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Nov 2022 22:42:25 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10538"; a="635444962" X-IronPort-AV: E=Sophos;i="5.96,183,1665471600"; d="scan'208";a="635444962" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by orsmga007.jf.intel.com with ESMTP; 21 Nov 2022 22:42:25 -0800 Received: from orsmsx602.amr.corp.intel.com (10.22.229.15) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Mon, 21 Nov 2022 22:42:24 -0800 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by orsmsx602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31 via Frontend Transport; Mon, 21 Nov 2022 22:42:24 -0800 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.169) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2375.31; Mon, 21 Nov 2022 22:42:23 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dOfZrJkutqk+ZR0pC2eBlcATC8CfUxFTvdtOTo+kEgD+IHBxIiqeiqnOb/YBBYouvHAxG5jv1RrZU5yeVXqPcEKyIDj414+c5jqptoqw04CxVl5Cn0Ij5sMIrWt+vljq+OhwU+kuPubs+QmQuj8a+fxhlOifH8zpUgLIEDFQk6hVeTwcxndM8IeKQfBQr0wKCoNR1QfJu8DvQRkbCnSbMtMwxc7vKHRlIrve2jroXF7xPIdmUO/rHr1YYHRA4HWAkhv8J8LQiGxhW2gosdVZOVyIyZGDx1K2lJpDFrkYX1EDYsxCgGuFBgZ5B/PX0L3ndaDUZjQao0YEtip3ysXyhA== 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=x0VeJn/EKLGcaIUwwWOx6KYFespcvHrQNWc9KJFw7x4=; b=LxaSDH1bpyqxMr4ok9SCka0miCNEVbWNY0UuUfkvn9quZP3VD1hWKEdngEqd7RjWCsh/9tJ5+KvLdcDiaCPGMis8WrBpONlRDTImPErUZtBLypYkRN1XiBt1P693esn4XRtb4H4d/F0f08Lmhb5HltEE62bd0XQ0ul1FM1Ev9jrQlDJOMXBXb5j6uWFfEm7z/fNF8pmz8dRWV+ZS0zB7aa7uXA6e75kj9UdhgXkrJNt4E8BA3ICAY9j33k5NDgNKCyJlV2eHVXxjRN5NmSIrJ8QsJGyvBiG2zjQLNK4twcdR3tUlaOXOXv45aBM4fn6Yp+zz2Kkj/QNuxeVwVDCs5A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from MW4PR11MB6763.namprd11.prod.outlook.com (2603:10b6:303:20b::7) by PH8PR11MB7119.namprd11.prod.outlook.com (2603:10b6:510:215::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5834.11; Tue, 22 Nov 2022 06:42:08 +0000 Received: from MW4PR11MB6763.namprd11.prod.outlook.com ([fe80::1440:650:6a28:88d9]) by MW4PR11MB6763.namprd11.prod.outlook.com ([fe80::1440:650:6a28:88d9%4]) with mapi id 15.20.5834.015; Tue, 22 Nov 2022 06:42:07 +0000 From: "Wang, Jian J" To: "devel@edk2.groups.io" , "Wang, Jian J" , "sami.mujawar@arm.com" , "Vang, Judah" CC: "Gao, Liming" , "Wu, Hao A" , "Mistry, Nishant C" , nd Subject: Re: [edk2-devel] [PATCH v5 08/19] MdeModulePkg: Add support for Protected Variables Thread-Topic: [edk2-devel] [PATCH v5 08/19] MdeModulePkg: Add support for Protected Variables Thread-Index: AQHY8bJeEew8D/uC3EqqEu9taD1+Ya49vySQgAD3MJCAAQSNAIAK2BcwgAAEbPA= Date: Tue, 22 Nov 2022 06:42:07 +0000 Message-ID: References: <20221106073509.3071-1-judah.vang@intel.com> <20221106073509.3071-9-judah.vang@intel.com> <852C10C4-B88F-422F-9220-9FBDBB7DBE20@arm.com> <1729D430BF77E016.5511@groups.io> In-Reply-To: <1729D430BF77E016.5511@groups.io> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MW4PR11MB6763:EE_|PH8PR11MB7119:EE_ x-ms-office365-filtering-correlation-id: 2b4880fd-21c9-440b-da1b-08dacc54acde x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: ib0ImT3PBEK0be3xgrNkO8xLWmzYRezCKi7LJhA4bQAetb/7mz13olqk3w8lRSZV/v124eoitK/1IHd4lgVMWIVM3swHOeStdESdfp+XbzYw8EZlNoE0Yt/OjevyMAnJzfyINaCKi8ZO+AMBqu6gz4Rtd4p4CV0L3ZFHgBiJVf88D0ZwCrB60sKZygS2YoCllOXPlSURejBI55VMnZqYub/EC1VMHZK/t7SeyLrCSsYW6CTiCeCPIDf1TwxXDc8vR0gP7SO8CzZWb+asb7DUQ+9Y4Kie0yz4nrImT3TItpRJURInIsM5x29J9J/sZ0ZWNdssWYjwvAdQSUyXXQORWEvCQ/s18kV1K+628NvxuNgcIg08pb4K8zUYQP3K38UF7PdnGoRWrqXClYjx0Rq9jd9Pe6fuyXTibySfrJMzC7R/5xCEddqCQR3XS8/5ZSZN7TyHLkzJwwykyUVdtFbhNTc1Ql/pUjeniK/1AUalLoQe/SwAAR9oWkTBrtOHkdXuYS/yu5UVaFVtpA+tZ3KWXWOuZhjMG+dxwrC/ZYKPvbC8cEWK0DYn/P40FD08rzzZZMzJsQpxVp/0QTa4yUGQNhGlKhOh468BLDpQ3wt+kOLJsrTkHg3hI4iQoOMyADl6YHvtK0Eq+g3Mug6/d8Zi9pzfVOYUxmt5lDLGlxOq5TbMI190y2Svpjbbu2WscJRCQfx2bc+BCWVZr3OS1dKlQe5CUL7C6opho7Rr9dd71wq/GdEe7Vh3Z3N0550+o7pLw6qhJnrXTLAVPm1JnkV4rH5PGCpBu1ZuYpP2aUO+G8s= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW4PR11MB6763.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(39860400002)(396003)(136003)(376002)(366004)(346002)(451199015)(71200400001)(55016003)(38100700002)(8676002)(83380400001)(110136005)(186003)(86362001)(4326008)(66446008)(52536014)(30864003)(66556008)(478600001)(38070700005)(33656002)(76116006)(5660300002)(45080400002)(966005)(41300700001)(19627235002)(64756008)(66476007)(122000001)(66946007)(8936002)(82960400001)(54906003)(6636002)(26005)(6506007)(316002)(7696005)(9686003)(53546011)(66899015)(2906002)(84970400001)(559001)(579004)(44824005);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?VHIyYm9BTmoyQkdLMml1OUFQM1hwUWR0SFNjWmlPeTNHckF1eTJMMmpUc24z?= =?utf-8?B?Z3VFOTY0UGdWMy9Dd1Z4NVdVa1VNOE5uN0c1MFR4MmFna01qdUJiMnR2Q0Vq?= =?utf-8?B?alhBZjdTdVRiRDUzU3d5M3NEL2RxUGtUODNIWVhndXo4NmdiaXRVL2ZmYzZy?= =?utf-8?B?UjA0UE1yVTdvYng5S2Z6RndmZ3k2V1Q3OGN1azMxd05pY1Z4ZjJOcWNFZ3JQ?= =?utf-8?B?bVRFSjZYMHdwelRGcUZjOFQ2bXNMVkZrd2I5cjlkcWxlek9hMTduMFlvQWMv?= =?utf-8?B?VUlsSE5XTkUxbzliV2JPYko4NVR0OWdmbXJvd2NlTG1aZWVmNUg0cUxUZ2dC?= =?utf-8?B?U0xNa05NSzBtbHIwQmQ5bnpuekV5VFgzQTRqL2ZUWjJjVVhDSlhYWmp5R0s4?= =?utf-8?B?dzhjSW9nWGtFcndhNFZYYTExdGdRRlF5bGJCUDdZSTVMZS92RlBLcmRGQWpp?= =?utf-8?B?NVFQMHQ1WmExVjgweUp1cVg0akxaUFNRZVdEMVBTbFZJSldYSWYxSzZENDQz?= =?utf-8?B?QnpTNjBZYjhHQ1JCYU83TnBHb3piQU1jcFJxZG1MOU1IUXlLZThmRzJORTRN?= =?utf-8?B?ZnJvTmQwNDVFVE9GT3FHK2dFR1VseHptUTMxSktPaTRKZnh0TE5ubDMrRW84?= =?utf-8?B?dFh6SW9udy9CcFBybkZEeHhEM0NPOEpEbm5nZFU1Y3h3QnpyZjFvaVJ3VkJO?= =?utf-8?B?WUg3eEdCSTlYOU9lOWpPUDFiYTQrajhaU2NUOUtZdGNSNXRsN2pVYm5Pd1VR?= =?utf-8?B?ckROSStRTmFlTk1laFVmWDQyLzNZWFBQYmEvM2VUTldyNW5TcWhLNzIyV3Rs?= =?utf-8?B?U3VWbFRJV0xLdmgweG5jVjVtSDNvUzMzLzVpRlFULytML0tZemhzdEYzYWpT?= =?utf-8?B?VEJmTkxDQ3Ntc3FNeStiM1VDOFlmTFByZlBiYVVneXFSZFpFWklxbWFCSGgr?= =?utf-8?B?NlcwR1I2TTlUSi80QXR3MDRvK1BKaFdMTEZyY2R5a0RKS3lpVW80TEd5QkJv?= =?utf-8?B?ZGtGUjY3aW5MS08rTG1QZlBJNjI3VWFMTGIrQXVYTjNyZXcvckNLVlV3UlNn?= =?utf-8?B?MGZrZkZSdkR0S1YrYmhtTDRmNitCQkJiUkU5aHNRTU9IUjBpK3VpSVdyQlVB?= =?utf-8?B?Zll5S1FydlR6clNmNis5Q1ZQK3RDWkN5NjRmb0hBdkhPQlI4bVpJRmZJOVlv?= =?utf-8?B?dmtQd2o4SlI3Qyt5ckR5OS9LQ1plM1YweWhINTRpbnpMTmJWbHVSa0R6VjR4?= =?utf-8?B?d3ZCWERZTVRsVkJ2cGt3bVlkS3hOUWQyUEh1ZVd1bzZaTlNVdVhhd2JnQ1BS?= =?utf-8?B?QlZKRWkxcWtpSGFiY0Z5Z2JUdEdScFpXak1JYjhOTkdNTjZ1d2VxUm5MT3Jn?= =?utf-8?B?S1B6MXMvN2xDYlkxMXVldXZHSlkwRHJaSThFQzlWL0tXcCtUTm9HcUJhTWVh?= =?utf-8?B?TzVZN01PaGhVSHI4RENWUng0b0dxdmlYN0xKMTc5aTU2UnFLSk9LalM3TWdo?= =?utf-8?B?bStRMXpTSnQ2SjFqU0pXa1dwd1g5VHNhcDNjSDFZWk9tSWhzSytaZlBMajNU?= =?utf-8?B?OGUwU2ZDVWl6SjJ0ekxZRjM0WXZYdThQaTl3elRIa1lHKzMvcGRmcm9sSGFY?= =?utf-8?B?eTg0SmIzd0phb0hycmczU2ZIM2JaQ2hVRVh5V0tFSWRzcDlseUtBTDhxN0Jx?= =?utf-8?B?d1pXTTVoN3c4OGtGVXRmRXRtRDlQMTNQNUJ3OXUrRmhZUXJHaDlIY1ZQaWlE?= =?utf-8?B?Y2tLc1IySDVVL3kxbTgydmN3clZNUmlyeW1QcHcvZHg0NnRaV0lteFhMajJr?= =?utf-8?B?ckFVQ2FXUnUwVVVNbDVXRUdnNjA2TDV5RUEzOXhsRkQ5cnRKNmx5aUVNR2ZE?= =?utf-8?B?YkFCWFFxaTZFOTdpOS9YenhoSVQxRENOL3R1YzVXenZsVkhSWmlRRjI0bXdE?= =?utf-8?B?bktkMXFudktadGJCQW9IbmlzVVo0NEhJRjRpYWxYZ0E2eWZLeEtnZ3VyTjdk?= =?utf-8?B?c2I2a2lYNWVKMlBYelptenVTNTBpV0N1dU9pVnJpY0ZlUUdLdnUvRUd0L3or?= =?utf-8?B?a2d4Wm5yUkhFVkpxdmJxNWhhSGNPblFraEVONjhpNnhrQ1ZVcGk3ekNERjd0?= =?utf-8?Q?Ohg0gLKoLOullTiPCp4VG2Xkt?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW4PR11MB6763.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2b4880fd-21c9-440b-da1b-08dacc54acde X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Nov 2022 06:42:07.5326 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: q/bUIqg0EL5SNSc4KK7pxx2bsfFJakDrmMd6Hidcn+9sco20XpwuxaKAJ4wB7ihRf5ZZc+mCj0EQexXmDJPM3Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR11MB7119 Return-Path: jian.j.wang@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 U28gcGxlYXNlIGlnbm9yZSBzaW1pbGFyIGNvbW1lbnRzIGZvciBvdGhlciBwYXRjaGVzLg0KDQpG b3IgdGhpcyBwYXRjaCwNCg0KICAgUmV2aWV3ZWQtYnk6IEppYW4gSiBXYW5nIDxqaWFuLmoud2Fu Z0BpbnRlbC5jb20+DQoNClJlZ2FyZHMsDQpKaWFuDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdl LS0tLS0NCj4gRnJvbTogZGV2ZWxAZWRrMi5ncm91cHMuaW8gPGRldmVsQGVkazIuZ3JvdXBzLmlv PiBPbiBCZWhhbGYgT2YgV2FuZywgSmlhbg0KPiBKDQo+IFNlbnQ6IFR1ZXNkYXksIE5vdmVtYmVy IDIyLCAyMDIyIDI6MjcgUE0NCj4gVG86IGRldmVsQGVkazIuZ3JvdXBzLmlvOyBzYW1pLm11amF3 YXJAYXJtLmNvbTsgVmFuZywgSnVkYWgNCj4gPGp1ZGFoLnZhbmdAaW50ZWwuY29tPg0KPiBDYzog R2FvLCBMaW1pbmcgPGdhb2xpbWluZ0BieW9zb2Z0LmNvbS5jbj47IFd1LCBIYW8gQQ0KPiA8aGFv LmEud3VAaW50ZWwuY29tPjsgTWlzdHJ5LCBOaXNoYW50IEMgPG5pc2hhbnQuYy5taXN0cnlAaW50 ZWwuY29tPjsgbmQNCj4gPG5kQGFybS5jb20+DQo+IFN1YmplY3Q6IFJlOiBbZWRrMi1kZXZlbF0g W1BBVENIIHY1IDA4LzE5XSBNZGVNb2R1bGVQa2c6IEFkZCBzdXBwb3J0IGZvcg0KPiBQcm90ZWN0 ZWQgVmFyaWFibGVzDQo+IA0KPiBUaGFua3MgZm9yIHNoYXJpbmcgdGhlIGluZm8uIEl0IGxvb2tz IHRoYXQgbXkgY29kaW5nIHN0eWxlIGtub3dsZWRnZSBuZWVkcw0KPiByZWZyZXNoLg0KPiANCj4g UmVnYXJkcywNCj4gSmlhbg0KPiANCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ IEZyb206IGRldmVsQGVkazIuZ3JvdXBzLmlvIDxkZXZlbEBlZGsyLmdyb3Vwcy5pbz4gT24gQmVo YWxmIE9mIFNhbWkNCj4gPiBNdWphd2FyDQo+ID4gU2VudDogVHVlc2RheSwgTm92ZW1iZXIgMTUs IDIwMjIgNDo0OSBQTQ0KPiA+IFRvOiBkZXZlbEBlZGsyLmdyb3Vwcy5pbzsgVmFuZywgSnVkYWgg PGp1ZGFoLnZhbmdAaW50ZWwuY29tPjsgV2FuZywgSmlhbiBKDQo+ID4gPGppYW4uai53YW5nQGlu dGVsLmNvbT4NCj4gPiBDYzogR2FvLCBMaW1pbmcgPGdhb2xpbWluZ0BieW9zb2Z0LmNvbS5jbj47 IFd1LCBIYW8gQQ0KPiA+IDxoYW8uYS53dUBpbnRlbC5jb20+OyBNaXN0cnksIE5pc2hhbnQgQyA8 bmlzaGFudC5jLm1pc3RyeUBpbnRlbC5jb20+OyBuZA0KPiA+IDxuZEBhcm0uY29tPg0KPiA+IFN1 YmplY3Q6IFJlOiBbZWRrMi1kZXZlbF0gW1BBVENIIHY1IDA4LzE5XSBNZGVNb2R1bGVQa2c6IEFk ZCBzdXBwb3J0IGZvcg0KPiA+IFByb3RlY3RlZCBWYXJpYWJsZXMNCj4gPg0KPiA+IEhpIEFsbCwN Cj4gPg0KPiA+IEkgYmVsaWV2ZSB0aGUgRURLSUkgQ0kgaXMgZm9sbG93aW5nIHRoZSBlZGsyLUNv ZGluZyBzdGFuZGFyZCBydWxlIDUuMy41IHdoaWNoDQo+ID4gZm9yYmlkcyBwcmVmaXhpbmcgZmls ZSBpbmNsdWRlIGd1YXJkIG1hY3JvIG5hbWVzIHdpdGggJ18nLCBzZWUgaHR0cHM6Ly9lZGsyLQ0K PiA+IGRvY3MuZ2l0Ym9vay5pby9lZGstaWktYy1jb2Rpbmctc3RhbmRhcmRzLXNwZWNpZmljYXRp b24vdi9yZWxlYXNlLQ0KPiA+IDIuMjAvNV9zb3VyY2VfZmlsZXMvNTNfaW5jbHVkZV9maWxlcyM1 LjMuNS1hbGwtaW5jbHVkZS1maWxlLWNvbnRlbnRzLW11c3QtYmUtDQo+ID4gcHJvdGVjdGVkLWJ5 LWEtaW5jbHVkZS1ndWFyZA0KPiA+DQo+ID4gSWYgSSB1bmRlcnN0YW5kIGNvcnJlY3RseSB0aGUg ZWRrMiBDSSBydW5zIHVuY3J1c3RpZnkgb24gdGhlIHBhdGNoIGRpZmYuDQo+IFRoZXJlZm9yZSwN Cj4gPiB1bmxlc3MgeW91IHRvdWNoIHRoZSBtYWNybyBpbiBhbiBleGlzdGluZyBmaWxlLCBpdCB3 b3VsZCBub3QgY29tcGxhaW4uDQo+ID4NCj4gPiBSZWdhcmRzLA0KPiA+DQo+ID4gU2FtaSBNdWph d2FyDQo+ID4NCj4gPiDvu79PbiAxNC8xMS8yMDIyLCAxNzoyMCwgImRldmVsQGVkazIuZ3JvdXBz LmlvIG9uIGJlaGFsZiBvZiBKdWRhaCBWYW5nIHZpYQ0KPiA+IGdyb3Vwcy5pbyIgPGRldmVsQGVk azIuZ3JvdXBzLmlvIG9uIGJlaGFsZiBvZg0KPiA+IGp1ZGFoLnZhbmc9aW50ZWwuY29tQGdyb3Vw cy5pbz4gd3JvdGU6DQo+ID4NCj4gPiAgICAgSmlhbiwNCj4gPg0KPiA+ICAgICBUaGF0J3Mgbm90 IHRoZSByZWFzb24gd2h5IEkgcmVtb3ZlZCB0aGUgbGVhZGluZyAnXycgdW5kZXJzY29yZS4NCj4g PiAgICAgV2hlbiBJIGRvbid0IHJlbW92ZSBpdCwgdGhlIEVESzIgQ0kgaXMgZ2l2aW5nIG1lIGEg ZmFpbCBhbmQgdGVsbGluZyBtZSBpdCBuZWVkcw0KPiA+IHRvIGJlIHJlbW92ZWQuDQo+ID4gICAg IEkgZG9uJ3Qga25vdyB3aHkgdGhpcyBpcyB0aGUgY2FzZSBidXQgaXQgc2VlbXMgdG8gb25seSBo YXBwZW4gZm9yIG5ldyBmaWxlcy4NCj4gPg0KPiA+ICAgICBKdWRhaA0KPiA+DQo+ID4gICAgIC0t LS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gICAgIEZyb206IFdhbmcsIEppYW4gSiA8amlh bi5qLndhbmdAaW50ZWwuY29tPg0KPiA+ICAgICBTZW50OiBTdW5kYXksIE5vdmVtYmVyIDEzLCAy MDIyIDExOjE0IFBNDQo+ID4gICAgIFRvOiBWYW5nLCBKdWRhaCA8anVkYWgudmFuZ0BpbnRlbC5j b20+OyBkZXZlbEBlZGsyLmdyb3Vwcy5pbw0KPiA+ICAgICBDYzogR2FvLCBMaW1pbmcgPGdhb2xp bWluZ0BieW9zb2Z0LmNvbS5jbj47IFd1LCBIYW8gQQ0KPiA+IDxoYW8uYS53dUBpbnRlbC5jb20+ OyBNaXN0cnksIE5pc2hhbnQgQyA8bmlzaGFudC5jLm1pc3RyeUBpbnRlbC5jb20+DQo+ID4gICAg IFN1YmplY3Q6IFJFOiBbUEFUQ0ggdjUgMDgvMTldIE1kZU1vZHVsZVBrZzogQWRkIHN1cHBvcnQg Zm9yIFByb3RlY3RlZA0KPiA+IFZhcmlhYmxlcw0KPiA+DQo+ID4gICAgIEhpIEp1ZGFoLA0KPiA+ DQo+ID4gICAgIEp1c3Qgb25lIGNvbW1lbnQ6DQo+ID4NCj4gPiAgICAgRm9yIGFsbCBoZWFkZXIg ZmlsZXMsIG5vIG5lZWQgdG8gcmVtb3ZlIHRoZSBvcGVuaW5nICdfJyBvZiBpbmNsdWRlIGd1YXJk DQo+IG1hY3JvLg0KPiA+ICAgICBQcm90ZWN0ZWQgdmFyaWFibGUgY29kZSBhcmUgbm93IGluIGRp ZmZlcmVudCBmb2xkZXIgdGhhbiBvcmlnaW5hbCB2YXJpYWJsZQ0KPiA+IGRyaXZlci4NCj4gPiAg ICAgVGhleSB3b24ndCByZWZlcmVuY2UgY29kZSBmcm9tIGVhY2ggb3RoZXIuIFBsZWFzZSBhZGQg dGhlIG9wZW5pbmcgJ18nIGZvcg0KPiA+IHRob3NlDQo+ID4gICAgIG1hY3JvcyB0byBjb25maXJt IHRvIGVkazIgY29kaW5nIGNvbnZlbnRpb24uDQo+ID4NCj4gPiAgICAgUmVnYXJkcywNCj4gPiAg ICAgSmlhbg0KPiA+DQo+ID4gICAgID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiAg ICAgPiBGcm9tOiBWYW5nLCBKdWRhaCA8anVkYWgudmFuZ0BpbnRlbC5jb20+DQo+ID4gICAgID4g U2VudDogU3VuZGF5LCBOb3ZlbWJlciAwNiwgMjAyMiAzOjM1IFBNDQo+ID4gICAgID4gVG86IGRl dmVsQGVkazIuZ3JvdXBzLmlvDQo+ID4gICAgID4gQ2M6IFdhbmcsIEppYW4gSiA8amlhbi5qLndh bmdAaW50ZWwuY29tPjsgR2FvLCBMaW1pbmcNCj4gPiAgICAgPiA8Z2FvbGltaW5nQGJ5b3NvZnQu Y29tLmNuPjsgV3UsIEhhbyBBIDxoYW8uYS53dUBpbnRlbC5jb20+OyBNaXN0cnksDQo+ID4gICAg ID4gTmlzaGFudCBDIDxuaXNoYW50LmMubWlzdHJ5QGludGVsLmNvbT4NCj4gPiAgICAgPiBTdWJq ZWN0OiBbUEFUQ0ggdjUgMDgvMTldIE1kZU1vZHVsZVBrZzogQWRkIHN1cHBvcnQgZm9yIFByb3Rl Y3RlZA0KPiA+IFZhcmlhYmxlcw0KPiA+ICAgICA+DQo+ID4gICAgID4gUkVGOiBodHRwczovL2J1 Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcuY2dpP2lkPTI1OTQNCj4gPiAgICAgPg0KPiA+ ICAgICA+IFY1OiBBZGQgUnVudGltZUR4ZSBWYXJpYWJsZSBQcm90ZWN0aW9uIGludG8gYSBuZXcg ZGlyZWN0b3J5IGFuZA0KPiA+ICAgICA+IGtlZXAgZXhpc3RpbmcgVmFyaWFibGUgZm9yIFJ1bnRp bWVEeGUgdW5jaGFuZ2VkLg0KPiA+ICAgICA+DQo+ID4gICAgID4gdjQ6IEFwcGxpZWQgY29kZSBy ZXZpZXcgLSByZW1vdmUgdW5yZWZlcmVuY2VkIGxpYnJhcnkgZnJvbSAuaW5mLg0KPiA+ICAgICA+ IFVwZGF0ZWQgc29tZSBmdW5jdGlvbiBkZXNjcmlwdGlvbiBhbmQgcGFyYW1ldGVycy4NCj4gPiAg ICAgPg0KPiA+ICAgICA+IFYzOiBGaXggJ05leHRWYXJpYWJsZVN0b3JlJyBwYXJhbWV0ZXIgZm9y IENvcHlNZW0uICBJdCB3YXMgY2F1c2luZw0KPiA+ICAgICA+IGFuIGV4Y2VwdGlvbi4gTmVlZCB0 byBjb3JyZWN0bHkgY2FzdCAnTmV4dFZhcmlhYmxlU3RvcmUnIHNvIGFsbA0KPiA+ICAgICA+IHBs YXRmb3JtcyBidWlsZC4gIEFkZCBjb2RlIHRvIGluaXRpYWxpemUgJ0NvbnRleHRJbicgc3RydWN0 dXJlIGluDQo+ID4gICAgID4gU21tVmFyaWFibGVSZWF5KCkgdG8gZml4IGlzc3VlIHdpdGggTlVM TCBmdW5jdGlvbiBwb2ludGVyLg0KPiA+ICAgICA+DQo+ID4gICAgID4gVjE6IEFkZCBzdXBwb3J0 IGZvciBQcm90ZWN0ZWQgVmFyaWFibGVzLg0KPiA+ICAgICA+IEFkZCBuZXcgQVBJIHRvIHJldHJp ZXZlIFZhcmlhYmxlIEluZm9tYXRpb24gYW5kIGRhdGEuDQo+ID4gICAgID4gQWRkIG5ldyBBUEkg dG8gdXBkYXRlIHZhcmlhYmxlIGluIG5vbi12b2xhdGlsZSBzdG9yYWdlIG9yDQo+ID4gICAgID4g Y2FjaGVkIGNvcHkuDQo+ID4gICAgID4NCj4gPiAgICAgPiBDYzogSmlhbiBKIFdhbmcgPGppYW4u ai53YW5nQGludGVsLmNvbT4NCj4gPiAgICAgPiBDYzogTGltaW5nIEdhbyA8Z2FvbGltaW5nQGJ5 b3NvZnQuY29tLmNuPg0KPiA+ICAgICA+IENjOiBIYW8gQSBXdSA8aGFvLmEud3VAaW50ZWwuY29t Pg0KPiA+ICAgICA+IENjOiBOaXNoYW50IEMgTWlzdHJ5IDxuaXNoYW50LmMubWlzdHJ5QGludGVs LmNvbT4NCj4gPiAgICAgPiBTaWduZWQtb2ZmLWJ5OiBKaWFuIEogV2FuZyA8amlhbi5qLndhbmdA aW50ZWwuY29tPg0KPiA+ICAgICA+IFNpZ25lZC1vZmYtYnk6IE5pc2hhbnQgQyBNaXN0cnkgPG5p c2hhbnQuYy5taXN0cnlAaW50ZWwuY29tPg0KPiA+ICAgICA+IFNpZ25lZC1vZmYtYnk6IEp1ZGFo IFZhbmcgPGp1ZGFoLnZhbmdAaW50ZWwuY29tPg0KPiA+ICAgICA+IC0tLQ0KPiA+ICAgICA+DQo+ ID4gICAgID4NCj4gPg0KPiBNZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3Rl ZC9SdW50aW1lRHhlL1J1bnRpbWVEeGVVbml0VGVzDQo+ID4gICAgID4gdC9WYXJpYWJsZUxvY2tS ZXF1ZXN0VG9Mb2NrVW5pdFRlc3QuaW5mIHwgICAzNiArDQo+ID4gICAgID4NCj4gPiAgICAgPg0K PiA+DQo+IE1kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVE eGUvVmFyaWFibGVSdW50aW1lRHhlDQo+ID4gICAgID4gLmluZiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgMTUxICsNCj4gPiAgICAgPg0KPiA+IE1kZU1vZHVsZVBrZy9Vbml2 ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVTbW0uaW5mDQo+ID4g ICAgID4gfCAgMTUzICsNCj4gPiAgICAgPg0KPiA+ICAgICA+DQo+ID4NCj4gTWRlTW9kdWxlUGtn L1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZVNtbVJ1bnRp bQ0KPiA+ICAgICA+IGVEeGUuaW5mICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAx MTkgKw0KPiA+ICAgICA+DQo+ID4gICAgID4NCj4gPg0KPiBNZGVNb2R1bGVQa2cvVW5pdmVyc2Fs L1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlU3RhbmRhbG9uZQ0KPiA+ICAg ICA+IE1tLmluZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE0MyArDQo+ID4g ICAgID4NCj4gPiAgICAgPg0KPiA+DQo+IE1kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUv UHJvdGVjdGVkL1J1bnRpbWVEeGUvUHJpdmlsZWdlUG9seW1vcnBoaQ0KPiA+ICAgICA+IGMuaCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTU4ICsNCj4gPiAgICAgPiAgTWRl TW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJs ZS5oDQo+ID4gICAgID4gfCAgOTQ4ICsrKysrDQo+ID4gICAgID4NCj4gPiAgICAgPg0KPiA+DQo+ IE1kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFy aWFibGVOb25Wb2xhdGlsZQ0KPiA+ICAgICA+IC5oICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgIDY3ICsNCj4gPiAgICAgPg0KPiA+IE1kZU1vZHVsZVBrZy9Vbml2ZXJzYWwv VmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVQYXJzaW5nLmgNCj4gPiAgICAg PiB8ICA0MjQgKysNCj4gPiAgICAgPg0KPiA+ICAgICA+DQo+ID4NCj4gTWRlTW9kdWxlUGtnL1Vu aXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZVJ1bnRpbWVDYWMN Cj4gPiAgICAgPiBoZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNTEg Kw0KPiA+ICAgICA+DQo+IE1kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVk L1J1bnRpbWVEeGUvTWVhc3VyZW1lbnQuYw0KPiA+ICAgICA+IHwgIDM0MyArKw0KPiA+ICAgICA+ ICBNZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1Jl Y2xhaW0uYw0KPiA+ICAgICA+IHwgIDUwNCArKysNCj4gPiAgICAgPg0KPiA+ICAgICA+DQo+ID4N Cj4gTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9S dW50aW1lRHhlVW5pdFRlcw0KPiA+ICAgICA+IHQvVmFyaWFibGVMb2NrUmVxdWVzdFRvTG9ja1Vu aXRUZXN0LmMgICB8ICA2MDcgKysrDQo+ID4gICAgID4NCj4gPiAgICAgPg0KPiA+DQo+IE1kZU1v ZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvU3BlY3VsYXRp b25CYXJyaWVyRA0KPiA+ICAgICA+IHhlLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgIDI3ICsNCj4gPiAgICAgPg0KPiA+ICAgICA+DQo+ID4NCj4gTWRlTW9kdWxlUGtnL1Vu aXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9TcGVjdWxhdGlvbkJhcnJpZXJT DQo+ID4gICAgID4gbW0uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjYg Kw0KPiA+ICAgICA+DQo+ID4gTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0 ZWQvUnVudGltZUR4ZS9UY2dNb3JMb2NrRHhlLmMNCj4gPiAgICAgPiB8ICAxNTMgKw0KPiA+ICAg ICA+DQo+ID4NCj4gTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVu dGltZUR4ZS9UY2dNb3JMb2NrU21tLmMNCj4gPiAgICAgPiB8ICA1NjkgKysrDQo+ID4gICAgID4g IE1kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFy Q2hlY2suYw0KPiA+ICAgICA+IHwgIDEwMSArDQo+ID4gICAgID4gIE1kZU1vZHVsZVBrZy9Vbml2 ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGUuYw0KPiA+ICAgICA+ IHwgNDAzNyArKysrKysrKysrKysrKysrKysrKw0KPiA+ICAgICA+ICBNZGVNb2R1bGVQa2cvVW5p dmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlRHhlLmMNCj4gPiAg ICAgPiB8ICA2NzAgKysrKw0KPiA+ICAgICA+DQo+IE1kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFy aWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVFeExpYi5jDQo+ID4gICAgID4gfCAg NDE3ICsrDQo+ID4gICAgID4NCj4gPiAgICAgPg0KPiA+DQo+IE1kZU1vZHVsZVBrZy9Vbml2ZXJz YWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVMb2NrUmVxdWVzDQo+ID4g ICAgID4gdFRvTG9jay5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDk2ICsNCj4g PiAgICAgPg0KPiA+ICAgICA+DQo+ID4NCj4gTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJs ZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZU5vblZvbGF0aWxlDQo+ID4gICAgID4gLmMg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1MzcgKysrDQo+ID4gICAgID4N Cj4gPiBNZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhl L1ZhcmlhYmxlUGFyc2luZy5jDQo+ID4gICAgID4gfCAxMTEwICsrKysrKw0KPiA+ICAgICA+DQo+ ID4gICAgID4NCj4gPg0KPiBNZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3Rl ZC9SdW50aW1lRHhlL1ZhcmlhYmxlUG9saWN5U21tDQo+ID4gICAgID4gRHhlLmMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDU3NSArKysNCj4gPiAgICAgPg0KPiA+ICAgICA+ DQo+ID4NCj4gTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGlt ZUR4ZS9WYXJpYWJsZVJ1bnRpbWVDYWMNCj4gPiAgICAgPiBoZS5jICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8ICAxNTggKw0KPiA+ICAgICA+DQo+IE1kZU1vZHVsZVBrZy9Vbml2 ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVTbW0uYw0KPiA+ICAg ICA+IHwgMTI2OCArKysrKysNCj4gPiAgICAgPg0KPiA+ICAgICA+DQo+ID4NCj4gTWRlTW9kdWxl UGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZVNtbVJ1 bnRpbQ0KPiA+ICAgICA+IGVEeGUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 IDE4OTUgKysrKysrKysrDQo+ID4gICAgID4NCj4gPiAgICAgPg0KPiA+DQo+IE1kZU1vZHVsZVBr Zy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVTdGFuZGFs b25lDQo+ID4gICAgID4gTW0uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg IDg5ICsNCj4gPiAgICAgPg0KPiA+ICAgICA+DQo+ID4NCj4gTWRlTW9kdWxlUGtnL1VuaXZlcnNh bC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZVRyYWRpdGlvbmFsDQo+ID4g ICAgID4gTW0uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMzAgKw0KPiA+ ICAgICA+DQo+ID4gICAgID4NCj4gPg0KPiBNZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxl L1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlUnVudGltZUR4ZQ0KPiA+ICAgICA+IC51bmkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMiArDQo+ID4gICAgID4NCj4g PiAgICAgPg0KPiA+DQo+IE1kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVk L1J1bnRpbWVEeGUvVmFyaWFibGVSdW50aW1lRHhlDQo+ID4gICAgID4gRXh0cmEudW5pICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE0ICsNCj4gPiAgICAgPg0KPiA+IE1kZU1vZHVs ZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVTbW0u dW5pDQo+ID4gICAgID4gfCAgIDI3ICsNCj4gPiAgICAgPg0KPiA+ICAgICA+DQo+ID4NCj4gTWRl TW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJs ZVNtbUV4dHJhLnUNCj4gPiAgICAgPiBuaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgMTQgKw0KPiA+ICAgICA+DQo+ID4gICAgID4NCj4gPg0KPiBNZGVNb2R1bGVQa2cv VW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlU21tUnVudGlt DQo+ID4gICAgID4gZUR4ZS51bmkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAy MyArDQo+ID4gICAgID4NCj4gPiAgICAgPg0KPiA+DQo+IE1kZU1vZHVsZVBrZy9Vbml2ZXJzYWwv VmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVTbW1SdW50aW0NCj4gPiAgICAg PiBlRHhlRXh0cmEudW5pICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE0ICsNCj4gPiAg ICAgPiAgMzYgZmlsZXMgY2hhbmdlZCwgMTU2NzYgaW5zZXJ0aW9ucygrKQ0KPiA+ICAgICA+DQo+ ID4gICAgID4gZGlmZiAtLWdpdA0KPiA+ICAgICA+DQo+ID4NCj4gYS9NZGVNb2R1bGVQa2cvVW5p dmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1J1bnRpbWVEeGVVbml0VA0KPiA+ ICAgICA+IGVzdC9WYXJpYWJsZUxvY2tSZXF1ZXN0VG9Mb2NrVW5pdFRlc3QuaW5mDQo+ID4gICAg ID4NCj4gPg0KPiBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1 bnRpbWVEeGUvUnVudGltZUR4ZVVuaXRUDQo+ID4gICAgID4gZXN0L1ZhcmlhYmxlTG9ja1JlcXVl c3RUb0xvY2tVbml0VGVzdC5pbmYNCj4gPiAgICAgPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ ICAgICA+IGluZGV4IDAwMDAwMDAwMDAwMC4uNTg2ZDg3N2ZjYTkwDQo+ID4gICAgID4gLS0tIC9k ZXYvbnVsbA0KPiA+ICAgICA+ICsrKw0KPiA+ICAgICA+DQo+ID4NCj4gYi9NZGVNb2R1bGVQa2cv VW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1J1bnRpbWVEeGVVbml0VA0K PiA+ICAgICA+IGVzdC9WYXJpYWJsZUxvY2tSZXF1ZXN0VG9Mb2NrVW5pdFRlc3QuaW5mDQo+ID4g ICAgID4gQEAgLTAsMCArMSwzNiBAQA0KPiA+ICAgICA+ICsjIyBAZmlsZQ0KPiA+ICAgICA+ICsj IFRoaXMgaXMgYSBob3N0LWJhc2VkIHVuaXQgdGVzdCBmb3IgdGhlIFZhcmlhYmxlTG9ja1JlcXVl c3RUb0xvY2sgc2hpbS4NCj4gPiAgICAgPiArIw0KPiA+ICAgICA+ICsjIENvcHlyaWdodCAoYykg TWljcm9zb2Z0IENvcnBvcmF0aW9uLg0KPiA+ICAgICA+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gICAgID4gKyMjDQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICtbRGVmaW5lc10NCj4gPiAgICAgPiArICBJTkZfVkVSU0lPTiAgICAgICAgID0gMHgw MDAxMDAxNw0KPiA+ICAgICA+ICsgIEJBU0VfTkFNRSAgICAgICAgICAgPSBWYXJpYWJsZUxvY2tS ZXF1ZXN0VG9Mb2NrVW5pdFRlc3QNCj4gPiAgICAgPiArICBGSUxFX0dVSUQgICAgICAgICAgID0g QTY1N0ZDRDgtNEEwRC00NkI0LThEQzktRjA4OTYyNjM4M0FEDQo+ID4gICAgID4gKyAgVkVSU0lP Tl9TVFJJTkcgICAgICA9IDEuMA0KPiA+ICAgICA+ICsgIE1PRFVMRV9UWVBFICAgICAgICAgPSBI T1NUX0FQUExJQ0FUSU9ODQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsjDQo+ID4gICAgID4gKyMg VGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpcyBmb3IgcmVmZXJlbmNlIG9ubHkgYW5kIG5vdCBy ZXF1aXJlZCBieSB0aGUNCj4gPiBidWlsZA0KPiA+ICAgICA+IHRvb2xzLg0KPiA+ICAgICA+ICsj DQo+ID4gICAgID4gKyMgIFZBTElEX0FSQ0hJVEVDVFVSRVMgICAgICAgICAgID0gSUEzMiBYNjQg QVJNIEFBUkNINjQNCj4gPiAgICAgPiArIw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArW1NvdXJj ZXNdDQo+ID4gICAgID4gKyAgVmFyaWFibGVMb2NrUmVxdWVzdFRvTG9ja1VuaXRUZXN0LmMNCj4g PiAgICAgPiArICAuLi9WYXJpYWJsZUxvY2tSZXF1ZXN0VG9Mb2NrLmMNCj4gPiAgICAgPiArDQo+ ID4gICAgID4gK1tQYWNrYWdlc10NCj4gPiAgICAgPiArICBNZGVQa2cvTWRlUGtnLmRlYw0KPiA+ ICAgICA+ICsgIE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVjDQo+ID4gICAgID4gKyAgVW5p dFRlc3RGcmFtZXdvcmtQa2cvVW5pdFRlc3RGcmFtZXdvcmtQa2cuZGVjDQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICtbTGlicmFyeUNsYXNzZXNdDQo+ID4gICAgID4gKyAgVW5pdFRlc3RMaWINCj4g PiAgICAgPiArICBEZWJ1Z0xpYg0KPiA+ICAgICA+ICsgIFZhcmlhYmxlUG9saWN5TGliDQo+ID4g ICAgID4gKyAgVmFyaWFibGVQb2xpY3lIZWxwZXJMaWINCj4gPiAgICAgPiArICBCYXNlTWVtb3J5 TGliDQo+ID4gICAgID4gKyAgTWVtb3J5QWxsb2NhdGlvbkxpYg0KPiA+ICAgICA+IGRpZmYgLS1n aXQNCj4gPiAgICAgPg0KPiA+DQo+IGEvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Q cm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZVJ1bnRpbWVEDQo+ID4gICAgID4geGUuaW5mDQo+ ID4gICAgID4NCj4gPg0KPiBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVj dGVkL1J1bnRpbWVEeGUvVmFyaWFibGVSdW50aW1lRA0KPiA+ICAgICA+IHhlLmluZg0KPiA+ICAg ICA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gICAgID4gaW5kZXggMDAwMDAwMDAwMDAwLi42 YWRjMmM2MzZlODQNCj4gPiAgICAgPiAtLS0gL2Rldi9udWxsDQo+ID4gICAgID4gKysrDQo+ID4g ICAgID4NCj4gPg0KPiBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVk L1J1bnRpbWVEeGUvVmFyaWFibGVSdW50aW1lRA0KPiA+ICAgICA+IHhlLmluZg0KPiA+ICAgICA+ IEBAIC0wLDAgKzEsMTUxIEBADQo+ID4gICAgID4gKyMjIEBmaWxlDQo+ID4gICAgID4gKyMgIFBy b3ZpZGVzIHZhcmlhYmxlIHNlcnZpY2UuDQo+ID4gICAgID4gKyMNCj4gPiAgICAgPiArIyAgVGhp cyBtb2R1bGUgaW5zdGFsbHMgdmFyaWFibGUgYXJjaCBwcm90b2NvbCBhbmQgdmFyaWFibGUgd3Jp dGUgYXJjaA0KPiA+IHByb3RvY29sDQo+ID4gICAgID4gdG8gcHJvdmlkZQ0KPiA+ICAgICA+ICsj ICB2YXJpYWJsZSBzZXJ2aWNlczogU2V0VmFyaWFibGUsIEdldFZhcmlhYmxlLCBHZXROZXh0VmFy aWFibGVOYW1lIGFuZA0KPiA+ICAgICA+IFF1ZXJ5VmFyaWFibGVJbmZvLg0KPiA+ICAgICA+ICsj DQo+ID4gICAgID4gKyMgIENhdXRpb246IFRoaXMgbW9kdWxlIHJlcXVpcmVzIGFkZGl0aW9uYWwg cmV2aWV3IHdoZW4gbW9kaWZpZWQuDQo+ID4gICAgID4gKyMgIFRoaXMgZHJpdmVyIHdpbGwgaGF2 ZSBleHRlcm5hbCBpbnB1dCAtIHZhcmlhYmxlIGRhdGEuDQo+ID4gICAgID4gKyMgIFRoaXMgZXh0 ZXJuYWwgaW5wdXQgbXVzdCBiZSB2YWxpZGF0ZWQgY2FyZWZ1bGx5IHRvIGF2b2lkIHNlY3VyaXR5 IGlzc3Vlcw0KPiA+IHN1Y2gNCj4gPiAgICAgPiBhcw0KPiA+ICAgICA+ICsjICBidWZmZXIgb3Zl cmZsb3cgb3IgaW50ZWdlciBvdmVyZmxvdy4NCj4gPiAgICAgPiArIw0KPiA+ICAgICA+ICsjIENv cHlyaWdodCAoYykgMjAwNiAtIDIwMjIsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl c2VydmVkLjxCUj4NCj4gPiAgICAgPiArIyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3Jh dGlvbi4NCj4gPiAgICAgPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNl LVBhdGVudA0KPiA+ICAgICA+ICsjDQo+ID4gICAgID4gKyMjDQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICtbRGVmaW5lc10NCj4gPiAgICAgPiArICBJTkZfVkVSU0lPTiAgICAgICAgICAgICAgICAg ICAgPSAweDAwMDEwMDA1DQo+ID4gICAgID4gKyAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAg ICAgID0gVmFyaWFibGVSdW50aW1lRHhlDQo+ID4gICAgID4gKyAgTU9EVUxFX1VOSV9GSUxFICAg ICAgICAgICAgICAgID0gVmFyaWFibGVSdW50aW1lRHhlLnVuaQ0KPiA+ICAgICA+ICsgIEZJTEVf R1VJRCAgICAgICAgICAgICAgICAgICAgICA9IDE0NkY0NDQ4LTU2QkYtNDA1Qy1BOEM0LUI3N0ZG RDI0QkUwMA0KPiA+ICAgICA+ICsgIE1PRFVMRV9UWVBFICAgICAgICAgICAgICAgICAgICA9IERY RV9SVU5USU1FX0RSSVZFUg0KPiA+ICAgICA+ICsgIFZFUlNJT05fU1RSSU5HICAgICAgICAgICAg ICAgICA9IDEuMA0KPiA+ICAgICA+ICsgIEVOVFJZX1BPSU5UICAgICAgICAgICAgICAgICAgICA9 IFZhcmlhYmxlU2VydmljZUluaXRpYWxpemUNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyMNCj4g PiAgICAgPiArIyBUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlzIGZvciByZWZlcmVuY2Ugb25s eSBhbmQgbm90IHJlcXVpcmVkIGJ5IHRoZQ0KPiA+IGJ1aWxkDQo+ID4gICAgID4gdG9vbHMuDQo+ ID4gICAgID4gKyMNCj4gPiAgICAgPiArIyAgVkFMSURfQVJDSElURUNUVVJFUyAgICAgICAgICAg PSBJQTMyIFg2NCBFQkMNCj4gPiAgICAgPiArIw0KPiA+ICAgICA+ICsjICBWSVJUVUFMX0FERFJF U1NfTUFQX0NBTExCQUNLICA9DQo+ID4gVmFyaWFibGVDbGFzc0FkZHJlc3NDaGFuZ2VFdmVudA0K PiA+ICAgICA+ICsjDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICtbU291cmNlc10NCj4gPiAgICAg PiArICBSZWNsYWltLmMNCj4gPiAgICAgPiArICBWYXJpYWJsZS5jDQo+ID4gICAgID4gKyAgVmFy aWFibGVEeGUuYw0KPiA+ICAgICA+ICsgIFZhcmlhYmxlLmgNCj4gPiAgICAgPiArICBWYXJpYWJs ZU5vblZvbGF0aWxlLmMNCj4gPiAgICAgPiArICBWYXJpYWJsZU5vblZvbGF0aWxlLmgNCj4gPiAg ICAgPiArICBWYXJpYWJsZVBhcnNpbmcuYw0KPiA+ICAgICA+ICsgIFZhcmlhYmxlUGFyc2luZy5o DQo+ID4gICAgID4gKyAgVmFyaWFibGVSdW50aW1lQ2FjaGUuYw0KPiA+ICAgICA+ICsgIFZhcmlh YmxlUnVudGltZUNhY2hlLmgNCj4gPiAgICAgPiArICBQcml2aWxlZ2VQb2x5bW9ycGhpYy5oDQo+ ID4gICAgID4gKyAgTWVhc3VyZW1lbnQuYw0KPiA+ICAgICA+ICsgIFRjZ01vckxvY2tEeGUuYw0K PiA+ICAgICA+ICsgIFZhckNoZWNrLmMNCj4gPiAgICAgPiArICBWYXJpYWJsZUV4TGliLmMNCj4g PiAgICAgPiArICBTcGVjdWxhdGlvbkJhcnJpZXJEeGUuYw0KPiA+ICAgICA+ICsgIFZhcmlhYmxl TG9ja1JlcXVlc3RUb0xvY2suYw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArW1BhY2thZ2VzXQ0K PiA+ICAgICA+ICsgIE1kZVBrZy9NZGVQa2cuZGVjDQo+ID4gICAgID4gKyAgTWRlTW9kdWxlUGtn L01kZU1vZHVsZVBrZy5kZWMNCj4gPiAgICAgPiArDQo+ID4gICAgID4gK1tMaWJyYXJ5Q2xhc3Nl c10NCj4gPiAgICAgPiArICBNZW1vcnlBbGxvY2F0aW9uTGliDQo+ID4gICAgID4gKyAgQmFzZUxp Yg0KPiA+ICAgICA+ICsgIFN5bmNocm9uaXphdGlvbkxpYg0KPiA+ICAgICA+ICsgIFVlZmlMaWIN Cj4gPiAgICAgPiArICBVZWZpQm9vdFNlcnZpY2VzVGFibGVMaWINCj4gPiAgICAgPiArICBCYXNl TWVtb3J5TGliDQo+ID4gICAgID4gKyAgRGVidWdMaWINCj4gPiAgICAgPiArICBVZWZpUnVudGlt ZUxpYg0KPiA+ICAgICA+ICsgIER4ZVNlcnZpY2VzVGFibGVMaWINCj4gPiAgICAgPiArICBVZWZp RHJpdmVyRW50cnlQb2ludA0KPiA+ICAgICA+ICsgIFBjZExpYg0KPiA+ICAgICA+ICsgIEhvYkxp Yg0KPiA+ICAgICA+ICsgIFRwbU1lYXN1cmVtZW50TGliDQo+ID4gICAgID4gKyAgQXV0aFZhcmlh YmxlTGliDQo+ID4gICAgID4gKyAgVmFyQ2hlY2tMaWINCj4gPiAgICAgPiArICBWYXJpYWJsZUZs YXNoSW5mb0xpYg0KPiA+ICAgICA+ICsgIFZhcmlhYmxlUG9saWN5TGliDQo+ID4gICAgID4gKyAg VmFyaWFibGVQb2xpY3lIZWxwZXJMaWINCj4gPiAgICAgPiArICBTYWZlSW50TGliDQo+ID4gICAg ID4gKyAgUHJvdGVjdGVkVmFyaWFibGVMaWINCj4gPiAgICAgPiArDQo+ID4gICAgID4gK1tQcm90 b2NvbHNdDQo+ID4gICAgID4gKyAgZ0VmaUZpcm13YXJlVm9sdW1lQmxvY2tQcm90b2NvbEd1aWQg ICAgICAgICAgICMjIENPTlNVTUVTDQo+ID4gICAgID4gKyAgIyMgQ09OU1VNRVMNCj4gPiAgICAg PiArICAjIyBOT1RJRlkNCj4gPiAgICAgPiArICBnRWZpRmF1bHRUb2xlcmFudFdyaXRlUHJvdG9j b2xHdWlkDQo+ID4gICAgID4gKyAgZ0VmaVZhcmlhYmxlV3JpdGVBcmNoUHJvdG9jb2xHdWlkICAg ICAgICAgICAgICMjIFBST0RVQ0VTDQo+ID4gICAgID4gKyAgZ0VmaVZhcmlhYmxlQXJjaFByb3Rv Y29sR3VpZCAgICAgICAgICAgICAgICAgICMjIFBST0RVQ0VTDQo+ID4gICAgID4gKyAgZ0Vka2lp VmFyaWFibGVMb2NrUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICMjIFBST0RVQ0VTDQo+ID4g ICAgID4gKyAgZ0Vka2lpVmFyaWFibGVQb2xpY3lQcm90b2NvbEd1aWQgICAgICAgICAgICAgICMj IENPTlNVTUVTDQo+ID4gICAgID4gKyAgZ0Vka2lpVmFyQ2hlY2tQcm90b2NvbEd1aWQgICAgICAg ICAgICAgICAgICAgICMjIFBST0RVQ0VTDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICtbR3VpZHNd DQo+ID4gICAgID4gKyAgIyMgU09NRVRJTUVTX0NPTlNVTUVTICAgIyMgR1VJRCAjIFNpZ25hdHVy ZSBvZiBWYXJpYWJsZSBzdG9yZQ0KPiA+IGhlYWRlcg0KPiA+ICAgICA+ICsgICMjIFNPTUVUSU1F U19QUk9EVUNFUyAgICMjIEdVSUQgIyBTaWduYXR1cmUgb2YgVmFyaWFibGUgc3RvcmUNCj4gaGVh ZGVyDQo+ID4gICAgID4gKyAgIyMgU09NRVRJTUVTX0NPTlNVTUVTICAgIyMgSE9CDQo+ID4gICAg ID4gKyAgIyMgU09NRVRJTUVTX1BST0RVQ0VTICAgIyMgU3lzdGVtVGFibGUNCj4gPiAgICAgPiAr ICBnRWZpQXV0aGVudGljYXRlZFZhcmlhYmxlR3VpZA0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr ICAjIyBTT01FVElNRVNfQ09OU1VNRVMgICAjIyBHVUlEICMgU2lnbmF0dXJlIG9mIFZhcmlhYmxl IHN0b3JlDQo+ID4gaGVhZGVyDQo+ID4gICAgID4gKyAgIyMgU09NRVRJTUVTX1BST0RVQ0VTICAg IyMgR1VJRCAjIFNpZ25hdHVyZSBvZiBWYXJpYWJsZSBzdG9yZQ0KPiBoZWFkZXINCj4gPiAgICAg PiArICAjIyBTT01FVElNRVNfQ09OU1VNRVMgICAjIyBIT0INCj4gPiAgICAgPiArICAjIyBTT01F VElNRVNfUFJPRFVDRVMgICAjIyBTeXN0ZW1UYWJsZQ0KPiA+ICAgICA+ICsgIGdFZmlWYXJpYWJs ZUd1aWQNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgIyMgU09NRVRJTUVTX0NPTlNVTUVTICAg IyMgVmFyaWFibGU6TCJQbGF0Zm9ybUxhbmciDQo+ID4gICAgID4gKyAgIyMgU09NRVRJTUVTX1BS T0RVQ0VTICAgIyMgVmFyaWFibGU6TCJQbGF0Zm9ybUxhbmciDQo+ID4gICAgID4gKyAgIyMgU09N RVRJTUVTX0NPTlNVTUVTICAgIyMgVmFyaWFibGU6TCJMYW5nIg0KPiA+ICAgICA+ICsgICMjIFNP TUVUSU1FU19QUk9EVUNFUyAgICMjIFZhcmlhYmxlOkwiTGFuZyINCj4gPiAgICAgPiArICAjIyBT T01FVElNRVNfQ09OU1VNRVMgICAjIyBWYXJpYWJsZTpMIlBLIg0KPiA+ICAgICA+ICsgICMjIFNP TUVUSU1FU19DT05TVU1FUyAgICMjIFZhcmlhYmxlOkwiS0VLIg0KPiA+ICAgICA+ICsgICMjIFNP TUVUSU1FU19DT05TVU1FUyAgICMjIFZhcmlhYmxlOkwiU2VjdXJlQm9vdCINCj4gPiAgICAgPiAr ICBnRWZpR2xvYmFsVmFyaWFibGVHdWlkDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIGdFZmlN ZW1vcnlPdmVyd3JpdGVDb250cm9sRGF0YUd1aWQgICAgICAgICAgICAjIw0KPiBTT01FVElNRVNf Q09OU1VNRVMNCj4gPiAjIw0KPiA+ICAgICA+IFZhcmlhYmxlOkwiTWVtb3J5T3ZlcndyaXRlUmVx dWVzdENvbnRyb2wiDQo+ID4gICAgID4gKyAgZ0VmaU1lbW9yeU92ZXJ3cml0ZVJlcXVlc3RDb250 cm9sTG9ja0d1aWQgICAgICMjDQo+ID4gU09NRVRJTUVTX1BST0RVQ0VTDQo+ID4gICAgID4gIyMg VmFyaWFibGU6TCJNZW1vcnlPdmVyd3JpdGVSZXF1ZXN0Q29udHJvbExvY2siDQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsgIGdFZmlFdmVudFZpcnR1YWxBZGRyZXNzQ2hhbmdlR3VpZCAgICAgICAg ICAgICAjIyBDT05TVU1FUyAgICAgICAgICAgICAjIw0KPiBFdmVudA0KPiA+ICAgICA+ICsgIGdF ZmlTeXN0ZW1OdkRhdGFGdkd1aWQgICAgICAgICAgICAgICAgICAgICAgICAjIyBDT05TVU1FUyAg ICAgICAgICAgICAjIyBHVUlEDQo+ID4gICAgID4gKyAgZ0VmaUVuZE9mRHhlRXZlbnRHcm91cEd1 aWQgICAgICAgICAgICAgICAgICAgICMjIENPTlNVTUVTICAgICAgICAgICAgICMjIEV2ZW50DQo+ ID4gICAgID4gKyAgZ0Vka2lpRmF1bHRUb2xlcmFudFdyaXRlR3VpZCAgICAgICAgICAgICAgICAg ICMjIFNPTUVUSU1FU19DT05TVU1FUyAgICMjDQo+ID4gSE9CDQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsgICMjIFNPTUVUSU1FU19DT05TVU1FUyAgICMjIFZhcmlhYmxlOkwiVmFyRXJyb3JGbGFn Ig0KPiA+ICAgICA+ICsgICMjIFNPTUVUSU1FU19QUk9EVUNFUyAgICMjIFZhcmlhYmxlOkwiVmFy RXJyb3JGbGFnIg0KPiA+ICAgICA+ICsgIGdFZGtpaVZhckVycm9yRmxhZ0d1aWQNCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyAgIyMgU09NRVRJTUVTX0NPTlNVTUVTICAgIyMgVmFyaWFibGU6TCJk YiINCj4gPiAgICAgPiArICAjIyBTT01FVElNRVNfQ09OU1VNRVMgICAjIyBWYXJpYWJsZTpMImRi eCINCj4gPiAgICAgPiArICAjIyBTT01FVElNRVNfQ09OU1VNRVMgICAjIyBWYXJpYWJsZTpMImRi dCINCj4gPiAgICAgPiArICBnRWZpSW1hZ2VTZWN1cml0eURhdGFiYXNlR3VpZA0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArW1BjZF0NCj4gPiAgICAgPiArICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5T cGFjZUd1aWQuUGNkTWF4VmFyaWFibGVTaXplICAgICAgICAgICAgICAgICAjIw0KPiA+ICAgICA+ IENPTlNVTUVTDQo+ID4gICAgID4gKyAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBj ZE1heEF1dGhWYXJpYWJsZVNpemUgICAgICAgICAgICAgIyMNCj4gPiAgICAgPiBDT05TVU1FUw0K PiA+ICAgICA+ICsgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RNYXhWb2xhdGls ZVZhcmlhYmxlU2l6ZSAgICAgICAgICMjDQo+ID4gICAgID4gQ09OU1VNRVMNCj4gPiAgICAgPiAr ICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkTWF4SGFyZHdhcmVFcnJvclZhcmlh YmxlU2l6ZQ0KPiA+ICMjDQo+ID4gICAgID4gQ09OU1VNRVMNCj4gPiAgICAgPiArICBnRWZpTWRl TW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkVmFyaWFibGVTdG9yZVNpemUgICAgICAgICAgICAg ICAjIw0KPiA+ICAgICA+IENPTlNVTUVTDQo+ID4gICAgID4gKyAgZ0VmaU1kZU1vZHVsZVBrZ1Rv a2VuU3BhY2VHdWlkLlBjZEh3RXJyU3RvcmFnZVNpemUgICAgICAgICAgICAgICAgIyMNCj4gPiAg ICAgPiBDT05TVU1FUw0KPiA+ICAgICA+ICsgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3Vp ZC5QY2RNYXhVc2VyTnZWYXJpYWJsZVNwYWNlU2l6ZQ0KPiA+ICAgICA+ICMjIENPTlNVTUVTDQo+ ID4gICAgID4gKw0KPiA+ICAgICA+DQo+ID4NCj4gZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VH dWlkLlBjZEJvb3R0aW1lUmVzZXJ2ZWROdlZhcmlhYmxlU3BhY2VTaXplDQo+ID4gICAgID4gIyMg Q09OU1VNRVMNCj4gPiAgICAgPiArDQo+ID4gZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlk LlBjZFJlY2xhaW1WYXJpYWJsZVNwYWNlQXRFbmRPZkR4ZSAgIyMNCj4gPiAgICAgPiBDT05TVU1F Uw0KPiA+ICAgICA+ICsgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RFbXVWYXJp YWJsZU52TW9kZUVuYWJsZQ0KPiA+ICMjDQo+ID4gICAgID4gU09NRVRJTUVTX0NPTlNVTUVTDQo+ ID4gICAgID4gKyAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEVtdVZhcmlhYmxl TnZTdG9yZVJlc2VydmVkDQo+ID4gIyMNCj4gPiAgICAgPiBTT01FVElNRVNfQ09OU1VNRVMNCj4g PiAgICAgPiArDQo+ID4gICAgID4gK1tGZWF0dXJlUGNkXQ0KPiA+ICAgICA+ICsgIGdFZmlNZGVN b2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RWYXJpYWJsZUNvbGxlY3RTdGF0aXN0aWNzICAjIw0K PiA+ICAgICA+IENPTlNVTUVTICMgc3RhdGlzdGljIHRoZSBpbmZvcm1hdGlvbiBvZiB2YXJpYWJs ZS4NCj4gPiAgICAgPiArICBnRWZpTWRlUGtnVG9rZW5TcGFjZUd1aWQuUGNkVWVmaVZhcmlhYmxl RGVmYXVsdExhbmdEZXByZWNhdGUgIyMNCj4gPiAgICAgPiBDT05TVU1FUyAjIEF1dG8gdXBkYXRl IFBsYXRmb3JtTGFuZy9MYW5nDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICtbRGVwZXhdDQo+ID4g ICAgID4gKyAgVFJVRQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArW1VzZXJFeHRlbnNpb25zLlRp YW5vQ29yZS4iRXh0cmFGaWxlcyJdDQo+ID4gICAgID4gKyAgVmFyaWFibGVSdW50aW1lRHhlRXh0 cmEudW5pDQo+ID4gICAgID4gZGlmZiAtLWdpdA0KPiA+ICAgICA+DQo+ID4gYS9NZGVNb2R1bGVQ a2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlU21tLmlu Zg0KPiA+ICAgICA+DQo+ID4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3Rl Y3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlU21tLmluZg0KPiA+ICAgICA+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0DQo+ID4gICAgID4gaW5kZXggMDAwMDAwMDAwMDAwLi4yNjUxZWM1MTRkZjMNCj4gPiAg ICAgPiAtLS0gL2Rldi9udWxsDQo+ID4gICAgID4gKysrDQo+ID4gICAgID4NCj4gPiBiL01kZU1v ZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVT bW0uaW5mDQo+ID4gICAgID4gQEAgLTAsMCArMSwxNTMgQEANCj4gPiAgICAgPiArIyMgQGZpbGUN Cj4gPiAgICAgPiArIyAgUHJvdmlkZXMgU01NIHZhcmlhYmxlIHNlcnZpY2UuDQo+ID4gICAgID4g KyMNCj4gPiAgICAgPiArIyAgVGhpcyBtb2R1bGUgaW5zdGFsbHMgU01NIHZhcmlhYmxlIHByb3Rv Y29sIGludG8gU01NIHByb3RvY29sDQo+IGRhdGFiYXNlLA0KPiA+ICAgICA+ICsjICB3aGljaCBj YW4gYmUgdXNlZCBieSBTTU0gZHJpdmVyLCBhbmQgaW5zdGFsbHMgU01NIHZhcmlhYmxlIHByb3Rv Y29sDQo+ID4gICAgID4gKyMgIGludG8gQlMgcHJvdG9jb2wgZGF0YWJhc2UsIHdoaWNoIGNhbiBi ZSB1c2VkIHRvIG5vdGlmeSB0aGUgU01NDQo+IFJ1bnRpbWUNCj4gPiAgICAgPiArIyAgRHhlIGRy aXZlciB0aGF0IHRoZSBTTU0gdmFyaWFibGUgc2VydmljZSBpcyByZWFkeS4NCj4gPiAgICAgPiAr IyAgVGhpcyBtb2R1bGUgc2hvdWxkIGJlIHVzZWQgd2l0aCBTTU0gUnVudGltZSBEWEUgbW9kdWxl IHRvZ2V0aGVyLg0KPiA+IFRoZQ0KPiA+ICAgICA+ICsjICBTTU0gUnVudGltZSBEWEUgbW9kdWxl IHdvdWxkIGluc3RhbGwgdmFyaWFibGUgYXJjaCBwcm90b2NvbCBhbmQNCj4gPiB2YXJpYWJsZQ0K PiA+ICAgICA+ICsjICB3cml0ZSBhcmNoIHByb3RvY29sIGJhc2VkIG9uIFNNTSB2YXJpYWJsZSBt b2R1bGUuDQo+ID4gICAgID4gKyMNCj4gPiAgICAgPiArIyAgQ2F1dGlvbjogVGhpcyBtb2R1bGUg cmVxdWlyZXMgYWRkaXRpb25hbCByZXZpZXcgd2hlbiBtb2RpZmllZC4NCj4gPiAgICAgPiArIyAg VGhpcyBkcml2ZXIgd2lsbCBoYXZlIGV4dGVybmFsIGlucHV0IC0gdmFyaWFibGUgZGF0YSBhbmQg Y29tbXVuaWNhdGUNCj4gPiBidWZmZXIgaW4NCj4gPiAgICAgPiBTTU0gbW9kZS4NCj4gPiAgICAg PiArIyAgVGhpcyBleHRlcm5hbCBpbnB1dCBtdXN0IGJlIHZhbGlkYXRlZCBjYXJlZnVsbHkgdG8g YXZvaWQgc2VjdXJpdHkgaXNzdWVzDQo+ID4gc3VjaA0KPiA+ICAgICA+IGFzDQo+ID4gICAgID4g KyMgIGJ1ZmZlciBvdmVyZmxvdyBvciBpbnRlZ2VyIG92ZXJmbG93Lg0KPiA+ICAgICA+ICsjICAg IFRoZSB3aG9sZSBTTU0gYXV0aGVudGljYXRpb24gdmFyaWFibGUgZGVzaWduIHJlbGllcyBvbiB0 aGUgaW50ZWdyaXR5DQo+IG9mDQo+ID4gICAgID4gZmxhc2ggcGFydCBhbmQgU01NLg0KPiA+ICAg ICA+ICsjICB3aGljaCBpcyBhc3N1bWVkIHRvIGJlIHByb3RlY3RlZCBieSBwbGF0Zm9ybS4gIEFs bCB2YXJpYWJsZSBjb2RlIGFuZA0KPiA+ICAgICA+IG1ldGFkYXRhIGluIGZsYXNoL1NNTSBNZW1v cnkNCj4gPiAgICAgPiArIyAgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IGF1dGhvcml6YXRp b24uIElmIHBsYXRmb3JtIGZhaWxzIHRvIHByb3RlY3QNCj4gPiB0aGVzZQ0KPiA+ICAgICA+IHJl c291cmNlcywNCj4gPiAgICAgPiArIyAgdGhlIGF1dGhlbnRpY2F0aW9uIHNlcnZpY2UgcHJvdmlk ZWQgaW4gdGhpcyBkcml2ZXIgd2lsbCBiZSBicm9rZW4sIGFuZA0KPiB0aGUNCj4gPiAgICAgPiBi ZWhhdmlvciBpcyB1bmRlZmluZWQuDQo+ID4gICAgID4gKyMNCj4gPiAgICAgPiArIyBDb3B5cmln aHQgKGMpIDIwMTAgLSAyMDIyLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl ZC48QlI+DQo+ID4gICAgID4gKyMgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24u DQo+ID4gICAgID4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRl bnQNCj4gPiAgICAgPiArIw0KPiA+ICAgICA+ICsjIw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr W0RlZmluZXNdDQo+ID4gICAgID4gKyAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgID0g MHgwMDAxMDAwNQ0KPiA+ICAgICA+ICsgIEJBU0VfTkFNRSAgICAgICAgICAgICAgICAgICAgICA9 IFZhcmlhYmxlU21tDQo+ID4gICAgID4gKyAgTU9EVUxFX1VOSV9GSUxFICAgICAgICAgICAgICAg ID0gVmFyaWFibGVTbW0udW5pDQo+ID4gICAgID4gKyAgRklMRV9HVUlEICAgICAgICAgICAgICAg ICAgICAgID0gMUMzMkZEREYtN0ZGMS00RUU1LUJEQTAtRUQ5QUFDNjIzRDNDDQo+ID4gICAgID4g KyAgTU9EVUxFX1RZUEUgICAgICAgICAgICAgICAgICAgID0gRFhFX1NNTV9EUklWRVINCj4gPiAg ICAgPiArICBWRVJTSU9OX1NUUklORyAgICAgICAgICAgICAgICAgPSAxLjANCj4gPiAgICAgPiAr ICBQSV9TUEVDSUZJQ0FUSU9OX1ZFUlNJT04gICAgICAgPSAweDAwMDEwMDBBDQo+ID4gICAgID4g KyAgRU5UUllfUE9JTlQgICAgICAgICAgICAgICAgICAgID0gVmFyaWFibGVTZXJ2aWNlSW5pdGlh bGl6ZQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArIw0KPiA+ICAgICA+ICsjIFRoZSBmb2xsb3dp bmcgaW5mb3JtYXRpb24gaXMgZm9yIHJlZmVyZW5jZSBvbmx5IGFuZCBub3QgcmVxdWlyZWQgYnkg dGhlDQo+ID4gYnVpbGQNCj4gPiAgICAgPiB0b29scy4NCj4gPiAgICAgPiArIw0KPiA+ICAgICA+ ICsjICBWQUxJRF9BUkNISVRFQ1RVUkVTICAgICAgICAgICA9IElBMzIgWDY0DQo+ID4gICAgID4g KyMNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICtbU291cmNlc10NCj4gPiAg ICAgPiArICBSZWNsYWltLmMNCj4gPiAgICAgPiArICBWYXJpYWJsZS5jDQo+ID4gICAgID4gKyAg VmFyaWFibGVUcmFkaXRpb25hbE1tLmMNCj4gPiAgICAgPiArICBWYXJpYWJsZVNtbS5jDQo+ID4g ICAgID4gKyAgVmFyaWFibGVOb25Wb2xhdGlsZS5jDQo+ID4gICAgID4gKyAgVmFyaWFibGVOb25W b2xhdGlsZS5oDQo+ID4gICAgID4gKyAgVmFyaWFibGVQYXJzaW5nLmMNCj4gPiAgICAgPiArICBW YXJpYWJsZVBhcnNpbmcuaA0KPiA+ICAgICA+ICsgIFZhcmlhYmxlUnVudGltZUNhY2hlLmMNCj4g PiAgICAgPiArICBWYXJpYWJsZVJ1bnRpbWVDYWNoZS5oDQo+ID4gICAgID4gKyAgVmFyQ2hlY2su Yw0KPiA+ICAgICA+ICsgIFZhcmlhYmxlLmgNCj4gPiAgICAgPiArICBQcml2aWxlZ2VQb2x5bW9y cGhpYy5oDQo+ID4gICAgID4gKyAgVmFyaWFibGVFeExpYi5jDQo+ID4gICAgID4gKyAgVGNnTW9y TG9ja1NtbS5jDQo+ID4gICAgID4gKyAgU3BlY3VsYXRpb25CYXJyaWVyU21tLmMNCj4gPiAgICAg PiArICBWYXJpYWJsZUxvY2tSZXF1ZXN0VG9Mb2NrLmMNCj4gPiAgICAgPiArDQo+ID4gICAgID4g K1tQYWNrYWdlc10NCj4gPiAgICAgPiArICBNZGVQa2cvTWRlUGtnLmRlYw0KPiA+ICAgICA+ICsg IE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVjDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICtb TGlicmFyeUNsYXNzZXNdDQo+ID4gICAgID4gKyAgVWVmaURyaXZlckVudHJ5UG9pbnQNCj4gPiAg ICAgPiArICBNZW1vcnlBbGxvY2F0aW9uTGliDQo+ID4gICAgID4gKyAgQmFzZUxpYg0KPiA+ICAg ICA+ICsgIFN5bmNocm9uaXphdGlvbkxpYg0KPiA+ICAgICA+ICsgIFVlZmlMaWINCj4gPiAgICAg PiArICBNbVNlcnZpY2VzVGFibGVMaWINCj4gPiAgICAgPiArICBCYXNlTWVtb3J5TGliDQo+ID4g ICAgID4gKyAgRGVidWdMaWINCj4gPiAgICAgPiArICBEeGVTZXJ2aWNlc1RhYmxlTGliDQo+ID4g ICAgID4gKyAgSG9iTGliDQo+ID4gICAgID4gKyAgUGNkTGliDQo+ID4gICAgID4gKyAgU21tTWVt TGliDQo+ID4gICAgID4gKyAgQXV0aFZhcmlhYmxlTGliDQo+ID4gICAgID4gKyAgVmFyQ2hlY2tM aWINCj4gPiAgICAgPiArICBVZWZpQm9vdFNlcnZpY2VzVGFibGVMaWINCj4gPiAgICAgPiArICBW YXJpYWJsZUZsYXNoSW5mb0xpYg0KPiA+ICAgICA+ICsgIFZhcmlhYmxlUG9saWN5TGliDQo+ID4g ICAgID4gKyAgVmFyaWFibGVQb2xpY3lIZWxwZXJMaWINCj4gPiAgICAgPiArICBTYWZlSW50TGli DQo+ID4gICAgID4gKyAgUHJvdGVjdGVkVmFyaWFibGVMaWINCj4gPiAgICAgPiArDQo+ID4gICAg ID4gK1tQcm90b2NvbHNdDQo+ID4gICAgID4gKyAgZ0VmaVNtbUZpcm13YXJlVm9sdW1lQmxvY2tQ cm90b2NvbEd1aWQgICAgICAgICMjIENPTlNVTUVTDQo+ID4gICAgID4gKyAgIyMgQ09OU1VNRVMN Cj4gPiAgICAgPiArICAjIyBOT1RJRlkNCj4gPiAgICAgPiArICBnRWZpU21tRmF1bHRUb2xlcmFu dFdyaXRlUHJvdG9jb2xHdWlkDQo+ID4gICAgID4gKyAgIyMgUFJPRFVDRVMNCj4gPiAgICAgPiAr ICAjIyBVTkRFRklORUQgIyBTbWlIYW5kbGVyUmVnaXN0ZXINCj4gPiAgICAgPiArICBnRWZpU21t VmFyaWFibGVQcm90b2NvbEd1aWQNCj4gPiAgICAgPiArICBnRWZpTW1FbmRPZkR4ZVByb3RvY29s R3VpZCAgICAgICAgICAgICAgICAgICAgIyMgTk9USUZZDQo+ID4gICAgID4gKyAgZ0Vka2lpU21t VmFyQ2hlY2tQcm90b2NvbEd1aWQgICAgICAgICAgICAgICAgICMjIFBST0RVQ0VTDQo+ID4gICAg ID4gKyAgZ0VmaVRjZ1Byb3RvY29sR3VpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIFNP TUVUSU1FU19DT05TVU1FUw0KPiA+ICAgICA+ICsgIGdFZmlUY2cyUHJvdG9jb2xHdWlkICAgICAg ICAgICAgICAgICAgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMNCj4gPiAgICAgPiArDQo+ ID4gICAgID4gK1tHdWlkc10NCj4gPiAgICAgPiArICAjIyBTT01FVElNRVNfQ09OU1VNRVMgICAj IyBHVUlEICMgU2lnbmF0dXJlIG9mIFZhcmlhYmxlIHN0b3JlDQo+ID4gaGVhZGVyDQo+ID4gICAg ID4gKyAgIyMgU09NRVRJTUVTX1BST0RVQ0VTICAgIyMgR1VJRCAjIFNpZ25hdHVyZSBvZiBWYXJp YWJsZSBzdG9yZQ0KPiBoZWFkZXINCj4gPiAgICAgPiArICAjIyBTT01FVElNRVNfQ09OU1VNRVMg ICAjIyBIT0INCj4gPiAgICAgPiArICAjIyBTT01FVElNRVNfUFJPRFVDRVMgICAjIyBTeXN0ZW1U YWJsZQ0KPiA+ICAgICA+ICsgIGdFZmlBdXRoZW50aWNhdGVkVmFyaWFibGVHdWlkDQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgICMjIFNPTUVUSU1FU19DT05TVU1FUyAgICMjIEdVSUQgIyBTaWdu YXR1cmUgb2YgVmFyaWFibGUgc3RvcmUNCj4gPiBoZWFkZXINCj4gPiAgICAgPiArICAjIyBTT01F VElNRVNfUFJPRFVDRVMgICAjIyBHVUlEICMgU2lnbmF0dXJlIG9mIFZhcmlhYmxlIHN0b3JlDQo+ IGhlYWRlcg0KPiA+ICAgICA+ICsgICMjIFNPTUVUSU1FU19DT05TVU1FUyAgICMjIEhPQg0KPiA+ ICAgICA+ICsgICMjIFNPTUVUSU1FU19QUk9EVUNFUyAgICMjIFN5c3RlbVRhYmxlDQo+ID4gICAg ID4gKyAgZ0VmaVZhcmlhYmxlR3VpZA0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAjIyBTT01F VElNRVNfQ09OU1VNRVMgICAjIyBWYXJpYWJsZTpMIlBsYXRmb3JtTGFuZyINCj4gPiAgICAgPiAr ICAjIyBTT01FVElNRVNfUFJPRFVDRVMgICAjIyBWYXJpYWJsZTpMIlBsYXRmb3JtTGFuZyINCj4g PiAgICAgPiArICAjIyBTT01FVElNRVNfQ09OU1VNRVMgICAjIyBWYXJpYWJsZTpMIkxhbmciDQo+ ID4gICAgID4gKyAgIyMgU09NRVRJTUVTX1BST0RVQ0VTICAgIyMgVmFyaWFibGU6TCJMYW5nIg0K PiA+ICAgICA+ICsgIGdFZmlHbG9iYWxWYXJpYWJsZUd1aWQNCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgZ0VmaU1lbW9yeU92ZXJ3cml0ZUNvbnRyb2xEYXRhR3VpZCAgICAgICAgICAgICMjDQo+ IFNPTUVUSU1FU19DT05TVU1FUw0KPiA+ICMjDQo+ID4gICAgID4gVmFyaWFibGU6TCJNZW1vcnlP dmVyd3JpdGVSZXF1ZXN0Q29udHJvbCINCj4gPiAgICAgPiArICBnRWZpTWVtb3J5T3ZlcndyaXRl UmVxdWVzdENvbnRyb2xMb2NrR3VpZCAgICAgIyMNCj4gPiBTT01FVElNRVNfUFJPRFVDRVMNCj4g PiAgICAgPiAjIyBWYXJpYWJsZTpMIk1lbW9yeU92ZXJ3cml0ZVJlcXVlc3RDb250cm9sTG9jayIN Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgZ1NtbVZhcmlhYmxlV3JpdGVHdWlkICAgICAgICAg ICAgICAgICAgICAgICAgICMjIFBST0RVQ0VTICAgICAgICAgICAgICMjIEdVSUQgIw0KPiA+IElu c3RhbGwNCj4gPiAgICAgPiBwcm90b2NvbA0KPiA+ICAgICA+ICsgIGdFZmlTeXN0ZW1OdkRhdGFG dkd1aWQgICAgICAgICAgICAgICAgICAgICAgICAjIyBDT05TVU1FUyAgICAgICAgICAgICAjIyBH VUlEDQo+ID4gICAgID4gKyAgZ0Vka2lpRmF1bHRUb2xlcmFudFdyaXRlR3VpZCAgICAgICAgICAg ICAgICAgICMjIFNPTUVUSU1FU19DT05TVU1FUyAgICMjDQo+ID4gSE9CDQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgICMjIFNPTUVUSU1FU19DT05TVU1FUyAgICMjIFZhcmlhYmxlOkwiVmFyRXJy b3JGbGFnIg0KPiA+ICAgICA+ICsgICMjIFNPTUVUSU1FU19QUk9EVUNFUyAgICMjIFZhcmlhYmxl OkwiVmFyRXJyb3JGbGFnIg0KPiA+ICAgICA+ICsgIGdFZGtpaVZhckVycm9yRmxhZ0d1aWQNCj4g PiAgICAgPiArDQo+ID4gICAgID4gK1tQY2RdDQo+ID4gICAgID4gKyAgZ0VmaU1kZU1vZHVsZVBr Z1Rva2VuU3BhY2VHdWlkLlBjZE1heFZhcmlhYmxlU2l6ZSAgICAgICAgICAgICAgICAgICMjDQo+ ID4gICAgID4gQ09OU1VNRVMNCj4gPiAgICAgPiArICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFj ZUd1aWQuUGNkTWF4QXV0aFZhcmlhYmxlU2l6ZSAgICAgICAgICAgICAgIyMNCj4gPiAgICAgPiBD T05TVU1FUw0KPiA+ICAgICA+ICsgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RN YXhWb2xhdGlsZVZhcmlhYmxlU2l6ZSAgICAgICAgICAjIw0KPiA+ICAgICA+IENPTlNVTUVTDQo+ ID4gICAgID4gKyAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZE1heEhhcmR3YXJl RXJyb3JWYXJpYWJsZVNpemUNCj4gPiAjIw0KPiA+ICAgICA+IENPTlNVTUVTDQo+ID4gICAgID4g KyAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFZhcmlhYmxlU3RvcmVTaXplICAg ICAgICAgICAgICAgICMjDQo+ID4gICAgID4gQ09OU1VNRVMNCj4gPiAgICAgPiArICBnRWZpTWRl TW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkSHdFcnJTdG9yYWdlU2l6ZSAgICAgICAgICAgICAg ICAgIyMNCj4gPiAgICAgPiBDT05TVU1FUw0KPiA+ICAgICA+ICsgIGdFZmlNZGVNb2R1bGVQa2dU b2tlblNwYWNlR3VpZC5QY2RNYXhVc2VyTnZWYXJpYWJsZVNwYWNlU2l6ZQ0KPiA+ICAgICA+ICMj IENPTlNVTUVTDQo+ID4gICAgID4gKw0KPiA+ICAgICA+DQo+ID4NCj4gZ0VmaU1kZU1vZHVsZVBr Z1Rva2VuU3BhY2VHdWlkLlBjZEJvb3R0aW1lUmVzZXJ2ZWROdlZhcmlhYmxlU3BhY2VTaXplDQo+ ID4gICAgID4gIyMgQ09OU1VNRVMNCj4gPiAgICAgPiArDQo+ID4gZ0VmaU1kZU1vZHVsZVBrZ1Rv a2VuU3BhY2VHdWlkLlBjZFJlY2xhaW1WYXJpYWJsZVNwYWNlQXRFbmRPZkR4ZQ0KPiA+ICAgICA+ ICMjIENPTlNVTUVTDQo+ID4gICAgID4gKyAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlk LlBjZEVtdVZhcmlhYmxlTnZNb2RlRW5hYmxlDQo+ID4gIyMNCj4gPiAgICAgPiBTT01FVElNRVNf Q09OU1VNRVMNCj4gPiAgICAgPiArICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNk RW11VmFyaWFibGVOdlN0b3JlUmVzZXJ2ZWQNCj4gPiAjIw0KPiA+ICAgICA+IFNPTUVUSU1FU19D T05TVU1FUw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArW0ZlYXR1cmVQY2RdDQo+ID4gICAgID4g KyAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFZhcmlhYmxlQ29sbGVjdFN0YXRp c3RpY3MgICAgICAgICMjDQo+ID4gICAgID4gQ09OU1VNRVMgICMgc3RhdGlzdGljIHRoZSBpbmZv cm1hdGlvbiBvZiB2YXJpYWJsZS4NCj4gPiAgICAgPiArICBnRWZpTWRlUGtnVG9rZW5TcGFjZUd1 aWQuUGNkVWVmaVZhcmlhYmxlRGVmYXVsdExhbmdEZXByZWNhdGUNCj4gIyMNCj4gPiAgICAgPiBD T05TVU1FUyAgIyBBdXRvIHVwZGF0ZSBQbGF0Zm9ybUxhbmcvTGFuZw0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArW0RlcGV4XQ0KPiA+ICAgICA+ICsgIFRSVUUNCj4gPiAgICAgPiArDQo+ID4gICAg ID4gK1tVc2VyRXh0ZW5zaW9ucy5UaWFub0NvcmUuIkV4dHJhRmlsZXMiXQ0KPiA+ICAgICA+ICsg IFZhcmlhYmxlU21tRXh0cmEudW5pDQo+ID4gICAgID4gZGlmZiAtLWdpdA0KPiA+ICAgICA+DQo+ ID4NCj4gYS9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1l RHhlL1ZhcmlhYmxlU21tUnVudA0KPiA+ICAgICA+IGltZUR4ZS5pbmYNCj4gPiAgICAgPg0KPiA+ DQo+IGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4 ZS9WYXJpYWJsZVNtbVJ1bnQNCj4gPiAgICAgPiBpbWVEeGUuaW5mDQo+ID4gICAgID4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gPiAgICAgPiBpbmRleCAwMDAwMDAwMDAwMDAuLjBkMTY5OTEzYzlj OQ0KPiA+ICAgICA+IC0tLSAvZGV2L251bGwNCj4gPiAgICAgPiArKysNCj4gPiAgICAgPg0KPiA+ DQo+IGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4 ZS9WYXJpYWJsZVNtbVJ1bnQNCj4gPiAgICAgPiBpbWVEeGUuaW5mDQo+ID4gICAgID4gQEAgLTAs MCArMSwxMTkgQEANCj4gPiAgICAgPiArIyMgQGZpbGUNCj4gPiAgICAgPiArIyAgUnVudGltZSBE WEUgcGFydCBjb3JyZXNwb25kaW5nIHRvIFNNTSBhdXRoZW50aWNhdGVkIHZhcmlhYmxlDQo+IG1v ZHVsZS4NCj4gPiAgICAgPiArIw0KPiA+ICAgICA+ICsjICBUaGlzIG1vZHVsZSBpbnN0YWxscyB2 YXJpYWJsZSBhcmNoIHByb3RvY29sIGFuZCB2YXJpYWJsZSB3cml0ZSBhcmNoDQo+ID4gcHJvdG9j b2wNCj4gPiAgICAgPiB0byBwcm92aWRlDQo+ID4gICAgID4gKyMgIHZhcmlhYmxlIHNlcnZpY2Uu IFRoaXMgbW9kdWxlIG5lZWQgd29yayB0b2dldGhlciB3aXRoIFNNTQ0KPiA+IGF1dGhlbnRpY2F0 ZWQNCj4gPiAgICAgPiB2YXJpYWJsZSBtb2R1bGUuDQo+ID4gICAgID4gKyMNCj4gPiAgICAgPiAr IyAgQ2F1dGlvbjogVGhpcyBtb2R1bGUgcmVxdWlyZXMgYWRkaXRpb25hbCByZXZpZXcgd2hlbiBt b2RpZmllZC4NCj4gPiAgICAgPiArIyAgVGhpcyBkcml2ZXIgd2lsbCBoYXZlIGV4dGVybmFsIGlu cHV0IC0gdmFyaWFibGUgZGF0YS4NCj4gPiAgICAgPiArIyAgVGhpcyBleHRlcm5hbCBpbnB1dCBt dXN0IGJlIHZhbGlkYXRlZCBjYXJlZnVsbHkgdG8gYXZvaWQgc2VjdXJpdHkgaXNzdWVzDQo+ID4g c3VjaA0KPiA+ICAgICA+IGFzDQo+ID4gICAgID4gKyMgIGJ1ZmZlciBvdmVyZmxvdyBvciBpbnRl Z2VyIG92ZXJmbG93Lg0KPiA+ICAgICA+ICsjICAgIFRoZSB3aG9sZSBTTU0gYXV0aGVudGljYXRp b24gdmFyaWFibGUgZGVzaWduIHJlbGllcyBvbiB0aGUgaW50ZWdyaXR5DQo+IG9mDQo+ID4gICAg ID4gZmxhc2ggcGFydCBhbmQgU01NLg0KPiA+ICAgICA+ICsjICB3aGljaCBpcyBhc3N1bWVkIHRv IGJlIHByb3RlY3RlZCBieSBwbGF0Zm9ybS4gIEFsbCB2YXJpYWJsZSBjb2RlIGFuZA0KPiA+ICAg ICA+IG1ldGFkYXRhIGluIGZsYXNoL1NNTSBNZW1vcnkNCj4gPiAgICAgPiArIyAgbWF5IG5vdCBi ZSBtb2RpZmllZCB3aXRob3V0IGF1dGhvcml6YXRpb24uIElmIHBsYXRmb3JtIGZhaWxzIHRvIHBy b3RlY3QNCj4gPiB0aGVzZQ0KPiA+ICAgICA+IHJlc291cmNlcywNCj4gPiAgICAgPiArIyAgdGhl IGF1dGhlbnRpY2F0aW9uIHNlcnZpY2UgcHJvdmlkZWQgaW4gdGhpcyBkcml2ZXIgd2lsbCBiZSBi cm9rZW4sIGFuZA0KPiB0aGUNCj4gPiAgICAgPiBiZWhhdmlvciBpcyB1bmRlZmluZWQuDQo+ID4g ICAgID4gKyMNCj4gPiAgICAgPiArIyBDb3B5cmlnaHQgKGMpIDIwMTAgLSAyMDIyLCBJbnRlbCBD b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4gICAgID4gKyMgQ29weXJp Z2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uPEJSPg0KPiA+ICAgICA+ICsjIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gICAgID4gKyMNCj4gPiAg ICAgPiArIyMNCj4gPiAgICAgPiArDQo+ID4gICAgID4gK1tEZWZpbmVzXQ0KPiA+ICAgICA+ICsg IElORl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMTAwMDUNCj4gPiAgICAgPiAr ICBCQVNFX05BTUUgICAgICAgICAgICAgICAgICAgICAgPSBWYXJpYWJsZVNtbVJ1bnRpbWVEeGUN Cj4gPiAgICAgPiArICBNT0RVTEVfVU5JX0ZJTEUgICAgICAgICAgICAgICAgPSBWYXJpYWJsZVNt bVJ1bnRpbWVEeGUudW5pDQo+ID4gICAgID4gKyAgRklMRV9HVUlEICAgICAgICAgICAgICAgICAg ICAgID0gM0M5REY0QjMtNTU5Ri00QUU0LUFFQTMtRTRCMEMzRDlEM0VFDQo+ID4gICAgID4gKyAg TU9EVUxFX1RZUEUgICAgICAgICAgICAgICAgICAgID0gRFhFX1JVTlRJTUVfRFJJVkVSDQo+ID4g ICAgID4gKyAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAgICAgID0gMS4wDQo+ID4gICAgID4g KyAgRU5UUllfUE9JTlQgICAgICAgICAgICAgICAgICAgID0gVmFyaWFibGVTbW1SdW50aW1lSW5p dGlhbGl6ZQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArIw0KPiA+ICAgICA+ICsjIFRoZSBmb2xs b3dpbmcgaW5mb3JtYXRpb24gaXMgZm9yIHJlZmVyZW5jZSBvbmx5IGFuZCBub3QgcmVxdWlyZWQg YnkgdGhlDQo+ID4gYnVpbGQNCj4gPiAgICAgPiB0b29scy4NCj4gPiAgICAgPiArIw0KPiA+ICAg ICA+ICsjICBWQUxJRF9BUkNISVRFQ1RVUkVTICAgICAgICAgICA9IElBMzIgWDY0DQo+ID4gICAg ID4gKyMNCj4gPiAgICAgPiArIyAgVklSVFVBTF9BRERSRVNTX01BUF9DQUxMQkFDSyAgPSAgVmFy aWFibGVBZGRyZXNzQ2hhbmdlRXZlbnQNCj4gPiAgICAgPiArIw0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArW1NvdXJjZXNdDQo+ID4gICAgID4gKyAgVmFyaWFibGVTbW1SdW50aW1lRHhlLmMNCj4g PiAgICAgPiArICBQcml2aWxlZ2VQb2x5bW9ycGhpYy5oDQo+ID4gICAgID4gKyAgTWVhc3VyZW1l bnQuYw0KPiA+ICAgICA+ICsgIFZhcmlhYmxlUGFyc2luZy5jDQo+ID4gICAgID4gKyAgVmFyaWFi bGVQYXJzaW5nLmgNCj4gPiAgICAgPiArICBWYXJpYWJsZS5oDQo+ID4gICAgID4gKyAgVmFyaWFi bGVQb2xpY3lTbW1EeGUuYw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArW1BhY2thZ2VzXQ0KPiA+ ICAgICA+ICsgIE1kZVBrZy9NZGVQa2cuZGVjDQo+ID4gICAgID4gKyAgTWRlTW9kdWxlUGtnL01k ZU1vZHVsZVBrZy5kZWMNCj4gPiAgICAgPiArDQo+ID4gICAgID4gK1tMaWJyYXJ5Q2xhc3Nlc10N Cj4gPiAgICAgPiArICBNZW1vcnlBbGxvY2F0aW9uTGliDQo+ID4gICAgID4gKyAgQmFzZUxpYg0K PiA+ICAgICA+ICsgIFVlZmlCb290U2VydmljZXNUYWJsZUxpYg0KPiA+ICAgICA+ICsgIERlYnVn TGliDQo+ID4gICAgID4gKyAgVWVmaVJ1bnRpbWVMaWINCj4gPiAgICAgPiArICBEeGVTZXJ2aWNl c1RhYmxlTGliDQo+ID4gICAgID4gKyAgVWVmaURyaXZlckVudHJ5UG9pbnQNCj4gPiAgICAgPiAr ICBUcG1NZWFzdXJlbWVudExpYg0KPiA+ICAgICA+ICsgIFNhZmVJbnRMaWINCj4gPiAgICAgPiAr ICBQY2RMaWINCj4gPiAgICAgPiArICBNbVVuYmxvY2tNZW1vcnlMaWINCj4gPiAgICAgPiArICBQ cm90ZWN0ZWRWYXJpYWJsZUxpYg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArW1Byb3RvY29sc10N Cj4gPiAgICAgPiArICBnRWZpVmFyaWFibGVXcml0ZUFyY2hQcm90b2NvbEd1aWQgICAgICAgICAg ICAgIyMgUFJPRFVDRVMNCj4gPiAgICAgPiArICBnRWZpVmFyaWFibGVBcmNoUHJvdG9jb2xHdWlk ICAgICAgICAgICAgICAgICAgIyMgUFJPRFVDRVMNCj4gPiAgICAgPiArICBnRWZpTW1Db21tdW5p Y2F0aW9uMlByb3RvY29sR3VpZCAgICAgICAgICAgICAgIyMgQ09OU1VNRVMNCj4gPiAgICAgPiAr ICAjIyBDT05TVU1FUw0KPiA+ICAgICA+ICsgICMjIE5PVElGWQ0KPiA+ICAgICA+ICsgICMjIFVO REVGSU5FRCAjIFVzZWQgdG8gZG8gc21tIGNvbW11bmljYXRpb24NCj4gPiAgICAgPiArICBnRWZp U21tVmFyaWFibGVQcm90b2NvbEd1aWQNCj4gPiAgICAgPiArICBnRWRraWlWYXJpYWJsZUxvY2tQ cm90b2NvbEd1aWQgICAgICAgICAgICAgICAgIyMgUFJPRFVDRVMNCj4gPiAgICAgPiArICBnRWRr aWlWYXJDaGVja1Byb3RvY29sR3VpZCAgICAgICAgICAgICAgICAgICAgIyMgUFJPRFVDRVMNCj4g PiAgICAgPiArICBnRWRraWlWYXJpYWJsZVBvbGljeVByb3RvY29sR3VpZCAgICAgICAgICAgICAg IyMgUFJPRFVDRVMNCj4gPiAgICAgPiArDQo+ID4gICAgID4gK1tGZWF0dXJlUGNkXQ0KPiA+ICAg ICA+ICsgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RFbmFibGVWYXJpYWJsZVJ1 bnRpbWVDYWNoZQ0KPiA+ICAgICA+ICMjIENPTlNVTUVTDQo+ID4gICAgID4gKyAgZ0VmaU1kZU1v ZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFZhcmlhYmxlQ29sbGVjdFN0YXRpc3RpY3MNCj4gIyMN Cj4gPiAgICAgPiBDT05TVU1FUw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArW1BjZF0NCj4gPiAg ICAgPiArDQo+ID4gICAgID4NCj4gPg0KPiBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQu UGNkQWxsb3dWYXJpYWJsZVBvbGljeUVuZm9yY2VtZW50RGlzYWJsZQ0KPiA+ICAgICA+ICMjIENP TlNVTUVTDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICtbR3VpZHNdDQo+ID4gICAgID4gKyAgIyMg UFJPRFVDRVMgICAgICAgICAgICAgIyMgR1VJRCAjIFNpZ25hdHVyZSBvZiBWYXJpYWJsZSBzdG9y ZSBoZWFkZXINCj4gPiAgICAgPiArICAjIyBDT05TVU1FUyAgICAgICAgICAgICAjIyBHVUlEICMg U2lnbmF0dXJlIG9mIFZhcmlhYmxlIHN0b3JlIGhlYWRlcg0KPiA+ICAgICA+ICsgICMjIFNPTUVU SU1FU19QUk9EVUNFUyAgICMjIFN5c3RlbVRhYmxlDQo+ID4gICAgID4gKyAgZ0VmaUF1dGhlbnRp Y2F0ZWRWYXJpYWJsZUd1aWQNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgIyMgUFJPRFVDRVMg ICAgICAgICAgICAgIyMgR1VJRCAjIFNpZ25hdHVyZSBvZiBWYXJpYWJsZSBzdG9yZSBoZWFkZXIN Cj4gPiAgICAgPiArICAjIyBDT05TVU1FUyAgICAgICAgICAgICAjIyBHVUlEICMgU2lnbmF0dXJl IG9mIFZhcmlhYmxlIHN0b3JlIGhlYWRlcg0KPiA+ICAgICA+ICsgICMjIFNPTUVUSU1FU19QUk9E VUNFUyAgICMjIFN5c3RlbVRhYmxlDQo+ID4gICAgID4gKyAgZ0VmaVZhcmlhYmxlR3VpZA0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICBnRWZpRXZlbnRWaXJ0dWFsQWRkcmVzc0NoYW5nZUd1aWQg ICAgICAgICAgICAgIyMgQ09OU1VNRVMgIyMgRXZlbnQNCj4gPiAgICAgPiArICBnRWZpRXZlbnRF eGl0Qm9vdFNlcnZpY2VzR3VpZCAgICAgICAgICAgICAgICAgIyMgQ09OU1VNRVMgIyMgRXZlbnQN Cj4gPiAgICAgPiArICAjIyBDT05TVU1FUyAjIyBHVUlEICMgTG9jYXRlIHByb3RvY29sDQo+ID4g ICAgID4gKyAgIyMgQ09OU1VNRVMgIyMgR1VJRCAjIFByb3RvY29sIG5vdGlmeQ0KPiA+ICAgICA+ ICsgIGdTbW1WYXJpYWJsZVdyaXRlR3VpZA0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAjIyBT T01FVElNRVNfQ09OU1VNRVMgICAjIyBWYXJpYWJsZTpMIlBLIg0KPiA+ICAgICA+ICsgICMjIFNP TUVUSU1FU19DT05TVU1FUyAgICMjIFZhcmlhYmxlOkwiS0VLIg0KPiA+ICAgICA+ICsgICMjIFNP TUVUSU1FU19DT05TVU1FUyAgICMjIFZhcmlhYmxlOkwiU2VjdXJlQm9vdCINCj4gPiAgICAgPiAr ICBnRWZpR2xvYmFsVmFyaWFibGVHdWlkDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICMjIFNP TUVUSU1FU19DT05TVU1FUyAgICMjIFZhcmlhYmxlOkwiZGIiDQo+ID4gICAgID4gKyAgIyMgU09N RVRJTUVTX0NPTlNVTUVTICAgIyMgVmFyaWFibGU6TCJkYngiDQo+ID4gICAgID4gKyAgIyMgU09N RVRJTUVTX0NPTlNVTUVTICAgIyMgVmFyaWFibGU6TCJkYnQiDQo+ID4gICAgID4gKyAgZ0VmaUlt YWdlU2VjdXJpdHlEYXRhYmFzZUd1aWQNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgZ1ZhckNo ZWNrUG9saWN5TGliTW1pSGFuZGxlckd1aWQNCj4gPiAgICAgPiArICBnRWZpRW5kT2ZEeGVFdmVu dEdyb3VwR3VpZA0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArW0RlcGV4XQ0KPiA+ICAgICA+ICsg IGdFZmlNbUNvbW11bmljYXRpb24yUHJvdG9jb2xHdWlkDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICtbVXNlckV4dGVuc2lvbnMuVGlhbm9Db3JlLiJFeHRyYUZpbGVzIl0NCj4gPiAgICAgPiArICBW YXJpYWJsZVNtbVJ1bnRpbWVEeGVFeHRyYS51bmkNCj4gPiAgICAgPiBkaWZmIC0tZ2l0DQo+ID4g ICAgID4NCj4gPg0KPiBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVk L1J1bnRpbWVEeGUvVmFyaWFibGVTdGFuZGFsb24NCj4gPiAgICAgPiBlTW0uaW5mDQo+ID4gICAg ID4NCj4gPg0KPiBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1 bnRpbWVEeGUvVmFyaWFibGVTdGFuZGFsb24NCj4gPiAgICAgPiBlTW0uaW5mDQo+ID4gICAgID4g bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiAgICAgPiBpbmRleCAwMDAwMDAwMDAwMDAuLmZiNWE2 Yzk0Nzg5MA0KPiA+ICAgICA+IC0tLSAvZGV2L251bGwNCj4gPiAgICAgPiArKysNCj4gPiAgICAg Pg0KPiA+DQo+IGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVu dGltZUR4ZS9WYXJpYWJsZVN0YW5kYWxvbg0KPiA+ICAgICA+IGVNbS5pbmYNCj4gPiAgICAgPiBA QCAtMCwwICsxLDE0MyBAQA0KPiA+ICAgICA+ICsjIyBAZmlsZQ0KPiA+ICAgICA+ICsjICBQcm92 aWRlcyBTTU0gdmFyaWFibGUgc2VydmljZS4NCj4gPiAgICAgPiArIw0KPiA+ICAgICA+ICsjICBU aGlzIG1vZHVsZSBpbnN0YWxscyBTTU0gdmFyaWFibGUgcHJvdG9jb2wgaW50byBTTU0gcHJvdG9j b2wNCj4gZGF0YWJhc2UsDQo+ID4gICAgID4gKyMgIHdoaWNoIGNhbiBiZSB1c2VkIGJ5IFNNTSBk cml2ZXIsIGFuZCBpbnN0YWxscyBTTU0gdmFyaWFibGUgcHJvdG9jb2wNCj4gPiAgICAgPiArIyAg aW50byBCUyBwcm90b2NvbCBkYXRhYmFzZSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gbm90aWZ5IHRo ZSBTTU0NCj4gUnVudGltZQ0KPiA+ICAgICA+ICsjICBEeGUgZHJpdmVyIHRoYXQgdGhlIFNNTSB2 YXJpYWJsZSBzZXJ2aWNlIGlzIHJlYWR5Lg0KPiA+ICAgICA+ICsjICBUaGlzIG1vZHVsZSBzaG91 bGQgYmUgdXNlZCB3aXRoIFNNTSBSdW50aW1lIERYRSBtb2R1bGUgdG9nZXRoZXIuDQo+ID4gVGhl DQo+ID4gICAgID4gKyMgIFNNTSBSdW50aW1lIERYRSBtb2R1bGUgd291bGQgaW5zdGFsbCB2YXJp YWJsZSBhcmNoIHByb3RvY29sIGFuZA0KPiA+IHZhcmlhYmxlDQo+ID4gICAgID4gKyMgIHdyaXRl IGFyY2ggcHJvdG9jb2wgYmFzZWQgb24gU01NIHZhcmlhYmxlIG1vZHVsZS4NCj4gPiAgICAgPiAr Iw0KPiA+ICAgICA+ICsjICBDYXV0aW9uOiBUaGlzIG1vZHVsZSByZXF1aXJlcyBhZGRpdGlvbmFs IHJldmlldyB3aGVuIG1vZGlmaWVkLg0KPiA+ICAgICA+ICsjICBUaGlzIGRyaXZlciB3aWxsIGhh dmUgZXh0ZXJuYWwgaW5wdXQgLSB2YXJpYWJsZSBkYXRhIGFuZCBjb21tdW5pY2F0ZQ0KPiA+IGJ1 ZmZlciBpbg0KPiA+ICAgICA+IFNNTSBtb2RlLg0KPiA+ICAgICA+ICsjICBUaGlzIGV4dGVybmFs IGlucHV0IG11c3QgYmUgdmFsaWRhdGVkIGNhcmVmdWxseSB0byBhdm9pZCBzZWN1cml0eSBpc3N1 ZXMNCj4gPiBzdWNoDQo+ID4gICAgID4gYXMNCj4gPiAgICAgPiArIyAgYnVmZmVyIG92ZXJmbG93 IG9yIGludGVnZXIgb3ZlcmZsb3cuDQo+ID4gICAgID4gKyMgICAgVGhlIHdob2xlIFNNTSBhdXRo ZW50aWNhdGlvbiB2YXJpYWJsZSBkZXNpZ24gcmVsaWVzIG9uIHRoZSBpbnRlZ3JpdHkNCj4gb2YN Cj4gPiAgICAgPiBmbGFzaCBwYXJ0IGFuZCBTTU0uDQo+ID4gICAgID4gKyMgIHdoaWNoIGlzIGFz c3VtZWQgdG8gYmUgcHJvdGVjdGVkIGJ5IHBsYXRmb3JtLiAgQWxsIHZhcmlhYmxlIGNvZGUgYW5k DQo+ID4gICAgID4gbWV0YWRhdGEgaW4gZmxhc2gvU01NIE1lbW9yeQ0KPiA+ICAgICA+ICsjICBt YXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgYXV0aG9yaXphdGlvbi4gSWYgcGxhdGZvcm0gZmFp bHMgdG8gcHJvdGVjdA0KPiA+IHRoZXNlDQo+ID4gICAgID4gcmVzb3VyY2VzLA0KPiA+ICAgICA+ ICsjICB0aGUgYXV0aGVudGljYXRpb24gc2VydmljZSBwcm92aWRlZCBpbiB0aGlzIGRyaXZlciB3 aWxsIGJlIGJyb2tlbiwgYW5kDQo+IHRoZQ0KPiA+ICAgICA+IGJlaGF2aW9yIGlzIHVuZGVmaW5l ZC4NCj4gPiAgICAgPiArIw0KPiA+ICAgICA+ICsjIENvcHlyaWdodCAoYykgMjAxMCAtIDIwMjIs IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiAgICAgPiAr IyBDb3B5cmlnaHQgKGMpIDIwMTgsIExpbmFybywgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxC Uj4NCj4gPiAgICAgPiArIyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4NCj4g PiAgICAgPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0K PiA+ICAgICA+ICsjDQo+ID4gICAgID4gKyMjDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICtbRGVm aW5lc10NCj4gPiAgICAgPiArICBJTkZfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgPSAweDAw MDEwMDFCDQo+ID4gICAgID4gKyAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAgICAgID0gVmFy aWFibGVTdGFuZGFsb25lTW0NCj4gPiAgICAgPiArICBGSUxFX0dVSUQgICAgICAgICAgICAgICAg ICAgICAgPSA0MTdFNjE5Mi03Njc4LTRBNzUtQjYzOC0zMDVBODZEODI5MzYNCj4gPiAgICAgPiAr ICBNT0RVTEVfVFlQRSAgICAgICAgICAgICAgICAgICAgPSBNTV9TVEFOREFMT05FDQo+ID4gICAg ID4gKyAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAgICAgID0gMS4wDQo+ID4gICAgID4gKyAg UElfU1BFQ0lGSUNBVElPTl9WRVJTSU9OICAgICAgID0gMHgwMDAxMDAzMg0KPiA+ICAgICA+ICsg IEVOVFJZX1BPSU5UICAgICAgICAgICAgICAgICAgICA9IFZhcmlhYmxlU2VydmljZUluaXRpYWxp emUNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyMNCj4gPiAgICAgPiArIyBUaGUgZm9sbG93aW5n IGluZm9ybWF0aW9uIGlzIGZvciByZWZlcmVuY2Ugb25seSBhbmQgbm90IHJlcXVpcmVkIGJ5IHRo ZQ0KPiA+IGJ1aWxkDQo+ID4gICAgID4gdG9vbHMuDQo+ID4gICAgID4gKyMNCj4gPiAgICAgPiAr IyAgVkFMSURfQVJDSElURUNUVVJFUyAgICAgICAgICAgPSBJQTMyIFg2NCBBUk0gQUFSQ0g2NA0K PiA+ICAgICA+ICsjDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArW1NvdXJj ZXNdDQo+ID4gICAgID4gKyAgUmVjbGFpbS5jDQo+ID4gICAgID4gKyAgVmFyaWFibGUuYw0KPiA+ ICAgICA+ICsgIFZhcmlhYmxlU21tLmMNCj4gPiAgICAgPiArICBWYXJpYWJsZVN0YW5kYWxvbmVN bS5jDQo+ID4gICAgID4gKyAgVmFyaWFibGVOb25Wb2xhdGlsZS5jDQo+ID4gICAgID4gKyAgVmFy aWFibGVOb25Wb2xhdGlsZS5oDQo+ID4gICAgID4gKyAgVmFyaWFibGVQYXJzaW5nLmMNCj4gPiAg ICAgPiArICBWYXJpYWJsZVBhcnNpbmcuaA0KPiA+ICAgICA+ICsgIFZhcmlhYmxlUnVudGltZUNh Y2hlLmMNCj4gPiAgICAgPiArICBWYXJpYWJsZVJ1bnRpbWVDYWNoZS5oDQo+ID4gICAgID4gKyAg VmFyQ2hlY2suYw0KPiA+ICAgICA+ICsgIFZhcmlhYmxlLmgNCj4gPiAgICAgPiArICBQcml2aWxl Z2VQb2x5bW9ycGhpYy5oDQo+ID4gICAgID4gKyAgVmFyaWFibGVFeExpYi5jDQo+ID4gICAgID4g KyAgVGNnTW9yTG9ja1NtbS5jDQo+ID4gICAgID4gKyAgU3BlY3VsYXRpb25CYXJyaWVyU21tLmMN Cj4gPiAgICAgPiArICBWYXJpYWJsZUxvY2tSZXF1ZXN0VG9Mb2NrLmMNCj4gPiAgICAgPiArDQo+ ID4gICAgID4gK1tQYWNrYWdlc10NCj4gPiAgICAgPiArICBNZGVQa2cvTWRlUGtnLmRlYw0KPiA+ ICAgICA+ICsgIE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVjDQo+ID4gICAgID4gKyAgU3Rh bmRhbG9uZU1tUGtnL1N0YW5kYWxvbmVNbVBrZy5kZWMNCj4gPiAgICAgPiArDQo+ID4gICAgID4g K1tMaWJyYXJ5Q2xhc3Nlc10NCj4gPiAgICAgPiArICBBdXRoVmFyaWFibGVMaWINCj4gPiAgICAg PiArICBCYXNlTGliDQo+ID4gICAgID4gKyAgQmFzZU1lbW9yeUxpYg0KPiA+ICAgICA+ICsgIERl YnVnTGliDQo+ID4gICAgID4gKyAgSG9iTGliDQo+ID4gICAgID4gKyAgTWVtb3J5QWxsb2NhdGlv bkxpYg0KPiA+ICAgICA+ICsgIE1tU2VydmljZXNUYWJsZUxpYg0KPiA+ICAgICA+ICsgIFNhZmVJ bnRMaWINCj4gPiAgICAgPiArICBTdGFuZGFsb25lTW1Ecml2ZXJFbnRyeVBvaW50DQo+ID4gICAg ID4gKyAgU3luY2hyb25pemF0aW9uTGliDQo+ID4gICAgID4gKyAgVmFyQ2hlY2tMaWINCj4gPiAg ICAgPiArICBWYXJpYWJsZUZsYXNoSW5mb0xpYg0KPiA+ICAgICA+ICsgIFZhcmlhYmxlUG9saWN5 TGliDQo+ID4gICAgID4gKyAgVmFyaWFibGVQb2xpY3lIZWxwZXJMaWINCj4gPiAgICAgPiArICBQ cm90ZWN0ZWRWYXJpYWJsZUxpYg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArW1Byb3RvY29sc10N Cj4gPiAgICAgPiArICBnRWZpU21tRmlybXdhcmVWb2x1bWVCbG9ja1Byb3RvY29sR3VpZCAgICAg ICAgIyMgQ09OU1VNRVMNCj4gPiAgICAgPiArICAjIyBDT05TVU1FUw0KPiA+ICAgICA+ICsgICMj IE5PVElGWQ0KPiA+ICAgICA+ICsgIGdFZmlTbW1GYXVsdFRvbGVyYW50V3JpdGVQcm90b2NvbEd1 aWQNCj4gPiAgICAgPiArICAjIyBQUk9EVUNFUw0KPiA+ICAgICA+ICsgICMjIFVOREVGSU5FRCAj IFNtaUhhbmRsZXJSZWdpc3Rlcg0KPiA+ICAgICA+ICsgIGdFZmlTbW1WYXJpYWJsZVByb3RvY29s R3VpZA0KPiA+ICAgICA+ICsgIGdFZmlNbUVuZE9mRHhlUHJvdG9jb2xHdWlkICAgICAgICAgICAg ICAgICAgICMjIE5PVElGWQ0KPiA+ICAgICA+ICsgIGdFZGtpaVNtbVZhckNoZWNrUHJvdG9jb2xH dWlkICAgICAgICAgICAgICAgICMjIFBST0RVQ0VTDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICtb R3VpZHNdDQo+ID4gICAgID4gKyAgIyMgU09NRVRJTUVTX0NPTlNVTUVTICAgIyMgR1VJRCAjIFNp Z25hdHVyZSBvZiBWYXJpYWJsZSBzdG9yZQ0KPiA+IGhlYWRlcg0KPiA+ICAgICA+ICsgICMjIFNP TUVUSU1FU19QUk9EVUNFUyAgICMjIEdVSUQgIyBTaWduYXR1cmUgb2YgVmFyaWFibGUgc3RvcmUN Cj4gaGVhZGVyDQo+ID4gICAgID4gKyAgIyMgU09NRVRJTUVTX0NPTlNVTUVTICAgIyMgSE9CDQo+ ID4gICAgID4gKyAgIyMgU09NRVRJTUVTX1BST0RVQ0VTICAgIyMgU3lzdGVtVGFibGUNCj4gPiAg ICAgPiArICBnRWZpQXV0aGVudGljYXRlZFZhcmlhYmxlR3VpZA0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICAjIyBTT01FVElNRVNfQ09OU1VNRVMgICAjIyBHVUlEICMgU2lnbmF0dXJlIG9mIFZh cmlhYmxlIHN0b3JlDQo+ID4gaGVhZGVyDQo+ID4gICAgID4gKyAgIyMgU09NRVRJTUVTX1BST0RV Q0VTICAgIyMgR1VJRCAjIFNpZ25hdHVyZSBvZiBWYXJpYWJsZSBzdG9yZQ0KPiBoZWFkZXINCj4g PiAgICAgPiArICAjIyBTT01FVElNRVNfQ09OU1VNRVMgICAjIyBIT0INCj4gPiAgICAgPiArICAj IyBTT01FVElNRVNfUFJPRFVDRVMgICAjIyBTeXN0ZW1UYWJsZQ0KPiA+ICAgICA+ICsgIGdFZmlW YXJpYWJsZUd1aWQNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgIyMgU09NRVRJTUVTX0NPTlNV TUVTICAgIyMgVmFyaWFibGU6TCJQbGF0Zm9ybUxhbmciDQo+ID4gICAgID4gKyAgIyMgU09NRVRJ TUVTX1BST0RVQ0VTICAgIyMgVmFyaWFibGU6TCJQbGF0Zm9ybUxhbmciDQo+ID4gICAgID4gKyAg IyMgU09NRVRJTUVTX0NPTlNVTUVTICAgIyMgVmFyaWFibGU6TCJMYW5nIg0KPiA+ICAgICA+ICsg ICMjIFNPTUVUSU1FU19QUk9EVUNFUyAgICMjIFZhcmlhYmxlOkwiTGFuZyINCj4gPiAgICAgPiAr ICBnRWZpR2xvYmFsVmFyaWFibGVHdWlkDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIGdFZmlN ZW1vcnlPdmVyd3JpdGVDb250cm9sRGF0YUd1aWQgICAgICAgICAgICAjIw0KPiBTT01FVElNRVNf Q09OU1VNRVMNCj4gPiAjIw0KPiA+ICAgICA+IFZhcmlhYmxlOkwiTWVtb3J5T3ZlcndyaXRlUmVx dWVzdENvbnRyb2wiDQo+ID4gICAgID4gKyAgZ0VmaU1lbW9yeU92ZXJ3cml0ZVJlcXVlc3RDb250 cm9sTG9ja0d1aWQgICAgICMjDQo+ID4gU09NRVRJTUVTX1BST0RVQ0VTDQo+ID4gICAgID4gIyMg VmFyaWFibGU6TCJNZW1vcnlPdmVyd3JpdGVSZXF1ZXN0Q29udHJvbExvY2siDQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsgIGdFZmlTeXN0ZW1OdkRhdGFGdkd1aWQgICAgICAgICAgICAgICAgICAg ICAgICAjIyBDT05TVU1FUyAgICAgICAgICAgICAjIyBHVUlEDQo+ID4gICAgID4gKyAgZ0Vka2lp RmF1bHRUb2xlcmFudFdyaXRlR3VpZCAgICAgICAgICAgICAgICAgICMjIFNPTUVUSU1FU19DT05T VU1FUyAgICMjDQo+ID4gSE9CDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICMjIFNPTUVUSU1F U19DT05TVU1FUyAgICMjIFZhcmlhYmxlOkwiVmFyRXJyb3JGbGFnIg0KPiA+ICAgICA+ICsgICMj IFNPTUVUSU1FU19QUk9EVUNFUyAgICMjIFZhcmlhYmxlOkwiVmFyRXJyb3JGbGFnIg0KPiA+ICAg ICA+ICsgIGdFZGtpaVZhckVycm9yRmxhZ0d1aWQNCj4gPiAgICAgPiArDQo+ID4gICAgID4gK1tQ Y2RdDQo+ID4gICAgID4gKyAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZE1heFZh cmlhYmxlU2l6ZSAgICAgICAgICAgICAgICAgICMjDQo+ID4gICAgID4gQ09OU1VNRVMNCj4gPiAg ICAgPiArICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkTWF4QXV0aFZhcmlhYmxl U2l6ZSAgICAgICAgICAgICAgIyMNCj4gPiAgICAgPiBDT05TVU1FUw0KPiA+ICAgICA+ICsgIGdF ZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RNYXhWb2xhdGlsZVZhcmlhYmxlU2l6ZSAg ICAgICAgICAjIw0KPiA+ICAgICA+IENPTlNVTUVTDQo+ID4gICAgID4gKyAgZ0VmaU1kZU1vZHVs ZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZE1heEhhcmR3YXJlRXJyb3JWYXJpYWJsZVNpemUNCj4gPiAj Iw0KPiA+ICAgICA+IENPTlNVTUVTDQo+ID4gICAgID4gKyAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2Vu U3BhY2VHdWlkLlBjZFZhcmlhYmxlU3RvcmVTaXplICAgICAgICAgICAgICAgICMjDQo+ID4gICAg ID4gQ09OU1VNRVMNCj4gPiAgICAgPiArICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQu UGNkSHdFcnJTdG9yYWdlU2l6ZSAgICAgICAgICAgICAgICAgIyMNCj4gPiAgICAgPiBDT05TVU1F Uw0KPiA+ICAgICA+ICsgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RNYXhVc2Vy TnZWYXJpYWJsZVNwYWNlU2l6ZQ0KPiA+ICAgICA+ICMjIENPTlNVTUVTDQo+ID4gICAgID4gKw0K PiA+ICAgICA+DQo+ID4NCj4gZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEJvb3R0 aW1lUmVzZXJ2ZWROdlZhcmlhYmxlU3BhY2VTaXplDQo+ID4gICAgID4gIyMgQ09OU1VNRVMNCj4g PiAgICAgPiArDQo+ID4gZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFJlY2xhaW1W YXJpYWJsZVNwYWNlQXRFbmRPZkR4ZQ0KPiA+ICAgICA+ICMjIENPTlNVTUVTDQo+ID4gICAgID4g KyAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEVtdVZhcmlhYmxlTnZNb2RlRW5h YmxlDQo+ID4gIyMNCj4gPiAgICAgPiBTT01FVElNRVNfQ09OU1VNRVMNCj4gPiAgICAgPiArICBn RWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkRW11VmFyaWFibGVOdlN0b3JlUmVzZXJ2 ZWQNCj4gPiAjIw0KPiA+ICAgICA+IFNPTUVUSU1FU19DT05TVU1FUw0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArW0ZlYXR1cmVQY2RdDQo+ID4gICAgID4gKyAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2Vu U3BhY2VHdWlkLlBjZFZhcmlhYmxlQ29sbGVjdFN0YXRpc3RpY3MgICAgICAgICMjDQo+ID4gICAg ID4gQ09OU1VNRVMgICMgc3RhdGlzdGljIHRoZSBpbmZvcm1hdGlvbiBvZiB2YXJpYWJsZS4NCj4g PiAgICAgPiArICBnRWZpTWRlUGtnVG9rZW5TcGFjZUd1aWQuUGNkVWVmaVZhcmlhYmxlRGVmYXVs dExhbmdEZXByZWNhdGUNCj4gIyMNCj4gPiAgICAgPiBDT05TVU1FUyAgIyBBdXRvIHVwZGF0ZSBQ bGF0Zm9ybUxhbmcvTGFuZw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArW0RlcGV4XQ0KPiA+ICAg ICA+ICsgIFRSVUUNCj4gPiAgICAgPiBkaWZmIC0tZ2l0DQo+ID4gICAgID4NCj4gPg0KPiBhL01k ZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvUHJpdmls ZWdlUG9seW1vcnANCj4gPiAgICAgPiBoaWMuaA0KPiA+ICAgICA+DQo+ID4NCj4gYi9NZGVNb2R1 bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ByaXZpbGVnZVBv bHltb3JwDQo+ID4gICAgID4gaGljLmgNCj4gPiAgICAgPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K PiA+ICAgICA+IGluZGV4IDAwMDAwMDAwMDAwMC4uN2YxNDUxNWI2OTRmDQo+ID4gICAgID4gLS0t IC9kZXYvbnVsbA0KPiA+ICAgICA+ICsrKw0KPiA+ICAgICA+DQo+ID4NCj4gYi9NZGVNb2R1bGVQ a2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ByaXZpbGVnZVBvbHlt b3JwDQo+ID4gICAgID4gaGljLmgNCj4gPiAgICAgPiBAQCAtMCwwICsxLDE1OCBAQA0KPiA+ICAg ICA+ICsvKiogQGZpbGUNCj4gPiAgICAgPiArICBQb2x5bW9ycGhpYyBmdW5jdGlvbnMgdGhhdCBh cmUgY2FsbGVkIGZyb20gYm90aCB0aGUgcHJpdmlsZWdlZCBkcml2ZXINCj4gKGkuZS4sDQo+ID4g ICAgID4gKyAgdGhlIERYRV9TTU0gdmFyaWFibGUgbW9kdWxlKSBhbmQgdGhlIG5vbi1wcml2aWxl Z2VkIGRyaXZlcnMgKGkuZS4sIG9uZQ0KPiBvcg0KPiA+ICAgICA+ICsgIGJvdGggb2YgdGhlIERY RV9SVU5USU1FIHZhcmlhYmxlIG1vZHVsZXMpLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBF YWNoIG9mIHRoZXNlIGZ1bmN0aW9ucyBoYXMgdHdvIGltcGxlbWVudGF0aW9ucywgYXBwcm9wcmlh dGUgZm9yDQo+ID4gcHJpdmlsZWdlZA0KPiA+ICAgICA+ICsgIHZzLiBub24tcHJpdmlsZWdlZCBk cml2ZXIgY29kZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQ29weXJpZ2h0IChjKSAyMDE3 LCBSZWQgSGF0LCBJbmMuPEJSPg0KPiA+ICAgICA+ICsgIENvcHlyaWdodCAoYykgMjAxMCAtIDIw MjIsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1Q YXRlbnQNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsjaWZuZGVmIFBS SVZJTEVHRV9QT0xZTU9SUEhJQ19IXw0KPiA+ICAgICA+ICsjZGVmaW5lIFBSSVZJTEVHRV9QT0xZ TU9SUEhJQ19IXw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArI2luY2x1ZGUgPFVlZmkvVWVmaUJh c2VUeXBlLmg+DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBTZWN1 cmVCb290IEhvb2sgZm9yIGF1dGggdmFyaWFibGUgdXBkYXRlLg0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICBAcGFyYW1baW5dIFZhcmlhYmxlTmFtZSAgICAgICAgICAgICAgICAgTmFtZSBvZiBW YXJpYWJsZSB0byBiZSBmb3VuZC4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dIFZlbmRvckd1aWQg ICAgICAgICAgICAgICAgICAgVmFyaWFibGUgdmVuZG9yIEdVSUQuDQo+ID4gICAgID4gKyoqLw0K PiA+ICAgICA+ICtWT0lEDQo+ID4gICAgID4gK0VGSUFQSQ0KPiA+ICAgICA+ICtTZWN1cmVCb290 SG9vayAoDQo+ID4gICAgID4gKyAgSU4gQ0hBUjE2ICAgICpWYXJpYWJsZU5hbWUsDQo+ID4gICAg ID4gKyAgSU4gRUZJX0dVSUQgICpWZW5kb3JHdWlkDQo+ID4gICAgID4gKyAgKTsNCj4gPiAgICAg PiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIEluaXRpYWxpemF0aW9uIGZvciBNT1Ig Q29udHJvbCBMb2NrLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICBNb3JMb2NrIGluaXRpYWxpemF0aW9uIHN1Y2Nlc3MuDQo+ID4gICAgID4gKyAgQHJl dHVybiBPdGhlcnMgICAgICAgICAgU29tZSBlcnJvciBvY2N1cnMuDQo+ID4gICAgID4gKyoqLw0K PiA+ICAgICA+ICtFRklfU1RBVFVTDQo+ID4gICAgID4gK01vckxvY2tJbml0ICgNCj4gPiAgICAg PiArICBWT0lEDQo+ID4gICAgID4gKyAgKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0K PiA+ICAgICA+ICsgIERlbGF5ZWQgaW5pdGlhbGl6YXRpb24gZm9yIE1PUiBDb250cm9sIExvY2sg YXQgRW5kT2ZEeGUuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFRoaXMgZnVuY3Rpb24gcGVy Zm9ybXMgYW55IG9wZXJhdGlvbnMgcXVldWVkIGJ5IE1vckxvY2tJbml0KCkuDQo+ID4gICAgID4g KyoqLw0KPiA+ICAgICA+ICtWT0lEDQo+ID4gICAgID4gK01vckxvY2tJbml0QXRFbmRPZkR4ZSAo DQo+ID4gICAgID4gKyAgVk9JRA0KPiA+ICAgICA+ICsgICk7DQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsvKioNCj4gPiAgICAgPiArICBUaGlzIHNlcnZpY2UgaXMgYW4gTU9SL01vckxvY2sgY2hl Y2tlciBoYW5kbGVyIGZvciB0aGUgU2V0VmFyaWFibGUoKS4NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgQHBhcmFtW2luXSAgVmFyaWFibGVOYW1lIHRoZSBuYW1lIG9mIHRoZSB2ZW5kb3IncyB2 YXJpYWJsZSwgYXMgYQ0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBOdWxs LVRlcm1pbmF0ZWQgVW5pY29kZSBTdHJpbmcNCj4gPiAgICAgPiArICBAcGFyYW1baW5dICBWZW5k b3JHdWlkICAgVW5pZnkgaWRlbnRpZmllciBmb3IgdmVuZG9yLg0KPiA+ICAgICA+ICsgIEBwYXJh bVtpbl0gIEF0dHJpYnV0ZXMgICBBdHRyaWJ1dGVzIGJpdG1hc2sgdG8gc2V0IGZvciB0aGUgdmFy aWFibGUuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgRGF0YVNpemUgICAgIFRoZSBzaXplIGlu IGJ5dGVzIG9mIERhdGEtQnVmZmVyLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gIERhdGEgICAg ICAgICBQb2ludCB0byB0aGUgY29udGVudCBvZiB0aGUgdmFyaWFibGUuDQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIEByZXR2YWwgIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIE1PUi9Nb3JM b2NrIGNoZWNrIHBhc3MsIGFuZA0KPiBWYXJpYWJsZQ0KPiA+ICAgICA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZHJpdmVyIGNhbiBzdG9yZSB0aGUgdmFyaWFibGUgZGF0YS4N Cj4gPiAgICAgPiArICBAcmV0dmFsICBFRklfSU5WQUxJRF9QQVJBTUVURVIgIFRoZSBNT1IvTW9y TG9jayBkYXRhIG9yIGRhdGENCj4gc2l6ZQ0KPiA+IG9yDQo+ID4gICAgID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzIGlzIG5vdCBhbGxvd2VkIGZvciBNT1Ig dmFyaWFibGUuDQo+ID4gICAgID4gKyAgQHJldHZhbCAgRUZJX0FDQ0VTU19ERU5JRUQgICAgICBU aGUgTU9SL01vckxvY2sgaXMgbG9ja2VkLg0KPiA+ICAgICA+ICsgIEByZXR2YWwgIEVGSV9BTFJF QURZX1NUQVJURUQgICAgVGhlIE1vckxvY2sgdmFyaWFibGUgaXMgaGFuZGxlZA0KPiBpbnNpZGUN Cj4gPiB0aGlzDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm dW5jdGlvbi4gVmFyaWFibGUgZHJpdmVyIGNhbiBqdXN0IHJldHVybg0KPiA+ICAgICA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX1NVQ0NFU1MuDQo+ID4gICAgID4gKyoq Lw0KPiA+ICAgICA+ICtFRklfU1RBVFVTDQo+ID4gICAgID4gK1NldFZhcmlhYmxlQ2hlY2tIYW5k bGVyTW9yICgNCj4gPiAgICAgPiArICBJTiBDSEFSMTYgICAgKlZhcmlhYmxlTmFtZSwNCj4gPiAg ICAgPiArICBJTiBFRklfR1VJRCAgKlZlbmRvckd1aWQsDQo+ID4gICAgID4gKyAgSU4gVUlOVDMy ICAgIEF0dHJpYnV0ZXMsDQo+ID4gICAgID4gKyAgSU4gVUlOVE4gICAgIERhdGFTaXplLA0KPiA+ ICAgICA+ICsgIElOIFZPSUQgICAgICAqRGF0YQ0KPiA+ICAgICA+ICsgICk7DQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBUaGlzIHNlcnZpY2UgaXMgY29uc3VtZWQg YnkgdGhlIHZhcmlhYmxlIG1vZHVsZXMgdG8gcGxhY2UgYSBiYXJyaWVyIHRvDQo+IHN0b3ANCj4g PiAgICAgPiArICBzcGVjdWxhdGl2ZSBleGVjdXRpb24uDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsgIEVuc3VyZXMgdGhhdCBubyBsYXRlciBpbnN0cnVjdGlvbiB3aWxsIGV4ZWN1dGUgc3BlY3Vs YXRpdmVseSwgdW50aWwgYWxsIHByaW9yDQo+ID4gICAgID4gKyAgaW5zdHJ1Y3Rpb25zIGhhdmUg Y29tcGxldGVkLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK1ZPSUQN Cj4gPiAgICAgPiArVmFyaWFibGVTcGVjdWxhdGlvbkJhcnJpZXIgKA0KPiA+ICAgICA+ICsgIFZP SUQNCj4gPiAgICAgPiArICApOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAg ID4gKyAgTm90aWZ5IHRoZSBzeXN0ZW0gdGhhdCB0aGUgU01NIHZhcmlhYmxlIGRyaXZlciBpcyBy ZWFkeS4NCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK1ZPSUQNCj4gPiAgICAgPiArVmFyaWFi bGVOb3RpZnlTbW1SZWFkeSAoDQo+ID4gICAgID4gKyAgVk9JRA0KPiA+ICAgICA+ICsgICk7DQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBOb3RpZnkgdGhlIHN5c3Rl bSB0aGF0IHRoZSBTTU0gdmFyaWFibGUgd3JpdGUgZHJpdmVyIGlzIHJlYWR5Lg0KPiA+ICAgICA+ ICsqKi8NCj4gPiAgICAgPiArVk9JRA0KPiA+ICAgICA+ICtWYXJpYWJsZU5vdGlmeVNtbVdyaXRl UmVhZHkgKA0KPiA+ICAgICA+ICsgIFZPSUQNCj4gPiAgICAgPiArICApOw0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgVmFyaWFibGUgRHJpdmVyIG1haW4gZW50cnkg cG9pbnQuIFRoZSBWYXJpYWJsZSBkcml2ZXIgcGxhY2VzIHRoZSA0IEVGSQ0KPiA+ICAgICA+ICsg IHJ1bnRpbWUgc2VydmljZXMgaW4gdGhlIEVGSSBTeXN0ZW0gVGFibGUgYW5kIGluc3RhbGxzIGFy Y2ggcHJvdG9jb2xzDQo+ID4gICAgID4gKyAgZm9yIHZhcmlhYmxlIHJlYWQgYW5kIHdyaXRlIHNl cnZpY2VzIGJlaW5nIGF2YWlsYWJsZS4gSXQgYWxzbyByZWdpc3RlcnMNCj4gPiAgICAgPiArICBh IG5vdGlmaWNhdGlvbiBmdW5jdGlvbiBmb3IgYW4gRVZUX1NJR05BTF9WSVJUVUFMX0FERFJFU1Nf Q0hBTkdFDQo+ID4gICAgID4gZXZlbnQuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgICAgVmFyaWFibGUgc2VydmljZSBzdWNjZXNzZnVsbHkgaW5pdGlh bGl6ZWQuDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtFRklfU1RBVFVTDQo+ID4gICAgID4g K0VGSUFQSQ0KPiA+ICAgICA+ICtNbVZhcmlhYmxlU2VydmljZUluaXRpYWxpemUgKA0KPiA+ICAg ICA+ICsgIFZPSUQNCj4gPiAgICAgPiArICApOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoq DQo+ID4gICAgID4gKyAgVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIGJ1ZmZlciBpcyB2YWxp ZCBwZXIgcHJvY2Vzc29yIGFyY2hpdGVjdHVyZSBhbmQNCj4gPiAgICAgPiArICBkb2VzIG5vdCBv dmVybGFwIHdpdGggU01SQU0uDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbSBCdWZm ZXIgVGhlIGJ1ZmZlciBzdGFydCBhZGRyZXNzIHRvIGJlIGNoZWNrZWQuDQo+ID4gICAgID4gKyAg QHBhcmFtIExlbmd0aCBUaGUgYnVmZmVyIGxlbmd0aCB0byBiZSBjaGVja2VkLg0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArICBAcmV0dmFsIFRSVUUgIFRoaXMgYnVmZmVyIGlzIHZhbGlkIHBlciBw cm9jZXNzb3IgYXJjaGl0ZWN0dXJlIGFuZCBkb2VzDQo+IG5vdA0KPiA+ICAgICA+ICsgICAgICAg ICAgICAgICAgb3ZlcmxhcCB3aXRoIFNNUkFNLg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRkFMU0Ug VGhpcyBidWZmZXIgaXMgbm90IHZhbGlkIHBlciBwcm9jZXNzb3IgYXJjaGl0ZWN0dXJlIG9yDQo+ ID4gb3ZlcmxhcHMNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgIHdpdGggU01SQU0uDQo+ID4g ICAgID4gKyoqLw0KPiA+ICAgICA+ICtCT09MRUFODQo+ID4gICAgID4gK1ZhcmlhYmxlU21tSXNC dWZmZXJPdXRzaWRlU21tVmFsaWQgKA0KPiA+ICAgICA+ICsgIElOIEVGSV9QSFlTSUNBTF9BRERS RVNTICBCdWZmZXIsDQo+ID4gICAgID4gKyAgSU4gVUlOVDY0ICAgICAgICAgICAgICAgIExlbmd0 aA0KPiA+ICAgICA+ICsgICk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAg PiArICBXaGV0aGVyIHRoZSBUQ0cgb3IgVENHMiBwcm90b2NvbHMgYXJlIGluc3RhbGxlZCBpbiB0 aGUgVUVGSSBwcm90b2NvbA0KPiA+ICAgICA+IGRhdGFiYXNlLg0KPiA+ICAgICA+ICsgIFRoaXMg aW5mb3JtYXRpb24gaXMgdXNlZCBieSB0aGUgTW9yTG9jayBjb2RlIHRvIGluZmVyIHdoZXRoZXIg YW4NCj4gZXhpc3RpbmcNCj4gPiAgICAgPiArICBNT1IgdmFyaWFibGUgaXMgbGVnaXRpbWF0ZSBv ciBub3QuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR2YWwgVFJVRSAgRWl0aGVyIHRo ZSBUQ0cgb3IgVENHMiBwcm90b2NvbCBpcyBpbnN0YWxsZWQgaW4gdGhlIFVFRkkNCj4gPiAgICAg PiArICAgICAgICAgICAgICAgIHByb3RvY29sIGRhdGFiYXNlDQo+ID4gICAgID4gKyAgQHJldHZh bCBGQUxTRSBOZWl0aGVyIHRoZSBUQ0cgbm9yIHRoZSBUQ0cyIHByb3RvY29sIGlzIGluc3RhbGxl ZCBpbiB0aGUNCj4gPiBVRUZJDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICBwcm90b2NvbCBk YXRhYmFzZQ0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArQk9PTEVBTg0KPiA+ICAgICA+ICtW YXJpYWJsZUhhdmVUY2dQcm90b2NvbHMgKA0KPiA+ICAgICA+ICsgIFZPSUQNCj4gPiAgICAgPiAr ICApOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArI2VuZGlmDQo+ID4gICAgID4gZGlmZiAtLWdp dA0KPiA+ICAgICA+IGEvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQv UnVudGltZUR4ZS9WYXJpYWJsZS5oDQo+ID4gICAgID4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2Fs L1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlLmgNCj4gPiAgICAgPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPiA+ICAgICA+IGluZGV4IDAwMDAwMDAwMDAwMC4uYzY3OWU1MjQw NDNmDQo+ID4gICAgID4gLS0tIC9kZXYvbnVsbA0KPiA+ICAgICA+ICsrKw0KPiA+IGIvTWRlTW9k dWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZS5o DQo+ID4gICAgID4gQEAgLTAsMCArMSw5NDggQEANCj4gPiAgICAgPiArLyoqIEBmaWxlDQo+ID4g ICAgID4gKyAgVGhlIGludGVybmFsIGhlYWRlciBmaWxlIGluY2x1ZGVzIHRoZSBjb21tb24gaGVh ZGVyIGZpbGVzLCBkZWZpbmVzDQo+ID4gICAgID4gKyAgaW50ZXJuYWwgc3RydWN0dXJlIGFuZCBm dW5jdGlvbnMgdXNlZCBieSBWYXJpYWJsZSBtb2R1bGVzLg0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAyMiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ICAgICA+ICtTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNE LTItQ2xhdXNlLVBhdGVudA0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsjaWZuZGVmIFZBUklBQkxFX0hfDQo+ID4gICAgID4gKyNkZWZpbmUgVkFS SUFCTEVfSF8NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyNpbmNsdWRlIDxQaUR4ZS5oPg0KPiA+ ICAgICA+ICsjaW5jbHVkZSA8UHJvdG9jb2wvVmFyaWFibGVXcml0ZS5oPg0KPiA+ICAgICA+ICsj aW5jbHVkZSA8UHJvdG9jb2wvRmF1bHRUb2xlcmFudFdyaXRlLmg+DQo+ID4gICAgID4gKyNpbmNs dWRlIDxQcm90b2NvbC9GaXJtd2FyZVZvbHVtZUJsb2NrLmg+DQo+ID4gICAgID4gKyNpbmNsdWRl IDxQcm90b2NvbC9WYXJpYWJsZS5oPg0KPiA+ICAgICA+ICsjaW5jbHVkZSA8UHJvdG9jb2wvVmFy aWFibGVMb2NrLmg+DQo+ID4gICAgID4gKyNpbmNsdWRlIDxQcm90b2NvbC9WYXJDaGVjay5oPg0K PiA+ICAgICA+ICsjaW5jbHVkZSA8TGlicmFyeS9QY2RMaWIuaD4NCj4gPiAgICAgPiArI2luY2x1 ZGUgPExpYnJhcnkvSG9iTGliLmg+DQo+ID4gICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlE cml2ZXJFbnRyeVBvaW50Lmg+DQo+ID4gICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0R4ZVNlcnZp Y2VzVGFibGVMaWIuaD4NCj4gPiAgICAgPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaVJ1bnRpbWVM aWIuaD4NCj4gPiAgICAgPiArI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4gPiAgICAg PiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KPiA+ICAgICA+ICsjaW5jbHVk ZSA8TGlicmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIuaD4NCj4gPiAgICAgPiArI2luY2x1 ZGUgPExpYnJhcnkvVWVmaUxpYi5oPg0KPiA+ICAgICA+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNl TGliLmg+DQo+ID4gICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1N5bmNocm9uaXphdGlvbkxpYi5o Pg0KPiA+ICAgICA+ICsjaW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9uTGliLmg+DQo+ ID4gICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0F1dGhWYXJpYWJsZUxpYi5oPg0KPiA+ICAgICA+ ICsjaW5jbHVkZSA8TGlicmFyeS9WYXJDaGVja0xpYi5oPg0KPiA+ICAgICA+ICsjaW5jbHVkZSA8 TGlicmFyeS9WYXJpYWJsZUZsYXNoSW5mb0xpYi5oPg0KPiA+ICAgICA+ICsjaW5jbHVkZSA8TGli cmFyeS9TYWZlSW50TGliLmg+DQo+ID4gICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1Byb3RlY3Rl ZFZhcmlhYmxlTGliLmg+DQo+ID4gICAgID4gKyNpbmNsdWRlIDxHdWlkL0dsb2JhbFZhcmlhYmxl Lmg+DQo+ID4gICAgID4gKyNpbmNsdWRlIDxHdWlkL0V2ZW50R3JvdXAuaD4NCj4gPiAgICAgPiAr I2luY2x1ZGUgPEd1aWQvVmFyaWFibGVGb3JtYXQuaD4NCj4gPiAgICAgPiArI2luY2x1ZGUgPEd1 aWQvU3lzdGVtTnZEYXRhR3VpZC5oPg0KPiA+ICAgICA+ICsjaW5jbHVkZSA8R3VpZC9GYXVsdFRv bGVyYW50V3JpdGUuaD4NCj4gPiAgICAgPiArI2luY2x1ZGUgPEd1aWQvVmFyRXJyb3JGbGFnLmg+ DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsjaW5jbHVkZSAiUHJpdmlsZWdlUG9seW1vcnBoaWMu aCINCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyNkZWZpbmUgRUZJX1ZBUklBQkxFX0FUVFJJQlVU RVNfTUFTSw0KPiA+IChFRklfVkFSSUFCTEVfTk9OX1ZPTEFUSUxFIHxcDQo+ID4gICAgID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX1ZBUklBQkxFX0JPT1RTRVJW SUNFX0FDQ0VTUyB8IFwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBFRklfVkFSSUFCTEVfUlVOVElNRV9BQ0NFU1MgfCBcDQo+ID4gICAgID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX1ZBUklBQkxFX0hBUkRXQVJFX0VS Uk9SX1JFQ09SRCB8IFwNCj4gPiAgICAgPiArDQo+ID4gICAgID4gRUZJX1ZBUklBQkxFX1RJTUVf QkFTRURfQVVUSEVOVElDQVRFRF9XUklURV9BQ0NFU1MgfCBcDQo+ID4gICAgID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX1ZBUklBQkxFX0FQUEVORF9XUklURSkN Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8vLw0KPiA+ICAgICA+ICsvLy8gVGhlIHNpemUgb2Yg YSAzIGNoYXJhY3RlciBJU082MzkgbGFuZ3VhZ2UgY29kZS4NCj4gPiAgICAgPiArLy8vDQo+ID4g ICAgID4gKyNkZWZpbmUgSVNPXzYzOV8yX0VOVFJZX1NJWkUgIDMNCj4gPiAgICAgPiArDQo+ID4g ICAgID4gK3R5cGVkZWYgZW51bSB7DQo+ID4gICAgID4gKyAgVmFyaWFibGVTdG9yZVR5cGVWb2xh dGlsZSwNCj4gPiAgICAgPiArICBWYXJpYWJsZVN0b3JlVHlwZUhvYiwNCj4gPiAgICAgPiArICBW YXJpYWJsZVN0b3JlVHlwZU52LA0KPiA+ICAgICA+ICsgIFZhcmlhYmxlU3RvcmVUeXBlTWF4DQo+ ID4gICAgID4gK30gVkFSSUFCTEVfU1RPUkVfVFlQRTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4g K3R5cGVkZWYgc3RydWN0IHsNCj4gPiAgICAgPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAg UGVuZGluZ1VwZGF0ZU9mZnNldDsNCj4gPiAgICAgPiArICBVSU5UMzIgICAgICAgICAgICAgICAg ICAgUGVuZGluZ1VwZGF0ZUxlbmd0aDsNCj4gPiAgICAgPiArICBWQVJJQUJMRV9TVE9SRV9IRUFE RVIgICAgKlN0b3JlOw0KPiA+ICAgICA+ICt9IFZBUklBQkxFX1JVTlRJTUVfQ0FDSEU7DQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4gICAgID4gKyAgQk9PTEVB TiAgICAgICAgICAgICAgICAgICAqUmVhZExvY2s7DQo+ID4gICAgID4gKyAgQk9PTEVBTiAgICAg ICAgICAgICAgICAgICAqUGVuZGluZ1VwZGF0ZTsNCj4gPiAgICAgPiArICBCT09MRUFOICAgICAg ICAgICAgICAgICAgICpIb2JGbHVzaENvbXBsZXRlOw0KPiA+ICAgICA+ICsgIFZBUklBQkxFX1JV TlRJTUVfQ0FDSEUgICAgVmFyaWFibGVSdW50aW1lSG9iQ2FjaGU7DQo+ID4gICAgID4gKyAgVkFS SUFCTEVfUlVOVElNRV9DQUNIRSAgICBWYXJpYWJsZVJ1bnRpbWVOdkNhY2hlOw0KPiA+ICAgICA+ ICsgIFZBUklBQkxFX1JVTlRJTUVfQ0FDSEUgICAgVmFyaWFibGVSdW50aW1lVm9sYXRpbGVDYWNo ZTsNCj4gPiAgICAgPiArfSBWQVJJQUJMRV9SVU5USU1FX0NBQ0hFX0NPTlRFWFQ7DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4gICAgID4gKyAgVkFSSUFCTEVf SEVBREVSICAgICpDdXJyUHRyOw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gSWYg Ym90aCBBRERFRCBhbmQgSU5fREVMRVRFRF9UUkFOU0lUSU9OIHZhcmlhYmxlIGFyZSBwcmVzZW50 LA0KPiA+ICAgICA+ICsgIC8vIEluRGVsZXRlZFRyYW5zaXRpb25QdHIgd2lsbCBwb2ludCB0byB0 aGUgSU5fREVMRVRFRF9UUkFOU0lUSU9ODQo+IG9uZS4NCj4gPiAgICAgPiArICAvLyBPdGhlcndp c2UsIEN1cnJQdHIgd2lsbCBwb2ludCB0byB0aGUgQURERUQgb3INCj4gPiBJTl9ERUxFVEVEX1RS QU5TSVRJT04NCj4gPiAgICAgPiBvbmUsDQo+ID4gICAgID4gKyAgLy8gYW5kIEluRGVsZXRlZFRy YW5zaXRpb25QdHIgd2lsbCBiZSBOVUxMIGF0IHRoZSBzYW1lIHRpbWUuDQo+ID4gICAgID4gKyAg Ly8NCj4gPiAgICAgPiArICBWQVJJQUJMRV9IRUFERVIgICAgKkluRGVsZXRlZFRyYW5zaXRpb25Q dHI7DQo+ID4gICAgID4gKyAgVkFSSUFCTEVfSEVBREVSICAgICpFbmRQdHI7DQo+ID4gICAgID4g KyAgVkFSSUFCTEVfSEVBREVSICAgICpTdGFydFB0cjsNCj4gPiAgICAgPiArICBCT09MRUFOICAg ICAgICAgICAgVm9sYXRpbGU7DQo+ID4gICAgID4gK30gVkFSSUFCTEVfUE9JTlRFUl9UUkFDSzsN Cj4gPiAgICAgPiArDQo+ID4gICAgID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiAgICAgPiArICBF RklfUEhZU0lDQUxfQUREUkVTUyAgICAgICAgICAgICAgSG9iVmFyaWFibGVCYXNlOw0KPiA+ICAg ICA+ICsgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgICAgICAgICBWb2xhdGlsZVZhcmlhYmxl QmFzZTsNCj4gPiAgICAgPiArICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICAgICAgICAgTm9u Vm9sYXRpbGVWYXJpYWJsZUJhc2U7DQo+ID4gICAgID4gKyAgVkFSSUFCTEVfUlVOVElNRV9DQUNI RV9DT05URVhUDQo+IFZhcmlhYmxlUnVudGltZUNhY2hlQ29udGV4dDsNCj4gPiAgICAgPiArICBF RklfTE9DSyAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVTZXJ2aWNlc0xvY2s7DQo+ ID4gICAgID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZW50cmFudFN0 YXRlOw0KPiA+ICAgICA+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICBBdXRo Rm9ybWF0Ow0KPiA+ICAgICA+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICBB dXRoU3VwcG9ydDsNCj4gPiAgICAgPiArICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgRW11TnZNb2RlOw0KPiA+ICAgICA+ICt9IFZBUklBQkxFX0dMT0JBTDsNCj4gPiAgICAgPiAr DQo+ID4gICAgID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiAgICAgPiArICBWQVJJQUJMRV9HTE9C QUwgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlR2xvYmFsOw0KPiA+ICAgICA+ICsgIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVm9sYXRpbGVMYXN0VmFyaWFibGVP ZmZzZXQ7DQo+ID4gICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBOb25Wb2xhdGlsZUxhc3RWYXJpYWJsZU9mZnNldDsNCj4gPiAgICAgPiArICBVSU5UTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1vblZhcmlhYmxlU3BhY2U7DQo+ID4gICAg ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tb25NYXhVc2Vy VmFyaWFibGVTcGFjZTsNCj4gPiAgICAgPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIENvbW1vblJ1bnRpbWVWYXJpYWJsZVNwYWNlOw0KPiA+ICAgICA+ICsgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbW9uVmFyaWFibGVUb3RhbFNpemU7 DQo+ID4gICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21t b25Vc2VyVmFyaWFibGVUb3RhbFNpemU7DQo+ID4gICAgID4gKyAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBId0VyclZhcmlhYmxlVG90YWxTaXplOw0KPiA+ICAgICA+ICsg IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4VmFyaWFibGVTaXplOw0K PiA+ICAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4QXV0 aFZhcmlhYmxlU2l6ZTsNCj4gPiAgICAgPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE1heFZvbGF0aWxlVmFyaWFibGVTaXplOw0KPiA+ICAgICA+ICsgIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NyYXRjaEJ1ZmZlclNpemU7DQo+ID4gICAg ID4gKyAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqUGxhdGZvcm1MYW5n Q29kZXM7DQo+ID4gICAgID4gKyAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqTGFuZ0NvZGVzOw0KPiA+ICAgICA+ICsgIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKlBsYXRmb3JtTGFuZzsNCj4gPiAgICAgPiArICBDSEFSOCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIExhbmdbSVNPXzYzOV8yX0VOVFJZX1NJWkUgKyAxXTsNCj4gPiAg ICAgPiArICBFRklfRklSTVdBUkVfVk9MVU1FX0JMT0NLX1BST1RPQ09MICAgICpGdmJJbnN0YW5j ZTsNCj4gPiAgICAgPiArfSBWQVJJQUJMRV9NT0RVTEVfR0xPQkFMOw0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgRmx1c2ggdGhlIEhPQiB2YXJpYWJsZSB0byBmbGFz aC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBWYXJpYWJsZU5hbWUgICAg ICAgTmFtZSBvZiB2YXJpYWJsZSBoYXMgYmVlbiB1cGRhdGVkIG9yDQo+ID4gZGVsZXRlZC4NCj4g PiAgICAgPiArICBAcGFyYW1baW5dIFZlbmRvckd1aWQgICAgICAgICBHdWlkIG9mIHZhcmlhYmxl IGhhcyBiZWVuIHVwZGF0ZWQgb3INCj4gZGVsZXRlZC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyoqLw0KPiA+ICAgICA+ICtWT0lEDQo+ID4gICAgID4gK0ZsdXNoSG9iVmFyaWFibGVUb0ZsYXNo ICgNCj4gPiAgICAgPiArICBJTiBDSEFSMTYgICAgKlZhcmlhYmxlTmFtZSwNCj4gPiAgICAgPiAr ICBJTiBFRklfR1VJRCAgKlZlbmRvckd1aWQNCj4gPiAgICAgPiArICApOw0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgV3JpdGVzIGEgYnVmZmVyIHRvIHZhcmlhYmxl IHN0b3JhZ2Ugc3BhY2UsIGluIHRoZSB3b3JraW5nIGJsb2NrLg0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICBUaGlzIGZ1bmN0aW9uIHdyaXRlcyBhIGJ1ZmZlciB0byB2YXJpYWJsZSBzdG9yYWdl IHNwYWNlIGludG8gYSBmaXJtd2FyZQ0KPiA+ICAgICA+ICsgIHZvbHVtZSBibG9jayBkZXZpY2Uu IFRoZSBkZXN0aW5hdGlvbiBpcyBzcGVjaWZpZWQgYnkgdGhlIHBhcmFtZXRlcg0KPiA+ICAgICA+ ICsgIFZhcmlhYmxlQmFzZS4gRmF1bHQgVG9sZXJhbnQgV3JpdGUgcHJvdG9jb2wgaXMgdXNlZCBm b3Igd3JpdGluZy4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtICBWYXJpYWJsZUJh c2UgICBCYXNlIGFkZHJlc3Mgb2YgdGhlIHZhcmlhYmxlIHRvIHdyaXRlLg0KPiA+ICAgICA+ICsg IEBwYXJhbSAgVmFyaWFibGVCdWZmZXIgUG9pbnQgdG8gdGhlIHZhcmlhYmxlIGRhdGEgYnVmZmVy Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgIFRoZSBm dW5jdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJ X05PVF9GT1VORCAgRmFpbCB0byBsb2NhdGUgRmF1bHQgVG9sZXJhbnQgV3JpdGUgcHJvdG9jb2wu DQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfQUJPUlRFRCAgICBUaGUgZnVuY3Rpb24gY291bGQg bm90IGNvbXBsZXRlIHN1Y2Nlc3NmdWxseS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0K PiA+ICAgICA+ICtFRklfU1RBVFVTDQo+ID4gICAgID4gK0Z0d1ZhcmlhYmxlU3BhY2UgKA0KPiA+ ICAgICA+ICsgIElOIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgVmFyaWFibGVCYXNlLA0KPiA+ICAg ICA+ICsgIElOIFZBUklBQkxFX1NUT1JFX0hFQURFUiAgKlZhcmlhYmxlQnVmZmVyDQo+ID4gICAg ID4gKyAgKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIEZpbmRz IHZhcmlhYmxlIGluIHN0b3JhZ2UgYmxvY2tzIG9mIHZvbGF0aWxlIGFuZCBub24tdm9sYXRpbGUg c3RvcmFnZQ0KPiBhcmVhcy4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgVGhpcyBjb2RlIGZp bmRzIHZhcmlhYmxlIGluIHN0b3JhZ2UgYmxvY2tzIG9mIHZvbGF0aWxlIGFuZCBub24tdm9sYXRp bGUNCj4gPiBzdG9yYWdlDQo+ID4gICAgID4gYXJlYXMuDQo+ID4gICAgID4gKyAgSWYgVmFyaWFi bGVOYW1lIGlzIGFuIGVtcHR5IHN0cmluZywgdGhlbiB3ZSBqdXN0IHJldHVybiB0aGUgZmlyc3QN Cj4gPiAgICAgPiArICBxdWFsaWZpZWQgdmFyaWFibGUgd2l0aG91dCBjb21wYXJpbmcgVmFyaWFi bGVOYW1lIGFuZCBWZW5kb3JHdWlkLg0KPiA+ICAgICA+ICsgIElmIElnbm9yZVJ0Q2hlY2sgaXMg VFJVRSwgdGhlbiB3ZSBpZ25vcmUgdGhlDQo+ID4gICAgID4gRUZJX1ZBUklBQkxFX1JVTlRJTUVf QUNDRVNTIGF0dHJpYnV0ZSBjaGVjaw0KPiA+ICAgICA+ICsgIGF0IHJ1bnRpbWUgd2hlbiBzZWFy Y2hpbmcgZXhpc3RpbmcgdmFyaWFibGUsIG9ubHkgVmFyaWFibGVOYW1lIGFuZA0KPiA+ICAgICA+ IFZlbmRvckd1aWQgYXJlIGNvbXBhcmVkLg0KPiA+ICAgICA+ICsgIE90aGVyd2lzZSwgdmFyaWFi bGVzIHdpdGhvdXQgRUZJX1ZBUklBQkxFX1JVTlRJTUVfQUNDRVNTIGFyZSBub3QNCj4gPiB2aXNp YmxlDQo+ID4gICAgID4gYXQgcnVudGltZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBh cmFtW2luXSAgIFZhcmlhYmxlTmFtZSAgICAgICAgICAgTmFtZSBvZiB0aGUgdmFyaWFibGUgdG8g YmUgZm91bmQuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgIFZlbmRvckd1aWQgICAgICAgICAg ICAgVmVuZG9yIEdVSUQgdG8gYmUgZm91bmQuDQo+ID4gICAgID4gKyAgQHBhcmFtW291dF0gIFB0 clRyYWNrICAgICAgICAgICAgICAgVkFSSUFCTEVfUE9JTlRFUl9UUkFDSyBzdHJ1Y3R1cmUgZm9y DQo+ID4gICAgID4gb3V0cHV0LA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGluY2x1ZGluZyB0aGUgcmFuZ2Ugc2VhcmNoZWQgYW5kIHRoZSB0YXJnZXQg cG9zaXRpb24uDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgIEdsb2JhbCAgICAgICAgICAgICAg ICAgUG9pbnRlciB0byBWQVJJQUJMRV9HTE9CQUwgc3RydWN0dXJlLA0KPiA+ICAgICA+IGluY2x1 ZGluZw0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJh c2Ugb2Ygdm9sYXRpbGUgdmFyaWFibGUgc3RvcmFnZSBhcmVhLCBiYXNlIG9mDQo+ID4gICAgID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlYgdmFyaWFibGUgc3RvcmFn ZSBhcmVhLCBhbmQgYSBsb2NrLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gICBJZ25vcmVSdENo ZWNrICAgICAgICAgIElnbm9yZQ0KPiA+IEVGSV9WQVJJQUJMRV9SVU5USU1FX0FDQ0VTUw0KPiA+ ICAgICA+IGF0dHJpYnV0ZQ0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoZWNrIGF0IHJ1bnRpbWUgd2hlbiBzZWFyY2hpbmcgdmFyaWFibGUuDQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgICAg IElmIFZhcmlhYmxlTmFtZSBpcyBub3QgYW4gZW1wdHkNCj4gPiBzdHJpbmcsDQo+ID4gICAgID4g d2hpbGUNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW ZW5kb3JHdWlkIGlzIE5VTEwuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgICAgICAgVmFyaWFibGUgc3VjY2Vzc2Z1bGx5IGZvdW5kLg0KPiA+ICAgICA+ICsgIEBy ZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICAgICAgIFZhcmlhYmxlIG5vdCBmb3VuZA0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4gPiAgICAg PiArRmluZFZhcmlhYmxlICgNCj4gPiAgICAgPiArICBJTiAgQ0hBUjE2ICAgICAgICAgICAgICAg ICAgKlZhcmlhYmxlTmFtZSwNCj4gPiAgICAgPiArICBJTiAgRUZJX0dVSUQgICAgICAgICAgICAg ICAgKlZlbmRvckd1aWQsDQo+ID4gICAgID4gKyAgT1VUIFZBUklBQkxFX1BPSU5URVJfVFJBQ0sg ICpQdHJUcmFjaywNCj4gPiAgICAgPiArICBJTiAgVkFSSUFCTEVfR0xPQkFMICAgICAgICAgKkds b2JhbCwNCj4gPiAgICAgPiArICBJTiAgQk9PTEVBTiAgICAgICAgICAgICAgICAgSWdub3JlUnRD aGVjaw0KPiA+ICAgICA+ICsgICk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAg ICAgPiArICBUaGlzIGZ1bmN0aW9uIGlzIHRvIGNoZWNrIGlmIHRoZSByZW1haW5pbmcgdmFyaWFi bGUgc3BhY2UgaXMgZW5vdWdoIHRvIHNldA0KPiA+ICAgICA+ICsgIGFsbCBWYXJpYWJsZXMgZnJv bSBhcmd1bWVudCBsaXN0IHN1Y2Nlc3NmdWxseS4gVGhlIHB1cnBvc2Ugb2YgdGhlIGNoZWNrDQo+ ID4gICAgID4gKyAgaXMgdG8ga2VlcCB0aGUgY29uc2lzdGVuY3kgb2YgdGhlIFZhcmlhYmxlcyB0 byBiZSBpbiB2YXJpYWJsZSBzdG9yYWdlLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBOb3Rl OiBWYXJpYWJsZXMgYXJlIGFzc3VtZWQgdG8gYmUgaW4gc2FtZSBzdG9yYWdlLg0KPiA+ICAgICA+ ICsgIFRoZSBzZXQgc2VxdWVuY2Ugb2YgVmFyaWFibGVzIHdpbGwgYmUgc2FtZSB3aXRoIHRoZSBz ZXF1ZW5jZSBvZg0KPiA+IFZhcmlhYmxlRW50cnkNCj4gPiAgICAgPiBmcm9tIGFyZ3VtZW50IGxp c3QsDQo+ID4gICAgID4gKyAgc28gZm9sbG93IHRoZSBhcmd1bWVudCBzZXF1ZW5jZSB0byBjaGVj ayB0aGUgVmFyaWFibGVzLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1baW5dIEF0 dHJpYnV0ZXMgICAgICAgICBWYXJpYWJsZSBhdHRyaWJ1dGVzIGZvciBWYXJpYWJsZSBlbnRyaWVz Lg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gTWFya2VyICAgICAgICAgICAgIFZBX0xJU1Qgc3R5 bGUgdmFyaWFibGUgYXJndW1lbnQgbGlzdC4NCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgYXJndW1lbnQgbGlzdCB3aXRoIHR5cGUNCj4gPiAg ICAgPiBWQVJJQUJMRV9FTlRSWV9DT05TSVNURU5DWSAqLg0KPiA+ICAgICA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEEgTlVMTCB0ZXJtaW5hdGVzIHRoZSBsaXN0LiBUaGUgVmFy aWFibGVTaXplIG9mDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VkFSSUFCTEVfRU5UUllfQ09OU0lTVEVOQ1kgaXMgdGhlIHZhcmlhYmxlIGRhdGENCj4gc2l6ZQ0K PiA+IGFzDQo+ID4gICAgID4gaW5wdXQuDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgSXQgd2lsbCBiZSBjaGFuZ2VkIHRvIHZhcmlhYmxlIHRvdGFsIHNpemUgYXMg b3V0cHV0Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAg ICAgICAgICBIYXZlIGVub3VnaCB2YXJpYWJsZSBzcGFjZSB0byBzZXQgdGhlIFZhcmlhYmxlcw0K PiA+ICAgICA+IHN1Y2Nlc3NmdWxseS4NCj4gPiAgICAgPiArICBAcmV0dmFsIEZBTFNFICAgICAg ICAgICAgICAgICBObyBlbm91Z2ggdmFyaWFibGUgc3BhY2UgdG8gc2V0IHRoZSBWYXJpYWJsZXMN Cj4gPiAgICAgPiBzdWNjZXNzZnVsbHkuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4g PiAgICAgPiArQk9PTEVBTg0KPiA+ICAgICA+ICtFRklBUEkNCj4gPiAgICAgPiArQ2hlY2tSZW1h aW5pbmdTcGFjZUZvckNvbnNpc3RlbmN5SW50ZXJuYWwgKA0KPiA+ICAgICA+ICsgIElOIFVJTlQz MiAgIEF0dHJpYnV0ZXMsDQo+ID4gICAgID4gKyAgSU4gVkFfTElTVCAgTWFya2VyDQo+ID4gICAg ID4gKyAgKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIFVwZGF0 ZSB0aGUgdmFyaWFibGUgcmVnaW9uIHdpdGggVmFyaWFibGUgaW5mb3JtYXRpb24uIElmDQo+ID4g ICAgID4gRUZJX1ZBUklBQkxFX0FVVEhFTlRJQ0FURURfV1JJVEVfQUNDRVNTIGlzIHNldCwNCj4g PiAgICAgPiArICBpbmRleCBvZiBhc3NvY2lhdGVkIHB1YmxpYyBrZXkgaXMgbmVlZGVkLg0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1baW5dIFZhcmlhYmxlTmFtZSAgICAgICBOYW1l IG9mIHZhcmlhYmxlLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gVmVuZG9yR3VpZCAgICAgICAg IEd1aWQgb2YgdmFyaWFibGUuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBEYXRhICAgICAgICAg ICAgICAgVmFyaWFibGUgZGF0YS4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dIERhdGFTaXplICAg ICAgICAgICBTaXplIG9mIGRhdGEuIDAgbWVhbnMgZGVsZXRlLg0KPiA+ICAgICA+ICsgIEBwYXJh bVtpbl0gQXR0cmlidXRlcyAgICAgICAgIEF0dHJpYnV0ZXMgb2YgdGhlIHZhcmlhYmxlLg0KPiA+ ICAgICA+ICsgIEBwYXJhbVtpbl0gS2V5SW5kZXggICAgICAgICAgIEluZGV4IG9mIGFzc29jaWF0 ZWQgcHVibGljIGtleS4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dIE1vbm90b25pY0NvdW50ICAg ICBWYWx1ZSBvZiBhc3NvY2lhdGVkIG1vbm90b25pYyBjb3VudC4NCj4gPiAgICAgPiArICBAcGFy YW1baW4sIG91dF0gVmFyaWFibGUgICAgICBUaGUgdmFyaWFibGUgaW5mb3JtYXRpb24gdGhhdCBp cyB1c2VkIHRvDQo+IGtlZXANCj4gPiAgICAgPiB0cmFjayBvZiB2YXJpYWJsZSB1c2FnZS4NCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBUaW1lU3RhbXAgICAgICAgICAgVmFs dWUgb2YgYXNzb2NpYXRlZCBUaW1lU3RhbXAuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSB1cGRhdGUgb3BlcmF0aW9uIGlzIHN1Y2Nl c3MuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgVmFyaWFibGUg cmVnaW9uIGlzIGZ1bGwsIGNhbm5vdCB3cml0ZQ0KPiA+IG90aGVyDQo+ID4gICAgID4gZGF0YSBp bnRvIHRoaXMgcmVnaW9uLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4g K0VGSV9TVEFUVVMNCj4gPiAgICAgPiArVXBkYXRlVmFyaWFibGUgKA0KPiA+ICAgICA+ICsgIElO ICAgICAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgKlZhcmlhYmxlTmFtZSwNCj4gPiAgICAgPiAr ICBJTiAgICAgIEVGSV9HVUlEICAgICAgICAgICAgICAgICpWZW5kb3JHdWlkLA0KPiA+ICAgICA+ ICsgIElOICAgICAgVk9JRCAgICAgICAgICAgICAgICAgICAgKkRhdGEsDQo+ID4gICAgID4gKyAg SU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICBEYXRhU2l6ZSwNCj4gPiAgICAgPiArICBJ TiAgICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZXMgT1BUSU9OQUwsDQo+ID4g ICAgID4gKyAgSU4gICAgICBVSU5UMzIgICAgICAgICAgICAgICAgICBLZXlJbmRleCAgT1BUSU9O QUwsDQo+ID4gICAgID4gKyAgSU4gICAgICBVSU5UNjQgICAgICAgICAgICAgICAgICBNb25vdG9u aWNDb3VudCAgT1BUSU9OQUwsDQo+ID4gICAgID4gKyAgSU4gT1VUICBWQVJJQUJMRV9QT0lOVEVS X1RSQUNLICAqVmFyaWFibGUsDQo+ID4gICAgID4gKyAgSU4gICAgICBFRklfVElNRSAgICAgICAg ICAgICAgICAqVGltZVN0YW1wICBPUFRJT05BTA0KPiA+ICAgICA+ICsgICk7DQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBSZXR1cm4gVFJVRSBpZiBFeGl0Qm9vdFNl cnZpY2VzICgpIGhhcyBiZWVuIGNhbGxlZC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJl dHZhbCBUUlVFIElmIEV4aXRCb290U2VydmljZXMgKCkgaGFzIGJlZW4gY2FsbGVkLg0KPiA+ICAg ICA+ICsqKi8NCj4gPiAgICAgPiArQk9PTEVBTg0KPiA+ICAgICA+ICtBdFJ1bnRpbWUgKA0KPiA+ ICAgICA+ICsgIFZPSUQNCj4gPiAgICAgPiArICApOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr LyoqDQo+ID4gICAgID4gKyAgSW5pdGlhbGl6ZXMgYSBiYXNpYyBtdXR1YWwgZXhjbHVzaW9uIGxv Y2suDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMg YSBiYXNpYyBtdXR1YWwgZXhjbHVzaW9uIGxvY2sgdG8gdGhlIHJlbGVhc2VkDQo+IHN0YXRlDQo+ ID4gICAgID4gKyAgYW5kIHJldHVybnMgdGhlIGxvY2suICBFYWNoIGxvY2sgcHJvdmlkZXMgbXV0 dWFsIGV4Y2x1c2lvbiBhY2Nlc3MgYXQgaXRzDQo+ID4gdGFzaw0KPiA+ICAgICA+ICsgIHByaW9y aXR5IGxldmVsLiAgU2luY2UgdGhlcmUgaXMgbm8gcHJlZW1wdGlvbiBvciBtdWx0aXByb2Nlc3Nv ciBzdXBwb3J0IGluDQo+ID4gRUZJLA0KPiA+ICAgICA+ICsgIGFjcXVpcmluZyB0aGUgbG9jayBv bmx5IGNvbnNpc3RzIG9mIHJhaXNpbmcgdG8gdGhlIGxvY2tzIFRQTC4NCj4gPiAgICAgPiArICBJ ZiBMb2NrIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+ID4gICAgID4gKyAgSWYgUHJpb3JpdHkg aXMgbm90IGEgdmFsaWQgVFBMIHZhbHVlLCB0aGVuIEFTU0VSVCgpLg0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICBAcGFyYW0gIExvY2sgICAgICAgQSBwb2ludGVyIHRvIHRoZSBsb2NrIGRhdGEg c3RydWN0dXJlIHRvIGluaXRpYWxpemUuDQo+ID4gICAgID4gKyAgQHBhcmFtICBQcmlvcml0eSAg IEVGSSBUUEwgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBsb2NrLg0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICBAcmV0dXJuIFRoZSBsb2NrLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ ID4gICAgID4gK0VGSV9MT0NLICoNCj4gPiAgICAgPiArSW5pdGlhbGl6ZUxvY2sgKA0KPiA+ICAg ICA+ICsgIElOIE9VVCBFRklfTE9DSyAgKkxvY2ssDQo+ID4gICAgID4gKyAgSU4gRUZJX1RQTCAg ICAgICBQcmlvcml0eQ0KPiA+ICAgICA+ICsgICk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsv KioNCj4gPiAgICAgPiArICBBY3F1aXJlcyBsb2NrIG9ubHkgYXQgYm9vdCB0aW1lLiBTaW1wbHkg cmV0dXJucyBhdCBydW50aW1lLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBUaGlzIGlzIGEg dGVtcGVyYXJ5IGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSByZW1vdmVkIHdoZW4NCj4gPiAgICAgPiAr ICBFZmlBY3F1aXJlTG9jaygpIGluIFVlZmlMaWIgY2FuIGhhbmRsZSB0aGUgY2FsbCBpbiBVRUZJ DQo+ID4gICAgID4gKyAgUnVudGltZXIgZHJpdmVyIGluIFJUIHBoYXNlLg0KPiA+ICAgICA+ICsg IEl0IGNhbGxzIEVmaUFjcXVpcmVMb2NrKCkgYXQgYm9vdCB0aW1lLCBhbmQgc2ltcGx5IHJldHVy bnMNCj4gPiAgICAgPiArICBhdCBydW50aW1lLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBA cGFyYW0gIExvY2sgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGxvY2sgdG8gYWNxdWlyZS4NCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtWT0lEDQo+ID4gICAgID4gK0Fj cXVpcmVMb2NrT25seUF0Qm9vdFRpbWUgKA0KPiA+ICAgICA+ICsgIElOIEVGSV9MT0NLICAqTG9j aw0KPiA+ICAgICA+ICsgICk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAg PiArICBSZWxlYXNlcyBsb2NrIG9ubHkgYXQgYm9vdCB0aW1lLiBTaW1wbHkgcmV0dXJucyBhdCBy dW50aW1lLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBUaGlzIGlzIGEgdGVtcGVyYXJ5IGZ1 bmN0aW9uIHdoaWNoIHdpbGwgYmUgcmVtb3ZlZCB3aGVuDQo+ID4gICAgID4gKyAgRWZpUmVsZWFz ZUxvY2soKSBpbiBVZWZpTGliIGNhbiBoYW5kbGUgdGhlIGNhbGwgaW4gVUVGSQ0KPiA+ICAgICA+ ICsgIFJ1bnRpbWVyIGRyaXZlciBpbiBSVCBwaGFzZS4NCj4gPiAgICAgPiArICBJdCBjYWxscyBF ZmlSZWxlYXNlTG9jaygpIGF0IGJvb3QgdGltZSBhbmQgc2ltcGx5IHJldHVybnMNCj4gPiAgICAg PiArICBhdCBydW50aW1lLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW0gIExvY2sg ICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGxvY2sgdG8gcmVsZWFzZS4NCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtWT0lEDQo+ID4gICAgID4gK1JlbGVhc2VMb2NrT25s eUF0Qm9vdFRpbWUgKA0KPiA+ICAgICA+ICsgIElOIEVGSV9MT0NLICAqTG9jaw0KPiA+ICAgICA+ ICsgICk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBSZXRyaWV2 ZSB0aGUgRlZCIHByb3RvY29sIGludGVyZmFjZSBieSBIQU5ETEUuDQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsgIEBwYXJhbVtpbl0gIEZ2QmxvY2tIYW5kbGUgICAgIFRoZSBoYW5kbGUgb2YgRlZC IHByb3RvY29sIHRoYXQgcHJvdmlkZXMNCj4gPiAgICAgPiBzZXJ2aWNlcyBmb3INCj4gPiAgICAg PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkaW5nLCB3cml0aW5nLCBhbmQg ZXJhc2luZyB0aGUgdGFyZ2V0IGJsb2NrLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtvdXRdIEZ2Qmxv Y2sgICAgICAgICAgIFRoZSBpbnRlcmZhY2Ugb2YgRlZCIHByb3RvY29sDQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBpbnRlcmZhY2Ug aW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQNCj4gPiAgICAgPiBwcm90b2NvbCB3YXMgcmV0 dXJuZWQuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgVGhlIGRl dmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBGVkINCj4gPiBwcm90b2NvbC4NCj4gPiAgICAgPiAr ICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBGdkJsb2NrSGFuZGxlIGlzIG5vdCBhIHZh bGlkDQo+ID4gRUZJX0hBTkRMRQ0KPiA+ICAgICA+IG9yIEZ2QmxvY2sgaXMgTlVMTC4NCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtFRklfU1RBVFVTDQo+ID4gICAgID4g K0dldEZ2YkJ5SGFuZGxlICgNCj4gPiAgICAgPiArICBJTiAgRUZJX0hBTkRMRSAgICAgICAgICAg ICAgICAgICAgICAgICAgRnZCbG9ja0hhbmRsZSwNCj4gPiAgICAgPiArICBPVVQgRUZJX0ZJUk1X QVJFX1ZPTFVNRV9CTE9DS19QUk9UT0NPTCAgKipGdkJsb2NrDQo+ID4gICAgID4gKyAgKTsNCj4g PiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIEZ1bmN0aW9uIHJldHVybnMg YW4gYXJyYXkgb2YgaGFuZGxlcyB0aGF0IHN1cHBvcnQgdGhlIEZWQiBwcm90b2NvbA0KPiA+ICAg ICA+ICsgIGluIGEgYnVmZmVyIGFsbG9jYXRlZCBmcm9tIHBvb2wuDQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsgIEBwYXJhbVtvdXRdICBOdW1iZXJIYW5kbGVzICAgIFRoZSBudW1iZXIgb2YgaGFu ZGxlcyByZXR1cm5lZCBpbg0KPiBCdWZmZXIuDQo+ID4gICAgID4gKyAgQHBhcmFtW291dF0gIEJ1 ZmZlciAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIgdG8gcmV0dXJuIHRoZQ0KPiBy ZXF1ZXN0ZWQNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJh eSBvZiAgaGFuZGxlcyB0aGF0IHN1cHBvcnQgRlZCIHByb3RvY29sLg0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgYXJyYXkgb2YgaGFu ZGxlcyB3YXMgcmV0dXJuZWQgaW4gQnVmZmVyLA0KPiA+IGFuZA0KPiA+ICAgICA+IHRoZSBudW1i ZXIgb2YNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVz IGluIEJ1ZmZlciB3YXMgcmV0dXJuZWQgaW4gTnVtYmVySGFuZGxlcy4NCj4gPiAgICAgPiArICBA cmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICBObyBGVkIgaGFuZGxlIHdhcyBmb3VuZC4NCj4g PiAgICAgPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBUaGVyZSBpcyBub3QgZW5v dWdoIHBvb2wgbWVtb3J5IHRvDQo+ID4gc3RvcmUNCj4gPiAgICAgPiB0aGUgbWF0Y2hpbmcgcmVz dWx0cy4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBOdW1iZXJI YW5kbGVzIGlzIE5VTEwgb3IgQnVmZmVyIGlzDQo+ID4gTlVMTC4NCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyoqLw0KPiA+ICAgICA+ICtFRklfU1RBVFVTDQo+ID4gICAgID4gK0dldEZ2YkNvdW50 QW5kQnVmZmVyICgNCj4gPiAgICAgPiArICBPVVQgVUlOVE4gICAgICAgKk51bWJlckhhbmRsZXMs DQo+ID4gICAgID4gKyAgT1VUIEVGSV9IQU5ETEUgICoqQnVmZmVyDQo+ID4gICAgID4gKyAgKTsN Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIEluaXRpYWxpemVzIHZh cmlhYmxlIHN0b3JlIGFyZWEgZm9yIG5vbi12b2xhdGlsZSBhbmQgdm9sYXRpbGUgdmFyaWFibGUu DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAg IEZ1bmN0aW9uIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVG SV9PVVRfT0ZfUkVTT1VSQ0VTICBGYWlsIHRvIGFsbG9jYXRlIGVub3VnaCBtZW1vcnkNCj4gPiBy ZXNvdXJjZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtFRklfU1RB VFVTDQo+ID4gICAgID4gK1ZhcmlhYmxlQ29tbW9uSW5pdGlhbGl6ZSAoDQo+ID4gICAgID4gKyAg Vk9JRA0KPiA+ICAgICA+ICsgICk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAg ICAgPiArICBUaGlzIGZ1bmN0aW9uIHJlY2xhaW1zIHZhcmlhYmxlIHN0b3JhZ2UgaWYgZnJlZSBz aXplIGlzIGJlbG93IHRoZSB0aHJlc2hvbGQuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8N Cj4gPiAgICAgPiArVk9JRA0KPiA+ICAgICA+ICtSZWNsYWltRm9yT1MgKA0KPiA+ICAgICA+ICsg IFZPSUQNCj4gPiAgICAgPiArICApOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4g ICAgID4gKyAgR2V0IG1heGltdW0gdmFyaWFibGUgc2l6ZSwgY292ZXJpbmcgYm90aCBub24tdm9s YXRpbGUgYW5kIHZvbGF0aWxlDQo+ID4gdmFyaWFibGVzLg0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICBAcmV0dXJuIE1heGltdW0gdmFyaWFibGUgc2l6ZS4NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyoqLw0KPiA+ICAgICA+ICtVSU5UTg0KPiA+ICAgICA+ICtHZXRNYXhWYXJpYWJsZVNpemUg KA0KPiA+ICAgICA+ICsgIFZPSUQNCj4gPiAgICAgPiArICApOw0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArLyoqDQo+ID4gICAgID4gKyAgSW5pdGlhbGl6ZXMgdmFyaWFibGUgd3JpdGUgc2Vydmlj ZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICBGdW5jdGlvbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuDQo+ID4gICAgID4gKyAgQHJldHZhbCBP dGhlcnMgICAgICAgICAgICAgICBGYWlsIHRvIGluaXRpYWxpemUgdGhlIHZhcmlhYmxlIHNlcnZp Y2UuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX1NUQVRVUw0K PiA+ICAgICA+ICtWYXJpYWJsZVdyaXRlU2VydmljZUluaXRpYWxpemUgKA0KPiA+ICAgICA+ICsg IFZPSUQNCj4gPiAgICAgPiArICApOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4g ICAgID4gKyAgUmV0cmlldmUgdGhlIFNNTSBGYXVsdCBUb2xlcmVudCBXcml0ZSBwcm90b2NvbCBp bnRlcmZhY2UuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbVtvdXRdIEZ0d1Byb3Rv Y29sICAgICAgIFRoZSBpbnRlcmZhY2Ugb2YgU01NIEZ0dyBwcm90b2NvbA0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgU01NIFNBUiBw cm90b2NvbCBpbnN0YW5jZSB3YXMgZm91bmQNCj4gPiBhbmQNCj4gPiAgICAgPiByZXR1cm5lZCBp biBTYXJQcm90b2NvbC4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAg ICBUaGUgU01NIFNBUiBwcm90b2NvbCBpbnN0YW5jZSB3YXMgbm90DQo+ID4gZm91bmQuDQo+ID4g ICAgID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgU2FyUHJvdG9jb2wgaXMgTlVM TC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtFRklfU1RBVFVTDQo+ ID4gICAgID4gK0dldEZ0d1Byb3RvY29sICgNCj4gPiAgICAgPiArICBPVVQgVk9JRCAgKipGdHdQ cm90b2NvbA0KPiA+ICAgICA+ICsgICk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4g PiAgICAgPiArICBHZXQgdGhlIHByb3BlciBmdmIgaGFuZGxlIGFuZC9vciBmdmIgcHJvdG9jb2wg YnkgdGhlIGdpdmVuIEZsYXNoIGFkZHJlc3MuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBw YXJhbVtpbl0gQWRkcmVzcyAgICAgICAgVGhlIEZsYXNoIGFkZHJlc3MuDQo+ID4gICAgID4gKyAg QHBhcmFtW291dF0gRnZiSGFuZGxlICAgICBJbiBvdXRwdXQsIGlmIGl0IGlzIG5vdCBOVUxMLCBp dCBwb2ludHMgdG8gdGhlDQo+ID4gcHJvcGVyDQo+ID4gICAgID4gRlZCIGhhbmRsZS4NCj4gPiAg ICAgPiArICBAcGFyYW1bb3V0XSBGdmJQcm90b2NvbCAgIEluIG91dHB1dCwgaWYgaXQgaXMgbm90 IE5VTEwsIGl0IHBvaW50cyB0byB0aGUNCj4gPiBwcm9wZXINCj4gPiAgICAgPiBGVkIgcHJvdG9j b2wuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX1NUQVRVUw0K PiA+ICAgICA+ICtHZXRGdmJJbmZvQnlBZGRyZXNzICgNCj4gPiAgICAgPiArICBJTiAgRUZJX1BI WVNJQ0FMX0FERFJFU1MgICAgICAgICAgICAgICAgQWRkcmVzcywNCj4gPiAgICAgPiArICBPVVQg RUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAgICAgKkZ2YkhhbmRsZSBPUFRJT05BTCwN Cj4gPiAgICAgPiArICBPVVQgRUZJX0ZJUk1XQVJFX1ZPTFVNRV9CTE9DS19QUk9UT0NPTCAgKipG dmJQcm90b2NvbA0KPiA+IE9QVElPTkFMDQo+ID4gICAgID4gKyAgKTsNCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBUaGlzIGNvZGUgZmluZHMg dmFyaWFibGUgaW4gc3RvcmFnZSBibG9ja3MgKFZvbGF0aWxlIG9yIE5vbi1Wb2xhdGlsZSkuDQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIENhdXRpb246IFRoaXMgZnVuY3Rpb24gbWF5IHJlY2Vp dmUgdW50cnVzdGVkIGlucHV0Lg0KPiA+ICAgICA+ICsgIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGlu dm9rZWQgaW4gU01NIG1vZGUsIGFuZCBkYXRhc2l6ZSBhbmQgZGF0YSBhcmUNCj4gPiAgICAgPiBl eHRlcm5hbCBpbnB1dC4NCj4gPiAgICAgPiArICBUaGlzIGZ1bmN0aW9uIHdpbGwgZG8gYmFzaWMg dmFsaWRhdGlvbiwgYmVmb3JlIHBhcnNlIHRoZSBkYXRhLg0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICBAcGFyYW0gVmFyaWFibGVOYW1lICAgICAgICAgICAgICAgTmFtZSBvZiBWYXJpYWJsZSB0 byBiZSBmb3VuZC4NCj4gPiAgICAgPiArICBAcGFyYW0gVmVuZG9yR3VpZCAgICAgICAgICAgICAg ICAgVmFyaWFibGUgdmVuZG9yIEdVSUQuDQo+ID4gICAgID4gKyAgQHBhcmFtIEF0dHJpYnV0ZXMg ICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgZm91bmQuDQo+ ID4gICAgID4gKyAgQHBhcmFtIERhdGFTaXplICAgICAgICAgICAgICAgICAgIFNpemUgb2YgRGF0 YSBmb3VuZC4gSWYgc2l6ZSBpcyBsZXNzIHRoYW4gdGhlDQo+ID4gICAgID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIHRoaXMgdmFsdWUgY29udGFpbnMgdGhlIHJl cXVpcmVkIHNpemUuDQo+ID4gICAgID4gKyAgQHBhcmFtIERhdGEgICAgICAgICAgICAgICAgICAg ICAgIFRoZSBidWZmZXIgdG8gcmV0dXJuIHRoZSBjb250ZW50cyBvZiB0aGUNCj4gPiB2YXJpYWJs ZS4NCj4gPiAgICAgPiBNYXkgYmUgTlVMTA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB3aXRoIGEgemVybyBEYXRhU2l6ZSBpbiBvcmRlciB0byBkZXRlcm1p bmUgdGhlIHNpemUNCj4gPiBidWZmZXINCj4gPiAgICAgPiBuZWVkZWQuDQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIEByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgICBJbnZhbGlkIHBh cmFtZXRlci4NCj4gPiAgICAgPiArICBAcmV0dXJuIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAg RmluZCB0aGUgc3BlY2lmaWVkIHZhcmlhYmxlLg0KPiA+ICAgICA+ICsgIEByZXR1cm4gRUZJX05P VF9GT1VORCAgICAgICAgICAgICBOb3QgZm91bmQuDQo+ID4gICAgID4gKyAgQHJldHVybiBFRklf QlVGRkVSX1RPX1NNQUxMICAgICAgIERhdGFTaXplIGlzIHRvbyBzbWFsbCBmb3IgdGhlIHJlc3Vs dC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtFRklfU1RBVFVTDQo+ ID4gICAgID4gK0VGSUFQSQ0KPiA+ICAgICA+ICtWYXJpYWJsZVNlcnZpY2VHZXRWYXJpYWJsZSAo DQo+ID4gICAgID4gKyAgSU4gICAgICBDSEFSMTYgICAgKlZhcmlhYmxlTmFtZSwNCj4gPiAgICAg PiArICBJTiAgICAgIEVGSV9HVUlEICAqVmVuZG9yR3VpZCwNCj4gPiAgICAgPiArICBPVVQgICAg IFVJTlQzMiAgICAqQXR0cmlidXRlcyBPUFRJT05BTCwNCj4gPiAgICAgPiArICBJTiBPVVQgIFVJ TlROICAgICAqRGF0YVNpemUsDQo+ID4gICAgID4gKyAgT1VUICAgICBWT0lEICAgICAgKkRhdGEg T1BUSU9OQUwNCj4gPiAgICAgPiArICApOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFRoaXMgY29kZSBGaW5kcyB0aGUgTmV4dCBhdmFpbGFi bGUgdmFyaWFibGUuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIENhdXRpb246IFRoaXMgZnVu Y3Rpb24gbWF5IHJlY2VpdmUgdW50cnVzdGVkIGlucHV0Lg0KPiA+ICAgICA+ICsgIFRoaXMgZnVu Y3Rpb24gbWF5IGJlIGludm9rZWQgaW4gU01NIG1vZGUuIFRoaXMgZnVuY3Rpb24gd2lsbCBkbyBi YXNpYw0KPiA+ICAgICA+IHZhbGlkYXRpb24sIGJlZm9yZSBwYXJzZSB0aGUgZGF0YS4NCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtIFZhcmlhYmxlTmFtZVNpemUgICAgICAgICAgIFRo ZSBzaXplIG9mIHRoZSBWYXJpYWJsZU5hbWUgYnVmZmVyLg0KPiBUaGUNCj4gPiAgICAgPiBzaXpl IG11c3QgYmUgbGFyZ2UNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZW5vdWdoIHRvIGZpdCBpbnB1dCBzdHJpbmcgc3VwcGxpZWQgaW4gVmFyaWFibGVOYW1l DQo+ID4gYnVmZmVyLg0KPiA+ICAgICA+ICsgIEBwYXJhbSBWYXJpYWJsZU5hbWUgICAgICAgICAg ICAgICBQb2ludGVyIHRvIHZhcmlhYmxlIG5hbWUuDQo+ID4gICAgID4gKyAgQHBhcmFtIFZlbmRv ckd1aWQgICAgICAgICAgICAgICAgIFZhcmlhYmxlIFZlbmRvciBHdWlkLg0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgVGhlIGZ1bmN0 aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfTk9U X0ZPVU5EICAgICAgICAgICAgIFRoZSBuZXh0IHZhcmlhYmxlIHdhcyBub3QgZm91bmQuDQo+ID4g ICAgID4gKyAgQHJldHZhbCBFRklfQlVGRkVSX1RPT19TTUFMTCAgICAgIFRoZSBWYXJpYWJsZU5h bWVTaXplIGlzIHRvbyBzbWFsbA0KPiA+IGZvcg0KPiA+ICAgICA+IHRoZSByZXN1bHQuDQo+ID4g ICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlTmFtZVNp emUgaGFzIGJlZW4gdXBkYXRlZCB3aXRoIHRoZSBzaXplDQo+ID4gbmVlZGVkDQo+ID4gICAgID4g dG8gY29tcGxldGUgdGhlIHJlcXVlc3QuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgICAgIFZhcmlhYmxlTmFtZVNpemUgaXMgTlVMTC4NCj4gPiAgICAgPiArICBA cmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgICAgVmFyaWFibGVOYW1lIGlzIE5VTEwuDQo+ ID4gICAgID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICAgIFZlbmRvckd1aWQg aXMgTlVMTC4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgICAg VGhlIGlucHV0IHZhbHVlcyBvZiBWYXJpYWJsZU5hbWUNCj4gPiBhbmQNCj4gPiAgICAgPiBWZW5k b3JHdWlkIGFyZSBub3QgYSBuYW1lIGFuZA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBHVUlEIG9mIGFuIGV4aXN0aW5nIHZhcmlhYmxlLg0KPiA+ICAgICA+ ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgICBOdWxsLXRlcm1pbmF0b3IgaXMg bm90IGZvdW5kIGluIHRoZQ0KPiA+IGZpcnN0DQo+ID4gICAgID4gVmFyaWFibGVOYW1lU2l6ZSBi eXRlcyBvZg0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 aGUgaW5wdXQgVmFyaWFibGVOYW1lIGJ1ZmZlci4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoq Lw0KPiA+ICAgICA+ICtFRklfU1RBVFVTDQo+ID4gICAgID4gK0VGSUFQSQ0KPiA+ICAgICA+ICtW YXJpYWJsZVNlcnZpY2VHZXROZXh0VmFyaWFibGVOYW1lICgNCj4gPiAgICAgPiArICBJTiBPVVQg IFVJTlROICAgICAqVmFyaWFibGVOYW1lU2l6ZSwNCj4gPiAgICAgPiArICBJTiBPVVQgIENIQVIx NiAgICAqVmFyaWFibGVOYW1lLA0KPiA+ICAgICA+ICsgIElOIE9VVCAgRUZJX0dVSUQgICpWZW5k b3JHdWlkDQo+ID4gICAgID4gKyAgKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICBUaGlzIGNvZGUgc2V0cyB2YXJpYWJsZSBpbiBzdG9yYWdl IGJsb2NrcyAoVm9sYXRpbGUgb3IgTm9uLVZvbGF0aWxlKS4NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgQ2F1dGlvbjogVGhpcyBmdW5jdGlvbiBtYXkgcmVjZWl2ZSB1bnRydXN0ZWQgaW5wdXQu DQo+ID4gICAgID4gKyAgVGhpcyBmdW5jdGlvbiBtYXkgYmUgaW52b2tlZCBpbiBTTU0gbW9kZSwg YW5kIGRhdGFzaXplIGFuZCBkYXRhIGFyZQ0KPiA+ICAgICA+IGV4dGVybmFsIGlucHV0Lg0KPiA+ ICAgICA+ICsgIFRoaXMgZnVuY3Rpb24gd2lsbCBkbyBiYXNpYyB2YWxpZGF0aW9uLCBiZWZvcmUg cGFyc2UgdGhlIGRhdGEuDQo+ID4gICAgID4gKyAgVGhpcyBmdW5jdGlvbiB3aWxsIHBhcnNlIHRo ZSBhdXRoZW50aWNhdGlvbiBjYXJlZnVsbHkgdG8gYXZvaWQgc2VjdXJpdHkNCj4gPiBpc3N1ZXMs DQo+ID4gICAgID4gbGlrZQ0KPiA+ICAgICA+ICsgIGJ1ZmZlciBvdmVyZmxvdywgaW50ZWdlciBv dmVyZmxvdy4NCj4gPiAgICAgPiArICBUaGlzIGZ1bmN0aW9uIHdpbGwgY2hlY2sgYXR0cmlidXRl IGNhcmVmdWxseSB0byBhdm9pZCBhdXRoZW50aWNhdGlvbg0KPiBieXBhc3MuDQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsgIEBwYXJhbSBWYXJpYWJsZU5hbWUgICAgICAgICAgICAgICAgICAgICBO YW1lIG9mIFZhcmlhYmxlIHRvIGJlIGZvdW5kLg0KPiA+ICAgICA+ICsgIEBwYXJhbSBWZW5kb3JH dWlkICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSB2ZW5kb3IgR1VJRC4NCj4gPiAgICAg PiArICBAcGFyYW0gQXR0cmlidXRlcyAgICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlIHZh bHVlIG9mIHRoZSB2YXJpYWJsZSBmb3VuZA0KPiA+ICAgICA+ICsgIEBwYXJhbSBEYXRhU2l6ZSAg ICAgICAgICAgICAgICAgICAgICAgICBTaXplIG9mIERhdGEgZm91bmQuIElmIHNpemUgaXMgbGVz cyB0aGFuIHRoZQ0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkYXRhLCB0aGlzIHZhbHVlIGNvbnRhaW5zIHRoZSByZXF1aXJlZCBzaXplLg0KPiA+ ICAgICA+ICsgIEBwYXJhbSBEYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIHBv aW50ZXIuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR1cm4gRUZJX0lOVkFMSURfUEFS QU1FVEVSICAgICAgICAgICBJbnZhbGlkIHBhcmFtZXRlci4NCj4gPiAgICAgPiArICBAcmV0dXJu IEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgU2V0IHN1Y2Nlc3NmdWxseS4NCj4gPiAg ICAgPiArICBAcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgICAgICAgICAgUmVzb3VyY2Ug bm90IGVub3VnaCB0byBzZXQNCj4gPiB2YXJpYWJsZS4NCj4gPiAgICAgPiArICBAcmV0dXJuIEVG SV9OT1RfRk9VTkQgICAgICAgICAgICAgICAgICAgTm90IGZvdW5kLg0KPiA+ICAgICA+ICsgIEBy ZXR1cm4gRUZJX1dSSVRFX1BST1RFQ1RFRCAgICAgICAgICAgICBWYXJpYWJsZSBpcyByZWFkLW9u bHkuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX1NUQVRVUw0K PiA+ICAgICA+ICtFRklBUEkNCj4gPiAgICAgPiArVmFyaWFibGVTZXJ2aWNlU2V0VmFyaWFibGUg KA0KPiA+ICAgICA+ICsgIElOIENIQVIxNiAgICAqVmFyaWFibGVOYW1lLA0KPiA+ICAgICA+ICsg IElOIEVGSV9HVUlEICAqVmVuZG9yR3VpZCwNCj4gPiAgICAgPiArICBJTiBVSU5UMzIgICAgQXR0 cmlidXRlcywNCj4gPiAgICAgPiArICBJTiBVSU5UTiAgICAgRGF0YVNpemUsDQo+ID4gICAgID4g KyAgSU4gVk9JRCAgICAgICpEYXRhDQo+ID4gICAgID4gKyAgKTsNCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKy8qKg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBUaGlzIGNvZGUgcmV0dXJucyBp bmZvcm1hdGlvbiBhYm91dCB0aGUgRUZJIHZhcmlhYmxlcy4NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgQ2F1dGlvbjogVGhpcyBmdW5jdGlvbiBtYXkgcmVjZWl2ZSB1bnRydXN0ZWQgaW5wdXQu DQo+ID4gICAgID4gKyAgVGhpcyBmdW5jdGlvbiBtYXkgYmUgaW52b2tlZCBpbiBTTU0gbW9kZS4g VGhpcyBmdW5jdGlvbiB3aWxsIGRvIGJhc2ljDQo+ID4gICAgID4gdmFsaWRhdGlvbiwgYmVmb3Jl IHBhcnNlIHRoZSBkYXRhLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW0gQXR0cmli dXRlcyAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZXMgYml0bWFzayB0byBzcGVjaWZ5IHRo ZSB0eXBlIG9mDQo+ID4gICAgID4gdmFyaWFibGVzDQo+ID4gICAgID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB3aGljaCB0byByZXR1cm4gaW5mb3JtYXRpb24u DQo+ID4gICAgID4gKyAgQHBhcmFtIE1heGltdW1WYXJpYWJsZVN0b3JhZ2VTaXplICAgICBQb2lu dGVyIHRvIHRoZSBtYXhpbXVtIHNpemUNCj4gb2YNCj4gPiB0aGUNCj4gPiAgICAgPiBzdG9yYWdl IHNwYWNlIGF2YWlsYWJsZQ0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZm9yIHRoZSBFRkkgdmFyaWFibGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXR0 cmlidXRlcw0KPiA+ICAgICA+IHNwZWNpZmllZC4NCj4gPiAgICAgPiArICBAcGFyYW0gUmVtYWlu aW5nVmFyaWFibGVTdG9yYWdlU2l6ZSAgIFBvaW50ZXIgdG8gdGhlIHJlbWFpbmluZyBzaXplDQo+ IG9mDQo+ID4gdGhlDQo+ID4gICAgID4gc3RvcmFnZSBzcGFjZSBhdmFpbGFibGUNCj4gPiAgICAg PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBFRkkgdmFyaWFi bGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXR0cmlidXRlcw0KPiA+IHNwZWNpZmllZC4NCj4gPiAg ICAgPiArICBAcGFyYW0gTWF4aW11bVZhcmlhYmxlU2l6ZSAgICAgICAgICAgIFBvaW50ZXIgdG8g dGhlIG1heGltdW0gc2l6ZSBvZiBhbg0KPiA+ICAgICA+IGluZGl2aWR1YWwgRUZJIHZhcmlhYmxl cw0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNz b2NpYXRlZCB3aXRoIHRoZSBhdHRyaWJ1dGVzIHNwZWNpZmllZC4NCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyAgQHJldHVybiBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICBRdWVyeSBzdWNj ZXNzZnVsbHkuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX1NU QVRVUw0KPiA+ICAgICA+ICtFRklBUEkNCj4gPiAgICAgPiArVmFyaWFibGVTZXJ2aWNlUXVlcnlW YXJpYWJsZUluZm9JbnRlcm5hbCAoDQo+ID4gICAgID4gKyAgSU4gIFVJTlQzMiAgQXR0cmlidXRl cywNCj4gPiAgICAgPiArICBPVVQgVUlOVDY0ICAqTWF4aW11bVZhcmlhYmxlU3RvcmFnZVNpemUs DQo+ID4gICAgID4gKyAgT1VUIFVJTlQ2NCAgKlJlbWFpbmluZ1ZhcmlhYmxlU3RvcmFnZVNpemUs DQo+ID4gICAgID4gKyAgT1VUIFVJTlQ2NCAgKk1heGltdW1WYXJpYWJsZVNpemUNCj4gPiAgICAg PiArICApOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsgIFRoaXMgY29kZSByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBFRkkgdmFyaWFi bGVzLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBDYXV0aW9uOiBUaGlzIGZ1bmN0aW9uIG1h eSByZWNlaXZlIHVudHJ1c3RlZCBpbnB1dC4NCj4gPiAgICAgPiArICBUaGlzIGZ1bmN0aW9uIG1h eSBiZSBpbnZva2VkIGluIFNNTSBtb2RlLiBUaGlzIGZ1bmN0aW9uIHdpbGwgZG8gYmFzaWMNCj4g PiAgICAgPiB2YWxpZGF0aW9uLCBiZWZvcmUgcGFyc2UgdGhlIGRhdGEuDQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIEBwYXJhbSBBdHRyaWJ1dGVzICAgICAgICAgICAgICAgICAgICAgQXR0cmli dXRlcyBiaXRtYXNrIHRvIHNwZWNpZnkgdGhlIHR5cGUgb2YNCj4gPiAgICAgPiB2YXJpYWJsZXMN Cj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHdo aWNoIHRvIHJldHVybiBpbmZvcm1hdGlvbi4NCj4gPiAgICAgPiArICBAcGFyYW0gTWF4aW11bVZh cmlhYmxlU3RvcmFnZVNpemUgICAgIFBvaW50ZXIgdG8gdGhlIG1heGltdW0gc2l6ZQ0KPiBvZg0K PiA+IHRoZQ0KPiA+ICAgICA+IHN0b3JhZ2Ugc3BhY2UgYXZhaWxhYmxlDQo+ID4gICAgID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIEVGSSB2YXJpYWJs ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBhdHRyaWJ1dGVzDQo+ID4gICAgID4gc3BlY2lmaWVkLg0K PiA+ICAgICA+ICsgIEBwYXJhbSBSZW1haW5pbmdWYXJpYWJsZVN0b3JhZ2VTaXplICAgUG9pbnRl ciB0byB0aGUgcmVtYWluaW5nIHNpemUNCj4gb2YNCj4gPiB0aGUNCj4gPiAgICAgPiBzdG9yYWdl IHNwYWNlIGF2YWlsYWJsZQ0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZm9yIEVGSSB2YXJpYWJsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBhdHRyaWJ1 dGVzDQo+ID4gc3BlY2lmaWVkLg0KPiA+ICAgICA+ICsgIEBwYXJhbSBNYXhpbXVtVmFyaWFibGVT aXplICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgbWF4aW11bSBzaXplIG9mIGFuDQo+ID4gICAg ID4gaW5kaXZpZHVhbCBFRkkgdmFyaWFibGVzDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBhc3NvY2lhdGVkIHdpdGggdGhlIGF0dHJpYnV0ZXMgc3Bl Y2lmaWVkLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcmV0dXJuIEVGSV9JTlZBTElEX1BB UkFNRVRFUiAgICAgICAgIEFuIGludmFsaWQgY29tYmluYXRpb24gb2YNCj4gPiBhdHRyaWJ1dGUN Cj4gPiAgICAgPiBiaXRzIHdhcyBzdXBwbGllZC4NCj4gPiAgICAgPiArICBAcmV0dXJuIEVGSV9T VUNDRVNTICAgICAgICAgICAgICAgICAgIFF1ZXJ5IHN1Y2Nlc3NmdWxseS4NCj4gPiAgICAgPiAr ICBAcmV0dXJuIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgICAgICAgIFRoZSBhdHRyaWJ1dGUgaXMg bm90IHN1cHBvcnRlZCBvbg0KPiB0aGlzDQo+ID4gICAgID4gcGxhdGZvcm0uDQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX1NUQVRVUw0KPiA+ICAgICA+ICtFRklB UEkNCj4gPiAgICAgPiArVmFyaWFibGVTZXJ2aWNlUXVlcnlWYXJpYWJsZUluZm8gKA0KPiA+ICAg ICA+ICsgIElOICBVSU5UMzIgIEF0dHJpYnV0ZXMsDQo+ID4gICAgID4gKyAgT1VUIFVJTlQ2NCAg Kk1heGltdW1WYXJpYWJsZVN0b3JhZ2VTaXplLA0KPiA+ICAgICA+ICsgIE9VVCBVSU5UNjQgICpS ZW1haW5pbmdWYXJpYWJsZVN0b3JhZ2VTaXplLA0KPiA+ICAgICA+ICsgIE9VVCBVSU5UNjQgICpN YXhpbXVtVmFyaWFibGVTaXplDQo+ID4gICAgID4gKyAgKTsNCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKy8qKg0KPiA+ICAgICA+ICsgIE1hcmsgYSB2YXJpYWJsZSB0aGF0IHdpbGwgYmVjb21lIHJl YWQtb25seSBhZnRlciBsZWF2aW5nIHRoZSBEWEUgcGhhc2UNCj4gb2YNCj4gPiAgICAgPiBleGVj dXRpb24uDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gVGhpcyAgICAgICAg ICBUaGUgVkFSSUFCTEVfTE9DS19QUk9UT0NPTCBpbnN0YW5jZS4NCj4gPiAgICAgPiArICBAcGFy YW1baW5dIFZhcmlhYmxlTmFtZSAgQSBwb2ludGVyIHRvIHRoZSB2YXJpYWJsZSBuYW1lIHRoYXQg d2lsbCBiZQ0KPiA+IG1hZGUNCj4gPiAgICAgPiByZWFkLW9ubHkgc3Vic2VxdWVudGx5Lg0KPiA+ ICAgICA+ICsgIEBwYXJhbVtpbl0gVmVuZG9yR3VpZCAgICBBIHBvaW50ZXIgdG8gdGhlIHZlbmRv ciBHVUlEIHRoYXQgd2lsbCBiZQ0KPiBtYWRlDQo+ID4gICAgID4gcmVhZC1vbmx5IHN1YnNlcXVl bnRseS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgVGhlIHZhcmlhYmxlIHNwZWNpZmllZCBieSB0aGUgVmFyaWFibGVOYW1lDQo+ID4gYW5k DQo+ID4gICAgID4gdGhlIFZlbmRvckd1aWQgd2FzIG1hcmtlZA0KPiA+ICAgICA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHBlbmRpbmcgdG8gYmUgcmVhZC1vbmx5Lg0KPiA+ ICAgICA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIFZhcmlhYmxlTmFtZSBvciBW ZW5kb3JHdWlkIGlzDQo+IE5VTEwuDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgT3IgVmFyaWFibGVOYW1lIGlzIGFuIGVtcHR5IHN0cmluZy4NCj4gPiAgICAgPiAr ICBAcmV0dmFsIEVGSV9BQ0NFU1NfREVOSUVEDQo+IEVGSV9FTkRfT0ZfRFhFX0VWRU5UX0dST1VQ X0dVSUQNCj4gPiBvcg0KPiA+ICAgICA+IEVGSV9FVkVOVF9HUk9VUF9SRUFEWV9UT19CT09UIGhh cw0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgYmVl biBzaWduYWxlZC4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBU aGVyZSBpcyBub3QgZW5vdWdoIHJlc291cmNlIHRvIGhvbGQNCj4gPiB0aGUNCj4gPiAgICAgPiBs b2NrIHJlcXVlc3QuDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtFRklfU1RBVFVTDQo+ID4g ICAgID4gK0VGSUFQSQ0KPiA+ICAgICA+ICtWYXJpYWJsZUxvY2tSZXF1ZXN0VG9Mb2NrICgNCj4g PiAgICAgPiArICBJTiBDT05TVCBFREtJSV9WQVJJQUJMRV9MT0NLX1BST1RPQ09MICAqVGhpcywN Cj4gPiAgICAgPiArICBJTiAgICAgICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAqVmFy aWFibGVOYW1lLA0KPiA+ICAgICA+ICsgIElOICAgICAgIEVGSV9HVUlEICAgICAgICAgICAgICAg ICAgICAgICpWZW5kb3JHdWlkDQo+ID4gICAgID4gKyAgKTsNCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKy8qKg0KPiA+ICAgICA+ICsgIFJlZ2lzdGVyIFNldFZhcmlhYmxlIGNoZWNrIGhhbmRsZXIu DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gSGFuZGxlciAgICAgICAgICAg IFBvaW50ZXIgdG8gY2hlY2sgaGFuZGxlci4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIFNldFZhcmlhYmxlIGNoZWNrIGhhbmRsZXIg d2FzDQo+IHJlZ2lzdGVyZWQNCj4gPiAgICAgPiBzdWNjZXNzZnVsbHkuDQo+ID4gICAgID4gKyAg QHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgSGFuZGxlciBpcyBOVUxMLg0KPiA+ICAgICA+ ICsgIEByZXR2YWwgRUZJX0FDQ0VTU19ERU5JRUQNCj4gRUZJX0VORF9PRl9EWEVfRVZFTlRfR1JP VVBfR1VJRA0KPiA+IG9yDQo+ID4gICAgID4gRUZJX0VWRU5UX0dST1VQX1JFQURZX1RPX0JPT1Qg aGFzDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeSBi ZWVuIHNpZ25hbGVkLg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMg IFRoZXJlIGlzIG5vdCBlbm91Z2ggcmVzb3VyY2UgZm9yIHRoZQ0KPiA+ICAgICA+IFNldFZhcmlh YmxlIGNoZWNrIGhhbmRsZXIgcmVnaXN0ZXIgcmVxdWVzdC4NCj4gPiAgICAgPiArICBAcmV0dmFs IEVGSV9VTlNVUFBPUlRFRCAgICAgICBUaGlzIGludGVyZmFjZSBpcyBub3QgaW1wbGVtZW50ZWQu DQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUs IGl0IGlzIHVuc3VwcG9ydGVkIGluIFZhckNoZWNrIHByb3RvY29sIGlmDQo+ID4gYm90aA0KPiA+ ICAgICA+IFZhckNoZWNrIGFuZCBTbW1WYXJDaGVjayBwcm90b2NvbHMgYXJlIHByZXNlbnQuDQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX1NUQVRVUw0KPiA+ICAg ICA+ICtFRklBUEkNCj4gPiAgICAgPiArVmFyQ2hlY2tSZWdpc3RlclNldFZhcmlhYmxlQ2hlY2tI YW5kbGVyICgNCj4gPiAgICAgPiArICBJTiBWQVJfQ0hFQ0tfU0VUX1ZBUklBQkxFX0NIRUNLX0hB TkRMRVIgIEhhbmRsZXINCj4gPiAgICAgPiArICApOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr LyoqDQo+ID4gICAgID4gKyAgVmFyaWFibGUgcHJvcGVydHkgc2V0Lg0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICBAcGFyYW1baW5dIE5hbWUgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSB2 YXJpYWJsZSBuYW1lLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gR3VpZCAgICAgICAgICAgICAg IFBvaW50ZXIgdG8gdGhlIHZlbmRvciBHVUlELg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gVmFy aWFibGVQcm9wZXJ0eSAgIFBvaW50ZXIgdG8gdGhlIGlucHV0IHZhcmlhYmxlIHByb3BlcnR5Lg0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBU aGUgcHJvcGVydHkgb2YgdmFyaWFibGUgc3BlY2lmaWVkIGJ5IHRoZQ0KPiA+IE5hbWUNCj4gPiAg ICAgPiBhbmQgR3VpZCB3YXMgc2V0IHN1Y2Nlc3NmdWxseS4NCj4gPiAgICAgPiArICBAcmV0dmFs IEVGSV9JTlZBTElEX1BBUkFNRVRFUiBOYW1lLCBHdWlkIG9yIFZhcmlhYmxlUHJvcGVydHkgaXMN Cj4gPiBOVUxMLA0KPiA+ICAgICA+IG9yIE5hbWUgaXMgYW4gZW1wdHkgc3RyaW5nLA0KPiA+ICAg ICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHRoZSBmaWVsZHMgb2YgVmFy aWFibGVQcm9wZXJ0eSBhcmUgbm90IHZhbGlkLg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX0FD Q0VTU19ERU5JRUQNCj4gRUZJX0VORF9PRl9EWEVfRVZFTlRfR1JPVVBfR1VJRA0KPiA+IG9yDQo+ ID4gICAgID4gRUZJX0VWRU5UX0dST1VQX1JFQURZX1RPX0JPT1QgaGFzDQo+ID4gICAgID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeSBiZWVuIHNpZ25hbGVkLg0KPiA+ ICAgICA+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgIFRoZXJlIGlzIG5vdCBlbm91 Z2ggcmVzb3VyY2UgZm9yIHRoZQ0KPiA+ICAgICA+IHZhcmlhYmxlIHByb3BlcnR5IHNldCByZXF1 ZXN0Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMN Cj4gPiAgICAgPiArRUZJQVBJDQo+ID4gICAgID4gK1ZhckNoZWNrVmFyaWFibGVQcm9wZXJ0eVNl dCAoDQo+ID4gICAgID4gKyAgSU4gQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAqTmFtZSwN Cj4gPiAgICAgPiArICBJTiBFRklfR1VJRCAgICAgICAgICAgICAgICAgICAgICpHdWlkLA0KPiA+ ICAgICA+ICsgIElOIFZBUl9DSEVDS19WQVJJQUJMRV9QUk9QRVJUWSAgKlZhcmlhYmxlUHJvcGVy dHkNCj4gPiAgICAgPiArICApOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAg ID4gKyAgVmFyaWFibGUgcHJvcGVydHkgZ2V0Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBA cGFyYW1baW5dICBOYW1lICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSB2YXJpYWJsZSBuYW1l Lg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gIEd1aWQgICAgICAgICAgICAgIFBvaW50ZXIgdG8g dGhlIHZlbmRvciBHVUlELg0KPiA+ICAgICA+ICsgIEBwYXJhbVtvdXRdIFZhcmlhYmxlUHJvcGVy dHkgIFBvaW50ZXIgdG8gdGhlIG91dHB1dCB2YXJpYWJsZSBwcm9wZXJ0eS4NCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHByb3BlcnR5 IG9mIHZhcmlhYmxlIHNwZWNpZmllZCBieSB0aGUNCj4gPiBOYW1lDQo+ID4gICAgID4gYW5kIEd1 aWQgd2FzIGdvdCBzdWNjZXNzZnVsbHkuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgTmFtZSwgR3VpZCBvciBWYXJpYWJsZVByb3BlcnR5IGlzDQo+ID4gTlVMTCwN Cj4gPiAgICAgPiBvciBOYW1lIGlzIGFuIGVtcHR5IHN0cmluZy4NCj4gPiAgICAgPiArICBAcmV0 dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICBUaGUgcHJvcGVydHkgb2YgdmFyaWFibGUgc3BlY2lm aWVkIGJ5IHRoZQ0KPiA+IE5hbWUNCj4gPiAgICAgPiBhbmQgR3VpZCB3YXMgbm90IGZvdW5kLg0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4gPiAg ICAgPiArRUZJQVBJDQo+ID4gICAgID4gK1ZhckNoZWNrVmFyaWFibGVQcm9wZXJ0eUdldCAoDQo+ ID4gICAgID4gKyAgSU4gQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgKk5hbWUsDQo+ID4g ICAgID4gKyAgSU4gRUZJX0dVSUQgICAgICAgICAgICAgICAgICAgICAgKkd1aWQsDQo+ID4gICAg ID4gKyAgT1VUIFZBUl9DSEVDS19WQVJJQUJMRV9QUk9QRVJUWSAgKlZhcmlhYmxlUHJvcGVydHkN Cj4gPiAgICAgPiArICApOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4g KyAgSW5pdGlhbGl6ZSB2YXJpYWJsZSBxdW90YS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoq Lw0KPiA+ICAgICA+ICtWT0lEDQo+ID4gICAgID4gK0luaXRpYWxpemVWYXJpYWJsZVF1b3RhICgN Cj4gPiAgICAgPiArICBWT0lEDQo+ID4gICAgID4gKyAgKTsNCj4gPiAgICAgPiArDQo+ID4gICAg ID4gK2V4dGVybiBWQVJJQUJMRV9NT0RVTEVfR0xPQkFMICAgICAgKm1WYXJpYWJsZU1vZHVsZUds b2JhbDsNCj4gPiAgICAgPiArZXh0ZXJuIEVGSV9GSVJNV0FSRV9WT0xVTUVfSEVBREVSICAqbU52 RnZIZWFkZXJDYWNoZTsNCj4gPiAgICAgPiArZXh0ZXJuIFZBUklBQkxFX1NUT1JFX0hFQURFUiAg ICAgICAqbU52VmFyaWFibGVDYWNoZTsNCj4gPiAgICAgPiArZXh0ZXJuIFZBUklBQkxFX0lORk9f RU5UUlkgICAgICAgICAqZ1ZhcmlhYmxlSW5mbzsNCj4gPiAgICAgPiArZXh0ZXJuIEJPT0xFQU4g ICAgICAgICAgICAgICAgICAgICBtRW5kT2ZEeGU7DQo+ID4gICAgID4gK2V4dGVybiBWQVJfQ0hF Q0tfUkVRVUVTVF9TT1VSQ0UgICAgbVJlcXVlc3RTb3VyY2U7DQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICtleHRlcm4gQVVUSF9WQVJfTElCX0NPTlRFWFRfT1VUICBtQXV0aENvbnRleHRPdXQ7DQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBGaW5kcyB2YXJpYWJsZSBp biBzdG9yYWdlIGJsb2NrcyBvZiB2b2xhdGlsZSBhbmQgbm9uLXZvbGF0aWxlIHN0b3JhZ2UNCj4g YXJlYXMuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFRoaXMgY29kZSBmaW5kcyB2YXJpYWJs ZSBpbiBzdG9yYWdlIGJsb2NrcyBvZiB2b2xhdGlsZSBhbmQgbm9uLXZvbGF0aWxlDQo+ID4gc3Rv cmFnZQ0KPiA+ICAgICA+IGFyZWFzLg0KPiA+ICAgICA+ICsgIElmIFZhcmlhYmxlTmFtZSBpcyBh biBlbXB0eSBzdHJpbmcsIHRoZW4gd2UganVzdCByZXR1cm4gdGhlIGZpcnN0DQo+ID4gICAgID4g KyAgcXVhbGlmaWVkIHZhcmlhYmxlIHdpdGhvdXQgY29tcGFyaW5nIFZhcmlhYmxlTmFtZSBhbmQg VmVuZG9yR3VpZC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgVmFyaWFi bGVOYW1lICAgICAgICAgIE5hbWUgb2YgdGhlIHZhcmlhYmxlIHRvIGJlIGZvdW5kLg0KPiA+ICAg ICA+ICsgIEBwYXJhbVtpbl0gIFZlbmRvckd1aWQgICAgICAgICAgICBWYXJpYWJsZSB2ZW5kb3Ig R1VJRCB0byBiZSBmb3VuZC4NCj4gPiAgICAgPiArICBAcGFyYW1bb3V0XSBBdXRoVmFyaWFibGVJ bmZvICAgICAgUG9pbnRlciB0byBBVVRIX1ZBUklBQkxFX0lORk8NCj4gPiBzdHJ1Y3R1cmUNCj4g PiAgICAgPiBmb3INCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgb3V0cHV0IG9mIHRoZSB2YXJpYWJsZSBmb3VuZC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICAgIElmIFZhcmlhYmxlTmFtZSBpcyBu b3QgYW4gZW1wdHkNCj4gPiBzdHJpbmcsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHdoaWxlIFZlbmRvckd1aWQgaXMgTlVMTC4NCj4gPiAgICAgPiArICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgVmFyaWFibGUgc3VjY2Vzc2Z1bGx5IGZv dW5kLg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICAgICBWYXJp YWJsZSBub3QgZm91bmQNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtF RklfU1RBVFVTDQo+ID4gICAgID4gK0VGSUFQSQ0KPiA+ICAgICA+ICtWYXJpYWJsZUV4TGliRmlu ZFZhcmlhYmxlICgNCj4gPiAgICAgPiArICBJTiAgQ0hBUjE2ICAgICAgICAgICAgICAqVmFyaWFi bGVOYW1lLA0KPiA+ICAgICA+ICsgIElOICBFRklfR1VJRCAgICAgICAgICAgICpWZW5kb3JHdWlk LA0KPiA+ICAgICA+ICsgIE9VVCBBVVRIX1ZBUklBQkxFX0lORk8gICpBdXRoVmFyaWFibGVJbmZv DQo+ID4gICAgID4gKyAgKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ ICsgIEZpbmRzIG5leHQgdmFyaWFibGUgaW4gc3RvcmFnZSBibG9ja3Mgb2Ygdm9sYXRpbGUgYW5k IG5vbi12b2xhdGlsZSBzdG9yYWdlDQo+ID4gYXJlYXMuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsgIFRoaXMgY29kZSBmaW5kcyBuZXh0IHZhcmlhYmxlIGluIHN0b3JhZ2UgYmxvY2tzIG9mIHZv bGF0aWxlIGFuZCBub24tDQo+IHZvbGF0aWxlDQo+ID4gICAgID4gc3RvcmFnZSBhcmVhcy4NCj4g PiAgICAgPiArICBJZiBWYXJpYWJsZU5hbWUgaXMgYW4gZW1wdHkgc3RyaW5nLCB0aGVuIHdlIGp1 c3QgcmV0dXJuIHRoZSBmaXJzdA0KPiA+ICAgICA+ICsgIHF1YWxpZmllZCB2YXJpYWJsZSB3aXRo b3V0IGNvbXBhcmluZyBWYXJpYWJsZU5hbWUgYW5kIFZlbmRvckd1aWQuDQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gIFZhcmlhYmxlTmFtZSAgICAgICAgICBOYW1lIG9mIHRo ZSB2YXJpYWJsZSB0byBiZSBmb3VuZC4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dICBWZW5kb3JH dWlkICAgICAgICAgICAgVmFyaWFibGUgdmVuZG9yIEdVSUQgdG8gYmUgZm91bmQuDQo+ID4gICAg ID4gKyAgQHBhcmFtW291dF0gQXV0aFZhcmlhYmxlSW5mbyAgICAgIFBvaW50ZXIgdG8gQVVUSF9W QVJJQUJMRV9JTkZPDQo+ID4gc3RydWN0dXJlDQo+ID4gICAgID4gZm9yDQo+ID4gICAgID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBvZiB0aGUgbmV4dCB2YXJp YWJsZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJB TUVURVIgICAgIElmIFZhcmlhYmxlTmFtZSBpcyBub3QgYW4gZW1wdHkNCj4gPiBzdHJpbmcsDQo+ ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIFZlbmRv ckd1aWQgaXMgTlVMTC4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAg ICAgICAgVmFyaWFibGUgc3VjY2Vzc2Z1bGx5IGZvdW5kLg0KPiA+ICAgICA+ICsgIEByZXR2YWwg RUZJX05PVF9GT1VORCAgICAgICAgICAgICBWYXJpYWJsZSBub3QgZm91bmQNCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtFRklfU1RBVFVTDQo+ID4gICAgID4gK0VGSUFQ SQ0KPiA+ICAgICA+ICtWYXJpYWJsZUV4TGliRmluZE5leHRWYXJpYWJsZSAoDQo+ID4gICAgID4g KyAgSU4gIENIQVIxNiAgICAgICAgICAgICAgKlZhcmlhYmxlTmFtZSwNCj4gPiAgICAgPiArICBJ TiAgRUZJX0dVSUQgICAgICAgICAgICAqVmVuZG9yR3VpZCwNCj4gPiAgICAgPiArICBPVVQgQVVU SF9WQVJJQUJMRV9JTkZPICAqQXV0aFZhcmlhYmxlSW5mbw0KPiA+ICAgICA+ICsgICk7DQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBVcGRhdGUgdGhlIHZhcmlhYmxl IHJlZ2lvbiB3aXRoIFZhcmlhYmxlIGluZm9ybWF0aW9uLg0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICBAcGFyYW1baW5dIEF1dGhWYXJpYWJsZUluZm8gICAgICAgUG9pbnRlciBBVVRIX1ZBUklB QkxFX0lORk8NCj4gc3RydWN0dXJlDQo+ID4gZm9yDQo+ID4gICAgID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlucHV0IG9mIHRoZSB2YXJpYWJsZS4NCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgIFRoZSB1cGRh dGUgb3BlcmF0aW9uIGlzIHN1Y2Nlc3MuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgICAgIEludmFsaWQgcGFyYW1ldGVyLg0KPiA+ICAgICA+ICsgIEByZXR2YWwg RUZJX1dSSVRFX1BST1RFQ1RFRCAgICAgICBWYXJpYWJsZSBpcyB3cml0ZS1wcm90ZWN0ZWQuDQo+ ID4gICAgID4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgICAgIFRoZXJlIGlzIG5v dCBlbm91Z2ggcmVzb3VyY2UuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAg PiArRUZJX1NUQVRVUw0KPiA+ICAgICA+ICtFRklBUEkNCj4gPiAgICAgPiArVmFyaWFibGVFeExp YlVwZGF0ZVZhcmlhYmxlICgNCj4gPiAgICAgPiArICBJTiBBVVRIX1ZBUklBQkxFX0lORk8gICpB dXRoVmFyaWFibGVJbmZvDQo+ID4gICAgID4gKyAgKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4g Ky8qKg0KPiA+ICAgICA+ICsgIEdldCBzY3JhdGNoIGJ1ZmZlci4NCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyAgQHBhcmFtW2luLCBvdXRdIFNjcmF0Y2hCdWZmZXJTaXplIFNjcmF0Y2ggYnVmZmVy IHNpemUuIElmIGlucHV0IHNpemUgaXMNCj4gPiBncmVhdGVyDQo+ID4gICAgID4gdGhhbg0KPiA+ ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWF4aW11bSBz dXBwb3J0ZWQgYnVmZmVyIHNpemUsIHRoaXMgdmFsdWUNCj4gY29udGFpbnMNCj4gPiAgICAgPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1heGltdW0gc3VwcG9ydGVk IGJ1ZmZlciBzaXplIGFzIG91dHB1dC4NCj4gPiAgICAgPiArICBAcGFyYW1bb3V0XSAgICAgU2Ny YXRjaEJ1ZmZlciAgICAgUG9pbnRlciB0byBzY3JhdGNoIGJ1ZmZlciBhZGRyZXNzLg0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIEdldCBzY3JhdGNo IGJ1ZmZlciBzdWNjZXNzZnVsbHkuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JU RUQgICBJZiBpbnB1dCBzaXplIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bQ0KPiA+ICAgICA+ IHN1cHBvcnRlZCBidWZmZXIgc2l6ZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ ICAgICA+ICtFRklfU1RBVFVTDQo+ID4gICAgID4gK0VGSUFQSQ0KPiA+ICAgICA+ICtWYXJpYWJs ZUV4TGliR2V0U2NyYXRjaEJ1ZmZlciAoDQo+ID4gICAgID4gKyAgSU4gT1VUIFVJTlROICAqU2Ny YXRjaEJ1ZmZlclNpemUsDQo+ID4gICAgID4gKyAgT1VUICAgIFZPSUQgICAqKlNjcmF0Y2hCdWZm ZXINCj4gPiAgICAgPiArICApOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAg ID4gKyAgVGhpcyBmdW5jdGlvbiBpcyB0byBjaGVjayBpZiB0aGUgcmVtYWluaW5nIHZhcmlhYmxl IHNwYWNlIGlzIGVub3VnaCB0byBzZXQNCj4gPiAgICAgPiArICBhbGwgVmFyaWFibGVzIGZyb20g YXJndW1lbnQgbGlzdCBzdWNjZXNzZnVsbHkuIFRoZSBwdXJwb3NlIG9mIHRoZSBjaGVjaw0KPiA+ ICAgICA+ICsgIGlzIHRvIGtlZXAgdGhlIGNvbnNpc3RlbmN5IG9mIHRoZSBWYXJpYWJsZXMgdG8g YmUgaW4gdmFyaWFibGUgc3RvcmFnZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgTm90ZTog VmFyaWFibGVzIGFyZSBhc3N1bWVkIHRvIGJlIGluIHNhbWUgc3RvcmFnZS4NCj4gPiAgICAgPiAr ICBUaGUgc2V0IHNlcXVlbmNlIG9mIFZhcmlhYmxlcyB3aWxsIGJlIHNhbWUgd2l0aCB0aGUgc2Vx dWVuY2Ugb2YNCj4gPiBWYXJpYWJsZUVudHJ5DQo+ID4gICAgID4gZnJvbSBhcmd1bWVudCBsaXN0 LA0KPiA+ICAgICA+ICsgIHNvIGZvbGxvdyB0aGUgYXJndW1lbnQgc2VxdWVuY2UgdG8gY2hlY2sg dGhlIFZhcmlhYmxlcy4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBBdHRy aWJ1dGVzICAgICAgICAgVmFyaWFibGUgYXR0cmlidXRlcyBmb3IgVmFyaWFibGUgZW50cmllcy4N Cj4gPiAgICAgPiArICBAcGFyYW0gLi4uICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUg YXJndW1lbnQgbGlzdCB3aXRoIHR5cGUNCj4gPiAgICAgPiBWQVJJQUJMRV9FTlRSWV9DT05TSVNU RU5DWSAqLg0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgTlVM TCB0ZXJtaW5hdGVzIHRoZSBsaXN0LiBUaGUgVmFyaWFibGVTaXplIG9mDQo+ID4gICAgID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFSSUFCTEVfRU5UUllfQ09OU0lTVEVOQ1kg aXMgdGhlIHZhcmlhYmxlIGRhdGENCj4gc2l6ZQ0KPiA+IGFzDQo+ID4gICAgID4gaW5wdXQuDQo+ ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgd2lsbCBiZSBjaGFu Z2VkIHRvIHZhcmlhYmxlIHRvdGFsIHNpemUgYXMgb3V0cHV0Lg0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgICAgICAgICBIYXZlIGVub3VnaCB2YXJpYWJs ZSBzcGFjZSB0byBzZXQgdGhlIFZhcmlhYmxlcw0KPiA+ICAgICA+IHN1Y2Nlc3NmdWxseS4NCj4g PiAgICAgPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgICAgICAgICBObyBlbm91Z2ggdmFyaWFi bGUgc3BhY2UgdG8gc2V0IHRoZSBWYXJpYWJsZXMNCj4gPiAgICAgPiBzdWNjZXNzZnVsbHkuDQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArQk9PTEVBTg0KPiA+ICAgICA+ ICtFRklBUEkNCj4gPiAgICAgPiArVmFyaWFibGVFeExpYkNoZWNrUmVtYWluaW5nU3BhY2VGb3JD b25zaXN0ZW5jeSAoDQo+ID4gICAgID4gKyAgSU4gVUlOVDMyICBBdHRyaWJ1dGVzLA0KPiA+ICAg ICA+ICsgIC4uLg0KPiA+ICAgICA+ICsgICk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioN Cj4gPiAgICAgPiArICBSZXR1cm4gVFJVRSBpZiBhdCBPUyBydW50aW1lLg0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICBAcmV0dmFsIFRSVUUgSWYgYXQgT1MgcnVudGltZS4NCj4gPiAgICAgPiAr ICBAcmV0dmFsIEZBTFNFIElmIGF0IGJvb3QgdGltZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyoqLw0KPiA+ICAgICA+ICtCT09MRUFODQo+ID4gICAgID4gK0VGSUFQSQ0KPiA+ICAgICA+ICtW YXJpYWJsZUV4TGliQXRSdW50aW1lICgNCj4gPiAgICAgPiArICBWT0lEDQo+ID4gICAgID4gKyAg KTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIElzIHVzZXIgdmFy aWFibGU/DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gVmFyaWFibGUgICBQ b2ludGVyIHRvIHZhcmlhYmxlIGhlYWRlci4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJl dHZhbCBUUlVFICAgICAgICAgIFVzZXIgdmFyaWFibGUuDQo+ID4gICAgID4gKyAgQHJldHZhbCBG QUxTRSAgICAgICAgIFN5c3RlbSB2YXJpYWJsZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoq Lw0KPiA+ICAgICA+ICtCT09MRUFODQo+ID4gICAgID4gK0lzVXNlclZhcmlhYmxlICgNCj4gPiAg ICAgPiArICBJTiBWQVJJQUJMRV9IRUFERVIgICpWYXJpYWJsZQ0KPiA+ICAgICA+ICsgICk7DQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgVmFy aWFibGUgc3RvcmUgZ2FyYmFnZSBjb2xsZWN0aW9uIGFuZCByZWNsYWltIG9wZXJhdGlvbi4NCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgICAgIFZhcmlhYmxlQmFzZSAgICAg ICAgICAgIEJhc2UgYWRkcmVzcyBvZiB2YXJpYWJsZSBzdG9yZS4NCj4gPiAgICAgPiArICBAcGFy YW1bb3V0XSAgICAgTGFzdFZhcmlhYmxlT2Zmc2V0ICAgICAgT2Zmc2V0IG9mIGxhc3QgdmFyaWFi bGUuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgICAgIElzVm9sYXRpbGUgICAgICAgICAgICAg IFRoZSB2YXJpYWJsZSBzdG9yZSBpcyB2b2xhdGlsZSBvciBub3Q7DQo+ID4gICAgID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGl0IGlzIG5vbi12b2xhdGls ZSwgbmVlZCBGVFcuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luLCBvdXRdIFVwZGF0aW5nUHRyVHJh Y2sgICAgICAgIFBvaW50ZXIgdG8gdXBkYXRpbmcgdmFyaWFibGUNCj4gPiBwb2ludGVyDQo+ID4g ICAgID4gdHJhY2sgc3RydWN0dXJlLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBOZXdW YXJpYWJsZSAgICAgICAgICAgICBQb2ludGVyIHRvIG5ldyB2YXJpYWJsZS4NCj4gPiAgICAgPiAr ICBAcGFyYW1baW5dICAgICAgTmV3VmFyaWFibGVTaXplICAgICAgICAgTmV3IHZhcmlhYmxlIHNp emUuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR1cm4gRUZJX1NVQ0NFU1MgICAgICAg ICAgICAgICAgICBSZWNsYWltIG9wZXJhdGlvbiBoYXMgZmluaXNoZWQNCj4gPiBzdWNjZXNzZnVs bHkuDQo+ID4gICAgID4gKyAgQHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUyAgICAgICAgIE5v IGVub3VnaCBtZW1vcnkgcmVzb3VyY2VzDQo+IG9yDQo+ID4gICAgID4gdmFyaWFibGUgc3BhY2Uu DQo+ID4gICAgID4gKyAgQHJldHVybiBPdGhlcnMgICAgICAgICAgICAgICAgICAgICAgIFVuZXhw ZWN0IGVycm9yIGhhcHBlbmVkIGR1cmluZyByZWNsYWltDQo+ID4gICAgID4gb3BlcmF0aW9uLg0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4gPiAg ICAgPiArUmVjbGFpbSAoDQo+ID4gICAgID4gKyAgSU4gICAgIEVGSV9QSFlTSUNBTF9BRERSRVNT ICAgIFZhcmlhYmxlQmFzZSwNCj4gPiAgICAgPiArICBPVVQgICAgVUlOVE4gICAgICAgICAgICAg ICAgICAgKkxhc3RWYXJpYWJsZU9mZnNldCwNCj4gPiAgICAgPiArICBJTiAgICAgQk9PTEVBTiAg ICAgICAgICAgICAgICAgSXNWb2xhdGlsZSwNCj4gPiAgICAgPiArICBJTiBPVVQgVkFSSUFCTEVf UE9JTlRFUl9UUkFDSyAgKlVwZGF0aW5nUHRyVHJhY2ssDQo+ID4gICAgID4gKyAgSU4gICAgIFZB UklBQkxFX0hFQURFUiAgICAgICAgICpOZXdWYXJpYWJsZSwNCj4gPiAgICAgPiArICBJTiAgICAg VUlOVE4gICAgICAgICAgICAgICAgICAgTmV3VmFyaWFibGVTaXplDQo+ID4gICAgID4gKyAgKTsN Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBU aGlzIGZ1bmN0aW9uIHdyaXRlcyBkYXRhIHRvIHRoZSBGV0ggYXQgdGhlIGNvcnJlY3QgTEJBIGV2 ZW4gaWYgdGhlIExCQXMNCj4gPiAgICAgPiArICBhcmUgZnJhZ21lbnRlZC4NCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyAgQHBhcmFtIEdsb2JhbCAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8g VkFSSUFCTEVfR0xPQkFMIHN0cnVjdHVyZS4NCj4gPiAgICAgPiArICBAcGFyYW0gVm9sYXRpbGUg ICAgICAgICAgICAgICAgUG9pbnQgb3V0IHRoZSBWYXJpYWJsZSBpcyBWb2xhdGlsZSBvciBOb24t DQo+IFZvbGF0aWxlLg0KPiA+ICAgICA+ICsgIEBwYXJhbSBTZXRCeUluZGV4ICAgICAgICAgICAg ICBUUlVFIGlmIHRhcmdldCBwb2ludGVyIGlzIGdpdmVuIGFzIGluZGV4Lg0KPiA+ICAgICA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSBpZiB0YXJnZXQgcG9pbnRlciBp cyBhYnNvbHV0ZS4NCj4gPiAgICAgPiArICBAcGFyYW0gRnZiICAgICAgICAgICAgICAgICAgICAg UG9pbnRlciB0byB0aGUgd3JpdGFibGUgRlZCIHByb3RvY29sLg0KPiA+ICAgICA+ICsgIEBwYXJh bSBEYXRhUHRySW5kZXggICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBEYXRhIGZyb20gdGhlIGVu ZCBvZg0KPiA+ICAgICA+IFZBUklBQkxFX1NUT1JFX0hFQURFUg0KPiA+ICAgICA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUuDQo+ID4gICAgID4gKyAgQHBhcmFt IERhdGFTaXplICAgICAgICAgICAgICAgIFNpemUgb2YgZGF0YSB0byBiZSB3cml0dGVuLg0KPiA+ ICAgICA+ICsgIEBwYXJhbSBCdWZmZXIgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBi dWZmZXIgZnJvbSB3aGljaCBkYXRhIGlzDQo+IHdyaXR0ZW4uDQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBQYXJhbWV0ZXJzIG5vdCB2YWxp ZC4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgRnZiIGlzIGEg TlVMTCBmb3IgTm9uLVZvbGF0aWxlIHZhcmlhYmxlDQo+ID4gICAgID4gdXBkYXRlLg0KPiA+ICAg ICA+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICBUaGUgcmVtYWluaW5nIHNpemUg aXMgbm90IGVub3VnaC4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAg ICAgVmFyaWFibGUgc3RvcmUgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQuDQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX1NUQVRVUw0KPiA+ICAgICA+ICtVcGRhdGVWYXJp YWJsZVN0b3JlICgNCj4gPiAgICAgPiArICBJTiBWQVJJQUJMRV9HTE9CQUwgICAgICAgICAgICAg ICAgICAgICAqR2xvYmFsLA0KPiA+ICAgICA+ICsgIElOIEJPT0xFQU4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZvbGF0aWxlLA0KPiA+ICAgICA+ICsgIElOIEJPT0xFQU4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFNldEJ5SW5kZXgsDQo+ID4gICAgID4gKyAgSU4gRUZJX0ZJUk1X QVJFX1ZPTFVNRV9CTE9DS19QUk9UT0NPTCAgKkZ2YiwNCj4gPiAgICAgPiArICBJTiBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhUHRySW5kZXgsDQo+ID4gICAgID4gKyAg SU4gVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YVNpemUsDQo+ID4gICAg ID4gKyAgSU4gVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlcg0KPiA+ ICAgICA+ICsgICk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBV cGRhdGUgcGFydGlhbCBkYXRhIG9mIGEgdmFyaWFibGUgb24gTlYgc3RvcmFnZSBhbmQvb3IgY2Fj aGVkIGNvcHkuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gIFZhcmlhYmxl SW5mbyAgUG9pbnRlciB0byBhIHZhcmlhYmxlIHdpdGggZGV0YWlsZWQNCj4gaW5mb3JtYXRpb24u DQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgT2Zmc2V0ICAgICAgICBPZmZzZXQgdG8gd3JpdGUg ZnJvbS4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dICBTaXplICAgICAgICAgIFNpemUgb2YgZGF0 YSBCdWZmZXIgdG8gdXBkYXRlLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gIEJ1ZmZlciAgICAg ICAgUG9pbnRlciB0byBkYXRhIGJ1ZmZlciB0byB1cGRhdGUuDQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGRhdGEg d2FzIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX1VOU1VQ UE9SVEVEICAgICAgICAgSWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZGlyZWN0bHkgaW4NCj4g PiBydW50aW1lLg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAg SWYgVmFyaWFibGVJbmZvLCBCdWZmZXIgb3IgU2l6ZSBhcmUNCj4gbm90DQo+ID4gICAgID4gdmFs aWQuDQo+ID4gICAgID4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICAgICBGYWlsZWQg dG8gdXBkYXRlIE5WIHN0b3JhZ2Ugb3IgdmFyaWFibGUgY2FjaGUuDQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX1NUQVRVUw0KPiA+ICAgICA+ICtFRklBUEkNCj4g PiAgICAgPiArVmFyaWFibGVFeExpYlVwZGF0ZU52VmFyaWFibGUgKA0KPiA+ICAgICA+ICsgIElO ICBQUk9URUNURURfVkFSSUFCTEVfSU5GTyAgKlZhcmlhYmxlSW5mbywNCj4gPiAgICAgPiArICBJ TiAgVUlOVE4gICAgICAgICAgICAgICAgICAgIE9mZnNldCwNCj4gPiAgICAgPiArICBJTiAgVUlO VDMyICAgICAgICAgICAgICAgICAgIFNpemUsDQo+ID4gICAgID4gKyAgSU4gIFVJTlQ4ICAgICAg ICAgICAgICAgICAgICAqQnVmZmVyDQo+ID4gICAgID4gKyAgKTsNCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIEZpbmRzIHRoZSBnaXZlbiB2YXJpYWJsZSBpbiBhIHZh cmlhYmxlIHN0b3JlIGluIFNNTS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQ2F1dGlvbjog VGhpcyBmdW5jdGlvbiBtYXkgcmVjZWl2ZSB1bnRydXN0ZWQgaW5wdXQuDQo+ID4gICAgID4gKyAg VGhlIGRhdGEgc2l6ZSBpcyBleHRlcm5hbCBpbnB1dCwgc28gdGhpcyBmdW5jdGlvbiB3aWxsIHZh bGlkYXRlIGl0IGNhcmVmdWxseSB0bw0KPiA+ICAgICA+IGF2b2lkIGJ1ZmZlciBvdmVyZmxvdy4N Cj4gPg0KPiA+ICAgICBbSmlhbkpXXSBUb28gbG9uZyBsaW5lLiBXcmFwIGl0IHRvIHdpdGhpbiA4 MCBjaGFyYWN0ZXJzIGZvciBlYWNoIGxpbmUuDQo+ID4NCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgQHBhcmFtW2luXSAgICAgIFZhcmlhYmxlTmFtZSAgICAgICBOYW1lIG9mIFZhcmlhYmxlIHRv IGJlIGZvdW5kLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBWZW5kb3JHdWlkICAgICAg ICAgVmFyaWFibGUgdmVuZG9yIEdVSUQuDQo+ID4gICAgID4gKyAgQHBhcmFtW291dF0gICAgIEF0 dHJpYnV0ZXMgICAgICAgICBBdHRyaWJ1dGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIGZvdW5kLg0K PiA+ICAgICA+ICsgIEBwYXJhbVtpbiwgb3V0XSBEYXRhU2l6ZSAgICAgICAgICAgU2l6ZSBvZiBE YXRhIGZvdW5kLiBJZiBzaXplIGlzIGxlc3MgdGhhbiB0aGUNCj4gPiAgICAgPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIHRoaXMgdmFsdWUgY29udGFpbnMgdGhl IHJlcXVpcmVkIHNpemUuDQo+ID4gICAgID4gKyAgQHBhcmFtW291dF0gICAgIERhdGEgICAgICAg ICAgICAgICBEYXRhIHBvaW50ZXIuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgRm91bmQgdGhlIHNwZWNpZmllZCB2YXJpYWJsZS4N Cj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgICAgIEludmFsaWQg cGFyYW1ldGVyLg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICAg ICAgVGhlIHNwZWNpZmllZCB2YXJpYWJsZSBjb3VsZCBub3QgYmUNCj4gPiBmb3VuZC4NCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtFRklfU1RBVFVTDQo+ID4gICAgID4g K0VGSUFQSQ0KPiA+ICAgICA+ICtGaW5kVmFyaWFibGVJblNtbSAoDQo+ID4gICAgID4gKyAgSU4g ICAgICBDSEFSMTYgICAgKlZhcmlhYmxlTmFtZSwNCj4gPiAgICAgPiArICBJTiAgICAgIEVGSV9H VUlEICAqVmVuZG9yR3VpZCwNCj4gPiAgICAgPiArICBPVVQgICAgIFVJTlQzMiAgICAqQXR0cmli dXRlcyBPUFRJT05BTCwNCj4gPiAgICAgPiArICBJTiBPVVQgIFVJTlROICAgICAqRGF0YVNpemUs DQo+ID4gICAgID4gKyAgT1VUICAgICBWT0lEICAgICAgKkRhdGEgT1BUSU9OQUwNCj4gPiAgICAg PiArICApOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArI2VuZGlmDQo+ID4gICAgID4gZGlmZiAt LWdpdA0KPiA+ICAgICA+DQo+ID4NCj4gYS9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxl L1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlTm9uVm9sYXQNCj4gPiAgICAgPiBpbGUuaA0K PiA+ICAgICA+DQo+ID4NCj4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3Rl Y3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlTm9uVm9sYXQNCj4gPiAgICAgPiBpbGUuaA0KPiA+ICAg ICA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gICAgID4gaW5kZXggMDAwMDAwMDAwMDAwLi5h ODRkYjQ4NzdjMTMNCj4gPiAgICAgPiAtLS0gL2Rldi9udWxsDQo+ID4gICAgID4gKysrDQo+ID4g ICAgID4NCj4gPg0KPiBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVk L1J1bnRpbWVEeGUvVmFyaWFibGVOb25Wb2xhdA0KPiA+ICAgICA+IGlsZS5oDQo+ID4gICAgID4g QEAgLTAsMCArMSw2NyBAQA0KPiA+ICAgICA+ICsvKiogQGZpbGUNCj4gPiAgICAgPiArICBDb21t b24gdmFyaWFibGUgbm9uLXZvbGF0aWxlIHN0b3JlIHJvdXRpbmVzLg0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArQ29weXJpZ2h0IChjKSAyMDE5LTIwMjIsIEludGVsIENvcnBvcmF0aW9uLiBBbGwg cmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiAgICAgPiArU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArI2lmbmRlZiBWQVJJQUJMRV9OT05fVk9MQVRJTEVfSF8NCj4gPiAg ICAgPiArI2RlZmluZSBWQVJJQUJMRV9OT05fVk9MQVRJTEVfSF8NCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyNpbmNsdWRlICJWYXJpYWJsZS5oIg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoq DQo+ID4gICAgID4gKyAgR2V0IG5vbi12b2xhdGlsZSBtYXhpbXVtIHZhcmlhYmxlIHNpemUuDQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR1cm4gTm9uLXZvbGF0aWxlIG1heGltdW0gdmFy aWFibGUgc2l6ZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtVSU5U Tg0KPiA+ICAgICA+ICtHZXROb25Wb2xhdGlsZU1heFZhcmlhYmxlU2l6ZSAoDQo+ID4gICAgID4g KyAgVk9JRA0KPiA+ICAgICA+ICsgICk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4g PiAgICAgPiArICBJbml0IGVtdWxhdGVkIG5vbi12b2xhdGlsZSB2YXJpYWJsZSBzdG9yZS4NCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtW291dF0gVmFyaWFibGVTdG9yZUJhc2UgT3V0 cHV0IHBvaW50ZXIgdG8gZW11bGF0ZWQgbm9uLQ0KPiB2b2xhdGlsZQ0KPiA+ICAgICA+IHZhcmlh YmxlIHN0b3JlIGJhc2UuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgIEZ1bmN0aW9uIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4NCj4gPiAgICAg PiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBGYWlsIHRvIGFsbG9jYXRlIGVub3Vn aCBtZW1vcnkNCj4gPiByZXNvdXJjZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ ICAgICA+ICtFRklfU1RBVFVTDQo+ID4gICAgID4gK0luaXRFbXVOb25Wb2xhdGlsZVZhcmlhYmxl U3RvcmUgKA0KPiA+ICAgICA+ICsgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAqVmFyaWFibGVTdG9y ZUJhc2UNCj4gPiAgICAgPiArICApOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4g ICAgID4gKyAgSW5pdCByZWFsIG5vbi12b2xhdGlsZSB2YXJpYWJsZSBzdG9yZS4NCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyAgQHBhcmFtW291dF0gVmFyaWFibGVTdG9yZUJhc2UgT3V0cHV0IHBv aW50ZXIgdG8gcmVhbCBub24tdm9sYXRpbGUNCj4gPiB2YXJpYWJsZQ0KPiA+ICAgICA+IHN0b3Jl IGJhc2UuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgIEZ1bmN0aW9uIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4NCj4gPiAgICAgPiArICBAcmV0 dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBGYWlsIHRvIGFsbG9jYXRlIGVub3VnaCBtZW1vcnkN Cj4gPiByZXNvdXJjZS4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9WT0xVTUVfQ09SUlVQVEVE ICBWYXJpYWJsZSBTdG9yZSBvciBGaXJtd2FyZSBWb2x1bWUNCj4gPiBmb3INCj4gPiAgICAgPiBW YXJpYWJsZSBTdG9yZSBpcyBjb3JydXB0ZWQuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8N Cj4gPiAgICAgPiArRUZJX1NUQVRVUw0KPiA+ICAgICA+ICtJbml0UmVhbE5vblZvbGF0aWxlVmFy aWFibGVTdG9yZSAoDQo+ID4gICAgID4gKyAgT1VUIEVGSV9QSFlTSUNBTF9BRERSRVNTICAqVmFy aWFibGVTdG9yZUJhc2UNCj4gPiAgICAgPiArICApOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr LyoqDQo+ID4gICAgID4gKyAgSW5pdCBub24tdm9sYXRpbGUgdmFyaWFibGUgc3RvcmUuDQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIEZ1bmN0 aW9uIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9PVVRf T0ZfUkVTT1VSQ0VTICBGYWlsIHRvIGFsbG9jYXRlIGVub3VnaCBtZW1vcnkNCj4gPiByZXNvdXJj ZS4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9WT0xVTUVfQ09SUlVQVEVEICBWYXJpYWJsZSBT dG9yZSBvciBGaXJtd2FyZSBWb2x1bWUNCj4gPiBmb3INCj4gPiAgICAgPiBWYXJpYWJsZSBTdG9y ZSBpcyBjb3JydXB0ZWQuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiAr RUZJX1NUQVRVUw0KPiA+ICAgICA+ICtJbml0Tm9uVm9sYXRpbGVWYXJpYWJsZVN0b3JlICgNCj4g PiAgICAgPiArICBWT0lEDQo+ID4gICAgID4gKyAgKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyNlbmRpZg0KPiA+ICAgICA+IGRpZmYgLS1naXQNCj4gPiAgICAgPg0KPiA+DQo+IGEvTWRlTW9k dWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZVBh cnNpbmcuaA0KPiA+ICAgICA+DQo+ID4NCj4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1Zhcmlh YmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlUGFyc2luZy5oDQo+ID4gICAgID4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiAgICAgPiBpbmRleCAwMDAwMDAwMDAwMDAuLjViMDQwZTAw OTgyZg0KPiA+ICAgICA+IC0tLSAvZGV2L251bGwNCj4gPiAgICAgPiArKysNCj4gPiAgICAgPg0K PiA+DQo+IGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGlt ZUR4ZS9WYXJpYWJsZVBhcnNpbmcuaA0KPiA+ICAgICA+IEBAIC0wLDAgKzEsNDI0IEBADQo+ID4g ICAgID4gKy8qKiBAZmlsZQ0KPiA+ICAgICA+ICsgIEZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSBh cmUgYXNzb2NpYXRlZCB3aXRoIHZhcmlhYmxlIHBhcnNpbmcgb3BlcmF0aW9ucw0KPiA+IGFuZA0K PiA+ICAgICA+ICsgIGFyZSBpbnRlbmRlZCB0byBiZSB1c2FibGUgYWNyb3NzIHZhcmlhYmxlIGRy aXZlciBzb3VyY2UgZmlsZXMuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICtDb3B5cmlnaHQgKGMp IDIwMTkgLSAyMDIyLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+ DQo+ID4gICAgID4gK1NQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50 DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyNp Zm5kZWYgVkFSSUFCTEVfUEFSU0lOR19IXw0KPiA+ICAgICA+ICsjZGVmaW5lIFZBUklBQkxFX1BB UlNJTkdfSF8NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyNpbmNsdWRlIDxHdWlkL0ltYWdlQXV0 aGVudGljYXRpb24uaD4NCj4gPiAgICAgPiArI2luY2x1ZGUgIlZhcmlhYmxlLmgiDQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgVGhpcyBjb2Rl IGNoZWNrcyBpZiB2YXJpYWJsZSBoZWFkZXIgaXMgdmFsaWQgb3Igbm90Lg0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICBAcGFyYW1baW5dIFZhcmlhYmxlICAgICAgICAgICBQb2ludGVyIHRvIHRo ZSBWYXJpYWJsZSBIZWFkZXIuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBWYXJpYWJsZVN0b3Jl RW5kICAgUG9pbnRlciB0byB0aGUgVmFyaWFibGUgU3RvcmUgRW5kLg0KPiA+ICAgICA+ICsgIEBw YXJhbVtpbl0gQXV0aEZvcm1hdCAgICAgICAgIEF1dGgtdmFyaWFibGUgaW5kaWNhdG9yLg0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgICAgIFZhcmlhYmxl IGhlYWRlciBpcyB2YWxpZC4NCj4gPiAgICAgPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgICAg IFZhcmlhYmxlIGhlYWRlciBpcyBub3QgdmFsaWQuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsq Ki8NCj4gPiAgICAgPiArQk9PTEVBTg0KPiA+ICAgICA+ICtJc1ZhbGlkVmFyaWFibGVIZWFkZXIg KA0KPiA+ICAgICA+ICsgIElOICBWQVJJQUJMRV9IRUFERVIgICpWYXJpYWJsZSwNCj4gPiAgICAg PiArICBJTiAgVkFSSUFCTEVfSEVBREVSICAqVmFyaWFibGVTdG9yZUVuZCwNCj4gPiAgICAgPiAr ICBJTiAgQk9PTEVBTiAgICAgICAgICBBdXRoRm9ybWF0DQo+ID4gICAgID4gKyAgKTsNCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBUaGlzIGNv ZGUgZ2V0cyB0aGUgY3VycmVudCBzdGF0dXMgb2YgVmFyaWFibGUgU3RvcmUuDQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gVmFyU3RvcmVIZWFkZXIgIFBvaW50ZXIgdG8gdGhl IFZhcmlhYmxlIFN0b3JlIEhlYWRlci4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHZh bCBFZmlSYXcgICAgICAgICBWYXJpYWJsZSBzdG9yZSBzdGF0dXMgaXMgcmF3Lg0KPiA+ICAgICA+ ICsgIEByZXR2YWwgRWZpVmFsaWQgICAgICAgVmFyaWFibGUgc3RvcmUgc3RhdHVzIGlzIHZhbGlk Lg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRWZpSW52YWxpZCAgICAgVmFyaWFibGUgc3RvcmUgc3Rh dHVzIGlzIGludmFsaWQuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiAr VkFSSUFCTEVfU1RPUkVfU1RBVFVTDQo+ID4gICAgID4gK0dldFZhcmlhYmxlU3RvcmVTdGF0dXMg KA0KPiA+ICAgICA+ICsgIElOIFZBUklBQkxFX1NUT1JFX0hFQURFUiAgKlZhclN0b3JlSGVhZGVy DQo+ID4gICAgID4gKyAgKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ ICsgIFRoaXMgY29kZSBnZXRzIHRoZSBzaXplIG9mIHZhcmlhYmxlIGhlYWRlci4NCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgQXV0aEZvcm1hdCAgICBUUlVFIGluZGljYXRl cyBhdXRoZW50aWNhdGVkIHZhcmlhYmxlcyBhcmUNCj4gPiB1c2VkLg0KPiA+ICAgICA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UgaW5kaWNhdGVzIGF1dGhlbnRpY2F0ZWQgdmFy aWFibGVzIGFyZSBub3QgdXNlZC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHVybiBT aXplIG9mIHZhcmlhYmxlIGhlYWRlciBpbiBieXRlcyBpbiB0eXBlIFVJTlROLg0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK1VJTlRODQo+ID4gICAgID4gK0dldFZhcmlh YmxlSGVhZGVyU2l6ZSAoDQo+ID4gICAgID4gKyAgSU4gIEJPT0xFQU4gIEF1dGhGb3JtYXQNCj4g PiAgICAgPiArICApOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIFRoaXMgY29kZSBnZXRzIHRoZSBzaXplIG9mIG5hbWUgb2YgdmFyaWFibGUu DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gIFZhcmlhYmxlICAgICAgUG9p bnRlciB0byB0aGUgdmFyaWFibGUgaGVhZGVyLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gIEF1 dGhGb3JtYXQgICAgVFJVRSBpbmRpY2F0ZXMgYXV0aGVudGljYXRlZCB2YXJpYWJsZXMgYXJlDQo+ ID4gdXNlZC4NCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFIGlu ZGljYXRlcyBhdXRoZW50aWNhdGVkIHZhcmlhYmxlcyBhcmUgbm90IHVzZWQuDQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsgIEByZXR1cm4gVUlOVE4gICAgICAgICAgU2l6ZSBvZiB2YXJpYWJsZSBp biBieXRlcy4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtVSU5UTg0K PiA+ICAgICA+ICtOYW1lU2l6ZU9mVmFyaWFibGUgKA0KPiA+ICAgICA+ICsgIElOICBWQVJJQUJM RV9IRUFERVIgICpWYXJpYWJsZSwNCj4gPiAgICAgPiArICBJTiAgQk9PTEVBTiAgICAgICAgICBB dXRoRm9ybWF0DQo+ID4gICAgID4gKyAgKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0K PiA+ICAgICA+ICsgIFRoaXMgY29kZSBzZXRzIHRoZSBzaXplIG9mIG5hbWUgb2YgdmFyaWFibGUu DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gIFZhcmlhYmxlICAgICAgUG9p bnRlciB0byB0aGUgVmFyaWFibGUgSGVhZGVyLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gIE5h bWVTaXplICAgICAgTmFtZSBzaXplIHRvIHNldC4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dICBB dXRoRm9ybWF0ICAgIFRSVUUgaW5kaWNhdGVzIGF1dGhlbnRpY2F0ZWQgdmFyaWFibGVzIGFyZQ0K PiA+IHVzZWQuDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSBp bmRpY2F0ZXMgYXV0aGVudGljYXRlZCB2YXJpYWJsZXMgYXJlIG5vdCB1c2VkLg0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK1ZPSUQNCj4gPiAgICAgPiArU2V0TmFtZVNp emVPZlZhcmlhYmxlICgNCj4gPiAgICAgPiArICBJTiBWQVJJQUJMRV9IRUFERVIgICpWYXJpYWJs ZSwNCj4gPiAgICAgPiArICBJTiBVSU5UTiAgICAgICAgICAgIE5hbWVTaXplLA0KPiA+ICAgICA+ ICsgIElOIEJPT0xFQU4gICAgICAgICAgQXV0aEZvcm1hdA0KPiA+ICAgICA+ICsgICk7DQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgVGhpcyBj b2RlIGdldHMgdGhlIHNpemUgb2YgdmFyaWFibGUgZGF0YS4NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgQHBhcmFtW2luXSAgVmFyaWFibGUgICAgICBQb2ludGVyIHRvIHRoZSBWYXJpYWJsZSBI ZWFkZXIuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgQXV0aEZvcm1hdCAgICBUUlVFIGluZGlj YXRlcyBhdXRoZW50aWNhdGVkIHZhcmlhYmxlcyBhcmUNCj4gPiB1c2VkLg0KPiA+ICAgICA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UgaW5kaWNhdGVzIGF1dGhlbnRpY2F0ZWQg dmFyaWFibGVzIGFyZSBub3QgdXNlZC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHVy biBTaXplIG9mIHZhcmlhYmxlIGluIGJ5dGVzLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiov DQo+ID4gICAgID4gK1VJTlRODQo+ID4gICAgID4gK0RhdGFTaXplT2ZWYXJpYWJsZSAoDQo+ID4g ICAgID4gKyAgSU4gIFZBUklBQkxFX0hFQURFUiAgKlZhcmlhYmxlLA0KPiA+ICAgICA+ICsgIElO ICBCT09MRUFOICAgICAgICAgIEF1dGhGb3JtYXQNCj4gPiAgICAgPiArICApOw0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgVGhpcyBjb2RlIHNldHMgdGhlIHNpemUg b2YgdmFyaWFibGUgZGF0YS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBW YXJpYWJsZSAgIFBvaW50ZXIgdG8gdGhlIFZhcmlhYmxlIEhlYWRlci4NCj4gPiAgICAgPiArICBA cGFyYW1baW5dIERhdGFTaXplICAgRGF0YSBzaXplIHRvIHNldC4NCj4gPiAgICAgPiArICBAcGFy YW1baW5dIEF1dGhGb3JtYXQgVFJVRSBpbmRpY2F0ZXMgYXV0aGVudGljYXRlZCB2YXJpYWJsZXMg YXJlDQo+IHVzZWQuDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFIGlu ZGljYXRlcyBhdXRoZW50aWNhdGVkIHZhcmlhYmxlcyBhcmUgbm90IHVzZWQuDQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArVk9JRA0KPiA+ICAgICA+ICtTZXREYXRhU2l6 ZU9mVmFyaWFibGUgKA0KPiA+ICAgICA+ICsgIElOICBWQVJJQUJMRV9IRUFERVIgICpWYXJpYWJs ZSwNCj4gPiAgICAgPiArICBJTiAgVUlOVE4gICAgICAgICAgICBEYXRhU2l6ZSwNCj4gPiAgICAg PiArICBJTiAgQk9PTEVBTiAgICAgICAgICBBdXRoRm9ybWF0DQo+ID4gICAgID4gKyAgKTsNCj4g PiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBUaGlz IGNvZGUgZ2V0cyB0aGUgcG9pbnRlciB0byB0aGUgdmFyaWFibGUgbmFtZS4NCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBWYXJpYWJsZSAgICAgUG9pbnRlciB0byB0aGUgVmFy aWFibGUgSGVhZGVyLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gQXV0aEZvcm1hdCAgIFRSVUUg aW5kaWNhdGVzIGF1dGhlbnRpY2F0ZWQgdmFyaWFibGVzIGFyZQ0KPiB1c2VkLg0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFIGluZGljYXRlcyBhdXRoZW50aWNhdGVk IHZhcmlhYmxlcyBhcmUgbm90IHVzZWQuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR1 cm4gUG9pbnRlciB0byBWYXJpYWJsZSBOYW1lIHdoaWNoIGlzIFVuaWNvZGUgZW5jb2RpbmcuDQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArQ0hBUjE2ICoNCj4gPiAgICAg PiArR2V0VmFyaWFibGVOYW1lUHRyICgNCj4gPiAgICAgPiArICBJTiAgVkFSSUFCTEVfSEVBREVS ICAqVmFyaWFibGUsDQo+ID4gICAgID4gKyAgSU4gIEJPT0xFQU4gICAgICAgICAgQXV0aEZvcm1h dA0KPiA+ICAgICA+ICsgICk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAg PiArICBUaGlzIGNvZGUgZ2V0cyB0aGUgcG9pbnRlciB0byB0aGUgdmFyaWFibGUgZ3VpZC4NCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBWYXJpYWJsZSAgICAgUG9pbnRlciB0 byB0aGUgVmFyaWFibGUgSGVhZGVyLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gQXV0aEZvcm1h dCAgIFRSVUUgaW5kaWNhdGVzIGF1dGhlbnRpY2F0ZWQgdmFyaWFibGVzIGFyZQ0KPiB1c2VkLg0K PiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFIGluZGljYXRlcyBhdXRo ZW50aWNhdGVkIHZhcmlhYmxlcyBhcmUgbm90IHVzZWQuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsgIEByZXR1cm4gQSBFRklfR1VJRCogcG9pbnRlciB0byBWZW5kb3IgR3VpZC4NCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtFRklfR1VJRCAqDQo+ID4gICAgID4gK0dl dFZlbmRvckd1aWRQdHIgKA0KPiA+ICAgICA+ICsgIElOICBWQVJJQUJMRV9IRUFERVIgICpWYXJp YWJsZSwNCj4gPiAgICAgPiArICBJTiAgQk9PTEVBTiAgICAgICAgICBBdXRoRm9ybWF0DQo+ID4g ICAgID4gKyAgKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICBUaGlzIGNvZGUgZ2V0cyB0aGUgcG9pbnRlciB0byB0aGUgdmFyaWFibGUgZGF0 YS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBWYXJpYWJsZSAgICAgUG9p bnRlciB0byB0aGUgVmFyaWFibGUgSGVhZGVyLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gQXV0 aEZvcm1hdCAgIFRSVUUgaW5kaWNhdGVzIGF1dGhlbnRpY2F0ZWQgdmFyaWFibGVzIGFyZQ0KPiB1 c2VkLg0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFIGluZGljYXRl cyBhdXRoZW50aWNhdGVkIHZhcmlhYmxlcyBhcmUgbm90IHVzZWQuDQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsgIEByZXR1cm4gUG9pbnRlciB0byBWYXJpYWJsZSBEYXRhLg0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK1VJTlQ4ICoNCj4gPiAgICAgPiArR2V0VmFyaWFi bGVEYXRhUHRyICgNCj4gPiAgICAgPiArICBJTiAgVkFSSUFCTEVfSEVBREVSICAqVmFyaWFibGUs DQo+ID4gICAgID4gKyAgSU4gIEJPT0xFQU4gICAgICAgICAgQXV0aEZvcm1hdA0KPiA+ICAgICA+ ICsgICk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBUaGlzIGNv ZGUgZ2V0cyB0aGUgdmFyaWFibGUgZGF0YSBvZmZzZXQgcmVsYXRlZCB0byB2YXJpYWJsZSBoZWFk ZXIuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gVmFyaWFibGUgICAgIFBv aW50ZXIgdG8gdGhlIFZhcmlhYmxlIEhlYWRlci4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dIEF1 dGhGb3JtYXQgICBUUlVFIGluZGljYXRlcyBhdXRoZW50aWNhdGVkIHZhcmlhYmxlcyBhcmUNCj4g dXNlZC4NCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSBpbmRpY2F0 ZXMgYXV0aGVudGljYXRlZCB2YXJpYWJsZXMgYXJlIG5vdCB1c2VkLg0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICBAcmV0dXJuIFZhcmlhYmxlIERhdGEgb2Zmc2V0Lg0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArKiovDQo+ID4gICAgID4gK1VJTlRODQo+ID4gICAgID4gK0dldFZhcmlhYmxlRGF0 YU9mZnNldCAoDQo+ID4gICAgID4gKyAgSU4gIFZBUklBQkxFX0hFQURFUiAgKlZhcmlhYmxlLA0K PiA+ICAgICA+ICsgIElOICBCT09MRUFOICAgICAgICAgIEF1dGhGb3JtYXQNCj4gPiAgICAgPiAr ICApOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgR2V0IHZhcmlh YmxlIGRhdGEgcGF5bG9hZC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAg ICAgIFZhcmlhYmxlICAgICBQb2ludGVyIHRvIHRoZSBWYXJpYWJsZSBIZWFkZXIuDQo+ID4gICAg ID4gKyAgQHBhcmFtW291dF0gICAgIERhdGEgICAgICAgICBQb2ludGVyIHRvIGJ1ZmZlciB1c2Vk IHRvIHN0b3JlIHRoZSB2YXJpYWJsZQ0KPiBkYXRhLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0g ICAgICBEYXRhU2l6ZSAgICAgU2l6ZSBvZiBidWZmZXIgcGFzc2VkIGJ5IERhdGEuDQo+ID4gICAg ID4gKyAgQHBhcmFtW291dF0gICAgIERhdGFTaXplICAgICBTaXplIG9mIGRhdGEgY29waWVkIGlu dG8gRGF0YSBidWZmZXIuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgICAgIEF1dGhGbGFnICAg ICBBdXRoLXZhcmlhYmxlIGluZGljYXRvci4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJl dHVybiBFRklfU1VDQ0VTUyAgICAgICAgICAgICBEYXRhIHdhcyBmZXRjaGVkLg0KPiA+ICAgICA+ ICsgIEByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgRGF0YVNpemUgaXMgTlVMTC4NCj4g PiAgICAgPiArICBAcmV0dXJuIEVGSV9CVUZGRVJfVE9PX1NNQUxMICAgIERhdGFTaXplIGlzIHNt YWxsZXIgdGhhbiBzaXplIG9mDQo+ID4gdmFyaWFibGUNCj4gPiAgICAgPiBkYXRhLg0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4gPiAgICAgPiAr R2V0VmFyaWFibGVEYXRhICgNCj4gPiAgICAgPiArICBJTiAgICAgIFZBUklBQkxFX0hFQURFUiAg KlZhcmlhYmxlLA0KPiA+ICAgICA+ICsgIElOICBPVVQgVk9JRCAgICAgICAgICAgICAqRGF0YSwN Cj4gPiAgICAgPiArICBJTiAgT1VUIFVJTlQzMiAgICAgICAgICAgKkRhdGFTaXplLA0KPiA+ICAg ICA+ICsgIElOICAgICAgQk9PTEVBTiAgICAgICAgICBBdXRoRmxhZw0KPiA+ICAgICA+ICsgICk7 DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg VGhpcyBjb2RlIGdldHMgdGhlIHBvaW50ZXIgdG8gdGhlIG5leHQgdmFyaWFibGUgaGVhZGVyLg0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1baW5dIFZhcmlhYmxlICAgICBQb2ludGVy IHRvIHRoZSBWYXJpYWJsZSBIZWFkZXIuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBBdXRoRm9y bWF0ICAgVFJVRSBpbmRpY2F0ZXMgYXV0aGVudGljYXRlZCB2YXJpYWJsZXMgYXJlDQo+IHVzZWQu DQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UgaW5kaWNhdGVzIGF1 dGhlbnRpY2F0ZWQgdmFyaWFibGVzIGFyZSBub3QgdXNlZC4NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgQHJldHVybiBQb2ludGVyIHRvIG5leHQgdmFyaWFibGUgaGVhZGVyLg0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK1ZBUklBQkxFX0hFQURFUiAqDQo+ID4gICAg ID4gK0dldE5leHRWYXJpYWJsZVB0ciAoDQo+ID4gICAgID4gKyAgSU4gIFZBUklBQkxFX0hFQURF UiAgKlZhcmlhYmxlLA0KPiA+ICAgICA+ICsgIElOICBCT09MRUFOICAgICAgICAgIEF1dGhGb3Jt YXQNCj4gPiAgICAgPiArICApOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgIEdldHMgdGhlIHBvaW50ZXIgdG8gdGhlIGZpcnN0IHZhcmlhYmxl IGhlYWRlciBpbiBnaXZlbiB2YXJpYWJsZSBzdG9yZSBhcmVhLg0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICBAcGFyYW1baW5dIFZhclN0b3JlSGVhZGVyICBQb2ludGVyIHRvIHRoZSBWYXJpYWJs ZSBTdG9yZSBIZWFkZXIuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR1cm4gUG9pbnRl ciB0byB0aGUgZmlyc3QgdmFyaWFibGUgaGVhZGVyLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr KiovDQo+ID4gICAgID4gK1ZBUklBQkxFX0hFQURFUiAqDQo+ID4gICAgID4gK0dldFN0YXJ0UG9p bnRlciAoDQo+ID4gICAgID4gKyAgSU4gVkFSSUFCTEVfU1RPUkVfSEVBREVSICAqVmFyU3RvcmVI ZWFkZXINCj4gPiAgICAgPiArICApOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgIEdldHMgdGhlIHBvaW50ZXIgdG8gdGhlIGVuZCBvZiB0aGUg dmFyaWFibGUgc3RvcmFnZSBhcmVhLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBUaGlzIGZ1 bmN0aW9uIGdldHMgcG9pbnRlciB0byB0aGUgZW5kIG9mIHRoZSB2YXJpYWJsZSBzdG9yYWdlDQo+ ID4gICAgID4gKyAgYXJlYSwgYWNjb3JkaW5nIHRvIHRoZSBpbnB1dCB2YXJpYWJsZSBzdG9yZSBo ZWFkZXIuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gVmFyU3RvcmVIZWFk ZXIgIFBvaW50ZXIgdG8gdGhlIFZhcmlhYmxlIFN0b3JlIEhlYWRlci4NCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgQHJldHVybiBQb2ludGVyIHRvIHRoZSBlbmQgb2YgdGhlIHZhcmlhYmxlIHN0 b3JhZ2UgYXJlYS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtWQVJJ QUJMRV9IRUFERVIgKg0KPiA+ICAgICA+ICtHZXRFbmRQb2ludGVyICgNCj4gPiAgICAgPiArICBJ TiBWQVJJQUJMRV9TVE9SRV9IRUFERVIgICpWYXJTdG9yZUhlYWRlcg0KPiA+ICAgICA+ICsgICk7 DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBDb21wYXJlIHR3byBF RklfVElNRSBkYXRhLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBh cmFtW2luXSBGaXJzdFRpbWUgICAgICAgQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBFRklfVElNRSBk YXRhLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gU2Vjb25kVGltZSAgICAgIEEgcG9pbnRlciB0 byB0aGUgc2Vjb25kIEVGSV9USU1FIGRhdGEuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBy ZXR2YWwgIFRSVUUgICAgICAgICAgICAgIFRoZSBGaXJzdFRpbWUgaXMgbm90IGxhdGVyIHRoYW4g dGhlIFNlY29uZFRpbWUuDQo+ID4gICAgID4gKyAgQHJldHZhbCAgRkFMU0UgICAgICAgICAgICAg VGhlIEZpcnN0VGltZSBpcyBsYXRlciB0aGFuIHRoZSBTZWNvbmRUaW1lLg0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK0JPT0xFQU4NCj4gPiAgICAgPiArVmFyaWFibGVD b21wYXJlVGltZVN0YW1wSW50ZXJuYWwgKA0KPiA+ICAgICA+ICsgIElOIEVGSV9USU1FICAqRmly c3RUaW1lLA0KPiA+ICAgICA+ICsgIElOIEVGSV9USU1FICAqU2Vjb25kVGltZQ0KPiA+ICAgICA+ ICsgICk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBGaW5kIHRo ZSB2YXJpYWJsZSBpbiB0aGUgc3BlY2lmaWVkIHZhcmlhYmxlIHN0b3JlLg0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICBAcGFyYW1baW5dICAgICAgIFZhcmlhYmxlTmFtZSAgICAgICAgTmFtZSBv ZiB0aGUgdmFyaWFibGUgdG8gYmUgZm91bmQNCj4gPiAgICAgPiArICBAcGFyYW1baW5dICAgICAg IFZlbmRvckd1aWQgICAgICAgICAgVmVuZG9yIEdVSUQgdG8gYmUgZm91bmQuDQo+ID4gICAgID4g KyAgQHBhcmFtW2luXSAgICAgICBJZ25vcmVSdENoZWNrICAgICAgIElnbm9yZQ0KPiA+IEVGSV9W QVJJQUJMRV9SVU5USU1FX0FDQ0VTUw0KPiA+ICAgICA+IGF0dHJpYnV0ZQ0KPiA+ICAgICA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjayBhdCBydW50aW1lIHdo ZW4gc2VhcmNoaW5nIHZhcmlhYmxlLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbiwgb3V0XSAgUHRy VHJhY2sgICAgICAgICAgICBWYXJpYWJsZSBUcmFjayBQb2ludGVyIHN0cnVjdHVyZSB0aGF0DQo+ ID4gY29udGFpbnMNCj4gPiAgICAgPiBWYXJpYWJsZSBJbmZvcm1hdGlvbi4NCj4gPiAgICAgPiAr ICBAcGFyYW1baW5dICAgICAgIEF1dGhGb3JtYXQgICAgICAgICAgVFJVRSBpbmRpY2F0ZXMgYXV0 aGVudGljYXRlZCB2YXJpYWJsZXMNCj4gPiBhcmUNCj4gPiAgICAgPiB1c2VkLg0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSBpbmRpY2F0ZXMg YXV0aGVudGljYXRlZCB2YXJpYWJsZXMgYXJlIG5vdA0KPiB1c2VkLg0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICBAcmV0dmFsICAgICAgICAgIEVGSV9TVUNDRVNTICAgICAgICAgVmFyaWFibGUg Zm91bmQgc3VjY2Vzc2Z1bGx5DQo+ID4gICAgID4gKyAgQHJldHZhbCAgICAgICAgICBFRklfTk9U X0ZPVU5EICAgICAgIFZhcmlhYmxlIG5vdCBmb3VuZA0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAg PiArRUZJX1NUQVRVUw0KPiA+ICAgICA+ICtGaW5kVmFyaWFibGVFeCAoDQo+ID4gICAgID4gKyAg SU4gICAgIENIQVIxNiAgICAgICAgICAgICAgICAgICpWYXJpYWJsZU5hbWUsDQo+ID4gICAgID4g KyAgSU4gICAgIEVGSV9HVUlEICAgICAgICAgICAgICAgICpWZW5kb3JHdWlkLA0KPiA+ICAgICA+ ICsgIElOICAgICBCT09MRUFOICAgICAgICAgICAgICAgICBJZ25vcmVSdENoZWNrLA0KPiA+ICAg ICA+ICsgIElOIE9VVCBWQVJJQUJMRV9QT0lOVEVSX1RSQUNLICAqUHRyVHJhY2ssDQo+ID4gICAg ID4gKyAgSU4gICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgIEF1dGhGb3JtYXQNCj4gPiAgICAg PiArICApOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgVGhpcyBj b2RlIGZpbmRzIHRoZSBuZXh0IGF2YWlsYWJsZSB2YXJpYWJsZS4NCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyAgQ2F1dGlvbjogVGhpcyBmdW5jdGlvbiBtYXkgcmVjZWl2ZSB1bnRydXN0ZWQgaW5w dXQuDQo+ID4gICAgID4gKyAgVGhpcyBmdW5jdGlvbiBtYXkgYmUgaW52b2tlZCBpbiBTTU0gbW9k ZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGRvIGJhc2ljDQo+ID4gICAgID4gdmFsaWRhdGlvbiwgYmVm b3JlIHBhcnNlIHRoZSBkYXRhLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1baW5d ICBWYXJpYWJsZU5hbWUgICAgICBQb2ludGVyIHRvIHZhcmlhYmxlIG5hbWUuDQo+ID4gICAgID4g KyAgQHBhcmFtW2luXSAgVmVuZG9yR3VpZCAgICAgICAgVmFyaWFibGUgVmVuZG9yIEd1aWQuDQo+ ID4gICAgID4gKyAgQHBhcmFtW2luXSAgVmFyaWFibGVTdG9yZUxpc3QgQSBsaXN0IG9mIHZhcmlh YmxlIHN0b3JlcyB0aGF0IHNob3VsZCBiZQ0KPiB1c2VkDQo+ID4gdG8NCj4gPiAgICAgPiBnZXQg dGhlIG5leHQgdmFyaWFibGUuDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgaXMgdGhlIG1heCB2YWx1ZSBvZg0K PiA+ICAgICA+IFZBUklBQkxFX1NUT1JFX1RZUEUuDQo+ID4gICAgID4gKyAgQHBhcmFtW291dF0g VmFyaWFibGVQdHIgICAgICAgUG9pbnRlciB0byB2YXJpYWJsZSBoZWFkZXIgYWRkcmVzcy4NCj4g PiAgICAgPiArICBAcGFyYW1baW5dICBBdXRoRm9ybWF0ICAgICAgICBUUlVFIGluZGljYXRlcyBh dXRoZW50aWNhdGVkIHZhcmlhYmxlcyBhcmUNCj4gPiB1c2VkLg0KPiA+ICAgICA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFIGluZGljYXRlcyBhdXRoZW50aWNhdGVkIHZh cmlhYmxlcyBhcmUgbm90IHVzZWQuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBmdW5jdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5 Lg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFRoZSBuZXh0IHZh cmlhYmxlIHdhcyBub3QgZm91bmQuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9Q QVJBTUVURVIgSWYgVmFyaWFibGVOYW1lIGlzIG5vdCBhbiBlbXB0eQ0KPiBzdHJpbmcsDQo+ID4g ICAgID4gd2hpbGUgVmVuZG9yR3VpZCBpcyBOVUxMLg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJ X0lOVkFMSURfUEFSQU1FVEVSIFRoZSBpbnB1dCB2YWx1ZXMgb2YgVmFyaWFibGVOYW1lDQo+IGFu ZA0KPiA+ICAgICA+IFZlbmRvckd1aWQgYXJlIG5vdCBhIG5hbWUgYW5kDQo+ID4gICAgID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1VJRCBvZiBhbiBleGlzdGluZyB2YXJpYWJs ZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtFRklfU1RBVFVTDQo+ ID4gICAgID4gK0VGSUFQSQ0KPiA+ICAgICA+ICtWYXJpYWJsZVNlcnZpY2VHZXROZXh0VmFyaWFi bGVJbnRlcm5hbCAoDQo+ID4gICAgID4gKyAgSU4gIENIQVIxNiAgICAgICAgICAgICAgICAgKlZh cmlhYmxlTmFtZSwNCj4gPiAgICAgPiArICBJTiAgRUZJX0dVSUQgICAgICAgICAgICAgICAqVmVu ZG9yR3VpZCwNCj4gPiAgICAgPiArICBJTiAgVkFSSUFCTEVfU1RPUkVfSEVBREVSICAqKlZhcmlh YmxlU3RvcmVMaXN0LA0KPiA+ICAgICA+ICsgIE9VVCBWQVJJQUJMRV9IRUFERVIgICAgICAgICoq VmFyaWFibGVQdHIsDQo+ID4gICAgID4gKyAgSU4gIEJPT0xFQU4gICAgICAgICAgICAgICAgQXV0 aEZvcm1hdA0KPiA+ICAgICA+ICsgICk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4g PiAgICAgPiArICBSb3V0aW5lIHVzZWQgdG8gdHJhY2sgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24g YWJvdXQgdmFyaWFibGUgdXNhZ2UuDQo+ID4gICAgID4gKyAgVGhlIGRhdGEgaXMgc3RvcmVkIGlu IHRoZSBFRkkgc3lzdGVtIHRhYmxlIHNvIGl0IGNhbiBiZSBhY2Nlc3NlZCBsYXRlci4NCj4gPiAg ICAgPiArICBWYXJpYWJsZUluZm8uZWZpIGNhbiBkdW1wIG91dCB0aGUgdGFibGUuIE9ubHkgQm9v dCBTZXJ2aWNlcyB2YXJpYWJsZQ0KPiA+ICAgICA+ICsgIGFjY2Vzc2VzIGFyZSB0cmFja2VkIGJ5 IHRoaXMgY29kZS4gVGhlIFBjZFZhcmlhYmxlQ29sbGVjdFN0YXRpc3RpY3MNCj4gPiAgICAgPiAr ICBidWlsZCBmbGFnIGNvbnRyb2xzIGlmIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLg0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArICBBIHJlYWQgdGhhdCBoaXRzIGluIHRoZSBjYWNoZSB3aWxsIGhh dmUgUmVhZCBhbmQgQ2FjaGUgdHJ1ZSBmb3INCj4gPiAgICAgPiArICB0aGUgdHJhbnNhY3Rpb24u IERhdGEgaXMgYWxsb2NhdGVkIGJ5IHRoaXMgcm91dGluZSwgYnV0IG5ldmVyDQo+ID4gICAgID4g KyAgZnJlZWQuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBWYXJp YWJsZU5hbWUgICBOYW1lIG9mIHRoZSBWYXJpYWJsZSB0byB0cmFjay4NCj4gPiAgICAgPiArICBA cGFyYW1baW5dICAgICAgVmVuZG9yR3VpZCAgICAgR3VpZCBvZiB0aGUgVmFyaWFibGUgdG8gdHJh Y2suDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgICAgIFZvbGF0aWxlICAgICAgIFRSVUUgaWYg dm9sYXRpbGUgRkFMU0UgaWYgbm9uLXZvbGF0aWxlLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0g ICAgICBSZWFkICAgICAgICAgICBUUlVFIGlmIEdldFZhcmlhYmxlKCkgd2FzIGNhbGxlZC4NCj4g PiAgICAgPiArICBAcGFyYW1baW5dICAgICAgV3JpdGUgICAgICAgICAgVFJVRSBpZiBTZXRWYXJp YWJsZSgpIHdhcyBjYWxsZWQuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgICAgIERlbGV0ZSAg ICAgICAgIFRSVUUgaWYgZGVsZXRlZCB2aWEgU2V0VmFyaWFibGUoKS4NCj4gPiAgICAgPiArICBA cGFyYW1baW5dICAgICAgQ2FjaGUgICAgICAgICAgVFJVRSBmb3IgYSBjYWNoZSBoaXQuDQo+ID4g ICAgID4gKyAgQHBhcmFtW2luLG91dF0gIFZhcmlhYmxlSW5mbyAgIFBvaW50ZXIgdG8gYSBwb2lu dGVyIG9mDQo+ID4gVkFSSUFCTEVfSU5GT19FTlRSWQ0KPiA+ICAgICA+IHN0cnVjdHVyZXMuDQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArVk9JRA0KPiA+ICAgICA+ICtV cGRhdGVWYXJpYWJsZUluZm8gKA0KPiA+ICAgICA+ICsgIElOICBDSEFSMTYgICAgICAgICAgICAg ICAgICAqVmFyaWFibGVOYW1lLA0KPiA+ICAgICA+ICsgIElOICBFRklfR1VJRCAgICAgICAgICAg ICAgICAqVmVuZG9yR3VpZCwNCj4gPiAgICAgPiArICBJTiAgQk9PTEVBTiAgICAgICAgICAgICAg ICAgVm9sYXRpbGUsDQo+ID4gICAgID4gKyAgSU4gIEJPT0xFQU4gICAgICAgICAgICAgICAgIFJl YWQsDQo+ID4gICAgID4gKyAgSU4gIEJPT0xFQU4gICAgICAgICAgICAgICAgIFdyaXRlLA0KPiA+ ICAgICA+ICsgIElOICBCT09MRUFOICAgICAgICAgICAgICAgICBEZWxldGUsDQo+ID4gICAgID4g KyAgSU4gIEJPT0xFQU4gICAgICAgICAgICAgICAgIENhY2hlLA0KPiA+ICAgICA+ICsgIElOIE9V VCBWQVJJQUJMRV9JTkZPX0VOVFJZICAqKlZhcmlhYmxlSW5mbw0KPiA+ICAgICA+ICsgICk7DQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgUmV0 cmlldmUgZGV0YWlscyBvZiB0aGUgdmFyaWFibGUgbmV4dCB0byBnaXZlbiB2YXJpYWJsZSB3aXRo aW4NCj4gVmFyaWFibGVTdG9yZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgSWYgVmFyaWFi bGVJbmZvLT5TdG9yZUluZGV4IGlzIGludmFsaWQsIHRoZSBmaXJzdCBvbmUgaW4gVmFyaWFibGVT dG9yZSBpcw0KPiA+IHJldHVybmVkLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1b aW4sb3V0XSBWYXJpYWJsZUluZm8gICAgICAgICAgICAgUG9pbnRlciB0byB2YXJpYWJsZSBpbmZv cm1hdGlvbi4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9Q QVJBTUVURVIgIFZhcmlhYmxlSW5mbyBvciBWYXJpYWJsZVN0b3JlIGlzDQo+IE5VTEwuDQo+ID4g ICAgID4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgIElmIHRoZSBlbmQgb2YgVmFy aWFibGVTdG9yZSBpcyByZWFjaGVkLg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgICBUaGUgbmV4dCB2YXJpYWJsZSBpcyByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4gPiAg ICAgPiArRUZJQVBJDQo+ID4gICAgID4gK0dldE5leHRWYXJpYWJsZUluZm8gKA0KPiA+ICAgICA+ ICsgIElOIE9VVCAgUFJPVEVDVEVEX1ZBUklBQkxFX0lORk8gICpWYXJpYWJsZUluZm8NCj4gPiAg ICAgPiArICApOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsgIFJldHJpZXZlIGRldGFpbHMgYWJvdXQgYSB2YXJpYWJsZSBhbmQgcmV0dXJuIHRo ZW0gaW4gVmFyaWFibGVJbmZvLQ0KPiA+SGVhZGVyLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr ICBJZiBWYXJpYWJsZUluZm8tPkJ1ZmZlciBpcyBnaXZlbiwgdGhpcyBmdW5jdGlvbiB3aWxsIGNh bGN1bGF0ZSBpdHMgb2Zmc2V0DQo+ID4gICAgID4gKyAgcmVsYXRpdmUgdG8gZ2l2ZW4gdmFyaWFi bGUgc3RvcmFnZSB2aWEgVmFyaWFibGVTdG9yZTsgT3RoZXJ3aXNlLCBpdCB3aWxsIHRyeQ0KPiA+ ICAgICA+ICsgIG90aGVyIGludGVybmFsIHZhcmlhYmxlIHN0b3JhZ2VzIG9yIGNhY2hlZCBjb3Bp ZXMuIEl0J3MgYXNzdW1lZCB0aGF0LCBmb3INCj4gYWxsDQo+ID4gICAgID4gKyAgY29waWVzIG9m IE5WIHZhcmlhYmxlIHN0b3JhZ2UsIGFsbCB2YXJpYWJsZXMgYXJlIHN0b3JlZCBpbiB0aGUgc2Ft ZQ0KPiByZWxhdGl2ZQ0KPiA+ICAgICA+ICsgIHBvc2l0aW9uLiBJZiBWYXJpYWJsZUluZm8tPkJ1 ZmZlciBpcyBmb3VuZCBpbiB0aGUgcmFuZ2Ugb2YgYW55IHN0b3JhZ2UNCj4gPiBjb3BpZXMsDQo+ ID4gICAgID4gKyAgaXRzIG9mZnNldCByZWxhdGl2ZSB0byB0aGF0IHN0b3JhZ2Ugc2hvdWxkIGJl IHRoZSBzYW1lIGluIG90aGVyIGNvcGllcy4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgSWYg VmFyaWFibGVJbmZvLT5PZmZzZXQgaXMgZ2l2ZW4gKG5vbi16ZXJvKSBidXQgbm90IFZhcmlhYmxl SW5mby0+QnVmZmVyLA0KPiA+ICAgICA+ICsgIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhl IHZhcmlhYmxlIG1lbW9yeSBhZGRyZXNzIGluc2lkZQ0KPiBWYXJpYWJsZVN0b3JlLA0KPiA+ICAg ICA+ICsgIGlmIGdpdmVuLCB2aWEgVmFyaWFibGVJbmZvLT5BZGRyZXNzOyBPdGhlcndpc2UsIHRo ZSBhZGRyZXNzIG9mIG90aGVyDQo+ID4gc3RvcmFnZQ0KPiA+ICAgICA+ICsgIGNvcGllcyB3aWxs IGJlIHJldHVybmVkLCBpZiBhbnkuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEZvciBhIG5l dyB2YXJpYWJsZSB3aG9zZSBvZmZzZXQgaGFzIG5vdCBiZWVuIGRldGVybWluZWQsIGEgdmFsdWUg b2YgLTENCj4gYXMNCj4gPiAgICAgPiArICBWYXJpYWJsZUluZm8tPk9mZnNldCBzaG91bGQgYmUg cGFzc2VkIHRvIHNraXAgdGhlIG9mZnNldCBjYWxjdWxhdGlvbi4NCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyAgQHBhcmFtIFZhcmlhYmxlSW5mbyAgICAgICAgICAgICBQb2ludGVyIHRvIHZhcmlh YmxlIGluZm9ybWF0aW9uLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9J TlZBTElEX1BBUkFNRVRFUiAgVmFyaWFibGVJbmZvIGlzIE5VTEwgb3IgYm90aA0KPiA+IFZhcmlh YmxlSW5mby0NCj4gPiAgICAgPiA+QWRkcmVzcw0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhbmQgVmFyaWFibGVJbmZvLT5PZmZzZXQgYXJlIE5VTEwgKDApLg0K PiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICBJZiBnaXZlbiBBZGRy ZXNzIG9yIE9mZnNldCBpcyBvdXQgb2YgcmFuZ2UNCj4gPiBvZg0KPiA+ICAgICA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBhbnkgZ2l2ZW4gb3IgaW50ZXJuYWwgc3RvcmFnZSBj b3BpZXMuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFZhcmlh YmxlIGRldGFpbHMgYXJlIHJldHJpZXZlZCBzdWNjZXNzZnVsbHkuDQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX1NUQVRVUw0KPiA+ICAgICA+ICtFRklBUEkNCj4g PiAgICAgPiArR2V0VmFyaWFibGVJbmZvICgNCj4gPiAgICAgPiArICBJTiBPVVQgIFBST1RFQ1RF RF9WQVJJQUJMRV9JTkZPICAqVmFyaWFibGVJbmZvDQo+ID4gICAgID4gKyAgKTsNCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyNlbmRpZg0KPiA+ICAgICA+IGRpZmYgLS1naXQNCj4gPiAgICAgPg0K PiA+DQo+IGEvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGlt ZUR4ZS9WYXJpYWJsZVJ1bnRpbWVDDQo+ID4gICAgID4gYWNoZS5oDQo+ID4gICAgID4NCj4gPg0K PiBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUv VmFyaWFibGVSdW50aW1lQw0KPiA+ICAgICA+IGFjaGUuaA0KPiA+ICAgICA+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQo+ID4gICAgID4gaW5kZXggMDAwMDAwMDAwMDAwLi43N2RiY2UwZjkwN2MNCj4g PiAgICAgPiAtLS0gL2Rldi9udWxsDQo+ID4gICAgID4gKysrDQo+ID4gICAgID4NCj4gPg0KPiBi L01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFy aWFibGVSdW50aW1lQw0KPiA+ICAgICA+IGFjaGUuaA0KPiA+ICAgICA+IEBAIC0wLDAgKzEsNTEg QEANCj4gPiAgICAgPiArLyoqIEBmaWxlDQo+ID4gICAgID4gKyAgVGhlIGNvbW1vbiB2YXJpYWJs ZSB2b2xhdGlsZSBzdG9yZSByb3V0aW5lcyBzaGFyZWQgYnkgdGhlDQo+IERYRV9SVU5USU1FDQo+ ID4gICAgID4gdmFyaWFibGUNCj4gPiAgICAgPiArICBtb2R1bGUgYW5kIHRoZSBEWEVfU01NIHZh cmlhYmxlIG1vZHVsZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gK0NvcHlyaWdodCAoYykgMjAx OS0yMDIyLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4g ICAgID4gK1NQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyNpZm5kZWYg VkFSSUFCTEVfUlVOVElNRV9DQUNIRV9IXw0KPiA+ICAgICA+ICsjZGVmaW5lIFZBUklBQkxFX1JV TlRJTUVfQ0FDSEVfSF8NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyNpbmNsdWRlICJWYXJpYWJs ZS5oIg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgQ29waWVzIGFu eSBwZW5kaW5nIHVwZGF0ZXMgdG8gcnVudGltZSB2YXJpYWJsZSBjYWNoZXMuDQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICAgVGhlIHZvbGF0 aWxlIHN0b3JlIHRvIGJlIHVwZGF0ZWQgaXMgbm90DQo+ID4gICAgID4gaW5pdGlhbGl6ZWQgcHJv cGVybHkuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBUaGUg dm9sYXRpbGUgc3RvcmUgd2FzIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArKiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4gPiAgICAgPiArRmx1c2hQZW5k aW5nUnVudGltZVZhcmlhYmxlQ2FjaGVVcGRhdGVzICgNCj4gPiAgICAgPiArICBWT0lEDQo+ID4g ICAgID4gKyAgKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIFN5 bmNocm9uaXplcyB0aGUgcnVudGltZSB2YXJpYWJsZSBjYWNoZXMgd2l0aCBhbGwgcGVuZGluZyB1 cGRhdGVzDQo+IG91dHNpZGUNCj4gPiAgICAgPiBydW50aW1lLg0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICBFbnN1cmVzIGFsbCBjb25kaXRpb25zIGFyZSBtZXQgdG8gbWFpbnRhaW4gY29oZXJl bmN5IGZvciBydW50aW1lIGNhY2hlDQo+ID4gICAgID4gdXBkYXRlcy4gVGhpcyBmdW5jdGlvbiB3 aWxsIGF0dGVtcHQNCj4gPiAgICAgPiArICB0byB3cml0ZSB0aGUgZ2l2ZW4gdXBkYXRlIChhbmQg YW55IG90aGVyIHBlbmRpbmcgdXBkYXRlcykgaWYgdGhlDQo+IFJlYWRMb2NrDQo+ID4gaXMNCj4g PiAgICAgPiBhdmFpbGFibGUuIE90aGVyd2lzZSwgdGhlDQo+ID4gICAgID4gKyAgdXBkYXRlIGlz IGFkZGVkIGFzIGEgcGVuZGluZyB1cGRhdGUgZm9yIHRoZSBnaXZlbiB2YXJpYWJsZSBzdG9yZSBh bmQgaXQNCj4gd2lsbA0KPiA+IGJlDQo+ID4gICAgID4gZmx1c2hlZCB0byB0aGUgcnVudGltZSBj YWNoZQ0KPiA+ICAgICA+ICsgIGF0IHRoZSBuZXh0IG9wcG9ydHVuaXR5IHRoZSBSZWFkTG9jayBp cyBhdmFpbGFibGUuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gVmFyaWFi bGVSdW50aW1lQ2FjaGUgVmFyaWFibGUgcnVudGltZSBjYWNoZSBzdHJ1Y3R1cmUgZm9yDQo+ID4g dGhlDQo+ID4gICAgID4gcnVudGltZSBjYWNoZSBiZWluZyBzeW5jaHJvbml6ZWQuDQo+ID4gICAg ID4gKyAgQHBhcmFtW2luXSBPZmZzZXQgICAgICAgICAgICAgICBPZmZzZXQgaW4gYnl0ZXMgdG8g YXBwbHkgdGhlIHVwZGF0ZS4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dIExlbmd0aCAgICAgICAg ICAgICAgIExlbmd0aCBvZiBkYXRhIGluIGJ5dGVzIG9mIHRoZSB1cGRhdGUuDQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgVGhlIHVwZGF0 ZSB3YXMgYWRkZWQgYXMgYSBwZW5kaW5nIHVwZGF0ZQ0KPiA+ICAgICA+IHN1Y2Nlc3NmdWxseS4g SWYgdGhlIHZhcmlhYmxlIHJ1bnRpbWUNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNhY2hlIFJlYWRMb2NrIHdhcyBhdmFpbGFibGUsIHRoZSBydW50aW1lIGNh Y2hlIHdhcw0KPiA+ICAgICA+IHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ICAgICA+ICsgIEBy ZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICAgVGhlIHZvbGF0aWxlIHN0b3JlIHRvIGJlIHVw ZGF0ZWQgaXMgbm90DQo+ID4gICAgID4gaW5pdGlhbGl6ZWQgcHJvcGVybHkuDQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX1NUQVRVUw0KPiA+ICAgICA+ICtTeW5j aHJvbml6ZVJ1bnRpbWVWYXJpYWJsZUNhY2hlICgNCj4gPiAgICAgPiArICBJTiAgVkFSSUFCTEVf UlVOVElNRV9DQUNIRSAgKlZhcmlhYmxlUnVudGltZUNhY2hlLA0KPiA+ICAgICA+ICsgIElOICBV SU5UTiAgICAgICAgICAgICAgICAgICBPZmZzZXQsDQo+ID4gICAgID4gKyAgSU4gIFVJTlROICAg ICAgICAgICAgICAgICAgIExlbmd0aA0KPiA+ICAgICA+ICsgICk7DQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsjZW5kaWYNCj4gPiAgICAgPiBkaWZmIC0tZ2l0DQo+ID4gICAgID4NCj4gPiBhL01k ZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvTWVhc3Vy ZW1lbnQuYw0KPiA+ICAgICA+DQo+ID4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxl L1Byb3RlY3RlZC9SdW50aW1lRHhlL01lYXN1cmVtZW50LmMNCj4gPiAgICAgPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiA+ICAgICA+IGluZGV4IDAwMDAwMDAwMDAwMC4uYzE1Y2NlOTcxNjVkDQo+ ID4gICAgID4gLS0tIC9kZXYvbnVsbA0KPiA+ICAgICA+ICsrKw0KPiA+ICAgICA+DQo+ID4gYi9N ZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL01lYXN1 cmVtZW50LmMNCj4gPiAgICAgPiBAQCAtMCwwICsxLDM0MyBAQA0KPiA+ICAgICA+ICsvKiogQGZp bGUNCj4gPiAgICAgPiArICBNZWFzdXJlIFRDRyByZXF1aXJlZCB2YXJpYWJsZS4NCj4gPiAgICAg PiArDQo+ID4gICAgID4gK0NvcHlyaWdodCAoYykgMjAxMyAtIDIwMTcsIEludGVsIENvcnBvcmF0 aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiAgICAgPiArU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoq Lw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArI2luY2x1ZGUgPFBpRHhlLmg+DQo+ID4gICAgID4g KyNpbmNsdWRlIDxHdWlkL0ltYWdlQXV0aGVudGljYXRpb24uaD4NCj4gPiAgICAgPiArI2luY2x1 ZGUgPEluZHVzdHJ5U3RhbmRhcmQvVWVmaVRjZ1BsYXRmb3JtLmg+DQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIuaD4NCj4g PiAgICAgPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaVJ1bnRpbWVTZXJ2aWNlc1RhYmxlTGliLmg+ DQo+ID4gICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4NCj4g PiAgICAgPiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KPiA+ICAgICA+ICsj aW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPiA+ICAgICA+ICsjaW5jbHVkZSA8TGlicmFy eS9CYXNlTGliLmg+DQo+ID4gICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1RwbU1lYXN1cmVtZW50 TGliLmg+DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsjaW5jbHVkZSAiUHJpdmlsZWdlUG9seW1v cnBoaWMuaCINCj4gPiAgICAgPiArDQo+ID4gICAgID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiAg ICAgPiArICBDSEFSMTYgICAgICAqVmFyaWFibGVOYW1lOw0KPiA+ICAgICA+ICsgIEVGSV9HVUlE ICAgICpWZW5kb3JHdWlkOw0KPiA+ICAgICA+ICt9IFZBUklBQkxFX1RZUEU7DQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICtWQVJJQUJMRV9UWVBFICBtVmFyaWFibGVUeXBlW10gPSB7DQo+ID4gICAg ID4gKyAgeyBFRklfU0VDVVJFX0JPT1RfTU9ERV9OQU1FLCAgICAmZ0VmaUdsb2JhbFZhcmlhYmxl R3VpZCAgICAgICAgfSwNCj4gPiAgICAgPiArICB7IEVGSV9QTEFURk9STV9LRVlfTkFNRSwgICAg ICAgICZnRWZpR2xvYmFsVmFyaWFibGVHdWlkICAgICAgICB9LA0KPiA+ICAgICA+ICsgIHsgRUZJ X0tFWV9FWENIQU5HRV9LRVlfTkFNRSwgICAgJmdFZmlHbG9iYWxWYXJpYWJsZUd1aWQgICAgICAg IH0sDQo+ID4gICAgID4gKyAgeyBFRklfSU1BR0VfU0VDVVJJVFlfREFUQUJBU0UsICAmZ0VmaUlt YWdlU2VjdXJpdHlEYXRhYmFzZUd1aWQgfSwNCj4gPiAgICAgPiArICB7IEVGSV9JTUFHRV9TRUNV UklUWV9EQVRBQkFTRTEsDQo+ICZnRWZpSW1hZ2VTZWN1cml0eURhdGFiYXNlR3VpZCB9LA0KPiA+ ICAgICA+ICsgIHsgRUZJX0lNQUdFX1NFQ1VSSVRZX0RBVEFCQVNFMiwNCj4gJmdFZmlJbWFnZVNl Y3VyaXR5RGF0YWJhc2VHdWlkIH0sDQo+ID4gICAgID4gK307DQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsvLw0KPiA+ICAgICA+ICsvLyAiU2VjdXJlQm9vdCIgbWF5IHVwZGF0ZSBmb2xsb3dpbmcg UEsgRGVsL0FkZA0KPiA+ICAgICA+ICsvLyAgQ2FjaGUgaXRzIHZhbHVlIHRvIGRldGVjdCB2YWx1 ZSB1cGRhdGUNCj4gPiAgICAgPiArLy8NCj4gPiAgICAgPiArVUlOVDggICptU2VjdXJlQm9vdFZh ckRhdGEgICAgPSBOVUxMOw0KPiA+ICAgICA+ICtVSU5UTiAgbVNlY3VyZUJvb3RWYXJEYXRhU2l6 ZSA9IDA7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBUaGlzIGZ1 bmN0aW9uIHdpbGwgcmV0dXJuIGlmIHRoaXMgdmFyaWFibGUgaXMgU2VjdXJlQm9vdFBvbGljeSBW YXJpYWJsZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgVmFyaWFibGVO YW1lICAgICAgQSBOdWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHRoYXQgaXMgdGhlIG5hbWUNCj4gb2YN Cj4gPiB0aGUNCj4gPiAgICAgPiB2ZW5kb3IncyB2YXJpYWJsZS4NCj4gPiAgICAgPiArICBAcGFy YW1baW5dICBWZW5kb3JHdWlkICAgICAgICBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgdmVu ZG9yLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcmV0dmFsIFRSVUUgIFRoaXMgaXMgU2Vj dXJlQm9vdFBvbGljeSBWYXJpYWJsZQ0KPiA+ICAgICA+ICsgIEByZXR2YWwgRkFMU0UgVGhpcyBp cyBub3QgU2VjdXJlQm9vdFBvbGljeSBWYXJpYWJsZQ0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAg PiArQk9PTEVBTg0KPiA+ICAgICA+ICtJc1NlY3VyZUJvb3RQb2xpY3lWYXJpYWJsZSAoDQo+ID4g ICAgID4gKyAgSU4gQ0hBUjE2ICAgICpWYXJpYWJsZU5hbWUsDQo+ID4gICAgID4gKyAgSU4gRUZJ X0dVSUQgICpWZW5kb3JHdWlkDQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAg ID4gKyAgVUlOVE4gIEluZGV4Ow0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBmb3IgKEluZGV4 ID0gMDsgSW5kZXggPCBzaXplb2YgKG1WYXJpYWJsZVR5cGUpL3NpemVvZiAobVZhcmlhYmxlVHlw ZVswXSk7DQo+ID4gICAgID4gSW5kZXgrKykgew0KPiA+ICAgICA+ICsgICAgaWYgKChTdHJDbXAg KFZhcmlhYmxlTmFtZSwgbVZhcmlhYmxlVHlwZVtJbmRleF0uVmFyaWFibGVOYW1lKSA9PSAwKQ0K PiA+ICYmDQo+ID4gICAgID4gKyAgICAgICAgKENvbXBhcmVHdWlkIChWZW5kb3JHdWlkLCBtVmFy aWFibGVUeXBlW0luZGV4XS5WZW5kb3JHdWlkKSkpDQo+ID4gICAgID4gKyAgICB7DQo+ID4gICAg ID4gKyAgICAgIHJldHVybiBUUlVFOw0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ICsgIH0N Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgcmV0dXJuIEZBTFNFOw0KPiA+ICAgICA+ICt9DQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBNZWFzdXJlIGFuZCBsb2cg YW4gRUZJIHZhcmlhYmxlLCBhbmQgZXh0ZW5kIHRoZSBtZWFzdXJlbWVudCByZXN1bHQNCj4gaW50 bw0KPiA+IGENCj4gPiAgICAgPiBzcGVjaWZpYyBQQ1IuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsgIEBwYXJhbVtpbl0gIFZhck5hbWUgICAgICAgICAgIEEgTnVsbC10ZXJtaW5hdGVkIHN0cmlu ZyB0aGF0IGlzIHRoZSBuYW1lIG9mDQo+ID4gdGhlDQo+ID4gICAgID4gdmVuZG9yJ3MgdmFyaWFi bGUuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgVmVuZG9yR3VpZCAgICAgICAgQSB1bmlxdWUg aWRlbnRpZmllciBmb3IgdGhlIHZlbmRvci4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dICBWYXJE YXRhICAgICAgICAgICBUaGUgY29udGVudCBvZiB0aGUgdmFyaWFibGUgZGF0YS4NCj4gPiAgICAg PiArICBAcGFyYW1baW5dICBWYXJTaXplICAgICAgICAgICBUaGUgc2l6ZSBvZiB0aGUgdmFyaWFi bGUgZGF0YS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgT3BlcmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuDQo+ID4gICAgID4gKyAg QHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgT3V0IG9mIG1lbW9yeS4NCj4gPiAgICAgPiAr ICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgb3BlcmF0aW9uIHdhcyB1bnN1Y2Nl c3NmdWwuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX1NUQVRV Uw0KPiA+ICAgICA+ICtFRklBUEkNCj4gPiAgICAgPiArTWVhc3VyZVZhcmlhYmxlICgNCj4gPiAg ICAgPiArICBJTiAgICAgIENIQVIxNiAgICAqVmFyTmFtZSwNCj4gPiAgICAgPiArICBJTiAgICAg IEVGSV9HVUlEICAqVmVuZG9yR3VpZCwNCj4gPiAgICAgPiArICBJTiAgICAgIFZPSUQgICAgICAq VmFyRGF0YSwNCj4gPiAgICAgPiArICBJTiAgICAgIFVJTlROICAgICBWYXJTaXplDQo+ID4gICAg ID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICBT dGF0dXM7DQo+ID4gICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICBWYXJOYW1lTGVuZ3RoOw0K PiA+ICAgICA+ICsgIFVFRklfVkFSSUFCTEVfREFUQSAgKlZhckxvZzsNCj4gPiAgICAgPiArICBV SU5UMzIgICAgICAgICAgICAgIFZhckxvZ1NpemU7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsg IEFTU0VSVCAoKFZhclNpemUgPT0gMCAmJiBWYXJEYXRhID09IE5VTEwpIHx8IChWYXJTaXplICE9 IDAgJiYNCj4gPiBWYXJEYXRhICE9DQo+ID4gICAgID4gTlVMTCkpOw0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICBWYXJOYW1lTGVuZ3RoID0gU3RyTGVuIChWYXJOYW1lKTsNCj4gPiAgICAgPiAr ICBWYXJMb2dTaXplICAgID0gKFVJTlQzMikoc2l6ZW9mICgqVmFyTG9nKSArIFZhck5hbWVMZW5n dGggKiBzaXplb2YNCj4gPiAgICAgPiAoKlZhck5hbWUpICsgVmFyU2l6ZQ0KPiA+ICAgICA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAtIHNpemVvZiAoVmFyTG9nLT5Vbmljb2RlTmFtZSkg LSBzaXplb2YgKFZhckxvZy0NCj4gPiAgICAgPiA+VmFyaWFibGVEYXRhKSk7DQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsgIFZhckxvZyA9IChVRUZJX1ZBUklBQkxFX0RBVEEgKilBbGxvY2F0ZVpl cm9Qb29sIChWYXJMb2dTaXplKTsNCj4gPiAgICAgPiArICBpZiAoVmFyTG9nID09IE5VTEwpIHsN Cj4gPiAgICAgPiArICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiAgICAgPiAr ICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIENvcHlNZW0gKCZWYXJMb2ctPlZhcmlhYmxl TmFtZSwgVmVuZG9yR3VpZCwgc2l6ZW9mIChWYXJMb2ctDQo+ID4gICAgID4gPlZhcmlhYmxlTmFt ZSkpOw0KPiA+ICAgICA+ICsgIFZhckxvZy0+VW5pY29kZU5hbWVMZW5ndGggID0gVmFyTmFtZUxl bmd0aDsNCj4gPiAgICAgPiArICBWYXJMb2ctPlZhcmlhYmxlRGF0YUxlbmd0aCA9IFZhclNpemU7 DQo+ID4gICAgID4gKyAgQ29weU1lbSAoDQo+ID4gICAgID4gKyAgICBWYXJMb2ctPlVuaWNvZGVO YW1lLA0KPiA+ICAgICA+ICsgICAgVmFyTmFtZSwNCj4gPiAgICAgPiArICAgIFZhck5hbWVMZW5n dGggKiBzaXplb2YgKCpWYXJOYW1lKQ0KPiA+ICAgICA+ICsgICAgKTsNCj4gPiAgICAgPiArICBp ZiAoVmFyU2l6ZSAhPSAwKSB7DQo+ID4gICAgID4gKyAgICBDb3B5TWVtICgNCj4gPiAgICAgPiAr ICAgICAgKENIQVIxNiAqKVZhckxvZy0+VW5pY29kZU5hbWUgKyBWYXJOYW1lTGVuZ3RoLA0KPiA+ ICAgICA+ICsgICAgICBWYXJEYXRhLA0KPiA+ICAgICA+ICsgICAgICBWYXJTaXplDQo+ID4gICAg ID4gKyAgICAgICk7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBE RUJVRyAoKERFQlVHX0lORk8sICJWYXJpYWJsZUR4ZTogTWVhc3VyZVZhcmlhYmxlIChQY3IgLSAl eCwNCj4gPiBFdmVudFR5cGUgLQ0KPiA+ICAgICA+ICAleCwgIiwgKFVJTlROKTcsIChVSU5UTilF Vl9FRklfVkFSSUFCTEVfRFJJVkVSX0NPTkZJRykpOw0KPiA+ICAgICA+ICsgIERFQlVHICgoREVC VUdfSU5GTywgIlZhcmlhYmxlTmFtZSAtICVzLCBWZW5kb3JHdWlkIC0gJWcpXG4iLA0KPiA+IFZh ck5hbWUsDQo+ID4gICAgID4gVmVuZG9yR3VpZCkpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr ICBTdGF0dXMgPSBUcG1NZWFzdXJlQW5kTG9nRGF0YSAoDQo+ID4gICAgID4gKyAgICAgICAgICAg ICA3LA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgRVZfRUZJX1ZBUklBQkxFX0RSSVZFUl9DT05G SUcsDQo+ID4gICAgID4gKyAgICAgICAgICAgICBWYXJMb2csDQo+ID4gICAgID4gKyAgICAgICAg ICAgICBWYXJMb2dTaXplLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgVmFyTG9nLA0KPiA+ICAg ICA+ICsgICAgICAgICAgICAgVmFyTG9nU2l6ZQ0KPiA+ICAgICA+ICsgICAgICAgICAgICAgKTsN Cj4gPiAgICAgPiArICBGcmVlUG9vbCAoVmFyTG9nKTsNCj4gPiAgICAgPiArICByZXR1cm4gU3Rh dHVzOw0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAg PiArICBSZXR1cm5zIHRoZSBzdGF0dXMgd2hldGhlciBnZXQgdGhlIHZhcmlhYmxlIHN1Y2Nlc3Mu IFRoZSBmdW5jdGlvbg0KPiA+IHJldHJpZXZlcw0KPiA+ICAgICA+ICsgIHZhcmlhYmxlICB0aHJv dWdoIHRoZSBVRUZJIFJ1bnRpbWUgU2VydmljZSBHZXRWYXJpYWJsZSgpLiAgVGhlDQo+ID4gICAg ID4gKyAgcmV0dXJuZWQgYnVmZmVyIGlzIGFsbG9jYXRlZCB1c2luZyBBbGxvY2F0ZVBvb2woKS4g IFRoZSBjYWxsZXIgaXMNCj4gcmVzcG9uc2libGUNCj4gPiAgICAgPiArICBmb3IgZnJlZWluZyB0 aGlzIGJ1ZmZlciB3aXRoIEZyZWVQb29sKCkuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFRo aXMgQVBJIGlzIG9ubHkgaW52b2tlZCBpbiBib290IHRpbWUuIEl0IG1heSBOT1QgYmUgaW52b2tl ZCBhdCBydW50aW1lLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1baW5dICBOYW1l ICBUaGUgcG9pbnRlciB0byBhIE51bGwtdGVybWluYXRlZCBVbmljb2RlIHN0cmluZy4NCj4gPiAg ICAgPiArICBAcGFyYW1baW5dICBHdWlkICBUaGUgcG9pbnRlciB0byBhbiBFRklfR1VJRCBzdHJ1 Y3R1cmUNCj4gPiAgICAgPiArICBAcGFyYW1bb3V0XSBWYWx1ZSBUaGUgYnVmZmVyIHBvaW50IHNh dmVkIHRoZSB2YXJpYWJsZSBpbmZvLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtvdXRdIFNpemUgIFRo ZSBidWZmZXIgc2l6ZSBvZiB0aGUgdmFyaWFibGUuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsg IEByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVMgICAgICBBbGxvY2F0ZSBidWZmZXIgZmFpbGVk Lg0KPiA+ICAgICA+ICsgIEByZXR1cm4gRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICBGaW5kIHRo ZSBzcGVjaWZpZWQgdmFyaWFibGUuDQo+ID4gICAgID4gKyAgQHJldHVybiBPdGhlcnMgRXJyb3Jz ICAgICAgICAgICAgIFJldHVybiBlcnJvcnMgZnJvbSBjYWxsIHRvIGdSVC0NCj4gPkdldFZhcmlh YmxlLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMN Cj4gPiAgICAgPiArSW50ZXJuYWxHZXRWYXJpYWJsZSAoDQo+ID4gICAgID4gKyAgSU4gQ09OU1Qg Q0hBUjE2ICAgICpOYW1lLA0KPiA+ICAgICA+ICsgIElOIENPTlNUIEVGSV9HVUlEICAqR3VpZCwN Cj4gPiAgICAgPiArICBPVVQgVk9JRCAgICAgICAgICAgKipWYWx1ZSwNCj4gPiAgICAgPiArICBP VVQgVUlOVE4gICAgICAgICAgKlNpemUNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4g PiAgICAgPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ID4gICAgID4gKyAgVUlOVE4gICAgICAg QnVmZmVyU2l6ZTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAv LyBUcnkgdG8gZ2V0IHRoZSB2YXJpYWJsZSBzaXplLg0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAg ID4gKyAgQnVmZmVyU2l6ZSA9IDA7DQo+ID4gICAgID4gKyAgKlZhbHVlICAgICA9IE5VTEw7DQo+ ID4gICAgID4gKyAgaWYgKFNpemUgIT0gTlVMTCkgew0KPiA+ICAgICA+ICsgICAgKlNpemUgPSAw Ow0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgU3RhdHVzID0gZ1JU LT5HZXRWYXJpYWJsZSAoKENIQVIxNiAqKU5hbWUsIChFRklfR1VJRCAqKUd1aWQsIE5VTEwsDQo+ ID4gICAgID4gJkJ1ZmZlclNpemUsICpWYWx1ZSk7DQo+ID4gICAgID4gKyAgaWYgKFN0YXR1cyAh PSBFRklfQlVGRkVSX1RPT19TTUFMTCkgew0KPiA+ICAgICA+ICsgICAgcmV0dXJuIFN0YXR1czsN Cj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4g KyAgLy8gQWxsb2NhdGUgYnVmZmVyIHRvIGdldCB0aGUgdmFyaWFibGUuDQo+ID4gICAgID4gKyAg Ly8NCj4gPiAgICAgPiArICAqVmFsdWUgPSBBbGxvY2F0ZVBvb2wgKEJ1ZmZlclNpemUpOw0KPiA+ ICAgICA+ICsgIEFTU0VSVCAoKlZhbHVlICE9IE5VTEwpOw0KPiA+ICAgICA+ICsgIGlmICgqVmFs dWUgPT0gTlVMTCkgew0KPiA+ICAgICA+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VT Ow0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAg PiArICAvLyBHZXQgdGhlIHZhcmlhYmxlIGRhdGEuDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAg PiArICBTdGF0dXMgPSBnUlQtPkdldFZhcmlhYmxlICgoQ0hBUjE2ICopTmFtZSwgKEVGSV9HVUlE ICopR3VpZCwgTlVMTCwNCj4gPiAgICAgPiAmQnVmZmVyU2l6ZSwgKlZhbHVlKTsNCj4gPiAgICAg PiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAgID4gKyAgICBGcmVlUG9vbCAo KlZhbHVlKTsNCj4gPiAgICAgPiArICAgICpWYWx1ZSA9IE5VTEw7DQo+ID4gICAgID4gKyAgfQ0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBpZiAoU2l6ZSAhPSBOVUxMKSB7DQo+ID4gICAgID4g KyAgICAqU2l6ZSA9IEJ1ZmZlclNpemU7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBTZWN1cmVCb290IEhvb2sgZm9yIFNldFZhcmlhYmxl Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1baW5dIFZhcmlhYmxlTmFtZSAgICAg ICAgICAgICAgICAgTmFtZSBvZiBWYXJpYWJsZSB0byBiZSBmb3VuZC4NCj4gPiAgICAgPiArICBA cGFyYW1baW5dIFZlbmRvckd1aWQgICAgICAgICAgICAgICAgICAgVmFyaWFibGUgdmVuZG9yIEdV SUQuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArVk9JRA0KPiA+ICAg ICA+ICtFRklBUEkNCj4gPiAgICAgPiArU2VjdXJlQm9vdEhvb2sgKA0KPiA+ICAgICA+ICsgIElO IENIQVIxNiAgICAqVmFyaWFibGVOYW1lLA0KPiA+ICAgICA+ICsgIElOIEVGSV9HVUlEICAqVmVu ZG9yR3VpZA0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0KPiA+ICAgICA+ICsgIEVGSV9T VEFUVVMgIFN0YXR1czsNCj4gPiAgICAgPiArICBVSU5UTiAgICAgICBWYXJpYWJsZURhdGFTaXpl Ow0KPiA+ICAgICA+ICsgIFZPSUQgICAgICAgICpWYXJpYWJsZURhdGE7DQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIGlmICghSXNTZWN1cmVCb290UG9saWN5VmFyaWFibGUgKFZhcmlhYmxlTmFt ZSwgVmVuZG9yR3VpZCkpIHsNCj4gPiAgICAgPiArICAgIHJldHVybjsNCj4gPiAgICAgPiArICB9 DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gV2Ugc2hvdWxk IE5PVCB1c2UgRGF0YSBhbmQgRGF0YVNpemUgaGVyZSxiZWNhdXNlIGl0IG1heSBpbmNsdWRlDQo+ ID4gICAgID4gc2lnbmF0dXJlLA0KPiA+ICAgICA+ICsgIC8vIG9yIGlzIGp1c3QgcGFydGlhbCB3 aXRoIGFwcGVuZCBhdHRyaWJ1dGVzLCBvciBpcyBkZWxldGVkLg0KPiA+ICAgICA+ICsgIC8vIFdl IHNob3VsZCBHZXRWYXJpYWJsZSBhZ2FpbiwgdG8gZ2V0IGZ1bGwgdmFyaWFibGUgY29udGVudC4N Cj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIFN0YXR1cyA9IEludGVybmFsR2V0VmFyaWFi bGUgKA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgVmFyaWFibGVOYW1lLA0KPiA+ICAgICA+ICsg ICAgICAgICAgICAgVmVuZG9yR3VpZCwNCj4gPiAgICAgPiArICAgICAgICAgICAgICZWYXJpYWJs ZURhdGEsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAmVmFyaWFibGVEYXRhU2l6ZQ0KPiA+ICAg ICA+ICsgICAgICAgICAgICAgKTsNCj4gPiAgICAgPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgLy8gTWVhc3VyZSBEQlQgb25s eSBpZiBwcmVzZW50IGFuZCBub3QgZW1wdHkNCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4g KyAgICBpZiAoKFN0ckNtcCAoVmFyaWFibGVOYW1lLCBFRklfSU1BR0VfU0VDVVJJVFlfREFUQUJB U0UyKSA9PSAwKQ0KPiAmJg0KPiA+ICAgICA+ICsgICAgICAgIENvbXBhcmVHdWlkIChWZW5kb3JH dWlkLCAmZ0VmaUltYWdlU2VjdXJpdHlEYXRhYmFzZUd1aWQpKQ0KPiA+ICAgICA+ICsgICAgew0K PiA+ICAgICA+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJTa2lwIG1lYXN1cmluZyB2YXJp YWJsZSAlcyBzaW5jZSBpdCdzDQo+IGRlbGV0ZWRcbiIsDQo+ID4gICAgID4gRUZJX0lNQUdFX1NF Q1VSSVRZX0RBVEFCQVNFMikpOw0KPiA+ICAgICA+ICsgICAgICByZXR1cm47DQo+ID4gICAgID4g KyAgICB9IGVsc2Ugew0KPiA+ICAgICA+ICsgICAgICBWYXJpYWJsZURhdGEgICAgID0gTlVMTDsN Cj4gPiAgICAgPiArICAgICAgVmFyaWFibGVEYXRhU2l6ZSA9IDA7DQo+ID4gICAgID4gKyAgICB9 DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBTdGF0dXMgPSBNZWFz dXJlVmFyaWFibGUgKA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgVmFyaWFibGVOYW1lLA0KPiA+ ICAgICA+ICsgICAgICAgICAgICAgVmVuZG9yR3VpZCwNCj4gPiAgICAgPiArICAgICAgICAgICAg IFZhcmlhYmxlRGF0YSwNCj4gPiAgICAgPiArICAgICAgICAgICAgIFZhcmlhYmxlRGF0YVNpemUN Cj4gPiAgICAgPiArICAgICAgICAgICAgICk7DQo+ID4gICAgID4gKyAgREVCVUcgKChERUJVR19J TkZPLCAiTWVhc3VyZUJvb3RQb2xpY3lWYXJpYWJsZSAtICVyXG4iLCBTdGF0dXMpKTsNCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKyAgaWYgKFZhcmlhYmxlRGF0YSAhPSBOVUxMKSB7DQo+ID4gICAg ID4gKyAgICBGcmVlUG9vbCAoVmFyaWFibGVEYXRhKTsNCj4gPiAgICAgPiArICB9DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gIlNlY3VyZUJvb3QiIGlzIDhi aXQgJiByZWFkLW9ubHkuIEl0IGNhbiBvbmx5IGJlIGNoYW5nZWQgYWNjb3JkaW5nIHRvDQo+ID4g UEsNCj4gPiAgICAgPiB1cGRhdGUNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIGlmICgo U3RyQ21wIChWYXJpYWJsZU5hbWUsIEVGSV9QTEFURk9STV9LRVlfTkFNRSkgPT0gMCkgJiYNCj4g PiAgICAgPiArICAgICAgQ29tcGFyZUd1aWQgKFZlbmRvckd1aWQsICZnRWZpR2xvYmFsVmFyaWFi bGVHdWlkKSkNCj4gPiAgICAgPiArICB7DQo+ID4gICAgID4gKyAgICBTdGF0dXMgPSBJbnRlcm5h bEdldFZhcmlhYmxlICgNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgRUZJX1NFQ1VSRV9CT09U X01PREVfTkFNRSwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgJmdFZmlHbG9iYWxWYXJpYWJs ZUd1aWQsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICZWYXJpYWJsZURhdGEsDQo+ID4gICAg ID4gKyAgICAgICAgICAgICAgICZWYXJpYWJsZURhdGFTaXplDQo+ID4gICAgID4gKyAgICAgICAg ICAgICAgICk7DQo+ID4gICAgID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4g ICAgID4gKyAgICAgIHJldHVybjsNCj4gPiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgLy8gSWYgUEsgdXBkYXRlIGlzIHN1Y2Nlc3Nm dWwuICJTZWN1cmVCb290IiBzaGFsbCBhbHdheXMgZXhpc3QgZXZlciBzaW5jZQ0KPiA+ICAgICA+ IHZhcmlhYmxlIHdyaXRlIHNlcnZpY2UgaXMgcmVhZHkNCj4gPiAgICAgPiArICAgIC8vDQo+ID4g ICAgID4gKyAgICBBU1NFUlQgKG1TZWN1cmVCb290VmFyRGF0YSAhPSBOVUxMKTsNCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyAgICBpZiAoQ29tcGFyZU1lbSAobVNlY3VyZUJvb3RWYXJEYXRhLCBW YXJpYWJsZURhdGEsDQo+ID4gVmFyaWFibGVEYXRhU2l6ZSkgIT0NCj4gPiAgICAgPiAwKSB7DQo+ ID4gICAgID4gKyAgICAgIEZyZWVQb29sIChtU2VjdXJlQm9vdFZhckRhdGEpOw0KPiA+ICAgICA+ ICsgICAgICBtU2VjdXJlQm9vdFZhckRhdGEgICAgID0gVmFyaWFibGVEYXRhOw0KPiA+ICAgICA+ ICsgICAgICBtU2VjdXJlQm9vdFZhckRhdGFTaXplID0gVmFyaWFibGVEYXRhU2l6ZTsNCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIiVzIHZhcmlhYmxl IHVwZGF0ZWQgYWNjb3JkaW5nIHRvIFBLIGNoYW5nZS4NCj4gPiAgICAgPiBSZW1lYXN1cmUgdGhl IHZhbHVlIVxuIiwgRUZJX1NFQ1VSRV9CT09UX01PREVfTkFNRSkpOw0KPiA+ICAgICA+ICsgICAg ICBTdGF0dXMgPSBNZWFzdXJlVmFyaWFibGUgKA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAg IEVGSV9TRUNVUkVfQk9PVF9NT0RFX05BTUUsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAg JmdFZmlHbG9iYWxWYXJpYWJsZUd1aWQsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgbVNl Y3VyZUJvb3RWYXJEYXRhLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgIG1TZWN1cmVCb290 VmFyRGF0YVNpemUNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICApOw0KPiA+ICAgICA+ICsg ICAgICBERUJVRyAoKERFQlVHX0lORk8sICJNZWFzdXJlQm9vdFBvbGljeVZhcmlhYmxlIC0gJXJc biIsIFN0YXR1cykpOw0KPiA+ICAgICA+ICsgICAgfSBlbHNlIHsNCj4gPiAgICAgPiArICAgICAg Ly8NCj4gPiAgICAgPiArICAgICAgLy8gIlNlY3VyZUJvb3QiIHZhcmlhYmxlIGlzIG5vdCBjaGFu Z2VkDQo+ID4gICAgID4gKyAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgIEZyZWVQb29sIChWYXJp YWJsZURhdGEpOw0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyAgcmV0dXJuOw0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsvKioNCj4gPiAgICAgPiArICBTb21lIFNlY3VyZSBCb290IFBvbGljeSBWYXJpYWJsZSBt YXkgdXBkYXRlIGZvbGxvd2luZyBvdGhlciB2YXJpYWJsZQ0KPiA+ICAgICA+IGNoYW5nZXMoU2Vj dXJlQm9vdCBmb2xsb3dzIFBLIGNoYW5nZSwgZXRjKS4NCj4gPiAgICAgPiArICBSZWNvcmQgdGhl aXIgaW5pdGlhbCBTdGF0ZSB3aGVuIHZhcmlhYmxlIHdyaXRlIHNlcnZpY2UgaXMgcmVhZHkuDQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArVk9JRA0KPiA+ICAgICA+ICtF RklBUEkNCj4gPiAgICAgPiArUmVjb3JkU2VjdXJlQm9vdFBvbGljeVZhckRhdGEgKA0KPiA+ICAg ICA+ICsgIFZPSUQNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBF RklfU1RBVFVTICBTdGF0dXM7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAg ID4gKyAgLy8gUmVjb3JkIGluaXRpYWwgIlNlY3VyZUJvb3QiIHZhcmlhYmxlIHZhbHVlLg0KPiA+ ICAgICA+ICsgIC8vIEl0IGlzIHVzZWQgdG8gZGV0ZWN0IFNlY3VyZUJvb3QgdmFyaWFibGUgY2hh bmdlIGluIFNlY3VyZUJvb3RIb29rLg0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgU3Rh dHVzID0gSW50ZXJuYWxHZXRWYXJpYWJsZSAoDQo+ID4gICAgID4gKyAgICAgICAgICAgICBFRklf U0VDVVJFX0JPT1RfTU9ERV9OQU1FLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgJmdFZmlHbG9i YWxWYXJpYWJsZUd1aWQsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAoVk9JRCAqKikmbVNlY3Vy ZUJvb3RWYXJEYXRhLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgJm1TZWN1cmVCb290VmFyRGF0 YVNpemUNCj4gPiAgICAgPiArICAgICAgICAgICAgICk7DQo+ID4gICAgID4gKyAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIC8vIFJl YWQgY291bGQgZmFpbCB3aGVuIEF1dGggVmFyaWFibGUgc29sdXRpb24gaXMgbm90IHN1cHBvcnRl ZA0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIERFQlVHICgoREVCVUdfSU5GTywg IlJlY29yZFNlY3VyZUJvb3RQb2xpY3lWYXJEYXRhDQo+ID4gR2V0VmFyaWFibGUgJXMNCj4gPiAg ICAgPiBTdGF0dXMgJXhcbiIsIEVGSV9TRUNVUkVfQk9PVF9NT0RFX05BTUUsIFN0YXR1cykpOw0K PiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+IGRpZmYgLS1naXQNCj4gPiAg ICAgPiBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVE eGUvUmVjbGFpbS5jDQo+ID4gICAgID4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxl L1Byb3RlY3RlZC9SdW50aW1lRHhlL1JlY2xhaW0uYw0KPiA+ICAgICA+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0DQo+ID4gICAgID4gaW5kZXggMDAwMDAwMDAwMDAwLi5hNWI3ZjhhMWZiZTINCj4gPiAg ICAgPiAtLS0gL2Rldi9udWxsDQo+ID4gICAgID4gKysrDQo+IGIvTWRlTW9kdWxlUGtnL1VuaXZl cnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9SZWNsYWltLmMNCj4gPiAgICAgPiBA QCAtMCwwICsxLDUwNCBAQA0KPiA+ICAgICA+ICsvKiogQGZpbGUNCj4gPiAgICAgPiArICBIYW5k bGVzIG5vbi12b2xhdGlsZSB2YXJpYWJsZSBzdG9yZSBnYXJiYWdlIGNvbGxlY3Rpb24sIHVzaW5n IEZUVw0KPiA+ICAgICA+ICsgIChGYXVsdCBUb2xlcmFudCBXcml0ZSkgcHJvdG9jb2wuDQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICtDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDIyLCBJbnRlbCBDb3Jw b3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4gICAgID4gK1NQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsqKi8NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyNpbmNsdWRlICJWYXJpYWJsZS5oIg0KPiA+ ICAgICA+ICsjaW5jbHVkZSAiVmFyaWFibGVOb25Wb2xhdGlsZS5oIg0KPiA+ICAgICA+ICsjaW5j bHVkZSAiVmFyaWFibGVQYXJzaW5nLmgiDQo+ID4gICAgID4gKyNpbmNsdWRlICJWYXJpYWJsZVJ1 bnRpbWVDYWNoZS5oIg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAg R2V0cyBMQkEgb2YgYmxvY2sgYW5kIG9mZnNldCBieSBnaXZlbiBhZGRyZXNzLg0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArICBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIExvZ2ljYWwgQmxvY2sgQWRk cmVzcyAoTEJBKSBvZiBhIGZpcm13YXJlDQo+ID4gICAgID4gKyAgdm9sdW1lIGJsb2NrIGNvbnRh aW5pbmcgdGhlIGdpdmVuIGFkZHJlc3MsIGFuZCB0aGUgb2Zmc2V0IG9mIHRoZQ0KPiA+ICAgICA+ ICsgIGFkZHJlc3Mgb24gdGhlIGJsb2NrLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFy YW0gIEFkZHJlc3MgICAgICAgIEFkZHJlc3Mgd2hpY2ggc2hvdWxkIGJlIGNvbnRhaW5lZA0KPiA+ ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgYnkgcmV0dXJuZWQgRlZCIGhhbmRsZS4N Cj4gPiAgICAgPiArICBAcGFyYW0gIExiYSAgICAgICAgICAgIFBvaW50ZXIgdG8gTEJBIGZvciBv dXRwdXQuDQo+ID4gICAgID4gKyAgQHBhcmFtICBPZmZzZXQgICAgICAgICBQb2ludGVyIHRvIG9m ZnNldCBmb3Igb3V0cHV0Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgIExCQSBhbmQgb2Zmc2V0IHN1Y2Nlc3NmdWxseSByZXR1cm5lZC4NCj4gPiAgICAg PiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgIEZhaWwgdG8gZmluZCBGVkIgaGFuZGxlIGJ5IGFk ZHJlc3MuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfQUJPUlRFRCAgICBGYWlsIHRvIGZpbmQg dmFsaWQgTEJBIGFuZCBvZmZzZXQuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAg ICAgPiArRUZJX1NUQVRVUw0KPiA+ICAgICA+ICtHZXRMYmFBbmRPZmZzZXRCeUFkZHJlc3MgKA0K PiA+ICAgICA+ICsgIElOICBFRklfUEhZU0lDQUxfQUREUkVTUyAgQWRkcmVzcywNCj4gPiAgICAg PiArICBPVVQgRUZJX0xCQSAgICAgICAgICAgICAgICpMYmEsDQo+ID4gICAgID4gKyAgT1VUIFVJ TlROICAgICAgICAgICAgICAgICAqT2Zmc2V0DQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7 DQo+ID4gICAgID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVz Ow0KPiA+ICAgICA+ICsgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgICAgICAgICAgIEZ2YkJh c2VBZGRyZXNzOw0KPiA+ICAgICA+ICsgIEVGSV9GSVJNV0FSRV9WT0xVTUVfQkxPQ0tfUFJPVE9D T0wgICpGdmI7DQo+ID4gICAgID4gKyAgRUZJX0ZJUk1XQVJFX1ZPTFVNRV9IRUFERVIgICAgICAg ICAgKkZ3Vm9sSGVhZGVyOw0KPiA+ICAgICA+ICsgIEVGSV9GVl9CTE9DS19NQVBfRU5UUlkgICAg ICAgICAgICAgICpGdmJNYXBFbnRyeTsNCj4gPiAgICAgPiArICBVSU5UMzIgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBMYmFJbmRleDsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgRnZi ICAgICA9IE5VTEw7DQo+ID4gICAgID4gKyAgKkxiYSAgICA9IChFRklfTEJBKSgtMSk7DQo+ID4g ICAgID4gKyAgKk9mZnNldCA9IDA7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4g ICAgID4gKyAgLy8gR2V0IHRoZSBwcm9wZXIgRlZCIHByb3RvY29sLg0KPiA+ICAgICA+ICsgIC8v DQo+ID4gICAgID4gKyAgU3RhdHVzID0gR2V0RnZiSW5mb0J5QWRkcmVzcyAoQWRkcmVzcywgTlVM TCwgJkZ2Yik7DQo+ID4gICAgID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICAg ICA+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gR2V0IHRoZSBCYXNlIEFkZHJlc3Mgb2YgRlYu DQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBTdGF0dXMgPSBGdmItPkdldFBoeXNpY2Fs QWRkcmVzcyAoRnZiLCAmRnZiQmFzZUFkZHJlc3MpOw0KPiA+ICAgICA+ICsgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4gICAgID4g KyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBGd1ZvbEhlYWRlciA9IChFRklfRklSTVdB UkVfVk9MVU1FX0hFQURFUg0KPiA+ICAgICA+ICopKChVSU5UTilGdmJCYXNlQWRkcmVzcyk7DQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gR2V0IHRoZSAoTEJB LCBPZmZzZXQpIG9mIEFkZHJlc3MuDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBpZiAo KEZ3Vm9sSGVhZGVyLT5Gdkxlbmd0aCkgPiAoRndWb2xIZWFkZXItPkhlYWRlckxlbmd0aCkpIHsN Cj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICAvLyBCVUdCVUc6IEFzc3VtZSBvbmUg RlYgaGFzIG9uZSB0eXBlIG9mIEJsb2NrTGVuZ3RoLg0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAg ICAgPiArICAgIEZ2Yk1hcEVudHJ5ID0gJkZ3Vm9sSGVhZGVyLT5CbG9ja01hcFswXTsNCj4gPiAg ICAgPiArICAgIGZvciAoTGJhSW5kZXggPSAxOyBMYmFJbmRleCA8PSBGdmJNYXBFbnRyeS0+TnVt QmxvY2tzOyBMYmFJbmRleCArPQ0KPiAxKQ0KPiA+IHsNCj4gPiAgICAgPiArICAgICAgaWYgKEFk ZHJlc3MgPCAoRnZiQmFzZUFkZHJlc3MgKyBGdmJNYXBFbnRyeS0+TGVuZ3RoICogTGJhSW5kZXgp KSB7DQo+ID4gICAgID4gKyAgICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgICAvLyBGb3VuZCB0 aGUgKExiYSwgT2Zmc2V0KS4NCj4gPiAgICAgPiArICAgICAgICAvLw0KPiA+ICAgICA+ICsgICAg ICAgICpMYmEgICAgPSBMYmFJbmRleCAtIDE7DQo+ID4gICAgID4gKyAgICAgICAgKk9mZnNldCA9 IChVSU5UTikoQWRkcmVzcyAtIChGdmJCYXNlQWRkcmVzcyArIEZ2Yk1hcEVudHJ5LQ0KPiA+TGVu Z3RoDQo+ID4gKg0KPiA+ICAgICA+IChMYmFJbmRleCAtIDEpKSk7DQo+ID4gICAgID4gKyAgICAg ICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICAgICA+ICsgICAgICB9DQo+ID4gICAgID4gKyAg ICB9DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICByZXR1cm4gRUZJ X0FCT1JURUQ7DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ ICAgICA+ICsgIFdyaXRlcyBhIGJ1ZmZlciB0byB2YXJpYWJsZSBzdG9yYWdlIHNwYWNlLCBpbiB0 aGUgd29ya2luZyBibG9jay4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgVGhpcyBmdW5jdGlv biB3cml0ZXMgYSBidWZmZXIgdG8gdmFyaWFibGUgc3RvcmFnZSBzcGFjZSBpbnRvIGEgZmlybXdh cmUNCj4gPiAgICAgPiArICB2b2x1bWUgYmxvY2sgZGV2aWNlLiBUaGUgZGVzdGluYXRpb24gaXMg c3BlY2lmaWVkIGJ5IHBhcmFtZXRlcg0KPiA+ICAgICA+ICsgIFZhcmlhYmxlQmFzZS4gRmF1bHQg VG9sZXJhbnQgV3JpdGUgcHJvdG9jb2wgaXMgdXNlZCBmb3Igd3JpdGluZy4NCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyAgQHBhcmFtICBWYXJpYWJsZUJhc2UgICBCYXNlIGFkZHJlc3Mgb2YgdmFy aWFibGUgdG8gd3JpdGUNCj4gPiAgICAgPiArICBAcGFyYW0gIFZhcmlhYmxlQnVmZmVyIFBvaW50 IHRvIHRoZSB2YXJpYWJsZSBkYXRhIGJ1ZmZlci4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg QHJldHZhbCBFRklfU1VDQ0VTUyAgICBUaGUgZnVuY3Rpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxs eS4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgIEZhaWwgdG8gbG9jYXRlIEZh dWx0IFRvbGVyYW50IFdyaXRlIHByb3RvY29sLg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX0FC T1JURUQgICAgVGhlIGZ1bmN0aW9uIGNvdWxkIG5vdCBjb21wbGV0ZSBzdWNjZXNzZnVsbHkuDQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX1NUQVRVUw0KPiA+ICAg ICA+ICtGdHdWYXJpYWJsZVNwYWNlICgNCj4gPiAgICAgPiArICBJTiBFRklfUEhZU0lDQUxfQURE UkVTUyAgIFZhcmlhYmxlQmFzZSwNCj4gPiAgICAgPiArICBJTiBWQVJJQUJMRV9TVE9SRV9IRUFE RVIgICpWYXJpYWJsZUJ1ZmZlcg0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0KPiA+ICAg ICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ICAg ICA+ICsgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgRnZiSGFuZGxlOw0KPiA+ ICAgICA+ICsgIEVGSV9MQkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyTGJhOw0KPiA+ ICAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyT2Zmc2V0Ow0K PiA+ICAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnR3QnVmZmVy U2l6ZTsNCj4gPiAgICAgPiArICBFRklfRkFVTFRfVE9MRVJBTlRfV1JJVEVfUFJPVE9DT0wgICpG dHdQcm90b2NvbDsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAv LyBMb2NhdGUgZmF1bHQgdG9sZXJhbnQgd3JpdGUgcHJvdG9jb2wuDQo+ID4gICAgID4gKyAgLy8N Cj4gPiAgICAgPiArICBTdGF0dXMgPSBHZXRGdHdQcm90b2NvbCAoKFZPSUQgKiopJkZ0d1Byb3Rv Y29sKTsNCj4gPiAgICAgPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAgID4g KyAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gTG9jYXRlIEZ2YiBoYW5kbGUgYnkgYWRk cmVzcy4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIFN0YXR1cyA9IEdldEZ2YkluZm9C eUFkZHJlc3MgKFZhcmlhYmxlQmFzZSwgJkZ2YkhhbmRsZSwgTlVMTCk7DQo+ID4gICAgID4gKyAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICAgICA+ICsgICAgcmV0dXJuIFN0YXR1czsN Cj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4g KyAgLy8gR2V0IExCQSBhbmQgT2Zmc2V0IGJ5IGFkZHJlc3MuDQo+ID4gICAgID4gKyAgLy8NCj4g PiAgICAgPiArICBTdGF0dXMgPSBHZXRMYmFBbmRPZmZzZXRCeUFkZHJlc3MgKFZhcmlhYmxlQmFz ZSwgJlZhckxiYSwNCj4gJlZhck9mZnNldCk7DQo+ID4gICAgID4gKyAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPiA+ICAgICA+ICsgICAgcmV0dXJuIEVGSV9BQk9SVEVEOw0KPiA+ICAgICA+ ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgRnR3QnVmZmVyU2l6ZSA9ICgoVkFSSUFC TEVfU1RPUkVfSEVBREVSICopKChVSU5UTilWYXJpYWJsZUJhc2UpKS0NCj4gPiA+U2l6ZTsNCj4g PiAgICAgPiArICBBU1NFUlQgKEZ0d0J1ZmZlclNpemUgPT0gVmFyaWFibGVCdWZmZXItPlNpemUp Ow0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIEZUVyB3cml0 ZSByZWNvcmQuDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBTdGF0dXMgPSBGdHdQcm90 b2NvbC0+V3JpdGUgKA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIEZ0d1By b3RvY29sLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIFZhckxiYSwgICAg ICAgICAgICAgICAgLy8gTEJBDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg VmFyT2Zmc2V0LCAgICAgICAgICAgICAvLyBPZmZzZXQNCj4gPiAgICAgPiArICAgICAgICAgICAg ICAgICAgICAgICAgICBGdHdCdWZmZXJTaXplLCAgICAgICAgIC8vIE51bUJ5dGVzDQo+ID4gICAg ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAvLyBQ cml2YXRlRGF0YSBOVUxMDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgRnZi SGFuZGxlLCAgICAgICAgICAgICAvLyBGdmIgSGFuZGxlDQo+ID4gICAgID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgKFZPSUQgKilWYXJpYWJsZUJ1ZmZlciAvLyB3cml0ZSBidWZmZXINCj4g PiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsvKioNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgVmFyaWFibGUgc3RvcmUgZ2FyYmFn ZSBjb2xsZWN0aW9uIGFuZCByZWNsYWltIG9wZXJhdGlvbi4NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgQHBhcmFtW2luXSAgICAgIFZhcmlhYmxlQmFzZSAgICAgICAgICAgIEJhc2UgYWRkcmVz cyBvZiB2YXJpYWJsZSBzdG9yZS4NCj4gPiAgICAgPiArICBAcGFyYW1bb3V0XSAgICAgTGFzdFZh cmlhYmxlT2Zmc2V0ICAgICAgT2Zmc2V0IG9mIGxhc3QgdmFyaWFibGUuDQo+ID4gICAgID4gKyAg QHBhcmFtW2luXSAgICAgIElzVm9sYXRpbGUgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSBzdG9y ZSBpcyB2b2xhdGlsZSBvciBub3Q7DQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmIGl0IGlzIG5vbi12b2xhdGlsZSwgbmVlZCBGVFcuDQo+ID4g ICAgID4gKyAgQHBhcmFtW2luLCBvdXRdIFVwZGF0aW5nUHRyVHJhY2sgICAgICAgIFBvaW50ZXIg dG8gdXBkYXRpbmcgdmFyaWFibGUNCj4gPiBwb2ludGVyDQo+ID4gICAgID4gdHJhY2sgc3RydWN0 dXJlLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBOZXdWYXJpYWJsZSAgICAgICAgICAg ICBQb2ludGVyIHRvIG5ldyB2YXJpYWJsZS4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dICAgICAg TmV3VmFyaWFibGVTaXplICAgICAgICAgTmV3IHZhcmlhYmxlIHNpemUuDQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIEByZXR1cm4gRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgICBSZWNsYWlt IG9wZXJhdGlvbiBoYXMgZmluaXNoZWQNCj4gPiBzdWNjZXNzZnVsbHkuDQo+ID4gICAgID4gKyAg QHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUyAgICAgICAgIE5vIGVub3VnaCBtZW1vcnkgcmVz b3VyY2VzDQo+IG9yDQo+ID4gICAgID4gdmFyaWFibGUgc3BhY2UuDQo+ID4gICAgID4gKyAgQHJl dHVybiBPdGhlcnMgICAgICAgICAgICAgICAgICAgICAgIFVuZXhwZWN0IGVycm9yIGhhcHBlbmVk IGR1cmluZyByZWNsYWltDQo+ID4gICAgID4gb3BlcmF0aW9uLg0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArKiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4gPiAgICAgPiArUmVjbGFpbSAoDQo+ ID4gICAgID4gKyAgSU4gICAgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgIFZhcmlhYmxlQmFzZSwN Cj4gPiAgICAgPiArICBPVVQgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgKkxhc3RWYXJpYWJs ZU9mZnNldCwNCj4gPiAgICAgPiArICBJTiAgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgSXNW b2xhdGlsZSwNCj4gPiAgICAgPiArICBJTiBPVVQgVkFSSUFCTEVfUE9JTlRFUl9UUkFDSyAgKlVw ZGF0aW5nUHRyVHJhY2ssDQo+ID4gICAgID4gKyAgSU4gICAgIFZBUklBQkxFX0hFQURFUiAgICAg ICAgICpOZXdWYXJpYWJsZSwNCj4gPiAgICAgPiArICBJTiAgICAgVUlOVE4gICAgICAgICAgICAg ICAgICAgTmV3VmFyaWFibGVTaXplDQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4g ICAgID4gKyAgVkFSSUFCTEVfSEVBREVSICAgICAgICAqVmFyaWFibGU7DQo+ID4gICAgID4gKyAg VkFSSUFCTEVfSEVBREVSICAgICAgICAqQWRkZWRWYXJpYWJsZTsNCj4gPiAgICAgPiArICBWQVJJ QUJMRV9IRUFERVIgICAgICAgICpOZXh0VmFyaWFibGU7DQo+ID4gICAgID4gKyAgVkFSSUFCTEVf SEVBREVSICAgICAgICAqTmV4dEFkZGVkVmFyaWFibGU7DQo+ID4gICAgID4gKyAgVkFSSUFCTEVf U1RPUkVfSEVBREVSICAqVmFyaWFibGVTdG9yZUhlYWRlcjsNCj4gPiAgICAgPiArICBVSU5UOCAg ICAgICAgICAgICAgICAgICpWYWxpZEJ1ZmZlcjsNCj4gPiAgICAgPiArICBVSU5UTiAgICAgICAg ICAgICAgICAgIE1heGltdW1CdWZmZXJTaXplOw0KPiA+ICAgICA+ICsgIFVJTlROICAgICAgICAg ICAgICAgICAgVmFyaWFibGVTaXplOw0KPiA+ICAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAg ICAgTmFtZVNpemU7DQo+ID4gICAgID4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAqQ3VyclB0 cjsNCj4gPiAgICAgPiArICBWT0lEICAgICAgICAgICAgICAgICAgICpQb2ludDA7DQo+ID4gICAg ID4gKyAgVk9JRCAgICAgICAgICAgICAgICAgICAqUG9pbnQxOw0KPiA+ICAgICA+ICsgIEJPT0xF QU4gICAgICAgICAgICAgICAgRm91bmRBZGRlZDsNCj4gPiAgICAgPiArICBFRklfU1RBVFVTICAg ICAgICAgICAgIFN0YXR1czsNCj4gPiAgICAgPiArICBFRklfU1RBVFVTICAgICAgICAgICAgIERv bmVTdGF0dXM7DQo+ID4gICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICBDb21tb25WYXJp YWJsZVRvdGFsU2l6ZTsNCj4gPiAgICAgPiArICBVSU5UTiAgICAgICAgICAgICAgICAgIENvbW1v blVzZXJWYXJpYWJsZVRvdGFsU2l6ZTsNCj4gPiAgICAgPiArICBVSU5UTiAgICAgICAgICAgICAg ICAgIEh3RXJyVmFyaWFibGVUb3RhbFNpemU7DQo+ID4gICAgID4gKyAgVkFSSUFCTEVfSEVBREVS ICAgICAgICAqVXBkYXRpbmdWYXJpYWJsZTsNCj4gPiAgICAgPiArICBWQVJJQUJMRV9IRUFERVIg ICAgICAgICpVcGRhdGluZ0luRGVsZXRlZFRyYW5zaXRpb247DQo+ID4gICAgID4gKyAgQk9PTEVB TiAgICAgICAgICAgICAgICBBdXRoRm9ybWF0Ow0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBB dXRoRm9ybWF0ICAgICAgICAgICAgICAgICAgPSBtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4g PlZhcmlhYmxlR2xvYmFsLkF1dGhGb3JtYXQ7DQo+ID4gICAgID4gKyAgVXBkYXRpbmdWYXJpYWJs ZSAgICAgICAgICAgID0gTlVMTDsNCj4gPiAgICAgPiArICBVcGRhdGluZ0luRGVsZXRlZFRyYW5z aXRpb24gPSBOVUxMOw0KPiA+ICAgICA+ICsgIGlmIChVcGRhdGluZ1B0clRyYWNrICE9IE5VTEwp IHsNCj4gPiAgICAgPiArICAgIFVwZGF0aW5nVmFyaWFibGUgICAgICAgICAgICA9IFVwZGF0aW5n UHRyVHJhY2stPkN1cnJQdHI7DQo+ID4gICAgID4gKyAgICBVcGRhdGluZ0luRGVsZXRlZFRyYW5z aXRpb24gPSBVcGRhdGluZ1B0clRyYWNrLQ0KPiA+ID5JbkRlbGV0ZWRUcmFuc2l0aW9uUHRyOw0K PiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgVmFyaWFibGVTdG9yZUhl YWRlciA9IChWQVJJQUJMRV9TVE9SRV9IRUFERVINCj4gPiAqKSgoVUlOVE4pVmFyaWFibGVCYXNl KTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQ29tbW9uVmFyaWFibGVUb3RhbFNpemUgICAg ID0gMDsNCj4gPiAgICAgPiArICBDb21tb25Vc2VyVmFyaWFibGVUb3RhbFNpemUgPSAwOw0KPiA+ ICAgICA+ICsgIEh3RXJyVmFyaWFibGVUb3RhbFNpemUgICAgICA9IDA7DQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIGlmIChJc1ZvbGF0aWxlIHx8IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFy aWFibGVHbG9iYWwuRW11TnZNb2RlKSB7DQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsg ICAgLy8gU3RhcnQgUG9pbnRlcnMgZm9yIHRoZSB2YXJpYWJsZS4NCj4gPiAgICAgPiArICAgIC8v DQo+ID4gICAgID4gKyAgICBWYXJpYWJsZSAgICAgICAgICA9IEdldFN0YXJ0UG9pbnRlciAoVmFy aWFibGVTdG9yZUhlYWRlcik7DQo+ID4gICAgID4gKyAgICBNYXhpbXVtQnVmZmVyU2l6ZSA9IHNp emVvZiAoVkFSSUFCTEVfU1RPUkVfSEVBREVSKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg ICB3aGlsZSAoSXNWYWxpZFZhcmlhYmxlSGVhZGVyIChWYXJpYWJsZSwgR2V0RW5kUG9pbnRlcg0K PiA+IChWYXJpYWJsZVN0b3JlSGVhZGVyKSwNCj4gPiAgICAgPiBBdXRoRm9ybWF0KSkgew0KPiA+ ICAgICA+ICsgICAgICBOZXh0VmFyaWFibGUgPSBHZXROZXh0VmFyaWFibGVQdHIgKFZhcmlhYmxl LCBBdXRoRm9ybWF0KTsNCj4gPiAgICAgPiArICAgICAgaWYgKCgoVmFyaWFibGUtPlN0YXRlID09 IFZBUl9BRERFRCkgfHwgKFZhcmlhYmxlLT5TdGF0ZSA9PQ0KPiA+ICAgICA+IChWQVJfSU5fREVM RVRFRF9UUkFOU0lUSU9OICYgVkFSX0FEREVEKSkpICYmDQo+ID4gICAgID4gKyAgICAgICAgICAo VmFyaWFibGUgIT0gVXBkYXRpbmdWYXJpYWJsZSkgJiYNCj4gPiAgICAgPiArICAgICAgICAgIChW YXJpYWJsZSAhPSBVcGRhdGluZ0luRGVsZXRlZFRyYW5zaXRpb24pDQo+ID4gICAgID4gKyAgICAg ICAgICApDQo+ID4gICAgID4gKyAgICAgIHsNCj4gPiAgICAgPiArICAgICAgICBWYXJpYWJsZVNp emUgICAgICAgPSAoVUlOVE4pTmV4dFZhcmlhYmxlIC0gKFVJTlROKVZhcmlhYmxlOw0KPiA+ICAg ICA+ICsgICAgICAgIE1heGltdW1CdWZmZXJTaXplICs9IFZhcmlhYmxlU2l6ZTsNCj4gPiAgICAg PiArICAgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgICAgVmFyaWFibGUgPSBOZXh0 VmFyaWFibGU7DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAg aWYgKE5ld1ZhcmlhYmxlICE9IE5VTEwpIHsNCj4gPiAgICAgPiArICAgICAgLy8NCj4gPiAgICAg PiArICAgICAgLy8gQWRkIHRoZSBuZXcgdmFyaWFibGUgc2l6ZS4NCj4gPiAgICAgPiArICAgICAg Ly8NCj4gPiAgICAgPiArICAgICAgTWF4aW11bUJ1ZmZlclNpemUgKz0gTmV3VmFyaWFibGVTaXpl Ow0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgIC8vDQo+ID4g ICAgID4gKyAgICAvLyBSZXNlcnZlIHRoZSAxIEJ5dGVzIHdpdGggT3hmZiB0byBpZGVudGlmeSB0 aGUNCj4gPiAgICAgPiArICAgIC8vIGVuZCBvZiB0aGUgdmFyaWFibGUgYnVmZmVyLg0KPiA+ICAg ICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIE1heGltdW1CdWZmZXJTaXplICs9IDE7DQo+ID4g ICAgID4gKyAgICBWYWxpZEJ1ZmZlciAgICAgICAgPSBBbGxvY2F0ZVBvb2wgKE1heGltdW1CdWZm ZXJTaXplKTsNCj4gPiAgICAgPiArICAgIGlmIChWYWxpZEJ1ZmZlciA9PSBOVUxMKSB7DQo+ID4g ICAgID4gKyAgICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiAgICAgPiArICAg IH0NCj4gPiAgICAgPiArICB9IGVsc2Ugew0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiAr ICAgIC8vIEZvciBOViB2YXJpYWJsZSByZWNsYWltLCBkb24ndCBhbGxvY2F0ZSBwb29sIGhlcmUg YW5kIGp1c3QgdXNlDQo+ID4gICAgID4gbU52VmFyaWFibGVDYWNoZQ0KPiA+ICAgICA+ICsgICAg Ly8gYXMgdGhlIGJ1ZmZlciB0byByZWR1Y2UgU01SQU0gY29uc3VtcHRpb24gZm9yIFNNTSB2YXJp YWJsZQ0KPiBkcml2ZXIuDQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgTWF4aW11 bUJ1ZmZlclNpemUgPSBtTnZWYXJpYWJsZUNhY2hlLT5TaXplOw0KPiA+ICAgICA+ICsgICAgVmFs aWRCdWZmZXIgICAgICAgPSAoVUlOVDggKiltTnZWYXJpYWJsZUNhY2hlOw0KPiA+ICAgICA+ICsg IH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgU2V0TWVtIChWYWxpZEJ1ZmZlciwgTWF4aW11 bUJ1ZmZlclNpemUsIDB4ZmYpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAg ICA+ICsgIC8vIENvcHkgdmFyaWFibGUgc3RvcmUgaGVhZGVyLg0KPiA+ICAgICA+ICsgIC8vDQo+ ID4gICAgID4gKyAgQ29weU1lbSAoVmFsaWRCdWZmZXIsIFZhcmlhYmxlU3RvcmVIZWFkZXIsIHNp emVvZg0KPiA+ICAgICA+IChWQVJJQUJMRV9TVE9SRV9IRUFERVIpKTsNCj4gPiAgICAgPiArICBD dXJyUHRyID0gKFVJTlQ4ICopR2V0U3RhcnRQb2ludGVyICgoVkFSSUFCTEVfU1RPUkVfSEVBREVS DQo+ID4gKilWYWxpZEJ1ZmZlcik7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4g ICAgID4gKyAgLy8gUmVpbnN0YWxsIGFsbCBBRERFRCB2YXJpYWJsZXMgYXMgbG9uZyBhcyB0aGV5 IGFyZSBub3QgaWRlbnRpY2FsIHRvDQo+ID4gVXBkYXRpbmcNCj4gPiAgICAgPiBWYXJpYWJsZS4N Cj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIFZhcmlhYmxlID0gR2V0U3RhcnRQb2ludGVy IChWYXJpYWJsZVN0b3JlSGVhZGVyKTsNCj4gPiAgICAgPiArICB3aGlsZSAoSXNWYWxpZFZhcmlh YmxlSGVhZGVyIChWYXJpYWJsZSwgR2V0RW5kUG9pbnRlcg0KPiA+IChWYXJpYWJsZVN0b3JlSGVh ZGVyKSwNCj4gPiAgICAgPiBBdXRoRm9ybWF0KSkgew0KPiA+ICAgICA+ICsgICAgTmV4dFZhcmlh YmxlID0gR2V0TmV4dFZhcmlhYmxlUHRyIChWYXJpYWJsZSwgQXV0aEZvcm1hdCk7DQo+ID4gICAg ID4gKyAgICBpZiAoKFZhcmlhYmxlICE9IFVwZGF0aW5nVmFyaWFibGUpICYmIChWYXJpYWJsZS0+ U3RhdGUgPT0gVkFSX0FEREVEKSkNCj4gew0KPiA+ICAgICA+ICsgICAgICBWYXJpYWJsZVNpemUg PSAoVUlOVE4pTmV4dFZhcmlhYmxlIC0gKFVJTlROKVZhcmlhYmxlOw0KPiA+ICAgICA+ICsgICAg ICBDb3B5TWVtIChDdXJyUHRyLCAoVUlOVDggKilWYXJpYWJsZSwgVmFyaWFibGVTaXplKTsNCj4g PiAgICAgPiArICAgICAgaWYgKCFJc1ZvbGF0aWxlKSB7DQo+ID4gICAgID4gKyAgICAgICAgKFZP SUQpUHJvdGVjdGVkVmFyaWFibGVMaWJSZWZyZXNoICgNCj4gPiAgICAgPiArICAgICAgICAgICAg ICAgIChWQVJJQUJMRV9IRUFERVIgKilDdXJyUHRyLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAg ICAgVmFyaWFibGVTaXplLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgKFVJTlROKUN1cnJQ dHIgLSAoVUlOVE4pVmFsaWRCdWZmZXIsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICBGQUxT RQ0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgICAgICAgaWYgKChWYXJpYWJsZS0+QXR0cmlidXRlcyAmDQo+ID4gRUZJX1ZBUklBQkxFX0hB UkRXQVJFX0VSUk9SX1JFQ09SRCkNCj4gPiAgICAgPiArICAgICAgICAgICAgPT0gRUZJX1ZBUklB QkxFX0hBUkRXQVJFX0VSUk9SX1JFQ09SRCkNCj4gPiAgICAgPiArICAgICAgICB7DQo+ID4gICAg ID4gKyAgICAgICAgICBId0VyclZhcmlhYmxlVG90YWxTaXplICs9IFZhcmlhYmxlU2l6ZTsNCj4g PiAgICAgPiArICAgICAgICB9IGVsc2Ugew0KPiA+ICAgICA+ICsgICAgICAgICAgQ29tbW9uVmFy aWFibGVUb3RhbFNpemUgKz0gVmFyaWFibGVTaXplOw0KPiA+ICAgICA+ICsgICAgICAgICAgaWYg KElzVXNlclZhcmlhYmxlIChWYXJpYWJsZSkpIHsNCj4gPiAgICAgPiArICAgICAgICAgICAgQ29t bW9uVXNlclZhcmlhYmxlVG90YWxTaXplICs9IFZhcmlhYmxlU2l6ZTsNCj4gPiAgICAgPiArICAg ICAgICAgIH0NCj4gPiAgICAgPiArICAgICAgICB9DQo+ID4gICAgID4gKyAgICAgIH0NCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKyAgICAgIEN1cnJQdHIgKz0gVmFyaWFibGVTaXplOw0KPiA+ICAg ICA+ICsgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgIFZhcmlhYmxlID0gTmV4dFZh cmlhYmxlOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4g PiAgICAgPiArICAvLyBSZWluc3RhbGwgYWxsIGluIGRlbGV0ZSB0cmFuc2l0aW9uIHZhcmlhYmxl cy4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIFZhcmlhYmxlID0gR2V0U3RhcnRQb2lu dGVyIChWYXJpYWJsZVN0b3JlSGVhZGVyKTsNCj4gPiAgICAgPiArICB3aGlsZSAoSXNWYWxpZFZh cmlhYmxlSGVhZGVyIChWYXJpYWJsZSwgR2V0RW5kUG9pbnRlcg0KPiA+IChWYXJpYWJsZVN0b3Jl SGVhZGVyKSwNCj4gPiAgICAgPiBBdXRoRm9ybWF0KSkgew0KPiA+ICAgICA+ICsgICAgTmV4dFZh cmlhYmxlID0gR2V0TmV4dFZhcmlhYmxlUHRyIChWYXJpYWJsZSwgQXV0aEZvcm1hdCk7DQo+ID4g ICAgID4gKyAgICBpZiAoKFZhcmlhYmxlICE9IFVwZGF0aW5nVmFyaWFibGUpICYmIChWYXJpYWJs ZSAhPQ0KPiA+ICAgICA+IFVwZGF0aW5nSW5EZWxldGVkVHJhbnNpdGlvbikgJiYgKFZhcmlhYmxl LT5TdGF0ZSA9PQ0KPiA+ICAgICA+IChWQVJfSU5fREVMRVRFRF9UUkFOU0lUSU9OICYgVkFSX0FE REVEKSkgJiYNCj4gPiAgICAgPiArICAgICAgICAoUHJvdGVjdGVkVmFyaWFibGVMaWJJc0htYWMg KEdldFZhcmlhYmxlTmFtZVB0ciAoVmFyaWFibGUsDQo+ID4gQXV0aEZvcm1hdCkpDQo+ID4gICAg ID4gPT0gRkFMU0UpKQ0KPiA+ICAgICA+ICsgICAgew0KPiA+ICAgICA+ICsgICAgICBGb3VuZEFk ZGVkICAgID0gRkFMU0U7DQo+ID4gICAgID4gKyAgICAgIEFkZGVkVmFyaWFibGUgPSBHZXRTdGFy dFBvaW50ZXIgKChWQVJJQUJMRV9TVE9SRV9IRUFERVINCj4gPiAqKVZhbGlkQnVmZmVyKTsNCj4g PiAgICAgPiArICAgICAgd2hpbGUgKElzVmFsaWRWYXJpYWJsZUhlYWRlciAoQWRkZWRWYXJpYWJs ZSwgR2V0RW5kUG9pbnRlcg0KPiA+ICAgICA+ICgoVkFSSUFCTEVfU1RPUkVfSEVBREVSICopVmFs aWRCdWZmZXIpLCBBdXRoRm9ybWF0KSkgew0KPiA+ICAgICA+ICsgICAgICAgIE5leHRBZGRlZFZh cmlhYmxlID0gR2V0TmV4dFZhcmlhYmxlUHRyIChBZGRlZFZhcmlhYmxlLA0KPiBBdXRoRm9ybWF0 KTsNCj4gPiAgICAgPiArICAgICAgICBOYW1lU2l6ZSAgICAgICAgICA9IE5hbWVTaXplT2ZWYXJp YWJsZSAoQWRkZWRWYXJpYWJsZSwgQXV0aEZvcm1hdCk7DQo+ID4gICAgID4gKyAgICAgICAgaWYg KENvbXBhcmVHdWlkICgNCj4gPiAgICAgPiArICAgICAgICAgICAgICBHZXRWZW5kb3JHdWlkUHRy IChBZGRlZFZhcmlhYmxlLCBBdXRoRm9ybWF0KSwNCj4gPiAgICAgPiArICAgICAgICAgICAgICBH ZXRWZW5kb3JHdWlkUHRyIChWYXJpYWJsZSwgQXV0aEZvcm1hdCkNCj4gPiAgICAgPiArICAgICAg ICAgICAgICApICYmIChOYW1lU2l6ZSA9PSBOYW1lU2l6ZU9mVmFyaWFibGUgKFZhcmlhYmxlLCBB dXRoRm9ybWF0KSkpDQo+ID4gICAgID4gKyAgICAgICAgew0KPiA+ICAgICA+ICsgICAgICAgICAg UG9pbnQwID0gKFZPSUQgKilHZXRWYXJpYWJsZU5hbWVQdHIgKEFkZGVkVmFyaWFibGUsIEF1dGhG b3JtYXQpOw0KPiA+ICAgICA+ICsgICAgICAgICAgUG9pbnQxID0gKFZPSUQgKilHZXRWYXJpYWJs ZU5hbWVQdHIgKFZhcmlhYmxlLCBBdXRoRm9ybWF0KTsNCj4gPiAgICAgPiArICAgICAgICAgIGlm IChDb21wYXJlTWVtIChQb2ludDAsIFBvaW50MSwgTmFtZVNpemUpID09IDApIHsNCj4gPiAgICAg PiArICAgICAgICAgICAgRm91bmRBZGRlZCA9IFRSVUU7DQo+ID4gICAgID4gKyAgICAgICAgICAg IGJyZWFrOw0KPiA+ICAgICA+ICsgICAgICAgICAgfQ0KPiA+ICAgICA+ICsgICAgICAgIH0NCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyAgICAgICAgQWRkZWRWYXJpYWJsZSA9IE5leHRBZGRlZFZh cmlhYmxlOw0KPiA+ICAgICA+ICsgICAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAg ICBpZiAoIUZvdW5kQWRkZWQpIHsNCj4gPiAgICAgPiArICAgICAgICAvLw0KPiA+ICAgICA+ICsg ICAgICAgIC8vIFByb21vdGUgVkFSX0lOX0RFTEVURURfVFJBTlNJVElPTiB0byBWQVJfQURERUQu DQo+ID4gICAgID4gKyAgICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgICBWYXJpYWJsZVNpemUg PSAoVUlOVE4pTmV4dFZhcmlhYmxlIC0gKFVJTlROKVZhcmlhYmxlOw0KPiA+ICAgICA+ICsgICAg ICAgIENvcHlNZW0gKEN1cnJQdHIsIChVSU5UOCAqKVZhcmlhYmxlLCBWYXJpYWJsZVNpemUpOw0K PiA+ICAgICA+ICsgICAgICAgICgoVkFSSUFCTEVfSEVBREVSICopQ3VyclB0ciktPlN0YXRlID0g VkFSX0FEREVEOw0KPiA+ICAgICA+ICsgICAgICAgIGlmICghSXNWb2xhdGlsZSkgew0KPiA+ICAg ICA+ICsgICAgICAgICAgKFZPSUQpUHJvdGVjdGVkVmFyaWFibGVMaWJSZWZyZXNoICgNCj4gPiAg ICAgPiArICAgICAgICAgICAgICAgICAgKFZBUklBQkxFX0hFQURFUiAqKUN1cnJQdHIsDQo+ID4g ICAgID4gKyAgICAgICAgICAgICAgICAgIFZhcmlhYmxlU2l6ZSwNCj4gPiAgICAgPiArICAgICAg ICAgICAgICAgICAgKFVJTlROKUN1cnJQdHIgLSAoVUlOVE4pVmFsaWRCdWZmZXIsDQo+ID4gICAg ID4gKyAgICAgICAgICAgICAgICAgIEZBTFNFDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAg ICk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgICAgICAgaWYgKChWYXJpYWJsZS0+QXR0 cmlidXRlcyAmDQo+ID4gRUZJX1ZBUklBQkxFX0hBUkRXQVJFX0VSUk9SX1JFQ09SRCkNCj4gPiAg ICAgPiArICAgICAgICAgICAgICA9PSBFRklfVkFSSUFCTEVfSEFSRFdBUkVfRVJST1JfUkVDT1JE KQ0KPiA+ICAgICA+ICsgICAgICAgICAgew0KPiA+ICAgICA+ICsgICAgICAgICAgICBId0VyclZh cmlhYmxlVG90YWxTaXplICs9IFZhcmlhYmxlU2l6ZTsNCj4gPiAgICAgPiArICAgICAgICAgIH0g ZWxzZSB7DQo+ID4gICAgID4gKyAgICAgICAgICAgIENvbW1vblZhcmlhYmxlVG90YWxTaXplICs9 IFZhcmlhYmxlU2l6ZTsNCj4gPiAgICAgPiArICAgICAgICAgICAgaWYgKElzVXNlclZhcmlhYmxl IChWYXJpYWJsZSkpIHsNCj4gPiAgICAgPiArICAgICAgICAgICAgICBDb21tb25Vc2VyVmFyaWFi bGVUb3RhbFNpemUgKz0gVmFyaWFibGVTaXplOw0KPiA+ICAgICA+ICsgICAgICAgICAgICB9DQo+ ID4gICAgID4gKyAgICAgICAgICB9DQo+ID4gICAgID4gKyAgICAgICAgfQ0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICAgICAgICBDdXJyUHRyICs9IFZhcmlhYmxlU2l6ZTsNCj4gPiAgICAgPiAr ICAgICAgfQ0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgIFZh cmlhYmxlID0gTmV4dFZhcmlhYmxlOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBJbnN0YWxsIHRoZSBuZXcgdmFyaWFibGUgaWYg aXQgaXMgbm90IE5VTEwuDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBpZiAoTmV3VmFy aWFibGUgIT0gTlVMTCkgew0KPiA+ICAgICA+ICsgICAgaWYgKCgoVUlOVE4pQ3VyclB0ciAtIChV SU5UTilWYWxpZEJ1ZmZlcikgKyBOZXdWYXJpYWJsZVNpemUgPg0KPiA+ICAgICA+IFZhcmlhYmxl U3RvcmVIZWFkZXItPlNpemUpIHsNCj4gPiAgICAgPiArICAgICAgLy8NCj4gPiAgICAgPiArICAg ICAgLy8gTm8gZW5vdWdoIHNwYWNlIHRvIHN0b3JlIHRoZSBuZXcgdmFyaWFibGUuDQo+ID4gICAg ID4gKyAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VS Q0VTOw0KPiA+ICAgICA+ICsgICAgICBnb3RvIERvbmU7DQo+ID4gICAgID4gKyAgICB9DQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgICAgaWYgKCFJc1ZvbGF0aWxlKSB7DQo+ID4gICAgID4gKyAg ICAgIGlmICgoTmV3VmFyaWFibGUtPkF0dHJpYnV0ZXMgJg0KPiA+IEVGSV9WQVJJQUJMRV9IQVJE V0FSRV9FUlJPUl9SRUNPUkQpDQo+ID4gICAgID4gPT0gRUZJX1ZBUklBQkxFX0hBUkRXQVJFX0VS Uk9SX1JFQ09SRCkgew0KPiA+ICAgICA+ICsgICAgICAgIEh3RXJyVmFyaWFibGVUb3RhbFNpemUg Kz0gTmV3VmFyaWFibGVTaXplOw0KPiA+ICAgICA+ICsgICAgICB9IGVsc2UgaWYgKChOZXdWYXJp YWJsZS0+QXR0cmlidXRlcyAmDQo+ID4gICAgID4gRUZJX1ZBUklBQkxFX0hBUkRXQVJFX0VSUk9S X1JFQ09SRCkgIT0NCj4gPiAgICAgPiBFRklfVkFSSUFCTEVfSEFSRFdBUkVfRVJST1JfUkVDT1JE KSB7DQo+ID4gICAgID4gKyAgICAgICAgQ29tbW9uVmFyaWFibGVUb3RhbFNpemUgKz0gTmV3VmFy aWFibGVTaXplOw0KPiA+ICAgICA+ICsgICAgICAgIGlmIChJc1VzZXJWYXJpYWJsZSAoTmV3VmFy aWFibGUpKSB7DQo+ID4gICAgID4gKyAgICAgICAgICBDb21tb25Vc2VyVmFyaWFibGVUb3RhbFNp emUgKz0gTmV3VmFyaWFibGVTaXplOw0KPiA+ICAgICA+ICsgICAgICAgIH0NCj4gPiAgICAgPiAr ICAgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgICAgaWYgKChId0VyclZhcmlhYmxl VG90YWxTaXplID4gUGNkR2V0MzIgKFBjZEh3RXJyU3RvcmFnZVNpemUpKSB8fA0KPiA+ICAgICA+ ICsgICAgICAgICAgKENvbW1vblZhcmlhYmxlVG90YWxTaXplID4gbVZhcmlhYmxlTW9kdWxlR2xv YmFsLQ0KPiA+ICAgICA+ID5Db21tb25WYXJpYWJsZVNwYWNlKSB8fA0KPiA+ICAgICA+ICsgICAg ICAgICAgKENvbW1vblVzZXJWYXJpYWJsZVRvdGFsU2l6ZSA+IG1WYXJpYWJsZU1vZHVsZUdsb2Jh bC0NCj4gPiAgICAgPiA+Q29tbW9uTWF4VXNlclZhcmlhYmxlU3BhY2UpKQ0KPiA+ICAgICA+ICsg ICAgICB7DQo+ID4gICAgID4gKyAgICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgICAvLyBObyBl bm91Z2ggc3BhY2UgdG8gc3RvcmUgdGhlIG5ldyB2YXJpYWJsZSBieSBOViBvciBOVitIUg0KPiA+ IGF0dHJpYnV0ZS4NCj4gPiAgICAgPiArICAgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAgIFN0 YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ICAgICA+ICsgICAgICAgIGdvdG8gRG9u ZTsNCj4gPiAgICAgPiArICAgICAgfQ0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICAgIENvcHlNZW0gKEN1cnJQdHIsIChVSU5UOCAqKU5ld1ZhcmlhYmxlLCBOZXdW YXJpYWJsZVNpemUpOw0KPiA+ICAgICA+ICsgICAgKChWQVJJQUJMRV9IRUFERVIgKilDdXJyUHRy KS0+U3RhdGUgPSBWQVJfQURERUQ7DQo+ID4gICAgID4gKyAgICBpZiAoVXBkYXRpbmdWYXJpYWJs ZSAhPSBOVUxMKSB7DQo+ID4gICAgID4gKyAgICAgIFVwZGF0aW5nUHRyVHJhY2stPkN1cnJQdHIg ICAgICAgICAgICAgICAgPSAoVkFSSUFCTEVfSEVBREVSDQo+ID4gICAgID4gKikoKFVJTlROKVVw ZGF0aW5nUHRyVHJhY2stPlN0YXJ0UHRyICsgKChVSU5UTilDdXJyUHRyIC0NCj4gPiAgICAgPiAo VUlOVE4pR2V0U3RhcnRQb2ludGVyICgoVkFSSUFCTEVfU1RPUkVfSEVBREVSICopVmFsaWRCdWZm ZXIpKSk7DQo+ID4gICAgID4gKyAgICAgIFVwZGF0aW5nUHRyVHJhY2stPkluRGVsZXRlZFRyYW5z aXRpb25QdHIgPSBOVUxMOw0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICAgIEN1cnJQdHIgKz0gTmV3VmFyaWFibGVTaXplOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKyAgaWYgKElzVm9sYXRpbGUgfHwgbVZhcmlhYmxlTW9kdWxlR2xv YmFsLT5WYXJpYWJsZUdsb2JhbC5FbXVOdk1vZGUpIHsNCj4gPiAgICAgPiArICAgIC8vDQo+ID4g ICAgID4gKyAgICAvLyBJZiB2b2xhdGlsZS9lbXVsYXRlZCBub24tdm9sYXRpbGUgdmFyaWFibGUg c3RvcmUsIGp1c3QgY29weSB2YWxpZCBidWZmZXIuDQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAg ICA+ICsgICAgU2V0TWVtICgoVUlOVDggKikoVUlOVE4pVmFyaWFibGVCYXNlLCBWYXJpYWJsZVN0 b3JlSGVhZGVyLT5TaXplLA0KPiA+IDB4ZmYpOw0KPiA+ICAgICA+ICsgICAgQ29weU1lbSAoKFVJ TlQ4ICopKFVJTlROKVZhcmlhYmxlQmFzZSwgVmFsaWRCdWZmZXIsIChVSU5UTilDdXJyUHRyDQo+ IC0NCj4gPiAgICAgPiAoVUlOVE4pVmFsaWRCdWZmZXIpOw0KPiA+ICAgICA+ICsgICAgKkxhc3RW YXJpYWJsZU9mZnNldCA9IChVSU5UTilDdXJyUHRyIC0gKFVJTlROKVZhbGlkQnVmZmVyOw0KPiA+ ICAgICA+ICsgICAgaWYgKCFJc1ZvbGF0aWxlKSB7DQo+ID4gICAgID4gKyAgICAgIC8vDQo+ID4g ICAgID4gKyAgICAgIC8vIEVtdWxhdGVkIG5vbi12b2xhdGlsZSB2YXJpYWJsZSBtb2RlLg0KPiA+ ICAgICA+ICsgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICBtVmFyaWFibGVNb2R1bGVHbG9iYWwt Pkh3RXJyVmFyaWFibGVUb3RhbFNpemUgICAgICA9DQo+ID4gICAgID4gSHdFcnJWYXJpYWJsZVRv dGFsU2l6ZTsNCj4gPiAgICAgPiArICAgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5Db21tb25W YXJpYWJsZVRvdGFsU2l6ZSAgICAgPQ0KPiA+ICAgICA+IENvbW1vblZhcmlhYmxlVG90YWxTaXpl Ow0KPiA+ICAgICA+ICsgICAgICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPkNvbW1vblVzZXJWYXJp YWJsZVRvdGFsU2l6ZSA9DQo+ID4gICAgID4gQ29tbW9uVXNlclZhcmlhYmxlVG90YWxTaXplOw0K PiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgIFN0YXR1cyA9IEVG SV9TVUNDRVNTOw0KPiA+ICAgICA+ICsgIH0gZWxzZSB7DQo+ID4gICAgID4gKyAgICAvLw0KPiA+ ICAgICA+ICsgICAgLy8gSWYgbm9uLXZvbGF0aWxlIHZhcmlhYmxlIHN0b3JlLCBwZXJmb3JtIEZU VyBoZXJlLg0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIFN0YXR1cyA9IEZ0d1Zh cmlhYmxlU3BhY2UgKA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICBWYXJpYWJsZUJhc2UsDQo+ ID4gICAgID4gKyAgICAgICAgICAgICAgIChWQVJJQUJMRV9TVE9SRV9IRUFERVIgKilWYWxpZEJ1 ZmZlcg0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICApOw0KPiA+ICAgICA+ICsgICAgaWYgKCFF RklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiArICAgICAgKkxhc3RWYXJpYWJsZU9mZnNl dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAoVUlOVE4pQ3VyclB0ciAtDQo+ID4g KFVJTlROKVZhbGlkQnVmZmVyOw0KPiA+ICAgICA+ICsgICAgICBtVmFyaWFibGVNb2R1bGVHbG9i YWwtPkh3RXJyVmFyaWFibGVUb3RhbFNpemUgICAgICA9DQo+ID4gICAgID4gSHdFcnJWYXJpYWJs ZVRvdGFsU2l6ZTsNCj4gPiAgICAgPiArICAgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5Db21t b25WYXJpYWJsZVRvdGFsU2l6ZSAgICAgPQ0KPiA+ICAgICA+IENvbW1vblZhcmlhYmxlVG90YWxT aXplOw0KPiA+ICAgICA+ICsgICAgICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPkNvbW1vblVzZXJW YXJpYWJsZVRvdGFsU2l6ZSA9DQo+ID4gICAgID4gQ29tbW9uVXNlclZhcmlhYmxlVG90YWxTaXpl Ow0KPiA+ICAgICA+ICsgICAgfSBlbHNlIHsNCj4gPiAgICAgPiArICAgICAgbVZhcmlhYmxlTW9k dWxlR2xvYmFsLT5Id0VyclZhcmlhYmxlVG90YWxTaXplICAgICAgPSAwOw0KPiA+ICAgICA+ICsg ICAgICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPkNvbW1vblZhcmlhYmxlVG90YWxTaXplICAgICA9 IDA7DQo+ID4gICAgID4gKyAgICAgIG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+Q29tbW9uVXNlclZh cmlhYmxlVG90YWxTaXplID0gMDsNCj4gPiAgICAgPiArICAgICAgVmFyaWFibGUgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBHZXRTdGFydFBvaW50ZXINCj4gPiAg ICAgPiAoKFZBUklBQkxFX1NUT1JFX0hFQURFUiAqKShVSU5UTilWYXJpYWJsZUJhc2UpOw0KPiA+ ICAgICA+ICsgICAgICB3aGlsZSAoSXNWYWxpZFZhcmlhYmxlSGVhZGVyIChWYXJpYWJsZSwgR2V0 RW5kUG9pbnRlcg0KPiA+ICAgICA+ICgoVkFSSUFCTEVfU1RPUkVfSEVBREVSICopKFVJTlROKVZh cmlhYmxlQmFzZSksIEF1dGhGb3JtYXQpKSB7DQo+ID4gICAgID4gKyAgICAgICAgTmV4dFZhcmlh YmxlID0gR2V0TmV4dFZhcmlhYmxlUHRyIChWYXJpYWJsZSwgQXV0aEZvcm1hdCk7DQo+ID4gICAg ID4gKyAgICAgICAgVmFyaWFibGVTaXplID0gKFVJTlROKU5leHRWYXJpYWJsZSAtIChVSU5UTilW YXJpYWJsZTsNCj4gPiAgICAgPiArICAgICAgICBpZiAoKFZhcmlhYmxlLT5BdHRyaWJ1dGVzICYN Cj4gPiBFRklfVkFSSUFCTEVfSEFSRFdBUkVfRVJST1JfUkVDT1JEKQ0KPiA+ICAgICA+ID09IEVG SV9WQVJJQUJMRV9IQVJEV0FSRV9FUlJPUl9SRUNPUkQpIHsNCj4gPiAgICAgPiArICAgICAgICAg IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+SHdFcnJWYXJpYWJsZVRvdGFsU2l6ZSArPSBWYXJpYWJs ZVNpemU7DQo+ID4gICAgID4gKyAgICAgICAgfSBlbHNlIGlmICgoVmFyaWFibGUtPkF0dHJpYnV0 ZXMgJg0KPiA+ICAgICA+IEVGSV9WQVJJQUJMRV9IQVJEV0FSRV9FUlJPUl9SRUNPUkQpICE9DQo+ ID4gICAgID4gRUZJX1ZBUklBQkxFX0hBUkRXQVJFX0VSUk9SX1JFQ09SRCkgew0KPiA+ICAgICA+ ICsgICAgICAgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5Db21tb25WYXJpYWJsZVRvdGFsU2l6 ZSArPQ0KPiBWYXJpYWJsZVNpemU7DQo+ID4gICAgID4gKyAgICAgICAgICBpZiAoSXNVc2VyVmFy aWFibGUgKFZhcmlhYmxlKSkgew0KPiA+ICAgICA+ICsgICAgICAgICAgICBtVmFyaWFibGVNb2R1 bGVHbG9iYWwtPkNvbW1vblVzZXJWYXJpYWJsZVRvdGFsU2l6ZSArPQ0KPiA+ICAgICA+IFZhcmlh YmxlU2l6ZTsNCj4gPiAgICAgPiArICAgICAgICAgIH0NCj4gPiAgICAgPiArICAgICAgICB9DQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgICAgIFZhcmlhYmxlID0gTmV4dFZhcmlhYmxlOw0K PiA+ICAgICA+ICsgICAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgICAqTGFzdFZh cmlhYmxlT2Zmc2V0ID0gKFVJTlROKVZhcmlhYmxlIC0gKFVJTlROKVZhcmlhYmxlQmFzZTsNCj4g PiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICtE b25lOg0KPiA+ICAgICA+ICsgIERvbmVTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gPiAgICAgPiAr ICBpZiAoSXNWb2xhdGlsZSB8fCBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFs LkVtdU52TW9kZSkgew0KPiA+ICAgICA+ICsgICAgRG9uZVN0YXR1cyA9IFN5bmNocm9uaXplUnVu dGltZVZhcmlhYmxlQ2FjaGUgKA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgJm1WYXJp YWJsZU1vZHVsZUdsb2JhbC0NCj4gPiAgICAgPiA+VmFyaWFibGVHbG9iYWwuVmFyaWFibGVSdW50 aW1lQ2FjaGVDb250ZXh0LlZhcmlhYmxlUnVudGltZVZvbGF0aWxlQ2ENCj4gYw0KPiA+IGhlLA0K PiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgMCwNCj4gPiAgICAgPiArICAgICAgICAgICAg ICAgICAgIFZhcmlhYmxlU3RvcmVIZWFkZXItPlNpemUNCj4gPiAgICAgPiArICAgICAgICAgICAg ICAgICAgICk7DQo+ID4gICAgID4gKyAgICBBU1NFUlRfRUZJX0VSUk9SIChEb25lU3RhdHVzKTsN Cj4gPiAgICAgPiArICAgIEZyZWVQb29sIChWYWxpZEJ1ZmZlcik7DQo+ID4gICAgID4gKyAgfSBl bHNlIHsNCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICAvLyBGb3IgTlYgdmFyaWFi bGUgcmVjbGFpbSwgd2UgdXNlIG1OdlZhcmlhYmxlQ2FjaGUgYXMgdGhlIGJ1ZmZlciwgc28NCj4g PiBjb3B5DQo+ID4gICAgID4gdGhlIGRhdGEgYmFjay4NCj4gPiAgICAgPiArICAgIC8vDQo+ID4g ICAgID4gKyAgICBDb3B5TWVtIChtTnZWYXJpYWJsZUNhY2hlLCAoVUlOVDggKikoVUlOVE4pVmFy aWFibGVCYXNlLA0KPiA+ICAgICA+IFZhcmlhYmxlU3RvcmVIZWFkZXItPlNpemUpOw0KPiA+ICAg ICA+ICsgICAgRG9uZVN0YXR1cyA9IFN5bmNocm9uaXplUnVudGltZVZhcmlhYmxlQ2FjaGUgKA0K PiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgJm1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCj4g PiAgICAgPiA+VmFyaWFibGVHbG9iYWwuVmFyaWFibGVSdW50aW1lQ2FjaGVDb250ZXh0LlZhcmlh YmxlUnVudGltZU52Q2FjaGUsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAwLA0KPiA+ ICAgICA+ICsgICAgICAgICAgICAgICAgICAgVmFyaWFibGVTdG9yZUhlYWRlci0+U2l6ZQ0KPiA+ ICAgICA+ICsgICAgICAgICAgICAgICAgICAgKTsNCj4gPiAgICAgPiArICAgIEFTU0VSVF9FRklf RVJST1IgKERvbmVTdGF0dXMpOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykgJiYgRUZJX0VSUk9SIChEb25lU3RhdHVzKSkg ew0KPiA+ICAgICA+ICsgICAgU3RhdHVzID0gRG9uZVN0YXR1czsNCj4gPiAgICAgPiArICB9DQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gICAgID4gK30NCj4g PiAgICAgPiBkaWZmIC0tZ2l0DQo+ID4gICAgID4NCj4gPg0KPiBhL01kZU1vZHVsZVBrZy9Vbml2 ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvUnVudGltZUR4ZVVuaXRUDQo+ID4g ICAgID4gZXN0L1ZhcmlhYmxlTG9ja1JlcXVlc3RUb0xvY2tVbml0VGVzdC5jDQo+ID4gICAgID4N Cj4gPg0KPiBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRp bWVEeGUvUnVudGltZUR4ZVVuaXRUDQo+ID4gICAgID4gZXN0L1ZhcmlhYmxlTG9ja1JlcXVlc3RU b0xvY2tVbml0VGVzdC5jDQo+ID4gICAgID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiAgICAg PiBpbmRleCAwMDAwMDAwMDAwMDAuLmIyYmNiOTc5MzJiYQ0KPiA+ICAgICA+IC0tLSAvZGV2L251 bGwNCj4gPiAgICAgPiArKysNCj4gPiAgICAgPg0KPiA+DQo+IGIvTWRlTW9kdWxlUGtnL1VuaXZl cnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9SdW50aW1lRHhlVW5pdFQNCj4gPiAg ICAgPiBlc3QvVmFyaWFibGVMb2NrUmVxdWVzdFRvTG9ja1VuaXRUZXN0LmMNCj4gPiAgICAgPiBA QCAtMCwwICsxLDYwNyBAQA0KPiA+ICAgICA+ICsvKiogQGZpbGUNCj4gPiAgICAgPiArICBUaGlz IGlzIGEgaG9zdC1iYXNlZCB1bml0IHRlc3QgZm9yIHRoZSBWYXJpYWJsZUxvY2tSZXF1ZXN0VG9M b2NrIHNoaW0uDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIENvcHlyaWdodCAoYykgTWljcm9z b2Z0IENvcnBvcmF0aW9uLg0KPiA+ICAgICA+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBC U0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyNpbmNsdWRlIDxzdGRpby5oPg0KPiA+ICAgICA+ICsjaW5jbHVkZSA8 c3RyaW5nLmg+DQo+ID4gICAgID4gKyNpbmNsdWRlIDxzdGRhcmcuaD4NCj4gPiAgICAgPiArI2lu Y2x1ZGUgPHN0ZGRlZi5oPg0KPiA+ICAgICA+ICsjaW5jbHVkZSA8c2V0am1wLmg+DQo+ID4gICAg ID4gKyNpbmNsdWRlIDxjbW9ja2EuaD4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyNpbmNsdWRl IDxVZWZpLmg+DQo+ID4gICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+ID4g ICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4NCj4gPiAgICAgPiArI2lu Y2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KPiA+ICAgICA+ICsjaW5jbHVk ZSA8TGlicmFyeS9Vbml0VGVzdExpYi5oPg0KPiA+ICAgICA+ICsjaW5jbHVkZSA8TGlicmFyeS9W YXJpYWJsZVBvbGljeUxpYi5oPg0KPiA+ICAgICA+ICsjaW5jbHVkZSA8TGlicmFyeS9WYXJpYWJs ZVBvbGljeUhlbHBlckxpYi5oPg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArI2luY2x1ZGUgPFBy b3RvY29sL1ZhcmlhYmxlTG9jay5oPg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArI2RlZmluZSBV TklUX1RFU1RfTkFNRSAgICAgIlZhclBvbC9WYXJMb2NrIFNoaW0gVW5pdCBUZXN0Ig0KPiA+ICAg ICA+ICsjZGVmaW5lIFVOSVRfVEVTVF9WRVJTSU9OICAiMS4wIg0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArLy8vID09PSBDT0RFIFVOREVSIFRFU1QNCj4gPiAgICAgPg0KPiA+DQo+ID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 DQo+ID4gICAgID4gPT09PT09PT09PQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArRUZJX1NUQVRV Uw0KPiA+ICAgICA+ICtFRklBUEkNCj4gPiAgICAgPiArVmFyaWFibGVMb2NrUmVxdWVzdFRvTG9j ayAoDQo+ID4gICAgID4gKyAgSU4gQ09OU1QgRURLSUlfVkFSSUFCTEVfTE9DS19QUk9UT0NPTCAg KlRoaXMsDQo+ID4gICAgID4gKyAgSU4gICAgICAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAg ICAgKlZhcmlhYmxlTmFtZSwNCj4gPiAgICAgPiArICBJTiAgICAgICBFRklfR1VJRCAgICAgICAg ICAgICAgICAgICAgICAqVmVuZG9yR3VpZA0KPiA+ICAgICA+ICsgICk7DQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsvLy8gPT09IFRFU1QgREFUQQ0KPiA+ICAgICA+DQo+ID4NCj4gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N Cj4gPiAgICAgPiA9PT09PT09PT09PT09PT09PQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLy8N Cj4gPiAgICAgPiArLy8gVGVzdCBHVUlEIDEge0Y5NTVCQTJELTRBMkMtNDgwQy1CRkQxLTNDQzUy MjYxMDU5Mn0NCj4gPiAgICAgPiArLy8NCj4gPiAgICAgPiArRUZJX0dVSUQgIG1UZXN0R3VpZDEg PSB7DQo+ID4gICAgID4gKyAgMHhmOTU1YmEyZCwgMHg0YTJjLCAweDQ4MGMsIHsgMHhiZiwgMHhk MSwgMHgzYywgMHhjNSwgMHgyMiwgMHg2MSwgMHg1LA0KPiA+IDB4OTIgfQ0KPiA+ICAgICA+ICt9 Ow0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLy8NCj4gPiAgICAgPiArLy8gVGVzdCBHVUlEIDIg ezJERUE3OTlFLTVFNzMtNDNCOS04NzBFLUM5NDVDRTgyQUYzQX0NCj4gPiAgICAgPiArLy8NCj4g PiAgICAgPiArRUZJX0dVSUQgIG1UZXN0R3VpZDIgPSB7DQo+ID4gICAgID4gKyAgMHgyZGVhNzk5 ZSwgMHg1ZTczLCAweDQzYjksIHsgMHg4NywgMHhlLCAweGM5LCAweDQ1LCAweGNlLCAweDgyLCAw eGFmLA0KPiA+IDB4M2EgfQ0KPiA+ICAgICA+ICt9Ow0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr Ly8NCj4gPiAgICAgPiArLy8gVGVzdCBHVUlEIDMgezY5OEEyQkZELUE2MTYtNDgyRC1CODhDLTcx MDBCRDY2ODJBOX0NCj4gPiAgICAgPiArLy8NCj4gPiAgICAgPiArRUZJX0dVSUQgIG1UZXN0R3Vp ZDMgPSB7DQo+ID4gICAgID4gKyAgMHg2OThhMmJmZCwgMHhhNjE2LCAweDQ4MmQsIHsgMHhiOCwg MHg4YywgMHg3MSwgMHgwLCAweGJkLCAweDY2LCAweDgyLA0KPiA+IDB4YTkgfQ0KPiA+ICAgICA+ ICt9Ow0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArI2RlZmluZSBURVNUX1ZBUl8xX05BTUUgIEwi VGVzdFZhcjEiDQo+ID4gICAgID4gKyNkZWZpbmUgVEVTVF9WQVJfMl9OQU1FICBMIlRlc3RWYXIy Ig0KPiA+ICAgICA+ICsjZGVmaW5lIFRFU1RfVkFSXzNfTkFNRSAgTCJUZXN0VmFyMyINCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKyNkZWZpbmUgVEVTVF9QT0xJQ1lfQVRUUklCVVRFU19OVUxMICAw DQo+ID4gICAgID4gKyNkZWZpbmUgVEVTVF9QT0xJQ1lfTUlOX1NJWkVfTlVMTCAgICAwDQo+ID4g ICAgID4gKyNkZWZpbmUgVEVTVF9QT0xJQ1lfTUFYX1NJWkVfTlVMTCAgICBNQVhfVUlOVDMyDQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsjZGVmaW5lIFRFU1RfUE9MSUNZX01JTl9TSVpFXzEwICAg MTANCj4gPiAgICAgPiArI2RlZmluZSBURVNUX1BPTElDWV9NQVhfU0laRV8yMDAgIDIwMA0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArLy8vID09PSBIRUxQRVIgRlVOQ1RJT05TDQo+ID4gICAgID4N Cj4gPg0KPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQ0KPiA+ICAgICA+ID09PT09PT09PT0NCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIE1vY2tlZCB2ZXJzaW9uIG9mIEdldFZhcmlhYmxlLCBm b3IgdGVzdGluZy4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtICBWYXJpYWJsZU5h bWUNCj4gPiAgICAgPiArICBAcGFyYW0gIFZlbmRvckd1aWQNCj4gPiAgICAgPiArICBAcGFyYW0g IEF0dHJpYnV0ZXMNCj4gPiAgICAgPiArICBAcGFyYW0gIERhdGFTaXplDQo+ID4gICAgID4gKyAg QHBhcmFtICBEYXRhDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtFRklfU1RBVFVTDQo+ID4g ICAgID4gK0VGSUFQSQ0KPiA+ICAgICA+ICtTdHViR2V0VmFyaWFibGVOdWxsICgNCj4gPiAgICAg PiArICBJTiAgICAgQ0hBUjE2ICAgICpWYXJpYWJsZU5hbWUsDQo+ID4gICAgID4gKyAgSU4gICAg IEVGSV9HVUlEICAqVmVuZG9yR3VpZCwNCj4gPiAgICAgPiArICBPVVQgICAgVUlOVDMyICAgICpB dHRyaWJ1dGVzICAgT1BUSU9OQUwsDQo+ID4gICAgID4gKyAgSU4gT1VUIFVJTlROICAgICAqRGF0 YVNpemUsDQo+ID4gICAgID4gKyAgT1VUICAgIFZPSUQgICAgICAqRGF0YSAgICAgICAgIE9QVElP TkFMDQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgVUlOVDMyICAg ICAgTW9ja2VkQXR0cjsNCj4gPiAgICAgPiArICBVSU5UTiAgICAgICBNb2NrZWREYXRhU2l6ZTsN Cj4gPiAgICAgPiArICBWT0lEICAgICAgICAqTW9ja2VkRGF0YTsNCj4gPiAgICAgPiArICBFRklf U1RBVFVTICBNb2NrZWRSZXR1cm47DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIGNoZWNrX2V4 cGVjdGVkX3B0ciAoVmFyaWFibGVOYW1lKTsNCj4gPiAgICAgPiArICBjaGVja19leHBlY3RlZF9w dHIgKFZlbmRvckd1aWQpOw0KPiA+ICAgICA+ICsgIGNoZWNrX2V4cGVjdGVkX3B0ciAoRGF0YVNp emUpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBNb2NrZWRBdHRyICAgICA9IChVSU5UMzIp bW9jayAoKTsNCj4gPiAgICAgPiArICBNb2NrZWREYXRhU2l6ZSA9IChVSU5UTiltb2NrICgpOw0K PiA+ICAgICA+ICsgIE1vY2tlZERhdGEgICAgID0gKFZPSUQgKikoVUlOVE4pbW9jayAoKTsNCj4g PiAgICAgPiArICBNb2NrZWRSZXR1cm4gICA9IChFRklfU1RBVFVTKW1vY2sgKCk7DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgIGlmIChBdHRyaWJ1dGVzICE9IE5VTEwpIHsNCj4gPiAgICAgPiAr ICAgICpBdHRyaWJ1dGVzID0gTW9ja2VkQXR0cjsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsgIGlmICgoRGF0YSAhPSBOVUxMKSAmJiAhRUZJX0VSUk9SIChNb2NrZWRS ZXR1cm4pKSB7DQo+ID4gICAgID4gKyAgICBDb3B5TWVtIChEYXRhLCBNb2NrZWREYXRhLCBNb2Nr ZWREYXRhU2l6ZSk7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAq RGF0YVNpemUgPSBNb2NrZWREYXRhU2l6ZTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgcmV0 dXJuIE1vY2tlZFJldHVybjsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr Ly8NCj4gPiAgICAgPiArLy8gQW55dGhpbmcgeW91IHRoaW5rIG1pZ2h0IGJlIGhlbHBmdWwgdGhh dCBpc24ndCBhIHRlc3QgaXRzZWxmLg0KPiA+ICAgICA+ICsvLw0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArLyoqDQo+ID4gICAgID4gKyAgVGhpcyBpcyBhIGNvbW1vbiBzZXR1cCBmdW5jdGlvbiB0 aGF0IHdpbGwgZW5zdXJlIHRoZSBsaWJyYXJ5IGlzIGFsd2F5cw0KPiA+ICAgICA+ICsgIGluaXRp YWxpemVkIHdpdGggdGhlIHN0dWJiZWQgR2V0VmFyaWFibGUuDQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsgIE5vdCB1c2VkIGJ5IGFsbCB0ZXN0IGNhc2VzLCBidXQgYnkgbW9zdC4NCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAgVW5pdCB0ZXN0IGNhc2UgY29u dGV4dA0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArU1RBVElDDQo+ID4gICAgID4gK1VOSVRf VEVTVF9TVEFUVVMNCj4gPiAgICAgPiArRUZJQVBJDQo+ID4gICAgID4gK0xpYkluaXRNb2NrZWQg KA0KPiA+ICAgICA+ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0DQo+ID4gICAgID4g KyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgcmV0dXJuIEVGSV9FUlJPUiAoSW5pdFZh cmlhYmxlUG9saWN5TGliIChTdHViR2V0VmFyaWFibGVOdWxsKSkgPw0KPiA+ICAgICA+IFVOSVRf VEVTVF9FUlJPUl9QUkVSRVFVSVNJVEVfTk9UX01FVCA6IFVOSVRfVEVTVF9QQVNTRUQ7DQo+ID4g ICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIENvbW1v biBjbGVhbnVwIGZ1bmN0aW9uIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBsaWJyYXJ5IGlzIGFsd2F5 cyBkZS0NCj4gPiBpbml0aWFsaXplZA0KPiA+ICAgICA+ICsgIHByaW9yIHRvIHRoZSBuZXh0IHRl c3QgY2FzZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAg VW5pdCB0ZXN0IGNhc2UgY29udGV4dA0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArU1RBVElD DQo+ID4gICAgID4gK1ZPSUQNCj4gPiAgICAgPiArRUZJQVBJDQo+ID4gICAgID4gK0xpYkNsZWFu dXAgKA0KPiA+ICAgICA+ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0DQo+ID4gICAg ID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgRGVpbml0VmFyaWFibGVQb2xpY3lM aWIgKCk7DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8vLyA9PT0gVEVT VCBDQVNFUw0KPiA+ICAgICA+DQo+ID4NCj4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4gPiAgICAgPiA9PT09PT09PT09 PT09PT09DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvLy8gPT09PT0gU0hJTSBTVUlURQ0KPiA+ ICAgICA+ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBUZXN0 IENhc2UgdGhhdCBsb2NrcyBhIHNpbmdsZSB2YXJpYWJsZSB1c2luZyB0aGUgVmFyaWFibGUgTG9j ayBQcm90b2NvbC4NCj4gPiAgICAgPiArICBUaGUgY2FsbCBpcyBleHBlY3RlZCB0byBzdWNjZWVk Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1baW5dICBDb250ZXh0ICBVbml0IHRl c3QgY2FzZSBjb250ZXh0DQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtVTklUX1RFU1RfU1RB VFVTDQo+ID4gICAgID4gK0VGSUFQSQ0KPiA+ICAgICA+ICtMb2NraW5nV2l0aG91dEFueVBvbGlj aWVzU2hvdWxkU3VjY2VlZCAoDQo+ID4gICAgID4gKyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENv bnRleHQNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBFRklfU1RB VFVTICBTdGF0dXM7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFN0YXR1cyA9IFZhcmlhYmxl TG9ja1JlcXVlc3RUb0xvY2sgKE5VTEwsIFRFU1RfVkFSXzFfTkFNRSwNCj4gPiAgICAgPiAmbVRl c3RHdWlkMSk7DQo+ID4gICAgID4gKyAgVVRfQVNTRVJUX05PVF9FRklfRVJST1IgKFN0YXR1cyk7 DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiA+ ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBUZXN0 IENhc2UgdGhhdCBsb2NrcyB0aGUgc2FtZSB2YXJpYWJsZSB0d2ljZSB1c2luZyB0aGUgVmFyaWFi bGUgTG9jaw0KPiA+IFByb3RvY29sLg0KPiA+ICAgICA+ICsgIEJvdGggY2FsbHMgYXJlIGV4cGVj dGVkIHRvIHN1Y2NlZWQuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gIENv bnRleHQgIFVuaXQgdGVzdCBjYXNlIGNvbnRleHQNCj4gPiAgICAgPiArICAqKi8NCj4gPiAgICAg PiArVU5JVF9URVNUX1NUQVRVUw0KPiA+ICAgICA+ICtFRklBUEkNCj4gPiAgICAgPiArTG9ja2lu Z1R3aWNlU2hvdWxkU3VjY2VlZCAoDQo+ID4gICAgID4gKyAgSU4gVU5JVF9URVNUX0NPTlRFWFQg IENvbnRleHQNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBFRklf U1RBVFVTICBTdGF0dXM7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFN0YXR1cyA9IFZhcmlh YmxlTG9ja1JlcXVlc3RUb0xvY2sgKE5VTEwsIFRFU1RfVkFSXzFfTkFNRSwNCj4gPiAgICAgPiAm bVRlc3RHdWlkMSk7DQo+ID4gICAgID4gKyAgVVRfQVNTRVJUX05PVF9FRklfRVJST1IgKFN0YXR1 cyk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFN0YXR1cyA9IFZhcmlhYmxlTG9ja1JlcXVl c3RUb0xvY2sgKE5VTEwsIFRFU1RfVkFSXzFfTkFNRSwNCj4gPiAgICAgPiAmbVRlc3RHdWlkMSk7 DQo+ID4gICAgID4gKyAgVVRfQVNTRVJUX05PVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiA+ICAgICA+ICt9 DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBUZXN0IENhc2UgdGhh dCBsb2NrcyBhIHZhcmlhYmxlIHVzaW5nIHRoZSBWYXJpYWJsZSBQb2xpY3kgUHJvdG9jb2wgdGhl bg0KPiA+IGxvY2tzDQo+ID4gICAgID4gKyAgdGhlIHNhbWUgdmFyaWFibGUgdXNpbmcgdGhlIFZh cmlhYmxlIExvY2sgUHJvdG9jb2wuDQo+ID4gICAgID4gKyAgQm90aCBjYWxscyBhcmUgZXhwZWN0 ZWQgdG8gc3VjY2VlZC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgQ29u dGV4dCAgVW5pdCB0ZXN0IGNhc2UgY29udGV4dA0KPiA+ICAgICA+ICsgICoqLw0KPiA+ICAgICA+ ICtVTklUX1RFU1RfU1RBVFVTDQo+ID4gICAgID4gK0VGSUFQSQ0KPiA+ICAgICA+ICtMb2NraW5n QUxvY2tlZFZhcmlhYmxlU2hvdWxkU3VjY2VlZCAoDQo+ID4gICAgID4gKyAgSU4gVU5JVF9URVNU X0NPTlRFWFQgIENvbnRleHQNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAg PiArICBFRklfU1RBVFVTICAgICAgICAgICAgIFN0YXR1czsNCj4gPiAgICAgPiArICBWQVJJQUJM RV9QT0xJQ1lfRU5UUlkgICpOZXdFbnRyeTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8N Cj4gPiAgICAgPiArICAvLyBDcmVhdGUgYSB2YXJpYWJsZSBwb2xpY3kgdGhhdCBsb2NrcyB0aGUg dmFyaWFibGUuDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBTdGF0dXMgPSBDcmVhdGVC YXNpY1ZhcmlhYmxlUG9saWN5ICgNCj4gPiAgICAgPiArICAgICAgICAgICAgICZtVGVzdEd1aWQx LA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgVEVTVF9WQVJfMV9OQU1FLA0KPiA+ICAgICA+ICsg ICAgICAgICAgICAgVEVTVF9QT0xJQ1lfTUlOX1NJWkVfTlVMTCwNCj4gPiAgICAgPiArICAgICAg ICAgICAgIFRFU1RfUE9MSUNZX01BWF9TSVpFXzIwMCwNCj4gPiAgICAgPiArICAgICAgICAgICAg IFRFU1RfUE9MSUNZX0FUVFJJQlVURVNfTlVMTCwNCj4gPiAgICAgPiArICAgICAgICAgICAgIFRF U1RfUE9MSUNZX0FUVFJJQlVURVNfTlVMTCwNCj4gPiAgICAgPiArICAgICAgICAgICAgIFZBUklB QkxFX1BPTElDWV9UWVBFX0xPQ0tfTk9XLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgJk5ld0Vu dHJ5DQo+ID4gICAgID4gKyAgICAgICAgICAgICApOw0KPiA+ICAgICA+ICsgIFVUX0FTU0VSVF9O T1RfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ ICAgICA+ICsgIC8vIFJlZ2lzdGVyIHRoZSBuZXcgcG9saWN5Lg0KPiA+ICAgICA+ICsgIC8vDQo+ ID4gICAgID4gKyAgU3RhdHVzID0gUmVnaXN0ZXJWYXJpYWJsZVBvbGljeSAoTmV3RW50cnkpOw0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBTdGF0dXMgPSBWYXJpYWJsZUxvY2tSZXF1ZXN0VG9M b2NrIChOVUxMLCBURVNUX1ZBUl8xX05BTUUsDQo+ID4gICAgID4gJm1UZXN0R3VpZDEpOw0KPiA+ ICAgICA+ICsgIFVUX0FTU0VSVF9OT1RfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICBGcmVlUG9vbCAoTmV3RW50cnkpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgVGVzdCBDYXNlIHRoYXQgbG9ja3MgYSB2YXJp YWJsZSB1c2luZyB0aGUgVmFyaWFibGUgUG9saWN5IFByb3RvY29sIHdpdGggYQ0KPiA+ICAgICA+ ICsgIHBvbGljeSBvdGhlciB0aGFuIExPQ0tfTk9XIHRoZW4gYXR0ZW1wdHMgdG8gbG9jayB0aGUg c2FtZSB2YXJpYWJsZQ0KPiA+IHVzaW5nDQo+ID4gICAgID4gdGhlDQo+ID4gICAgID4gKyAgVmFy aWFibGUgTG9jayBQcm90b2NvbC4gIFRoZSBjYWxsIHRvIFZhcmlhYmxlIFBvbGljeSBpcyBleHBl Y3RlZCB0bw0KPiBzdWNjZWVkDQo+ID4gICAgID4gKyAgYW5kIHRoZSBjYWxsIHRvIFZhcmlhYmxl IExvY2sgaXMgZXhwZWN0ZWQgdG8gZmFpbC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBh cmFtW2luXSAgQ29udGV4dCAgVW5pdCB0ZXN0IGNhc2UgY29udGV4dA0KPiA+ICAgICA+ICsgICoq Lw0KPiA+ICAgICA+ICtVTklUX1RFU1RfU1RBVFVTDQo+ID4gICAgID4gK0VGSUFQSQ0KPiA+ICAg ICA+ICtMb2NraW5nQW5VbmxvY2tlZFZhcmlhYmxlU2hvdWxkRmFpbCAoDQo+ID4gICAgID4gKyAg SU4gVU5JVF9URVNUX0NPTlRFWFQgIENvbnRleHQNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4g K3sNCj4gPiAgICAgPiArICBFRklfU1RBVFVTICAgICAgICAgICAgIFN0YXR1czsNCj4gPiAgICAg PiArICBWQVJJQUJMRV9QT0xJQ1lfRU5UUlkgICpOZXdFbnRyeTsNCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyAgLy8gQ3JlYXRlIGEgdmFyaWFibGUgcG9saWN5IHRoYXQgbG9ja3MgdGhlIHZhcmlh YmxlLg0KPiA+ICAgICA+ICsgIFN0YXR1cyA9IENyZWF0ZVZhclN0YXRlVmFyaWFibGVQb2xpY3kg KA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgJm1UZXN0R3VpZDEsDQo+ID4gICAgID4gKyAgICAg ICAgICAgICBURVNUX1ZBUl8xX05BTUUsDQo+ID4gICAgID4gKyAgICAgICAgICAgICBURVNUX1BP TElDWV9NSU5fU0laRV9OVUxMLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgVEVTVF9QT0xJQ1lf TUFYX1NJWkVfMjAwLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgVEVTVF9QT0xJQ1lfQVRUUklC VVRFU19OVUxMLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgVEVTVF9QT0xJQ1lfQVRUUklCVVRF U19OVUxMLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgJm1UZXN0R3VpZDIsDQo+ID4gICAgID4g KyAgICAgICAgICAgICAxLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgVEVTVF9WQVJfMl9OQU1F LA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgJk5ld0VudHJ5DQo+ID4gICAgID4gKyAgICAgICAg ICAgICApOw0KPiA+ICAgICA+ICsgIFVUX0FTU0VSVF9OT1RfRUZJX0VSUk9SIChTdGF0dXMpOw0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLyBSZWdpc3RlciB0aGUgbmV3IHBvbGljeS4NCj4g PiAgICAgPiArICBTdGF0dXMgPSBSZWdpc3RlclZhcmlhYmxlUG9saWN5IChOZXdFbnRyeSk7DQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vIENvbmZpZ3VyZSB0aGUgc3R1YiB0byBub3QgY2Fy ZSBhYm91dCBwYXJhbWV0ZXJzLiBXZSdyZSB0ZXN0aW5nIGVycm9ycy4NCj4gPiAgICAgPiArICBl eHBlY3RfYW55X2Fsd2F5cyAoU3R1YkdldFZhcmlhYmxlTnVsbCwgVmFyaWFibGVOYW1lKTsNCj4g PiAgICAgPiArICBleHBlY3RfYW55X2Fsd2F5cyAoU3R1YkdldFZhcmlhYmxlTnVsbCwgVmVuZG9y R3VpZCk7DQo+ID4gICAgID4gKyAgZXhwZWN0X2FueV9hbHdheXMgKFN0dWJHZXRWYXJpYWJsZU51 bGwsIERhdGFTaXplKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8gV2l0aCBhIHBvbGlj eSwgbWFrZSBzdXJlIHRoYXQgd3JpdGVzIHN0aWxsIHdvcmssIHNpbmNlIHRoZSB2YXJpYWJsZQ0K PiA+IGRvZXNuJ3QNCj4gPiAgICAgPiBleGlzdC4NCj4gPiAgICAgPiArICB3aWxsX3JldHVybiAo U3R1YkdldFZhcmlhYmxlTnVsbCwgVEVTVF9QT0xJQ1lfQVRUUklCVVRFU19OVUxMKTsNCj4gLy8N Cj4gPiAgICAgPiBBdHRyaWJ1dGVzDQo+ID4gICAgID4gKyAgd2lsbF9yZXR1cm4gKFN0dWJHZXRW YXJpYWJsZU51bGwsIDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaXplDQo+ ID4gICAgID4gKyAgd2lsbF9yZXR1cm4gKFN0dWJHZXRWYXJpYWJsZU51bGwsIChVSU5UTilOVUxM KTsgICAgICAgICAgICAgICAgICAgICAvLyBEYXRhUHRyDQo+ID4gICAgID4gKyAgd2lsbF9yZXR1 cm4gKFN0dWJHZXRWYXJpYWJsZU51bGwsIEVGSV9OT1RfRk9VTkQpOyAgICAgICAgICAgICAgICAg ICAvLyBTdGF0dXMNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgU3RhdHVzID0gVmFyaWFibGVM b2NrUmVxdWVzdFRvTG9jayAoTlVMTCwgVEVTVF9WQVJfMV9OQU1FLA0KPiA+ICAgICA+ICZtVGVz dEd1aWQxKTsNCj4gPiAgICAgPiArICBVVF9BU1NFUlRfVFJVRSAoRUZJX0VSUk9SIChTdGF0dXMp KTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgRnJlZVBvb2wgKE5ld0VudHJ5KTsNCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNTRUQ7DQo+ID4gICAgID4g K30NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIFRlc3QgQ2FzZSB0 aGF0IGxvY2tzIGEgdmFyaWFibGUgdXNpbmcgdGhlIFZhcmlhYmxlIFBvbGljeSBQcm90b2NvbCB3 aXRoIGENCj4gPiAgICAgPiArICBwb2xpY3kgb3RoZXIgdGhhbiBMT0NLX05PVywgYnV0IGlzIGN1 cnJlbnRseSBsb2NrZWQuICBUaGVuIGF0dGVtcHRzIHRvDQo+ID4gbG9jaw0KPiA+ICAgICA+ICsg IHRoZSBzYW1lIHZhcmlhYmxlIHVzaW5nIHRoZSBWYXJpYWJsZSBMb2NrIFByb3RvY29sLiAgVGhl IGNhbGwgdG8gVmFyaWFibGUNCj4gPiAgICAgPiArICBQb2xpY3kgaXMgZXhwZWN0ZWQgdG8gc3Vj Y2VlZCBhbmQgdGhlIGNhbGwgdG8gVmFyaWFibGUgTG9jayBhbHNvIGV4cGVjdGVkDQo+ID4gdG8N Cj4gPiAgICAgPiArICBzdWNjZWVkLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1b aW5dICBDb250ZXh0ICBVbml0IHRlc3QgY2FzZSBjb250ZXh0DQo+ID4gICAgID4gKyAgKiovDQo+ ID4gICAgID4gK1VOSVRfVEVTVF9TVEFUVVMNCj4gPiAgICAgPiArRUZJQVBJDQo+ID4gICAgID4g K0xvY2tpbmdBTG9ja2VkVmFyaWFibGVXaXRoTWF0Y2hpbmdEYXRhU2hvdWxkU3VjY2VlZCAoDQo+ ID4gICAgID4gKyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENvbnRleHQNCj4gPiAgICAgPiArICAp DQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBFRklfU1RBVFVTICAgICAgICAgICAgIFN0YXR1 czsNCj4gPiAgICAgPiArICBWQVJJQUJMRV9QT0xJQ1lfRU5UUlkgICpOZXdFbnRyeTsNCj4gPiAg ICAgPiArICBVSU5UOCAgICAgICAgICAgICAgICAgIERhdGE7DQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsgIC8vIENyZWF0ZSBhIHZhcmlhYmxlIHBvbGljeSB0aGF0IGxvY2tzIHRoZSB2YXJpYWJs ZS4NCj4gPiAgICAgPiArICBTdGF0dXMgPSBDcmVhdGVWYXJTdGF0ZVZhcmlhYmxlUG9saWN5ICgN Cj4gPiAgICAgPiArICAgICAgICAgICAgICZtVGVzdEd1aWQxLA0KPiA+ICAgICA+ICsgICAgICAg ICAgICAgVEVTVF9WQVJfMV9OQU1FLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgVEVTVF9QT0xJ Q1lfTUlOX1NJWkVfTlVMTCwNCj4gPiAgICAgPiArICAgICAgICAgICAgIFRFU1RfUE9MSUNZX01B WF9TSVpFXzIwMCwNCj4gPiAgICAgPiArICAgICAgICAgICAgIFRFU1RfUE9MSUNZX0FUVFJJQlVU RVNfTlVMTCwNCj4gPiAgICAgPiArICAgICAgICAgICAgIFRFU1RfUE9MSUNZX0FUVFJJQlVURVNf TlVMTCwNCj4gPiAgICAgPiArICAgICAgICAgICAgICZtVGVzdEd1aWQyLA0KPiA+ICAgICA+ICsg ICAgICAgICAgICAgMSwNCj4gPiAgICAgPiArICAgICAgICAgICAgIFRFU1RfVkFSXzJfTkFNRSwN Cj4gPiAgICAgPiArICAgICAgICAgICAgICZOZXdFbnRyeQ0KPiA+ICAgICA+ICsgICAgICAgICAg ICAgKTsNCj4gPiAgICAgPiArICBVVF9BU1NFUlRfTk9UX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8gUmVnaXN0ZXIgdGhlIG5ldyBwb2xpY3kuDQo+ID4g ICAgID4gKyAgU3RhdHVzID0gUmVnaXN0ZXJWYXJpYWJsZVBvbGljeSAoTmV3RW50cnkpOw0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICAvLyBDb25maWd1cmUgdGhlIHN0dWIgdG8gbm90IGNhcmUg YWJvdXQgcGFyYW1ldGVycy4gV2UncmUgdGVzdGluZyBlcnJvcnMuDQo+ID4gICAgID4gKyAgZXhw ZWN0X2FueV9hbHdheXMgKFN0dWJHZXRWYXJpYWJsZU51bGwsIFZhcmlhYmxlTmFtZSk7DQo+ID4g ICAgID4gKyAgZXhwZWN0X2FueV9hbHdheXMgKFN0dWJHZXRWYXJpYWJsZU51bGwsIFZlbmRvckd1 aWQpOw0KPiA+ICAgICA+ICsgIGV4cGVjdF9hbnlfYWx3YXlzIChTdHViR2V0VmFyaWFibGVOdWxs LCBEYXRhU2l6ZSk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vIFdpdGggYSBwb2xpY3ks IG1ha2Ugc3VyZSB0aGF0IHdyaXRlcyBzdGlsbCB3b3JrLCBzaW5jZSB0aGUgdmFyaWFibGUNCj4g PiBkb2Vzbid0DQo+ID4gICAgID4gZXhpc3QuDQo+ID4gICAgID4gKyAgRGF0YSA9IDE7DQo+ID4g ICAgID4gKyAgd2lsbF9yZXR1cm4gKFN0dWJHZXRWYXJpYWJsZU51bGwsIFRFU1RfUE9MSUNZX0FU VFJJQlVURVNfTlVMTCk7DQo+IC8vDQo+ID4gICAgID4gQXR0cmlidXRlcw0KPiA+ICAgICA+ICsg IHdpbGxfcmV0dXJuIChTdHViR2V0VmFyaWFibGVOdWxsLCBzaXplb2YgKERhdGEpKTsgICAgICAg ICAgICAgICAgICAgLy8gU2l6ZQ0KPiA+ICAgICA+ICsgIHdpbGxfcmV0dXJuIChTdHViR2V0VmFy aWFibGVOdWxsLCAoVUlOVE4pJkRhdGEpOyAgICAgICAgICAgICAgICAgICAgLy8gRGF0YVB0cg0K PiA+ICAgICA+ICsgIHdpbGxfcmV0dXJuIChTdHViR2V0VmFyaWFibGVOdWxsLCBFRklfU1VDQ0VT Uyk7ICAgICAgICAgICAgICAgICAgICAgLy8gU3RhdHVzDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsgIFN0YXR1cyA9IFZhcmlhYmxlTG9ja1JlcXVlc3RUb0xvY2sgKE5VTEwsIFRFU1RfVkFSXzFf TkFNRSwNCj4gPiAgICAgPiAmbVRlc3RHdWlkMSk7DQo+ID4gICAgID4gKyAgVVRfQVNTRVJUX1RS VUUgKCFFRklfRVJST1IgKFN0YXR1cykpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBGcmVl UG9vbCAoTmV3RW50cnkpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICByZXR1cm4gVU5JVF9U RVNUX1BBU1NFRDsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ ID4gICAgID4gKyAgVGVzdCBDYXNlIHRoYXQgbG9ja3MgYSB2YXJpYWJsZSB1c2luZyB0aGUgVmFy aWFibGUgUG9saWN5IFByb3RvY29sIHdpdGggYQ0KPiA+ICAgICA+ICsgIHBvbGljeSBvdGhlciB0 aGFuIExPQ0tfTk9XLCBidXQgdmFyaWFibGUgZGF0YSBkb2VzIG5vdCBtYXRjaC4gIFRoZW4NCj4g PiAgICAgPiBhdHRlbXB0cw0KPiA+ICAgICA+ICsgIHRvIGxvY2sgdGhlIHNhbWUgdmFyaWFibGUg dXNpbmcgdGhlIFZhcmlhYmxlIExvY2sgUHJvdG9jb2wuICBUaGUgY2FsbCB0bw0KPiA+ICAgICA+ ICsgIFZhcmlhYmxlIFBvbGljeSBpcyBleHBlY3RlZCB0byBzdWNjZWVkIGFuZCB0aGUgY2FsbCB0 byBWYXJpYWJsZSBMb2NrIGlzDQo+ID4gICAgID4gKyAgZXhwZWN0ZWQgdG8gZmFpbC4NCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAgVW5pdCB0ZXN0IGNhc2Ug Y29udGV4dA0KPiA+ICAgICA+ICsgICoqLw0KPiA+ICAgICA+ICtVTklUX1RFU1RfU1RBVFVTDQo+ ID4gICAgID4gK0VGSUFQSQ0KPiA+ICAgICA+ICtMb2NraW5nQUxvY2tlZFZhcmlhYmxlV2l0aE5v bk1hdGNoaW5nRGF0YVNob3VsZEZhaWwgKA0KPiA+ICAgICA+ICsgIElOIFVOSVRfVEVTVF9DT05U RVhUICBDb250ZXh0DQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAg RUZJX1NUQVRVUyAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gICAgID4gKyAgVkFSSUFCTEVfUE9M SUNZX0VOVFJZICAqTmV3RW50cnk7DQo+ID4gICAgID4gKyAgVUlOVDggICAgICAgICAgICAgICAg ICBEYXRhOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLyBDcmVhdGUgYSB2YXJpYWJsZSBw b2xpY3kgdGhhdCBsb2NrcyB0aGUgdmFyaWFibGUuDQo+ID4gICAgID4gKyAgU3RhdHVzID0gQ3Jl YXRlVmFyU3RhdGVWYXJpYWJsZVBvbGljeSAoDQo+ID4gICAgID4gKyAgICAgICAgICAgICAmbVRl c3RHdWlkMSwNCj4gPiAgICAgPiArICAgICAgICAgICAgIFRFU1RfVkFSXzFfTkFNRSwNCj4gPiAg ICAgPiArICAgICAgICAgICAgIFRFU1RfUE9MSUNZX01JTl9TSVpFX05VTEwsDQo+ID4gICAgID4g KyAgICAgICAgICAgICBURVNUX1BPTElDWV9NQVhfU0laRV8yMDAsDQo+ID4gICAgID4gKyAgICAg ICAgICAgICBURVNUX1BPTElDWV9BVFRSSUJVVEVTX05VTEwsDQo+ID4gICAgID4gKyAgICAgICAg ICAgICBURVNUX1BPTElDWV9BVFRSSUJVVEVTX05VTEwsDQo+ID4gICAgID4gKyAgICAgICAgICAg ICAmbVRlc3RHdWlkMiwNCj4gPiAgICAgPiArICAgICAgICAgICAgIDEsDQo+ID4gICAgID4gKyAg ICAgICAgICAgICBURVNUX1ZBUl8yX05BTUUsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAmTmV3 RW50cnkNCj4gPiAgICAgPiArICAgICAgICAgICAgICk7DQo+ID4gICAgID4gKyAgVVRfQVNTRVJU X05PVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vIFJl Z2lzdGVyIHRoZSBuZXcgcG9saWN5Lg0KPiA+ICAgICA+ICsgIFN0YXR1cyA9IFJlZ2lzdGVyVmFy aWFibGVQb2xpY3kgKE5ld0VudHJ5KTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8gQ29u ZmlndXJlIHRoZSBzdHViIHRvIG5vdCBjYXJlIGFib3V0IHBhcmFtZXRlcnMuIFdlJ3JlIHRlc3Rp bmcgZXJyb3JzLg0KPiA+ICAgICA+ICsgIGV4cGVjdF9hbnlfYWx3YXlzIChTdHViR2V0VmFyaWFi bGVOdWxsLCBWYXJpYWJsZU5hbWUpOw0KPiA+ICAgICA+ICsgIGV4cGVjdF9hbnlfYWx3YXlzIChT dHViR2V0VmFyaWFibGVOdWxsLCBWZW5kb3JHdWlkKTsNCj4gPiAgICAgPiArICBleHBlY3RfYW55 X2Fsd2F5cyAoU3R1YkdldFZhcmlhYmxlTnVsbCwgRGF0YVNpemUpOw0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICAvLyBXaXRoIGEgcG9saWN5LCBtYWtlIHN1cmUgdGhhdCB3cml0ZXMgc3RpbGwg d29yaywgc2luY2UgdGhlIHZhcmlhYmxlDQo+ID4gZG9lc24ndA0KPiA+ICAgICA+IGV4aXN0Lg0K PiA+ICAgICA+ICsgIERhdGEgPSAyOw0KPiA+ICAgICA+ICsgIHdpbGxfcmV0dXJuIChTdHViR2V0 VmFyaWFibGVOdWxsLCBURVNUX1BPTElDWV9BVFRSSUJVVEVTX05VTEwpOw0KPiAvLw0KPiA+ICAg ICA+IEF0dHJpYnV0ZXMNCj4gPiAgICAgPiArICB3aWxsX3JldHVybiAoU3R1YkdldFZhcmlhYmxl TnVsbCwgc2l6ZW9mIChEYXRhKSk7ICAgICAgICAgICAgICAgICAgIC8vIFNpemUNCj4gPiAgICAg PiArICB3aWxsX3JldHVybiAoU3R1YkdldFZhcmlhYmxlTnVsbCwgKFVJTlROKSZEYXRhKTsgICAg ICAgICAgICAgICAgICAgIC8vIERhdGFQdHINCj4gPiAgICAgPiArICB3aWxsX3JldHVybiAoU3R1 YkdldFZhcmlhYmxlTnVsbCwgRUZJX1NVQ0NFU1MpOyAgICAgICAgICAgICAgICAgICAgIC8vIFN0 YXR1cw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBTdGF0dXMgPSBWYXJpYWJsZUxvY2tSZXF1 ZXN0VG9Mb2NrIChOVUxMLCBURVNUX1ZBUl8xX05BTUUsDQo+ID4gICAgID4gJm1UZXN0R3VpZDEp Ow0KPiA+ICAgICA+ICsgIFVUX0FTU0VSVF9UUlVFIChFRklfRVJST1IgKFN0YXR1cykpOw0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICBGcmVlUG9vbCAoTmV3RW50cnkpOw0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gPiAgICAgPiArfQ0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgVGVzdCBDYXNlIHRoYXQgbG9j a3MgYSB2YXJpYWJsZSB1c2luZyBWYXJpYWJsZSBMb2NrIFByb3RvY29sIFBvbGljeQ0KPiA+IFBy b3RvY29sDQo+ID4gICAgID4gKyAgdGhlbiBhbmQgdGhlbiBhdHRlbXB0cyB0byBsb2NrIHRoZSBz YW1lIHZhcmlhYmxlIHVzaW5nIHRoZSBWYXJpYWJsZQ0KPiBQb2xpY3kNCj4gPiAgICAgPiArICBQ cm90b2NvbC4gIFRoZSBjYWxsIHRvIFZhcmlhYmxlIExvY2sgaXMgZXhwZWN0ZWQgdG8gc3VjY2Vl ZCBhbmQgdGhlIGNhbGwNCj4gdG8NCj4gPiAgICAgPiArICBWYXJpYWJsZSBQb2xpY3kgaXMgZXhw ZWN0ZWQgdG8gZmFpbC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgQ29u dGV4dCAgVW5pdCB0ZXN0IGNhc2UgY29udGV4dA0KPiA+ICAgICA+ICsgICoqLw0KPiA+ICAgICA+ ICtVTklUX1RFU1RfU1RBVFVTDQo+ID4gICAgID4gK0VGSUFQSQ0KPiA+ICAgICA+ICtTZXR0aW5n UG9saWN5Rm9yQUxvY2tlZFZhcmlhYmxlU2hvdWxkRmFpbCAoDQo+ID4gICAgID4gKyAgSU4gVU5J VF9URVNUX0NPTlRFWFQgIENvbnRleHQNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4g PiAgICAgPiArICBFRklfU1RBVFVTICAgICAgICAgICAgIFN0YXR1czsNCj4gPiAgICAgPiArICBW QVJJQUJMRV9QT0xJQ1lfRU5UUlkgICpOZXdFbnRyeTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgLy8gTG9jayB0aGUgdmFyaWFibGUuDQo+ID4gICAgID4gKyAgU3RhdHVzID0gVmFyaWFibGVM b2NrUmVxdWVzdFRvTG9jayAoTlVMTCwgVEVTVF9WQVJfMV9OQU1FLA0KPiA+ICAgICA+ICZtVGVz dEd1aWQxKTsNCj4gPiAgICAgPiArICBVVF9BU1NFUlRfTk9UX0VGSV9FUlJPUiAoU3RhdHVzKTsN Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8gQ3JlYXRlIGEgdmFyaWFibGUgcG9saWN5IHRo YXQgbG9ja3MgdGhlIHZhcmlhYmxlLg0KPiA+ICAgICA+ICsgIFN0YXR1cyA9IENyZWF0ZVZhclN0 YXRlVmFyaWFibGVQb2xpY3kgKA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgJm1UZXN0R3VpZDEs DQo+ID4gICAgID4gKyAgICAgICAgICAgICBURVNUX1ZBUl8xX05BTUUsDQo+ID4gICAgID4gKyAg ICAgICAgICAgICBURVNUX1BPTElDWV9NSU5fU0laRV9OVUxMLA0KPiA+ICAgICA+ICsgICAgICAg ICAgICAgVEVTVF9QT0xJQ1lfTUFYX1NJWkVfMjAwLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAg VEVTVF9QT0xJQ1lfQVRUUklCVVRFU19OVUxMLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgVEVT VF9QT0xJQ1lfQVRUUklCVVRFU19OVUxMLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgJm1UZXN0 R3VpZDIsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAxLA0KPiA+ICAgICA+ICsgICAgICAgICAg ICAgVEVTVF9WQVJfMl9OQU1FLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgJk5ld0VudHJ5DQo+ ID4gICAgID4gKyAgICAgICAgICAgICApOw0KPiA+ICAgICA+ICsgIFVUX0FTU0VSVF9OT1RfRUZJ X0VSUk9SIChTdGF0dXMpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLyBSZWdpc3RlciB0 aGUgbmV3IHBvbGljeS4NCj4gPiAgICAgPiArICBTdGF0dXMgPSBSZWdpc3RlclZhcmlhYmxlUG9s aWN5IChOZXdFbnRyeSk7DQo+ID4gICAgID4gKyAgVVRfQVNTRVJUX1RSVUUgKEVGSV9FUlJPUiAo U3RhdHVzKSk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEZyZWVQb29sIChOZXdFbnRyeSk7 DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiA+ ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBNYWlu IGVudHJ5IHBvaW50IHRvIHRoaXMgdW5pdCB0ZXN0IGFwcGxpY2F0aW9uLg0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICBTZXRzIHVwIGFuZCBydW5zIHRoZSB0ZXN0IHN1aXRlcy4NCj4gPiAgICAg PiArKiovDQo+ID4gICAgID4gK1ZPSUQNCj4gPiAgICAgPiArRUZJQVBJDQo+ID4gICAgID4gK1Vu aXRUZXN0TWFpbiAoDQo+ID4gICAgID4gKyAgVk9JRA0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAg PiArew0KPiA+ICAgICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ ID4gICAgID4gKyAgVU5JVF9URVNUX0ZSQU1FV09SS19IQU5ETEUgIEZyYW1ld29yazsNCj4gPiAg ICAgPiArICBVTklUX1RFU1RfU1VJVEVfSEFORExFICAgICAgU2hpbVRlc3RzOw0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArICBGcmFtZXdvcmsgPSBOVUxMOw0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICBERUJVRyAoKERFQlVHX0lORk8sICIlYSB2JWFcbiIsIFVOSVRfVEVTVF9OQU1FLA0KPiA+ ICAgICA+IFVOSVRfVEVTVF9WRVJTSU9OKSk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8v DQo+ID4gICAgID4gKyAgLy8gU3RhcnQgc2V0dGluZyB1cCB0aGUgdGVzdCBmcmFtZXdvcmsgZm9y IHJ1bm5pbmcgdGhlIHRlc3RzLg0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgU3RhdHVz ID0gSW5pdFVuaXRUZXN0RnJhbWV3b3JrICgmRnJhbWV3b3JrLCBVTklUX1RFU1RfTkFNRSwNCj4g PiAgICAgPiBnRWZpQ2FsbGVyQmFzZU5hbWUsIFVOSVRfVEVTVF9WRVJTSU9OKTsNCj4gPiAgICAg PiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAgID4gKyAgICBERUJVRyAoKERF QlVHX0VSUk9SLCAiRmFpbGVkIGluIEluaXRVbml0VGVzdEZyYW1ld29yay4gU3RhdHVzDQo+ID4g PSAlclxuIiwNCj4gPiAgICAgPiBTdGF0dXMpKTsNCj4gPiAgICAgPiArICAgIGdvdG8gRVhJVDsN Cj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4g KyAgLy8gQWRkIGFsbCB0ZXN0IHN1aXRlcyBhbmQgdGVzdHMuDQo+ID4gICAgID4gKyAgLy8NCj4g PiAgICAgPiArICBTdGF0dXMgPSBDcmVhdGVVbml0VGVzdFN1aXRlICgNCj4gPiAgICAgPiArICAg ICAgICAgICAgICZTaGltVGVzdHMsDQo+ID4gICAgID4gKyAgICAgICAgICAgICBGcmFtZXdvcmss DQo+ID4gICAgID4gKyAgICAgICAgICAgICAiVmFyaWFibGUgTG9jayBTaGltIFRlc3RzIiwNCj4g PiAgICAgPiArICAgICAgICAgICAgICJWYXJQb2xpY3kuVmFyTG9ja1NoaW0iLA0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgTlVMTCwNCj4gPiAgICAgPiArICAgICAgICAgICAgIE5VTEwNCj4gPiAg ICAgPiArICAgICAgICAgICAgICk7DQo+ID4gICAgID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiA+ICAgICA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkZhaWxlZCBpbiBDcmVh dGVVbml0VGVzdFN1aXRlIGZvcg0KPiA+IFNoaW1UZXN0c1xuIikpOw0KPiA+ICAgICA+ICsgICAg U3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gICAgID4gKyAgICBnb3RvIEVYSVQ7 DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBBZGRUZXN0Q2FzZSAo DQo+ID4gICAgID4gKyAgICBTaGltVGVzdHMsDQo+ID4gICAgID4gKyAgICAiTG9ja2luZyBhIHZh cmlhYmxlIHdpdGggbm8gbWF0Y2hpbmcgcG9saWNpZXMgc2hvdWxkIGFsd2F5cyB3b3JrIiwNCj4g PiAgICAgPiArICAgICJFbXB0eVBvbGljaWVzIiwNCj4gPiAgICAgPiArICAgIExvY2tpbmdXaXRo b3V0QW55UG9saWNpZXNTaG91bGRTdWNjZWVkLA0KPiA+ICAgICA+ICsgICAgTGliSW5pdE1vY2tl ZCwNCj4gPiAgICAgPiArICAgIExpYkNsZWFudXAsDQo+ID4gICAgID4gKyAgICBOVUxMDQo+ID4g ICAgID4gKyAgICApOw0KPiA+ICAgICA+ICsgIEFkZFRlc3RDYXNlICgNCj4gPiAgICAgPiArICAg IFNoaW1UZXN0cywNCj4gPiAgICAgPiArICAgICJMb2NraW5nIGEgdmFyaWFibGUgdHdpY2Ugc2hv dWxkIGFsd2F5cyB3b3JrIiwNCj4gPiAgICAgPiArICAgICJEb3VibGVMb2NrIiwNCj4gPiAgICAg PiArICAgIExvY2tpbmdUd2ljZVNob3VsZFN1Y2NlZWQsDQo+ID4gICAgID4gKyAgICBMaWJJbml0 TW9ja2VkLA0KPiA+ICAgICA+ICsgICAgTGliQ2xlYW51cCwNCj4gPiAgICAgPiArICAgIE5VTEwN Cj4gPiAgICAgPiArICAgICk7DQo+ID4gICAgID4gKyAgQWRkVGVzdENhc2UgKA0KPiA+ICAgICA+ ICsgICAgU2hpbVRlc3RzLA0KPiA+ICAgICA+ICsgICAgIkxvY2tpbmcgYSB2YXJpYWJsZSB0aGF0 J3MgYWxyZWFkeSBsb2NrZWQgYnkgYW5vdGhlciBwb2xpY3kgc2hvdWxkDQo+IHdvcmsiLA0KPiA+ ICAgICA+ICsgICAgIkxvY2tBZnRlclBvbGljeSIsDQo+ID4gICAgID4gKyAgICBMb2NraW5nQUxv Y2tlZFZhcmlhYmxlU2hvdWxkU3VjY2VlZCwNCj4gPiAgICAgPiArICAgIExpYkluaXRNb2NrZWQs DQo+ID4gICAgID4gKyAgICBMaWJDbGVhbnVwLA0KPiA+ICAgICA+ICsgICAgTlVMTA0KPiA+ICAg ICA+ICsgICAgKTsNCj4gPiAgICAgPiArICBBZGRUZXN0Q2FzZSAoDQo+ID4gICAgID4gKyAgICBT aGltVGVzdHMsDQo+ID4gICAgID4gKyAgICAiTG9ja2luZyBhIHZhcmlhYmxlIHRoYXQgYWxyZWFk eSBoYXMgYW4gdW5sb2NrZWQgcG9saWN5IHNob3VsZCBmYWlsIiwNCj4gPiAgICAgPiArICAgICJM b2NrQWZ0ZXJVbmxvY2tlZFBvbGljeSIsDQo+ID4gICAgID4gKyAgICBMb2NraW5nQW5VbmxvY2tl ZFZhcmlhYmxlU2hvdWxkRmFpbCwNCj4gPiAgICAgPiArICAgIExpYkluaXRNb2NrZWQsDQo+ID4g ICAgID4gKyAgICBMaWJDbGVhbnVwLA0KPiA+ICAgICA+ICsgICAgTlVMTA0KPiA+ICAgICA+ICsg ICAgKTsNCj4gPiAgICAgPiArICBBZGRUZXN0Q2FzZSAoDQo+ID4gICAgID4gKyAgICBTaGltVGVz dHMsDQo+ID4gICAgID4gKyAgICAiTG9ja2luZyBhIHZhcmlhYmxlIHRoYXQgYWxyZWFkeSBoYXMg YW4gbG9ja2VkIHBvbGljeSBzaG91bGQgc3VjY2VlZCIsDQo+ID4gICAgID4gKyAgICAiTG9ja0Fm dGVyTG9ja2VkUG9saWN5TWF0Y2hpbmdEYXRhIiwNCj4gPiAgICAgPiArICAgIExvY2tpbmdBTG9j a2VkVmFyaWFibGVXaXRoTWF0Y2hpbmdEYXRhU2hvdWxkU3VjY2VlZCwNCj4gPiAgICAgPiArICAg IExpYkluaXRNb2NrZWQsDQo+ID4gICAgID4gKyAgICBMaWJDbGVhbnVwLA0KPiA+ICAgICA+ICsg ICAgTlVMTA0KPiA+ICAgICA+ICsgICAgKTsNCj4gPiAgICAgPiArICBBZGRUZXN0Q2FzZSAoDQo+ ID4gICAgID4gKyAgICBTaGltVGVzdHMsDQo+ID4gICAgID4gKyAgICAiTG9ja2luZyBhIHZhcmlh YmxlIHRoYXQgYWxyZWFkeSBoYXMgYW4gbG9ja2VkIHBvbGljeSB3aXRoIG1hdGNoaW5nDQo+IGRh dGENCj4gPiAgICAgPiBzaG91bGQgc3VjY2VlZCIsDQo+ID4gICAgID4gKyAgICAiTG9ja0FmdGVy TG9ja2VkUG9saWN5Tm9uTWF0Y2hpbmdEYXRhIiwNCj4gPiAgICAgPiArICAgIExvY2tpbmdBTG9j a2VkVmFyaWFibGVXaXRoTm9uTWF0Y2hpbmdEYXRhU2hvdWxkRmFpbCwNCj4gPiAgICAgPiArICAg IExpYkluaXRNb2NrZWQsDQo+ID4gICAgID4gKyAgICBMaWJDbGVhbnVwLA0KPiA+ICAgICA+ICsg ICAgTlVMTA0KPiA+ICAgICA+ICsgICAgKTsNCj4gPiAgICAgPiArICBBZGRUZXN0Q2FzZSAoDQo+ ID4gICAgID4gKyAgICBTaGltVGVzdHMsDQo+ID4gICAgID4gKyAgICAiQWRkaW5nIGEgcG9saWN5 IGZvciBhIHZhcmlhYmxlIHRoYXQgaGFzIHByZXZpb3VzbHkgYmVlbiBsb2NrZWQgc2hvdWxkDQo+ ID4gYWx3YXlzDQo+ID4gICAgID4gZmFpbCIsDQo+ID4gICAgID4gKyAgICAiU2V0UG9saWN5QWZ0 ZXJMb2NrIiwNCj4gPiAgICAgPiArICAgIFNldHRpbmdQb2xpY3lGb3JBTG9ja2VkVmFyaWFibGVT aG91bGRGYWlsLA0KPiA+ICAgICA+ICsgICAgTGliSW5pdE1vY2tlZCwNCj4gPiAgICAgPiArICAg IExpYkNsZWFudXAsDQo+ID4gICAgID4gKyAgICBOVUxMDQo+ID4gICAgID4gKyAgICApOw0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIEV4ZWN1dGUgdGhlIHRl c3RzLg0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgU3RhdHVzID0gUnVuQWxsVGVzdFN1 aXRlcyAoRnJhbWV3b3JrKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gK0VYSVQ6DQo+ID4gICAg ID4gKyAgaWYgKEZyYW1ld29yayAhPSBOVUxMKSB7DQo+ID4gICAgID4gKyAgICBGcmVlVW5pdFRl c3RGcmFtZXdvcmsgKEZyYW1ld29yayk7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICByZXR1cm47DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4g Ky8vLw0KPiA+ICAgICA+ICsvLy8gQXZvaWQgRUNDIGVycm9yIGZvciBmdW5jdGlvbiBuYW1lIHRo YXQgc3RhcnRzIHdpdGggbG93ZXIgY2FzZSBsZXR0ZXINCj4gPiAgICAgPiArLy8vDQo+ID4gICAg ID4gKyNkZWZpbmUgTWFpbiAgbWFpbg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4g ICAgID4gKyAgU3RhbmRhcmQgUE9TSVggQyBlbnRyeSBwb2ludCBmb3IgaG9zdCBiYXNlZCB1bml0 IHRlc3QgZXhlY3V0aW9uLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1baW5dIEFy Z2MgIE51bWJlciBvZiBhcmd1bWVudHMNCj4gPiAgICAgPiArICBAcGFyYW1baW5dIEFyZ3YgIEFy cmF5IG9mIHBvaW50ZXJzIHRvIGFyZ3VtZW50cw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBA cmV0dmFsIDAgICAgICBTdWNjZXNzDQo+ID4gICAgID4gKyAgQHJldHZhbCBvdGhlciAgRXJyb3IN Cj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK0lOVDMyDQo+ID4gICAgID4gK01haW4gKA0KPiA+ ICAgICA+ICsgIElOIElOVDMyICBBcmdjLA0KPiA+ICAgICA+ICsgIElOIENIQVI4ICAqQXJndltd DQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgVW5pdFRlc3RNYWlu ICgpOw0KPiA+ICAgICA+ICsgIHJldHVybiAwOw0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gZGlm ZiAtLWdpdA0KPiA+ICAgICA+DQo+ID4NCj4gYS9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1Zhcmlh YmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1NwZWN1bGF0aW9uQmFycmllDQo+ID4gICAgID4gckR4 ZS5jDQo+ID4gICAgID4NCj4gPg0KPiBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUv UHJvdGVjdGVkL1J1bnRpbWVEeGUvU3BlY3VsYXRpb25CYXJyaWUNCj4gPiAgICAgPiByRHhlLmMN Cj4gPiAgICAgPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ICAgICA+IGluZGV4IDAwMDAwMDAw MDAwMC4uYjIxOWVhOWVjMDc0DQo+ID4gICAgID4gLS0tIC9kZXYvbnVsbA0KPiA+ICAgICA+ICsr Kw0KPiA+ICAgICA+DQo+ID4NCj4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1By b3RlY3RlZC9SdW50aW1lRHhlL1NwZWN1bGF0aW9uQmFycmllDQo+ID4gICAgID4gckR4ZS5jDQo+ ID4gICAgID4gQEAgLTAsMCArMSwyNyBAQA0KPiA+ICAgICA+ICsvKiogQGZpbGUNCj4gPiAgICAg PiArICBCYXJyaWVyIHRvIHN0b3Agc3BlY3VsYXRpdmUgZXhlY3V0aW9uIChEWEUgdmVyc2lvbiku DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICtDb3B5cmlnaHQgKGMpIDIwMTgsIEludGVsIENvcnBv cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiAgICAgPiArU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyoqLw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArI2luY2x1ZGUgIlZhcmlhYmxlLmgiDQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBUaGlzIHNlcnZpY2UgaXMgY29u c3VtZWQgYnkgdGhlIHZhcmlhYmxlIG1vZHVsZXMgdG8gcGxhY2UgYSBiYXJyaWVyIHRvDQo+IHN0 b3ANCj4gPiAgICAgPiArICBzcGVjdWxhdGl2ZSBleGVjdXRpb24uDQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsgIEVuc3VyZXMgdGhhdCBubyBsYXRlciBpbnN0cnVjdGlvbiB3aWxsIGV4ZWN1dGUg c3BlY3VsYXRpdmVseSwgdW50aWwgYWxsIHByaW9yDQo+ID4gICAgID4gKyAgaW5zdHJ1Y3Rpb25z IGhhdmUgY29tcGxldGVkLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4g K1ZPSUQNCj4gPiAgICAgPiArVmFyaWFibGVTcGVjdWxhdGlvbkJhcnJpZXIgKA0KPiA+ICAgICA+ ICsgIFZPSUQNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICAvLw0K PiA+ICAgICA+ICsgIC8vIERvIG5vdGhpbmcuDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiAr fQ0KPiA+ICAgICA+IGRpZmYgLS1naXQNCj4gPiAgICAgPg0KPiA+DQo+IGEvTWRlTW9kdWxlUGtn L1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9TcGVjdWxhdGlvbkJhcnJp ZQ0KPiA+ICAgICA+IHJTbW0uYw0KPiA+ICAgICA+DQo+ID4NCj4gYi9NZGVNb2R1bGVQa2cvVW5p dmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1NwZWN1bGF0aW9uQmFycmllDQo+ ID4gICAgID4gclNtbS5jDQo+ID4gICAgID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiAgICAg PiBpbmRleCAwMDAwMDAwMDAwMDAuLjcxMDdjMDQyOTI4ZQ0KPiA+ICAgICA+IC0tLSAvZGV2L251 bGwNCj4gPiAgICAgPiArKysNCj4gPiAgICAgPg0KPiA+DQo+IGIvTWRlTW9kdWxlUGtnL1VuaXZl cnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9TcGVjdWxhdGlvbkJhcnJpZQ0KPiA+ ICAgICA+IHJTbW0uYw0KPiA+ICAgICA+IEBAIC0wLDAgKzEsMjYgQEANCj4gPiAgICAgPiArLyoq IEBmaWxlDQo+ID4gICAgID4gKyAgQmFycmllciB0byBzdG9wIHNwZWN1bGF0aXZlIGV4ZWN1dGlv biAoU01NIHZlcnNpb24pLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArQ29weXJpZ2h0IChjKSAy MDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4gICAg ID4gK1NQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyNpbmNsdWRlIDxM aWJyYXJ5L0Jhc2VMaWIuaD4NCj4gPiAgICAgPiArI2luY2x1ZGUgIlZhcmlhYmxlLmgiDQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBUaGlzIHNlcnZpY2UgaXMgY29u c3VtZWQgYnkgdGhlIHZhcmlhYmxlIG1vZHVsZXMgdG8gcGxhY2UgYSBiYXJyaWVyIHRvDQo+IHN0 b3ANCj4gPiAgICAgPiArICBzcGVjdWxhdGl2ZSBleGVjdXRpb24uDQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsgIEVuc3VyZXMgdGhhdCBubyBsYXRlciBpbnN0cnVjdGlvbiB3aWxsIGV4ZWN1dGUg c3BlY3VsYXRpdmVseSwgdW50aWwgYWxsIHByaW9yDQo+ID4gICAgID4gKyAgaW5zdHJ1Y3Rpb25z IGhhdmUgY29tcGxldGVkLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4g K1ZPSUQNCj4gPiAgICAgPiArVmFyaWFibGVTcGVjdWxhdGlvbkJhcnJpZXIgKA0KPiA+ICAgICA+ ICsgIFZPSUQNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBTcGVj dWxhdGlvbkJhcnJpZXIgKCk7DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiBkaWZmIC0tZ2l0DQo+ ID4gICAgID4NCj4gPg0KPiBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVj dGVkL1J1bnRpbWVEeGUvVGNnTW9yTG9ja0R4ZS5jDQo+ID4gICAgID4NCj4gPg0KPiBiL01kZU1v ZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVGNnTW9yTG9j a0R4ZS5jDQo+ID4gICAgID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiAgICAgPiBpbmRleCAw MDAwMDAwMDAwMDAuLjg4OTg0YzMxYWI0Zg0KPiA+ICAgICA+IC0tLSAvZGV2L251bGwNCj4gPiAg ICAgPiArKysNCj4gPiAgICAgPg0KPiA+DQo+IGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJp YWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9UY2dNb3JMb2NrRHhlLmMNCj4gPiAgICAgPiBAQCAt MCwwICsxLDE1MyBAQA0KPiA+ICAgICA+ICsvKiogQGZpbGUNCj4gPiAgICAgPiArICBUQ0cgTU9S IChNZW1vcnkgT3ZlcndyaXRlIFJlcXVlc3QpIExvY2sgQ29udHJvbCBzdXBwb3J0IChEWEUNCj4g PiB2ZXJzaW9uKS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgVGhpcyBtb2R1bGUgY2xlYXJz IE1lbW9yeU92ZXJ3cml0ZVJlcXVlc3RDb250cm9sTG9jayB2YXJpYWJsZSB0bw0KPiA+IGluZGlj YXRlDQo+ID4gICAgID4gKyAgTU9SIGxvY2sgY29udHJvbCB1bnN1cHBvcnRlZC4NCj4gPiAgICAg PiArDQo+ID4gICAgID4gK0NvcHlyaWdodCAoYykgMjAxNiwgSW50ZWwgQ29ycG9yYXRpb24uIEFs bCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ICAgICA+ICtDb3B5cmlnaHQgKGMpIE1pY3Jvc29m dCBDb3Jwb3JhdGlvbi4NCj4gPiAgICAgPiArU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0y LUNsYXVzZS1QYXRlbnQNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArI2luY2x1ZGUgPFBpRHhlLmg+DQo+ID4gICAgID4gKyNpbmNsdWRlIDxHdWlk L01lbW9yeU92ZXJ3cml0ZUNvbnRyb2wuaD4NCj4gPiAgICAgPiArI2luY2x1ZGUgPEluZHVzdHJ5 U3RhbmRhcmQvTWVtb3J5T3ZlcndyaXRlUmVxdWVzdENvbnRyb2xMb2NrLmg+DQo+ID4gICAgID4g KyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+ID4gICAgID4gKyNpbmNsdWRlIDxMaWJy YXJ5L0Jhc2VMaWIuaD4NCj4gPiAgICAgPiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxp Yi5oPg0KPiA+ICAgICA+ICsjaW5jbHVkZSAiVmFyaWFibGUuaCINCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyNpbmNsdWRlIDxQcm90b2NvbC9WYXJpYWJsZVBvbGljeS5oPg0KPiA+ICAgICA+ICsj aW5jbHVkZSA8TGlicmFyeS9WYXJpYWJsZVBvbGljeUhlbHBlckxpYi5oPg0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgVGhpcyBzZXJ2aWNlIGlzIGFuIE1PUi9Nb3JM b2NrIGNoZWNrZXIgaGFuZGxlciBmb3IgdGhlIFNldFZhcmlhYmxlKCkuDQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gIFZhcmlhYmxlTmFtZSB0aGUgbmFtZSBvZiB0aGUgdmVu ZG9yJ3MgdmFyaWFibGUsIGFzIGENCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgTnVsbC1UZXJtaW5hdGVkIFVuaWNvZGUgU3RyaW5nDQo+ID4gICAgID4gKyAgQHBhcmFtW2lu XSAgVmVuZG9yR3VpZCAgIFVuaWZ5IGlkZW50aWZpZXIgZm9yIHZlbmRvci4NCj4gPiAgICAgPiAr ICBAcGFyYW1baW5dICBBdHRyaWJ1dGVzICAgQXR0cmlidXRlcyBiaXRtYXNrIHRvIHNldCBmb3Ig dGhlIHZhcmlhYmxlLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gIERhdGFTaXplICAgICBUaGUg c2l6ZSBpbiBieXRlcyBvZiBEYXRhLUJ1ZmZlci4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dICBE YXRhICAgICAgICAgUG9pbnQgdG8gdGhlIGNvbnRlbnQgb2YgdGhlIHZhcmlhYmxlLg0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArICBAcmV0dmFsICBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBN T1IvTW9yTG9jayBjaGVjayBwYXNzLCBhbmQNCj4gVmFyaWFibGUNCj4gPiAgICAgPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlciBjYW4gc3RvcmUgdGhlIHZhcmlhYmxl IGRhdGEuDQo+ID4gICAgID4gKyAgQHJldHZhbCAgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBUaGUg TU9SL01vckxvY2sgZGF0YSBvciBkYXRhDQo+IHNpemUNCj4gPiBvcg0KPiA+ICAgICA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyBpcyBub3QgYWxsb3dlZCBm b3IgTU9SIHZhcmlhYmxlLg0KPiA+ICAgICA+ICsgIEByZXR2YWwgIEVGSV9BQ0NFU1NfREVOSUVE ICAgICAgVGhlIE1PUi9Nb3JMb2NrIGlzIGxvY2tlZC4NCj4gPiAgICAgPiArICBAcmV0dmFsICBF RklfQUxSRUFEWV9TVEFSVEVEICAgIFRoZSBNb3JMb2NrIHZhcmlhYmxlIGlzIGhhbmRsZWQNCj4g aW5zaWRlDQo+ID4gdGhpcw0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZnVuY3Rpb24uIFZhcmlhYmxlIGRyaXZlciBjYW4ganVzdCByZXR1cm4NCj4gPiAgICAg PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9TVUNDRVNTLg0KPiA+ICAg ICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX1NUQVRVUw0KPiA+ICAgICA+ICtTZXRWYXJpYWJsZUNo ZWNrSGFuZGxlck1vciAoDQo+ID4gICAgID4gKyAgSU4gQ0hBUjE2ICAgICpWYXJpYWJsZU5hbWUs DQo+ID4gICAgID4gKyAgSU4gRUZJX0dVSUQgICpWZW5kb3JHdWlkLA0KPiA+ICAgICA+ICsgIElO IFVJTlQzMiAgICBBdHRyaWJ1dGVzLA0KPiA+ICAgICA+ICsgIElOIFVJTlROICAgICBEYXRhU2l6 ZSwNCj4gPiAgICAgPiArICBJTiBWT0lEICAgICAgKkRhdGENCj4gPiAgICAgPiArICApDQo+ID4g ICAgID4gK3sNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIEp1c3QgbGV0IGl0IHBh c3MuIE5vIG5lZWQgcHJvdmlkZSBwcm90ZWN0aW9uIGZvciBEWEUgdmVyc2lvbi4NCj4gPiAgICAg PiArICAvLw0KPiA+ICAgICA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiAgICAgPiArfQ0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgSW5pdGlhbGl6YXRpb24g Zm9yIE1PUiBDb250cm9sIExvY2suDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgIE1vckxvY2sgaW5pdGlhbGl6YXRpb24gc3VjY2Vzcy4NCj4gPiAgICAg PiArICBAcmV0dXJuIE90aGVycyAgICAgICAgICBTb21lIGVycm9yIG9jY3Vycy4NCj4gPiAgICAg PiArKiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4gPiAgICAgPiArTW9yTG9ja0luaXQgKA0K PiA+ICAgICA+ICsgIFZPSUQNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAg PiArICAvLw0KPiA+ICAgICA+ICsgIC8vIEFsd2F5cyBjbGVhciB2YXJpYWJsZSB0byByZXBvcnQg dW5zdXBwb3J0ZWQgdG8gT1MuDQo+ID4gICAgID4gKyAgLy8gVGhlIHJlYXNvbiBpcyB0aGF0IHRo ZSBEWEUgdmVyc2lvbiBpcyBub3QgcHJvcGVyIHRvIHByb3ZpZGUNCj4gKnByb3RlY3Rpb24qLg0K PiA+ICAgICA+ICsgIC8vIEJJT1Mgc2hvdWxkIHVzZSBTTU0gdmVyc2lvbiB2YXJpYWJsZSBkcml2 ZXIgdG8gcHJvdmlkZSBzdWNoDQo+IGNhcGFiaWxpdHkuDQo+ID4gICAgID4gKyAgLy8NCj4gPiAg ICAgPiArICBWYXJpYWJsZVNlcnZpY2VTZXRWYXJpYWJsZSAoDQo+ID4gICAgID4gKyAgICBNRU1P UllfT1ZFUldSSVRFX1JFUVVFU1RfQ09OVFJPTF9MT0NLX05BTUUsDQo+ID4gICAgID4gKyAgICAm Z0VmaU1lbW9yeU92ZXJ3cml0ZVJlcXVlc3RDb250cm9sTG9ja0d1aWQsDQo+ID4gICAgID4gKyAg ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0dHJpYnV0 ZXMNCj4gPiAgICAgPiArICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLy8gRGF0YVNpemUNCj4gPiAgICAgPiArICAgIE5VTEwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YQ0KPiA+ICAgICA+ICsgICAgKTsNCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBUaGUgTU9SIHZhcmlhYmxlIGNh biBlZmZlY3RpdmVseSBpbXByb3ZlIHBsYXRmb3JtIHNlY3VyaXR5IG9ubHkNCj4gd2hlbg0KPiA+ IHRoZQ0KPiA+ICAgICA+ICsgIC8vIE1vckxvY2sgdmFyaWFibGUgcHJvdGVjdHMgdGhlIE1PUiB2 YXJpYWJsZS4gSW4gdHVybiBNb3JMb2NrIGNhbm5vdA0KPiA+IGJlDQo+ID4gICAgID4gbWFkZQ0K PiA+ICAgICA+ICsgIC8vIHNlY3VyZSB3aXRob3V0IFNNTSBzdXBwb3J0IGluIHRoZSBwbGF0Zm9y bSBmaXJtd2FyZSAoc2VlIGFib3ZlKS4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8v IFRodXMsIGRlbGV0ZSB0aGUgTU9SIHZhcmlhYmxlLCBzaG91bGQgaXQgZXhpc3QgZm9yIGFueSBy ZWFzb24gKHNvbWUNCj4gPiBPU2VzDQo+ID4gICAgID4gKyAgLy8gYXJlIGtub3duIHRvIGNyZWF0 ZSBNT1IgdW5pbnRlbnRpb25hbGx5LCBpbiBhbiBhdHRlbXB0IHRvIHNldCBpdCksDQo+IHRoZW4N Cj4gPiAgICAgPiArICAvLyBhbHNvIGxvY2sgdGhlIE1PUiB2YXJpYWJsZSwgaW4gb3JkZXIgdG8g cHJldmVudCBvdGhlciBtb2R1bGVzIGZyb20NCj4gPiAgICAgPiArICAvLyBjcmVhdGluZyBpdC4N Cj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIFZhcmlhYmxlU2VydmljZVNldFZhcmlhYmxl ICgNCj4gPiAgICAgPiArICAgIE1FTU9SWV9PVkVSV1JJVEVfUkVRVUVTVF9WQVJJQUJMRV9OQU1F LA0KPiA+ICAgICA+ICsgICAgJmdFZmlNZW1vcnlPdmVyd3JpdGVDb250cm9sRGF0YUd1aWQsDQo+ ID4gICAgID4gKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g QXR0cmlidXRlcw0KPiA+ICAgICA+ICsgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8vIERhdGFTaXplDQo+ID4gICAgID4gKyAgICBOVUxMICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YQ0KPiA+ICAgICA+ICsgICAgKTsNCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICAgICA+ICt9DQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBEZWxheWVkIGluaXRpYWxpemF0 aW9uIGZvciBNT1IgQ29udHJvbCBMb2NrIGF0IEVuZE9mRHhlLg0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGFueSBvcGVyYXRpb25zIHF1ZXVlZCBieSBN b3JMb2NrSW5pdCgpLg0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArVk9JRA0KPiA+ICAgICA+ ICtNb3JMb2NrSW5pdEF0RW5kT2ZEeGUgKA0KPiA+ICAgICA+ICsgIFZPSUQNCj4gPiAgICAgPiAr ICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAg ICAgICAgIFN0YXR1czsNCj4gPiAgICAgPiArICBFREtJSV9WQVJJQUJMRV9QT0xJQ1lfUFJPVE9D T0wgICpWYXJpYWJsZVBvbGljeTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8gRmlyc3Qs IHdlIG9idmlvdXNseSBuZWVkIHRvIGxvY2F0ZSB0aGUgVmFyaWFibGVQb2xpY3kgcHJvdG9jb2wu DQo+ID4gICAgID4gKyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVQcm90b2NvbCAoJmdFZGtpaVZhcmlh YmxlUG9saWN5UHJvdG9jb2xHdWlkLCBOVUxMLA0KPiA+ICAgICA+IChWT0lEICoqKSZWYXJpYWJs ZVBvbGljeSk7DQo+ID4gICAgID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICAg ICA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhIC0gQ291bGQgbm90IGxvY2F0ZSBWYXJp YWJsZVBvbGljeQ0KPiA+ICAgICA+IHByb3RvY29sISAlclxuIiwgX19GVU5DVElPTl9fLCBTdGF0 dXMpKTsNCj4gPiAgICAgPiArICAgIHJldHVybjsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsgIC8vIElmIHdlJ3JlIHN1Y2Nlc3NmdWwsIGdvIGFoZWFkIGFuZCBzZXQg dGhlIHBvbGljaWVzIHRvIHByb3RlY3QgdGhlIHRhcmdldA0KPiA+ICAgICA+IHZhcmlhYmxlcy4N Cj4gPiAgICAgPiArICBTdGF0dXMgPSBSZWdpc3RlckJhc2ljVmFyaWFibGVQb2xpY3kgKA0KPiA+ ICAgICA+ICsgICAgICAgICAgICAgVmFyaWFibGVQb2xpY3ksDQo+ID4gICAgID4gKyAgICAgICAg ICAgICAmZ0VmaU1lbW9yeU92ZXJ3cml0ZVJlcXVlc3RDb250cm9sTG9ja0d1aWQsDQo+ID4gICAg ID4gKyAgICAgICAgICAgICBNRU1PUllfT1ZFUldSSVRFX1JFUVVFU1RfQ09OVFJPTF9MT0NLX05B TUUsDQo+ID4gICAgID4gKyAgICAgICAgICAgICBWQVJJQUJMRV9QT0xJQ1lfTk9fTUlOX1NJWkUs DQo+ID4gICAgID4gKyAgICAgICAgICAgICBWQVJJQUJMRV9QT0xJQ1lfTk9fTUFYX1NJWkUsDQo+ ID4gICAgID4gKyAgICAgICAgICAgICBWQVJJQUJMRV9QT0xJQ1lfTk9fTVVTVF9BVFRSLA0KPiA+ ICAgICA+ICsgICAgICAgICAgICAgVkFSSUFCTEVfUE9MSUNZX05PX0NBTlRfQVRUUiwNCj4gPiAg ICAgPiArICAgICAgICAgICAgIFZBUklBQkxFX1BPTElDWV9UWVBFX0xPQ0tfTk9XDQo+ID4gICAg ID4gKyAgICAgICAgICAgICApOw0KPiA+ICAgICA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gPiAgICAgPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYSAtIENvdWxkIG5vdCBs b2NrIHZhcmlhYmxlICVzISAlclxuIiwNCj4gPiAgICAgPiBfX0ZVTkNUSU9OX18sDQo+IE1FTU9S WV9PVkVSV1JJVEVfUkVRVUVTVF9DT05UUk9MX0xPQ0tfTkFNRSwNCj4gPiAgICAgPiBTdGF0dXMp KTsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFN0YXR1cyA9IFJl Z2lzdGVyQmFzaWNWYXJpYWJsZVBvbGljeSAoDQo+ID4gICAgID4gKyAgICAgICAgICAgICBWYXJp YWJsZVBvbGljeSwNCj4gPiAgICAgPiArICAgICAgICAgICAgICZnRWZpTWVtb3J5T3ZlcndyaXRl Q29udHJvbERhdGFHdWlkLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgTUVNT1JZX09WRVJXUklU RV9SRVFVRVNUX1ZBUklBQkxFX05BTUUsDQo+ID4gICAgID4gKyAgICAgICAgICAgICBWQVJJQUJM RV9QT0xJQ1lfTk9fTUlOX1NJWkUsDQo+ID4gICAgID4gKyAgICAgICAgICAgICBWQVJJQUJMRV9Q T0xJQ1lfTk9fTUFYX1NJWkUsDQo+ID4gICAgID4gKyAgICAgICAgICAgICBWQVJJQUJMRV9QT0xJ Q1lfTk9fTVVTVF9BVFRSLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgVkFSSUFCTEVfUE9MSUNZ X05PX0NBTlRfQVRUUiwNCj4gPiAgICAgPiArICAgICAgICAgICAgIFZBUklBQkxFX1BPTElDWV9U WVBFX0xPQ0tfTk9XDQo+ID4gICAgID4gKyAgICAgICAgICAgICApOw0KPiA+ICAgICA+ICsgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiArICAgIERFQlVHICgoREVCVUdfRVJS T1IsICIlYSAtIENvdWxkIG5vdCBsb2NrIHZhcmlhYmxlICVzISAlclxuIiwNCj4gPiAgICAgPiBf X0ZVTkNUSU9OX18sIE1FTU9SWV9PVkVSV1JJVEVfUkVRVUVTVF9WQVJJQUJMRV9OQU1FLA0KPiA+ IFN0YXR1cykpOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgcmV0 dXJuOw0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gZGlmZiAtLWdpdA0KPiA+ICAgICA+DQo+ID4N Cj4gYS9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhl L1RjZ01vckxvY2tTbW0uDQo+ID4gICAgID4gYw0KPiA+ICAgICA+DQo+ID4NCj4gYi9NZGVNb2R1 bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1RjZ01vckxvY2tT bW0uDQo+ID4gICAgID4gYw0KPiA+ICAgICA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gICAg ID4gaW5kZXggMDAwMDAwMDAwMDAwLi4yOTZhZmQyZWM0MTQNCj4gPiAgICAgPiAtLS0gL2Rldi9u dWxsDQo+ID4gICAgID4gKysrDQo+ID4gICAgID4NCj4gPg0KPiBiL01kZU1vZHVsZVBrZy9Vbml2 ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVGNnTW9yTG9ja1NtbS4NCj4gPiAg ICAgPiBjDQo+ID4gICAgID4gQEAgLTAsMCArMSw1NjkgQEANCj4gPiAgICAgPiArLyoqIEBmaWxl DQo+ID4gICAgID4gKyAgVENHIE1PUiAoTWVtb3J5IE92ZXJ3cml0ZSBSZXF1ZXN0KSBMb2NrIENv bnRyb2wgc3VwcG9ydCAoU01NDQo+ID4gdmVyc2lvbikuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsgIFRoaXMgbW9kdWxlIGluaXRpbGl6ZXMgTWVtb3J5T3ZlcndyaXRlUmVxdWVzdENvbnRyb2xM b2NrIHZhcmlhYmxlLg0KPiA+ICAgICA+ICsgIFRoaXMgbW9kdWxlIGFkZHMgVmFyaWFibGUgSG9v ayBhbmQgY2hlY2sNCj4gPiAgICAgPiBNZW1vcnlPdmVyd3JpdGVSZXF1ZXN0Q29udHJvbExvY2su DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICtDb3B5cmlnaHQgKGMpIDIwMTYgLSAyMDE4LCBJbnRl bCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4gICAgID4gK0NvcHly aWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLg0KPiA+ICAgICA+ICtTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr KiovDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsjaW5jbHVkZSA8UGlEeGUuaD4NCj4gPiAgICAg PiArI2luY2x1ZGUgPEd1aWQvTWVtb3J5T3ZlcndyaXRlQ29udHJvbC5oPg0KPiA+ICAgICA+ICsj aW5jbHVkZSA8SW5kdXN0cnlTdGFuZGFyZC9NZW1vcnlPdmVyd3JpdGVSZXF1ZXN0Q29udHJvbExv Y2suaD4NCj4gPiAgICAgPiArI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4gPiAgICAg PiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZUxpYi5oPg0KPiA+ICAgICA+ICsjaW5jbHVkZSA8TGli cmFyeS9CYXNlTWVtb3J5TGliLmg+DQo+ID4gICAgID4gKyNpbmNsdWRlICJWYXJpYWJsZS5oIg0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArI2luY2x1ZGUgPFByb3RvY29sL1ZhcmlhYmxlUG9saWN5 Lmg+DQo+ID4gICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1ZhcmlhYmxlUG9saWN5SGVscGVyTGli Lmg+DQo+ID4gICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1ZhcmlhYmxlUG9saWN5TGliLmg+DQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4gICAgID4gKyAgQ0hB UjE2ICAgICAgKlZhcmlhYmxlTmFtZTsNCj4gPiAgICAgPiArICBFRklfR1VJRCAgICAqVmVuZG9y R3VpZDsNCj4gPiAgICAgPiArfSBWQVJJQUJMRV9UWVBFOw0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArVkFSSUFCTEVfVFlQRSAgbU1vclZhcmlhYmxlVHlwZVtdID0gew0KPiA+ICAgICA+ICsgIHsg TUVNT1JZX09WRVJXUklURV9SRVFVRVNUX1ZBUklBQkxFX05BTUUsDQo+ID4gICAgID4gJmdFZmlN ZW1vcnlPdmVyd3JpdGVDb250cm9sRGF0YUd1aWQgICAgICAgIH0sDQo+ID4gICAgID4gKyAgeyBN RU1PUllfT1ZFUldSSVRFX1JFUVVFU1RfQ09OVFJPTF9MT0NLX05BTUUsDQo+ID4gICAgID4gJmdF ZmlNZW1vcnlPdmVyd3JpdGVSZXF1ZXN0Q29udHJvbExvY2tHdWlkIH0sDQo+ID4gICAgID4gK307 DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICtCT09MRUFOICBtTW9yUGFzc1RocnUgPSBGQUxTRTsN Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKyNkZWZpbmUgTU9SX0xPQ0tfREFUQV9VTkxPQ0tFRCAg ICAgICAgICAgIDB4MA0KPiA+ICAgICA+ICsjZGVmaW5lIE1PUl9MT0NLX0RBVEFfTE9DS0VEX1dJ VEhPVVRfS0VZICAweDENCj4gPiAgICAgPiArI2RlZmluZSBNT1JfTE9DS19EQVRBX0xPQ0tFRF9X SVRIX0tFWSAgICAgMHgyDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsjZGVmaW5lIE1PUl9MT0NL X1YxX1NJWkUgICAgICAxDQo+ID4gICAgID4gKyNkZWZpbmUgTU9SX0xPQ0tfVjJfS0VZX1NJWkUg IDgNCj4gPiAgICAgPiArDQo+ID4gICAgID4gK3R5cGVkZWYgZW51bSB7DQo+ID4gICAgID4gKyAg TW9yTG9ja1N0YXRlVW5sb2NrZWQgPSAwLA0KPiA+ICAgICA+ICsgIE1vckxvY2tTdGF0ZUxvY2tl ZCAgID0gMSwNCj4gPiAgICAgPiArfSBNT1JfTE9DS19TVEFURTsNCj4gPiAgICAgPiArDQo+ID4g ICAgID4gK0JPT0xFQU4gICAgICAgICBtTW9yTG9ja0luaXRpYWxpemF0aW9uUmVxdWlyZWQgPSBG QUxTRTsNCj4gPiAgICAgPiArVUlOVDggICAgICAgICAgIG1Nb3JMb2NrS2V5W01PUl9MT0NLX1Yy X0tFWV9TSVpFXTsNCj4gPiAgICAgPiArQk9PTEVBTiAgICAgICAgIG1Nb3JMb2NrS2V5RW1wdHkg PSBUUlVFOw0KPiA+ICAgICA+ICtCT09MRUFOICAgICAgICAgbU1vckxvY2tQYXNzVGhydSA9IEZB TFNFOw0KPiA+ICAgICA+ICtNT1JfTE9DS19TVEFURSAgbU1vckxvY2tTdGF0ZSAgICA9IE1vckxv Y2tTdGF0ZVVubG9ja2VkOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4g KyAgUmV0dXJucyBpZiB0aGlzIGlzIE1PUiByZWxhdGVkIHZhcmlhYmxlLg0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICBAcGFyYW0gIFZhcmlhYmxlTmFtZSB0aGUgbmFtZSBvZiB0aGUgdmVuZG9y J3MgdmFyaWFibGUsIGl0J3MgYSBOdWxsLQ0KPiA+ICAgICA+IFRlcm1pbmF0ZWQgVW5pY29kZSBT dHJpbmcNCj4gPiAgICAgPiArICBAcGFyYW0gIFZlbmRvckd1aWQgICBVbmlmeSBpZGVudGlmaWVy IGZvciB2ZW5kb3IuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR2YWwgIFRSVUUgICAg ICAgICAgICBUaGUgdmFyaWFibGUgaXMgTU9SIHJlbGF0ZWQuDQo+ID4gICAgID4gKyAgQHJldHZh bCAgRkFMU0UgICAgICAgICAgIFRoZSB2YXJpYWJsZSBpcyBOT1QgTU9SIHJlbGF0ZWQuDQo+ID4g ICAgID4gKyoqLw0KPiA+ICAgICA+ICtCT09MRUFODQo+ID4gICAgID4gK0lzQW55TW9yVmFyaWFi bGUgKA0KPiA+ICAgICA+ICsgIElOIENIQVIxNiAgICAqVmFyaWFibGVOYW1lLA0KPiA+ICAgICA+ ICsgIElOIEVGSV9HVUlEICAqVmVuZG9yR3VpZA0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiAr ew0KPiA+ICAgICA+ICsgIFVJTlROICBJbmRleDsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg Zm9yIChJbmRleCA9IDA7IEluZGV4IDwgc2l6ZW9mIChtTW9yVmFyaWFibGVUeXBlKS9zaXplb2YN Cj4gPiAgICAgPiAobU1vclZhcmlhYmxlVHlwZVswXSk7IEluZGV4KyspIHsNCj4gPiAgICAgPiAr ICAgIGlmICgoU3RyQ21wIChWYXJpYWJsZU5hbWUsIG1Nb3JWYXJpYWJsZVR5cGVbSW5kZXhdLlZh cmlhYmxlTmFtZSkNCj4gPT0NCj4gPiAwKQ0KPiA+ICAgICA+ICYmDQo+ID4gICAgID4gKyAgICAg ICAgKENvbXBhcmVHdWlkIChWZW5kb3JHdWlkLCBtTW9yVmFyaWFibGVUeXBlW0luZGV4XS5WZW5k b3JHdWlkKSkpDQo+ID4gICAgID4gKyAgICB7DQo+ID4gICAgID4gKyAgICAgIHJldHVybiBUUlVF Ow0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgcmV0dXJuIEZBTFNFOw0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsvKioNCj4gPiAgICAgPiArICBSZXR1cm5zIGlmIHRoaXMgaXMgTU9SIGxvY2sgdmFyaWFibGUu DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbSAgVmFyaWFibGVOYW1lIHRoZSBuYW1l IG9mIHRoZSB2ZW5kb3IncyB2YXJpYWJsZSwgaXQncyBhIE51bGwtDQo+ID4gICAgID4gVGVybWlu YXRlZCBVbmljb2RlIFN0cmluZw0KPiA+ICAgICA+ICsgIEBwYXJhbSAgVmVuZG9yR3VpZCAgIFVu aWZ5IGlkZW50aWZpZXIgZm9yIHZlbmRvci4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJl dHZhbCAgVFJVRSAgICAgICAgICAgIFRoZSB2YXJpYWJsZSBpcyBNT1IgbG9jayB2YXJpYWJsZS4N Cj4gPiAgICAgPiArICBAcmV0dmFsICBGQUxTRSAgICAgICAgICAgVGhlIHZhcmlhYmxlIGlzIE5P VCBNT1IgbG9jayB2YXJpYWJsZS4NCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK0JPT0xFQU4N Cj4gPiAgICAgPiArSXNNb3JMb2NrVmFyaWFibGUgKA0KPiA+ICAgICA+ICsgIElOIENIQVIxNiAg ICAqVmFyaWFibGVOYW1lLA0KPiA+ICAgICA+ICsgIElOIEVGSV9HVUlEICAqVmVuZG9yR3VpZA0K PiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0KPiA+ICAgICA+ICsgIGlmICgoU3RyQ21wIChW YXJpYWJsZU5hbWUsDQo+ID4gICAgID4gTUVNT1JZX09WRVJXUklURV9SRVFVRVNUX0NPTlRST0xf TE9DS19OQU1FKSA9PSAwKSAmJg0KPiA+ICAgICA+ICsgICAgICAoQ29tcGFyZUd1aWQgKFZlbmRv ckd1aWQsDQo+ID4gICAgID4gJmdFZmlNZW1vcnlPdmVyd3JpdGVSZXF1ZXN0Q29udHJvbExvY2tH dWlkKSkpDQo+ID4gICAgID4gKyAgew0KPiA+ICAgICA+ICsgICAgcmV0dXJuIFRSVUU7DQo+ID4g ICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICByZXR1cm4gRkFMU0U7DQo+ID4g ICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIFNldCBN T1IgbG9jayB2YXJpYWJsZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtICBEYXRh ICAgICAgICAgTU9SIExvY2sgdmFyaWFibGUgZGF0YS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgQHJldHZhbCAgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgZmlybXdhcmUgaGFzIHN1Y2Nl c3NmdWxseSBzdG9yZWQgdGhlDQo+ID4gdmFyaWFibGUNCj4gPiAgICAgPiBhbmQgaXRzIGRhdGEg YXMNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQg YnkgdGhlIEF0dHJpYnV0ZXMuDQo+ID4gICAgID4gKyAgQHJldHZhbCAgRUZJX0lOVkFMSURfUEFS QU1FVEVSICBBbiBpbnZhbGlkIGNvbWJpbmF0aW9uIG9mIGF0dHJpYnV0ZQ0KPiA+IGJpdHMNCj4g PiAgICAgPiB3YXMgc3VwcGxpZWQsIG9yIHRoZQ0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRGF0YVNpemUgZXhjZWVkcyB0aGUgbWF4aW11bSBhbGxvd2VkLg0K PiA+ICAgICA+ICsgIEByZXR2YWwgIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVmFyaWFibGVOYW1l IGlzIGFuIGVtcHR5IFVuaWNvZGUNCj4gPiBzdHJpbmcuDQo+ID4gICAgID4gKyAgQHJldHZhbCAg RUZJX09VVF9PRl9SRVNPVVJDRVMgICBOb3QgZW5vdWdoIHN0b3JhZ2UgaXMgYXZhaWxhYmxlIHRv DQo+ID4gaG9sZA0KPiA+ICAgICA+IHRoZSB2YXJpYWJsZSBhbmQgaXRzIGRhdGEuDQo+ID4gICAg ID4gKyAgQHJldHZhbCAgRUZJX0RFVklDRV9FUlJPUiAgICAgICBUaGUgdmFyaWFibGUgY291bGQg bm90IGJlIHNhdmVkIGR1ZSB0bw0KPiBhDQo+ID4gICAgID4gaGFyZHdhcmUgZmFpbHVyZS4NCj4g PiAgICAgPiArICBAcmV0dmFsICBFRklfV1JJVEVfUFJPVEVDVEVEICAgIFRoZSB2YXJpYWJsZSBp biBxdWVzdGlvbiBpcyByZWFkLW9ubHkuDQo+ID4gICAgID4gKyAgQHJldHZhbCAgRUZJX1dSSVRF X1BST1RFQ1RFRCAgICBUaGUgdmFyaWFibGUgaW4gcXVlc3Rpb24gY2Fubm90IGJlDQo+ID4gZGVs ZXRlZC4NCj4gPiAgICAgPiArICBAcmV0dmFsICBFRklfU0VDVVJJVFlfVklPTEFUSU9OIFRoZSB2 YXJpYWJsZSBjb3VsZCBub3QgYmUgd3JpdHRlbg0KPiBkdWUNCj4gPiB0bw0KPiA+ICAgICA+IEVG SV9WQVJJQUJMRV9USU1FX0JBU0VEX0FVVEhFTlRJQ0FURURfV1JJVEVfQUNDRVNTDQo+ID4gICAg ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgYnV0IHRoZSBBdXRoSW5m byBkb2VzIE5PVCBwYXNzIHRoZSB2YWxpZGF0aW9uDQo+IGNoZWNrDQo+ID4gICAgID4gY2Fycmll ZA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IGJ5IHRo ZSBmaXJtd2FyZS4NCj4gPiAgICAgPiArICBAcmV0dmFsICBFRklfTk9UX0ZPVU5EICAgICAgICAg IFRoZSB2YXJpYWJsZSB0cnlpbmcgdG8gYmUgdXBkYXRlZCBvcg0KPiA+IGRlbGV0ZWQNCj4gPiAg ICAgPiB3YXMgbm90IGZvdW5kLg0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX1NUQVRV Uw0KPiA+ICAgICA+ICtTZXRNb3JMb2NrVmFyaWFibGUgKA0KPiA+ICAgICA+ICsgIElOIFVJTlQ4 ICBEYXRhDQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgRUZJX1NU QVRVUyAgU3RhdHVzOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBtTW9yTG9ja1Bhc3NUaHJ1 ID0gVFJVRTsNCj4gPiAgICAgPiArICBTdGF0dXMgICAgICAgICAgID0gVmFyaWFibGVTZXJ2aWNl U2V0VmFyaWFibGUgKA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgIE1FTU9SWV9P VkVSV1JJVEVfUkVRVUVTVF9DT05UUk9MX0xPQ0tfTkFNRSwNCj4gPiAgICAgPiArICAgICAgICAg ICAgICAgICAgICAgICAmZ0VmaU1lbW9yeU92ZXJ3cml0ZVJlcXVlc3RDb250cm9sTG9ja0d1aWQs DQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgRUZJX1ZBUklBQkxFX05PTl9WT0xB VElMRSB8DQo+ID4gICAgID4gRUZJX1ZBUklBQkxFX0JPT1RTRVJWSUNFX0FDQ0VTUyB8IEVGSV9W QVJJQUJMRV9SVU5USU1FX0FDQ0VTUywNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAg ICBzaXplb2YgKERhdGEpLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICZEYXRh DQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiAgICAgPiArICBtTW9y TG9ja1Bhc3NUaHJ1ID0gRkFMU0U7DQo+ID4gICAgID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiAg ICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgVGhpcyBz ZXJ2aWNlIGlzIGFuIE1vckxvY2sgY2hlY2tlciBoYW5kbGVyIGZvciB0aGUgU2V0VmFyaWFibGUo KS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtICBWYXJpYWJsZU5hbWUgdGhlIG5h bWUgb2YgdGhlIHZlbmRvcidzIHZhcmlhYmxlLCBhcyBhDQo+ID4gICAgID4gKyAgICAgICAgICAg ICAgICAgICAgICAgTnVsbC1UZXJtaW5hdGVkIFVuaWNvZGUgU3RyaW5nDQo+ID4gICAgID4gKyAg QHBhcmFtICBWZW5kb3JHdWlkICAgVW5pZnkgaWRlbnRpZmllciBmb3IgdmVuZG9yLg0KPiA+ICAg ICA+ICsgIEBwYXJhbSAgQXR0cmlidXRlcyAgIFBvaW50IHRvIG1lbW9yeSBsb2NhdGlvbiB0byBy ZXR1cm4gdGhlIGF0dHJpYnV0ZXMNCj4gb2YNCj4gPiAgICAgPiB2YXJpYWJsZS4gSWYgdGhlIHBv aW50DQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgaXMgTlVMTCwgdGhlIHBhcmFt ZXRlciB3b3VsZCBiZSBpZ25vcmVkLg0KPiA+ICAgICA+ICsgIEBwYXJhbSAgRGF0YVNpemUgICAg IFRoZSBzaXplIGluIGJ5dGVzIG9mIERhdGEtQnVmZmVyLg0KPiA+ICAgICA+ICsgIEBwYXJhbSAg RGF0YSAgICAgICAgIFBvaW50IHRvIHRoZSBjb250ZW50IG9mIHRoZSB2YXJpYWJsZS4NCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKyAgQHJldHZhbCAgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUg TW9yTG9jayBjaGVjayBwYXNzLCBhbmQgVmFyaWFibGUNCj4gZHJpdmVyDQo+ID4gY2FuDQo+ID4g ICAgID4gc3RvcmUgdGhlIHZhcmlhYmxlIGRhdGEuDQo+ID4gICAgID4gKyAgQHJldHZhbCAgRUZJ X0lOVkFMSURfUEFSQU1FVEVSICBUaGUgTW9yTG9jayBkYXRhIG9yIGRhdGEgc2l6ZSBvcg0KPiA+ ICAgICA+IGF0dHJpYnV0ZXMgaXMgbm90IGFsbG93ZWQuDQo+ID4gICAgID4gKyAgQHJldHZhbCAg RUZJX0FDQ0VTU19ERU5JRUQgICAgICBUaGUgTW9yTG9jayBpcyBsb2NrZWQuDQo+ID4gICAgID4g KyAgQHJldHZhbCAgRUZJX1dSSVRFX1BST1RFQ1RFRCAgICBUaGUgTW9yTG9jayBkZWxldGlvbiBp cyBub3QgYWxsb3dlZC4NCj4gPiAgICAgPiArICBAcmV0dmFsICBFRklfQUxSRUFEWV9TVEFSVEVE ICAgIFRoZSBNb3JMb2NrIHZhcmlhYmxlIGlzIGhhbmRsZWQNCj4gaW5zaWRlDQo+ID4gdGhpcw0K PiA+ICAgICA+IGZ1bmN0aW9uLg0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVmFyaWFibGUgZHJpdmVyIGNhbiBqdXN0IHJldHVybiBFRklfU1VDQ0VTUy4NCj4g PiAgICAgPiArKiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4gPiAgICAgPiArU2V0VmFyaWFi bGVDaGVja0hhbmRsZXJNb3JMb2NrICgNCj4gPiAgICAgPiArICBJTiBDSEFSMTYgICAgKlZhcmlh YmxlTmFtZSwNCj4gPiAgICAgPiArICBJTiBFRklfR1VJRCAgKlZlbmRvckd1aWQsDQo+ID4gICAg ID4gKyAgSU4gVUlOVDMyICAgIEF0dHJpYnV0ZXMsDQo+ID4gICAgID4gKyAgSU4gVUlOVE4gICAg IERhdGFTaXplLA0KPiA+ICAgICA+ICsgIElOIFZPSUQgICAgICAqRGF0YQ0KPiA+ICAgICA+ICsg ICkNCj4gPiAgICAgPiArew0KPiA+ICAgICA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBCYXNpYyBDaGVjaw0KPiA+ ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgaWYgKChBdHRyaWJ1dGVzID09IDApIHx8IChEYXRh U2l6ZSA9PSAwKSB8fCAoRGF0YSA9PSBOVUxMKSkgew0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAg ICAgPiArICAgIC8vIFBlcm1pdCBkZWxldGlvbiBmb3IgcGFzc3RocnUgcmVxdWVzdCwgZGVueSBp dCBvdGhlcndpc2UuDQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgcmV0dXJuIG1N b3JMb2NrUGFzc1RocnUgPyBFRklfU1VDQ0VTUyA6IEVGSV9XUklURV9QUk9URUNURUQ7DQo+ID4g ICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBpZiAoKEF0dHJpYnV0ZXMgIT0g KEVGSV9WQVJJQUJMRV9OT05fVk9MQVRJTEUgfA0KPiA+ICAgICA+IEVGSV9WQVJJQUJMRV9CT09U U0VSVklDRV9BQ0NFU1MgfA0KPiBFRklfVkFSSUFCTEVfUlVOVElNRV9BQ0NFU1MpKQ0KPiA+IHx8 DQo+ID4gICAgID4gKyAgICAgICgoRGF0YVNpemUgIT0gTU9SX0xPQ0tfVjFfU0laRSkgJiYgKERh dGFTaXplICE9DQo+ID4gICAgID4gTU9SX0xPQ0tfVjJfS0VZX1NJWkUpKSkNCj4gPiAgICAgPiAr ICB7DQo+ID4gICAgID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICAg ICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBE byBub3QgY2hlY2sgaWYgdGhlIHJlcXVlc3QgaXMgcGFzc3RocnUuDQo+ID4gICAgID4gKyAgLy8N Cj4gPiAgICAgPiArICBpZiAobU1vckxvY2tQYXNzVGhydSkgew0KPiA+ICAgICA+ICsgICAgcmV0 dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgaWYgKG1Nb3JMb2NrU3RhdGUgPT0gTW9yTG9ja1N0YXRlVW5sb2NrZWQpIHsNCj4gPiAgICAg PiArICAgIC8vDQo+ID4gICAgID4gKyAgICAvLyBJbiBVbmxvY2tlZCBTdGF0ZQ0KPiA+ICAgICA+ ICsgICAgLy8NCj4gPiAgICAgPiArICAgIGlmIChEYXRhU2l6ZSA9PSBNT1JfTE9DS19WMV9TSVpF KSB7DQo+ID4gICAgID4gKyAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgIC8vIFYxIC0gbG9jayBw ZXJtYW5lbnRseQ0KPiA+ICAgICA+ICsgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICBpZiAoKihV SU5UOCAqKURhdGEgPT0gTU9SX0xPQ0tfREFUQV9VTkxPQ0tFRCkgew0KPiA+ICAgICA+ICsgICAg ICAgIC8vDQo+ID4gICAgID4gKyAgICAgICAgLy8gVW5sb2NrDQo+ID4gICAgID4gKyAgICAgICAg Ly8NCj4gPiAgICAgPiArICAgICAgICBTdGF0dXMgPSBTZXRNb3JMb2NrVmFyaWFibGUgKE1PUl9M T0NLX0RBVEFfVU5MT0NLRUQpOw0KPiA+ICAgICA+ICsgICAgICAgIGlmICghRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ID4gICAgID4gKyAgICAgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAgICAg Ly8gcmV0dXJuIEVGSV9BTFJFQURZX1NUQVJURUQgdG8gc2tpcCB2YXJpYWJsZSBzZXQuDQo+ID4g ICAgID4gKyAgICAgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAgICAgcmV0dXJuIEVGSV9BTFJF QURZX1NUQVJURUQ7DQo+ID4gICAgID4gKyAgICAgICAgfSBlbHNlIHsNCj4gPiAgICAgPiArICAg ICAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgICAgICAvLyBTZXRWYXIgZmFpbA0KPiA+ICAgICA+ ICsgICAgICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgICAgIHJldHVybiBTdGF0dXM7DQo+ID4g ICAgID4gKyAgICAgICAgfQ0KPiA+ICAgICA+ICsgICAgICB9IGVsc2UgaWYgKCooVUlOVDggKilE YXRhID09DQo+IE1PUl9MT0NLX0RBVEFfTE9DS0VEX1dJVEhPVVRfS0VZKQ0KPiA+IHsNCj4gPiAg ICAgPiArICAgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAgIC8vIExvY2sgd2l0aG91dCBrZXkN Cj4gPiAgICAgPiArICAgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAgIFN0YXR1cyA9IFNldE1v ckxvY2tWYXJpYWJsZQ0KPiA+IChNT1JfTE9DS19EQVRBX0xPQ0tFRF9XSVRIT1VUX0tFWSk7DQo+ ID4gICAgID4gKyAgICAgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiAr ICAgICAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgICAgICAvLyBMb2NrIHN1Y2Nlc3MNCj4gPiAg ICAgPiArICAgICAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgICAgICBtTW9yTG9ja1N0YXRlID0g TW9yTG9ja1N0YXRlTG9ja2VkOw0KPiA+ICAgICA+ICsgICAgICAgICAgLy8NCj4gPiAgICAgPiAr ICAgICAgICAgIC8vIHJldHVybiBFRklfQUxSRUFEWV9TVEFSVEVEIHRvIHNraXAgdmFyaWFibGUg c2V0Lg0KPiA+ICAgICA+ICsgICAgICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgICAgIHJldHVy biBFRklfQUxSRUFEWV9TVEFSVEVEOw0KPiA+ICAgICA+ICsgICAgICAgIH0gZWxzZSB7DQo+ID4g ICAgID4gKyAgICAgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAgICAgLy8gU2V0VmFyIGZhaWwN Cj4gPiAgICAgPiArICAgICAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgICAgICByZXR1cm4gU3Rh dHVzOw0KPiA+ICAgICA+ICsgICAgICAgIH0NCj4gPiAgICAgPiArICAgICAgfSBlbHNlIHsNCj4g PiAgICAgPiArICAgICAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICAgICA+ ICsgICAgICB9DQo+ID4gICAgID4gKyAgICB9IGVsc2UgaWYgKERhdGFTaXplID09IE1PUl9MT0NL X1YyX0tFWV9TSVpFKSB7DQo+ID4gICAgID4gKyAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgIC8v IFYyIGxvY2sgYW5kIHByb3Zpc2lvbiB0aGUga2V5DQo+ID4gICAgID4gKyAgICAgIC8vDQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAvLyBOZWVkIHNl dCBoZXJlIGJlY2F1c2UgdGhlIGRhdGEgdmFsdWUgb24gZmxhc2ggaXMgZGlmZmVyZW50DQo+ID4g ICAgID4gKyAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgIFN0YXR1cyA9IFNldE1vckxvY2tWYXJp YWJsZSAoTU9SX0xPQ0tfREFUQV9MT0NLRURfV0lUSF9LRVkpOw0KPiA+ICAgICA+ICsgICAgICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAgID4gKyAgICAgICAgLy8NCj4gPiAgICAg PiArICAgICAgICAvLyBTZXRWYXIgZmFpbCwgZG8gbm90IHByb3Zpc2lvbiB0aGUga2V5DQo+ID4g ICAgID4gKyAgICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgICByZXR1cm4gU3RhdHVzOw0KPiA+ ICAgICA+ICsgICAgICB9IGVsc2Ugew0KPiA+ICAgICA+ICsgICAgICAgIC8vDQo+ID4gICAgID4g KyAgICAgICAgLy8gTG9jayBzdWNjZXNzLCBwcm92aXNpb24gdGhlIGtleQ0KPiA+ICAgICA+ICsg ICAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgICAgbU1vckxvY2tLZXlFbXB0eSA9IEZBTFNFOw0K PiA+ICAgICA+ICsgICAgICAgIENvcHlNZW0gKG1Nb3JMb2NrS2V5LCBEYXRhLCBNT1JfTE9DS19W Ml9LRVlfU0laRSk7DQo+ID4gICAgID4gKyAgICAgICAgbU1vckxvY2tTdGF0ZSA9IE1vckxvY2tT dGF0ZUxvY2tlZDsNCj4gPiAgICAgPiArICAgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAgIC8v IHJldHVybiBFRklfQUxSRUFEWV9TVEFSVEVEIHRvIHNraXAgdmFyaWFibGUgc2V0Lg0KPiA+ICAg ICA+ICsgICAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgICAgcmV0dXJuIEVGSV9BTFJFQURZX1NU QVJURUQ7DQo+ID4gICAgID4gKyAgICAgIH0NCj4gPiAgICAgPiArICAgIH0gZWxzZSB7DQo+ID4g ICAgID4gKyAgICAgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ICAgICA+ICsgICAgICByZXR1cm4gRUZJ X09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKyAgfSBlbHNl IHsNCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICAvLyBJbiBMb2NrZWQgU3RhdGUN Cj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICBpZiAobU1vckxvY2tLZXlFbXB0eSB8 fCAoRGF0YVNpemUgIT0gTU9SX0xPQ0tfVjJfS0VZX1NJWkUpKSB7DQo+ID4gICAgID4gKyAgICAg IHJldHVybiBFRklfQUNDRVNTX0RFTklFRDsNCj4gPiAgICAgPiArICAgIH0NCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyAgICBpZiAoKENvbXBhcmVNZW0gKERhdGEsIG1Nb3JMb2NrS2V5LCBNT1Jf TE9DS19WMl9LRVlfU0laRSkgPT0NCj4gMCkpDQo+ID4gew0KPiA+ICAgICA+ICsgICAgICAvLw0K PiA+ICAgICA+ICsgICAgICAvLyBLZXkgbWF0Y2ggLSB1bmxvY2sNCj4gPiAgICAgPiArICAgICAg Ly8NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgIC8v IE5lZWQgc2V0IGhlcmUgYmVjYXVzZSB0aGUgZGF0YSB2YWx1ZSBvbiBmbGFzaCBpcyBkaWZmZXJl bnQNCj4gPiAgICAgPiArICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgU3RhdHVzID0gU2V0TW9y TG9ja1ZhcmlhYmxlIChNT1JfTE9DS19EQVRBX1VOTE9DS0VEKTsNCj4gPiAgICAgPiArICAgICAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICAgICA+ICsgICAgICAgIC8vDQo+ID4gICAg ID4gKyAgICAgICAgLy8gU2V0VmFyIGZhaWwNCj4gPiAgICAgPiArICAgICAgICAvLw0KPiA+ICAg ICA+ICsgICAgICAgIHJldHVybiBTdGF0dXM7DQo+ID4gICAgID4gKyAgICAgIH0gZWxzZSB7DQo+ ID4gICAgID4gKyAgICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgICAvLyBVbmxvY2sgU3VjY2Vz cw0KPiA+ICAgICA+ICsgICAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgICAgbU1vckxvY2tTdGF0 ZSAgICA9IE1vckxvY2tTdGF0ZVVubG9ja2VkOw0KPiA+ICAgICA+ICsgICAgICAgIG1Nb3JMb2Nr S2V5RW1wdHkgPSBUUlVFOw0KPiA+ICAgICA+ICsgICAgICAgIFplcm9NZW0gKG1Nb3JMb2NrS2V5 LCBzaXplb2YgKG1Nb3JMb2NrS2V5KSk7DQo+ID4gICAgID4gKyAgICAgICAgLy8NCj4gPiAgICAg PiArICAgICAgICAvLyByZXR1cm4gRUZJX0FMUkVBRFlfU1RBUlRFRCB0byBza2lwIHZhcmlhYmxl IHNldC4NCj4gPiAgICAgPiArICAgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAgIHJldHVybiBF RklfQUxSRUFEWV9TVEFSVEVEOw0KPiA+ICAgICA+ICsgICAgICB9DQo+ID4gICAgID4gKyAgICB9 IGVsc2Ugew0KPiA+ICAgICA+ICsgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAvLyBLZXkgbWlz bWF0Y2ggLSBQcmV2ZW50IERpY3Rpb25hcnkgQXR0YWNrDQo+ID4gICAgID4gKyAgICAgIC8vDQo+ ID4gICAgID4gKyAgICAgIG1Nb3JMb2NrU3RhdGUgICAgPSBNb3JMb2NrU3RhdGVMb2NrZWQ7DQo+ ID4gICAgID4gKyAgICAgIG1Nb3JMb2NrS2V5RW1wdHkgPSBUUlVFOw0KPiA+ICAgICA+ICsgICAg ICBaZXJvTWVtIChtTW9yTG9ja0tleSwgc2l6ZW9mIChtTW9yTG9ja0tleSkpOw0KPiA+ICAgICA+ ICsgICAgICByZXR1cm4gRUZJX0FDQ0VTU19ERU5JRUQ7DQo+ID4gICAgID4gKyAgICB9DQo+ID4g ICAgID4gKyAgfQ0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4g PiAgICAgPiArICBUaGlzIHNlcnZpY2UgaXMgYW4gTU9SL01vckxvY2sgY2hlY2tlciBoYW5kbGVy IGZvciB0aGUgU2V0VmFyaWFibGUoKS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFt W2luXSAgVmFyaWFibGVOYW1lIHRoZSBuYW1lIG9mIHRoZSB2ZW5kb3IncyB2YXJpYWJsZSwgYXMg YQ0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBOdWxsLVRlcm1pbmF0ZWQg VW5pY29kZSBTdHJpbmcNCj4gPiAgICAgPiArICBAcGFyYW1baW5dICBWZW5kb3JHdWlkICAgVW5p ZnkgaWRlbnRpZmllciBmb3IgdmVuZG9yLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gIEF0dHJp YnV0ZXMgICBBdHRyaWJ1dGVzIGJpdG1hc2sgdG8gc2V0IGZvciB0aGUgdmFyaWFibGUuDQo+ID4g ICAgID4gKyAgQHBhcmFtW2luXSAgRGF0YVNpemUgICAgIFRoZSBzaXplIGluIGJ5dGVzIG9mIERh dGEtQnVmZmVyLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gIERhdGEgICAgICAgICBQb2ludCB0 byB0aGUgY29udGVudCBvZiB0aGUgdmFyaWFibGUuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsg IEByZXR2YWwgIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIE1PUi9Nb3JMb2NrIGNoZWNrIHBh c3MsIGFuZA0KPiBWYXJpYWJsZQ0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZHJpdmVyIGNhbiBzdG9yZSB0aGUgdmFyaWFibGUgZGF0YS4NCj4gPiAgICAgPiAr ICBAcmV0dmFsICBFRklfSU5WQUxJRF9QQVJBTUVURVIgIFRoZSBNT1IvTW9yTG9jayBkYXRhIG9y IGRhdGENCj4gc2l6ZQ0KPiA+IG9yDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBhdHRyaWJ1dGVzIGlzIG5vdCBhbGxvd2VkIGZvciBNT1IgdmFyaWFibGUuDQo+ ID4gICAgID4gKyAgQHJldHZhbCAgRUZJX0FDQ0VTU19ERU5JRUQgICAgICBUaGUgTU9SL01vckxv Y2sgaXMgbG9ja2VkLg0KPiA+ICAgICA+ICsgIEByZXR2YWwgIEVGSV9BTFJFQURZX1NUQVJURUQg ICAgVGhlIE1vckxvY2sgdmFyaWFibGUgaXMgaGFuZGxlZA0KPiBpbnNpZGUNCj4gPiB0aGlzDQo+ ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbi4gVmFy aWFibGUgZHJpdmVyIGNhbiBqdXN0IHJldHVybg0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRUZJX1NVQ0NFU1MuDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ ICtFRklfU1RBVFVTDQo+ID4gICAgID4gK1NldFZhcmlhYmxlQ2hlY2tIYW5kbGVyTW9yICgNCj4g PiAgICAgPiArICBJTiBDSEFSMTYgICAgKlZhcmlhYmxlTmFtZSwNCj4gPiAgICAgPiArICBJTiBF RklfR1VJRCAgKlZlbmRvckd1aWQsDQo+ID4gICAgID4gKyAgSU4gVUlOVDMyICAgIEF0dHJpYnV0 ZXMsDQo+ID4gICAgID4gKyAgSU4gVUlOVE4gICAgIERhdGFTaXplLA0KPiA+ICAgICA+ICsgIElO IFZPSUQgICAgICAqRGF0YQ0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0KPiA+ICAgICA+ ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gZG8gbm90IGhhbmRsZSBub24tTU9SIHZhcmlhYmxlDQo+ ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBpZiAoIUlzQW55TW9yVmFyaWFibGUgKFZhcmlh YmxlTmFtZSwgVmVuZG9yR3VpZCkpIHsNCj4gPiAgICAgPiArICAgIHJldHVybiBFRklfU1VDQ0VT UzsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vIFBlcm1pdCBk ZWxldGlvbiB3aGVuIHBvbGljeSBpcyBkaXNhYmxlZC4NCj4gPiAgICAgPiArICBpZiAoIUlzVmFy aWFibGVQb2xpY3lFbmFibGVkICgpICYmICgoQXR0cmlidXRlcyA9PSAwKSB8fCAoRGF0YVNpemUg PT0gMCkpKSB7DQo+ID4gICAgID4gKyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gICAgID4g KyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIE1vckxv Y2sgdmFyaWFibGUNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIGlmIChJc01vckxvY2tW YXJpYWJsZSAoVmFyaWFibGVOYW1lLCBWZW5kb3JHdWlkKSkgew0KPiA+ICAgICA+ICsgICAgcmV0 dXJuIFNldFZhcmlhYmxlQ2hlY2tIYW5kbGVyTW9yTG9jayAoDQo+ID4gICAgID4gKyAgICAgICAg ICAgICBWYXJpYWJsZU5hbWUsDQo+ID4gICAgID4gKyAgICAgICAgICAgICBWZW5kb3JHdWlkLA0K PiA+ICAgICA+ICsgICAgICAgICAgICAgQXR0cmlidXRlcywNCj4gPiAgICAgPiArICAgICAgICAg ICAgIERhdGFTaXplLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgRGF0YQ0KPiA+ICAgICA+ICsg ICAgICAgICAgICAgKTsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsg IC8vDQo+ID4gICAgID4gKyAgLy8gTW9yIFZhcmlhYmxlDQo+ID4gICAgID4gKyAgLy8NCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBQZXJtaXQgZGVsZXRpb24g Zm9yIHBhc3N0aHJ1IHJlcXVlc3QuDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBpZiAo KChBdHRyaWJ1dGVzID09IDApIHx8IChEYXRhU2l6ZSA9PSAwKSkgJiYgbU1vclBhc3NUaHJ1KSB7 DQo+ID4gICAgID4gKyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gICAgID4gKyAgfQ0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIEJhc2ljIENoZWNrDQo+ ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBpZiAoKEF0dHJpYnV0ZXMgIT0gKEVGSV9WQVJJ QUJMRV9OT05fVk9MQVRJTEUgfA0KPiA+ICAgICA+IEVGSV9WQVJJQUJMRV9CT09UU0VSVklDRV9B Q0NFU1MgfA0KPiBFRklfVkFSSUFCTEVfUlVOVElNRV9BQ0NFU1MpKQ0KPiA+IHx8DQo+ID4gICAg ID4gKyAgICAgIChEYXRhU2l6ZSAhPSBzaXplb2YgKFVJTlQ4KSkgfHwNCj4gPiAgICAgPiArICAg ICAgKERhdGEgPT0gTlVMTCkpDQo+ID4gICAgID4gKyAgew0KPiA+ICAgICA+ICsgICAgcmV0dXJu IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsgIGlmIChtTW9yTG9ja1N0YXRlID09IE1vckxvY2tTdGF0ZUxvY2tlZCkgew0KPiA+ ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIC8vIElmIGxvY2ssIGRlbnkgYWNjZXNzDQo+ ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgcmV0dXJuIEVGSV9BQ0NFU1NfREVOSUVE Ow0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAg PiArICAvLyBncmFudCBhY2Nlc3MNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIHJldHVy biBFRklfU1VDQ0VTUzsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoq DQo+ID4gICAgID4gKyAgSW5pdGlhbGl6YXRpb24gZm9yIE1PUiBDb250cm9sIExvY2suDQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgIE1vckxvY2sgaW5p dGlhbGl6YXRpb24gc3VjY2Vzcy4NCj4gPiAgICAgPiArICBAcmV0dXJuIE90aGVycyAgICAgICAg ICBTb21lIGVycm9yIG9jY3Vycy4NCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK0VGSV9TVEFU VVMNCj4gPiAgICAgPiArTW9yTG9ja0luaXQgKA0KPiA+ICAgICA+ICsgIFZPSUQNCj4gPiAgICAg PiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBtTW9yTG9ja0luaXRpYWxpemF0aW9u UmVxdWlyZWQgPSBUUlVFOw0KPiA+ICAgICA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiAg ICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgRGVsYXll ZCBpbml0aWFsaXphdGlvbiBmb3IgTU9SIENvbnRyb2wgTG9jayBhdCBFbmRPZkR4ZS4NCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKyAgVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhbnkgb3BlcmF0aW9u cyBxdWV1ZWQgYnkgTW9yTG9ja0luaXQoKS4NCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK1ZP SUQNCj4gPiAgICAgPiArTW9yTG9ja0luaXRBdEVuZE9mRHhlICgNCj4gPiAgICAgPiArICBWT0lE DQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgVUlOVE4gICAgICAg ICAgICAgICAgICBNb3JTaXplOw0KPiA+ICAgICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAg TW9yU3RhdHVzOw0KPiA+ICAgICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgU3RhdHVzOw0K PiA+ICAgICA+ICsgIFZBUklBQkxFX1BPTElDWV9FTlRSWSAgKk5ld1BvbGljeTsNCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyAgaWYgKCFtTW9yTG9ja0luaXRpYWxpemF0aW9uUmVxdWlyZWQpIHsN Cj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICAvLyBUaGUgRUZJX1NNTV9GQVVMVF9U T0xFUkFOVF9XUklURV9QUk9UT0NPTCBoYXMgbmV2ZXINCj4gYmVlbg0KPiA+ICAgICA+IGluc3Rh bGxlZCwgdGh1cw0KPiA+ICAgICA+ICsgICAgLy8gdGhlIHZhcmlhYmxlIHdyaXRlIHNlcnZpY2Ug aXMgdW5hdmFpbGFibGUuIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4NCj4gPiAgICAgPiArICAg IC8vDQo+ID4gICAgID4gKyAgICBBU1NFUlQgKEZBTFNFKTsNCj4gPiAgICAgPiArICAgIHJldHVy bjsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAg ID4gKyAgLy8gQ2hlY2sgaWYgdGhlIE1PUiB2YXJpYWJsZSBleGlzdHMuDQo+ID4gICAgID4gKyAg Ly8NCj4gPiAgICAgPiArICBNb3JTaXplICAgPSAwOw0KPiA+ICAgICA+ICsgIE1vclN0YXR1cyA9 IFZhcmlhYmxlU2VydmljZUdldFZhcmlhYmxlICgNCj4gPiAgICAgPiArICAgICAgICAgICAgICAg IE1FTU9SWV9PVkVSV1JJVEVfUkVRVUVTVF9WQVJJQUJMRV9OQU1FLA0KPiA+ICAgICA+ICsgICAg ICAgICAgICAgICAgJmdFZmlNZW1vcnlPdmVyd3JpdGVDb250cm9sRGF0YUd1aWQsDQo+ID4gICAg ID4gKyAgICAgICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLy8gQXR0cmlidXRlcw0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgJk1vclNpemUsDQo+ ID4gICAgID4gKyAgICAgICAgICAgICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLy8gRGF0YQ0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgKTsNCj4gPiAgICAg PiArICAvLw0KPiA+ICAgICA+ICsgIC8vIFdlIHByb3ZpZGVkIGEgemVyby1zaXplZCBidWZmZXIs IHNvIHRoZSBhYm92ZSBjYWxsIGNhbiBuZXZlciBzdWNjZWVkLg0KPiA+ICAgICA+ICsgIC8vDQo+ ID4gICAgID4gKyAgQVNTRVJUIChFRklfRVJST1IgKE1vclN0YXR1cykpOw0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICBpZiAoTW9yU3RhdHVzID09IEVGSV9CVUZGRVJfVE9PX1NNQUxMKSB7DQo+ ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgLy8gVGhlIE1PUiB2YXJpYWJsZSBleGlz dHMuDQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgLy8gU29tZSBPU2VzIGRvbid0 IGZvbGxvdyB0aGUgVENHJ3MgUGxhdGZvcm0gUmVzZXQgQXR0YWNrIE1pdGlnYXRpb24NCj4gPiBz cGVjDQo+ID4gICAgID4gKyAgICAvLyBpbiB0aGF0IHRoZSBPUyBzaG91bGQgbmV2ZXIgY3JlYXRl IHRoZSBNT1IgdmFyaWFibGUsIG9ubHkgcmVhZCBhbmQNCj4gPiB3cml0ZQ0KPiA+ICAgICA+ICsg ICAgLy8gaXQgLS0gdGhlc2UgT1NlcyAodW5pbnRlbnRpb25hbGx5KSBjcmVhdGUgTU9SIGlmIHRo ZSBwbGF0Zm9ybQ0KPiBmaXJtd2FyZQ0KPiA+ICAgICA+ICsgICAgLy8gZG9lcyBub3QgcHJvZHVj ZSBpdC4gV2hldGhlciB0aGlzIGlzIHRoZSBjYXNlIChmcm9tIHRoZSBsYXN0IE9TIGJvb3QpDQo+ ID4gICAgID4gKyAgICAvLyBjYW4gYmUgZGVkdWNlZCBmcm9tIHRoZSBhYnNlbmNlIG9mIHRoZSBU Q0cgLyBUQ0cyIHByb3RvY29scywgYXMNCj4gPiBlZGsyJ3MNCj4gPiAgICAgPiArICAgIC8vIE1P UiBpbXBsZW1lbnRhdGlvbiBkZXBlbmRzIG9uIChvbmUgb2YpIHRob3NlIHByb3RvY29scy4NCj4g PiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICBpZiAoVmFyaWFibGVIYXZlVGNnUHJvdG9j b2xzICgpKSB7DQo+ID4gICAgID4gKyAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgIC8vIFRoZSBN T1IgdmFyaWFibGUgb3JpZ2luYXRlcyBmcm9tIHRoZSBwbGF0Zm9ybSBmaXJtd2FyZTsgc2V0IHRo ZQ0KPiA+IE1PUg0KPiA+ICAgICA+ICsgICAgICAvLyBDb250cm9sIExvY2sgdmFyaWFibGUgdG8g cmVwb3J0IHRoZSBsb2NraW5nIGNhcGFiaWxpdHkgdG8gdGhlIE9TLg0KPiA+ICAgICA+ICsgICAg ICAvLw0KPiA+ICAgICA+ICsgICAgICBTZXRNb3JMb2NrVmFyaWFibGUgKDApOw0KPiA+ICAgICA+ ICsgICAgICByZXR1cm47DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsgICAgLy8NCj4gPiAgICAgPiArICAgIC8vIFRoZSBNT1IgdmFyaWFibGUncyBvcmlnaW4gaXMg aW5leHBsaWNhYmxlOyBkZWxldGUgaXQuDQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsg ICAgREVCVUcgKCgNCj4gPiAgICAgPiArICAgICAgREVCVUdfV0FSTiwNCj4gPiAgICAgPiArICAg ICAgIiVhOiBkZWxldGluZyB1bmV4cGVjdGVkIC8gdW5zdXBwb3J0ZWQgdmFyaWFibGUgJWc6JXNc biIsDQo+ID4gICAgID4gKyAgICAgIF9fRlVOQ1RJT05fXywNCj4gPiAgICAgPiArICAgICAgJmdF ZmlNZW1vcnlPdmVyd3JpdGVDb250cm9sRGF0YUd1aWQsDQo+ID4gICAgID4gKyAgICAgIE1FTU9S WV9PVkVSV1JJVEVfUkVRVUVTVF9WQVJJQUJMRV9OQU1FDQo+ID4gICAgID4gKyAgICAgICkpOw0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgIG1Nb3JQYXNzVGhydSA9IFRSVUU7DQo+ID4gICAg ID4gKyAgICBWYXJpYWJsZVNlcnZpY2VTZXRWYXJpYWJsZSAoDQo+ID4gICAgID4gKyAgICAgIE1F TU9SWV9PVkVSV1JJVEVfUkVRVUVTVF9WQVJJQUJMRV9OQU1FLA0KPiA+ICAgICA+ICsgICAgICAm Z0VmaU1lbW9yeU92ZXJ3cml0ZUNvbnRyb2xEYXRhR3VpZCwNCj4gPiAgICAgPiArICAgICAgMCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0dHJpYnV0ZXMNCj4gPiAg ICAgPiArICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERh dGFTaXplDQo+ID4gICAgID4gKyAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvLyBEYXRhDQo+ID4gICAgID4gKyAgICAgICk7DQo+ID4gICAgID4gKyAgICBtTW9y UGFzc1RocnUgPSBGQUxTRTsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gVGhlIE1PUiB2YXJpYWJsZSBpcyBhYnNlbnQ7IHRoZSBw bGF0Zm9ybSBmaXJtd2FyZSBkb2VzIG5vdCBzdXBwb3J0DQo+IGl0Lg0KPiA+ICAgICA+ICsgIC8v IExvY2sgdGhlIHZhcmlhYmxlIHNvIHRoYXQgbm8gb3RoZXIgbW9kdWxlIG1heSBjcmVhdGUgaXQu DQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBOZXdQb2xpY3kgPSBOVUxMOw0KPiA+ICAg ICA+ICsgIFN0YXR1cyAgICA9IENyZWF0ZUJhc2ljVmFyaWFibGVQb2xpY3kgKA0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgICAgJmdFZmlNZW1vcnlPdmVyd3JpdGVDb250cm9sRGF0YUd1aWQsDQo+ ID4gICAgID4gKyAgICAgICAgICAgICAgICBNRU1PUllfT1ZFUldSSVRFX1JFUVVFU1RfVkFSSUFC TEVfTkFNRSwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgIFZBUklBQkxFX1BPTElDWV9OT19N SU5fU0laRSwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgIFZBUklBQkxFX1BPTElDWV9OT19N QVhfU0laRSwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgIFZBUklBQkxFX1BPTElDWV9OT19N VVNUX0FUVFIsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICBWQVJJQUJMRV9QT0xJQ1lfTk9f Q0FOVF9BVFRSLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgVkFSSUFCTEVfUE9MSUNZX1RZ UEVfTE9DS19OT1csDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAmTmV3UG9saWN5DQo+ID4g ICAgID4gKyAgICAgICAgICAgICAgICApOw0KPiA+ICAgICA+ICsgIGlmICghRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ID4gICAgID4gKyAgICBTdGF0dXMgPSBSZWdpc3RlclZhcmlhYmxlUG9saWN5 IChOZXdQb2xpY3kpOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICAgICA+ICsgICAgREVCVUcgKChERUJVR19F UlJPUiwgIiVhIC0gRmFpbGVkIHRvIGxvY2sgdmFyaWFibGUgJXMhICVyXG4iLA0KPiA+ICAgICA+ IF9fRlVOQ1RJT05fXywgTUVNT1JZX09WRVJXUklURV9SRVFVRVNUX1ZBUklBQkxFX05BTUUsDQo+ ID4gU3RhdHVzKSk7DQo+ID4gICAgID4gKyAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0K PiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgaWYgKE5ld1BvbGljeSAh PSBOVUxMKSB7DQo+ID4gICAgID4gKyAgICBGcmVlUG9vbCAoTmV3UG9saWN5KTsNCj4gPiAgICAg PiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gRGVs ZXRlIHRoZSBNT1IgQ29udHJvbCBMb2NrIHZhcmlhYmxlIHRvbyAoc2hvdWxkIGl0IGV4aXN0cyBm b3Igc29tZQ0KPiA+ICAgICA+ICsgIC8vIHJlYXNvbikgYW5kIHByZXZlbnQgb3RoZXIgbW9kdWxl cyBmcm9tIGNyZWF0aW5nIGl0Lg0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgbU1vckxv Y2tQYXNzVGhydSA9IFRSVUU7DQo+ID4gICAgID4gKyAgVmFyaWFibGVTZXJ2aWNlU2V0VmFyaWFi bGUgKA0KPiA+ICAgICA+ICsgICAgTUVNT1JZX09WRVJXUklURV9SRVFVRVNUX0NPTlRST0xfTE9D S19OQU1FLA0KPiA+ICAgICA+ICsgICAgJmdFZmlNZW1vcnlPdmVyd3JpdGVSZXF1ZXN0Q29udHJv bExvY2tHdWlkLA0KPiA+ICAgICA+ICsgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvLyBBdHRyaWJ1dGVzDQo+ID4gICAgID4gKyAgICAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGFTaXplDQo+ID4gICAgID4gKyAg ICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGENCj4g PiAgICAgPiArICAgICk7DQo+ID4gICAgID4gKyAgbU1vckxvY2tQYXNzVGhydSA9IEZBTFNFOw0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBOZXdQb2xpY3kgPSBOVUxMOw0KPiA+ICAgICA+ICsg IFN0YXR1cyAgICA9IENyZWF0ZUJhc2ljVmFyaWFibGVQb2xpY3kgKA0KPiA+ICAgICA+ICsgICAg ICAgICAgICAgICAgJmdFZmlNZW1vcnlPdmVyd3JpdGVSZXF1ZXN0Q29udHJvbExvY2tHdWlkLA0K PiA+ICAgICA+ICsgICAgICAgICAgICAgICAgTUVNT1JZX09WRVJXUklURV9SRVFVRVNUX0NPTlRS T0xfTE9DS19OQU1FLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgVkFSSUFCTEVfUE9MSUNZ X05PX01JTl9TSVpFLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgVkFSSUFCTEVfUE9MSUNZ X05PX01BWF9TSVpFLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgVkFSSUFCTEVfUE9MSUNZ X05PX01VU1RfQVRUUiwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgIFZBUklBQkxFX1BPTElD WV9OT19DQU5UX0FUVFIsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICBWQVJJQUJMRV9QT0xJ Q1lfVFlQRV9MT0NLX05PVywNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICZOZXdQb2xpY3kN Cj4gPiAgICAgPiArICAgICAgICAgICAgICAgICk7DQo+ID4gICAgID4gKyAgaWYgKCFFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiArICAgIFN0YXR1cyA9IFJlZ2lzdGVyVmFyaWFibGVQ b2xpY3kgKE5ld1BvbGljeSk7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAgID4gKyAgICBERUJVRyAoKERF QlVHX0VSUk9SLCAiJWEgLSBGYWlsZWQgdG8gbG9jayB2YXJpYWJsZSAlcyEgJXJcbiIsDQo+ID4g ICAgID4gX19GVU5DVElPTl9fLA0KPiBNRU1PUllfT1ZFUldSSVRFX1JFUVVFU1RfQ09OVFJPTF9M T0NLX05BTUUsDQo+ID4gICAgID4gU3RhdHVzKSk7DQo+ID4gICAgID4gKyAgICBBU1NFUlRfRUZJ X0VSUk9SIChTdGF0dXMpOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgaWYgKE5ld1BvbGljeSAhPSBOVUxMKSB7DQo+ID4gICAgID4gKyAgICBGcmVlUG9vbCAoTmV3 UG9saWN5KTsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiBkaWZmIC0t Z2l0DQo+ID4gICAgID4gYS9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3Rl ZC9SdW50aW1lRHhlL1ZhckNoZWNrLmMNCj4gPiAgICAgPiBiL01kZU1vZHVsZVBrZy9Vbml2ZXJz YWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyQ2hlY2suYw0KPiA+ICAgICA+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gICAgID4gaW5kZXggMDAwMDAwMDAwMDAwLi5hOTRiMGIw MmVjMTUNCj4gPiAgICAgPiAtLS0gL2Rldi9udWxsDQo+ID4gICAgID4gKysrDQo+ID4gYi9NZGVN b2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhckNoZWNr LmMNCj4gPiAgICAgPiBAQCAtMCwwICsxLDEwMSBAQA0KPiA+ICAgICA+ICsvKiogQGZpbGUNCj4g PiAgICAgPiArICBJbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXMgZm9yIHZh ciBjaGVjayBwcm90b2NvbA0KPiA+ICAgICA+ICsgIGFuZCB2YXJpYWJsZSBsb2NrIHByb3RvY29s IGJhc2VkIG9uIFZhckNoZWNrTGliLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArQ29weXJpZ2h0 IChjKSAyMDE1LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ ID4gICAgID4gK0NvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLg0KPiA+ICAgICA+ ICtTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsjaW5jbHVkZSAiVmFy aWFibGUuaCINCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIFJlZ2lz dGVyIFNldFZhcmlhYmxlIGNoZWNrIGhhbmRsZXIuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsg IEBwYXJhbVtpbl0gSGFuZGxlciAgICAgICAgICAgIFBvaW50ZXIgdG8gY2hlY2sgaGFuZGxlci4N Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg VGhlIFNldFZhcmlhYmxlIGNoZWNrIGhhbmRsZXIgd2FzDQo+IHJlZ2lzdGVyZWQNCj4gPiAgICAg PiBzdWNjZXNzZnVsbHkuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVU RVIgSGFuZGxlciBpcyBOVUxMLg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX0FDQ0VTU19ERU5J RUQNCj4gRUZJX0VORF9PRl9EWEVfRVZFTlRfR1JPVVBfR1VJRA0KPiA+IG9yDQo+ID4gICAgID4g RUZJX0VWRU5UX0dST1VQX1JFQURZX1RPX0JPT1QgaGFzDQo+ID4gICAgID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeSBiZWVuIHNpZ25hbGVkLg0KPiA+ICAgICA+ICsg IEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgIFRoZXJlIGlzIG5vdCBlbm91Z2ggcmVzb3Vy Y2UgZm9yIHRoZQ0KPiA+ICAgICA+IFNldFZhcmlhYmxlIGNoZWNrIGhhbmRsZXIgcmVnaXN0ZXIg cmVxdWVzdC4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBUaGlz IGludGVyZmFjZSBpcyBub3QgaW1wbGVtZW50ZWQuDQo+ID4gICAgID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGl0IGlzIHVuc3VwcG9ydGVkIGluIFZhckNo ZWNrIHByb3RvY29sIGlmDQo+ID4gYm90aA0KPiA+ICAgICA+IFZhckNoZWNrIGFuZCBTbW1WYXJD aGVjayBwcm90b2NvbHMgYXJlIHByZXNlbnQuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8N Cj4gPiAgICAgPiArRUZJX1NUQVRVUw0KPiA+ICAgICA+ICtFRklBUEkNCj4gPiAgICAgPiArVmFy Q2hlY2tSZWdpc3RlclNldFZhcmlhYmxlQ2hlY2tIYW5kbGVyICgNCj4gPiAgICAgPiArICBJTiBW QVJfQ0hFQ0tfU0VUX1ZBUklBQkxFX0NIRUNLX0hBTkRMRVIgIEhhbmRsZXINCj4gPiAgICAgPiAr ICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgIEFjcXVpcmVMb2NrT25seUF0Qm9vdFRpbWUgKCZtVmFyaWFi bGVNb2R1bGVHbG9iYWwtDQo+ID4gICAgID4gPlZhcmlhYmxlR2xvYmFsLlZhcmlhYmxlU2Vydmlj ZXNMb2NrKTsNCj4gPiAgICAgPiArICBTdGF0dXMgPSBWYXJDaGVja0xpYlJlZ2lzdGVyU2V0VmFy aWFibGVDaGVja0hhbmRsZXIgKEhhbmRsZXIpOw0KPiA+ICAgICA+ICsgIFJlbGVhc2VMb2NrT25s eUF0Qm9vdFRpbWUgKCZtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4gICAgID4gPlZhcmlhYmxl R2xvYmFsLlZhcmlhYmxlU2VydmljZXNMb2NrKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg cmV0dXJuIFN0YXR1czsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoq DQo+ID4gICAgID4gKyAgVmFyaWFibGUgcHJvcGVydHkgc2V0Lg0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICBAcGFyYW1baW5dIE5hbWUgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSB2YXJp YWJsZSBuYW1lLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gR3VpZCAgICAgICAgICAgICAgIFBv aW50ZXIgdG8gdGhlIHZlbmRvciBHVUlELg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gVmFyaWFi bGVQcm9wZXJ0eSAgIFBvaW50ZXIgdG8gdGhlIGlucHV0IHZhcmlhYmxlIHByb3BlcnR5Lg0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUg cHJvcGVydHkgb2YgdmFyaWFibGUgc3BlY2lmaWVkIGJ5IHRoZQ0KPiA+IE5hbWUNCj4gPiAgICAg PiBhbmQgR3VpZCB3YXMgc2V0IHN1Y2Nlc3NmdWxseS4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVG SV9JTlZBTElEX1BBUkFNRVRFUiBOYW1lLCBHdWlkIG9yIFZhcmlhYmxlUHJvcGVydHkgaXMNCj4g PiBOVUxMLA0KPiA+ICAgICA+IG9yIE5hbWUgaXMgYW4gZW1wdHkgc3RyaW5nLA0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHRoZSBmaWVsZHMgb2YgVmFyaWFi bGVQcm9wZXJ0eSBhcmUgbm90IHZhbGlkLg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX0FDQ0VT U19ERU5JRUQNCj4gRUZJX0VORF9PRl9EWEVfRVZFTlRfR1JPVVBfR1VJRA0KPiA+IG9yDQo+ID4g ICAgID4gRUZJX0VWRU5UX0dST1VQX1JFQURZX1RPX0JPT1QgaGFzDQo+ID4gICAgID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeSBiZWVuIHNpZ25hbGVkLg0KPiA+ICAg ICA+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgIFRoZXJlIGlzIG5vdCBlbm91Z2gg cmVzb3VyY2UgZm9yIHRoZQ0KPiA+ICAgICA+IHZhcmlhYmxlIHByb3BlcnR5IHNldCByZXF1ZXN0 Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4g PiAgICAgPiArRUZJQVBJDQo+ID4gICAgID4gK1ZhckNoZWNrVmFyaWFibGVQcm9wZXJ0eVNldCAo DQo+ID4gICAgID4gKyAgSU4gQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAqTmFtZSwNCj4g PiAgICAgPiArICBJTiBFRklfR1VJRCAgICAgICAgICAgICAgICAgICAgICpHdWlkLA0KPiA+ICAg ICA+ICsgIElOIFZBUl9DSEVDS19WQVJJQUJMRV9QUk9QRVJUWSAgKlZhcmlhYmxlUHJvcGVydHkN Cj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBFRklfU1RBVFVTICBT dGF0dXM7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEFjcXVpcmVMb2NrT25seUF0Qm9vdFRp bWUgKCZtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4gICAgID4gPlZhcmlhYmxlR2xvYmFsLlZh cmlhYmxlU2VydmljZXNMb2NrKTsNCj4gPiAgICAgPiArICBTdGF0dXMgPSBWYXJDaGVja0xpYlZh cmlhYmxlUHJvcGVydHlTZXQgKE5hbWUsIEd1aWQsDQo+IFZhcmlhYmxlUHJvcGVydHkpOw0KPiA+ ICAgICA+ICsgIFJlbGVhc2VMb2NrT25seUF0Qm9vdFRpbWUgKCZtVmFyaWFibGVNb2R1bGVHbG9i YWwtDQo+ID4gICAgID4gPlZhcmlhYmxlR2xvYmFsLlZhcmlhYmxlU2VydmljZXNMb2NrKTsNCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiAgICAgPiArfQ0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgVmFyaWFibGUgcHJvcGVydHkg Z2V0Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1baW5dICBOYW1lICAgICAgICAg ICAgICBQb2ludGVyIHRvIHRoZSB2YXJpYWJsZSBuYW1lLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtp bl0gIEd1aWQgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHZlbmRvciBHVUlELg0KPiA+ICAg ICA+ICsgIEBwYXJhbVtvdXRdIFZhcmlhYmxlUHJvcGVydHkgIFBvaW50ZXIgdG8gdGhlIG91dHB1 dCB2YXJpYWJsZSBwcm9wZXJ0eS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHByb3BlcnR5IG9mIHZhcmlhYmxlIHNwZWNpZmllZCBi eSB0aGUNCj4gPiBOYW1lDQo+ID4gICAgID4gYW5kIEd1aWQgd2FzIGdvdCBzdWNjZXNzZnVsbHku DQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgTmFtZSwgR3VpZCBv ciBWYXJpYWJsZVByb3BlcnR5IGlzDQo+ID4gTlVMTCwNCj4gPiAgICAgPiBvciBOYW1lIGlzIGFu IGVtcHR5IHN0cmluZy4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAg ICBUaGUgcHJvcGVydHkgb2YgdmFyaWFibGUgc3BlY2lmaWVkIGJ5IHRoZQ0KPiA+IE5hbWUNCj4g PiAgICAgPiBhbmQgR3VpZCB3YXMgbm90IGZvdW5kLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr KiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4gPiAgICAgPiArRUZJQVBJDQo+ID4gICAgID4g K1ZhckNoZWNrVmFyaWFibGVQcm9wZXJ0eUdldCAoDQo+ID4gICAgID4gKyAgSU4gQ0hBUjE2ICAg ICAgICAgICAgICAgICAgICAgICAgKk5hbWUsDQo+ID4gICAgID4gKyAgSU4gRUZJX0dVSUQgICAg ICAgICAgICAgICAgICAgICAgKkd1aWQsDQo+ID4gICAgID4gKyAgT1VUIFZBUl9DSEVDS19WQVJJ QUJMRV9QUk9QRVJUWSAgKlZhcmlhYmxlUHJvcGVydHkNCj4gPiAgICAgPiArICApDQo+ID4gICAg ID4gK3sNCj4gPiAgICAgPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsgIEFjcXVpcmVMb2NrT25seUF0Qm9vdFRpbWUgKCZtVmFyaWFibGVNb2R1bGVHbG9i YWwtDQo+ID4gICAgID4gPlZhcmlhYmxlR2xvYmFsLlZhcmlhYmxlU2VydmljZXNMb2NrKTsNCj4g PiAgICAgPiArICBTdGF0dXMgPSBWYXJDaGVja0xpYlZhcmlhYmxlUHJvcGVydHlHZXQgKE5hbWUs IEd1aWQsDQo+IFZhcmlhYmxlUHJvcGVydHkpOw0KPiA+ICAgICA+ICsgIFJlbGVhc2VMb2NrT25s eUF0Qm9vdFRpbWUgKCZtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4gICAgID4gPlZhcmlhYmxl R2xvYmFsLlZhcmlhYmxlU2VydmljZXNMb2NrKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg cmV0dXJuIFN0YXR1czsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+IGRpZmYgLS1naXQNCj4gPiAg ICAgPiBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVE eGUvVmFyaWFibGUuYw0KPiA+ICAgICA+IGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJs ZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZS5jDQo+ID4gICAgID4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCj4gPiAgICAgPiBpbmRleCAwMDAwMDAwMDAwMDAuLjE5YjQzMmI3NzJkNw0KPiA+ ICAgICA+IC0tLSAvZGV2L251bGwNCj4gPiAgICAgPiArKysNCj4gYi9NZGVNb2R1bGVQa2cvVW5p dmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlLmMNCj4gPiAgICAg PiBAQCAtMCwwICsxLDQwMzcgQEANCj4gPiAgICAgPiArLyoqIEBmaWxlDQo+ID4gICAgID4gKyAg VGhlIGNvbW1vbiB2YXJpYWJsZSBvcGVyYXRpb24gcm91dGluZXMgc2hhcmVkIGJ5IERYRV9SVU5U SU1FDQo+ID4gdmFyaWFibGUNCj4gPiAgICAgPiArICBtb2R1bGUgYW5kIERYRV9TTU0gdmFyaWFi bGUgbW9kdWxlLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBDYXV0aW9uOiBUaGlzIG1vZHVs ZSByZXF1aXJlcyBhZGRpdGlvbmFsIHJldmlldyB3aGVuIG1vZGlmaWVkLg0KPiA+ICAgICA+ICsg IFRoaXMgZHJpdmVyIHdpbGwgaGF2ZSBleHRlcm5hbCBpbnB1dCAtIHZhcmlhYmxlIGRhdGEuIFRo ZXkgbWF5IGJlIGlucHV0IGluDQo+ID4gU01NDQo+ID4gICAgID4gbW9kZS4NCj4gPiAgICAgPiAr ICBUaGlzIGV4dGVybmFsIGlucHV0IG11c3QgYmUgdmFsaWRhdGVkIGNhcmVmdWxseSB0byBhdm9p ZCBzZWN1cml0eSBpc3N1ZSBsaWtlDQo+ID4gICAgID4gKyAgYnVmZmVyIG92ZXJmbG93LCBpbnRl Z2VyIG92ZXJmbG93Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBWYXJpYWJsZVNlcnZpY2VH ZXROZXh0VmFyaWFibGVOYW1lICgpIGFuZA0KPiA+ICAgICA+IFZhcmlhYmxlU2VydmljZVF1ZXJ5 VmFyaWFibGVJbmZvKCkgYXJlIGV4dGVybmFsIEFQSS4NCj4gPiAgICAgPiArICBUaGV5IG5lZWQg Y2hlY2sgaW5wdXQgcGFyYW1ldGVyLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBWYXJpYWJs ZVNlcnZpY2VHZXRWYXJpYWJsZSgpIGFuZCBWYXJpYWJsZVNlcnZpY2VTZXRWYXJpYWJsZSgpIGFy ZQ0KPiBleHRlcm5hbA0KPiA+IEFQSQ0KPiA+ICAgICA+ICsgIHRvIHJlY2VpdmUgZGF0YXNpemUg YW5kIGRhdGEgYnVmZmVyLiBUaGUgc2l6ZSBzaG91bGQgYmUgY2hlY2tlZCBjYXJlZnVsbHkuDQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFZhcmlhYmxlU2VydmljZVNldFZhcmlhYmxlKCkgc2hv dWxkIGFsc28gY2hlY2sgYXV0aGVudGljYXRlIGRhdGEgdG8NCj4gYXZvaWQNCj4gPiAgICAgPiBi dWZmZXIgb3ZlcmZsb3csDQo+ID4gICAgID4gKyAgaW50ZWdlciBvdmVyZmxvdy4gSXQgc2hvdWxk IGFsc28gY2hlY2sgYXR0cmlidXRlIHRvIGF2b2lkIGF1dGhlbnRpY2F0aW9uDQo+ID4gYnlwYXNz Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAyMiwgSW50 ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ICAgICA+ICsoQykg Q29weXJpZ2h0IDIwMTUtMjAxOCBIZXdsZXR0IFBhY2thcmQgRW50ZXJwcmlzZSBEZXZlbG9wbWVu dCBMUDxCUj4NCj4gPiAgICAgPiArQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24u PEJSPg0KPiA+ICAgICA+ICtDb3B5cmlnaHQgKGMpIDIwMjIsIEFSTSBMaW1pdGVkLiBBbGwgcmln aHRzIHJlc2VydmVkLjxCUj4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gK1NQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsq Ki8NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyNpbmNsdWRlICJWYXJpYWJsZS5oIg0KPiA+ICAg ICA+ICsjaW5jbHVkZSAiVmFyaWFibGVOb25Wb2xhdGlsZS5oIg0KPiA+ICAgICA+ICsjaW5jbHVk ZSAiVmFyaWFibGVQYXJzaW5nLmgiDQo+ID4gICAgID4gKyNpbmNsdWRlICJWYXJpYWJsZVJ1bnRp bWVDYWNoZS5oIg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArVkFSSUFCTEVfTU9EVUxFX0dMT0JB TCAgKm1WYXJpYWJsZU1vZHVsZUdsb2JhbCA9IE5VTEw7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsvLy8NCj4gPiAgICAgPiArLy8vIERlZmluZSBhIG1lbW9yeSBjYWNoZSB0aGF0IGltcHJvdmVz IHRoZSBzZWFyY2ggcGVyZm9ybWFuY2UgZm9yIGENCj4gPiAgICAgPiB2YXJpYWJsZS4NCj4gPiAg ICAgPiArLy8vIEZvciBFbXVOdk1vZGUgPT0gVFJVRSwgaXQgd2lsbCBiZSBlcXVhbCB0byBOb25W b2xhdGlsZVZhcmlhYmxlQmFzZS4NCj4gPiAgICAgPiArLy8vDQo+ID4gICAgID4gK1ZBUklBQkxF X1NUT1JFX0hFQURFUiAgKm1OdlZhcmlhYmxlQ2FjaGUgPSBOVUxMOw0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArLy8vDQo+ID4gICAgID4gKy8vLyBNZW1vcnkgY2FjaGUgb2YgRnYgSGVhZGVyLg0K PiA+ICAgICA+ICsvLy8NCj4gPiAgICAgPiArRUZJX0ZJUk1XQVJFX1ZPTFVNRV9IRUFERVIgICpt TnZGdkhlYWRlckNhY2hlID0gTlVMTDsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8vLw0KPiA+ ICAgICA+ICsvLy8gVGhlIG1lbW9yeSBlbnRyeSB1c2VkIGZvciB2YXJpYWJsZSBzdGF0aXN0aWNz IGRhdGEuDQo+ID4gICAgID4gKy8vLw0KPiA+ICAgICA+ICtWQVJJQUJMRV9JTkZPX0VOVFJZICAq Z1ZhcmlhYmxlSW5mbyA9IE5VTEw7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvLy8NCj4gPiAg ICAgPiArLy8vIFRoZSBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIHBsYXRmb3JtIGhhcyBs ZWZ0IHRoZSBEWEUgcGhhc2Ugb2YNCj4gPiAgICAgPiBleGVjdXRpb24uDQo+ID4gICAgID4gKy8v Lw0KPiA+ICAgICA+ICtCT09MRUFOICBtRW5kT2ZEeGUgPSBGQUxTRTsNCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKy8vLw0KPiA+ICAgICA+ICsvLy8gSXQgaW5kaWNhdGVzIHRoZSB2YXIgY2hlY2sg cmVxdWVzdCBzb3VyY2UuDQo+ID4gICAgID4gKy8vLyBJbiB0aGUgaW1wbGVtZW50YXRpb24sIERY RSBpcyByZWdhcmRlZCBhcyB1bnRydXN0ZWQsIGFuZCBTTU0gaXMNCj4gPiB0cnVzdGVkLg0KPiA+ ICAgICA+ICsvLy8NCj4gPiAgICAgPiArVkFSX0NIRUNLX1JFUVVFU1RfU09VUkNFICBtUmVxdWVz dFNvdXJjZSA9DQo+ID4gVmFyQ2hlY2tGcm9tVW50cnVzdGVkOw0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArLy8NCj4gPiAgICAgPiArLy8gSXQgd2lsbCByZWNvcmQgdGhlIGN1cnJlbnQgYm9vdCBl cnJvciBmbGFnIGJlZm9yZSBFbmRPZkR4ZS4NCj4gPiAgICAgPiArLy8NCj4gPiAgICAgPiArVkFS X0VSUk9SX0ZMQUcgIG1DdXJyZW50Qm9vdFZhckVyckZsYWcgPQ0KPiA+IFZBUl9FUlJPUl9GTEFH X05PX0VSUk9SOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArVkFSSUFCTEVfRU5UUllfUFJPUEVS VFkgIG1WYXJpYWJsZUVudHJ5UHJvcGVydHlbXSA9IHsNCj4gPiAgICAgPiArICB7DQo+ID4gICAg ID4gKyAgICAmZ0Vka2lpVmFyRXJyb3JGbGFnR3VpZCwNCj4gPiAgICAgPiArICAgIFZBUl9FUlJP Ul9GTEFHX05BTUUsDQo+ID4gICAgID4gKyAgICB7DQo+ID4gICAgID4gKyAgICAgIFZBUl9DSEVD S19WQVJJQUJMRV9QUk9QRVJUWV9SRVZJU0lPTiwNCj4gPiAgICAgPiArICAgICAgVkFSX0NIRUNL X1ZBUklBQkxFX1BST1BFUlRZX1JFQURfT05MWSwNCj4gPiAgICAgPiArICAgICAgVkFSSUFCTEVf QVRUUklCVVRFX05WX0JTX1JULA0KPiA+ICAgICA+ICsgICAgICBzaXplb2YgKFZBUl9FUlJPUl9G TEFHKSwNCj4gPiAgICAgPiArICAgICAgc2l6ZW9mIChWQVJfRVJST1JfRkxBRykNCj4gPiAgICAg PiArICAgIH0NCj4gPiAgICAgPiArICB9LA0KPiA+ICAgICA+ICt9Ow0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArQVVUSF9WQVJfTElCX0NPTlRFWFRfSU4gIG1BdXRoQ29udGV4dEluID0gew0KPiA+ ICAgICA+ICsgIEFVVEhfVkFSX0xJQl9DT05URVhUX0lOX1NUUlVDVF9WRVJTSU9OLA0KPiA+ICAg ICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gU3RydWN0U2l6ZSwgVE8gQkUgRklMTEVEDQo+ID4g ICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAwLA0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4g KyAgLy8gTWF4QXV0aFZhcmlhYmxlU2l6ZSwgVE8gQkUgRklMTEVEDQo+ID4gICAgID4gKyAgLy8N Cj4gPiAgICAgPiArICAwLA0KPiA+ICAgICA+ICsgIFZhcmlhYmxlRXhMaWJGaW5kVmFyaWFibGUs DQo+ID4gICAgID4gKyAgVmFyaWFibGVFeExpYkZpbmROZXh0VmFyaWFibGUsDQo+ID4gICAgID4g KyAgVmFyaWFibGVFeExpYlVwZGF0ZVZhcmlhYmxlLA0KPiA+ICAgICA+ICsgIFZhcmlhYmxlRXhM aWJHZXRTY3JhdGNoQnVmZmVyLA0KPiA+ICAgICA+ICsgIFZhcmlhYmxlRXhMaWJDaGVja1JlbWFp bmluZ1NwYWNlRm9yQ29uc2lzdGVuY3ksDQo+ID4gICAgID4gKyAgVmFyaWFibGVFeExpYkF0UnVu dGltZSwNCj4gPiAgICAgPiArfTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gK0FVVEhfVkFSX0xJ Ql9DT05URVhUX09VVCAgbUF1dGhDb250ZXh0T3V0Ow0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr LyoqDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFRoaXMgZnVuY3Rpb24gd3JpdGVzIGRhdGEg dG8gdGhlIEZXSCBhdCB0aGUgY29ycmVjdCBMQkEgZXZlbiBpZiB0aGUgTEJBcw0KPiA+ICAgICA+ ICsgIGFyZSBmcmFnbWVudGVkLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW0gR2xv YmFsICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byBWQVJBSUJMRV9HTE9CQUwgc3RydWN0dXJl Lg0KPiA+ICAgICA+ICsgIEBwYXJhbSBWb2xhdGlsZSAgICAgICAgICAgICAgICBQb2ludCBvdXQg dGhlIFZhcmlhYmxlIGlzIFZvbGF0aWxlIG9yIE5vbi0NCj4gVm9sYXRpbGUuDQo+ID4gICAgID4g KyAgQHBhcmFtIFNldEJ5SW5kZXggICAgICAgICAgICAgIFRSVUUgaWYgdGFyZ2V0IHBvaW50ZXIg aXMgZ2l2ZW4gYXMgaW5kZXguDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZBTFNFIGlmIHRhcmdldCBwb2ludGVyIGlzIGFic29sdXRlLg0KPiA+ICAgICA+ICsg IEBwYXJhbSBGdmIgICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSB3cml0YWJsZSBG VkIgcHJvdG9jb2wuDQo+ID4gICAgID4gKyAgQHBhcmFtIERhdGFQdHJJbmRleCAgICAgICAgICAg IFBvaW50ZXIgdG8gdGhlIERhdGEgZnJvbSB0aGUgZW5kIG9mDQo+ID4gICAgID4gVkFSSUFCTEVf U1RPUkVfSEVBREVSDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdHVyZS4NCj4gPiAgICAgPiArICBAcGFyYW0gRGF0YVNpemUgICAgICAgICAgICAgICAg U2l6ZSBvZiBkYXRhIHRvIGJlIHdyaXR0ZW4uDQo+ID4gICAgID4gKyAgQHBhcmFtIEJ1ZmZlciAg ICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBmcm9tIHdoaWNoIGRhdGEgaXMN Cj4gd3JpdHRlbi4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgIFBhcmFtZXRlcnMgbm90IHZhbGlkLg0KPiA+ICAgICA+ICsgIEByZXR2YWwg RUZJX1VOU1VQUE9SVEVEICAgICAgICBGdmIgaXMgYSBOVUxMIGZvciBOb24tVm9sYXRpbGUgdmFy aWFibGUNCj4gPiAgICAgPiB1cGRhdGUuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfT1VUX09G X1JFU09VUkNFUyAgIFRoZSByZW1haW5pbmcgc2l6ZSBpcyBub3QgZW5vdWdoLg0KPiA+ICAgICA+ ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBWYXJpYWJsZSBzdG9yZSBzdWNjZXNz ZnVsbHkgdXBkYXRlZC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtF RklfU1RBVFVTDQo+ID4gICAgID4gK1VwZGF0ZVZhcmlhYmxlU3RvcmUgKA0KPiA+ICAgICA+ICsg IElOICBWQVJJQUJMRV9HTE9CQUwgICAgICAgICAgICAgICAgICAgICAqR2xvYmFsLA0KPiA+ICAg ICA+ICsgIElOICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWb2xhdGlsZSwN Cj4gPiAgICAgPiArICBJTiAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0 QnlJbmRleCwNCj4gPiAgICAgPiArICBJTiAgRUZJX0ZJUk1XQVJFX1ZPTFVNRV9CTE9DS19QUk9U T0NPTCAgKkZ2YiwNCj4gPiAgICAgPiArICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRGF0YVB0ckluZGV4LA0KPiA+ICAgICA+ICsgIElOICBVSU5UMzIgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBEYXRhU2l6ZSwNCj4gPiAgICAgPiArICBJTiAgVUlOVDggICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlcg0KPiA+ICAgICA+ICsgICkNCj4gPiAg ICAgPiArew0KPiA+ICAgICA+ICsgIEVGSV9GVl9CTE9DS19NQVBfRU5UUlkgICpQdHJCbG9ja01h cEVudHJ5Ow0KPiA+ICAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgIEJsb2NrSW5kZXgy Ow0KPiA+ICAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgIExpbmVhck9mZnNldDsNCj4g PiAgICAgPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICBDdXJyV3JpdGVTaXplOw0KPiA+ICAg ICA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgIEN1cnJXcml0ZVB0cjsNCj4gPiAgICAgPiAr ICBVSU5UOCAgICAgICAgICAgICAgICAgICAqQ3VyckJ1ZmZlcjsNCj4gPiAgICAgPiArICBFRklf TEJBICAgICAgICAgICAgICAgICBMYmFOdW1iZXI7DQo+ID4gICAgID4gKyAgVUlOVE4gICAgICAg ICAgICAgICAgICAgU2l6ZTsNCj4gPiAgICAgPiArICBWQVJJQUJMRV9TVE9SRV9IRUFERVIgICAq Vm9sYXRpbGVCYXNlOw0KPiA+ICAgICA+ICsgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgIEZ2Vm9s SGRyOw0KPiA+ICAgICA+ICsgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgIERhdGFQdHI7DQo+ID4g ICAgID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICBGdlZvbEhkciA9IDA7DQo+ID4gICAgID4gKyAgRGF0YVB0ciAgPSBEYXRhUHRy SW5kZXg7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gQ2hl Y2sgaWYgdGhlIERhdGEgaXMgVm9sYXRpbGUuDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiAr ICBpZiAoIVZvbGF0aWxlICYmICFtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFs LkVtdU52TW9kZSkNCj4gew0KPiA+ICAgICA+ICsgICAgaWYgKEZ2YiA9PSBOVUxMKSB7DQo+ID4g ICAgID4gKyAgICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ID4gICAgID4gKyAgICB9DQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgU3RhdHVzID0gRnZiLT5HZXRQaHlzaWNhbEFkZHJl c3MgKEZ2YiwgJkZ2Vm9sSGRyKTsNCj4gPiAgICAgPiArICAgIEFTU0VSVF9FRklfRVJST1IgKFN0 YXR1cyk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIC8v IERhdGEgUG9pbnRlciBzaG91bGQgcG9pbnQgdG8gdGhlIGFjdHVhbCBBZGRyZXNzIHdoZXJlIGRh dGEgaXMgdG8gYmUNCj4gPiAgICAgPiArICAgIC8vIHdyaXR0ZW4uDQo+ID4gICAgID4gKyAgICAv Lw0KPiA+ICAgICA+ICsgICAgaWYgKFNldEJ5SW5kZXgpIHsNCj4gPiAgICAgPiArICAgICAgRGF0 YVB0ciArPSBtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4gICAgID4gPlZhcmlhYmxlR2xvYmFs Lk5vblZvbGF0aWxlVmFyaWFibGVCYXNlOw0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICAgIGlmICgoRGF0YVB0ciArIERhdGFTaXplKSA+IChGdlZvbEhkciArIG1O dkZ2SGVhZGVyQ2FjaGUtPkZ2TGVuZ3RoKSkgew0KPiA+ICAgICA+ICsgICAgICByZXR1cm4gRUZJ X09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKyAgfSBlbHNl IHsNCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICAvLyBEYXRhIFBvaW50ZXIgc2hv dWxkIHBvaW50IHRvIHRoZSBhY3R1YWwgQWRkcmVzcyB3aGVyZSBkYXRhIGlzIHRvIGJlDQo+ID4g ICAgID4gKyAgICAvLyB3cml0dGVuLg0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAg IGlmIChWb2xhdGlsZSkgew0KPiA+ICAgICA+ICsgICAgICBWb2xhdGlsZUJhc2UgPSAoVkFSSUFC TEVfU1RPUkVfSEVBREVSDQo+ID4gICAgID4gKikoKFVJTlROKW1WYXJpYWJsZU1vZHVsZUdsb2Jh bC0+VmFyaWFibGVHbG9iYWwuVm9sYXRpbGVWYXJpYWJsZUJhc2UpOw0KPiA+ICAgICA+ICsgICAg ICBpZiAoU2V0QnlJbmRleCkgew0KPiA+ICAgICA+ICsgICAgICAgIERhdGFQdHIgKz0gbVZhcmlh YmxlTW9kdWxlR2xvYmFsLQ0KPiA+ID5WYXJpYWJsZUdsb2JhbC5Wb2xhdGlsZVZhcmlhYmxlQmFz ZTsNCj4gPiAgICAgPiArICAgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgICAgaWYg KChEYXRhUHRyICsgRGF0YVNpemUpID4gKChVSU5UTilWb2xhdGlsZUJhc2UgKyBWb2xhdGlsZUJh c2UtPlNpemUpKSB7DQo+ID4gICAgID4gKyAgICAgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VS Q0VTOw0KPiA+ICAgICA+ICsgICAgICB9DQo+ID4gICAgID4gKyAgICB9IGVsc2Ugew0KPiA+ICAg ICA+ICsgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAvLyBFbXVsYXRlZCBub24tdm9sYXRpbGUg dmFyaWFibGUgbW9kZS4NCj4gPiAgICAgPiArICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgaWYg KFNldEJ5SW5kZXgpIHsNCj4gPiAgICAgPiArICAgICAgICBEYXRhUHRyICs9IChVSU5UTiltTnZW YXJpYWJsZUNhY2hlOw0KPiA+ICAgICA+ICsgICAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsgICAgICBpZiAoKERhdGFQdHIgKyBEYXRhU2l6ZSkgPiAoKFVJTlROKW1OdlZhcmlhYmxlQ2Fj aGUgKw0KPiA+IG1OdlZhcmlhYmxlQ2FjaGUtDQo+ID4gICAgID4gPlNpemUpKSB7DQo+ID4gICAg ID4gKyAgICAgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ICAgICA+ICsgICAg ICB9DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgLy8NCj4g PiAgICAgPiArICAgIC8vIElmIFZvbGF0aWxlL0VtdWxhdGVkIE5vbi12b2xhdGlsZSBWYXJpYWJs ZSBqdXN0IGRvIGEgc2ltcGxlIG1lbSBjb3B5Lg0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAg PiArICAgIENvcHlNZW0gKChVSU5UOCAqKShVSU5UTilEYXRhUHRyLCBCdWZmZXIsIERhdGFTaXpl KTsNCj4gPiAgICAgPiArICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiAgICAgPiArICB9DQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gSWYgd2UgYXJlIGhl cmUgd2UgYXJlIGRlYWxpbmcgd2l0aCBOb24tVm9sYXRpbGUgVmFyaWFibGVzLg0KPiA+ICAgICA+ ICsgIC8vDQo+ID4gICAgID4gKyAgTGluZWFyT2Zmc2V0ICA9IChVSU5UTilGdlZvbEhkcjsNCj4g PiAgICAgPiArICBDdXJyV3JpdGVQdHIgID0gKFVJTlROKURhdGFQdHI7DQo+ID4gICAgID4gKyAg Q3VycldyaXRlU2l6ZSA9IERhdGFTaXplOw0KPiA+ICAgICA+ICsgIEN1cnJCdWZmZXIgICAgPSBC dWZmZXI7DQo+ID4gICAgID4gKyAgTGJhTnVtYmVyICAgICA9IDA7DQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsgIGlmIChDdXJyV3JpdGVQdHIgPCBMaW5lYXJPZmZzZXQpIHsNCj4gPiAgICAgPiAr ICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArICBmb3IgKFB0ckJsb2NrTWFwRW50cnkgPSBtTnZGdkhlYWRlckNh Y2hlLT5CbG9ja01hcDsNCj4gPiBQdHJCbG9ja01hcEVudHJ5LQ0KPiA+ICAgICA+ID5OdW1CbG9j a3MgIT0gMDsgUHRyQmxvY2tNYXBFbnRyeSsrKSB7DQo+ID4gICAgID4gKyAgICBmb3IgKEJsb2Nr SW5kZXgyID0gMDsgQmxvY2tJbmRleDIgPCBQdHJCbG9ja01hcEVudHJ5LT5OdW1CbG9ja3M7DQo+ ID4gICAgID4gQmxvY2tJbmRleDIrKykgew0KPiA+ICAgICA+ICsgICAgICAvLw0KPiA+ICAgICA+ ICsgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIFZhcmlhYmxlIFdyaXRlcyBhcmUgc3Bhbm5p bmcgdGhyb3VnaCBtdWx0aXBsZQ0KPiA+ICAgICA+ICsgICAgICAvLyBibG9ja3MuDQo+ID4gICAg ID4gKyAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgIGlmICgoQ3VycldyaXRlUHRyID49IExpbmVh ck9mZnNldCkgJiYgKEN1cnJXcml0ZVB0ciA8IExpbmVhck9mZnNldCArDQo+ID4gICAgID4gUHRy QmxvY2tNYXBFbnRyeS0+TGVuZ3RoKSkgew0KPiA+ICAgICA+ICsgICAgICAgIGlmICgoQ3Vycldy aXRlUHRyICsgQ3VycldyaXRlU2l6ZSkgPD0gKExpbmVhck9mZnNldCArDQo+IFB0ckJsb2NrTWFw RW50cnktDQo+ID4gICAgID4gPkxlbmd0aCkpIHsNCj4gPiAgICAgPiArICAgICAgICAgIFN0YXR1 cyA9IEZ2Yi0+V3JpdGUgKA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIEZ2 YiwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICBMYmFOdW1iZXIsDQo+ID4g ICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgKFVJTlROKShDdXJyV3JpdGVQdHIgLSBM aW5lYXJPZmZzZXQpLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICZDdXJy V3JpdGVTaXplLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJCdWZm ZXINCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiA+ICAgICA+ICsg ICAgICAgICAgcmV0dXJuIFN0YXR1czsNCj4gPiAgICAgPiArICAgICAgICB9IGVsc2Ugew0KPiA+ ICAgICA+ICsgICAgICAgICAgU2l6ZSAgID0gKFVJTlQzMikoTGluZWFyT2Zmc2V0ICsgUHRyQmxv Y2tNYXBFbnRyeS0+TGVuZ3RoIC0NCj4gPiAgICAgPiBDdXJyV3JpdGVQdHIpOw0KPiA+ICAgICA+ ICsgICAgICAgICAgU3RhdHVzID0gRnZiLT5Xcml0ZSAoDQo+ID4gICAgID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgRnZiLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg IExiYU51bWJlciwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAoVUlOVE4p KEN1cnJXcml0ZVB0ciAtIExpbmVhck9mZnNldCksDQo+ID4gICAgID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgJlNpemUsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg Q3VyckJ1ZmZlcg0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ID4g ICAgID4gKyAgICAgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAgID4gKyAg ICAgICAgICAgIHJldHVybiBTdGF0dXM7DQo+ID4gICAgID4gKyAgICAgICAgICB9DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgICAgICAgICAgQ3VycldyaXRlUHRyICA9IExpbmVhck9mZnNldCAr IFB0ckJsb2NrTWFwRW50cnktPkxlbmd0aDsNCj4gPiAgICAgPiArICAgICAgICAgIEN1cnJCdWZm ZXIgICAgPSBDdXJyQnVmZmVyICsgU2l6ZTsNCj4gPiAgICAgPiArICAgICAgICAgIEN1cnJXcml0 ZVNpemUgPSBDdXJyV3JpdGVTaXplIC0gU2l6ZTsNCj4gPiAgICAgPiArICAgICAgICB9DQo+ID4g ICAgID4gKyAgICAgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICAgIExpbmVhck9mZnNl dCArPSBQdHJCbG9ja01hcEVudHJ5LT5MZW5ndGg7DQo+ID4gICAgID4gKyAgICAgIExiYU51bWJl cisrOw0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBSZWNvcmQgdmFyaWFibGUgZXJyb3IgZmxhZy4N Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBGbGFnICAgICAgICAgICAgICAg VmFyaWFibGUgZXJyb3IgZmxhZyB0byByZWNvcmQuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBW YXJpYWJsZU5hbWUgICAgICAgTmFtZSBvZiB2YXJpYWJsZS4NCj4gPiAgICAgPiArICBAcGFyYW1b aW5dIFZlbmRvckd1aWQgICAgICAgICBHdWlkIG9mIHZhcmlhYmxlLg0KPiA+ICAgICA+ICsgIEBw YXJhbVtpbl0gQXR0cmlidXRlcyAgICAgICAgIEF0dHJpYnV0ZXMgb2YgdGhlIHZhcmlhYmxlLg0K PiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gVmFyaWFibGVTaXplICAgICAgIFNpemUgb2YgdGhlIHZh cmlhYmxlLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK1ZPSUQNCj4g PiAgICAgPiArUmVjb3JkVmFyRXJyb3JGbGFnICgNCj4gPiAgICAgPiArICBJTiBWQVJfRVJST1Jf RkxBRyAgRmxhZywNCj4gPiAgICAgPiArICBJTiBDSEFSMTYgICAgICAgICAgKlZhcmlhYmxlTmFt ZSwNCj4gPiAgICAgPiArICBJTiBFRklfR1VJRCAgICAgICAgKlZlbmRvckd1aWQsDQo+ID4gICAg ID4gKyAgSU4gVUlOVDMyICAgICAgICAgIEF0dHJpYnV0ZXMsDQo+ID4gICAgID4gKyAgSU4gVUlO VE4gICAgICAgICAgIFZhcmlhYmxlU2l6ZQ0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0K PiA+ICAgICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgIFN0YXR1czsNCj4gPiAgICAgPiAr ICBWQVJJQUJMRV9QT0lOVEVSX1RSQUNLICBWYXJpYWJsZTsNCj4gPiAgICAgPiArICBWQVJfRVJS T1JfRkxBRyAgICAgICAgICAqVmFyRXJyRmxhZzsNCj4gPiAgICAgPiArICBWQVJfRVJST1JfRkxB RyAgICAgICAgICBUZW1wRmxhZzsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgREVCVUdfQ09E RV9CRUdJTiAoKTsNCj4gPiAgICAgPiArICBERUJVRyAoKERFQlVHX0VSUk9SLCAiUmVjb3JkVmFy RXJyb3JGbGFnICgweCUwMngpICVzOiVnIC0NCj4gMHglMDh4IC0NCj4gPiAgICAgPiAweCV4XG4i LCBGbGFnLCBWYXJpYWJsZU5hbWUsIFZlbmRvckd1aWQsIEF0dHJpYnV0ZXMsIFZhcmlhYmxlU2l6 ZSkpOw0KPiA+ICAgICA+ICsgIGlmIChGbGFnID09IFZBUl9FUlJPUl9GTEFHX1NZU1RFTV9FUlJP Uikgew0KPiA+ICAgICA+ICsgICAgaWYgKEF0UnVudGltZSAoKSkgew0KPiA+ICAgICA+ICsgICAg ICBERUJVRyAoKERFQlVHX0VSUk9SLCAiQ29tbW9uUnVudGltZVZhcmlhYmxlU3BhY2UgPSAweCV4 IC0NCj4gPiAgICAgPiBDb21tb25WYXJpYWJsZVRvdGFsU2l6ZSA9IDB4JXhcbiIsIG1WYXJpYWJs ZU1vZHVsZUdsb2JhbC0NCj4gPiAgICAgPiA+Q29tbW9uUnVudGltZVZhcmlhYmxlU3BhY2UsIG1W YXJpYWJsZU1vZHVsZUdsb2JhbC0NCj4gPiAgICAgPiA+Q29tbW9uVmFyaWFibGVUb3RhbFNpemUp KTsNCj4gPiAgICAgPiArICAgIH0gZWxzZSB7DQo+ID4gICAgID4gKyAgICAgIERFQlVHICgoREVC VUdfRVJST1IsICJDb21tb25WYXJpYWJsZVNwYWNlID0gMHgleCAtDQo+ID4gICAgID4gQ29tbW9u VmFyaWFibGVUb3RhbFNpemUgPSAweCV4XG4iLCBtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4g ICAgID4gPkNvbW1vblZhcmlhYmxlU3BhY2UsIG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCj4gPiA+ Q29tbW9uVmFyaWFibGVUb3RhbFNpemUpKTsNCj4gPiAgICAgPiArICAgIH0NCj4gPiAgICAgPiAr ICB9IGVsc2Ugew0KPiA+ICAgICA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkNvbW1vbk1h eFVzZXJWYXJpYWJsZVNwYWNlID0gMHgleCAtDQo+ID4gICAgID4gQ29tbW9uVXNlclZhcmlhYmxl VG90YWxTaXplID0gMHgleFxuIiwgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ICAgICA+ID5D b21tb25NYXhVc2VyVmFyaWFibGVTcGFjZSwgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ICAg ICA+ID5Db21tb25Vc2VyVmFyaWFibGVUb3RhbFNpemUpKTsNCj4gPiAgICAgPiArICB9DQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgIERFQlVHX0NPREVfRU5EICgpOw0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICBpZiAoIW1FbmRPZkR4ZSkgew0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAg PiArICAgIC8vIEJlZm9yZSBFbmRPZkR4ZSwganVzdCByZWNvcmQgdGhlIGN1cnJlbnQgYm9vdCB2 YXJpYWJsZSBlcnJvciBmbGFnIHRvDQo+ID4gbG9jYWwNCj4gPiAgICAgPiB2YXJpYWJsZSwNCj4g PiAgICAgPiArICAgIC8vIGFuZCBsZWF2ZSB0aGUgdmFyaWFibGUgZXJyb3IgZmxhZyBpbiBOViBm bGFzaCBhcyB0aGUgbGFzdCBib290IHZhcmlhYmxlDQo+ID4gZXJyb3INCj4gPiAgICAgPiBmbGFn Lg0KPiA+ICAgICA+ICsgICAgLy8gQWZ0ZXIgRW5kT2ZEeGUgaW4gSW5pdGlhbGl6ZVZhckVycm9y RmxhZyAoKSwgdGhlIHZhcmlhYmxlIGVycm9yIGZsYWcgaW4NCj4gTlYNCj4gPiAgICAgPiBmbGFz aA0KPiA+ICAgICA+ICsgICAgLy8gd2lsbCBiZSBpbml0aWFsaXplZCB0byB0aGlzIGxvY2FsIGN1 cnJlbnQgYm9vdCB2YXJpYWJsZSBlcnJvciBmbGFnLg0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAg ICAgPiArICAgIG1DdXJyZW50Qm9vdFZhckVyckZsYWcgJj0gRmxhZzsNCj4gPiAgICAgPiArICAg IHJldHVybjsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ ID4gICAgID4gKyAgLy8gUmVjb3JkIGVycm9yIGZsYWcgKGl0IHNob3VsZCBoYXZlIGJlIGluaXRp YWxpemVkKS4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIFN0YXR1cyA9IEZpbmRWYXJp YWJsZSAoDQo+ID4gICAgID4gKyAgICAgICAgICAgICBWQVJfRVJST1JfRkxBR19OQU1FLA0KPiA+ ICAgICA+ICsgICAgICAgICAgICAgJmdFZGtpaVZhckVycm9yRmxhZ0d1aWQsDQo+ID4gICAgID4g KyAgICAgICAgICAgICAmVmFyaWFibGUsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAmbVZhcmlh YmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbCwNCj4gPiAgICAgPiArICAgICAgICAgICAg IEZBTFNFDQo+ID4gICAgID4gKyAgICAgICAgICAgICApOw0KPiA+ICAgICA+ICsgIGlmICghRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAgID4gKyAgICBWYXJFcnJGbGFnID0gKFZBUl9FUlJP Ul9GTEFHICopR2V0VmFyaWFibGVEYXRhUHRyIChWYXJpYWJsZS5DdXJyUHRyLA0KPiA+ICAgICA+ IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdCk7DQo+ID4g ICAgID4gKyAgICBUZW1wRmxhZyAgID0gKlZhckVyckZsYWc7DQo+ID4gICAgID4gKyAgICBUZW1w RmxhZyAgJj0gRmxhZzsNCj4gPiAgICAgPiArICAgIGlmIChUZW1wRmxhZyA9PSAqVmFyRXJyRmxh Zykgew0KPiA+ICAgICA+ICsgICAgICByZXR1cm47DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgICAgU3RhdHVzID0gVXBkYXRlVmFyaWFibGVTdG9yZSAoDQo+ID4g ICAgID4gKyAgICAgICAgICAgICAgICZtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xv YmFsLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICBGQUxTRSwNCj4gPiAgICAgPiArICAgICAg ICAgICAgICAgRkFMU0UsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgIG1WYXJpYWJsZU1vZHVs ZUdsb2JhbC0+RnZiSW5zdGFuY2UsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgIChVSU5UTilW YXJFcnJGbGFnIC0gKFVJTlROKW1OdlZhcmlhYmxlQ2FjaGUgKw0KPiA+ICAgICA+IChVSU5UTilt VmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLk5vblZvbGF0aWxlVmFyaWFibGVC YXNlLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICBzaXplb2YgKFRlbXBGbGFnKSwNCj4gPiAg ICAgPiArICAgICAgICAgICAgICAgJlRlbXBGbGFnDQo+ID4gICAgID4gKyAgICAgICAgICAgICAg ICk7DQo+ID4gICAgID4gKyAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICAgICA+ ICsgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAvLyBVcGRhdGUgdGhlIGRhdGEgaW4gTlYgY2Fj aGUuDQo+ID4gICAgID4gKyAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgICpWYXJFcnJGbGFnID0g VGVtcEZsYWc7DQo+ID4gICAgID4gKyAgICAgIFN0YXR1cyAgICAgID0gIFN5bmNocm9uaXplUnVu dGltZVZhcmlhYmxlQ2FjaGUgKA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICZt VmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4gICAgID4gPlZhcmlhYmxlR2xvYmFsLlZhcmlhYmxl UnVudGltZUNhY2hlQ29udGV4dC5WYXJpYWJsZVJ1bnRpbWVOdkNhY2hlLA0KPiA+ICAgICA+ICsg ICAgICAgICAgICAgICAgICAgICAgIDAsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAg ICAgbU52VmFyaWFibGVDYWNoZS0+U2l6ZQ0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAg ICAgICk7DQo+ID4gICAgID4gKyAgICAgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4g ICAgID4gKyAgICB9DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBJbml0aWFsaXplIHZhcmlhYmxlIGVycm9yIGZs YWcuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEJlZm9yZSBFbmRPZkR4ZSwgdGhlIHZhcmlh YmxlIGluZGljYXRlcyB0aGUgbGFzdCBib290IHZhcmlhYmxlIGVycm9yIGZsYWcsDQo+ID4gICAg ID4gKyAgdGhlbiBpdCBtZWFucyB0aGUgbGFzdCBib290IHZhcmlhYmxlIGVycm9yIGZsYWcgbXVz dCBiZSBnb3QgYmVmb3JlDQo+ID4gRW5kT2ZEeGUuDQo+ID4gICAgID4gKyAgQWZ0ZXIgRW5kT2ZE eGUsIHRoZSB2YXJpYWJsZSBpbmRpY2F0ZXMgdGhlIGN1cnJlbnQgYm9vdCB2YXJpYWJsZSBlcnJv cg0KPiBmbGFnLA0KPiA+ICAgICA+ICsgIHRoZW4gaXQgbWVhbnMgdGhlIGN1cnJlbnQgYm9vdCB2 YXJpYWJsZSBlcnJvciBmbGFnIG11c3QgYmUgZ290IGFmdGVyDQo+ID4gRW5kT2ZEeGUuDQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArVk9JRA0KPiA+ICAgICA+ICtJbml0 aWFsaXplVmFyRXJyb3JGbGFnICgNCj4gPiAgICAgPiArICBWT0lEDQo+ID4gICAgID4gKyAgKQ0K PiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgU3RhdHVz Ow0KPiA+ICAgICA+ICsgIFZBUklBQkxFX1BPSU5URVJfVFJBQ0sgIFZhcmlhYmxlOw0KPiA+ICAg ICA+ICsgIFZBUl9FUlJPUl9GTEFHICAgICAgICAgIEZsYWc7DQo+ID4gICAgID4gKyAgVkFSX0VS Uk9SX0ZMQUcgICAgICAgICAgVmFyRXJyRmxhZzsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg aWYgKCFtRW5kT2ZEeGUpIHsNCj4gPiAgICAgPiArICAgIHJldHVybjsNCj4gPiAgICAgPiArICB9 DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEZsYWcgPSBtQ3VycmVudEJvb3RWYXJFcnJGbGFn Ow0KPiA+ICAgICA+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIkluaXRpYWxpemUgdmFyaWFibGUg ZXJyb3IgZmxhZyAoJTAyeClcbiIsIEZsYWcpKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg U3RhdHVzID0gRmluZFZhcmlhYmxlICgNCj4gPiAgICAgPiArICAgICAgICAgICAgIFZBUl9FUlJP Ul9GTEFHX05BTUUsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAmZ0Vka2lpVmFyRXJyb3JGbGFn R3VpZCwNCj4gPiAgICAgPiArICAgICAgICAgICAgICZWYXJpYWJsZSwNCj4gPiAgICAgPiArICAg ICAgICAgICAgICZtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLA0KPiA+ICAg ICA+ICsgICAgICAgICAgICAgRkFMU0UNCj4gPiAgICAgPiArICAgICAgICAgICAgICk7DQo+ID4g ICAgID4gKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiArICAgIFZhckVy ckZsYWcgPSAqKChWQVJfRVJST1JfRkxBRyAqKUdldFZhcmlhYmxlRGF0YVB0cg0KPiAoVmFyaWFi bGUuQ3VyclB0ciwNCj4gPiAgICAgPiBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xv YmFsLkF1dGhGb3JtYXQpKTsNCj4gPiAgICAgPiArICAgIGlmIChWYXJFcnJGbGFnID09IEZsYWcp IHsNCj4gPiAgICAgPiArICAgICAgcmV0dXJuOw0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgVXBkYXRlVmFyaWFibGUgKA0KPiA+ICAg ICA+ICsgICAgVkFSX0VSUk9SX0ZMQUdfTkFNRSwNCj4gPiAgICAgPiArICAgICZnRWRraWlWYXJF cnJvckZsYWdHdWlkLA0KPiA+ICAgICA+ICsgICAgJkZsYWcsDQo+ID4gICAgID4gKyAgICBzaXpl b2YgKEZsYWcpLA0KPiA+ICAgICA+ICsgICAgVkFSSUFCTEVfQVRUUklCVVRFX05WX0JTX1JULA0K PiA+ICAgICA+ICsgICAgMCwNCj4gPiAgICAgPiArICAgIDAsDQo+ID4gICAgID4gKyAgICAmVmFy aWFibGUsDQo+ID4gICAgID4gKyAgICBOVUxMDQo+ID4gICAgID4gKyAgICApOw0KPiA+ICAgICA+ ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBJcyB1c2VyIHZh cmlhYmxlPw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1baW5dIFZhcmlhYmxlICAg UG9pbnRlciB0byB2YXJpYWJsZSBoZWFkZXIuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBy ZXR2YWwgVFJVRSAgICAgICAgICBVc2VyIHZhcmlhYmxlLg0KPiA+ICAgICA+ICsgIEByZXR2YWwg RkFMU0UgICAgICAgICBTeXN0ZW0gdmFyaWFibGUuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsq Ki8NCj4gPiAgICAgPiArQk9PTEVBTg0KPiA+ICAgICA+ICtJc1VzZXJWYXJpYWJsZSAoDQo+ID4g ICAgID4gKyAgSU4gVkFSSUFCTEVfSEVBREVSICAqVmFyaWFibGUNCj4gPiAgICAgPiArICApDQo+ ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBWQVJfQ0hFQ0tfVkFSSUFCTEVfUFJPUEVSVFkgIFBy b3BlcnR5Ow0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIE9u bHkgYWZ0ZXIgRW5kIE9mIER4ZSwgdGhlIHZhcmlhYmxlcyBiZWxvbmcgdG8gc3lzdGVtIHZhcmlh YmxlIGFyZQ0KPiBmaXhlZC4NCj4gPiAgICAgPiArICAvLyBJZiBQY2RNYXhVc2VyTnZTdG9yYWdl VmFyaWFibGVTaXplIGlzIDAsIGl0IG1lYW5zIHVzZXIgdmFyaWFibGUNCj4gc2hhcmUNCj4gPiB0 aGUNCj4gPiAgICAgPiBzYW1lIE5WIHN0b3JhZ2Ugd2l0aCBzeXN0ZW0gdmFyaWFibGUsDQo+ID4g ICAgID4gKyAgLy8gdGhlbiBubyBuZWVkIHRvIGNoZWNrIGlmIHRoZSB2YXJpYWJsZSBpcyB1c2Vy IHZhcmlhYmxlIG9yIG5vdCBzcGVjaWFsbHkuDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiAr ICBpZiAobUVuZE9mRHhlICYmIChtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4gICAgID4gPkNv bW1vbk1heFVzZXJWYXJpYWJsZVNwYWNlICE9IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCj4gPiAg ICAgPiA+Q29tbW9uVmFyaWFibGVTcGFjZSkpIHsNCj4gPiAgICAgPiArICAgIGlmIChWYXJDaGVj a0xpYlZhcmlhYmxlUHJvcGVydHlHZXQgKA0KPiA+ICAgICA+ICsgICAgICAgICAgR2V0VmFyaWFi bGVOYW1lUHRyIChWYXJpYWJsZSwgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ICAgICA+ID5W YXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0KSwNCj4gPiAgICAgPiArICAgICAgICAgIEdldFZlbmRv ckd1aWRQdHIgKFZhcmlhYmxlLCBtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4gICAgID4gPlZh cmlhYmxlR2xvYmFsLkF1dGhGb3JtYXQpLA0KPiA+ICAgICA+ICsgICAgICAgICAgJlByb3BlcnR5 DQo+ID4gICAgID4gKyAgICAgICAgICApID09IEVGSV9OT1RfRk9VTkQpDQo+ID4gICAgID4gKyAg ICB7DQo+ID4gICAgID4gKyAgICAgIHJldHVybiBUUlVFOw0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgcmV0dXJuIEZBTFNFOw0KPiA+ ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBDYWxj dWxhdGUgY29tbW9uIHVzZXIgdmFyaWFibGUgdG90YWwgc2l6ZS4NCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyoqLw0KPiA+ICAgICA+ICtWT0lEDQo+ID4gICAgID4gK0NhbGN1bGF0ZUNvbW1vblVz ZXJWYXJpYWJsZVRvdGFsU2l6ZSAoDQo+ID4gICAgID4gKyAgVk9JRA0KPiA+ICAgICA+ICsgICkN Cj4gPiAgICAgPiArew0KPiA+ICAgICA+ICsgIFZBUklBQkxFX0hFQURFUiAgICAgICAgICAgICAg KlZhcmlhYmxlOw0KPiA+ICAgICA+ICsgIFZBUklBQkxFX0hFQURFUiAgICAgICAgICAgICAgKk5l eHRWYXJpYWJsZTsNCj4gPiAgICAgPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgIFZh cmlhYmxlU2l6ZTsNCj4gPiAgICAgPiArICBWQVJfQ0hFQ0tfVkFSSUFCTEVfUFJPUEVSVFkgIFBy b3BlcnR5Ow0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIE9u bHkgYWZ0ZXIgRW5kIE9mIER4ZSwgdGhlIHZhcmlhYmxlcyBiZWxvbmcgdG8gc3lzdGVtIHZhcmlh YmxlIGFyZQ0KPiBmaXhlZC4NCj4gPiAgICAgPiArICAvLyBJZiBQY2RNYXhVc2VyTnZTdG9yYWdl VmFyaWFibGVTaXplIGlzIDAsIGl0IG1lYW5zIHVzZXIgdmFyaWFibGUNCj4gc2hhcmUNCj4gPiB0 aGUNCj4gPiAgICAgPiBzYW1lIE5WIHN0b3JhZ2Ugd2l0aCBzeXN0ZW0gdmFyaWFibGUsDQo+ID4g ICAgID4gKyAgLy8gdGhlbiBubyBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgY29tbW9uIHVzZXIgdmFy aWFibGUgdG90YWwgc2l6ZQ0KPiBzcGVjaWFsbHkuDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAg PiArICBpZiAobUVuZE9mRHhlICYmIChtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4gICAgID4g PkNvbW1vbk1heFVzZXJWYXJpYWJsZVNwYWNlICE9IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCj4g PiAgICAgPiA+Q29tbW9uVmFyaWFibGVTcGFjZSkpIHsNCj4gPiAgICAgPiArICAgIFZhcmlhYmxl ID0gR2V0U3RhcnRQb2ludGVyIChtTnZWYXJpYWJsZUNhY2hlKTsNCj4gPiAgICAgPiArICAgIHdo aWxlIChJc1ZhbGlkVmFyaWFibGVIZWFkZXIgKFZhcmlhYmxlLCBHZXRFbmRQb2ludGVyDQo+ID4g KG1OdlZhcmlhYmxlQ2FjaGUpLA0KPiA+ICAgICA+IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFy aWFibGVHbG9iYWwuQXV0aEZvcm1hdCkpIHsNCj4gPiAgICAgPiArICAgICAgTmV4dFZhcmlhYmxl ID0gR2V0TmV4dFZhcmlhYmxlUHRyIChWYXJpYWJsZSwNCj4gbVZhcmlhYmxlTW9kdWxlR2xvYmFs LQ0KPiA+ICAgICA+ID5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0KTsNCj4gPiAgICAgPiArICAg ICAgVmFyaWFibGVTaXplID0gKFVJTlROKU5leHRWYXJpYWJsZSAtIChVSU5UTilWYXJpYWJsZTsN Cj4gPiAgICAgPiArICAgICAgaWYgKChWYXJpYWJsZS0+QXR0cmlidXRlcyAmDQo+ID4gRUZJX1ZB UklBQkxFX0hBUkRXQVJFX0VSUk9SX1JFQ09SRCkgIT0NCj4gPiAgICAgPiBFRklfVkFSSUFCTEVf SEFSRFdBUkVfRVJST1JfUkVDT1JEKSB7DQo+ID4gICAgID4gKyAgICAgICAgaWYgKFZhckNoZWNr TGliVmFyaWFibGVQcm9wZXJ0eUdldCAoDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgR2V0VmFy aWFibGVOYW1lUHRyIChWYXJpYWJsZSwgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ICAgICA+ ID5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0KSwNCj4gPiAgICAgPiArICAgICAgICAgICAgICBH ZXRWZW5kb3JHdWlkUHRyIChWYXJpYWJsZSwgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ICAg ICA+ID5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0KSwNCj4gPiAgICAgPiArICAgICAgICAgICAg ICAmUHJvcGVydHkNCj4gPiAgICAgPiArICAgICAgICAgICAgICApID09IEVGSV9OT1RfRk9VTkQp DQo+ID4gICAgID4gKyAgICAgICAgew0KPiA+ICAgICA+ICsgICAgICAgICAgLy8NCj4gPiAgICAg PiArICAgICAgICAgIC8vIE5vIHByb3BlcnR5LCBpdCBpcyB1c2VyIHZhcmlhYmxlLg0KPiA+ICAg ICA+ICsgICAgICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgICAgIG1WYXJpYWJsZU1vZHVsZUds b2JhbC0+Q29tbW9uVXNlclZhcmlhYmxlVG90YWxTaXplICs9DQo+ID4gVmFyaWFibGVTaXplOw0K PiA+ICAgICA+ICsgICAgICAgIH0NCj4gPiAgICAgPiArICAgICAgfQ0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICAgICAgVmFyaWFibGUgPSBOZXh0VmFyaWFibGU7DQo+ID4gICAgID4gKyAgICB9 DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsv KioNCj4gPiAgICAgPiArICBJbml0aWFsaXplIHZhcmlhYmxlIHF1b3RhLg0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK1ZPSUQNCj4gPiAgICAgPiArSW5pdGlhbGl6ZVZh cmlhYmxlUXVvdGEgKA0KPiA+ICAgICA+ICsgIFZPSUQNCj4gPiAgICAgPiArICApDQo+ID4gICAg ID4gK3sNCj4gPiAgICAgPiArICBpZiAoIW1FbmRPZkR4ZSkgew0KPiA+ICAgICA+ICsgICAgcmV0 dXJuOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgSW5pdGlhbGl6 ZVZhckVycm9yRmxhZyAoKTsNCj4gPiAgICAgPiArICBDYWxjdWxhdGVDb21tb25Vc2VyVmFyaWFi bGVUb3RhbFNpemUgKCk7DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8q Kg0KPiA+ICAgICA+ICsgIEZpbmRzIHZhcmlhYmxlIGluIHN0b3JhZ2UgYmxvY2tzIG9mIHZvbGF0 aWxlIGFuZCBub24tdm9sYXRpbGUgc3RvcmFnZQ0KPiBhcmVhcy4NCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyAgVGhpcyBjb2RlIGZpbmRzIHZhcmlhYmxlIGluIHN0b3JhZ2UgYmxvY2tzIG9mIHZv bGF0aWxlIGFuZCBub24tdm9sYXRpbGUNCj4gPiBzdG9yYWdlDQo+ID4gICAgID4gYXJlYXMuDQo+ ID4gICAgID4gKyAgSWYgVmFyaWFibGVOYW1lIGlzIGFuIGVtcHR5IHN0cmluZywgdGhlbiB3ZSBq dXN0IHJldHVybiB0aGUgZmlyc3QNCj4gPiAgICAgPiArICBxdWFsaWZpZWQgdmFyaWFibGUgd2l0 aG91dCBjb21wYXJpbmcgVmFyaWFibGVOYW1lIGFuZCBWZW5kb3JHdWlkLg0KPiA+ICAgICA+ICsg IElmIElnbm9yZVJ0Q2hlY2sgaXMgVFJVRSwgdGhlbiB3ZSBpZ25vcmUgdGhlDQo+ID4gICAgID4g RUZJX1ZBUklBQkxFX1JVTlRJTUVfQUNDRVNTIGF0dHJpYnV0ZSBjaGVjaw0KPiA+ICAgICA+ICsg IGF0IHJ1bnRpbWUgd2hlbiBzZWFyY2hpbmcgZXhpc3RpbmcgdmFyaWFibGUsIG9ubHkgVmFyaWFi bGVOYW1lIGFuZA0KPiA+ICAgICA+IFZlbmRvckd1aWQgYXJlIGNvbXBhcmVkLg0KPiA+ICAgICA+ ICsgIE90aGVyd2lzZSwgdmFyaWFibGVzIHdpdGhvdXQgRUZJX1ZBUklBQkxFX1JVTlRJTUVfQUND RVNTIGFyZSBub3QNCj4gPiB2aXNpYmxlDQo+ID4gICAgID4gYXQgcnVudGltZS4NCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgIFZhcmlhYmxlTmFtZSAgICAgICAgICAgTmFt ZSBvZiB0aGUgdmFyaWFibGUgdG8gYmUgZm91bmQuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAg IFZlbmRvckd1aWQgICAgICAgICAgICAgVmVuZG9yIEdVSUQgdG8gYmUgZm91bmQuDQo+ID4gICAg ID4gKyAgQHBhcmFtW291dF0gIFB0clRyYWNrICAgICAgICAgICAgICAgVkFSSUFCTEVfUE9JTlRF Ul9UUkFDSyBzdHJ1Y3R1cmUgZm9yDQo+ID4gICAgID4gb3V0cHV0LA0KPiA+ICAgICA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGluZyB0aGUgcmFuZ2Ugc2Vh cmNoZWQgYW5kIHRoZSB0YXJnZXQgcG9zaXRpb24uDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAg IEdsb2JhbCAgICAgICAgICAgICAgICAgUG9pbnRlciB0byBWQVJJQUJMRV9HTE9CQUwgc3RydWN0 dXJlLA0KPiA+ICAgICA+IGluY2x1ZGluZw0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJhc2Ugb2Ygdm9sYXRpbGUgdmFyaWFibGUgc3RvcmFnZSBhcmVh LCBiYXNlIG9mDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTlYgdmFyaWFibGUgc3RvcmFnZSBhcmVhLCBhbmQgYSBsb2NrLg0KPiA+ICAgICA+ICsgIEBw YXJhbVtpbl0gICBJZ25vcmVSdENoZWNrICAgICAgICAgIElnbm9yZQ0KPiA+IEVGSV9WQVJJQUJM RV9SVU5USU1FX0FDQ0VTUw0KPiA+ICAgICA+IGF0dHJpYnV0ZQ0KPiA+ICAgICA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrIGF0IHJ1bnRpbWUgd2hlbiBzZWFy Y2hpbmcgdmFyaWFibGUuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX0lO VkFMSURfUEFSQU1FVEVSICAgICAgIElmIFZhcmlhYmxlTmFtZSBpcyBub3QgYW4gZW1wdHkNCj4g PiBzdHJpbmcsDQo+ID4gICAgID4gd2hpbGUNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBWZW5kb3JHdWlkIGlzIE5VTEwuDQo+ID4gICAgID4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICAgVmFyaWFibGUgc3VjY2Vzc2Z1bGx5IGZv dW5kLg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICAgICAgIFZh cmlhYmxlIG5vdCBmb3VuZA0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4g K0VGSV9TVEFUVVMNCj4gPiAgICAgPiArRmluZFZhcmlhYmxlICgNCj4gPiAgICAgPiArICBJTiAg Q0hBUjE2ICAgICAgICAgICAgICAgICAgKlZhcmlhYmxlTmFtZSwNCj4gPiAgICAgPiArICBJTiAg RUZJX0dVSUQgICAgICAgICAgICAgICAgKlZlbmRvckd1aWQsDQo+ID4gICAgID4gKyAgT1VUIFZB UklBQkxFX1BPSU5URVJfVFJBQ0sgICpQdHJUcmFjaywNCj4gPiAgICAgPiArICBJTiAgVkFSSUFC TEVfR0xPQkFMICAgICAgICAgKkdsb2JhbCwNCj4gPiAgICAgPiArICBJTiAgQk9PTEVBTiAgICAg ICAgICAgICAgICAgSWdub3JlUnRDaGVjaw0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0K PiA+ICAgICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ICAgICA+ICsg IFZBUklBQkxFX1NUT1JFX0hFQURFUg0KPiA+ICpWYXJpYWJsZVN0b3JlSGVhZGVyW1ZhcmlhYmxl U3RvcmVUeXBlTWF4XTsNCj4gPiAgICAgPiArICBWQVJJQUJMRV9TVE9SRV9UWVBFICAgIFR5cGU7 DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIGlmICgoVmFyaWFibGVOYW1lWzBdICE9IDApICYm IChWZW5kb3JHdWlkID09IE5VTEwpKSB7DQo+ID4gICAgID4gKyAgICByZXR1cm4gRUZJX0lOVkFM SURfUEFSQU1FVEVSOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg Ly8NCj4gPiAgICAgPiArICAvLyAwOiBWb2xhdGlsZSwgMTogSE9CLCAyOiBOb24tVm9sYXRpbGUu DQo+ID4gICAgID4gKyAgLy8gVGhlIGluZGV4IGFuZCBhdHRyaWJ1dGVzIG1hcHBpbmcgbXVzdCBi ZSBrZXB0IGluIHRoaXMgb3JkZXIgYXMNCj4gPiAgICAgPiBSdW50aW1lU2VydmljZUdldE5leHRW YXJpYWJsZU5hbWUNCj4gPiAgICAgPiArICAvLyBtYWtlIHVzZSBvZiB0aGlzIG1hcHBpbmcgdG8g aW1wbGVtZW50IHNlYXJjaCBhbGdvcml0aG0uDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiAr ICBWYXJpYWJsZVN0b3JlSGVhZGVyW1ZhcmlhYmxlU3RvcmVUeXBlVm9sYXRpbGVdID0NCj4gPiAg ICAgPiAoVkFSSUFCTEVfU1RPUkVfSEVBREVSICopKFVJTlROKUdsb2JhbC0+Vm9sYXRpbGVWYXJp YWJsZUJhc2U7DQo+ID4gICAgID4gKyAgVmFyaWFibGVTdG9yZUhlYWRlcltWYXJpYWJsZVN0b3Jl VHlwZUhvYl0gICAgICA9DQo+ID4gKFZBUklBQkxFX1NUT1JFX0hFQURFUg0KPiA+ICAgICA+ICop KFVJTlROKUdsb2JhbC0+SG9iVmFyaWFibGVCYXNlOw0KPiA+ICAgICA+ICsgIFZhcmlhYmxlU3Rv cmVIZWFkZXJbVmFyaWFibGVTdG9yZVR5cGVOdl0gICAgICAgPSBtTnZWYXJpYWJsZUNhY2hlOw0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIEZpbmQgdGhlIHZh cmlhYmxlIGJ5IHdhbGsgdGhyb3VnaCBIT0IsIHZvbGF0aWxlIGFuZCBub24tdm9sYXRpbGUNCj4g PiB2YXJpYWJsZQ0KPiA+ICAgICA+IHN0b3JlLg0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4g KyAgZm9yIChUeXBlID0gKFZBUklBQkxFX1NUT1JFX1RZUEUpMDsgVHlwZSA8IFZhcmlhYmxlU3Rv cmVUeXBlTWF4Ow0KPiA+IFR5cGUrKykNCj4gPiAgICAgPiB7DQo+ID4gICAgID4gKyAgICBpZiAo VmFyaWFibGVTdG9yZUhlYWRlcltUeXBlXSA9PSBOVUxMKSB7DQo+ID4gICAgID4gKyAgICAgIGNv bnRpbnVlOw0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgIFB0 clRyYWNrLT5TdGFydFB0ciA9IEdldFN0YXJ0UG9pbnRlciAoVmFyaWFibGVTdG9yZUhlYWRlcltU eXBlXSk7DQo+ID4gICAgID4gKyAgICBQdHJUcmFjay0+RW5kUHRyICAgPSBHZXRFbmRQb2ludGVy IChWYXJpYWJsZVN0b3JlSGVhZGVyW1R5cGVdKTsNCj4gPiAgICAgPiArICAgIFB0clRyYWNrLT5W b2xhdGlsZSA9IChCT09MRUFOKShUeXBlID09IFZhcmlhYmxlU3RvcmVUeXBlVm9sYXRpbGUpOw0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgIFN0YXR1cyA9ICBGaW5kVmFyaWFibGVFeCAoDQo+ ID4gICAgID4gKyAgICAgICAgICAgICAgICBWYXJpYWJsZU5hbWUsDQo+ID4gICAgID4gKyAgICAg ICAgICAgICAgICBWZW5kb3JHdWlkLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgSWdub3Jl UnRDaGVjaywNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgIFB0clRyYWNrLA0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5B dXRoRm9ybWF0DQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICApOw0KPiA+ICAgICA+ICsgICAg aWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiArICAgICAgcmV0dXJuIFN0YXR1 czsNCj4gPiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBHZXQgaW5kZXggZnJvbSBzdXBwb3J0ZWQgbGFu Z3VhZ2UgY29kZXMgYWNjb3JkaW5nIHRvIGxhbmd1YWdlIHN0cmluZy4NCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgVGhpcyBjb2RlIGlzIHVzZWQgdG8gZ2V0IGNvcnJlc3BvbmRpbmcgaW5kZXgg aW4gc3VwcG9ydGVkIGxhbmd1YWdlDQo+IGNvZGVzLg0KPiA+IEl0DQo+ID4gICAgID4gY2FuIGhh bmRsZQ0KPiA+ICAgICA+ICsgIFJGQzQ2NDYgYW5kIElTTzYzOSBsYW5ndWFnZSB0YWdzLg0KPiA+ ICAgICA+ICsgIEluIElTTzYzOSBsYW5ndWFnZSB0YWdzLCB0YWtlIDMtY2hhcmFjdGVycyBhcyBh IGRlbGltaXRhdGlvbiB0byBmaW5kDQo+ID4gbWF0Y2hlZA0KPiA+ICAgICA+IHN0cmluZyBhbmQg Y2FsY3VsYXRlIHRoZSBpbmRleC4NCj4gPiAgICAgPiArICBJbiBSRkM0NjQ2IGxhbmd1YWdlIHRh Z3MsIHRha2Ugc2VtaWNvbG9uIGFzIGEgZGVsaW1pdGF0aW9uIHRvIGZpbmQNCj4gPiBtYXRjaGVk DQo+ID4gICAgID4gc3RyaW5nIGFuZCBjYWxjdWxhdGUgdGhlIGluZGV4Lg0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICBGb3IgZXhhbXBsZToNCj4gPiAgICAgPiArICAgIFN1cHBvcnRlZExhbmcg ID0gImVuZ2ZyYWVuZ2ZyYSINCj4gPiAgICAgPiArICAgIExhbmcgICAgICAgICAgID0gImVuZyIN Cj4gPiAgICAgPiArICAgIElzbzYzOUxhbmd1YWdlID0gVFJVRQ0KPiA+ICAgICA+ICsgIFRoZSBy ZXR1cm4gdmFsdWUgaXMgIjAiLg0KPiA+ICAgICA+ICsgIEFub3RoZXIgZXhhbXBsZToNCj4gPiAg ICAgPiArICAgIFN1cHBvcnRlZExhbmcgID0gImVuO2ZyO2VuLVVTO2ZyLUZSIg0KPiA+ICAgICA+ ICsgICAgTGFuZyAgICAgICAgICAgPSAiZnItRlIiDQo+ID4gICAgID4gKyAgICBJc282MzlMYW5n dWFnZSA9IEZBTFNFDQo+ID4gICAgID4gKyAgVGhlIHJldHVybiB2YWx1ZSBpcyAiMyIuDQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbSAgU3VwcG9ydGVkTGFuZyAgICAgICAgICAgICAg IFBsYXRmb3JtIHN1cHBvcnRlZCBsYW5ndWFnZSBjb2Rlcy4NCj4gPiAgICAgPiArICBAcGFyYW0g IExhbmcgICAgICAgICAgICAgICAgICAgICAgICBDb25maWd1cmVkIGxhbmd1YWdlLg0KPiA+ICAg ICA+ICsgIEBwYXJhbSAgSXNvNjM5TGFuZ3VhZ2UgICAgICAgICAgICAgIEEgYm9vbCB2YWx1ZSB0 byBzaWduaWZ5IGlmIHRoZSBoYW5kbGVyIGlzDQo+ID4gICAgID4gb3BlcmF0ZWQgb24gSVNPNjM5 IG9yIFJGQzQ2NDYuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR2YWwgVGhlIGluZGV4 IG9mIGxhbmd1YWdlIGluIHRoZSBsYW5ndWFnZSBjb2Rlcy4NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyoqLw0KPiA+ICAgICA+ICtVSU5UTg0KPiA+ICAgICA+ICtHZXRJbmRleEZyb21TdXBwb3J0 ZWRMYW5nQ29kZXMgKA0KPiA+ICAgICA+ICsgIElOICBDSEFSOCAgICAqU3VwcG9ydGVkTGFuZywN Cj4gPiAgICAgPiArICBJTiAgQ0hBUjggICAgKkxhbmcsDQo+ID4gICAgID4gKyAgSU4gIEJPT0xF QU4gIElzbzYzOUxhbmd1YWdlDQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAg ID4gKyAgVUlOVE4gIEluZGV4Ow0KPiA+ICAgICA+ICsgIFVJTlROICBDb21wYXJlTGVuZ3RoOw0K PiA+ICAgICA+ICsgIFVJTlROICBMYW5ndWFnZUxlbmd0aDsNCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgaWYgKElzbzYzOUxhbmd1YWdlKSB7DQo+ID4gICAgID4gKyAgICBDb21wYXJlTGVuZ3Ro ID0gSVNPXzYzOV8yX0VOVFJZX1NJWkU7DQo+ID4gICAgID4gKyAgICBmb3IgKEluZGV4ID0gMDsg SW5kZXggPCBBc2NpaVN0ckxlbiAoU3VwcG9ydGVkTGFuZyk7IEluZGV4ICs9DQo+ID4gQ29tcGFy ZUxlbmd0aCkNCj4gPiAgICAgPiB7DQo+ID4gICAgID4gKyAgICAgIGlmIChBc2NpaVN0cm5DbXAg KExhbmcsIFN1cHBvcnRlZExhbmcgKyBJbmRleCwgQ29tcGFyZUxlbmd0aCkgPT0gMCkNCj4gew0K PiA+ICAgICA+ICsgICAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgICAgLy8gU3VjY2Vzc2Z1bGx5 IGZpbmQgdGhlIGluZGV4IG9mIExhbmcgc3RyaW5nIGluIFN1cHBvcnRlZExhbmcgc3RyaW5nLg0K PiA+ICAgICA+ICsgICAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgICAgSW5kZXggPSBJbmRleCAv IENvbXBhcmVMZW5ndGg7DQo+ID4gICAgID4gKyAgICAgICAgcmV0dXJuIEluZGV4Ow0KPiA+ICAg ICA+ICsgICAgICB9DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsg ICAgQVNTRVJUIChGQUxTRSk7DQo+ID4gICAgID4gKyAgICByZXR1cm4gMDsNCj4gPiAgICAgPiAr ICB9IGVsc2Ugew0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIC8vIENvbXBhcmUg UkZDNDY0NiBsYW5ndWFnZSBjb2RlDQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAg SW5kZXggPSAwOw0KPiA+ICAgICA+ICsgICAgZm9yIChMYW5ndWFnZUxlbmd0aCA9IDA7IExhbmdb TGFuZ3VhZ2VMZW5ndGhdICE9ICdcMCc7DQo+ID4gTGFuZ3VhZ2VMZW5ndGgrKykNCj4gPiAgICAg PiB7DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgZm9yIChJ bmRleCA9IDA7ICpTdXBwb3J0ZWRMYW5nICE9ICdcMCc7IEluZGV4KyssIFN1cHBvcnRlZExhbmcg Kz0NCj4gPiAgICAgPiBDb21wYXJlTGVuZ3RoKSB7DQo+ID4gICAgID4gKyAgICAgIC8vDQo+ID4g ICAgID4gKyAgICAgIC8vIFNraXAgJzsnIGNoYXJhY3RlcnMgaW4gU3VwcG9ydGVkTGFuZw0KPiA+ ICAgICA+ICsgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICBmb3IgKCA7ICpTdXBwb3J0ZWRMYW5n ICE9ICdcMCcgJiYgKlN1cHBvcnRlZExhbmcgPT0gJzsnOw0KPiA+IFN1cHBvcnRlZExhbmcrKykg ew0KPiA+ICAgICA+ICsgICAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgICAvLw0K PiA+ICAgICA+ICsgICAgICAvLyBEZXRlcm1pbmUgdGhlIGxlbmd0aCBvZiB0aGUgbmV4dCBsYW5n dWFnZSBjb2RlIGluIFN1cHBvcnRlZExhbmcNCj4gPiAgICAgPiArICAgICAgLy8NCj4gPiAgICAg PiArICAgICAgZm9yIChDb21wYXJlTGVuZ3RoID0gMDsgU3VwcG9ydGVkTGFuZ1tDb21wYXJlTGVu Z3RoXSAhPSAnXDAnICYmDQo+ID4gICAgID4gU3VwcG9ydGVkTGFuZ1tDb21wYXJlTGVuZ3RoXSAh PSAnOyc7IENvbXBhcmVMZW5ndGgrKykgew0KPiA+ICAgICA+ICsgICAgICB9DQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsgICAgICBpZiAoKENvbXBhcmVMZW5ndGggPT0gTGFuZ3VhZ2VMZW5ndGgp ICYmDQo+ID4gICAgID4gKyAgICAgICAgICAoQXNjaWlTdHJuQ21wIChMYW5nLCBTdXBwb3J0ZWRM YW5nLCBDb21wYXJlTGVuZ3RoKSA9PSAwKSkNCj4gPiAgICAgPiArICAgICAgew0KPiA+ICAgICA+ ICsgICAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgICAgLy8gU3VjY2Vzc2Z1bGx5IGZpbmQgdGhl IGluZGV4IG9mIExhbmcgc3RyaW5nIGluIFN1cHBvcnRlZExhbmcgc3RyaW5nLg0KPiA+ICAgICA+ ICsgICAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgICAgcmV0dXJuIEluZGV4Ow0KPiA+ICAgICA+ ICsgICAgICB9DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAg QVNTRVJUIChGQUxTRSk7DQo+ID4gICAgID4gKyAgICByZXR1cm4gMDsNCj4gPiAgICAgPiArICB9 DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsg IEdldCBsYW5ndWFnZSBzdHJpbmcgZnJvbSBzdXBwb3J0ZWQgbGFuZ3VhZ2UgY29kZXMgYWNjb3Jk aW5nIHRvIGluZGV4Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBUaGlzIGNvZGUgaXMgdXNl ZCB0byBnZXQgY29ycmVzcG9uZGluZyBsYW5ndWFnZSBzdHJpbmdzIGluIHN1cHBvcnRlZA0KPiA+ IGxhbmd1YWdlDQo+ID4gICAgID4gY29kZXMuIEl0IGNhbiBoYW5kbGUNCj4gPiAgICAgPiArICBS RkM0NjQ2IGFuZCBJU082MzkgbGFuZ3VhZ2UgdGFncy4NCj4gPiAgICAgPiArICBJbiBJU082Mzkg bGFuZ3VhZ2UgdGFncywgdGFrZSAzLWNoYXJhY3RlcnMgYXMgYSBkZWxpbWl0YXRpb24uIEZpbmQN Cj4gPiBsYW5ndWFnZQ0KPiA+ICAgICA+IHN0cmluZyBhY2NvcmRpbmcgdG8gdGhlIGluZGV4Lg0K PiA+ICAgICA+ICsgIEluIFJGQzQ2NDYgbGFuZ3VhZ2UgdGFncywgdGFrZSBzZW1pY29sb24gYXMg YSBkZWxpbWl0YXRpb24uIEZpbmQNCj4gPiBsYW5ndWFnZQ0KPiA+ICAgICA+IHN0cmluZyBhY2Nv cmRpbmcgdG8gdGhlIGluZGV4Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBGb3IgZXhhbXBs ZToNCj4gPiAgICAgPiArICAgIFN1cHBvcnRlZExhbmcgID0gImVuZ2ZyYWVuZ2ZyYSINCj4gPiAg ICAgPiArICAgIEluZGV4ICAgICAgICAgID0gIjEiDQo+ID4gICAgID4gKyAgICBJc282MzlMYW5n dWFnZSA9IFRSVUUNCj4gPiAgICAgPiArICBUaGUgcmV0dXJuIHZhbHVlIGlzICJmcmEiLg0KPiA+ ICAgICA+ICsgIEFub3RoZXIgZXhhbXBsZToNCj4gPiAgICAgPiArICAgIFN1cHBvcnRlZExhbmcg ID0gImVuO2ZyO2VuLVVTO2ZyLUZSIg0KPiA+ICAgICA+ICsgICAgSW5kZXggICAgICAgICAgPSAi MSINCj4gPiAgICAgPiArICAgIElzbzYzOUxhbmd1YWdlID0gRkFMU0UNCj4gPiAgICAgPiArICBU aGUgcmV0dXJuIHZhbHVlIGlzICJmciIuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJh bSAgU3VwcG9ydGVkTGFuZyAgICAgICAgICAgICAgIFBsYXRmb3JtIHN1cHBvcnRlZCBsYW5ndWFn ZSBjb2Rlcy4NCj4gPiAgICAgPiArICBAcGFyYW0gIEluZGV4ICAgICAgICAgICAgICAgICAgICAg ICBUaGUgaW5kZXggaW4gc3VwcG9ydGVkIGxhbmd1YWdlIGNvZGVzLg0KPiA+ICAgICA+ICsgIEBw YXJhbSAgSXNvNjM5TGFuZ3VhZ2UgICAgICAgICAgICAgIEEgYm9vbCB2YWx1ZSB0byBzaWduaWZ5 IGlmIHRoZSBoYW5kbGVyIGlzDQo+ID4gICAgID4gb3BlcmF0ZWQgb24gSVNPNjM5IG9yIFJGQzQ2 NDYuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR2YWwgVGhlIGxhbmd1YWdlIHN0cmlu ZyBpbiB0aGUgbGFuZ3VhZ2UgY29kZXMuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4g PiAgICAgPiArQ0hBUjggKg0KPiA+ICAgICA+ICtHZXRMYW5nRnJvbVN1cHBvcnRlZExhbmdDb2Rl cyAoDQo+ID4gICAgID4gKyAgSU4gIENIQVI4ICAgICpTdXBwb3J0ZWRMYW5nLA0KPiA+ICAgICA+ ICsgIElOICBVSU5UTiAgICBJbmRleCwNCj4gPiAgICAgPiArICBJTiAgQk9PTEVBTiAgSXNvNjM5 TGFuZ3VhZ2UNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBVSU5U TiAgU3ViSW5kZXg7DQo+ID4gICAgID4gKyAgVUlOVE4gIENvbXBhcmVMZW5ndGg7DQo+ID4gICAg ID4gKyAgQ0hBUjggICpTdXBwb3J0ZWQ7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFN1Yklu ZGV4ICA9IDA7DQo+ID4gICAgID4gKyAgU3VwcG9ydGVkID0gU3VwcG9ydGVkTGFuZzsNCj4gPiAg ICAgPiArICBpZiAoSXNvNjM5TGFuZ3VhZ2UpIHsNCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAg ID4gKyAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIGluZGV4IG9mIExhbmcgc3RyaW5nIGluIFN1cHBv cnRlZExhbmcgc3RyaW5nIHRvIGdldA0KPiA+IHRoZQ0KPiA+ICAgICA+IGxhbmd1YWdlLg0KPiA+ ICAgICA+ICsgICAgLy8gVGhpcyBjb2RlIHdpbGwgYmUgaW52b2tlZCBpbiBSVU5USU1FLCB0aGVy ZWZvcmUgdGhlcmUgaXMgbm90IGENCj4gPiBtZW1vcnkNCj4gPiAgICAgPiBhbGxvY2F0ZS9mcmVl IG9wZXJhdGlvbi4NCj4gPiAgICAgPiArICAgIC8vIEluIGRyaXZlciBlbnRyeSwgaXQgcHJlLWFs bG9jYXRlcyBhIHJ1bnRpbWUgYXR0cmlidXRlIG1lbW9yeSB0bw0KPiA+ICAgICA+IGFjY29tbW9k YXRlIHRoaXMgc3RyaW5nLg0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIENvbXBh cmVMZW5ndGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IElTT182MzlfMl9FTlRSWV9T SVpFOw0KPiA+ICAgICA+ICsgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5MYW5nW0NvbXBhcmVM ZW5ndGhdID0gJ1wwJzsNCj4gPiAgICAgPiArICAgIHJldHVybiBDb3B5TWVtIChtVmFyaWFibGVN b2R1bGVHbG9iYWwtPkxhbmcsIFN1cHBvcnRlZExhbmcgKw0KPiA+IEluZGV4ICoNCj4gPiAgICAg PiBDb21wYXJlTGVuZ3RoLCBDb21wYXJlTGVuZ3RoKTsNCj4gPiAgICAgPiArICB9IGVsc2Ugew0K PiA+ICAgICA+ICsgICAgd2hpbGUgKFRSVUUpIHsNCj4gPiAgICAgPiArICAgICAgLy8NCj4gPiAg ICAgPiArICAgICAgLy8gVGFrZSBzZW1pY29sb24gYXMgZGVsaW1pdGF0aW9uLCBzZXF1ZW50aWFs bHkgdHJhdmVyc2Ugc3VwcG9ydGVkDQo+ID4gbGFuZ3VhZ2UNCj4gPiAgICAgPiBjb2Rlcy4NCj4g PiAgICAgPiArICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgZm9yIChDb21wYXJlTGVuZ3RoID0g MDsgKlN1cHBvcnRlZCAhPSAnOycgJiYgKlN1cHBvcnRlZCAhPSAnXDAnOw0KPiA+ICAgICA+IENv bXBhcmVMZW5ndGgrKykgew0KPiA+ICAgICA+ICsgICAgICAgIFN1cHBvcnRlZCsrOw0KPiA+ICAg ICA+ICsgICAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgICBpZiAoKCpTdXBwb3J0 ZWQgPT0gJ1wwJykgJiYgKFN1YkluZGV4ICE9IEluZGV4KSkgew0KPiA+ICAgICA+ICsgICAgICAg IC8vDQo+ID4gICAgID4gKyAgICAgICAgLy8gSGF2ZSBjb21wbGV0ZWQgdGhlIHRyYXZlcnNlLCBi dXQgbm90IGZpbmQgY29ycnNwb25kaW5nIHN0cmluZy4NCj4gPiAgICAgPiArICAgICAgICAvLyBU aGlzIGNhc2UgaXMgbm90IGFsbG93ZWQgdG8gaGFwcGVuLg0KPiA+ICAgICA+ICsgICAgICAgIC8v DQo+ID4gICAgID4gKyAgICAgICAgQVNTRVJUIChGQUxTRSk7DQo+ID4gICAgID4gKyAgICAgICAg cmV0dXJuIE5VTEw7DQo+ID4gICAgID4gKyAgICAgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgICAgIGlmIChTdWJJbmRleCA9PSBJbmRleCkgew0KPiA+ICAgICA+ICsgICAgICAgIC8vDQo+ ID4gICAgID4gKyAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBpbmRleCBvZiBMYW5nIHN0cmlu ZyBpbiBTdXBwb3J0ZWRMYW5nIHN0cmluZyB0bw0KPiBnZXQNCj4gPiB0aGUNCj4gPiAgICAgPiBs YW5ndWFnZS4NCj4gPiAgICAgPiArICAgICAgICAvLyBBcyB0aGlzIGNvZGUgd2lsbCBiZSBpbnZv a2VkIGluIFJVTlRJTUUsIHRoZXJlZm9yZSB0aGVyZSBpcyBub3QNCj4gPiBtZW1vcnkNCj4gPiAg ICAgPiBhbGxvY2F0ZS9mcmVlIG9wZXJhdGlvbi4NCj4gPiAgICAgPiArICAgICAgICAvLyBJbiBk cml2ZXIgZW50cnksIGl0IHByZS1hbGxvY2F0ZXMgYSBydW50aW1lIGF0dHJpYnV0ZSBtZW1vcnkg dG8NCj4gPiAgICAgPiBhY2NvbW1vZGF0ZSB0aGlzIHN0cmluZy4NCj4gPiAgICAgPiArICAgICAg ICAvLw0KPiA+ICAgICA+ICsgICAgICAgIG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+UGxhdGZvcm1M YW5nW0NvbXBhcmVMZW5ndGhdID0gJ1wwJzsNCj4gPiAgICAgPiArICAgICAgICByZXR1cm4gQ29w eU1lbSAobVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5QbGF0Zm9ybUxhbmcsDQo+IFN1cHBvcnRlZCAt DQo+ID4gICAgID4gQ29tcGFyZUxlbmd0aCwgQ29tcGFyZUxlbmd0aCk7DQo+ID4gICAgID4gKyAg ICAgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICAgIFN1YkluZGV4Kys7DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAvLyBTa2lwICc7JyBj aGFyYWN0ZXJzIGluIFN1cHBvcnRlZA0KPiA+ICAgICA+ICsgICAgICAvLw0KPiA+ICAgICA+ICsg ICAgICBmb3IgKCA7ICpTdXBwb3J0ZWQgIT0gJ1wwJyAmJiAqU3VwcG9ydGVkID09ICc7JzsgU3Vw cG9ydGVkKyspIHsNCj4gPiAgICAgPiArICAgICAgfQ0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAg ICA+ICsgIH0NCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4g ICAgID4gKyAgUmV0dXJucyBhIHBvaW50ZXIgdG8gYW4gYWxsb2NhdGVkIGJ1ZmZlciB0aGF0IGNv bnRhaW5zIHRoZSBiZXN0IG1hdGNoaW5nDQo+ID4gICAgID4gbGFuZ3VhZ2UNCj4gPiAgICAgPiAr ICBmcm9tIGEgc2V0IG9mIHN1cHBvcnRlZCBsYW5ndWFnZXMuDQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsgIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgYm90aCBJU08gNjM5LTIgYW5kIFJGQyA0NjQ2 IGxhbmd1YWdlIGNvZGVzLCBidXQNCj4gPiAgICAgPiBsYW5ndWFnZQ0KPiA+ICAgICA+ICsgIGNv ZGUgdHlwZXMgbWF5IG5vdCBiZSBtaXhlZCBpbiBhIHNpbmdsZSBjYWxsIHRvIHRoaXMgZnVuY3Rp b24uIFRoaXMNCj4gZnVuY3Rpb24NCj4gPiAgICAgPiArICBzdXBwb3J0cyBhIHZhcmlhYmxlIGFy Z3VtZW50IGxpc3QgdGhhdCBhbGxvd3MgdGhlIGNhbGxlciB0byBwYXNzIGluIGENCj4gPiBwcmlv cml0aXplZA0KPiA+ICAgICA+ICsgIGxpc3Qgb2YgbGFuZ3VhZ2UgY29kZXMgdG8gdGVzdCBhZ2Fp bnN0IGFsbCB0aGUgbGFuZ3VhZ2UgY29kZXMgaW4NCj4gPiAgICAgPiBTdXBwb3J0ZWRMYW5ndWFn ZXMuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIElmIFN1cHBvcnRlZExhbmd1YWdlcyBpcyBO VUxMLCB0aGVuIEFTU0VSVCgpLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1baW5d ICBTdXBwb3J0ZWRMYW5ndWFnZXMgIEEgcG9pbnRlciB0byBhIE51bGwtdGVybWluYXRlZCBBU0NJ SQ0KPiA+IHN0cmluZw0KPiA+ICAgICA+IHRoYXQNCj4gPiAgICAgPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zIGEgc2V0IG9mIGxhbmd1YWdlIGNvZGVzIGluIHRo ZSBmb3JtYXQNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNw ZWNpZmllZCBieSBJc282MzlMYW5ndWFnZS4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dICBJc282 MzlMYW5ndWFnZSAgICAgIElmIG5vdCB6ZXJvLCB0aGVuIGFsbCBsYW5ndWFnZSBjb2RlcyBhcmUN Cj4gPiAgICAgPiBhc3N1bWVkIHRvIGJlDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbiBJU08gNjM5LTIgZm9ybWF0LiAgSWYgemVybywgdGhlbiBhbGwgbGFu Z3VhZ2UNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVz IGFyZSBhc3N1bWVkIHRvIGJlIGluIFJGQyA0NjQ2IGxhbmd1YWdlIGZvcm1hdA0KPiA+ICAgICA+ ICsgIEBwYXJhbVtpbl0gIC4uLiAgICAgICAgICAgICAgICAgQSB2YXJpYWJsZSBhcmd1bWVudCBs aXN0IHRoYXQgY29udGFpbnMgcG9pbnRlcnMNCj4gdG8NCj4gPiAgICAgPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE51bGwtdGVybWluYXRlZCBBU0NJSSBzdHJpbmdzIHRoYXQg Y29udGFpbiBvbmUgb3IgbW9yZQ0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGFuZ3VhZ2UgY29kZXMgaW4gdGhlIGZvcm1hdCBzcGVjaWZpZWQgYnkNCj4gPiBJ c282MzlMYW5ndWFnZS4NCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFRoZSBmaXJzdCBsYW5ndWFnZSBjb2RlIGZyb20gZWFjaCBvZiB0aGVzZSBsYW5ndWFnZQ0K PiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSBsaXN0cyBp cyB1c2VkIHRvIGRldGVybWluZSBpZiBpdCBpcyBhbiBleGFjdCBvcg0KPiA+ICAgICA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2UgbWF0Y2ggdG8gYW55IG9mIHRoZSBs YW5ndWFnZSBjb2RlcyBpbg0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgU3VwcG9ydGVkTGFuZ3VhZ2VzLiAgQ2xvc2UgbWF0Y2hlcyBvbmx5IGFwcGx5IHRvDQo+ IFJGQw0KPiA+IDQ2NDYNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxhbmd1YWdlIGNvZGVzLCBhbmQgdGhlIG1hdGNoaW5nIGFsZ29yaXRobSBmcm9tIFJGQw0K PiA+IDQ2NDcNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlz IHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGEgY2xvc2UgbWF0Y2ggaXMgcHJlc2VudC4gIElmDQo+ID4g ICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBleGFjdCBvciBjbG9z ZSBtYXRjaCBpcyBmb3VuZCwgdGhlbiB0aGUgbWF0Y2hpbmcNCj4gPiAgICAgPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlIGNvZGUgZnJvbSBTdXBwb3J0ZWRMYW5n dWFnZXMgaXMgcmV0dXJuZWQuDQo+IElmDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBubyBtYXRjaGVzIGFyZSBmb3VuZCwgdGhlbiB0aGUgbmV4dCB2YXJpYWJs ZQ0KPiBhcmd1bWVudA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGFyYW1ldGVyIGlzIGV2YWx1YXRlZC4gIFRoZSB2YXJpYWJsZSBhcmd1bWVudCBsaXN0DQo+ ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyB0ZXJtaW5hdGVk IGJ5IGEgTlVMTC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHZhbCBOVUxMICAgVGhl IGJlc3QgbWF0Y2hpbmcgbGFuZ3VhZ2UgY291bGQgbm90IGJlIGZvdW5kIGluDQo+ID4gICAgID4g U3VwcG9ydGVkTGFuZ3VhZ2VzLg0KPiA+ICAgICA+ICsgIEByZXR2YWwgTlVMTCAgIFRoZXJlIGFy ZSBub3QgZW5vdWdoIHJlc291cmNlcyBhdmFpbGFibGUgdG8gcmV0dXJuIHRoZQ0KPiA+IGJlc3QN Cj4gPiAgICAgPiBtYXRjaGluZw0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgIGxhbmd1YWdl Lg0KPiA+ICAgICA+ICsgIEByZXR2YWwgT3RoZXIgIEEgcG9pbnRlciB0byBhIE51bGwtdGVybWlu YXRlZCBBU0NJSSBzdHJpbmcgdGhhdCBpcyB0aGUNCj4gYmVzdA0KPiA+ICAgICA+IG1hdGNoaW5n DQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgbGFuZ3VhZ2UgaW4gU3VwcG9ydGVkTGFuZ3Vh Z2VzLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK0NIQVI4ICoNCj4g PiAgICAgPiArRUZJQVBJDQo+ID4gICAgID4gK1ZhcmlhYmxlR2V0QmVzdExhbmd1YWdlICgNCj4g PiAgICAgPiArICBJTiBDT05TVCBDSEFSOCAgKlN1cHBvcnRlZExhbmd1YWdlcywNCj4gPiAgICAg PiArICBJTiBVSU5UTiAgICAgICAgSXNvNjM5TGFuZ3VhZ2UsDQo+ID4gICAgID4gKyAgLi4uDQo+ ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgVkFfTElTVCAgICAgIEFy Z3M7DQo+ID4gICAgID4gKyAgQ0hBUjggICAgICAgICpMYW5ndWFnZTsNCj4gPiAgICAgPiArICBV SU5UTiAgICAgICAgQ29tcGFyZUxlbmd0aDsNCj4gPiAgICAgPiArICBVSU5UTiAgICAgICAgTGFu Z3VhZ2VMZW5ndGg7DQo+ID4gICAgID4gKyAgQ09OU1QgQ0hBUjggICpTdXBwb3J0ZWQ7DQo+ID4g ICAgID4gKyAgQ0hBUjggICAgICAgICpCdWZmZXI7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsg IGlmIChTdXBwb3J0ZWRMYW5ndWFnZXMgPT0gTlVMTCkgew0KPiA+ICAgICA+ICsgICAgcmV0dXJu IE5VTEw7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBWQV9TVEFS VCAoQXJncywgSXNvNjM5TGFuZ3VhZ2UpOw0KPiA+ICAgICA+ICsgIHdoaWxlICgoTGFuZ3VhZ2Ug PSBWQV9BUkcgKEFyZ3MsIENIQVI4ICopKSAhPSBOVUxMKSB7DQo+ID4gICAgID4gKyAgICAvLw0K PiA+ICAgICA+ICsgICAgLy8gRGVmYXVsdCB0byBJU08gNjM5LTIgbW9kZQ0KPiA+ICAgICA+ICsg ICAgLy8NCj4gPiAgICAgPiArICAgIENvbXBhcmVMZW5ndGggID0gMzsNCj4gPiAgICAgPiArICAg IExhbmd1YWdlTGVuZ3RoID0gTUlOICgzLCBBc2NpaVN0ckxlbiAoTGFuZ3VhZ2UpKTsNCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgLy8gSWYgaW4gUkZDIDQ2 NDYgbW9kZSwgdGhlbiBkZXRlcm1pbmUgdGhlIGxlbmd0aCBvZiB0aGUgZmlyc3QgUkZDIDQ2NDYN Cj4gPiAgICAgPiBsYW5ndWFnZSBjb2RlIGluIExhbmd1YWdlDQo+ID4gICAgID4gKyAgICAvLw0K PiA+ICAgICA+ICsgICAgaWYgKElzbzYzOUxhbmd1YWdlID09IDApIHsNCj4gPiAgICAgPiArICAg ICAgZm9yIChMYW5ndWFnZUxlbmd0aCA9IDA7IExhbmd1YWdlW0xhbmd1YWdlTGVuZ3RoXSAhPSAw ICYmDQo+ID4gICAgID4gTGFuZ3VhZ2VbTGFuZ3VhZ2VMZW5ndGhdICE9ICc7JzsgTGFuZ3VhZ2VM ZW5ndGgrKykgew0KPiA+ICAgICA+ICsgICAgICB9DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIC8vIFRyaW0gYmFjayB0aGUg bGVuZ3RoIG9mIExhbmd1YWdlIHVzZWQgdW50aWwgaXQgaXMgZW1wdHkNCj4gPiAgICAgPiArICAg IC8vDQo+ID4gICAgID4gKyAgICB3aGlsZSAoTGFuZ3VhZ2VMZW5ndGggPiAwKSB7DQo+ID4gICAg ID4gKyAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgIC8vIExvb3AgdGhyb3VnaCBhbGwgbGFuZ3Vh Z2UgY29kZXMgaW4gU3VwcG9ydGVkTGFuZ3VhZ2VzDQo+ID4gICAgID4gKyAgICAgIC8vDQo+ID4g ICAgID4gKyAgICAgIGZvciAoU3VwcG9ydGVkID0gU3VwcG9ydGVkTGFuZ3VhZ2VzOyAqU3VwcG9y dGVkICE9ICdcMCc7IFN1cHBvcnRlZA0KPiArPQ0KPiA+ICAgICA+IENvbXBhcmVMZW5ndGgpIHsN Cj4gPiAgICAgPiArICAgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAgIC8vIEluIFJGQyA0NjQ2 IG1vZGUsIHRoZW4gTG9vcCB0aHJvdWdoIGFsbCBsYW5ndWFnZSBjb2RlcyBpbg0KPiA+ICAgICA+ IFN1cHBvcnRlZExhbmd1YWdlcw0KPiA+ICAgICA+ICsgICAgICAgIC8vDQo+ID4gICAgID4gKyAg ICAgICAgaWYgKElzbzYzOUxhbmd1YWdlID09IDApIHsNCj4gPiAgICAgPiArICAgICAgICAgIC8v DQo+ID4gICAgID4gKyAgICAgICAgICAvLyBTa2lwICc7JyBjaGFyYWN0ZXJzIGluIFN1cHBvcnRl ZA0KPiA+ICAgICA+ICsgICAgICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgICAgIGZvciAoIDsg KlN1cHBvcnRlZCAhPSAnXDAnICYmICpTdXBwb3J0ZWQgPT0gJzsnOyBTdXBwb3J0ZWQrKykgew0K PiA+ICAgICA+ICsgICAgICAgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgICAgICAg IC8vDQo+ID4gICAgID4gKyAgICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIGxlbmd0aCBvZiB0aGUg bmV4dCBsYW5ndWFnZSBjb2RlIGluIFN1cHBvcnRlZA0KPiA+ICAgICA+ICsgICAgICAgICAgLy8N Cj4gPiAgICAgPiArICAgICAgICAgIGZvciAoQ29tcGFyZUxlbmd0aCA9IDA7IFN1cHBvcnRlZFtD b21wYXJlTGVuZ3RoXSAhPSAwICYmDQo+ID4gICAgID4gU3VwcG9ydGVkW0NvbXBhcmVMZW5ndGhd ICE9ICc7JzsgQ29tcGFyZUxlbmd0aCsrKSB7DQo+ID4gICAgID4gKyAgICAgICAgICB9DQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgICAgICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgICAgIC8v IElmIExhbmd1YWdlIGlzIGxvbmdlciB0aGFuIHRoZSBTdXBwb3J0ZWQsIHRoZW4gc2tpcCB0byB0 aGUgbmV4dA0KPiA+ICAgICA+IGxhbmd1YWdlDQo+ID4gICAgID4gKyAgICAgICAgICAvLw0KPiA+ ICAgICA+ICsgICAgICAgICAgaWYgKExhbmd1YWdlTGVuZ3RoID4gQ29tcGFyZUxlbmd0aCkgew0K PiA+ICAgICA+ICsgICAgICAgICAgICBjb250aW51ZTsNCj4gPiAgICAgPiArICAgICAgICAgIH0N Cj4gPiAgICAgPiArICAgICAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgICAgIC8v DQo+ID4gICAgID4gKyAgICAgICAgLy8gU2VlIGlmIHRoZSBmaXJzdCBMYW5ndWFnZUxlbmd0aCBj aGFyYWN0ZXJzIGluIFN1cHBvcnRlZCBtYXRjaA0KPiA+IExhbmd1YWdlDQo+ID4gICAgID4gKyAg ICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgICBpZiAoQXNjaWlTdHJuQ21wIChTdXBwb3J0ZWQs IExhbmd1YWdlLCBMYW5ndWFnZUxlbmd0aCkgPT0gMCkgew0KPiA+ICAgICA+ICsgICAgICAgICAg VkFfRU5EIChBcmdzKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICAgICAgICBCdWZmZXIg ICAgICAgICAgICAgICAgPSAoSXNvNjM5TGFuZ3VhZ2UgIT0gMCkgPyBtVmFyaWFibGVNb2R1bGVH bG9iYWwtDQo+ID4gPkxhbmcgOg0KPiA+ICAgICA+IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+UGxh dGZvcm1MYW5nOw0KPiA+ICAgICA+ICsgICAgICAgICAgQnVmZmVyW0NvbXBhcmVMZW5ndGhdID0g J1wwJzsNCj4gPiAgICAgPiArICAgICAgICAgIHJldHVybiBDb3B5TWVtIChCdWZmZXIsIFN1cHBv cnRlZCwgQ29tcGFyZUxlbmd0aCk7DQo+ID4gICAgID4gKyAgICAgICAgfQ0KPiA+ICAgICA+ICsg ICAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgICBpZiAoSXNvNjM5TGFuZ3VhZ2Ug IT0gMCkgew0KPiA+ICAgICA+ICsgICAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgICAgLy8gSWYg SVNPIDYzOSBtb2RlLCB0aGVuIGVhY2ggbGFuZ3VhZ2UgY2FuIG9ubHkgYmUgdGVzdGVkIG9uY2UN Cj4gPiAgICAgPiArICAgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAgIExhbmd1YWdlTGVuZ3Ro ID0gMDsNCj4gPiAgICAgPiArICAgICAgfSBlbHNlIHsNCj4gPiAgICAgPiArICAgICAgICAvLw0K PiA+ICAgICA+ICsgICAgICAgIC8vIElmIFJGQyA0NjQ2IG1vZGUsIHRoZW4gdHJpbSBMYW5ndWFn ZSBmcm9tIHRoZSByaWdodCB0byB0aGUgbmV4dCAnLQ0KPiAnDQo+ID4gICAgID4gY2hhcmFjdGVy DQo+ID4gICAgID4gKyAgICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgICBmb3IgKExhbmd1YWdl TGVuZ3RoLS07IExhbmd1YWdlTGVuZ3RoID4gMCAmJg0KPiA+ICAgICA+IExhbmd1YWdlW0xhbmd1 YWdlTGVuZ3RoXSAhPSAnLSc7IExhbmd1YWdlTGVuZ3RoLS0pIHsNCj4gPiAgICAgPiArICAgICAg ICB9DQo+ID4gICAgID4gKyAgICAgIH0NCj4gPiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArICB9 DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFZBX0VORCAoQXJncyk7DQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gTm8gbWF0Y2hlcyB3ZXJlIGZvdW5kDQo+ ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICByZXR1cm4gTlVMTDsNCj4gPiAgICAgPiArfQ0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgVGhpcyBmdW5jdGlvbiBp cyB0byBjaGVjayBpZiB0aGUgcmVtYWluaW5nIHZhcmlhYmxlIHNwYWNlIGlzIGVub3VnaCB0byBz ZXQNCj4gPiAgICAgPiArICBhbGwgVmFyaWFibGVzIGZyb20gYXJndW1lbnQgbGlzdCBzdWNjZXNz ZnVsbHkuIFRoZSBwdXJwb3NlIG9mIHRoZSBjaGVjaw0KPiA+ICAgICA+ICsgIGlzIHRvIGtlZXAg dGhlIGNvbnNpc3RlbmN5IG9mIHRoZSBWYXJpYWJsZXMgdG8gYmUgaW4gdmFyaWFibGUgc3RvcmFn ZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgTm90ZTogVmFyaWFibGVzIGFyZSBhc3N1bWVk IHRvIGJlIGluIHNhbWUgc3RvcmFnZS4NCj4gPiAgICAgPiArICBUaGUgc2V0IHNlcXVlbmNlIG9m IFZhcmlhYmxlcyB3aWxsIGJlIHNhbWUgd2l0aCB0aGUgc2VxdWVuY2Ugb2YNCj4gPiBWYXJpYWJs ZUVudHJ5DQo+ID4gICAgID4gZnJvbSBhcmd1bWVudCBsaXN0LA0KPiA+ICAgICA+ICsgIHNvIGZv bGxvdyB0aGUgYXJndW1lbnQgc2VxdWVuY2UgdG8gY2hlY2sgdGhlIFZhcmlhYmxlcy4NCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBBdHRyaWJ1dGVzICAgICAgICAgVmFyaWFi bGUgYXR0cmlidXRlcyBmb3IgVmFyaWFibGUgZW50cmllcy4NCj4gPiAgICAgPiArICBAcGFyYW1b aW5dIE1hcmtlciAgICAgICAgICAgICBWQV9MSVNUIHN0eWxlIHZhcmlhYmxlIGFyZ3VtZW50IGxp c3QuDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlh YmxlIGFyZ3VtZW50IGxpc3Qgd2l0aCB0eXBlDQo+ID4gICAgID4gVkFSSUFCTEVfRU5UUllfQ09O U0lTVEVOQ1kgKi4NCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB IE5VTEwgdGVybWluYXRlcyB0aGUgbGlzdC4gVGhlIFZhcmlhYmxlU2l6ZSBvZg0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBUklBQkxFX0VOVFJZX0NPTlNJU1RF TkNZIGlzIHRoZSB2YXJpYWJsZSBkYXRhDQo+IHNpemUNCj4gPiBhcw0KPiA+ICAgICA+IGlucHV0 Lg0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IHdpbGwgYmUg Y2hhbmdlZCB0byB2YXJpYWJsZSB0b3RhbCBzaXplIGFzIG91dHB1dC4NCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgICAgICAgICAgSGF2ZSBlbm91Z2ggdmFy aWFibGUgc3BhY2UgdG8gc2V0IHRoZSBWYXJpYWJsZXMNCj4gPiAgICAgPiBzdWNjZXNzZnVsbHku DQo+ID4gICAgID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgICAgICAgICAgTm8gZW5vdWdoIHZh cmlhYmxlIHNwYWNlIHRvIHNldCB0aGUgVmFyaWFibGVzDQo+ID4gICAgID4gc3VjY2Vzc2Z1bGx5 Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK0JPT0xFQU4NCj4gPiAg ICAgPiArRUZJQVBJDQo+ID4gICAgID4gK0NoZWNrUmVtYWluaW5nU3BhY2VGb3JDb25zaXN0ZW5j eUludGVybmFsICgNCj4gPiAgICAgPiArICBJTiBVSU5UMzIgICBBdHRyaWJ1dGVzLA0KPiA+ICAg ICA+ICsgIElOIFZBX0xJU1QgIE1hcmtlcg0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0K PiA+ICAgICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gICAg ID4gKyAgVkFfTElTVCAgICAgICAgICAgICAgICAgICAgIEFyZ3M7DQo+ID4gICAgID4gKyAgVkFS SUFCTEVfRU5UUllfQ09OU0lTVEVOQ1kgICpWYXJpYWJsZUVudHJ5Ow0KPiA+ICAgICA+ICsgIFVJ TlQ2NCAgICAgICAgICAgICAgICAgICAgICBNYXhpbXVtVmFyaWFibGVTdG9yYWdlU2l6ZTsNCj4g PiAgICAgPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgUmVtYWluaW5nVmFyaWFibGVT dG9yYWdlU2l6ZTsNCj4gPiAgICAgPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgTWF4 aW11bVZhcmlhYmxlU2l6ZTsNCj4gPiAgICAgPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAg ICAgVG90YWxOZWVkZWRTaXplOw0KPiA+ICAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICBPcmlnaW5hbFZhclNpemU7DQo+ID4gICAgID4gKyAgVkFSSUFCTEVfU1RPUkVfSEVBREVS ICAgICAgICpWYXJpYWJsZVN0b3JlSGVhZGVyOw0KPiA+ICAgICA+ICsgIFZBUklBQkxFX1BPSU5U RVJfVFJBQ0sgICAgICBWYXJpYWJsZVB0clRyYWNrOw0KPiA+ICAgICA+ICsgIFZBUklBQkxFX0hF QURFUiAgICAgICAgICAgICAqTmV4dFZhcmlhYmxlOw0KPiA+ICAgICA+ICsgIFVJTlROICAgICAg ICAgICAgICAgICAgICAgICBWYXJOYW1lU2l6ZTsNCj4gPiAgICAgPiArICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgVmFyRGF0YVNpemU7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8v DQo+ID4gICAgID4gKyAgLy8gTm9uLVZvbGF0aWxlIHJlbGF0ZWQuDQo+ID4gICAgID4gKyAgLy8N Cj4gPiAgICAgPiArICBWYXJpYWJsZVN0b3JlSGVhZGVyID0gbU52VmFyaWFibGVDYWNoZTsNCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyAgU3RhdHVzID0gVmFyaWFibGVTZXJ2aWNlUXVlcnlWYXJp YWJsZUluZm9JbnRlcm5hbCAoDQo+ID4gICAgID4gKyAgICAgICAgICAgICBBdHRyaWJ1dGVzLA0K PiA+ICAgICA+ICsgICAgICAgICAgICAgJk1heGltdW1WYXJpYWJsZVN0b3JhZ2VTaXplLA0KPiA+ ICAgICA+ICsgICAgICAgICAgICAgJlJlbWFpbmluZ1ZhcmlhYmxlU3RvcmFnZVNpemUsDQo+ID4g ICAgID4gKyAgICAgICAgICAgICAmTWF4aW11bVZhcmlhYmxlU2l6ZQ0KPiA+ICAgICA+ICsgICAg ICAgICAgICAgKTsNCj4gPiAgICAgPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICBUb3RhbE5lZWRlZFNpemUgPSAwOw0KPiA+ICAgICA+ICsg IFZBX0NPUFkgKEFyZ3MsIE1hcmtlcik7DQo+ID4gICAgID4gKyAgVmFyaWFibGVFbnRyeSA9IFZB X0FSRyAoQXJncywgVkFSSUFCTEVfRU5UUllfQ09OU0lTVEVOQ1kgKik7DQo+ID4gICAgID4gKyAg d2hpbGUgKFZhcmlhYmxlRW50cnkgIT0gTlVMTCkgew0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAg ICAgPiArICAgIC8vIENhbGN1bGF0ZSB2YXJpYWJsZSB0b3RhbCBzaXplLg0KPiA+ICAgICA+ICsg ICAgLy8NCj4gPiAgICAgPiArICAgIFZhck5hbWVTaXplICAgICAgICAgICAgICAgICA9IFN0clNp emUgKFZhcmlhYmxlRW50cnktPk5hbWUpOw0KPiA+ICAgICA+ICsgICAgVmFyTmFtZVNpemUgICAg ICAgICAgICAgICAgKz0gR0VUX1BBRF9TSVpFIChWYXJOYW1lU2l6ZSk7DQo+ID4gICAgID4gKyAg ICBWYXJEYXRhU2l6ZSAgICAgICAgICAgICAgICAgPSBWYXJpYWJsZUVudHJ5LT5WYXJpYWJsZVNp emU7DQo+ID4gICAgID4gKyAgICBWYXJEYXRhU2l6ZSAgICAgICAgICAgICAgICArPSBHRVRfUEFE X1NJWkUgKFZhckRhdGFTaXplKTsNCj4gPiAgICAgPiArICAgIFZhcmlhYmxlRW50cnktPlZhcmlh YmxlU2l6ZSA9IEhFQURFUl9BTElHTiAoDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEdldFZhcmlhYmxlSGVhZGVyU2l6ZSAoDQo+ID4gICAgID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0K PiA+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICkgKyBWYXJOYW1lU2l6ZSArIFZhckRhdGFTaXplDQo+ID4g ICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsgICAgVG90YWxOZWVkZWRTaXplICs9IFZhcmlhYmxlRW50cnktPlZhcmlh YmxlU2l6ZTsNCj4gPiAgICAgPiArICAgIFZhcmlhYmxlRW50cnkgICAgPSBWQV9BUkcgKEFyZ3Ms IFZBUklBQkxFX0VOVFJZX0NPTlNJU1RFTkNZICopOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyAgVkFfRU5EIChBcmdzKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgaWYgKFJlbWFpbmluZ1ZhcmlhYmxlU3RvcmFnZVNpemUgPj0gVG90YWxOZWVkZWRTaXplKSB7 DQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgLy8gQWxyZWFkeSBoYXZlIGVub3Vn aCBzcGFjZS4NCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICByZXR1cm4gVFJVRTsN Cj4gPiAgICAgPiArICB9IGVsc2UgaWYgKEF0UnVudGltZSAoKSkgew0KPiA+ICAgICA+ICsgICAg Ly8NCj4gPiAgICAgPiArICAgIC8vIEF0IHJ1bnRpbWUsIG5vIHJlY2xhaW0uDQo+ID4gICAgID4g KyAgICAvLyBUaGUgb3JpZ2luYWwgdmFyaWFibGUgc3BhY2Ugb2YgVmFyaWFibGVzIGNhbid0IGJl IHJldXNlZC4NCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICByZXR1cm4gRkFMU0U7 DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBWQV9DT1BZIChBcmdz LCBNYXJrZXIpOw0KPiA+ICAgICA+ICsgIFZhcmlhYmxlRW50cnkgPSBWQV9BUkcgKEFyZ3MsIFZB UklBQkxFX0VOVFJZX0NPTlNJU1RFTkNZICopOw0KPiA+ICAgICA+ICsgIHdoaWxlIChWYXJpYWJs ZUVudHJ5ICE9IE5VTEwpIHsNCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICAvLyBD aGVjayBpZiBWYXJpYWJsZVtJbmRleF0gaGFzIGJlZW4gcHJlc2VudCBhbmQgZ2V0IGl0cyBzaXpl Lg0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIE9yaWdpbmFsVmFyU2l6ZSAgICAg ICAgICAgPSAwOw0KPiA+ICAgICA+ICsgICAgVmFyaWFibGVQdHJUcmFjay5TdGFydFB0ciA9IEdl dFN0YXJ0UG9pbnRlciAoVmFyaWFibGVTdG9yZUhlYWRlcik7DQo+ID4gICAgID4gKyAgICBWYXJp YWJsZVB0clRyYWNrLkVuZFB0ciAgID0gR2V0RW5kUG9pbnRlciAoVmFyaWFibGVTdG9yZUhlYWRl cik7DQo+ID4gICAgID4gKyAgICBTdGF0dXMgICAgICAgICAgICAgICAgICAgID0gRmluZFZhcmlh YmxlRXggKA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFy aWFibGVFbnRyeS0+TmFtZSwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFZhcmlhYmxlRW50cnktPkd1aWQsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGQUxTRSwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZWYXJpYWJsZVB0clRyYWNrLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2Jh bC5BdXRoRm9ybWF0DQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApOw0KPiA+ICAgICA+ICsgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAg PiArICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgLy8gR2V0IHNpemUgb2YgVmFyaWFibGVbSW5k ZXhdLg0KPiA+ICAgICA+ICsgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICBOZXh0VmFyaWFibGUg ICAgPSBHZXROZXh0VmFyaWFibGVQdHIgKFZhcmlhYmxlUHRyVHJhY2suQ3VyclB0ciwNCj4gPiAg ICAgPiBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLkF1dGhGb3JtYXQpOw0K PiA+ICAgICA+ICsgICAgICBPcmlnaW5hbFZhclNpemUgPSAoVUlOVE4pTmV4dFZhcmlhYmxlIC0N Cj4gPiAoVUlOVE4pVmFyaWFibGVQdHJUcmFjay5DdXJyUHRyOw0KPiA+ICAgICA+ICsgICAgICAv Lw0KPiA+ICAgICA+ICsgICAgICAvLyBBZGQgdGhlIG9yaWdpbmFsIHNpemUgb2YgVmFyaWFibGVb SW5kZXhdIHRvIHJlbWFpbmluZyB2YXJpYWJsZQ0KPiBzdG9yYWdlDQo+ID4gc2l6ZS4NCj4gPiAg ICAgPiArICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgUmVtYWluaW5nVmFyaWFibGVTdG9yYWdl U2l6ZSArPSBPcmlnaW5hbFZhclNpemU7DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgICAgaWYgKFZhcmlhYmxlRW50cnktPlZhcmlhYmxlU2l6ZSA+IFJlbWFpbmlu Z1ZhcmlhYmxlU3RvcmFnZVNpemUpIHsNCj4gPiAgICAgPiArICAgICAgLy8NCj4gPiAgICAgPiAr ICAgICAgLy8gTm8gZW5vdWdoIHNwYWNlIGZvciBWYXJpYWJsZVtJbmRleF0uDQo+ID4gICAgID4g KyAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgIFZBX0VORCAoQXJncyk7DQo+ID4gICAgID4gKyAg ICAgIHJldHVybiBGQUxTRTsNCj4gPiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgLy8gU3ViIHRoZSAobmV3KSBzaXplIG9mIFZhcmlh YmxlW0luZGV4XSBmcm9tIHJlbWFpbmluZyB2YXJpYWJsZQ0KPiBzdG9yYWdlDQo+ID4gc2l6ZS4N Cj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICBSZW1haW5pbmdWYXJpYWJsZVN0b3Jh Z2VTaXplIC09IFZhcmlhYmxlRW50cnktPlZhcmlhYmxlU2l6ZTsNCj4gPiAgICAgPiArICAgIFZh cmlhYmxlRW50cnkgICAgICAgICAgICAgICAgID0gVkFfQVJHIChBcmdzLA0KPiBWQVJJQUJMRV9F TlRSWV9DT05TSVNURU5DWQ0KPiA+ICopOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgVkFfRU5EIChBcmdzKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgcmV0 dXJuIFRSVUU7DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ ICAgICA+ICsgIFRoaXMgZnVuY3Rpb24gaXMgdG8gY2hlY2sgaWYgdGhlIHJlbWFpbmluZyB2YXJp YWJsZSBzcGFjZSBpcyBlbm91Z2ggdG8gc2V0DQo+ID4gICAgID4gKyAgYWxsIFZhcmlhYmxlcyBm cm9tIGFyZ3VtZW50IGxpc3Qgc3VjY2Vzc2Z1bGx5LiBUaGUgcHVycG9zZSBvZiB0aGUgY2hlY2sN Cj4gPiAgICAgPiArICBpcyB0byBrZWVwIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgVmFyaWFibGVz IHRvIGJlIGluIHZhcmlhYmxlIHN0b3JhZ2UuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIE5v dGU6IFZhcmlhYmxlcyBhcmUgYXNzdW1lZCB0byBiZSBpbiBzYW1lIHN0b3JhZ2UuDQo+ID4gICAg ID4gKyAgVGhlIHNldCBzZXF1ZW5jZSBvZiBWYXJpYWJsZXMgd2lsbCBiZSBzYW1lIHdpdGggdGhl IHNlcXVlbmNlIG9mDQo+ID4gVmFyaWFibGVFbnRyeQ0KPiA+ICAgICA+IGZyb20gYXJndW1lbnQg bGlzdCwNCj4gPiAgICAgPiArICBzbyBmb2xsb3cgdGhlIGFyZ3VtZW50IHNlcXVlbmNlIHRvIGNo ZWNrIHRoZSBWYXJpYWJsZXMuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0g QXR0cmlidXRlcyAgICAgICAgIFZhcmlhYmxlIGF0dHJpYnV0ZXMgZm9yIFZhcmlhYmxlIGVudHJp ZXMuDQo+ID4gICAgID4gKyAgQHBhcmFtIC4uLiAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlh YmxlIGFyZ3VtZW50IGxpc3Qgd2l0aCB0eXBlDQo+ID4gICAgID4gVkFSSUFCTEVfRU5UUllfQ09O U0lTVEVOQ1kgKi4NCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB IE5VTEwgdGVybWluYXRlcyB0aGUgbGlzdC4gVGhlIFZhcmlhYmxlU2l6ZSBvZg0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBUklBQkxFX0VOVFJZX0NPTlNJU1RF TkNZIGlzIHRoZSB2YXJpYWJsZSBkYXRhDQo+IHNpemUNCj4gPiBhcw0KPiA+ICAgICA+IGlucHV0 Lg0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IHdpbGwgYmUg Y2hhbmdlZCB0byB2YXJpYWJsZSB0b3RhbCBzaXplIGFzIG91dHB1dC4NCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgICAgICAgICAgSGF2ZSBlbm91Z2ggdmFy aWFibGUgc3BhY2UgdG8gc2V0IHRoZSBWYXJpYWJsZXMNCj4gPiAgICAgPiBzdWNjZXNzZnVsbHku DQo+ID4gICAgID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgICAgICAgICAgTm8gZW5vdWdoIHZh cmlhYmxlIHNwYWNlIHRvIHNldCB0aGUgVmFyaWFibGVzDQo+ID4gICAgID4gc3VjY2Vzc2Z1bGx5 Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK0JPT0xFQU4NCj4gPiAg ICAgPiArRUZJQVBJDQo+ID4gICAgID4gK0NoZWNrUmVtYWluaW5nU3BhY2VGb3JDb25zaXN0ZW5j eSAoDQo+ID4gICAgID4gKyAgSU4gVUlOVDMyICBBdHRyaWJ1dGVzLA0KPiA+ICAgICA+ICsgIC4u Lg0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0KPiA+ICAgICA+ICsgIFZBX0xJU1QgIE1h cmtlcjsNCj4gPiAgICAgPiArICBCT09MRUFOICBSZXR1cm47DQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsgIFZBX1NUQVJUIChNYXJrZXIsIEF0dHJpYnV0ZXMpOw0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICBSZXR1cm4gPSBDaGVja1JlbWFpbmluZ1NwYWNlRm9yQ29uc2lzdGVuY3lJbnRlcm5h bCAoQXR0cmlidXRlcywNCj4gPiBNYXJrZXIpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBW QV9FTkQgKE1hcmtlcik7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIHJldHVybiBSZXR1cm47 DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsg IEhvb2sgdGhlIG9wZXJhdGlvbnMgaW4gUGxhdGZvcm1MYW5nQ29kZXMsIExhbmdDb2RlcywgUGxh dGZvcm1MYW5nDQo+ID4gYW5kDQo+ID4gICAgID4gTGFuZy4NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgV2hlbiBzZXR0aW5nIExhbmcvTGFuZ0NvZGVzLCBzaW11bHRhbmVvdXNseSB1cGRhdGUN Cj4gPiAgICAgPiBQbGF0Zm9ybUxhbmcvUGxhdGZvcm1MYW5nQ29kZXMuDQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIEFjY29yZGluZyB0byBVRUZJIHNwZWMsIFBsYXRmb3JtTGFuZ0NvZGVzL0xh bmdDb2RlcyBhcmUgb25seSBzZXQNCj4gb25jZQ0KPiA+IGluDQo+ID4gICAgID4gZmlybXdhcmUg aW5pdGlhbGl6YXRpb24sDQo+ID4gICAgID4gKyAgYW5kIGFyZSByZWFkLW9ubHkuIFRoZXJlZm9y ZSwgaW4gdmFyaWFibGUgZHJpdmVyLCBvbmx5IHN0b3JlIHRoZSBvcmlnaW5hbA0KPiA+IHZhbHVl DQo+ID4gICAgID4gZm9yIG90aGVyIHVzZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBh cmFtW2luXSBWYXJpYWJsZU5hbWUgICAgICAgTmFtZSBvZiB2YXJpYWJsZS4NCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBEYXRhICAgICAgICAgICAgICAgVmFyaWFibGUgZGF0 YS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBEYXRhU2l6ZSAgICAgICAg ICAgU2l6ZSBvZiBkYXRhLiAwIG1lYW5zIGRlbGV0ZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHVwZGF0ZSBvcGVyYXRpb24gaXMg c3VjY2Vzc2Z1bCBvcg0KPiBpZ25vcmVkLg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX1dSSVRF X1BST1RFQ1RFRCAgIFVwZGF0ZQ0KPiBQbGF0Zm9ybUxhbmdDb2Rlcy9MYW5nQ29kZXMNCj4gPiBh dA0KPiA+ICAgICA+IHJ1bnRpbWUuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JF U09VUkNFUyAgTm8gZW5vdWdoIHZhcmlhYmxlIHNwYWNlIHRvIGRvIHRoZQ0KPiA+ICAgICA+IHVw ZGF0ZSBvcGVyYXRpb24uDQo+ID4gICAgID4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAg ICAgT3RoZXIgZXJyb3JzIGhhcHBlbmVkIGR1cmluZyB0aGUgdXBkYXRlDQo+ID4gb3BlcmF0aW9u Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4g PiAgICAgPiArQXV0b1VwZGF0ZUxhbmdWYXJpYWJsZSAoDQo+ID4gICAgID4gKyAgSU4gIENIQVIx NiAgKlZhcmlhYmxlTmFtZSwNCj4gPiAgICAgPiArICBJTiAgVk9JRCAgICAqRGF0YSwNCj4gPiAg ICAgPiArICBJTiAgVUlOVE4gICBEYXRhU2l6ZQ0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiAr ew0KPiA+ICAgICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4g ICAgID4gKyAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICpCZXN0UGxhdGZvcm1MYW5nOw0K PiA+ICAgICA+ICsgIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAqQmVzdExhbmc7DQo+ID4g ICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiA+ICAgICA+ICsg IFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVzOw0KPiA+ICAgICA+ICsgIFZB UklBQkxFX1BPSU5URVJfVFJBQ0sgICAgICBWYXJpYWJsZTsNCj4gPiAgICAgPiArICBCT09MRUFO ICAgICAgICAgICAgICAgICAgICAgU2V0TGFuZ3VhZ2VDb2RlczsNCj4gPiAgICAgPiArICBWQVJJ QUJMRV9FTlRSWV9DT05TSVNURU5DWSAgVmFyaWFibGVFbnRyeVsyXTsNCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBEb24ndCBkbyB1cGRhdGVzIGZvciBkZWxl dGUgb3BlcmF0aW9uDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBpZiAoRGF0YVNpemUg PT0gMCkgew0KPiA+ICAgICA+ICsgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICAgICA+ICsg IH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgU2V0TGFuZ3VhZ2VDb2RlcyA9IEZBTFNFOw0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBpZiAoU3RyQ21wIChWYXJpYWJsZU5hbWUsDQo+ID4g RUZJX1BMQVRGT1JNX0xBTkdfQ09ERVNfVkFSSUFCTEVfTkFNRSkNCj4gPiAgICAgPiA9PSAwKSB7 DQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgLy8gUGxhdGZvcm1MYW5nQ29kZXMg aXMgYSB2b2xhdGlsZSB2YXJpYWJsZSwgc28gaXQgY2FuIG5vdCBiZSB1cGRhdGVkIGF0DQo+ID4g ICAgID4gcnVudGltZS4NCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICBpZiAoQXRS dW50aW1lICgpKSB7DQo+ID4gICAgID4gKyAgICAgIHJldHVybiBFRklfV1JJVEVfUFJPVEVDVEVE Ow0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgIFNldExhbmd1 YWdlQ29kZXMgPSBUUlVFOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAg ID4gKyAgICAvLyBBY2NvcmRpbmcgdG8gVUVGSSBzcGVjLCBQbGF0Zm9ybUxhbmdDb2RlcyBpcyBv bmx5IHNldCBvbmNlIGluDQo+ID4gZmlybXdhcmUNCj4gPiAgICAgPiBpbml0aWFsaXphdGlvbiwg YW5kIGlzIHJlYWQtb25seQ0KPiA+ICAgICA+ICsgICAgLy8gVGhlcmVmb3JlLCBpbiB2YXJpYWJs ZSBkcml2ZXIsIG9ubHkgc3RvcmUgdGhlIG9yaWdpbmFsIHZhbHVlIGZvciBvdGhlcg0KPiB1c2Uu DQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgaWYgKG1WYXJpYWJsZU1vZHVsZUds b2JhbC0+UGxhdGZvcm1MYW5nQ29kZXMgIT0gTlVMTCkgew0KPiA+ICAgICA+ICsgICAgICBGcmVl UG9vbCAobVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5QbGF0Zm9ybUxhbmdDb2Rlcyk7DQo+ID4gICAg ID4gKyAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgbVZhcmlhYmxlTW9kdWxlR2xv YmFsLT5QbGF0Zm9ybUxhbmdDb2RlcyA9DQo+ID4gQWxsb2NhdGVSdW50aW1lQ29weVBvb2wNCj4g PiAgICAgPiAoRGF0YVNpemUsIERhdGEpOw0KPiA+ICAgICA+ICsgICAgQVNTRVJUIChtVmFyaWFi bGVNb2R1bGVHbG9iYWwtPlBsYXRmb3JtTGFuZ0NvZGVzICE9IE5VTEwpOw0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICAvLyBQbGF0Zm9ybUxhbmcgaG9sZHMg YSBzaW5nbGUgbGFuZ3VhZ2UgZnJvbSBQbGF0Zm9ybUxhbmdDb2RlcywNCj4gPiAgICAgPiArICAg IC8vIHNvIHRoZSBzaXplIG9mIFBsYXRmb3JtTGFuZ0NvZGVzIGlzIGVub3VnaCBmb3IgdGhlIFBs YXRmb3JtTGFuZy4NCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICBpZiAobVZhcmlh YmxlTW9kdWxlR2xvYmFsLT5QbGF0Zm9ybUxhbmcgIT0gTlVMTCkgew0KPiA+ICAgICA+ICsgICAg ICBGcmVlUG9vbCAobVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5QbGF0Zm9ybUxhbmcpOw0KPiA+ICAg ICA+ICsgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgIG1WYXJpYWJsZU1vZHVsZUds b2JhbC0+UGxhdGZvcm1MYW5nID0gQWxsb2NhdGVSdW50aW1lUG9vbA0KPiA+IChEYXRhU2l6ZSk7 DQo+ID4gICAgID4gKyAgICBBU1NFUlQgKG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+UGxhdGZvcm1M YW5nICE9IE5VTEwpOw0KPiA+ICAgICA+ICsgIH0gZWxzZSBpZiAoU3RyQ21wIChWYXJpYWJsZU5h bWUsIEVGSV9MQU5HX0NPREVTX1ZBUklBQkxFX05BTUUpDQo+ID09DQo+ID4gMCkgew0KPiA+ICAg ICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIC8vIExhbmdDb2RlcyBpcyBhIHZvbGF0aWxlIHZh cmlhYmxlLCBzbyBpdCBjYW4gbm90IGJlIHVwZGF0ZWQgYXQgcnVudGltZS4NCj4gPiAgICAgPiAr ICAgIC8vDQo+ID4gICAgID4gKyAgICBpZiAoQXRSdW50aW1lICgpKSB7DQo+ID4gICAgID4gKyAg ICAgIHJldHVybiBFRklfV1JJVEVfUFJPVEVDVEVEOw0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArICAgIFNldExhbmd1YWdlQ29kZXMgPSBUUlVFOw0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICAvLyBBY2NvcmRpbmcgdG8gVUVG SSBzcGVjLCBMYW5nQ29kZXMgaXMgb25seSBzZXQgb25jZSBpbiBmaXJtd2FyZQ0KPiA+ICAgICA+ IGluaXRpYWxpemF0aW9uLCBhbmQgaXMgcmVhZC1vbmx5DQo+ID4gICAgID4gKyAgICAvLyBUaGVy ZWZvcmUsIGluIHZhcmlhYmxlIGRyaXZlciwgb25seSBzdG9yZSB0aGUgb3JpZ2luYWwgdmFsdWUg Zm9yIG90aGVyDQo+IHVzZS4NCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICBpZiAo bVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5MYW5nQ29kZXMgIT0gTlVMTCkgew0KPiA+ICAgICA+ICsg ICAgICBGcmVlUG9vbCAobVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5MYW5nQ29kZXMpOw0KPiA+ICAg ICA+ICsgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgIG1WYXJpYWJsZU1vZHVsZUds b2JhbC0+TGFuZ0NvZGVzID0gQWxsb2NhdGVSdW50aW1lQ29weVBvb2wNCj4gPiAoRGF0YVNpemUs DQo+ID4gICAgID4gRGF0YSk7DQo+ID4gICAgID4gKyAgICBBU1NFUlQgKG1WYXJpYWJsZU1vZHVs ZUdsb2JhbC0+TGFuZ0NvZGVzICE9IE5VTEwpOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyAgaWYgKCAgU2V0TGFuZ3VhZ2VDb2Rlcw0KPiA+ICAgICA+ICsgICAgICYm IChtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlBsYXRmb3JtTGFuZ0NvZGVzICE9IE5VTEwpDQo+ID4g ICAgID4gKyAgICAgJiYgKG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+TGFuZ0NvZGVzICE9IE5VTEwp KQ0KPiA+ICAgICA+ICsgIHsNCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICAvLyBV cGRhdGUgTGFuZyBpZiBQbGF0Zm9ybUxhbmcgaXMgYWxyZWFkeSBzZXQNCj4gPiAgICAgPiArICAg IC8vIFVwZGF0ZSBQbGF0Zm9ybUxhbmcgaWYgTGFuZyBpcyBhbHJlYWR5IHNldA0KPiA+ICAgICA+ ICsgICAgLy8NCj4gPiAgICAgPiArICAgIFN0YXR1cyA9IEZpbmRWYXJpYWJsZSAoRUZJX1BMQVRG T1JNX0xBTkdfVkFSSUFCTEVfTkFNRSwNCj4gPiAgICAgPiAmZ0VmaUdsb2JhbFZhcmlhYmxlR3Vp ZCwgJlZhcmlhYmxlLCAmbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ID5WYXJpYWJsZUdsb2Jh bCwNCj4gPiAgICAgPiBGQUxTRSk7DQo+ID4gICAgID4gKyAgICBpZiAoIUVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiA+ICAgICA+ICsgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAvLyBVcGRhdGUg TGFuZw0KPiA+ICAgICA+ICsgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICBWYXJpYWJsZU5hbWUg PSBFRklfUExBVEZPUk1fTEFOR19WQVJJQUJMRV9OQU1FOw0KPiA+ICAgICA+ICsgICAgICBEYXRh ICAgICAgICAgPSBHZXRWYXJpYWJsZURhdGFQdHIgKFZhcmlhYmxlLkN1cnJQdHIsDQo+ID4gbVZh cmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ICAgICA+ID5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0 KTsNCj4gPiAgICAgPiArICAgICAgRGF0YVNpemUgICAgID0gRGF0YVNpemVPZlZhcmlhYmxlIChW YXJpYWJsZS5DdXJyUHRyLA0KPiA+IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCj4gPiAgICAgPiA+ VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdCk7DQo+ID4gICAgID4gKyAgICB9IGVsc2Ugew0KPiA+ ICAgICA+ICsgICAgICBTdGF0dXMgPSBGaW5kVmFyaWFibGUgKEVGSV9MQU5HX1ZBUklBQkxFX05B TUUsDQo+ID4gICAgID4gJmdFZmlHbG9iYWxWYXJpYWJsZUd1aWQsICZWYXJpYWJsZSwgJm1WYXJp YWJsZU1vZHVsZUdsb2JhbC0NCj4gPiA+VmFyaWFibGVHbG9iYWwsDQo+ID4gICAgID4gRkFMU0Up Ow0KPiA+ICAgICA+ICsgICAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICAgICA+ ICsgICAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgICAgLy8gVXBkYXRlIFBsYXRmb3JtTGFuZw0K PiA+ICAgICA+ICsgICAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgICAgVmFyaWFibGVOYW1lID0g RUZJX0xBTkdfVkFSSUFCTEVfTkFNRTsNCj4gPiAgICAgPiArICAgICAgICBEYXRhICAgICAgICAg PSBHZXRWYXJpYWJsZURhdGFQdHIgKFZhcmlhYmxlLkN1cnJQdHIsDQo+ID4gbVZhcmlhYmxlTW9k dWxlR2xvYmFsLQ0KPiA+ICAgICA+ID5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0KTsNCj4gPiAg ICAgPiArICAgICAgICBEYXRhU2l6ZSAgICAgPSBEYXRhU2l6ZU9mVmFyaWFibGUgKFZhcmlhYmxl LkN1cnJQdHIsDQo+ID4gICAgID4gbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2Jh bC5BdXRoRm9ybWF0KTsNCj4gPiAgICAgPiArICAgICAgfSBlbHNlIHsNCj4gPiAgICAgPiArICAg ICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAgIC8vIE5laXRoZXIgUGxhdGZvcm1MYW5nIG5vciBM YW5nIGlzIHNldCwgZGlyZWN0bHkgcmV0dXJuDQo+ID4gICAgID4gKyAgICAgICAgLy8NCj4gPiAg ICAgPiArICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gICAgID4gKyAgICAgIH0NCj4g PiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsg IFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ ICAgICA+ICsgIC8vIEFjY29yZGluZyB0byBVRUZJIHNwZWMsICJMYW5nIiBhbmQgIlBsYXRmb3Jt TGFuZyIgaXMgTlZ8QlN8UlQNCj4gPiAgICAgPiBhdHRyaWJ1dGlvbnMuDQo+ID4gICAgID4gKyAg Ly8NCj4gPiAgICAgPiArICBBdHRyaWJ1dGVzID0gRUZJX1ZBUklBQkxFX05PTl9WT0xBVElMRSB8 DQo+ID4gICAgID4gRUZJX1ZBUklBQkxFX0JPT1RTRVJWSUNFX0FDQ0VTUyB8IEVGSV9WQVJJQUJM RV9SVU5USU1FX0FDQ0VTUzsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgaWYgKFN0ckNtcCAo VmFyaWFibGVOYW1lLCBFRklfUExBVEZPUk1fTEFOR19WQVJJQUJMRV9OQU1FKSA9PQ0KPiAwKQ0K PiA+IHsNCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICAvLyBVcGRhdGUgTGFuZyB3 aGVuIFBsYXRmb3JtTGFuZ0NvZGVzL0xhbmdDb2RlcyB3ZXJlIHNldC4NCj4gPiAgICAgPiArICAg IC8vDQo+ID4gICAgID4gKyAgICBpZiAoKG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+UGxhdGZvcm1M YW5nQ29kZXMgIT0gTlVMTCkgJiYNCj4gPiAgICAgPiAobVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5M YW5nQ29kZXMgIT0gTlVMTCkpIHsNCj4gPiAgICAgPiArICAgICAgLy8NCj4gPiAgICAgPiArICAg ICAgLy8gV2hlbiBzZXR0aW5nIFBsYXRmb3JtTGFuZywgZmlyc3RseSBnZXQgbW9zdCBtYXRjaGVk IGxhbmd1YWdlDQo+IHN0cmluZw0KPiA+ICAgICA+IGZyb20gc3VwcG9ydGVkIGxhbmd1YWdlIGNv ZGVzLg0KPiA+ICAgICA+ICsgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICBCZXN0UGxhdGZvcm1M YW5nID0gVmFyaWFibGVHZXRCZXN0TGFuZ3VhZ2UNCj4gPiAobVZhcmlhYmxlTW9kdWxlR2xvYmFs LQ0KPiA+ICAgICA+ID5QbGF0Zm9ybUxhbmdDb2RlcywgRkFMU0UsIERhdGEsIE5VTEwpOw0KPiA+ ICAgICA+ICsgICAgICBpZiAoQmVzdFBsYXRmb3JtTGFuZyAhPSBOVUxMKSB7DQo+ID4gICAgID4g KyAgICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgICAvLyBHZXQgdGhlIGNvcnJlc3BvbmRpbmcg aW5kZXggaW4gbGFuZ3VhZ2UgY29kZXMuDQo+ID4gICAgID4gKyAgICAgICAgLy8NCj4gPiAgICAg PiArICAgICAgICBJbmRleCA9IEdldEluZGV4RnJvbVN1cHBvcnRlZExhbmdDb2Rlcw0KPiAobVZh cmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ICAgICA+ID5QbGF0Zm9ybUxhbmdDb2RlcywgQmVzdFBs YXRmb3JtTGFuZywgRkFMU0UpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgICAgICAvLw0K PiA+ICAgICA+ICsgICAgICAgIC8vIEdldCB0aGUgY29ycmVzcG9uZGluZyBJU082MzkgbGFuZ3Vh Z2UgdGFnIGFjY29yZGluZyB0byBSRkM0NjQ2DQo+ID4gICAgID4gbGFuZ3VhZ2UgdGFnLg0KPiA+ ICAgICA+ICsgICAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgICAgQmVzdExhbmcgPSBHZXRMYW5n RnJvbVN1cHBvcnRlZExhbmdDb2Rlcw0KPiA+IChtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4g ICAgID4gPkxhbmdDb2RlcywgSW5kZXgsIFRSVUUpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr ICAgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAgIC8vIENoZWNrIHRoZSB2YXJpYWJsZSBzcGFj ZSBmb3IgYm90aCBMYW5nIGFuZCBQbGF0Zm9ybUxhbmcgdmFyaWFibGUuDQo+ID4gICAgID4gKyAg ICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgICBWYXJpYWJsZUVudHJ5WzBdLlZhcmlhYmxlU2l6 ZSA9IElTT182MzlfMl9FTlRSWV9TSVpFICsgMTsNCj4gPiAgICAgPiArICAgICAgICBWYXJpYWJs ZUVudHJ5WzBdLkd1aWQgICAgICAgICA9ICZnRWZpR2xvYmFsVmFyaWFibGVHdWlkOw0KPiA+ICAg ICA+ICsgICAgICAgIFZhcmlhYmxlRW50cnlbMF0uTmFtZSAgICAgICAgID0gRUZJX0xBTkdfVkFS SUFCTEVfTkFNRTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICAgICAgVmFyaWFibGVFbnRy eVsxXS5WYXJpYWJsZVNpemUgPSBBc2NpaVN0clNpemUgKEJlc3RQbGF0Zm9ybUxhbmcpOw0KPiA+ ICAgICA+ICsgICAgICAgIFZhcmlhYmxlRW50cnlbMV0uR3VpZCAgICAgICAgID0gJmdFZmlHbG9i YWxWYXJpYWJsZUd1aWQ7DQo+ID4gICAgID4gKyAgICAgICAgVmFyaWFibGVFbnRyeVsxXS5OYW1l ICAgICAgICAgPQ0KPiBFRklfUExBVEZPUk1fTEFOR19WQVJJQUJMRV9OQU1FOw0KPiA+ICAgICA+ ICsgICAgICAgIGlmICghQ2hlY2tSZW1haW5pbmdTcGFjZUZvckNvbnNpc3RlbmN5DQo+ID4gICAg ID4gKFZBUklBQkxFX0FUVFJJQlVURV9OVl9CU19SVCwgJlZhcmlhYmxlRW50cnlbMF0sICZWYXJp YWJsZUVudHJ5WzFdLA0KPiA+ICAgICA+IE5VTEwpKSB7DQo+ID4gICAgID4gKyAgICAgICAgICAv Lw0KPiA+ICAgICA+ICsgICAgICAgICAgLy8gTm8gZW5vdWdoIHZhcmlhYmxlIHNwYWNlIHRvIHNl dCBib3RoIExhbmcgYW5kIFBsYXRmb3JtTGFuZw0KPiA+ICAgICA+IHN1Y2Nlc3NmdWxseS4NCj4g PiAgICAgPiArICAgICAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgICAgICBTdGF0dXMgPSBFRklf T1VUX09GX1JFU09VUkNFUzsNCj4gPiAgICAgPiArICAgICAgICB9IGVsc2Ugew0KPiA+ICAgICA+ ICsgICAgICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgICAgIC8vIFN1Y2Nlc3NmdWxseSBjb252 ZXJ0IFBsYXRmb3JtTGFuZyB0byBMYW5nLCBhbmQgc2V0IHRoZSBCZXN0TGFuZw0KPiA+IHZhbHVl DQo+ID4gICAgID4gaW50byBMYW5nIHZhcmlhYmxlIHNpbXVsdGFuZW91c2x5Lg0KPiA+ICAgICA+ ICsgICAgICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgICAgIEZpbmRWYXJpYWJsZSAoRUZJX0xB TkdfVkFSSUFCTEVfTkFNRSwgJmdFZmlHbG9iYWxWYXJpYWJsZUd1aWQsDQo+ID4gICAgID4gJlZh cmlhYmxlLCAmbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbCwgRkFMU0UpOw0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgICAgICAgIFN0YXR1cyA9IFVwZGF0ZVZhcmlhYmxl ICgNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgRUZJX0xBTkdfVkFSSUFCTEVfTkFN RSwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgJmdFZmlHbG9iYWxWYXJpYWJsZUd1 aWQsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgIEJlc3RMYW5nLA0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgICAgICAgICBJU09fNjM5XzJfRU5UUllfU0laRSArIDEsDQo+ID4gICAg ID4gKyAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZXMsDQo+ID4gICAgID4gKyAgICAgICAg ICAgICAgICAgICAgIDAsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgIDAsDQo+ID4g ICAgID4gKyAgICAgICAgICAgICAgICAgICAgICZWYXJpYWJsZSwNCj4gPiAgICAgPiArICAgICAg ICAgICAgICAgICAgICAgTlVMTA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICApOw0K PiA+ICAgICA+ICsgICAgICAgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICAgICAgREVC VUcgKChERUJVR19JTkZPLCAiVmFyaWFibGUgRHJpdmVyIEF1dG8gVXBkYXRlIFBsYXRmb3JtTGFu ZywNCj4gPiAgICAgPiBQbGF0Zm9ybUxhbmc6JWEsIExhbmc6JWEgU3RhdHVzOiAlclxuIiwgQmVz dFBsYXRmb3JtTGFuZywgQmVzdExhbmcsDQo+ID4gU3RhdHVzKSk7DQo+ID4gICAgID4gKyAgICAg IH0NCj4gPiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArICB9IGVsc2UgaWYgKFN0ckNtcCAoVmFy aWFibGVOYW1lLCBFRklfTEFOR19WQVJJQUJMRV9OQU1FKSA9PSAwKSB7DQo+ID4gICAgID4gKyAg ICAvLw0KPiA+ICAgICA+ICsgICAgLy8gVXBkYXRlIFBsYXRmb3JtTGFuZyB3aGVuIFBsYXRmb3Jt TGFuZ0NvZGVzL0xhbmdDb2RlcyB3ZXJlIHNldC4NCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAg ID4gKyAgICBpZiAoKG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+UGxhdGZvcm1MYW5nQ29kZXMgIT0g TlVMTCkgJiYNCj4gPiAgICAgPiAobVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5MYW5nQ29kZXMgIT0g TlVMTCkpIHsNCj4gPiAgICAgPiArICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgLy8gV2hlbiBz ZXR0aW5nIExhbmcsIGZpcnN0bHkgZ2V0IG1vc3QgbWF0Y2hlZCBsYW5ndWFnZSBzdHJpbmcgZnJv bQ0KPiA+ICAgICA+IHN1cHBvcnRlZCBsYW5ndWFnZSBjb2Rlcy4NCj4gPiAgICAgPiArICAgICAg Ly8NCj4gPiAgICAgPiArICAgICAgQmVzdExhbmcgPSBWYXJpYWJsZUdldEJlc3RMYW5ndWFnZSAo bVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ID5MYW5nQ29kZXMsDQo+ID4gICAgID4gVFJVRSwg RGF0YSwgTlVMTCk7DQo+ID4gICAgID4gKyAgICAgIGlmIChCZXN0TGFuZyAhPSBOVUxMKSB7DQo+ ID4gICAgID4gKyAgICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgICAvLyBHZXQgdGhlIGNvcnJl c3BvbmRpbmcgaW5kZXggaW4gbGFuZ3VhZ2UgY29kZXMuDQo+ID4gICAgID4gKyAgICAgICAgLy8N Cj4gPiAgICAgPiArICAgICAgICBJbmRleCA9IEdldEluZGV4RnJvbVN1cHBvcnRlZExhbmdDb2Rl cw0KPiAobVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ICAgICA+ID5MYW5nQ29kZXMsIEJlc3RM YW5nLCBUUlVFKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICAgICAgLy8NCj4gPiAgICAg PiArICAgICAgICAvLyBHZXQgdGhlIGNvcnJlc3BvbmRpbmcgUkZDNDY0NiBsYW5ndWFnZSB0YWcg YWNjb3JkaW5nIHRvIElTTzYzOQ0KPiA+ICAgICA+IGxhbmd1YWdlIHRhZy4NCj4gPiAgICAgPiAr ICAgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAgIEJlc3RQbGF0Zm9ybUxhbmcgPSBHZXRMYW5n RnJvbVN1cHBvcnRlZExhbmdDb2Rlcw0KPiA+ICAgICA+IChtVmFyaWFibGVNb2R1bGVHbG9iYWwt PlBsYXRmb3JtTGFuZ0NvZGVzLCBJbmRleCwgRkFMU0UpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICAgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAgIC8vIENoZWNrIHRoZSB2YXJpYWJsZSBz cGFjZSBmb3IgYm90aCBQbGF0Zm9ybUxhbmcgYW5kIExhbmcgdmFyaWFibGUuDQo+ID4gICAgID4g KyAgICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgICBWYXJpYWJsZUVudHJ5WzBdLlZhcmlhYmxl U2l6ZSA9IEFzY2lpU3RyU2l6ZSAoQmVzdFBsYXRmb3JtTGFuZyk7DQo+ID4gICAgID4gKyAgICAg ICAgVmFyaWFibGVFbnRyeVswXS5HdWlkICAgICAgICAgPSAmZ0VmaUdsb2JhbFZhcmlhYmxlR3Vp ZDsNCj4gPiAgICAgPiArICAgICAgICBWYXJpYWJsZUVudHJ5WzBdLk5hbWUgICAgICAgICA9DQo+ IEVGSV9QTEFURk9STV9MQU5HX1ZBUklBQkxFX05BTUU7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsgICAgICAgIFZhcmlhYmxlRW50cnlbMV0uVmFyaWFibGVTaXplID0gSVNPXzYzOV8yX0VOVFJZ X1NJWkUgKyAxOw0KPiA+ICAgICA+ICsgICAgICAgIFZhcmlhYmxlRW50cnlbMV0uR3VpZCAgICAg ICAgID0gJmdFZmlHbG9iYWxWYXJpYWJsZUd1aWQ7DQo+ID4gICAgID4gKyAgICAgICAgVmFyaWFi bGVFbnRyeVsxXS5OYW1lICAgICAgICAgPSBFRklfTEFOR19WQVJJQUJMRV9OQU1FOw0KPiA+ICAg ICA+ICsgICAgICAgIGlmICghQ2hlY2tSZW1haW5pbmdTcGFjZUZvckNvbnNpc3RlbmN5DQo+ID4g ICAgID4gKFZBUklBQkxFX0FUVFJJQlVURV9OVl9CU19SVCwgJlZhcmlhYmxlRW50cnlbMF0sICZW YXJpYWJsZUVudHJ5WzFdLA0KPiA+ICAgICA+IE5VTEwpKSB7DQo+ID4gICAgID4gKyAgICAgICAg ICAvLw0KPiA+ICAgICA+ICsgICAgICAgICAgLy8gTm8gZW5vdWdoIHZhcmlhYmxlIHNwYWNlIHRv IHNldCBib3RoIFBsYXRmb3JtTGFuZyBhbmQgTGFuZw0KPiA+ICAgICA+IHN1Y2Nlc3NmdWxseS4N Cj4gPiAgICAgPiArICAgICAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgICAgICBTdGF0dXMgPSBF RklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiAgICAgPiArICAgICAgICB9IGVsc2Ugew0KPiA+ICAg ICA+ICsgICAgICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgICAgIC8vIFN1Y2Nlc3NmdWxseSBj b252ZXJ0IExhbmcgdG8gUGxhdGZvcm1MYW5nLCBhbmQgc2V0IHRoZQ0KPiA+ICAgICA+IEJlc3RQ bGF0Zm9ybUxhbmcgdmFsdWUgaW50byBQbGF0Zm9ybUxhbmcgdmFyaWFibGUgc2ltdWx0YW5lb3Vz bHkuDQo+ID4gICAgID4gKyAgICAgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAgICAgRmluZFZh cmlhYmxlIChFRklfUExBVEZPUk1fTEFOR19WQVJJQUJMRV9OQU1FLA0KPiA+ICAgICA+ICZnRWZp R2xvYmFsVmFyaWFibGVHdWlkLCAmVmFyaWFibGUsICZtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ ID4gPlZhcmlhYmxlR2xvYmFsLA0KPiA+ICAgICA+IEZBTFNFKTsNCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyAgICAgICAgICBTdGF0dXMgPSBVcGRhdGVWYXJpYWJsZSAoDQo+ID4gICAgID4gKyAg ICAgICAgICAgICAgICAgICAgIEVGSV9QTEFURk9STV9MQU5HX1ZBUklBQkxFX05BTUUsDQo+ID4g ICAgID4gKyAgICAgICAgICAgICAgICAgICAgICZnRWZpR2xvYmFsVmFyaWFibGVHdWlkLA0KPiA+ ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICBCZXN0UGxhdGZvcm1MYW5nLA0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgICAgICAgICBBc2NpaVN0clNpemUgKEJlc3RQbGF0Zm9ybUxhbmcpLA0K PiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVzLA0KPiA+ICAgICA+ICsg ICAgICAgICAgICAgICAgICAgICAwLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAw LA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAmVmFyaWFibGUsDQo+ID4gICAgID4g KyAgICAgICAgICAgICAgICAgICAgIE5VTEwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAg ICAgKTsNCj4gPiAgICAgPiArICAgICAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAg ICAgIERFQlVHICgoREVCVUdfSU5GTywgIlZhcmlhYmxlIERyaXZlciBBdXRvIFVwZGF0ZSBMYW5n LCBMYW5nOiVhLA0KPiA+ICAgICA+IFBsYXRmb3JtTGFuZzolYSBTdGF0dXM6ICVyXG4iLCBCZXN0 TGFuZywgQmVzdFBsYXRmb3JtTGFuZywgU3RhdHVzKSk7DQo+ID4gICAgID4gKyAgICAgIH0NCj4g PiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsg IGlmIChTZXRMYW5ndWFnZUNvZGVzKSB7DQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsg ICAgLy8gQ29udGludWUgdG8gc2V0IFBsYXRmb3JtTGFuZ0NvZGVzIG9yIExhbmdDb2Rlcy4NCj4g PiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4g ICAgID4gKyAgfSBlbHNlIHsNCj4gPiAgICAgPiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4gICAg ID4gKyAgfQ0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAg ICAgPiArICBDaGVjayBpZiB0aGVyZSdzIGVub3VnaCBmcmVlIHNwYWNlIGluIHN0b3JhZ2UgdG8g d3JpdGUgdGhlIG5ldyB2YXJpYWJsZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFt W2luXSBOZXdWYXJpYWJsZSAgICAgICAgUG9pbnRlciB0byBidWZmZXIgb2YgbmV3IHZhcmlhYmxl Lg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gVmFyaWFibGVTaXplICAgICAgIFNpemUgb2YgbmV3 IHZhcmlhYmxlLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gVmFyaWFibGVOYW1lICAgICAgIE5h bWUgb2YgdmFyaWFibGUuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBWZW5kb3JHdWlkICAgICAg ICAgR3VpZCBvZiB2YXJpYWJsZS4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dIEF0dHJpYnV0ZXMg ICAgICAgICBBdHRyaWJ1dGVzIG9mIHRoZSB2YXJpYWJsZS4NCj4gPiAgICAgPiArICBAcGFyYW1b aW5dIFZvbGF0aWxlRmxhZyAgICAgICBWb2xhdGlsZS9ub24tdm9sYXRpbGUgdmFyaWFibGUgaW5k aWNhdG9yLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICBFbm91Z2ggZnJlZSBzcGFjZSBvbiB2YXJpYWJsZSBzdG9yYWdlLg0KPiA+ICAgICA+ ICsgIEByZXR2YWwgRUZJX0JVRkZFUl9UT09fU01BTEwgIFRoZXJlJ3Mgbm90IGVub3VnaCBjb250 aW51b3VzIGZyZWUNCj4gPiBzcGFjZS4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9PVVRfT0Zf UkVTT1VSQ0VTICBUaGVyZSdzIG5vdCBlbm91Z2ggZnJlZSBzcGFjZSBpbg0KPiB0b3RhbC4NCj4g PiAgICAgPiArKiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4gPiAgICAgPiArQ2hlY2tWYXJp YWJsZVN0b3JlU3BhY2UgKA0KPiA+ICAgICA+ICsgIElOICBWQVJJQUJMRV9IRUFERVIgICpOZXdW YXJpYWJsZSwNCj4gPiAgICAgPiArICBJTiAgVUlOVE4gICAgICAgICAgICBWYXJpYWJsZVNpemUs DQo+ID4gICAgID4gKyAgSU4gIENIQVIxNiAgICAgICAgICAgKlZhcmlhYmxlTmFtZSwNCj4gPiAg ICAgPiArICBJTiAgRUZJX0dVSUQgICAgICAgICAqVmVuZG9yR3VpZCwNCj4gPiAgICAgPiArICBJ TiAgVUlOVDMyICAgICAgICAgICBBdHRyaWJ1dGVzLA0KPiA+ICAgICA+ICsgIElOICBCT09MRUFO ICAgICAgICAgIFZvbGF0aWxlRmxhZw0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0KPiA+ ICAgICA+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgSXNDb21tb25WYXJpYWJsZTsNCj4gPiAg ICAgPiArICBCT09MRUFOICAgICAgICAgICAgICAgIElzQ29tbW9uVXNlclZhcmlhYmxlOw0KPiA+ ICAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgQ29tbW9uVmFyaWFibGVUb3RhbFNpemU7 DQo+ID4gICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICBDb21tb25Vc2VyVmFyaWFibGVU b3RhbFNpemU7DQo+ID4gICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICBId0VyclZhcmlh YmxlVG90YWxTaXplOw0KPiA+ICAgICA+ICsgIFZBUklBQkxFX1NUT1JFX0hFQURFUiAgKlZhclN0 b3JlOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBpZiAoKE5ld1ZhcmlhYmxlID09IE5VTEwp IHx8IChWYXJpYWJsZVNpemUgPT0gMCkpIHsNCj4gPiAgICAgPiArICAgIHJldHVybiBFRklfU1VD Q0VTUzsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIGlmIChWb2xh dGlsZUZsYWcpIHsNCj4gPiAgICAgPiArICAgIFZhclN0b3JlID0gKFZBUklBQkxFX1NUT1JFX0hF QURFUiAqKShVSU5UTikNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgbVZhcmlhYmxlTW9kdWxl R2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5Wb2xhdGlsZVZhcmlhYmxlQmFzZTsNCj4gPiAgICAgPiAr ICAgIGlmICgoVUlOVDMyKShWYXJpYWJsZVNpemUgKyBtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ ID4gICAgID4gPlZvbGF0aWxlTGFzdFZhcmlhYmxlT2Zmc2V0KQ0KPiA+ICAgICA+ICsgICAgICAg ID4gVmFyU3RvcmUtPlNpemUpDQo+ID4gICAgID4gKyAgICB7DQo+ID4gICAgID4gKyAgICAgIHJl dHVybiBFRklfQlVGRkVSX1RPT19TTUFMTDsNCj4gPiAgICAgPiArICAgIH0NCj4gPiAgICAgPiAr ICB9IGVsc2Ugew0KPiA+ICAgICA+ICsgICAgaWYgKChBdHRyaWJ1dGVzICYgRUZJX1ZBUklBQkxF X0hBUkRXQVJFX0VSUk9SX1JFQ09SRCkgPT0gMCkgew0KPiA+ICAgICA+ICsgICAgICBJc0NvbW1v blZhcmlhYmxlICAgICA9IFRSVUU7DQo+ID4gICAgID4gKyAgICAgIElzQ29tbW9uVXNlclZhcmlh YmxlID0gSXNVc2VyVmFyaWFibGUgKE5ld1ZhcmlhYmxlKTsNCj4gPiAgICAgPiArICAgIH0gZWxz ZSB7DQo+ID4gICAgID4gKyAgICAgIElzQ29tbW9uVmFyaWFibGUgICAgID0gRkFMU0U7DQo+ID4g ICAgID4gKyAgICAgIElzQ29tbW9uVXNlclZhcmlhYmxlID0gRkFMU0U7DQo+ID4gICAgID4gKyAg ICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgQ29tbW9uVmFyaWFibGVUb3RhbFNpemUg ICAgID0gbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ICAgICA+ID5Db21tb25WYXJpYWJsZVRv dGFsU2l6ZSArIFZhcmlhYmxlU2l6ZTsNCj4gPiAgICAgPiArICAgIENvbW1vblVzZXJWYXJpYWJs ZVRvdGFsU2l6ZSA9IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCj4gPiAgICAgPiA+Q29tbW9uVXNl clZhcmlhYmxlVG90YWxTaXplICsgVmFyaWFibGVTaXplOw0KPiA+ICAgICA+ICsgICAgSHdFcnJW YXJpYWJsZVRvdGFsU2l6ZSAgICAgID0gbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ICAgICA+ ID5Id0VyclZhcmlhYmxlVG90YWxTaXplICsgVmFyaWFibGVTaXplOw0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICAgIGlmICggICgoKEF0dHJpYnV0ZXMgJiBFRklfVkFSSUFCTEVfSEFSRFdBUkVf RVJST1JfUkVDT1JEKSAhPSAwKQ0KPiAmJg0KPiA+ICAgICA+ICsgICAgICAgICAgIChId0VyclZh cmlhYmxlVG90YWxTaXplID4gUGNkR2V0MzIgKFBjZEh3RXJyU3RvcmFnZVNpemUpKSkNCj4gPiAg ICAgPiArICAgICAgIHx8IChJc0NvbW1vblZhcmlhYmxlICYmIChDb21tb25WYXJpYWJsZVRvdGFs U2l6ZSA+DQo+ID4gICAgID4gbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5Db21tb25WYXJpYWJsZVNw YWNlKSkNCj4gPiAgICAgPiArICAgICAgIHx8IChJc0NvbW1vblZhcmlhYmxlICYmDQo+ID4gICAg ID4gKyAgICAgICAgICAgQXRSdW50aW1lICgpICYmDQo+ID4gICAgID4gKyAgICAgICAgICAgKENv bW1vblZhcmlhYmxlVG90YWxTaXplID4gbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ICAgICA+ ID5Db21tb25SdW50aW1lVmFyaWFibGVTcGFjZSkpDQo+ID4gICAgID4gKyAgICAgICB8fCAoSXND b21tb25Vc2VyVmFyaWFibGUgJiYNCj4gPiAgICAgPiArICAgICAgICAgICAoQ29tbW9uVXNlclZh cmlhYmxlVG90YWxTaXplID4gbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ICAgICA+ID5Db21t b25NYXhVc2VyVmFyaWFibGVTcGFjZSkpKQ0KPiA+ICAgICA+ICsgICAgew0KPiA+ICAgICA+ICsg ICAgICBpZiAoQXRSdW50aW1lICgpKSB7DQo+ID4gICAgID4gKyAgICAgICAgaWYgKElzQ29tbW9u VXNlclZhcmlhYmxlICYmDQo+ID4gICAgID4gKyAgICAgICAgICAgICgoVmFyaWFibGVTaXplICsg bVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ICAgICA+ID5Db21tb25Vc2VyVmFyaWFibGVUb3Rh bFNpemUpDQo+ID4gICAgID4gKyAgICAgICAgICAgICA+IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+ Q29tbW9uTWF4VXNlclZhcmlhYmxlU3BhY2UpKQ0KPiA+ICAgICA+ICsgICAgICAgIHsNCj4gPiAg ICAgPiArICAgICAgICAgIFJlY29yZFZhckVycm9yRmxhZyAoDQo+ID4gICAgID4gKyAgICAgICAg ICAgIFZBUl9FUlJPUl9GTEFHX1VTRVJfRVJST1IsDQo+ID4gICAgID4gKyAgICAgICAgICAgIFZh cmlhYmxlTmFtZSwNCj4gPiAgICAgPiArICAgICAgICAgICAgVmVuZG9yR3VpZCwNCj4gPiAgICAg PiArICAgICAgICAgICAgQXR0cmlidXRlcywNCj4gPiAgICAgPiArICAgICAgICAgICAgVmFyaWFi bGVTaXplDQo+ID4gICAgID4gKyAgICAgICAgICAgICk7DQo+ID4gICAgID4gKyAgICAgICAgfQ0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgICAgICBpZiAoSXNDb21tb25WYXJpYWJsZSAmJg0K PiA+ICAgICA+ICsgICAgICAgICAgICAoKFZhcmlhYmxlU2l6ZSArIG1WYXJpYWJsZU1vZHVsZUds b2JhbC0NCj4gPkNvbW1vblZhcmlhYmxlVG90YWxTaXplKQ0KPiA+ICAgICA+ICsgICAgICAgICAg ICAgPiBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPkNvbW1vblJ1bnRpbWVWYXJpYWJsZVNwYWNlKSkN Cj4gPiAgICAgPiArICAgICAgICB7DQo+ID4gICAgID4gKyAgICAgICAgICBSZWNvcmRWYXJFcnJv ckZsYWcgKA0KPiA+ICAgICA+ICsgICAgICAgICAgICBWQVJfRVJST1JfRkxBR19TWVNURU1fRVJS T1IsDQo+ID4gICAgID4gKyAgICAgICAgICAgIFZhcmlhYmxlTmFtZSwNCj4gPiAgICAgPiArICAg ICAgICAgICAgVmVuZG9yR3VpZCwNCj4gPiAgICAgPiArICAgICAgICAgICAgQXR0cmlidXRlcywN Cj4gPiAgICAgPiArICAgICAgICAgICAgVmFyaWFibGVTaXplDQo+ID4gICAgID4gKyAgICAgICAg ICAgICk7DQo+ID4gICAgID4gKyAgICAgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAg ICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gICAgID4gKyAgICAgIH0NCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyAgICAgIHJldHVybiBFRklfQlVGRkVSX1RPT19TTUFMTDsN Cj4gPiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArLyoqDQo+ID4gICAgID4gKyAgRmlsbCBzcGVjaWZpYyBkYXRhIG9mIGF1dGgtdmFyaWFi bGUgaW4gYnVmZmVyLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1baW4sb3V0XSAg TmV3VmFyaWFibGUgICAgICAgIFBvaW50ZXIgdG8gYnVmZmVyIG9mIG5ldyB2YXJpYWJsZS4NCj4g PiAgICAgPiArICBAcGFyYW1baW5dICAgICAgT2xkVmFyaWFibGUgICAgICAgIFBvaW50ZXIgdG8g YnVmZmVyIG9mIG9sZCBjb3B5IG9mIHRoZQ0KPiA+IHZhcmlhYmxlLg0KPiA+ICAgICA+ICsgIEBw YXJhbVtpbl0gICAgICBBdHRyaWJ1dGVzICAgICAgICAgQXR0cmlidXRlcyBvZiB0aGUgdmFyaWFi bGUuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgICAgIEtleUluZGV4ICAgICAgICAgICBJbmRl eCBvZiBhc3NvY2lhdGVkIHB1YmxpYyBrZXkuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgICAg IE1vbm90b25pY0NvdW50ICAgICBWYWx1ZSBvZiBhc3NvY2lhdGVkIG1vbm90b25pYw0KPiBjb3Vu dC4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dICAgICAgVGltZVN0YW1wICAgICAgICAgIFZhbHVl IG9mIGFzc29jaWF0ZWQgVGltZVN0YW1wLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ ID4gICAgID4gK1ZPSUQNCj4gPiAgICAgPiArU2V0VmFyaWFibGVBdXRoRGF0YSAoDQo+ID4gICAg ID4gKyAgSU4gIE9VVCBBVVRIRU5USUNBVEVEX1ZBUklBQkxFX0hFQURFUiAgKk5ld1ZhcmlhYmxl LA0KPiA+ICAgICA+ICsgIElOICAgICAgQVVUSEVOVElDQVRFRF9WQVJJQUJMRV9IRUFERVIgICpP bGRWYXJpYWJsZSwNCj4gPiAgICAgPiArICBJTiAgICAgIFVJTlQzMiAgICAgICAgICAgICAgICAg ICAgICAgICBBdHRyaWJ1dGVzLA0KPiA+ICAgICA+ICsgIElOICAgICAgVUlOVDMyICAgICAgICAg ICAgICAgICAgICAgICAgIEtleUluZGV4LA0KPiA+ICAgICA+ICsgIElOICAgICAgVUlOVDY0ICAg ICAgICAgICAgICAgICAgICAgICAgIE1vbm90b25pY0NvdW50LA0KPiA+ICAgICA+ICsgIElOICAg ICAgRUZJX1RJTUUgICAgICAgICAgICAgICAgICAgICAgICpUaW1lU3RhbXANCj4gPiAgICAgPiAr ICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBOZXdWYXJpYWJsZS0+UHViS2V5SW5kZXgg ICAgPSBLZXlJbmRleDsNCj4gPiAgICAgPiArICBOZXdWYXJpYWJsZS0+TW9ub3RvbmljQ291bnQg PSBNb25vdG9uaWNDb3VudDsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgaWYgKChUaW1lU3Rh bXAgIT0gTlVMTCkgJiYNCj4gPiAgICAgPiArICAgICAgKChBdHRyaWJ1dGVzICYNCj4gPiAgICAg PiBFRklfVkFSSUFCTEVfVElNRV9CQVNFRF9BVVRIRU5USUNBVEVEX1dSSVRFX0FDQ0VTUykgIT0g MCkpDQo+ID4gICAgID4gKyAgew0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIC8v IEluIHRoZSBjYXNlIHdoZW4gdGhlIEVGSV9WQVJJQUJMRV9BUFBFTkRfV1JJVEUgYXR0cmlidXRl IGlzIHNldCwNCj4gPiBvbmx5DQo+ID4gICAgID4gKyAgICAvLyB3aGVuIHRoZSBuZXcgVGltZVN0 YW1wIHZhbHVlIGlzIGxhdGVyIHRoYW4gdGhlIGN1cnJlbnQgdGltZXN0YW1wDQo+ID4gICAgID4g YXNzb2NpYXRlZA0KPiA+ICAgICA+ICsgICAgLy8gd2l0aCB0aGUgdmFyaWFibGUsIHdlIG5lZWQg YXNzb2NpYXRlIHRoZSBuZXcgdGltZXN0YW1wIHdpdGggdGhlDQo+ID4gdXBkYXRlZA0KPiA+ICAg ICA+IHZhbHVlLg0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIGlmICgoKEF0dHJp YnV0ZXMgJiBFRklfVkFSSUFCTEVfQVBQRU5EX1dSSVRFKSAhPSAwKSAmJg0KPiA+ICAgICA+ICsg ICAgICAgIChPbGRWYXJpYWJsZSAhPSBOVUxMKSAmJg0KPiA+ICAgICA+ICsgICAgICAgICFWYXJp YWJsZUNvbXBhcmVUaW1lU3RhbXBJbnRlcm5hbCAoJk9sZFZhcmlhYmxlLT5UaW1lU3RhbXAsDQo+ ID4gICAgID4gVGltZVN0YW1wKSkNCj4gPiAgICAgPiArICAgIHsNCj4gPiAgICAgPiArICAgICAg VGltZVN0YW1wID0gJk9sZFZhcmlhYmxlLT5UaW1lU3RhbXA7DQo+ID4gICAgID4gKyAgICB9DQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgQ29weU1lbSAoJk5ld1ZhcmlhYmxlLT5UaW1lU3Rh bXAsIFRpbWVTdGFtcCwgc2l6ZW9mIChFRklfVElNRSkpOw0KPiA+ICAgICA+ICsgIH0gZWxzZSB7 DQo+ID4gICAgID4gKyAgICBaZXJvTWVtICgmTmV3VmFyaWFibGUtPlRpbWVTdGFtcCwgc2l6ZW9m IChFRklfVElNRSkpOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgRmlsbCB0aGUgdmFyaWFibGUgZGF0YSBidWZm ZXIgYWNjb3JkaW5nIHRvIHZhcmlhYmxlIGZvcm1hdCBvbiBzdG9yYWdlLg0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICBAcGFyYW1baW4sb3V0XSAgTmV3VmFyaWFibGUgICAgICAgIFBvaW50ZXIg dG8gYnVmZmVyIG9mIG5ldyB2YXJpYWJsZS4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dICAgICAg T2xkVmFyaWFibGUgICAgICAgIFBvaW50ZXIgdG8gYnVmZmVyIG9mIG9sZCBjb3B5IG9mIHRoZQ0K PiA+IHZhcmlhYmxlLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBWYXJpYWJsZU5hbWUg ICAgICAgTmFtZSBvZiB2YXJpYWJsZS4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dICAgICAgVmVu ZG9yR3VpZCAgICAgICAgIEd1aWQgb2YgdmFyaWFibGUuDQo+ID4gICAgID4gKyAgQHBhcmFtW2lu XSAgICAgIERhdGEgICAgICAgICAgICAgICBWYXJpYWJsZSBkYXRhLg0KPiA+ICAgICA+ICsgIEBw YXJhbVtpbl0gICAgICBEYXRhU2l6ZSAgICAgICAgICAgU2l6ZSBvZiBkYXRhLiAwIG1lYW5zIGRl bGV0ZS4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dICAgICAgQXR0cmlidXRlcyAgICAgICAgIEF0 dHJpYnV0ZXMgb2YgdGhlIHZhcmlhYmxlLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBL ZXlJbmRleCAgICAgICAgICAgSW5kZXggb2YgYXNzb2NpYXRlZCBwdWJsaWMga2V5Lg0KPiA+ICAg ICA+ICsgIEBwYXJhbVtpbl0gICAgICBNb25vdG9uaWNDb3VudCAgICAgVmFsdWUgb2YgYXNzb2Np YXRlZCBtb25vdG9uaWMNCj4gY291bnQuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgICAgIFRp bWVTdGFtcCAgICAgICAgICBWYWx1ZSBvZiBhc3NvY2lhdGVkIFRpbWVTdGFtcC4NCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyAgQHJldHZhbCBTaXplIG9mIHRoZSBuZXcgdmFyaWFibGUuDQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArVUlOVE4NCj4gPiAgICAgPiArU2V0 VmFyaWFibGVEYXRhICgNCj4gPiAgICAgPiArICBJTiAgT1VUIFZBUklBQkxFX0hFQURFUiAgKk5l d1ZhcmlhYmxlLA0KPiA+ICAgICA+ICsgIElOICAgICAgVkFSSUFCTEVfSEVBREVSICAqT2xkVmFy aWFibGUsDQo+ID4gICAgID4gKyAgSU4gICAgICBDSEFSMTYgICAgICAgICAgICpWYXJpYWJsZU5h bWUsDQo+ID4gICAgID4gKyAgSU4gICAgICBFRklfR1VJRCAgICAgICAgICpWZW5kb3JHdWlkLA0K PiA+ICAgICA+ICsgIElOICAgICAgVk9JRCAgICAgICAgICAgICAqRGF0YSwNCj4gPiAgICAgPiAr ICBJTiAgICAgIFVJTlROICAgICAgICAgICAgRGF0YVNpemUsDQo+ID4gICAgID4gKyAgSU4gICAg ICBVSU5UMzIgICAgICAgICAgIEF0dHJpYnV0ZXMsDQo+ID4gICAgID4gKyAgSU4gICAgICBVSU5U MzIgICAgICAgICAgIEtleUluZGV4LA0KPiA+ICAgICA+ICsgIElOICAgICAgVUlOVDY0ICAgICAg ICAgICBNb25vdG9uaWNDb3VudCwNCj4gPiAgICAgPiArICBJTiAgICAgIEVGSV9USU1FICAgICAg ICAgKlRpbWVTdGFtcA0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0KPiA+ICAgICA+ICsg IEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiAgICAgPiArICBCT09MRUFOICAgICBBdXRoRm9ybWF0 Ow0KPiA+ICAgICA+ICsgIFVJTlQ4ICAgICAgICpEYXRhUHRyOw0KPiA+ICAgICA+ICsgIFVJTlRO ICAgICAgIE5hbWVTaXplOw0KPiA+ICAgICA+ICsgIFVJTlROICAgICAgIE9sZERhdGFTaXplOw0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBBdXRoRm9ybWF0ID0gbVZhcmlhYmxlTW9kdWxlR2xv YmFsLT5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0Ow0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr ICBpZiAoQXV0aEZvcm1hdCkgew0KPiA+ICAgICA+ICsgICAgU2V0VmFyaWFibGVBdXRoRGF0YSAo DQo+ID4gICAgID4gKyAgICAgIChBVVRIRU5USUNBVEVEX1ZBUklBQkxFX0hFQURFUiAqKU5ld1Zh cmlhYmxlLA0KPiA+ICAgICA+ICsgICAgICAoQVVUSEVOVElDQVRFRF9WQVJJQUJMRV9IRUFERVIg KilPbGRWYXJpYWJsZSwNCj4gPiAgICAgPiArICAgICAgQXR0cmlidXRlcywNCj4gPiAgICAgPiAr ICAgICAgS2V5SW5kZXgsDQo+ID4gICAgID4gKyAgICAgIE1vbm90b25pY0NvdW50LA0KPiA+ICAg ICA+ICsgICAgICBUaW1lU3RhbXANCj4gPiAgICAgPiArICAgICAgKTsNCj4gPiAgICAgPiArICB9 DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIE5ld1ZhcmlhYmxlLT5TdGFydElkICAgID0gVkFS SUFCTEVfREFUQTsNCj4gPiAgICAgPiArICBOZXdWYXJpYWJsZS0+U3RhdGUgICAgICA9IFZBUl9B RERFRDsNCj4gPiAgICAgPiArICBOZXdWYXJpYWJsZS0+UmVzZXJ2ZWQgICA9IDA7DQo+ID4gICAg ID4gKyAgTmV3VmFyaWFibGUtPkF0dHJpYnV0ZXMgPSBBdHRyaWJ1dGVzICYNCj4gKH5FRklfVkFS SUFCTEVfQVBQRU5EX1dSSVRFKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQ29weU1lbSAo DQo+ID4gICAgID4gKyAgICBHZXRWZW5kb3JHdWlkUHRyIChOZXdWYXJpYWJsZSwgQXV0aEZvcm1h dCksDQo+ID4gICAgID4gKyAgICBWZW5kb3JHdWlkLA0KPiA+ICAgICA+ICsgICAgc2l6ZW9mIChF RklfR1VJRCkNCj4gPiAgICAgPiArICAgICk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIE5h bWVTaXplID0gU3RyU2l6ZSAoVmFyaWFibGVOYW1lKTsNCj4gPiAgICAgPiArICBTZXROYW1lU2l6 ZU9mVmFyaWFibGUgKE5ld1ZhcmlhYmxlLCBOYW1lU2l6ZSwgQXV0aEZvcm1hdCk7DQo+ID4gICAg ID4gKyAgQ29weU1lbSAoDQo+ID4gICAgID4gKyAgICAoVUlOVDggKilHZXRWYXJpYWJsZU5hbWVQ dHIgKE5ld1ZhcmlhYmxlLCBBdXRoRm9ybWF0KSwNCj4gPiAgICAgPiArICAgIFZhcmlhYmxlTmFt ZSwNCj4gPiAgICAgPiArICAgIE5hbWVTaXplDQo+ID4gICAgID4gKyAgICApOw0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIFNldCBkYXRhIHNpemUgZmlyc3Qg b3RoZXJ3aXNlIHdlIGNhbid0IGdldCBjb3JyZWN0IGRhdGEgcG9pbnRlciBpbiB0aGUNCj4gPiAg ICAgPiArICAvLyBidWZmZXIgb2YgbmV3IHZhcmlhYmxlLg0KPiA+ICAgICA+ICsgIC8vDQo+ID4g ICAgID4gKyAgU2V0RGF0YVNpemVPZlZhcmlhYmxlIChOZXdWYXJpYWJsZSwgRGF0YVNpemUsIEF1 dGhGb3JtYXQpOw0KPiA+ICAgICA+ICsgIERhdGFQdHIgPSBHZXRWYXJpYWJsZURhdGFQdHIgKE5l d1ZhcmlhYmxlLCBBdXRoRm9ybWF0KTsNCj4gPiAgICAgPiArICBpZiAoKChBdHRyaWJ1dGVzICYg RUZJX1ZBUklBQkxFX0FQUEVORF9XUklURSkgIT0gMCkgJiYNCj4gPiAgICAgPiArICAgICAgKE9s ZFZhcmlhYmxlICE9IE5VTEwpICYmDQo+ID4gICAgID4gKyAgICAgICgoT2xkVmFyaWFibGUtPlN0 YXRlID09IFZBUl9BRERFRCkgfHwNCj4gPiAgICAgPiArICAgICAgIChPbGRWYXJpYWJsZS0+U3Rh dGUgPT0gKFZBUl9BRERFRCAmDQo+ID4gVkFSX0lOX0RFTEVURURfVFJBTlNJVElPTikpKSkNCj4g PiAgICAgPiArICB7DQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgLy8gR2V0IG9s ZCBkYXRhLCB3aGljaCBtaWdodCBiZSBlbmNyeXB0ZWQuDQo+ID4gICAgID4gKyAgICAvLw0KPiA+ ICAgICA+ICsgICAgT2xkRGF0YVNpemUgPSBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlNjcmF0Y2hC dWZmZXJTaXplDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgIC0gKChVSU5UTilEYXRhUHRy IC0gKFVJTlROKU5ld1ZhcmlhYmxlKTsNCj4gPiAgICAgPiArICAgIFN0YXR1cyA9IFByb3RlY3Rl ZFZhcmlhYmxlTGliR2V0QnlCdWZmZXIgKA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICBPbGRW YXJpYWJsZSwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgRGF0YVB0ciwNCj4gPiAgICAgPiAr ICAgICAgICAgICAgICAgKFVJTlQzMiAqKSZPbGREYXRhU2l6ZSwNCj4gPiAgICAgPiArICAgICAg ICAgICAgICAgQXV0aEZvcm1hdA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICApOw0KPiA+ICAg ICA+ICsgICAgaWYgKFN0YXR1cyA9PSBFRklfVU5TVVBQT1JURUQpIHsNCj4gPiAgICAgPiArICAg ICAgT2xkRGF0YVNpemUgPSBEYXRhU2l6ZU9mVmFyaWFibGUgKE9sZFZhcmlhYmxlLCBBdXRoRm9y bWF0KTsNCj4gPiAgICAgPiArICAgICAgQ29weU1lbSAoRGF0YVB0ciwgR2V0VmFyaWFibGVEYXRh UHRyIChPbGRWYXJpYWJsZSwgQXV0aEZvcm1hdCksDQo+ID4gICAgID4gT2xkRGF0YVNpemUpOw0K PiA+ICAgICA+ICsgICAgfSBlbHNlIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAg PiArICAgICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gPiAgICAgPiArICAgICAgcmV0 dXJuIDA7DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgRGF0 YVB0ciArPSBPbGREYXRhU2l6ZTsNCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICAv LyBVcGRhdGUgZGF0YSBzaXplLg0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIFNl dERhdGFTaXplT2ZWYXJpYWJsZSAoTmV3VmFyaWFibGUsIERhdGFTaXplICsgT2xkRGF0YVNpemUs DQo+ID4gQXV0aEZvcm1hdCk7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICBDb3B5TWVtIChEYXRhUHRyLCBEYXRhLCBEYXRhU2l6ZSk7DQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gVGhlIGFjdHVhbCBzaXplIG9mIHRoZSB2YXJp YWJsZSBzdG9yZWQgaW4gc3RvcmFnZSBzaG91bGQgaW5jbHVkZQ0KPiBwYWRkaW5nLg0KPiA+ICAg ICA+ICsgIC8vDQo+ID4gICAgID4gKyAgcmV0dXJuICgoVUlOVE4pR2V0TmV4dFZhcmlhYmxlUHRy IChOZXdWYXJpYWJsZSwgQXV0aEZvcm1hdCkgLQ0KPiA+ICAgICA+IChVSU5UTilOZXdWYXJpYWJs ZSk7DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ ICsgIFVwZGF0ZSBzdGF0ZSBvZiBnaXZlbiB2YXJpYWJsZSBhcyB3ZWxsIGFzIGl0cyBjYWNoZWQg Y29weS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtW2luLG91dF0gIFZhcmlhYmxl ICAgICAgICBQb2ludGVyIHRvIHRoZSBidWZmZXIgb2YgdGhlIHZhcmlhYmxlLg0KPiA+ICAgICA+ ICsgIEBwYXJhbVtpbixvdXRdICBDYWNoZVZhcmlhYmxlICAgQ2FjaGUgY29weSBvZiB0aGUgdmFy aWFibGUuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgICAgIE5ld1N0YXRlICAgICAgICBOZXcg c3RhdGUgdmFsdWUuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgICAgIFZvbGF0aWxlICAgICAg ICBWb2xhdGlsZS9ub24tdm9sYXRpbGUgdmFyaWFibGUgaW5kaWNhdG9yLg0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBWYXJpYWJsZSBzdGF0ZSB3YXMg dXBkYXRlZCBzdWNjZXNzZnVsbHkuDQo+ID4gICAgID4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAg ICAgRmFpbGVkIHRvIHVwZGF0ZSB0aGUgdmFyaWFibGUgc3RhdGUuDQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX1NUQVRVUw0KPiA+ICAgICA+ICtVcGRhdGVWYXJp YWJsZVN0YXRlICgNCj4gPiAgICAgPiArICBJTiAgT1VUIFZBUklBQkxFX0hFQURFUiAgKlZhcmlh YmxlLA0KPiA+ICAgICA+ICsgIElOICBPVVQgVkFSSUFCTEVfSEVBREVSICAqQ2FjaGVWYXJpYWJs ZSwNCj4gPiAgICAgPiArICBJTiAgICAgIFVJTlQ4ICAgICAgICAgICAgTmV3U3RhdGUsDQo+ID4g ICAgID4gKyAgSU4gICAgICBCT09MRUFOICAgICAgICAgIFZvbGF0aWxlDQo+ID4gICAgID4gKyAg KQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArICBTdGF0dXMgPSBVcGRhdGVWYXJpYWJsZVN0b3JlICgNCj4gPiAg ICAgPiArICAgICAgICAgICAgICZtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFs LA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgVm9sYXRpbGUsDQo+ID4gICAgID4gKyAgICAgICAg ICAgICBGQUxTRSwNCj4gPiAgICAgPiArICAgICAgICAgICAgIG1WYXJpYWJsZU1vZHVsZUdsb2Jh bC0+RnZiSW5zdGFuY2UsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAoVUlOVE4pJlZhcmlhYmxl LT5TdGF0ZSwNCj4gPiAgICAgPiArICAgICAgICAgICAgIHNpemVvZiAoTmV3U3RhdGUpLA0KPiA+ ICAgICA+ICsgICAgICAgICAgICAgJk5ld1N0YXRlDQo+ID4gICAgID4gKyAgICAgICAgICAgICAp Ow0KPiA+ICAgICA+ICsgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpICYmIChDYWNoZVZhcmlhYmxl ICE9IE5VTEwpKSB7DQo+ID4gICAgID4gKyAgICBDYWNoZVZhcmlhYmxlLT5TdGF0ZSA9IE5ld1N0 YXRlOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgcmV0dXJuIFN0 YXR1czsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAg ID4gKyAgRmx1c2ggdmFyaWFibGUgZGF0YSB0byB2YXJpYWJsZSBzdG9yYWdlLg0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArICBAcGFyYW1baW5dICAgICAgVmFyU3RvcmVCYXNlICAgIEJhc2UgYWRk cmVzcyBvZiB2YXJpYWJsZSBzdG9yYWdlLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbixvdXRdICBP ZmZzZXQgICAgICAgICAgT2Zmc2V0IHRvIHdyaXRlIHRoZSB2YXJpYWJsZSBmcm9tLg0KPiA+ICAg ICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2Zmc2V0IGZyb20gd2hlcmUg bmV4dCB2YXJpYWJsZSBjYW4gYmUgd3JpdHRlbi4NCj4gPiAgICAgPiArICBAcGFyYW1baW4sb3V0 XSAgTmV3VmFyaWFibGUgICAgIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBvZiBuZXcgdmFyaWFibGUu DQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgICAgIFZhcmlhYmxlU2l6ZSAgICBTaXplIG9mIG5l dyB2YXJpYWJsZS4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dICAgICAgVm9sYXRpbGUgICAgICAg IFZvbGF0aWxlL25vbi12b2xhdGlsZSB2YXJpYWJsZSBpbmRpY2F0b3IuDQo+ID4gICAgID4gKyAg QHBhcmFtW2luXSAgICAgIEF1dGhGb3JtYXQgICAgICBBdXRoLXZhcmlhYmxlIGluZGljYXRvci4N Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgVmFyaWFi bGUocykgd2VyZSB3cml0dGVuIHN1Y2Nlc3NmdWxseS4NCj4gPiAgICAgPiArICBAcmV0dmFsIE90 aGVycyAgICAgICAgICBGYWlsZWQgdG8gd3JpdGUgdGhlIHZhcmlhYmxlIGRhdGEuDQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX1NUQVRVUw0KPiA+ICAgICA+ICtX cml0ZVZhcmlhYmxlICgNCj4gPiAgICAgPiArICBJTiAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgIFZh clN0b3JlQmFzZSwNCj4gPiAgICAgPiArICBJTiAgT1VUIFVJTlROICAgICAgICAgICAgICpPZmZz ZXQsDQo+ID4gICAgID4gKyAgSU4gIE9VVCBWQVJJQUJMRV9IRUFERVIgICAqKk5ld1ZhcmlhYmxl LA0KPiA+ICAgICA+ICsgIElOICAgICAgVUlOVDMyICAgICAgICAgICAgVmFyaWFibGVTaXplLA0K PiA+ICAgICA+ICsgIElOICAgICAgQk9PTEVBTiAgICAgICAgICAgVm9sYXRpbGUsDQo+ID4gICAg ID4gKyAgSU4gICAgICBCT09MRUFOICAgICAgICAgICBBdXRoRm9ybWF0DQo+ID4gICAgID4gKyAg KQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArICBzdHJ1Y3Qgew0KPiA+ICAgICA+ICsgICAgVUlOVE4gICAgIE9m ZnNldDsNCj4gPiAgICAgPiArICAgIFVJTlQ4ICAgICAqQnVmZmVyOw0KPiA+ICAgICA+ICsgICAg VUlOVDMyICAgIFNpemU7DQo+ID4gICAgID4gKyAgICBVSU5UOCAgICAgU3RhdGU7DQo+ID4gICAg ID4gKyAgfSAgICAgICAgICAgICAgICAgICBXcml0ZVN0ZXBzWzRdOw0KPiA+ICAgICA+ICsgIFVJ TlROICAgICAgICAgICAgSW5kZXg7DQo+ID4gICAgID4gKyAgVUlOVE4gICAgICAgICAgICBTdGVw czsNCj4gPiAgICAgPiArICBWQVJJQUJMRV9IRUFERVIgICpWYXJpYWJsZTsNCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyAgVmFyaWFibGUgPSAqTmV3VmFyaWFibGU7DQo+ID4gICAgID4gKyAgaWYg KFZvbGF0aWxlKSB7DQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgLy8gRm9yIG5v bi12b2xhdGlsZSB2YXJpYWJsZSwgb25lIHN0ZXAgb25seSA6DQo+ID4gICAgID4gKyAgICAvLw0K PiA+ICAgICA+ICsgICAgV3JpdGVTdGVwc1swXS5PZmZzZXQgPSAqT2Zmc2V0Ow0KPiA+ICAgICA+ ICsgICAgV3JpdGVTdGVwc1swXS5CdWZmZXIgPSAoVUlOVDggKilWYXJpYWJsZTsNCj4gPiAgICAg PiArICAgIFdyaXRlU3RlcHNbMF0uU2l6ZSAgID0gVmFyaWFibGVTaXplOw0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICAgIFN0ZXBzID0gMTsNCj4gPiAgICAgPiArICB9IGVsc2Ugew0KPiA+ICAg ICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIC8vIEZvdXIgc3RlcHMgZm9yIG5vbi12b2xhdGls ZSB2YXJpYWJsZToNCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICAvLyAxLiBXcml0 ZSB2YXJpYWJsZSBoZWFkZXINCj4gPiAgICAgPiArICAgIC8vIDIuIFNldCB2YXJpYWJsZSBzdGF0 ZSB0byBoZWFkZXIgdmFsaWQNCj4gPiAgICAgPiArICAgIC8vIDMuIFdyaXRlIHZhcmlhYmxlIG5h bWUgYW5kIGRhdGENCj4gPiAgICAgPiArICAgIC8vIDQuIFNldCB2YXJpYWJsZSBzdGF0ZSB0byB2 YWxpZA0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIFZhcmlhYmxlLT5TdGF0ZSAg ICAgID0gMHhmZjsNCj4gPiAgICAgPiArICAgIFdyaXRlU3RlcHNbMF0uT2Zmc2V0ID0gKk9mZnNl dDsNCj4gPiAgICAgPiArICAgIFdyaXRlU3RlcHNbMF0uQnVmZmVyID0gKFVJTlQ4ICopVmFyaWFi bGU7DQo+ID4gICAgID4gKyAgICBXcml0ZVN0ZXBzWzBdLlNpemUgICA9IChVSU5UMzIpR2V0VmFy aWFibGVIZWFkZXJTaXplIChBdXRoRm9ybWF0KTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg ICBXcml0ZVN0ZXBzWzFdLlN0YXRlICA9IFZBUl9IRUFERVJfVkFMSURfT05MWTsNCj4gPiAgICAg PiArICAgIFdyaXRlU3RlcHNbMV0uT2Zmc2V0ID0gKk9mZnNldCArIE9GRlNFVF9PRiAoVkFSSUFC TEVfSEVBREVSLA0KPiBTdGF0ZSk7DQo+ID4gICAgID4gKyAgICBXcml0ZVN0ZXBzWzFdLkJ1ZmZl ciA9ICZXcml0ZVN0ZXBzWzFdLlN0YXRlOw0KPiA+ICAgICA+ICsgICAgV3JpdGVTdGVwc1sxXS5T aXplICAgPSBzaXplb2YgKFZhcmlhYmxlLT5TdGF0ZSk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsgICAgV3JpdGVTdGVwc1syXS5PZmZzZXQgPSAqT2Zmc2V0ICsgR2V0VmFyaWFibGVIZWFkZXJT aXplIChBdXRoRm9ybWF0KTsNCj4gPiAgICAgPiArICAgIFdyaXRlU3RlcHNbMl0uQnVmZmVyID0g KFVJTlQ4ICopVmFyaWFibGUgKyBHZXRWYXJpYWJsZUhlYWRlclNpemUNCj4gPiAgICAgPiAoQXV0 aEZvcm1hdCk7DQo+ID4gICAgID4gKyAgICBXcml0ZVN0ZXBzWzJdLlNpemUgICA9IFZhcmlhYmxl U2l6ZSAtIChVSU5UMzIpR2V0VmFyaWFibGVIZWFkZXJTaXplDQo+ID4gICAgID4gKEF1dGhGb3Jt YXQpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgIFdyaXRlU3RlcHNbM10uU3RhdGUgID0g VkFSX0FEREVEOw0KPiA+ICAgICA+ICsgICAgV3JpdGVTdGVwc1szXS5PZmZzZXQgPSAqT2Zmc2V0 ICsgT0ZGU0VUX09GIChWQVJJQUJMRV9IRUFERVIsDQo+IFN0YXRlKTsNCj4gPiAgICAgPiArICAg IFdyaXRlU3RlcHNbM10uQnVmZmVyID0gJldyaXRlU3RlcHNbM10uU3RhdGU7DQo+ID4gICAgID4g KyAgICBXcml0ZVN0ZXBzWzNdLlNpemUgICA9IHNpemVvZiAoVmFyaWFibGUtPlN0YXRlKTsNCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyAgICBTdGVwcyA9IEFSUkFZX1NJWkUgKFdyaXRlU3RlcHMp Ow0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgZm9yIChJbmRleCA9 IDA7IEluZGV4IDwgU3RlcHM7ICsrSW5kZXgpIHsNCj4gPiAgICAgPiArICAgIFN0YXR1cyA9IFVw ZGF0ZVZhcmlhYmxlU3RvcmUgKA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAmbVZhcmlhYmxl TW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbCwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAg Vm9sYXRpbGUsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgIFRSVUUsDQo+ID4gICAgID4gKyAg ICAgICAgICAgICAgIG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+RnZiSW5zdGFuY2UsDQo+ID4gICAg ID4gKyAgICAgICAgICAgICAgIFdyaXRlU3RlcHNbSW5kZXhdLk9mZnNldCwNCj4gPiAgICAgPiAr ICAgICAgICAgICAgICAgV3JpdGVTdGVwc1tJbmRleF0uU2l6ZSwNCj4gPiAgICAgPiArICAgICAg ICAgICAgICAgV3JpdGVTdGVwc1tJbmRleF0uQnVmZmVyDQo+ID4gICAgID4gKyAgICAgICAgICAg ICAgICk7DQo+ID4gICAgID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAg ID4gKyAgICAgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4gICAgID4gKyAgICAgIHJl dHVybiBTdGF0dXM7DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArICBWYXJpYWJsZS0+U3RhdGUgPSBWQVJfQURERUQ7DQo+ID4gICAgID4g KyAgaWYgKCFWb2xhdGlsZSkgew0KPiA+ICAgICA+ICsgICAgQ29weU1lbSAoKFVJTlQ4ICopbU52 VmFyaWFibGVDYWNoZSArICpPZmZzZXQsIFZhcmlhYmxlLA0KPiA+IFZhcmlhYmxlU2l6ZSk7DQo+ ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAqTmV3VmFyaWFibGUgPSAo VkFSSUFCTEVfSEVBREVSICopKChVSU5UTilWYXJTdG9yZUJhc2UgKyAqT2Zmc2V0KTsNCj4gPiAg ICAgPiArICAqT2Zmc2V0ICAgICArPSBIRUFERVJfQUxJR04gKFZhcmlhYmxlU2l6ZSk7DQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiAgICAgPiArfQ0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgUmViYXNlIHRoZSBnaXZl biB2YXJpYWJsZSBwb2ludGVyKHMpIHRvIHRoZSBlcXVpdmFsZW50IG9uZSBpbiBnaXZlbg0KPiB2 YXJpYWJsZQ0KPiA+ICAgICA+ICsgIHN0b3JhZ2UgdmlhIFZhclN0b3JlLg0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICBAcGFyYW1baW5dICAgICAgSW5WYXJUcmFja1B0ciAgICAgUG9pbnRlciB0 byBjdXJyZW50IHZhcmlhYmxlIGluIGNhY2hlLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtvdXRdICAg ICBPdXRWYXJUcmFja1B0ciAgICBQb2ludGVyIHRvIHJlYmFzZWQgdmFyaWFibGUgYWdhaW5zdA0K PiA+IFZhclN0b3JlLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBWYXJTdG9yZSAgICAg ICAgICBTdGFydCBvZiB2YXJpYWJsZSBzdG9yYWdlIHRvIHJlYmFzZSBhZ2FpbnN0Lg0KPiA+ICAg ICA+ICsgIEBwYXJhbVtpbl0gICAgICBWYXJpYWJsZU5hbWUgICAgICBOYW1lIG9mIHZhcmlhYmxl Lg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBWZW5kb3JHdWlkICAgICAgICBHdWlkIG9m IHZhcmlhYmxlLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBCeU9mZnNldCAgICAgICAg ICBJZiBUUlVFLCBkb24ndCBkbyB2YXJpYWJsZSBzZWFyY2ggaW4NCj4gVmFyU3RvcmUuDQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFZhcmlh YmxlKHMpIHdlcmUgZGVsZXRlZCBzdWNjZXNzZnVsbHkuDQo+ID4gICAgID4gKyAgQHJldHZhbCBF RklfSU5WQUxJRF9QQVJBTUVURVIgSW52YWxpZCBwYXJhbWV0ZXJzIHBhc3NlZC4NCj4gPiAgICAg PiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICBHaXZlbiB2YXJpYWJsZSAoVmFyaWFi bGVOYW1lICYNCj4gPiBWZW5kb3JHdWlkKQ0KPiA+ICAgICA+IHdhcw0KPiA+ICAgICA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBmb3VuZCBpbiBWYXJTdG9yZSwgaWYgQnlP ZmZzZXQgaXMgRkFMU0UuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiAr RUZJX1NUQVRVUw0KPiA+ICAgICA+ICtSZWJhc2VWYXJpYWJsZVB0ciAoDQo+ID4gICAgID4gKyAg SU4gICAgICBWQVJJQUJMRV9QT0lOVEVSX1RSQUNLICAqSW5WYXJUcmFja1B0ciwNCj4gPiAgICAg PiArICBPVVQgVkFSSUFCTEVfUE9JTlRFUl9UUkFDSyAgICAgICpPdXRWYXJUcmFja1B0ciwNCj4g PiAgICAgPiArICBJTiAgICAgIFZBUklBQkxFX1NUT1JFX0hFQURFUiAgICpWYXJTdG9yZSwNCj4g PiAgICAgPiArICBJTiAgICAgIENIQVIxNiAgICAgICAgICAgICAgICAgICpWYXJpYWJsZU5hbWUs DQo+ID4gICAgID4gKyAgSU4gICAgICBFRklfR1VJRCAgICAgICAgICAgICAgICAqVmVuZG9yR3Vp ZCwNCj4gPiAgICAgPiArICBJTiAgICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgIEJ5T2Zmc2V0 DQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgRUZJX1NUQVRVUyAg ICAgICBTdGF0dXM7DQo+ID4gICAgID4gKyAgQk9PTEVBTiAgICAgICAgICBBdXRoRm9ybWF0Ow0K PiA+ICAgICA+ICsgIFZBUklBQkxFX0hFQURFUiAgKk5ld1N0YXJ0Ow0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICBpZiAoKEluVmFyVHJhY2tQdHIgPT0gTlVMTCkgfHwgKE91dFZhclRyYWNrUHRy ID09IE5VTEwpIHx8IChWYXJTdG9yZSA9PQ0KPiA+ICAgICA+IE5VTEwpKSB7DQo+ID4gICAgID4g KyAgICBBU1NFUlQgKEluVmFyVHJhY2tQdHIgIT0gTlVMTCk7DQo+ID4gICAgID4gKyAgICBBU1NF UlQgKE91dFZhclRyYWNrUHRyICE9IE5VTEwpOw0KPiA+ICAgICA+ICsgICAgQVNTRVJUIChWYXJT dG9yZSAhPSBOVUxMKTsNCj4gPiAgICAgPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVU RVI7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBBdXRoRm9ybWF0 ID0gbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0Ow0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICBpZiAoICAoSW5WYXJUcmFja1B0ci0+Q3VyclB0ciA9PSBO VUxMKQ0KPiA+ICAgICA+ICsgICAgIHx8IChJblZhclRyYWNrUHRyLT5TdGFydFB0ciA9PSBHZXRT dGFydFBvaW50ZXIgKFZhclN0b3JlKSkpDQo+ID4gICAgID4gKyAgew0KPiA+ICAgICA+ICsgICAg Q29weU1lbSAoT3V0VmFyVHJhY2tQdHIsIEluVmFyVHJhY2tQdHIsIHNpemVvZg0KPiA+ICAgICA+ IChWQVJJQUJMRV9QT0lOVEVSX1RSQUNLKSk7DQo+ID4gICAgID4gKyAgICByZXR1cm4gRUZJX1NV Q0NFU1M7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBOZXdTdGFy dCA9IEdldFN0YXJ0UG9pbnRlciAoVmFyU3RvcmUpOw0KPiA+ICAgICA+ICsgIGlmIChCeU9mZnNl dCkgew0KPiA+ICAgICA+ICsgICAgT3V0VmFyVHJhY2tQdHItPkN1cnJQdHIgPSAoVkFSSUFCTEVf SEVBREVSICopDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVUlO VE4pTmV3U3RhcnQgKyAoKFVJTlROKUluVmFyVHJhY2tQdHItPkN1cnJQdHIgLQ0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVSU5U TilJblZhclRyYWNrUHRyLT5TdGFydFB0cikpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAg IGlmIChJblZhclRyYWNrUHRyLT5JbkRlbGV0ZWRUcmFuc2l0aW9uUHRyICE9IE5VTEwpIHsNCj4g PiAgICAgPiArICAgICAgT3V0VmFyVHJhY2tQdHItPkluRGVsZXRlZFRyYW5zaXRpb25QdHIgPQ0K PiA+ICAgICA+ICsgICAgICAgIChWQVJJQUJMRV9IRUFERVIgKikoKFVJTlROKU5ld1N0YXJ0ICsN Cj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVUlOVE4pSW5WYXJUcmFj a1B0ci0+SW5EZWxldGVkVHJhbnNpdGlvblB0ciAtDQo+ID4gICAgID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKFVJTlROKUluVmFyVHJhY2tQdHItPlN0YXJ0UHRyKSk7DQo+ID4gICAg ID4gKyAgICB9IGVsc2Ugew0KPiA+ICAgICA+ICsgICAgICBPdXRWYXJUcmFja1B0ci0+SW5EZWxl dGVkVHJhbnNpdGlvblB0ciA9IE5VTEw7DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgICAgT3V0VmFyVHJhY2tQdHItPlN0YXJ0UHRyID0gTmV3U3RhcnQ7DQo+ID4g ICAgID4gKyAgICBPdXRWYXJUcmFja1B0ci0+RW5kUHRyICAgPSBHZXRFbmRQb2ludGVyIChWYXJT dG9yZSk7DQo+ID4gICAgID4gKyAgfSBlbHNlIHsNCj4gPiAgICAgPiArICAgIE91dFZhclRyYWNr UHRyLT5TdGFydFB0ciA9IE5ld1N0YXJ0Ow0KPiA+ICAgICA+ICsgICAgT3V0VmFyVHJhY2tQdHIt PkVuZFB0ciAgID0gR2V0RW5kUG9pbnRlciAoVmFyU3RvcmUpOw0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICAgIFN0YXR1cyA9IEZpbmRWYXJpYWJsZUV4IChWYXJpYWJsZU5hbWUsIFZlbmRvckd1 aWQsIEZBTFNFLA0KPiA+IE91dFZhclRyYWNrUHRyLA0KPiA+ICAgICA+IEF1dGhGb3JtYXQpOw0K PiA+ICAgICA+ICsgICAgaWYgKChPdXRWYXJUcmFja1B0ci0+Q3VyclB0ciA9PSBOVUxMKSB8fCBF RklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiArICAgICAgcmV0dXJuIEVGSV9OT1RfRk9V TkQ7DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICBpZiAoICAoVmFyU3RvcmUgPT0gbU52VmFyaWFibGVDYWNoZSkNCj4gPiAgICAgPiAr ICAgICB8fCAoKFVJTlROKVZhclN0b3JlID09IChVSU5UTiltVmFyaWFibGVNb2R1bGVHbG9iYWwt DQo+ID4gICAgID4gPlZhcmlhYmxlR2xvYmFsLk5vblZvbGF0aWxlVmFyaWFibGVCYXNlKSkNCj4g PiAgICAgPiArICB7DQo+ID4gICAgID4gKyAgICBPdXRWYXJUcmFja1B0ci0+Vm9sYXRpbGUgPSBG QUxTRTsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIHJldHVybiBF RklfU1VDQ0VTUzsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ ID4gICAgID4gKyAgQ2hlY2sgaWYgdGhlIGdpdmVuIHZhcmlhYmxlIGlzIGZyb20gSE9CLg0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1baW5dIENhY2hlVmFyaWFibGUgICAgICBQb2lu dGVyIHRvIGN1cnJlbnQgdmFyaWFibGUgaW4gY2FjaGUuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsgIEByZXR2YWwgVFJVRSAgICBUaGUgdmFyaWFibGUgaXMgZnJvbSBIT0IuDQo+ID4gICAgID4g KyAgQHJldHZhbCBGQUxTRSAgIFRoZSB2YXJpYWJsZSBpcyBOT1QgZnJvbSBIT0IuDQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArQk9PTEVBTg0KPiA+ICAgICA+ICtJc0hv YlZhcmlhYmxlICgNCj4gPiAgICAgPiArICBJTiBWQVJJQUJMRV9QT0lOVEVSX1RSQUNLICAqQ2Fj aGVWYXJpYWJsZQ0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0KPiA+ICAgICA+ICsgIFZB UklBQkxFX1NUT1JFX0hFQURFUiAgKkhvYlZhclN0b3JlOw0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICBIb2JWYXJTdG9yZSA9IChWQVJJQUJMRV9TVE9SRV9IRUFERVIgKikoVUlOVE4pDQo+ID4g ICAgID4gKyAgICAgICAgICAgICAgICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xv YmFsLkhvYlZhcmlhYmxlQmFzZTsNCj4gPiAgICAgPiArICByZXR1cm4gKENhY2hlVmFyaWFibGUt PkN1cnJQdHIgIT0gTlVMTCAmJg0KPiA+ICAgICA+ICsgICAgICAgICAgSG9iVmFyU3RvcmUgIT0g TlVMTCAmJg0KPiA+ICAgICA+ICsgICAgICAgICAgQ2FjaGVWYXJpYWJsZS0+U3RhcnRQdHIgPT0g R2V0U3RhcnRQb2ludGVyIChIb2JWYXJTdG9yZSkpOw0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBHZXQgdGVtcG9yYXJ5IGJ1ZmZlciBmb3Ig YSBuZXcgdmFyaWFibGUgZGF0YS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHZhbCBQ b2ludGVyIHRvIHRoZSBidWZmZXIgYWRkcmVzcy4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoq Lw0KPiA+ICAgICA+ICtWQVJJQUJMRV9IRUFERVIgKg0KPiA+ICAgICA+ICtHZXROZXdWYXJpYWJs ZUJ1ZmZlciAoDQo+ID4gICAgID4gKyAgVk9JRA0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiAr ew0KPiA+ICAgICA+ICsgIFZBUklBQkxFX0hFQURFUiAgICAgICAgKk5ld1ZhcmlhYmxlOw0KPiA+ ICAgICA+ICsgIFZBUklBQkxFX1NUT1JFX0hFQURFUiAgKlZhclN0b3JlOw0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIFRyaWNreSBwYXJ0OiBVc2Ugc2NyYXRj aCBkYXRhIGFyZWEgYXQgdGhlIGVuZCBvZiB2b2xhdGlsZSB2YXJpYWJsZSBzdG9yZQ0KPiA+ICAg ICA+ICsgIC8vIGFzIGEgdGVtcG9yYXJ5IHN0b3JhZ2UuDQo+ID4gICAgID4gKyAgLy8NCj4gPiAg ICAgPiArICBWYXJTdG9yZSA9IChWQVJJQUJMRV9TVE9SRV9IRUFERVIgKikoVUlOVE4pDQo+ID4g ICAgID4gKyAgICAgICAgICAgICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFs LlZvbGF0aWxlVmFyaWFibGVCYXNlOw0KPiA+ICAgICA+ICsgIE5ld1ZhcmlhYmxlID0gR2V0RW5k UG9pbnRlciAoVmFyU3RvcmUpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBTZXRNZW0gKE5l d1ZhcmlhYmxlLCBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlNjcmF0Y2hCdWZmZXJTaXplLA0KPiAw eGZmKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgcmV0dXJuIE5ld1ZhcmlhYmxlOw0KPiA+ ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBEZWxl dGUgb2xkIGNvcGllcyBvZiB2YXJpYWJsZSBjb21wbGV0ZWx5Lg0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICBAcGFyYW1baW5dICAgICAgVmFyaWFibGVOYW1lICAgICAgIE5hbWUgb2YgdmFyaWFi bGUuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgICAgIFZlbmRvckd1aWQgICAgICAgICBHdWlk IG9mIHZhcmlhYmxlLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBWYXJpYWJsZSAgICAg ICAgICAgUG9pbnRlciB0byBjdXJyZW50IHZhcmlhYmxlIG9uIHN0b3JhZ2UuDQo+ID4gICAgID4g KyAgQHBhcmFtW2luLG91dF0gIENhY2hlVmFyaWFibGUgICAgICBQb2ludGVyIHRvIGN1cnJlbnQg dmFyaWFibGUgaW4gY2FjaGUuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgICAgIFZvbGF0aWxl RmxhZyAgICAgICBBdXRoLXZhcmlhYmxlIGluZGljYXRvci4NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVmFyaWFibGUocykgd2VyZSBkZWxl dGVkIHN1Y2Nlc3NmdWxseS4NCj4gPiAgICAgPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAg ICAgICBGYWlsZWQgdG8gdXBkYXRlIHZhcmlhYmxlIHN0YXRlLg0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArKiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4gPiAgICAgPiArRGVsZXRlVmFyaWFi bGUgKA0KPiA+ICAgICA+ICsgIElOICAgICAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgKlZhcmlh YmxlTmFtZSwNCj4gPiAgICAgPiArICBJTiAgICAgIEVGSV9HVUlEICAgICAgICAgICAgICAgICpW ZW5kb3JHdWlkLA0KPiA+ICAgICA+ICsgIElOICAgICAgVkFSSUFCTEVfUE9JTlRFUl9UUkFDSyAg KlZhcmlhYmxlLA0KPiA+ICAgICA+ICsgIElOICBPVVQgVkFSSUFCTEVfUE9JTlRFUl9UUkFDSyAg KkNhY2hlVmFyaWFibGUsDQo+ID4gICAgID4gKyAgSU4gICAgICBCT09MRUFOICAgICAgICAgICAg ICAgICBWb2xhdGlsZUZsYWcNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAg PiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIGlmIChW YXJpYWJsZS0+SW5EZWxldGVkVHJhbnNpdGlvblB0ciAhPSBOVUxMKSB7DQo+ID4gICAgID4gKyAg ICBBU1NFUlQgKENhY2hlVmFyaWFibGUtPkluRGVsZXRlZFRyYW5zaXRpb25QdHIgIT0gTlVMTCk7 DQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgLy8gQm90aCBBRERFRCBhbmQgSU5f REVMRVRFRF9UUkFOU0lUSU9OIHZhcmlhYmxlIGFyZSBwcmVzZW50LA0KPiA+ICAgICA+ICsgICAg Ly8gc2V0IElOX0RFTEVURURfVFJBTlNJVElPTiBvbmUgdG8gREVMRVRFRCBzdGF0ZSBmaXJzdC4N Cj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICBTdGF0dXMgPSBVcGRhdGVWYXJpYWJs ZVN0YXRlICgNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgVmFyaWFibGUtPkluRGVsZXRlZFRy YW5zaXRpb25QdHIsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgIENhY2hlVmFyaWFibGUtPklu RGVsZXRlZFRyYW5zaXRpb25QdHIsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgIENhY2hlVmFy aWFibGUtPkluRGVsZXRlZFRyYW5zaXRpb25QdHItPlN0YXRlICYgVkFSX0RFTEVURUQsDQo+ID4g ICAgID4gKyAgICAgICAgICAgICAgIFZvbGF0aWxlRmxhZw0KPiA+ICAgICA+ICsgICAgICAgICAg ICAgICApOw0KPiA+ICAgICA+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICAg ICA+ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ICsg IH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQVNTRVJUIChDYWNoZVZhcmlhYmxlLT5DdXJy UHRyICE9IE5VTEwpOw0KPiA+ICAgICA+ICsgIFN0YXR1cyA9IFVwZGF0ZVZhcmlhYmxlU3RhdGUg KA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgVmFyaWFibGUtPkN1cnJQdHIsDQo+ID4gICAgID4g KyAgICAgICAgICAgICBDYWNoZVZhcmlhYmxlLT5DdXJyUHRyLA0KPiA+ICAgICA+ICsgICAgICAg ICAgICAgQ2FjaGVWYXJpYWJsZS0+Q3VyclB0ci0+U3RhdGUgJiBWQVJfREVMRVRFRCwNCj4gPiAg ICAgPiArICAgICAgICAgICAgIFZvbGF0aWxlRmxhZw0KPiA+ICAgICA+ICsgICAgICAgICAgICAg KTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4gPiAgICAgPiArICAgIFVwZGF0ZVZhcmlhYmxlSW5mbyAoDQo+ID4gICAgID4gKyAgICAgIFZh cmlhYmxlTmFtZSwNCj4gPiAgICAgPiArICAgICAgVmVuZG9yR3VpZCwNCj4gPiAgICAgPiArICAg ICAgVmFyaWFibGUtPlZvbGF0aWxlLA0KPiA+ICAgICA+ICsgICAgICBGQUxTRSwNCj4gPiAgICAg PiArICAgICAgRkFMU0UsDQo+ID4gICAgID4gKyAgICAgIFRSVUUsDQo+ID4gICAgID4gKyAgICAg IEZBTFNFLA0KPiA+ICAgICA+ICsgICAgICAmZ1ZhcmlhYmxlSW5mbw0KPiA+ICAgICA+ICsgICAg ICApOw0KPiA+ICAgICA+ICsgICAgaWYgKCFWYXJpYWJsZS0+Vm9sYXRpbGUpIHsNCj4gPiAgICAg PiArICAgICAgRmx1c2hIb2JWYXJpYWJsZVRvRmxhc2ggKFZhcmlhYmxlTmFtZSwgVmVuZG9yR3Vp ZCk7DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsvKioNCj4gPiAgICAgPiArICBDaGVjayBpZiBpdCdzIHRoZSByaWdodCB0aW1lIHRvIHVw ZGF0ZSBhIHZhcmlhYmxlLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1baW5dIEF0 dHJpYnV0ZXMgICAgICAgICBBdHRyaWJ1dGVzIG9mIGEgdmFyaWFibGUuDQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIEByZXR2YWwgVFJVRSAgICBJdCdzIHJlYWR5IGZvciB2YXJpYWJsZSB1cGRh dGUuDQo+ID4gICAgID4gKyAgQHJldHZhbCBGQUxTRSAgIEl0J3MgTk9UIHJlYWR5IGZvciB2YXJp YWJsZSB1cGRhdGUuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArQk9P TEVBTg0KPiA+ICAgICA+ICtSZWFkeUZvclVwZGF0ZSAoDQo+ID4gICAgID4gKyAgSU4gVUlOVDMy ICBBdHRyaWJ1dGVzDQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAg aWYgKChtVmFyaWFibGVNb2R1bGVHbG9iYWwtPkZ2Ykluc3RhbmNlID09IE5VTEwpICYmDQo+ID4g ICAgID4gKyAgICAgICFtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLkVtdU52 TW9kZSkNCj4gPiAgICAgPiArICB7DQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAg Ly8gVGhlIEZWQiBwcm90b2NvbCBpcyBub3QgcmVhZHksIHNvIHRoZQ0KPiA+ICAgICA+IEVGSV9W QVJJQUJMRV9XUklURV9BUkNIX1BST1RPQ09MDQo+ID4gICAgID4gKyAgICAvLyBpcyBub3QgaW5z dGFsbGVkLg0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIGlmICgoQXR0cmlidXRl cyAmIEVGSV9WQVJJQUJMRV9OT05fVk9MQVRJTEUpICE9IDApIHsNCj4gPiAgICAgPiArICAgICAg Ly8NCj4gPiAgICAgPiArICAgICAgLy8gVHJ5aW5nIHRvIHVwZGF0ZSBOViB2YXJpYWJsZSBwcmlv ciB0byB0aGUgaW5zdGFsbGF0aW9uIG9mDQo+ID4gICAgID4gKyAgICAgIC8vIEVGSV9WQVJJQUJM RV9XUklURV9BUkNIX1BST1RPQ09MDQo+ID4gICAgID4gKyAgICAgIC8vDQo+ID4gICAgID4gKyAg ICAgIERFQlVHICgoDQo+ID4gICAgID4gKyAgICAgICAgREVCVUdfRVJST1IsDQo+ID4gICAgID4g KyAgICAgICAgIlVwZGF0ZSBOViB2YXJpYWJsZSBiZWZvcmUNCj4gRUZJX1ZBUklBQkxFX1dSSVRF X0FSQ0hfUFJPVE9DT0wNCj4gPiAgICAgPiByZWFkeSAtICVyXG4iLA0KPiA+ICAgICA+ICsgICAg ICAgIEVGSV9OT1RfQVZBSUxBQkxFX1lFVA0KPiA+ICAgICA+ICsgICAgICAgICkpOw0KPiA+ICAg ICA+ICsgICAgICByZXR1cm4gRkFMU0U7DQo+ID4gICAgID4gKyAgICB9IGVsc2UgaWYgKChBdHRy aWJ1dGVzICYgVkFSSUFCTEVfQVRUUklCVVRFX0FUX0FXKSAhPSAwKSB7DQo+ID4gICAgID4gKyAg ICAgIC8vDQo+ID4gICAgID4gKyAgICAgIC8vIFRyeWluZyB0byB1cGRhdGUgdm9sYXRpbGUgYXV0 aGVudGljYXRlZCB2YXJpYWJsZSBwcmlvciB0byB0aGUNCj4gPiAgICAgPiArICAgICAgLy8gaW5z dGFsbGF0aW9uIG9mIEVGSV9WQVJJQUJMRV9XUklURV9BUkNIX1BST1RPQ09MLiBUaGUNCj4gPiAg ICAgPiBhdXRoZW50aWNhdGVkDQo+ID4gICAgID4gKyAgICAgIC8vIHZhcmlhYmxlIHBlcmhhcHMg aXMgbm90IGluaXRpYWxpemVkLCBqdXN0IHJldHVybiBoZXJlLg0KPiA+ICAgICA+ICsgICAgICAv Lw0KPiA+ICAgICA+ICsgICAgICBERUJVRyAoKA0KPiA+ICAgICA+ICsgICAgICAgIERFQlVHX0VS Uk9SLA0KPiA+ICAgICA+ICsgICAgICAgICJVcGRhdGUgQVVUSCB2YXJpYWJsZSBiZWZvcmUNCj4g PiBFRklfVkFSSUFCTEVfV1JJVEVfQVJDSF9QUk9UT0NPTA0KPiA+ICAgICA+IHJlYWR5IC0gJXJc biIsDQo+ID4gICAgID4gKyAgICAgICAgRUZJX05PVF9BVkFJTEFCTEVfWUVUDQo+ID4gICAgID4g KyAgICAgICAgKSk7DQo+ID4gICAgID4gKyAgICAgIHJldHVybiBGQUxTRTsNCj4gPiAgICAgPiAr ICAgIH0NCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIHJldHVybiBU UlVFOw0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAg PiArICBDaGVjayBwYXJhbWV0ZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmFyaWFibGUgdG8gdXBk YXRlLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1baW5dIFZhcmlhYmxlICAgICAg ICAgICBQb2ludGVyIHRvIGN1cnJlbnQgdmFyaWFibGUgb24gc3RvcmFnZS4NCj4gPiAgICAgPiAr ICBAcGFyYW1baW5dIENhY2hlVmFyaWFibGUgICAgICBQb2ludGVyIHRvIGN1cnJlbnQgdmFyaWFi bGUgaW4gY2FjaGUuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBWYXJpYWJsZU5hbWUgICAgICAg TmFtZSBvZiB2YXJpYWJsZS4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dIFZlbmRvckd1aWQgICAg ICAgICBHdWlkIG9mIHZhcmlhYmxlLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gRGF0YSAgICAg ICAgICAgICAgIFZhcmlhYmxlIGRhdGEuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBEYXRhU2l6 ZSAgICAgICAgICAgU2l6ZSBvZiBkYXRhLiAwIG1lYW5zIGRlbGV0ZS4NCj4gPiAgICAgPiArICBA cGFyYW1baW5dIEF0dHJpYnV0ZXMgICAgICAgICBBdHRyaWJ1dGVzIG9mIHRoZSB2YXJpYWJsZS4N Cj4gPiAgICAgPiArICBAcGFyYW1baW5dIEtleUluZGV4ICAgICAgICAgICBJbmRleCBvZiBhc3Nv Y2lhdGVkIHB1YmxpYyBrZXkuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBNb25vdG9uaWNDb3Vu dCAgICAgVmFsdWUgb2YgYXNzb2NpYXRlZCBtb25vdG9uaWMgY291bnQuDQo+ID4gICAgID4gKyAg QHBhcmFtW2luXSBUaW1lU3RhbXAgICAgICAgICAgVmFsdWUgb2YgYXNzb2NpYXRlZCBUaW1lU3Rh bXAuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAg ICAgIFRoZSB2YXJpYWJsZSBpcyBvayB0byBiZSB1cGRhdGVkLg0KPiA+ICAgICA+ICsgIEByZXR2 YWwgRUZJX0FMUkVBRFlfU1RBUlRFRCAgIE5vIG5lZWQgdG8gdXBkYXRlIHRoZSB2YXJpYWJsZS4N Cj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9XUklURV9QUk9URUNURUQgICBUaGUgdmFyaWFibGUg Y2Fubm90IGJlIHVwZGF0ZWQuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJB TUVURVIgVGhlIHZhcmlhYmxlIGF0dHJpYnV0ZXMgYXJlIG5vdCB2YWxpZC4NCj4gPiAgICAgPiAr ICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICBUcnlpbmcgdG8gZGVsZXRlIG5vbi1leGlz dGluZyB2YXJpYWJsZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtF RklfU1RBVFVTDQo+ID4gICAgID4gK1ZhbGlkYXRlVmFyaWFibGVQYXJhbWV0ZXJzICgNCj4gPiAg ICAgPiArICBJTiBWQVJJQUJMRV9QT0lOVEVSX1RSQUNLICAqVmFyaWFibGUsDQo+ID4gICAgID4g KyAgSU4gVkFSSUFCTEVfUE9JTlRFUl9UUkFDSyAgKkNhY2hlVmFyaWFibGUsDQo+ID4gICAgID4g KyAgSU4gQ0hBUjE2ICAgICAgICAgICAgICAgICAgKlZhcmlhYmxlTmFtZSwNCj4gPiAgICAgPiAr ICBJTiBFRklfR1VJRCAgICAgICAgICAgICAgICAqVmVuZG9yR3VpZCwNCj4gPiAgICAgPiArICBJ TiBWT0lEICAgICAgICAgICAgICAgICAgICAqRGF0YSwNCj4gPiAgICAgPiArICBJTiBVSU5UTiAg ICAgICAgICAgICAgICAgICBEYXRhU2l6ZSwNCj4gPiAgICAgPiArICBJTiBVSU5UMzIgICAgICAg ICAgICAgICAgICBBdHRyaWJ1dGVzLA0KPiA+ICAgICA+ICsgIElOIFVJTlQzMiAgICAgICAgICAg ICAgICAgIEtleUluZGV4LA0KPiA+ICAgICA+ICsgIElOIFVJTlQ2NCAgICAgICAgICAgICAgICAg IE1vbm90b25pY0NvdW50LA0KPiA+ICAgICA+ICsgIElOIEVGSV9USU1FICAgICAgICAgICAgICAg ICpUaW1lU3RhbXANCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBC T09MRUFOICBBdXRoRmxhZzsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQXV0aEZsYWcgPSBt VmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLkF1dGhGb3JtYXQ7DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgIGlmICgoRGF0YVNpemUgPT0gMCkgJiYgKChBdHRyaWJ1dGVzICYg RUZJX1ZBUklBQkxFX0FQUEVORF9XUklURSkgIT0NCj4gMCkpDQo+ID4gew0KPiA+ICAgICA+ICsg ICAgcmV0dXJuIEVGSV9BTFJFQURZX1NUQVJURUQ7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArICBpZiAoVmFyaWFibGUtPkN1cnJQdHIgIT0gTlVMTCkgew0KPiA+ICAg ICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIC8vIFVwZGF0ZS9EZWxldGUgZXhpc3RpbmcgdmFy aWFibGUuDQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgaWYgKEF0UnVudGltZSAo KSkgew0KPiA+ICAgICA+ICsgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAvLyBJZiBBdFJ1bnRp bWUgYW5kIHRoZSB2YXJpYWJsZSBpcyBWb2xhdGlsZSBhbmQgUnVudGltZSBBY2Nlc3MsDQo+ID4g ICAgID4gKyAgICAgIC8vIHRoZSB2b2xhdGlsZSBpcyBSZWFkT25seSwgYW5kIFNldFZhcmlhYmxl IHNob3VsZCBiZSBhYm9ydGVkIGFuZA0KPiA+ICAgICA+ICsgICAgICAvLyByZXR1cm4gRUZJX1dS SVRFX1BST1RFQ1RFRC4NCj4gPiAgICAgPiArICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgaWYg KFZhcmlhYmxlLT5Wb2xhdGlsZSkgew0KPiA+ICAgICA+ICsgICAgICAgIHJldHVybiBFRklfV1JJ VEVfUFJPVEVDVEVEOw0KPiA+ICAgICA+ICsgICAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAvLyBPbmx5IHZhcmlhYmxlIHRoYXQgaGF2ZSBO ViBhdHRyaWJ1dGVzIGNhbiBiZSB1cGRhdGVkL2RlbGV0ZWQgaW4NCj4gPiBSdW50aW1lLg0KPiA+ ICAgICA+ICsgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICBpZiAoKENhY2hlVmFyaWFibGUtPkN1 cnJQdHItPkF0dHJpYnV0ZXMgJg0KPiA+IEVGSV9WQVJJQUJMRV9OT05fVk9MQVRJTEUpDQo+ID4g ICAgID4gPT0gMCkgew0KPiA+ICAgICA+ICsgICAgICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJB TUVURVI7DQo+ID4gICAgID4gKyAgICAgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICAg IC8vDQo+ID4gICAgID4gKyAgICAgIC8vIE9ubHkgdmFyaWFibGUgdGhhdCBoYXZlIFJUIGF0dHJp YnV0ZXMgY2FuIGJlIHVwZGF0ZWQvZGVsZXRlZCBpbg0KPiA+IFJ1bnRpbWUuDQo+ID4gICAgID4g KyAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgIGlmICgoQ2FjaGVWYXJpYWJsZS0+Q3VyclB0ci0+ QXR0cmlidXRlcyAmDQo+ID4gRUZJX1ZBUklBQkxFX1JVTlRJTUVfQUNDRVNTKQ0KPiA+ICAgICA+ ID09IDApIHsNCj4gPiAgICAgPiArICAgICAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVS Ow0KPiA+ICAgICA+ICsgICAgICB9DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIC8vIFZhcmlhYmxlIGNvbnRlbnQgdW5jaGFu Z2VkIGFuZCBubyBuZWVkIHRvIHVwZGF0ZSB0aW1lc3RhbXAsIGp1c3QNCj4gPiByZXR1cm4uDQo+ ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgaWYgKCAgKChBdHRyaWJ1dGVzICYgRUZJ X1ZBUklBQkxFX0FQUEVORF9XUklURSkgPT0gMCkNCj4gPiAgICAgPiArICAgICAgICYmIChUaW1l U3RhbXAgPT0gTlVMTCkNCj4gPiAgICAgPiArICAgICAgICYmIChEYXRhU2l6ZU9mVmFyaWFibGUg KENhY2hlVmFyaWFibGUtPkN1cnJQdHIsIEF1dGhGbGFnKSA9PQ0KPiBEYXRhU2l6ZSkNCj4gPiAg ICAgPiArICAgICAgICYmIChDb21wYXJlTWVtIChEYXRhLCBHZXRWYXJpYWJsZURhdGFQdHIgKENh Y2hlVmFyaWFibGUtDQo+ID5DdXJyUHRyLA0KPiA+ICAgICA+IEF1dGhGbGFnKSwgRGF0YVNpemUp ID09IDApKQ0KPiA+ICAgICA+ICsgICAgew0KPiA+ICAgICA+ICsgICAgICBVcGRhdGVWYXJpYWJs ZUluZm8gKA0KPiA+ICAgICA+ICsgICAgICAgIFZhcmlhYmxlTmFtZSwNCj4gPiAgICAgPiArICAg ICAgICBWZW5kb3JHdWlkLA0KPiA+ICAgICA+ICsgICAgICAgIFZhcmlhYmxlLT5Wb2xhdGlsZSwN Cj4gPiAgICAgPiArICAgICAgICBGQUxTRSwNCj4gPiAgICAgPiArICAgICAgICBUUlVFLA0KPiA+ ICAgICA+ICsgICAgICAgIEZBTFNFLA0KPiA+ICAgICA+ICsgICAgICAgIEZBTFNFLA0KPiA+ICAg ICA+ICsgICAgICAgICZnVmFyaWFibGVJbmZvDQo+ID4gICAgID4gKyAgICAgICAgKTsNCj4gPiAg ICAgPiArICAgICAgcmV0dXJuIEVGSV9BTFJFQURZX1NUQVJURUQ7DQo+ID4gICAgID4gKyAgICB9 DQo+ID4gICAgID4gKyAgfSBlbHNlIHsNCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAg ICAvLyBDcmVhdGUgYSBuZXcgdmFyaWFibGUuDQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICAvLyBNYWtlIHN1cmUgd2UgYXJl IHRyeWluZyB0byBjcmVhdGUgYSBuZXcgdmFyaWFibGUuIFlvdSBjYW5ub3QgZGVsZXRlDQo+IGEN Cj4gPiAgICAgPiBuZXcNCj4gPiAgICAgPiArICAgIC8vIHZhcmlhYmxlLg0KPiA+ICAgICA+ICsg ICAgLy8NCj4gPiAgICAgPiArICAgIGlmICgoRGF0YVNpemUgPT0gMCkgfHwNCj4gPiAgICAgPiAr ICAgICAgICAoKEF0dHJpYnV0ZXMgJg0KPiA+ICAgICA+IChFRklfVkFSSUFCTEVfUlVOVElNRV9B Q0NFU1N8RUZJX1ZBUklBQkxFX0JPT1RTRVJWSUNFX0FDQ0VTUykpDQo+ID4gPT0NCj4gPiAgICAg PiAwKSkNCj4gPiAgICAgPiArICAgIHsNCj4gPiAgICAgPiArICAgICAgcmV0dXJuIEVGSV9OT1Rf Rk9VTkQ7DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgLy8N Cj4gPiAgICAgPiArICAgIC8vIE9ubHkgdmFyaWFibGUgaGF2ZSBOVnxSVCBhdHRyaWJ1dGUgY2Fu IGJlIGNyZWF0ZWQgaW4gUnVudGltZS4NCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAg ICBpZiAoICBBdFJ1bnRpbWUgKCkNCj4gPiAgICAgPiArICAgICAgICYmICggICgoQXR0cmlidXRl cyAmIEVGSV9WQVJJQUJMRV9SVU5USU1FX0FDQ0VTUykgPT0gMCkNCj4gPiAgICAgPiArICAgICAg ICAgIHx8ICgoQXR0cmlidXRlcyAmIEVGSV9WQVJJQUJMRV9OT05fVk9MQVRJTEUpID09IDApKSkN Cj4gPiAgICAgPiArICAgIHsNCj4gPiAgICAgPiArICAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BB UkFNRVRFUjsNCj4gPiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgVXBkYXRlIHRoZSB2YXJpYWJsZSByZWdp b24gd2l0aCBWYXJpYWJsZSBpbmZvcm1hdGlvbi4gSWYNCj4gPiAgICAgPiBFRklfVkFSSUFCTEVf QVVUSEVOVElDQVRFRF9XUklURV9BQ0NFU1MgaXMgc2V0LA0KPiA+ICAgICA+ICsgIGluZGV4IG9m IGFzc29jaWF0ZWQgcHVibGljIGtleSBpcyBuZWVkZWQuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsgIEBwYXJhbVtpbl0gICAgICBWYXJpYWJsZU5hbWUgICAgICAgTmFtZSBvZiB2YXJpYWJsZS4N Cj4gPiAgICAgPiArICBAcGFyYW1baW5dICAgICAgVmVuZG9yR3VpZCAgICAgICAgIEd1aWQgb2Yg dmFyaWFibGUuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgICAgIERhdGEgICAgICAgICAgICAg ICBWYXJpYWJsZSBkYXRhLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBEYXRhU2l6ZSAg ICAgICAgICAgU2l6ZSBvZiBkYXRhLiAwIG1lYW5zIGRlbGV0ZS4NCj4gPiAgICAgPiArICBAcGFy YW1baW5dICAgICAgQXR0cmlidXRlcyAgICAgICAgIEF0dHJpYnV0ZXMgb2YgdGhlIHZhcmlhYmxl Lg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBLZXlJbmRleCAgICAgICAgICAgSW5kZXgg b2YgYXNzb2NpYXRlZCBwdWJsaWMga2V5Lg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBN b25vdG9uaWNDb3VudCAgICAgVmFsdWUgb2YgYXNzb2NpYXRlZCBtb25vdG9uaWMNCj4gY291bnQu DQo+ID4gICAgID4gKyAgQHBhcmFtW2luLG91dF0gIENhY2hlVmFyaWFibGUgICAgICBUaGUgdmFy aWFibGUgaW5mb3JtYXRpb24gd2hpY2ggaXMNCj4gdXNlZA0KPiA+ICAgICA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8ga2VlcCB0cmFjayBvZiB2YXJpYWJsZSB1c2Fn ZS4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dICAgICAgVGltZVN0YW1wICAgICAgICAgIFZhbHVl IG9mIGFzc29jaWF0ZWQgVGltZVN0YW1wLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgdXBkYXRlIG9wZXJhdGlvbiBpcyBzdWNjZXNz Lg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgIFZhcmlhYmxlIHJl Z2lvbiBpcyBmdWxsLCBjYW4gbm90IHdyaXRlDQo+ID4gb3RoZXINCj4gPiAgICAgPiBkYXRhIGlu dG8gdGhpcyByZWdpb24uDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiAr RUZJX1NUQVRVUw0KPiA+ICAgICA+ICtVcGRhdGVWYXJpYWJsZSAoDQo+ID4gICAgID4gKyAgSU4g ICAgICBDSEFSMTYgICAgICAgICAgICAgICAgICAqVmFyaWFibGVOYW1lLA0KPiA+ICAgICA+ICsg IElOICAgICAgRUZJX0dVSUQgICAgICAgICAgICAgICAgKlZlbmRvckd1aWQsDQo+ID4gICAgID4g KyAgSU4gICAgICBWT0lEICAgICAgICAgICAgICAgICAgICAqRGF0YSwNCj4gPiAgICAgPiArICBJ TiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgIERhdGFTaXplLA0KPiA+ICAgICA+ICsgIElO ICAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgQXR0cmlidXRlcyAgICAgIE9QVElPTkFMLA0K PiA+ICAgICA+ICsgIElOICAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgS2V5SW5kZXggICAg ICAgIE9QVElPTkFMLA0KPiA+ICAgICA+ICsgIElOICAgICAgVUlOVDY0ICAgICAgICAgICAgICAg ICAgTW9ub3RvbmljQ291bnQgIE9QVElPTkFMLA0KPiA+ICAgICA+ICsgIElOIE9VVCAgVkFSSUFC TEVfUE9JTlRFUl9UUkFDSyAgKkNhY2hlVmFyaWFibGUsDQo+ID4gICAgID4gKyAgSU4gICAgICBF RklfVElNRSAgICAgICAgICAgICAgICAqVGltZVN0YW1wICAgICAgT1BUSU9OQUwNCj4gPiAgICAg PiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBFRklfU1RBVFVTICAgICAgICAgICAg ICBTdGF0dXM7DQo+ID4gICAgID4gKyAgVkFSSUFCTEVfR0xPQkFMICAgICAgICAgKlZhckdsb2Jh bDsNCj4gPiAgICAgPiArICBWQVJJQUJMRV9IRUFERVIgICAgICAgICAqTmV3VmFyaWFibGU7DQo+ ID4gICAgID4gKyAgVkFSSUFCTEVfSEVBREVSICAgICAgICAgKk5leHRWYXJpYWJsZTsNCj4gPiAg ICAgPiArICBWQVJJQUJMRV9IRUFERVIgICAgICAgICAqVXBkYXRpbmdWYXJpYWJsZTsNCj4gPiAg ICAgPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICBWYXJTaXplOw0KPiA+ICAgICA+ICsgIFVJ TlROICAgICAgICAgICAgICAgICAgIFVwZGF0ZVNpemU7DQo+ID4gICAgID4gKyAgVUlOVE4gICAg ICAgICAgICAgICAgICAgT2Zmc2V0Ow0KPiA+ICAgICA+ICsgIFZBUklBQkxFX1BPSU5URVJfVFJB Q0sgICpWYXJpYWJsZTsNCj4gPiAgICAgPiArICBWQVJJQUJMRV9QT0lOVEVSX1RSQUNLICBOdlZh cmlhYmxlOw0KPiA+ICAgICA+ICsgIFZBUklBQkxFX1NUT1JFX0hFQURFUiAgICpWYXJpYWJsZVN0 b3JlSGVhZGVyOw0KPiA+ICAgICA+ICsgIFZBUklBQkxFX1JVTlRJTUVfQ0FDSEUgICpWb2xhdGls ZUNhY2hlSW5zdGFuY2U7DQo+ID4gICAgID4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgSXND b21tb25WYXJpYWJsZTsNCj4gPiAgICAgPiArICBCT09MRUFOICAgICAgICAgICAgICAgICBJc0Nv bW1vblVzZXJWYXJpYWJsZTsNCj4gPiAgICAgPiArICBCT09MRUFOICAgICAgICAgICAgICAgICBE ZWxldGVGbGFnOw0KPiA+ICAgICA+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgIFZvbGF0aWxl RmxhZzsNCj4gPiAgICAgPiArICBCT09MRUFOICAgICAgICAgICAgICAgICBIb2JWYXJPbmx5Rmxh ZzsNCj4gPiAgICAgPiArICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICBWYXJTdG9yZUJhc2U7DQo+ ID4gICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgKkxhc3RWYXJpYWJsZU9mZnNldDsN Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgaWYgKCFSZWFkeUZvclVwZGF0ZSAoQXR0cmlidXRl cykpIHsNCj4gPiAgICAgPiArICAgIHJldHVybiBFRklfTk9UX0FWQUlMQUJMRV9ZRVQ7DQo+ID4g ICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBWYXJHbG9iYWwgPSAmbVZhcmlh YmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbDsNCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgaWYgKCAgKCgoQXR0cmlidXRlcyAmIEVGSV9WQVJJQUJMRV9BUFBFTkRfV1JJVEUpID09IDAp ICYmIChEYXRhU2l6ZQ0KPiA9PQ0KPiA+IDApKQ0KPiA+ICAgICA+ICsgICAgIHx8IChBdHRyaWJ1 dGVzID09IDApDQo+ID4gICAgID4gKyAgICAgfHwgKEF0UnVudGltZSAoKSAmJiAoKEF0dHJpYnV0 ZXMgJiAoRUZJX1ZBUklBQkxFX1JVTlRJTUVfQUNDRVNTDQo+ID4gICAgID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfEVGSV9WQVJJQUJMRV9CT09UU0VSVklDRV9B Q0NFU1MpKSA9PSAwKSkpDQo+ID4gICAgID4gKyAgew0KPiA+ICAgICA+ICsgICAgRGVsZXRlRmxh ZyA9IFRSVUU7DQo+ID4gICAgID4gKyAgfSBlbHNlIHsNCj4gPiAgICAgPiArICAgIERlbGV0ZUZs YWcgPSBGQUxTRTsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIGlm ICggICgoQXR0cmlidXRlcyAmIEVGSV9WQVJJQUJMRV9OT05fVk9MQVRJTEUpICE9IDApDQo+ID4g ICAgID4gKyAgICAgfHwgKChDYWNoZVZhcmlhYmxlLT5DdXJyUHRyICE9IE5VTEwpICYmDQo+ID4g ICAgID4gKyAgICAgICAgICgoQ2FjaGVWYXJpYWJsZS0+Q3VyclB0ci0+QXR0cmlidXRlcyAmDQo+ ID4gRUZJX1ZBUklBQkxFX05PTl9WT0xBVElMRSkgIT0NCj4gPiAgICAgPiAwKSkpDQo+ID4gICAg ID4gKyAgew0KPiA+ICAgICA+ICsgICAgVm9sYXRpbGVGbGFnID0gRkFMU0U7DQo+ID4gICAgID4g KyAgfSBlbHNlIHsNCj4gPiAgICAgPiArICAgIFZvbGF0aWxlRmxhZyA9IFRSVUU7DQo+ID4gICAg ID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIENo ZWNrIGlmIENhY2hlVmFyaWFibGUgcG9pbnRzIHRvIHRoZSB2YXJpYWJsZSBpbiB2YXJpYWJsZSBI T0IuDQo+ID4gICAgID4gKyAgLy8gSWYgeWVzLCBsZXQgQ2FjaGVWYXJpYWJsZSBwb2ludHMgdG8g dGhlIHZhcmlhYmxlIGluIE5WIHZhcmlhYmxlIGNhY2hlLg0KPiA+ICAgICA+ICsgIC8vDQo+ID4g ICAgID4gKyAgSG9iVmFyT25seUZsYWcgPSBGQUxTRTsNCj4gPiAgICAgPiArICBpZiAoSXNIb2JW YXJpYWJsZSAoQ2FjaGVWYXJpYWJsZSkpIHsNCj4gPiAgICAgPiArICAgIFN0YXR1cyA9IFJlYmFz ZVZhcmlhYmxlUHRyICgNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgQ2FjaGVWYXJpYWJsZSwN Cj4gPiAgICAgPiArICAgICAgICAgICAgICAgQ2FjaGVWYXJpYWJsZSwNCj4gPiAgICAgPiArICAg ICAgICAgICAgICAgbU52VmFyaWFibGVDYWNoZSwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAg VmFyaWFibGVOYW1lLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICBWZW5kb3JHdWlkLA0KPiA+ ICAgICA+ICsgICAgICAgICAgICAgICBGQUxTRQ0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAp Ow0KPiA+ICAgICA+ICsgICAgaWYgKChDYWNoZVZhcmlhYmxlLT5DdXJyUHRyID09IE5VTEwpIHx8 IEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICAgICA+ICsgICAgICAvLw0KPiA+ICAgICA+ICsg ICAgICAvLyBUaGVyZSBpcyBubyBtYXRjaGVkIHZhcmlhYmxlIGluIE5WIHZhcmlhYmxlIGNhY2hl Lg0KPiA+ICAgICA+ICsgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICBpZiAoRGVsZXRlRmxhZykg ew0KPiA+ICAgICA+ICsgICAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgICAgLy8gTGVhdmUgdGhl IGRlbGV0aW9uIHRvIEZsdXNoSG9iVmFyaWFibGVUb0ZsYXNoKCkgYmVmb3JlIHJldHVybi4NCj4g PiAgICAgPiArICAgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAgIEhvYlZhck9ubHlGbGFnID0g VFJVRTsNCj4gPiAgICAgPiArICAgICAgICBTdGF0dXMgICAgICAgICA9IEVGSV9TVUNDRVNTOw0K PiA+ICAgICA+ICsgICAgICAgIGdvdG8gRG9uZTsNCj4gPiAgICAgPiArICAgICAgfQ0KPiA+ICAg ICA+ICsgICAgfQ0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8N Cj4gPiAgICAgPiArICAvLyBEZXRlcm1pbmUgdGhlIHBoeXNpY2FsIHBvc2l0aW9uIG9mIHZhcmlh YmxlIHN0b3JlIHRvIHVwZGF0ZSwgZHVlIHRvDQo+ID4gY2FjaGUNCj4gPiAgICAgPiArICAvLyBt ZWNoYW5pbXMgb2YgdmFyaWFibGUgc2VydmljZS4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ ICsgIGlmICgoQ2FjaGVWYXJpYWJsZS0+Q3VyclB0ciA9PSBOVUxMKSB8fCBDYWNoZVZhcmlhYmxl LT5Wb2xhdGlsZSkgew0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIC8vIC0gQWRk IG5ldyB2YXJpYWJsZSAodm9sYXRpbGUgb3Igbm9uLXZvbGF0aWxlKTsgT3INCj4gPiAgICAgPiAr ICAgIC8vIC0gVXBkYXRlL2RlbGV0ZSB2b2xhdGlsZSB2YXJpYWJsZSBpbiBwbGFjZS4NCj4gPiAg ICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICBWYXJpYWJsZSA9IENhY2hlVmFyaWFibGU7DQo+ ID4gICAgID4gKyAgfSBlbHNlIHsNCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICAv LyAtIFVwZGF0ZS9EZWxldGUgZXhpc3RpbmcgTlYgdmFyaWFibGUuDQo+ID4gICAgID4gKyAgICAv LyAgICBDYWNoZVZhcmlhYmxlIHBvaW50cyB0byB0aGUgdmFyaWFibGUgaW4gdGhlIG1lbW9yeSBj b3B5IG9mIEZsYXNoDQo+ID4gYXJlYS4NCj4gPiAgICAgPiArICAgIC8vICAgIE5vdyBsZXQgVmFy aWFibGUgcG9pbnRzIHRvIHRoZSBzYW1lIHZhcmlhYmxlIGluIEZsYXNoIGFyZWEuDQo+ID4gICAg ID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgVmFyaWFibGVTdG9yZUhlYWRlciA9IChWQVJJQUJM RV9TVE9SRV9IRUFERVIgKikoVUlOVE4pDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgVmFyR2xvYmFsLT5Ob25Wb2xhdGlsZVZhcmlhYmxlQmFzZTsNCj4gPiAgICAgPiArICAg IFZhcmlhYmxlID0gJk52VmFyaWFibGU7DQo+ID4gICAgID4gKyAgICBTdGF0dXMgICA9IFJlYmFz ZVZhcmlhYmxlUHRyICgNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICBDYWNoZVZhcmlhYmxl LA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgIFZhcmlhYmxlLA0KPiA+ICAgICA+ICsgICAg ICAgICAgICAgICAgIFZhcmlhYmxlU3RvcmVIZWFkZXIsDQo+ID4gICAgID4gKyAgICAgICAgICAg ICAgICAgVmFyaWFibGVOYW1lLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgIFZlbmRvckd1 aWQsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgVFJVRQ0KPiA+ICAgICA+ICsgICAgICAg ICAgICAgICAgICk7DQo+ID4gICAgID4gKyAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0K PiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiAr ICAvLyBWYWxpZGF0ZSB2YXJpYWJsZSBwYXJhbWV0ZXJzLg0KPiA+ICAgICA+ICsgIC8vDQo+ID4g ICAgID4gKyAgU3RhdHVzID0gVmFsaWRhdGVWYXJpYWJsZVBhcmFtZXRlcnMgKA0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgVmFyaWFibGUsDQo+ID4gICAgID4gKyAgICAgICAgICAgICBDYWNoZVZh cmlhYmxlLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgVmFyaWFibGVOYW1lLA0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgVmVuZG9yR3VpZCwNCj4gPiAgICAgPiArICAgICAgICAgICAgIERhdGEs DQo+ID4gICAgID4gKyAgICAgICAgICAgICBEYXRhU2l6ZSwNCj4gPiAgICAgPiArICAgICAgICAg ICAgIEF0dHJpYnV0ZXMsDQo+ID4gICAgID4gKyAgICAgICAgICAgICBLZXlJbmRleCwNCj4gPiAg ICAgPiArICAgICAgICAgICAgIE1vbm90b25pY0NvdW50LA0KPiA+ICAgICA+ICsgICAgICAgICAg ICAgVGltZVN0YW1wDQo+ID4gICAgID4gKyAgICAgICAgICAgICApOw0KPiA+ICAgICA+ICsgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiArICAgIGdvdG8gRG9uZTsNCj4gPiAg ICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8g QWRkIG9yIHVwZGF0ZSBhIHZhcmlhYmxlLiBBbGxvY2F0ZSBhIGJ1ZmZlciB0byBob2xkIGl0IHRl bXBvcmFyaWx5Lg0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgTmV3VmFyaWFibGUgPSBH ZXROZXdWYXJpYWJsZUJ1ZmZlciAoKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4g PiAgICAgPiArICAvLyBGaWxsLXVwIHZhcmlhYmxlIGRhdGEgZmlyc3QsIGlmIG5lY2Vzc2FyeS4N Cj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIElzQ29tbW9uVmFyaWFibGUgICAgID0gRkFM U0U7DQo+ID4gICAgID4gKyAgSXNDb21tb25Vc2VyVmFyaWFibGUgPSBGQUxTRTsNCj4gPiAgICAg PiArICBpZiAoRGVsZXRlRmxhZykgew0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAg IC8vIE5vIG5lZWQgdG8gZmlsbCB1cCB2YXJpYWJsZSBidWZmZXIgd2hlbiBkZWxldGluZyBhIHZh cmlhYmxlLiBCdXQgdGhlDQo+ID4gICAgID4gKyAgICAvLyBidWZmZXIgaXMgc3RpbGwgbmVlZGVk IGlmIHZhcmlhYmxlIHByb3RlY3Rpb24gaXMgZW1wbG95ZWQuDQo+ID4gICAgID4gKyAgICAvLw0K PiA+ICAgICA+ICsgICAgVmFyU2l6ZSA9IDA7DQo+ID4gICAgID4gKyAgfSBlbHNlIHsNCj4gPiAg ICAgPiArICAgIFZhclNpemUgPSBTZXRWYXJpYWJsZURhdGEgKA0KPiA+ICAgICA+ICsgICAgICAg ICAgICAgICAgTmV3VmFyaWFibGUsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICBDYWNoZVZh cmlhYmxlLT5DdXJyUHRyLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgVmFyaWFibGVOYW1l LA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgVmVuZG9yR3VpZCwNCj4gPiAgICAgPiArICAg ICAgICAgICAgICAgIERhdGEsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICBEYXRhU2l6ZSwN Cj4gPiAgICAgPiArICAgICAgICAgICAgICAgIEF0dHJpYnV0ZXMsDQo+ID4gICAgID4gKyAgICAg ICAgICAgICAgICBLZXlJbmRleCwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgIE1vbm90b25p Y0NvdW50LA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgVGltZVN0YW1wDQo+ID4gICAgID4g KyAgICAgICAgICAgICAgICApOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgIGlmICgoQXR0 cmlidXRlcyAmIEVGSV9WQVJJQUJMRV9IQVJEV0FSRV9FUlJPUl9SRUNPUkQpID09IDApIHsNCj4g PiAgICAgPiArICAgICAgSXNDb21tb25WYXJpYWJsZSAgICAgPSBUUlVFOw0KPiA+ICAgICA+ICsg ICAgICBJc0NvbW1vblVzZXJWYXJpYWJsZSA9IElzVXNlclZhcmlhYmxlIChOZXdWYXJpYWJsZSk7 DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICAvLw0KPiA+ICAgICA+ICsgIC8vIFdlIG1pZ2h0IG5lZWQgdG8gZG8gcHJvdGVjdGlvbiBm b3Igbm9uLXZvbGF0aWxlIHZhcmlhYmxlIGJlZm9yZQ0KPiA+IGZsdXNoaW5nDQo+ID4gICAgID4g KyAgLy8gdGhlIGRhdGEgdG8gc3RvcmFnZS4gQSBudWxsIHZlcnNpb24gKG1lYW5pbmcgbm8gcHJv dGVjdGlvbikgb2YNCj4gZm9sbG93aW5nDQo+ID4gICAgID4gKyAgLy8gQVBJcyBzaG91bGQgc2lt cGx5IHJldHVybiBFRklfU1VDQ0VTUyBvciBFRklfVU5TVVBQT1JURUQgd2l0aG91dA0KPiA+IGFu eQ0KPiA+ICAgICA+ICsgIC8vIGNoYW5nZXMgdG8gb3JpZ2luYWwgZGF0YS4NCj4gPiAgICAgPiAr ICAvLw0KPiA+ICAgICA+ICsgIGlmICghVm9sYXRpbGVGbGFnKSB7DQo+ID4gICAgID4gKyAgICBT dGF0dXMgPSBQcm90ZWN0ZWRWYXJpYWJsZUxpYlVwZGF0ZSAoDQo+ID4gICAgID4gKyAgICAgICAg ICAgICAgIFZhcmlhYmxlLT5DdXJyUHRyLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICBWYXJp YWJsZS0+SW5EZWxldGVkVHJhbnNpdGlvblB0ciwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAg TmV3VmFyaWFibGUsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICZWYXJTaXplDQo+ID4gICAg ID4gKyAgICAgICAgICAgICAgICk7DQo+ID4gICAgID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpICYmIChTdGF0dXMgIT0gRUZJX1VOU1VQUE9SVEVEKSkgew0KPiA+ICAgICA+ICsgICAgICBy ZXR1cm4gU3RhdHVzOw0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr ICAgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBNYXJrIHRoZSBvbGQgdmFyaWFibGUgYXMg aW4gZGVsZXRlIHRyYW5zaXRpb24gZmlyc3QuIFRoZXJlJ3Mgbm8gc3VjaCBuZWVkDQo+ID4gICAg ID4gKyAgLy8gZm9yIGRlbGV0aW5nIGEgdmFyaWFibGUsIGV2ZW4gaWYgdmFyaWFibGUgcHJvdGVj dGlvbiBpcyBlbXBsb3llZC4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIGlmICggICFE ZWxldGVGbGFnDQo+ID4gICAgID4gKyAgICAgJiYgKENhY2hlVmFyaWFibGUtPkN1cnJQdHIgIT0g TlVMTCkNCj4gPiAgICAgPiArICAgICAmJiAoICAoQ2FjaGVWYXJpYWJsZS0+Q3VyclB0ci0+U3Rh dGUgPT0gVkFSX0FEREVEKQ0KPiA+ICAgICA+ICsgICAgICAgIHx8IChDYWNoZVZhcmlhYmxlLT5D dXJyUHRyLT5TdGF0ZSA9PSAoVkFSX0FEREVEICYNCj4gPiAgICAgPiBWQVJfSU5fREVMRVRFRF9U UkFOU0lUSU9OKSkpKQ0KPiA+ICAgICA+ICsgIHsNCj4gPiAgICAgPiArICAgIFN0YXR1cyA9IFVw ZGF0ZVZhcmlhYmxlU3RhdGUgKA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICBWYXJpYWJsZS0+ Q3VyclB0ciwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgQ2FjaGVWYXJpYWJsZS0+Q3VyclB0 ciwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgQ2FjaGVWYXJpYWJsZS0+Q3VyclB0ci0+U3Rh dGUgJiBWQVJfSU5fREVMRVRFRF9UUkFOU0lUSU9OLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAg ICBWYXJpYWJsZS0+Vm9sYXRpbGUNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgKTsNCj4gPiAg ICAgPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiArICAgICAgZ290 byBEb25lOw0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBIYXZlIGVub3VnaCBzcGFjZSB0byBzdG9y ZSB0aGUgdmFyaWFibGU/DQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBTdGF0dXMgPSBD aGVja1ZhcmlhYmxlU3RvcmVTcGFjZSAoDQo+ID4gICAgID4gKyAgICAgICAgICAgICBOZXdWYXJp YWJsZSwNCj4gPiAgICAgPiArICAgICAgICAgICAgIFZhclNpemUsDQo+ID4gICAgID4gKyAgICAg ICAgICAgICBWYXJpYWJsZU5hbWUsDQo+ID4gICAgID4gKyAgICAgICAgICAgICBWZW5kb3JHdWlk LA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgQXR0cmlidXRlcywNCj4gPiAgICAgPiArICAgICAg ICAgICAgIFZvbGF0aWxlRmxhZw0KPiA+ICAgICA+ICsgICAgICAgICAgICAgKTsNCj4gPiAgICAg PiArICBpZiAoU3RhdHVzID09IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTKSB7DQo+ID4gICAgID4gKyAg ICAvLw0KPiA+ICAgICA+ICsgICAgLy8gTm90IGEgY2hhbmNlLg0KPiA+ICAgICA+ICsgICAgLy8N Cj4gPiAgICAgPiArICAgIGdvdG8gRG9uZTsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gTWF5YmUgbm90Li4uDQo+ID4gICAgID4g KyAgLy8NCj4gPiAgICAgPiArICBWYXJTdG9yZUJhc2UgPSAoVm9sYXRpbGVGbGFnKSA/IFZhckds b2JhbC0+Vm9sYXRpbGVWYXJpYWJsZUJhc2UNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA6IFZhckdsb2JhbC0+Tm9uVm9sYXRpbGVWYXJpYWJsZUJhc2U7DQo+ID4g ICAgID4gKyAgTGFzdFZhcmlhYmxlT2Zmc2V0ID0gKFZvbGF0aWxlRmxhZykNCj4gPiAgICAgPiAr ICAgICAgICAgICAgICAgICAgICAgICAgPyAmbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5Wb2xhdGls ZUxhc3RWYXJpYWJsZU9mZnNldA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICA6 ICZtVmFyaWFibGVNb2R1bGVHbG9iYWwtPk5vblZvbGF0aWxlTGFzdFZhcmlhYmxlT2Zmc2V0Ow0K PiA+ICAgICA+ICsgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAgID4gKyAgICAv Lw0KPiA+ICAgICA+ICsgICAgLy8gVGhlcmUncyBlbm91Z2ggZnJlZSBzcGFjZSBhdCB0aGUgdGFp bCBvZiB2YXJpYWJsZSBzdG9yYWdlLg0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgLy8gSWYgbm9uLXZvbGF0aWxlIHZhcmlh YmxlIGlzIHByb3RlY3RlZCwgYSBzZXBhcmF0ZSB2YXJpYWJsZQ0KPiA+ICAgICA+IChNZXRhRGF0 YUhtYWNWYXIpDQo+ID4gICAgID4gKyAgICAvLyBpcyBhbHdheXMgdXBkYXRlZCBhbG9uZyB3aXRo IGN1cnJlbnQgdXBkYXRpbmcgdmFyaWFibGUuIFRoZSBidWZmZXINCj4gPiBwb2ludGVkDQo+ID4g ICAgID4gKyAgICAvLyBieSBOZXdWYXJpYWJsZSBtdXN0IGhhdmUgdHdvIHZhcmlhYmxlcy4gVGhl eSBzaG91bGQgYmUgd3JpdHRlbiBhdA0KPiA+IHRoaXMNCj4gPiAgICAgPiArICAgIC8vIHRpbWUg b3JkZXJseS4NCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICBOZXh0VmFyaWFibGUg ICAgID0gTmV3VmFyaWFibGU7DQo+ID4gICAgID4gKyAgICBVcGRhdGluZ1ZhcmlhYmxlID0gTlVM TDsNCj4gPiAgICAgPiArICAgIFVwZGF0ZVNpemUgICAgICAgPSAwOw0KPiA+ICAgICA+ICsgICAg d2hpbGUgKCAgIUVGSV9FUlJPUiAoU3RhdHVzKQ0KPiA+ICAgICA+ICsgICAgICAgICAgJiYgKChV SU5UTilOZXh0VmFyaWFibGUgLSAoVUlOVE4pTmV3VmFyaWFibGUpIDwgVmFyU2l6ZSkNCj4gPiAg ICAgPiArICAgIHsNCj4gPiAgICAgPiArICAgICAgVXBkYXRpbmdWYXJpYWJsZSA9IE5leHRWYXJp YWJsZTsNCj4gPiAgICAgPiArICAgICAgTmV4dFZhcmlhYmxlICAgICA9IEdldE5leHRWYXJpYWJs ZVB0ciAoVXBkYXRpbmdWYXJpYWJsZSwgVmFyR2xvYmFsLQ0KPiA+ICAgICA+ID5BdXRoRm9ybWF0 KTsNCj4gPiAgICAgPiArICAgICAgVXBkYXRlU2l6ZSAgICAgICA9IChVSU5UTilOZXh0VmFyaWFi bGUgLSAoVUlOVE4pVXBkYXRpbmdWYXJpYWJsZTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg ICAgIFN0YXR1cyA9IFdyaXRlVmFyaWFibGUgKA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAg IFZhclN0b3JlQmFzZSwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICBMYXN0VmFyaWFibGVP ZmZzZXQsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgJlVwZGF0aW5nVmFyaWFibGUsDQo+ ID4gICAgID4gKyAgICAgICAgICAgICAgICAgKFVJTlQzMilVcGRhdGVTaXplLA0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgICAgIFZvbGF0aWxlRmxhZywNCj4gPiAgICAgPiArICAgICAgICAgICAg ICAgICBWYXJHbG9iYWwtPkF1dGhGb3JtYXQNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAp Ow0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgIC8vDQo+ID4g ICAgID4gKyAgICAvLyBVcGRhdGluZ1ZhcmlhYmxlIG11c3QgcG9pbnQgdG8gdGhlIGxhc3Qgd3Jp dHRlbiB2YXJpYWJsZS4gUmVzdG9yZSBpdA0KPiB0bw0KPiA+ICAgICA+ICsgICAgLy8gdGhlIGZp cnN0IG9uZSBzbyB0aGF0IHdlIGNhbiBjYWxjdWxhdGUgdGhlIG9mZnNldCBpbiB2YXJpYWJsZSBz dG9yYWdlLg0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIFVwZGF0aW5nVmFyaWFi bGUgPSAoVkFSSUFCTEVfSEVBREVSICopKChVSU5UTilVcGRhdGluZ1ZhcmlhYmxlICsNCj4gPiAg ICAgPiBVcGRhdGVTaXplDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAtIFZhclNpemUpOw0KPiA+ICAgICA+ICsgICAgaWYgKChBdHRyaWJ1dGVz ICYgRUZJX1ZBUklBQkxFX0hBUkRXQVJFX0VSUk9SX1JFQ09SRCkgIT0gMCkgew0KPiA+ICAgICA+ ICsgICAgICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPkh3RXJyVmFyaWFibGVUb3RhbFNpemUgKz0g VmFyU2l6ZTsNCj4gPiAgICAgPiArICAgIH0gZWxzZSB7DQo+ID4gICAgID4gKyAgICAgIG1WYXJp YWJsZU1vZHVsZUdsb2JhbC0+Q29tbW9uVmFyaWFibGVUb3RhbFNpemUgKz0gVmFyU2l6ZTsNCj4g PiAgICAgPiArICAgICAgaWYgKElzQ29tbW9uVXNlclZhcmlhYmxlKSB7DQo+ID4gICAgID4gKyAg ICAgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5Db21tb25Vc2VyVmFyaWFibGVUb3RhbFNpemUg Kz0gVmFyU2l6ZTsNCj4gPiAgICAgPiArICAgICAgfQ0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICAvLyBNYXJrIHRoZSBvbGQg dmFyaWFibGUocykgYXMgZGVsZXRlZC4NCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAg ICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSAmJiAoVmFyaWFibGUtPkN1cnJQdHIgIT0gTlVMTCkp IHsNCj4gPiAgICAgPiArICAgICAgU3RhdHVzID0gRGVsZXRlVmFyaWFibGUgKA0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgICAgIFZhcmlhYmxlTmFtZSwNCj4gPiAgICAgPiArICAgICAgICAgICAg ICAgICBWZW5kb3JHdWlkLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgIFZhcmlhYmxlLA0K PiA+ICAgICA+ICsgICAgICAgICAgICAgICAgIENhY2hlVmFyaWFibGUsDQo+ID4gICAgID4gKyAg ICAgICAgICAgICAgICAgVm9sYXRpbGVGbGFnDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAg KTsNCj4gPiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArICB9IGVsc2Ugew0KPiA+ICAgICA+ICsg ICAgLy8NCj4gPiAgICAgPiArICAgIC8vIFRoZXJlJ3Mgbm90IGVub3VnaCBzcGFjZSBhdCB0aGUg dGFpbCBvZiB2YXJpYWJsZSBzdG9yYWdlIGJ1dCB0aGVyZSdzDQo+ID4gICAgID4gKyAgICAvLyBl bm91Z2ggZnJlZSBzcGFjZSBob2xlcyBpbiB0aGUgd2hvbGUgc3RvcmFnZS4gUGVyZm9ybSBnYXJi YWdlDQo+ID4gY29sbGVjdGlvbg0KPiA+ICAgICA+ICsgICAgLy8gJiByZWNsYWltIG9wZXJhdGlv biwgYW5kIGludGVncmF0ZSB0aGUgbmV3IHZhcmlhYmxlIGF0IHRoZSBzYW1lDQo+IHRpbWUuDQo+ ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgU3RhdHVzID0gUmVjbGFpbSAoDQo+ID4g ICAgID4gKyAgICAgICAgICAgICAgIFZhclN0b3JlQmFzZSwNCj4gPiAgICAgPiArICAgICAgICAg ICAgICAgTGFzdFZhcmlhYmxlT2Zmc2V0LA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICBWb2xh dGlsZUZsYWcsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgIFZhcmlhYmxlLA0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgICBOZXdWYXJpYWJsZSwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAg VmFyU2l6ZQ0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICApOw0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICAgIGlmIChWYXJpYWJsZS0+Q3VyclB0ciAhPSBOVUxMKSB7DQo+ID4gICAgID4gKyAg ICAgIFVwZGF0aW5nVmFyaWFibGUgPSBWYXJpYWJsZS0+Q3VyclB0cjsNCj4gPiAgICAgPiArICAg IH0gZWxzZSB7DQo+ID4gICAgID4gKyAgICAgIFVwZGF0aW5nVmFyaWFibGUgPSAoVkFSSUFCTEVf SEVBREVSICopKCgoVUlOVE4pVmFyU3RvcmVCYXNlICsNCj4gPiAgICAgPiAqTGFzdFZhcmlhYmxl T2Zmc2V0KSAtIFZhclNpemUpOw0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykgJiYNCj4gPiAgICAgPiArICAgICAgICAo KEF0dHJpYnV0ZXMgJiBFRklfVkFSSUFCTEVfSEFSRFdBUkVfRVJST1JfUkVDT1JEKSA9PSAwKSkN Cj4gPiAgICAgPiArICAgIHsNCj4gPiAgICAgPiArICAgICAgLy8NCj4gPiAgICAgPiArICAgICAg Ly8gT3V0IG9mIHNwYWNlLg0KPiA+ICAgICA+ICsgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICBJ c0NvbW1vblVzZXJWYXJpYWJsZSA9IElzVXNlclZhcmlhYmxlIChOZXdWYXJpYWJsZSk7DQo+ID4g ICAgID4gKyAgICAgIElzQ29tbW9uVmFyaWFibGUgICAgID0gVFJVRTsNCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgICAgIGlmIChJc0NvbW1vblVzZXJWYXJpYWJsZSAmJg0KPiA+ICAgICA+ICsg ICAgICAgICAgKChWYXJTaXplICsgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+Q29tbW9uVXNl clZhcmlhYmxlVG90YWxTaXplKQ0KPiA+ICAgICA+ICsgICAgICAgICAgID4gbVZhcmlhYmxlTW9k dWxlR2xvYmFsLT5Db21tb25NYXhVc2VyVmFyaWFibGVTcGFjZSkpDQo+ID4gICAgID4gKyAgICAg IHsNCj4gPiAgICAgPiArICAgICAgICBSZWNvcmRWYXJFcnJvckZsYWcgKA0KPiA+ICAgICA+ICsg ICAgICAgICAgVkFSX0VSUk9SX0ZMQUdfVVNFUl9FUlJPUiwNCj4gPiAgICAgPiArICAgICAgICAg IFZhcmlhYmxlTmFtZSwNCj4gPiAgICAgPiArICAgICAgICAgIFZlbmRvckd1aWQsDQo+ID4gICAg ID4gKyAgICAgICAgICBBdHRyaWJ1dGVzLA0KPiA+ICAgICA+ICsgICAgICAgICAgVmFyU2l6ZQ0K PiA+ICAgICA+ICsgICAgICAgICAgKTsNCj4gPiAgICAgPiArICAgICAgfQ0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICAgICAgaWYgKElzQ29tbW9uVmFyaWFibGUgJiYNCj4gPiAgICAgPiArICAg ICAgICAgICgoVmFyU2l6ZSArIG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+Q29tbW9uVmFyaWFibGVU b3RhbFNpemUpDQo+ID4gICAgID4gKyAgICAgICAgICAgPiBtVmFyaWFibGVNb2R1bGVHbG9iYWwt PkNvbW1vblZhcmlhYmxlU3BhY2UpKQ0KPiA+ICAgICA+ICsgICAgICB7DQo+ID4gICAgID4gKyAg ICAgICAgUmVjb3JkVmFyRXJyb3JGbGFnICgNCj4gPiAgICAgPiArICAgICAgICAgIFZBUl9FUlJP Ul9GTEFHX1NZU1RFTV9FUlJPUiwNCj4gPiAgICAgPiArICAgICAgICAgIFZhcmlhYmxlTmFtZSwN Cj4gPiAgICAgPiArICAgICAgICAgIFZlbmRvckd1aWQsDQo+ID4gICAgID4gKyAgICAgICAgICBB dHRyaWJ1dGVzLA0KPiA+ICAgICA+ICsgICAgICAgICAgVmFyU2l6ZQ0KPiA+ICAgICA+ICsgICAg ICAgICAgKTsNCj4gPiAgICAgPiArICAgICAgfQ0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gK0RvbmU6DQo+ID4gICAgID4gKyAgaWYgKCFF RklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiArICAgIGlmICghVm9sYXRpbGVGbGFnKSB7 DQo+ID4gICAgID4gKyAgICAgIE9mZnNldCA9IChVcGRhdGluZ1ZhcmlhYmxlICE9IE5VTEwpID8g KFVJTlROKVVwZGF0aW5nVmFyaWFibGUgLQ0KPiA+ICAgICA+IChVSU5UTilWYXJTdG9yZUJhc2UN Cj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAw Ow0KPiA+ICAgICA+ICsgICAgICBTdGF0dXMgPSBQcm90ZWN0ZWRWYXJpYWJsZUxpYldyaXRlRmlu YWwgKA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgIE5ld1ZhcmlhYmxlLA0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgICAgIFZhclNpemUsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAg T2Zmc2V0DQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgKTsNCj4gPiAgICAgPiArICAgICAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSAmJiAoU3RhdHVzICE9IEVGSV9VTlNVUFBPUlRFRCkpIHsN Cj4gPiAgICAgPiArICAgICAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICAgICA+ICsgICAgICB9DQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gPiAg ICAgPiArICAgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICBVcGRhdGVWYXJpYWJsZUlu Zm8gKA0KPiA+ICAgICA+ICsgICAgICBWYXJpYWJsZU5hbWUsDQo+ID4gICAgID4gKyAgICAgIFZl bmRvckd1aWQsDQo+ID4gICAgID4gKyAgICAgIFZvbGF0aWxlRmxhZywNCj4gPiAgICAgPiArICAg ICAgRkFMU0UsDQo+ID4gICAgID4gKyAgICAgIFRSVUUsDQo+ID4gICAgID4gKyAgICAgIEZBTFNF LA0KPiA+ICAgICA+ICsgICAgICBGQUxTRSwNCj4gPiAgICAgPiArICAgICAgJmdWYXJpYWJsZUlu Zm8NCj4gPiAgICAgPiArICAgICAgKTsNCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAg ICAvLyBIT0IgY29weSBvZiB0aGUgc2FtZSB2YXJpYWJsZSBpcyBubyBsb25nZXIgbmVlZGVkLCBu byBtYXR0ZXIgaXQgaGFzDQo+ID4gICAgID4gKyAgICAvLyBiZWVuIGRlbGV0ZWQsIHVwZGF0ZWQg b3IgYWRkZWQgZnJvbS90byByZWFsIHZhcmlhYmxlIHN0b3JhZ2UuDQo+ID4gICAgID4gKyAgICAv Lw0KPiA+ICAgICA+ICsgICAgaWYgKEhvYlZhck9ubHlGbGFnIHx8ICFWb2xhdGlsZUZsYWcpIHsN Cj4gPiAgICAgPiArICAgICAgRmx1c2hIb2JWYXJpYWJsZVRvRmxhc2ggKFZhcmlhYmxlTmFtZSwg VmVuZG9yR3VpZCk7DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsg ICAgaWYgKCFWb2xhdGlsZUZsYWcpIHsNCj4gPiAgICAgPiArICAgICAgVm9sYXRpbGVDYWNoZUlu c3RhbmNlID0gJihWYXJHbG9iYWwtDQo+ID4gICAgID4gPlZhcmlhYmxlUnVudGltZUNhY2hlQ29u dGV4dC5WYXJpYWJsZVJ1bnRpbWVOdkNhY2hlKTsNCj4gPiAgICAgPiArICAgIH0gZWxzZSB7DQo+ ID4gICAgID4gKyAgICAgIFZvbGF0aWxlQ2FjaGVJbnN0YW5jZSA9ICYoVmFyR2xvYmFsLQ0KPiA+ ICAgICA+ID5WYXJpYWJsZVJ1bnRpbWVDYWNoZUNvbnRleHQuVmFyaWFibGVSdW50aW1lVm9sYXRp bGVDYWNoZSk7DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAg aWYgKFZvbGF0aWxlQ2FjaGVJbnN0YW5jZS0+U3RvcmUgIT0gTlVMTCkgew0KPiA+ICAgICA+ICsg ICAgICBTdGF0dXMgPSAgU3luY2hyb25pemVSdW50aW1lVmFyaWFibGVDYWNoZSAoDQo+ID4gICAg ID4gKyAgICAgICAgICAgICAgICAgIFZvbGF0aWxlQ2FjaGVJbnN0YW5jZSwNCj4gPiAgICAgPiAr ICAgICAgICAgICAgICAgICAgMCwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgVm9sYXRp bGVDYWNoZUluc3RhbmNlLT5TdG9yZS0+U2l6ZQ0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAg ICApOw0KPiA+ICAgICA+ICsgICAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+ICAg ICA+ICsgICAgfQ0KPiA+ICAgICA+ICsgIH0gZWxzZSBpZiAoU3RhdHVzID09IEVGSV9BTFJFQURZ X1NUQVJURUQpIHsNCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICAvLyBNZWFuaW5n IG5vdGhpbmcgbmVlZHMgdG8gYmUgZG9uZS4gSnVzdCByZXR1cm4gc3VjY2Vzcy4NCj4gPiAgICAg PiArICAgIC8vDQo+ID4gICAgID4gKyAgICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gPiAgICAg PiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gICAg ID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICBUaGlzIGNvZGUgZmluZHMgdmFyaWFibGUgaW4gc3RvcmFnZSBibG9ja3MgKFZvbGF0aWxl IG9yIE5vbi1Wb2xhdGlsZSkuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIENhdXRpb246IFRo aXMgZnVuY3Rpb24gbWF5IHJlY2VpdmUgdW50cnVzdGVkIGlucHV0Lg0KPiA+ICAgICA+ICsgIFRo aXMgZnVuY3Rpb24gbWF5IGJlIGludm9rZWQgaW4gU01NIG1vZGUsIGFuZCBkYXRhc2l6ZSBpcyBl eHRlcm5hbA0KPiBpbnB1dC4NCj4gPiAgICAgPiArICBUaGlzIGZ1bmN0aW9uIHdpbGwgZG8gYmFz aWMgdmFsaWRhdGlvbiwgYmVmb3JlIHBhcnNlIHRoZSBkYXRhLg0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICBAcGFyYW0gVmFyaWFibGVOYW1lICAgICAgICAgICAgICAgTmFtZSBvZiBWYXJpYWJs ZSB0byBiZSBmb3VuZC4NCj4gPiAgICAgPiArICBAcGFyYW0gVmVuZG9yR3VpZCAgICAgICAgICAg ICAgICAgVmFyaWFibGUgdmVuZG9yIEdVSUQuDQo+ID4gICAgID4gKyAgQHBhcmFtIEF0dHJpYnV0 ZXMgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgZm91bmQu DQo+ID4gICAgID4gKyAgQHBhcmFtIERhdGFTaXplICAgICAgICAgICAgICAgICAgIFNpemUgb2Yg RGF0YSBmb3VuZC4gSWYgc2l6ZSBpcyBsZXNzIHRoYW4gdGhlDQo+ID4gICAgID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIHRoaXMgdmFsdWUgY29udGFpbnMgdGhl IHJlcXVpcmVkIHNpemUuDQo+ID4gICAgID4gKyAgQHBhcmFtIERhdGEgICAgICAgICAgICAgICAg ICAgICAgIFRoZSBidWZmZXIgdG8gcmV0dXJuIHRoZSBjb250ZW50cyBvZiB0aGUNCj4gPiB2YXJp YWJsZS4NCj4gPiAgICAgPiBNYXkgYmUgTlVMTA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB3aXRoIGEgemVybyBEYXRhU2l6ZSBpbiBvcmRlciB0byBkZXRl cm1pbmUgdGhlIHNpemUNCj4gPiBidWZmZXINCj4gPiAgICAgPiBuZWVkZWQuDQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsgIEByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgICBJbnZhbGlk IHBhcmFtZXRlci4NCj4gPiAgICAgPiArICBAcmV0dXJuIEVGSV9TVUNDRVNTICAgICAgICAgICAg ICAgRmluZCB0aGUgc3BlY2lmaWVkIHZhcmlhYmxlLg0KPiA+ICAgICA+ICsgIEByZXR1cm4gRUZJ X05PVF9GT1VORCAgICAgICAgICAgICBOb3QgZm91bmQuDQo+ID4gICAgID4gKyAgQHJldHVybiBF RklfQlVGRkVSX1RPX1NNQUxMICAgICAgIERhdGFTaXplIGlzIHRvbyBzbWFsbCBmb3IgdGhlIHJl c3VsdC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtFRklfU1RBVFVT DQo+ID4gICAgID4gK0VGSUFQSQ0KPiA+ICAgICA+ICtWYXJpYWJsZVNlcnZpY2VHZXRWYXJpYWJs ZSAoDQo+ID4gICAgID4gKyAgSU4gICAgICBDSEFSMTYgICAgKlZhcmlhYmxlTmFtZSwNCj4gPiAg ICAgPiArICBJTiAgICAgIEVGSV9HVUlEICAqVmVuZG9yR3VpZCwNCj4gPiAgICAgPiArICBPVVQg ICAgIFVJTlQzMiAgICAqQXR0cmlidXRlcyBPUFRJT05BTCwNCj4gPiAgICAgPiArICBJTiBPVVQg IFVJTlROICAgICAqRGF0YVNpemUsDQo+ID4gICAgID4gKyAgT1VUICAgICBWT0lEICAgICAgKkRh dGEgT1BUSU9OQUwNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBF RklfU1RBVFVTICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gICAgID4gKyAgVkFSSUFCTEVfUE9J TlRFUl9UUkFDSyAgVmFyaWFibGU7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIGlmICgoVmFy aWFibGVOYW1lID09IE5VTEwpIHx8IChWZW5kb3JHdWlkID09IE5VTEwpIHx8IChEYXRhU2l6ZSA9 PQ0KPiA+IE5VTEwpKSB7DQo+ID4gICAgID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1F VEVSOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgaWYgKFZhcmlh YmxlTmFtZVswXSA9PSAwKSB7DQo+ID4gICAgID4gKyAgICByZXR1cm4gRUZJX05PVF9GT1VORDsN Cj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEFjcXVpcmVMb2NrT25s eUF0Qm9vdFRpbWUgKCZtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4gICAgID4gPlZhcmlhYmxl R2xvYmFsLlZhcmlhYmxlU2VydmljZXNMb2NrKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg U3RhdHVzID0gRmluZFZhcmlhYmxlIChWYXJpYWJsZU5hbWUsIFZlbmRvckd1aWQsICZWYXJpYWJs ZSwNCj4gPiAgICAgPiAmbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbCwgRkFM U0UpOw0KPiA+ICAgICA+ICsgIGlmICgoVmFyaWFibGUuQ3VyclB0ciA9PSBOVUxMKSB8fCBFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiArICAgIGdvdG8gRG9uZTsNCj4gPiAgICAgPiAr ICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gR2V0IGRh dGEgYW5kIGl0cyBzaXplDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBpZiAoIVZhcmlh YmxlLlZvbGF0aWxlKSB7DQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgLy8gQ3Vy cmVudGx5IG9ubHkgbm9uLXZvbGF0aWxlIHZhcmlhYmxlIG5lZWRzIHByb3RlY3Rpb24uDQo+ID4g ICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgU3RhdHVzID0gUHJvdGVjdGVkVmFyaWFibGVM aWJHZXRCeUJ1ZmZlciAoDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgIFZhcmlhYmxlLkN1cnJQ dHIsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgIERhdGEsDQo+ID4gICAgID4gKyAgICAgICAg ICAgICAgIChVSU5UMzIgKilEYXRhU2l6ZSwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgbVZh cmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0DQo+ID4gICAgID4g KyAgICAgICAgICAgICAgICk7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICBpZiAoVmFyaWFibGUuVm9sYXRpbGUgfHwgKFN0YXR1cyA9PSBFRklfVU5TVVBQT1JURUQp KSB7DQo+ID4gICAgID4gKyAgICBTdGF0dXMgPSBHZXRWYXJpYWJsZURhdGEgKFZhcmlhYmxlLkN1 cnJQdHIsIERhdGEsIChVSU5UMzIgKilEYXRhU2l6ZSwNCj4gPiAgICAgPiBtVmFyaWFibGVNb2R1 bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLkF1dGhGb3JtYXQpOw0KPiA+ICAgICA+ICsgIH0NCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAg ICAgPiArICAgIFVwZGF0ZVZhcmlhYmxlSW5mbyAoVmFyaWFibGVOYW1lLCBWZW5kb3JHdWlkLCBW YXJpYWJsZS5Wb2xhdGlsZSwNCj4gVFJVRSwNCj4gPiAgICAgPiBGQUxTRSwgRkFMU0UsIEZBTFNF LCAmZ1ZhcmlhYmxlSW5mbyk7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArRG9uZToNCj4gPiAgICAgPiArICBpZiAoKFN0YXR1cyA9PSBFRklfU1VDQ0VTUykgfHwgKFN0 YXR1cyA9PSBFRklfQlVGRkVSX1RPT19TTUFMTCkpIHsNCj4gPiAgICAgPiArICAgIGlmICgoQXR0 cmlidXRlcyAhPSBOVUxMKSAmJiAoVmFyaWFibGUuQ3VyclB0ciAhPSBOVUxMKSkgew0KPiA+ICAg ICA+ICsgICAgICAqQXR0cmlidXRlcyA9IFZhcmlhYmxlLkN1cnJQdHItPkF0dHJpYnV0ZXM7DQo+ ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr ICBSZWxlYXNlTG9ja09ubHlBdEJvb3RUaW1lICgmbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ ICAgICA+ID5WYXJpYWJsZUdsb2JhbC5WYXJpYWJsZVNlcnZpY2VzTG9jayk7DQo+ID4gICAgID4g KyAgcmV0dXJuIFN0YXR1czsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr LyoqDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFRoaXMgY29kZSBGaW5kcyB0aGUgTmV4dCBh dmFpbGFibGUgdmFyaWFibGUuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIENhdXRpb246IFRo aXMgZnVuY3Rpb24gbWF5IHJlY2VpdmUgdW50cnVzdGVkIGlucHV0Lg0KPiA+ICAgICA+ICsgIFRo aXMgZnVuY3Rpb24gbWF5IGJlIGludm9rZWQgaW4gU01NIG1vZGUuIFRoaXMgZnVuY3Rpb24gd2ls bCBkbyBiYXNpYw0KPiA+ICAgICA+IHZhbGlkYXRpb24sIGJlZm9yZSBwYXJzZSB0aGUgZGF0YS4N Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtIFZhcmlhYmxlTmFtZVNpemUgICAgICAg ICAgIFRoZSBzaXplIG9mIHRoZSBWYXJpYWJsZU5hbWUgYnVmZmVyLg0KPiBUaGUNCj4gPiAgICAg PiBzaXplIG11c3QgYmUgbGFyZ2UNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZW5vdWdoIHRvIGZpdCBpbnB1dCBzdHJpbmcgc3VwcGxpZWQgaW4gVmFyaWFi bGVOYW1lDQo+ID4gYnVmZmVyLg0KPiA+ICAgICA+ICsgIEBwYXJhbSBWYXJpYWJsZU5hbWUgICAg ICAgICAgICAgICBQb2ludGVyIHRvIHZhcmlhYmxlIG5hbWUuDQo+ID4gICAgID4gKyAgQHBhcmFt IFZlbmRvckd1aWQgICAgICAgICAgICAgICAgIFZhcmlhYmxlIFZlbmRvciBHdWlkLg0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgVGhl IGZ1bmN0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuDQo+ID4gICAgID4gKyAgQHJldHZhbCBF RklfTk9UX0ZPVU5EICAgICAgICAgICAgIFRoZSBuZXh0IHZhcmlhYmxlIHdhcyBub3QgZm91bmQu DQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfQlVGRkVSX1RPT19TTUFMTCAgICAgIFRoZSBWYXJp YWJsZU5hbWVTaXplIGlzIHRvbyBzbWFsbA0KPiA+IGZvcg0KPiA+ICAgICA+IHRoZSByZXN1bHQu DQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxl TmFtZVNpemUgaGFzIGJlZW4gdXBkYXRlZCB3aXRoIHRoZSBzaXplDQo+ID4gbmVlZGVkDQo+ID4g ICAgID4gdG8gY29tcGxldGUgdGhlIHJlcXVlc3QuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklf SU5WQUxJRF9QQVJBTUVURVIgICAgIFZhcmlhYmxlTmFtZVNpemUgaXMgTlVMTC4NCj4gPiAgICAg PiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgICAgVmFyaWFibGVOYW1lIGlzIE5V TEwuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICAgIFZlbmRv ckd1aWQgaXMgTlVMTC4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiAgICAgVGhlIGlucHV0IHZhbHVlcyBvZiBWYXJpYWJsZU5hbWUNCj4gPiBhbmQNCj4gPiAgICAg PiBWZW5kb3JHdWlkIGFyZSBub3QgYSBuYW1lIGFuZA0KPiA+ICAgICA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBHVUlEIG9mIGFuIGV4aXN0aW5nIHZhcmlhYmxlLg0KPiA+ ICAgICA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgICBOdWxsLXRlcm1pbmF0 b3IgaXMgbm90IGZvdW5kIGluIHRoZQ0KPiA+IGZpcnN0DQo+ID4gICAgID4gVmFyaWFibGVOYW1l U2l6ZSBieXRlcyBvZg0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0aGUgaW5wdXQgVmFyaWFibGVOYW1lIGJ1ZmZlci4NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyoqLw0KPiA+ICAgICA+ICtFRklfU1RBVFVTDQo+ID4gICAgID4gK0VGSUFQSQ0KPiA+ICAg ICA+ICtWYXJpYWJsZVNlcnZpY2VHZXROZXh0VmFyaWFibGVOYW1lICgNCj4gPiAgICAgPiArICBJ TiBPVVQgIFVJTlROICAgICAqVmFyaWFibGVOYW1lU2l6ZSwNCj4gPiAgICAgPiArICBJTiBPVVQg IENIQVIxNiAgICAqVmFyaWFibGVOYW1lLA0KPiA+ICAgICA+ICsgIElOIE9VVCAgRUZJX0dVSUQg ICpWZW5kb3JHdWlkDQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAg RUZJX1NUQVRVUyAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gICAgID4gKyAgVUlOVE4gICAgICAg ICAgICAgICAgICBNYXhMZW47DQo+ID4gICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICBW YXJOYW1lU2l6ZTsNCj4gPiAgICAgPiArICBCT09MRUFOICAgICAgICAgICAgICAgIEF1dGhGb3Jt YXQ7DQo+ID4gICAgID4gKyAgVkFSSUFCTEVfSEVBREVSICAgICAgICAqVmFyaWFibGVQdHI7DQo+ ID4gICAgID4gKyAgVkFSSUFCTEVfU1RPUkVfSEVBREVSDQo+ID4gKlZhcmlhYmxlU3RvcmVIZWFk ZXJbVmFyaWFibGVTdG9yZVR5cGVNYXhdOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBpZiAo KFZhcmlhYmxlTmFtZVNpemUgPT0gTlVMTCkgfHwgKFZhcmlhYmxlTmFtZSA9PSBOVUxMKSB8fA0K PiA+IChWZW5kb3JHdWlkID09DQo+ID4gICAgID4gTlVMTCkpIHsNCj4gPiAgICAgPiArICAgIHJl dHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICBBdXRoRm9ybWF0ID0gbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJs ZUdsb2JhbC5BdXRoRm9ybWF0Ow0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAg ICA+ICsgIC8vIENhbGN1bGF0ZSB0aGUgcG9zc2libGUgbWF4aW11bSBsZW5ndGggb2YgbmFtZSBz dHJpbmcsIGluY2x1ZGluZyB0aGUNCj4gPiBOdWxsDQo+ID4gICAgID4gdGVybWluYXRvci4NCj4g PiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIE1heExlbiA9ICpWYXJpYWJsZU5hbWVTaXplIC8g c2l6ZW9mIChDSEFSMTYpOw0KPiA+ICAgICA+ICsgIGlmICgoTWF4TGVuID09IDApIHx8IChTdHJu TGVuUyAoVmFyaWFibGVOYW1lLCBNYXhMZW4pID09IE1heExlbikpIHsNCj4gPiAgICAgPiArICAg IC8vDQo+ID4gICAgID4gKyAgICAvLyBOdWxsLXRlcm1pbmF0b3IgaXMgbm90IGZvdW5kIGluIHRo ZSBmaXJzdCBWYXJpYWJsZU5hbWVTaXplIGJ5dGVzIG9mDQo+IHRoZQ0KPiA+ICAgICA+IGlucHV0 IFZhcmlhYmxlTmFtZSBidWZmZXIsDQo+ID4gICAgID4gKyAgICAvLyBmb2xsb3cgc3BlYyB0byBy ZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSLg0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAg PiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gICAgID4gKyAgfQ0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICBBY3F1aXJlTG9ja09ubHlBdEJvb3RUaW1lICgmbVZhcmlh YmxlTW9kdWxlR2xvYmFsLQ0KPiA+ICAgICA+ID5WYXJpYWJsZUdsb2JhbC5WYXJpYWJsZVNlcnZp Y2VzTG9jayk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8g MDogVm9sYXRpbGUsIDE6IEhPQiwgMjogTm9uLVZvbGF0aWxlLg0KPiA+ICAgICA+ICsgIC8vIFRo ZSBpbmRleCBhbmQgYXR0cmlidXRlcyBtYXBwaW5nIG11c3QgYmUga2VwdCBpbiB0aGlzIG9yZGVy IGFzDQo+ID4gRmluZFZhcmlhYmxlDQo+ID4gICAgID4gKyAgLy8gbWFrZXMgdXNlIG9mIHRoaXMg bWFwcGluZyB0byBpbXBsZW1lbnQgc2VhcmNoIGFsZ29yaXRobS4NCj4gPiAgICAgPiArICAvLw0K PiA+ICAgICA+ICsgIFZhcmlhYmxlU3RvcmVIZWFkZXJbVmFyaWFibGVTdG9yZVR5cGVWb2xhdGls ZV0gPQ0KPiA+ICAgICA+IChWQVJJQUJMRV9TVE9SRV9IRUFERVIgKikoVUlOVE4pbVZhcmlhYmxl TW9kdWxlR2xvYmFsLQ0KPiA+ICAgICA+ID5WYXJpYWJsZUdsb2JhbC5Wb2xhdGlsZVZhcmlhYmxl QmFzZTsNCj4gPiAgICAgPiArICBWYXJpYWJsZVN0b3JlSGVhZGVyW1ZhcmlhYmxlU3RvcmVUeXBl SG9iXSAgICAgID0NCj4gPiAoVkFSSUFCTEVfU1RPUkVfSEVBREVSDQo+ID4gICAgID4gKikoVUlO VE4pbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5Ib2JWYXJpYWJsZUJhc2U7 DQo+ID4gICAgID4gKyAgVmFyaWFibGVTdG9yZUhlYWRlcltWYXJpYWJsZVN0b3JlVHlwZU52XSAg ICAgICA9IG1OdlZhcmlhYmxlQ2FjaGU7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFN0YXR1 cyA9ICBWYXJpYWJsZVNlcnZpY2VHZXROZXh0VmFyaWFibGVJbnRlcm5hbCAoDQo+ID4gICAgID4g KyAgICAgICAgICAgICAgVmFyaWFibGVOYW1lLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgIFZl bmRvckd1aWQsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgVmFyaWFibGVTdG9yZUhlYWRlciwN Cj4gPiAgICAgPiArICAgICAgICAgICAgICAmVmFyaWFibGVQdHIsDQo+ID4gICAgID4gKyAgICAg ICAgICAgICAgQXV0aEZvcm1hdA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICk7DQo+ID4gICAg ID4gKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiArICAgIFZhck5hbWVT aXplID0gTmFtZVNpemVPZlZhcmlhYmxlIChWYXJpYWJsZVB0ciwgQXV0aEZvcm1hdCk7DQo+ID4g ICAgID4gKyAgICBBU1NFUlQgKFZhck5hbWVTaXplICE9IDApOw0KPiA+ICAgICA+ICsgICAgaWYg KFZhck5hbWVTaXplIDw9ICpWYXJpYWJsZU5hbWVTaXplKSB7DQo+ID4gICAgID4gKyAgICAgIENv cHlNZW0gKA0KPiA+ICAgICA+ICsgICAgICAgIFZhcmlhYmxlTmFtZSwNCj4gPiAgICAgPiArICAg ICAgICBHZXRWYXJpYWJsZU5hbWVQdHIgKFZhcmlhYmxlUHRyLCBBdXRoRm9ybWF0KSwNCj4gPiAg ICAgPiArICAgICAgICBWYXJOYW1lU2l6ZQ0KPiA+ICAgICA+ICsgICAgICAgICk7DQo+ID4gICAg ID4gKyAgICAgIENvcHlNZW0gKA0KPiA+ICAgICA+ICsgICAgICAgIFZlbmRvckd1aWQsDQo+ID4g ICAgID4gKyAgICAgICAgR2V0VmVuZG9yR3VpZFB0ciAoVmFyaWFibGVQdHIsIEF1dGhGb3JtYXQp LA0KPiA+ICAgICA+ICsgICAgICAgIHNpemVvZiAoRUZJX0dVSUQpDQo+ID4gICAgID4gKyAgICAg ICAgKTsNCj4gPiAgICAgPiArICAgICAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+ID4gICAgID4g KyAgICB9IGVsc2Ugew0KPiA+ICAgICA+ICsgICAgICBTdGF0dXMgPSBFRklfQlVGRkVSX1RPT19T TUFMTDsNCj4gPiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICAqVmFy aWFibGVOYW1lU2l6ZSA9IFZhck5hbWVTaXplOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyAgUmVsZWFzZUxvY2tPbmx5QXRCb290VGltZSAoJm1WYXJpYWJsZU1vZHVs ZUdsb2JhbC0NCj4gPiAgICAgPiA+VmFyaWFibGVHbG9iYWwuVmFyaWFibGVTZXJ2aWNlc0xvY2sp Ow0KPiA+ICAgICA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBUaGlzIGNvZGUgc2V0 cyB2YXJpYWJsZSBpbiBzdG9yYWdlIGJsb2NrcyAoVm9sYXRpbGUgb3IgTm9uLVZvbGF0aWxlKS4N Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQ2F1dGlvbjogVGhpcyBmdW5jdGlvbiBtYXkgcmVj ZWl2ZSB1bnRydXN0ZWQgaW5wdXQuDQo+ID4gICAgID4gKyAgVGhpcyBmdW5jdGlvbiBtYXkgYmUg aW52b2tlZCBpbiBTTU0gbW9kZSwgYW5kIGRhdGFzaXplIGFuZCBkYXRhIGFyZQ0KPiA+ICAgICA+ IGV4dGVybmFsIGlucHV0Lg0KPiA+ICAgICA+ICsgIFRoaXMgZnVuY3Rpb24gd2lsbCBkbyBiYXNp YyB2YWxpZGF0aW9uLCBiZWZvcmUgcGFyc2UgdGhlIGRhdGEuDQo+ID4gICAgID4gKyAgVGhpcyBm dW5jdGlvbiB3aWxsIHBhcnNlIHRoZSBhdXRoZW50aWNhdGlvbiBjYXJlZnVsbHkgdG8gYXZvaWQg c2VjdXJpdHkNCj4gPiBpc3N1ZXMsDQo+ID4gICAgID4gbGlrZQ0KPiA+ICAgICA+ICsgIGJ1ZmZl ciBvdmVyZmxvdywgaW50ZWdlciBvdmVyZmxvdy4NCj4gPiAgICAgPiArICBUaGlzIGZ1bmN0aW9u IHdpbGwgY2hlY2sgYXR0cmlidXRlIGNhcmVmdWxseSB0byBhdm9pZCBhdXRoZW50aWNhdGlvbg0K PiBieXBhc3MuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbSBWYXJpYWJsZU5hbWUg ICAgICAgICAgICAgICAgICAgICBOYW1lIG9mIFZhcmlhYmxlIHRvIGJlIGZvdW5kLg0KPiA+ICAg ICA+ICsgIEBwYXJhbSBWZW5kb3JHdWlkICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSB2 ZW5kb3IgR1VJRC4NCj4gPiAgICAgPiArICBAcGFyYW0gQXR0cmlidXRlcyAgICAgICAgICAgICAg ICAgICAgICAgQXR0cmlidXRlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBmb3VuZA0KPiA+ICAgICA+ ICsgIEBwYXJhbSBEYXRhU2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICBTaXplIG9mIERhdGEg Zm91bmQuIElmIHNpemUgaXMgbGVzcyB0aGFuIHRoZQ0KPiA+ICAgICA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLCB0aGlzIHZhbHVlIGNvbnRhaW5zIHRo ZSByZXF1aXJlZCBzaXplLg0KPiA+ICAgICA+ICsgIEBwYXJhbSBEYXRhICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBEYXRhIHBvaW50ZXIuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBy ZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgICAgICAgICBJbnZhbGlkIHBhcmFtZXRlci4N Cj4gPiAgICAgPiArICBAcmV0dXJuIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgU2V0 IHN1Y2Nlc3NmdWxseS4NCj4gPiAgICAgPiArICBAcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VT ICAgICAgICAgICAgUmVzb3VyY2Ugbm90IGVub3VnaCB0byBzZXQNCj4gPiB2YXJpYWJsZS4NCj4g PiAgICAgPiArICBAcmV0dXJuIEVGSV9OT1RfRk9VTkQgICAgICAgICAgICAgICAgICAgTm90IGZv dW5kLg0KPiA+ICAgICA+ICsgIEByZXR1cm4gRUZJX1dSSVRFX1BST1RFQ1RFRCAgICAgICAgICAg ICBWYXJpYWJsZSBpcyByZWFkLW9ubHkuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4g PiAgICAgPiArRUZJX1NUQVRVUw0KPiA+ICAgICA+ICtFRklBUEkNCj4gPiAgICAgPiArVmFyaWFi bGVTZXJ2aWNlU2V0VmFyaWFibGUgKA0KPiA+ICAgICA+ICsgIElOIENIQVIxNiAgICAqVmFyaWFi bGVOYW1lLA0KPiA+ICAgICA+ICsgIElOIEVGSV9HVUlEICAqVmVuZG9yR3VpZCwNCj4gPiAgICAg PiArICBJTiBVSU5UMzIgICAgQXR0cmlidXRlcywNCj4gPiAgICAgPiArICBJTiBVSU5UTiAgICAg RGF0YVNpemUsDQo+ID4gICAgID4gKyAgSU4gVk9JRCAgICAgICpEYXRhDQo+ID4gICAgID4gKyAg KQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgVkFSSUFCTEVfUE9JTlRFUl9UUkFDSyAgVmFy aWFibGU7DQo+ID4gICAgID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ ICAgICA+ICsgIFZBUklBQkxFX0hFQURFUiAgICAgICAgICpOZXh0VmFyaWFibGU7DQo+ID4gICAg ID4gKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgUG9pbnQ7DQo+ID4gICAgID4gKyAgVUlOVE4g ICAgICAgICAgICAgICAgICAgUGF5bG9hZFNpemU7DQo+ID4gICAgID4gKyAgQk9PTEVBTiAgICAg ICAgICAgICAgICAgQXV0aEZvcm1hdDsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQXV0aEZv cm1hdCA9IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdDsN Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBDaGVjayBpbnB1 dCBwYXJhbWV0ZXJzLg0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgaWYgKChWYXJpYWJs ZU5hbWUgPT0gTlVMTCkgfHwgKFZhcmlhYmxlTmFtZVswXSA9PSAwKSB8fCAoVmVuZG9yR3VpZA0K PiA9PQ0KPiA+ICAgICA+IE5VTEwpKSB7DQo+ID4gICAgID4gKyAgICByZXR1cm4gRUZJX0lOVkFM SURfUEFSQU1FVEVSOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg aWYgKChEYXRhU2l6ZSAhPSAwKSAmJiAoRGF0YSA9PSBOVUxMKSkgew0KPiA+ICAgICA+ICsgICAg cmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gQ2hlY2sgZm9yIHJlc2VydmVyZCBi aXQgaW4gdmFyaWFibGUgYXR0cmlidXRlLg0KPiA+ICAgICA+ICsgIC8vIEVGSV9WQVJJQUJMRV9B VVRIRU5USUNBVEVEX1dSSVRFX0FDQ0VTUyBpcyBkZXByZWNhdGVkIGJ1dA0KPiB3ZQ0KPiA+IHN0 aWxsDQo+ID4gICAgID4gYWxsb3cNCj4gPiAgICAgPiArICAvLyB0aGUgZGVsZXRlIG9wZXJhdGlv biBvZiBjb21tb24gYXV0aGVudGljYXRlZCB2YXJpYWJsZSBhdCB1c2VyDQo+IHBoeXNpY2FsDQo+ ID4gICAgID4gcHJlc2VuY2UuDQo+ID4gICAgID4gKyAgLy8gU28gbGVhdmUgRUZJX1ZBUklBQkxF X0FVVEhFTlRJQ0FURURfV1JJVEVfQUNDRVNTIGF0dHJpYnV0ZQ0KPiA+IGNoZWNrDQo+ID4gICAg ID4gdG8gQXV0aFZhcmlhYmxlTGliDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBpZiAo KEF0dHJpYnV0ZXMgJiAofihFRklfVkFSSUFCTEVfQVRUUklCVVRFU19NQVNLIHwNCj4gPiAgICAg PiBFRklfVkFSSUFCTEVfQVVUSEVOVElDQVRFRF9XUklURV9BQ0NFU1MpKSkgIT0gMCkgew0KPiA+ ICAgICA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiAgICAgPiArICB9 DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gQ2hlY2sgaWYg dGhlIGNvbWJpbmF0aW9uIG9mIGF0dHJpYnV0ZSBiaXRzIGlzIHZhbGlkLg0KPiA+ICAgICA+ICsg IC8vDQo+ID4gICAgID4gKyAgaWYgKChBdHRyaWJ1dGVzICYgKEVGSV9WQVJJQUJMRV9SVU5USU1F X0FDQ0VTUyB8DQo+ID4gICAgID4gRUZJX1ZBUklBQkxFX0JPT1RTRVJWSUNFX0FDQ0VTUykpID09 DQo+ID4gRUZJX1ZBUklBQkxFX1JVTlRJTUVfQUNDRVNTKSB7DQo+ID4gICAgID4gKyAgICAvLw0K PiA+ICAgICA+ICsgICAgLy8gTWFrZSBzdXJlIGlmIHJ1bnRpbWUgYml0IGlzIHNldCwgYm9vdCBz ZXJ2aWNlIGJpdCBpcyBzZXQgYWxzby4NCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAg ICBpZiAoKEF0dHJpYnV0ZXMgJiBFRklfVkFSSUFCTEVfQVVUSEVOVElDQVRFRF9XUklURV9BQ0NF U1MpICE9IDApDQo+IHsNCj4gPiAgICAgPiArICAgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsN Cj4gPiAgICAgPiArICAgIH0gZWxzZSB7DQo+ID4gICAgID4gKyAgICAgIHJldHVybiBFRklfSU5W QUxJRF9QQVJBTUVURVI7DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKyAgfSBlbHNlIGlm ICgoQXR0cmlidXRlcyAmIEVGSV9WQVJJQUJMRV9BVFRSSUJVVEVTX01BU0spID09DQo+ID4gICAg ID4gRUZJX1ZBUklBQkxFX05PTl9WT0xBVElMRSkgew0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAg ICAgPiArICAgIC8vIE9ubHkgRUZJX1ZBUklBQkxFX05PTl9WT0xBVElMRSBhdHRyaWJ1dGUgaXMg aW52YWxpZA0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIHJldHVybiBFRklfSU5W QUxJRF9QQVJBTUVURVI7DQo+ID4gICAgID4gKyAgfSBlbHNlIGlmICgoQXR0cmlidXRlcyAmIFZB UklBQkxFX0FUVFJJQlVURV9BVF9BVykgIT0gMCkgew0KPiA+ICAgICA+ICsgICAgaWYgKCFtVmFy aWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLkF1dGhTdXBwb3J0KSB7DQo+ID4gICAg ID4gKyAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgIC8vIE5vdCBzdXBwb3J0IGF1dGhlbnRpY2F0 ZWQgdmFyaWFibGUgd3JpdGUuDQo+ID4gICAgID4gKyAgICAgIC8vDQo+ID4gICAgID4gKyAgICAg IHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAg ID4gKyAgfSBlbHNlIGlmICgoQXR0cmlidXRlcyAmIEVGSV9WQVJJQUJMRV9IQVJEV0FSRV9FUlJP Ul9SRUNPUkQpICE9IDApDQo+IHsNCj4gPiAgICAgPiArICAgIGlmIChQY2RHZXQzMiAoUGNkSHdF cnJTdG9yYWdlU2l6ZSkgPT0gMCkgew0KPiA+ICAgICA+ICsgICAgICAvLw0KPiA+ICAgICA+ICsg ICAgICAvLyBOb3Qgc3VwcG9ydCBoYXJ3YXJlIGVycm9yIHJlY29yZCB2YXJpYWJsZSB2YXJpYWJs ZS4NCj4gPiAgICAgPiArICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgcmV0dXJuIEVGSV9JTlZB TElEX1BBUkFNRVRFUjsNCj4gPiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArICB9DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gRUZJX1ZBUklBQkxFX0FVVEhF TlRJQ0FURURfV1JJVEVfQUNDRVNTIGFuZA0KPiA+ICAgICA+IEVGSV9WQVJJQUJMRV9USU1FX0JB U0VEX0FVVEhFTlRJQ0FURURfV1JJVEVfQUNDRVNTIGF0dHJpYnV0ZQ0KPiA+ICAgICA+ICsgIC8v IGNhbm5vdCBiZSBzZXQgYm90aC4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIGlmICgg ICgoQXR0cmlidXRlcyAmIEVGSV9WQVJJQUJMRV9BVVRIRU5USUNBVEVEX1dSSVRFX0FDQ0VTUykg PT0NCj4gPiAgICAgPiBFRklfVkFSSUFCTEVfQVVUSEVOVElDQVRFRF9XUklURV9BQ0NFU1MpDQo+ ID4gICAgID4gKyAgICAgJiYgKChBdHRyaWJ1dGVzICYNCj4gPiAgICAgPiBFRklfVkFSSUFCTEVf VElNRV9CQVNFRF9BVVRIRU5USUNBVEVEX1dSSVRFX0FDQ0VTUykgPT0NCj4gPiAgICAgPiBFRklf VkFSSUFCTEVfVElNRV9CQVNFRF9BVVRIRU5USUNBVEVEX1dSSVRFX0FDQ0VTUykpDQo+ID4gICAg ID4gKyAgew0KPiA+ICAgICA+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gPiAgICAg PiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIGlmICgoQXR0cmlidXRlcyAmIEVGSV9W QVJJQUJMRV9BVVRIRU5USUNBVEVEX1dSSVRFX0FDQ0VTUykgPT0NCj4gPiAgICAgPiBFRklfVkFS SUFCTEVfQVVUSEVOVElDQVRFRF9XUklURV9BQ0NFU1MpIHsNCj4gPiAgICAgPiArICAgIC8vDQo+ ID4gICAgID4gKyAgICAvLyAgSWYgRGF0YVNpemUgPT0gQVVUSElORk9fU0laRSBhbmQgdGhlbiBQ YXlsb2FkU2l6ZSBpcyAwLg0KPiA+ICAgICA+ICsgICAgLy8gIE1heWJlIGl0J3MgdGhlIGRlbGV0 ZSBvcGVyYXRpb24gb2YgY29tbW9uIGF1dGhlbnRpY2F0ZWQgdmFyaWFibGUNCj4gYXQNCj4gPiB1 c2VyDQo+ID4gICAgID4gcGh5c2ljYWwgcHJlc2VuY2UuDQo+ID4gICAgID4gKyAgICAvLw0KPiA+ ICAgICA+ICsgICAgaWYgKERhdGFTaXplICE9IEFVVEhJTkZPX1NJWkUpIHsNCj4gPiAgICAgPiAr ICAgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gPiAgICAgPiArICAgIH0NCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyAgICBQYXlsb2FkU2l6ZSA9IERhdGFTaXplIC0gQVVUSElORk9fU0la RTsNCj4gPiAgICAgPiArICB9IGVsc2UgaWYgKChBdHRyaWJ1dGVzICYNCj4gPiAgICAgPiBFRklf VkFSSUFCTEVfVElNRV9CQVNFRF9BVVRIRU5USUNBVEVEX1dSSVRFX0FDQ0VTUykgPT0NCj4gPiAg ICAgPiBFRklfVkFSSUFCTEVfVElNRV9CQVNFRF9BVVRIRU5USUNBVEVEX1dSSVRFX0FDQ0VTUykg ew0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIC8vIFNhbml0eSBjaGVjayBmb3Ig RUZJX1ZBUklBQkxFX0FVVEhFTlRJQ0FUSU9OXzIgZGVzY3JpcHRvci4NCj4gPiAgICAgPiArICAg IC8vDQo+ID4gICAgID4gKyAgICBpZiAoKERhdGFTaXplIDwgT0ZGU0VUX09GX0FVVEhJTkZPMl9D RVJUX0RBVEEpIHx8DQo+ID4gICAgID4gKyAgICAgICAgKCgoRUZJX1ZBUklBQkxFX0FVVEhFTlRJ Q0FUSU9OXzIgKilEYXRhKS0NCj4gPiA+QXV0aEluZm8uSGRyLmR3TGVuZ3RoID4NCj4gPiAgICAg PiBEYXRhU2l6ZSAtIChPRkZTRVRfT0YgKEVGSV9WQVJJQUJMRV9BVVRIRU5USUNBVElPTl8yLCBB dXRoSW5mbykpKQ0KPiB8fA0KPiA+ICAgICA+ICsgICAgICAgICgoKEVGSV9WQVJJQUJMRV9BVVRI RU5USUNBVElPTl8yICopRGF0YSktDQo+ID4gPkF1dGhJbmZvLkhkci5kd0xlbmd0aCA8DQo+ID4g ICAgID4gT0ZGU0VUX09GIChXSU5fQ0VSVElGSUNBVEVfVUVGSV9HVUlELCBDZXJ0RGF0YSkpKQ0K PiA+ICAgICA+ICsgICAgew0KPiA+ICAgICA+ICsgICAgICByZXR1cm4gRUZJX1NFQ1VSSVRZX1ZJ T0xBVElPTjsNCj4gPiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICAv Lw0KPiA+ICAgICA+ICsgICAgLy8gVGhlIFZhcmlhYmxlU3BlY3VsYXRpb25CYXJyaWVyKCkgY2Fs bCBoZXJlIGlzIHRvIGVuc3VyZSB0aGUgYWJvdmUNCj4gc2FuaXR5DQo+ID4gICAgID4gKyAgICAv LyBjaGVjayBmb3IgdGhlIEVGSV9WQVJJQUJMRV9BVVRIRU5USUNBVElPTl8yIGRlc2NyaXB0b3Ig aGFzDQo+IGJlZW4NCj4gPiAgICAgPiBjb21wbGV0ZWQNCj4gPiAgICAgPiArICAgIC8vIGJlZm9y ZSB0aGUgZXhlY3V0aW9uIG9mIHN1YnNlcXVlbnQgY29kZXMuDQo+ID4gICAgID4gKyAgICAvLw0K PiA+ICAgICA+ICsgICAgVmFyaWFibGVTcGVjdWxhdGlvbkJhcnJpZXIgKCk7DQo+ID4gICAgID4g KyAgICBQYXlsb2FkU2l6ZSA9IERhdGFTaXplIC0gQVVUSElORk8yX1NJWkUgKERhdGEpOw0KPiA+ ICAgICA+ICsgIH0gZWxzZSB7DQo+ID4gICAgID4gKyAgICBQYXlsb2FkU2l6ZSA9IERhdGFTaXpl Ow0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgaWYgKChVSU5UTiko fjApIC0gUGF5bG9hZFNpemUgPCBTdHJTaXplIChWYXJpYWJsZU5hbWUpKSB7DQo+ID4gICAgID4g KyAgICAvLw0KPiA+ICAgICA+ICsgICAgLy8gUHJldmVudCB3aG9sZSB2YXJpYWJsZSBzaXplIG92 ZXJmbG93DQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgcmV0dXJuIEVGSV9JTlZB TElEX1BBUkFNRVRFUjsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsg IC8vDQo+ID4gICAgID4gKyAgLy8gIFRoZSBzaXplIG9mIHRoZSBWYXJpYWJsZU5hbWUsIGluY2x1 ZGluZyB0aGUgVW5pY29kZSBOdWxsIGluIGJ5dGVzIHBsdXMNCj4gPiAgICAgPiArICAvLyAgdGhl IERhdGFTaXplIGlzIGxpbWl0ZWQgdG8gbWF4aW11bSBzaXplIG9mIFBjZEdldDMyDQo+ID4gICAg ID4gKFBjZE1heEhhcmR3YXJlRXJyb3JWYXJpYWJsZVNpemUpDQo+ID4gICAgID4gKyAgLy8gIGJ5 dGVzIGZvciBId0VyclJlYyMjIyMgdmFyaWFibGUuDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAg PiArICBpZiAoKEF0dHJpYnV0ZXMgJiBFRklfVkFSSUFCTEVfSEFSRFdBUkVfRVJST1JfUkVDT1JE KSA9PQ0KPiA+ICAgICA+IEVGSV9WQVJJQUJMRV9IQVJEV0FSRV9FUlJPUl9SRUNPUkQpIHsNCj4g PiAgICAgPiArICAgIGlmIChTdHJTaXplIChWYXJpYWJsZU5hbWUpICsgUGF5bG9hZFNpemUgPg0K PiA+ICAgICA+ICsgICAgICAgIFBjZEdldDMyIChQY2RNYXhIYXJkd2FyZUVycm9yVmFyaWFibGVT aXplKSAtDQo+ID4gR2V0VmFyaWFibGVIZWFkZXJTaXplDQo+ID4gICAgID4gKEF1dGhGb3JtYXQp KQ0KPiA+ICAgICA+ICsgICAgew0KPiA+ICAgICA+ICsgICAgICByZXR1cm4gRUZJX0lOVkFMSURf UEFSQU1FVEVSOw0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ICsgIH0gZWxzZSB7DQo+ID4g ICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgLy8gIFRoZSBzaXplIG9mIHRoZSBWYXJpYWJs ZU5hbWUsIGluY2x1ZGluZyB0aGUgVW5pY29kZSBOdWxsIGluIGJ5dGVzDQo+IHBsdXMNCj4gPiAg ICAgPiArICAgIC8vICB0aGUgRGF0YVNpemUgaXMgbGltaXRlZCB0byBtYXhpbXVtIHNpemUgb2YN Cj4gPiBNYXgoQXV0aHxWb2xhdGlsZSlWYXJpYWJsZVNpemUNCj4gPiAgICAgPiBieXRlcy4NCj4g PiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICBpZiAoKEF0dHJpYnV0ZXMgJiBWQVJJQUJM RV9BVFRSSUJVVEVfQVRfQVcpICE9IDApIHsNCj4gPiAgICAgPiArICAgICAgaWYgKFN0clNpemUg KFZhcmlhYmxlTmFtZSkgKyBQYXlsb2FkU2l6ZSA+DQo+ID4gICAgID4gKyAgICAgICAgICBtVmFy aWFibGVNb2R1bGVHbG9iYWwtPk1heEF1dGhWYXJpYWJsZVNpemUgLQ0KPiA+ICAgICA+ICsgICAg ICAgICAgR2V0VmFyaWFibGVIZWFkZXJTaXplIChBdXRoRm9ybWF0KSkNCj4gPiAgICAgPiArICAg ICAgew0KPiA+ICAgICA+ICsgICAgICAgIERFQlVHICgoDQo+ID4gICAgID4gKyAgICAgICAgICBE RUJVR19FUlJPUiwNCj4gPiAgICAgPiArICAgICAgICAgICIlYTogRmFpbGVkIHRvIHNldCB2YXJp YWJsZSAnJXMnIHdpdGggR3VpZCAlZ1xuIiwNCj4gPiAgICAgPiArICAgICAgICAgIF9fRlVOQ1RJ T05fXywNCj4gPiAgICAgPiArICAgICAgICAgIFZhcmlhYmxlTmFtZSwNCj4gPiAgICAgPiArICAg ICAgICAgIFZlbmRvckd1aWQNCj4gPiAgICAgPiArICAgICAgICAgICkpOw0KPiA+ICAgICA+ICsg ICAgICAgIERFQlVHICgoDQo+ID4gICAgID4gKyAgICAgICAgICBERUJVR19FUlJPUiwNCj4gPiAg ICAgPiArICAgICAgICAgICJOYW1lU2l6ZSgweCV4KSArIFBheWxvYWRTaXplKDB4JXgpID4gIg0K PiA+ICAgICA+ICsgICAgICAgICAgIk1heEF1dGhWYXJpYWJsZVNpemUoMHgleCkgLSBIZWFkZXJT aXplKDB4JXgpXG4iLA0KPiA+ICAgICA+ICsgICAgICAgICAgU3RyU2l6ZSAoVmFyaWFibGVOYW1l KSwNCj4gPiAgICAgPiArICAgICAgICAgIFBheWxvYWRTaXplLA0KPiA+ICAgICA+ICsgICAgICAg ICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5NYXhBdXRoVmFyaWFibGVTaXplLA0KPiA+ICAgICA+ ICsgICAgICAgICAgR2V0VmFyaWFibGVIZWFkZXJTaXplIChBdXRoRm9ybWF0KQ0KPiA+ICAgICA+ ICsgICAgICAgICAgKSk7DQo+ID4gICAgID4gKyAgICAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BB UkFNRVRFUjsNCj4gPiAgICAgPiArICAgICAgfQ0KPiA+ICAgICA+ICsgICAgfSBlbHNlIGlmICgo QXR0cmlidXRlcyAmIEVGSV9WQVJJQUJMRV9OT05fVk9MQVRJTEUpICE9IDApIHsNCj4gPiAgICAg PiArICAgICAgaWYgKFN0clNpemUgKFZhcmlhYmxlTmFtZSkgKyBQYXlsb2FkU2l6ZSA+DQo+ID4g ICAgID4gKyAgICAgICAgICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPk1heFZhcmlhYmxlU2l6ZSAt IEdldFZhcmlhYmxlSGVhZGVyU2l6ZQ0KPiA+ICAgICA+IChBdXRoRm9ybWF0KSkNCj4gPiAgICAg PiArICAgICAgew0KPiA+ICAgICA+ICsgICAgICAgIERFQlVHICgoDQo+ID4gICAgID4gKyAgICAg ICAgICBERUJVR19FUlJPUiwNCj4gPiAgICAgPiArICAgICAgICAgICIlYTogRmFpbGVkIHRvIHNl dCB2YXJpYWJsZSAnJXMnIHdpdGggR3VpZCAlZ1xuIiwNCj4gPiAgICAgPiArICAgICAgICAgIF9f RlVOQ1RJT05fXywNCj4gPiAgICAgPiArICAgICAgICAgIFZhcmlhYmxlTmFtZSwNCj4gPiAgICAg PiArICAgICAgICAgIFZlbmRvckd1aWQNCj4gPiAgICAgPiArICAgICAgICAgICkpOw0KPiA+ICAg ICA+ICsgICAgICAgIERFQlVHICgoDQo+ID4gICAgID4gKyAgICAgICAgICBERUJVR19FUlJPUiwN Cj4gPiAgICAgPiArICAgICAgICAgICJOYW1lU2l6ZSgweCV4KSArIFBheWxvYWRTaXplKDB4JXgp ID4gIg0KPiA+ICAgICA+ICsgICAgICAgICAgIk1heFZhcmlhYmxlU2l6ZSgweCV4KSAtIEhlYWRl clNpemUoMHgleClcbiIsDQo+ID4gICAgID4gKyAgICAgICAgICBTdHJTaXplIChWYXJpYWJsZU5h bWUpLA0KPiA+ICAgICA+ICsgICAgICAgICAgUGF5bG9hZFNpemUsDQo+ID4gICAgID4gKyAgICAg ICAgICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPk1heFZhcmlhYmxlU2l6ZSwNCj4gPiAgICAgPiAr ICAgICAgICAgIEdldFZhcmlhYmxlSGVhZGVyU2l6ZSAoQXV0aEZvcm1hdCkNCj4gPiAgICAgPiAr ICAgICAgICAgICkpOw0KPiA+ICAgICA+ICsgICAgICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJB TUVURVI7DQo+ID4gICAgID4gKyAgICAgIH0NCj4gPiAgICAgPiArICAgIH0gZWxzZSB7DQo+ID4g ICAgID4gKyAgICAgIGlmIChTdHJTaXplIChWYXJpYWJsZU5hbWUpICsgUGF5bG9hZFNpemUgPg0K PiA+ICAgICA+ICsgICAgICAgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5NYXhWb2xhdGlsZVZh cmlhYmxlU2l6ZSAtDQo+ID4gICAgID4gR2V0VmFyaWFibGVIZWFkZXJTaXplIChBdXRoRm9ybWF0 KSkNCj4gPiAgICAgPiArICAgICAgew0KPiA+ICAgICA+ICsgICAgICAgIERFQlVHICgoDQo+ID4g ICAgID4gKyAgICAgICAgICBERUJVR19FUlJPUiwNCj4gPiAgICAgPiArICAgICAgICAgICIlYTog RmFpbGVkIHRvIHNldCB2YXJpYWJsZSAnJXMnIHdpdGggR3VpZCAlZ1xuIiwNCj4gPiAgICAgPiAr ICAgICAgICAgIF9fRlVOQ1RJT05fXywNCj4gPiAgICAgPiArICAgICAgICAgIFZhcmlhYmxlTmFt ZSwNCj4gPiAgICAgPiArICAgICAgICAgIFZlbmRvckd1aWQNCj4gPiAgICAgPiArICAgICAgICAg ICkpOw0KPiA+ICAgICA+ICsgICAgICAgIERFQlVHICgoDQo+ID4gICAgID4gKyAgICAgICAgICBE RUJVR19FUlJPUiwNCj4gPiAgICAgPiArICAgICAgICAgICJOYW1lU2l6ZSgweCV4KSArIFBheWxv YWRTaXplKDB4JXgpID4gIg0KPiA+ICAgICA+ICsgICAgICAgICAgIk1heFZvbGF0aWxlVmFyaWFi bGVTaXplKDB4JXgpIC0gSGVhZGVyU2l6ZSgweCV4KVxuIiwNCj4gPiAgICAgPiArICAgICAgICAg IFN0clNpemUgKFZhcmlhYmxlTmFtZSksDQo+ID4gICAgID4gKyAgICAgICAgICBQYXlsb2FkU2l6 ZSwNCj4gPiAgICAgPiArICAgICAgICAgIG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+TWF4Vm9sYXRp bGVWYXJpYWJsZVNpemUsDQo+ID4gICAgID4gKyAgICAgICAgICBHZXRWYXJpYWJsZUhlYWRlclNp emUgKEF1dGhGb3JtYXQpDQo+ID4gICAgID4gKyAgICAgICAgICApKTsNCj4gPiAgICAgPiArICAg ICAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICAgICA+ICsgICAgICB9DQo+ ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr ICAvLw0KPiA+ICAgICA+ICsgIC8vIFNwZWNpYWwgSGFuZGxpbmcgZm9yIE1PUiBMb2NrIHZhcmlh YmxlLg0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgU3RhdHVzID0gU2V0VmFyaWFibGVD aGVja0hhbmRsZXJNb3IgKFZhcmlhYmxlTmFtZSwgVmVuZG9yR3VpZCwNCj4gPiBBdHRyaWJ1dGVz LA0KPiA+ICAgICA+IFBheWxvYWRTaXplLCAoVk9JRCAqKSgoVUlOVE4pRGF0YSArIERhdGFTaXpl IC0gUGF5bG9hZFNpemUpKTsNCj4gPiAgICAgPiArICBpZiAoU3RhdHVzID09IEVGSV9BTFJFQURZ X1NUQVJURUQpIHsNCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICAvLyBFRklfQUxS RUFEWV9TVEFSVEVEIG1lYW5zIHRoZSBTZXRWYXJpYWJsZSgpIGFjdGlvbiBpcyBoYW5kbGVkDQo+ ID4gaW5zaWRlIG9mDQo+ID4gICAgID4gU2V0VmFyaWFibGVDaGVja0hhbmRsZXJNb3IoKS4NCj4g PiAgICAgPiArICAgIC8vIFZhcmlhYmxlIGRyaXZlciBjYW4ganVzdCByZXR1cm4gU1VDQ0VTUy4N Cj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ID4gICAgID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICAgICA+ICsgIH0N Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgU3RhdHVzID0gVmFyQ2hlY2tMaWJTZXRWYXJpYWJs ZUNoZWNrIChWYXJpYWJsZU5hbWUsIFZlbmRvckd1aWQsDQo+ID4gQXR0cmlidXRlcywNCj4gPiAg ICAgPiBQYXlsb2FkU2l6ZSwgKFZPSUQgKikoKFVJTlROKURhdGEgKyBEYXRhU2l6ZSAtIFBheWxv YWRTaXplKSwNCj4gPiBtUmVxdWVzdFNvdXJjZSk7DQo+ID4gICAgID4gKyAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiA+ICAgICA+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gPiAgICAgPiAr ICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEFjcXVpcmVMb2NrT25seUF0Qm9vdFRpbWUg KCZtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4gICAgID4gPlZhcmlhYmxlR2xvYmFsLlZhcmlh YmxlU2VydmljZXNMb2NrKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAg PiArICAvLyBDb25zaWRlciByZWVudHJhbnQgaW4gTUNBL0lOSVQvTk1JLiBJdCBuZWVkcyBiZSBy ZXVwZGF0ZWQuDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBpZiAoMSA8IEludGVybG9j a2VkSW5jcmVtZW50ICgmbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ICAgICA+ID5WYXJpYWJs ZUdsb2JhbC5SZWVudHJhbnRTdGF0ZSkpIHsNCj4gPiAgICAgPiArICAgIFBvaW50ID0gbVZhcmlh YmxlTW9kdWxlR2xvYmFsLQ0KPiA+ID5WYXJpYWJsZUdsb2JhbC5Ob25Wb2xhdGlsZVZhcmlhYmxl QmFzZTsNCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICAvLyBQYXJzZSBub24tdm9s YXRpbGUgdmFyaWFibGUgZGF0YSBhbmQgZ2V0IGxhc3QgdmFyaWFibGUgb2Zmc2V0Lg0KPiA+ICAg ICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIE5leHRWYXJpYWJsZSA9IEdldFN0YXJ0UG9pbnRl ciAoKFZBUklBQkxFX1NUT1JFX0hFQURFUg0KPiA+ICopKFVJTlROKVBvaW50KTsNCj4gPiAgICAg PiArICAgIHdoaWxlIChJc1ZhbGlkVmFyaWFibGVIZWFkZXIgKE5leHRWYXJpYWJsZSwgR2V0RW5k UG9pbnRlcg0KPiA+ICAgICA+ICgoVkFSSUFCTEVfU1RPUkVfSEVBREVSICopKFVJTlROKVBvaW50 KSwgQXV0aEZvcm1hdCkpIHsNCj4gPiAgICAgPiArICAgICAgTmV4dFZhcmlhYmxlID0gR2V0TmV4 dFZhcmlhYmxlUHRyIChOZXh0VmFyaWFibGUsIEF1dGhGb3JtYXQpOw0KPiA+ICAgICA+ICsgICAg fQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgIG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+Tm9u Vm9sYXRpbGVMYXN0VmFyaWFibGVPZmZzZXQgPQ0KPiA+ICAgICA+IChVSU5UTilOZXh0VmFyaWFi bGUgLSAoVUlOVE4pUG9pbnQ7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICAvLw0KPiA+ICAgICA+ICsgIC8vIENoZWNrIHdoZXRoZXIgdGhlIGlucHV0IHZhcmlhYmxl IGlzIGFscmVhZHkgZXhpc3RlZC4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIFN0YXR1 cyA9IEZpbmRWYXJpYWJsZSAoVmFyaWFibGVOYW1lLCBWZW5kb3JHdWlkLCAmVmFyaWFibGUsDQo+ ID4gICAgID4gJm1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwsIFRSVUUpOw0K PiA+ICAgICA+ICsgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAgID4gKyAgICBp ZiAoKChWYXJpYWJsZS5DdXJyUHRyLT5BdHRyaWJ1dGVzICYgRUZJX1ZBUklBQkxFX1JVTlRJTUVf QUNDRVNTKQ0KPiA9PQ0KPiA+IDApDQo+ID4gICAgID4gJiYgQXRSdW50aW1lICgpKSB7DQo+ID4g ICAgID4gKyAgICAgIFN0YXR1cyA9IEVGSV9XUklURV9QUk9URUNURUQ7DQo+ID4gICAgID4gKyAg ICAgIGdvdG8gRG9uZTsNCj4gPiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgICBpZiAoKEF0dHJpYnV0ZXMgIT0gMCkgJiYgKChBdHRyaWJ1dGVzICYNCj4gPiAofkVGSV9W QVJJQUJMRV9BUFBFTkRfV1JJVEUpKSAhPQ0KPiA+ICAgICA+IFZhcmlhYmxlLkN1cnJQdHItPkF0 dHJpYnV0ZXMpKSB7DQo+ID4gICAgID4gKyAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgIC8vIElm IGEgcHJlZXhpc3RpbmcgdmFyaWFibGUgaXMgcmV3cml0dGVuIHdpdGggZGlmZmVyZW50IGF0dHJp YnV0ZXMsDQo+ID4gU2V0VmFyaWFibGUoKQ0KPiA+ICAgICA+IHNoYWxsIG5vdA0KPiA+ICAgICA+ ICsgICAgICAvLyBtb2RpZnkgdGhlIHZhcmlhYmxlIGFuZCBzaGFsbCByZXR1cm4gRUZJX0lOVkFM SURfUEFSQU1FVEVSLiBUd28NCj4gPiAgICAgPiBleGNlcHRpb25zIHRvIHRoaXMgcnVsZToNCj4g PiAgICAgPiArICAgICAgLy8gMS4gTm8gYWNjZXNzIGF0dHJpYnV0ZXMgc3BlY2lmaWVkDQo+ID4g ICAgID4gKyAgICAgIC8vIDIuIFRoZSBvbmx5IGF0dHJpYnV0ZSBkaWZmZXJpbmcgaXMgRUZJX1ZB UklBQkxFX0FQUEVORF9XUklURQ0KPiA+ICAgICA+ICsgICAgICAvLw0KPiA+ICAgICA+ICsgICAg ICBTdGF0dXMgPSBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gICAgID4gKyAgICAgIERFQlVH ICgoREVCVUdfSU5GTywgIltWYXJpYWJsZV06IFJld3JpdHRlbiBhIHByZWV4aXN0aW5nDQo+ID4g dmFyaWFibGUoMHglMDh4KQ0KPiA+ICAgICA+IHdpdGggZGlmZmVyZW50IGF0dHJpYnV0ZXMoMHgl MDh4KSAtICVnOiVzXG4iLCBWYXJpYWJsZS5DdXJyUHRyLT5BdHRyaWJ1dGVzLA0KPiA+ICAgICA+ IEF0dHJpYnV0ZXMsIFZlbmRvckd1aWQsIFZhcmlhYmxlTmFtZSkpOw0KPiA+ICAgICA+ICsgICAg ICBnb3RvIERvbmU7DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArICBpZiAoIUZlYXR1cmVQY2RHZXQgKFBjZFVlZmlWYXJpYWJsZURlZmF1 bHRMYW5nRGVwcmVjYXRlKSkgew0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIC8v IEhvb2sgdGhlIG9wZXJhdGlvbiBvZiBzZXR0aW5nIFBsYXRmb3JtTGFuZ0NvZGVzL1BsYXRmb3Jt TGFuZyBhbmQNCj4gPiAgICAgPiBMYW5nQ29kZXMvTGFuZy4NCj4gPiAgICAgPiArICAgIC8vDQo+ ID4gICAgID4gKyAgICBTdGF0dXMgPSBBdXRvVXBkYXRlTGFuZ1ZhcmlhYmxlIChWYXJpYWJsZU5h bWUsIERhdGEsIERhdGFTaXplKTsNCj4gPiAgICAgPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4gPiAgICAgPiArICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgLy8gVGhlIGF1dG8g dXBkYXRlIG9wZXJhdGlvbiBmYWlsZWQsIGRpcmVjdGx5IHJldHVybiB0byBhdm9pZA0KPiA+IGlu Y29uc2lzdGVuY3kNCj4gPiAgICAgPiBiZXR3ZWVuIFBsYXRmb3JtTGFuZyBhbmQgTGFuZy4NCj4g PiAgICAgPiArICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgZ290byBEb25lOw0KPiA+ICAgICA+ ICsgICAgfQ0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgaWYgKG1W YXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuQXV0aFN1cHBvcnQpIHsNCj4gPiAg ICAgPiArICAgIFN0YXR1cyA9IEF1dGhWYXJpYWJsZUxpYlByb2Nlc3NWYXJpYWJsZSAoVmFyaWFi bGVOYW1lLCBWZW5kb3JHdWlkLA0KPiA+IERhdGEsDQo+ID4gICAgID4gRGF0YVNpemUsIEF0dHJp YnV0ZXMpOw0KPiA+ICAgICA+ICsgIH0gZWxzZSB7DQo+ID4gICAgID4gKyAgICBTdGF0dXMgPSBV cGRhdGVWYXJpYWJsZSAoVmFyaWFibGVOYW1lLCBWZW5kb3JHdWlkLCBEYXRhLCBEYXRhU2l6ZSwN Cj4gPiAgICAgPiBBdHRyaWJ1dGVzLCAwLCAwLCAmVmFyaWFibGUsIE5VTEwpOw0KPiA+ICAgICA+ ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gK0RvbmU6DQo+ID4gICAgID4gKyAgSW50ZXJs b2NrZWREZWNyZW1lbnQgKCZtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4gICAgID4gPlZhcmlh YmxlR2xvYmFsLlJlZW50cmFudFN0YXRlKTsNCj4gPiAgICAgPiArICBSZWxlYXNlTG9ja09ubHlB dEJvb3RUaW1lICgmbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ICAgICA+ID5WYXJpYWJsZUds b2JhbC5WYXJpYWJsZVNlcnZpY2VzTG9jayk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIGlm ICghQXRSdW50aW1lICgpKSB7DQo+ID4gICAgID4gKyAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiA+ICAgICA+ICsgICAgICBTZWN1cmVCb290SG9vayAoDQo+ID4gICAgID4gKyAgICAg ICAgVmFyaWFibGVOYW1lLA0KPiA+ICAgICA+ICsgICAgICAgIFZlbmRvckd1aWQNCj4gPiAgICAg PiArICAgICAgICApOw0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFRoaXMgY29kZSBy ZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBFRkkgdmFyaWFibGVzLg0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICBDYXV0aW9uOiBUaGlzIGZ1bmN0aW9uIG1heSByZWNlaXZlIHVudHJ1c3Rl ZCBpbnB1dC4NCj4gPiAgICAgPiArICBUaGlzIGZ1bmN0aW9uIG1heSBiZSBpbnZva2VkIGluIFNN TSBtb2RlLiBUaGlzIGZ1bmN0aW9uIHdpbGwgZG8gYmFzaWMNCj4gPiAgICAgPiB2YWxpZGF0aW9u LCBiZWZvcmUgcGFyc2UgdGhlIGRhdGEuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJh bSBBdHRyaWJ1dGVzICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlcyBiaXRtYXNrIHRvIHNw ZWNpZnkgdGhlIHR5cGUgb2YNCj4gPiAgICAgPiB2YXJpYWJsZXMNCj4gPiAgICAgPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHdoaWNoIHRvIHJldHVybiBpbmZv cm1hdGlvbi4NCj4gPiAgICAgPiArICBAcGFyYW0gTWF4aW11bVZhcmlhYmxlU3RvcmFnZVNpemUg ICAgIFBvaW50ZXIgdG8gdGhlIG1heGltdW0gc2l6ZQ0KPiBvZg0KPiA+IHRoZQ0KPiA+ICAgICA+ IHN0b3JhZ2Ugc3BhY2UgYXZhaWxhYmxlDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIEVGSSB2YXJpYWJsZXMgYXNzb2NpYXRlZCB3aXRo IHRoZSBhdHRyaWJ1dGVzDQo+ID4gICAgID4gc3BlY2lmaWVkLg0KPiA+ICAgICA+ICsgIEBwYXJh bSBSZW1haW5pbmdWYXJpYWJsZVN0b3JhZ2VTaXplICAgUG9pbnRlciB0byB0aGUgcmVtYWluaW5n IHNpemUNCj4gb2YNCj4gPiB0aGUNCj4gPiAgICAgPiBzdG9yYWdlIHNwYWNlIGF2YWlsYWJsZQ0K PiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIEVG SSB2YXJpYWJsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBhdHRyaWJ1dGVzDQo+ID4gc3BlY2lmaWVk Lg0KPiA+ICAgICA+ICsgIEBwYXJhbSBNYXhpbXVtVmFyaWFibGVTaXplICAgICAgICAgICAgUG9p bnRlciB0byB0aGUgbWF4aW11bSBzaXplIG9mIGFuDQo+ID4gICAgID4gaW5kaXZpZHVhbCBFRkkg dmFyaWFibGVzDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBhc3NvY2lhdGVkIHdpdGggdGhlIGF0dHJpYnV0ZXMgc3BlY2lmaWVkLg0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArICBAcmV0dXJuIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgICAgIFF1 ZXJ5IHN1Y2Nlc3NmdWxseS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ ICtFRklfU1RBVFVTDQo+ID4gICAgID4gK0VGSUFQSQ0KPiA+ICAgICA+ICtWYXJpYWJsZVNlcnZp Y2VRdWVyeVZhcmlhYmxlSW5mb0ludGVybmFsICgNCj4gPiAgICAgPiArICBJTiAgVUlOVDMyICBB dHRyaWJ1dGVzLA0KPiA+ICAgICA+ICsgIE9VVCBVSU5UNjQgICpNYXhpbXVtVmFyaWFibGVTdG9y YWdlU2l6ZSwNCj4gPiAgICAgPiArICBPVVQgVUlOVDY0ICAqUmVtYWluaW5nVmFyaWFibGVTdG9y YWdlU2l6ZSwNCj4gPiAgICAgPiArICBPVVQgVUlOVDY0ICAqTWF4aW11bVZhcmlhYmxlU2l6ZQ0K PiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0KPiA+ICAgICA+ICsgIFZBUklBQkxFX0hFQURF UiAgICAgICAgICpWYXJpYWJsZTsNCj4gPiAgICAgPiArICBWQVJJQUJMRV9IRUFERVIgICAgICAg ICAqTmV4dFZhcmlhYmxlOw0KPiA+ICAgICA+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgIFZh cmlhYmxlU2l6ZTsNCj4gPiAgICAgPiArICBWQVJJQUJMRV9TVE9SRV9IRUFERVIgICAqVmFyaWFi bGVTdG9yZUhlYWRlcjsNCj4gPiAgICAgPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICBDb21t b25WYXJpYWJsZVRvdGFsU2l6ZTsNCj4gPiAgICAgPiArICBVSU5UNjQgICAgICAgICAgICAgICAg ICBId0VyclZhcmlhYmxlVG90YWxTaXplOw0KPiA+ICAgICA+ICsgIEVGSV9TVEFUVVMgICAgICAg ICAgICAgIFN0YXR1czsNCj4gPiAgICAgPiArICBWQVJJQUJMRV9QT0lOVEVSX1RSQUNLICBWYXJp YWJsZVB0clRyYWNrOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBDb21tb25WYXJpYWJsZVRv dGFsU2l6ZSA9IDA7DQo+ID4gICAgID4gKyAgSHdFcnJWYXJpYWJsZVRvdGFsU2l6ZSAgPSAwOw0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBpZiAoKEF0dHJpYnV0ZXMgJiBFRklfVkFSSUFCTEVf Tk9OX1ZPTEFUSUxFKSA9PSAwKSB7DQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAg Ly8gUXVlcnkgaXMgVm9sYXRpbGUgcmVsYXRlZC4NCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAg ID4gKyAgICBWYXJpYWJsZVN0b3JlSGVhZGVyID0gKFZBUklBQkxFX1NUT1JFX0hFQURFUg0KPiA+ ICAgICA+ICopKChVSU5UTiltVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLlZv bGF0aWxlVmFyaWFibGVCYXNlKTsNCj4gPiAgICAgPiArICB9IGVsc2Ugew0KPiA+ICAgICA+ICsg ICAgLy8NCj4gPiAgICAgPiArICAgIC8vIFF1ZXJ5IGlzIE5vbi1Wb2xhdGlsZSByZWxhdGVkLg0K PiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIFZhcmlhYmxlU3RvcmVIZWFkZXIgPSBt TnZWYXJpYWJsZUNhY2hlOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgLy8NCj4gPiAgICAgPiArICAvLyBOb3cgbGV0J3MgZmlsbCAqTWF4aW11bVZhcmlhYmxlU3Rv cmFnZVNpemUNCj4gPiAgICAgPiAqUmVtYWluaW5nVmFyaWFibGVTdG9yYWdlU2l6ZQ0KPiA+ICAg ICA+ICsgIC8vIHdpdGggdGhlIHN0b3JhZ2Ugc2l6ZSAoZXhjbHVkaW5nIHRoZSBzdG9yYWdlIGhl YWRlciBzaXplKS4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgICpNYXhpbXVtVmFyaWFi bGVTdG9yYWdlU2l6ZSA9IFZhcmlhYmxlU3RvcmVIZWFkZXItPlNpemUgLSBzaXplb2YNCj4gPiAg ICAgPiAoVkFSSUFCTEVfU1RPUkVfSEVBREVSKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg Ly8NCj4gPiAgICAgPiArICAvLyBIYXJ3YXJlIGVycm9yIHJlY29yZCB2YXJpYWJsZSBuZWVkcyBs YXJnZXIgc2l6ZS4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIGlmICgoQXR0cmlidXRl cyAmIChFRklfVkFSSUFCTEVfTk9OX1ZPTEFUSUxFIHwNCj4gPiAgICAgPiBFRklfVkFSSUFCTEVf SEFSRFdBUkVfRVJST1JfUkVDT1JEKSkgPT0NCj4gPiAgICAgPiAoRUZJX1ZBUklBQkxFX05PTl9W T0xBVElMRSB8DQo+ID4gRUZJX1ZBUklBQkxFX0hBUkRXQVJFX0VSUk9SX1JFQ09SRCkpDQo+ID4g ICAgID4gew0KPiA+ICAgICA+ICsgICAgKk1heGltdW1WYXJpYWJsZVN0b3JhZ2VTaXplID0gUGNk R2V0MzIgKFBjZEh3RXJyU3RvcmFnZVNpemUpOw0KPiA+ICAgICA+ICsgICAgKk1heGltdW1WYXJp YWJsZVNpemUgICAgICAgID0gIFBjZEdldDMyDQo+ID4gKFBjZE1heEhhcmR3YXJlRXJyb3JWYXJp YWJsZVNpemUpDQo+ID4gICAgID4gLQ0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgR2V0VmFyaWFibGVIZWFkZXJTaXplIChtVmFyaWFibGVNb2R1bGVHbG9iYWwt DQo+ID4gICAgID4gPlZhcmlhYmxlR2xvYmFsLkF1dGhGb3JtYXQpOw0KPiA+ICAgICA+ICsgIH0g ZWxzZSB7DQo+ID4gICAgID4gKyAgICBpZiAoKEF0dHJpYnV0ZXMgJiBFRklfVkFSSUFCTEVfTk9O X1ZPTEFUSUxFKSAhPSAwKSB7DQo+ID4gICAgID4gKyAgICAgIGlmIChBdFJ1bnRpbWUgKCkpIHsN Cj4gPiAgICAgPiArICAgICAgICAqTWF4aW11bVZhcmlhYmxlU3RvcmFnZVNpemUgPSBtVmFyaWFi bGVNb2R1bGVHbG9iYWwtDQo+ID4gICAgID4gPkNvbW1vblJ1bnRpbWVWYXJpYWJsZVNwYWNlOw0K PiA+ICAgICA+ICsgICAgICB9IGVsc2Ugew0KPiA+ICAgICA+ICsgICAgICAgICpNYXhpbXVtVmFy aWFibGVTdG9yYWdlU2l6ZSA9IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCj4gPiAgICAgPiA+Q29t bW9uVmFyaWFibGVTcGFjZTsNCj4gPiAgICAgPiArICAgICAgfQ0KPiA+ICAgICA+ICsgICAgfQ0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICAvLyBMZXQgKk1h eGltdW1WYXJpYWJsZVNpemUgYmUgTWF4KEF1dGh8Vm9sYXRpbGUpVmFyaWFibGVTaXplIHdpdGgN Cj4gdGhlDQo+ID4gICAgID4gZXhjZXB0aW9uIG9mIHRoZSB2YXJpYWJsZSBoZWFkZXIgc2l6ZS4N Cj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICBpZiAoKEF0dHJpYnV0ZXMgJiBWQVJJ QUJMRV9BVFRSSUJVVEVfQVRfQVcpICE9IDApIHsNCj4gPiAgICAgPiArICAgICAgKk1heGltdW1W YXJpYWJsZVNpemUgPSAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ID5NYXhBdXRoVmFyaWFi bGVTaXplIC0NCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRWYXJp YWJsZUhlYWRlclNpemUgKG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCj4gPiAgICAgPiA+VmFyaWFi bGVHbG9iYWwuQXV0aEZvcm1hdCk7DQo+ID4gICAgID4gKyAgICB9IGVsc2UgaWYgKChBdHRyaWJ1 dGVzICYgRUZJX1ZBUklBQkxFX05PTl9WT0xBVElMRSkgIT0gMCkgew0KPiA+ICAgICA+ICsgICAg ICAqTWF4aW11bVZhcmlhYmxlU2l6ZSA9ICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPk1heFZhcmlh YmxlU2l6ZSAtDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0VmFy aWFibGVIZWFkZXJTaXplIChtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4gICAgID4gPlZhcmlh YmxlR2xvYmFsLkF1dGhGb3JtYXQpOw0KPiA+ICAgICA+ICsgICAgfSBlbHNlIHsNCj4gPiAgICAg PiArICAgICAgKk1heGltdW1WYXJpYWJsZVNpemUgPSAgIG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0N Cj4gPiAgICAgPiA+TWF4Vm9sYXRpbGVWYXJpYWJsZVNpemUgLQ0KPiA+ICAgICA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdldFZhcmlhYmxlSGVhZGVyU2l6ZSAobVZhcmlhYmxlTW9k dWxlR2xvYmFsLQ0KPiA+ICAgICA+ID5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0KTsNCj4gPiAg ICAgPiArICAgIH0NCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8v DQo+ID4gICAgID4gKyAgLy8gUG9pbnQgdG8gdGhlIHN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhlIHZh cmlhYmxlcy4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIFZhcmlhYmxlID0gR2V0U3Rh cnRQb2ludGVyIChWYXJpYWJsZVN0b3JlSGVhZGVyKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgLy8NCj4gPiAgICAgPiArICAvLyBOb3cgd2FsayB0aHJvdWdoIHRoZSByZWxhdGVkIHZhcmlh YmxlIHN0b3JlLg0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgd2hpbGUgKElzVmFsaWRW YXJpYWJsZUhlYWRlciAoDQo+ID4gICAgID4gKyAgICAgICAgICAgVmFyaWFibGUsDQo+ID4gICAg ID4gKyAgICAgICAgICAgR2V0RW5kUG9pbnRlciAoVmFyaWFibGVTdG9yZUhlYWRlciksDQo+ID4g ICAgID4gKyAgICAgICAgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5B dXRoRm9ybWF0DQo+ID4gICAgID4gKyAgICAgICAgICAgKSkNCj4gPiAgICAgPiArICB7DQo+ID4g ICAgID4gKyAgICBOZXh0VmFyaWFibGUgPSBHZXROZXh0VmFyaWFibGVQdHIgKFZhcmlhYmxlLCBt VmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4gICAgID4gPlZhcmlhYmxlR2xvYmFsLkF1dGhGb3Jt YXQpOw0KPiA+ICAgICA+ICsgICAgVmFyaWFibGVTaXplID0gKFVJTlQ2NCkoVUlOVE4pTmV4dFZh cmlhYmxlIC0NCj4gKFVJTlQ2NCkoVUlOVE4pVmFyaWFibGU7DQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsgICAgaWYgKEF0UnVudGltZSAoKSkgew0KPiA+ICAgICA+ICsgICAgICAvLw0KPiA+ICAg ICA+ICsgICAgICAvLyBXZSBkb24ndCB0YWtlIHRoZSBzdGF0ZSBvZiB0aGUgdmFyaWFibGVzIGlu IG1pbmQNCj4gPiAgICAgPiArICAgICAgLy8gd2hlbiBjYWxjdWxhdGluZyBSZW1haW5pbmdWYXJp YWJsZVN0b3JhZ2VTaXplLA0KPiA+ICAgICA+ICsgICAgICAvLyBzaW5jZSB0aGUgc3BhY2Ugb2Nj dXBpZWQgYnkgdmFyaWFibGVzIG5vdCBtYXJrZWQgd2l0aA0KPiA+ICAgICA+ICsgICAgICAvLyBW QVJfQURERUQgaXMgbm90IGFsbG93ZWQgdG8gYmUgcmVjbGFpbWVkIGluIFJ1bnRpbWUuDQo+ID4g ICAgID4gKyAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgIGlmICgoVmFyaWFibGUtPkF0dHJpYnV0 ZXMgJg0KPiBFRklfVkFSSUFCTEVfSEFSRFdBUkVfRVJST1JfUkVDT1JEKQ0KPiA+ID09DQo+ID4g ICAgID4gRUZJX1ZBUklBQkxFX0hBUkRXQVJFX0VSUk9SX1JFQ09SRCkgew0KPiA+ICAgICA+ICsg ICAgICAgIEh3RXJyVmFyaWFibGVUb3RhbFNpemUgKz0gVmFyaWFibGVTaXplOw0KPiA+ICAgICA+ ICsgICAgICB9IGVsc2Ugew0KPiA+ICAgICA+ICsgICAgICAgIENvbW1vblZhcmlhYmxlVG90YWxT aXplICs9IFZhcmlhYmxlU2l6ZTsNCj4gPiAgICAgPiArICAgICAgfQ0KPiA+ICAgICA+ICsgICAg fSBlbHNlIHsNCj4gPiAgICAgPiArICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgLy8gT25seSBj YXJlIGFib3V0IFZhcmlhYmxlcyB3aXRoIFN0YXRlIFZBUl9BRERFRCwgYmVjYXVzZQ0KPiA+ICAg ICA+ICsgICAgICAvLyB0aGUgc3BhY2Ugbm90IG1hcmtlZCBhcyBWQVJfQURERUQgaXMgcmVjbGFp bWFibGUgbm93Lg0KPiA+ICAgICA+ICsgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICBpZiAoVmFy aWFibGUtPlN0YXRlID09IFZBUl9BRERFRCkgew0KPiA+ICAgICA+ICsgICAgICAgIGlmICgoVmFy aWFibGUtPkF0dHJpYnV0ZXMgJg0KPiA+IEVGSV9WQVJJQUJMRV9IQVJEV0FSRV9FUlJPUl9SRUNP UkQpDQo+ID4gICAgID4gPT0gRUZJX1ZBUklBQkxFX0hBUkRXQVJFX0VSUk9SX1JFQ09SRCkgew0K PiA+ICAgICA+ICsgICAgICAgICAgSHdFcnJWYXJpYWJsZVRvdGFsU2l6ZSArPSBWYXJpYWJsZVNp emU7DQo+ID4gICAgID4gKyAgICAgICAgfSBlbHNlIHsNCj4gPiAgICAgPiArICAgICAgICAgIENv bW1vblZhcmlhYmxlVG90YWxTaXplICs9IFZhcmlhYmxlU2l6ZTsNCj4gPiAgICAgPiArICAgICAg ICB9DQo+ID4gICAgID4gKyAgICAgIH0gZWxzZSBpZiAoVmFyaWFibGUtPlN0YXRlID09IChWQVJf SU5fREVMRVRFRF9UUkFOU0lUSU9OICYNCj4gPiBWQVJfQURERUQpKQ0KPiA+ICAgICA+IHsNCj4g PiAgICAgPiArICAgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAgIC8vIElmIGl0IGlzIGEgSU5f REVMRVRFRF9UUkFOU0lUSU9OIHZhcmlhYmxlLA0KPiA+ICAgICA+ICsgICAgICAgIC8vIGFuZCB0 aGVyZSBpcyBub3QgYWxzbyBhIHNhbWUgQURERUQgb25lIGF0IHRoZSBzYW1lIHRpbWUsDQo+ID4g ICAgID4gKyAgICAgICAgLy8gdGhpcyBJTl9ERUxFVEVEX1RSQU5TSVRJT04gdmFyaWFibGUgaXMg dmFsaWQuDQo+ID4gICAgID4gKyAgICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgICBWYXJpYWJs ZVB0clRyYWNrLlN0YXJ0UHRyID0gR2V0U3RhcnRQb2ludGVyIChWYXJpYWJsZVN0b3JlSGVhZGVy KTsNCj4gPiAgICAgPiArICAgICAgICBWYXJpYWJsZVB0clRyYWNrLkVuZFB0ciAgID0gR2V0RW5k UG9pbnRlciAoVmFyaWFibGVTdG9yZUhlYWRlcik7DQo+ID4gICAgID4gKyAgICAgICAgU3RhdHVz ICAgICAgICAgICAgICAgICAgICA9IEZpbmRWYXJpYWJsZUV4ICgNCj4gPiAgICAgPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRWYXJpYWJsZU5hbWVQdHIgKFZhcmlh YmxlLA0KPiA+IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCj4gPiAgICAgPiA+VmFyaWFibGVHbG9i YWwuQXV0aEZvcm1hdCksDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgR2V0VmVuZG9yR3VpZFB0ciAoVmFyaWFibGUsDQo+IG1WYXJpYWJsZU1vZHVsZUds b2JhbC0NCj4gPiAgICAgPiA+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdCksDQo+ID4gICAgID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsDQo+ID4gICAgID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlZhcmlhYmxlUHRyVHJhY2ss DQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVZhcmlh YmxlTW9kdWxlR2xvYmFsLQ0KPiA+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdA0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gICAgID4gKyAg ICAgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykgJiYgKFZhcmlhYmxlUHRyVHJhY2suQ3VyclB0 ci0+U3RhdGUgIT0NCj4gPiAgICAgPiBWQVJfQURERUQpKSB7DQo+ID4gICAgID4gKyAgICAgICAg ICBpZiAoKFZhcmlhYmxlLT5BdHRyaWJ1dGVzICYNCj4gPiBFRklfVkFSSUFCTEVfSEFSRFdBUkVf RVJST1JfUkVDT1JEKQ0KPiA+ICAgICA+ID09IEVGSV9WQVJJQUJMRV9IQVJEV0FSRV9FUlJPUl9S RUNPUkQpIHsNCj4gPiAgICAgPiArICAgICAgICAgICAgSHdFcnJWYXJpYWJsZVRvdGFsU2l6ZSAr PSBWYXJpYWJsZVNpemU7DQo+ID4gICAgID4gKyAgICAgICAgICB9IGVsc2Ugew0KPiA+ICAgICA+ ICsgICAgICAgICAgICBDb21tb25WYXJpYWJsZVRvdGFsU2l6ZSArPSBWYXJpYWJsZVNpemU7DQo+ ID4gICAgID4gKyAgICAgICAgICB9DQo+ID4gICAgID4gKyAgICAgICAgfQ0KPiA+ICAgICA+ICsg ICAgICB9DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgLy8N Cj4gPiAgICAgPiArICAgIC8vIEdvIHRvIHRoZSBuZXh0IG9uZS4NCj4gPiAgICAgPiArICAgIC8v DQo+ID4gICAgID4gKyAgICBWYXJpYWJsZSA9IE5leHRWYXJpYWJsZTsNCj4gPiAgICAgPiArICB9 DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIGlmICgoQXR0cmlidXRlcyAgJiBFRklfVkFSSUFC TEVfSEFSRFdBUkVfRVJST1JfUkVDT1JEKSA9PQ0KPiA+ICAgICA+IEVGSV9WQVJJQUJMRV9IQVJE V0FSRV9FUlJPUl9SRUNPUkQpIHsNCj4gPiAgICAgPiArICAgICpSZW1haW5pbmdWYXJpYWJsZVN0 b3JhZ2VTaXplID0gKk1heGltdW1WYXJpYWJsZVN0b3JhZ2VTaXplIC0NCj4gPiAgICAgPiBId0Vy clZhcmlhYmxlVG90YWxTaXplOw0KPiA+ICAgICA+ICsgIH0gZWxzZSB7DQo+ID4gICAgID4gKyAg ICBpZiAoKk1heGltdW1WYXJpYWJsZVN0b3JhZ2VTaXplIDwgQ29tbW9uVmFyaWFibGVUb3RhbFNp emUpIHsNCj4gPiAgICAgPiArICAgICAgKlJlbWFpbmluZ1ZhcmlhYmxlU3RvcmFnZVNpemUgPSAw Ow0KPiA+ICAgICA+ICsgICAgfSBlbHNlIHsNCj4gPiAgICAgPiArICAgICAgKlJlbWFpbmluZ1Zh cmlhYmxlU3RvcmFnZVNpemUgPSAqTWF4aW11bVZhcmlhYmxlU3RvcmFnZVNpemUgLQ0KPiA+ICAg ICA+IENvbW1vblZhcmlhYmxlVG90YWxTaXplOw0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgaWYgKCpSZW1haW5pbmdWYXJpYWJsZVN0 b3JhZ2VTaXplIDwgR2V0VmFyaWFibGVIZWFkZXJTaXplDQo+ID4gICAgID4gKG1WYXJpYWJsZU1v ZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdCkpIHsNCj4gPiAgICAgPiArICAg ICpNYXhpbXVtVmFyaWFibGVTaXplID0gMDsNCj4gPiAgICAgPiArICB9IGVsc2UgaWYgKCgqUmVt YWluaW5nVmFyaWFibGVTdG9yYWdlU2l6ZSAtIEdldFZhcmlhYmxlSGVhZGVyU2l6ZQ0KPiA+ICAg ICA+IChtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLkF1dGhGb3JtYXQpKSA8 DQo+ID4gICAgID4gKyAgICAgICAgICAgICAqTWF4aW11bVZhcmlhYmxlU2l6ZQ0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgKQ0KPiA+ICAgICA+ICsgIHsNCj4gPiAgICAgPiArICAgICpNYXhpbXVt VmFyaWFibGVTaXplID0gKlJlbWFpbmluZ1ZhcmlhYmxlU3RvcmFnZVNpemUgLQ0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRWYXJpYWJsZUhlYWRlclNpemUgKG1WYXJp YWJsZU1vZHVsZUdsb2JhbC0NCj4gPiAgICAgPiA+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdCk7 DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICByZXR1cm4gRUZJX1NV Q0NFU1M7DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArICBUaGlzIGNvZGUgcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCB0 aGUgRUZJIHZhcmlhYmxlcy4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQ2F1dGlvbjogVGhp cyBmdW5jdGlvbiBtYXkgcmVjZWl2ZSB1bnRydXN0ZWQgaW5wdXQuDQo+ID4gICAgID4gKyAgVGhp cyBmdW5jdGlvbiBtYXkgYmUgaW52b2tlZCBpbiBTTU0gbW9kZS4gVGhpcyBmdW5jdGlvbiB3aWxs IGRvIGJhc2ljDQo+ID4gICAgID4gdmFsaWRhdGlvbiwgYmVmb3JlIHBhcnNlIHRoZSBkYXRhLg0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW0gQXR0cmlidXRlcyAgICAgICAgICAgICAg ICAgICAgIEF0dHJpYnV0ZXMgYml0bWFzayB0byBzcGVjaWZ5IHRoZSB0eXBlIG9mDQo+ID4gICAg ID4gdmFyaWFibGVzDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBvbiB3aGljaCB0byByZXR1cm4gaW5mb3JtYXRpb24uDQo+ID4gICAgID4gKyAgQHBh cmFtIE1heGltdW1WYXJpYWJsZVN0b3JhZ2VTaXplICAgICBQb2ludGVyIHRvIHRoZSBtYXhpbXVt IHNpemUNCj4gb2YNCj4gPiB0aGUNCj4gPiAgICAgPiBzdG9yYWdlIHNwYWNlIGF2YWlsYWJsZQ0K PiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRo ZSBFRkkgdmFyaWFibGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXR0cmlidXRlcw0KPiA+ICAgICA+ IHNwZWNpZmllZC4NCj4gPiAgICAgPiArICBAcGFyYW0gUmVtYWluaW5nVmFyaWFibGVTdG9yYWdl U2l6ZSAgIFBvaW50ZXIgdG8gdGhlIHJlbWFpbmluZyBzaXplDQo+IG9mDQo+ID4gdGhlDQo+ID4g ICAgID4gc3RvcmFnZSBzcGFjZSBhdmFpbGFibGUNCj4gPiAgICAgPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBFRkkgdmFyaWFibGVzIGFzc29jaWF0ZWQgd2l0 aCB0aGUgYXR0cmlidXRlcw0KPiA+IHNwZWNpZmllZC4NCj4gPiAgICAgPiArICBAcGFyYW0gTWF4 aW11bVZhcmlhYmxlU2l6ZSAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIG1heGltdW0gc2l6ZSBv ZiBhbg0KPiA+ICAgICA+IGluZGl2aWR1YWwgRUZJIHZhcmlhYmxlcw0KPiA+ICAgICA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBh dHRyaWJ1dGVzIHNwZWNpZmllZC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHVybiBF RklfSU5WQUxJRF9QQVJBTUVURVIgICAgICAgICBBbiBpbnZhbGlkIGNvbWJpbmF0aW9uIG9mDQo+ ID4gYXR0cmlidXRlDQo+ID4gICAgID4gYml0cyB3YXMgc3VwcGxpZWQuDQo+ID4gICAgID4gKyAg QHJldHVybiBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICBRdWVyeSBzdWNjZXNzZnVsbHku DQo+ID4gICAgID4gKyAgQHJldHVybiBFRklfVU5TVVBQT1JURUQgICAgICAgICAgICAgICBUaGUg YXR0cmlidXRlIGlzIG5vdCBzdXBwb3J0ZWQgb24NCj4gdGhpcw0KPiA+ICAgICA+IHBsYXRmb3Jt Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4g PiAgICAgPiArRUZJQVBJDQo+ID4gICAgID4gK1ZhcmlhYmxlU2VydmljZVF1ZXJ5VmFyaWFibGVJ bmZvICgNCj4gPiAgICAgPiArICBJTiAgVUlOVDMyICBBdHRyaWJ1dGVzLA0KPiA+ICAgICA+ICsg IE9VVCBVSU5UNjQgICpNYXhpbXVtVmFyaWFibGVTdG9yYWdlU2l6ZSwNCj4gPiAgICAgPiArICBP VVQgVUlOVDY0ICAqUmVtYWluaW5nVmFyaWFibGVTdG9yYWdlU2l6ZSwNCj4gPiAgICAgPiArICBP VVQgVUlOVDY0ICAqTWF4aW11bVZhcmlhYmxlU2l6ZQ0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAg PiArew0KPiA+ICAgICA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyAgaWYgKChNYXhpbXVtVmFyaWFibGVTdG9yYWdlU2l6ZSA9PSBOVUxMKSB8fA0KPiA+ IChSZW1haW5pbmdWYXJpYWJsZVN0b3JhZ2VTaXplDQo+ID4gICAgID4gPT0gTlVMTCkgfHwgKE1h eGltdW1WYXJpYWJsZVNpemUgPT0gTlVMTCkgfHwgKEF0dHJpYnV0ZXMgPT0gMCkpIHsNCj4gPiAg ICAgPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gICAgID4gKyAgfQ0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBpZiAoKEF0dHJpYnV0ZXMgJiBFRklfVkFSSUFCTEVf QVVUSEVOVElDQVRFRF9XUklURV9BQ0NFU1MpICE9IDApIHsNCj4gPiAgICAgPiArICAgIC8vDQo+ ID4gICAgID4gKyAgICAvLyAgRGVwcmVjYXRlZCBhdHRyaWJ1dGUsIG1ha2UgdGhpcyBjaGVjayBh cyBoaWdoZXN0IHByaW9yaXR5Lg0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIHJl dHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICBpZiAoKEF0dHJpYnV0ZXMgJiBFRklfVkFSSUFCTEVfQVRUUklCVVRFU19NQVNLKSA9 PSAwKSB7DQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgLy8gTWFrZSBzdXJlIHRo ZSBBdHRyaWJ1dGVzIGNvbWJpbmF0aW9uIGlzIHN1cHBvcnRlZCBieSB0aGUgcGxhdGZvcm0uDQo+ ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsN Cj4gPiAgICAgPiArICB9IGVsc2UgaWYgKChBdHRyaWJ1dGVzICYgRUZJX1ZBUklBQkxFX0FUVFJJ QlVURVNfTUFTSykgPT0NCj4gPiAgICAgPiBFRklfVkFSSUFCTEVfTk9OX1ZPTEFUSUxFKSB7DQo+ ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgLy8gT25seSBFRklfVkFSSUFCTEVfTk9O X1ZPTEFUSUxFIGF0dHJpYnV0ZSBpcyBpbnZhbGlkDQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAg ICA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiAgICAgPiArICB9IGVs c2UgaWYgKChBdHRyaWJ1dGVzICYgKEVGSV9WQVJJQUJMRV9SVU5USU1FX0FDQ0VTUyB8DQo+ID4g ICAgID4gRUZJX1ZBUklBQkxFX0JPT1RTRVJWSUNFX0FDQ0VTUykpID09DQo+ID4gRUZJX1ZBUklB QkxFX1JVTlRJTUVfQUNDRVNTKSB7DQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAg Ly8gTWFrZSBzdXJlIGlmIHJ1bnRpbWUgYml0IGlzIHNldCwgYm9vdCBzZXJ2aWNlIGJpdCBpcyBz ZXQgYWxzby4NCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICByZXR1cm4gRUZJX0lO VkFMSURfUEFSQU1FVEVSOw0KPiA+ICAgICA+ICsgIH0gZWxzZSBpZiAoQXRSdW50aW1lICgpICYm ICgoQXR0cmlidXRlcyAmDQo+IEVGSV9WQVJJQUJMRV9SVU5USU1FX0FDQ0VTUykNCj4gPiA9PQ0K PiA+ICAgICA+IDApKSB7DQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgLy8gTWFr ZSBzdXJlIFJUIEF0dHJpYnV0ZSBpcyBzZXQgaWYgd2UgYXJlIGluIFJ1bnRpbWUgcGhhc2UuDQo+ ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFN RVRFUjsNCj4gPiAgICAgPiArICB9IGVsc2UgaWYgKChBdHRyaWJ1dGVzICYgKEVGSV9WQVJJQUJM RV9OT05fVk9MQVRJTEUgfA0KPiA+ICAgICA+IEVGSV9WQVJJQUJMRV9IQVJEV0FSRV9FUlJPUl9S RUNPUkQpKSA9PQ0KPiA+ICAgICA+IEVGSV9WQVJJQUJMRV9IQVJEV0FSRV9FUlJPUl9SRUNPUkQp IHsNCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICAvLyBNYWtlIHN1cmUgSHcgQXR0 cmlidXRlIGlzIHNldCB3aXRoIE5WLg0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAg IHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gICAgID4gKyAgfSBlbHNlIGlmICgo QXR0cmlidXRlcyAmIFZBUklBQkxFX0FUVFJJQlVURV9BVF9BVykgIT0gMCkgew0KPiA+ICAgICA+ ICsgICAgaWYgKCFtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLkF1dGhTdXBw b3J0KSB7DQo+ID4gICAgID4gKyAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgIC8vIE5vdCBzdXBw b3J0IGF1dGhlbnRpY2F0ZWQgdmFyaWFibGUgd3JpdGUuDQo+ID4gICAgID4gKyAgICAgIC8vDQo+ ID4gICAgID4gKyAgICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ID4gICAgID4gKyAgICB9 DQo+ID4gICAgID4gKyAgfSBlbHNlIGlmICgoQXR0cmlidXRlcyAmIEVGSV9WQVJJQUJMRV9IQVJE V0FSRV9FUlJPUl9SRUNPUkQpICE9IDApDQo+IHsNCj4gPiAgICAgPiArICAgIGlmIChQY2RHZXQz MiAoUGNkSHdFcnJTdG9yYWdlU2l6ZSkgPT0gMCkgew0KPiA+ICAgICA+ICsgICAgICAvLw0KPiA+ ICAgICA+ICsgICAgICAvLyBOb3Qgc3VwcG9ydCBoYXJ3YXJlIGVycm9yIHJlY29yZCB2YXJpYWJs ZSB2YXJpYWJsZS4NCj4gPiAgICAgPiArICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgcmV0dXJu IEVGSV9VTlNVUFBPUlRFRDsNCj4gPiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArICB9DQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgIEFjcXVpcmVMb2NrT25seUF0Qm9vdFRpbWUgKCZtVmFyaWFi bGVNb2R1bGVHbG9iYWwtDQo+ID4gICAgID4gPlZhcmlhYmxlR2xvYmFsLlZhcmlhYmxlU2Vydmlj ZXNMb2NrKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgU3RhdHVzID0gVmFyaWFibGVTZXJ2 aWNlUXVlcnlWYXJpYWJsZUluZm9JbnRlcm5hbCAoDQo+ID4gICAgID4gKyAgICAgICAgICAgICBB dHRyaWJ1dGVzLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgTWF4aW11bVZhcmlhYmxlU3RvcmFn ZVNpemUsDQo+ID4gICAgID4gKyAgICAgICAgICAgICBSZW1haW5pbmdWYXJpYWJsZVN0b3JhZ2VT aXplLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgTWF4aW11bVZhcmlhYmxlU2l6ZQ0KPiA+ICAg ICA+ICsgICAgICAgICAgICAgKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgUmVsZWFzZUxv Y2tPbmx5QXRCb290VGltZSAoJm1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCj4gPiAgICAgPiA+VmFy aWFibGVHbG9iYWwuVmFyaWFibGVTZXJ2aWNlc0xvY2spOw0KPiA+ICAgICA+ICsgIHJldHVybiBT dGF0dXM7DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAg ICA+ICsgIFRoaXMgZnVuY3Rpb24gcmVjbGFpbXMgdmFyaWFibGUgc3RvcmFnZSBpZiBmcmVlIHNp emUgaXMgYmVsb3cgdGhlIHRocmVzaG9sZC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQ2F1 dGlvbjogVGhpcyBmdW5jdGlvbiBtYXkgYmUgaW52b2tlZCBhdCBTTU0gbW9kZS4NCj4gPiAgICAg PiArICBDYXJlIG11c3QgYmUgdGFrZW4gdG8gbWFrZSBzdXJlIG5vdCBzZWN1cml0eSBpc3N1ZS4N Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtWT0lEDQo+ID4gICAgID4g K1JlY2xhaW1Gb3JPUyAoDQo+ID4gICAgID4gKyAgVk9JRA0KPiA+ICAgICA+ICsgICkNCj4gPiAg ICAgPiArew0KPiA+ICAgICA+ICsgIEVGSV9TVEFUVVMgICAgICBTdGF0dXM7DQo+ID4gICAgID4g KyAgVUlOVE4gICAgICAgICAgIFJlbWFpbmluZ0NvbW1vblJ1bnRpbWVWYXJpYWJsZVNwYWNlOw0K PiA+ICAgICA+ICsgIFVJTlROICAgICAgICAgICBSZW1haW5pbmdId0VyclZhcmlhYmxlU3BhY2U7 DQo+ID4gICAgID4gKyAgU1RBVElDIEJPT0xFQU4gIFJlY2xhaW1lZDsNCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2Fs bGVkIG9ubHkgb25jZSBhdCBFbmRPZkR4ZSBvciBSZWFkeVRvQm9vdA0KPiA+IGV2ZW50Lg0KPiA+ ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgaWYgKFJlY2xhaW1lZCkgew0KPiA+ICAgICA+ICsg ICAgcmV0dXJuOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgUmVj bGFpbWVkID0gVFJVRTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgU3RhdHVzID0gRUZJX1NV Q0NFU1M7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIGlmIChtVmFyaWFibGVNb2R1bGVHbG9i YWwtPkNvbW1vblJ1bnRpbWVWYXJpYWJsZVNwYWNlIDwNCj4gPiAgICAgPiBtVmFyaWFibGVNb2R1 bGVHbG9iYWwtPkNvbW1vblZhcmlhYmxlVG90YWxTaXplKSB7DQo+ID4gICAgID4gKyAgICBSZW1h aW5pbmdDb21tb25SdW50aW1lVmFyaWFibGVTcGFjZSA9IDA7DQo+ID4gICAgID4gKyAgfSBlbHNl IHsNCj4gPiAgICAgPiArICAgIFJlbWFpbmluZ0NvbW1vblJ1bnRpbWVWYXJpYWJsZVNwYWNlID0g bVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ICAgICA+ID5Db21tb25SdW50aW1lVmFyaWFibGVT cGFjZSAtIG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCj4gPiAgICAgPiA+Q29tbW9uVmFyaWFibGVU b3RhbFNpemU7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBSZW1h aW5pbmdId0VyclZhcmlhYmxlU3BhY2UgPSBQY2RHZXQzMiAoUGNkSHdFcnJTdG9yYWdlU2l6ZSkg LQ0KPiA+ICAgICA+IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+SHdFcnJWYXJpYWJsZVRvdGFsU2l6 ZTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBDaGVjayBp ZiB0aGUgZnJlZSBhcmVhIGlzIGJlbG93IGEgdGhyZXNob2xkLg0KPiA+ICAgICA+ICsgIC8vDQo+ ID4gICAgID4gKyAgaWYgKCgoUmVtYWluaW5nQ29tbW9uUnVudGltZVZhcmlhYmxlU3BhY2UgPA0K PiBtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4gICAgID4gPk1heFZhcmlhYmxlU2l6ZSkgfHwN Cj4gPiAgICAgPiArICAgICAgIChSZW1haW5pbmdDb21tb25SdW50aW1lVmFyaWFibGVTcGFjZSA8 DQo+IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCj4gPiAgICAgPiA+TWF4QXV0aFZhcmlhYmxlU2l6 ZSkpIHx8DQo+ID4gICAgID4gKyAgICAgICgoUGNkR2V0MzIgKFBjZEh3RXJyU3RvcmFnZVNpemUp ICE9IDApICYmDQo+ID4gICAgID4gKyAgICAgICAoUmVtYWluaW5nSHdFcnJWYXJpYWJsZVNwYWNl IDwgUGNkR2V0MzINCj4gPiAgICAgPiAoUGNkTWF4SGFyZHdhcmVFcnJvclZhcmlhYmxlU2l6ZSkp KSkNCj4gPiAgICAgPiArICB7DQo+ID4gICAgID4gKyAgICBTdGF0dXMgPSBSZWNsYWltICgNCj4g PiAgICAgPiArICAgICAgICAgICAgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+VmFyaWFi bGVHbG9iYWwuTm9uVm9sYXRpbGVWYXJpYWJsZUJhc2UsDQo+ID4gICAgID4gKyAgICAgICAgICAg ICAgICZtVmFyaWFibGVNb2R1bGVHbG9iYWwtPk5vblZvbGF0aWxlTGFzdFZhcmlhYmxlT2Zmc2V0 LA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICBGQUxTRSwNCj4gPiAgICAgPiArICAgICAgICAg ICAgICAgTlVMTCwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgTlVMTCwNCj4gPiAgICAgPiAr ICAgICAgICAgICAgICAgMA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICApOw0KPiA+ICAgICA+ ICsgICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gPiAgICAgPiArICB9DQo+ID4gICAg ID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIEdldCBtYXhp bXVtIHZhcmlhYmxlIHNpemUsIGNvdmVyaW5nIGJvdGggbm9uLXZvbGF0aWxlIGFuZCB2b2xhdGls ZQ0KPiA+IHZhcmlhYmxlcy4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHVybiBNYXhp bXVtIHZhcmlhYmxlIHNpemUuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAg PiArVUlOVE4NCj4gPiAgICAgPiArR2V0TWF4VmFyaWFibGVTaXplICgNCj4gPiAgICAgPiArICBW T0lEDQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgVUlOVE4gIE1h eFZhcmlhYmxlU2l6ZTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgTWF4VmFyaWFibGVTaXpl ID0gR2V0Tm9uVm9sYXRpbGVNYXhWYXJpYWJsZVNpemUgKCk7DQo+ID4gICAgID4gKyAgLy8NCj4g PiAgICAgPiArICAvLyBUaGUgY29uZGl0aW9uIGJlbG93IGZhaWxzIGltcGxpY2l0bHkgaWYgUGNk TWF4Vm9sYXRpbGVWYXJpYWJsZVNpemUNCj4gZXF1YWxzDQo+ID4gICAgID4gKyAgLy8gdGhlIGRl ZmF1bHQgemVybyB2YWx1ZS4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIGlmIChNYXhW YXJpYWJsZVNpemUgPCBQY2RHZXQzMiAoUGNkTWF4Vm9sYXRpbGVWYXJpYWJsZVNpemUpKSB7DQo+ ID4gICAgID4gKyAgICBNYXhWYXJpYWJsZVNpemUgPSBQY2RHZXQzMiAoUGNkTWF4Vm9sYXRpbGVW YXJpYWJsZVNpemUpOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg cmV0dXJuIE1heFZhcmlhYmxlU2l6ZTsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArLyoqDQo+ID4gICAgID4gKyAgRmx1c2ggdGhlIEhPQiB2YXJpYWJsZSB0byBmbGFzaC4N Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBWYXJpYWJsZU5hbWUgICAgICAg TmFtZSBvZiB2YXJpYWJsZSBoYXMgYmVlbiB1cGRhdGVkIG9yDQo+ID4gZGVsZXRlZC4NCj4gPiAg ICAgPiArICBAcGFyYW1baW5dIFZlbmRvckd1aWQgICAgICAgICBHdWlkIG9mIHZhcmlhYmxlIGhh cyBiZWVuIHVwZGF0ZWQgb3INCj4gZGVsZXRlZC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoq Lw0KPiA+ICAgICA+ICtWT0lEDQo+ID4gICAgID4gK0ZsdXNoSG9iVmFyaWFibGVUb0ZsYXNoICgN Cj4gPiAgICAgPiArICBJTiBDSEFSMTYgICAgKlZhcmlhYmxlTmFtZSwNCj4gPiAgICAgPiArICBJ TiBFRklfR1VJRCAgKlZlbmRvckd1aWQNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4g PiAgICAgPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gICAgID4gKyAg VkFSSUFCTEVfU1RPUkVfSEVBREVSICAgKlZhcmlhYmxlU3RvcmVIZWFkZXI7DQo+ID4gICAgID4g KyAgVkFSSUFCTEVfSEVBREVSICAgICAgICAgKlZhcmlhYmxlOw0KPiA+ICAgICA+ICsgIFZPSUQg ICAgICAgICAgICAgICAgICAgICpWYXJpYWJsZURhdGE7DQo+ID4gICAgID4gKyAgVkFSSUFCTEVf UE9JTlRFUl9UUkFDSyAgVmFyaWFibGVQdHJUcmFjazsNCj4gPiAgICAgPiArICBCT09MRUFOICAg ICAgICAgICAgICAgICBFcnJvckZsYWc7DQo+ID4gICAgID4gKyAgQk9PTEVBTiAgICAgICAgICAg ICAgICAgQXV0aEZvcm1hdDsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgRXJyb3JGbGFnICA9 IEZBTFNFOw0KPiA+ICAgICA+ICsgIEF1dGhGb3JtYXQgPSBtVmFyaWFibGVNb2R1bGVHbG9iYWwt PlZhcmlhYmxlR2xvYmFsLkF1dGhGb3JtYXQ7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8v DQo+ID4gICAgID4gKyAgLy8gRmx1c2ggdGhlIEhPQiB2YXJpYWJsZSB0byBmbGFzaC4NCj4gPiAg ICAgPiArICAvLw0KPiA+ICAgICA+ICsgIGlmIChtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlh YmxlR2xvYmFsLkhvYlZhcmlhYmxlQmFzZSAhPSAwKSB7DQo+ID4gICAgID4gKyAgICBWYXJpYWJs ZVN0b3JlSGVhZGVyID0gKFZBUklBQkxFX1NUT1JFX0hFQURFUg0KPiA+ICAgICA+ICopKFVJTlRO KW1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuSG9iVmFyaWFibGVCYXNlOw0K PiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIC8vIFNldCBIb2JWYXJpYWJsZUJhc2Ug dG8gMCwgaXQgY2FuIGF2b2lkIFNldFZhcmlhYmxlIHRvIGNhbGwgYmFjay4NCj4gPiAgICAgPiAr ICAgIC8vDQo+ID4gICAgID4gKyAgICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xv YmFsLkhvYlZhcmlhYmxlQmFzZSA9IDA7DQo+ID4gICAgID4gKyAgICBmb3IgKCBWYXJpYWJsZSA9 IEdldFN0YXJ0UG9pbnRlciAoVmFyaWFibGVTdG9yZUhlYWRlcikNCj4gPiAgICAgPiArICAgICAg ICAgIDsgSXNWYWxpZFZhcmlhYmxlSGVhZGVyIChWYXJpYWJsZSwgR2V0RW5kUG9pbnRlcg0KPiA+ IChWYXJpYWJsZVN0b3JlSGVhZGVyKSwNCj4gPiAgICAgPiBBdXRoRm9ybWF0KQ0KPiA+ICAgICA+ ICsgICAgICAgICAgOyBWYXJpYWJsZSA9IEdldE5leHRWYXJpYWJsZVB0ciAoVmFyaWFibGUsIEF1 dGhGb3JtYXQpDQo+ID4gICAgID4gKyAgICAgICAgICApDQo+ID4gICAgID4gKyAgICB7DQo+ID4g ICAgID4gKyAgICAgIGlmIChWYXJpYWJsZS0+U3RhdGUgIT0gVkFSX0FEREVEKSB7DQo+ID4gICAg ID4gKyAgICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgICAvLyBUaGUgSE9CIHZhcmlhYmxlIGhh cyBiZWVuIHNldCB0byBERUxFVEVEIHN0YXRlIGluIGxvY2FsLg0KPiA+ICAgICA+ICsgICAgICAg IC8vDQo+ID4gICAgID4gKyAgICAgICAgY29udGludWU7DQo+ID4gICAgID4gKyAgICAgIH0NCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyAgICAgIEFTU0VSVCAoKFZhcmlhYmxlLT5BdHRyaWJ1dGVz ICYgRUZJX1ZBUklBQkxFX05PTl9WT0xBVElMRSkgIT0gMCk7DQo+ID4gICAgID4gKyAgICAgIGlm ICgoVmVuZG9yR3VpZCA9PSBOVUxMKSB8fCAoVmFyaWFibGVOYW1lID09IE5VTEwpIHx8DQo+ID4g ICAgID4gKyAgICAgICAgICAhQ29tcGFyZUd1aWQgKFZlbmRvckd1aWQsIEdldFZlbmRvckd1aWRQ dHIgKFZhcmlhYmxlLA0KPiA+IEF1dGhGb3JtYXQpKSB8fA0KPiA+ICAgICA+ICsgICAgICAgICAg KFN0ckNtcCAoVmFyaWFibGVOYW1lLCBHZXRWYXJpYWJsZU5hbWVQdHIgKFZhcmlhYmxlLA0KPiA+ IEF1dGhGb3JtYXQpKSAhPQ0KPiA+ICAgICA+IDApKQ0KPiA+ICAgICA+ICsgICAgICB7DQo+ID4g ICAgID4gKyAgICAgICAgVmFyaWFibGVEYXRhID0gR2V0VmFyaWFibGVEYXRhUHRyIChWYXJpYWJs ZSwgQXV0aEZvcm1hdCk7DQo+ID4gICAgID4gKyAgICAgICAgRmluZFZhcmlhYmxlICgNCj4gPiAg ICAgPiArICAgICAgICAgIEdldFZhcmlhYmxlTmFtZVB0ciAoVmFyaWFibGUsIEF1dGhGb3JtYXQp LA0KPiA+ICAgICA+ICsgICAgICAgICAgR2V0VmVuZG9yR3VpZFB0ciAoVmFyaWFibGUsIEF1dGhG b3JtYXQpLA0KPiA+ICAgICA+ICsgICAgICAgICAgJlZhcmlhYmxlUHRyVHJhY2ssDQo+ID4gICAg ID4gKyAgICAgICAgICAmbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbCwNCj4g PiAgICAgPiArICAgICAgICAgIEZBTFNFDQo+ID4gICAgID4gKyAgICAgICAgICApOw0KPiA+ICAg ICA+ICsgICAgICAgIFN0YXR1cyA9IFVwZGF0ZVZhcmlhYmxlICgNCj4gPiAgICAgPiArICAgICAg ICAgICAgICAgICAgIEdldFZhcmlhYmxlTmFtZVB0ciAoVmFyaWFibGUsIEF1dGhGb3JtYXQpLA0K PiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgR2V0VmVuZG9yR3VpZFB0ciAoVmFyaWFibGUs IEF1dGhGb3JtYXQpLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgVmFyaWFibGVEYXRh LA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgRGF0YVNpemVPZlZhcmlhYmxlIChWYXJp YWJsZSwgQXV0aEZvcm1hdCksDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICBWYXJpYWJs ZS0+QXR0cmlidXRlcywNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgIDAsDQo+ID4gICAg ID4gKyAgICAgICAgICAgICAgICAgICAwLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAg JlZhcmlhYmxlUHRyVHJhY2ssDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICBOVUxMDQo+ ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICApOw0KPiA+ICAgICA+ICsgICAgICAgIERFQlVH ICgoDQo+ID4gICAgID4gKyAgICAgICAgICBERUJVR19JTkZPLA0KPiA+ICAgICA+ICsgICAgICAg ICAgIlZhcmlhYmxlIGRyaXZlciBmbHVzaCB0aGUgSE9CIHZhcmlhYmxlIHRvIGZsYXNoOiAlZyAl cyAlclxuIiwNCj4gPiAgICAgPiArICAgICAgICAgIEdldFZlbmRvckd1aWRQdHIgKFZhcmlhYmxl LCBBdXRoRm9ybWF0KSwNCj4gPiAgICAgPiArICAgICAgICAgIEdldFZhcmlhYmxlTmFtZVB0ciAo VmFyaWFibGUsIEF1dGhGb3JtYXQpLA0KPiA+ICAgICA+ICsgICAgICAgICAgU3RhdHVzDQo+ID4g ICAgID4gKyAgICAgICAgICApKTsNCj4gPiAgICAgPiArICAgICAgfSBlbHNlIHsNCj4gPiAgICAg PiArICAgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAgIC8vIFRoZSB1cGRhdGVkIG9yIGRlbGV0 ZWQgdmFyaWFibGUgaXMgbWF0Y2hlZCB3aXRoIHRoaXMgSE9CIHZhcmlhYmxlLg0KPiA+ICAgICA+ ICsgICAgICAgIC8vIERvbid0IGJyZWFrIGhlcmUgYmVjYXVzZSB3ZSB3aWxsIHRyeSB0byBzZXQg b3RoZXIgSE9CIHZhcmlhYmxlcw0KPiA+ICAgICA+ICsgICAgICAgIC8vIHNpbmNlIHRoaXMgdmFy aWFibGUgY291bGQgYmUgc2V0IHN1Y2Nlc3NmdWxseS4NCj4gPiAgICAgPiArICAgICAgICAvLw0K PiA+ICAgICA+ICsgICAgICAgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KPiA+ICAgICA+ICsgICAg ICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiA+ICAgICA+ICsgICAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgICAgLy8gSWYgc2V0 IHZhcmlhYmxlIHN1Y2Nlc3NmdWwsIG9yIHRoZSB1cGRhdGVkIG9yIGRlbGV0ZWQgdmFyaWFibGUg aXMNCj4gPiBtYXRjaGVkDQo+ID4gICAgID4gd2l0aCB0aGUgSE9CIHZhcmlhYmxlLA0KPiA+ICAg ICA+ICsgICAgICAgIC8vIHNldCB0aGUgSE9CIHZhcmlhYmxlIHRvIERFTEVURUQgc3RhdGUgaW4g bG9jYWwuDQo+ID4gICAgID4gKyAgICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgICBERUJVRyAo KA0KPiA+ICAgICA+ICsgICAgICAgICAgREVCVUdfSU5GTywNCj4gPiAgICAgPiArICAgICAgICAg ICJWYXJpYWJsZSBkcml2ZXIgc2V0IHRoZSBIT0IgdmFyaWFibGUgdG8gREVMRVRFRCBzdGF0ZSBp bg0KPiA+IGxvY2FsOiAlZyAlc1xuIiwNCj4gPiAgICAgPiArICAgICAgICAgIEdldFZlbmRvckd1 aWRQdHIgKFZhcmlhYmxlLCBBdXRoRm9ybWF0KSwNCj4gPiAgICAgPiArICAgICAgICAgIEdldFZh cmlhYmxlTmFtZVB0ciAoVmFyaWFibGUsIEF1dGhGb3JtYXQpDQo+ID4gICAgID4gKyAgICAgICAg ICApKTsNCj4gPiAgICAgPiArICAgICAgICBWYXJpYWJsZS0+U3RhdGUgJj0gVkFSX0RFTEVURUQ7 DQo+ID4gICAgID4gKyAgICAgIH0gZWxzZSB7DQo+ID4gICAgID4gKyAgICAgICAgRXJyb3JGbGFn ID0gVFJVRTsNCj4gPiAgICAgPiArICAgICAgfQ0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArICAgIGlmIChtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4gICAgID4g PlZhcmlhYmxlR2xvYmFsLlZhcmlhYmxlUnVudGltZUNhY2hlQ29udGV4dC5WYXJpYWJsZVJ1bnRp bWVIb2JDYWNoZQ0KPiAuUw0KPiA+IHRvcg0KPiA+ICAgICA+IGUgIT0gTlVMTCkgew0KPiA+ICAg ICA+ICsgICAgICBTdGF0dXMgPSAgU3luY2hyb25pemVSdW50aW1lVmFyaWFibGVDYWNoZSAoDQo+ ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICZtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4g ICAgID4gPlZhcmlhYmxlR2xvYmFsLlZhcmlhYmxlUnVudGltZUNhY2hlQ29udGV4dC5WYXJpYWJs ZVJ1bnRpbWVIb2JDYWNoZSwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgMCwNCj4gPiAg ICAgPiArICAgICAgICAgICAgICAgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ICAgICA+ ID5WYXJpYWJsZUdsb2JhbC5WYXJpYWJsZVJ1bnRpbWVDYWNoZUNvbnRleHQuVmFyaWFibGVSdW50 aW1lSG9iQ2FjaGUNCj4gLlMNCj4gPiB0b3INCj4gPiAgICAgPiBlLT5TaXplDQo+ID4gICAgID4g KyAgICAgICAgICAgICAgICAgICk7DQo+ID4gICAgID4gKyAgICAgIEFTU0VSVF9FRklfRVJST1Ig KFN0YXR1cyk7DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAg aWYgKEVycm9yRmxhZykgew0KPiA+ICAgICA+ICsgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAv LyBXZSBzdGlsbCBoYXZlIEhPQiB2YXJpYWJsZShzKSBub3QgZmx1c2hlZCBpbiBmbGFzaC4NCj4g PiAgICAgPiArICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFs LT5WYXJpYWJsZUdsb2JhbC5Ib2JWYXJpYWJsZUJhc2UgPQ0KPiA+ICAgICA+IChFRklfUEhZU0lD QUxfQUREUkVTUykoVUlOVE4pVmFyaWFibGVTdG9yZUhlYWRlcjsNCj4gPiAgICAgPiArICAgIH0g ZWxzZSB7DQo+ID4gICAgID4gKyAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgIC8vIEFsbCBIT0Ig dmFyaWFibGVzIGhhdmUgYmVlbiBmbHVzaGVkIGluIGZsYXNoLg0KPiA+ICAgICA+ICsgICAgICAv Lw0KPiA+ICAgICA+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJWYXJpYWJsZSBkcml2ZXI6 IGFsbCBIT0IgdmFyaWFibGVzIGhhdmUgYmVlbg0KPiA+ICAgICA+IGZsdXNoZWQgaW4gZmxhc2gu XG4iKSk7DQo+ID4gICAgID4gKyAgICAgIGlmIChtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4g ICAgID4gPlZhcmlhYmxlR2xvYmFsLlZhcmlhYmxlUnVudGltZUNhY2hlQ29udGV4dC5Ib2JGbHVz aENvbXBsZXRlICE9DQo+IE5VTEwpDQo+ID4gew0KPiA+ICAgICA+ICsgICAgICAgICoobVZhcmlh YmxlTW9kdWxlR2xvYmFsLQ0KPiA+ICAgICA+ID5WYXJpYWJsZUdsb2JhbC5WYXJpYWJsZVJ1bnRp bWVDYWNoZUNvbnRleHQuSG9iRmx1c2hDb21wbGV0ZSkgPQ0KPiBUUlVFOw0KPiA+ICAgICA+ICsg ICAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgICBpZiAoIUF0UnVudGltZSAoKSkg ew0KPiA+ICAgICA+ICsgICAgICAgIEZyZWVQb29sICgoVk9JRCAqKVZhcmlhYmxlU3RvcmVIZWFk ZXIpOw0KPiA+ICAgICA+ICsgICAgICB9DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKyAg fQ0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiAr ICBJbml0aWFsaXplcyB2YXJpYWJsZSB3cml0ZSBzZXJ2aWNlLg0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgIEZ1bmN0aW9uIHN1Y2Nlc3NmdWxs eSBleGVjdXRlZC4NCj4gPiAgICAgPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgIEZh aWwgdG8gaW5pdGlhbGl6ZSB0aGUgdmFyaWFibGUgc2VydmljZS4NCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyoqLw0KPiA+ICAgICA+ICtFRklfU1RBVFVTDQo+ID4gICAgID4gK1ZhcmlhYmxlV3Jp dGVTZXJ2aWNlSW5pdGlhbGl6ZSAoDQo+ID4gICAgID4gKyAgVk9JRA0KPiA+ICAgICA+ICsgICkN Cj4gPiAgICAgPiArew0KPiA+ICAgICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICBTdGF0 dXM7DQo+ID4gICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiA+ICAg ICA+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICBEYXRhOw0KPiA+ICAgICA+ICsgIFZBUklB QkxFX0VOVFJZX1BST1BFUlRZICAqVmFyaWFibGVFbnRyeTsNCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgQWNxdWlyZUxvY2tPbmx5QXRCb290VGltZSAoJm1WYXJpYWJsZU1vZHVsZUdsb2JhbC0N Cj4gPiAgICAgPiA+VmFyaWFibGVHbG9iYWwuVmFyaWFibGVTZXJ2aWNlc0xvY2spOw0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIENoZWNrIGlmIHRoZSBmcmVl IGFyZWEgaXMgcmVhbGx5IGZyZWUuDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBmb3Ig KEluZGV4ID0gbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5Ob25Wb2xhdGlsZUxhc3RWYXJpYWJsZU9m ZnNldDsNCj4gPiBJbmRleCA8DQo+ID4gICAgID4gbU52VmFyaWFibGVDYWNoZS0+U2l6ZTsgSW5k ZXgrKykgew0KPiA+ICAgICA+ICsgICAgRGF0YSA9ICgoVUlOVDggKiltTnZWYXJpYWJsZUNhY2hl KVtJbmRleF07DQo+ID4gICAgID4gKyAgICBpZiAoRGF0YSAhPSAweGZmKSB7DQo+ID4gICAgID4g KyAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgIC8vIFRoZXJlIG11c3QgYmUgc29tZXRoaW5nIHdy b25nIGluIHZhcmlhYmxlIHN0b3JlLCBkbyByZWNsYWltDQo+ID4gb3BlcmF0aW9uLg0KPiA+ICAg ICA+ICsgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICBTdGF0dXMgPSBSZWNsYWltICgNCj4gPiAg ICAgPiArICAgICAgICAgICAgICAgICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4gPlZhcmlh YmxlR2xvYmFsLk5vblZvbGF0aWxlVmFyaWFibGVCYXNlLA0KPiA+ICAgICA+ICsgICAgICAgICAg ICAgICAgICZtVmFyaWFibGVNb2R1bGVHbG9iYWwtPk5vblZvbGF0aWxlTGFzdFZhcmlhYmxlT2Zm c2V0LA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgIEZBTFNFLA0KPiA+ICAgICA+ICsgICAg ICAgICAgICAgICAgIE5VTEwsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgTlVMTCwNCj4g PiAgICAgPiArICAgICAgICAgICAgICAgICAwDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAg KTsNCj4gPiAgICAgPiArICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICAgICA+ ICsgICAgICAgIFJlbGVhc2VMb2NrT25seUF0Qm9vdFRpbWUgKCZtVmFyaWFibGVNb2R1bGVHbG9i YWwtDQo+ID4gICAgID4gPlZhcmlhYmxlR2xvYmFsLlZhcmlhYmxlU2VydmljZXNMb2NrKTsNCj4g PiAgICAgPiArICAgICAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICAgICA+ICsgICAgICB9DQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgICAgICBicmVhazsNCj4gPiAgICAgPiArICAgIH0NCj4gPiAg ICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEZsdXNoSG9iVmFyaWFibGVUb0Zs YXNoIChOVUxMLCBOVUxMKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgU3RhdHVzID0gRUZJ X1NVQ0NFU1M7DQo+ID4gICAgID4gKyAgWmVyb01lbSAoJm1BdXRoQ29udGV4dE91dCwgc2l6ZW9m IChtQXV0aENvbnRleHRPdXQpKTsNCj4gPiAgICAgPiArICBpZiAobVZhcmlhYmxlTW9kdWxlR2xv YmFsLT5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0KSB7DQo+ID4gICAgID4gKyAgICAvLw0KPiA+ ICAgICA+ICsgICAgLy8gQXV0aGVudGljYXRlZCB2YXJpYWJsZSBpbml0aWFsaXplLg0KPiA+ICAg ICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIG1BdXRoQ29udGV4dEluLlN0cnVjdFNpemUgICAg ICAgICAgPSBzaXplb2YNCj4gKEFVVEhfVkFSX0xJQl9DT05URVhUX0lOKTsNCj4gPiAgICAgPiAr ICAgIG1BdXRoQ29udGV4dEluLk1heEF1dGhWYXJpYWJsZVNpemUgPSAgbVZhcmlhYmxlTW9kdWxl R2xvYmFsLQ0KPiA+ICAgICA+ID5NYXhBdXRoVmFyaWFibGVTaXplIC0NCj4gPiAgICAgPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRWYXJpYWJsZUhlYWRlclNp emUgKG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCj4gPiAgICAgPiA+VmFyaWFibGVHbG9iYWwuQXV0 aEZvcm1hdCk7DQo+ID4gICAgID4gKyAgICBTdGF0dXMgPSBBdXRoVmFyaWFibGVMaWJJbml0aWFs aXplICgmbUF1dGhDb250ZXh0SW4sDQo+ID4gJm1BdXRoQ29udGV4dE91dCk7DQo+ID4gICAgID4g KyAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICAgICA+ICsgICAgICBERUJVRyAo KERFQlVHX0lORk8sICJWYXJpYWJsZSBkcml2ZXIgd2lsbCB3b3JrIHdpdGggYXV0aCB2YXJpYWJs ZQ0KPiA+ICAgICA+IHN1cHBvcnQhXG4iKSk7DQo+ID4gICAgID4gKyAgICAgIG1WYXJpYWJsZU1v ZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuQXV0aFN1cHBvcnQgPSBUUlVFOw0KPiA+ICAgICA+ ICsgICAgICBpZiAobUF1dGhDb250ZXh0T3V0LkF1dGhWYXJFbnRyeSAhPSBOVUxMKSB7DQo+ID4g ICAgID4gKyAgICAgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgbUF1dGhDb250ZXh0T3V0LkF1 dGhWYXJFbnRyeUNvdW50Ow0KPiBJbmRleCsrKQ0KPiA+IHsNCj4gPiAgICAgPiArICAgICAgICAg IFZhcmlhYmxlRW50cnkgPSAmbUF1dGhDb250ZXh0T3V0LkF1dGhWYXJFbnRyeVtJbmRleF07DQo+ ID4gICAgID4gKyAgICAgICAgICBTdGF0dXMgICAgICAgID0gVmFyQ2hlY2tMaWJWYXJpYWJsZVBy b3BlcnR5U2V0ICgNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlh YmxlRW50cnktPk5hbWUsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBW YXJpYWJsZUVudHJ5LT5HdWlkLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJlZhcmlhYmxlRW50cnktPlZhcmlhYmxlUHJvcGVydHkNCj4gPiAgICAgPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7DQo+ID4gICAgID4gKyAgICAgICAgICBBU1NFUlRfRUZJX0VS Uk9SIChTdGF0dXMpOw0KPiA+ICAgICA+ICsgICAgICAgIH0NCj4gPiAgICAgPiArICAgICAgfQ0K PiA+ICAgICA+ICsgICAgfSBlbHNlIGlmIChTdGF0dXMgPT0gRUZJX1VOU1VQUE9SVEVEKSB7DQo+ ID4gICAgID4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIk5PVElDRSAtIEF1dGhWYXJpYWJs ZUxpYkluaXRpYWxpemUoKQ0KPiA+IHJldHVybnMgJXIhXG4iLA0KPiA+ICAgICA+IFN0YXR1cykp Ow0KPiA+ICAgICA+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJWYXJpYWJsZSBkcml2ZXIg d2lsbCBjb250aW51ZSB0byB3b3JrIHdpdGhvdXQNCj4gPiBhdXRoDQo+ID4gICAgID4gdmFyaWFi bGUgc3VwcG9ydCFcbiIpKTsNCj4gPiAgICAgPiArICAgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFs LT5WYXJpYWJsZUdsb2JhbC5BdXRoU3VwcG9ydCA9IEZBTFNFOw0KPiA+ICAgICA+ICsgICAgICBT dGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gRUZJX1NV Q0NFU1M7DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICAgICA+ICsgICAgZm9y IChJbmRleCA9IDA7IEluZGV4IDwgQVJSQVlfU0laRSAobVZhcmlhYmxlRW50cnlQcm9wZXJ0eSk7 IEluZGV4KyspDQo+IHsNCj4gPiAgICAgPiArICAgICAgVmFyaWFibGVFbnRyeSA9ICZtVmFyaWFi bGVFbnRyeVByb3BlcnR5W0luZGV4XTsNCj4gPiAgICAgPiArICAgICAgU3RhdHVzICAgICAgICA9 IFZhckNoZWNrTGliVmFyaWFibGVQcm9wZXJ0eVNldCAoVmFyaWFibGVFbnRyeS0+TmFtZSwNCj4g PiAgICAgPiBWYXJpYWJsZUVudHJ5LT5HdWlkLCAmVmFyaWFibGVFbnRyeS0+VmFyaWFibGVQcm9w ZXJ0eSk7DQo+ID4gICAgID4gKyAgICAgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4g ICAgID4gKyAgICB9DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBS ZWxlYXNlTG9ja09ubHlBdEJvb3RUaW1lICgmbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ICAg ICA+ID5WYXJpYWJsZUdsb2JhbC5WYXJpYWJsZVNlcnZpY2VzTG9jayk7DQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gSW5pdGlhbGl6ZSBNT1IgTG9jayB2YXJp YWJsZS4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIE1vckxvY2tJbml0ICgpOw0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICAgICA+ICt9DQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBDb252ZXJ0IG5vcm1hbCB2YXJp YWJsZSBzdG9yYWdlIHRvIHRoZSBhbGxvY2F0ZWQgYXV0aCB2YXJpYWJsZSBzdG9yYWdlLg0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1baW5dICBOb3JtYWxWYXJTdG9yYWdlICBQb2lu dGVyIHRvIHRoZSBub3JtYWwgdmFyaWFibGUgc3RvcmFnZQ0KPiA+ICAgICA+IGhlYWRlcg0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICBAcmV0dmFsIHRoZSBhbGxvY2F0ZWQgYXV0aCB2YXJpYWJs ZSBzdG9yYWdlDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtWT0lEICoNCj4gPiAgICAgPiAr Q29udmVydE5vcm1hbFZhclN0b3JhZ2VUb0F1dGhWYXJTdG9yYWdlICgNCj4gPiAgICAgPiArICBW QVJJQUJMRV9TVE9SRV9IRUFERVIgICpOb3JtYWxWYXJTdG9yYWdlDQo+ID4gICAgID4gKyAgKQ0K PiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgVkFSSUFCTEVfSEVBREVSICAgICAgICAgICAgICAg ICpTdGFydFB0cjsNCj4gPiAgICAgPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAg Kk5leHRQdHI7DQo+ID4gICAgID4gKyAgVkFSSUFCTEVfSEVBREVSICAgICAgICAgICAgICAgICpF bmRQdHI7DQo+ID4gICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhW YXJTdG9yYWdlU2l6ZTsNCj4gPiAgICAgPiArICBBVVRIRU5USUNBVEVEX1ZBUklBQkxFX0hFQURF UiAgKkF1dGhTdGFydFB0cjsNCj4gPiAgICAgPiArICBWQVJJQUJMRV9TVE9SRV9IRUFERVIgICAg ICAgICAgKkF1dGhWYXJTdG9yYWdlOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBBdXRoVmFy U3RvcmFnZVNpemUgPSBzaXplb2YgKFZBUklBQkxFX1NUT1JFX0hFQURFUik7DQo+ID4gICAgID4g KyAgLy8NCj4gPiAgICAgPiArICAvLyBTZXQgQXV0aEZvcm1hdCBhcyBGQUxTRSBmb3Igbm9ybWFs IHZhcmlhYmxlIHN0b3JhZ2UNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIG1WYXJpYWJs ZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdCA9IEZBTFNFOw0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIENhbGN1bGF0ZSBBdXRoIFZh cmlhYmxlIFN0b3JhZ2UgU2l6ZQ0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgU3RhcnRQ dHIgPSBHZXRTdGFydFBvaW50ZXIgKE5vcm1hbFZhclN0b3JhZ2UpOw0KPiA+ICAgICA+ICsgIEVu ZFB0ciAgID0gR2V0RW5kUG9pbnRlciAoTm9ybWFsVmFyU3RvcmFnZSk7DQo+ID4gICAgID4gKyAg d2hpbGUgKFN0YXJ0UHRyIDwgRW5kUHRyKSB7DQo+ID4gICAgID4gKyAgICBpZiAoU3RhcnRQdHIt PlN0YXRlID09IFZBUl9BRERFRCkgew0KPiA+ICAgICA+ICsgICAgICBBdXRoVmFyU3RvcmFnZVNp emUgID0gSEVBREVSX0FMSUdOIChBdXRoVmFyU3RvcmFnZVNpemUpOw0KPiA+ICAgICA+ICsgICAg ICBBdXRoVmFyU3RvcmFnZVNpemUgKz0gc2l6ZW9mIChBVVRIRU5USUNBVEVEX1ZBUklBQkxFX0hF QURFUik7DQo+ID4gICAgID4gKyAgICAgIEF1dGhWYXJTdG9yYWdlU2l6ZSArPSBTdGFydFB0ci0+ TmFtZVNpemUgKyBHRVRfUEFEX1NJWkUgKFN0YXJ0UHRyLQ0KPiA+ICAgICA+ID5OYW1lU2l6ZSk7 DQo+ID4gICAgID4gKyAgICAgIEF1dGhWYXJTdG9yYWdlU2l6ZSArPSBTdGFydFB0ci0+RGF0YVNp emUgKyBHRVRfUEFEX1NJWkUgKFN0YXJ0UHRyLQ0KPiA+ICAgICA+ID5EYXRhU2l6ZSk7DQo+ID4g ICAgID4gKyAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgU3RhcnRQdHIgPSBHZXRO ZXh0VmFyaWFibGVQdHIgKFN0YXJ0UHRyLCBtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4gICAg ID4gPlZhcmlhYmxlR2xvYmFsLkF1dGhGb3JtYXQpOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBBbGxvY2F0ZSBSdW50aW1lIG1l bW9yeSBmb3IgQXV0aCBWYXJpYWJsZSBTdG9yYWdlDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAg PiArICBBdXRoVmFyU3RvcmFnZSA9IEFsbG9jYXRlUnVudGltZVplcm9Qb29sIChBdXRoVmFyU3Rv cmFnZVNpemUpOw0KPiA+ICAgICA+ICsgIEFTU0VSVCAoQXV0aFZhclN0b3JhZ2UgIT0gTlVMTCk7 DQo+ID4gICAgID4gKyAgaWYgKEF1dGhWYXJTdG9yYWdlID09IE5VTEwpIHsNCj4gPiAgICAgPiAr ICAgIHJldHVybiBOVUxMOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgLy8NCj4gPiAgICAgPiArICAvLyBDb3B5IFZhcmlhYmxlIGZyb20gTm9ybWFsIHN0b3JhZ2Ug dG8gQXV0aCBzdG9yYWdlDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBTdGFydFB0ciAg ICAgPSBHZXRTdGFydFBvaW50ZXIgKE5vcm1hbFZhclN0b3JhZ2UpOw0KPiA+ICAgICA+ICsgIEVu ZFB0ciAgICAgICA9IEdldEVuZFBvaW50ZXIgKE5vcm1hbFZhclN0b3JhZ2UpOw0KPiA+ICAgICA+ ICsgIEF1dGhTdGFydFB0ciA9IChBVVRIRU5USUNBVEVEX1ZBUklBQkxFX0hFQURFUiAqKUdldFN0 YXJ0UG9pbnRlcg0KPiA+ICAgICA+IChBdXRoVmFyU3RvcmFnZSk7DQo+ID4gICAgID4gKyAgd2hp bGUgKFN0YXJ0UHRyIDwgRW5kUHRyKSB7DQo+ID4gICAgID4gKyAgICBpZiAoU3RhcnRQdHItPlN0 YXRlID09IFZBUl9BRERFRCkgew0KPiA+ICAgICA+ICsgICAgICBBdXRoU3RhcnRQdHIgPSAoQVVU SEVOVElDQVRFRF9WQVJJQUJMRV9IRUFERVINCj4gKilIRUFERVJfQUxJR04NCj4gPiAgICAgPiAo QXV0aFN0YXJ0UHRyKTsNCj4gPiAgICAgPiArICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgLy8g Q29weSBWYXJpYWJsZSBIZWFkZXINCj4gPiAgICAgPiArICAgICAgLy8NCj4gPiAgICAgPiArICAg ICAgQXV0aFN0YXJ0UHRyLT5TdGFydElkICAgID0gU3RhcnRQdHItPlN0YXJ0SWQ7DQo+ID4gICAg ID4gKyAgICAgIEF1dGhTdGFydFB0ci0+U3RhdGUgICAgICA9IFN0YXJ0UHRyLT5TdGF0ZTsNCj4g PiAgICAgPiArICAgICAgQXV0aFN0YXJ0UHRyLT5BdHRyaWJ1dGVzID0gU3RhcnRQdHItPkF0dHJp YnV0ZXM7DQo+ID4gICAgID4gKyAgICAgIEF1dGhTdGFydFB0ci0+TmFtZVNpemUgICA9IFN0YXJ0 UHRyLT5OYW1lU2l6ZTsNCj4gPiAgICAgPiArICAgICAgQXV0aFN0YXJ0UHRyLT5EYXRhU2l6ZSAg ID0gU3RhcnRQdHItPkRhdGFTaXplOw0KPiA+ICAgICA+ICsgICAgICBDb3B5R3VpZCAoJkF1dGhT dGFydFB0ci0+VmVuZG9yR3VpZCwgJlN0YXJ0UHRyLT5WZW5kb3JHdWlkKTsNCj4gPiAgICAgPiAr ICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgLy8gQ29weSBWYXJpYWJsZSBOYW1lDQo+ID4gICAg ID4gKyAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgIE5leHRQdHIgPSAoVUlOVDggKikoQXV0aFN0 YXJ0UHRyICsgMSk7DQo+ID4gICAgID4gKyAgICAgIENvcHlNZW0gKA0KPiA+ICAgICA+ICsgICAg ICAgIE5leHRQdHIsDQo+ID4gICAgID4gKyAgICAgICAgR2V0VmFyaWFibGVOYW1lUHRyIChTdGFy dFB0ciwgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ICAgICA+ID5WYXJpYWJsZUdsb2JhbC5B dXRoRm9ybWF0KSwNCj4gPiAgICAgPiArICAgICAgICBBdXRoU3RhcnRQdHItPk5hbWVTaXplDQo+ ID4gICAgID4gKyAgICAgICAgKTsNCj4gPiAgICAgPiArICAgICAgLy8NCj4gPiAgICAgPiArICAg ICAgLy8gQ29weSBWYXJpYWJsZSBEYXRhDQo+ID4gICAgID4gKyAgICAgIC8vDQo+ID4gICAgID4g KyAgICAgIE5leHRQdHIgPSBOZXh0UHRyICsgQXV0aFN0YXJ0UHRyLT5OYW1lU2l6ZSArIEdFVF9Q QURfU0laRQ0KPiA+IChBdXRoU3RhcnRQdHItDQo+ID4gICAgID4gPk5hbWVTaXplKTsNCj4gPiAg ICAgPiArICAgICAgQ29weU1lbSAoTmV4dFB0ciwgR2V0VmFyaWFibGVEYXRhUHRyIChTdGFydFB0 ciwNCj4gPiBtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4gICAgID4gPlZhcmlhYmxlR2xvYmFs LkF1dGhGb3JtYXQpLCBBdXRoU3RhcnRQdHItPkRhdGFTaXplKTsNCj4gPiAgICAgPiArICAgICAg Ly8NCj4gPiAgICAgPiArICAgICAgLy8gR28gdG8gbmV4dCB2YXJpYWJsZQ0KPiA+ICAgICA+ICsg ICAgICAvLw0KPiA+ICAgICA+ICsgICAgICBBdXRoU3RhcnRQdHIgPSAoQVVUSEVOVElDQVRFRF9W QVJJQUJMRV9IRUFERVIgKikoTmV4dFB0ciArDQo+ID4gICAgID4gQXV0aFN0YXJ0UHRyLT5EYXRh U2l6ZSArIEdFVF9QQURfU0laRSAoQXV0aFN0YXJ0UHRyLT5EYXRhU2l6ZSkpOw0KPiA+ICAgICA+ ICsgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgIFN0YXJ0UHRyID0gR2V0TmV4dFZh cmlhYmxlUHRyIChTdGFydFB0ciwgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ICAgICA+ID5W YXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0KTsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gVXBkYXRlIEF1dGggU3RvcmFnZSBIZWFk ZXINCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIEF1dGhWYXJTdG9yYWdlLT5Gb3JtYXQg PSBOb3JtYWxWYXJTdG9yYWdlLT5Gb3JtYXQ7DQo+ID4gICAgID4gKyAgQXV0aFZhclN0b3JhZ2Ut PlN0YXRlICA9IE5vcm1hbFZhclN0b3JhZ2UtPlN0YXRlOw0KPiA+ICAgICA+ICsgIEF1dGhWYXJT dG9yYWdlLT5TaXplICAgPSAoVUlOVDMyKSgoVUlOVE4pQXV0aFN0YXJ0UHRyIC0NCj4gPiAgICAg PiAoVUlOVE4pQXV0aFZhclN0b3JhZ2UpOw0KPiA+ICAgICA+ICsgIENvcHlHdWlkICgmQXV0aFZh clN0b3JhZ2UtPlNpZ25hdHVyZSwNCj4gJmdFZmlBdXRoZW50aWNhdGVkVmFyaWFibGVHdWlkKTsN Cj4gPiAgICAgPiArICBBU1NFUlQgKEF1dGhWYXJTdG9yYWdlLT5TaXplIDw9IEF1dGhWYXJTdG9y YWdlU2l6ZSk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8g UmVzdG9yZSBBdXRoRm9ybWF0DQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBtVmFyaWFi bGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLkF1dGhGb3JtYXQgPSBUUlVFOw0KPiA+ICAg ICA+ICsgIHJldHVybiBBdXRoVmFyU3RvcmFnZTsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgR2V0IEhPQiB2YXJpYWJsZSBzdG9yZS4NCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBWYXJpYWJsZUd1aWQgICAgICAgTlYg dmFyaWFibGUgc3RvcmUgc2lnbmF0dXJlLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBGdW5jdGlvbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQu DQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgRmFpbCB0byBhbGxv Y2F0ZSBlbm91Z2ggbWVtb3J5DQo+ID4gcmVzb3VyY2UuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsqKi8NCj4gPiAgICAgPiArRUZJX1NUQVRVUw0KPiA+ICAgICA+ICtHZXRIb2JWYXJpYWJsZVN0 b3JlICgNCj4gPiAgICAgPiArICBJTiBFRklfR1VJRCAgKlZhcmlhYmxlR3VpZA0KPiA+ICAgICA+ ICsgICkNCj4gPiAgICAgPiArew0KPiA+ICAgICA+ICsgIFZBUklBQkxFX1NUT1JFX0hFQURFUiAg KlZhcmlhYmxlU3RvcmVIZWFkZXI7DQo+ID4gICAgID4gKyAgVUlOVDY0ICAgICAgICAgICAgICAg ICBWYXJpYWJsZVN0b3JlTGVuZ3RoOw0KPiA+ICAgICA+ICsgIEVGSV9IT0JfR1VJRF9UWVBFICAg ICAgKkd1aWRIb2I7DQo+ID4gICAgID4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICBOZWVkQ29u dmVydE5vcm1hbFRvQXV0aDsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAg PiArICAvLyBNYWtlIHN1cmUgdGhlcmUgaXMgbm8gbW9yZSB0aGFuIG9uZSBWYXJpYWJsZSBIT0Iu DQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBERUJVR19DT0RFX0JFR0lOICgpOw0KPiA+ ICAgICA+ICsgIEd1aWRIb2IgPSBHZXRGaXJzdEd1aWRIb2IgKCZnRWZpQXV0aGVudGljYXRlZFZh cmlhYmxlR3VpZCk7DQo+ID4gICAgID4gKyAgaWYgKEd1aWRIb2IgIT0gTlVMTCkgew0KPiA+ICAg ICA+ICsgICAgaWYgKChHZXROZXh0R3VpZEhvYiAoJmdFZmlBdXRoZW50aWNhdGVkVmFyaWFibGVH dWlkLCBHRVRfTkVYVF9IT0INCj4gPiAgICAgPiAoR3VpZEhvYikpICE9IE5VTEwpKSB7DQo+ID4g ICAgID4gKyAgICAgIERFQlVHICgoREVCVUdfRVJST1IsICJFUlJPUjogRm91bmQgdHdvIEF1dGgg VmFyaWFibGUgSE9Cc1xuIikpOw0KPiA+ICAgICA+ICsgICAgICBBU1NFUlQgKEZBTFNFKTsNCj4g PiAgICAgPiArICAgIH0gZWxzZSBpZiAoR2V0Rmlyc3RHdWlkSG9iICgmZ0VmaVZhcmlhYmxlR3Vp ZCkgIT0gTlVMTCkgew0KPiA+ICAgICA+ICsgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiRVJS T1I6IEZvdW5kIG9uZSBBdXRoICsgb25lIE5vcm1hbA0KPiA+IFZhcmlhYmxlDQo+ID4gICAgID4g SE9Cc1xuIikpOw0KPiA+ICAgICA+ICsgICAgICBBU1NFUlQgKEZBTFNFKTsNCj4gPiAgICAgPiAr ICAgIH0NCj4gPiAgICAgPiArICB9IGVsc2Ugew0KPiA+ICAgICA+ICsgICAgR3VpZEhvYiA9IEdl dEZpcnN0R3VpZEhvYiAoJmdFZmlWYXJpYWJsZUd1aWQpOw0KPiA+ICAgICA+ICsgICAgaWYgKEd1 aWRIb2IgIT0gTlVMTCkgew0KPiA+ICAgICA+ICsgICAgICBpZiAoKEdldE5leHRHdWlkSG9iICgm Z0VmaVZhcmlhYmxlR3VpZCwgR0VUX05FWFRfSE9CDQo+IChHdWlkSG9iKSkgIT0NCj4gPiAgICAg PiBOVUxMKSkgew0KPiA+ICAgICA+ICsgICAgICAgIERFQlVHICgoREVCVUdfRVJST1IsICJFUlJP UjogRm91bmQgdHdvIE5vcm1hbCBWYXJpYWJsZQ0KPiA+IEhPQnNcbiIpKTsNCj4gPiAgICAgPiAr ICAgICAgICBBU1NFUlQgKEZBTFNFKTsNCj4gPiAgICAgPiArICAgICAgfQ0KPiA+ICAgICA+ICsg ICAgfQ0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgREVCVUdfQ09E RV9FTkQgKCk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8g Q29tYmluYXRpb25zIHN1cHBvcnRlZDoNCj4gPiAgICAgPiArICAvLyAxLiBOb3JtYWwgTlYgdmFy aWFibGUgc3RvcmUgKw0KPiA+ICAgICA+ICsgIC8vICAgIE5vcm1hbCBIT0IgdmFyaWFibGUgc3Rv cmUNCj4gPiAgICAgPiArICAvLyAyLiBBdXRoIE5WIHZhcmlhYmxlIHN0b3JlICsNCj4gPiAgICAg PiArICAvLyAgICBBdXRoIEhPQiB2YXJpYWJsZSBzdG9yZQ0KPiA+ICAgICA+ICsgIC8vIDMuIEF1 dGggTlYgdmFyaWFibGUgc3RvcmUgKw0KPiA+ICAgICA+ICsgIC8vICAgIE5vcm1hbCBIT0IgdmFy aWFibGUgc3RvcmUgKGNvZGUgd2lsbCBjb252ZXJ0IGl0IHRvIEF1dGggRm9ybWF0KQ0KPiA+ICAg ICA+ICsgIC8vDQo+ID4gICAgID4gKyAgTmVlZENvbnZlcnROb3JtYWxUb0F1dGggPSBGQUxTRTsN Cj4gPiAgICAgPiArICBHdWlkSG9iICAgICAgICAgICAgICAgICA9IEdldEZpcnN0R3VpZEhvYiAo VmFyaWFibGVHdWlkKTsNCj4gPiAgICAgPiArICBpZiAoKEd1aWRIb2IgPT0gTlVMTCkgJiYgKFZh cmlhYmxlR3VpZCA9PQ0KPiA+ICZnRWZpQXV0aGVudGljYXRlZFZhcmlhYmxlR3VpZCkpIHsNCj4g PiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICAvLyBUcnkgZ2V0dGluZyBpdCBmcm9tIG5v cm1hbCB2YXJpYWJsZSBIT0INCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICBHdWlk SG9iICAgICAgICAgICAgICAgICA9IEdldEZpcnN0R3VpZEhvYiAoJmdFZmlWYXJpYWJsZUd1aWQp Ow0KPiA+ICAgICA+ICsgICAgTmVlZENvbnZlcnROb3JtYWxUb0F1dGggPSBUUlVFOw0KPiA+ICAg ICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgaWYgKEd1aWRIb2IgIT0gTlVMTCkg ew0KPiA+ICAgICA+ICsgICAgVmFyaWFibGVTdG9yZUhlYWRlciA9IEdFVF9HVUlEX0hPQl9EQVRB IChHdWlkSG9iKTsNCj4gPiAgICAgPiArICAgIFZhcmlhYmxlU3RvcmVMZW5ndGggPSBHdWlkSG9i LT5IZWFkZXIuSG9iTGVuZ3RoIC0gc2l6ZW9mDQo+ID4gICAgID4gKEVGSV9IT0JfR1VJRF9UWVBF KTsNCj4gPiAgICAgPiArICAgIGlmIChHZXRWYXJpYWJsZVN0b3JlU3RhdHVzIChWYXJpYWJsZVN0 b3JlSGVhZGVyKSA9PSBFZmlWYWxpZCkgew0KPiA+ICAgICA+ICsgICAgICBpZiAoIU5lZWRDb252 ZXJ0Tm9ybWFsVG9BdXRoKSB7DQo+ID4gICAgID4gKyAgICAgICAgbVZhcmlhYmxlTW9kdWxlR2xv YmFsLT5WYXJpYWJsZUdsb2JhbC5Ib2JWYXJpYWJsZUJhc2UgPQ0KPiA+ICAgICA+IChFRklfUEhZ U0lDQUxfQUREUkVTUykoVUlOVE4pQWxsb2NhdGVSdW50aW1lQ29weVBvb2wNCj4gPiAgICAgPiAo KFVJTlROKVZhcmlhYmxlU3RvcmVMZW5ndGgsIChWT0lEICopVmFyaWFibGVTdG9yZUhlYWRlcik7 DQo+ID4gICAgID4gKyAgICAgIH0gZWxzZSB7DQo+ID4gICAgID4gKyAgICAgICAgbVZhcmlhYmxl TW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5Ib2JWYXJpYWJsZUJhc2UgPQ0KPiA+ICAgICA+ DQo+ID4NCj4gKEVGSV9QSFlTSUNBTF9BRERSRVNTKShVSU5UTilDb252ZXJ0Tm9ybWFsVmFyU3Rv cmFnZVRvQXV0aFZhclN0b3JhZ2UNCj4gPiAgICAgPiAoKFZPSUQgKilWYXJpYWJsZVN0b3JlSGVh ZGVyKTsNCj4gPiAgICAgPiArICAgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgICAg aWYgKG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuSG9iVmFyaWFibGVCYXNl ID09IDApIHsNCj4gPiAgICAgPiArICAgICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7 DQo+ID4gICAgID4gKyAgICAgIH0NCj4gPiAgICAgPiArICAgIH0gZWxzZSB7DQo+ID4gICAgID4g KyAgICAgIERFQlVHICgoREVCVUdfRVJST1IsICJIT0IgVmFyaWFibGUgU3RvcmUgaGVhZGVyIGlz DQo+IGNvcnJ1cHRlZCFcbiIpKTsNCj4gPiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArICB9DQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiAgICAgPiAr fQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgSW5pdGlhbGl6ZXMg dmFyaWFibGUgc3RvcmUgYXJlYSBmb3Igbm9uLXZvbGF0aWxlIGFuZCB2b2xhdGlsZSB2YXJpYWJs ZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICAgRnVuY3Rpb24gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLg0KPiA+ICAgICA+ICsgIEByZXR2YWwg RUZJX09VVF9PRl9SRVNPVVJDRVMgIEZhaWwgdG8gYWxsb2NhdGUgZW5vdWdoIG1lbW9yeQ0KPiA+ IHJlc291cmNlLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK0VGSV9T VEFUVVMNCj4gPiAgICAgPiArVmFyaWFibGVDb21tb25Jbml0aWFsaXplICgNCj4gPiAgICAgPiAr ICBWT0lEDQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgRUZJX1NU QVRVUyAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gICAgID4gKyAgVkFSSUFCTEVfU1RPUkVfSEVB REVSICAqVm9sYXRpbGVWYXJpYWJsZVN0b3JlOw0KPiA+ICAgICA+ICsgIFVJTlROICAgICAgICAg ICAgICAgICAgU2NyYXRjaFNpemU7DQo+ID4gICAgID4gKyAgRUZJX0dVSUQgICAgICAgICAgICAg ICAqVmFyaWFibGVHdWlkOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ ICsgIC8vIEFsbG9jYXRlIHJ1bnRpbWUgbWVtb3J5IGZvciB2YXJpYWJsZSBkcml2ZXIgZ2xvYmFs IHN0cnVjdHVyZS4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIG1WYXJpYWJsZU1vZHVs ZUdsb2JhbCA9IEFsbG9jYXRlUnVudGltZVplcm9Qb29sIChzaXplb2YNCj4gPiAgICAgPiAoVkFS SUFCTEVfTU9EVUxFX0dMT0JBTCkpOw0KPiA+ICAgICA+ICsgIGlmIChtVmFyaWFibGVNb2R1bGVH bG9iYWwgPT0gTlVMTCkgew0KPiA+ICAgICA+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VS Q0VTOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgSW5pdGlhbGl6 ZUxvY2sgKCZtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4gICAgID4gPlZhcmlhYmxlR2xvYmFs LlZhcmlhYmxlU2VydmljZXNMb2NrLCBUUExfTk9USUZZKTsNCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBJbml0IG5vbi12b2xhdGlsZSB2YXJpYWJsZSBzdG9y ZS4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIFN0YXR1cyA9IEluaXROb25Wb2xhdGls ZVZhcmlhYmxlU3RvcmUgKCk7DQo+ID4gICAgID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiA+ICAgICA+ICsgICAgRnJlZVBvb2wgKG1WYXJpYWJsZU1vZHVsZUdsb2JhbCk7DQo+ID4g ICAgID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZh cmlhYmxlR2xvYmFsLkF1dGhGb3JtYXQNCj4gPiAgICAgPiArICAvLyBoYXMgYmVlbiBpbml0aWFs aXplZCBpbiBJbml0Tm9uVm9sYXRpbGVWYXJpYWJsZVN0b3JlKCkuDQo+ID4gICAgID4gKyAgLy8N Cj4gPiAgICAgPiArICBpZiAobVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5B dXRoRm9ybWF0KSB7DQo+ID4gICAgID4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJWYXJpYWJs ZSBkcml2ZXIgd2lsbCB3b3JrIHdpdGggYXV0aCB2YXJpYWJsZQ0KPiA+ICAgICA+IGZvcm1hdCFc biIpKTsNCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICAvLyBTZXQgQXV0aFN1cHBv cnQgdG8gRkFMU0UgZmlyc3QsIFZhcmlhYmxlV3JpdGVTZXJ2aWNlSW5pdGlhbGl6ZSgpIHdpbGwN Cj4gPiBpbml0aWFsaXplDQo+ID4gICAgID4gaXQuDQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAg ICA+ICsgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5BdXRoU3VwcG9y dCA9IEZBTFNFOw0KPiA+ICAgICA+ICsgICAgVmFyaWFibGVHdWlkICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA9ICZnRWZpQXV0aGVudGljYXRlZFZhcmlhYmxlR3VpZDsNCj4g PiAgICAgPiArICB9IGVsc2Ugew0KPiA+ICAgICA+ICsgICAgREVCVUcgKChERUJVR19JTkZPLCAi VmFyaWFibGUgZHJpdmVyIHdpbGwgd29yayB3aXRob3V0IGF1dGggdmFyaWFibGUNCj4gPiAgICAg PiBzdXBwb3J0IVxuIikpOw0KPiA+ICAgICA+ICsgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5W YXJpYWJsZUdsb2JhbC5BdXRoU3VwcG9ydCA9IEZBTFNFOw0KPiA+ICAgICA+ICsgICAgVmFyaWFi bGVHdWlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZnRWZpVmFyaWFi bGVHdWlkOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4g PiAgICAgPiArICAvLyBHZXQgSE9CIHZhcmlhYmxlIHN0b3JlLg0KPiA+ICAgICA+ICsgIC8vDQo+ ID4gICAgID4gKyAgU3RhdHVzID0gR2V0SG9iVmFyaWFibGVTdG9yZSAoVmFyaWFibGVHdWlkKTsN Cj4gPiAgICAgPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAgID4gKyAgICBp ZiAobU52RnZIZWFkZXJDYWNoZSAhPSBOVUxMKSB7DQo+ID4gICAgID4gKyAgICAgIEZyZWVQb29s IChtTnZGdkhlYWRlckNhY2hlKTsNCj4gPiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyAgICBGcmVlUG9vbCAobVZhcmlhYmxlTW9kdWxlR2xvYmFsKTsNCj4gPiAgICAgPiAr ICAgIHJldHVybiBTdGF0dXM7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPk1heFZvbGF0aWxlVmFyaWFibGVTaXplID0gKChQ Y2RHZXQzMg0KPiA+ICAgICA+IChQY2RNYXhWb2xhdGlsZVZhcmlhYmxlU2l6ZSkgIT0gMCkgPw0K PiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUGNkR2V0MzIgKFBjZE1heFZvbGF0aWxlVmFyaWFibGVTaXplKSA6DQo+ID4gICAgID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVmFy aWFibGVNb2R1bGVHbG9iYWwtPk1heFZhcmlhYmxlU2l6ZQ0KPiA+ICAgICA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiAgICAgPiAr ICAvLw0KPiA+ICAgICA+ICsgIC8vIEFsbG9jYXRlIG1lbW9yeSBmb3Igdm9sYXRpbGUgdmFyaWFi bGUgc3RvcmUsIG5vdGUgdGhhdCB0aGVyZSBpcyBhDQo+IHNjcmF0Y2gNCj4gPiAgICAgPiBzcGFj ZSB0byBzdG9yZSBzY3JhdGNoIGRhdGEuDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBT Y3JhdGNoU2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gR2V0TWF4VmFyaWFibGVT aXplICgpICogMjsNCj4gPiAgICAgPiArICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlNjcmF0Y2hC dWZmZXJTaXplID0gU2NyYXRjaFNpemU7DQo+ID4gICAgID4gKyAgVm9sYXRpbGVWYXJpYWJsZVN0 b3JlICAgICAgICAgICAgICAgICAgICA9IEFsbG9jYXRlUnVudGltZVBvb2wgKFBjZEdldDMyDQo+ ID4gICAgID4gKFBjZFZhcmlhYmxlU3RvcmVTaXplKSArIFNjcmF0Y2hTaXplKTsNCj4gPiAgICAg PiArICBpZiAoVm9sYXRpbGVWYXJpYWJsZVN0b3JlID09IE5VTEwpIHsNCj4gPiAgICAgPiArICAg IGlmIChtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLkhvYlZhcmlhYmxlQmFz ZSAhPSAwKSB7DQo+ID4gICAgID4gKyAgICAgIEZyZWVQb29sICgoVk9JRCAqKShVSU5UTiltVmFy aWFibGVNb2R1bGVHbG9iYWwtDQo+ID4gICAgID4gPlZhcmlhYmxlR2xvYmFsLkhvYlZhcmlhYmxl QmFzZSk7DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgaWYg KG1OdkZ2SGVhZGVyQ2FjaGUgIT0gTlVMTCkgew0KPiA+ICAgICA+ICsgICAgICBGcmVlUG9vbCAo bU52RnZIZWFkZXJDYWNoZSk7DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsgICAgRnJlZVBvb2wgKG1WYXJpYWJsZU1vZHVsZUdsb2JhbCk7DQo+ID4gICAgID4gKyAg ICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArICBTZXRNZW0gKFZvbGF0aWxlVmFyaWFibGVTdG9yZSwgUGNkR2V0MzIg KFBjZFZhcmlhYmxlU3RvcmVTaXplKSArDQo+ID4gU2NyYXRjaFNpemUsDQo+ID4gICAgID4gMHhm Zik7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gSW5pdGlh bGl6ZSBWYXJpYWJsZSBTcGVjaWZpYyBEYXRhLg0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4g KyAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5Wb2xhdGlsZVZhcmlhYmxl QmFzZSA9DQo+ID4gICAgID4gKEVGSV9QSFlTSUNBTF9BRERSRVNTKShVSU5UTilWb2xhdGlsZVZh cmlhYmxlU3RvcmU7DQo+ID4gICAgID4gKyAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5Wb2xhdGls ZUxhc3RWYXJpYWJsZU9mZnNldCAgICAgICAgICA9DQo+ID4gICAgID4gKFVJTlROKUdldFN0YXJ0 UG9pbnRlciAoVm9sYXRpbGVWYXJpYWJsZVN0b3JlKSAtDQo+ID4gKFVJTlROKVZvbGF0aWxlVmFy aWFibGVTdG9yZTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQ29weUd1aWQgKCZWb2xhdGls ZVZhcmlhYmxlU3RvcmUtPlNpZ25hdHVyZSwgVmFyaWFibGVHdWlkKTsNCj4gPiAgICAgPiArICBW b2xhdGlsZVZhcmlhYmxlU3RvcmUtPlNpemUgICAgICA9IFBjZEdldDMyIChQY2RWYXJpYWJsZVN0 b3JlU2l6ZSk7DQo+ID4gICAgID4gKyAgVm9sYXRpbGVWYXJpYWJsZVN0b3JlLT5Gb3JtYXQgICAg PSBWQVJJQUJMRV9TVE9SRV9GT1JNQVRURUQ7DQo+ID4gICAgID4gKyAgVm9sYXRpbGVWYXJpYWJs ZVN0b3JlLT5TdGF0ZSAgICAgPSBWQVJJQUJMRV9TVE9SRV9IRUFMVEhZOw0KPiA+ICAgICA+ICsg IFZvbGF0aWxlVmFyaWFibGVTdG9yZS0+UmVzZXJ2ZWQgID0gMDsNCj4gPiAgICAgPiArICBWb2xh dGlsZVZhcmlhYmxlU3RvcmUtPlJlc2VydmVkMSA9IDA7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArLyoqDQo+ID4gICAgID4gKyAgR2V0IHRoZSBwcm9wZXIgZnZiIGhhbmRsZSBhbmQvb3Ig ZnZiIHByb3RvY29sIGJ5IHRoZSBnaXZlbiBGbGFzaCBhZGRyZXNzLg0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICBAcGFyYW1baW5dICBBZGRyZXNzICAgICAgIFRoZSBGbGFzaCBhZGRyZXNzLg0K PiA+ICAgICA+ICsgIEBwYXJhbVtvdXRdIEZ2YkhhbmRsZSAgICAgSW4gb3V0cHV0LCBpZiBpdCBp cyBub3QgTlVMTCwgaXQgcG9pbnRzIHRvIHRoZQ0KPiA+IHByb3Blcg0KPiA+ICAgICA+IEZWQiBo YW5kbGUuDQo+ID4gICAgID4gKyAgQHBhcmFtW291dF0gRnZiUHJvdG9jb2wgICBJbiBvdXRwdXQs IGlmIGl0IGlzIG5vdCBOVUxMLCBpdCBwb2ludHMgdG8gdGhlDQo+ID4gcHJvcGVyDQo+ID4gICAg ID4gRlZCIHByb3RvY29sLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4g K0VGSV9TVEFUVVMNCj4gPiAgICAgPiArR2V0RnZiSW5mb0J5QWRkcmVzcyAoDQo+ID4gICAgID4g KyAgSU4gIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgICAgICAgICAgIEFkZHJlc3MsDQo+ID4g ICAgID4gKyAgT1VUIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgICpGdmJIYW5k bGUgT1BUSU9OQUwsDQo+ID4gICAgID4gKyAgT1VUIEVGSV9GSVJNV0FSRV9WT0xVTUVfQkxPQ0tf UFJPVE9DT0wgICoqRnZiUHJvdG9jb2wNCj4gPiBPUFRJT05BTA0KPiA+ICAgICA+ICsgICkNCj4g PiAgICAgPiArew0KPiA+ICAgICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAg ICAgIFN0YXR1czsNCj4gPiAgICAgPiArICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAg ICAgICAqSGFuZGxlQnVmZmVyOw0KPiA+ICAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEhhbmRsZUNvdW50Ow0KPiA+ICAgICA+ICsgIFVJTlROICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiA+ICAgICA+ICsgIEVGSV9QSFlTSUNBTF9BRERS RVNTICAgICAgICAgICAgICAgIEZ2YkJhc2VBZGRyZXNzOw0KPiA+ICAgICA+ICsgIEVGSV9GSVJN V0FSRV9WT0xVTUVfQkxPQ0tfUFJPVE9DT0wgICpGdmI7DQo+ID4gICAgID4gKyAgRUZJX0ZWQl9B VFRSSUJVVEVTXzIgICAgICAgICAgICAgICAgQXR0cmlidXRlczsNCj4gPiAgICAgPiArICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja1NpemU7DQo+ID4gICAgID4gKyAg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZCbG9ja3M7DQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgIEhhbmRsZUJ1ZmZlciA9IE5VTEw7DQo+ID4gICAgID4gKyAg Ly8NCj4gPiAgICAgPiArICAvLyBHZXQgYWxsIEZWQiBoYW5kbGVzLg0KPiA+ICAgICA+ICsgIC8v DQo+ID4gICAgID4gKyAgU3RhdHVzID0gR2V0RnZiQ291bnRBbmRCdWZmZXIgKCZIYW5kbGVDb3Vu dCwgJkhhbmRsZUJ1ZmZlcik7DQo+ID4gICAgID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiA+ICAgICA+ICsgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ID4gICAgID4gKyAgfQ0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIEdldCB0aGUgRlZC IHRvIGFjY2VzcyB2YXJpYWJsZSBzdG9yZS4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsg IEZ2YiA9IE5VTEw7DQo+ID4gICAgID4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgSGFuZGxl Q291bnQ7IEluZGV4ICs9IDEsIFN0YXR1cyA9DQo+IEVGSV9OT1RfRk9VTkQsDQo+ID4gICAgID4g RnZiID0gTlVMTCkgew0KPiA+ICAgICA+ICsgICAgU3RhdHVzID0gR2V0RnZiQnlIYW5kbGUgKEhh bmRsZUJ1ZmZlcltJbmRleF0sICZGdmIpOw0KPiA+ICAgICA+ICsgICAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPiA+ICAgICA+ICsgICAgICBTdGF0dXMgPSBFRklfTk9UX0ZPVU5EOw0KPiA+ ICAgICA+ICsgICAgICBicmVhazsNCj4gPiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgLy8gRW5zdXJlIHRoaXMgRlZCIHByb3RvY29s IHN1cHBvcnRlZCBXcml0ZSBvcGVyYXRpb24uDQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ ICsgICAgU3RhdHVzID0gRnZiLT5HZXRBdHRyaWJ1dGVzIChGdmIsICZBdHRyaWJ1dGVzKTsNCj4g PiAgICAgPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykgfHwgKChBdHRyaWJ1dGVzICYgRUZJ X0ZWQjJfV1JJVEVfU1RBVFVTKSA9PQ0KPiAwKSkNCj4gPiB7DQo+ID4gICAgID4gKyAgICAgIGNv bnRpbnVlOw0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgIC8v DQo+ID4gICAgID4gKyAgICAvLyBDb21wYXJlIHRoZSBhZGRyZXNzIGFuZCBzZWxlY3QgdGhlIHJp Z2h0IG9uZS4NCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICBTdGF0dXMgPSBGdmIt PkdldFBoeXNpY2FsQWRkcmVzcyAoRnZiLCAmRnZiQmFzZUFkZHJlc3MpOw0KPiA+ICAgICA+ICsg ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICAgICA+ICsgICAgICBjb250aW51ZTsN Cj4gPiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAg ICA+ICsgICAgLy8gQXNzdW1lIG9uZSBGVkIgaGFzIG9uZSB0eXBlIG9mIEJsb2NrU2l6ZS4NCj4g PiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICBTdGF0dXMgPSBGdmItPkdldEJsb2NrU2l6 ZSAoRnZiLCAwLCAmQmxvY2tTaXplLCAmTnVtYmVyT2ZCbG9ja3MpOw0KPiA+ICAgICA+ICsgICAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICAgICA+ICsgICAgICBjb250aW51ZTsNCj4g PiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICBpZiAoKEFkZHJlc3Mg Pj0gRnZiQmFzZUFkZHJlc3MpICYmIChBZGRyZXNzIDwgKEZ2YkJhc2VBZGRyZXNzICsNCj4gPiBC bG9ja1NpemUgKg0KPiA+ICAgICA+IE51bWJlck9mQmxvY2tzKSkpIHsNCj4gPiAgICAgPiArICAg ICAgaWYgKEZ2YkhhbmRsZSAhPSBOVUxMKSB7DQo+ID4gICAgID4gKyAgICAgICAgKkZ2YkhhbmRs ZSA9IEhhbmRsZUJ1ZmZlcltJbmRleF07DQo+ID4gICAgID4gKyAgICAgIH0NCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyAgICAgIGlmIChGdmJQcm90b2NvbCAhPSBOVUxMKSB7DQo+ID4gICAgID4g KyAgICAgICAgKkZ2YlByb3RvY29sID0gRnZiOw0KPiA+ICAgICA+ICsgICAgICB9DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgICAgICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gPiAgICAgPiAr ICAgICAgYnJlYWs7DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArICBGcmVlUG9vbCAoSGFuZGxlQnVmZmVyKTsNCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgaWYgKEZ2YiA9PSBOVUxMKSB7DQo+ID4gICAgID4gKyAgICBTdGF0dXMgPSBF RklfTk9UX0ZPVU5EOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg cmV0dXJuIFN0YXR1czsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+IGRpZmYgLS1naXQNCj4gPiAg ICAgPg0KPiBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRp bWVEeGUvVmFyaWFibGVEeGUuYw0KPiA+ICAgICA+DQo+IGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNh bC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZUR4ZS5jDQo+ID4gICAgID4g bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiAgICAgPiBpbmRleCAwMDAwMDAwMDAwMDAuLjQ1OTVi ZjhjOWQwMg0KPiA+ICAgICA+IC0tLSAvZGV2L251bGwNCj4gPiAgICAgPiArKysNCj4gPiBiL01k ZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFi bGVEeGUuYw0KPiA+ICAgICA+IEBAIC0wLDAgKzEsNjcwIEBADQo+ID4gICAgID4gKy8qKiBAZmls ZQ0KPiA+ICAgICA+ICsgIEltcGxlbWVudCBhbGwgZm91ciBVRUZJIFJ1bnRpbWUgVmFyaWFibGUg c2VydmljZXMgZm9yIHRoZSBub252b2xhdGlsZQ0KPiA+ICAgICA+ICsgIGFuZCB2b2xhdGlsZSBz dG9yYWdlIHNwYWNlIGFuZCBpbnN0YWxsIHZhcmlhYmxlIGFyY2hpdGVjdHVyZSBwcm90b2NvbC4N Cj4gPiAgICAgPiArDQo+ID4gICAgID4gK0NvcHlyaWdodCAoQykgMjAxMywgUmVkIEhhdCwgSW5j Lg0KPiA+ICAgICA+ICtDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDIyLCBJbnRlbCBDb3Jwb3JhdGlv bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4gICAgID4gKyhDKSBDb3B5cmlnaHQgMjAx NSBIZXdsZXR0IFBhY2thcmQgRW50ZXJwcmlzZSBEZXZlbG9wbWVudCBMUDxCUj4NCj4gPiAgICAg PiArQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uDQo+ID4gICAgID4gK1NQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsqKi8NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyNpbmNsdWRlICJWYXJpYWJsZS5o Ig0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArI2luY2x1ZGUgPFByb3RvY29sL1ZhcmlhYmxlUG9s aWN5Lmg+DQo+ID4gICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1ZhcmlhYmxlUG9saWN5TGliLmg+ DQo+ID4gICAgID4gKyNpbmNsdWRlICJWYXJpYWJsZVBhcnNpbmcuaCINCj4gPiAgICAgPiArDQo+ ID4gICAgID4gK0VGSV9TVEFUVVMNCj4gPiAgICAgPiArRUZJQVBJDQo+ID4gICAgID4gK1Byb3Rv Y29sSXNWYXJpYWJsZVBvbGljeUVuYWJsZWQgKA0KPiA+ICAgICA+ICsgIE9VVCBCT09MRUFOICAq U3RhdGUNCj4gPiAgICAgPiArICApOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArRUZJX0hBTkRM RSAgICAgICAgICAgICAgICAgICAgICBtSGFuZGxlICAgICAgICAgICAgICAgICAgICAgID0gTlVM TDsNCj4gPiAgICAgPiArRUZJX0VWRU5UICAgICAgICAgICAgICAgICAgICAgICBtVmlydHVhbEFk ZHJlc3NDaGFuZ2VFdmVudCAgID0gTlVMTDsNCj4gPiAgICAgPiArVk9JRCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqbUZ0d1JlZ2lzdHJhdGlvbiAgICAgICAgICAgID0gTlVMTDsNCj4gPiAg ICAgPiArVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKiptVmFyQ2hlY2tBZGRyZXNz UG9pbnRlciAgID0gTlVMTDsNCj4gPiAgICAgPiArVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgICBtVmFyQ2hlY2tBZGRyZXNzUG9pbnRlckNvdW50ID0gMDsNCj4gPiAgICAgPiArRURLSUlf VkFSSUFCTEVfTE9DS19QUk9UT0NPTCAgICBtVmFyaWFibGVMb2NrICAgICAgICAgICAgICAgID0N Cj4gPiAgICAgPiB7IFZhcmlhYmxlTG9ja1JlcXVlc3RUb0xvY2sgfTsNCj4gPiAgICAgPiArRURL SUlfVkFSSUFCTEVfUE9MSUNZX1BST1RPQ09MICBtVmFyaWFibGVQb2xpY3lQcm90b2NvbCAgICAg ID0gew0KPiA+ICAgICA+ICsgIEVES0lJX1ZBUklBQkxFX1BPTElDWV9QUk9UT0NPTF9SRVZJU0lP TiwNCj4gPiAgICAgPiArICBEaXNhYmxlVmFyaWFibGVQb2xpY3ksDQo+ID4gICAgID4gKyAgUHJv dG9jb2xJc1ZhcmlhYmxlUG9saWN5RW5hYmxlZCwNCj4gPiAgICAgPiArICBSZWdpc3RlclZhcmlh YmxlUG9saWN5LA0KPiA+ICAgICA+ICsgIER1bXBWYXJpYWJsZVBvbGljeSwNCj4gPiAgICAgPiAr ICBMb2NrVmFyaWFibGVQb2xpY3kNCj4gPiAgICAgPiArfTsNCj4gPiAgICAgPiArRURLSUlfVkFS X0NIRUNLX1BST1RPQ09MICAgICAgICBtVmFyQ2hlY2sgPSB7DQo+ID4gICAgID4gKyAgVmFyQ2hl Y2tSZWdpc3RlclNldFZhcmlhYmxlQ2hlY2tIYW5kbGVyLA0KPiA+ICAgICA+ICsgIFZhckNoZWNr VmFyaWFibGVQcm9wZXJ0eVNldCwNCj4gPiAgICAgPiArICBWYXJDaGVja1ZhcmlhYmxlUHJvcGVy dHlHZXQNCj4gPiAgICAgPiArfTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAg ICA+ICsgIFNvbWUgU2VjdXJlIEJvb3QgUG9saWN5IFZhcmlhYmxlIG1heSB1cGRhdGUgZm9sbG93 aW5nIG90aGVyIHZhcmlhYmxlDQo+ID4gICAgID4gY2hhbmdlcyhTZWN1cmVCb290IGZvbGxvd3Mg UEsgY2hhbmdlLCBldGMpLg0KPiA+ICAgICA+ICsgIFJlY29yZCB0aGVpciBpbml0aWFsIFN0YXRl IHdoZW4gdmFyaWFibGUgd3JpdGUgc2VydmljZSBpcyByZWFkeS4NCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyoqLw0KPiA+ICAgICA+ICtWT0lEDQo+ID4gICAgID4gK0VGSUFQSQ0KPiA+ICAgICA+ ICtSZWNvcmRTZWN1cmVCb290UG9saWN5VmFyRGF0YSAoDQo+ID4gICAgID4gKyAgVk9JRA0KPiA+ ICAgICA+ICsgICk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBS ZXR1cm4gVFJVRSBpZiBFeGl0Qm9vdFNlcnZpY2VzICgpIGhhcyBiZWVuIGNhbGxlZC4NCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKyAgQHJldHZhbCBUUlVFIElmIEV4aXRCb290U2VydmljZXMgKCkg aGFzIGJlZW4gY2FsbGVkLg0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArQk9PTEVBTg0KPiA+ ICAgICA+ICtBdFJ1bnRpbWUgKA0KPiA+ICAgICA+ICsgIFZPSUQNCj4gPiAgICAgPiArICApDQo+ ID4gICAgID4gK3sNCj4gPiAgICAgPiArICByZXR1cm4gRWZpQXRSdW50aW1lICgpOw0KPiA+ICAg ICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBJbml0aWFs aXplcyBhIGJhc2ljIG11dHVhbCBleGNsdXNpb24gbG9jay4NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBhIGJhc2ljIG11dHVhbCBleGNsdXNpb24g bG9jayB0byB0aGUgcmVsZWFzZWQNCj4gc3RhdGUNCj4gPiAgICAgPiArICBhbmQgcmV0dXJucyB0 aGUgbG9jay4gIEVhY2ggbG9jayBwcm92aWRlcyBtdXR1YWwgZXhjbHVzaW9uIGFjY2VzcyBhdCBp dHMNCj4gPiB0YXNrDQo+ID4gICAgID4gKyAgcHJpb3JpdHkgbGV2ZWwuICBTaW5jZSB0aGVyZSBp cyBubyBwcmVlbXB0aW9uIG9yIG11bHRpcHJvY2Vzc29yIHN1cHBvcnQgaW4NCj4gPiBFRkksDQo+ ID4gICAgID4gKyAgYWNxdWlyaW5nIHRoZSBsb2NrIG9ubHkgY29uc2lzdHMgb2YgcmFpc2luZyB0 byB0aGUgbG9ja3MgVFBMLg0KPiA+ICAgICA+ICsgIElmIExvY2sgaXMgTlVMTCwgdGhlbiBBU1NF UlQoKS4NCj4gPiAgICAgPiArICBJZiBQcmlvcml0eSBpcyBub3QgYSB2YWxpZCBUUEwgdmFsdWUs IHRoZW4gQVNTRVJUKCkuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbSAgTG9jayAg ICAgICBBIHBvaW50ZXIgdG8gdGhlIGxvY2sgZGF0YSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZS4N Cj4gPiAgICAgPiArICBAcGFyYW0gIFByaW9yaXR5ICAgRUZJIFRQTCBpcyBhc3NvY2lhdGVkIHdp dGggdGhlIGxvY2suDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR1cm4gVGhlIGxvY2su DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX0xPQ0sgKg0KPiA+ ICAgICA+ICtJbml0aWFsaXplTG9jayAoDQo+ID4gICAgID4gKyAgSU4gT1VUIEVGSV9MT0NLICAq TG9jaywNCj4gPiAgICAgPiArICBJTiAgICAgRUZJX1RQTCAgIFByaW9yaXR5DQo+ID4gICAgID4g KyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgcmV0dXJuIEVmaUluaXRpYWxpemVMb2Nr IChMb2NrLCBQcmlvcml0eSk7DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4g Ky8qKg0KPiA+ICAgICA+ICsgIEFjcXVpcmVzIGxvY2sgb25seSBhdCBib290IHRpbWUuIFNpbXBs eSByZXR1cm5zIGF0IHJ1bnRpbWUuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFRoaXMgaXMg YSB0ZW1wZXJhcnkgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHJlbW92ZWQgd2hlbg0KPiA+ICAgICA+ ICsgIEVmaUFjcXVpcmVMb2NrKCkgaW4gVWVmaUxpYiBjYW4gaGFuZGxlIHRoZSBjYWxsIGluIFVF RkkNCj4gPiAgICAgPiArICBSdW50aW1lciBkcml2ZXIgaW4gUlQgcGhhc2UuDQo+ID4gICAgID4g KyAgSXQgY2FsbHMgRWZpQWNxdWlyZUxvY2soKSBhdCBib290IHRpbWUsIGFuZCBzaW1wbHkgcmV0 dXJucw0KPiA+ICAgICA+ICsgIGF0IHJ1bnRpbWUuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsg IEBwYXJhbSAgTG9jayAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgbG9jayB0byBhY3F1aXJlLg0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK1ZPSUQNCj4gPiAgICAgPiAr QWNxdWlyZUxvY2tPbmx5QXRCb290VGltZSAoDQo+ID4gICAgID4gKyAgSU4gRUZJX0xPQ0sgICpM b2NrDQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgaWYgKCFBdFJ1 bnRpbWUgKCkpIHsNCj4gPiAgICAgPiArICAgIEVmaUFjcXVpcmVMb2NrIChMb2NrKTsNCj4gPiAg ICAgPiArICB9DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ ICAgICA+ICsgIFJlbGVhc2VzIGxvY2sgb25seSBhdCBib290IHRpbWUuIFNpbXBseSByZXR1cm5z IGF0IHJ1bnRpbWUuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFRoaXMgaXMgYSB0ZW1wZXJh cnkgZnVuY3Rpb24gd2hpY2ggd2lsbCBiZSByZW1vdmVkIHdoZW4NCj4gPiAgICAgPiArICBFZmlS ZWxlYXNlTG9jaygpIGluIFVlZmlMaWIgY2FuIGhhbmRsZSB0aGUgY2FsbCBpbiBVRUZJDQo+ID4g ICAgID4gKyAgUnVudGltZXIgZHJpdmVyIGluIFJUIHBoYXNlLg0KPiA+ICAgICA+ICsgIEl0IGNh bGxzIEVmaVJlbGVhc2VMb2NrKCkgYXQgYm9vdCB0aW1lIGFuZCBzaW1wbHkgcmV0dXJucw0KPiA+ ICAgICA+ICsgIGF0IHJ1bnRpbWUuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbSAg TG9jayAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgbG9jayB0byByZWxlYXNlLg0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK1ZPSUQNCj4gPiAgICAgPiArUmVsZWFzZUxv Y2tPbmx5QXRCb290VGltZSAoDQo+ID4gICAgID4gKyAgSU4gRUZJX0xPQ0sgICpMb2NrDQo+ID4g ICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgaWYgKCFBdFJ1bnRpbWUgKCkp IHsNCj4gPiAgICAgPiArICAgIEVmaVJlbGVhc2VMb2NrIChMb2NrKTsNCj4gPiAgICAgPiArICB9 DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsg IFJldHJpZXZlIHRoZSBGYXVsdCBUb2xlcmVudCBXcml0ZSBwcm90b2NvbCBpbnRlcmZhY2UuDQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbVtvdXRdIEZ0d1Byb3RvY29sICAgICAgIFRo ZSBpbnRlcmZhY2Ugb2YgRnR3IHByb3RvY29sDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBGVFcgcHJvdG9jb2wgaW5zdGFuY2Ugd2Fz IGZvdW5kIGFuZA0KPiA+ICAgICA+IHJldHVybmVkIGluIEZ0d1Byb3RvY29sLg0KPiA+ICAgICA+ ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFRoZSBGVFcgcHJvdG9jb2wgaW5zdGFu Y2Ugd2FzIG5vdA0KPiBmb3VuZC4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BB UkFNRVRFUiBTYXJQcm90b2NvbCBpcyBOVUxMLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiov DQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4gPiAgICAgPiArR2V0RnR3UHJvdG9jb2wgKA0KPiA+ ICAgICA+ICsgIE9VVCBWT0lEICAqKkZ0d1Byb3RvY29sDQo+ID4gICAgID4gKyAgKQ0KPiA+ICAg ICA+ICt7DQo+ID4gICAgID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIExvY2F0ZSBGYXVsdCBUb2xlcmVudCBXcml0 ZSBwcm90b2NvbA0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgU3RhdHVzID0gZ0JTLT5M b2NhdGVQcm90b2NvbCAoDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICZnRWZpRmF1bHRU b2xlcmFudFdyaXRlUHJvdG9jb2xHdWlkLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICBO VUxMLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICBGdHdQcm90b2NvbA0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgICAgICApOw0KPiA+ICAgICA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4g ICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIFJldHJp ZXZlIHRoZSBGVkIgcHJvdG9jb2wgaW50ZXJmYWNlIGJ5IEhBTkRMRS4NCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgQHBhcmFtW2luXSAgRnZCbG9ja0hhbmRsZSAgICAgVGhlIGhhbmRsZSBvZiBG VkIgcHJvdG9jb2wgdGhhdCBwcm92aWRlcw0KPiA+ICAgICA+IHNlcnZpY2VzIGZvcg0KPiA+ICAg ICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRpbmcsIHdyaXRpbmcsIGFu ZCBlcmFzaW5nIHRoZSB0YXJnZXQgYmxvY2suDQo+ID4gICAgID4gKyAgQHBhcmFtW291dF0gRnZC bG9jayAgICAgICAgICAgVGhlIGludGVyZmFjZSBvZiBGVkIgcHJvdG9jb2wNCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIGludGVyZmFj ZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZA0KPiA+ICAgICA+IHByb3RvY29sIHdhcyBy ZXR1cm5lZC4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBUaGUg ZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhlIEZWQg0KPiA+IHByb3RvY29sLg0KPiA+ICAgICA+ ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIEZ2QmxvY2tIYW5kbGUgaXMgbm90IGEg dmFsaWQNCj4gPiBFRklfSEFORExFDQo+ID4gICAgID4gb3IgRnZCbG9jayBpcyBOVUxMLg0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4gPiAgICAg PiArR2V0RnZiQnlIYW5kbGUgKA0KPiA+ICAgICA+ICsgIElOICBFRklfSEFORExFICAgICAgICAg ICAgICAgICAgICAgICAgICBGdkJsb2NrSGFuZGxlLA0KPiA+ICAgICA+ICsgIE9VVCBFRklfRklS TVdBUkVfVk9MVU1FX0JMT0NLX1BST1RPQ09MICAqKkZ2QmxvY2sNCj4gPiAgICAgPiArICApDQo+ ID4gICAgID4gK3sNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIFRvIGdldCB0aGUg RlZCIHByb3RvY29sIGludGVyZmFjZSBvbiB0aGUgaGFuZGxlDQo+ID4gICAgID4gKyAgLy8NCj4g PiAgICAgPiArICByZXR1cm4gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ID4gICAgID4gKyAgICAg ICAgICAgICAgICBGdkJsb2NrSGFuZGxlLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgJmdF ZmlGaXJtd2FyZVZvbHVtZUJsb2NrUHJvdG9jb2xHdWlkLA0KPiA+ICAgICA+ICsgICAgICAgICAg ICAgICAgKFZPSUQgKiopRnZCbG9jaw0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgKTsNCj4g PiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgRnVu Y3Rpb24gcmV0dXJucyBhbiBhcnJheSBvZiBoYW5kbGVzIHRoYXQgc3VwcG9ydCB0aGUgRlZCIHBy b3RvY29sDQo+ID4gICAgID4gKyAgaW4gYSBidWZmZXIgYWxsb2NhdGVkIGZyb20gcG9vbC4NCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtW291dF0gIE51bWJlckhhbmRsZXMgICAgVGhl IG51bWJlciBvZiBoYW5kbGVzIHJldHVybmVkIGluDQo+IEJ1ZmZlci4NCj4gPiAgICAgPiArICBA cGFyYW1bb3V0XSAgQnVmZmVyICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byBy ZXR1cm4gdGhlDQo+IHJlcXVlc3RlZA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGFycmF5IG9mICBoYW5kbGVzIHRoYXQgc3VwcG9ydCBGVkIgcHJvdG9jb2wuDQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRo ZSBhcnJheSBvZiBoYW5kbGVzIHdhcyByZXR1cm5lZCBpbiBCdWZmZXIsDQo+ID4gYW5kDQo+ID4g ICAgID4gdGhlIG51bWJlciBvZg0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGhhbmRsZXMgaW4gQnVmZmVyIHdhcyByZXR1cm5lZCBpbiBOdW1iZXJIYW5kbGVzLg0K PiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIE5vIEZWQiBoYW5kbGUg d2FzIGZvdW5kLg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgIFRo ZXJlIGlzIG5vdCBlbm91Z2ggcG9vbCBtZW1vcnkgdG8NCj4gPiBzdG9yZQ0KPiA+ICAgICA+IHRo ZSBtYXRjaGluZyByZXN1bHRzLg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFS QU1FVEVSIE51bWJlckhhbmRsZXMgaXMgTlVMTCBvciBCdWZmZXIgaXMNCj4gPiBOVUxMLg0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4gPiAgICAg PiArR2V0RnZiQ291bnRBbmRCdWZmZXIgKA0KPiA+ICAgICA+ICsgIE9VVCBVSU5UTiAgICAgICAq TnVtYmVySGFuZGxlcywNCj4gPiAgICAgPiArICBPVVQgRUZJX0hBTkRMRSAgKipCdWZmZXINCj4g PiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBFRklfU1RBVFVTICBTdGF0 dXM7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gTG9jYXRl IGFsbCBoYW5kbGVzIG9mIEZ2YiBwcm90b2NvbA0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4g KyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVIYW5kbGVCdWZmZXIgKA0KPiA+ICAgICA+ICsgICAgICAg ICAgICAgICAgICBCeVByb3RvY29sLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAmZ0Vm aUZpcm13YXJlVm9sdW1lQmxvY2tQcm90b2NvbEd1aWQsDQo+ID4gICAgID4gKyAgICAgICAgICAg ICAgICAgIE5VTEwsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgIE51bWJlckhhbmRsZXMs DQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgIEJ1ZmZlcg0KPiA+ICAgICA+ICsgICAgICAg ICAgICAgICAgICApOw0KPiA+ICAgICA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gICAgID4gK30N Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIE5vdGlmaWNhdGlvbiBm dW5jdGlvbiBvZiBFVlRfU0lHTkFMX1ZJUlRVQUxfQUREUkVTU19DSEFOR0UuDQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsgIFRoaXMgaXMgYSBub3RpZmljYXRpb24gZnVuY3Rpb24gcmVnaXN0ZXJl ZCBvbg0KPiA+ICAgICA+IEVWVF9TSUdOQUxfVklSVFVBTF9BRERSRVNTX0NIQU5HRSBldmVudC4N Cj4gPiAgICAgPiArICBJdCBjb252ZXJzIHBvaW50ZXIgdG8gbmV3IHZpcnR1YWwgYWRkcmVzcy4N Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtICBFdmVudCAgICAgICAgRXZlbnQgd2hv c2Ugbm90aWZpY2F0aW9uIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQuDQo+ID4gICAgID4gKyAg QHBhcmFtICBDb250ZXh0ICAgICAgUG9pbnRlciB0byB0aGUgbm90aWZpY2F0aW9uIGZ1bmN0aW9u J3MgY29udGV4dC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtWT0lE DQo+ID4gICAgID4gK0VGSUFQSQ0KPiA+ICAgICA+ICtWYXJpYWJsZUNsYXNzQWRkcmVzc0NoYW5n ZUV2ZW50ICgNCj4gPiAgICAgPiArICBJTiBFRklfRVZFTlQgIEV2ZW50LA0KPiA+ICAgICA+ICsg IElOIFZPSUQgICAgICAgKkNvbnRleHQNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4g PiAgICAgPiArICBVSU5UTiAgSW5kZXg7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIGlmICht VmFyaWFibGVNb2R1bGVHbG9iYWwtPkZ2Ykluc3RhbmNlICE9IE5VTEwpIHsNCj4gPiAgICAgPiAr ICAgIEVmaUNvbnZlcnRQb2ludGVyICgweDAsIChWT0lEICoqKSZtVmFyaWFibGVNb2R1bGVHbG9i YWwtDQo+ID4gPkZ2Ykluc3RhbmNlLQ0KPiA+ICAgICA+ID5HZXRCbG9ja1NpemUpOw0KPiA+ICAg ICA+ICsgICAgRWZpQ29udmVydFBvaW50ZXIgKDB4MCwgKFZPSUQgKiopJm1WYXJpYWJsZU1vZHVs ZUdsb2JhbC0NCj4gPiA+RnZiSW5zdGFuY2UtDQo+ID4gICAgID4gPkdldFBoeXNpY2FsQWRkcmVz cyk7DQo+ID4gICAgID4gKyAgICBFZmlDb252ZXJ0UG9pbnRlciAoMHgwLCAoVk9JRCAqKikmbVZh cmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ID5GdmJJbnN0YW5jZS0NCj4gPiAgICAgPiA+R2V0QXR0 cmlidXRlcyk7DQo+ID4gICAgID4gKyAgICBFZmlDb252ZXJ0UG9pbnRlciAoMHgwLCAoVk9JRCAq KikmbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ID5GdmJJbnN0YW5jZS0NCj4gPiAgICAgPiA+ U2V0QXR0cmlidXRlcyk7DQo+ID4gICAgID4gKyAgICBFZmlDb252ZXJ0UG9pbnRlciAoMHgwLCAo Vk9JRCAqKikmbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ID5GdmJJbnN0YW5jZS0NCj4gPiAg ICAgPiA+UmVhZCk7DQo+ID4gICAgID4gKyAgICBFZmlDb252ZXJ0UG9pbnRlciAoMHgwLCAoVk9J RCAqKikmbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ID5GdmJJbnN0YW5jZS0NCj4gPiAgICAg PiA+V3JpdGUpOw0KPiA+ICAgICA+ICsgICAgRWZpQ29udmVydFBvaW50ZXIgKDB4MCwgKFZPSUQg KiopJm1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCj4gPiA+RnZiSW5zdGFuY2UtDQo+ID4gICAgID4g PkVyYXNlQmxvY2tzKTsNCj4gPiAgICAgPiArICAgIEVmaUNvbnZlcnRQb2ludGVyICgweDAsIChW T0lEICoqKSZtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4gPkZ2Ykluc3RhbmNlKTsNCj4gPiAg ICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEVmaUNvbnZlcnRQb2ludGVyICgw eDAsIChWT0lEICoqKSZtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4gICAgID4gPlBsYXRmb3Jt TGFuZ0NvZGVzKTsNCj4gPiAgICAgPiArICBFZmlDb252ZXJ0UG9pbnRlciAoMHgwLCAoVk9JRCAq KikmbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+TGFuZ0NvZGVzKTsNCj4gPiAgICAgPiArICBF ZmlDb252ZXJ0UG9pbnRlciAoMHgwLCAoVk9JRCAqKikmbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0K PiA+ID5QbGF0Zm9ybUxhbmcpOw0KPiA+ICAgICA+ICsgIEVmaUNvbnZlcnRQb2ludGVyICgweDAs IChWT0lEICoqKSZtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4gICAgID4gPlZhcmlhYmxlR2xv YmFsLk5vblZvbGF0aWxlVmFyaWFibGVCYXNlKTsNCj4gPiAgICAgPiArICBFZmlDb252ZXJ0UG9p bnRlciAoMHgwLCAoVk9JRCAqKikmbVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ICAgICA+ID5W YXJpYWJsZUdsb2JhbC5Wb2xhdGlsZVZhcmlhYmxlQmFzZSk7DQo+ID4gICAgID4gKyAgRWZpQ29u dmVydFBvaW50ZXIgKDB4MCwgKFZPSUQgKiopJm1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCj4gPiAg ICAgPiA+VmFyaWFibGVHbG9iYWwuSG9iVmFyaWFibGVCYXNlKTsNCj4gPiAgICAgPiArICBFZmlD b252ZXJ0UG9pbnRlciAoMHgwLCAoVk9JRCAqKikmbVZhcmlhYmxlTW9kdWxlR2xvYmFsKTsNCj4g PiAgICAgPiArICBFZmlDb252ZXJ0UG9pbnRlciAoMHgwLCAoVk9JRCAqKikmbU52VmFyaWFibGVD YWNoZSk7DQo+ID4gICAgID4gKyAgRWZpQ29udmVydFBvaW50ZXIgKDB4MCwgKFZPSUQgKiopJm1O dkZ2SGVhZGVyQ2FjaGUpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBpZiAobUF1dGhDb250 ZXh0T3V0LkFkZHJlc3NQb2ludGVyICE9IE5VTEwpIHsNCj4gPiAgICAgPiArICAgIGZvciAoSW5k ZXggPSAwOyBJbmRleCA8IG1BdXRoQ29udGV4dE91dC5BZGRyZXNzUG9pbnRlckNvdW50Ow0KPiBJ bmRleCsrKQ0KPiA+IHsNCj4gPiAgICAgPiArICAgICAgRWZpQ29udmVydFBvaW50ZXIgKDB4MCwg KFZPSUQNCj4gPiAqKiltQXV0aENvbnRleHRPdXQuQWRkcmVzc1BvaW50ZXJbSW5kZXhdKTsNCj4g PiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsg IGlmIChtVmFyQ2hlY2tBZGRyZXNzUG9pbnRlciAhPSBOVUxMKSB7DQo+ID4gICAgID4gKyAgICBm b3IgKEluZGV4ID0gMDsgSW5kZXggPCBtVmFyQ2hlY2tBZGRyZXNzUG9pbnRlckNvdW50OyBJbmRl eCsrKSB7DQo+ID4gICAgID4gKyAgICAgIEVmaUNvbnZlcnRQb2ludGVyICgweDAsIChWT0lEICoq KW1WYXJDaGVja0FkZHJlc3NQb2ludGVyW0luZGV4XSk7DQo+ID4gICAgID4gKyAgICB9DQo+ID4g ICAgID4gKyAgfQ0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4g PiAgICAgPiArICBOb3RpZmljYXRpb24gZnVuY3Rpb24gb2YgRVZUX0dST1VQX1JFQURZX1RPX0JP T1QgZXZlbnQgZ3JvdXAuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFRoaXMgaXMgYSBub3Rp ZmljYXRpb24gZnVuY3Rpb24gcmVnaXN0ZXJlZCBvbg0KPiA+IEVWVF9HUk9VUF9SRUFEWV9UT19C T09UDQo+ID4gICAgID4gZXZlbnQgZ3JvdXAuDQo+ID4gICAgID4gKyAgV2hlbiB0aGUgQm9vdCBN YW5hZ2VyIGlzIGFib3V0IHRvIGxvYWQgYW5kIGV4ZWN1dGUgYSBib290IG9wdGlvbiwgaXQNCj4g PiAgICAgPiByZWNsYWltcyB2YXJpYWJsZQ0KPiA+ICAgICA+ICsgIHN0b3JhZ2UgaWYgZnJlZSBz aXplIGlzIGJlbG93IHRoZSB0aHJlc2hvbGQuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBw YXJhbSAgRXZlbnQgICAgICAgIEV2ZW50IHdob3NlIG5vdGlmaWNhdGlvbiBmdW5jdGlvbiBpcyBi ZWluZyBpbnZva2VkLg0KPiA+ICAgICA+ICsgIEBwYXJhbSAgQ29udGV4dCAgICAgIFBvaW50ZXIg dG8gdGhlIG5vdGlmaWNhdGlvbiBmdW5jdGlvbidzIGNvbnRleHQuDQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsqKi8NCj4gPiAgICAgPiArVk9JRA0KPiA+ICAgICA+ICtFRklBUEkNCj4gPiAgICAg PiArT25SZWFkeVRvQm9vdCAoDQo+ID4gICAgID4gKyAgRUZJX0VWRU5UICBFdmVudCwNCj4gPiAg ICAgPiArICBWT0lEICAgICAgICpDb250ZXh0DQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7 DQo+ID4gICAgID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICBpZiAoIW1FbmRPZkR4ZSkgew0KPiA+ICAgICA+ICsgICAgTW9yTG9ja0luaXRBdEVuZE9m RHhlICgpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgIFN0YXR1cyA9IExvY2tWYXJpYWJs ZVBvbGljeSAoKTsNCj4gPiAgICAgPiArICAgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgLy8gU2V0IHRoZSBFbmQgT2YgRFhFIGJp dCBpbiBjYXNlIHRoZQ0KPiA+IEVGSV9FTkRfT0ZfRFhFX0VWRU5UX0dST1VQX0dVSUQNCj4gPiAg ICAgPiBldmVudCBpcyBub3Qgc2lnbmFsZWQuDQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ ICsgICAgbUVuZE9mRHhlICAgICAgICAgICAgICAgPSBUUlVFOw0KPiA+ICAgICA+ICsgICAgbVZh ckNoZWNrQWRkcmVzc1BvaW50ZXIgPSBWYXJDaGVja0xpYkluaXRpYWxpemVBdEVuZE9mRHhlDQo+ ID4gICAgID4gKCZtVmFyQ2hlY2tBZGRyZXNzUG9pbnRlckNvdW50KTsNCj4gPiAgICAgPiArICAg IC8vDQo+ID4gICAgID4gKyAgICAvLyBUaGUgaW5pdGlhbGl6YXRpb24gZm9yIHZhcmlhYmxlIHF1 b3RhLg0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIEluaXRpYWxpemVWYXJpYWJs ZVF1b3RhICgpOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgUmVj bGFpbUZvck9TICgpOw0KPiA+ICAgICA+ICsgIGlmIChGZWF0dXJlUGNkR2V0IChQY2RWYXJpYWJs ZUNvbGxlY3RTdGF0aXN0aWNzKSkgew0KPiA+ICAgICA+ICsgICAgaWYgKG1WYXJpYWJsZU1vZHVs ZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdCkgew0KPiA+ICAgICA+ICsgICAgICBn QlMtPkluc3RhbGxDb25maWd1cmF0aW9uVGFibGUgKCZnRWZpQXV0aGVudGljYXRlZFZhcmlhYmxl R3VpZCwNCj4gPiAgICAgPiBnVmFyaWFibGVJbmZvKTsNCj4gPiAgICAgPiArICAgIH0gZWxzZSB7 DQo+ID4gICAgID4gKyAgICAgIGdCUy0+SW5zdGFsbENvbmZpZ3VyYXRpb25UYWJsZSAoJmdFZmlW YXJpYWJsZUd1aWQsIGdWYXJpYWJsZUluZm8pOw0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgZ0JTLT5DbG9zZUV2ZW50IChFdmVudCk7 DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsg IE5vdGlmaWNhdGlvbiBmdW5jdGlvbiBvZiBFRklfRU5EX09GX0RYRV9FVkVOVF9HUk9VUF9HVUlE IGV2ZW50DQo+ID4gZ3JvdXAuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFRoaXMgaXMgYSBu b3RpZmljYXRpb24gZnVuY3Rpb24gcmVnaXN0ZXJlZCBvbg0KPiA+ICAgICA+IEVGSV9FTkRfT0Zf RFhFX0VWRU5UX0dST1VQX0dVSUQgZXZlbnQgZ3JvdXAuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsgIEBwYXJhbSAgRXZlbnQgICAgICAgIEV2ZW50IHdob3NlIG5vdGlmaWNhdGlvbiBmdW5jdGlv biBpcyBiZWluZyBpbnZva2VkLg0KPiA+ICAgICA+ICsgIEBwYXJhbSAgQ29udGV4dCAgICAgIFBv aW50ZXIgdG8gdGhlIG5vdGlmaWNhdGlvbiBmdW5jdGlvbidzIGNvbnRleHQuDQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArVk9JRA0KPiA+ICAgICA+ICtFRklBUEkNCj4g PiAgICAgPiArT25FbmRPZkR4ZSAoDQo+ID4gICAgID4gKyAgRUZJX0VWRU5UICBFdmVudCwNCj4g PiAgICAgPiArICBWT0lEICAgICAgICpDb250ZXh0DQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ ICt7DQo+ID4gICAgID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICBERUJVRyAoKERFQlVHX0lORk8sICJbVmFyaWFibGVdRU5EX09GX0RYRSBpcyBzaWdu YWxlZFxuIikpOw0KPiA+ICAgICA+ICsgIE1vckxvY2tJbml0QXRFbmRPZkR4ZSAoKTsNCj4gPiAg ICAgPiArICBTdGF0dXMgPSBMb2NrVmFyaWFibGVQb2xpY3kgKCk7DQo+ID4gICAgID4gKyAgQVNT RVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gPiAgICAgPiArICBtRW5kT2ZEeGUgICAgICAgICAg ICAgICA9IFRSVUU7DQo+ID4gICAgID4gKyAgbVZhckNoZWNrQWRkcmVzc1BvaW50ZXIgPSBWYXJD aGVja0xpYkluaXRpYWxpemVBdEVuZE9mRHhlDQo+ID4gICAgID4gKCZtVmFyQ2hlY2tBZGRyZXNz UG9pbnRlckNvdW50KTsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIFRoZSBpbml0 aWFsaXphdGlvbiBmb3IgdmFyaWFibGUgcXVvdGEuDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAg PiArICBJbml0aWFsaXplVmFyaWFibGVRdW90YSAoKTsNCj4gPiAgICAgPiArICBpZiAoUGNkR2V0 Qm9vbCAoUGNkUmVjbGFpbVZhcmlhYmxlU3BhY2VBdEVuZE9mRHhlKSkgew0KPiA+ICAgICA+ICsg ICAgUmVjbGFpbUZvck9TICgpOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgZ0JTLT5DbG9zZUV2ZW50IChFdmVudCk7DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIEluaXRpYWxpemVzIHZhcmlhYmxlIHdyaXRl IHNlcnZpY2UgZm9yIERYRS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ ICtWT0lEDQo+ID4gICAgID4gK1ZhcmlhYmxlV3JpdGVTZXJ2aWNlSW5pdGlhbGl6ZUR4ZSAoDQo+ ID4gICAgID4gKyAgVk9JRA0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0KPiA+ICAgICA+ ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgU3RhdHVz ID0gVmFyaWFibGVXcml0ZVNlcnZpY2VJbml0aWFsaXplICgpOw0KPiA+ICAgICA+ICsgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiArICAgIERFQlVHICgoREVCVUdfRVJST1Is ICJWYXJpYWJsZSB3cml0ZSBzZXJ2aWNlIGluaXRpYWxpemF0aW9uIGZhaWxlZC4NCj4gPiBTdGF0 dXMNCj4gPiAgICAgPiA9ICVyXG4iLCBTdGF0dXMpKTsNCj4gPiAgICAgPiArICB9DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gU29tZSBTZWN1cmUgQm9vdCBQ b2xpY3kgVmFyIChTZWN1cmVCb290LCBldGMpIHVwZGF0ZXMgZm9sbG93aW5nDQo+IG90aGVyDQo+ ID4gICAgID4gKyAgLy8gU2VjdXJlIEJvb3QgUG9saWN5IFZhcmlhYmxlIGNoYW5nZS4gUmVjb3Jk IHRoZWlyIGluaXRpYWwgdmFsdWUuDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBSZWNv cmRTZWN1cmVCb290UG9saWN5VmFyRGF0YSAoKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg Ly8NCj4gPiAgICAgPiArICAvLyBJbnN0YWxsIHRoZSBWYXJpYWJsZSBXcml0ZSBBcmNoaXRlY3R1 cmFsIHByb3RvY29sLg0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgU3RhdHVzID0gZ0JT LT5JbnN0YWxsUHJvdG9jb2xJbnRlcmZhY2UgKA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAg ICAmbUhhbmRsZSwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgJmdFZmlWYXJpYWJsZVdy aXRlQXJjaFByb3RvY29sR3VpZCwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgRUZJX05B VElWRV9JTlRFUkZBQ0UsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgIE5VTEwNCj4gPiAg ICAgPiArICAgICAgICAgICAgICAgICAgKTsNCj4gPiAgICAgPiArICBBU1NFUlRfRUZJX0VSUk9S IChTdGF0dXMpOw0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4g PiAgICAgPiArICBGYXVsdCBUb2xlcmFudCBXcml0ZSBwcm90b2NvbCBub3RpZmljYXRpb24gZXZl bnQgaGFuZGxlci4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgTm9uLVZvbGF0aWxlIHZhcmlh YmxlIHdyaXRlIG1heSBuZWVkcyBGVFcgcHJvdG9jb2wgdG8gcmVjbGFpbSB3aGVuDQo+ID4gICAg ID4gKyAgd3JpdHRpbmcgdmFyaWFibGUuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJh bVtpbl0gRXZlbnQgICAgRXZlbnQgd2hvc2Ugbm90aWZpY2F0aW9uIGZ1bmN0aW9uIGlzIGJlaW5n IGludm9rZWQuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBDb250ZXh0ICBQb2ludGVyIHRvIHRo ZSBub3RpZmljYXRpb24gZnVuY3Rpb24ncyBjb250ZXh0Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArKiovDQo+ID4gICAgID4gK1ZPSUQNCj4gPiAgICAgPiArRUZJQVBJDQo+ID4gICAgID4gK0Z0 d05vdGlmaWNhdGlvbkV2ZW50ICgNCj4gPiAgICAgPiArICBJTiAgRUZJX0VWRU5UICBFdmVudCwN Cj4gPiAgICAgPiArICBJTiAgVk9JRCAgICAgICAqQ29udGV4dA0KPiA+ICAgICA+ICsgICkNCj4g PiAgICAgPiArew0KPiA+ICAgICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAg ICAgIFN0YXR1czsNCj4gPiAgICAgPiArICBFRklfRklSTVdBUkVfVk9MVU1FX0JMT0NLX1BST1RP Q09MICAqRnZiUHJvdG9jb2w7DQo+ID4gICAgID4gKyAgRUZJX0ZBVUxUX1RPTEVSQU5UX1dSSVRF X1BST1RPQ09MICAgKkZ0d1Byb3RvY29sOw0KPiA+ICAgICA+ICsgIEVGSV9QSFlTSUNBTF9BRERS RVNTICAgICAgICAgICAgICAgIE52U3RvcmFnZVZhcmlhYmxlQmFzZTsNCj4gPiAgICAgPiArICBF RklfR0NEX01FTU9SWV9TUEFDRV9ERVNDUklQVE9SICAgICBHY2REZXNjcmlwdG9yOw0KPiA+ICAg ICA+ICsgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgICAgICAgICAgIEJhc2VBZGRyZXNzOw0K PiA+ICAgICA+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aDsN Cj4gPiAgICAgPiArICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICAgICAgICAgICBWYXJpYWJs ZVN0b3JlQmFzZTsNCj4gPiAgICAgPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBWYXJpYWJsZVN0b3JlTGVuZ3RoOw0KPiA+ICAgICA+ICsgIFVJTlROICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZ0d01heEJsb2NrU2l6ZTsNCj4gPiAgICAgPiArICBVSU5UMzIg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdlN0b3JhZ2VWYXJpYWJsZVNpemU7DQo+ID4g ICAgID4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnZTdG9yYWdlVmFy aWFibGVTaXplNjQ7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAg Ly8gRW5zdXJlIEZUVyBwcm90b2NvbCBpcyBpbnN0YWxsZWQuDQo+ID4gICAgID4gKyAgLy8NCj4g PiAgICAgPiArICBTdGF0dXMgPSBHZXRGdHdQcm90b2NvbCAoKFZPSUQgKiopJkZ0d1Byb3RvY29s KTsNCj4gPiAgICAgPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAgID4gKyAg ICByZXR1cm47DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBTdGF0 dXMgPSBHZXRWYXJpYWJsZUZsYXNoTnZTdG9yYWdlSW5mbyAoJk52U3RvcmFnZVZhcmlhYmxlQmFz ZSwNCj4gPiAgICAgPiAmTnZTdG9yYWdlVmFyaWFibGVTaXplNjQpOw0KPiA+ICAgICA+ICsgIEFT U0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFN0YXR1 cyA9IFNhZmVVaW50NjRUb1VpbnQzMiAoTnZTdG9yYWdlVmFyaWFibGVTaXplNjQsDQo+ID4gICAg ID4gJk52U3RvcmFnZVZhcmlhYmxlU2l6ZSk7DQo+ID4gICAgID4gKyAgLy8gVGhpcyBkcml2ZXIg Y3VycmVudGx5IGFzc3VtZXMgdGhlIHNpemUgd2lsbCBiZSBVSU5UMzIgc28gYXNzZXJ0IHRoZQ0K PiB2YWx1ZQ0KPiA+IGlzDQo+ID4gICAgID4gc2FmZSBmb3Igbm93Lg0KPiA+ICAgICA+ICsgIEFT U0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFZhcmlh YmxlU3RvcmVCYXNlID0gTnZTdG9yYWdlVmFyaWFibGVCYXNlICsgbU52RnZIZWFkZXJDYWNoZS0N Cj4gPiAgICAgPiA+SGVhZGVyTGVuZ3RoOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBTdGF0 dXMgPSBGdHdQcm90b2NvbC0+R2V0TWF4QmxvY2tTaXplIChGdHdQcm90b2NvbCwNCj4gPiAmRnR3 TWF4QmxvY2tTaXplKTsNCj4gPiAgICAgPiArICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiA+ICAgICA+ICsgICAgQVNTRVJUIChOdlN0b3JhZ2VWYXJpYWJsZVNpemUgPD0gRnR3TWF4Qmxv Y2tTaXplKTsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ ID4gICAgID4gKyAgLy8gTGV0IE5vblZvbGF0aWxlVmFyaWFibGVCYXNlIHBvaW50IHRvIGZsYXNo IHZhcmlhYmxlIHN0b3JlIGJhc2UgZGlyZWN0bHkNCj4gPiBhZnRlcg0KPiA+ICAgICA+IEZUVyBy ZWFkeS4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIG1WYXJpYWJsZU1vZHVsZUdsb2Jh bC0+VmFyaWFibGVHbG9iYWwuTm9uVm9sYXRpbGVWYXJpYWJsZUJhc2UgPQ0KPiA+ICAgICA+IFZh cmlhYmxlU3RvcmVCYXNlOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ ICsgIC8vIEZpbmQgdGhlIHByb3BlciBGVkIgcHJvdG9jb2wgZm9yIHZhcmlhYmxlLg0KPiA+ICAg ICA+ICsgIC8vDQo+ID4gICAgID4gKyAgU3RhdHVzID0gR2V0RnZiSW5mb0J5QWRkcmVzcyAoTnZT dG9yYWdlVmFyaWFibGVCYXNlLCBOVUxMLA0KPiA+ICZGdmJQcm90b2NvbCk7DQo+ID4gICAgID4g KyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICAgICA+ICsgICAgcmV0dXJuOw0KPiA+ ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgbVZhcmlhYmxlTW9kdWxlR2xv YmFsLT5GdmJJbnN0YW5jZSA9IEZ2YlByb3RvY29sOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr ICAvLw0KPiA+ICAgICA+ICsgIC8vIE1hcmsgdGhlIHZhcmlhYmxlIHN0b3JhZ2UgcmVnaW9uIG9m IHRoZSBGTEFTSCBhcyBSVU5USU1FLg0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgVmFy aWFibGVTdG9yZUxlbmd0aCA9IG1OdlZhcmlhYmxlQ2FjaGUtPlNpemU7DQo+ID4gICAgID4gKyAg QmFzZUFkZHJlc3MgICAgICAgICA9IFZhcmlhYmxlU3RvcmVCYXNlICYgKH5FRklfUEFHRV9NQVNL KTsNCj4gPiAgICAgPiArICBMZW5ndGggICAgICAgICAgICAgID0gVmFyaWFibGVTdG9yZUxlbmd0 aCArIChWYXJpYWJsZVN0b3JlQmFzZSAtDQo+IEJhc2VBZGRyZXNzKTsNCj4gPiAgICAgPiArICBM ZW5ndGggICAgICAgICAgICAgID0gKExlbmd0aCArIEVGSV9QQUdFX1NJWkUgLSAxKSAmICh+RUZJ X1BBR0VfTUFTSyk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFN0YXR1cyA9IGdEUy0+R2V0 TWVtb3J5U3BhY2VEZXNjcmlwdG9yIChCYXNlQWRkcmVzcywNCj4gPiAmR2NkRGVzY3JpcHRvcik7 DQo+ID4gICAgID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICAgICA+ICsgICAg REVCVUcgKChERUJVR19XQVJOLCAiVmFyaWFibGUgZHJpdmVyIGZhaWxlZCB0byBnZXQgZmxhc2gg bWVtb3J5DQo+ID4gICAgID4gYXR0cmlidXRlLlxuIikpOw0KPiA+ICAgICA+ICsgIH0gZWxzZSB7 DQo+ID4gICAgID4gKyAgICBpZiAoKEdjZERlc2NyaXB0b3IuQXR0cmlidXRlcyAmIEVGSV9NRU1P UllfUlVOVElNRSkgPT0gMCkgew0KPiA+ICAgICA+ICsgICAgICBTdGF0dXMgPSBnRFMtPlNldE1l bW9yeVNwYWNlQXR0cmlidXRlcyAoDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICBC YXNlQWRkcmVzcywNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCwNCj4g PiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgIEdjZERlc2NyaXB0b3IuQXR0cmlidXRlcyB8 IEVGSV9NRU1PUllfUlVOVElNRQ0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgKTsN Cj4gPiAgICAgPiArICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICAgICA+ICsg ICAgICAgIERFQlVHICgoREVCVUdfV0FSTiwgIlZhcmlhYmxlIGRyaXZlciBmYWlsZWQgdG8gYWRk DQo+ID4gICAgID4gRUZJX01FTU9SWV9SVU5USU1FIGF0dHJpYnV0ZSB0byBGbGFzaC5cbiIpKTsN Cj4gPiAgICAgPiArICAgICAgfQ0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ICsgIH0NCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBJbml0aWFsaXplcyB2 YXJpYWJsZSB3cml0ZSBzZXJ2aWNlIGFmdGVyIEZUVyB3YXMgcmVhZHkuDQo+ID4gICAgID4gKyAg Ly8NCj4gPiAgICAgPiArICBWYXJpYWJsZVdyaXRlU2VydmljZUluaXRpYWxpemVEeGUgKCk7DQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gQ2xvc2UgdGhlIG5v dGlmeSBldmVudCB0byBhdm9pZCBpbnN0YWxsDQo+ID4gZ0VmaVZhcmlhYmxlV3JpdGVBcmNoUHJv dG9jb2xHdWlkDQo+ID4gICAgID4gYWdhaW4uDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiAr ICBnQlMtPkNsb3NlRXZlbnQgKEV2ZW50KTsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgVGhpcyBBUEkgZnVuY3Rpb24gcmV0dXJucyB3aGV0 aGVyIG9yIG5vdCB0aGUgcG9saWN5IGVuZ2luZSBpcw0KPiA+ICAgICA+ICsgIGN1cnJlbnRseSBi ZWluZyBlbmZvcmNlZC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtW291dF0gICBT dGF0ZSAgICAgICBQb2ludGVyIHRvIGEgcmV0dXJuIHZhbHVlIGZvciB3aGV0aGVyIHRoZSBwb2xp Y3kNCj4gPiAgICAgPiBlbmZvcmNlbWVudA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaXMgY3VycmVudGx5IGVuYWJsZWQuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsg IEByZXR2YWwgICAgIEVGSV9TVUNDRVNTDQo+ID4gICAgID4gKyAgQHJldHZhbCAgICAgT3RoZXJz ICAgICAgICBBbiBlcnJvciBoYXMgcHJldmVudGVkIHRoaXMgY29tbWFuZCBmcm9tDQo+ID4gY29t cGxldGluZy4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtFRklfU1RB VFVTDQo+ID4gICAgID4gK0VGSUFQSQ0KPiA+ICAgICA+ICtQcm90b2NvbElzVmFyaWFibGVQb2xp Y3lFbmFibGVkICgNCj4gPiAgICAgPiArICBPVVQgQk9PTEVBTiAgKlN0YXRlDQo+ID4gICAgID4g KyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgKlN0YXRlID0gSXNWYXJpYWJsZVBvbGlj eUVuYWJsZWQgKCk7DQo+ID4gICAgID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICAgICA+ ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBWYXJpYWJsZSBE cml2ZXIgbWFpbiBlbnRyeSBwb2ludC4gVGhlIFZhcmlhYmxlIGRyaXZlciBwbGFjZXMgdGhlIDQg RUZJDQo+ID4gICAgID4gKyAgcnVudGltZSBzZXJ2aWNlcyBpbiB0aGUgRUZJIFN5c3RlbSBUYWJs ZSBhbmQgaW5zdGFsbHMgYXJjaCBwcm90b2NvbHMNCj4gPiAgICAgPiArICBmb3IgdmFyaWFibGUg cmVhZCBhbmQgd3JpdGUgc2VydmljZXMgYmVpbmcgYXZhaWxhYmxlLiBJdCBhbHNvIHJlZ2lzdGVy cw0KPiA+ICAgICA+ICsgIGEgbm90aWZpY2F0aW9uIGZ1bmN0aW9uIGZvciBhbiBFVlRfU0lHTkFM X1ZJUlRVQUxfQUREUkVTU19DSEFOR0UNCj4gPiAgICAgPiBldmVudC4NCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgQHBhcmFtW2luXSBJbWFnZUhhbmRsZSAgICBUaGUgZmlybXdhcmUgYWxsb2Nh dGVkIGhhbmRsZSBmb3IgdGhlIEVGSQ0KPiA+IGltYWdlLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtp bl0gU3lzdGVtVGFibGUgICAgQSBwb2ludGVyIHRvIHRoZSBFRkkgU3lzdGVtIFRhYmxlLg0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFZhcmlhYmxl IHNlcnZpY2Ugc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkLg0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArKiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4gPiAgICAgPiArRUZJQVBJDQo+ID4gICAg ID4gK1ZhcmlhYmxlU2VydmljZUluaXRpYWxpemUgKA0KPiA+ICAgICA+ICsgIElOIEVGSV9IQU5E TEUgICAgICAgIEltYWdlSGFuZGxlLA0KPiA+ICAgICA+ICsgIElOIEVGSV9TWVNURU1fVEFCTEUg ICpTeXN0ZW1UYWJsZQ0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0KPiA+ICAgICA+ICsg IEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiAgICAgPiArICBFRklfRVZFTlQgICBSZWFkeVRvQm9v dEV2ZW50Ow0KPiA+ICAgICA+ICsgIEVGSV9FVkVOVCAgIEVuZE9mRHhlRXZlbnQ7DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgIFBST1RFQ1RFRF9WQVJJQUJMRV9DT05URVhUX0lOICBDb250ZXh0 SW47DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gSW5pdGlh bHplIHByb3RlY3RlZCB2YXJpYWJsZSBzZXJ2aWNlLCBpZiBlbmFibGVkLg0KPiA+ICAgICA+ICsg IC8vDQo+ID4gICAgID4gKyAgQ29udGV4dEluLlN0cnVjdFNpemUgICAgPSBzaXplb2YgKENvbnRl eHRJbik7DQo+ID4gICAgID4gKyAgQ29udGV4dEluLlN0cnVjdFZlcnNpb24gPQ0KPiA+ICAgICA+ IFBST1RFQ1RFRF9WQVJJQUJMRV9DT05URVhUX0lOX1NUUlVDVF9WRVJTSU9OOw0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArICBDb250ZXh0SW4uRmluZFZhcmlhYmxlU21tICAgICA9IE5VTEw7DQo+ ID4gICAgID4gKyAgQ29udGV4dEluLkdldFZhcmlhYmxlSW5mbyAgICAgPSBHZXRWYXJpYWJsZUlu Zm87DQo+ID4gICAgID4gKyAgQ29udGV4dEluLkdldE5leHRWYXJpYWJsZUluZm8gPSBHZXROZXh0 VmFyaWFibGVJbmZvOw0KPiA+ICAgICA+ICsgIENvbnRleHRJbi5VcGRhdGVWYXJpYWJsZVN0b3Jl ID0gVmFyaWFibGVFeExpYlVwZGF0ZU52VmFyaWFibGU7DQo+ID4gICAgID4gKyAgQ29udGV4dElu LlVwZGF0ZVZhcmlhYmxlICAgICAgPSBWYXJpYWJsZUV4TGliVXBkYXRlVmFyaWFibGU7DQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgIENvbnRleHRJbi5NYXhWYXJpYWJsZVNpemUgICAgID0gKFVJ TlQzMilHZXRNYXhWYXJpYWJsZVNpemUgKCk7DQo+ID4gICAgID4gKyAgQ29udGV4dEluLlZhcmlh YmxlU2VydmljZVVzZXIgPSBGcm9tU21tTW9kdWxlOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr ICBTdGF0dXMgPSBQcm90ZWN0ZWRWYXJpYWJsZUxpYkluaXRpYWxpemUgKCZDb250ZXh0SW4pOw0K PiA+ICAgICA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykgJiYgKFN0YXR1cyAhPSBFRklfVU5T VVBQT1JURUQpKSB7DQo+ID4gICAgID4gKyAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0K PiA+ICAgICA+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsgIFN0YXR1cyA9IFZhcmlhYmxlQ29tbW9uSW5pdGlhbGl6ZSAoKTsNCj4g PiAgICAgPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICBTdGF0dXMgPSBnQlMtPkluc3RhbGxNdWx0aXBsZVByb3RvY29sSW50ZXJmYWNlcyAo DQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICZtSGFuZGxlLA0KPiA+ICAgICA+ICsgICAg ICAgICAgICAgICAgICAmZ0Vka2lpVmFyaWFibGVMb2NrUHJvdG9jb2xHdWlkLA0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgICAgICAmbVZhcmlhYmxlTG9jaywNCj4gPiAgICAgPiArICAgICAgICAg ICAgICAgICAgTlVMTA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICApOw0KPiA+ICAgICA+ ICsgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsg IFN0YXR1cyA9IGdCUy0+SW5zdGFsbE11bHRpcGxlUHJvdG9jb2xJbnRlcmZhY2VzICgNCj4gPiAg ICAgPiArICAgICAgICAgICAgICAgICAgJm1IYW5kbGUsDQo+ID4gICAgID4gKyAgICAgICAgICAg ICAgICAgICZnRWRraWlWYXJDaGVja1Byb3RvY29sR3VpZCwNCj4gPiAgICAgPiArICAgICAgICAg ICAgICAgICAgJm1WYXJDaGVjaywNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgTlVMTA0K PiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICApOw0KPiA+ICAgICA+ICsgIEFTU0VSVF9FRklf RVJST1IgKFN0YXR1cyk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFN5c3RlbVRhYmxlLT5S dW50aW1lU2VydmljZXMtPkdldFZhcmlhYmxlICAgICAgICAgPQ0KPiA+ICAgICA+IFZhcmlhYmxl U2VydmljZUdldFZhcmlhYmxlOw0KPiA+ICAgICA+ICsgIFN5c3RlbVRhYmxlLT5SdW50aW1lU2Vy dmljZXMtPkdldE5leHRWYXJpYWJsZU5hbWUgPQ0KPiA+ICAgICA+IFZhcmlhYmxlU2VydmljZUdl dE5leHRWYXJpYWJsZU5hbWU7DQo+ID4gICAgID4gKyAgU3lzdGVtVGFibGUtPlJ1bnRpbWVTZXJ2 aWNlcy0+U2V0VmFyaWFibGUgICAgICAgICA9DQo+ID4gVmFyaWFibGVTZXJ2aWNlU2V0VmFyaWFi bGU7DQo+ID4gICAgID4gKyAgU3lzdGVtVGFibGUtPlJ1bnRpbWVTZXJ2aWNlcy0+UXVlcnlWYXJp YWJsZUluZm8gICA9DQo+ID4gICAgID4gVmFyaWFibGVTZXJ2aWNlUXVlcnlWYXJpYWJsZUluZm87 DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gTm93IGluc3Rh bGwgdGhlIFZhcmlhYmxlIFJ1bnRpbWUgQXJjaGl0ZWN0dXJhbCBwcm90b2NvbCBvbiBhIG5ldw0K PiA+IGhhbmRsZS4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIFN0YXR1cyA9IGdCUy0+ SW5zdGFsbFByb3RvY29sSW50ZXJmYWNlICgNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAg Jm1IYW5kbGUsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICZnRWZpVmFyaWFibGVBcmNo UHJvdG9jb2xHdWlkLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICBFRklfTkFUSVZFX0lO VEVSRkFDRSwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgTlVMTA0KPiA+ICAgICA+ICsg ICAgICAgICAgICAgICAgICApOw0KPiA+ICAgICA+ICsgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1 cyk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIGlmICghUGNkR2V0Qm9vbCAoUGNkRW11VmFy aWFibGVOdk1vZGVFbmFibGUpKSB7DQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAg Ly8gUmVnaXN0ZXIgRnR3Tm90aWZpY2F0aW9uRXZlbnQgKCkgbm90aWZ5IGZ1bmN0aW9uLg0KPiA+ ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIEVmaUNyZWF0ZVByb3RvY29sTm90aWZ5RXZl bnQgKA0KPiA+ICAgICA+ICsgICAgICAmZ0VmaUZhdWx0VG9sZXJhbnRXcml0ZVByb3RvY29sR3Vp ZCwNCj4gPiAgICAgPiArICAgICAgVFBMX0NBTExCQUNLLA0KPiA+ICAgICA+ICsgICAgICBGdHdO b3RpZmljYXRpb25FdmVudCwNCj4gPiAgICAgPiArICAgICAgKFZPSUQgKilTeXN0ZW1UYWJsZSwN Cj4gPiAgICAgPiArICAgICAgJm1GdHdSZWdpc3RyYXRpb24NCj4gPiAgICAgPiArICAgICAgKTsN Cj4gPiAgICAgPiArICB9IGVsc2Ugew0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAg IC8vIEVtdWxhdGVkIG5vbi12b2xhdGlsZSB2YXJpYWJsZSBtb2RlIGRvZXMgbm90IGRlcGVuZCBv biBGVkIgYW5kDQo+ID4gRlRXLg0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIFZh cmlhYmxlV3JpdGVTZXJ2aWNlSW5pdGlhbGl6ZUR4ZSAoKTsNCj4gPiAgICAgPiArICB9DQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgIFN0YXR1cyA9IGdCUy0+Q3JlYXRlRXZlbnRFeCAoDQo+ID4g ICAgID4gKyAgICAgICAgICAgICAgICAgIEVWVF9OT1RJRllfU0lHTkFMLA0KPiA+ICAgICA+ICsg ICAgICAgICAgICAgICAgICBUUExfTk9USUZZLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAg ICBWYXJpYWJsZUNsYXNzQWRkcmVzc0NoYW5nZUV2ZW50LA0KPiA+ICAgICA+ICsgICAgICAgICAg ICAgICAgICBOVUxMLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAmZ0VmaUV2ZW50Vmly dHVhbEFkZHJlc3NDaGFuZ2VHdWlkLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAmbVZp cnR1YWxBZGRyZXNzQ2hhbmdlRXZlbnQNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgKTsN Cj4gPiAgICAgPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIFJlZ2lzdGVyIHRoZSBldmVudCBoYW5kbGlu ZyBmdW5jdGlvbiB0byByZWNsYWltIHZhcmlhYmxlIGZvciBPUyB1c2FnZS4NCj4gPiAgICAgPiAr ICAvLw0KPiA+ICAgICA+ICsgIFN0YXR1cyA9IEVmaUNyZWF0ZUV2ZW50UmVhZHlUb0Jvb3RFeCAo DQo+ID4gICAgID4gKyAgICAgICAgICAgICBUUExfTk9USUZZLA0KPiA+ICAgICA+ICsgICAgICAg ICAgICAgT25SZWFkeVRvQm9vdCwNCj4gPiAgICAgPiArICAgICAgICAgICAgIE5VTEwsDQo+ID4g ICAgID4gKyAgICAgICAgICAgICAmUmVhZHlUb0Jvb3RFdmVudA0KPiA+ICAgICA+ICsgICAgICAg ICAgICAgKTsNCj4gPiAgICAgPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIFJlZ2lzdGVyIHRoZSBldmVu dCBoYW5kbGluZyBmdW5jdGlvbiB0byBzZXQgdGhlIEVuZCBPZiBEWEUgZmxhZy4NCj4gPiAgICAg PiArICAvLw0KPiA+ICAgICA+ICsgIFN0YXR1cyA9IGdCUy0+Q3JlYXRlRXZlbnRFeCAoDQo+ID4g ICAgID4gKyAgICAgICAgICAgICAgICAgIEVWVF9OT1RJRllfU0lHTkFMLA0KPiA+ICAgICA+ICsg ICAgICAgICAgICAgICAgICBUUExfQ0FMTEJBQ0ssDQo+ID4gICAgID4gKyAgICAgICAgICAgICAg ICAgIE9uRW5kT2ZEeGUsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ID4g ICAgID4gKyAgICAgICAgICAgICAgICAgICZnRWZpRW5kT2ZEeGVFdmVudEdyb3VwR3VpZCwNCj4g PiAgICAgPiArICAgICAgICAgICAgICAgICAgJkVuZE9mRHhlRXZlbnQNCj4gPiAgICAgPiArICAg ICAgICAgICAgICAgICAgKTsNCj4gPiAgICAgPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMp Ow0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLyBSZWdpc3RlciBhbmQgaW5pdGlhbGl6ZSB0 aGUgVmFyaWFibGVQb2xpY3kgZW5naW5lLg0KPiA+ICAgICA+ICsgIFN0YXR1cyA9IEluaXRWYXJp YWJsZVBvbGljeUxpYiAoVmFyaWFibGVTZXJ2aWNlR2V0VmFyaWFibGUpOw0KPiA+ICAgICA+ICsg IEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4gICAgID4gKyAgU3RhdHVzID0gVmFyQ2hl Y2tSZWdpc3RlclNldFZhcmlhYmxlQ2hlY2tIYW5kbGVyDQo+IChWYWxpZGF0ZVNldFZhcmlhYmxl KTsNCj4gPiAgICAgPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+ICAgICA+ICsg IFN0YXR1cyA9IGdCUy0+SW5zdGFsbE11bHRpcGxlUHJvdG9jb2xJbnRlcmZhY2VzICgNCj4gPiAg ICAgPiArICAgICAgICAgICAgICAgICAgJm1IYW5kbGUsDQo+ID4gICAgID4gKyAgICAgICAgICAg ICAgICAgICZnRWRraWlWYXJpYWJsZVBvbGljeVByb3RvY29sR3VpZCwNCj4gPiAgICAgPiArICAg ICAgICAgICAgICAgICAgJm1WYXJpYWJsZVBvbGljeVByb3RvY29sLA0KPiA+ICAgICA+ICsgICAg ICAgICAgICAgICAgICBOVUxMDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICk7DQo+ID4g ICAgID4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gZGlmZiAt LWdpdA0KPiA+ICAgICA+DQo+ID4gYS9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1By b3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlRXhMaWIuYw0KPiA+ICAgICA+DQo+ID4gYi9NZGVN b2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxl RXhMaWIuYw0KPiA+ICAgICA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gICAgID4gaW5kZXgg MDAwMDAwMDAwMDAwLi41OTA0YmNiZmY3OGENCj4gPiAgICAgPiAtLS0gL2Rldi9udWxsDQo+ID4g ICAgID4gKysrDQo+ID4gICAgID4NCj4gPiBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFi bGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVFeExpYi5jDQo+ID4gICAgID4gQEAgLTAs MCArMSw0MTcgQEANCj4gPiAgICAgPiArLyoqIEBmaWxlDQo+ID4gICAgID4gKyAgUHJvdmlkZXMg dmFyaWFibGUgZHJpdmVyIGV4dGVuZGVkIHNlcnZpY2VzLg0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyMiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ICAgICA+ICtTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNE LTItQ2xhdXNlLVBhdGVudA0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsjaW5jbHVkZSAiVmFyaWFibGUuaCINCj4gPiAgICAgPiArI2luY2x1ZGUg IlZhcmlhYmxlUGFyc2luZy5oIg0KPiA+ICAgICA+ICsjaW5jbHVkZSAiVmFyaWFibGVSdW50aW1l Q2FjaGUuaCINCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIEZpbmRz IHZhcmlhYmxlIGluIHN0b3JhZ2UgYmxvY2tzIG9mIHZvbGF0aWxlIGFuZCBub24tdm9sYXRpbGUg c3RvcmFnZQ0KPiBhcmVhcy4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgVGhpcyBjb2RlIGZp bmRzIHZhcmlhYmxlIGluIHN0b3JhZ2UgYmxvY2tzIG9mIHZvbGF0aWxlIGFuZCBub24tdm9sYXRp bGUNCj4gPiBzdG9yYWdlDQo+ID4gICAgID4gYXJlYXMuDQo+ID4gICAgID4gKyAgSWYgVmFyaWFi bGVOYW1lIGlzIGFuIGVtcHR5IHN0cmluZywgdGhlbiB3ZSBqdXN0IHJldHVybiB0aGUgZmlyc3QN Cj4gPiAgICAgPiArICBxdWFsaWZpZWQgdmFyaWFibGUgd2l0aG91dCBjb21wYXJpbmcgVmFyaWFi bGVOYW1lIGFuZCBWZW5kb3JHdWlkLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1b aW5dICBWYXJpYWJsZU5hbWUgICAgICAgICAgTmFtZSBvZiB0aGUgdmFyaWFibGUgdG8gYmUgZm91 bmQuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgVmVuZG9yR3VpZCAgICAgICAgICAgIFZhcmlh YmxlIHZlbmRvciBHVUlEIHRvIGJlIGZvdW5kLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtvdXRdIEF1 dGhWYXJpYWJsZUluZm8gICAgICBQb2ludGVyIHRvIEFVVEhfVkFSSUFCTEVfSU5GTw0KPiA+IHN0 cnVjdHVyZQ0KPiA+ICAgICA+IGZvcg0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBvdXRwdXQgb2YgdGhlIHZhcmlhYmxlIGZvdW5kLg0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgICAgSWYgVmFyaWFi bGVOYW1lIGlzIG5vdCBhbiBlbXB0eQ0KPiA+IHN0cmluZywNCj4gPiAgICAgPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgVmVuZG9yR3VpZCBpcyBOVUxMLg0KPiA+ ICAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICBWYXJpYWJsZSBzdWNj ZXNzZnVsbHkgZm91bmQuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAg ICAgICAgIFZhcmlhYmxlIG5vdCBmb3VuZA0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ ID4gICAgID4gK0VGSV9TVEFUVVMNCj4gPiAgICAgPiArRUZJQVBJDQo+ID4gICAgID4gK1Zhcmlh YmxlRXhMaWJGaW5kVmFyaWFibGUgKA0KPiA+ICAgICA+ICsgIElOICBDSEFSMTYgICAgICAgICAg ICAgICpWYXJpYWJsZU5hbWUsDQo+ID4gICAgID4gKyAgSU4gIEVGSV9HVUlEICAgICAgICAgICAg KlZlbmRvckd1aWQsDQo+ID4gICAgID4gKyAgT1VUIEFVVEhfVkFSSUFCTEVfSU5GTyAgKkF1dGhW YXJpYWJsZUluZm8NCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBF RklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ICAgICA+ICsgIFZBUklB QkxFX1BPSU5URVJfVFJBQ0sgICAgICAgICBWYXJpYWJsZTsNCj4gPiAgICAgPiArICBBVVRIRU5U SUNBVEVEX1ZBUklBQkxFX0hFQURFUiAgKkF1dGhWYXJpYWJsZTsNCj4gPiAgICAgPiArICBQUk9U RUNURURfVkFSSUFCTEVfSU5GTyAgICAgICAgVmFySW5mbzsNCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgU3RhdHVzID0gRmluZFZhcmlhYmxlICgNCj4gPiAgICAgPiArICAgICAgICAgICAgIFZh cmlhYmxlTmFtZSwNCj4gPiAgICAgPiArICAgICAgICAgICAgIFZlbmRvckd1aWQsDQo+ID4gICAg ID4gKyAgICAgICAgICAgICAmVmFyaWFibGUsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAmbVZh cmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbCwNCj4gPiAgICAgPiArICAgICAgICAg ICAgIEZBTFNFDQo+ID4gICAgID4gKyAgICAgICAgICAgICApOw0KPiA+ICAgICA+ICsgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiArICAgIEF1dGhWYXJpYWJsZUluZm8tPkRh dGEgICAgICAgICAgID0gTlVMTDsNCj4gPiAgICAgPiArICAgIEF1dGhWYXJpYWJsZUluZm8tPkRh dGFTaXplICAgICAgID0gMDsNCj4gPiAgICAgPiArICAgIEF1dGhWYXJpYWJsZUluZm8tPkF0dHJp YnV0ZXMgICAgID0gMDsNCj4gPiAgICAgPiArICAgIEF1dGhWYXJpYWJsZUluZm8tPlB1YktleUlu ZGV4ICAgID0gMDsNCj4gPiAgICAgPiArICAgIEF1dGhWYXJpYWJsZUluZm8tPk1vbm90b25pY0Nv dW50ID0gMDsNCj4gPiAgICAgPiArICAgIEF1dGhWYXJpYWJsZUluZm8tPlRpbWVTdGFtcCAgICAg ID0gTlVMTDsNCj4gPiAgICAgPiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4gICAgID4gKyAgfQ0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBBdXRoVmFyaWFibGVJbmZvLT5OYW1lU2l6ZSAgICAg PSBOYW1lU2l6ZU9mVmFyaWFibGUgKFZhcmlhYmxlLkN1cnJQdHIsDQo+ID4gICAgID4gbVZhcmlh YmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0KTsNCj4gPiAgICAgPiAr ICBBdXRoVmFyaWFibGVJbmZvLT5WYXJpYWJsZU5hbWUgPSBHZXRWYXJpYWJsZU5hbWVQdHINCj4g KFZhcmlhYmxlLkN1cnJQdHIsDQo+ID4gICAgID4gbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJp YWJsZUdsb2JhbC5BdXRoRm9ybWF0KTsNCj4gPiAgICAgPiArICBBdXRoVmFyaWFibGVJbmZvLT5W ZW5kb3JHdWlkICAgPSBHZXRWZW5kb3JHdWlkUHRyIChWYXJpYWJsZS5DdXJyUHRyLA0KPiA+ICAg ICA+IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdCk7DQo+ ID4gICAgID4gKyAgQXV0aFZhcmlhYmxlSW5mby0+RGF0YVNpemUgICAgID0gRGF0YVNpemVPZlZh cmlhYmxlIChWYXJpYWJsZS5DdXJyUHRyLA0KPiA+ICAgICA+IG1WYXJpYWJsZU1vZHVsZUdsb2Jh bC0+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdCk7DQo+ID4gICAgID4gKyAgQXV0aFZhcmlhYmxl SW5mby0+RGF0YSAgICAgICAgID0gR2V0VmFyaWFibGVEYXRhUHRyIChWYXJpYWJsZS5DdXJyUHRy LA0KPiA+ICAgICA+IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuQXV0aEZv cm1hdCk7DQo+ID4gICAgID4gKyAgQXV0aFZhcmlhYmxlSW5mby0+QXR0cmlidXRlcyAgID0gVmFy aWFibGUuQ3VyclB0ci0+QXR0cmlidXRlczsNCj4gPiAgICAgPiArICBpZiAobVZhcmlhYmxlTW9k dWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0KSB7DQo+ID4gICAgID4gKyAgICBB dXRoVmFyaWFibGUgICAgICAgICAgICAgICAgICAgICA9IChBVVRIRU5USUNBVEVEX1ZBUklBQkxF X0hFQURFUg0KPiA+ICAgICA+ICopVmFyaWFibGUuQ3VyclB0cjsNCj4gPiAgICAgPiArICAgIEF1 dGhWYXJpYWJsZUluZm8tPlB1YktleUluZGV4ICAgID0gQXV0aFZhcmlhYmxlLT5QdWJLZXlJbmRl eDsNCj4gPiAgICAgPiArICAgIEF1dGhWYXJpYWJsZUluZm8tPk1vbm90b25pY0NvdW50ID0gUmVh ZFVuYWxpZ25lZDY0DQo+ID4gKCYoQXV0aFZhcmlhYmxlLQ0KPiA+ICAgICA+ID5Nb25vdG9uaWND b3VudCkpOw0KPiA+ICAgICA+ICsgICAgQXV0aFZhcmlhYmxlSW5mby0+VGltZVN0YW1wICAgICAg PSAmQXV0aFZhcmlhYmxlLT5UaW1lU3RhbXA7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICBDb3B5TWVtICgmVmFySW5mby5IZWFkZXIsIEF1dGhWYXJpYWJsZUluZm8s IHNpemVvZiAoVmFySW5mby5IZWFkZXIpKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgVmFy SW5mby5CdWZmZXIgICAgICAgID0gVmFyaWFibGUuQ3VyclB0cjsNCj4gPiAgICAgPiArICBWYXJJ bmZvLlBsYWluRGF0YSAgICAgPSBOVUxMOw0KPiA+ICAgICA+ICsgIFZhckluZm8uUGxhaW5EYXRh U2l6ZSA9IDA7DQo+ID4gICAgID4gKyAgVmFySW5mby5GbGFncy5BdXRoICAgID0gbVZhcmlhYmxl TW9kdWxlR2xvYmFsLQ0KPiA+ID5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0Ow0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIEluIGNhc2UgdGhlIHZhcmlhYmxl IGlzIGVuY3J5cHRlZC4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIFN0YXR1cyA9IFBy b3RlY3RlZFZhcmlhYmxlTGliR2V0QnlJbmZvICgmVmFySW5mbyk7DQo+ID4gICAgID4gKyAgaWYg KCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiArICAgIGlmIChWYXJJbmZvLlBsYWlu RGF0YSAhPSBOVUxMKSB7DQo+ID4gICAgID4gKyAgICAgIEF1dGhWYXJpYWJsZUluZm8tPkRhdGEg ICAgID0gVmFySW5mby5QbGFpbkRhdGE7DQo+ID4gICAgID4gKyAgICAgIEF1dGhWYXJpYWJsZUlu Zm8tPkRhdGFTaXplID0gVmFySW5mby5QbGFpbkRhdGFTaXplOw0KPiA+ICAgICA+ICsgICAgfQ0K PiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgcmV0dXJuIEVGSV9TVUND RVNTOw0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAg PiArICBGaW5kcyBuZXh0IHZhcmlhYmxlIGluIHN0b3JhZ2UgYmxvY2tzIG9mIHZvbGF0aWxlIGFu ZCBub24tdm9sYXRpbGUgc3RvcmFnZQ0KPiA+IGFyZWFzLg0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICBUaGlzIGNvZGUgZmluZHMgbmV4dCB2YXJpYWJsZSBpbiBzdG9yYWdlIGJsb2NrcyBvZiB2 b2xhdGlsZSBhbmQgbm9uLQ0KPiB2b2xhdGlsZQ0KPiA+ICAgICA+IHN0b3JhZ2UgYXJlYXMuDQo+ ID4gICAgID4gKyAgSWYgVmFyaWFibGVOYW1lIGlzIGFuIGVtcHR5IHN0cmluZywgdGhlbiB3ZSBq dXN0IHJldHVybiB0aGUgZmlyc3QNCj4gPiAgICAgPiArICBxdWFsaWZpZWQgdmFyaWFibGUgd2l0 aG91dCBjb21wYXJpbmcgVmFyaWFibGVOYW1lIGFuZCBWZW5kb3JHdWlkLg0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICBAcGFyYW1baW5dICBWYXJpYWJsZU5hbWUgICAgICAgICAgTmFtZSBvZiB0 aGUgdmFyaWFibGUgdG8gYmUgZm91bmQuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgVmVuZG9y R3VpZCAgICAgICAgICAgIFZhcmlhYmxlIHZlbmRvciBHVUlEIHRvIGJlIGZvdW5kLg0KPiA+ICAg ICA+ICsgIEBwYXJhbVtvdXRdIEF1dGhWYXJpYWJsZUluZm8gICAgICBQb2ludGVyIHRvIEFVVEhf VkFSSUFCTEVfSU5GTw0KPiA+IHN0cnVjdHVyZQ0KPiA+ICAgICA+IGZvcg0KPiA+ICAgICA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgb2YgdGhlIG5leHQgdmFy aWFibGUuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFS QU1FVEVSICAgICBJZiBWYXJpYWJsZU5hbWUgaXMgbm90IGFuIGVtcHR5DQo+ID4gc3RyaW5nLA0K PiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBWZW5k b3JHdWlkIGlzIE5VTEwuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICAgICAgIFZhcmlhYmxlIHN1Y2Nlc3NmdWxseSBmb3VuZC4NCj4gPiAgICAgPiArICBAcmV0dmFs IEVGSV9OT1RfRk9VTkQgICAgICAgICAgICAgVmFyaWFibGUgbm90IGZvdW5kDQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX1NUQVRVUw0KPiA+ICAgICA+ICtFRklB UEkNCj4gPiAgICAgPiArVmFyaWFibGVFeExpYkZpbmROZXh0VmFyaWFibGUgKA0KPiA+ICAgICA+ ICsgIElOICBDSEFSMTYgICAgICAgICAgICAgICpWYXJpYWJsZU5hbWUsDQo+ID4gICAgID4gKyAg SU4gIEVGSV9HVUlEICAgICAgICAgICAgKlZlbmRvckd1aWQsDQo+ID4gICAgID4gKyAgT1VUIEFV VEhfVkFSSUFCTEVfSU5GTyAgKkF1dGhWYXJpYWJsZUluZm8NCj4gPiAgICAgPiArICApDQo+ID4g ICAgID4gK3sNCj4gPiAgICAgPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgU3Rh dHVzOw0KPiA+ICAgICA+ICsgIFZBUklBQkxFX0hFQURFUiAgICAgICAgICAgICAgICAqVmFyaWFi bGVQdHI7DQo+ID4gICAgID4gKyAgQVVUSEVOVElDQVRFRF9WQVJJQUJMRV9IRUFERVIgICpBdXRo VmFyaWFibGVQdHI7DQo+ID4gICAgID4gKyAgVkFSSUFCTEVfU1RPUkVfSEVBREVSDQo+ID4gICAg ID4gKlZhcmlhYmxlU3RvcmVIZWFkZXJbVmFyaWFibGVTdG9yZVR5cGVNYXhdOw0KPiA+ICAgICA+ ICsgIFBST1RFQ1RFRF9WQVJJQUJMRV9JTkZPICAgICAgICBWYXJJbmZvOw0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICBWYXJpYWJsZVN0b3JlSGVhZGVyW1ZhcmlhYmxlU3RvcmVUeXBlVm9sYXRp bGVdID0NCj4gPiAgICAgPiAoVkFSSUFCTEVfU1RPUkVfSEVBREVSICopKFVJTlROKW1WYXJpYWJs ZU1vZHVsZUdsb2JhbC0NCj4gPiAgICAgPiA+VmFyaWFibGVHbG9iYWwuVm9sYXRpbGVWYXJpYWJs ZUJhc2U7DQo+ID4gICAgID4gKyAgVmFyaWFibGVTdG9yZUhlYWRlcltWYXJpYWJsZVN0b3JlVHlw ZUhvYl0gICAgICA9DQo+ID4gKFZBUklBQkxFX1NUT1JFX0hFQURFUg0KPiA+ICAgICA+ICopKFVJ TlROKW1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuSG9iVmFyaWFibGVCYXNl Ow0KPiA+ICAgICA+ICsgIFZhcmlhYmxlU3RvcmVIZWFkZXJbVmFyaWFibGVTdG9yZVR5cGVOdl0g ICAgICAgPSBtTnZWYXJpYWJsZUNhY2hlOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBTdGF0 dXMgPSBWYXJpYWJsZVNlcnZpY2VHZXROZXh0VmFyaWFibGVJbnRlcm5hbCAoDQo+ID4gICAgID4g KyAgICAgICAgICAgICBWYXJpYWJsZU5hbWUsDQo+ID4gICAgID4gKyAgICAgICAgICAgICBWZW5k b3JHdWlkLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgVmFyaWFibGVTdG9yZUhlYWRlciwNCj4g PiAgICAgPiArICAgICAgICAgICAgICZWYXJpYWJsZVB0ciwNCj4gPiAgICAgPiArICAgICAgICAg ICAgIG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdA0KPiA+ ICAgICA+ICsgICAgICAgICAgICAgKTsNCj4gPiAgICAgPiArICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ID4gICAgID4gKyAgICBBdXRoVmFyaWFibGVJbmZvLT5WYXJpYWJsZU5hbWUgICA9 IE5VTEw7DQo+ID4gICAgID4gKyAgICBBdXRoVmFyaWFibGVJbmZvLT5WZW5kb3JHdWlkICAgICA9 IE5VTEw7DQo+ID4gICAgID4gKyAgICBBdXRoVmFyaWFibGVJbmZvLT5EYXRhICAgICAgICAgICA9 IE5VTEw7DQo+ID4gICAgID4gKyAgICBBdXRoVmFyaWFibGVJbmZvLT5EYXRhU2l6ZSAgICAgICA9 IDA7DQo+ID4gICAgID4gKyAgICBBdXRoVmFyaWFibGVJbmZvLT5BdHRyaWJ1dGVzICAgICA9IDA7 DQo+ID4gICAgID4gKyAgICBBdXRoVmFyaWFibGVJbmZvLT5QdWJLZXlJbmRleCAgICA9IDA7DQo+ ID4gICAgID4gKyAgICBBdXRoVmFyaWFibGVJbmZvLT5Nb25vdG9uaWNDb3VudCA9IDA7DQo+ID4g ICAgID4gKyAgICBBdXRoVmFyaWFibGVJbmZvLT5UaW1lU3RhbXAgICAgICA9IE5VTEw7DQo+ID4g ICAgID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgQXV0aFZhcmlhYmxlSW5mby0+TmFtZVNpemUgICAgID0gTmFtZVNpemVPZlZh cmlhYmxlIChWYXJpYWJsZVB0ciwNCj4gPiAgICAgPiBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZh cmlhYmxlR2xvYmFsLkF1dGhGb3JtYXQpOw0KPiA+ICAgICA+ICsgIEF1dGhWYXJpYWJsZUluZm8t PlZhcmlhYmxlTmFtZSA9IEdldFZhcmlhYmxlTmFtZVB0ciAoVmFyaWFibGVQdHIsDQo+ID4gICAg ID4gbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0KTsNCj4g PiAgICAgPiArICBBdXRoVmFyaWFibGVJbmZvLT5WZW5kb3JHdWlkICAgPSBHZXRWZW5kb3JHdWlk UHRyIChWYXJpYWJsZVB0ciwNCj4gPiAgICAgPiBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlh YmxlR2xvYmFsLkF1dGhGb3JtYXQpOw0KPiA+ICAgICA+ICsgIEF1dGhWYXJpYWJsZUluZm8tPkRh dGFTaXplICAgICA9IERhdGFTaXplT2ZWYXJpYWJsZSAoVmFyaWFibGVQdHIsDQo+ID4gICAgID4g bVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0KTsNCj4gPiAg ICAgPiArICBBdXRoVmFyaWFibGVJbmZvLT5EYXRhICAgICAgICAgPSBHZXRWYXJpYWJsZURhdGFQ dHIgKFZhcmlhYmxlUHRyLA0KPiA+ICAgICA+IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFi bGVHbG9iYWwuQXV0aEZvcm1hdCk7DQo+ID4gICAgID4gKyAgQXV0aFZhcmlhYmxlSW5mby0+QXR0 cmlidXRlcyAgID0gVmFyaWFibGVQdHItPkF0dHJpYnV0ZXM7DQo+ID4gICAgID4gKyAgaWYgKG1W YXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdCkgew0KPiA+ICAg ICA+ICsgICAgQXV0aFZhcmlhYmxlUHRyICAgICAgICAgICAgICAgICAgPSAoQVVUSEVOVElDQVRF RF9WQVJJQUJMRV9IRUFERVINCj4gPiAgICAgPiAqKVZhcmlhYmxlUHRyOw0KPiA+ICAgICA+ICsg ICAgQXV0aFZhcmlhYmxlSW5mby0+UHViS2V5SW5kZXggICAgPSBBdXRoVmFyaWFibGVQdHItPlB1 YktleUluZGV4Ow0KPiA+ICAgICA+ICsgICAgQXV0aFZhcmlhYmxlSW5mby0+TW9ub3RvbmljQ291 bnQgPSBSZWFkVW5hbGlnbmVkNjQNCj4gPiAoJihBdXRoVmFyaWFibGVQdHItDQo+ID4gICAgID4g Pk1vbm90b25pY0NvdW50KSk7DQo+ID4gICAgID4gKyAgICBBdXRoVmFyaWFibGVJbmZvLT5UaW1l U3RhbXAgICAgICA9ICZBdXRoVmFyaWFibGVQdHItPlRpbWVTdGFtcDsNCj4gPiAgICAgPiArICB9 DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIENvcHlNZW0gKCZWYXJJbmZvLkhlYWRlciwgQXV0 aFZhcmlhYmxlSW5mbywgc2l6ZW9mIChWYXJJbmZvLkhlYWRlcikpOw0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICBWYXJJbmZvLkJ1ZmZlciAgICAgICAgPSBWYXJpYWJsZVB0cjsNCj4gPiAgICAg PiArICBWYXJJbmZvLlBsYWluRGF0YSAgICAgPSBOVUxMOw0KPiA+ICAgICA+ICsgIFZhckluZm8u UGxhaW5EYXRhU2l6ZSA9IDA7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFN0YXR1cyA9IFBy b3RlY3RlZFZhcmlhYmxlTGliR2V0QnlJbmZvICgmVmFySW5mbyk7DQo+ID4gICAgID4gKyAgaWYg KCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiArICAgIGlmIChWYXJJbmZvLlBsYWlu RGF0YSAhPSBOVUxMKSB7DQo+ID4gICAgID4gKyAgICAgIEF1dGhWYXJpYWJsZUluZm8tPkRhdGEg ICAgID0gVmFySW5mby5QbGFpbkRhdGE7DQo+ID4gICAgID4gKyAgICAgIEF1dGhWYXJpYWJsZUlu Zm8tPkRhdGFTaXplID0gVmFySW5mby5QbGFpbkRhdGFTaXplOw0KPiA+ICAgICA+ICsgICAgfQ0K PiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgcmV0dXJuIEVGSV9TVUND RVNTOw0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAg PiArICBVcGRhdGUgdGhlIHZhcmlhYmxlIHJlZ2lvbiB3aXRoIFZhcmlhYmxlIGluZm9ybWF0aW9u Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1baW5dIEF1dGhWYXJpYWJsZUluZm8g ICAgICAgUG9pbnRlciBBVVRIX1ZBUklBQkxFX0lORk8NCj4gc3RydWN0dXJlDQo+ID4gZm9yDQo+ ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0IG9mIHRo ZSB2YXJpYWJsZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICAgICAgIFRoZSB1cGRhdGUgb3BlcmF0aW9uIGlzIHN1Y2Nlc3MuDQo+ID4gICAg ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICAgIEludmFsaWQgcGFyYW1ldGVy Lg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX1dSSVRFX1BST1RFQ1RFRCAgICAgICBWYXJpYWJs ZSBpcyB3cml0ZS1wcm90ZWN0ZWQuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JF U09VUkNFUyAgICAgIFRoZXJlIGlzIG5vdCBlbm91Z2ggcmVzb3VyY2UuDQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX1NUQVRVUw0KPiA+ICAgICA+ICtFRklBUEkN Cj4gPiAgICAgPiArVmFyaWFibGVFeExpYlVwZGF0ZVZhcmlhYmxlICgNCj4gPiAgICAgPiArICBJ TiBBVVRIX1ZBUklBQkxFX0lORk8gICpBdXRoVmFyaWFibGVJbmZvDQo+ID4gICAgID4gKyAgKQ0K PiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgVkFSSUFCTEVfUE9JTlRFUl9UUkFDSyAgVmFyaWFi bGU7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEZpbmRWYXJpYWJsZSAoQXV0aFZhcmlhYmxl SW5mby0+VmFyaWFibGVOYW1lLCBBdXRoVmFyaWFibGVJbmZvLQ0KPiA+ICAgICA+ID5WZW5kb3JH dWlkLCAmVmFyaWFibGUsICZtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLA0K PiBGQUxTRSk7DQo+ID4gICAgID4gKyAgcmV0dXJuIFVwZGF0ZVZhcmlhYmxlICgNCj4gPiAgICAg PiArICAgICAgICAgICBBdXRoVmFyaWFibGVJbmZvLT5WYXJpYWJsZU5hbWUsDQo+ID4gICAgID4g KyAgICAgICAgICAgQXV0aFZhcmlhYmxlSW5mby0+VmVuZG9yR3VpZCwNCj4gPiAgICAgPiArICAg ICAgICAgICBBdXRoVmFyaWFibGVJbmZvLT5EYXRhLA0KPiA+ICAgICA+ICsgICAgICAgICAgIEF1 dGhWYXJpYWJsZUluZm8tPkRhdGFTaXplLA0KPiA+ICAgICA+ICsgICAgICAgICAgIEF1dGhWYXJp YWJsZUluZm8tPkF0dHJpYnV0ZXMsDQo+ID4gICAgID4gKyAgICAgICAgICAgQXV0aFZhcmlhYmxl SW5mby0+UHViS2V5SW5kZXgsDQo+ID4gICAgID4gKyAgICAgICAgICAgQXV0aFZhcmlhYmxlSW5m by0+TW9ub3RvbmljQ291bnQsDQo+ID4gICAgID4gKyAgICAgICAgICAgJlZhcmlhYmxlLA0KPiA+ ICAgICA+ICsgICAgICAgICAgIEF1dGhWYXJpYWJsZUluZm8tPlRpbWVTdGFtcA0KPiA+ICAgICA+ ICsgICAgICAgICAgICk7DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8q Kg0KPiA+ICAgICA+ICsgIEdldCBzY3JhdGNoIGJ1ZmZlci4NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgQHBhcmFtW2luLCBvdXRdIFNjcmF0Y2hCdWZmZXJTaXplIFNjcmF0Y2ggYnVmZmVyIHNp emUuIElmIGlucHV0IHNpemUgaXMNCj4gPiBncmVhdGVyDQo+ID4gICAgID4gdGhhbg0KPiA+ICAg ICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWF4aW11bSBzdXBw b3J0ZWQgYnVmZmVyIHNpemUsIHRoaXMgdmFsdWUNCj4gY29udGFpbnMNCj4gPiAgICAgPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1heGltdW0gc3VwcG9ydGVkIGJ1 ZmZlciBzaXplIGFzIG91dHB1dC4NCj4gPiAgICAgPiArICBAcGFyYW1bb3V0XSAgICAgU2NyYXRj aEJ1ZmZlciAgICAgUG9pbnRlciB0byBzY3JhdGNoIGJ1ZmZlciBhZGRyZXNzLg0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIEdldCBzY3JhdGNoIGJ1 ZmZlciBzdWNjZXNzZnVsbHkuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQg ICBJZiBpbnB1dCBzaXplIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bQ0KPiA+ICAgICA+IHN1 cHBvcnRlZCBidWZmZXIgc2l6ZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAg ICA+ICtFRklfU1RBVFVTDQo+ID4gICAgID4gK0VGSUFQSQ0KPiA+ICAgICA+ICtWYXJpYWJsZUV4 TGliR2V0U2NyYXRjaEJ1ZmZlciAoDQo+ID4gICAgID4gKyAgSU4gT1VUIFVJTlROICAqU2NyYXRj aEJ1ZmZlclNpemUsDQo+ID4gICAgID4gKyAgT1VUICAgIFZPSUQgICAqKlNjcmF0Y2hCdWZmZXIN Cj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBVSU5UTiAgTWF4QnVm ZmVyU2l6ZTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgTWF4QnVmZmVyU2l6ZSA9IG1WYXJp YWJsZU1vZHVsZUdsb2JhbC0+U2NyYXRjaEJ1ZmZlclNpemU7DQo+ID4gICAgID4gKyAgaWYgKCpT Y3JhdGNoQnVmZmVyU2l6ZSA+IE1heEJ1ZmZlclNpemUpIHsNCj4gPiAgICAgPiArICAgICpTY3Jh dGNoQnVmZmVyU2l6ZSA9IE1heEJ1ZmZlclNpemU7DQo+ID4gICAgID4gKyAgICByZXR1cm4gRUZJ X1VOU1VQUE9SVEVEOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg KlNjcmF0Y2hCdWZmZXIgPSBHZXRFbmRQb2ludGVyICgoVkFSSUFCTEVfU1RPUkVfSEVBREVSDQo+ ID4gICAgID4gKikoKFVJTlROKW1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwu Vm9sYXRpbGVWYXJpYWJsZUJhc2UpKTsNCj4gPiAgICAgPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7 DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsg IFRoaXMgZnVuY3Rpb24gaXMgdG8gY2hlY2sgaWYgdGhlIHJlbWFpbmluZyB2YXJpYWJsZSBzcGFj ZSBpcyBlbm91Z2ggdG8gc2V0DQo+ID4gICAgID4gKyAgYWxsIFZhcmlhYmxlcyBmcm9tIGFyZ3Vt ZW50IGxpc3Qgc3VjY2Vzc2Z1bGx5LiBUaGUgcHVycG9zZSBvZiB0aGUgY2hlY2sNCj4gPiAgICAg PiArICBpcyB0byBrZWVwIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgVmFyaWFibGVzIHRvIGJlIGlu IHZhcmlhYmxlIHN0b3JhZ2UuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIE5vdGU6IFZhcmlh YmxlcyBhcmUgYXNzdW1lZCB0byBiZSBpbiBzYW1lIHN0b3JhZ2UuDQo+ID4gICAgID4gKyAgVGhl IHNldCBzZXF1ZW5jZSBvZiBWYXJpYWJsZXMgd2lsbCBiZSBzYW1lIHdpdGggdGhlIHNlcXVlbmNl IG9mDQo+ID4gVmFyaWFibGVFbnRyeQ0KPiA+ICAgICA+IGZyb20gYXJndW1lbnQgbGlzdCwNCj4g PiAgICAgPiArICBzbyBmb2xsb3cgdGhlIGFyZ3VtZW50IHNlcXVlbmNlIHRvIGNoZWNrIHRoZSBW YXJpYWJsZXMuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gQXR0cmlidXRl cyAgICAgICAgIFZhcmlhYmxlIGF0dHJpYnV0ZXMgZm9yIFZhcmlhYmxlIGVudHJpZXMuDQo+ID4g ICAgID4gKyAgQHBhcmFtIC4uLiAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGFyZ3Vt ZW50IGxpc3Qgd2l0aCB0eXBlDQo+ID4gICAgID4gVkFSSUFCTEVfRU5UUllfQ09OU0lTVEVOQ1kg Ki4NCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIE5VTEwgdGVy bWluYXRlcyB0aGUgbGlzdC4gVGhlIFZhcmlhYmxlU2l6ZSBvZg0KPiA+ICAgICA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFZBUklBQkxFX0VOVFJZX0NPTlNJU1RFTkNZIGlzIHRo ZSB2YXJpYWJsZSBkYXRhDQo+IHNpemUNCj4gPiBhcw0KPiA+ICAgICA+IGlucHV0Lg0KPiA+ICAg ICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IHdpbGwgYmUgY2hhbmdlZCB0 byB2YXJpYWJsZSB0b3RhbCBzaXplIGFzIG91dHB1dC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgQHJldHZhbCBUUlVFICAgICAgICAgICAgICAgICAgSGF2ZSBlbm91Z2ggdmFyaWFibGUgc3Bh Y2UgdG8gc2V0IHRoZSBWYXJpYWJsZXMNCj4gPiAgICAgPiBzdWNjZXNzZnVsbHkuDQo+ID4gICAg ID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgICAgICAgICAgTm8gZW5vdWdoIHZhcmlhYmxlIHNw YWNlIHRvIHNldCB0aGUgVmFyaWFibGVzDQo+ID4gICAgID4gc3VjY2Vzc2Z1bGx5Lg0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK0JPT0xFQU4NCj4gPiAgICAgPiArRUZJ QVBJDQo+ID4gICAgID4gK1ZhcmlhYmxlRXhMaWJDaGVja1JlbWFpbmluZ1NwYWNlRm9yQ29uc2lz dGVuY3kgKA0KPiA+ICAgICA+ICsgIElOIFVJTlQzMiAgQXR0cmlidXRlcywNCj4gPiAgICAgPiAr ICAuLi4NCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBWQV9MSVNU ICBNYXJrZXI7DQo+ID4gICAgID4gKyAgQk9PTEVBTiAgUmV0dXJuOw0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICBWQV9TVEFSVCAoTWFya2VyLCBBdHRyaWJ1dGVzKTsNCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgUmV0dXJuID0gQ2hlY2tSZW1haW5pbmdTcGFjZUZvckNvbnNpc3RlbmN5SW50 ZXJuYWwgKEF0dHJpYnV0ZXMsDQo+ID4gTWFya2VyKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgVkFfRU5EIChNYXJrZXIpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICByZXR1cm4gUmV0 dXJuOw0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAg PiArICBSZXR1cm4gVFJVRSBpZiBhdCBPUyBydW50aW1lLg0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICBAcmV0dmFsIFRSVUUgSWYgYXQgT1MgcnVudGltZS4NCj4gPiAgICAgPiArICBAcmV0dmFs IEZBTFNFIElmIGF0IGJvb3QgdGltZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ ICAgICA+ICtCT09MRUFODQo+ID4gICAgID4gK0VGSUFQSQ0KPiA+ICAgICA+ICtWYXJpYWJsZUV4 TGliQXRSdW50aW1lICgNCj4gPiAgICAgPiArICBWT0lEDQo+ID4gICAgID4gKyAgKQ0KPiA+ICAg ICA+ICt7DQo+ID4gICAgID4gKyAgcmV0dXJuIEF0UnVudGltZSAoKTsNCj4gPiAgICAgPiArfQ0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgVXBkYXRlIHBhcnRpYWwg ZGF0YSBvZiBhIHZhcmlhYmxlIG9uIE5WIHN0b3JhZ2UgYW5kL29yIGNhY2hlZCBjb3B5Lg0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1baW5dICBWYXJpYWJsZUluZm8gIFBvaW50ZXIg dG8gYSB2YXJpYWJsZSB3aXRoIGRldGFpbGVkDQo+IGluZm9ybWF0aW9uLg0KPiA+ICAgICA+ICsg IEBwYXJhbVtpbl0gIE9mZnNldCAgICAgICAgT2Zmc2V0IHRvIHdyaXRlIGZyb20uDQo+ID4gICAg ID4gKyAgQHBhcmFtW2luXSAgU2l6ZSAgICAgICAgICBTaXplIG9mIGRhdGEgQnVmZmVyIHRvIHVw ZGF0ZS4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dICBCdWZmZXIgICAgICAgIFBvaW50ZXIgdG8g ZGF0YSBidWZmZXIgdG8gdXBkYXRlLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSBkYXRhIHdhcyB1cGRhdGVkIHN1 Y2Nlc3NmdWxseS4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAg IElmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGRpcmVjdGx5IGluDQo+ID4gcnVudGltZS4NCj4g PiAgICAgPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgIElmIFZhcmlhYmxlSW5m bywgQnVmZmVyIG9yIFNpemUgYXJlDQo+IG5vdA0KPiA+ICAgICA+IHZhbGlkLg0KPiA+ICAgICA+ ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgICAgICAgRmFpbGVkIHRvIHVwZGF0ZSBOViBz dG9yYWdlIG9yIHZhcmlhYmxlIGNhY2hlLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ ID4gICAgID4gK0VGSV9TVEFUVVMNCj4gPiAgICAgPiArRUZJQVBJDQo+ID4gICAgID4gK1Zhcmlh YmxlRXhMaWJVcGRhdGVOdlZhcmlhYmxlICgNCj4gPiAgICAgPiArICBJTiAgUFJPVEVDVEVEX1ZB UklBQkxFX0lORk8gICpWYXJpYWJsZUluZm8sDQo+ID4gICAgID4gKyAgSU4gIFVJTlROICAgICAg ICAgICAgICAgICAgICBPZmZzZXQsDQo+ID4gICAgID4gKyAgSU4gIFVJTlQzMiAgICAgICAgICAg ICAgICAgICBTaXplLA0KPiA+ICAgICA+ICsgIElOICBVSU5UOCAgICAgICAgICAgICAgICAgICAg KkJ1ZmZlcg0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0KPiA+ICAgICA+ICsgIEVGSV9T VEFUVVMgICAgICAgICAgICAgIFN0YXR1czsNCj4gPiAgICAgPiArICBWQVJJQUJMRV9HTE9CQUwg ICAgICAgICAqR2xvYmFsOw0KPiA+ICAgICA+ICsgIFZBUklBQkxFX1JVTlRJTUVfQ0FDSEUgICpD YWNoZUluc3RhbmNlOw0KPiA+ICAgICA+ICsgIFZBUklBQkxFX0hFQURFUiAgICAgICAgICpWYXJp YWJsZUNhY2hlOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBpZiAoKG1WYXJpYWJsZU1vZHVs ZUdsb2JhbCA9PSBOVUxMKSB8fCAobU52VmFyaWFibGVDYWNoZSA9PSBOVUxMKSkgew0KPiA+ICAg ICA+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gPiAgICAgPiArICB9DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gRmx1c2ggdGhlIGNhY2hlIHRv IHN0b3JlLg0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgaWYgKFNpemUgPT0gKFVJTlQz MiktMSkgew0KPiA+ICAgICA+ICsgICAgU3RhdHVzID0gRnR3VmFyaWFibGVTcGFjZSAoDQo+ID4g ICAgID4gKyAgICAgICAgICAgICAgIG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCj4gPlZhcmlhYmxl R2xvYmFsLk5vblZvbGF0aWxlVmFyaWFibGVCYXNlLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAg ICBtTnZWYXJpYWJsZUNhY2hlDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICk7DQo+ID4gICAg ID4gKyAgICBpZiAoICAhRUZJX0VSUk9SIChTdGF0dXMpDQo+ID4gICAgID4gKyAgICAgICAmJiAo bVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5Ib2JWYXJpYWJsZUJhc2UgIT0g MCkpDQo+ID4gICAgID4gKyAgICB7DQo+ID4gICAgID4gKyAgICAgIEZsdXNoSG9iVmFyaWFibGVU b0ZsYXNoIChOVUxMLCBOVUxMKTsNCj4gPiAgICAgPiArICAgICAgaWYgKG1WYXJpYWJsZU1vZHVs ZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuSG9iVmFyaWFibGVCYXNlICE9IDApIHsNCj4gPiAgICAg PiArICAgICAgICBGcmVlUG9vbCAoKFZPSUQgKikoVUlOVE4pbVZhcmlhYmxlTW9kdWxlR2xvYmFs LQ0KPiA+ICAgICA+ID5WYXJpYWJsZUdsb2JhbC5Ib2JWYXJpYWJsZUJhc2UpOw0KPiA+ICAgICA+ ICsgICAgICAgIG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuSG9iVmFyaWFi bGVCYXNlID0gMDsNCj4gPiAgICAgPiArICAgICAgfQ0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4gICAgID4gKyAgfQ0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICBpZiAoICAoVmFyaWFibGVJbmZvID09IE5VTEwpDQo+ID4g ICAgID4gKyAgICAgfHwgKFZhcmlhYmxlSW5mby0+U3RvcmVJbmRleCA9PSBWQVJfSU5ERVhfSU5W QUxJRCkNCj4gPiAgICAgPiArICAgICB8fCAoQnVmZmVyID09IE5VTEwpDQo+ID4gICAgID4gKyAg ICAgfHwgKFNpemUgPT0gMCkpDQo+ID4gICAgID4gKyAgew0KPiA+ICAgICA+ICsgICAgQVNTRVJU IChWYXJpYWJsZUluZm8gIT0gTlVMTCk7DQo+ID4gICAgID4gKyAgICBBU1NFUlQgKFZhcmlhYmxl SW5mby0+U3RvcmVJbmRleCAhPSBWQVJfSU5ERVhfSU5WQUxJRCk7DQo+ID4gICAgID4gKyAgICBB U1NFUlQgKEJ1ZmZlciAhPSBOVUxMKTsNCj4gPiAgICAgPiArICAgIEFTU0VSVCAoU2l6ZSAhPSAw KTsNCj4gPiAgICAgPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gICAg ID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBHbG9iYWwgPSAmbVZhcmlhYmxlTW9k dWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbDsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgVmFy aWFibGVDYWNoZSA9IChWQVJJQUJMRV9IRUFERVIgKikoKFVJTlROKW1OdlZhcmlhYmxlQ2FjaGUg Kw0KPiA+ICAgICA+IChVSU5UTilWYXJpYWJsZUluZm8tPlN0b3JlSW5kZXgpOw0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArICBBU1NFUlQgKA0KPiA+ICAgICA+ICsgICAgU3RyQ21wICgNCj4gPiAg ICAgPiArICAgICAgVmFyaWFibGVJbmZvLT5IZWFkZXIuVmFyaWFibGVOYW1lLA0KPiA+ICAgICA+ ICsgICAgICBHZXRWYXJpYWJsZU5hbWVQdHIgKFZhcmlhYmxlQ2FjaGUsIEdsb2JhbC0+QXV0aEZv cm1hdCkNCj4gPiAgICAgPiArICAgICAgKSA9PSAwDQo+ID4gICAgID4gKyAgICApOw0KPiA+ICAg ICA+ICsgIEFTU0VSVCAoDQo+ID4gICAgID4gKyAgICBDb21wYXJlR3VpZCAoDQo+ID4gICAgID4g KyAgICAgIFZhcmlhYmxlSW5mby0+SGVhZGVyLlZlbmRvckd1aWQsDQo+ID4gICAgID4gKyAgICAg IEdldFZlbmRvckd1aWRQdHIgKFZhcmlhYmxlQ2FjaGUsIEdsb2JhbC0+QXV0aEZvcm1hdCkNCj4g PiAgICAgPiArICAgICAgKQ0KPiA+ICAgICA+ICsgICAgKTsNCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBGb3JjaWJseSB1cGRhdGUgcGFydCBkYXRhIG9mIGZs YXNoIGNvcHkgb2YgdGhlIHZhcmlhYmxlIC4uLg0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4g KyAgU3RhdHVzID0gIFVwZGF0ZVZhcmlhYmxlU3RvcmUgKA0KPiA+ICAgICA+ICsgICAgICAgICAg ICAgIEdsb2JhbCwNCj4gPiAgICAgPiArICAgICAgICAgICAgICBGQUxTRSwNCj4gPiAgICAgPiAr ICAgICAgICAgICAgICBGQUxTRSwNCj4gPiAgICAgPiArICAgICAgICAgICAgICBtVmFyaWFibGVN b2R1bGVHbG9iYWwtPkZ2Ykluc3RhbmNlLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgIChVSU5U TikoR2xvYmFsLT5Ob25Wb2xhdGlsZVZhcmlhYmxlQmFzZSArIFZhcmlhYmxlSW5mby0NCj4gPiA+ U3RvcmVJbmRleCArDQo+ID4gICAgID4gT2Zmc2V0KSwNCj4gPiAgICAgPiArICAgICAgICAgICAg ICBTaXplLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgIEJ1ZmZlcg0KPiA+ICAgICA+ICsgICAg ICAgICAgICAgICk7DQo+ID4gICAgID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ ICAgICA+ICsgICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gPiAgICAgPiArICAgIHJl dHVybiBTdGF0dXM7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAv Lw0KPiA+ICAgICA+ICsgIC8vIC4uLiBhcyB3ZWxsIGFzIHRoZSBsb2NhbCBjYWNoZWQgY29weS4N Cj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIENvcHlNZW0gKChWT0lEICopKChVSU5UTilW YXJpYWJsZUNhY2hlICsgT2Zmc2V0KSwgQnVmZmVyLCBTaXplKTsNCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBTeW5jIHJlbW90ZSBjYWNoZWQgY29weS4NCj4g PiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIENhY2hlSW5zdGFuY2UgPSAmR2xvYmFsLQ0KPiA+ ICAgICA+ID5WYXJpYWJsZVJ1bnRpbWVDYWNoZUNvbnRleHQuVmFyaWFibGVSdW50aW1lTnZDYWNo ZTsNCj4gPiAgICAgPiArICBpZiAoQ2FjaGVJbnN0YW5jZS0+U3RvcmUgIT0gTlVMTCkgew0KPiA+ ICAgICA+ICsgICAgU3RhdHVzID0gIFN5bmNocm9uaXplUnVudGltZVZhcmlhYmxlQ2FjaGUgKA0K PiA+ICAgICA+ICsgICAgICAgICAgICAgICAgQ2FjaGVJbnN0YW5jZSwNCj4gPiAgICAgPiArICAg ICAgICAgICAgICAgIChVSU5UTilWYXJpYWJsZUluZm8tPlN0b3JlSW5kZXggKyBPZmZzZXQsDQo+ ID4gICAgID4gKyAgICAgICAgICAgICAgICBTaXplDQo+ID4gICAgID4gKyAgICAgICAgICAgICAg ICApOw0KPiA+ICAgICA+ICsgICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gPiAgICAg PiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4g PiAgICAgPiArfQ0KPiA+ICAgICA+IGRpZmYgLS1naXQNCj4gPiAgICAgPg0KPiA+DQo+IGEvTWRl TW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJs ZUxvY2tSZXF1DQo+ID4gICAgID4gZXN0VG9Mb2NrLmMNCj4gPiAgICAgPg0KPiA+DQo+IGIvTWRl TW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJs ZUxvY2tSZXF1DQo+ID4gICAgID4gZXN0VG9Mb2NrLmMNCj4gPiAgICAgPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KPiA+ICAgICA+IGluZGV4IDAwMDAwMDAwMDAwMC4uZDg0OWVlOWNlMjkyDQo+ID4g ICAgID4gLS0tIC9kZXYvbnVsbA0KPiA+ICAgICA+ICsrKw0KPiA+ICAgICA+DQo+ID4NCj4gYi9N ZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1Zhcmlh YmxlTG9ja1JlcXUNCj4gPiAgICAgPiBlc3RUb0xvY2suYw0KPiA+ICAgICA+IEBAIC0wLDAgKzEs OTYgQEANCj4gPiAgICAgPiArLyoqIEBmaWxlDQo+ID4gICAgID4gKyAgVGVtcG9yYXJ5IGxvY2F0 aW9uIG9mIHRoZSBSZXF1ZXN0VG9Mb2NrIHNoaW0gY29kZSB3aGlsZSBwcm9qZWN0cw0KPiA+ICAg ICA+ICsgIGFyZSBtb3ZlZCB0byBWYXJpYWJsZVBvbGljeS4gU2hvdWxkIGJlIHJlbW92ZWQgd2hl biBkZXByZWNhdGVkLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBDb3B5cmlnaHQgKGMpIE1p Y3Jvc29mdCBDb3Jwb3JhdGlvbi4NCj4gPiAgICAgPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsjaW5jbHVkZSA8VWVmaS5oPg0KPiA+ICAgICA+ICsjaW5jbHVk ZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPiA+ICAgICA+ICsjaW5jbHVkZSA8TGlicmFyeS9NZW1v cnlBbGxvY2F0aW9uTGliLmg+DQo+ID4gICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1ZhcmlhYmxl UG9saWN5TGliLmg+DQo+ID4gICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1ZhcmlhYmxlUG9saWN5 SGVscGVyTGliLmg+DQo+ID4gICAgID4gKyNpbmNsdWRlIDxQcm90b2NvbC9WYXJpYWJsZUxvY2su aD4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIERFUFJFQ0FURUQu IFRISVMgSVMgT05MWSBIRVJFIEFTIEEgQ09OVkVOSUVOQ0UgV0hJTEUgUE9SVElORy4NCj4gPiAg ICAgPiArICBNYXJrIGEgdmFyaWFibGUgdGhhdCB3aWxsIGJlY29tZSByZWFkLW9ubHkgYWZ0ZXIg bGVhdmluZyB0aGUgRFhFIHBoYXNlDQo+IG9mDQo+ID4gICAgID4gKyAgZXhlY3V0aW9uLiBXcml0 ZSByZXF1ZXN0IGNvbWluZyBmcm9tIFNNTSBlbnZpcm9ubWVudCB0aHJvdWdoDQo+ID4gICAgID4g KyAgRUZJX1NNTV9WQVJJQUJMRV9QUk9UT0NPTCBpcyBhbGxvd2VkLg0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICBAcGFyYW1baW5dIFRoaXMgICAgICAgICAgVGhlIFZBUklBQkxFX0xPQ0tfUFJP VE9DT0wgaW5zdGFuY2UuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBWYXJpYWJsZU5hbWUgIEEg cG9pbnRlciB0byB0aGUgdmFyaWFibGUgbmFtZSB0aGF0IHdpbGwgYmUNCj4gPiBtYWRlDQo+ID4g ICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWQtb25seSBzdWJzZXF1ZW50bHku DQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBWZW5kb3JHdWlkICAgIEEgcG9pbnRlciB0byB0aGUg dmVuZG9yIEdVSUQgdGhhdCB3aWxsIGJlDQo+IG1hZGUNCj4gPiAgICAgPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmVhZC1vbmx5IHN1YnNlcXVlbnRseS4NCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHZhcmlhYmxlIHNwZWNp ZmllZCBieSB0aGUgVmFyaWFibGVOYW1lDQo+ID4gYW5kDQo+ID4gICAgID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGhlIFZlbmRvckd1aWQgd2FzIG1hcmtlZCBhcyBwZW5kaW5n IHRvIGJlDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZC1v bmx5Lg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIFZhcmlhYmxl TmFtZSBvciBWZW5kb3JHdWlkIGlzDQo+IE5VTEwuDQo+ID4gICAgID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3IgVmFyaWFibGVOYW1lIGlzIGFuIGVtcHR5IHN0cmluZy4NCj4g PiAgICAgPiArICBAcmV0dmFsIEVGSV9BQ0NFU1NfREVOSUVEDQo+IEVGSV9FTkRfT0ZfRFhFX0VW RU5UX0dST1VQX0dVSUQNCj4gPiBvcg0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEVGSV9FVkVOVF9HUk9VUF9SRUFEWV9UT19CT09UIGhhcyBhbHJlYWR5DQo+IGJl ZW4NCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWxlZC4N Cj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBUaGVyZSBpcyBub3Qg ZW5vdWdoIHJlc291cmNlIHRvIGhvbGQNCj4gPiB0aGUNCj4gPiAgICAgPiBsb2NrDQo+ID4gICAg ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC4NCj4gPiAgICAgPiAr KiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4gPiAgICAgPiArRUZJQVBJDQo+ID4gICAgID4g K1ZhcmlhYmxlTG9ja1JlcXVlc3RUb0xvY2sgKA0KPiA+ICAgICA+ICsgIElOIENPTlNUIEVES0lJ X1ZBUklBQkxFX0xPQ0tfUFJPVE9DT0wgICpUaGlzLA0KPiA+ICAgICA+ICsgIElOIENIQVIxNiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpWYXJpYWJsZU5hbWUsDQo+ID4gICAgID4gKyAg SU4gRUZJX0dVSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlZlbmRvckd1aWQNCj4gPiAg ICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBFRklfU1RBVFVTICAgICAgICAg ICAgIFN0YXR1czsNCj4gPiAgICAgPiArICBWQVJJQUJMRV9QT0xJQ1lfRU5UUlkgICpOZXdQb2xp Y3k7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIERFQlVHICgoREVCVUdfV0FSTiwgIiEhISBE RVBSRUNBVEVEIElOVEVSRkFDRSAhISEgJWEoKSB3aWxsIGdvDQo+ID4gYXdheQ0KPiA+ICAgICA+ IHNvb24hXG4iLCBfX0ZVTkNUSU9OX18pKTsNCj4gPiAgICAgPiArICBERUJVRyAoKERFQlVHX1dB Uk4sICIhISEgREVQUkVDQVRFRCBJTlRFUkZBQ0UgISEhIFBsZWFzZSBtb3ZlDQo+IHRvDQo+ID4g dXNlDQo+ID4gICAgID4gVmFyaWFibGUgUG9saWN5IVxuIikpOw0KPiA+ICAgICA+ICsgIERFQlVH ICgoREVCVUdfV0FSTiwgIiEhISBERVBSRUNBVEVEIElOVEVSRkFDRSAhISENCj4gPiBWYXJpYWJs ZTogJWcgJXNcbiIsDQo+ID4gICAgID4gVmVuZG9yR3VpZCwgVmFyaWFibGVOYW1lKSk7DQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgIE5ld1BvbGljeSA9IE5VTEw7DQo+ID4gICAgID4gKyAgU3Rh dHVzICAgID0gQ3JlYXRlQmFzaWNWYXJpYWJsZVBvbGljeSAoDQo+ID4gICAgID4gKyAgICAgICAg ICAgICAgICBWZW5kb3JHdWlkLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgVmFyaWFibGVO YW1lLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgVkFSSUFCTEVfUE9MSUNZX05PX01JTl9T SVpFLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgVkFSSUFCTEVfUE9MSUNZX05PX01BWF9T SVpFLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgVkFSSUFCTEVfUE9MSUNZX05PX01VU1Rf QVRUUiwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgIFZBUklBQkxFX1BPTElDWV9OT19DQU5U X0FUVFIsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICBWQVJJQUJMRV9QT0xJQ1lfVFlQRV9M T0NLX05PVywNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICZOZXdQb2xpY3kNCj4gPiAgICAg PiArICAgICAgICAgICAgICAgICk7DQo+ID4gICAgID4gKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4gPiAgICAgPiArICAgIFN0YXR1cyA9IFJlZ2lzdGVyVmFyaWFibGVQb2xpY3kgKE5l d1BvbGljeSk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAg IC8vIElmIHRoZSBlcnJvciByZXR1cm5lZCBpcyBFRklfQUxSRUFEWV9TVEFSVEVELCB3ZSBuZWVk IHRvIGNoZWNrDQo+IHRoZQ0KPiA+ICAgICA+ICsgICAgLy8gY3VycmVudCBkYXRhYmFzZSBmb3Ig dGhlIHZhcmlhYmxlIGFuZCBzZWUgd2hldGhlciBpdCdzIGxvY2tlZC4gSWYgaXQncw0KPiA+ICAg ICA+ICsgICAgLy8gbG9ja2VkLCB3ZSdyZSBzdGlsbCBmaW5lLCBidXQgYWxzbyBnZW5lcmF0ZSBh IERFQlVHX1dBUk4gbWVzc2FnZQ0KPiBzbw0KPiA+IHRoZQ0KPiA+ICAgICA+ICsgICAgLy8gZHVw bGljYXRlIGxvY2sgY2FuIGJlIHJlbW92ZWQuDQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ ICsgICAgaWYgKFN0YXR1cyA9PSBFRklfQUxSRUFEWV9TVEFSVEVEKSB7DQo+ID4gICAgID4gKyAg ICAgIFN0YXR1cyA9IFZhbGlkYXRlU2V0VmFyaWFibGUgKFZhcmlhYmxlTmFtZSwgVmVuZG9yR3Vp ZCwgMCwgMCwgTlVMTCk7DQo+ID4gICAgID4gKyAgICAgIGlmIChTdGF0dXMgPT0gRUZJX1dSSVRF X1BST1RFQ1RFRCkgew0KPiA+ICAgICA+ICsgICAgICAgIERFQlVHICgoREVCVUdfV0FSTiwgIiAg VmFyaWFibGU6ICVnICVzIGlzIGFscmVhZHkgbG9ja2VkIVxuIiwNCj4gPiAgICAgPiBWZW5kb3JH dWlkLCBWYXJpYWJsZU5hbWUpKTsNCj4gPiAgICAgPiArICAgICAgICBTdGF0dXMgPSBFRklfU1VD Q0VTUzsNCj4gPiAgICAgPiArICAgICAgfSBlbHNlIHsNCj4gPiAgICAgPiArICAgICAgICBERUJV RyAoKERFQlVHX0VSUk9SLCAiICBWYXJpYWJsZTogJWcgJXMgY2FuIG5vdCBiZSBsb2NrZWQhXG4i LA0KPiA+ICAgICA+IFZlbmRvckd1aWQsIFZhcmlhYmxlTmFtZSkpOw0KPiA+ICAgICA+ICsgICAg ICAgIFN0YXR1cyA9IEVGSV9BQ0NFU1NfREVOSUVEOw0KPiA+ICAgICA+ICsgICAgICB9DQo+ID4g ICAgID4gKyAgICB9DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAgID4gKyAgICBERUJVRyAoKERFQlVHX0VS Uk9SLCAiJWEgLSBGYWlsZWQgdG8gbG9jayB2YXJpYWJsZSAlcyEgJXJcbiIsDQo+ID4gICAgID4g X19GVU5DVElPTl9fLCBWYXJpYWJsZU5hbWUsIFN0YXR1cykpOw0KPiA+ICAgICA+ICsgIH0NCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyAgaWYgKE5ld1BvbGljeSAhPSBOVUxMKSB7DQo+ID4gICAg ID4gKyAgICBGcmVlUG9vbCAoTmV3UG9saWN5KTsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiBk aWZmIC0tZ2l0DQo+ID4gICAgID4NCj4gPg0KPiBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFy aWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVOb25Wb2xhdA0KPiA+ICAgICA+IGls ZS5jDQo+ID4gICAgID4NCj4gPg0KPiBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUv UHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVOb25Wb2xhdA0KPiA+ICAgICA+IGlsZS5jDQo+ ID4gICAgID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiAgICAgPiBpbmRleCAwMDAwMDAwMDAw MDAuLjMyZGQ5OTAxYjI2MA0KPiA+ICAgICA+IC0tLSAvZGV2L251bGwNCj4gPiAgICAgPiArKysN Cj4gPiAgICAgPg0KPiA+DQo+IGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90 ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZU5vblZvbGF0DQo+ID4gICAgID4gaWxlLmMNCj4gPiAg ICAgPiBAQCAtMCwwICsxLDUzNyBAQA0KPiA+ICAgICA+ICsvKiogQGZpbGUNCj4gPiAgICAgPiAr ICBDb21tb24gdmFyaWFibGUgbm9uLXZvbGF0aWxlIHN0b3JlIHJvdXRpbmVzLg0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArQ29weXJpZ2h0IChjKSAyMDE5IC0gMjAyMiwgSW50ZWwgQ29ycG9yYXRp b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ICAgICA+ICtTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiov DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsjaW5jbHVkZSAiVmFyaWFibGVOb25Wb2xhdGlsZS5o Ig0KPiA+ICAgICA+ICsjaW5jbHVkZSAiVmFyaWFibGVQYXJzaW5nLmgiDQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICtleHRlcm4gVkFSSUFCTEVfTU9EVUxFX0dMT0JBTCAgKm1WYXJpYWJsZU1vZHVs ZUdsb2JhbDsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIEdldCBu b24tdm9sYXRpbGUgbWF4aW11bSB2YXJpYWJsZSBzaXplLg0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICBAcmV0dXJuIE5vbi12b2xhdGlsZSBtYXhpbXVtIHZhcmlhYmxlIHNpemUuDQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArVUlOVE4NCj4gPiAgICAgPiArR2V0Tm9u Vm9sYXRpbGVNYXhWYXJpYWJsZVNpemUgKA0KPiA+ICAgICA+ICsgIFZPSUQNCj4gPiAgICAgPiAr ICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBpZiAoUGNkR2V0MzIgKFBjZEh3RXJyU3Rv cmFnZVNpemUpICE9IDApIHsNCj4gPiAgICAgPiArICAgIHJldHVybiBNQVggKA0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgTUFYIChQY2RHZXQzMiAoUGNkTWF4VmFyaWFibGVTaXplKSwgUGNkR2V0 MzINCj4gPiAgICAgPiAoUGNkTWF4QXV0aFZhcmlhYmxlU2l6ZSkpLA0KPiA+ICAgICA+ICsgICAg ICAgICAgICAgUGNkR2V0MzIgKFBjZE1heEhhcmR3YXJlRXJyb3JWYXJpYWJsZVNpemUpDQo+ID4g ICAgID4gKyAgICAgICAgICAgICApOw0KPiA+ICAgICA+ICsgIH0gZWxzZSB7DQo+ID4gICAgID4g KyAgICByZXR1cm4gTUFYIChQY2RHZXQzMiAoUGNkTWF4VmFyaWFibGVTaXplKSwgUGNkR2V0MzIN Cj4gPiAgICAgPiAoUGNkTWF4QXV0aFZhcmlhYmxlU2l6ZSkpOw0KPiA+ICAgICA+ICsgIH0NCj4g PiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgSW5p dCBlbXVsYXRlZCBub24tdm9sYXRpbGUgdmFyaWFibGUgc3RvcmUuDQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsgIEBwYXJhbVtvdXRdIFZhcmlhYmxlU3RvcmVCYXNlIE91dHB1dCBwb2ludGVyIHRv IGVtdWxhdGVkIG5vbi0NCj4gdm9sYXRpbGUNCj4gPiAgICAgPiB2YXJpYWJsZSBzdG9yZSBiYXNl Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAg ICBGdW5jdGlvbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuDQo+ID4gICAgID4gKyAgQHJldHZhbCBF RklfT1VUX09GX1JFU09VUkNFUyAgRmFpbCB0byBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5DQo+ID4g cmVzb3VyY2UuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX1NU QVRVUw0KPiA+ICAgICA+ICtJbml0RW11Tm9uVm9sYXRpbGVWYXJpYWJsZVN0b3JlICgNCj4gPiAg ICAgPiArICBPVVQgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICpWYXJpYWJsZVN0b3JlQmFzZQ0KPiA+ ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0KPiA+ICAgICA+ICsgIFZBUklBQkxFX1NUT1JFX0hF QURFUiAgKlZhcmlhYmxlU3RvcmU7DQo+ID4gICAgID4gKyAgVUlOVDMyICAgICAgICAgICAgICAg ICBWYXJpYWJsZVN0b3JlTGVuZ3RoOw0KPiA+ICAgICA+ICsgIEJPT0xFQU4gICAgICAgICAgICAg ICAgRnVsbHlJbml0aWFsaXplU3RvcmU7DQo+ID4gICAgID4gKyAgVUlOVDMyICAgICAgICAgICAg ICAgICBId0VyclN0b3JhZ2VTaXplOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBGdWxseUlu aXRpYWxpemVTdG9yZSA9IFRSVUU7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFZhcmlhYmxl U3RvcmVMZW5ndGggPSBQY2RHZXQzMiAoUGNkVmFyaWFibGVTdG9yZVNpemUpOw0KPiA+ICAgICA+ ICsgIEFTU0VSVCAoc2l6ZW9mIChWQVJJQUJMRV9TVE9SRV9IRUFERVIpIDw9IFZhcmlhYmxlU3Rv cmVMZW5ndGgpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8v IEFsbG9jYXRlIG1lbW9yeSBmb3IgdmFyaWFibGUgc3RvcmUuDQo+ID4gICAgID4gKyAgLy8NCj4g PiAgICAgPiArICBpZiAoUGNkR2V0NjQgKFBjZEVtdVZhcmlhYmxlTnZTdG9yZVJlc2VydmVkKSA9 PSAwKSB7DQo+ID4gICAgID4gKyAgICBWYXJpYWJsZVN0b3JlID0gKFZBUklBQkxFX1NUT1JFX0hF QURFUiAqKUFsbG9jYXRlUnVudGltZVBvb2wNCj4gPiAgICAgPiAoVmFyaWFibGVTdG9yZUxlbmd0 aCk7DQo+ID4gICAgID4gKyAgICBpZiAoVmFyaWFibGVTdG9yZSA9PSBOVUxMKSB7DQo+ID4gICAg ID4gKyAgICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiAgICAgPiArICAgIH0N Cj4gPiAgICAgPiArICB9IGVsc2Ugew0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAg IC8vIEEgbWVtb3J5IGxvY2F0aW9uIGhhcyBiZWVuIHJlc2VydmVkIGZvciB0aGUgTlYgdmFyaWFi bGUgc3RvcmUuDQo+ID4gQ2VydGFpbg0KPiA+ICAgICA+ICsgICAgLy8gcGxhdGZvcm1zIG1heSBi ZSBhYmxlIHRvIHByZXNlcnZlIGEgbWVtb3J5IHJhbmdlIGFjcm9zcyBzeXN0ZW0NCj4gPiByZXNl dHMsDQo+ID4gICAgID4gKyAgICAvLyB0aGVyZWJ5IHByb3ZpZGluZyBiZXR0ZXIgTlYgdmFyaWFi bGUgZW11bGF0aW9uLg0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIFZhcmlhYmxl U3RvcmUgPQ0KPiA+ICAgICA+ICsgICAgICAoVkFSSUFCTEVfU1RPUkVfSEVBREVSICopKFZPSUQg KikoVUlOVE4pDQo+ID4gICAgID4gKyAgICAgIFBjZEdldDY0IChQY2RFbXVWYXJpYWJsZU52U3Rv cmVSZXNlcnZlZCk7DQo+ID4gICAgID4gKyAgICBpZiAoKFZhcmlhYmxlU3RvcmUtPlNpemUgPT0g VmFyaWFibGVTdG9yZUxlbmd0aCkgJiYNCj4gPiAgICAgPiArICAgICAgICAoQ29tcGFyZUd1aWQg KCZWYXJpYWJsZVN0b3JlLT5TaWduYXR1cmUsDQo+ID4gICAgID4gJmdFZmlBdXRoZW50aWNhdGVk VmFyaWFibGVHdWlkKSB8fA0KPiA+ICAgICA+ICsgICAgICAgICBDb21wYXJlR3VpZCAoJlZhcmlh YmxlU3RvcmUtPlNpZ25hdHVyZSwgJmdFZmlWYXJpYWJsZUd1aWQpKSAmJg0KPiA+ICAgICA+ICsg ICAgICAgIChWYXJpYWJsZVN0b3JlLT5Gb3JtYXQgPT0gVkFSSUFCTEVfU1RPUkVfRk9STUFUVEVE KSAmJg0KPiA+ICAgICA+ICsgICAgICAgIChWYXJpYWJsZVN0b3JlLT5TdGF0ZSA9PSBWQVJJQUJM RV9TVE9SRV9IRUFMVEhZKSkNCj4gPiAgICAgPiArICAgIHsNCj4gPiAgICAgPiArICAgICAgREVC VUcgKCgNCj4gPiAgICAgPiArICAgICAgICBERUJVR19JTkZPLA0KPiA+ICAgICA+ICsgICAgICAg ICJWYXJpYWJsZSBTdG9yZSByZXNlcnZlZCBhdCAlcCBhcHBlYXJzIHRvIGJlIHZhbGlkXG4iLA0K PiA+ICAgICA+ICsgICAgICAgIFZhcmlhYmxlU3RvcmUNCj4gPiAgICAgPiArICAgICAgICApKTsN Cj4gPiAgICAgPiArICAgICAgRnVsbHlJbml0aWFsaXplU3RvcmUgPSBGQUxTRTsNCj4gPiAgICAg PiArICAgIH0NCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIGlmIChG dWxseUluaXRpYWxpemVTdG9yZSkgew0KPiA+ICAgICA+ICsgICAgU2V0TWVtIChWYXJpYWJsZVN0 b3JlLCBWYXJpYWJsZVN0b3JlTGVuZ3RoLCAweGZmKTsNCj4gPiAgICAgPiArICAgIC8vDQo+ID4g ICAgID4gKyAgICAvLyBVc2UgZ0VmaUF1dGhlbnRpY2F0ZWRWYXJpYWJsZUd1aWQgZm9yIHBvdGVu dGlhbCBhdXRoIHZhcmlhYmxlDQo+IHN1cHBvcnQuDQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAg ICA+ICsgICAgQ29weUd1aWQgKCZWYXJpYWJsZVN0b3JlLT5TaWduYXR1cmUsDQo+ICZnRWZpQXV0 aGVudGljYXRlZFZhcmlhYmxlR3VpZCk7DQo+ID4gICAgID4gKyAgICBWYXJpYWJsZVN0b3JlLT5T aXplICAgICAgPSBWYXJpYWJsZVN0b3JlTGVuZ3RoOw0KPiA+ICAgICA+ICsgICAgVmFyaWFibGVT dG9yZS0+Rm9ybWF0ICAgID0gVkFSSUFCTEVfU1RPUkVfRk9STUFUVEVEOw0KPiA+ICAgICA+ICsg ICAgVmFyaWFibGVTdG9yZS0+U3RhdGUgICAgID0gVkFSSUFCTEVfU1RPUkVfSEVBTFRIWTsNCj4g PiAgICAgPiArICAgIFZhcmlhYmxlU3RvcmUtPlJlc2VydmVkICA9IDA7DQo+ID4gICAgID4gKyAg ICBWYXJpYWJsZVN0b3JlLT5SZXNlcnZlZDEgPSAwOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyAgKlZhcmlhYmxlU3RvcmVCYXNlID0gKEVGSV9QSFlTSUNBTF9BRERS RVNTKShVSU5UTilWYXJpYWJsZVN0b3JlOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBId0Vy clN0b3JhZ2VTaXplID0gUGNkR2V0MzIgKFBjZEh3RXJyU3RvcmFnZVNpemUpOw0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIE5vdGUgdGhhdCBpbiBFZGtJSSB2 YXJpYWJsZSBkcml2ZXIgaW1wbGVtZW50YXRpb24sIEhhcmR3YXJlIEVycm9yDQo+ID4gUmVjb3Jk DQo+ID4gICAgID4gdHlwZSB2YXJpYWJsZQ0KPiA+ICAgICA+ICsgIC8vIGlzIHN0b3JlZCB3aXRo IGNvbW1vbiB2YXJpYWJsZSBpbiB0aGUgc2FtZSBOViByZWdpb24uIFNvIHRoZQ0KPiBwbGF0Zm9y bQ0KPiA+ICAgICA+IGludGVncmF0b3Igc2hvdWxkDQo+ID4gICAgID4gKyAgLy8gZW5zdXJlIHRo YXQgdGhlIHZhbHVlIG9mIFBjZEh3RXJyU3RvcmFnZVNpemUgaXMgbGVzcyB0aGFuIHRoZSB2YWx1 ZSBvZg0KPiA+ICAgICA+ICsgIC8vIChWYXJpYWJsZVN0b3JlTGVuZ3RoIC0gc2l6ZW9mIChWQVJJ QUJMRV9TVE9SRV9IRUFERVIpKS4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIEFTU0VS VCAoSHdFcnJTdG9yYWdlU2l6ZSA8IChWYXJpYWJsZVN0b3JlTGVuZ3RoIC0gc2l6ZW9mDQo+ID4g ICAgID4gKFZBUklBQkxFX1NUT1JFX0hFQURFUikpKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5Db21tb25WYXJpYWJsZVNwYWNlICAgICAgICA9DQo+ ID4gICAgID4gKChVSU5UTilWYXJpYWJsZVN0b3JlTGVuZ3RoIC0gc2l6ZW9mIChWQVJJQUJMRV9T VE9SRV9IRUFERVIpIC0NCj4gPiAgICAgPiBId0VyclN0b3JhZ2VTaXplKTsNCj4gPiAgICAgPiAr ICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPkNvbW1vbk1heFVzZXJWYXJpYWJsZVNwYWNlID0NCj4g PiAgICAgPiBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPkNvbW1vblZhcmlhYmxlU3BhY2U7DQo+ID4g ICAgID4gKyAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5Db21tb25SdW50aW1lVmFyaWFibGVTcGFj ZSA9DQo+ID4gICAgID4gbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5Db21tb25WYXJpYWJsZVNwYWNl Ow0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gICAg ID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICBDcmVhdGUgYSBkdW1teSB2YXJpYWJsZSB1c2VkIHRvIGZpbGwgdGhlIGdhcCBpbiBOViB2 YXJpYWJsZSBzdG9yYWdlDQo+IGNhdXNlZA0KPiA+IGJ5DQo+ID4gICAgID4gKyAgdGhlIGludmFs aWQgdmFyaWFibGVzIGZvdW5kIGluIEhNQUMgdmVyaWZpY2F0aW9uIHBoYXNlLg0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArICBAcGFyYW1bb3V0XSBWYXJpYWJsZSAgICBWYXJpYWJsZSBidWZmZXIu DQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgTmFtZSAgICAgICAgVmFyaWFibGUgTmFtZS4NCj4g PiAgICAgPiArICBAcGFyYW1baW5dICBHdWlkICAgICAgICBWZW5kb3IgR1VJRCBvZiB0aGUgdmFy aWFibGUuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgU2l6ZSAgICAgICAgV2hvbGUgc2l6ZSBv ZiB0aGUgdmFyaWFibGUgcmVxdWVzdGVkLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gIEF1dGhG bGFnICAgIFZhcmlhYmxlIGZvcm1hdCBmbGFnLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiov DQo+ID4gICAgID4gK1NUQVRJQw0KPiA+ICAgICA+ICtWT0lEDQo+ID4gICAgID4gK0NyZWF0ZUR1 bW15VmFyaWFibGUgKA0KPiA+ICAgICA+ICsgIE9VVCBWQVJJQUJMRV9IRUFERVIgICpWYXJpYWJs ZSwNCj4gPiAgICAgPiArICBJTiAgQ0hBUjE2ICAgICAgICAgICAqTmFtZSwNCj4gPiAgICAgPiAr ICBJTiAgRUZJX0dVSUQgICAgICAgICAqR3VpZCwNCj4gPiAgICAgPiArICBJTiAgVUlOVDMyICAg ICAgICAgICBTaXplLA0KPiA+ICAgICA+ICsgIElOICBCT09MRUFOICAgICAgICAgIEF1dGhGbGFn DQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgQVVUSEVOVElDQVRF RF9WQVJJQUJMRV9IRUFERVIgICpBdXRoVmFyaWFibGU7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsgIEFTU0VSVCAoVmFyaWFibGUgIT0gTlVMTCk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsg IGlmIChOYW1lID09IE5VTEwpIHsNCj4gPiAgICAgPiArICAgIE5hbWUgPSBMIkR1bW15IjsNCj4g PiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIGlmIChBdXRoRmxhZykgew0K PiA+ICAgICA+ICsgICAgQXV0aFZhcmlhYmxlID0gKEFVVEhFTlRJQ0FURURfVkFSSUFCTEVfSEVB REVSICopVmFyaWFibGU7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgQXV0aFZhcmlhYmxl LT5TdGFydElkICAgID0gVkFSSUFCTEVfREFUQTsNCj4gPiAgICAgPiArICAgIEF1dGhWYXJpYWJs ZS0+U3RhdGUgICAgICA9IFZBUl9BRERFRCAmIFZBUl9ERUxFVEVEOw0KPiA+ICAgICA+ICsgICAg QXV0aFZhcmlhYmxlLT5BdHRyaWJ1dGVzID0gRUZJX1ZBUklBQkxFX05PTl9WT0xBVElMRTsNCj4g PiAgICAgPiArICAgIEF1dGhWYXJpYWJsZS0+TmFtZVNpemUgICA9IChVSU5UMzIpU3RyU2l6ZSAo TmFtZSk7DQo+ID4gICAgID4gKyAgICBBdXRoVmFyaWFibGUtPkRhdGFTaXplICAgPSBTaXplIC0g c2l6ZW9mDQo+ID4gICAgID4gKEFVVEhFTlRJQ0FURURfVkFSSUFCTEVfSEVBREVSKQ0KPiA+ICAg ICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBdXRoVmFyaWFibGUtPk5hbWVT aXplOw0KPiA+ICAgICA+ICsgICAgaWYgKEd1aWQgIT0gTlVMTCkgew0KPiA+ICAgICA+ICsgICAg ICBDb3B5TWVtICgoVk9JRCAqKSZBdXRoVmFyaWFibGUtPlZlbmRvckd1aWQsIChWT0lEICopR3Vp ZCwgc2l6ZW9mDQo+ID4gICAgID4gKEVGSV9HVUlEKSk7DQo+ID4gICAgID4gKyAgICB9DQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgICAgQ29weU1lbSAoR2V0VmFyaWFibGVOYW1lUHRyIChWYXJp YWJsZSwgQXV0aEZsYWcpLCAoVk9JRCAqKU5hbWUsDQo+ID4gICAgID4gQXV0aFZhcmlhYmxlLT5O YW1lU2l6ZSk7DQo+ID4gICAgID4gKyAgfSBlbHNlIHsNCj4gPiAgICAgPiArICAgIFZhcmlhYmxl LT5TdGFydElkICAgID0gVkFSSUFCTEVfREFUQTsNCj4gPiAgICAgPiArICAgIFZhcmlhYmxlLT5T dGF0ZSAgICAgID0gVkFSX0FEREVEICYgVkFSX0RFTEVURUQ7DQo+ID4gICAgID4gKyAgICBWYXJp YWJsZS0+QXR0cmlidXRlcyA9IEVGSV9WQVJJQUJMRV9OT05fVk9MQVRJTEU7DQo+ID4gICAgID4g KyAgICBWYXJpYWJsZS0+TmFtZVNpemUgICA9IChVSU5UMzIpU3RyU2l6ZSAoTmFtZSk7DQo+ID4g ICAgID4gKyAgICBWYXJpYWJsZS0+RGF0YVNpemUgICA9IFNpemUgLSBzaXplb2YgKFZBUklBQkxF X0hFQURFUikgLSBWYXJpYWJsZS0NCj4gPiAgICAgPiA+TmFtZVNpemU7DQo+ID4gICAgID4gKyAg ICBpZiAoR3VpZCAhPSBOVUxMKSB7DQo+ID4gICAgID4gKyAgICAgIENvcHlNZW0gKChWT0lEICop JlZhcmlhYmxlLT5WZW5kb3JHdWlkLCAoVk9JRCAqKUd1aWQsIHNpemVvZg0KPiA+ICAgICA+IChF RklfR1VJRCkpOw0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAg IENvcHlNZW0gKEdldFZhcmlhYmxlTmFtZVB0ciAoVmFyaWFibGUsIEF1dGhGbGFnKSwgKFZPSUQg KilOYW1lLA0KPiA+ICAgICA+IFZhcmlhYmxlLT5OYW1lU2l6ZSk7DQo+ID4gICAgID4gKyAgfQ0K PiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgSW5pdCBwcm90ZWN0ZWQgdmFyaWFibGUgc3RvcmUuDQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIEBwYXJhbVtpbiwgb3V0XSAgVmFyaWFibGVTdG9yZSAgUG9pbnRlciB0byBy ZWFsIHByb3RlY3RlZCB2YXJpYWJsZSBzdG9yZQ0KPiA+IGJhc2UuDQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX1NUQVRVUw0KPiA+ICAgICA+ICtJbml0UHJvdGVj dGVkVmFyaWFibGVTdG9yZSAoDQo+ID4gICAgID4gKyAgSU4gIE9VVCBWQVJJQUJMRV9TVE9SRV9I RUFERVIgICpWYXJpYWJsZVN0b3JlDQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4g ICAgID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgIFN0YXR1czsNCj4gPiAgICAgPiArICBQ Uk9URUNURURfVkFSSUFCTEVfSU5GTyAgVmFySW5mbzsNCj4gPiAgICAgPiArICBVSU5UTiAgICAg ICAgICAgICAgICAgICAgU2l6ZTsNCj4gPiAgICAgPiArICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgSW5kZXg7DQo+ID4gICAgID4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgIEF1dGhGbGFn Ow0KPiA+ICAgICA+ICsgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICBOZXh0VmFyaWFibGVTdG9y ZTsNCj4gPiAgICAgPiArICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgKlZhckxpc3Q7DQo+ID4g ICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgIE51bVZhcnM7DQo+ID4gICAgID4gKyAg VUlOVE4gICAgICAgICAgICAgICAgICAgIEN1cnJWYXI7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsgIFNldE1lbSAoDQo+ID4gICAgID4gKyAgICAoVUlOVDggKilWYXJpYWJsZVN0b3JlICsgc2l6 ZW9mIChWQVJJQUJMRV9TVE9SRV9IRUFERVIpLA0KPiA+ICAgICA+ICsgICAgVmFyaWFibGVTdG9y ZS0+U2l6ZSAtIHNpemVvZiAoVkFSSUFCTEVfU1RPUkVfSEVBREVSKSwNCj4gPiAgICAgPiArICAg IDB4RkYNCj4gPiAgICAgPiArICAgICk7DQo+ID4gICAgID4gKyAgSW5kZXggPSBzaXplb2YgKFZB UklBQkxFX1NUT1JFX0hFQURFUik7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFZhckxpc3Qg PSBOVUxMOw0KPiA+ICAgICA+ICsgIE51bVZhcnMgPSAwOw0KPiA+ICAgICA+ICsgIFByb3RlY3Rl ZFZhcmlhYmxlTGliR2V0U29ydGVkTGlzdCAoJlZhckxpc3QsICZOdW1WYXJzKTsNCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBTZWFyY2ggdmFyaWFibGUgaW4g dGhlIG9yZGVyIG9mIFN0b3JlSW5kZXgNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIFpl cm9NZW0gKCZWYXJJbmZvLCBzaXplb2YgKFZhckluZm8pKTsNCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgZm9yIChDdXJyVmFyID0gMDsgQ3VyclZhciA8IE51bVZhcnM7IEN1cnJWYXIrKykgew0K PiA+ICAgICA+ICsgICAgVmFySW5mby5CdWZmZXIgICAgID0gTlVMTDsNCj4gPiAgICAgPiArICAg IFZhckluZm8uU3RvcmVJbmRleCA9IFZhckxpc3RbQ3VyclZhcl07DQo+ID4gICAgID4gKyAgICBp ZiAoVmFySW5mby5TdG9yZUluZGV4ID09IFZBUl9JTkRFWF9JTlZBTElEKSB7DQo+ID4gICAgID4g KyAgICAgIGJyZWFrOw0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr ICAgIFN0YXR1cyA9IFByb3RlY3RlZFZhcmlhYmxlTGliRmluZCAoJlZhckluZm8pOw0KPiA+ICAg ICA+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICAgICA+ICsgICAgICBicmVh azsNCj4gPiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICBBU1NFUlQg KFZhckluZm8uQnVmZmVyICE9IE5VTEwpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgIEF1 dGhGbGFnID0gVmFySW5mby5GbGFncy5BdXRoOw0KPiA+ICAgICA+ICsgICAgaWYgKFZhckluZm8u U3RvcmVJbmRleCA9PSBWQVJfSU5ERVhfSU5WQUxJRCkgew0KPiA+ICAgICA+ICsgICAgICBjb250 aW51ZTsNCj4gPiAgICAgPiArICAgIH0gZWxzZSB7DQo+ID4gICAgID4gKyAgICAgIEFTU0VSVCAo VmFySW5mby5TdG9yZUluZGV4ID09IEhFQURFUl9BTElHTiAoVmFySW5mby5TdG9yZUluZGV4KSk7 DQo+ID4gICAgID4gKyAgICAgIEFTU0VSVCAoVmFySW5mby5TdG9yZUluZGV4IDwgKFZhcmlhYmxl U3RvcmUtPlNpemUgLSBzaXplb2YNCj4gPiAgICAgPiAoVkFSSUFCTEVfU1RPUkVfSEVBREVSKSkp Ow0KPiA+ICAgICA+ICsgICAgICBBU1NFUlQgKChWYXJpYWJsZVN0b3JlLT5TaXplIC0gVmFySW5m by5TdG9yZUluZGV4KSA+DQo+ID4gR2V0VmFyaWFibGVIZWFkZXJTaXplDQo+ID4gICAgID4gKEF1 dGhGbGFnKSk7DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAg Ly8NCj4gPiAgICAgPiArICAgIC8vIEZpbGwgZ2FwIGNhdXNlZCBieSBpbnZhbGlkIHZhcmlhYmxl Lg0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIGlmIChWYXJJbmZvLlN0b3JlSW5k ZXggPiBJbmRleCkgew0KPiA+ICAgICA+ICsgICAgICBTaXplID0gKFVJTlROKVZhckluZm8uU3Rv cmVJbmRleCAtIEluZGV4Ow0KPiA+ICAgICA+ICsgICAgICBDcmVhdGVEdW1teVZhcmlhYmxlICgN Cj4gPiAgICAgPiArICAgICAgICAoVkFSSUFCTEVfSEVBREVSICopKChVSU5UOCAqKVZhcmlhYmxl U3RvcmUgKyBJbmRleCksDQo+ID4gICAgID4gKyAgICAgICAgTlVMTCwNCj4gPiAgICAgPiArICAg ICAgICBOVUxMLA0KPiA+ICAgICA+ICsgICAgICAgIChVSU5UMzIpU2l6ZSwNCj4gPiAgICAgPiAr ICAgICAgICBBdXRoRmxhZw0KPiA+ICAgICA+ICsgICAgICAgICk7DQo+ID4gICAgID4gKyAgICAg IEluZGV4ICs9IFNpemU7DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsgICAgU2l6ZSA9IChVSU5UTilHZXROZXh0VmFyaWFibGVQdHIgKFZhckluZm8uQnVmZmVyLCBB dXRoRmxhZykNCj4gPiAgICAgPiArICAgICAgICAgICAtIChVSU5UTilWYXJJbmZvLkJ1ZmZlcjsN Cj4gPiAgICAgPiArICAgIENvcHlNZW0gKChVSU5UOCAqKVZhcmlhYmxlU3RvcmUgKyBWYXJJbmZv LlN0b3JlSW5kZXgsDQo+IFZhckluZm8uQnVmZmVyLA0KPiA+ICAgICA+IFNpemUpOw0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArICAgIEluZGV4ICs9IFNpemU7DQo+ID4gICAgID4gKyAgICBJbmRl eCAgPSBIRUFERVJfQUxJR04gKEluZGV4KTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICBO ZXh0VmFyaWFibGVTdG9yZSA9IChFRklfUEhZU0lDQUxfQUREUkVTUykoKFVJTlROKVZhcmlhYmxl U3RvcmUgKw0KPiA+ICAgICA+IFZhckluZm8uU3RvcmVJbmRleCArIFNpemUpOw0KPiA+ICAgICA+ ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBTZWFy Y2ggdmFyaWFibGUgaW4gdGhlIG9yZGVyIG9mIFN0b3JlSW5kZXgNCj4gPiAgICAgPiArICAvLw0K PiA+ICAgICA+ICsgIFplcm9NZW0gKCZWYXJJbmZvLCBzaXplb2YgKFZhckluZm8pKTsNCj4gPiAg ICAgPiArICBmb3IgKCA7IEN1cnJWYXIgPCBOdW1WYXJzOyBDdXJyVmFyKyspIHsNCj4gPiAgICAg PiArICAgIFZhckluZm8uQnVmZmVyICAgICA9IE5VTEw7DQo+ID4gICAgID4gKyAgICBWYXJJbmZv LlN0b3JlSW5kZXggPSBWYXJMaXN0W0N1cnJWYXJdOw0KPiA+ICAgICA+ICsgICAgU3RhdHVzICAg ICAgICAgICAgID0gUHJvdGVjdGVkVmFyaWFibGVMaWJGaW5kICgmVmFySW5mbyk7DQo+ID4gICAg ID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAgID4gKyAgICAgIGJyZWFr Ow0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgIEFTU0VSVCAo VmFySW5mby5CdWZmZXIgIT0gTlVMTCk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgQXV0 aEZsYWcgPSBWYXJJbmZvLkZsYWdzLkF1dGg7DQo+ID4gICAgID4gKyAgICBpZiAoVmFySW5mby5T dG9yZUluZGV4ID09IFZBUl9JTkRFWF9JTlZBTElEKSB7DQo+ID4gICAgID4gKyAgICAgIFNpemUg PSAoVUlOVE4pR2V0TmV4dFZhcmlhYmxlUHRyIChWYXJJbmZvLkJ1ZmZlciwgQXV0aEZsYWcpDQo+ ID4gICAgID4gKyAgICAgICAgICAgICAtIChVSU5UTilWYXJJbmZvLkJ1ZmZlcjsNCj4gPiAgICAg PiArICAgICAgQ29weU1lbSAoKFZPSUQgKikoVUlOVE4pTmV4dFZhcmlhYmxlU3RvcmUsIFZhcklu Zm8uQnVmZmVyLCBTaXplKTsNCj4gPiAgICAgPiArICAgICAgU3RhdHVzICAgICAgICAgICAgPSBQ cm90ZWN0ZWRWYXJpYWJsZUxpYlJlZnJlc2ggKFZhckluZm8uQnVmZmVyLCAwLA0KPiA+ICAgICA+ IE5leHRWYXJpYWJsZVN0b3JlIC0gKFVJTlROKVZhcmlhYmxlU3RvcmUsIEZBTFNFKTsNCj4gPiAg ICAgPiArICAgICAgTmV4dFZhcmlhYmxlU3RvcmUgPSBOZXh0VmFyaWFibGVTdG9yZSArIFNpemU7 DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICBpZiAoU3RhdHVzID09IEVGSV9VTlNVUFBPUlRFRCkgew0KPiA+ICAgICA+ICsgICAgcmV0 dXJuIFN0YXR1czsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIHJl dHVybiBFRklfU1VDQ0VTUzsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr LyoqDQo+ID4gICAgID4gKyAgSW5pdCByZWFsIG5vbi12b2xhdGlsZSB2YXJpYWJsZSBzdG9yZS4N Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtW291dF0gVmFyaWFibGVTdG9yZUJhc2Ug T3V0cHV0IHBvaW50ZXIgdG8gcmVhbCBub24tdm9sYXRpbGUNCj4gPiB2YXJpYWJsZQ0KPiA+ICAg ICA+IHN0b3JlIGJhc2UuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgIEZ1bmN0aW9uIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4NCj4gPiAgICAg PiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBGYWlsIHRvIGFsbG9jYXRlIGVub3Vn aCBtZW1vcnkNCj4gPiByZXNvdXJjZS4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9WT0xVTUVf Q09SUlVQVEVEICBWYXJpYWJsZSBTdG9yZSBvciBGaXJtd2FyZSBWb2x1bWUNCj4gPiBmb3INCj4g PiAgICAgPiBWYXJpYWJsZSBTdG9yZSBpcyBjb3JydXB0ZWQuDQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX1NUQVRVUw0KPiA+ICAgICA+ICtJbml0UmVhbE5vblZv bGF0aWxlVmFyaWFibGVTdG9yZSAoDQo+ID4gICAgID4gKyAgT1VUIEVGSV9QSFlTSUNBTF9BRERS RVNTICAqVmFyaWFibGVTdG9yZUJhc2UNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4g PiAgICAgPiArICBFRklfRklSTVdBUkVfVk9MVU1FX0hFQURFUiAgICAgICAgICAgICpGdkhlYWRl cjsNCj4gPiAgICAgPiArICBWQVJJQUJMRV9TVE9SRV9IRUFERVIgICAgICAgICAgICAgICAgICpW YXJpYWJsZVN0b3JlOw0KPiA+ICAgICA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVmFyaWFibGVTdG9yZUxlbmd0aDsNCj4gPiAgICAgPiArICBFRklfSE9CX0dVSURf VFlQRSAgICAgICAgICAgICAgICAgICAgICpHdWlkSG9iOw0KPiA+ICAgICA+ICsgIEVGSV9QSFlT SUNBTF9BRERSRVNTICAgICAgICAgICAgICAgICAgTnZTdG9yYWdlQmFzZTsNCj4gPiAgICAgPiAr ICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpOdlN0b3JhZ2VEYXRhOw0K PiA+ICAgICA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnZTdG9y YWdlU2l6ZTsNCj4gPiAgICAgPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE52U3RvcmFnZVNpemU2NDsNCj4gPiAgICAgPiArICBGQVVMVF9UT0xFUkFOVF9XUklURV9M QVNUX1dSSVRFX0RBVEEgICpGdHdMYXN0V3JpdGVEYXRhOw0KPiA+ICAgICA+ICsgIFVJTlQzMiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFja1VwT2Zmc2V0Ow0KPiA+ICAgICA+ICsg IFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFja1VwU2l6ZTsNCj4gPiAg ICAgPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEh3RXJyU3RvcmFn ZVNpemU7DQo+ID4gICAgID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBNYXhVc2VyTnZWYXJpYWJsZVNwYWNlU2l6ZTsNCj4gPiAgICAgPiArICBVSU5UMzIgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEJvb3R0aW1lUmVzZXJ2ZWROdlZhcmlhYmxlU3BhY2VT aXplOw0KPiA+ICAgICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAg U3RhdHVzOw0KPiA+ICAgICA+ICsgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKkZ0d1Byb3RvY29sOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBtVmFyaWFibGVNb2R1 bGVHbG9iYWwtPkZ2Ykluc3RhbmNlID0gTlVMTDsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg U3RhdHVzID0gR2V0VmFyaWFibGVGbGFzaE52U3RvcmFnZUluZm8gKCZOdlN0b3JhZ2VCYXNlLA0K PiA+ICAgICA+ICZOdlN0b3JhZ2VTaXplNjQpOw0KPiA+ICAgICA+ICsgIEFTU0VSVF9FRklfRVJS T1IgKFN0YXR1cyk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFN0YXR1cyA9IFNhZmVVaW50 NjRUb1VpbnQzMiAoTnZTdG9yYWdlU2l6ZTY0LCAmTnZTdG9yYWdlU2l6ZSk7DQo+ID4gICAgID4g KyAgLy8gVGhpcyBkcml2ZXIgY3VycmVudGx5IGFzc3VtZXMgdGhlIHNpemUgd2lsbCBiZSBVSU5U MzIgc28gYXNzZXJ0IHRoZQ0KPiB2YWx1ZQ0KPiA+IGlzDQo+ID4gICAgID4gc2FmZSBmb3Igbm93 Lg0KPiA+ICAgICA+ICsgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIEFTU0VSVCAoTnZTdG9yYWdlQmFzZSAhPSAwKTsNCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBBbGxvY2F0ZSBydW50aW1lIG1lbW9yeSB1 c2VkIGZvciBhIG1lbW9yeSBjb3B5IG9mIHRoZSBGTEFTSA0KPiByZWdpb24uDQo+ID4gICAgID4g KyAgLy8gS2VlcCB0aGUgbWVtb3J5IGFuZCB0aGUgRkxBU0ggaW4gc3luYyBhcyB1cGRhdGVzIG9j Y3VyLg0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgTnZTdG9yYWdlRGF0YSA9IEFsbG9j YXRlUnVudGltZVplcm9Qb29sIChOdlN0b3JhZ2VTaXplKTsNCj4gPiAgICAgPiArICBpZiAoTnZT dG9yYWdlRGF0YSA9PSBOVUxMKSB7DQo+ID4gICAgID4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9S RVNPVVJDRVM7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0K PiA+ICAgICA+ICsgIC8vIENvcHkgTlYgc3RvcmFnZSBkYXRhIHRvIHRoZSBtZW1vcnkgYnVmZmVy Lg0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgQ29weU1lbSAoTnZTdG9yYWdlRGF0YSwg KFVJTlQ4ICopKFVJTlROKU52U3RvcmFnZUJhc2UsDQo+ID4gTnZTdG9yYWdlU2l6ZSk7DQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgIFN0YXR1cyA9IEdldEZ0d1Byb3RvY29sICgoVk9JRCAqKikm RnR3UHJvdG9jb2wpOw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gSWYgRlRXIHBy b3RvY29sIGhhcyBiZWVuIGluc3RhbGxlZCwgbm8gbmVlZCB0byBjaGVjayBGVFcgbGFzdCB3cml0 ZQ0KPiA+IGRhdGENCj4gPiAgICAgPiBob2IuDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiAr ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ ICsgICAgLy8gQ2hlY2sgdGhlIEZUVyBsYXN0IHdyaXRlIGRhdGEgaG9iLg0KPiA+ICAgICA+ICsg ICAgLy8NCj4gPiAgICAgPiArICAgIEd1aWRIb2IgPSBHZXRGaXJzdEd1aWRIb2IgKCZnRWRraWlG YXVsdFRvbGVyYW50V3JpdGVHdWlkKTsNCj4gPiAgICAgPiArICAgIGlmIChHdWlkSG9iICE9IE5V TEwpIHsNCj4gPiAgICAgPiArICAgICAgRnR3TGFzdFdyaXRlRGF0YSA9IChGQVVMVF9UT0xFUkFO VF9XUklURV9MQVNUX1dSSVRFX0RBVEENCj4gPiAgICAgPiAqKUdFVF9HVUlEX0hPQl9EQVRBIChH dWlkSG9iKTsNCj4gPiAgICAgPiArICAgICAgaWYgKEZ0d0xhc3RXcml0ZURhdGEtPlRhcmdldEFk ZHJlc3MgPT0gTnZTdG9yYWdlQmFzZSkgew0KPiA+ICAgICA+ICsgICAgICAgIERFQlVHICgoREVC VUdfSU5GTywgIlZhcmlhYmxlOiBOViBzdG9yYWdlIGlzIGJhY2tlZCB1cCBpbiBzcGFyZQ0KPiA+ IGJsb2NrOg0KPiA+ICAgICA+IDB4JXhcbiIsIChVSU5UTilGdHdMYXN0V3JpdGVEYXRhLT5TcGFy ZUFkZHJlc3MpKTsNCj4gPiAgICAgPiArICAgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAgIC8v IENvcHkgdGhlIGJhY2tlZCB1cCBOViBzdG9yYWdlIGRhdGEgdG8gdGhlIG1lbW9yeSBidWZmZXIg ZnJvbQ0KPiA+IHNwYXJlDQo+ID4gICAgID4gYmxvY2suDQo+ID4gICAgID4gKyAgICAgICAgLy8N Cj4gPiAgICAgPiArICAgICAgICBDb3B5TWVtIChOdlN0b3JhZ2VEYXRhLCAoVUlOVDggKikoVUlO VE4pKEZ0d0xhc3RXcml0ZURhdGEtDQo+ID4gICAgID4gPlNwYXJlQWRkcmVzcyksIE52U3RvcmFn ZVNpemUpOw0KPiA+ICAgICA+ICsgICAgICB9IGVsc2UgaWYgKChGdHdMYXN0V3JpdGVEYXRhLT5U YXJnZXRBZGRyZXNzID4gTnZTdG9yYWdlQmFzZSkgJiYNCj4gPiAgICAgPiArICAgICAgICAgICAg ICAgICAoRnR3TGFzdFdyaXRlRGF0YS0+VGFyZ2V0QWRkcmVzcyA8IChOdlN0b3JhZ2VCYXNlICsN Cj4gPiAgICAgPiBOdlN0b3JhZ2VTaXplKSkpDQo+ID4gICAgID4gKyAgICAgIHsNCj4gPiAgICAg PiArICAgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAgIC8vIEZsYXNoIE5WIHN0b3JhZ2UgZnJv bSB0aGUgT2Zmc2V0IGlzIGJhY2tlZCB1cCBpbiBzcGFyZSBibG9jay4NCj4gPiAgICAgPiArICAg ICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAgIEJhY2tVcE9mZnNldCA9IChVSU5UMzIpKEZ0d0xh c3RXcml0ZURhdGEtPlRhcmdldEFkZHJlc3MgLQ0KPiA+ICAgICA+IE52U3RvcmFnZUJhc2UpOw0K PiA+ICAgICA+ICsgICAgICAgIEJhY2tVcFNpemUgICA9IE52U3RvcmFnZVNpemUgLSBCYWNrVXBP ZmZzZXQ7DQo+ID4gICAgID4gKyAgICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiVmFyaWFibGU6 IEhpZ2ggcGFydGlhbCBOViBzdG9yYWdlIGZyb20NCj4gPiBvZmZzZXQ6ICV4DQo+ID4gICAgID4g aXMgYmFja2VkIHVwIGluIHNwYXJlIGJsb2NrOiAweCV4XG4iLCBCYWNrVXBPZmZzZXQsDQo+ID4g KFVJTlROKUZ0d0xhc3RXcml0ZURhdGEtDQo+ID4gICAgID4gPlNwYXJlQWRkcmVzcykpOw0KPiA+ ICAgICA+ICsgICAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgICAgLy8gQ29weSB0aGUgcGFydGlh bCBiYWNrZWQgdXAgTlYgc3RvcmFnZSBkYXRhIHRvIHRoZSBtZW1vcnkgYnVmZmVyDQo+ID4gZnJv bQ0KPiA+ICAgICA+IHNwYXJlIGJsb2NrLg0KPiA+ICAgICA+ICsgICAgICAgIC8vDQo+ID4gICAg ID4gKyAgICAgICAgQ29weU1lbSAoTnZTdG9yYWdlRGF0YSArIEJhY2tVcE9mZnNldCwgKFVJTlQ4 DQo+ID4gICAgID4gKikoVUlOVE4pRnR3TGFzdFdyaXRlRGF0YS0+U3BhcmVBZGRyZXNzLCBCYWNr VXBTaXplKTsNCj4gPiAgICAgPiArICAgICAgfQ0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgRnZIZWFkZXIgPSAoRUZJX0ZJUk1XQVJF X1ZPTFVNRV9IRUFERVIgKilOdlN0b3JhZ2VEYXRhOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr ICAvLw0KPiA+ICAgICA+ICsgIC8vIENoZWNrIGlmIHRoZSBGaXJtd2FyZSBWb2x1bWUgaXMgbm90 IGNvcnJ1cHRlZA0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgaWYgKChGdkhlYWRlci0+ U2lnbmF0dXJlICE9IEVGSV9GVkhfU0lHTkFUVVJFKSB8fCAoIUNvbXBhcmVHdWlkDQo+ID4gICAg ID4gKCZnRWZpU3lzdGVtTnZEYXRhRnZHdWlkLCAmRnZIZWFkZXItPkZpbGVTeXN0ZW1HdWlkKSkp IHsNCj4gPiAgICAgPiArICAgIEZyZWVQb29sIChOdlN0b3JhZ2VEYXRhKTsNCj4gPiAgICAgPiAr ICAgIERFQlVHICgoREVCVUdfRVJST1IsICJGaXJtd2FyZSBWb2x1bWUgZm9yIFZhcmlhYmxlIFN0 b3JlIGlzDQo+ID4gICAgID4gY29ycnVwdGVkXG4iKSk7DQo+ID4gICAgID4gKyAgICByZXR1cm4g RUZJX1ZPTFVNRV9DT1JSVVBURUQ7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICBWYXJpYWJsZVN0b3JlICAgICAgID0gKFZBUklBQkxFX1NUT1JFX0hFQURFUiAqKSgo VUlOVE4pRnZIZWFkZXIgKw0KPiA+ICAgICA+IEZ2SGVhZGVyLT5IZWFkZXJMZW5ndGgpOw0KPiA+ ICAgICA+ICsgIFZhcmlhYmxlU3RvcmVMZW5ndGggPSBOdlN0b3JhZ2VTaXplIC0gRnZIZWFkZXIt PkhlYWRlckxlbmd0aDsNCj4gPiAgICAgPiArICBBU1NFUlQgKHNpemVvZiAoVkFSSUFCTEVfU1RP UkVfSEVBREVSKSA8PSBWYXJpYWJsZVN0b3JlTGVuZ3RoKTsNCj4gPiAgICAgPiArICBBU1NFUlQg KFZhcmlhYmxlU3RvcmUtPlNpemUgPT0gVmFyaWFibGVTdG9yZUxlbmd0aCk7DQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gQ2hlY2sgaWYgdGhlIFZhcmlhYmxl IFN0b3JlIGhlYWRlciBpcyBub3QgY29ycnVwdGVkDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAg PiArICBpZiAoR2V0VmFyaWFibGVTdG9yZVN0YXR1cyAoVmFyaWFibGVTdG9yZSkgIT0gRWZpVmFs aWQpIHsNCj4gPiAgICAgPiArICAgIEZyZWVQb29sIChOdlN0b3JhZ2VEYXRhKTsNCj4gPiAgICAg PiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICJWYXJpYWJsZSBTdG9yZSBoZWFkZXIgaXMgY29y cnVwdGVkXG4iKSk7DQo+ID4gICAgID4gKyAgICByZXR1cm4gRUZJX1ZPTFVNRV9DT1JSVVBURUQ7 DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ ICsgIC8vIE92ZXJ3cml0ZSB0aGUgc3RvcmUgd2l0aCB2ZXJpZmllZCBjb3B5IG9mIHByb3RlY3Rl ZCB2YXJpYWJsZXMsIGlmDQo+IGVuYWJsZWQuDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiAr ICBTdGF0dXMgPSBJbml0UHJvdGVjdGVkVmFyaWFibGVTdG9yZSAoVmFyaWFibGVTdG9yZSk7DQo+ ID4gICAgID4gKyAgaWYgKChTdGF0dXMgIT0gRUZJX1NVQ0NFU1MpICYmIChTdGF0dXMgIT0gRUZJ X1VOU1VQUE9SVEVEKSkgew0KPiA+ICAgICA+ICsgICAgRnJlZVBvb2wgKE52U3RvcmFnZURhdGEp Ow0KPiA+ICAgICA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIlZhcmlhYmxlIGludGVncml0 eSBtaWdodCBoYXZlIGJlZW4NCj4gPiAgICAgPiBjb21wcm9taXNlZFxuIikpOw0KPiA+ICAgICA+ ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsgIG1OdkZ2SGVhZGVyQ2FjaGUgPSBGdkhlYWRlcjsNCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgKlZhcmlhYmxlU3RvcmVCYXNlID0gKEVGSV9QSFlTSUNBTF9BRERSRVNTKShVSU5UTilW YXJpYWJsZVN0b3JlOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBId0VyclN0b3JhZ2VTaXpl ICAgICAgICAgICAgICAgICAgICA9IFBjZEdldDMyIChQY2RId0VyclN0b3JhZ2VTaXplKTsNCj4g PiAgICAgPiArICBNYXhVc2VyTnZWYXJpYWJsZVNwYWNlU2l6ZSAgICAgICAgICA9IFBjZEdldDMy DQo+ID4gICAgID4gKFBjZE1heFVzZXJOdlZhcmlhYmxlU3BhY2VTaXplKTsNCj4gPiAgICAgPiAr ICBCb290dGltZVJlc2VydmVkTnZWYXJpYWJsZVNwYWNlU2l6ZSA9IFBjZEdldDMyDQo+ID4gICAg ID4gKFBjZEJvb3R0aW1lUmVzZXJ2ZWROdlZhcmlhYmxlU3BhY2VTaXplKTsNCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBOb3RlIHRoYXQgaW4gRWRrSUkgdmFy aWFibGUgZHJpdmVyIGltcGxlbWVudGF0aW9uLCBIYXJkd2FyZSBFcnJvcg0KPiA+IFJlY29yZA0K PiA+ICAgICA+IHR5cGUgdmFyaWFibGUNCj4gPiAgICAgPiArICAvLyBpcyBzdG9yZWQgd2l0aCBj b21tb24gdmFyaWFibGUgaW4gdGhlIHNhbWUgTlYgcmVnaW9uLiBTbyB0aGUNCj4gcGxhdGZvcm0N Cj4gPiAgICAgPiBpbnRlZ3JhdG9yIHNob3VsZA0KPiA+ICAgICA+ICsgIC8vIGVuc3VyZSB0aGF0 IHRoZSB2YWx1ZSBvZiBQY2RId0VyclN0b3JhZ2VTaXplIGlzIGxlc3MgdGhhbiB0aGUgdmFsdWUg b2YNCj4gPiAgICAgPiArICAvLyAoVmFyaWFibGVTdG9yZUxlbmd0aCAtIHNpemVvZiAoVkFSSUFC TEVfU1RPUkVfSEVBREVSKSkuDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBBU1NFUlQg KEh3RXJyU3RvcmFnZVNpemUgPCAoVmFyaWFibGVTdG9yZUxlbmd0aCAtIHNpemVvZg0KPiA+ICAg ICA+IChWQVJJQUJMRV9TVE9SRV9IRUFERVIpKSk7DQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAg PiArICAvLyBFbnN1cmUgdGhhdCB0aGUgdmFsdWUgb2YgUGNkTWF4VXNlck52VmFyaWFibGVTcGFj ZVNpemUgaXMgbGVzcyB0aGFuDQo+ID4gdGhlDQo+ID4gICAgID4gdmFsdWUgb2YNCj4gPiAgICAg PiArICAvLyAoVmFyaWFibGVTdG9yZUxlbmd0aCAtIHNpemVvZiAoVkFSSUFCTEVfU1RPUkVfSEVB REVSKSkgLQ0KPiBQY2RHZXQzMg0KPiA+ICAgICA+IChQY2RId0VyclN0b3JhZ2VTaXplKS4NCj4g PiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIEFTU0VSVCAoTWF4VXNlck52VmFyaWFibGVTcGFj ZVNpemUgPCAoVmFyaWFibGVTdG9yZUxlbmd0aCAtIHNpemVvZg0KPiA+ICAgICA+IChWQVJJQUJM RV9TVE9SRV9IRUFERVIpIC0gSHdFcnJTdG9yYWdlU2l6ZSkpOw0KPiA+ICAgICA+ICsgIC8vDQo+ ID4gICAgID4gKyAgLy8gRW5zdXJlIHRoYXQgdGhlIHZhbHVlIG9mIFBjZEJvb3R0aW1lUmVzZXJ2 ZWROdlZhcmlhYmxlU3BhY2VTaXplIGlzDQo+ID4gbGVzcw0KPiA+ICAgICA+IHRoYW4gdGhlIHZh bHVlIG9mDQo+ID4gICAgID4gKyAgLy8gKFZhcmlhYmxlU3RvcmVMZW5ndGggLSBzaXplb2YgKFZB UklBQkxFX1NUT1JFX0hFQURFUikpIC0NCj4gUGNkR2V0MzINCj4gPiAgICAgPiAoUGNkSHdFcnJT dG9yYWdlU2l6ZSkuDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBBU1NFUlQgKEJvb3R0 aW1lUmVzZXJ2ZWROdlZhcmlhYmxlU3BhY2VTaXplIDwgKFZhcmlhYmxlU3RvcmVMZW5ndGgNCj4g LQ0KPiA+ICAgICA+IHNpemVvZiAoVkFSSUFCTEVfU1RPUkVfSEVBREVSKSAtIEh3RXJyU3RvcmFn ZVNpemUpKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgbVZhcmlhYmxlTW9kdWxlR2xvYmFs LT5Db21tb25WYXJpYWJsZVNwYWNlICAgICAgICA9DQo+ID4gICAgID4gKChVSU5UTilWYXJpYWJs ZVN0b3JlTGVuZ3RoIC0gc2l6ZW9mIChWQVJJQUJMRV9TVE9SRV9IRUFERVIpIC0NCj4gPiAgICAg PiBId0VyclN0b3JhZ2VTaXplKTsNCj4gPiAgICAgPiArICBtVmFyaWFibGVNb2R1bGVHbG9iYWwt PkNvbW1vbk1heFVzZXJWYXJpYWJsZVNwYWNlID0NCj4gPiAgICAgPiAoKE1heFVzZXJOdlZhcmlh YmxlU3BhY2VTaXplICE9IDApID8gTWF4VXNlck52VmFyaWFibGVTcGFjZVNpemUgOg0KPiA+ICAg ICA+IG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+Q29tbW9uVmFyaWFibGVTcGFjZSk7DQo+ID4gICAg ID4gKyAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5Db21tb25SdW50aW1lVmFyaWFibGVTcGFjZSA9 DQo+ID4gICAgID4gbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5Db21tb25WYXJpYWJsZVNwYWNlIC0N Cj4gPiAgICAgPiBCb290dGltZVJlc2VydmVkTnZWYXJpYWJsZVNwYWNlU2l6ZTsNCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyAgREVCVUcgKCgNCj4gPiAgICAgPiArICAgIERFQlVHX0lORk8sDQo+ ID4gICAgID4gKyAgICAiVmFyaWFibGUgZHJpdmVyIGNvbW1vbiBzcGFjZTogMHgleCAweCV4IDB4 JXhcbiIsDQo+ID4gICAgID4gKyAgICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPkNvbW1vblZhcmlh YmxlU3BhY2UsDQo+ID4gICAgID4gKyAgICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPkNvbW1vbk1h eFVzZXJWYXJpYWJsZVNwYWNlLA0KPiA+ICAgICA+ICsgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFs LT5Db21tb25SdW50aW1lVmFyaWFibGVTcGFjZQ0KPiA+ICAgICA+ICsgICAgKSk7DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gVGhlIG1heCBOViB2YXJpYWJs ZSBzaXplIHNob3VsZCBiZSA8IChWYXJpYWJsZVN0b3JlTGVuZ3RoIC0gc2l6ZW9mDQo+ID4gICAg ID4gKFZBUklBQkxFX1NUT1JFX0hFQURFUikpLg0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4g KyAgQVNTRVJUIChHZXROb25Wb2xhdGlsZU1heFZhcmlhYmxlU2l6ZSAoKSA8IChWYXJpYWJsZVN0 b3JlTGVuZ3RoIC0NCj4gc2l6ZW9mDQo+ID4gICAgID4gKFZBUklBQkxFX1NUT1JFX0hFQURFUikp KTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICAg ICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBJbml0IG5v bi12b2xhdGlsZSB2YXJpYWJsZSBzdG9yZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgRnVuY3Rpb24gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVk Lg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgIEZhaWwgdG8gYWxs b2NhdGUgZW5vdWdoIG1lbW9yeQ0KPiA+IHJlc291cmNlLg0KPiA+ICAgICA+ICsgIEByZXR2YWwg RUZJX1ZPTFVNRV9DT1JSVVBURUQgIFZhcmlhYmxlIFN0b3JlIG9yIEZpcm13YXJlIFZvbHVtZQ0K PiA+IGZvcg0KPiA+ICAgICA+IFZhcmlhYmxlIFN0b3JlIGlzIGNvcnJ1cHRlZC4NCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtFRklfU1RBVFVTDQo+ID4gICAgID4gK0lu aXROb25Wb2xhdGlsZVZhcmlhYmxlU3RvcmUgKA0KPiA+ICAgICA+ICsgIFZPSUQNCj4gPiAgICAg PiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBWQVJJQUJMRV9IRUFERVIgICAgICAg KlZhcmlhYmxlOw0KPiA+ICAgICA+ICsgIFZBUklBQkxFX0hFQURFUiAgICAgICAqTmV4dFZhcmlh YmxlOw0KPiA+ICAgICA+ICsgIEVGSV9QSFlTSUNBTF9BRERSRVNTICBWYXJpYWJsZVN0b3JlQmFz ZTsNCj4gPiAgICAgPiArICBVSU5UTiAgICAgICAgICAgICAgICAgVmFyaWFibGVTaXplOw0KPiA+ ICAgICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICBTdGF0dXM7DQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsgIGlmIChQY2RHZXRCb29sIChQY2RFbXVWYXJpYWJsZU52TW9kZUVuYWJsZSkpIHsN Cj4gPiAgICAgPiArICAgIFN0YXR1cyA9IEluaXRFbXVOb25Wb2xhdGlsZVZhcmlhYmxlU3RvcmUg KCZWYXJpYWJsZVN0b3JlQmFzZSk7DQo+ID4gICAgID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ID4gICAgID4gKyAgICAgIHJldHVybiBTdGF0dXM7DQo+ID4gICAgID4gKyAgICB9 DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJp YWJsZUdsb2JhbC5FbXVOdk1vZGUgPSBUUlVFOw0KPiA+ICAgICA+ICsgICAgREVCVUcgKChERUJV R19JTkZPLCAiVmFyaWFibGUgZHJpdmVyIHdpbGwgd29yayBhdCBlbXVsYXRlZCBub24tDQo+ID4g dm9sYXRpbGUNCj4gPiAgICAgPiB2YXJpYWJsZSBtb2RlIVxuIikpOw0KPiA+ICAgICA+ICsgIH0g ZWxzZSB7DQo+ID4gICAgID4gKyAgICBTdGF0dXMgPSBJbml0UmVhbE5vblZvbGF0aWxlVmFyaWFi bGVTdG9yZSAoJlZhcmlhYmxlU3RvcmVCYXNlKTsNCj4gPiAgICAgPiArICAgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4gPiAgICAg PiArICAgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICBtVmFyaWFibGVNb2R1bGVHbG9i YWwtPlZhcmlhYmxlR2xvYmFsLkVtdU52TW9kZSA9IEZBTFNFOw0KPiA+ICAgICA+ICsgIH0NCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUds b2JhbC5Ob25Wb2xhdGlsZVZhcmlhYmxlQmFzZSA9DQo+ID4gICAgID4gVmFyaWFibGVTdG9yZUJh c2U7DQo+ID4gICAgID4gKyAgbU52VmFyaWFibGVDYWNoZSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA9DQo+IChWQVJJQUJMRV9TVE9SRV9IRUFERVINCj4gPiAg ICAgPiAqKShVSU5UTilWYXJpYWJsZVN0b3JlQmFzZTsNCj4gPiAgICAgPiArICBtVmFyaWFibGVN b2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLkF1dGhGb3JtYXQgICAgICAgICAgICAgID0NCj4g PiAgICAgPiAoQk9PTEVBTikoQ29tcGFyZUd1aWQgKCZtTnZWYXJpYWJsZUNhY2hlLT5TaWduYXR1 cmUsDQo+ID4gICAgID4gJmdFZmlBdXRoZW50aWNhdGVkVmFyaWFibGVHdWlkKSk7DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgIG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+TWF4VmFyaWFibGVTaXpl ICAgICA9IFBjZEdldDMyDQo+ID4gICAgID4gKFBjZE1heFZhcmlhYmxlU2l6ZSk7DQo+ID4gICAg ID4gKyAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5NYXhBdXRoVmFyaWFibGVTaXplID0gKChQY2RH ZXQzMg0KPiA+ICAgICA+IChQY2RNYXhBdXRoVmFyaWFibGVTaXplKSAhPSAwKSA/IFBjZEdldDMy IChQY2RNYXhBdXRoVmFyaWFibGVTaXplKSA6DQo+ID4gICAgID4gbVZhcmlhYmxlTW9kdWxlR2xv YmFsLT5NYXhWYXJpYWJsZVNpemUpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ ICAgICA+ICsgIC8vIFBhcnNlIG5vbi12b2xhdGlsZSB2YXJpYWJsZSBkYXRhIGFuZCBnZXQgbGFz dCB2YXJpYWJsZSBvZmZzZXQuDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBWYXJpYWJs ZSA9IEdldFN0YXJ0UG9pbnRlciAobU52VmFyaWFibGVDYWNoZSk7DQo+ID4gICAgID4gKyAgd2hp bGUgKElzVmFsaWRWYXJpYWJsZUhlYWRlciAoDQo+ID4gICAgID4gKyAgICAgICAgICAgVmFyaWFi bGUsDQo+ID4gICAgID4gKyAgICAgICAgICAgR2V0RW5kUG9pbnRlciAobU52VmFyaWFibGVDYWNo ZSksDQo+ID4gICAgID4gKyAgICAgICAgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJs ZUdsb2JhbC5BdXRoRm9ybWF0DQo+ID4gICAgID4gKyAgICAgICAgICAgKSkNCj4gPiAgICAgPiAr ICB7DQo+ID4gICAgID4gKyAgICBOZXh0VmFyaWFibGUgPSBHZXROZXh0VmFyaWFibGVQdHIgKFZh cmlhYmxlLCBtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4gICAgID4gPlZhcmlhYmxlR2xvYmFs LkF1dGhGb3JtYXQpOw0KPiA+ICAgICA+ICsgICAgVmFyaWFibGVTaXplID0gKFVJTlROKU5leHRW YXJpYWJsZSAtIChVSU5UTilWYXJpYWJsZTsNCj4gPiAgICAgPiArICAgIGlmICgoVmFyaWFibGUt PkF0dHJpYnV0ZXMgJiAoRUZJX1ZBUklBQkxFX05PTl9WT0xBVElMRSB8DQo+ID4gICAgID4gRUZJ X1ZBUklBQkxFX0hBUkRXQVJFX0VSUk9SX1JFQ09SRCkpID09DQo+ID4gICAgID4gKEVGSV9WQVJJ QUJMRV9OT05fVk9MQVRJTEUgfA0KPiA+IEVGSV9WQVJJQUJMRV9IQVJEV0FSRV9FUlJPUl9SRUNP UkQpKQ0KPiA+ICAgICA+IHsNCj4gPiAgICAgPiArICAgICAgbVZhcmlhYmxlTW9kdWxlR2xvYmFs LT5Id0VyclZhcmlhYmxlVG90YWxTaXplICs9IFZhcmlhYmxlU2l6ZTsNCj4gPiAgICAgPiArICAg IH0gZWxzZSB7DQo+ID4gICAgID4gKyAgICAgIG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+Q29tbW9u VmFyaWFibGVUb3RhbFNpemUgKz0gVmFyaWFibGVTaXplOw0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICAgIFZhcmlhYmxlID0gTmV4dFZhcmlhYmxlOw0KPiA+ICAg ICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgbVZhcmlhYmxlTW9kdWxlR2xvYmFs LT5Ob25Wb2xhdGlsZUxhc3RWYXJpYWJsZU9mZnNldCA9DQo+ID4gKFVJTlROKVZhcmlhYmxlIC0N Cj4gPiAgICAgPiAoVUlOVE4pbU52VmFyaWFibGVDYWNoZTsNCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gZGlmZiAt LWdpdA0KPiA+ICAgICA+DQo+ID4NCj4gYS9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxl L1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlUGFyc2luZy5jDQo+ID4gICAgID4NCj4gPg0K PiBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUv VmFyaWFibGVQYXJzaW5nLmMNCj4gPiAgICAgPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ICAg ICA+IGluZGV4IDAwMDAwMDAwMDAwMC4uYmUzZjU5MzQxYzFlDQo+ID4gICAgID4gLS0tIC9kZXYv bnVsbA0KPiA+ICAgICA+ICsrKw0KPiA+ICAgICA+DQo+ID4NCj4gYi9NZGVNb2R1bGVQa2cvVW5p dmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlUGFyc2luZy5jDQo+ ID4gICAgID4gQEAgLTAsMCArMSwxMTEwIEBADQo+ID4gICAgID4gKy8qKiBAZmlsZQ0KPiA+ICAg ICA+ICsgIEZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSBhcmUgYXNzb2NpYXRlZCB3aXRoIHZhcmlh YmxlIHBhcnNpbmcgb3BlcmF0aW9ucw0KPiA+IGFuZA0KPiA+ICAgICA+ICsgIGFyZSBpbnRlbmRl ZCB0byBiZSB1c2FibGUgYWNyb3NzIHZhcmlhYmxlIGRyaXZlciBzb3VyY2UgZmlsZXMuDQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICtDb3B5cmlnaHQgKGMpIDIwMTkgLSAyMDIyLCBJbnRlbCBDb3Jw b3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4gICAgID4gK1NQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsqKi8NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyNpbmNsdWRlICJWYXJpYWJsZS5oIg0KPiA+ ICAgICA+ICsjaW5jbHVkZSAiVmFyaWFibGVQYXJzaW5nLmgiDQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsvKioNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgVGhpcyBjb2RlIGNoZWNrcyBpZiB2 YXJpYWJsZSBoZWFkZXIgaXMgdmFsaWQgb3Igbm90Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr ICBAcGFyYW1baW5dIFZhcmlhYmxlICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBWYXJpYWJsZSBI ZWFkZXIuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBWYXJpYWJsZVN0b3JlRW5kICAgUG9pbnRl ciB0byB0aGUgVmFyaWFibGUgU3RvcmUgRW5kLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gQXV0 aEZvcm1hdCAgICAgICAgIFRSVUUgaW5kaWNhdGVzIGF1dGhlbnRpY2F0ZWQgdmFyaWFibGVzIGFy ZQ0KPiA+IHVzZWQuDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RkFMU0UgaW5kaWNhdGVzIGF1dGhlbnRpY2F0ZWQgdmFyaWFibGVzIGFyZSBub3QgdXNlZC4NCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgICAgICBWYXJpYWJs ZSBoZWFkZXIgaXMgdmFsaWQuDQo+ID4gICAgID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgICAg ICBWYXJpYWJsZSBoZWFkZXIgaXMgbm90IHZhbGlkLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr KiovDQo+ID4gICAgID4gK0JPT0xFQU4NCj4gPiAgICAgPiArSXNWYWxpZFZhcmlhYmxlSGVhZGVy ICgNCj4gPiAgICAgPiArICBJTiAgVkFSSUFCTEVfSEVBREVSICAqVmFyaWFibGUsDQo+ID4gICAg ID4gKyAgSU4gIFZBUklBQkxFX0hFQURFUiAgKlZhcmlhYmxlU3RvcmVFbmQsDQo+ID4gICAgID4g KyAgSU4gIEJPT0xFQU4gICAgICAgICAgQXV0aEZvcm1hdA0KPiA+ICAgICA+ICsgICkNCj4gPiAg ICAgPiArew0KPiA+ICAgICA+ICsgIGlmICggIChWYXJpYWJsZSA9PSBOVUxMKQ0KPiA+ICAgICA+ ICsgICAgIHx8ICgoKFVJTlROKVZhcmlhYmxlICsgR2V0VmFyaWFibGVIZWFkZXJTaXplIChBdXRo Rm9ybWF0KSkgPj0NCj4gPiAgICAgPiAoVUlOVE4pVmFyaWFibGVTdG9yZUVuZCkNCj4gPiAgICAg PiArICAgICB8fCAoVmFyaWFibGUtPlN0YXJ0SWQgIT0gVkFSSUFCTEVfREFUQSkpDQo+ID4gICAg ID4gKyAgew0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIC8vIFZhcmlhYmxlIGlz IE5VTEwgb3IgaGFzIHJlYWNoZWQgdGhlIGVuZCBvZiB2YXJpYWJsZSBzdG9yZSwNCj4gPiAgICAg PiArICAgIC8vIG9yIHRoZSBTdGFydElkIGlzIG5vdCBjb3JyZWN0Lg0KPiA+ICAgICA+ICsgICAg Ly8NCj4gPiAgICAgPiArICAgIHJldHVybiBGQUxTRTsNCj4gPiAgICAgPiArICB9DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgIHJldHVybiBUUlVFOw0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgVGhpcyBjb2RlIGdl dHMgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIFZhcmlhYmxlIFN0b3JlLg0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICBAcGFyYW1baW5dIFZhclN0b3JlSGVhZGVyICBQb2ludGVyIHRvIHRoZSBWYXJp YWJsZSBTdG9yZSBIZWFkZXIuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR2YWwgRWZp UmF3ICAgICAgICAgVmFyaWFibGUgc3RvcmUgc3RhdHVzIGlzIHJhdy4NCj4gPiAgICAgPiArICBA cmV0dmFsIEVmaVZhbGlkICAgICAgIFZhcmlhYmxlIHN0b3JlIHN0YXR1cyBpcyB2YWxpZC4NCj4g PiAgICAgPiArICBAcmV0dmFsIEVmaUludmFsaWQgICAgIFZhcmlhYmxlIHN0b3JlIHN0YXR1cyBp cyBpbnZhbGlkLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK1ZBUklB QkxFX1NUT1JFX1NUQVRVUw0KPiA+ICAgICA+ICtHZXRWYXJpYWJsZVN0b3JlU3RhdHVzICgNCj4g PiAgICAgPiArICBJTiBWQVJJQUJMRV9TVE9SRV9IRUFERVIgICpWYXJTdG9yZUhlYWRlcg0KPiA+ ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0KPiA+ICAgICA+ICsgIGlmICgoQ29tcGFyZUd1aWQg KCZWYXJTdG9yZUhlYWRlci0+U2lnbmF0dXJlLA0KPiA+ICAgICA+ICZnRWZpQXV0aGVudGljYXRl ZFZhcmlhYmxlR3VpZCkgfHwNCj4gPiAgICAgPiArICAgICAgIENvbXBhcmVHdWlkICgmVmFyU3Rv cmVIZWFkZXItPlNpZ25hdHVyZSwgJmdFZmlWYXJpYWJsZUd1aWQpKSAmJg0KPiA+ICAgICA+ICsg ICAgICAoVmFyU3RvcmVIZWFkZXItPkZvcm1hdCA9PSBWQVJJQUJMRV9TVE9SRV9GT1JNQVRURUQp ICYmDQo+ID4gICAgID4gKyAgICAgIChWYXJTdG9yZUhlYWRlci0+U3RhdGUgPT0gVkFSSUFCTEVf U1RPUkVfSEVBTFRIWSkNCj4gPiAgICAgPiArICAgICAgKQ0KPiA+ICAgICA+ICsgIHsNCj4gPiAg ICAgPiArICAgIHJldHVybiBFZmlWYWxpZDsNCj4gPiAgICAgPiArICB9IGVsc2UgaWYgKCgoKFVJ TlQzMiAqKSgmVmFyU3RvcmVIZWFkZXItPlNpZ25hdHVyZSkpWzBdID09IDB4ZmZmZmZmZmYpICYm DQo+ID4gICAgID4gKyAgICAgICAgICAgICAoKChVSU5UMzIgKikoJlZhclN0b3JlSGVhZGVyLT5T aWduYXR1cmUpKVsxXSA9PSAweGZmZmZmZmZmKSAmJg0KPiA+ICAgICA+ICsgICAgICAgICAgICAg KCgoVUlOVDMyICopKCZWYXJTdG9yZUhlYWRlci0+U2lnbmF0dXJlKSlbMl0gPT0gMHhmZmZmZmZm ZikgJiYNCj4gPiAgICAgPiArICAgICAgICAgICAgICgoKFVJTlQzMiAqKSgmVmFyU3RvcmVIZWFk ZXItPlNpZ25hdHVyZSkpWzNdID09IDB4ZmZmZmZmZmYpICYmDQo+ID4gICAgID4gKyAgICAgICAg ICAgICAoVmFyU3RvcmVIZWFkZXItPlNpemUgPT0gMHhmZmZmZmZmZikgJiYNCj4gPiAgICAgPiAr ICAgICAgICAgICAgIChWYXJTdG9yZUhlYWRlci0+Rm9ybWF0ID09IDB4ZmYpICYmDQo+ID4gICAg ID4gKyAgICAgICAgICAgICAoVmFyU3RvcmVIZWFkZXItPlN0YXRlID09IDB4ZmYpDQo+ID4gICAg ID4gKyAgICAgICAgICAgICApDQo+ID4gICAgID4gKyAgew0KPiA+ICAgICA+ICsgICAgcmV0dXJu IEVmaVJhdzsNCj4gPiAgICAgPiArICB9IGVsc2Ugew0KPiA+ICAgICA+ICsgICAgcmV0dXJuIEVm aUludmFsaWQ7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBUaGlzIGNvZGUgZ2V0cyB0aGUgc2l6ZSBvZiB2YXJp YWJsZSBoZWFkZXIuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gIEF1dGhG b3JtYXQgICAgVFJVRSBpbmRpY2F0ZXMgYXV0aGVudGljYXRlZCB2YXJpYWJsZXMgYXJlDQo+ID4g dXNlZC4NCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFIGluZGlj YXRlcyBhdXRoZW50aWNhdGVkIHZhcmlhYmxlcyBhcmUgbm90IHVzZWQuDQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIEByZXR1cm4gU2l6ZSBvZiB2YXJpYWJsZSBoZWFkZXIgaW4gYnl0ZXMgaW4g dHlwZSBVSU5UTi4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtVSU5U Tg0KPiA+ICAgICA+ICtHZXRWYXJpYWJsZUhlYWRlclNpemUgKA0KPiA+ICAgICA+ICsgIElOICBC T09MRUFOICBBdXRoRm9ybWF0DQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAg ID4gKyAgVUlOVE4gIFZhbHVlOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBpZiAoQXV0aEZv cm1hdCkgew0KPiA+ICAgICA+ICsgICAgVmFsdWUgPSBzaXplb2YgKEFVVEhFTlRJQ0FURURfVkFS SUFCTEVfSEVBREVSKTsNCj4gPiAgICAgPiArICB9IGVsc2Ugew0KPiA+ICAgICA+ICsgICAgVmFs dWUgPSBzaXplb2YgKFZBUklBQkxFX0hFQURFUik7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArICByZXR1cm4gVmFsdWU7DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBUaGlzIGNvZGUgZ2V0 cyB0aGUgc2l6ZSBvZiBuYW1lIG9mIHZhcmlhYmxlLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr ICBAcGFyYW1baW5dICBWYXJpYWJsZSAgICAgIFBvaW50ZXIgdG8gdGhlIHZhcmlhYmxlIGhlYWRl ci4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dICBBdXRoRm9ybWF0ICAgIFRSVUUgaW5kaWNhdGVz IGF1dGhlbnRpY2F0ZWQgdmFyaWFibGVzIGFyZQ0KPiA+IHVzZWQuDQo+ID4gICAgID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSBpbmRpY2F0ZXMgYXV0aGVudGljYXRlZCB2YXJp YWJsZXMgYXJlIG5vdCB1c2VkLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcmV0dXJuIFVJ TlROICAgICAgICAgIFNpemUgb2YgdmFyaWFibGUgaW4gYnl0ZXMuDQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsqKi8NCj4gPiAgICAgPiArVUlOVE4NCj4gPiAgICAgPiArTmFtZVNpemVPZlZhcmlh YmxlICgNCj4gPiAgICAgPiArICBJTiAgVkFSSUFCTEVfSEVBREVSICAqVmFyaWFibGUsDQo+ID4g ICAgID4gKyAgSU4gIEJPT0xFQU4gICAgICAgICAgQXV0aEZvcm1hdA0KPiA+ICAgICA+ICsgICkN Cj4gPiAgICAgPiArew0KPiA+ICAgICA+ICsgIEFVVEhFTlRJQ0FURURfVkFSSUFCTEVfSEVBREVS ICAqQXV0aFZhcmlhYmxlOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBBdXRoVmFyaWFibGUg PSAoQVVUSEVOVElDQVRFRF9WQVJJQUJMRV9IRUFERVIgKilWYXJpYWJsZTsNCj4gPiAgICAgPiAr ICBpZiAoQXV0aEZvcm1hdCkgew0KPiA+ICAgICA+ICsgICAgaWYgKChBdXRoVmFyaWFibGUtPlN0 YXRlID09IChVSU5UOCkoLTEpKSB8fA0KPiA+ICAgICA+ICsgICAgICAgIChBdXRoVmFyaWFibGUt PkRhdGFTaXplID09IChVSU5UMzIpKC0xKSkgfHwNCj4gPiAgICAgPiArICAgICAgICAoQXV0aFZh cmlhYmxlLT5OYW1lU2l6ZSA9PSAoVUlOVDMyKSgtMSkpIHx8DQo+ID4gICAgID4gKyAgICAgICAg KEF1dGhWYXJpYWJsZS0+QXR0cmlidXRlcyA9PSAoVUlOVDMyKSgtMSkpKQ0KPiA+ICAgICA+ICsg ICAgew0KPiA+ICAgICA+ICsgICAgICByZXR1cm4gMDsNCj4gPiAgICAgPiArICAgIH0NCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKyAgICByZXR1cm4gKFVJTlROKUF1dGhWYXJpYWJsZS0+TmFtZVNp emU7DQo+ID4gICAgID4gKyAgfSBlbHNlIHsNCj4gPiAgICAgPiArICAgIGlmICgoVmFyaWFibGUt PlN0YXRlID09IChVSU5UOCkoLTEpKSB8fA0KPiA+ICAgICA+ICsgICAgICAgIChWYXJpYWJsZS0+ RGF0YVNpemUgPT0gKFVJTlQzMikoLTEpKSB8fA0KPiA+ICAgICA+ICsgICAgICAgIChWYXJpYWJs ZS0+TmFtZVNpemUgPT0gKFVJTlQzMikoLTEpKSB8fA0KPiA+ICAgICA+ICsgICAgICAgIChWYXJp YWJsZS0+QXR0cmlidXRlcyA9PSAoVUlOVDMyKSgtMSkpKQ0KPiA+ICAgICA+ICsgICAgew0KPiA+ ICAgICA+ICsgICAgICByZXR1cm4gMDsNCj4gPiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgICByZXR1cm4gKFVJTlROKVZhcmlhYmxlLT5OYW1lU2l6ZTsNCj4gPiAgICAg PiArICB9DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAg ICA+ICsgIFRoaXMgY29kZSBzZXRzIHRoZSBzaXplIG9mIG5hbWUgb2YgdmFyaWFibGUuDQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gIFZhcmlhYmxlICAgICAgUG9pbnRlciB0 byB0aGUgVmFyaWFibGUgSGVhZGVyLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gIE5hbWVTaXpl ICAgICAgTmFtZSBzaXplIHRvIHNldC4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dICBBdXRoRm9y bWF0ICAgIFRSVUUgaW5kaWNhdGVzIGF1dGhlbnRpY2F0ZWQgdmFyaWFibGVzIGFyZQ0KPiA+IHVz ZWQuDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSBpbmRpY2F0 ZXMgYXV0aGVudGljYXRlZCB2YXJpYWJsZXMgYXJlIG5vdCB1c2VkLg0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArKiovDQo+ID4gICAgID4gK1ZPSUQNCj4gPiAgICAgPiArU2V0TmFtZVNpemVPZlZh cmlhYmxlICgNCj4gPiAgICAgPiArICBJTiBWQVJJQUJMRV9IRUFERVIgICpWYXJpYWJsZSwNCj4g PiAgICAgPiArICBJTiBVSU5UTiAgICAgICAgICAgIE5hbWVTaXplLA0KPiA+ICAgICA+ICsgIElO IEJPT0xFQU4gICAgICAgICAgQXV0aEZvcm1hdA0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiAr ew0KPiA+ICAgICA+ICsgIEFVVEhFTlRJQ0FURURfVkFSSUFCTEVfSEVBREVSICAqQXV0aFZhcmlh YmxlOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBBdXRoVmFyaWFibGUgPSAoQVVUSEVOVElD QVRFRF9WQVJJQUJMRV9IRUFERVIgKilWYXJpYWJsZTsNCj4gPiAgICAgPiArICBpZiAoQXV0aEZv cm1hdCkgew0KPiA+ICAgICA+ICsgICAgQXV0aFZhcmlhYmxlLT5OYW1lU2l6ZSA9IChVSU5UMzIp TmFtZVNpemU7DQo+ID4gICAgID4gKyAgfSBlbHNlIHsNCj4gPiAgICAgPiArICAgIFZhcmlhYmxl LT5OYW1lU2l6ZSA9IChVSU5UMzIpTmFtZVNpemU7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgVGhpcyBjb2RlIGdldHMgdGhlIHNpemUgb2YgdmFyaWFibGUgZGF0YS4NCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgVmFyaWFibGUgICAgICBQb2ludGVyIHRvIHRoZSBW YXJpYWJsZSBIZWFkZXIuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgQXV0aEZvcm1hdCAgICBU UlVFIGluZGljYXRlcyBhdXRoZW50aWNhdGVkIHZhcmlhYmxlcyBhcmUNCj4gPiB1c2VkLg0KPiA+ ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UgaW5kaWNhdGVzIGF1dGhl bnRpY2F0ZWQgdmFyaWFibGVzIGFyZSBub3QgdXNlZC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgQHJldHVybiBTaXplIG9mIHZhcmlhYmxlIGluIGJ5dGVzLg0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArKiovDQo+ID4gICAgID4gK1VJTlRODQo+ID4gICAgID4gK0RhdGFTaXplT2ZWYXJpYWJs ZSAoDQo+ID4gICAgID4gKyAgSU4gIFZBUklBQkxFX0hFQURFUiAgKlZhcmlhYmxlLA0KPiA+ICAg ICA+ICsgIElOICBCT09MRUFOICAgICAgICAgIEF1dGhGb3JtYXQNCj4gPiAgICAgPiArICApDQo+ ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBBVVRIRU5USUNBVEVEX1ZBUklBQkxFX0hFQURFUiAg KkF1dGhWYXJpYWJsZTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQXV0aFZhcmlhYmxlID0g KEFVVEhFTlRJQ0FURURfVkFSSUFCTEVfSEVBREVSICopVmFyaWFibGU7DQo+ID4gICAgID4gKyAg aWYgKEF1dGhGb3JtYXQpIHsNCj4gPiAgICAgPiArICAgIGlmICgoQXV0aFZhcmlhYmxlLT5TdGF0 ZSA9PSAoVUlOVDgpKC0xKSkgfHwNCj4gPiAgICAgPiArICAgICAgICAoQXV0aFZhcmlhYmxlLT5E YXRhU2l6ZSA9PSAoVUlOVDMyKSgtMSkpIHx8DQo+ID4gICAgID4gKyAgICAgICAgKEF1dGhWYXJp YWJsZS0+TmFtZVNpemUgPT0gKFVJTlQzMikoLTEpKSB8fA0KPiA+ICAgICA+ICsgICAgICAgIChB dXRoVmFyaWFibGUtPkF0dHJpYnV0ZXMgPT0gKFVJTlQzMikoLTEpKSkNCj4gPiAgICAgPiArICAg IHsNCj4gPiAgICAgPiArICAgICAgcmV0dXJuIDA7DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgICAgcmV0dXJuIChVSU5UTilBdXRoVmFyaWFibGUtPkRhdGFTaXpl Ow0KPiA+ICAgICA+ICsgIH0gZWxzZSB7DQo+ID4gICAgID4gKyAgICBpZiAoKFZhcmlhYmxlLT5T dGF0ZSA9PSAoVUlOVDgpKC0xKSkgfHwNCj4gPiAgICAgPiArICAgICAgICAoVmFyaWFibGUtPkRh dGFTaXplID09IChVSU5UMzIpKC0xKSkgfHwNCj4gPiAgICAgPiArICAgICAgICAoVmFyaWFibGUt Pk5hbWVTaXplID09IChVSU5UMzIpKC0xKSkgfHwNCj4gPiAgICAgPiArICAgICAgICAoVmFyaWFi bGUtPkF0dHJpYnV0ZXMgPT0gKFVJTlQzMikoLTEpKSkNCj4gPiAgICAgPiArICAgIHsNCj4gPiAg ICAgPiArICAgICAgcmV0dXJuIDA7DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsgICAgcmV0dXJuIChVSU5UTilWYXJpYWJsZS0+RGF0YVNpemU7DQo+ID4gICAgID4g KyAgfQ0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAg PiArICBUaGlzIGNvZGUgc2V0cyB0aGUgc2l6ZSBvZiB2YXJpYWJsZSBkYXRhLg0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArICBAcGFyYW1baW5dIFZhcmlhYmxlICAgUG9pbnRlciB0byB0aGUgVmFy aWFibGUgSGVhZGVyLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gRGF0YVNpemUgICBEYXRhIHNp emUgdG8gc2V0Lg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gQXV0aEZvcm1hdCBUUlVFIGluZGlj YXRlcyBhdXRoZW50aWNhdGVkIHZhcmlhYmxlcyBhcmUNCj4gdXNlZC4NCj4gPiAgICAgPiArICAg ICAgICAgICAgICAgICAgICAgICAgRkFMU0UgaW5kaWNhdGVzIGF1dGhlbnRpY2F0ZWQgdmFyaWFi bGVzIGFyZSBub3QgdXNlZC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ ICtWT0lEDQo+ID4gICAgID4gK1NldERhdGFTaXplT2ZWYXJpYWJsZSAoDQo+ID4gICAgID4gKyAg SU4gIFZBUklBQkxFX0hFQURFUiAgKlZhcmlhYmxlLA0KPiA+ICAgICA+ICsgIElOICBVSU5UTiAg ICAgICAgICAgIERhdGFTaXplLA0KPiA+ICAgICA+ICsgIElOICBCT09MRUFOICAgICAgICAgIEF1 dGhGb3JtYXQNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBBVVRI RU5USUNBVEVEX1ZBUklBQkxFX0hFQURFUiAgKkF1dGhWYXJpYWJsZTsNCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgQXV0aFZhcmlhYmxlID0gKEFVVEhFTlRJQ0FURURfVkFSSUFCTEVfSEVBREVS ICopVmFyaWFibGU7DQo+ID4gICAgID4gKyAgaWYgKEF1dGhGb3JtYXQpIHsNCj4gPiAgICAgPiAr ICAgIEF1dGhWYXJpYWJsZS0+RGF0YVNpemUgPSAoVUlOVDMyKURhdGFTaXplOw0KPiA+ICAgICA+ ICsgIH0gZWxzZSB7DQo+ID4gICAgID4gKyAgICBWYXJpYWJsZS0+RGF0YVNpemUgPSAoVUlOVDMy KURhdGFTaXplOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArLyoqDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFRoaXMgY29kZSBnZXRzIHRo ZSBwb2ludGVyIHRvIHRoZSB2YXJpYWJsZSBuYW1lLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr ICBAcGFyYW1baW5dIFZhcmlhYmxlICAgICBQb2ludGVyIHRvIHRoZSBWYXJpYWJsZSBIZWFkZXIu DQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBBdXRoRm9ybWF0ICAgVFJVRSBpbmRpY2F0ZXMgYXV0 aGVudGljYXRlZCB2YXJpYWJsZXMgYXJlDQo+IHVzZWQuDQo+ID4gICAgID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgRkFMU0UgaW5kaWNhdGVzIGF1dGhlbnRpY2F0ZWQgdmFyaWFibGVzIGFy ZSBub3QgdXNlZC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHVybiBQb2ludGVyIHRv IFZhcmlhYmxlIE5hbWUgd2hpY2ggaXMgVW5pY29kZSBlbmNvZGluZy4NCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtDSEFSMTYgKg0KPiA+ICAgICA+ICtHZXRWYXJpYWJs ZU5hbWVQdHIgKA0KPiA+ICAgICA+ICsgIElOICBWQVJJQUJMRV9IRUFERVIgICpWYXJpYWJsZSwN Cj4gPiAgICAgPiArICBJTiAgQk9PTEVBTiAgICAgICAgICBBdXRoRm9ybWF0DQo+ID4gICAgID4g KyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgcmV0dXJuIChDSEFSMTYgKikoKFVJTlRO KVZhcmlhYmxlICsgR2V0VmFyaWFibGVIZWFkZXJTaXplDQo+ID4gKEF1dGhGb3JtYXQpKTsNCj4g PiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgVGhp cyBjb2RlIGdldHMgdGhlIHBvaW50ZXIgdG8gdGhlIHZhcmlhYmxlIGd1aWQuDQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gVmFyaWFibGUgICAgIFBvaW50ZXIgdG8gdGhlIFZh cmlhYmxlIEhlYWRlci4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dIEF1dGhGb3JtYXQgICBUUlVF IGluZGljYXRlcyBhdXRoZW50aWNhdGVkIHZhcmlhYmxlcyBhcmUNCj4gdXNlZC4NCj4gPiAgICAg PiArICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSBpbmRpY2F0ZXMgYXV0aGVudGljYXRl ZCB2YXJpYWJsZXMgYXJlIG5vdCB1c2VkLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcmV0 dXJuIEEgRUZJX0dVSUQqIHBvaW50ZXIgdG8gVmVuZG9yIEd1aWQuDQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX0dVSUQgKg0KPiA+ICAgICA+ICtHZXRWZW5kb3JH dWlkUHRyICgNCj4gPiAgICAgPiArICBJTiAgVkFSSUFCTEVfSEVBREVSICAqVmFyaWFibGUsDQo+ ID4gICAgID4gKyAgSU4gIEJPT0xFQU4gICAgICAgICAgQXV0aEZvcm1hdA0KPiA+ICAgICA+ICsg ICkNCj4gPiAgICAgPiArew0KPiA+ICAgICA+ICsgIEFVVEhFTlRJQ0FURURfVkFSSUFCTEVfSEVB REVSICAqQXV0aFZhcmlhYmxlOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBBdXRoVmFyaWFi bGUgPSAoQVVUSEVOVElDQVRFRF9WQVJJQUJMRV9IRUFERVIgKilWYXJpYWJsZTsNCj4gPiAgICAg PiArICBpZiAoQXV0aEZvcm1hdCkgew0KPiA+ICAgICA+ICsgICAgcmV0dXJuICZBdXRoVmFyaWFi bGUtPlZlbmRvckd1aWQ7DQo+ID4gICAgID4gKyAgfSBlbHNlIHsNCj4gPiAgICAgPiArICAgIHJl dHVybiAmVmFyaWFibGUtPlZlbmRvckd1aWQ7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICt9 DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg VGhpcyBjb2RlIGdldHMgdGhlIHBvaW50ZXIgdG8gdGhlIHZhcmlhYmxlIGRhdGEuDQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gVmFyaWFibGUgICAgIFBvaW50ZXIgdG8gdGhl IFZhcmlhYmxlIEhlYWRlci4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dIEF1dGhGb3JtYXQgICBU UlVFIGluZGljYXRlcyBhdXRoZW50aWNhdGVkIHZhcmlhYmxlcyBhcmUNCj4gdXNlZC4NCj4gPiAg ICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSBpbmRpY2F0ZXMgYXV0aGVudGlj YXRlZCB2YXJpYWJsZXMgYXJlIG5vdCB1c2VkLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBA cmV0dXJuIFBvaW50ZXIgdG8gVmFyaWFibGUgRGF0YS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyoqLw0KPiA+ICAgICA+ICtVSU5UOCAqDQo+ID4gICAgID4gK0dldFZhcmlhYmxlRGF0YVB0ciAo DQo+ID4gICAgID4gKyAgSU4gIFZBUklBQkxFX0hFQURFUiAgKlZhcmlhYmxlLA0KPiA+ICAgICA+ ICsgIElOICBCT09MRUFOICAgICAgICAgIEF1dGhGb3JtYXQNCj4gPiAgICAgPiArICApDQo+ID4g ICAgID4gK3sNCj4gPiAgICAgPiArICBVSU5UTiAgVmFsdWU7DQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gQmUgY2FyZWZ1bCBhYm91dCBwYWQgc2l6ZSBmb3Ig YWxpZ25tZW50Lg0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgVmFsdWUgID0gIChVSU5U TilHZXRWYXJpYWJsZU5hbWVQdHIgKFZhcmlhYmxlLCBBdXRoRm9ybWF0KTsNCj4gPiAgICAgPiAr ICBWYWx1ZSArPSBOYW1lU2l6ZU9mVmFyaWFibGUgKFZhcmlhYmxlLCBBdXRoRm9ybWF0KTsNCj4g PiAgICAgPiArICBWYWx1ZSArPSBHRVRfUEFEX1NJWkUgKE5hbWVTaXplT2ZWYXJpYWJsZSAoVmFy aWFibGUsIEF1dGhGb3JtYXQpKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgcmV0dXJuIChV SU5UOCAqKVZhbHVlOw0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioN Cj4gPiAgICAgPiArICBUaGlzIGNvZGUgZ2V0cyB0aGUgdmFyaWFibGUgZGF0YSBvZmZzZXQgcmVs YXRlZCB0byB2YXJpYWJsZSBoZWFkZXIuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJh bVtpbl0gVmFyaWFibGUgICAgIFBvaW50ZXIgdG8gdGhlIFZhcmlhYmxlIEhlYWRlci4NCj4gPiAg ICAgPiArICBAcGFyYW1baW5dIEF1dGhGb3JtYXQgICBUUlVFIGluZGljYXRlcyBhdXRoZW50aWNh dGVkIHZhcmlhYmxlcyBhcmUNCj4gdXNlZC4NCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAg ICAgICAgICBGQUxTRSBpbmRpY2F0ZXMgYXV0aGVudGljYXRlZCB2YXJpYWJsZXMgYXJlIG5vdCB1 c2VkLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcmV0dXJuIFZhcmlhYmxlIERhdGEgb2Zm c2V0Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK1VJTlRODQo+ID4g ICAgID4gK0dldFZhcmlhYmxlRGF0YU9mZnNldCAoDQo+ID4gICAgID4gKyAgSU4gIFZBUklBQkxF X0hFQURFUiAgKlZhcmlhYmxlLA0KPiA+ICAgICA+ICsgIElOICBCT09MRUFOICAgICAgICAgIEF1 dGhGb3JtYXQNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBVSU5U TiAgVmFsdWU7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8g QmUgY2FyZWZ1bCBhYm91dCBwYWQgc2l6ZSBmb3IgYWxpZ25tZW50DQo+ID4gICAgID4gKyAgLy8N Cj4gPiAgICAgPiArICBWYWx1ZSAgPSBHZXRWYXJpYWJsZUhlYWRlclNpemUgKEF1dGhGb3JtYXQp Ow0KPiA+ICAgICA+ICsgIFZhbHVlICs9IE5hbWVTaXplT2ZWYXJpYWJsZSAoVmFyaWFibGUsIEF1 dGhGb3JtYXQpOw0KPiA+ICAgICA+ICsgIFZhbHVlICs9IEdFVF9QQURfU0laRSAoTmFtZVNpemVP ZlZhcmlhYmxlIChWYXJpYWJsZSwgQXV0aEZvcm1hdCkpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICByZXR1cm4gVmFsdWU7DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4g Ky8qKg0KPiA+ICAgICA+ICsgIEdldCB2YXJpYWJsZSBkYXRhIHBheWxvYWQuDQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBWYXJpYWJsZSAgICAgUG9pbnRlciB0byB0 aGUgVmFyaWFibGUgSGVhZGVyLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbixvdXRdICBEYXRhICAg ICAgICAgUG9pbnRlciB0byBidWZmZXIgdXNlZCB0byBzdG9yZSB0aGUgdmFyaWFibGUNCj4gPiBk YXRhLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbixvdXRdICBEYXRhU2l6ZSAgICAgU2l6ZSBvZiBi dWZmZXIgcGFzc2VkIGJ5IERhdGEuDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBTaXplIG9mIGRhdGEgY29waWVkIGludG8gRGF0YSBidWZmZXIuDQo+ID4gICAgID4g KyAgQHBhcmFtW2luXSAgICAgIEF1dGhGbGFnICAgICBBdXRoLXZhcmlhYmxlIGluZGljYXRvci4N Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHVybiBFRklfU1VDQ0VTUyAgICAgICAgICAg ICBEYXRhIHdhcyBmZXRjaGVkLg0KPiA+ICAgICA+ICsgIEByZXR1cm4gRUZJX0lOVkFMSURfUEFS QU1FVEVSICAgRGF0YVNpemUgaXMgTlVMTC4NCj4gPiAgICAgPiArICBAcmV0dXJuIEVGSV9CVUZG RVJfVE9PX1NNQUxMICAgIERhdGFTaXplIGlzIHNtYWxsZXIgdGhhbiBzaXplIG9mDQo+ID4gdmFy aWFibGUNCj4gPiAgICAgPiBkYXRhLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4g ICAgID4gK0VGSV9TVEFUVVMNCj4gPiAgICAgPiArR2V0VmFyaWFibGVEYXRhICgNCj4gPiAgICAg PiArICBJTiAgICAgIFZBUklBQkxFX0hFQURFUiAgKlZhcmlhYmxlLA0KPiA+ICAgICA+ICsgIElO ICBPVVQgVk9JRCAgICAgICAgICAgICAqRGF0YSwNCj4gPiAgICAgPiArICBJTiAgT1VUIFVJTlQz MiAgICAgICAgICAgKkRhdGFTaXplLA0KPiA+ICAgICA+ICsgIElOICAgICAgQk9PTEVBTiAgICAg ICAgICBBdXRoRmxhZw0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0KPiA+ICAgICA+ICsg IFVJTlQzMiAgU2l6ZTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgaWYgKERhdGFTaXplID09 IE5VTEwpIHsNCj4gPiAgICAgPiArICAgIEFTU0VSVCAoRGF0YVNpemUgIT0gTlVMTCk7DQo+ID4g ICAgID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICAgICA+ICsgIH0N Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgU2l6ZSA9IChVSU5UMzIpRGF0YVNpemVPZlZhcmlh YmxlIChWYXJpYWJsZSwgQXV0aEZsYWcpOw0KPiA+ICAgICA+ICsgIGlmICgqRGF0YVNpemUgPCBT aXplKSB7DQo+ID4gICAgID4gKyAgICAqRGF0YVNpemUgPSBTaXplOw0KPiA+ICAgICA+ICsgICAg cmV0dXJuIEVGSV9CVUZGRVJfVE9PX1NNQUxMOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyAgaWYgKERhdGEgPT0gTlVMTCkgew0KPiA+ICAgICA+ICsgICAgQVNTRVJU IChEYXRhICE9IE5VTEwpOw0KPiA+ICAgICA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFN RVRFUjsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIENvcHlNZW0g KERhdGEsIEdldFZhcmlhYmxlRGF0YVB0ciAoVmFyaWFibGUsIEF1dGhGbGFnKSwgU2l6ZSk7DQo+ ID4gICAgID4gKyAgKkRhdGFTaXplID0gU2l6ZTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg cmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsvKioNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgVGhpcyBjb2RlIGdldHMgdGhlIHBvaW50 ZXIgdG8gdGhlIG5leHQgdmFyaWFibGUgaGVhZGVyLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr ICBAcGFyYW1baW5dIFZhcmlhYmxlICAgICBQb2ludGVyIHRvIHRoZSBWYXJpYWJsZSBIZWFkZXIu DQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBBdXRoRm9ybWF0ICAgVFJVRSBpbmRpY2F0ZXMgYXV0 aGVudGljYXRlZCB2YXJpYWJsZXMgYXJlDQo+IHVzZWQuDQo+ID4gICAgID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgRkFMU0UgaW5kaWNhdGVzIGF1dGhlbnRpY2F0ZWQgdmFyaWFibGVzIGFy ZSBub3QgdXNlZC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHVybiBQb2ludGVyIHRv IG5leHQgdmFyaWFibGUgaGVhZGVyLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4g ICAgID4gK1ZBUklBQkxFX0hFQURFUiAqDQo+ID4gICAgID4gK0dldE5leHRWYXJpYWJsZVB0ciAo DQo+ID4gICAgID4gKyAgSU4gIFZBUklBQkxFX0hFQURFUiAgKlZhcmlhYmxlLA0KPiA+ICAgICA+ ICsgIElOICBCT09MRUFOICAgICAgICAgIEF1dGhGb3JtYXQNCj4gPiAgICAgPiArICApDQo+ID4g ICAgID4gK3sNCj4gPiAgICAgPiArICBVSU5UTiAgVmFsdWU7DQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsgIFZhbHVlICA9ICAoVUlOVE4pR2V0VmFyaWFibGVEYXRhUHRyIChWYXJpYWJsZSwgQXV0 aEZvcm1hdCk7DQo+ID4gICAgID4gKyAgVmFsdWUgKz0gRGF0YVNpemVPZlZhcmlhYmxlIChWYXJp YWJsZSwgQXV0aEZvcm1hdCk7DQo+ID4gICAgID4gKyAgVmFsdWUgKz0gR0VUX1BBRF9TSVpFIChE YXRhU2l6ZU9mVmFyaWFibGUgKFZhcmlhYmxlLCBBdXRoRm9ybWF0KSk7DQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gQmUgY2FyZWZ1bCBhYm91dCBwYWQgc2l6 ZSBmb3IgYWxpZ25tZW50Lg0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgcmV0dXJuIChW QVJJQUJMRV9IRUFERVIgKilIRUFERVJfQUxJR04gKFZhbHVlKTsNCj4gPiAgICAgPiArfQ0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEdldHMg dGhlIHBvaW50ZXIgdG8gdGhlIGZpcnN0IHZhcmlhYmxlIGhlYWRlciBpbiBnaXZlbiB2YXJpYWJs ZSBzdG9yZSBhcmVhLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1baW5dIFZhclN0 b3JlSGVhZGVyICBQb2ludGVyIHRvIHRoZSBWYXJpYWJsZSBTdG9yZSBIZWFkZXIuDQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgIEByZXR1cm4gUG9pbnRlciB0byB0aGUgZmlyc3QgdmFyaWFibGUg aGVhZGVyLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK1ZBUklBQkxF X0hFQURFUiAqDQo+ID4gICAgID4gK0dldFN0YXJ0UG9pbnRlciAoDQo+ID4gICAgID4gKyAgSU4g VkFSSUFCTEVfU1RPUkVfSEVBREVSICAqVmFyU3RvcmVIZWFkZXINCj4gPiAgICAgPiArICApDQo+ ID4gICAgID4gK3sNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIFRoZSBzdGFydCBv ZiB2YXJpYWJsZSBzdG9yZS4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIHJldHVybiAo VkFSSUFCTEVfSEVBREVSICopSEVBREVSX0FMSUdOIChWYXJTdG9yZUhlYWRlciArIDEpOw0KPiA+ ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyAgR2V0cyB0aGUgcG9pbnRlciB0byB0aGUgZW5kIG9mIHRoZSB2YXJpYWJsZSBzdG9y YWdlIGFyZWEuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFRoaXMgZnVuY3Rpb24gZ2V0cyBw b2ludGVyIHRvIHRoZSBlbmQgb2YgdGhlIHZhcmlhYmxlIHN0b3JhZ2UNCj4gPiAgICAgPiArICBh cmVhLCBhY2NvcmRpbmcgdG8gdGhlIGlucHV0IHZhcmlhYmxlIHN0b3JlIGhlYWRlci4NCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBWYXJTdG9yZUhlYWRlciAgUG9pbnRlciB0 byB0aGUgVmFyaWFibGUgU3RvcmUgSGVhZGVyLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBA cmV0dXJuIFBvaW50ZXIgdG8gdGhlIGVuZCBvZiB0aGUgdmFyaWFibGUgc3RvcmFnZSBhcmVhLg0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK1ZBUklBQkxFX0hFQURFUiAq DQo+ID4gICAgID4gK0dldEVuZFBvaW50ZXIgKA0KPiA+ICAgICA+ICsgIElOIFZBUklBQkxFX1NU T1JFX0hFQURFUiAgKlZhclN0b3JlSGVhZGVyDQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7 DQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBUaGUgZW5kIG9mIHZhcmlhYmxlIHN0 b3JlDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICByZXR1cm4gKFZBUklBQkxFX0hFQURF UiAqKUhFQURFUl9BTElHTiAoKFVJTlROKVZhclN0b3JlSGVhZGVyICsNCj4gPiAgICAgPiBWYXJT dG9yZUhlYWRlci0+U2l6ZSk7DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4g Ky8qKg0KPiA+ICAgICA+ICsgIENvbXBhcmUgdHdvIEVGSV9USU1FIGRhdGEuDQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1baW5dIEZpcnN0VGltZSAgICAgICBB IHBvaW50ZXIgdG8gdGhlIGZpcnN0IEVGSV9USU1FIGRhdGEuDQo+ID4gICAgID4gKyAgQHBhcmFt W2luXSBTZWNvbmRUaW1lICAgICAgQSBwb2ludGVyIHRvIHRoZSBzZWNvbmQgRUZJX1RJTUUgZGF0 YS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHZhbCAgVFJVRSAgICAgICAgICAgICAg VGhlIEZpcnN0VGltZSBpcyBub3QgbGF0ZXIgdGhhbiB0aGUgU2Vjb25kVGltZS4NCj4gPiAgICAg PiArICBAcmV0dmFsICBGQUxTRSAgICAgICAgICAgICBUaGUgRmlyc3RUaW1lIGlzIGxhdGVyIHRo YW4gdGhlIFNlY29uZFRpbWUuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAg PiArQk9PTEVBTg0KPiA+ICAgICA+ICtWYXJpYWJsZUNvbXBhcmVUaW1lU3RhbXBJbnRlcm5hbCAo DQo+ID4gICAgID4gKyAgSU4gRUZJX1RJTUUgICpGaXJzdFRpbWUsDQo+ID4gICAgID4gKyAgSU4g RUZJX1RJTUUgICpTZWNvbmRUaW1lDQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4g ICAgID4gKyAgaWYgKEZpcnN0VGltZS0+WWVhciAhPSBTZWNvbmRUaW1lLT5ZZWFyKSB7DQo+ID4g ICAgID4gKyAgICByZXR1cm4gKEJPT0xFQU4pKEZpcnN0VGltZS0+WWVhciA8IFNlY29uZFRpbWUt PlllYXIpOw0KPiA+ICAgICA+ICsgIH0gZWxzZSBpZiAoRmlyc3RUaW1lLT5Nb250aCAhPSBTZWNv bmRUaW1lLT5Nb250aCkgew0KPiA+ICAgICA+ICsgICAgcmV0dXJuIChCT09MRUFOKShGaXJzdFRp bWUtPk1vbnRoIDwgU2Vjb25kVGltZS0+TW9udGgpOw0KPiA+ICAgICA+ICsgIH0gZWxzZSBpZiAo Rmlyc3RUaW1lLT5EYXkgIT0gU2Vjb25kVGltZS0+RGF5KSB7DQo+ID4gICAgID4gKyAgICByZXR1 cm4gKEJPT0xFQU4pKEZpcnN0VGltZS0+RGF5IDwgU2Vjb25kVGltZS0+RGF5KTsNCj4gPiAgICAg PiArICB9IGVsc2UgaWYgKEZpcnN0VGltZS0+SG91ciAhPSBTZWNvbmRUaW1lLT5Ib3VyKSB7DQo+ ID4gICAgID4gKyAgICByZXR1cm4gKEJPT0xFQU4pKEZpcnN0VGltZS0+SG91ciA8IFNlY29uZFRp bWUtPkhvdXIpOw0KPiA+ICAgICA+ICsgIH0gZWxzZSBpZiAoRmlyc3RUaW1lLT5NaW51dGUgIT0g U2Vjb25kVGltZS0+TWludXRlKSB7DQo+ID4gICAgID4gKyAgICByZXR1cm4gKEJPT0xFQU4pKEZp cnN0VGltZS0+TWludXRlIDwgU2Vjb25kVGltZS0+TWludXRlKTsNCj4gPiAgICAgPiArICB9DQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIHJldHVybiAoQk9PTEVBTikoRmlyc3RUaW1lLT5TZWNv bmQgPD0gU2Vjb25kVGltZS0+U2Vjb25kKTsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgRmluZCB0aGUgdmFyaWFibGUgaW4gdGhlIHNwZWNp ZmllZCB2YXJpYWJsZSBzdG9yZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtW2lu XSAgICAgICBWYXJpYWJsZU5hbWUgICAgICAgIE5hbWUgb2YgdGhlIHZhcmlhYmxlIHRvIGJlIGZv dW5kDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgICAgICBWZW5kb3JHdWlkICAgICAgICAgIFZl bmRvciBHVUlEIHRvIGJlIGZvdW5kLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gICAgICAgSWdu b3JlUnRDaGVjayAgICAgICBJZ25vcmUNCj4gPiBFRklfVkFSSUFCTEVfUlVOVElNRV9BQ0NFU1MN Cj4gPiAgICAgPiBhdHRyaWJ1dGUNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2hlY2sgYXQgcnVudGltZSB3aGVuIHNlYXJjaGluZyB2YXJpYWJsZS4N Cj4gPiAgICAgPiArICBAcGFyYW1baW4sIG91dF0gIFB0clRyYWNrICAgICAgICAgICAgVmFyaWFi bGUgVHJhY2sgUG9pbnRlciBzdHJ1Y3R1cmUgdGhhdA0KPiA+IGNvbnRhaW5zDQo+ID4gICAgID4g VmFyaWFibGUgSW5mb3JtYXRpb24uDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgICAgICBBdXRo Rm9ybWF0ICAgICAgICAgIFRSVUUgaW5kaWNhdGVzIGF1dGhlbnRpY2F0ZWQgdmFyaWFibGVzDQo+ ID4gYXJlDQo+ID4gICAgID4gdXNlZC4NCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRkFMU0UgaW5kaWNhdGVzIGF1dGhlbnRpY2F0ZWQgdmFyaWFibGVz IGFyZSBub3QNCj4gdXNlZC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHZhbCAgICAg ICAgICBFRklfU1VDQ0VTUyAgICAgICAgIFZhcmlhYmxlIGZvdW5kIHN1Y2Nlc3NmdWxseQ0KPiA+ ICAgICA+ICsgIEByZXR2YWwgICAgICAgICAgRUZJX05PVF9GT1VORCAgICAgICBWYXJpYWJsZSBu b3QgZm91bmQNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4gPiAgICAg PiArRmluZFZhcmlhYmxlRXggKA0KPiA+ICAgICA+ICsgIElOICAgICBDSEFSMTYgICAgICAgICAg ICAgICAgICAqVmFyaWFibGVOYW1lLA0KPiA+ICAgICA+ICsgIElOICAgICBFRklfR1VJRCAgICAg ICAgICAgICAgICAqVmVuZG9yR3VpZCwNCj4gPiAgICAgPiArICBJTiAgICAgQk9PTEVBTiAgICAg ICAgICAgICAgICAgSWdub3JlUnRDaGVjaywNCj4gPiAgICAgPiArICBJTiBPVVQgVkFSSUFCTEVf UE9JTlRFUl9UUkFDSyAgKlB0clRyYWNrLA0KPiA+ICAgICA+ICsgIElOICAgICBCT09MRUFOICAg ICAgICAgICAgICAgICBBdXRoRm9ybWF0DQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ ID4gICAgID4gKyAgVkFSSUFCTEVfSEVBREVSICAqSW5EZWxldGVkVmFyaWFibGU7DQo+ID4gICAg ID4gKyAgVk9JRCAgICAgICAgICAgICAqUG9pbnQ7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsg IFB0clRyYWNrLT5JbkRlbGV0ZWRUcmFuc2l0aW9uUHRyID0gTlVMTDsNCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBGaW5kIHRoZSB2YXJpYWJsZSBieSB3YWxr IHRocm91Z2ggSE9CLCB2b2xhdGlsZSBhbmQgbm9uLXZvbGF0aWxlDQo+ID4gdmFyaWFibGUNCj4g PiAgICAgPiBzdG9yZS4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIEluRGVsZXRlZFZh cmlhYmxlID0gTlVMTDsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgZm9yICggUHRyVHJhY2st PkN1cnJQdHIgPSBQdHJUcmFjay0+U3RhcnRQdHINCj4gPiAgICAgPiArICAgICAgICA7IElzVmFs aWRWYXJpYWJsZUhlYWRlciAoUHRyVHJhY2stPkN1cnJQdHIsIFB0clRyYWNrLT5FbmRQdHIsDQo+ ID4gQXV0aEZvcm1hdCkNCj4gPiAgICAgPiArICAgICAgICA7IFB0clRyYWNrLT5DdXJyUHRyID0g R2V0TmV4dFZhcmlhYmxlUHRyIChQdHJUcmFjay0+Q3VyclB0ciwNCj4gPiBBdXRoRm9ybWF0KQ0K PiA+ICAgICA+ICsgICAgICAgICkNCj4gPiAgICAgPiArICB7DQo+ID4gICAgID4gKyAgICBpZiAo KFB0clRyYWNrLT5DdXJyUHRyLT5TdGF0ZSA9PSBWQVJfQURERUQpIHx8DQo+ID4gICAgID4gKyAg ICAgICAgKFB0clRyYWNrLT5DdXJyUHRyLT5TdGF0ZSA9PSAoVkFSX0lOX0RFTEVURURfVFJBTlNJ VElPTiAmDQo+ID4gICAgID4gVkFSX0FEREVEKSkNCj4gPiAgICAgPiArICAgICAgICApDQo+ID4g ICAgID4gKyAgICB7DQo+ID4gICAgID4gKyAgICAgIGlmIChJZ25vcmVSdENoZWNrIHx8ICFBdFJ1 bnRpbWUgKCkgfHwgKChQdHJUcmFjay0+Q3VyclB0ci0+QXR0cmlidXRlcyAmDQo+ID4gICAgID4g RUZJX1ZBUklBQkxFX1JVTlRJTUVfQUNDRVNTKSAhPSAwKSkgew0KPiA+ICAgICA+ICsgICAgICAg IGlmIChWYXJpYWJsZU5hbWVbMF0gPT0gMCkgew0KPiA+ICAgICA+ICsgICAgICAgICAgaWYgKFB0 clRyYWNrLT5DdXJyUHRyLT5TdGF0ZSA9PSAoVkFSX0lOX0RFTEVURURfVFJBTlNJVElPTiAmDQo+ ID4gICAgID4gVkFSX0FEREVEKSkgew0KPiA+ICAgICA+ICsgICAgICAgICAgICBJbkRlbGV0ZWRW YXJpYWJsZSA9IFB0clRyYWNrLT5DdXJyUHRyOw0KPiA+ICAgICA+ICsgICAgICAgICAgfSBlbHNl IHsNCj4gPiAgICAgPiArICAgICAgICAgICAgUHRyVHJhY2stPkluRGVsZXRlZFRyYW5zaXRpb25Q dHIgPSBJbkRlbGV0ZWRWYXJpYWJsZTsNCj4gPiAgICAgPiArICAgICAgICAgICAgcmV0dXJuIEVG SV9TVUNDRVNTOw0KPiA+ICAgICA+ICsgICAgICAgICAgfQ0KPiA+ICAgICA+ICsgICAgICAgIH0g ZWxzZSB7DQo+ID4gICAgID4gKyAgICAgICAgICBpZiAoQ29tcGFyZUd1aWQgKFZlbmRvckd1aWQs IEdldFZlbmRvckd1aWRQdHIgKFB0clRyYWNrLT5DdXJyUHRyLA0KPiA+ICAgICA+IEF1dGhGb3Jt YXQpKSkgew0KPiA+ICAgICA+ICsgICAgICAgICAgICBQb2ludCA9IChWT0lEICopR2V0VmFyaWFi bGVOYW1lUHRyIChQdHJUcmFjay0+Q3VyclB0ciwNCj4gPiBBdXRoRm9ybWF0KTsNCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyAgICAgICAgICAgIEFTU0VSVCAoTmFtZVNpemVPZlZhcmlhYmxlIChQ dHJUcmFjay0+Q3VyclB0ciwgQXV0aEZvcm1hdCkgIT0gMCk7DQo+ID4gICAgID4gKyAgICAgICAg ICAgIGlmIChDb21wYXJlTWVtIChWYXJpYWJsZU5hbWUsIFBvaW50LCBOYW1lU2l6ZU9mVmFyaWFi bGUNCj4gPiAoUHRyVHJhY2stDQo+ID4gICAgID4gPkN1cnJQdHIsIEF1dGhGb3JtYXQpKSA9PSAw KSB7DQo+ID4gICAgID4gKyAgICAgICAgICAgICAgaWYgKFB0clRyYWNrLT5DdXJyUHRyLT5TdGF0 ZSA9PSAoVkFSX0lOX0RFTEVURURfVFJBTlNJVElPTiAmDQo+ID4gICAgID4gVkFSX0FEREVEKSkg ew0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgSW5EZWxldGVkVmFyaWFibGUgPSBQdHJUcmFj ay0+Q3VyclB0cjsNCj4gPiAgICAgPiArICAgICAgICAgICAgICB9IGVsc2Ugew0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgICAgUHRyVHJhY2stPkluRGVsZXRlZFRyYW5zaXRpb25QdHIgPSBJbkRl bGV0ZWRWYXJpYWJsZTsNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgIHJldHVybiBFRklfU1VD Q0VTUzsNCj4gPiAgICAgPiArICAgICAgICAgICAgICB9DQo+ID4gICAgID4gKyAgICAgICAgICAg IH0NCj4gPiAgICAgPiArICAgICAgICAgIH0NCj4gPiAgICAgPiArICAgICAgICB9DQo+ID4gICAg ID4gKyAgICAgIH0NCj4gPiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsgIFB0clRyYWNrLT5DdXJyUHRyID0gSW5EZWxldGVkVmFyaWFibGU7DQo+ ID4gICAgID4gKyAgcmV0dXJuIChQdHJUcmFjay0+Q3VyclB0ciAgPT0gTlVMTCkgPyBFRklfTk9U X0ZPVU5EIDogRUZJX1NVQ0NFU1M7DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKy8qKg0KPiA+ICAgICA+ICsgIFRoaXMgY29kZSBmaW5kcyB0aGUgbmV4dCBhdmFpbGFibGUg dmFyaWFibGUuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIENhdXRpb246IFRoaXMgZnVuY3Rp b24gbWF5IHJlY2VpdmUgdW50cnVzdGVkIGlucHV0Lg0KPiA+ICAgICA+ICsgIFRoaXMgZnVuY3Rp b24gbWF5IGJlIGludm9rZWQgaW4gU01NIG1vZGUuIFRoaXMgZnVuY3Rpb24gd2lsbCBkbyBiYXNp Yw0KPiA+ICAgICA+IHZhbGlkYXRpb24sIGJlZm9yZSBwYXJzZSB0aGUgZGF0YS4NCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgVmFyaWFibGVOYW1lICAgICAgUG9pbnRlciB0 byB2YXJpYWJsZSBuYW1lLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gIFZlbmRvckd1aWQgICAg ICAgIFZhcmlhYmxlIFZlbmRvciBHdWlkLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gIFZhcmlh YmxlU3RvcmVMaXN0IEEgbGlzdCBvZiB2YXJpYWJsZSBzdG9yZXMgdGhhdCBzaG91bGQgYmUNCj4g dXNlZA0KPiA+IHRvDQo+ID4gICAgID4gZ2V0IHRoZSBuZXh0IHZhcmlhYmxlLg0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBl bnRyaWVzIGlzIHRoZSBtYXggdmFsdWUgb2YNCj4gPiAgICAgPiBWQVJJQUJMRV9TVE9SRV9UWVBF Lg0KPiA+ICAgICA+ICsgIEBwYXJhbVtvdXRdIFZhcmlhYmxlUHRyICAgICAgIFBvaW50ZXIgdG8g dmFyaWFibGUgaGVhZGVyIGFkZHJlc3MuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgQXV0aEZv cm1hdCAgICAgICAgVFJVRSBpbmRpY2F0ZXMgYXV0aGVudGljYXRlZCB2YXJpYWJsZXMgYXJlDQo+ ID4gdXNlZC4NCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxT RSBpbmRpY2F0ZXMgYXV0aGVudGljYXRlZCB2YXJpYWJsZXMgYXJlIG5vdCB1c2VkLg0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgZnVu Y3Rpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9O T1RfRk9VTkQgICAgICAgICBUaGUgbmV4dCB2YXJpYWJsZSB3YXMgbm90IGZvdW5kLg0KPiA+ICAg ICA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIElmIFZhcmlhYmxlTmFtZSBpcyBu b3QgYW4gZW1wdHkNCj4gc3RyaW5nLA0KPiA+ICAgICA+IHdoaWxlIFZlbmRvckd1aWQgaXMgTlVM TC4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBUaGUgaW5wdXQg dmFsdWVzIG9mIFZhcmlhYmxlTmFtZQ0KPiBhbmQNCj4gPiAgICAgPiBWZW5kb3JHdWlkIGFyZSBu b3QgYSBuYW1lIGFuZA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEdVSUQgb2YgYW4gZXhpc3RpbmcgdmFyaWFibGUuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsq Ki8NCj4gPiAgICAgPiArRUZJX1NUQVRVUw0KPiA+ICAgICA+ICtFRklBUEkNCj4gPiAgICAgPiAr VmFyaWFibGVTZXJ2aWNlR2V0TmV4dFZhcmlhYmxlSW50ZXJuYWwgKA0KPiA+ICAgICA+ICsgIElO ICBDSEFSMTYgICAgICAgICAgICAgICAgICpWYXJpYWJsZU5hbWUsDQo+ID4gICAgID4gKyAgSU4g IEVGSV9HVUlEICAgICAgICAgICAgICAgKlZlbmRvckd1aWQsDQo+ID4gICAgID4gKyAgSU4gIFZB UklBQkxFX1NUT1JFX0hFQURFUiAgKipWYXJpYWJsZVN0b3JlTGlzdCwNCj4gPiAgICAgPiArICBP VVQgVkFSSUFCTEVfSEVBREVSICAgICAgICAqKlZhcmlhYmxlUHRyLA0KPiA+ICAgICA+ICsgIElO ICBCT09MRUFOICAgICAgICAgICAgICAgIEF1dGhGb3JtYXQNCj4gPiAgICAgPiArICApDQo+ID4g ICAgID4gK3sNCj4gPiAgICAgPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICBTdGF0dXM7DQo+ ID4gICAgID4gKyAgVkFSSUFCTEVfU1RPUkVfVFlQRSAgICAgU3RvcmVUeXBlOw0KPiA+ICAgICA+ ICsgIFZBUklBQkxFX1BPSU5URVJfVFJBQ0sgIFZhcmlhYmxlOw0KPiA+ICAgICA+ICsgIFZBUklB QkxFX1BPSU5URVJfVFJBQ0sgIFZhcmlhYmxlSW5Ib2I7DQo+ID4gICAgID4gKyAgVkFSSUFCTEVf UE9JTlRFUl9UUkFDSyAgVmFyaWFibGVQdHJUcmFjazsNCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgU3RhdHVzID0gRUZJX05PVF9GT1VORDsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgaWYg KFZhcmlhYmxlU3RvcmVMaXN0ID09IE5VTEwpIHsNCj4gPiAgICAgPiArICAgIHJldHVybiBFRklf SU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICBaZXJvTWVtICgmVmFyaWFibGUsIHNpemVvZiAoVmFyaWFibGUpKTsNCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyAgLy8gQ2hlY2sgaWYgdGhlIHZhcmlhYmxlIGV4aXN0cyBpbiB0aGUgZ2l2 ZW4gdmFyaWFibGUgc3RvcmUgbGlzdA0KPiA+ICAgICA+ICsgIGZvciAoU3RvcmVUeXBlID0gKFZB UklBQkxFX1NUT1JFX1RZUEUpMDsgU3RvcmVUeXBlIDwNCj4gPiAgICAgPiBWYXJpYWJsZVN0b3Jl VHlwZU1heDsgU3RvcmVUeXBlKyspIHsNCj4gPiAgICAgPiArICAgIGlmIChWYXJpYWJsZVN0b3Jl TGlzdFtTdG9yZVR5cGVdID09IE5VTEwpIHsNCj4gPiAgICAgPiArICAgICAgY29udGludWU7DQo+ ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgVmFyaWFibGUuU3Rh cnRQdHIgPSBHZXRTdGFydFBvaW50ZXIgKFZhcmlhYmxlU3RvcmVMaXN0W1N0b3JlVHlwZV0pOw0K PiA+ICAgICA+ICsgICAgVmFyaWFibGUuRW5kUHRyICAgPSBHZXRFbmRQb2ludGVyIChWYXJpYWJs ZVN0b3JlTGlzdFtTdG9yZVR5cGVdKTsNCj4gPiAgICAgPiArICAgIFZhcmlhYmxlLlZvbGF0aWxl ID0gKEJPT0xFQU4pKFN0b3JlVHlwZSA9PSBWYXJpYWJsZVN0b3JlVHlwZVZvbGF0aWxlKTsNCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyAgICBTdGF0dXMgPSBGaW5kVmFyaWFibGVFeCAoVmFyaWFi bGVOYW1lLCBWZW5kb3JHdWlkLCBGQUxTRSwgJlZhcmlhYmxlLA0KPiA+ICAgICA+IEF1dGhGb3Jt YXQpOw0KPiA+ICAgICA+ICsgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAg PiArICAgICAgYnJlYWs7DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArICBpZiAoKFZhcmlhYmxlLkN1cnJQdHIgPT0gTlVMTCkgfHwgRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgLy8g Rm9yIFZhcmlhYmxlTmFtZSBpcyBhbiBlbXB0eSBzdHJpbmcsIEZpbmRWYXJpYWJsZUV4KCkgd2ls bCB0cnkgdG8gZmluZA0KPiA+IGFuZA0KPiA+ICAgICA+IHJldHVybg0KPiA+ICAgICA+ICsgICAg Ly8gdGhlIGZpcnN0IHF1YWxpZmllZCB2YXJpYWJsZSwgYW5kIGlmIEZpbmRWYXJpYWJsZUV4KCkg cmV0dXJucyBlcnJvcg0KPiA+ICAgICA+IChFRklfTk9UX0ZPVU5EKQ0KPiA+ICAgICA+ICsgICAg Ly8gYXMgbm8gYW55IHZhcmlhYmxlIGlzIGZvdW5kLCBzdGlsbCBnbyB0byByZXR1cm4gdGhlIGVy cm9yDQo+ID4gKEVGSV9OT1RfRk9VTkQpLg0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiAr ICAgIGlmIChWYXJpYWJsZU5hbWVbMF0gIT0gMCkgew0KPiA+ICAgICA+ICsgICAgICAvLw0KPiA+ ICAgICA+ICsgICAgICAvLyBGb3IgVmFyaWFibGVOYW1lIGlzIG5vdCBhbiBlbXB0eSBzdHJpbmcs IGFuZCBGaW5kVmFyaWFibGVFeCgpDQo+IHJldHVybnMNCj4gPiAgICAgPiBlcnJvciBhcw0KPiA+ ICAgICA+ICsgICAgICAvLyBWYXJpYWJsZU5hbWUgYW5kIFZlbmRvckd1aWQgYXJlIG5vdCBhIG5h bWUgYW5kIEdVSUQgb2YgYW4NCj4gPiBleGlzdGluZw0KPiA+ICAgICA+IHZhcmlhYmxlLA0KPiA+ ICAgICA+ICsgICAgICAvLyB0aGVyZSBpcyBubyB3YXkgdG8gZ2V0IG5leHQgdmFyaWFibGUsIGZv bGxvdyBzcGVjIHRvIHJldHVybg0KPiA+ICAgICA+IEVGSV9JTlZBTElEX1BBUkFNRVRFUi4NCj4g PiAgICAgPiArICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgU3RhdHVzID0gRUZJX0lOVkFMSURf UEFSQU1FVEVSOw0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAg IGdvdG8gRG9uZTsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIGlm IChWYXJpYWJsZU5hbWVbMF0gIT0gMCkgew0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiAr ICAgIC8vIElmIHZhcmlhYmxlIG5hbWUgaXMgbm90IGVtcHR5LCBnZXQgbmV4dCB2YXJpYWJsZS4N Cj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICBWYXJpYWJsZS5DdXJyUHRyID0gR2V0 TmV4dFZhcmlhYmxlUHRyIChWYXJpYWJsZS5DdXJyUHRyLCBBdXRoRm9ybWF0KTsNCj4gPiAgICAg PiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIHdoaWxlIChUUlVFKSB7DQo+ID4gICAg ID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgLy8gU3dpdGNoIHRvIHRoZSBuZXh0IHZhcmlhYmxl IHN0b3JlIGlmIG5lZWRlZA0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIHdoaWxl ICghSXNWYWxpZFZhcmlhYmxlSGVhZGVyIChWYXJpYWJsZS5DdXJyUHRyLCBWYXJpYWJsZS5FbmRQ dHIsDQo+ID4gICAgID4gQXV0aEZvcm1hdCkpIHsNCj4gPiAgICAgPiArICAgICAgLy8NCj4gPiAg ICAgPiArICAgICAgLy8gRmluZCBjdXJyZW50IHN0b3JhZ2UgaW5kZXgNCj4gPiAgICAgPiArICAg ICAgLy8NCj4gPiAgICAgPiArICAgICAgZm9yIChTdG9yZVR5cGUgPSAoVkFSSUFCTEVfU1RPUkVf VFlQRSkwOyBTdG9yZVR5cGUgPA0KPiA+ICAgICA+IFZhcmlhYmxlU3RvcmVUeXBlTWF4OyBTdG9y ZVR5cGUrKykgew0KPiA+ICAgICA+ICsgICAgICAgIGlmICgoVmFyaWFibGVTdG9yZUxpc3RbU3Rv cmVUeXBlXSAhPSBOVUxMKSAmJiAoVmFyaWFibGUuU3RhcnRQdHIgPT0NCj4gPiAgICAgPiBHZXRT dGFydFBvaW50ZXIgKFZhcmlhYmxlU3RvcmVMaXN0W1N0b3JlVHlwZV0pKSkgew0KPiA+ICAgICA+ ICsgICAgICAgICAgYnJlYWs7DQo+ID4gICAgID4gKyAgICAgICAgfQ0KPiA+ICAgICA+ICsgICAg ICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgICBBU1NFUlQgKFN0b3JlVHlwZSA8IFZh cmlhYmxlU3RvcmVUeXBlTWF4KTsNCj4gPiAgICAgPiArICAgICAgLy8NCj4gPiAgICAgPiArICAg ICAgLy8gU3dpdGNoIHRvIG5leHQgc3RvcmFnZQ0KPiA+ICAgICA+ICsgICAgICAvLw0KPiA+ICAg ICA+ICsgICAgICBmb3IgKFN0b3JlVHlwZSsrOyBTdG9yZVR5cGUgPCBWYXJpYWJsZVN0b3JlVHlw ZU1heDsgU3RvcmVUeXBlKyspIHsNCj4gPiAgICAgPiArICAgICAgICBpZiAoVmFyaWFibGVTdG9y ZUxpc3RbU3RvcmVUeXBlXSAhPSBOVUxMKSB7DQo+ID4gICAgID4gKyAgICAgICAgICBicmVhazsN Cj4gPiAgICAgPiArICAgICAgICB9DQo+ID4gICAgID4gKyAgICAgIH0NCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgIC8vIENhcHR1cmUgdGhlIGNhc2Ug dGhhdA0KPiA+ICAgICA+ICsgICAgICAvLyAxLiBjdXJyZW50IHN0b3JhZ2UgaXMgdGhlIGxhc3Qg b25lLCBvcg0KPiA+ICAgICA+ICsgICAgICAvLyAyLiBubyBmdXJ0aGVyIHN0b3JhZ2UNCj4gPiAg ICAgPiArICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgaWYgKFN0b3JlVHlwZSA9PSBWYXJpYWJs ZVN0b3JlVHlwZU1heCkgew0KPiA+ICAgICA+ICsgICAgICAgIFN0YXR1cyA9IEVGSV9OT1RfRk9V TkQ7DQo+ID4gICAgID4gKyAgICAgICAgZ290byBEb25lOw0KPiA+ICAgICA+ICsgICAgICB9DQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgICBWYXJpYWJsZS5TdGFydFB0ciA9IEdldFN0YXJ0 UG9pbnRlciAoVmFyaWFibGVTdG9yZUxpc3RbU3RvcmVUeXBlXSk7DQo+ID4gICAgID4gKyAgICAg IFZhcmlhYmxlLkVuZFB0ciAgID0gR2V0RW5kUG9pbnRlciAoVmFyaWFibGVTdG9yZUxpc3RbU3Rv cmVUeXBlXSk7DQo+ID4gICAgID4gKyAgICAgIFZhcmlhYmxlLkN1cnJQdHIgID0gVmFyaWFibGUu U3RhcnRQdHI7DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAg Ly8NCj4gPiAgICAgPiArICAgIC8vIFZhcmlhYmxlIGlzIGZvdW5kDQo+ID4gICAgID4gKyAgICAv Lw0KPiA+ICAgICA+ICsgICAgaWYgKChWYXJpYWJsZS5DdXJyUHRyLT5TdGF0ZSA9PSBWQVJfQURE RUQpIHx8IChWYXJpYWJsZS5DdXJyUHRyLT5TdGF0ZQ0KPiA+ID09DQo+ID4gICAgID4gKFZBUl9J Tl9ERUxFVEVEX1RSQU5TSVRJT04gJiBWQVJfQURERUQpKSkgew0KPiA+ICAgICA+ICsgICAgICBp ZiAoIUF0UnVudGltZSAoKSB8fCAoKFZhcmlhYmxlLkN1cnJQdHItPkF0dHJpYnV0ZXMgJg0KPiA+ ICAgICA+IEVGSV9WQVJJQUJMRV9SVU5USU1FX0FDQ0VTUykgIT0gMCkpIHsNCj4gPiAgICAgPiAr ICAgICAgICBpZiAoVmFyaWFibGUuQ3VyclB0ci0+U3RhdGUgPT0gKFZBUl9JTl9ERUxFVEVEX1RS QU5TSVRJT04gJg0KPiA+ICAgICA+IFZBUl9BRERFRCkpIHsNCj4gPiAgICAgPiArICAgICAgICAg IC8vDQo+ID4gICAgID4gKyAgICAgICAgICAvLyBJZiBpdCBpcyBhIElOX0RFTEVURURfVFJBTlNJ VElPTiB2YXJpYWJsZSwNCj4gPiAgICAgPiArICAgICAgICAgIC8vIGFuZCB0aGVyZSBpcyBhbHNv IGEgc2FtZSBBRERFRCBvbmUgYXQgdGhlIHNhbWUgdGltZSwNCj4gPiAgICAgPiArICAgICAgICAg IC8vIGRvbid0IHJldHVybiBpdC4NCj4gPiAgICAgPiArICAgICAgICAgIC8vDQo+ID4gICAgID4g KyAgICAgICAgICBWYXJpYWJsZVB0clRyYWNrLlN0YXJ0UHRyID0gVmFyaWFibGUuU3RhcnRQdHI7 DQo+ID4gICAgID4gKyAgICAgICAgICBWYXJpYWJsZVB0clRyYWNrLkVuZFB0ciAgID0gVmFyaWFi bGUuRW5kUHRyOw0KPiA+ICAgICA+ICsgICAgICAgICAgU3RhdHVzICAgICAgICAgICAgICAgICAg ICA9IEZpbmRWYXJpYWJsZUV4ICgNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEdldFZhcmlhYmxlTmFtZVB0ciAoVmFyaWFibGUuQ3VyclB0ciwNCj4g QXV0aEZvcm1hdCksDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBHZXRWZW5kb3JHdWlkUHRyIChWYXJpYWJsZS5DdXJyUHRyLCBBdXRoRm9ybWF0KSwN Cj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNF LA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlZh cmlhYmxlUHRyVHJhY2ssDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBBdXRoRm9ybWF0DQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOw0KPiA+ICAgICA+ICsgICAgICAgICAgaWYgKCFFRklfRVJST1Ig KFN0YXR1cykgJiYgKFZhcmlhYmxlUHRyVHJhY2suQ3VyclB0ci0+U3RhdGUgPT0NCj4gPiAgICAg PiBWQVJfQURERUQpKSB7DQo+ID4gICAgID4gKyAgICAgICAgICAgIFZhcmlhYmxlLkN1cnJQdHIg PSBHZXROZXh0VmFyaWFibGVQdHIgKFZhcmlhYmxlLkN1cnJQdHIsDQo+ID4gQXV0aEZvcm1hdCk7 DQo+ID4gICAgID4gKyAgICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ICAgICA+ICsgICAgICAgICAg fQ0KPiA+ICAgICA+ICsgICAgICAgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICAgICAg Ly8NCj4gPiAgICAgPiArICAgICAgICAvLyBEb24ndCByZXR1cm4gTlYgdmFyaWFibGUgd2hlbiBI T0Igb3ZlcnJpZGVzIGl0DQo+ID4gICAgID4gKyAgICAgICAgLy8NCj4gPiAgICAgPiArICAgICAg ICBpZiAoKFZhcmlhYmxlU3RvcmVMaXN0W1ZhcmlhYmxlU3RvcmVUeXBlSG9iXSAhPSBOVUxMKSAm Jg0KPiA+ICAgICA+IChWYXJpYWJsZVN0b3JlTGlzdFtWYXJpYWJsZVN0b3JlVHlwZU52XSAhPSBO VUxMKSAmJg0KPiA+ICAgICA+ICsgICAgICAgICAgICAoVmFyaWFibGUuU3RhcnRQdHIgPT0gR2V0 U3RhcnRQb2ludGVyDQo+ID4gICAgID4gKFZhcmlhYmxlU3RvcmVMaXN0W1ZhcmlhYmxlU3RvcmVU eXBlTnZdKSkNCj4gPiAgICAgPiArICAgICAgICAgICAgKQ0KPiA+ICAgICA+ICsgICAgICAgIHsN Cj4gPiAgICAgPiArICAgICAgICAgIFZhcmlhYmxlSW5Ib2IuU3RhcnRQdHIgPSBHZXRTdGFydFBv aW50ZXINCj4gPiAgICAgPiAoVmFyaWFibGVTdG9yZUxpc3RbVmFyaWFibGVTdG9yZVR5cGVIb2Jd KTsNCj4gPiAgICAgPiArICAgICAgICAgIFZhcmlhYmxlSW5Ib2IuRW5kUHRyICAgPSBHZXRFbmRQ b2ludGVyDQo+ID4gICAgID4gKFZhcmlhYmxlU3RvcmVMaXN0W1ZhcmlhYmxlU3RvcmVUeXBlSG9i XSk7DQo+ID4gICAgID4gKyAgICAgICAgICBTdGF0dXMgICAgICAgICAgICAgICAgID0gRmluZFZh cmlhYmxlRXggKA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgR2V0VmFyaWFibGVOYW1lUHRyIChWYXJpYWJsZS5DdXJyUHRyLCBBdXRoRm9ybWF0KSwNCj4g PiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFZlbmRvckd1 aWRQdHIgKFZhcmlhYmxlLkN1cnJQdHIsIEF1dGhGb3JtYXQpLA0KPiA+ICAgICA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsDQo+ID4gICAgID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmVmFyaWFibGVJbkhvYiwNCj4gPiAgICAgPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhGb3JtYXQNCj4gPiAgICAg PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gICAgID4gKyAg ICAgICAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICAgICA+ICsgICAgICAgICAg ICBWYXJpYWJsZS5DdXJyUHRyID0gR2V0TmV4dFZhcmlhYmxlUHRyIChWYXJpYWJsZS5DdXJyUHRy LA0KPiA+IEF1dGhGb3JtYXQpOw0KPiA+ICAgICA+ICsgICAgICAgICAgICBjb250aW51ZTsNCj4g PiAgICAgPiArICAgICAgICAgIH0NCj4gPiAgICAgPiArICAgICAgICB9DQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgICAgICAgICpWYXJpYWJsZVB0ciA9IFZhcmlhYmxlLkN1cnJQdHI7DQo+ID4g ICAgID4gKyAgICAgICAgU3RhdHVzICAgICAgID0gRUZJX1NVQ0NFU1M7DQo+ID4gICAgID4gKyAg ICAgICAgZ290byBEb25lOw0KPiA+ICAgICA+ICsgICAgICB9DQo+ID4gICAgID4gKyAgICB9DQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgVmFyaWFibGUuQ3VyclB0ciA9IEdldE5leHRWYXJp YWJsZVB0ciAoVmFyaWFibGUuQ3VyclB0ciwgQXV0aEZvcm1hdCk7DQo+ID4gICAgID4gKyAgfQ0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArRG9uZToNCj4gPiAgICAgPiArICByZXR1cm4gU3RhdHVz Ow0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiAr ICBSb3V0aW5lIHVzZWQgdG8gdHJhY2sgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24gYWJvdXQgdmFy aWFibGUgdXNhZ2UuDQo+ID4gICAgID4gKyAgVGhlIGRhdGEgaXMgc3RvcmVkIGluIHRoZSBFRkkg c3lzdGVtIHRhYmxlIHNvIGl0IGNhbiBiZSBhY2Nlc3NlZCBsYXRlci4NCj4gPiAgICAgPiArICBW YXJpYWJsZUluZm8uZWZpIGNhbiBkdW1wIG91dCB0aGUgdGFibGUuIE9ubHkgQm9vdCBTZXJ2aWNl cyB2YXJpYWJsZQ0KPiA+ICAgICA+ICsgIGFjY2Vzc2VzIGFyZSB0cmFja2VkIGJ5IHRoaXMgY29k ZS4gVGhlIFBjZFZhcmlhYmxlQ29sbGVjdFN0YXRpc3RpY3MNCj4gPiAgICAgPiArICBidWlsZCBm bGFnIGNvbnRyb2xzIGlmIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLg0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICBBIHJlYWQgdGhhdCBoaXRzIGluIHRoZSBjYWNoZSB3aWxsIGhhdmUgUmVhZCBh bmQgQ2FjaGUgdHJ1ZSBmb3INCj4gPiAgICAgPiArICB0aGUgdHJhbnNhY3Rpb24uIERhdGEgaXMg YWxsb2NhdGVkIGJ5IHRoaXMgcm91dGluZSwgYnV0IG5ldmVyDQo+ID4gICAgID4gKyAgZnJlZWQu DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBWYXJpYWJsZU5hbWUg ICBOYW1lIG9mIHRoZSBWYXJpYWJsZSB0byB0cmFjay4NCj4gPiAgICAgPiArICBAcGFyYW1baW5d ICAgICAgVmVuZG9yR3VpZCAgICAgR3VpZCBvZiB0aGUgVmFyaWFibGUgdG8gdHJhY2suDQo+ID4g ICAgID4gKyAgQHBhcmFtW2luXSAgICAgIFZvbGF0aWxlICAgICAgIFRSVUUgaWYgdm9sYXRpbGUg RkFMU0UgaWYgbm9uLXZvbGF0aWxlLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBSZWFk ICAgICAgICAgICBUUlVFIGlmIEdldFZhcmlhYmxlKCkgd2FzIGNhbGxlZC4NCj4gPiAgICAgPiAr ICBAcGFyYW1baW5dICAgICAgV3JpdGUgICAgICAgICAgVFJVRSBpZiBTZXRWYXJpYWJsZSgpIHdh cyBjYWxsZWQuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgICAgIERlbGV0ZSAgICAgICAgIFRS VUUgaWYgZGVsZXRlZCB2aWEgU2V0VmFyaWFibGUoKS4NCj4gPiAgICAgPiArICBAcGFyYW1baW5d ICAgICAgQ2FjaGUgICAgICAgICAgVFJVRSBmb3IgYSBjYWNoZSBoaXQuDQo+ID4gICAgID4gKyAg QHBhcmFtW2luLG91dF0gIFZhcmlhYmxlSW5mbyAgIFBvaW50ZXIgdG8gYSBwb2ludGVyIG9mDQo+ ID4gVkFSSUFCTEVfSU5GT19FTlRSWQ0KPiA+ICAgICA+IHN0cnVjdHVyZXMuDQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArVk9JRA0KPiA+ICAgICA+ICtVcGRhdGVWYXJp YWJsZUluZm8gKA0KPiA+ICAgICA+ICsgIElOICBDSEFSMTYgICAgICAgICAgICAgICAgICAqVmFy aWFibGVOYW1lLA0KPiA+ICAgICA+ICsgIElOICBFRklfR1VJRCAgICAgICAgICAgICAgICAqVmVu ZG9yR3VpZCwNCj4gPiAgICAgPiArICBJTiAgQk9PTEVBTiAgICAgICAgICAgICAgICAgVm9sYXRp bGUsDQo+ID4gICAgID4gKyAgSU4gIEJPT0xFQU4gICAgICAgICAgICAgICAgIFJlYWQsDQo+ID4g ICAgID4gKyAgSU4gIEJPT0xFQU4gICAgICAgICAgICAgICAgIFdyaXRlLA0KPiA+ICAgICA+ICsg IElOICBCT09MRUFOICAgICAgICAgICAgICAgICBEZWxldGUsDQo+ID4gICAgID4gKyAgSU4gIEJP T0xFQU4gICAgICAgICAgICAgICAgIENhY2hlLA0KPiA+ICAgICA+ICsgIElOIE9VVCBWQVJJQUJM RV9JTkZPX0VOVFJZICAqKlZhcmlhYmxlSW5mbw0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiAr ew0KPiA+ICAgICA+ICsgIFZBUklBQkxFX0lORk9fRU5UUlkgICpFbnRyeTsNCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyAgaWYgKEZlYXR1cmVQY2RHZXQgKFBjZFZhcmlhYmxlQ29sbGVjdFN0YXRp c3RpY3MpKSB7DQo+ID4gICAgID4gKyAgICBpZiAoKFZhcmlhYmxlTmFtZSA9PSBOVUxMKSB8fCAo VmVuZG9yR3VpZCA9PSBOVUxMKSB8fCAoVmFyaWFibGVJbmZvDQo+ID09DQo+ID4gICAgID4gTlVM TCkpIHsNCj4gPiAgICAgPiArICAgICAgcmV0dXJuOw0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArICAgIGlmIChBdFJ1bnRpbWUgKCkpIHsNCj4gPiAgICAgPiArICAg ICAgLy8gRG9uJ3QgY29sbGVjdCBzdGF0aXN0aWNzIGF0IHJ1bnRpbWUuDQo+ID4gICAgID4gKyAg ICAgIHJldHVybjsNCj4gPiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg ICBpZiAoKlZhcmlhYmxlSW5mbyA9PSBOVUxMKSB7DQo+ID4gICAgID4gKyAgICAgIC8vDQo+ID4g ICAgID4gKyAgICAgIC8vIE9uIHRoZSBmaXJzdCBjYWxsIGFsbG9jYXRlIGEgZW50cnkgYW5kIHBs YWNlIGEgcG9pbnRlciB0byBpdCBpbg0KPiA+ICAgICA+ICsgICAgICAvLyB0aGUgRUZJIFN5c3Rl bSBUYWJsZS4NCj4gPiAgICAgPiArICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgKlZhcmlhYmxl SW5mbyA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAoVkFSSUFCTEVfSU5GT19FTlRSWSkpOw0K PiA+ICAgICA+ICsgICAgICBBU1NFUlQgKCpWYXJpYWJsZUluZm8gIT0gTlVMTCk7DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgICAgICBDb3B5R3VpZCAoJigqVmFyaWFibGVJbmZvKS0+VmVuZG9y R3VpZCwgVmVuZG9yR3VpZCk7DQo+ID4gICAgID4gKyAgICAgICgqVmFyaWFibGVJbmZvKS0+TmFt ZSA9IEFsbG9jYXRlWmVyb1Bvb2wgKFN0clNpemUgKFZhcmlhYmxlTmFtZSkpOw0KPiA+ICAgICA+ ICsgICAgICBBU1NFUlQgKCgqVmFyaWFibGVJbmZvKS0+TmFtZSAhPSBOVUxMKTsNCj4gPiAgICAg PiArICAgICAgU3RyQ3B5UyAoKCpWYXJpYWJsZUluZm8pLT5OYW1lLCBTdHJTaXplIChWYXJpYWJs ZU5hbWUpL3NpemVvZg0KPiA+IChDSEFSMTYpLA0KPiA+ICAgICA+IFZhcmlhYmxlTmFtZSk7DQo+ ID4gICAgID4gKyAgICAgICgqVmFyaWFibGVJbmZvKS0+Vm9sYXRpbGUgPSBWb2xhdGlsZTsNCj4g PiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICBmb3IgKEVudHJ5ID0g KCpWYXJpYWJsZUluZm8pOyBFbnRyeSAhPSBOVUxMOyBFbnRyeSA9IEVudHJ5LT5OZXh0KSB7DQo+ ID4gICAgID4gKyAgICAgIGlmIChDb21wYXJlR3VpZCAoVmVuZG9yR3VpZCwgJkVudHJ5LT5WZW5k b3JHdWlkKSkgew0KPiA+ICAgICA+ICsgICAgICAgIGlmIChTdHJDbXAgKFZhcmlhYmxlTmFtZSwg RW50cnktPk5hbWUpID09IDApIHsNCj4gPiAgICAgPiArICAgICAgICAgIGlmIChSZWFkKSB7DQo+ ID4gICAgID4gKyAgICAgICAgICAgIEVudHJ5LT5SZWFkQ291bnQrKzsNCj4gPiAgICAgPiArICAg ICAgICAgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICAgICAgICBpZiAoV3JpdGUpIHsN Cj4gPiAgICAgPiArICAgICAgICAgICAgRW50cnktPldyaXRlQ291bnQrKzsNCj4gPiAgICAgPiAr ICAgICAgICAgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICAgICAgICBpZiAoRGVsZXRl KSB7DQo+ID4gICAgID4gKyAgICAgICAgICAgIEVudHJ5LT5EZWxldGVDb3VudCsrOw0KPiA+ICAg ICA+ICsgICAgICAgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgICAgICAgIGlmIChD YWNoZSkgew0KPiA+ICAgICA+ICsgICAgICAgICAgICBFbnRyeS0+Q2FjaGVDb3VudCsrOw0KPiA+ ICAgICA+ICsgICAgICAgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgICAgICAgIHJl dHVybjsNCj4gPiAgICAgPiArICAgICAgICB9DQo+ID4gICAgID4gKyAgICAgIH0NCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyAgICAgIGlmIChFbnRyeS0+TmV4dCA9PSBOVUxMKSB7DQo+ID4gICAg ID4gKyAgICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgICAvLyBJZiB0aGUgZW50cnkgaXMgbm90 IGluIHRoZSB0YWJsZSBhZGQgaXQuDQo+ID4gICAgID4gKyAgICAgICAgLy8gTmV4dCBpdGVyYXRp b24gb2YgdGhlIGxvb3Agd2lsbCBmaWxsIGluIHRoZSBkYXRhLg0KPiA+ICAgICA+ICsgICAgICAg IC8vDQo+ID4gICAgID4gKyAgICAgICAgRW50cnktPk5leHQgPSBBbGxvY2F0ZVplcm9Qb29sIChz aXplb2YgKFZBUklBQkxFX0lORk9fRU5UUlkpKTsNCj4gPiAgICAgPiArICAgICAgICBBU1NFUlQg KEVudHJ5LT5OZXh0ICE9IE5VTEwpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgICAgICBD b3B5R3VpZCAoJkVudHJ5LT5OZXh0LT5WZW5kb3JHdWlkLCBWZW5kb3JHdWlkKTsNCj4gPiAgICAg PiArICAgICAgICBFbnRyeS0+TmV4dC0+TmFtZSA9IEFsbG9jYXRlWmVyb1Bvb2wgKFN0clNpemUg KFZhcmlhYmxlTmFtZSkpOw0KPiA+ICAgICA+ICsgICAgICAgIEFTU0VSVCAoRW50cnktPk5leHQt Pk5hbWUgIT0gTlVMTCk7DQo+ID4gICAgID4gKyAgICAgICAgU3RyQ3B5UyAoRW50cnktPk5leHQt Pk5hbWUsIFN0clNpemUgKFZhcmlhYmxlTmFtZSkvc2l6ZW9mDQo+IChDSEFSMTYpLA0KPiA+ICAg ICA+IFZhcmlhYmxlTmFtZSk7DQo+ID4gICAgID4gKyAgICAgICAgRW50cnktPk5leHQtPlZvbGF0 aWxlID0gVm9sYXRpbGU7DQo+ID4gICAgID4gKyAgICAgIH0NCj4gPiAgICAgPiArICAgIH0NCj4g PiAgICAgPiArICB9DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBSZXRyaWV2ZSBkZXRhaWxzIGFib3V0IGEgdmFyaWFi bGUgYW5kIHJldHVybiB0aGVtIGluIFZhcmlhYmxlSW5mby0NCj4gPkhlYWRlci4NCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyAgSWYgVmFyaWFibGVJbmZvLT5CdWZmZXIgaXMgZ2l2ZW4sIHRoaXMg ZnVuY3Rpb24gd2lsbCBjYWxjdWxhdGUgaXRzIG9mZnNldA0KPiA+ICAgICA+ICsgIHJlbGF0aXZl IHRvIGdpdmVuIHZhcmlhYmxlIHN0b3JhZ2UgdmlhIFZhcmlhYmxlU3RvcmU7IE90aGVyd2lzZSwg aXQgd2lsbCB0cnkNCj4gPiAgICAgPiArICBvdGhlciBpbnRlcm5hbCB2YXJpYWJsZSBzdG9yYWdl cyBvciBjYWNoZWQgY29waWVzLiBJdCdzIGFzc3VtZWQgdGhhdCwgZm9yDQo+IGFsbA0KPiA+ICAg ICA+ICsgIGNvcGllcyBvZiBOViB2YXJpYWJsZSBzdG9yYWdlLCBhbGwgdmFyaWFibGVzIGFyZSBz dG9yZWQgaW4gdGhlIHNhbWUNCj4gcmVsYXRpdmUNCj4gPiAgICAgPiArICBwb3NpdGlvbi4gSWYg VmFyaWFibGVJbmZvLT5CdWZmZXIgaXMgZm91bmQgaW4gdGhlIHJhbmdlIG9mIGFueSBzdG9yYWdl DQo+ID4gY29waWVzLA0KPiA+ICAgICA+ICsgIGl0cyBvZmZzZXQgcmVsYXRpdmUgdG8gdGhhdCBz dG9yYWdlIHNob3VsZCBiZSB0aGUgc2FtZSBpbiBvdGhlciBjb3BpZXMuDQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIElmIFZhcmlhYmxlSW5mby0+T2Zmc2V0IGlzIGdpdmVuIChub24temVybykg YnV0IG5vdCBWYXJpYWJsZUluZm8tPkJ1ZmZlciwNCj4gPiAgICAgPiArICB0aGlzIGZ1bmN0aW9u IHdpbGwgcmV0dXJuIHRoZSB2YXJpYWJsZSBtZW1vcnkgYWRkcmVzcyBpbnNpZGUNCj4gVmFyaWFi bGVTdG9yZSwNCj4gPiAgICAgPiArICBpZiBnaXZlbiwgdmlhIFZhcmlhYmxlSW5mby0+QWRkcmVz czsgT3RoZXJ3aXNlLCB0aGUgYWRkcmVzcyBvZiBvdGhlcg0KPiA+IHN0b3JhZ2UNCj4gPiAgICAg PiArICBjb3BpZXMgd2lsbCBiZSByZXR1cm5lZCwgaWYgYW55Lg0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICBGb3IgYSBuZXcgdmFyaWFibGUgd2hvc2Ugb2Zmc2V0IGhhcyBub3QgYmVlbiBkZXRl cm1pbmVkLCBhIHZhbHVlIG9mIC0xDQo+IGFzDQo+ID4gICAgID4gKyAgVmFyaWFibGVJbmZvLT5P ZmZzZXQgc2hvdWxkIGJlIHBhc3NlZCB0byBza2lwIHRoZSBvZmZzZXQgY2FsY3VsYXRpb24uDQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbixvdXRdIFZhcmlhYmxlSW5mbyAgICAg ICAgICAgICBQb2ludGVyIHRvIHZhcmlhYmxlIGluZm9ybWF0aW9uLg0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVmFyaWFibGVJbmZvIGlz IE5VTEwgb3IgYm90aA0KPiA+IFZhcmlhYmxlSW5mby0NCj4gPiAgICAgPiA+QWRkcmVzcw0KPiA+ ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgVmFyaWFibGVJbmZv LT5PZmZzZXQgYXJlIE5VTEwgKDApLg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VO RCAgICAgICAgICBJZiBnaXZlbiBBZGRyZXNzIG9yIE9mZnNldCBpcyBvdXQgb2YgcmFuZ2UNCj4g PiBvZg0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnkgZ2l2 ZW4gb3IgaW50ZXJuYWwgc3RvcmFnZSBjb3BpZXMuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICAgIFZhcmlhYmxlIGRldGFpbHMgYXJlIHJldHJpZXZlZCBzdWNjZXNz ZnVsbHkuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX1NUQVRV Uw0KPiA+ICAgICA+ICtFRklBUEkNCj4gPiAgICAgPiArR2V0VmFyaWFibGVJbmZvICgNCj4gPiAg ICAgPiArICBJTiBPVVQgIFBST1RFQ1RFRF9WQVJJQUJMRV9JTkZPICAqVmFyaWFibGVJbmZvDQo+ ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgVkFSSUFCTEVfU1RPUkVf SEVBREVSICAgICAgICAgICpTdG9yZXNbMl07DQo+ID4gICAgID4gKyAgVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgICAgIEluZGV4Ow0KPiA+ICAgICA+ICsgIFZBUklBQkxFX0hFQURFUiAgICAg ICAgICAgICAgICAqVmFyaWFibGVQdHI7DQo+ID4gICAgID4gKyAgVkFSSUFCTEVfSEVBREVSICAg ICAgICAgICAgICAgICpWYXJpYWJsZUJ1ZmZlcjsNCj4gPiAgICAgPiArICBBVVRIRU5USUNBVEVE X1ZBUklBQkxFX0hFQURFUiAgKkF1dGhWYXJpYWJsZVB0cjsNCj4gPiAgICAgPiArICBCT09MRUFO ICAgICAgICAgICAgICAgICAgICAgICAgQXV0aEZsYWc7DQo+ID4gICAgID4gKyAgVUlOVE4gICAg ICAgICAgICAgICAgICAgICAgICAgIE5hbWVTaXplOw0KPiA+ICAgICA+ICsgIFVJTlROICAgICAg ICAgICAgICAgICAgICAgICAgICBEYXRhU2l6ZTsNCj4gPiAgICAgPiArICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgICAgVmFyaWFibGVTaXplOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr ICBpZiAoKFZhcmlhYmxlSW5mbyA9PSBOVUxMKSB8fCAoICAoVmFyaWFibGVJbmZvLT5CdWZmZXIg PT0gTlVMTCkNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAo VmFyaWFibGVJbmZvLT5TdG9yZUluZGV4ID09IFZBUl9JTkRFWF9JTlZBTElEKSkpDQo+ID4gICAg ID4gKyAgew0KPiA+ICAgICA+ICsgICAgQVNTRVJUIChWYXJpYWJsZUluZm8gIT0gTlVMTCk7DQo+ ID4gICAgID4gKyAgICBBU1NFUlQgKFZhcmlhYmxlSW5mby0+QnVmZmVyICE9IE5VTEwgfHwgVmFy aWFibGVJbmZvLT5TdG9yZUluZGV4ICE9DQo+ID4gICAgID4gVkFSX0lOREVYX0lOVkFMSUQpOw0K PiA+ICAgICA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiAgICAgPiAr ICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFN0b3Jlc1swXSA9IG1OdlZhcmlhYmxlQ2Fj aGU7DQo+ID4gICAgID4gKyAgU3RvcmVzWzFdID0gKG1WYXJpYWJsZU1vZHVsZUdsb2JhbCAhPSBO VUxMKQ0KPiA+ICAgICA+ICsgICAgICAgICAgICAgID8gKFZBUklBQkxFX1NUT1JFX0hFQURFUiAq KShVSU5UTiltVmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4gICAgID4gPlZhcmlhYmxlR2xvYmFs Lk5vblZvbGF0aWxlVmFyaWFibGVCYXNlDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgOiBOVUxM Ow0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBWYXJpYWJsZUJ1ZmZlciA9IFZhcmlhYmxlSW5m by0+QnVmZmVyOw0KPiA+ICAgICA+ICsgIFZhcmlhYmxlUHRyICAgID0gTlVMTDsNCj4gPiAgICAg PiArICBpZiAoVmFyaWFibGVJbmZvLT5TdG9yZUluZGV4ICE9IFZBUl9JTkRFWF9JTlZBTElEKSB7 DQo+ID4gICAgID4gKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBBUlJBWV9TSVpFIChTdG9y ZXMpOyArK0luZGV4KSB7DQo+ID4gICAgID4gKyAgICAgIGlmIChTdG9yZXNbSW5kZXhdID09IE5V TEwpIHsNCj4gPiAgICAgPiArICAgICAgICBjb250aW51ZTsNCj4gPiAgICAgPiArICAgICAgfQ0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgICAgaWYgKChVSU5UTilWYXJpYWJsZUluZm8tPlN0 b3JlSW5kZXgNCj4gPiAgICAgPiArICAgICAgICAgIDwgKChVSU5UTilHZXRFbmRQb2ludGVyIChT dG9yZXNbSW5kZXhdKSAtIChVSU5UTilTdG9yZXNbSW5kZXhdKSkNCj4gPiAgICAgPiArICAgICAg ew0KPiA+ICAgICA+ICsgICAgICAgIFZhcmlhYmxlUHRyICAgICAgICAgID0gKFZBUklBQkxFX0hF QURFUiAqKSgoVUlOVE4pU3RvcmVzW0luZGV4XSArDQo+ID4gICAgID4gKFVJTlROKVZhcmlhYmxl SW5mby0+U3RvcmVJbmRleCk7DQo+ID4gICAgID4gKyAgICAgICAgVmFyaWFibGVJbmZvLT5CdWZm ZXIgPSBWYXJpYWJsZVB0cjsNCj4gPiAgICAgPiArICAgICAgICBicmVhazsNCj4gPiAgICAgPiAr ICAgICAgfQ0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAgICA+ICsgIH0gZWxzZSB7DQo+ID4gICAg ID4gKyAgICBWYXJpYWJsZVB0ciA9IFZhcmlhYmxlSW5mby0+QnVmZmVyOw0KPiA+ICAgICA+ICsg IH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgaWYgKFZhcmlhYmxlUHRyID09IE5VTEwpIHsN Cj4gPiAgICAgPiArICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPiA+ICAgICA+ICsgIH0NCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyAgQXV0aEZsYWcgPSBWYXJpYWJsZUluZm8tPkZsYWdzLkF1 dGg7DQo+ID4gICAgID4gKyAgQVNTRVJUIChBdXRoRmxhZyA9PSBUUlVFIHx8IEF1dGhGbGFnID09 IEZBTFNFKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBN YWtlIGEgY29weSBvZiB0aGUgd2hvbGUgdmFyaWFibGUgaWYgYSBidWZmZXIgaXMgcGFzc2VkIGlu Lg0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgaWYgKChWYXJpYWJsZUJ1ZmZlciAhPSBO VUxMKSAmJiAoVmFyaWFibGVCdWZmZXIgIT0gVmFyaWFibGVQdHIpKSB7DQo+ID4gICAgID4gKyAg ICBWYXJpYWJsZVNpemUgPSAoVUlOVE4pR2V0TmV4dFZhcmlhYmxlUHRyIChWYXJpYWJsZVB0ciwg QXV0aEZsYWcpDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAtIChVSU5UTilWYXJpYWJs ZVB0cjsNCj4gPiAgICAgPiArICAgIENvcHlNZW0gKFZhcmlhYmxlQnVmZmVyLCBWYXJpYWJsZVB0 ciwgVmFyaWFibGVTaXplKTsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gQXV0aFZhcmlhYmxlIGhlYWRlcg0KPiA+ICAgICA+ICsg IC8vDQo+ID4gICAgID4gKyAgaWYgKEF1dGhGbGFnKSB7DQo+ID4gICAgID4gKyAgICBBdXRoVmFy aWFibGVQdHIgPSAoQVVUSEVOVElDQVRFRF9WQVJJQUJMRV9IRUFERVIgKilWYXJpYWJsZVB0cjsN Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICBWYXJpYWJsZUluZm8tPkhlYWRlci5TdGF0ZSAg ICAgICAgICA9IEF1dGhWYXJpYWJsZVB0ci0+U3RhdGU7DQo+ID4gICAgID4gKyAgICBWYXJpYWJs ZUluZm8tPkhlYWRlci5BdHRyaWJ1dGVzICAgICA9IEF1dGhWYXJpYWJsZVB0ci0+QXR0cmlidXRl czsNCj4gPiAgICAgPiArICAgIFZhcmlhYmxlSW5mby0+SGVhZGVyLlB1YktleUluZGV4ICAgID0g QXV0aFZhcmlhYmxlUHRyLT5QdWJLZXlJbmRleDsNCj4gPiAgICAgPiArICAgIFZhcmlhYmxlSW5m by0+SGVhZGVyLk1vbm90b25pY0NvdW50ID0gUmVhZFVuYWxpZ25lZDY0ICgNCj4gPiAgICAgPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKEF1dGhWYXJpYWJs ZVB0ci0+TW9ub3RvbmljQ291bnQpDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiAgICAgPiArICAgIGlmIChWYXJpYWJsZUluZm8t PkhlYWRlci5UaW1lU3RhbXAgIT0gTlVMTCkgew0KPiA+ICAgICA+ICsgICAgICBDb3B5TWVtICgN Cj4gPiAgICAgPiArICAgICAgICBWYXJpYWJsZUluZm8tPkhlYWRlci5UaW1lU3RhbXAsDQo+ID4g ICAgID4gKyAgICAgICAgJkF1dGhWYXJpYWJsZVB0ci0+VGltZVN0YW1wLA0KPiA+ICAgICA+ICsg ICAgICAgIHNpemVvZiAoRUZJX1RJTUUpDQo+ID4gICAgID4gKyAgICAgICAgKTsNCj4gPiAgICAg PiArICAgIH0gZWxzZSBpZiAoVmFyaWFibGVCdWZmZXIgIT0gTlVMTCkgew0KPiA+ICAgICA+ICsg ICAgICBBdXRoVmFyaWFibGVQdHIgICAgICAgICAgICAgICAgPSAoQVVUSEVOVElDQVRFRF9WQVJJ QUJMRV9IRUFERVINCj4gPiAgICAgPiAqKVZhcmlhYmxlQnVmZmVyOw0KPiA+ICAgICA+ICsgICAg ICBWYXJpYWJsZUluZm8tPkhlYWRlci5UaW1lU3RhbXAgPSAmQXV0aFZhcmlhYmxlUHRyLT5UaW1l U3RhbXA7DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKyAgfSBlbHNlIHsNCj4gPiAgICAg PiArICAgIFZhcmlhYmxlSW5mby0+SGVhZGVyLlN0YXRlICAgICAgICAgID0gVmFyaWFibGVQdHIt PlN0YXRlOw0KPiA+ICAgICA+ICsgICAgVmFyaWFibGVJbmZvLT5IZWFkZXIuQXR0cmlidXRlcyAg ICAgPSBWYXJpYWJsZVB0ci0+QXR0cmlidXRlczsNCj4gPiAgICAgPiArICAgIFZhcmlhYmxlSW5m by0+SGVhZGVyLlB1YktleUluZGV4ICAgID0gMDsNCj4gPiAgICAgPiArICAgIFZhcmlhYmxlSW5m by0+SGVhZGVyLk1vbm90b25pY0NvdW50ID0gMDsNCj4gPiAgICAgPiArICAgIFZhcmlhYmxlSW5m by0+SGVhZGVyLlRpbWVTdGFtcCAgICAgID0gTlVMTDsNCj4gPiAgICAgPiArICB9DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gVmVuZG9yR3VpZA0KPiA+ICAg ICA+ICsgIC8vDQo+ID4gICAgID4gKyAgaWYgKFZhcmlhYmxlSW5mby0+SGVhZGVyLlZlbmRvckd1 aWQgIT0gTlVMTCkgew0KPiA+ICAgICA+ICsgICAgQ29weUd1aWQgKA0KPiA+ICAgICA+ICsgICAg ICBWYXJpYWJsZUluZm8tPkhlYWRlci5WZW5kb3JHdWlkLA0KPiA+ICAgICA+ICsgICAgICBHZXRW ZW5kb3JHdWlkUHRyIChWYXJpYWJsZVB0ciwgQXV0aEZsYWcpDQo+ID4gICAgID4gKyAgICAgICk7 DQo+ID4gICAgID4gKyAgfSBlbHNlIHsNCj4gPiAgICAgPiArICAgIFZhcmlhYmxlSW5mby0+SGVh ZGVyLlZlbmRvckd1aWQgPSBHZXRWZW5kb3JHdWlkUHRyIChWYXJpYWJsZVB0ciwNCj4gPiAgICAg PiBBdXRoRmxhZyk7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAv Lw0KPiA+ICAgICA+ICsgIC8vIFZhcmlhYmxlTmFtZQ0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAg ID4gKyAgTmFtZVNpemUgPSBOYW1lU2l6ZU9mVmFyaWFibGUgKFZhcmlhYmxlUHRyLCBBdXRoRmxh Zyk7DQo+ID4gICAgID4gKyAgaWYgKCAgKFZhcmlhYmxlSW5mby0+SGVhZGVyLlZhcmlhYmxlTmFt ZSAhPSBOVUxMKQ0KPiA+ICAgICA+ICsgICAgICYmIChWYXJpYWJsZUluZm8tPkhlYWRlci5OYW1l U2l6ZSA+PSBOYW1lU2l6ZSkpDQo+ID4gICAgID4gKyAgew0KPiA+ICAgICA+ICsgICAgQ29weU1l bSAoDQo+ID4gICAgID4gKyAgICAgIFZhcmlhYmxlSW5mby0+SGVhZGVyLlZhcmlhYmxlTmFtZSwN Cj4gPiAgICAgPiArICAgICAgR2V0VmFyaWFibGVOYW1lUHRyIChWYXJpYWJsZVB0ciwgQXV0aEZs YWcpLA0KPiA+ICAgICA+ICsgICAgICBOYW1lU2l6ZQ0KPiA+ICAgICA+ICsgICAgICApOw0KPiA+ ICAgICA+ICsgIH0gZWxzZSBpZiAoVmFyaWFibGVJbmZvLT5IZWFkZXIuVmFyaWFibGVOYW1lICE9 IE5VTEwpIHsNCj4gPiAgICAgPiArICAgIHJldHVybiBFRklfQlVGRkVSX1RPT19TTUFMTDsNCj4g PiAgICAgPiArICB9IGVsc2Ugew0KPiA+ICAgICA+ICsgICAgVmFyaWFibGVJbmZvLT5IZWFkZXIu VmFyaWFibGVOYW1lID0gR2V0VmFyaWFibGVOYW1lUHRyDQo+IChWYXJpYWJsZVB0ciwNCj4gPiAg ICAgPiBBdXRoRmxhZyk7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr ICAvLw0KPiA+ICAgICA+ICsgIC8vIERhdGENCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsg IERhdGFTaXplID0gRGF0YVNpemVPZlZhcmlhYmxlIChWYXJpYWJsZVB0ciwgQXV0aEZsYWcpOw0K PiA+ICAgICA+ICsgIGlmICggIChWYXJpYWJsZUluZm8tPkhlYWRlci5EYXRhICE9IE5VTEwpDQo+ ID4gICAgID4gKyAgICAgJiYgKFZhcmlhYmxlSW5mby0+SGVhZGVyLkRhdGFTaXplID49IERhdGFT aXplKSkNCj4gPiAgICAgPiArICB7DQo+ID4gICAgID4gKyAgICBDb3B5TWVtICgNCj4gPiAgICAg PiArICAgICAgVmFyaWFibGVJbmZvLT5IZWFkZXIuRGF0YSwNCj4gPiAgICAgPiArICAgICAgR2V0 VmFyaWFibGVEYXRhUHRyIChWYXJpYWJsZVB0ciwgQXV0aEZsYWcpLA0KPiA+ICAgICA+ICsgICAg ICBOYW1lU2l6ZQ0KPiA+ICAgICA+ICsgICAgICApOw0KPiA+ICAgICA+ICsgIH0gZWxzZSBpZiAo VmFyaWFibGVJbmZvLT5IZWFkZXIuRGF0YSAhPSBOVUxMKSB7DQo+ID4gICAgID4gKyAgICByZXR1 cm4gRUZJX0JVRkZFUl9UT09fU01BTEw7DQo+ID4gICAgID4gKyAgfSBlbHNlIHsNCj4gPiAgICAg PiArICAgIFZhcmlhYmxlSW5mby0+SGVhZGVyLkRhdGEgPSBHZXRWYXJpYWJsZURhdGFQdHIgKFZh cmlhYmxlUHRyLA0KPiBBdXRoRmxhZyk7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIFVwZGF0ZSBzaXplIGluZm9ybWF0aW9uIGFi b3V0IG5hbWUgJiBkYXRhLg0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgVmFyaWFibGVJ bmZvLT5IZWFkZXIuTmFtZVNpemUgPSBOYW1lU2l6ZTsNCj4gPiAgICAgPiArICBWYXJpYWJsZUlu Zm8tPkhlYWRlci5EYXRhU2l6ZSA9IERhdGFTaXplOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr ICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKy8qKg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBSZXRyaWV2ZSBkZXRhaWxzIG9mIHRo ZSB2YXJpYWJsZSBuZXh0IHRvIGdpdmVuIHZhcmlhYmxlIHdpdGhpbg0KPiBWYXJpYWJsZVN0b3Jl Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBJZiBWYXJpYWJsZUluZm8tPlN0b3JlSW5kZXgg aXMgaW52YWxpZCwgdGhlIGZpcnN0IG9uZSBpbiBWYXJpYWJsZVN0b3JlIGlzDQo+ID4gcmV0dXJu ZWQuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbixvdXRdIFZhcmlhYmxlSW5m byAgICAgICAgICAgICBQb2ludGVyIHRvIHZhcmlhYmxlIGluZm9ybWF0aW9uLg0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVmFyaWFibGVJ bmZvIG9yIFZhcmlhYmxlU3RvcmUgaXMNCj4gTlVMTC4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVG SV9OT1RfRk9VTkQgICAgICAgICAgSWYgdGhlIGVuZCBvZiBWYXJpYWJsZVN0b3JlIGlzIHJlYWNo ZWQuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBuZXh0 IHZhcmlhYmxlIGlzIHJldHJpZXZlZCBzdWNjZXNzZnVsbHkuDQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX1NUQVRVUw0KPiA+ICAgICA+ICtFRklBUEkNCj4gPiAg ICAgPiArR2V0TmV4dFZhcmlhYmxlSW5mbyAoDQo+ID4gICAgID4gKyAgSU4gT1VUICBQUk9URUNU RURfVkFSSUFCTEVfSU5GTyAgKlZhcmlhYmxlSW5mbw0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAg PiArew0KPiA+ICAgICA+ICsgIFZBUklBQkxFX1NUT1JFX0hFQURFUiAgKlZhclN0b3JlOw0KPiA+ ICAgICA+ICsgIFZBUklBQkxFX0hFQURFUiAgICAgICAgKlZhcmlhYmxlUHRyOw0KPiA+ICAgICA+ ICsgIFZBUklBQkxFX0hFQURFUiAgICAgICAgKlZhcmlhYmxlU3RhcnQ7DQo+ID4gICAgID4gKyAg VkFSSUFCTEVfSEVBREVSICAgICAgICAqVmFyaWFibGVFbmQ7DQo+ID4gICAgID4gKyAgQk9PTEVB TiAgICAgICAgICAgICAgICBBdXRoRmxhZzsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgaWYg KFZhcmlhYmxlSW5mbyA9PSBOVUxMKSB7DQo+ID4gICAgID4gKyAgICBBU1NFUlQgKFZhcmlhYmxl SW5mbyAhPSBOVUxMKTsNCj4gPiAgICAgPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVU RVI7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBpZiAobU52VmFy aWFibGVDYWNoZSAhPSBOVUxMKSB7DQo+ID4gICAgID4gKyAgICBWYXJTdG9yZSA9IG1OdlZhcmlh YmxlQ2FjaGU7DQo+ID4gICAgID4gKyAgfSBlbHNlIGlmIChtVmFyaWFibGVNb2R1bGVHbG9iYWwg IT0gTlVMTCkgew0KPiA+ICAgICA+ICsgICAgVmFyU3RvcmUgPSAoVkFSSUFCTEVfU1RPUkVfSEVB REVSICopKFVJTlROKQ0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICBtVmFyaWFibGVNb2R1bGVH bG9iYWwtDQo+ID5WYXJpYWJsZUdsb2JhbC5Ob25Wb2xhdGlsZVZhcmlhYmxlQmFzZTsNCj4gPiAg ICAgPiArICB9IGVsc2Ugew0KPiA+ICAgICA+ICsgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBWYXJpYWJsZVN0YXJ0ID0g R2V0U3RhcnRQb2ludGVyIChWYXJTdG9yZSk7DQo+ID4gICAgID4gKyAgVmFyaWFibGVFbmQgICA9 IEdldEVuZFBvaW50ZXIgKFZhclN0b3JlKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgaWYg KChWYXJpYWJsZUluZm8tPkZsYWdzLkF1dGggIT0gVFJVRSkgJiYgKFZhcmlhYmxlSW5mby0+Rmxh Z3MuQXV0aCAhPQ0KPiA+IEZBTFNFKSkNCj4gPiAgICAgPiB7DQo+ID4gICAgID4gKyAgICBWYXJp YWJsZUluZm8tPkZsYWdzLkF1dGggPSBDb21wYXJlR3VpZCAoDQo+ID4gICAgID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZWYXJTdG9yZS0+U2lnbmF0dXJlLA0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ0VmaUF1dGhlbnRpY2F0ZWRWYXJp YWJsZUd1aWQNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsN Cj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEF1dGhGbGFnID0gVmFy aWFibGVJbmZvLT5GbGFncy5BdXRoOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBpZiAoVmFy aWFibGVJbmZvLT5TdG9yZUluZGV4ID09IFZBUl9JTkRFWF9JTlZBTElEKSB7DQo+ID4gICAgID4g KyAgICBWYXJpYWJsZVB0ciA9IFZhcmlhYmxlU3RhcnQ7DQo+ID4gICAgID4gKyAgfSBlbHNlIHsN Cj4gPiAgICAgPiArICAgIFZhcmlhYmxlUHRyID0gKFZBUklBQkxFX0hFQURFUiAqKQ0KPiA+ICAg ICA+ICsgICAgICAgICAgICAgICAgICAoKFVJTlROKVZhclN0b3JlICsgKFVJTlROKVZhcmlhYmxl SW5mby0+U3RvcmVJbmRleCk7DQo+ID4gICAgID4gKyAgICBpZiAoVmFyaWFibGVQdHIgPj0gVmFy aWFibGVFbmQpIHsNCj4gPiAgICAgPiArICAgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ID4g ICAgID4gKyAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgVmFyaWFibGVQdHIgPSBH ZXROZXh0VmFyaWFibGVQdHIgKFZhcmlhYmxlUHRyLCBBdXRoRmxhZyk7DQo+ID4gICAgID4gKyAg fQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBpZiAoIUlzVmFsaWRWYXJpYWJsZUhlYWRlciAo VmFyaWFibGVQdHIsIFZhcmlhYmxlRW5kLCBBdXRoRmxhZykpIHsNCj4gPiAgICAgPiArICAgIHJl dHVybiBFRklfTk9UX0ZPVU5EOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgVmFyaWFibGVJbmZvLT5TdG9yZUluZGV4ID0gKFVJTlROKVZhcmlhYmxlUHRyIC0gKFVJ TlROKVZhclN0b3JlOw0KPiA+ICAgICA+ICsgIHJldHVybiBHZXRWYXJpYWJsZUluZm8gKFZhcmlh YmxlSW5mbyk7DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiBkaWZmIC0tZ2l0DQo+ID4gICAgID4N Cj4gPg0KPiBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRp bWVEeGUvVmFyaWFibGVQb2xpY3lTbQ0KPiA+ICAgICA+IG1EeGUuYw0KPiA+ICAgICA+DQo+ID4N Cj4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhl L1ZhcmlhYmxlUG9saWN5U20NCj4gPiAgICAgPiBtRHhlLmMNCj4gPiAgICAgPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiA+ICAgICA+IGluZGV4IDAwMDAwMDAwMDAwMC4uYjIwOTRmYmNkNmVhDQo+ ID4gICAgID4gLS0tIC9kZXYvbnVsbA0KPiA+ICAgICA+ICsrKw0KPiA+ICAgICA+DQo+ID4NCj4g Yi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1Zh cmlhYmxlUG9saWN5U20NCj4gPiAgICAgPiBtRHhlLmMNCj4gPiAgICAgPiBAQCAtMCwwICsxLDU3 NSBAQA0KPiA+ICAgICA+ICsvKiogQGZpbGUgLS0gVmFyaWFibGVQb2xpY3lTbW1EeGUuYw0KPiA+ ICAgICA+ICtUaGlzIHByb3RvY29sIGFsbG93cyBjb21tdW5pY2F0aW9uIHdpdGggVmFyaWFibGUg UG9saWN5IEVuZ2luZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gK0NvcHlyaWdodCAoYykgTWlj cm9zb2Z0IENvcnBvcmF0aW9uLg0KPiA+ICAgICA+ICtTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog QlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTGliLmg+DQo+ID4gICAgID4g KyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlMaWIuaD4NCj4gPiAgICAgPiArI2luY2x1ZGUgPExpYnJh cnkvRGVidWdMaWIuaD4NCj4gPiAgICAgPiArI2luY2x1ZGUgPExpYnJhcnkvU2FmZUludExpYi5o Pg0KPiA+ICAgICA+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIu aD4NCj4gPiAgICAgPiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KPiA+ICAg ICA+ICsjaW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9uTGliLmg+DQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsjaW5jbHVkZSA8UHJvdG9jb2wvVmFyaWFibGVQb2xpY3kuaD4NCj4gPiAg ICAgPiArI2luY2x1ZGUgPFByb3RvY29sL01tQ29tbXVuaWNhdGlvbjIuaD4NCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyNpbmNsdWRlIDxHdWlkL1ZhckNoZWNrUG9saWN5TW1pLmg+DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsjaW5jbHVkZSAiVmFyaWFibGUuaCINCj4gPiAgICAgPiArDQo+ID4g ICAgID4gK0VES0lJX1ZBUklBQkxFX1BPTElDWV9QUk9UT0NPTCAgbVZhcmlhYmxlUG9saWN5UHJv dG9jb2w7DQo+ID4gICAgID4gK0VGSV9NTV9DT01NVU5JQ0FUSU9OMl9QUk9UT0NPTCAgKm1NbUNv bW11bmljYXRpb247DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICtWT0lEICAgICAgKm1NbUNvbW11 bmljYXRpb25CdWZmZXI7DQo+ID4gICAgID4gK1VJTlROICAgICBtTW1Db21tdW5pY2F0aW9uQnVm ZmVyU2l6ZTsNCj4gPiAgICAgPiArRUZJX0xPQ0sgIG1NbUNvbW11bmljYXRpb25Mb2NrOw0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgSW50ZXJuYWwgaGVscGVyIGZ1 bmN0aW9uIHRvIGNvbnNvbGlkYXRlIGNvbW11bmljYXRpb24gbWV0aG9kLg0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICBAcGFyYW1baW4sb3V0XSAgQ29tbUJ1ZmZlcg0KPiA+ICAgICA+ICsgIEBw YXJhbVtpbixvdXRdICBDb21tU2l6ZSAgICBTaXplIG9mIHRoZSBDb21tQnVmZmVyLg0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArICBAcmV0dmFsICAgRUZJX1NUQVRVUyAgICBSZXN1bHQgZnJvbSBj b21tdW5pY2F0aW9uIG1ldGhvZC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAg ICA+ICtTVEFUSUMNCj4gPiAgICAgPiArRUZJX1NUQVRVUw0KPiA+ICAgICA+ICtJbnRlcm5hbE1t Q29tbXVuaWNhdGUgKA0KPiA+ICAgICA+ICsgIElOIE9VVCBWT0lEICAgKkNvbW1CdWZmZXIsDQo+ ID4gICAgID4gKyAgSU4gT1VUIFVJTlROICAqQ29tbVNpemUNCj4gPiAgICAgPiArICApDQo+ID4g ICAgID4gK3sNCj4gPiAgICAgPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIGlmICgoQ29tbUJ1ZmZlciA9PSBOVUxMKSB8fCAoQ29tbVNpemUgPT0gTlVM TCkpIHsNCj4gPiAgICAgPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4g ICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBTdGF0dXMgPSBtTW1Db21tdW5p Y2F0aW9uLT5Db21tdW5pY2F0ZSAobU1tQ29tbXVuaWNhdGlvbiwNCj4gPiAgICAgPiBDb21tQnVm ZmVyLCBDb21tQnVmZmVyLCBDb21tU2l6ZSk7DQo+ID4gICAgID4gKyAgcmV0dXJuIFN0YXR1czsN Cj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAg VGhpcyBBUEkgZnVuY3Rpb24gZGlzYWJsZXMgdGhlIHZhcmlhYmxlIHBvbGljeSBlbmZvcmNlbWVu dC4gSWYgaXQncw0KPiA+ICAgICA+ICsgIGFscmVhZHkgYmVlbiBjYWxsZWQgb25jZSwgd2lsbCBy ZXR1cm4gRUZJX0FMUkVBRFlfU1RBUlRFRC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJl dHZhbCAgICAgRUZJX1NVQ0NFU1MNCj4gPiAgICAgPiArICBAcmV0dmFsICAgICBFRklfQUxSRUFE WV9TVEFSVEVEICAgSGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgb25jZSB0aGlzDQo+ID4gYm9vdC4N Cj4gPiAgICAgPiArICBAcmV0dmFsICAgICBFRklfV1JJVEVfUFJPVEVDVEVEICAgSW50ZXJmYWNl IGhhcyBiZWVuIGxvY2tlZCB1bnRpbA0KPiA+IHJlYm9vdC4NCj4gPiAgICAgPiArICBAcmV0dmFs ICAgICBFRklfV1JJVEVfUFJPVEVDVEVEICAgSW50ZXJmYWNlIG9wdGlvbiBpcyBkaXNhYmxlZCBi eQ0KPiA+IHBsYXRmb3JtDQo+ID4gICAgID4gUENELg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr KiovDQo+ID4gICAgID4gK1NUQVRJQw0KPiA+ICAgICA+ICtFRklfU1RBVFVTDQo+ID4gICAgID4g K0VGSUFQSQ0KPiA+ICAgICA+ICtQcm90b2NvbERpc2FibGVWYXJpYWJsZVBvbGljeSAoDQo+ID4g ICAgID4gKyAgVk9JRA0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0KPiA+ICAgICA+ICsg IEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gPiAgICAgPiArICBFRklf TU1fQ09NTVVOSUNBVEVfSEVBREVSICAgICAqQ29tbUhlYWRlcjsNCj4gPiAgICAgPiArICBWQVJf Q0hFQ0tfUE9MSUNZX0NPTU1fSEVBREVSICAqUG9saWN5SGVhZGVyOw0KPiA+ICAgICA+ICsgIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlclNpemU7DQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsgIC8vIENoZWNrIHRoZSBQQ0QgZm9yIGNvbnZlbmllbmNlLg0KPiA+ICAgICA+ICsg IC8vIFRoaXMgd291bGQgYWxzbyBiZSByZWplY3RlZCBieSB0aGUgbGliLCBidXQgd2h5IGdvIHRv IE1NIGlmIHdlIGRvbid0DQo+ID4gaGF2ZSB0bz8NCj4gPiAgICAgPiArICBpZiAoIVBjZEdldEJv b2wgKFBjZEFsbG93VmFyaWFibGVQb2xpY3lFbmZvcmNlbWVudERpc2FibGUpKSB7DQo+ID4gICAg ID4gKyAgICByZXR1cm4gRUZJX1dSSVRFX1BST1RFQ1RFRDsNCj4gPiAgICAgPiArICB9DQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgIEFjcXVpcmVMb2NrT25seUF0Qm9vdFRpbWUgKCZtTW1Db21t dW5pY2F0aW9uTG9jayk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vIFNldCB1cCB0aGUg TU0gY29tbXVuaWNhdGlvbi4NCj4gPiAgICAgPiArICBCdWZmZXJTaXplICAgPSBtTW1Db21tdW5p Y2F0aW9uQnVmZmVyU2l6ZTsNCj4gPiAgICAgPiArICBDb21tSGVhZGVyICAgPSBtTW1Db21tdW5p Y2F0aW9uQnVmZmVyOw0KPiA+ICAgICA+ICsgIFBvbGljeUhlYWRlciA9IChWQVJfQ0hFQ0tfUE9M SUNZX0NPTU1fSEVBREVSDQo+ICopJkNvbW1IZWFkZXItDQo+ID4gICAgID4gPkRhdGE7DQo+ID4g ICAgID4gKyAgQ29weUd1aWQgKCZDb21tSGVhZGVyLT5IZWFkZXJHdWlkLA0KPiA+ICAgICA+ICZn VmFyQ2hlY2tQb2xpY3lMaWJNbWlIYW5kbGVyR3VpZCk7DQo+ID4gICAgID4gKyAgQ29tbUhlYWRl ci0+TWVzc2FnZUxlbmd0aCA9IEJ1ZmZlclNpemUgLSBPRkZTRVRfT0YNCj4gPiAgICAgPiAoRUZJ X01NX0NPTU1VTklDQVRFX0hFQURFUiwgRGF0YSk7DQo+ID4gICAgID4gKyAgUG9saWN5SGVhZGVy LT5TaWduYXR1cmUgICA9IFZBUl9DSEVDS19QT0xJQ1lfQ09NTV9TSUc7DQo+ID4gICAgID4gKyAg UG9saWN5SGVhZGVyLT5SZXZpc2lvbiAgICA9IFZBUl9DSEVDS19QT0xJQ1lfQ09NTV9SRVZJU0lP TjsNCj4gPiAgICAgPiArICBQb2xpY3lIZWFkZXItPkNvbW1hbmQgICAgID0NCj4gVkFSX0NIRUNL X1BPTElDWV9DT01NQU5EX0RJU0FCTEU7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFN0YXR1 cyA9IEludGVybmFsTW1Db21tdW5pY2F0ZSAoQ29tbUhlYWRlciwgJkJ1ZmZlclNpemUpOw0KPiA+ ICAgICA+ICsgIERFQlVHICgoREVCVUdfVkVSQk9TRSwgIiVhIC0gTW1Db21tdW5pY2F0aW9uIHJl dHVybmVkICVyLlxuIiwNCj4gPiAgICAgPiBfX0ZVTkNUSU9OX18sIFN0YXR1cykpOw0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArICBSZWxlYXNlTG9ja09ubHlBdEJvb3RUaW1lICgmbU1tQ29tbXVu aWNhdGlvbkxvY2spOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICByZXR1cm4gKEVGSV9FUlJP UiAoU3RhdHVzKSkgPyBTdGF0dXMgOiBQb2xpY3lIZWFkZXItPlJlc3VsdDsNCj4gPiAgICAgPiAr fQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgVGhpcyBBUEkgZnVu Y3Rpb24gcmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgcG9saWN5IGVuZ2luZSBpcw0KPiA+ICAg ICA+ICsgIGN1cnJlbnRseSBiZWluZyBlbmZvcmNlZC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgQHBhcmFtW291dF0gICBTdGF0ZSAgICAgICBQb2ludGVyIHRvIGEgcmV0dXJuIHZhbHVlIGZv ciB3aGV0aGVyIHRoZSBwb2xpY3kNCj4gPiAgICAgPiBlbmZvcmNlbWVudA0KPiA+ICAgICA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgY3VycmVudGx5IGVuYWJsZWQuDQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgIEByZXR2YWwgICAgIEVGSV9TVUNDRVNTDQo+ID4gICAgID4gKyAg QHJldHZhbCAgICAgT3RoZXJzICAgICAgICBBbiBlcnJvciBoYXMgcHJldmVudGVkIHRoaXMgY29t bWFuZCBmcm9tDQo+ID4gY29tcGxldGluZy4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0K PiA+ICAgICA+ICtTVEFUSUMNCj4gPiAgICAgPiArRUZJX1NUQVRVUw0KPiA+ICAgICA+ICtFRklB UEkNCj4gPiAgICAgPiArUHJvdG9jb2xJc1ZhcmlhYmxlUG9saWN5RW5hYmxlZCAoDQo+ID4gICAg ID4gKyAgT1VUIEJPT0xFQU4gICpTdGF0ZQ0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0K PiA+ICAgICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3Rh dHVzOw0KPiA+ICAgICA+ICsgIEVGSV9NTV9DT01NVU5JQ0FURV9IRUFERVIgICAgICAgICAgICAg ICAgKkNvbW1IZWFkZXI7DQo+ID4gICAgID4gKyAgVkFSX0NIRUNLX1BPTElDWV9DT01NX0hFQURF UiAgICAgICAgICAgICAqUG9saWN5SGVhZGVyOw0KPiA+ICAgICA+ICsgIFZBUl9DSEVDS19QT0xJ Q1lfQ09NTV9JU19FTkFCTEVEX1BBUkFNUyAgKkNvbW1hbmRQYXJhbXM7DQo+ID4gICAgID4gKyAg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJTaXplOw0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICBpZiAoU3RhdGUgPT0gTlVMTCkgew0KPiA+ICAgICA+ICsg ICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiAgICAgPiArICB9DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgIEFjcXVpcmVMb2NrT25seUF0Qm9vdFRpbWUgKCZtTW1Db21tdW5p Y2F0aW9uTG9jayk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vIFNldCB1cCB0aGUgTU0g Y29tbXVuaWNhdGlvbi4NCj4gPiAgICAgPiArICBCdWZmZXJTaXplICAgID0gbU1tQ29tbXVuaWNh dGlvbkJ1ZmZlclNpemU7DQo+ID4gICAgID4gKyAgQ29tbUhlYWRlciAgICA9IG1NbUNvbW11bmlj YXRpb25CdWZmZXI7DQo+ID4gICAgID4gKyAgUG9saWN5SGVhZGVyICA9IChWQVJfQ0hFQ0tfUE9M SUNZX0NPTU1fSEVBREVSDQo+ICopJkNvbW1IZWFkZXItDQo+ID4gICAgID4gPkRhdGE7DQo+ID4g ICAgID4gKyAgQ29tbWFuZFBhcmFtcyA9DQo+IChWQVJfQ0hFQ0tfUE9MSUNZX0NPTU1fSVNfRU5B QkxFRF9QQVJBTVMNCj4gPiAgICAgPiAqKShQb2xpY3lIZWFkZXIgKyAxKTsNCj4gPiAgICAgPiAr ICBDb3B5R3VpZCAoJkNvbW1IZWFkZXItPkhlYWRlckd1aWQsDQo+ID4gICAgID4gJmdWYXJDaGVj a1BvbGljeUxpYk1taUhhbmRsZXJHdWlkKTsNCj4gPiAgICAgPiArICBDb21tSGVhZGVyLT5NZXNz YWdlTGVuZ3RoID0gQnVmZmVyU2l6ZSAtIE9GRlNFVF9PRg0KPiA+ICAgICA+IChFRklfTU1fQ09N TVVOSUNBVEVfSEVBREVSLCBEYXRhKTsNCj4gPiAgICAgPiArICBQb2xpY3lIZWFkZXItPlNpZ25h dHVyZSAgID0gVkFSX0NIRUNLX1BPTElDWV9DT01NX1NJRzsNCj4gPiAgICAgPiArICBQb2xpY3lI ZWFkZXItPlJldmlzaW9uICAgID0gVkFSX0NIRUNLX1BPTElDWV9DT01NX1JFVklTSU9OOw0KPiA+ ICAgICA+ICsgIFBvbGljeUhlYWRlci0+Q29tbWFuZCAgICAgPQ0KPiA+IFZBUl9DSEVDS19QT0xJ Q1lfQ09NTUFORF9JU19FTkFCTEVEOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBTdGF0dXMg PSBJbnRlcm5hbE1tQ29tbXVuaWNhdGUgKENvbW1IZWFkZXIsICZCdWZmZXJTaXplKTsNCj4gPiAg ICAgPiArICBERUJVRyAoKERFQlVHX1ZFUkJPU0UsICIlYSAtIE1tQ29tbXVuaWNhdGlvbiByZXR1 cm5lZCAlci5cbiIsDQo+ID4gICAgID4gX19GVU5DVElPTl9fLCBTdGF0dXMpKTsNCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiAr ICAgIFN0YXR1cyA9IFBvbGljeUhlYWRlci0+UmVzdWx0Ow0KPiA+ICAgICA+ICsgICAgKlN0YXRl ID0gQ29tbWFuZFBhcmFtcy0+U3RhdGU7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICBSZWxlYXNlTG9ja09ubHlBdEJvb3RUaW1lICgmbU1tQ29tbXVuaWNhdGlvbkxv Y2spOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICAgICA+ ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBUaGlzIEFQSSBm dW5jdGlvbiB2YWxpZGF0ZXMgYW5kIHJlZ2lzdGVycyBhIG5ldyBwb2xpY3kgd2l0aA0KPiA+ICAg ICA+ICsgIHRoZSBwb2xpY3kgZW5mb3JjZW1lbnQgZW5naW5lLg0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICBAcGFyYW1baW5dICBOZXdQb2xpY3kgICAgIFBvaW50ZXIgdG8gdGhlIGluY29taW5n IHBvbGljeSBzdHJ1Y3R1cmUuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR2YWwgICAg IEVGSV9TVUNDRVNTDQo+ID4gICAgID4gKyAgQHJldHZhbCAgICAgRUZJX0lOVkFMSURfUEFSQU1F VEVSICAgTmV3UG9saWN5IGlzIE5VTEwgb3IgaXMgaW50ZXJuYWxseQ0KPiA+ICAgICA+IGluY29u c2lzdGVudC4NCj4gPiAgICAgPiArICBAcmV0dmFsICAgICBFRklfQUxSRUFEWV9TVEFSVEVEICAg ICBBbiBpZGVudGljYWwgbWF0Y2hpbmcgcG9saWN5DQo+IGFscmVhZHkNCj4gPiAgICAgPiBleGlz dHMuDQo+ID4gICAgID4gKyAgQHJldHZhbCAgICAgRUZJX1dSSVRFX1BST1RFQ1RFRCAgICAgVGhl IGludGVyZmFjZSBoYXMgYmVlbiBsb2NrZWQgdW50aWwNCj4gPiB0aGUNCj4gPiAgICAgPiBuZXh0 IHJlYm9vdC4NCj4gPiAgICAgPiArICBAcmV0dmFsICAgICBFRklfVU5TVVBQT1JURUQgICAgICAg ICBQb2xpY3kgZW5mb3JjZW1lbnQgaGFzIGJlZW4NCj4gZGlzYWJsZWQuDQo+ID4gTm8NCj4gPiAg ICAgPiByZWFzb24gdG8gYWRkIG1vcmUgcG9saWNpZXMuDQo+ID4gICAgID4gKyAgQHJldHZhbCAg ICAgRUZJX0FCT1JURUQgICAgICAgICAgICAgQSBjYWxjdWxhdGlvbiBlcnJvciBoYXMgcHJldmVu dGVkIHRoaXMNCj4gPiBmdW5jdGlvbg0KPiA+ICAgICA+IGZyb20gY29tcGxldGluZy4NCj4gPiAg ICAgPiArICBAcmV0dmFsICAgICBFRklfT1VUX09GX1JFU09VUkNFUyAgICBDYW5ub3QgZ3JvdyB0 aGUgdGFibGUgdG8gaG9sZA0KPiBhbnkNCj4gPiAgICAgPiBtb3JlIHBvbGljaWVzLg0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK1NUQVRJQw0KPiA+ICAgICA+ICtFRklf U1RBVFVTDQo+ID4gICAgID4gK0VGSUFQSQ0KPiA+ICAgICA+ICtQcm90b2NvbFJlZ2lzdGVyVmFy aWFibGVQb2xpY3kgKA0KPiA+ICAgICA+ICsgIElOIENPTlNUIFZBUklBQkxFX1BPTElDWV9FTlRS WSAgKk5ld1BvbGljeQ0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0KPiA+ICAgICA+ICsg IEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gPiAgICAgPiArICBFRklf TU1fQ09NTVVOSUNBVEVfSEVBREVSICAgICAqQ29tbUhlYWRlcjsNCj4gPiAgICAgPiArICBWQVJf Q0hFQ0tfUE9MSUNZX0NPTU1fSEVBREVSICAqUG9saWN5SGVhZGVyOw0KPiA+ICAgICA+ICsgIFZP SUQgICAgICAgICAgICAgICAgICAgICAgICAgICpQb2xpY3lCdWZmZXI7DQo+ID4gICAgID4gKyAg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyU2l6ZTsNCj4gPiAgICAgPiArICBV SU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBSZXF1aXJlZFNpemU7DQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIGlmIChOZXdQb2xpY3kgPT0gTlVMTCkgew0KPiA+ICAgICA+ICsgICAgcmV0 dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIC8vIEZpcnN0LCBtYWtlIHN1cmUgdGhhdCB0aGUgcmVxdWlyZWQgc2l6ZSBk b2VzIG5vdCBleGNlZWQgdGhlIGNhcGFiaWxpdGllcw0KPiA+ICAgICA+ICsgIC8vIG9mIHRoZSBN bUNvbW11bmljYXRpb24gYnVmZmVyLg0KPiA+ICAgICA+ICsgIFJlcXVpcmVkU2l6ZSA9IE9GRlNF VF9PRiAoRUZJX01NX0NPTU1VTklDQVRFX0hFQURFUiwgRGF0YSkgKw0KPiA+IHNpemVvZg0KPiA+ ICAgICA+IChWQVJfQ0hFQ0tfUE9MSUNZX0NPTU1fSEVBREVSKTsNCj4gPiAgICAgPiArICBTdGF0 dXMgICAgICAgPSBTYWZlVWludG5BZGQgKFJlcXVpcmVkU2l6ZSwgTmV3UG9saWN5LT5TaXplLA0K PiAmUmVxdWlyZWRTaXplKTsNCj4gPiAgICAgPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpIHx8 IChSZXF1aXJlZFNpemUgPg0KPiBtTW1Db21tdW5pY2F0aW9uQnVmZmVyU2l6ZSkpDQo+ID4gew0K PiA+ICAgICA+ICsgICAgREVCVUcgKCgNCj4gPiAgICAgPiArICAgICAgREVCVUdfRVJST1IsDQo+ ID4gICAgID4gKyAgICAgICIlYSAtIFBvbGljeSB0b28gbGFyZ2UgZm9yIGJ1ZmZlciEgJXIsICVk ID4gJWQgXG4iLA0KPiA+ICAgICA+ICsgICAgICBfX0ZVTkNUSU9OX18sDQo+ID4gICAgID4gKyAg ICAgIFN0YXR1cywNCj4gPiAgICAgPiArICAgICAgUmVxdWlyZWRTaXplLA0KPiA+ICAgICA+ICsg ICAgICBtTW1Db21tdW5pY2F0aW9uQnVmZmVyU2l6ZQ0KPiA+ICAgICA+ICsgICAgICApKTsNCj4g PiAgICAgPiArICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiAgICAgPiArICB9 DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEFjcXVpcmVMb2NrT25seUF0Qm9vdFRpbWUgKCZt TW1Db21tdW5pY2F0aW9uTG9jayk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vIFNldCB1 cCB0aGUgTU0gY29tbXVuaWNhdGlvbi4NCj4gPiAgICAgPiArICBCdWZmZXJTaXplICAgPSBtTW1D b21tdW5pY2F0aW9uQnVmZmVyU2l6ZTsNCj4gPiAgICAgPiArICBDb21tSGVhZGVyICAgPSBtTW1D b21tdW5pY2F0aW9uQnVmZmVyOw0KPiA+ICAgICA+ICsgIFBvbGljeUhlYWRlciA9IChWQVJfQ0hF Q0tfUE9MSUNZX0NPTU1fSEVBREVSDQo+ICopJkNvbW1IZWFkZXItDQo+ID4gICAgID4gPkRhdGE7 DQo+ID4gICAgID4gKyAgUG9saWN5QnVmZmVyID0gKFZPSUQgKikoUG9saWN5SGVhZGVyICsgMSk7 DQo+ID4gICAgID4gKyAgQ29weUd1aWQgKCZDb21tSGVhZGVyLT5IZWFkZXJHdWlkLA0KPiA+ICAg ICA+ICZnVmFyQ2hlY2tQb2xpY3lMaWJNbWlIYW5kbGVyR3VpZCk7DQo+ID4gICAgID4gKyAgQ29t bUhlYWRlci0+TWVzc2FnZUxlbmd0aCA9IEJ1ZmZlclNpemUgLSBPRkZTRVRfT0YNCj4gPiAgICAg PiAoRUZJX01NX0NPTU1VTklDQVRFX0hFQURFUiwgRGF0YSk7DQo+ID4gICAgID4gKyAgUG9saWN5 SGVhZGVyLT5TaWduYXR1cmUgICA9IFZBUl9DSEVDS19QT0xJQ1lfQ09NTV9TSUc7DQo+ID4gICAg ID4gKyAgUG9saWN5SGVhZGVyLT5SZXZpc2lvbiAgICA9IFZBUl9DSEVDS19QT0xJQ1lfQ09NTV9S RVZJU0lPTjsNCj4gPiAgICAgPiArICBQb2xpY3lIZWFkZXItPkNvbW1hbmQgICAgID0NCj4gPiBW QVJfQ0hFQ0tfUE9MSUNZX0NPTU1BTkRfUkVHSVNURVI7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsgIC8vIENvcHkgdGhlIHBvbGljeSBpbnRvIHBsYWNlLiBUaGlzIGNvcHkgaXMgc2FmZSBiZWNh dXNlIHdlJ3ZlIGFscmVhZHkNCj4gPiB0ZXN0ZWQNCj4gPiAgICAgPiBhYm92ZS4NCj4gPiAgICAg PiArICBDb3B5TWVtIChQb2xpY3lCdWZmZXIsIE5ld1BvbGljeSwgTmV3UG9saWN5LT5TaXplKTsN Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgU3RhdHVzID0gSW50ZXJuYWxNbUNvbW11bmljYXRl IChDb21tSGVhZGVyLCAmQnVmZmVyU2l6ZSk7DQo+ID4gICAgID4gKyAgREVCVUcgKChERUJVR19W RVJCT1NFLCAiJWEgLSBNbUNvbW11bmljYXRpb24gcmV0dXJuZWQgJXIuXG4iLA0KPiA+ICAgICA+ IF9fRlVOQ1RJT05fXywgU3RhdHVzKSk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFJlbGVh c2VMb2NrT25seUF0Qm9vdFRpbWUgKCZtTW1Db21tdW5pY2F0aW9uTG9jayk7DQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsgIHJldHVybiAoRUZJX0VSUk9SIChTdGF0dXMpKSA/IFN0YXR1cyA6IFBv bGljeUhlYWRlci0+UmVzdWx0Ow0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsvKioNCj4gPiAgICAgPiArICBUaGlzIGhlbHBlciBmdW5jdGlvbiB0YWtlcyBjYXJlIG9mIHRo ZSBvdmVyaGVhZCBvZiBmb3JtYXR0aW5nLCBzZW5kaW5nLA0KPiA+IGFuZA0KPiA+ICAgICA+IGlu dGVycHJldGluZw0KPiA+ICAgICA+ICsgIHRoZSByZXN1bHRzIGZvciBhIHNpbmdsZSBEdW1wVmFy aWFibGVQb2xpY3kgcmVxdWVzdC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtW2lu XSAgICAgIFBhZ2VSZXF1ZXN0ZWQgICBUaGUgcGFnZSBvZiB0aGUgcGFnaW5hdGVkIHJlc3VsdHMg ZnJvbQ0KPiA+IE1NLg0KPiA+ICAgICA+IDAgZm9yIG1ldGFkYXRhLg0KPiA+ICAgICA+ICsgIEBw YXJhbVtvdXRdICAgICBUb3RhbFNpemUgICAgICAgVGhlIHRvdGFsIHNpemUgb2YgdGhlIGVudGly ZSBidWZmZXIuDQo+IFJldHVybmVkDQo+ID4gYXMNCj4gPiAgICAgPiBwYXJ0IG9mIG1ldGFkYXRh Lg0KPiA+ICAgICA+ICsgIEBwYXJhbVtvdXRdICAgICBQYWdlU2l6ZSAgICAgICAgVGhlIHNpemUg b2YgdGhlIGN1cnJlbnQgcGFnZSBiZWluZw0KPiByZXR1cm5lZC4NCj4gPiBOb3QNCj4gPiAgICAg PiB2YWxpZCBhcyBwYXJ0IG9mIG1ldGFkYXRhLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtvdXRdICAg ICBIYXNNb3JlICAgICAgICAgQSBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGVyZSBhcmUgbW9y ZQ0KPiA+IHBhZ2VzDQo+ID4gICAgID4gYWZ0ZXIgdGhpcyBvbmUuDQo+ID4gICAgID4gKyAgQHBh cmFtW291dF0gICAgIEJ1ZmZlciAgICAgICAgICBUaGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgcGFn ZSBmcm9tIE1NLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcmV0dmFsICAgICBFRklfU1VD Q0VTUyAgICAgICAgICAgICBPdXRwdXQgcGFyYW1zIGhhdmUgYmVlbiB1cGRhdGVkDQo+IChlaXRo ZXINCj4gPiAgICAgPiBtZXRhZGF0YSBvciBkdW1wIHBhZ2UpLg0KPiA+ICAgICA+ICsgIEByZXR2 YWwgICAgIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgIE9uZSBvZiB0aGUgb3V0cHV0IHBhcmFtcyBp cw0KPiBOVUxMLg0KPiA+ICAgICA+ICsgIEByZXR2YWwgICAgIE90aGVycyAgICAgICAgICAgICAg ICAgIFJlc3BvbnNlIGZyb20gTU0gaGFuZGxlci4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoq Lw0KPiA+ICAgICA+ICtTVEFUSUMNCj4gPiAgICAgPiArRUZJX1NUQVRVUw0KPiA+ICAgICA+ICtE dW1wVmFyaWFibGVQb2xpY3lIZWxwZXIgKA0KPiA+ICAgICA+ICsgIElOICBVSU5UMzIgICBQYWdl UmVxdWVzdGVkLA0KPiA+ICAgICA+ICsgIE9VVCBVSU5UMzIgICAqVG90YWxTaXplLA0KPiA+ICAg ICA+ICsgIE9VVCBVSU5UMzIgICAqUGFnZVNpemUsDQo+ID4gICAgID4gKyAgT1VUIEJPT0xFQU4g ICpIYXNNb3JlLA0KPiA+ICAgICA+ICsgIE9VVCBVSU5UOCAgICAqKkJ1ZmZlcg0KPiA+ICAgICA+ ICsgICkNCj4gPiAgICAgPiArew0KPiA+ICAgICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAg ICAgICAgICAgICAgU3RhdHVzOw0KPiA+ICAgICA+ICsgIEVGSV9NTV9DT01NVU5JQ0FURV9IRUFE RVIgICAgICAgICAgKkNvbW1IZWFkZXI7DQo+ID4gICAgID4gKyAgVkFSX0NIRUNLX1BPTElDWV9D T01NX0hFQURFUiAgICAgICAqUG9saWN5SGVhZGVyOw0KPiA+ICAgICA+ICsgIFZBUl9DSEVDS19Q T0xJQ1lfQ09NTV9EVU1QX1BBUkFNUyAgKkNvbW1hbmRQYXJhbXM7DQo+ID4gICAgID4gKyAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJTaXplOw0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICBpZiAoKFRvdGFsU2l6ZSA9PSBOVUxMKSB8fCAoUGFnZVNpemUgPT0gTlVM TCkgfHwgKEhhc01vcmUgPT0gTlVMTCkgfHwNCj4gPiAoQnVmZmVyDQo+ID4gICAgID4gPT0gTlVM TCkpIHsNCj4gPiAgICAgPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4g ICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLyBTZXQgdXAgdGhlIE1NIGNv bW11bmljYXRpb24uDQo+ID4gICAgID4gKyAgQnVmZmVyU2l6ZSAgICA9IG1NbUNvbW11bmljYXRp b25CdWZmZXJTaXplOw0KPiA+ICAgICA+ICsgIENvbW1IZWFkZXIgICAgPSBtTW1Db21tdW5pY2F0 aW9uQnVmZmVyOw0KPiA+ICAgICA+ICsgIFBvbGljeUhlYWRlciAgPSAoVkFSX0NIRUNLX1BPTElD WV9DT01NX0hFQURFUg0KPiAqKSZDb21tSGVhZGVyLQ0KPiA+ICAgICA+ID5EYXRhOw0KPiA+ICAg ICA+ICsgIENvbW1hbmRQYXJhbXMgPSAoVkFSX0NIRUNLX1BPTElDWV9DT01NX0RVTVBfUEFSQU1T DQo+ID4gICAgID4gKikoUG9saWN5SGVhZGVyICsgMSk7DQo+ID4gICAgID4gKyAgQ29weUd1aWQg KCZDb21tSGVhZGVyLT5IZWFkZXJHdWlkLA0KPiA+ICAgICA+ICZnVmFyQ2hlY2tQb2xpY3lMaWJN bWlIYW5kbGVyR3VpZCk7DQo+ID4gICAgID4gKyAgQ29tbUhlYWRlci0+TWVzc2FnZUxlbmd0aCA9 IEJ1ZmZlclNpemUgLSBPRkZTRVRfT0YNCj4gPiAgICAgPiAoRUZJX01NX0NPTU1VTklDQVRFX0hF QURFUiwgRGF0YSk7DQo+ID4gICAgID4gKyAgUG9saWN5SGVhZGVyLT5TaWduYXR1cmUgICA9IFZB Ul9DSEVDS19QT0xJQ1lfQ09NTV9TSUc7DQo+ID4gICAgID4gKyAgUG9saWN5SGVhZGVyLT5SZXZp c2lvbiAgICA9IFZBUl9DSEVDS19QT0xJQ1lfQ09NTV9SRVZJU0lPTjsNCj4gPiAgICAgPiArICBQ b2xpY3lIZWFkZXItPkNvbW1hbmQgICAgID0gVkFSX0NIRUNLX1BPTElDWV9DT01NQU5EX0RVTVA7 DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIENvbW1hbmRQYXJhbXMtPlBhZ2VSZXF1ZXN0ZWQg PSBQYWdlUmVxdWVzdGVkOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBTdGF0dXMgPSBJbnRl cm5hbE1tQ29tbXVuaWNhdGUgKENvbW1IZWFkZXIsICZCdWZmZXJTaXplKTsNCj4gPiAgICAgPiAr ICBERUJVRyAoKERFQlVHX1ZFUkJPU0UsICIlYSAtIE1tQ29tbXVuaWNhdGlvbiByZXR1cm5lZCAl ci5cbiIsDQo+ID4gICAgID4gX19GVU5DVElPTl9fLCBTdGF0dXMpKTsNCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiArICAgIFN0 YXR1cyAgICAgPSBQb2xpY3lIZWFkZXItPlJlc3VsdDsNCj4gPiAgICAgPiArICAgICpUb3RhbFNp emUgPSBDb21tYW5kUGFyYW1zLT5Ub3RhbFNpemU7DQo+ID4gICAgID4gKyAgICAqUGFnZVNpemUg ID0gQ29tbWFuZFBhcmFtcy0+UGFnZVNpemU7DQo+ID4gICAgID4gKyAgICAqSGFzTW9yZSAgID0g Q29tbWFuZFBhcmFtcy0+SGFzTW9yZTsNCj4gPiAgICAgPiArICAgICpCdWZmZXIgICAgPSAoVUlO VDggKikoQ29tbWFuZFBhcmFtcyArIDEpOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgVGhpcyBBUEkgZnVuY3Rpb24gd2lsbCBkdW1wIHRo ZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIHZhcmlhYmxlIHBvbGljeQ0KPiB0YWJsZS4NCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKyAgU2ltaWxhciB0byBHZXRWYXJpYWJsZSwgdGhlIGZpcnN0IGNh bGwgY2FuIGJlIG1hZGUgd2l0aCBhIDAgc2l6ZSBhbmQgaXQgd2lsbA0KPiA+IHJldHVybg0KPiA+ ICAgICA+ICsgIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgcmVxdWlyZWQgdG8gaG9sZCB0aGUgZW50 aXJlIHRhYmxlLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1bb3V0XSAgICAgUG9s aWN5ICBQb2ludGVyIHRvIHRoZSBwb2xpY3kgYnVmZmVyLiBDYW4gYmUgTlVMTCBpZiBTaXplDQo+ IGlzDQo+ID4gMC4NCj4gPiAgICAgPiArICBAcGFyYW1baW4sb3V0XSAgU2l6ZSAgICBPbiBpbnB1 dCwgdGhlIHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIuIE9uIG91dHB1dCwNCj4gPiB0aGUNCj4g PiAgICAgPiBzaXplDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhl IGRhdGEgcmV0dXJuZWQuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR2YWwgICAgIEVG SV9TVUNDRVNTICAgICAgICAgICAgIFBvbGljeSBkYXRhIGlzIGluIHRoZSBvdXRwdXQgYnVmZmVy IGFuZA0KPiBTaXplDQo+ID4gaGFzDQo+ID4gICAgID4gYmVlbiB1cGRhdGVkLg0KPiA+ICAgICA+ ICsgIEByZXR2YWwgICAgIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgIFNpemUgaXMgTlVMTCwgb3Ig U2l6ZSBpcyBub24temVybw0KPiBhbmQNCj4gPiAgICAgPiBQb2xpY3kgaXMgTlVMTC4NCj4gPiAg ICAgPiArICBAcmV0dmFsICAgICBFRklfQlVGRkVSX1RPT19TTUFMTCAgICBTaXplIGlzIGluc3Vm ZmljaWVudCB0byBob2xkIHBvbGljeS4NCj4gPiBTaXplDQo+ID4gICAgID4gdXBkYXRlZCB3aXRo IHJlcXVpcmVkIHNpemUuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiAr U1RBVElDDQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4gPiAgICAgPiArRUZJQVBJDQo+ID4gICAg ID4gK1Byb3RvY29sRHVtcFZhcmlhYmxlUG9saWN5ICgNCj4gPiAgICAgPiArICBPVVQgVUlOVDgg ICAgICAqUG9saWN5IE9QVElPTkFMLA0KPiA+ICAgICA+ICsgIElOIE9VVCBVSU5UMzIgICpTaXpl DQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgRUZJX1NUQVRVUyAg U3RhdHVzOw0KPiA+ICAgICA+ICsgIFVJTlQ4ICAgICAgICpTb3VyY2U7DQo+ID4gICAgID4gKyAg VUlOVDggICAgICAgKkRlc3RpbmF0aW9uOw0KPiA+ICAgICA+ICsgIFVJTlQzMiAgICAgIFBvbGlj eVNpemU7DQo+ID4gICAgID4gKyAgVUlOVDMyICAgICAgUGFnZVNpemU7DQo+ID4gICAgID4gKyAg Qk9PTEVBTiAgICAgSGFzTW9yZTsNCj4gPiAgICAgPiArICBVSU5UMzIgICAgICBQYWdlSW5kZXg7 DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIGlmICgoU2l6ZSA9PSBOVUxMKSB8fCAoKCpTaXpl ID4gMCkgJiYgKFBvbGljeSA9PSBOVUxMKSkpIHsNCj4gPiAgICAgPiArICAgIHJldHVybiBFRklf SU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICBBY3F1aXJlTG9ja09ubHlBdEJvb3RUaW1lICgmbU1tQ29tbXVuaWNhdGlvbkxvY2spOw0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLyBSZXBlYXQgdGhpcyB3aG9sZSBwcm9jZXNzIHVu dGlsIHdlIGVpdGhlciBoYXZlIGEgZmFpbHVyZSBjYXNlIG9yIGdldA0KPiB0aGUNCj4gPiAgICAg PiBlbnRpcmUgYnVmZmVyLg0KPiA+ICAgICA+ICsgIGRvIHsNCj4gPiAgICAgPiArICAgIC8vIEZp cnN0LCB3ZSBtdXN0IGNoZWNrIHRoZSB6ZXJvIHBhZ2UgdG8gZGV0ZXJtaW5lIHRoZSBidWZmZXIg c2l6ZSBhbmQNCj4gPiAgICAgPiArICAgIC8vIHJlc2V0IHRoZSBpbnRlcm5hbCBzdGF0ZS4NCj4g PiAgICAgPiArICAgIFBvbGljeVNpemUgPSAwOw0KPiA+ICAgICA+ICsgICAgUGFnZVNpemUgICA9 IDA7DQo+ID4gICAgID4gKyAgICBIYXNNb3JlICAgID0gRkFMU0U7DQo+ID4gICAgID4gKyAgICBT dGF0dXMgICAgID0gRHVtcFZhcmlhYmxlUG9saWN5SGVscGVyICgwLCAmUG9saWN5U2l6ZSwgJlBh Z2VTaXplLA0KPiA+ICZIYXNNb3JlLA0KPiA+ICAgICA+ICZTb3VyY2UpOw0KPiA+ICAgICA+ICsg ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICAgICA+ICsgICAgICBicmVhazsNCj4g PiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICAvLyBJZiB3ZSdyZSBn b29kLCB3ZSBjYW4gYXQgbGVhc3QgY2hlY2sgdGhlIHJlcXVpcmVkIHNpemUgbm93Lg0KPiA+ICAg ICA+ICsgICAgaWYgKCpTaXplIDwgUG9saWN5U2l6ZSkgew0KPiA+ICAgICA+ICsgICAgICAqU2l6 ZSAgPSBQb2xpY3lTaXplOw0KPiA+ICAgICA+ICsgICAgICBTdGF0dXMgPSBFRklfQlVGRkVSX1RP T19TTUFMTDsNCj4gPiAgICAgPiArICAgICAgYnJlYWs7DQo+ID4gICAgID4gKyAgICB9DQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgICAgLy8gT24gZnVydGhlciB0aG91Z2h0LCBsZXQncyB1cGRh dGUgdGhlIHNpemUgZWl0aGVyIHdheS4NCj4gPiAgICAgPiArICAgICpTaXplID0gUG9saWN5U2l6 ZTsNCj4gPiAgICAgPiArICAgIC8vIEFuZCBnZXQgcmVhZHkgdG8gUk9DSy4NCj4gPiAgICAgPiAr ICAgIERlc3RpbmF0aW9uID0gUG9saWN5Ow0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgIC8v IEtlZXAgbG9vcGluZyBhbmQgY29weWluZyB1bnRpbCB3ZSdyZSBlaXRoZXIgZG9uZSBvciBmcmVh ayBvdXQuDQo+ID4gICAgID4gKyAgICBmb3IgKFBhZ2VJbmRleCA9IDE7ICFFRklfRVJST1IgKFN0 YXR1cykgJiYgSGFzTW9yZSAmJiBQYWdlSW5kZXggPA0KPiA+ICAgICA+IE1BWF9VSU5UMzI7IFBh Z2VJbmRleCsrKSB7DQo+ID4gICAgID4gKyAgICAgIFN0YXR1cyA9IER1bXBWYXJpYWJsZVBvbGlj eUhlbHBlciAoUGFnZUluZGV4LCAmUG9saWN5U2l6ZSwNCj4gJlBhZ2VTaXplLA0KPiA+ICAgICA+ ICZIYXNNb3JlLCAmU291cmNlKTsNCj4gPiAgICAgPiArICAgICAgaWYgKCFFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4gPiAgICAgPiArICAgICAgICBDb3B5TWVtIChEZXN0aW5hdGlvbiwgU291cmNl LCBQYWdlU2l6ZSk7DQo+ID4gICAgID4gKyAgICAgICAgRGVzdGluYXRpb24gKz0gUGFnZVNpemU7 DQo+ID4gICAgID4gKyAgICAgIH0NCj4gPiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyAgICAvLyBOZXh0LCB3ZSBjaGVjayB0byBzZWUgd2hldGhlcg0KPiA+ICAgICA+ICsg IH0gd2hpbGUgKFN0YXR1cyA9PSBFRklfVElNRU9VVCk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsgIFJlbGVhc2VMb2NrT25seUF0Qm9vdFRpbWUgKCZtTW1Db21tdW5pY2F0aW9uTG9jayk7DQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vIFRoZXJlJ3MgY3VycmVudGx5IG5vIHVzZSBmb3Ig dGhpcywgYnV0IGl0IHNob3VsZG4ndCBiZSBoYXJkIHRvIGltcGxlbWVudC4NCj4gPiAgICAgPiAr ICByZXR1cm4gU3RhdHVzOw0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsv KioNCj4gPiAgICAgPiArICBUaGlzIEFQSSBmdW5jdGlvbiBsb2NrcyB0aGUgaW50ZXJmYWNlIHNv IHRoYXQgbm8gbW9yZSBwb2xpY3kgdXBkYXRlcw0KPiA+ICAgICA+ICsgIGNhbiBiZSBwZXJmb3Jt ZWQgb3IgY2hhbmdlcyBtYWRlIHRvIHRoZSBlbmZvcmNlbWVudCB1bnRpbCB0aGUgbmV4dA0KPiA+ IGJvb3QuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR2YWwgICAgIEVGSV9TVUNDRVNT DQo+ID4gICAgID4gKyAgQHJldHZhbCAgICAgT3RoZXJzICAgICAgICBBbiBlcnJvciBoYXMgcHJl dmVudGVkIHRoaXMgY29tbWFuZCBmcm9tDQo+ID4gY29tcGxldGluZy4NCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtTVEFUSUMNCj4gPiAgICAgPiArRUZJX1NUQVRVUw0K PiA+ICAgICA+ICtFRklBUEkNCj4gPiAgICAgPiArUHJvdG9jb2xMb2NrVmFyaWFibGVQb2xpY3kg KA0KPiA+ICAgICA+ICsgIFZPSUQNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAg ICAgPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gICAgID4g KyAgRUZJX01NX0NPTU1VTklDQVRFX0hFQURFUiAgICAgKkNvbW1IZWFkZXI7DQo+ID4gICAgID4g KyAgVkFSX0NIRUNLX1BPTElDWV9DT01NX0hFQURFUiAgKlBvbGljeUhlYWRlcjsNCj4gPiAgICAg PiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJTaXplOw0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArICBBY3F1aXJlTG9ja09ubHlBdEJvb3RUaW1lICgmbU1tQ29tbXVuaWNh dGlvbkxvY2spOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLyBTZXQgdXAgdGhlIE1NIGNv bW11bmljYXRpb24uDQo+ID4gICAgID4gKyAgQnVmZmVyU2l6ZSAgID0gbU1tQ29tbXVuaWNhdGlv bkJ1ZmZlclNpemU7DQo+ID4gICAgID4gKyAgQ29tbUhlYWRlciAgID0gbU1tQ29tbXVuaWNhdGlv bkJ1ZmZlcjsNCj4gPiAgICAgPiArICBQb2xpY3lIZWFkZXIgPSAoVkFSX0NIRUNLX1BPTElDWV9D T01NX0hFQURFUg0KPiAqKSZDb21tSGVhZGVyLQ0KPiA+ICAgICA+ID5EYXRhOw0KPiA+ICAgICA+ ICsgIENvcHlHdWlkICgmQ29tbUhlYWRlci0+SGVhZGVyR3VpZCwNCj4gPiAgICAgPiAmZ1ZhckNo ZWNrUG9saWN5TGliTW1pSGFuZGxlckd1aWQpOw0KPiA+ICAgICA+ICsgIENvbW1IZWFkZXItPk1l c3NhZ2VMZW5ndGggPSBCdWZmZXJTaXplIC0gT0ZGU0VUX09GDQo+ID4gICAgID4gKEVGSV9NTV9D T01NVU5JQ0FURV9IRUFERVIsIERhdGEpOw0KPiA+ICAgICA+ICsgIFBvbGljeUhlYWRlci0+U2ln bmF0dXJlICAgPSBWQVJfQ0hFQ0tfUE9MSUNZX0NPTU1fU0lHOw0KPiA+ICAgICA+ICsgIFBvbGlj eUhlYWRlci0+UmV2aXNpb24gICAgPSBWQVJfQ0hFQ0tfUE9MSUNZX0NPTU1fUkVWSVNJT047DQo+ ID4gICAgID4gKyAgUG9saWN5SGVhZGVyLT5Db21tYW5kICAgICA9IFZBUl9DSEVDS19QT0xJQ1lf Q09NTUFORF9MT0NLOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBTdGF0dXMgPSBJbnRlcm5h bE1tQ29tbXVuaWNhdGUgKENvbW1IZWFkZXIsICZCdWZmZXJTaXplKTsNCj4gPiAgICAgPiArICBE RUJVRyAoKERFQlVHX1ZFUkJPU0UsICIlYSAtIE1tQ29tbXVuaWNhdGlvbiByZXR1cm5lZCAlci5c biIsDQo+ID4gICAgID4gX19GVU5DVElPTl9fLCBTdGF0dXMpKTsNCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyAgUmVsZWFzZUxvY2tPbmx5QXRCb290VGltZSAoJm1NbUNvbW11bmljYXRpb25Mb2Nr KTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgcmV0dXJuIChFRklfRVJST1IgKFN0YXR1cykp ID8gU3RhdHVzIDogUG9saWN5SGVhZGVyLT5SZXN1bHQ7DQo+ID4gICAgID4gK30NCj4gPiAgICAg PiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIFRoaXMgaGVscGVyIGZ1bmN0aW9uIGxv Y2F0ZXMgdGhlIHNoYXJlZCBjb21tIGJ1ZmZlciBhbmQgYXNzaWducyBpdCB0bw0KPiA+IGlucHV0 DQo+ID4gICAgID4gcG9pbnRlcnMuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbVtp bixvdXRdICBCdWZmZXJTaXplICAgICAgT24gaW5wdXQsIHRoZSBtaW5pbXVtIGJ1ZmZlciBzaXpl DQo+IHJlcXVpcmVkDQo+ID4gICAgID4gSU5DTFVESU5HIHRoZSBNTSBjb21tdW5pY2F0ZSBoZWFk ZXIuDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiBvdXRw dXQsIHRoZSBzaXplIG9mIHRoZSBtYXRjaGluZyBidWZmZXIgZm91bmQuDQo+ID4gICAgID4gKyAg QHBhcmFtW291dF0gICAgIExvY2F0ZWRCdWZmZXIgICBBIHBvaW50ZXIgdG8gdGhlIG1hdGNoaW5n IGJ1ZmZlci4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHZhbCAgICAgRUZJX1NVQ0NF U1MNCj4gPiAgICAgPiArICBAcmV0dmFsICAgICBFRklfSU5WQUxJRF9QQVJBTUVURVIgICBPbmUg b2YgdGhlIG91dHB1dCBwb2ludGVycyB3YXMNCj4gPiBOVUxMLg0KPiA+ICAgICA+ICsgIEByZXR2 YWwgICAgIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgIE5vdCBlbm91Z2ggbWVtb3J5IHRvIGFsbG9j YXRlDQo+IGENCj4gPiAgICAgPiBjb21tIGJ1ZmZlci4NCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyoqLw0KPiA+ICAgICA+ICtTVEFUSUMNCj4gPiAgICAgPiArRUZJX1NUQVRVUw0KPiA+ICAgICA+ ICtJbml0TW1Db21tb25Db21tQnVmZmVyICgNCj4gPiAgICAgPiArICBJTiBPVVQgIFVJTlROICAq QnVmZmVyU2l6ZSwNCj4gPiAgICAgPiArICBPVVQgICAgIFZPSUQgICAqKkxvY2F0ZWRCdWZmZXIN Cj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBFRklfU1RBVFVTICBT dGF0dXM7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5n IHdpdGggZ29vZCBwb2ludGVycy4NCj4gPiAgICAgPiArICBpZiAoKEJ1ZmZlclNpemUgPT0gTlVM TCkgfHwgKExvY2F0ZWRCdWZmZXIgPT0gTlVMTCkpIHsNCj4gPiAgICAgPiArICAgIHJldHVybiBF RklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICAvLyBBbGxvY2F0ZSB0aGUgcnVudGltZSBtZW1vcnkgZm9yIHRoZSBjb21tIGJ1ZmZl ci4NCj4gPiAgICAgPiArICAqTG9jYXRlZEJ1ZmZlciA9IEFsbG9jYXRlUnVudGltZVBvb2wgKCpC dWZmZXJTaXplKTsNCj4gPiAgICAgPiArICBpZiAoKkxvY2F0ZWRCdWZmZXIgPT0gTlVMTCkgew0K PiA+ICAgICA+ICsgICAgU3RhdHVzICAgICAgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiAg ICAgPiArICAgICpCdWZmZXJTaXplID0gMDsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIEVmaUluaXRpYWxpemVMb2NrICgmbU1tQ29tbXVuaWNhdGlvbkxvY2ssIFRQ TF9OT1RJRlkpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBDb252 ZXJ0IGludGVybmFsIHBvaW50ZXIgYWRkcmVzc2VzIHRvIHZpcnR1YWwgYWRkcmVzc2VzLg0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1baW5dIEV2ZW50ICAgICAgRXZlbnQgd2hvc2Ug bm90aWZpY2F0aW9uIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQuDQo+ID4gICAgID4gKyAgQHBh cmFtW2luXSBDb250ZXh0ICAgIFRoZSBwb2ludGVyIHRvIHRoZSBub3RpZmljYXRpb24gZnVuY3Rp b24ncyBjb250ZXh0LA0KPiA+ICAgICA+IHdoaWNoDQo+ID4gICAgID4gKyAgICAgICAgICAgICAg ICAgICAgICAgIGlzIGltcGxlbWVudGF0aW9uLWRlcGVuZGVudC4NCj4gPiAgICAgPiArKiovDQo+ ID4gICAgID4gK1NUQVRJQw0KPiA+ICAgICA+ICtWT0lEDQo+ID4gICAgID4gK0VGSUFQSQ0KPiA+ ICAgICA+ICtWYXJpYWJsZVBvbGljeVZpcnR1YWxBZGRyZXNzQ2FsbGJhY2sgKA0KPiA+ICAgICA+ ICsgIElOICBFRklfRVZFTlQgIEV2ZW50LA0KPiA+ICAgICA+ICsgIElOICBWT0lEICAgICAgICpD b250ZXh0DQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgRWZpQ29u dmVydFBvaW50ZXIgKDAsIChWT0lEICoqKSZtTW1Db21tdW5pY2F0aW9uKTsNCj4gPiAgICAgPiAr ICBFZmlDb252ZXJ0UG9pbnRlciAoMCwgKFZPSUQgKiopJm1NbUNvbW11bmljYXRpb25CdWZmZXIp Ow0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiAr ICBUaGUgZHJpdmVyJ3MgZW50cnkgcG9pbnQuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBw YXJhbVtpbl0gSW1hZ2VIYW5kbGUgIFRoZSBmaXJtd2FyZSBhbGxvY2F0ZWQgaGFuZGxlIGZvciB0 aGUgRUZJDQo+ID4gaW1hZ2UuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBTeXN0ZW1UYWJsZSAg QSBwb2ludGVyIHRvIHRoZSBFRkkgU3lzdGVtIFRhYmxlLg0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBUaGUgZW50cnkgcG9pbnQgZXhlY3V0ZWQgc3Vj Y2Vzc2Z1bGx5Lg0KPiA+ICAgICA+ICsgIEByZXR2YWwgb3RoZXIgICAgICAgICAgIFNvbWUgZXJy b3Igb2NjdXJlZCB3aGVuIGV4ZWN1dGluZyB0aGlzIGVudHJ5IHBvaW50Lg0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4gPiAgICAgPiArRUZJQVBJ DQo+ID4gICAgID4gK1ZhcmlhYmxlUG9saWN5U21tRHhlTWFpbiAoDQo+ID4gICAgID4gKyAgSU4g ICAgRUZJX0hBTkRMRSAgICAgICAgSW1hZ2VIYW5kbGUsDQo+ID4gICAgID4gKyAgSU4gICAgRUZJ X1NZU1RFTV9UQUJMRSAgKlN5c3RlbVRhYmxlDQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7 DQo+ID4gICAgID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+ICAgICA+ICsgIEJPT0xFQU4g ICAgIFByb3RvY29sSW5zdGFsbGVkOw0KPiA+ICAgICA+ICsgIEJPT0xFQU4gICAgIFZpcnR1YWxB ZGRyZXNzQ2hhbmdlUmVnaXN0ZXJlZDsNCj4gPiAgICAgPiArICBFRklfRVZFTlQgICBWaXJ0dWFs QWRkcmVzc0NoYW5nZUV2ZW50Ow0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBTdGF0dXMgICAg ICAgICAgICAgICAgICAgICAgICAgPSBFRklfU1VDQ0VTUzsNCj4gPiAgICAgPiArICBQcm90b2Nv bEluc3RhbGxlZCAgICAgICAgICAgICAgPSBGQUxTRTsNCj4gPiAgICAgPiArICBWaXJ0dWFsQWRk cmVzc0NoYW5nZVJlZ2lzdGVyZWQgPSBGQUxTRTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg Ly8gVXBkYXRlIHRoZSBtaW5pbXVtIGJ1ZmZlciBzaXplLg0KPiA+ICAgICA+ICsgIG1NbUNvbW11 bmljYXRpb25CdWZmZXJTaXplID0NCj4gPiAgICAgPiBWQVJfQ0hFQ0tfUE9MSUNZX01NX0NPTU1f QlVGRkVSX1NJWkU7DQo+ID4gICAgID4gKyAgLy8gTG9jYXRlIHRoZSBzaGFyZWQgY29tbSBidWZm ZXIgdG8gdXNlIGZvciBzZW5kaW5nIE1NIGNvbW1hbmRzLg0KPiA+ICAgICA+ICsgIFN0YXR1cyA9 IEluaXRNbUNvbW1vbkNvbW1CdWZmZXINCj4gKCZtTW1Db21tdW5pY2F0aW9uQnVmZmVyU2l6ZSwN Cj4gPiAgICAgPiAmbU1tQ29tbXVuaWNhdGlvbkJ1ZmZlcik7DQo+ID4gICAgID4gKyAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICAgICA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwg IiVhIC0gRmFpbGVkIHRvIGxvY2F0ZSBhIHZpYWJsZSBNTSBjb21tDQo+ID4gICAgID4gYnVmZmVy ISAlclxuIiwgX19GVU5DVElPTl9fLCBTdGF0dXMpKTsNCj4gPiAgICAgPiArICAgIEFTU0VSVF9F RklfRVJST1IgKFN0YXR1cyk7DQo+ID4gICAgID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICAg ICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8gTG9jYXRlIHRoZSBNbUNvbW11 bmljYXRpb24gcHJvdG9jb2wuDQo+ID4gICAgID4gKyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVQcm90 b2NvbCAoJmdFZmlNbUNvbW11bmljYXRpb24yUHJvdG9jb2xHdWlkLA0KPiA+IE5VTEwsDQo+ID4g ICAgID4gKFZPSUQgKiopJm1NbUNvbW11bmljYXRpb24pOw0KPiA+ICAgICA+ICsgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIl YSAtIEZhaWxlZCB0byBsb2NhdGUgTW1Db21tdW5pY2F0aW9uDQo+ID4gICAgID4gcHJvdG9jb2wh ICVyXG4iLCBfX0ZVTkNUSU9OX18sIFN0YXR1cykpOw0KPiA+ICAgICA+ICsgICAgQVNTRVJUX0VG SV9FUlJPUiAoU3RhdHVzKTsNCj4gPiAgICAgPiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4gICAg ID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLyBDb25maWd1cmUgdGhlIFZhcmlh YmxlUG9saWN5IHByb3RvY29sIHN0cnVjdHVyZS4NCj4gPiAgICAgPiArICBtVmFyaWFibGVQb2xp Y3lQcm90b2NvbC5SZXZpc2lvbiAgICAgICAgICAgICAgICA9DQo+ID4gICAgID4gRURLSUlfVkFS SUFCTEVfUE9MSUNZX1BST1RPQ09MX1JFVklTSU9OOw0KPiA+ICAgICA+ICsgIG1WYXJpYWJsZVBv bGljeVByb3RvY29sLkRpc2FibGVWYXJpYWJsZVBvbGljeSAgID0NCj4gPiAgICAgPiBQcm90b2Nv bERpc2FibGVWYXJpYWJsZVBvbGljeTsNCj4gPiAgICAgPiArICBtVmFyaWFibGVQb2xpY3lQcm90 b2NvbC5Jc1ZhcmlhYmxlUG9saWN5RW5hYmxlZCA9DQo+ID4gICAgID4gUHJvdG9jb2xJc1Zhcmlh YmxlUG9saWN5RW5hYmxlZDsNCj4gPiAgICAgPiArICBtVmFyaWFibGVQb2xpY3lQcm90b2NvbC5S ZWdpc3RlclZhcmlhYmxlUG9saWN5ICA9DQo+ID4gICAgID4gUHJvdG9jb2xSZWdpc3RlclZhcmlh YmxlUG9saWN5Ow0KPiA+ICAgICA+ICsgIG1WYXJpYWJsZVBvbGljeVByb3RvY29sLkR1bXBWYXJp YWJsZVBvbGljeSAgICAgID0NCj4gPiAgICAgPiBQcm90b2NvbER1bXBWYXJpYWJsZVBvbGljeTsN Cj4gPiAgICAgPiArICBtVmFyaWFibGVQb2xpY3lQcm90b2NvbC5Mb2NrVmFyaWFibGVQb2xpY3kg ICAgICA9DQo+ID4gUHJvdG9jb2xMb2NrVmFyaWFibGVQb2xpY3k7DQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsgIC8vIFJlZ2lzdGVyIGFsbCB0aGUgcHJvdG9jb2xzIGFuZCByZXR1cm4gdGhlIHN0 YXR1cy4NCj4gPiAgICAgPiArICBTdGF0dXMgPSBnQlMtPkluc3RhbGxNdWx0aXBsZVByb3RvY29s SW50ZXJmYWNlcyAoDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICZJbWFnZUhhbmRsZSwN Cj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgJmdFZGtpaVZhcmlhYmxlUG9saWN5UHJvdG9j b2xHdWlkLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAmbVZhcmlhYmxlUG9saWN5UHJv dG9jb2wsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgIE5VTEwNCj4gPiAgICAgPiArICAg ICAgICAgICAgICAgICAgKTsNCj4gPiAgICAgPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+ID4gICAgID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWEgLSBGYWlsZWQgdG8gaW5z dGFsbCBwcm90b2NvbCEgJXJcbiIsDQo+ID4gICAgID4gX19GVU5DVElPTl9fLCBTdGF0dXMpKTsN Cj4gPiAgICAgPiArICAgIGdvdG8gRXhpdDsNCj4gPiAgICAgPiArICB9IGVsc2Ugew0KPiA+ICAg ICA+ICsgICAgUHJvdG9jb2xJbnN0YWxsZWQgPSBUUlVFOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKyAgLy8gTm9ybWFsbHksIHdlIG1pZ2h0IHdhbnQgdG8gcmVnaXN0 ZXIgYSBjYWxsYmFjaw0KPiA+ICAgICA+ICsgIC8vIHRvIGxvY2sgdGhlIGludGVyZmFjZSwgYnV0 IHRoaXMgaXMgaW50ZWdyYXRlZA0KPiA+ICAgICA+ICsgIC8vIGludG8gdGhlIGV4aXN0aW5nIGNh bGxiYWNrcyBpbiBWYXJhaWFibGVTbW0uYw0KPiA+ICAgICA+ICsgIC8vIGFuZCBWYXJpYWJsZUR4 ZS5jLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIFJlZ2lz dGVyIGEgVmlydHVhbEFkZHJlc3NDaGFuZ2UgY2FsbGJhY2sgZm9yIHRoZSBNbUNvbW0gcHJvdG9j b2wNCj4gPiBhbmQNCj4gPiAgICAgPiBDb21tIGJ1ZmZlci4NCj4gPiAgICAgPiArICBTdGF0dXMg PSBnQlMtPkNyZWF0ZUV2ZW50RXggKA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICBFVlRf Tk9USUZZX1NJR05BTCwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgVFBMX05PVElGWSwN Cj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgVmFyaWFibGVQb2xpY3lWaXJ0dWFsQWRkcmVz c0NhbGxiYWNrLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICBOVUxMLA0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgICAgICAmZ0VmaUV2ZW50VmlydHVhbEFkZHJlc3NDaGFuZ2VHdWlkLA0K PiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAmVmlydHVhbEFkZHJlc3NDaGFuZ2VFdmVudA0K PiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICApOw0KPiA+ICAgICA+ICsgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYSAt IEZhaWxlZCB0byBjcmVhdGUgVmlydHVhbEFkZHJlc3NDaGFuZ2UNCj4gPiAgICAgPiBldmVudCEg JXJcbiIsIF9fRlVOQ1RJT05fXywgU3RhdHVzKSk7DQo+ID4gICAgID4gKyAgICBnb3RvIEV4aXQ7 DQo+ID4gICAgID4gKyAgfSBlbHNlIHsNCj4gPiAgICAgPiArICAgIFZpcnR1YWxBZGRyZXNzQ2hh bmdlUmVnaXN0ZXJlZCA9IFRSVUU7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArRXhpdDoNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIElmIHdlJ3JlIGFi b3V0IHRvIHJldHVybiBhIGZhaWxlZCBzdGF0dXMgKGFuZCB1bmxvYWQgdGhpcyBkcml2ZXIpLCB3 ZQ0KPiBtdXN0DQo+ID4gZmlyc3QNCj4gPiAgICAgPiB1bmRvIGFueXRoaW5nIHRoYXQNCj4gPiAg ICAgPiArICAvLyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZG9uZS4NCj4gPiAgICAgPiArICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAgID4gKyAgICBpZiAoUHJvdG9jb2xJbnN0YWxs ZWQpIHsNCj4gPiAgICAgPiArICAgICAgZ0JTLT5Vbmluc3RhbGxQcm90b2NvbEludGVyZmFjZSAo JkltYWdlSGFuZGxlLA0KPiA+ICAgICA+ICZnRWRraWlWYXJpYWJsZVBvbGljeVByb3RvY29sR3Vp ZCwgJm1WYXJpYWJsZVBvbGljeVByb3RvY29sKTsNCj4gPiAgICAgPiArICAgIH0NCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyAgICBpZiAoVmlydHVhbEFkZHJlc3NDaGFuZ2VSZWdpc3RlcmVkKSB7 DQo+ID4gICAgID4gKyAgICAgIGdCUy0+Q2xvc2VFdmVudCAoVmlydHVhbEFkZHJlc3NDaGFuZ2VF dmVudCk7DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gZGlmZiAt LWdpdA0KPiA+ICAgICA+DQo+ID4NCj4gYS9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxl L1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlUnVudGltZUMNCj4gPiAgICAgPiBhY2hlLmMN Cj4gPiAgICAgPg0KPiA+DQo+IGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90 ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZVJ1bnRpbWVDDQo+ID4gICAgID4gYWNoZS5jDQo+ID4g ICAgID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiAgICAgPiBpbmRleCAwMDAwMDAwMDAwMDAu LjliYjMwYmMxZTgwNA0KPiA+ICAgICA+IC0tLSAvZGV2L251bGwNCj4gPiAgICAgPiArKysNCj4g PiAgICAgPg0KPiA+DQo+IGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0 ZWQvUnVudGltZUR4ZS9WYXJpYWJsZVJ1bnRpbWVDDQo+ID4gICAgID4gYWNoZS5jDQo+ID4gICAg ID4gQEAgLTAsMCArMSwxNTggQEANCj4gPiAgICAgPiArLyoqIEBmaWxlDQo+ID4gICAgID4gKyAg RnVuY3Rpb25zIHJlbGF0ZWQgdG8gbWFuYWdpbmcgdGhlIFVFRkkgdmFyaWFibGUgcnVudGltZSBj YWNoZS4gVGhpcyBmaWxlDQo+ID4gICAgID4gc2hvdWxkIG9ubHkgaW5jbHVkZSBmdW5jdGlvbnMN Cj4gPiAgICAgPiArICB1c2VkIGJ5IHRoZSBTTU0gVUVGSSB2YXJpYWJsZSBkcml2ZXIuDQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgIENhdXRpb246IFRoaXMgbW9kdWxlIHJlcXVpcmVzIGFkZGl0 aW9uYWwgcmV2aWV3IHdoZW4gbW9kaWZpZWQuDQo+ID4gICAgID4gKyAgVGhpcyBkcml2ZXIgd2ls bCBoYXZlIGV4dGVybmFsIGlucHV0IC0gdmFyaWFibGUgZGF0YS4gVGhleSBtYXkgYmUgaW5wdXQg aW4NCj4gPiBTTU0NCj4gPiAgICAgPiBtb2RlLg0KPiA+ICAgICA+ICsgIFRoaXMgZXh0ZXJuYWwg aW5wdXQgbXVzdCBiZSB2YWxpZGF0ZWQgY2FyZWZ1bGx5IHRvIGF2b2lkIHNlY3VyaXR5IGlzc3Vl IGxpa2UNCj4gPiAgICAgPiArICBidWZmZXIgb3ZlcmZsb3csIGludGVnZXIgb3ZlcmZsb3cuDQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICtDb3B5cmlnaHQgKGMpIDIwMTksIEludGVsIENvcnBvcmF0 aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiAgICAgPiArU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoq Lw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArI2luY2x1ZGUgIlZhcmlhYmxlUGFyc2luZy5oIg0K PiA+ICAgICA+ICsjaW5jbHVkZSAiVmFyaWFibGVSdW50aW1lQ2FjaGUuaCINCj4gPiAgICAgPiAr DQo+ID4gICAgID4gK2V4dGVybiBWQVJJQUJMRV9NT0RVTEVfR0xPQkFMICAqbVZhcmlhYmxlTW9k dWxlR2xvYmFsOw0KPiA+ICAgICA+ICtleHRlcm4gVkFSSUFCTEVfU1RPUkVfSEVBREVSICAgKm1O dlZhcmlhYmxlQ2FjaGU7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiAr ICBDb3BpZXMgYW55IHBlbmRpbmcgdXBkYXRlcyB0byBydW50aW1lIHZhcmlhYmxlIGNhY2hlcy4N Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAg ICBUaGUgdm9sYXRpbGUgc3RvcmUgdG8gYmUgdXBkYXRlZCBpcyBub3QNCj4gPiAgICAgPiBpbml0 aWFsaXplZCBwcm9wZXJseS4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgICAgIFRoZSB2b2xhdGlsZSBzdG9yZSB3YXMgdXBkYXRlZCBzdWNjZXNzZnVsbHkuDQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX1NUQVRVUw0KPiA+ICAgICA+ ICtGbHVzaFBlbmRpbmdSdW50aW1lVmFyaWFibGVDYWNoZVVwZGF0ZXMgKA0KPiA+ICAgICA+ICsg IFZPSUQNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBWQVJJQUJM RV9SVU5USU1FX0NBQ0hFX0NPTlRFWFQNCj4gKlZhcmlhYmxlUnVudGltZUNhY2hlQ29udGV4dDsN Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgVmFyaWFibGVSdW50aW1lQ2FjaGVDb250ZXh0ID0g Jm1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCj4gPiAgICAgPiA+VmFyaWFibGVHbG9iYWwuVmFyaWFi bGVSdW50aW1lQ2FjaGVDb250ZXh0Ow0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBpZiAoKFZh cmlhYmxlUnVudGltZUNhY2hlQ29udGV4dC0+VmFyaWFibGVSdW50aW1lTnZDYWNoZS5TdG9yZSA9 PQ0KPiA+IE5VTEwpDQo+ID4gICAgID4gfHwNCj4gPiAgICAgPiArICAgICAgKFZhcmlhYmxlUnVu dGltZUNhY2hlQ29udGV4dC0+VmFyaWFibGVSdW50aW1lVm9sYXRpbGVDYWNoZS5TdG9yZQ0KPiA+ ID09DQo+ID4gICAgID4gTlVMTCkgfHwNCj4gPiAgICAgPiArICAgICAgKFZhcmlhYmxlUnVudGlt ZUNhY2hlQ29udGV4dC0+UGVuZGluZ1VwZGF0ZSA9PSBOVUxMKSkNCj4gPiAgICAgPiArICB7DQo+ ID4gICAgID4gKyAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiA+ICAgICA+ICsgIH0NCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyAgaWYgKCooVmFyaWFibGVSdW50aW1lQ2FjaGVDb250ZXh0 LT5QZW5kaW5nVXBkYXRlKSkgew0KPiA+ICAgICA+ICsgICAgaWYgKChWYXJpYWJsZVJ1bnRpbWVD YWNoZUNvbnRleHQtDQo+ID5WYXJpYWJsZVJ1bnRpbWVIb2JDYWNoZS5TdG9yZSAhPQ0KPiA+ICAg ICA+IE5VTEwpICYmDQo+ID4gICAgID4gKyAgICAgICAgKG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+ VmFyaWFibGVHbG9iYWwuSG9iVmFyaWFibGVCYXNlID4gMCkpDQo+ID4gICAgID4gKyAgICB7DQo+ ID4gICAgID4gKyAgICAgIENvcHlNZW0gKA0KPiA+ICAgICA+ICsgICAgICAgIChWT0lEICopKA0K PiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICgoVUlOVDggKikoVUlOVE4pVmFyaWFibGVSdW50 aW1lQ2FjaGVDb250ZXh0LQ0KPiA+ICAgICA+ID5WYXJpYWJsZVJ1bnRpbWVIb2JDYWNoZS5TdG9y ZSkgKw0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgIFZhcmlhYmxlUnVudGltZUNhY2hlQ29u dGV4dC0NCj4gPiAgICAgPiA+VmFyaWFibGVSdW50aW1lSG9iQ2FjaGUuUGVuZGluZ1VwZGF0ZU9m ZnNldA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICksDQo+ID4gICAgID4gKyAgICAgICAg KFZPSUQgKikoDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgKChVSU5UOCAqKShVSU5UTilt VmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4gICAgID4gPlZhcmlhYmxlR2xvYmFsLkhvYlZhcmlh YmxlQmFzZSkgKw0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgIFZhcmlhYmxlUnVudGltZUNh Y2hlQ29udGV4dC0NCj4gPiAgICAgPiA+VmFyaWFibGVSdW50aW1lSG9iQ2FjaGUuUGVuZGluZ1Vw ZGF0ZU9mZnNldA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICksDQo+ID4gICAgID4gKyAg ICAgICAgVmFyaWFibGVSdW50aW1lQ2FjaGVDb250ZXh0LQ0KPiA+ICAgICA+ID5WYXJpYWJsZVJ1 bnRpbWVIb2JDYWNoZS5QZW5kaW5nVXBkYXRlTGVuZ3RoDQo+ID4gICAgID4gKyAgICAgICAgKTsN Cj4gPiAgICAgPiArICAgICAgVmFyaWFibGVSdW50aW1lQ2FjaGVDb250ZXh0LQ0KPiA+ICAgICA+ ID5WYXJpYWJsZVJ1bnRpbWVIb2JDYWNoZS5QZW5kaW5nVXBkYXRlTGVuZ3RoID0gMDsNCj4gPiAg ICAgPiArICAgICAgVmFyaWFibGVSdW50aW1lQ2FjaGVDb250ZXh0LQ0KPiA+ICAgICA+ID5WYXJp YWJsZVJ1bnRpbWVIb2JDYWNoZS5QZW5kaW5nVXBkYXRlT2Zmc2V0ID0gMDsNCj4gPiAgICAgPiAr ICAgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICBDb3B5TWVtICgNCj4gPiAgICAgPiAr ICAgICAgKFZPSUQgKikoDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICgoVUlOVDggKikoVUlO VE4pVmFyaWFibGVSdW50aW1lQ2FjaGVDb250ZXh0LQ0KPiA+ICAgICA+ID5WYXJpYWJsZVJ1bnRp bWVOdkNhY2hlLlN0b3JlKSArDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgIFZhcmlhYmxlUnVu dGltZUNhY2hlQ29udGV4dC0NCj4gPiAgICAgPiA+VmFyaWFibGVSdW50aW1lTnZDYWNoZS5QZW5k aW5nVXBkYXRlT2Zmc2V0DQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICksDQo+ID4gICAgID4g KyAgICAgIChWT0lEICopKA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAoKFVJTlQ4ICopKFVJ TlROKW1OdlZhcmlhYmxlQ2FjaGUpICsNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgVmFyaWFi bGVSdW50aW1lQ2FjaGVDb250ZXh0LQ0KPiA+ICAgICA+ID5WYXJpYWJsZVJ1bnRpbWVOdkNhY2hl LlBlbmRpbmdVcGRhdGVPZmZzZXQNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgKSwNCj4gPiAg ICAgPiArICAgICAgVmFyaWFibGVSdW50aW1lQ2FjaGVDb250ZXh0LQ0KPiA+ICAgICA+ID5WYXJp YWJsZVJ1bnRpbWVOdkNhY2hlLlBlbmRpbmdVcGRhdGVMZW5ndGgNCj4gPiAgICAgPiArICAgICAg KTsNCj4gPiAgICAgPiArICAgIFZhcmlhYmxlUnVudGltZUNhY2hlQ29udGV4dC0NCj4gPiAgICAg PiA+VmFyaWFibGVSdW50aW1lTnZDYWNoZS5QZW5kaW5nVXBkYXRlTGVuZ3RoID0gMDsNCj4gPiAg ICAgPiArICAgIFZhcmlhYmxlUnVudGltZUNhY2hlQ29udGV4dC0NCj4gPiAgICAgPiA+VmFyaWFi bGVSdW50aW1lTnZDYWNoZS5QZW5kaW5nVXBkYXRlT2Zmc2V0ID0gMDsNCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgICBDb3B5TWVtICgNCj4gPiAgICAgPiArICAgICAgKFZPSUQgKikoDQo+ID4g ICAgID4gKyAgICAgICAgICAgICAgICgoVUlOVDggKikoVUlOVE4pVmFyaWFibGVSdW50aW1lQ2Fj aGVDb250ZXh0LQ0KPiA+ICAgICA+ID5WYXJpYWJsZVJ1bnRpbWVWb2xhdGlsZUNhY2hlLlN0b3Jl KSArDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgIFZhcmlhYmxlUnVudGltZUNhY2hlQ29udGV4 dC0NCj4gPiAgICAgPiA+VmFyaWFibGVSdW50aW1lVm9sYXRpbGVDYWNoZS5QZW5kaW5nVXBkYXRl T2Zmc2V0DQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICksDQo+ID4gICAgID4gKyAgICAgIChW T0lEICopKA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAoKFVJTlQ4ICopKFVJTlROKW1WYXJp YWJsZU1vZHVsZUdsb2JhbC0NCj4gPiAgICAgPiA+VmFyaWFibGVHbG9iYWwuVm9sYXRpbGVWYXJp YWJsZUJhc2UpICsNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgVmFyaWFibGVSdW50aW1lQ2Fj aGVDb250ZXh0LQ0KPiA+ICAgICA+ID5WYXJpYWJsZVJ1bnRpbWVWb2xhdGlsZUNhY2hlLlBlbmRp bmdVcGRhdGVPZmZzZXQNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgKSwNCj4gPiAgICAgPiAr ICAgICAgVmFyaWFibGVSdW50aW1lQ2FjaGVDb250ZXh0LQ0KPiA+ICAgICA+ID5WYXJpYWJsZVJ1 bnRpbWVWb2xhdGlsZUNhY2hlLlBlbmRpbmdVcGRhdGVMZW5ndGgNCj4gPiAgICAgPiArICAgICAg KTsNCj4gPiAgICAgPiArICAgIFZhcmlhYmxlUnVudGltZUNhY2hlQ29udGV4dC0NCj4gPiAgICAg PiA+VmFyaWFibGVSdW50aW1lVm9sYXRpbGVDYWNoZS5QZW5kaW5nVXBkYXRlTGVuZ3RoID0gMDsN Cj4gPiAgICAgPiArICAgIFZhcmlhYmxlUnVudGltZUNhY2hlQ29udGV4dC0NCj4gPiAgICAgPiA+ VmFyaWFibGVSdW50aW1lVm9sYXRpbGVDYWNoZS5QZW5kaW5nVXBkYXRlT2Zmc2V0ID0gMDsNCj4g PiAgICAgPiArICAgICooVmFyaWFibGVSdW50aW1lQ2FjaGVDb250ZXh0LT5QZW5kaW5nVXBkYXRl KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0NCj4gPiBGQUxTRTsNCj4gPiAgICAg PiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4g PiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgU3lu Y2hyb25pemVzIHRoZSBydW50aW1lIHZhcmlhYmxlIGNhY2hlcyB3aXRoIGFsbCBwZW5kaW5nIHVw ZGF0ZXMNCj4gb3V0c2lkZQ0KPiA+ICAgICA+IHJ1bnRpbWUuDQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsgIEVuc3VyZXMgYWxsIGNvbmRpdGlvbnMgYXJlIG1ldCB0byBtYWludGFpbiBjb2hlcmVu Y3kgZm9yIHJ1bnRpbWUgY2FjaGUNCj4gPiAgICAgPiB1cGRhdGVzLiBUaGlzIGZ1bmN0aW9uIHdp bGwgYXR0ZW1wdA0KPiA+ICAgICA+ICsgIHRvIHdyaXRlIHRoZSBnaXZlbiB1cGRhdGUgKGFuZCBh bnkgb3RoZXIgcGVuZGluZyB1cGRhdGVzKSBpZiB0aGUNCj4gUmVhZExvY2sNCj4gPiBpcw0KPiA+ ICAgICA+IGF2YWlsYWJsZS4gT3RoZXJ3aXNlLCB0aGUNCj4gPiAgICAgPiArICB1cGRhdGUgaXMg YWRkZWQgYXMgYSBwZW5kaW5nIHVwZGF0ZSBmb3IgdGhlIGdpdmVuIHZhcmlhYmxlIHN0b3JlIGFu ZCBpdA0KPiB3aWxsDQo+ID4gYmUNCj4gPiAgICAgPiBmbHVzaGVkIHRvIHRoZSBydW50aW1lIGNh Y2hlDQo+ID4gICAgID4gKyAgYXQgdGhlIG5leHQgb3Bwb3J0dW5pdHkgdGhlIFJlYWRMb2NrIGlz IGF2YWlsYWJsZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBWYXJpYWJs ZVJ1bnRpbWVDYWNoZSBWYXJpYWJsZSBydW50aW1lIGNhY2hlIHN0cnVjdHVyZSBmb3INCj4gPiB0 aGUNCj4gPiAgICAgPiBydW50aW1lIGNhY2hlIGJlaW5nIHN5bmNocm9uaXplZC4NCj4gPiAgICAg PiArICBAcGFyYW1baW5dIE9mZnNldCAgICAgICAgICAgICAgIE9mZnNldCBpbiBieXRlcyB0byBh cHBseSB0aGUgdXBkYXRlLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gTGVuZ3RoICAgICAgICAg ICAgICAgTGVuZ3RoIG9mIGRhdGEgaW4gYnl0ZXMgb2YgdGhlIHVwZGF0ZS4NCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBUaGUgdXBkYXRl IHdhcyBhZGRlZCBhcyBhIHBlbmRpbmcgdXBkYXRlDQo+ID4gICAgID4gc3VjY2Vzc2Z1bGx5LiBJ ZiB0aGUgdmFyaWFibGUgcnVudGltZQ0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2FjaGUgUmVhZExvY2sgd2FzIGF2YWlsYWJsZSwgdGhlIHJ1bnRpbWUgY2Fj aGUgd2FzDQo+ID4gICAgID4gdXBkYXRlZCBzdWNjZXNzZnVsbHkuDQo+ID4gICAgID4gKyAgQHJl dHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgICBUaGUgdm9sYXRpbGUgc3RvcmUgdG8gYmUgdXBk YXRlZCBpcyBub3QNCj4gPiAgICAgPiBpbml0aWFsaXplZCBwcm9wZXJseS4NCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtFRklfU1RBVFVTDQo+ID4gICAgID4gK1N5bmNo cm9uaXplUnVudGltZVZhcmlhYmxlQ2FjaGUgKA0KPiA+ICAgICA+ICsgIElOICBWQVJJQUJMRV9S VU5USU1FX0NBQ0hFICAqVmFyaWFibGVSdW50aW1lQ2FjaGUsDQo+ID4gICAgID4gKyAgSU4gIFVJ TlROICAgICAgICAgICAgICAgICAgIE9mZnNldCwNCj4gPiAgICAgPiArICBJTiAgVUlOVE4gICAg ICAgICAgICAgICAgICAgTGVuZ3RoDQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4g ICAgID4gKyAgaWYgKFZhcmlhYmxlUnVudGltZUNhY2hlID09IE5VTEwpIHsNCj4gPiAgICAgPiAr ICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gICAgID4gKyAgfSBlbHNlIGlm IChWYXJpYWJsZVJ1bnRpbWVDYWNoZS0+U3RvcmUgPT0gTlVMTCkgew0KPiA+ICAgICA+ICsgICAg Ly8gVGhlIHJ1bnRpbWUgY2FjaGUgbWF5IG5vdCBiZSBhY3RpdmUgb3IgYWxsb2NhdGVkIHlldC4N Cj4gPiAgICAgPiArICAgIC8vIEluIGVpdGhlciBjYXNlLCByZXR1cm4gRUZJX1NVQ0NFU1MgaW5z dGVhZCBvZg0KPiA+IEVGSV9OT1RfQVZBSUxBQkxFX1lFVC4NCj4gPiAgICAgPiArICAgIHJldHVy biBFRklfU1VDQ0VTUzsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsg IGlmICgobVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ICAgICA+ID5WYXJpYWJsZUdsb2JhbC5W YXJpYWJsZVJ1bnRpbWVDYWNoZUNvbnRleHQuUGVuZGluZ1VwZGF0ZSA9PSBOVUxMKQ0KPiB8fA0K PiA+ICAgICA+ICsgICAgICAobVZhcmlhYmxlTW9kdWxlR2xvYmFsLQ0KPiA+ICAgICA+ID5WYXJp YWJsZUdsb2JhbC5WYXJpYWJsZVJ1bnRpbWVDYWNoZUNvbnRleHQuUmVhZExvY2sgPT0gTlVMTCkp DQo+ID4gICAgID4gKyAgew0KPiA+ICAgICA+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsN Cj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIGlmICgqKG1WYXJpYWJs ZU1vZHVsZUdsb2JhbC0NCj4gPiAgICAgPiA+VmFyaWFibGVHbG9iYWwuVmFyaWFibGVSdW50aW1l Q2FjaGVDb250ZXh0LlBlbmRpbmdVcGRhdGUpICYmDQo+ID4gICAgID4gKyAgICAgIChWYXJpYWJs ZVJ1bnRpbWVDYWNoZS0+UGVuZGluZ1VwZGF0ZUxlbmd0aCA+IDApKQ0KPiA+ICAgICA+ICsgIHsN Cj4gPiAgICAgPiArICAgIFZhcmlhYmxlUnVudGltZUNhY2hlLT5QZW5kaW5nVXBkYXRlTGVuZ3Ro ID0NCj4gPiAgICAgPiArICAgICAgKFVJTlQzMikoDQo+ID4gICAgID4gKyAgICAgICAgICAgICAg IE1BWCAoDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgKFVJTlROKShWYXJpYWJsZVJ1bnRp bWVDYWNoZS0+UGVuZGluZ1VwZGF0ZU9mZnNldCArDQo+ID4gICAgID4gVmFyaWFibGVSdW50aW1l Q2FjaGUtPlBlbmRpbmdVcGRhdGVMZW5ndGgpLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAg IE9mZnNldCArIExlbmd0aA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICkgLSBNSU4gKChV SU5UTilWYXJpYWJsZVJ1bnRpbWVDYWNoZS0+UGVuZGluZ1VwZGF0ZU9mZnNldCwNCj4gPiAgICAg PiBPZmZzZXQpDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICk7DQo+ID4gICAgID4gKyAgICBW YXJpYWJsZVJ1bnRpbWVDYWNoZS0+UGVuZGluZ1VwZGF0ZU9mZnNldCA9DQo+ID4gICAgID4gKyAg ICAgIChVSU5UMzIpTUlOICgoVUlOVE4pVmFyaWFibGVSdW50aW1lQ2FjaGUtPlBlbmRpbmdVcGRh dGVPZmZzZXQsDQo+ID4gICAgID4gT2Zmc2V0KTsNCj4gPiAgICAgPiArICB9IGVsc2Ugew0KPiA+ ICAgICA+ICsgICAgVmFyaWFibGVSdW50aW1lQ2FjaGUtPlBlbmRpbmdVcGRhdGVMZW5ndGggPSAo VUlOVDMyKUxlbmd0aDsNCj4gPiAgICAgPiArICAgIFZhcmlhYmxlUnVudGltZUNhY2hlLT5QZW5k aW5nVXBkYXRlT2Zmc2V0ID0gKFVJTlQzMilPZmZzZXQ7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArICAqKG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0NCj4gPiAgICAgPiA+ VmFyaWFibGVHbG9iYWwuVmFyaWFibGVSdW50aW1lQ2FjaGVDb250ZXh0LlBlbmRpbmdVcGRhdGUp ID0gVFJVRTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgaWYgKCoobVZhcmlhYmxlTW9kdWxl R2xvYmFsLQ0KPiA+ICAgICA+ID5WYXJpYWJsZUdsb2JhbC5WYXJpYWJsZVJ1bnRpbWVDYWNoZUNv bnRleHQuUmVhZExvY2spID09IEZBTFNFKSB7DQo+ID4gICAgID4gKyAgICByZXR1cm4gRmx1c2hQ ZW5kaW5nUnVudGltZVZhcmlhYmxlQ2FjaGVVcGRhdGVzICgpOw0KPiA+ICAgICA+ICsgIH0NCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICAgICA+ICt9 DQo+ID4gICAgID4gZGlmZiAtLWdpdA0KPiA+ICAgICA+DQo+ID4gYS9NZGVNb2R1bGVQa2cvVW5p dmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlU21tLmMNCj4gPiAg ICAgPg0KPiA+IGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVu dGltZUR4ZS9WYXJpYWJsZVNtbS5jDQo+ID4gICAgID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4g PiAgICAgPiBpbmRleCAwMDAwMDAwMDAwMDAuLmY3YmFjMDIyNzU3Nw0KPiA+ICAgICA+IC0tLSAv ZGV2L251bGwNCj4gPiAgICAgPiArKysNCj4gPiAgICAgPg0KPiA+IGIvTWRlTW9kdWxlUGtnL1Vu aXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZVNtbS5jDQo+ID4g ICAgID4gQEAgLTAsMCArMSwxMjY4IEBADQo+ID4gICAgID4gKy8qKiBAZmlsZQ0KPiA+ICAgICA+ ICsgIFRoZSBzYW1wbGUgaW1wbGVtZW50YXRpb24gZm9yIFNNTSB2YXJpYWJsZSBwcm90b2NvbC4g QW5kIHRoaXMgZHJpdmVyDQo+ID4gICAgID4gKyAgaW1wbGVtZW50cyBhbiBTTUkgaGFuZGxlciB0 byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBEWEUgcnVudGltZSBkcml2ZXINCj4gPiAgICAgPiArICB0 byBwcm92aWRlIHZhcmlhYmxlIHNlcnZpY2VzLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBD YXV0aW9uOiBUaGlzIG1vZHVsZSByZXF1aXJlcyBhZGRpdGlvbmFsIHJldmlldyB3aGVuIG1vZGlm aWVkLg0KPiA+ICAgICA+ICsgIFRoaXMgZHJpdmVyIHdpbGwgaGF2ZSBleHRlcm5hbCBpbnB1dCAt IHZhcmlhYmxlIGRhdGEgYW5kIGNvbW11bmljYXRlDQo+IGJ1ZmZlcg0KPiA+IGluDQo+ID4gICAg ID4gU01NIG1vZGUuDQo+ID4gICAgID4gKyAgVGhpcyBleHRlcm5hbCBpbnB1dCBtdXN0IGJlIHZh bGlkYXRlZCBjYXJlZnVsbHkgdG8gYXZvaWQgc2VjdXJpdHkgaXNzdWUgbGlrZQ0KPiA+ICAgICA+ ICsgIGJ1ZmZlciBvdmVyZmxvdywgaW50ZWdlciBvdmVyZmxvdy4NCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyAgU21tVmFyaWFibGVIYW5kbGVyKCkgd2lsbCByZWNlaXZlIHVudHJ1c3RlZCBpbnB1 dCBhbmQgZG8gYmFzaWMNCj4gdmFsaWRhdGlvbi4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg RWFjaCBzdWIgZnVuY3Rpb24gVmFyaWFibGVTZXJ2aWNlR2V0VmFyaWFibGUoKSwNCj4gPiAgICAg PiBWYXJpYWJsZVNlcnZpY2VHZXROZXh0VmFyaWFibGVOYW1lKCksDQo+ID4gICAgID4gKyAgVmFy aWFibGVTZXJ2aWNlU2V0VmFyaWFibGUoKSwgVmFyaWFibGVTZXJ2aWNlUXVlcnlWYXJpYWJsZUlu Zm8oKSwNCj4gPiAgICAgPiBSZWNsYWltRm9yT1MoKSwNCj4gPiAgICAgPiArICBTbW1WYXJpYWJs ZUdldFN0YXRpc3RpY3MoKSBzaG91bGQgYWxzbyBkbyB2YWxpZGF0aW9uIGJhc2VkIG9uIGl0cyBv d24NCj4gPiAgICAgPiBrbm93bGVkZ2UuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICtDb3B5cmln aHQgKGMpIDIwMTAgLSAyMDIyLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl ZC48QlI+DQo+ID4gICAgID4gK0NvcHlyaWdodCAoYykgMjAxOCwgTGluYXJvLCBMdGQuIEFsbCBy aWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ICAgICA+ICtTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog QlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsjaW5jbHVkZSA8UHJvdG9jb2wvU21tVmFyaWFibGUuaD4NCj4gPiAg ICAgPiArI2luY2x1ZGUgPFByb3RvY29sL1NtbUZpcm13YXJlVm9sdW1lQmxvY2suaD4NCj4gPiAg ICAgPiArI2luY2x1ZGUgPFByb3RvY29sL1NtbUZhdWx0VG9sZXJhbnRXcml0ZS5oPg0KPiA+ICAg ICA+ICsjaW5jbHVkZSA8UHJvdG9jb2wvTW1FbmRPZkR4ZS5oPg0KPiA+ICAgICA+ICsjaW5jbHVk ZSA8UHJvdG9jb2wvU21tVmFyQ2hlY2suaD4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyNpbmNs dWRlIDxMaWJyYXJ5L01tU2VydmljZXNUYWJsZUxpYi5oPg0KPiA+ICAgICA+ICsjaW5jbHVkZSA8 TGlicmFyeS9WYXJpYWJsZVBvbGljeUxpYi5oPg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArI2lu Y2x1ZGUgPEd1aWQvU21tVmFyaWFibGVDb21tb24uaD4NCj4gPiAgICAgPiArI2luY2x1ZGUgIlZh cmlhYmxlLmgiDQo+ID4gICAgID4gKyNpbmNsdWRlICJWYXJpYWJsZVBhcnNpbmcuaCINCj4gPiAg ICAgPiArI2luY2x1ZGUgIlZhcmlhYmxlUnVudGltZUNhY2hlLmgiDQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICtleHRlcm4gVkFSSUFCTEVfU1RPUkVfSEVBREVSICAqbU52VmFyaWFibGVDYWNoZTsN Cj4gPiAgICAgPiArDQo+ID4gICAgID4gK0JPT0xFQU4gIG1BdFJ1bnRpbWUgICAgICAgICAgICAg ID0gRkFMU0U7DQo+ID4gICAgID4gK1VJTlQ4ICAgICptVmFyaWFibGVCdWZmZXJQYXlsb2FkID0g TlVMTDsNCj4gPiAgICAgPiArVUlOVE4gICAgbVZhcmlhYmxlQnVmZmVyUGF5bG9hZFNpemU7DQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBTZWN1cmVCb290IEhvb2sg Zm9yIFNldFZhcmlhYmxlLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1baW5dIFZh cmlhYmxlTmFtZSAgICAgICAgICAgICAgICAgTmFtZSBvZiBWYXJpYWJsZSB0byBiZSBmb3VuZC4N Cj4gPiAgICAgPiArICBAcGFyYW1baW5dIFZlbmRvckd1aWQgICAgICAgICAgICAgICAgICAgVmFy aWFibGUgdmVuZG9yIEdVSUQuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAg PiArVk9JRA0KPiA+ICAgICA+ICtFRklBUEkNCj4gPiAgICAgPiArU2VjdXJlQm9vdEhvb2sgKA0K PiA+ICAgICA+ICsgIElOIENIQVIxNiAgICAqVmFyaWFibGVOYW1lLA0KPiA+ICAgICA+ICsgIElO IEVGSV9HVUlEICAqVmVuZG9yR3VpZA0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0KPiA+ ICAgICA+ICsgIHJldHVybjsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr LyoqDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFRoaXMgY29kZSBzZXRzIHZhcmlhYmxlIGlu IHN0b3JhZ2UgYmxvY2tzIChWb2xhdGlsZSBvciBOb24tVm9sYXRpbGUpLg0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICBAcGFyYW0gVmFyaWFibGVOYW1lICAgICAgICAgICAgICAgICAgICAgTmFt ZSBvZiBWYXJpYWJsZSB0byBiZSBmb3VuZC4NCj4gPiAgICAgPiArICBAcGFyYW0gVmVuZG9yR3Vp ZCAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUgdmVuZG9yIEdVSUQuDQo+ID4gICAgID4g KyAgQHBhcmFtIEF0dHJpYnV0ZXMgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSB2YWx1 ZSBvZiB0aGUgdmFyaWFibGUgZm91bmQNCj4gPiAgICAgPiArICBAcGFyYW0gRGF0YVNpemUgICAg ICAgICAgICAgICAgICAgICAgICAgU2l6ZSBvZiBEYXRhIGZvdW5kLiBJZiBzaXplIGlzIGxlc3Mg dGhhbiB0aGUNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGF0YSwgdGhpcyB2YWx1ZSBjb250YWlucyB0aGUgcmVxdWlyZWQgc2l6ZS4NCj4gPiAg ICAgPiArICBAcGFyYW0gRGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSBwb2lu dGVyLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFN RVRFUiAgICAgICAgICAgSW52YWxpZCBwYXJhbWV0ZXIuDQo+ID4gICAgID4gKyAgQHJldHVybiBF RklfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIFNldCBzdWNjZXNzZnVsbHkuDQo+ID4gICAg ID4gKyAgQHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUyAgICAgICAgICAgIFJlc291cmNlIG5v dCBlbm91Z2ggdG8gc2V0DQo+ID4gdmFyaWFibGUuDQo+ID4gICAgID4gKyAgQHJldHVybiBFRklf Tk9UX0ZPVU5EICAgICAgICAgICAgICAgICAgIE5vdCBmb3VuZC4NCj4gPiAgICAgPiArICBAcmV0 dXJuIEVGSV9XUklURV9QUk9URUNURUQgICAgICAgICAgICAgVmFyaWFibGUgaXMgcmVhZC1vbmx5 Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4g PiAgICAgPiArRUZJQVBJDQo+ID4gICAgID4gK1NtbVZhcmlhYmxlU2V0VmFyaWFibGUgKA0KPiA+ ICAgICA+ICsgIElOIENIQVIxNiAgICAqVmFyaWFibGVOYW1lLA0KPiA+ICAgICA+ICsgIElOIEVG SV9HVUlEICAqVmVuZG9yR3VpZCwNCj4gPiAgICAgPiArICBJTiBVSU5UMzIgICAgQXR0cmlidXRl cywNCj4gPiAgICAgPiArICBJTiBVSU5UTiAgICAgRGF0YVNpemUsDQo+ID4gICAgID4gKyAgSU4g Vk9JRCAgICAgICpEYXRhDQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4g KyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ ICAgICA+ICsgIC8vIERpc2FibGUgd3JpdGUgcHJvdGVjdGlvbiB3aGVuIHRoZSBjYWxsaW5nIFNl dFZhcmlhYmxlKCkgdGhyb3VnaA0KPiA+ICAgICA+IEVGSV9TTU1fVkFSSUFCTEVfUFJPVE9DT0wu DQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBtUmVxdWVzdFNvdXJjZSA9IFZhckNoZWNr RnJvbVRydXN0ZWQ7DQo+ID4gICAgID4gKyAgU3RhdHVzICAgICAgICAgPSBWYXJpYWJsZVNlcnZp Y2VTZXRWYXJpYWJsZSAoDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxl TmFtZSwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgVmVuZG9yR3VpZCwNCj4gPiAg ICAgPiArICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlcywNCj4gPiAgICAgPiArICAgICAg ICAgICAgICAgICAgICAgRGF0YVNpemUsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAg IERhdGENCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiAgICAgPiArICBt UmVxdWVzdFNvdXJjZSA9IFZhckNoZWNrRnJvbVVudHJ1c3RlZDsNCj4gPiAgICAgPiArICByZXR1 cm4gU3RhdHVzOw0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICtFRklfU01N X1ZBUklBQkxFX1BST1RPQ09MICBnU21tVmFyaWFibGUgPSB7DQo+ID4gICAgID4gKyAgVmFyaWFi bGVTZXJ2aWNlR2V0VmFyaWFibGUsDQo+ID4gICAgID4gKyAgVmFyaWFibGVTZXJ2aWNlR2V0TmV4 dFZhcmlhYmxlTmFtZSwNCj4gPiAgICAgPiArICBTbW1WYXJpYWJsZVNldFZhcmlhYmxlLA0KPiA+ ICAgICA+ICsgIFZhcmlhYmxlU2VydmljZVF1ZXJ5VmFyaWFibGVJbmZvDQo+ID4gICAgID4gK307 DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICtFREtJSV9TTU1fVkFSX0NIRUNLX1BST1RPQ09MICBt U21tVmFyQ2hlY2sgPSB7DQo+ID4gICAgID4gKyAgVmFyQ2hlY2tSZWdpc3RlclNldFZhcmlhYmxl Q2hlY2tIYW5kbGVyLA0KPiA+ICAgICA+ICsgIFZhckNoZWNrVmFyaWFibGVQcm9wZXJ0eVNldCwN Cj4gPiAgICAgPiArICBWYXJDaGVja1ZhcmlhYmxlUHJvcGVydHlHZXQNCj4gPiAgICAgPiArfTsN Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIFJldHVybiBUUlVFIGlm IEV4aXRCb290U2VydmljZXMgKCkgaGFzIGJlZW4gY2FsbGVkLg0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICBAcmV0dmFsIFRSVUUgSWYgRXhpdEJvb3RTZXJ2aWNlcyAoKSBoYXMgYmVlbiBjYWxs ZWQuDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtCT09MRUFODQo+ID4gICAgID4gK0F0UnVu dGltZSAoDQo+ID4gICAgID4gKyAgVk9JRA0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0K PiA+ICAgICA+ICsgIHJldHVybiBtQXRSdW50aW1lOw0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBJbml0aWFsaXplcyBhIGJhc2ljIG11dHVh bCBleGNsdXNpb24gbG9jay4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgVGhpcyBmdW5jdGlv biBpbml0aWFsaXplcyBhIGJhc2ljIG11dHVhbCBleGNsdXNpb24gbG9jayB0byB0aGUgcmVsZWFz ZWQNCj4gc3RhdGUNCj4gPiAgICAgPiArICBhbmQgcmV0dXJucyB0aGUgbG9jay4gIEVhY2ggbG9j ayBwcm92aWRlcyBtdXR1YWwgZXhjbHVzaW9uIGFjY2VzcyBhdCBpdHMNCj4gPiB0YXNrDQo+ID4g ICAgID4gKyAgcHJpb3JpdHkgbGV2ZWwuICBTaW5jZSB0aGVyZSBpcyBubyBwcmVlbXB0aW9uIG9y IG11bHRpcHJvY2Vzc29yIHN1cHBvcnQgaW4NCj4gPiBFRkksDQo+ID4gICAgID4gKyAgYWNxdWly aW5nIHRoZSBsb2NrIG9ubHkgY29uc2lzdHMgb2YgcmFpc2luZyB0byB0aGUgbG9ja3MgVFBMLg0K PiA+ICAgICA+ICsgIElmIExvY2sgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gPiAgICAgPiAr ICBJZiBQcmlvcml0eSBpcyBub3QgYSB2YWxpZCBUUEwgdmFsdWUsIHRoZW4gQVNTRVJUKCkuDQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbSAgTG9jayAgICAgICBBIHBvaW50ZXIgdG8g dGhlIGxvY2sgZGF0YSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZS4NCj4gPiAgICAgPiArICBAcGFy YW0gIFByaW9yaXR5ICAgRUZJIFRQTCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGxvY2suDQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR1cm4gVGhlIGxvY2suDQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX0xPQ0sgKg0KPiA+ICAgICA+ICtJbml0aWFsaXpl TG9jayAoDQo+ID4gICAgID4gKyAgSU4gT1VUIEVGSV9MT0NLICAqTG9jaywNCj4gPiAgICAgPiAr ICBJTiBFRklfVFBMICAgICAgIFByaW9yaXR5DQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7 DQo+ID4gICAgID4gKyAgcmV0dXJuIExvY2s7DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIEFjcXVpcmVzIGxvY2sgb25seSBhdCBib290IHRp bWUuIFNpbXBseSByZXR1cm5zIGF0IHJ1bnRpbWUuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsg IFRoaXMgaXMgYSB0ZW1wZXJhcnkgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHJlbW92ZWQgd2hlbg0K PiA+ICAgICA+ICsgIEVmaUFjcXVpcmVMb2NrKCkgaW4gVWVmaUxpYiBjYW4gaGFuZGxlIHRoZSBj YWxsIGluIFVFRkkNCj4gPiAgICAgPiArICBSdW50aW1lciBkcml2ZXIgaW4gUlQgcGhhc2UuDQo+ ID4gICAgID4gKyAgSXQgY2FsbHMgRWZpQWNxdWlyZUxvY2soKSBhdCBib290IHRpbWUsIGFuZCBz aW1wbHkgcmV0dXJucw0KPiA+ICAgICA+ICsgIGF0IHJ1bnRpbWUuDQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsgIEBwYXJhbSAgTG9jayAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgbG9jayB0byBh Y3F1aXJlLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK1ZPSUQNCj4g PiAgICAgPiArQWNxdWlyZUxvY2tPbmx5QXRCb290VGltZSAoDQo+ID4gICAgID4gKyAgSU4gRUZJ X0xPQ0sgICpMb2NrDQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gK30N Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIFJlbGVhc2VzIGxvY2sg b25seSBhdCBib290IHRpbWUuIFNpbXBseSByZXR1cm5zIGF0IHJ1bnRpbWUuDQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsgIFRoaXMgaXMgYSB0ZW1wZXJhcnkgZnVuY3Rpb24gd2hpY2ggd2lsbCBi ZSByZW1vdmVkIHdoZW4NCj4gPiAgICAgPiArICBFZmlSZWxlYXNlTG9jaygpIGluIFVlZmlMaWIg Y2FuIGhhbmRsZSB0aGUgY2FsbCBpbiBVRUZJDQo+ID4gICAgID4gKyAgUnVudGltZXIgZHJpdmVy IGluIFJUIHBoYXNlLg0KPiA+ICAgICA+ICsgIEl0IGNhbGxzIEVmaVJlbGVhc2VMb2NrKCkgYXQg Ym9vdCB0aW1lIGFuZCBzaW1wbHkgcmV0dXJucw0KPiA+ICAgICA+ICsgIGF0IHJ1bnRpbWUuDQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbSAgTG9jayAgICAgICAgIEEgcG9pbnRlciB0 byB0aGUgbG9jayB0byByZWxlYXNlLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4g ICAgID4gK1ZPSUQNCj4gPiAgICAgPiArUmVsZWFzZUxvY2tPbmx5QXRCb290VGltZSAoDQo+ID4g ICAgID4gKyAgSU4gRUZJX0xPQ0sgICpMb2NrDQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7 DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsg IFJldHJpZXZlIHRoZSBTTU0gRmF1bHQgVG9sZXJlbnQgV3JpdGUgcHJvdG9jb2wgaW50ZXJmYWNl Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1bb3V0XSBGdHdQcm90b2NvbCAgICAg ICBUaGUgaW50ZXJmYWNlIG9mIFNNTSBGdHcgcHJvdG9jb2wNCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIFNNTSBGVFcgcHJvdG9jb2wg aW5zdGFuY2Ugd2FzIGZvdW5kDQo+ID4gYW5kDQo+ID4gICAgID4gcmV0dXJuZWQgaW4gRnR3UHJv dG9jb2wuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgVGhlIFNN TSBGVFcgcHJvdG9jb2wgaW5zdGFuY2Ugd2FzIG5vdA0KPiA+ICAgICA+IGZvdW5kLg0KPiA+ICAg ICA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIFNhclByb3RvY29sIGlzIE5VTEwu DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX1NUQVRVUw0KPiA+ ICAgICA+ICtHZXRGdHdQcm90b2NvbCAoDQo+ID4gICAgID4gKyAgT1VUIFZPSUQgICoqRnR3UHJv dG9jb2wNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBFRklfU1RB VFVTICBTdGF0dXM7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAg Ly8gTG9jYXRlIFNtbSBGYXVsdCBUb2xlcmVudCBXcml0ZSBwcm90b2NvbA0KPiA+ICAgICA+ICsg IC8vDQo+ID4gICAgID4gKyAgU3RhdHVzID0gZ01tc3QtPk1tTG9jYXRlUHJvdG9jb2wgKA0KPiA+ ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICZnRWZpU21tRmF1bHRUb2xlcmFudFdyaXRlUHJv dG9jb2xHdWlkLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ID4gICAg ID4gKyAgICAgICAgICAgICAgICAgICAgRnR3UHJvdG9jb2wNCj4gPiAgICAgPiArICAgICAgICAg ICAgICAgICAgICApOw0KPiA+ICAgICA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gICAgID4gK30N Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIFJldHJpZXZlIHRoZSBT TU0gRlZCIHByb3RvY29sIGludGVyZmFjZSBieSBIQU5ETEUuDQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsgIEBwYXJhbVtpbl0gIEZ2QmxvY2tIYW5kbGUgICAgIFRoZSBoYW5kbGUgb2YgU01NIEZW QiBwcm90b2NvbCB0aGF0DQo+ID4gcHJvdmlkZXMNCj4gPiAgICAgPiBzZXJ2aWNlcyBmb3INCj4g PiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkaW5nLCB3cml0aW5n LCBhbmQgZXJhc2luZyB0aGUgdGFyZ2V0IGJsb2NrLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtvdXRd IEZ2QmxvY2sgICAgICAgICAgIFRoZSBpbnRlcmZhY2Ugb2YgU01NIEZWQiBwcm90b2NvbA0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUg aW50ZXJmYWNlIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkDQo+ID4gICAgID4gcHJvdG9j b2wgd2FzIHJldHVybmVkLg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAg ICAgIFRoZSBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGUgU01NDQo+IEZWQg0KPiA+ICAgICA+ IHByb3RvY29sLg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIEZ2 QmxvY2tIYW5kbGUgaXMgbm90IGEgdmFsaWQNCj4gPiBFRklfSEFORExFDQo+ID4gICAgID4gb3Ig RnZCbG9jayBpcyBOVUxMLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4g K0VGSV9TVEFUVVMNCj4gPiAgICAgPiArR2V0RnZiQnlIYW5kbGUgKA0KPiA+ICAgICA+ICsgIElO ICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAgICAgICBGdkJsb2NrSGFuZGxlLA0KPiA+ ICAgICA+ICsgIE9VVCBFRklfRklSTVdBUkVfVk9MVU1FX0JMT0NLX1BST1RPQ09MICAqKkZ2Qmxv Y2sNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICAvLw0KPiA+ICAg ICA+ICsgIC8vIFRvIGdldCB0aGUgU01NIEZWQiBwcm90b2NvbCBpbnRlcmZhY2Ugb24gdGhlIGhh bmRsZQ0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgcmV0dXJuIGdNbXN0LT5NbUhhbmRs ZVByb3RvY29sICgNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgRnZCbG9ja0hhbmRsZSwN Cj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgJmdFZmlTbW1GaXJtd2FyZVZvbHVtZUJsb2Nr UHJvdG9jb2xHdWlkLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKilGdkJs b2NrDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICk7DQo+ID4gICAgID4gK30NCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIEZ1bmN0aW9uIHJldHVybnMgYW4g YXJyYXkgb2YgaGFuZGxlcyB0aGF0IHN1cHBvcnQgdGhlIFNNTSBGVkIgcHJvdG9jb2wNCj4gPiAg ICAgPiArICBpbiBhIGJ1ZmZlciBhbGxvY2F0ZWQgZnJvbSBwb29sLg0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICBAcGFyYW1bb3V0XSAgTnVtYmVySGFuZGxlcyAgICBUaGUgbnVtYmVyIG9mIGhh bmRsZXMgcmV0dXJuZWQgaW4NCj4gQnVmZmVyLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtvdXRdICBC dWZmZXIgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyIHRvIHJldHVybiB0aGUNCj4g cmVxdWVzdGVkDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJy YXkgb2YgIGhhbmRsZXMgdGhhdCBzdXBwb3J0IFNNTSBGVkIgcHJvdG9jb2wuDQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBhcnJheSBv ZiBoYW5kbGVzIHdhcyByZXR1cm5lZCBpbiBCdWZmZXIsDQo+ID4gYW5kDQo+ID4gICAgID4gdGhl IG51bWJlciBvZg0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhh bmRsZXMgaW4gQnVmZmVyIHdhcyByZXR1cm5lZCBpbiBOdW1iZXJIYW5kbGVzLg0KPiA+ICAgICA+ ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIE5vIFNNTSBGVkIgaGFuZGxlIHdhcyBm b3VuZC4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBUaGVyZSBp cyBub3QgZW5vdWdoIHBvb2wgbWVtb3J5IHRvDQo+ID4gc3RvcmUNCj4gPiAgICAgPiB0aGUgbWF0 Y2hpbmcgcmVzdWx0cy4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiBOdW1iZXJIYW5kbGVzIGlzIE5VTEwgb3IgQnVmZmVyIGlzDQo+ID4gTlVMTC4NCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtFRklfU1RBVFVTDQo+ID4gICAgID4gK0dl dEZ2YkNvdW50QW5kQnVmZmVyICgNCj4gPiAgICAgPiArICBPVVQgVUlOVE4gICAgICAgKk51bWJl ckhhbmRsZXMsDQo+ID4gICAgID4gKyAgT1VUIEVGSV9IQU5ETEUgICoqQnVmZmVyDQo+ID4gICAg ID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0K PiA+ICAgICA+ICsgIFVJTlROICAgICAgIEJ1ZmZlclNpemU7DQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsgIGlmICgoTnVtYmVySGFuZGxlcyA9PSBOVUxMKSB8fCAoQnVmZmVyID09IE5VTEwpKSB7 DQo+ID4gICAgID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICAgICA+ ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQnVmZmVyU2l6ZSAgICAgPSAwOw0KPiA+ ICAgICA+ICsgICpOdW1iZXJIYW5kbGVzID0gMDsNCj4gPiAgICAgPiArICAqQnVmZmVyICAgICAg ICA9IE5VTEw7DQo+ID4gICAgID4gKyAgU3RhdHVzICAgICAgICAgPSBnTW1zdC0+TW1Mb2NhdGVI YW5kbGUgKA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnlQcm90b2Nv bCwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnRWZpU21tRmlybXdh cmVWb2x1bWVCbG9ja1Byb3RvY29sR3VpZCwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE5VTEwsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAm QnVmZmVyU2l6ZSwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICpCdWZm ZXINCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gICAgID4g KyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSAmJiAoU3RhdHVzICE9IEVGSV9CVUZGRVJfVE9PX1NN QUxMKSkgew0KPiA+ICAgICA+ICsgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ID4gICAgID4g KyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAqQnVmZmVyID0gQWxsb2NhdGVQb29sIChC dWZmZXJTaXplKTsNCj4gPiAgICAgPiArICBpZiAoKkJ1ZmZlciA9PSBOVUxMKSB7DQo+ID4gICAg ID4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gICAgID4gKyAgfQ0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICBTdGF0dXMgPSBnTW1zdC0+TW1Mb2NhdGVIYW5kbGUgKA0K PiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgIEJ5UHJvdG9jb2wsDQo+ID4gICAgID4gKyAg ICAgICAgICAgICAgICAgICAgJmdFZmlTbW1GaXJtd2FyZVZvbHVtZUJsb2NrUHJvdG9jb2xHdWlk LA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ID4gICAgID4gKyAgICAg ICAgICAgICAgICAgICAgJkJ1ZmZlclNpemUsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAg ICAgKkJ1ZmZlcg0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsgICpOdW1iZXJIYW5kbGVzID0gQnVmZmVyU2l6ZSAvIHNpemVvZiAoRUZJ X0hBTkRMRSk7DQo+ID4gICAgID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICAg ICA+ICsgICAgKk51bWJlckhhbmRsZXMgPSAwOw0KPiA+ICAgICA+ICsgICAgRnJlZVBvb2wgKCpC dWZmZXIpOw0KPiA+ICAgICA+ICsgICAgKkJ1ZmZlciA9IE5VTEw7DQo+ID4gICAgID4gKyAgfQ0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICAgICA+ICt9DQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBHZXQgdGhlIHZhcmlhYmxl IHN0YXRpc3RpY3MgaW5mb3JtYXRpb24gZnJvbSB0aGUgaW5mb3JtYXRpb24gYnVmZmVyDQo+ID4g cG9pbnRlZCBieQ0KPiA+ICAgICA+IGdWYXJpYWJsZUluZm8uDQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsgIENhdXRpb246IFRoaXMgZnVuY3Rpb24gbWF5IGJlIGludm9rZWQgYXQgU01NIHJ1bnRp bWUuDQo+ID4gICAgID4gKyAgSW5mb0VudHJ5IGFuZCBJbmZvU2l6ZSBhcmUgZXh0ZXJuYWwgaW5w dXQuIENhcmUgbXVzdCBiZSB0YWtlbiB0byBtYWtlDQo+ID4gc3VyZQ0KPiA+ICAgICA+IG5vdCBz ZWN1cml0eSBpc3N1ZSBhdCBydW50aW1lLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFy YW1baW4sIG91dF0gIEluZm9FbnRyeSAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBvZiB2YXJp YWJsZQ0KPiA+IGluZm9ybWF0aW9uDQo+ID4gICAgID4gZW50cnkuDQo+ID4gICAgID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gaW5wdXQsIHBvaW50IHRvIHRoZSB2YXJpYWJs ZSBpbmZvcm1hdGlvbiByZXR1cm5lZCBsYXN0DQo+ID4gdGltZS4NCj4gPiAgICAgPiBpZg0KPiA+ ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZm9FbnRyeS0+VmVuZG9y R3VpZCBpcyB6ZXJvLCByZXR1cm4gdGhlIGZpcnN0DQo+ID4gaW5mb3JtYXRpb24uDQo+ID4gICAg ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gb3V0cHV0LCBwb2ludCB0byB0 aGUgbmV4dCB2YXJpYWJsZSBpbmZvcm1hdGlvbi4NCj4gPiAgICAgPiArICBAcGFyYW1baW4sIG91 dF0gIEluZm9TaXplICAgICBPbiBpbnB1dCwgdGhlIHNpemUgb2YgdGhlIHZhcmlhYmxlDQo+IGlu Zm9ybWF0aW9uDQo+ID4gICAgID4gYnVmZmVyLg0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE9uIG91dHB1dCwgdGhlIHJldHVybmVkIHZhcmlhYmxlIGluZm9ybWF0 aW9uIHNpemUuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgIFRoZSB2YXJpYWJsZSBpbmZvcm1hdGlvbiBpcyBmb3VuZCBhbmQNCj4gcmV0dXJu ZWQNCj4gPiAgICAgPiBzdWNjZXNzZnVsbHkuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfVU5T VVBQT1JURUQgICAgICAgTm8gdmFyaWFibGUgaW5vZm9ybWF0aW9uIGV4aXN0cyBpbg0KPiA+IHZh cmlhYmxlDQo+ID4gICAgID4gZHJpdmVyLiBUaGUNCj4gPiAgICAgPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQY2RWYXJpYWJsZUNvbGxlY3RTdGF0aXN0aWNzIHNob3VsZCBiZSBz ZXQgVFJVRSB0bw0KPiA+IHN1cHBvcnQgaXQuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfQlVG RkVSX1RPT19TTUFMTCAgVGhlIGJ1ZmZlciBpcyB0b28gc21hbGwgdG8gaG9sZCB0aGUNCj4gbmV4 dA0KPiA+ICAgICA+IHZhcmlhYmxlIGluZm9ybWF0aW9uLg0KPiA+ICAgICA+ICsgIEByZXR2YWwg RUZJX0lOVkFMSURfUEFSQU1FVEVSIElucHV0IHBhcmFtZXRlciBpcyBpbnZhbGlkLg0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4gPiAgICAgPiAr U21tVmFyaWFibGVHZXRTdGF0aXN0aWNzICgNCj4gPiAgICAgPiArICBJTiBPVVQgVkFSSUFCTEVf SU5GT19FTlRSWSAgKkluZm9FbnRyeSwNCj4gPiAgICAgPiArICBJTiBPVVQgVUlOVE4gICAgICAg ICAgICAgICAgKkluZm9TaXplDQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAg ID4gKyAgVkFSSUFCTEVfSU5GT19FTlRSWSAgKlZhcmlhYmxlSW5mbzsNCj4gPiAgICAgPiArICBV SU5UTiAgICAgICAgICAgICAgICBOYW1lU2l6ZTsNCj4gPiAgICAgPiArICBVSU5UTiAgICAgICAg ICAgICAgICBTdGF0aXN0aWNzSW5mb1NpemU7DQo+ID4gICAgID4gKyAgQ0hBUjE2ICAgICAgICAg ICAgICAgKkluZm9OYW1lOw0KPiA+ICAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAgIEluZm9O YW1lTWF4U2l6ZTsNCj4gPiAgICAgPiArICBFRklfR1VJRCAgICAgICAgICAgICBWZW5kb3JHdWlk Ow0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBpZiAoSW5mb0VudHJ5ID09IE5VTEwpIHsNCj4g PiAgICAgPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gICAgID4gKyAg fQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBWYXJpYWJsZUluZm8gPSBnVmFyaWFibGVJbmZv Ow0KPiA+ICAgICA+ICsgIGlmIChWYXJpYWJsZUluZm8gPT0gTlVMTCkgew0KPiA+ICAgICA+ICsg ICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIFN0YXRpc3RpY3NJbmZvU2l6ZSA9IHNpemVvZiAoVkFSSUFCTEVfSU5GT19F TlRSWSk7DQo+ID4gICAgID4gKyAgaWYgKCpJbmZvU2l6ZSA8IFN0YXRpc3RpY3NJbmZvU2l6ZSkg ew0KPiA+ICAgICA+ICsgICAgKkluZm9TaXplID0gU3RhdGlzdGljc0luZm9TaXplOw0KPiA+ICAg ICA+ICsgICAgcmV0dXJuIEVGSV9CVUZGRVJfVE9PX1NNQUxMOw0KPiA+ICAgICA+ICsgIH0NCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyAgSW5mb05hbWUgICAgICAgID0gKENIQVIxNiAqKShJbmZv RW50cnkgKyAxKTsNCj4gPiAgICAgPiArICBJbmZvTmFtZU1heFNpemUgPSAoKkluZm9TaXplIC0g c2l6ZW9mIChWQVJJQUJMRV9JTkZPX0VOVFJZKSk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsg IENvcHlHdWlkICgmVmVuZG9yR3VpZCwgJkluZm9FbnRyeS0+VmVuZG9yR3VpZCk7DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgIGlmIChJc1plcm9HdWlkICgmVmVuZG9yR3VpZCkpIHsNCj4gPiAg ICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICAvLyBSZXR1cm4gdGhlIGZpcnN0IHZhcmlhYmxl IGluZm8NCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICBOYW1lU2l6ZSAgICAgICAg ICAgPSBTdHJTaXplIChWYXJpYWJsZUluZm8tPk5hbWUpOw0KPiA+ICAgICA+ICsgICAgU3RhdGlz dGljc0luZm9TaXplID0gc2l6ZW9mIChWQVJJQUJMRV9JTkZPX0VOVFJZKSArIE5hbWVTaXplOw0K PiA+ICAgICA+ICsgICAgaWYgKCpJbmZvU2l6ZSA8IFN0YXRpc3RpY3NJbmZvU2l6ZSkgew0KPiA+ ICAgICA+ICsgICAgICAqSW5mb1NpemUgPSBTdGF0aXN0aWNzSW5mb1NpemU7DQo+ID4gICAgID4g KyAgICAgIHJldHVybiBFRklfQlVGRkVSX1RPT19TTUFMTDsNCj4gPiAgICAgPiArICAgIH0NCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyAgICBDb3B5TWVtIChJbmZvRW50cnksIFZhcmlhYmxlSW5m bywgc2l6ZW9mIChWQVJJQUJMRV9JTkZPX0VOVFJZKSk7DQo+ID4gICAgID4gKyAgICBDb3B5TWVt IChJbmZvTmFtZSwgVmFyaWFibGVJbmZvLT5OYW1lLCBOYW1lU2l6ZSk7DQo+ID4gICAgID4gKyAg ICAqSW5mb1NpemUgPSBTdGF0aXN0aWNzSW5mb1NpemU7DQo+ID4gICAgID4gKyAgICByZXR1cm4g RUZJX1NVQ0NFU1M7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAv Lw0KPiA+ICAgICA+ICsgIC8vIEdldCB0aGUgbmV4dCB2YXJpYWJsZSBpbmZvDQo+ID4gICAgID4g KyAgLy8NCj4gPiAgICAgPiArICB3aGlsZSAoVmFyaWFibGVJbmZvICE9IE5VTEwpIHsNCj4gPiAg ICAgPiArICAgIGlmIChDb21wYXJlR3VpZCAoJlZhcmlhYmxlSW5mby0+VmVuZG9yR3VpZCwgJlZl bmRvckd1aWQpKSB7DQo+ID4gICAgID4gKyAgICAgIE5hbWVTaXplID0gU3RyU2l6ZSAoVmFyaWFi bGVJbmZvLT5OYW1lKTsNCj4gPiAgICAgPiArICAgICAgaWYgKE5hbWVTaXplIDw9IEluZm9OYW1l TWF4U2l6ZSkgew0KPiA+ICAgICA+ICsgICAgICAgIGlmIChDb21wYXJlTWVtIChWYXJpYWJsZUlu Zm8tPk5hbWUsIEluZm9OYW1lLCBOYW1lU2l6ZSkgPT0gMCkgew0KPiA+ICAgICA+ICsgICAgICAg ICAgLy8NCj4gPiAgICAgPiArICAgICAgICAgIC8vIEZpbmQgdGhlIG1hdGNoIG9uZQ0KPiA+ICAg ICA+ICsgICAgICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgICAgIFZhcmlhYmxlSW5mbyA9IFZh cmlhYmxlSW5mby0+TmV4dDsNCj4gPiAgICAgPiArICAgICAgICAgIGJyZWFrOw0KPiA+ICAgICA+ ICsgICAgICAgIH0NCj4gPiAgICAgPiArICAgICAgfQ0KPiA+ICAgICA+ICsgICAgfQ0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArICAgIFZhcmlhYmxlSW5mbyA9IFZhcmlhYmxlSW5mby0+TmV4dDsN Cj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIGlmIChWYXJpYWJsZUlu Zm8gPT0gTlVMTCkgew0KPiA+ICAgICA+ICsgICAgKkluZm9TaXplID0gMDsNCj4gPiAgICAgPiAr ICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gT3V0cHV0IHRoZSBuZXcgdmFyaWFibGUgaW5m bw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgTmFtZVNpemUgICAgICAgICAgID0gU3Ry U2l6ZSAoVmFyaWFibGVJbmZvLT5OYW1lKTsNCj4gPiAgICAgPiArICBTdGF0aXN0aWNzSW5mb1Np emUgPSBzaXplb2YgKFZBUklBQkxFX0lORk9fRU5UUlkpICsgTmFtZVNpemU7DQo+ID4gICAgID4g KyAgaWYgKCpJbmZvU2l6ZSA8IFN0YXRpc3RpY3NJbmZvU2l6ZSkgew0KPiA+ICAgICA+ICsgICAg KkluZm9TaXplID0gU3RhdGlzdGljc0luZm9TaXplOw0KPiA+ICAgICA+ICsgICAgcmV0dXJuIEVG SV9CVUZGRVJfVE9PX1NNQUxMOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgQ29weU1lbSAoSW5mb0VudHJ5LCBWYXJpYWJsZUluZm8sIHNpemVvZiAoVkFSSUFCTEVf SU5GT19FTlRSWSkpOw0KPiA+ICAgICA+ICsgIENvcHlNZW0gKEluZm9OYW1lLCBWYXJpYWJsZUlu Zm8tPk5hbWUsIE5hbWVTaXplKTsNCj4gPiAgICAgPiArICAqSW5mb1NpemUgPSBTdGF0aXN0aWNz SW5mb1NpemU7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsN Cj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAg Q29tbXVuaWNhdGlvbiBzZXJ2aWNlIFNNSSBIYW5kbGVyIGVudHJ5Lg0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICBUaGlzIFNNSSBoYW5kbGVyIHByb3ZpZGVzIHNlcnZpY2VzIGZvciB0aGUgdmFy aWFibGUgd3JhcHBlciBkcml2ZXIuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIENhdXRpb246 IFRoaXMgZnVuY3Rpb24gbWF5IHJlY2VpdmUgdW50cnVzdGVkIGlucHV0Lg0KPiA+ICAgICA+ICsg IFRoaXMgdmFyaWFibGUgZGF0YSBhbmQgY29tbXVuaWNhdGUgYnVmZmVyIGFyZSBleHRlcm5hbCBp bnB1dCwgc28gdGhpcw0KPiA+IGZ1bmN0aW9uDQo+ID4gICAgID4gd2lsbCBkbyBiYXNpYyB2YWxp ZGF0aW9uLg0KPiA+ICAgICA+ICsgIEVhY2ggc3ViIGZ1bmN0aW9uIFZhcmlhYmxlU2VydmljZUdl dFZhcmlhYmxlKCksDQo+ID4gICAgID4gVmFyaWFibGVTZXJ2aWNlR2V0TmV4dFZhcmlhYmxlTmFt ZSgpLA0KPiA+ICAgICA+ICsgIFZhcmlhYmxlU2VydmljZVNldFZhcmlhYmxlKCksIFZhcmlhYmxl U2VydmljZVF1ZXJ5VmFyaWFibGVJbmZvKCksDQo+ID4gICAgID4gUmVjbGFpbUZvck9TKCksDQo+ ID4gICAgID4gKyAgU21tVmFyaWFibGVHZXRTdGF0aXN0aWNzKCkgc2hvdWxkIGFsc28gZG8gdmFs aWRhdGlvbiBiYXNlZCBvbiBpdHMgb3duDQo+ID4gICAgID4ga25vd2xlZGdlLg0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArICBAcGFyYW1baW5dICAgICBEaXNwYXRjaEhhbmRsZSAgVGhlIHVuaXF1 ZSBoYW5kbGUgYXNzaWduZWQgdG8gdGhpcw0KPiBoYW5kbGVyDQo+ID4gYnkNCj4gPiAgICAgPiBT bWlIYW5kbGVyUmVnaXN0ZXIoKS4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dICAgICBSZWdpc3Rl ckNvbnRleHQgUG9pbnRzIHRvIGFuIG9wdGlvbmFsIGhhbmRsZXIgY29udGV4dA0KPiA+IHdoaWNo DQo+ID4gICAgID4gd2FzIHNwZWNpZmllZCB3aGVuIHRoZQ0KPiA+ICAgICA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyIHdhcyByZWdpc3RlcmVkLg0KPiA+ICAgICA+ ICsgIEBwYXJhbVtpbiwgb3V0XSBDb21tQnVmZmVyICAgICBBIHBvaW50ZXIgdG8gYSBjb2xsZWN0 aW9uIG9mIGRhdGEgaW4NCj4gPiBtZW1vcnkNCj4gPiAgICAgPiB0aGF0IHdpbGwNCj4gPiAgICAg PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgY29udmV5ZWQgZnJvbSBhIG5v bi1TTU0gZW52aXJvbm1lbnQgaW50byBhbg0KPiBTTU0NCj4gPiAgICAgPiBlbnZpcm9ubWVudC4N Cj4gPiAgICAgPiArICBAcGFyYW1baW4sIG91dF0gQ29tbUJ1ZmZlclNpemUgVGhlIHNpemUgb2Yg dGhlIENvbW1CdWZmZXIuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGludGVycnVwdCB3YXMgaGFuZGxlZCBh bmQNCj4gPiBxdWllc2NlZC4NCj4gPiAgICAgPiBObyBvdGhlciBoYW5kbGVycw0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIHN0 aWxsIGJlIGNhbGxlZC4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9XQVJOX0lOVEVSUlVQVF9T T1VSQ0VfUVVJRVNDRUQgIFRoZSBpbnRlcnJ1cHQgaGFzDQo+ID4gYmVlbg0KPiA+ICAgICA+IHF1 aWVzY2VkIGJ1dCBvdGhlciBoYW5kbGVycyBzaG91bGQNCj4gPiAgICAgPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0aWxsIGJlIGNhbGxlZC4NCj4gPiAg ICAgPiArICBAcmV0dmFsIEVGSV9XQVJOX0lOVEVSUlVQVF9TT1VSQ0VfUEVORElORyAgIFRoZSBp bnRlcnJ1cHQgaXMNCj4gc3RpbGwNCj4gPiAgICAgPiBwZW5kaW5nIGFuZCBvdGhlciBoYW5kbGVy cyBzaG91bGQgc3RpbGwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJlIGNhbGxlZC4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9JTlRF UlJVUFRfUEVORElORyAgICAgICAgICAgICAgIFRoZSBpbnRlcnJ1cHQgY291bGQgbm90IGJlDQo+ ID4gICAgID4gcXVpZXNjZWQuDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtFRklfU1RBVFVT DQo+ID4gICAgID4gK0VGSUFQSQ0KPiA+ICAgICA+ICtTbW1WYXJpYWJsZUhhbmRsZXIgKA0KPiA+ ICAgICA+ICsgIElOICAgICBFRklfSEFORExFICBEaXNwYXRjaEhhbmRsZSwNCj4gPiAgICAgPiAr ICBJTiAgICAgQ09OU1QgVk9JRCAgKlJlZ2lzdGVyQ29udGV4dCwNCj4gPiAgICAgPiArICBJTiBP VVQgVk9JRCAgICAgICAgKkNvbW1CdWZmZXIsDQo+ID4gICAgID4gKyAgSU4gT1VUIFVJTlROICAg ICAgICpDb21tQnVmZmVyU2l6ZQ0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0KPiA+ICAg ICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFN0YXR1czsNCj4gPiAgICAgPiArICBTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfSEVB REVSDQo+ID4gICAgID4gKlNtbVZhcmlhYmxlRnVuY3Rpb25IZWFkZXI7DQo+ID4gICAgID4gKyAg U01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0FDQ0VTU19WQVJJQUJMRQ0KPiA+ICAgICA+ICpTbW1W YXJpYWJsZUhlYWRlcjsNCj4gPiAgICAgPiArICBTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfR0VU X05FWFRfVkFSSUFCTEVfTkFNRQ0KPiA+ICAgICA+ICpHZXROZXh0VmFyaWFibGVOYW1lOw0KPiA+ ICAgICA+ICsgIFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9RVUVSWV9WQVJJQUJMRV9JTkZPDQo+ ID4gICAgID4gKlF1ZXJ5VmFyaWFibGVJbmZvOw0KPiA+ICAgICA+ICsgIFNNTV9WQVJJQUJMRV9D T01NVU5JQ0FURV9HRVRfUEFZTE9BRF9TSVpFDQo+ID4gICAgID4gKkdldFBheWxvYWRTaXplOw0K PiA+ICAgICA+ICsNCj4gPiBTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfUlVOVElNRV9WQVJJQUJM RV9DQUNIRV9DT05URVhUDQo+ID4gICAgID4gKlJ1bnRpbWVWYXJpYWJsZUNhY2hlQ29udGV4dDsN Cj4gPiAgICAgPiArICBTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfR0VUX1JVTlRJTUVfQ0FDSEVf SU5GTw0KPiA+ICAgICA+ICpHZXRSdW50aW1lQ2FjaGVJbmZvOw0KPiA+ICAgICA+ICsgIFNNTV9W QVJJQUJMRV9DT01NVU5JQ0FURV9MT0NLX1ZBUklBQkxFDQo+ID4gICAgID4gKlZhcmlhYmxlVG9M b2NrOw0KPiA+ICAgICA+ICsgIFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9WQVJfQ0hFQ0tfVkFS SUFCTEVfUFJPUEVSVFkNCj4gPiAgICAgPiAqQ29tbVZhcmlhYmxlUHJvcGVydHk7DQo+ID4gICAg ID4gKyAgVkFSSUFCTEVfSU5GT19FTlRSWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKlZhcmlhYmxlSW5mbzsNCj4gPiAgICAgPiArICBWQVJJQUJMRV9SVU5USU1FX0NBQ0hF X0NPTlRFWFQNCj4gPiAqVmFyaWFibGVDYWNoZUNvbnRleHQ7DQo+ID4gICAgID4gKyAgVkFSSUFC TEVfU1RPUkVfSEVBREVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlZhcmlh YmxlQ2FjaGU7DQo+ID4gICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgSW5mb1NpemU7DQo+ID4gICAgID4gKyAgVUlOVE4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZUJ1ZmZl clNpemU7DQo+ID4gICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQ29tbUJ1ZmZlclBheWxvYWRTaXplOw0KPiA+ICAgICA+ICsg IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFRlbXBDb21tQnVmZmVyU2l6ZTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAg ICAgPiArICAvLyBJZiBpbnB1dCBpcyBpbnZhbGlkLCBzdG9wIHByb2Nlc3NpbmcgdGhpcyBTTUkN Cj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIGlmICgoQ29tbUJ1ZmZlciA9PSBOVUxMKSB8 fCAoQ29tbUJ1ZmZlclNpemUgPT0gTlVMTCkpIHsNCj4gPiAgICAgPiArICAgIHJldHVybiBFRklf U1VDQ0VTUzsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFRlbXBD b21tQnVmZmVyU2l6ZSA9ICpDb21tQnVmZmVyU2l6ZTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgaWYgKFRlbXBDb21tQnVmZmVyU2l6ZSA8DQo+ID4gU01NX1ZBUklBQkxFX0NPTU1VTklDQVRF X0hFQURFUl9TSVpFKSB7DQo+ID4gICAgID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiU21t VmFyaWFibGVIYW5kbGVyOiBTTU0gY29tbXVuaWNhdGlvbg0KPiA+IGJ1ZmZlcg0KPiA+ICAgICA+ IHNpemUgaW52YWxpZCFcbiIpKTsNCj4gPiAgICAgPiArICAgIHJldHVybiBFRklfU1VDQ0VTUzsN Cj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIENvbW1CdWZmZXJQYXls b2FkU2l6ZSA9IFRlbXBDb21tQnVmZmVyU2l6ZSAtDQo+ID4gICAgID4gU01NX1ZBUklBQkxFX0NP TU1VTklDQVRFX0hFQURFUl9TSVpFOw0KPiA+ICAgICA+ICsgIGlmIChDb21tQnVmZmVyUGF5bG9h ZFNpemUgPiBtVmFyaWFibGVCdWZmZXJQYXlsb2FkU2l6ZSkgew0KPiA+ICAgICA+ICsgICAgREVC VUcgKChERUJVR19FUlJPUiwgIlNtbVZhcmlhYmxlSGFuZGxlcjogU01NIGNvbW11bmljYXRpb24N Cj4gPiBidWZmZXINCj4gPiAgICAgPiBwYXlsb2FkIHNpemUgaW52YWxpZCFcbiIpKTsNCj4gPiAg ICAgPiArICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsgIGlmICghVmFyaWFibGVTbW1Jc0J1ZmZlck91dHNpZGVTbW1WYWxpZCAo KFVJTlROKUNvbW1CdWZmZXIsDQo+ID4gICAgID4gVGVtcENvbW1CdWZmZXJTaXplKSkgew0KPiA+ ICAgICA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIlNtbVZhcmlhYmxlSGFuZGxlcjogU01N IGNvbW11bmljYXRpb24NCj4gPiBidWZmZXINCj4gPiAgICAgPiBpbiBTTVJBTSBvciBvdmVyZmxv dyFcbiIpKTsNCj4gPiAgICAgPiArICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiAgICAgPiAr ICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFNtbVZhcmlhYmxlRnVuY3Rpb25IZWFkZXIg PQ0KPiA+IChTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfSEVBREVSDQo+ID4gICAgID4gKilDb21t QnVmZmVyOw0KPiA+ICAgICA+ICsgIHN3aXRjaCAoU21tVmFyaWFibGVGdW5jdGlvbkhlYWRlci0+ RnVuY3Rpb24pIHsNCj4gPiAgICAgPiArICAgIGNhc2UgU01NX1ZBUklBQkxFX0ZVTkNUSU9OX0dF VF9WQVJJQUJMRToNCj4gPiAgICAgPiArICAgICAgaWYgKENvbW1CdWZmZXJQYXlsb2FkU2l6ZSA8 IE9GRlNFVF9PRg0KPiA+ICAgICA+IChTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfQUNDRVNTX1ZB UklBQkxFLCBOYW1lKSkgew0KPiA+ICAgICA+ICsgICAgICAgIERFQlVHICgoREVCVUdfRVJST1Is ICJHZXRWYXJpYWJsZTogU01NIGNvbW11bmljYXRpb24gYnVmZmVyDQo+ID4gc2l6ZQ0KPiA+ICAg ICA+IGludmFsaWQhXG4iKSk7DQo+ID4gICAgID4gKyAgICAgICAgcmV0dXJuIEVGSV9TVUNDRVNT Ow0KPiA+ICAgICA+ICsgICAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgICAvLw0K PiA+ICAgICA+ICsgICAgICAvLyBDb3B5IHRoZSBpbnB1dCBjb21tdW5pY2F0ZSBidWZmZXIgcGF5 bG9hZCB0byBwcmUtYWxsb2NhdGVkIFNNTQ0KPiA+ICAgICA+IHZhcmlhYmxlIGJ1ZmZlciBwYXls b2FkLg0KPiA+ICAgICA+ICsgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICBDb3B5TWVtIChtVmFy aWFibGVCdWZmZXJQYXlsb2FkLCBTbW1WYXJpYWJsZUZ1bmN0aW9uSGVhZGVyLQ0KPiA+ID5EYXRh LA0KPiA+ICAgICA+IENvbW1CdWZmZXJQYXlsb2FkU2l6ZSk7DQo+ID4gICAgID4gKyAgICAgIFNt bVZhcmlhYmxlSGVhZGVyID0NCj4gPiAgICAgPiAoU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0FD Q0VTU19WQVJJQUJMRQ0KPiA+ICAgICA+ICopbVZhcmlhYmxlQnVmZmVyUGF5bG9hZDsNCj4gPiAg ICAgPiArICAgICAgaWYgKCgoVUlOVE4pKH4wKSAtIFNtbVZhcmlhYmxlSGVhZGVyLT5EYXRhU2l6 ZSA8IE9GRlNFVF9PRg0KPiA+ICAgICA+IChTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfQUNDRVNT X1ZBUklBQkxFLCBOYW1lKSkgfHwNCj4gPiAgICAgPiArICAgICAgICAgICgoVUlOVE4pKH4wKSAt IFNtbVZhcmlhYmxlSGVhZGVyLT5OYW1lU2l6ZSA8IE9GRlNFVF9PRg0KPiA+ICAgICA+IChTTU1f VkFSSUFCTEVfQ09NTVVOSUNBVEVfQUNDRVNTX1ZBUklBQkxFLCBOYW1lKSArDQo+ID4gICAgID4g U21tVmFyaWFibGVIZWFkZXItPkRhdGFTaXplKSkNCj4gPiAgICAgPiArICAgICAgew0KPiA+ICAg ICA+ICsgICAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgICAgLy8gUHJldmVudCBJbmZvU2l6ZSBv dmVyZmxvdyBoYXBwZW4NCj4gPiAgICAgPiArICAgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAg IFN0YXR1cyA9IEVGSV9BQ0NFU1NfREVOSUVEOw0KPiA+ICAgICA+ICsgICAgICAgIGdvdG8gRVhJ VDsNCj4gPiAgICAgPiArICAgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgICAgSW5m b1NpemUgPSBPRkZTRVRfT0YNCj4gPiAgICAgPiAoU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0FD Q0VTU19WQVJJQUJMRSwgTmFtZSkNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICArIFNtbVZh cmlhYmxlSGVhZGVyLT5EYXRhU2l6ZSArIFNtbVZhcmlhYmxlSGVhZGVyLQ0KPiA+ID5OYW1lU2l6 ZTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgIC8v IFNNUkFNIHJhbmdlIGNoZWNrIGFscmVhZHkgY292ZXJlZCBiZWZvcmUNCj4gPiAgICAgPiArICAg ICAgLy8NCj4gPiAgICAgPiArICAgICAgaWYgKEluZm9TaXplID4gQ29tbUJ1ZmZlclBheWxvYWRT aXplKSB7DQo+ID4gICAgID4gKyAgICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkdldFZhcmlh YmxlOiBEYXRhIHNpemUgZXhjZWVkDQo+ID4gY29tbXVuaWNhdGlvbg0KPiA+ICAgICA+IGJ1ZmZl ciBzaXplIGxpbWl0IVxuIikpOw0KPiA+ICAgICA+ICsgICAgICAgIFN0YXR1cyA9IEVGSV9BQ0NF U1NfREVOSUVEOw0KPiA+ICAgICA+ICsgICAgICAgIGdvdG8gRVhJVDsNCj4gPiAgICAgPiArICAg ICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgICAgLy8NCj4gPiAgICAgPiArICAgICAg Ly8gVGhlIFZhcmlhYmxlU3BlY3VsYXRpb25CYXJyaWVyKCkgY2FsbCBoZXJlIGlzIHRvIGVuc3Vy ZSB0aGUgcHJldmlvdXMNCj4gPiAgICAgPiArICAgICAgLy8gcmFuZ2UvY29udGVudCBjaGVja3Mg Zm9yIHRoZSBDb21tQnVmZmVyIGhhdmUgYmVlbiBjb21wbGV0ZWQNCj4gPiBiZWZvcmUNCj4gPiAg ICAgPiB0aGUNCj4gPiAgICAgPiArICAgICAgLy8gc3Vic2VxdWVudCBjb25zdW1wdGlvbiBvZiB0 aGUgQ29tbUJ1ZmZlciBjb250ZW50Lg0KPiA+ICAgICA+ICsgICAgICAvLw0KPiA+ICAgICA+ICsg ICAgICBWYXJpYWJsZVNwZWN1bGF0aW9uQmFycmllciAoKTsNCj4gPiAgICAgPiArICAgICAgaWYg KChTbW1WYXJpYWJsZUhlYWRlci0+TmFtZVNpemUgPCBzaXplb2YgKENIQVIxNikpIHx8DQo+ID4g ICAgID4gKFNtbVZhcmlhYmxlSGVhZGVyLT5OYW1lW1NtbVZhcmlhYmxlSGVhZGVyLT5OYW1lU2l6 ZS9zaXplb2YNCj4gPiAoQ0hBUjE2KSAtDQo+ID4gICAgID4gMV0gIT0gTCdcMCcpKSB7DQo+ID4g ICAgID4gKyAgICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgICAvLyBNYWtlIHN1cmUgVmFyaWFi bGVOYW1lIGlzIEEgTnVsbC10ZXJtaW5hdGVkIHN0cmluZy4NCj4gPiAgICAgPiArICAgICAgICAv Lw0KPiA+ICAgICA+ICsgICAgICAgIFN0YXR1cyA9IEVGSV9BQ0NFU1NfREVOSUVEOw0KPiA+ICAg ICA+ICsgICAgICAgIGdvdG8gRVhJVDsNCj4gPiAgICAgPiArICAgICAgfQ0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICAgICAgU3RhdHVzID0gVmFyaWFibGVTZXJ2aWNlR2V0VmFyaWFibGUgKA0K PiA+ICAgICA+ICsgICAgICAgICAgICAgICAgIFNtbVZhcmlhYmxlSGVhZGVyLT5OYW1lLA0KPiA+ ICAgICA+ICsgICAgICAgICAgICAgICAgICZTbW1WYXJpYWJsZUhlYWRlci0+R3VpZCwNCj4gPiAg ICAgPiArICAgICAgICAgICAgICAgICAmU21tVmFyaWFibGVIZWFkZXItPkF0dHJpYnV0ZXMsDQo+ ID4gICAgID4gKyAgICAgICAgICAgICAgICAgJlNtbVZhcmlhYmxlSGVhZGVyLT5EYXRhU2l6ZSwN Cj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAoVUlOVDggKilTbW1WYXJpYWJsZUhlYWRlci0+ TmFtZSArIFNtbVZhcmlhYmxlSGVhZGVyLQ0KPiA+ICAgICA+ID5OYW1lU2l6ZQ0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgICAgICk7DQo+ID4gICAgID4gKyAgICAgIENvcHlNZW0gKFNtbVZhcmlh YmxlRnVuY3Rpb25IZWFkZXItPkRhdGEsDQo+ID4gbVZhcmlhYmxlQnVmZmVyUGF5bG9hZCwNCj4g PiAgICAgPiBDb21tQnVmZmVyUGF5bG9hZFNpemUpOw0KPiA+ICAgICA+ICsgICAgICBicmVhazsN Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICBjYXNlIFNNTV9WQVJJQUJMRV9GVU5DVElPTl9H RVRfTkVYVF9WQVJJQUJMRV9OQU1FOg0KPiA+ICAgICA+ICsgICAgICBpZiAoQ29tbUJ1ZmZlclBh eWxvYWRTaXplIDwgT0ZGU0VUX09GDQo+ID4gICAgID4gKFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FU RV9HRVRfTkVYVF9WQVJJQUJMRV9OQU1FLCBOYW1lKSkNCj4gew0KPiA+ICAgICA+ICsgICAgICAg IERFQlVHICgoREVCVUdfRVJST1IsICJHZXROZXh0VmFyaWFibGVOYW1lOiBTTU0NCj4gPiBjb21t dW5pY2F0aW9uDQo+ID4gICAgID4gYnVmZmVyIHNpemUgaW52YWxpZCFcbiIpKTsNCj4gPiAgICAg PiArICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gICAgID4gKyAgICAgIH0NCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKyAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgIC8vIENvcHkgdGhl IGlucHV0IGNvbW11bmljYXRlIGJ1ZmZlciBwYXlsb2FkIHRvIHByZS1hbGxvY2F0ZWQgU01NDQo+ ID4gICAgID4gdmFyaWFibGUgYnVmZmVyIHBheWxvYWQuDQo+ID4gICAgID4gKyAgICAgIC8vDQo+ ID4gICAgID4gKyAgICAgIENvcHlNZW0gKG1WYXJpYWJsZUJ1ZmZlclBheWxvYWQsIFNtbVZhcmlh YmxlRnVuY3Rpb25IZWFkZXItDQo+ID4gPkRhdGEsDQo+ID4gICAgID4gQ29tbUJ1ZmZlclBheWxv YWRTaXplKTsNCj4gPiAgICAgPiArICAgICAgR2V0TmV4dFZhcmlhYmxlTmFtZSA9DQo+ID4gICAg ID4gKFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9HRVRfTkVYVF9WQVJJQUJMRV9OQU1FDQo+ID4g ICAgID4gKiltVmFyaWFibGVCdWZmZXJQYXlsb2FkOw0KPiA+ICAgICA+ICsgICAgICBpZiAoKFVJ TlROKSh+MCkgLSBHZXROZXh0VmFyaWFibGVOYW1lLT5OYW1lU2l6ZSA8IE9GRlNFVF9PRg0KPiA+ ICAgICA+IChTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfR0VUX05FWFRfVkFSSUFCTEVfTkFNRSwg TmFtZSkpDQo+IHsNCj4gPiAgICAgPiArICAgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAgIC8v IFByZXZlbnQgSW5mb1NpemUgb3ZlcmZsb3cgaGFwcGVuDQo+ID4gICAgID4gKyAgICAgICAgLy8N Cj4gPiAgICAgPiArICAgICAgICBTdGF0dXMgPSBFRklfQUNDRVNTX0RFTklFRDsNCj4gPiAgICAg PiArICAgICAgICBnb3RvIEVYSVQ7DQo+ID4gICAgID4gKyAgICAgIH0NCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgICAgIEluZm9TaXplID0gT0ZGU0VUX09GDQo+ID4gICAgID4gKFNNTV9WQVJJ QUJMRV9DT01NVU5JQ0FURV9HRVRfTkVYVF9WQVJJQUJMRV9OQU1FLCBOYW1lKSArDQo+ID4gICAg ID4gR2V0TmV4dFZhcmlhYmxlTmFtZS0+TmFtZVNpemU7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAvLyBTTVJBTSByYW5nZSBjaGVjayBhbHJlYWR5 IGNvdmVyZWQgYmVmb3JlDQo+ID4gICAgID4gKyAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgIGlm IChJbmZvU2l6ZSA+IENvbW1CdWZmZXJQYXlsb2FkU2l6ZSkgew0KPiA+ICAgICA+ICsgICAgICAg IERFQlVHICgoREVCVUdfRVJST1IsICJHZXROZXh0VmFyaWFibGVOYW1lOiBEYXRhIHNpemUgZXhj ZWVkDQo+ID4gICAgID4gY29tbXVuaWNhdGlvbiBidWZmZXIgc2l6ZSBsaW1pdCFcbiIpKTsNCj4g PiAgICAgPiArICAgICAgICBTdGF0dXMgPSBFRklfQUNDRVNTX0RFTklFRDsNCj4gPiAgICAgPiAr ICAgICAgICBnb3RvIEVYSVQ7DQo+ID4gICAgID4gKyAgICAgIH0NCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyAgICAgIE5hbWVCdWZmZXJTaXplID0gQ29tbUJ1ZmZlclBheWxvYWRTaXplIC0gT0ZG U0VUX09GDQo+ID4gICAgID4gKFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9HRVRfTkVYVF9WQVJJ QUJMRV9OQU1FLCBOYW1lKTsNCj4gPiAgICAgPiArICAgICAgaWYgKChOYW1lQnVmZmVyU2l6ZSA8 IHNpemVvZiAoQ0hBUjE2KSkgfHwgKEdldE5leHRWYXJpYWJsZU5hbWUtDQo+ID4gICAgID4gPk5h bWVbTmFtZUJ1ZmZlclNpemUvc2l6ZW9mIChDSEFSMTYpIC0gMV0gIT0gTCdcMCcpKSB7DQo+ID4g ICAgID4gKyAgICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgICAvLyBNYWtlIHN1cmUgaW5wdXQg VmFyaWFibGVOYW1lIGlzIEEgTnVsbC10ZXJtaW5hdGVkIHN0cmluZy4NCj4gPiAgICAgPiArICAg ICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAgIFN0YXR1cyA9IEVGSV9BQ0NFU1NfREVOSUVEOw0K PiA+ICAgICA+ICsgICAgICAgIGdvdG8gRVhJVDsNCj4gPiAgICAgPiArICAgICAgfQ0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArICAgICAgU3RhdHVzID0gVmFyaWFibGVTZXJ2aWNlR2V0TmV4dFZh cmlhYmxlTmFtZSAoDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgJkdldE5leHRWYXJpYWJs ZU5hbWUtPk5hbWVTaXplLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgIEdldE5leHRWYXJp YWJsZU5hbWUtPk5hbWUsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgJkdldE5leHRWYXJp YWJsZU5hbWUtPkd1aWQNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICApOw0KPiA+ICAgICA+ ICsgICAgICBDb3B5TWVtIChTbW1WYXJpYWJsZUZ1bmN0aW9uSGVhZGVyLT5EYXRhLA0KPiA+IG1W YXJpYWJsZUJ1ZmZlclBheWxvYWQsDQo+ID4gICAgID4gQ29tbUJ1ZmZlclBheWxvYWRTaXplKTsN Cj4gPiAgICAgPiArICAgICAgYnJlYWs7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgY2Fz ZSBTTU1fVkFSSUFCTEVfRlVOQ1RJT05fU0VUX1ZBUklBQkxFOg0KPiA+ICAgICA+ICsgICAgICBp ZiAoQ29tbUJ1ZmZlclBheWxvYWRTaXplIDwgT0ZGU0VUX09GDQo+ID4gICAgID4gKFNNTV9WQVJJ QUJMRV9DT01NVU5JQ0FURV9BQ0NFU1NfVkFSSUFCTEUsIE5hbWUpKSB7DQo+ID4gICAgID4gKyAg ICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIlNldFZhcmlhYmxlOiBTTU0gY29tbXVuaWNhdGlv biBidWZmZXINCj4gPiBzaXplDQo+ID4gICAgID4gaW52YWxpZCFcbiIpKTsNCj4gPiAgICAgPiAr ICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gICAgID4gKyAgICAgIH0NCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgIC8vIENvcHkgdGhlIGlu cHV0IGNvbW11bmljYXRlIGJ1ZmZlciBwYXlsb2FkIHRvIHByZS1hbGxvY2F0ZWQgU01NDQo+ID4g ICAgID4gdmFyaWFibGUgYnVmZmVyIHBheWxvYWQuDQo+ID4gICAgID4gKyAgICAgIC8vDQo+ID4g ICAgID4gKyAgICAgIENvcHlNZW0gKG1WYXJpYWJsZUJ1ZmZlclBheWxvYWQsIFNtbVZhcmlhYmxl RnVuY3Rpb25IZWFkZXItDQo+ID4gPkRhdGEsDQo+ID4gICAgID4gQ29tbUJ1ZmZlclBheWxvYWRT aXplKTsNCj4gPiAgICAgPiArICAgICAgU21tVmFyaWFibGVIZWFkZXIgPQ0KPiA+ICAgICA+IChT TU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfQUNDRVNTX1ZBUklBQkxFDQo+ID4gICAgID4gKiltVmFy aWFibGVCdWZmZXJQYXlsb2FkOw0KPiA+ICAgICA+ICsgICAgICBpZiAoKChVSU5UTikofjApIC0g U21tVmFyaWFibGVIZWFkZXItPkRhdGFTaXplIDwgT0ZGU0VUX09GDQo+ID4gICAgID4gKFNNTV9W QVJJQUJMRV9DT01NVU5JQ0FURV9BQ0NFU1NfVkFSSUFCTEUsIE5hbWUpKSB8fA0KPiA+ICAgICA+ ICsgICAgICAgICAgKChVSU5UTikofjApIC0gU21tVmFyaWFibGVIZWFkZXItPk5hbWVTaXplIDwg T0ZGU0VUX09GDQo+ID4gICAgID4gKFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9BQ0NFU1NfVkFS SUFCTEUsIE5hbWUpICsNCj4gPiAgICAgPiBTbW1WYXJpYWJsZUhlYWRlci0+RGF0YVNpemUpKQ0K PiA+ICAgICA+ICsgICAgICB7DQo+ID4gICAgID4gKyAgICAgICAgLy8NCj4gPiAgICAgPiArICAg ICAgICAvLyBQcmV2ZW50IEluZm9TaXplIG92ZXJmbG93IGhhcHBlbg0KPiA+ICAgICA+ICsgICAg ICAgIC8vDQo+ID4gICAgID4gKyAgICAgICAgU3RhdHVzID0gRUZJX0FDQ0VTU19ERU5JRUQ7DQo+ ID4gICAgID4gKyAgICAgICAgZ290byBFWElUOw0KPiA+ICAgICA+ICsgICAgICB9DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgICAgICBJbmZvU2l6ZSA9IE9GRlNFVF9PRg0KPiA+ICAgICA+IChT TU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfQUNDRVNTX1ZBUklBQkxFLCBOYW1lKQ0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgICAgICsgU21tVmFyaWFibGVIZWFkZXItPkRhdGFTaXplICsgU21tVmFy aWFibGVIZWFkZXItDQo+ID4gPk5hbWVTaXplOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAg ICAgLy8NCj4gPiAgICAgPiArICAgICAgLy8gU01SQU0gcmFuZ2UgY2hlY2sgYWxyZWFkeSBjb3Zl cmVkIGJlZm9yZQ0KPiA+ICAgICA+ICsgICAgICAvLyBEYXRhIGJ1ZmZlciBzaG91bGQgbm90IGNv bnRhaW4gU01NIHJhbmdlDQo+ID4gICAgID4gKyAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgIGlm IChJbmZvU2l6ZSA+IENvbW1CdWZmZXJQYXlsb2FkU2l6ZSkgew0KPiA+ICAgICA+ICsgICAgICAg IERFQlVHICgoREVCVUdfRVJST1IsICJTZXRWYXJpYWJsZTogRGF0YSBzaXplIGV4Y2VlZA0KPiA+ IGNvbW11bmljYXRpb24NCj4gPiAgICAgPiBidWZmZXIgc2l6ZSBsaW1pdCFcbiIpKTsNCj4gPiAg ICAgPiArICAgICAgICBTdGF0dXMgPSBFRklfQUNDRVNTX0RFTklFRDsNCj4gPiAgICAgPiArICAg ICAgICBnb3RvIEVYSVQ7DQo+ID4gICAgID4gKyAgICAgIH0NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgIC8vIFRoZSBWYXJpYWJsZVNwZWN1bGF0aW9u QmFycmllcigpIGNhbGwgaGVyZSBpcyB0byBlbnN1cmUgdGhlIHByZXZpb3VzDQo+ID4gICAgID4g KyAgICAgIC8vIHJhbmdlL2NvbnRlbnQgY2hlY2tzIGZvciB0aGUgQ29tbUJ1ZmZlciBoYXZlIGJl ZW4gY29tcGxldGVkDQo+ID4gYmVmb3JlDQo+ID4gICAgID4gdGhlDQo+ID4gICAgID4gKyAgICAg IC8vIHN1YnNlcXVlbnQgY29uc3VtcHRpb24gb2YgdGhlIENvbW1CdWZmZXIgY29udGVudC4NCj4g PiAgICAgPiArICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgVmFyaWFibGVTcGVjdWxhdGlvbkJh cnJpZXIgKCk7DQo+ID4gICAgID4gKyAgICAgIGlmICgoU21tVmFyaWFibGVIZWFkZXItPk5hbWVT aXplIDwgc2l6ZW9mIChDSEFSMTYpKSB8fA0KPiA+ICAgICA+IChTbW1WYXJpYWJsZUhlYWRlci0+ TmFtZVtTbW1WYXJpYWJsZUhlYWRlci0+TmFtZVNpemUvc2l6ZW9mDQo+ID4gKENIQVIxNikgLQ0K PiA+ICAgICA+IDFdICE9IEwnXDAnKSkgew0KPiA+ICAgICA+ICsgICAgICAgIC8vDQo+ID4gICAg ID4gKyAgICAgICAgLy8gTWFrZSBzdXJlIFZhcmlhYmxlTmFtZSBpcyBBIE51bGwtdGVybWluYXRl ZCBzdHJpbmcuDQo+ID4gICAgID4gKyAgICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgICBTdGF0 dXMgPSBFRklfQUNDRVNTX0RFTklFRDsNCj4gPiAgICAgPiArICAgICAgICBnb3RvIEVYSVQ7DQo+ ID4gICAgID4gKyAgICAgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICAgIFN0YXR1cyA9 IFZhcmlhYmxlU2VydmljZVNldFZhcmlhYmxlICgNCj4gPiAgICAgPiArICAgICAgICAgICAgICAg ICBTbW1WYXJpYWJsZUhlYWRlci0+TmFtZSwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAm U21tVmFyaWFibGVIZWFkZXItPkd1aWQsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgU21t VmFyaWFibGVIZWFkZXItPkF0dHJpYnV0ZXMsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAg U21tVmFyaWFibGVIZWFkZXItPkRhdGFTaXplLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAg IChVSU5UOCAqKVNtbVZhcmlhYmxlSGVhZGVyLT5OYW1lICsgU21tVmFyaWFibGVIZWFkZXItDQo+ ID4gICAgID4gPk5hbWVTaXplDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgKTsNCj4gPiAg ICAgPiArICAgICAgYnJlYWs7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgY2FzZSBTTU1f VkFSSUFCTEVfRlVOQ1RJT05fUVVFUllfVkFSSUFCTEVfSU5GTzoNCj4gPiAgICAgPiArICAgICAg aWYgKENvbW1CdWZmZXJQYXlsb2FkU2l6ZSA8IHNpemVvZg0KPiA+ICAgICA+IChTTU1fVkFSSUFC TEVfQ09NTVVOSUNBVEVfUVVFUllfVkFSSUFCTEVfSU5GTykpIHsNCj4gPiAgICAgPiArICAgICAg ICBERUJVRyAoKERFQlVHX0VSUk9SLCAiUXVlcnlWYXJpYWJsZUluZm86IFNNTSBjb21tdW5pY2F0 aW9uDQo+ID4gYnVmZmVyDQo+ID4gICAgID4gc2l6ZSBpbnZhbGlkIVxuIikpOw0KPiA+ICAgICA+ ICsgICAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiAgICAgPiArICAgICAgfQ0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArICAgICAgUXVlcnlWYXJpYWJsZUluZm8gPQ0KPiA+ICAgICA+IChT TU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfUVVFUllfVkFSSUFCTEVfSU5GTw0KPiA+ICAgICA+ICop U21tVmFyaWFibGVGdW5jdGlvbkhlYWRlci0+RGF0YTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgICAgIFN0YXR1cyA9IFZhcmlhYmxlU2VydmljZVF1ZXJ5VmFyaWFibGVJbmZvICgNCj4gPiAg ICAgPiArICAgICAgICAgICAgICAgICBRdWVyeVZhcmlhYmxlSW5mby0+QXR0cmlidXRlcywNCj4g PiAgICAgPiArICAgICAgICAgICAgICAgICAmUXVlcnlWYXJpYWJsZUluZm8tPk1heGltdW1WYXJp YWJsZVN0b3JhZ2VTaXplLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICZRdWVyeVZhcmlh YmxlSW5mby0+UmVtYWluaW5nVmFyaWFibGVTdG9yYWdlU2l6ZSwNCj4gPiAgICAgPiArICAgICAg ICAgICAgICAgICAmUXVlcnlWYXJpYWJsZUluZm8tPk1heGltdW1WYXJpYWJsZVNpemUNCj4gPiAg ICAgPiArICAgICAgICAgICAgICAgICApOw0KPiA+ICAgICA+ICsgICAgICBicmVhazsNCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKyAgICBjYXNlIFNNTV9WQVJJQUJMRV9GVU5DVElPTl9HRVRfUEFZ TE9BRF9TSVpFOg0KPiA+ICAgICA+ICsgICAgICBpZiAoQ29tbUJ1ZmZlclBheWxvYWRTaXplIDwg c2l6ZW9mDQo+ID4gICAgID4gKFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9HRVRfUEFZTE9BRF9T SVpFKSkgew0KPiA+ICAgICA+ICsgICAgICAgIERFQlVHICgoREVCVUdfRVJST1IsICJHZXRQYXls b2FkU2l6ZTogU01NIGNvbW11bmljYXRpb24NCj4gPiBidWZmZXINCj4gPiAgICAgPiBzaXplIGlu dmFsaWQhXG4iKSk7DQo+ID4gICAgID4gKyAgICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ ICAgICA+ICsgICAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgICBHZXRQYXlsb2Fk U2l6ZSAgICAgICAgICAgICAgICAgICAgICA9DQo+ID4gICAgID4gKFNNTV9WQVJJQUJMRV9DT01N VU5JQ0FURV9HRVRfUEFZTE9BRF9TSVpFDQo+ID4gICAgID4gKilTbW1WYXJpYWJsZUZ1bmN0aW9u SGVhZGVyLT5EYXRhOw0KPiA+ICAgICA+ICsgICAgICBHZXRQYXlsb2FkU2l6ZS0+VmFyaWFibGVQ YXlsb2FkU2l6ZSA9IG1WYXJpYWJsZUJ1ZmZlclBheWxvYWRTaXplOw0KPiA+ICAgICA+ICsgICAg ICBTdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IEVGSV9TVUNDRVNTOw0KPiA+ ICAgICA+ICsgICAgICBicmVhazsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICBjYXNlIFNN TV9WQVJJQUJMRV9GVU5DVElPTl9SRUFEWV9UT19CT09UOg0KPiA+ICAgICA+ICsgICAgICBpZiAo QXRSdW50aW1lICgpKSB7DQo+ID4gICAgID4gKyAgICAgICAgU3RhdHVzID0gRUZJX1VOU1VQUE9S VEVEOw0KPiA+ICAgICA+ICsgICAgICAgIGJyZWFrOw0KPiA+ICAgICA+ICsgICAgICB9DQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgICAgICBpZiAoIW1FbmRPZkR4ZSkgew0KPiA+ICAgICA+ICsg ICAgICAgIE1vckxvY2tJbml0QXRFbmRPZkR4ZSAoKTsNCj4gPiAgICAgPiArICAgICAgICBTdGF0 dXMgPSBMb2NrVmFyaWFibGVQb2xpY3kgKCk7DQo+ID4gICAgID4gKyAgICAgICAgQVNTRVJUX0VG SV9FUlJPUiAoU3RhdHVzKTsNCj4gPiAgICAgPiArICAgICAgICBtRW5kT2ZEeGUgPSBUUlVFOw0K PiA+ICAgICA+ICsgICAgICAgIFZhckNoZWNrTGliSW5pdGlhbGl6ZUF0RW5kT2ZEeGUgKE5VTEwp Ow0KPiA+ICAgICA+ICsgICAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgICAgLy8gVGhlIGluaXRp YWxpemF0aW9uIGZvciB2YXJpYWJsZSBxdW90YS4NCj4gPiAgICAgPiArICAgICAgICAvLw0KPiA+ ICAgICA+ICsgICAgICAgIEluaXRpYWxpemVWYXJpYWJsZVF1b3RhICgpOw0KPiA+ICAgICA+ICsg ICAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgICBSZWNsYWltRm9yT1MgKCk7DQo+ ID4gICAgID4gKyAgICAgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KPiA+ICAgICA+ICsgICAgICBi cmVhazsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICBjYXNlIFNNTV9WQVJJQUJMRV9GVU5D VElPTl9FWElUX0JPT1RfU0VSVklDRToNCj4gPiAgICAgPiArICAgICAgbUF0UnVudGltZSA9IFRS VUU7DQo+ID4gICAgID4gKyAgICAgIFN0YXR1cyAgICAgPSBFRklfU1VDQ0VTUzsNCj4gPiAgICAg PiArICAgICAgYnJlYWs7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgY2FzZSBTTU1fVkFS SUFCTEVfRlVOQ1RJT05fR0VUX1NUQVRJU1RJQ1M6DQo+ID4gICAgID4gKyAgICAgIFZhcmlhYmxl SW5mbyA9IChWQVJJQUJMRV9JTkZPX0VOVFJZDQo+ICopU21tVmFyaWFibGVGdW5jdGlvbkhlYWRl ci0NCj4gPiAgICAgPiA+RGF0YTsNCj4gPiAgICAgPiArICAgICAgSW5mb1NpemUgICAgID0gVGVt cENvbW1CdWZmZXJTaXplIC0NCj4gPiAgICAgPiBTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfSEVB REVSX1NJWkU7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgICAvLw0KPiA+ICAgICA+ICsg ICAgICAvLyBEbyBub3QgbmVlZCB0byBjaGVjayBTbW1WYXJpYWJsZUZ1bmN0aW9uSGVhZGVyLT5E YXRhIGluDQo+IFNNUkFNDQo+ID4gICAgID4gaGVyZS4NCj4gPiAgICAgPiArICAgICAgLy8gSXQg aXMgY292ZXJlZCBieSBwcmV2aW91cyBDb21tQnVmZmVyIGNoZWNrDQo+ID4gICAgID4gKyAgICAg IC8vDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAv LyBEbyBub3QgbmVlZCB0byBjaGVjayBDb21tQnVmZmVyU2l6ZSBidWZmZXIgYXMgaXQgc2hvdWxk IHBvaW50IHRvDQo+ID4gICAgID4gU01SQU0NCj4gPiAgICAgPiArICAgICAgLy8gdGhhdCB3YXMg dXNlZCBieSBTTU0gY29yZSB0byBjYWNoZSBDb21tU2l6ZSBmcm9tDQo+ID4gICAgID4gU21tQ29t bXVuaWNhdGlvbiBwcm90b2NvbC4NCj4gPiAgICAgPiArICAgICAgLy8NCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgICAgIFN0YXR1cyAgICAgICAgICA9IFNtbVZhcmlhYmxlR2V0U3RhdGlzdGlj cyAoVmFyaWFibGVJbmZvLCAmSW5mb1NpemUpOw0KPiA+ICAgICA+ICsgICAgICAqQ29tbUJ1ZmZl clNpemUgPSBJbmZvU2l6ZSArDQo+ID4gICAgID4gU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0hF QURFUl9TSVpFOw0KPiA+ICAgICA+ICsgICAgICBicmVhazsNCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgICBjYXNlIFNNTV9WQVJJQUJMRV9GVU5DVElPTl9MT0NLX1ZBUklBQkxFOg0KPiA+ICAg ICA+ICsgICAgICBpZiAobUVuZE9mRHhlKSB7DQo+ID4gICAgID4gKyAgICAgICAgU3RhdHVzID0g RUZJX0FDQ0VTU19ERU5JRUQ7DQo+ID4gICAgID4gKyAgICAgIH0gZWxzZSB7DQo+ID4gICAgID4g KyAgICAgICAgVmFyaWFibGVUb0xvY2sgPQ0KPiAoU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0xP Q0tfVkFSSUFCTEUNCj4gPiAgICAgPiAqKVNtbVZhcmlhYmxlRnVuY3Rpb25IZWFkZXItPkRhdGE7 DQo+ID4gICAgID4gKyAgICAgICAgU3RhdHVzICAgICAgICAgPSBWYXJpYWJsZUxvY2tSZXF1ZXN0 VG9Mb2NrICgNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwNCj4g PiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVUb0xvY2stPk5hbWUs DQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZWYXJpYWJsZVRvTG9jay0+ R3VpZA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiA+ICAgICA+ ICsgICAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgICBicmVhazsNCj4gPiAgICAg PiArICAgIGNhc2UNCj4gPiBTTU1fVkFSSUFCTEVfRlVOQ1RJT05fVkFSX0NIRUNLX1ZBUklBQkxF X1BST1BFUlRZX1NFVDoNCj4gPiAgICAgPiArICAgICAgaWYgKG1FbmRPZkR4ZSkgew0KPiA+ICAg ICA+ICsgICAgICAgIFN0YXR1cyA9IEVGSV9BQ0NFU1NfREVOSUVEOw0KPiA+ICAgICA+ICsgICAg ICB9IGVsc2Ugew0KPiA+ICAgICA+ICsgICAgICAgIENvbW1WYXJpYWJsZVByb3BlcnR5ID0NCj4g PiAgICAgPiAoU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX1ZBUl9DSEVDS19WQVJJQUJMRV9QUk9Q RVJUWQ0KPiA+ICAgICA+ICopU21tVmFyaWFibGVGdW5jdGlvbkhlYWRlci0+RGF0YTsNCj4gPiAg ICAgPiArICAgICAgICBTdGF0dXMgICAgICAgICAgICAgICA9IFZhckNoZWNrVmFyaWFibGVQcm9w ZXJ0eVNldCAoDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv bW1WYXJpYWJsZVByb3BlcnR5LT5OYW1lLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmQ29tbVZhcmlhYmxlUHJvcGVydHktPkd1aWQsDQo+ID4gICAgID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZDb21tVmFyaWFibGVQcm9wZXJ0eS0+VmFy aWFibGVQcm9wZXJ0eQ0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApOw0KPiA+ICAgICA+ICsgICAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgICBi cmVhazsNCj4gPiAgICAgPiArICAgIGNhc2UNCj4gPiBTTU1fVkFSSUFCTEVfRlVOQ1RJT05fVkFS X0NIRUNLX1ZBUklBQkxFX1BST1BFUlRZX0dFVDoNCj4gPiAgICAgPiArICAgICAgaWYgKENvbW1C dWZmZXJQYXlsb2FkU2l6ZSA8IE9GRlNFVF9PRg0KPiA+ICAgICA+IChTTU1fVkFSSUFCTEVfQ09N TVVOSUNBVEVfVkFSX0NIRUNLX1ZBUklBQkxFX1BST1BFUlRZLA0KPiA+IE5hbWUpKQ0KPiA+ICAg ICA+IHsNCj4gPiAgICAgPiArICAgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiVmFyQ2hlY2tW YXJpYWJsZVByb3BlcnR5R2V0OiBTTU0NCj4gPiAgICAgPiBjb21tdW5pY2F0aW9uIGJ1ZmZlciBz aXplIGludmFsaWQhXG4iKSk7DQo+ID4gICAgID4gKyAgICAgICAgcmV0dXJuIEVGSV9TVUNDRVNT Ow0KPiA+ICAgICA+ICsgICAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgICAvLw0K PiA+ICAgICA+ICsgICAgICAvLyBDb3B5IHRoZSBpbnB1dCBjb21tdW5pY2F0ZSBidWZmZXIgcGF5 bG9hZCB0byBwcmUtYWxsb2NhdGVkIFNNTQ0KPiA+ICAgICA+IHZhcmlhYmxlIGJ1ZmZlciBwYXls b2FkLg0KPiA+ICAgICA+ICsgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICBDb3B5TWVtIChtVmFy aWFibGVCdWZmZXJQYXlsb2FkLCBTbW1WYXJpYWJsZUZ1bmN0aW9uSGVhZGVyLQ0KPiA+ID5EYXRh LA0KPiA+ICAgICA+IENvbW1CdWZmZXJQYXlsb2FkU2l6ZSk7DQo+ID4gICAgID4gKyAgICAgIENv bW1WYXJpYWJsZVByb3BlcnR5ID0NCj4gPiAgICAgPiAoU01NX1ZBUklBQkxFX0NPTU1VTklDQVRF X1ZBUl9DSEVDS19WQVJJQUJMRV9QUk9QRVJUWQ0KPiA+ICAgICA+ICopbVZhcmlhYmxlQnVmZmVy UGF5bG9hZDsNCj4gPiAgICAgPiArICAgICAgaWYgKChVSU5UTikofjApIC0gQ29tbVZhcmlhYmxl UHJvcGVydHktPk5hbWVTaXplIDwgT0ZGU0VUX09GDQo+ID4gICAgID4gKFNNTV9WQVJJQUJMRV9D T01NVU5JQ0FURV9WQVJfQ0hFQ0tfVkFSSUFCTEVfUFJPUEVSVFksDQo+ID4gTmFtZSkpDQo+ID4g ICAgID4gew0KPiA+ICAgICA+ICsgICAgICAgIC8vDQo+ID4gICAgID4gKyAgICAgICAgLy8gUHJl dmVudCBJbmZvU2l6ZSBvdmVyZmxvdyBoYXBwZW4NCj4gPiAgICAgPiArICAgICAgICAvLw0KPiA+ ICAgICA+ICsgICAgICAgIFN0YXR1cyA9IEVGSV9BQ0NFU1NfREVOSUVEOw0KPiA+ICAgICA+ICsg ICAgICAgIGdvdG8gRVhJVDsNCj4gPiAgICAgPiArICAgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICAgICAgSW5mb1NpemUgPSBPRkZTRVRfT0YNCj4gPiAgICAgPiAoU01NX1ZBUklBQkxF X0NPTU1VTklDQVRFX1ZBUl9DSEVDS19WQVJJQUJMRV9QUk9QRVJUWSwNCj4gPiBOYW1lKSArDQo+ ID4gICAgID4gQ29tbVZhcmlhYmxlUHJvcGVydHktPk5hbWVTaXplOw0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgLy8gU01SQU0gcmFuZ2UgY2hlY2sg YWxyZWFkeSBjb3ZlcmVkIGJlZm9yZQ0KPiA+ICAgICA+ICsgICAgICAvLw0KPiA+ICAgICA+ICsg ICAgICBpZiAoSW5mb1NpemUgPiBDb21tQnVmZmVyUGF5bG9hZFNpemUpIHsNCj4gPiAgICAgPiAr ICAgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiVmFyQ2hlY2tWYXJpYWJsZVByb3BlcnR5R2V0 OiBEYXRhIHNpemUNCj4gPiBleGNlZWQNCj4gPiAgICAgPiBjb21tdW5pY2F0aW9uIGJ1ZmZlciBz aXplIGxpbWl0IVxuIikpOw0KPiA+ICAgICA+ICsgICAgICAgIFN0YXR1cyA9IEVGSV9BQ0NFU1Nf REVOSUVEOw0KPiA+ICAgICA+ICsgICAgICAgIGdvdG8gRVhJVDsNCj4gPiAgICAgPiArICAgICAg fQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgLy8g VGhlIFZhcmlhYmxlU3BlY3VsYXRpb25CYXJyaWVyKCkgY2FsbCBoZXJlIGlzIHRvIGVuc3VyZSB0 aGUgcHJldmlvdXMNCj4gPiAgICAgPiArICAgICAgLy8gcmFuZ2UvY29udGVudCBjaGVja3MgZm9y IHRoZSBDb21tQnVmZmVyIGhhdmUgYmVlbiBjb21wbGV0ZWQNCj4gPiBiZWZvcmUNCj4gPiAgICAg PiB0aGUNCj4gPiAgICAgPiArICAgICAgLy8gc3Vic2VxdWVudCBjb25zdW1wdGlvbiBvZiB0aGUg Q29tbUJ1ZmZlciBjb250ZW50Lg0KPiA+ICAgICA+ICsgICAgICAvLw0KPiA+ICAgICA+ICsgICAg ICBWYXJpYWJsZVNwZWN1bGF0aW9uQmFycmllciAoKTsNCj4gPiAgICAgPiArICAgICAgaWYgKChD b21tVmFyaWFibGVQcm9wZXJ0eS0+TmFtZVNpemUgPCBzaXplb2YgKENIQVIxNikpIHx8DQo+ID4g ICAgID4gKENvbW1WYXJpYWJsZVByb3BlcnR5LT5OYW1lW0NvbW1WYXJpYWJsZVByb3BlcnR5LQ0K PiA+TmFtZVNpemUvc2l6ZW9mDQo+ID4gICAgID4gKENIQVIxNikgLSAxXSAhPSBMJ1wwJykpIHsN Cj4gPiAgICAgPiArICAgICAgICAvLw0KPiA+ICAgICA+ICsgICAgICAgIC8vIE1ha2Ugc3VyZSBW YXJpYWJsZU5hbWUgaXMgQSBOdWxsLXRlcm1pbmF0ZWQgc3RyaW5nLg0KPiA+ICAgICA+ICsgICAg ICAgIC8vDQo+ID4gICAgID4gKyAgICAgICAgU3RhdHVzID0gRUZJX0FDQ0VTU19ERU5JRUQ7DQo+ ID4gICAgID4gKyAgICAgICAgZ290byBFWElUOw0KPiA+ICAgICA+ICsgICAgICB9DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgICAgICBTdGF0dXMgPSBWYXJDaGVja1ZhcmlhYmxlUHJvcGVydHlH ZXQgKA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgIENvbW1WYXJpYWJsZVByb3BlcnR5LT5O YW1lLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICZDb21tVmFyaWFibGVQcm9wZXJ0eS0+ R3VpZCwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAmQ29tbVZhcmlhYmxlUHJvcGVydHkt PlZhcmlhYmxlUHJvcGVydHkNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICApOw0KPiA+ICAg ICA+ICsgICAgICBDb3B5TWVtIChTbW1WYXJpYWJsZUZ1bmN0aW9uSGVhZGVyLT5EYXRhLA0KPiA+ IG1WYXJpYWJsZUJ1ZmZlclBheWxvYWQsDQo+ID4gICAgID4gQ29tbUJ1ZmZlclBheWxvYWRTaXpl KTsNCj4gPiAgICAgPiArICAgICAgYnJlYWs7DQo+ID4gICAgID4gKyAgICBjYXNlDQo+ID4gICAg ID4NCj4gU01NX1ZBUklBQkxFX0ZVTkNUSU9OX0lOSVRfUlVOVElNRV9WQVJJQUJMRV9DQUNIRV9D T05URVhUOg0KPiA+ICAgICA+ICsgICAgICBpZiAoQ29tbUJ1ZmZlclBheWxvYWRTaXplIDwgc2l6 ZW9mDQo+ID4gICAgID4NCj4gKFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9SVU5USU1FX1ZBUklB QkxFX0NBQ0hFX0NPTlRFWFQpKQ0KPiA+IHsNCj4gPiAgICAgPiArICAgICAgICBERUJVRyAoKERF QlVHX0VSUk9SLCAiSW5pdFJ1bnRpbWVWYXJpYWJsZUNhY2hlQ29udGV4dDogU01NDQo+ID4gICAg ID4gY29tbXVuaWNhdGlvbiBidWZmZXIgc2l6ZSBpbnZhbGlkIVxuIikpOw0KPiA+ICAgICA+ICsg ICAgICAgIFN0YXR1cyA9IEVGSV9BQ0NFU1NfREVOSUVEOw0KPiA+ICAgICA+ICsgICAgICAgIGdv dG8gRVhJVDsNCj4gPiAgICAgPiArICAgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAg ICAgaWYgKG1FbmRPZkR4ZSkgew0KPiA+ICAgICA+ICsgICAgICAgIERFQlVHICgoREVCVUdfRVJS T1IsICJJbml0UnVudGltZVZhcmlhYmxlQ2FjaGVDb250ZXh0Og0KPiBDYW5ub3QNCj4gPiBpbml0 DQo+ID4gICAgID4gY29udGV4dCBhZnRlciBlbmQgb2YgRFhFIVxuIikpOw0KPiA+ICAgICA+ICsg ICAgICAgIFN0YXR1cyA9IEVGSV9BQ0NFU1NfREVOSUVEOw0KPiA+ICAgICA+ICsgICAgICAgIGdv dG8gRVhJVDsNCj4gPiAgICAgPiArICAgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAg ICAgLy8NCj4gPiAgICAgPiArICAgICAgLy8gQ29weSB0aGUgaW5wdXQgY29tbXVuaWNhdGUgYnVm ZmVyIHBheWxvYWQgdG8gdGhlIHByZS1hbGxvY2F0ZWQNCj4gPiBTTU0NCj4gPiAgICAgPiB2YXJp YWJsZSBwYXlsb2FkIGJ1ZmZlci4NCj4gPiAgICAgPiArICAgICAgLy8NCj4gPiAgICAgPiArICAg ICAgQ29weU1lbSAobVZhcmlhYmxlQnVmZmVyUGF5bG9hZCwgU21tVmFyaWFibGVGdW5jdGlvbkhl YWRlci0NCj4gPiA+RGF0YSwNCj4gPiAgICAgPiBDb21tQnVmZmVyUGF5bG9hZFNpemUpOw0KPiA+ ICAgICA+ICsgICAgICBSdW50aW1lVmFyaWFibGVDYWNoZUNvbnRleHQgPQ0KPiA+ICAgICA+DQo+ IChTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfUlVOVElNRV9WQVJJQUJMRV9DQUNIRV9DT05URVhU DQo+ID4gICAgID4gKiltVmFyaWFibGVCdWZmZXJQYXlsb2FkOw0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICAgICAgLy8NCj4gPiAgICAgPiArICAgICAgLy8gVmVyaWZ5IHJlcXVpcmVkIHJ1bnRp bWUgY2FjaGUgYnVmZmVycyBhcmUgcHJvdmlkZWQuDQo+ID4gICAgID4gKyAgICAgIC8vDQo+ID4g ICAgID4gKyAgICAgIGlmICgoUnVudGltZVZhcmlhYmxlQ2FjaGVDb250ZXh0LT5SdW50aW1lVm9s YXRpbGVDYWNoZSA9PSBOVUxMKQ0KPiB8fA0KPiA+ICAgICA+ICsgICAgICAgICAgKFJ1bnRpbWVW YXJpYWJsZUNhY2hlQ29udGV4dC0+UnVudGltZU52Q2FjaGUgPT0gTlVMTCkgfHwNCj4gPiAgICAg PiArICAgICAgICAgIChSdW50aW1lVmFyaWFibGVDYWNoZUNvbnRleHQtPlBlbmRpbmdVcGRhdGUg PT0gTlVMTCkgfHwNCj4gPiAgICAgPiArICAgICAgICAgIChSdW50aW1lVmFyaWFibGVDYWNoZUNv bnRleHQtPlJlYWRMb2NrID09IE5VTEwpIHx8DQo+ID4gICAgID4gKyAgICAgICAgICAoUnVudGlt ZVZhcmlhYmxlQ2FjaGVDb250ZXh0LT5Ib2JGbHVzaENvbXBsZXRlID09IE5VTEwpKQ0KPiA+ICAg ICA+ICsgICAgICB7DQo+ID4gICAgID4gKyAgICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIklu aXRSdW50aW1lVmFyaWFibGVDYWNoZUNvbnRleHQ6DQo+IFJlcXVpcmVkDQo+ID4gICAgID4gcnVu dGltZSBjYWNoZSBidWZmZXIgaXMgTlVMTCFcbiIpKTsNCj4gPiAgICAgPiArICAgICAgICBTdGF0 dXMgPSBFRklfQUNDRVNTX0RFTklFRDsNCj4gPiAgICAgPiArICAgICAgICBnb3RvIEVYSVQ7DQo+ ID4gICAgID4gKyAgICAgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICAgIC8vDQo+ID4g ICAgID4gKyAgICAgIC8vIFZlcmlmeSBtaW5pbXVtIHNpemUgcmVxdWlyZW1lbnRzIGZvciB0aGUg cnVudGltZSB2YXJpYWJsZSBzdG9yZQ0KPiA+IGJ1ZmZlcnMuDQo+ID4gICAgID4gKyAgICAgIC8v DQo+ID4gICAgID4gKyAgICAgIGlmICgoKFJ1bnRpbWVWYXJpYWJsZUNhY2hlQ29udGV4dC0+UnVu dGltZUhvYkNhY2hlICE9IE5VTEwpICYmDQo+ID4gICAgID4gKyAgICAgICAgICAgKFJ1bnRpbWVW YXJpYWJsZUNhY2hlQ29udGV4dC0+UnVudGltZUhvYkNhY2hlLT5TaXplIDwgc2l6ZW9mDQo+ID4g ICAgID4gKFZBUklBQkxFX1NUT1JFX0hFQURFUikpKSB8fA0KPiA+ICAgICA+ICsgICAgICAgICAg KFJ1bnRpbWVWYXJpYWJsZUNhY2hlQ29udGV4dC0+UnVudGltZVZvbGF0aWxlQ2FjaGUtPlNpemUg PA0KPiBzaXplb2YNCj4gPiAgICAgPiAoVkFSSUFCTEVfU1RPUkVfSEVBREVSKSkgfHwNCj4gPiAg ICAgPiArICAgICAgICAgIChSdW50aW1lVmFyaWFibGVDYWNoZUNvbnRleHQtPlJ1bnRpbWVOdkNh Y2hlLT5TaXplIDwgc2l6ZW9mDQo+ID4gICAgID4gKFZBUklBQkxFX1NUT1JFX0hFQURFUikpKQ0K PiA+ICAgICA+ICsgICAgICB7DQo+ID4gICAgID4gKyAgICAgICAgREVCVUcgKChERUJVR19FUlJP UiwgIkluaXRSdW50aW1lVmFyaWFibGVDYWNoZUNvbnRleHQ6IEENCj4gPiBydW50aW1lDQo+ID4g ICAgID4gY2FjaGUgYnVmZmVyIHNpemUgaXMgaW52YWxpZCFcbiIpKTsNCj4gPiAgICAgPiArICAg ICAgICBTdGF0dXMgPSBFRklfQUNDRVNTX0RFTklFRDsNCj4gPiAgICAgPiArICAgICAgICBnb3Rv IEVYSVQ7DQo+ID4gICAgID4gKyAgICAgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICAg IC8vDQo+ID4gICAgID4gKyAgICAgIC8vIFZlcmlmeSBydW50aW1lIGJ1ZmZlcnMgZG8gbm90IG92 ZXJsYXAgd2l0aCBTTVJBTSByYW5nZXMuDQo+ID4gICAgID4gKyAgICAgIC8vDQo+ID4gICAgID4g KyAgICAgIGlmICgoUnVudGltZVZhcmlhYmxlQ2FjaGVDb250ZXh0LT5SdW50aW1lSG9iQ2FjaGUg IT0gTlVMTCkgJiYNCj4gPiAgICAgPiArICAgICAgICAgICFWYXJpYWJsZVNtbUlzQnVmZmVyT3V0 c2lkZVNtbVZhbGlkICgNCj4gPiAgICAgPiArICAgICAgICAgICAgIChVSU5UTilSdW50aW1lVmFy aWFibGVDYWNoZUNvbnRleHQtPlJ1bnRpbWVIb2JDYWNoZSwNCj4gPiAgICAgPiArICAgICAgICAg ICAgIChVSU5UTilSdW50aW1lVmFyaWFibGVDYWNoZUNvbnRleHQtPlJ1bnRpbWVIb2JDYWNoZS0+ U2l6ZQ0KPiA+ICAgICA+ICsgICAgICAgICAgICAgKSkNCj4gPiAgICAgPiArICAgICAgew0KPiA+ ICAgICA+ICsgICAgICAgIERFQlVHICgoREVCVUdfRVJST1IsICJJbml0UnVudGltZVZhcmlhYmxl Q2FjaGVDb250ZXh0Og0KPiBSdW50aW1lDQo+ID4gICAgID4gSE9CIGNhY2hlIGJ1ZmZlciBpbiBT TVJBTSBvciBvdmVyZmxvdyFcbiIpKTsNCj4gPiAgICAgPiArICAgICAgICBTdGF0dXMgPSBFRklf QUNDRVNTX0RFTklFRDsNCj4gPiAgICAgPiArICAgICAgICBnb3RvIEVYSVQ7DQo+ID4gICAgID4g KyAgICAgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICAgIGlmICghVmFyaWFibGVTbW1J c0J1ZmZlck91dHNpZGVTbW1WYWxpZCAoDQo+ID4gICAgID4gKyAgICAgICAgICAgICAoVUlOVE4p UnVudGltZVZhcmlhYmxlQ2FjaGVDb250ZXh0LT5SdW50aW1lVm9sYXRpbGVDYWNoZSwNCj4gPiAg ICAgPiArICAgICAgICAgICAgIChVSU5UTilSdW50aW1lVmFyaWFibGVDYWNoZUNvbnRleHQtPlJ1 bnRpbWVWb2xhdGlsZUNhY2hlLQ0KPiA+ID5TaXplDQo+ID4gICAgID4gKyAgICAgICAgICAgICAp KQ0KPiA+ICAgICA+ICsgICAgICB7DQo+ID4gICAgID4gKyAgICAgICAgREVCVUcgKChERUJVR19F UlJPUiwgIkluaXRSdW50aW1lVmFyaWFibGVDYWNoZUNvbnRleHQ6DQo+IFJ1bnRpbWUNCj4gPiAg ICAgPiB2b2xhdGlsZSBjYWNoZSBidWZmZXIgaW4gU01SQU0gb3Igb3ZlcmZsb3chXG4iKSk7DQo+ ID4gICAgID4gKyAgICAgICAgU3RhdHVzID0gRUZJX0FDQ0VTU19ERU5JRUQ7DQo+ID4gICAgID4g KyAgICAgICAgZ290byBFWElUOw0KPiA+ICAgICA+ICsgICAgICB9DQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsgICAgICBpZiAoIVZhcmlhYmxlU21tSXNCdWZmZXJPdXRzaWRlU21tVmFsaWQgKA0K PiA+ICAgICA+ICsgICAgICAgICAgICAgKFVJTlROKVJ1bnRpbWVWYXJpYWJsZUNhY2hlQ29udGV4 dC0+UnVudGltZU52Q2FjaGUsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAoVUlOVE4pUnVudGlt ZVZhcmlhYmxlQ2FjaGVDb250ZXh0LT5SdW50aW1lTnZDYWNoZS0+U2l6ZQ0KPiA+ICAgICA+ICsg ICAgICAgICAgICAgKSkNCj4gPiAgICAgPiArICAgICAgew0KPiA+ICAgICA+ICsgICAgICAgIERF QlVHICgoREVCVUdfRVJST1IsICJJbml0UnVudGltZVZhcmlhYmxlQ2FjaGVDb250ZXh0Og0KPiBS dW50aW1lDQo+ID4gICAgID4gbm9uLXZvbGF0aWxlIGNhY2hlIGJ1ZmZlciBpbiBTTVJBTSBvciBv dmVyZmxvdyFcbiIpKTsNCj4gPiAgICAgPiArICAgICAgICBTdGF0dXMgPSBFRklfQUNDRVNTX0RF TklFRDsNCj4gPiAgICAgPiArICAgICAgICBnb3RvIEVYSVQ7DQo+ID4gICAgID4gKyAgICAgIH0N Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICAgIGlmICghVmFyaWFibGVTbW1Jc0J1ZmZlck91 dHNpZGVTbW1WYWxpZCAoDQo+ID4gICAgID4gKyAgICAgICAgICAgICAoVUlOVE4pUnVudGltZVZh cmlhYmxlQ2FjaGVDb250ZXh0LT5QZW5kaW5nVXBkYXRlLA0KPiA+ICAgICA+ICsgICAgICAgICAg ICAgc2l6ZW9mICgqKFJ1bnRpbWVWYXJpYWJsZUNhY2hlQ29udGV4dC0+UGVuZGluZ1VwZGF0ZSkp DQo+ID4gICAgID4gKyAgICAgICAgICAgICApKQ0KPiA+ICAgICA+ICsgICAgICB7DQo+ID4gICAg ID4gKyAgICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkluaXRSdW50aW1lVmFyaWFibGVDYWNo ZUNvbnRleHQ6DQo+IFJ1bnRpbWUNCj4gPiAgICAgPiBjYWNoZSBwZW5kaW5nIHVwZGF0ZSBidWZm ZXIgaW4gU01SQU0gb3Igb3ZlcmZsb3chXG4iKSk7DQo+ID4gICAgID4gKyAgICAgICAgU3RhdHVz ID0gRUZJX0FDQ0VTU19ERU5JRUQ7DQo+ID4gICAgID4gKyAgICAgICAgZ290byBFWElUOw0KPiA+ ICAgICA+ICsgICAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgICBpZiAoIVZhcmlh YmxlU21tSXNCdWZmZXJPdXRzaWRlU21tVmFsaWQgKA0KPiA+ICAgICA+ICsgICAgICAgICAgICAg KFVJTlROKVJ1bnRpbWVWYXJpYWJsZUNhY2hlQ29udGV4dC0+UmVhZExvY2ssDQo+ID4gICAgID4g KyAgICAgICAgICAgICBzaXplb2YgKCooUnVudGltZVZhcmlhYmxlQ2FjaGVDb250ZXh0LT5SZWFk TG9jaykpDQo+ID4gICAgID4gKyAgICAgICAgICAgICApKQ0KPiA+ICAgICA+ICsgICAgICB7DQo+ ID4gICAgID4gKyAgICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkluaXRSdW50aW1lVmFyaWFi bGVDYWNoZUNvbnRleHQ6DQo+IFJ1bnRpbWUNCj4gPiAgICAgPiBjYWNoZSByZWFkIGxvY2sgYnVm ZmVyIGluIFNNUkFNIG9yIG92ZXJmbG93IVxuIikpOw0KPiA+ICAgICA+ICsgICAgICAgIFN0YXR1 cyA9IEVGSV9BQ0NFU1NfREVOSUVEOw0KPiA+ICAgICA+ICsgICAgICAgIGdvdG8gRVhJVDsNCj4g PiAgICAgPiArICAgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgICAgaWYgKCFWYXJp YWJsZVNtbUlzQnVmZmVyT3V0c2lkZVNtbVZhbGlkICgNCj4gPiAgICAgPiArICAgICAgICAgICAg IChVSU5UTilSdW50aW1lVmFyaWFibGVDYWNoZUNvbnRleHQtPkhvYkZsdXNoQ29tcGxldGUsDQo+ ID4gICAgID4gKyAgICAgICAgICAgICBzaXplb2YgKCooUnVudGltZVZhcmlhYmxlQ2FjaGVDb250 ZXh0LT5Ib2JGbHVzaENvbXBsZXRlKSkNCj4gPiAgICAgPiArICAgICAgICAgICAgICkpDQo+ID4g ICAgID4gKyAgICAgIHsNCj4gPiAgICAgPiArICAgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAi SW5pdFJ1bnRpbWVWYXJpYWJsZUNhY2hlQ29udGV4dDoNCj4gUnVudGltZQ0KPiA+ICAgICA+IGNh Y2hlIEhPQiBmbHVzaCBjb21wbGV0ZSBidWZmZXIgaW4gU01SQU0gb3Igb3ZlcmZsb3chXG4iKSk7 DQo+ID4gICAgID4gKyAgICAgICAgU3RhdHVzID0gRUZJX0FDQ0VTU19ERU5JRUQ7DQo+ID4gICAg ID4gKyAgICAgICAgZ290byBFWElUOw0KPiA+ICAgICA+ICsgICAgICB9DQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgICAgICBWYXJpYWJsZUNhY2hlQ29udGV4dCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA9DQo+ICZtVmFyaWFibGVNb2R1bGVHbG9iYWwtDQo+ID4gICAgID4g PlZhcmlhYmxlR2xvYmFsLlZhcmlhYmxlUnVudGltZUNhY2hlQ29udGV4dDsNCj4gPiAgICAgPiAr ICAgICAgVmFyaWFibGVDYWNoZUNvbnRleHQtPlZhcmlhYmxlUnVudGltZUhvYkNhY2hlLlN0b3Jl ICAgICAgPQ0KPiA+ICAgICA+IFJ1bnRpbWVWYXJpYWJsZUNhY2hlQ29udGV4dC0+UnVudGltZUhv YkNhY2hlOw0KPiA+ICAgICA+ICsgICAgICBWYXJpYWJsZUNhY2hlQ29udGV4dC0+VmFyaWFibGVS dW50aW1lVm9sYXRpbGVDYWNoZS5TdG9yZSA9DQo+ID4gICAgID4gUnVudGltZVZhcmlhYmxlQ2Fj aGVDb250ZXh0LT5SdW50aW1lVm9sYXRpbGVDYWNoZTsNCj4gPiAgICAgPiArICAgICAgVmFyaWFi bGVDYWNoZUNvbnRleHQtPlZhcmlhYmxlUnVudGltZU52Q2FjaGUuU3RvcmUgICAgICAgPQ0KPiA+ ICAgICA+IFJ1bnRpbWVWYXJpYWJsZUNhY2hlQ29udGV4dC0+UnVudGltZU52Q2FjaGU7DQo+ID4g ICAgID4gKyAgICAgIFZhcmlhYmxlQ2FjaGVDb250ZXh0LT5QZW5kaW5nVXBkYXRlICAgICAgICAg ICAgICAgICAgICAgID0NCj4gPiAgICAgPiBSdW50aW1lVmFyaWFibGVDYWNoZUNvbnRleHQtPlBl bmRpbmdVcGRhdGU7DQo+ID4gICAgID4gKyAgICAgIFZhcmlhYmxlQ2FjaGVDb250ZXh0LT5SZWFk TG9jayAgICAgICAgICAgICAgICAgICAgICAgICAgID0NCj4gPiAgICAgPiBSdW50aW1lVmFyaWFi bGVDYWNoZUNvbnRleHQtPlJlYWRMb2NrOw0KPiA+ICAgICA+ICsgICAgICBWYXJpYWJsZUNhY2hl Q29udGV4dC0+SG9iRmx1c2hDb21wbGV0ZSAgICAgICAgICAgICAgICAgICA9DQo+ID4gICAgID4g UnVudGltZVZhcmlhYmxlQ2FjaGVDb250ZXh0LT5Ib2JGbHVzaENvbXBsZXRlOw0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArICAgICAgLy8gU2V0IHVwIHRoZSBpbnRpYWwgcGVuZGluZyByZXF1ZXN0 IHNpbmNlIHRoZSBSVCBjYWNoZSBuZWVkcyB0byBiZSBpbg0KPiA+IHN5bmMNCj4gPiAgICAgPiB3 aXRoIFNNTSBjYWNoZQ0KPiA+ICAgICA+ICsgICAgICBWYXJpYWJsZUNhY2hlQ29udGV4dC0NCj4g PiA+VmFyaWFibGVSdW50aW1lSG9iQ2FjaGUuUGVuZGluZ1VwZGF0ZU9mZnNldCA9DQo+ID4gICAg ID4gMDsNCj4gPiAgICAgPiArICAgICAgVmFyaWFibGVDYWNoZUNvbnRleHQtDQo+ID4gPlZhcmlh YmxlUnVudGltZUhvYkNhY2hlLlBlbmRpbmdVcGRhdGVMZW5ndGggPQ0KPiA+ICAgICA+IDA7DQo+ ID4gICAgID4gKyAgICAgIGlmICgobVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2Jh bC5Ib2JWYXJpYWJsZUJhc2UgPiAwKSAmJg0KPiA+ICAgICA+ICsgICAgICAgICAgKFZhcmlhYmxl Q2FjaGVDb250ZXh0LT5WYXJpYWJsZVJ1bnRpbWVIb2JDYWNoZS5TdG9yZSAhPSBOVUxMKSkNCj4g PiAgICAgPiArICAgICAgew0KPiA+ICAgICA+ICsgICAgICAgIFZhcmlhYmxlQ2FjaGUgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0NCj4gPiAoVkFS SUFCTEVfU1RPUkVfSEVBREVSDQo+ID4gICAgID4gKikoVUlOVE4pbVZhcmlhYmxlTW9kdWxlR2xv YmFsLT5WYXJpYWJsZUdsb2JhbC5Ib2JWYXJpYWJsZUJhc2U7DQo+ID4gICAgID4gKyAgICAgICAg VmFyaWFibGVDYWNoZUNvbnRleHQtDQo+ID4gPlZhcmlhYmxlUnVudGltZUhvYkNhY2hlLlBlbmRp bmdVcGRhdGVMZW5ndGgNCj4gPiAgICAgPiA9IChVSU5UMzIpKChVSU5UTilHZXRFbmRQb2ludGVy IChWYXJpYWJsZUNhY2hlKSAtDQo+IChVSU5UTilWYXJpYWJsZUNhY2hlKTsNCj4gPiAgICAgPiAr ICAgICAgICBDb3B5R3VpZCAoJihWYXJpYWJsZUNhY2hlQ29udGV4dC0NCj4gPiA+VmFyaWFibGVS dW50aW1lSG9iQ2FjaGUuU3RvcmUtDQo+ID4gICAgID4gPlNpZ25hdHVyZSksICYoVmFyaWFibGVD YWNoZS0+U2lnbmF0dXJlKSk7DQo+ID4gICAgID4gKyAgICAgIH0NCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyAgICAgIFZhcmlhYmxlQ2FjaGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgPQ0KPiA+IChWQVJJQUJMRV9TVE9SRV9IRUFERVIN Cj4gPiAgICAgPiAqKShVSU5UTiltVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFs LlZvbGF0aWxlVmFyaWFibGVCYXNlOw0KPiA+ICAgICA+ICsgICAgICBWYXJpYWJsZUNhY2hlQ29u dGV4dC0NCj4gPiAgICAgPiA+VmFyaWFibGVSdW50aW1lVm9sYXRpbGVDYWNoZS5QZW5kaW5nVXBk YXRlT2Zmc2V0ID0gMDsNCj4gPiAgICAgPiArICAgICAgVmFyaWFibGVDYWNoZUNvbnRleHQtDQo+ ID4gICAgID4gPlZhcmlhYmxlUnVudGltZVZvbGF0aWxlQ2FjaGUuUGVuZGluZ1VwZGF0ZUxlbmd0 aCA9DQo+ID4gICAgID4gKFVJTlQzMikoKFVJTlROKUdldEVuZFBvaW50ZXIgKFZhcmlhYmxlQ2Fj aGUpIC0gKFVJTlROKVZhcmlhYmxlQ2FjaGUpOw0KPiA+ICAgICA+ICsgICAgICBDb3B5R3VpZCAo JihWYXJpYWJsZUNhY2hlQ29udGV4dC0NCj4gPiA+VmFyaWFibGVSdW50aW1lVm9sYXRpbGVDYWNo ZS5TdG9yZS0NCj4gPiAgICAgPiA+U2lnbmF0dXJlKSwgJihWYXJpYWJsZUNhY2hlLT5TaWduYXR1 cmUpKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICAgIFZhcmlhYmxlQ2FjaGUgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPQ0KPiA+IChWQVJJ QUJMRV9TVE9SRV9IRUFERVINCj4gPiAgICAgPiAqKShVSU5UTiltTnZWYXJpYWJsZUNhY2hlOw0K PiA+ICAgICA+ICsgICAgICBWYXJpYWJsZUNhY2hlQ29udGV4dC0NCj4gPiA+VmFyaWFibGVSdW50 aW1lTnZDYWNoZS5QZW5kaW5nVXBkYXRlT2Zmc2V0ID0gMDsNCj4gPiAgICAgPiArICAgICAgVmFy aWFibGVDYWNoZUNvbnRleHQtDQo+ID4gPlZhcmlhYmxlUnVudGltZU52Q2FjaGUuUGVuZGluZ1Vw ZGF0ZUxlbmd0aCA9DQo+ID4gICAgID4gKFVJTlQzMikoKFVJTlROKUdldEVuZFBvaW50ZXIgKFZh cmlhYmxlQ2FjaGUpIC0gKFVJTlROKVZhcmlhYmxlQ2FjaGUpOw0KPiA+ICAgICA+ICsgICAgICBD b3B5R3VpZCAoJihWYXJpYWJsZUNhY2hlQ29udGV4dC0+VmFyaWFibGVSdW50aW1lTnZDYWNoZS5T dG9yZS0NCj4gPiAgICAgPiA+U2lnbmF0dXJlKSwgJihWYXJpYWJsZUNhY2hlLT5TaWduYXR1cmUp KTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICAgICooVmFyaWFibGVDYWNoZUNvbnRleHQt PlBlbmRpbmdVcGRhdGUpICAgID0gVFJVRTsNCj4gPiAgICAgPiArICAgICAgKihWYXJpYWJsZUNh Y2hlQ29udGV4dC0+UmVhZExvY2spICAgICAgICAgPSBGQUxTRTsNCj4gPiAgICAgPiArICAgICAg KihWYXJpYWJsZUNhY2hlQ29udGV4dC0+SG9iRmx1c2hDb21wbGV0ZSkgPSBGQUxTRTsNCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKyAgICAgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KPiA+ICAgICA+ ICsgICAgICBicmVhazsNCj4gPiAgICAgPiArICAgIGNhc2UgU01NX1ZBUklBQkxFX0ZVTkNUSU9O X1NZTkNfUlVOVElNRV9DQUNIRToNCj4gPiAgICAgPiArICAgICAgU3RhdHVzID0gRmx1c2hQZW5k aW5nUnVudGltZVZhcmlhYmxlQ2FjaGVVcGRhdGVzICgpOw0KPiA+ICAgICA+ICsgICAgICBicmVh azsNCj4gPiAgICAgPiArICAgIGNhc2UgU01NX1ZBUklBQkxFX0ZVTkNUSU9OX0dFVF9SVU5USU1F X0NBQ0hFX0lORk86DQo+ID4gICAgID4gKyAgICAgIGlmIChDb21tQnVmZmVyUGF5bG9hZFNpemUg PCBzaXplb2YNCj4gPiAgICAgPiAoU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0dFVF9SVU5USU1F X0NBQ0hFX0lORk8pKSB7DQo+ID4gICAgID4gKyAgICAgICAgREVCVUcgKChERUJVR19FUlJPUiwg IkdldFJ1bnRpbWVDYWNoZUluZm86IFNNTQ0KPiA+IGNvbW11bmljYXRpb24NCj4gPiAgICAgPiBi dWZmZXIgc2l6ZSBpbnZhbGlkIVxuIikpOw0KPiA+ICAgICA+ICsgICAgICAgIHJldHVybiBFRklf U1VDQ0VTUzsNCj4gPiAgICAgPiArICAgICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAg ICAgR2V0UnVudGltZUNhY2hlSW5mbyA9DQo+ID4gICAgID4gKFNNTV9WQVJJQUJMRV9DT01NVU5J Q0FURV9HRVRfUlVOVElNRV9DQUNIRV9JTkZPDQo+ID4gICAgID4gKilTbW1WYXJpYWJsZUZ1bmN0 aW9uSGVhZGVyLT5EYXRhOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgICAgaWYgKG1WYXJp YWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVHbG9iYWwuSG9iVmFyaWFibGVCYXNlID4gMCkgew0K PiA+ICAgICA+ICsgICAgICAgIFZhcmlhYmxlQ2FjaGUgICAgICAgICAgICAgICAgICAgICAgICAg ICAgPSAoVkFSSUFCTEVfU1RPUkVfSEVBREVSDQo+ID4gICAgID4gKikoVUlOVE4pbVZhcmlhYmxl TW9kdWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5Ib2JWYXJpYWJsZUJhc2U7DQo+ID4gICAgID4g KyAgICAgICAgR2V0UnVudGltZUNhY2hlSW5mby0+VG90YWxIb2JTdG9yYWdlU2l6ZSA9IFZhcmlh YmxlQ2FjaGUtPlNpemU7DQo+ID4gICAgID4gKyAgICAgIH0gZWxzZSB7DQo+ID4gICAgID4gKyAg ICAgICAgR2V0UnVudGltZUNhY2hlSW5mby0+VG90YWxIb2JTdG9yYWdlU2l6ZSA9IDA7DQo+ID4g ICAgID4gKyAgICAgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICAgIFZhcmlhYmxlQ2Fj aGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gKFZBUklBQkxFX1NUT1JFX0hF QURFUg0KPiA+ICAgICA+ICopKFVJTlROKW1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+VmFyaWFibGVH bG9iYWwuVm9sYXRpbGVWYXJpYWJsZUJhc2U7DQo+ID4gICAgID4gKyAgICAgIEdldFJ1bnRpbWVD YWNoZUluZm8tPlRvdGFsVm9sYXRpbGVTdG9yYWdlU2l6ZSAgID0gVmFyaWFibGVDYWNoZS0NCj4g PiA+U2l6ZTsNCj4gPiAgICAgPiArICAgICAgVmFyaWFibGVDYWNoZSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgPSAoVkFSSUFCTEVfU1RPUkVfSEVBREVSDQo+ID4gICAgID4gKiko VUlOVE4pbU52VmFyaWFibGVDYWNoZTsNCj4gPiAgICAgPiArICAgICAgR2V0UnVudGltZUNhY2hl SW5mby0+VG90YWxOdlN0b3JhZ2VTaXplICAgICAgICAgPQ0KPiA+IChVSU5UTilWYXJpYWJsZUNh Y2hlLQ0KPiA+ICAgICA+ID5TaXplOw0KPiA+ICAgICA+ICsgICAgICBHZXRSdW50aW1lQ2FjaGVJ bmZvLT5BdXRoZW50aWNhdGVkVmFyaWFibGVVc2FnZSA9DQo+ID4gICAgID4gbVZhcmlhYmxlTW9k dWxlR2xvYmFsLT5WYXJpYWJsZUdsb2JhbC5BdXRoRm9ybWF0Ow0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICAgICAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+ID4gICAgID4gKyAgICAgIGJyZWFr Ow0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgIGRlZmF1bHQ6DQo+ID4gICAgID4gKyAgICAg IFN0YXR1cyA9IEVGSV9VTlNVUFBPUlRFRDsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICtFWElUOg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBTbW1WYXJpYWJsZUZ1 bmN0aW9uSGVhZGVyLT5SZXR1cm5TdGF0dXMgPSBTdGF0dXM7DQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgU01NIEVORF9PRl9EWEUgcHJvdG9jb2wgbm90aWZp Y2F0aW9uIGV2ZW50IGhhbmRsZXIuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbSAg UHJvdG9jb2wgICBQb2ludHMgdG8gdGhlIHByb3RvY29sJ3MgdW5pcXVlIGlkZW50aWZpZXINCj4g PiAgICAgPiArICBAcGFyYW0gIEludGVyZmFjZSAgUG9pbnRzIHRvIHRoZSBpbnRlcmZhY2UgaW5z dGFuY2UNCj4gPiAgICAgPiArICBAcGFyYW0gIEhhbmRsZSAgICAgVGhlIGhhbmRsZSBvbiB3aGlj aCB0aGUgaW50ZXJmYWNlIHdhcyBpbnN0YWxsZWQNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg QHJldHZhbCBFRklfU1VDQ0VTUyAgIFNtbUVuZE9mRHhlQ2FsbGJhY2sgcnVucyBzdWNjZXNzZnVs bHkNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtFRklfU1RBVFVTDQo+ ID4gICAgID4gK0VGSUFQSQ0KPiA+ICAgICA+ICtTbW1FbmRPZkR4ZUNhbGxiYWNrICgNCj4gPiAg ICAgPiArICBJTiBDT05TVCBFRklfR1VJRCAgKlByb3RvY29sLA0KPiA+ICAgICA+ICsgIElOIFZP SUQgICAgICAgICAgICAqSW50ZXJmYWNlLA0KPiA+ICAgICA+ICsgIElOIEVGSV9IQU5ETEUgICAg ICBIYW5kbGUNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBFRklf U1RBVFVTICBTdGF0dXM7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIERFQlVHICgoREVCVUdf SU5GTywgIltWYXJpYWJsZV1TTU1fRU5EX09GX0RYRSBpcyBzaWduYWxlZFxuIikpOw0KPiA+ICAg ICA+ICsgIE1vckxvY2tJbml0QXRFbmRPZkR4ZSAoKTsNCj4gPiAgICAgPiArICBTdGF0dXMgPSBM b2NrVmFyaWFibGVQb2xpY3kgKCk7DQo+ID4gICAgID4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3Rh dHVzKTsNCj4gPiAgICAgPiArICBtRW5kT2ZEeGUgPSBUUlVFOw0KPiA+ICAgICA+ICsgIFZhckNo ZWNrTGliSW5pdGlhbGl6ZUF0RW5kT2ZEeGUgKE5VTEwpOw0KPiA+ICAgICA+ICsgIC8vDQo+ID4g ICAgID4gKyAgLy8gVGhlIGluaXRpYWxpemF0aW9uIGZvciB2YXJpYWJsZSBxdW90YS4NCj4gPiAg ICAgPiArICAvLw0KPiA+ICAgICA+ICsgIEluaXRpYWxpemVWYXJpYWJsZVF1b3RhICgpOw0KPiA+ ICAgICA+ICsgIGlmIChQY2RHZXRCb29sIChQY2RSZWNsYWltVmFyaWFibGVTcGFjZUF0RW5kT2ZE eGUpKSB7DQo+ID4gICAgID4gKyAgICBSZWNsYWltRm9yT1MgKCk7DQo+ID4gICAgID4gKyAgfQ0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gICAgID4g K30NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIEluaXRpYWxpemVz IHZhcmlhYmxlIHdyaXRlIHNlcnZpY2UgZm9yIFNNTS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyoqLw0KPiA+ICAgICA+ICtWT0lEDQo+ID4gICAgID4gK1ZhcmlhYmxlV3JpdGVTZXJ2aWNlSW5p dGlhbGl6ZVNtbSAoDQo+ID4gICAgID4gKyAgVk9JRA0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAg PiArew0KPiA+ICAgICA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyAgU3RhdHVzID0gUHJvdGVjdGVkVmFyaWFibGVMaWJXcml0ZUluaXQgKCk7DQo+ID4g ICAgID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSAmJiAoU3RhdHVzICE9IEVGSV9VTlNVUFBP UlRFRCkpIHsNCj4gPiAgICAgPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICJWYXJpYWJsZSBw cm90ZWN0aW9uIHNlcnZpY2U6IHdyaXRlLWluaXQgZmFpbGVkLg0KPiA+ICAgICA+IFN0YXR1cyA9 ICVyXG4iLCBTdGF0dXMpKTsNCj4gPiAgICAgPiArICAgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1 cyk7DQo+ID4gICAgID4gKyAgICByZXR1cm47DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICBTdGF0dXMgPSBWYXJpYWJsZVdyaXRlU2VydmljZUluaXRpYWxpemUgKCk7 DQo+ID4gICAgID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICAgICA+ICsgICAg REVCVUcgKChERUJVR19FUlJPUiwgIlZhcmlhYmxlIHdyaXRlIHNlcnZpY2UgaW5pdGlhbGl6YXRp b24gZmFpbGVkLg0KPiA+IFN0YXR1cw0KPiA+ICAgICA+ID0gJXJcbiIsIFN0YXR1cykpOw0KPiA+ ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAv LyBOb3RpZnkgdGhlIHZhcmlhYmxlIHdyYXBwZXIgZHJpdmVyIHRoZSB2YXJpYWJsZSB3cml0ZSBz ZXJ2aWNlIGlzIHJlYWR5DQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBWYXJpYWJsZU5v dGlmeVNtbVdyaXRlUmVhZHkgKCk7DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKy8qKg0KPiA+ICAgICA+ICsgIFNNTSBGYXVsdCBUb2xlcmFudCBXcml0ZSBwcm90b2NvbCBu b3RpZmljYXRpb24gZXZlbnQgaGFuZGxlci4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgTm9u LVZvbGF0aWxlIHZhcmlhYmxlIHdyaXRlIG1heSBuZWVkcyBGVFcgcHJvdG9jb2wgdG8gcmVjbGFp bSB3aGVuDQo+ID4gICAgID4gKyAgd3JpdHRpbmcgdmFyaWFibGUuDQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsgIEBwYXJhbSAgUHJvdG9jb2wgICBQb2ludHMgdG8gdGhlIHByb3RvY29sJ3MgdW5p cXVlIGlkZW50aWZpZXINCj4gPiAgICAgPiArICBAcGFyYW0gIEludGVyZmFjZSAgUG9pbnRzIHRv IHRoZSBpbnRlcmZhY2UgaW5zdGFuY2UNCj4gPiAgICAgPiArICBAcGFyYW0gIEhhbmRsZSAgICAg VGhlIGhhbmRsZSBvbiB3aGljaCB0aGUgaW50ZXJmYWNlIHdhcyBpbnN0YWxsZWQNCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgIFNtbUV2ZW50Q2FsbGJhY2sg cnVucyBzdWNjZXNzZnVsbHkNCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgVGhl IEZ2YiBwcm90b2NvbCBmb3IgdmFyaWFibGUgaXMgbm90IGZvdW5kLg0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICoqLw0KPiA+ICAgICA+ICtFRklfU1RBVFVTDQo+ID4gICAgID4gK0VGSUFQSQ0K PiA+ICAgICA+ICtTbW1GdHdOb3RpZmljYXRpb25FdmVudCAoDQo+ID4gICAgID4gKyAgSU4gQ09O U1QgRUZJX0dVSUQgICpQcm90b2NvbCwNCj4gPiAgICAgPiArICBJTiBWT0lEICAgICAgICAgICAg KkludGVyZmFjZSwNCj4gPiAgICAgPiArICBJTiBFRklfSEFORExFICAgICAgSGFuZGxlDQo+ID4g ICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgRUZJX1NUQVRVUyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gPiAgICAgPiArICBFRklfUEhZU0lDQUxf QUREUkVTUyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVTdG9yZUJhc2U7DQo+ID4gICAgID4g KyAgRUZJX1NNTV9GSVJNV0FSRV9WT0xVTUVfQkxPQ0tfUFJPVE9DT0wgICpGdmJQcm90b2NvbDsN Cj4gPiAgICAgPiArICBFRklfU01NX0ZBVUxUX1RPTEVSQU5UX1dSSVRFX1BST1RPQ09MICAgKkZ0 d1Byb3RvY29sOw0KPiA+ICAgICA+ICsgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgICAgICAg ICAgICAgICBOdlN0b3JhZ2VWYXJpYWJsZUJhc2U7DQo+ID4gICAgID4gKyAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ0d01heEJsb2NrU2l6ZTsNCj4gPiAgICAgPiAr ICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnZTdG9yYWdlVmFyaWFi bGVTaXplOw0KPiA+ICAgICA+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBOdlN0b3JhZ2VWYXJpYWJsZVNpemU2NDsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg aWYgKG1WYXJpYWJsZU1vZHVsZUdsb2JhbC0+RnZiSW5zdGFuY2UgIT0gTlVMTCkgew0KPiA+ICAg ICA+ICsgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBFbnN1cmUgU01NIEZUVyBwcm90b2Nv bCBpcyBpbnN0YWxsZWQuDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBTdGF0dXMgPSBH ZXRGdHdQcm90b2NvbCAoKFZPSUQgKiopJkZ0d1Byb3RvY29sKTsNCj4gPiAgICAgPiArICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAgID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgU3RhdHVzID0gR2V0VmFyaWFi bGVGbGFzaE52U3RvcmFnZUluZm8gKCZOdlN0b3JhZ2VWYXJpYWJsZUJhc2UsDQo+ID4gICAgID4g Jk52U3RvcmFnZVZhcmlhYmxlU2l6ZTY0KTsNCj4gPiAgICAgPiArICBBU1NFUlRfRUZJX0VSUk9S IChTdGF0dXMpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBTdGF0dXMgPSBTYWZlVWludDY0 VG9VaW50MzIgKE52U3RvcmFnZVZhcmlhYmxlU2l6ZTY0LA0KPiA+ICAgICA+ICZOdlN0b3JhZ2VW YXJpYWJsZVNpemUpOw0KPiA+ICAgICA+ICsgIC8vIFRoaXMgZHJpdmVyIGN1cnJlbnRseSBhc3N1 bWVzIHRoZSBzaXplIHdpbGwgYmUgVUlOVDMyIHNvIGFzc2VydCB0aGUNCj4gdmFsdWUNCj4gPiBp cw0KPiA+ICAgICA+IHNhZmUgZm9yIG5vdy4NCj4gPiAgICAgPiArICBBU1NFUlRfRUZJX0VSUk9S IChTdGF0dXMpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBBU1NFUlQgKE52U3RvcmFnZVZh cmlhYmxlQmFzZSAhPSAwKTsNCj4gPiAgICAgPiArICBWYXJpYWJsZVN0b3JlQmFzZSA9IE52U3Rv cmFnZVZhcmlhYmxlQmFzZSArIG1OdkZ2SGVhZGVyQ2FjaGUtDQo+ID4gICAgID4gPkhlYWRlckxl bmd0aDsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgU3RhdHVzID0gRnR3UHJvdG9jb2wtPkdl dE1heEJsb2NrU2l6ZSAoRnR3UHJvdG9jb2wsDQo+ID4gJkZ0d01heEJsb2NrU2l6ZSk7DQo+ID4g ICAgID4gKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiArICAgIEFTU0VS VCAoTnZTdG9yYWdlVmFyaWFibGVTaXplIDw9IEZ0d01heEJsb2NrU2l6ZSk7DQo+ID4gICAgID4g KyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIExldCBO b25Wb2xhdGlsZVZhcmlhYmxlQmFzZSBwb2ludCB0byBmbGFzaCB2YXJpYWJsZSBzdG9yZSBiYXNl IGRpcmVjdGx5DQo+ID4gYWZ0ZXINCj4gPiAgICAgPiBGVFcgcmVhZHkuDQo+ID4gICAgID4gKyAg Ly8NCj4gPiAgICAgPiArICBtVmFyaWFibGVNb2R1bGVHbG9iYWwtPlZhcmlhYmxlR2xvYmFsLk5v blZvbGF0aWxlVmFyaWFibGVCYXNlID0NCj4gPiAgICAgPiBWYXJpYWJsZVN0b3JlQmFzZTsNCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBGaW5kIHRoZSBwcm9w ZXIgRlZCIHByb3RvY29sIGZvciB2YXJpYWJsZS4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ ICsgIFN0YXR1cyA9IEdldEZ2YkluZm9CeUFkZHJlc3MgKE52U3RvcmFnZVZhcmlhYmxlQmFzZSwg TlVMTCwNCj4gPiAmRnZiUHJvdG9jb2wpOw0KPiA+ICAgICA+ICsgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4gPiAgICAgPiArICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPiA+ICAgICA+ ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgbVZhcmlhYmxlTW9kdWxlR2xvYmFsLT5G dmJJbnN0YW5jZSA9IEZ2YlByb3RvY29sOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0K PiA+ICAgICA+ICsgIC8vIEluaXRpYWxpemVzIHZhcmlhYmxlIHdyaXRlIHNlcnZpY2UgYWZ0ZXIg RlRXIHdhcyByZWFkeS4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIFZhcmlhYmxlV3Jp dGVTZXJ2aWNlSW5pdGlhbGl6ZVNtbSAoKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgcmV0 dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsv KioNCj4gPiAgICAgPiArICBWYXJpYWJsZSBEcml2ZXIgbWFpbiBlbnRyeSBwb2ludC4gVGhlIFZh cmlhYmxlIGRyaXZlciBwbGFjZXMgdGhlIDQgRUZJDQo+ID4gICAgID4gKyAgcnVudGltZSBzZXJ2 aWNlcyBpbiB0aGUgRUZJIFN5c3RlbSBUYWJsZSBhbmQgaW5zdGFsbHMgYXJjaCBwcm90b2NvbHMN Cj4gPiAgICAgPiArICBmb3IgdmFyaWFibGUgcmVhZCBhbmQgd3JpdGUgc2VydmljZXMgYmVpbmcg YXZhaWxhYmxlLiBJdCBhbHNvIHJlZ2lzdGVycw0KPiA+ICAgICA+ICsgIGEgbm90aWZpY2F0aW9u IGZ1bmN0aW9uIGZvciBhbiBFVlRfU0lHTkFMX1ZJUlRVQUxfQUREUkVTU19DSEFOR0UNCj4gPiAg ICAgPiBldmVudC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICBWYXJpYWJsZSBzZXJ2aWNlIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZC4NCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtFRklfU1RBVFVTDQo+ID4gICAgID4g K0VGSUFQSQ0KPiA+ICAgICA+ICtNbVZhcmlhYmxlU2VydmljZUluaXRpYWxpemUgKA0KPiA+ICAg ICA+ICsgIFZPSUQNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBF RklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ICAgICA+ICsgIEVGSV9I QU5ETEUgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUhhbmRsZTsNCj4gPiAgICAgPiArICBW T0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgKlNtbUZ0d1JlZ2lzdHJhdGlvbjsNCj4gPiAg ICAgPiArICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgKlNtbUVuZE9mRHhlUmVnaXN0 cmF0aW9uOw0KPiA+ICAgICA+ICsgIFBST1RFQ1RFRF9WQVJJQUJMRV9DT05URVhUX0lOICBDb250 ZXh0SW47DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gSW5p dGlhbGl6ZSBwcm90ZWN0ZWQgdmFyaWFibGUgc2VydmljZSwgaWYgZW5hYmxlZC4NCj4gPiAgICAg PiArICAvLw0KPiA+ICAgICA+ICsgIENvbnRleHRJbi5TdHJ1Y3RTaXplICAgID0gc2l6ZW9mIChD b250ZXh0SW4pOw0KPiA+ICAgICA+ICsgIENvbnRleHRJbi5TdHJ1Y3RWZXJzaW9uID0NCj4gPiAg ICAgPiBQUk9URUNURURfVkFSSUFCTEVfQ09OVEVYVF9JTl9TVFJVQ1RfVkVSU0lPTjsNCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKyAgQ29udGV4dEluLkZpbmRWYXJpYWJsZVNtbSAgICAgPSBOVUxM Ow0KPiA+ICAgICA+ICsgIENvbnRleHRJbi5HZXRWYXJpYWJsZUluZm8gICAgID0gR2V0VmFyaWFi bGVJbmZvOw0KPiA+ICAgICA+ICsgIENvbnRleHRJbi5HZXROZXh0VmFyaWFibGVJbmZvID0gR2V0 TmV4dFZhcmlhYmxlSW5mbzsNCj4gPiAgICAgPiArICBDb250ZXh0SW4uVXBkYXRlVmFyaWFibGVT dG9yZSA9IFZhcmlhYmxlRXhMaWJVcGRhdGVOdlZhcmlhYmxlOw0KPiA+ICAgICA+ICsgIENvbnRl eHRJbi5VcGRhdGVWYXJpYWJsZSAgICAgID0gVmFyaWFibGVFeExpYlVwZGF0ZVZhcmlhYmxlOw0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBDb250ZXh0SW4uTWF4VmFyaWFibGVTaXplICAgICA9 IChVSU5UMzIpR2V0TWF4VmFyaWFibGVTaXplICgpOw0KPiA+ICAgICA+ICsgIENvbnRleHRJbi5W YXJpYWJsZVNlcnZpY2VVc2VyID0gRnJvbVNtbU1vZHVsZTsNCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgU3RhdHVzID0gUHJvdGVjdGVkVmFyaWFibGVMaWJJbml0aWFsaXplICgmQ29udGV4dElu KTsNCj4gPiAgICAgPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpICYmIChTdGF0dXMgIT0gRUZJ X1VOU1VQUE9SVEVEKSkgew0KPiA+ICAgICA+ICsgICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVz KTsNCj4gPiAgICAgPiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIFZhcmlhYmxlIGluaXRpYWxp emUuDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBTdGF0dXMgPSBWYXJpYWJsZUNvbW1v bkluaXRpYWxpemUgKCk7DQo+ID4gICAgID4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsN Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBJbnN0YWxsIHRo ZSBTbW0gVmFyaWFibGUgUHJvdG9jb2wgb24gYSBuZXcgaGFuZGxlLg0KPiA+ICAgICA+ICsgIC8v DQo+ID4gICAgID4gKyAgVmFyaWFibGVIYW5kbGUgPSBOVUxMOw0KPiA+ICAgICA+ICsgIFN0YXR1 cyAgICAgICAgID0gZ01tc3QtPk1tSW5zdGFsbFByb3RvY29sSW50ZXJmYWNlICgNCj4gPiAgICAg PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICZWYXJpYWJsZUhhbmRsZSwNCj4gPiAgICAg PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnRWZpU21tVmFyaWFibGVQcm90b2NvbEd1 aWQsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRklfTkFUSVZFX0lO VEVSRkFDRSwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnU21tVmFy aWFibGUNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gICAg ID4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgU3RhdHVzID0gZ01tc3QtPk1tSW5zdGFsbFByb3RvY29sSW50ZXJmYWNlICgNCj4gPiAgICAg PiArICAgICAgICAgICAgICAgICAgICAmVmFyaWFibGVIYW5kbGUsDQo+ID4gICAgID4gKyAgICAg ICAgICAgICAgICAgICAgJmdFZGtpaVNtbVZhckNoZWNrUHJvdG9jb2xHdWlkLA0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgICAgICAgIEVGSV9OQVRJVkVfSU5URVJGQUNFLA0KPiA+ICAgICA+ICsg ICAgICAgICAgICAgICAgICAgICZtU21tVmFyQ2hlY2sNCj4gPiAgICAgPiArICAgICAgICAgICAg ICAgICAgICApOw0KPiA+ICAgICA+ICsgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgIG1WYXJpYWJsZUJ1ZmZlclBheWxvYWRTaXplID0gIEdldE1h eFZhcmlhYmxlU2l6ZSAoKSArDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPRkZTRVRfT0YNCj4gPiAgICAgPiAoU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX1ZBUl9D SEVDS19WQVJJQUJMRV9QUk9QRVJUWSwNCj4gPiBOYW1lKSAtDQo+ID4gICAgID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBHZXRWYXJpYWJsZUhlYWRlclNpemUgKG1WYXJpYWJsZU1v ZHVsZUdsb2JhbC0NCj4gPiAgICAgPiA+VmFyaWFibGVHbG9iYWwuQXV0aEZvcm1hdCk7DQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgIFN0YXR1cyA9IGdNbXN0LT5NbUFsbG9jYXRlUG9vbCAoDQo+ ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgRWZpUnVudGltZVNlcnZpY2VzRGF0YSwNCj4g PiAgICAgPiArICAgICAgICAgICAgICAgICAgICBtVmFyaWFibGVCdWZmZXJQYXlsb2FkU2l6ZSwN Cj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmbVZhcmlhYmxlQnVmZmVy UGF5bG9hZA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gICAgID4gKyAg QVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8v DQo+ID4gICAgID4gKyAgLy8vIFJlZ2lzdGVyIFNNTSB2YXJpYWJsZSBTTUkgaGFuZGxlcg0KPiA+ ICAgICA+ICsgIC8vLw0KPiA+ICAgICA+ICsgIFZhcmlhYmxlSGFuZGxlID0gTlVMTDsNCj4gPiAg ICAgPiArICBTdGF0dXMgICAgICAgICA9IGdNbXN0LT5NbWlIYW5kbGVyUmVnaXN0ZXIgKFNtbVZh cmlhYmxlSGFuZGxlciwNCj4gPiAgICAgPiAmZ0VmaVNtbVZhcmlhYmxlUHJvdG9jb2xHdWlkLCAm VmFyaWFibGVIYW5kbGUpOw0KPiA+ICAgICA+ICsgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7 DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gTm90aWZ5IHRo ZSB2YXJpYWJsZSB3cmFwcGVyIGRyaXZlciB0aGUgdmFyaWFibGUgc2VydmljZSBpcyByZWFkeQ0K PiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgVmFyaWFibGVOb3RpZnlTbW1SZWFkeSAoKTsN Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBSZWdpc3RlciBF RklfU01NX0VORF9PRl9EWEVfUFJPVE9DT0xfR1VJRCBub3RpZnkgZnVuY3Rpb24uDQo+ID4gICAg ID4gKyAgLy8NCj4gPiAgICAgPiArICBTdGF0dXMgPSBnTW1zdC0+TW1SZWdpc3RlclByb3RvY29s Tm90aWZ5ICgNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAmZ0VmaU1tRW5kT2ZEeGVQ cm90b2NvbEd1aWQsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgU21tRW5kT2ZEeGVD YWxsYmFjaywNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAmU21tRW5kT2ZEeGVSZWdp c3RyYXRpb24NCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICApOw0KPiA+ICAgICA+ICsg IEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIGlm ICghUGNkR2V0Qm9vbCAoUGNkRW11VmFyaWFibGVOdk1vZGVFbmFibGUpKSB7DQo+ID4gICAgID4g KyAgICAvLw0KPiA+ICAgICA+ICsgICAgLy8gUmVnaXN0ZXIgRnR3Tm90aWZpY2F0aW9uRXZlbnQg KCkgbm90aWZ5IGZ1bmN0aW9uLg0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIFN0 YXR1cyA9IGdNbXN0LT5NbVJlZ2lzdGVyUHJvdG9jb2xOb3RpZnkgKA0KPiA+ICAgICA+ICsgICAg ICAgICAgICAgICAgICAgICAgJmdFZmlTbW1GYXVsdFRvbGVyYW50V3JpdGVQcm90b2NvbEd1aWQs DQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICBTbW1GdHdOb3RpZmljYXRpb25FdmVu dCwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICZTbW1GdHdSZWdpc3RyYXRpb24N Cj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gICAgID4gKyAgICBBU1NF UlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgIFNtbUZ0 d05vdGlmaWNhdGlvbkV2ZW50IChOVUxMLCBOVUxMLCBOVUxMKTsNCj4gPiAgICAgPiArICB9IGVs c2Ugew0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIC8vIEVtdWxhdGVkIG5vbi12 b2xhdGlsZSB2YXJpYWJsZSBtb2RlIGRvZXMgbm90IGRlcGVuZCBvbiBGVkIgYW5kDQo+ID4gRlRX Lg0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIFZhcmlhYmxlV3JpdGVTZXJ2aWNl SW5pdGlhbGl6ZVNtbSAoKTsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+IGRpZmYgLS1n aXQNCj4gPiAgICAgPg0KPiA+DQo+IGEvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Q cm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZVNtbVJ1bnQNCj4gPiAgICAgPiBpbWVEeGUuYw0K PiA+ICAgICA+DQo+ID4NCj4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3Rl Y3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlU21tUnVudA0KPiA+ICAgICA+IGltZUR4ZS5jDQo+ID4g ICAgID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiAgICAgPiBpbmRleCAwMDAwMDAwMDAwMDAu LmI4OGY3NTM3MGFkOA0KPiA+ICAgICA+IC0tLSAvZGV2L251bGwNCj4gPiAgICAgPiArKysNCj4g PiAgICAgPg0KPiA+DQo+IGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0 ZWQvUnVudGltZUR4ZS9WYXJpYWJsZVNtbVJ1bnQNCj4gPiAgICAgPiBpbWVEeGUuYw0KPiA+ICAg ICA+IEBAIC0wLDAgKzEsMTg5NSBAQA0KPiA+ICAgICA+ICsvKiogQGZpbGUNCj4gPiAgICAgPiAr ICBJbXBsZW1lbnQgYWxsIGZvdXIgVUVGSSBSdW50aW1lIFZhcmlhYmxlIHNlcnZpY2VzIGZvciB0 aGUgbm9udm9sYXRpbGUNCj4gPiAgICAgPiArICBhbmQgdm9sYXRpbGUgc3RvcmFnZSBzcGFjZSBh bmQgaW5zdGFsbCB2YXJpYWJsZSBhcmNoaXRlY3R1cmUgcHJvdG9jb2wNCj4gPiAgICAgPiArICBi YXNlZCBvbiBTTU0gdmFyaWFibGUgbW9kdWxlLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBD YXV0aW9uOiBUaGlzIG1vZHVsZSByZXF1aXJlcyBhZGRpdGlvbmFsIHJldmlldyB3aGVuIG1vZGlm aWVkLg0KPiA+ICAgICA+ICsgIFRoaXMgZHJpdmVyIHdpbGwgaGF2ZSBleHRlcm5hbCBpbnB1dCAt IHZhcmlhYmxlIGRhdGEuDQo+ID4gICAgID4gKyAgVGhpcyBleHRlcm5hbCBpbnB1dCBtdXN0IGJl IHZhbGlkYXRlZCBjYXJlZnVsbHkgdG8gYXZvaWQgc2VjdXJpdHkgaXNzdWUgbGlrZQ0KPiA+ICAg ICA+ICsgIGJ1ZmZlciBvdmVyZmxvdywgaW50ZWdlciBvdmVyZmxvdy4NCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgUnVudGltZVNlcnZpY2VHZXRWYXJpYWJsZSgpIGFuZCBSdW50aW1lU2Vydmlj ZVNldFZhcmlhYmxlKCkgYXJlDQo+IGV4dGVybmFsDQo+ID4gQVBJDQo+ID4gICAgID4gKyAgdG8g cmVjZWl2ZSBkYXRhIGJ1ZmZlci4gVGhlIHNpemUgc2hvdWxkIGJlIGNoZWNrZWQgY2FyZWZ1bGx5 Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBJbml0Q29tbXVuaWNhdGVCdWZmZXIoKSBpcyBy ZWFsbHkgZnVuY3Rpb24gdG8gY2hlY2sgdGhlIHZhcmlhYmxlIGRhdGENCj4gc2l6ZS4NCj4gPiAg ICAgPiArDQo+ID4gICAgID4gK0NvcHlyaWdodCAoYykgMjAxMCAtIDIwMjIsIEludGVsIENvcnBv cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiAgICAgPiArQ29weXJpZ2h0IChj KSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uPEJSPg0KPiA+ICAgICA+ICtTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiov DQo+ID4gICAgID4gKyNpbmNsdWRlIDxQaUR4ZS5oPg0KPiA+ICAgICA+ICsjaW5jbHVkZSA8UHJv dG9jb2wvVmFyaWFibGVXcml0ZS5oPg0KPiA+ICAgICA+ICsjaW5jbHVkZSA8UHJvdG9jb2wvVmFy aWFibGUuaD4NCj4gPiAgICAgPiArI2luY2x1ZGUgPFByb3RvY29sL01tQ29tbXVuaWNhdGlvbjIu aD4NCj4gPiAgICAgPiArI2luY2x1ZGUgPFByb3RvY29sL1NtbVZhcmlhYmxlLmg+DQo+ID4gICAg ID4gKyNpbmNsdWRlIDxQcm90b2NvbC9WYXJpYWJsZUxvY2suaD4NCj4gPiAgICAgPiArI2luY2x1 ZGUgPFByb3RvY29sL1ZhckNoZWNrLmg+DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsjaW5jbHVk ZSA8TGlicmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIuaD4NCj4gPiAgICAgPiArI2luY2x1 ZGUgPExpYnJhcnkvVWVmaVJ1bnRpbWVTZXJ2aWNlc1RhYmxlTGliLmg+DQo+ID4gICAgID4gKyNp bmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4NCj4gPiAgICAgPiArI2luY2x1 ZGUgPExpYnJhcnkvVWVmaURyaXZlckVudHJ5UG9pbnQuaD4NCj4gPiAgICAgPiArI2luY2x1ZGUg PExpYnJhcnkvVWVmaVJ1bnRpbWVMaWIuaD4NCj4gPiAgICAgPiArI2luY2x1ZGUgPExpYnJhcnkv QmFzZU1lbW9yeUxpYi5oPg0KPiA+ICAgICA+ICsjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5o Pg0KPiA+ICAgICA+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpTGliLmg+DQo+ID4gICAgID4gKyNp bmNsdWRlIDxMaWJyYXJ5L0Jhc2VMaWIuaD4NCj4gPiAgICAgPiArI2luY2x1ZGUgPExpYnJhcnkv TW1VbmJsb2NrTWVtb3J5TGliLmg+DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsjaW5jbHVkZSA8 R3VpZC9FdmVudEdyb3VwLmg+DQo+ID4gICAgID4gKyNpbmNsdWRlIDxHdWlkL1NtbVZhcmlhYmxl Q29tbW9uLmg+DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsjaW5jbHVkZSAiUHJpdmlsZWdlUG9s eW1vcnBoaWMuaCINCj4gPiAgICAgPiArI2luY2x1ZGUgIlZhcmlhYmxlLmgiDQo+ID4gICAgID4g KyNpbmNsdWRlICJWYXJpYWJsZVBhcnNpbmcuaCINCj4gPiAgICAgPiArDQo+ID4gICAgID4gK0VG SV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgbUhhbmRsZSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgID0gTlVMTDsNCj4gPiAgICAgPiArRUZJX1NNTV9WQVJJQUJMRV9QUk9UT0NPTCAg ICAgICAqbVNtbVZhcmlhYmxlICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMOw0KPiA+ICAg ICA+ICtFRklfRVZFTlQgICAgICAgICAgICAgICAgICAgICAgIG1WaXJ0dWFsQWRkcmVzc0NoYW5n ZUV2ZW50ICAgICAgICAgICA9IE5VTEw7DQo+ID4gICAgID4gK0VGSV9NTV9DT01NVU5JQ0FUSU9O Ml9QUk9UT0NPTCAgKm1NbUNvbW11bmljYXRpb24yDQo+ID4gPQ0KPiA+ICAgICA+IE5VTEw7DQo+ ID4gICAgID4gK1VJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgKm1WYXJpYWJsZUJ1ZmZl ciAgICAgICAgICAgICAgICAgICAgID0gTlVMTDsNCj4gPiAgICAgPiArVUlOVDggICAgICAgICAg ICAgICAgICAgICAgICAgICAqbVZhcmlhYmxlQnVmZmVyUGh5c2ljYWwgICAgICAgICAgICAgPSBO VUxMOw0KPiA+ICAgICA+ICtWQVJJQUJMRV9JTkZPX0VOVFJZICAgICAgICAgICAgICptVmFyaWFi bGVJbmZvICAgICAgICAgICAgICAgICAgICAgICA9IE5VTEw7DQo+ID4gICAgID4gK1ZBUklBQkxF X1NUT1JFX0hFQURFUiAgICAgICAgICAgKm1WYXJpYWJsZVJ1bnRpbWVIb2JDYWNoZUJ1ZmZlcg0K PiA9DQo+ID4gICAgID4gTlVMTDsNCj4gPiAgICAgPiArVkFSSUFCTEVfU1RPUkVfSEVBREVSICAg ICAgICAgICAqbVZhcmlhYmxlUnVudGltZU52Q2FjaGVCdWZmZXIgICAgICAgPQ0KPiA+IE5VTEw7 DQo+ID4gICAgID4gK1ZBUklBQkxFX1NUT1JFX0hFQURFUiAgICAgICAgICAgKm1WYXJpYWJsZVJ1 bnRpbWVWb2xhdGlsZUNhY2hlQnVmZmVyDQo+ID0NCj4gPiAgICAgPiBOVUxMOw0KPiA+ICAgICA+ ICtWQVJJQUJMRV9TVE9SRV9IRUFERVIgICAgICAgICAgICptTnZWYXJpYWJsZUNhY2hlICAgICAg ICAgICAgICAgICAgICA9IE5VTEw7DQo+ID4gICAgID4gK1ZBUklBQkxFX01PRFVMRV9HTE9CQUwg ICAgICAgICAgKm1WYXJpYWJsZU1vZHVsZUdsb2JhbCAgICAgICAgICAgICAgID0NCj4gPiBOVUxM Ow0KPiA+ICAgICA+ICtVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1WYXJpYWJsZUJ1 ZmZlclNpemU7DQo+ID4gICAgID4gK1VJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgbVZh cmlhYmxlUnVudGltZUhvYkNhY2hlQnVmZmVyU2l6ZTsNCj4gPiAgICAgPiArVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgICAgICBtVmFyaWFibGVSdW50aW1lTnZDYWNoZUJ1ZmZlclNpemU7DQo+ ID4gICAgID4gK1VJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgbVZhcmlhYmxlUnVudGlt ZVZvbGF0aWxlQ2FjaGVCdWZmZXJTaXplOw0KPiA+ICAgICA+ICtVSU5UTiAgICAgICAgICAgICAg ICAgICAgICAgICAgIG1WYXJpYWJsZUJ1ZmZlclBheWxvYWRTaXplOw0KPiA+ICAgICA+ICtCT09M RUFOICAgICAgICAgICAgICAgICAgICAgICAgIG1WYXJpYWJsZVJ1bnRpbWVDYWNoZVBlbmRpbmdV cGRhdGU7DQo+ID4gICAgID4gK0JPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgbVZhcmlh YmxlUnVudGltZUNhY2hlUmVhZExvY2s7DQo+ID4gICAgID4gK0JPT0xFQU4gICAgICAgICAgICAg ICAgICAgICAgICAgbVZhcmlhYmxlQXV0aEZvcm1hdDsNCj4gPiAgICAgPiArQk9PTEVBTiAgICAg ICAgICAgICAgICAgICAgICAgICBtSG9iRmx1c2hDb21wbGV0ZTsNCj4gPiAgICAgPiArRUZJX0xP Q0sgICAgICAgICAgICAgICAgICAgICAgICBtVmFyaWFibGVTZXJ2aWNlc0xvY2s7DQo+ID4gICAg ID4gK0VES0lJX1ZBUklBQkxFX0xPQ0tfUFJPVE9DT0wgICAgbVZhcmlhYmxlTG9jazsNCj4gPiAg ICAgPiArRURLSUlfVkFSX0NIRUNLX1BST1RPQ09MICAgICAgICBtVmFyQ2hlY2s7DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBUaGUgbG9naWMgdG8gaW5pdGlhbGl6 ZSB0aGUgVmFyaWFibGVQb2xpY3kgZW5naW5lIGlzIGluIGl0cyBvd24gZmlsZS4NCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtFRklfU1RBVFVTDQo+ID4gICAgID4gK0VG SUFQSQ0KPiA+ICAgICA+ICtWYXJpYWJsZVBvbGljeVNtbUR4ZU1haW4gKA0KPiA+ICAgICA+ICsg IElOICAgIEVGSV9IQU5ETEUgICAgICAgIEltYWdlSGFuZGxlLA0KPiA+ICAgICA+ICsgIElOICAg IEVGSV9TWVNURU1fVEFCTEUgICpTeXN0ZW1UYWJsZQ0KPiA+ICAgICA+ICsgICk7DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBTb21lIFNlY3VyZSBCb290IFBvbGlj eSBWYXJpYWJsZSBtYXkgdXBkYXRlIGZvbGxvd2luZyBvdGhlciB2YXJpYWJsZQ0KPiA+ICAgICA+ IGNoYW5nZXMoU2VjdXJlQm9vdCBmb2xsb3dzIFBLIGNoYW5nZSwgZXRjKS4NCj4gPiAgICAgPiAr ICBSZWNvcmQgdGhlaXIgaW5pdGlhbCBTdGF0ZSB3aGVuIHZhcmlhYmxlIHdyaXRlIHNlcnZpY2Ug aXMgcmVhZHkuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArVk9JRA0K PiA+ICAgICA+ICtFRklBUEkNCj4gPiAgICAgPiArUmVjb3JkU2VjdXJlQm9vdFBvbGljeVZhckRh dGEgKA0KPiA+ICAgICA+ICsgIFZPSUQNCj4gPiAgICAgPiArICApOw0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgQWNxdWlyZXMgbG9jayBvbmx5IGF0IGJvb3QgdGlt ZS4gU2ltcGx5IHJldHVybnMgYXQgcnVudGltZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg VGhpcyBpcyBhIHRlbXBlcmFyeSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgcmVtb3ZlZCB3aGVuDQo+ ID4gICAgID4gKyAgRWZpQWNxdWlyZUxvY2soKSBpbiBVZWZpTGliIGNhbiBoYW5kbGUgdGhlIGNh bGwgaW4gVUVGSQ0KPiA+ICAgICA+ICsgIFJ1bnRpbWVyIGRyaXZlciBpbiBSVCBwaGFzZS4NCj4g PiAgICAgPiArICBJdCBjYWxscyBFZmlBY3F1aXJlTG9jaygpIGF0IGJvb3QgdGltZSwgYW5kIHNp bXBseSByZXR1cm5zDQo+ID4gICAgID4gKyAgYXQgcnVudGltZS4NCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyAgQHBhcmFtICBMb2NrICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBsb2NrIHRvIGFj cXVpcmUuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArVk9JRA0KPiA+ ICAgICA+ICtBY3F1aXJlTG9ja09ubHlBdEJvb3RUaW1lICgNCj4gPiAgICAgPiArICBJTiBFRklf TE9DSyAgKkxvY2sNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBp ZiAoIUVmaUF0UnVudGltZSAoKSkgew0KPiA+ICAgICA+ICsgICAgRWZpQWNxdWlyZUxvY2sgKExv Y2spOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArLyoqDQo+ID4gICAgID4gKyAgUmVsZWFzZXMgbG9jayBvbmx5IGF0IGJvb3QgdGltZS4gU2lt cGx5IHJldHVybnMgYXQgcnVudGltZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgVGhpcyBp cyBhIHRlbXBlcmFyeSBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIHJlbW92ZWQgd2hlbg0KPiA+ICAg ICA+ICsgIEVmaVJlbGVhc2VMb2NrKCkgaW4gVWVmaUxpYiBjYW4gaGFuZGxlIHRoZSBjYWxsIGlu IFVFRkkNCj4gPiAgICAgPiArICBSdW50aW1lciBkcml2ZXIgaW4gUlQgcGhhc2UuDQo+ID4gICAg ID4gKyAgSXQgY2FsbHMgRWZpUmVsZWFzZUxvY2soKSBhdCBib290IHRpbWUgYW5kIHNpbXBseSBy ZXR1cm5zDQo+ID4gICAgID4gKyAgYXQgcnVudGltZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgQHBhcmFtICBMb2NrICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBsb2NrIHRvIHJlbGVhc2Uu DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArVk9JRA0KPiA+ICAgICA+ ICtSZWxlYXNlTG9ja09ubHlBdEJvb3RUaW1lICgNCj4gPiAgICAgPiArICBJTiBFRklfTE9DSyAg KkxvY2sNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBpZiAoIUVm aUF0UnVudGltZSAoKSkgew0KPiA+ICAgICA+ICsgICAgRWZpUmVsZWFzZUxvY2sgKExvY2spOw0K PiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoq DQo+ID4gICAgID4gKyAgUmV0dXJuIFRSVUUgaWYgRXhpdEJvb3RTZXJ2aWNlcyAoKSBoYXMgYmVl biBjYWxsZWQuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEByZXR2YWwgVFJVRSBJZiBFeGl0 Qm9vdFNlcnZpY2VzICgpIGhhcyBiZWVuIGNhbGxlZC4gRkFMU0UgaWYNCj4gPiBFeGl0Qm9vdFNl cnZpY2VzDQo+ID4gICAgID4gKCkgaGFzIG5vdCBiZWVuIGNhbGxlZC4NCj4gPiAgICAgPiArKiov DQo+ID4gICAgID4gK0JPT0xFQU4NCj4gPiAgICAgPiArQXRSdW50aW1lICgNCj4gPiAgICAgPiAr ICBWT0lEDQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgcmV0dXJu IEVmaUF0UnVudGltZSAoKTsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr LyoqDQo+ID4gICAgID4gKyAgSW5pdGlhbGl6ZSB0aGUgdmFyaWFibGUgY2FjaGUgYnVmZmVyIGFz IGFuIGVtcHR5IHZhcmlhYmxlIHN0b3JlLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFy YW1bb3V0XSAgICAgVmFyaWFibGVDYWNoZUJ1ZmZlciAgICAgQSBwb2ludGVyIHRvIHBvaW50ZXIg b2YgYSBjYWNoZQ0KPiA+ICAgICA+IHZhcmlhYmxlIHN0b3JlLg0KPiA+ICAgICA+ICsgIEBwYXJh bVtpbixvdXRdICBUb3RhbFZhcmlhYmxlQ2FjaGVTaXplICBPbiBpbnB1dCwgdGhlIG1pbmltdW0g c2l6ZQ0KPiA+IG5lZWRlZA0KPiA+ICAgICA+IGZvciB0aGUgVUVGSSB2YXJpYWJsZSBzdG9yZSBj YWNoZQ0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBidWZmZXIgdGhhdCBpcyBhbGxvY2F0ZWQuIE9uIG91dHB1dCwgdGhlIGFjdHVhbCBzaXplDQo+ IG9mDQo+ID4gdGhlDQo+ID4gICAgID4gYnVmZmVyIGFsbG9jYXRlZC4NCj4gPiAgICAgPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgVG90YWxWYXJpYWJsZUNh Y2hlU2l6ZSBpcyB6ZXJvLCBhIGJ1ZmZlciB3aWxsIG5vdA0KPiA+IGJlDQo+ID4gICAgID4gYWxs b2NhdGVkIGFuZCB0aGUNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZnVuY3Rpb24gd2lsbCByZXR1cm4gd2l0aCBFRklfU1VDQ0VTUy4NCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBUaGUg dmFyaWFibGUgY2FjaGUgd2FzIGFsbG9jYXRlZCBhbmQNCj4gPiBpbml0aWFsaXplZA0KPiA+ICAg ICA+IHN1Y2Nlc3NmdWxseS4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFN RVRFUiAgIEEgZ2l2ZW4gcG9pbnRlciBpcyBOVUxMIG9yIGFuIGludmFsaWQNCj4gPiAgICAgPiB2 YXJpYWJsZSBzdG9yZSBzaXplIHdhcyBzcGVjaWZpZWQuDQo+ID4gICAgID4gKyAgQHJldHZhbCBF RklfT1VUX09GX1JFU09VUkNFUyAgICBJbnN1ZmZpY2llbnQgcmVzb3VyY2VzIGFyZSBhdmFpbGFi bGUNCj4gdG8NCj4gPiAgICAgPiBhbGxvY2F0ZSB0aGUgdmFyaWFibGUgc3RvcmUgY2FjaGUgYnVm ZmVyLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMN Cj4gPiAgICAgPiArSW5pdFZhcmlhYmxlQ2FjaGUgKA0KPiA+ICAgICA+ICsgIE9VVCAgICBWQVJJ QUJMRV9TVE9SRV9IRUFERVIgICoqVmFyaWFibGVDYWNoZUJ1ZmZlciwNCj4gPiAgICAgPiArICBJ TiBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAqVG90YWxWYXJpYWJsZUNhY2hlU2l6ZQ0KPiA+ ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0KPiA+ICAgICA+ICsgIFZBUklBQkxFX1NUT1JFX0hF QURFUiAgKlZhcmlhYmxlQ2FjaGVTdG9yZVB0cjsNCj4gPiAgICAgPiArICBFRklfU1RBVFVTICAg ICAgICAgICAgIFN0YXR1czsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgaWYgKFRvdGFsVmFy aWFibGVDYWNoZVNpemUgPT0gTlVMTCkgew0KPiA+ICAgICA+ICsgICAgcmV0dXJuIEVGSV9JTlZB TElEX1BBUkFNRVRFUjsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsg IGlmICgqVG90YWxWYXJpYWJsZUNhY2hlU2l6ZSA9PSAwKSB7DQo+ID4gICAgID4gKyAgICByZXR1 cm4gRUZJX1NVQ0NFU1M7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr ICBpZiAoKFZhcmlhYmxlQ2FjaGVCdWZmZXIgPT0gTlVMTCkgfHwgKCpUb3RhbFZhcmlhYmxlQ2Fj aGVTaXplIDwgc2l6ZW9mDQo+ID4gICAgID4gKFZBUklBQkxFX1NUT1JFX0hFQURFUikpKSB7DQo+ ID4gICAgID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICAgICA+ICsg IH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgKlRvdGFsVmFyaWFibGVDYWNoZVNpemUgPSBB TElHTl9WQUxVRSAoKlRvdGFsVmFyaWFibGVDYWNoZVNpemUsDQo+IHNpemVvZg0KPiA+ICAgICA+ IChVSU5UMzIpKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAv LyBBbGxvY2F0ZSBOViBTdG9yYWdlIENhY2hlIGFuZCBpbml0aWFsaXplIGl0IHRvIGFsbCAxJ3Mg KGxpa2UgYW4gZXJhc2VkIEZWKQ0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgKlZhcmlh YmxlQ2FjaGVCdWZmZXIgPSAgKFZBUklBQkxFX1NUT1JFX0hFQURFUg0KPiA+ICopQWxsb2NhdGVS dW50aW1lUGFnZXMNCj4gPiAgICAgPiAoDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX1NJWkVfVE9fUEFHRVMNCj4gKCpU b3RhbFZhcmlhYmxlQ2FjaGVTaXplKQ0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gICAgID4gKyAgaWYgKCpWYXJp YWJsZUNhY2hlQnVmZmVyID09IE5VTEwpIHsNCj4gPiAgICAgPiArICAgIHJldHVybiBFRklfT1VU X09GX1JFU09VUkNFUzsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsg IC8vDQo+ID4gICAgID4gKyAgLy8gUmVxdWVzdCB0byB1bmJsb2NrIHRoZSBuZXdseSBhbGxvY2F0 ZWQgY2FjaGUgcmVnaW9uIHRvIGJlIGFjY2Vzc2libGUNCj4gPiBmcm9tDQo+ID4gICAgID4gaW5z aWRlIE1NDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBTdGF0dXMgPSBNbVVuYmxvY2tN ZW1vcnlSZXF1ZXN0ICgNCj4gPiAgICAgPiArICAgICAgICAgICAgIChFRklfUEhZU0lDQUxfQURE UkVTUykoVUlOVE4pKlZhcmlhYmxlQ2FjaGVCdWZmZXIsDQo+ID4gICAgID4gKyAgICAgICAgICAg ICBFRklfU0laRV9UT19QQUdFUyAoKlRvdGFsVmFyaWFibGVDYWNoZVNpemUpDQo+ID4gICAgID4g KyAgICAgICAgICAgICApOw0KPiA+ICAgICA+ICsgIGlmICgoU3RhdHVzICE9IEVGSV9VTlNVUFBP UlRFRCkgJiYgRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAgID4gKyAgICByZXR1cm4gU3Rh dHVzOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgVmFyaWFibGVD YWNoZVN0b3JlUHRyID0gKlZhcmlhYmxlQ2FjaGVCdWZmZXI7DQo+ID4gICAgID4gKyAgU2V0TWVt MzIgKChWT0lEICopVmFyaWFibGVDYWNoZVN0b3JlUHRyLCAqVG90YWxWYXJpYWJsZUNhY2hlU2l6 ZSwNCj4gPiAgICAgPiAoVUlOVDMyKTB4RkZGRkZGRkYpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICBaZXJvTWVtICgoVk9JRCAqKVZhcmlhYmxlQ2FjaGVTdG9yZVB0ciwgc2l6ZW9mDQo+ID4g ICAgID4gKFZBUklBQkxFX1NUT1JFX0hFQURFUikpOw0KPiA+ICAgICA+ICsgIFZhcmlhYmxlQ2Fj aGVTdG9yZVB0ci0+U2l6ZSAgID0gKFVJTlQzMikqVG90YWxWYXJpYWJsZUNhY2hlU2l6ZTsNCj4g PiAgICAgPiArICBWYXJpYWJsZUNhY2hlU3RvcmVQdHItPkZvcm1hdCA9IFZBUklBQkxFX1NUT1JF X0ZPUk1BVFRFRDsNCj4gPiAgICAgPiArICBWYXJpYWJsZUNhY2hlU3RvcmVQdHItPlN0YXRlICA9 IFZBUklBQkxFX1NUT1JFX0hFQUxUSFk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIHJldHVy biBFRklfU1VDQ0VTUzsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoq DQo+ID4gICAgID4gKyAgSW5pdGlhbGl6ZSB0aGUgY29tbXVuaWNhdGUgYnVmZmVyIHVzaW5nIERh dGFTaXplIGFuZCBGdW5jdGlvbi4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgVGhlIGNvbW11 bmljYXRlIHNpemUgaXM6IFNNTV9DT01NVU5JQ0FURV9IRUFERVJfU0laRSArDQo+ID4gICAgID4g U01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0hFQURFUl9TSVpFICsNCj4gPiAgICAgPiArICBEYXRh U2l6ZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQ2F1dGlvbjogVGhpcyBmdW5jdGlvbiBt YXkgcmVjZWl2ZSB1bnRydXN0ZWQgaW5wdXQuDQo+ID4gICAgID4gKyAgVGhlIGRhdGEgc2l6ZSBl eHRlcm5hbCBpbnB1dCwgc28gdGhpcyBmdW5jdGlvbiB3aWxsIHZhbGlkYXRlIGl0IGNhcmVmdWxs eSB0bw0KPiA+IGF2b2lkDQo+ID4gICAgID4gYnVmZmVyIG92ZXJmbG93Lg0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICBAcGFyYW1bb3V0XSAgICAgIERhdGFQdHIgICAgICAgICAgUG9pbnRzIHRv IHRoZSBkYXRhIGluIHRoZSBjb21tdW5pY2F0ZQ0KPiA+IGJ1ZmZlci4NCj4gPiAgICAgPiArICBA cGFyYW1baW5dICAgICAgIERhdGFTaXplICAgICAgICAgVGhlIGRhdGEgc2l6ZSB0byBzZW5kIHRv IFNNTS4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dICAgICAgIEZ1bmN0aW9uICAgICAgICAgVGhl IGZ1bmN0aW9uIG51bWJlciB0byBpbml0aWFsaXplIHRoZQ0KPiA+ICAgICA+IGNvbW11bmljYXRl IGhlYWRlci4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9Q QVJBTUVURVIgICAgIFRoZSBkYXRhIHNpemUgaXMgdG9vIGJpZy4NCj4gPiAgICAgPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgRmluZCB0aGUgc3BlY2lmaWVkIHZhcmlhYmxl Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4g PiAgICAgPiArSW5pdENvbW11bmljYXRlQnVmZmVyICgNCj4gPiAgICAgPiArICBPVVQgICAgIFZP SUQgICAqKkRhdGFQdHIgT1BUSU9OQUwsDQo+ID4gICAgID4gKyAgSU4gICAgICBVSU5UTiAgRGF0 YVNpemUsDQo+ID4gICAgID4gKyAgSU4gICAgICBVSU5UTiAgRnVuY3Rpb24NCj4gPiAgICAgPiAr ICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBFRklfTU1fQ09NTVVOSUNBVEVfSEVBREVS ICAgICAgICAqU21tQ29tbXVuaWNhdGVIZWFkZXI7DQo+ID4gICAgID4gKyAgU01NX1ZBUklBQkxF X0NPTU1VTklDQVRFX0hFQURFUg0KPiA+ICpTbW1WYXJpYWJsZUZ1bmN0aW9uSGVhZGVyOw0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICBpZiAoRGF0YVNpemUgKyBTTU1fQ09NTVVOSUNBVEVfSEVB REVSX1NJWkUgKw0KPiA+ICAgICA+IFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9IRUFERVJfU0la RSA+IG1WYXJpYWJsZUJ1ZmZlclNpemUpIHsNCj4gPiAgICAgPiArICAgIHJldHVybiBFRklfSU5W QUxJRF9QQVJBTUVURVI7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr ICBTbW1Db21tdW5pY2F0ZUhlYWRlciA9IChFRklfTU1fQ09NTVVOSUNBVEVfSEVBREVSDQo+ID4g ICAgID4gKiltVmFyaWFibGVCdWZmZXI7DQo+ID4gICAgID4gKyAgQ29weUd1aWQgKCZTbW1Db21t dW5pY2F0ZUhlYWRlci0+SGVhZGVyR3VpZCwNCj4gPiAgICAgPiAmZ0VmaVNtbVZhcmlhYmxlUHJv dG9jb2xHdWlkKTsNCj4gPiAgICAgPiArICBTbW1Db21tdW5pY2F0ZUhlYWRlci0+TWVzc2FnZUxl bmd0aCA9IERhdGFTaXplICsNCj4gPiAgICAgPiBTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfSEVB REVSX1NJWkU7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFNtbVZhcmlhYmxlRnVuY3Rpb25I ZWFkZXIgICAgICAgICAgID0NCj4gPiAgICAgPiAoU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0hF QURFUiAqKVNtbUNvbW11bmljYXRlSGVhZGVyLQ0KPiA+ID5EYXRhOw0KPiA+ICAgICA+ICsgIFNt bVZhcmlhYmxlRnVuY3Rpb25IZWFkZXItPkZ1bmN0aW9uID0gRnVuY3Rpb247DQo+ID4gICAgID4g KyAgaWYgKERhdGFQdHIgIT0gTlVMTCkgew0KPiA+ICAgICA+ICsgICAgKkRhdGFQdHIgPSBTbW1W YXJpYWJsZUZ1bmN0aW9uSGVhZGVyLT5EYXRhOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICAgICA+ICt9DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBTZW5kIHRoZSBkYXRhIGluIGNvbW11 bmljYXRlIGJ1ZmZlciB0byBTTU0uDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbVtp bl0gICBEYXRhU2l6ZSAgICAgICAgICAgICAgIFRoaXMgc2l6ZSBvZiB0aGUgZnVuY3Rpb24gaGVh ZGVyIGFuZCB0aGUNCj4gPiBkYXRhLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcmV0dmFs ICAgICAgRUZJX1NVQ0NFU1MgICAgICAgICAgICBTdWNjZXNzIGlzIHJldHVybmVkIGZyb20gdGhl IGZ1bmN0aW4gaW4NCj4gPiBTTU0uDQo+ID4gICAgID4gKyAgQHJldHZhbCAgICAgIE90aGVycyAg ICAgICAgICAgICAgICAgRmFpbHVyZSBpcyByZXR1cm5lZCBmcm9tIHRoZSBmdW5jdGlvbiBpbiBT TU0uDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX1NUQVRVUw0K PiA+ICAgICA+ICtTZW5kQ29tbXVuaWNhdGVCdWZmZXIgKA0KPiA+ICAgICA+ICsgIElOICAgICAg VUlOVE4gIERhdGFTaXplDQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4g KyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ICAgICA+ICsg IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1TaXplOw0KPiA+ICAgICA+ICsg IEVGSV9NTV9DT01NVU5JQ0FURV9IRUFERVIgICAgICAgICpTbW1Db21tdW5pY2F0ZUhlYWRlcjsN Cj4gPiAgICAgPiArICBTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfSEVBREVSDQo+ID4gKlNtbVZh cmlhYmxlRnVuY3Rpb25IZWFkZXI7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIENvbW1TaXpl ID0gRGF0YVNpemUgKyBTTU1fQ09NTVVOSUNBVEVfSEVBREVSX1NJWkUgKw0KPiA+ICAgICA+IFNN TV9WQVJJQUJMRV9DT01NVU5JQ0FURV9IRUFERVJfU0laRTsNCj4gPiAgICAgPiArICBTdGF0dXMg ICA9IG1NbUNvbW11bmljYXRpb24yLT5Db21tdW5pY2F0ZSAoDQo+ID4gICAgID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtTW1Db21tdW5pY2F0aW9uMiwNCj4gPiAgICAgPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1WYXJpYWJsZUJ1ZmZlclBoeXNpY2Fs LA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVZhcmlhYmxl QnVmZmVyLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkNv bW1TaXplDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0K PiA+ICAgICA+ICsgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsgIFNtbUNvbW11bmljYXRlSGVhZGVyICAgICAgPSAoRUZJX01NX0NPTU1VTklDQVRF X0hFQURFUg0KPiA+ICAgICA+ICopbVZhcmlhYmxlQnVmZmVyOw0KPiA+ICAgICA+ICsgIFNtbVZh cmlhYmxlRnVuY3Rpb25IZWFkZXIgPQ0KPiA+IChTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfSEVB REVSDQo+ID4gICAgID4gKilTbW1Db21tdW5pY2F0ZUhlYWRlci0+RGF0YTsNCj4gPiAgICAgPiAr ICByZXR1cm4gU21tVmFyaWFibGVGdW5jdGlvbkhlYWRlci0+UmV0dXJuU3RhdHVzOw0KPiA+ICAg ICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBNYXJrIGEg dmFyaWFibGUgdGhhdCB3aWxsIGJlY29tZSByZWFkLW9ubHkgYWZ0ZXIgbGVhdmluZyB0aGUgRFhF IHBoYXNlDQo+IG9mDQo+ID4gICAgID4gZXhlY3V0aW9uLg0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICBAcGFyYW1baW5dIFRoaXMgICAgICAgICAgVGhlIFZBUklBQkxFX0xPQ0tfUFJPVE9DT0wg aW5zdGFuY2UuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBWYXJpYWJsZU5hbWUgIEEgcG9pbnRl ciB0byB0aGUgdmFyaWFibGUgbmFtZSB0aGF0IHdpbGwgYmUNCj4gPiBtYWRlDQo+ID4gICAgID4g cmVhZC1vbmx5IHN1YnNlcXVlbnRseS4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dIFZlbmRvckd1 aWQgICAgQSBwb2ludGVyIHRvIHRoZSB2ZW5kb3IgR1VJRCB0aGF0IHdpbGwgYmUNCj4gbWFkZQ0K PiA+ICAgICA+IHJlYWQtb25seSBzdWJzZXF1ZW50bHkuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSB2YXJpYWJsZSBzcGVjaWZpZWQg YnkgdGhlIFZhcmlhYmxlTmFtZQ0KPiA+IGFuZA0KPiA+ICAgICA+IHRoZSBWZW5kb3JHdWlkIHdh cyBtYXJrZWQNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBw ZW5kaW5nIHRvIGJlIHJlYWQtb25seS4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9JTlZBTElE X1BBUkFNRVRFUiBWYXJpYWJsZU5hbWUgb3IgVmVuZG9yR3VpZCBpcw0KPiBOVUxMLg0KPiA+ICAg ICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yIFZhcmlhYmxlTmFtZSBpcyBh biBlbXB0eSBzdHJpbmcuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfQUNDRVNTX0RFTklFRA0K PiBFRklfRU5EX09GX0RYRV9FVkVOVF9HUk9VUF9HVUlEDQo+ID4gb3INCj4gPiAgICAgPiBFRklf RVZFTlRfR1JPVVBfUkVBRFlfVE9fQk9PVCBoYXMNCj4gPiAgICAgPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhbHJlYWR5IGJlZW4gc2lnbmFsZWQuDQo+ID4gICAgID4gKyAgQHJl dHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgVGhlcmUgaXMgbm90IGVub3VnaCByZXNvdXJjZSB0 byBob2xkDQo+ID4gdGhlDQo+ID4gICAgID4gbG9jayByZXF1ZXN0Lg0KPiA+ICAgICA+ICsqKi8N Cj4gPiAgICAgPiArRUZJX1NUQVRVUw0KPiA+ICAgICA+ICtFRklBUEkNCj4gPiAgICAgPiArVmFy aWFibGVMb2NrUmVxdWVzdFRvTG9jayAoDQo+ID4gICAgID4gKyAgSU4gQ09OU1QgRURLSUlfVkFS SUFCTEVfTE9DS19QUk9UT0NPTCAgKlRoaXMsDQo+ID4gICAgID4gKyAgSU4gICAgICAgQ0hBUjE2 ICAgICAgICAgICAgICAgICAgICAgICAgKlZhcmlhYmxlTmFtZSwNCj4gPiAgICAgPiArICBJTiAg ICAgICBFRklfR1VJRCAgICAgICAgICAgICAgICAgICAgICAqVmVuZG9yR3VpZA0KPiA+ICAgICA+ ICsgICkNCj4gPiAgICAgPiArew0KPiA+ICAgICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gICAgID4gKyAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlTmFtZVNpemU7DQo+ID4gICAgID4gKyAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBheWxvYWRTaXplOw0KPiA+ICAg ICA+ICsgIFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9MT0NLX1ZBUklBQkxFICAqVmFyaWFibGVU b0xvY2s7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIGlmICgoVmFyaWFibGVOYW1lID09IE5V TEwpIHx8IChWYXJpYWJsZU5hbWVbMF0gPT0gMCkgfHwgKFZlbmRvckd1aWQNCj4gPT0NCj4gPiAg ICAgPiBOVUxMKSkgew0KPiA+ICAgICA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRF UjsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFZhcmlhYmxlTmFt ZVNpemUgPSBTdHJTaXplIChWYXJpYWJsZU5hbWUpOw0KPiA+ICAgICA+ICsgIFZhcmlhYmxlVG9M b2NrICAgPSBOVUxMOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsg IC8vIElmIFZhcmlhYmxlTmFtZSBleGNlZWRzIFNNTSBwYXlsb2FkIGxpbWl0LiBSZXR1cm4gZmFp bHVyZQ0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgaWYgKFZhcmlhYmxlTmFtZVNpemUg PiBtVmFyaWFibGVCdWZmZXJQYXlsb2FkU2l6ZSAtIE9GRlNFVF9PRg0KPiA+ICAgICA+IChTTU1f VkFSSUFCTEVfQ09NTVVOSUNBVEVfTE9DS19WQVJJQUJMRSwgTmFtZSkpIHsNCj4gPiAgICAgPiAr ICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArICBBY3F1aXJlTG9ja09ubHlBdEJvb3RUaW1lICgmbVZhcmlhYmxl U2VydmljZXNMb2NrKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiAr ICAvLyBJbml0IHRoZSBjb21tdW5pY2F0ZSBidWZmZXIuIFRoZSBidWZmZXIgZGF0YSBzaXplIGlz Og0KPiA+ICAgICA+ICsgIC8vIFNNTV9DT01NVU5JQ0FURV9IRUFERVJfU0laRSArDQo+ID4gICAg ID4gU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0hFQURFUl9TSVpFICsgUGF5bG9hZFNpemUuDQo+ ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBQYXlsb2FkU2l6ZSA9IE9GRlNFVF9PRg0KPiA+ IChTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfTE9DS19WQVJJQUJMRSwNCj4gPiAgICAgPiBOYW1l KSArIFZhcmlhYmxlTmFtZVNpemU7DQo+ID4gICAgID4gKyAgU3RhdHVzICAgICAgPSBJbml0Q29t bXVuaWNhdGVCdWZmZXIgKChWT0lEICoqKSZWYXJpYWJsZVRvTG9jaywNCj4gPiBQYXlsb2FkU2l6 ZSwNCj4gPiAgICAgPiBTTU1fVkFSSUFCTEVfRlVOQ1RJT05fTE9DS19WQVJJQUJMRSk7DQo+ID4g ICAgID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICAgICA+ICsgICAgZ290byBE b25lOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQVNTRVJUIChW YXJpYWJsZVRvTG9jayAhPSBOVUxMKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQ29weUd1 aWQgKCZWYXJpYWJsZVRvTG9jay0+R3VpZCwgVmVuZG9yR3VpZCk7DQo+ID4gICAgID4gKyAgVmFy aWFibGVUb0xvY2stPk5hbWVTaXplID0gVmFyaWFibGVOYW1lU2l6ZTsNCj4gPiAgICAgPiArICBD b3B5TWVtIChWYXJpYWJsZVRvTG9jay0+TmFtZSwgVmFyaWFibGVOYW1lLCBWYXJpYWJsZVRvTG9j ay0NCj4gPiAgICAgPiA+TmFtZVNpemUpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0K PiA+ICAgICA+ICsgIC8vIFNlbmQgZGF0YSB0byBTTU0uDQo+ID4gICAgID4gKyAgLy8NCj4gPiAg ICAgPiArICBTdGF0dXMgPSBTZW5kQ29tbXVuaWNhdGVCdWZmZXIgKFBheWxvYWRTaXplKTsNCj4g PiAgICAgPiArDQo+ID4gICAgID4gK0RvbmU6DQo+ID4gICAgID4gKyAgUmVsZWFzZUxvY2tPbmx5 QXRCb290VGltZSAoJm1WYXJpYWJsZVNlcnZpY2VzTG9jayk7DQo+ID4gICAgID4gKyAgcmV0dXJu IFN0YXR1czsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4g ICAgID4gKyAgUmVnaXN0ZXIgU2V0VmFyaWFibGUgY2hlY2sgaGFuZGxlci4NCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBIYW5kbGVyICAgICAgICAgICAgUG9pbnRlciB0byBj aGVjayBoYW5kbGVyLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgICAgICBUaGUgU2V0VmFyaWFibGUgY2hlY2sgaGFuZGxlciB3YXMNCj4gcmVnaXN0 ZXJlZA0KPiA+ICAgICA+IHN1Y2Nlc3NmdWxseS4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9J TlZBTElEX1BBUkFNRVRFUiBIYW5kbGVyIGlzIE5VTEwuDQo+ID4gICAgID4gKyAgQHJldHZhbCBF RklfQUNDRVNTX0RFTklFRA0KPiBFRklfRU5EX09GX0RYRV9FVkVOVF9HUk9VUF9HVUlEDQo+ID4g b3INCj4gPiAgICAgPiBFRklfRVZFTlRfR1JPVVBfUkVBRFlfVE9fQk9PVCBoYXMNCj4gPiAgICAg PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5IGJlZW4gc2lnbmFsZWQu DQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgVGhlcmUgaXMgbm90 IGVub3VnaCByZXNvdXJjZSBmb3IgdGhlDQo+ID4gICAgID4gU2V0VmFyaWFibGUgY2hlY2sgaGFu ZGxlciByZWdpc3RlciByZXF1ZXN0Lg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9S VEVEICAgICAgIFRoaXMgaW50ZXJmYWNlIGlzIG5vdCBpbXBsZW1lbnRlZC4NCj4gPiAgICAgPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaXQgaXMgdW5zdXBw b3J0ZWQgaW4gVmFyQ2hlY2sgcHJvdG9jb2wgaWYNCj4gPiBib3RoDQo+ID4gICAgID4gVmFyQ2hl Y2sgYW5kIFNtbVZhckNoZWNrIHByb3RvY29scyBhcmUgcHJlc2VudC4NCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtFRklfU1RBVFVTDQo+ID4gICAgID4gK0VGSUFQSQ0K PiA+ICAgICA+ICtWYXJDaGVja1JlZ2lzdGVyU2V0VmFyaWFibGVDaGVja0hhbmRsZXIgKA0KPiA+ ICAgICA+ICsgIElOIFZBUl9DSEVDS19TRVRfVkFSSUFCTEVfQ0hFQ0tfSEFORExFUiAgSGFuZGxl cg0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0KPiA+ICAgICA+ICsgIHJldHVybiBFRklf VU5TVVBQT1JURUQ7DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0K PiA+ICAgICA+ICsgIFZhcmlhYmxlIHByb3BlcnR5IHNldC4NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgQHBhcmFtW2luXSBOYW1lICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgdmFyaWFi bGUgbmFtZS4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dIEd1aWQgICAgICAgICAgICAgICBQb2lu dGVyIHRvIHRoZSB2ZW5kb3IgR1VJRC4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dIFZhcmlhYmxl UHJvcGVydHkgICBQb2ludGVyIHRvIHRoZSBpbnB1dCB2YXJpYWJsZSBwcm9wZXJ0eS4NCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHBy b3BlcnR5IG9mIHZhcmlhYmxlIHNwZWNpZmllZCBieSB0aGUNCj4gPiBOYW1lDQo+ID4gICAgID4g YW5kIEd1aWQgd2FzIHNldCBzdWNjZXNzZnVsbHkuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklf SU5WQUxJRF9QQVJBTUVURVIgTmFtZSwgR3VpZCBvciBWYXJpYWJsZVByb3BlcnR5IGlzDQo+ID4g TlVMTCwNCj4gPiAgICAgPiBvciBOYW1lIGlzIGFuIGVtcHR5IHN0cmluZywNCj4gPiAgICAgPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciB0aGUgZmllbGRzIG9mIFZhcmlhYmxl UHJvcGVydHkgYXJlIG5vdCB2YWxpZC4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9BQ0NFU1Nf REVOSUVEDQo+IEVGSV9FTkRfT0ZfRFhFX0VWRU5UX0dST1VQX0dVSUQNCj4gPiBvcg0KPiA+ICAg ICA+IEVGSV9FVkVOVF9HUk9VUF9SRUFEWV9UT19CT09UIGhhcw0KPiA+ICAgICA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgYmVlbiBzaWduYWxlZC4NCj4gPiAgICAg PiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBUaGVyZSBpcyBub3QgZW5vdWdoIHJl c291cmNlIGZvciB0aGUNCj4gPiAgICAgPiB2YXJpYWJsZSBwcm9wZXJ0eSBzZXQgcmVxdWVzdC4N Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtFRklfU1RBVFVTDQo+ID4g ICAgID4gK0VGSUFQSQ0KPiA+ICAgICA+ICtWYXJDaGVja1ZhcmlhYmxlUHJvcGVydHlTZXQgKA0K PiA+ICAgICA+ICsgIElOIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgKk5hbWUsDQo+ID4g ICAgID4gKyAgSU4gRUZJX0dVSUQgICAgICAgICAgICAgICAgICAgICAqR3VpZCwNCj4gPiAgICAg PiArICBJTiBWQVJfQ0hFQ0tfVkFSSUFCTEVfUFJPUEVSVFkgICpWYXJpYWJsZVByb3BlcnR5DQo+ ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgRUZJX1NUQVRVUyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ICAgICA+ ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFZhcmlhYmxlTmFtZVNpemU7DQo+ID4gICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF5bG9hZFNpemU7DQo+ID4gICAgID4gKyAg U01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX1ZBUl9DSEVDS19WQVJJQUJMRV9QUk9QRVJUWQ0KPiA+ ICAgICA+ICpDb21tVmFyaWFibGVQcm9wZXJ0eTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg aWYgKChOYW1lID09IE5VTEwpIHx8IChOYW1lWzBdID09IDApIHx8IChHdWlkID09IE5VTEwpKSB7 DQo+ID4gICAgID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICAgICA+ ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgaWYgKFZhcmlhYmxlUHJvcGVydHkgPT0g TlVMTCkgew0KPiA+ICAgICA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4g PiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIGlmIChWYXJpYWJsZVByb3Bl cnR5LT5SZXZpc2lvbiAhPQ0KPiA+ICAgICA+IFZBUl9DSEVDS19WQVJJQUJMRV9QUk9QRVJUWV9S RVZJU0lPTikgew0KPiA+ICAgICA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsN Cj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFZhcmlhYmxlTmFtZVNp emUgICAgID0gU3RyU2l6ZSAoTmFtZSk7DQo+ID4gICAgID4gKyAgQ29tbVZhcmlhYmxlUHJvcGVy dHkgPSBOVUxMOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8v IElmIFZhcmlhYmxlTmFtZSBleGNlZWRzIFNNTSBwYXlsb2FkIGxpbWl0LiBSZXR1cm4gZmFpbHVy ZQ0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgaWYgKFZhcmlhYmxlTmFtZVNpemUgPiBt VmFyaWFibGVCdWZmZXJQYXlsb2FkU2l6ZSAtIE9GRlNFVF9PRg0KPiA+ICAgICA+IChTTU1fVkFS SUFCTEVfQ09NTVVOSUNBVEVfVkFSX0NIRUNLX1ZBUklBQkxFX1BST1BFUlRZLA0KPiA+IE5hbWUp KQ0KPiA+ICAgICA+IHsNCj4gPiAgICAgPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVU RVI7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBBY3F1aXJlTG9j a09ubHlBdEJvb3RUaW1lICgmbVZhcmlhYmxlU2VydmljZXNMb2NrKTsNCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBJbml0IHRoZSBjb21tdW5pY2F0ZSBidWZm ZXIuIFRoZSBidWZmZXIgZGF0YSBzaXplIGlzOg0KPiA+ICAgICA+ICsgIC8vIFNNTV9DT01NVU5J Q0FURV9IRUFERVJfU0laRSArDQo+ID4gICAgID4gU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0hF QURFUl9TSVpFICsgUGF5bG9hZFNpemUuDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBQ YXlsb2FkU2l6ZSA9IE9GRlNFVF9PRg0KPiA+ICAgICA+IChTTU1fVkFSSUFCTEVfQ09NTVVOSUNB VEVfVkFSX0NIRUNLX1ZBUklBQkxFX1BST1BFUlRZLA0KPiA+IE5hbWUpICsNCj4gPiAgICAgPiBW YXJpYWJsZU5hbWVTaXplOw0KPiA+ICAgICA+ICsgIFN0YXR1cyAgICAgID0gSW5pdENvbW11bmlj YXRlQnVmZmVyICgoVk9JRCAqKikmQ29tbVZhcmlhYmxlUHJvcGVydHksDQo+ID4gICAgID4gUGF5 bG9hZFNpemUsDQo+ID4gICAgID4gU01NX1ZBUklBQkxFX0ZVTkNUSU9OX1ZBUl9DSEVDS19WQVJJ QUJMRV9QUk9QRVJUWV9TRVQpOw0KPiA+ICAgICA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gPiAgICAgPiArICAgIGdvdG8gRG9uZTsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsgIEFTU0VSVCAoQ29tbVZhcmlhYmxlUHJvcGVydHkgIT0gTlVMTCk7DQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIENvcHlHdWlkICgmQ29tbVZhcmlhYmxlUHJvcGVydHkt Pkd1aWQsIEd1aWQpOw0KPiA+ICAgICA+ICsgIENvcHlNZW0gKCZDb21tVmFyaWFibGVQcm9wZXJ0 eS0+VmFyaWFibGVQcm9wZXJ0eSwNCj4gVmFyaWFibGVQcm9wZXJ0eSwNCj4gPiAgICAgPiBzaXpl b2YgKCpWYXJpYWJsZVByb3BlcnR5KSk7DQo+ID4gICAgID4gKyAgQ29tbVZhcmlhYmxlUHJvcGVy dHktPk5hbWVTaXplID0gVmFyaWFibGVOYW1lU2l6ZTsNCj4gPiAgICAgPiArICBDb3B5TWVtIChD b21tVmFyaWFibGVQcm9wZXJ0eS0+TmFtZSwgTmFtZSwNCj4gPiBDb21tVmFyaWFibGVQcm9wZXJ0 eS0NCj4gPiAgICAgPiA+TmFtZVNpemUpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0K PiA+ICAgICA+ICsgIC8vIFNlbmQgZGF0YSB0byBTTU0uDQo+ID4gICAgID4gKyAgLy8NCj4gPiAg ICAgPiArICBTdGF0dXMgPSBTZW5kQ29tbXVuaWNhdGVCdWZmZXIgKFBheWxvYWRTaXplKTsNCj4g PiAgICAgPiArDQo+ID4gICAgID4gK0RvbmU6DQo+ID4gICAgID4gKyAgUmVsZWFzZUxvY2tPbmx5 QXRCb290VGltZSAoJm1WYXJpYWJsZVNlcnZpY2VzTG9jayk7DQo+ID4gICAgID4gKyAgcmV0dXJu IFN0YXR1czsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4g ICAgID4gKyAgVmFyaWFibGUgcHJvcGVydHkgZ2V0Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr ICBAcGFyYW1baW5dICBOYW1lICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSB2YXJpYWJsZSBu YW1lLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gIEd1aWQgICAgICAgICAgICAgIFBvaW50ZXIg dG8gdGhlIHZlbmRvciBHVUlELg0KPiA+ICAgICA+ICsgIEBwYXJhbVtvdXRdIFZhcmlhYmxlUHJv cGVydHkgIFBvaW50ZXIgdG8gdGhlIG91dHB1dCB2YXJpYWJsZSBwcm9wZXJ0eS4NCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHByb3Bl cnR5IG9mIHZhcmlhYmxlIHNwZWNpZmllZCBieSB0aGUNCj4gPiBOYW1lDQo+ID4gICAgID4gYW5k IEd1aWQgd2FzIGdvdCBzdWNjZXNzZnVsbHkuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfSU5W QUxJRF9QQVJBTUVURVIgTmFtZSwgR3VpZCBvciBWYXJpYWJsZVByb3BlcnR5IGlzDQo+ID4gTlVM TCwNCj4gPiAgICAgPiBvciBOYW1lIGlzIGFuIGVtcHR5IHN0cmluZy4NCj4gPiAgICAgPiArICBA cmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICBUaGUgcHJvcGVydHkgb2YgdmFyaWFibGUgc3Bl Y2lmaWVkIGJ5IHRoZQ0KPiA+IE5hbWUNCj4gPiAgICAgPiBhbmQgR3VpZCB3YXMgbm90IGZvdW5k Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4g PiAgICAgPiArRUZJQVBJDQo+ID4gICAgID4gK1ZhckNoZWNrVmFyaWFibGVQcm9wZXJ0eUdldCAo DQo+ID4gICAgID4gKyAgSU4gQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgKk5hbWUsDQo+ ID4gICAgID4gKyAgSU4gRUZJX0dVSUQgICAgICAgICAgICAgICAgICAgICAgKkd1aWQsDQo+ID4g ICAgID4gKyAgT1VUIFZBUl9DSEVDS19WQVJJQUJMRV9QUk9QRVJUWSAgKlZhcmlhYmxlUHJvcGVy dHkNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBFRklfU1RBVFVT ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4g ICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVmFyaWFibGVOYW1lU2l6ZTsNCj4gPiAgICAgPiArICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXlsb2FkU2l6ZTsNCj4gPiAgICAg PiArICBTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfVkFSX0NIRUNLX1ZBUklBQkxFX1BST1BFUlRZ DQo+ID4gICAgID4gKkNvbW1WYXJpYWJsZVByb3BlcnR5Ow0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICBpZiAoKE5hbWUgPT0gTlVMTCkgfHwgKE5hbWVbMF0gPT0gMCkgfHwgKEd1aWQgPT0gTlVM TCkpIHsNCj4gPiAgICAgPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4g ICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBpZiAoVmFyaWFibGVQcm9wZXJ0 eSA9PSBOVUxMKSB7DQo+ID4gICAgID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVS Ow0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgVmFyaWFibGVOYW1l U2l6ZSAgICAgPSBTdHJTaXplIChOYW1lKTsNCj4gPiAgICAgPiArICBDb21tVmFyaWFibGVQcm9w ZXJ0eSA9IE5VTEw7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAg Ly8gSWYgVmFyaWFibGVOYW1lIGV4Y2VlZHMgU01NIHBheWxvYWQgbGltaXQuIFJldHVybiBmYWls dXJlDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBpZiAoVmFyaWFibGVOYW1lU2l6ZSA+ IG1WYXJpYWJsZUJ1ZmZlclBheWxvYWRTaXplIC0gT0ZGU0VUX09GDQo+ID4gICAgID4gKFNNTV9W QVJJQUJMRV9DT01NVU5JQ0FURV9WQVJfQ0hFQ0tfVkFSSUFCTEVfUFJPUEVSVFksDQo+ID4gTmFt ZSkpDQo+ID4gICAgID4gew0KPiA+ICAgICA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFN RVRFUjsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEFjcXVpcmVM b2NrT25seUF0Qm9vdFRpbWUgKCZtVmFyaWFibGVTZXJ2aWNlc0xvY2spOw0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIEluaXQgdGhlIGNvbW11bmljYXRlIGJ1 ZmZlci4gVGhlIGJ1ZmZlciBkYXRhIHNpemUgaXM6DQo+ID4gICAgID4gKyAgLy8gU01NX0NPTU1V TklDQVRFX0hFQURFUl9TSVpFICsNCj4gPiAgICAgPiBTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVf SEVBREVSX1NJWkUgKyBQYXlsb2FkU2l6ZS4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsg IFBheWxvYWRTaXplID0gT0ZGU0VUX09GDQo+ID4gICAgID4gKFNNTV9WQVJJQUJMRV9DT01NVU5J Q0FURV9WQVJfQ0hFQ0tfVkFSSUFCTEVfUFJPUEVSVFksDQo+ID4gTmFtZSkgKw0KPiA+ICAgICA+ IFZhcmlhYmxlTmFtZVNpemU7DQo+ID4gICAgID4gKyAgU3RhdHVzICAgICAgPSBJbml0Q29tbXVu aWNhdGVCdWZmZXIgKChWT0lEICoqKSZDb21tVmFyaWFibGVQcm9wZXJ0eSwNCj4gPiAgICAgPiBQ YXlsb2FkU2l6ZSwNCj4gPiAgICAgPiBTTU1fVkFSSUFCTEVfRlVOQ1RJT05fVkFSX0NIRUNLX1ZB UklBQkxFX1BST1BFUlRZX0dFVCk7DQo+ID4gICAgID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiA+ICAgICA+ICsgICAgZ290byBEb25lOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyAgQVNTRVJUIChDb21tVmFyaWFibGVQcm9wZXJ0eSAhPSBOVUxMKTsN Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQ29weUd1aWQgKCZDb21tVmFyaWFibGVQcm9wZXJ0 eS0+R3VpZCwgR3VpZCk7DQo+ID4gICAgID4gKyAgQ29tbVZhcmlhYmxlUHJvcGVydHktPk5hbWVT aXplID0gVmFyaWFibGVOYW1lU2l6ZTsNCj4gPiAgICAgPiArICBDb3B5TWVtIChDb21tVmFyaWFi bGVQcm9wZXJ0eS0+TmFtZSwgTmFtZSwNCj4gPiBDb21tVmFyaWFibGVQcm9wZXJ0eS0NCj4gPiAg ICAgPiA+TmFtZVNpemUpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ ICsgIC8vIFNlbmQgZGF0YSB0byBTTU0uDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBT dGF0dXMgPSBTZW5kQ29tbXVuaWNhdGVCdWZmZXIgKFBheWxvYWRTaXplKTsNCj4gPiAgICAgPiAr ICBpZiAoU3RhdHVzID09IEVGSV9TVUNDRVNTKSB7DQo+ID4gICAgID4gKyAgICBDb3B5TWVtIChW YXJpYWJsZVByb3BlcnR5LCAmQ29tbVZhcmlhYmxlUHJvcGVydHktDQo+ID4gPlZhcmlhYmxlUHJv cGVydHksDQo+ID4gICAgID4gc2l6ZW9mICgqVmFyaWFibGVQcm9wZXJ0eSkpOw0KPiA+ICAgICA+ ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gK0RvbmU6DQo+ID4gICAgID4gKyAgUmVsZWFz ZUxvY2tPbmx5QXRCb290VGltZSAoJm1WYXJpYWJsZVNlcnZpY2VzTG9jayk7DQo+ID4gICAgID4g KyAgcmV0dXJuIFN0YXR1czsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr LyoqDQo+ID4gICAgID4gKyAgU2lnbmFscyBTTU0gdG8gc3luY2hyb25pemUgYW55IHBlbmRpbmcg dmFyaWFibGUgdXBkYXRlcyB3aXRoIHRoZQ0KPiA+IHJ1bnRpbWUNCj4gPiAgICAgPiBjYWNoZShz KS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtWT0lEDQo+ID4gICAg ID4gK1N5bmNSdW50aW1lQ2FjaGUgKA0KPiA+ICAgICA+ICsgIFZPSUQNCj4gPiAgICAgPiArICAp DQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIEluaXQgdGhl IGNvbW11bmljYXRlIGJ1ZmZlci4gVGhlIGJ1ZmZlciBkYXRhIHNpemUgaXM6DQo+ID4gICAgID4g KyAgLy8gU01NX0NPTU1VTklDQVRFX0hFQURFUl9TSVpFICsNCj4gPiAgICAgPiBTTU1fVkFSSUFC TEVfQ09NTVVOSUNBVEVfSEVBREVSX1NJWkUuDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiAr ICBJbml0Q29tbXVuaWNhdGVCdWZmZXIgKE5VTEwsIDAsDQo+ID4gICAgID4gU01NX1ZBUklBQkxF X0ZVTkNUSU9OX1NZTkNfUlVOVElNRV9DQUNIRSk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsg IC8vDQo+ID4gICAgID4gKyAgLy8gU2VuZCBkYXRhIHRvIFNNTS4NCj4gPiAgICAgPiArICAvLw0K PiA+ICAgICA+ICsgIFNlbmRDb21tdW5pY2F0ZUJ1ZmZlciAoMCk7DQo+ID4gICAgID4gK30NCj4g PiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIENoZWNrIHdoZXRoZXIgYSBT TUkgbXVzdCBiZSB0cmlnZ2VyZWQgdG8gcmV0cmlldmUgcGVuZGluZyBjYWNoZQ0KPiB1cGRhdGVz Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBJZiB0aGUgdmFyaWFibGUgSE9CIHdhcyBmaW5p c2hlZCBiZWluZyBmbHVzaGVkIHNpbmNlIHRoZSBsYXN0IGNoZWNrIGZvciBhDQo+ID4gICAgID4g cnVudGltZSBjYWNoZSB1cGRhdGUsIHRoaXMgZnVuY3Rpb24NCj4gPiAgICAgPiArICB3aWxsIHBy ZXZlbnQgdGhlIEhPQiBjYWNoZSBmcm9tIGJlaW5nIHVzZWQgZm9yIGZ1dHVyZSBydW50aW1lIGNh Y2hlDQo+IGhpdHMuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArVk9J RA0KPiA+ICAgICA+ICtDaGVja0ZvclJ1bnRpbWVDYWNoZVN5bmMgKA0KPiA+ICAgICA+ICsgIFZP SUQNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBpZiAobVZhcmlh YmxlUnVudGltZUNhY2hlUGVuZGluZ1VwZGF0ZSkgew0KPiA+ICAgICA+ICsgICAgU3luY1J1bnRp bWVDYWNoZSAoKTsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEFT U0VSVCAoIW1WYXJpYWJsZVJ1bnRpbWVDYWNoZVBlbmRpbmdVcGRhdGUpOw0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIFRoZSBIT0IgdmFyaWFibGUgZGF0YSBt YXkgaGF2ZSBmaW5pc2hlZCBiZWluZyBmbHVzaGVkIGluIHRoZSBydW50aW1lDQo+ID4gY2FjaGUN Cj4gPiAgICAgPiBzeW5jIHVwZGF0ZQ0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgaWYg KG1Ib2JGbHVzaENvbXBsZXRlICYmIChtVmFyaWFibGVSdW50aW1lSG9iQ2FjaGVCdWZmZXIgIT0N Cj4gTlVMTCkpDQo+ID4gew0KPiA+ICAgICA+ICsgICAgaWYgKCFFZmlBdFJ1bnRpbWUgKCkpIHsN Cj4gPiAgICAgPiArICAgICAgRnJlZVBhZ2VzIChtVmFyaWFibGVSdW50aW1lSG9iQ2FjaGVCdWZm ZXIsIEVGSV9TSVpFX1RPX1BBR0VTDQo+ID4gICAgID4gKG1WYXJpYWJsZVJ1bnRpbWVIb2JDYWNo ZUJ1ZmZlclNpemUpKTsNCj4gPiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgICBtVmFyaWFibGVSdW50aW1lSG9iQ2FjaGVCdWZmZXIgPSBOVUxMOw0KPiA+ICAgICA+ICsg IH0NCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4g KyAgRmluZHMgdGhlIGdpdmVuIHZhcmlhYmxlIGluIGEgcnVudGltZSBjYWNoZSB2YXJpYWJsZSBz dG9yZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQ2F1dGlvbjogVGhpcyBmdW5jdGlvbiBt YXkgcmVjZWl2ZSB1bnRydXN0ZWQgaW5wdXQuDQo+ID4gICAgID4gKyAgVGhlIGRhdGEgc2l6ZSBp cyBleHRlcm5hbCBpbnB1dCwgc28gdGhpcyBmdW5jdGlvbiB3aWxsIHZhbGlkYXRlIGl0IGNhcmVm dWxseSB0bw0KPiA+ICAgICA+IGF2b2lkIGJ1ZmZlciBvdmVyZmxvdy4NCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgQHBhcmFtW2luXSAgICAgIFZhcmlhYmxlTmFtZSAgICAgICBOYW1lIG9mIFZh cmlhYmxlIHRvIGJlIGZvdW5kLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gICAgICBWZW5kb3JH dWlkICAgICAgICAgVmFyaWFibGUgdmVuZG9yIEdVSUQuDQo+ID4gICAgID4gKyAgQHBhcmFtW291 dF0gICAgIEF0dHJpYnV0ZXMgICAgICAgICBBdHRyaWJ1dGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxl IGZvdW5kLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbiwgb3V0XSBEYXRhU2l6ZSAgICAgICAgICAg U2l6ZSBvZiBEYXRhIGZvdW5kLiBJZiBzaXplIGlzIGxlc3MgdGhhbiB0aGUNCj4gPiAgICAgPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIHRoaXMgdmFsdWUgY29u dGFpbnMgdGhlIHJlcXVpcmVkIHNpemUuDQo+ID4gICAgID4gKyAgQHBhcmFtW291dF0gICAgIERh dGEgICAgICAgICAgICAgICBEYXRhIHBvaW50ZXIuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgRm91bmQgdGhlIHNwZWNpZmllZCB2 YXJpYWJsZS4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgICAg IEludmFsaWQgcGFyYW1ldGVyLg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAg ICAgICAgICAgICAgVGhlIHNwZWNpZmllZCB2YXJpYWJsZSBjb3VsZCBub3QgYmUNCj4gPiBmb3Vu ZC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtFRklfU1RBVFVTDQo+ ID4gICAgID4gK0ZpbmRWYXJpYWJsZUluUnVudGltZUNhY2hlICgNCj4gPiAgICAgPiArICBJTiAg ICAgIENIQVIxNiAgICAqVmFyaWFibGVOYW1lLA0KPiA+ICAgICA+ICsgIElOICAgICAgRUZJX0dV SUQgICpWZW5kb3JHdWlkLA0KPiA+ICAgICA+ICsgIE9VVCAgICAgVUlOVDMyICAgICpBdHRyaWJ1 dGVzIE9QVElPTkFMLA0KPiA+ICAgICA+ICsgIElOIE9VVCAgVUlOVE4gICAgICpEYXRhU2l6ZSwN Cj4gPiAgICAgPiArICBPVVQgICAgIFZPSUQgICAgICAqRGF0YSBPUFRJT05BTA0KPiA+ICAgICA+ ICsgICkNCj4gPiAgICAgPiArew0KPiA+ICAgICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAg IFN0YXR1czsNCj4gPiAgICAgPiArICBWQVJJQUJMRV9QT0lOVEVSX1RSQUNLICBSdFB0clRyYWNr Ow0KPiA+ICAgICA+ICsgIFZBUklBQkxFX1NUT1JFX1RZUEUgICAgIFN0b3JlVHlwZTsNCj4gPiAg ICAgPiArICBWQVJJQUJMRV9TVE9SRV9IRUFERVIgICAqVmFyaWFibGVTdG9yZUxpc3RbVmFyaWFi bGVTdG9yZVR5cGVNYXhdOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBTdGF0dXMgPSBFRklf Tk9UX0ZPVU5EOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBpZiAoKFZhcmlhYmxlTmFtZSA9 PSBOVUxMKSB8fCAoVmVuZG9yR3VpZCA9PSBOVUxMKSB8fCAoRGF0YVNpemUgPT0NCj4gPiBOVUxM KSkgew0KPiA+ICAgICA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiAg ICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFplcm9NZW0gKCZSdFB0clRyYWNr LCBzaXplb2YgKFJ0UHRyVHJhY2spKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4g PiAgICAgPiArICAvLyBUaGUgVUVGSSBzcGVjaWZpY2F0aW9uIHJlc3RyaWN0cyBSdW50aW1lIFNl cnZpY2VzIGNhbGxlcnMgZnJvbSBpbnZva2luZw0KPiA+IHRoZQ0KPiA+ICAgICA+IHNhbWUgb3Ig Y2VydGFpbiBvdGhlciBSdW50aW1lIFNlcnZpY2UNCj4gPiAgICAgPiArICAvLyBmdW5jdGlvbnMg cHJpb3IgdG8gY29tcGxldGlvbiBhbmQgcmV0dXJuIGZyb20gYSBwcmV2aW91cyBSdW50aW1lDQo+ ID4gU2VydmljZQ0KPiA+ICAgICA+IGNhbGwuIFRoZXNlIHJlc3RyaWN0aW9ucyBwcmV2ZW50DQo+ ID4gICAgID4gKyAgLy8gYSBHZXRWYXJpYWJsZSAoKSBvciBHZXROZXh0VmFyaWFibGUgKCkgY2Fs bCBmcm9tIGJlaW5nIGlzc3VlZCB1bnRpbCBhDQo+IHByaW9yDQo+ID4gY2FsbA0KPiA+ICAgICA+ IGhhcyByZXR1cm5lZC4gVGhlIHJ1bnRpbWUNCj4gPiAgICAgPiArICAvLyBjYWNoZSByZWFkIGxv Y2sgc2hvdWxkIGFsd2F5cyBiZSBmcmVlIHdoZW4gZW50ZXJpbmcgdGhpcyBmdW5jdGlvbi4NCj4g PiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIEFTU0VSVCAoIW1WYXJpYWJsZVJ1bnRpbWVDYWNo ZVJlYWRMb2NrKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgbVZhcmlhYmxlUnVudGltZUNh Y2hlUmVhZExvY2sgPSBUUlVFOw0KPiA+ICAgICA+ICsgIENoZWNrRm9yUnVudGltZUNhY2hlU3lu YyAoKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgaWYgKCFtVmFyaWFibGVSdW50aW1lQ2Fj aGVQZW5kaW5nVXBkYXRlKSB7DQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgLy8g MDogVm9sYXRpbGUsIDE6IEhPQiwgMjogTm9uLVZvbGF0aWxlLg0KPiA+ICAgICA+ICsgICAgLy8g VGhlIGluZGV4IGFuZCBhdHRyaWJ1dGVzIG1hcHBpbmcgbXVzdCBiZSBrZXB0IGluIHRoaXMgb3Jk ZXIgYXMNCj4gPiAgICAgPiBGaW5kVmFyaWFibGUNCj4gPiAgICAgPiArICAgIC8vIG1ha2VzIHVz ZSBvZiB0aGlzIG1hcHBpbmcgdG8gaW1wbGVtZW50IHNlYXJjaCBhbGdvcml0aG0uDQo+ID4gICAg ID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgVmFyaWFibGVTdG9yZUxpc3RbVmFyaWFibGVTdG9y ZVR5cGVWb2xhdGlsZV0gPQ0KPiA+ICAgICA+IG1WYXJpYWJsZVJ1bnRpbWVWb2xhdGlsZUNhY2hl QnVmZmVyOw0KPiA+ICAgICA+ICsgICAgVmFyaWFibGVTdG9yZUxpc3RbVmFyaWFibGVTdG9yZVR5 cGVIb2JdICAgICAgPQ0KPiA+ICAgICA+IG1WYXJpYWJsZVJ1bnRpbWVIb2JDYWNoZUJ1ZmZlcjsN Cj4gPiAgICAgPiArICAgIFZhcmlhYmxlU3RvcmVMaXN0W1ZhcmlhYmxlU3RvcmVUeXBlTnZdICAg ICAgID0NCj4gPiAgICAgPiBtVmFyaWFibGVSdW50aW1lTnZDYWNoZUJ1ZmZlcjsNCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyAgICBmb3IgKFN0b3JlVHlwZSA9IChWQVJJQUJMRV9TVE9SRV9UWVBF KTA7IFN0b3JlVHlwZSA8DQo+ID4gICAgID4gVmFyaWFibGVTdG9yZVR5cGVNYXg7IFN0b3JlVHlw ZSsrKSB7DQo+ID4gICAgID4gKyAgICAgIGlmIChWYXJpYWJsZVN0b3JlTGlzdFtTdG9yZVR5cGVd ID09IE5VTEwpIHsNCj4gPiAgICAgPiArICAgICAgICBjb250aW51ZTsNCj4gPiAgICAgPiArICAg ICAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgICAgUnRQdHJUcmFjay5TdGFydFB0ciA9 IEdldFN0YXJ0UG9pbnRlciAoVmFyaWFibGVTdG9yZUxpc3RbU3RvcmVUeXBlXSk7DQo+ID4gICAg ID4gKyAgICAgIFJ0UHRyVHJhY2suRW5kUHRyICAgPSBHZXRFbmRQb2ludGVyIChWYXJpYWJsZVN0 b3JlTGlzdFtTdG9yZVR5cGVdKTsNCj4gPiAgICAgPiArICAgICAgUnRQdHJUcmFjay5Wb2xhdGls ZSA9IChCT09MRUFOKShTdG9yZVR5cGUgPT0NCj4gPiBWYXJpYWJsZVN0b3JlVHlwZVZvbGF0aWxl KTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgICAgIFN0YXR1cyA9IEZpbmRWYXJpYWJsZUV4 IChWYXJpYWJsZU5hbWUsIFZlbmRvckd1aWQsIEZBTFNFLA0KPiA+ICZSdFB0clRyYWNrLA0KPiA+ ICAgICA+IG1WYXJpYWJsZUF1dGhGb3JtYXQpOw0KPiA+ICAgICA+ICsgICAgICBpZiAoIUVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiA+ICAgICA+ICsgICAgICAgIGJyZWFrOw0KPiA+ICAgICA+ICsg ICAgICB9DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgaWYg KCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiArICAgICAgLy8NCj4gPiAgICAgPiAr ICAgICAgLy8gR2V0IGRhdGEgc2l6ZQ0KPiA+ICAgICA+ICsgICAgICAvLw0KPiA+ICAgICA+ICsg ICAgICBpZiAoIVJ0UHRyVHJhY2suVm9sYXRpbGUpIHsNCj4gPiAgICAgPiArICAgICAgICAvLw0K PiA+ICAgICA+ICsgICAgICAgIC8vIEN1cnJlbnRseSBvbmx5IG5vbi12b2xhdGlsZSB2YXJpYWJs ZSBuZWVkcyBwcm90ZWN0aW9uLg0KPiA+ICAgICA+ICsgICAgICAgIC8vDQo+ID4gICAgID4gKyAg ICAgICAgU3RhdHVzID0gUHJvdGVjdGVkVmFyaWFibGVMaWJHZXRCeUJ1ZmZlciAoUnRQdHJUcmFj ay5DdXJyUHRyLCBEYXRhLA0KPiA+ICAgICA+IChVSU5UMzIgKilEYXRhU2l6ZSwgbVZhcmlhYmxl QXV0aEZvcm1hdCk7DQo+ID4gICAgID4gKyAgICAgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgICAgIGlmIChSdFB0clRyYWNrLlZvbGF0aWxlIHx8IChTdGF0dXMgPT0gRUZJX1VOU1VQUE9S VEVEKSkgew0KPiA+ICAgICA+ICsgICAgICAgIFN0YXR1cyA9IEdldFZhcmlhYmxlRGF0YSAoUnRQ dHJUcmFjay5DdXJyUHRyLCBEYXRhLCAoVUlOVDMyDQo+ID4gKilEYXRhU2l6ZSwNCj4gPiAgICAg PiBtVmFyaWFibGVBdXRoRm9ybWF0KTsNCj4gPiAgICAgPiArICAgICAgfQ0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICAgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiAr ICAgICAgICBVcGRhdGVWYXJpYWJsZUluZm8gKFZhcmlhYmxlTmFtZSwgVmVuZG9yR3VpZCwgUnRQ dHJUcmFjay5Wb2xhdGlsZSwNCj4gPiAgICAgPiBUUlVFLCBGQUxTRSwgRkFMU0UsIEZBTFNFLCAm bVZhcmlhYmxlSW5mbyk7DQo+ID4gICAgID4gKyAgICAgIH0NCj4gPiAgICAgPiArICAgIH0NCj4g PiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIGlmICgoU3RhdHVzID09IEVG SV9TVUNDRVNTKSB8fCAoU3RhdHVzID09IEVGSV9CVUZGRVJfVE9PX1NNQUxMKSkgew0KPiA+ICAg ICA+ICsgICAgaWYgKChBdHRyaWJ1dGVzICE9IE5VTEwpICYmIChSdFB0clRyYWNrLkN1cnJQdHIg IT0gTlVMTCkpIHsNCj4gPiAgICAgPiArICAgICAgKkF0dHJpYnV0ZXMgPSBSdFB0clRyYWNrLkN1 cnJQdHItPkF0dHJpYnV0ZXM7DQo+ID4gICAgID4gKyAgICB9DQo+ID4gICAgID4gKyAgfQ0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICBtVmFyaWFibGVSdW50aW1lQ2FjaGVSZWFkTG9jayA9IEZB TFNFOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICAgICA+ ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBGaW5kcyB0aGUg Z2l2ZW4gdmFyaWFibGUgaW4gYSB2YXJpYWJsZSBzdG9yZSBpbiBTTU0uDQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIENhdXRpb246IFRoaXMgZnVuY3Rpb24gbWF5IHJlY2VpdmUgdW50cnVzdGVk IGlucHV0Lg0KPiA+ICAgICA+ICsgIFRoZSBkYXRhIHNpemUgaXMgZXh0ZXJuYWwgaW5wdXQsIHNv IHRoaXMgZnVuY3Rpb24gd2lsbCB2YWxpZGF0ZSBpdCBjYXJlZnVsbHkgdG8NCj4gPiAgICAgPiBh dm9pZCBidWZmZXIgb3ZlcmZsb3cuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbVtp bl0gICAgICBWYXJpYWJsZU5hbWUgICAgICAgTmFtZSBvZiBWYXJpYWJsZSB0byBiZSBmb3VuZC4N Cj4gPiAgICAgPiArICBAcGFyYW1baW5dICAgICAgVmVuZG9yR3VpZCAgICAgICAgIFZhcmlhYmxl IHZlbmRvciBHVUlELg0KPiA+ICAgICA+ICsgIEBwYXJhbVtvdXRdICAgICBBdHRyaWJ1dGVzICAg ICAgICAgQXR0cmlidXRlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBmb3VuZC4NCj4gPiAgICAgPiAr ICBAcGFyYW1baW4sIG91dF0gRGF0YVNpemUgICAgICAgICAgIFNpemUgb2YgRGF0YSBmb3VuZC4g SWYgc2l6ZSBpcyBsZXNzIHRoYW4gdGhlDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkYXRhLCB0aGlzIHZhbHVlIGNvbnRhaW5zIHRoZSByZXF1aXJlZCBz aXplLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtvdXRdICAgICBEYXRhICAgICAgICAgICAgICAgRGF0 YSBwb2ludGVyLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICAgICAgICAgIEZvdW5kIHRoZSBzcGVjaWZpZWQgdmFyaWFibGUuDQo+ID4gICAgID4g KyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICAgICBJbnZhbGlkIHBhcmFtZXRlci4N Cj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgICAgIFRoZSBzcGVj aWZpZWQgdmFyaWFibGUgY291bGQgbm90IGJlDQo+ID4gZm91bmQuDQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX1NUQVRVUw0KPiA+ICAgICA+ICtFRklBUEkNCj4g PiAgICAgPiArRmluZFZhcmlhYmxlSW5TbW0gKA0KPiA+ICAgICA+ICsgIElOICAgICAgQ0hBUjE2 ICAgICpWYXJpYWJsZU5hbWUsDQo+ID4gICAgID4gKyAgSU4gICAgICBFRklfR1VJRCAgKlZlbmRv ckd1aWQsDQo+ID4gICAgID4gKyAgT1VUICAgICBVSU5UMzIgICAgKkF0dHJpYnV0ZXMgT1BUSU9O QUwsDQo+ID4gICAgID4gKyAgSU4gT1VUICBVSU5UTiAgICAgKkRhdGFTaXplLA0KPiA+ICAgICA+ ICsgIE9VVCAgICAgVk9JRCAgICAgICpEYXRhIE9QVElPTkFMDQo+ID4gICAgID4gKyAgKQ0KPiA+ ICAgICA+ICt7DQo+ID4gICAgID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgU3RhdHVzOw0KPiA+ICAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFBheWxvYWRTaXplOw0KPiA+ICAgICA+ICsgIFNNTV9WQVJJQUJMRV9D T01NVU5JQ0FURV9BQ0NFU1NfVkFSSUFCTEUNCj4gPiAqU21tVmFyaWFibGVIZWFkZXI7DQo+ID4g ICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVtcERh dGFTaXplOw0KPiA+ICAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFZhcmlhYmxlTmFtZVNpemU7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIGlmICgo VmFyaWFibGVOYW1lID09IE5VTEwpIHx8IChWZW5kb3JHdWlkID09IE5VTEwpIHx8IChEYXRhU2l6 ZSA9PQ0KPiA+IE5VTEwpKSB7DQo+ID4gICAgID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFS QU1FVEVSOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgVGVtcERh dGFTaXplICAgICAgPSAqRGF0YVNpemU7DQo+ID4gICAgID4gKyAgVmFyaWFibGVOYW1lU2l6ZSAg PSBTdHJTaXplIChWYXJpYWJsZU5hbWUpOw0KPiA+ICAgICA+ICsgIFNtbVZhcmlhYmxlSGVhZGVy ID0gTlVMTDsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBJ ZiBWYXJpYWJsZU5hbWUgZXhjZWVkcyBTTU0gcGF5bG9hZCBsaW1pdC4gUmV0dXJuIGZhaWx1cmUN Cj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIGlmIChWYXJpYWJsZU5hbWVTaXplID4gbVZh cmlhYmxlQnVmZmVyUGF5bG9hZFNpemUgLSBPRkZTRVRfT0YNCj4gPiAgICAgPiAoU01NX1ZBUklB QkxFX0NPTU1VTklDQVRFX0FDQ0VTU19WQVJJQUJMRSwgTmFtZSkpIHsNCj4gPiAgICAgPiArICAg IHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIEluaXQgdGhlIGNvbW11bmljYXRl IGJ1ZmZlci4gVGhlIGJ1ZmZlciBkYXRhIHNpemUgaXM6DQo+ID4gICAgID4gKyAgLy8gU01NX0NP TU1VTklDQVRFX0hFQURFUl9TSVpFICsNCj4gPiAgICAgPiBTTU1fVkFSSUFCTEVfQ09NTVVOSUNB VEVfSEVBREVSX1NJWkUgKyBQYXlsb2FkU2l6ZS4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ ICsgIGlmIChUZW1wRGF0YVNpemUgPiBtVmFyaWFibGVCdWZmZXJQYXlsb2FkU2l6ZSAtIE9GRlNF VF9PRg0KPiA+ICAgICA+IChTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfQUNDRVNTX1ZBUklBQkxF LCBOYW1lKSAtDQo+ID4gICAgID4gVmFyaWFibGVOYW1lU2l6ZSkgew0KPiA+ICAgICA+ICsgICAg Ly8NCj4gPiAgICAgPiArICAgIC8vIElmIG91dHB1dCBkYXRhIGJ1ZmZlciBleGNlZWQgU01NIHBh eWxvYWQgbGltaXQuIFRyaW0gb3V0cHV0IGJ1ZmZlcg0KPiB0bw0KPiA+ICAgICA+IFNNTSBwYXls b2FkIHNpemUNCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICBUZW1wRGF0YVNpemUg PSBtVmFyaWFibGVCdWZmZXJQYXlsb2FkU2l6ZSAtIE9GRlNFVF9PRg0KPiA+ICAgICA+IChTTU1f VkFSSUFCTEVfQ09NTVVOSUNBVEVfQUNDRVNTX1ZBUklBQkxFLCBOYW1lKSAtDQo+ID4gICAgID4g VmFyaWFibGVOYW1lU2l6ZTsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsgIFBheWxvYWRTaXplID0gT0ZGU0VUX09GDQo+ID4gICAgID4gKFNNTV9WQVJJQUJMRV9DT01N VU5JQ0FURV9BQ0NFU1NfVkFSSUFCTEUsIE5hbWUpICsNCj4gPiAgICAgPiBWYXJpYWJsZU5hbWVT aXplICsgVGVtcERhdGFTaXplOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBTdGF0dXMgPSBJ bml0Q29tbXVuaWNhdGVCdWZmZXIgKChWT0lEICoqKSZTbW1WYXJpYWJsZUhlYWRlciwNCj4gPiBQ YXlsb2FkU2l6ZSwNCj4gPiAgICAgPiBTTU1fVkFSSUFCTEVfRlVOQ1RJT05fR0VUX1ZBUklBQkxF KTsNCj4gPiAgICAgPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAgID4gKyAg ICBnb3RvIERvbmU7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBB U1NFUlQgKFNtbVZhcmlhYmxlSGVhZGVyICE9IE5VTEwpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICBDb3B5R3VpZCAoJlNtbVZhcmlhYmxlSGVhZGVyLT5HdWlkLCBWZW5kb3JHdWlkKTsNCj4g PiAgICAgPiArICBTbW1WYXJpYWJsZUhlYWRlci0+RGF0YVNpemUgPSBUZW1wRGF0YVNpemU7DQo+ ID4gICAgID4gKyAgU21tVmFyaWFibGVIZWFkZXItPk5hbWVTaXplID0gVmFyaWFibGVOYW1lU2l6 ZTsNCj4gPiAgICAgPiArICBpZiAoQXR0cmlidXRlcyA9PSBOVUxMKSB7DQo+ID4gICAgID4gKyAg ICBTbW1WYXJpYWJsZUhlYWRlci0+QXR0cmlidXRlcyA9IDA7DQo+ID4gICAgID4gKyAgfSBlbHNl IHsNCj4gPiAgICAgPiArICAgIFNtbVZhcmlhYmxlSGVhZGVyLT5BdHRyaWJ1dGVzID0gKkF0dHJp YnV0ZXM7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBDb3B5TWVt IChTbW1WYXJpYWJsZUhlYWRlci0+TmFtZSwgVmFyaWFibGVOYW1lLA0KPiA+IFNtbVZhcmlhYmxl SGVhZGVyLQ0KPiA+ICAgICA+ID5OYW1lU2l6ZSk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsg IC8vDQo+ID4gICAgID4gKyAgLy8gU2VuZCBkYXRhIHRvIFNNTS4NCj4gPiAgICAgPiArICAvLw0K PiA+ICAgICA+ICsgIFN0YXR1cyA9IFNlbmRDb21tdW5pY2F0ZUJ1ZmZlciAoUGF5bG9hZFNpemUp Ow0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIEdldCBkYXRh IGZyb20gU01NLg0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgaWYgKChTdGF0dXMgPT0g RUZJX1NVQ0NFU1MpIHx8IChTdGF0dXMgPT0gRUZJX0JVRkZFUl9UT09fU01BTEwpKSB7DQo+ID4g ICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgLy8gU01NIENvbW1CdWZmZXIgRGF0YVNpemUg Y2FuIGJlIGEgdHJpbWVkIHZhbHVlDQo+ID4gICAgID4gKyAgICAvLyBPbmx5IHVwZGF0ZSBEYXRh U2l6ZSB3aGVuIG5lZWRlZA0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgICpEYXRh U2l6ZSA9IFNtbVZhcmlhYmxlSGVhZGVyLT5EYXRhU2l6ZTsNCj4gPiAgICAgPiArICB9DQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgIGlmIChBdHRyaWJ1dGVzICE9IE5VTEwpIHsNCj4gPiAgICAg PiArICAgICpBdHRyaWJ1dGVzID0gU21tVmFyaWFibGVIZWFkZXItPkF0dHJpYnV0ZXM7DQo+ID4g ICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ID4gICAgID4gKyAgICBnb3RvIERvbmU7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArICBpZiAoRGF0YSAhPSBOVUxMKSB7DQo+ID4gICAgID4gKyAgICBD b3B5TWVtIChEYXRhLCAoVUlOVDggKilTbW1WYXJpYWJsZUhlYWRlci0+TmFtZSArDQo+ID4gICAg ID4gU21tVmFyaWFibGVIZWFkZXItPk5hbWVTaXplLCBTbW1WYXJpYWJsZUhlYWRlci0+RGF0YVNp emUpOw0KPiA+ICAgICA+ICsgIH0gZWxzZSB7DQo+ID4gICAgID4gKyAgICBTdGF0dXMgPSBFRklf SU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArRG9uZToNCj4gPiAgICAgPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICAgICA+ICt9DQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBUaGlzIGNvZGUgZmluZHMgdmFy aWFibGUgaW4gc3RvcmFnZSBibG9ja3MgKFZvbGF0aWxlIG9yIE5vbi1Wb2xhdGlsZSkuDQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgIENhdXRpb246IFRoaXMgZnVuY3Rpb24gbWF5IHJlY2VpdmUg dW50cnVzdGVkIGlucHV0Lg0KPiA+ICAgICA+ICsgIFRoZSBkYXRhIHNpemUgaXMgZXh0ZXJuYWwg aW5wdXQsIHNvIHRoaXMgZnVuY3Rpb24gd2lsbCB2YWxpZGF0ZSBpdCBjYXJlZnVsbHkgdG8NCj4g PiAgICAgPiBhdm9pZCBidWZmZXIgb3ZlcmZsb3cuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsg IEBwYXJhbVtpbl0gICAgICBWYXJpYWJsZU5hbWUgICAgICAgTmFtZSBvZiBWYXJpYWJsZSB0byBi ZSBmb3VuZC4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dICAgICAgVmVuZG9yR3VpZCAgICAgICAg IFZhcmlhYmxlIHZlbmRvciBHVUlELg0KPiA+ICAgICA+ICsgIEBwYXJhbVtvdXRdICAgICBBdHRy aWJ1dGVzICAgICAgICAgQXR0cmlidXRlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBmb3VuZC4NCj4g PiAgICAgPiArICBAcGFyYW1baW4sIG91dF0gRGF0YVNpemUgICAgICAgICAgIFNpemUgb2YgRGF0 YSBmb3VuZC4gSWYgc2l6ZSBpcyBsZXNzIHRoYW4gdGhlDQo+ID4gICAgID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLCB0aGlzIHZhbHVlIGNvbnRhaW5zIHRoZSBy ZXF1aXJlZCBzaXplLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtvdXRdICAgICBEYXRhICAgICAgICAg ICAgICAgRGF0YSBwb2ludGVyLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcmV0dmFsIEVG SV9JTlZBTElEX1BBUkFNRVRFUiAgICAgIEludmFsaWQgcGFyYW1ldGVyLg0KPiA+ICAgICA+ICsg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgRmluZCB0aGUgc3BlY2lmaWVkIHZh cmlhYmxlLg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICAgICAg Tm90IGZvdW5kLg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX0JVRkZFUl9UT19TTUFMTCAgICAg ICAgRGF0YVNpemUgaXMgdG9vIHNtYWxsIGZvciB0aGUgcmVzdWx0Lg0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArKiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4gPiAgICAgPiArRUZJQVBJDQo+ ID4gICAgID4gK1J1bnRpbWVTZXJ2aWNlR2V0VmFyaWFibGUgKA0KPiA+ICAgICA+ICsgIElOICAg ICAgQ0hBUjE2ICAgICpWYXJpYWJsZU5hbWUsDQo+ID4gICAgID4gKyAgSU4gICAgICBFRklfR1VJ RCAgKlZlbmRvckd1aWQsDQo+ID4gICAgID4gKyAgT1VUICAgICBVSU5UMzIgICAgKkF0dHJpYnV0 ZXMgT1BUSU9OQUwsDQo+ID4gICAgID4gKyAgSU4gT1VUICBVSU5UTiAgICAgKkRhdGFTaXplLA0K PiA+ICAgICA+ICsgIE9VVCAgICAgVk9JRCAgICAgICpEYXRhDQo+ID4gICAgID4gKyAgKQ0KPiA+ ICAgICA+ICt7DQo+ID4gICAgID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArICBpZiAoKFZhcmlhYmxlTmFtZSA9PSBOVUxMKSB8fCAoVmVuZG9yR3VpZCA9 PSBOVUxMKSB8fCAoRGF0YVNpemUgPT0NCj4gPiBOVUxMKSkgew0KPiA+ICAgICA+ICsgICAgcmV0 dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIGlmIChWYXJpYWJsZU5hbWVbMF0gPT0gMCkgew0KPiA+ICAgICA+ICsgICAg cmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICBBY3F1aXJlTG9ja09ubHlBdEJvb3RUaW1lICgmbVZhcmlhYmxlU2VydmljZXNMb2Nr KTsNCj4gPiAgICAgPiArICBpZiAoRmVhdHVyZVBjZEdldCAoUGNkRW5hYmxlVmFyaWFibGVSdW50 aW1lQ2FjaGUpKSB7DQo+ID4gICAgID4gKyAgICBTdGF0dXMgPSBGaW5kVmFyaWFibGVJblJ1bnRp bWVDYWNoZSAoVmFyaWFibGVOYW1lLCBWZW5kb3JHdWlkLA0KPiA+IEF0dHJpYnV0ZXMsDQo+ID4g ICAgID4gRGF0YVNpemUsIERhdGEpOw0KPiA+ICAgICA+ICsgIH0gZWxzZSB7DQo+ID4gICAgID4g KyAgICBTdGF0dXMgPSBGaW5kVmFyaWFibGVJblNtbSAoVmFyaWFibGVOYW1lLCBWZW5kb3JHdWlk LCBBdHRyaWJ1dGVzLA0KPiA+IERhdGFTaXplLA0KPiA+ICAgICA+IERhdGEpOw0KPiA+ICAgICA+ ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgUmVsZWFzZUxvY2tPbmx5QXRCb290VGlt ZSAoJm1WYXJpYWJsZVNlcnZpY2VzTG9jayk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIHJl dHVybiBTdGF0dXM7DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0K PiA+ICAgICA+ICsgIEZpbmRzIHRoZSBuZXh0IGF2YWlsYWJsZSB2YXJpYWJsZSBpbiBhIHJ1bnRp bWUgY2FjaGUgdmFyaWFibGUgc3RvcmUuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJh bVtpbiwgb3V0XSBWYXJpYWJsZU5hbWVTaXplICAgU2l6ZSBvZiB0aGUgdmFyaWFibGUgbmFtZS4N Cj4gPiAgICAgPiArICBAcGFyYW1baW4sIG91dF0gVmFyaWFibGVOYW1lICAgICAgIFBvaW50ZXIg dG8gdmFyaWFibGUgbmFtZS4NCj4gPiAgICAgPiArICBAcGFyYW1baW4sIG91dF0gVmVuZG9yR3Vp ZCAgICAgICAgIFZhcmlhYmxlIFZlbmRvciBHdWlkLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr ICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgICAgIEludmFsaWQgcGFyYW1ldGVyLg0K PiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgRmluZCB0aGUg c3BlY2lmaWVkIHZhcmlhYmxlLg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAg ICAgICAgICAgICAgTm90IGZvdW5kLg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX0JVRkZFUl9U T19TTUFMTCAgICAgICAgRGF0YVNpemUgaXMgdG9vIHNtYWxsIGZvciB0aGUgcmVzdWx0Lg0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4gPiAgICAg PiArR2V0TmV4dFZhcmlhYmxlTmFtZUluUnVudGltZUNhY2hlICgNCj4gPiAgICAgPiArICBJTiBP VVQgIFVJTlROICAgICAqVmFyaWFibGVOYW1lU2l6ZSwNCj4gPiAgICAgPiArICBJTiBPVVQgIENI QVIxNiAgICAqVmFyaWFibGVOYW1lLA0KPiA+ICAgICA+ICsgIElOIE9VVCAgRUZJX0dVSUQgICpW ZW5kb3JHdWlkDQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgRUZJ X1NUQVRVUyAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gICAgID4gKyAgVUlOVE4gICAgICAgICAg ICAgICAgICBWYXJOYW1lU2l6ZTsNCj4gPiAgICAgPiArICBWQVJJQUJMRV9IRUFERVIgICAgICAg ICpWYXJpYWJsZVB0cjsNCj4gPiAgICAgPiArICBWQVJJQUJMRV9TVE9SRV9IRUFERVINCj4gPiAq VmFyaWFibGVTdG9yZUhlYWRlcltWYXJpYWJsZVN0b3JlVHlwZU1heF07DQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIFN0YXR1cyA9IEVGSV9OT1RfRk9VTkQ7DQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gVGhlIFVFRkkgc3BlY2lmaWNhdGlvbiByZXN0cmlj dHMgUnVudGltZSBTZXJ2aWNlcyBjYWxsZXJzIGZyb20gaW52b2tpbmcNCj4gPiB0aGUNCj4gPiAg ICAgPiBzYW1lIG9yIGNlcnRhaW4gb3RoZXIgUnVudGltZSBTZXJ2aWNlDQo+ID4gICAgID4gKyAg Ly8gZnVuY3Rpb25zIHByaW9yIHRvIGNvbXBsZXRpb24gYW5kIHJldHVybiBmcm9tIGEgcHJldmlv dXMgUnVudGltZQ0KPiA+IFNlcnZpY2UNCj4gPiAgICAgPiBjYWxsLiBUaGVzZSByZXN0cmljdGlv bnMgcHJldmVudA0KPiA+ICAgICA+ICsgIC8vIGEgR2V0VmFyaWFibGUgKCkgb3IgR2V0TmV4dFZh cmlhYmxlICgpIGNhbGwgZnJvbSBiZWluZyBpc3N1ZWQgdW50aWwgYQ0KPiBwcmlvcg0KPiA+IGNh bGwNCj4gPiAgICAgPiBoYXMgcmV0dXJuZWQuIFRoZSBydW50aW1lDQo+ID4gICAgID4gKyAgLy8g Y2FjaGUgcmVhZCBsb2NrIHNob3VsZCBhbHdheXMgYmUgZnJlZSB3aGVuIGVudGVyaW5nIHRoaXMg ZnVuY3Rpb24uDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBBU1NFUlQgKCFtVmFyaWFi bGVSdW50aW1lQ2FjaGVSZWFkTG9jayk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIENoZWNr Rm9yUnVudGltZUNhY2hlU3luYyAoKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgbVZhcmlh YmxlUnVudGltZUNhY2hlUmVhZExvY2sgPSBUUlVFOw0KPiA+ICAgICA+ICsgIGlmICghbVZhcmlh YmxlUnVudGltZUNhY2hlUGVuZGluZ1VwZGF0ZSkgew0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAg ICAgPiArICAgIC8vIDA6IFZvbGF0aWxlLCAxOiBIT0IsIDI6IE5vbi1Wb2xhdGlsZS4NCj4gPiAg ICAgPiArICAgIC8vIFRoZSBpbmRleCBhbmQgYXR0cmlidXRlcyBtYXBwaW5nIG11c3QgYmUga2Vw dCBpbiB0aGlzIG9yZGVyIGFzDQo+ID4gICAgID4gRmluZFZhcmlhYmxlDQo+ID4gICAgID4gKyAg ICAvLyBtYWtlcyB1c2Ugb2YgdGhpcyBtYXBwaW5nIHRvIGltcGxlbWVudCBzZWFyY2ggYWxnb3Jp dGhtLg0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIFZhcmlhYmxlU3RvcmVIZWFk ZXJbVmFyaWFibGVTdG9yZVR5cGVWb2xhdGlsZV0gPQ0KPiA+ICAgICA+IG1WYXJpYWJsZVJ1bnRp bWVWb2xhdGlsZUNhY2hlQnVmZmVyOw0KPiA+ICAgICA+ICsgICAgVmFyaWFibGVTdG9yZUhlYWRl cltWYXJpYWJsZVN0b3JlVHlwZUhvYl0gICAgICA9DQo+ID4gICAgID4gbVZhcmlhYmxlUnVudGlt ZUhvYkNhY2hlQnVmZmVyOw0KPiA+ICAgICA+ICsgICAgVmFyaWFibGVTdG9yZUhlYWRlcltWYXJp YWJsZVN0b3JlVHlwZU52XSAgICAgICA9DQo+ID4gICAgID4gbVZhcmlhYmxlUnVudGltZU52Q2Fj aGVCdWZmZXI7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgICAgU3RhdHVzID0gIFZhcmlhYmxl U2VydmljZUdldE5leHRWYXJpYWJsZUludGVybmFsICgNCj4gPiAgICAgPiArICAgICAgICAgICAg ICAgIFZhcmlhYmxlTmFtZSwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgIFZlbmRvckd1aWQs DQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICBWYXJpYWJsZVN0b3JlSGVhZGVyLA0KPiA+ICAg ICA+ICsgICAgICAgICAgICAgICAgJlZhcmlhYmxlUHRyLA0KPiA+ICAgICA+ICsgICAgICAgICAg ICAgICAgbVZhcmlhYmxlQXV0aEZvcm1hdA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgKTsN Cj4gPiAgICAgPiArICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAgID4gKyAg ICAgIFZhck5hbWVTaXplID0gTmFtZVNpemVPZlZhcmlhYmxlIChWYXJpYWJsZVB0ciwNCj4gPiBt VmFyaWFibGVBdXRoRm9ybWF0KTsNCj4gPiAgICAgPiArICAgICAgQVNTRVJUIChWYXJOYW1lU2l6 ZSAhPSAwKTsNCj4gPiAgICAgPiArICAgICAgaWYgKFZhck5hbWVTaXplIDw9ICpWYXJpYWJsZU5h bWVTaXplKSB7DQo+ID4gICAgID4gKyAgICAgICAgQ29weU1lbSAoVmFyaWFibGVOYW1lLCBHZXRW YXJpYWJsZU5hbWVQdHIgKFZhcmlhYmxlUHRyLA0KPiA+ICAgICA+IG1WYXJpYWJsZUF1dGhGb3Jt YXQpLCBWYXJOYW1lU2l6ZSk7DQo+ID4gICAgID4gKyAgICAgICAgQ29weU1lbSAoVmVuZG9yR3Vp ZCwgR2V0VmVuZG9yR3VpZFB0ciAoVmFyaWFibGVQdHIsDQo+ID4gICAgID4gbVZhcmlhYmxlQXV0 aEZvcm1hdCksIHNpemVvZiAoRUZJX0dVSUQpKTsNCj4gPiAgICAgPiArICAgICAgICBTdGF0dXMg PSBFRklfU1VDQ0VTUzsNCj4gPiAgICAgPiArICAgICAgfSBlbHNlIHsNCj4gPiAgICAgPiArICAg ICAgICBTdGF0dXMgPSBFRklfQlVGRkVSX1RPT19TTUFMTDsNCj4gPiAgICAgPiArICAgICAgfQ0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAgICAgKlZhcmlhYmxlTmFtZVNpemUgPSBWYXJOYW1l U2l6ZTsNCj4gPiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsgIG1WYXJpYWJsZVJ1bnRpbWVDYWNoZVJlYWRMb2NrID0gRkFMU0U7DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gICAgID4gK30NCj4gPiAgICAg PiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIEZpbmRzIHRoZSBuZXh0IGF2YWlsYWJs ZSB2YXJpYWJsZSBpbiBhIFNNTSB2YXJpYWJsZSBzdG9yZS4NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgQHBhcmFtW2luLCBvdXRdIFZhcmlhYmxlTmFtZVNpemUgICBTaXplIG9mIHRoZSB2YXJp YWJsZSBuYW1lLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbiwgb3V0XSBWYXJpYWJsZU5hbWUgICAg ICAgUG9pbnRlciB0byB2YXJpYWJsZSBuYW1lLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbiwgb3V0 XSBWZW5kb3JHdWlkICAgICAgICAgVmFyaWFibGUgVmVuZG9yIEd1aWQuDQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgICAgSW52YWxpZCBw YXJhbWV0ZXIuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAg ICBGaW5kIHRoZSBzcGVjaWZpZWQgdmFyaWFibGUuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklf Tk9UX0ZPVU5EICAgICAgICAgICAgICBOb3QgZm91bmQuDQo+ID4gICAgID4gKyAgQHJldHZhbCBF RklfQlVGRkVSX1RPX1NNQUxMICAgICAgICBEYXRhU2l6ZSBpcyB0b28gc21hbGwgZm9yIHRoZSBy ZXN1bHQuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX1NUQVRV Uw0KPiA+ICAgICA+ICtHZXROZXh0VmFyaWFibGVOYW1lSW5TbW0gKA0KPiA+ICAgICA+ICsgIElO IE9VVCAgVUlOVE4gICAgICpWYXJpYWJsZU5hbWVTaXplLA0KPiA+ICAgICA+ICsgIElOIE9VVCAg Q0hBUjE2ICAgICpWYXJpYWJsZU5hbWUsDQo+ID4gICAgID4gKyAgSU4gT1VUICBFRklfR1VJRCAg KlZlbmRvckd1aWQNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBF RklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0K PiA+ICAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQYXlsb2FkU2l6ZTsNCj4gPiAgICAgPiArICBTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVf R0VUX05FWFRfVkFSSUFCTEVfTkFNRQ0KPiA+ICAgICA+ICpTbW1HZXROZXh0VmFyaWFibGVOYW1l Ow0KPiA+ICAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRWYXJpYWJsZU5hbWVTaXplOw0KPiA+ICAgICA+ICsgIFVJTlROICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJblZhcmlhYmxlTmFtZVNpemU7DQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIE91dFZhcmlhYmxlTmFtZVNpemUgICAgPSAqVmFyaWFi bGVOYW1lU2l6ZTsNCj4gPiAgICAgPiArICBJblZhcmlhYmxlTmFtZVNpemUgICAgID0gU3RyU2l6 ZSAoVmFyaWFibGVOYW1lKTsNCj4gPiAgICAgPiArICBTbW1HZXROZXh0VmFyaWFibGVOYW1lID0g TlVMTDsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBJZiBp bnB1dCBzdHJpbmcgZXhjZWVkcyBTTU0gcGF5bG9hZCBsaW1pdC4gUmV0dXJuIGZhaWx1cmUNCj4g PiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIGlmIChJblZhcmlhYmxlTmFtZVNpemUgPiBtVmFy aWFibGVCdWZmZXJQYXlsb2FkU2l6ZSAtIE9GRlNFVF9PRg0KPiA+ICAgICA+IChTTU1fVkFSSUFC TEVfQ09NTVVOSUNBVEVfR0VUX05FWFRfVkFSSUFCTEVfTkFNRSwgTmFtZSkpDQo+IHsNCj4gPiAg ICAgPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gICAgID4gKyAgfQ0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIEluaXQgdGhlIGNv bW11bmljYXRlIGJ1ZmZlci4gVGhlIGJ1ZmZlciBkYXRhIHNpemUgaXM6DQo+ID4gICAgID4gKyAg Ly8gU01NX0NPTU1VTklDQVRFX0hFQURFUl9TSVpFICsNCj4gPiAgICAgPiBTTU1fVkFSSUFCTEVf Q09NTVVOSUNBVEVfSEVBREVSX1NJWkUgKyBQYXlsb2FkU2l6ZS4NCj4gPiAgICAgPiArICAvLw0K PiA+ICAgICA+ICsgIGlmIChPdXRWYXJpYWJsZU5hbWVTaXplID4gbVZhcmlhYmxlQnVmZmVyUGF5 bG9hZFNpemUgLSBPRkZTRVRfT0YNCj4gPiAgICAgPiAoU01NX1ZBUklBQkxFX0NPTU1VTklDQVRF X0dFVF9ORVhUX1ZBUklBQkxFX05BTUUsIE5hbWUpKQ0KPiB7DQo+ID4gICAgID4gKyAgICAvLw0K PiA+ICAgICA+ICsgICAgLy8gSWYgb3V0cHV0IGJ1ZmZlciBleGNlZWQgU01NIHBheWxvYWQgbGlt aXQuIFRyaW0gb3V0cHV0IGJ1ZmZlciB0bw0KPiBTTU0NCj4gPiAgICAgPiBwYXlsb2FkIHNpemUN Cj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICBPdXRWYXJpYWJsZU5hbWVTaXplID0g bVZhcmlhYmxlQnVmZmVyUGF5bG9hZFNpemUgLSBPRkZTRVRfT0YNCj4gPiAgICAgPiAoU01NX1ZB UklBQkxFX0NPTU1VTklDQVRFX0dFVF9ORVhUX1ZBUklBQkxFX05BTUUsIE5hbWUpOw0KPiA+ICAg ICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBQ YXlsb2FkIHNob3VsZCBiZSBHdWlkICsgTmFtZVNpemUgKyBNQVggb2YgSW5wdXQgJiBPdXRwdXQg YnVmZmVyDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBQYXlsb2FkU2l6ZSA9IE9GRlNF VF9PRg0KPiA+ICAgICA+IChTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfR0VUX05FWFRfVkFSSUFC TEVfTkFNRSwgTmFtZSkgKw0KPiA+IE1BWA0KPiA+ICAgICA+IChPdXRWYXJpYWJsZU5hbWVTaXpl LCBJblZhcmlhYmxlTmFtZVNpemUpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBTdGF0dXMg PSBJbml0Q29tbXVuaWNhdGVCdWZmZXIgKChWT0lEICoqKSZTbW1HZXROZXh0VmFyaWFibGVOYW1l LA0KPiA+ICAgICA+IFBheWxvYWRTaXplLCBTTU1fVkFSSUFCTEVfRlVOQ1RJT05fR0VUX05FWFRf VkFSSUFCTEVfTkFNRSk7DQo+ID4gICAgID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiA+ICAgICA+ICsgICAgZ290byBEb25lOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgQVNTRVJUIChTbW1HZXROZXh0VmFyaWFibGVOYW1lICE9IE5VTEwpOw0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIFNNTSBjb21tIGJ1ZmZl ci0+TmFtZVNpemUgaXMgYnVmZmVyIHNpemUgZm9yIHJldHVybiBzdHJpbmcNCj4gPiAgICAgPiAr ICAvLw0KPiA+ICAgICA+ICsgIFNtbUdldE5leHRWYXJpYWJsZU5hbWUtPk5hbWVTaXplID0gT3V0 VmFyaWFibGVOYW1lU2l6ZTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQ29weUd1aWQgKCZT bW1HZXROZXh0VmFyaWFibGVOYW1lLT5HdWlkLCBWZW5kb3JHdWlkKTsNCj4gPiAgICAgPiArICAv Lw0KPiA+ICAgICA+ICsgIC8vIENvcHkgd2hvbGUgc3RyaW5nDQo+ID4gICAgID4gKyAgLy8NCj4g PiAgICAgPiArICBDb3B5TWVtIChTbW1HZXROZXh0VmFyaWFibGVOYW1lLT5OYW1lLCBWYXJpYWJs ZU5hbWUsDQo+ID4gICAgID4gSW5WYXJpYWJsZU5hbWVTaXplKTsNCj4gPiAgICAgPiArICBpZiAo T3V0VmFyaWFibGVOYW1lU2l6ZSA+IEluVmFyaWFibGVOYW1lU2l6ZSkgew0KPiA+ICAgICA+ICsg ICAgWmVyb01lbSAoKFVJTlQ4ICopU21tR2V0TmV4dFZhcmlhYmxlTmFtZS0+TmFtZSArDQo+ID4g ICAgID4gSW5WYXJpYWJsZU5hbWVTaXplLCBPdXRWYXJpYWJsZU5hbWVTaXplIC0gSW5WYXJpYWJs ZU5hbWVTaXplKTsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8v DQo+ID4gICAgID4gKyAgLy8gU2VuZCBkYXRhIHRvIFNNTQ0KPiA+ICAgICA+ICsgIC8vDQo+ID4g ICAgID4gKyAgU3RhdHVzID0gU2VuZENvbW11bmljYXRlQnVmZmVyIChQYXlsb2FkU2l6ZSk7DQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gR2V0IGRhdGEgZnJv bSBTTU0uDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBpZiAoKFN0YXR1cyA9PSBFRklf U1VDQ0VTUykgfHwgKFN0YXR1cyA9PSBFRklfQlVGRkVSX1RPT19TTUFMTCkpIHsNCj4gPiAgICAg PiArICAgIC8vDQo+ID4gICAgID4gKyAgICAvLyBTTU0gQ29tbUJ1ZmZlciBOYW1lU2l6ZSBjYW4g YmUgYSB0cmltZWQgdmFsdWUNCj4gPiAgICAgPiArICAgIC8vIE9ubHkgdXBkYXRlIFZhcmlhYmxl TmFtZVNpemUgd2hlbiBuZWVkZWQNCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAgID4gKyAgICAq VmFyaWFibGVOYW1lU2l6ZSA9IFNtbUdldE5leHRWYXJpYWJsZU5hbWUtPk5hbWVTaXplOw0KPiA+ ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiA+ICAgICA+ICsgICAgZ290byBEb25lOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKyAgQ29weUd1aWQgKFZlbmRvckd1aWQsICZTbW1HZXROZXh0VmFy aWFibGVOYW1lLT5HdWlkKTsNCj4gPiAgICAgPiArICBDb3B5TWVtIChWYXJpYWJsZU5hbWUsIFNt bUdldE5leHRWYXJpYWJsZU5hbWUtPk5hbWUsDQo+ID4gICAgID4gU21tR2V0TmV4dFZhcmlhYmxl TmFtZS0+TmFtZVNpemUpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArRG9uZToNCj4gPiAgICAg PiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsvKioNCj4gPiAgICAgPiArICBUaGlzIGNvZGUgRmluZHMgdGhlIE5leHQgYXZhaWxhYmxlIHZh cmlhYmxlLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1baW4sIG91dF0gVmFyaWFi bGVOYW1lU2l6ZSAgIFNpemUgb2YgdGhlIHZhcmlhYmxlIG5hbWUuDQo+ID4gICAgID4gKyAgQHBh cmFtW2luLCBvdXRdIFZhcmlhYmxlTmFtZSAgICAgICBQb2ludGVyIHRvIHZhcmlhYmxlIG5hbWUu DQo+ID4gICAgID4gKyAgQHBhcmFtW2luLCBvdXRdIFZlbmRvckd1aWQgICAgICAgICBWYXJpYWJs ZSBWZW5kb3IgR3VpZC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfSU5W QUxJRF9QQVJBTUVURVIgICAgICBJbnZhbGlkIHBhcmFtZXRlci4NCj4gPiAgICAgPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgIEZpbmQgdGhlIHNwZWNpZmllZCB2YXJpYWJs ZS4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgICAgIE5vdCBm b3VuZC4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9CVUZGRVJfVE9fU01BTEwgICAgICAgIERh dGFTaXplIGlzIHRvbyBzbWFsbCBmb3IgdGhlIHJlc3VsdC4NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyoqLw0KPiA+ICAgICA+ICtFRklfU1RBVFVTDQo+ID4gICAgID4gK0VGSUFQSQ0KPiA+ICAg ICA+ICtSdW50aW1lU2VydmljZUdldE5leHRWYXJpYWJsZU5hbWUgKA0KPiA+ICAgICA+ICsgIElO IE9VVCAgVUlOVE4gICAgICpWYXJpYWJsZU5hbWVTaXplLA0KPiA+ICAgICA+ICsgIElOIE9VVCAg Q0hBUjE2ICAgICpWYXJpYWJsZU5hbWUsDQo+ID4gICAgID4gKyAgSU4gT1VUICBFRklfR1VJRCAg KlZlbmRvckd1aWQNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBF RklfU1RBVFVTICBTdGF0dXM7DQo+ID4gICAgID4gKyAgVUlOVE4gICAgICAgTWF4TGVuOw0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICBTdGF0dXMgPSBFRklfTk9UX0ZPVU5EOw0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArICBpZiAoKFZhcmlhYmxlTmFtZVNpemUgPT0gTlVMTCkgfHwgKFZhcmlh YmxlTmFtZSA9PSBOVUxMKSB8fA0KPiA+IChWZW5kb3JHdWlkID09DQo+ID4gICAgID4gTlVMTCkp IHsNCj4gPiAgICAgPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gICAg ID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIENh bGN1bGF0ZSB0aGUgcG9zc2libGUgbWF4aW11bSBsZW5ndGggb2YgbmFtZSBzdHJpbmcsIGluY2x1 ZGluZyB0aGUNCj4gPiBOdWxsDQo+ID4gICAgID4gdGVybWluYXRvci4NCj4gPiAgICAgPiArICAv Lw0KPiA+ICAgICA+ICsgIE1heExlbiA9ICpWYXJpYWJsZU5hbWVTaXplIC8gc2l6ZW9mIChDSEFS MTYpOw0KPiA+ICAgICA+ICsgIGlmICgoTWF4TGVuID09IDApIHx8IChTdHJuTGVuUyAoVmFyaWFi bGVOYW1lLCBNYXhMZW4pID09IE1heExlbikpIHsNCj4gPiAgICAgPiArICAgIC8vDQo+ID4gICAg ID4gKyAgICAvLyBOdWxsLXRlcm1pbmF0b3IgaXMgbm90IGZvdW5kIGluIHRoZSBmaXJzdCBWYXJp YWJsZU5hbWVTaXplIGJ5dGVzIG9mDQo+IHRoZQ0KPiA+ICAgICA+IGlucHV0IFZhcmlhYmxlTmFt ZSBidWZmZXIsDQo+ID4gICAgID4gKyAgICAvLyBmb2xsb3cgc3BlYyB0byByZXR1cm4gRUZJX0lO VkFMSURfUEFSQU1FVEVSLg0KPiA+ICAgICA+ICsgICAgLy8NCj4gPiAgICAgPiArICAgIHJldHVy biBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICBBY3F1aXJlTG9ja09ubHlBdEJvb3RUaW1lICgmbVZhcmlhYmxlU2VydmljZXNM b2NrKTsNCj4gPiAgICAgPiArICBpZiAoRmVhdHVyZVBjZEdldCAoUGNkRW5hYmxlVmFyaWFibGVS dW50aW1lQ2FjaGUpKSB7DQo+ID4gICAgID4gKyAgICBTdGF0dXMgPSBHZXROZXh0VmFyaWFibGVO YW1lSW5SdW50aW1lQ2FjaGUgKFZhcmlhYmxlTmFtZVNpemUsDQo+ID4gICAgID4gVmFyaWFibGVO YW1lLCBWZW5kb3JHdWlkKTsNCj4gPiAgICAgPiArICB9IGVsc2Ugew0KPiA+ICAgICA+ICsgICAg U3RhdHVzID0gR2V0TmV4dFZhcmlhYmxlTmFtZUluU21tIChWYXJpYWJsZU5hbWVTaXplLA0KPiBW YXJpYWJsZU5hbWUsDQo+ID4gICAgID4gVmVuZG9yR3VpZCk7DQo+ID4gICAgID4gKyAgfQ0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICBSZWxlYXNlTG9ja09ubHlBdEJvb3RUaW1lICgmbVZhcmlh YmxlU2VydmljZXNMb2NrKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgcmV0dXJuIFN0YXR1 czsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4g KyAgVGhpcyBjb2RlIHNldHMgdmFyaWFibGUgaW4gc3RvcmFnZSBibG9ja3MgKFZvbGF0aWxlIG9y IE5vbi1Wb2xhdGlsZSkuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIENhdXRpb246IFRoaXMg ZnVuY3Rpb24gbWF5IHJlY2VpdmUgdW50cnVzdGVkIGlucHV0Lg0KPiA+ICAgICA+ICsgIFRoZSBk YXRhIHNpemUgYW5kIGRhdGEgYXJlIGV4dGVybmFsIGlucHV0LCBzbyB0aGlzIGZ1bmN0aW9uIHdp bGwgdmFsaWRhdGUgaXQNCj4gPiAgICAgPiBjYXJlZnVsbHkgdG8gYXZvaWQgYnVmZmVyIG92ZXJm bG93Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1baW5dIFZhcmlhYmxlTmFtZSAg ICAgICAgICAgICAgICAgTmFtZSBvZiBWYXJpYWJsZSB0byBiZSBmb3VuZC4NCj4gPiAgICAgPiAr ICBAcGFyYW1baW5dIFZlbmRvckd1aWQgICAgICAgICAgICAgICAgICAgVmFyaWFibGUgdmVuZG9y IEdVSUQuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBBdHRyaWJ1dGVzICAgICAgICAgICAgICAg ICAgIEF0dHJpYnV0ZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgZm91bmQNCj4gPiAgICAgPiArICBA cGFyYW1baW5dIERhdGFTaXplICAgICAgICAgICAgICAgICAgICAgU2l6ZSBvZiBEYXRhIGZvdW5k LiBJZiBzaXplIGlzIGxlc3MgdGhhbg0KPiB0aGUNCj4gPiAgICAgPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgdGhpcyB2YWx1ZSBjb250YWlucyB0aGUg cmVxdWlyZWQgc2l6ZS4NCj4gPiAgICAgPiArICBAcGFyYW1baW5dIERhdGEgICAgICAgICAgICAg ICAgICAgICAgICAgRGF0YSBwb2ludGVyLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcmV0 dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgICAgICAgICAgSW52YWxpZCBwYXJhbWV0ZXIuDQo+ ID4gICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIFNldCBz dWNjZXNzZnVsbHkuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAg ICAgICAgICAgIFJlc291cmNlIG5vdCBlbm91Z2ggdG8gc2V0DQo+ID4gdmFyaWFibGUuDQo+ID4g ICAgID4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgICAgICAgICAgIE5vdCBmb3Vu ZC4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9XUklURV9QUk9URUNURUQgICAgICAgICAgICAg VmFyaWFibGUgaXMgcmVhZC1vbmx5Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4g ICAgID4gK0VGSV9TVEFUVVMNCj4gPiAgICAgPiArRUZJQVBJDQo+ID4gICAgID4gK1J1bnRpbWVT ZXJ2aWNlU2V0VmFyaWFibGUgKA0KPiA+ICAgICA+ICsgIElOIENIQVIxNiAgICAqVmFyaWFibGVO YW1lLA0KPiA+ICAgICA+ICsgIElOIEVGSV9HVUlEICAqVmVuZG9yR3VpZCwNCj4gPiAgICAgPiAr ICBJTiBVSU5UMzIgICAgQXR0cmlidXRlcywNCj4gPiAgICAgPiArICBJTiBVSU5UTiAgICAgRGF0 YVNpemUsDQo+ID4gICAgID4gKyAgSU4gVk9JRCAgICAgICpEYXRhDQo+ID4gICAgID4gKyAgKQ0K PiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgU3RhdHVzOw0KPiA+ICAgICA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFBheWxvYWRTaXplOw0KPiA+ICAgICA+ICsgIFNNTV9WQVJJQUJM RV9DT01NVU5JQ0FURV9BQ0NFU1NfVkFSSUFCTEUNCj4gPiAqU21tVmFyaWFibGVIZWFkZXI7DQo+ ID4gICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFy aWFibGVOYW1lU2l6ZTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiAr ICAvLyBDaGVjayBpbnB1dCBwYXJhbWV0ZXJzLg0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4g KyAgaWYgKChWYXJpYWJsZU5hbWUgPT0gTlVMTCkgfHwgKFZhcmlhYmxlTmFtZVswXSA9PSAwKSB8 fCAoVmVuZG9yR3VpZA0KPiA9PQ0KPiA+ICAgICA+IE5VTEwpKSB7DQo+ID4gICAgID4gKyAgICBy ZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyAgaWYgKChEYXRhU2l6ZSAhPSAwKSAmJiAoRGF0YSA9PSBOVUxMKSkgew0K PiA+ICAgICA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiAgICAgPiAr ICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFZhcmlhYmxlTmFtZVNpemUgID0gU3RyU2l6 ZSAoVmFyaWFibGVOYW1lKTsNCj4gPiAgICAgPiArICBTbW1WYXJpYWJsZUhlYWRlciA9IE5VTEw7 DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gSWYgVmFyaWFi bGVOYW1lIG9yIERhdGFTaXplIGV4Y2VlZHMgU01NIHBheWxvYWQgbGltaXQuIFJldHVybg0KPiBm YWlsdXJlDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBpZiAoKFZhcmlhYmxlTmFtZVNp emUgPiBtVmFyaWFibGVCdWZmZXJQYXlsb2FkU2l6ZSAtIE9GRlNFVF9PRg0KPiA+ICAgICA+IChT TU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfQUNDRVNTX1ZBUklBQkxFLCBOYW1lKSkgfHwNCj4gPiAg ICAgPiArICAgICAgKERhdGFTaXplID4gbVZhcmlhYmxlQnVmZmVyUGF5bG9hZFNpemUgLSBPRkZT RVRfT0YNCj4gPiAgICAgPiAoU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0FDQ0VTU19WQVJJQUJM RSwgTmFtZSkgLQ0KPiA+ICAgICA+IFZhcmlhYmxlTmFtZVNpemUpKQ0KPiA+ICAgICA+ICsgIHsN Cj4gPiAgICAgPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gICAgID4g KyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBBY3F1aXJlTG9ja09ubHlBdEJvb3RUaW1l ICgmbVZhcmlhYmxlU2VydmljZXNMb2NrKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8N Cj4gPiAgICAgPiArICAvLyBJbml0IHRoZSBjb21tdW5pY2F0ZSBidWZmZXIuIFRoZSBidWZmZXIg ZGF0YSBzaXplIGlzOg0KPiA+ICAgICA+ICsgIC8vIFNNTV9DT01NVU5JQ0FURV9IRUFERVJfU0la RSArDQo+ID4gICAgID4gU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0hFQURFUl9TSVpFICsgUGF5 bG9hZFNpemUuDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICBQYXlsb2FkU2l6ZSA9IE9G RlNFVF9PRg0KPiA+ICAgICA+IChTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfQUNDRVNTX1ZBUklB QkxFLCBOYW1lKSArDQo+ID4gICAgID4gVmFyaWFibGVOYW1lU2l6ZSArIERhdGFTaXplOw0KPiA+ ICAgICA+ICsgIFN0YXR1cyAgICAgID0gSW5pdENvbW11bmljYXRlQnVmZmVyICgoVk9JRCAqKikm U21tVmFyaWFibGVIZWFkZXIsDQo+ID4gICAgID4gUGF5bG9hZFNpemUsIFNNTV9WQVJJQUJMRV9G VU5DVElPTl9TRVRfVkFSSUFCTEUpOw0KPiA+ICAgICA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4gPiAgICAgPiArICAgIGdvdG8gRG9uZTsNCj4gPiAgICAgPiArICB9DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgIEFTU0VSVCAoU21tVmFyaWFibGVIZWFkZXIgIT0gTlVMTCk7DQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIENvcHlHdWlkICgoRUZJX0dVSUQgKikmU21tVmFyaWFi bGVIZWFkZXItPkd1aWQsIFZlbmRvckd1aWQpOw0KPiA+ICAgICA+ICsgIFNtbVZhcmlhYmxlSGVh ZGVyLT5EYXRhU2l6ZSAgID0gRGF0YVNpemU7DQo+ID4gICAgID4gKyAgU21tVmFyaWFibGVIZWFk ZXItPk5hbWVTaXplICAgPSBWYXJpYWJsZU5hbWVTaXplOw0KPiA+ICAgICA+ICsgIFNtbVZhcmlh YmxlSGVhZGVyLT5BdHRyaWJ1dGVzID0gQXR0cmlidXRlczsNCj4gPiAgICAgPiArICBDb3B5TWVt IChTbW1WYXJpYWJsZUhlYWRlci0+TmFtZSwgVmFyaWFibGVOYW1lLA0KPiA+IFNtbVZhcmlhYmxl SGVhZGVyLQ0KPiA+ICAgICA+ID5OYW1lU2l6ZSk7DQo+ID4gICAgID4gKyAgQ29weU1lbSAoKFVJ TlQ4ICopU21tVmFyaWFibGVIZWFkZXItPk5hbWUgKw0KPiBTbW1WYXJpYWJsZUhlYWRlci0NCj4g PiAgICAgPiA+TmFtZVNpemUsIERhdGEsIERhdGFTaXplKTsNCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBTZW5kIGRhdGEgdG8gU01NLg0KPiA+ICAgICA+ICsg IC8vDQo+ID4gICAgID4gKyAgU3RhdHVzID0gU2VuZENvbW11bmljYXRlQnVmZmVyIChQYXlsb2Fk U2l6ZSk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICtEb25lOg0KPiA+ICAgICA+ICsgIFJlbGVh c2VMb2NrT25seUF0Qm9vdFRpbWUgKCZtVmFyaWFibGVTZXJ2aWNlc0xvY2spOw0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArICBpZiAoIUVmaUF0UnVudGltZSAoKSkgew0KPiA+ICAgICA+ICsgICAg aWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiArICAgICAgU2VjdXJlQm9vdEhv b2sgKA0KPiA+ICAgICA+ICsgICAgICAgIFZhcmlhYmxlTmFtZSwNCj4gPiAgICAgPiArICAgICAg ICBWZW5kb3JHdWlkDQo+ID4gICAgID4gKyAgICAgICAgKTsNCj4gPiAgICAgPiArICAgIH0NCj4g PiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIHJldHVybiBTdGF0dXM7DQo+ ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIFRo aXMgY29kZSByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBFRkkgdmFyaWFibGVzLg0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1baW5dICBBdHRyaWJ1dGVzICAgICAgICAgICAg ICAgICAgIEF0dHJpYnV0ZXMgYml0bWFzayB0byBzcGVjaWZ5IHRoZSB0eXBlDQo+IG9mDQo+ID4g ICAgID4gdmFyaWFibGVzDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBvbiB3aGljaCB0byByZXR1cm4gaW5mb3JtYXRpb24uDQo+ID4gICAgID4g KyAgQHBhcmFtW291dF0gTWF4aW11bVZhcmlhYmxlU3RvcmFnZVNpemUgICBQb2ludGVyIHRvIHRo ZSBtYXhpbXVtDQo+IHNpemUNCj4gPiBvZg0KPiA+ICAgICA+IHRoZSBzdG9yYWdlIHNwYWNlIGF2 YWlsYWJsZQ0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZm9yIHRoZSBFRkkgdmFyaWFibGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUNCj4gYXR0cmli dXRlcw0KPiA+ICAgICA+IHNwZWNpZmllZC4NCj4gPiAgICAgPiArICBAcGFyYW1bb3V0XSBSZW1h aW5pbmdWYXJpYWJsZVN0b3JhZ2VTaXplIFBvaW50ZXIgdG8gdGhlIHJlbWFpbmluZw0KPiBzaXpl DQo+ID4gb2YNCj4gPiAgICAgPiB0aGUgc3RvcmFnZSBzcGFjZSBhdmFpbGFibGUNCj4gPiAgICAg PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBFRkkgdmFy aWFibGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXR0cmlidXRlcw0KPiA+IHNwZWNpZmllZC4NCj4g PiAgICAgPiArICBAcGFyYW1bb3V0XSBNYXhpbXVtVmFyaWFibGVTaXplICAgICAgICAgIFBvaW50 ZXIgdG8gdGhlIG1heGltdW0gc2l6ZQ0KPiBvZg0KPiA+IGFuDQo+ID4gICAgID4gaW5kaXZpZHVh bCBFRkkgdmFyaWFibGVzDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhc3NvY2lhdGVkIHdpdGggdGhlIGF0dHJpYnV0ZXMgc3BlY2lmaWVkLg0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAg ICAgICAgICAgIEFuIGludmFsaWQgY29tYmluYXRpb24gb2YNCj4gPiBhdHRyaWJ1dGUNCj4gPiAg ICAgPiBiaXRzIHdhcyBzdXBwbGllZC4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICAgICAgICAgICAgICAgIFF1ZXJ5IHN1Y2Nlc3NmdWxseS4NCj4gPiAgICAgPiArICBA cmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgICAgICAgICAgIFRoZSBhdHRyaWJ1dGUgaXMg bm90IHN1cHBvcnRlZCBvbg0KPiA+IHRoaXMNCj4gPiAgICAgPiBwbGF0Zm9ybS4NCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtFRklfU1RBVFVTDQo+ID4gICAgID4gK0VG SUFQSQ0KPiA+ICAgICA+ICtSdW50aW1lU2VydmljZVF1ZXJ5VmFyaWFibGVJbmZvICgNCj4gPiAg ICAgPiArICBJTiAgVUlOVDMyICBBdHRyaWJ1dGVzLA0KPiA+ICAgICA+ICsgIE9VVCBVSU5UNjQg ICpNYXhpbXVtVmFyaWFibGVTdG9yYWdlU2l6ZSwNCj4gPiAgICAgPiArICBPVVQgVUlOVDY0ICAq UmVtYWluaW5nVmFyaWFibGVTdG9yYWdlU2l6ZSwNCj4gPiAgICAgPiArICBPVVQgVUlOVDY0ICAq TWF4aW11bVZhcmlhYmxlU2l6ZQ0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0KPiA+ICAg ICA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0 dXM7DQo+ID4gICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFBheWxvYWRTaXplOw0KPiA+ICAgICA+ICsgIFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FU RV9RVUVSWV9WQVJJQUJMRV9JTkZPDQo+ID4gICAgID4gKlNtbVF1ZXJ5VmFyaWFibGVJbmZvOw0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBTbW1RdWVyeVZhcmlhYmxlSW5mbyA9IE5VTEw7DQo+ ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIGlmICgoTWF4aW11bVZhcmlhYmxlU3RvcmFnZVNpemUg PT0gTlVMTCkgfHwNCj4gPiAoUmVtYWluaW5nVmFyaWFibGVTdG9yYWdlU2l6ZQ0KPiA+ICAgICA+ ID09IE5VTEwpIHx8IChNYXhpbXVtVmFyaWFibGVTaXplID09IE5VTEwpIHx8IChBdHRyaWJ1dGVz ID09IDApKSB7DQo+ID4gICAgID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0K PiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQWNxdWlyZUxvY2tPbmx5 QXRCb290VGltZSAoJm1WYXJpYWJsZVNlcnZpY2VzTG9jayk7DQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gSW5pdCB0aGUgY29tbXVuaWNhdGUgYnVmZmVyLiBU aGUgYnVmZmVyIGRhdGEgc2l6ZSBpczoNCj4gPiAgICAgPiArICAvLyBTTU1fQ09NTVVOSUNBVEVf SEVBREVSX1NJWkUgKw0KPiA+ICAgICA+IFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9IRUFERVJf U0laRSArIFBheWxvYWRTaXplOw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgUGF5bG9h ZFNpemUgPSBzaXplb2YNCj4gPiAgICAgPiAoU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX1FVRVJZ X1ZBUklBQkxFX0lORk8pOw0KPiA+ICAgICA+ICsgIFN0YXR1cyAgICAgID0gSW5pdENvbW11bmlj YXRlQnVmZmVyICgoVk9JRCAqKikmU21tUXVlcnlWYXJpYWJsZUluZm8sDQo+ID4gICAgID4gUGF5 bG9hZFNpemUsIFNNTV9WQVJJQUJMRV9GVU5DVElPTl9RVUVSWV9WQVJJQUJMRV9JTkZPKTsNCj4g PiAgICAgPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAgID4gKyAgICBnb3Rv IERvbmU7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBBU1NFUlQg KFNtbVF1ZXJ5VmFyaWFibGVJbmZvICE9IE5VTEwpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr ICBTbW1RdWVyeVZhcmlhYmxlSW5mby0+QXR0cmlidXRlcyA9IEF0dHJpYnV0ZXM7DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gU2VuZCBkYXRhIHRvIFNNTS4N Cj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIFN0YXR1cyA9IFNlbmRDb21tdW5pY2F0ZUJ1 ZmZlciAoUGF5bG9hZFNpemUpOw0KPiA+ICAgICA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gPiAgICAgPiArICAgIGdvdG8gRG9uZTsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gR2V0IGRhdGEgZnJvbSBTTU0uDQo+ ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAqTWF4aW11bVZhcmlhYmxlU2l6ZSAgICAgICAg ICA9IFNtbVF1ZXJ5VmFyaWFibGVJbmZvLQ0KPiA+ID5NYXhpbXVtVmFyaWFibGVTaXplOw0KPiA+ ICAgICA+ICsgICpNYXhpbXVtVmFyaWFibGVTdG9yYWdlU2l6ZSAgID0gU21tUXVlcnlWYXJpYWJs ZUluZm8tDQo+ID4gICAgID4gPk1heGltdW1WYXJpYWJsZVN0b3JhZ2VTaXplOw0KPiA+ICAgICA+ ICsgICpSZW1haW5pbmdWYXJpYWJsZVN0b3JhZ2VTaXplID0gU21tUXVlcnlWYXJpYWJsZUluZm8t DQo+ID4gICAgID4gPlJlbWFpbmluZ1ZhcmlhYmxlU3RvcmFnZVNpemU7DQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICtEb25lOg0KPiA+ICAgICA+ICsgIFJlbGVhc2VMb2NrT25seUF0Qm9vdFRpbWUg KCZtVmFyaWFibGVTZXJ2aWNlc0xvY2spOw0KPiA+ICAgICA+ICsgIHJldHVybiBTdGF0dXM7DQo+ ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIEV4 aXQgQm9vdCBTZXJ2aWNlcyBFdmVudCBub3RpZmljYXRpb24gaGFuZGxlci4NCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyAgTm90aWZ5IFNNTSB2YXJpYWJsZSBkcml2ZXIgYWJvdXQgdGhlIGV2ZW50 Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1baW5dICBFdmVudCAgICAgRXZlbnQg d2hvc2Ugbm90aWZpY2F0aW9uIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQuDQo+ID4gICAgID4g KyAgQHBhcmFtW2luXSAgQ29udGV4dCAgIFBvaW50ZXIgdG8gdGhlIG5vdGlmaWNhdGlvbiBmdW5j dGlvbidzIGNvbnRleHQuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiAr Vk9JRA0KPiA+ICAgICA+ICtFRklBUEkNCj4gPiAgICAgPiArT25FeGl0Qm9vdFNlcnZpY2VzICgN Cj4gPiAgICAgPiArICBJTiAgICAgIEVGSV9FVkVOVCAgRXZlbnQsDQo+ID4gICAgID4gKyAgSU4g ICAgICBWT0lEICAgICAgICpDb250ZXh0DQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBJbml0IHRoZSBjb21tdW5pY2F0ZSBidWZm ZXIuIFRoZSBidWZmZXIgZGF0YSBzaXplIGlzOg0KPiA+ICAgICA+ICsgIC8vIFNNTV9DT01NVU5J Q0FURV9IRUFERVJfU0laRSArDQo+ID4gICAgID4gU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0hF QURFUl9TSVpFLg0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgSW5pdENvbW11bmljYXRl QnVmZmVyIChOVUxMLCAwLA0KPiA+ICAgICA+IFNNTV9WQVJJQUJMRV9GVU5DVElPTl9FWElUX0JP T1RfU0VSVklDRSk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAg Ly8gU2VuZCBkYXRhIHRvIFNNTS4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIFNlbmRD b21tdW5pY2F0ZUJ1ZmZlciAoMCk7DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKy8qKg0KPiA+ICAgICA+ICsgIE9uIFJlYWR5IFRvIEJvb3QgU2VydmljZXMgRXZlbnQgbm90 aWZpY2F0aW9uIGhhbmRsZXIuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIE5vdGlmeSBTTU0g dmFyaWFibGUgZHJpdmVyIGFib3V0IHRoZSBldmVudC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgQHBhcmFtW2luXSAgRXZlbnQgICAgIEV2ZW50IHdob3NlIG5vdGlmaWNhdGlvbiBmdW5jdGlv biBpcyBiZWluZyBpbnZva2VkDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAgIFBv aW50ZXIgdG8gdGhlIG5vdGlmaWNhdGlvbiBmdW5jdGlvbidzIGNvbnRleHQNCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtWT0lEDQo+ID4gICAgID4gK0VGSUFQSQ0KPiA+ ICAgICA+ICtPblJlYWR5VG9Cb290ICgNCj4gPiAgICAgPiArICBJTiAgICAgIEVGSV9FVkVOVCAg RXZlbnQsDQo+ID4gICAgID4gKyAgSU4gICAgICBWT0lEICAgICAgICpDb250ZXh0DQo+ID4gICAg ID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBJ bml0IHRoZSBjb21tdW5pY2F0ZSBidWZmZXIuIFRoZSBidWZmZXIgZGF0YSBzaXplIGlzOg0KPiA+ ICAgICA+ICsgIC8vIFNNTV9DT01NVU5JQ0FURV9IRUFERVJfU0laRSArDQo+ID4gICAgID4gU01N X1ZBUklBQkxFX0NPTU1VTklDQVRFX0hFQURFUl9TSVpFLg0KPiA+ICAgICA+ICsgIC8vDQo+ID4g ICAgID4gKyAgSW5pdENvbW11bmljYXRlQnVmZmVyIChOVUxMLCAwLA0KPiA+ICAgICA+IFNNTV9W QVJJQUJMRV9GVU5DVElPTl9SRUFEWV9UT19CT09UKTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgLy8NCj4gPiAgICAgPiArICAvLyBTZW5kIGRhdGEgdG8gU01NLg0KPiA+ICAgICA+ICsgIC8v DQo+ID4gICAgID4gKyAgU2VuZENvbW11bmljYXRlQnVmZmVyICgwKTsNCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBJbnN0YWxsIHRoZSBzeXN0ZW0gY29uZmln dXJhdGlvbiB0YWJsZSBmb3IgdmFyaWFibGUgaW5mbyBkYXRhIGNhcHR1cmVkDQo+ID4gICAgID4g KyAgLy8NCj4gPiAgICAgPiArICBpZiAoRmVhdHVyZVBjZEdldCAoUGNkRW5hYmxlVmFyaWFibGVS dW50aW1lQ2FjaGUpICYmIEZlYXR1cmVQY2RHZXQNCj4gPiAgICAgPiAoUGNkVmFyaWFibGVDb2xs ZWN0U3RhdGlzdGljcykpIHsNCj4gPiAgICAgPiArICAgIGlmIChtVmFyaWFibGVBdXRoRm9ybWF0 KSB7DQo+ID4gICAgID4gKyAgICAgIGdCUy0+SW5zdGFsbENvbmZpZ3VyYXRpb25UYWJsZSAoJmdF ZmlBdXRoZW50aWNhdGVkVmFyaWFibGVHdWlkLA0KPiA+ICAgICA+IG1WYXJpYWJsZUluZm8pOw0K PiA+ICAgICA+ICsgICAgfSBlbHNlIHsNCj4gPiAgICAgPiArICAgICAgZ0JTLT5JbnN0YWxsQ29u ZmlndXJhdGlvblRhYmxlICgmZ0VmaVZhcmlhYmxlR3VpZCwgbVZhcmlhYmxlSW5mbyk7DQo+ID4g ICAgID4gKyAgICB9DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBn QlMtPkNsb3NlRXZlbnQgKEV2ZW50KTsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArLyoqDQo+ID4gICAgID4gKyAgTm90aWZpY2F0aW9uIGZ1bmN0aW9uIG9mIEVWVF9TSUdO QUxfVklSVFVBTF9BRERSRVNTX0NIQU5HRS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgVGhp cyBpcyBhIG5vdGlmaWNhdGlvbiBmdW5jdGlvbiByZWdpc3RlcmVkIG9uDQo+ID4gICAgID4gRVZU X1NJR05BTF9WSVJUVUFMX0FERFJFU1NfQ0hBTkdFIGV2ZW50Lg0KPiA+ICAgICA+ICsgIEl0IGNv bnZlcnMgcG9pbnRlciB0byBuZXcgdmlydHVhbCBhZGRyZXNzLg0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICBAcGFyYW1baW5dICBFdmVudCAgICAgICAgRXZlbnQgd2hvc2Ugbm90aWZpY2F0aW9u IGZ1bmN0aW9uIGlzIGJlaW5nDQo+IGludm9rZWQuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSAg Q29udGV4dCAgICAgIFBvaW50ZXIgdG8gdGhlIG5vdGlmaWNhdGlvbiBmdW5jdGlvbidzIGNvbnRl eHQuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArVk9JRA0KPiA+ICAg ICA+ICtFRklBUEkNCj4gPiAgICAgPiArVmFyaWFibGVBZGRyZXNzQ2hhbmdlRXZlbnQgKA0KPiA+ ICAgICA+ICsgIElOIEVGSV9FVkVOVCAgRXZlbnQsDQo+ID4gICAgID4gKyAgSU4gVk9JRCAgICAg ICAqQ29udGV4dA0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0KPiA+ICAgICA+ICsgIEVm aUNvbnZlcnRQb2ludGVyICgweDAsIChWT0lEICoqKSZtVmFyaWFibGVCdWZmZXIpOw0KPiA+ICAg ICA+ICsgIEVmaUNvbnZlcnRQb2ludGVyICgweDAsIChWT0lEICoqKSZtTW1Db21tdW5pY2F0aW9u Mik7DQo+ID4gICAgID4gKyAgRWZpQ29udmVydFBvaW50ZXIgKEVGSV9PUFRJT05BTF9QVFIsIChW T0lEDQo+ID4gICAgID4gKiopJm1WYXJpYWJsZVJ1bnRpbWVIb2JDYWNoZUJ1ZmZlcik7DQo+ID4g ICAgID4gKyAgRWZpQ29udmVydFBvaW50ZXIgKEVGSV9PUFRJT05BTF9QVFIsIChWT0lEDQo+ID4g ICAgID4gKiopJm1WYXJpYWJsZVJ1bnRpbWVOdkNhY2hlQnVmZmVyKTsNCj4gPiAgICAgPiArICBF ZmlDb252ZXJ0UG9pbnRlciAoRUZJX09QVElPTkFMX1BUUiwgKFZPSUQNCj4gPiAgICAgPiAqKikm bVZhcmlhYmxlUnVudGltZVZvbGF0aWxlQ2FjaGVCdWZmZXIpOw0KPiA+ICAgICA+ICt9DQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBUaGlzIGNvZGUgZ2V0cyB2YXJp YWJsZSBwYXlsb2FkIHNpemUuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbVtvdXRd IFZhcmlhYmxlUGF5bG9hZFNpemUgICBPdXRwdXQgcG9pbnRlciB0byB2YXJpYWJsZSBwYXlsb2Fk DQo+ID4gc2l6ZS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICAgICAgIEdldCBzdWNjZXNzZnVsbHkuDQo+ID4gICAgID4gKyAgQHJldHZhbCBP dGhlcnMgICAgICAgICAgICAgICAgICAgIEdldCB1bnN1Y2Nlc3NmdWxseS4NCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtFRklfU1RBVFVTDQo+ID4gICAgID4gK0VGSUFQ SQ0KPiA+ICAgICA+ICtHZXRWYXJpYWJsZVBheWxvYWRTaXplICgNCj4gPiAgICAgPiArICBPVVQg VUlOVE4gICpWYXJpYWJsZVBheWxvYWRTaXplDQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7 DQo+ID4gICAgID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFN0YXR1czsNCj4gPiAgICAgPiArICBTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfR0VUX1BBWUxP QURfU0laRQ0KPiA+ICpTbW1HZXRQYXlsb2FkU2l6ZTsNCj4gPiAgICAgPiArICBFRklfTU1fQ09N TVVOSUNBVEVfSEVBREVSDQo+ICpTbW1Db21tdW5pY2F0ZUhlYWRlcjsNCj4gPiAgICAgPiArICBT TU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfSEVBREVSDQo+ID4gICAgID4gKlNtbVZhcmlhYmxlRnVu Y3Rpb25IZWFkZXI7DQo+ID4gICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIENvbW1TaXplOw0KPiA+ICAgICA+ICsgIFVJTlQ4ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqQ29tbUJ1ZmZlcjsNCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgU21tR2V0UGF5bG9hZFNpemUgPSBOVUxMOw0KPiA+ICAgICA+ICsgIENvbW1CdWZmZXIg ICAgICAgID0gTlVMTDsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgaWYgKFZhcmlhYmxlUGF5 bG9hZFNpemUgPT0gTlVMTCkgew0KPiA+ICAgICA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BB UkFNRVRFUjsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEFjcXVp cmVMb2NrT25seUF0Qm9vdFRpbWUgKCZtVmFyaWFibGVTZXJ2aWNlc0xvY2spOw0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIEluaXQgdGhlIGNvbW11bmljYXRl IGJ1ZmZlci4gVGhlIGJ1ZmZlciBkYXRhIHNpemUgaXM6DQo+ID4gICAgID4gKyAgLy8gU01NX0NP TU1VTklDQVRFX0hFQURFUl9TSVpFICsNCj4gPiAgICAgPiBTTU1fVkFSSUFCTEVfQ09NTVVOSUNB VEVfSEVBREVSX1NJWkUgKyBzaXplb2YNCj4gPiAgICAgPiAoU01NX1ZBUklBQkxFX0NPTU1VTklD QVRFX0dFVF9QQVlMT0FEX1NJWkUpOw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgQ29t bVNpemUgICA9IFNNTV9DT01NVU5JQ0FURV9IRUFERVJfU0laRSArDQo+ID4gICAgID4gU01NX1ZB UklBQkxFX0NPTU1VTklDQVRFX0hFQURFUl9TSVpFICsgc2l6ZW9mDQo+ID4gICAgID4gKFNNTV9W QVJJQUJMRV9DT01NVU5JQ0FURV9HRVRfUEFZTE9BRF9TSVpFKTsNCj4gPiAgICAgPiArICBDb21t QnVmZmVyID0gQWxsb2NhdGVaZXJvUG9vbCAoQ29tbVNpemUpOw0KPiA+ICAgICA+ICsgIGlmIChD b21tQnVmZmVyID09IE5VTEwpIHsNCj4gPiAgICAgPiArICAgIFN0YXR1cyA9IEVGSV9PVVRfT0Zf UkVTT1VSQ0VTOw0KPiA+ICAgICA+ICsgICAgZ290byBEb25lOw0KPiA+ICAgICA+ICsgIH0NCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyAgU21tQ29tbXVuaWNhdGVIZWFkZXIgPSAoRUZJX01NX0NP TU1VTklDQVRFX0hFQURFUg0KPiA+ICAgICA+ICopQ29tbUJ1ZmZlcjsNCj4gPiAgICAgPiArICBD b3B5R3VpZCAoJlNtbUNvbW11bmljYXRlSGVhZGVyLT5IZWFkZXJHdWlkLA0KPiA+ICAgICA+ICZn RWZpU21tVmFyaWFibGVQcm90b2NvbEd1aWQpOw0KPiA+ICAgICA+ICsgIFNtbUNvbW11bmljYXRl SGVhZGVyLT5NZXNzYWdlTGVuZ3RoID0NCj4gPiAgICAgPiBTTU1fVkFSSUFCTEVfQ09NTVVOSUNB VEVfSEVBREVSX1NJWkUgKyBzaXplb2YNCj4gPiAgICAgPiAoU01NX1ZBUklBQkxFX0NPTU1VTklD QVRFX0dFVF9QQVlMT0FEX1NJWkUpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBTbW1WYXJp YWJsZUZ1bmN0aW9uSGVhZGVyICAgICAgICAgICA9DQo+ID4gICAgID4gKFNNTV9WQVJJQUJMRV9D T01NVU5JQ0FURV9IRUFERVIgKilTbW1Db21tdW5pY2F0ZUhlYWRlci0NCj4gPiA+RGF0YTsNCj4g PiAgICAgPiArICBTbW1WYXJpYWJsZUZ1bmN0aW9uSGVhZGVyLT5GdW5jdGlvbiA9DQo+ID4gICAg ID4gU01NX1ZBUklBQkxFX0ZVTkNUSU9OX0dFVF9QQVlMT0FEX1NJWkU7DQo+ID4gICAgID4gKyAg U21tR2V0UGF5bG9hZFNpemUgICAgICAgICAgICAgICAgICAgPQ0KPiA+ICAgICA+IChTTU1fVkFS SUFCTEVfQ09NTVVOSUNBVEVfR0VUX1BBWUxPQURfU0laRQ0KPiA+ICAgICA+ICopU21tVmFyaWFi bGVGdW5jdGlvbkhlYWRlci0+RGF0YTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4g PiAgICAgPiArICAvLyBTZW5kIGRhdGEgdG8gU01NLg0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAg ID4gKyAgU3RhdHVzID0gbU1tQ29tbXVuaWNhdGlvbjItPkNvbW11bmljYXRlIChtTW1Db21tdW5p Y2F0aW9uMiwNCj4gPiAgICAgPiBDb21tQnVmZmVyLCBDb21tQnVmZmVyLCAmQ29tbVNpemUpOw0K PiA+ICAgICA+ICsgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsgIFN0YXR1cyA9IFNtbVZhcmlhYmxlRnVuY3Rpb25IZWFkZXItPlJldHVyblN0YXR1 czsNCj4gPiAgICAgPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAgID4gKyAg ICBnb3RvIERvbmU7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAv Lw0KPiA+ICAgICA+ICsgIC8vIEdldCBkYXRhIGZyb20gU01NLg0KPiA+ICAgICA+ICsgIC8vDQo+ ID4gICAgID4gKyAgKlZhcmlhYmxlUGF5bG9hZFNpemUgPSBTbW1HZXRQYXlsb2FkU2l6ZS0+VmFy aWFibGVQYXlsb2FkU2l6ZTsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gK0RvbmU6DQo+ID4gICAg ID4gKyAgaWYgKENvbW1CdWZmZXIgIT0gTlVMTCkgew0KPiA+ICAgICA+ICsgICAgRnJlZVBvb2wg KENvbW1CdWZmZXIpOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg UmVsZWFzZUxvY2tPbmx5QXRCb290VGltZSAoJm1WYXJpYWJsZVNlcnZpY2VzTG9jayk7DQo+ID4g ICAgID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArLyoqDQo+ID4gICAgID4gKyAgVGhpcyBjb2RlIGdldHMgaW5mb3JtYXRpb24gbmVlZGVk IGZyb20gU01NIGZvciBydW50aW1lIGNhY2hlDQo+ID4gaW5pdGlhbGl6YXRpb24uDQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbVtvdXRdIFRvdGFsSG9iU3RvcmFnZVNpemUgICAgICAg ICBPdXRwdXQgcG9pbnRlciBmb3IgdGhlIHRvdGFsDQo+IEhPQg0KPiA+ICAgICA+IHN0b3JhZ2Ug c2l6ZSBpbiBieXRlcy4NCj4gPiAgICAgPiArICBAcGFyYW1bb3V0XSBUb3RhbE52U3RvcmFnZVNp emUgICAgICAgICAgT3V0cHV0IHBvaW50ZXIgZm9yIHRoZSB0b3RhbCBub24tDQo+ID4gICAgID4g dm9sYXRpbGUgc3RvcmFnZSBzaXplIGluIGJ5dGVzLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtvdXRd IFRvdGFsVm9sYXRpbGVTdG9yYWdlU2l6ZSAgICBPdXRwdXQgcG9pbnRlciBmb3IgdGhlIHRvdGFs DQo+ID4gdm9sYXRpbGUNCj4gPiAgICAgPiBzdG9yYWdlIHNpemUgaW4gYnl0ZXMuDQo+ID4gICAg ID4gKyAgQHBhcmFtW291dF0gQXV0aGVudGljYXRlZFZhcmlhYmxlVXNhZ2UgIE91dHB1dCBwb2lu dGVyIHRoYXQNCj4gaW5kaWNhdGVzDQo+ID4gaWYNCj4gPiAgICAgPiBhdXRoZW50aWNhdGVkIHZh cmlhYmxlcyBhcmUgdG8gYmUgdXNlZC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIFJldHJpZXZlZCB0aGUgc2l6ZSBzdWNj ZXNzZnVsbHkuDQo+ID4gICAgID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICAg ICAgICAgIFRvdGFsTnZTdG9yYWdlU2l6ZSBwYXJhbWV0ZXINCj4gaXMNCj4gPiAgICAgPiBOVUxM Lg0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICAgICAgICAgICBU aGUgbWVtb3J5IHJlc291cmNlcyBuZWVkZWQNCj4gPiBmb3IgYQ0KPiA+ICAgICA+IENvbW1CdWZm ZXIgYXJlIG5vdCBhdmFpbGFibGUuDQo+ID4gICAgID4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAg ICAgICAgICAgICAgICAgICAgIENvdWxkIG5vdCByZXRyaWV2ZSB0aGUgc2l6ZSBzdWNjZXNzZnVs bHkuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArRUZJX1NUQVRVUw0K PiA+ICAgICA+ICtHZXRSdW50aW1lQ2FjaGVJbmZvICgNCj4gPiAgICAgPiArICBPVVQgVUlOVE4g ICAgKlRvdGFsSG9iU3RvcmFnZVNpemUsDQo+ID4gICAgID4gKyAgT1VUIFVJTlROICAgICpUb3Rh bE52U3RvcmFnZVNpemUsDQo+ID4gICAgID4gKyAgT1VUIFVJTlROICAgICpUb3RhbFZvbGF0aWxl U3RvcmFnZVNpemUsDQo+ID4gICAgID4gKyAgT1VUIEJPT0xFQU4gICpBdXRoZW50aWNhdGVkVmFy aWFibGVVc2FnZQ0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0KPiA+ICAgICA+ICsgIEVG SV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ ID4gICAgID4gKyAgU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0dFVF9SVU5USU1FX0NBQ0hFX0lO Rk8NCj4gPiAgICAgPiAqU21tR2V0UnVudGltZUNhY2hlSW5mbzsNCj4gPiAgICAgPiArICBFRklf TU1fQ09NTVVOSUNBVEVfSEVBREVSDQo+ID4gKlNtbUNvbW11bmljYXRlSGVhZGVyOw0KPiA+ICAg ICA+ICsgIFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9IRUFERVINCj4gPiAgICAgPiAqU21tVmFy aWFibGVGdW5jdGlvbkhlYWRlcjsNCj4gPiAgICAgPiArICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbVNpemU7DQo+ID4gICAgID4gKyAgVUlOVDgg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpDb21tQnVmZmVyOw0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBTbW1HZXRSdW50aW1lQ2FjaGVJbmZvID0gTlVMTDsN Cj4gPiAgICAgPiArICBDb21tQnVmZmVyICAgICAgICAgICAgID0gbVZhcmlhYmxlQnVmZmVyOw0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBpZiAoKFRvdGFsSG9iU3RvcmFnZVNpemUgPT0gTlVM TCkgfHwgKFRvdGFsTnZTdG9yYWdlU2l6ZSA9PSBOVUxMKSB8fA0KPiA+ICAgICA+IChUb3RhbFZv bGF0aWxlU3RvcmFnZVNpemUgPT0gTlVMTCkgfHwgKEF1dGhlbnRpY2F0ZWRWYXJpYWJsZVVzYWdl ID09DQo+ID4gTlVMTCkpIHsNCj4gPiAgICAgPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJB TUVURVI7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBpZiAoQ29t bUJ1ZmZlciA9PSBOVUxMKSB7DQo+ID4gICAgID4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNP VVJDRVM7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBBY3F1aXJl TG9ja09ubHlBdEJvb3RUaW1lICgmbVZhcmlhYmxlU2VydmljZXNMb2NrKTsNCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyAgQ29tbVNpemUgPSBTTU1fQ09NTVVOSUNBVEVfSEVBREVSX1NJWkUgKw0K PiA+ICAgICA+IFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9IRUFERVJfU0laRSArIHNpemVvZg0K PiA+ICAgICA+IChTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfR0VUX1JVTlRJTUVfQ0FDSEVfSU5G Tyk7DQo+ID4gICAgID4gKyAgWmVyb01lbSAoQ29tbUJ1ZmZlciwgQ29tbVNpemUpOw0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArICBTbW1Db21tdW5pY2F0ZUhlYWRlciA9IChFRklfTU1fQ09NTVVO SUNBVEVfSEVBREVSDQo+ID4gICAgID4gKilDb21tQnVmZmVyOw0KPiA+ICAgICA+ICsgIENvcHlH dWlkICgmU21tQ29tbXVuaWNhdGVIZWFkZXItPkhlYWRlckd1aWQsDQo+ID4gICAgID4gJmdFZmlT bW1WYXJpYWJsZVByb3RvY29sR3VpZCk7DQo+ID4gICAgID4gKyAgU21tQ29tbXVuaWNhdGVIZWFk ZXItPk1lc3NhZ2VMZW5ndGggPQ0KPiA+ICAgICA+IFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9I RUFERVJfU0laRSArIHNpemVvZg0KPiA+ICAgICA+IChTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVf R0VUX1JVTlRJTUVfQ0FDSEVfSU5GTyk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFNtbVZh cmlhYmxlRnVuY3Rpb25IZWFkZXIgICAgICAgICAgID0NCj4gPiAgICAgPiAoU01NX1ZBUklBQkxF X0NPTU1VTklDQVRFX0hFQURFUiAqKVNtbUNvbW11bmljYXRlSGVhZGVyLQ0KPiA+ID5EYXRhOw0K PiA+ICAgICA+ICsgIFNtbVZhcmlhYmxlRnVuY3Rpb25IZWFkZXItPkZ1bmN0aW9uID0NCj4gPiAg ICAgPiBTTU1fVkFSSUFCTEVfRlVOQ1RJT05fR0VUX1JVTlRJTUVfQ0FDSEVfSU5GTzsNCj4gPiAg ICAgPiArICBTbW1HZXRSdW50aW1lQ2FjaGVJbmZvICAgICAgICAgICAgICA9DQo+ID4gICAgID4g KFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9HRVRfUlVOVElNRV9DQUNIRV9JTkZPDQo+ID4gICAg ID4gKilTbW1WYXJpYWJsZUZ1bmN0aW9uSGVhZGVyLT5EYXRhOw0KPiA+ICAgICA+ICsNCj4gPiAg ICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIFNlbmQgZGF0YSB0byBTTU0uDQo+ID4gICAgID4g KyAgLy8NCj4gPiAgICAgPiArICBTdGF0dXMgPSBtTW1Db21tdW5pY2F0aW9uMi0+Q29tbXVuaWNh dGUgKG1NbUNvbW11bmljYXRpb24yLA0KPiA+ICAgICA+IENvbW1CdWZmZXIsIENvbW1CdWZmZXIs ICZDb21tU2l6ZSk7DQo+ID4gICAgID4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4g PiAgICAgPiArICBpZiAoQ29tbVNpemUgPD0gU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0hFQURF Ul9TSVpFKSB7DQo+ID4gICAgID4gKyAgICBTdGF0dXMgPSBFRklfQkFEX0JVRkZFUl9TSVpFOw0K PiA+ICAgICA+ICsgICAgZ290byBEb25lOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKyAgU3RhdHVzID0gU21tVmFyaWFibGVGdW5jdGlvbkhlYWRlci0+UmV0dXJuU3Rh dHVzOw0KPiA+ICAgICA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiAr ICAgIGdvdG8gRG9uZTsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsg IC8vDQo+ID4gICAgID4gKyAgLy8gR2V0IGRhdGEgZnJvbSBTTU0uDQo+ID4gICAgID4gKyAgLy8N Cj4gPiAgICAgPiArICAqVG90YWxIb2JTdG9yYWdlU2l6ZSAgICAgICAgPSBTbW1HZXRSdW50aW1l Q2FjaGVJbmZvLQ0KPiA+ICAgICA+ID5Ub3RhbEhvYlN0b3JhZ2VTaXplOw0KPiA+ICAgICA+ICsg ICpUb3RhbE52U3RvcmFnZVNpemUgICAgICAgICA9IFNtbUdldFJ1bnRpbWVDYWNoZUluZm8tDQo+ ID4gPlRvdGFsTnZTdG9yYWdlU2l6ZTsNCj4gPiAgICAgPiArICAqVG90YWxWb2xhdGlsZVN0b3Jh Z2VTaXplICAgPSBTbW1HZXRSdW50aW1lQ2FjaGVJbmZvLQ0KPiA+ICAgICA+ID5Ub3RhbFZvbGF0 aWxlU3RvcmFnZVNpemU7DQo+ID4gICAgID4gKyAgKkF1dGhlbnRpY2F0ZWRWYXJpYWJsZVVzYWdl ID0gU21tR2V0UnVudGltZUNhY2hlSW5mby0NCj4gPiAgICAgPiA+QXV0aGVudGljYXRlZFZhcmlh YmxlVXNhZ2U7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICtEb25lOg0KPiA+ICAgICA+ICsgIFJl bGVhc2VMb2NrT25seUF0Qm9vdFRpbWUgKCZtVmFyaWFibGVTZXJ2aWNlc0xvY2spOw0KPiA+ICAg ICA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKy8qKg0KPiA+ICAgICA+ICsgIFNlbmRzIHRoZSBydW50aW1lIHZhcmlhYmxlIGNhY2hlIGNv bnRleHQgaW5mb3JtYXRpb24gdG8gU01NLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgUmV0cmlldmVkIHRoZSBzaXplIHN1Y2Nlc3Nm dWxseS4NCj4gPiAgICAgPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgICAgVG90 YWxOdlN0b3JhZ2VTaXplIHBhcmFtZXRlciBpcw0KPiA+IE5VTEwuDQo+ID4gICAgID4gKyAgQHJl dHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgICAgIFRoZSBtZW1vcnkgcmVzb3VyY2VzIG5lZWRl ZCBmb3INCj4gYQ0KPiA+ICAgICA+IENvbW1CdWZmZXIgYXJlIG5vdCBhdmFpbGFibGUuDQo+ID4g ICAgID4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICAgICAgIENvdWxkIG5vdCByZXRy aWV2ZSB0aGUgc2l6ZSBzdWNjZXNzZnVsbHkuOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiov DQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4gPiAgICAgPiArU2VuZFJ1bnRpbWVWYXJpYWJsZUNh Y2hlQ29udGV4dFRvU21tICgNCj4gPiAgICAgPiArICBWT0lEDQo+ID4gICAgID4gKyAgKQ0KPiA+ ICAgICA+ICt7DQo+ID4gICAgID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ICAgICA+ICsNCj4gPiBTTU1fVkFS SUFCTEVfQ09NTVVOSUNBVEVfUlVOVElNRV9WQVJJQUJMRV9DQUNIRV9DT05URVhUDQo+ID4gICAg ID4gKlNtbVJ1bnRpbWVWYXJDYWNoZUNvbnRleHQ7DQo+ID4gICAgID4gKyAgRUZJX01NX0NPTU1V TklDQVRFX0hFQURFUg0KPiA+ICAgICA+ICpTbW1Db21tdW5pY2F0ZUhlYWRlcjsNCj4gPiAgICAg PiArICBTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfSEVBREVSDQo+ID4gICAgID4gKlNtbVZhcmlh YmxlRnVuY3Rpb25IZWFkZXI7DQo+ID4gICAgID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbVNpemU7DQo+ID4gICAgID4gKyAg VUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KkNvbW1CdWZmZXI7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFNtbVJ1bnRpbWVWYXJDYWNo ZUNvbnRleHQgPSBOVUxMOw0KPiA+ICAgICA+ICsgIENvbW1CdWZmZXIgICAgICAgICAgICAgICAg PSBtVmFyaWFibGVCdWZmZXI7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIGlmIChDb21tQnVm ZmVyID09IE5VTEwpIHsNCj4gPiAgICAgPiArICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNF UzsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIEFjcXVpcmVMb2Nr T25seUF0Qm9vdFRpbWUgKCZtVmFyaWFibGVTZXJ2aWNlc0xvY2spOw0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIEluaXQgdGhlIGNvbW11bmljYXRlIGJ1ZmZl ci4gVGhlIGJ1ZmZlciBkYXRhIHNpemUgaXM6DQo+ID4gICAgID4gKyAgLy8gU01NX0NPTU1VTklD QVRFX0hFQURFUl9TSVpFICsNCj4gPiAgICAgPiBTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfSEVB REVSX1NJWkUgKyBzaXplb2YNCj4gPiAgICAgPg0KPiAoU01NX1ZBUklBQkxFX0NPTU1VTklDQVRF X1JVTlRJTUVfVkFSSUFCTEVfQ0FDSEVfQ09OVEVYVCk7DQo+ID4gICAgID4gKyAgLy8NCj4gPiAg ICAgPiArICBDb21tU2l6ZSA9IFNNTV9DT01NVU5JQ0FURV9IRUFERVJfU0laRSArDQo+ID4gICAg ID4gU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0hFQURFUl9TSVpFICsgc2l6ZW9mDQo+ID4gICAg ID4NCj4gKFNNTV9WQVJJQUJMRV9DT01NVU5JQ0FURV9SVU5USU1FX1ZBUklBQkxFX0NBQ0hFX0NP TlRFWFQpOw0KPiA+ICAgICA+ICsgIFplcm9NZW0gKENvbW1CdWZmZXIsIENvbW1TaXplKTsNCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyAgU21tQ29tbXVuaWNhdGVIZWFkZXIgPSAoRUZJX01NX0NP TU1VTklDQVRFX0hFQURFUg0KPiA+ICAgICA+ICopQ29tbUJ1ZmZlcjsNCj4gPiAgICAgPiArICBD b3B5R3VpZCAoJlNtbUNvbW11bmljYXRlSGVhZGVyLT5IZWFkZXJHdWlkLA0KPiA+ICAgICA+ICZn RWZpU21tVmFyaWFibGVQcm90b2NvbEd1aWQpOw0KPiA+ICAgICA+ICsgIFNtbUNvbW11bmljYXRl SGVhZGVyLT5NZXNzYWdlTGVuZ3RoID0NCj4gPiAgICAgPiBTTU1fVkFSSUFCTEVfQ09NTVVOSUNB VEVfSEVBREVSX1NJWkUgKyBzaXplb2YNCj4gPiAgICAgPg0KPiAoU01NX1ZBUklBQkxFX0NPTU1V TklDQVRFX1JVTlRJTUVfVkFSSUFCTEVfQ0FDSEVfQ09OVEVYVCk7DQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsgIFNtbVZhcmlhYmxlRnVuY3Rpb25IZWFkZXIgICAgICAgICAgID0NCj4gPiAgICAg PiAoU01NX1ZBUklBQkxFX0NPTU1VTklDQVRFX0hFQURFUiAqKVNtbUNvbW11bmljYXRlSGVhZGVy LQ0KPiA+ID5EYXRhOw0KPiA+ICAgICA+ICsgIFNtbVZhcmlhYmxlRnVuY3Rpb25IZWFkZXItPkZ1 bmN0aW9uID0NCj4gPiAgICAgPg0KPiBTTU1fVkFSSUFCTEVfRlVOQ1RJT05fSU5JVF9SVU5USU1F X1ZBUklBQkxFX0NBQ0hFX0NPTlRFWFQ7DQo+ID4gICAgID4gKyAgU21tUnVudGltZVZhckNhY2hl Q29udGV4dCAgICAgICAgICAgPQ0KPiA+ICAgICA+DQo+IChTTU1fVkFSSUFCTEVfQ09NTVVOSUNB VEVfUlVOVElNRV9WQVJJQUJMRV9DQUNIRV9DT05URVhUDQo+ID4gICAgID4gKilTbW1WYXJpYWJs ZUZ1bmN0aW9uSGVhZGVyLT5EYXRhOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBTbW1SdW50 aW1lVmFyQ2FjaGVDb250ZXh0LT5SdW50aW1lSG9iQ2FjaGUgICAgICA9DQo+ID4gICAgID4gbVZh cmlhYmxlUnVudGltZUhvYkNhY2hlQnVmZmVyOw0KPiA+ICAgICA+ICsgIFNtbVJ1bnRpbWVWYXJD YWNoZUNvbnRleHQtPlJ1bnRpbWVWb2xhdGlsZUNhY2hlID0NCj4gPiAgICAgPiBtVmFyaWFibGVS dW50aW1lVm9sYXRpbGVDYWNoZUJ1ZmZlcjsNCj4gPiAgICAgPiArICBTbW1SdW50aW1lVmFyQ2Fj aGVDb250ZXh0LT5SdW50aW1lTnZDYWNoZSAgICAgICA9DQo+ID4gICAgID4gbVZhcmlhYmxlUnVu dGltZU52Q2FjaGVCdWZmZXI7DQo+ID4gICAgID4gKyAgU21tUnVudGltZVZhckNhY2hlQ29udGV4 dC0+UGVuZGluZ1VwZGF0ZSAgICAgICAgPQ0KPiA+ICAgICA+ICZtVmFyaWFibGVSdW50aW1lQ2Fj aGVQZW5kaW5nVXBkYXRlOw0KPiA+ICAgICA+ICsgIFNtbVJ1bnRpbWVWYXJDYWNoZUNvbnRleHQt PlJlYWRMb2NrICAgICAgICAgICAgID0NCj4gPiAgICAgPiAmbVZhcmlhYmxlUnVudGltZUNhY2hl UmVhZExvY2s7DQo+ID4gICAgID4gKyAgU21tUnVudGltZVZhckNhY2hlQ29udGV4dC0+SG9iRmx1 c2hDb21wbGV0ZSAgICAgPQ0KPiA+ICAgICA+ICZtSG9iRmx1c2hDb21wbGV0ZTsNCj4gPiAgICAg PiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBSZXF1ZXN0IHRvIHVuYmxvY2sg dGhpcyByZWdpb24gdG8gYmUgYWNjZXNzaWJsZSBmcm9tIGluc2lkZSBNTQ0KPiA+ICAgICA+IGVu dmlyb25tZW50DQo+ID4gICAgID4gKyAgLy8gVGhlc2UgZmllbGRzICJzaG91bGQiIGJlIGFsbCBv biB0aGUgc2FtZSBwYWdlLCBidXQganVzdCB0byBiZSBvbiB0aGUNCj4gc2FmZQ0KPiA+ICAgICA+ IHNpZGUuLi4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIFN0YXR1cyA9IE1tVW5ibG9j a01lbW9yeVJlcXVlc3QgKA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgKEVGSV9QSFlTSUNBTF9B RERSRVNTKUFMSUdOX1ZBTFVFDQo+ID4gICAgID4gKChVSU5UTilTbW1SdW50aW1lVmFyQ2FjaGVD b250ZXh0LT5QZW5kaW5nVXBkYXRlIC0gRUZJX1BBR0VfU0laRQ0KPiArDQo+ID4gMSwNCj4gPiAg ICAgPiBFRklfUEFHRV9TSVpFKSwNCj4gPiAgICAgPiArICAgICAgICAgICAgIEVGSV9TSVpFX1RP X1BBR0VTIChzaXplb2YNCj4gPiAobVZhcmlhYmxlUnVudGltZUNhY2hlUGVuZGluZ1VwZGF0ZSkp DQo+ID4gICAgID4gKyAgICAgICAgICAgICApOw0KPiA+ICAgICA+ICsgIGlmICgoU3RhdHVzICE9 IEVGSV9VTlNVUFBPUlRFRCkgJiYgRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAgID4gKyAg ICBnb3RvIERvbmU7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBT dGF0dXMgPSBNbVVuYmxvY2tNZW1vcnlSZXF1ZXN0ICgNCj4gPiAgICAgPiArICAgICAgICAgICAg IChFRklfUEhZU0lDQUxfQUREUkVTUylBTElHTl9WQUxVRQ0KPiA+ICAgICA+ICgoVUlOVE4pU21t UnVudGltZVZhckNhY2hlQ29udGV4dC0+UmVhZExvY2sgLSBFRklfUEFHRV9TSVpFICsgMSwNCj4g PiAgICAgPiBFRklfUEFHRV9TSVpFKSwNCj4gPiAgICAgPiArICAgICAgICAgICAgIEVGSV9TSVpF X1RPX1BBR0VTIChzaXplb2YgKG1WYXJpYWJsZVJ1bnRpbWVDYWNoZVJlYWRMb2NrKSkNCj4gPiAg ICAgPiArICAgICAgICAgICAgICk7DQo+ID4gICAgID4gKyAgaWYgKChTdGF0dXMgIT0gRUZJX1VO U1VQUE9SVEVEKSAmJiBFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiArICAgIGdvdG8g RG9uZTsNCj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIFN0YXR1cyA9 IE1tVW5ibG9ja01lbW9yeVJlcXVlc3QgKA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgKEVGSV9Q SFlTSUNBTF9BRERSRVNTKUFMSUdOX1ZBTFVFDQo+ID4gICAgID4gKChVSU5UTilTbW1SdW50aW1l VmFyQ2FjaGVDb250ZXh0LT5Ib2JGbHVzaENvbXBsZXRlIC0NCj4gPiBFRklfUEFHRV9TSVpFICsN Cj4gPiAgICAgPiAxLCBFRklfUEFHRV9TSVpFKSwNCj4gPiAgICAgPiArICAgICAgICAgICAgIEVG SV9TSVpFX1RPX1BBR0VTIChzaXplb2YgKG1Ib2JGbHVzaENvbXBsZXRlKSkNCj4gPiAgICAgPiAr ICAgICAgICAgICAgICk7DQo+ID4gICAgID4gKyAgaWYgKChTdGF0dXMgIT0gRUZJX1VOU1VQUE9S VEVEKSAmJiBFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiArICAgIGdvdG8gRG9uZTsN Cj4gPiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4g KyAgLy8gU2VuZCBkYXRhIHRvIFNNTS4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIFN0 YXR1cyA9IG1NbUNvbW11bmljYXRpb24yLT5Db21tdW5pY2F0ZSAobU1tQ29tbXVuaWNhdGlvbjIs DQo+ID4gICAgID4gQ29tbUJ1ZmZlciwgQ29tbUJ1ZmZlciwgJkNvbW1TaXplKTsNCj4gPiAgICAg PiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+ICAgICA+ICsgIGlmIChDb21tU2l6 ZSA8PSBTTU1fVkFSSUFCTEVfQ09NTVVOSUNBVEVfSEVBREVSX1NJWkUpIHsNCj4gPiAgICAgPiAr ICAgIFN0YXR1cyA9IEVGSV9CQURfQlVGRkVSX1NJWkU7DQo+ID4gICAgID4gKyAgICBnb3RvIERv bmU7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBTdGF0dXMgPSBT bW1WYXJpYWJsZUZ1bmN0aW9uSGVhZGVyLT5SZXR1cm5TdGF0dXM7DQo+ID4gICAgID4gKyAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICAgICA+ICsgICAgZ290byBEb25lOw0KPiA+ICAg ICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gK0RvbmU6DQo+ID4gICAgID4gKyAgUmVs ZWFzZUxvY2tPbmx5QXRCb290VGltZSAoJm1WYXJpYWJsZVNlcnZpY2VzTG9jayk7DQo+ID4gICAg ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArLyoqDQo+ID4gICAgID4gKyAgSW5pdGlhbGl6ZSB2YXJpYWJsZSBzZXJ2aWNlIGFuZCBpbnN0 YWxsIFZhcmlhYmxlIEFyY2hpdGVjdHVyYWwgcHJvdG9jb2wuDQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsgIEBwYXJhbVtpbl0gRXZlbnQgICAgRXZlbnQgd2hvc2Ugbm90aWZpY2F0aW9uIGZ1bmN0 aW9uIGlzIGJlaW5nIGludm9rZWQuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBDb250ZXh0ICBQ b2ludGVyIHRvIHRoZSBub3RpZmljYXRpb24gZnVuY3Rpb24ncyBjb250ZXh0Lg0KPiA+ICAgICA+ ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK1ZPSUQNCj4gPiAgICAgPiArRUZJQVBJDQo+ ID4gICAgID4gK1NtbVZhcmlhYmxlUmVhZHkgKA0KPiA+ICAgICA+ICsgIElOICBFRklfRVZFTlQg IEV2ZW50LA0KPiA+ICAgICA+ICsgIElOICBWT0lEICAgICAgICpDb250ZXh0DQo+ID4gICAgID4g KyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg ICAgICAgIFN0YXR1czsNCj4gPiAgICAgPiArICBQUk9URUNURURfVkFSSUFCTEVfQ09OVEVYVF9J TiAgQ29udGV4dEluOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBTdGF0dXMgPSBnQlMtPkxv Y2F0ZVByb3RvY29sICgmZ0VmaVNtbVZhcmlhYmxlUHJvdG9jb2xHdWlkLCBOVUxMLA0KPiA+IChW T0lEDQo+ID4gICAgID4gKiopJm1TbW1WYXJpYWJsZSk7DQo+ID4gICAgID4gKyAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiA+ICAgICA+ICsgICAgcmV0dXJuOw0KPiA+ICAgICA+ICsgIH0N Cj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVQcm90b2NvbCAo JmdFZmlNbUNvbW11bmljYXRpb24yUHJvdG9jb2xHdWlkLA0KPiA+IE5VTEwsDQo+ID4gICAgID4g KFZPSUQgKiopJm1NbUNvbW11bmljYXRpb24yKTsNCj4gPiAgICAgPiArICBBU1NFUlRfRUZJX0VS Uk9SIChTdGF0dXMpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsg IC8vIEFsbG9jYXRlIG1lbW9yeSBmb3IgdmFyaWFibGUgY29tbXVuaWNhdGUgYnVmZmVyLg0KPiA+ ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgU3RhdHVzID0gR2V0VmFyaWFibGVQYXlsb2FkU2l6 ZSAoJm1WYXJpYWJsZUJ1ZmZlclBheWxvYWRTaXplKTsNCj4gPiAgICAgPiArICBBU1NFUlRfRUZJ X0VSUk9SIChTdGF0dXMpOw0KPiA+ICAgICA+ICsgIG1WYXJpYWJsZUJ1ZmZlclNpemUgPSBTTU1f Q09NTVVOSUNBVEVfSEVBREVSX1NJWkUgKw0KPiA+ICAgICA+IFNNTV9WQVJJQUJMRV9DT01NVU5J Q0FURV9IRUFERVJfU0laRSArDQo+ID4gbVZhcmlhYmxlQnVmZmVyUGF5bG9hZFNpemU7DQo+ID4g ICAgID4gKyAgbVZhcmlhYmxlQnVmZmVyICAgICA9IEFsbG9jYXRlUnVudGltZVBvb2wgKG1WYXJp YWJsZUJ1ZmZlclNpemUpOw0KPiA+ICAgICA+ICsgIEFTU0VSVCAobVZhcmlhYmxlQnVmZmVyICE9 IE5VTEwpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8vIFNh dmUgdGhlIGJ1ZmZlciBwaHlzaWNhbCBhZGRyZXNzIHVzZWQgZm9yIFNNTSBjb25tdW5pY2F0aW9u Lg0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgbVZhcmlhYmxlQnVmZmVyUGh5c2ljYWwg PSBtVmFyaWFibGVCdWZmZXI7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIGlmIChGZWF0dXJl UGNkR2V0IChQY2RFbmFibGVWYXJpYWJsZVJ1bnRpbWVDYWNoZSkpIHsNCj4gPiAgICAgPiArICAg IERFQlVHICgoREVCVUdfSU5GTywgIlZhcmlhYmxlIGRyaXZlciBydW50aW1lIGNhY2hlIGlzIGVu YWJsZWQuXG4iKSk7DQo+ID4gICAgID4gKyAgICAvLw0KPiA+ICAgICA+ICsgICAgLy8gQWxsb2Nh dGUgcnVudGltZSB2YXJpYWJsZSBjYWNoZSBtZW1vcnkgYnVmZmVycy4NCj4gPiAgICAgPiArICAg IC8vDQo+ID4gICAgID4gKyAgICBTdGF0dXMgPSAgR2V0UnVudGltZUNhY2hlSW5mbyAoDQo+ID4g ICAgID4gKyAgICAgICAgICAgICAgICAmbVZhcmlhYmxlUnVudGltZUhvYkNhY2hlQnVmZmVyU2l6 ZSwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICZtVmFyaWFibGVSdW50aW1lTnZDYWNoZUJ1 ZmZlclNpemUsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAmbVZhcmlhYmxlUnVudGltZVZv bGF0aWxlQ2FjaGVCdWZmZXJTaXplLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgJm1WYXJp YWJsZUF1dGhGb3JtYXQNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICk7DQo+ID4gICAgID4g KyAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICAgICA+ICsgICAgICBTdGF0dXMg PSBJbml0VmFyaWFibGVDYWNoZSAoJm1WYXJpYWJsZVJ1bnRpbWVIb2JDYWNoZUJ1ZmZlciwNCj4g PiAgICAgPiAmbVZhcmlhYmxlUnVudGltZUhvYkNhY2hlQnVmZmVyU2l6ZSk7DQo+ID4gICAgID4g KyAgICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAgID4gKyAgICAgICAgU3Rh dHVzID0gSW5pdFZhcmlhYmxlQ2FjaGUgKCZtVmFyaWFibGVSdW50aW1lTnZDYWNoZUJ1ZmZlciwN Cj4gPiAgICAgPiAmbVZhcmlhYmxlUnVudGltZU52Q2FjaGVCdWZmZXJTaXplKTsNCj4gPiAgICAg PiArICAgICAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICAgICA+ICsgICAgICAg ICAgU3RhdHVzID0gSW5pdFZhcmlhYmxlQ2FjaGUgKCZtVmFyaWFibGVSdW50aW1lVm9sYXRpbGVD YWNoZUJ1ZmZlciwNCj4gPiAgICAgPiAmbVZhcmlhYmxlUnVudGltZVZvbGF0aWxlQ2FjaGVCdWZm ZXJTaXplKTsNCj4gPiAgICAgPiArICAgICAgICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+ID4gICAgID4gKyAgICAgICAgICAgIFN0YXR1cyA9IFNlbmRSdW50aW1lVmFyaWFibGVDYWNo ZUNvbnRleHRUb1NtbSAoKTsNCj4gPiAgICAgPiArICAgICAgICAgICAgaWYgKCFFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gPiAgICAgPiArICAgICAgICAgICAgICBTeW5jUnVudGltZUNhY2hlICgp Ow0KPiA+ICAgICA+ICsgICAgICAgICAgICB9DQo+ID4gICAgID4gKyAgICAgICAgICB9DQo+ID4g ICAgID4gKyAgICAgICAgfQ0KPiA+ICAgICA+ICsgICAgICB9DQo+ID4gICAgID4gKw0KPiA+ICAg ICA+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gICAgID4gKyAgICAgICAg bVZhcmlhYmxlUnVudGltZUhvYkNhY2hlQnVmZmVyICAgICAgPSBOVUxMOw0KPiA+ICAgICA+ICsg ICAgICAgIG1WYXJpYWJsZVJ1bnRpbWVOdkNhY2hlQnVmZmVyICAgICAgID0gTlVMTDsNCj4gPiAg ICAgPiArICAgICAgICBtVmFyaWFibGVSdW50aW1lVm9sYXRpbGVDYWNoZUJ1ZmZlciA9IE5VTEw7 DQo+ID4gICAgID4gKyAgICAgIH0NCj4gPiAgICAgPiArICAgIH0NCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+ICAgICA+ICsgIH0gZWxz ZSB7DQo+ID4gICAgID4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJWYXJpYWJsZSBkcml2ZXIg cnVudGltZSBjYWNoZSBpcyBkaXNhYmxlZC5cbiIpKTsNCj4gPiAgICAgPiArICB9DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgIGdSVC0+R2V0VmFyaWFibGUgICAgICAgICA9IFJ1bnRpbWVTZXJ2 aWNlR2V0VmFyaWFibGU7DQo+ID4gICAgID4gKyAgZ1JULT5HZXROZXh0VmFyaWFibGVOYW1lID0g UnVudGltZVNlcnZpY2VHZXROZXh0VmFyaWFibGVOYW1lOw0KPiA+ICAgICA+ICsgIGdSVC0+U2V0 VmFyaWFibGUgICAgICAgICA9IFJ1bnRpbWVTZXJ2aWNlU2V0VmFyaWFibGU7DQo+ID4gICAgID4g KyAgZ1JULT5RdWVyeVZhcmlhYmxlSW5mbyAgID0gUnVudGltZVNlcnZpY2VRdWVyeVZhcmlhYmxl SW5mbzsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBJbnN0 YWxsIHRoZSBWYXJpYWJsZSBBcmNoaXRlY3R1cmFsIFByb3RvY29sIG9uIGEgbmV3IGhhbmRsZS4N Cj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIFN0YXR1cyA9IGdCUy0+SW5zdGFsbFByb3Rv Y29sSW50ZXJmYWNlICgNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgJm1IYW5kbGUsDQo+ ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICZnRWZpVmFyaWFibGVBcmNoUHJvdG9jb2xHdWlk LA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICBFRklfTkFUSVZFX0lOVEVSRkFDRSwNCj4g PiAgICAgPiArICAgICAgICAgICAgICAgICAgTlVMTA0KPiA+ICAgICA+ICsgICAgICAgICAgICAg ICAgICApOw0KPiA+ICAgICA+ICsgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsgIG1WYXJpYWJsZUxvY2suUmVxdWVzdFRvTG9jayA9IFZhcmlhYmxl TG9ja1JlcXVlc3RUb0xvY2s7DQo+ID4gICAgID4gKyAgU3RhdHVzICAgICAgICAgICAgICAgICAg ICAgID0gZ0JTLT5JbnN0YWxsTXVsdGlwbGVQcm90b2NvbEludGVyZmFjZXMgKA0KPiA+ICAgICA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbUhhbmRsZSwNCj4gPiAg ICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdFZGtpaVZhcmlh YmxlTG9ja1Byb3RvY29sR3VpZCwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJm1WYXJpYWJsZUxvY2ssDQo+ID4gICAgID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiAgICAgPiArICBBU1NFUlRfRUZJX0VSUk9S IChTdGF0dXMpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBtVmFyQ2hlY2suUmVnaXN0ZXJT ZXRWYXJpYWJsZUNoZWNrSGFuZGxlciA9DQo+ID4gICAgID4gVmFyQ2hlY2tSZWdpc3RlclNldFZh cmlhYmxlQ2hlY2tIYW5kbGVyOw0KPiA+ICAgICA+ICsgIG1WYXJDaGVjay5WYXJpYWJsZVByb3Bl cnR5U2V0ICAgICAgICAgICAgID0gVmFyQ2hlY2tWYXJpYWJsZVByb3BlcnR5U2V0Ow0KPiA+ICAg ICA+ICsgIG1WYXJDaGVjay5WYXJpYWJsZVByb3BlcnR5R2V0ICAgICAgICAgICAgID0gVmFyQ2hl Y2tWYXJpYWJsZVByb3BlcnR5R2V0Ow0KPiA+ICAgICA+ICsgIFN0YXR1cyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgID0gZ0JTLT5JbnN0YWxsTXVsdGlwbGVQcm90b2NvbEludGVy ZmFjZXMgKA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZtSGFuZGxlLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnRWRraWlWYXJDaGVja1Byb3RvY29s R3VpZCwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmbVZhckNoZWNrLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwNCj4gPiAgICAgPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiA+ICAg ICA+ICsgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ ICsgIENvbnRleHRJbi5TdHJ1Y3RTaXplICAgID0gc2l6ZW9mIChDb250ZXh0SW4pOw0KPiA+ICAg ICA+ICsgIENvbnRleHRJbi5TdHJ1Y3RWZXJzaW9uID0NCj4gPiAgICAgPiBQUk9URUNURURfVkFS SUFCTEVfQ09OVEVYVF9JTl9TVFJVQ1RfVkVSU0lPTjsNCj4gPiAgICAgPiArDQo+ID4gICAgID4g KyAgQ29udGV4dEluLkZpbmRWYXJpYWJsZVNtbSAgICAgPSBGaW5kVmFyaWFibGVJblNtbTsNCj4g PiAgICAgPiArICBDb250ZXh0SW4uR2V0VmFyaWFibGVJbmZvICAgICA9IEdldFZhcmlhYmxlSW5m bzsNCj4gPiAgICAgPiArICBDb250ZXh0SW4uR2V0TmV4dFZhcmlhYmxlSW5mbyA9IEdldE5leHRW YXJpYWJsZUluZm87DQo+ID4gICAgID4gKyAgQ29udGV4dEluLlZhcmlhYmxlU2VydmljZVVzZXIg PSBGcm9tUnVudGltZU1vZHVsZTsNCj4gPiAgICAgPiArICBDb250ZXh0SW4uTWF4VmFyaWFibGVT aXplICAgICA9IDA7DQo+ID4gICAgID4gKyAgQ29udGV4dEluLlVwZGF0ZVZhcmlhYmxlU3RvcmUg PSBOVUxMOw0KPiA+ICAgICA+ICsgIENvbnRleHRJbi5VcGRhdGVWYXJpYWJsZSAgICAgID0gTlVM TDsNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgU3RhdHVzID0gUHJvdGVjdGVkVmFyaWFibGVM aWJJbml0aWFsaXplICgmQ29udGV4dEluKTsNCj4gPiAgICAgPiArICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ID4gICAgID4gKyAgICBERUJVRyAoKA0KPiA+ICAgICA+ICsgICAgICBERUJV R19JTkZPLA0KPiA+ICAgICA+ICsgICAgICAiJWE6ICVkIFByb3RlY3RlZFZhcmlhYmxlTGliSW5p dGlhbGl6ZSgpIHJldHVybiBzdGF0dXM6ICVyXG4iLA0KPiA+ICAgICA+ICsgICAgICBfX0ZVTkNU SU9OX18sDQo+ID4gICAgID4gKyAgICAgIF9fTElORV9fLA0KPiA+ICAgICA+ICsgICAgICBTdGF0 dXMNCj4gPiAgICAgPiArICAgICAgKSk7DQo+ID4gICAgID4gKyAgfQ0KPiA+ICAgICA+ICsNCj4g PiAgICAgPiArICBnQlMtPkNsb3NlRXZlbnQgKEV2ZW50KTsNCj4gPiAgICAgPiArfQ0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgU01NIE5vbi1Wb2xhdGlsZSB2YXJp YWJsZSB3cml0ZSBzZXJ2aWNlIGlzIHJlYWR5IG5vdGlmeSBldmVudCBoYW5kbGVyLg0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW1baW5dIEV2ZW50ICAgIEV2ZW50IHdob3NlIG5vdGlm aWNhdGlvbiBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkLg0KPiA+ICAgICA+ICsgIEBwYXJhbVtp bl0gQ29udGV4dCAgUG9pbnRlciB0byB0aGUgbm90aWZpY2F0aW9uIGZ1bmN0aW9uJ3MgY29udGV4 dC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtWT0lEDQo+ID4gICAg ID4gK0VGSUFQSQ0KPiA+ICAgICA+ICtTbW1WYXJpYWJsZVdyaXRlUmVhZHkgKA0KPiA+ICAgICA+ ICsgIElOICBFRklfRVZFTlQgIEV2ZW50LA0KPiA+ICAgICA+ICsgIElOICBWT0lEICAgICAgICpD b250ZXh0DQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgRUZJX1NU QVRVUyAgU3RhdHVzOw0KPiA+ICAgICA+ICsgIFZPSUQgICAgICAgICpQcm90b2NvbE9wczsNCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBDaGVjayB3aGV0aGVy IHRoZSBwcm90b2NvbCBpcyBpbnN0YWxsZWQgb3Igbm90Lg0KPiA+ICAgICA+ICsgIC8vDQo+ID4g ICAgID4gKyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVQcm90b2NvbCAoJmdTbW1WYXJpYWJsZVdyaXRl R3VpZCwgTlVMTCwgKFZPSUQNCj4gPiAgICAgPiAqKikmUHJvdG9jb2xPcHMpOw0KPiA+ICAgICA+ ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiArICAgIHJldHVybjsNCj4g PiAgICAgPiArICB9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAg Ly8gU29tZSBTZWN1cmUgQm9vdCBQb2xpY3kgVmFyIChTZWN1cmVCb290LCBldGMpIHVwZGF0ZXMg Zm9sbG93aW5nDQo+IG90aGVyDQo+ID4gICAgID4gKyAgLy8gU2VjdXJlIEJvb3QgUG9saWN5IFZh cmlhYmxlIGNoYW5nZS4gIFJlY29yZCB0aGVpciBpbml0aWFsIHZhbHVlLg0KPiA+ICAgICA+ICsg IC8vDQo+ID4gICAgID4gKyAgUmVjb3JkU2VjdXJlQm9vdFBvbGljeVZhckRhdGEgKCk7DQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgIFN0YXR1cyA9IGdCUy0+SW5zdGFsbFByb3RvY29sSW50ZXJm YWNlICgNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgJm1IYW5kbGUsDQo+ID4gICAgID4g KyAgICAgICAgICAgICAgICAgICZnRWZpVmFyaWFibGVXcml0ZUFyY2hQcm90b2NvbEd1aWQsDQo+ ID4gICAgID4gKyAgICAgICAgICAgICAgICAgIEVGSV9OQVRJVkVfSU5URVJGQUNFLA0KPiA+ICAg ICA+ICsgICAgICAgICAgICAgICAgICBOVUxMDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAg ICk7DQo+ID4gICAgID4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyAgZ0JTLT5DbG9zZUV2ZW50IChFdmVudCk7DQo+ID4gICAgID4gK30NCj4g PiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIFZhcmlhYmxlIERyaXZlciBt YWluIGVudHJ5IHBvaW50LiBUaGUgVmFyaWFibGUgZHJpdmVyIHBsYWNlcyB0aGUgNCBFRkkNCj4g PiAgICAgPiArICBydW50aW1lIHNlcnZpY2VzIGluIHRoZSBFRkkgU3lzdGVtIFRhYmxlIGFuZCBp bnN0YWxscyBhcmNoIHByb3RvY29scw0KPiA+ICAgICA+ICsgIGZvciB2YXJpYWJsZSByZWFkIGFu ZCB3cml0ZSBzZXJ2aWNlcyBiZWluZyBhdmFpbGFibGUuIEl0IGFsc28gcmVnaXN0ZXJzDQo+ID4g ICAgID4gKyAgYSBub3RpZmljYXRpb24gZnVuY3Rpb24gZm9yIGFuIEVWVF9TSUdOQUxfVklSVFVB TF9BRERSRVNTX0NIQU5HRQ0KPiA+ICAgICA+IGV2ZW50Lg0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICBAcGFyYW1baW5dIEltYWdlSGFuZGxlICAgIFRoZSBmaXJtd2FyZSBhbGxvY2F0ZWQgaGFu ZGxlIGZvciB0aGUgRUZJDQo+ID4gaW1hZ2UuDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBTeXN0 ZW1UYWJsZSAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSSBTeXN0ZW0gVGFibGUuDQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgVmFyaWFibGUgc2Vydmlj ZSBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQuDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8N Cj4gPiAgICAgPiArRUZJX1NUQVRVUw0KPiA+ICAgICA+ICtFRklBUEkNCj4gPiAgICAgPiArVmFy aWFibGVTbW1SdW50aW1lSW5pdGlhbGl6ZSAoDQo+ID4gICAgID4gKyAgSU4gRUZJX0hBTkRMRSAg ICAgICAgSW1hZ2VIYW5kbGUsDQo+ID4gICAgID4gKyAgSU4gRUZJX1NZU1RFTV9UQUJMRSAgKlN5 c3RlbVRhYmxlDQo+ID4gICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgVk9J RCAgICAgICAqU21tVmFyaWFibGVSZWdpc3RyYXRpb247DQo+ID4gICAgID4gKyAgVk9JRCAgICAg ICAqU21tVmFyaWFibGVXcml0ZVJlZ2lzdHJhdGlvbjsNCj4gPiAgICAgPiArICBFRklfRVZFTlQg IE9uUmVhZHlUb0Jvb3RFdmVudDsNCj4gPiAgICAgPiArICBFRklfRVZFTlQgIEV4aXRCb290U2Vy dmljZUV2ZW50Ow0KPiA+ICAgICA+ICsgIEVGSV9FVkVOVCAgTGVnYWN5Qm9vdEV2ZW50Ow0KPiA+ ICAgICA+ICsNCj4gPiAgICAgPiArICBFZmlJbml0aWFsaXplTG9jayAoJm1WYXJpYWJsZVNlcnZp Y2VzTG9jaywgVFBMX05PVElGWSk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4g ICAgID4gKyAgLy8gU21tIHZhcmlhYmxlIHNlcnZpY2UgaXMgcmVhZHkNCj4gPiAgICAgPiArICAv Lw0KPiA+ICAgICA+ICsgIEVmaUNyZWF0ZVByb3RvY29sTm90aWZ5RXZlbnQgKA0KPiA+ICAgICA+ ICsgICAgJmdFZmlTbW1WYXJpYWJsZVByb3RvY29sR3VpZCwNCj4gPiAgICAgPiArICAgIFRQTF9D QUxMQkFDSywNCj4gPiAgICAgPiArICAgIFNtbVZhcmlhYmxlUmVhZHksDQo+ID4gICAgID4gKyAg ICBOVUxMLA0KPiA+ICAgICA+ICsgICAgJlNtbVZhcmlhYmxlUmVnaXN0cmF0aW9uDQo+ID4gICAg ID4gKyAgICApOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIC8v IFNtbSBOb24tVm9sYXRpbGUgdmFyaWFibGUgd3JpdGUgc2VydmljZSBpcyByZWFkeQ0KPiA+ICAg ICA+ICsgIC8vDQo+ID4gICAgID4gKyAgRWZpQ3JlYXRlUHJvdG9jb2xOb3RpZnlFdmVudCAoDQo+ ID4gICAgID4gKyAgICAmZ1NtbVZhcmlhYmxlV3JpdGVHdWlkLA0KPiA+ICAgICA+ICsgICAgVFBM X0NBTExCQUNLLA0KPiA+ICAgICA+ICsgICAgU21tVmFyaWFibGVXcml0ZVJlYWR5LA0KPiA+ICAg ICA+ICsgICAgTlVMTCwNCj4gPiAgICAgPiArICAgICZTbW1WYXJpYWJsZVdyaXRlUmVnaXN0cmF0 aW9uDQo+ID4gICAgID4gKyAgICApOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICAvLw0KPiA+ ICAgICA+ICsgIC8vIFJlZ2lzdGVyIHRoZSBldmVudCB0byByZWNsYWltIHZhcmlhYmxlIGZvciBP UyB1c2FnZS4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsgIEVmaUNyZWF0ZUV2ZW50UmVh ZHlUb0Jvb3RFeCAoDQo+ID4gICAgID4gKyAgICBUUExfTk9USUZZLA0KPiA+ICAgICA+ICsgICAg T25SZWFkeVRvQm9vdCwNCj4gPiAgICAgPiArICAgIE5VTEwsDQo+ID4gICAgID4gKyAgICAmT25S ZWFkeVRvQm9vdEV2ZW50DQo+ID4gICAgID4gKyAgICApOw0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICAvLw0KPiA+ICAgICA+ICsgIC8vIFJlZ2lzdGVyIHRoZSBldmVudCB0byBpbmZvcm0gU01N IHZhcmlhYmxlIHRoYXQgaXQgaXMgYXQgcnVudGltZS4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAg ICA+ICsgIGdCUy0+Q3JlYXRlRXZlbnRFeCAoDQo+ID4gICAgID4gKyAgICAgICAgIEVWVF9OT1RJ RllfU0lHTkFMLA0KPiA+ICAgICA+ICsgICAgICAgICBUUExfTk9USUZZLA0KPiA+ICAgICA+ICsg ICAgICAgICBPbkV4aXRCb290U2VydmljZXMsDQo+ID4gICAgID4gKyAgICAgICAgIE5VTEwsDQo+ ID4gICAgID4gKyAgICAgICAgICZnRWZpRXZlbnRFeGl0Qm9vdFNlcnZpY2VzR3VpZCwNCj4gPiAg ICAgPiArICAgICAgICAgJkV4aXRCb290U2VydmljZUV2ZW50DQo+ID4gICAgID4gKyAgICAgICAg ICk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsgIC8vDQo+ID4gICAgID4gKyAgLy8gUmVnaXN0 ZXIgdGhlIGV2ZW50IHRvIGluZm9ybSBTTU0gdmFyaWFibGUgdGhhdCBpdCBpcyBhdCBydW50aW1l IGZvcg0KPiA+IGxlZ2FjeQ0KPiA+ICAgICA+IGJvb3QuDQo+ID4gICAgID4gKyAgLy8gUmV1c2Ug T25FeGl0Qm9vdFNlcnZpY2VzKCkgaGVyZS4NCj4gPiAgICAgPiArICAvLw0KPiA+ICAgICA+ICsg IEVmaUNyZWF0ZUV2ZW50TGVnYWN5Qm9vdEV4ICgNCj4gPiAgICAgPiArICAgIFRQTF9OT1RJRlks DQo+ID4gICAgID4gKyAgICBPbkV4aXRCb290U2VydmljZXMsDQo+ID4gICAgID4gKyAgICBOVUxM LA0KPiA+ICAgICA+ICsgICAgJkxlZ2FjeUJvb3RFdmVudA0KPiA+ICAgICA+ICsgICAgKTsNCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyAgLy8NCj4gPiAgICAgPiArICAvLyBSZWdpc3RlciB0aGUg ZXZlbnQgdG8gY29udmVydCB0aGUgcG9pbnRlciBmb3IgcnVudGltZS4NCj4gPiAgICAgPiArICAv Lw0KPiA+ICAgICA+ICsgIGdCUy0+Q3JlYXRlRXZlbnRFeCAoDQo+ID4gICAgID4gKyAgICAgICAg IEVWVF9OT1RJRllfU0lHTkFMLA0KPiA+ICAgICA+ICsgICAgICAgICBUUExfTk9USUZZLA0KPiA+ ICAgICA+ICsgICAgICAgICBWYXJpYWJsZUFkZHJlc3NDaGFuZ2VFdmVudCwNCj4gPiAgICAgPiAr ICAgICAgICAgTlVMTCwNCj4gPiAgICAgPiArICAgICAgICAgJmdFZmlFdmVudFZpcnR1YWxBZGRy ZXNzQ2hhbmdlR3VpZCwNCj4gPiAgICAgPiArICAgICAgICAgJm1WaXJ0dWFsQWRkcmVzc0NoYW5n ZUV2ZW50DQo+ID4gICAgID4gKyAgICAgICAgICk7DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsg IC8vIEluaXRpYWxpemUgdGhlIFZhcmlhYmxlUG9saWN5IHByb3RvY29sIGFuZCBlbmdpbmUuDQo+ ID4gICAgID4gKyAgVmFyaWFibGVQb2xpY3lTbW1EeGVNYWluIChJbWFnZUhhbmRsZSwgU3lzdGVt VGFibGUpOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ ID4gICAgID4gK30NCj4gPiAgICAgPiBkaWZmIC0tZ2l0DQo+ID4gICAgID4NCj4gPg0KPiBhL01k ZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFi bGVTdGFuZGFsb24NCj4gPiAgICAgPiBlTW0uYw0KPiA+ICAgICA+DQo+ID4NCj4gYi9NZGVNb2R1 bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlU3Rh bmRhbG9uDQo+ID4gICAgID4gZU1tLmMNCj4gPiAgICAgPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K PiA+ICAgICA+IGluZGV4IDAwMDAwMDAwMDAwMC4uOTQzOTkzZWI2NzM4DQo+ID4gICAgID4gLS0t IC9kZXYvbnVsbA0KPiA+ICAgICA+ICsrKw0KPiA+ICAgICA+DQo+ID4NCj4gYi9NZGVNb2R1bGVQ a2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlU3RhbmRh bG9uDQo+ID4gICAgID4gZU1tLmMNCj4gPiAgICAgPiBAQCAtMCwwICsxLDg5IEBADQo+ID4gICAg ID4gKy8qKiBAZmlsZQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBQYXJ0cyBvZiB0aGUgU01N L01NIGltcGxlbWVudGF0aW9uIHRoYXQgYXJlIHNwZWNpZmljIHRvIHN0YW5kYWxvbmUNCj4gPiBN TQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArQ29weXJpZ2h0IChjKSAyMDExIC0gMjAxOCwgSW50 ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIDxCUj4NCj4gPiAgICAgPiArQ29w eXJpZ2h0IChjKSAyMDE4LCBMaW5hcm8sIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gPEJSPg0K PiA+ICAgICA+ICtTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsjaW5j bHVkZSAiVmFyaWFibGUuaCINCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ ICsgIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBidWZmZXIgaXMgdmFsaWQgcGVyIHByb2Nl c3NvciBhcmNoaXRlY3R1cmUgYW5kDQo+ID4gICAgID4gKyAgZG9lcyBub3Qgb3ZlcmxhcCB3aXRo IFNNUkFNLg0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFyYW0gQnVmZmVyIFRoZSBidWZm ZXIgc3RhcnQgYWRkcmVzcyB0byBiZSBjaGVja2VkLg0KPiA+ICAgICA+ICsgIEBwYXJhbSBMZW5n dGggVGhlIGJ1ZmZlciBsZW5ndGggdG8gYmUgY2hlY2tlZC4NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyAgQHJldHZhbCBUUlVFICBUaGlzIGJ1ZmZlciBpcyB2YWxpZCBwZXIgcHJvY2Vzc29yIGFy Y2hpdGVjdHVyZSBhbmQgZG9lcw0KPiBub3QNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgIG92 ZXJsYXAgd2l0aCBTTVJBTS4NCj4gPiAgICAgPiArICBAcmV0dmFsIEZBTFNFIFRoaXMgYnVmZmVy IGlzIG5vdCB2YWxpZCBwZXIgcHJvY2Vzc29yIGFyY2hpdGVjdHVyZSBvcg0KPiA+IG92ZXJsYXBz DQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICB3aXRoIFNNUkFNLg0KPiA+ICAgICA+ICsqKi8N Cj4gPiAgICAgPiArQk9PTEVBTg0KPiA+ICAgICA+ICtWYXJpYWJsZVNtbUlzQnVmZmVyT3V0c2lk ZVNtbVZhbGlkICgNCj4gPiAgICAgPiArICBJTiBFRklfUEhZU0lDQUxfQUREUkVTUyAgQnVmZmVy LA0KPiA+ICAgICA+ICsgIElOIFVJTlQ2NCAgICAgICAgICAgICAgICBMZW5ndGgNCj4gPiAgICAg PiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICByZXR1cm4gVFJVRTsNCj4gPiAgICAg PiArfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ID4gICAgID4gKyAgTm90aWZ5IHRo ZSBzeXN0ZW0gdGhhdCB0aGUgU01NIHZhcmlhYmxlIGRyaXZlciBpcyByZWFkeS4NCj4gPiAgICAg PiArKiovDQo+ID4gICAgID4gK1ZPSUQNCj4gPiAgICAgPiArVmFyaWFibGVOb3RpZnlTbW1SZWFk eSAoDQo+ID4gICAgID4gKyAgVk9JRA0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0KPiA+ ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBOb3Rp ZnkgdGhlIHN5c3RlbSB0aGF0IHRoZSBTTU0gdmFyaWFibGUgd3JpdGUgZHJpdmVyIGlzIHJlYWR5 Lg0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArVk9JRA0KPiA+ICAgICA+ICtWYXJpYWJsZU5v dGlmeVNtbVdyaXRlUmVhZHkgKA0KPiA+ICAgICA+ICsgIFZPSUQNCj4gPiAgICAgPiArICApDQo+ ID4gICAgID4gK3sNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArLyoqDQo+ ID4gICAgID4gKyAgVmFyaWFibGUgc2VydmljZSBNTSBkcml2ZXIgZW50cnkgcG9pbnQuDQo+ID4g ICAgID4gKw0KPiA+ICAgICA+ICsgIEBwYXJhbVtpbl0gSW1hZ2VIYW5kbGUgICAgQSBoYW5kbGUg Zm9yIHRoZSBpbWFnZSB0aGF0IGlzIGluaXRpYWxpemluZyB0aGlzDQo+ID4gICAgID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXINCj4gPiAgICAgPiArICBAcGFyYW1baW5dIE1t U3lzdGVtVGFibGUgIEEgcG9pbnRlciB0byB0aGUgTU0gc3lzdGVtIHRhYmxlDQo+ID4gICAgID4g Kw0KPiA+ICAgICA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgVmFyaWFibGUgc2Vydmlj ZSBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQuDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtF RklfU1RBVFVTDQo+ID4gICAgID4gK0VGSUFQSQ0KPiA+ICAgICA+ICtWYXJpYWJsZVNlcnZpY2VJ bml0aWFsaXplICgNCj4gPiAgICAgPiArICBJTiBFRklfSEFORExFICAgICAgICAgICBJbWFnZUhh bmRsZSwNCj4gPiAgICAgPiArICBJTiBFRklfTU1fU1lTVEVNX1RBQkxFICAqTW1TeXN0ZW1UYWJs ZQ0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0KPiA+ICAgICA+ICsgIHJldHVybiBNbVZh cmlhYmxlU2VydmljZUluaXRpYWxpemUgKCk7DQo+ID4gICAgID4gK30NCj4gPiAgICAgPiArDQo+ ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIFdoZXRoZXIgdGhlIFRDRyBvciBUQ0cyIHByb3Rv Y29scyBhcmUgaW5zdGFsbGVkIGluIHRoZSBVRUZJIHByb3RvY29sDQo+ID4gICAgID4gZGF0YWJh c2UuDQo+ID4gICAgID4gKyAgVGhpcyBpbmZvcm1hdGlvbiBpcyB1c2VkIGJ5IHRoZSBNb3JMb2Nr IGNvZGUgdG8gaW5mZXIgd2hldGhlciBhbg0KPiBleGlzdGluZw0KPiA+ICAgICA+ICsgIE1PUiB2 YXJpYWJsZSBpcyBsZWdpdGltYXRlIG9yIG5vdC4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAg QHJldHZhbCBUUlVFICBFaXRoZXIgdGhlIFRDRyBvciBUQ0cyIHByb3RvY29sIGlzIGluc3RhbGxl ZCBpbiB0aGUgVUVGSQ0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgcHJvdG9jb2wgZGF0YWJh c2UNCj4gPiAgICAgPiArICBAcmV0dmFsIEZBTFNFIE5laXRoZXIgdGhlIFRDRyBub3IgdGhlIFRD RzIgcHJvdG9jb2wgaXMgaW5zdGFsbGVkIGluIHRoZQ0KPiA+IFVFRkkNCj4gPiAgICAgPiArICAg ICAgICAgICAgICAgIHByb3RvY29sIGRhdGFiYXNlDQo+ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ ICtCT09MRUFODQo+ID4gICAgID4gK1ZhcmlhYmxlSGF2ZVRjZ1Byb3RvY29scyAoDQo+ID4gICAg ID4gKyAgVk9JRA0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0KPiA+ICAgICA+ICsgIHJl dHVybiBGQUxTRTsNCj4gPiAgICAgPiArfQ0KPiA+ICAgICA+IGRpZmYgLS1naXQNCj4gPiAgICAg Pg0KPiA+DQo+IGEvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVu dGltZUR4ZS9WYXJpYWJsZVRyYWRpdGlvbg0KPiA+ICAgICA+IGFsTW0uYw0KPiA+ICAgICA+DQo+ ID4NCj4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1l RHhlL1ZhcmlhYmxlVHJhZGl0aW9uDQo+ID4gICAgID4gYWxNbS5jDQo+ID4gICAgID4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gPiAgICAgPiBpbmRleCAwMDAwMDAwMDAwMDAuLjAzNjljM2NkMDFi MQ0KPiA+ICAgICA+IC0tLSAvZGV2L251bGwNCj4gPiAgICAgPiArKysNCj4gPiAgICAgPg0KPiA+ DQo+IGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4 ZS9WYXJpYWJsZVRyYWRpdGlvbg0KPiA+ICAgICA+IGFsTW0uYw0KPiA+ICAgICA+IEBAIC0wLDAg KzEsMTMwIEBADQo+ID4gICAgID4gKy8qKiBAZmlsZQ0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiAr ICBQYXJ0cyBvZiB0aGUgU01NL01NIGltcGxlbWVudGF0aW9uIHRoYXQgYXJlIHNwZWNpZmljIHRv IHRyYWRpdGlvbmFsDQo+IE1NDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICtDb3B5cmlnaHQgKGMp IDIwMTEgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gPEJS Pg0KPiA+ICAgICA+ICtDb3B5cmlnaHQgKGMpIDIwMTgsIExpbmFybywgTHRkLiBBbGwgcmlnaHRz IHJlc2VydmVkLiA8QlI+DQo+ID4gICAgID4gK1NQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0Qt Mi1DbGF1c2UtUGF0ZW50DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiAr DQo+ID4gICAgID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxpYi5o Pg0KPiA+ICAgICA+ICsjaW5jbHVkZSA8TGlicmFyeS9TbW1NZW1MaWIuaD4NCj4gPiAgICAgPiAr I2luY2x1ZGUgIlZhcmlhYmxlLmgiDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAg ICAgPiArICBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgYnVmZmVyIGlzIHZhbGlkIHBlciBw cm9jZXNzb3IgYXJjaGl0ZWN0dXJlIGFuZA0KPiA+ICAgICA+ICsgIGRvZXMgbm90IG92ZXJsYXAg d2l0aCBTTVJBTS4NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHBhcmFtIEJ1ZmZlciBUaGUg YnVmZmVyIHN0YXJ0IGFkZHJlc3MgdG8gYmUgY2hlY2tlZC4NCj4gPiAgICAgPiArICBAcGFyYW0g TGVuZ3RoIFRoZSBidWZmZXIgbGVuZ3RoIHRvIGJlIGNoZWNrZWQuDQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsgIEByZXR2YWwgVFJVRSAgVGhpcyBidWZmZXIgaXMgdmFsaWQgcGVyIHByb2Nlc3Nv ciBhcmNoaXRlY3R1cmUgYW5kIGRvZXMNCj4gbm90DQo+ID4gICAgID4gKyAgICAgICAgICAgICAg ICBvdmVybGFwIHdpdGggU01SQU0uDQo+ID4gICAgID4gKyAgQHJldHZhbCBGQUxTRSBUaGlzIGJ1 ZmZlciBpcyBub3QgdmFsaWQgcGVyIHByb2Nlc3NvciBhcmNoaXRlY3R1cmUgb3INCj4gPiBvdmVy bGFwcw0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgd2l0aCBTTVJBTS4NCj4gPiAgICAgPiAr KiovDQo+ID4gICAgID4gK0JPT0xFQU4NCj4gPiAgICAgPiArVmFyaWFibGVTbW1Jc0J1ZmZlck91 dHNpZGVTbW1WYWxpZCAoDQo+ID4gICAgID4gKyAgSU4gRUZJX1BIWVNJQ0FMX0FERFJFU1MgIEJ1 ZmZlciwNCj4gPiAgICAgPiArICBJTiBVSU5UNjQgICAgICAgICAgICAgICAgTGVuZ3RoDQo+ID4g ICAgID4gKyAgKQ0KPiA+ICAgICA+ICt7DQo+ID4gICAgID4gKyAgcmV0dXJuIFNtbUlzQnVmZmVy T3V0c2lkZVNtbVZhbGlkIChCdWZmZXIsIExlbmd0aCk7DQo+ID4gICAgID4gK30NCj4gPiAgICAg PiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIE5vdGlmeSB0aGUgc3lzdGVtIHRoYXQg dGhlIFNNTSB2YXJpYWJsZSBkcml2ZXIgaXMgcmVhZHkuDQo+ID4gICAgID4gKyoqLw0KPiA+ICAg ICA+ICtWT0lEDQo+ID4gICAgID4gK1ZhcmlhYmxlTm90aWZ5U21tUmVhZHkgKA0KPiA+ICAgICA+ ICsgIFZPSUQNCj4gPiAgICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBFRklf U1RBVFVTICBTdGF0dXM7DQo+ID4gICAgID4gKyAgRUZJX0hBTkRMRSAgSGFuZGxlOw0KPiA+ICAg ICA+ICsNCj4gPiAgICAgPiArICBIYW5kbGUgPSBOVUxMOw0KPiA+ICAgICA+ICsgIFN0YXR1cyA9 IGdCUy0+SW5zdGFsbFByb3RvY29sSW50ZXJmYWNlICgNCj4gPiAgICAgPiArICAgICAgICAgICAg ICAgICAgJkhhbmRsZSwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgJmdFZmlTbW1WYXJp YWJsZVByb3RvY29sR3VpZCwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgRUZJX05BVElW RV9JTlRFUkZBQ0UsDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgIE5VTEwNCj4gPiAgICAg PiArICAgICAgICAgICAgICAgICAgKTsNCj4gPiAgICAgPiArICBBU1NFUlRfRUZJX0VSUk9SIChT dGF0dXMpOw0KPiA+ICAgICA+ICt9DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAg ICAgPiArICBOb3RpZnkgdGhlIHN5c3RlbSB0aGF0IHRoZSBTTU0gdmFyaWFibGUgd3JpdGUgZHJp dmVyIGlzIHJlYWR5Lg0KPiA+ICAgICA+ICsqKi8NCj4gPiAgICAgPiArVk9JRA0KPiA+ICAgICA+ ICtWYXJpYWJsZU5vdGlmeVNtbVdyaXRlUmVhZHkgKA0KPiA+ICAgICA+ICsgIFZPSUQNCj4gPiAg ICAgPiArICApDQo+ID4gICAgID4gK3sNCj4gPiAgICAgPiArICBFRklfU1RBVFVTICBTdGF0dXM7 DQo+ID4gICAgID4gKyAgRUZJX0hBTkRMRSAgSGFuZGxlOw0KPiA+ICAgICA+ICsNCj4gPiAgICAg PiArICBIYW5kbGUgPSBOVUxMOw0KPiA+ICAgICA+ICsgIFN0YXR1cyA9IGdCUy0+SW5zdGFsbFBy b3RvY29sSW50ZXJmYWNlICgNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgJkhhbmRsZSwN Cj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgJmdTbW1WYXJpYWJsZVdyaXRlR3VpZCwNCj4g PiAgICAgPiArICAgICAgICAgICAgICAgICAgRUZJX05BVElWRV9JTlRFUkZBQ0UsDQo+ID4gICAg ID4gKyAgICAgICAgICAgICAgICAgIE5VTEwNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAg KTsNCj4gPiAgICAgPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+ICAgICA+ICt9 DQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsvKioNCj4gPiAgICAgPiArICBWYXJpYWJsZSBzZXJ2 aWNlIE1NIGRyaXZlciBlbnRyeSBwb2ludA0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBAcGFy YW1baW5dIEltYWdlSGFuZGxlICAgIEEgaGFuZGxlIGZvciB0aGUgaW1hZ2UgdGhhdCBpcyBpbml0 aWFsaXppbmcgdGhpcw0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJp dmVyDQo+ID4gICAgID4gKyAgQHBhcmFtW2luXSBTeXN0ZW1UYWJsZSAgICBBIHBvaW50ZXIgdG8g dGhlIEVGSSBzeXN0ZW0gdGFibGUNCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICBWYXJpYWJsZSBzZXJ2aWNlIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXpl ZC4NCj4gPiAgICAgPiArKiovDQo+ID4gICAgID4gK0VGSV9TVEFUVVMNCj4gPiAgICAgPiArRUZJ QVBJDQo+ID4gICAgID4gK1ZhcmlhYmxlU2VydmljZUluaXRpYWxpemUgKA0KPiA+ICAgICA+ICsg IElOIEVGSV9IQU5ETEUgICAgICAgIEltYWdlSGFuZGxlLA0KPiA+ICAgICA+ICsgIElOIEVGSV9T WVNURU1fVEFCTEUgICpTeXN0ZW1UYWJsZQ0KPiA+ICAgICA+ICsgICkNCj4gPiAgICAgPiArew0K PiA+ICAgICA+ICsgIHJldHVybiBNbVZhcmlhYmxlU2VydmljZUluaXRpYWxpemUgKCk7DQo+ID4g ICAgID4gK30NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKy8qKg0KPiA+ICAgICA+ICsgIFdoZXRo ZXIgdGhlIFRDRyBvciBUQ0cyIHByb3RvY29scyBhcmUgaW5zdGFsbGVkIGluIHRoZSBVRUZJIHBy b3RvY29sDQo+ID4gICAgID4gZGF0YWJhc2UuDQo+ID4gICAgID4gKyAgVGhpcyBpbmZvcm1hdGlv biBpcyB1c2VkIGJ5IHRoZSBNb3JMb2NrIGNvZGUgdG8gaW5mZXIgd2hldGhlciBhbg0KPiBleGlz dGluZw0KPiA+ICAgICA+ICsgIE1PUiB2YXJpYWJsZSBpcyBsZWdpdGltYXRlIG9yIG5vdC4NCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyAgQHJldHZhbCBUUlVFICBFaXRoZXIgdGhlIFRDRyBvciBU Q0cyIHByb3RvY29sIGlzIGluc3RhbGxlZCBpbiB0aGUgVUVGSQ0KPiA+ICAgICA+ICsgICAgICAg ICAgICAgICAgcHJvdG9jb2wgZGF0YWJhc2UNCj4gPiAgICAgPiArICBAcmV0dmFsIEZBTFNFIE5l aXRoZXIgdGhlIFRDRyBub3IgdGhlIFRDRzIgcHJvdG9jb2wgaXMgaW5zdGFsbGVkIGluIHRoZQ0K PiA+IFVFRkkNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgIHByb3RvY29sIGRhdGFiYXNlDQo+ ID4gICAgID4gKyoqLw0KPiA+ICAgICA+ICtCT09MRUFODQo+ID4gICAgID4gK1ZhcmlhYmxlSGF2 ZVRjZ1Byb3RvY29scyAoDQo+ID4gICAgID4gKyAgVk9JRA0KPiA+ICAgICA+ICsgICkNCj4gPiAg ICAgPiArew0KPiA+ICAgICA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiAgICAgPiArICBW T0lEICAgICAgICAqSW50ZXJmYWNlOw0KPiA+ICAgICA+ICsNCj4gPiAgICAgPiArICBTdGF0dXMg PSBnQlMtPkxvY2F0ZVByb3RvY29sICgNCj4gPiAgICAgPiArICAgICAgICAgICAgICAgICAgJmdF ZmlUY2cyUHJvdG9jb2xHdWlkLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICBOVUxMLCAg ICAgICAgICAgICAgICAgICAgIC8vIFJlZ2lzdHJhdGlvbg0KPiA+ICAgICA+ICsgICAgICAgICAg ICAgICAgICAmSW50ZXJmYWNlDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICk7DQo+ID4g ICAgID4gKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAgICAgPiArICAgIHJldHVy biBUUlVFOw0KPiA+ICAgICA+ICsgIH0NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKyAgU3RhdHVz ID0gZ0JTLT5Mb2NhdGVQcm90b2NvbCAoDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICZn RWZpVGNnUHJvdG9jb2xHdWlkLA0KPiA+ICAgICA+ICsgICAgICAgICAgICAgICAgICBOVUxMLCAg ICAgICAgICAgICAgICAgICAgIC8vIFJlZ2lzdHJhdGlvbg0KPiA+ICAgICA+ICsgICAgICAgICAg ICAgICAgICAmSW50ZXJmYWNlDQo+ID4gICAgID4gKyAgICAgICAgICAgICAgICAgICk7DQo+ID4g ICAgID4gKyAgcmV0dXJuICFFRklfRVJST1IgKFN0YXR1cyk7DQo+ID4gICAgID4gK30NCj4gPiAg ICAgPiBkaWZmIC0tZ2l0DQo+ID4gICAgID4NCj4gPg0KPiBhL01kZU1vZHVsZVBrZy9Vbml2ZXJz YWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVSdW50aW1lRA0KPiA+ICAg ICA+IHhlLnVuaQ0KPiA+ICAgICA+DQo+ID4NCj4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1Zh cmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlUnVudGltZUQNCj4gPiAgICAgPiB4 ZS51bmkNCj4gPiAgICAgPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ICAgICA+IGluZGV4IDAw MDAwMDAwMDAwMC4uMjI3YjhjNmZhZDI0DQo+ID4gICAgID4gLS0tIC9kZXYvbnVsbA0KPiA+ICAg ICA+ICsrKw0KPiA+ICAgICA+DQo+ID4NCj4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1Zhcmlh YmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlUnVudGltZUQNCj4gPiAgICAgPiB4ZS51 bmkNCj4gPiAgICAgPiBAQCAtMCwwICsxLDIyIEBADQo+ID4gICAgID4gKy8vIC8qKiBAZmlsZQ0K PiA+ICAgICA+ICsvLyBQcm92aWRlcyB2YXJpYWJsZSBzZXJ2aWNlLg0KPiA+ICAgICA+ICsvLw0K PiA+ICAgICA+ICsvLyBUaGlzIG1vZHVsZSBpbnN0YWxscyB2YXJpYWJsZSBhcmNoIHByb3RvY29s IGFuZCB2YXJpYWJsZSB3cml0ZSBhcmNoDQo+ID4gcHJvdG9jb2wNCj4gPiAgICAgPiB0byBwcm92 aWRlDQo+ID4gICAgID4gKy8vIHZhcmlhYmxlIHNlcnZpY2VzOiBTZXRWYXJpYWJsZSwgR2V0VmFy aWFibGUsIEdldE5leHRWYXJpYWJsZU5hbWUgYW5kDQo+ID4gICAgID4gUXVlcnlWYXJpYWJsZUlu Zm8uDQo+ID4gICAgID4gKy8vDQo+ID4gICAgID4gKy8vIENhdXRpb246IFRoaXMgbW9kdWxlIHJl cXVpcmVzIGFkZGl0aW9uYWwgcmV2aWV3IHdoZW4gbW9kaWZpZWQuDQo+ID4gICAgID4gKy8vIFRo aXMgZHJpdmVyIHdpbGwgaGF2ZSBleHRlcm5hbCBpbnB1dCAtIHZhcmlhYmxlIGRhdGEuDQo+ID4g ICAgID4gKy8vIFRoaXMgZXh0ZXJuYWwgaW5wdXQgbXVzdCBiZSB2YWxpZGF0ZWQgY2FyZWZ1bGx5 IHRvIGF2b2lkIHNlY3VyaXR5IGlzc3Vlcw0KPiA+IHN1Y2gNCj4gPiAgICAgPiBhcw0KPiA+ICAg ICA+ICsvLyBidWZmZXIgb3ZlcmZsb3cgb3IgaW50ZWdlciBvdmVyZmxvdy4NCj4gPiAgICAgPiAr Ly8NCj4gPiAgICAgPiArLy8gQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAxNSwgSW50ZWwgQ29ycG9y YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ICAgICA+ICsvLw0KPiA+ICAgICA+ ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ICAg ICA+ICsvLw0KPiA+ICAgICA+ICsvLyAqKi8NCj4gPiAgICAgPiArDQo+ID4gICAgID4gKw0KPiA+ ICAgICA+ICsjc3RyaW5nIFNUUl9NT0RVTEVfQUJTVFJBQ1QgICAgICAgICAgICAgI2xhbmd1YWdl IGVuLVVTICJQcm92aWRlcw0KPiA+IHZhcmlhYmxlDQo+ID4gICAgID4gc2VydmljZSINCj4gPiAg ICAgPiArDQo+ID4gICAgID4gKyNzdHJpbmcgU1RSX01PRFVMRV9ERVNDUklQVElPTiAgICAgICAg ICAjbGFuZ3VhZ2UgZW4tVVMgIlRoaXMgbW9kdWxlDQo+ID4gICAgID4gaW5zdGFsbHMgdmFyaWFi bGUgYXJjaCBwcm90b2NvbCBhbmQgdmFyaWFibGUgd3JpdGUgYXJjaCBwcm90b2NvbCB0byBwcm92 aWRlDQo+ID4gICAgID4gdmFyaWFibGUgc2VydmljZXM6IFNldFZhcmlhYmxlLCBHZXRWYXJpYWJs ZSwgR2V0TmV4dFZhcmlhYmxlTmFtZSBhbmQNCj4gPiAgICAgPiBRdWVyeVZhcmlhYmxlSW5mby4g Q2F1dGlvbjogVGhpcyBtb2R1bGUgcmVxdWlyZXMgYWRkaXRpb25hbCByZXZpZXcgd2hlbg0KPiA+ ICAgICA+IG1vZGlmaWVkLiBUaGlzIGRyaXZlciB3aWxsIGhhdmUgZXh0ZXJuYWwgaW5wdXQgLSB2 YXJpYWJsZSBkYXRhLiBUaGlzIGV4dGVybmFsDQo+ID4gaW5wdXQNCj4gPiAgICAgPiBtdXN0IGJl IHZhbGlkYXRlZCBjYXJlZnVsbHkgdG8gYXZvaWQgc2VjdXJpdHkgaXNzdWVzIHN1Y2ggYXMgYnVm ZmVyIG92ZXJmbG93DQo+ID4gb3INCj4gPiAgICAgPiBpbnRlZ2VyIG92ZXJmbG93LiINCj4gPiAg ICAgPiArDQo+ID4gICAgID4gZGlmZiAtLWdpdA0KPiA+ICAgICA+DQo+ID4NCj4gYS9NZGVNb2R1 bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlUnVu dGltZUQNCj4gPiAgICAgPiB4ZUV4dHJhLnVuaQ0KPiA+ICAgICA+DQo+ID4NCj4gYi9NZGVNb2R1 bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlUnVu dGltZUQNCj4gPiAgICAgPiB4ZUV4dHJhLnVuaQ0KPiA+ICAgICA+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0DQo+ID4gICAgID4gaW5kZXggMDAwMDAwMDAwMDAwLi5mMDk3NjQxOGZmODENCj4gPiAgICAg PiAtLS0gL2Rldi9udWxsDQo+ID4gICAgID4gKysrDQo+ID4gICAgID4NCj4gPg0KPiBiL01kZU1v ZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVS dW50aW1lRA0KPiA+ICAgICA+IHhlRXh0cmEudW5pDQo+ID4gICAgID4gQEAgLTAsMCArMSwxNCBA QA0KPiA+ICAgICA+ICsvLyAvKiogQGZpbGUNCj4gPiAgICAgPiArLy8gVmFyaWFibGVSdW50aW1l RHhlIExvY2FsaXplZCBTdHJpbmdzIGFuZCBDb250ZW50DQo+ID4gICAgID4gKy8vDQo+ID4gICAg ID4gKy8vIENvcHlyaWdodCAoYykgMjAxMyAtIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwg cmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiAgICAgPiArLy8NCj4gPiAgICAgPiArLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPiAgICAgPiArLy8NCj4g PiAgICAgPiArLy8gKiovDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsjc3RyaW5nIFNUUl9QUk9Q RVJUSUVTX01PRFVMRV9OQU1FDQo+ID4gICAgID4gKyNsYW5ndWFnZSBlbi1VUw0KPiA+ICAgICA+ ICsiVmFyaWFibGVSdW50aW1lRHhlIG1vZHVsZSINCj4gPiAgICAgPiArDQo+ID4gICAgID4gKw0K PiA+ICAgICA+IGRpZmYgLS1naXQNCj4gPiAgICAgPg0KPiA+DQo+IGEvTWRlTW9kdWxlUGtnL1Vu aXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0ZWQvUnVudGltZUR4ZS9WYXJpYWJsZVNtbS51bmkNCj4g PiAgICAgPg0KPiA+DQo+IGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJsZS9Qcm90ZWN0 ZWQvUnVudGltZUR4ZS9WYXJpYWJsZVNtbS51bmkNCj4gPiAgICAgPiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPiA+ICAgICA+IGluZGV4IDAwMDAwMDAwMDAwMC4uNDE0YzdjZGM3YzA1DQo+ID4gICAg ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICAgICA+ICsrKw0KPiA+ICAgICA+DQo+ID4NCj4gYi9NZGVN b2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxl U21tLnVuaQ0KPiA+ICAgICA+IEBAIC0wLDAgKzEsMjcgQEANCj4gPiAgICAgPiArLy8gLyoqIEBm aWxlDQo+ID4gICAgID4gKy8vIFByb3ZpZGVzIFNNTSB2YXJpYWJsZSBzZXJ2aWNlLg0KPiA+ICAg ICA+ICsvLw0KPiA+ICAgICA+ICsvLyBUaGlzIG1vZHVsZSBpbnN0YWxscyBTTU0gdmFyaWFibGUg cHJvdG9jb2wgaW50byBTTU0gcHJvdG9jb2wNCj4gZGF0YWJhc2UsDQo+ID4gICAgID4gKy8vIHdo aWNoIGNhbiBiZSB1c2VkIGJ5IFNNTSBkcml2ZXIsIGFuZCBpbnN0YWxscyBTTU0gdmFyaWFibGUg cHJvdG9jb2wNCj4gPiAgICAgPiArLy8gaW50byBCUyBwcm90b2NvbCBkYXRhYmFzZSwgd2hpY2gg Y2FuIGJlIHVzZWQgdG8gbm90aWZ5IHRoZSBTTU0NCj4gPiBSdW50aW1lDQo+ID4gICAgID4gKy8v IER4ZSBkcml2ZXIgdGhhdCB0aGUgU01NIHZhcmlhYmxlIHNlcnZpY2UgaXMgcmVhZHkuDQo+ID4g ICAgID4gKy8vIFRoaXMgbW9kdWxlIHNob3VsZCBiZSB1c2VkIHdpdGggU01NIFJ1bnRpbWUgRFhF IG1vZHVsZSB0b2dldGhlci4NCj4gPiBUaGUNCj4gPiAgICAgPiArLy8gU01NIFJ1bnRpbWUgRFhF IG1vZHVsZSB3b3VsZCBpbnN0YWxsIHZhcmlhYmxlIGFyY2ggcHJvdG9jb2wgYW5kDQo+ID4gdmFy aWFibGUNCj4gPiAgICAgPiArLy8gd3JpdGUgYXJjaCBwcm90b2NvbCBiYXNlZCBvbiBTTU0gdmFy aWFibGUgbW9kdWxlLg0KPiA+ICAgICA+ICsvLw0KPiA+ICAgICA+ICsvLyBDYXV0aW9uOiBUaGlz IG1vZHVsZSByZXF1aXJlcyBhZGRpdGlvbmFsIHJldmlldyB3aGVuIG1vZGlmaWVkLg0KPiA+ICAg ICA+ICsvLyBUaGlzIGRyaXZlciB3aWxsIGhhdmUgZXh0ZXJuYWwgaW5wdXQgLSB2YXJpYWJsZSBk YXRhIGFuZCBjb21tdW5pY2F0ZQ0KPiA+IGJ1ZmZlciBpbg0KPiA+ICAgICA+IFNNTSBtb2RlLg0K PiA+ICAgICA+ICsvLyBUaGlzIGV4dGVybmFsIGlucHV0IG11c3QgYmUgdmFsaWRhdGVkIGNhcmVm dWxseSB0byBhdm9pZCBzZWN1cml0eSBpc3N1ZXMNCj4gPiBzdWNoDQo+ID4gICAgID4gYXMNCj4g PiAgICAgPiArLy8gYnVmZmVyIG92ZXJmbG93IG9yIGludGVnZXIgb3ZlcmZsb3cuDQo+ID4gICAg ID4gKy8vDQo+ID4gICAgID4gKy8vIENvcHlyaWdodCAoYykgMjAxMCAtIDIwMTUsIEludGVsIENv cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiAgICAgPiArLy8NCj4gPiAg ICAgPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4g PiAgICAgPiArLy8NCj4gPiAgICAgPiArLy8gKiovDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsN Cj4gPiAgICAgPiArI3N0cmluZyBTVFJfTU9EVUxFX0FCU1RSQUNUICAgICAgICAgICAgICNsYW5n dWFnZSBlbi1VUyAiUHJvdmlkZXMgU01NDQo+ID4gICAgID4gdmFyaWFibGUgc2VydmljZSINCj4g PiAgICAgPiArDQo+ID4gICAgID4gKyNzdHJpbmcgU1RSX01PRFVMRV9ERVNDUklQVElPTiAgICAg ICAgICAjbGFuZ3VhZ2UgZW4tVVMgIlRoaXMgbW9kdWxlDQo+ID4gICAgID4gaW5zdGFsbHMgU01N IHZhcmlhYmxlIHByb3RvY29sIGludG8gU01NIHByb3RvY29sIGRhdGFiYXNlLCB3aGljaCBjYW4g YmUNCj4gPiB1c2VkDQo+ID4gICAgID4gYnkgU01NIGRyaXZlciwgYW5kIGluc3RhbGxzIFNNTSB2 YXJpYWJsZSBwcm90b2NvbCBpbnRvIEJTIHByb3RvY29sDQo+IGRhdGFiYXNlLA0KPiA+ICAgICA+ IHdoaWNoIGNhbiBiZSB1c2VkIHRvIG5vdGlmeSB0aGUgU01NIFJ1bnRpbWUgRFhFIGRyaXZlciB0 aGF0IHRoZSBTTU0NCj4gPiB2YXJpYWJsZQ0KPiA+ICAgICA+IHNlcnZpY2UgaXMgcmVhZHkuIFRo aXMgbW9kdWxlIHNob3VsZCBiZSB1c2VkIHdpdGggU01NIFJ1bnRpbWUgRFhFDQo+IG1vZHVsZQ0K PiA+ICAgICA+IHRvZ2V0aGVyLiBUaGUgU01NIFJ1bnRpbWUgRFhFIG1vZHVsZSB3b3VsZCBpbnN0 YWxsIHZhcmlhYmxlIGFyY2gNCj4gPiBwcm90b2NvbA0KPiA+ICAgICA+IGFuZCB2YXJpYWJsZSB3 cml0ZSBhcmNoIHByb3RvY29sIGJhc2VkIG9uIFNNTSB2YXJpYWJsZSBtb2R1bGUuIENhdXRpb246 DQo+ID4gVGhpcw0KPiA+ICAgICA+IG1vZHVsZSByZXF1aXJlcyBhZGRpdGlvbmFsIHJldmlldyB3 aGVuIG1vZGlmaWVkLiBUaGlzIGRyaXZlciB3aWxsIGhhdmUNCj4gPiBleHRlcm5hbA0KPiA+ICAg ICA+IGlucHV0IC0gdmFyaWFibGUgZGF0YSBhbmQgY29tbXVuaWNhdGUgYnVmZmVyIGluIFNNTSBt b2RlLiBUaGlzIGV4dGVybmFsDQo+ID4gaW5wdXQNCj4gPiAgICAgPiBtdXN0IGJlIHZhbGlkYXRl ZCBjYXJlZnVsbHkgdG8gYXZvaWQgc2VjdXJpdHkgaXNzdWVzIHN1Y2ggYXMgYnVmZmVyIG92ZXJm bG93DQo+ID4gb3INCj4gPiAgICAgPiBpbnRlZ2VyIG92ZXJmbG93LiINCj4gPiAgICAgPiArDQo+ ID4gICAgID4gZGlmZiAtLWdpdA0KPiA+ICAgICA+DQo+ID4NCj4gYS9NZGVNb2R1bGVQa2cvVW5p dmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlU21tRXh0cg0KPiA+ ICAgICA+IGEudW5pDQo+ID4gICAgID4NCj4gPg0KPiBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwv VmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVTbW1FeHRyDQo+ID4gICAgID4g YS51bmkNCj4gPiAgICAgPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ICAgICA+IGluZGV4IDAw MDAwMDAwMDAwMC4uZjcyNDIwOWYzZGMyDQo+ID4gICAgID4gLS0tIC9kZXYvbnVsbA0KPiA+ICAg ICA+ICsrKw0KPiA+ICAgICA+DQo+ID4NCj4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1Zhcmlh YmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlU21tRXh0cg0KPiA+ICAgICA+IGEudW5p DQo+ID4gICAgID4gQEAgLTAsMCArMSwxNCBAQA0KPiA+ICAgICA+ICsvLyAvKiogQGZpbGUNCj4g PiAgICAgPiArLy8gVmFyaWFibGVTbW0gTG9jYWxpemVkIFN0cmluZ3MgYW5kIENvbnRlbnQNCj4g PiAgICAgPiArLy8NCj4gPiAgICAgPiArLy8gQ29weXJpZ2h0IChjKSAyMDEzIC0gMjAxOCwgSW50 ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ICAgICA+ICsvLw0K PiA+ICAgICA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVu dA0KPiA+ICAgICA+ICsvLw0KPiA+ICAgICA+ICsvLyAqKi8NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKyNzdHJpbmcgU1RSX1BST1BFUlRJRVNfTU9EVUxFX05BTUUNCj4gPiAgICAgPiArI2xhbmd1 YWdlIGVuLVVTDQo+ID4gICAgID4gKyJWYXJpYWJsZVNtbSBtb2R1bGUiDQo+ID4gICAgID4gKw0K PiA+ICAgICA+ICsNCj4gPiAgICAgPiBkaWZmIC0tZ2l0DQo+ID4gICAgID4NCj4gPg0KPiBhL01k ZU1vZHVsZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFi bGVTbW1SdW50DQo+ID4gICAgID4gaW1lRHhlLnVuaQ0KPiA+ICAgICA+DQo+ID4NCj4gYi9NZGVN b2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxl U21tUnVudA0KPiA+ICAgICA+IGltZUR4ZS51bmkNCj4gPiAgICAgPiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPiA+ICAgICA+IGluZGV4IDAwMDAwMDAwMDAwMC4uOTYzOWYwMDA3N2EwDQo+ID4gICAg ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICAgICA+ICsrKw0KPiA+ICAgICA+DQo+ID4NCj4gYi9NZGVN b2R1bGVQa2cvVW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxl U21tUnVudA0KPiA+ICAgICA+IGltZUR4ZS51bmkNCj4gPiAgICAgPiBAQCAtMCwwICsxLDIzIEBA DQo+ID4gICAgID4gKy8vIC8qKiBAZmlsZQ0KPiA+ICAgICA+ICsvLyBUaGlzIG1vZHVsZSBpcyB0 aGUgUnVudGltZSBEWEUgcGFydCBjb3JyZXNwb25kIHRvIFNNTSB2YXJpYWJsZQ0KPiA+IG1vZHVs ZS4NCj4gPiAgICAgPiArLy8NCj4gPiAgICAgPiArLy8gSXQgaW5zdGFsbHMgdmFyaWFibGUgYXJj aCBwcm90b2NvbCBhbmQgdmFyaWFibGUgd3JpdGUgYXJjaCBwcm90b2NvbCB0bw0KPiA+IHByb3Zp ZGUNCj4gPiAgICAgPiArLy8gZm91ciBFRklfUlVOVElNRV9TRVJWSUNFUzogU2V0VmFyaWFibGUs IEdldFZhcmlhYmxlLA0KPiA+ICAgICA+IEdldE5leHRWYXJpYWJsZU5hbWUgYW5kIFF1ZXJ5VmFy aWFibGVJbmZvDQo+ID4gICAgID4gKy8vIGFuZCB3b3JrcyB3aXRoIFNNTSB2YXJpYWJsZSBtb2R1 bGUgdG9nZXRoZXIuDQo+ID4gICAgID4gKy8vDQo+ID4gICAgID4gKy8vIENhdXRpb246IFRoaXMg bW9kdWxlIHJlcXVpcmVzIGFkZGl0aW9uYWwgcmV2aWV3IHdoZW4gbW9kaWZpZWQuDQo+ID4gICAg ID4gKy8vIFRoaXMgZHJpdmVyIHdpbGwgaGF2ZSBleHRlcm5hbCBpbnB1dCAtIHZhcmlhYmxlIGRh dGEuDQo+ID4gICAgID4gKy8vIFRoaXMgZXh0ZXJuYWwgaW5wdXQgbXVzdCBiZSB2YWxpZGF0ZWQg Y2FyZWZ1bGx5IHRvIGF2b2lkIHNlY3VyaXR5IGlzc3Vlcw0KPiA+IHN1Y2gNCj4gPiAgICAgPiBh cw0KPiA+ICAgICA+ICsvLyBidWZmZXIgb3ZlcmZsb3cgb3IgaW50ZWdlciBvdmVyZmxvdy4NCj4g PiAgICAgPiArLy8NCj4gPiAgICAgPiArLy8gQ29weXJpZ2h0IChjKSAyMDEwIC0gMjAxNCwgSW50 ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ICAgICA+ICsvLw0K PiA+ICAgICA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVu dA0KPiA+ICAgICA+ICsvLw0KPiA+ICAgICA+ICsvLyAqKi8NCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKw0KPiA+ICAgICA+ICsjc3RyaW5nIFNUUl9NT0RVTEVfQUJTVFJBQ1QgICAgICAgICAgICAg I2xhbmd1YWdlIGVuLVVTICJUaGUgUnVudGltZQ0KPiA+IERYRQ0KPiA+ICAgICA+IHBhcnQgY29y cmVzcG9uZGluZyB0byB0aGUgU01NIHZhcmlhYmxlIG1vZHVsZSINCj4gPiAgICAgPiArDQo+ID4g ICAgID4gKyNzdHJpbmcgU1RSX01PRFVMRV9ERVNDUklQVElPTiAgICAgICAgICAjbGFuZ3VhZ2Ug ZW4tVVMgIkl0IGluc3RhbGxzDQo+ID4gdmFyaWFibGUNCj4gPiAgICAgPiBhcmNoIHByb3RvY29s IGFuZCB2YXJpYWJsZSB3cml0ZSBhcmNoIHByb3RvY29sIHRvIHByb3ZpZGUgZm91cg0KPiA+ICAg ICA+IEVGSV9SVU5USU1FX1NFUlZJQ0VTOiBTZXRWYXJpYWJsZSwgR2V0VmFyaWFibGUsIEdldE5l eHRWYXJpYWJsZU5hbWUNCj4gPiBhbmQNCj4gPiAgICAgPiBRdWVyeVZhcmlhYmxlSW5mbyBhbmQg d29ya3Mgd2l0aCBTTU0gdmFyaWFibGUgbW9kdWxlIHRvZ2V0aGVyLiINCj4gPiAgICAgPiArDQo+ ID4gICAgID4gZGlmZiAtLWdpdA0KPiA+ICAgICA+DQo+ID4NCj4gYS9NZGVNb2R1bGVQa2cvVW5p dmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlU21tUnVudA0KPiA+ ICAgICA+IGltZUR4ZUV4dHJhLnVuaQ0KPiA+ICAgICA+DQo+ID4NCj4gYi9NZGVNb2R1bGVQa2cv VW5pdmVyc2FsL1ZhcmlhYmxlL1Byb3RlY3RlZC9SdW50aW1lRHhlL1ZhcmlhYmxlU21tUnVudA0K PiA+ICAgICA+IGltZUR4ZUV4dHJhLnVuaQ0KPiA+ICAgICA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQo+ID4gICAgID4gaW5kZXggMDAwMDAwMDAwMDAwLi5iYmFiZGY4MjczNmINCj4gPiAgICAgPiAt LS0gL2Rldi9udWxsDQo+ID4gICAgID4gKysrDQo+ID4gICAgID4NCj4gPg0KPiBiL01kZU1vZHVs ZVBrZy9Vbml2ZXJzYWwvVmFyaWFibGUvUHJvdGVjdGVkL1J1bnRpbWVEeGUvVmFyaWFibGVTbW1S dW50DQo+ID4gICAgID4gaW1lRHhlRXh0cmEudW5pDQo+ID4gICAgID4gQEAgLTAsMCArMSwxNCBA QA0KPiA+ICAgICA+ICsvLyAvKiogQGZpbGUNCj4gPiAgICAgPiArLy8gVmFyaWFibGVTbW1SdW50 aW1lRHhlIExvY2FsaXplZCBTdHJpbmdzIGFuZCBDb250ZW50DQo+ID4gICAgID4gKy8vDQo+ID4g ICAgID4gKy8vIENvcHlyaWdodCAoYykgMjAxMyAtIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBB bGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiAgICAgPiArLy8NCj4gPiAgICAgPiArLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPiAgICAgPiArLy8N Cj4gPiAgICAgPiArLy8gKiovDQo+ID4gICAgID4gKw0KPiA+ICAgICA+ICsjc3RyaW5nIFNUUl9Q Uk9QRVJUSUVTX01PRFVMRV9OQU1FDQo+ID4gICAgID4gKyNsYW5ndWFnZSBlbi1VUw0KPiA+ICAg ICA+ICsiVmFyaWFibGVTbW1SdW50aW1lRHhlIG1vZHVsZSINCj4gPiAgICAgPiArDQo+ID4gICAg ID4gKw0KPiA+ICAgICA+IC0tDQo+ID4gICAgID4gMi4zNS4xLndpbmRvd3MuMg0KPiA+DQo+ID4N Cj4gPg0KPiA+DQo+ID4NCj4gPg0KPiA+DQo+ID4NCj4gPg0KPiA+DQo+ID4NCj4gDQo+IA0KPiAN Cj4gDQo+IA0KDQo=