From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (NAM12-BN8-obe.outbound.protection.outlook.com [40.107.237.46]) by mx.groups.io with SMTP id smtpd.web11.4573.1681179690694090814 for ; Mon, 10 Apr 2023 19:21:31 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@ami.com header.s=selector1 header.b=fVSBMMN2; spf=pass (domain: ami.com, ip: 40.107.237.46, mailfrom: richardho@ami.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GMc+eSOhmwWnn2SRhoXbx8I9PqxXGD92dS32bacJ/urZefIV4YyYUFfSlQg4xmI+rS0SZ8j6UVjY3ATusRZOzsbGGyR+agO47yqmETc75AklLPE9l7/46xrjVjqO4s6/qUxTGF8IXclI8jcnt01BhGlq7PEGm8RAMxma3SHOA1po66xkci+L786lpJ+dA3IQ7aFfcALNqLtblZqePqchUUqOKcdDJK2Nb1YzWFGwJWPp33x7klrCw9/LRptfLqreCd5ViShLyg9O2sfG0rJZ5kFwaDrf6dR56w4nzvl1ViKZ6unwIGGTebltaOFVe6mLuyV1biGRda0ugGYJmbm+9Q== 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=qSAo0IbVCguFMeGUHrN2GuyD1/oe0G0v4caJ0OTaR+o=; b=W/iKq54MD/xi9i6caDNiHVj98ZEjsjq+zhQomwktzodH4kQoMQPYnR8z7Jnkdf5B8RJ8keaSfmGRA++K2nyTPe8L6dzcWtgY9znAqyNcj7s9l2fIz/vWoRRUl7EWMRJlT6lDAfxW+Z53gcSo8ob7lbSpOra23G6uDWUGT23fgL+WqTERsxrpUvMHpI6TqVqL4KTJ8j8LA+WlfPAO4dP0986taqS9ZZq4Cs36t482cnIrXgRfDZhYff5BDRFmaLRDvwu+Oi0NsdkVB6TZDqDNIFsWSQpuujO/GeeSllzlf37c/qEvn8V7bV9TSs4c19ZWFy7y7tRqgyERnNvyOs63Vw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=ami.com; dmarc=pass action=none header.from=ami.com; dkim=pass header.d=ami.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ami.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qSAo0IbVCguFMeGUHrN2GuyD1/oe0G0v4caJ0OTaR+o=; b=fVSBMMN2+pzmLpEK3tngzYdZbnc2rcGvfwiG02MO54LEbzSeQ++JcrUMOHj7fKBgcpg0JCktBGHxBtKtcWO62fxtgYMBMhKRgFt9+vNF2ZGwqcnY0FmhaDGTiALGzyFWlJQJjdUFAmc0P7GvoW7QZyxnHlbDAt8kXRfIUEh4bbA= Received: from CY8PR10MB6441.namprd10.prod.outlook.com (2603:10b6:930:63::16) by MW4PR10MB6439.namprd10.prod.outlook.com (2603:10b6:303:218::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6277.38; Tue, 11 Apr 2023 02:21:21 +0000 Received: from CY8PR10MB6441.namprd10.prod.outlook.com ([fe80::b965:7721:e4d7:5409]) by CY8PR10MB6441.namprd10.prod.outlook.com ([fe80::b965:7721:e4d7:5409%6]) with mapi id 15.20.6277.031; Tue, 11 Apr 2023 02:21:21 +0000 From: =?UTF-8?B?UmljaGFyZEhvIFvkvZXmmI7lv6Bd?= To: Rebecca Cran , "devel@edk2.groups.io" CC: Andrew Fish , Leif Lindholm , Michael D Kinney , Michael Kubacki , Zhiguang Liu , Liming Gao , Tinh Nguyen , =?utf-8?B?VG9ueSBMbyAo576F6YeR5p2+KQ==?= Subject: Re: [PATCH v7 1/3] UsbNetworkPkg/UsbRndis: Add USB RNDIS devices support Thread-Topic: [EXTERNAL] Re: [PATCH v7 1/3] UsbNetworkPkg/UsbRndis: Add USB RNDIS devices support Thread-Index: AQHZaUPu7eInPejPwEWzz4ffhuMEY68kuR2AgACrbVA= Date: Tue, 11 Apr 2023 02:21:21 +0000 Message-ID: References: <20230407112638.405-1-richardho@ami.com> In-Reply-To: Accept-Language: zh-TW, 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=ami.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CY8PR10MB6441:EE_|MW4PR10MB6439:EE_ x-ms-office365-filtering-correlation-id: d3579d6f-6f7c-4ab4-7cf4-08db3a3370cc x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: /H4cpfijmGAHWVyaYhtWYs5xpOOrpCkHkwlYDyO19AE0PJtnIKN0twQbVGRgDSVLq1Cq3UVeCxmWBin4KioEbF9pUxW8eNS10lj5YfivMtGssT4hCG/Tyfa1+Ts3y2jwR1N8E/X8j1SCOFuqvw/cM9l9wNTvrukbNqCUz11EgiGYRmpd3sxmA6noKHW/NuxW2Q9dk0xhc6LQ+kJ8wzSd5R5ROQTZsQmJ484cMJFvX7rfgWLhbv9jJH/pveZfWOO/9FplrpBfjtK8pClq6R+WuYjMZka9Ce/NkVzonTZqq+lobdO7ObS/N8hQRol77/Bm0FPzDDb824jr09vPKrR2wd2CQaFKRq1e//HHKdnEAqs9tW9bkDXX9ohrImz1B7L2jW/m1RTRDXggABef/BnP+pp0nX6N9pkZqHvB3dyz0i/3Aey7qMkCNvrtziFR7NTRUqRqSMGLvjFPGr156gj/MzivYb9xxHq9CUxYM4anGmvYGg+q/X2q5pJ35wyYjvOIndr/hDlkO4RDcYs8yGwCvPFmrKgjVHa+xMm+vKuWJA92ihMvEHO4ZjzUljvJU9gHVcCfTFmy2Y2gC0KJ8qTkQ5+8ACNIpIRlwvqrjepRZnkg9ADQ/4zXhizqkoyMSEKciCcsRzoy2tOJA1K+i8sQug== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CY8PR10MB6441.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(346002)(136003)(376002)(366004)(396003)(39850400004)(451199021)(40140700001)(33656002)(85182001)(86362001)(19627235002)(41300700001)(316002)(45080400002)(110136005)(478600001)(8676002)(66946007)(66476007)(54906003)(66446008)(7696005)(64756008)(66556008)(76116006)(4326008)(71200400001)(55016003)(5660300002)(2906002)(52536014)(8936002)(30864003)(186003)(38100700002)(38070700005)(122000001)(6506007)(9686003)(26005)(83380400001)(53546011)(579004)(559001)(44824005);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?d3UyZGxnckRaSU9QYnhBZkdtWGxXMmhqRGJlZFhHMlJyMlhrSWV1UzQwNEt2?= =?utf-8?B?R0NpZmtyQnlwQWRWeG0yMHVad1RsSXpZYkZaWXZ2UTlQYzlaWksrRUxXVUtl?= =?utf-8?B?UjkybEZCa1phdjc5eWk5UUt0Qyt6d0tPSmVZR2dCRzZmQS8yRU5LcVlWSERm?= =?utf-8?B?K2NPRncxMnF2WXJIUTVaV1dYbUVWTE5YTVBtQk40UlBrdnNabVJuQjZrbWUy?= =?utf-8?B?dTE5VW8wMGNObHFsZFBuZW15bXMzZitpRU1ZTmFLeHBhM1YzSGtYc0hoZWFO?= =?utf-8?B?Y3RsaWJkV0ZuNFFocCswOTUySTlmcFplSlhPMWRHSTBqd0g2WmxUV2dCN0Jy?= =?utf-8?B?UHl3RG9tZXB5R29PV1JhbmF5Y0FITk5yTTBCRVdTK29jdm4rR1hEeXg3bEVt?= =?utf-8?B?NjFhdis3Qmc3L2pDdVBQWkJLdUd2TWxQTU92b2JNSjZTbTJHbFNRaElNcWNL?= =?utf-8?B?THRkZ0Z1Q2tUNFRMVHV3U0NDMllOUGxudFVyVkt1VVJkKzJxazFnQTVzcFJI?= =?utf-8?B?SnJnV0Fkb3Q4dmE3UlBDRXBoc0hKZFR6N0FQek5GTmxYQVdDc1BRd1hqNnpq?= =?utf-8?B?V1IvQXZreFBpRE01SzVYNHE3eXorMFJJTEh6VlpoTVpGWEdVMkFJSmZXOXRC?= =?utf-8?B?YzNEdFFsVUtpQ2dwZVlqM2s5V3JTZ3VCVzMwZVMybmVhMkdTWFRId2N1bWh6?= =?utf-8?B?dlgwekxhSXRyRlhKVTRHdGhhR21QR0hhdHc2c0N4dzlHdU4rNmFLMzNqMElP?= =?utf-8?B?Ti9PSTY2LzFCbDZPWUo5b0hBd2VwM2VqUmVabUd4bXEzVldoU1E2cHUrTjVi?= =?utf-8?B?anYyb0xqei85UXVNN1ZXWU5UZ3hmbW80MFg4NU92dlRXUytnbWlUWC9SWlNL?= =?utf-8?B?MXdCMm5vZkhPTm52MjBaOHVJWUtoK081Njd0QXZhcnFFeHg3RUQ1ZHE1SVB2?= =?utf-8?B?QUI4cmsycW4wcUdINldYWXA4OEZ2cWZoWU5laFl5U1QyWEJ3cXFoL01JY1FB?= =?utf-8?B?Y29uRksvdnM2WDZIcVBRNlhGdTk0NW1aV0pnM2lzRFNyb0M5WGxvVDVocVJx?= =?utf-8?B?eUlpMGo5MmtIcTh4QVNsR0hoNGt1Wk5NaU1HM2w2MW5WeDZtbnY5SC9jKzha?= =?utf-8?B?Q1VrUnFxT3N3Vk9aUElNZmhHM2ZSL0NtK1o2cE8wU0c5eU9JdlhENkFZRjRT?= =?utf-8?B?VFFCbjBnbm54U0ZKek5nSmFWUlcxSHRxeGQ5eTNFWU1leXI4VC93bEw4NG16?= =?utf-8?B?V3JMOVhqSzV5QVE3Wk9DVEkxcXgzQUg0NnpzN3E1YXRDcjEwT1pTNnlWNG5Y?= =?utf-8?B?c2MzU2QrRWNxbnpwbmFEMVFuVGF1cmFjVFk3OVp0Mzk1ZGovYUFrd2JHK0V0?= =?utf-8?B?aG0zV2RLejJkd0ZGMjY1OVZJQXNXdXZ4TEIzVm1OSHNidjJBU3Q2ZHdLN1A2?= =?utf-8?B?NzU2Q3JoNC9OSVV0OUtveldKMmtFTE5TNElTTGVYbitNRUIzdks3czFmMm51?= =?utf-8?B?Q2VSOVZBUkVEVW1pYmUrZ1ByaXZQVGZ3eTJ1RStpalVENTl2SDhwNFgveXJC?= =?utf-8?B?Q0MxV1NJVVBmRjJaUXpHWXpFa0hpMm9HcHBaWUhqNzBCdDBuSk5YWlJMbHJB?= =?utf-8?B?UFlBcWw5TlhxK1JaQ2dsVElKYzRSTk1Wai9SQnQza084N1h4Zk1xd2swWGd0?= =?utf-8?B?NjFzdnBtaDJKdzUxejQ5aVNqZm43LzRvR0ljOUx3UlhjZXNTRHVIN0JPTjZh?= =?utf-8?B?T2hHOWw3WS9NdExXdisvS2lGekpGODJlWkR3Z2hMd29xaHdFVkk2V1FqMnNs?= =?utf-8?B?d2x4NzZJVEpnL3RBMVA3aE9jd3VvWXhZTSt0ellKdHRrUW1NUU5PaXV3dVRn?= =?utf-8?B?akgzU05RK3lzNDAxSjJFT1lVVU5TWXFoTUlyMFJ5WHhQaWMvdStPM2ZYNmNO?= =?utf-8?B?TVlnc0E4Sm1pbGNLSTk1dXJJa2tNanNVbE94V0hYdFFWeUZqS1h5bG5nYjF4?= =?utf-8?B?MDYzUG1oRHA1cVlRVCtCSnFkTFhTUHA1QVdmVEg5d1RwM3pYL0o4UmRCbSty?= =?utf-8?B?VEJKUUNtYU9wZEtVb2lKTVB0Q1FqbkYySlZMUm94dVVrMk5ZenVOVHJ3cnVj?= =?utf-8?Q?ShIw=3D?= MIME-Version: 1.0 X-OriginatorOrg: ami.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CY8PR10MB6441.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d3579d6f-6f7c-4ab4-7cf4-08db3a3370cc X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Apr 2023 02:21:21.2638 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 27e97857-e15f-486c-b58e-86c2b3040f93 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: r9gs0A34EpccnGSRfCpQCREoKNEGRWPqiFnF6wdpb19LoYv2+L2EjtKvMO9E2xTpsfPx+w17jeZ/XZ8htKJpyg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR10MB6439 Content-Language: zh-TW Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgUmViZWNjYSwNCg0KTWF5IEkgYWRkIHlvdSB0byByZXZpZXdlcj8NCg0KVG8gYWRkIGJlbG93 Lg0KDQpVc2JOZXR3b3JrUGtnDQpGOiBVc2JOZXR3b3JrUGtnLw0KTTogUmljaGFyZCBIbyA8cmlj aGFyZGhvQGFtaS5jb20+IFtyaWNoYXJkaG9dDQpSOiBSZWJlY2NhIENyYW4gPHJlYmVjY2FAYnNk aW8uY29tPiBbYmNyYW5dDQoNCg0KVGhhbmtzLA0KUmljaGFyZA0KDQotLS0tLU9yaWdpbmFsIE1l c3NhZ2UtLS0tLQ0KRnJvbTogUmViZWNjYSBDcmFuIDxyZWJlY2NhQGJzZGlvLmNvbT4NClNlbnQ6 IDIwMjPlubQ05pyIMTHml6UgMTI6MDIgQU0NClRvOiBSaWNoYXJkIEhvICjkvZXmmI7lv6ApIDxS aWNoYXJkSG9AYW1pLmNvbT47IGRldmVsQGVkazIuZ3JvdXBzLmlvDQpDYzogQW5kcmV3IEZpc2gg PGFmaXNoQGFwcGxlLmNvbT47IExlaWYgTGluZGhvbG0gPHF1aWNfbGxpbmRob2xAcXVpY2luYy5j b20+OyBNaWNoYWVsIEQgS2lubmV5IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47IE1pY2hh ZWwgS3ViYWNraSA8bWlrdWJhY2tAbGludXgubWljcm9zb2Z0LmNvbT47IFpoaWd1YW5nIExpdSA8 emhpZ3VhbmcubGl1QGludGVsLmNvbT47IExpbWluZyBHYW8gPGdhb2xpbWluZ0BieW9zb2Z0LmNv bS5jbj47IFRpbmggTmd1eWVuIDx0aW5obmd1eWVuQG9zLmFtcGVyZWNvbXB1dGluZy5jb20+OyBU b255IExvICjnvoXph5Hmnb4pIDxUb255TG9AYW1pLmNvbT4NClN1YmplY3Q6IFtFWFRFUk5BTF0g UmU6IFtQQVRDSCB2NyAxLzNdIFVzYk5ldHdvcmtQa2cvVXNiUm5kaXM6IEFkZCBVU0IgUk5ESVMg ZGV2aWNlcyBzdXBwb3J0DQoNCg0KKipDQVVUSU9OOiBUaGUgZS1tYWlsIGJlbG93IGlzIGZyb20g YW4gZXh0ZXJuYWwgc291cmNlLiBQbGVhc2UgZXhlcmNpc2UgY2F1dGlvbiBiZWZvcmUgb3Blbmlu ZyBhdHRhY2htZW50cywgY2xpY2tpbmcgbGlua3MsIG9yIGZvbGxvd2luZyBndWlkYW5jZS4qKg0K DQpZb3UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBhZGQgaXQgaW4gX3RoaXNfIHBhdGNoIHNlcmll cywgYnV0IHNpbmNlDQp5b3UncmUgYWRkaW5nIGEgbmV3IHBhY2thZ2UgeW91J2xsIG5lZWQgdG8g YWRkIGFuIGVudHJ5IHRvIE1haW50YWluZXJzLnR4dC4NCg0KDQotLQ0KUmViZWNjYSBDcmFuDQoN Cg0KT24gNC83LzIzIDU6MjcgQU0sIFJpY2hhcmQgSG8gKOS9leaYjuW/oCkgd3JvdGU6DQo+IFRo aXMgZHJpdmVyIHByb3ZpZGVzIFVFRkkgZHJpdmVyIGZvciBVU0IgUk5ESVMgZGV2aWNlDQo+DQo+ IFNpZ25lZC1vZmYtYnk6IFJpY2hhcmQgSG8gPHJpY2hhcmRob0BhbWkuY29tPg0KPiBDYzogQW5k cmV3IEZpc2ggPGFmaXNoQGFwcGxlLmNvbT4NCj4gQ2M6IExlaWYgTGluZGhvbG0gPHF1aWNfbGxp bmRob2xAcXVpY2luYy5jb20+DQo+IENjOiBNaWNoYWVsIEQgS2lubmV5IDxtaWNoYWVsLmQua2lu bmV5QGludGVsLmNvbT4NCj4gQ2M6IE1pY2hhZWwgS3ViYWNraSA8bWlrdWJhY2tAbGludXgubWlj cm9zb2Z0LmNvbT4NCj4gQ2M6IFpoaWd1YW5nIExpdSA8emhpZ3VhbmcubGl1QGludGVsLmNvbT4N Cj4gQ2M6IExpbWluZyBHYW8gPGdhb2xpbWluZ0BieW9zb2Z0LmNvbS5jbj4NCj4gQ2M6IFJlYmVj Y2EgQ3JhbiA8cmViZWNjYUBic2Rpby5jb20+DQo+IFRlc3RlZC1ieTogVGluaCBOZ3V5ZW4gPHRp bmhuZ3V5ZW5Ab3MuYW1wZXJlY29tcHV0aW5nLmNvbT4NCj4gUmV2aWV3ZWQtYnk6IFRvbnkgTG8g PHRvbnlsb0BhbWkuY29tPg0KPiAtLS0NCj4gICAuLi4vUHJvdG9jb2wvRWRrSUlVc2JFdGhlcm5l dFByb3RvY29sLmggICAgICAgfCAgODc4ICsrKysrKysrDQo+ICAgVXNiTmV0d29ya1BrZy9OZXR3 b3JrQ29tbW9uL0NvbXBvbmVudE5hbWUuYyAgIHwgIDI2MyArKysNCj4gICBVc2JOZXR3b3JrUGtn L05ldHdvcmtDb21tb24vRHJpdmVyQmluZGluZy5jICAgfCAgNTk1ICsrKysrKw0KPiAgIFVzYk5l dHdvcmtQa2cvTmV0d29ya0NvbW1vbi9Ecml2ZXJCaW5kaW5nLmggICB8ICAyNjYgKysrDQo+ICAg VXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL05ldHdvcmtDb21tb24uaW5mIHwgICA0OSArDQo+ ICAgVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL1B4ZUZ1bmN0aW9uLmMgICAgIHwgMTgwMyAr KysrKysrKysrKysrKysrKw0KPiAgIFVzYk5ldHdvcmtQa2cvUmVhZE1lLm1kICAgICAgICAgICAg ICAgICAgICAgICB8ICAgNjUgKw0KPiAgIFVzYk5ldHdvcmtQa2cvVXNiTmV0d29ya1BrZy5jaS55 YW1sICAgICAgICAgICB8ICAgNjUgKw0KPiAgIFVzYk5ldHdvcmtQa2cvVXNiTmV0d29ya1BrZy5k ZWMgICAgICAgICAgICAgICB8ICAgNDYgKw0KPiAgIFVzYk5ldHdvcmtQa2cvVXNiTmV0d29ya1Br Zy5kc2MgICAgICAgICAgICAgICB8ICAgNTAgKw0KPiAgIFVzYk5ldHdvcmtQa2cvVXNiTmV0d29y a1BrZy5kc2MuaW5jICAgICAgICAgICB8ICAgMjcgKw0KPiAgIC4uLi9Vc2JOZXR3b3JrUGtnQ29t cG9uZW50c0R4ZS5kc2MuaW5jICAgICAgICB8ICAgMjAgKw0KPiAgIC4uLi9Vc2JOZXR3b3JrUGtn Q29tcG9uZW50c0R4ZS5mZGYuaW5jICAgICAgICB8ICAgMjAgKw0KPiAgIFVzYk5ldHdvcmtQa2cv VXNiTmV0d29ya1BrZ1BjZHMuZHNjLmluYyAgICAgICB8ICAgMTQgKw0KPiAgIFVzYk5ldHdvcmtQ a2cvVXNiUm5kaXMvQ29tcG9uZW50TmFtZS5jICAgICAgICB8ICAxNzIgKysNCj4gICBVc2JOZXR3 b3JrUGtnL1VzYlJuZGlzL1VzYlJuZGlzLmMgICAgICAgICAgICAgfCAgODg2ICsrKysrKysrDQo+ ICAgVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpcy5oICAgICAgICAgICAgIHwgIDU4NiAr KysrKysNCj4gICBVc2JOZXR3b3JrUGtnL1VzYlJuZGlzL1VzYlJuZGlzLmluZiAgICAgICAgICAg fCAgIDQyICsNCj4gICBVc2JOZXR3b3JrUGtnL1VzYlJuZGlzL1VzYlJuZGlzRnVuY3Rpb24uYyAg ICAgfCAxNzE4ICsrKysrKysrKysrKysrKysNCj4gICAxOSBmaWxlcyBjaGFuZ2VkLCA3NTY1IGlu c2VydGlvbnMoKykNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNiTmV0d29ya1BrZy9JbmNsdWRl L1Byb3RvY29sL0Vka0lJVXNiRXRoZXJuZXRQcm90b2NvbC5oDQo+ICAgY3JlYXRlIG1vZGUgMTAw NjQ0IFVzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1vbi9Db21wb25lbnROYW1lLmMNCj4gICBjcmVh dGUgbW9kZSAxMDA2NDQgVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL0RyaXZlckJpbmRpbmcu Yw0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JOZXR3b3JrUGtnL05ldHdvcmtDb21tb24vRHJp dmVyQmluZGluZy5oDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IFVzYk5ldHdvcmtQa2cvTmV0d29y a0NvbW1vbi9OZXR3b3JrQ29tbW9uLmluZg0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JOZXR3 b3JrUGtnL05ldHdvcmtDb21tb24vUHhlRnVuY3Rpb24uYw0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0 NCBVc2JOZXR3b3JrUGtnL1JlYWRNZS5tZA0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JOZXR3 b3JrUGtnL1VzYk5ldHdvcmtQa2cuY2kueWFtbA0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JO ZXR3b3JrUGtnL1VzYk5ldHdvcmtQa2cuZGVjDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IFVzYk5l dHdvcmtQa2cvVXNiTmV0d29ya1BrZy5kc2MNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNiTmV0 d29ya1BrZy9Vc2JOZXR3b3JrUGtnLmRzYy5pbmMNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNi TmV0d29ya1BrZy9Vc2JOZXR3b3JrUGtnQ29tcG9uZW50c0R4ZS5kc2MuaW5jDQo+ICAgY3JlYXRl IG1vZGUgMTAwNjQ0IFVzYk5ldHdvcmtQa2cvVXNiTmV0d29ya1BrZ0NvbXBvbmVudHNEeGUuZmRm LmluYw0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JOZXR3b3JrUGtnL1VzYk5ldHdvcmtQa2dQ Y2RzLmRzYy5pbmMNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNiTmV0d29ya1BrZy9Vc2JSbmRp cy9Db21wb25lbnROYW1lLmMNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNiTmV0d29ya1BrZy9V c2JSbmRpcy9Vc2JSbmRpcy5jDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IFVzYk5ldHdvcmtQa2cv VXNiUm5kaXMvVXNiUm5kaXMuaA0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JOZXR3b3JrUGtn L1VzYlJuZGlzL1VzYlJuZGlzLmluZg0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JOZXR3b3Jr UGtnL1VzYlJuZGlzL1VzYlJuZGlzRnVuY3Rpb24uYw0KPg0KPiBkaWZmIC0tZ2l0IGEvVXNiTmV0 d29ya1BrZy9JbmNsdWRlL1Byb3RvY29sL0Vka0lJVXNiRXRoZXJuZXRQcm90b2NvbC5oIGIvVXNi TmV0d29ya1BrZy9JbmNsdWRlL1Byb3RvY29sL0Vka0lJVXNiRXRoZXJuZXRQcm90b2NvbC5oDQo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLmY1NDk0NmM3YWENCj4g LS0tIC9kZXYvbnVsbA0KPiArKysgYi9Vc2JOZXR3b3JrUGtnL0luY2x1ZGUvUHJvdG9jb2wvRWRr SUlVc2JFdGhlcm5ldFByb3RvY29sLmgNCj4gQEAgLTAsMCArMSw4NzggQEANCj4gKy8qKiBAZmls ZQ0KPiArICBIZWFkZXIgZmlsZSBjb250YWlucyBjb2RlIGZvciBVU0IgRXRoZXJuZXQgUHJvdG9j b2wNCj4gKyAgZGVmaW5pdGlvbnMNCj4gKw0KPiArICBDb3B5cmlnaHQgKGMpIDIwMjMsIEFtZXJp Y2FuIE1lZ2F0cmVuZHMgSW50ZXJuYXRpb25hbCBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJS Pg0KPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiAr KiovDQo+ICsNCj4gKyNpZm5kZWYgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MX0hfDQo+ICsj ZGVmaW5lIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTF9IXw0KPiArDQo+ICsjZGVmaW5lIEVE S0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTF9HVUlEIFwNCj4gKyAgICB7MHg4ZDg5NjljYywgMHhm ZWIwLCAweDQzMDMsIHsweGIyLCAweDFhLCAweDFmLCAweDExLCAweDZmLCAweDM4LCAweDU2LCAw eDQzfX0NCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3QgX0VES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NP TCBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0w7DQo+ICsNCj4gKyNkZWZpbmUgVVNCX0NEQ19D TEFTUyAgICAgICAgICAweDAyDQo+ICsjZGVmaW5lIFVTQl9DRENfQUNNX1NVQkNMQVNTICAgMHgw Mg0KPiArI2RlZmluZSBVU0JfQ0RDX0VDTV9TVUJDTEFTUyAgIDB4MDYNCj4gKyNkZWZpbmUgVVNC X0NEQ19OQ01fU1VCQ0xBU1MgICAweDBEDQo+ICsjZGVmaW5lIFVTQl9DRENfREFUQV9DTEFTUyAg ICAgMHgwQQ0KPiArI2RlZmluZSBVU0JfQ0RDX0RBVEFfU1VCQ0xBU1MgIDB4MDANCj4gKyNkZWZp bmUgVVNCX05PX0NMQVNTX1BST1RPQ09MICAweDAwDQo+ICsjZGVmaW5lIFVTQl9OQ01fTlRCX1BS T1RPQ09MICAgMHgwMQ0KPiArI2RlZmluZSBVU0JfVkVORE9SX1BST1RPQ09MICAgIDB4RkYNCj4g Kw0KPiArLy8gVHlwZSBWYWx1ZXMgZm9yIHRoZSBEZXNjcmlwdG9yVHlwZSBGaWVsZA0KPiArI2Rl ZmluZSBDU19JTlRFUkZBQ0UgIDB4MjQNCj4gKyNkZWZpbmUgQ1NfRU5EUE9JTlQgICAweDI1DQo+ ICsNCj4gKy8vIERlc2NyaXB0b3IgU3ViVHlwZSBpbiBGdW5jdGlvbmFsIERlc2NyaXB0b3JzDQo+ ICsjZGVmaW5lIEhFQURFUl9GVU5fREVTQ1JJUFRPUiAgICAweDAwDQo+ICsjZGVmaW5lIFVOSU9O X0ZVTl9ERVNDUklQVE9SICAgICAweDA2DQo+ICsjZGVmaW5lIEVUSEVSTkVUX0ZVTl9ERVNDUklQ VE9SICAweDBGDQo+ICsNCj4gKyNkZWZpbmUgTUFYX0xBTl9JTlRFUkZBQ0UgIDB4MTANCj4gKw0K PiArLy8gVGFibGUgMjA6IENsYXNzLVNwZWNpZmljIE5vdGlmaWNhdGlvbiBDb2Rlcw0KPiArI2Rl ZmluZSBVU0JfQ0RDX05FVFdPUktfQ09OTkVDVElPTiAgMHgwMA0KPiArDQo+ICsvLyA2LjMuMSBO ZXR3b3JrQ29ubmVjdGlvbg0KPiArI2RlZmluZSBORVRXT1JLX0NPTk5FQ1RFRCAgIDB4MDENCj4g KyNkZWZpbmUgTkVUV09SS19ESVNDT05ORUNUICAweDAwDQo+ICsNCj4gKy8vIFVTQiBIZWFkZXIg ZnVuY3Rpb25hbCBEZXNjcmlwdG9yDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQ4ICAg ICBGdW5jdGlvbkxlbmd0aDsNCj4gKyAgVUlOVDggICAgIERlc2NyaXB0b3JUeXBlOw0KPiArICBV SU5UOCAgICAgRGVzY3JpcHRvclN1YnR5cGU7DQo+ICsgIFVJTlQxNiAgICBCY2RDZGM7DQo+ICt9 IFVTQl9IRUFERVJfRlVOX0RFU0NSSVBUT1I7DQo+ICsNCj4gKy8vIFVTQiBVbmlvbiBGdW5jdGlv bmFsIERlc2NyaXB0b3INCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDggICAgRnVuY3Rp b25MZW5ndGg7DQo+ICsgIFVJTlQ4ICAgIERlc2NyaXB0b3JUeXBlOw0KPiArICBVSU5UOCAgICBE ZXNjcmlwdG9yU3VidHlwZTsNCj4gKyAgVUlOVDggICAgTWFzdGVySW50ZXJmYWNlOw0KPiArICBV SU5UOCAgICBTbGF2ZUludGVyZmFjZTsNCj4gK30gVVNCX1VOSU9OX0ZVTl9ERVNDUklQVE9SOw0K PiArDQo+ICsvLyBVU0IgRXRoZXJuZXQgRnVuY3Rpb25hbCBEZXNjcmlwdG9yDQo+ICt0eXBlZGVm IHN0cnVjdCB7DQo+ICsgIFVJTlQ4ICAgICBGdW5jdGlvbkxlbmd0aDsNCj4gKyAgVUlOVDggICAg IERlc2NyaXB0b3JUeXBlOw0KPiArICBVSU5UOCAgICAgRGVzY3JpcHRvclN1YnR5cGU7DQo+ICsg IFVJTlQ4ICAgICBNYWNBZGRyZXNzOw0KPiArICBVSU5UMzIgICAgRXRoZXJuZXRTdGF0aXN0aWNz Ow0KPiArICBVSU5UMTYgICAgTWF4U2VnbWVudFNpemU7DQo+ICsgIFVJTlQxNiAgICBOdW1iZXJN Y0ZpbHRlcnM7DQo+ICsgIFVJTlQ4ICAgICBOdW1iZXJQb3dlckZpbHRlcnM7DQo+ICt9IFVTQl9F VEhFUk5FVF9GVU5fREVTQ1JJUFRPUjsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBV SU5UMzIgICAgVXNCaXRSYXRlOw0KPiArICBVSU5UMzIgICAgRHNCaXRSYXRlOw0KPiArfSBVU0Jf Q09OTkVDVF9TUEVFRF9DSEFOR0U7DQo+ICsNCj4gKy8vIFJlcXVlc3QgVHlwZSBDb2RlcyBmb3Ig VVNCIEV0aGVybmV0DQo+ICsjZGVmaW5lIFVTQl9FVEhFUk5FVF9HRVRfUkVRX1RZUEUgIDB4QTEN Cj4gKyNkZWZpbmUgVVNCX0VUSEVSTkVUX1NFVF9SRVFfVFlQRSAgMHgyMQ0KPiArDQo+ICsvLyBD bGFzcy1TcGVjaWZpYyBSZXF1ZXN0IENvZGVzIGZvciBFdGhlcm5ldCBzdWJjbGFzcw0KPiArLy8g VVNCIEVDTSAxLjIgc3BlY2lmaWNhdGlvbiwgU2VjdGlvbiA2LjINCj4gKyNkZWZpbmUgU0VUX0VU SF9NVUxUSUNBU1RfRklMVEVSU19SRVEgICAgICAgICAgICAgICAgMHg0MA0KPiArI2RlZmluZSBT RVRfRVRIX1BPV0VSX01BTkFHRU1FTlRfUEFUVEVSTl9GSUxURVJfUkVRICAweDQxDQo+ICsjZGVm aW5lIEdFVF9FVEhfUE9XRVJfTUFOQUdFTUVOVF9QQVRURVJOX0ZJTFRFUl9SRVEgIDB4NDINCj4g KyNkZWZpbmUgU0VUX0VUSF9QQUNLRVRfRklMVEVSX1JFUSAgICAgICAgICAgICAgICAgICAgMHg0 Mw0KPiArI2RlZmluZSBHRVRfRVRIX1NUQVRJU1RJQ19SRVEgICAgICAgICAgICAgICAgICAgICAg ICAweDQ0DQo+ICsNCj4gKy8vIFVTQiBFQ00gY29tbWFuZCByZXF1ZXN0IGxlbmd0aA0KPiArI2Rl ZmluZSBVU0JfRVRIX1BPV0VSX0ZJTFRFUl9MRU5HVEggICAyIC8vIFNlY3Rpb24gNi4yLjMNCj4g KyNkZWZpbmUgVVNCX0VUSF9QQUNLRVRfRklMVEVSX0xFTkdUSCAgMCAvLyBTZWN0aW9uIDYuMi40 DQo+ICsjZGVmaW5lIFVTQl9FVEhfU1RBVElTVElDICAgICAgICAgICAgIDQgLy8gU2VjdGlvbiA2 LjIuNQ0KPiArDQo+ICsvLyBVU0IgRXRoZXJuZXQgUGFja2V0IEZpbHRlciBCaXRtYXANCj4gKy8v IFVTQiBFQ00gMS4yIHNwZWNpZmljYXRpb24sIFNlY3Rpb24gNi4yLjQNCj4gKyNkZWZpbmUgVVNC X0VUSF9QQUNLRVRfVFlQRV9QUk9NSVNDVU9VUyAgICBCSVQwDQo+ICsjZGVmaW5lIFVTQl9FVEhf UEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVCAgQklUMQ0KPiArI2RlZmluZSBVU0JfRVRIX1BBQ0tF VF9UWVBFX0RJUkVDVEVEICAgICAgIEJJVDINCj4gKyNkZWZpbmUgVVNCX0VUSF9QQUNLRVRfVFlQ RV9CUk9BRENBU1QgICAgICBCSVQzDQo+ICsjZGVmaW5lIFVTQl9FVEhfUEFDS0VUX1RZUEVfTVVM VElDQVNUICAgICAgQklUNA0KPiArDQo+ICsvLyBVU0IgRXRoZXJuZXQgU3RhdGlzdGljcyBGZWF0 dXJlIFNlbGVjdG9yIENvZGVzDQo+ICsvLyBVU0IgRUNNIDEuMiBzcGVjaWZpY2F0aW9uLCBTZWN0 aW9uIDYuMi41DQo+ICsjZGVmaW5lIFVTQl9FVEhfWE1JVF9PSyAgICAgICAgICAgICAgICAgMHgw MQ0KPiArI2RlZmluZSBVU0JfRVRIX1JDVl9PSyAgICAgICAgICAgICAgICAgIDB4MDINCj4gKyNk ZWZpbmUgVVNCX0VUSF9YTUlUX0VSUk9SICAgICAgICAgICAgICAweDAzDQo+ICsjZGVmaW5lIFVT Ql9FVEhfUkNWX0VSUk9SICAgICAgICAgICAgICAgMHgwNA0KPiArI2RlZmluZSBVU0JfRVRIX1JD Vl9OT19CVUZGRVIgICAgICAgICAgIDB4MDUNCj4gKyNkZWZpbmUgVVNCX0VUSF9ESVJFQ1RFRF9C WVRFU19YTUlUICAgICAweDA2DQo+ICsjZGVmaW5lIFVTQl9FVEhfRElSRUNURURfRlJBTUVTX1hN SVQgICAgMHgwNw0KPiArI2RlZmluZSBVU0JfRVRIX01VTFRJQ0FTVF9CWVRFU19YTUlUICAgIDB4 MDgNCj4gKyNkZWZpbmUgVVNCX0VUSF9NVUxUSUNBU1RfRlJBTUVTX1hNSVQgICAweDA5DQo+ICsj ZGVmaW5lIFVTQl9FVEhfQlJPQURDQVNUX0JZVEVTX1hNSVQgICAgMHgwQQ0KPiArI2RlZmluZSBV U0JfRVRIX0JST0FEQ0FTVF9GUkFNRVNfWE1JVCAgIDB4MEINCj4gKyNkZWZpbmUgVVNCX0VUSF9E SVJFQ1RFRF9CWVRFU19SQ1YgICAgICAweDBDDQo+ICsjZGVmaW5lIFVTQl9FVEhfRElSRUNURURf RlJBTUVTX1JDViAgICAgMHgwRA0KPiArI2RlZmluZSBVU0JfRVRIX01VTFRJQ0FTVF9CWVRFU19S Q1YgICAgIDB4MEUNCj4gKyNkZWZpbmUgVVNCX0VUSF9NVUxUSUNBU1RfRlJBTUVTX1JDViAgICAw eDBGDQo+ICsjZGVmaW5lIFVTQl9FVEhfQlJPQURDQVNUX0JZVEVTX1JDViAgICAgMHgxMA0KPiAr I2RlZmluZSBVU0JfRVRIX0JST0FEQ0FTVF9GUkFNRVNfUkNWICAgIDB4MTENCj4gKyNkZWZpbmUg VVNCX0VUSF9SQ1ZfQ1JDX0VSUk9SICAgICAgICAgICAweDEyDQo+ICsjZGVmaW5lIFVTQl9FVEhf VFJBTlNNSVRfUVVFVUVfTEVOR1RIICAgMHgxMw0KPiArI2RlZmluZSBVU0JfRVRIX1JDVl9FUlJP Ul9BTElHTk1FTlQgICAgIDB4MTQNCj4gKyNkZWZpbmUgVVNCX0VUSF9YTUlUX09ORV9DT0xMSVNJ T04gICAgICAweDE1DQo+ICsjZGVmaW5lIFVTQl9FVEhfWE1JVF9NT1JFX0NPTExJU0lPTlMgICAg MHgxNg0KPiArI2RlZmluZSBVU0JfRVRIX1hNSVRfREVGRVJSRUQgICAgICAgICAgIDB4MTcNCj4g KyNkZWZpbmUgVVNCX0VUSF9YTUlUX01BWF9DT0xMSVNJT05TICAgICAweDE4DQo+ICsjZGVmaW5l IFVTQl9FVEhfUkNWX09WRVJSVU4gICAgICAgICAgICAgMHgxOQ0KPiArI2RlZmluZSBVU0JfRVRI X1hNSVRfVU5ERVJSVU4gICAgICAgICAgIDB4MUENCj4gKyNkZWZpbmUgVVNCX0VUSF9YTUlUX0hF QVJUQkVBVF9GQUlMVVJFICAweDFCDQo+ICsjZGVmaW5lIFVTQl9FVEhfWE1JVF9USU1FU19DUlNf TE9TVCAgICAgMHgxQw0KPiArI2RlZmluZSBVU0JfRVRIX1hNSVRfTEFURV9DT0xMSVNJT05TICAg IDB4MUQNCj4gKw0KPiArLy8gTklDIEluZm9ybWF0aW9uDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICBTaWduYXR1cmU7DQo+ICsgIEVES0lJ X1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgICAqVXNiRXRoOw0KPiArICBVSU5UMTYgICAgICAgICAg ICAgICAgICAgICAgICAgSW50ZXJydXBPcEZsYWc7DQo+ICsgIFVJTlQ2NCAgICAgICAgICAgICAg ICAgICAgICAgICBNYXBwZWRBZGRyOw0KPiArICBQWEVfTUFDX0FERFIgICAgICAgICAgICAgICAg ICAgTWNhc3RMaXN0W01BWF9NQ0FTVF9BRERSRVNTX0NOVF07DQo+ICsgIFVJTlQ4ICAgICAgICAg ICAgICAgICAgICAgICAgICBNY2FzdENvdW50Ow0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAg ICAgICAgICAgTWVkaWFIZWFkZXJbTUFYX1hNSVRfQlVGRkVSU107DQo+ICsgIFVJTlQ4ICAgICAg ICAgICAgICAgICAgICAgICAgICBUeEJ1ZmZlckNvdW50Ow0KPiArICBVSU5UMTYgICAgICAgICAg ICAgICAgICAgICAgICAgU3RhdGU7DQo+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAg ICBDYW5UcmFuc21pdDsNCj4gKyAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICAgIFJlY2Vp dmVTdGF0dXM7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICBSeEZpbHRlcjsN Cj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIFJ4RnJhbWU7DQo+ICsgIFVJTlQz MiAgICAgICAgICAgICAgICAgICAgICAgICBUeEZyYW1lOw0KPiArICBVSU5UMTYgICAgICAgICAg ICAgICAgICAgICAgICAgTmV0d29ya0Nvbm5lY3Q7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAg ICAgICAgICAgICBDYWJsZURldGVjdDsNCj4gKyAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAg ICAgIE1heFNlZ21lbnRTaXplOw0KPiArICBFRklfTUFDX0FERFJFU1MgICAgICAgICAgICAgICAg TWFjQWRkcjsNCj4gKyAgUFhFX0NQQl9TVEFSVF8zMSAgICAgICAgICAgICAgIFB4ZVN0YXJ0Ow0K PiArICBQWEVfQ1BCX0lOSVRJQUxJWkUgICAgICAgICAgICAgUHhlSW5pdDsNCj4gKyAgVUlOVDgg ICAgICAgICAgICAgICAgICAgICAgICAgIFBlcm1Ob2RlQWRkcmVzc1tQWEVfTUFDX0xFTkdUSF07 DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJyZW50Tm9kZUFkZHJlc3Nb UFhFX01BQ19MRU5HVEhdOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgQnJv YWRjYXN0Tm9kZUFkZHJlc3NbUFhFX01BQ19MRU5HVEhdOw0KPiArICBFRklfVVNCX0RFVklDRV9S RVFVRVNUICAgICAgICAgUmVxdWVzdDsNCj4gKyAgRUZJX0VWRU5UICAgICAgICAgICAgICAgICAg ICAgIFJhdGVMaW1pdGVyOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgUmF0 ZUxpbWl0aW5nQ3JlZGl0Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgUmF0 ZUxpbWl0aW5nQ3JlZGl0Q291bnQ7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAg ICBSYXRlTGltaXRpbmdQb2xsVGltZXI7DQo+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAg ICAgICBSYXRlTGltaXRpbmdFbmFibGU7DQo+ICt9IE5JQ19EQVRBOw0KPiArDQo+ICsjZGVmaW5l IE5JQ19EQVRBX1NJR05BVFVSRSAgU0lHTkFUVVJFXzMyKCduJywgJ2knLCAnYycsICdkJykNCj4g KyNkZWZpbmUgTklDX0RBVEFfRlJPTV9FREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0woYSkgIENS IChhLCBOSUNfREFUQSwgVXNiRXRoLCBOSUNfREFUQV9TSUdOQVRVUkUpDQo+ICsNCj4gKy8qKg0K PiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIG9wZXJhdGlvbmFsIHN0 YXRlIG9mIHRoZSBVTkRJLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRv IHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBw b2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4g KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3Vj Y2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQg b2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0Vf RVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiAr ICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFz IGFuIGludmFsaWQgdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5v dCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklB UEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX0dFVF9TVEFURSkoDQo+ICsgIElOICBQWEVfQ0RC ICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0KPiArICApOw0KPiArDQo+ICsv KioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gY2hhbmdlIHRoZSBVTkRJIG9wZXJhdGlv bmFsIHN0YXRlIGZyb20gc3RvcHBlZCB0byBzdGFydGVkLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0g IENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBw YXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9s bGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJl cXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAg ICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBA cmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEg ZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2Yg dGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VO U1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VG SV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1NUQVJUKSgNCj4g KyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgICAqTmljDQo+ICsg ICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBjaGFuZ2UgdGhl IFVOREkgb3BlcmF0aW9uYWwgc3RhdGUgZnJvbSBzdGFydGVkIHRvIHN0b3BwZWQuDQo+ICsNCj4g KyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBi bG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50 ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwg RUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJl cXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZh aWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFS QU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4gKyAg QHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiAr dHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VO RElfU1RPUCkoDQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEg ICAgKk5pYw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQg dG8gcmV0cmlldmUgaW5pdGlhbGl6YXRpb24gaW5mb3JtYXRpb24gdGhhdCBpcw0KPiArICBuZWVk ZWQgYnkgZHJpdmVycyBhbmQgYXBwbGljYXRpb25zIHRvIGluaXRpYWxpemVkIFVOREkuDQo+ICsN Cj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRv ciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsg aW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2 YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhl IHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0 IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURf UEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4g KyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0K PiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVU X1VORElfR0VUX0lOSVRfSU5GTykoDQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJ TiAgTklDX0RBVEEgICAgKk5pYw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21t YW5kIGlzIHVzZWQgdG8gcmV0cmlldmUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhYm91dA0K PiArICB0aGUgTklDIGJlaW5nIGNvbnRyb2xsZWQgYnkgdGhlIFVOREkuDQo+ICsNCj4gKyAgQHBh cmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4N Cj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNl IGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAg ICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJ TUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3Qu DQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBk dWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVS IE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4gKyAgQHJldHZh bCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRl Zg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElfR0VU X0NPTkZJR19JTkZPKSgNCj4gKyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQo+ICsgIElOICBOSUNf REFUQSAgICAqTmljDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgcmVz ZXRzIHRoZSBuZXR3b3JrIGFkYXB0ZXIgYW5kIGluaXRpYWxpemVzIFVOREkgdXNpbmcNCj4gKyAg dGhlIHBhcmFtZXRlcnMgc3VwcGxpZWQgaW4gdGhlIENQQi4NCj4gKw0KPiArICBAcGFyYW1baW5d ICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBA cGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJv bGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBy ZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAg ICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAg QHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBh IGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9m IHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9V TlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtF RklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9JTklUSUFMSVpF KSgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4g KyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCByZXNldHMgdGhlIG5ldHdvcmsg YWRhcHRlciBhbmQgcmVpbml0aWFsaXplcyB0aGUgVU5ESQ0KPiArICB3aXRoIHRoZSBzYW1lIHBh cmFtZXRlcnMgcHJvdmlkZWQgaW4gdGhlIEluaXRpYWxpemUgY29tbWFuZC4NCj4gKw0KPiArICBA cGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2Nr Lg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZh Y2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAg ICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklf VElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVz dC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVk IGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVU RVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0KPiArICBAcmV0 dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBl ZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9S RVNFVCkoDQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICAg Kk5pYw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhlIFNodXRkb3duIGNvbW1hbmQgcmVz ZXRzIHRoZSBuZXR3b3JrIGFkYXB0ZXIgYW5kIGxlYXZlcyBpdCBpbiBhDQo+ICsgIHNhZmUgc3Rh dGUgZm9yIGFub3RoZXIgZHJpdmVyIHRvIGluaXRpYWxpemUuDQo+ICsNCj4gKyAgQHBhcmFtW2lu XSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAg QHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRy b2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUg cmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQg ICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsg IEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8g YSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBv ZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklf VU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiAr RUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElfU0hVVERPV04p KA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAgICpOaWMN Cj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoZSBJbnRlcnJ1cHQgRW5hYmxlcyBjb21tYW5k IGNhbiBiZSB1c2VkIHRvIHJlYWQgYW5kL29yIGNoYW5nZQ0KPiArICB0aGUgY3VycmVudCBleHRl cm5hbCBpbnRlcnJ1cHQgZW5hYmxlIHNldHRpbmdzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENk YiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJh bVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVy IGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVl c3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAg ICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0 dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2 aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhl IHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQ UE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9T VEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX0lOVEVSUlVQVF9FTkFC TEUpKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAgICpO aWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIHJl YWQgYW5kIGNoYW5nZSByZWNlaXZlIGZpbHRlcnMgYW5kLA0KPiArICBpZiBzdXBwb3J0ZWQsIHJl YWQgYW5kIGNoYW5nZSB0aGUgbXVsdGljYXN0IE1BQyBhZGRyZXNzIGZpbHRlciBsaXN0Lg0KPiAr DQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0 b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3Jr IGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0 dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRo ZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVz dCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElE X1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8N Cj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5F VF9VTkRJX1JFQ0VJVkVfRklMVEVSKSgNCj4gKyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQo+ICsg IElOICBOSUNfREFUQSAgICAqTmljDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNv bW1hbmQgaXMgdXNlZCB0byBnZXQgY3VycmVudCBzdGF0aW9uIGFuZCBicm9hZGNhc3QgTUFDIGFk ZHJlc3Nlcw0KPiArICBhbmQsIGlmIHN1cHBvcnRlZCwgdG8gY2hhbmdlIHRoZSBjdXJyZW50IHN0 YXRpb24gTUFDIGFkZHJlc3MuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIg dG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBB IHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0K PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBz dWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91 dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklD RV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBo YXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAg Tm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVG SUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElfU1RBVElPTl9BRERSRVNTKSgNCj4gKyAgSU4g IFBYRV9DREIgICAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgICAqTmljDQo+ICsgICk7DQo+ ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byByZWFkIGFuZCBjbGVhciB0 aGUgTklDIHRyYWZmaWMgc3RhdGlzdGljcy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEg cG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5d ICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRh Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4 ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAg QSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBF RklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBl cnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJh bWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRF RCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVT DQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9TVEFUSVNUSUNTKSgNCj4gKyAg SU4gIFBYRV9DREIgICAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgICAqTmljDQo+ICsgICk7 DQo+ICsNCj4gKy8qKg0KPiArICBUcmFuc2xhdGUgYSBtdWx0aWNhc3QgSVB2NCBvciBJUHY2IGFk ZHJlc3MgdG8gYSBtdWx0aWNhc3QgTUFDIGFkZHJlc3MuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAg Q2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBh cmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xs ZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVx dWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAg ICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEBy ZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBk ZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0 aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5T VVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJ X1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElfTUNBU1RfSVBUT01B QykoDQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICAgKk5p Yw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gcmVh ZCBhbmQgd3JpdGUgKGlmIHN1cHBvcnRlZCBieSBOSUMgSC9XKQ0KPiArICBub252b2xhdGlsZSBz dG9yYWdlIG9uIHRoZSBOSUMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIg dG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBB IHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0K PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBz dWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91 dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklD RV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBo YXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAg Tm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVG SUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElfTlZfREFUQSkoDQo+ICsgIElOICBQWEVfQ0RC ICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0KPiArICApOw0KPiArDQo+ICsv KioNCj4gKyAgVGhpcyBjb21tYW5kIHJldHVybnMgdGhlIGN1cnJlbnQgaW50ZXJydXB0IHN0YXR1 cyBhbmQvb3IgdGhlDQo+ICsgIHRyYW5zbWl0dGVkIGJ1ZmZlciBhZGRyZXNzZXMgYW5kIHRoZSBj dXJyZW50IG1lZGlhIHN0YXR1cy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRl ciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMg IEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiAr DQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVk IHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1l b3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVW SUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4N Cj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJz IGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAg ICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICso RUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9HRVRfU1RBVFVTKSgNCj4gKyAgSU4gIFBY RV9DREIgICAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgICAqTmljDQo+ICsgICk7DQo+ICsN Cj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBmaWxsIHRoZSBtZWRpYSBoZWFk ZXIocykgaW4gdHJhbnNtaXQgcGFja2V0KHMpLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAg QSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtp bl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRh dGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3Qg ZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAg ICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFs IEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNl IGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBh cmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9S VEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFU VVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX0ZJTExfSEVBREVSKSgNCj4g KyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgICAqTmljDQo+ICsg ICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGUgVHJhbnNtaXQgY29tbWFuZCBpcyB1c2VkIHRvIHBs YWNlIGEgcGFja2V0IGludG8gdGhlIHRyYW5zbWl0IHF1ZXVlLg0KPiArDQo+ICsgIEBwYXJhbVtp bl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsg IEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250 cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhl IHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VU ICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiAr ICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRv IGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUg b2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJ X1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4g K0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1RSQU5TTUlU KSgNCj4gKyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgICAqTmlj DQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBXaGVuIHRoZSBuZXR3b3JrIGFkYXB0ZXIgaGFz IHJlY2VpdmVkIGEgZnJhbWUsIHRoaXMgY29tbWFuZCBpcyB1c2VkDQo+ICsgIHRvIGNvcHkgdGhl IGZyYW1lIGludG8gZHJpdmVyL2FwcGxpY2F0aW9uIHN0b3JhZ2UuDQo+ICsNCj4gKyAgQHBhcmFt W2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4g KyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNv bnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBU aGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVP VVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUg dG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9u ZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4gKyAgQHJldHZhbCBF RklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0K PiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElfUkVDRUlW RSkoDQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICAgKk5p Yw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIHJlc2V0cyB0aGUgbmV0 d29yayBhZGFwdGVyIGFuZCBpbml0aWFsaXplcyBVTkRJIHVzaW5nDQo+ICsgIHRoZSBwYXJhbWV0 ZXJzIHN1cHBsaWVkIGluIHRoZSBDUEIuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIENkYiAg QSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtp biwgb3V0XSBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxl ciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1 ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAg ICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJl dHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRl dmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRo ZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNV UFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklf U1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfSU5JVElBTElaRSkoDQo+ICsg IElOICAgICAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOIE9VVCAgTklDX0RBVEEgICpOaWMNCj4g KyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIHJlYWQgYW5k IGNsZWFyIHRoZSBOSUMgdHJhZmZpYyBzdGF0aXN0aWNzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0g IE5pYyAgICAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRh dGEuDQo+ICsgIEBwYXJhbVtpbl0gIERiQWRkciAgRGF0YSBCbG9jayBBZGRyZXNzLg0KPiArICBA cGFyYW1baW5dICBEYlNpemUgIERhdGEgQmxvY2sgU2l6ZS4NCj4gKw0KPiArICBAcmV0dmFsIEVG SV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVj dXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRo ZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJ X0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2 YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4N Cj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNC X0VUSEVSTkVUX1NUQVRJU1RJQ1MpKA0KPiArICBJTiAgTklDX0RBVEEgICAgKk5pYywNCj4gKyAg SU4gIFVJTlQ2NCAgICAgIERiQWRkciwNCj4gKyAgSU4gIFVJTlQxNiAgICAgIERiU2l6ZQ0KPiAr ICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIG1hbmFnZSBh IFVTQiBkZXZpY2Ugd2l0aCB0aGUgYnVsayB0cmFuc2ZlciBwaXBlLiBUaGUgZW5kcG9pbnQgaXMg QnVsayBpbi4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgICAgQ2RiICAgICAgICAgICBBIHBvaW50 ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgICAg IFRoaXMgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9D T0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBQYWNrZXQgICAgICAgIEEgcG9pbnRl ciB0byB0aGUgYnVmZmVyIG9mIGRhdGEgdGhhdCB3aWxsIGJlIHRyYW5zbWl0dGVkIHRvIFVTQg0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2Ugb3IgcmVjZWl2ZWQgZnJv bSBVU0IgZGV2aWNlLg0KPiArICBAcGFyYW1baW4sIG91dF0gUGFja2V0TGVuZ3RoICBBIHBvaW50 ZXIgdG8gdGhlIFBhY2tldExlbmd0aC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICBUaGUgYnVsayB0cmFuc2ZlciBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQu DQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSB0cmFuc2ZlciBmYWlsZWQu IFRoZSB0cmFuc2ZlciBzdGF0dXMgaXMgcmV0dXJuZWQgaW4gc3RhdHVzLg0KPiArICBAcmV0dmFs IEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb3IgbW9yZSBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlk Lg0KPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBUaGUgcmVxdWVzdCBjb3VsZCBu b3QgYmUgc3VibWl0dGVkIGR1ZSB0byBhIGxhY2sgb2YgcmVzb3VyY2VzLg0KPiArICBAcmV0dmFs IEVGSV9USU1FT1VUICAgICAgICAgICBUaGUgY29udHJvbCB0cmFuc2ZlciBmYWlscyBkdWUgdG8g dGltZW91dC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAq RURLSUlfVVNCX0VUSEVSTkVUX1JFQ0VJVkUpKA0KPiArICBJTiAgICAgUFhFX0NEQiAgICAgICAg ICAgICAgICpDZGIsDQo+ICsgIElOICAgICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgKlRo aXMsDQo+ICsgIElOIE9VVCBWT0lEICAgICAgICAgICAgICAgICAgKlBhY2tldCwNCj4gKyAgSU4g T1VUIFVJTlROICAgICAgICAgICAgICAgICAqUGFja2V0TGVuZ3RoDQo+ICsgICk7DQo+ICsNCj4g Ky8qKg0KPiArICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbWFuYWdlIGEgVVNCIGRldmljZSB3 aXRoIHRoZSBidWxrIHRyYW5zZmVyIHBpcGUuIFRoZSBlbmRwb2ludCBpcyBCdWxrIG91dC4NCj4g Kw0KPiArICBAcGFyYW1baW5dICAgICAgQ2RiICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGNv bW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgICAgIFRoaXMgICAgICAg ICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2Uu DQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBQYWNrZXQgICAgICAgIEEgcG9pbnRlciB0byB0aGUgYnVm ZmVyIG9mIGRhdGEgdGhhdCB3aWxsIGJlIHRyYW5zbWl0dGVkIHRvIFVTQg0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2Ugb3IgcmVjZWl2ZWQgZnJvbSBVU0IgZGV2aWNl Lg0KPiArICBAcGFyYW1baW4sIG91dF0gUGFja2V0TGVuZ3RoICBBIHBvaW50ZXIgdG8gdGhlIFBh Y2tldExlbmd0aC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUg YnVsayB0cmFuc2ZlciBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuDQo+ICsgIEByZXR2 YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSB0cmFuc2ZlciBmYWlsZWQuIFRoZSB0cmFuc2Zl ciBzdGF0dXMgaXMgcmV0dXJuZWQgaW4gc3RhdHVzLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElE X1BBUkFNRVRFUiBPbmUgb3IgbW9yZSBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLg0KPiArICBAcmV0 dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBUaGUgcmVxdWVzdCBjb3VsZCBub3QgYmUgc3VibWl0 dGVkIGR1ZSB0byBhIGxhY2sgb2YgcmVzb3VyY2VzLg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VU ICAgICAgICAgICBUaGUgY29udHJvbCB0cmFuc2ZlciBmYWlscyBkdWUgdG8gdGltZW91dC4NCj4g KyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VU SEVSTkVUX1RSQU5TTUlUKSgNCj4gKyAgSU4gICAgIFBYRV9DREIgICAgICAgICAgICAgICAqQ2Ri LA0KPiArICBJTiAgICAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICpUaGlzLA0KPiArICBJ TiBPVVQgVk9JRCAgICAgICAgICAgICAgICAgICpQYWNrZXQsDQo+ICsgIElOIE9VVCBVSU5UTiAg ICAgICAgICAgICAgICAgKlBhY2tldExlbmd0aA0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAg VGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIG1hbmFnZSBhIFVTQiBkZXZpY2Ugd2l0aCBhbiBpbnRl cnJ1cHQgdHJhbnNmZXIgcGlwZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAg ICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5j ZS4NCj4gKyAgQHBhcmFtW2luXSAgSXNOZXdUcmFuc2ZlciAgICAgSWYgVFJVRSwgYSBuZXcgdHJh bnNmZXIgd2lsbCBiZSBzdWJtaXR0ZWQgdG8gVVNCIGNvbnRyb2xsZXIuIElmDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLCB0aGUgaW50ZXJydXB0IHRyYW5zZmVyIGlz IGRlbGV0ZWQgZnJvbSB0aGUgZGV2aWNlJ3MgaW50ZXJydXB0DQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRyYW5zZmVyIHF1ZXVlLg0KPiArICBAcGFyYW1baW5dICBQb2xsaW5n SW50ZXJ2YWwgICBJbmRpY2F0ZXMgdGhlIHBlcmlvZGljIHJhdGUsIGluIG1pbGxpc2Vjb25kcywg dGhhdCB0aGUgdHJhbnNmZXIgaXMgdG8gYmUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZXhlY3V0ZWQuVGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgd2hlbiBJc05ld1RyYW5z ZmVyIGlzIFRSVUUuIFRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1 ZSBtdXN0IGJlIGJldHdlZW4gMSB0byAyNTUsIG90aGVyd2lzZSBFRklfSU5WQUxJRF9QQVJBTUVU RVIgaXMgcmV0dXJuZWQuDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB1 bml0cyBhcmUgaW4gbWlsbGlzZWNvbmRzLg0KPiArICBAcGFyYW1baW5dICBSZXF1ZXN0ICAgICAg ICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9VU0JfREVWSUNFX1JFUVVFU1QgZGF0YS4NCj4gKw0K PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgYXN5bmNocm9ub3VzIFVTQiB0 cmFuc2ZlciByZXF1ZXN0IHRyYW5zZmVyIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4N Cj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIGFzeW5jaHJvbm91cyBVU0Ig dHJhbnNmZXIgcmVxdWVzdCBmYWlsZWQuDQo+ICsNCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJ X1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX0lOVEVSUlVQVCkoDQo+ICsg IElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgICpUaGlzLA0KPiArICBJTiBCT09MRUFO ICAgICAgICAgICAgICAgICBJc05ld1RyYW5zZmVyLA0KPiArICBJTiBVSU5UTiAgICAgICAgICAg ICAgICAgICBQb2xsaW5nSW50ZXJ2YWwsDQo+ICsgIElOIEVGSV9VU0JfREVWSUNFX1JFUVVFU1Qg ICpSZXF1ZXN0DQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBSZXRyaWV2ZXMgdGhlIFVTQiBF dGhlcm5ldCBNYWMgQWRkcmVzcy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAg IEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0K PiArICBAcGFyYW1bb3V0XSBNYWNBZGRyZXNzICAgIEEgcG9pbnRlciB0byB0aGUgY2FsbGVyIGFs bG9jYXRlZCBVU0IgRXRoZXJuZXQgTWFjIEFkZHJlc3MuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICAgVGhlIFVTQiBIZWFkZXIgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdh cyByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFN RVRFUiBVc2JIZWFkZXJGdW5EZXNjcmlwdG9yIGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX05P VF9GT1VORCAgICAgICAgIFRoZSBVU0IgSGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMg bm90IGZvdW5kLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJ ICpFREtJSV9VU0JfR0VUX0VUSF9NQUNfQUREUkVTUykoDQo+ICsgIElOICBFREtJSV9VU0JfRVRI RVJORVRfUFJPVE9DT0wgKlRoaXMsDQo+ICsgIE9VVCBFRklfTUFDX0FERFJFU1MgICAgICAgKk1h Y0FkZHJlc3MNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFJldHJpZXZlcyB0aGUgVVNCIEV0 aGVybmV0IEJ1bGsgdHJhbnNmZXIgZGF0YSBzaXplLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRo aXMgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wg aW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtvdXRdIEJ1bGtTaXplICAgICAgQSBwb2ludGVyIHRvIHRo ZSBCdWxrIHRyYW5zZmVyIGRhdGEgc2l6ZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICAgICBUaGUgVVNCIEhlYWRlciBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzIHJldHJp ZXZlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIFVz YkhlYWRlckZ1bkRlc2NyaXB0b3IgaXMgTlVMTC4NCj4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5E ICAgICAgICAgVGhlIFVTQiBIZWFkZXIgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcyBub3QgZm91 bmQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJ X1VTQl9FVEhfTUFYX0JVTEtfU0laRSkoDQo+ICsgIElOICBFREtJSV9VU0JfRVRIRVJORVRfUFJP VE9DT0wgKlRoaXMsDQo+ICsgIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgKkJ1bGtTaXplDQo+ ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBSZXRyaWV2ZXMgdGhlIFVTQiBIZWFkZXIgZnVuY3Rp b25hbCBEZXNjcmlwdG9yLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAg ICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5zdGFu Y2UuDQo+ICsgIEBwYXJhbVtvdXRdIFVzYkhlYWRlckZ1bkRlc2NyaXB0b3IgQSBwb2ludGVyIHRv IHRoZSBjYWxsZXIgYWxsb2NhdGVkIFVTQiBIZWFkZXIgRnVuY3Rpb25hbCBEZXNjcmlwdG9yLg0K PiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBVU0IgSGVhZGVyIEZ1 bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMgcmV0cmlldmVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJl dHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgVXNiSGVhZGVyRnVuRGVzY3JpcHRvciBpcyBOVUxM Lg0KPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICBUaGUgVVNCIEhlYWRlciBGdW5j dGlvbmFsIGRlc2NyaXB0b3Igd2FzIG5vdCBmb3VuZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiAr RUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0hFQURFUl9GVU5DVElPTkFMX0RFU0NS SVBUT1IpKA0KPiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICAgICAqVGhpcywN Cj4gKyAgT1VUIFVTQl9IRUFERVJfRlVOX0RFU0NSSVBUT1IgKlVzYkhlYWRlckZ1bkRlc2NyaXB0 b3INCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFJldHJpZXZlcyB0aGUgVVNCIFVuaW9uIGZ1 bmN0aW9uYWwgRGVzY3JpcHRvci4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAg ICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGlu c3RhbmNlLg0KPiArICBAcGFyYW1bb3V0XSBVc2JVbmlvbkZ1bkRlc2NyaXB0b3IgIEEgcG9pbnRl ciB0byB0aGUgY2FsbGVyIGFsbG9jYXRlZCBVU0IgVW5pb24gRnVuY3Rpb25hbCBEZXNjcmlwdG9y Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBVU0IgVW5pb24g RnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcyByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBA cmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBVc2JVbmlvbkZ1bkRlc2NyaXB0b3IgaXMgTlVM TC4NCj4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgVGhlIFVTQiBVbmlvbiBGdW5j dGlvbmFsIGRlc2NyaXB0b3Igd2FzIG5vdCBmb3VuZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiAr RUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX1VOSU9OX0ZVTkNUSU9OQUxfREVTQ1JJ UFRPUikoDQo+ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgICAgKlRoaXMsDQo+ ICsgIE9VVCBVU0JfVU5JT05fRlVOX0RFU0NSSVBUT1IgKlVzYlVuaW9uRnVuRGVzY3JpcHRvcg0K PiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVzIHRoZSBVU0IgRXRoZXJuZXQgZnVu Y3Rpb25hbCBEZXNjcmlwdG9yLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAg ICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5z dGFuY2UuDQo+ICsgIEBwYXJhbVtvdXRdIFVzYkV0aEZ1bkRlc2NyaXB0b3IgICAgQSBwb2ludGVy IHRvIHRoZSBjYWxsZXIgYWxsb2NhdGVkIFVTQiBFdGhlcm5ldCBGdW5jdGlvbmFsIERlc2NyaXB0 b3IuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIFVTQiBFdGhl cm5ldCBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzIHJldHJpZXZlZCBzdWNjZXNzZnVsbHkuDQo+ ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIFVzYkV0aEZ1bkRlc2NyaXB0b3IgaXMg TlVMTC4NCj4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgVGhlIFVTQiBFdGhlcm5l dCBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzIG5vdCBmb3VuZC4NCj4gKyoqLw0KPiArdHlwZWRl Zg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX0ZVTkNUSU9O QUxfREVTQ1JJUFRPUikoDQo+ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgICAg ICAgKlRoaXMsDQo+ICsgIE9VVCBVU0JfRVRIRVJORVRfRlVOX0RFU0NSSVBUT1IgKlVzYkV0aEZ1 bkRlc2NyaXB0b3INCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgcmVxdWVzdCBzZXRz IHRoZSBFdGhlcm5ldCBkZXZpY2UgbXVsdGljYXN0IGZpbHRlcnMgYXMgc3BlY2lmaWVkIGluIHRo ZQ0KPiArICBzZXF1ZW50aWFsIGxpc3Qgb2YgNDggYml0IEV0aGVybmV0IG11bHRpY2FzdCBhZGRy ZXNzZXMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgICBBIHBv aW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAg QHBhcmFtW2luXSAgVmFsdWUgICAgICAgICAgICAgICAgICBOdW1iZXIgb2YgZmlsdGVycy4NCj4g KyAgQHBhcmFtW2luXSAgTWNhc3RBZGRyICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIHZh bHVlIG9mIHRoZSBtdWx0aWNhc3QgYWRkcmVzc2VzLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAg QHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGlu ZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJl cXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5W QUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVl Lg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiAr KiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRI RVJORVRfU0VUX0VUSF9NVUxUSUNBU1RfRklMVEVSUykoDQo+ICsgIElOIEVES0lJX1VTQl9FVEhF Uk5FVF9QUk9UT0NPTCAqVGhpcywNCj4gKyAgSU4gVUlOVDE2ICAgICAgICAgICAgICAgIFZhbHVl LA0KPiArICBJTiBWT0lEICAgICAgICAgICAgICAgICAgKk1jYXN0QWRkcg0KPiArICApOw0KPiAr DQo+ICsvKioNCj4gKyAgVGhpcyByZXF1ZXN0IHNldHMgdXAgdGhlIHNwZWNpZmllZCBFdGhlcm5l dCBwb3dlciBtYW5hZ2VtZW50IHBhdHRlcm4gZmlsdGVyIGFzDQo+ICsgIGRlc2NyaWJlZCBpbiB0 aGUgZGF0YSBzdHJ1Y3R1cmUuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAg ICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0 YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgVmFsdWUgICAgICAgICAgICAgICAgICBOdW1iZXIgb2Yg ZmlsdGVycy4NCj4gKyAgQHBhcmFtW2luXSAgTGVuZ3RoICAgICAgICAgICAgICAgICBTaXplIG9m IHRoZSBwb3dlciBtYW5hZ2VtZW50IHBhdHRlcm4gZmlsdGVyIGRhdGEuDQo+ICsgIEBwYXJhbVtp bl0gIFBhdHRlcm5GaWx0ZXIgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBwb3dlciBtYW5hZ2Vt ZW50IHBhdHRlcm4gZmlsdGVyIHN0cnVjdHVyZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEBy ZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcg dGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1 ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFM SURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4N Cj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoq Lw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVS TkVUX1NFVF9FVEhfUE9XRVJfTUFOQUdFX1BBVFRFUk5fRklMVEVSKSgNCj4gKyAgSU4gRURLSUlf VVNCX0VUSEVSTkVUX1BST1RPQ09MICpUaGlzLA0KPiArICBJTiBVSU5UMTYgICAgICAgICAgICAg ICAgVmFsdWUsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICBMZW5ndGgsDQo+ICsgIElO IFZPSUQgICAgICAgICAgICAgICAgICAqUGF0dGVybkZpbHRlcg0KPiArICApOw0KPiArDQo+ICsv KioNCj4gKyAgVGhpcyByZXF1ZXN0IHJldHJpZXZlcyB0aGUgc3RhdHVzIG9mIHRoZSBzcGVjaWZp ZWQgRXRoZXJuZXQgcG93ZXIgbWFuYWdlbWVudA0KPiArICBwYXR0ZXJuIGZpbHRlciBmcm9tIHRo ZSBkZXZpY2UuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgICBB IHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4g KyAgQHBhcmFtW2luXSAgVmFsdWUgICAgICAgICAgICAgICAgICBUaGUgZmlsdGVyIG51bWJlci4N Cj4gKyAgQHBhcmFtW291dF0gUGF0dGVybkFjdGl2ZSAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhl IHBhdHRlcm4gYWN0aXZlIGJvb2xlYW4uDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFs IEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSBy ZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBm YWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BB UkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ICsg IEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4g K3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9H RVRfRVRIX1BPV0VSX01BTkFHRV9QQVRURVJOX0ZJTFRFUikoDQo+ICsgIElOICAgRURLSUlfVVNC X0VUSEVSTkVUX1BST1RPQ09MICpUaGlzLA0KPiArICBJTiAgIFVJTlQxNiAgICAgICAgICAgICAg ICBWYWx1ZSwNCj4gKyAgT1VUICBCT09MRUFOICAgICAgICAgICAgICAgKlBhdHRlcm5BY3RpdmUN Cj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgcmVxdWVzdCBpcyB1c2VkIHRvIGNvbmZp Z3VyZSBkZXZpY2UgRXRoZXJuZXQgcGFja2V0IGZpbHRlciBzZXR0aW5ncy4NCj4gKw0KPiArICBA cGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9F VEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgVmFsdWUgICAgICAg ICAgICAgUGFja2V0IEZpbHRlciBCaXRtYXAuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0 dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRo ZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVz dCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElE X1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8N Cj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5F VF9TRVRfRVRIX1BBQ0tFVF9GSUxURVIpKA0KPiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJP VE9DT0wgKlRoaXMsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICBWYWx1ZQ0KPiArICAp Ow0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyByZXF1ZXN0IGlzIHVzZWQgdG8gcmV0cmlldmUgYSBz dGF0aXN0aWMgYmFzZWQgb24gdGhlIGZlYXR1cmUgc2VsZWN0b3IuDQo+ICsNCj4gKyAgQHBhcmFt W2luXSAgVGhpcyAgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VU SEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBGZWF0dXJlU2VsZWN0 b3IgICAgICAgVmFsdWUgb2YgdGhlIGZlYXR1cmUgc2VsZWN0b3IuDQo+ICsgIEBwYXJhbVtvdXRd IFN0YXRpc3RpYyAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIDMyIGJpdCB1bnNpZ25lZCBp bnRlZ2VyLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1 ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAg ICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJl dHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRl dmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRo ZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNV UFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklf U1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfR0VUX0VUSF9TVEFUSVNUSUMp KA0KPiArICBJTiAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4g IFVJTlQxNiAgICAgICAgICAgICAgICAgRmVhdHVyZVNlbGVjdG9yLA0KPiArICBPVVQgVk9JRCAg ICAgICAgICAgICAgICAgICAqU3RhdGlzdGljDQo+ICsgICk7DQo+ICsNCj4gK3R5cGVkZWYgc3Ry dWN0IHsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfR0VUX1NUQVRFICAgICAgICAgICBV c2JFdGhVbmRpR2V0U3RhdGU7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1NUQVJUICAg ICAgICAgICAgICAgVXNiRXRoVW5kaVN0YXJ0Ow0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5E SV9TVE9QICAgICAgICAgICAgICAgIFVzYkV0aFVuZGlTdG9wOw0KPiArICBFREtJSV9VU0JfRVRI RVJORVRfVU5ESV9HRVRfSU5JVF9JTkZPICAgICAgIFVzYkV0aFVuZGlHZXRJbml0SW5mbzsNCj4g KyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfR0VUX0NPTkZJR19JTkZPICAgICBVc2JFdGhVbmRp R2V0Q29uZmlnSW5mbzsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfSU5JVElBTElaRSAg ICAgICAgICBVc2JFdGhVbmRpSW5pdGlhbGl6ZTsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VO RElfUkVTRVQgICAgICAgICAgICAgICBVc2JFdGhVbmRpUmVzZXQ7DQo+ICsgIEVES0lJX1VTQl9F VEhFUk5FVF9VTkRJX1NIVVRET1dOICAgICAgICAgICAgVXNiRXRoVW5kaVNodXRkb3duOw0KPiAr ICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9JTlRFUlJVUFRfRU5BQkxFICAgIFVzYkV0aFVuZGlJ bnRlcnJ1cHRFbmFibGU7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1JFQ0VJVkVfRklM VEVSICAgICAgVXNiRXRoVW5kaVJlY2VpdmVGaWx0ZXI7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5F VF9VTkRJX1NUQVRJT05fQUREUkVTUyAgICAgVXNiRXRoVW5kaVN0YXRpb25BZGRyZXNzOw0KPiAr ICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9TVEFUSVNUSUNTICAgICAgICAgIFVzYkV0aFVuZGlT dGF0aXN0aWNzOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9NQ0FTVF9JUFRPTUFDICAg ICAgIFVzYkV0aFVuZGlNY2FzdElwMk1hYzsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElf TlZfREFUQSAgICAgICAgICAgICBVc2JFdGhVbmRpTnZEYXRhOw0KPiArICBFREtJSV9VU0JfRVRI RVJORVRfVU5ESV9HRVRfU1RBVFVTICAgICAgICAgIFVzYkV0aFVuZGlHZXRTdGF0dXM7DQo+ICsg IEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX0ZJTExfSEVBREVSICAgICAgICAgVXNiRXRoVW5kaUZp bGxIZWFkZXI7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1RSQU5TTUlUICAgICAgICAg ICAgVXNiRXRoVW5kaVRyYW5zbWl0Ow0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9SRUNF SVZFICAgICAgICAgICAgIFVzYkV0aFVuZGlSZWNlaXZlOw0KPiArfSBFREtJSV9VU0JfRVRIRVJO RVRfVU5ESTsNCj4gKw0KPiArLy8gVGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBwcm92 aWRlcyBzb21lIGJhc2ljIFVTQiBFdGhlcm5ldCBkZXZpY2UgcmVsZXZhbnQNCj4gKy8vIGRlc2Ny aXB0b3IgYW5kIHNwZWNpZmljIHJlcXVlc3RzLg0KPiArc3RydWN0IF9FREtJSV9VU0JfRVRIRVJO RVRfUFJPVE9DT0wgew0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVXNiRXRoVW5kaTsNCj4gKyAgLy8gZm9yIGNhbGxpbmcgdGhl IFVOREkgY2hpbGQgZnVuY3Rpb25zDQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9JTklUSUFMSVpF ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JFdGhJbml0aWFsaXplOw0KPiArICBFREtJ SV9VU0JfRVRIRVJORVRfU1RBVElTVElDUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNi RXRoU3RhdGlzdGljczsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1JFQ0VJVkUgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFVzYkV0aFJlY2VpdmU7DQo+ICsgIEVES0lJX1VTQl9FVEhF Uk5FVF9UUkFOU01JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JFdGhUcmFuc21p dDsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFVzYkV0aEludGVycnVwdDsNCj4gKyAgRURLSUlfVVNCX0dFVF9FVEhfTUFDX0FE RFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYkV0aE1hY0FkZHJlc3M7DQo+ICsg IEVES0lJX1VTQl9FVEhfTUFYX0JVTEtfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBVc2JFdGhNYXhCdWxrU2l6ZTsNCj4gKyAgRURLSUlfVVNCX0hFQURFUl9GVU5DVElPTkFMX0RF U0NSSVBUT1IgICAgICAgICAgICAgICAgICAgIFVzYkhlYWRlckZ1bkRlc2NyaXB0b3I7DQo+ICsg IEVES0lJX1VTQl9VTklPTl9GVU5DVElPTkFMX0RFU0NSSVBUT1IgICAgICAgICAgICAgICAgICAg ICBVc2JVbmlvbkZ1bkRlc2NyaXB0b3I7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9GVU5DVElP TkFMX0RFU0NSSVBUT1IgICAgICAgICAgICAgICAgICBVc2JFdGhGdW5EZXNjcmlwdG9yOw0KPiAr ICBFREtJSV9VU0JfRVRIRVJORVRfU0VUX0VUSF9NVUxUSUNBU1RfRklMVEVSUyAgICAgICAgICAg ICAgU2V0VXNiRXRoTWNhc3RGaWx0ZXI7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9TRVRfRVRI X1BPV0VSX01BTkFHRV9QQVRURVJOX0ZJTFRFUiAgICBTZXRVc2JFdGhQb3dlclBhdHRlcm5GaWx0 ZXI7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9HRVRfRVRIX1BPV0VSX01BTkFHRV9QQVRURVJO X0ZJTFRFUiAgICBHZXRVc2JFdGhQb3dlclBhdHRlcm5GaWx0ZXI7DQo+ICsgIEVES0lJX1VTQl9F VEhFUk5FVF9TRVRfRVRIX1BBQ0tFVF9GSUxURVIgICAgICAgICAgICAgICAgICBTZXRVc2JFdGhQ YWNrZXRGaWx0ZXI7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9HRVRfRVRIX1NUQVRJU1RJQyAg ICAgICAgICAgICAgICAgICAgICBHZXRVc2JFdGhTdGF0aXN0aWM7DQo+ICt9Ow0KPiArDQo+ICtl eHRlcm4gRUZJX0dVSUQgIGdFZGtJSVVzYkV0aFByb3RvY29sR3VpZDsNCj4gKw0KPiArI2VuZGlm DQo+IGRpZmYgLS1naXQgYS9Vc2JOZXR3b3JrUGtnL05ldHdvcmtDb21tb24vQ29tcG9uZW50TmFt ZS5jIGIvVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL0NvbXBvbmVudE5hbWUuYw0KPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi5lODM0NjllMTMwDQo+IC0tLSAv ZGV2L251bGwNCj4gKysrIGIvVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL0NvbXBvbmVudE5h bWUuYw0KPiBAQCAtMCwwICsxLDI2MyBAQA0KPiArLyoqIEBmaWxlDQo+ICsgIFRoaXMgZmlsZSBj b250YWlucyBjb2RlIGZvciBVU0IgbmV0d29yayBjb21tb24gZHJpdmVyDQo+ICsgIGNvbXBvbmVu dCBuYW1lIGRlZmluaXRpb25zDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDIzLCBBbWVyaWNh biBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4N Cj4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gKyoq Lw0KPiArDQo+ICsjaW5jbHVkZSAiRHJpdmVyQmluZGluZy5oIg0KPiArDQo+ICtleHRlcm4gRUZJ X0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICBnTmV0d29ya0NvbW1vbkRyaXZlckJpbmRpbmc7DQo+ ICsNCj4gK0dMT0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEIEVGSV9VTklDT0RFX1NUUklOR19U QUJMRSAgZ05ldHdvcmtDb21tb25Ecml2ZXJOYW1lVGFibGVbXSA9IHsNCj4gKyAgew0KPiArICAg ICJlbmc7ZW4iLA0KPiArICAgIEwiTmV0d29yayBDb21tb24gRHJpdmVyIg0KPiArICB9LA0KPiAr ICB7DQo+ICsgICAgTlVMTCwNCj4gKyAgICBOVUxMDQo+ICsgIH0NCj4gK307DQo+ICtHTE9CQUxf UkVNT1ZFX0lGX1VOUkVGRVJFTkNFRCBFRklfVU5JQ09ERV9TVFJJTkdfVEFCTEUgICpnTmV0d29y a0NvbW1vbkNvbnRyb2xsZXJOYW1lVGFibGUgPSBOVUxMOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ ICtFRklBUEkNCj4gK05ldHdvcmtDb21tb25Db21wb25lbnROYW1lR2V0RHJpdmVyTmFtZSAoDQo+ ICsgIElOICBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiAgQ0hB UjggICAgICAgICAgICAgICAgICAgICAgICAqTGFuZ3VhZ2UsDQo+ICsgIE9VVCBDSEFSMTYgICAg ICAgICAgICAgICAgICAgICAgICoqRHJpdmVyTmFtZQ0KPiArICApOw0KPiArDQo+ICtFRklfU1RB VFVTDQo+ICtFRklBUEkNCj4gK05ldHdvcmtDb21tb25Db21wb25lbnROYW1lR2V0Q29udHJvbGxl ck5hbWUgKA0KPiArICBJTiBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgICpUaGlzLA0KPiAr ICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXIsDQo+ICsgIElOIEVG SV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ2hpbGRIYW5kbGUgICAgICAgIE9QVElPTkFMLA0K PiArICBJTiBDSEFSOCAgICAgICAgICAgICAgICAgICAgICAgICpMYW5ndWFnZSwNCj4gKyAgT1VU IENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAqKkNvbnRyb2xsZXJOYW1lDQo+ICsgICk7DQo+ ICsNCj4gK0dMT0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEIEVGSV9DT01QT05FTlRfTkFNRV9Q Uk9UT0NPTCAgZ05ldHdvcmtDb21tb25Db21wb25lbnROYW1lID0gew0KPiArICBOZXR3b3JrQ29t bW9uQ29tcG9uZW50TmFtZUdldERyaXZlck5hbWUsDQo+ICsgIE5ldHdvcmtDb21tb25Db21wb25l bnROYW1lR2V0Q29udHJvbGxlck5hbWUsDQo+ICsgICJlbmciDQo+ICt9Ow0KPiArDQo+ICtHTE9C QUxfUkVNT1ZFX0lGX1VOUkVGRVJFTkNFRCBFRklfQ09NUE9ORU5UX05BTUUyX1BST1RPQ09MICBn TmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWUyID0gew0KPiArICAoRUZJX0NPTVBPTkVOVF9OQU1F Ml9HRVRfRFJJVkVSX05BTUUpTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWVHZXREcml2ZXJOYW1l LA0KPiArICAoRUZJX0NPTVBPTkVOVF9OQU1FMl9HRVRfQ09OVFJPTExFUl9OQU1FKU5ldHdvcmtD b21tb25Db21wb25lbnROYW1lR2V0Q29udHJvbGxlck5hbWUsDQo+ICsgICJlbiINCj4gK307DQo+ ICsNCj4gKy8qKg0KPiArICBSZXRyaWV2ZXMgYSBVbmljb2RlIHN0cmluZyB0aGF0IGlzIHRoZSB1 c2VyIHJlYWRhYmxlIG5hbWUgb2YgdGhlIGRyaXZlci4NCj4gKw0KPiArICBUaGlzIGZ1bmN0aW9u IHJldHJpZXZlcyB0aGUgdXNlciByZWFkYWJsZSBuYW1lIG9mIGEgZHJpdmVyIGluIHRoZSBmb3Jt IG9mIGENCj4gKyAgVW5pY29kZSBzdHJpbmcuIElmIHRoZSBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRo aXMgaGFzIGEgdXNlciByZWFkYWJsZSBuYW1lIGluDQo+ICsgIHRoZSBsYW5ndWFnZSBzcGVjaWZp ZWQgYnkgTGFuZ3VhZ2UsIHRoZW4gYSBwb2ludGVyIHRvIHRoZSBkcml2ZXIgbmFtZSBpcw0KPiAr ICByZXR1cm5lZCBpbiBEcml2ZXJOYW1lLCBhbmQgRUZJX1NVQ0NFU1MgaXMgcmV0dXJuZWQuIElm IHRoZSBkcml2ZXIgc3BlY2lmaWVkDQo+ICsgIGJ5IFRoaXMgZG9lcyBub3Qgc3VwcG9ydCB0aGUg bGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlLA0KPiArICB0aGVuIEVGSV9VTlNVUFBPUlRF RCBpcyByZXR1cm5lZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICBB IHBvaW50ZXIgdG8gdGhlIEVGSV9DT01QT05FTlRfTkFNRTJfUFJPVE9DT0wgb3INCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MIGlu c3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBMYW5ndWFnZSAgICAgICAgICBBIHBvaW50ZXIgdG8g YSBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGFycmF5IGluZGljYXRpbmcgdGhlIGxhbmd1YWdlLiBUaGlzIGlzIHRoZQ0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZSBvZiB0aGUgZHJpdmVyIG5h bWUgdGhhdCB0aGUgY2FsbGVyIGlzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJlcXVlc3RpbmcsIGFuZCBpdCBtdXN0IG1hdGNoIG9uZSBvZiB0aGUNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VzIHNwZWNpZmllZCBpbiBTdXBwb3J0ZWRMYW5n dWFnZXMuIFRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2Yg bGFuZ3VhZ2VzIHN1cHBvcnRlZCBieSBhIGRyaXZlciBpcyB1cA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0byB0aGUgZHJpdmVyIHdyaXRlci4gTGFuZ3VhZ2UgaXMgc3BlY2lm aWVkDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFJGQyA0NjQ2IG9yIElT TyA2MzktMiBsYW5ndWFnZSBjb2RlIGZvcm1hdC4NCj4gKyAgQHBhcmFtW291dF0gRHJpdmVyTmFt ZSAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBVbmljb2RlIHN0cmluZyB0byByZXR1cm4uDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgVW5pY29kZSBzdHJpbmcgaXMgdGhl IG5hbWUgb2YgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlciBz cGVjaWZpZWQgYnkgVGhpcyBpbiB0aGUgbGFuZ3VhZ2UNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3BlY2lmaWVkIGJ5IExhbmd1YWdlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgIFRoZSBVbmljb2RlIHN0cmluZyBmb3IgdGhlIERyaXZlciBzcGVj aWZpZWQgYnkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBhbmQgdGhl IGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSB3YXMNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuZWQgaW4gRHJpdmVyTmFtZS4NCj4gKyAgQHJldHZhbCBFRklf SU5WQUxJRF9QQVJBTUVURVIgTGFuZ3VhZ2UgaXMgTlVMTC4NCj4gKyAgQHJldHZhbCBFRklfSU5W QUxJRF9QQVJBTUVURVIgRHJpdmVyTmFtZSBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9VTlNV UFBPUlRFRCAgICAgICBUaGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGRvZXMgbm90IHN1cHBv cnQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxhbmd1YWdlIHNwZWNp ZmllZCBieSBMYW5ndWFnZS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkN Cj4gK05ldHdvcmtDb21tb25Db21wb25lbnROYW1lR2V0RHJpdmVyTmFtZSAoDQo+ICsgIElOICBF RklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiAgQ0hBUjggICAgICAg ICAgICAgICAgICAgICAgICAqTGFuZ3VhZ2UsDQo+ICsgIE9VVCBDSEFSMTYgICAgICAgICAgICAg ICAgICAgICAgICoqRHJpdmVyTmFtZQ0KPiArICApDQo+ICt7DQo+ICsgIHJldHVybiBMb29rdXBV bmljb2RlU3RyaW5nMiAoDQo+ICsgICAgICAgICAgIExhbmd1YWdlLA0KPiArICAgICAgICAgICBU aGlzLT5TdXBwb3J0ZWRMYW5ndWFnZXMsDQo+ICsgICAgICAgICAgIGdOZXR3b3JrQ29tbW9uRHJp dmVyTmFtZVRhYmxlLA0KPiArICAgICAgICAgICBEcml2ZXJOYW1lLA0KPiArICAgICAgICAgICAo Qk9PTEVBTikoVGhpcyA9PSAmZ05ldHdvcmtDb21tb25Db21wb25lbnROYW1lKQ0KPiArICAgICAg ICAgICApOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVzIGEgVW5pY29kZSBzdHJp bmcgdGhhdCBpcyB0aGUgdXNlciByZWFkYWJsZSBuYW1lIG9mIHRoZSBjb250cm9sbGVyDQo+ICsg IHRoYXQgaXMgYmVpbmcgbWFuYWdlZCBieSBhIGRyaXZlci4NCj4gKw0KPiArICBUaGlzIGZ1bmN0 aW9uIHJldHJpZXZlcyB0aGUgdXNlciByZWFkYWJsZSBuYW1lIG9mIHRoZSBjb250cm9sbGVyIHNw ZWNpZmllZCBieQ0KPiArICBDb250cm9sbGVySGFuZGxlIGFuZCBDaGlsZEhhbmRsZSBpbiB0aGUg Zm9ybSBvZiBhIFVuaWNvZGUgc3RyaW5nLiBJZiB0aGUNCj4gKyAgZHJpdmVyIHNwZWNpZmllZCBi eSBUaGlzIGhhcyBhIHVzZXIgcmVhZGFibGUgbmFtZSBpbiB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVk IGJ5DQo+ICsgIExhbmd1YWdlLCB0aGVuIGEgcG9pbnRlciB0byB0aGUgY29udHJvbGxlciBuYW1l IGlzIHJldHVybmVkIGluIENvbnRyb2xsZXJOYW1lLA0KPiArICBhbmQgRUZJX1NVQ0NFU1MgaXMg cmV0dXJuZWQuICBJZiB0aGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGlzIG5vdCBjdXJyZW50 bHkNCj4gKyAgbWFuYWdpbmcgdGhlIGNvbnRyb2xsZXIgc3BlY2lmaWVkIGJ5IENvbnRyb2xsZXJI YW5kbGUgYW5kIENoaWxkSGFuZGxlLA0KPiArICB0aGVuIEVGSV9VTlNVUFBPUlRFRCBpcyByZXR1 cm5lZC4gIElmIHRoZSBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgZG9lcyBub3QNCj4gKyAgc3Vw cG9ydCB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlLCB0aGVuIEVGSV9VTlNVUFBP UlRFRCBpcyByZXR1cm5lZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAg ICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9DT01QT05FTlRfTkFNRTJfUFJPVE9DT0wgb3INCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09M IGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBDb250cm9sbGVyICAgICAgICBUaGUgaGFuZGxl IG9mIGEgY29udHJvbGxlciB0aGF0IHRoZSBkcml2ZXINCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3BlY2lmaWVkIGJ5IFRoaXMgaXMgbWFuYWdpbmcuICBUaGlzIGhhbmRsZQ0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgdGhlIGNvbnRyb2xs ZXIgd2hvc2UgbmFtZSBpcyB0byBiZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm5lZC4NCj4gKyAgQHBhcmFtW2luXSAgQ2hpbGRIYW5kbGUgICAgICAgVGhlIGhhbmRs ZSBvZiB0aGUgY2hpbGQgY29udHJvbGxlciB0byByZXRyaWV2ZQ0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0aGUgbmFtZSBvZi4gIFRoaXMgaXMgYW4gb3B0aW9uYWwgcGFyYW1l dGVyIHRoYXQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5IGJlIE5VTEwu ICBJdCB3aWxsIGJlIE5VTEwgZm9yIGRldmljZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkcml2ZXJzLiAgSXQgd2lsbCBhbHNvIGJlIE5VTEwgZm9yIGEgYnVzIGRyaXZlcnMN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB3aXNoIHRvIHJldHJpZXZl IHRoZSBuYW1lIG9mIHRoZSBidXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29udHJvbGxlci4gIEl0IHdpbGwgbm90IGJlIE5VTEwgZm9yIGEgYnVzDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRyaXZlciB0aGF0IHdpc2hlcyB0byByZXRyaWV2ZSB0aGUg bmFtZSBvZiBhDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkIGNvbnRy b2xsZXIuDQo+ICsgIEBwYXJhbVtpbl0gIExhbmd1YWdlICAgICAgICAgIEEgcG9pbnRlciB0byBh IE51bGwtdGVybWluYXRlZCBBU0NJSSBzdHJpbmcNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYXJyYXkgaW5kaWNhdGluZyB0aGUgbGFuZ3VhZ2UuICBUaGlzIGlzIHRoZQ0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZSBvZiB0aGUgZHJpdmVyIG5h bWUgdGhhdCB0aGUgY2FsbGVyIGlzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJlcXVlc3RpbmcsIGFuZCBpdCBtdXN0IG1hdGNoIG9uZSBvZiB0aGUNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VzIHNwZWNpZmllZCBpbiBTdXBwb3J0ZWRMYW5n dWFnZXMuIFRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2Yg bGFuZ3VhZ2VzIHN1cHBvcnRlZCBieSBhIGRyaXZlciBpcyB1cA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0byB0aGUgZHJpdmVyIHdyaXRlci4gTGFuZ3VhZ2UgaXMgc3BlY2lm aWVkIGluDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJGQyA0NjQ2IG9yIElT TyA2MzktMiBsYW5ndWFnZSBjb2RlIGZvcm1hdC4NCj4gKyAgQHBhcmFtW291dF0gQ29udHJvbGxl ck5hbWUgICAgQSBwb2ludGVyIHRvIHRoZSBVbmljb2RlIHN0cmluZyB0byByZXR1cm4uDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgVW5pY29kZSBzdHJpbmcgaXMgdGhl IG5hbWUgb2YgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xs ZXIgc3BlY2lmaWVkIGJ5IENvbnRyb2xsZXJIYW5kbGUgYW5kDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIENoaWxkSGFuZGxlIGluIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFuZ3VhZ2UgZnJvbSB0aGUgcG9p bnQgb2YgdmlldyBvZiB0aGUgZHJpdmVyDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNwZWNpZmllZCBieSBUaGlzLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgIFRoZSBVbmljb2RlIHN0cmluZyBmb3IgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBpbg0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVk IGJ5IExhbmd1YWdlIGZvciB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIHdhcyByZXR1cm5lZCBpbg0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBEcml2ZXJOYW1lLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElE X1BBUkFNRVRFUiBDb250cm9sbGVySGFuZGxlIGlzIG5vdCBhIHZhbGlkIEVGSV9IQU5ETEUuDQo+ ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIENoaWxkSGFuZGxlIGlzIG5vdCBOVUxM IGFuZCBpdCBpcyBub3QgYSB2YWxpZA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBFRklfSEFORExFLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBMYW5ndWFn ZSBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBDb250cm9sbGVy TmFtZSBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBUaGUgZHJp dmVyIHNwZWNpZmllZCBieSBUaGlzIGlzIG5vdCBjdXJyZW50bHkNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbWFuYWdpbmcgdGhlIGNvbnRyb2xsZXIgc3BlY2lmaWVkIGJ5DQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUgYW5kIENo aWxkSGFuZGxlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBUaGUgZHJpdmVy IHNwZWNpZmllZCBieSBUaGlzIGRvZXMgbm90IHN1cHBvcnQNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZS4NCj4gKw0K PiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK05ldHdvcmtDb21tb25Db21wb25l bnROYW1lR2V0Q29udHJvbGxlck5hbWUgKA0KPiArICBJTiAgRUZJX0NPTVBPTkVOVF9OQU1FX1BS T1RPQ09MICAqVGhpcywNCj4gKyAgSU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ29u dHJvbGxlciwNCj4gKyAgSU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ2hpbGRIYW5k bGUgICAgICAgIE9QVElPTkFMLA0KPiArICBJTiAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAg ICAqTGFuZ3VhZ2UsDQo+ICsgIE9VVCBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICoqQ29u dHJvbGxlck5hbWUNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAg ICBTdGF0dXM7DQo+ICsgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICpIYW5kbGVOYW1lOw0K PiArICBFRklfVVNCX0lPX1BST1RPQ09MICAgICAgICAqVXNiSW87DQo+ICsgIEVGSV9VU0JfREVW SUNFX0RFU0NSSVBUT1IgIERldkRlc2M7DQo+ICsNCj4gKyAgaWYgKCFMYW5ndWFnZSB8fCAhQ29u dHJvbGxlck5hbWUpIHsNCj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiAr ICB9DQo+ICsNCj4gKyAgaWYgKENoaWxkSGFuZGxlID09IE5VTEwpIHsNCj4gKyAgICByZXR1cm4g RUZJX1VOU1VQUE9SVEVEOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gTWFrZSBzdXJl IHRoaXMgZHJpdmVyIGlzIGN1cnJlbnRseSBtYW5hZ2luZyBDb250cm9sbGVySGFuZGxlDQo+ICsg IC8vDQo+ICsgIFN0YXR1cyA9IEVmaVRlc3RNYW5hZ2VkRGV2aWNlICgNCj4gKyAgICAgICAgICAg ICBDb250cm9sbGVyLA0KPiArICAgICAgICAgICAgIGdOZXR3b3JrQ29tbW9uRHJpdmVyQmluZGlu Zy5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90 b2NvbEd1aWQNCj4gKyAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8v IE1ha2Ugc3VyZSB0aGlzIGRyaXZlciBwcm9kdWNlZCBDaGlsZEhhbmRsZQ0KPiArICAvLw0KPiAr ICBTdGF0dXMgPSBFZmlUZXN0Q2hpbGRIYW5kbGUgKA0KPiArICAgICAgICAgICAgIENvbnRyb2xs ZXIsDQo+ICsgICAgICAgICAgICAgQ2hpbGRIYW5kbGUsDQo+ICsgICAgICAgICAgICAgJmdFZGtJ SVVzYkV0aFByb3RvY29sR3VpZA0KPiArICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAg U3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoQ29udHJvbGxlciwgJmdFZmlVc2JJb1Byb3Rv Y29sR3VpZCwgKFZPSUQgKiopJlVzYklvKTsNCj4gKw0KPiArICBpZiAoIUVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiArICAgIFN0YXR1cyA9IFVzYklvLT5Vc2JHZXREZXZpY2VEZXNjcmlwdG9yIChV c2JJbywgJkRldkRlc2MpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAg ICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgU3RhdHVzID0gVXNiSW8t PlVzYkdldFN0cmluZ0Rlc2NyaXB0b3IgKFVzYklvLCAweDQwOSwgRGV2RGVzYy5TdHJNYW51ZmFj dHVyZXIsICZIYW5kbGVOYW1lKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0NCj4gKw0KPiArICAgICpDb250cm9sbGVy TmFtZSA9IEhhbmRsZU5hbWU7DQo+ICsNCj4gKyAgICBpZiAoZ05ldHdvcmtDb21tb25Db250cm9s bGVyTmFtZVRhYmxlICE9IE5VTEwpIHsNCj4gKyAgICAgIEZyZWVVbmljb2RlU3RyaW5nVGFibGUg KGdOZXR3b3JrQ29tbW9uQ29udHJvbGxlck5hbWVUYWJsZSk7DQo+ICsgICAgICBnTmV0d29ya0Nv bW1vbkNvbnRyb2xsZXJOYW1lVGFibGUgPSBOVUxMOw0KPiArICAgIH0NCj4gKw0KPiArICAgIFN0 YXR1cyA9IEFkZFVuaWNvZGVTdHJpbmcyICgNCj4gKyAgICAgICAgICAgICAgICJlbmciLA0KPiAr ICAgICAgICAgICAgICAgZ05ldHdvcmtDb21tb25Db21wb25lbnROYW1lLlN1cHBvcnRlZExhbmd1 YWdlcywNCj4gKyAgICAgICAgICAgICAgICZnTmV0d29ya0NvbW1vbkNvbnRyb2xsZXJOYW1lVGFi bGUsDQo+ICsgICAgICAgICAgICAgICBIYW5kbGVOYW1lLA0KPiArICAgICAgICAgICAgICAgVFJV RQ0KPiArICAgICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0NCj4gKw0KPiArICAgIFN0YXR1cyA9 IEFkZFVuaWNvZGVTdHJpbmcyICgNCj4gKyAgICAgICAgICAgICAgICJlbiIsDQo+ICsgICAgICAg ICAgICAgICBnTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWUyLlN1cHBvcnRlZExhbmd1YWdlcywN Cj4gKyAgICAgICAgICAgICAgICZnTmV0d29ya0NvbW1vbkNvbnRyb2xsZXJOYW1lVGFibGUsDQo+ ICsgICAgICAgICAgICAgICBIYW5kbGVOYW1lLA0KPiArICAgICAgICAgICAgICAgRkFMU0UNCj4g KyAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAr ICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICByZXR1cm4gTG9va3Vw VW5pY29kZVN0cmluZzIgKA0KPiArICAgICAgICAgICAgIExhbmd1YWdlLA0KPiArICAgICAgICAg ICAgIFRoaXMtPlN1cHBvcnRlZExhbmd1YWdlcywNCj4gKyAgICAgICAgICAgICBnTmV0d29ya0Nv bW1vbkNvbnRyb2xsZXJOYW1lVGFibGUsDQo+ICsgICAgICAgICAgICAgQ29udHJvbGxlck5hbWUs DQo+ICsgICAgICAgICAgICAgKEJPT0xFQU4pKFRoaXMgPT0gJmdOZXR3b3JrQ29tbW9uQ29tcG9u ZW50TmFtZSkNCj4gKyAgICAgICAgICAgICApOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEVG SV9VTlNVUFBPUlRFRDsNCj4gK30NCj4gZGlmZiAtLWdpdCBhL1VzYk5ldHdvcmtQa2cvTmV0d29y a0NvbW1vbi9Ecml2ZXJCaW5kaW5nLmMgYi9Vc2JOZXR3b3JrUGtnL05ldHdvcmtDb21tb24vRHJp dmVyQmluZGluZy5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAu LjIzYjc5MTM2MjANCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9Vc2JOZXR3b3JrUGtnL05ldHdv cmtDb21tb24vRHJpdmVyQmluZGluZy5jDQo+IEBAIC0wLDAgKzEsNTk1IEBADQo+ICsvKiogQGZp bGUNCj4gKyAgVGhpcyBmaWxlIGNvbnRhaW5zIGNvZGUgZm9yIFVTQiBuZXR3b3JrIGJpbmRpbmcg ZHJpdmVyDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDIzLCBBbWVyaWNhbiBNZWdhdHJlbmRz IEludGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKyAgU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gKyoqLw0KPiArDQo+ICsj aW5jbHVkZSAiRHJpdmVyQmluZGluZy5oIg0KPiArDQo+ICtQWEVfU1dfVU5ESSAgKmdQeGUgPSBO VUxMOw0KPiArTklDX0RFVklDRSAgICpnTGFuRGV2aWNlTGlzdFtNQVhfTEFOX0lOVEVSRkFDRV07 DQo+ICtVSU5UMzIgICAgICAgZ1JhdGVMaW1pdGluZ0NyZWRpdDsNCj4gK1VJTlQzMiAgICAgICBn UmF0ZUxpbWl0aW5nUG9sbFRpbWVyOw0KPiArQk9PTEVBTiAgICAgIGdSYXRlTGltaXRpbmdFbmFi bGU7DQo+ICsNCj4gK0VGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgZ05ldHdvcmtDb21tb25E cml2ZXJCaW5kaW5nID0gew0KPiArICBOZXR3b3JrQ29tbW9uU3VwcG9ydGVkLA0KPiArICBOZXR3 b3JrQ29tbW9uRHJpdmVyU3RhcnQsDQo+ICsgIE5ldHdvcmtDb21tb25Ecml2ZXJTdG9wLA0KPiAr ICBORVRXT1JLX0NPTU1PTl9EUklWRVJfVkVSU0lPTiwNCj4gKyAgTlVMTCwNCj4gKyAgTlVMTA0K PiArfTsNCj4gKw0KPiArLyoqDQo+ICsgIENyZWF0ZSBNQUMgRGV2aWNlIFBhdGgNCj4gKw0KPiAr ICBAcGFyYW1baW4sIG91dF0gRGV2ICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX0RF VklDRV9QQVRIX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICAgICAgQmFzZURl diAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MIGluc3Rh bmNlLg0KPiArICBAcGFyYW1baW5dICAgICAgTmljICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0 aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwg RUZJX09VVF9PRl9SRVNPVVJDRVMgICAgVGhlIGRldmljZSBwYXRoIGNvdWxkIG5vdCBiZSBjcmVh dGVkIHN1Y2Nlc3NmdWxseSBkdWUgdG8gYSBsYWNrIG9mIHJlc291cmNlcy4NCj4gKyAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBNQUMgZGV2aWNlIHBhdGggY3JlYXRlZCBzdWNjZXNz ZnVsbHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArQ3JlYXRlTWFjRGV2aWNlUGF0 aCAoDQo+ICsgIElOIE9VVCAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqKkRldiwNCj4gKyAg SU4gICAgICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICpCYXNlRGV2LA0KPiArICBJTiAgICAg IE5JQ19EQVRBICAgICAgICAgICAgICAgICAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9T VEFUVVMgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBNQUNfQUREUl9ERVZJQ0VfUEFUSCAg ICAgIE1hY0FkZHJOb2RlOw0KPiArICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICpFbmROb2Rl Ow0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICpEZXZpY2VQYXRoOw0KPiArICBVSU5U MTYgICAgICAgICAgICAgICAgICAgIFRvdGFsTGVuZ3RoOw0KPiArICBVSU5UMTYgICAgICAgICAg ICAgICAgICAgIEJhc2VMZW5ndGg7DQo+ICsNCj4gKyAgWmVyb01lbSAoJk1hY0FkZHJOb2RlLCBz aXplb2YgKE1BQ19BRERSX0RFVklDRV9QQVRIKSk7DQo+ICsgIENvcHlNZW0gKCZNYWNBZGRyTm9k ZS5NYWNBZGRyZXNzLCAmTmljLT5NYWNBZGRyLCBzaXplb2YgKEVGSV9NQUNfQUREUkVTUykpOw0K PiArDQo+ICsgIE1hY0FkZHJOb2RlLkhlYWRlci5UeXBlICAgICAgPSBNRVNTQUdJTkdfREVWSUNF X1BBVEg7DQo+ICsgIE1hY0FkZHJOb2RlLkhlYWRlci5TdWJUeXBlICAgPSBNU0dfTUFDX0FERFJf RFA7DQo+ICsgIE1hY0FkZHJOb2RlLkhlYWRlci5MZW5ndGhbMF0gPSAoVUlOVDgpc2l6ZW9mIChN YWNBZGRyTm9kZSk7DQo+ICsgIE1hY0FkZHJOb2RlLkhlYWRlci5MZW5ndGhbMV0gPSAwOw0KPiAr DQo+ICsgIEVuZE5vZGUgPSBCYXNlRGV2Ow0KPiArDQo+ICsgIHdoaWxlICghSXNEZXZpY2VQYXRo RW5kIChFbmROb2RlKSkgew0KPiArICAgIEVuZE5vZGUgPSBOZXh0RGV2aWNlUGF0aE5vZGUgKEVu ZE5vZGUpOw0KPiArICB9DQo+ICsNCj4gKyAgQmFzZUxlbmd0aCAgPSAoVUlOVDE2KSgoVUlOVE4p KEVuZE5vZGUpIC0gKFVJTlROKShCYXNlRGV2KSk7DQo+ICsgIFRvdGFsTGVuZ3RoID0gKFVJTlQx NikoQmFzZUxlbmd0aCArIHNpemVvZiAoTWFjQWRkck5vZGUpICsgc2l6ZW9mIChFRklfREVWSUNF X1BBVEhfUFJPVE9DT0wpKTsNCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPkFsbG9jYXRlUG9vbCAo RWZpQm9vdFNlcnZpY2VzRGF0YSwgVG90YWxMZW5ndGgsIChWT0lEICoqKSZEZXZpY2VQYXRoKTsN Cj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ ICsgIH0NCj4gKw0KPiArICAqRGV2ID0gKEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAqKURldmlj ZVBhdGg7DQo+ICsgIENvcHlNZW0gKERldmljZVBhdGgsIChDSEFSOCAqKUJhc2VEZXYsIEJhc2VM ZW5ndGgpOw0KPiArICBEZXZpY2VQYXRoICs9IEJhc2VMZW5ndGg7DQo+ICsgIENvcHlNZW0gKERl dmljZVBhdGgsIChDSEFSOCAqKSZNYWNBZGRyTm9kZSwgc2l6ZW9mIChNYWNBZGRyTm9kZSkpOw0K PiArICBEZXZpY2VQYXRoICs9IHNpemVvZiAoTWFjQWRkck5vZGUpOw0KPiArICBDb3B5TWVtIChE ZXZpY2VQYXRoLCAoQ0hBUjggKilFbmROb2RlLCBzaXplb2YgKEVGSV9ERVZJQ0VfUEFUSF9QUk9U T0NPTCkpOw0KPiArDQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoq DQo+ICsgIE5ldHdvcmsgQ29tbW9uIERyaXZlciBCaW5kaW5nIFN1cHBvcnQuDQo+ICsNCj4gKyAg QHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2wgaW5zdGFuY2UgcG9p bnRlci4NCj4gKyAgQHBhcmFtW2luXSAgQ29udHJvbGxlckhhbmRsZSAgICAgICAgSGFuZGxlIG9m IGRldmljZSB0byB0ZXN0Lg0KPiArICBAcGFyYW1baW5dICBSZW1haW5pbmdEZXZpY2VQYXRoICAg ICBPcHRpb25hbCBwYXJhbWV0ZXIgdXNlIHRvIHBpY2sgYSBzcGVjaWZpYyBjaGlsZA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UgdG8gc3RhcnQuDQo+ICsN Cj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICAgVGhpcyBkcml2ZXIgc3Vw cG9ydHMgdGhpcyBkZXZpY2UuDQo+ICsgIEByZXR2YWwgRUZJX0FMUkVBRFlfU1RBUlRFRCAgICAg ICAgIFRoaXMgZHJpdmVyIGlzIGFscmVhZHkgcnVubmluZyBvbiB0aGlzIGRldmljZS4NCj4gKyAg QHJldHZhbCBvdGhlciAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBkcml2ZXIgZG9lcyBub3Qg c3VwcG9ydCB0aGlzIGRldmljZS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklB UEkNCj4gK05ldHdvcmtDb21tb25TdXBwb3J0ZWQgKA0KPiArICBJTiBFRklfRFJJVkVSX0JJTkRJ TkdfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgICAg IENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgIElOIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAg KlJlbWFpbmluZ0RldmljZVBhdGgNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAg ICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAq VXNiRXRoOw0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICgNCj4gKyAgICAg ICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0Vk a0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVz YkV0aCwNCj4gKyAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAg ICAgRUZJX09QRU5fUFJPVE9DT0xfQllfRFJJVkVSDQo+ICsgICAgICAgICAgICAgICAgICApOw0K PiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4g KyAgfQ0KPiArDQo+ICsgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICBDb250cm9s bGVySGFuZGxlLA0KPiArICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAg ICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICBDb250cm9sbGVy SGFuZGxlDQo+ICsgICAgICAgICApOw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ ICsvKioNCj4gKyAgTmV0d29yayBDb21tb24gRHJpdmVyIEJpbmRpbmcgU3RhcnQuDQo+ICsNCj4g KyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2wgaW5zdGFuY2Ug cG9pbnRlci4NCj4gKyAgQHBhcmFtW2luXSAgQ29udHJvbGxlckhhbmRsZSAgICAgICAgSGFuZGxl IG9mIGRldmljZSB0byBiaW5kIGRyaXZlciB0by4NCj4gKyAgQHBhcmFtW2luXSAgUmVtYWluaW5n RGV2aWNlUGF0aCAgICAgT3B0aW9uYWwgcGFyYW1ldGVyIHVzZSB0byBwaWNrIGEgc3BlY2lmaWMg Y2hpbGQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHRv IHN0YXJ0Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgIFRo aXMgZHJpdmVyIGlzIGFkZGVkIHRvIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgQHJldHZhbCBFRklf REVWSUNFX0VSUk9SICAgICAgICAgICAgVGhpcyBkcml2ZXIgY291bGQgbm90IGJlIHN0YXJ0ZWQg ZHVlIHRvIGEgZGV2aWNlIGVycm9yDQo+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMg ICAgICAgIFRoZSBkcml2ZXIgY291bGQgbm90IGluc3RhbGwgc3VjY2Vzc2Z1bGx5IGR1ZSB0byBh IGxhY2sgb2YgcmVzb3VyY2VzLg0KPiArICBAcmV0dmFsIG90aGVyICAgICAgICAgICAgICAgICAg ICAgICBUaGlzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZGV2aWNlDQo+ICsNCj4gKyoq Lw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtOZXR3b3JrQ29tbW9uRHJpdmVyU3RhcnQg KA0KPiArICBJTiBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBF RklfSEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgIElOIEVG SV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgKlJlbWFpbmluZ0RldmljZVBhdGgNCj4gKyAgKQ0K PiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJ X0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAqVXNiRXRoUGF0aDsNCj4gKyAgRURLSUlfVVNCX0VU SEVSTkVUX1BST1RPQ09MICAqVXNiRXRoOw0KPiArICBFRklfTUFDX0FERFJFU1MgICAgICAgICAg ICAgIE1hY0FkZHJlc3M7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgQnVsa0Rh dGFTaXplOw0KPiArICBOSUNfREVWSUNFICAgICAgICAgICAgICAgICAgICpOaWNEZXZpY2U7DQo+ ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgKlRtcFB4ZVBvaW50ZXI7DQo+ICsNCj4g KyAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgQ29u dHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2Nv bEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiRXRoLA0KPiArICAgICAg ICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAg ICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICBFRklfT1BFTl9QUk9U T0NPTF9CWV9EUklWRVINCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAg U3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJv bGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29s R3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZVc2JFdGhQYXRoLA0KPiArICAg ICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAg ICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICBFRklfT1BFTl9Q Uk9UT0NPTF9CWV9EUklWRVINCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsg ICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICZnRWRrSUlVc2JFdGhQ cm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgKTsNCj4gKyAgICBy ZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgWmVyb01lbSAoJk1hY0FkZHJlc3MsIHNp emVvZiAoRUZJX01BQ19BRERSRVNTKSk7DQo+ICsNCj4gKyAgU3RhdHVzID0gVXNiRXRoLT5Vc2JF dGhNYWNBZGRyZXNzIChVc2JFdGgsICZNYWNBZGRyZXNzKTsNCj4gKyAgQVNTRVJUX0VGSV9FUlJP UiAoU3RhdHVzKTsNCj4gKyAgU3RhdHVzID0gVXNiRXRoLT5Vc2JFdGhNYXhCdWxrU2l6ZSAoVXNi RXRoLCAmQnVsa0RhdGFTaXplKTsNCj4gKw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhh bmRsZSwNCj4gKyAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAg ICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICBDb250cm9s bGVySGFuZGxlDQo+ICsgICAgICAgICAgICk7DQo+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgN Cj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgJmdFZGtJSVVz YkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRs ZSwNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICApOw0KPiAr ICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBOaWNEZXZpY2UgPSBBbGxvY2F0 ZVplcm9Qb29sIChzaXplb2YgKE5JQ19ERVZJQ0UpICsgQnVsa0RhdGFTaXplICsgNDA5Nik7DQo+ ICsgIGlmICghTmljRGV2aWNlKSB7DQo+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAg ICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRo UHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0K PiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICk7DQo+ICsgICAg Z0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4g KyAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgVGhp cy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0K PiArICAgICAgICAgICApOw0KPiArICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4g KyAgfQ0KPiArDQo+ICsgIC8vIGZvciBhbGlnbm1lbnQgYWRqdXN0bWVudA0KPiArICBpZiAoZ1B4 ZSA9PSBOVUxMKSB7DQo+ICsgICAgVG1wUHhlUG9pbnRlciA9IE5VTEw7DQo+ICsgICAgVG1wUHhl UG9pbnRlciA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAoUFhFX1NXX1VOREkpICsgMTYpOw0K PiArICAgIGlmICghVG1wUHhlUG9pbnRlcikgew0KPiArICAgICAgaWYgKE5pY0RldmljZSAhPSBO VUxMKSB7DQo+ICsgICAgICAgIEZyZWVQb29sIChOaWNEZXZpY2UpOw0KPiArICAgICAgfQ0KPiAr DQo+ICsgICAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgIENvbnRyb2xs ZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0K PiArICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAg ICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICAgICk7DQo+ICsgICAgICBnQlMtPkNs b3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAg ICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICBUaGlz LT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUN Cj4gKyAgICAgICAgICAgICApOw0KPiArDQo+ICsgICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNP VVJDRVM7DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgIC8vIGNoZWNrIGZvciBwYXJhZ3JhcGgg YWxpZ25tZW50IGhlcmUNCj4gKyAgICAgIGlmICgoKFVJTlROKVRtcFB4ZVBvaW50ZXIgJiAweDBG KSAhPSAwKSB7DQo+ICsgICAgICAgIGdQeGUgPSAoUFhFX1NXX1VOREkgKikoVG1wUHhlUG9pbnRl ciArIDgpOw0KPiArICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgZ1B4ZSA9IChQWEVfU1dfVU5E SSAqKVRtcFB4ZVBvaW50ZXI7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIGlmICghZ1B4ZSkg ew0KPiArICAgICAgICBpZiAoTmljRGV2aWNlICE9IE5VTEwpIHsNCj4gKyAgICAgICAgICBGcmVl UG9vbCAoTmljRGV2aWNlKTsNCj4gKyAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgIGdCUy0+Q2xv c2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAg ICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAg ICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgIENvbnRyb2xs ZXJIYW5kbGUNCj4gKyAgICAgICAgICAgICAgICk7DQo+ICsgICAgICAgIGdCUy0+Q2xvc2VQcm90 b2NvbCAoDQo+ICsgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAg ICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgIFRoaXMt PkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxl DQo+ICsgICAgICAgICAgICAgICApOw0KPiArICAgICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNP VVJDRVM7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIFB4ZVN0cnVjdEluaXQgKGdQeGUpOw0K PiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIE5pY0RldmljZS0+TmlpUHJvdG9jb2wuSWQgICAg PSAoVUlOVDY0KShVSU5UTikoZ1B4ZSk7DQo+ICsgIE5pY0RldmljZS0+TmlpUHJvdG9jb2wuSWZO dW0gPSBnUHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDg7DQo+ICsNCj4gKyAgVXBkYXRl TmljTnVtICgmTmljRGV2aWNlLT5OaWNJbmZvLCBnUHhlKTsNCj4gKw0KPiArICBOaWNEZXZpY2Ut Pk5pY0luZm8uU2lnbmF0dXJlID0gTklDX0RBVEFfU0lHTkFUVVJFOw0KPiArDQo+ICsgIE5pY0Rl dmljZS0+TmljSW5mby5Vc2JFdGggICAgICAgICA9IFVzYkV0aDsNCj4gKyAgTmljRGV2aWNlLT5O aWNJbmZvLk1heFNlZ21lbnRTaXplID0gKFVJTlQxNilCdWxrRGF0YVNpemU7DQo+ICsgIE5pY0Rl dmljZS0+TmljSW5mby5DYWJsZURldGVjdCAgICA9IDA7DQo+ICsgIE5pY0RldmljZS0+UmVjZWl2 ZUJ1ZmZlciAgICAgICAgICA9IEFMSUdOX1BPSU5URVIgKChWT0lEICopTmljRGV2aWNlLCA0MDk2 KTsNCj4gKw0KPiArICBDb3B5TWVtICgoQ0hBUjggKikmKE5pY0RldmljZS0+TmljSW5mby5NYWNB ZGRyKSwgKENIQVI4ICopJk1hY0FkZHJlc3MsIHNpemVvZiAoTWFjQWRkcmVzcykpOw0KPiArDQo+ ICsgIE5pY0RldmljZS0+TmljSW5mby5UeEJ1ZmZlckNvdW50ID0gMDsNCj4gKw0KPiArICBpZiAo TmljRGV2aWNlLT5OaWlQcm90b2NvbC5JZk51bSA8IE1BWF9MQU5fSU5URVJGQUNFKSB7DQo+ICsg ICAgZ0xhbkRldmljZUxpc3RbTmljRGV2aWNlLT5OaWlQcm90b2NvbC5JZk51bV0gPSBOaWNEZXZp Y2U7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAg ICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJv dG9jb2xHdWlkLA0KPiArICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiAr ICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICk7DQo+ICsgICAgZ0JT LT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAg ICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgVGhpcy0+ RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiAr ICAgICAgICAgICApOw0KPiArDQo+ICsgICAgaWYgKFRtcFB4ZVBvaW50ZXIgIT0gTlVMTCkgew0K PiArICAgICAgRnJlZVBvb2wgKFRtcFB4ZVBvaW50ZXIpOw0KPiArICAgIH0NCj4gKw0KPiArICAg IGlmIChOaWNEZXZpY2UgIT0gTlVMTCkgew0KPiArICAgICAgRnJlZVBvb2wgKE5pY0RldmljZSk7 DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7DQo+ICsgIH0N Cj4gKw0KPiArICBTdGF0dXMgPSBDcmVhdGVNYWNEZXZpY2VQYXRoICgNCj4gKyAgICAgICAgICAg ICAmTmljRGV2aWNlLT5EZXZQYXRoLA0KPiArICAgICAgICAgICAgIFVzYkV0aFBhdGgsDQo+ICsg ICAgICAgICAgICAgJk5pY0RldmljZS0+TmljSW5mbw0KPiArICAgICAgICAgICAgICk7DQo+ICsN Cj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIFVwZGF0ZU5pY051bSAoTlVM TCwgZ1B4ZSk7DQo+ICsgICAgaWYgKFRtcFB4ZVBvaW50ZXIgIT0gTlVMTCkgew0KPiArICAgICAg RnJlZVBvb2wgKFRtcFB4ZVBvaW50ZXIpOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIE5p Y0RldmljZS0+U2lnbmF0dXJlICAgICAgICAgICAgICAgICA9IFVORElfREVWX1NJR05BVFVSRTsN Cj4gKyAgTmljRGV2aWNlLT5OaWlQcm90b2NvbC5SZXZpc2lvbiAgICAgID0gRUZJX05FVFdPUktf SU5URVJGQUNFX0lERU5USUZJRVJfUFJPVE9DT0xfUkVWSVNJT047DQo+ICsgIE5pY0RldmljZS0+ TmlpUHJvdG9jb2wuVHlwZSAgICAgICAgICA9IEVmaU5ldHdvcmtJbnRlcmZhY2VVbmRpOw0KPiAr ICBOaWNEZXZpY2UtPk5paVByb3RvY29sLk1ham9yVmVyICAgICAgPSBQWEVfUk9NSURfTUFKT1JW RVI7DQo+ICsgIE5pY0RldmljZS0+TmlpUHJvdG9jb2wuTWlub3JWZXIgICAgICA9IFBYRV9ST01J RF9NSU5PUlZFUjsNCj4gKyAgTmljRGV2aWNlLT5OaWlQcm90b2NvbC5JbWFnZVNpemUgICAgID0g MDsNCj4gKyAgTmljRGV2aWNlLT5OaWlQcm90b2NvbC5JbWFnZUFkZHIgICAgID0gMDsNCj4gKyAg TmljRGV2aWNlLT5OaWlQcm90b2NvbC5JcHY2U3VwcG9ydGVkID0gVFJVRTsNCj4gKw0KPiArICBO aWNEZXZpY2UtPk5paVByb3RvY29sLlN0cmluZ0lkWzBdID0gJ1UnOw0KPiArICBOaWNEZXZpY2Ut Pk5paVByb3RvY29sLlN0cmluZ0lkWzFdID0gJ04nOw0KPiArICBOaWNEZXZpY2UtPk5paVByb3Rv Y29sLlN0cmluZ0lkWzJdID0gJ0QnOw0KPiArICBOaWNEZXZpY2UtPk5paVByb3RvY29sLlN0cmlu Z0lkWzNdID0gJ0knOw0KPiArICBOaWNEZXZpY2UtPkRldmljZUhhbmRsZSAgICAgICAgICAgID0g TlVMTDsNCj4gKw0KPiArICBOaWNEZXZpY2UtPk5pY0luZm8uUmF0ZUxpbWl0aW5nRW5hYmxlICAg ICAgPSBnUmF0ZUxpbWl0aW5nRW5hYmxlOw0KPiArICBOaWNEZXZpY2UtPk5pY0luZm8uUmF0ZUxp bWl0aW5nQ3JlZGl0Q291bnQgPSAwOw0KPiArICBOaWNEZXZpY2UtPk5pY0luZm8uUmF0ZUxpbWl0 aW5nQ3JlZGl0ICAgICAgPSBnUmF0ZUxpbWl0aW5nQ3JlZGl0Ow0KPiArICBOaWNEZXZpY2UtPk5p Y0luZm8uUmF0ZUxpbWl0aW5nUG9sbFRpbWVyICAgPSBnUmF0ZUxpbWl0aW5nUG9sbFRpbWVyOw0K PiArICBOaWNEZXZpY2UtPk5pY0luZm8uUmF0ZUxpbWl0ZXIgICAgICAgICAgICAgPSBOVUxMOw0K PiArDQo+ICsgIFplcm9NZW0gKCZOaWNEZXZpY2UtPk5pY0luZm8uUmVxdWVzdCwgc2l6ZW9mIChF RklfVVNCX0RFVklDRV9SRVFVRVNUKSk7DQo+ICsNCj4gKyAgU3RhdHVzID0gVXNiRXRoLT5Vc2JF dGhJbnRlcnJ1cHQgKFVzYkV0aCwgVFJVRSwgTkVUV09SS19DT01NT05fUE9MTElOR19JTlRFUlZB TCwgJk5pY0RldmljZS0+TmljSW5mby5SZXF1ZXN0KTsNCj4gKyAgQVNTRVJUX0VGSV9FUlJPUiAo U3RhdHVzKTsNCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPkluc3RhbGxNdWx0aXBsZVByb3RvY29s SW50ZXJmYWNlcyAoDQo+ICsgICAgICAgICAgICAgICAgICAmTmljRGV2aWNlLT5EZXZpY2VIYW5k bGUsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0VmaU5ldHdvcmtJbnRlcmZhY2VJZGVudGlmaWVy UHJvdG9jb2xHdWlkXzMxLA0KPiArICAgICAgICAgICAgICAgICAgJk5pY0RldmljZS0+TmlpUHJv dG9jb2wsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQs DQo+ICsgICAgICAgICAgICAgICAgICBOaWNEZXZpY2UtPkRldlBhdGgsDQo+ICsgICAgICAgICAg ICAgICAgICBOVUxMDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBpZiAoTmljRGV2aWNlLT5OaWlQcm90b2NvbC5JZk51 bSA8IE1BWF9MQU5fSU5URVJGQUNFKSB7DQo+ICsgICAgICBnTGFuRGV2aWNlTGlzdFtOaWNEZXZp Y2UtPk5paVByb3RvY29sLklmTnVtXSA9IE5VTEw7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgZ0JT LT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAg ICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICBUaGlz LT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ ICsgICAgICAgICAgICk7DQo+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAg ICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29s R3VpZCwNCj4gKyAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAg ICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICApOw0KPiArDQo+ICsgICAgaWYg KFRtcFB4ZVBvaW50ZXIgIT0gTlVMTCkgew0KPiArICAgICAgRnJlZVBvb2wgKFRtcFB4ZVBvaW50 ZXIpOw0KPiArICAgIH0NCj4gKw0KPiArICAgIGlmIChOaWNEZXZpY2UtPkRldlBhdGggIT0gTlVM TCkgew0KPiArICAgICAgRnJlZVBvb2wgKE5pY0RldmljZS0+RGV2UGF0aCk7DQo+ICsgICAgfQ0K PiArDQo+ICsgICAgaWYgKE5pY0RldmljZSAhPSBOVUxMKSB7DQo+ICsgICAgICBGcmVlUG9vbCAo TmljRGV2aWNlKTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICByZXR1cm4gRUZJX0RFVklDRV9FUlJP UjsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICgNCj4gKyAg ICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAm Z0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgKFZPSUQgKiop JlVzYkV0aCwNCj4gKyAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUs DQo+ICsgICAgICAgICAgICAgICAgICBOaWNEZXZpY2UtPkRldmljZUhhbmRsZSwNCj4gKyAgICAg ICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0JZX0NISUxEX0NPTlRST0xMRVINCj4gKyAg ICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgIE5ldHdvcmsgQ29tbW9uIERyaXZlciBCaW5kaW5nIFN0b3AuDQo+ICsNCj4g KyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgIFByb3RvY29sIGluc3RhbmNlIHBv aW50ZXIuDQo+ICsgIEBwYXJhbVtpbl0gIENvbnRyb2xsZXJIYW5kbGUgICAgICBIYW5kbGUgb2Yg ZGV2aWNlIHRvIHN0b3AgZHJpdmVyIG9uDQo+ICsgIEBwYXJhbVtpbl0gIE51bWJlck9mQ2hpbGRy ZW4gICAgICBOdW1iZXIgb2YgSGFuZGxlcyBpbiBDaGlsZEhhbmRsZUJ1ZmZlci4gSWYgbnVtYmVy IG9mDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbiBpcyB6 ZXJvIHN0b3AgdGhlIGVudGlyZSBidXMgZHJpdmVyLg0KPiArICBAcGFyYW1baW5dICBDaGlsZEhh bmRsZUJ1ZmZlciAgICAgTGlzdCBvZiBDaGlsZCBIYW5kbGVzIHRvIFN0b3AuDQo+ICsNCj4gKyAg QHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgIFRoaXMgZHJpdmVyIGlzIHJlbW92ZWQg Q29udHJvbGxlckhhbmRsZQ0KPiArICBAcmV0dmFsIG90aGVyICAgICAgICAgICAgICAgICAgICAg VGhpcyBkcml2ZXIgd2FzIG5vdCByZW1vdmVkIGZyb20gdGhpcyBkZXZpY2UNCj4gKw0KPiArKiov DQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK05ldHdvcmtDb21tb25Ecml2ZXJTdG9wICgN Cj4gKyAgSU4gIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOICBF RklfSEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgIElOICBV SU5UTiAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlck9mQ2hpbGRyZW4sDQo+ICsgIElOICBF RklfSEFORExFICAgICAgICAgICAgICAgICAgICpDaGlsZEhhbmRsZUJ1ZmZlcg0KPiArICApDQo+ ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0 dXM7DQo+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxD aGlsZHJlblN0b3BwZWQ7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBJbmRleDsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAgICAgICAg ICAgICAgICpVc2JFdGg7DQo+ICsgIE5JQ19ERVZJQ0UgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqTmljRGV2aWNlOw0KPiArICBFRklfTkVUV09SS19JTlRFUkZBQ0VfSURFTlRJRklF Ul9QUk9UT0NPTCAgKk5paVByb3RvY29sOw0KPiArDQo+ICsgIGlmIChOdW1iZXJPZkNoaWxkcmVu ID09IDApIHsNCj4gKyAgICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQo+ICsgICAgICAg ICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICZn RWZpTmV0d29ya0ludGVyZmFjZUlkZW50aWZpZXJQcm90b2NvbEd1aWRfMzEsDQo+ICsgICAgICAg ICAgICAgICAgICAgIChWT0lEICoqKSZOaWlQcm90b2NvbCwNCj4gKyAgICAgICAgICAgICAgICAg ICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgQ29u dHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgRUZJX09QRU5fUFJPVE9DT0xf R0VUX1BST1RPQ09MDQo+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiAr ICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgJmdFZmlEZXZp Y2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdI YW5kbGUsDQo+ICsgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICAg ICk7DQo+ICsgICAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgIENvbnRy b2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwN Cj4gKyAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAg ICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgICApOw0KPiArICAgICAgcmV0dXJu IEVGSV9TVUNDRVNTOw0KPiArICAgIH0NCj4gKw0KPiArICAgIE5pY0RldmljZSA9IFVORElfREVW X0ZST01fVEhJUyAoTmlpUHJvdG9jb2wpOw0KPiArICAgIFN0YXR1cyAgICA9IGdCUy0+VW5pbnN0 YWxsTXVsdGlwbGVQcm90b2NvbEludGVyZmFjZXMgKA0KPiArICAgICAgICAgICAgICAgICAgICAg ICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAmZ0VmaU5ldHdv cmtJbnRlcmZhY2VJZGVudGlmaWVyUHJvdG9jb2xHdWlkXzMxLA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAmTmljRGV2aWNlLT5OaWlQcm90b2NvbCwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgICAg ICBOaWNEZXZpY2UtPkRldlBhdGgsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIE5VTEwNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0NCj4gKw0KPiArICAgIEZyZWVQ b29sIChOaWNEZXZpY2UtPkRldlBhdGgpOw0KPiArICAgIEZyZWVQb29sIChOaWNEZXZpY2UpOw0K PiArDQo+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgQ29udHJvbGxl ckhhbmRsZSwNCj4gKyAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiAr ICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICBDb250 cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICk7DQo+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29s ICgNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgJmdFZGtJ SVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hh bmRsZSwNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICApOw0K PiArICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gKyAgfQ0KPiArDQo+ICsgIEFsbENoaWxkcmVu U3RvcHBlZCA9IFRSVUU7DQo+ICsNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTnVtYmVy T2ZDaGlsZHJlbjsgSW5kZXgrKykgew0KPiArICAgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29s ICgNCj4gKyAgICAgICAgICAgICAgICAgICAgQ2hpbGRIYW5kbGVCdWZmZXJbSW5kZXhdLA0KPiAr ICAgICAgICAgICAgICAgICAgICAmZ0VmaU5ldHdvcmtJbnRlcmZhY2VJZGVudGlmaWVyUHJvdG9j b2xHdWlkXzMxLA0KPiArICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmTmlpUHJvdG9jb2ws DQo+ICsgICAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsg ICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAg ICAgIEVGSV9PUEVOX1BST1RPQ09MX0dFVF9QUk9UT0NPTA0KPiArICAgICAgICAgICAgICAgICAg ICApOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIEFsbENoaWxk cmVuU3RvcHBlZCA9IEZBTFNFOw0KPiArICAgICAgY29udGludWU7DQo+ICsgICAgfQ0KPiArDQo+ ICsgICAgTmljRGV2aWNlID0gVU5ESV9ERVZfRlJPTV9USElTIChOaWlQcm90b2NvbCk7DQo+ICsN Cj4gKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFu ZGxlLA0KPiArICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAg ICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICBDaGlsZEhhbmRs ZUJ1ZmZlcltJbmRleF0NCj4gKyAgICAgICAgICAgKTsNCj4gKw0KPiArICAgIFN0YXR1cyA9IGdC Uy0+VW5pbnN0YWxsTXVsdGlwbGVQcm90b2NvbEludGVyZmFjZXMgKA0KPiArICAgICAgICAgICAg ICAgICAgICBDaGlsZEhhbmRsZUJ1ZmZlcltJbmRleF0sDQo+ICsgICAgICAgICAgICAgICAgICAg ICZnRWZpTmV0d29ya0ludGVyZmFjZUlkZW50aWZpZXJQcm90b2NvbEd1aWRfMzEsDQo+ICsgICAg ICAgICAgICAgICAgICAgICZOaWNEZXZpY2UtPk5paVByb3RvY29sLA0KPiArICAgICAgICAgICAg ICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAg ICAgIE5pY0RldmljZS0+RGV2UGF0aCwNCj4gKyAgICAgICAgICAgICAgICAgICAgTlVMTA0KPiAr ICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4gKyAgICAgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAg ICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICZnRWRr SUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgKFZPSUQgKiop JlVzYkV0aCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFu ZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICAgIENoaWxkSGFuZGxlQnVmZmVyW0luZGV4XSwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9CWV9DSElMRF9DT05U Uk9MTEVSDQo+ICsgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICB9IGVsc2Ugew0KPiAr ICAgICAgRnJlZVBvb2wgKE5pY0RldmljZS0+RGV2UGF0aCk7DQo+ICsgICAgICBGcmVlUG9vbCAo TmljRGV2aWNlKTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoIUFsbENoaWxkcmVu U3RvcHBlZCkgew0KPiArICAgIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KPiArICB9DQo+ICsN Cj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEVudHJ5cG9pbnQg b2YgTmV0d29yayBDb21tb24gRHJpdmVyLg0KPiArDQo+ICsgIFRoaXMgZnVuY3Rpb24gaXMgdGhl IGVudHJ5cG9pbnQgb2YgTmV0d29yayBDb21tb24gRHJpdmVyLiBJdCBpbnN0YWxscyBEcml2ZXIg QmluZGluZw0KPiArICBQcm90b2NvbHMgdG9nZXRoZXIgd2l0aCBDb21wb25lbnQgTmFtZSBQcm90 b2NvbHMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgSW1hZ2VIYW5kbGUgICAgICAgVGhlIGZpcm13 YXJlIGFsbG9jYXRlZCBoYW5kbGUgZm9yIHRoZSBFRkkgaW1hZ2UuDQo+ICsgIEBwYXJhbVtpbl0g IFN5c3RlbVRhYmxlICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJIFN5c3RlbSBUYWJsZS4NCj4g Kw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgZW50cnkgcG9pbnQgaXMg ZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VG SUFQSQ0KPiArTmV0d29ya0NvbW1vbkVudHJ5ICgNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAg SW1hZ2VIYW5kbGUsDQo+ICsgIElOIEVGSV9TWVNURU1fVEFCTEUgICpTeXN0ZW1UYWJsZQ0KPiAr ICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gKw0KPiArICBnTmV0d29ya0Nv bW1vbkRyaXZlckJpbmRpbmcuRHJpdmVyQmluZGluZ0hhbmRsZSA9IEltYWdlSGFuZGxlOw0KPiAr ICBnTmV0d29ya0NvbW1vbkRyaXZlckJpbmRpbmcuSW1hZ2VIYW5kbGUgICAgICAgICA9IEltYWdl SGFuZGxlOw0KPiArICBnUmF0ZUxpbWl0aW5nRW5hYmxlICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA9IFBjZEdldEJvb2wgKEVuYWJsZVJhdGVMaW1pdGluZyk7DQo+ICsgIGdSYXRlTGltaXRp bmdDcmVkaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gUGNkR2V0MzIgKFJhdGVMaW1p dGluZ0NyZWRpdCk7DQo+ICsgIGdSYXRlTGltaXRpbmdQb2xsVGltZXIgICAgICAgICAgICAgICAg ICAgICAgICAgID0gUGNkR2V0MzIgKFJhdGVMaW1pdGluZ0ZhY3Rvcik7DQo+ICsNCj4gKyAgU3Rh dHVzID0gZ0JTLT5JbnN0YWxsTXVsdGlwbGVQcm90b2NvbEludGVyZmFjZXMgKA0KPiArICAgICAg ICAgICAgICAgICAgJmdOZXR3b3JrQ29tbW9uRHJpdmVyQmluZGluZy5Ecml2ZXJCaW5kaW5nSGFu ZGxlLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlEcml2ZXJCaW5kaW5nUHJvdG9jb2xHdWlk LA0KPiArICAgICAgICAgICAgICAgICAgJmdOZXR3b3JrQ29tbW9uRHJpdmVyQmluZGluZywNCj4g KyAgICAgICAgICAgICAgICAgICZnRWZpQ29tcG9uZW50TmFtZTJQcm90b2NvbEd1aWQsDQo+ICsg ICAgICAgICAgICAgICAgICAmZ05ldHdvcmtDb21tb25Db21wb25lbnROYW1lMiwNCj4gKyAgICAg ICAgICAgICAgICAgIE5VTEwNCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsgIHJldHVybiBT dGF0dXM7DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9Vc2JOZXR3b3JrUGtnL05ldHdvcmtDb21tb24v RHJpdmVyQmluZGluZy5oIGIvVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL0RyaXZlckJpbmRp bmcuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi4wNDE2Y2Ux MzIzDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9u L0RyaXZlckJpbmRpbmcuaA0KPiBAQCAtMCwwICsxLDI2NiBAQA0KPiArLyoqIEBmaWxlDQo+ICsg IEhlYWRlciBmaWxlIGZvciBmb3IgVVNCIG5ldHdvcmsgY29tbW9uIGRyaXZlcg0KPiArDQo+ICsg IENvcHlyaWdodCAoYykgMjAyMywgQW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExM Qy4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsqKi8NCj4gKw0KPiArI2lmbmRlZiBfRFJJVkVSX0JJ TkRJTkdfSF8NCj4gKyNkZWZpbmUgX0RSSVZFUl9CSU5ESU5HX0hfDQo+ICsNCj4gKyNpbmNsdWRl IDxMaWJyYXJ5L1VlZmlEcml2ZXJFbnRyeVBvaW50Lmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9V ZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlMaWIu aD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RldmljZVBhdGhMaWIuaD4NCj4gKyNpbmNsdWRlIDxM aWJyYXJ5L0RlYnVnTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9u TGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9QY2RMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJy YXJ5L0Jhc2VNZW1vcnlMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlVc2JMaWIuaD4N Cj4gKyNpbmNsdWRlIDxQcm90b2NvbC9Vc2JJby5oPg0KPiArI2luY2x1ZGUgPFByb3RvY29sL05l dHdvcmtJbnRlcmZhY2VJZGVudGlmaWVyLmg+DQo+ICsjaW5jbHVkZSA8UHJvdG9jb2wvRWRrSUlV c2JFdGhlcm5ldFByb3RvY29sLmg+DQo+ICsNCj4gKyNkZWZpbmUgTkVUV09SS19DT01NT05fRFJJ VkVSX1ZFUlNJT04gICAgMQ0KPiArI2RlZmluZSBORVRXT1JLX0NPTU1PTl9QT0xMSU5HX0lOVEVS VkFMICAweDEwDQo+ICsjZGVmaW5lIFJYX0JVRkZFUl9DT1VOVCAgICAgICAgICAgICAgICAgIDMy DQo+ICsjZGVmaW5lIFRYX0JVRkZFUl9DT1VOVCAgICAgICAgICAgICAgICAgIDMyDQo+ICsjZGVm aW5lIE1FTU9SWV9SRVFVSVJFICAgICAgICAgICAgICAgICAgIDANCj4gKw0KPiArI2RlZmluZSBV TkRJX0RFVl9TSUdOQVRVUkUgIFNJR05BVFVSRV8zMigndScsJ24nLCdkJywnaScpDQo+ICsjZGVm aW5lIFVORElfREVWX0ZST01fVEhJUyhhKSAgQ1IoYSwgTklDX0RFVklDRSwgTmlpUHJvdG9jb2ws IFVORElfREVWX1NJR05BVFVSRSkNCj4gKyNkZWZpbmUgVU5ESV9ERVZfRlJPTV9OSUMoYSkgICBD UihhLCBOSUNfREVWSUNFLCBOaWNJbmZvLCBVTkRJX0RFVl9TSUdOQVRVUkUpDQo+ICsNCj4gKyNw cmFnbWEgcGFjaygxKQ0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UOCAgICAgRGVzdEFk ZHJbUFhFX0hXQUREUl9MRU5fRVRIRVJdOw0KPiArICBVSU5UOCAgICAgU3JjQWRkcltQWEVfSFdB RERSX0xFTl9FVEhFUl07DQo+ICsgIFVJTlQxNiAgICBQcm90b2NvbDsNCj4gK30gRXRoZXJuZXRI ZWFkZXI7DQo+ICsjcHJhZ21hIHBhY2soKQ0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsg IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpZ25hdHVyZTsN Cj4gKyAgRUZJX05FVFdPUktfSU5URVJGQUNFX0lERU5USUZJRVJfUFJPVE9DT0wgICAgTmlpUHJv dG9jb2w7DQo+ICsgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IERldmljZUhhbmRsZTsNCj4gKyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAgICAgICAg ICAgICAgICAgKkJhc2VEZXZQYXRoOw0KPiArICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAg ICAgICAgICAgICAgICAgICAqRGV2UGF0aDsNCj4gKyAgTklDX0RBVEEgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTmljSW5mbzsNCj4gKyAgVk9JRCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKlJlY2VpdmVCdWZmZXI7DQo+ICt9IE5JQ19ERVZJQ0U7 DQo+ICsNCj4gK3R5cGVkZWYgVk9JRCAoKkFQSV9GVU5DKSgNCj4gKyAgUFhFX0NEQiAqLA0KPiAr ICBOSUNfREFUQSAqDQo+ICsgICk7DQo+ICsNCj4gK2V4dGVybiBQWEVfU1dfVU5ESSAgICAgICAg ICAgICAgICAgICAqZ1B4ZTsNCj4gK2V4dGVybiBOSUNfREVWSUNFICAgICAgICAgICAgICAgICAg ICAqZ0xhbkRldmljZUxpc3RbTUFYX0xBTl9JTlRFUkZBQ0VdOw0KPiArZXh0ZXJuIEVGSV9DT01Q T05FTlRfTkFNRTJfUFJPVE9DT0wgIGdOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZTI7DQo+ICsN Cj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArTmV0d29ya0NvbW1vblN1cHBvcnRlZCAoDQo+ ICsgIElOIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIEVGSV9I QU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgSU4gRUZJX0RF VklDRV9QQVRIX1BST1RPQ09MICAgICAqUmVtYWluaW5nRGV2aWNlUGF0aA0KPiArICApOw0KPiAr DQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK05ldHdvcmtDb21tb25Ecml2ZXJTdGFydCAo DQo+ICsgIElOIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIEVG SV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgSU4gRUZJ X0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAqUmVtYWluaW5nRGV2aWNlUGF0aA0KPiArICApOw0K PiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK05ldHdvcmtDb21tb25Ecml2ZXJTdG9w ICgNCj4gKyAgSU4gIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElO ICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgIElO ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlck9mQ2hpbGRyZW4sDQo+ICsgIElO ICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICpDaGlsZEhhbmRsZUJ1ZmZlcg0KPiArICAp Ow0KPiArDQo+ICtWT0lEDQo+ICtQeGVTdHJ1Y3RJbml0ICgNCj4gKyAgT1VUIFBYRV9TV19VTkRJ ICAqUHhlU3cNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiArVXBkYXRlTmljTnVtICgNCj4gKyAg SU4gICAgICBOSUNfREFUQSAgICAgKk5pYywNCj4gKyAgSU4gT1VUICBQWEVfU1dfVU5ESSAgKlB4 ZVN3DQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVW5kaUFwaUVu dHJ5ICgNCj4gKyAgSU4gIFVJTlQ2NCAgQ2RiDQo+ICsgICk7DQo+ICsNCj4gK1VJTlRODQo+ICtN YXBJdCAoDQo+ICsgIElOIE5JQ19EQVRBICAqTmljLA0KPiArICBJTiBVSU5UNjQgICAgTWVtQWRk ciwNCj4gKyAgSU4gVUlOVDMyICAgIFNpemUsDQo+ICsgIElOIFVJTlQzMiAgICBEaXJlY3Rpb24s DQo+ICsgIE9VVCBVSU5UNjQgICBNYXBwZWRBZGRyDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4g K1VuTWFwSXQgKA0KPiArICBJTiBOSUNfREFUQSAgKk5pYywNCj4gKyAgSU4gVUlOVDY0ICAgIE1l bUFkZHIsDQo+ICsgIElOIFVJTlQzMiAgICBTaXplLA0KPiArICBJTiBVSU5UMzIgICAgRGlyZWN0 aW9uLA0KPiArICBJTiBVSU5UNjQgICAgTWFwcGVkQWRkcg0KPiArICApOw0KPiArDQo+ICtWT0lE DQo+ICtVbmRpR2V0U3RhdGUgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBO SUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtVbmRpU3RhcnQgKA0KPiAr ICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0K PiArDQo+ICtWT0lEDQo+ICtVbmRpU3RvcCAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4g KyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1VuZGlHZXRJ bml0SW5mbyAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAq TmljDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1VuZGlHZXRDb25maWdJbmZvICgNCj4gKyAg SU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4g Kw0KPiArVk9JRA0KPiArVW5kaUluaXRpYWxpemUgKA0KPiArICBJTiAgICAgIFBYRV9DREIgICAq Q2RiLA0KPiArICBJTiBPVVQgIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQN Cj4gK1VuZGlSZXNldCAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19E QVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1VuZGlTaHV0ZG93biAoDQo+ICsg IElOICAgICAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOIE9VVCAgTklDX0RBVEEgICpOaWMNCj4g KyAgKTsNCj4gKw0KPiArVk9JRA0KPiArVW5kaUludGVycnVwdEVuYWJsZSAoDQo+ICsgIElOICBQ WEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4g K1ZPSUQNCj4gK1VuZGlSZWNlaXZlRmlsdGVyICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0K PiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiArVW5kaVN0 YXRpb25BZGRyZXNzICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RB VEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiArVW5kaVN0YXRpc3RpY3MgKA0KPiAr ICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0K PiArDQo+ICtWT0lEDQo+ICtVbmRpTWNhc3RJcDJNYWMgKA0KPiArICBJTiBPVVQgIFBYRV9DREIg ICAqQ2RiLA0KPiArICBJTiAgICAgIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK1ZP SUQNCj4gK1VuZGlOdkRhdGEgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBO SUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtVbmRpR2V0U3RhdHVzICgN Cj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAg KTsNCj4gKw0KPiArVk9JRA0KPiArVW5kaUZpbGxIZWFkZXIgKA0KPiArICBJTiAgUFhFX0NEQiAg ICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ ICtVbmRpVHJhbnNtaXQgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNf REFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtVbmRpUmVjZWl2ZSAoDQo+ICsg IElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ ICsNCj4gK1VJTlQxNg0KPiArSW5pdGlhbGl6ZSAoDQo+ICsgIElOICAgICAgUFhFX0NEQiAgICpD ZGIsDQo+ICsgIElOIE9VVCAgTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArVUlOVDE2 DQo+ICtUcmFuc21pdCAoDQo+ICsgIElOICAgICAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOIE9V VCAgTklDX0RBVEEgICpOaWMsDQo+ICsgIElOICAgICAgVUlOVDY0ICAgIENwYkFkZHIsDQo+ICsg IElOICAgICAgVUlOVDE2ICAgIE9wRmxhZ3MNCj4gKyAgKTsNCj4gKw0KPiArVUlOVDE2DQo+ICtS ZWNlaXZlICgNCj4gKyAgSU4gUFhFX0NEQiAgICAgICAqQ2RiLA0KPiArICBJTiBPVVQgTklDX0RB VEEgICpOaWMsDQo+ICsgIElOIFVJTlQ2NCAgICAgICAgQ3BiQWRkciwNCj4gKyAgSU4gT1VUIFVJ TlQ2NCAgICBEYkFkZHINCj4gKyAgKTsNCj4gKw0KPiArVUlOVDE2DQo+ICtTZXRGaWx0ZXIgKA0K PiArICBJTiAgTklDX0RBVEEgICpOaWMsDQo+ICsgIElOICBVSU5UMTYgICAgU2V0RmlsdGVyLA0K PiArICBJTiAgVUlOVDY0ICAgIENwYkFkZHIsDQo+ICsgIElOICBVSU5UMzIgICAgQ3BiU2l6ZQ0K PiArICApOw0KPiArDQo+ICtVSU5UMTYNCj4gK1N0YXRpc3RpY3MgKA0KPiArICBJTiBOSUNfREFU QSAgKk5pYywNCj4gKyAgSU4gVUlOVDY0ICAgIERiQWRkciwNCj4gKyAgSU4gVUlOVDE2ICAgIERi U2l6ZQ0KPiArICApOw0KPiArDQo+ICsjZW5kaWYNCj4gZGlmZiAtLWdpdCBhL1VzYk5ldHdvcmtQ a2cvTmV0d29ya0NvbW1vbi9OZXR3b3JrQ29tbW9uLmluZiBiL1VzYk5ldHdvcmtQa2cvTmV0d29y a0NvbW1vbi9OZXR3b3JrQ29tbW9uLmluZg0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRl eCAwMDAwMDAwMDAwLi44OTIzMTAyYmMzDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvVXNiTmV0 d29ya1BrZy9OZXR3b3JrQ29tbW9uL05ldHdvcmtDb21tb24uaW5mDQo+IEBAIC0wLDAgKzEsNDkg QEANCj4gKyMjIEBmaWxlDQo+ICsjICAgVGhpcyBpcyBVc2IgTmV0d29yayBDb21tb24gZHJpdmVy IGZvciBEWEUgcGhhc2UuDQo+ICsjDQo+ICsjIENvcHlyaWdodCAoYykgMjAyMywgQW1lcmljYW4g TWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsjIw0K PiArDQo+ICtbRGVmaW5lc10NCj4gKyAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgID0g MHgwMDAxMDAwNQ0KPiArICBCQVNFX05BTUUgICAgICAgICAgICAgICAgICAgICAgPSBOZXR3b3Jr Q29tbW9uDQo+ICsgIEZJTEVfR1VJRCAgICAgICAgICAgICAgICAgICAgICA9IGNhNmViNGY0LWYx ZDYtNDM3NS05N2Q2LTE4ODU2ODcxZTFiZg0KPiArICBNT0RVTEVfVFlQRSAgICAgICAgICAgICAg ICAgICAgPSBEWEVfRFJJVkVSDQo+ICsgIFZFUlNJT05fU1RSSU5HICAgICAgICAgICAgICAgICA9 IDEuMA0KPiArICBFTlRSWV9QT0lOVCAgICAgICAgICAgICAgICAgICAgPSBOZXR3b3JrQ29tbW9u RW50cnkNCj4gKw0KPiArW1NvdXJjZXNdDQo+ICsgIERyaXZlckJpbmRpbmcuYw0KPiArICBEcml2 ZXJCaW5kaW5nLmgNCj4gKyAgQ29tcG9uZW50TmFtZS5jDQo+ICsgIFB4ZUZ1bmN0aW9uLmMNCj4g Kw0KPiArW1BhY2thZ2VzXQ0KPiArICBNZGVQa2cvTWRlUGtnLmRlYw0KPiArICBNZGVNb2R1bGVQ a2cvTWRlTW9kdWxlUGtnLmRlYw0KPiArICBVc2JOZXR3b3JrUGtnL1VzYk5ldHdvcmtQa2cuZGVj DQo+ICsNCj4gK1tMaWJyYXJ5Q2xhc3Nlc10NCj4gKyAgVWVmaURyaXZlckVudHJ5UG9pbnQNCj4g KyAgVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliDQo+ICsgIFVlZmlMaWINCj4gKyAgRGVidWdMaWIN Cj4gKyAgVWVmaVVzYkxpYg0KPiArICBNZW1vcnlBbGxvY2F0aW9uTGliDQo+ICsgIEJhc2VNZW1v cnlMaWINCj4gKw0KPiArW1Byb3RvY29sc10NCj4gKyAgZ0VmaU5ldHdvcmtJbnRlcmZhY2VJZGVu dGlmaWVyUHJvdG9jb2xHdWlkXzMxDQo+ICsgIGdFZmlVc2JJb1Byb3RvY29sR3VpZA0KPiArICBn RWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZA0KPiArICBnRWZpRHJpdmVyQmluZGluZ1Byb3RvY29s R3VpZA0KPiArICBnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQNCj4gKw0KPiArW1BjZF0NCj4gKyAg Z1VzYk5ldHdvcmtQa2dUb2tlblNwYWNlR3VpZC5FbmFibGVSYXRlTGltaXRpbmcNCj4gKyAgZ1Vz Yk5ldHdvcmtQa2dUb2tlblNwYWNlR3VpZC5SYXRlTGltaXRpbmdDcmVkaXQNCj4gKyAgZ1VzYk5l dHdvcmtQa2dUb2tlblNwYWNlR3VpZC5SYXRlTGltaXRpbmdGYWN0b3INCj4gKw0KPiArW0RlcGV4 XQ0KPiArICBUUlVFDQo+IGRpZmYgLS1naXQgYS9Vc2JOZXR3b3JrUGtnL05ldHdvcmtDb21tb24v UHhlRnVuY3Rpb24uYyBiL1VzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1vbi9QeGVGdW5jdGlvbi5j DQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLjY4N2NhYmNhNGMN Cj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9Vc2JOZXR3b3JrUGtnL05ldHdvcmtDb21tb24vUHhl RnVuY3Rpb24uYw0KPiBAQCAtMCwwICsxLDE4MDMgQEANCj4gKy8qKiBAZmlsZQ0KPiArICBUaGlz IGZpbGUgY29udGFpbnMgY29kZSBmb3IgVU5ESSBjb21tYW5kIGJhc2VkIG9uIFVFRkkgc3BlY2lm aWNhdGlvbi4NCj4gKw0KPiArICBDb3B5cmlnaHQgKGMpIDIwMjMsIEFtZXJpY2FuIE1lZ2F0cmVu ZHMgSW50ZXJuYXRpb25hbCBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArICBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiArKiovDQo+ICsNCj4g KyNpbmNsdWRlICJEcml2ZXJCaW5kaW5nLmgiDQo+ICsNCj4gKy8vIEFQSSB0YWJsZSwgZGVmaW5l ZCBpbiBVRUZJIHNwZWNpZmljYXRpb24NCj4gK0FQSV9GVU5DICBnVW5kaUFwaVRhYmxlW10gPSB7 DQo+ICsgIFVuZGlHZXRTdGF0ZSwNCj4gKyAgVW5kaVN0YXJ0LA0KPiArICBVbmRpU3RvcCwNCj4g KyAgVW5kaUdldEluaXRJbmZvLA0KPiArICBVbmRpR2V0Q29uZmlnSW5mbywNCj4gKyAgVW5kaUlu aXRpYWxpemUsDQo+ICsgIFVuZGlSZXNldCwNCj4gKyAgVW5kaVNodXRkb3duLA0KPiArICBVbmRp SW50ZXJydXB0RW5hYmxlLA0KPiArICBVbmRpUmVjZWl2ZUZpbHRlciwNCj4gKyAgVW5kaVN0YXRp b25BZGRyZXNzLA0KPiArICBVbmRpU3RhdGlzdGljcywNCj4gKyAgVW5kaU1jYXN0SXAyTWFjLA0K PiArICBVbmRpTnZEYXRhLA0KPiArICBVbmRpR2V0U3RhdHVzLA0KPiArICBVbmRpRmlsbEhlYWRl ciwNCj4gKyAgVW5kaVRyYW5zbWl0LA0KPiArICBVbmRpUmVjZWl2ZQ0KPiArfTsNCj4gKw0KPiAr LyoqDQo+ICsgICBDYWxsYmFjayBmdW5jdGlvbiBmb3IgZW5hYmxlIFJhdGUgTGltaXRlcg0KPiAr DQo+ICsgICBAcGFyYW1baW5dIEV2ZW50ICAgICAgICAgICBFdmVudCB3aG9zZSBub3RpZmljYXRp b24gZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZA0KPiArICAgQHBhcmFtW2luXSBDb250ZXh0ICAg ICAgICAgUG9pbnRlciB0byB0aGUgbm90aWZpY2F0aW9uIGZ1bmN0aW9uJ3MgY29udGV4dA0KPiAr DQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0VGSUFQSQ0KPiArVW5kaVJhdGVMaW1pdGVyQ2FsbGJhY2sg KA0KPiArICBJTiAgRUZJX0VWRU5UICBFdmVudCwNCj4gKyAgSU4gIFZPSUQgICAgICAgKkNvbnRl eHQNCj4gKyAgKQ0KPiArew0KPiArICBOSUNfREFUQSAgKk5pYyA9IENvbnRleHQ7DQo+ICsNCj4g KyAgaWYgKE5pYy0+UmF0ZUxpbWl0aW5nQ3JlZGl0Q291bnQgPCBOaWMtPlJhdGVMaW1pdGluZ0Ny ZWRpdCkgew0KPiArICAgIE5pYy0+UmF0ZUxpbWl0aW5nQ3JlZGl0Q291bnQrKzsNCj4gKyAgfQ0K PiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gZGV0ZXJtaW5l IHRoZSBvcGVyYXRpb25hbCBzdGF0ZSBvZiB0aGUgVU5ESS4NCj4gKw0KPiArICBAcGFyYW1baW5d ICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBA cGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJv bGxlciBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlHZXRTdGF0ZSAoDQo+ICsg IElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4g K3sNCj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcENvZGUg IT0gUFhFX09QQ09ERV9HRVRfU1RBVEUpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQ WEVfU1RBVENPREVfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQ WEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4 ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkNQQnNp emUgIT0gUFhFX0NQQlNJWkVfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJhZGRyICE9 IFBYRV9DUEJBRERSX05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+REJzaXplICE9IFBYRV9E QlNJWkVfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5EQmFkZHIgIT0gUFhFX0RCQUREUl9O T1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfTk9UX1VT RUQpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1B TkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURf Q0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBDZGItPlN0YXRGbGFn cyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCj4gKyAgICBDZGItPlN0YXRDb2Rl ICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArICB9DQo+ICsNCj4gKyAgQ2RiLT5TdGF0Rmxh Z3MgPSBDZGItPlN0YXRGbGFncyB8IE5pYy0+U3RhdGU7DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNi RXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlHZXRTdGF0ZSAhPSBOVUxMKSB7DQo+ICsgICAgU3Rh dHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaUdldFN0YXRlIChDZGIsIE5p Yyk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0 RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0NCj4gKyAgfQ0K PiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gY2hhbmdlIHRo ZSBVTkRJIG9wZXJhdGlvbmFsIHN0YXRlIGZyb20gc3RvcHBlZCB0byBzdGFydGVkLg0KPiArDQo+ ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3Ig YmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGlu dGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArVW5kaVN0 YXJ0ICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMN Cj4gKyAgKQ0KPiArew0KPiArICBQWEVfQ1BCX1NUQVJUXzMxICAqQ3BiOw0KPiArICBFRklfU1RB VFVTICAgICAgICBTdGF0dXM7DQo+ICsgIEJPT0xFQU4gICAgICAgICAgIEV2ZW50RXJyb3I7DQo+ ICsNCj4gKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RFX1NUQVJUKSB8fA0KPiArICAg ICAgKENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAg ICAoQ2RiLT5TdGF0RmxhZ3MgIT0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KPiArICAg ICAgKENkYi0+SUZudW0gPj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkpIHx8 DQo+ICsgICAgICAoQ2RiLT5DUEJzaXplICE9IHNpemVvZiAoUFhFX0NQQl9TVEFSVF8zMSkpIHx8 DQo+ICsgICAgICAoQ2RiLT5EQnNpemUgIT0gUFhFX0RCU0laRV9OT1RfVVNFRCkgfHwNCj4gKyAg ICAgIChDZGItPkRCYWRkciAhPSBQWEVfREJBRERSX05PVF9VU0VEKSB8fA0KPiArICAgICAgKENk Yi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19OT1RfVVNFRCkpDQo+ICsgIHsNCj4gKyAgICBDZGIt PlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5T dGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgcmV0dXJuOw0KPiAr ICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+U3RhdGUgIT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVf U1RPUFBFRCkgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5E X0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9BTFJFQURZX1NU QVJURUQ7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgQ3BiID0gKFBYRV9DUEJf U1RBUlRfMzEgKikoVUlOVE4pQ2RiLT5DUEJhZGRyOw0KPiArDQo+ICsgIE5pYy0+UHhlU3RhcnQu RGVsYXkgICAgID0gQ3BiLT5EZWxheTsNCj4gKyAgTmljLT5QeGVTdGFydC5WaXJ0MlBoeXMgPSBD cGItPlZpcnQyUGh5czsNCj4gKyAgTmljLT5QeGVTdGFydC5CbG9jayAgICAgPSBDcGItPkJsb2Nr Ow0KPiArICBOaWMtPlB4ZVN0YXJ0Lk1hcF9NZW0gICA9IDA7DQo+ICsgIE5pYy0+UHhlU3RhcnQu VW5NYXBfTWVtID0gMDsNCj4gKyAgTmljLT5QeGVTdGFydC5TeW5jX01lbSAgPSBDcGItPlN5bmNf TWVtOw0KPiArICBOaWMtPlB4ZVN0YXJ0LlVuaXF1ZV9JRCA9IENwYi0+VW5pcXVlX0lEOw0KPiAr ICBFdmVudEVycm9yICAgICAgICAgICAgICA9IEZBTFNFOw0KPiArICBTdGF0dXMgICAgICAgICAg ICAgICAgICA9IEVGSV9TVUNDRVNTOw0KPiArICBpZiAoTmljLT5SYXRlTGltaXRpbmdFbmFibGUg PT0gVFJVRSkgew0KPiArICAgIFN0YXR1cyA9IGdCUy0+Q3JlYXRlRXZlbnQgKA0KPiArICAgICAg ICAgICAgICAgICAgICBFVlRfVElNRVIgfCBFVlRfTk9USUZZX1NJR05BTCwNCj4gKyAgICAgICAg ICAgICAgICAgICAgVFBMX05PVElGWSwNCj4gKyAgICAgICAgICAgICAgICAgICAgVW5kaVJhdGVM aW1pdGVyQ2FsbGJhY2ssDQo+ICsgICAgICAgICAgICAgICAgICAgIE5pYywNCj4gKyAgICAgICAg ICAgICAgICAgICAgJk5pYy0+UmF0ZUxpbWl0ZXINCj4gKyAgICAgICAgICAgICAgICAgICAgKTsN Cj4gKyAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgU3RhdHVzID0gZ0JT LT5TZXRUaW1lciAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgTmljLT5SYXRlTGltaXRlciwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICBUaW1lclBlcmlvZGljLA0KPiArICAgICAgICAgICAg ICAgICAgICAgIE5pYy0+UmF0ZUxpbWl0aW5nUG9sbFRpbWVyICogMTAwMDANCj4gKyAgICAgICAg ICAgICAgICAgICAgICApOw0KPiArICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAr ICAgICAgICBFdmVudEVycm9yID0gVFJVRTsNCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsgIH0N Cj4gKw0KPiArICBpZiAoKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlTdGFydCAh PSBOVUxMKSAmJiAoRXZlbnRFcnJvciA9PSBGQUxTRSkpIHsNCj4gKyAgICBTdGF0dXMgPSBOaWMt PlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3RhcnQgKENkYiwgTmljKTsNCj4gKyAgfQ0K PiArDQo+ICsgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgLy8gSW5pdGlhbCB0 aGUgc3RhdGUgZm9yIFVOREkgc3RhcnQuDQo+ICsgICAgTmljLT5TdGF0ZSAgICAgPSBQWEVfU1RB VEZMQUdTX0dFVF9TVEFURV9TVEFSVEVEOw0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NU QVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NU QVRDT0RFX1NVQ0NFU1M7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgaWYgKE5pYy0+UmF0ZUxpbWl0 aW5nRW5hYmxlID09IFRSVUUpIHsNCj4gKyAgICAgIGlmICghRXZlbnRFcnJvcikgew0KPiArICAg ICAgICBnQlMtPlNldFRpbWVyICgmTmljLT5SYXRlTGltaXRlciwgVGltZXJDYW5jZWwsIDApOw0K PiArICAgICAgfQ0KPiArDQo+ICsgICAgICBpZiAoTmljLT5SYXRlTGltaXRlcikgew0KPiArICAg ICAgICBnQlMtPkNsb3NlRXZlbnQgKCZOaWMtPlJhdGVMaW1pdGVyKTsNCj4gKyAgICAgICAgTmlj LT5SYXRlTGltaXRlciA9IDA7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgLy8g SW5pdGlhbCB0aGUgc3RhdGUgd2hlbiBVTkRJIHN0YXJ0IGlzIGZhaWwNCj4gKyAgICBDZGItPlN0 YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0 Q29kZSAgPSBQWEVfU1RBVENPREVfREVWSUNFX0ZBSUxVUkU7DQo+ICsgIH0NCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgVU5ESSBvcGVy YXRpb25hbCBzdGF0ZSBmcm9tIHN0YXJ0ZWQgdG8gc3RvcHBlZC4NCj4gKw0KPiArICBAcGFyYW1b aW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiAr ICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29u dHJvbGxlciBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlTdG9wICgNCj4gKyAg SU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiAr ew0KPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wQ29kZSAh PSBQWEVfT1BDT0RFX1NUT1ApIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RB VENPREVfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RB VEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZj bnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkNQQnNpemUgIT0g UFhFX0NQQlNJWkVfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJhZGRyICE9IFBYRV9D UEJBRERSX05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+REJzaXplICE9IFBYRV9EQlNJWkVf Tk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5EQmFkZHIgIT0gUFhFX0RCQUREUl9OT1RfVVNF RCkgfHwNCj4gKyAgICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfTk9UX1VTRUQpKQ0K PiArICB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJ TEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0K PiArICAgIHJldHVybjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBY RV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBY RV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+U3RhdGUgPT0g UFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfU1RPUFBFRCkgew0KPiArICAgIENkYi0+U3RhdEZsYWdz ID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9 IFBYRV9TVEFUQ09ERV9OT1RfU1RBUlRFRDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0K PiArICBpZiAoTmljLT5TdGF0ZSA9PSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpF RCkgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxF RDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfU0hVVERPV047DQo+ ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgTmljLT5QeGVTdGFydC5EZWxheSAgICAg PSAwOw0KPiArICBOaWMtPlB4ZVN0YXJ0LlZpcnQyUGh5cyA9IDA7DQo+ICsgIE5pYy0+UHhlU3Rh cnQuQmxvY2sgICAgID0gMDsNCj4gKyAgTmljLT5QeGVTdGFydC5NYXBfTWVtICAgPSAwOw0KPiAr ICBOaWMtPlB4ZVN0YXJ0LlVuTWFwX01lbSA9IDA7DQo+ICsgIE5pYy0+UHhlU3RhcnQuU3luY19N ZW0gID0gMDsNCj4gKyAgTmljLT5TdGF0ZSAgICAgICAgICAgICAgPSBQWEVfU1RBVEZMQUdTX0dF VF9TVEFURV9TVE9QUEVEOw0KPiArDQo+ICsgIGlmIChOaWMtPlJhdGVMaW1pdGluZ0VuYWJsZSA9 PSBUUlVFKSB7DQo+ICsgICAgZ0JTLT5TZXRUaW1lciAoJk5pYy0+UmF0ZUxpbWl0ZXIsIFRpbWVy Q2FuY2VsLCAwKTsNCj4gKyAgICBnQlMtPkNsb3NlRXZlbnQgKCZOaWMtPlJhdGVMaW1pdGVyKTsN Cj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRp U3RvcCAhPSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGku VXNiRXRoVW5kaVN0b3AgKENkYiwgTmljKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlM RUQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1h bmQgaXMgdXNlZCB0byByZXRyaWV2ZSBpbml0aWFsaXphdGlvbiBpbmZvcm1hdGlvbiB0aGF0IGlz DQo+ICsgIG5lZWRlZCBieSBkcml2ZXJzIGFuZCBhcHBsaWNhdGlvbnMgdG8gaW5pdGlhbGl6ZWQg VU5ESS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFu ZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0 aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZP SUQNCj4gK1VuZGlHZXRJbml0SW5mbyAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAg SU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgUFhFX0RCX0dFVF9JTklUX0lO Rk8gICpEYjsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBp ZiAoKENkYi0+T3BDb2RlICE9IFBYRV9PUENPREVfR0VUX0lOSVRfSU5GTykgfHwNCj4gKyAgICAg IChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9JTklUSUFMSVpFKSB8fA0KPiArICAgICAg KENkYi0+U3RhdEZsYWdzICE9IFBYRV9TVEFURkxBR1NfSU5JVElBTElaRSkgfHwNCj4gKyAgICAg IChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDgpKSB8fA0K PiArICAgICAgKENkYi0+Q1BCc2l6ZSAhPSBQWEVfQ1BCU0laRV9OT1RfVVNFRCkgfHwNCj4gKyAg ICAgIChDZGItPkNQQmFkZHIgIT0gUFhFX0NQQkFERFJfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAo Q2RiLT5EQnNpemUgIT0gc2l6ZW9mIChQWEVfREJfR0VUX0lOSVRfSU5GTykpIHx8DQo+ICsgICAg ICAoQ2RiLT5PcEZsYWdzICE9IFBYRV9PUEZMQUdTX05PVF9VU0VEKSkNCj4gKyAgew0KPiArICAg IENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBD ZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47 DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NP TU1BTkRfQ09NUExFVEU7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VD Q0VTUzsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlN0YXRlID09IFBYRV9TVEFURkxBR1Nf R0VUX1NUQVRFX1NUT1BQRUQpIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxB R1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVf Tk9UX1NUQVJURUQ7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgRGIgPSAoUFhF X0RCX0dFVF9JTklUX0lORk8gKikoVUlOVE4pQ2RiLT5EQmFkZHI7DQo+ICsNCj4gKyAgRGItPk1l bW9yeVJlcXVpcmVkICAgICAgICAgPSBNRU1PUllfUkVRVUlSRTsNCj4gKyAgRGItPkZyYW1lRGF0 YUxlbiAgICAgICAgICAgPSBQWEVfTUFYX1RYUlhfVU5JVF9FVEhFUjsNCj4gKyAgRGItPkxpbmtT cGVlZHNbMF0gICAgICAgICAgPSAxMDsNCj4gKyAgRGItPkxpbmtTcGVlZHNbMV0gICAgICAgICAg PSAxMDA7DQo+ICsgIERiLT5MaW5rU3BlZWRzWzJdICAgICAgICAgID0gMTAwMDsNCj4gKyAgRGIt PkxpbmtTcGVlZHNbM10gICAgICAgICAgPSAwOw0KPiArICBEYi0+TWVkaWFIZWFkZXJMZW4gICAg ICAgICA9IFBYRV9NQUNfSEVBREVSX0xFTl9FVEhFUjsNCj4gKyAgRGItPkhXYWRkckxlbiAgICAg ICAgICAgICAgPSBQWEVfSFdBRERSX0xFTl9FVEhFUjsNCj4gKyAgRGItPk1DYXN0RmlsdGVyQ250 ICAgICAgICAgPSBNQVhfTUNBU1RfQUREUkVTU19DTlQ7DQo+ICsgIERiLT5UeEJ1ZkNudCAgICAg ICAgICAgICAgID0gTmljLT5QeGVJbml0LlR4QnVmQ250Ow0KPiArICBEYi0+VHhCdWZTaXplICAg ICAgICAgICAgICA9IE5pYy0+UHhlSW5pdC5UeEJ1ZlNpemU7DQo+ICsgIERiLT5SeEJ1ZkNudCAg ICAgICAgICAgICAgID0gTmljLT5QeGVJbml0LlJ4QnVmQ250Ow0KPiArICBEYi0+UnhCdWZTaXpl ICAgICAgICAgICAgICA9IE5pYy0+UHhlSW5pdC5SeEJ1ZlNpemU7DQo+ICsgIERiLT5JRnR5cGUg ICAgICAgICAgICAgICAgID0gUFhFX0lGVFlQRV9FVEhFUk5FVDsNCj4gKyAgRGItPlN1cHBvcnRl ZER1cGxleE1vZGVzICAgPSBQWEVfRFVQTEVYX0RFRkFVTFQ7DQo+ICsgIERiLT5TdXBwb3J0ZWRM b29wQmFja01vZGVzID0gTE9PUEJBQ0tfTk9STUFMOw0KPiArDQo+ICsgIENkYi0+U3RhdEZsYWdz IHw9IChQWEVfU1RBVEZMQUdTX0NBQkxFX0RFVEVDVF9TVVBQT1JURUQgfA0KPiArICAgICAgICAg ICAgICAgICAgICAgUFhFX1NUQVRGTEFHU19HRVRfU1RBVFVTX05PX01FRElBX1NVUFBPUlRFRCk7 DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlHZXRJbml0 SW5mbyAhPSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGku VXNiRXRoVW5kaUdldEluaXRJbmZvIChDZGIsIE5pYyk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1B TkRfRkFJTEVEOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhp cyBjb21tYW5kIGlzIHVzZWQgdG8gcmV0cmlldmUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBh Ym91dA0KPiArICB0aGUgTklDIGJlaW5nIGNvbnRyb2xsZWQgYnkgdGhlIFVOREkuDQo+ICsNCj4g KyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBi bG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50 ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtVbmRpR2V0 Q29uZmlnSW5mbyAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRB ICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgUFhFX0RCX0dFVF9DT05GSUdfSU5GTyAgKkRiOw0K PiArICBFRklfU1RBVFVTICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKChDZGIt Pk9wQ29kZSAhPSBQWEVfT1BDT0RFX0dFVF9DT05GSUdfSU5GTykgfHwNCj4gKyAgICAgIChDZGIt PlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+ U3RhdEZsYWdzICE9IFBYRV9TVEFURkxBR1NfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGIt PklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDgpKSB8fA0KPiArICAg ICAgKENkYi0+Q1BCc2l6ZSAhPSBQWEVfQ1BCU0laRV9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChD ZGItPkNQQmFkZHIgIT0gUFhFX0NQQkFERFJfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5E QnNpemUgIT0gc2l6ZW9mIChQWEVfREJfR0VUX0NPTkZJR19JTkZPKSkgfHwNCj4gKyAgICAgIChD ZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfTk9UX1VTRUQpKQ0KPiArICB7DQo+ICsgICAgQ2Ri LT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+ U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4g KyAgfSBlbHNlIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFO RF9DT01QTEVURTsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNT Ow0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+U3RhdGUgPT0gUFhFX1NUQVRGTEFHU19HRVRf U1RBVEVfU1RPUFBFRCkgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19D T01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9OT1Rf U1RBUlRFRDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBEYiA9IChQWEVfREJf R0VUX0NPTkZJR19JTkZPICopKFVJTlROKUNkYi0+REJhZGRyOw0KPiArDQo+ICsgIERiLT5wY2ku QnVzVHlwZSA9IFBYRV9CVVNUWVBFX1VTQjsNCj4gKw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVz YkV0aFVuZGkuVXNiRXRoVW5kaUdldENvbmZpZ0luZm8gIT0gTlVMTCkgew0KPiArICAgIFN0YXR1 cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlHZXRDb25maWdJbmZvIChDZGIs IE5pYyk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2RiLT5T dGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0NCj4gKyAg fQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIHJlc2V0cyB0aGUgbmV0d29y ayBhZGFwdGVyIGFuZCBpbml0aWFsaXplcyBVTkRJIHVzaW5nDQo+ICsgIHRoZSBwYXJhbWV0ZXJz IHN1cHBsaWVkIGluIHRoZSBDUEIuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIENkYiAgQSBw b2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbiwg b3V0XSBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBk YXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlJbml0aWFsaXplICgNCj4gKyAgSU4g ICAgICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gT1VUICBOSUNfREFUQSAgKk5pYw0KPiArICAp DQo+ICt7DQo+ICsgIFBYRV9DUEJfSU5JVElBTElaRSAgKkNwYjsNCj4gKyAgUFhFX0RCX0lOSVRJ QUxJWkUgICAqRGI7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgU3RhdHVzOw0KPiArDQo+ICsg IGlmICgoQ2RiLT5PcENvZGUgIT0gUFhFX09QQ09ERV9JTklUSUFMSVpFKSB8fA0KPiArICAgICAg KENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAo Q2RiLT5TdGF0RmxhZ3MgIT0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KPiArICAgICAg KENkYi0+SUZudW0gPj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkpIHx8DQo+ ICsgICAgICAoQ2RiLT5DUEJzaXplICE9IHNpemVvZiAoUFhFX0NQQl9JTklUSUFMSVpFKSkpDQo+ ICsgIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlM RUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ ICsgICAgcmV0dXJuOw0KPiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhF X1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+ U3RhdGUgPT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfU1RPUFBFRCkgew0KPiArICAgIENkYi0+ U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0 YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfU1RBUlRFRDsNCj4gKyAgICByZXR1cm47DQo+ICsg IH0NCj4gKw0KPiArICBpZiAoKENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19JTklUSUFMSVpF X0RFVEVDVF9DQUJMRSkgJiYNCj4gKyAgICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1Nf SU5JVElBTElaRV9ET19OT1RfREVURUNUX0NBQkxFKSkNCj4gKyAgew0KPiArICAgIENkYi0+U3Rh dEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRD b2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0N Cj4gKw0KPiArICBpZiAoTmljLT5TdGF0ZSA9PSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklU SUFMSVpFRCkgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5E X0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9BTFJFQURZX0lO SVRJQUxJWkVEOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIENwYiA9IChQWEVf Q1BCX0lOSVRJQUxJWkUgKikoVUlOVE4pQ2RiLT5DUEJhZGRyOw0KPiArICBEYiAgPSAoUFhFX0RC X0lOSVRJQUxJWkUgKikoVUlOVE4pQ2RiLT5EQmFkZHI7DQo+ICsNCj4gKyAgTmljLT5QeGVJbml0 LkxpbmtTcGVlZCAgICA9IENwYi0+TGlua1NwZWVkOw0KPiArICBOaWMtPlB4ZUluaXQuRHVwbGV4 TW9kZSAgID0gQ3BiLT5EdXBsZXhNb2RlOw0KPiArICBOaWMtPlB4ZUluaXQuTG9vcEJhY2tNb2Rl ID0gQ3BiLT5Mb29wQmFja01vZGU7DQo+ICsgIE5pYy0+UHhlSW5pdC5NZW1vcnlBZGRyICAgPSBD cGItPk1lbW9yeUFkZHI7DQo+ICsgIE5pYy0+UHhlSW5pdC5NZW1vcnlMZW5ndGggPSBDcGItPk1l bW9yeUxlbmd0aDsNCj4gKyAgTmljLT5QeGVJbml0LlR4QnVmQ250ICAgICA9IFRYX0JVRkZFUl9D T1VOVDsNCj4gKyAgTmljLT5QeGVJbml0LlR4QnVmU2l6ZSAgICA9IE5pYy0+TWF4U2VnbWVudFNp emU7DQo+ICsgIE5pYy0+UHhlSW5pdC5SeEJ1ZkNudCAgICAgPSBSWF9CVUZGRVJfQ09VTlQ7DQo+ ICsgIE5pYy0+UHhlSW5pdC5SeEJ1ZlNpemUgICAgPSBOaWMtPk1heFNlZ21lbnRTaXplOw0KPiAr DQo+ICsgIENkYi0+U3RhdENvZGUgPSBJbml0aWFsaXplIChDZGIsIE5pYyk7DQo+ICsNCj4gKyAg RGItPk1lbW9yeVVzZWQgPSBNRU1PUllfUkVRVUlSRTsNCj4gKyAgRGItPlR4QnVmQ250ICAgPSBO aWMtPlB4ZUluaXQuVHhCdWZDbnQ7DQo+ICsgIERiLT5UeEJ1ZlNpemUgID0gTmljLT5QeGVJbml0 LlR4QnVmU2l6ZTsNCj4gKyAgRGItPlJ4QnVmQ250ICAgPSBOaWMtPlB4ZUluaXQuUnhCdWZDbnQ7 DQo+ICsgIERiLT5SeEJ1ZlNpemUgID0gTmljLT5QeGVJbml0LlJ4QnVmU2l6ZTsNCj4gKw0KPiAr ICBOaWMtPlJ4RmlsdGVyICAgID0gUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfQlJPQURDQVNU Ow0KPiArICBOaWMtPkNhblRyYW5zbWl0ID0gRkFMU0U7DQo+ICsNCj4gKyAgaWYgKENkYi0+T3BG bGFncyA9PSBQWEVfT1BGTEFHU19JTklUSUFMSVpFX0RFVEVDVF9DQUJMRSkgew0KPiArICAgIGlm ICgoTmljLT5SZXF1ZXN0LlJlcXVlc3QgPT0gVVNCX0NEQ19ORVRXT1JLX0NPTk5FQ1RJT04pICYm IChOaWMtPlJlcXVlc3QuVmFsdWUgPT0gTkVUV09SS19ESVNDT05ORUNUKSkgew0KPiArICAgICAg TmljLT5DYWJsZURldGVjdCA9IDA7DQo+ICsgICAgfSBlbHNlIGlmICgoTmljLT5SZXF1ZXN0LlJl cXVlc3QgPT0gVVNCX0NEQ19ORVRXT1JLX0NPTk5FQ1RJT04pICYmIChOaWMtPlJlcXVlc3QuVmFs dWUgPT0gTkVUV09SS19DT05ORUNURUQpKSB7DQo+ICsgICAgICBOaWMtPkNhYmxlRGV0ZWN0ID0g MTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoTmljLT5DYWJsZURldGVjdCA9PSAwKSB7DQo+ ICsgICAgICBDZGItPlN0YXRGbGFncyB8PSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkVEX05PX01F RElBOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChDZGItPlN0YXRDb2RlICE9IFBY RV9TVEFUQ09ERV9TVUNDRVNTKSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZM QUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICB9IGVsc2Ugew0KPiArICAgIE5pYy0+U3RhdGUgPSBQ WEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRDsNCj4gKyAgfQ0KPiArDQo+ICsgIGlm IChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpSW5pdGlhbGl6ZSAhPSBOVUxMKSB7 DQo+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaUluaXRp YWxpemUgKENkYiwgTmljKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsg ICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsg ICAgfQ0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBJbml0aWFsaXplIE5ldHdvcmsg aW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgICAgQ2Ri ICAgICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBh cmFtW2luLCBvdXRdIE5pYyAgICAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBj b250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBTdGF0dXMgIEEgdmFsdWUgb2YgUHhl IHN0YXRjb2RlLg0KPiArDQo+ICsqKi8NCj4gK1VJTlQxNg0KPiArSW5pdGlhbGl6ZSAoDQo+ICsg IElOICAgICAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOIE9VVCAgTklDX0RBVEEgICpOaWMNCj4g KyAgKQ0KPiArew0KPiArICBVSU5UTiAgICAgICBTdGF0dXM7DQo+ICsgIFVJTlQzMiAgICAgIElu ZGV4Ow0KPiArICBFRklfU1RBVFVTICBFZmlTdGF0dXM7DQo+ICsNCj4gKyAgU3RhdHVzID0gTWFw SXQgKA0KPiArICAgICAgICAgICAgIE5pYywNCj4gKyAgICAgICAgICAgICBOaWMtPlB4ZUluaXQu TWVtb3J5QWRkciwNCj4gKyAgICAgICAgICAgICBOaWMtPlB4ZUluaXQuTWVtb3J5TGVuZ3RoLA0K PiArICAgICAgICAgICAgIFRPX0FORF9GUk9NX0RFVklDRSwNCj4gKyAgICAgICAgICAgICAoVUlO VDY0KShVSU5UTikmTmljLT5NYXBwZWRBZGRyDQo+ICsgICAgICAgICAgICAgKTsNCj4gKw0KPiAr ICBpZiAoU3RhdHVzICE9IDApIHsNCj4gKyAgICByZXR1cm4gKFVJTlQxNilTdGF0dXM7DQo+ICsg IH0NCj4gKw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQWEVfSFdBRERSX0xFTl9FVEhF UjsgSW5kZXgrKykgew0KPiArICAgIE5pYy0+UGVybU5vZGVBZGRyZXNzW0luZGV4XSA9IE5pYy0+ TWFjQWRkci5BZGRyW0luZGV4XTsNCj4gKyAgfQ0KPiArDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJ bmRleCA8IFBYRV9IV0FERFJfTEVOX0VUSEVSOyBJbmRleCsrKSB7DQo+ICsgICAgTmljLT5DdXJy ZW50Tm9kZUFkZHJlc3NbSW5kZXhdID0gTmljLT5QZXJtTm9kZUFkZHJlc3NbSW5kZXhdOw0KPiAr ICB9DQo+ICsNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUFhFX0hXQUREUl9MRU5fRVRI RVI7IEluZGV4KyspIHsNCj4gKyAgICBOaWMtPkJyb2FkY2FzdE5vZGVBZGRyZXNzW0luZGV4XSA9 IDB4RkY7DQo+ICsgIH0NCj4gKw0KPiArICBmb3IgKEluZGV4ID0gUFhFX0hXQUREUl9MRU5fRVRI RVI7IEluZGV4IDwgUFhFX01BQ19MRU5HVEg7IEluZGV4KyspIHsNCj4gKyAgICBOaWMtPkN1cnJl bnROb2RlQWRkcmVzc1tJbmRleF0gICA9IDA7DQo+ICsgICAgTmljLT5QZXJtTm9kZUFkZHJlc3Nb SW5kZXhdICAgICAgPSAwOw0KPiArICAgIE5pYy0+QnJvYWRjYXN0Tm9kZUFkZHJlc3NbSW5kZXhd ID0gMDsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoSW5pdGlhbGl6 ZSAhPSBOVUxMKSB7DQo+ICsgICAgRWZpU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aEluaXRp YWxpemUgKENkYiwgTmljKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChFZmlTdGF0dXMpKSB7DQo+ ICsgICAgICByZXR1cm4gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICB9DQo+ ICsgIH0NCj4gKw0KPiArICByZXR1cm4gKFVJTlQxNilTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICBUaGlzIGNvbW1hbmQgcmVzZXRzIHRoZSBuZXR3b3JrIGFkYXB0ZXIgYW5kIHJlaW5p dGlhbGl6ZXMgdGhlIFVOREkNCj4gKyAgd2l0aCB0aGUgc2FtZSBwYXJhbWV0ZXJzIHByb3ZpZGVk IGluIHRoZSBJbml0aWFsaXplIGNvbW1hbmQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBB IHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2lu XSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0 YS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtVbmRpUmVzZXQgKA0KPiArICBJTiAgUFhFX0NE QiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIEVG SV9TVEFUVVMgIFN0YXR1czsNCj4gKw0KPiArICBpZiAoKENkYi0+T3BDb2RlICE9IFBYRV9PUENP REVfUkVTRVQpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENPREVfSU5J VElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lO SVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhl LT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkNQQnNpemUgIT0gUFhFX0NQQlNJ WkVfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJhZGRyICE9IFBYRV9DUEJBRERSX05P VF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+REJzaXplICE9IFBYRV9EQlNJWkVfTk9UX1VTRUQp IHx8DQo+ICsgICAgICAoQ2RiLT5EQmFkZHIgIT0gUFhFX0RCQUREUl9OT1RfVVNFRCkpDQo+ICsg IHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7 DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsg ICAgcmV0dXJuOw0KPiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NU QVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NU QVRDT0RFX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5TdGF0ZSAhPSBQWEVf U1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KPiArICAgIENkYi0+U3RhdENvZGUg ID0gUFhFX1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9 IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ ICsNCj4gKyAgaWYgKChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfTk9UX1VTRUQpICYmDQo+ ICsgICAgICAoQ2RiLT5PcEZsYWdzICE9IFBYRV9PUEZMQUdTX1JFU0VUX0RJU0FCTEVfSU5URVJS VVBUUykgJiYNCj4gKyAgICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfUkVTRVRfRElT QUJMRV9GSUxURVJTKSkNCj4gKyAgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRG TEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09E RV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoKENk Yi0+T3BGbGFncyAmIFBYRV9PUEZMQUdTX1JFU0VUX0RJU0FCTEVfRklMVEVSUykgPT0gMCkgew0K PiArICAgIE5pYy0+UnhGaWx0ZXIgPSBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9CUk9BRENB U1Q7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoKENkYi0+T3BGbGFncyAmIFBYRV9PUEZMQUdTX1JF U0VUX0RJU0FCTEVfSU5URVJSVVBUUykgIT0gMCkgew0KPiArICAgIE5pYy0+SW50ZXJydXBPcEZs YWcgPSAwOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVz YkV0aFVuZGlSZXNldCAhPSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVz YkV0aFVuZGkuVXNiRXRoVW5kaVJlc2V0IChDZGIsIE5pYyk7DQo+ICsgICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NP TU1BTkRfRkFJTEVEOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAg VGhlIFNodXRkb3duIGNvbW1hbmQgcmVzZXRzIHRoZSBuZXR3b3JrIGFkYXB0ZXIgYW5kIGxlYXZl cyBpdCBpbiBhDQo+ICsgIHNhZmUgc3RhdGUgZm9yIGFub3RoZXIgZHJpdmVyIHRvIGluaXRpYWxp emUuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21t YW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBOaWMgIEEgcG9pbnRl ciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsqKi8N Cj4gK1ZPSUQNCj4gK1VuZGlTaHV0ZG93biAoDQo+ICsgIElOICAgICAgUFhFX0NEQiAgICpDZGIs DQo+ICsgIElOIE9VVCAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RB VFVTICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RFX1NI VVRET1dOKSB8fA0KPiArICAgICAgKENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJ QUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0RmxhZ3MgIT0gUFhFX1NUQVRGTEFHU19JTklU SUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+SUZudW0gPj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+ SUZjbnRFeHQgPDwgOCkpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJzaXplICE9IFBYRV9DUEJTSVpF X05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+Q1BCYWRkciAhPSBQWEVfQ1BCQUREUl9OT1Rf VVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkRCc2l6ZSAhPSBQWEVfREJTSVpFX05PVF9VU0VEKSB8 fA0KPiArICAgICAgKENkYi0+REJhZGRyICE9IFBYRV9EQkFERFJfTk9UX1VTRUQpIHx8DQo+ICsg ICAgICAoQ2RiLT5PcEZsYWdzICE9IFBYRV9PUEZMQUdTX05PVF9VU0VEKSkNCj4gKyAgew0KPiAr ICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAg ICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1 cm47DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdT X0NPTU1BTkRfQ09NUExFVEU7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVf U1VDQ0VTUzsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlN0YXRlICE9IFBYRV9TVEFURkxB R1NfR0VUX1NUQVRFX0lOSVRJQUxJWkVEKSB7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVf U1RBVENPREVfTk9UX0lOSVRJQUxJWkVEOw0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NU QVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiAr ICBOaWMtPkNhblRyYW5zbWl0ID0gRkFMU0U7DQo+ICsNCj4gKyAgTmljLT5TdGF0ZSA9IFBYRV9T VEFURkxBR1NfR0VUX1NUQVRFX1NUQVJURUQ7DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5V c2JFdGhVbmRpLlVzYkV0aFVuZGlTaHV0ZG93biAhPSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0g TmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVNodXRkb3duIChDZGIsIE5pYyk7DQo+ ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0Q29kZSAg PSBQWEVfU1RBVENPREVfTk9UX0lOSVRJQUxJWkVEOw0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3Mg PSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArfQ0K PiArDQo+ICsvKioNCj4gKyAgVGhlIEludGVycnVwdCBFbmFibGVzIGNvbW1hbmQgY2FuIGJlIHVz ZWQgdG8gcmVhZCBhbmQvb3IgY2hhbmdlDQo+ICsgIHRoZSBjdXJyZW50IGV4dGVybmFsIGludGVy cnVwdCBlbmFibGUgc2V0dGluZ3MuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50 ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmlj ICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4g Kw0KPiArKiovDQo+ICtWT0lEDQo+ICtVbmRpSW50ZXJydXB0RW5hYmxlICgNCj4gKyAgSU4gIFBY RV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiAr ICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ICsNCj4gKyAgQ2RiLT5TdGF0Q29kZSA9IFBYRV9TVEFU Q09ERV9VTlNVUFBPUlRFRDsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0 aFVuZGlJbnRlcnJ1cHRFbmFibGUgIT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNi RXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlJbnRlcnJ1cHRFbmFibGUgKENkYiwgTmljKTsNCj4g KyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9 IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAg IENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAg ICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gKyAgICB9DQo+ICsg IH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIHJlYWQg YW5kIGNoYW5nZSByZWNlaXZlIGZpbHRlcnMgYW5kLA0KPiArICBpZiBzdXBwb3J0ZWQsIHJlYWQg YW5kIGNoYW5nZSB0aGUgbXVsdGljYXN0IE1BQyBhZGRyZXNzIGZpbHRlciBsaXN0Lg0KPiArDQo+ ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3Ig YmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGlu dGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArVW5kaVJl Y2VpdmVGaWx0ZXIgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFU QSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIFVJTlQxNiAgICAgICAgICAgICAgICAgIE5ld0Zp bHRlcjsNCj4gKyAgUFhFX0RCX1JFQ0VJVkVfRklMVEVSUyAgKkRiOw0KPiArICBFRklfU1RBVFVT ICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQWEVf T1BDT0RFX1JFQ0VJVkVfRklMVEVSUykgfHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2RlICE9IFBY RV9TVEFUQ09ERV9JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdzICE9IFBY RV9TVEFURkxBR1NfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVtID49IChnUHhl LT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDgpKSkNCj4gKyAgew0KPiArICAgIENkYi0+U3Rh dEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRD b2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0g ZWxzZSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09N UExFVEU7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4g KyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlN0YXRlICE9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRF X0lOSVRJQUxJWkVEKSB7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfTk9U X0lOSVRJQUxJWkVEOw0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01N QU5EX0ZBSUxFRDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBOZXdGaWx0ZXIg PSAoVUlOVDE2KShDZGItPk9wRmxhZ3MgJiAweDFGKTsNCj4gKw0KPiArICBzd2l0Y2ggKENkYi0+ T3BGbGFncyAmIFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX09QTUFTSykgew0KPiArICAgIGNh c2UgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfUkVBRDoNCj4gKyAgICAgIGlmIChDZGItPkNQ QnNpemUgIT0gUFhFX0NQQlNJWkVfTk9UX1VTRUQpIHsNCj4gKyAgICAgICAgQ2RiLT5TdGF0Rmxh Z3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgICAgICBDZGItPlN0YXRD b2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICAgIH0NCj4gKw0KPiArICAg ICAgaWYgKChOZXdGaWx0ZXIgJiBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9SRVNFVF9NQ0FT VF9MSVNUKSA9PSAwKSB7DQo+ICsgICAgICAgIGlmICgoQ2RiLT5EQnNpemUgIT0gMCkpIHsNCj4g KyAgICAgICAgICBEYiA9IChQWEVfREJfUkVDRUlWRV9GSUxURVJTICopKFVJTlROKUNkYi0+REJh ZGRyOw0KPiArICAgICAgICAgIENvcHlNZW0gKERiLCAmTmljLT5NY2FzdExpc3QsIE5pYy0+TWNh c3RDb3VudCk7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgYnJlYWs7 DQo+ICsNCj4gKyAgICBjYXNlIFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0VOQUJMRToNCj4g KyAgICAgIGlmIChOZXdGaWx0ZXIgPT0gMCkgew0KPiArICAgICAgICBDZGItPlN0YXRGbGFncyA9 IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAg IGlmIChDZGItPkNQQnNpemUgIT0gMCkgew0KPiArICAgICAgICBpZiAoKChOZXdGaWx0ZXIgJiBQ WEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9GSUxURVJFRF9NVUxUSUNBU1QpID09IDApIHx8DQo+ ICsgICAgICAgICAgICAoKE5ld0ZpbHRlciAmIFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX1JF U0VUX01DQVNUX0xJU1QpICE9IDApIHx8DQo+ICsgICAgICAgICAgICAoKE5ld0ZpbHRlciAmIFBY RV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0FMTF9NVUxUSUNBU1QpICE9IDApIHx8DQo+ICsgICAg ICAgICAgICAoKENkYi0+Q1BCc2l6ZSAlIHNpemVvZiAoUFhFX01BQ19BRERSKSkgIT0gMCkpDQo+ ICsgICAgICAgIHsNCj4gKyAgICAgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1Nf Q09NTUFORF9GQUlMRUQ7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAg aWYgKChDZGItPk9wRmxhZ3MgJiBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9GSUxURVJFRF9N VUxUSUNBU1QpICE9IDApIHsNCj4gKyAgICAgICAgaWYgKCgoQ2RiLT5PcEZsYWdzICYgUFhFX09Q RkxBR1NfUkVDRUlWRV9GSUxURVJfUkVTRVRfTUNBU1RfTElTVCkgIT0gMCkgfHwNCj4gKyAgICAg ICAgICAgICgoQ2RiLT5PcEZsYWdzICYgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfQUxMX01V TFRJQ0FTVCkgIT0gMCkpDQo+ICsgICAgICAgIHsNCj4gKyAgICAgICAgICBDZGItPlN0YXRGbGFn cyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgICAgIH0NCj4gKw0KPiAr ICAgICAgICBpZiAoKENkYi0+Q1BCc2l6ZSA9PSAwKSkgew0KPiArICAgICAgICAgIENkYi0+U3Rh dEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICAgICAgfQ0KPiAr ICAgICAgfQ0KPiArDQo+ICsgICAgICBDZGItPlN0YXRDb2RlID0gU2V0RmlsdGVyIChOaWMsIE5l d0ZpbHRlciwgQ2RiLT5DUEJhZGRyLCBDZGItPkNQQnNpemUpOw0KPiArICAgICAgYnJlYWs7DQo+ ICsNCj4gKyAgICBjYXNlIFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0RJU0FCTEU6DQo+ICsg ICAgICBpZiAoQ2RiLT5DUEJzaXplICE9IFBYRV9DUEJTSVpFX05PVF9VU0VEKSB7DQo+ICsgICAg ICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAg ICAgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAg ICB9DQo+ICsNCj4gKyAgICAgIGJyZWFrOw0KPiArDQo+ICsgICAgZGVmYXVsdDoNCj4gKyAgICAg IENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICAg IENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICB9DQo+ICsN Cj4gKyAgQ2RiLT5TdGF0RmxhZ3MgPSAoUFhFX1NUQVRGTEFHUykoQ2RiLT5TdGF0RmxhZ3MgfCBO aWMtPlJ4RmlsdGVyKTsNCj4gKw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNi RXRoVW5kaVJlY2VpdmVGaWx0ZXIgIT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNi RXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlSZWNlaXZlRmlsdGVyIChDZGIsIE5pYyk7DQo+ICsg ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQ WEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAgU2V0IFBYRSByZWNlaXZlIGZpbHRlci4NCj4gKw0KPiArICBAcGFyYW1b aW5dICBOaWMgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRy b2xsZXIgZGF0YS4NCj4gKyAgQHBhcmFtW2luXSAgU2V0RmlsdGVyICAgUFhFIHJlY2VpdmUgZmls dGVyDQo+ICsgIEBwYXJhbVtpbl0gIENwYkFkZHIgICAgIENvbW1hbmQgUGFyYW1ldGVyIEJsb2Nr IEFkZHJlc3MNCj4gKyAgQHBhcmFtW2luXSAgQ3BiU2l6ZSAgICAgQ29tbWFuZCBQYXJhbWV0ZXIg QmxvY2sgU2l6ZQ0KPiArDQo+ICsqKi8NCj4gK1VJTlQxNg0KPiArU2V0RmlsdGVyICgNCj4gKyAg SU4gIE5JQ19EQVRBICAqTmljLA0KPiArICBJTiAgVUlOVDE2ICAgIFNldEZpbHRlciwNCj4gKyAg SU4gIFVJTlQ2NCAgICBDcGJBZGRyLA0KPiArICBJTiAgVUlOVDMyICAgIENwYlNpemUNCj4gKyAg KQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAg VUlOVDggICAgICAgICAgICAgICAgICAgICAgICAqTWNhc3RMaXN0Ow0KPiArICBVSU5UOCAgICAg ICAgICAgICAgICAgICAgICAgIENvdW50Ow0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAg ICAgIEluZGV4MTsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICBJbmRleDI7DQo+ ICsgIFBYRV9DUEJfUkVDRUlWRV9GSUxURVJTICAgICAgKkNwYjsNCj4gKyAgVVNCX0VUSEVSTkVU X0ZVTl9ERVNDUklQVE9SICBVc2JFdGhGdW5EZXNjcmlwdG9yOw0KPiArDQo+ICsgIENvdW50ID0g MDsNCj4gKyAgQ3BiICAgPSAoUFhFX0NQQl9SRUNFSVZFX0ZJTFRFUlMgKikoVUlOVE4pQ3BiQWRk cjsNCj4gKw0KPiArICAvLyBUaGUgQ3BiIGNvdWxkIGJlIE5VTEwuKHJlZjpQWEVfQ1BCQUREUl9O T1RfVVNFRCkNCj4gKyAgTmljLT5SeEZpbHRlciA9IChVSU5UOClTZXRGaWx0ZXI7DQo+ICsNCj4g KyAgaWYgKCgoU2V0RmlsdGVyICYgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfRklMVEVSRURf TVVMVElDQVNUKSAhPSAwKSB8fCAoQ3BiICE9IE5VTEwpKSB7DQo+ICsgICAgaWYgKENwYiAhPSBO VUxMKSB7DQo+ICsgICAgICBOaWMtPk1jYXN0Q291bnQgPSAoVUlOVDgpKENwYlNpemUgLyBQWEVf TUFDX0xFTkdUSCk7DQo+ICsgICAgICBDb3B5TWVtICgmTmljLT5NY2FzdExpc3QsIENwYiwgTmlj LT5NY2FzdENvdW50KTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBOaWMtPlVzYkV0aC0+VXNiRXRo RnVuRGVzY3JpcHRvciAoTmljLT5Vc2JFdGgsICZVc2JFdGhGdW5EZXNjcmlwdG9yKTsNCj4gKyAg ICBpZiAoKFVzYkV0aEZ1bkRlc2NyaXB0b3IuTnVtYmVyTWNGaWx0ZXJzIDw8IDEpID09IDApIHsN Cj4gKyAgICAgIE5pYy0+UnhGaWx0ZXIgfD0gUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfQUxM X01VTFRJQ0FTVDsNCj4gKyAgICAgIE5pYy0+VXNiRXRoLT5TZXRVc2JFdGhQYWNrZXRGaWx0ZXIg KE5pYy0+VXNiRXRoLCBOaWMtPlJ4RmlsdGVyKTsNCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAg U3RhdHVzID0gZ0JTLT5BbGxvY2F0ZVBvb2wgKEVmaUJvb3RTZXJ2aWNlc0RhdGEsIE5pYy0+TWNh c3RDb3VudCAqIDYsIChWT0lEICoqKSZNY2FzdExpc3QpOw0KPiArICAgICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiArICAgICAgICByZXR1cm4gUFhFX1NUQVRDT0RFX0lOVkFMSURfUEFS QU1FVEVSOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICBpZiAoQ3BiICE9IE5VTEwpIHsNCj4g KyAgICAgICAgZm9yIChJbmRleDEgPSAwOyBJbmRleDEgPCBOaWMtPk1jYXN0Q291bnQ7IEluZGV4 MSsrKSB7DQo+ICsgICAgICAgICAgZm9yIChJbmRleDIgPSAwOyBJbmRleDIgPCA2OyBJbmRleDIr Kykgew0KPiArICAgICAgICAgICAgTWNhc3RMaXN0W0NvdW50KytdID0gQ3BiLT5NQ2FzdExpc3Rb SW5kZXgxXVtJbmRleDJdOw0KPiArICAgICAgICAgIH0NCj4gKyAgICAgICAgfQ0KPiArICAgICAg fQ0KPiArDQo+ICsgICAgICBOaWMtPlJ4RmlsdGVyIHw9IFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklM VEVSX0ZJTFRFUkVEX01VTFRJQ0FTVDsNCj4gKyAgICAgIGlmIChDcGIgIT0gTlVMTCkgew0KPiAr ICAgICAgICBOaWMtPlVzYkV0aC0+U2V0VXNiRXRoTWNhc3RGaWx0ZXIgKE5pYy0+VXNiRXRoLCBO aWMtPk1jYXN0Q291bnQsIE1jYXN0TGlzdCk7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIE5p Yy0+VXNiRXRoLT5TZXRVc2JFdGhQYWNrZXRGaWx0ZXIgKE5pYy0+VXNiRXRoLCBOaWMtPlJ4Rmls dGVyKTsNCj4gKyAgICAgIEZyZWVQb29sIChNY2FzdExpc3QpOw0KPiArICAgIH0NCj4gKyAgfQ0K PiArDQo+ICsgIHJldHVybiBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoq DQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGdldCBjdXJyZW50IHN0YXRpb24gYW5kIGJy b2FkY2FzdCBNQUMgYWRkcmVzc2VzDQo+ICsgIGFuZCwgaWYgc3VwcG9ydGVkLCB0byBjaGFuZ2Ug dGhlIGN1cnJlbnQgc3RhdGlvbiBNQUMgYWRkcmVzcy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBD ZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFy YW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxl ciBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlTdGF0aW9uQWRkcmVzcyAoDQo+ ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkN Cj4gK3sNCj4gKyAgUFhFX0NQQl9TVEFUSU9OX0FERFJFU1MgICpDcGI7DQo+ICsgIFBYRV9EQl9T VEFUSU9OX0FERFJFU1MgICAqRGI7DQo+ICsgIFVJTlQxNiAgICAgICAgICAgICAgICAgICBJbmRl eDsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBpZiAo KENkYi0+T3BDb2RlICE9IFBYRV9PUENPREVfU1RBVElPTl9BRERSRVNTKSB8fA0KPiArICAgICAg KENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAo Q2RiLT5TdGF0RmxhZ3MgIT0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KPiArICAgICAg KENkYi0+SUZudW0gPj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkpIHx8DQo+ ICsgICAgICAoQ2RiLT5EQnNpemUgIT0gc2l6ZW9mIChQWEVfREJfU1RBVElPTl9BRERSRVNTKSkp DQo+ICsgIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9G QUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7 DQo+ICsgICAgcmV0dXJuOw0KPiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0g UFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0g UFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5TdGF0ZSAh PSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KPiArICAgIENkYi0+U3Rh dENvZGUgID0gUFhFX1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCj4gKyAgICBDZGItPlN0YXRG bGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgcmV0dXJuOw0KPiAr ICB9DQo+ICsNCj4gKyAgaWYgKENkYi0+T3BGbGFncyA9PSBQWEVfT1BGTEFHU19TVEFUSU9OX0FE RFJFU1NfUkVTRVQpIHsNCj4gKyAgICBpZiAoQ29tcGFyZU1lbSAoJk5pYy0+Q3VycmVudE5vZGVB ZGRyZXNzWzBdLCAmTmljLT5QZXJtTm9kZUFkZHJlc3NbMF0sIFBYRV9NQUNfTEVOR1RIKSAhPSAw KSB7DQo+ICsgICAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQWEVfTUFDX0xFTkdUSDsgSW5k ZXgrKykgew0KPiArICAgICAgICBOaWMtPkN1cnJlbnROb2RlQWRkcmVzc1tJbmRleF0gPSBOaWMt PlBlcm1Ob2RlQWRkcmVzc1tJbmRleF07DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICB9DQo+ ICsNCj4gKyAgaWYgKENkYi0+Q1BCYWRkciAhPSAwKSB7DQo+ICsgICAgQ3BiID0gKFBYRV9DUEJf U1RBVElPTl9BRERSRVNTICopKFVJTlROKUNkYi0+Q1BCYWRkcjsNCj4gKyAgICBmb3IgKEluZGV4 ID0gMDsgSW5kZXggPCBQWEVfTUFDX0xFTkdUSDsgSW5kZXgrKykgew0KPiArICAgICAgTmljLT5D dXJyZW50Tm9kZUFkZHJlc3NbSW5kZXhdID0gQ3BiLT5TdGF0aW9uQWRkcltJbmRleF07DQo+ICsg ICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYgKENkYi0+REJhZGRyICE9IDApIHsNCj4gKyAgICBE YiA9IChQWEVfREJfU1RBVElPTl9BRERSRVNTICopKFVJTlROKUNkYi0+REJhZGRyOw0KPiArICAg IGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFBYRV9NQUNfTEVOR1RIOyBJbmRleCsrKSB7DQo+ICsg ICAgICBEYi0+U3RhdGlvbkFkZHJbSW5kZXhdICAgPSBOaWMtPkN1cnJlbnROb2RlQWRkcmVzc1tJ bmRleF07DQo+ICsgICAgICBEYi0+QnJvYWRjYXN0QWRkcltJbmRleF0gPSBOaWMtPkJyb2FkY2Fz dE5vZGVBZGRyZXNzW0luZGV4XTsNCj4gKyAgICAgIERiLT5QZXJtYW5lbnRBZGRyW0luZGV4XSA9 IE5pYy0+UGVybU5vZGVBZGRyZXNzW0luZGV4XTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiAr ICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVN0YXRpb25BZGRyZXNzICE9 IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhV bmRpU3RhdGlvbkFkZHJlc3MgKENkYiwgTmljKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9G QUlMRUQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNv bW1hbmQgaXMgdXNlZCB0byByZWFkIGFuZCBjbGVhciB0aGUgTklDIHRyYWZmaWMgc3RhdGlzdGlj cy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBk ZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUg TmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQN Cj4gK1VuZGlTdGF0aXN0aWNzICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAg TklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ ICsNCj4gKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RFX1NUQVRJU1RJQ1MpIHx8DQo+ ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENPREVfSU5JVElBTElaRSkgfHwNCj4g KyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4 KSkgfHwNCj4gKyAgICAgIChDZGItPkNQQnNpemUgIT0gUFhFX0NQQlNJWkVfTk9UX1VTRUQpIHx8 DQo+ICsgICAgICAoQ2RiLT5DUEJhZGRyICE9IFBYRV9DUEJBRERSX05PVF9VU0VEKSkNCj4gKyAg ew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsN Cj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAg ICByZXR1cm47DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RB VEZMQUdTX0NPTU1BTkRfQ09NUExFVEU7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5TdGF0 ZSAhPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KPiArICAgIENkYi0+ U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCj4gKyAgICBDZGItPlN0 YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgcmV0dXJuOw0K PiArICB9DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfU1RBVElT VElDU19SRVNFVCkgJiYNCj4gKyAgICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfU1RB VElTVElDU19SRUFEKSkNCj4gKyAgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRG TEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09E RV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBDZGItPlN0 YXRDb2RlID0gU3RhdGlzdGljcyAoTmljLCBDZGItPkRCYWRkciwgQ2RiLT5EQnNpemUpOw0KPiAr DQo+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3RhdGlzdGljcyAh PSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRo VW5kaVN0YXRpc3RpY3MgKENkYiwgTmljKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlM RUQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBSZXR1cm4gZGF0 YSBmb3IgREIgZGF0YS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBOaWMgICAgICBBIHBvaW50ZXIg dG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKyAgQHBhcmFtW2lu XSAgRGJBZGRyICAgRGF0YSBCbG9jayBBZGRyZXNzLg0KPiArICBAcGFyYW1baW5dICBEYlNpemUg ICBEYXRhIEJsb2NrIFNpemUuDQo+ICsNCj4gKyoqLw0KPiArVUlOVDE2DQo+ICtTdGF0aXN0aWNz ICgNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMsDQo+ICsgIElOIFVJTlQ2NCAgICBEYkFkZHIsDQo+ ICsgIElOIFVJTlQxNiAgICBEYlNpemUNCj4gKyAgKQ0KPiArew0KPiArICBQWEVfREJfU1RBVElT VElDUyAgKkRiU3RhdGlzdGljOw0KPiArICBFRklfU1RBVFVTICAgICAgICAgU3RhdHVzOw0KPiAr DQo+ICsgIERiU3RhdGlzdGljID0gKFBYRV9EQl9TVEFUSVNUSUNTICopKFVJTlROKURiQWRkcjsN Cj4gKw0KPiArICBpZiAoRGJTaXplID09IDApIHsNCj4gKyAgICByZXR1cm4gUFhFX1NUQVRDT0RF X1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBEYlN0YXRpc3RpYy0+U3VwcG9ydGVkICA9IDB4 ODAyOw0KPiArICBEYlN0YXRpc3RpYy0+RGF0YVsweDAxXSA9IE5pYy0+UnhGcmFtZTsNCj4gKyAg RGJTdGF0aXN0aWMtPkRhdGFbMHgwQl0gPSBOaWMtPlR4RnJhbWU7DQo+ICsNCj4gKyAgaWYgKE5p Yy0+VXNiRXRoLT5Vc2JFdGhTdGF0aXN0aWNzICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBO aWMtPlVzYkV0aC0+VXNiRXRoU3RhdGlzdGljcyAoTmljLCBEYkFkZHIsIERiU2l6ZSk7DQo+ICsg ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgcmV0dXJuIFBYRV9TVEFURkxB R1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIFBY RV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVHJhbnNsYXRlIGEg bXVsdGljYXN0IElQdjQgb3IgSVB2NiBhZGRyZXNzIHRvIGEgbXVsdGljYXN0IE1BQyBhZGRyZXNz Lg0KPiArDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFu ZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICAgICAgTmljICBBIHBvaW50ZXIg dG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArKiovDQo+ ICtWT0lEDQo+ICtVbmRpTWNhc3RJcDJNYWMgKA0KPiArICBJTiBPVVQgIFBYRV9DREIgICAqQ2Ri LA0KPiArICBJTiAgICAgIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgUFhFX0NQ Ql9NQ0FTVF9JUF9UT19NQUMgICpDcGI7DQo+ICsgIFBYRV9EQl9NQ0FTVF9JUF9UT19NQUMgICAq RGI7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAqVG1wOw0KPiArICBFRklfU1RBVFVT ICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcENvZGUgIT0gUFhF X09QQ09ERV9NQ0FTVF9JUF9UT19NQUMpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQ WEVfU1RBVENPREVfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQ WEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4 ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkNQQnNp emUgIT0gc2l6ZW9mIChQWEVfQ1BCX01DQVNUX0lQX1RPX01BQykpIHx8DQo+ICsgICAgICAoQ2Ri LT5EQnNpemUgIT0gc2l6ZW9mIChQWEVfREJfTUNBU1RfSVBfVE9fTUFDKSkpDQo+ICsgIHsNCj4g KyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsg ICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgcmV0 dXJuOw0KPiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFH U19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RF X1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5TdGF0ZSAhPSBQWEVfU1RBVEZM QUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhF X1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9T VEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4g KyAgQ3BiID0gKFBYRV9DUEJfTUNBU1RfSVBfVE9fTUFDICopKFVJTlROKUNkYi0+Q1BCYWRkcjsN Cj4gKyAgRGIgID0gKFBYRV9EQl9NQ0FTVF9JUF9UT19NQUMgKikoVUlOVE4pQ2RiLT5EQmFkZHI7 DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wRmxhZ3MgJiBQWEVfT1BGTEFHU19NQ0FTVF9JUFY2X1RP X01BQykgIT0gMCkgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01N QU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9VTlNVUFBP UlRFRDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBUbXAgPSAoVUlOVDggKiko JkNwYi0+SVAuSVB2NCk7DQo+ICsNCj4gKyAgaWYgKChUbXBbMF0gJiAweEYwKSAhPSAweEUwKSB7 DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0K PiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ1BCOw0KPiArICB9 DQo+ICsNCj4gKyAgRGItPk1BQ1swXSA9IDB4MDE7DQo+ICsgIERiLT5NQUNbMV0gPSAweDAwOw0K PiArICBEYi0+TUFDWzJdID0gMHg1RTsNCj4gKyAgRGItPk1BQ1szXSA9IFRtcFsxXSAmIDB4N0Y7 DQo+ICsgIERiLT5NQUNbNF0gPSBUbXBbMl07DQo+ICsgIERiLT5NQUNbNV0gPSBUbXBbM107DQo+ ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlNY2FzdElwMk1h YyAhPSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNi RXRoVW5kaU1jYXN0SXAyTWFjIChDZGIsIE5pYyk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRf RkFJTEVEOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBj b21tYW5kIGlzIHVzZWQgdG8gcmVhZCBhbmQgd3JpdGUgKGlmIHN1cHBvcnRlZCBieSBOSUMgSC9X KQ0KPiArICBub252b2xhdGlsZSBzdG9yYWdlIG9uIHRoZSBOSUMuDQo+ICsNCj4gKyAgQHBhcmFt W2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4g KyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNv bnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtVbmRpTnZEYXRhICgNCj4g KyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0K PiArew0KPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ICsNCj4gKyAgQ2RiLT5TdGF0Q29kZSA9 IFBYRV9TVEFUQ09ERV9VTlNVUFBPUlRFRDsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhV bmRpLlVzYkV0aFVuZGlOdkRhdGEgIT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNi RXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlOdkRhdGEgKENkYiwgTmljKTsNCj4gKyAgICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFU RkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgIENkYi0+U3Rh dEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAgICAgQ2RiLT5T dGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30N Cj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCByZXR1cm5zIHRoZSBjdXJyZW50IGludGVy cnVwdCBzdGF0dXMgYW5kL29yIHRoZQ0KPiArICB0cmFuc21pdHRlZCBidWZmZXIgYWRkcmVzc2Vz IGFuZCB0aGUgY3VycmVudCBtZWRpYSBzdGF0dXMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2Ri ICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFt W2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIg ZGF0YS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtVbmRpR2V0U3RhdHVzICgNCj4gKyAgSU4g IFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0K PiArICBQWEVfREJfR0VUX1NUQVRVUyAgKkRiOw0KPiArICBQWEVfREJfR0VUX1NUQVRVUyAgVG1w R2V0U3RhdHVzOw0KPiArICBVSU5UMTYgICAgICAgICAgICAgTnVtRW50cmllczsNCj4gKyAgVUlO VE4gICAgICAgICAgICAgIEluZGV4Ow0KPiArICBFRklfU1RBVFVTICAgICAgICAgU3RhdHVzOw0K PiArDQo+ICsgIGlmICgoQ2RiLT5PcENvZGUgIT0gUFhFX09QQ09ERV9HRVRfU1RBVFVTKSB8fA0K PiArICAgICAgKENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ ICsgICAgICAoQ2RiLT5TdGF0RmxhZ3MgIT0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0K PiArICAgICAgKENkYi0+SUZudW0gPj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwg OCkpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJzaXplICE9IFBYRV9DUEJTSVpFX05PVF9VU0VEKSB8 fA0KPiArICAgICAgKENkYi0+Q1BCYWRkciAhPSBQWEVfQ1BCQUREUl9OT1RfVVNFRCkpDQo+ICsg IHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7 DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsg ICAgcmV0dXJuOw0KPiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NU QVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NU QVRDT0RFX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5TdGF0ZSAhPSBQWEVf U1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KPiArICAgIENkYi0+U3RhdENvZGUg ID0gUFhFX1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9 IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ ICsNCj4gKyAgVG1wR2V0U3RhdHVzLlJ4RnJhbWVMZW4gPSAwOw0KPiArICBUbXBHZXRTdGF0dXMu cmVzZXJ2ZWQgICA9IDA7DQo+ICsgIERiICAgICAgICAgICAgICAgICAgICAgID0gKFBYRV9EQl9H RVRfU1RBVFVTICopKFVJTlROKUNkYi0+REJhZGRyOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5EQnNp emUgPiAwKSAmJiAoQ2RiLT5EQnNpemUgPCBzaXplb2YgKFVJTlQzMikgKiAyKSkgew0KPiArICAg IENvcHlNZW0gKERiLCAmVG1wR2V0U3RhdHVzLCBDZGItPkRCc2l6ZSk7DQo+ICsgIH0gZWxzZSB7 DQo+ICsgICAgQ29weU1lbSAoRGIsICZUbXBHZXRTdGF0dXMsIHNpemVvZiAoVUlOVDMyKSAqIDIp Ow0KPiArICB9DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wRmxhZ3MgJiBQWEVfT1BGTEFHU19HRVRf VFJBTlNNSVRURURfQlVGRkVSUykgIT0gMCkgew0KPiArICAgIGlmIChDZGItPkRCc2l6ZSA9PSAw KSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlM RUQ7DQo+ICsgICAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsN Cj4gKyAgICAgIHJldHVybjsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBOdW1FbnRyaWVzICA9IENk Yi0+REJzaXplIC0gc2l6ZW9mIChVSU5UNjQpOw0KPiArICAgIENkYi0+REJzaXplID0gc2l6ZW9m IChVSU5UMzIpICogMjsNCj4gKw0KPiArICAgIGZvciAoSW5kZXggPSAwOyBOdW1FbnRyaWVzID49 IHNpemVvZiAoVUlOVDY0KTsgSW5kZXgrKywgTnVtRW50cmllcyAtPSBzaXplb2YgKFVJTlQ2NCkp IHsNCj4gKyAgICAgIGlmIChOaWMtPlR4QnVmZmVyQ291bnQgPiAwKSB7DQo+ICsgICAgICAgIE5p Yy0+VHhCdWZmZXJDb3VudC0tOw0KPiArICAgICAgICBEYi0+VHhCdWZmZXJbSW5kZXhdID0gTmlj LT5NZWRpYUhlYWRlcltOaWMtPlR4QnVmZmVyQ291bnRdOw0KPiArICAgICAgfQ0KPiArICAgIH0N Cj4gKyAgfQ0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcEZsYWdzICYgUFhFX09QRkxBR1NfR0VUX0lO VEVSUlVQVF9TVEFUVVMpICE9IDApIHsNCj4gKyAgICBpZiAoTmljLT5SZWNlaXZlU3RhdHVzICE9 IDApIHsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdzIHw9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRV U19SRUNFSVZFOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgoTmljLT5SZXF1ZXN0 LlJlcXVlc3QgPT0gVVNCX0NEQ19ORVRXT1JLX0NPTk5FQ1RJT04pICYmIChOaWMtPlJlcXVlc3Qu VmFsdWUgPT0gTkVUV09SS19ESVNDT05ORUNUKSkgew0KPiArICAgIE5pYy0+Q2FibGVEZXRlY3Qg PSAwOw0KPiArICB9IGVsc2UgaWYgKChOaWMtPlJlcXVlc3QuUmVxdWVzdCA9PSBVU0JfQ0RDX05F VFdPUktfQ09OTkVDVElPTikgJiYgKE5pYy0+UmVxdWVzdC5WYWx1ZSA9PSBORVRXT1JLX0NPTk5F Q1RFRCkpIHsNCj4gKyAgICBOaWMtPkNhYmxlRGV0ZWN0ID0gMTsNCj4gKyAgfQ0KPiArDQo+ICsg IGlmICgoQ2RiLT5PcEZsYWdzICYgUFhFX09QRkxBR1NfR0VUX01FRElBX1NUQVRVUykgIT0gMCkg ew0KPiArICAgIGlmIChOaWMtPkNhYmxlRGV0ZWN0ID09IDApIHsNCj4gKyAgICAgIENkYi0+U3Rh dEZsYWdzIHw9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRVU19OT19NRURJQTsNCj4gKyAgICB9DQo+ ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaUdl dFN0YXR1cyAhPSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVu ZGkuVXNiRXRoVW5kaUdldFN0YXR1cyAoQ2RiLCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01N QU5EX0ZBSUxFRDsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRo aXMgY29tbWFuZCBpcyB1c2VkIHRvIGZpbGwgdGhlIG1lZGlhIGhlYWRlcihzKSBpbiB0cmFuc21p dCBwYWNrZXQocykuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhl IGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50 ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArKiov DQo+ICtWT0lEDQo+ICtVbmRpRmlsbEhlYWRlciAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwN Cj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgUFhFX0NQQl9GSUxM X0hFQURFUiAgICAgICAgICAgICAqQ3BiRmlsbEhlYWRlcjsNCj4gKyAgUFhFX0NQQl9GSUxMX0hF QURFUl9GUkFHTUVOVEVEICAqQ3BiRmlsbDsNCj4gKyAgRXRoZXJuZXRIZWFkZXIgICAgICAgICAg ICAgICAgICAqTWFjSGVhZGVyOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAg IEluZGV4Ow0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4g Kw0KPiArICBpZiAoKENkYi0+T3BDb2RlICE9IFBYRV9PUENPREVfRklMTF9IRUFERVIpIHx8DQo+ ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENPREVfSU5JVElBTElaRSkgfHwNCj4g KyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4 KSkgfHwNCj4gKyAgICAgIChDZGItPkNQQnNpemUgIT0gc2l6ZW9mIChQWEVfQ1BCX0ZJTExfSEVB REVSX0ZSQUdNRU5URUQpKSB8fA0KPiArICAgICAgKENkYi0+REJzaXplICE9IFBYRV9EQlNJWkVf Tk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5EQmFkZHIgIT0gUFhFX0RCQUREUl9OT1RfVVNF RCkpDQo+ICsgIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFO RF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9D REI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+U3RhdEZsYWdz ID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAgIENkYi0+U3RhdENvZGUg ID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5TdGF0 ZSAhPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KPiArICAgIENkYi0+ U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCj4gKyAgICBDZGItPlN0 YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgcmV0dXJuOw0K PiArICB9DQo+ICsNCj4gKyAgaWYgKENkYi0+Q1BCc2l6ZSA9PSBQWEVfQ1BCU0laRV9OT1RfVVNF RCkgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxF RDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4g KyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoKENkYi0+T3BGbGFncyAmIFBYRV9P UEZMQUdTX0ZJTExfSEVBREVSX0ZSQUdNRU5URUQpICE9IDApIHsNCj4gKyAgICBDcGJGaWxsID0g KFBYRV9DUEJfRklMTF9IRUFERVJfRlJBR01FTlRFRCAqKShVSU5UTilDZGItPkNQQmFkZHI7DQo+ ICsNCj4gKyAgICBpZiAoKENwYkZpbGwtPkZyYWdDbnQgPT0gMCkgfHwgKENwYkZpbGwtPkZyYWdE ZXNjWzBdLkZyYWdMZW4gPCBQWEVfTUFDX0hFQURFUl9MRU5fRVRIRVIpKSB7DQo+ICsgICAgICBD ZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgICBD ZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICAgIHJldHVy bjsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBNYWNIZWFkZXIgICAgICAgICAgID0gKEV0aGVybmV0 SGVhZGVyICopKFVJTlROKUNwYkZpbGwtPkZyYWdEZXNjWzBdLkZyYWdBZGRyOw0KPiArICAgIE1h Y0hlYWRlci0+UHJvdG9jb2wgPSBDcGJGaWxsLT5Qcm90b2NvbDsNCj4gKw0KPiArICAgIGZvciAo SW5kZXggPSAwOyBJbmRleCA8IFBYRV9IV0FERFJfTEVOX0VUSEVSOyBJbmRleCsrKSB7DQo+ICsg ICAgICBNYWNIZWFkZXItPkRlc3RBZGRyW0luZGV4XSA9IENwYkZpbGwtPkRlc3RBZGRyW0luZGV4 XTsNCj4gKyAgICAgIE1hY0hlYWRlci0+U3JjQWRkcltJbmRleF0gID0gQ3BiRmlsbC0+U3JjQWRk cltJbmRleF07DQo+ICsgICAgfQ0KPiArICB9IGVsc2Ugew0KPiArICAgIENwYkZpbGxIZWFkZXIg PSAoUFhFX0NQQl9GSUxMX0hFQURFUiAqKShVSU5UTilDZGItPkNQQmFkZHI7DQo+ICsNCj4gKyAg ICBNYWNIZWFkZXIgICAgICAgICAgID0gKEV0aGVybmV0SGVhZGVyICopKFVJTlROKUNwYkZpbGxI ZWFkZXItPk1lZGlhSGVhZGVyOw0KPiArICAgIE1hY0hlYWRlci0+UHJvdG9jb2wgPSBDcGJGaWxs SGVhZGVyLT5Qcm90b2NvbDsNCj4gKw0KPiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFBY RV9IV0FERFJfTEVOX0VUSEVSOyBJbmRleCsrKSB7DQo+ICsgICAgICBNYWNIZWFkZXItPkRlc3RB ZGRyW0luZGV4XSA9IENwYkZpbGxIZWFkZXItPkRlc3RBZGRyW0luZGV4XTsNCj4gKyAgICAgIE1h Y0hlYWRlci0+U3JjQWRkcltJbmRleF0gID0gQ3BiRmlsbEhlYWRlci0+U3JjQWRkcltJbmRleF07 DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRp LlVzYkV0aFVuZGlGaWxsSGVhZGVyICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBOaWMtPlVz YkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpRmlsbEhlYWRlciAoQ2RiLCBOaWMpOw0KPiArICAg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhF X1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgIFRoZSBUcmFuc21pdCBjb21tYW5kIGlzIHVzZWQgdG8gcGxhY2UgYSBwYWNr ZXQgaW50byB0aGUgdHJhbnNtaXQgcXVldWUuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBB IHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2lu XSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0 YS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtVbmRpVHJhbnNtaXQgKA0KPiArICBJTiAgUFhF X0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsg IEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gKw0KPiArICBpZiAoKENkYi0+T3BDb2RlICE9IFBYRV9P UENPREVfVFJBTlNNSVQpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENP REVfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZM QUdTX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZjbnQg fCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkNQQnNpemUgIT0gc2l6 ZW9mIChQWEVfQ1BCX1RSQU5TTUlUKSkgfHwNCj4gKyAgICAgIChDZGItPkRCc2l6ZSAhPSBQWEVf REJTSVpFX05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+REJhZGRyICE9IFBYRV9EQkFERFJf Tk9UX1VTRUQpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdT X0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lO VkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBDZGItPlN0 YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCj4gKyAgICBDZGItPlN0 YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5p Yy0+U3RhdGUgIT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfSU5JVElBTElaRUQpIHsNCj4gKyAg ICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAg Q2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfTk9UX0lOSVRJQUxJWkVEOw0KPiArICAgIHJl dHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChDZGItPkNQQnNpemUgPT0gUFhFX0NQQlNJWkVf Tk9UX1VTRUQpIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFO RF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9D REI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5V c2JFdGhVbmRpLlVzYkV0aFVuZGlUcmFuc21pdCAhPSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0g TmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVRyYW5zbWl0IChDZGIsIE5pYyk7DQo+ ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3Mg PSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0NCj4gKw0KPiArICAgIHJl dHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIENkYi0+U3RhdENvZGUgPSBUcmFuc21pdCAoQ2RiLCBO aWMsIENkYi0+Q1BCYWRkciwgQ2RiLT5PcEZsYWdzKTsNCj4gKw0KPiArICBpZiAoQ2RiLT5TdGF0 Q29kZSAhPSBQWEVfU1RBVENPREVfU1VDQ0VTUykgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0g UFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioN Cj4gKyAgVXNlIFVTQiBFdGhlcm5ldCBQcm90b2NvbCBCdWxrIG91dCBjb21tYW5kIHRvIHRyYW5z bWl0IGRhdGEuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIENkYiAgICAgIEEgcG9pbnRlciB0 byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW4sIG91dF0gTmlj ICAgICAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEu DQo+ICsgIEBwYXJhbVtpbl0gICAgICBDcGJBZGRyICBDb21tYW5kIFBhcmFtZXRlciBCbG9jayBB ZGRyZXNzLg0KPiArICBAcGFyYW1baW5dICAgICAgT3BGbGFncyAgT3BlcmF0aW9uIEZsYWdzLg0K PiArDQo+ICsqKi8NCj4gK1VJTlQxNg0KPiArVHJhbnNtaXQgKA0KPiArICBJTiAgICAgIFBYRV9D REIgICAqQ2RiLA0KPiArICBJTiBPVVQgIE5JQ19EQVRBICAqTmljLA0KPiArICBJTiAgICAgIFVJ TlQ2NCAgICBDcGJBZGRyLA0KPiArICBJTiAgICAgIFVJTlQxNiAgICBPcEZsYWdzDQo+ICsgICkN Cj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgU3RhdHVzOw0KPiArICBQWEVfQ1BCX1RSQU5T TUlUICAqQ3BiOw0KPiArICBVSU5UNjQgICAgICAgICAgICBCdWxrT3V0RGF0YTsNCj4gKyAgVUlO VE4gICAgICAgICAgICAgRGF0YUxlbmd0aDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgVHJhbnNt aXRMZW5ndGg7DQo+ICsgIFVJTlROICAgICAgICAgICAgIE1hcDsNCj4gKyAgVUlOVDMyICAgICAg ICAgICAgQ291bnRlcjsNCj4gKyAgVUlOVDE2ICAgICAgICAgICAgU3RhdENvZGU7DQo+ICsNCj4g KyAgQnVsa091dERhdGEgPSAwOw0KPiArICBDb3VudGVyICAgICA9IDA7DQo+ICsgIENwYiAgICAg ICAgID0gKFBYRV9DUEJfVFJBTlNNSVQgKikoVUlOVE4pQ3BiQWRkcjsNCj4gKw0KPiArICBpZiAo TmljLT5DYW5UcmFuc21pdCkgew0KPiArICAgIHJldHVybiBQWEVfU1RBVENPREVfQlVTWTsNCj4g KyAgfQ0KPiArDQo+ICsgIE5pYy0+Q2FuVHJhbnNtaXQgPSBUUlVFOw0KPiArDQo+ICsgIGlmICgo T3BGbGFncyAmIFBYRV9PUEZMQUdTX1RSQU5TTUlUX0ZSQUdNRU5URUQpICE9IDApIHsNCj4gKyAg ICByZXR1cm4gUFhFX1NUQVRDT0RFX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsNCj4g KyAgTWFwID0gTWFwSXQgKA0KPiArICAgICAgICAgIE5pYywNCj4gKyAgICAgICAgICBDcGItPkZy YW1lQWRkciwNCj4gKyAgICAgICAgICBDcGItPkRhdGFMZW4gKyAoVUlOVDMyKUNwYi0+TWVkaWFo ZWFkZXJMZW4sDQo+ICsgICAgICAgICAgVE9fREVWSUNFLA0KPiArICAgICAgICAgIChVSU5UNjQp KFVJTlROKSZCdWxrT3V0RGF0YQ0KPiArICAgICAgICAgICk7DQo+ICsNCj4gKyAgaWYgKE1hcCAh PSAwKSB7DQo+ICsgICAgTmljLT5DYW5UcmFuc21pdCA9IEZBTFNFOw0KPiArICAgIHJldHVybiBQ WEVfU1RBVENPREVfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmlj LT5UeEJ1ZmZlckNvdW50IDwgTUFYX1hNSVRfQlVGRkVSUykgew0KPiArICAgIE5pYy0+TWVkaWFI ZWFkZXJbTmljLT5UeEJ1ZmZlckNvdW50XSA9IENwYi0+RnJhbWVBZGRyOw0KPiArICAgIE5pYy0+ VHhCdWZmZXJDb3VudCsrOw0KPiArICB9DQo+ICsNCj4gKyAgRGF0YUxlbmd0aCA9IChVSU5UTiko Q3BiLT5EYXRhTGVuICsgKFVJTlQzMilDcGItPk1lZGlhaGVhZGVyTGVuKTsNCj4gKw0KPiArICB3 aGlsZSAoMSkgew0KPiArICAgIGlmIChDb3VudGVyID49IDMpIHsNCj4gKyAgICAgIFN0YXRDb2Rl ID0gUFhFX1NUQVRDT0RFX0JVU1k7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICB9DQo+ICsNCj4g KyAgICBUcmFuc21pdExlbmd0aCA9IERhdGFMZW5ndGg7DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBO aWMtPlVzYkV0aC0+VXNiRXRoVHJhbnNtaXQgKENkYiwgTmljLT5Vc2JFdGgsIChWT0lEICopKFVJ TlROKUJ1bGtPdXREYXRhLCAmVHJhbnNtaXRMZW5ndGgpOw0KPiArICAgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gKyAgICAgIFN0YXRDb2RlID0gIFBYRV9TVEFURkxBR1NfQ09NTUFORF9G QUlMRUQ7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKFN0YXR1cyA9PSBFRklfSU5WQUxJRF9Q QVJBTUVURVIpIHsNCj4gKyAgICAgIFN0YXRDb2RlID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfUEFS QU1FVEVSOw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKFN0YXR1 cyA9PSBFRklfREVWSUNFX0VSUk9SKSB7DQo+ICsgICAgICBTdGF0Q29kZSA9IFBYRV9TVEFUQ09E RV9ERVZJQ0VfRkFJTFVSRTsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIH0NCj4gKw0KPiArICAg IGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBOaWMtPlR4RnJhbWUrKzsNCj4g KyAgICAgIFN0YXRDb2RlID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsgICAgICBicmVhazsN Cj4gKyAgICB9DQo+ICsNCj4gKyAgICBDb3VudGVyKys7DQo+ICsgIH0NCj4gKw0KPiArICBVbk1h cEl0ICgNCj4gKyAgICBOaWMsDQo+ICsgICAgQ3BiLT5GcmFtZUFkZHIsDQo+ICsgICAgQ3BiLT5E YXRhTGVuICsgKFVJTlQzMilDcGItPk1lZGlhaGVhZGVyTGVuLA0KPiArICAgIFRPX0RFVklDRSwN Cj4gKyAgICBCdWxrT3V0RGF0YQ0KPiArICAgICk7DQo+ICsNCj4gKyAgTmljLT5DYW5UcmFuc21p dCA9IEZBTFNFOw0KPiArDQo+ICsgIHJldHVybiBTdGF0Q29kZTsNCj4gK30NCj4gKw0KPiArLyoq DQo+ICsgIFdoZW4gdGhlIG5ldHdvcmsgYWRhcHRlciBoYXMgcmVjZWl2ZWQgYSBmcmFtZSwgdGhp cyBjb21tYW5kIGlzIHVzZWQNCj4gKyAgdG8gY29weSB0aGUgZnJhbWUgaW50byBkcml2ZXIvYXBw bGljYXRpb24gc3RvcmFnZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0 byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEg cG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlSZWNlaXZlICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2Ri LA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVT ICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RFX1JFQ0VJ VkUpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENPREVfSU5JVElBTEla RSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJ WkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNu dEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkNQQnNpemUgIT0gc2l6ZW9mIChQWEVfQ1BC X1JFQ0VJVkUpKSB8fA0KPiArICAgICAgKENkYi0+REJzaXplICE9IHNpemVvZiAoUFhFX0RCX1JF Q0VJVkUpKSB8fA0KPiArICAgICAgKENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19OT1RfVVNF RCkpDQo+ICsgIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFO RF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9D REI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+U3RhdEZsYWdz ID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAgIENkYi0+U3RhdENvZGUg ID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5TdGF0 ZSAhPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KPiArICAgIENkYi0+ U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0 YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfSU5JVElBTElaRUQ7DQo+ICsgICAgcmV0dXJuOw0K PiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlS ZWNlaXZlICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5k aS5Vc2JFdGhVbmRpUmVjZWl2ZSAoQ2RiLCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5E X0ZBSUxFRDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiAr ICBDZGItPlN0YXRDb2RlID0gUmVjZWl2ZSAoQ2RiLCBOaWMsIENkYi0+Q1BCYWRkciwgQ2RiLT5E QmFkZHIpOw0KPiArDQo+ICsgIGlmIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9TVUND RVNTKSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJ TEVEOw0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBVc2UgVVNCIEV0aGVybmV0IFBy b3RvY29sIEJ1bGsgaW4gY29tbWFuZCB0byByZWNlaXZlIGRhdGEuDQo+ICsNCj4gKyAgQHBhcmFt W2luXSAgICAgIENkYiAgICAgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJs b2NrLg0KPiArICBAcGFyYW1baW4sIG91dF0gTmljICAgICAgQSBwb2ludGVyIHRvIHRoZSBOZXR3 b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsgIEBwYXJhbVtpbl0gICAgICBDcGJB ZGRyICBDb21tYW5kIFBhcmFtZXRlciBCbG9jayBBZGRyZXNzLg0KPiArICBAcGFyYW1baW4sIG91 dF0gRGJBZGRyICAgRGF0YSBCbG9jayBBZGRyZXNzLg0KPiArDQo+ICsqKi8NCj4gK1VJTlQxNg0K PiArUmVjZWl2ZSAoDQo+ICsgIElOIFBYRV9DREIgICAgICAgKkNkYiwNCj4gKyAgSU4gT1VUIE5J Q19EQVRBICAqTmljLA0KPiArICBJTiBVSU5UNjQgICAgICAgIENwYkFkZHIsDQo+ICsgIElOIE9V VCBVSU5UNjQgICAgRGJBZGRyDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICBT dGF0dXM7DQo+ICsgIFVJTlROICAgICAgICAgICAgSW5kZXg7DQo+ICsgIFBYRV9GUkFNRV9UWVBF ICAgRnJhbWVUeXBlOw0KPiArICBQWEVfQ1BCX1JFQ0VJVkUgICpDcGI7DQo+ICsgIFBYRV9EQl9S RUNFSVZFICAgKkRiOw0KPiArICBOSUNfREVWSUNFICAgICAgICpOaWNEZXZpY2U7DQo+ICsgIFVJ TlQ4ICAgICAgICAgICAgKkJ1bGtJbkRhdGE7DQo+ICsgIFVJTlROICAgICAgICAgICAgRGF0YUxl bmd0aDsNCj4gKyAgRXRoZXJuZXRIZWFkZXIgICAqSGVhZGVyOw0KPiArICBFRklfVFBMICAgICAg ICAgIE9yaWdpbmFsVHBsOw0KPiArDQo+ICsgIEZyYW1lVHlwZSAgPSBQWEVfRlJBTUVfVFlQRV9O T05FOw0KPiArICBOaWNEZXZpY2UgID0gVU5ESV9ERVZfRlJPTV9OSUMgKE5pYyk7DQo+ICsgIEJ1 bGtJbkRhdGEgPSBOaWNEZXZpY2UtPlJlY2VpdmVCdWZmZXI7DQo+ICsgIERhdGFMZW5ndGggPSAo VUlOVE4pTmljLT5NYXhTZWdtZW50U2l6ZTsNCj4gKyAgQ3BiICAgICAgICA9IChQWEVfQ1BCX1JF Q0VJVkUgKikoVUlOVE4pQ3BiQWRkcjsNCj4gKyAgRGIgICAgICAgICA9IChQWEVfREJfUkVDRUlW RSAqKShVSU5UTilEYkFkZHI7DQo+ICsNCj4gKyAgaWYgKCFCdWxrSW5EYXRhKSB7DQo+ICsgICAg cmV0dXJuIFBYRV9TVEFUQ09ERV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgfQ0KPiArDQo+ICsg IGlmICgoTmljLT5SYXRlTGltaXRpbmdDcmVkaXRDb3VudCA9PSAwKSAmJiAoTmljLT5SYXRlTGlt aXRpbmdFbmFibGUgPT0gVFJVRSkpIHsNCj4gKyAgICByZXR1cm4gUFhFX1NUQVRDT0RFX05PX0RB VEE7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoUmVjZWl2 ZSAoQ2RiLCBOaWMtPlVzYkV0aCwgKFZPSUQgKilCdWxrSW5EYXRhLCAmRGF0YUxlbmd0aCk7DQo+ ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBOaWMtPlJlY2VpdmVTdGF0dXMg PSAwOw0KPiArICAgIGlmIChOaWMtPlJhdGVMaW1pdGluZ0VuYWJsZSA9PSBUUlVFKSB7DQo+ICsg ICAgICBPcmlnaW5hbFRwbCA9IGdCUy0+UmFpc2VUUEwgKFRQTF9OT1RJRlkpOw0KPiArICAgICAg aWYgKE5pYy0+UmF0ZUxpbWl0aW5nQ3JlZGl0Q291bnQgIT0gMCkgew0KPiArICAgICAgICBOaWMt PlJhdGVMaW1pdGluZ0NyZWRpdENvdW50LS07DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIGdC Uy0+UmVzdG9yZVRQTCAoT3JpZ2luYWxUcGwpOw0KPiArICAgIH0NCj4gKw0KPiArICAgIHJldHVy biBQWEVfU1RBVENPREVfTk9fREFUQTsNCj4gKyAgfQ0KPiArDQo+ICsgIE5pYy0+UnhGcmFtZSsr Ow0KPiArDQo+ICsgIGlmIChEYXRhTGVuZ3RoICE9IDApIHsNCj4gKyAgICBpZiAoRGF0YUxlbmd0 aCA+IENwYi0+QnVmZmVyTGVuKSB7DQo+ICsgICAgICBEYXRhTGVuZ3RoID0gKFVJTlROKUNwYi0+ QnVmZmVyTGVuOw0KPiArICAgIH0NCj4gKw0KPiArICAgIENvcHlNZW0gKChVSU5UOCAqKShVSU5U TilDcGItPkJ1ZmZlckFkZHIsIChVSU5UOCAqKUJ1bGtJbkRhdGEsIERhdGFMZW5ndGgpOw0KPiAr DQo+ICsgICAgSGVhZGVyID0gKEV0aGVybmV0SGVhZGVyICopQnVsa0luRGF0YTsNCj4gKw0KPiAr ICAgIERiLT5GcmFtZUxlbiAgICAgICA9IChVSU5UMzIpRGF0YUxlbmd0aDsNCj4gKyAgICBEYi0+ TWVkaWFIZWFkZXJMZW4gPSBQWEVfTUFDX0hFQURFUl9MRU5fRVRIRVI7DQo+ICsNCj4gKyAgICBm b3IgKEluZGV4ID0gMDsgSW5kZXggPCBQWEVfSFdBRERSX0xFTl9FVEhFUjsgSW5kZXgrKykgew0K PiArICAgICAgaWYgKEhlYWRlci0+RGVzdEFkZHJbSW5kZXhdICE9IE5pYy0+Q3VycmVudE5vZGVB ZGRyZXNzW0luZGV4XSkgew0KPiArICAgICAgICBicmVhazsNCj4gKyAgICAgIH0NCj4gKyAgICB9 DQo+ICsNCj4gKyAgICBpZiAoSW5kZXggPj0gUFhFX0hXQUREUl9MRU5fRVRIRVIpIHsNCj4gKyAg ICAgIEZyYW1lVHlwZSA9IFBYRV9GUkFNRV9UWVBFX1VOSUNBU1Q7DQo+ICsgICAgfSBlbHNlIHsN Cj4gKyAgICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFBYRV9IV0FERFJfTEVOX0VUSEVSOyBJ bmRleCsrKSB7DQo+ICsgICAgICAgIGlmIChIZWFkZXItPkRlc3RBZGRyW0luZGV4XSAhPSBOaWMt PkJyb2FkY2FzdE5vZGVBZGRyZXNzW0luZGV4XSkgew0KPiArICAgICAgICAgIGJyZWFrOw0KPiAr ICAgICAgICB9DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIGlmIChJbmRleCA+PSBQWEVfSFdB RERSX0xFTl9FVEhFUikgew0KPiArICAgICAgICBGcmFtZVR5cGUgPSBQWEVfRlJBTUVfVFlQRV9C Uk9BRENBU1Q7DQo+ICsgICAgICB9IGVsc2Ugew0KPiArICAgICAgICBpZiAoKEhlYWRlci0+RGVz dEFkZHJbMF0gJiAxKSA9PSAxKSB7DQo+ICsgICAgICAgICAgRnJhbWVUeXBlID0gUFhFX0ZSQU1F X1RZUEVfRklMVEVSRURfTVVMVElDQVNUOw0KPiArICAgICAgICB9IGVsc2Ugew0KPiArICAgICAg ICAgIEZyYW1lVHlwZSA9IFBYRV9GUkFNRV9UWVBFX1BST01JU0NVT1VTOw0KPiArICAgICAgICB9 DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgRGItPlR5cGUgICAgID0gRnJhbWVU eXBlOw0KPiArICAgIERiLT5Qcm90b2NvbCA9IEhlYWRlci0+UHJvdG9jb2w7DQo+ICsNCj4gKyAg ICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQWEVfSFdBRERSX0xFTl9FVEhFUjsgSW5kZXgrKykg ew0KPiArICAgICAgRGItPlNyY0FkZHJbSW5kZXhdICA9IEhlYWRlci0+U3JjQWRkcltJbmRleF07 DQo+ICsgICAgICBEYi0+RGVzdEFkZHJbSW5kZXhdID0gSGVhZGVyLT5EZXN0QWRkcltJbmRleF07 DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYgKEZyYW1lVHlwZSA9PSBQWEVfRlJBTUVf VFlQRV9OT05FKSB7DQo+ICsgICAgTmljLT5SZWNlaXZlU3RhdHVzID0gMDsNCj4gKyAgfSBlbHNl IHsNCj4gKyAgICBOaWMtPlJlY2VpdmVTdGF0dXMgPSAxOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0 dXJuIFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgRmlsbCBv dXQgUFhFIFNXIFVOREkgc3RydWN0dXJlLg0KPiArDQo+ICsgIEBwYXJhbVtvdXRdICBQeGVTdyAg ICAgIEEgcG9pbnRlciB0byB0aGUgUFhFIFNXIFVOREkgc3RydWN0dXJlLg0KPiArDQo+ICsqKi8N Cj4gK1ZPSUQNCj4gK1B4ZVN0cnVjdEluaXQgKA0KPiArICBPVVQgUFhFX1NXX1VOREkgICpQeGVT dw0KPiArICApDQo+ICt7DQo+ICsgIFB4ZVN3LT5TaWduYXR1cmUgPSBQWEVfUk9NSURfU0lHTkFU VVJFOw0KPiArICBQeGVTdy0+TGVuICAgICAgID0gKFVJTlQ4KXNpemVvZiAoUFhFX1NXX1VOREkp Ow0KPiArICBQeGVTdy0+RnVkZ2UgICAgID0gMDsNCj4gKyAgUHhlU3ctPklGY250ICAgICA9IDA7 DQo+ICsgIFB4ZVN3LT5JRmNudEV4dCAgPSAwOw0KPiArICBQeGVTdy0+UmV2ICAgICAgID0gUFhF X1JPTUlEX1JFVjsNCj4gKyAgUHhlU3ctPk1ham9yVmVyICA9IFBYRV9ST01JRF9NQUpPUlZFUjsN Cj4gKyAgUHhlU3ctPk1pbm9yVmVyICA9IFBYRV9ST01JRF9NSU5PUlZFUjsNCj4gKyAgUHhlU3ct PnJlc2VydmVkMSA9IDA7DQo+ICsNCj4gKyAgUHhlU3ctPkltcGxlbWVudGF0aW9uID0gUFhFX1JP TUlEX0lNUF9TV19WSVJUX0FERFIgfA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICBQWEVf Uk9NSURfSU1QX0ZSQUdfU1VQUE9SVEVEIHwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg UFhFX1JPTUlEX0lNUF9DTURfTElOS19TVVBQT1JURUQgfA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICBQWEVfUk9NSURfSU1QX1NUQVRJT05fQUREUl9TRVRUQUJMRSB8DQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgIFBYRV9ST01JRF9JTVBfUFJPTUlTQ1VPVVNfTVVMVElDQVNUX1JY X1NVUFBPUlRFRCB8DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIFBYRV9ST01JRF9JTVBf UFJPTUlTQ1VPVVNfUlhfU1VQUE9SVEVEIHwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg UFhFX1JPTUlEX0lNUF9CUk9BRENBU1RfUlhfU1VQUE9SVEVEIHwNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgUFhFX1JPTUlEX0lNUF9GSUxURVJFRF9NVUxUSUNBU1RfUlhfU1VQUE9SVEVE Ow0KPiArDQo+ICsgIFB4ZVN3LT5FbnRyeVBvaW50ICAgPSAoVUlOVDY0KShVSU5UTilVbmRpQXBp RW50cnk7DQo+ICsgIFB4ZVN3LT5yZXNlcnZlZDJbMF0gPSAwOw0KPiArICBQeGVTdy0+cmVzZXJ2 ZWQyWzFdID0gMDsNCj4gKyAgUHhlU3ctPnJlc2VydmVkMlsyXSA9IDA7DQo+ICsgIFB4ZVN3LT5C dXNDbnQgICAgICAgPSAxOw0KPiArICBQeGVTdy0+QnVzVHlwZVswXSAgID0gUFhFX0JVU1RZUEVf VVNCOw0KPiArICBQeGVTdy0+RnVkZ2UgICAgICAgID0gUHhlU3ctPkZ1ZGdlIC0gQ2FsY3VsYXRl U3VtOCAoKFZPSUQgKilQeGVTdywgUHhlU3ctPkxlbik7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr ICBVcGRhdGUgTklDIG51bWJlci4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgICAgTmljICAgICAg IEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiAr ICBAcGFyYW1baW4sIG91dF0gUHhlU3cgICAgIEEgcG9pbnRlciB0byB0aGUgUFhFIFNXIFVOREkg c3RydWN0dXJlLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VwZGF0ZU5pY051bSAoDQo+ICsg IElOICAgICAgTklDX0RBVEEgICAgICpOaWMsDQo+ICsgIElOIE9VVCAgUFhFX1NXX1VOREkgICpQ eGVTdw0KPiArICApDQo+ICt7DQo+ICsgIFVJTlQxNiAgTmljTnVtOw0KPiArDQo+ICsgIE5pY051 bSA9IChQeGVTdy0+SUZjbnQgfCBQeGVTdy0+SUZjbnRFeHQgPDwgOCk7DQo+ICsNCj4gKyAgaWYg KE5pYyA9PSBOVUxMKSB7DQo+ICsgICAgaWYgKE5pY051bSA+IDApIHsNCj4gKyAgICAgIE5pY051 bS0tOw0KPiArICAgIH0NCj4gKw0KPiArICAgIFB4ZVN3LT5JRmNudCAgICA9IChVSU5UOCkoTmlj TnVtICYgMHhGRik7ICAgICAgICAgIC8vIEdldCBsb3dlciBieXRlDQo+ICsgICAgUHhlU3ctPklG Y250RXh0ID0gKFVJTlQ4KSgoTmljTnVtICYgMHhGRjAwKSA+PiA4KTsgLy8gR2V0IHVwcGVyIGJ5 dGUNCj4gKyAgICBQeGVTdy0+RnVkZ2UgICAgPSAoVUlOVDgpKFB4ZVN3LT5GdWRnZSAtIENhbGN1 bGF0ZVN1bTggKChWT0lEICopUHhlU3csIFB4ZVN3LT5MZW4pKTsNCj4gKyAgICByZXR1cm47DQo+ ICsgIH0NCj4gKw0KPiArICBOaWNOdW0rKzsNCj4gKw0KPiArICBQeGVTdy0+SUZjbnQgICAgPSAo VUlOVDgpKE5pY051bSAmIDB4RkYpOyAgICAgICAgICAvLyBHZXQgbG93ZXIgYnl0ZQ0KPiArICBQ eGVTdy0+SUZjbnRFeHQgPSAoVUlOVDgpKChOaWNOdW0gJiAweEZGMDApID4+IDgpOyAvLyBHZXQg dXBwZXIgYnl0ZQ0KPiArICBQeGVTdy0+RnVkZ2UgICAgPSAoVUlOVDgpKFB4ZVN3LT5GdWRnZSAt IENhbGN1bGF0ZVN1bTggKChWT0lEICopUHhlU3csIFB4ZVN3LT5MZW4pKTsNCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgIFVOREkgQVBJIHRhYmxlIGVudHJ5Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0g IENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsNCj4g KyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVbmRpQXBpRW50cnkgKA0KPiArICBJ TiAgVUlOVDY0ICBDZGINCj4gKyAgKQ0KPiArew0KPiArICBQWEVfQ0RCICAgKkNkYlB0cjsNCj4g KyAgTklDX0RBVEEgICpOaWM7DQo+ICsNCj4gKyAgaWYgKENkYiA9PSAwKSB7DQo+ICsgICAgcmV0 dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgfQ0KPiArDQo+ICsgIENkYlB0ciA9IChQ WEVfQ0RCICopKFVJTlROKUNkYjsNCj4gKyAgTmljICAgID0gJihnTGFuRGV2aWNlTGlzdFtDZGJQ dHItPklGbnVtXS0+TmljSW5mbyk7DQo+ICsgIGdVbmRpQXBpVGFibGVbQ2RiUHRyLT5PcENvZGVd KENkYlB0ciwgTmljKTsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsv KioNCj4gKyAgTWFwIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MgZm9yIERNQS4gVGhpcyBmaWVsZCBj YW4gYmUgc2V0IHRvDQo+ICsgIHplcm8gaWYgdGhlcmUgaXMgbm8gbWFwcGluZyBzZXJ2aWNlLg0K PiArDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBOZXR3 b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsgIEBwYXJhbVtpbl0gIE1lbUFkZHIg ICAgICAgVmlydHVhbCBhZGRyZXNzIHRvIGJlIG1hcHBlZC4NCj4gKyAgQHBhcmFtW2luXSAgU2l6 ZSAgICAgICAgICBTaXplIG9mIG1lbW9yeSB0byBiZSBtYXBwZWQuDQo+ICsgIEBwYXJhbVtpbl0g IERpcmVjdGlvbiAgICAgRGlyZWN0aW9uIG9mIGRhdGEgZmxvdyBmb3IgdGhpcyBtZW1vcnkncyB1 c2FnZToNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHUtPmRldmljZSwgZGV2aWNl LT5jcHUgb3IgYm90aCB3YXlzLg0KPiArICBAcGFyYW1bb3V0XSBNYXBwZWRBZGRyICAgIFBvaW50 ZXIgdG8gcmV0dXJuIHRoZSBtYXBwZWQgZGV2aWNlIGFkZHJlc3MuDQo+ICsNCj4gKyoqLw0KPiAr VUlOVE4NCj4gK01hcEl0ICgNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMsDQo+ICsgIElOIFVJTlQ2 NCAgICBNZW1BZGRyLA0KPiArICBJTiBVSU5UMzIgICAgU2l6ZSwNCj4gKyAgSU4gVUlOVDMyICAg IERpcmVjdGlvbiwNCj4gKyAgT1VUIFVJTlQ2NCAgIE1hcHBlZEFkZHINCj4gKyAgKQ0KPiArew0K PiArICBVSU5UNjQgICpQaHlBZGRyOw0KPiArDQo+ICsgIFBoeUFkZHIgPSAoVUlOVDY0ICopKFVJ TlROKU1hcHBlZEFkZHI7DQo+ICsNCj4gKyAgaWYgKE5pYy0+UHhlU3RhcnQuTWFwX01lbSA9PSAw KSB7DQo+ICsgICAgKlBoeUFkZHIgPSBNZW1BZGRyOw0KPiArICB9IGVsc2Ugew0KPiArICAgICgo dm9pZCAoKikoVUlOVDY0LCBVSU5UNjQsIFVJTlQzMiwgVUlOVDMyLCBVSU5UNjQpKShVSU5UTikg TmljLT5QeGVTdGFydC5NYXBfTWVtKSgNCj4gKyAgTmljLT5QeGVTdGFydC5VbmlxdWVfSUQsDQo+ ICsgIE1lbUFkZHIsDQo+ICsgIFNpemUsDQo+ICsgIERpcmVjdGlvbiwNCj4gKyAgTWFwcGVkQWRk cg0KPiArICApOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIFBYRV9TVEFUQ09ERV9TVUNDRVNT Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVW4tbWFwIHByZXZpb3VzbHkgbWFwcGVkIHZpcnR1 YWwgbWVtb3J5IGFkZHJlc3MuIFRoaXMgZmllbGQgY2FuIGJlIHNldA0KPiArICB0byB6ZXJvIG9u bHkgaWYgdGhlIE1hcF9NZW0oKSBzZXJ2aWNlIGlzIGFsc28gc2V0IHRvIHplcm8uDQo+ICsNCj4g KyAgQHBhcmFtW2luXSAgTmljICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50 ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKyAgQHBhcmFtW2luXSAgTWVtQWRkciAgICAgICBW aXJ0dWFsIGFkZHJlc3MgdG8gYmUgbWFwcGVkLg0KPiArICBAcGFyYW1baW5dICBTaXplICAgICAg ICAgIFNpemUgb2YgbWVtb3J5IHRvIGJlIG1hcHBlZC4NCj4gKyAgQHBhcmFtW2luXSAgRGlyZWN0 aW9uICAgICBEaXJlY3Rpb24gb2YgZGF0YSBmbG93IGZvciB0aGlzIG1lbW9yeSdzIHVzYWdlOg0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdS0+ZGV2aWNlLCBkZXZpY2UtPmNwdSBv ciBib3RoIHdheXMuDQo+ICsgIEBwYXJhbVtpbl0gIE1hcHBlZEFkZHIgICAgUG9pbnRlciB0byBy ZXR1cm4gdGhlIG1hcHBlZCBkZXZpY2UgYWRkcmVzcy4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ ICtVbk1hcEl0ICgNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMsDQo+ICsgIElOIFVJTlQ2NCAgICBN ZW1BZGRyLA0KPiArICBJTiBVSU5UMzIgICAgU2l6ZSwNCj4gKyAgSU4gVUlOVDMyICAgIERpcmVj dGlvbiwNCj4gKyAgSU4gVUlOVDY0ICAgIE1hcHBlZEFkZHINCj4gKyAgKQ0KPiArew0KPiArICBp ZiAoTmljLT5QeGVTdGFydC5Vbk1hcF9NZW0gIT0gMCkgew0KPiArICAgICgodm9pZCAoKikoVUlO VDY0LCBVSU5UNjQsIFVJTlQzMiwgVUlOVDMyLCBVSU5UNjQpKShVSU5UTikgTmljLT5QeGVTdGFy dC5Vbk1hcF9NZW0pKA0KPiArICBOaWMtPlB4ZVN0YXJ0LlVuaXF1ZV9JRCwNCj4gKyAgTWVtQWRk ciwNCj4gKyAgU2l6ZSwNCj4gKyAgRGlyZWN0aW9uLA0KPiArICBNYXBwZWRBZGRyDQo+ICsgICk7 DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm47DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9Vc2JOZXR3 b3JrUGtnL1JlYWRNZS5tZCBiL1VzYk5ldHdvcmtQa2cvUmVhZE1lLm1kDQo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLmNiNzA2ODRmMGINCj4gLS0tIC9kZXYvbnVs bA0KPiArKysgYi9Vc2JOZXR3b3JrUGtnL1JlYWRNZS5tZA0KPiBAQCAtMCwwICsxLDY1IEBADQo+ ICsjIFVzYk5ldHdvcmtQa2cNCj4gKw0KPiArVGhpcyBkb2N1bWVudCBpcyBpbnRlbmQgdG8gcHJv dmlkZSBwYWNrYWdlIGluZm9ybWF0aW9uLCBpbmNsdWRlIHRoZSBpbnRlcmZhY2UgZGV0YWlscy4N Cj4gKw0KPiArIyBJTkRFWA0KPiArICAqIFtJbnRyb2R1Y3Rpb25dKCNpbnRyb2R1Y3Rpb24pDQo+ ICsgICogW0NvbXBvbmVudHNdKCNjb21wb25lbnRzKQ0KPiArICAgICogW1tOZXR3b3JrQ29tbW9u XV0oI25ldHdvcmtjb21tb24pDQo+ICsgICAgKiBbW1VzYkNkY0VjbV1dKCN1c2JjZGNlY20pDQo+ ICsgICAgKiBbW1VzYkNkY05jbV1dKCN1c2JjZGNuY20pDQo+ICsgICAgKiBbW1VzYlJuZGlzXV0o I3VzYnJuZGlzKQ0KPiArDQo+ICsjICBJbnRyb2R1Y3Rpb24NCj4gK1VzYk5ldHdvcmtQa2cgcHJv dmlkZXMgbmV0d29yayBmdW5jdGlvbnMgZm9yIFVTQiBMQU4gZGV2aWNlcy4NCj4gKw0KPiArIyBD b21wb25lbnRzDQo+ICtCZWxvdyBtb2R1bGUgaXMgaW5jbHVkZWQgaW4gdGhpcyBwYWNrYWdlOjxi cj4NCj4gKy0gTmV0d29ya0NvbW1vbg0KPiArLSBVc2JDZGNFY20NCj4gKy0gVXNiQ2RjTmNtDQo+ ICstIFVzYlJuZGlzDQo+ICsNCj4gKyMjIFtOZXR3b3JrQ29tbW9uXQ0KPiArUHJvdmlkZXMgYSBM QU4gZHJpdmVyIGJhc2VkIG9uIFVFRkkgc3BlY2lmaWNhdGlvbihVTkRJKS4gSXQgc3VwcG9ydHMg VVNCIGNvbW11bmljYXRpb24gY2xhc3Mgc3ViY2xhc3MgZGV2aWNlcyBhbmQgVVNCIFJuZGlzIGRl dmljZXMsIGRlcGVuZGluZyBvbiB0aGUgVXNiRXRoZXJuZXRQcm90b2NvbC4NCj4gKw0KPiArIyMg UmVxdWlyZWQgQ29tcG9uZW50cw0KPiArLSBOZXR3b3JrUGtnDQo+ICsNCj4gKyMjIFtVc2JDZGNF Y21dDQo+ICtUaGlzIGRyaXZlciBwcm92aWRlcyBhIGNvbW11bmljYXRpb24gaW50ZXJmYWNlIGZv ciBVU0IgRXRoZXJuZXQgZGV2aWNlcyB0aGF0IGZvbGxvd3MgdGhlIEVDTSBwcm90b2NvbC4gVGhl IGRyaXZlciBpbnN0YWxscyBVc2JFdGhlcm5ldFByb3RvY29sIHdpdGggRUNNIGZ1bmN0aW9ucyB3 aGljaCBhcmUgY29uc3VtZWQgYnkgdGhlIE5ldHdvcmtDb21tb24gZHJpdmVyLg0KPiArDQo+ICtU aGUgZHJpdmVyIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgZm9sbG93aW5nIFVTQiBjbGFzcyBjb2Rl czoNCj4gK3xDbGFzcyBDb2RlfFN1YkNsYXNzIENvZGV8UHJvdG9jb2wgQ29kZXwNCj4gK3w6LS0t LS0tLS06fDotLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tOnwNCj4gK3wweDAyfDB4MDZ8MHgwMHwN Cj4gKw0KPiArIyMgUmVxdWlyZWQgQ29tcG9uZW50cw0KPiArLSBOZXR3b3JrQ29tbW9uDQo+ICst IE1kZU1vZHVsZVBrZyhVU0IgYnVzIGRyaXZlcikNCj4gKw0KPiArIyMgW1VzYkNkY05jbV0NCj4g K1RoaXMgZHJpdmVyIHByb3ZpZGVzIGEgY29tbXVuaWNhdGlvbiBpbnRlcmZhY2UgZm9yIFVTQiBF dGhlcm5ldCBkZXZpY2VzIHRoYXQgZm9sbG93cyB0aGUgTkNNIHByb3RvY29sLiBUaGUgZHJpdmVy IGluc3RhbGxzIFVzYkV0aGVybmV0UHJvdG9jb2wgd2l0aCBOQ00gZnVuY3Rpb25zIHdoaWNoIGFy ZSBjb25zdW1lZCBieSB0aGUgTmV0d29ya0NvbW1vbiBkcml2ZXIuDQo+ICsNCj4gK1RoZSBkcml2 ZXIgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBmb2xsb3dpbmcgVVNCIGNsYXNzIGNvZGVzOg0KPiAr fENsYXNzIENvZGV8U3ViQ2xhc3MgQ29kZXxQcm90b2NvbCBDb2RlfA0KPiArfDotLS0tLS0tLTp8 Oi0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS06fA0KPiArfDB4MDJ8MHgwRHwweDAwfA0KPiArDQo+ ICsjIyBSZXF1aXJlZCBDb21wb25lbnRzDQo+ICstIE5ldHdvcmtDb21tb24NCj4gKy0gTWRlTW9k dWxlUGtnKFVTQiBidXMgZHJpdmVyKQ0KPiArDQo+ICsjIyBbVXNiUm5kaXNdDQo+ICtUaGlzIGRy aXZlciBwcm92aWRlcyBhIGNvbW11bmljYXRpb24gaW50ZXJmYWNlIGZvciBVU0IgRXRoZXJuZXQg ZGV2aWNlcyB0aGF0IGZvbGxvd3MgdGhlIFJORElTIHByb3RvY29sLiBUaGUgZHJpdmVyIGluc3Rh bGxzIFVzYkV0aGVybmV0UHJvdG9jb2wgd2l0aCBSTkRJUyBmdW5jdGlvbnMgd2hpY2ggYXJlIGNv bnN1bWVkIGJ5IHRoZSBOZXR3b3JrQ29tbW9uIGRyaXZlci4NCj4gKw0KPiArVGhlIGRyaXZlciBp cyBjb21wYXRpYmxlIHdpdGggdGhlIGZvbGxvd2luZyBVU0IgY2xhc3MgY29kZXM6DQo+ICt8Q2xh c3MgQ29kZXxTdWJDbGFzcyBDb2RlfFByb3RvY29sIENvZGV8DQo+ICt8Oi0tLS0tLS0tOnw6LS0t LS0tLS0tLS06fDotLS0tLS0tLS0tLTp8DQo+ICt8MHgwMnwweDAyfDB4RkZ8DQo+ICt8MHhFRnww eDA0fDB4MDF8DQo+ICsNCj4gKyMjIFJlcXVpcmVkIENvbXBvbmVudHMNCj4gKy0gTmV0d29ya0Nv bW1vbg0KPiArLSBNZGVNb2R1bGVQa2coVVNCIGJ1cyBkcml2ZXIpDQo+ICsNCj4gZGlmZiAtLWdp dCBhL1VzYk5ldHdvcmtQa2cvVXNiTmV0d29ya1BrZy5jaS55YW1sIGIvVXNiTmV0d29ya1BrZy9V c2JOZXR3b3JrUGtnLmNpLnlhbWwNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAw MDAwMDAwMC4uN2VlMWVmM2NmMA0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL1VzYk5ldHdvcmtQ a2cvVXNiTmV0d29ya1BrZy5jaS55YW1sDQo+IEBAIC0wLDAgKzEsNjUgQEANCj4gKyMjIEBmaWxl DQo+ICsjIENJIGNvbmZpZ3VyYXRpb24gZm9yIFVzYk5ldHdvcmtQa2cNCj4gKyMNCj4gKyMgQ29w eXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24NCj4gKyMgQ29weXJpZ2h0IChjKSAyMDIz LCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLjxCUj4NCj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRl bnQNCj4gKyMjDQo+ICt7DQo+ICsgICAgIyMgb3B0aW9ucyBkZWZpbmVkIC5weXRvb2wvUGx1Z2lu L0xpY2Vuc2VDaGVjaw0KPiArICAgICJMaWNlbnNlQ2hlY2siOiB7DQo+ICsgICAgICAgICJJZ25v cmVGaWxlcyI6IFtdDQo+ICsgICAgfSwNCj4gKyAgICAiRWNjQ2hlY2siOiB7DQo+ICsgICAgICAg ICMjIEV4Y2VwdGlvbiBzYW1wbGUgbG9va3MgbGlrZSBiZWxvdzoNCj4gKyAgICAgICAgIyMgIkV4 Y2VwdGlvbkxpc3QiOiBbDQo+ICsgICAgICAgICMjICAgICAiPEVycm9ySUQ+IiwgIjxLZXlXb3Jk PiINCj4gKyAgICAgICAgIyMgXQ0KPiArICAgICAgICAiRXhjZXB0aW9uTGlzdCI6IFsNCj4gKyAg ICAgICAgXSwNCj4gKyAgICAgICAgIyMgQm90aCBmaWxlIHBhdGggYW5kIGRpcmVjdG9yeSBwYXRo IGFyZSBhY2NlcHRlZC4NCj4gKyAgICAgICAgIklnbm9yZUZpbGVzIjogWw0KPiArICAgICAgICBd DQo+ICsgICAgfSwNCj4gKyAgICAiQ29tcGlsZXJQbHVnaW4iOiB7DQo+ICsgICAgICAgICJEc2NQ YXRoIjogIlVzYk5ldHdvcmtQa2cuZHNjIg0KPiArICAgIH0sDQo+ICsgICAgIkNoYXJFbmNvZGlu Z0NoZWNrIjogew0KPiArICAgICAgICAiSWdub3JlRmlsZXMiOiBbXQ0KPiArICAgIH0sDQo+ICsg ICAgIkRlcGVuZGVuY3lDaGVjayI6IHsNCj4gKyAgICAgICAgIkFjY2VwdGFibGVEZXBlbmRlbmNp ZXMiOiBbDQo+ICsgICAgICAgICAgICAiTWRlUGtnL01kZVBrZy5kZWMiLA0KPiArICAgICAgICAg ICAgIk1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVjIiwNCj4gKyAgICAgICAgICAgICJOZXR3 b3JrUGtnL05ldHdvcmtQa2cuZGVjIg0KPiArICAgICAgICBdLA0KPiArICAgICAgICAjIEZvciBo b3N0IGJhc2VkIHVuaXQgdGVzdHMNCj4gKyAgICAgICAgIkFjY2VwdGFibGVEZXBlbmRlbmNpZXMt SE9TVF9BUFBMSUNBVElPTiI6W10sDQo+ICsgICAgICAgICMgRm9yIFVFRkkgc2hlbGwgYmFzZWQg YXBwcw0KPiArICAgICAgICAiQWNjZXB0YWJsZURlcGVuZGVuY2llcy1VRUZJX0FQUExJQ0FUSU9O IjpbXSwNCj4gKyAgICAgICAgIklnbm9yZUluZiI6IFtdDQo+ICsgICAgfSwNCj4gKyAgICAiRHNj Q29tcGxldGVDaGVjayI6IHsNCj4gKyAgICAgICAgIkRzY1BhdGgiOiAiVXNiTmV0d29ya1BrZy5k c2MiLA0KPiArICAgICAgICAiSWdub3JlSW5mIjogW10NCj4gKyAgICB9LA0KPiArICAgICJHdWlk Q2hlY2siOiB7DQo+ICsgICAgICAgICJJZ25vcmVHdWlkTmFtZSI6IFtdLA0KPiArICAgICAgICAi SWdub3JlR3VpZFZhbHVlIjogW10sDQo+ICsgICAgICAgICJJZ25vcmVGb2xkZXJzQW5kRmlsZXMi OiBbXQ0KPiArICAgIH0sDQo+ICsNCj4gKyAgICAjIyBvcHRpb25zIGRlZmluZWQgLnB5dG9vbC9Q bHVnaW4vTGlicmFyeUNsYXNzQ2hlY2sNCj4gKyAgICAiTGlicmFyeUNsYXNzQ2hlY2siOiB7DQo+ ICsgICAgICAgICJJZ25vcmVIZWFkZXJGaWxlIjogW10NCj4gKyAgICB9LA0KPiArDQo+ICsgICAg IyMgb3B0aW9ucyBkZWZpbmVkIC5weXRvb2wvUGx1Z2luL1NwZWxsQ2hlY2sNCj4gKyAgICAiU3Bl bGxDaGVjayI6IHsNCj4gKyAgICAgICAgIkF1ZGl0T25seSI6IFRydWUsICAgICAgICAgICAjIEZh aWxzIHRlc3QgYnV0IHJ1biBpbiBBdWRpdE9ubHkgbW9kZSB0byBjb2xsZWN0IGxvZw0KPiArICAg ICAgICAiSWdub3JlRmlsZXMiOiBbXSwgICAgICAgICAgICMgdXNlIGdpdGlnbm9yZSBzeW50YXgg dG8gaWdub3JlIGVycm9ycyBpbiBtYXRjaGluZyBmaWxlcw0KPiArICAgICAgICAiRXh0ZW5kV29y ZHMiOiBbXSwgICAgICAgICAgICMgd29yZHMgdG8gZXh0ZW5kIHRvIHRoZSBkaWN0aW9uYXJ5IGZv ciB0aGlzIHBhY2thZ2UNCj4gKyAgICAgICAgIklnbm9yZVN0YW5kYXJkUGF0aHMiOiBbXSwgICAj IFN0YW5kYXJkIFBsdWdpbiBkZWZpbmVkIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGlnbm9yZQ0KPiAr ICAgICAgICAiQWRkaXRpb25hbEluY2x1ZGVQYXRocyI6IFtdICMgQWRkaXRpb25hbCBwYXRocyB0 byBzcGVsbCBjaGVjayAod2lsZGNhcmRzIHN1cHBvcnRlZCkNCj4gKyAgICB9DQo+ICt9DQo+IGRp ZmYgLS1naXQgYS9Vc2JOZXR3b3JrUGtnL1VzYk5ldHdvcmtQa2cuZGVjIGIvVXNiTmV0d29ya1Br Zy9Vc2JOZXR3b3JrUGtnLmRlYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAw MDAwMDAwLi4zMGU0ZTRjOGFhDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvVXNiTmV0d29ya1Br Zy9Vc2JOZXR3b3JrUGtnLmRlYw0KPiBAQCAtMCwwICsxLDQ2IEBADQo+ICsjIyBAZmlsZQ0KPiAr IyAgVGhpcyBwYWNrYWdlIGRlZmluZXMgVXNiIG5ldHdvcmsgc3BlY2lmaWMgaW50ZXJmYWNlcyBh bmQgbGlicmFyeSBjbGFzc2VzDQo+ICsjICBhcyB3ZWxsIGFzIGNvbmZpZ3VyYXRpb24gZm9yIHN0 YW5kYXJkIGVkazIgcGFja2FnZXMuDQo+ICsjDQo+ICsjIENvcHlyaWdodCAoYykgMjAyMywgQW1l cmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC48 QlI+DQo+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ ICsjIw0KPiArDQo+ICtbRGVmaW5lc10NCj4gKyAgREVDX1NQRUNJRklDQVRJT04gICAgICAgICAg ICAgID0gMHgwMDAxMDAwNQ0KPiArICBQQUNLQUdFX05BTUUgICAgICAgICAgICAgICAgICAgPSBV c2JOZXR3b3JrUGtnDQo+ICsgIFBBQ0tBR0VfR1VJRCAgICAgICAgICAgICAgICAgICA9IGFiZmFi OTFlLTM3ZWEtNGNiNC04MGE2LTU2M2RiYjBiY2VjNg0KPiArICBQQUNLQUdFX1ZFUlNJT04gICAg ICAgICAgICAgICAgPSAwLjENCj4gKw0KPiArW0luY2x1ZGVzXQ0KPiArICBJbmNsdWRlDQo+ICsN Cj4gK1tQcm90b2NvbHNdDQo+ICsgICMjIEluY2x1ZGUvUHJvdG9jb2wvRWRrSUlVc2JFdGhlcm5l dC5oDQo+ICsgIGdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCA9IHsgMHg4ZDg5NjljYywgMHhmZWIw LCAweDQzMDMsIHsgMHhiMiwgMHgxYSwgMHgxZiwgMHgxMSwgMHg2ZiwgMHgzOCwgMHg1NiwgMHg0 MyB9IH0NCj4gKw0KPiArW0d1aWRzXQ0KPiArICAjIyBVc2IgTmV0d29yayBwYWNrYWdlIHRva2Vu IHNwYWNlIEdVSUQNCj4gKyAgZ1VzYk5ldHdvcmtQa2dUb2tlblNwYWNlR3VpZCAgPSB7IDB4QTEy MzFFODIsIDB4MjFCOCwgMHg0MjA0LCB7IDB4OTIsIDB4QkIsIDB4MzcsIDB4M0EsIDB4RkIsIDB4 MDEsIDB4QzYsIDB4QTEgfSB9DQo+ICsNCj4gK1tQY2RzRmVhdHVyZUZsYWddDQo+ICsNCj4gKyAg IyMgU2V0IHRoZSBQQ0QgJ1VzYkNkY0VjbVN1cHBvcnQnIHRvICdUUlVFJyBpZiAnVXNiIENkYyBF Y20gZGV2aWNlJyBuZWVkIHRvIGJlIGVuYWJsZWQuDQo+ICsgIGdVc2JOZXR3b3JrUGtnVG9rZW5T cGFjZUd1aWQuVXNiQ2RjRWNtU3VwcG9ydHxGQUxTRXxCT09MRUFOfDB4MDAwMDAwMDENCj4gKw0K PiArICAjIyBTZXQgdGhlIFBDRCAnVXNiQ2RjTmNtU3VwcG9ydCcgdG8gJ1RSVUUnIGlmICdVc2Ig Q2RjIE5jbSBkZXZpY2UnIG5lZWQgdG8gYmUgZW5hYmxlZC4NCj4gKyAgZ1VzYk5ldHdvcmtQa2dU b2tlblNwYWNlR3VpZC5Vc2JDZGNOY21TdXBwb3J0fEZBTFNFfEJPT0xFQU58MHgwMDAwMDAwMg0K PiArDQo+ICsgICMjIFNldCB0aGUgUENEICdVc2JSbmRpc1N1cHBvcnQnIHRvICdUUlVFJyBpZiAn VXNiIFJuZGlzIGRldmljZScgbmVlZCB0byBiZSBlbmFibGVkLg0KPiArICBnVXNiTmV0d29ya1Br Z1Rva2VuU3BhY2VHdWlkLlVzYlJuZGlzU3VwcG9ydHxUUlVFfEJPT0xFQU58MHgwMDAwMDAwMw0K PiArDQo+ICtbUGNkc0ZpeGVkQXRCdWlsZCwgUGNkc1BhdGNoYWJsZUluTW9kdWxlXQ0KPiArICAj IyBTdXBwb3J0IHJhdGUgbGltaXRpbmcNCj4gKyAgZ1VzYk5ldHdvcmtQa2dUb2tlblNwYWNlR3Vp ZC5FbmFibGVSYXRlTGltaXRpbmd8RkFMU0V8Qk9PTEVBTnwweDAwMDEwMDAxDQo+ICsNCj4gKyAg IyMgVGhlIHJhdGUgbGltaXRpbmcgQ3JlZGl0IHZhbHVlIGlzIGNoZWNrIGluIHJhdGUgbGltaXRl ciBldmVudC4NCj4gKyAgIyAgSXQgaXMgdG8gY29udHJvbCB0aGUgUmF0ZUxpbWl0aW5nQ3JlZGl0 Q291bnQgbWF4IHZhbHVlLg0KPiArICBnVXNiTmV0d29ya1BrZ1Rva2VuU3BhY2VHdWlkLlJhdGVM aW1pdGluZ0NyZWRpdHwxMHxVSU5UMzJ8MHgwMDAxMDAwMg0KPiArDQo+ICsgICMjIFRoZSB2YWx1 ZSBvZiByYXRlIGxpbWl0ZXIgZXZlbnQgZm9yIHRpbWVvdXQgY2hlY2suIERlZmF1bHQgdmFsdWUg aXMgMTAwKHVuaXQgMW1zKS4NCj4gKyAgZ1VzYk5ldHdvcmtQa2dUb2tlblNwYWNlR3VpZC5SYXRl TGltaXRpbmdGYWN0b3J8MTAwfFVJTlQzMnwweDAwMDEwMDAzDQo+IGRpZmYgLS1naXQgYS9Vc2JO ZXR3b3JrUGtnL1VzYk5ldHdvcmtQa2cuZHNjIGIvVXNiTmV0d29ya1BrZy9Vc2JOZXR3b3JrUGtn LmRzYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi5jMmJiZmNi MmRiDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvVXNiTmV0d29ya1BrZy9Vc2JOZXR3b3JrUGtn LmRzYw0KPiBAQCAtMCwwICsxLDUwIEBADQo+ICsjIyBAZmlsZQ0KPiArIyBHbG9iYWwgRFNDIGRl ZmluaXRpb25zIHRvIGJlIGluY2x1ZGVkIGludG8gcHJvamVjdCBEU0MgZmlsZS4NCj4gKyMNCj4g KyMgQ29weXJpZ2h0IChjKSAxOTg1IC0gMjAyMywgQU1JLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxC Uj4NCj4gKyMgU3ViamVjdCB0byBBTUkgbGljZW5zaW5nIGFncmVlbWVudC4NCj4gKyMjDQo+ICsN Cj4gK1tEZWZpbmVzXQ0KPiArICBQTEFURk9STV9OQU1FICAgICAgICAgICAgICAgICAgPSBOZXR3 b3JrUGtnDQo+ICsgIFBMQVRGT1JNX0dVSUQgICAgICAgICAgICAgICAgICA9IEM1OTk1QzFDLTFF NUMtNDNGOS04MjZELTI3RTQzQTcyNDNCOA0KPiArICBQTEFURk9STV9WRVJTSU9OICAgICAgICAg ICAgICAgPSAxDQo+ICsgIERTQ19TUEVDSUZJQ0FUSU9OICAgICAgICAgICAgICA9IDB4MDAwMTAw MDUNCj4gKyAgT1VUUFVUX0RJUkVDVE9SWSAgICAgICAgICAgICAgID0gQnVpbGQvVXNiTmV0d29y a1BrZw0KPiArICBTVVBQT1JURURfQVJDSElURUNUVVJFUyAgICAgICAgPSBJQTMyfFg2NHxFQkN8 QVJNfEFBUkNINjR8UklTQ1Y2NHxMT09OR0FSQ0g2NA0KPiArICBCVUlMRF9UQVJHRVRTICAgICAg ICAgICAgICAgICAgPSBERUJVR3xSRUxFQVNFfE5PT1BUDQo+ICsgIFNLVUlEX0lERU5USUZJRVIg ICAgICAgICAgICAgICA9IERFRkFVTFQNCj4gKw0KPiArW1BjZHNGZWF0dXJlRmxhZ10NCj4gKyAg Z1VzYk5ldHdvcmtQa2dUb2tlblNwYWNlR3VpZC5Vc2JDZGNFY21TdXBwb3J0fFRSVUUNCj4gKyAg Z1VzYk5ldHdvcmtQa2dUb2tlblNwYWNlR3VpZC5Vc2JDZGNOY21TdXBwb3J0fFRSVUUNCj4gKyAg Z1VzYk5ldHdvcmtQa2dUb2tlblNwYWNlR3VpZC5Vc2JSbmRpc1N1cHBvcnR8VFJVRQ0KPiArDQo+ ICshaW5jbHVkZSBNZGVQa2cvTWRlTGlicy5kc2MuaW5jDQo+ICsNCj4gK1tMaWJyYXJ5Q2xhc3Nl c10NCj4gKyAgIw0KPiArICAjIEVudHJ5IFBvaW50IExpYnJhcmllcw0KPiArICAjDQo+ICsgIFVl ZmlEcml2ZXJFbnRyeVBvaW50fE1kZVBrZy9MaWJyYXJ5L1VlZmlEcml2ZXJFbnRyeVBvaW50L1Vl ZmlEcml2ZXJFbnRyeVBvaW50LmluZg0KPiArICAjDQo+ICsgICMgQ29tbW9uIExpYnJhcmllcw0K PiArICAjDQo+ICsgIEJhc2VMaWJ8TWRlUGtnL0xpYnJhcnkvQmFzZUxpYi9CYXNlTGliLmluZg0K PiArICBCYXNlTWVtb3J5TGlifE1kZVBrZy9MaWJyYXJ5L0Jhc2VNZW1vcnlMaWIvQmFzZU1lbW9y eUxpYi5pbmYNCj4gKyAgVWVmaUxpYnxNZGVQa2cvTGlicmFyeS9VZWZpTGliL1VlZmlMaWIuaW5m DQo+ICsgIFByaW50TGlifE1kZVBrZy9MaWJyYXJ5L0Jhc2VQcmludExpYi9CYXNlUHJpbnRMaWIu aW5mDQo+ICsgIFBjZExpYnxNZGVQa2cvTGlicmFyeS9CYXNlUGNkTGliTnVsbC9CYXNlUGNkTGli TnVsbC5pbmYNCj4gKyAgTWVtb3J5QWxsb2NhdGlvbkxpYnxNZGVQa2cvTGlicmFyeS9VZWZpTWVt b3J5QWxsb2NhdGlvbkxpYi9VZWZpTWVtb3J5QWxsb2NhdGlvbkxpYi5pbmYNCj4gKyAgVWVmaUJv b3RTZXJ2aWNlc1RhYmxlTGlifE1kZVBrZy9MaWJyYXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxp Yi9VZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIuaW5mDQo+ICsgIFVlZmlSdW50aW1lU2VydmljZXNU YWJsZUxpYnxNZGVQa2cvTGlicmFyeS9VZWZpUnVudGltZVNlcnZpY2VzVGFibGVMaWIvVWVmaVJ1 bnRpbWVTZXJ2aWNlc1RhYmxlTGliLmluZg0KPiArICBEZWJ1Z0xpYnxNZGVQa2cvTGlicmFyeS9C YXNlRGVidWdMaWJOdWxsL0Jhc2VEZWJ1Z0xpYk51bGwuaW5mDQo+ICsgIERlYnVnUHJpbnRFcnJv ckxldmVsTGlifE1kZVBrZy9MaWJyYXJ5L0Jhc2VEZWJ1Z1ByaW50RXJyb3JMZXZlbExpYi9CYXNl RGVidWdQcmludEVycm9yTGV2ZWxMaWIuaW5mDQo+ICsgIERldmljZVBhdGhMaWJ8TWRlUGtnL0xp YnJhcnkvVWVmaURldmljZVBhdGhMaWIvVWVmaURldmljZVBhdGhMaWIuaW5mDQo+ICsgIFVlZmlV c2JMaWJ8TWRlUGtnL0xpYnJhcnkvVWVmaVVzYkxpYi9VZWZpVXNiTGliLmluZg0KPiArDQo+ICtb Q29tcG9uZW50c10NCj4gKyFpbmNsdWRlIFVzYk5ldHdvcmtQa2cvVXNiTmV0d29ya1BrZy5kc2Mu aW5jDQo+ICsNCj4gK1tCdWlsZE9wdGlvbnNdDQo+ICsgICpfKl8qX0NDX0ZMQUdTID0gLUQgRElT QUJMRV9ORVdfREVQUkVDQVRFRF9JTlRFUkZBQ0VTDQo+IGRpZmYgLS1naXQgYS9Vc2JOZXR3b3Jr UGtnL1VzYk5ldHdvcmtQa2cuZHNjLmluYyBiL1VzYk5ldHdvcmtQa2cvVXNiTmV0d29ya1BrZy5k c2MuaW5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLmY1ZGYx MWFjZTYNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9Vc2JOZXR3b3JrUGtnL1VzYk5ldHdvcmtQ a2cuZHNjLmluYw0KPiBAQCAtMCwwICsxLDI3IEBADQo+ICsjIyBAZmlsZQ0KPiArIyBHbG9iYWwg RFNDIGRlZmluaXRpb25zIHRvIGJlIGluY2x1ZGVkIGludG8gcHJvamVjdCBEU0MgZmlsZS4NCj4g KyMNCj4gKyMgQ29weXJpZ2h0IChjKSAyMDIzLCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0 aW9uYWwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKyMgU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gKyMjDQo+ICsNCj4gK1tEZWZpbmVzXQ0K PiArDQo+ICshaWZuZGVmIFBMQVRGT1JNWDY0X0VOQUJMRQ0KPiArICAjDQo+ICsgICMgUExBVEZP Uk1YNjRfRU5BQkxFIGlzIHNldCB0byBUUlVFIHdoZW4gUEVJIGlzIElBMzIgYW5kIERYRSBpcyBY NjQgcGxhdGZvcm0NCj4gKyAgIw0KPiArICBERUZJTkUgUExBVEZPUk1YNjRfRU5BQkxFID0gRkFM U0UNCj4gKyFlbmRpZg0KPiArDQo+ICshaW5jbHVkZSBVc2JOZXR3b3JrUGtnL1VzYk5ldHdvcmtQ a2dQY2RzLmRzYy5pbmMNCj4gKw0KPiArIWlmICQoUExBVEZPUk1YNjRfRU5BQkxFKSA9PSBUUlVF DQo+ICtbQ29tcG9uZW50cy5YNjRdDQo+ICshaW5jbHVkZSBVc2JOZXR3b3JrUGtnL1VzYk5ldHdv cmtQa2dDb21wb25lbnRzRHhlLmRzYy5pbmMNCj4gKw0KPiArIWVsc2UNCj4gK1tDb21wb25lbnRz LklBMzIsIENvbXBvbmVudHMuWDY0LCBDb21wb25lbnRzLkFSTSwgQ29tcG9uZW50cy5BQVJDSDY0 LCBDb21wb25lbnRzLlJJU0NWNjQsIENvbXBvbmVudHMuTE9PTkdBUkNINjRdDQo+ICshaW5jbHVk ZSBVc2JOZXR3b3JrUGtnL1VzYk5ldHdvcmtQa2dDb21wb25lbnRzRHhlLmRzYy5pbmMNCj4gKw0K PiArIWVuZGlmDQo+IGRpZmYgLS1naXQgYS9Vc2JOZXR3b3JrUGtnL1VzYk5ldHdvcmtQa2dDb21w b25lbnRzRHhlLmRzYy5pbmMgYi9Vc2JOZXR3b3JrUGtnL1VzYk5ldHdvcmtQa2dDb21wb25lbnRz RHhlLmRzYy5pbmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMC4u NTQ0ZGY4NDA0Yw0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL1VzYk5ldHdvcmtQa2cvVXNiTmV0 d29ya1BrZ0NvbXBvbmVudHNEeGUuZHNjLmluYw0KPiBAQCAtMCwwICsxLDIwIEBADQo+ICsjIyBA ZmlsZQ0KPiArIyBMaXN0IG9mIENvcmUgQ29tcG9uZW50cy4NCj4gKyMNCj4gKyMgQ29weXJpZ2h0 IChjKSAyMDIzLCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwgcmln aHRzIHJlc2VydmVkLjxCUj4NCj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNs YXVzZS1QYXRlbnQNCj4gKyMjDQo+ICsNCj4gKyAgVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9u L05ldHdvcmtDb21tb24uaW5mDQo+ICsNCj4gKyFpZiBnVXNiTmV0d29ya1BrZ1Rva2VuU3BhY2VH dWlkLlVzYkNkY0VjbVN1cHBvcnQNCj4gKyAgVXNiTmV0d29ya1BrZy9Vc2JDZGNFY20vVXNiQ2Rj RWNtLmluZg0KPiArIWVuZGlmDQo+ICsNCj4gKyFpZiBnVXNiTmV0d29ya1BrZ1Rva2VuU3BhY2VH dWlkLlVzYkNkY05jbVN1cHBvcnQNCj4gKyAgVXNiTmV0d29ya1BrZy9Vc2JDZGNOY20vVXNiQ2Rj TmNtLmluZg0KPiArIWVuZGlmDQo+ICsNCj4gKyFpZiBnVXNiTmV0d29ya1BrZ1Rva2VuU3BhY2VH dWlkLlVzYlJuZGlzU3VwcG9ydA0KPiArICBVc2JOZXR3b3JrUGtnL1VzYlJuZGlzL1VzYlJuZGlz LmluZg0KPiArIWVuZGlmDQo+IGRpZmYgLS1naXQgYS9Vc2JOZXR3b3JrUGtnL1VzYk5ldHdvcmtQ a2dDb21wb25lbnRzRHhlLmZkZi5pbmMgYi9Vc2JOZXR3b3JrUGtnL1VzYk5ldHdvcmtQa2dDb21w b25lbnRzRHhlLmZkZi5pbmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAw MDAwMC4uMTA2MTZkOTdlZA0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL1VzYk5ldHdvcmtQa2cv VXNiTmV0d29ya1BrZ0NvbXBvbmVudHNEeGUuZmRmLmluYw0KPiBAQCAtMCwwICsxLDIwIEBADQo+ ICsjIyBAZmlsZQ0KPiArIyBMaXN0IG9mIENvcmUgQ29tcG9uZW50cy4NCj4gKyMNCj4gKyMgQ29w eXJpZ2h0IChjKSAyMDIzLCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBB bGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJT RC0yLUNsYXVzZS1QYXRlbnQNCj4gKyMjDQo+ICsNCj4gKyAgSU5GIFVzYk5ldHdvcmtQa2cvTmV0 d29ya0NvbW1vbi9OZXR3b3JrQ29tbW9uLmluZg0KPiArDQo+ICshaWYgZ1VzYk5ldHdvcmtQa2dU b2tlblNwYWNlR3VpZC5Vc2JDZGNFY21TdXBwb3J0DQo+ICsgIElORiBVc2JOZXR3b3JrUGtnL1Vz YkNkY0VjbS9Vc2JDZGNFY20uaW5mDQo+ICshZW5kaWYNCj4gKw0KPiArIWlmIGdVc2JOZXR3b3Jr UGtnVG9rZW5TcGFjZUd1aWQuVXNiQ2RjTmNtU3VwcG9ydA0KPiArICBJTkYgVXNiTmV0d29ya1Br Zy9Vc2JDZGNOY20vVXNiQ2RjTmNtLmluZg0KPiArIWVuZGlmDQo+ICsNCj4gKyFpZiBnVXNiTmV0 d29ya1BrZ1Rva2VuU3BhY2VHdWlkLlVzYlJuZGlzU3VwcG9ydA0KPiArICBJTkYgVXNiTmV0d29y a1BrZy9Vc2JSbmRpcy9Vc2JSbmRpcy5pbmYNCj4gKyFlbmRpZg0KPiBkaWZmIC0tZ2l0IGEvVXNi TmV0d29ya1BrZy9Vc2JOZXR3b3JrUGtnUGNkcy5kc2MuaW5jIGIvVXNiTmV0d29ya1BrZy9Vc2JO ZXR3b3JrUGtnUGNkcy5kc2MuaW5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAw MDAwMDAwMDAuLjUxMzgyZDE4ZDMNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9Vc2JOZXR3b3Jr UGtnL1VzYk5ldHdvcmtQa2dQY2RzLmRzYy5pbmMNCj4gQEAgLTAsMCArMSwxNCBAQA0KPiArIyMg QGZpbGUNCj4gKyMgR2xvYmFsIHN3aXRjaGVzIGVuYWJsZS9kaXNhYmxlIHByb2plY3QgZmVhdHVy ZXMuDQo+ICsjDQo+ICsjIENvcHlyaWdodCAoYykgMjAyMywgQW1lcmljYW4gTWVnYXRyZW5kcyBJ bnRlcm5hdGlvbmFsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsjIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsjIw0KPiArDQo+ICtbUGFj a2FnZXNdDQo+ICsgIFVzYk5ldHdvcmtQa2cvVXNiTmV0d29ya1BrZy5kZWMNCj4gKw0KPiArW1Bj ZHNGZWF0dXJlRmxhZ10NCj4gKyAgZ1VzYk5ldHdvcmtQa2dUb2tlblNwYWNlR3VpZC5Vc2JDZGNF Y21TdXBwb3J0fEZBTFNFDQo+ICsgIGdVc2JOZXR3b3JrUGtnVG9rZW5TcGFjZUd1aWQuVXNiQ2Rj TmNtU3VwcG9ydHxGQUxTRQ0KPiArICBnVXNiTmV0d29ya1BrZ1Rva2VuU3BhY2VHdWlkLlVzYlJu ZGlzU3VwcG9ydHxUUlVFDQo+IGRpZmYgLS1naXQgYS9Vc2JOZXR3b3JrUGtnL1VzYlJuZGlzL0Nv bXBvbmVudE5hbWUuYyBiL1VzYk5ldHdvcmtQa2cvVXNiUm5kaXMvQ29tcG9uZW50TmFtZS5jDQo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLmI5YmExNzBjMTMNCj4g LS0tIC9kZXYvbnVsbA0KPiArKysgYi9Vc2JOZXR3b3JrUGtnL1VzYlJuZGlzL0NvbXBvbmVudE5h bWUuYw0KPiBAQCAtMCwwICsxLDE3MiBAQA0KPiArLyoqIEBmaWxlDQo+ICsgIFRoaXMgZmlsZSBj b250YWlucyBjb2RlIGZvciBVU0IgUk5ESVMgRHJpdmVyIENvbXBvbmVudA0KPiArICBOYW1lIGRl ZmluaXRpb25zDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDIzLCBBbWVyaWNhbiBNZWdhdHJl bmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKyAgU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gKyoqLw0KPiArDQo+ ICsjaW5jbHVkZSAiVXNiUm5kaXMuaCINCj4gKw0KPiArR0xPQkFMX1JFTU9WRV9JRl9VTlJFRkVS RU5DRUQgRUZJX1VOSUNPREVfU1RSSU5HX1RBQkxFICBnVXNiUm5kaXNEcml2ZXJOYW1lVGFibGVb XSA9IHsNCj4gKyAgew0KPiArICAgICJlbmc7ZW4iLA0KPiArICAgIEwiVVNCIFJORElTIERyaXZl ciINCj4gKyAgfSwNCj4gKyAgew0KPiArICAgIE5VTEwsDQo+ICsgICAgTlVMTA0KPiArICB9DQo+ ICt9Ow0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1VzYlJuZGlzQ29tcG9uZW50 TmFtZUdldERyaXZlck5hbWUgKA0KPiArICBJTiAgRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09M ICAqVGhpcywNCj4gKyAgSU4gIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAgKkxhbmd1YWdl LA0KPiArICBPVVQgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAqKkRyaXZlck5hbWUNCj4g KyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVc2JSbmRpc0NvbXBvbmVu dE5hbWVHZXRDb250cm9sbGVyTmFtZSAoDQo+ICsgIElOIEVGSV9DT01QT05FTlRfTkFNRV9QUk9U T0NPTCAgKlRoaXMsDQo+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJv bGxlciwNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDaGlsZEhhbmRsZSAg ICAgICAgT1BUSU9OQUwsDQo+ICsgIElOIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAgKkxh bmd1YWdlLA0KPiArICBPVVQgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICoqQ29udHJvbGxl ck5hbWUNCj4gKyAgKTsNCj4gKw0KPiArR0xPQkFMX1JFTU9WRV9JRl9VTlJFRkVSRU5DRUQgRUZJ X0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MICBnVXNiUm5kaXNDb21wb25lbnROYW1lID0gew0KPiAr ICBVc2JSbmRpc0NvbXBvbmVudE5hbWVHZXREcml2ZXJOYW1lLA0KPiArICBVc2JSbmRpc0NvbXBv bmVudE5hbWVHZXRDb250cm9sbGVyTmFtZSwNCj4gKyAgImVuZyINCj4gK307DQo+ICsNCj4gK0dM T0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEIEVGSV9DT01QT05FTlRfTkFNRTJfUFJPVE9DT0wg IGdVc2JSbmRpc0NvbXBvbmVudE5hbWUyID0gew0KPiArICAoRUZJX0NPTVBPTkVOVF9OQU1FMl9H RVRfRFJJVkVSX05BTUUpVXNiUm5kaXNDb21wb25lbnROYW1lR2V0RHJpdmVyTmFtZSwNCj4gKyAg KEVGSV9DT01QT05FTlRfTkFNRTJfR0VUX0NPTlRST0xMRVJfTkFNRSlVc2JSbmRpc0NvbXBvbmVu dE5hbWVHZXRDb250cm9sbGVyTmFtZSwNCj4gKyAgImVuIg0KPiArfTsNCj4gKw0KPiArLyoqDQo+ ICsgIFJldHJpZXZlcyBhIFVuaWNvZGUgc3RyaW5nIHRoYXQgaXMgdGhlIHVzZXIgcmVhZGFibGUg bmFtZSBvZiB0aGUgZHJpdmVyLg0KPiArDQo+ICsgIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRo ZSB1c2VyIHJlYWRhYmxlIG5hbWUgb2YgYSBkcml2ZXIgaW4gdGhlIGZvcm0gb2YgYQ0KPiArICBV bmljb2RlIHN0cmluZy4gSWYgdGhlIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBoYXMgYSB1c2Vy IHJlYWRhYmxlIG5hbWUgaW4NCj4gKyAgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFn ZSwgdGhlbiBhIHBvaW50ZXIgdG8gdGhlIGRyaXZlciBuYW1lIGlzDQo+ICsgIHJldHVybmVkIGlu IERyaXZlck5hbWUsIGFuZCBFRklfU1VDQ0VTUyBpcyByZXR1cm5lZC4gSWYgdGhlIGRyaXZlciBz cGVjaWZpZWQNCj4gKyAgYnkgVGhpcyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBsYW5ndWFnZSBzcGVj aWZpZWQgYnkgTGFuZ3VhZ2UsDQo+ICsgIHRoZW4gRUZJX1VOU1VQUE9SVEVEIGlzIHJldHVybmVk Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0 aGUgRUZJX0NPTVBPTkVOVF9OQU1FMl9QUk9UT0NPTCBvcg0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsg IEBwYXJhbVtpbl0gIExhbmd1YWdlICAgICAgICAgIEEgcG9pbnRlciB0byBhIE51bGwtdGVybWlu YXRlZCBBU0NJSSBzdHJpbmcNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJy YXkgaW5kaWNhdGluZyB0aGUgbGFuZ3VhZ2UuIFRoaXMgaXMgdGhlDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlIG9mIHRoZSBkcml2ZXIgbmFtZSB0aGF0IHRoZSBj YWxsZXIgaXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGluZywg YW5kIGl0IG11c3QgbWF0Y2ggb25lIG9mIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsYW5ndWFnZXMgc3BlY2lmaWVkIGluIFN1cHBvcnRlZExhbmd1YWdlcy4gVGhlDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBsYW5ndWFnZXMgc3Vw cG9ydGVkIGJ5IGEgZHJpdmVyIGlzIHVwDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRvIHRoZSBkcml2ZXIgd3JpdGVyLiBMYW5ndWFnZSBpcyBzcGVjaWZpZWQNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gUkZDIDQ2NDYgb3IgSVNPIDYzOS0yIGxhbmd1 YWdlIGNvZGUgZm9ybWF0Lg0KPiArICBAcGFyYW1bb3V0XSBEcml2ZXJOYW1lICAgICAgICBBIHBv aW50ZXIgdG8gdGhlIFVuaWNvZGUgc3RyaW5nIHRvIHJldHVybi4NCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVGhpcyBVbmljb2RlIHN0cmluZyBpcyB0aGUgbmFtZSBvZiB0aGUN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyIHNwZWNpZmllZCBieSBU aGlzIGluIHRoZSBsYW5ndWFnZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz cGVjaWZpZWQgYnkgTGFuZ3VhZ2UuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgVGhlIFVuaWNvZGUgc3RyaW5nIGZvciB0aGUgRHJpdmVyIHNwZWNpZmllZCBieQ0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFuZCB0aGUgbGFuZ3VhZ2Ugc3Bl Y2lmaWVkIGJ5IExhbmd1YWdlIHdhcw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm5lZCBpbiBEcml2ZXJOYW1lLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFN RVRFUiBMYW5ndWFnZSBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiBEcml2ZXJOYW1lIGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAg IFRoZSBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgZG9lcyBub3Qgc3VwcG9ydA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1 YWdlLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVXNiUm5kaXND b21wb25lbnROYW1lR2V0RHJpdmVyTmFtZSAoDQo+ICsgIElOICBFRklfQ09NUE9ORU5UX05BTUVf UFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICAq TGFuZ3VhZ2UsDQo+ICsgIE9VVCBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICoqRHJpdmVy TmFtZQ0KPiArICApDQo+ICt7DQo+ICsgIHJldHVybiBMb29rdXBVbmljb2RlU3RyaW5nMiAoDQo+ ICsgICAgICAgICAgIExhbmd1YWdlLA0KPiArICAgICAgICAgICBUaGlzLT5TdXBwb3J0ZWRMYW5n dWFnZXMsDQo+ICsgICAgICAgICAgIGdVc2JSbmRpc0RyaXZlck5hbWVUYWJsZSwNCj4gKyAgICAg ICAgICAgRHJpdmVyTmFtZSwNCj4gKyAgICAgICAgICAgKEJPT0xFQU4pKFRoaXMgPT0gJmdVc2JS bmRpc0NvbXBvbmVudE5hbWUpDQo+ICsgICAgICAgICAgICk7DQo+ICt9DQo+ICsNCj4gKy8qKg0K PiArICBSZXRyaWV2ZXMgYSBVbmljb2RlIHN0cmluZyB0aGF0IGlzIHRoZSB1c2VyIHJlYWRhYmxl IG5hbWUgb2YgdGhlIGNvbnRyb2xsZXINCj4gKyAgdGhhdCBpcyBiZWluZyBtYW5hZ2VkIGJ5IGEg ZHJpdmVyLg0KPiArDQo+ICsgIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSB1c2VyIHJlYWRh YmxlIG5hbWUgb2YgdGhlIGNvbnRyb2xsZXIgc3BlY2lmaWVkIGJ5DQo+ICsgIENvbnRyb2xsZXJI YW5kbGUgYW5kIENoaWxkSGFuZGxlIGluIHRoZSBmb3JtIG9mIGEgVW5pY29kZSBzdHJpbmcuIElm IHRoZQ0KPiArICBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgaGFzIGEgdXNlciByZWFkYWJsZSBu YW1lIGluIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkNCj4gKyAgTGFuZ3VhZ2UsIHRoZW4gYSBw b2ludGVyIHRvIHRoZSBjb250cm9sbGVyIG5hbWUgaXMgcmV0dXJuZWQgaW4gQ29udHJvbGxlck5h bWUsDQo+ICsgIGFuZCBFRklfU1VDQ0VTUyBpcyByZXR1cm5lZC4gIElmIHRoZSBkcml2ZXIgc3Bl Y2lmaWVkIGJ5IFRoaXMgaXMgbm90IGN1cnJlbnRseQ0KPiArICBtYW5hZ2luZyB0aGUgY29udHJv bGxlciBzcGVjaWZpZWQgYnkgQ29udHJvbGxlckhhbmRsZSBhbmQgQ2hpbGRIYW5kbGUsDQo+ICsg IHRoZW4gRUZJX1VOU1VQUE9SVEVEIGlzIHJldHVybmVkLiAgSWYgdGhlIGRyaXZlciBzcGVjaWZp ZWQgYnkgVGhpcyBkb2VzIG5vdA0KPiArICBzdXBwb3J0IHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQg YnkgTGFuZ3VhZ2UsIHRoZW4gRUZJX1VOU1VQUE9SVEVEIGlzIHJldHVybmVkLg0KPiArDQo+ICsg IEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX0NPTVBP TkVOVF9OQU1FMl9QUk9UT0NPTCBvcg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0g IENvbnRyb2xsZXIgICAgICAgIFRoZSBoYW5kbGUgb2YgYSBjb250cm9sbGVyIHRoYXQgdGhlIGRy aXZlcg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgYnkgVGhp cyBpcyBtYW5hZ2luZy4gIFRoaXMgaGFuZGxlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNwZWNpZmllcyB0aGUgY29udHJvbGxlciB3aG9zZSBuYW1lIGlzIHRvIGJlDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkLg0KPiArICBAcGFyYW1baW5d ICBDaGlsZEhhbmRsZSAgICAgICBUaGUgaGFuZGxlIG9mIHRoZSBjaGlsZCBjb250cm9sbGVyIHRv IHJldHJpZXZlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBuYW1lIG9m LiAgVGhpcyBpcyBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBtYXkgYmUgTlVMTC4gIEl0IHdpbGwgYmUgTlVMTCBmb3IgZGV2aWNl DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlcnMuICBJdCB3aWxsIGFs c28gYmUgTlVMTCBmb3IgYSBidXMgZHJpdmVycw0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0aGF0IHdpc2ggdG8gcmV0cmlldmUgdGhlIG5hbWUgb2YgdGhlIGJ1cw0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLiAgSXQgd2lsbCBub3QgYmUg TlVMTCBmb3IgYSBidXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVy IHRoYXQgd2lzaGVzIHRvIHJldHJpZXZlIHRoZSBuYW1lIG9mIGENCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2hpbGQgY29udHJvbGxlci4NCj4gKyAgQHBhcmFtW2luXSAgTGFu Z3VhZ2UgICAgICAgICAgQSBwb2ludGVyIHRvIGEgTnVsbC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmlu Zw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSBpbmRpY2F0aW5nIHRo ZSBsYW5ndWFnZS4gIFRoaXMgaXMgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxhbmd1YWdlIG9mIHRoZSBkcml2ZXIgbmFtZSB0aGF0IHRoZSBjYWxsZXIgaXMNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGluZywgYW5kIGl0IG11c3QgbWF0 Y2ggb25lIG9mIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFn ZXMgc3BlY2lmaWVkIGluIFN1cHBvcnRlZExhbmd1YWdlcy4gVGhlDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBsYW5ndWFnZXMgc3VwcG9ydGVkIGJ5IGEgZHJp dmVyIGlzIHVwDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBkcml2 ZXIgd3JpdGVyLiBMYW5ndWFnZSBpcyBzcGVjaWZpZWQgaW4NCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUkZDIDQ2NDYgb3IgSVNPIDYzOS0yIGxhbmd1YWdlIGNvZGUgZm9ybWF0 Lg0KPiArICBAcGFyYW1bb3V0XSBDb250cm9sbGVyTmFtZSAgICBBIHBvaW50ZXIgdG8gdGhlIFVu aWNvZGUgc3RyaW5nIHRvIHJldHVybi4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVGhpcyBVbmljb2RlIHN0cmluZyBpcyB0aGUgbmFtZSBvZiB0aGUNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlciBzcGVjaWZpZWQgYnkgQ29udHJvbGxlckhh bmRsZSBhbmQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hpbGRIYW5kbGUg aW4gdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBMYW5ndWFnZSBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mIHRoZSBkcml2ZXINCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGJ5IFRoaXMuDQo+ICsN Cj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIFVuaWNvZGUgc3RyaW5nIGZv ciB0aGUgdXNlciByZWFkYWJsZSBuYW1lIGluDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UgZm9yIHRoZQ0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgd2Fz IHJldHVybmVkIGluDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERyaXZlck5h bWUuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIENvbnRyb2xsZXJIYW5kbGUg aXMgbm90IGEgdmFsaWQgRUZJX0hBTkRMRS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJB TUVURVIgQ2hpbGRIYW5kbGUgaXMgbm90IE5VTEwgYW5kIGl0IGlzIG5vdCBhIHZhbGlkDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9IQU5ETEUuDQo+ICsgIEByZXR2YWwg RUZJX0lOVkFMSURfUEFSQU1FVEVSIExhbmd1YWdlIGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJ X0lOVkFMSURfUEFSQU1FVEVSIENvbnRyb2xsZXJOYW1lIGlzIE5VTEwuDQo+ICsgIEByZXR2YWwg RUZJX1VOU1VQUE9SVEVEICAgICAgIFRoZSBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgaXMgbm90 IGN1cnJlbnRseQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW5hZ2luZyB0 aGUgY29udHJvbGxlciBzcGVjaWZpZWQgYnkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQ29udHJvbGxlckhhbmRsZSBhbmQgQ2hpbGRIYW5kbGUuDQo+ICsgIEByZXR2YWwgRUZJ X1VOU1VQUE9SVEVEICAgICAgIFRoZSBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgZG9lcyBub3Qg c3VwcG9ydA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGFuZ3VhZ2Ug c3BlY2lmaWVkIGJ5IExhbmd1YWdlLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VG SUFQSQ0KPiArVXNiUm5kaXNDb21wb25lbnROYW1lR2V0Q29udHJvbGxlck5hbWUgKA0KPiArICBJ TiBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBFRklfSEFORExF ICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXIsDQo+ICsgIElOIEVGSV9IQU5ETEUgICAgICAg ICAgICAgICAgICAgQ2hpbGRIYW5kbGUgICAgICAgIE9QVElPTkFMLA0KPiArICBJTiBDSEFSOCAg ICAgICAgICAgICAgICAgICAgICAgICpMYW5ndWFnZSwNCj4gKyAgT1VUIENIQVIxNiAgICAgICAg ICAgICAgICAgICAgICAqKkNvbnRyb2xsZXJOYW1lDQo+ICsgICkNCj4gK3sNCj4gKyAgcmV0dXJu IEVGSV9VTlNVUFBPUlRFRDsNCj4gK30NCj4gZGlmZiAtLWdpdCBhL1VzYk5ldHdvcmtQa2cvVXNi Um5kaXMvVXNiUm5kaXMuYyBiL1VzYk5ldHdvcmtQa2cvVXNiUm5kaXMvVXNiUm5kaXMuYw0KPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi45MjgzMDc3MWU0DQo+IC0t LSAvZGV2L251bGwNCj4gKysrIGIvVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpcy5jDQo+ IEBAIC0wLDAgKzEsODg2IEBADQo+ICsvKiogQGZpbGUNCj4gKyAgVGhpcyBmaWxlIGNvbnRhaW5z IGNvZGUgZm9yIFVTQiBSZW1vdGUgTmV0d29yayBEcml2ZXINCj4gKyAgSW50ZXJmYWNlIFNwZWMu IERyaXZlciBCaW5kaW5nDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDIzLCBBbWVyaWNhbiBN ZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4g KyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gKyoqLw0K PiArDQo+ICsjaW5jbHVkZSAiVXNiUm5kaXMuaCINCj4gKw0KPiArRUZJX0RSSVZFUl9CSU5ESU5H X1BST1RPQ09MICBnVXNiUm5kaXNEcml2ZXJCaW5kaW5nID0gew0KPiArICBVc2JSbmRpc0RyaXZl clN1cHBvcnRlZCwNCj4gKyAgVXNiUm5kaXNEcml2ZXJTdGFydCwNCj4gKyAgVXNiUm5kaXNEcml2 ZXJTdG9wLA0KPiArICBVU0JfUk5ESVNfRFJJVkVSX1ZFUlNJT04sDQo+ICsgIE5VTEwsDQo+ICsg IE5VTEwNCj4gK307DQo+ICsNCj4gKy8qKg0KPiArICBDaGVjayBpZiB0aGlzIGludGVyZmFjZSBp cyBVU0IgUm5kaXMgU3ViVHlwZQ0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFVzYklvICBBIHBvaW50 ZXIgdG8gdGhlIEVGSV9VU0JfSU9fUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsNCj4gKyAgQHJldHZh bCBUUlVFICAgVVNCIFJuZGlzIFN1YlR5cGUuDQo+ICsgIEByZXR2YWwgRkFMU0UgIE5vdCBVU0Ig Um5kaXMgU3ViVHlwZS4NCj4gKw0KPiArKiovDQo+ICtCT09MRUFODQo+ICtJc1N1cHBvcnRlZERl dmljZSAoDQo+ICsgIElOIEVGSV9VU0JfSU9fUFJPVE9DT0wgICpVc2JJbw0KPiArICApDQo+ICt7 DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX1VT Ql9JTlRFUkZBQ0VfREVTQ1JJUFRPUiAgSW50ZXJmYWNlRGVzY3JpcHRvcjsNCj4gKw0KPiArICBT dGF0dXMgPSBVc2JJby0+VXNiR2V0SW50ZXJmYWNlRGVzY3JpcHRvciAoVXNiSW8sICZJbnRlcmZh Y2VEZXNjcmlwdG9yKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJl dHVybiBGQUxTRTsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vIENoZWNrIHNwZWNpZmljIGRldmljZS9S TkRJUyBhbmQgQ0RDLURBVEENCj4gKyAgaWYgKCgoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZh Y2VDbGFzcyA9PSAweDIpICYmDQo+ICsgICAgICAgKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJm YWNlU3ViQ2xhc3MgPT0gMHgyKSAmJg0KPiArICAgICAgIChJbnRlcmZhY2VEZXNjcmlwdG9yLklu dGVyZmFjZVByb3RvY29sID09IDB4RkYpKSB8fCBcDQo+ICsgICAgICAoKEludGVyZmFjZURlc2Ny aXB0b3IuSW50ZXJmYWNlQ2xhc3MgPT0gMHhFRikgJiYNCj4gKyAgICAgICAoSW50ZXJmYWNlRGVz Y3JpcHRvci5JbnRlcmZhY2VTdWJDbGFzcyA9PSAweDQpICYmDQo+ICsgICAgICAgKEludGVyZmFj ZURlc2NyaXB0b3IuSW50ZXJmYWNlUHJvdG9jb2wgPT0gMHgxKSkgfHwgXA0KPiArICAgICAgKChJ bnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZUNsYXNzID09IDB4QSkgJiYNCj4gKyAgICAgICAo SW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VTdWJDbGFzcyA9PSAweDApICYmDQo+ICsgICAg ICAgKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlUHJvdG9jb2wgPT0gMHgwMCkpDQo+ICsg ICAgICApDQo+ICsgIHsNCj4gKyAgICByZXR1cm4gVFJVRTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJl dHVybiBGQUxTRTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENoZWNrIGlmIHRoaXMgaW50ZXJm YWNlIGlzIFVTQiBSbmRpcyBTdWJUeXBlIGJ1dCBub3QgQ0RDIERhdGEgaW50ZXJmYWNlDQo+ICsN Cj4gKyAgQHBhcmFtW2luXSAgVXNiSW8gIEEgcG9pbnRlciB0byB0aGUgRUZJX1VTQl9JT19QUk9U T0NPTCBpbnN0YW5jZS4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICBVU0IgUm5kaXMgU3ViVHlw ZS4NCj4gKyAgQHJldHZhbCBGQUxTRSAgTm90IFVTQiBSbmRpcyBTdWJUeXBlLg0KPiArKiovDQo+ ICtCT09MRUFODQo+ICtJc1JuZGlzSW50ZXJmYWNlICgNCj4gKyAgSU4gRUZJX1VTQl9JT19QUk9U T0NPTCAgKlVzYklvDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg ICAgICAgU3RhdHVzOw0KPiArICBFRklfVVNCX0lOVEVSRkFDRV9ERVNDUklQVE9SICBJbnRlcmZh Y2VEZXNjcmlwdG9yOw0KPiArDQo+ICsgIFN0YXR1cyA9IFVzYklvLT5Vc2JHZXRJbnRlcmZhY2VE ZXNjcmlwdG9yIChVc2JJbywgJkludGVyZmFjZURlc2NyaXB0b3IpOw0KPiArICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiArICB9DQo+ICsNCj4gKyAg Ly8gQ2hlY2sgZm9yIHNwZWNpZmljIGRldmljZS9STkRJUyBhbmQgQ0RDLURBVEENCj4gKyAgaWYg KCgoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VDbGFzcyA9PSAweDIpICYmDQo+ICsgICAg ICAgKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlU3ViQ2xhc3MgPT0gMHgyKSAmJg0KPiAr ICAgICAgIChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZVByb3RvY29sID09IDB4RkYpKSB8 fCBcDQo+ICsgICAgICAoKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlQ2xhc3MgPT0gMHhF RikgJiYNCj4gKyAgICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VTdWJDbGFzcyA9 PSAweDQpICYmDQo+ICsgICAgICAgKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlUHJvdG9j b2wgPT0gMHgxKSkNCj4gKyAgICAgICkNCj4gKyAgew0KPiArICAgIHJldHVybiBUUlVFOw0KPiAr ICB9DQo+ICsNCj4gKyAgcmV0dXJuIEZBTFNFOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ2hl Y2sgaWYgdGhlIFVTQiBSTkRJUyBhbmQgVVNCIENEQyBEYXRhIGludGVyZmFjZXMgYXJlIGZyb20g dGhlIHNhbWUgZGV2aWNlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFVzYlJuZGlzRGF0YVBhdGgg IEEgcG9pbnRlciB0byB0aGUgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MIGluc3RhbmNlLg0KPiAr ICBAcGFyYW1baW5dICBVc2JDZGNEYXRhUGF0aCAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9ERVZJ Q0VfUEFUSF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICAgICBJcyB0aGUgc2FtZSBkZXZpY2UuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9S VEVEICAgICAgIElzIG5vdCB0aGUgc2FtZSBkZXZpY2UuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NU QVRVUw0KPiArSXNTYW1lRGV2aWNlICgNCj4gKyAgSU4gIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NP TCAgKlVzYlJuZGlzRGF0YVBhdGgsDQo+ICsgIElOICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wg ICpVc2JDZGNEYXRhUGF0aA0KPiArICApDQo+ICt7DQo+ICsgIERFQlVHICgoREVCVUdfVkVSQk9T RSwgIklzU2FtZURldmljZSBFbnRyeSBcbiIpKTsNCj4gKyAgd2hpbGUgKDEpIHsNCj4gKyAgICBp ZiAoSXNEZXZpY2VQYXRoRW5kIChOZXh0RGV2aWNlUGF0aE5vZGUgKFVzYlJuZGlzRGF0YVBhdGgp KSkgew0KPiArICAgICAgaWYgKCgoVVNCX0RFVklDRV9QQVRIICopVXNiUm5kaXNEYXRhUGF0aCkt PlBhcmVudFBvcnROdW1iZXIgPT0NCj4gKyAgICAgICAgICAoKFVTQl9ERVZJQ0VfUEFUSCAqKVVz YkNkY0RhdGFQYXRoKS0+UGFyZW50UG9ydE51bWJlcikNCj4gKyAgICAgIHsNCj4gKyAgICAgICAg cmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgcmV0dXJu IEVGSV9VTlNVUFBPUlRFRDsNCj4gKyAgICAgIH0NCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAg aWYgKENvbXBhcmVNZW0gKFVzYkNkY0RhdGFQYXRoLCBVc2JSbmRpc0RhdGFQYXRoLCBzaXplb2Yg KEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCkpICE9IDApIHsNCj4gKyAgICAgICAgcmV0dXJuIEVG SV9VTlNVUFBPUlRFRDsNCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgVXNiUm5kaXNEYXRhUGF0 aCA9IE5leHREZXZpY2VQYXRoTm9kZSAoVXNiUm5kaXNEYXRhUGF0aCk7DQo+ICsgICAgICBVc2JD ZGNEYXRhUGF0aCAgID0gTmV4dERldmljZVBhdGhOb2RlIChVc2JDZGNEYXRhUGF0aCk7DQo+ICsg ICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgREVCVUcgKChERUJVR19WRVJCT1NFLCAiSXNTYW1lRGV2 aWNlIEV4aXQgXG4iKSk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDaGVjayBpZiB0aGUgVVNC IENEQyBEYXRhKFVzYklvKSBpbnN0YWxsZWQgYW5kIHJldHVybiBVU0IgQ0RDIERhdGEgSGFuZGxl Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFVzYklvICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9VU0Jf SU9fUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgICAg ICBVU0IgQ0RDIERhdGEoVXNiSW8pIGluc3RhbGxlZC4NCj4gKyAgQHJldHZhbCBGQUxTRSAgICAg ICAgICAgICBVU0IgQ0RDIERhdGEoVXNiSW8pIGRpZCBub3QgaW5zdGFsbGVkLg0KPiArDQo+ICsq Ki8NCj4gK0JPT0xFQU4NCj4gK0lzVXNiQ2RjRGF0YSAoDQo+ICsgIElOIEVGSV9VU0JfSU9fUFJP VE9DT0wgICpVc2JJbw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAg ICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX1VTQl9JTlRFUkZBQ0VfREVTQ1JJUFRPUiAgSW50ZXJm YWNlRGVzY3JpcHRvcjsNCj4gKw0KPiArICBTdGF0dXMgPSBVc2JJby0+VXNiR2V0SW50ZXJmYWNl RGVzY3JpcHRvciAoVXNiSW8sICZJbnRlcmZhY2VEZXNjcmlwdG9yKTsNCj4gKyAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBGQUxTRTsNCj4gKyAgfQ0KPiArDQo+ICsg IC8vIENoZWNrIGZvciBDREMtREFUQQ0KPiArICBpZiAoKEludGVyZmFjZURlc2NyaXB0b3IuSW50 ZXJmYWNlQ2xhc3MgPT0gMHhBKSAmJg0KPiArICAgICAgKEludGVyZmFjZURlc2NyaXB0b3IuSW50 ZXJmYWNlU3ViQ2xhc3MgPT0gMHgwKSAmJg0KPiArICAgICAgKEludGVyZmFjZURlc2NyaXB0b3Iu SW50ZXJmYWNlUHJvdG9jb2wgPT0gMHgwKSkNCj4gKyAgew0KPiArICAgIHJldHVybiBUUlVFOw0K PiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEZBTFNFOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAg Q2hlY2sgaWYgdGhlIFVTQiBSbmRpcyhVc2JJbykgaW5zdGFsbGVkDQo+ICsNCj4gKyAgQHBhcmFt W2luXSAgVXNiSW8gICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX1VTQl9JT19QUk9UT0NPTCBp bnN0YW5jZS4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgICAgIFVTQiBSbmRpcyhV c2JJbykgaW5zdGFsbGVkLg0KPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgICAgIFVTQiBSbmRp cyhVc2JJbykgZGlkIG5vdCBpbnN0YWxsZWQuDQo+ICsNCj4gKyoqLw0KPiArQk9PTEVBTg0KPiAr SXNVc2JSbmRpcyAoDQo+ICsgIElOIEVGSV9VU0JfSU9fUFJPVE9DT0wgICpVc2JJbw0KPiArICAp DQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAg RUZJX1VTQl9JTlRFUkZBQ0VfREVTQ1JJUFRPUiAgSW50ZXJmYWNlRGVzY3JpcHRvcjsNCj4gKw0K PiArICBTdGF0dXMgPSBVc2JJby0+VXNiR2V0SW50ZXJmYWNlRGVzY3JpcHRvciAoVXNiSW8sICZJ bnRlcmZhY2VEZXNjcmlwdG9yKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAr ICAgIHJldHVybiBGQUxTRTsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vIENoZWNrIGZvciBSbmRpcw0K PiArICBpZiAoKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlQ2xhc3MgPT0gMHgyKSAmJg0K PiArICAgICAgKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlU3ViQ2xhc3MgPT0gMHgyKSAm Jg0KPiArICAgICAgKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlUHJvdG9jb2wgPT0gMHhG RikpDQo+ICsgIHsNCj4gKyAgICByZXR1cm4gVFJVRTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVy biBGQUxTRTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENvbnRyb2wgY29tZXMgaGVyZSB3aGVu IGEgQ0RDIGRldmljZSBpcyBmb3VuZC5DaGVjayBpZiBhIFJORElTIGludGVyZmFjZSBpcyBhbHJl YWR5IGZvdW5kIGZvciB0aGlzIGRldmljZSBvciBub3QuDQo+ICsgIEZvciBvbmUgZGV2aWNlIHR3 byBVU0JJTyB3aWxsIGJlIGluc3RhbGxlZCBlYWNoIGZvciBDREMgYW5kIFJORElTIGludGVyZmFj ZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBVc2JFdGhQYXRoICAgICAgICBBIHBvaW50ZXIgdG8g dGhlIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW291dF0g VXNiUm5kaXNEZXZpY2UgICAgQSBwb2ludGVyIHRvIHRoZSBVU0JfUk5ESVNfREVWSUNFIERhdGEu DQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBUaGUgVVNCX1JORElT X0RFVklDRSBtYXRjaGluZyB0aGlzIENEQyBEYXRhIGlzIGZvdW5kLg0KPiArICBAcmV0dmFsIEVG SV9OT1RfRk9VTkQgICAgICAgICAgIFRoZSBVU0JfUk5ESVNfREVWSUNFIG1hdGNoaW5nIHRoaXMg Q0RDIERhdGEgaXMgbm90IGZvdW5kLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1Vw ZGF0ZVJuZGlzRGV2aWNlICgNCj4gKyAgSU4gIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgKlVz YkNkY0RhdGFQYXRoLA0KPiArICBPVVQgVVNCX1JORElTX0RFVklDRSAgICAgICAgICAqKlVzYlJu ZGlzRGV2aWNlDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAg ICBTdGF0dXM7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsg IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlQ291bnQ7DQo+ICsgIEVGSV9IQU5E TEUgICAgICAgICAgICAgICAgICAgKkhhbmRsZUJ1ZmZlcjsNCj4gKyAgRURLSUlfVVNCX0VUSEVS TkVUX1BST1RPQ09MICAqVXNiRXRoRGV2aWNlOw0KPiArICBFRklfREVWSUNFX1BBVEhfUFJPVE9D T0wgICAgICpVc2JSbmRpc0RhdGFQYXRoOw0KPiArICBFRklfVVNCX0lPX1BST1RPQ09MICAgICAg ICAgICpVc2JJbzsNCj4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICBJc1JuZGlzSW50 ZXJmYWNlRmxhZzsNCj4gKw0KPiArICBJc1JuZGlzSW50ZXJmYWNlRmxhZyA9IEZBTFNFOw0KPiAr DQo+ICsgIFN0YXR1cyA9IGdCUy0+TG9jYXRlSGFuZGxlQnVmZmVyICgNCj4gKyAgICAgICAgICAg ICAgICAgIEJ5UHJvdG9jb2wsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJv dG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgTlVMTCwNCj4gKyAgICAgICAgICAgICAg ICAgICZIYW5kbGVDb3VudCwNCj4gKyAgICAgICAgICAgICAgICAgICZIYW5kbGVCdWZmZXINCj4g KyAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g KyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgZm9yIChJbmRleCA9IDA7IElu ZGV4IDwgSGFuZGxlQ291bnQ7IEluZGV4KyspIHsNCj4gKyAgICBTdGF0dXMgPSBnQlMtPkhhbmRs ZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgICAgSGFuZGxlQnVmZmVyW0luZGV4XSwN Cj4gKyAgICAgICAgICAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAg ICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVzYkV0aERldmljZQ0KPiArICAgICAgICAgICAg ICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIGNv bnRpbnVlOw0KPiArICAgIH0NCj4gKw0KPiArICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9j b2wgKA0KPiArICAgICAgICAgICAgICAgICAgICBIYW5kbGVCdWZmZXJbSW5kZXhdLA0KPiArICAg ICAgICAgICAgICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAg ICAgICAgICAoVk9JRCAqKikmVXNiSW8NCj4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAg ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBjb250aW51ZTsNCj4gKyAgICB9 DQo+ICsNCj4gKyAgICBJc1JuZGlzSW50ZXJmYWNlRmxhZyA9IElzUm5kaXNJbnRlcmZhY2UgKFVz YklvKTsNCj4gKyAgICBpZiAoSXNSbmRpc0ludGVyZmFjZUZsYWcgPT0gRkFMU0UpIHsNCj4gKyAg ICAgIGNvbnRpbnVlOw0KPiArICAgIH0NCj4gKw0KPiArICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxl UHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgICBIYW5kbGVCdWZmZXJbSW5kZXhdLA0K PiArICAgICAgICAgICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsg ICAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZVc2JSbmRpc0RhdGFQYXRoDQo+ICsgICAgICAg ICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAg ICAgY29udGludWU7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgU3RhdHVzID0gSXNTYW1lRGV2aWNl IChVc2JSbmRpc0RhdGFQYXRoLCBVc2JDZGNEYXRhUGF0aCk7DQo+ICsNCj4gKyAgICBERUJVRyAo KERFQlVHX1ZFUkJPU0UsICJSbmRpcyBJc1NhbWVEZXZpY2UgJXJcbiIsIFN0YXR1cykpOw0KPiAr DQo+ICsgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICpVc2JSbmRpc0Rl dmljZSA9IFVTQl9STkRJU19ERVZJQ0VfRlJPTV9USElTIChVc2JFdGhEZXZpY2UpOw0KPiArICAg ICAgRnJlZVBvb2wgKEhhbmRsZUJ1ZmZlcik7DQo+ICsgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7 DQo+ICsgICAgfQ0KPiArICB9ICAgLy8gRW5kIG9mIEZvciBsb29wDQo+ICsNCj4gKyAgRnJlZVBv b2wgKEhhbmRsZUJ1ZmZlcik7DQo+ICsgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKw0KPiArICBGb3IgdGhlIGdpdmVuIFJuZGlzIERldmljZSwgZmluZCBhIG1h dGNoaW5nIENEQyBkZXZpY2UgYWxyZWFkeSBleGlzdHMgb3Igbm90LiBJZiBmb3VuZCB1cGRhdGUg dGhlIGhhbmRsZQ0KPiArICBhbmQgVXNiSU8gcHJvdG9jb2wuDQo+ICsNCj4gKyAgQHBhcmFtW2lu XSAgVXNiUm5kaXNEZXZpY2UgICAgICAgIEEgcG9pbnRlciB0byB0aGUgVVNCX1JORElTX0RFVklD RSBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0ZpbmRNYXRjaGluZ0NkY0RhdGEgKA0K PiArICBJTiBVU0JfUk5ESVNfREVWSUNFICAqVXNiUm5kaXNEZXZpY2UNCj4gKyAgKQ0KPiArew0K PiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICBJbmRleDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBIYW5k bGVDb3VudDsNCj4gKyAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAqSGFuZGxlQnVmZmVyOw0K PiArICBFRklfVVNCX0lPX1BST1RPQ09MICAgICAgICpVc2JJbzsNCj4gKyAgRUZJX0RFVklDRV9Q QVRIX1BST1RPQ09MICAqVXNiUm5kaXNEYXRhUGF0aDsNCj4gKyAgRUZJX0RFVklDRV9QQVRIX1BS T1RPQ09MICAqVXNiQ2RjRGF0YVBhdGg7DQo+ICsNCj4gKyAgLy8gRmluZCB0aGUgcGFyZW50IFJO RElTIGFuZCB1cGRhdGUgdGhlIFVzYklvIGZvciB0aGUgQ0RDIGRldmljZQ0KPiArICBTdGF0dXMg PSBnQlMtPkhhbmRsZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2 aWNlLT5Vc2JSbmRpc0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0 aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZVc2JSbmRpc0Rh dGFQYXRoDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBn QlMtPkxvY2F0ZUhhbmRsZUJ1ZmZlciAoDQo+ICsgICAgICAgICAgICAgICAgICBCeVByb3RvY29s LA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gKyAgICAg ICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAgICAgICAgICAgICAgICAmSGFuZGxlQ291bnQsDQo+ ICsgICAgICAgICAgICAgICAgICAmSGFuZGxlQnVmZmVyDQo+ICsgICAgICAgICAgICAgICAgICAp Ow0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9 DQo+ICsNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgSGFuZGxlQ291bnQ7IEluZGV4Kysp IHsNCj4gKyAgICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCj4gKyAgICAgICAgICAg ICAgICAgICAgSGFuZGxlQnVmZmVyW0luZGV4XSwNCj4gKyAgICAgICAgICAgICAgICAgICAgJmdF ZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVz YklvDQo+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgQVNTRVJUX0VGSV9FUlJPUiAo U3RhdHVzKTsNCj4gKw0KPiArICAgIGlmIChJc1VzYkNkY0RhdGEgKFVzYklvKSkgew0KPiArICAg ICAgREVCVUcgKChERUJVR19WRVJCT1NFLCAiUm5kaXMgRmluZE1hdGNoaW5nQ2RjRGF0YSBDRENE YXRhIGludGVyZmFjZSBmb3VuZFxuIikpOw0KPiArDQo+ICsgICAgICBTdGF0dXMgPSBnQlMtPkhh bmRsZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVCdWZmZXJbSW5k ZXhdLA0KPiArICAgICAgICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3Vp ZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiQ2RjRGF0YVBhdGgNCj4g KyAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiArICAgICAgICBERUJVRyAoKERFQlVHX1ZFUkJPU0UsICJSbmRpcyBDRENEYXRhIERl dmljZVBhdGggbm90IGZvdW5kXG4iKSk7DQo+ICsgICAgICAgIEZyZWVQb29sIChIYW5kbGVCdWZm ZXIpOw0KPiArICAgICAgICByZXR1cm47DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIFN0YXR1 cyA9IElzU2FtZURldmljZSAoVXNiUm5kaXNEYXRhUGF0aCwgVXNiQ2RjRGF0YVBhdGgpOw0KPiAr ICAgICAgREVCVUcgKChERUJVR19WRVJCT1NFLCAiUm5kaXMgSXNTYW1lRGV2aWNlICVyXG4iLCBT dGF0dXMpKTsNCj4gKyAgICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICAg IFVzYlJuZGlzRGV2aWNlLT5Vc2JDZGNEYXRhSGFuZGxlID0gSGFuZGxlQnVmZmVyW0luZGV4XTsN Cj4gKyAgICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYklvQ2RjRGF0YSAgICAgPSBVc2JJbzsNCj4g KyAgICAgICAgR2V0RW5kcG9pbnQgKFVzYlJuZGlzRGV2aWNlLT5Vc2JJb0NkY0RhdGEsIFVzYlJu ZGlzRGV2aWNlKTsNCj4gKyAgICAgICAgRnJlZVBvb2wgKEhhbmRsZUJ1ZmZlcik7DQo+ICsgICAg ICAgIHJldHVybjsNCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsgIH0gICAvLyBFbmQgb2YgRm9y IGxvb3ANCj4gKw0KPiArICBGcmVlUG9vbCAoSGFuZGxlQnVmZmVyKTsNCj4gK30NCj4gKw0KPiAr LyoqDQo+ICsNCj4gKyAgRm9yIHRoZSBnaXZlbiBVc2JJbyBDZGNEYXRhLCBmaW5kIGEgbWF0Y2hp bmcgUk5ESVMgZGV2aWNlIGFscmVhZHkgZXhpc3RzIG9yIG5vdC4NCj4gKw0KPiArICBAcGFyYW1b aW5dICBDZGNIYW5kbGUgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklfSEFORExFIGZvciBVU0Ig Q0RDIERhdGEuDQo+ICsgIEBwYXJhbVtvdXRdIENkY1VzYklvICAgICAgICBBIHBvaW50ZXIgZm9y IHJldHJpZXZlIHRoZSBFRklfVVNCX0lPX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1b b3V0XSBSbmRpc0hhbmRsZSAgICAgQSBwb2ludGVyIGZvciByZXRyaWV2ZSB0aGUgaGFuZGxlIG9m IFJORElTIGRldmljZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAg IFRoZSBVU0JfUk5ESVNfREVWSUNFIG1hdGNoaW5nIHRoaXMgQ0RDIERhdGEgaXMgZm91bmQuDQo+ ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICAgVGhlIFVTQl9STkRJU19ERVZJQ0Ug bWF0Y2hpbmcgdGhpcyBDREMgRGF0YSBpcyBub3QgZm91bmQuDQo+ICsNCj4gKyoqLw0KPiArRUZJ X1NUQVRVUw0KPiArRUZJQVBJDQo+ICtGaW5kTWF0Y2hpbmdSbmRpc0RldiAoDQo+ICsgIElOICBF RklfSEFORExFICAgICAgICAgICBDZGNIYW5kbGUsDQo+ICsgIE9VVCBFRklfVVNCX0lPX1BST1RP Q09MICAqKkNkY1VzYklvLA0KPiArICBPVVQgRUZJX0hBTkRMRSAgICAgICAgICAgKlJuZGlzSGFu ZGxlDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7 DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsgIFVJTlROICAgICAg ICAgICAgICAgICAgICAgSGFuZGxlQ291bnQ7DQo+ICsgIEVGSV9IQU5ETEUgICAgICAgICAgICAg ICAgKkhhbmRsZUJ1ZmZlcjsNCj4gKyAgRUZJX1VTQl9JT19QUk9UT0NPTCAgICAgICAqVXNiSW87 DQo+ICsgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgKlVzYlJuZGlzRGF0YVBhdGg7DQo+ICsg IEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgKlVzYkNkY0RhdGFQYXRoOw0KPiArDQo+ICsgIC8v IEZpbmQgdGhlIHBhcmVudCBSTkRJUyBhbmQgdXBkYXRlIHRoZSBVc2JJbyBmb3IgdGhlIENEQyBk ZXZpY2UNCj4gKyAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ICsgICAgICAgICAg ICAgICAgICBDZGNIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQ cm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiQ2RjRGF0YVBh dGgNCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMg PSBnQlMtPkxvY2F0ZUhhbmRsZUJ1ZmZlciAoDQo+ICsgICAgICAgICAgICAgICAgICBCeVByb3Rv Y29sLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gKyAg ICAgICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAgICAgICAgICAgICAgICAmSGFuZGxlQ291bnQs DQo+ICsgICAgICAgICAgICAgICAgICAmSGFuZGxlQnVmZmVyDQo+ICsgICAgICAgICAgICAgICAg ICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1 czsNCj4gKyAgfQ0KPiArDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IEhhbmRsZUNvdW50 OyBJbmRleCsrKSB7DQo+ICsgICAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ICsg ICAgICAgICAgICAgICAgICAgIEhhbmRsZUJ1ZmZlcltJbmRleF0sDQo+ICsgICAgICAgICAgICAg ICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAgIChW T0lEICoqKSZVc2JJbw0KPiArICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgfQ0KPiAr DQo+ICsgICAgaWYgKElzVXNiUm5kaXMgKFVzYklvKSkgew0KPiArICAgICAgU3RhdHVzID0gZ0JT LT5IYW5kbGVQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlQnVmZmVy W0luZGV4XSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2Nv bEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVzYlJuZGlzRGF0YVBh dGgNCj4gKyAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgICAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPiArICAgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiVXNiIFJuZGlzIERl dmljZVBhdGggbm90IGZvdW5kXG4iKSk7DQo+ICsgICAgICAgIGJyZWFrOw0KPiArICAgICAgfQ0K PiArDQo+ICsgICAgICBTdGF0dXMgPSBJc1NhbWVEZXZpY2UgKFVzYlJuZGlzRGF0YVBhdGgsIFVz YkNkY0RhdGFQYXRoKTsNCj4gKw0KPiArICAgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4gKyAgICAgICAgKlJuZGlzSGFuZGxlID0gSGFuZGxlQnVmZmVyW0luZGV4XTsNCj4gKyAgICAg ICAgKkNkY1VzYklvICAgID0gVXNiSW87DQo+ICsgICAgICAgIEZyZWVQb29sIChIYW5kbGVCdWZm ZXIpOw0KPiArICAgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4g KyAgfSAgIC8vIEVuZCBvZiBGb3IgbG9vcA0KPiArDQo+ICsgIEZyZWVQb29sIChIYW5kbGVCdWZm ZXIpOw0KPiArDQo+ICsgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPiArfQ0KPiArDQo+ICsvKioN Cj4gKyAgVVNCIFJuZGlzIERyaXZlciBCaW5kaW5nIFN1cHBvcnQuDQo+ICsNCj4gKyAgQHBhcmFt W2luXSAgVGhpcyAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2wgaW5zdGFuY2UgcG9pbnRlci4N Cj4gKyAgQHBhcmFtW2luXSAgQ29udHJvbGxlckhhbmRsZSAgICAgICAgSGFuZGxlIG9mIGRldmlj ZSB0byB0ZXN0Lg0KPiArICBAcGFyYW1baW5dICBSZW1haW5pbmdEZXZpY2VQYXRoICAgICBPcHRp b25hbCBwYXJhbWV0ZXIgdXNlIHRvIHBpY2sgYSBzcGVjaWZpYyBjaGlsZA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UgdG8gc3RhcnQuDQo+ICsNCj4gKyAg QHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMg dGhpcyBkZXZpY2UuDQo+ICsgIEByZXR2YWwgRUZJX0FMUkVBRFlfU1RBUlRFRCAgICAgICAgIFRo aXMgZHJpdmVyIGlzIGFscmVhZHkgcnVubmluZyBvbiB0aGlzIGRldmljZS4NCj4gKyAgQHJldHZh bCBvdGhlciAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBkcml2ZXIgZG9lcyBub3Qgc3VwcG9y dCB0aGlzIGRldmljZS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4g K1VzYlJuZGlzRHJpdmVyU3VwcG9ydGVkICgNCj4gKyAgSU4gRUZJX0RSSVZFUl9CSU5ESU5HX1BS T1RPQ09MICAqVGhpcywNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250 cm9sbGVySGFuZGxlLA0KPiArICBJTiBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICpSZW1h aW5pbmdEZXZpY2VQYXRoDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAg U3RhdHVzOw0KPiArICBFRklfVVNCX0lPX1BST1RPQ09MICAqVXNiSW87DQo+ICsNCj4gKyAgU3Rh dHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxl ckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsDQo+ ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiSW8sDQo+ICsgICAgICAgICAgICAgICAg ICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJv bGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0JZX0RS SVZFUg0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBJ c1N1cHBvcnRlZERldmljZSAoVXNiSW8pID8gRUZJX1NVQ0NFU1MgOiBFRklfVU5TVVBQT1JURUQ7 DQo+ICsNCj4gKyAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgIENvbnRyb2xsZXJI YW5kbGUsDQo+ICsgICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAg VGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUN Cj4gKyAgICAgICAgICk7DQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0K PiArICBVU0IgUk5ESVMgRHJpdmVyIEJpbmRpbmcgU3RhcnQuDQo+ICsNCj4gKyAgQHBhcmFtW2lu XSAgVGhpcyAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2wgaW5zdGFuY2UgcG9pbnRlci4NCj4g KyAgQHBhcmFtW2luXSAgQ29udHJvbGxlckhhbmRsZSAgICAgICAgSGFuZGxlIG9mIGRldmljZSB0 byBiaW5kIGRyaXZlciB0by4NCj4gKyAgQHBhcmFtW2luXSAgUmVtYWluaW5nRGV2aWNlUGF0aCAg ICAgT3B0aW9uYWwgcGFyYW1ldGVyIHVzZSB0byBwaWNrIGEgc3BlY2lmaWMgY2hpbGQNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHRvIHN0YXJ0Lg0KPiAr DQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgIFRoaXMgZHJpdmVyIGlz IGFkZGVkIHRvIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9S ICAgICAgICAgICAgVGhpcyBkcml2ZXIgY291bGQgbm90IGJlIHN0YXJ0ZWQgZHVlIHRvIGEgZGV2 aWNlIGVycm9yDQo+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICAgICAgIFRoZSBk cml2ZXIgY291bGQgbm90IGluc3RhbGwgc3VjY2Vzc2Z1bGx5IGR1ZSB0byBhIGxhY2sgb2YgcmVz b3VyY2VzLg0KPiArICBAcmV0dmFsIG90aGVyICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGRy aXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZGV2aWNlDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NU QVRVUw0KPiArRUZJQVBJDQo+ICtVc2JSbmRpc0RyaXZlclN0YXJ0ICgNCj4gKyAgSU4gRUZJX0RS SVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAg ICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICBJTiBFRklfREVWSUNFX1BBVEhfUFJP VE9DT0wgICAgICpSZW1haW5pbmdEZXZpY2VQYXRoDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NU QVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBVU0JfUk5ESVNfREVWSUNFICAg ICAgICAgICAgICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NP TCAgICAgICpVc2JFdGhQYXRoOw0KPiArICBFRklfVVNCX0lPX1BST1RPQ09MICAgICAgICAgICAq VXNiSW87DQo+ICsgIEVGSV9VU0JfSU5URVJGQUNFX0RFU0NSSVBUT1IgIEludGVyZmFjZTsNCj4g KyAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgUm5kaXNIYW5kbGU7DQo+ICsNCj4gKyAg Um5kaXNIYW5kbGUgPSBDb250cm9sbGVySGFuZGxlOw0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+ T3BlblByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ ICsgICAgICAgICAgICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAg ICAgICAgICAgKFZPSUQgKiopJlVzYklvLA0KPiArICAgICAgICAgICAgICAgICAgVGhpcy0+RHJp dmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUs DQo+ICsgICAgICAgICAgICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9CWV9EUklWRVINCj4gKyAg ICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAg ICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5PcGVuUHJv dG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAg ICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAg ICAgICAgIChWT0lEICoqKSZVc2JFdGhQYXRoLA0KPiArICAgICAgICAgICAgICAgICAgVGhpcy0+ RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5k bGUsDQo+ICsgICAgICAgICAgICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9CWV9EUklWRVINCj4g KyAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g KyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxl LA0KPiArICAgICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICBU aGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxl DQo+ICsgICAgICAgICAgICk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ ICsgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0K PiArICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgVGhp cy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4g KyAgICAgICAgICk7DQo+ICsNCj4gKyAgLy8gQ29udHJvbHMgY29tZSBoZXJlIGZvciBSTkRJUyBh bmQgQ0RDLiBJZiBpdCBpcyBDREMsIGNoZWNrIHdoZXRoZXIgUk5ESVMgaXMgcHJlc2VudCBvbiB0 aGUgc2FtZSBjb250cm9sbGVyIG9yIG5vdC4NCj4gKyAgaWYgKElzVXNiQ2RjRGF0YSAoVXNiSW8p KSB7DQo+ICsgICAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXMgQ0RDRGF0YSBpbnRlcmZhY2Ug Zm91bmRcbiIpKTsNCj4gKw0KPiArICAgIC8vIEZpbmQgdGhlIHBhcmVudCBSTkRJUyBhbmQgdXBk YXRlIHRoZSBVc2JJbyBmb3IgdGhlIENEQyBkZXZpY2UNCj4gKyAgICBTdGF0dXMgPSBVcGRhdGVS bmRpc0RldmljZSAoDQo+ICsgICAgICAgICAgICAgICBVc2JFdGhQYXRoLA0KPiArICAgICAgICAg ICAgICAgJlVzYlJuZGlzRGV2aWNlDQo+ICsgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgICAg aWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywg IlJuZGlzIE1hdGNoaW5nIGludGVyZmFjZSBmb3VuZFxuIikpOw0KPiArICAgICAgVXNiUm5kaXNE ZXZpY2UtPlVzYkNkY0RhdGFIYW5kbGUgPSBDb250cm9sbGVySGFuZGxlOw0KPiArICAgICAgVXNi Um5kaXNEZXZpY2UtPlVzYklvQ2RjRGF0YSAgICAgPSBVc2JJbzsNCj4gKyAgICAgIEdldEVuZHBv aW50IChVc2JSbmRpc0RldmljZS0+VXNiSW9DZGNEYXRhLCBVc2JSbmRpc0RldmljZSk7DQo+ICsg ICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICAvLyBDaGVjayBp ZiBSbkRpcyBleGlzdA0KPiArICAgICAgU3RhdHVzID0gRmluZE1hdGNoaW5nUm5kaXNEZXYgKA0K PiArICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAg ICAmVXNiSW8sDQo+ICsgICAgICAgICAgICAgICAgICZSbmRpc0hhbmRsZQ0KPiArICAgICAgICAg ICAgICAgICApOw0KPiArDQo+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsg ICAgICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICBDb250cm9sbGVy SGFuZGxlLA0KPiArICAgICAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gKyAg ICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAg ICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICAgICApOw0KPiArICAgICAgICByZXR1 cm4gU3RhdHVzOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIFVzYlJu ZGlzRGV2aWNlID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChVU0JfUk5ESVNfREVWSUNFKSk7 DQo+ICsNCj4gKyAgaWYgKCFVc2JSbmRpc0RldmljZSkgew0KPiArICAgIERFQlVHICgoREVCVUdf RVJST1IsICJBbGxvY2F0ZVplcm9Qb29sIEZhaWxcbiIpKTsNCj4gKw0KPiArICAgIGdCUy0+Q2xv c2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAg ICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgIFRoaXMtPkRyaXZlckJp bmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAg ICAgKTsNCj4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgIH0NCj4gKw0K PiArICBTdGF0dXMgPSBMb2FkQWxsRGVzY3JpcHRvciAoDQo+ICsgICAgICAgICAgICAgVXNiSW8s DQo+ICsgICAgICAgICAgICAgJlVzYlJuZGlzRGV2aWNlLT5Db25maWcNCj4gKyAgICAgICAgICAg ICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgREVCVUcgKChERUJV R19FUlJPUiwgIiVhOkxvYWRBbGxEZXNjcmlwdG9yIHN0YXR1cyA9ICVyXG4iLCBfX0ZVTkNUSU9O X18sIFN0YXR1cykpOw0KPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAg IENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQs DQo+ICsgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAg IENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgKTsNCj4gKyAgICBGcmVlUG9vbCAoVXNi Um5kaXNEZXZpY2UpOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBT dGF0dXMgPSBVc2JJby0+VXNiR2V0SW50ZXJmYWNlRGVzY3JpcHRvciAoDQo+ICsgICAgICAgICAg ICAgICAgICAgIFVzYklvLA0KPiArICAgICAgICAgICAgICAgICAgICAmSW50ZXJmYWNlDQo+ICsg ICAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g KyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6VXNiR2V0SW50ZXJmYWNlRGVzY3JpcHRvciBz dGF0dXMgPSAlclxuIiwgX19GVU5DVElPTl9fLCBTdGF0dXMpKTsNCj4gKyAgICBnQlMtPkNsb3Nl UHJvdG9jb2wgKA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAg ICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5k aW5nSGFuZGxlLA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAg ICk7DQo+ICsgICAgRnJlZVBvb2wgKFVzYlJuZGlzRGV2aWNlLT5Db25maWcpOw0KPiArICAgIEZy ZWVQb29sIChVc2JSbmRpc0RldmljZSk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0K PiArDQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5TaWduYXR1cmUgICAgICAgICAgICAgICAgICAgICAg ICAgID0gVVNCX1JORElTX1NJR05BVFVSRTsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPk51bU9mSW50 ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgPSBJbnRlcmZhY2UuSW50ZXJmYWNlTnVtYmVyOw0K PiArICBVc2JSbmRpc0RldmljZS0+VXNiUm5kaXNIYW5kbGUgICAgICAgICAgICAgICAgICAgICA9 IFJuZGlzSGFuZGxlOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiQ2RjRGF0YUhhbmRsZSAgICAg ICAgICAgICAgICAgICA9IDA7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JJbyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgID0gVXNiSW87DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGgu VXNiRXRoUmVjZWl2ZSAgICAgICAgICAgICAgID0gUm5kaXNVbmRpUmVjZWl2ZTsNCj4gKyAgVXNi Um5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhUcmFuc21pdCAgICAgICAgICAgICAgPSBSbmRpc1Vu ZGlUcmFuc21pdDsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhJbnRlcnJ1cHQg ICAgICAgICAgICAgPSBVc2JSbmRpc0ludGVycnVwdDsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVz YkV0aC5Vc2JFdGhNYWNBZGRyZXNzICAgICAgICAgICAgPSBHZXRVc2JFdGhNYWNBZGRyZXNzOw0K PiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aE1heEJ1bGtTaXplICAgICAgICAgICA9 IFVzYkV0aEJ1bGtTaXplOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkhlYWRlckZ1 bkRlc2NyaXB0b3IgICAgICA9IEdldFVzYkhlYWRlckZ1bkRlc2NyaXB0b3I7DQo+ICsgIFVzYlJu ZGlzRGV2aWNlLT5Vc2JFdGguVXNiVW5pb25GdW5EZXNjcmlwdG9yICAgICAgID0gR2V0VXNiVW5p b25GdW5EZXNjcmlwdG9yOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aEZ1bkRl c2NyaXB0b3IgICAgICAgICA9IEdldFVzYlJuZGlzRnVuRGVzY3JpcHRvcjsNCj4gKyAgVXNiUm5k aXNEZXZpY2UtPlVzYkV0aC5TZXRVc2JFdGhNY2FzdEZpbHRlciAgICAgICAgPSBTZXRVc2JSbmRp c01jYXN0RmlsdGVyOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlNldFVzYkV0aFBvd2Vy UGF0dGVybkZpbHRlciA9IFNldFVzYlJuZGlzUG93ZXJGaWx0ZXI7DQo+ICsgIFVzYlJuZGlzRGV2 aWNlLT5Vc2JFdGguR2V0VXNiRXRoUG93ZXJQYXR0ZXJuRmlsdGVyID0gR2V0VXNiUm5kaXNQb3dl ckZpbHRlcjsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5TZXRVc2JFdGhQYWNrZXRGaWx0 ZXIgICAgICAgPSBTZXRVc2JSbmRpc1BhY2tldEZpbHRlcjsNCj4gKyAgVXNiUm5kaXNEZXZpY2Ut PlVzYkV0aC5HZXRVc2JFdGhTdGF0aXN0aWMgICAgICAgICAgPSBHZXRSbmRpc1N0YXRpc3RpYzsN Cj4gKw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaUdl dFN0YXRlICAgICAgICA9IFJuZGlzRHVtbXlSZXR1cm47DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5V c2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3RhcnQgICAgICAgICAgID0gUm5kaXNVbmRpU3Rh cnQ7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3Rv cCAgICAgICAgICAgID0gUm5kaXNVbmRpU3RvcDsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0 aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlHZXRJbml0SW5mbyAgICAgPSBSbmRpc1VuZGlHZXRJbml0 SW5mbzsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlH ZXRDb25maWdJbmZvICAgPSBSbmRpc1VuZGlHZXRDb25maWdJbmZvOw0KPiArICBVc2JSbmRpc0Rl dmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaUluaXRpYWxpemUgICAgICA9IFJuZGlz VW5kaUluaXRpYWxpemU7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5V c2JFdGhVbmRpUmVzZXQgICAgICAgICAgID0gUm5kaXNVbmRpUmVzZXQ7DQo+ICsgIFVzYlJuZGlz RGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpU2h1dGRvd24gICAgICAgID0gUm5k aXNVbmRpU2h1dGRvd247DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5V c2JFdGhVbmRpSW50ZXJydXB0RW5hYmxlID0gUm5kaXNEdW1teVJldHVybjsNCj4gKyAgVXNiUm5k aXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlSZWNlaXZlRmlsdGVyICAgPSBS bmRpc1VuZGlSZWNlaXZlRmlsdGVyOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0 aFVuZGkuVXNiRXRoVW5kaVN0YXRpb25BZGRyZXNzICA9IFJuZGlzRHVtbXlSZXR1cm47DQo+ICsg IFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3RhdGlzdGljcyAg ICAgID0gTlVMTDsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0 aFVuZGlNY2FzdElwMk1hYyAgICAgPSBSbmRpc0R1bW15UmV0dXJuOw0KPiArICBVc2JSbmRpc0Rl dmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaU52RGF0YSAgICAgICAgICA9IFJuZGlz RHVtbXlSZXR1cm47DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JF dGhVbmRpR2V0U3RhdHVzICAgICAgID0gUm5kaXNVbmRpR2V0U3RhdHVzOw0KPiArICBVc2JSbmRp c0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaUZpbGxIZWFkZXIgICAgICA9IFJu ZGlzRHVtbXlSZXR1cm47DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5V c2JFdGhVbmRpVHJhbnNtaXQgICAgICAgID0gTlVMTDsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVz YkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlSZWNlaXZlICAgICAgICAgPSBOVUxMOw0KPiArDQo+ ICsgIFVzYlJuZGlzRGV2aWNlLT5NYXhUcmFuc2ZlclNpemUgICAgICAgPSBSTkRJU19NQVhfVFJB TlNGRVJfU0laRTsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPk1heFBhY2tldHNQZXJUcmFuc2ZlciA9 IDE7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5QYWNrZXRBbGlnbm1lbnRGYWN0b3IgPSAwOw0KPiAr DQo+ICsgIEluaXRpYWxpemVMaXN0SGVhZCAoJlVzYlJuZGlzRGV2aWNlLT5SZWNlaXZlUGFja2V0 TGlzdCk7DQo+ICsNCj4gKyAgLy8gVGhpcyBpcyBhIFJORElTIGludGVyZmFjZS4gU2VlIHdoZXRo ZXIgQ0RDLURBVEEgaW50ZXJmYWNlIGhhcyBhbHJlYWR5IGJlZW4gY29ubmVjdGVkIG9yIG5vdA0K PiArICBGaW5kTWF0Y2hpbmdDZGNEYXRhIChVc2JSbmRpc0RldmljZSk7DQo+ICsNCj4gKyAgaWYg KFVzYlJuZGlzRGV2aWNlLT5Vc2JJb0NkY0RhdGEpIHsNCj4gKyAgICBTdGF0dXMgPSBnQlMtPklu c3RhbGxQcm90b2NvbEludGVyZmFjZSAoDQo+ICsgICAgICAgICAgICAgICAgICAgICZDb250cm9s bGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xH dWlkLA0KPiArICAgICAgICAgICAgICAgICAgICBFRklfTkFUSVZFX0lOVEVSRkFDRSwNCj4gKyAg ICAgICAgICAgICAgICAgICAgJihVc2JSbmRpc0RldmljZS0+VXNiRXRoKQ0KPiArICAgICAgICAg ICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAg IGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwN Cj4gKyAgICAgICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAg IFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgQ29udHJvbGxlckhh bmRsZQ0KPiArICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgICAgIEZyZWVQb29sIChVc2JSbmRp c0RldmljZS0+Q29uZmlnKTsNCj4gKyAgICAgIEZyZWVQb29sIChVc2JSbmRpc0RldmljZSk7DQo+ ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0NCj4gKw0KPiArICAgIEdldEVuZHBvaW50 IChVc2JSbmRpc0RldmljZS0+VXNiSW8sIFVzYlJuZGlzRGV2aWNlKTsNCj4gKw0KPiArICAgIERF QlVHICgoREVCVUdfSU5GTywgIlJuZGlzIERldmljZUhhbmRsZSAlclxuIiwgVXNiUm5kaXNEZXZp Y2UtPlVzYlJuZGlzSGFuZGxlKSk7DQo+ICsgICAgREVCVUcgKChERUJVR19JTkZPLCAiQ0RDIERl dmljZUhhbmRsZSAlclxuIiwgVXNiUm5kaXNEZXZpY2UtPlVzYkNkY0RhdGFIYW5kbGUpKTsNCj4g KyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBGcmVlUG9vbCAoVXNi Um5kaXNEZXZpY2UtPkNvbmZpZyk7DQo+ICsgIEZyZWVQb29sIChVc2JSbmRpc0RldmljZSk7DQo+ ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ2hl Y2thbmRTdG9wUm5kaXNEZXZpY2UNCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAg ICAgICAgICBQcm90b2NvbCBpbnN0YW5jZSBwb2ludGVyLg0KPiArICBAcGFyYW1baW5dICBDb250 cm9sbGVySGFuZGxlICAgICBIYW5kbGUgb2YgZGV2aWNlIHRvIGJpbmQgZHJpdmVyIHRvLg0KPiAr DQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgVGhpcyBkcml2ZXIgaXMgYWRkZWQg dG8gQ29udHJvbGxlckhhbmRsZQ0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgIFRo aXMgZHJpdmVyIGNvdWxkIG5vdCBiZSBzdGFydGVkIGR1ZSB0byBhIGRldmljZSBlcnJvcg0KPiAr ICBAcmV0dmFsIG90aGVyICAgICAgICAgICAgICAgIFRoaXMgZHJpdmVyIGRvZXMgbm90IHN1cHBv cnQgdGhpcyBkZXZpY2UNCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4g K0NoZWNrYW5kU3RvcFJuZGlzRGV2aWNlICgNCj4gKyAgSU4gIEVGSV9EUklWRVJfQklORElOR19Q Uk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENv bnRyb2xsZXJIYW5kbGUNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICBT dGF0dXM7DQo+ICsgIEVGSV9VU0JfSU9fUFJPVE9DT0wgICpVc2JJbzsNCj4gKw0KPiArICBTdGF0 dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVy SGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4g KyAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZVc2JJbywNCj4gKyAgICAgICAgICAgICAgICAg IFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9s bGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgRUZJX09QRU5fUFJPVE9DT0xfR0VUX1BS T1RPQ09MDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChJc1Vz YlJuZGlzIChVc2JJbykpIHsNCj4gKyAgICBTdGF0dXMgPSBnQlMtPkNsb3NlUHJvdG9jb2wgKA0K PiArICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAg ICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgICBU aGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICBDb250cm9s bGVySGFuZGxlDQo+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgREVCVUcgKChERUJV R19FUlJPUiwgIlJuZGlzIENvbnRyb2xsZXJIYW5kbGUgU3RvcCAlclxuIiwgU3RhdHVzKSk7DQo+ ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBFRklfVU5TVVBQ T1JURUQ7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBVU0IgUm5kaXMgRHJpdmVyIEJpbmRpbmcg U3RvcC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgICAgUHJvdG9j b2wgaW5zdGFuY2UgcG9pbnRlci4NCj4gKyAgQHBhcmFtW2luXSAgQ29udHJvbGxlckhhbmRsZSAg ICAgIEhhbmRsZSBvZiBkZXZpY2UgdG8gc3RvcCBkcml2ZXIgb24NCj4gKyAgQHBhcmFtW2luXSAg TnVtYmVyT2ZDaGlsZHJlbiAgICAgIE51bWJlciBvZiBIYW5kbGVzIGluIENoaWxkSGFuZGxlQnVm ZmVyLiBJZiBudW1iZXIgb2YNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNoaWxkcmVuIGlzIHplcm8gc3RvcCB0aGUgZW50aXJlIGJ1cyBkcml2ZXIuDQo+ICsgIEBwYXJh bVtpbl0gIENoaWxkSGFuZGxlQnVmZmVyICAgICBMaXN0IG9mIENoaWxkIEhhbmRsZXMgdG8gU3Rv cC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgVGhpcyBkcml2 ZXIgaXMgcmVtb3ZlZCBDb250cm9sbGVySGFuZGxlDQo+ICsgIEByZXR2YWwgb3RoZXIgICAgICAg ICAgICAgICAgICAgICBUaGlzIGRyaXZlciB3YXMgbm90IHJlbW92ZWQgZnJvbSB0aGlzIGRldmlj ZQ0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVXNiUm5kaXNEcml2 ZXJTdG9wICgNCj4gKyAgSU4gIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ ICsgIElOICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlck9mQ2hpbGRyZW4sDQo+ ICsgIElOICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICpDaGlsZEhhbmRsZUJ1ZmZlcg0K PiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0K PiArICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpVc2JFdGhQcm90b2NvbDsNCj4gKyAg VVNCX1JORElTX0RFVklDRSAgICAgICAgICAgICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsNCj4gKyAg REVCVUcgKChERUJVR19JTkZPLCAiVXNiUm5kaXNEcml2ZXJTdG9wIENvbnRyb2xsZXJIYW5kbGUg JWx4XG4iLCBDb250cm9sbGVySGFuZGxlKSk7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5PcGVu UHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAg ICAgICAgICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAg ICAgICAgICAoVk9JRCAqKikmVXNiRXRoUHJvdG9jb2wsDQo+ICsgICAgICAgICAgICAgICAgICBU aGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxl ckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0dFVF9QUk9U T0NPTA0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiArICAgIFN0YXR1cyA9IENoZWNrYW5kU3RvcFJuZGlzRGV2aWNlIChUaGlzLCBDb250 cm9sbGVySGFuZGxlKTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAg VXNiUm5kaXNEZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNFX0ZST01fVEhJUyAoVXNiRXRoUHJvdG9j b2wpOw0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAg ICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+VXNiQ2RjRGF0YUhhbmRsZSwNCj4gKyAgICAgICAg ICAgICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICBU aGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgVXNiUm5kaXNE ZXZpY2UtPlVzYkNkY0RhdGFIYW5kbGUNCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6 Q2xvc2VQcm90b2NvbCBzdGF0dXMgPSAlclxuIiwgX19GVU5DVElPTl9fLCBTdGF0dXMpKTsNCj4g KyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+VW5pbnN0YWxsUHJvdG9jb2xJbnRlcmZhY2Ug KA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAg ICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICBV c2JFdGhQcm90b2NvbA0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBT dGF0dXMgPSBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJv bGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQs DQo+ICsgICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAg ICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICAgICAgICAgKTsN Cj4gKw0KPiArICBGcmVlUG9vbCAoVXNiUm5kaXNEZXZpY2UtPkNvbmZpZyk7DQo+ICsgIEZyZWVQ b29sIChVc2JSbmRpc0RldmljZSk7DQo+ICsNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiVXNi Um5kaXNEcml2ZXJTdG9wICVyXG4iLCBTdGF0dXMpKTsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgIEVudHJ5cG9pbnQgb2YgUk5ESVMgRHJpdmVyLg0KPiArDQo+ ICsgIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGVudHJ5cG9pbnQgb2YgUk5ESVMgRHJpdmVyLiBJdCBp bnN0YWxscyBEcml2ZXIgQmluZGluZw0KPiArICBQcm90b2NvbHMgdG9nZXRoZXIgd2l0aCBDb21w b25lbnQgTmFtZSBQcm90b2NvbHMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgSW1hZ2VIYW5kbGUg ICAgICAgVGhlIGZpcm13YXJlIGFsbG9jYXRlZCBoYW5kbGUgZm9yIHRoZSBFRkkgaW1hZ2UuDQo+ ICsgIEBwYXJhbVtpbl0gIFN5c3RlbVRhYmxlICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJIFN5 c3RlbSBUYWJsZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUg ZW50cnkgcG9pbnQgaXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ICsqKi8NCj4gK0VG SV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVXNiUm5kaXNFbnRyeSAoDQo+ICsgIElOIEVGSV9IQU5E TEUgICAgICAgIEltYWdlSGFuZGxlLA0KPiArICBJTiBFRklfU1lTVEVNX1RBQkxFICAqU3lzdGVt VGFibGUNCj4gKyAgKQ0KPiArew0KPiArICBnVXNiUm5kaXNEcml2ZXJCaW5kaW5nLkRyaXZlckJp bmRpbmdIYW5kbGUgPSBJbWFnZUhhbmRsZTsNCj4gKyAgZ1VzYlJuZGlzRHJpdmVyQmluZGluZy5J bWFnZUhhbmRsZSAgICAgICAgID0gSW1hZ2VIYW5kbGU7DQo+ICsNCj4gKyAgcmV0dXJuIGdCUy0+ SW5zdGFsbE11bHRpcGxlUHJvdG9jb2xJbnRlcmZhY2VzICgNCj4gKyAgICAgICAgICAgICAgICAm Z1VzYlJuZGlzRHJpdmVyQmluZGluZy5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAg ICAgICAgICZnRWZpRHJpdmVyQmluZGluZ1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAg ICAmZ1VzYlJuZGlzRHJpdmVyQmluZGluZywNCj4gKyAgICAgICAgICAgICAgICAmZ0VmaUNvbXBv bmVudE5hbWUyUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICZnVXNiUm5kaXNDb21w b25lbnROYW1lMiwNCj4gKyAgICAgICAgICAgICAgICBOVUxMDQo+ICsgICAgICAgICAgICAgICAg KTsNCj4gK30NCj4gZGlmZiAtLWdpdCBhL1VzYk5ldHdvcmtQa2cvVXNiUm5kaXMvVXNiUm5kaXMu aCBiL1VzYk5ldHdvcmtQa2cvVXNiUm5kaXMvVXNiUm5kaXMuaA0KPiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi43NzU4MDcwNDI0DQo+IC0tLSAvZGV2L251bGwNCj4g KysrIGIvVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpcy5oDQo+IEBAIC0wLDAgKzEsNTg2 IEBADQo+ICsvKiogQGZpbGUNCj4gKyAgSGVhZGVyIGZpbGUgZm9yIGZvciBVU0IgUm5kaXMgZHJp dmVyDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDIzLCBBbWVyaWNhbiBNZWdhdHJlbmRzIElu dGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKyAgU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gKyoqLw0KPiArDQo+ICsjaWZu ZGVmIF9VU0JfUk5ESVNfSF8NCj4gKyNkZWZpbmUgX1VTQl9STkRJU19IXw0KPiArDQo+ICsjaW5j bHVkZSA8TGlicmFyeS9VZWZpRHJpdmVyRW50cnlQb2ludC5oPg0KPiArI2luY2x1ZGUgPExpYnJh cnkvVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZp TGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9EZXZpY2VQYXRoTGliLmg+DQo+ICsjaW5jbHVk ZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2Nh dGlvbkxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KPiArI2lu Y2x1ZGUgPExpYnJhcnkvVWVmaVVzYkxpYi5oPg0KPiArI2luY2x1ZGUgPFByb3RvY29sL1VzYklv Lmg+DQo+ICsjaW5jbHVkZSA8UHJvdG9jb2wvRWRrSUlVc2JFdGhlcm5ldFByb3RvY29sLmg+DQo+ ICsNCj4gK3R5cGVkZWYgc3RydWN0IF9SRU1PVEVfTkRJU19NU0dfSEVBREVSIFJFTU9URV9ORElT X01TR19IRUFERVI7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgICAg ICAgICAgICAgICAgICAgICAgIFNpZ25hdHVyZTsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1BS T1RPQ09MICAgIFVzYkV0aDsNCj4gKyAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgIFVz YkNkY0RhdGFIYW5kbGU7DQo+ICsgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICBVc2JS bmRpc0hhbmRsZTsNCj4gKyAgRUZJX1VTQl9JT19QUk9UT0NPTCAgICAgICAgICAgICpVc2JJbzsN Cj4gKyAgRUZJX1VTQl9JT19QUk9UT0NPTCAgICAgICAgICAgICpVc2JJb0NkY0RhdGE7DQo+ICsg IEVGSV9VU0JfQ09ORklHX0RFU0NSSVBUT1IgICAgICAqQ29uZmlnOw0KPiArICBVSU5UOCAgICAg ICAgICAgICAgICAgICAgICAgICAgTnVtT2ZJbnRlcmZhY2U7DQo+ICsgIFVJTlQ4ICAgICAgICAg ICAgICAgICAgICAgICAgICBCdWxrSW5FbmRwb2ludDsNCj4gKyAgVUlOVDggICAgICAgICAgICAg ICAgICAgICAgICAgIEJ1bGtPdXRFbmRwb2ludDsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAg ICAgICAgICAgIEludGVycnVwRW5kcG9pbnQ7DQo+ICsgIEVGSV9NQUNfQUREUkVTUyAgICAgICAg ICAgICAgICBNYWNBZGRyZXNzOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAg UmVxdWVzdElkOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgTWVkaXVtOw0K PiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgTWF4UGFja2V0c1BlclRyYW5zZmVy Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgTWF4VHJhbnNmZXJTaXplOw0K PiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgUGFja2V0QWxpZ25tZW50RmFjdG9y Ow0KPiArICBMSVNUX0VOVFJZICAgICAgICAgICAgICAgICAgICAgUmVjZWl2ZVBhY2tldExpc3Q7 DQo+ICt9IFVTQl9STkRJU19ERVZJQ0U7DQo+ICsNCj4gKyNkZWZpbmUgVVNCX1JORElTX0RSSVZF Ul9WRVJTSU9OICAgICAgIDENCj4gKyNkZWZpbmUgVVNCX1RYX0VUSEVSTkVUX0JVTEtfVElNRU9V VCAgIDMwMDANCj4gKyNkZWZpbmUgVVNCX1JYX0VUSEVSTkVUX0JVTEtfVElNRU9VVCAgIDMNCj4g KyNkZWZpbmUgVVNCX0VUSEVSTkVUX1RSQU5TRkVSX1RJTUVPVVQgIDIwMA0KPiArDQo+ICsjZGVm aW5lIExBTl9CVUxLSU5fQ01EX0NPTlRST0wgICAgICAxDQo+ICsjZGVmaW5lIE1BWElNVU1fU1RP UEJVTEtJTl9DTlQgICAgICAzMDAgICAgICAgIC8vIEluZGljYXRpbmcgbWF4aW11bSBjb3VudHMg Zm9yIHdhaXRpbmcgYnVsayBpbiBjb21tYW5kDQo+ICsjZGVmaW5lIE1JTklNVU1fU1RPUEJVTEtJ Tl9DTlQgICAgICAzICAgICAgICAgIC8vIEluZGljYXRpbmcgbWluaW11bSBjb3VudHMgZm9yIHdh aXRpbmcgYnVsayBpbiBjb21tYW5kDQo+ICsjZGVmaW5lIEJVTEtJTl9DTURfUE9MTElOR19DTlQg ICAgICAzMDAgICAgICAgIC8vIEluZGljYXRpbmcgdGhlIHdhaXRpbmcgY291bnRzIGZvciBzZW5k IGJ1bGsgaW4gY29tbWFuZCB3aGVuIHN5c3RlbSBwZW5kaW5nDQo+ICsjZGVmaW5lIFJORElTX1JF U0VSVkVEX0JZVEVfTEVOR1RIICA4DQo+ICsNCj4gKyNkZWZpbmUgVVNCX1JORElTX1NJR05BVFVS RSAgU0lHTkFUVVJFXzMyKCdyJywgJ24nLCAnZCcsICdzJykNCj4gKyNkZWZpbmUgVVNCX1JORElT X0RFVklDRV9GUk9NX1RISVMoYSkgIENSIChhLCBVU0JfUk5ESVNfREVWSUNFLCBVc2JFdGgsIFVT Ql9STkRJU19TSUdOQVRVUkUpDQo+ICsNCj4gK2V4dGVybiBFRklfQ09NUE9ORU5UX05BTUUyX1BS T1RPQ09MICBnVXNiUm5kaXNDb21wb25lbnROYW1lMjsNCj4gKw0KPiArc3RydWN0IEJJVF9NQVAg ew0KPiArICB1bnNpZ25lZCBpbnQgICAgU3JjOw0KPiArICB1bnNpZ25lZCBpbnQgICAgRHN0Ow0K PiArfTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVc2JSbmRpc0RyaXZlclN1 cHBvcnRlZCAoDQo+ICsgIElOIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ ICsgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4g KyAgSU4gRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAqUmVtYWluaW5nRGV2aWNlUGF0aA0K PiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1VzYlJuZGlzRHJpdmVy U3RhcnQgKA0KPiArICBJTiBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgICpUaGlzLA0KPiAr ICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsg IElOIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgKlJlbWFpbmluZ0RldmljZVBhdGgNCj4g KyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVc2JSbmRpc0RyaXZlclN0 b3AgKA0KPiArICBJTiAgRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAg SU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAg SU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZDaGlsZHJlbiwNCj4gKyAg SU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgKkNoaWxkSGFuZGxlQnVmZmVyDQo+ICsg ICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0xvYWRBbGxEZXNjcmlwdG9yICgNCj4gKyAgSU4g IEVGSV9VU0JfSU9fUFJPVE9DT0wgICAgICAgICpVc2JJbywNCj4gKyAgT1VUIEVGSV9VU0JfQ09O RklHX0RFU0NSSVBUT1IgICoqQ29uZmlnRGVzYw0KPiArICApOw0KPiArDQo+ICtCT09MRUFODQo+ ICtOZXh0RGVzY3JpcHRvciAoDQo+ICsgIElOIEVGSV9VU0JfQ09ORklHX0RFU0NSSVBUT1IgICpE ZXNjLA0KPiArICBJTiBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAqT2Zmc2V0DQo+ICsgICk7 DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0dldEZ1bmN0aW9uYWxEZXNjcmlwdG9yICgNCj4gKyAg SU4gIEVGSV9VU0JfQ09ORklHX0RFU0NSSVBUT1IgICpDb25maWcsDQo+ICsgIElOICBVSU5UOCAg ICAgICAgICAgICAgICAgICAgICBGdW5EZXNjcmlwdG9yVHlwZSwNCj4gKyAgT1VUIFZPSUQgICAg ICAgICAgICAgICAgICAgICAgICpEYXRhQnVmZmVyDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4g K0dldEVuZHBvaW50ICgNCj4gKyAgSU4gICAgICBFRklfVVNCX0lPX1BST1RPQ09MICAqVXNiSW8s DQo+ICsgIElOIE9VVCAgVVNCX1JORElTX0RFVklDRSAgICAgKlVzYlJuZGlzRGV2aWNlDQo+ICsg ICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVXNiUm5kaXNJbnRlcnJ1cHQg KA0KPiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBC T09MRUFOICAgICAgICAgICAgICAgICAgICAgIElzTmV3VHJhbnNmZXIsDQo+ICsgIElOIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgUG9sbGluZ0ludGVydmFsLA0KPiArICBJTiBFRklfVVNC X0RFVklDRV9SRVFVRVNUICAgICAgICpSZXF1c3QNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRV Uw0KPiArRUZJQVBJDQo+ICtJbnRlcnJ1cHRDYWxsYmFjayAoDQo+ICsgIElOICBWT0lEICAgICpE YXRhLA0KPiArICBJTiAgVUlOVE4gICBEYXRhTGVuZ3RoLA0KPiArICBJTiAgVk9JRCAgICAqQ29u dGV4dCwNCj4gKyAgSU4gIFVJTlQzMiAgU3RhdHVzDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFU VVMNCj4gK0VGSUFQSQ0KPiArR2V0VXNiRXRoTWFjQWRkcmVzcyAoDQo+ICsgIElOICBFREtJSV9V U0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBPVVQgRUZJX01BQ19BRERSRVNTICAg ICAgICAgICAgICAqTWFjQWRkcmVzcw0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtF RklBUEkNCj4gK1VzYkV0aEJ1bGtTaXplICgNCj4gKyAgSU4gIEVES0lJX1VTQl9FVEhFUk5FVF9Q Uk9UT0NPTCAgKlRoaXMsDQo+ICsgIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICpC dWxrU2l6ZQ0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlz RHVtbXlSZXR1cm4gKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFU QSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlz VW5kaVN0YXJ0ICgNCj4gKyAgSU4gUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOIE5JQ19EQVRBICAq TmljDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRp U3RvcCAoDQo+ICsgIElOIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiBOSUNfREFUQSAgKk5pYw0K PiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaUdldElu aXRJbmZvICgNCj4gKyAgSU4gUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOIE5JQ19EQVRBICAqTmlj DQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRpR2V0 Q29uZmlnSW5mbyAoDQo+ICsgIElOIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiBOSUNfREFUQSAg Kk5pYw0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5k aUluaXRpYWxpemUgKA0KPiArICBJTiBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gTklDX0RBVEEg ICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1Vu ZGlUcmFuc21pdCAoDQo+ICsgIElOICAgICAgUFhFX0NEQiAgICAgICAgICAgICAgICAgICAgICAq Q2RiLA0KPiArICBJTiAgICAgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ ICsgIElOICAgICAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAqQnVsa091dERhdGEsDQo+ ICsgIElOIE9VVCAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAqRGF0YUxlbmd0aA0KPiAr ICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaVJlY2VpdmUg KA0KPiArICBJTiAgICAgUFhFX0NEQiAgICAgICAgICAgICAgICAgICAgICAqQ2RiLA0KPiArICBJ TiAgICAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gT1VUIFZP SUQgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1bGtJbkRhdGEsDQo+ICsgIElOIE9VVCBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgICpEYXRhTGVuZ3RoDQo+ICsgICk7DQo+ICsNCj4gK0VG SV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRpUmVzZXQgKA0KPiArICBJTiBQWEVfQ0RC ICAgKkNkYiwNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NU QVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlTaHV0ZG93biAoDQo+ICsgIElOIFBYRV9DREIg ICAqQ2RiLA0KPiArICBJTiBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtFRklfU1RB VFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaVJlY2VpdmVGaWx0ZXIgKA0KPiArICBJTiBQWEVf Q0RCICAgKkNkYiwNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArRUZJ X1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlHZXRTdGF0dXMgKA0KPiArICBJTiBQWEVf Q0RCICAgKkNkYiwNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArRUZJ X1NUQVRVUw0KPiArRUZJQVBJDQo+ICtHZXRVc2JIZWFkZXJGdW5EZXNjcmlwdG9yICgNCj4gKyAg SU4gIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIE9VVCBVU0JfSEVB REVSX0ZVTl9ERVNDUklQVE9SICAgICpVc2JIZWFkZXJGdW5EZXNjcmlwdG9yDQo+ICsgICk7DQo+ ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArR2V0VXNiVW5pb25GdW5EZXNjcmlwdG9y ICgNCj4gKyAgSU4gIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIE9V VCBVU0JfVU5JT05fRlVOX0RFU0NSSVBUT1IgICAgICpVc2JVbmlvbkZ1bkRlc2NyaXB0b3INCj4g KyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtHZXRVc2JSbmRpc0Z1bkRl c2NyaXB0b3IgKA0KPiArICBJTiAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywN Cj4gKyAgT1VUIFVTQl9FVEhFUk5FVF9GVU5fREVTQ1JJUFRPUiAgKlVzYkV0aEZ1bkRlc2NyaXB0 b3INCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtTZXRVc2JSbmRp c01jYXN0RmlsdGVyICgNCj4gKyAgSU4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhp cywNCj4gKyAgSU4gVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSwNCj4gKyAgSU4g Vk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAqTWNhc3RBZGRyDQo+ICsgICk7DQo+ICsNCj4g K0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArU2V0VXNiUm5kaXNQb3dlckZpbHRlciAoDQo+ICsg IElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIFVJTlQxNiAg ICAgICAgICAgICAgICAgICAgICAgVmFsdWUsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAg ICAgICAgICAgTGVuZ3RoLA0KPiArICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICpQ YXR0ZXJuRmlsdGVyDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiAr R2V0VXNiUm5kaXNQb3dlckZpbHRlciAoDQo+ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9U T0NPTCAgKlRoaXMsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUs DQo+ICsgIElOIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgKlBhdHRlcm5BY3RpdmUNCj4g KyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtTZXRVc2JSbmRpc1BhY2tl dEZpbHRlciAoDQo+ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUNCj4gKyAgKTsNCj4gKw0K PiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtHZXRSbmRpc1N0YXRpc3RpYyAoDQo+ICsgIElO IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIFVJTlQxNiAgICAg ICAgICAgICAgICAgICAgICAgVmFsdWUsDQo+ICsgIElOIFZPSUQgICAgICAgICAgICAgICAgICAg ICAgICAgKlN0YXRpc3RpYw0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtSbmRpc0Nv bnRyb2xNc2cgKA0KPiArICBJTiAgVVNCX1JORElTX0RFVklDRSAgICAgICAgKlVzYlJuZGlzRGV2 aWNlLA0KPiArICBJTiAgUkVNT1RFX05ESVNfTVNHX0hFQURFUiAgKlJuZGlzTXNnLA0KPiArICBP VVQgUkVNT1RFX05ESVNfTVNHX0hFQURFUiAgKlJuZGlzTXNnUmVzcG9uc2UNCj4gKyAgKTsNCj4g Kw0KPiArRUZJX1NUQVRVUw0KPiArUm5kaXNUcmFuc21pdERhdGFNc2cgKA0KPiArICBJTiAgVVNC X1JORElTX0RFVklDRSAgICAgICAgKlVzYlJuZGlzRGV2aWNlLA0KPiArICBJTiAgUkVNT1RFX05E SVNfTVNHX0hFQURFUiAgKlJuZGlzTXNnLA0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAg ICAgKlRyYW5zZmVyTGVuZ3RoDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK1JuZGlz UmVjZWl2ZURhdGFNc2cgKA0KPiArICBJTiAgVVNCX1JORElTX0RFVklDRSAgICAgICAgKlVzYlJu ZGlzRGV2aWNlLA0KPiArICBJTiAgUkVNT1RFX05ESVNfTVNHX0hFQURFUiAgKlJuZGlzTXNnLA0K PiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgKlRyYW5zZmVyTGVuZ3RoDQo+ICsgICk7 DQo+ICsNCj4gK1ZPSUQNCj4gK1ByaW50Um5kaXNNc2cgKA0KPiArICBJTiAgUkVNT1RFX05ESVNf TVNHX0hFQURFUiAgKlJuZGlzTXNnDQo+ICsgICk7DQo+ICsNCj4gKyNkZWZpbmUgUk5ESVNfTUFK T1JfVkVSU0lPTiAgICAgIDB4MDAwMDAwMDENCj4gKyNkZWZpbmUgUk5ESVNfTUlOT1JfVkVSU0lP TiAgICAgIDB4MDAwMDAwMDANCj4gKyNkZWZpbmUgUk5ESVNfTUFYX1RSQU5TRkVSX1NJWkUgIDB4 NDAwMA0KPiArDQo+ICsjZGVmaW5lIFJORElTX1BBQ0tFVF9NU0cgICAgICAgICAgIDB4MDAwMDAw MDENCj4gKyNkZWZpbmUgUk5ESVNfSU5JVElBTElaRV9NU0cgICAgICAgMHgwMDAwMDAwMg0KPiAr I2RlZmluZSBSTkRJU19JTklUSUFMSVpFX0NNUExUICAgICAweDgwMDAwMDAyDQo+ICsjZGVmaW5l IFJORElTX0hMVF9NU0cgICAgICAgICAgICAgIDB4MDAwMDAwMDMNCj4gKyNkZWZpbmUgUk5ESVNf UVVFUllfTVNHICAgICAgICAgICAgMHgwMDAwMDAwNA0KPiArI2RlZmluZSBSTkRJU19RVUVSWV9D TVBMVCAgICAgICAgICAweDgwMDAwMDA0DQo+ICsjZGVmaW5lIFJORElTX1NFVF9NU0cgICAgICAg ICAgICAgIDB4MDAwMDAwMDUNCj4gKyNkZWZpbmUgUk5ESVNfU0VUX0NNUExUICAgICAgICAgICAg MHg4MDAwMDAwNQ0KPiArI2RlZmluZSBSTkRJU19SRVNFVF9NU0cgICAgICAgICAgICAweDAwMDAw MDA2DQo+ICsjZGVmaW5lIFJORElTX1JFU0VUX0NNUExUICAgICAgICAgIDB4ODAwMDAwMDYNCj4g KyNkZWZpbmUgUk5ESVNfSU5ESUNBVEVfU1RBVFVTX01TRyAgMHgwMDAwMDAwNw0KPiArI2RlZmlu ZSBSTkRJU19LRUVQQUxJVkVfTVNHICAgICAgICAweDAwMDAwMDA4DQo+ICsjZGVmaW5lIFJORElT X0tFRVBBTElWRV9DTVBMVCAgICAgIDB4ODAwMDAwMDgNCj4gKw0KPiArI2RlZmluZSBSTkRJU19T VEFUVVNfU1VDQ0VTUyAgICAgICAgICAgMHgwMDAwMDAwMA0KPiArI2RlZmluZSBSTkRJU19TVEFU VVNfRkFJTFVSRSAgICAgICAgICAgMHhDMDAwMDAwMQ0KPiArI2RlZmluZSBSTkRJU19TVEFUVVNf SU5WQUxJRF9EQVRBICAgICAgMHhDMDAxMDAxNQ0KPiArI2RlZmluZSBSTkRJU19TVEFUVVNfTk9U X1NVUFBPUlRFRCAgICAgMHhDMDAwMDBCQg0KPiArI2RlZmluZSBSTkRJU19TVEFUVVNfTUVESUFf Q09OTkVDVCAgICAgMHg0MDAxMDAwQg0KPiArI2RlZmluZSBSTkRJU19TVEFUVVNfTUVESUFfRElT Q09OTkVDVCAgMHg0MDAxMDAwQw0KPiArDQo+ICsjZGVmaW5lIFJORElTX0NPTlRST0xfVElNRU9V VCAgICAxMDAwMCAgICAgICAgICAgIC8vIDEwc2VjDQo+ICsjZGVmaW5lIFJORElTX0tFRVBBTElW RV9USU1FT1VUICA1MDAwICAgICAgICAgICAgIC8vIDVzZWMNCj4gKw0KPiArI2RlZmluZSBTRU5E X0VOQ0FQU1VMQVRFRF9DT01NQU5EICAweDAwMDAwMDAwDQo+ICsjZGVmaW5lIEdFVF9FTkNBUFNV TEFURURfUkVTUE9OU0UgIDB4MDAwMDAwMDENCj4gKw0KPiArLy8NCj4gKy8vIEdlbmVyYWwgT2Jq ZWN0cw0KPiArLy8NCj4gKy8vIFRha2VuIGZyb20gTlRERE5ESVMuSA0KPiArI2RlZmluZSBPSURf R0VOX1NVUFBPUlRFRF9MSVNUICAgICAgICAgMHgwMDAxMDEwMQ0KPiArI2RlZmluZSBPSURfR0VO X0hBUkRXQVJFX1NUQVRVUyAgICAgICAgMHgwMDAxMDEwMg0KPiArI2RlZmluZSBPSURfR0VOX01F RElBX1NVUFBPUlRFRCAgICAgICAgMHgwMDAxMDEwMw0KPiArI2RlZmluZSBPSURfR0VOX01FRElB X0lOX1VTRSAgICAgICAgICAgMHgwMDAxMDEwNA0KPiArI2RlZmluZSBPSURfR0VOX01BWElNVU1f TE9PS0FIRUFEICAgICAgMHgwMDAxMDEwNQ0KPiArI2RlZmluZSBPSURfR0VOX01BWElNVU1fRlJB TUVfU0laRSAgICAgMHgwMDAxMDEwNg0KPiArI2RlZmluZSBPSURfR0VOX0xJTktfU1BFRUQgICAg ICAgICAgICAgMHgwMDAxMDEwNw0KPiArI2RlZmluZSBPSURfR0VOX1RSQU5TTUlUX0JVRkZFUl9T UEFDRSAgMHgwMDAxMDEwOA0KPiArI2RlZmluZSBPSURfR0VOX1JFQ0VJVkVfQlVGRkVSX1NQQUNF ICAgMHgwMDAxMDEwOQ0KPiArI2RlZmluZSBPSURfR0VOX1RSQU5TTUlUX0JMT0NLX1NJWkUgICAg MHgwMDAxMDEwQQ0KPiArI2RlZmluZSBPSURfR0VOX1JFQ0VJVkVfQkxPQ0tfU0laRSAgICAgMHgw MDAxMDEwQg0KPiArI2RlZmluZSBPSURfR0VOX1ZFTkRPUl9JRCAgICAgICAgICAgICAgMHgwMDAx MDEwQw0KPiArI2RlZmluZSBPSURfR0VOX1ZFTkRPUl9ERVNDUklQVElPTiAgICAgMHgwMDAxMDEw RA0KPiArI2RlZmluZSBPSURfR0VOX0NVUlJFTlRfUEFDS0VUX0ZJTFRFUiAgMHgwMDAxMDEwRQ0K PiArI2RlZmluZSBPSURfR0VOX0NVUlJFTlRfTE9PS0FIRUFEICAgICAgMHgwMDAxMDEwRg0KPiAr I2RlZmluZSBPSURfR0VOX0RSSVZFUl9WRVJTSU9OICAgICAgICAgMHgwMDAxMDExMA0KPiArI2Rl ZmluZSBPSURfR0VOX01BWElNVU1fVE9UQUxfU0laRSAgICAgMHgwMDAxMDExMQ0KPiArI2RlZmlu ZSBPSURfR0VOX1BST1RPQ09MX09QVElPTlMgICAgICAgMHgwMDAxMDExMg0KPiArI2RlZmluZSBP SURfR0VOX01BQ19PUFRJT05TICAgICAgICAgICAgMHgwMDAxMDExMw0KPiArI2RlZmluZSBPSURf R0VOX01FRElBX0NPTk5FQ1RfU1RBVFVTICAgMHgwMDAxMDExNA0KPiArI2RlZmluZSBPSURfR0VO X01BWElNVU1fU0VORF9QQUNLRVRTICAgMHgwMDAxMDExNQ0KPiArI2RlZmluZSBPSURfR0VOX1ZF TkRPUl9EUklWRVJfVkVSU0lPTiAgMHgwMDAxMDExNg0KPiArDQo+ICsjZGVmaW5lIE9JRF9HRU5f WE1JVF9PSyAgICAgICAgMHgwMDAyMDEwMQ0KPiArI2RlZmluZSBPSURfR0VOX1JDVl9PSyAgICAg ICAgIDB4MDAwMjAxMDINCj4gKyNkZWZpbmUgT0lEX0dFTl9YTUlUX0VSUk9SICAgICAweDAwMDIw MTAzDQo+ICsjZGVmaW5lIE9JRF9HRU5fUkNWX0VSUk9SICAgICAgMHgwMDAyMDEwNA0KPiArI2Rl ZmluZSBPSURfR0VOX1JDVl9OT19CVUZGRVIgIDB4MDAwMjAxMDUNCj4gKw0KPiArI2RlZmluZSBP SURfR0VOX0RJUkVDVEVEX0JZVEVTX1hNSVQgICAgMHgwMDAyMDIwMQ0KPiArI2RlZmluZSBPSURf R0VOX0RJUkVDVEVEX0ZSQU1FU19YTUlUICAgMHgwMDAyMDIwMg0KPiArI2RlZmluZSBPSURfR0VO X01VTFRJQ0FTVF9CWVRFU19YTUlUICAgMHgwMDAyMDIwMw0KPiArI2RlZmluZSBPSURfR0VOX01V TFRJQ0FTVF9GUkFNRVNfWE1JVCAgMHgwMDAyMDIwNA0KPiArI2RlZmluZSBPSURfR0VOX0JST0FE Q0FTVF9CWVRFU19YTUlUICAgMHgwMDAyMDIwNQ0KPiArI2RlZmluZSBPSURfR0VOX0JST0FEQ0FT VF9GUkFNRVNfWE1JVCAgMHgwMDAyMDIwNg0KPiArI2RlZmluZSBPSURfR0VOX0RJUkVDVEVEX0JZ VEVTX1JDViAgICAgMHgwMDAyMDIwNw0KPiArI2RlZmluZSBPSURfR0VOX0RJUkVDVEVEX0ZSQU1F U19SQ1YgICAgMHgwMDAyMDIwOA0KPiArI2RlZmluZSBPSURfR0VOX01VTFRJQ0FTVF9CWVRFU19S Q1YgICAgMHgwMDAyMDIwOQ0KPiArI2RlZmluZSBPSURfR0VOX01VTFRJQ0FTVF9GUkFNRVNfUkNW ICAgMHgwMDAyMDIwQQ0KPiArI2RlZmluZSBPSURfR0VOX0JST0FEQ0FTVF9CWVRFU19SQ1YgICAg MHgwMDAyMDIwQg0KPiArI2RlZmluZSBPSURfR0VOX0JST0FEQ0FTVF9GUkFNRVNfUkNWICAgMHgw MDAyMDIwQw0KPiArI2RlZmluZSBPSURfR0VOX1JDVl9DUkNfRVJST1IgICAgICAgICAgMHgwMDAy MDIwRA0KPiArI2RlZmluZSBPSURfR0VOX1RSQU5TTUlUX1FVRVVFX0xFTkdUSCAgMHgwMDAyMDIw RQ0KPiArDQo+ICsjZGVmaW5lIE9JRF84MDJfM19DVVJSRU5UX0FERFJFU1MgIDB4MDEwMTAxMDIN Cj4gKy8vDQo+ICsvLyBOZGlzIFBhY2tldCBGaWx0ZXIgQml0cyAoT0lEX0dFTl9DVVJSRU5UX1BB Q0tFVF9GSUxURVIpLg0KPiArLy8NCj4gKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9ESVJFQ1RF RCAgICAgICAgMHgwMDAxDQo+ICsjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfTVVMVElDQVNUICAg ICAgIDB4MDAwMg0KPiArI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1QgICAw eDAwMDQNCj4gKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9CUk9BRENBU1QgICAgICAgMHgwMDA4 DQo+ICsjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfU09VUkNFX1JPVVRJTkcgIDB4MDAxMA0KPiAr I2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX1BST01JU0NVT1VTICAgICAweDAwMjANCj4gKyNkZWZp bmUgTkRJU19QQUNLRVRfVFlQRV9TTVQgICAgICAgICAgICAgMHgwMDQwDQo+ICsjZGVmaW5lIE5E SVNfUEFDS0VUX1RZUEVfQUxMX0xPQ0FMICAgICAgIDB4MDA4MA0KPiArI2RlZmluZSBORElTX1BB Q0tFVF9UWVBFX01BQ19GUkFNRSAgICAgICAweDgwMDANCj4gKyNkZWZpbmUgTkRJU19QQUNLRVRf VFlQRV9GVU5DVElPTkFMICAgICAgMHg0MDAwDQo+ICsjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVf QUxMX0ZVTkNUSU9OQUwgIDB4MjAwMA0KPiArI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0dST1VQ ICAgICAgICAgICAweDEwMDANCj4gKw0KPiArI3ByYWdtYSBwYWNrKDEpDQo+ICsNCj4gK3R5cGVk ZWYgc3RydWN0IF9SRU1PVEVfTkRJU19NU0dfSEVBREVSIHsNCj4gKyAgVUlOVDMyICAgIE1lc3Nh Z2VUeXBlOw0KPiArICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsNCj4gK30gUkVNT1RFX05ESVNf TVNHX0hFQURFUjsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgTWVz c2FnZVR5cGU7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlTGVuZ3RoOw0KPiArICBVSU5UMzIgICAg UmVxdWVzdElEOw0KPiArICBVSU5UMzIgICAgTWFqb3JWZXJzaW9uOw0KPiArICBVSU5UMzIgICAg TWlub3JWZXJzaW9uOw0KPiArICBVSU5UMzIgICAgTWF4VHJhbnNmZXJTaXplOw0KPiArfSBSRU1P VEVfTkRJU19JTklUSUFMSVpFX01TRzsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBV SU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlTGVuZ3RoOw0KPiAr ICBVSU5UMzIgICAgUmVxdWVzdElEOw0KPiArfSBSRU1PVEVfTkRJU19IQUxUX01TRzsNCj4gKw0K PiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ICsgIFVJ TlQzMiAgICBNZXNzYWdlTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgUmVxdWVzdElEOw0KPiArICBV SU5UMzIgICAgT2lkOw0KPiArICBVSU5UMzIgICAgSW5mb3JtYXRpb25CdWZmZXJMZW5ndGg7DQo+ ICsgIFVJTlQzMiAgICBJbmZvcm1hdGlvbkJ1ZmZlck9mZnNldDsNCj4gKyAgVUlOVDMyICAgIFJl c2VydmVkOw0KPiArfSBSRU1PVEVfTkRJU19RVUVSWV9NU0c7DQo+ICsNCj4gK3R5cGVkZWYgc3Ry dWN0IHsNCj4gKyAgUkVNT1RFX05ESVNfUVVFUllfTVNHICAgIFF1ZXJ5TXNnOw0KPiArICBVSU5U OCAgICAgICAgICAgICAgICAgICAgQWRkcls2XTsNCj4gK30gUkVNT1RFX05ESVNfUVVFUllfTUFD X01TRzsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBSRU1PVEVfTkRJU19RVUVSWV9N U0cgICAgUXVlcnlNc2c7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICBNYXhUb3RhbFNp emU7DQo+ICt9IFJFTU9URV9ORElTX1FVRVJZX01BWF9UT1RBTF9TSVpFX01TRzsNCj4gKw0KPiAr dHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ICsgIFVJTlQz MiAgICBNZXNzYWdlTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgUmVxdWVzdElEOw0KPiArICBVSU5U MzIgICAgT2lkOw0KPiArICBVSU5UMzIgICAgSW5mb3JtYXRpb25CdWZmZXJMZW5ndGg7DQo+ICsg IFVJTlQzMiAgICBJbmZvcm1hdGlvbkJ1ZmZlck9mZnNldDsNCj4gKyAgVUlOVDMyICAgIFJlc2Vy dmVkOw0KPiArfSBSRU1PVEVfTkRJU19TRVRfTVNHOw0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7 DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlVHlwZTsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5n dGg7DQo+ICsgIFVJTlQzMiAgICBSZXNlcnZlZDsNCj4gK30gUkVNT1RFX05ESVNfUkVTRVRfTVNH Ow0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlVHlwZTsN Cj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5ndGg7DQo+ICsgIFVJTlQzMiAgICBTdGF0dXM7DQo+ ICsgIFVJTlQzMiAgICBTdGF0dXNCdWZmZXJMZW5ndGg7DQo+ICsgIFVJTlQzMiAgICBTdGF0dXNC dWZmZXJPZmZzZXQ7DQo+ICt9IFJFTU9URV9ORElTX0lORElDQVRFX1NUQVRVU19NU0c7DQo+ICsN Cj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIERpYWdTdGF0dXM7DQo+ICsgIFVJ TlQzMiAgICBFcnJvck9mZnNldDsNCj4gK30gUk5ESVNfRElBR05PU1RJQ19JTkZPOw0KPiArDQo+ ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlVHlwZTsNCj4gKyAgVUlO VDMyICAgIE1lc3NhZ2VMZW5ndGg7DQo+ICsgIFVJTlQzMiAgICBSZXF1ZXN0SUQ7DQo+ICt9IFJF TU9URV9ORElTX0tFRVBBTElWRV9NU0c7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAg VUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KPiArICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsNCj4g KyAgVUlOVDMyICAgIFJlcXVlc3RJRDsNCj4gKyAgVUlOVDMyICAgIFN0YXR1czsNCj4gKyAgVUlO VDMyICAgIE1ham9yVmVyc2lvbjsNCj4gKyAgVUlOVDMyICAgIE1pbm9yVmVyc2lvbjsNCj4gKyAg VUlOVDMyICAgIERldmljZUZsYWdzOw0KPiArICBVSU5UMzIgICAgTWVkaXVtOw0KPiArICBVSU5U MzIgICAgTWF4UGFja2V0c1BlclRyYW5zZmVyOw0KPiArICBVSU5UMzIgICAgTWF4VHJhbnNmZXJT aXplOw0KPiArICBVSU5UMzIgICAgUGFja2V0QWxpZ25tZW50RmFjdG9yOw0KPiArICBVSU5UNjQg ICAgUmVzZXJ2ZWQ7DQo+ICt9IFJFTU9URV9ORElTX0lOSVRJQUxJWkVfQ01QTFQ7DQo+ICsNCj4g K3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KPiArICBVSU5U MzIgICAgTWVzc2FnZUxlbmd0aDsNCj4gKyAgVUlOVDMyICAgIFJlcXVlc3RJRDsNCj4gKyAgVUlO VDMyICAgIFN0YXR1czsNCj4gKyAgVUlOVDMyICAgIEluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoOw0K PiArICBVSU5UMzIgICAgSW5mb3JtYXRpb25CdWZmZXJPZmZzZXQ7DQo+ICt9IFJFTU9URV9ORElT X1FVRVJZX0NNUExUOw0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFJFTU9URV9ORElT X1FVRVJZX0NNUExUICAgIFF1ZXJ5Q21wbHQ7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAg ICAgIEFkZHJbNl07DQo+ICt9IFJFTU9URV9ORElTX1FVRVJZX01BQ19DTVBMVDsNCj4gKw0KPiAr dHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBSRU1PVEVfTkRJU19RVUVSWV9DTVBMVCAgICBRdWVyeUNt cGx0Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICBNYXhUb3RhbFNpemU7DQo+ICt9 IFJFTU9URV9ORElTX1FVRVJZX01BWF9UT1RBTF9TSVpFX0NNUExUOw0KPiArDQo+ICt0eXBlZGVm IHN0cnVjdCB7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlVHlwZTsNCj4gKyAgVUlOVDMyICAgIE1l c3NhZ2VMZW5ndGg7DQo+ICsgIFVJTlQzMiAgICBSZXF1ZXN0SUQ7DQo+ICsgIFVJTlQzMiAgICBT dGF0dXM7DQo+ICt9IFJFTU9URV9ORElTX1NFVF9DTVBMVDsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1 Y3Qgew0KPiArICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdl TGVuZ3RoOw0KPiArICBVSU5UMzIgICAgU3RhdHVzOw0KPiArICBVSU5UMzIgICAgQWRkcmVzc2lu Z1Jlc2V0Ow0KPiArfSBSRU1PVEVfTkRJU19SRVNFVF9DTVBMVDsNCj4gKw0KPiArdHlwZWRlZiBz dHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ICsgIFVJTlQzMiAgICBNZXNz YWdlTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgUmVxdWVzdElEOw0KPiArICBVSU5UMzIgICAgU3Rh dHVzOw0KPiArfSBSRU1PVEVfTkRJU19LRUVQQUxJVkVfQ01QTFQ7DQo+ICsNCj4gK3R5cGVkZWYg c3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KPiArICBVSU5UMzIgICAgTWVz c2FnZUxlbmd0aDsNCj4gKyAgVUlOVDMyICAgIERhdGFPZmZzZXQ7DQo+ICsgIFVJTlQzMiAgICBE YXRhTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgT3V0T2ZCYW5kRGF0YU9mZnNldDsNCj4gKyAgVUlO VDMyICAgIE91dE9mQmFuZERhdGFMZW5ndGg7DQo+ICsgIFVJTlQzMiAgICBOdW1PdXRPZkJhbmRE YXRhRWxlbWVudHM7DQo+ICsgIFVJTlQzMiAgICBQZXJQYWNrZXRJbmZvT2Zmc2V0Ow0KPiArICBV SU5UMzIgICAgUGVyUGFja2V0SW5mb0xlbmd0aDsNCj4gKyAgVUlOVDMyICAgIFJlc2VydmVkMTsN Cj4gKyAgVUlOVDMyICAgIFJlc2VydmVkMjsNCj4gK30gUkVNT1RFX05ESVNfUEFDS0VUX01TRzsN Cj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgU2l6ZTsNCj4gKyAgVUlO VDMyICAgIFR5cGU7DQo+ICsgIFVJTlQzMiAgICBDbGFzc0luZm9ybWF0aW9uT2Zmc2V0Ow0KPiAr fSBPVVRfT0ZfQkFORF9EQVRBX1JFQ09SRDsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiAr ICBVSU5UMzIgICAgU2l6ZTsNCj4gKyAgVUlOVDMyICAgIFR5cGU7DQo+ICsgIFVJTlQzMiAgICBD bGFzc0luZm9ybWF0aW9uT2Zmc2V0Ow0KPiArfSBQRVJfUEFDS0VUX0lORk9fREFUQV9SRUNPUkQ7 DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgTElTVF9FTlRSWSAgICBQYWNrZXRMaXN0 Ow0KPiArICBVSU5UOCAgICAgICAgICpPcmdCdWZmZXI7DQo+ICsgIFVJTlROICAgICAgICAgUmVt YWluaW5nTGVuZ3RoOw0KPiArICBVSU5UOCAgICAgICAgICpQYWNrZXRTdGFydEJ1ZmZlcjsgICAg Ly8gVmFyaWFibGUgc2l6ZSBkYXRhIHRvIGZvbGxvdw0KPiArfSBQQUNLRVRfTElTVDsNCj4gKw0K PiArI3ByYWdtYSBwYWNrKCkNCj4gKw0KPiArI2VuZGlmDQo+IGRpZmYgLS1naXQgYS9Vc2JOZXR3 b3JrUGtnL1VzYlJuZGlzL1VzYlJuZGlzLmluZiBiL1VzYk5ldHdvcmtQa2cvVXNiUm5kaXMvVXNi Um5kaXMuaW5mDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLjY0 MjA1ZTQyNzcNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9Vc2JOZXR3b3JrUGtnL1VzYlJuZGlz L1VzYlJuZGlzLmluZg0KPiBAQCAtMCwwICsxLDQyIEBADQo+ICsjIyBAZmlsZQ0KPiArIyAgIFRo aXMgaXMgVXNiIFJuZGlzIGRyaXZlciBmb3IgRFhFIHBoYXNlLg0KPiArIw0KPiArIyBDb3B5cmln aHQgKGMpIDIwMjMsIEFtZXJpY2FuIE1lZ2F0cmVuZHMgSW50ZXJuYXRpb25hbCBMTEMuIEFsbCBy aWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTIt Q2xhdXNlLVBhdGVudA0KPiArIyMNCj4gKw0KPiArW0RlZmluZXNdDQo+ICsgIElORl9WRVJTSU9O ICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMTAwMDUNCj4gKyAgQkFTRV9OQU1FICAgICAgICAg ICAgICAgICAgICAgID0gVXNiUm5kaXMNCj4gKyAgRklMRV9HVUlEICAgICAgICAgICAgICAgICAg ICAgID0gMTFFMzJDMzQtNjBCNS00OTkxLThERUEtNjNEM0U4Qzg3NkRFDQo+ICsgIE1PRFVMRV9U WVBFICAgICAgICAgICAgICAgICAgICA9IERYRV9EUklWRVINCj4gKyAgVkVSU0lPTl9TVFJJTkcg ICAgICAgICAgICAgICAgID0gMS4wDQo+ICsgIEVOVFJZX1BPSU5UICAgICAgICAgICAgICAgICAg ICA9IFVzYlJuZGlzRW50cnkNCj4gKw0KPiArW1NvdXJjZXNdDQo+ICsgIFVzYlJuZGlzLmMNCj4g KyAgVXNiUm5kaXMuaA0KPiArICBVc2JSbmRpc0Z1bmN0aW9uLmMNCj4gKyAgQ29tcG9uZW50TmFt ZS5jDQo+ICsNCj4gK1tQYWNrYWdlc10NCj4gKyAgTWRlUGtnL01kZVBrZy5kZWMNCj4gKyAgVXNi TmV0d29ya1BrZy9Vc2JOZXR3b3JrUGtnLmRlYw0KPiArDQo+ICtbTGlicmFyeUNsYXNzZXNdDQo+ ICsgIFVlZmlEcml2ZXJFbnRyeVBvaW50DQo+ICsgIFVlZmlCb290U2VydmljZXNUYWJsZUxpYg0K PiArICBVZWZpTGliDQo+ICsgIERlYnVnTGliDQo+ICsgIFVlZmlVc2JMaWINCj4gKyAgTWVtb3J5 QWxsb2NhdGlvbkxpYg0KPiArICBCYXNlTWVtb3J5TGliDQo+ICsNCj4gK1tQcm90b2NvbHNdDQo+ ICsgIGdFZmlVc2JJb1Byb3RvY29sR3VpZA0KPiArICBnRWZpRGV2aWNlUGF0aFByb3RvY29sR3Vp ZA0KPiArICBnRWZpRHJpdmVyQmluZGluZ1Byb3RvY29sR3VpZA0KPiArICBnRWRrSUlVc2JFdGhQ cm90b2NvbEd1aWQNCj4gKw0KPiArW0RlcGV4XQ0KPiArICBUUlVFDQo+IGRpZmYgLS1naXQgYS9V c2JOZXR3b3JrUGtnL1VzYlJuZGlzL1VzYlJuZGlzRnVuY3Rpb24uYyBiL1VzYk5ldHdvcmtQa2cv VXNiUm5kaXMvVXNiUm5kaXNGdW5jdGlvbi5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGlu ZGV4IDAwMDAwMDAwMDAuLmUzZmU3MzdjZGUNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9Vc2JO ZXR3b3JrUGtnL1VzYlJuZGlzL1VzYlJuZGlzRnVuY3Rpb24uYw0KPiBAQCAtMCwwICsxLDE3MTgg QEANCj4gKy8qKiBAZmlsZQ0KPiArICBUaGlzIGZpbGUgY29udGFpbnMgY29kZSBmb3IgVVNCIEV0 aGVybmV0IGRlc2NyaXB0b3INCj4gKyAgYW5kIHNwZWNpZmljIHJlcXVlc3RzIGltcGxlbWVudC4N Cj4gKw0KPiArICBDb3B5cmlnaHQgKGMpIDIwMjMsIEFtZXJpY2FuIE1lZ2F0cmVuZHMgSW50ZXJu YXRpb25hbCBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArICBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiArKiovDQo+ICsNCj4gKyNpbmNsdWRl ICJVc2JSbmRpcy5oIg0KPiArDQo+ICtVSU5UMTYgIGdTdG9wQnVsa0luQ250ICA9IDA7DQo+ICtV SU5UMTYgIGdCbG9ja0J1bGtJbkNudCA9IDA7DQo+ICsNCj4gKy8qKg0KPiArICBMb2FkIEFsbCBv ZiBkZXZpY2UgZGVzY3JpcHRvci4NCj4gKw0KPiArICBAcGFyYW1baW5dICBVc2JJbyAgICAgICAg ICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklfVVNCX0lPX1BST1RPQ09MIGluc3RhbmNlLg0K PiArICBAcGFyYW1bb3V0XSBDb25maWdEZXNjICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBj b25maWd1cmF0aW9uIGRlc2NyaXB0b3IuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFs IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBUaGUgcmVxdWVzdCBjb3VsZCBub3QgYmUgY29tcGxldGVk IGJlY2F1c2UgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBz cGVjaWZpZWQgYnkgRGVzY3JpcHRvckxlbmd0aCBhbmQgRGVzY3JpcHRvcg0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpcyBub3QgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIHJl c3VsdCBvZiB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAg QSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBF RklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBl cnJvci4gVGhlIHRyYW5zZmVyDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 YXR1cyBpcyByZXR1cm5lZCBpbiBTdGF0dXMuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0xv YWRBbGxEZXNjcmlwdG9yICgNCj4gKyAgSU4gIEVGSV9VU0JfSU9fUFJPVE9DT0wgICAgICAgICpV c2JJbywNCj4gKyAgT1VUIEVGSV9VU0JfQ09ORklHX0RFU0NSSVBUT1IgICoqQ29uZmlnRGVzYw0K PiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4g KyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgVHJhbnNTdGF0dXM7DQo+ICsgIEVGSV9VU0Jf Q09ORklHX0RFU0NSSVBUT1IgIFRtcDsNCj4gKw0KPiArICBTdGF0dXMgPSBVc2JJby0+VXNiR2V0 Q29uZmlnRGVzY3JpcHRvciAoVXNiSW8sICZUbXApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOlVzYkdldENvbmZpZ0Rlc2Ny aXB0b3Igc3RhdHVzID0gJXJcbiIsIF9fRlVOQ1RJT05fXywgU3RhdHVzKSk7DQo+ICsgICAgcmV0 dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+QWxsb2NhdGVQb29s ICgNCj4gKyAgICAgICAgICAgICAgICAgIEVmaUJvb3RTZXJ2aWNlc0RhdGEsDQo+ICsgICAgICAg ICAgICAgICAgICBUbXAuVG90YWxMZW5ndGgsDQo+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAq KilDb25maWdEZXNjDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOiBBbGxvY2F0ZVBv b2wgc3RhdHVzID0gJXJcbiIsIF9fRlVOQ1RJT05fXywgU3RhdHVzKSk7DQo+ICsgICAgcmV0dXJu IFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IFVzYkdldERlc2NyaXB0b3IgKA0K PiArICAgICAgICAgICAgIFVzYklvLA0KPiArICAgICAgICAgICAgIFVTQl9ERVNDX1RZUEVfQ09O RklHIDw8IDggfCAoVG1wLkNvbmZpZ3VyYXRpb25WYWx1ZSAtIDEpLCAgICAgICAgICAgICAgICAg Ly8gemVybyBiYXNlZA0KPiArICAgICAgICAgICAgIDAsDQo+ICsgICAgICAgICAgICAgVG1wLlRv dGFsTGVuZ3RoLA0KPiArICAgICAgICAgICAgICpDb25maWdEZXNjLA0KPiArICAgICAgICAgICAg ICZUcmFuc1N0YXR1cw0KPiArICAgICAgICAgICAgICk7DQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ ICt9DQo+ICsNCj4gKy8qKg0KPiArICBSZXR1cm5zIHBvaW50ZXIgdG8gdGhlIG5leHQgZGVzY3Jp cHRvciBmb3IgdGhlIHBhY2sgb2YgVVNCIGRlc2NyaXB0b3JzDQo+ICsgIGxvY2F0ZWQgaW4gY29u dGludWVzIG1lbW9yeSBzZWdtZW50DQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIERlc2MgICBB IHBvaW50ZXIgdG8gdGhlIENPTkZJR19ERVNDUklQVE9SIGluc3RhbmNlLg0KPiArICBAcGFyYW1b aW4sIG91dF0gT2Zmc2V0IEEgcG9pbnRlciB0byB0aGUgc3VtIG9mIGRlc2NyaXB0b3IgbGVuZ3Ro Lg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3Nm dWxseS4NCj4gKyAgQHJldHZhbCBGQUxTRSAgTm8gbmV4dCBkZXNjcmlwdG9yLg0KPiArDQo+ICsq Ki8NCj4gK0JPT0xFQU4NCj4gK05leHREZXNjcmlwdG9yICgNCj4gKyAgSU4gICAgICBFRklfVVNC X0NPTkZJR19ERVNDUklQVE9SICAqRGVzYywNCj4gKyAgSU4gT1VUICBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAqT2Zmc2V0DQo+ICsgICkNCj4gK3sNCj4gKyAgaWYgKChEZXNjID09IE5VTEwp IHx8ICgqT2Zmc2V0ID49IERlc2MtPlRvdGFsTGVuZ3RoKSkgew0KPiArICAgIHJldHVybiBGQUxT RTsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgoKEVGSV9VU0JfQ09ORklHX0RFU0NSSVBUT1IgKiko KGNoYXIgKilEZXNjKypPZmZzZXQpKS0+TGVuZ3RoID09IDApIHsNCj4gKyAgICByZXR1cm4gRkFM U0U7DQo+ICsgIH0NCj4gKw0KPiArICAqT2Zmc2V0ICs9ICgoRUZJX1VTQl9DT05GSUdfREVTQ1JJ UFRPUiAqKSgoY2hhciAqKURlc2MrKk9mZnNldCkpLT5MZW5ndGg7DQo+ICsgIGlmICggKk9mZnNl dCA+PSBEZXNjLT5Ub3RhbExlbmd0aCApIHsNCj4gKyAgICByZXR1cm4gRkFMU0U7DQo+ICsgIH0N Cj4gKw0KPiArICByZXR1cm4gVFJVRTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJlYWQgRnVu Y3Rpb24gZGVzY3JpcHRvcg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENvbmZpZyAgICAgICAgICAg ICBBIHBvaW50ZXIgdG8gYWxsIG9mIGNvbmZpZ3VyYXRpb24uDQo+ICsgIEBwYXJhbVtpbl0gIEZ1 bkRlc2NyaXB0b3JUeXBlICBVU0IgQ0RDIGNsYXNzIGRlc2NyaXB0b3IgU3ViVHlwZS4NCj4gKyAg QHBhcmFtW291dF0gRGF0YUJ1ZmZlciAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRGF0YSBvZiBj b3JyZXNwb25kaW5nIHRvIGRldmljZSBjYXBhYmlsaXR5Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgIFRoZSBkZXZpY2UgY2FwYWJpbGl0eSBkZXNjcmlwdG9yIHdhcyByZXRy aWV2ZWQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc2Z1bGx5Lg0KPiAr ICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICBObyBzdXBwb3J0ZWQuDQo+ICsgIEByZXR2YWwg RUZJX05PVF9GT1VORCAgICAgIFRoZSBkZXZpY2UgY2FwYWJpbGl0eSBkZXNjcmlwdG9yIHdhcyBu b3QgZm91bmQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArR2V0RnVuY3Rpb25hbERl c2NyaXB0b3IgKA0KPiArICBJTiAgRUZJX1VTQl9DT05GSUdfREVTQ1JJUFRPUiAgKkNvbmZpZywN Cj4gKyAgSU4gIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgIEZ1bkRlc2NyaXB0b3JUeXBlLA0K PiArICBPVVQgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgKkRhdGFCdWZmZXINCj4gKyAgKQ0K PiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNldDsNCj4gKyAgRUZJX1VTQl9JTlRFUkZB Q0VfREVTQ1JJUFRPUiAgKkludGVyZmFjZTsNCj4gKw0KPiArICBTdGF0dXMgPSBFRklfTk9UX0ZP VU5EOw0KPiArDQo+ICsgIGZvciAoT2Zmc2V0ID0gMDsgTmV4dERlc2NyaXB0b3IgKENvbmZpZywg Jk9mZnNldCk7KSB7DQo+ICsgICAgSW50ZXJmYWNlID0gKEVGSV9VU0JfSU5URVJGQUNFX0RFU0NS SVBUT1IgKikoKFVJTlQ4ICopQ29uZmlnICsgT2Zmc2V0KTsNCj4gKyAgICBpZiAoSW50ZXJmYWNl LT5EZXNjcmlwdG9yVHlwZSA9PSBDU19JTlRFUkZBQ0UpIHsNCj4gKyAgICAgIGlmICgoKFVTQl9I RUFERVJfRlVOX0RFU0NSSVBUT1IgKilJbnRlcmZhY2UpLT5EZXNjcmlwdG9yU3VidHlwZSA9PSBG dW5EZXNjcmlwdG9yVHlwZSkgew0KPiArICAgICAgICBzd2l0Y2ggKEZ1bkRlc2NyaXB0b3JUeXBl KSB7DQo+ICsgICAgICAgICAgY2FzZSBIRUFERVJfRlVOX0RFU0NSSVBUT1I6DQo+ICsgICAgICAg ICAgICBDb3B5TWVtICgNCj4gKyAgICAgICAgICAgICAgRGF0YUJ1ZmZlciwNCj4gKyAgICAgICAg ICAgICAgKFVTQl9IRUFERVJfRlVOX0RFU0NSSVBUT1IgKilJbnRlcmZhY2UsDQo+ICsgICAgICAg ICAgICAgIHNpemVvZiAoVVNCX0hFQURFUl9GVU5fREVTQ1JJUFRPUikNCj4gKyAgICAgICAgICAg ICAgKTsNCj4gKyAgICAgICAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gKyAgICAgICAgICBj YXNlIFVOSU9OX0ZVTl9ERVNDUklQVE9SOg0KPiArICAgICAgICAgICAgQ29weU1lbSAoDQo+ICsg ICAgICAgICAgICAgIERhdGFCdWZmZXIsDQo+ICsgICAgICAgICAgICAgIChVU0JfVU5JT05fRlVO X0RFU0NSSVBUT1IgKilJbnRlcmZhY2UsDQo+ICsgICAgICAgICAgICAgICgoVVNCX1VOSU9OX0ZV Tl9ERVNDUklQVE9SICopSW50ZXJmYWNlKS0+RnVuY3Rpb25MZW5ndGgNCj4gKyAgICAgICAgICAg ICAgKTsNCj4gKyAgICAgICAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gKyAgICAgICAgICBj YXNlIEVUSEVSTkVUX0ZVTl9ERVNDUklQVE9SOg0KPiArICAgICAgICAgICAgQ29weU1lbSAoDQo+ ICsgICAgICAgICAgICAgIERhdGFCdWZmZXIsDQo+ICsgICAgICAgICAgICAgIChVU0JfRVRIRVJO RVRfRlVOX0RFU0NSSVBUT1IgKilJbnRlcmZhY2UsDQo+ICsgICAgICAgICAgICAgIHNpemVvZiAo VVNCX0VUSEVSTkVUX0ZVTl9ERVNDUklQVE9SKQ0KPiArICAgICAgICAgICAgICApOw0KPiArICAg ICAgICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArICAgICAgICAgIGRlZmF1bHQ6DQo+ICsg ICAgICAgICAgICBTdGF0dXMgPSBFRklfVU5TVVBQT1JURUQ7DQo+ICsgICAgICAgICAgICBicmVh azsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsg IHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBHZXQgVVNCIEV0aGVybmV0 IElPIGVuZHBvaW50IGFuZCBVU0IgQ0RDIGRhdGEgSU8gZW5kcG9pbnQuDQo+ICsNCj4gKyAgQHBh cmFtW2luXSAgICAgIFVzYklvICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9VU0JfSU9f UFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBVc2JSbmRpc0RldmljZSAg QSBwb2ludGVyIHRvIHRoZSBVU0JfUk5ESVNfREVWSUNFIGluc3RhbmNlLg0KPiArDQo+ICsqKi8N Cj4gK1ZPSUQNCj4gK0dldEVuZHBvaW50ICgNCj4gKyAgSU4gICAgICBFRklfVVNCX0lPX1BST1RP Q09MICAqVXNiSW8sDQo+ICsgIElOIE9VVCAgVVNCX1JORElTX0RFVklDRSAgICAgKlVzYlJuZGlz RGV2aWNlDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAg U3RhdHVzOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gKyAg VUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0Ow0KPiArICBFRklfVVNCX0lOVEVS RkFDRV9ERVNDUklQVE9SICBJbnRlcmZhY2U7DQo+ICsgIEVGSV9VU0JfRU5EUE9JTlRfREVTQ1JJ UFRPUiAgIEVuZHBvaW50Ow0KPiArDQo+ICsgIFN0YXR1cyA9IFVzYklvLT5Vc2JHZXRJbnRlcmZh Y2VEZXNjcmlwdG9yIChVc2JJbywgJkludGVyZmFjZSk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6VXNiR2V0SW50ZXJmYWNl RGVzY3JpcHRvciBzdGF0dXMgPSAlclxuIiwgX19GVU5DVElPTl9fLCBTdGF0dXMpKTsNCj4gKyAg ICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoSW50ZXJmYWNlLk51bUVuZHBvaW50cyA9 PSAwICkgew0KPiArICAgIFN0YXR1cyA9IFVzYlNldEludGVyZmFjZSAoVXNiSW8sIDEsIDAsICZS ZXN1bHQpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIERFQlVH ICgoREVCVUdfRVJST1IsICIlYTpVc2JTZXRJbnRlcmZhY2Ugc3RhdHVzID0gJXJcbiIsIF9fRlVO Q1RJT05fXywgU3RhdHVzKSk7DQo+ICsgICAgICByZXR1cm47DQo+ICsgICAgfQ0KPiArDQo+ICsg ICAgU3RhdHVzID0gVXNiSW8tPlVzYkdldEludGVyZmFjZURlc2NyaXB0b3IgKFVzYklvLCAmSW50 ZXJmYWNlKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBERUJV RyAoKERFQlVHX0VSUk9SLCAiJWE6VXNiR2V0SW50ZXJmYWNlRGVzY3JpcHRvciBzdGF0dXMgPSAl clxuIiwgX19GVU5DVElPTl9fLCBTdGF0dXMpKTsNCj4gKyAgICAgIHJldHVybjsNCj4gKyAgICB9 DQo+ICsgIH0NCj4gKw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBJbnRlcmZhY2UuTnVt RW5kcG9pbnRzOyBJbmRleCsrKSB7DQo+ICsgICAgU3RhdHVzID0gVXNiSW8tPlVzYkdldEVuZHBv aW50RGVzY3JpcHRvciAoVXNiSW8sIEluZGV4LCAmRW5kcG9pbnQpOw0KPiArICAgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTpVc2JH ZXRFbmRwb2ludERlc2NyaXB0b3Igc3RhdHVzID0gJXJcbiIsIF9fRlVOQ1RJT05fXywgU3RhdHVz KSk7DQo+ICsgICAgICByZXR1cm47DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgc3dpdGNoICgoRW5k cG9pbnQuQXR0cmlidXRlcyAmIChCSVQwIHwgQklUMSkpKSB7DQo+ICsgICAgICBjYXNlIFVTQl9F TkRQT0lOVF9CVUxLOg0KPiArICAgICAgICBpZiAoRW5kcG9pbnQuRW5kcG9pbnRBZGRyZXNzICYg QklUNykgew0KPiArICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5CdWxrSW5FbmRwb2ludCA9IEVu ZHBvaW50LkVuZHBvaW50QWRkcmVzczsNCj4gKyAgICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAg ICBVc2JSbmRpc0RldmljZS0+QnVsa091dEVuZHBvaW50ID0gRW5kcG9pbnQuRW5kcG9pbnRBZGRy ZXNzOw0KPiArICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgICBjYXNl IFVTQl9FTkRQT0lOVF9JTlRFUlJVUFQ6DQo+ICsgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5JbnRl cnJ1cEVuZHBvaW50ID0gRW5kcG9pbnQuRW5kcG9pbnRBZGRyZXNzOw0KPiArICAgICAgICBicmVh azsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEFzeW5jIFVTQiB0 cmFuc2ZlciBjYWxsYmFjayByb3V0aW5lLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIERhdGEgICAg ICAgICAgICBEYXRhIHJlY2VpdmVkIG9yIHNlbnQgdmlhIHRoZSBVU0IgQXN5bmNocm9ub3VzIFRy YW5zZmVyLCBpZiB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZmVy IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEBwYXJhbVtpbl0gIERhdGFMZW5ndGggICAg ICBUaGUgbGVuZ3RoIG9mIERhdGEgcmVjZWl2ZWQgb3Igc2VudCB2aWEgdGhlIEFzeW5jaHJvbm91 cw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmZXIsIGlmIHRyYW5zZmVy IHN1Y2Nlc3NmdWxseSBjb21wbGV0ZXMuDQo+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICAgICAg ICBEYXRhIHBhc3NlZCBmcm9tIFVzYkFzeW5jSW50ZXJydXB0VHJhbnNmZXIoKSByZXF1ZXN0Lg0K PiArICBAcGFyYW1baW5dICBTdGF0dXMgICAgICAgICAgSW5kaWNhdGVzIHRoZSByZXN1bHQgb2Yg dGhlIGFzeW5jaHJvbm91cyB0cmFuc2Zlci4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICAgICBUaGUgYXN5bmNocm9ub3VzIFVTQiB0cmFuc2ZlciByZXF1ZXN0IGhhcyBiZWVu IHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAg ICAgVGhlIGFzeW5jaHJvbm91cyBVU0IgdHJhbnNmZXIgcmVxdWVzdCBmYWlsZWQuDQo+ICsNCj4g KyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtJbnRlcnJ1cHRDYWxsYmFjayAoDQo+ ICsgIElOICBWT0lEICAgICpEYXRhLA0KPiArICBJTiAgVUlOVE4gICBEYXRhTGVuZ3RoLA0KPiAr ICBJTiAgVk9JRCAgICAqQ29udGV4dCwNCj4gKyAgSU4gIFVJTlQzMiAgU3RhdHVzDQo+ICsgICkN Cj4gK3sNCj4gKyAgaWYgKChEYXRhID09IE5VTEwpIHx8IChDb250ZXh0ID09IE5VTEwpKSB7DQo+ ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlm ICgoKEVGSV9VU0JfREVWSUNFX1JFUVVFU1QgKilEYXRhKS0+UmVxdWVzdCA9PSAwKSB7DQo+ICsg ICAgQ29weU1lbSAoDQo+ICsgICAgICAoRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCAqKUNvbnRleHQs DQo+ICsgICAgICAoRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCAqKURhdGEsDQo+ICsgICAgICBzaXpl b2YgKEVGSV9VU0JfREVWSUNFX1JFUVVFU1QpDQo+ICsgICAgICApOw0KPiArICB9DQo+ICsNCj4g KyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBmdW5j dGlvbiBpcyB1c2VkIHRvIG1hbmFnZSBhIFVTQiBkZXZpY2Ugd2l0aCBhbiBpbnRlcnJ1cHQgdHJh bnNmZXIgcGlwZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICBBIHBv aW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAg QHBhcmFtW2luXSAgSXNOZXdUcmFuc2ZlciAgICAgSWYgVFJVRSwgYSBuZXcgdHJhbnNmZXIgd2ls bCBiZSBzdWJtaXR0ZWQgdG8gVVNCIGNvbnRyb2xsZXIuIElmDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZBTFNFLCB0aGUgaW50ZXJydXB0IHRyYW5zZmVyIGlzIGRlbGV0ZWQg ZnJvbSB0aGUgZGV2aWNlJ3MgaW50ZXJydXB0DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRyYW5zZmVyIHF1ZXVlLg0KPiArICBAcGFyYW1baW5dICBQb2xsaW5nSW50ZXJ2YWwg ICBJbmRpY2F0ZXMgdGhlIHBlcmlvZGljIHJhdGUsIGluIG1pbGxpc2Vjb25kcywgdGhhdCB0aGUg dHJhbnNmZXIgaXMgdG8gYmUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhl Y3V0ZWQuVGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgd2hlbiBJc05ld1RyYW5zZmVyIGlzIFRS VUUuIFRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBtdXN0IGJl IGJldHdlZW4gMSB0byAyNTUsIG90aGVyd2lzZSBFRklfSU5WQUxJRF9QQVJBTUVURVIgaXMgcmV0 dXJuZWQuDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB1bml0cyBhcmUg aW4gbWlsbGlzZWNvbmRzLg0KPiArICBAcGFyYW1baW5dICBSZXF1ZXN0ICAgICAgICAgICBBIHBv aW50ZXIgdG8gdGhlIEVGSV9VU0JfREVWSUNFX1JFUVVFU1QgZGF0YS4NCj4gKw0KPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgYXN5bmNocm9ub3VzIFVTQiB0cmFuc2ZlciBy ZXF1ZXN0IHRyYW5zZmVyIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4NCj4gKyAgQHJl dHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIGFzeW5jaHJvbm91cyBVU0IgdHJhbnNmZXIg cmVxdWVzdCBmYWlsZWQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ ICtVc2JSbmRpc0ludGVycnVwdCAoDQo+ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NP TCAgKlRoaXMsDQo+ICsgIElOIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgSXNOZXdUcmFu c2ZlciwNCj4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICBQb2xsaW5nSW50ZXJ2 YWwsDQo+ICsgIElOIEVGSV9VU0JfREVWSUNFX1JFUVVFU1QgICAgICAgKlJlcXVzdA0KPiArICAp DQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgIFN0YXR1czsNCj4gKyAgVVNCX1JORElTX0RF VklDRSAgKlVzYlJuZGlzRGV2aWNlOw0KPiArICBVSU5UTiAgICAgICAgICAgICBEYXRhTGVuZ3Ro Ow0KPiArDQo+ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMg KFRoaXMpOw0KPiArICBEYXRhTGVuZ3RoICAgICA9IDA7DQo+ICsNCj4gKyAgaWYgKElzTmV3VHJh bnNmZXIgPT0gVFJVRSkgew0KPiArICAgIERhdGFMZW5ndGggPSBzaXplb2YgKEVGSV9VU0JfREVW SUNFX1JFUVVFU1QpICsgc2l6ZW9mIChVU0JfQ09OTkVDVF9TUEVFRF9DSEFOR0UpOw0KPiArICAg IFN0YXR1cyAgICAgPSBVc2JSbmRpc0RldmljZS0+VXNiSW8tPlVzYkFzeW5jSW50ZXJydXB0VHJh bnNmZXIgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNi Um5kaXNEZXZpY2UtPlVzYklvLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPkludGVycnVwRW5kcG9pbnQsDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJc05ld1RyYW5zZmVyLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9sbGluZ0ludGVydmFsLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aCwNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVycnVwdENhbGxi YWNrLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVxdXN0 DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArDQo+ ICsgICAgaWYgKFN0YXR1cyA9PSBFRklfSU5WQUxJRF9QQVJBTUVURVIpIHsNCj4gKyAgICAgIC8v IEJlY2F1c2Ugb2YgU3RhY2tlZCBBc3luY0ludGVycnVwdCByZXF1ZXN0IGFyZSBub3Qgc3VwcG9y dGVkDQo+ICsgICAgICBTdGF0dXMgPSBVc2JSbmRpc0RldmljZS0+VXNiSW8tPlVzYkFzeW5jSW50 ZXJydXB0VHJhbnNmZXIgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFVzYlJuZGlzRGV2aWNlLT5Vc2JJbywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+SW50ZXJydXBFbmRwb2ludCwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDAsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBOVUxMLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V TEwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICAg IH0NCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBTdGF0dXMgPSBVc2JSbmRpc0RldmljZS0+VXNiSW8t PlVzYkFzeW5jSW50ZXJydXB0VHJhbnNmZXIgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+VXNiSW8sDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5JbnRlcnJ1cEVuZHBvaW50LA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJc05ld1RyYW5zZmVyLA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBOVUxMDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4g KyAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlYWQgVVNCIGludGVycnVwdCB0cmFuc2ZlciBi ZWZvcmUgdGhlIHJlc3BvbnNlIFJORElTIG1lc3NhZ2UuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAg VGhpcyAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBVU0JfUk5ESVNfREVWSUNFIGluc3Rh bmNlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBVU0IgaW50 ZXJydXB0IHRyYW5zZmVyIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4NCj4gKyAgQHJl dHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIFVTQiBpbnRlcnJ1cHQgdHJhbnNmZXIgZmFp bGVkLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUmVhZFJuZGlz UmVzcG9uc2VJbnRlcnJ1cHQgKA0KPiArICBJTiBVU0JfUk5ESVNfREVWSUNFICAqVXNiUm5kaXNE ZXZpY2UNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ICsgIFVJTlQz MiAgICAgIERhdGFbMl07DQo+ICsgIFVJTlQzMiAgICAgIFVzYlN0YXR1czsNCj4gKyAgVUlOVE4g ICAgICAgRGF0YUxlbmd0aDsNCj4gKw0KPiArICBEYXRhTGVuZ3RoID0gODsNCj4gKw0KPiArICBa ZXJvTWVtIChEYXRhLCBzaXplb2YgKERhdGEpKTsNCj4gKw0KPiArICBTdGF0dXMgPSBVc2JSbmRp c0RldmljZS0+VXNiSW8tPlVzYlN5bmNJbnRlcnJ1cHRUcmFuc2ZlciAoDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+VXNiSW8sDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+SW50ZXJydXBF bmRwb2ludCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZEYXRhLA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkRhdGFMZW5ndGgsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJlVzYlN0YXR1cw0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAgUmV0cmlldmVzIHRoZSBVU0IgRXRoZXJuZXQgTWFjIEFkZHJlc3MuDQo+ ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJ X1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW291dF0gTWFjQWRk cmVzcyAgICBBIHBvaW50ZXIgdG8gdGhlIGNhbGxlciBhbGxvY2F0ZWQgVVNCIEV0aGVybmV0IE1h YyBBZGRyZXNzLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBV U0IgSGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMgcmV0cmlldmVkIHN1Y2Nlc3NmdWxs eS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgVXNiSGVhZGVyRnVuRGVzY3Jp cHRvciBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICBUaGUgVVNC IEhlYWRlciBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzIG5vdCBmb3VuZC4NCj4gKw0KPiArKiov DQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0dldFVzYkV0aE1hY0FkZHJlc3MgKA0KPiAr ICBJTiAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgT1VUIEVGSV9N QUNfQUREUkVTUyAgICAgICAgICAgICAgKk1hY0FkZHJlc3MNCj4gKyAgKQ0KPiArew0KPiArICBF RklfU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgVVNCX1JORElTX0RFVklD RSAgICAgICAgICAgICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsgIFVTQl9FVEhFUk5FVF9GVU5fREVT Q1JJUFRPUiAgVXNiRXRoRGVzY3JpcHRvcjsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAg ICAgICAqRGF0YTsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAqRGF0YVB0cjsN Cj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICBUbXBTdHJbMV07DQo+ICsgIFVJTlQ4 ICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAg ICAgICAgICAgSGk7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgTG93Ow0KPiAr DQo+ICsgIFJFTU9URV9ORElTX1FVRVJZX01BQ19NU0cgICAgUm5kaXNRdWVyeU1zZzsNCj4gKyAg UkVNT1RFX05ESVNfUVVFUllfTUFDX0NNUExUICBSbmRpc1F1ZXJ5TXNnQ21wbHQ7DQo+ICsNCj4g KyAgVXNiUm5kaXNEZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNFX0ZST01fVEhJUyAoVGhpcyk7DQo+ ICsNCj4gKyAgWmVyb01lbSAoJlJuZGlzUXVlcnlNc2csIHNpemVvZiAoUkVNT1RFX05ESVNfUVVF UllfTUFDX01TRykpOw0KPiArICBaZXJvTWVtICgmUm5kaXNRdWVyeU1zZ0NtcGx0LCBzaXplb2Yg KFJFTU9URV9ORElTX1FVRVJZX01BQ19DTVBMVCkpOw0KPiArDQo+ICsgIFJuZGlzUXVlcnlNc2cu UXVlcnlNc2cuTWVzc2FnZVR5cGUgICA9IFJORElTX1FVRVJZX01TRzsNCj4gKyAgUm5kaXNRdWVy eU1zZy5RdWVyeU1zZy5NZXNzYWdlTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJU19RVUVSWV9N QUNfTVNHKTsNCj4gKyAgUm5kaXNRdWVyeU1zZy5RdWVyeU1zZy5SZXF1ZXN0SUQgICAgID0gVXNi Um5kaXNEZXZpY2UtPlJlcXVlc3RJZDsNCj4gKyAgUm5kaXNRdWVyeU1zZy5RdWVyeU1zZy5PaWQg ICAgICAgICAgID0gT0lEXzgwMl8zX0NVUlJFTlRfQUREUkVTUzsNCj4gKw0KPiArICBSbmRpc1F1 ZXJ5TXNnQ21wbHQuUXVlcnlDbXBsdC5NZXNzYWdlVHlwZSAgID0gUk5ESVNfUVVFUllfQ01QTFQ7 DQo+ICsgIFJuZGlzUXVlcnlNc2dDbXBsdC5RdWVyeUNtcGx0Lk1lc3NhZ2VMZW5ndGggPSBzaXpl b2YgKFJFTU9URV9ORElTX1FVRVJZX01BQ19DTVBMVCk7DQo+ICsNCj4gKyAgU3RhdHVzID0gUm5k aXNDb250cm9sTXNnICgNCj4gKyAgICAgICAgICAgICBVc2JSbmRpc0RldmljZSwNCj4gKyAgICAg ICAgICAgICAoUkVNT1RFX05ESVNfTVNHX0hFQURFUiAqKSZSbmRpc1F1ZXJ5TXNnLA0KPiArICAg ICAgICAgICAgIChSRU1PVEVfTkRJU19NU0dfSEVBREVSICopJlJuZGlzUXVlcnlNc2dDbXBsdA0K PiArICAgICAgICAgICAgICk7DQo+ICsgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsg ICAgREVCVUcgKChERUJVR19JTkZPLCAiU3VjY2VzcyB0byBnZXQgTWFjIGFkZHJlc3MgZnJvbSBS TkRJUyBtZXNzYWdlLlxuIikpOw0KPiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFBYRV9I V0FERFJfTEVOX0VUSEVSOyBJbmRleCsrKSB7DQo+ICsgICAgICBNYWNBZGRyZXNzLT5BZGRyW0lu ZGV4XSA9IFJuZGlzUXVlcnlNc2dDbXBsdC5BZGRyW0luZGV4XTsNCj4gKyAgICB9DQo+ICsNCj4g KyAgICBVc2JSbmRpc0RldmljZS0+UmVxdWVzdElkKys7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsN Cj4gKyAgfQ0KPiArDQo+ICsgIC8vIElmIGl0IGlzIG5vdCBzdXBwb3J0IHRoZSBPSURfODAyXzNf Q1VSUkVOVF9BRERSRVNTLg0KPiArICAvLyBUbyBjaGVjayBVU0IgRXRoZXJuZXQgZnVuY3Rpb25h bCBEZXNjcmlwdG9yDQo+ICsgIFN0YXR1cyA9IFRoaXMtPlVzYkV0aEZ1bkRlc2NyaXB0b3IgKFRo aXMsICZVc2JFdGhEZXNjcmlwdG9yKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTpVc2JFdGhGdW5EZXNjcmlwdG9yIHN0YXR1 cyA9ICVyXG4iLCBfX0ZVTkNUSU9OX18sIFN0YXR1cykpOw0KPiArICAgIHJldHVybiBTdGF0dXM7 DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBVc2JSbmRpc0RldmljZS0+VXNiSW8tPlVzYkdl dFN0cmluZ0Rlc2NyaXB0b3IgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVXNiUm5kaXNEZXZpY2UtPlVzYklvLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMHg0MDksICAgICAgICAgICAgICAgICAgICAgICAvLyBFbmdsaXNoLVVTIExhbmd1 YWdlIElEDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JFdGhEZXNj cmlwdG9yLk1hY0FkZHJlc3MsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmRGF0YQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIl YTpVc2JHZXRTdHJpbmdEZXNjcmlwdG9yIHN0YXR1cyA9ICVyXG4iLCBfX0ZVTkNUSU9OX18sIFN0 YXR1cykpOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBEYXRhUHRy ID0gRGF0YTsNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUFhFX0hXQUREUl9MRU5fRVRI RVI7IEluZGV4KyspIHsNCj4gKyAgICBDb3B5TWVtIChUbXBTdHIsIERhdGFQdHIsIHNpemVvZiAo Q0hBUjE2KSk7DQo+ICsgICAgRGF0YVB0cisrOw0KPiArICAgIEhpID0gKFVJTlQ4KVN0ckhleFRv VWludG4gKFRtcFN0cik7DQo+ICsgICAgQ29weU1lbSAoVG1wU3RyLCBEYXRhUHRyLCBzaXplb2Yg KENIQVIxNikpOw0KPiArICAgIERhdGFQdHIrKzsNCj4gKyAgICBMb3cgICAgICAgICAgICAgICAg ICAgICA9IChVSU5UOClTdHJIZXhUb1VpbnRuIChUbXBTdHIpOw0KPiArICAgIE1hY0FkZHJlc3Mt PkFkZHJbSW5kZXhdID0gKEhpIDw8IDQpIHwgTG93Ow0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJu IFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJldHJpZXZlcyB0aGUgVVNCIEV0aGVy bmV0IEJ1bGsgdHJhbnNmZXIgZGF0YSBzaXplLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMg ICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5z dGFuY2UuDQo+ICsgIEBwYXJhbVtvdXRdIEJ1bGtTaXplICAgICAgQSBwb2ludGVyIHRvIHRoZSBC dWxrIHRyYW5zZmVyIGRhdGEgc2l6ZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgIFRoZSBidWxrIHRyYW5zZmVyIGRhdGEgc2l6ZSB3YXMgcmV0cmlldmVkIHN1Y2Nlc3NmdWxs eS4NCj4gKyAgQHJldHZhbCBvdGhlciAgICAgICAgICAgICBGYWlsZWQgdG8gcmV0cmlldmUgdGhl IGJ1bGsgdHJhbnNmZXIgZGF0YSBzaXplLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4g K0VGSUFQSQ0KPiArVXNiRXRoQnVsa1NpemUgKA0KPiArICBJTiAgRURLSUlfVVNCX0VUSEVSTkVU X1BST1RPQ09MICAqVGhpcywNCj4gKyAgT1VUIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg KkJ1bGtTaXplDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAg ICBTdGF0dXM7DQo+ICsgIFVTQl9FVEhFUk5FVF9GVU5fREVTQ1JJUFRPUiAgVXNiRXRoRnVuRGVz Y3JpcHRvcjsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgICAgICAqVXNiUm5kaXNEZXZp Y2U7DQo+ICsNCj4gKyAgUkVNT1RFX05ESVNfUVVFUllfTUFYX1RPVEFMX1NJWkVfTVNHICAgIFJu ZGlzUXVlcnlNc2c7DQo+ICsgIFJFTU9URV9ORElTX1FVRVJZX01BWF9UT1RBTF9TSVpFX0NNUExU ICBSbmRpc1F1ZXJ5TXNnQ21wbHQ7DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0JfUk5E SVNfREVWSUNFX0ZST01fVEhJUyAoVGhpcyk7DQo+ICsNCj4gKyAgWmVyb01lbSAoJlJuZGlzUXVl cnlNc2csIHNpemVvZiAoUkVNT1RFX05ESVNfUVVFUllfTUFYX1RPVEFMX1NJWkVfTVNHKSk7DQo+ ICsgIFplcm9NZW0gKCZSbmRpc1F1ZXJ5TXNnQ21wbHQsIHNpemVvZiAoUkVNT1RFX05ESVNfUVVF UllfTUFYX1RPVEFMX1NJWkVfQ01QTFQpKTsNCj4gKw0KPiArICBSbmRpc1F1ZXJ5TXNnLlF1ZXJ5 TXNnLk1lc3NhZ2VUeXBlICAgPSBSTkRJU19RVUVSWV9NU0c7DQo+ICsgIFJuZGlzUXVlcnlNc2cu UXVlcnlNc2cuTWVzc2FnZUxlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfUVVFUllfTUFYX1RP VEFMX1NJWkVfTVNHKTsNCj4gKyAgUm5kaXNRdWVyeU1zZy5RdWVyeU1zZy5SZXF1ZXN0SUQgICAg ID0gVXNiUm5kaXNEZXZpY2UtPlJlcXVlc3RJZDsNCj4gKyAgUm5kaXNRdWVyeU1zZy5RdWVyeU1z Zy5PaWQgICAgICAgICAgID0gT0lEX0dFTl9NQVhJTVVNX1RPVEFMX1NJWkU7DQo+ICsNCj4gKyAg Um5kaXNRdWVyeU1zZ0NtcGx0LlF1ZXJ5Q21wbHQuTWVzc2FnZVR5cGUgICA9IFJORElTX1FVRVJZ X0NNUExUOw0KPiArICBSbmRpc1F1ZXJ5TXNnQ21wbHQuUXVlcnlDbXBsdC5NZXNzYWdlTGVuZ3Ro ID0gc2l6ZW9mIChSRU1PVEVfTkRJU19RVUVSWV9NQVhfVE9UQUxfU0laRV9DTVBMVCk7DQo+ICsN Cj4gKyAgU3RhdHVzID0gUm5kaXNDb250cm9sTXNnICgNCj4gKyAgICAgICAgICAgICBVc2JSbmRp c0RldmljZSwNCj4gKyAgICAgICAgICAgICAoUkVNT1RFX05ESVNfTVNHX0hFQURFUiAqKSZSbmRp c1F1ZXJ5TXNnLA0KPiArICAgICAgICAgICAgIChSRU1PVEVfTkRJU19NU0dfSEVBREVSICopJlJu ZGlzUXVlcnlNc2dDbXBsdA0KPiArICAgICAgICAgICAgICk7DQo+ICsgIGlmICghRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+ICsgICAgREVCVUcgKChERUJVR19JTkZPLCAiU3VjY2VzcyB0byBnZXQg TWF4IFRvdGFsIHNpemUgOiAlWCAgXG4iLCBSbmRpc1F1ZXJ5TXNnQ21wbHQuTWF4VG90YWxTaXpl KSk7DQo+ICsgICAgKkJ1bGtTaXplID0gUm5kaXNRdWVyeU1zZ0NtcGx0Lk1heFRvdGFsU2l6ZTsN Cj4gKyAgICBVc2JSbmRpc0RldmljZS0+UmVxdWVzdElkKys7DQo+ICsgICAgcmV0dXJuIFN0YXR1 czsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IFRoaXMtPlVzYkV0aEZ1bkRlc2NyaXB0b3Ig KFRoaXMsICZVc2JFdGhGdW5EZXNjcmlwdG9yKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICAqQnVsa1NpemUg PSAoVUlOVE4pVXNiRXRoRnVuRGVzY3JpcHRvci5NYXhTZWdtZW50U2l6ZTsNCj4gKyAgcmV0dXJu IFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJldHJpZXZlcyB0aGUgVVNCIEhlYWRl ciBmdW5jdGlvbmFsIERlc2NyaXB0b3IuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAg ICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NP TCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW291dF0gVXNiSGVhZGVyRnVuRGVzY3JpcHRvciBBIHBv aW50ZXIgdG8gdGhlIGNhbGxlciBhbGxvY2F0ZWQgVVNCIEhlYWRlciBGdW5jdGlvbmFsIERlc2Ny aXB0b3IuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIFVTQiBI ZWFkZXIgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcyByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0K PiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBVc2JIZWFkZXJGdW5EZXNjcmlwdG9y IGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFRoZSBVU0IgSGVh ZGVyIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMgbm90IGZvdW5kLg0KPiArDQo+ICsqKi8NCj4g K0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArR2V0VXNiSGVhZGVyRnVuRGVzY3JpcHRvciAoDQo+ ICsgIElOICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBPVVQgVVNC X0hFQURFUl9GVU5fREVTQ1JJUFRPUiAgICAqVXNiSGVhZGVyRnVuRGVzY3JpcHRvcg0KPiArICAp DQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgIFN0YXR1czsNCj4gKyAgVVNCX1JORElTX0RF VklDRSAgKlVzYlJuZGlzRGV2aWNlOw0KPiArDQo+ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JO RElTX0RFVklDRV9GUk9NX1RISVMgKFRoaXMpOw0KPiArDQo+ICsgIGlmIChVc2JIZWFkZXJGdW5E ZXNjcmlwdG9yID09IE5VTEwpIHsNCj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVS Ow0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gR2V0RnVuY3Rpb25hbERlc2NyaXB0b3IgKA0K PiArICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Db25maWcsDQo+ICsgICAgICAgICAgICAg SEVBREVSX0ZVTl9ERVNDUklQVE9SLA0KPiArICAgICAgICAgICAgIFVzYkhlYWRlckZ1bkRlc2Ny aXB0b3INCj4gKyAgICAgICAgICAgICApOw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAgUmV0cmlldmVzIHRoZSBVU0IgVW5pb24gZnVuY3Rpb25hbCBEZXNjcmlw dG9yLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICAgQSBwb2lu dGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBw YXJhbVtvdXRdIFVzYlVuaW9uRnVuRGVzY3JpcHRvciAgQSBwb2ludGVyIHRvIHRoZSBjYWxsZXIg YWxsb2NhdGVkIFVTQiBVbmlvbiBGdW5jdGlvbmFsIERlc2NyaXB0b3IuDQo+ICsNCj4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBVU0IgVW5pb24gRnVuY3Rpb25hbCBkZXNj cmlwdG9yIHdhcyByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZB TElEX1BBUkFNRVRFUiAgVXNiVW5pb25GdW5EZXNjcmlwdG9yIGlzIE5VTEwuDQo+ICsgIEByZXR2 YWwgRUZJX05PVF9GT1VORCAgICAgICAgICBUaGUgVVNCIFVuaW9uIEZ1bmN0aW9uYWwgZGVzY3Jp cHRvciB3YXMgbm90IGZvdW5kLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQ SQ0KPiArR2V0VXNiVW5pb25GdW5EZXNjcmlwdG9yICgNCj4gKyAgSU4gIEVES0lJX1VTQl9FVEhF Uk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIE9VVCBVU0JfVU5JT05fRlVOX0RFU0NSSVBUT1Ig ICAgICpVc2JVbmlvbkZ1bkRlc2NyaXB0b3INCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVT ICAgICAgICBTdGF0dXM7DQo+ICsgIFVTQl9STkRJU19ERVZJQ0UgICpVc2JSbmRpc0RldmljZTsN Cj4gKw0KPiArICBVc2JSbmRpc0RldmljZSA9IFVTQl9STkRJU19ERVZJQ0VfRlJPTV9USElTIChU aGlzKTsNCj4gKw0KPiArICBpZiAoVXNiVW5pb25GdW5EZXNjcmlwdG9yID09IE5VTEwpIHsNCj4g KyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsNCj4gKyAgU3Rh dHVzID0gR2V0RnVuY3Rpb25hbERlc2NyaXB0b3IgKA0KPiArICAgICAgICAgICAgIFVzYlJuZGlz RGV2aWNlLT5Db25maWcsDQo+ICsgICAgICAgICAgICAgVU5JT05fRlVOX0RFU0NSSVBUT1IsDQo+ ICsgICAgICAgICAgICAgVXNiVW5pb25GdW5EZXNjcmlwdG9yDQo+ICsgICAgICAgICAgICAgKTsN Cj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJldHJpZXZlcyB0 aGUgVVNCIEV0aGVybmV0IGZ1bmN0aW9uYWwgRGVzY3JpcHRvci4NCj4gKw0KPiArICBUaGlzIGZ1 bmN0aW9uIGdldCB0aGUgTWFjIEFkZHJlc3MsIEV0aGVybmV0IHN0YXRpc3RpY3MsIG1heGltdW0g c2VnbWVudCBzaXplLA0KPiArICBudW1iZXIgb2YgbXVsdGljYXN0IGZpbHRlcnMsIGFuZCBudW1i ZXIgb2YgcGF0dGVybiBmaWx0ZXJzIGZyb20gRXRoZXJuZXQNCj4gKyAgZnVuY3Rpb25hbCBEZXNj cmlwdG9yLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICAgQSBw b2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsg IEBwYXJhbVtvdXRdIFVzYkV0aEZ1bkRlc2NyaXB0b3IgICAgQSBwb2ludGVyIHRvIHRoZSBjYWxs ZXIgYWxsb2NhdGVkIFVTQiBFdGhlcm5ldCBGdW5jdGlvbmFsIERlc2NyaXB0b3IuDQo+ICsNCj4g KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBVU0IgRXRoZXJuZXQgRnVuY3Rp b25hbCBkZXNjcmlwdG9yIHdhcyByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFs IEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVXNiRXRoRnVuRGVzY3JpcHRvciBpcyBOVUxMLg0KPiAr ICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgVGhlIFVTQiBFdGhlcm5ldCBGdW5jdGlv bmFsIGRlc2NyaXB0b3Igd2FzIG5vdCBmb3VuZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVT DQo+ICtFRklBUEkNCj4gK0dldFVzYlJuZGlzRnVuRGVzY3JpcHRvciAoDQo+ICsgIElOICBFREtJ SV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBPVVQgVVNCX0VUSEVSTkVUX0ZV Tl9ERVNDUklQVE9SICAqVXNiRXRoRnVuRGVzY3JpcHRvcg0KPiArICApDQo+ICt7DQo+ICsgIEVG SV9TVEFUVVMgICAgICAgIFN0YXR1czsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAgKlVzYlJuZGlz RGV2aWNlOw0KPiArDQo+ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9N X1RISVMgKFRoaXMpOw0KPiArDQo+ICsgIGlmIChVc2JFdGhGdW5EZXNjcmlwdG9yID09IE5VTEwp IHsNCj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsNCj4g KyAgU3RhdHVzID0gR2V0RnVuY3Rpb25hbERlc2NyaXB0b3IgKA0KPiArICAgICAgICAgICAgIFVz YlJuZGlzRGV2aWNlLT5Db25maWcsDQo+ICsgICAgICAgICAgICAgRVRIRVJORVRfRlVOX0RFU0NS SVBUT1IsDQo+ICsgICAgICAgICAgICAgVXNiRXRoRnVuRGVzY3JpcHRvcg0KPiArICAgICAgICAg ICAgICk7DQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlz IHJlcXVlc3Qgc2V0cyB0aGUgRXRoZXJuZXQgZGV2aWNlIG11bHRpY2FzdCBmaWx0ZXJzIGFzIHNw ZWNpZmllZCBpbiB0aGUNCj4gKyAgc2VxdWVudGlhbCBsaXN0IG9mIDQ4IGJpdCBFdGhlcm5ldCBt dWx0aWNhc3QgYWRkcmVzc2VzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAg ICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5z dGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgICAgICAgICAgTnVtYmVyIG9m IGZpbHRlcnMuDQo+ICsgIEBwYXJhbVtpbl0gIE1jYXN0QWRkciAgICAgICAgICAgICAgQSBwb2lu dGVyIHRvIHRoZSB2YWx1ZSBvZiB0aGUgbXVsdGljYXN0IGFkZHJlc3Nlcy4NCj4gKw0KPiArICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vz c2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICAgQSB0aW1lb3V0IG9j Y3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VS Uk9SICAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsg IEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFz IGFuIGludmFsaWQgdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICBO b3Qgc3VwcG9ydGVkLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiAr U2V0VXNiUm5kaXNNY2FzdEZpbHRlciAoDQo+ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9U T0NPTCAgKlRoaXMsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUs DQo+ICsgIElOIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgKk1jYXN0QWRkcg0KPiArICAp DQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBF RklfVVNCX0RFVklDRV9SRVFVRVNUICAgICAgIFJlcXVlc3Q7DQo+ICsgIFVJTlQzMiAgICAgICAg ICAgICAgICAgICAgICAgVHJhbnNTdGF0dXM7DQo+ICsgIFVTQl9FVEhFUk5FVF9GVU5fREVTQ1JJ UFRPUiAgVXNiRXRoRnVuRGVzY3JpcHRvcjsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAgICAgICAg ICAgICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0JfUk5E SVNfREVWSUNFX0ZST01fVEhJUyAoVGhpcyk7DQo+ICsNCj4gKyAgU3RhdHVzID0gVGhpcy0+VXNi RXRoRnVuRGVzY3JpcHRvciAoVGhpcywgJlVzYkV0aEZ1bkRlc2NyaXB0b3IpOw0KPiArICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiAr DQo+ICsgIGlmICgoVXNiRXRoRnVuRGVzY3JpcHRvci5OdW1iZXJNY0ZpbHRlcnMgPDwgMSkgPT0g MCkgew0KPiArICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ICsgIH0NCj4gKw0KPiArICBS ZXF1ZXN0LlJlcXVlc3RUeXBlID0gVVNCX0VUSEVSTkVUX1NFVF9SRVFfVFlQRTsNCj4gKyAgUmVx dWVzdC5SZXF1ZXN0ICAgICA9IFNFVF9FVEhfTVVMVElDQVNUX0ZJTFRFUlNfUkVROw0KPiArICBS ZXF1ZXN0LlZhbHVlICAgICAgID0gVmFsdWU7DQo+ICsgIFJlcXVlc3QuSW5kZXggICAgICAgPSBV c2JSbmRpc0RldmljZS0+TnVtT2ZJbnRlcmZhY2U7DQo+ICsgIFJlcXVlc3QuTGVuZ3RoICAgICAg PSBWYWx1ZSAqIDY7DQo+ICsNCj4gKyAgcmV0dXJuIFVzYlJuZGlzRGV2aWNlLT5Vc2JJby0+VXNi Q29udHJvbFRyYW5zZmVyICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBV c2JSbmRpc0RldmljZS0+VXNiSW8sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJlJlcXVlc3QsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWZpVXNi RGF0YU91dCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfRVRIRVJO RVRfVFJBTlNGRVJfVElNRU9VVCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBNY2FzdEFkZHIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVz dC5MZW5ndGgsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlRyYW5zU3Rh dHVzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgIFRoaXMgcmVxdWVzdCBzZXRzIHVwIHRoZSBzcGVjaWZpZWQgRXRoZXJuZXQg cG93ZXIgbWFuYWdlbWVudCBwYXR0ZXJuIGZpbHRlciBhcw0KPiArICBkZXNjcmliZWQgaW4gdGhl IGRhdGEgc3RydWN0dXJlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAg ICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5j ZS4NCj4gKyAgQHBhcmFtW2luXSAgVmFsdWUgICAgICAgICAgICAgICAgIE51bWJlciBvZiBmaWx0 ZXJzLg0KPiArICBAcGFyYW1baW5dICBMZW5ndGggICAgICAgICAgICAgICAgU2l6ZSBvZiB0aGUg cG93ZXIgbWFuYWdlbWVudCBwYXR0ZXJuIGZpbHRlciBkYXRhLg0KPiArICBAcGFyYW1baW5dICBQ YXR0ZXJuRmlsdGVyICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBwb3dlciBtYW5hZ2VtZW50IHBh dHRlcm4gZmlsdGVyIHN0cnVjdHVyZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFs IEVGSV9USU1FT1VUICAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUg cmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgIFRoZSByZXF1ZXN0 IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURf UEFSQU1FVEVSICBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArDQo+ ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArU2V0VXNiUm5kaXNQb3dlckZpbHRl ciAoDQo+ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElO IFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUsDQo+ICsgIElOIFVJTlQxNiAgICAg ICAgICAgICAgICAgICAgICAgTGVuZ3RoLA0KPiArICBJTiBWT0lEICAgICAgICAgICAgICAgICAg ICAgICAgICpQYXR0ZXJuRmlsdGVyDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1VTQl9ERVZJQ0Vf UkVRVUVTVCAgUmVxdWVzdDsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgVHJhbnNTdGF0 dXM7DQo+ICsgIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICpVc2JSbmRpc0RldmljZTsNCj4gKw0K PiArICBVc2JSbmRpc0RldmljZSA9IFVTQl9STkRJU19ERVZJQ0VfRlJPTV9USElTIChUaGlzKTsN Cj4gKw0KPiArICBSZXF1ZXN0LlJlcXVlc3RUeXBlID0gVVNCX0VUSEVSTkVUX1NFVF9SRVFfVFlQ RTsNCj4gKyAgUmVxdWVzdC5SZXF1ZXN0ICAgICA9IFNFVF9FVEhfUE9XRVJfTUFOQUdFTUVOVF9Q QVRURVJOX0ZJTFRFUl9SRVE7DQo+ICsgIFJlcXVlc3QuVmFsdWUgICAgICAgPSBWYWx1ZTsNCj4g KyAgUmVxdWVzdC5JbmRleCAgICAgICA9IFVzYlJuZGlzRGV2aWNlLT5OdW1PZkludGVyZmFjZTsN Cj4gKyAgUmVxdWVzdC5MZW5ndGggICAgICA9IExlbmd0aDsNCj4gKw0KPiArICByZXR1cm4gVXNi Um5kaXNEZXZpY2UtPlVzYklvLT5Vc2JDb250cm9sVHJhbnNmZXIgKA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Vc2JJbywNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmUmVxdWVzdCwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBFZmlVc2JEYXRhT3V0LA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFVTQl9FVEhFUk5FVF9UUkFOU0ZFUl9USU1FT1VULA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFBhdHRlcm5GaWx0ZXIsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZUcmFuc1N0YXR1cw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIHJlcXVlc3QgcmV0cmlldmVzIHRo ZSBzdGF0dXMgb2YgdGhlIHNwZWNpZmllZCBFdGhlcm5ldCBwb3dlciBtYW5hZ2VtZW50DQo+ICsg IHBhdHRlcm4gZmlsdGVyIGZyb20gdGhlIGRldmljZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBU aGlzICAgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVU X1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBWYWx1ZSAgICAgICAgICAgICAg ICAgIFRoZSBmaWx0ZXIgbnVtYmVyLg0KPiArICBAcGFyYW1bb3V0XSBQYXR0ZXJuQWN0aXZlICAg ICAgICAgIEEgcG9pbnRlciB0byB0aGUgcGF0dGVybiBhY3RpdmUgYm9vbGVhbi4NCj4gKw0KPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3Vj Y2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICAgQSB0aW1lb3V0 IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNF X0VSUk9SICAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBPbmUgb2YgdGhlIHBhcmFtZXRlcnMg aGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAg ICBOb3Qgc3VwcG9ydGVkLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0K PiArR2V0VXNiUm5kaXNQb3dlckZpbHRlciAoDQo+ICsgIElOICBFREtJSV9VU0JfRVRIRVJORVRf UFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICBW YWx1ZSwNCj4gKyAgT1VUIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgKlBhdHRlcm5BY3Rp dmUNCj4gKyAgKQ0KPiArew0KPiArICBFRklfVVNCX0RFVklDRV9SRVFVRVNUICBSZXF1ZXN0Ow0K PiArICBVSU5UMzIgICAgICAgICAgICAgICAgICBUcmFuc1N0YXR1czsNCj4gKyAgVVNCX1JORElT X0RFVklDRSAgICAgICAgKlVzYlJuZGlzRGV2aWNlOw0KPiArDQo+ICsgIFVzYlJuZGlzRGV2aWNl ID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFRoaXMpOw0KPiArDQo+ICsgIFJlcXVlc3Qu UmVxdWVzdFR5cGUgPSBVU0JfRVRIRVJORVRfR0VUX1JFUV9UWVBFOw0KPiArICBSZXF1ZXN0LlJl cXVlc3QgICAgID0gR0VUX0VUSF9QT1dFUl9NQU5BR0VNRU5UX1BBVFRFUk5fRklMVEVSX1JFUTsN Cj4gKyAgUmVxdWVzdC5WYWx1ZSAgICAgICA9IFZhbHVlOw0KPiArICBSZXF1ZXN0LkluZGV4ICAg ICAgID0gVXNiUm5kaXNEZXZpY2UtPk51bU9mSW50ZXJmYWNlOw0KPiArICBSZXF1ZXN0Lkxlbmd0 aCAgICAgID0gVVNCX0VUSF9QT1dFUl9GSUxURVJfTEVOR1RIOw0KPiArDQo+ICsgIHJldHVybiBV c2JSbmRpc0RldmljZS0+VXNiSW8tPlVzYkNvbnRyb2xUcmFuc2ZlciAoDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYklvLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZSZXF1ZXN0LA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEVmaVVzYkRhdGFJbiwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBVU0JfRVRIRVJORVRfVFJBTlNGRVJfVElNRU9VVCwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQYXR0ZXJuQWN0aXZlLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFVTQl9FVEhfUE9XRVJfRklMVEVSX0xFTkdUSCwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmVHJhbnNTdGF0dXMNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKw0KPiAr ICBDb252ZXJ0cyBQWEUgZmlsdGVyIHNldHRpbmdzIHRvIFJORElTIHZhbHVlcw0KPiArDQo+ICsg IEBwYXJhbVtpbl0gIFZhbHVlICAgICAgUFhFIGZpbHRlciBkYXRhLg0KPiArICBAcGFyYW1bb3V0 XSBDZGNGaWx0ZXIgIEEgcG9pbnRlciB0byB0aGUgRXRoZXJuZXQgUGFja2V0IEZpbHRlciBCaXRt YXAgdmFsdWUgY29udmVydGVkIGJ5IFBYRV9PUEZMQUdTLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQN Cj4gK0NvbnZlcnRGaWx0ZXIgKA0KPiArICBJTiAgVUlOVDE2ICBWYWx1ZSwNCj4gKyAgT1VUIFVJ TlQxNiAgKkNkY0ZpbHRlcg0KPiArICApDQo+ICt7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAg ICAgSW5kZXg7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgQ291bnQ7DQo+ICsgIHN0YXRp YyBzdHJ1Y3QgQklUX01BUCAgVGFibGVbXSA9IHsNCj4gKyAgICB7IFBYRV9PUEZMQUdTX1JFQ0VJ VkVfRklMVEVSX1VOSUNBU1QsICAgICAgICAgICAgTkRJU19QQUNLRVRfVFlQRV9ESVJFQ1RFRCAg ICAgIH0sDQo+ICsgICAgeyBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9CUk9BRENBU1QsICAg ICAgICAgIE5ESVNfUEFDS0VUX1RZUEVfQlJPQURDQVNUICAgICB9LA0KPiArICAgIHsgUFhFX09Q RkxBR1NfUkVDRUlWRV9GSUxURVJfRklMVEVSRURfTVVMVElDQVNULCBORElTX1BBQ0tFVF9UWVBF X01VTFRJQ0FTVCAgICAgfSwNCj4gKyAgICB7IFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX1BS T01JU0NVT1VTLCAgICAgICAgTkRJU19QQUNLRVRfVFlQRV9QUk9NSVNDVU9VUyAgIH0sDQo+ICsg ICAgeyBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9BTExfTVVMVElDQVNULCAgICAgIE5ESVNf UEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVCB9LA0KPiArICB9Ow0KPiArDQo+ICsgIENvdW50ID0g c2l6ZW9mIChUYWJsZSkvc2l6ZW9mIChUYWJsZVswXSk7DQo+ICsNCj4gKyAgZm9yIChJbmRleCA9 IDA7IChUYWJsZVtJbmRleF0uU3JjICE9IDApICYmIChJbmRleCA8IENvdW50KTsgSW5kZXgrKykg ew0KPiArICAgIGlmIChUYWJsZVtJbmRleF0uU3JjICYgVmFsdWUpIHsNCj4gKyAgICAgICpDZGNG aWx0ZXIgfD0gVGFibGVbSW5kZXhdLkRzdDsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4gKw0K PiArLyoqDQo+ICsNCj4gKyAgVXBkYXRlcyBGaWx0ZXIgc2V0dGluZ3Mgb24gdGhlIGRldmljZS4N Cj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNj cmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0 d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NU QVRVUw0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRp UmVjZWl2ZUZpbHRlciAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19E QVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAg ICBTdGF0dXM7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgKk1jYXN0TGlzdDsN Cj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICBDb3VudDsNCj4gKyAgVUlOVDggICAg ICAgICAgICAgICAgICAgICAgICBJbmRleDE7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAg ICAgICAgSW5kZXgyOw0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgIENwYkFkZHI7 DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgQ3BiU2l6ZTsNCj4gKyAgVUlOVDE2 ICAgICAgICAgICAgICAgICAgICAgICBTZXRGaWx0ZXI7DQo+ICsgIFBYRV9DUEJfUkVDRUlWRV9G SUxURVJTICAgICAgKkNwYjsNCj4gKyAgVVNCX0VUSEVSTkVUX0ZVTl9ERVNDUklQVE9SICBVc2JF dGhGdW5EZXNjcmlwdG9yOw0KPiArDQo+ICsgIENvdW50ICAgICA9IDA7DQo+ICsgIENwYkFkZHIg ICA9IENkYi0+Q1BCYWRkcjsNCj4gKyAgQ3BiU2l6ZSAgID0gQ2RiLT5DUEJzaXplOw0KPiArICBT ZXRGaWx0ZXIgPSAoVUlOVDE2KShDZGItPk9wRmxhZ3MgJiAweDFGKTsNCj4gKyAgQ3BiICAgICAg ID0gKFBYRV9DUEJfUkVDRUlWRV9GSUxURVJTICopKFVJTlROKUNwYkFkZHI7DQo+ICsNCj4gKyAg Ly8gVGhlIENwYiBjb3VsZCBiZSBOVUxMLihyZWY6UFhFX0NQQkFERFJfTk9UX1VTRUQpDQo+ICsg IE5pYy0+UnhGaWx0ZXIgPSAoVUlOVDgpU2V0RmlsdGVyOw0KPiArDQo+ICsgIGlmICgoKFNldEZp bHRlciAmIFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0ZJTFRFUkVEX01VTFRJQ0FTVCkgIT0g MCkgfHwgKENwYiAhPSBOVUxMKSkgew0KPiArICAgIGlmIChDcGIgIT0gTlVMTCkgew0KPiArICAg ICAgTmljLT5NY2FzdENvdW50ID0gKFVJTlQ4KShDcGJTaXplIC8gUFhFX01BQ19MRU5HVEgpOw0K PiArICAgICAgQ29weU1lbSAoJk5pYy0+TWNhc3RMaXN0LCBDcGIsIE5pYy0+TWNhc3RDb3VudCk7 DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgIE5pYy0+TWNhc3RDb3VudCA9IDA7DQo+ICsgICAg fQ0KPiArDQo+ICsgICAgTmljLT5Vc2JFdGgtPlVzYkV0aEZ1bkRlc2NyaXB0b3IgKE5pYy0+VXNi RXRoLCAmVXNiRXRoRnVuRGVzY3JpcHRvcik7DQo+ICsgICAgaWYgKChVc2JFdGhGdW5EZXNjcmlw dG9yLk51bWJlck1jRmlsdGVycyA8PCAxKSA9PSAwKSB7DQo+ICsgICAgICBOaWMtPlJ4RmlsdGVy IHw9IFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0FMTF9NVUxUSUNBU1Q7DQo+ICsgICAgICBE RUJVRyAoKERFQlVHX0lORk8sICJTZXRVc2JFdGhQYWNrZXRGaWx0ZXIgTmljICVseCBOaWMtPlVz YkV0aCAlbHggIiwgTmljLCBOaWMtPlVzYkV0aCkpOw0KPiArICAgICAgTmljLT5Vc2JFdGgtPlNl dFVzYkV0aFBhY2tldEZpbHRlciAoTmljLT5Vc2JFdGgsIE5pYy0+UnhGaWx0ZXIpOw0KPiArICAg IH0gZWxzZSB7DQo+ICsgICAgICBTdGF0dXMgPSBnQlMtPkFsbG9jYXRlUG9vbCAoRWZpQm9vdFNl cnZpY2VzRGF0YSwgTmljLT5NY2FzdENvdW50ICogNiwgKFZPSUQgKiopJk1jYXN0TGlzdCk7DQo+ ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICAgIHJldHVybiBQWEVf U1RBVENPREVfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIGlm IChDcGIgIT0gTlVMTCkgew0KPiArICAgICAgICBmb3IgKEluZGV4MSA9IDA7IEluZGV4MSA8IE5p Yy0+TWNhc3RDb3VudDsgSW5kZXgxKyspIHsNCj4gKyAgICAgICAgICBmb3IgKEluZGV4MiA9IDA7 IEluZGV4MiA8IDY7IEluZGV4MisrKSB7DQo+ICsgICAgICAgICAgICBNY2FzdExpc3RbQ291bnQr K10gPSBDcGItPk1DYXN0TGlzdFtJbmRleDFdW0luZGV4Ml07DQo+ICsgICAgICAgICAgfQ0KPiAr ICAgICAgICB9DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIE5pYy0+UnhGaWx0ZXIgfD0gUFhF X09QRkxBR1NfUkVDRUlWRV9GSUxURVJfRklMVEVSRURfTVVMVElDQVNUOw0KPiArICAgICAgaWYg KENwYiAhPSBOVUxMKSB7DQo+ICsgICAgICAgIE5pYy0+VXNiRXRoLT5TZXRVc2JFdGhNY2FzdEZp bHRlciAoTmljLT5Vc2JFdGgsIE5pYy0+TWNhc3RDb3VudCwgTWNhc3RMaXN0KTsNCj4gKyAgICAg IH0NCj4gKw0KPiArICAgICAgTmljLT5Vc2JFdGgtPlNldFVzYkV0aFBhY2tldEZpbHRlciAoTmlj LT5Vc2JFdGgsIE5pYy0+UnhGaWx0ZXIpOw0KPiArICAgICAgRnJlZVBvb2wgKE1jYXN0TGlzdCk7 DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0K PiArDQo+ICsvKioNCj4gKyAgVGhpcyByZXF1ZXN0IGlzIHVzZWQgdG8gY29uZmlndXJlIGRldmlj ZSBFdGhlcm5ldCBwYWNrZXQgZmlsdGVyIHNldHRpbmdzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0g IFRoaXMgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BS T1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBWYWx1ZSAgICAgICAgICAgICBQYWNr ZXQgRmlsdGVyIEJpdG1hcC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAg ICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJ TUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3Qu DQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBk dWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVS IE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4gKyAgQHJldHZh bCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKw0KPiArKiovDQo+ICtF RklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1NldFVzYlJuZGlzUGFja2V0RmlsdGVyICgNCj4gKyAg SU4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gVUlOVDE2ICAg ICAgICAgICAgICAgICAgICAgICBWYWx1ZQ0KPiArICApDQo+ICt7DQo+ICsgIHJldHVybiBFRklf U1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgcmVxdWVzdCBpcyB1c2VkIHRv IHJldHJpZXZlIGEgc3RhdGlzdGljIGJhc2VkIG9uIHRoZSBmZWF0dXJlIHNlbGVjdG9yLg0KPiAr DQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhl IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAg RmVhdHVyZVNlbGVjdG9yICAgICAgIFZhbHVlIG9mIHRoZSBmZWF0dXJlIHNlbGVjdG9yLg0KPiAr ICBAcGFyYW1bb3V0XSBTdGF0aXN0aWMgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSAzMiBi aXQgdW5zaWduZWQgaW50ZWdlci4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJ X1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVl c3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxl ZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1F VEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4gKyAgQHJl dHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKw0KPiArKiovDQo+ ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0dldFJuZGlzU3RhdGlzdGljICgNCj4gKyAgSU4g IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOICBVSU5UMTYgICAg ICAgICAgICAgICAgICAgICAgIEZlYXR1cmVTZWxlY3RvciwNCj4gKyAgT1VUIFZPSUQgICAgICAg ICAgICAgICAgICAgICAgICAgKlN0YXRpc3RpYw0KPiArICApDQo+ICt7DQo+ICsgIHJldHVybiBF RklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gaXMgY2Fs bGVkIHdoZW4gVW5kaVN0YXJ0IGlzIGludm9rZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2Ri ICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFt W2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIg ZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBUaGUgcmVxdWVzdCBleGVj dXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJ DQo+ICtSbmRpc1VuZGlTdGFydCAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4g IE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0K PiArDQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzVW5kaVN0YXJ0IE5pYyAlbHggQ2Ri ICVseCBOaWMgU3RhdGUgJXhcbiIsIE5pYywgQ2RiLCBOaWMtPlN0YXRlKSk7DQo+ICsNCj4gKyAg Ly8gSXNzdWUgUm5kaXMgUmVzZXQgYW5kIGJyaW5nIHRoZSBkZXZpY2UgdG8gUk5ESVNfQlVTX0lO SVRJQUxJWkVEIHN0YXRlDQo+ICsgIFN0YXR1cyA9IFJuZGlzVW5kaVJlc2V0IChDZGIsIE5pYyk7 DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBSbmRpc1VuZGlSZXNldCAo Q2RiLCBOaWMpOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gUm5kaXNVbmRpSW5pdGlhbGl6 ZSAoQ2RiLCBOaWMpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgUm5k aXNVbmRpSW5pdGlhbGl6ZSAoQ2RiLCBOaWMpOw0KPiArICB9DQo+ICsNCj4gKyAgUm5kaXNVbmRp U2h1dGRvd24gKENkYiwgTmljKTsNCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9 DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIFVuZGlzdG9w IGlzIGludm9rZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhl IGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50 ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHku DQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRpU3RvcCAoDQo+ ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkN Cj4gK3sNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXNVbmRpU3RvcCBTdGF0ZSAleFxu IiwgTmljLT5TdGF0ZSkpOw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4g Ky8qKg0KPiArICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIFVuZGlHZXRJbml0SW5mbyBp cyBpbnZva2VkLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBj b21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVy IHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0K PiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRpR2V0SW5p dEluZm8gKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5p Yw0KPiArICApDQo+ICt7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlVzYkV0 aERldmljZTsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgICAgICAqVXNiUm5kaXNEZXZp Y2U7DQo+ICsgIFBYRV9EQl9HRVRfSU5JVF9JTkZPICAgICAgICAgKkRiOw0KPiArDQo+ICsgIERF QlVHICgoREVCVUdfSU5GTywgIlJuZGlzVW5kaUdldEluaXRJbmZvXG4iKSk7DQo+ICsNCj4gKyAg VXNiRXRoRGV2aWNlICAgPSBOaWMtPlVzYkV0aDsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0Jf Uk5ESVNfREVWSUNFX0ZST01fVEhJUyAoVXNiRXRoRGV2aWNlKTsNCj4gKw0KPiArICBEYiA9IChQ WEVfREJfR0VUX0lOSVRfSU5GTyAqKShVSU5UTilDZGItPkRCYWRkcjsNCj4gKw0KPiArICBEYi0+ RnJhbWVEYXRhTGVuID0gVXNiUm5kaXNEZXZpY2UtPk1heFRyYW5zZmVyU2l6ZSAtIHNpemVvZiAo UkVNT1RFX05ESVNfUEFDS0VUX01TRykgLSBQWEVfTUFDX0hFQURFUl9MRU5fRVRIRVI7DQo+ICsg IC8vIExpbWl0IE1heCBNVFUgc2l6ZSB0byAxNTAwIGJ5dGVzIGFzIFJORElTIHNwZWMuDQo+ICsg IGlmIChEYi0+RnJhbWVEYXRhTGVuID4gUFhFX01BWF9UWFJYX1VOSVRfRVRIRVIpIHsNCj4gKyAg ICBEYi0+RnJhbWVEYXRhTGVuID0gUFhFX01BWF9UWFJYX1VOSVRfRVRIRVI7DQo+ICsgIH0NCj4g Kw0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJEYi0+RnJhbWVEYXRhTGVuICV4XG4iLCBEYi0+ RnJhbWVEYXRhTGVuKSk7DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBSbmRpc1VuZGlHZXRD b25maWdJbmZvIGlzIGludm9rZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50 ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmlj ICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4g Kw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNj ZXNzZnVsbHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRp c1VuZGlHZXRDb25maWdJbmZvICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAg TklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJS bmRpc1VuZGlHZXRDb25maWdJbmZvXG4iKSk7DQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gVW5kaUlu aXRpYWxpemUgaXMgaW52b2tlZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRl ciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMg IEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiAr DQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVk IHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1 cHBvcnRlZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlz VW5kaUluaXRpYWxpemUgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNf REFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NP TCAgICpVc2JFdGhEcml2ZXI7DQo+ICsgIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICAgICAgICpV c2JSbmRpc0RldmljZTsNCj4gKyAgUkVNT1RFX05ESVNfSU5JVElBTElaRV9NU0cgICAgUm5kaXNJ bml0TXNnOw0KPiArICBSRU1PVEVfTkRJU19JTklUSUFMSVpFX0NNUExUICBSbmRpc0luaXRNc2dD bXBsdDsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArDQo+ ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzVW5kaUluaXRpYWxpemVcbiIpKTsNCj4gKw0K PiArICBVc2JFdGhEcml2ZXIgICA9IE5pYy0+VXNiRXRoOw0KPiArICBVc2JSbmRpc0RldmljZSA9 IFVTQl9STkRJU19ERVZJQ0VfRlJPTV9USElTIChVc2JFdGhEcml2ZXIpOw0KPiArDQo+ICsgIFpl cm9NZW0gKCZSbmRpc0luaXRNc2csIHNpemVvZiAoUkVNT1RFX05ESVNfSU5JVElBTElaRV9NU0cp KTsNCj4gKyAgWmVyb01lbSAoJlJuZGlzSW5pdE1zZ0NtcGx0LCBzaXplb2YgKFJFTU9URV9ORElT X0lOSVRJQUxJWkVfQ01QTFQpKTsNCj4gKw0KPiArICBSbmRpc0luaXRNc2cuTWVzc2FnZVR5cGUg ICAgID0gUk5ESVNfSU5JVElBTElaRV9NU0c7DQo+ICsgIFJuZGlzSW5pdE1zZy5NZXNzYWdlTGVu Z3RoICAgPSBzaXplb2YgKFJFTU9URV9ORElTX0lOSVRJQUxJWkVfTVNHKTsNCj4gKyAgUm5kaXNJ bml0TXNnLlJlcXVlc3RJRCAgICAgICA9IFVzYlJuZGlzRGV2aWNlLT5SZXF1ZXN0SWQ7DQo+ICsg IFJuZGlzSW5pdE1zZy5NYWpvclZlcnNpb24gICAgPSBSTkRJU19NQUpPUl9WRVJTSU9OOw0KPiAr ICBSbmRpc0luaXRNc2cuTWlub3JWZXJzaW9uICAgID0gUk5ESVNfTUlOT1JfVkVSU0lPTjsNCj4g KyAgUm5kaXNJbml0TXNnLk1heFRyYW5zZmVyU2l6ZSA9IFJORElTX01BWF9UUkFOU0ZFUl9TSVpF Ow0KPiArDQo+ICsgIFJuZGlzSW5pdE1zZ0NtcGx0Lk1lc3NhZ2VUeXBlICAgPSBSTkRJU19JTklU SUFMSVpFX0NNUExUOw0KPiArICBSbmRpc0luaXRNc2dDbXBsdC5NZXNzYWdlTGVuZ3RoID0gc2l6 ZW9mIChSRU1PVEVfTkRJU19JTklUSUFMSVpFX0NNUExUKTsNCj4gKw0KPiArICBTdGF0dXMgPSBS bmRpc0NvbnRyb2xNc2cgKFVzYlJuZGlzRGV2aWNlLCAoUkVNT1RFX05ESVNfTVNHX0hFQURFUiAq KSZSbmRpc0luaXRNc2csIChSRU1PVEVfTkRJU19NU0dfSEVBREVSICopJlJuZGlzSW5pdE1zZ0Nt cGx0KTsNCj4gKw0KPiArICBVc2JSbmRpc0RldmljZS0+UmVxdWVzdElkKys7DQo+ICsNCj4gKyAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSB8fCAoUm5kaXNJbml0TXNnQ21wbHQuU3RhdHVzICYgMHg4 MDAwMDAwMCkpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgLy8g T25seSBXaXJlZCBNZWRpdW0gaXMgc3VwcG9ydGVkDQo+ICsgIGlmIChSbmRpc0luaXRNc2dDbXBs dC5NZWRpdW0pIHsNCj4gKyAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArICB9DQo+ICsN Cj4gKyAgVXNiUm5kaXNEZXZpY2UtPk1lZGl1bSAgICAgICAgICAgICAgICA9IFJuZGlzSW5pdE1z Z0NtcGx0Lk1lZGl1bTsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPk1heFBhY2tldHNQZXJUcmFuc2Zl ciA9IFJuZGlzSW5pdE1zZ0NtcGx0Lk1heFBhY2tldHNQZXJUcmFuc2ZlcjsNCj4gKyAgVXNiUm5k aXNEZXZpY2UtPk1heFRyYW5zZmVyU2l6ZSAgICAgICA9IFJuZGlzSW5pdE1zZ0NtcGx0Lk1heFRy YW5zZmVyU2l6ZTsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlBhY2tldEFsaWdubWVudEZhY3RvciA9 IFJuZGlzSW5pdE1zZ0NtcGx0LlBhY2tldEFsaWdubWVudEZhY3RvcjsNCj4gKw0KPiArICBERUJV RyAoKERFQlVHX0lORk8sICJNZWRpdW0gOiAleCBcbiIsIFJuZGlzSW5pdE1zZ0NtcGx0Lk1lZGl1 bSkpOw0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJNYXhQYWNrZXRzUGVyVHJhbnNmZXIgOiAl eCBcbiIsIFJuZGlzSW5pdE1zZ0NtcGx0Lk1heFBhY2tldHNQZXJUcmFuc2ZlcikpOw0KPiArICBE RUJVRyAoKERFQlVHX0lORk8sICJNYXhUcmFuc2ZlclNpemUgOiAleFxuIiwgUm5kaXNJbml0TXNn Q21wbHQuTWF4VHJhbnNmZXJTaXplKSk7DQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlBhY2tl dEFsaWdubWVudEZhY3RvciA6ICV4XG4iLCBSbmRpc0luaXRNc2dDbXBsdC5QYWNrZXRBbGlnbm1l bnRGYWN0b3IpKTsNCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioN Cj4gKyAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBVbmRpUmVzZXQgaXMgaW52b2tlZC4N Cj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNj cmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0 d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAg QHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBh IGRldmljZSBlcnJvci4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4g K1JuZGlzVW5kaVJlc2V0ICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklD X0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9D T0wgICpVc2JFdGhEcml2ZXI7DQo+ICsgIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICAgICAgKlVz YlJuZGlzRGV2aWNlOw0KPiArICBSRU1PVEVfTkRJU19SRVNFVF9NU0cgICAgICAgIFJuZGlzUmVz ZXRNc2c7DQo+ICsgIFJFTU9URV9ORElTX1JFU0VUX0NNUExUICAgICAgUm5kaXNSZXNldENtcGx0 Ow0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBE RUJVRyAoKERFQlVHX0lORk8sICJSbmRpc1VuZGlSZXNldFxuIikpOw0KPiArDQo+ICsgIFVzYkV0 aERyaXZlciAgID0gTmljLT5Vc2JFdGg7DQo+ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElT X0RFVklDRV9GUk9NX1RISVMgKFVzYkV0aERyaXZlcik7DQo+ICsNCj4gKyAgWmVyb01lbSAoJlJu ZGlzUmVzZXRNc2csIHNpemVvZiAoUkVNT1RFX05ESVNfUkVTRVRfTVNHKSk7DQo+ICsgIFplcm9N ZW0gKCZSbmRpc1Jlc2V0Q21wbHQsIHNpemVvZiAoUkVNT1RFX05ESVNfUkVTRVRfQ01QTFQpKTsN Cj4gKw0KPiArICBSbmRpc1Jlc2V0TXNnLk1lc3NhZ2VUeXBlICAgPSBSTkRJU19SRVNFVF9NU0c7 DQo+ICsgIFJuZGlzUmVzZXRNc2cuTWVzc2FnZUxlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNf UkVTRVRfTVNHKTsNCj4gKw0KPiArICBSbmRpc1Jlc2V0Q21wbHQuTWVzc2FnZVR5cGUgICA9IFJO RElTX1JFU0VUX0NNUExUOw0KPiArICBSbmRpc1Jlc2V0Q21wbHQuTWVzc2FnZUxlbmd0aCA9IHNp emVvZiAoUkVNT1RFX05ESVNfUkVTRVRfQ01QTFQpOw0KPiArDQo+ICsgIFN0YXR1cyA9IFJuZGlz Q29udHJvbE1zZyAoVXNiUm5kaXNEZXZpY2UsIChSRU1PVEVfTkRJU19NU0dfSEVBREVSICopJlJu ZGlzUmVzZXRNc2csIChSRU1PVEVfTkRJU19NU0dfSEVBREVSICopJlJuZGlzUmVzZXRDbXBsdCk7 DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlJlcXVlc3RJZCA9IDE7ICAgICAgICAgIC8vIExl dCdzIHN0YXJ0IHdpdGggMQ0KPiArDQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykgfHwgKFJu ZGlzUmVzZXRDbXBsdC5TdGF0dXMgJiAweDgwMDAwMDAwKSkgew0KPiArICAgIHJldHVybiBFRklf REVWSUNFX0VSUk9SOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBVbmRpU2h1 dGRvd24gaXMgaW52b2tlZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0 byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEg cG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3Nm dWxseS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5k aVNodXRkb3duICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEg ICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpV c2JFdGhEcml2ZXI7DQo+ICsgIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICAgICAgKlVzYlJuZGlz RGV2aWNlOw0KPiArICBSRU1PVEVfTkRJU19IQUxUX01TRyAgICAgICAgIFJuZGlzSGx0TXNnOw0K PiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBERUJV RyAoKERFQlVHX0lORk8sICJSbmRpc1VuZGlTaHV0ZG93blxuIikpOw0KPiArDQo+ICsgIFVzYkV0 aERyaXZlciAgID0gTmljLT5Vc2JFdGg7DQo+ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElT X0RFVklDRV9GUk9NX1RISVMgKFVzYkV0aERyaXZlcik7DQo+ICsNCj4gKyAgWmVyb01lbSAoJlJu ZGlzSGx0TXNnLCBzaXplb2YgKFJFTU9URV9ORElTX0hBTFRfTVNHKSk7DQo+ICsNCj4gKyAgUm5k aXNIbHRNc2cuTWVzc2FnZVR5cGUgICA9IFJORElTX0hMVF9NU0c7DQo+ICsgIFJuZGlzSGx0TXNn Lk1lc3NhZ2VMZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElTX0hBTFRfTVNHKTsNCj4gKw0KPiAr ICBTdGF0dXMgPSBSbmRpc0NvbnRyb2xNc2cgKFVzYlJuZGlzRGV2aWNlLCAoUkVNT1RFX05ESVNf TVNHX0hFQURFUiAqKSZSbmRpc0hsdE1zZywgTlVMTCk7DQo+ICsNCj4gKyAgaWYgKFN0YXR1cyA9 PSBFRklfREVWSUNFX0VSUk9SKSB7DQo+ICsgICAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+ICsg IH0NCj4gKw0KPiArICBVc2JSbmRpc0RldmljZS0+UmVxdWVzdElkID0gMTsNCj4gKyAgcmV0dXJu IFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFVwZGF0ZSB0aGUgTWVkaWEgY29ubmVj dGlvbi4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFu ZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0 aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKw0K PiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaUdldFN0YXR1cyAo DQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsg ICkNCj4gK3sNCj4gKyAgQ2RiLT5TdGF0RmxhZ3MgJj0gfihQWEVfU1RBVEZMQUdTX0dFVF9TVEFU VVNfTk9fTUVESUEpOw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICBUcmFuc21pdCB0aGUgZGF0YSBhZnRlciBhcHBlbmRpbmcgUk5ESVMgaGVhZGVyLg0K PiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICBDZGIgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUg Y29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICAgICAgVGhpcyAgICAg ICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5j ZS4NCj4gKyAgQHBhcmFtW2luXSAgICAgIEJ1bGtPdXREYXRhICAgQSBwb2ludGVyIHRvIHRoZSBi dWZmZXIgb2YgZGF0YSB0aGF0IHdpbGwgYmUgdHJhbnNtaXR0ZWQgdG8gVVNCDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSBvciByZWNlaXZlZCBmcm9tIFVTQiBkZXZp Y2UuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBEYXRhTGVuZ3RoICAgIEEgcG9pbnRlciB0byB0aGUg UGFja2V0TGVuZ3RoLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgIFRoZSByZXF1 ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ ICtFRklBUEkNCj4gK1JuZGlzVW5kaVRyYW5zbWl0ICgNCj4gKyAgSU4gICAgICBQWEVfQ0RCICAg ICAgICAgICAgICAgICAgICAgICpDZGIsDQo+ICsgIElOICAgICAgRURLSUlfVVNCX0VUSEVSTkVU X1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gICAgICBWT0lEICAgICAgICAgICAgICAgICAgICAg ICAgICpCdWxrT3V0RGF0YSwNCj4gKyAgSU4gT1VUICBVSU5UTiAgICAgICAgICAgICAgICAgICAg ICAgICpEYXRhTGVuZ3RoDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAg ICAgU3RhdHVzOw0KPiArICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAqVXNiUm5kaXNEZXZpY2U7 DQo+ICsgIFJFTU9URV9ORElTX1BBQ0tFVF9NU0cgICpSbmRpc1BhY2tldE1zZzsNCj4gKyAgVUlO VE4gICAgICAgICAgICAgICAgICAgVHJhbnNmZXJMZW5ndGg7DQo+ICsNCj4gKyAgREVCVUcgKChE RUJVR19JTkZPLCAiUm5kaXNVbmRpVHJhbnNtaXQgRGF0YUxlbmd0aCA6ICV4XG4iLCAqRGF0YUxl bmd0aCkpOw0KPiArDQo+ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9N X1RISVMgKFRoaXMpOw0KPiArDQo+ICsgIFJuZGlzUGFja2V0TXNnID0gQWxsb2NhdGVaZXJvUG9v bCAoc2l6ZW9mIChSRU1PVEVfTkRJU19QQUNLRVRfTVNHKSArICpEYXRhTGVuZ3RoKTsNCj4gKyAg aWYgKFJuZGlzUGFja2V0TXNnID09IE5VTEwpIHsNCj4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9S RVNPVVJDRVM7DQo+ICsgIH0NCj4gKw0KPiArICBSbmRpc1BhY2tldE1zZy0+TWVzc2FnZVR5cGUg ICA9IFJORElTX1BBQ0tFVF9NU0c7DQo+ICsgIFJuZGlzUGFja2V0TXNnLT5NZXNzYWdlTGVuZ3Ro ID0gc2l6ZW9mIChSRU1PVEVfTkRJU19QQUNLRVRfTVNHKSArIChVSU5UMzIpKkRhdGFMZW5ndGg7 DQo+ICsgIFJuZGlzUGFja2V0TXNnLT5EYXRhT2Zmc2V0ICAgID0gc2l6ZW9mIChSRU1PVEVfTkRJ U19QQUNLRVRfTVNHKSAtIDg7DQo+ICsgIFJuZGlzUGFja2V0TXNnLT5EYXRhTGVuZ3RoICAgID0g KFVJTlQzMikqRGF0YUxlbmd0aDsNCj4gKw0KPiArICBDb3B5TWVtICgNCj4gKyAgICAoKFVJTlQ4 ICopUm5kaXNQYWNrZXRNc2cpICsgc2l6ZW9mIChSRU1PVEVfTkRJU19QQUNLRVRfTVNHKSwNCj4g KyAgICBCdWxrT3V0RGF0YSwNCj4gKyAgICAqRGF0YUxlbmd0aA0KPiArICAgICk7DQo+ICsNCj4g KyAgVHJhbnNmZXJMZW5ndGggPSBSbmRpc1BhY2tldE1zZy0+TWVzc2FnZUxlbmd0aDsNCj4gKw0K PiArICBTdGF0dXMgPSBSbmRpc1RyYW5zbWl0RGF0YU1zZyAoDQo+ICsgICAgICAgICAgICAgVXNi Um5kaXNEZXZpY2UsDQo+ICsgICAgICAgICAgICAgKFJFTU9URV9ORElTX01TR19IRUFERVIgKilS bmRpc1BhY2tldE1zZywNCj4gKyAgICAgICAgICAgICAmVHJhbnNmZXJMZW5ndGgNCj4gKyAgICAg ICAgICAgICApOw0KPiArDQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlxuUm5kaXNVbmRpVHJh bnNtaXQgVHJhbnNmZXJMZW5ndGggJWx4XG4iLCBUcmFuc2Zlckxlbmd0aCkpOw0KPiArDQo+ICsg IEZyZWVQb29sIChSbmRpc1BhY2tldE1zZyk7DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgIFJlY2VpdmVzIGFuZCByZW1vdmVzIFJORElTIGhlYWRlciBh bmQgcmV0dXJucyB0aGUgcmF3IGRhdGEuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIENkYiAg ICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsg IEBwYXJhbVtpbl0gICAgICBUaGlzICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNC X0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW4sIG91dF0gQnVsa0lu RGF0YSAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBvZiBkYXRhIHRoYXQgd2lsbCBiZSB0cmFu c21pdHRlZCB0byBVU0INCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNl IG9yIHJlY2VpdmVkIGZyb20gVVNCIGRldmljZS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIERhdGFM ZW5ndGggICAgQSBwb2ludGVyIHRvIHRoZSBQYWNrZXRMZW5ndGguDQo+ICsNCj4gKyAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5 Lg0KPiArICBAcmV0dmFsIEVGSV9CVUZGRVJfVE9PX1NNQUxMICBUaGUgdXNlciBwcm92aWRlZCBi dWZmZXIgaXMgdG9vIHNtYWxsDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIE5v IGJ1ZmZlciB3YXMgZm91bmQgaW4gdGhlIGxpc3QuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRV Uw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlSZWNlaXZlICgNCj4gKyAgSU4gICAgIFBYRV9DREIg ICAgICAgICAgICAgICAgICAgICAgKkNkYiwNCj4gKyAgSU4gICAgIEVES0lJX1VTQl9FVEhFUk5F VF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIE9VVCBWT0lEICAgICAgICAgICAgICAgICAgICAg ICAgICpCdWxrSW5EYXRhLA0KPiArICBJTiBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAqRGF0YUxlbmd0aA0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAg IFN0YXR1czsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgKlVzYlJuZGlzRGV2aWNlOw0K PiArICBSRU1PVEVfTkRJU19QQUNLRVRfTVNHICAqUm5kaXNQYWNrZXRNc2c7DQo+ICsgIFVJTlRO ICAgICAgICAgICAgICAgICAgIFRyYW5zZmVyTGVuZ3RoOw0KPiArICBWT0lEICAgICAgICAgICAg ICAgICAgICAqQnVmZmVyOw0KPiArICBQQUNLRVRfTElTVCAgICAgICAgICAgICAqSGVhZFBhY2tl dDsNCj4gKyAgUEFDS0VUX0xJU1QgICAgICAgICAgICAgKlBhY2tldExpc3Q7DQo+ICsNCj4gKyAg Ly8gQ2hlY2sgaWYgdGhlcmUgaXMgYW55IG91dHN0YW5kaW5nIHBhY2tldCB0byByZWNlaXZlDQo+ ICsgIC8vIFRoZSBidWZmZXIgYWxsb2NhdGVkIGhhcyBhIGxpbmtlZCBMaXN0IGZvbGxvd2VkIGJ5 IHRoZSBwYWNrZXQuDQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNF X0ZST01fVEhJUyAoVGhpcyk7DQo+ICsgIEJ1ZmZlciAgICAgICAgID0gTlVMTDsNCj4gKyAgSGVh ZFBhY2tldCAgICAgPSBOVUxMOw0KPiArDQo+ICsgIHdoaWxlICgxKSB7DQo+ICsgICAgQnVmZmVy ID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChQQUNLRVRfTElTVCkgKyBzaXplb2YgKFJFTU9U RV9ORElTX1BBQ0tFVF9NU0cpICsgVXNiUm5kaXNEZXZpY2UtPk1heFRyYW5zZmVyU2l6ZSk7DQo+ ICsgICAgaWYgKEJ1ZmZlciA9PSBOVUxMKSB7DQo+ICsgICAgICByZXR1cm4gRUZJX09VVF9PRl9S RVNPVVJDRVM7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgUm5kaXNQYWNrZXRNc2cgICAgICAgICAg ICAgICAgPSAoUkVNT1RFX05ESVNfUEFDS0VUX01TRyAqKShzaXplb2YgKFBBQ0tFVF9MSVNUKSAr IChVSU5UOCAqKUJ1ZmZlcik7DQo+ICsgICAgUGFja2V0TGlzdCAgICAgICAgICAgICAgICAgICAg PSAoUEFDS0VUX0xJU1QgKilCdWZmZXI7DQo+ICsgICAgUGFja2V0TGlzdC0+UGFja2V0U3RhcnRC dWZmZXIgPSAoVUlOVDggKilCdWZmZXIgKyBzaXplb2YgKFBBQ0tFVF9MSVNUKTsNCj4gKyAgICAv LyBTYXZlIHRoZSBvcmlnaW5hbCBhZGRyZXNzIGZvciBmcmVlaW5nIGl0IHVwDQo+ICsgICAgUGFj a2V0TGlzdC0+T3JnQnVmZmVyID0gKFVJTlQ4ICopQnVmZmVyOw0KPiArICAgIFRyYW5zZmVyTGVu Z3RoICAgICAgICA9IFVzYlJuZGlzRGV2aWNlLT5NYXhUcmFuc2ZlclNpemU7DQo+ICsNCj4gKyAg ICBTdGF0dXMgPSBSbmRpc1JlY2VpdmVEYXRhTXNnICgNCj4gKyAgICAgICAgICAgICAgIFVzYlJu ZGlzRGV2aWNlLA0KPiArICAgICAgICAgICAgICAgKFJFTU9URV9ORElTX01TR19IRUFERVIgKilS bmRpc1BhY2tldE1zZywNCj4gKyAgICAgICAgICAgICAgICZUcmFuc2Zlckxlbmd0aA0KPiArICAg ICAgICAgICAgICAgKTsNCj4gKw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykgfHwgKFRy YW5zZmVyTGVuZ3RoID09IDApKSB7DQo+ICsgICAgICBGcmVlUG9vbCAoQnVmZmVyKTsNCj4gKyAg ICAgIGJyZWFrOw0KPiArICAgIH0NCj4gKw0KPiArICAgIC8vIENvbGxlY3QgYWxsIHRoZSBSTkRJ UyBwYWNrZXQgaW4gTGlua2VkIGxpc3QuDQo+ICsgICAgaWYgKChSbmRpc1BhY2tldE1zZy0+TWVz c2FnZVR5cGUgPT0gUk5ESVNfUEFDS0VUX01TRykgJiYNCj4gKyAgICAgICAgKFJuZGlzUGFja2V0 TXNnLT5EYXRhT2Zmc2V0ID09IHNpemVvZiAoUkVNT1RFX05ESVNfUEFDS0VUX01TRykgLSBSTkRJ U19SRVNFUlZFRF9CWVRFX0xFTkdUSCkgJiYNCj4gKyAgICAgICAgKFRyYW5zZmVyTGVuZ3RoID49 IFJuZGlzUGFja2V0TXNnLT5NZXNzYWdlTGVuZ3RoKSkNCj4gKyAgICB7DQo+ICsgICAgICAvLyBJ bnNlcnQgUGFja2V0DQo+ICsgICAgICBQYWNrZXRMaXN0LT5SZW1haW5pbmdMZW5ndGggPSBUcmFu c2Zlckxlbmd0aDsNCj4gKyAgICAgIEluc2VydFRhaWxMaXN0ICgmVXNiUm5kaXNEZXZpY2UtPlJl Y2VpdmVQYWNrZXRMaXN0LCBCdWZmZXIpOw0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICBGcmVl UG9vbCAoQnVmZmVyKTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICB3aGlsZSAoIUlzTGlz dEVtcHR5ICgmVXNiUm5kaXNEZXZpY2UtPlJlY2VpdmVQYWNrZXRMaXN0KSkgew0KPiArICAgIEhl YWRQYWNrZXQgPSAoUEFDS0VUX0xJU1QgKilHZXRGaXJzdE5vZGUgKCZVc2JSbmRpc0RldmljZS0+ UmVjZWl2ZVBhY2tldExpc3QpOw0KPiArDQo+ICsgICAgUm5kaXNQYWNrZXRNc2cgPSAoUkVNT1RF X05ESVNfUEFDS0VUX01TRyAqKShVSU5UOCAqKUhlYWRQYWNrZXQtPlBhY2tldFN0YXJ0QnVmZmVy Ow0KPiArDQo+ICsgICAgUHJpbnRSbmRpc01zZyAoKFJFTU9URV9ORElTX01TR19IRUFERVIgKilS bmRpc1BhY2tldE1zZyk7DQo+ICsNCj4gKyAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBwYWNrZXQg aXMgdmFsaWQgUk5ESVMgcGFja2V0Lg0KPiArICAgIGlmICgoSGVhZFBhY2tldC0+UmVtYWluaW5n TGVuZ3RoID4gc2l6ZW9mIChSRU1PVEVfTkRJU19QQUNLRVRfTVNHKSkgJiYgKFJuZGlzUGFja2V0 TXNnLT5NZXNzYWdlVHlwZSA9PSBSTkRJU19QQUNLRVRfTVNHKSAmJg0KPiArICAgICAgICAoUm5k aXNQYWNrZXRNc2ctPkRhdGFPZmZzZXQgPT0gKHNpemVvZiAoUkVNT1RFX05ESVNfUEFDS0VUX01T RykgLSBSTkRJU19SRVNFUlZFRF9CWVRFX0xFTkdUSCkpICYmDQo+ICsgICAgICAgIChIZWFkUGFj a2V0LT5SZW1haW5pbmdMZW5ndGggPj0gUm5kaXNQYWNrZXRNc2ctPk1lc3NhZ2VMZW5ndGgpKQ0K PiArICAgIHsNCj4gKyAgICAgIGlmICgqRGF0YUxlbmd0aCA+PSBSbmRpc1BhY2tldE1zZy0+RGF0 YUxlbmd0aCkgew0KPiArICAgICAgICBDb3B5TWVtICgNCj4gKyAgICAgICAgICBCdWxrSW5EYXRh LA0KPiArICAgICAgICAgIChVSU5UOCAqKVJuZGlzUGFja2V0TXNnICsgKFJuZGlzUGFja2V0TXNn LT5EYXRhT2Zmc2V0ICsgUk5ESVNfUkVTRVJWRURfQllURV9MRU5HVEgpLA0KPiArICAgICAgICAg IFJuZGlzUGFja2V0TXNnLT5EYXRhTGVuZ3RoDQo+ICsgICAgICAgICAgKTsNCj4gKw0KPiArICAg ICAgICAqRGF0YUxlbmd0aCA9ICBSbmRpc1BhY2tldE1zZy0+RGF0YUxlbmd0aDsNCj4gKw0KPiAr ICAgICAgICBIZWFkUGFja2V0LT5SZW1haW5pbmdMZW5ndGggICA9IEhlYWRQYWNrZXQtPlJlbWFp bmluZ0xlbmd0aCAtIFJuZGlzUGFja2V0TXNnLT5NZXNzYWdlTGVuZ3RoOw0KPiArICAgICAgICBI ZWFkUGFja2V0LT5QYWNrZXRTdGFydEJ1ZmZlciA9IChVSU5UOCAqKVJuZGlzUGFja2V0TXNnICsg Um5kaXNQYWNrZXRNc2ctPk1lc3NhZ2VMZW5ndGg7DQo+ICsNCj4gKyAgICAgICAgcmV0dXJuIEVG SV9TVUNDRVNTOw0KPiArICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgKkRhdGFMZW5ndGggPSBS bmRpc1BhY2tldE1zZy0+RGF0YUxlbmd0aDsNCj4gKyAgICAgICAgcmV0dXJuIEVGSV9CVUZGRVJf VE9PX1NNQUxMOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKw0KPiArICAgIFJlbW92ZUVudHJ5 TGlzdCAoJkhlYWRQYWNrZXQtPlBhY2tldExpc3QpOw0KPiArICAgIEZyZWVQb29sICgoUEFDS0VU X0xJU1QgKilIZWFkUGFja2V0LT5PcmdCdWZmZXIpOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJu IEVGSV9OT1RfRk9VTkQ7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGlzIGEgZHVtbXkg ZnVuY3Rpb24gd2hpY2gganVzdCByZXR1cm5zLiBVbmltcGxlbWVudGVkIEVES0lJX1VTQl9FVEhF Uk5FVF9QUk9UT0NPTCBmdW5jdGlvbnMNCj4gKyAgcG9pbnQgdG8gdGhpcyBmdW5jdGlvbi4NCj4g Kw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlw dG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29y ayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKw0KPiArKiovDQo+ ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzRHVtbXlSZXR1cm4gKA0KPiArICBJTiAg UFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzRHVtbXlSZXR1cm4gY2FsbGVkXG4iKSk7DQo+ ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgZnVu Y3Rpb24gc2VuZCB0aGUgUk5ESVMgY29tbWFuZCB0aHJvdWdoIHRoZSBkZXZpY2UncyBjb250cm9s IGVuZHBvaW50DQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVXNiUm5kaXNEZXZpY2UgICAgQSBwb2lu dGVyIHRvIHRoZSBVU0JfUk5ESVNfREVWSUNFIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBS bmRpc01zZyAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIFJFTU9URV9ORElTX01TR19IRUFERVIg ZGF0YS4NCj4gKyAgQHBhcmFtW291dF0gUm5kaXNNc2dSZXNwb25zZSAgQSBwb2ludGVyIHRvIHRo ZSBSRU1PVEVfTkRJU19NU0dfSEVBREVSIGRhdGEgZm9yIGdldHRpbmcgcmVzcG9uc2VzLg0KPiAr DQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBidWxrIHRyYW5zZmVyIGhh cyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVT DQo+ICtSbmRpc0NvbnRyb2xNc2cgKA0KPiArICBJTiAgVVNCX1JORElTX0RFVklDRSAgICAgICAg KlVzYlJuZGlzRGV2aWNlLA0KPiArICBJTiAgUkVNT1RFX05ESVNfTVNHX0hFQURFUiAgKlJuZGlz TXNnLA0KPiArICBPVVQgUkVNT1RFX05ESVNfTVNHX0hFQURFUiAgKlJuZGlzTXNnUmVzcG9uc2UN Cj4gKyAgKQ0KPiArew0KPiArICBFRklfVVNCX0lPX1BST1RPQ09MICAgICAgICAgICAqVXNiSW8g PSBVc2JSbmRpc0RldmljZS0+VXNiSW87DQo+ICsgIEVGSV9VU0JfREVWSUNFX1JFUVVFU1QgICAg ICAgIERldlJlcTsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgVXNiU3RhdHVz Ow0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIFVJTlQz MiAgICAgICAgICAgICAgICAgICAgICAgIFNhdmVSZXNwb25zZVR5cGU7DQo+ICsgIFVJTlQzMiAg ICAgICAgICAgICAgICAgICAgICAgIFNhdmVSZXNwb25zZUxlbmd0aDsNCj4gKyAgVUlOVDMyICAg ICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsgIFJFTU9URV9ORElTX0lOSVRJQUxJWkVf Q01QTFQgICpSbmRpc0luaXRDbXBsdDsNCj4gKw0KPiArICBTYXZlUmVzcG9uc2VUeXBlICAgPSAw Ow0KPiArICBTYXZlUmVzcG9uc2VMZW5ndGggPSAwOw0KPiArICBSbmRpc0luaXRDbXBsdCAgICAg PSAoUkVNT1RFX05ESVNfSU5JVElBTElaRV9DTVBMVCAqKVJuZGlzTXNnUmVzcG9uc2U7DQo+ICsN Cj4gKyAgaWYgKFJuZGlzTXNnUmVzcG9uc2UpIHsNCj4gKyAgICBTYXZlUmVzcG9uc2VUeXBlICAg PSBSbmRpc01zZ1Jlc3BvbnNlLT5NZXNzYWdlVHlwZTsNCj4gKyAgICBTYXZlUmVzcG9uc2VMZW5n dGggPSBSbmRpc01zZ1Jlc3BvbnNlLT5NZXNzYWdlTGVuZ3RoOw0KPiArICB9DQo+ICsNCj4gKyAg WmVyb01lbSAoJkRldlJlcSwgc2l6ZW9mIChFRklfVVNCX0RFVklDRV9SRVFVRVNUKSk7DQo+ICsN Cj4gKyAgRGV2UmVxLlJlcXVlc3RUeXBlID0gVVNCX1JFUV9UWVBFX0NMQVNTIHwgVVNCX1RBUkdF VF9JTlRFUkZBQ0U7DQo+ICsgIERldlJlcS5SZXF1ZXN0ICAgICA9IFNFTkRfRU5DQVBTVUxBVEVE X0NPTU1BTkQ7DQo+ICsgIERldlJlcS5WYWx1ZSAgICAgICA9IDA7DQo+ICsgIERldlJlcS5JbmRl eCAgICAgICA9IDA7DQo+ICsgIERldlJlcS5MZW5ndGggICAgICA9IChVSU5UMTYpUm5kaXNNc2ct Pk1lc3NhZ2VMZW5ndGg7DQo+ICsNCj4gKyAgUHJpbnRSbmRpc01zZyAoUm5kaXNNc2cpOw0KPiAr DQo+ICsgIFN0YXR1cyA9IFVzYklvLT5Vc2JDb250cm9sVHJhbnNmZXIgKA0KPiArICAgICAgICAg ICAgICAgICAgICBVc2JJbywNCj4gKyAgICAgICAgICAgICAgICAgICAgJkRldlJlcSwNCj4gKyAg ICAgICAgICAgICAgICAgICAgRWZpVXNiRGF0YU91dCwNCj4gKyAgICAgICAgICAgICAgICAgICAg VVNCX0VUSEVSTkVUX1RSQU5TRkVSX1RJTUVPVVQsDQo+ICsgICAgICAgICAgICAgICAgICAgIFJu ZGlzTXNnLA0KPiArICAgICAgICAgICAgICAgICAgICBSbmRpc01zZy0+TWVzc2FnZUxlbmd0aCwN Cj4gKyAgICAgICAgICAgICAgICAgICAgJlVzYlN0YXR1cw0KPiArICAgICAgICAgICAgICAgICAg ICApOw0KPiArDQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzQ29udHJvbE1zZzogVXNi U3RhdHVzIDogJXggU3RhdHVzIDogJXIgUm5kaXNNc2dSZXNwb25zZSA6ICVseFxuIiwgVXNiU3Rh dHVzLCBTdGF0dXMsIFJuZGlzTXNnUmVzcG9uc2UpKTsNCj4gKw0KPiArICAvLyBFcnJvciBvciBu byByZXNwb25zZSBleHBlY3RlZA0KPiArICBpZiAoKEVGSV9FUlJPUiAoU3RhdHVzKSkgfHwgKFJu ZGlzTXNnUmVzcG9uc2UgPT0gTlVMTCkpIHsNCj4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJS bmRpc0NvbnRyb2xNc2c6IFVzYlN0YXR1cyA6ICV4IFN0YXR1cyA6ICVyXG4iLCBVc2JTdGF0dXMs IFN0YXR1cykpOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBmb3Ig KEluZGV4ID0gMDsgSW5kZXggPCAoUk5ESVNfQ09OVFJPTF9USU1FT1VULzEwMCk7IEluZGV4Kysp IHsNCj4gKyAgICBSZWFkUm5kaXNSZXNwb25zZUludGVycnVwdCAoVXNiUm5kaXNEZXZpY2UpOw0K PiArICAgIFplcm9NZW0gKCZEZXZSZXEsIHNpemVvZiAoRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCkp Ow0KPiArDQo+ICsgICAgRGV2UmVxLlJlcXVlc3RUeXBlID0gVVNCX0VORFBPSU5UX0RJUl9JTiB8 IFVTQl9SRVFfVFlQRV9DTEFTUyB8IFVTQl9UQVJHRVRfSU5URVJGQUNFOw0KPiArICAgIERldlJl cS5SZXF1ZXN0ICAgICA9IEdFVF9FTkNBUFNVTEFURURfUkVTUE9OU0U7DQo+ICsgICAgRGV2UmVx LlZhbHVlICAgICAgID0gMDsNCj4gKyAgICBEZXZSZXEuSW5kZXggICAgICAgPSAwOw0KPiArICAg IERldlJlcS5MZW5ndGggICAgICA9IChVSU5UMTYpUm5kaXNNc2dSZXNwb25zZS0+TWVzc2FnZUxl bmd0aDsNCj4gKw0KPiArICAgIFN0YXR1cyA9IFVzYklvLT5Vc2JDb250cm9sVHJhbnNmZXIgKA0K PiArICAgICAgICAgICAgICAgICAgICAgIFVzYklvLA0KPiArICAgICAgICAgICAgICAgICAgICAg ICZEZXZSZXEsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgRWZpVXNiRGF0YUluLA0KPiArICAg ICAgICAgICAgICAgICAgICAgIFVTQl9FVEhFUk5FVF9UUkFOU0ZFUl9USU1FT1VULA0KPiArICAg ICAgICAgICAgICAgICAgICAgIFJuZGlzTXNnUmVzcG9uc2UsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgUm5kaXNNc2dSZXNwb25zZS0+TWVzc2FnZUxlbmd0aCwNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAmVXNiU3RhdHVzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiAr ICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzQ29udHJvbE1zZyBSZXNwb25zZTogVXNiU3Rh dHVzIDogJXggU3RhdHVzIDogJXIgXG4iLCBVc2JTdGF0dXMsIFN0YXR1cykpOw0KPiArDQo+ICsg ICAgUHJpbnRSbmRpc01zZyAoUm5kaXNNc2dSZXNwb25zZSk7DQo+ICsNCj4gKyAgICBpZiAoIUVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgaWYgKChSbmRpc0luaXRDbXBsdC0+UmVxdWVz dElEICE9ICgoUkVNT1RFX05ESVNfSU5JVElBTElaRV9DTVBMVCAqKVJuZGlzTXNnKS0+UmVxdWVz dElEKSB8fCAoUm5kaXNJbml0Q21wbHQtPk1lc3NhZ2VUeXBlICE9IFNhdmVSZXNwb25zZVR5cGUp KSB7DQo+ICsgICAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJldHJ5IHRoZSByZXNwb25zZVxu IikpOw0KPiArDQo+ICsgICAgICAgIFJuZGlzTXNnUmVzcG9uc2UtPk1lc3NhZ2VUeXBlICAgPSBT YXZlUmVzcG9uc2VUeXBlOw0KPiArICAgICAgICBSbmRpc01zZ1Jlc3BvbnNlLT5NZXNzYWdlTGVu Z3RoID0gU2F2ZVJlc3BvbnNlTGVuZ3RoOw0KPiArICAgICAgICBjb250aW51ZTsNCj4gKyAgICAg IH0NCj4gKyAgICB9DQo+ICsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4g KyAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXNDb250cm9sTXNnOiBUaW1lT3V0XG4iKSk7DQo+ ICsNCj4gKyAgcmV0dXJuIEVGSV9USU1FT1VUOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhp cyBmdW5jdGlvbiBzZW5kIHRoZSBSTkRJUyBjb21tYW5kIHRocm91Z2ggdGhlIGRldmljZSdzIERh dGEgZW5kcG9pbnQNCj4gKw0KPiArICBAcGFyYW1baW5dICAgICAgVXNiUm5kaXNEZXZpY2UgIEEg cG9pbnRlciB0byB0aGUgVVNCX1JORElTX0RFVklDRSBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2lu XSAgICAgIFJuZGlzTXNnICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIFJFTU9URV9ORElTX01TR19I RUFERVIgdG8gc2VuZCBvdXQuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBUcmFuc2Zlckxlbmd0aCAg VGhlIGxlbmd0aCBvZiB0aGUgUm5kaXNNc2cgZGF0YSB0byB0cmFuc2Zlci4NCj4gKw0KPiArICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHku DQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArUm5kaXNUcmFuc21pdERhdGFNc2cgKA0K PiArICBJTiAgICAgIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICpVc2JSbmRpc0RldmljZSwNCj4g KyAgSU4gICAgICBSRU1PVEVfTkRJU19NU0dfSEVBREVSICAqUm5kaXNNc2csDQo+ICsgIElOIE9V VCAgVUlOVE4gICAgICAgICAgICAgICAgICAgKlRyYW5zZmVyTGVuZ3RoDQo+ICsgICkNCj4gK3sN Cj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiArICBVSU5UMzIgICAgICBVc2JTdGF0dXM7DQo+ ICsNCj4gKyAgaWYgKFVzYlJuZGlzRGV2aWNlLT5CdWxrSW5FbmRwb2ludCA9PSAwKSB7DQo+ICsg ICAgR2V0RW5kcG9pbnQgKFVzYlJuZGlzRGV2aWNlLT5Vc2JJb0NkY0RhdGEsIFVzYlJuZGlzRGV2 aWNlKTsNCj4gKyAgfQ0KPiArDQo+ICsgIFByaW50Um5kaXNNc2cgKFJuZGlzTXNnKTsNCj4gKw0K PiArICBTdGF0dXMgPSBVc2JSbmRpc0RldmljZS0+VXNiSW9DZGNEYXRhLT5Vc2JCdWxrVHJhbnNm ZXIgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJu ZGlzRGV2aWNlLT5Vc2JJb0NkY0RhdGEsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPkJ1bGtPdXRFbmRwb2ludCwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSbmRpc01zZywNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zlckxlbmd0aCwNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfVFhfRVRIRVJO RVRfQlVMS19USU1FT1VULA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZVc2JTdGF0dXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOw0KPiArDQo+ICsgIGlmIChTdGF0dXMgPT0gRUZJX1NVQ0NFU1MpIHsNCj4gKyAg ICBnU3RvcEJ1bGtJbkNudCA9IE1BWElNVU1fU1RPUEJVTEtJTl9DTlQ7ICAgICAvLyBBZnRlciBz ZW5kaW5nIGNtZCAsd2Ugd2lsbCBwb2xsaW5nIHJlY2VpdmUgcGFja2FnZSBmb3IgTUFYSU1VTV9T VE9QQlVMS0lOX0NOVCB0aW1lcw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gc2VuZCB0aGUgUk5ESVMgY29tbWFu ZCB0aHJvdWdoIHRoZSBkZXZpY2UncyBEYXRhIGVuZHBvaW50DQo+ICsNCj4gKyAgQHBhcmFtW2lu XSAgICAgIFVzYlJuZGlzRGV2aWNlICAgIEEgcG9pbnRlciB0byB0aGUgVVNCX1JORElTX0RFVklD RSBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIFJuZGlzTXNnICAgICAgICAgIEEgcG9p bnRlciB0byB0aGUgUkVNT1RFX05ESVNfTVNHX0hFQURFUiB0byBzZW5kIG91dC4NCj4gKyAgQHBh cmFtW2luLCBvdXRdIFRyYW5zZmVyTGVuZ3RoICAgIFRoZSBsZW5ndGggb2YgdGhlIFJuZGlzTXNn IGRhdGEgdG8gdHJhbnNmZXIuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgVGhl IHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFU VVMNCj4gK1JuZGlzUmVjZWl2ZURhdGFNc2cgKA0KPiArICBJTiAgICAgIFVTQl9STkRJU19ERVZJ Q0UgICAgICAgICpVc2JSbmRpc0RldmljZSwNCj4gKyAgSU4gT1VUICBSRU1PVEVfTkRJU19NU0df SEVBREVSICAqUm5kaXNNc2csDQo+ICsgIElOIE9VVCAgVUlOVE4gICAgICAgICAgICAgICAgICAg KlRyYW5zZmVyTGVuZ3RoDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0K PiArICBVSU5UMzIgICAgICBVc2JTdGF0dXM7DQo+ICsNCj4gKyAgVXNiU3RhdHVzID0gMDsNCj4g Kw0KPiArICBpZiAoVXNiUm5kaXNEZXZpY2UtPkJ1bGtJbkVuZHBvaW50ID09IDApIHsNCj4gKyAg ICBHZXRFbmRwb2ludCAoVXNiUm5kaXNEZXZpY2UtPlVzYklvQ2RjRGF0YSwgVXNiUm5kaXNEZXZp Y2UpOw0KPiArICB9DQo+ICsNCj4gKyAgLy8gVXNlIGdTdG9wQnVsa0luQ250IHRvIHN0b3AgQnVs a0luIGNvbW1hbmQNCj4gKyAgaWYgKGdTdG9wQnVsa0luQ250IHx8IExBTl9CVUxLSU5fQ01EX0NP TlRST0wpIHsNCj4gKyAgICBTdGF0dXMgPSBVc2JSbmRpc0RldmljZS0+VXNiSW9DZGNEYXRhLT5V c2JCdWxrVHJhbnNmZXIgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYklvQ2RjRGF0YSwNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5CdWxrSW5FbmRw b2ludCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJu ZGlzTXNnLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VHJhbnNmZXJMZW5ndGgsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBVU0JfUlhfRVRIRVJORVRfQlVMS19USU1FT1VULA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlVzYlN0YXR1cw0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICAgIGlmICghRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBnU3RvcEJ1bGtJbkNudCA9IE1JTklNVU1fU1RP UEJVTEtJTl9DTlQ7DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgIGdTdG9wQnVsa0luQ250LS07 DQo+ICsgICAgfQ0KPiArICB9IGVsc2Ugew0KPiArICAgIFN0YXR1cyAgICAgICAgICA9IEVGSV9U SU1FT1VUOw0KPiArICAgICpUcmFuc2Zlckxlbmd0aCA9IDA7DQo+ICsgICAgZ0Jsb2NrQnVsa0lu Q250Kys7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoZ0Jsb2NrQnVsa0luQ250ID4gQlVMS0lOX0NN RF9QT0xMSU5HX0NOVCkgew0KPiArICAgIGdTdG9wQnVsa0luQ250ICA9IE1JTklNVU1fU1RPUEJV TEtJTl9DTlQ7DQo+ICsgICAgZ0Jsb2NrQnVsa0luQ250ID0gMDsNCj4gKyAgfQ0KPiArDQo+ICsg IFByaW50Um5kaXNNc2cgKFJuZGlzTXNnKTsNCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAgUHJpbnRzIFJORElTIEhlYWRlciBhbmQgRGF0YQ0KPiArDQo+ ICsgIEBwYXJhbVtpbl0gUm5kaXNNc2cgICAgQSBwb2ludGVyIHRvIHRoZSBSRU1PVEVfTkRJU19N U0dfSEVBREVSIGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArUHJpbnRSbmRpc01zZyAo DQo+ICsgIElOICBSRU1PVEVfTkRJU19NU0dfSEVBREVSICAqUm5kaXNNc2cNCj4gKyAgKQ0KPiAr ew0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgTGVuZ3RoOw0KPiArICBSRU1PVEVfTkRJ U19RVUVSWV9DTVBMVCAgKlJuZGlzUXVlcnlDbXBsdDsNCj4gKw0KPiArICBMZW5ndGggPSAwOw0K PiArDQo+ICsgIHN3aXRjaCAoUm5kaXNNc2ctPk1lc3NhZ2VUeXBlKSB7DQo+ICsgICAgY2FzZSBS TkRJU19QQUNLRVRfTVNHOg0KPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiUk5ESVNfUEFD S0VUX01TRzpcbiIpKTsNCj4gKyAgICAgIExlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfUEFD S0VUX01TRykgKyAweDE0Ow0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBSTkRJU19JTklU SUFMSVpFX01TRzoNCj4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJORElTX0lOSVRJQUxJ WkVfTVNHOlxuIikpOw0KPiArICAgICAgTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJU19JTklU SUFMSVpFX01TRyk7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBjYXNlIFJORElTX0lOSVRJQUxJ WkVfQ01QTFQ6DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJSTkRJU19JTklUSUFMSVpF X0NNUExUOlxuIikpOw0KPiArICAgICAgTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJU19JTklU SUFMSVpFX0NNUExUKTsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgUk5ESVNfSExUX01T RzoNCj4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJORElTX0hMVF9NU0c6XG4iKSk7DQo+ ICsgICAgICBMZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElTX0hBTFRfTVNHKTsNCj4gKyAgICAg IGJyZWFrOw0KPiArICAgIGNhc2UgUk5ESVNfUVVFUllfTVNHOg0KPiArICAgICAgREVCVUcgKChE RUJVR19JTkZPLCAiUk5ESVNfUVVFUllfTVNHOlxuIikpOw0KPiArICAgICAgTGVuZ3RoID0gc2l6 ZW9mIChSRU1PVEVfTkRJU19RVUVSWV9NU0cpOw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgY2Fz ZSBSTkRJU19RVUVSWV9DTVBMVDoNCj4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJORElT X1FVRVJZX0NNUExUOlxuIikpOw0KPiArICAgICAgUm5kaXNRdWVyeUNtcGx0ID0gKFJFTU9URV9O RElTX1FVRVJZX0NNUExUICopUm5kaXNNc2c7DQo+ICsgICAgICBMZW5ndGggICAgICAgICAgPSBz aXplb2YgKFJFTU9URV9ORElTX1FVRVJZX0NNUExUKSArIFJuZGlzUXVlcnlDbXBsdC0+SW5mb3Jt YXRpb25CdWZmZXJMZW5ndGg7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBjYXNlIFJORElTX1NF VF9NU0c6DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJSTkRJU19TRVRfTVNHOlxuIikp Ow0KPiArICAgICAgTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJU19TRVRfTVNHKTsNCj4gKyAg ICAgIGJyZWFrOw0KPiArICAgIGNhc2UgUk5ESVNfU0VUX0NNUExUOg0KPiArICAgICAgREVCVUcg KChERUJVR19JTkZPLCAiUk5ESVNfU0VUX0NNUExUOlxuIikpOw0KPiArICAgICAgTGVuZ3RoID0g c2l6ZW9mIChSRU1PVEVfTkRJU19TRVRfQ01QTFQpOw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAg Y2FzZSBSTkRJU19SRVNFVF9NU0c6DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJSTkRJ U19SRVNFVF9NU0c6XG4iKSk7DQo+ICsgICAgICBMZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElT X1JFU0VUX01TRyk7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBjYXNlIFJORElTX1JFU0VUX0NN UExUOg0KPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiUk5ESVNfUkVTRVRfQ01QTFQ6XG4i KSk7DQo+ICsgICAgICBMZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElTX1JFU0VUX0NNUExUKTsN Cj4gKyAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgUk5ESVNfSU5ESUNBVEVfU1RBVFVTX01TRzoN Cj4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJORElTX0lORElDQVRFX1NUQVRVU19NU0c6 XG4iKSk7DQo+ICsgICAgICBMZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElTX0lORElDQVRFX1NU QVRVU19NU0cpOw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBSTkRJU19LRUVQQUxJVkVf TVNHOg0KPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiUk5ESVNfS0VFUEFMSVZFX01TRzpc biIpKTsNCj4gKyAgICAgIExlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfS0VFUEFMSVZFX01T Ryk7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBjYXNlIFJORElTX0tFRVBBTElWRV9DTVBMVDoN Cj4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJORElTX0tFRVBBTElWRV9DTVBMVDpcbiIp KTsNCj4gKyAgICAgIExlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfS0VFUEFMSVZFX0NNUExU KTsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChMZW5ndGgpIHsNCj4gKyAgICBVSU5UTiAgSW5kZXgg PSAwOw0KPiArICAgIGZvciAoIDsgTGVuZ3RoOyBMZW5ndGggLT0gNCwgSW5kZXgrKykgew0KPiAr ICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiJThYXHQiLCAqKChVSU5UMzIgKilSbmRpc01zZyAr IEluZGV4KSkpOw0KPiArICAgICAgaWYgKCgoSW5kZXggJSA0KSA9PSAzKSAmJiAoSW5kZXggIT0g MCkpIHsNCj4gKyAgICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiXG4iKSk7DQo+ICsgICAgICB9 DQo+ICsNCj4gKyAgICAgIGlmICgoTGVuZ3RoIDwgOCkgJiYgKExlbmd0aCA+IDQpKSB7DQo+ICsg ICAgICAgIFVJTlQzMiAgRGF0YTMyOw0KPiArICAgICAgICBJbmRleCsrOw0KPiArICAgICAgICBE YXRhMzIgPSAqKChVSU5UMzIgKilSbmRpc01zZyArIEluZGV4KTsNCj4gKyAgICAgICAgREVCVUcg KChERUJVR19JTkZPLCAiJThYXHQiLCBEYXRhMzIpKTsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsg ICAgICB9DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKEluZGV4ICUgNCkgew0KPiArICAgICAg REVCVUcgKChERUJVR19JTkZPLCAiXG4iKSk7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9DQo+IC0t DQo+IDIuMzUuMS53aW5kb3dzLjINCj4gLVRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhp cyBtZXNzYWdlIG1heSBiZSBjb25maWRlbnRpYWwgYW5kIHByb3ByaWV0YXJ5IHRvIEFtZXJpY2Fu IE1lZ2F0cmVuZHMgKEFNSSkuIFRoaXMgY29tbXVuaWNhdGlvbiBpcyBpbnRlbmRlZCB0byBiZSBy ZWFkIG9ubHkgYnkgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRvIHdob20gaXQgaXMgYWRkcmVz c2VkIG9yIGJ5IHRoZWlyIGRlc2lnbmVlLiBJZiB0aGUgcmVhZGVyIG9mIHRoaXMgbWVzc2FnZSBp cyBub3QgdGhlIGludGVuZGVkIHJlY2lwaWVudCwgeW91IGFyZSBvbiBub3RpY2UgdGhhdCBhbnkg ZGlzdHJpYnV0aW9uIG9mIHRoaXMgbWVzc2FnZSwgaW4gYW55IGZvcm0sIGlzIHN0cmljdGx5IHBy b2hpYml0ZWQuIFBsZWFzZSBwcm9tcHRseSBub3RpZnkgdGhlIHNlbmRlciBieSByZXBseSBlLW1h aWwgb3IgYnkgdGVsZXBob25lIGF0IDc3MC0yNDYtODYwMCwgYW5kIHRoZW4gZGVsZXRlIG9yIGRl c3Ryb3kgYWxsIGNvcGllcyBvZiB0aGUgdHJhbnNtaXNzaW9uLg0KLVRoZSBpbmZvcm1hdGlvbiBj b250YWluZWQgaW4gdGhpcyBtZXNzYWdlIG1heSBiZSBjb25maWRlbnRpYWwgYW5kIHByb3ByaWV0 YXJ5IHRvIEFtZXJpY2FuIE1lZ2F0cmVuZHMgKEFNSSkuIFRoaXMgY29tbXVuaWNhdGlvbiBpcyBp bnRlbmRlZCB0byBiZSByZWFkIG9ubHkgYnkgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRvIHdo b20gaXQgaXMgYWRkcmVzc2VkIG9yIGJ5IHRoZWlyIGRlc2lnbmVlLiBJZiB0aGUgcmVhZGVyIG9m IHRoaXMgbWVzc2FnZSBpcyBub3QgdGhlIGludGVuZGVkIHJlY2lwaWVudCwgeW91IGFyZSBvbiBu b3RpY2UgdGhhdCBhbnkgZGlzdHJpYnV0aW9uIG9mIHRoaXMgbWVzc2FnZSwgaW4gYW55IGZvcm0s IGlzIHN0cmljdGx5IHByb2hpYml0ZWQuIFBsZWFzZSBwcm9tcHRseSBub3RpZnkgdGhlIHNlbmRl ciBieSByZXBseSBlLW1haWwgb3IgYnkgdGVsZXBob25lIGF0IDc3MC0yNDYtODYwMCwgYW5kIHRo ZW4gZGVsZXRlIG9yIGRlc3Ryb3kgYWxsIGNvcGllcyBvZiB0aGUgdHJhbnNtaXNzaW9uLg0K