From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (NAM10-DM6-obe.outbound.protection.outlook.com [40.107.93.66]) by mx.groups.io with SMTP id smtpd.web10.1396.1686196077537010753 for ; Wed, 07 Jun 2023 20:47:58 -0700 Authentication-Results: mx.groups.io; dkim=fail, err=mail: missing word in phrase: charset not supported: "big5"; spf=pass (domain: ami.com, ip: 40.107.93.66, mailfrom: richardho@ami.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=E1dW/u12zT80V5aBoVIVQWzXVJTkXNpN5DdwFzMMbHmu23VvY+jKDc1UjsRNQMD1TBlGZ49Lg1UBJI1HrzjXnJVkfSqeFUDhy0r0klw+2YaQOuJ5JZqnCAJAvYMHq9OznT8BY5GOA/i03h0uE8xi0LDBaSHbCl/DzRegXuL8hLdhYcKrmnNKa4Nx7Mwf4GH3pUV5AQq9ZhwpINAWiuB4Eeaip7ayyx9TuCgCNDhvJqglxNGf/5wRIXTuoQdsP3I49og96yMipeonkI3DcUniAidK+lebAH5EB7Wd8qDjuldVLyVvKxP/OZ+OMWbFLZRQI4k63+B3TUpct9CZpXWbrA== 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=S6Vg6q0ZYt+RZSP/kcYIwPDEYVc5EqldwK/i/d9aUvY=; b=kM0f+L/mtc8EIY8utrjJZP5QS2QYFklGA17RWtrxxPT4bKx30rdFHJXU3bzc/6y1m3uf4jINWn3VE4V2suBRsoJT4M6G6gM3yR2vM3IFkTA5/GKkfoqgcAF8d7gQ23lxhV6C3y83yrf0OB968tD5irzu/KFazbk1VOI2GctmeKxpCUjJoV2eqGd1Yw/1JkDzyBhqdK5J6RFPB3na1dgo9IFTQLi7BfcCG3Y+TpuHTKfxxXclPqboLvYt71ixF7NcrqRG9pcuA4u7RCZeruIbMZe/xxckGnuHppQRZnezR6S9JCAxUWOVj/K74mchHGs4/kKbDo7ceH5LccljCxYPlw== 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=S6Vg6q0ZYt+RZSP/kcYIwPDEYVc5EqldwK/i/d9aUvY=; b=TCrBrWcI8ObygV2Fagmu6uu1KnV/C9g7SZy2UKZmoi4oLuuT3VMCMjX7CIKilOADuhiPkKNmH/xtCv4LmljvyJJuq8I5VM8A3FViWVnC4TZtj/EDREQ/QIZ3gGj+iG2Mf1scLFHWl48uWc0SSnsl9WJVjsvAP5EpbdRJOTadUJk= Received: from CY8PR10MB6441.namprd10.prod.outlook.com (2603:10b6:930:63::16) by SN7PR10MB7031.namprd10.prod.outlook.com (2603:10b6:806:347::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6455.32; Thu, 8 Jun 2023 03:47:47 +0000 Received: from CY8PR10MB6441.namprd10.prod.outlook.com ([fe80::1eb2:3625:6f26:9ed6]) by CY8PR10MB6441.namprd10.prod.outlook.com ([fe80::1eb2:3625:6f26:9ed6%6]) with mapi id 15.20.6455.030; Thu, 8 Jun 2023 03:47:47 +0000 From: =?UTF-8?B?UmljaGFyZEhvIFvkvZXmmI7lv6Bd?= To: "Wu, Hao A" , "devel@edk2.groups.io" CC: Andrew Fish , Leif Lindholm , "Kinney, Michael D" , Michael Kubacki , "Liu, Zhiguang" , "Gao, Liming" , "Ni, Ray" , Tinh Nguyen , Rebecca Cran , =?big5?B?VG9ueSBMbyAow7mq96pRKQ==?= Subject: Re: [edk2-devel] [PATCH v3 1/3] MdeModulePkg/Bus/Usb/UsbNetwork/UsbRndis: Add USB RNDIS devices support Thread-Topic: [EXTERNAL] [edk2-devel] [PATCH v3 1/3] MdeModulePkg/Bus/Usb/UsbNetwork/UsbRndis: Add USB RNDIS devices support Thread-Index: AQHZgWCIeTnkjHAMmUOhrT/0m1P7Oq+AVj9AgAABVHCAAB0QAA== Date: Thu, 8 Jun 2023 03:47:47 +0000 Message-ID: References: <175D0EAC419FA602.2502@groups.io> 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_|SN7PR10MB7031:EE_ x-ms-office365-filtering-correlation-id: dd4d8fc6-787b-4757-0995-08db67d31fd1 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: RIOaEJGYxPsZcHRRVzAectZHFDZUURQh5jd5vKqB1+pW3YWko7emZ4SAes5yh7IjWiB9ewKql0k9Q4lfh1REMqbUpocOKluXqCbGsYmvcaMbWRo9BLWzHVERbEYI7YOyYVMBrvXbjQZrZ7Bt8huHBWzx8MbSOfuInF7vTE2Qj4ER1jqyS6QS/v9svTdtC78t/3a0vv62y0UCoclP4JpR8vYoYNlSPR+C3d/5fIYOTOLsIFtVOYmjMUZJbmAajhnm0X5fVnW8GgCawA1S7fELtDT/5FnDG8Sqsl/TPW/FVWKqokVxWcgT869HZ3UZa+haPu3ooqx1V8f30Em/241sQRhGq2r1KATuokx3Hb2MeWiu/47gZuXVkQNTfAN/64QXXszvxmQsb0b8vY6IIJbU4B7YbUBTrtW5AL8s9Sq0bnUSNl71YQiCWTSft6H3Pj0tbE9v2HihUm6j7s0ZALIsMqK70+4wxFj8S6J3laKuqDHX/yxWIDZdAnu1obU8/6wrxWTMat8si4ObeXTJ7dcFma9AQAlo+Di3fbggqAvE66GmHKCaLmoiRPdAuhKaD44kKRLn65EaWSm6N5HuoX+mDyQ3iwyAl699tQ4T/tXM7eP/eDVtz3IASk8PeIBe36McvWnV/yJT6ICOO0OZGM+d78jdlaVugWCXuW4CrmJcY7w= 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)(366004)(346002)(136003)(376002)(396003)(39850400004)(451199021)(8676002)(8936002)(110136005)(19627235002)(7696005)(54906003)(478600001)(966005)(55016003)(41300700001)(52536014)(5660300002)(316002)(6506007)(66446008)(26005)(66899021)(4326008)(66476007)(71200400001)(64756008)(66556008)(45080400002)(76116006)(66946007)(9686003)(53546011)(186003)(83380400001)(7416002)(2906002)(30864003)(122000001)(38100700002)(40140700001)(33656002)(86362001)(38070700005)(85182001)(559001)(579004)(44824005);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?big5?B?YnU3THJPaWFqT0lXYllqVGNSZktwVk04a255L2NBMEZadklFQjRSNHVuTE5nakha?= =?big5?B?V2U0aEJ3WEZsb3hqd2VHYmg5MEcwUEhaQ1hqZ0cwb3dSQnJ1dUZLNUdsZ2k0eWQ4?= =?big5?B?UmpzelZydlhUU1FsczRsK3hNbk9VYW1LTVM2WFBqbmQ3ekdlK1FvWXhlWE84YVMz?= =?big5?B?U21JcFR6OXhyZFlxbmEvc2RmS3lXWVY0dVpvU1dGbDY3V3g0eC9mQnpuOHdUeERa?= =?big5?B?aGpyTXNmc1ZaK1R3OC9ibGN5K1BYSXhWdDEzdDJMSU5DQWZ4RFVqMWxVRnFMK3Bp?= =?big5?B?R0U0eUJwOWVjVjNJd08xcTVKTkRVSkgrYjFKYUgwbDBac2doQ1lkb0F5bUNELzlL?= =?big5?B?OVFxNHFSdmxESURDQVZrOG1TcE5SNlc3bXlBajU2TFh0N0ozWDdqUEY4NkJqQjlz?= =?big5?B?ZTJKWVZ5cWRheVZhYVRiRmUrZXJ6VHNSMFlPUm5Wbm9ERzAxK25IWkxzMkxSeEFa?= =?big5?B?OFhSUStyclN3OUFYWEJzUDdMWGk0V3Jpb1JLK3laVzVCTVVCWlZma0RZNllSVmRq?= =?big5?B?SG5VaXJYNUJtRi9QekZEbGVRcmZPM1FETHVyRFZQY24zU2N4dm9yNFpoRlBndXcr?= =?big5?B?S2xQQ1NlTVQwV3Nna0pjWVVnYXgyWk43R2UxeGkyc1NuRXd5S1JrVUlYM0JEcnFs?= =?big5?B?anFXZUtMVTVmMzRHZFd2aUFTaHNHQjRJd3RZNHBUeTJqU05xbTRKeFVmY0NOejV4?= =?big5?B?dm1ZSjRrODgwNDNRQ2p6V1ppSm5MbmtiUGpVcFpONWZ4bUc5WkxvWU9RbXdVdElR?= =?big5?B?YWdFZlB2cXBnVVhIUEt3VmRPMXZxNy8wdldndENlNGQvd29YYUhxZmZma01ZdDRF?= =?big5?B?VVpKbEhNbENnSTN0RURDR3UrVnhpdmYrVEpKdmg4QVRHcXp4cUVLUGtqcmpVY0I2?= =?big5?B?ODBJQjN2RWZNYzhTR3NWbHZ2R3J4akp2YmtVZGlaRjNrZGdsdnNQYWd2NzhDbjhq?= =?big5?B?N1B1WDJrWVlHTEIwWVlORjRqaURjSndzQUNuYklNZXJpNzJMMU1ETmJkcWliUnFh?= =?big5?B?MGcvUnZRUlFOMXRTTkRObDV3SEdleHlQWnRwVDFWN3B6RmgvcGNKV2doZ3hWTnJX?= =?big5?B?aEdWSDQ4dGxvWmMrOCtlRDJ6RkRIWWRqdXVzRDhUQ1VaUkFid1NoM1Y0UDFHWmh3?= =?big5?B?SlhIeVNjbU5nNk5JczVJcFdITWNoWHVWUFV2aXFtNHg2aTVuc3NMT2x4ZTN5eUdJ?= =?big5?B?Z1NpZTdTRStrQUVqMWJzcGtyOStYNVhnUmdqTTAxZ0J1dGgyV1lBZ29KRThlclhv?= =?big5?B?NG5ndTlmaWhOYjdoOHJ2VHo4TkJkV09hYytEVnhBMmZpU0ZoQWhleko3ZTN5U0hG?= =?big5?B?K2x0RVc5REZpdDYwZWRtdW93QktsV3l2UWpVd0dBaFZlSGY4ZFFzNEJXMTRPQzhn?= =?big5?B?OGgrOWNKNnlEV2ZyeG5heHFnMEgrekN4TmV1bEhhOVdsQzNUeTJvR3Y3Q1Z3UERM?= =?big5?B?d2FoN29aeU1teHlaU29DdUtMZlltdmtmSGlVQ3FoOU9RYzA1a1laSjAvdWE5WHpX?= =?big5?B?M3BINVdaUGdyR0h3Mm1QUjhYRXBmWnk1Z1VsWlZjNkd2UStEYjRFRzhYT21SYWw0?= =?big5?B?OVlCWTI5TU42SXZ2a3RVUTFrSlhhRE9WcW43UHdJQktTREVIdmt3ZHNXS3g1Zi9T?= =?big5?B?TWozWTNtenFvM3F6NVBmV2FuYUk1UkovMlkzRE5KMmhGcnJsTUVBSWFWZ01HMjJU?= =?big5?B?RHdrQnlKNmNLMkNCREdBTmdZSmdlS1VTZWZHTkxwenRoNjlWSkVkNjVHcFZxSEw0?= =?big5?B?eEVYMk9uVWV2SWltcFIzcG9TMHR4K1d3bFNPd0VOK0VsRGoyRWJ3S25mczgxMUdK?= =?big5?B?Ui9WclBGMk1udVA4YU8wSWVYUHdpZGp0ZWFWR05PREw3WHozOVBiZG5Hc1ZjT0xH?= =?big5?B?ZW93OHowZTZ2K0hqMkoyZXhuQ1JLR2JmM1FGa050ZUVzUGNpL0twQjNjemtaSWlB?= =?big5?Q?iIgCcdSGznk1o2Lf9KENYpT8mmzFloZ3Rv/I0gg1tWg=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: dd4d8fc6-787b-4757-0995-08db67d31fd1 X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Jun 2023 03:47:47.2024 (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: G5UW+pK2sgOrsUm48KfK34Mrwb6ItPEGcfk3GaZlDMosPkkJ86zjeg687tg+jxrlfOZMV/NM9xsI8qb+IKVh3w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR10MB7031 Content-Language: zh-TW Content-Type: text/plain; charset="big5" Content-Transfer-Encoding: base64 SGkgSGFvIFd1LA0KDQpJIGhhdmUgY3JlYXRlZCBpdCBpbiAyMDIzLTA1LTA3Lg0KaHR0cHM6Ly9i dWd6aWxsYS50aWFub2NvcmUub3JnL3Nob3dfYnVnLmNnaT9pZD00NDUxDQoNClRoYW5rcywNClJp Y2hhcmQNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBXdSwgSGFvIEEgPGhhby5h Lnd1QGludGVsLmNvbT4NClNlbnQ6IDIwMjOmfjak6zik6SAxMDowNiBBTQ0KVG86IFJpY2hhcmQg SG8gKKbzqfqpvikgPFJpY2hhcmRIb0BhbWkuY29tPjsgZGV2ZWxAZWRrMi5ncm91cHMuaW8NCkNj OiBBbmRyZXcgRmlzaCA8YWZpc2hAYXBwbGUuY29tPjsgTGVpZiBMaW5kaG9sbSA8cXVpY19sbGlu ZGhvbEBxdWljaW5jLmNvbT47IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGlu dGVsLmNvbT47IE1pY2hhZWwgS3ViYWNraSA8bWlrdWJhY2tAbGludXgubWljcm9zb2Z0LmNvbT47 IExpdSwgWmhpZ3VhbmcgPHpoaWd1YW5nLmxpdUBpbnRlbC5jb20+OyBHYW8sIExpbWluZyA8Z2Fv bGltaW5nQGJ5b3NvZnQuY29tLmNuPjsgTmksIFJheSA8cmF5Lm5pQGludGVsLmNvbT47IFRpbmgg Tmd1eWVuIDx0aW5obmd1eWVuQG9zLmFtcGVyZWNvbXB1dGluZy5jb20+OyBSZWJlY2NhIENyYW4g PHJlYmVjY2FAYnNkaW8uY29tPjsgVG9ueSBMbyAow7mq96pRKSA8VG9ueUxvQGFtaS5jb20+DQpT dWJqZWN0OiBSRTogW0VYVEVSTkFMXSBbZWRrMi1kZXZlbF0gW1BBVENIIHYzIDEvM10gTWRlTW9k dWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9Vc2JSbmRpczogQWRkIFVTQiBSTkRJUyBkZXZpY2Vz IHN1cHBvcnQNCg0KTm90IHN1cmUgaWYgcHJldmlvdXMgcmVwbHkgd2FzIHN1Y2Nlc3NmdWxseSBk ZWxpdmVyZWQgKHNlZW1zIHNlbnQgdG8gdGhlIG1haWxpbmcgbGlzdCkuDQpTbmlwcGV0IG9mIGh0 dHBzOi8vZWRrMi5ncm91cHMuaW8vZy9kZXZlbC9tZXNzYWdlLzEwNDEwMDoNCg0KLi4uDQoNCkNv dWxkIHlvdSBoZWxwIHRvIGNyZWF0ZSBhIFBSIGZvciB0aGlzIHNlcmllcyAob3Igc2hhcmUgYSBw ZXJzb25hbCBicmFuY2gNCndpdGggdGhlIGNoYW5nZXMpPyBJIGFtIGhhdmluZyBpc3N1ZXMgd2hl biBhcHBseWluZyB0aGVzZSBwYXRjaGVzIGFmdGVyDQpleHRyYWN0aW5nIHRoZW0gZnJvbSBteSBt YWlsIGNsaWVudC4gVGhhbmtzLg0KDQpBbHNvLCBpcyB0aGVyZSBhIEJ1Z3ppbGxhIHRyYWNrZXIg Zm9yIHRoaXM/IElmIG5vdCwgbXkgcmVjb21tZW5kYXRpb24gaXMNCnRvIGZpbGUgYSBmZWF0dXJl IHJlcXVlc3QgYXQ6DQpodHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvZW50ZXJfYnVnLmNn aT9wcm9kdWN0PVRpYW5vY29yZSUyMEZlYXR1cmUlMjBSZXF1ZXN0cw0KdG8gdHJhY2sgdGhpcyBh bmQgbGlzdCBzdWNoIGluZm9ybWF0aW9uIGluIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UuDQoNCkJl c3QgUmVnYXJkcywNCkhhbyBXdQ0KDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4g RnJvbTogUmljaGFyZCBIbyAopvOp+qm+KSA8UmljaGFyZEhvQGFtaS5jb20+DQo+IFNlbnQ6IFRo dXJzZGF5LCBKdW5lIDgsIDIwMjMgOTo1OSBBTQ0KPiBUbzogZGV2ZWxAZWRrMi5ncm91cHMuaW87 IFJpY2hhcmQgSG8gKKbzqfqpvikgPFJpY2hhcmRIb0BhbWkuY29tPg0KPiBDYzogQW5kcmV3IEZp c2ggPGFmaXNoQGFwcGxlLmNvbT47IExlaWYgTGluZGhvbG0NCj4gPHF1aWNfbGxpbmRob2xAcXVp Y2luYy5jb20+OyBLaW5uZXksIE1pY2hhZWwgRA0KPiA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5j b20+OyBNaWNoYWVsIEt1YmFja2kNCj4gPG1pa3ViYWNrQGxpbnV4Lm1pY3Jvc29mdC5jb20+OyBM aXUsIFpoaWd1YW5nIDx6aGlndWFuZy5saXVAaW50ZWwuY29tPjsNCj4gR2FvLCBMaW1pbmcgPGdh b2xpbWluZ0BieW9zb2Z0LmNvbS5jbj47IFd1LCBIYW8gQQ0KPiA8aGFvLmEud3VAaW50ZWwuY29t PjsgTmksIFJheSA8cmF5Lm5pQGludGVsLmNvbT47IFRpbmggTmd1eWVuDQo+IDx0aW5obmd1eWVu QG9zLmFtcGVyZWNvbXB1dGluZy5jb20+OyBSZWJlY2NhIENyYW4NCj4gPHJlYmVjY2FAYnNkaW8u Y29tPjsgVG9ueSBMbyAow7mq96pRKSA8VG9ueUxvQGFtaS5jb20+DQo+IFN1YmplY3Q6IFJFOiBb RVhURVJOQUxdIFtlZGsyLWRldmVsXSBbUEFUQ0ggdjMgMS8zXQ0KPiBNZGVNb2R1bGVQa2cvQnVz L1VzYi9Vc2JOZXR3b3JrL1VzYlJuZGlzOiBBZGQgVVNCIFJORElTIGRldmljZXMNCj4gc3VwcG9y dA0KPg0KPiBIaSBIYW8gV3UsDQo+DQo+IERvIHlvdSBoYXZlIGFueSB1cGRhdGUgb24gdGhpcyBw YXRjaD8NCj4NCj4gVGhhbmtzLA0KPiBSaWNoYXJkDQo+DQo+DQo+IC0tLS0tT3JpZ2luYWwgTWVz c2FnZS0tLS0tDQo+IEZyb206IGRldmVsQGVkazIuZ3JvdXBzLmlvIDxkZXZlbEBlZGsyLmdyb3Vw cy5pbz4gT24gQmVoYWxmIE9mDQo+IFJpY2hhcmRIbyBbpvOp+qm+XSB2aWEgZ3JvdXBzLmlvDQo+ IFNlbnQ6IDIwMjOmfjWk6zik6SAxMTo1MyBBTQ0KPiBUbzogZGV2ZWxAZWRrMi5ncm91cHMuaW8N Cj4gQ2M6IEFuZHJldyBGaXNoIDxhZmlzaEBhcHBsZS5jb20+OyBMZWlmIExpbmRob2xtDQo+IDxx dWljX2xsaW5kaG9sQHF1aWNpbmMuY29tPjsgTWljaGFlbCBEIEtpbm5leQ0KPiA8bWljaGFlbC5k Lmtpbm5leUBpbnRlbC5jb20+OyBNaWNoYWVsIEt1YmFja2kNCj4gPG1pa3ViYWNrQGxpbnV4Lm1p Y3Jvc29mdC5jb20+OyBaaGlndWFuZyBMaXUgPHpoaWd1YW5nLmxpdUBpbnRlbC5jb20+Ow0KPiBM aW1pbmcgR2FvIDxnYW9saW1pbmdAYnlvc29mdC5jb20uY24+OyBIYW8gQSBXdQ0KPiA8aGFvLmEu d3VAaW50ZWwuY29tPjsgUmF5IE5pIDxyYXkubmlAaW50ZWwuY29tPjsgVGluaCBOZ3V5ZW4NCj4g PHRpbmhuZ3V5ZW5Ab3MuYW1wZXJlY29tcHV0aW5nLmNvbT47IFJlYmVjY2EgQ3Jhbg0KPiA8cmVi ZWNjYUBic2Rpby5jb20+OyBUb255IExvICjDuar3qlEpIDxUb255TG9AYW1pLmNvbT4NCj4gU3Vi amVjdDogW0VYVEVSTkFMXSBbZWRrMi1kZXZlbF0gW1BBVENIIHYzIDEvM10NCj4gTWRlTW9kdWxl UGtnL0J1cy9Vc2IvVXNiTmV0d29yay9Vc2JSbmRpczogQWRkIFVTQiBSTkRJUyBkZXZpY2VzDQo+ IHN1cHBvcnQNCj4NCj4NCj4gKipDQVVUSU9OOiBUaGUgZS1tYWlsIGJlbG93IGlzIGZyb20gYW4g ZXh0ZXJuYWwgc291cmNlLiBQbGVhc2UgZXhlcmNpc2UNCj4gY2F1dGlvbiBiZWZvcmUgb3Blbmlu ZyBhdHRhY2htZW50cywgY2xpY2tpbmcgbGlua3MsIG9yIGZvbGxvd2luZyBndWlkYW5jZS4qKg0K Pg0KPiBUaGlzIGRyaXZlciBwcm92aWRlcyBVRUZJIGRyaXZlciBmb3IgVVNCIFJORElTIGRldmlj ZQ0KPg0KPiBTaWduZWQtb2ZmLWJ5OiBSaWNoYXJkIEhvIDxyaWNoYXJkaG9AYW1pLmNvbT4NCj4g Q2M6IEFuZHJldyBGaXNoIDxhZmlzaEBhcHBsZS5jb20+DQo+IENjOiBMZWlmIExpbmRob2xtIDxx dWljX2xsaW5kaG9sQHF1aWNpbmMuY29tPg0KPiBDYzogTWljaGFlbCBEIEtpbm5leSA8bWljaGFl bC5kLmtpbm5leUBpbnRlbC5jb20+DQo+IENjOiBNaWNoYWVsIEt1YmFja2kgPG1pa3ViYWNrQGxp bnV4Lm1pY3Jvc29mdC5jb20+DQo+IENjOiBaaGlndWFuZyBMaXUgPHpoaWd1YW5nLmxpdUBpbnRl bC5jb20+DQo+IENjOiBMaW1pbmcgR2FvIDxnYW9saW1pbmdAYnlvc29mdC5jb20uY24+DQo+IENj OiBIYW8gQSBXdSA8aGFvLmEud3VAaW50ZWwuY29tPg0KPiBDYzogUmF5IE5pIDxyYXkubmlAaW50 ZWwuY29tPg0KPiBUZXN0ZWQtYnk6IFRpbmggTmd1eWVuIDx0aW5obmd1eWVuQG9zLmFtcGVyZWNv bXB1dGluZy5jb20+DQo+IFJldmlld2VkLWJ5OiBSZWJlY2NhIENyYW4gPHJlYmVjY2FAYnNkaW8u Y29tPg0KPiBSZXZpZXdlZC1ieTogVG9ueSBMbyA8dG9ueWxvQGFtaS5jb20+DQo+IC0tLQ0KPiAg TWFpbnRhaW5lcnMudHh0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArDQo+ ICAuLi4vVXNiTmV0d29yay9OZXR3b3JrQ29tbW9uL0NvbXBvbmVudE5hbWUuYyAgfCAgMjYzICsr Kw0KPiAgLi4uL1VzYk5ldHdvcmsvTmV0d29ya0NvbW1vbi9Ecml2ZXJCaW5kaW5nLmMgIHwgIDU5 NSArKysrKysNCj4gIC4uLi9Vc2JOZXR3b3JrL05ldHdvcmtDb21tb24vRHJpdmVyQmluZGluZy5o ICB8ICAyNjYgKysrDQo+ICAuLi4vTmV0d29ya0NvbW1vbi9OZXR3b3JrQ29tbW9uLmluZiAgICAg ICAgICAgfCAgIDQ4ICsNCj4gIC4uLi9Vc2JOZXR3b3JrL05ldHdvcmtDb21tb24vUHhlRnVuY3Rp b24uYyAgICB8IDE4MDMNCj4gKysrKysrKysrKysrKysrKysNCj4gIC4uLi9Vc2IvVXNiTmV0d29y ay9Vc2JSbmRpcy9Db21wb25lbnROYW1lLmMgICB8ICAxNzIgKysNCj4gIC4uLi9CdXMvVXNiL1Vz Yk5ldHdvcmsvVXNiUm5kaXMvVXNiUm5kaXMuYyAgICB8ICA4ODYgKysrKysrKysNCj4gIC4uLi9C dXMvVXNiL1VzYk5ldHdvcmsvVXNiUm5kaXMvVXNiUm5kaXMuaCAgICB8ICA1ODYgKysrKysrDQo+ ICAuLi4vQnVzL1VzYi9Vc2JOZXR3b3JrL1VzYlJuZGlzL1VzYlJuZGlzLmluZiAgfCAgIDQyICsN Cj4gIC4uLi9Vc2JOZXR3b3JrL1VzYlJuZGlzL1VzYlJuZGlzRnVuY3Rpb24uYyAgICB8IDE3MTgg KysrKysrKysrKysrKysrKw0KPiAgLi4uL0luY2x1ZGUvUHJvdG9jb2wvVXNiRXRoZXJuZXRQcm90 b2NvbC5oICAgIHwgIDg3OCArKysrKysrKw0KPiAgTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5k ZWMgICAgICAgICAgICAgICAgIHwgICAxOCArDQo+ICBNZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtn LmRzYyAgICAgICAgICAgICAgICAgfCAgICA0ICsNCj4gIDE0IGZpbGVzIGNoYW5nZWQsIDcyODUg aW5zZXJ0aW9ucygrKQ0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+IE1kZU1vZHVsZVBrZy9CdXMv VXNiL1VzYk5ldHdvcmsvTmV0d29ya0NvbW1vbi9Db21wb25lbnROYW1lLg0KPiBjDQo+ICBjcmVh dGUgbW9kZSAxMDA2NDQNCj4gTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9OZXR3b3Jr Q29tbW9uL0RyaXZlckJpbmRpbmcuYw0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+IE1kZU1vZHVs ZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvTmV0d29ya0NvbW1vbi9Ecml2ZXJCaW5kaW5nLmgNCj4g IGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiBNZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL05l dHdvcmtDb21tb24vTmV0d29ya0NvbW1vbi4NCj4gaW5mDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQN Cj4gTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9OZXR3b3JrQ29tbW9uL1B4ZUZ1bmN0 aW9uLmMNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiBNZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JO ZXR3b3JrL1VzYlJuZGlzL0NvbXBvbmVudE5hbWUuYw0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+ IE1kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvVXNiUm5kaXMvVXNiUm5kaXMuYw0KPiAg Y3JlYXRlIG1vZGUgMTAwNjQ0DQo+IE1kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvVXNi Um5kaXMvVXNiUm5kaXMuaA0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+IE1kZU1vZHVsZVBrZy9C dXMvVXNiL1VzYk5ldHdvcmsvVXNiUm5kaXMvVXNiUm5kaXMuaW5mDQo+ICBjcmVhdGUgbW9kZSAx MDA2NDQNCj4gTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9Vc2JSbmRpcy9Vc2JSbmRp c0Z1bmN0aW9uLmMNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiBNZGVNb2R1bGVQa2cvSW5jbHVk ZS9Qcm90b2NvbC9Vc2JFdGhlcm5ldFByb3RvY29sLmgNCj4NCj4gZGlmZiAtLWdpdCBhL01haW50 YWluZXJzLnR4dCBiL01haW50YWluZXJzLnR4dA0KPiBpbmRleCAwOWQwNGFmMjdhLi45YTE1Y2Ri OTkzIDEwMDY0NA0KPiAtLS0gYS9NYWludGFpbmVycy50eHQNCj4gKysrIGIvTWFpbnRhaW5lcnMu dHh0DQo+IEBAIC00MzcsNiArNDM3LDEyIEBAIFI6IFpoaWd1YW5nIExpdSA8emhpZ3VhbmcubGl1 QGludGVsLmNvbT4NCj4gW0xpdVpoaWd1YW5nMDAxXQ0KPiAgUjogUmF5IE5pIDxyYXkubmlAaW50 ZWwuY29tPiBbbmlydWl5dV0NCj4gIFI6IEd1YSBHdW8gPGd1YS5ndW9AaW50ZWwuY29tPiBbZ2d1 bzExODM3NDYzXQ0KPg0KPiArTWRlTW9kdWxlUGtnOiBVU0IgTmV0d29yayBtb2R1bGVzDQo+ICtG OiBNZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrDQo+ICtGOiBNZGVNb2R1bGVQa2cvSW5j bHVkZS9Qcm90b2NvbC9Vc2JFdGhlcm5ldFByb3RvY29sLmgNCj4gK006IFJpY2hhcmQgSG8gPHJp Y2hhcmRob0BhbWkuY29tPiBbcmljaGFyZGhvXQ0KPiArUjogUmViZWNjYSBDcmFuIDxyZWJlY2Nh QGJzZGlvLmNvbT4gW2JjcmFuXQ0KPiArDQo+ICBNZGVQa2cNCj4gIEY6IE1kZVBrZy8NCj4gIFc6 IGh0dHBzOi8vZ2l0aHViLmNvbS90aWFub2NvcmUvdGlhbm9jb3JlLmdpdGh1Yi5pby93aWtpL01k ZVBrZw0KPiBkaWZmIC0tZ2l0DQo+IGEvTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9O ZXR3b3JrQ29tbW9uL0NvbXBvbmVudE5hDQo+IG1lLmMNCj4gYi9NZGVNb2R1bGVQa2cvQnVzL1Vz Yi9Vc2JOZXR3b3JrL05ldHdvcmtDb21tb24vQ29tcG9uZW50TmENCj4gbWUuYw0KPiBuZXcgZmls ZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi5lODM0NjllMTMwDQo+IC0tLSAvZGV2 L251bGwNCj4gKysrDQo+IGIvTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9OZXR3b3Jr Q29tbW9uL0NvbXBvbmVudE5hDQo+IG1lLmMNCj4gQEAgLTAsMCArMSwyNjMgQEANCj4gKy8qKiBA ZmlsZQ0KPiArICBUaGlzIGZpbGUgY29udGFpbnMgY29kZSBmb3IgVVNCIG5ldHdvcmsgY29tbW9u IGRyaXZlcg0KPiArICBjb21wb25lbnQgbmFtZSBkZWZpbml0aW9ucw0KPiArDQo+ICsgIENvcHly aWdodCAoYykgMjAyMywgQW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExMQy4gQWxs IHJpZ2h0cw0KPiByZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBC U0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsqKi8NCj4gKw0KPiArI2luY2x1ZGUgIkRyaXZlckJpbmRp bmcuaCINCj4gKw0KPiArZXh0ZXJuIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgZ05ldHdv cmtDb21tb25Ecml2ZXJCaW5kaW5nOw0KPiArDQo+ICtHTE9CQUxfUkVNT1ZFX0lGX1VOUkVGRVJF TkNFRCBFRklfVU5JQ09ERV9TVFJJTkdfVEFCTEUNCj4gZ05ldHdvcmtDb21tb25Ecml2ZXJOYW1l VGFibGVbXSA9IHsNCj4gKyAgew0KPiArICAgICJlbmc7ZW4iLA0KPiArICAgIEwiTmV0d29yayBD b21tb24gRHJpdmVyIg0KPiArICB9LA0KPiArICB7DQo+ICsgICAgTlVMTCwNCj4gKyAgICBOVUxM DQo+ICsgIH0NCj4gK307DQo+ICtHTE9CQUxfUkVNT1ZFX0lGX1VOUkVGRVJFTkNFRCBFRklfVU5J Q09ERV9TVFJJTkdfVEFCTEUNCj4gKmdOZXR3b3JrQ29tbW9uQ29udHJvbGxlck5hbWVUYWJsZSA9 IE5VTEw7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArTmV0d29ya0NvbW1vbkNv bXBvbmVudE5hbWVHZXREcml2ZXJOYW1lICgNCj4gKyAgSU4gIEVGSV9DT01QT05FTlRfTkFNRV9Q Uk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOICBDSEFSOCAgICAgICAgICAgICAgICAgICAgICAgICpM YW5ndWFnZSwNCj4gKyAgT1VUIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgKipEcml2ZXJO YW1lDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArTmV0d29ya0Nv bW1vbkNvbXBvbmVudE5hbWVHZXRDb250cm9sbGVyTmFtZSAoDQo+ICsgIElOIEVGSV9DT01QT05F TlRfTkFNRV9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAg ICAgICAgQ29udHJvbGxlciwNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBD aGlsZEhhbmRsZSAgICAgICAgT1BUSU9OQUwsDQo+ICsgIElOIENIQVI4ICAgICAgICAgICAgICAg ICAgICAgICAgKkxhbmd1YWdlLA0KPiArICBPVVQgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAg ICoqQ29udHJvbGxlck5hbWUNCj4gKyAgKTsNCj4gKw0KPiArR0xPQkFMX1JFTU9WRV9JRl9VTlJF RkVSRU5DRUQNCj4gRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MICBnTmV0d29ya0NvbW1vbkNv bXBvbmVudE5hbWUNCj4gPSB7DQo+ICsgIE5ldHdvcmtDb21tb25Db21wb25lbnROYW1lR2V0RHJp dmVyTmFtZSwNCj4gKyAgTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWVHZXRDb250cm9sbGVyTmFt ZSwNCj4gKyAgImVuZyINCj4gK307DQo+ICsNCj4gK0dMT0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVO Q0VEDQo+IEVGSV9DT01QT05FTlRfTkFNRTJfUFJPVE9DT0wNCj4gZ05ldHdvcmtDb21tb25Db21w b25lbnROYW1lMiA9IHsNCj4gKw0KPiAoRUZJX0NPTVBPTkVOVF9OQU1FMl9HRVRfRFJJVkVSX05B TUUpTmV0d29ya0NvbW1vbkNvbXBvbg0KPiBlbnROYW1lR2V0RHJpdmVyTmFtZSwNCj4gKw0KPiAo RUZJX0NPTVBPTkVOVF9OQU1FMl9HRVRfQ09OVFJPTExFUl9OQU1FKU5ldHdvcmtDb21tb25Dbw0K PiBtcG9uZW50TmFtZUdldENvbnRyb2xsZXJOYW1lLA0KPiArICAiZW4iDQo+ICt9Ow0KPiArDQo+ ICsvKioNCj4gKyAgUmV0cmlldmVzIGEgVW5pY29kZSBzdHJpbmcgdGhhdCBpcyB0aGUgdXNlciBy ZWFkYWJsZSBuYW1lIG9mIHRoZSBkcml2ZXIuDQo+ICsNCj4gKyAgVGhpcyBmdW5jdGlvbiByZXRy aWV2ZXMgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBvZiBhIGRyaXZlciBpbiB0aGUgZm9ybSBvZiBh DQo+ICsgIFVuaWNvZGUgc3RyaW5nLiBJZiB0aGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGhh cyBhIHVzZXIgcmVhZGFibGUgbmFtZSBpbg0KPiArICB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5 IExhbmd1YWdlLCB0aGVuIGEgcG9pbnRlciB0byB0aGUgZHJpdmVyIG5hbWUgaXMNCj4gKyAgcmV0 dXJuZWQgaW4gRHJpdmVyTmFtZSwgYW5kIEVGSV9TVUNDRVNTIGlzIHJldHVybmVkLiBJZiB0aGUg ZHJpdmVyDQo+IHNwZWNpZmllZA0KPiArICBieSBUaGlzIGRvZXMgbm90IHN1cHBvcnQgdGhlIGxh bmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSwNCj4gKyAgdGhlbiBFRklfVU5TVVBQT1JURUQg aXMgcmV0dXJuZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgQSBw b2ludGVyIHRvIHRoZQ0KPiBFRklfQ09NUE9ORU5UX05BTUUyX1BST1RPQ09MIG9yDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCBp bnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgTGFuZ3VhZ2UgICAgICAgICAgQSBwb2ludGVyIHRv IGEgTnVsbC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZw0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBhcnJheSBpbmRpY2F0aW5nIHRoZSBsYW5ndWFnZS4gVGhpcyBpcyB0aGUNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2Ugb2YgdGhlIGRyaXZlciBu YW1lIHRoYXQgdGhlIGNhbGxlciBpcw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXF1ZXN0aW5nLCBhbmQgaXQgbXVzdCBtYXRjaCBvbmUgb2YgdGhlDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlcyBzcGVjaWZpZWQgaW4gU3VwcG9ydGVkTGFu Z3VhZ2VzLiBUaGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9m IGxhbmd1YWdlcyBzdXBwb3J0ZWQgYnkgYSBkcml2ZXIgaXMgdXANCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdG8gdGhlIGRyaXZlciB3cml0ZXIuIExhbmd1YWdlIGlzIHNwZWNp ZmllZA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBSRkMgNDY0NiBvciBJ U08gNjM5LTIgbGFuZ3VhZ2UgY29kZSBmb3JtYXQuDQo+ICsgIEBwYXJhbVtvdXRdIERyaXZlck5h bWUgICAgICAgIEEgcG9pbnRlciB0byB0aGUgVW5pY29kZSBzdHJpbmcgdG8gcmV0dXJuLg0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIFVuaWNvZGUgc3RyaW5nIGlzIHRo ZSBuYW1lIG9mIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXIg c3BlY2lmaWVkIGJ5IFRoaXMgaW4gdGhlIGxhbmd1YWdlDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNwZWNpZmllZCBieSBMYW5ndWFnZS4NCj4gKw0KPiArICBAcmV0dmFsIEVG SV9TVUNDRVNTICAgICAgICAgICBUaGUgVW5pY29kZSBzdHJpbmcgZm9yIHRoZSBEcml2ZXIgc3Bl Y2lmaWVkIGJ5DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgYW5kIHRo ZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2Ugd2FzDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybmVkIGluIERyaXZlck5hbWUuDQo+ICsgIEByZXR2YWwgRUZJ X0lOVkFMSURfUEFSQU1FVEVSIExhbmd1YWdlIGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX0lO VkFMSURfUEFSQU1FVEVSIERyaXZlck5hbWUgaXMgTlVMTC4NCj4gKyAgQHJldHZhbCBFRklfVU5T VVBQT1JURUQgICAgICAgVGhlIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBkb2VzIG5vdA0KPiBz dXBwb3J0DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsYW5ndWFnZSBz cGVjaWZpZWQgYnkgTGFuZ3VhZ2UuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJ QVBJDQo+ICtOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZUdldERyaXZlck5hbWUgKA0KPiArICBJ TiAgRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gIENIQVI4ICAg ICAgICAgICAgICAgICAgICAgICAgKkxhbmd1YWdlLA0KPiArICBPVVQgQ0hBUjE2ICAgICAgICAg ICAgICAgICAgICAgICAqKkRyaXZlck5hbWUNCj4gKyAgKQ0KPiArew0KPiArICByZXR1cm4gTG9v a3VwVW5pY29kZVN0cmluZzIgKA0KPiArICAgICAgICAgICBMYW5ndWFnZSwNCj4gKyAgICAgICAg ICAgVGhpcy0+U3VwcG9ydGVkTGFuZ3VhZ2VzLA0KPiArICAgICAgICAgICBnTmV0d29ya0NvbW1v bkRyaXZlck5hbWVUYWJsZSwNCj4gKyAgICAgICAgICAgRHJpdmVyTmFtZSwNCj4gKyAgICAgICAg ICAgKEJPT0xFQU4pKFRoaXMgPT0gJmdOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZSkNCj4gKyAg ICAgICAgICAgKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJldHJpZXZlcyBhIFVuaWNvZGUg c3RyaW5nIHRoYXQgaXMgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBvZiB0aGUgY29udHJvbGxlcg0K PiArICB0aGF0IGlzIGJlaW5nIG1hbmFnZWQgYnkgYSBkcml2ZXIuDQo+ICsNCj4gKyAgVGhpcyBm dW5jdGlvbiByZXRyaWV2ZXMgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBvZiB0aGUgY29udHJvbGxl ciBzcGVjaWZpZWQNCj4gYnkNCj4gKyAgQ29udHJvbGxlckhhbmRsZSBhbmQgQ2hpbGRIYW5kbGUg aW4gdGhlIGZvcm0gb2YgYSBVbmljb2RlIHN0cmluZy4gSWYgdGhlDQo+ICsgIGRyaXZlciBzcGVj aWZpZWQgYnkgVGhpcyBoYXMgYSB1c2VyIHJlYWRhYmxlIG5hbWUgaW4gdGhlIGxhbmd1YWdlIHNw ZWNpZmllZA0KPiBieQ0KPiArICBMYW5ndWFnZSwgdGhlbiBhIHBvaW50ZXIgdG8gdGhlIGNvbnRy b2xsZXIgbmFtZSBpcyByZXR1cm5lZCBpbg0KPiBDb250cm9sbGVyTmFtZSwNCj4gKyAgYW5kIEVG SV9TVUNDRVNTIGlzIHJldHVybmVkLiAgSWYgdGhlIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBp cyBub3QgY3VycmVudGx5DQo+ICsgIG1hbmFnaW5nIHRoZSBjb250cm9sbGVyIHNwZWNpZmllZCBi eSBDb250cm9sbGVySGFuZGxlIGFuZCBDaGlsZEhhbmRsZSwNCj4gKyAgdGhlbiBFRklfVU5TVVBQ T1JURUQgaXMgcmV0dXJuZWQuICBJZiB0aGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGRvZXMN Cj4gbm90DQo+ICsgIHN1cHBvcnQgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSwg dGhlbiBFRklfVU5TVVBQT1JURUQgaXMNCj4gcmV0dXJuZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2lu XSAgVGhpcyAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBFRklfQ09NUE9ORU5UX05B TUUyX1BST1RPQ09MIG9yDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9D T01QT05FTlRfTkFNRV9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgQ29udHJv bGxlciAgICAgICAgVGhlIGhhbmRsZSBvZiBhIGNvbnRyb2xsZXIgdGhhdCB0aGUgZHJpdmVyDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBieSBUaGlzIGlzIG1h bmFnaW5nLiAgVGhpcyBoYW5kbGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3BlY2lmaWVzIHRoZSBjb250cm9sbGVyIHdob3NlIG5hbWUgaXMgdG8gYmUNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQuDQo+ICsgIEBwYXJhbVtpbl0gIENoaWxk SGFuZGxlICAgICAgIFRoZSBoYW5kbGUgb2YgdGhlIGNoaWxkIGNvbnRyb2xsZXIgdG8gcmV0cmll dmUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG5hbWUgb2YuICBUaGlz IGlzIGFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0DQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG1heSBiZSBOVUxMLiAgSXQgd2lsbCBiZSBOVUxMIGZvciBkZXZpY2UNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVycy4gIEl0IHdpbGwgYWxzbyBiZSBO VUxMIGZvciBhIGJ1cyBkcml2ZXJzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRoYXQgd2lzaCB0byByZXRyaWV2ZSB0aGUgbmFtZSBvZiB0aGUgYnVzDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuICBJdCB3aWxsIG5vdCBiZSBOVUxMIGZv ciBhIGJ1cw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXIgdGhhdCB3 aXNoZXMgdG8gcmV0cmlldmUgdGhlIG5hbWUgb2YgYQ0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGlsZCBjb250cm9sbGVyLg0KPiArICBAcGFyYW1baW5dICBMYW5ndWFnZSAg ICAgICAgICBBIHBvaW50ZXIgdG8gYSBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5IGluZGljYXRpbmcgdGhlIGxhbmd1 YWdlLiAgVGhpcyBpcyB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFu Z3VhZ2Ugb2YgdGhlIGRyaXZlciBuYW1lIHRoYXQgdGhlIGNhbGxlciBpcw0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0aW5nLCBhbmQgaXQgbXVzdCBtYXRjaCBvbmUg b2YgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlcyBzcGVj aWZpZWQgaW4gU3VwcG9ydGVkTGFuZ3VhZ2VzLiBUaGUNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnVtYmVyIG9mIGxhbmd1YWdlcyBzdXBwb3J0ZWQgYnkgYSBkcml2ZXIgaXMg dXANCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGRyaXZlciB3cml0 ZXIuIExhbmd1YWdlIGlzIHNwZWNpZmllZCBpbg0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBSRkMgNDY0NiBvciBJU08gNjM5LTIgbGFuZ3VhZ2UgY29kZSBmb3JtYXQuDQo+ICsg IEBwYXJhbVtvdXRdIENvbnRyb2xsZXJOYW1lICAgIEEgcG9pbnRlciB0byB0aGUgVW5pY29kZSBz dHJpbmcgdG8gcmV0dXJuLg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlz IFVuaWNvZGUgc3RyaW5nIGlzIHRoZSBuYW1lIG9mIHRoZQ0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb250cm9sbGVyIHNwZWNpZmllZCBieSBDb250cm9sbGVySGFuZGxlIGFu ZA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGlsZEhhbmRsZSBpbiB0aGUg bGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExhbmd1YWdlIGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YgdGhlIGRyaXZlcg0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgYnkgVGhpcy4NCj4gKw0KPiArICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgVW5pY29kZSBzdHJpbmcgZm9yIHRoZSB1 c2VyIHJlYWRhYmxlIG5hbWUNCj4gaW4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSBmb3IgdGhlDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyB3YXMgcmV0 dXJuZWQgaW4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJpdmVyTmFtZS4N Cj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgQ29udHJvbGxlckhhbmRsZSBpcyBu b3QgYSB2YWxpZA0KPiBFRklfSEFORExFLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFN RVRFUiBDaGlsZEhhbmRsZSBpcyBub3QgTlVMTCBhbmQgaXQgaXMgbm90IGENCj4gdmFsaWQNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX0hBTkRMRS4NCj4gKyAgQHJldHZh bCBFRklfSU5WQUxJRF9QQVJBTUVURVIgTGFuZ3VhZ2UgaXMgTlVMTC4NCj4gKyAgQHJldHZhbCBF RklfSU5WQUxJRF9QQVJBTUVURVIgQ29udHJvbGxlck5hbWUgaXMgTlVMTC4NCj4gKyAgQHJldHZh bCBFRklfVU5TVVBQT1JURUQgICAgICAgVGhlIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBpcyBu b3QgY3VycmVudGx5DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbmFnaW5n IHRoZSBjb250cm9sbGVyIHNwZWNpZmllZCBieQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBDb250cm9sbGVySGFuZGxlIGFuZCBDaGlsZEhhbmRsZS4NCj4gKyAgQHJldHZhbCBF RklfVU5TVVBQT1JURUQgICAgICAgVGhlIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBkb2VzIG5v dA0KPiBzdXBwb3J0DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsYW5n dWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0K PiArRUZJQVBJDQo+ICtOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZUdldENvbnRyb2xsZXJOYW1l ICgNCj4gKyAgSU4gIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElO ICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXIsDQo+ICsgIElOICBFRklf SEFORExFICAgICAgICAgICAgICAgICAgIENoaWxkSGFuZGxlICAgICAgICBPUFRJT05BTCwNCj4g KyAgSU4gIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAgKkxhbmd1YWdlLA0KPiArICBPVVQg Q0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAqKkNvbnRyb2xsZXJOYW1lDQo+ICsgICkNCj4g K3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBDSEFSMTYg ICAgICAgICAgICAgICAgICAgICAqSGFuZGxlTmFtZTsNCj4gKyAgRUZJX1VTQl9JT19QUk9UT0NP TCAgICAgICAgKlVzYklvOw0KPiArICBFRklfVVNCX0RFVklDRV9ERVNDUklQVE9SICBEZXZEZXNj Ow0KPiArDQo+ICsgIGlmICghTGFuZ3VhZ2UgfHwgIUNvbnRyb2xsZXJOYW1lKSB7DQo+ICsgICAg cmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChDaGls ZEhhbmRsZSA9PSBOVUxMKSB7DQo+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gKyAg fQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIE1ha2Ugc3VyZSB0aGlzIGRyaXZlciBpcyBjdXJyZW50 bHkgbWFuYWdpbmcgQ29udHJvbGxlckhhbmRsZQ0KPiArICAvLw0KPiArICBTdGF0dXMgPSBFZmlU ZXN0TWFuYWdlZERldmljZSAoDQo+ICsgICAgICAgICAgICAgQ29udHJvbGxlciwNCj4gKyAgICAg ICAgICAgICBnTmV0d29ya0NvbW1vbkRyaXZlckJpbmRpbmcuRHJpdmVyQmluZGluZ0hhbmRsZSwN Cj4gKyAgICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkDQo+ICsgICAgICAgICAg ICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0 dXM7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBNYWtlIHN1cmUgdGhpcyBkcml2ZXIg cHJvZHVjZWQgQ2hpbGRIYW5kbGUNCj4gKyAgLy8NCj4gKyAgU3RhdHVzID0gRWZpVGVzdENoaWxk SGFuZGxlICgNCj4gKyAgICAgICAgICAgICBDb250cm9sbGVyLA0KPiArICAgICAgICAgICAgIENo aWxkSGFuZGxlLA0KPiArICAgICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQNCj4g KyAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAg cmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJv dG9jb2wgKENvbnRyb2xsZXIsICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsIChWT0lEDQo+ICoqKSZV c2JJbyk7DQo+ICsNCj4gKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBTdGF0 dXMgPSBVc2JJby0+VXNiR2V0RGV2aWNlRGVzY3JpcHRvciAoVXNiSW8sICZEZXZEZXNjKTsNCj4g KyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICByZXR1cm4gU3RhdHVzOw0K PiArICAgIH0NCj4gKw0KPiArICAgIFN0YXR1cyA9IFVzYklvLT5Vc2JHZXRTdHJpbmdEZXNjcmlw dG9yIChVc2JJbywgMHg0MDksDQo+IERldkRlc2MuU3RyTWFudWZhY3R1cmVyLCAmSGFuZGxlTmFt ZSk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgcmV0dXJuIFN0 YXR1czsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICAqQ29udHJvbGxlck5hbWUgPSBIYW5kbGVOYW1l Ow0KPiArDQo+ICsgICAgaWYgKGdOZXR3b3JrQ29tbW9uQ29udHJvbGxlck5hbWVUYWJsZSAhPSBO VUxMKSB7DQo+ICsgICAgICBGcmVlVW5pY29kZVN0cmluZ1RhYmxlIChnTmV0d29ya0NvbW1vbkNv bnRyb2xsZXJOYW1lVGFibGUpOw0KPiArICAgICAgZ05ldHdvcmtDb21tb25Db250cm9sbGVyTmFt ZVRhYmxlID0gTlVMTDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBBZGRVbmljb2Rl U3RyaW5nMiAoDQo+ICsgICAgICAgICAgICAgICAiZW5nIiwNCj4gKyAgICAgICAgICAgICAgIGdO ZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZS5TdXBwb3J0ZWRMYW5ndWFnZXMsDQo+ICsgICAgICAg ICAgICAgICAmZ05ldHdvcmtDb21tb25Db250cm9sbGVyTmFtZVRhYmxlLA0KPiArICAgICAgICAg ICAgICAgSGFuZGxlTmFtZSwNCj4gKyAgICAgICAgICAgICAgIFRSVUUNCj4gKyAgICAgICAgICAg ICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgcmV0dXJu IFN0YXR1czsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBBZGRVbmljb2RlU3RyaW5n MiAoDQo+ICsgICAgICAgICAgICAgICAiZW4iLA0KPiArICAgICAgICAgICAgICAgZ05ldHdvcmtD b21tb25Db21wb25lbnROYW1lMi5TdXBwb3J0ZWRMYW5ndWFnZXMsDQo+ICsgICAgICAgICAgICAg ICAmZ05ldHdvcmtDb21tb25Db250cm9sbGVyTmFtZVRhYmxlLA0KPiArICAgICAgICAgICAgICAg SGFuZGxlTmFtZSwNCj4gKyAgICAgICAgICAgICAgIEZBTFNFDQo+ICsgICAgICAgICAgICAgICAp Ow0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIHJldHVybiBTdGF0 dXM7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgcmV0dXJuIExvb2t1cFVuaWNvZGVTdHJpbmcyICgN Cj4gKyAgICAgICAgICAgICBMYW5ndWFnZSwNCj4gKyAgICAgICAgICAgICBUaGlzLT5TdXBwb3J0 ZWRMYW5ndWFnZXMsDQo+ICsgICAgICAgICAgICAgZ05ldHdvcmtDb21tb25Db250cm9sbGVyTmFt ZVRhYmxlLA0KPiArICAgICAgICAgICAgIENvbnRyb2xsZXJOYW1lLA0KPiArICAgICAgICAgICAg IChCT09MRUFOKShUaGlzID09ICZnTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWUpDQo+ICsgICAg ICAgICAgICAgKTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ ICt9DQo+IGRpZmYgLS1naXQNCj4gYS9NZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL05l dHdvcmtDb21tb24vRHJpdmVyQmluZGluZy5jDQo+IGIvTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNi TmV0d29yay9OZXR3b3JrQ29tbW9uL0RyaXZlckJpbmRpbmcuYw0KPiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi44NTIwY2Y4ODZjDQo+IC0tLSAvZGV2L251bGwNCj4g KysrDQo+IGIvTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9OZXR3b3JrQ29tbW9uL0Ry aXZlckJpbmRpbmcuYw0KPiBAQCAtMCwwICsxLDU5NSBAQA0KPiArLyoqIEBmaWxlDQo+ICsgIFRo aXMgZmlsZSBjb250YWlucyBjb2RlIGZvciBVU0IgbmV0d29yayBiaW5kaW5nIGRyaXZlcg0KPiAr DQo+ICsgIENvcHlyaWdodCAoYykgMjAyMywgQW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlv bmFsIExMQy4gQWxsIHJpZ2h0cw0KPiByZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsqKi8NCj4gKw0KPiArI2luY2x1ZGUg IkRyaXZlckJpbmRpbmcuaCINCj4gKw0KPiArUFhFX1NXX1VOREkgICpnUHhlID0gTlVMTDsNCj4g K05JQ19ERVZJQ0UgICAqZ0xhbkRldmljZUxpc3RbTUFYX0xBTl9JTlRFUkZBQ0VdOw0KPiArVUlO VDMyICAgICAgIGdSYXRlTGltaXRpbmdDcmVkaXQ7DQo+ICtVSU5UMzIgICAgICAgZ1JhdGVMaW1p dGluZ1BvbGxUaW1lcjsNCj4gK0JPT0xFQU4gICAgICBnUmF0ZUxpbWl0aW5nRW5hYmxlOw0KPiAr DQo+ICtFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgIGdOZXR3b3JrQ29tbW9uRHJpdmVyQmlu ZGluZyA9IHsNCj4gKyAgTmV0d29ya0NvbW1vblN1cHBvcnRlZCwNCj4gKyAgTmV0d29ya0NvbW1v bkRyaXZlclN0YXJ0LA0KPiArICBOZXR3b3JrQ29tbW9uRHJpdmVyU3RvcCwNCj4gKyAgTkVUV09S S19DT01NT05fRFJJVkVSX1ZFUlNJT04sDQo+ICsgIE5VTEwsDQo+ICsgIE5VTEwNCj4gK307DQo+ ICsNCj4gKy8qKg0KPiArICBDcmVhdGUgTUFDIERldmljZSBQYXRoDQo+ICsNCj4gKyAgQHBhcmFt W2luLCBvdXRdIERldiAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+IEVGSV9ERVZJQ0Vf UEFUSF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgICAgIEJhc2VEZXYgICAg ICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+IEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCBpbnN0YW5j ZS4NCj4gKyAgQHBhcmFtW2luXSAgICAgIE5pYyAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhl IE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXINCj4gZGF0YS4NCj4gKw0KPiArICBAcmV0dmFs IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgIFRoZSBkZXZpY2UgcGF0aCBjb3VsZCBub3QgYmUgY3Jl YXRlZA0KPiBzdWNjZXNzZnVsbHkgZHVlIHRvIGEgbGFjayBvZiByZXNvdXJjZXMuDQo+ICsgIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgTUFDIGRldmljZSBwYXRoIGNyZWF0ZWQgc3Vj Y2Vzc2Z1bGx5Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0NyZWF0ZU1hY0Rldmlj ZVBhdGggKA0KPiArICBJTiBPVVQgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgKipEZXYsDQo+ ICsgIElOICAgICAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqQmFzZURldiwNCj4gKyAgSU4g ICAgICBOSUNfREFUQSAgICAgICAgICAgICAgICAgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBF RklfU1RBVFVTICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgTUFDX0FERFJfREVWSUNFX1BB VEggICAgICBNYWNBZGRyTm9kZTsNCj4gKyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqRW5k Tm9kZTsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAqRGV2aWNlUGF0aDsNCj4gKyAg VUlOVDE2ICAgICAgICAgICAgICAgICAgICBUb3RhbExlbmd0aDsNCj4gKyAgVUlOVDE2ICAgICAg ICAgICAgICAgICAgICBCYXNlTGVuZ3RoOw0KPiArDQo+ICsgIFplcm9NZW0gKCZNYWNBZGRyTm9k ZSwgc2l6ZW9mIChNQUNfQUREUl9ERVZJQ0VfUEFUSCkpOw0KPiArICBDb3B5TWVtICgmTWFjQWRk ck5vZGUuTWFjQWRkcmVzcywgJk5pYy0+TWFjQWRkciwgc2l6ZW9mDQo+IChFRklfTUFDX0FERFJF U1MpKTsNCj4gKw0KPiArICBNYWNBZGRyTm9kZS5IZWFkZXIuVHlwZSAgICAgID0gTUVTU0FHSU5H X0RFVklDRV9QQVRIOw0KPiArICBNYWNBZGRyTm9kZS5IZWFkZXIuU3ViVHlwZSAgID0gTVNHX01B Q19BRERSX0RQOw0KPiArICBNYWNBZGRyTm9kZS5IZWFkZXIuTGVuZ3RoWzBdID0gKFVJTlQ4KXNp emVvZiAoTWFjQWRkck5vZGUpOw0KPiArICBNYWNBZGRyTm9kZS5IZWFkZXIuTGVuZ3RoWzFdID0g MDsNCj4gKw0KPiArICBFbmROb2RlID0gQmFzZURldjsNCj4gKw0KPiArICB3aGlsZSAoIUlzRGV2 aWNlUGF0aEVuZCAoRW5kTm9kZSkpIHsNCj4gKyAgICBFbmROb2RlID0gTmV4dERldmljZVBhdGhO b2RlIChFbmROb2RlKTsNCj4gKyAgfQ0KPiArDQo+ICsgIEJhc2VMZW5ndGggID0gKFVJTlQxNiko KFVJTlROKShFbmROb2RlKSAtIChVSU5UTikoQmFzZURldikpOw0KPiArICBUb3RhbExlbmd0aCA9 IChVSU5UMTYpKEJhc2VMZW5ndGggKyBzaXplb2YgKE1hY0FkZHJOb2RlKSArIHNpemVvZg0KPiAo RUZJX0RFVklDRV9QQVRIX1BST1RPQ09MKSk7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5BbGxv Y2F0ZVBvb2wgKEVmaUJvb3RTZXJ2aWNlc0RhdGEsIFRvdGFsTGVuZ3RoLCAoVk9JRA0KPiAqKikm RGV2aWNlUGF0aCk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1 cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgKkRldiA9IChFRklfREVWSUNFX1BBVEhfUFJP VE9DT0wgKilEZXZpY2VQYXRoOw0KPiArICBDb3B5TWVtIChEZXZpY2VQYXRoLCAoQ0hBUjggKilC YXNlRGV2LCBCYXNlTGVuZ3RoKTsNCj4gKyAgRGV2aWNlUGF0aCArPSBCYXNlTGVuZ3RoOw0KPiAr ICBDb3B5TWVtIChEZXZpY2VQYXRoLCAoQ0hBUjggKikmTWFjQWRkck5vZGUsIHNpemVvZiAoTWFj QWRkck5vZGUpKTsNCj4gKyAgRGV2aWNlUGF0aCArPSBzaXplb2YgKE1hY0FkZHJOb2RlKTsNCj4g KyAgQ29weU1lbSAoRGV2aWNlUGF0aCwgKENIQVI4ICopRW5kTm9kZSwgc2l6ZW9mDQo+IChFRklf REVWSUNFX1BBVEhfUFJPVE9DT0wpKTsNCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ ICt9DQo+ICsNCj4gKy8qKg0KPiArICBOZXR3b3JrIENvbW1vbiBEcml2ZXIgQmluZGluZyBTdXBw b3J0Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICAgIFByb3Rv Y29sIGluc3RhbmNlIHBvaW50ZXIuDQo+ICsgIEBwYXJhbVtpbl0gIENvbnRyb2xsZXJIYW5kbGUg ICAgICAgIEhhbmRsZSBvZiBkZXZpY2UgdG8gdGVzdC4NCj4gKyAgQHBhcmFtW2luXSAgUmVtYWlu aW5nRGV2aWNlUGF0aCAgICAgT3B0aW9uYWwgcGFyYW1ldGVyIHVzZSB0byBwaWNrIGENCj4gc3Bl Y2lmaWMgY2hpbGQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2 aWNlIHRvIHN0YXJ0Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAg ICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoaXMgZGV2aWNlLg0KPiArICBAcmV0dmFsIEVGSV9B TFJFQURZX1NUQVJURUQgICAgICAgICBUaGlzIGRyaXZlciBpcyBhbHJlYWR5IHJ1bm5pbmcgb24g dGhpcw0KPiBkZXZpY2UuDQo+ICsgIEByZXR2YWwgb3RoZXIgICAgICAgICAgICAgICAgICAgICAg IFRoaXMgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBkZXZpY2UuDQo+ICsNCj4gKyoqLw0K PiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtOZXR3b3JrQ29tbW9uU3VwcG9ydGVkICgNCj4g KyAgSU4gRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gRUZJX0hB TkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICBJTiBFRklfREVW SUNFX1BBVEhfUFJPVE9DT0wgICAgICpSZW1haW5pbmdEZXZpY2VQYXRoDQo+ICsgICkNCj4gK3sN Cj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVES0lJX1VT Ql9FVEhFUk5FVF9QUk9UT0NPTCAgKlVzYkV0aDsNCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPk9w ZW5Qcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiAr ICAgICAgICAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAg ICAgICAgICAgIChWT0lEICoqKSZVc2JFdGgsDQo+ICsgICAgICAgICAgICAgICAgICBUaGlzLT5E cml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRs ZSwNCj4gKyAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0JZX0RSSVZFUg0KPiAr ICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAr ICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBnQlMtPkNsb3NlUHJvdG9jb2wg KA0KPiArICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICZnRWRrSUlVc2JF dGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0K PiArICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgKTsNCj4gKyAgcmV0dXJu IFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIE5ldHdvcmsgQ29tbW9uIERyaXZlciBC aW5kaW5nIFN0YXJ0Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAg ICAgIFByb3RvY29sIGluc3RhbmNlIHBvaW50ZXIuDQo+ICsgIEBwYXJhbVtpbl0gIENvbnRyb2xs ZXJIYW5kbGUgICAgICAgIEhhbmRsZSBvZiBkZXZpY2UgdG8gYmluZCBkcml2ZXIgdG8uDQo+ICsg IEBwYXJhbVtpbl0gIFJlbWFpbmluZ0RldmljZVBhdGggICAgIE9wdGlvbmFsIHBhcmFtZXRlciB1 c2UgdG8gcGljayBhDQo+IHNwZWNpZmljIGNoaWxkDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRldmljZSB0byBzdGFydC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgICAgICAgICAgICBUaGlzIGRyaXZlciBpcyBhZGRlZCB0byBDb250cm9sbGVy SGFuZGxlDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgICAgICAgIFRoaXMgZHJp dmVyIGNvdWxkIG5vdCBiZSBzdGFydGVkIGR1ZSB0byBhDQo+IGRldmljZSBlcnJvcg0KPiArICBA cmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgICAgICBUaGUgZHJpdmVyIGNvdWxkIG5vdCBp bnN0YWxsDQo+IHN1Y2Nlc3NmdWxseSBkdWUgdG8gYSBsYWNrIG9mIHJlc291cmNlcy4NCj4gKyAg QHJldHZhbCBvdGhlciAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBkcml2ZXIgZG9lcyBub3Qg c3VwcG9ydCB0aGlzIGRldmljZQ0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQ SQ0KPiArTmV0d29ya0NvbW1vbkRyaXZlclN0YXJ0ICgNCj4gKyAgSU4gRUZJX0RSSVZFUl9CSU5E SU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAg ICBDb250cm9sbGVySGFuZGxlLA0KPiArICBJTiBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAg ICpSZW1haW5pbmdEZXZpY2VQYXRoDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAg ICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAg KlVzYkV0aFBhdGg7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlVzYkV0aDsN Cj4gKyAgRUZJX01BQ19BRERSRVNTICAgICAgICAgICAgICBNYWNBZGRyZXNzOw0KPiArICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgIEJ1bGtEYXRhU2l6ZTsNCj4gKyAgTklDX0RFVklDRSAg ICAgICAgICAgICAgICAgICAqTmljRGV2aWNlOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAg ICAgICAgICpUbXBQeGVQb2ludGVyOw0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+T3BlblByb3Rv Y29sICgNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAg ICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAg ICAgKFZPSUQgKiopJlVzYkV0aCwNCj4gKyAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJp bmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiAr ICAgICAgICAgICAgICAgICAgRUZJX09QRU5fUFJPVE9DT0xfQllfRFJJVkVSDQo+ICsgICAgICAg ICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0 dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29s ICgNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAg ICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAg ICAoVk9JRCAqKikmVXNiRXRoUGF0aCwNCj4gKyAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZl ckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0K PiArICAgICAgICAgICAgICAgICAgRUZJX09QRU5fUFJPVE9DT0xfQllfRFJJVkVSDQo+ICsgICAg ICAgICAgICAgICAgICApOw0KPiArDQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g KyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxl LA0KPiArICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAg ICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFu ZGxlDQo+ICsgICAgICAgICAgICk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiAr DQo+ICsgIFplcm9NZW0gKCZNYWNBZGRyZXNzLCBzaXplb2YgKEVGSV9NQUNfQUREUkVTUykpOw0K PiArDQo+ICsgIFN0YXR1cyA9IFVzYkV0aC0+VXNiRXRoTWFjQWRkcmVzcyAoVXNiRXRoLCAmTWFj QWRkcmVzcyk7DQo+ICsgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ICsgIFN0YXR1cyA9 IFVzYkV0aC0+VXNiRXRoTWF4QnVsa1NpemUgKFVzYkV0aCwgJkJ1bGtEYXRhU2l6ZSk7DQo+ICsN Cj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIGdCUy0+Q2xvc2VQcm90b2Nv bCAoDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICZnRWZp RGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGlu Z0hhbmRsZSwNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICAp Ow0KPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJI YW5kbGUsDQo+ICsgICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAg ICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgIENvbnRyb2xs ZXJIYW5kbGUNCj4gKyAgICAgICAgICAgKTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9 DQo+ICsNCj4gKyAgTmljRGV2aWNlID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChOSUNfREVW SUNFKSArIEJ1bGtEYXRhU2l6ZSArIDQwOTYpOw0KPiArICBpZiAoIU5pY0RldmljZSkgew0KPiAr ICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUs DQo+ICsgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAg ICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhh bmRsZQ0KPiArICAgICAgICAgICApOw0KPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsg ICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICZnRWRrSUlVc2JFdGhQ cm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgKTsNCj4gKyAgICBy ZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgIH0NCj4gKw0KPiArICAvLyBmb3IgYWxp Z25tZW50IGFkanVzdG1lbnQNCj4gKyAgaWYgKGdQeGUgPT0gTlVMTCkgew0KPiArICAgIFRtcFB4 ZVBvaW50ZXIgPSBOVUxMOw0KPiArICAgIFRtcFB4ZVBvaW50ZXIgPSBBbGxvY2F0ZVplcm9Qb29s IChzaXplb2YgKFBYRV9TV19VTkRJKSArIDE2KTsNCj4gKyAgICBpZiAoIVRtcFB4ZVBvaW50ZXIp IHsNCj4gKyAgICAgIGlmIChOaWNEZXZpY2UgIT0gTlVMTCkgew0KPiArICAgICAgICBGcmVlUG9v bCAoTmljRGV2aWNlKTsNCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgZ0JTLT5DbG9zZVByb3Rv Y29sICgNCj4gKyAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAg ICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICBUaGlzLT5Ecml2 ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAg ICAgICAgICAgICApOw0KPiArICAgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAg ICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90 b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4g KyAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICAgKTsNCj4gKw0K PiArICAgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICAgIH0gZWxzZSB7DQo+ ICsgICAgICAvLyBjaGVjayBmb3IgcGFyYWdyYXBoIGFsaWdubWVudCBoZXJlDQo+ICsgICAgICBp ZiAoKChVSU5UTilUbXBQeGVQb2ludGVyICYgMHgwRikgIT0gMCkgew0KPiArICAgICAgICBnUHhl ID0gKFBYRV9TV19VTkRJICopKFRtcFB4ZVBvaW50ZXIgKyA4KTsNCj4gKyAgICAgIH0gZWxzZSB7 DQo+ICsgICAgICAgIGdQeGUgPSAoUFhFX1NXX1VOREkgKilUbXBQeGVQb2ludGVyOw0KPiArICAg ICAgfQ0KPiArDQo+ICsgICAgICBpZiAoIWdQeGUpIHsNCj4gKyAgICAgICAgaWYgKE5pY0Rldmlj ZSAhPSBOVUxMKSB7DQo+ICsgICAgICAgICAgRnJlZVBvb2wgKE5pY0RldmljZSk7DQo+ICsgICAg ICAgIH0NCj4gKw0KPiArICAgICAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAg ICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0 aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5k bGUsDQo+ICsgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICAg ICApOw0KPiArICAgICAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAg Q29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2Nv bEd1aWQsDQo+ICsgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiAr ICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICAgICAgKTsNCj4g KyAgICAgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICAgICAgfQ0KPiArDQo+ ICsgICAgICBQeGVTdHJ1Y3RJbml0IChnUHhlKTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiAr ICBOaWNEZXZpY2UtPk5paVByb3RvY29sLklkICAgID0gKFVJTlQ2NCkoVUlOVE4pKGdQeGUpOw0K PiArICBOaWNEZXZpY2UtPk5paVByb3RvY29sLklmTnVtID0gZ1B4ZS0+SUZjbnQgfCBnUHhlLT5J RmNudEV4dCA8PCA4Ow0KPiArDQo+ICsgIFVwZGF0ZU5pY051bSAoJk5pY0RldmljZS0+TmljSW5m bywgZ1B4ZSk7DQo+ICsNCj4gKyAgTmljRGV2aWNlLT5OaWNJbmZvLlNpZ25hdHVyZSA9IE5JQ19E QVRBX1NJR05BVFVSRTsNCj4gKw0KPiArICBOaWNEZXZpY2UtPk5pY0luZm8uVXNiRXRoICAgICAg ICAgPSBVc2JFdGg7DQo+ICsgIE5pY0RldmljZS0+TmljSW5mby5NYXhTZWdtZW50U2l6ZSA9IChV SU5UMTYpQnVsa0RhdGFTaXplOw0KPiArICBOaWNEZXZpY2UtPk5pY0luZm8uQ2FibGVEZXRlY3Qg ICAgPSAwOw0KPiArICBOaWNEZXZpY2UtPlJlY2VpdmVCdWZmZXIgICAgICAgICAgPSBBTElHTl9Q T0lOVEVSICgoVk9JRCAqKU5pY0RldmljZSwNCj4gNDA5Nik7DQo+ICsNCj4gKyAgQ29weU1lbSAo KENIQVI4ICopJihOaWNEZXZpY2UtPk5pY0luZm8uTWFjQWRkciksIChDSEFSOA0KPiAqKSZNYWNB ZGRyZXNzLCBzaXplb2YgKE1hY0FkZHJlc3MpKTsNCj4gKw0KPiArICBOaWNEZXZpY2UtPk5pY0lu Zm8uVHhCdWZmZXJDb3VudCA9IDA7DQo+ICsNCj4gKyAgaWYgKE5pY0RldmljZS0+TmlpUHJvdG9j b2wuSWZOdW0gPCBNQVhfTEFOX0lOVEVSRkFDRSkgew0KPiArICAgIGdMYW5EZXZpY2VMaXN0W05p Y0RldmljZS0+TmlpUHJvdG9jb2wuSWZOdW1dID0gTmljRGV2aWNlOw0KPiArICB9IGVsc2Ugew0K PiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5k bGUsDQo+ICsgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAg ICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgQ29udHJvbGxl ckhhbmRsZQ0KPiArICAgICAgICAgICApOw0KPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICZnRWRrSUlVc2JF dGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUs DQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgKTsNCj4gKw0K PiArICAgIGlmIChUbXBQeGVQb2ludGVyICE9IE5VTEwpIHsNCj4gKyAgICAgIEZyZWVQb29sIChU bXBQeGVQb2ludGVyKTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoTmljRGV2aWNlICE9IE5V TEwpIHsNCj4gKyAgICAgIEZyZWVQb29sIChOaWNEZXZpY2UpOw0KPiArICAgIH0NCj4gKw0KPiAr ICAgIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0g Q3JlYXRlTWFjRGV2aWNlUGF0aCAoDQo+ICsgICAgICAgICAgICAgJk5pY0RldmljZS0+RGV2UGF0 aCwNCj4gKyAgICAgICAgICAgICBVc2JFdGhQYXRoLA0KPiArICAgICAgICAgICAgICZOaWNEZXZp Y2UtPk5pY0luZm8NCj4gKyAgICAgICAgICAgICApOw0KPiArDQo+ICsgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gKyAgICBVcGRhdGVOaWNOdW0gKE5VTEwsIGdQeGUpOw0KPiArICAgIGlm IChUbXBQeGVQb2ludGVyICE9IE5VTEwpIHsNCj4gKyAgICAgIEZyZWVQb29sIChUbXBQeGVQb2lu dGVyKTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBOaWNEZXZpY2UtPlNpZ25hdHVyZSAg ICAgICAgICAgICAgICAgPSBVTkRJX0RFVl9TSUdOQVRVUkU7DQo+ICsgIE5pY0RldmljZS0+Tmlp UHJvdG9jb2wuUmV2aXNpb24gICAgICA9DQo+IEVGSV9ORVRXT1JLX0lOVEVSRkFDRV9JREVOVElG SUVSX1BST1RPQ09MX1JFVklTSU9OOw0KPiArICBOaWNEZXZpY2UtPk5paVByb3RvY29sLlR5cGUg ICAgICAgICAgPSBFZmlOZXR3b3JrSW50ZXJmYWNlVW5kaTsNCj4gKyAgTmljRGV2aWNlLT5OaWlQ cm90b2NvbC5NYWpvclZlciAgICAgID0gUFhFX1JPTUlEX01BSk9SVkVSOw0KPiArICBOaWNEZXZp Y2UtPk5paVByb3RvY29sLk1pbm9yVmVyICAgICAgPSBQWEVfUk9NSURfTUlOT1JWRVI7DQo+ICsg IE5pY0RldmljZS0+TmlpUHJvdG9jb2wuSW1hZ2VTaXplICAgICA9IDA7DQo+ICsgIE5pY0Rldmlj ZS0+TmlpUHJvdG9jb2wuSW1hZ2VBZGRyICAgICA9IDA7DQo+ICsgIE5pY0RldmljZS0+TmlpUHJv dG9jb2wuSXB2NlN1cHBvcnRlZCA9IFRSVUU7DQo+ICsNCj4gKyAgTmljRGV2aWNlLT5OaWlQcm90 b2NvbC5TdHJpbmdJZFswXSA9ICdVJzsNCj4gKyAgTmljRGV2aWNlLT5OaWlQcm90b2NvbC5TdHJp bmdJZFsxXSA9ICdOJzsNCj4gKyAgTmljRGV2aWNlLT5OaWlQcm90b2NvbC5TdHJpbmdJZFsyXSA9 ICdEJzsNCj4gKyAgTmljRGV2aWNlLT5OaWlQcm90b2NvbC5TdHJpbmdJZFszXSA9ICdJJzsNCj4g KyAgTmljRGV2aWNlLT5EZXZpY2VIYW5kbGUgICAgICAgICAgICA9IE5VTEw7DQo+ICsNCj4gKyAg TmljRGV2aWNlLT5OaWNJbmZvLlJhdGVMaW1pdGluZ0VuYWJsZSAgICAgID0gZ1JhdGVMaW1pdGlu Z0VuYWJsZTsNCj4gKyAgTmljRGV2aWNlLT5OaWNJbmZvLlJhdGVMaW1pdGluZ0NyZWRpdENvdW50 ID0gMDsNCj4gKyAgTmljRGV2aWNlLT5OaWNJbmZvLlJhdGVMaW1pdGluZ0NyZWRpdCAgICAgID0g Z1JhdGVMaW1pdGluZ0NyZWRpdDsNCj4gKyAgTmljRGV2aWNlLT5OaWNJbmZvLlJhdGVMaW1pdGlu Z1BvbGxUaW1lciAgID0gZ1JhdGVMaW1pdGluZ1BvbGxUaW1lcjsNCj4gKyAgTmljRGV2aWNlLT5O aWNJbmZvLlJhdGVMaW1pdGVyICAgICAgICAgICAgID0gTlVMTDsNCj4gKw0KPiArICBaZXJvTWVt ICgmTmljRGV2aWNlLT5OaWNJbmZvLlJlcXVlc3QsIHNpemVvZg0KPiAoRUZJX1VTQl9ERVZJQ0Vf UkVRVUVTVCkpOw0KPiArDQo+ICsgIFN0YXR1cyA9IFVzYkV0aC0+VXNiRXRoSW50ZXJydXB0IChV c2JFdGgsIFRSVUUsDQo+IE5FVFdPUktfQ09NTU9OX1BPTExJTkdfSU5URVJWQUwsICZOaWNEZXZp Y2UtPk5pY0luZm8uUmVxdWVzdCk7DQo+ICsgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5JbnN0YWxsTXVsdGlwbGVQcm90b2NvbEludGVyZmFjZXMg KA0KPiArICAgICAgICAgICAgICAgICAgJk5pY0RldmljZS0+RGV2aWNlSGFuZGxlLA0KPiArICAg ICAgICAgICAgICAgICAgJmdFZmlOZXR3b3JrSW50ZXJmYWNlSWRlbnRpZmllclByb3RvY29sR3Vp ZF8zMSwNCj4gKyAgICAgICAgICAgICAgICAgICZOaWNEZXZpY2UtPk5paVByb3RvY29sLA0KPiAr ICAgICAgICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAg ICAgICAgICAgICAgTmljRGV2aWNlLT5EZXZQYXRoLA0KPiArICAgICAgICAgICAgICAgICAgTlVM TA0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ICsgICAgaWYgKE5pY0RldmljZS0+TmlpUHJvdG9jb2wuSWZOdW0gPCBNQVhfTEFO X0lOVEVSRkFDRSkgew0KPiArICAgICAgZ0xhbkRldmljZUxpc3RbTmljRGV2aWNlLT5OaWlQcm90 b2NvbC5JZk51bV0gPSBOVUxMOw0KPiArICAgIH0NCj4gKw0KPiArICAgIGdCUy0+Q2xvc2VQcm90 b2NvbCAoDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICZn RWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgVGhpcy0+RHJpdmVyQmlu ZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAg ICApOw0KPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgIENvbnRyb2xs ZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsg ICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgIENvbnRy b2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgKTsNCj4gKw0KPiArICAgIGlmIChUbXBQeGVQb2lu dGVyICE9IE5VTEwpIHsNCj4gKyAgICAgIEZyZWVQb29sIChUbXBQeGVQb2ludGVyKTsNCj4gKyAg ICB9DQo+ICsNCj4gKyAgICBpZiAoTmljRGV2aWNlLT5EZXZQYXRoICE9IE5VTEwpIHsNCj4gKyAg ICAgIEZyZWVQb29sIChOaWNEZXZpY2UtPkRldlBhdGgpOw0KPiArICAgIH0NCj4gKw0KPiArICAg IGlmIChOaWNEZXZpY2UgIT0gTlVMTCkgew0KPiArICAgICAgRnJlZVBvb2wgKE5pY0RldmljZSk7 DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7DQo+ICsgIH0N Cj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAg ICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZGtJSVVzYkV0 aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZVc2JFdGgsDQo+ ICsgICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAg ICAgICAgICAgICAgTmljRGV2aWNlLT5EZXZpY2VIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAg ICBFRklfT1BFTl9QUk9UT0NPTF9CWV9DSElMRF9DT05UUk9MTEVSDQo+ICsgICAgICAgICAgICAg ICAgICApOw0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr ICBOZXR3b3JrIENvbW1vbiBEcml2ZXIgQmluZGluZyBTdG9wLg0KPiArDQo+ICsgIEBwYXJhbVtp bl0gIFRoaXMgICAgICAgICAgICAgICAgICBQcm90b2NvbCBpbnN0YW5jZSBwb2ludGVyLg0KPiAr ICBAcGFyYW1baW5dICBDb250cm9sbGVySGFuZGxlICAgICAgSGFuZGxlIG9mIGRldmljZSB0byBz dG9wIGRyaXZlciBvbg0KPiArICBAcGFyYW1baW5dICBOdW1iZXJPZkNoaWxkcmVuICAgICAgTnVt YmVyIG9mIEhhbmRsZXMgaW4NCj4gQ2hpbGRIYW5kbGVCdWZmZXIuIElmIG51bWJlciBvZg0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4gaXMgemVybyBzdG9w IHRoZSBlbnRpcmUgYnVzIGRyaXZlci4NCj4gKyAgQHBhcmFtW2luXSAgQ2hpbGRIYW5kbGVCdWZm ZXIgICAgIExpc3Qgb2YgQ2hpbGQgSGFuZGxlcyB0byBTdG9wLg0KPiArDQo+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgICAgICBUaGlzIGRyaXZlciBpcyByZW1vdmVkIENvbnRyb2xs ZXJIYW5kbGUNCj4gKyAgQHJldHZhbCBvdGhlciAgICAgICAgICAgICAgICAgICAgIFRoaXMgZHJp dmVyIHdhcyBub3QgcmVtb3ZlZCBmcm9tIHRoaXMgZGV2aWNlDQo+ICsNCj4gKyoqLw0KPiArRUZJ X1NUQVRVUw0KPiArRUZJQVBJDQo+ICtOZXR3b3JrQ29tbW9uRHJpdmVyU3RvcCAoDQo+ICsgIElO ICBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiAgRUZJX0hBTkRM RSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICBJTiAgVUlOVE4gICAg ICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZkNoaWxkcmVuLA0KPiArICBJTiAgRUZJX0hBTkRM RSAgICAgICAgICAgICAgICAgICAqQ2hpbGRIYW5kbGVCdWZmZXINCj4gKyAgKQ0KPiArew0KPiAr ICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiAr ICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsQ2hpbGRyZW5T dG9wcGVkOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg SW5kZXg7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgICAgICAgICAgICAgICAq VXNiRXRoOw0KPiArICBOSUNfREVWSUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Kk5pY0RldmljZTsNCj4gKyAgRUZJX05FVFdPUktfSU5URVJGQUNFX0lERU5USUZJRVJfUFJPVE9D T0wgICpOaWlQcm90b2NvbDsNCj4gKw0KPiArICBpZiAoTnVtYmVyT2ZDaGlsZHJlbiA9PSAwKSB7 DQo+ICsgICAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAg ICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICAmZ0VmaU5ldHdv cmtJbnRlcmZhY2VJZGVudGlmaWVyUHJvdG9jb2xHdWlkXzMxLA0KPiArICAgICAgICAgICAgICAg ICAgICAoVk9JRCAqKikmTmlpUHJvdG9jb2wsDQo+ICsgICAgICAgICAgICAgICAgICAgIFRoaXMt PkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJI YW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0dFVF9QUk9U T0NPTA0KPiArICAgICAgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiArICAgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAg ICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFBy b3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0K PiArICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgICApOw0KPiAr ICAgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgICBDb250cm9sbGVySGFu ZGxlLA0KPiArICAgICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAg ICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICBDb250 cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICAgKTsNCj4gKyAgICAgIHJldHVybiBFRklfU1VD Q0VTUzsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBOaWNEZXZpY2UgPSBVTkRJX0RFVl9GUk9NX1RI SVMgKE5paVByb3RvY29sKTsNCj4gKyAgICBTdGF0dXMgICAgPSBnQlMtPlVuaW5zdGFsbE11bHRp cGxlUHJvdG9jb2xJbnRlcmZhY2VzICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgQ29udHJv bGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgJmdFZmlOZXR3b3JrSW50ZXJm YWNlSWRlbnRpZmllclByb3RvY29sR3VpZF8zMSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg Jk5pY0RldmljZS0+TmlpUHJvdG9jb2wsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICZnRWZp RGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgTmljRGV2 aWNlLT5EZXZQYXRoLA0KPiArICAgICAgICAgICAgICAgICAgICAgICBOVUxMDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAr ICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBGcmVlUG9vbCAoTmlj RGV2aWNlLT5EZXZQYXRoKTsNCj4gKyAgICBGcmVlUG9vbCAoTmljRGV2aWNlKTsNCj4gKw0KPiAr ICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUs DQo+ICsgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAg ICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhh bmRsZQ0KPiArICAgICAgICAgICApOw0KPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsg ICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICZnRWRrSUlVc2JFdGhQ cm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgKTsNCj4gKyAgICBy ZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBBbGxDaGlsZHJlblN0b3BwZWQg PSBUUlVFOw0KPiArDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IE51bWJlck9mQ2hpbGRy ZW47IEluZGV4KyspIHsNCj4gKyAgICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQo+ICsg ICAgICAgICAgICAgICAgICAgIENoaWxkSGFuZGxlQnVmZmVyW0luZGV4XSwNCj4gKyAgICAgICAg ICAgICAgICAgICAgJmdFZmlOZXR3b3JrSW50ZXJmYWNlSWRlbnRpZmllclByb3RvY29sR3VpZF8z MSwNCj4gKyAgICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJk5paVByb3RvY29sLA0KPiArICAg ICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAg ICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICBFRklf T1BFTl9QUk9UT0NPTF9HRVRfUFJPVE9DT0wNCj4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4g KyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBBbGxDaGlsZHJlblN0b3Bw ZWQgPSBGQUxTRTsNCj4gKyAgICAgIGNvbnRpbnVlOw0KPiArICAgIH0NCj4gKw0KPiArICAgIE5p Y0RldmljZSA9IFVORElfREVWX0ZST01fVEhJUyAoTmlpUHJvdG9jb2wpOw0KPiArDQo+ICsgICAg Z0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4g KyAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgVGhp cy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgQ2hpbGRIYW5kbGVCdWZmZXJb SW5kZXhdDQo+ICsgICAgICAgICAgICk7DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBnQlMtPlVuaW5z dGFsbE11bHRpcGxlUHJvdG9jb2xJbnRlcmZhY2VzICgNCj4gKyAgICAgICAgICAgICAgICAgICAg Q2hpbGRIYW5kbGVCdWZmZXJbSW5kZXhdLA0KPiArICAgICAgICAgICAgICAgICAgICAmZ0VmaU5l dHdvcmtJbnRlcmZhY2VJZGVudGlmaWVyUHJvdG9jb2xHdWlkXzMxLA0KPiArICAgICAgICAgICAg ICAgICAgICAmTmljRGV2aWNlLT5OaWlQcm90b2NvbCwNCj4gKyAgICAgICAgICAgICAgICAgICAg JmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgICBOaWNE ZXZpY2UtPkRldlBhdGgsDQo+ICsgICAgICAgICAgICAgICAgICAgIE5VTEwNCj4gKyAgICAgICAg ICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAg ICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAg Q29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAmZ0Vka0lJVXNiRXRo UHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZVc2JFdGgs DQo+ICsgICAgICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4g KyAgICAgICAgICAgICAgICAgICAgICBDaGlsZEhhbmRsZUJ1ZmZlcltJbmRleF0sDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgRUZJX09QRU5fUFJPVE9DT0xfQllfQ0hJTERfQ09OVFJPTExFUg0K PiArICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgIEZy ZWVQb29sIChOaWNEZXZpY2UtPkRldlBhdGgpOw0KPiArICAgICAgRnJlZVBvb2wgKE5pY0Rldmlj ZSk7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYgKCFBbGxDaGlsZHJlblN0b3BwZWQp IHsNCj4gKyAgICByZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsNCj4gKyAgfQ0KPiArDQo+ICsgIHJl dHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBFbnRyeXBvaW50IG9mIE5ldHdv cmsgQ29tbW9uIERyaXZlci4NCj4gKw0KPiArICBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBlbnRyeXBv aW50IG9mIE5ldHdvcmsgQ29tbW9uIERyaXZlci4gSXQgaW5zdGFsbHMgRHJpdmVyDQo+IEJpbmRp bmcNCj4gKyAgUHJvdG9jb2xzIHRvZ2V0aGVyIHdpdGggQ29tcG9uZW50IE5hbWUgUHJvdG9jb2xz Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIEltYWdlSGFuZGxlICAgICAgIFRoZSBmaXJtd2FyZSBh bGxvY2F0ZWQgaGFuZGxlIGZvciB0aGUgRUZJDQo+IGltYWdlLg0KPiArICBAcGFyYW1baW5dICBT eXN0ZW1UYWJsZSAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSSBTeXN0ZW0gVGFibGUuDQo+ICsN Cj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIGVudHJ5IHBvaW50IGlzIGV4 ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklB UEkNCj4gK05ldHdvcmtDb21tb25FbnRyeSAoDQo+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgIElt YWdlSGFuZGxlLA0KPiArICBJTiBFRklfU1lTVEVNX1RBQkxFICAqU3lzdGVtVGFibGUNCj4gKyAg KQ0KPiArew0KPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ICsNCj4gKyAgZ05ldHdvcmtDb21t b25Ecml2ZXJCaW5kaW5nLkRyaXZlckJpbmRpbmdIYW5kbGUgPSBJbWFnZUhhbmRsZTsNCj4gKyAg Z05ldHdvcmtDb21tb25Ecml2ZXJCaW5kaW5nLkltYWdlSGFuZGxlICAgICAgICAgPSBJbWFnZUhh bmRsZTsNCj4gKyAgZ1JhdGVMaW1pdGluZ0VuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgPSBQY2RHZXRCb29sDQo+IChQY2RFbmFibGVVc2JOZXR3b3JrUmF0ZUxpbWl0aW5nKTsNCj4g KyAgZ1JhdGVMaW1pdGluZ0NyZWRpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBQY2RH ZXQzMg0KPiAoUGNkVXNiTmV0d29ya1JhdGVMaW1pdGluZ0NyZWRpdCk7DQo+ICsgIGdSYXRlTGlt aXRpbmdQb2xsVGltZXIgICAgICAgICAgICAgICAgICAgICAgICAgID0gUGNkR2V0MzINCj4gKFBj ZFVzYk5ldHdvcmtSYXRlTGltaXRpbmdGYWN0b3IpOw0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+ SW5zdGFsbE11bHRpcGxlUHJvdG9jb2xJbnRlcmZhY2VzICgNCj4gKyAgICAgICAgICAgICAgICAg ICZnTmV0d29ya0NvbW1vbkRyaXZlckJpbmRpbmcuRHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAg ICAgICAgICAgICAgICAgICZnRWZpRHJpdmVyQmluZGluZ1Byb3RvY29sR3VpZCwNCj4gKyAgICAg ICAgICAgICAgICAgICZnTmV0d29ya0NvbW1vbkRyaXZlckJpbmRpbmcsDQo+ICsgICAgICAgICAg ICAgICAgICAmZ0VmaUNvbXBvbmVudE5hbWUyUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAg ICAgICAgJmdOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZTIsDQo+ICsgICAgICAgICAgICAgICAg ICBOVUxMDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiAr fQ0KPiBkaWZmIC0tZ2l0DQo+IGEvTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9OZXR3 b3JrQ29tbW9uL0RyaXZlckJpbmRpbmcuaA0KPiBiL01kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5l dHdvcmsvTmV0d29ya0NvbW1vbi9Ecml2ZXJCaW5kaW5nLmgNCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCj4gaW5kZXggMDAwMDAwMDAwMC4uYTgwNTgzNGE3OA0KPiAtLS0gL2Rldi9udWxsDQo+ICsr Kw0KPiBiL01kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvTmV0d29ya0NvbW1vbi9Ecml2 ZXJCaW5kaW5nLmgNCj4gQEAgLTAsMCArMSwyNjYgQEANCj4gKy8qKiBAZmlsZQ0KPiArICBIZWFk ZXIgZmlsZSBmb3IgZm9yIFVTQiBuZXR3b3JrIGNvbW1vbiBkcml2ZXINCj4gKw0KPiArICBDb3B5 cmlnaHQgKGMpIDIwMjMsIEFtZXJpY2FuIE1lZ2F0cmVuZHMgSW50ZXJuYXRpb25hbCBMTEMuIEFs bCByaWdodHMNCj4gcmVzZXJ2ZWQuPEJSPg0KPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog QlNELTItQ2xhdXNlLVBhdGVudA0KPiArKiovDQo+ICsNCj4gKyNpZm5kZWYgX0RSSVZFUl9CSU5E SU5HX0hfDQo+ICsjZGVmaW5lIF9EUklWRVJfQklORElOR19IXw0KPiArDQo+ICsjaW5jbHVkZSA8 TGlicmFyeS9VZWZpRHJpdmVyRW50cnlQb2ludC5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvVWVm aUJvb3RTZXJ2aWNlc1RhYmxlTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpTGliLmg+ DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9EZXZpY2VQYXRoTGliLmg+DQo+ICsjaW5jbHVkZSA8TGli cmFyeS9EZWJ1Z0xpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxp Yi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvUGNkTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFy eS9CYXNlTWVtb3J5TGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpVXNiTGliLmg+DQo+ ICsjaW5jbHVkZSA8UHJvdG9jb2wvVXNiSW8uaD4NCj4gKyNpbmNsdWRlIDxQcm90b2NvbC9OZXR3 b3JrSW50ZXJmYWNlSWRlbnRpZmllci5oPg0KPiArI2luY2x1ZGUgPFByb3RvY29sL1VzYkV0aGVy bmV0UHJvdG9jb2wuaD4NCj4gKw0KPiArI2RlZmluZSBORVRXT1JLX0NPTU1PTl9EUklWRVJfVkVS U0lPTiAgICAxDQo+ICsjZGVmaW5lIE5FVFdPUktfQ09NTU9OX1BPTExJTkdfSU5URVJWQUwgIDB4 MTANCj4gKyNkZWZpbmUgUlhfQlVGRkVSX0NPVU5UICAgICAgICAgICAgICAgICAgMzINCj4gKyNk ZWZpbmUgVFhfQlVGRkVSX0NPVU5UICAgICAgICAgICAgICAgICAgMzINCj4gKyNkZWZpbmUgTUVN T1JZX1JFUVVJUkUgICAgICAgICAgICAgICAgICAgMA0KPiArDQo+ICsjZGVmaW5lIFVORElfREVW X1NJR05BVFVSRSAgU0lHTkFUVVJFXzMyKCd1JywnbicsJ2QnLCdpJykNCj4gKyNkZWZpbmUgVU5E SV9ERVZfRlJPTV9USElTKGEpICBDUihhLCBOSUNfREVWSUNFLCBOaWlQcm90b2NvbCwNCj4gVU5E SV9ERVZfU0lHTkFUVVJFKQ0KPiArI2RlZmluZSBVTkRJX0RFVl9GUk9NX05JQyhhKSAgIENSKGEs IE5JQ19ERVZJQ0UsIE5pY0luZm8sDQo+IFVORElfREVWX1NJR05BVFVSRSkNCj4gKw0KPiArI3By YWdtYSBwYWNrKDEpDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQ4ICAgICBEZXN0QWRk cltQWEVfSFdBRERSX0xFTl9FVEhFUl07DQo+ICsgIFVJTlQ4ICAgICBTcmNBZGRyW1BYRV9IV0FE RFJfTEVOX0VUSEVSXTsNCj4gKyAgVUlOVDE2ICAgIFByb3RvY29sOw0KPiArfSBFdGhlcm5ldEhl YWRlcjsNCj4gKyNwcmFnbWEgcGFjaygpDQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2lnbmF0dXJlOw0K PiArICBFRklfTkVUV09SS19JTlRFUkZBQ0VfSURFTlRJRklFUl9QUk9UT0NPTCAgICBOaWlQcm90 b2NvbDsNCj4gKyAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RGV2aWNlSGFuZGxlOw0KPiArICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICAgICAgICAg ICAgICAgICAqQmFzZURldlBhdGg7DQo+ICsgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAg ICAgICAgICAgICAgICAgICpEZXZQYXRoOw0KPiArICBOSUNfREFUQSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBOaWNJbmZvOw0KPiArICBWT0lEICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqUmVjZWl2ZUJ1ZmZlcjsNCj4gK30gTklDX0RFVklDRTsN Cj4gKw0KPiArdHlwZWRlZiBWT0lEICgqQVBJX0ZVTkMpKA0KPiArICBQWEVfQ0RCICosDQo+ICsg IE5JQ19EQVRBICoNCj4gKyAgKTsNCj4gKw0KPiArZXh0ZXJuIFBYRV9TV19VTkRJICAgICAgICAg ICAgICAgICAgICpnUHhlOw0KPiArZXh0ZXJuIE5JQ19ERVZJQ0UgICAgICAgICAgICAgICAgICAg ICpnTGFuRGV2aWNlTGlzdFtNQVhfTEFOX0lOVEVSRkFDRV07DQo+ICtleHRlcm4gRUZJX0NPTVBP TkVOVF9OQU1FMl9QUk9UT0NPTA0KPiBnTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWUyOw0KPiAr DQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK05ldHdvcmtDb21tb25TdXBwb3J0ZWQgKA0K PiArICBJTiBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBFRklf SEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgIElOIEVGSV9E RVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgKlJlbWFpbmluZ0RldmljZVBhdGgNCj4gKyAgKTsNCj4g Kw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtOZXR3b3JrQ29tbW9uRHJpdmVyU3RhcnQg KA0KPiArICBJTiBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBF RklfSEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgIElOIEVG SV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgKlJlbWFpbmluZ0RldmljZVBhdGgNCj4gKyAgKTsN Cj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtOZXR3b3JrQ29tbW9uRHJpdmVyU3Rv cCAoDQo+ICsgIElOICBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJ TiAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICBJ TiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZkNoaWxkcmVuLA0KPiArICBJ TiAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAqQ2hpbGRIYW5kbGVCdWZmZXINCj4gKyAg KTsNCj4gKw0KPiArVk9JRA0KPiArUHhlU3RydWN0SW5pdCAoDQo+ICsgIE9VVCBQWEVfU1dfVU5E SSAgKlB4ZVN3DQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1VwZGF0ZU5pY051bSAoDQo+ICsg IElOICAgICAgTklDX0RBVEEgICAgICpOaWMsDQo+ICsgIElOIE9VVCAgUFhFX1NXX1VOREkgICpQ eGVTdw0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1VuZGlBcGlF bnRyeSAoDQo+ICsgIElOICBVSU5UNjQgIENkYg0KPiArICApOw0KPiArDQo+ICtVSU5UTg0KPiAr TWFwSXQgKA0KPiArICBJTiBOSUNfREFUQSAgKk5pYywNCj4gKyAgSU4gVUlOVDY0ICAgIE1lbUFk ZHIsDQo+ICsgIElOIFVJTlQzMiAgICBTaXplLA0KPiArICBJTiBVSU5UMzIgICAgRGlyZWN0aW9u LA0KPiArICBPVVQgVUlOVDY0ICAgTWFwcGVkQWRkcg0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ ICtVbk1hcEl0ICgNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMsDQo+ICsgIElOIFVJTlQ2NCAgICBN ZW1BZGRyLA0KPiArICBJTiBVSU5UMzIgICAgU2l6ZSwNCj4gKyAgSU4gVUlOVDMyICAgIERpcmVj dGlvbiwNCj4gKyAgSU4gVUlOVDY0ICAgIE1hcHBlZEFkZHINCj4gKyAgKTsNCj4gKw0KPiArVk9J RA0KPiArVW5kaUdldFN0YXRlICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAg TklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiArVW5kaVN0YXJ0ICgNCj4g KyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKTsN Cj4gKw0KPiArVk9JRA0KPiArVW5kaVN0b3AgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtVbmRpR2V0 SW5pdEluZm8gKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAg Kk5pYw0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtVbmRpR2V0Q29uZmlnSW5mbyAoDQo+ICsg IElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ ICsNCj4gK1ZPSUQNCj4gK1VuZGlJbml0aWFsaXplICgNCj4gKyAgSU4gICAgICBQWEVfQ0RCICAg KkNkYiwNCj4gKyAgSU4gT1VUICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtWT0lE DQo+ICtVbmRpUmVzZXQgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNf REFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtVbmRpU2h1dGRvd24gKA0KPiAr ICBJTiAgICAgIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiBPVVQgIE5JQ19EQVRBICAqTmljDQo+ ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1VuZGlJbnRlcnJ1cHRFbmFibGUgKA0KPiArICBJTiAg UFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ ICtWT0lEDQo+ICtVbmRpUmVjZWl2ZUZpbHRlciAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwN Cj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1VuZGlT dGF0aW9uQWRkcmVzcyAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19E QVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1VuZGlTdGF0aXN0aWNzICgNCj4g KyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKTsN Cj4gKw0KPiArVk9JRA0KPiArVW5kaU1jYXN0SXAyTWFjICgNCj4gKyAgSU4gT1VUICBQWEVfQ0RC ICAgKkNkYiwNCj4gKyAgSU4gICAgICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtW T0lEDQo+ICtVbmRpTnZEYXRhICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAg TklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiArVW5kaUdldFN0YXR1cyAo DQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsg ICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1VuZGlGaWxsSGVhZGVyICgNCj4gKyAgSU4gIFBYRV9DREIg ICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0K PiArVW5kaVRyYW5zbWl0ICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklD X0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiArVW5kaVJlY2VpdmUgKA0KPiAr ICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0K PiArDQo+ICtVSU5UMTYNCj4gK0luaXRpYWxpemUgKA0KPiArICBJTiAgICAgIFBYRV9DREIgICAq Q2RiLA0KPiArICBJTiBPVVQgIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK1VJTlQx Ng0KPiArVHJhbnNtaXQgKA0KPiArICBJTiAgICAgIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiBP VVQgIE5JQ19EQVRBICAqTmljLA0KPiArICBJTiAgICAgIFVJTlQ2NCAgICBDcGJBZGRyLA0KPiAr ICBJTiAgICAgIFVJTlQxNiAgICBPcEZsYWdzDQo+ICsgICk7DQo+ICsNCj4gK1VJTlQxNg0KPiAr UmVjZWl2ZSAoDQo+ICsgIElOIFBYRV9DREIgICAgICAgKkNkYiwNCj4gKyAgSU4gT1VUIE5JQ19E QVRBICAqTmljLA0KPiArICBJTiBVSU5UNjQgICAgICAgIENwYkFkZHIsDQo+ICsgIElOIE9VVCBV SU5UNjQgICAgRGJBZGRyDQo+ICsgICk7DQo+ICsNCj4gK1VJTlQxNg0KPiArU2V0RmlsdGVyICgN Cj4gKyAgSU4gIE5JQ19EQVRBICAqTmljLA0KPiArICBJTiAgVUlOVDE2ICAgIFNldEZpbHRlciwN Cj4gKyAgSU4gIFVJTlQ2NCAgICBDcGJBZGRyLA0KPiArICBJTiAgVUlOVDMyICAgIENwYlNpemUN Cj4gKyAgKTsNCj4gKw0KPiArVUlOVDE2DQo+ICtTdGF0aXN0aWNzICgNCj4gKyAgSU4gTklDX0RB VEEgICpOaWMsDQo+ICsgIElOIFVJTlQ2NCAgICBEYkFkZHIsDQo+ICsgIElOIFVJTlQxNiAgICBE YlNpemUNCj4gKyAgKTsNCj4gKw0KPiArI2VuZGlmDQo+IGRpZmYgLS1naXQNCj4gYS9NZGVNb2R1 bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL05ldHdvcmtDb21tb24vTmV0d29ya0NvbW0NCj4gb24u aW5mDQo+IGIvTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9OZXR3b3JrQ29tbW9uL05l dHdvcmtDb21tDQo+IG9uLmluZg0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAw MDAwMDAwLi5mOWNhMzFmZTgwDQo+IC0tLSAvZGV2L251bGwNCj4gKysrDQo+IGIvTWRlTW9kdWxl UGtnL0J1cy9Vc2IvVXNiTmV0d29yay9OZXR3b3JrQ29tbW9uL05ldHdvcmtDb21tDQo+IG9uLmlu Zg0KPiBAQCAtMCwwICsxLDQ4IEBADQo+ICsjIyBAZmlsZQ0KPiArIyAgIFRoaXMgaXMgVXNiIE5l dHdvcmsgQ29tbW9uIGRyaXZlciBmb3IgRFhFIHBoYXNlLg0KPiArIw0KPiArIyBDb3B5cmlnaHQg KGMpIDIwMjMsIEFtZXJpY2FuIE1lZ2F0cmVuZHMgSW50ZXJuYXRpb25hbCBMTEMuIEFsbCByaWdo dHMNCj4gcmVzZXJ2ZWQuPEJSPg0KPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTIt Q2xhdXNlLVBhdGVudA0KPiArIyMNCj4gKw0KPiArW0RlZmluZXNdDQo+ICsgIElORl9WRVJTSU9O ICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMTAwMDUNCj4gKyAgQkFTRV9OQU1FICAgICAgICAg ICAgICAgICAgICAgID0gTmV0d29ya0NvbW1vbg0KPiArICBGSUxFX0dVSUQgICAgICAgICAgICAg ICAgICAgICAgPSBjYTZlYjRmNC1mMWQ2LTQzNzUtOTdkNi0xODg1Njg3MWUxYmYNCj4gKyAgTU9E VUxFX1RZUEUgICAgICAgICAgICAgICAgICAgID0gRFhFX0RSSVZFUg0KPiArICBWRVJTSU9OX1NU UklORyAgICAgICAgICAgICAgICAgPSAxLjANCj4gKyAgRU5UUllfUE9JTlQgICAgICAgICAgICAg ICAgICAgID0gTmV0d29ya0NvbW1vbkVudHJ5DQo+ICsNCj4gK1tTb3VyY2VzXQ0KPiArICBEcml2 ZXJCaW5kaW5nLmMNCj4gKyAgRHJpdmVyQmluZGluZy5oDQo+ICsgIENvbXBvbmVudE5hbWUuYw0K PiArICBQeGVGdW5jdGlvbi5jDQo+ICsNCj4gK1tQYWNrYWdlc10NCj4gKyAgTWRlUGtnL01kZVBr Zy5kZWMNCj4gKyAgTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kZWMNCj4gKw0KPiArW0xpYnJh cnlDbGFzc2VzXQ0KPiArICBVZWZpRHJpdmVyRW50cnlQb2ludA0KPiArICBVZWZpQm9vdFNlcnZp Y2VzVGFibGVMaWINCj4gKyAgVWVmaUxpYg0KPiArICBEZWJ1Z0xpYg0KPiArICBVZWZpVXNiTGli DQo+ICsgIE1lbW9yeUFsbG9jYXRpb25MaWINCj4gKyAgQmFzZU1lbW9yeUxpYg0KPiArDQo+ICtb UHJvdG9jb2xzXQ0KPiArICBnRWZpTmV0d29ya0ludGVyZmFjZUlkZW50aWZpZXJQcm90b2NvbEd1 aWRfMzENCj4gKyAgZ0VmaVVzYklvUHJvdG9jb2xHdWlkDQo+ICsgIGdFZmlEZXZpY2VQYXRoUHJv dG9jb2xHdWlkDQo+ICsgIGdFZmlEcml2ZXJCaW5kaW5nUHJvdG9jb2xHdWlkDQo+ICsgIGdFZGtJ SVVzYkV0aFByb3RvY29sR3VpZA0KPiArDQo+ICtbUGNkXQ0KPiArICBnRWZpTWRlTW9kdWxlUGtn VG9rZW5TcGFjZUd1aWQuUGNkRW5hYmxlVXNiTmV0d29ya1JhdGVMaW1pdGluZw0KPiArICBnRWZp TWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkVXNiTmV0d29ya1JhdGVMaW1pdGluZ0NyZWRp dA0KPiArICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkVXNiTmV0d29ya1JhdGVM aW1pdGluZ0ZhY3Rvcg0KPiArDQo+ICtbRGVwZXhdDQo+ICsgIFRSVUUNCj4gZGlmZiAtLWdpdA0K PiBhL01kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvTmV0d29ya0NvbW1vbi9QeGVGdW5j dGlvbi5jDQo+IGIvTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9OZXR3b3JrQ29tbW9u L1B4ZUZ1bmN0aW9uLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAw MC4uNjg3Y2FiY2E0Yw0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKw0KPiBiL01kZU1vZHVsZVBrZy9C dXMvVXNiL1VzYk5ldHdvcmsvTmV0d29ya0NvbW1vbi9QeGVGdW5jdGlvbi5jDQo+IEBAIC0wLDAg KzEsMTgwMyBAQA0KPiArLyoqIEBmaWxlDQo+ICsgIFRoaXMgZmlsZSBjb250YWlucyBjb2RlIGZv ciBVTkRJIGNvbW1hbmQgYmFzZWQgb24gVUVGSSBzcGVjaWZpY2F0aW9uLg0KPiArDQo+ICsgIENv cHlyaWdodCAoYykgMjAyMywgQW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExMQy4g QWxsIHJpZ2h0cw0KPiByZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsqKi8NCj4gKw0KPiArI2luY2x1ZGUgIkRyaXZlckJp bmRpbmcuaCINCj4gKw0KPiArLy8gQVBJIHRhYmxlLCBkZWZpbmVkIGluIFVFRkkgc3BlY2lmaWNh dGlvbg0KPiArQVBJX0ZVTkMgIGdVbmRpQXBpVGFibGVbXSA9IHsNCj4gKyAgVW5kaUdldFN0YXRl LA0KPiArICBVbmRpU3RhcnQsDQo+ICsgIFVuZGlTdG9wLA0KPiArICBVbmRpR2V0SW5pdEluZm8s DQo+ICsgIFVuZGlHZXRDb25maWdJbmZvLA0KPiArICBVbmRpSW5pdGlhbGl6ZSwNCj4gKyAgVW5k aVJlc2V0LA0KPiArICBVbmRpU2h1dGRvd24sDQo+ICsgIFVuZGlJbnRlcnJ1cHRFbmFibGUsDQo+ ICsgIFVuZGlSZWNlaXZlRmlsdGVyLA0KPiArICBVbmRpU3RhdGlvbkFkZHJlc3MsDQo+ICsgIFVu ZGlTdGF0aXN0aWNzLA0KPiArICBVbmRpTWNhc3RJcDJNYWMsDQo+ICsgIFVuZGlOdkRhdGEsDQo+ ICsgIFVuZGlHZXRTdGF0dXMsDQo+ICsgIFVuZGlGaWxsSGVhZGVyLA0KPiArICBVbmRpVHJhbnNt aXQsDQo+ICsgIFVuZGlSZWNlaXZlDQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAgIENhbGxiYWNr IGZ1bmN0aW9uIGZvciBlbmFibGUgUmF0ZSBMaW1pdGVyDQo+ICsNCj4gKyAgIEBwYXJhbVtpbl0g RXZlbnQgICAgICAgICAgIEV2ZW50IHdob3NlIG5vdGlmaWNhdGlvbiBmdW5jdGlvbiBpcyBiZWlu Zw0KPiBpbnZva2VkDQo+ICsgICBAcGFyYW1baW5dIENvbnRleHQgICAgICAgICBQb2ludGVyIHRv IHRoZSBub3RpZmljYXRpb24gZnVuY3Rpb24ncyBjb250ZXh0DQo+ICsNCj4gKyoqLw0KPiArVk9J RA0KPiArRUZJQVBJDQo+ICtVbmRpUmF0ZUxpbWl0ZXJDYWxsYmFjayAoDQo+ICsgIElOICBFRklf RVZFTlQgIEV2ZW50LA0KPiArICBJTiAgVk9JRCAgICAgICAqQ29udGV4dA0KPiArICApDQo+ICt7 DQo+ICsgIE5JQ19EQVRBICAqTmljID0gQ29udGV4dDsNCj4gKw0KPiArICBpZiAoTmljLT5SYXRl TGltaXRpbmdDcmVkaXRDb3VudCA8IE5pYy0+UmF0ZUxpbWl0aW5nQ3JlZGl0KSB7DQo+ICsgICAg TmljLT5SYXRlTGltaXRpbmdDcmVkaXRDb3VudCsrOw0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIG9wZXJhdGlvbmFs IHN0YXRlIG9mIHRoZSBVTkRJLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVy IHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAg QSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsN Cj4gKyoqLw0KPiArVk9JRA0KPiArVW5kaUdldFN0YXRlICgNCj4gKyAgSU4gIFBYRV9DREIgICAq Q2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RB VFVTICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RFX0dF VF9TVEFURSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9JTklU SUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdzICE9IFBYRV9TVEFURkxBR1NfSU5J VElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUt PklGY250RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENkYi0+Q1BCc2l6ZSAhPSBQWEVfQ1BCU0la RV9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkNQQmFkZHIgIT0gUFhFX0NQQkFERFJfTk9U X1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5EQnNpemUgIT0gUFhFX0RCU0laRV9OT1RfVVNFRCkg fHwNCj4gKyAgICAgIChDZGItPkRCYWRkciAhPSBQWEVfREJBRERSX05PVF9VU0VEKSB8fA0KPiAr ICAgICAgKENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19OT1RfVVNFRCkpDQo+ICsgIHsNCj4g KyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsg ICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgcmV0 dXJuOw0KPiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFH U19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RF X1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBDZGItPlN0YXRGbGFncyA9IENkYi0+U3RhdEZs YWdzIHwgTmljLT5TdGF0ZTsNCj4gKw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGku VXNiRXRoVW5kaUdldFN0YXRlICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0 aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpR2V0U3RhdGUgKENkYiwgTmljKTsNCj4gKyAgICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFU RkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBjaGFuZ2UgdGhlIFVOREkgb3BlcmF0aW9u YWwgc3RhdGUgZnJvbSBzdG9wcGVkDQo+IHRvIHN0YXJ0ZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2lu XSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAg QHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRy b2xsZXIgZGF0YS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtVbmRpU3RhcnQgKA0KPiArICBJ TiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7 DQo+ICsgIFBYRV9DUEJfU1RBUlRfMzEgICpDcGI7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgIFN0 YXR1czsNCj4gKyAgQk9PTEVBTiAgICAgICAgICAgRXZlbnRFcnJvcjsNCj4gKw0KPiArICBpZiAo KENkYi0+T3BDb2RlICE9IFBYRV9PUENPREVfU1RBUlQpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0 Q29kZSAhPSBQWEVfU1RBVENPREVfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRG bGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51 bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChD ZGItPkNQQnNpemUgIT0gc2l6ZW9mIChQWEVfQ1BCX1NUQVJUXzMxKSkgfHwNCj4gKyAgICAgIChD ZGItPkRCc2l6ZSAhPSBQWEVfREJTSVpFX05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+REJh ZGRyICE9IFBYRV9EQkFERFJfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5PcEZsYWdzICE9 IFBYRV9PUEZMQUdTX05PVF9VU0VEKSkNCj4gKyAgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0g UFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBY RV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiAr ICBpZiAoTmljLT5TdGF0ZSAhPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9TVE9QUEVEKSB7DQo+ ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiAr ICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0FMUkVBRFlfU1RBUlRFRDsNCj4gKyAg ICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBDcGIgPSAoUFhFX0NQQl9TVEFSVF8zMSAqKShV SU5UTilDZGItPkNQQmFkZHI7DQo+ICsNCj4gKyAgTmljLT5QeGVTdGFydC5EZWxheSAgICAgPSBD cGItPkRlbGF5Ow0KPiArICBOaWMtPlB4ZVN0YXJ0LlZpcnQyUGh5cyA9IENwYi0+VmlydDJQaHlz Ow0KPiArICBOaWMtPlB4ZVN0YXJ0LkJsb2NrICAgICA9IENwYi0+QmxvY2s7DQo+ICsgIE5pYy0+ UHhlU3RhcnQuTWFwX01lbSAgID0gMDsNCj4gKyAgTmljLT5QeGVTdGFydC5Vbk1hcF9NZW0gPSAw Ow0KPiArICBOaWMtPlB4ZVN0YXJ0LlN5bmNfTWVtICA9IENwYi0+U3luY19NZW07DQo+ICsgIE5p Yy0+UHhlU3RhcnQuVW5pcXVlX0lEID0gQ3BiLT5VbmlxdWVfSUQ7DQo+ICsgIEV2ZW50RXJyb3Ig ICAgICAgICAgICAgID0gRkFMU0U7DQo+ICsgIFN0YXR1cyAgICAgICAgICAgICAgICAgID0gRUZJ X1NVQ0NFU1M7DQo+ICsgIGlmIChOaWMtPlJhdGVMaW1pdGluZ0VuYWJsZSA9PSBUUlVFKSB7DQo+ ICsgICAgU3RhdHVzID0gZ0JTLT5DcmVhdGVFdmVudCAoDQo+ICsgICAgICAgICAgICAgICAgICAg IEVWVF9USU1FUiB8IEVWVF9OT1RJRllfU0lHTkFMLA0KPiArICAgICAgICAgICAgICAgICAgICBU UExfTk9USUZZLA0KPiArICAgICAgICAgICAgICAgICAgICBVbmRpUmF0ZUxpbWl0ZXJDYWxsYmFj aywNCj4gKyAgICAgICAgICAgICAgICAgICAgTmljLA0KPiArICAgICAgICAgICAgICAgICAgICAm TmljLT5SYXRlTGltaXRlcg0KPiArICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlmICgh RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBTdGF0dXMgPSBnQlMtPlNldFRpbWVyICgN Cj4gKyAgICAgICAgICAgICAgICAgICAgICBOaWMtPlJhdGVMaW1pdGVyLA0KPiArICAgICAgICAg ICAgICAgICAgICAgIFRpbWVyUGVyaW9kaWMsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgTmlj LT5SYXRlTGltaXRpbmdQb2xsVGltZXIgKiAxMDAwMA0KPiArICAgICAgICAgICAgICAgICAgICAg ICk7DQo+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICAgIEV2ZW50 RXJyb3IgPSBUUlVFOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGlm ICgoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVN0YXJ0ICE9IE5VTEwpICYmIChF dmVudEVycm9yDQo+ID09IEZBTFNFKSkgew0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5V c2JFdGhVbmRpLlVzYkV0aFVuZGlTdGFydCAoQ2RiLCBOaWMpOw0KPiArICB9DQo+ICsNCj4gKyAg aWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAvLyBJbml0aWFsIHRoZSBzdGF0ZSBm b3IgVU5ESSBzdGFydC4NCj4gKyAgICBOaWMtPlN0YXRlICAgICA9IFBYRV9TVEFURkxBR1NfR0VU X1NUQVRFX1NUQVJURUQ7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NP TU1BTkRfQ09NUExFVEU7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VD Q0VTUzsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBpZiAoTmljLT5SYXRlTGltaXRpbmdFbmFibGUg PT0gVFJVRSkgew0KPiArICAgICAgaWYgKCFFdmVudEVycm9yKSB7DQo+ICsgICAgICAgIGdCUy0+ U2V0VGltZXIgKCZOaWMtPlJhdGVMaW1pdGVyLCBUaW1lckNhbmNlbCwgMCk7DQo+ICsgICAgICB9 DQo+ICsNCj4gKyAgICAgIGlmIChOaWMtPlJhdGVMaW1pdGVyKSB7DQo+ICsgICAgICAgIGdCUy0+ Q2xvc2VFdmVudCAoJk5pYy0+UmF0ZUxpbWl0ZXIpOw0KPiArICAgICAgICBOaWMtPlJhdGVMaW1p dGVyID0gMDsNCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsNCj4gKyAgICAvLyBJbml0aWFsIHRo ZSBzdGF0ZSB3aGVuIFVOREkgc3RhcnQgaXMgZmFpbA0KPiArICAgIENkYi0+U3RhdEZsYWdzID0g UFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBY RV9TVEFUQ09ERV9ERVZJQ0VfRkFJTFVSRTsNCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4g KyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gY2hhbmdlIHRoZSBVTkRJIG9wZXJhdGlvbmFsIHN0 YXRlIGZyb20gc3RhcnRlZA0KPiB0byBzdG9wcGVkLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENk YiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJh bVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVy IGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArVW5kaVN0b3AgKA0KPiArICBJTiAgUFhF X0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsg IEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gKw0KPiArICBpZiAoKENkYi0+T3BDb2RlICE9IFBYRV9P UENPREVfU1RPUCkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9J TklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdzICE9IFBYRV9TVEFURkxBR1Nf SU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQ eGUtPklGY250RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENkYi0+Q1BCc2l6ZSAhPSBQWEVfQ1BC U0laRV9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkNQQmFkZHIgIT0gUFhFX0NQQkFERFJf Tk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5EQnNpemUgIT0gUFhFX0RCU0laRV9OT1RfVVNF RCkgfHwNCj4gKyAgICAgIChDZGItPkRCYWRkciAhPSBQWEVfREJBRERSX05PVF9VU0VEKSB8fA0K PiArICAgICAgKENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19OT1RfVVNFRCkpDQo+ICsgIHsN Cj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAg cmV0dXJuOw0KPiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRG TEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRD T0RFX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5TdGF0ZSA9PSBQWEVfU1RB VEZMQUdTX0dFVF9TVEFURV9TVE9QUEVEKSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVf U1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NU QVRDT0RFX05PVF9TVEFSVEVEOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlm IChOaWMtPlN0YXRlID09IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX0lOSVRJQUxJWkVEKSB7DQo+ ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiAr ICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX05PVF9TSFVURE9XTjsNCj4gKyAgICBy ZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBOaWMtPlB4ZVN0YXJ0LkRlbGF5ICAgICA9IDA7DQo+ ICsgIE5pYy0+UHhlU3RhcnQuVmlydDJQaHlzID0gMDsNCj4gKyAgTmljLT5QeGVTdGFydC5CbG9j ayAgICAgPSAwOw0KPiArICBOaWMtPlB4ZVN0YXJ0Lk1hcF9NZW0gICA9IDA7DQo+ICsgIE5pYy0+ UHhlU3RhcnQuVW5NYXBfTWVtID0gMDsNCj4gKyAgTmljLT5QeGVTdGFydC5TeW5jX01lbSAgPSAw Ow0KPiArICBOaWMtPlN0YXRlICAgICAgICAgICAgICA9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRF X1NUT1BQRUQ7DQo+ICsNCj4gKyAgaWYgKE5pYy0+UmF0ZUxpbWl0aW5nRW5hYmxlID09IFRSVUUp IHsNCj4gKyAgICBnQlMtPlNldFRpbWVyICgmTmljLT5SYXRlTGltaXRlciwgVGltZXJDYW5jZWws IDApOw0KPiArICAgIGdCUy0+Q2xvc2VFdmVudCAoJk5pYy0+UmF0ZUxpbWl0ZXIpOw0KPiArICB9 DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlTdG9wICE9 IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhV bmRpU3RvcCAoQ2RiLCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g KyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4g KyAgICB9DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1 c2VkIHRvIHJldHJpZXZlIGluaXRpYWxpemF0aW9uIGluZm9ybWF0aW9uIHRoYXQgaXMNCj4gKyAg bmVlZGVkIGJ5IGRyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucyB0byBpbml0aWFsaXplZCBVTkRJLg0K PiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2Ny aXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3 b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiAr VW5kaUdldEluaXRJbmZvICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklD X0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBQWEVfREJfR0VUX0lOSVRfSU5GTyAgKkRi Ow0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgU3RhdHVzOw0KPiArDQo+ICsgIGlmICgoQ2Ri LT5PcENvZGUgIT0gUFhFX09QQ09ERV9HRVRfSU5JVF9JTkZPKSB8fA0KPiArICAgICAgKENkYi0+ U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5T dGF0RmxhZ3MgIT0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+ SUZudW0gPj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkpIHx8DQo+ICsgICAg ICAoQ2RiLT5DUEJzaXplICE9IFBYRV9DUEJTSVpFX05PVF9VU0VEKSB8fA0KPiArICAgICAgKENk Yi0+Q1BCYWRkciAhPSBQWEVfQ1BCQUREUl9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkRC c2l6ZSAhPSBzaXplb2YgKFBYRV9EQl9HRVRfSU5JVF9JTkZPKSkgfHwNCj4gKyAgICAgIChDZGIt Pk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfTk9UX1VTRUQpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5T dGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3Rh dENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAg fSBlbHNlIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9D T01QTEVURTsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0K PiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+U3RhdGUgPT0gUFhFX1NUQVRGTEFHU19HRVRfU1RB VEVfU1RPUFBFRCkgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01N QU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfU1RB UlRFRDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBEYiA9IChQWEVfREJfR0VU X0lOSVRfSU5GTyAqKShVSU5UTilDZGItPkRCYWRkcjsNCj4gKw0KPiArICBEYi0+TWVtb3J5UmVx dWlyZWQgICAgICAgICA9IE1FTU9SWV9SRVFVSVJFOw0KPiArICBEYi0+RnJhbWVEYXRhTGVuICAg ICAgICAgICA9IFBYRV9NQVhfVFhSWF9VTklUX0VUSEVSOw0KPiArICBEYi0+TGlua1NwZWVkc1sw XSAgICAgICAgICA9IDEwOw0KPiArICBEYi0+TGlua1NwZWVkc1sxXSAgICAgICAgICA9IDEwMDsN Cj4gKyAgRGItPkxpbmtTcGVlZHNbMl0gICAgICAgICAgPSAxMDAwOw0KPiArICBEYi0+TGlua1Nw ZWVkc1szXSAgICAgICAgICA9IDA7DQo+ICsgIERiLT5NZWRpYUhlYWRlckxlbiAgICAgICAgID0g UFhFX01BQ19IRUFERVJfTEVOX0VUSEVSOw0KPiArICBEYi0+SFdhZGRyTGVuICAgICAgICAgICAg ICA9IFBYRV9IV0FERFJfTEVOX0VUSEVSOw0KPiArICBEYi0+TUNhc3RGaWx0ZXJDbnQgICAgICAg ICA9IE1BWF9NQ0FTVF9BRERSRVNTX0NOVDsNCj4gKyAgRGItPlR4QnVmQ250ICAgICAgICAgICAg ICAgPSBOaWMtPlB4ZUluaXQuVHhCdWZDbnQ7DQo+ICsgIERiLT5UeEJ1ZlNpemUgICAgICAgICAg ICAgID0gTmljLT5QeGVJbml0LlR4QnVmU2l6ZTsNCj4gKyAgRGItPlJ4QnVmQ250ICAgICAgICAg ICAgICAgPSBOaWMtPlB4ZUluaXQuUnhCdWZDbnQ7DQo+ICsgIERiLT5SeEJ1ZlNpemUgICAgICAg ICAgICAgID0gTmljLT5QeGVJbml0LlJ4QnVmU2l6ZTsNCj4gKyAgRGItPklGdHlwZSAgICAgICAg ICAgICAgICAgPSBQWEVfSUZUWVBFX0VUSEVSTkVUOw0KPiArICBEYi0+U3VwcG9ydGVkRHVwbGV4 TW9kZXMgICA9IFBYRV9EVVBMRVhfREVGQVVMVDsNCj4gKyAgRGItPlN1cHBvcnRlZExvb3BCYWNr TW9kZXMgPSBMT09QQkFDS19OT1JNQUw7DQo+ICsNCj4gKyAgQ2RiLT5TdGF0RmxhZ3MgfD0gKFBY RV9TVEFURkxBR1NfQ0FCTEVfREVURUNUX1NVUFBPUlRFRCB8DQo+ICsgICAgICAgICAgICAgICAg ICAgICBQWEVfU1RBVEZMQUdTX0dFVF9TVEFUVVNfTk9fTUVESUFfU1VQUE9SVEVEKTsNCj4gKw0K PiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaUdldEluaXRJbmZvICE9 IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhV bmRpR2V0SW5pdEluZm8gKENkYiwgTmljKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlM RUQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1h bmQgaXMgdXNlZCB0byByZXRyaWV2ZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFib3V0DQo+ ICsgIHRoZSBOSUMgYmVpbmcgY29udHJvbGxlZCBieSB0aGUgVU5ESS4NCj4gKw0KPiArICBAcGFy YW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0K PiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2Ug Y29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlHZXRDb25maWdJ bmZvICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMN Cj4gKyAgKQ0KPiArew0KPiArICBQWEVfREJfR0VUX0NPTkZJR19JTkZPICAqRGI7DQo+ICsgIEVG SV9TVEFUVVMgICAgICAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBpZiAoKENkYi0+T3BDb2Rl ICE9IFBYRV9PUENPREVfR0VUX0NPTkZJR19JTkZPKSB8fA0KPiArICAgICAgKENkYi0+U3RhdENv ZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Rmxh Z3MgIT0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+SUZudW0g Pj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkpIHx8DQo+ICsgICAgICAoQ2Ri LT5DUEJzaXplICE9IFBYRV9DUEJTSVpFX05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+Q1BC YWRkciAhPSBQWEVfQ1BCQUREUl9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkRCc2l6ZSAh PSBzaXplb2YgKFBYRV9EQl9HRVRfQ09ORklHX0lORk8pKSB8fA0KPiArICAgICAgKENkYi0+T3BG bGFncyAhPSBQWEVfT1BGTEFHU19OT1RfVVNFRCkpDQo+ICsgIHsNCj4gKyAgICBDZGItPlN0YXRG bGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29k ZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9IGVs c2Ugew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBM RVRFOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsg IH0NCj4gKw0KPiArICBpZiAoTmljLT5TdGF0ZSA9PSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9T VE9QUEVEKSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRf RkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX05PVF9TVEFSVEVE Ow0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIERiID0gKFBYRV9EQl9HRVRfQ09O RklHX0lORk8gKikoVUlOVE4pQ2RiLT5EQmFkZHI7DQo+ICsNCj4gKyAgRGItPnBjaS5CdXNUeXBl ID0gUFhFX0JVU1RZUEVfVVNCOw0KPiArDQo+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5k aS5Vc2JFdGhVbmRpR2V0Q29uZmlnSW5mbyAhPSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0gTmlj LT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaUdldENvbmZpZ0luZm8gKENkYiwgTmljKTsN Cj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFn cyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9 DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgcmVzZXRzIHRoZSBuZXR3b3JrIGFkYXB0 ZXIgYW5kIGluaXRpYWxpemVzIFVOREkgdXNpbmcNCj4gKyAgdGhlIHBhcmFtZXRlcnMgc3VwcGxp ZWQgaW4gdGhlIENQQi4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgICAgQ2RiICBBIHBvaW50ZXIg dG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIE5p YyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArVW5kaUluaXRpYWxpemUgKA0KPiArICBJTiAgICAgIFBY RV9DREIgICAqQ2RiLA0KPiArICBJTiBPVVQgIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sN Cj4gKyAgUFhFX0NQQl9JTklUSUFMSVpFICAqQ3BiOw0KPiArICBQWEVfREJfSU5JVElBTElaRSAg ICpEYjsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKChD ZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5T dGF0Q29kZSAhPSBQWEVfU1RBVENPREVfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0 YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5J Rm51bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAg IChDZGItPkNQQnNpemUgIT0gc2l6ZW9mIChQWEVfQ1BCX0lOSVRJQUxJWkUpKSkNCj4gKyAgew0K PiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4g KyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICBy ZXR1cm47DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZM QUdTX0NPTU1BTkRfQ09NUExFVEU7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5TdGF0ZSA9 PSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9TVE9QUEVEKSB7DQo+ICsgICAgQ2RiLT5TdGF0Rmxh Z3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUg ID0gUFhFX1NUQVRDT0RFX05PVF9TVEFSVEVEOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiAr DQo+ICsgIGlmICgoQ2RiLT5PcEZsYWdzICE9IFBYRV9PUEZMQUdTX0lOSVRJQUxJWkVfREVURUNU X0NBQkxFKSAmJg0KPiArICAgICAgKENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19JTklUSUFM SVpFX0RPX05PVF9ERVRFQ1RfQ0FCTEUpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3Mg PSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0g UFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ ICsgIGlmIChOaWMtPlN0YXRlID09IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX0lOSVRJQUxJWkVE KSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVE Ow0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0FMUkVBRFlfSU5JVElBTEla RUQ7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgQ3BiID0gKFBYRV9DUEJfSU5J VElBTElaRSAqKShVSU5UTilDZGItPkNQQmFkZHI7DQo+ICsgIERiICA9IChQWEVfREJfSU5JVElB TElaRSAqKShVSU5UTilDZGItPkRCYWRkcjsNCj4gKw0KPiArICBOaWMtPlB4ZUluaXQuTGlua1Nw ZWVkICAgID0gQ3BiLT5MaW5rU3BlZWQ7DQo+ICsgIE5pYy0+UHhlSW5pdC5EdXBsZXhNb2RlICAg PSBDcGItPkR1cGxleE1vZGU7DQo+ICsgIE5pYy0+UHhlSW5pdC5Mb29wQmFja01vZGUgPSBDcGIt Pkxvb3BCYWNrTW9kZTsNCj4gKyAgTmljLT5QeGVJbml0Lk1lbW9yeUFkZHIgICA9IENwYi0+TWVt b3J5QWRkcjsNCj4gKyAgTmljLT5QeGVJbml0Lk1lbW9yeUxlbmd0aCA9IENwYi0+TWVtb3J5TGVu Z3RoOw0KPiArICBOaWMtPlB4ZUluaXQuVHhCdWZDbnQgICAgID0gVFhfQlVGRkVSX0NPVU5UOw0K PiArICBOaWMtPlB4ZUluaXQuVHhCdWZTaXplICAgID0gTmljLT5NYXhTZWdtZW50U2l6ZTsNCj4g KyAgTmljLT5QeGVJbml0LlJ4QnVmQ250ICAgICA9IFJYX0JVRkZFUl9DT1VOVDsNCj4gKyAgTmlj LT5QeGVJbml0LlJ4QnVmU2l6ZSAgICA9IE5pYy0+TWF4U2VnbWVudFNpemU7DQo+ICsNCj4gKyAg Q2RiLT5TdGF0Q29kZSA9IEluaXRpYWxpemUgKENkYiwgTmljKTsNCj4gKw0KPiArICBEYi0+TWVt b3J5VXNlZCA9IE1FTU9SWV9SRVFVSVJFOw0KPiArICBEYi0+VHhCdWZDbnQgICA9IE5pYy0+UHhl SW5pdC5UeEJ1ZkNudDsNCj4gKyAgRGItPlR4QnVmU2l6ZSAgPSBOaWMtPlB4ZUluaXQuVHhCdWZT aXplOw0KPiArICBEYi0+UnhCdWZDbnQgICA9IE5pYy0+UHhlSW5pdC5SeEJ1ZkNudDsNCj4gKyAg RGItPlJ4QnVmU2l6ZSAgPSBOaWMtPlB4ZUluaXQuUnhCdWZTaXplOw0KPiArDQo+ICsgIE5pYy0+ UnhGaWx0ZXIgICAgPSBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9CUk9BRENBU1Q7DQo+ICsg IE5pYy0+Q2FuVHJhbnNtaXQgPSBGQUxTRTsNCj4gKw0KPiArICBpZiAoQ2RiLT5PcEZsYWdzID09 IFBYRV9PUEZMQUdTX0lOSVRJQUxJWkVfREVURUNUX0NBQkxFKSB7DQo+ICsgICAgaWYgKChOaWMt PlJlcXVlc3QuUmVxdWVzdCA9PSBVU0JfQ0RDX05FVFdPUktfQ09OTkVDVElPTikgJiYNCj4gKE5p Yy0+UmVxdWVzdC5WYWx1ZSA9PSBORVRXT1JLX0RJU0NPTk5FQ1QpKSB7DQo+ICsgICAgICBOaWMt PkNhYmxlRGV0ZWN0ID0gMDsNCj4gKyAgICB9IGVsc2UgaWYgKChOaWMtPlJlcXVlc3QuUmVxdWVz dCA9PSBVU0JfQ0RDX05FVFdPUktfQ09OTkVDVElPTikNCj4gJiYgKE5pYy0+UmVxdWVzdC5WYWx1 ZSA9PSBORVRXT1JLX0NPTk5FQ1RFRCkpIHsNCj4gKyAgICAgIE5pYy0+Q2FibGVEZXRlY3QgPSAx Ow0KPiArICAgIH0NCj4gKw0KPiArICAgIGlmIChOaWMtPkNhYmxlRGV0ZWN0ID09IDApIHsNCj4g KyAgICAgIENkYi0+U3RhdEZsYWdzIHw9IFBYRV9TVEFURkxBR1NfSU5JVElBTElaRURfTk9fTUVE SUE7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYgKENkYi0+U3RhdENvZGUgIT0gUFhF X1NUQVRDT0RFX1NVQ0NFU1MpIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxB R1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgTmljLT5TdGF0ZSA9IFBY RV9TVEFURkxBR1NfR0VUX1NUQVRFX0lOSVRJQUxJWkVEOw0KPiArICB9DQo+ICsNCj4gKyAgaWYg KE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlJbml0aWFsaXplICE9IE5VTEwpIHsN Cj4gKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpSW5pdGlh bGl6ZSAoQ2RiLCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAg ICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAg ICB9DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEluaXRpYWxpemUgTmV0d29yayBp bnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICBDZGIg ICAgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFy YW1baW4sIG91dF0gTmljICAgICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNv bnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIFN0YXR1cyAgQSB2YWx1ZSBvZiBQeGUg c3RhdGNvZGUuDQo+ICsNCj4gKyoqLw0KPiArVUlOVDE2DQo+ICtJbml0aWFsaXplICgNCj4gKyAg SU4gICAgICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gT1VUICBOSUNfREFUQSAgKk5pYw0KPiAr ICApDQo+ICt7DQo+ICsgIFVJTlROICAgICAgIFN0YXR1czsNCj4gKyAgVUlOVDMyICAgICAgSW5k ZXg7DQo+ICsgIEVGSV9TVEFUVVMgIEVmaVN0YXR1czsNCj4gKw0KPiArICBTdGF0dXMgPSBNYXBJ dCAoDQo+ICsgICAgICAgICAgICAgTmljLA0KPiArICAgICAgICAgICAgIE5pYy0+UHhlSW5pdC5N ZW1vcnlBZGRyLA0KPiArICAgICAgICAgICAgIE5pYy0+UHhlSW5pdC5NZW1vcnlMZW5ndGgsDQo+ ICsgICAgICAgICAgICAgVE9fQU5EX0ZST01fREVWSUNFLA0KPiArICAgICAgICAgICAgIChVSU5U NjQpKFVJTlROKSZOaWMtPk1hcHBlZEFkZHINCj4gKyAgICAgICAgICAgICApOw0KPiArDQo+ICsg IGlmIChTdGF0dXMgIT0gMCkgew0KPiArICAgIHJldHVybiAoVUlOVDE2KVN0YXR1czsNCj4gKyAg fQ0KPiArDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFBYRV9IV0FERFJfTEVOX0VUSEVS OyBJbmRleCsrKSB7DQo+ICsgICAgTmljLT5QZXJtTm9kZUFkZHJlc3NbSW5kZXhdID0gTmljLT5N YWNBZGRyLkFkZHJbSW5kZXhdOw0KPiArICB9DQo+ICsNCj4gKyAgZm9yIChJbmRleCA9IDA7IElu ZGV4IDwgUFhFX0hXQUREUl9MRU5fRVRIRVI7IEluZGV4KyspIHsNCj4gKyAgICBOaWMtPkN1cnJl bnROb2RlQWRkcmVzc1tJbmRleF0gPSBOaWMtPlBlcm1Ob2RlQWRkcmVzc1tJbmRleF07DQo+ICsg IH0NCj4gKw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQWEVfSFdBRERSX0xFTl9FVEhF UjsgSW5kZXgrKykgew0KPiArICAgIE5pYy0+QnJvYWRjYXN0Tm9kZUFkZHJlc3NbSW5kZXhdID0g MHhGRjsNCj4gKyAgfQ0KPiArDQo+ICsgIGZvciAoSW5kZXggPSBQWEVfSFdBRERSX0xFTl9FVEhF UjsgSW5kZXggPCBQWEVfTUFDX0xFTkdUSDsNCj4gSW5kZXgrKykgew0KPiArICAgIE5pYy0+Q3Vy cmVudE5vZGVBZGRyZXNzW0luZGV4XSAgID0gMDsNCj4gKyAgICBOaWMtPlBlcm1Ob2RlQWRkcmVz c1tJbmRleF0gICAgICA9IDA7DQo+ICsgICAgTmljLT5Ccm9hZGNhc3ROb2RlQWRkcmVzc1tJbmRl eF0gPSAwOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhJbml0aWFs aXplICE9IE5VTEwpIHsNCj4gKyAgICBFZmlTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoSW5p dGlhbGl6ZSAoQ2RiLCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJST1IgKEVmaVN0YXR1cykpIHsN Cj4gKyAgICAgIHJldHVybiBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0N Cj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiAoVUlOVDE2KVN0YXR1czsNCj4gK30NCj4gKw0KPiAr LyoqDQo+ICsgIFRoaXMgY29tbWFuZCByZXNldHMgdGhlIG5ldHdvcmsgYWRhcHRlciBhbmQgcmVp bml0aWFsaXplcyB0aGUgVU5ESQ0KPiArICB3aXRoIHRoZSBzYW1lIHBhcmFtZXRlcnMgcHJvdmlk ZWQgaW4gdGhlIEluaXRpYWxpemUgY29tbWFuZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIg IEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1b aW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBk YXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlSZXNldCAoDQo+ICsgIElOICBQWEVf Q0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAg RUZJX1NUQVRVUyAgU3RhdHVzOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcENvZGUgIT0gUFhFX09Q Q09ERV9SRVNFVCkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9J TklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdzICE9IFBYRV9TVEFURkxBR1Nf SU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQ eGUtPklGY250RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENkYi0+Q1BCc2l6ZSAhPSBQWEVfQ1BC U0laRV9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkNQQmFkZHIgIT0gUFhFX0NQQkFERFJf Tk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5EQnNpemUgIT0gUFhFX0RCU0laRV9OT1RfVVNF RCkgfHwNCj4gKyAgICAgIChDZGItPkRCYWRkciAhPSBQWEVfREJBRERSX05PVF9VU0VEKSkNCj4g KyAgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxF RDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4g KyAgICByZXR1cm47DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVf U1RBVEZMQUdTX0NPTU1BTkRfQ09NUExFVEU7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVf U1RBVENPREVfU1VDQ0VTUzsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlN0YXRlICE9IFBY RV9TVEFURkxBR1NfR0VUX1NUQVRFX0lOSVRJQUxJWkVEKSB7DQo+ICsgICAgQ2RiLT5TdGF0Q29k ZSAgPSBQWEVfU1RBVENPREVfTk9UX0lOSVRJQUxJWkVEOw0KPiArICAgIENkYi0+U3RhdEZsYWdz ID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0N Cj4gKw0KPiArICBpZiAoKENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19OT1RfVVNFRCkgJiYN Cj4gKyAgICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfUkVTRVRfRElTQUJMRV9JTlRF UlJVUFRTKSAmJg0KPiArICAgICAgKENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19SRVNFVF9E SVNBQkxFX0ZJTFRFUlMpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RB VEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRD T0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgo Q2RiLT5PcEZsYWdzICYgUFhFX09QRkxBR1NfUkVTRVRfRElTQUJMRV9GSUxURVJTKSA9PSAwKSB7 DQo+ICsgICAgTmljLT5SeEZpbHRlciA9IFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0JST0FE Q0FTVDsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcEZsYWdzICYgUFhFX09QRkxBR1Nf UkVTRVRfRElTQUJMRV9JTlRFUlJVUFRTKSAhPSAwKSB7DQo+ICsgICAgTmljLT5JbnRlcnJ1cE9w RmxhZyA9IDA7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGku VXNiRXRoVW5kaVJlc2V0ICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+ VXNiRXRoVW5kaS5Vc2JFdGhVbmRpUmVzZXQgKENkYiwgTmljKTsNCj4gKyAgICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1Nf Q09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr ICBUaGUgU2h1dGRvd24gY29tbWFuZCByZXNldHMgdGhlIG5ldHdvcmsgYWRhcHRlciBhbmQgbGVh dmVzIGl0IGluIGENCj4gKyAgc2FmZSBzdGF0ZSBmb3IgYW5vdGhlciBkcml2ZXIgdG8gaW5pdGlh bGl6ZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgICAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNv bW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIE5pYyAgQSBwb2lu dGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyoq Lw0KPiArVk9JRA0KPiArVW5kaVNodXRkb3duICgNCj4gKyAgSU4gICAgICBQWEVfQ0RCICAgKkNk YiwNCj4gKyAgSU4gT1VUICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9T VEFUVVMgIFN0YXR1czsNCj4gKw0KPiArICBpZiAoKENkYi0+T3BDb2RlICE9IFBYRV9PUENPREVf U0hVVERPV04pIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENPREVfSU5J VElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lO SVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhl LT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkNQQnNpemUgIT0gUFhFX0NQQlNJ WkVfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJhZGRyICE9IFBYRV9DUEJBRERSX05P VF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+REJzaXplICE9IFBYRV9EQlNJWkVfTk9UX1VTRUQp IHx8DQo+ICsgICAgICAoQ2RiLT5EQmFkZHIgIT0gUFhFX0RCQUREUl9OT1RfVVNFRCkgfHwNCj4g KyAgICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfTk9UX1VTRUQpKQ0KPiArICB7DQo+ ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiAr ICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJl dHVybjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxB R1NfQ09NTUFORF9DT01QTEVURTsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09E RV9TVUNDRVNTOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+U3RhdGUgIT0gUFhFX1NUQVRG TEFHU19HRVRfU1RBVEVfSU5JVElBTElaRUQpIHsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBY RV9TVEFUQ09ERV9OT1RfSU5JVElBTElaRUQ7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVf U1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ ICsgIE5pYy0+Q2FuVHJhbnNtaXQgPSBGQUxTRTsNCj4gKw0KPiArICBOaWMtPlN0YXRlID0gUFhF X1NUQVRGTEFHU19HRVRfU1RBVEVfU1RBUlRFRDsNCj4gKw0KPiArICBpZiAoTmljLT5Vc2JFdGgt PlVzYkV0aFVuZGkuVXNiRXRoVW5kaVNodXRkb3duICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMg PSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpU2h1dGRvd24gKENkYiwgTmljKTsN Cj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBDZGItPlN0YXRDb2Rl ICA9IFBYRV9TVEFUQ09ERV9OT1RfSU5JVElBTElaRUQ7DQo+ICsgICAgICBDZGItPlN0YXRGbGFn cyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9 DQo+ICsNCj4gKy8qKg0KPiArICBUaGUgSW50ZXJydXB0IEVuYWJsZXMgY29tbWFuZCBjYW4gYmUg dXNlZCB0byByZWFkIGFuZC9vciBjaGFuZ2UNCj4gKyAgdGhlIGN1cnJlbnQgZXh0ZXJuYWwgaW50 ZXJydXB0IGVuYWJsZSBzZXR0aW5ncy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9p bnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBO aWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0K PiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlJbnRlcnJ1cHRFbmFibGUgKA0KPiArICBJTiAg UFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gKw0KPiArICBDZGItPlN0YXRDb2RlID0gUFhFX1NU QVRDT0RFX1VOU1VQUE9SVEVEOw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNi RXRoVW5kaUludGVycnVwdEVuYWJsZSAhPSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0gTmljLT5V c2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaUludGVycnVwdEVuYWJsZSAoQ2RiLCBOaWMpOw0K PiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdz ID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICB9IGVsc2Ugew0KPiArICAg ICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09NUExFVEU7DQo+ICsg ICAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArICAgIH0NCj4g KyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gcmVh ZCBhbmQgY2hhbmdlIHJlY2VpdmUgZmlsdGVycyBhbmQsDQo+ICsgIGlmIHN1cHBvcnRlZCwgcmVh ZCBhbmQgY2hhbmdlIHRoZSBtdWx0aWNhc3QgTUFDIGFkZHJlc3MgZmlsdGVyIGxpc3QuDQo+ICsN Cj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRv ciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsg aW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtVbmRp UmVjZWl2ZUZpbHRlciAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19E QVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgVUlOVDE2ICAgICAgICAgICAgICAgICAgTmV3 RmlsdGVyOw0KPiArICBQWEVfREJfUkVDRUlWRV9GSUxURVJTICAqRGI7DQo+ICsgIEVGSV9TVEFU VVMgICAgICAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBpZiAoKENkYi0+T3BDb2RlICE9IFBY RV9PUENPREVfUkVDRUlWRV9GSUxURVJTKSB8fA0KPiArICAgICAgKENkYi0+U3RhdENvZGUgIT0g UFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0RmxhZ3MgIT0g UFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+SUZudW0gPj0gKGdQ eGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5T dGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3Rh dENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAg fSBlbHNlIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9D T01QTEVURTsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0K PiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+U3RhdGUgIT0gUFhFX1NUQVRGTEFHU19HRVRfU1RB VEVfSU5JVElBTElaRUQpIHsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9O T1RfSU5JVElBTElaRUQ7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NP TU1BTkRfRkFJTEVEOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIE5ld0ZpbHRl ciA9IChVSU5UMTYpKENkYi0+T3BGbGFncyAmIDB4MUYpOw0KPiArDQo+ICsgIHN3aXRjaCAoQ2Ri LT5PcEZsYWdzICYgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfT1BNQVNLKSB7DQo+ICsgICAg Y2FzZSBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9SRUFEOg0KPiArICAgICAgaWYgKENkYi0+ Q1BCc2l6ZSAhPSBQWEVfQ1BCU0laRV9OT1RfVVNFRCkgew0KPiArICAgICAgICBDZGItPlN0YXRG bGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgICAgIENkYi0+U3Rh dENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgICAgfQ0KPiArDQo+ICsg ICAgICBpZiAoKE5ld0ZpbHRlciAmIFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX1JFU0VUX01D QVNUX0xJU1QpID09DQo+IDApIHsNCj4gKyAgICAgICAgaWYgKChDZGItPkRCc2l6ZSAhPSAwKSkg ew0KPiArICAgICAgICAgIERiID0gKFBYRV9EQl9SRUNFSVZFX0ZJTFRFUlMgKikoVUlOVE4pQ2Ri LT5EQmFkZHI7DQo+ICsgICAgICAgICAgQ29weU1lbSAoRGIsICZOaWMtPk1jYXN0TGlzdCwgTmlj LT5NY2FzdENvdW50KTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICBi cmVhazsNCj4gKw0KPiArICAgIGNhc2UgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfRU5BQkxF Og0KPiArICAgICAgaWYgKE5ld0ZpbHRlciA9PSAwKSB7DQo+ICsgICAgICAgIENkYi0+U3RhdEZs YWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICAgIH0NCj4gKw0KPiAr ICAgICAgaWYgKENkYi0+Q1BCc2l6ZSAhPSAwKSB7DQo+ICsgICAgICAgIGlmICgoKE5ld0ZpbHRl ciAmDQo+IFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0ZJTFRFUkVEX01VTFRJQ0FTVCkgPT0g MCkgfHwNCj4gKyAgICAgICAgICAgICgoTmV3RmlsdGVyICYNCj4gUFhFX09QRkxBR1NfUkVDRUlW RV9GSUxURVJfUkVTRVRfTUNBU1RfTElTVCkgIT0gMCkgfHwNCj4gKyAgICAgICAgICAgICgoTmV3 RmlsdGVyICYgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfQUxMX01VTFRJQ0FTVCkgIT0gMCkN Cj4gfHwNCj4gKyAgICAgICAgICAgICgoQ2RiLT5DUEJzaXplICUgc2l6ZW9mIChQWEVfTUFDX0FE RFIpKSAhPSAwKSkNCj4gKyAgICAgICAgew0KPiArICAgICAgICAgIENkYi0+U3RhdEZsYWdzID0g UFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgfQ0K PiArDQo+ICsgICAgICBpZiAoKENkYi0+T3BGbGFncyAmDQo+IFBYRV9PUEZMQUdTX1JFQ0VJVkVf RklMVEVSX0ZJTFRFUkVEX01VTFRJQ0FTVCkgIT0gMCkgew0KPiArICAgICAgICBpZiAoKChDZGIt Pk9wRmxhZ3MgJg0KPiBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9SRVNFVF9NQ0FTVF9MSVNU KSAhPSAwKSB8fA0KPiArICAgICAgICAgICAgKChDZGItPk9wRmxhZ3MgJg0KPiBQWEVfT1BGTEFH U19SRUNFSVZFX0ZJTFRFUl9BTExfTVVMVElDQVNUKSAhPSAwKSkNCj4gKyAgICAgICAgew0KPiAr ICAgICAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsN Cj4gKyAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgIGlmICgoQ2RiLT5DUEJzaXplID09IDApKSB7 DQo+ICsgICAgICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJ TEVEOw0KPiArICAgICAgICB9DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIENkYi0+U3RhdENv ZGUgPSBTZXRGaWx0ZXIgKE5pYywgTmV3RmlsdGVyLCBDZGItPkNQQmFkZHIsIENkYi0+Q1BCc2l6 ZSk7DQo+ICsgICAgICBicmVhazsNCj4gKw0KPiArICAgIGNhc2UgUFhFX09QRkxBR1NfUkVDRUlW RV9GSUxURVJfRElTQUJMRToNCj4gKyAgICAgIGlmIChDZGItPkNQQnNpemUgIT0gUFhFX0NQQlNJ WkVfTk9UX1VTRUQpIHsNCj4gKyAgICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdT X0NPTU1BTkRfRkFJTEVEOw0KPiArICAgICAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09E RV9JTlZBTElEX0NEQjsNCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgYnJlYWs7DQo+ICsNCj4g KyAgICBkZWZhdWx0Og0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NP TU1BTkRfRkFJTEVEOw0KPiArICAgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5W QUxJRF9DREI7DQo+ICsgIH0NCj4gKw0KPiArICBDZGItPlN0YXRGbGFncyA9IChQWEVfU1RBVEZM QUdTKShDZGItPlN0YXRGbGFncyB8IE5pYy0+UnhGaWx0ZXIpOw0KPiArDQo+ICsgIGlmIChOaWMt PlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpUmVjZWl2ZUZpbHRlciAhPSBOVUxMKSB7DQo+ ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVJlY2VpdmVG aWx0ZXIgKENkYiwgTmljKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsg ICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsg ICAgfQ0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBTZXQgUFhFIHJlY2VpdmUgZmls dGVyLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgICAgICAgIEEgcG9pbnRlciB0byB0aGUg TmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArICBAcGFyYW1baW5dICBTZXRG aWx0ZXIgICBQWEUgcmVjZWl2ZSBmaWx0ZXINCj4gKyAgQHBhcmFtW2luXSAgQ3BiQWRkciAgICAg Q29tbWFuZCBQYXJhbWV0ZXIgQmxvY2sgQWRkcmVzcw0KPiArICBAcGFyYW1baW5dICBDcGJTaXpl ICAgICBDb21tYW5kIFBhcmFtZXRlciBCbG9jayBTaXplDQo+ICsNCj4gKyoqLw0KPiArVUlOVDE2 DQo+ICtTZXRGaWx0ZXIgKA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMsDQo+ICsgIElOICBVSU5U MTYgICAgU2V0RmlsdGVyLA0KPiArICBJTiAgVUlOVDY0ICAgIENwYkFkZHIsDQo+ICsgIElOICBV SU5UMzIgICAgQ3BiU2l6ZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAg ICAgICAgICAgU3RhdHVzOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICpNY2Fz dExpc3Q7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgQ291bnQ7DQo+ICsgIFVJ TlQ4ICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXgxOw0KPiArICBVSU5UOCAgICAgICAgICAg ICAgICAgICAgICAgIEluZGV4MjsNCj4gKyAgUFhFX0NQQl9SRUNFSVZFX0ZJTFRFUlMgICAgICAq Q3BiOw0KPiArICBVU0JfRVRIRVJORVRfRlVOX0RFU0NSSVBUT1IgIFVzYkV0aEZ1bkRlc2NyaXB0 b3I7DQo+ICsNCj4gKyAgQ291bnQgPSAwOw0KPiArICBDcGIgICA9IChQWEVfQ1BCX1JFQ0VJVkVf RklMVEVSUyAqKShVSU5UTilDcGJBZGRyOw0KPiArDQo+ICsgIC8vIFRoZSBDcGIgY291bGQgYmUg TlVMTC4ocmVmOlBYRV9DUEJBRERSX05PVF9VU0VEKQ0KPiArICBOaWMtPlJ4RmlsdGVyID0gKFVJ TlQ4KVNldEZpbHRlcjsNCj4gKw0KPiArICBpZiAoKChTZXRGaWx0ZXIgJiBQWEVfT1BGTEFHU19S RUNFSVZFX0ZJTFRFUl9GSUxURVJFRF9NVUxUSUNBU1QpICE9DQo+IDApIHx8IChDcGIgIT0gTlVM TCkpIHsNCj4gKyAgICBpZiAoQ3BiICE9IE5VTEwpIHsNCj4gKyAgICAgIE5pYy0+TWNhc3RDb3Vu dCA9IChVSU5UOCkoQ3BiU2l6ZSAvIFBYRV9NQUNfTEVOR1RIKTsNCj4gKyAgICAgIENvcHlNZW0g KCZOaWMtPk1jYXN0TGlzdCwgQ3BiLCBOaWMtPk1jYXN0Q291bnQpOw0KPiArICAgIH0NCj4gKw0K PiArICAgIE5pYy0+VXNiRXRoLT5Vc2JFdGhGdW5EZXNjcmlwdG9yIChOaWMtPlVzYkV0aCwNCj4g JlVzYkV0aEZ1bkRlc2NyaXB0b3IpOw0KPiArICAgIGlmICgoVXNiRXRoRnVuRGVzY3JpcHRvci5O dW1iZXJNY0ZpbHRlcnMgPDwgMSkgPT0gMCkgew0KPiArICAgICAgTmljLT5SeEZpbHRlciB8PSBQ WEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9BTExfTVVMVElDQVNUOw0KPiArICAgICAgTmljLT5V c2JFdGgtPlNldFVzYkV0aFBhY2tldEZpbHRlciAoTmljLT5Vc2JFdGgsIE5pYy0+UnhGaWx0ZXIp Ow0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICBTdGF0dXMgPSBnQlMtPkFsbG9jYXRlUG9vbCAo RWZpQm9vdFNlcnZpY2VzRGF0YSwgTmljLT5NY2FzdENvdW50ICogNiwNCj4gKFZPSUQgKiopJk1j YXN0TGlzdCk7DQo+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICAg IHJldHVybiBQWEVfU1RBVENPREVfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgICAgICB9DQo+ICsN Cj4gKyAgICAgIGlmIChDcGIgIT0gTlVMTCkgew0KPiArICAgICAgICBmb3IgKEluZGV4MSA9IDA7 IEluZGV4MSA8IE5pYy0+TWNhc3RDb3VudDsgSW5kZXgxKyspIHsNCj4gKyAgICAgICAgICBmb3Ig KEluZGV4MiA9IDA7IEluZGV4MiA8IDY7IEluZGV4MisrKSB7DQo+ICsgICAgICAgICAgICBNY2Fz dExpc3RbQ291bnQrK10gPSBDcGItPk1DYXN0TGlzdFtJbmRleDFdW0luZGV4Ml07DQo+ICsgICAg ICAgICAgfQ0KPiArICAgICAgICB9DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIE5pYy0+UnhG aWx0ZXIgfD0gUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfRklMVEVSRURfTVVMVElDQVNUOw0K PiArICAgICAgaWYgKENwYiAhPSBOVUxMKSB7DQo+ICsgICAgICAgIE5pYy0+VXNiRXRoLT5TZXRV c2JFdGhNY2FzdEZpbHRlciAoTmljLT5Vc2JFdGgsIE5pYy0+TWNhc3RDb3VudCwNCj4gTWNhc3RM aXN0KTsNCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgTmljLT5Vc2JFdGgtPlNldFVzYkV0aFBh Y2tldEZpbHRlciAoTmljLT5Vc2JFdGgsIE5pYy0+UnhGaWx0ZXIpOw0KPiArICAgICAgRnJlZVBv b2wgKE1jYXN0TGlzdCk7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIFBYRV9T VEFUQ09ERV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlz IHVzZWQgdG8gZ2V0IGN1cnJlbnQgc3RhdGlvbiBhbmQgYnJvYWRjYXN0IE1BQyBhZGRyZXNzZXMN Cj4gKyAgYW5kLCBpZiBzdXBwb3J0ZWQsIHRvIGNoYW5nZSB0aGUgY3VycmVudCBzdGF0aW9uIE1B QyBhZGRyZXNzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBj b21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVy IHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyoqLw0K PiArVk9JRA0KPiArVW5kaVN0YXRpb25BZGRyZXNzICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2Ri LA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBQWEVfQ1BCX1NU QVRJT05fQUREUkVTUyAgKkNwYjsNCj4gKyAgUFhFX0RCX1NUQVRJT05fQUREUkVTUyAgICpEYjsN Cj4gKyAgVUlOVDE2ICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiArICBFRklfU1RBVFVTICAg ICAgICAgICAgICAgU3RhdHVzOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcENvZGUgIT0gUFhFX09Q Q09ERV9TVEFUSU9OX0FERFJFU1MpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVf U1RBVENPREVfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVf U1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+ SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkRCc2l6ZSAh PSBzaXplb2YgKFBYRV9EQl9TVEFUSU9OX0FERFJFU1MpKSkNCj4gKyAgew0KPiArICAgIENkYi0+ U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0 YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ICsg IH0gZWxzZSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRf Q09NUExFVEU7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsN Cj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlN0YXRlICE9IFBYRV9TVEFURkxBR1NfR0VUX1NU QVRFX0lOSVRJQUxJWkVEKSB7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVf Tk9UX0lOSVRJQUxJWkVEOw0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19D T01NQU5EX0ZBSUxFRDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoQ2Ri LT5PcEZsYWdzID09IFBYRV9PUEZMQUdTX1NUQVRJT05fQUREUkVTU19SRVNFVCkgew0KPiArICAg IGlmIChDb21wYXJlTWVtICgmTmljLT5DdXJyZW50Tm9kZUFkZHJlc3NbMF0sICZOaWMtDQo+ID5Q ZXJtTm9kZUFkZHJlc3NbMF0sIFBYRV9NQUNfTEVOR1RIKSAhPSAwKSB7DQo+ICsgICAgICBmb3Ig KEluZGV4ID0gMDsgSW5kZXggPCBQWEVfTUFDX0xFTkdUSDsgSW5kZXgrKykgew0KPiArICAgICAg ICBOaWMtPkN1cnJlbnROb2RlQWRkcmVzc1tJbmRleF0gPSBOaWMtPlBlcm1Ob2RlQWRkcmVzc1tJ bmRleF07DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYgKENkYi0+ Q1BCYWRkciAhPSAwKSB7DQo+ICsgICAgQ3BiID0gKFBYRV9DUEJfU1RBVElPTl9BRERSRVNTICop KFVJTlROKUNkYi0+Q1BCYWRkcjsNCj4gKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQWEVf TUFDX0xFTkdUSDsgSW5kZXgrKykgew0KPiArICAgICAgTmljLT5DdXJyZW50Tm9kZUFkZHJlc3Nb SW5kZXhdID0gQ3BiLT5TdGF0aW9uQWRkcltJbmRleF07DQo+ICsgICAgfQ0KPiArICB9DQo+ICsN Cj4gKyAgaWYgKENkYi0+REJhZGRyICE9IDApIHsNCj4gKyAgICBEYiA9IChQWEVfREJfU1RBVElP Tl9BRERSRVNTICopKFVJTlROKUNkYi0+REJhZGRyOw0KPiArICAgIGZvciAoSW5kZXggPSAwOyBJ bmRleCA8IFBYRV9NQUNfTEVOR1RIOyBJbmRleCsrKSB7DQo+ICsgICAgICBEYi0+U3RhdGlvbkFk ZHJbSW5kZXhdICAgPSBOaWMtPkN1cnJlbnROb2RlQWRkcmVzc1tJbmRleF07DQo+ICsgICAgICBE Yi0+QnJvYWRjYXN0QWRkcltJbmRleF0gPSBOaWMtPkJyb2FkY2FzdE5vZGVBZGRyZXNzW0luZGV4 XTsNCj4gKyAgICAgIERiLT5QZXJtYW5lbnRBZGRyW0luZGV4XSA9IE5pYy0+UGVybU5vZGVBZGRy ZXNzW0luZGV4XTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5Vc2JFdGgt PlVzYkV0aFVuZGkuVXNiRXRoVW5kaVN0YXRpb25BZGRyZXNzICE9IE5VTEwpIHsNCj4gKyAgICBT dGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3RhdGlvbkFkZHJlc3Mg KENkYiwgTmljKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBD ZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfQ0K PiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBy ZWFkIGFuZCBjbGVhciB0aGUgTklDIHRyYWZmaWMgc3RhdGlzdGljcy4NCj4gKw0KPiArICBAcGFy YW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0K PiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2Ug Y29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlTdGF0aXN0aWNz ICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4g KyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKChDZGIt Pk9wQ29kZSAhPSBQWEVfT1BDT0RFX1NUQVRJU1RJQ1MpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0 Q29kZSAhPSBQWEVfU1RBVENPREVfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRG bGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51 bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChD ZGItPkNQQnNpemUgIT0gUFhFX0NQQlNJWkVfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5D UEJhZGRyICE9IFBYRV9DUEJBRERSX05PVF9VU0VEKSkNCj4gKyAgew0KPiArICAgIENkYi0+U3Rh dEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRD b2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0g ZWxzZSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09N UExFVEU7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5TdGF0ZSAhPSBQWEVfU1RBVEZMQUdT X0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NU QVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFU RkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAg aWYgKChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfU1RBVElTVElDU19SRVNFVCkgJiYNCj4g KyAgICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfU1RBVElTVElDU19SRUFEKSkNCj4g KyAgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxF RDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4g KyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBDZGItPlN0YXRDb2RlID0gU3RhdGlzdGlj cyAoTmljLCBDZGItPkRCYWRkciwgQ2RiLT5EQnNpemUpOw0KPiArDQo+ICsgIGlmIChOaWMtPlVz YkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3RhdGlzdGljcyAhPSBOVUxMKSB7DQo+ICsgICAg U3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVN0YXRpc3RpY3MgKENk YiwgTmljKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBDZGIt PlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfQ0KPiAr ICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBSZXR1cm4gZGF0YSBmb3IgREIgZGF0YS4NCj4g Kw0KPiArICBAcGFyYW1baW5dICBOaWMgICAgICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50 ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKyAgQHBhcmFtW2luXSAgRGJBZGRyICAgRGF0YSBC bG9jayBBZGRyZXNzLg0KPiArICBAcGFyYW1baW5dICBEYlNpemUgICBEYXRhIEJsb2NrIFNpemUu DQo+ICsNCj4gKyoqLw0KPiArVUlOVDE2DQo+ICtTdGF0aXN0aWNzICgNCj4gKyAgSU4gTklDX0RB VEEgICpOaWMsDQo+ICsgIElOIFVJTlQ2NCAgICBEYkFkZHIsDQo+ICsgIElOIFVJTlQxNiAgICBE YlNpemUNCj4gKyAgKQ0KPiArew0KPiArICBQWEVfREJfU1RBVElTVElDUyAgKkRiU3RhdGlzdGlj Ow0KPiArICBFRklfU1RBVFVTICAgICAgICAgU3RhdHVzOw0KPiArDQo+ICsgIERiU3RhdGlzdGlj ID0gKFBYRV9EQl9TVEFUSVNUSUNTICopKFVJTlROKURiQWRkcjsNCj4gKw0KPiArICBpZiAoRGJT aXplID09IDApIHsNCj4gKyAgICByZXR1cm4gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsgIH0N Cj4gKw0KPiArICBEYlN0YXRpc3RpYy0+U3VwcG9ydGVkICA9IDB4ODAyOw0KPiArICBEYlN0YXRp c3RpYy0+RGF0YVsweDAxXSA9IE5pYy0+UnhGcmFtZTsNCj4gKyAgRGJTdGF0aXN0aWMtPkRhdGFb MHgwQl0gPSBOaWMtPlR4RnJhbWU7DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhT dGF0aXN0aWNzICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRo U3RhdGlzdGljcyAoTmljLCBEYkFkZHIsIERiU2l6ZSk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPiArICAgICAgcmV0dXJuIFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7 DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIFBYRV9TVEFUQ09ERV9TVUNDRVNT Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVHJhbnNsYXRlIGEgbXVsdGljYXN0IElQdjQgb3Ig SVB2NiBhZGRyZXNzIHRvIGEgbXVsdGljYXN0IE1BQyBhZGRyZXNzLg0KPiArDQo+ICsgIEBwYXJh bVtpbiwgb3V0XSBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2Nr Lg0KPiArICBAcGFyYW1baW5dICAgICAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50 ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtVbmRpTWNh c3RJcDJNYWMgKA0KPiArICBJTiBPVVQgIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgICAgIE5J Q19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgUFhFX0NQQl9NQ0FTVF9JUF9UT19NQUMg ICpDcGI7DQo+ICsgIFBYRV9EQl9NQ0FTVF9JUF9UT19NQUMgICAqRGI7DQo+ICsgIFVJTlQ4ICAg ICAgICAgICAgICAgICAgICAqVG1wOw0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgU3Rh dHVzOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcENvZGUgIT0gUFhFX09QQ09ERV9NQ0FTVF9JUF9U T19NQUMpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENPREVfSU5JVElB TElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJ QUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5J RmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkNQQnNpemUgIT0gc2l6ZW9mIChQWEVf Q1BCX01DQVNUX0lQX1RPX01BQykpIHx8DQo+ICsgICAgICAoQ2RiLT5EQnNpemUgIT0gc2l6ZW9m IChQWEVfREJfTUNBU1RfSVBfVE9fTUFDKSkpDQo+ICsgIHsNCj4gKyAgICBDZGItPlN0YXRGbGFn cyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAg PSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9IGVsc2Ug ew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRF Ow0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsgIH0N Cj4gKw0KPiArICBpZiAoTmljLT5TdGF0ZSAhPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklU SUFMSVpFRCkgew0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX05PVF9JTklU SUFMSVpFRDsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9G QUlMRUQ7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgQ3BiID0gKFBYRV9DUEJf TUNBU1RfSVBfVE9fTUFDICopKFVJTlROKUNkYi0+Q1BCYWRkcjsNCj4gKyAgRGIgID0gKFBYRV9E Ql9NQ0FTVF9JUF9UT19NQUMgKikoVUlOVE4pQ2RiLT5EQmFkZHI7DQo+ICsNCj4gKyAgaWYgKChD ZGItPk9wRmxhZ3MgJiBQWEVfT1BGTEFHU19NQ0FTVF9JUFY2X1RPX01BQykgIT0gMCkgew0KPiAr ICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAg ICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9VTlNVUFBPUlRFRDsNCj4gKyAgICByZXR1 cm47DQo+ICsgIH0NCj4gKw0KPiArICBUbXAgPSAoVUlOVDggKikoJkNwYi0+SVAuSVB2NCk7DQo+ ICsNCj4gKyAgaWYgKChUbXBbMF0gJiAweEYwKSAhPSAweEUwKSB7DQo+ICsgICAgQ2RiLT5TdGF0 RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENv ZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ1BCOw0KPiArICB9DQo+ICsNCj4gKyAgRGItPk1B Q1swXSA9IDB4MDE7DQo+ICsgIERiLT5NQUNbMV0gPSAweDAwOw0KPiArICBEYi0+TUFDWzJdID0g MHg1RTsNCj4gKyAgRGItPk1BQ1szXSA9IFRtcFsxXSAmIDB4N0Y7DQo+ICsgIERiLT5NQUNbNF0g PSBUbXBbMl07DQo+ICsgIERiLT5NQUNbNV0gPSBUbXBbM107DQo+ICsNCj4gKyAgaWYgKE5pYy0+ VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlNY2FzdElwMk1hYyAhPSBOVUxMKSB7DQo+ICsg ICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaU1jYXN0SXAyTWFj IChDZGIsIE5pYyk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAg Q2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0N Cj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8g cmVhZCBhbmQgd3JpdGUgKGlmIHN1cHBvcnRlZCBieSBOSUMgSC9XKQ0KPiArICBub252b2xhdGls ZSBzdG9yYWdlIG9uIHRoZSBOSUMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50 ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmlj ICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4g Kw0KPiArKiovDQo+ICtWT0lEDQo+ICtVbmRpTnZEYXRhICgNCj4gKyAgSU4gIFBYRV9DREIgICAq Q2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RB VFVTICBTdGF0dXM7DQo+ICsNCj4gKyAgQ2RiLT5TdGF0Q29kZSA9IFBYRV9TVEFUQ09ERV9VTlNV UFBPUlRFRDsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlOdkRh dGEgIT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVz YkV0aFVuZGlOdkRhdGEgKENkYiwgTmljKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlM RUQ7DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRG TEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RB VENPREVfU1VDQ0VTUzsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg IFRoaXMgY29tbWFuZCByZXR1cm5zIHRoZSBjdXJyZW50IGludGVycnVwdCBzdGF0dXMgYW5kL29y IHRoZQ0KPiArICB0cmFuc21pdHRlZCBidWZmZXIgYWRkcmVzc2VzIGFuZCB0aGUgY3VycmVudCBt ZWRpYSBzdGF0dXMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhl IGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50 ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArKiov DQo+ICtWT0lEDQo+ICtVbmRpR2V0U3RhdHVzICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0K PiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBQWEVfREJfR0VUX1NU QVRVUyAgKkRiOw0KPiArICBQWEVfREJfR0VUX1NUQVRVUyAgVG1wR2V0U3RhdHVzOw0KPiArICBV SU5UMTYgICAgICAgICAgICAgTnVtRW50cmllczsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgIElu ZGV4Ow0KPiArICBFRklfU1RBVFVTICAgICAgICAgU3RhdHVzOw0KPiArDQo+ICsgIGlmICgoQ2Ri LT5PcENvZGUgIT0gUFhFX09QQ09ERV9HRVRfU1RBVFVTKSB8fA0KPiArICAgICAgKENkYi0+U3Rh dENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0 RmxhZ3MgIT0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+SUZu dW0gPj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkpIHx8DQo+ICsgICAgICAo Q2RiLT5DUEJzaXplICE9IFBYRV9DUEJTSVpFX05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+ Q1BCYWRkciAhPSBQWEVfQ1BCQUREUl9OT1RfVVNFRCkpDQo+ICsgIHsNCj4gKyAgICBDZGItPlN0 YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0 Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9 IGVsc2Ugew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NP TVBMRVRFOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5TdGF0ZSAhPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFU RV9JTklUSUFMSVpFRCkgew0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX05P VF9JTklUSUFMSVpFRDsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09N TUFORF9GQUlMRUQ7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgVG1wR2V0U3Rh dHVzLlJ4RnJhbWVMZW4gPSAwOw0KPiArICBUbXBHZXRTdGF0dXMucmVzZXJ2ZWQgICA9IDA7DQo+ ICsgIERiICAgICAgICAgICAgICAgICAgICAgID0gKFBYRV9EQl9HRVRfU1RBVFVTICopKFVJTlRO KUNkYi0+REJhZGRyOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5EQnNpemUgPiAwKSAmJiAoQ2RiLT5E QnNpemUgPCBzaXplb2YgKFVJTlQzMikgKiAyKSkgew0KPiArICAgIENvcHlNZW0gKERiLCAmVG1w R2V0U3RhdHVzLCBDZGItPkRCc2l6ZSk7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgQ29weU1lbSAo RGIsICZUbXBHZXRTdGF0dXMsIHNpemVvZiAoVUlOVDMyKSAqIDIpOw0KPiArICB9DQo+ICsNCj4g KyAgaWYgKChDZGItPk9wRmxhZ3MgJiBQWEVfT1BGTEFHU19HRVRfVFJBTlNNSVRURURfQlVGRkVS UykgIT0gMCkgew0KPiArICAgIGlmIChDZGItPkRCc2l6ZSA9PSAwKSB7DQo+ICsgICAgICBDZGIt PlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgICBDZGIt PlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICAgIHJldHVybjsN Cj4gKyAgICB9DQo+ICsNCj4gKyAgICBOdW1FbnRyaWVzICA9IENkYi0+REJzaXplIC0gc2l6ZW9m IChVSU5UNjQpOw0KPiArICAgIENkYi0+REJzaXplID0gc2l6ZW9mIChVSU5UMzIpICogMjsNCj4g Kw0KPiArICAgIGZvciAoSW5kZXggPSAwOyBOdW1FbnRyaWVzID49IHNpemVvZiAoVUlOVDY0KTsg SW5kZXgrKywgTnVtRW50cmllcyAtPQ0KPiBzaXplb2YgKFVJTlQ2NCkpIHsNCj4gKyAgICAgIGlm IChOaWMtPlR4QnVmZmVyQ291bnQgPiAwKSB7DQo+ICsgICAgICAgIE5pYy0+VHhCdWZmZXJDb3Vu dC0tOw0KPiArICAgICAgICBEYi0+VHhCdWZmZXJbSW5kZXhdID0gTmljLT5NZWRpYUhlYWRlcltO aWMtPlR4QnVmZmVyQ291bnRdOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ ICsgIGlmICgoQ2RiLT5PcEZsYWdzICYgUFhFX09QRkxBR1NfR0VUX0lOVEVSUlVQVF9TVEFUVVMp ICE9IDApIHsNCj4gKyAgICBpZiAoTmljLT5SZWNlaXZlU3RhdHVzICE9IDApIHsNCj4gKyAgICAg IENkYi0+U3RhdEZsYWdzIHw9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRVU19SRUNFSVZFOw0KPiAr ICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgoTmljLT5SZXF1ZXN0LlJlcXVlc3QgPT0gVVNC X0NEQ19ORVRXT1JLX0NPTk5FQ1RJT04pICYmDQo+IChOaWMtPlJlcXVlc3QuVmFsdWUgPT0gTkVU V09SS19ESVNDT05ORUNUKSkgew0KPiArICAgIE5pYy0+Q2FibGVEZXRlY3QgPSAwOw0KPiArICB9 IGVsc2UgaWYgKChOaWMtPlJlcXVlc3QuUmVxdWVzdCA9PSBVU0JfQ0RDX05FVFdPUktfQ09OTkVD VElPTikNCj4gJiYgKE5pYy0+UmVxdWVzdC5WYWx1ZSA9PSBORVRXT1JLX0NPTk5FQ1RFRCkpIHsN Cj4gKyAgICBOaWMtPkNhYmxlRGV0ZWN0ID0gMTsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgoQ2Ri LT5PcEZsYWdzICYgUFhFX09QRkxBR1NfR0VUX01FRElBX1NUQVRVUykgIT0gMCkgew0KPiArICAg IGlmIChOaWMtPkNhYmxlRGV0ZWN0ID09IDApIHsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdzIHw9 IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRVU19OT19NRURJQTsNCj4gKyAgICB9DQo+ICsgIH0NCj4g Kw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaUdldFN0YXR1cyAh PSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRo VW5kaUdldFN0YXR1cyAoQ2RiLCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxF RDsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFu ZCBpcyB1c2VkIHRvIGZpbGwgdGhlIG1lZGlhIGhlYWRlcihzKSBpbiB0cmFuc21pdCBwYWNrZXQo cykuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQg ZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhl IE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArKiovDQo+ICtWT0lE DQo+ICtVbmRpRmlsbEhlYWRlciAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4g IE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgUFhFX0NQQl9GSUxMX0hFQURFUiAg ICAgICAgICAgICAqQ3BiRmlsbEhlYWRlcjsNCj4gKyAgUFhFX0NQQl9GSUxMX0hFQURFUl9GUkFH TUVOVEVEICAqQ3BiRmlsbDsNCj4gKyAgRXRoZXJuZXRIZWFkZXIgICAgICAgICAgICAgICAgICAq TWFjSGVhZGVyOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0K PiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBp ZiAoKENkYi0+T3BDb2RlICE9IFBYRV9PUENPREVfRklMTF9IRUFERVIpIHx8DQo+ICsgICAgICAo Q2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENPREVfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChD ZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAo Q2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCj4g KyAgICAgIChDZGItPkNQQnNpemUgIT0gc2l6ZW9mIChQWEVfQ1BCX0ZJTExfSEVBREVSX0ZSQUdN RU5URUQpKSB8fA0KPiArICAgICAgKENkYi0+REJzaXplICE9IFBYRV9EQlNJWkVfTk9UX1VTRUQp IHx8DQo+ICsgICAgICAoQ2RiLT5EQmFkZHIgIT0gUFhFX0RCQUREUl9OT1RfVVNFRCkpDQo+ICsg IHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7 DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsg ICAgcmV0dXJuOw0KPiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NU QVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NU QVRDT0RFX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5TdGF0ZSAhPSBQWEVf U1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KPiArICAgIENkYi0+U3RhdENvZGUg ID0gUFhFX1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9 IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ ICsNCj4gKyAgaWYgKENkYi0+Q1BCc2l6ZSA9PSBQWEVfQ1BCU0laRV9OT1RfVVNFRCkgew0KPiAr ICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAg ICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1 cm47DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoKENkYi0+T3BGbGFncyAmIFBYRV9PUEZMQUdTX0ZJ TExfSEVBREVSX0ZSQUdNRU5URUQpICE9IDApIHsNCj4gKyAgICBDcGJGaWxsID0gKFBYRV9DUEJf RklMTF9IRUFERVJfRlJBR01FTlRFRCAqKShVSU5UTilDZGItPkNQQmFkZHI7DQo+ICsNCj4gKyAg ICBpZiAoKENwYkZpbGwtPkZyYWdDbnQgPT0gMCkgfHwgKENwYkZpbGwtPkZyYWdEZXNjWzBdLkZy YWdMZW4gPA0KPiBQWEVfTUFDX0hFQURFUl9MRU5fRVRIRVIpKSB7DQo+ICsgICAgICBDZGItPlN0 YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgICBDZGItPlN0 YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICAgIHJldHVybjsNCj4g KyAgICB9DQo+ICsNCj4gKyAgICBNYWNIZWFkZXIgICAgICAgICAgID0gKEV0aGVybmV0SGVhZGVy ICopKFVJTlROKUNwYkZpbGwtDQo+ID5GcmFnRGVzY1swXS5GcmFnQWRkcjsNCj4gKyAgICBNYWNI ZWFkZXItPlByb3RvY29sID0gQ3BiRmlsbC0+UHJvdG9jb2w7DQo+ICsNCj4gKyAgICBmb3IgKElu ZGV4ID0gMDsgSW5kZXggPCBQWEVfSFdBRERSX0xFTl9FVEhFUjsgSW5kZXgrKykgew0KPiArICAg ICAgTWFjSGVhZGVyLT5EZXN0QWRkcltJbmRleF0gPSBDcGJGaWxsLT5EZXN0QWRkcltJbmRleF07 DQo+ICsgICAgICBNYWNIZWFkZXItPlNyY0FkZHJbSW5kZXhdICA9IENwYkZpbGwtPlNyY0FkZHJb SW5kZXhdOw0KPiArICAgIH0NCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBDcGJGaWxsSGVhZGVyID0g KFBYRV9DUEJfRklMTF9IRUFERVIgKikoVUlOVE4pQ2RiLT5DUEJhZGRyOw0KPiArDQo+ICsgICAg TWFjSGVhZGVyICAgICAgICAgICA9IChFdGhlcm5ldEhlYWRlciAqKShVSU5UTilDcGJGaWxsSGVh ZGVyLQ0KPiA+TWVkaWFIZWFkZXI7DQo+ICsgICAgTWFjSGVhZGVyLT5Qcm90b2NvbCA9IENwYkZp bGxIZWFkZXItPlByb3RvY29sOw0KPiArDQo+ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwg UFhFX0hXQUREUl9MRU5fRVRIRVI7IEluZGV4KyspIHsNCj4gKyAgICAgIE1hY0hlYWRlci0+RGVz dEFkZHJbSW5kZXhdID0gQ3BiRmlsbEhlYWRlci0+RGVzdEFkZHJbSW5kZXhdOw0KPiArICAgICAg TWFjSGVhZGVyLT5TcmNBZGRyW0luZGV4XSAgPSBDcGJGaWxsSGVhZGVyLT5TcmNBZGRyW0luZGV4 XTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVu ZGkuVXNiRXRoVW5kaUZpbGxIZWFkZXIgIT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5pYy0+ VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlGaWxsSGVhZGVyIChDZGIsIE5pYyk7DQo+ICsg ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQ WEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAgVGhlIFRyYW5zbWl0IGNvbW1hbmQgaXMgdXNlZCB0byBwbGFjZSBhIHBh Y2tldCBpbnRvIHRoZSB0cmFuc21pdCBxdWV1ZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIg IEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1b aW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBk YXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlUcmFuc21pdCAoDQo+ICsgIElOICBQ WEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4g KyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcENvZGUgIT0gUFhF X09QQ09ERV9UUkFOU01JVCkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFU Q09ERV9JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdzICE9IFBYRV9TVEFU RkxBR1NfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNu dCB8IGdQeGUtPklGY250RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENkYi0+Q1BCc2l6ZSAhPSBz aXplb2YgKFBYRV9DUEJfVFJBTlNNSVQpKSB8fA0KPiArICAgICAgKENkYi0+REJzaXplICE9IFBY RV9EQlNJWkVfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5EQmFkZHIgIT0gUFhFX0RCQURE Ul9OT1RfVVNFRCkpDQo+ICsgIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxB R1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVf SU5WQUxJRF9DREI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+ U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAgIENkYi0+ U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAo TmljLT5TdGF0ZSAhPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KPiAr ICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAg ICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfSU5JVElBTElaRUQ7DQo+ICsgICAg cmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKENkYi0+Q1BCc2l6ZSA9PSBQWEVfQ1BCU0la RV9OT1RfVVNFRCkgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01N QU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElE X0NEQjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5Vc2JFdGgt PlVzYkV0aFVuZGkuVXNiRXRoVW5kaVRyYW5zbWl0ICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMg PSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpVHJhbnNtaXQgKENkYiwgTmljKTsN Cj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFn cyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAg cmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgQ2RiLT5TdGF0Q29kZSA9IFRyYW5zbWl0IChDZGIs IE5pYywgQ2RiLT5DUEJhZGRyLCBDZGItPk9wRmxhZ3MpOw0KPiArDQo+ICsgIGlmIChDZGItPlN0 YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9TVUNDRVNTKSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3Mg PSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICBVc2UgVVNCIEV0aGVybmV0IFByb3RvY29sIEJ1bGsgb3V0IGNvbW1hbmQgdG8gdHJh bnNtaXQgZGF0YS4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgICAgQ2RiICAgICAgQSBwb2ludGVy IHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBO aWMgICAgICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0 YS4NCj4gKyAgQHBhcmFtW2luXSAgICAgIENwYkFkZHIgIENvbW1hbmQgUGFyYW1ldGVyIEJsb2Nr IEFkZHJlc3MuDQo+ICsgIEBwYXJhbVtpbl0gICAgICBPcEZsYWdzICBPcGVyYXRpb24gRmxhZ3Mu DQo+ICsNCj4gKyoqLw0KPiArVUlOVDE2DQo+ICtUcmFuc21pdCAoDQo+ICsgIElOICAgICAgUFhF X0NEQiAgICpDZGIsDQo+ICsgIElOIE9VVCAgTklDX0RBVEEgICpOaWMsDQo+ICsgIElOICAgICAg VUlOVDY0ICAgIENwYkFkZHIsDQo+ICsgIElOICAgICAgVUlOVDE2ICAgIE9wRmxhZ3MNCj4gKyAg KQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICBTdGF0dXM7DQo+ICsgIFBYRV9DUEJfVFJB TlNNSVQgICpDcGI7DQo+ICsgIFVJTlQ2NCAgICAgICAgICAgIEJ1bGtPdXREYXRhOw0KPiArICBV SU5UTiAgICAgICAgICAgICBEYXRhTGVuZ3RoOw0KPiArICBVSU5UTiAgICAgICAgICAgICBUcmFu c21pdExlbmd0aDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgTWFwOw0KPiArICBVSU5UMzIgICAg ICAgICAgICBDb3VudGVyOw0KPiArICBVSU5UMTYgICAgICAgICAgICBTdGF0Q29kZTsNCj4gKw0K PiArICBCdWxrT3V0RGF0YSA9IDA7DQo+ICsgIENvdW50ZXIgICAgID0gMDsNCj4gKyAgQ3BiICAg ICAgICAgPSAoUFhFX0NQQl9UUkFOU01JVCAqKShVSU5UTilDcGJBZGRyOw0KPiArDQo+ICsgIGlm IChOaWMtPkNhblRyYW5zbWl0KSB7DQo+ICsgICAgcmV0dXJuIFBYRV9TVEFUQ09ERV9CVVNZOw0K PiArICB9DQo+ICsNCj4gKyAgTmljLT5DYW5UcmFuc21pdCA9IFRSVUU7DQo+ICsNCj4gKyAgaWYg KChPcEZsYWdzICYgUFhFX09QRkxBR1NfVFJBTlNNSVRfRlJBR01FTlRFRCkgIT0gMCkgew0KPiAr ICAgIHJldHVybiBQWEVfU1RBVENPREVfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgIH0NCj4gKw0K PiArICBNYXAgPSBNYXBJdCAoDQo+ICsgICAgICAgICAgTmljLA0KPiArICAgICAgICAgIENwYi0+ RnJhbWVBZGRyLA0KPiArICAgICAgICAgIENwYi0+RGF0YUxlbiArIChVSU5UMzIpQ3BiLT5NZWRp YWhlYWRlckxlbiwNCj4gKyAgICAgICAgICBUT19ERVZJQ0UsDQo+ICsgICAgICAgICAgKFVJTlQ2 NCkoVUlOVE4pJkJ1bGtPdXREYXRhDQo+ICsgICAgICAgICAgKTsNCj4gKw0KPiArICBpZiAoTWFw ICE9IDApIHsNCj4gKyAgICBOaWMtPkNhblRyYW5zbWl0ID0gRkFMU0U7DQo+ICsgICAgcmV0dXJu IFBYRV9TVEFUQ09ERV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChO aWMtPlR4QnVmZmVyQ291bnQgPCBNQVhfWE1JVF9CVUZGRVJTKSB7DQo+ICsgICAgTmljLT5NZWRp YUhlYWRlcltOaWMtPlR4QnVmZmVyQ291bnRdID0gQ3BiLT5GcmFtZUFkZHI7DQo+ICsgICAgTmlj LT5UeEJ1ZmZlckNvdW50Kys7DQo+ICsgIH0NCj4gKw0KPiArICBEYXRhTGVuZ3RoID0gKFVJTlRO KShDcGItPkRhdGFMZW4gKyAoVUlOVDMyKUNwYi0+TWVkaWFoZWFkZXJMZW4pOw0KPiArDQo+ICsg IHdoaWxlICgxKSB7DQo+ICsgICAgaWYgKENvdW50ZXIgPj0gMykgew0KPiArICAgICAgU3RhdENv ZGUgPSBQWEVfU1RBVENPREVfQlVTWTsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIH0NCj4gKw0K PiArICAgIFRyYW5zbWl0TGVuZ3RoID0gRGF0YUxlbmd0aDsNCj4gKw0KPiArICAgIFN0YXR1cyA9 IE5pYy0+VXNiRXRoLT5Vc2JFdGhUcmFuc21pdCAoQ2RiLCBOaWMtPlVzYkV0aCwgKFZPSUQNCj4g KikoVUlOVE4pQnVsa091dERhdGEsICZUcmFuc21pdExlbmd0aCk7DQo+ICsgICAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgU3RhdENvZGUgPSAgUFhFX1NUQVRGTEFHU19DT01N QU5EX0ZBSUxFRDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoU3RhdHVzID09IEVGSV9JTlZB TElEX1BBUkFNRVRFUikgew0KPiArICAgICAgU3RhdENvZGUgPSBQWEVfU1RBVENPREVfSU5WQUxJ RF9QQVJBTUVURVI7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAo U3RhdHVzID09IEVGSV9ERVZJQ0VfRVJST1IpIHsNCj4gKyAgICAgIFN0YXRDb2RlID0gUFhFX1NU QVRDT0RFX0RFVklDRV9GQUlMVVJFOw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgfQ0KPiArDQo+ ICsgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIE5pYy0+VHhGcmFtZSsr Ow0KPiArICAgICAgU3RhdENvZGUgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gKyAgICAgIGJy ZWFrOw0KPiArICAgIH0NCj4gKw0KPiArICAgIENvdW50ZXIrKzsNCj4gKyAgfQ0KPiArDQo+ICsg IFVuTWFwSXQgKA0KPiArICAgIE5pYywNCj4gKyAgICBDcGItPkZyYW1lQWRkciwNCj4gKyAgICBD cGItPkRhdGFMZW4gKyAoVUlOVDMyKUNwYi0+TWVkaWFoZWFkZXJMZW4sDQo+ICsgICAgVE9fREVW SUNFLA0KPiArICAgIEJ1bGtPdXREYXRhDQo+ICsgICAgKTsNCj4gKw0KPiArICBOaWMtPkNhblRy YW5zbWl0ID0gRkFMU0U7DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXRDb2RlOw0KPiArfQ0KPiArDQo+ ICsvKioNCj4gKyAgV2hlbiB0aGUgbmV0d29yayBhZGFwdGVyIGhhcyByZWNlaXZlZCBhIGZyYW1l LCB0aGlzIGNvbW1hbmQgaXMgdXNlZA0KPiArICB0byBjb3B5IHRoZSBmcmFtZSBpbnRvIGRyaXZl ci9hcHBsaWNhdGlvbiBzdG9yYWdlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2lu dGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5p YyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArVW5kaVJlY2VpdmUgKA0KPiArICBJTiAgUFhFX0NEQiAg ICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9T VEFUVVMgIFN0YXR1czsNCj4gKw0KPiArICBpZiAoKENkYi0+T3BDb2RlICE9IFBYRV9PUENPREVf UkVDRUlWRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9JTklU SUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdzICE9IFBYRV9TVEFURkxBR1NfSU5J VElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUt PklGY250RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENkYi0+Q1BCc2l6ZSAhPSBzaXplb2YgKFBY RV9DUEJfUkVDRUlWRSkpIHx8DQo+ICsgICAgICAoQ2RiLT5EQnNpemUgIT0gc2l6ZW9mIChQWEVf REJfUkVDRUlWRSkpIHx8DQo+ICsgICAgICAoQ2RiLT5PcEZsYWdzICE9IFBYRV9PUEZMQUdTX05P VF9VU0VEKSkNCj4gKyAgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19D T01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZB TElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgQ2RiLT5TdGF0 RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09NUExFVEU7DQo+ICsgICAgQ2RiLT5TdGF0 Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMt PlN0YXRlICE9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX0lOSVRJQUxJWkVEKSB7DQo+ICsgICAg Q2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENk Yi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCj4gKyAgICByZXR1 cm47DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRo VW5kaVJlY2VpdmUgIT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JF dGhVbmRpLlVzYkV0aFVuZGlSZWNlaXZlIChDZGIsIE5pYyk7DQo+ICsgICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NP TU1BTkRfRkFJTEVEOw0KPiArICAgIH0NCj4gKw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiAr DQo+ICsgIENkYi0+U3RhdENvZGUgPSBSZWNlaXZlIChDZGIsIE5pYywgQ2RiLT5DUEJhZGRyLCBD ZGItPkRCYWRkcik7DQo+ICsNCj4gKyAgaWYgKENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RF X1NVQ0NFU1MpIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFO RF9GQUlMRUQ7DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFVzZSBVU0IgRXRoZXJu ZXQgUHJvdG9jb2wgQnVsayBpbiBjb21tYW5kIHRvIHJlY2VpdmUgZGF0YS4NCj4gKw0KPiArICBA cGFyYW1baW5dICAgICAgQ2RiICAgICAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0 b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBOaWMgICAgICBBIHBvaW50ZXIgdG8gdGhl IE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKyAgQHBhcmFtW2luXSAgICAg IENwYkFkZHIgIENvbW1hbmQgUGFyYW1ldGVyIEJsb2NrIEFkZHJlc3MuDQo+ICsgIEBwYXJhbVtp biwgb3V0XSBEYkFkZHIgICBEYXRhIEJsb2NrIEFkZHJlc3MuDQo+ICsNCj4gKyoqLw0KPiArVUlO VDE2DQo+ICtSZWNlaXZlICgNCj4gKyAgSU4gUFhFX0NEQiAgICAgICAqQ2RiLA0KPiArICBJTiBP VVQgTklDX0RBVEEgICpOaWMsDQo+ICsgIElOIFVJTlQ2NCAgICAgICAgQ3BiQWRkciwNCj4gKyAg SU4gT1VUIFVJTlQ2NCAgICBEYkFkZHINCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAg ICAgIFN0YXR1czsNCj4gKyAgVUlOVE4gICAgICAgICAgICBJbmRleDsNCj4gKyAgUFhFX0ZSQU1F X1RZUEUgICBGcmFtZVR5cGU7DQo+ICsgIFBYRV9DUEJfUkVDRUlWRSAgKkNwYjsNCj4gKyAgUFhF X0RCX1JFQ0VJVkUgICAqRGI7DQo+ICsgIE5JQ19ERVZJQ0UgICAgICAgKk5pY0RldmljZTsNCj4g KyAgVUlOVDggICAgICAgICAgICAqQnVsa0luRGF0YTsNCj4gKyAgVUlOVE4gICAgICAgICAgICBE YXRhTGVuZ3RoOw0KPiArICBFdGhlcm5ldEhlYWRlciAgICpIZWFkZXI7DQo+ICsgIEVGSV9UUEwg ICAgICAgICAgT3JpZ2luYWxUcGw7DQo+ICsNCj4gKyAgRnJhbWVUeXBlICA9IFBYRV9GUkFNRV9U WVBFX05PTkU7DQo+ICsgIE5pY0RldmljZSAgPSBVTkRJX0RFVl9GUk9NX05JQyAoTmljKTsNCj4g KyAgQnVsa0luRGF0YSA9IE5pY0RldmljZS0+UmVjZWl2ZUJ1ZmZlcjsNCj4gKyAgRGF0YUxlbmd0 aCA9IChVSU5UTilOaWMtPk1heFNlZ21lbnRTaXplOw0KPiArICBDcGIgICAgICAgID0gKFBYRV9D UEJfUkVDRUlWRSAqKShVSU5UTilDcGJBZGRyOw0KPiArICBEYiAgICAgICAgID0gKFBYRV9EQl9S RUNFSVZFICopKFVJTlROKURiQWRkcjsNCj4gKw0KPiArICBpZiAoIUJ1bGtJbkRhdGEpIHsNCj4g KyAgICByZXR1cm4gUFhFX1NUQVRDT0RFX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsN Cj4gKyAgaWYgKChOaWMtPlJhdGVMaW1pdGluZ0NyZWRpdENvdW50ID09IDApICYmIChOaWMtPlJh dGVMaW1pdGluZ0VuYWJsZSA9PQ0KPiBUUlVFKSkgew0KPiArICAgIHJldHVybiBQWEVfU1RBVENP REVfTk9fREFUQTsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JF dGhSZWNlaXZlIChDZGIsIE5pYy0+VXNiRXRoLCAoVk9JRA0KPiAqKUJ1bGtJbkRhdGEsICZEYXRh TGVuZ3RoKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIE5pYy0+UmVj ZWl2ZVN0YXR1cyA9IDA7DQo+ICsgICAgaWYgKE5pYy0+UmF0ZUxpbWl0aW5nRW5hYmxlID09IFRS VUUpIHsNCj4gKyAgICAgIE9yaWdpbmFsVHBsID0gZ0JTLT5SYWlzZVRQTCAoVFBMX05PVElGWSk7 DQo+ICsgICAgICBpZiAoTmljLT5SYXRlTGltaXRpbmdDcmVkaXRDb3VudCAhPSAwKSB7DQo+ICsg ICAgICAgIE5pYy0+UmF0ZUxpbWl0aW5nQ3JlZGl0Q291bnQtLTsNCj4gKyAgICAgIH0NCj4gKw0K PiArICAgICAgZ0JTLT5SZXN0b3JlVFBMIChPcmlnaW5hbFRwbCk7DQo+ICsgICAgfQ0KPiArDQo+ ICsgICAgcmV0dXJuIFBYRV9TVEFUQ09ERV9OT19EQVRBOw0KPiArICB9DQo+ICsNCj4gKyAgTmlj LT5SeEZyYW1lKys7DQo+ICsNCj4gKyAgaWYgKERhdGFMZW5ndGggIT0gMCkgew0KPiArICAgIGlm IChEYXRhTGVuZ3RoID4gQ3BiLT5CdWZmZXJMZW4pIHsNCj4gKyAgICAgIERhdGFMZW5ndGggPSAo VUlOVE4pQ3BiLT5CdWZmZXJMZW47DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgQ29weU1lbSAoKFVJ TlQ4ICopKFVJTlROKUNwYi0+QnVmZmVyQWRkciwgKFVJTlQ4ICopQnVsa0luRGF0YSwNCj4gRGF0 YUxlbmd0aCk7DQo+ICsNCj4gKyAgICBIZWFkZXIgPSAoRXRoZXJuZXRIZWFkZXIgKilCdWxrSW5E YXRhOw0KPiArDQo+ICsgICAgRGItPkZyYW1lTGVuICAgICAgID0gKFVJTlQzMilEYXRhTGVuZ3Ro Ow0KPiArICAgIERiLT5NZWRpYUhlYWRlckxlbiA9IFBYRV9NQUNfSEVBREVSX0xFTl9FVEhFUjsN Cj4gKw0KPiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFBYRV9IV0FERFJfTEVOX0VUSEVS OyBJbmRleCsrKSB7DQo+ICsgICAgICBpZiAoSGVhZGVyLT5EZXN0QWRkcltJbmRleF0gIT0gTmlj LT5DdXJyZW50Tm9kZUFkZHJlc3NbSW5kZXhdKSB7DQo+ICsgICAgICAgIGJyZWFrOw0KPiArICAg ICAgfQ0KPiArICAgIH0NCj4gKw0KPiArICAgIGlmIChJbmRleCA+PSBQWEVfSFdBRERSX0xFTl9F VEhFUikgew0KPiArICAgICAgRnJhbWVUeXBlID0gUFhFX0ZSQU1FX1RZUEVfVU5JQ0FTVDsNCj4g KyAgICB9IGVsc2Ugew0KPiArICAgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUFhFX0hXQURE Ul9MRU5fRVRIRVI7IEluZGV4KyspIHsNCj4gKyAgICAgICAgaWYgKEhlYWRlci0+RGVzdEFkZHJb SW5kZXhdICE9IE5pYy0+QnJvYWRjYXN0Tm9kZUFkZHJlc3NbSW5kZXhdKSB7DQo+ICsgICAgICAg ICAgYnJlYWs7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgaWYgKElu ZGV4ID49IFBYRV9IV0FERFJfTEVOX0VUSEVSKSB7DQo+ICsgICAgICAgIEZyYW1lVHlwZSA9IFBY RV9GUkFNRV9UWVBFX0JST0FEQ0FTVDsNCj4gKyAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgIGlm ICgoSGVhZGVyLT5EZXN0QWRkclswXSAmIDEpID09IDEpIHsNCj4gKyAgICAgICAgICBGcmFtZVR5 cGUgPSBQWEVfRlJBTUVfVFlQRV9GSUxURVJFRF9NVUxUSUNBU1Q7DQo+ICsgICAgICAgIH0gZWxz ZSB7DQo+ICsgICAgICAgICAgRnJhbWVUeXBlID0gUFhFX0ZSQU1FX1RZUEVfUFJPTUlTQ1VPVVM7 DQo+ICsgICAgICAgIH0NCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsNCj4gKyAgICBEYi0+VHlw ZSAgICAgPSBGcmFtZVR5cGU7DQo+ICsgICAgRGItPlByb3RvY29sID0gSGVhZGVyLT5Qcm90b2Nv bDsNCj4gKw0KPiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFBYRV9IV0FERFJfTEVOX0VU SEVSOyBJbmRleCsrKSB7DQo+ICsgICAgICBEYi0+U3JjQWRkcltJbmRleF0gID0gSGVhZGVyLT5T cmNBZGRyW0luZGV4XTsNCj4gKyAgICAgIERiLT5EZXN0QWRkcltJbmRleF0gPSBIZWFkZXItPkRl c3RBZGRyW0luZGV4XTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoRnJhbWVUeXBl ID09IFBYRV9GUkFNRV9UWVBFX05PTkUpIHsNCj4gKyAgICBOaWMtPlJlY2VpdmVTdGF0dXMgPSAw Ow0KPiArICB9IGVsc2Ugew0KPiArICAgIE5pYy0+UmVjZWl2ZVN0YXR1cyA9IDE7DQo+ICsgIH0N Cj4gKw0KPiArICByZXR1cm4gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICBGaWxsIG91dCBQWEUgU1cgVU5ESSBzdHJ1Y3R1cmUuDQo+ICsNCj4gKyAgQHBhcmFt W291dF0gIFB4ZVN3ICAgICAgQSBwb2ludGVyIHRvIHRoZSBQWEUgU1cgVU5ESSBzdHJ1Y3R1cmUu DQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArUHhlU3RydWN0SW5pdCAoDQo+ICsgIE9VVCBQWEVf U1dfVU5ESSAgKlB4ZVN3DQo+ICsgICkNCj4gK3sNCj4gKyAgUHhlU3ctPlNpZ25hdHVyZSA9IFBY RV9ST01JRF9TSUdOQVRVUkU7DQo+ICsgIFB4ZVN3LT5MZW4gICAgICAgPSAoVUlOVDgpc2l6ZW9m IChQWEVfU1dfVU5ESSk7DQo+ICsgIFB4ZVN3LT5GdWRnZSAgICAgPSAwOw0KPiArICBQeGVTdy0+ SUZjbnQgICAgID0gMDsNCj4gKyAgUHhlU3ctPklGY250RXh0ICA9IDA7DQo+ICsgIFB4ZVN3LT5S ZXYgICAgICAgPSBQWEVfUk9NSURfUkVWOw0KPiArICBQeGVTdy0+TWFqb3JWZXIgID0gUFhFX1JP TUlEX01BSk9SVkVSOw0KPiArICBQeGVTdy0+TWlub3JWZXIgID0gUFhFX1JPTUlEX01JTk9SVkVS Ow0KPiArICBQeGVTdy0+cmVzZXJ2ZWQxID0gMDsNCj4gKw0KPiArICBQeGVTdy0+SW1wbGVtZW50 YXRpb24gPSBQWEVfUk9NSURfSU1QX1NXX1ZJUlRfQUREUiB8DQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgIFBYRV9ST01JRF9JTVBfRlJBR19TVVBQT1JURUQgfA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICBQWEVfUk9NSURfSU1QX0NNRF9MSU5LX1NVUFBPUlRFRCB8DQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgIFBYRV9ST01JRF9JTVBfU1RBVElPTl9BRERSX1NFVFRBQkxF IHwNCj4gKw0KPiBQWEVfUk9NSURfSU1QX1BST01JU0NVT1VTX01VTFRJQ0FTVF9SWF9TVVBQT1JU RUQgfA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICBQWEVfUk9NSURfSU1QX1BST01JU0NV T1VTX1JYX1NVUFBPUlRFRCB8DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIFBYRV9ST01J RF9JTVBfQlJPQURDQVNUX1JYX1NVUFBPUlRFRCB8DQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgIFBYRV9ST01JRF9JTVBfRklMVEVSRURfTVVMVElDQVNUX1JYX1NVUFBPUlRFRDsNCj4gKw0K PiArICBQeGVTdy0+RW50cnlQb2ludCAgID0gKFVJTlQ2NCkoVUlOVE4pVW5kaUFwaUVudHJ5Ow0K PiArICBQeGVTdy0+cmVzZXJ2ZWQyWzBdID0gMDsNCj4gKyAgUHhlU3ctPnJlc2VydmVkMlsxXSA9 IDA7DQo+ICsgIFB4ZVN3LT5yZXNlcnZlZDJbMl0gPSAwOw0KPiArICBQeGVTdy0+QnVzQ250ICAg ICAgID0gMTsNCj4gKyAgUHhlU3ctPkJ1c1R5cGVbMF0gICA9IFBYRV9CVVNUWVBFX1VTQjsNCj4g KyAgUHhlU3ctPkZ1ZGdlICAgICAgICA9IFB4ZVN3LT5GdWRnZSAtIENhbGN1bGF0ZVN1bTggKChW T0lEICopUHhlU3csDQo+IFB4ZVN3LT5MZW4pOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVXBk YXRlIE5JQyBudW1iZXIuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIE5pYyAgICAgICBBIHBv aW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKyAgQHBh cmFtW2luLCBvdXRdIFB4ZVN3ICAgICBBIHBvaW50ZXIgdG8gdGhlIFBYRSBTVyBVTkRJIHN0cnVj dHVyZS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtVcGRhdGVOaWNOdW0gKA0KPiArICBJTiAg ICAgIE5JQ19EQVRBICAgICAqTmljLA0KPiArICBJTiBPVVQgIFBYRV9TV19VTkRJICAqUHhlU3cN Cj4gKyAgKQ0KPiArew0KPiArICBVSU5UMTYgIE5pY051bTsNCj4gKw0KPiArICBOaWNOdW0gPSAo UHhlU3ctPklGY250IHwgUHhlU3ctPklGY250RXh0IDw8IDgpOw0KPiArDQo+ICsgIGlmIChOaWMg PT0gTlVMTCkgew0KPiArICAgIGlmIChOaWNOdW0gPiAwKSB7DQo+ICsgICAgICBOaWNOdW0tLTsN Cj4gKyAgICB9DQo+ICsNCj4gKyAgICBQeGVTdy0+SUZjbnQgICAgPSAoVUlOVDgpKE5pY051bSAm IDB4RkYpOyAgICAgICAgICAvLyBHZXQgbG93ZXIgYnl0ZQ0KPiArICAgIFB4ZVN3LT5JRmNudEV4 dCA9IChVSU5UOCkoKE5pY051bSAmIDB4RkYwMCkgPj4gOCk7IC8vIEdldCB1cHBlciBieXRlDQo+ ICsgICAgUHhlU3ctPkZ1ZGdlICAgID0gKFVJTlQ4KShQeGVTdy0+RnVkZ2UgLSBDYWxjdWxhdGVT dW04ICgoVk9JRA0KPiAqKVB4ZVN3LCBQeGVTdy0+TGVuKSk7DQo+ICsgICAgcmV0dXJuOw0KPiAr ICB9DQo+ICsNCj4gKyAgTmljTnVtKys7DQo+ICsNCj4gKyAgUHhlU3ctPklGY250ICAgID0gKFVJ TlQ4KShOaWNOdW0gJiAweEZGKTsgICAgICAgICAgLy8gR2V0IGxvd2VyIGJ5dGUNCj4gKyAgUHhl U3ctPklGY250RXh0ID0gKFVJTlQ4KSgoTmljTnVtICYgMHhGRjAwKSA+PiA4KTsgLy8gR2V0IHVw cGVyIGJ5dGUNCj4gKyAgUHhlU3ctPkZ1ZGdlICAgID0gKFVJTlQ4KShQeGVTdy0+RnVkZ2UgLSBD YWxjdWxhdGVTdW04ICgoVk9JRCAqKVB4ZVN3LA0KPiBQeGVTdy0+TGVuKSk7DQo+ICt9DQo+ICsN Cj4gKy8qKg0KPiArICBVTkRJIEFQSSB0YWJsZSBlbnRyeS4NCj4gKw0KPiArICBAcGFyYW1baW5d ICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArDQo+ ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVW5kaUFwaUVudHJ5ICgNCj4gKyAg SU4gIFVJTlQ2NCAgQ2RiDQo+ICsgICkNCj4gK3sNCj4gKyAgUFhFX0NEQiAgICpDZGJQdHI7DQo+ ICsgIE5JQ19EQVRBICAqTmljOw0KPiArDQo+ICsgIGlmIChDZGIgPT0gMCkgew0KPiArICAgIHJl dHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgIH0NCj4gKw0KPiArICBDZGJQdHIgPSAo UFhFX0NEQiAqKShVSU5UTilDZGI7DQo+ICsgIE5pYyAgICA9ICYoZ0xhbkRldmljZUxpc3RbQ2Ri UHRyLT5JRm51bV0tPk5pY0luZm8pOw0KPiArICBnVW5kaUFwaVRhYmxlW0NkYlB0ci0+T3BDb2Rl XShDZGJQdHIsIE5pYyk7DQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiAr LyoqDQo+ICsgIE1hcCB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzIGZvciBETUEuIFRoaXMgZmllbGQg Y2FuIGJlIHNldCB0bw0KPiArICB6ZXJvIGlmIHRoZXJlIGlzIG5vIG1hcHBpbmcgc2VydmljZS4N Cj4gKw0KPiArICBAcGFyYW1baW5dICBOaWMgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgTmV0 d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArICBAcGFyYW1baW5dICBNZW1BZGRy ICAgICAgIFZpcnR1YWwgYWRkcmVzcyB0byBiZSBtYXBwZWQuDQo+ICsgIEBwYXJhbVtpbl0gIFNp emUgICAgICAgICAgU2l6ZSBvZiBtZW1vcnkgdG8gYmUgbWFwcGVkLg0KPiArICBAcGFyYW1baW5d ICBEaXJlY3Rpb24gICAgIERpcmVjdGlvbiBvZiBkYXRhIGZsb3cgZm9yIHRoaXMgbWVtb3J5J3Mg dXNhZ2U6DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1LT5kZXZpY2UsIGRldmlj ZS0+Y3B1IG9yIGJvdGggd2F5cy4NCj4gKyAgQHBhcmFtW291dF0gTWFwcGVkQWRkciAgICBQb2lu dGVyIHRvIHJldHVybiB0aGUgbWFwcGVkIGRldmljZSBhZGRyZXNzLg0KPiArDQo+ICsqKi8NCj4g K1VJTlRODQo+ICtNYXBJdCAoDQo+ICsgIElOIE5JQ19EQVRBICAqTmljLA0KPiArICBJTiBVSU5U NjQgICAgTWVtQWRkciwNCj4gKyAgSU4gVUlOVDMyICAgIFNpemUsDQo+ICsgIElOIFVJTlQzMiAg ICBEaXJlY3Rpb24sDQo+ICsgIE9VVCBVSU5UNjQgICBNYXBwZWRBZGRyDQo+ICsgICkNCj4gK3sN Cj4gKyAgVUlOVDY0ICAqUGh5QWRkcjsNCj4gKw0KPiArICBQaHlBZGRyID0gKFVJTlQ2NCAqKShV SU5UTilNYXBwZWRBZGRyOw0KPiArDQo+ICsgIGlmIChOaWMtPlB4ZVN0YXJ0Lk1hcF9NZW0gPT0g MCkgew0KPiArICAgICpQaHlBZGRyID0gTWVtQWRkcjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICAo KHZvaWQgKCopKFVJTlQ2NCwgVUlOVDY0LCBVSU5UMzIsIFVJTlQzMiwgVUlOVDY0KSkoVUlOVE4p IE5pYy0NCj4gPlB4ZVN0YXJ0Lk1hcF9NZW0pKA0KPiArICBOaWMtPlB4ZVN0YXJ0LlVuaXF1ZV9J RCwNCj4gKyAgTWVtQWRkciwNCj4gKyAgU2l6ZSwNCj4gKyAgRGlyZWN0aW9uLA0KPiArICBNYXBw ZWRBZGRyDQo+ICsgICk7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gUFhFX1NUQVRDT0RFX1NV Q0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBVbi1tYXAgcHJldmlvdXNseSBtYXBwZWQg dmlydHVhbCBtZW1vcnkgYWRkcmVzcy4gVGhpcyBmaWVsZCBjYW4gYmUgc2V0DQo+ICsgIHRvIHpl cm8gb25seSBpZiB0aGUgTWFwX01lbSgpIHNlcnZpY2UgaXMgYWxzbyBzZXQgdG8gemVyby4NCj4g Kw0KPiArICBAcGFyYW1baW5dICBOaWMgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgTmV0d29y ayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArICBAcGFyYW1baW5dICBNZW1BZGRyICAg ICAgIFZpcnR1YWwgYWRkcmVzcyB0byBiZSBtYXBwZWQuDQo+ICsgIEBwYXJhbVtpbl0gIFNpemUg ICAgICAgICAgU2l6ZSBvZiBtZW1vcnkgdG8gYmUgbWFwcGVkLg0KPiArICBAcGFyYW1baW5dICBE aXJlY3Rpb24gICAgIERpcmVjdGlvbiBvZiBkYXRhIGZsb3cgZm9yIHRoaXMgbWVtb3J5J3MgdXNh Z2U6DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1LT5kZXZpY2UsIGRldmljZS0+ Y3B1IG9yIGJvdGggd2F5cy4NCj4gKyAgQHBhcmFtW2luXSAgTWFwcGVkQWRkciAgICBQb2ludGVy IHRvIHJldHVybiB0aGUgbWFwcGVkIGRldmljZSBhZGRyZXNzLg0KPiArDQo+ICsqKi8NCj4gK1ZP SUQNCj4gK1VuTWFwSXQgKA0KPiArICBJTiBOSUNfREFUQSAgKk5pYywNCj4gKyAgSU4gVUlOVDY0 ICAgIE1lbUFkZHIsDQo+ICsgIElOIFVJTlQzMiAgICBTaXplLA0KPiArICBJTiBVSU5UMzIgICAg RGlyZWN0aW9uLA0KPiArICBJTiBVSU5UNjQgICAgTWFwcGVkQWRkcg0KPiArICApDQo+ICt7DQo+ ICsgIGlmIChOaWMtPlB4ZVN0YXJ0LlVuTWFwX01lbSAhPSAwKSB7DQo+ICsgICAgKCh2b2lkICgq KShVSU5UNjQsIFVJTlQ2NCwgVUlOVDMyLCBVSU5UMzIsIFVJTlQ2NCkpKFVJTlROKSBOaWMtDQo+ ID5QeGVTdGFydC5Vbk1hcF9NZW0pKA0KPiArICBOaWMtPlB4ZVN0YXJ0LlVuaXF1ZV9JRCwNCj4g KyAgTWVtQWRkciwNCj4gKyAgU2l6ZSwNCj4gKyAgRGlyZWN0aW9uLA0KPiArICBNYXBwZWRBZGRy DQo+ICsgICk7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm47DQo+ICt9DQo+IGRpZmYgLS1naXQN Cj4gYS9NZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL1VzYlJuZGlzL0NvbXBvbmVudE5h bWUuYw0KPiBiL01kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvVXNiUm5kaXMvQ29tcG9u ZW50TmFtZS5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLmI5 YmExNzBjMTMNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9NZGVNb2R1bGVQa2cvQnVzL1VzYi9V c2JOZXR3b3JrL1VzYlJuZGlzL0NvbXBvbmVudE5hbWUuYw0KPiBAQCAtMCwwICsxLDE3MiBAQA0K PiArLyoqIEBmaWxlDQo+ICsgIFRoaXMgZmlsZSBjb250YWlucyBjb2RlIGZvciBVU0IgUk5ESVMg RHJpdmVyIENvbXBvbmVudA0KPiArICBOYW1lIGRlZmluaXRpb25zDQo+ICsNCj4gKyAgQ29weXJp Z2h0IChjKSAyMDIzLCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwg cmlnaHRzDQo+IHJlc2VydmVkLjxCUj4NCj4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJT RC0yLUNsYXVzZS1QYXRlbnQNCj4gKyoqLw0KPiArDQo+ICsjaW5jbHVkZSAiVXNiUm5kaXMuaCIN Cj4gKw0KPiArR0xPQkFMX1JFTU9WRV9JRl9VTlJFRkVSRU5DRUQgRUZJX1VOSUNPREVfU1RSSU5H X1RBQkxFDQo+IGdVc2JSbmRpc0RyaXZlck5hbWVUYWJsZVtdID0gew0KPiArICB7DQo+ICsgICAg ImVuZztlbiIsDQo+ICsgICAgTCJVU0IgUk5ESVMgRHJpdmVyIg0KPiArICB9LA0KPiArICB7DQo+ ICsgICAgTlVMTCwNCj4gKyAgICBOVUxMDQo+ICsgIH0NCj4gK307DQo+ICsNCj4gK0VGSV9TVEFU VVMNCj4gK0VGSUFQSQ0KPiArVXNiUm5kaXNDb21wb25lbnROYW1lR2V0RHJpdmVyTmFtZSAoDQo+ ICsgIElOICBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiAgQ0hB UjggICAgICAgICAgICAgICAgICAgICAgICAqTGFuZ3VhZ2UsDQo+ICsgIE9VVCBDSEFSMTYgICAg ICAgICAgICAgICAgICAgICAgICoqRHJpdmVyTmFtZQ0KPiArICApOw0KPiArDQo+ICtFRklfU1RB VFVTDQo+ICtFRklBUEkNCj4gK1VzYlJuZGlzQ29tcG9uZW50TmFtZUdldENvbnRyb2xsZXJOYW1l ICgNCj4gKyAgSU4gRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4g RUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVyLA0KPiArICBJTiBFRklfSEFO RExFICAgICAgICAgICAgICAgICAgIENoaWxkSGFuZGxlICAgICAgICBPUFRJT05BTCwNCj4gKyAg SU4gQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICAqTGFuZ3VhZ2UsDQo+ICsgIE9VVCBDSEFS MTYgICAgICAgICAgICAgICAgICAgICAgKipDb250cm9sbGVyTmFtZQ0KPiArICApOw0KPiArDQo+ ICtHTE9CQUxfUkVNT1ZFX0lGX1VOUkVGRVJFTkNFRA0KPiBFRklfQ09NUE9ORU5UX05BTUVfUFJP VE9DT0wgIGdVc2JSbmRpc0NvbXBvbmVudE5hbWUgPSB7DQo+ICsgIFVzYlJuZGlzQ29tcG9uZW50 TmFtZUdldERyaXZlck5hbWUsDQo+ICsgIFVzYlJuZGlzQ29tcG9uZW50TmFtZUdldENvbnRyb2xs ZXJOYW1lLA0KPiArICAiZW5nIg0KPiArfTsNCj4gKw0KPiArR0xPQkFMX1JFTU9WRV9JRl9VTlJF RkVSRU5DRUQNCj4gRUZJX0NPTVBPTkVOVF9OQU1FMl9QUk9UT0NPTCAgZ1VzYlJuZGlzQ29tcG9u ZW50TmFtZTIgPSB7DQo+ICsNCj4gKEVGSV9DT01QT05FTlRfTkFNRTJfR0VUX0RSSVZFUl9OQU1F KVVzYlJuZGlzQ29tcG9uZW50TmFtZQ0KPiBHZXREcml2ZXJOYW1lLA0KPiArDQo+IChFRklfQ09N UE9ORU5UX05BTUUyX0dFVF9DT05UUk9MTEVSX05BTUUpVXNiUm5kaXNDb21wb25lbnQNCj4gTmFt ZUdldENvbnRyb2xsZXJOYW1lLA0KPiArICAiZW4iDQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAg UmV0cmlldmVzIGEgVW5pY29kZSBzdHJpbmcgdGhhdCBpcyB0aGUgdXNlciByZWFkYWJsZSBuYW1l IG9mIHRoZSBkcml2ZXIuDQo+ICsNCj4gKyAgVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIHVz ZXIgcmVhZGFibGUgbmFtZSBvZiBhIGRyaXZlciBpbiB0aGUgZm9ybSBvZiBhDQo+ICsgIFVuaWNv ZGUgc3RyaW5nLiBJZiB0aGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGhhcyBhIHVzZXIgcmVh ZGFibGUgbmFtZSBpbg0KPiArICB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlLCB0 aGVuIGEgcG9pbnRlciB0byB0aGUgZHJpdmVyIG5hbWUgaXMNCj4gKyAgcmV0dXJuZWQgaW4gRHJp dmVyTmFtZSwgYW5kIEVGSV9TVUNDRVNTIGlzIHJldHVybmVkLiBJZiB0aGUgZHJpdmVyDQo+IHNw ZWNpZmllZA0KPiArICBieSBUaGlzIGRvZXMgbm90IHN1cHBvcnQgdGhlIGxhbmd1YWdlIHNwZWNp ZmllZCBieSBMYW5ndWFnZSwNCj4gKyAgdGhlbiBFRklfVU5TVVBQT1JURUQgaXMgcmV0dXJuZWQu DQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRo ZQ0KPiBFRklfQ09NUE9ORU5UX05BTUUyX1BST1RPQ09MIG9yDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCBpbnN0YW5jZS4NCj4g KyAgQHBhcmFtW2luXSAgTGFuZ3VhZ2UgICAgICAgICAgQSBwb2ludGVyIHRvIGEgTnVsbC10ZXJt aW5hdGVkIEFTQ0lJIHN0cmluZw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh cnJheSBpbmRpY2F0aW5nIHRoZSBsYW5ndWFnZS4gVGhpcyBpcyB0aGUNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2Ugb2YgdGhlIGRyaXZlciBuYW1lIHRoYXQgdGhl IGNhbGxlciBpcw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0aW5n LCBhbmQgaXQgbXVzdCBtYXRjaCBvbmUgb2YgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxhbmd1YWdlcyBzcGVjaWZpZWQgaW4gU3VwcG9ydGVkTGFuZ3VhZ2VzLiBUaGUN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIGxhbmd1YWdlcyBz dXBwb3J0ZWQgYnkgYSBkcml2ZXIgaXMgdXANCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdG8gdGhlIGRyaXZlciB3cml0ZXIuIExhbmd1YWdlIGlzIHNwZWNpZmllZA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBSRkMgNDY0NiBvciBJU08gNjM5LTIgbGFu Z3VhZ2UgY29kZSBmb3JtYXQuDQo+ICsgIEBwYXJhbVtvdXRdIERyaXZlck5hbWUgICAgICAgIEEg cG9pbnRlciB0byB0aGUgVW5pY29kZSBzdHJpbmcgdG8gcmV0dXJuLg0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBUaGlzIFVuaWNvZGUgc3RyaW5nIGlzIHRoZSBuYW1lIG9mIHRo ZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXIgc3BlY2lmaWVkIGJ5 IFRoaXMgaW4gdGhlIGxhbmd1YWdlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNwZWNpZmllZCBieSBMYW5ndWFnZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICBUaGUgVW5pY29kZSBzdHJpbmcgZm9yIHRoZSBEcml2ZXIgc3BlY2lmaWVkIGJ5DQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgYW5kIHRoZSBsYW5ndWFnZSBz cGVjaWZpZWQgYnkgTGFuZ3VhZ2Ugd2FzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybmVkIGluIERyaXZlck5hbWUuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFS QU1FVEVSIExhbmd1YWdlIGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1F VEVSIERyaXZlck5hbWUgaXMgTlVMTC4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAg ICAgVGhlIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBkb2VzIG5vdA0KPiBzdXBwb3J0DQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkg TGFuZ3VhZ2UuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVc2JS bmRpc0NvbXBvbmVudE5hbWVHZXREcml2ZXJOYW1lICgNCj4gKyAgSU4gIEVGSV9DT01QT05FTlRf TkFNRV9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOICBDSEFSOCAgICAgICAgICAgICAgICAgICAg ICAgICpMYW5ndWFnZSwNCj4gKyAgT1VUIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgKipE cml2ZXJOYW1lDQo+ICsgICkNCj4gK3sNCj4gKyAgcmV0dXJuIExvb2t1cFVuaWNvZGVTdHJpbmcy ICgNCj4gKyAgICAgICAgICAgTGFuZ3VhZ2UsDQo+ICsgICAgICAgICAgIFRoaXMtPlN1cHBvcnRl ZExhbmd1YWdlcywNCj4gKyAgICAgICAgICAgZ1VzYlJuZGlzRHJpdmVyTmFtZVRhYmxlLA0KPiAr ICAgICAgICAgICBEcml2ZXJOYW1lLA0KPiArICAgICAgICAgICAoQk9PTEVBTikoVGhpcyA9PSAm Z1VzYlJuZGlzQ29tcG9uZW50TmFtZSkNCj4gKyAgICAgICAgICAgKTsNCj4gK30NCj4gKw0KPiAr LyoqDQo+ICsgIFJldHJpZXZlcyBhIFVuaWNvZGUgc3RyaW5nIHRoYXQgaXMgdGhlIHVzZXIgcmVh ZGFibGUgbmFtZSBvZiB0aGUgY29udHJvbGxlcg0KPiArICB0aGF0IGlzIGJlaW5nIG1hbmFnZWQg YnkgYSBkcml2ZXIuDQo+ICsNCj4gKyAgVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIHVzZXIg cmVhZGFibGUgbmFtZSBvZiB0aGUgY29udHJvbGxlciBzcGVjaWZpZWQNCj4gYnkNCj4gKyAgQ29u dHJvbGxlckhhbmRsZSBhbmQgQ2hpbGRIYW5kbGUgaW4gdGhlIGZvcm0gb2YgYSBVbmljb2RlIHN0 cmluZy4gSWYgdGhlDQo+ICsgIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBoYXMgYSB1c2VyIHJl YWRhYmxlIG5hbWUgaW4gdGhlIGxhbmd1YWdlIHNwZWNpZmllZA0KPiBieQ0KPiArICBMYW5ndWFn ZSwgdGhlbiBhIHBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgbmFtZSBpcyByZXR1cm5lZCBpbg0K PiBDb250cm9sbGVyTmFtZSwNCj4gKyAgYW5kIEVGSV9TVUNDRVNTIGlzIHJldHVybmVkLiAgSWYg dGhlIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBpcyBub3QgY3VycmVudGx5DQo+ICsgIG1hbmFn aW5nIHRoZSBjb250cm9sbGVyIHNwZWNpZmllZCBieSBDb250cm9sbGVySGFuZGxlIGFuZCBDaGls ZEhhbmRsZSwNCj4gKyAgdGhlbiBFRklfVU5TVVBQT1JURUQgaXMgcmV0dXJuZWQuICBJZiB0aGUg ZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGRvZXMNCj4gbm90DQo+ICsgIHN1cHBvcnQgdGhlIGxh bmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSwgdGhlbiBFRklfVU5TVVBQT1JURUQgaXMNCj4g cmV0dXJuZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgQSBwb2lu dGVyIHRvIHRoZQ0KPiBFRklfQ09NUE9ORU5UX05BTUUyX1BST1RPQ09MIG9yDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCBpbnN0 YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgQ29udHJvbGxlciAgICAgICAgVGhlIGhhbmRsZSBvZiBh IGNvbnRyb2xsZXIgdGhhdCB0aGUgZHJpdmVyDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNwZWNpZmllZCBieSBUaGlzIGlzIG1hbmFnaW5nLiAgVGhpcyBoYW5kbGUNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVzIHRoZSBjb250cm9sbGVyIHdo b3NlIG5hbWUgaXMgdG8gYmUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuZWQuDQo+ICsgIEBwYXJhbVtpbl0gIENoaWxkSGFuZGxlICAgICAgIFRoZSBoYW5kbGUgb2Yg dGhlIGNoaWxkIGNvbnRyb2xsZXIgdG8gcmV0cmlldmUNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGhlIG5hbWUgb2YuICBUaGlzIGlzIGFuIG9wdGlvbmFsIHBhcmFtZXRlciB0 aGF0DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heSBiZSBOVUxMLiAgSXQg d2lsbCBiZSBOVUxMIGZvciBkZXZpY2UNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZHJpdmVycy4gIEl0IHdpbGwgYWxzbyBiZSBOVUxMIGZvciBhIGJ1cyBkcml2ZXJzDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgd2lzaCB0byByZXRyaWV2ZSB0aGUg bmFtZSBvZiB0aGUgYnVzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRy b2xsZXIuICBJdCB3aWxsIG5vdCBiZSBOVUxMIGZvciBhIGJ1cw0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkcml2ZXIgdGhhdCB3aXNoZXMgdG8gcmV0cmlldmUgdGhlIG5hbWUg b2YgYQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCBjb250cm9sbGVy Lg0KPiArICBAcGFyYW1baW5dICBMYW5ndWFnZSAgICAgICAgICBBIHBvaW50ZXIgdG8gYSBOdWxs LXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGFycmF5IGluZGljYXRpbmcgdGhlIGxhbmd1YWdlLiAgVGhpcyBpcyB0aGUNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2Ugb2YgdGhlIGRyaXZlciBuYW1lIHRo YXQgdGhlIGNhbGxlciBpcw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1 ZXN0aW5nLCBhbmQgaXQgbXVzdCBtYXRjaCBvbmUgb2YgdGhlDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxhbmd1YWdlcyBzcGVjaWZpZWQgaW4gU3VwcG9ydGVkTGFuZ3VhZ2Vz LiBUaGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIGxhbmd1 YWdlcyBzdXBwb3J0ZWQgYnkgYSBkcml2ZXIgaXMgdXANCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdG8gdGhlIGRyaXZlciB3cml0ZXIuIExhbmd1YWdlIGlzIHNwZWNpZmllZCBp bg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRkMgNDY0NiBvciBJU08gNjM5 LTIgbGFuZ3VhZ2UgY29kZSBmb3JtYXQuDQo+ICsgIEBwYXJhbVtvdXRdIENvbnRyb2xsZXJOYW1l ICAgIEEgcG9pbnRlciB0byB0aGUgVW5pY29kZSBzdHJpbmcgdG8gcmV0dXJuLg0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIFVuaWNvZGUgc3RyaW5nIGlzIHRoZSBuYW1l IG9mIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyIHNw ZWNpZmllZCBieSBDb250cm9sbGVySGFuZGxlIGFuZA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBDaGlsZEhhbmRsZSBpbiB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5DQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhbmd1YWdlIGZyb20gdGhlIHBvaW50IG9m IHZpZXcgb2YgdGhlIGRyaXZlcg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz cGVjaWZpZWQgYnkgVGhpcy4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAg ICBUaGUgVW5pY29kZSBzdHJpbmcgZm9yIHRoZSB1c2VyIHJlYWRhYmxlIG5hbWUNCj4gaW4NCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBi eSBMYW5ndWFnZSBmb3IgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRy aXZlciBzcGVjaWZpZWQgYnkgVGhpcyB3YXMgcmV0dXJuZWQgaW4NCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRHJpdmVyTmFtZS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9Q QVJBTUVURVIgQ29udHJvbGxlckhhbmRsZSBpcyBub3QgYSB2YWxpZA0KPiBFRklfSEFORExFLg0K PiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBDaGlsZEhhbmRsZSBpcyBub3QgTlVM TCBhbmQgaXQgaXMgbm90IGENCj4gdmFsaWQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRUZJX0hBTkRMRS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgTGFu Z3VhZ2UgaXMgTlVMTC4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgQ29udHJv bGxlck5hbWUgaXMgTlVMTC4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgVGhl IGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBpcyBub3QgY3VycmVudGx5DQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1hbmFnaW5nIHRoZSBjb250cm9sbGVyIHNwZWNpZmllZCBi eQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlIGFu ZCBDaGlsZEhhbmRsZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgVGhlIGRy aXZlciBzcGVjaWZpZWQgYnkgVGhpcyBkb2VzIG5vdA0KPiBzdXBwb3J0DQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2Uu DQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVc2JSbmRpc0NvbXBv bmVudE5hbWVHZXRDb250cm9sbGVyTmFtZSAoDQo+ICsgIElOIEVGSV9DT01QT05FTlRfTkFNRV9Q Uk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ29u dHJvbGxlciwNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDaGlsZEhhbmRs ZSAgICAgICAgT1BUSU9OQUwsDQo+ICsgIElOIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAg Kkxhbmd1YWdlLA0KPiArICBPVVQgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICoqQ29udHJv bGxlck5hbWUNCj4gKyAgKQ0KPiArew0KPiArICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiAr fQ0KPiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9Vc2JSbmRp cy9Vc2JSbmRpcy5jDQo+IGIvTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9Vc2JSbmRp cy9Vc2JSbmRpcy5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAu LjljNzRkNzNmNzgNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9NZGVNb2R1bGVQa2cvQnVzL1Vz Yi9Vc2JOZXR3b3JrL1VzYlJuZGlzL1VzYlJuZGlzLmMNCj4gQEAgLTAsMCArMSw4ODYgQEANCj4g Ky8qKiBAZmlsZQ0KPiArICBUaGlzIGZpbGUgY29udGFpbnMgY29kZSBmb3IgVVNCIFJlbW90ZSBO ZXR3b3JrIERyaXZlcg0KPiArICBJbnRlcmZhY2UgU3BlYy4gRHJpdmVyIEJpbmRpbmcNCj4gKw0K PiArICBDb3B5cmlnaHQgKGMpIDIwMjMsIEFtZXJpY2FuIE1lZ2F0cmVuZHMgSW50ZXJuYXRpb25h bCBMTEMuIEFsbCByaWdodHMNCj4gcmVzZXJ2ZWQuPEJSPg0KPiArICBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiArKiovDQo+ICsNCj4gKyNpbmNsdWRlICJV c2JSbmRpcy5oIg0KPiArDQo+ICtFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgIGdVc2JSbmRp c0RyaXZlckJpbmRpbmcgPSB7DQo+ICsgIFVzYlJuZGlzRHJpdmVyU3VwcG9ydGVkLA0KPiArICBV c2JSbmRpc0RyaXZlclN0YXJ0LA0KPiArICBVc2JSbmRpc0RyaXZlclN0b3AsDQo+ICsgIFVTQl9S TkRJU19EUklWRVJfVkVSU0lPTiwNCj4gKyAgTlVMTCwNCj4gKyAgTlVMTA0KPiArfTsNCj4gKw0K PiArLyoqDQo+ICsgIENoZWNrIGlmIHRoaXMgaW50ZXJmYWNlIGlzIFVTQiBSbmRpcyBTdWJUeXBl DQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVXNiSW8gIEEgcG9pbnRlciB0byB0aGUgRUZJX1VTQl9J T19QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICBVU0IgUm5kaXMg U3ViVHlwZS4NCj4gKyAgQHJldHZhbCBGQUxTRSAgTm90IFVTQiBSbmRpcyBTdWJUeXBlLg0KPiAr DQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0lzU3VwcG9ydGVkRGV2aWNlICgNCj4gKyAgSU4gRUZJ X1VTQl9JT19QUk9UT0NPTCAgKlVzYklvDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAg ICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBFRklfVVNCX0lOVEVSRkFDRV9ERVNDUklQ VE9SICBJbnRlcmZhY2VEZXNjcmlwdG9yOw0KPiArDQo+ICsgIFN0YXR1cyA9IFVzYklvLT5Vc2JH ZXRJbnRlcmZhY2VEZXNjcmlwdG9yIChVc2JJbywgJkludGVyZmFjZURlc2NyaXB0b3IpOw0KPiAr ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiArICB9 DQo+ICsNCj4gKyAgLy8gQ2hlY2sgc3BlY2lmaWMgZGV2aWNlL1JORElTIGFuZCBDREMtREFUQQ0K PiArICBpZiAoKChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZUNsYXNzID09IDB4MikgJiYN Cj4gKyAgICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VTdWJDbGFzcyA9PSAweDIp ICYmDQo+ICsgICAgICAgKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlUHJvdG9jb2wgPT0g MHhGRikpIHx8IFwNCj4gKyAgICAgICgoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VDbGFz cyA9PSAweEVGKSAmJg0KPiArICAgICAgIChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZVN1 YkNsYXNzID09IDB4NCkgJiYNCj4gKyAgICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZh Y2VQcm90b2NvbCA9PSAweDEpKSB8fCBcDQo+ICsgICAgICAoKEludGVyZmFjZURlc2NyaXB0b3Iu SW50ZXJmYWNlQ2xhc3MgPT0gMHhBKSAmJg0KPiArICAgICAgIChJbnRlcmZhY2VEZXNjcmlwdG9y LkludGVyZmFjZVN1YkNsYXNzID09IDB4MCkgJiYNCj4gKyAgICAgICAoSW50ZXJmYWNlRGVzY3Jp cHRvci5JbnRlcmZhY2VQcm90b2NvbCA9PSAweDAwKSkNCj4gKyAgICAgICkNCj4gKyAgew0KPiAr ICAgIHJldHVybiBUUlVFOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEZBTFNFOw0KPiArfQ0K PiArDQo+ICsvKioNCj4gKyAgQ2hlY2sgaWYgdGhpcyBpbnRlcmZhY2UgaXMgVVNCIFJuZGlzIFN1 YlR5cGUgYnV0IG5vdCBDREMgRGF0YSBpbnRlcmZhY2UNCj4gKw0KPiArICBAcGFyYW1baW5dICBV c2JJbyAgQSBwb2ludGVyIHRvIHRoZSBFRklfVVNCX0lPX1BST1RPQ09MIGluc3RhbmNlLg0KPiAr DQo+ICsgIEByZXR2YWwgVFJVRSAgIFVTQiBSbmRpcyBTdWJUeXBlLg0KPiArICBAcmV0dmFsIEZB TFNFICBOb3QgVVNCIFJuZGlzIFN1YlR5cGUuDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0lzUm5k aXNJbnRlcmZhY2UgKA0KPiArICBJTiBFRklfVVNCX0lPX1BST1RPQ09MICAqVXNiSW8NCj4gKyAg KQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsg IEVGSV9VU0JfSU5URVJGQUNFX0RFU0NSSVBUT1IgIEludGVyZmFjZURlc2NyaXB0b3I7DQo+ICsN Cj4gKyAgU3RhdHVzID0gVXNiSW8tPlVzYkdldEludGVyZmFjZURlc2NyaXB0b3IgKFVzYklvLCAm SW50ZXJmYWNlRGVzY3JpcHRvcik7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g KyAgICByZXR1cm4gRkFMU0U7DQo+ICsgIH0NCj4gKw0KPiArICAvLyBDaGVjayBmb3Igc3BlY2lm aWMgZGV2aWNlL1JORElTIGFuZCBDREMtREFUQQ0KPiArICBpZiAoKChJbnRlcmZhY2VEZXNjcmlw dG9yLkludGVyZmFjZUNsYXNzID09IDB4MikgJiYNCj4gKyAgICAgICAoSW50ZXJmYWNlRGVzY3Jp cHRvci5JbnRlcmZhY2VTdWJDbGFzcyA9PSAweDIpICYmDQo+ICsgICAgICAgKEludGVyZmFjZURl c2NyaXB0b3IuSW50ZXJmYWNlUHJvdG9jb2wgPT0gMHhGRikpIHx8IFwNCj4gKyAgICAgICgoSW50 ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VDbGFzcyA9PSAweEVGKSAmJg0KPiArICAgICAgIChJ bnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZVN1YkNsYXNzID09IDB4NCkgJiYNCj4gKyAgICAg ICAoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VQcm90b2NvbCA9PSAweDEpKQ0KPiArICAg ICAgKQ0KPiArICB7DQo+ICsgICAgcmV0dXJuIFRSVUU7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1 cm4gRkFMU0U7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDaGVjayBpZiB0aGUgVVNCIFJORElT IGFuZCBVU0IgQ0RDIERhdGEgaW50ZXJmYWNlcyBhcmUgZnJvbSB0aGUgc2FtZQ0KPiBkZXZpY2Uu DQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVXNiUm5kaXNEYXRhUGF0aCAgQSBwb2ludGVyIHRvIHRo ZQ0KPiBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0g IFVzYkNkY0RhdGFQYXRoICAgIEEgcG9pbnRlciB0byB0aGUNCj4gRUZJX0RFVklDRV9QQVRIX1BS T1RPQ09MIGluc3RhbmNlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAg IElzIHRoZSBzYW1lIGRldmljZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAg SXMgbm90IHRoZSBzYW1lIGRldmljZS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtJ c1NhbWVEZXZpY2UgKA0KPiArICBJTiAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqVXNiUm5k aXNEYXRhUGF0aCwNCj4gKyAgSU4gIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgKlVzYkNkY0Rh dGFQYXRoDQo+ICsgICkNCj4gK3sNCj4gKyAgREVCVUcgKChERUJVR19WRVJCT1NFLCAiSXNTYW1l RGV2aWNlIEVudHJ5IFxuIikpOw0KPiArICB3aGlsZSAoMSkgew0KPiArICAgIGlmIChJc0Rldmlj ZVBhdGhFbmQgKE5leHREZXZpY2VQYXRoTm9kZSAoVXNiUm5kaXNEYXRhUGF0aCkpKSB7DQo+ICsg ICAgICBpZiAoKChVU0JfREVWSUNFX1BBVEggKilVc2JSbmRpc0RhdGFQYXRoKS0+UGFyZW50UG9y dE51bWJlciA9PQ0KPiArICAgICAgICAgICgoVVNCX0RFVklDRV9QQVRIICopVXNiQ2RjRGF0YVBh dGgpLT5QYXJlbnRQb3J0TnVtYmVyKQ0KPiArICAgICAgew0KPiArICAgICAgICByZXR1cm4gRUZJ X1NVQ0NFU1M7DQo+ICsgICAgICB9IGVsc2Ugew0KPiArICAgICAgICByZXR1cm4gRUZJX1VOU1VQ UE9SVEVEOw0KPiArICAgICAgfQ0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICBpZiAoQ29tcGFy ZU1lbSAoVXNiQ2RjRGF0YVBhdGgsIFVzYlJuZGlzRGF0YVBhdGgsIHNpemVvZg0KPiAoRUZJX0RF VklDRV9QQVRIX1BST1RPQ09MKSkgIT0gMCkgew0KPiArICAgICAgICByZXR1cm4gRUZJX1VOU1VQ UE9SVEVEOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICBVc2JSbmRpc0RhdGFQYXRoID0gTmV4 dERldmljZVBhdGhOb2RlIChVc2JSbmRpc0RhdGFQYXRoKTsNCj4gKyAgICAgIFVzYkNkY0RhdGFQ YXRoICAgPSBOZXh0RGV2aWNlUGF0aE5vZGUgKFVzYkNkY0RhdGFQYXRoKTsNCj4gKyAgICB9DQo+ ICsgIH0NCj4gKw0KPiArICBERUJVRyAoKERFQlVHX1ZFUkJPU0UsICJJc1NhbWVEZXZpY2UgRXhp dCBcbiIpKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENoZWNrIGlmIHRoZSBVU0IgQ0RDIERh dGEoVXNiSW8pIGluc3RhbGxlZCBhbmQgcmV0dXJuIFVTQiBDREMgRGF0YQ0KPiBIYW5kbGUuDQo+ ICsNCj4gKyAgQHBhcmFtW2luXSAgVXNiSW8gIEEgcG9pbnRlciB0byB0aGUgRUZJX1VTQl9JT19Q Uk9UT0NPTCBpbnN0YW5jZS4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgICAgIFVT QiBDREMgRGF0YShVc2JJbykgaW5zdGFsbGVkLg0KPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAg ICAgIFVTQiBDREMgRGF0YShVc2JJbykgZGlkIG5vdCBpbnN0YWxsZWQuDQo+ICsNCj4gKyoqLw0K PiArQk9PTEVBTg0KPiArSXNVc2JDZGNEYXRhICgNCj4gKyAgSU4gRUZJX1VTQl9JT19QUk9UT0NP TCAgKlVzYklvDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAg ICAgU3RhdHVzOw0KPiArICBFRklfVVNCX0lOVEVSRkFDRV9ERVNDUklQVE9SICBJbnRlcmZhY2VE ZXNjcmlwdG9yOw0KPiArDQo+ICsgIFN0YXR1cyA9IFVzYklvLT5Vc2JHZXRJbnRlcmZhY2VEZXNj cmlwdG9yIChVc2JJbywgJkludGVyZmFjZURlc2NyaXB0b3IpOw0KPiArICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiArICB9DQo+ICsNCj4gKyAgLy8g Q2hlY2sgZm9yIENEQy1EQVRBDQo+ICsgIGlmICgoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZh Y2VDbGFzcyA9PSAweEEpICYmDQo+ICsgICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZh Y2VTdWJDbGFzcyA9PSAweDApICYmDQo+ICsgICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRl cmZhY2VQcm90b2NvbCA9PSAweDApKQ0KPiArICB7DQo+ICsgICAgcmV0dXJuIFRSVUU7DQo+ICsg IH0NCj4gKw0KPiArICByZXR1cm4gRkFMU0U7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDaGVj ayBpZiB0aGUgVVNCIFJuZGlzKFVzYklvKSBpbnN0YWxsZWQNCj4gKw0KPiArICBAcGFyYW1baW5d ICBVc2JJbyAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklfVVNCX0lPX1BST1RPQ09MIGluc3Rh bmNlLg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICAgICAgVVNCIFJuZGlzKFVzYklv KSBpbnN0YWxsZWQuDQo+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICAgICAgVVNCIFJuZGlzKFVz YklvKSBkaWQgbm90IGluc3RhbGxlZC4NCj4gKw0KPiArKiovDQo+ICtCT09MRUFODQo+ICtJc1Vz YlJuZGlzICgNCj4gKyAgSU4gRUZJX1VTQl9JT19QUk9UT0NPTCAgKlVzYklvDQo+ICsgICkNCj4g K3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBFRklf VVNCX0lOVEVSRkFDRV9ERVNDUklQVE9SICBJbnRlcmZhY2VEZXNjcmlwdG9yOw0KPiArDQo+ICsg IFN0YXR1cyA9IFVzYklvLT5Vc2JHZXRJbnRlcmZhY2VEZXNjcmlwdG9yIChVc2JJbywgJkludGVy ZmFjZURlc2NyaXB0b3IpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAg cmV0dXJuIEZBTFNFOw0KPiArICB9DQo+ICsNCj4gKyAgLy8gQ2hlY2sgZm9yIFJuZGlzDQo+ICsg IGlmICgoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VDbGFzcyA9PSAweDIpICYmDQo+ICsg ICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VTdWJDbGFzcyA9PSAweDIpICYmDQo+ ICsgICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VQcm90b2NvbCA9PSAweEZGKSkN Cj4gKyAgew0KPiArICAgIHJldHVybiBUUlVFOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEZB TFNFOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ29udHJvbCBjb21lcyBoZXJlIHdoZW4gYSBD REMgZGV2aWNlIGlzIGZvdW5kLkNoZWNrIGlmIGEgUk5ESVMgaW50ZXJmYWNlDQo+IGlzIGFscmVh ZHkgZm91bmQgZm9yIHRoaXMgZGV2aWNlIG9yIG5vdC4NCj4gKyAgRm9yIG9uZSBkZXZpY2UgdHdv IFVTQklPIHdpbGwgYmUgaW5zdGFsbGVkIGVhY2ggZm9yIENEQyBhbmQgUk5ESVMNCj4gaW50ZXJm YWNlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFVzYkV0aFBhdGggICAgICAgIEEgcG9pbnRlciB0 byB0aGUNCj4gRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1b b3V0XSBVc2JSbmRpc0RldmljZSAgICBBIHBvaW50ZXIgdG8gdGhlIFVTQl9STkRJU19ERVZJQ0Ug RGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFRoZSBVU0Jf Uk5ESVNfREVWSUNFIG1hdGNoaW5nIHRoaXMgQ0RDDQo+IERhdGEgaXMgZm91bmQuDQo+ICsgIEBy ZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICAgVGhlIFVTQl9STkRJU19ERVZJQ0UgbWF0Y2hp bmcgdGhpcw0KPiBDREMgRGF0YSBpcyBub3QgZm91bmQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NU QVRVUw0KPiArVXBkYXRlUm5kaXNEZXZpY2UgKA0KPiArICBJTiAgRUZJX0RFVklDRV9QQVRIX1BS T1RPQ09MICAqVXNiQ2RjRGF0YVBhdGgsDQo+ICsgIE9VVCBVU0JfUk5ESVNfREVWSUNFICAgICAg ICAgICoqVXNiUm5kaXNEZXZpY2UNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAg ICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICBJ bmRleDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVDb3VudDsNCj4g KyAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAqSGFuZGxlQnVmZmVyOw0KPiArICBFREtJ SV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpVc2JFdGhEZXZpY2U7DQo+ICsgIEVGSV9ERVZJQ0Vf UEFUSF9QUk9UT0NPTCAgICAgKlVzYlJuZGlzRGF0YVBhdGg7DQo+ICsgIEVGSV9VU0JfSU9fUFJP VE9DT0wgICAgICAgICAgKlVzYklvOw0KPiArICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAg IElzUm5kaXNJbnRlcmZhY2VGbGFnOw0KPiArDQo+ICsgIElzUm5kaXNJbnRlcmZhY2VGbGFnID0g RkFMU0U7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVIYW5kbGVCdWZmZXIgKA0KPiAr ICAgICAgICAgICAgICAgICAgQnlQcm90b2NvbCwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWRr SUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAg ICAgICAgICAgICAgICAgJkhhbmRsZUNvdW50LA0KPiArICAgICAgICAgICAgICAgICAgJkhhbmRs ZUJ1ZmZlcg0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBmb3IgKElu ZGV4ID0gMDsgSW5kZXggPCBIYW5kbGVDb3VudDsgSW5kZXgrKykgew0KPiArICAgIFN0YXR1cyA9 IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgICBIYW5kbGVCdWZm ZXJbSW5kZXhdLA0KPiArICAgICAgICAgICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xH dWlkLA0KPiArICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiRXRoRGV2aWNlDQo+ICsg ICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiArICAgICAgY29udGludWU7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgU3RhdHVzID0gZ0JTLT5I YW5kbGVQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICAgIEhhbmRsZUJ1ZmZlcltJbmRl eF0sDQo+ICsgICAgICAgICAgICAgICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsDQo+ICsg ICAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZVc2JJbw0KPiArICAgICAgICAgICAgICAgICAg ICApOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIGNvbnRpbnVl Ow0KPiArICAgIH0NCj4gKw0KPiArICAgIElzUm5kaXNJbnRlcmZhY2VGbGFnID0gSXNSbmRpc0lu dGVyZmFjZSAoVXNiSW8pOw0KPiArICAgIGlmIChJc1JuZGlzSW50ZXJmYWNlRmxhZyA9PSBGQUxT RSkgew0KPiArICAgICAgY29udGludWU7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgU3RhdHVzID0g Z0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICAgIEhhbmRsZUJ1ZmZl cltJbmRleF0sDQo+ICsgICAgICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29s R3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVzYlJuZGlzRGF0YVBhdGgN Cj4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ICsgICAgICBjb250aW51ZTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBJ c1NhbWVEZXZpY2UgKFVzYlJuZGlzRGF0YVBhdGgsIFVzYkNkY0RhdGFQYXRoKTsNCj4gKw0KPiAr ICAgIERFQlVHICgoREVCVUdfVkVSQk9TRSwgIlJuZGlzIElzU2FtZURldmljZSAlclxuIiwgU3Rh dHVzKSk7DQo+ICsNCj4gKyAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAg KlVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFVzYkV0aERldmlj ZSk7DQo+ICsgICAgICBGcmVlUG9vbCAoSGFuZGxlQnVmZmVyKTsNCj4gKyAgICAgIHJldHVybiBF RklfU1VDQ0VTUzsNCj4gKyAgICB9DQo+ICsgIH0gICAvLyBFbmQgb2YgRm9yIGxvb3ANCj4gKw0K PiArICBGcmVlUG9vbCAoSGFuZGxlQnVmZmVyKTsNCj4gKyAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7 DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArDQo+ICsgIEZvciB0aGUgZ2l2ZW4gUm5kaXMgRGV2aWNl LCBmaW5kIGEgbWF0Y2hpbmcgQ0RDIGRldmljZSBhbHJlYWR5IGV4aXN0cyBvcg0KPiBub3QuIElm IGZvdW5kIHVwZGF0ZSB0aGUgaGFuZGxlDQo+ICsgIGFuZCBVc2JJTyBwcm90b2NvbC4NCj4gKw0K PiArICBAcGFyYW1baW5dICBVc2JSbmRpc0RldmljZSAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBV U0JfUk5ESVNfREVWSUNFDQo+IGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArRmluZE1h dGNoaW5nQ2RjRGF0YSAoDQo+ICsgIElOIFVTQl9STkRJU19ERVZJQ0UgICpVc2JSbmRpc0Rldmlj ZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgU3RhdHVzOw0K PiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiArICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgIEhhbmRsZUNvdW50Ow0KPiArICBFRklfSEFORExFICAgICAgICAgICAgICAg ICpIYW5kbGVCdWZmZXI7DQo+ICsgIEVGSV9VU0JfSU9fUFJPVE9DT0wgICAgICAgKlVzYklvOw0K PiArICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICpVc2JSbmRpc0RhdGFQYXRoOw0KPiArICBF RklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICpVc2JDZGNEYXRhUGF0aDsNCj4gKw0KPiArICAvLyBG aW5kIHRoZSBwYXJlbnQgUk5ESVMgYW5kIHVwZGF0ZSB0aGUgVXNiSW8gZm9yIHRoZSBDREMgZGV2 aWNlDQo+ICsgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAg ICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYlJuZGlzSGFuZGxlLA0KPiArICAgICAgICAgICAgICAg ICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgKFZP SUQgKiopJlVzYlJuZGlzRGF0YVBhdGgNCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4g KyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiAr DQo+ICsgIFN0YXR1cyA9IGdCUy0+TG9jYXRlSGFuZGxlQnVmZmVyICgNCj4gKyAgICAgICAgICAg ICAgICAgIEJ5UHJvdG9jb2wsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0VmaVVzYklvUHJvdG9j b2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgTlVMTCwNCj4gKyAgICAgICAgICAgICAgICAg ICZIYW5kbGVDb3VudCwNCj4gKyAgICAgICAgICAgICAgICAgICZIYW5kbGVCdWZmZXINCj4gKyAg ICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAg ICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBIYW5k bGVDb3VudDsgSW5kZXgrKykgew0KPiArICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wg KA0KPiArICAgICAgICAgICAgICAgICAgICBIYW5kbGVCdWZmZXJbSW5kZXhdLA0KPiArICAgICAg ICAgICAgICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAg ICAgICAoVk9JRCAqKikmVXNiSW8NCj4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBB U1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiArDQo+ICsgICAgaWYgKElzVXNiQ2RjRGF0YSAo VXNiSW8pKSB7DQo+ICsgICAgICBERUJVRyAoKERFQlVHX1ZFUkJPU0UsICJSbmRpcyBGaW5kTWF0 Y2hpbmdDZGNEYXRhIENEQ0RhdGENCj4gaW50ZXJmYWNlIGZvdW5kXG4iKSk7DQo+ICsNCj4gKyAg ICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAg ICAgIEhhbmRsZUJ1ZmZlcltJbmRleF0sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgJmdFZmlE ZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgICAgIChWT0lEICoq KSZVc2JDZGNEYXRhUGF0aA0KPiArICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICAgIERFQlVHICgoREVCVUdfVkVSQk9T RSwgIlJuZGlzIENEQ0RhdGEgRGV2aWNlUGF0aCBub3QgZm91bmRcbiIpKTsNCj4gKyAgICAgICAg RnJlZVBvb2wgKEhhbmRsZUJ1ZmZlcik7DQo+ICsgICAgICAgIHJldHVybjsNCj4gKyAgICAgIH0N Cj4gKw0KPiArICAgICAgU3RhdHVzID0gSXNTYW1lRGV2aWNlIChVc2JSbmRpc0RhdGFQYXRoLCBV c2JDZGNEYXRhUGF0aCk7DQo+ICsgICAgICBERUJVRyAoKERFQlVHX1ZFUkJPU0UsICJSbmRpcyBJ c1NhbWVEZXZpY2UgJXJcbiIsIFN0YXR1cykpOw0KPiArICAgICAgaWYgKCFFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4gKyAgICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYkNkY0RhdGFIYW5kbGUgPSBI YW5kbGVCdWZmZXJbSW5kZXhdOw0KPiArICAgICAgICBVc2JSbmRpc0RldmljZS0+VXNiSW9DZGNE YXRhICAgICA9IFVzYklvOw0KPiArICAgICAgICBHZXRFbmRwb2ludCAoVXNiUm5kaXNEZXZpY2Ut PlVzYklvQ2RjRGF0YSwgVXNiUm5kaXNEZXZpY2UpOw0KPiArICAgICAgICBGcmVlUG9vbCAoSGFu ZGxlQnVmZmVyKTsNCj4gKyAgICAgICAgcmV0dXJuOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4g KyAgfSAgIC8vIEVuZCBvZiBGb3IgbG9vcA0KPiArDQo+ICsgIEZyZWVQb29sIChIYW5kbGVCdWZm ZXIpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKw0KPiArICBGb3IgdGhlIGdpdmVuIFVzYklvIENk Y0RhdGEsIGZpbmQgYSBtYXRjaGluZyBSTkRJUyBkZXZpY2UgYWxyZWFkeSBleGlzdHMNCj4gb3Ig bm90Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkY0hhbmRsZSAgICAgICBBIHBvaW50ZXIgdG8g dGhlIEVGSV9IQU5ETEUgZm9yIFVTQiBDREMNCj4gRGF0YS4NCj4gKyAgQHBhcmFtW291dF0gQ2Rj VXNiSW8gICAgICAgIEEgcG9pbnRlciBmb3IgcmV0cmlldmUgdGhlDQo+IEVGSV9VU0JfSU9fUFJP VE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtvdXRdIFJuZGlzSGFuZGxlICAgICBBIHBvaW50 ZXIgZm9yIHJldHJpZXZlIHRoZSBoYW5kbGUgb2YgUk5ESVMNCj4gZGV2aWNlLg0KPiArDQo+ICsg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgVGhlIFVTQl9STkRJU19ERVZJQ0UgbWF0 Y2hpbmcgdGhpcyBDREMNCj4gRGF0YSBpcyBmb3VuZC4NCj4gKyAgQHJldHZhbCBFRklfTk9UX0ZP VU5EICAgICAgICAgICBUaGUgVVNCX1JORElTX0RFVklDRSBtYXRjaGluZyB0aGlzDQo+IENEQyBE YXRhIGlzIG5vdCBmb3VuZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkN Cj4gK0ZpbmRNYXRjaGluZ1JuZGlzRGV2ICgNCj4gKyAgSU4gIEVGSV9IQU5ETEUgICAgICAgICAg IENkY0hhbmRsZSwNCj4gKyAgT1VUIEVGSV9VU0JfSU9fUFJPVE9DT0wgICoqQ2RjVXNiSW8sDQo+ ICsgIE9VVCBFRklfSEFORExFICAgICAgICAgICAqUm5kaXNIYW5kbGUNCj4gKyAgKQ0KPiArew0K PiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICBJbmRleDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBIYW5k bGVDb3VudDsNCj4gKyAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAqSGFuZGxlQnVmZmVyOw0K PiArICBFRklfVVNCX0lPX1BST1RPQ09MICAgICAgICpVc2JJbzsNCj4gKyAgRUZJX0RFVklDRV9Q QVRIX1BST1RPQ09MICAqVXNiUm5kaXNEYXRhUGF0aDsNCj4gKyAgRUZJX0RFVklDRV9QQVRIX1BS T1RPQ09MICAqVXNiQ2RjRGF0YVBhdGg7DQo+ICsNCj4gKyAgLy8gRmluZCB0aGUgcGFyZW50IFJO RElTIGFuZCB1cGRhdGUgdGhlIFVzYklvIGZvciB0aGUgQ0RDIGRldmljZQ0KPiArICBTdGF0dXMg PSBnQlMtPkhhbmRsZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgIENkY0hhbmRsZSwN Cj4gKyAgICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAg ICAgICAgICAgICAgICAgIChWT0lEICoqKSZVc2JDZGNEYXRhUGF0aA0KPiArICAgICAgICAgICAg ICAgICAgKTsNCj4gKw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0 dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+TG9jYXRlSGFuZGxl QnVmZmVyICgNCj4gKyAgICAgICAgICAgICAgICAgIEJ5UHJvdG9jb2wsDQo+ICsgICAgICAgICAg ICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgTlVM TCwNCj4gKyAgICAgICAgICAgICAgICAgICZIYW5kbGVDb3VudCwNCj4gKyAgICAgICAgICAgICAg ICAgICZIYW5kbGVCdWZmZXINCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4g KyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgSGFuZGxlQ291bnQ7IEluZGV4KyspIHsNCj4gKyAg ICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgICAg SGFuZGxlQnVmZmVyW0luZGV4XSwNCj4gKyAgICAgICAgICAgICAgICAgICAgJmdFZmlVc2JJb1By b3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVzYklvDQo+ICsg ICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoSXNVc2JS bmRpcyAoVXNiSW8pKSB7DQo+ICsgICAgICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgN Cj4gKyAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVCdWZmZXJbSW5kZXhdLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiUm5kaXNEYXRhUGF0aA0KPiArICAgICAgICAgICAg ICAgICAgICAgICk7DQo+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAg ICAgIERFQlVHICgoREVCVUdfRVJST1IsICJVc2IgUm5kaXMgRGV2aWNlUGF0aCBub3QgZm91bmRc biIpKTsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIFN0YXR1 cyA9IElzU2FtZURldmljZSAoVXNiUm5kaXNEYXRhUGF0aCwgVXNiQ2RjRGF0YVBhdGgpOw0KPiAr DQo+ICsgICAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgICAqUm5kaXNI YW5kbGUgPSBIYW5kbGVCdWZmZXJbSW5kZXhdOw0KPiArICAgICAgICAqQ2RjVXNiSW8gICAgPSBV c2JJbzsNCj4gKyAgICAgICAgRnJlZVBvb2wgKEhhbmRsZUJ1ZmZlcik7DQo+ICsgICAgICAgIHJl dHVybiBTdGF0dXM7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICB9ICAgLy8gRW5kIG9mIEZv ciBsb29wDQo+ICsNCj4gKyAgRnJlZVBvb2wgKEhhbmRsZUJ1ZmZlcik7DQo+ICsNCj4gKyAgcmV0 dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBVU0IgUm5kaXMgRHJp dmVyIEJpbmRpbmcgU3VwcG9ydC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAg ICAgICAgICAgICBQcm90b2NvbCBpbnN0YW5jZSBwb2ludGVyLg0KPiArICBAcGFyYW1baW5dICBD b250cm9sbGVySGFuZGxlICAgICAgICBIYW5kbGUgb2YgZGV2aWNlIHRvIHRlc3QuDQo+ICsgIEBw YXJhbVtpbl0gIFJlbWFpbmluZ0RldmljZVBhdGggICAgIE9wdGlvbmFsIHBhcmFtZXRlciB1c2Ug dG8gcGljayBhDQo+IHNwZWNpZmljIGNoaWxkDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRldmljZSB0byBzdGFydC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgICAgICAgICAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGlzIGRldmljZS4NCj4g KyAgQHJldHZhbCBFRklfQUxSRUFEWV9TVEFSVEVEICAgICAgICAgVGhpcyBkcml2ZXIgaXMgYWxy ZWFkeSBydW5uaW5nIG9uIHRoaXMNCj4gZGV2aWNlLg0KPiArICBAcmV0dmFsIG90aGVyICAgICAg ICAgICAgICAgICAgICAgICBUaGlzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZGV2aWNl Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVXNiUm5kaXNEcml2 ZXJTdXBwb3J0ZWQgKA0KPiArICBJTiBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgICpUaGlz LA0KPiArICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUs DQo+ICsgIElOIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgKlJlbWFpbmluZ0RldmljZVBh dGgNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICBTdGF0dXM7DQo+ICsg IEVGSV9VU0JfSU9fUFJPVE9DT0wgICpVc2JJbzsNCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPk9w ZW5Qcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiAr ICAgICAgICAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAg ICAgICAgIChWT0lEICoqKSZVc2JJbywNCj4gKyAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZl ckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0K PiArICAgICAgICAgICAgICAgICAgRUZJX09QRU5fUFJPVE9DT0xfQllfRFJJVkVSDQo+ICsgICAg ICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAg cmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IElzU3VwcG9ydGVkRGV2 aWNlIChVc2JJbykgPyBFRklfU1VDQ0VTUyA6IEVGSV9VTlNVUFBPUlRFRDsNCj4gKw0KPiArICBn QlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAg ICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICBUaGlzLT5Ecml2ZXJC aW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAg KTsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFVTQiBSTkRJ UyBEcml2ZXIgQmluZGluZyBTdGFydC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAg ICAgICAgICAgICAgICBQcm90b2NvbCBpbnN0YW5jZSBwb2ludGVyLg0KPiArICBAcGFyYW1baW5d ICBDb250cm9sbGVySGFuZGxlICAgICAgICBIYW5kbGUgb2YgZGV2aWNlIHRvIGJpbmQgZHJpdmVy IHRvLg0KPiArICBAcGFyYW1baW5dICBSZW1haW5pbmdEZXZpY2VQYXRoICAgICBPcHRpb25hbCBw YXJhbWV0ZXIgdXNlIHRvIHBpY2sgYQ0KPiBzcGVjaWZpYyBjaGlsZA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UgdG8gc3RhcnQuDQo+ICsNCj4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICAgVGhpcyBkcml2ZXIgaXMgYWRkZWQgdG8g Q29udHJvbGxlckhhbmRsZQ0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICAgICAg ICBUaGlzIGRyaXZlciBjb3VsZCBub3QgYmUgc3RhcnRlZCBkdWUgdG8gYQ0KPiBkZXZpY2UgZXJy b3INCj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgICAgICAgVGhlIGRyaXZlciBj b3VsZCBub3QgaW5zdGFsbA0KPiBzdWNjZXNzZnVsbHkgZHVlIHRvIGEgbGFjayBvZiByZXNvdXJj ZXMuDQo+ICsgIEByZXR2YWwgb3RoZXIgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZHJpdmVy IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBkZXZpY2UNCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVT DQo+ICtFRklBUEkNCj4gK1VzYlJuZGlzRHJpdmVyU3RhcnQgKA0KPiArICBJTiBFRklfRFJJVkVS X0JJTkRJTkdfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBFRklfSEFORExFICAgICAgICAgICAg ICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgIElOIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NP TCAgICAgKlJlbWFpbmluZ0RldmljZVBhdGgNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVT ICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIFVTQl9STkRJU19ERVZJQ0UgICAgICAg ICAgICAgICpVc2JSbmRpc0RldmljZTsNCj4gKyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAg ICAgKlVzYkV0aFBhdGg7DQo+ICsgIEVGSV9VU0JfSU9fUFJPVE9DT0wgICAgICAgICAgICpVc2JJ bzsNCj4gKyAgRUZJX1VTQl9JTlRFUkZBQ0VfREVTQ1JJUFRPUiAgSW50ZXJmYWNlOw0KPiArICBF RklfSEFORExFICAgICAgICAgICAgICAgICAgICBSbmRpc0hhbmRsZTsNCj4gKw0KPiArICBSbmRp c0hhbmRsZSA9IENvbnRyb2xsZXJIYW5kbGU7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5PcGVu UHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAg ICAgICAgICAgICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAg ICAgICAoVk9JRCAqKikmVXNiSW8sDQo+ICsgICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJC aW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4g KyAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0JZX0RSSVZFUg0KPiArICAgICAg ICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJl dHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2Nv bCAoDQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAg ICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAg ICAgKFZPSUQgKiopJlVzYkV0aFBhdGgsDQo+ICsgICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2 ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwN Cj4gKyAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0JZX0RSSVZFUg0KPiArICAg ICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAg IGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ ICsgICAgICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgIFRoaXMt PkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4g KyAgICAgICAgICAgKTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAg Z0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsg ICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICBUaGlzLT5E cml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAg ICAgICAgKTsNCj4gKw0KPiArICAvLyBDb250cm9scyBjb21lIGhlcmUgZm9yIFJORElTIGFuZCBD REMuIElmIGl0IGlzIENEQywgY2hlY2sgd2hldGhlcg0KPiBSTkRJUyBpcyBwcmVzZW50IG9uIHRo ZSBzYW1lIGNvbnRyb2xsZXIgb3Igbm90Lg0KPiArICBpZiAoSXNVc2JDZGNEYXRhIChVc2JJbykp IHsNCj4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJSbmRpcyBDRENEYXRhIGludGVyZmFjZSBm b3VuZFxuIikpOw0KPiArDQo+ICsgICAgLy8gRmluZCB0aGUgcGFyZW50IFJORElTIGFuZCB1cGRh dGUgdGhlIFVzYklvIGZvciB0aGUgQ0RDIGRldmljZQ0KPiArICAgIFN0YXR1cyA9IFVwZGF0ZVJu ZGlzRGV2aWNlICgNCj4gKyAgICAgICAgICAgICAgIFVzYkV0aFBhdGgsDQo+ICsgICAgICAgICAg ICAgICAmVXNiUm5kaXNEZXZpY2UNCj4gKyAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgICBp ZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAi Um5kaXMgTWF0Y2hpbmcgaW50ZXJmYWNlIGZvdW5kXG4iKSk7DQo+ICsgICAgICBVc2JSbmRpc0Rl dmljZS0+VXNiQ2RjRGF0YUhhbmRsZSA9IENvbnRyb2xsZXJIYW5kbGU7DQo+ICsgICAgICBVc2JS bmRpc0RldmljZS0+VXNiSW9DZGNEYXRhICAgICA9IFVzYklvOw0KPiArICAgICAgR2V0RW5kcG9p bnQgKFVzYlJuZGlzRGV2aWNlLT5Vc2JJb0NkY0RhdGEsIFVzYlJuZGlzRGV2aWNlKTsNCj4gKyAg ICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgIC8vIENoZWNrIGlm IFJuRGlzIGV4aXN0DQo+ICsgICAgICBTdGF0dXMgPSBGaW5kTWF0Y2hpbmdSbmRpc0RldiAoDQo+ ICsgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAg ICZVc2JJbywNCj4gKyAgICAgICAgICAgICAgICAgJlJuZGlzSGFuZGxlDQo+ICsgICAgICAgICAg ICAgICAgICk7DQo+ICsNCj4gKyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAg ICAgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgIENvbnRyb2xsZXJI YW5kbGUsDQo+ICsgICAgICAgICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAg ICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAg IENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgICAgICk7DQo+ICsgICAgICAgIHJldHVy biBTdGF0dXM7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgVXNiUm5k aXNEZXZpY2UgPSBBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YgKFVTQl9STkRJU19ERVZJQ0UpKTsN Cj4gKw0KPiArICBpZiAoIVVzYlJuZGlzRGV2aWNlKSB7DQo+ICsgICAgREVCVUcgKChERUJVR19F UlJPUiwgIkFsbG9jYXRlWmVyb1Bvb2wgRmFpbFxuIikpOw0KPiArDQo+ICsgICAgZ0JTLT5DbG9z ZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAg ICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgVGhpcy0+RHJpdmVyQmlu ZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAg ICApOw0KPiArICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgfQ0KPiArDQo+ ICsgIFN0YXR1cyA9IExvYWRBbGxEZXNjcmlwdG9yICgNCj4gKyAgICAgICAgICAgICBVc2JJbywN Cj4gKyAgICAgICAgICAgICAmVXNiUm5kaXNEZXZpY2UtPkNvbmZpZw0KPiArICAgICAgICAgICAg ICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBERUJVRyAoKERFQlVH X0VSUk9SLCAiJWE6TG9hZEFsbERlc2NyaXB0b3Igc3RhdHVzID0gJXJcbiIsIF9fZnVuY19fLA0K PiBTdGF0dXMpKTsNCj4gKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICBD b250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0K PiArICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICBD b250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICk7DQo+ICsgICAgRnJlZVBvb2wgKFVzYlJu ZGlzRGV2aWNlKTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgU3Rh dHVzID0gVXNiSW8tPlVzYkdldEludGVyZmFjZURlc2NyaXB0b3IgKA0KPiArICAgICAgICAgICAg ICAgICAgICBVc2JJbywNCj4gKyAgICAgICAgICAgICAgICAgICAgJkludGVyZmFjZQ0KPiArICAg ICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsg ICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOlVzYkdldEludGVyZmFjZURlc2NyaXB0b3Igc3Rh dHVzID0gJXJcbiIsDQo+IF9fZnVuY19fLCBTdGF0dXMpKTsNCj4gKyAgICBnQlMtPkNsb3NlUHJv dG9jb2wgKA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAm Z0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5n SGFuZGxlLA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICk7 DQo+ICsgICAgRnJlZVBvb2wgKFVzYlJuZGlzRGV2aWNlLT5Db25maWcpOw0KPiArICAgIEZyZWVQ b29sIChVc2JSbmRpc0RldmljZSk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiAr DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5TaWduYXR1cmUgICAgICAgICAgICAgICAgICAgICAgICAg ID0gVVNCX1JORElTX1NJR05BVFVSRTsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPk51bU9mSW50ZXJm YWNlICAgICAgICAgICAgICAgICAgICAgPSBJbnRlcmZhY2UuSW50ZXJmYWNlTnVtYmVyOw0KPiAr ICBVc2JSbmRpc0RldmljZS0+VXNiUm5kaXNIYW5kbGUgICAgICAgICAgICAgICAgICAgICA9IFJu ZGlzSGFuZGxlOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiQ2RjRGF0YUhhbmRsZSAgICAgICAg ICAgICAgICAgICA9IDA7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JJbyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgID0gVXNiSW87DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNi RXRoUmVjZWl2ZSAgICAgICAgICAgICAgID0gUm5kaXNVbmRpUmVjZWl2ZTsNCj4gKyAgVXNiUm5k aXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhUcmFuc21pdCAgICAgICAgICAgICAgPSBSbmRpc1VuZGlU cmFuc21pdDsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhJbnRlcnJ1cHQgICAg ICAgICAgICAgPSBVc2JSbmRpc0ludGVycnVwdDsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0 aC5Vc2JFdGhNYWNBZGRyZXNzICAgICAgICAgICAgPQ0KPiBHZXRVc2JFdGhNYWNBZGRyZXNzOw0K PiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aE1heEJ1bGtTaXplICAgICAgICAgICA9 IFVzYkV0aEJ1bGtTaXplOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkhlYWRlckZ1 bkRlc2NyaXB0b3IgICAgICA9DQo+IEdldFVzYkhlYWRlckZ1bkRlc2NyaXB0b3I7DQo+ICsgIFVz YlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiVW5pb25GdW5EZXNjcmlwdG9yICAgICAgID0NCj4gR2V0 VXNiVW5pb25GdW5EZXNjcmlwdG9yOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0 aEZ1bkRlc2NyaXB0b3IgICAgICAgICA9DQo+IEdldFVzYlJuZGlzRnVuRGVzY3JpcHRvcjsNCj4g KyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5TZXRVc2JFdGhNY2FzdEZpbHRlciAgICAgICAgPQ0K PiBTZXRVc2JSbmRpc01jYXN0RmlsdGVyOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlNl dFVzYkV0aFBvd2VyUGF0dGVybkZpbHRlciA9DQo+IFNldFVzYlJuZGlzUG93ZXJGaWx0ZXI7DQo+ ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguR2V0VXNiRXRoUG93ZXJQYXR0ZXJuRmlsdGVyID0N Cj4gR2V0VXNiUm5kaXNQb3dlckZpbHRlcjsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5T ZXRVc2JFdGhQYWNrZXRGaWx0ZXIgICAgICAgPQ0KPiBTZXRVc2JSbmRpc1BhY2tldEZpbHRlcjsN Cj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5HZXRVc2JFdGhTdGF0aXN0aWMgICAgICAgICAg PSBHZXRSbmRpc1N0YXRpc3RpYzsNCj4gKw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVz YkV0aFVuZGkuVXNiRXRoVW5kaUdldFN0YXRlICAgICAgICA9DQo+IFJuZGlzRHVtbXlSZXR1cm47 DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3RhcnQg ICAgICAgICAgID0NCj4gUm5kaXNVbmRpU3RhcnQ7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JF dGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3RvcCAgICAgICAgICAgID0NCj4gUm5kaXNVbmRpU3Rv cDsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlHZXRJ bml0SW5mbyAgICAgPQ0KPiBSbmRpc1VuZGlHZXRJbml0SW5mbzsNCj4gKyAgVXNiUm5kaXNEZXZp Y2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlHZXRDb25maWdJbmZvICAgPQ0KPiBSbmRp c1VuZGlHZXRDb25maWdJbmZvOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVu ZGkuVXNiRXRoVW5kaUluaXRpYWxpemUgICAgICA9DQo+IFJuZGlzVW5kaUluaXRpYWxpemU7DQo+ ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpUmVzZXQgICAg ICAgICAgID0NCj4gUm5kaXNVbmRpUmVzZXQ7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGgu VXNiRXRoVW5kaS5Vc2JFdGhVbmRpU2h1dGRvd24gICAgICAgID0NCj4gUm5kaXNVbmRpU2h1dGRv d247DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpSW50 ZXJydXB0RW5hYmxlID0NCj4gUm5kaXNEdW1teVJldHVybjsNCj4gKyAgVXNiUm5kaXNEZXZpY2Ut PlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlSZWNlaXZlRmlsdGVyICAgPQ0KPiBSbmRpc1Vu ZGlSZWNlaXZlRmlsdGVyOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGku VXNiRXRoVW5kaVN0YXRpb25BZGRyZXNzICA9DQo+IFJuZGlzRHVtbXlSZXR1cm47DQo+ICsgIFVz YlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3RhdGlzdGljcyAgICAg ID0gTlVMTDsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVu ZGlNY2FzdElwMk1hYyAgICAgPQ0KPiBSbmRpc0R1bW15UmV0dXJuOw0KPiArICBVc2JSbmRpc0Rl dmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaU52RGF0YSAgICAgICAgICA9DQo+IFJu ZGlzRHVtbXlSZXR1cm47DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5V c2JFdGhVbmRpR2V0U3RhdHVzICAgICAgID0NCj4gUm5kaXNVbmRpR2V0U3RhdHVzOw0KPiArICBV c2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaUZpbGxIZWFkZXIgICAg ICA9DQo+IFJuZGlzRHVtbXlSZXR1cm47DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNi RXRoVW5kaS5Vc2JFdGhVbmRpVHJhbnNtaXQgICAgICAgID0gTlVMTDsNCj4gKyAgVXNiUm5kaXNE ZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlSZWNlaXZlICAgICAgICAgPSBOVUxM Ow0KPiArDQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5NYXhUcmFuc2ZlclNpemUgICAgICAgPSBSTkRJ U19NQVhfVFJBTlNGRVJfU0laRTsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPk1heFBhY2tldHNQZXJU cmFuc2ZlciA9IDE7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5QYWNrZXRBbGlnbm1lbnRGYWN0b3Ig PSAwOw0KPiArDQo+ICsgIEluaXRpYWxpemVMaXN0SGVhZCAoJlVzYlJuZGlzRGV2aWNlLT5SZWNl aXZlUGFja2V0TGlzdCk7DQo+ICsNCj4gKyAgLy8gVGhpcyBpcyBhIFJORElTIGludGVyZmFjZS4g U2VlIHdoZXRoZXIgQ0RDLURBVEEgaW50ZXJmYWNlIGhhcyBhbHJlYWR5DQo+IGJlZW4gY29ubmVj dGVkIG9yIG5vdA0KPiArICBGaW5kTWF0Y2hpbmdDZGNEYXRhIChVc2JSbmRpc0RldmljZSk7DQo+ ICsNCj4gKyAgaWYgKFVzYlJuZGlzRGV2aWNlLT5Vc2JJb0NkY0RhdGEpIHsNCj4gKyAgICBTdGF0 dXMgPSBnQlMtPkluc3RhbGxQcm90b2NvbEludGVyZmFjZSAoDQo+ICsgICAgICAgICAgICAgICAg ICAgICZDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICAmZ0Vka0lJVXNi RXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgICBFRklfTkFUSVZFX0lOVEVS RkFDRSwNCj4gKyAgICAgICAgICAgICAgICAgICAgJihVc2JSbmRpc0RldmljZS0+VXNiRXRoKQ0K PiArICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gKyAgICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgQ29udHJv bGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiAr ICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAg Q29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgICAgIEZyZWVQ b29sIChVc2JSbmRpc0RldmljZS0+Q29uZmlnKTsNCj4gKyAgICAgIEZyZWVQb29sIChVc2JSbmRp c0RldmljZSk7DQo+ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0NCj4gKw0KPiArICAg IEdldEVuZHBvaW50IChVc2JSbmRpc0RldmljZS0+VXNiSW8sIFVzYlJuZGlzRGV2aWNlKTsNCj4g Kw0KPiArICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzIERldmljZUhhbmRsZSAlclxuIiwg VXNiUm5kaXNEZXZpY2UtDQo+ID5Vc2JSbmRpc0hhbmRsZSkpOw0KPiArICAgIERFQlVHICgoREVC VUdfSU5GTywgIkNEQyBEZXZpY2VIYW5kbGUgJXJcbiIsIFVzYlJuZGlzRGV2aWNlLQ0KPiA+VXNi Q2RjRGF0YUhhbmRsZSkpOw0KPiArICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gKyAgfQ0KPiAr DQo+ICsgIEZyZWVQb29sIChVc2JSbmRpc0RldmljZS0+Q29uZmlnKTsNCj4gKyAgRnJlZVBvb2wg KFVzYlJuZGlzRGV2aWNlKTsNCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ ICsNCj4gKy8qKg0KPiArICBDaGVja2FuZFN0b3BSbmRpc0RldmljZQ0KPiArDQo+ICsgIEBwYXJh bVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgIFByb3RvY29sIGluc3RhbmNlIHBvaW50ZXIuDQo+ ICsgIEBwYXJhbVtpbl0gIENvbnRyb2xsZXJIYW5kbGUgICAgIEhhbmRsZSBvZiBkZXZpY2UgdG8g YmluZCBkcml2ZXIgdG8uDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBU aGlzIGRyaXZlciBpcyBhZGRlZCB0byBDb250cm9sbGVySGFuZGxlDQo+ICsgIEByZXR2YWwgRUZJ X0RFVklDRV9FUlJPUiAgICAgVGhpcyBkcml2ZXIgY291bGQgbm90IGJlIHN0YXJ0ZWQgZHVlIHRv IGENCj4gZGV2aWNlIGVycm9yDQo+ICsgIEByZXR2YWwgb3RoZXIgICAgICAgICAgICAgICAgVGhp cyBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGRldmljZQ0KPiArDQo+ICsqKi8NCj4gK0VG SV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArQ2hlY2thbmRTdG9wUm5kaXNEZXZpY2UgKA0KPiArICBJ TiAgRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gIEVGSV9IQU5E TEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICApDQo+ICt7DQo+ICsg IEVGSV9TVEFUVVMgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX1VTQl9JT19QUk9UT0NPTCAg KlVzYklvOw0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICgNCj4gKyAgICAg ICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0Vm aVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVzYklv LA0KPiArICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAg ICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICBF RklfT1BFTl9QUk9UT0NPTF9HRVRfUFJPVE9DT0wNCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiAr ICB9DQo+ICsNCj4gKyAgaWYgKElzVXNiUm5kaXMgKFVzYklvKSkgew0KPiArICAgIFN0YXR1cyA9 IGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJI YW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsDQo+ ICsgICAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAg ICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgICAgICAgICAg KTsNCj4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiUm5kaXMgQ29udHJvbGxlckhhbmRsZSBT dG9wICVyXG4iLCBTdGF0dXMpKTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsN Cj4gKyAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFVT QiBSbmRpcyBEcml2ZXIgQmluZGluZyBTdG9wLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMg ICAgICAgICAgICAgICAgICBQcm90b2NvbCBpbnN0YW5jZSBwb2ludGVyLg0KPiArICBAcGFyYW1b aW5dICBDb250cm9sbGVySGFuZGxlICAgICAgSGFuZGxlIG9mIGRldmljZSB0byBzdG9wIGRyaXZl ciBvbg0KPiArICBAcGFyYW1baW5dICBOdW1iZXJPZkNoaWxkcmVuICAgICAgTnVtYmVyIG9mIEhh bmRsZXMgaW4NCj4gQ2hpbGRIYW5kbGVCdWZmZXIuIElmIG51bWJlciBvZg0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4gaXMgemVybyBzdG9wIHRoZSBlbnRp cmUgYnVzIGRyaXZlci4NCj4gKyAgQHBhcmFtW2luXSAgQ2hpbGRIYW5kbGVCdWZmZXIgICAgIExp c3Qgb2YgQ2hpbGQgSGFuZGxlcyB0byBTdG9wLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgICAgICAgICBUaGlzIGRyaXZlciBpcyByZW1vdmVkIENvbnRyb2xsZXJIYW5kbGUN Cj4gKyAgQHJldHZhbCBvdGhlciAgICAgICAgICAgICAgICAgICAgIFRoaXMgZHJpdmVyIHdhcyBu b3QgcmVtb3ZlZCBmcm9tIHRoaXMgZGV2aWNlDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0K PiArRUZJQVBJDQo+ICtVc2JSbmRpc0RyaXZlclN0b3AgKA0KPiArICBJTiAgRUZJX0RSSVZFUl9C SU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAg ICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgTnVtYmVyT2ZDaGlsZHJlbiwNCj4gKyAgSU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAg ICAgICAgKkNoaWxkSGFuZGxlQnVmZmVyDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAg ICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NP TCAgKlVzYkV0aFByb3RvY29sOw0KPiArICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAgICAgICpV c2JSbmRpc0RldmljZTsNCj4gKw0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJVc2JSbmRpc0Ry aXZlclN0b3AgQ29udHJvbGxlckhhbmRsZSAlbHhcbiIsDQo+IENvbnRyb2xsZXJIYW5kbGUpKTsN Cj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAg ICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZGtJSVVzYkV0 aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZVc2JFdGhQcm90 b2NvbCwNCj4gKyAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAg ICAgRUZJX09QRU5fUFJPVE9DT0xfR0VUX1BST1RPQ09MDQo+ICsgICAgICAgICAgICAgICAgICAp Ow0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgU3RhdHVzID0gQ2hlY2th bmRTdG9wUm5kaXNEZXZpY2UgKFRoaXMsIENvbnRyb2xsZXJIYW5kbGUpOw0KPiArICAgIHJldHVy biBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBVc2JSbmRpc0RldmljZSA9IFVTQl9STkRJU19E RVZJQ0VfRlJPTV9USElTIChVc2JFdGhQcm90b2NvbCk7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JT LT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5V c2JDZGNEYXRhSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29s R3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ ICsgICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+VXNiQ2RjRGF0YUhhbmRsZQ0KPiAr ICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAr ICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTpDbG9zZVByb3RvY29sIHN0YXR1cyA9ICVyXG4i LCBfX2Z1bmNfXywNCj4gU3RhdHVzKSk7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBnQlMt PlVuaW5zdGFsbFByb3RvY29sSW50ZXJmYWNlICgNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRy b2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xH dWlkLA0KPiArICAgICAgICAgICAgICAgICAgVXNiRXRoUHJvdG9jb2wNCj4gKyAgICAgICAgICAg ICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4g U3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5DbG9zZVByb3RvY29sICgN Cj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAg ICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgVGhpcy0+ RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5k bGUNCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgRnJlZVBvb2wgKFVzYlJuZGlz RGV2aWNlLT5Db25maWcpOw0KPiArICBGcmVlUG9vbCAoVXNiUm5kaXNEZXZpY2UpOw0KPiArDQo+ ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlVzYlJuZGlzRHJpdmVyU3RvcCAlclxuIiwgU3RhdHVz KSk7DQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBFbnRyeXBv aW50IG9mIFJORElTIERyaXZlci4NCj4gKw0KPiArICBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBlbnRy eXBvaW50IG9mIFJORElTIERyaXZlci4gSXQgaW5zdGFsbHMgRHJpdmVyIEJpbmRpbmcNCj4gKyAg UHJvdG9jb2xzIHRvZ2V0aGVyIHdpdGggQ29tcG9uZW50IE5hbWUgUHJvdG9jb2xzLg0KPiArDQo+ ICsgIEBwYXJhbVtpbl0gIEltYWdlSGFuZGxlICAgICAgIFRoZSBmaXJtd2FyZSBhbGxvY2F0ZWQg aGFuZGxlIGZvciB0aGUgRUZJDQo+IGltYWdlLg0KPiArICBAcGFyYW1baW5dICBTeXN0ZW1UYWJs ZSAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSSBTeXN0ZW0gVGFibGUuDQo+ICsNCj4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIGVudHJ5IHBvaW50IGlzIGV4ZWN1dGVkIHN1 Y2Nlc3NmdWxseS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1Vz YlJuZGlzRW50cnkgKA0KPiArICBJTiBFRklfSEFORExFICAgICAgICBJbWFnZUhhbmRsZSwNCj4g KyAgSU4gRUZJX1NZU1RFTV9UQUJMRSAgKlN5c3RlbVRhYmxlDQo+ICsgICkNCj4gK3sNCj4gKyAg Z1VzYlJuZGlzRHJpdmVyQmluZGluZy5Ecml2ZXJCaW5kaW5nSGFuZGxlID0gSW1hZ2VIYW5kbGU7 DQo+ICsgIGdVc2JSbmRpc0RyaXZlckJpbmRpbmcuSW1hZ2VIYW5kbGUgICAgICAgICA9IEltYWdl SGFuZGxlOw0KPiArDQo+ICsgIHJldHVybiBnQlMtPkluc3RhbGxNdWx0aXBsZVByb3RvY29sSW50 ZXJmYWNlcyAoDQo+ICsgICAgICAgICAgICAgICAgJmdVc2JSbmRpc0RyaXZlckJpbmRpbmcuRHJp dmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAmZ0VmaURyaXZlckJpbmRpbmdQ cm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgJmdVc2JSbmRpc0RyaXZlckJpbmRpbmcs DQo+ICsgICAgICAgICAgICAgICAgJmdFZmlDb21wb25lbnROYW1lMlByb3RvY29sR3VpZCwNCj4g KyAgICAgICAgICAgICAgICAmZ1VzYlJuZGlzQ29tcG9uZW50TmFtZTIsDQo+ICsgICAgICAgICAg ICAgICAgTlVMTA0KPiArICAgICAgICAgICAgICAgICk7DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9N ZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL1VzYlJuZGlzL1VzYlJuZGlzLmgNCj4gYi9N ZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL1VzYlJuZGlzL1VzYlJuZGlzLmgNCj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMC4uOWMzODY0MmZmZQ0KPiAtLS0g L2Rldi9udWxsDQo+ICsrKyBiL01kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvVXNiUm5k aXMvVXNiUm5kaXMuaA0KPiBAQCAtMCwwICsxLDU4NiBAQA0KPiArLyoqIEBmaWxlDQo+ICsgIEhl YWRlciBmaWxlIGZvciBmb3IgVVNCIFJuZGlzIGRyaXZlcg0KPiArDQo+ICsgIENvcHlyaWdodCAo YykgMjAyMywgQW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExMQy4gQWxsIHJpZ2h0 cw0KPiByZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1D bGF1c2UtUGF0ZW50DQo+ICsqKi8NCj4gKw0KPiArI2lmbmRlZiBfVVNCX1JORElTX0hfDQo+ICsj ZGVmaW5lIF9VU0JfUk5ESVNfSF8NCj4gKw0KPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaURyaXZl ckVudHJ5UG9pbnQuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNUYWJs ZUxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaUxpYi5oPg0KPiArI2luY2x1ZGUgPExp YnJhcnkvRGV2aWNlUGF0aExpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4N Cj4gKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4NCj4gKyNpbmNsdWRl IDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlVc2JM aWIuaD4NCj4gKyNpbmNsdWRlIDxQcm90b2NvbC9Vc2JJby5oPg0KPiArI2luY2x1ZGUgPFByb3Rv Y29sL1VzYkV0aGVybmV0UHJvdG9jb2wuaD4NCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3QgX1JFTU9U RV9ORElTX01TR19IRUFERVINCj4gUkVNT1RFX05ESVNfTVNHX0hFQURFUjsNCj4gKw0KPiArdHlw ZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgU2lnbmF0 dXJlOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICAgVXNiRXRoOw0KPiArICBF RklfSEFORExFICAgICAgICAgICAgICAgICAgICAgVXNiQ2RjRGF0YUhhbmRsZTsNCj4gKyAgRUZJ X0hBTkRMRSAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzSGFuZGxlOw0KPiArICBFRklfVVNC X0lPX1BST1RPQ09MICAgICAgICAgICAgKlVzYklvOw0KPiArICBFRklfVVNCX0lPX1BST1RPQ09M ICAgICAgICAgICAgKlVzYklvQ2RjRGF0YTsNCj4gKyAgRUZJX1VTQl9DT05GSUdfREVTQ1JJUFRP UiAgICAgICpDb25maWc7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1P ZkludGVyZmFjZTsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgIEJ1bGtJbkVu ZHBvaW50Ow0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgQnVsa091dEVuZHBv aW50Ow0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJydXBFbmRwb2lu dDsNCj4gKyAgRUZJX01BQ19BRERSRVNTICAgICAgICAgICAgICAgIE1hY0FkZHJlc3M7DQo+ICsg IFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICBSZXF1ZXN0SWQ7DQo+ICsgIFVJTlQzMiAg ICAgICAgICAgICAgICAgICAgICAgICBNZWRpdW07DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAg ICAgICAgICAgICBNYXhQYWNrZXRzUGVyVHJhbnNmZXI7DQo+ICsgIFVJTlQzMiAgICAgICAgICAg ICAgICAgICAgICAgICBNYXhUcmFuc2ZlclNpemU7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAg ICAgICAgICAgICBQYWNrZXRBbGlnbm1lbnRGYWN0b3I7DQo+ICsgIExJU1RfRU5UUlkgICAgICAg ICAgICAgICAgICAgICBSZWNlaXZlUGFja2V0TGlzdDsNCj4gK30gVVNCX1JORElTX0RFVklDRTsN Cj4gKw0KPiArI2RlZmluZSBVU0JfUk5ESVNfRFJJVkVSX1ZFUlNJT04gICAgICAgMQ0KPiArI2Rl ZmluZSBVU0JfVFhfRVRIRVJORVRfQlVMS19USU1FT1VUICAgMzAwMA0KPiArI2RlZmluZSBVU0Jf UlhfRVRIRVJORVRfQlVMS19USU1FT1VUICAgMw0KPiArI2RlZmluZSBVU0JfRVRIRVJORVRfVFJB TlNGRVJfVElNRU9VVCAgMjAwDQo+ICsNCj4gKyNkZWZpbmUgTEFOX0JVTEtJTl9DTURfQ09OVFJP TCAgICAgIDENCj4gKyNkZWZpbmUgTUFYSU1VTV9TVE9QQlVMS0lOX0NOVCAgICAgIDMwMCAgICAg ICAgLy8gSW5kaWNhdGluZyBtYXhpbXVtDQo+IGNvdW50cyBmb3Igd2FpdGluZyBidWxrIGluIGNv bW1hbmQNCj4gKyNkZWZpbmUgTUlOSU1VTV9TVE9QQlVMS0lOX0NOVCAgICAgIDMgICAgICAgICAg Ly8gSW5kaWNhdGluZyBtaW5pbXVtDQo+IGNvdW50cyBmb3Igd2FpdGluZyBidWxrIGluIGNvbW1h bmQNCj4gKyNkZWZpbmUgQlVMS0lOX0NNRF9QT0xMSU5HX0NOVCAgICAgIDMwMCAgICAgICAgLy8g SW5kaWNhdGluZyB0aGUgd2FpdGluZw0KPiBjb3VudHMgZm9yIHNlbmQgYnVsayBpbiBjb21tYW5k IHdoZW4gc3lzdGVtIHBlbmRpbmcNCj4gKyNkZWZpbmUgUk5ESVNfUkVTRVJWRURfQllURV9MRU5H VEggIDgNCj4gKw0KPiArI2RlZmluZSBVU0JfUk5ESVNfU0lHTkFUVVJFICBTSUdOQVRVUkVfMzIo J3InLCAnbicsICdkJywgJ3MnKQ0KPiArI2RlZmluZSBVU0JfUk5ESVNfREVWSUNFX0ZST01fVEhJ UyhhKSAgQ1IgKGEsIFVTQl9STkRJU19ERVZJQ0UsDQo+IFVzYkV0aCwgVVNCX1JORElTX1NJR05B VFVSRSkNCj4gKw0KPiArZXh0ZXJuIEVGSV9DT01QT05FTlRfTkFNRTJfUFJPVE9DT0wNCj4gZ1Vz YlJuZGlzQ29tcG9uZW50TmFtZTI7DQo+ICsNCj4gK3N0cnVjdCBCSVRfTUFQIHsNCj4gKyAgdW5z aWduZWQgaW50ICAgIFNyYzsNCj4gKyAgdW5zaWduZWQgaW50ICAgIERzdDsNCj4gK307DQo+ICsN Cj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVXNiUm5kaXNEcml2ZXJTdXBwb3J0ZWQgKA0K PiArICBJTiBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBFRklf SEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgIElOIEVGSV9E RVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgKlJlbWFpbmluZ0RldmljZVBhdGgNCj4gKyAgKTsNCj4g Kw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVc2JSbmRpc0RyaXZlclN0YXJ0ICgNCj4g KyAgSU4gRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gRUZJX0hB TkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICBJTiBFRklfREVW SUNFX1BBVEhfUFJPVE9DT0wgICAgICpSZW1haW5pbmdEZXZpY2VQYXRoDQo+ICsgICk7DQo+ICsN Cj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVXNiUm5kaXNEcml2ZXJTdG9wICgNCj4gKyAg SU4gIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOICBFRklfSEFO RExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgIElOICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgIE51bWJlck9mQ2hpbGRyZW4sDQo+ICsgIElOICBFRklfSEFO RExFICAgICAgICAgICAgICAgICAgICpDaGlsZEhhbmRsZUJ1ZmZlcg0KPiArICApOw0KPiArDQo+ ICtFRklfU1RBVFVTDQo+ICtMb2FkQWxsRGVzY3JpcHRvciAoDQo+ICsgIElOICBFRklfVVNCX0lP X1BST1RPQ09MICAgICAgICAqVXNiSW8sDQo+ICsgIE9VVCBFRklfVVNCX0NPTkZJR19ERVNDUklQ VE9SICAqKkNvbmZpZ0Rlc2MNCj4gKyAgKTsNCj4gKw0KPiArQk9PTEVBTg0KPiArTmV4dERlc2Ny aXB0b3IgKA0KPiArICBJTiBFRklfVVNCX0NPTkZJR19ERVNDUklQVE9SICAqRGVzYywNCj4gKyAg SU4gT1VUIFVJTlROICAgICAgICAgICAgICAgICAgKk9mZnNldA0KPiArICApOw0KPiArDQo+ICtF RklfU1RBVFVTDQo+ICtHZXRGdW5jdGlvbmFsRGVzY3JpcHRvciAoDQo+ICsgIElOICBFRklfVVNC X0NPTkZJR19ERVNDUklQVE9SICAqQ29uZmlnLA0KPiArICBJTiAgVUlOVDggICAgICAgICAgICAg ICAgICAgICAgRnVuRGVzY3JpcHRvclR5cGUsDQo+ICsgIE9VVCBWT0lEICAgICAgICAgICAgICAg ICAgICAgICAqRGF0YUJ1ZmZlcg0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtHZXRFbmRwb2lu dCAoDQo+ICsgIElOICAgICAgRUZJX1VTQl9JT19QUk9UT0NPTCAgKlVzYklvLA0KPiArICBJTiBP VVQgIFVTQl9STkRJU19ERVZJQ0UgICAgICpVc2JSbmRpc0RldmljZQ0KPiArICApOw0KPiArDQo+ ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1VzYlJuZGlzSW50ZXJydXB0ICgNCj4gKyAgSU4g RURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gQk9PTEVBTiAgICAg ICAgICAgICAgICAgICAgICBJc05ld1RyYW5zZmVyLA0KPiArICBJTiBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAgIFBvbGxpbmdJbnRlcnZhbCwNCj4gKyAgSU4gRUZJX1VTQl9ERVZJQ0VfUkVR VUVTVCAgICAgICAqUmVxdXN0DQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQ SQ0KPiArSW50ZXJydXB0Q2FsbGJhY2sgKA0KPiArICBJTiAgVk9JRCAgICAqRGF0YSwNCj4gKyAg SU4gIFVJTlROICAgRGF0YUxlbmd0aCwNCj4gKyAgSU4gIFZPSUQgICAgKkNvbnRleHQsDQo+ICsg IElOICBVSU5UMzIgIFN0YXR1cw0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklB UEkNCj4gK0dldFVzYkV0aE1hY0FkZHJlc3MgKA0KPiArICBJTiAgRURLSUlfVVNCX0VUSEVSTkVU X1BST1RPQ09MICAqVGhpcywNCj4gKyAgT1VUIEVGSV9NQUNfQUREUkVTUyAgICAgICAgICAgICAg Kk1hY0FkZHJlc3MNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtV c2JFdGhCdWxrU2l6ZSAoDQo+ICsgIElOICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpU aGlzLA0KPiArICBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAqQnVsa1NpemUNCj4g KyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc0R1bW15UmV0dXJu ICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4g KyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlTdGFydCAo DQo+ICsgIElOIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiBOSUNfREFUQSAgKk5pYw0KPiArICAp Ow0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaVN0b3AgKA0KPiAr ICBJTiBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4g Kw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlHZXRJbml0SW5mbyAoDQo+ ICsgIElOIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiBOSUNfREFUQSAgKk5pYw0KPiArICApOw0K PiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaUdldENvbmZpZ0luZm8g KA0KPiArICBJTiBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMNCj4gKyAg KTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlJbml0aWFsaXpl ICgNCj4gKyAgSU4gUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOIE5JQ19EQVRBICAqTmljDQo+ICsg ICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRpVHJhbnNtaXQg KA0KPiArICBJTiAgICAgIFBYRV9DREIgICAgICAgICAgICAgICAgICAgICAgKkNkYiwNCj4gKyAg SU4gICAgICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiAgICAg IFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1bGtPdXREYXRhLA0KPiArICBJTiBPVVQg IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgKkRhdGFMZW5ndGgNCj4gKyAgKTsNCj4gKw0K PiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlSZWNlaXZlICgNCj4gKyAgSU4g ICAgIFBYRV9DREIgICAgICAgICAgICAgICAgICAgICAgKkNkYiwNCj4gKyAgSU4gICAgIEVES0lJ X1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIE9VVCBWT0lEICAgICAgICAg ICAgICAgICAgICAgICAgICpCdWxrSW5EYXRhLA0KPiArICBJTiBPVVQgVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgICAqRGF0YUxlbmd0aA0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ ICtFRklBUEkNCj4gK1JuZGlzVW5kaVJlc2V0ICgNCj4gKyAgSU4gUFhFX0NEQiAgICpDZGIsDQo+ ICsgIElOIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VG SUFQSQ0KPiArUm5kaXNVbmRpU2h1dGRvd24gKA0KPiArICBJTiBQWEVfQ0RCICAgKkNkYiwNCj4g KyAgSU4gTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJ QVBJDQo+ICtSbmRpc1VuZGlSZWNlaXZlRmlsdGVyICgNCj4gKyAgSU4gUFhFX0NEQiAgICpDZGIs DQo+ICsgIElOIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4g K0VGSUFQSQ0KPiArUm5kaXNVbmRpR2V0U3RhdHVzICgNCj4gKyAgSU4gUFhFX0NEQiAgICpDZGIs DQo+ICsgIElOIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4g K0VGSUFQSQ0KPiArR2V0VXNiSGVhZGVyRnVuRGVzY3JpcHRvciAoDQo+ICsgIElOICBFREtJSV9V U0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBPVVQgVVNCX0hFQURFUl9GVU5fREVT Q1JJUFRPUiAgICAqVXNiSGVhZGVyRnVuRGVzY3JpcHRvcg0KPiArICApOw0KPiArDQo+ICtFRklf U1RBVFVTDQo+ICtFRklBUEkNCj4gK0dldFVzYlVuaW9uRnVuRGVzY3JpcHRvciAoDQo+ICsgIElO ICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBPVVQgVVNCX1VOSU9O X0ZVTl9ERVNDUklQVE9SICAgICAqVXNiVW5pb25GdW5EZXNjcmlwdG9yDQo+ICsgICk7DQo+ICsN Cj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArR2V0VXNiUm5kaXNGdW5EZXNjcmlwdG9yICgN Cj4gKyAgSU4gIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIE9VVCBV U0JfRVRIRVJORVRfRlVOX0RFU0NSSVBUT1IgICpVc2JFdGhGdW5EZXNjcmlwdG9yDQo+ICsgICk7 DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArU2V0VXNiUm5kaXNNY2FzdEZpbHRl ciAoDQo+ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElO IFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUsDQo+ICsgIElOIFZPSUQgICAgICAg ICAgICAgICAgICAgICAgICAgKk1jYXN0QWRkcg0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVT DQo+ICtFRklBUEkNCj4gK1NldFVzYlJuZGlzUG93ZXJGaWx0ZXIgKA0KPiArICBJTiBFREtJSV9V U0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBVSU5UMTYgICAgICAgICAgICAg ICAgICAgICAgIFZhbHVlLA0KPiArICBJTiBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgIExl bmd0aCwNCj4gKyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAqUGF0dGVybkZpbHRl cg0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0dldFVzYlJuZGlz UG93ZXJGaWx0ZXIgKA0KPiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlz LA0KPiArICBJTiBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlLA0KPiArICBJTiBC T09MRUFOICAgICAgICAgICAgICAgICAgICAgICpQYXR0ZXJuQWN0aXZlDQo+ICsgICk7DQo+ICsN Cj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArU2V0VXNiUm5kaXNQYWNrZXRGaWx0ZXIgKA0K PiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBVSU5U MTYgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFU VVMNCj4gK0VGSUFQSQ0KPiArR2V0Um5kaXNTdGF0aXN0aWMgKA0KPiArICBJTiBFREtJSV9VU0Jf RVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBVSU5UMTYgICAgICAgICAgICAgICAg ICAgICAgIFZhbHVlLA0KPiArICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICpTdGF0 aXN0aWMNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArUm5kaXNDb250cm9sTXNnICgN Cj4gKyAgSU4gIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICpVc2JSbmRpc0RldmljZSwNCj4gKyAg SU4gIFJFTU9URV9ORElTX01TR19IRUFERVIgICpSbmRpc01zZywNCj4gKyAgT1VUIFJFTU9URV9O RElTX01TR19IRUFERVIgICpSbmRpc01zZ1Jlc3BvbnNlDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9T VEFUVVMNCj4gK1JuZGlzVHJhbnNtaXREYXRhTXNnICgNCj4gKyAgSU4gIFVTQl9STkRJU19ERVZJ Q0UgICAgICAgICpVc2JSbmRpc0RldmljZSwNCj4gKyAgSU4gIFJFTU9URV9ORElTX01TR19IRUFE RVIgICpSbmRpc01zZywNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICpUcmFuc2Zl ckxlbmd0aA0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtSbmRpc1JlY2VpdmVEYXRh TXNnICgNCj4gKyAgSU4gIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICpVc2JSbmRpc0RldmljZSwN Cj4gKyAgSU4gIFJFTU9URV9ORElTX01TR19IRUFERVIgICpSbmRpc01zZywNCj4gKyAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICpUcmFuc2Zlckxlbmd0aA0KPiArICApOw0KPiArDQo+ICtW T0lEDQo+ICtQcmludFJuZGlzTXNnICgNCj4gKyAgSU4gIFJFTU9URV9ORElTX01TR19IRUFERVIg ICpSbmRpc01zZw0KPiArICApOw0KPiArDQo+ICsjZGVmaW5lIFJORElTX01BSk9SX1ZFUlNJT04g ICAgICAweDAwMDAwMDAxDQo+ICsjZGVmaW5lIFJORElTX01JTk9SX1ZFUlNJT04gICAgICAweDAw MDAwMDAwDQo+ICsjZGVmaW5lIFJORElTX01BWF9UUkFOU0ZFUl9TSVpFICAweDQwMDANCj4gKw0K PiArI2RlZmluZSBSTkRJU19QQUNLRVRfTVNHICAgICAgICAgICAweDAwMDAwMDAxDQo+ICsjZGVm aW5lIFJORElTX0lOSVRJQUxJWkVfTVNHICAgICAgIDB4MDAwMDAwMDINCj4gKyNkZWZpbmUgUk5E SVNfSU5JVElBTElaRV9DTVBMVCAgICAgMHg4MDAwMDAwMg0KPiArI2RlZmluZSBSTkRJU19ITFRf TVNHICAgICAgICAgICAgICAweDAwMDAwMDAzDQo+ICsjZGVmaW5lIFJORElTX1FVRVJZX01TRyAg ICAgICAgICAgIDB4MDAwMDAwMDQNCj4gKyNkZWZpbmUgUk5ESVNfUVVFUllfQ01QTFQgICAgICAg ICAgMHg4MDAwMDAwNA0KPiArI2RlZmluZSBSTkRJU19TRVRfTVNHICAgICAgICAgICAgICAweDAw MDAwMDA1DQo+ICsjZGVmaW5lIFJORElTX1NFVF9DTVBMVCAgICAgICAgICAgIDB4ODAwMDAwMDUN Cj4gKyNkZWZpbmUgUk5ESVNfUkVTRVRfTVNHICAgICAgICAgICAgMHgwMDAwMDAwNg0KPiArI2Rl ZmluZSBSTkRJU19SRVNFVF9DTVBMVCAgICAgICAgICAweDgwMDAwMDA2DQo+ICsjZGVmaW5lIFJO RElTX0lORElDQVRFX1NUQVRVU19NU0cgIDB4MDAwMDAwMDcNCj4gKyNkZWZpbmUgUk5ESVNfS0VF UEFMSVZFX01TRyAgICAgICAgMHgwMDAwMDAwOA0KPiArI2RlZmluZSBSTkRJU19LRUVQQUxJVkVf Q01QTFQgICAgICAweDgwMDAwMDA4DQo+ICsNCj4gKyNkZWZpbmUgUk5ESVNfU1RBVFVTX1NVQ0NF U1MgICAgICAgICAgIDB4MDAwMDAwMDANCj4gKyNkZWZpbmUgUk5ESVNfU1RBVFVTX0ZBSUxVUkUg ICAgICAgICAgIDB4QzAwMDAwMDENCj4gKyNkZWZpbmUgUk5ESVNfU1RBVFVTX0lOVkFMSURfREFU QSAgICAgIDB4QzAwMTAwMTUNCj4gKyNkZWZpbmUgUk5ESVNfU1RBVFVTX05PVF9TVVBQT1JURUQg ICAgIDB4QzAwMDAwQkINCj4gKyNkZWZpbmUgUk5ESVNfU1RBVFVTX01FRElBX0NPTk5FQ1QgICAg IDB4NDAwMTAwMEINCj4gKyNkZWZpbmUgUk5ESVNfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1QgIDB4 NDAwMTAwMEMNCj4gKw0KPiArI2RlZmluZSBSTkRJU19DT05UUk9MX1RJTUVPVVQgICAgMTAwMDAg ICAgICAgICAgICAvLyAxMHNlYw0KPiArI2RlZmluZSBSTkRJU19LRUVQQUxJVkVfVElNRU9VVCAg NTAwMCAgICAgICAgICAgICAvLyA1c2VjDQo+ICsNCj4gKyNkZWZpbmUgU0VORF9FTkNBUFNVTEFU RURfQ09NTUFORCAgMHgwMDAwMDAwMA0KPiArI2RlZmluZSBHRVRfRU5DQVBTVUxBVEVEX1JFU1BP TlNFICAweDAwMDAwMDAxDQo+ICsNCj4gKy8vDQo+ICsvLyBHZW5lcmFsIE9iamVjdHMNCj4gKy8v DQo+ICsvLyBUYWtlbiBmcm9tIE5URERORElTLkgNCj4gKyNkZWZpbmUgT0lEX0dFTl9TVVBQT1JU RURfTElTVCAgICAgICAgIDB4MDAwMTAxMDENCj4gKyNkZWZpbmUgT0lEX0dFTl9IQVJEV0FSRV9T VEFUVVMgICAgICAgIDB4MDAwMTAxMDINCj4gKyNkZWZpbmUgT0lEX0dFTl9NRURJQV9TVVBQT1JU RUQgICAgICAgIDB4MDAwMTAxMDMNCj4gKyNkZWZpbmUgT0lEX0dFTl9NRURJQV9JTl9VU0UgICAg ICAgICAgIDB4MDAwMTAxMDQNCj4gKyNkZWZpbmUgT0lEX0dFTl9NQVhJTVVNX0xPT0tBSEVBRCAg ICAgIDB4MDAwMTAxMDUNCj4gKyNkZWZpbmUgT0lEX0dFTl9NQVhJTVVNX0ZSQU1FX1NJWkUgICAg IDB4MDAwMTAxMDYNCj4gKyNkZWZpbmUgT0lEX0dFTl9MSU5LX1NQRUVEICAgICAgICAgICAgIDB4 MDAwMTAxMDcNCj4gKyNkZWZpbmUgT0lEX0dFTl9UUkFOU01JVF9CVUZGRVJfU1BBQ0UgIDB4MDAw MTAxMDgNCj4gKyNkZWZpbmUgT0lEX0dFTl9SRUNFSVZFX0JVRkZFUl9TUEFDRSAgIDB4MDAwMTAx MDkNCj4gKyNkZWZpbmUgT0lEX0dFTl9UUkFOU01JVF9CTE9DS19TSVpFICAgIDB4MDAwMTAxMEEN Cj4gKyNkZWZpbmUgT0lEX0dFTl9SRUNFSVZFX0JMT0NLX1NJWkUgICAgIDB4MDAwMTAxMEINCj4g KyNkZWZpbmUgT0lEX0dFTl9WRU5ET1JfSUQgICAgICAgICAgICAgIDB4MDAwMTAxMEMNCj4gKyNk ZWZpbmUgT0lEX0dFTl9WRU5ET1JfREVTQ1JJUFRJT04gICAgIDB4MDAwMTAxMEQNCj4gKyNkZWZp bmUgT0lEX0dFTl9DVVJSRU5UX1BBQ0tFVF9GSUxURVIgIDB4MDAwMTAxMEUNCj4gKyNkZWZpbmUg T0lEX0dFTl9DVVJSRU5UX0xPT0tBSEVBRCAgICAgIDB4MDAwMTAxMEYNCj4gKyNkZWZpbmUgT0lE X0dFTl9EUklWRVJfVkVSU0lPTiAgICAgICAgIDB4MDAwMTAxMTANCj4gKyNkZWZpbmUgT0lEX0dF Tl9NQVhJTVVNX1RPVEFMX1NJWkUgICAgIDB4MDAwMTAxMTENCj4gKyNkZWZpbmUgT0lEX0dFTl9Q Uk9UT0NPTF9PUFRJT05TICAgICAgIDB4MDAwMTAxMTINCj4gKyNkZWZpbmUgT0lEX0dFTl9NQUNf T1BUSU9OUyAgICAgICAgICAgIDB4MDAwMTAxMTMNCj4gKyNkZWZpbmUgT0lEX0dFTl9NRURJQV9D T05ORUNUX1NUQVRVUyAgIDB4MDAwMTAxMTQNCj4gKyNkZWZpbmUgT0lEX0dFTl9NQVhJTVVNX1NF TkRfUEFDS0VUUyAgIDB4MDAwMTAxMTUNCj4gKyNkZWZpbmUgT0lEX0dFTl9WRU5ET1JfRFJJVkVS X1ZFUlNJT04gIDB4MDAwMTAxMTYNCj4gKw0KPiArI2RlZmluZSBPSURfR0VOX1hNSVRfT0sgICAg ICAgIDB4MDAwMjAxMDENCj4gKyNkZWZpbmUgT0lEX0dFTl9SQ1ZfT0sgICAgICAgICAweDAwMDIw MTAyDQo+ICsjZGVmaW5lIE9JRF9HRU5fWE1JVF9FUlJPUiAgICAgMHgwMDAyMDEwMw0KPiArI2Rl ZmluZSBPSURfR0VOX1JDVl9FUlJPUiAgICAgIDB4MDAwMjAxMDQNCj4gKyNkZWZpbmUgT0lEX0dF Tl9SQ1ZfTk9fQlVGRkVSICAweDAwMDIwMTA1DQo+ICsNCj4gKyNkZWZpbmUgT0lEX0dFTl9ESVJF Q1RFRF9CWVRFU19YTUlUICAgIDB4MDAwMjAyMDENCj4gKyNkZWZpbmUgT0lEX0dFTl9ESVJFQ1RF RF9GUkFNRVNfWE1JVCAgIDB4MDAwMjAyMDINCj4gKyNkZWZpbmUgT0lEX0dFTl9NVUxUSUNBU1Rf QllURVNfWE1JVCAgIDB4MDAwMjAyMDMNCj4gKyNkZWZpbmUgT0lEX0dFTl9NVUxUSUNBU1RfRlJB TUVTX1hNSVQgIDB4MDAwMjAyMDQNCj4gKyNkZWZpbmUgT0lEX0dFTl9CUk9BRENBU1RfQllURVNf WE1JVCAgIDB4MDAwMjAyMDUNCj4gKyNkZWZpbmUgT0lEX0dFTl9CUk9BRENBU1RfRlJBTUVTX1hN SVQgIDB4MDAwMjAyMDYNCj4gKyNkZWZpbmUgT0lEX0dFTl9ESVJFQ1RFRF9CWVRFU19SQ1YgICAg IDB4MDAwMjAyMDcNCj4gKyNkZWZpbmUgT0lEX0dFTl9ESVJFQ1RFRF9GUkFNRVNfUkNWICAgIDB4 MDAwMjAyMDgNCj4gKyNkZWZpbmUgT0lEX0dFTl9NVUxUSUNBU1RfQllURVNfUkNWICAgIDB4MDAw MjAyMDkNCj4gKyNkZWZpbmUgT0lEX0dFTl9NVUxUSUNBU1RfRlJBTUVTX1JDViAgIDB4MDAwMjAy MEENCj4gKyNkZWZpbmUgT0lEX0dFTl9CUk9BRENBU1RfQllURVNfUkNWICAgIDB4MDAwMjAyMEIN Cj4gKyNkZWZpbmUgT0lEX0dFTl9CUk9BRENBU1RfRlJBTUVTX1JDViAgIDB4MDAwMjAyMEMNCj4g KyNkZWZpbmUgT0lEX0dFTl9SQ1ZfQ1JDX0VSUk9SICAgICAgICAgIDB4MDAwMjAyMEQNCj4gKyNk ZWZpbmUgT0lEX0dFTl9UUkFOU01JVF9RVUVVRV9MRU5HVEggIDB4MDAwMjAyMEUNCj4gKw0KPiAr I2RlZmluZSBPSURfODAyXzNfQ1VSUkVOVF9BRERSRVNTICAweDAxMDEwMTAyDQo+ICsvLw0KPiAr Ly8gTmRpcyBQYWNrZXQgRmlsdGVyIEJpdHMgKE9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVS KS4NCj4gKy8vDQo+ICsjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfRElSRUNURUQgICAgICAgIDB4 MDAwMQ0KPiArI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVCAgICAgICAweDAwMDIN Cj4gKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUICAgMHgwMDA0DQo+ICsj ZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfQlJPQURDQVNUICAgICAgIDB4MDAwOA0KPiArI2RlZmlu ZSBORElTX1BBQ0tFVF9UWVBFX1NPVVJDRV9ST1VUSU5HICAweDAwMTANCj4gKyNkZWZpbmUgTkRJ U19QQUNLRVRfVFlQRV9QUk9NSVNDVU9VUyAgICAgMHgwMDIwDQo+ICsjZGVmaW5lIE5ESVNfUEFD S0VUX1RZUEVfU01UICAgICAgICAgICAgIDB4MDA0MA0KPiArI2RlZmluZSBORElTX1BBQ0tFVF9U WVBFX0FMTF9MT0NBTCAgICAgICAweDAwODANCj4gKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9N QUNfRlJBTUUgICAgICAgMHg4MDAwDQo+ICsjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfRlVOQ1RJ T05BTCAgICAgIDB4NDAwMA0KPiArI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0FMTF9GVU5DVElP TkFMICAweDIwMDANCj4gKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9HUk9VUCAgICAgICAgICAg MHgxMDAwDQo+ICsNCj4gKyNwcmFnbWEgcGFjaygxKQ0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCBf UkVNT1RFX05ESVNfTVNHX0hFQURFUiB7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlVHlwZTsNCj4g KyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5ndGg7DQo+ICt9IFJFTU9URV9ORElTX01TR19IRUFERVI7 DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0K PiArICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsNCj4gKyAgVUlOVDMyICAgIFJlcXVlc3RJRDsN Cj4gKyAgVUlOVDMyICAgIE1ham9yVmVyc2lvbjsNCj4gKyAgVUlOVDMyICAgIE1pbm9yVmVyc2lv bjsNCj4gKyAgVUlOVDMyICAgIE1heFRyYW5zZmVyU2l6ZTsNCj4gK30gUkVNT1RFX05ESVNfSU5J VElBTElaRV9NU0c7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIE1l c3NhZ2VUeXBlOw0KPiArICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsNCj4gKyAgVUlOVDMyICAg IFJlcXVlc3RJRDsNCj4gK30gUkVNT1RFX05ESVNfSEFMVF9NU0c7DQo+ICsNCj4gK3R5cGVkZWYg c3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KPiArICBVSU5UMzIgICAgTWVz c2FnZUxlbmd0aDsNCj4gKyAgVUlOVDMyICAgIFJlcXVlc3RJRDsNCj4gKyAgVUlOVDMyICAgIE9p ZDsNCj4gKyAgVUlOVDMyICAgIEluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoOw0KPiArICBVSU5UMzIg ICAgSW5mb3JtYXRpb25CdWZmZXJPZmZzZXQ7DQo+ICsgIFVJTlQzMiAgICBSZXNlcnZlZDsNCj4g K30gUkVNT1RFX05ESVNfUVVFUllfTVNHOw0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsg IFJFTU9URV9ORElTX1FVRVJZX01TRyAgICBRdWVyeU1zZzsNCj4gKyAgVUlOVDggICAgICAgICAg ICAgICAgICAgIEFkZHJbNl07DQo+ICt9IFJFTU9URV9ORElTX1FVRVJZX01BQ19NU0c7DQo+ICsN Cj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgUkVNT1RFX05ESVNfUVVFUllfTVNHICAgIFF1ZXJ5 TXNnOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgTWF4VG90YWxTaXplOw0KPiArfSBS RU1PVEVfTkRJU19RVUVSWV9NQVhfVE9UQUxfU0laRV9NU0c7DQo+ICsNCj4gK3R5cGVkZWYgc3Ry dWN0IHsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KPiArICBVSU5UMzIgICAgTWVzc2Fn ZUxlbmd0aDsNCj4gKyAgVUlOVDMyICAgIFJlcXVlc3RJRDsNCj4gKyAgVUlOVDMyICAgIE9pZDsN Cj4gKyAgVUlOVDMyICAgIEluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoOw0KPiArICBVSU5UMzIgICAg SW5mb3JtYXRpb25CdWZmZXJPZmZzZXQ7DQo+ICsgIFVJTlQzMiAgICBSZXNlcnZlZDsNCj4gK30g UkVNT1RFX05ESVNfU0VUX01TRzsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5U MzIgICAgTWVzc2FnZVR5cGU7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlTGVuZ3RoOw0KPiArICBV SU5UMzIgICAgUmVzZXJ2ZWQ7DQo+ICt9IFJFTU9URV9ORElTX1JFU0VUX01TRzsNCj4gKw0KPiAr dHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ICsgIFVJTlQz MiAgICBNZXNzYWdlTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgU3RhdHVzOw0KPiArICBVSU5UMzIg ICAgU3RhdHVzQnVmZmVyTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgU3RhdHVzQnVmZmVyT2Zmc2V0 Ow0KPiArfSBSRU1PVEVfTkRJU19JTkRJQ0FURV9TVEFUVVNfTVNHOw0KPiArDQo+ICt0eXBlZGVm IHN0cnVjdCB7DQo+ICsgIFVJTlQzMiAgICBEaWFnU3RhdHVzOw0KPiArICBVSU5UMzIgICAgRXJy b3JPZmZzZXQ7DQo+ICt9IFJORElTX0RJQUdOT1NUSUNfSU5GTzsNCj4gKw0KPiArdHlwZWRlZiBz dHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ICsgIFVJTlQzMiAgICBNZXNz YWdlTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgUmVxdWVzdElEOw0KPiArfSBSRU1PVEVfTkRJU19L RUVQQUxJVkVfTVNHOw0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQzMiAgICBN ZXNzYWdlVHlwZTsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5ndGg7DQo+ICsgIFVJTlQzMiAg ICBSZXF1ZXN0SUQ7DQo+ICsgIFVJTlQzMiAgICBTdGF0dXM7DQo+ICsgIFVJTlQzMiAgICBNYWpv clZlcnNpb247DQo+ICsgIFVJTlQzMiAgICBNaW5vclZlcnNpb247DQo+ICsgIFVJTlQzMiAgICBE ZXZpY2VGbGFnczsNCj4gKyAgVUlOVDMyICAgIE1lZGl1bTsNCj4gKyAgVUlOVDMyICAgIE1heFBh Y2tldHNQZXJUcmFuc2ZlcjsNCj4gKyAgVUlOVDMyICAgIE1heFRyYW5zZmVyU2l6ZTsNCj4gKyAg VUlOVDMyICAgIFBhY2tldEFsaWdubWVudEZhY3RvcjsNCj4gKyAgVUlOVDY0ICAgIFJlc2VydmVk Ow0KPiArfSBSRU1PVEVfTkRJU19JTklUSUFMSVpFX0NNUExUOw0KPiArDQo+ICt0eXBlZGVmIHN0 cnVjdCB7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlVHlwZTsNCj4gKyAgVUlOVDMyICAgIE1lc3Nh Z2VMZW5ndGg7DQo+ICsgIFVJTlQzMiAgICBSZXF1ZXN0SUQ7DQo+ICsgIFVJTlQzMiAgICBTdGF0 dXM7DQo+ICsgIFVJTlQzMiAgICBJbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aDsNCj4gKyAgVUlOVDMy ICAgIEluZm9ybWF0aW9uQnVmZmVyT2Zmc2V0Ow0KPiArfSBSRU1PVEVfTkRJU19RVUVSWV9DTVBM VDsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBSRU1PVEVfTkRJU19RVUVSWV9DTVBM VCAgICBRdWVyeUNtcGx0Ow0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICBBZGRyWzZd Ow0KPiArfSBSRU1PVEVfTkRJU19RVUVSWV9NQUNfQ01QTFQ7DQo+ICsNCj4gK3R5cGVkZWYgc3Ry dWN0IHsNCj4gKyAgUkVNT1RFX05ESVNfUVVFUllfQ01QTFQgICAgUXVlcnlDbXBsdDsNCj4gKyAg VUlOVDMyICAgICAgICAgICAgICAgICAgICAgTWF4VG90YWxTaXplOw0KPiArfSBSRU1PVEVfTkRJ U19RVUVSWV9NQVhfVE9UQUxfU0laRV9DTVBMVDsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0K PiArICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlTGVuZ3Ro Ow0KPiArICBVSU5UMzIgICAgUmVxdWVzdElEOw0KPiArICBVSU5UMzIgICAgU3RhdHVzOw0KPiAr fSBSRU1PVEVfTkRJU19TRVRfQ01QTFQ7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAg VUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KPiArICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsNCj4g KyAgVUlOVDMyICAgIFN0YXR1czsNCj4gKyAgVUlOVDMyICAgIEFkZHJlc3NpbmdSZXNldDsNCj4g K30gUkVNT1RFX05ESVNfUkVTRVRfQ01QTFQ7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4g KyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KPiArICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsN Cj4gKyAgVUlOVDMyICAgIFJlcXVlc3RJRDsNCj4gKyAgVUlOVDMyICAgIFN0YXR1czsNCj4gK30g UkVNT1RFX05ESVNfS0VFUEFMSVZFX0NNUExUOw0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ ICsgIFVJTlQzMiAgICBNZXNzYWdlVHlwZTsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5ndGg7 DQo+ICsgIFVJTlQzMiAgICBEYXRhT2Zmc2V0Ow0KPiArICBVSU5UMzIgICAgRGF0YUxlbmd0aDsN Cj4gKyAgVUlOVDMyICAgIE91dE9mQmFuZERhdGFPZmZzZXQ7DQo+ICsgIFVJTlQzMiAgICBPdXRP ZkJhbmREYXRhTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgTnVtT3V0T2ZCYW5kRGF0YUVsZW1lbnRz Ow0KPiArICBVSU5UMzIgICAgUGVyUGFja2V0SW5mb09mZnNldDsNCj4gKyAgVUlOVDMyICAgIFBl clBhY2tldEluZm9MZW5ndGg7DQo+ICsgIFVJTlQzMiAgICBSZXNlcnZlZDE7DQo+ICsgIFVJTlQz MiAgICBSZXNlcnZlZDI7DQo+ICt9IFJFTU9URV9ORElTX1BBQ0tFVF9NU0c7DQo+ICsNCj4gK3R5 cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIFNpemU7DQo+ICsgIFVJTlQzMiAgICBUeXBl Ow0KPiArICBVSU5UMzIgICAgQ2xhc3NJbmZvcm1hdGlvbk9mZnNldDsNCj4gK30gT1VUX09GX0JB TkRfREFUQV9SRUNPUkQ7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAg IFNpemU7DQo+ICsgIFVJTlQzMiAgICBUeXBlOw0KPiArICBVSU5UMzIgICAgQ2xhc3NJbmZvcm1h dGlvbk9mZnNldDsNCj4gK30gUEVSX1BBQ0tFVF9JTkZPX0RBVEFfUkVDT1JEOw0KPiArDQo+ICt0 eXBlZGVmIHN0cnVjdCB7DQo+ICsgIExJU1RfRU5UUlkgICAgUGFja2V0TGlzdDsNCj4gKyAgVUlO VDggICAgICAgICAqT3JnQnVmZmVyOw0KPiArICBVSU5UTiAgICAgICAgIFJlbWFpbmluZ0xlbmd0 aDsNCj4gKyAgVUlOVDggICAgICAgICAqUGFja2V0U3RhcnRCdWZmZXI7ICAgIC8vIFZhcmlhYmxl IHNpemUgZGF0YSB0byBmb2xsb3cNCj4gK30gUEFDS0VUX0xJU1Q7DQo+ICsNCj4gKyNwcmFnbWEg cGFjaygpDQo+ICsNCj4gKyNlbmRpZg0KPiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0J1cy9V c2IvVXNiTmV0d29yay9Vc2JSbmRpcy9Vc2JSbmRpcy5pbmYNCj4gYi9NZGVNb2R1bGVQa2cvQnVz L1VzYi9Vc2JOZXR3b3JrL1VzYlJuZGlzL1VzYlJuZGlzLmluZg0KPiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi4xMDI3ODI4NTI3DQo+IC0tLSAvZGV2L251bGwNCj4g KysrIGIvTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9Vc2JSbmRpcy9Vc2JSbmRpcy5p bmYNCj4gQEAgLTAsMCArMSw0MiBAQA0KPiArIyMgQGZpbGUNCj4gKyMgICBUaGlzIGlzIFVzYiBS bmRpcyBkcml2ZXIgZm9yIERYRSBwaGFzZS4NCj4gKyMNCj4gKyMgQ29weXJpZ2h0IChjKSAyMDIz LCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzDQo+IHJl c2VydmVkLjxCUj4NCj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1Q YXRlbnQNCj4gKyMjDQo+ICsNCj4gK1tEZWZpbmVzXQ0KPiArICBJTkZfVkVSU0lPTiAgICAgICAg ICAgICAgICAgICAgPSAweDAwMDEwMDA1DQo+ICsgIEJBU0VfTkFNRSAgICAgICAgICAgICAgICAg ICAgICA9IFVzYlJuZGlzDQo+ICsgIEZJTEVfR1VJRCAgICAgICAgICAgICAgICAgICAgICA9IDEx RTMyQzM0LTYwQjUtNDk5MS04REVBLTYzRDNFOEM4NzZERQ0KPiArICBNT0RVTEVfVFlQRSAgICAg ICAgICAgICAgICAgICAgPSBEWEVfRFJJVkVSDQo+ICsgIFZFUlNJT05fU1RSSU5HICAgICAgICAg ICAgICAgICA9IDEuMA0KPiArICBFTlRSWV9QT0lOVCAgICAgICAgICAgICAgICAgICAgPSBVc2JS bmRpc0VudHJ5DQo+ICsNCj4gK1tTb3VyY2VzXQ0KPiArICBVc2JSbmRpcy5jDQo+ICsgIFVzYlJu ZGlzLmgNCj4gKyAgVXNiUm5kaXNGdW5jdGlvbi5jDQo+ICsgIENvbXBvbmVudE5hbWUuYw0KPiAr DQo+ICtbUGFja2FnZXNdDQo+ICsgIE1kZVBrZy9NZGVQa2cuZGVjDQo+ICsgIE1kZU1vZHVsZVBr Zy9NZGVNb2R1bGVQa2cuZGVjDQo+ICsNCj4gK1tMaWJyYXJ5Q2xhc3Nlc10NCj4gKyAgVWVmaURy aXZlckVudHJ5UG9pbnQNCj4gKyAgVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliDQo+ICsgIFVlZmlM aWINCj4gKyAgRGVidWdMaWINCj4gKyAgVWVmaVVzYkxpYg0KPiArICBNZW1vcnlBbGxvY2F0aW9u TGliDQo+ICsgIEJhc2VNZW1vcnlMaWINCj4gKw0KPiArW1Byb3RvY29sc10NCj4gKyAgZ0VmaVVz YklvUHJvdG9jb2xHdWlkDQo+ICsgIGdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkDQo+ICsgIGdF ZmlEcml2ZXJCaW5kaW5nUHJvdG9jb2xHdWlkDQo+ICsgIGdFZGtJSVVzYkV0aFByb3RvY29sR3Vp ZA0KPiArDQo+ICtbRGVwZXhdDQo+ICsgIFRSVUUNCj4gZGlmZiAtLWdpdA0KPiBhL01kZU1vZHVs ZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvVXNiUm5kaXMvVXNiUm5kaXNGdW5jdGlvbi5jDQo+IGIv TWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9Vc2JSbmRpcy9Vc2JSbmRpc0Z1bmN0aW9u LmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMC4uOWFiYTNmMTEy OQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL01kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdv cmsvVXNiUm5kaXMvVXNiUm5kaXNGdW5jdGlvbi5jDQo+IEBAIC0wLDAgKzEsMTcxOCBAQA0KPiAr LyoqIEBmaWxlDQo+ICsgIFRoaXMgZmlsZSBjb250YWlucyBjb2RlIGZvciBVU0IgRXRoZXJuZXQg ZGVzY3JpcHRvcg0KPiArICBhbmQgc3BlY2lmaWMgcmVxdWVzdHMgaW1wbGVtZW50Lg0KPiArDQo+ ICsgIENvcHlyaWdodCAoYykgMjAyMywgQW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFs IExMQy4gQWxsIHJpZ2h0cw0KPiByZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsqKi8NCj4gKw0KPiArI2luY2x1ZGUgIlVz YlJuZGlzLmgiDQo+ICsNCj4gK1VJTlQxNiAgZ1N0b3BCdWxrSW5DbnQgID0gMDsNCj4gK1VJTlQx NiAgZ0Jsb2NrQnVsa0luQ250ID0gMDsNCj4gKw0KPiArLyoqDQo+ICsgIExvYWQgQWxsIG9mIGRl dmljZSBkZXNjcmlwdG9yLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFVzYklvICAgICAgICAgICAg ICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9VU0JfSU9fUFJPVE9DT0wNCj4gaW5zdGFuY2UuDQo+ ICsgIEBwYXJhbVtvdXRdIENvbmZpZ0Rlc2MgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGNv bmZpZ3VyYXRpb24gZGVzY3JpcHRvci4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwg RUZJX09VVF9PRl9SRVNPVVJDRVMgIFRoZSByZXF1ZXN0IGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQN Cj4gYmVjYXVzZSB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVy IHNwZWNpZmllZCBieSBEZXNjcmlwdG9yTGVuZ3RoIGFuZCBEZXNjcmlwdG9yDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUg cmVzdWx0IG9mIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAg ICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFs IEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNl IGVycm9yLg0KPiBUaGUgdHJhbnNmZXINCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RhdHVzIGlzIHJldHVybmVkIGluIFN0YXR1cy4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0K PiArTG9hZEFsbERlc2NyaXB0b3IgKA0KPiArICBJTiAgRUZJX1VTQl9JT19QUk9UT0NPTCAgICAg ICAgKlVzYklvLA0KPiArICBPVVQgRUZJX1VTQl9DT05GSUdfREVTQ1JJUFRPUiAgKipDb25maWdE ZXNjDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgU3RhdHVz Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICBUcmFuc1N0YXR1czsNCj4gKyAgRUZJ X1VTQl9DT05GSUdfREVTQ1JJUFRPUiAgVG1wOw0KPiArDQo+ICsgIFN0YXR1cyA9IFVzYklvLT5V c2JHZXRDb25maWdEZXNjcmlwdG9yIChVc2JJbywgJlRtcCk7DQo+ICsgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6VXNiR2V0Q29uZmln RGVzY3JpcHRvciBzdGF0dXMgPSAlclxuIiwNCj4gX19mdW5jX18sIFN0YXR1cykpOw0KPiArICAg IHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPkFsbG9jYXRl UG9vbCAoDQo+ICsgICAgICAgICAgICAgICAgICBFZmlCb290U2VydmljZXNEYXRhLA0KPiArICAg ICAgICAgICAgICAgICAgVG1wLlRvdGFsTGVuZ3RoLA0KPiArICAgICAgICAgICAgICAgICAgKFZP SUQgKiopQ29uZmlnRGVzYw0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTogQWxsb2Nh dGVQb29sIHN0YXR1cyA9ICVyXG4iLCBfX2Z1bmNfXywNCj4gU3RhdHVzKSk7DQo+ICsgICAgcmV0 dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IFVzYkdldERlc2NyaXB0b3Ig KA0KPiArICAgICAgICAgICAgIFVzYklvLA0KPiArICAgICAgICAgICAgIFVTQl9ERVNDX1RZUEVf Q09ORklHIDw8IDggfCAoVG1wLkNvbmZpZ3VyYXRpb25WYWx1ZSAtIDEpLA0KPiAvLyB6ZXJvIGJh c2VkDQo+ICsgICAgICAgICAgICAgMCwNCj4gKyAgICAgICAgICAgICBUbXAuVG90YWxMZW5ndGgs DQo+ICsgICAgICAgICAgICAgKkNvbmZpZ0Rlc2MsDQo+ICsgICAgICAgICAgICAgJlRyYW5zU3Rh dHVzDQo+ICsgICAgICAgICAgICAgKTsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgIFJldHVybnMgcG9pbnRlciB0byB0aGUgbmV4dCBkZXNjcmlwdG9yIGZvciB0 aGUgcGFjayBvZiBVU0IgZGVzY3JpcHRvcnMNCj4gKyAgbG9jYXRlZCBpbiBjb250aW51ZXMgbWVt b3J5IHNlZ21lbnQNCj4gKw0KPiArICBAcGFyYW1baW5dICAgICAgRGVzYyAgIEEgcG9pbnRlciB0 byB0aGUgQ09ORklHX0RFU0NSSVBUT1IgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBP ZmZzZXQgQSBwb2ludGVyIHRvIHRoZSBzdW0gb2YgZGVzY3JpcHRvciBsZW5ndGguDQo+ICsNCj4g KyAgQHJldHZhbCBUUlVFICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiAr ICBAcmV0dmFsIEZBTFNFICBObyBuZXh0IGRlc2NyaXB0b3IuDQo+ICsNCj4gKyoqLw0KPiArQk9P TEVBTg0KPiArTmV4dERlc2NyaXB0b3IgKA0KPiArICBJTiAgICAgIEVGSV9VU0JfQ09ORklHX0RF U0NSSVBUT1IgICpEZXNjLA0KPiArICBJTiBPVVQgIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICpPZmZzZXQNCj4gKyAgKQ0KPiArew0KPiArICBpZiAoKERlc2MgPT0gTlVMTCkgfHwgKCpPZmZz ZXQgPj0gRGVzYy0+VG90YWxMZW5ndGgpKSB7DQo+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiArICB9 DQo+ICsNCj4gKyAgaWYgKCgoRUZJX1VTQl9DT05GSUdfREVTQ1JJUFRPUiAqKSgoY2hhciAqKURl c2MrKk9mZnNldCkpLT5MZW5ndGggPT0gMCkNCj4gew0KPiArICAgIHJldHVybiBGQUxTRTsNCj4g KyAgfQ0KPiArDQo+ICsgICpPZmZzZXQgKz0gKChFRklfVVNCX0NPTkZJR19ERVNDUklQVE9SICop KChjaGFyICopRGVzYysqT2Zmc2V0KSktDQo+ID5MZW5ndGg7DQo+ICsgIGlmICggKk9mZnNldCA+ PSBEZXNjLT5Ub3RhbExlbmd0aCApIHsNCj4gKyAgICByZXR1cm4gRkFMU0U7DQo+ICsgIH0NCj4g Kw0KPiArICByZXR1cm4gVFJVRTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJlYWQgRnVuY3Rp b24gZGVzY3JpcHRvcg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENvbmZpZyAgICAgICAgICAgICBB IHBvaW50ZXIgdG8gYWxsIG9mIGNvbmZpZ3VyYXRpb24uDQo+ICsgIEBwYXJhbVtpbl0gIEZ1bkRl c2NyaXB0b3JUeXBlICBVU0IgQ0RDIGNsYXNzIGRlc2NyaXB0b3IgU3ViVHlwZS4NCj4gKyAgQHBh cmFtW291dF0gRGF0YUJ1ZmZlciAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRGF0YSBvZiBjb3Jy ZXNwb25kaW5nIHRvDQo+IGRldmljZSBjYXBhYmlsaXR5Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgIFRoZSBkZXZpY2UgY2FwYWJpbGl0eSBkZXNjcmlwdG9yIHdhcyByZXRy aWV2ZWQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc2Z1bGx5Lg0KPiAr ICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICBObyBzdXBwb3J0ZWQuDQo+ICsgIEByZXR2YWwg RUZJX05PVF9GT1VORCAgICAgIFRoZSBkZXZpY2UgY2FwYWJpbGl0eSBkZXNjcmlwdG9yIHdhcyBu b3QNCj4gZm91bmQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArR2V0RnVuY3Rpb25h bERlc2NyaXB0b3IgKA0KPiArICBJTiAgRUZJX1VTQl9DT05GSUdfREVTQ1JJUFRPUiAgKkNvbmZp ZywNCj4gKyAgSU4gIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgIEZ1bkRlc2NyaXB0b3JUeXBl LA0KPiArICBPVVQgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgKkRhdGFCdWZmZXINCj4gKyAg KQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsg IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNldDsNCj4gKyAgRUZJX1VTQl9JTlRF UkZBQ0VfREVTQ1JJUFRPUiAgKkludGVyZmFjZTsNCj4gKw0KPiArICBTdGF0dXMgPSBFRklfTk9U X0ZPVU5EOw0KPiArDQo+ICsgIGZvciAoT2Zmc2V0ID0gMDsgTmV4dERlc2NyaXB0b3IgKENvbmZp ZywgJk9mZnNldCk7KSB7DQo+ICsgICAgSW50ZXJmYWNlID0gKEVGSV9VU0JfSU5URVJGQUNFX0RF U0NSSVBUT1IgKikoKFVJTlQ4ICopQ29uZmlnICsNCj4gT2Zmc2V0KTsNCj4gKyAgICBpZiAoSW50 ZXJmYWNlLT5EZXNjcmlwdG9yVHlwZSA9PSBDU19JTlRFUkZBQ0UpIHsNCj4gKyAgICAgIGlmICgo KFVTQl9IRUFERVJfRlVOX0RFU0NSSVBUT1IgKilJbnRlcmZhY2UpLT5EZXNjcmlwdG9yU3VidHlw ZQ0KPiA9PSBGdW5EZXNjcmlwdG9yVHlwZSkgew0KPiArICAgICAgICBzd2l0Y2ggKEZ1bkRlc2Ny aXB0b3JUeXBlKSB7DQo+ICsgICAgICAgICAgY2FzZSBIRUFERVJfRlVOX0RFU0NSSVBUT1I6DQo+ ICsgICAgICAgICAgICBDb3B5TWVtICgNCj4gKyAgICAgICAgICAgICAgRGF0YUJ1ZmZlciwNCj4g KyAgICAgICAgICAgICAgKFVTQl9IRUFERVJfRlVOX0RFU0NSSVBUT1IgKilJbnRlcmZhY2UsDQo+ ICsgICAgICAgICAgICAgIHNpemVvZiAoVVNCX0hFQURFUl9GVU5fREVTQ1JJUFRPUikNCj4gKyAg ICAgICAgICAgICAgKTsNCj4gKyAgICAgICAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gKyAg ICAgICAgICBjYXNlIFVOSU9OX0ZVTl9ERVNDUklQVE9SOg0KPiArICAgICAgICAgICAgQ29weU1l bSAoDQo+ICsgICAgICAgICAgICAgIERhdGFCdWZmZXIsDQo+ICsgICAgICAgICAgICAgIChVU0Jf VU5JT05fRlVOX0RFU0NSSVBUT1IgKilJbnRlcmZhY2UsDQo+ICsgICAgICAgICAgICAgICgoVVNC X1VOSU9OX0ZVTl9ERVNDUklQVE9SICopSW50ZXJmYWNlKS0+RnVuY3Rpb25MZW5ndGgNCj4gKyAg ICAgICAgICAgICAgKTsNCj4gKyAgICAgICAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gKyAg ICAgICAgICBjYXNlIEVUSEVSTkVUX0ZVTl9ERVNDUklQVE9SOg0KPiArICAgICAgICAgICAgQ29w eU1lbSAoDQo+ICsgICAgICAgICAgICAgIERhdGFCdWZmZXIsDQo+ICsgICAgICAgICAgICAgIChV U0JfRVRIRVJORVRfRlVOX0RFU0NSSVBUT1IgKilJbnRlcmZhY2UsDQo+ICsgICAgICAgICAgICAg IHNpemVvZiAoVVNCX0VUSEVSTkVUX0ZVTl9ERVNDUklQVE9SKQ0KPiArICAgICAgICAgICAgICAp Ow0KPiArICAgICAgICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArICAgICAgICAgIGRlZmF1 bHQ6DQo+ICsgICAgICAgICAgICBTdGF0dXMgPSBFRklfVU5TVVBQT1JURUQ7DQo+ICsgICAgICAg ICAgICBicmVhazsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKyAgfQ0K PiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBHZXQgVVNC IEV0aGVybmV0IElPIGVuZHBvaW50IGFuZCBVU0IgQ0RDIGRhdGEgSU8gZW5kcG9pbnQuDQo+ICsN Cj4gKyAgQHBhcmFtW2luXSAgICAgIFVzYklvICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVG SV9VU0JfSU9fUFJPVE9DT0wNCj4gaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBVc2JS bmRpc0RldmljZSAgQSBwb2ludGVyIHRvIHRoZSBVU0JfUk5ESVNfREVWSUNFDQo+IGluc3RhbmNl Lg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0dldEVuZHBvaW50ICgNCj4gKyAgSU4gICAgICBF RklfVVNCX0lPX1BST1RPQ09MICAqVXNiSW8sDQo+ICsgIElOIE9VVCAgVVNCX1JORElTX0RFVklD RSAgICAgKlVzYlJuZGlzRGV2aWNlDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAg ICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAg ICBJbmRleDsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0Ow0KPiAr ICBFRklfVVNCX0lOVEVSRkFDRV9ERVNDUklQVE9SICBJbnRlcmZhY2U7DQo+ICsgIEVGSV9VU0Jf RU5EUE9JTlRfREVTQ1JJUFRPUiAgIEVuZHBvaW50Ow0KPiArDQo+ICsgIFN0YXR1cyA9IFVzYklv LT5Vc2JHZXRJbnRlcmZhY2VEZXNjcmlwdG9yIChVc2JJbywgJkludGVyZmFjZSk7DQo+ICsgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6 VXNiR2V0SW50ZXJmYWNlRGVzY3JpcHRvciBzdGF0dXMgPSAlclxuIiwNCj4gX19mdW5jX18sIFN0 YXR1cykpOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChJbnRlcmZhY2Uu TnVtRW5kcG9pbnRzID09IDAgKSB7DQo+ICsgICAgU3RhdHVzID0gVXNiU2V0SW50ZXJmYWNlIChV c2JJbywgMSwgMCwgJlJlc3VsdCk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiArICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOlVzYlNldEludGVyZmFjZSBzdGF0dXMg PSAlclxuIiwgX19mdW5jX18sDQo+IFN0YXR1cykpOw0KPiArICAgICAgcmV0dXJuOw0KPiArICAg IH0NCj4gKw0KPiArICAgIFN0YXR1cyA9IFVzYklvLT5Vc2JHZXRJbnRlcmZhY2VEZXNjcmlwdG9y IChVc2JJbywgJkludGVyZmFjZSk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiArICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOlVzYkdldEludGVyZmFjZURlc2NyaXB0 b3Igc3RhdHVzID0gJXJcbiIsDQo+IF9fZnVuY19fLCBTdGF0dXMpKTsNCj4gKyAgICAgIHJldHVy bjsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBJ bnRlcmZhY2UuTnVtRW5kcG9pbnRzOyBJbmRleCsrKSB7DQo+ICsgICAgU3RhdHVzID0gVXNiSW8t PlVzYkdldEVuZHBvaW50RGVzY3JpcHRvciAoVXNiSW8sIEluZGV4LCAmRW5kcG9pbnQpOw0KPiAr ICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIERFQlVHICgoREVCVUdfRVJS T1IsICIlYTpVc2JHZXRFbmRwb2ludERlc2NyaXB0b3Igc3RhdHVzID0gJXJcbiIsDQo+IF9fZnVu Y19fLCBTdGF0dXMpKTsNCj4gKyAgICAgIHJldHVybjsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBz d2l0Y2ggKChFbmRwb2ludC5BdHRyaWJ1dGVzICYgKEJJVDAgfCBCSVQxKSkpIHsNCj4gKyAgICAg IGNhc2UgVVNCX0VORFBPSU5UX0JVTEs6DQo+ICsgICAgICAgIGlmIChFbmRwb2ludC5FbmRwb2lu dEFkZHJlc3MgJiBCSVQ3KSB7DQo+ICsgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPkJ1bGtJbkVu ZHBvaW50ID0gRW5kcG9pbnQuRW5kcG9pbnRBZGRyZXNzOw0KPiArICAgICAgICB9IGVsc2Ugew0K PiArICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5CdWxrT3V0RW5kcG9pbnQgPSBFbmRwb2ludC5F bmRwb2ludEFkZHJlc3M7DQo+ICsgICAgICAgIH0NCj4gKw0KPiArICAgICAgICBicmVhazsNCj4g KyAgICAgIGNhc2UgVVNCX0VORFBPSU5UX0lOVEVSUlVQVDoNCj4gKyAgICAgICAgVXNiUm5kaXNE ZXZpY2UtPkludGVycnVwRW5kcG9pbnQgPSBFbmRwb2ludC5FbmRwb2ludEFkZHJlc3M7DQo+ICsg ICAgICAgIGJyZWFrOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAg QXN5bmMgVVNCIHRyYW5zZmVyIGNhbGxiYWNrIHJvdXRpbmUuDQo+ICsNCj4gKyAgQHBhcmFtW2lu XSAgRGF0YSAgICAgICAgICAgIERhdGEgcmVjZWl2ZWQgb3Igc2VudCB2aWEgdGhlIFVTQiBBc3lu Y2hyb25vdXMNCj4gVHJhbnNmZXIsIGlmIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdHJhbnNmZXIgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHBhcmFtW2luXSAg RGF0YUxlbmd0aCAgICAgIFRoZSBsZW5ndGggb2YgRGF0YSByZWNlaXZlZCBvciBzZW50IHZpYSB0 aGUNCj4gQXN5bmNocm9ub3VzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFu c2ZlciwgaWYgdHJhbnNmZXIgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlcy4NCj4gKyAgQHBhcmFtW2lu XSAgQ29udGV4dCAgICAgICAgIERhdGEgcGFzc2VkIGZyb20gVXNiQXN5bmNJbnRlcnJ1cHRUcmFu c2ZlcigpDQo+IHJlcXVlc3QuDQo+ICsgIEBwYXJhbVtpbl0gIFN0YXR1cyAgICAgICAgICBJbmRp Y2F0ZXMgdGhlIHJlc3VsdCBvZiB0aGUgYXN5bmNocm9ub3VzIHRyYW5zZmVyLg0KPiArDQo+ICsg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBhc3luY2hyb25vdXMgVVNCIHRyYW5z ZmVyIHJlcXVlc3QgaGFzDQo+IGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLg0KPiArICBAcmV0 dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgYXN5bmNocm9ub3VzIFVTQiB0cmFuc2ZlciBy ZXF1ZXN0DQo+IGZhaWxlZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkN Cj4gK0ludGVycnVwdENhbGxiYWNrICgNCj4gKyAgSU4gIFZPSUQgICAgKkRhdGEsDQo+ICsgIElO ICBVSU5UTiAgIERhdGFMZW5ndGgsDQo+ICsgIElOICBWT0lEICAgICpDb250ZXh0LA0KPiArICBJ TiAgVUlOVDMyICBTdGF0dXMNCj4gKyAgKQ0KPiArew0KPiArICBpZiAoKERhdGEgPT0gTlVMTCkg fHwgKENvbnRleHQgPT0gTlVMTCkpIHsNCj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1F VEVSOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKCgoRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCAqKURh dGEpLT5SZXF1ZXN0ID09IDApIHsNCj4gKyAgICBDb3B5TWVtICgNCj4gKyAgICAgIChFRklfVVNC X0RFVklDRV9SRVFVRVNUICopQ29udGV4dCwNCj4gKyAgICAgIChFRklfVVNCX0RFVklDRV9SRVFV RVNUICopRGF0YSwNCj4gKyAgICAgIHNpemVvZiAoRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCkNCj4g KyAgICAgICk7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ ICsNCj4gKy8qKg0KPiArICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbWFuYWdlIGEgVVNCIGRl dmljZSB3aXRoIGFuIGludGVycnVwdCB0cmFuc2Zlcg0KPiBwaXBlLg0KPiArDQo+ICsgIEBwYXJh bVtpbl0gIFRoaXMgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUNCj4gRURLSUlfVVNCX0VU SEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBJc05ld1RyYW5zZmVy ICAgICBJZiBUUlVFLCBhIG5ldyB0cmFuc2ZlciB3aWxsIGJlIHN1Ym1pdHRlZCB0bw0KPiBVU0Ig Y29udHJvbGxlci4gSWYNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0Us IHRoZSBpbnRlcnJ1cHQgdHJhbnNmZXIgaXMgZGVsZXRlZCBmcm9tIHRoZSBkZXZpY2Uncw0KPiBp bnRlcnJ1cHQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXIgcXVl dWUuDQo+ICsgIEBwYXJhbVtpbl0gIFBvbGxpbmdJbnRlcnZhbCAgIEluZGljYXRlcyB0aGUgcGVy aW9kaWMgcmF0ZSwgaW4gbWlsbGlzZWNvbmRzLA0KPiB0aGF0IHRoZSB0cmFuc2ZlciBpcyB0byBi ZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlZC5UaGlzIHBhcmFt ZXRlciBpcyByZXF1aXJlZCB3aGVuIElzTmV3VHJhbnNmZXINCj4gaXMgVFJVRS4gVGhlDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIG11c3QgYmUgYmV0d2VlbiAxIHRv IDI1NSwgb3RoZXJ3aXNlDQo+IEVGSV9JTlZBTElEX1BBUkFNRVRFUiBpcyByZXR1cm5lZC4NCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHVuaXRzIGFyZSBpbiBtaWxsaXNl Y29uZHMuDQo+ICsgIEBwYXJhbVtpbl0gIFJlcXVlc3QgICAgICAgICAgIEEgcG9pbnRlciB0byB0 aGUgRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVA0KPiBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgIFRoZSBhc3luY2hyb25vdXMgVVNCIHRyYW5zZmVyIHJlcXVlc3QN Cj4gdHJhbnNmZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLg0KPiArICBAcmV0dmFs IEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgYXN5bmNocm9ub3VzIFVTQiB0cmFuc2ZlciByZXF1 ZXN0DQo+IGZhaWxlZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4g K1VzYlJuZGlzSW50ZXJydXB0ICgNCj4gKyAgSU4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09M ICAqVGhpcywNCj4gKyAgSU4gQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICBJc05ld1RyYW5z ZmVyLA0KPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgIFBvbGxpbmdJbnRlcnZh bCwNCj4gKyAgSU4gRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCAgICAgICAqUmVxdXN0DQo+ICsgICkN Cj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgU3RhdHVzOw0KPiArICBVU0JfUk5ESVNfREVW SUNFICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsgIFVJTlROICAgICAgICAgICAgIERhdGFMZW5ndGg7 DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNFX0ZST01fVEhJUyAo VGhpcyk7DQo+ICsgIERhdGFMZW5ndGggICAgID0gMDsNCj4gKw0KPiArICBpZiAoSXNOZXdUcmFu c2ZlciA9PSBUUlVFKSB7DQo+ICsgICAgRGF0YUxlbmd0aCA9IHNpemVvZiAoRUZJX1VTQl9ERVZJ Q0VfUkVRVUVTVCkgKyBzaXplb2YNCj4gKFVTQl9DT05ORUNUX1NQRUVEX0NIQU5HRSk7DQo+ICsg ICAgU3RhdHVzICAgICA9IFVzYlJuZGlzRGV2aWNlLT5Vc2JJby0+VXNiQXN5bmNJbnRlcnJ1cHRU cmFuc2ZlciAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBV c2JSbmRpc0RldmljZS0+VXNiSW8sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+SW50ZXJydXBFbmRwb2ludCwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElzTmV3VHJhbnNmZXIsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb2xsaW5nSW50ZXJ2YWwsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhTGVuZ3RoLA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJydXB0Q2Fs bGJhY2ssDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXF1 c3QNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsN Cj4gKyAgICBpZiAoU3RhdHVzID09IEVGSV9JTlZBTElEX1BBUkFNRVRFUikgew0KPiArICAgICAg Ly8gQmVjYXVzZSBvZiBTdGFja2VkIEFzeW5jSW50ZXJydXB0IHJlcXVlc3QgYXJlIG5vdCBzdXBw b3J0ZWQNCj4gKyAgICAgIFN0YXR1cyA9IFVzYlJuZGlzRGV2aWNlLT5Vc2JJby0+VXNiQXN5bmNJ bnRlcnJ1cHRUcmFuc2ZlciAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYklvLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5JbnRlcnJ1cEVuZHBvaW50LA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAwLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE5VTEwsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TlVMTA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsg ICAgfQ0KPiArICB9IGVsc2Ugew0KPiArICAgIFN0YXR1cyA9IFVzYlJuZGlzRGV2aWNlLT5Vc2JJ by0+VXNiQXN5bmNJbnRlcnJ1cHRUcmFuc2ZlciAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Vc2JJbywNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPkludGVycnVwRW5kcG9pbnQs DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElzTmV3VHJhbnNmZXIs DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE5VTEwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0K PiArICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVhZCBVU0IgaW50ZXJydXB0IHRyYW5zZmVy IGJlZm9yZSB0aGUgcmVzcG9uc2UNCj4gUk5ESVMgbWVzc2FnZS4NCj4gKw0KPiArICBAcGFyYW1b aW5dICBUaGlzICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIFVTQl9STkRJU19ERVZJQ0Ug aW5zdGFuY2UuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIFVT QiBpbnRlcnJ1cHQgdHJhbnNmZXIgaGFzIGJlZW4NCj4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLg0K PiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgVVNCIGludGVycnVwdCB0cmFu c2ZlciBmYWlsZWQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtS ZWFkUm5kaXNSZXNwb25zZUludGVycnVwdCAoDQo+ICsgIElOIFVTQl9STkRJU19ERVZJQ0UgICpV c2JSbmRpc0RldmljZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4g KyAgVUlOVDMyICAgICAgRGF0YVsyXTsNCj4gKyAgVUlOVDMyICAgICAgVXNiU3RhdHVzOw0KPiAr ICBVSU5UTiAgICAgICBEYXRhTGVuZ3RoOw0KPiArDQo+ICsgIERhdGFMZW5ndGggPSA4Ow0KPiAr DQo+ICsgIFplcm9NZW0gKERhdGEsIHNpemVvZiAoRGF0YSkpOw0KPiArDQo+ICsgIFN0YXR1cyA9 IFVzYlJuZGlzRGV2aWNlLT5Vc2JJby0+VXNiU3luY0ludGVycnVwdFRyYW5zZmVyICgNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Vc2JJbywN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5J bnRlcnJ1cEVuZHBvaW50LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JkRhdGEsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRGF0YUxlbmd0 aCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmVXNiU3RhdHVzDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ ICt9DQo+ICsNCj4gKy8qKg0KPiArICBSZXRyaWV2ZXMgdGhlIFVTQiBFdGhlcm5ldCBNYWMgQWRk cmVzcy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgIEEgcG9pbnRlciB0byB0 aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MDQo+IGluc3RhbmNlLg0KPiArICBAcGFyYW1b b3V0XSBNYWNBZGRyZXNzICAgIEEgcG9pbnRlciB0byB0aGUgY2FsbGVyIGFsbG9jYXRlZCBVU0Ig RXRoZXJuZXQNCj4gTWFjIEFkZHJlc3MuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgVGhlIFVTQiBIZWFkZXIgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcw0KPiByZXRy aWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBV c2JIZWFkZXJGdW5EZXNjcmlwdG9yIGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VO RCAgICAgICAgIFRoZSBVU0IgSGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMNCj4gbm90 IGZvdW5kLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArR2V0VXNi RXRoTWFjQWRkcmVzcyAoDQo+ICsgIElOICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpU aGlzLA0KPiArICBPVVQgRUZJX01BQ19BRERSRVNTICAgICAgICAgICAgICAqTWFjQWRkcmVzcw0K PiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0K PiArICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAgICAgICpVc2JSbmRpc0RldmljZTsNCj4gKyAg VVNCX0VUSEVSTkVUX0ZVTl9ERVNDUklQVE9SICBVc2JFdGhEZXNjcmlwdG9yOw0KPiArICBDSEFS MTYgICAgICAgICAgICAgICAgICAgICAgICpEYXRhOw0KPiArICBDSEFSMTYgICAgICAgICAgICAg ICAgICAgICAgICpEYXRhUHRyOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgIFRt cFN0clsxXTsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gKyAg VUlOVDggICAgICAgICAgICAgICAgICAgICAgICBIaTsNCj4gKyAgVUlOVDggICAgICAgICAgICAg ICAgICAgICAgICBMb3c7DQo+ICsNCj4gKyAgUkVNT1RFX05ESVNfUVVFUllfTUFDX01TRyAgICBS bmRpc1F1ZXJ5TXNnOw0KPiArICBSRU1PVEVfTkRJU19RVUVSWV9NQUNfQ01QTFQgIFJuZGlzUXVl cnlNc2dDbXBsdDsNCj4gKw0KPiArICBVc2JSbmRpc0RldmljZSA9IFVTQl9STkRJU19ERVZJQ0Vf RlJPTV9USElTIChUaGlzKTsNCj4gKw0KPiArICBaZXJvTWVtICgmUm5kaXNRdWVyeU1zZywgc2l6 ZW9mIChSRU1PVEVfTkRJU19RVUVSWV9NQUNfTVNHKSk7DQo+ICsgIFplcm9NZW0gKCZSbmRpc1F1 ZXJ5TXNnQ21wbHQsIHNpemVvZg0KPiAoUkVNT1RFX05ESVNfUVVFUllfTUFDX0NNUExUKSk7DQo+ ICsNCj4gKyAgUm5kaXNRdWVyeU1zZy5RdWVyeU1zZy5NZXNzYWdlVHlwZSAgID0gUk5ESVNfUVVF UllfTVNHOw0KPiArICBSbmRpc1F1ZXJ5TXNnLlF1ZXJ5TXNnLk1lc3NhZ2VMZW5ndGggPSBzaXpl b2YNCj4gKFJFTU9URV9ORElTX1FVRVJZX01BQ19NU0cpOw0KPiArICBSbmRpc1F1ZXJ5TXNnLlF1 ZXJ5TXNnLlJlcXVlc3RJRCAgICAgPSBVc2JSbmRpc0RldmljZS0+UmVxdWVzdElkOw0KPiArICBS bmRpc1F1ZXJ5TXNnLlF1ZXJ5TXNnLk9pZCAgICAgICAgICAgPSBPSURfODAyXzNfQ1VSUkVOVF9B RERSRVNTOw0KPiArDQo+ICsgIFJuZGlzUXVlcnlNc2dDbXBsdC5RdWVyeUNtcGx0Lk1lc3NhZ2VU eXBlICAgPSBSTkRJU19RVUVSWV9DTVBMVDsNCj4gKyAgUm5kaXNRdWVyeU1zZ0NtcGx0LlF1ZXJ5 Q21wbHQuTWVzc2FnZUxlbmd0aCA9IHNpemVvZg0KPiAoUkVNT1RFX05ESVNfUVVFUllfTUFDX0NN UExUKTsNCj4gKw0KPiArICBTdGF0dXMgPSBSbmRpc0NvbnRyb2xNc2cgKA0KPiArICAgICAgICAg ICAgIFVzYlJuZGlzRGV2aWNlLA0KPiArICAgICAgICAgICAgIChSRU1PVEVfTkRJU19NU0dfSEVB REVSICopJlJuZGlzUXVlcnlNc2csDQo+ICsgICAgICAgICAgICAgKFJFTU9URV9ORElTX01TR19I RUFERVIgKikmUm5kaXNRdWVyeU1zZ0NtcGx0DQo+ICsgICAgICAgICAgICAgKTsNCj4gKyAgaWYg KCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJTdWNj ZXNzIHRvIGdldCBNYWMgYWRkcmVzcyBmcm9tIFJORElTDQo+IG1lc3NhZ2UuXG4iKSk7DQo+ICsg ICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUFhFX0hXQUREUl9MRU5fRVRIRVI7IEluZGV4Kysp IHsNCj4gKyAgICAgIE1hY0FkZHJlc3MtPkFkZHJbSW5kZXhdID0gUm5kaXNRdWVyeU1zZ0NtcGx0 LkFkZHJbSW5kZXhdOw0KPiArICAgIH0NCj4gKw0KPiArICAgIFVzYlJuZGlzRGV2aWNlLT5SZXF1 ZXN0SWQrKzsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgLy8gSWYg aXQgaXMgbm90IHN1cHBvcnQgdGhlIE9JRF84MDJfM19DVVJSRU5UX0FERFJFU1MuDQo+ICsgIC8v IFRvIGNoZWNrIFVTQiBFdGhlcm5ldCBmdW5jdGlvbmFsIERlc2NyaXB0b3INCj4gKyAgU3RhdHVz ID0gVGhpcy0+VXNiRXRoRnVuRGVzY3JpcHRvciAoVGhpcywgJlVzYkV0aERlc2NyaXB0b3IpOw0K PiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgREVCVUcgKChERUJVR19FUlJP UiwgIiVhOlVzYkV0aEZ1bkRlc2NyaXB0b3Igc3RhdHVzID0gJXJcbiIsDQo+IF9fZnVuY19fLCBT dGF0dXMpKTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVz ID0gVXNiUm5kaXNEZXZpY2UtPlVzYklvLT5Vc2JHZXRTdHJpbmdEZXNjcmlwdG9yICgNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Vc2JJbywN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDA5LCAgICAgICAgICAg ICAgICAgICAgICAgLy8gRW5nbGlzaC1VUyBMYW5ndWFnZSBJRA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVXNiRXRoRGVzY3JpcHRvci5NYWNBZGRyZXNzLA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkRhdGENCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6VXNiR2V0U3RyaW5nRGVzY3JpcHRvciBz dGF0dXMgPSAlclxuIiwNCj4gX19mdW5jX18sIFN0YXR1cykpOw0KPiArICAgIHJldHVybiBTdGF0 dXM7DQo+ICsgIH0NCj4gKw0KPiArICBEYXRhUHRyID0gRGF0YTsNCj4gKyAgZm9yIChJbmRleCA9 IDA7IEluZGV4IDwgUFhFX0hXQUREUl9MRU5fRVRIRVI7IEluZGV4KyspIHsNCj4gKyAgICBDb3B5 TWVtIChUbXBTdHIsIERhdGFQdHIsIHNpemVvZiAoQ0hBUjE2KSk7DQo+ICsgICAgRGF0YVB0cisr Ow0KPiArICAgIEhpID0gKFVJTlQ4KVN0ckhleFRvVWludG4gKFRtcFN0cik7DQo+ICsgICAgQ29w eU1lbSAoVG1wU3RyLCBEYXRhUHRyLCBzaXplb2YgKENIQVIxNikpOw0KPiArICAgIERhdGFQdHIr KzsNCj4gKyAgICBMb3cgICAgICAgICAgICAgICAgICAgICA9IChVSU5UOClTdHJIZXhUb1VpbnRu IChUbXBTdHIpOw0KPiArICAgIE1hY0FkZHJlc3MtPkFkZHJbSW5kZXhdID0gKEhpIDw8IDQpIHwg TG93Ow0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoq DQo+ICsgIFJldHJpZXZlcyB0aGUgVVNCIEV0aGVybmV0IEJ1bGsgdHJhbnNmZXIgZGF0YSBzaXpl Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBF REtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wNCj4gaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtvdXRd IEJ1bGtTaXplICAgICAgQSBwb2ludGVyIHRvIHRoZSBCdWxrIHRyYW5zZmVyIGRhdGEgc2l6ZS4N Cj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFRoZSBidWxrIHRyYW5zZmVyIGRh dGEgc2l6ZSB3YXMgcmV0cmlldmVkDQo+IHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBvdGhl ciAgICAgICAgICAgICBGYWlsZWQgdG8gcmV0cmlldmUgdGhlIGJ1bGsgdHJhbnNmZXIgZGF0YSBz aXplLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVXNiRXRoQnVs a1NpemUgKA0KPiArICBJTiAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4g KyAgT1VUIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgKkJ1bGtTaXplDQo+ICsgICkNCj4g K3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIFVTQl9F VEhFUk5FVF9GVU5fREVTQ1JJUFRPUiAgVXNiRXRoRnVuRGVzY3JpcHRvcjsNCj4gKyAgVVNCX1JO RElTX0RFVklDRSAgICAgICAgICAgICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsNCj4gKyAgUkVNT1RF X05ESVNfUVVFUllfTUFYX1RPVEFMX1NJWkVfTVNHICAgIFJuZGlzUXVlcnlNc2c7DQo+ICsgIFJF TU9URV9ORElTX1FVRVJZX01BWF9UT1RBTF9TSVpFX0NNUExUICBSbmRpc1F1ZXJ5TXNnQ21wbHQ7 DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNFX0ZST01fVEhJUyAo VGhpcyk7DQo+ICsNCj4gKyAgWmVyb01lbSAoJlJuZGlzUXVlcnlNc2csIHNpemVvZg0KPiAoUkVN T1RFX05ESVNfUVVFUllfTUFYX1RPVEFMX1NJWkVfTVNHKSk7DQo+ICsgIFplcm9NZW0gKCZSbmRp c1F1ZXJ5TXNnQ21wbHQsIHNpemVvZg0KPiAoUkVNT1RFX05ESVNfUVVFUllfTUFYX1RPVEFMX1NJ WkVfQ01QTFQpKTsNCj4gKw0KPiArICBSbmRpc1F1ZXJ5TXNnLlF1ZXJ5TXNnLk1lc3NhZ2VUeXBl ICAgPSBSTkRJU19RVUVSWV9NU0c7DQo+ICsgIFJuZGlzUXVlcnlNc2cuUXVlcnlNc2cuTWVzc2Fn ZUxlbmd0aCA9IHNpemVvZg0KPiAoUkVNT1RFX05ESVNfUVVFUllfTUFYX1RPVEFMX1NJWkVfTVNH KTsNCj4gKyAgUm5kaXNRdWVyeU1zZy5RdWVyeU1zZy5SZXF1ZXN0SUQgICAgID0gVXNiUm5kaXNE ZXZpY2UtPlJlcXVlc3RJZDsNCj4gKyAgUm5kaXNRdWVyeU1zZy5RdWVyeU1zZy5PaWQgICAgICAg ICAgID0gT0lEX0dFTl9NQVhJTVVNX1RPVEFMX1NJWkU7DQo+ICsNCj4gKyAgUm5kaXNRdWVyeU1z Z0NtcGx0LlF1ZXJ5Q21wbHQuTWVzc2FnZVR5cGUgICA9IFJORElTX1FVRVJZX0NNUExUOw0KPiAr ICBSbmRpc1F1ZXJ5TXNnQ21wbHQuUXVlcnlDbXBsdC5NZXNzYWdlTGVuZ3RoID0gc2l6ZW9mDQo+ IChSRU1PVEVfTkRJU19RVUVSWV9NQVhfVE9UQUxfU0laRV9DTVBMVCk7DQo+ICsNCj4gKyAgU3Rh dHVzID0gUm5kaXNDb250cm9sTXNnICgNCj4gKyAgICAgICAgICAgICBVc2JSbmRpc0RldmljZSwN Cj4gKyAgICAgICAgICAgICAoUkVNT1RFX05ESVNfTVNHX0hFQURFUiAqKSZSbmRpc1F1ZXJ5TXNn LA0KPiArICAgICAgICAgICAgIChSRU1PVEVfTkRJU19NU0dfSEVBREVSICopJlJuZGlzUXVlcnlN c2dDbXBsdA0KPiArICAgICAgICAgICAgICk7DQo+ICsgIGlmICghRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ICsgICAgREVCVUcgKChERUJVR19JTkZPLCAiU3VjY2VzcyB0byBnZXQgTWF4IFRvdGFs IHNpemUgOiAlWCAgXG4iLA0KPiBSbmRpc1F1ZXJ5TXNnQ21wbHQuTWF4VG90YWxTaXplKSk7DQo+ ICsgICAgKkJ1bGtTaXplID0gUm5kaXNRdWVyeU1zZ0NtcGx0Lk1heFRvdGFsU2l6ZTsNCj4gKyAg ICBVc2JSbmRpc0RldmljZS0+UmVxdWVzdElkKys7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4g KyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IFRoaXMtPlVzYkV0aEZ1bkRlc2NyaXB0b3IgKFRoaXMs ICZVc2JFdGhGdW5EZXNjcmlwdG9yKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICAqQnVsa1NpemUgPSAoVUlO VE4pVXNiRXRoRnVuRGVzY3JpcHRvci5NYXhTZWdtZW50U2l6ZTsNCj4gKyAgcmV0dXJuIFN0YXR1 czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJldHJpZXZlcyB0aGUgVVNCIEhlYWRlciBmdW5j dGlvbmFsIERlc2NyaXB0b3IuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAg ICAgICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBp bnN0YW5jZS4NCj4gKyAgQHBhcmFtW291dF0gVXNiSGVhZGVyRnVuRGVzY3JpcHRvciBBIHBvaW50 ZXIgdG8gdGhlIGNhbGxlciBhbGxvY2F0ZWQNCj4gVVNCIEhlYWRlciBGdW5jdGlvbmFsIERlc2Ny aXB0b3IuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIFVTQiBI ZWFkZXIgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcw0KPiByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5 Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBVc2JIZWFkZXJGdW5EZXNjcmlw dG9yIGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFRoZSBVU0Ig SGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMNCj4gbm90IGZvdW5kLg0KPiArDQo+ICsq Ki8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArR2V0VXNiSGVhZGVyRnVuRGVzY3JpcHRv ciAoDQo+ICsgIElOICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBP VVQgVVNCX0hFQURFUl9GVU5fREVTQ1JJUFRPUiAgICAqVXNiSGVhZGVyRnVuRGVzY3JpcHRvcg0K PiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgIFN0YXR1czsNCj4gKyAgVVNCX1JO RElTX0RFVklDRSAgKlVzYlJuZGlzRGV2aWNlOw0KPiArDQo+ICsgIFVzYlJuZGlzRGV2aWNlID0g VVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFRoaXMpOw0KPiArDQo+ICsgIGlmIChVc2JIZWFk ZXJGdW5EZXNjcmlwdG9yID09IE5VTEwpIHsNCj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFS QU1FVEVSOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gR2V0RnVuY3Rpb25hbERlc2NyaXB0 b3IgKA0KPiArICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Db25maWcsDQo+ICsgICAgICAg ICAgICAgSEVBREVSX0ZVTl9ERVNDUklQVE9SLA0KPiArICAgICAgICAgICAgIFVzYkhlYWRlckZ1 bkRlc2NyaXB0b3INCj4gKyAgICAgICAgICAgICApOw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVzIHRoZSBVU0IgVW5pb24gZnVuY3Rpb25hbCBE ZXNjcmlwdG9yLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICAg QSBwb2ludGVyIHRvIHRoZQ0KPiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2Uu DQo+ICsgIEBwYXJhbVtvdXRdIFVzYlVuaW9uRnVuRGVzY3JpcHRvciAgQSBwb2ludGVyIHRvIHRo ZSBjYWxsZXIgYWxsb2NhdGVkDQo+IFVTQiBVbmlvbiBGdW5jdGlvbmFsIERlc2NyaXB0b3IuDQo+ ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBVU0IgVW5pb24gRnVu Y3Rpb25hbCBkZXNjcmlwdG9yIHdhcw0KPiByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBA cmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVXNiVW5pb25GdW5EZXNjcmlwdG9yIGlzIE5V TEwuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICBUaGUgVVNCIFVuaW9uIEZ1 bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMNCj4gbm90IGZvdW5kLg0KPiArDQo+ICsqKi8NCj4gK0VG SV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArR2V0VXNiVW5pb25GdW5EZXNjcmlwdG9yICgNCj4gKyAg SU4gIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIE9VVCBVU0JfVU5J T05fRlVOX0RFU0NSSVBUT1IgICAgICpVc2JVbmlvbkZ1bkRlc2NyaXB0b3INCj4gKyAgKQ0KPiAr ew0KPiArICBFRklfU1RBVFVTICAgICAgICBTdGF0dXM7DQo+ICsgIFVTQl9STkRJU19ERVZJQ0Ug ICpVc2JSbmRpc0RldmljZTsNCj4gKw0KPiArICBVc2JSbmRpc0RldmljZSA9IFVTQl9STkRJU19E RVZJQ0VfRlJPTV9USElTIChUaGlzKTsNCj4gKw0KPiArICBpZiAoVXNiVW5pb25GdW5EZXNjcmlw dG9yID09IE5VTEwpIHsNCj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiAr ICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gR2V0RnVuY3Rpb25hbERlc2NyaXB0b3IgKA0KPiArICAg ICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Db25maWcsDQo+ICsgICAgICAgICAgICAgVU5JT05f RlVOX0RFU0NSSVBUT1IsDQo+ICsgICAgICAgICAgICAgVXNiVW5pb25GdW5EZXNjcmlwdG9yDQo+ ICsgICAgICAgICAgICAgKTsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoq DQo+ICsgIFJldHJpZXZlcyB0aGUgVVNCIEV0aGVybmV0IGZ1bmN0aW9uYWwgRGVzY3JpcHRvci4N Cj4gKw0KPiArICBUaGlzIGZ1bmN0aW9uIGdldCB0aGUgTWFjIEFkZHJlc3MsIEV0aGVybmV0IHN0 YXRpc3RpY3MsIG1heGltdW0gc2VnbWVudA0KPiBzaXplLA0KPiArICBudW1iZXIgb2YgbXVsdGlj YXN0IGZpbHRlcnMsIGFuZCBudW1iZXIgb2YgcGF0dGVybiBmaWx0ZXJzIGZyb20gRXRoZXJuZXQN Cj4gKyAgZnVuY3Rpb25hbCBEZXNjcmlwdG9yLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMg ICAgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBFREtJSV9VU0JfRVRIRVJORVRf UFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtvdXRdIFVzYkV0aEZ1bkRlc2NyaXB0b3Ig ICAgQSBwb2ludGVyIHRvIHRoZSBjYWxsZXIgYWxsb2NhdGVkIFVTQg0KPiBFdGhlcm5ldCBGdW5j dGlvbmFsIERlc2NyaXB0b3IuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICAgIFRoZSBVU0IgRXRoZXJuZXQgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcw0KPiByZXRyaWV2 ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVXNi RXRoRnVuRGVzY3JpcHRvciBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAg ICAgICAgVGhlIFVTQiBFdGhlcm5ldCBGdW5jdGlvbmFsIGRlc2NyaXB0b3INCj4gd2FzIG5vdCBm b3VuZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0dldFVzYlJu ZGlzRnVuRGVzY3JpcHRvciAoDQo+ICsgIElOICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wg ICpUaGlzLA0KPiArICBPVVQgVVNCX0VUSEVSTkVUX0ZVTl9ERVNDUklQVE9SICAqVXNiRXRoRnVu RGVzY3JpcHRvcg0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgIFN0YXR1czsN Cj4gKyAgVVNCX1JORElTX0RFVklDRSAgKlVzYlJuZGlzRGV2aWNlOw0KPiArDQo+ICsgIFVzYlJu ZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFRoaXMpOw0KPiArDQo+ICsg IGlmIChVc2JFdGhGdW5EZXNjcmlwdG9yID09IE5VTEwpIHsNCj4gKyAgICByZXR1cm4gRUZJX0lO VkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gR2V0RnVuY3Rpb25h bERlc2NyaXB0b3IgKA0KPiArICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Db25maWcsDQo+ ICsgICAgICAgICAgICAgRVRIRVJORVRfRlVOX0RFU0NSSVBUT1IsDQo+ICsgICAgICAgICAgICAg VXNiRXRoRnVuRGVzY3JpcHRvcg0KPiArICAgICAgICAgICAgICk7DQo+ICsgIHJldHVybiBTdGF0 dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIHJlcXVlc3Qgc2V0cyB0aGUgRXRoZXJu ZXQgZGV2aWNlIG11bHRpY2FzdCBmaWx0ZXJzIGFzIHNwZWNpZmllZCBpbiB0aGUNCj4gKyAgc2Vx dWVudGlhbCBsaXN0IG9mIDQ4IGJpdCBFdGhlcm5ldCBtdWx0aWNhc3QgYWRkcmVzc2VzLg0KPiAr DQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRo ZQ0KPiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtp bl0gIFZhbHVlICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGZpbHRlcnMuDQo+ICsgIEBwYXJh bVtpbl0gIE1jYXN0QWRkciAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSB2YWx1ZSBvZiB0 aGUgbXVsdGljYXN0DQo+IGFkZHJlc3Nlcy4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0 dmFsIEVGSV9USU1FT1VUICAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0 aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgIFRoZSByZXF1 ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFM SURfUEFSQU1FVEVSICBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFs dWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICBOb3Qgc3VwcG9ydGVkLg0K PiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArU2V0VXNiUm5kaXNNY2Fz dEZpbHRlciAoDQo+ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUsDQo+ICsgIElOIFZPSUQg ICAgICAgICAgICAgICAgICAgICAgICAgKk1jYXN0QWRkcg0KPiArICApDQo+ICt7DQo+ICsgIEVG SV9TVEFUVVMgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBFRklfVVNCX0RFVklDRV9S RVFVRVNUICAgICAgIFJlcXVlc3Q7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAg VHJhbnNTdGF0dXM7DQo+ICsgIFVTQl9FVEhFUk5FVF9GVU5fREVTQ1JJUFRPUiAgVXNiRXRoRnVu RGVzY3JpcHRvcjsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgICAgICAqVXNiUm5kaXNE ZXZpY2U7DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNFX0ZST01f VEhJUyAoVGhpcyk7DQo+ICsNCj4gKyAgU3RhdHVzID0gVGhpcy0+VXNiRXRoRnVuRGVzY3JpcHRv ciAoVGhpcywgJlVzYkV0aEZ1bkRlc2NyaXB0b3IpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgoVXNi RXRoRnVuRGVzY3JpcHRvci5OdW1iZXJNY0ZpbHRlcnMgPDwgMSkgPT0gMCkgew0KPiArICAgIHJl dHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ICsgIH0NCj4gKw0KPiArICBSZXF1ZXN0LlJlcXVlc3RU eXBlID0gVVNCX0VUSEVSTkVUX1NFVF9SRVFfVFlQRTsNCj4gKyAgUmVxdWVzdC5SZXF1ZXN0ICAg ICA9IFNFVF9FVEhfTVVMVElDQVNUX0ZJTFRFUlNfUkVROw0KPiArICBSZXF1ZXN0LlZhbHVlICAg ICAgID0gVmFsdWU7DQo+ICsgIFJlcXVlc3QuSW5kZXggICAgICAgPSBVc2JSbmRpc0RldmljZS0+ TnVtT2ZJbnRlcmZhY2U7DQo+ICsgIFJlcXVlc3QuTGVuZ3RoICAgICAgPSBWYWx1ZSAqIDY7DQo+ ICsNCj4gKyAgcmV0dXJuIFVzYlJuZGlzRGV2aWNlLT5Vc2JJby0+VXNiQ29udHJvbFRyYW5zZmVy ICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+ VXNiSW8sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJlcXVlc3QsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWZpVXNiRGF0YU91dCwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfRVRIRVJORVRfVFJBTlNGRVJfVElN RU9VVCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNY2FzdEFkZHIsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdC5MZW5ndGgsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlRyYW5zU3RhdHVzDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRo aXMgcmVxdWVzdCBzZXRzIHVwIHRoZSBzcGVjaWZpZWQgRXRoZXJuZXQgcG93ZXIgbWFuYWdlbWVu dCBwYXR0ZXJuDQo+IGZpbHRlciBhcw0KPiArICBkZXNjcmliZWQgaW4gdGhlIGRhdGEgc3RydWN0 dXJlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICBBIHBvaW50 ZXIgdG8gdGhlDQo+IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAg QHBhcmFtW2luXSAgVmFsdWUgICAgICAgICAgICAgICAgIE51bWJlciBvZiBmaWx0ZXJzLg0KPiAr ICBAcGFyYW1baW5dICBMZW5ndGggICAgICAgICAgICAgICAgU2l6ZSBvZiB0aGUgcG93ZXIgbWFu YWdlbWVudCBwYXR0ZXJuIGZpbHRlcg0KPiBkYXRhLg0KPiArICBAcGFyYW1baW5dICBQYXR0ZXJu RmlsdGVyICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBwb3dlciBtYW5hZ2VtZW50DQo+IHBhdHRl cm4gZmlsdGVyIHN0cnVjdHVyZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVG SV9USU1FT1VUICAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVx dWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgIFRoZSByZXF1ZXN0IGZh aWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFS QU1FVEVSICBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArDQo+ ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArU2V0VXNiUm5kaXNQb3dlckZpbHRl ciAoDQo+ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElO IFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUsDQo+ICsgIElOIFVJTlQxNiAgICAg ICAgICAgICAgICAgICAgICAgTGVuZ3RoLA0KPiArICBJTiBWT0lEICAgICAgICAgICAgICAgICAg ICAgICAgICpQYXR0ZXJuRmlsdGVyDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1VTQl9ERVZJQ0Vf UkVRVUVTVCAgUmVxdWVzdDsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgVHJhbnNTdGF0 dXM7DQo+ICsgIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICpVc2JSbmRpc0RldmljZTsNCj4gKw0K PiArICBVc2JSbmRpc0RldmljZSA9IFVTQl9STkRJU19ERVZJQ0VfRlJPTV9USElTIChUaGlzKTsN Cj4gKw0KPiArICBSZXF1ZXN0LlJlcXVlc3RUeXBlID0gVVNCX0VUSEVSTkVUX1NFVF9SRVFfVFlQ RTsNCj4gKyAgUmVxdWVzdC5SZXF1ZXN0ICAgICA9DQo+IFNFVF9FVEhfUE9XRVJfTUFOQUdFTUVO VF9QQVRURVJOX0ZJTFRFUl9SRVE7DQo+ICsgIFJlcXVlc3QuVmFsdWUgICAgICAgPSBWYWx1ZTsN Cj4gKyAgUmVxdWVzdC5JbmRleCAgICAgICA9IFVzYlJuZGlzRGV2aWNlLT5OdW1PZkludGVyZmFj ZTsNCj4gKyAgUmVxdWVzdC5MZW5ndGggICAgICA9IExlbmd0aDsNCj4gKw0KPiArICByZXR1cm4g VXNiUm5kaXNEZXZpY2UtPlVzYklvLT5Vc2JDb250cm9sVHJhbnNmZXIgKA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Vc2JJbywNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUmVxdWVzdCwNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBFZmlVc2JEYXRhT3V0LA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFVTQl9FVEhFUk5FVF9UUkFOU0ZFUl9USU1FT1VULA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhdHRlcm5GaWx0ZXIsDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoLA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZUcmFuc1N0YXR1cw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIHJlcXVlc3QgcmV0cmlldmVz IHRoZSBzdGF0dXMgb2YgdGhlIHNwZWNpZmllZCBFdGhlcm5ldCBwb3dlcg0KPiBtYW5hZ2VtZW50 DQo+ICsgIHBhdHRlcm4gZmlsdGVyIGZyb20gdGhlIGRldmljZS4NCj4gKw0KPiArICBAcGFyYW1b aW5dICBUaGlzICAgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUNCj4gRURLSUlfVVNC X0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBWYWx1ZSAgICAg ICAgICAgICAgICAgIFRoZSBmaWx0ZXIgbnVtYmVyLg0KPiArICBAcGFyYW1bb3V0XSBQYXR0ZXJu QWN0aXZlICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgcGF0dGVybiBhY3RpdmUgYm9vbGVhbi4N Cj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhl Y3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICAg QSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBF RklfREVWSUNFX0VSUk9SICAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2Ug ZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBPbmUgb2YgdGhlIHBh cmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQ UE9SVEVEICAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMN Cj4gK0VGSUFQSQ0KPiArR2V0VXNiUm5kaXNQb3dlckZpbHRlciAoDQo+ICsgIElOICBFREtJSV9V U0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiAgVUlOVDE2ICAgICAgICAgICAg ICAgICAgICAgICBWYWx1ZSwNCj4gKyAgT1VUIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAg KlBhdHRlcm5BY3RpdmUNCj4gKyAgKQ0KPiArew0KPiArICBFRklfVVNCX0RFVklDRV9SRVFVRVNU ICBSZXF1ZXN0Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICBUcmFuc1N0YXR1czsNCj4g KyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgKlVzYlJuZGlzRGV2aWNlOw0KPiArDQo+ICsgIFVz YlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFRoaXMpOw0KPiArDQo+ ICsgIFJlcXVlc3QuUmVxdWVzdFR5cGUgPSBVU0JfRVRIRVJORVRfR0VUX1JFUV9UWVBFOw0KPiAr ICBSZXF1ZXN0LlJlcXVlc3QgICAgID0NCj4gR0VUX0VUSF9QT1dFUl9NQU5BR0VNRU5UX1BBVFRF Uk5fRklMVEVSX1JFUTsNCj4gKyAgUmVxdWVzdC5WYWx1ZSAgICAgICA9IFZhbHVlOw0KPiArICBS ZXF1ZXN0LkluZGV4ICAgICAgID0gVXNiUm5kaXNEZXZpY2UtPk51bU9mSW50ZXJmYWNlOw0KPiAr ICBSZXF1ZXN0Lkxlbmd0aCAgICAgID0gVVNCX0VUSF9QT1dFUl9GSUxURVJfTEVOR1RIOw0KPiAr DQo+ICsgIHJldHVybiBVc2JSbmRpc0RldmljZS0+VXNiSW8tPlVzYkNvbnRyb2xUcmFuc2ZlciAo DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPlVz YklvLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZSZXF1ZXN0LA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVmaVVzYkRhdGFJbiwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfRVRIRVJORVRfVFJBTlNGRVJfVElNRU9V VCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXR0ZXJuQWN0aXZlLA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9FVEhfUE9XRVJfRklMVEVS X0xFTkdUSCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmVHJhbnNTdGF0 dXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArfQ0KPiArDQo+ ICsvKioNCj4gKw0KPiArICBDb252ZXJ0cyBQWEUgZmlsdGVyIHNldHRpbmdzIHRvIFJORElTIHZh bHVlcw0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgUFhFIGZpbHRlciBkYXRhLg0K PiArICBAcGFyYW1bb3V0XSBDZGNGaWx0ZXIgIEEgcG9pbnRlciB0byB0aGUgRXRoZXJuZXQgUGFj a2V0IEZpbHRlciBCaXRtYXANCj4gdmFsdWUgY29udmVydGVkIGJ5IFBYRV9PUEZMQUdTLg0KPiAr DQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0NvbnZlcnRGaWx0ZXIgKA0KPiArICBJTiAgVUlOVDE2ICBW YWx1ZSwNCj4gKyAgT1VUIFVJTlQxNiAgKkNkY0ZpbHRlcg0KPiArICApDQo+ICt7DQo+ICsgIFVJ TlQzMiAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAg Q291bnQ7DQo+ICsgIHN0YXRpYyBzdHJ1Y3QgQklUX01BUCAgVGFibGVbXSA9IHsNCj4gKyAgICB7 IFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX1VOSUNBU1QsDQo+IE5ESVNfUEFDS0VUX1RZUEVf RElSRUNURUQgICAgICB9LA0KPiArICAgIHsgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfQlJP QURDQVNULA0KPiBORElTX1BBQ0tFVF9UWVBFX0JST0FEQ0FTVCAgICAgfSwNCj4gKyAgICB7IFBY RV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0ZJTFRFUkVEX01VTFRJQ0FTVCwNCj4gTkRJU19QQUNL RVRfVFlQRV9NVUxUSUNBU1QgICAgIH0sDQo+ICsgICAgeyBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJ TFRFUl9QUk9NSVNDVU9VUywNCj4gTkRJU19QQUNLRVRfVFlQRV9QUk9NSVNDVU9VUyAgIH0sDQo+ ICsgICAgeyBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9BTExfTVVMVElDQVNULA0KPiBORElT X1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1QgfSwNCj4gKyAgfTsNCj4gKw0KPiArICBDb3VudCA9 IHNpemVvZiAoVGFibGUpL3NpemVvZiAoVGFibGVbMF0pOw0KPiArDQo+ICsgIGZvciAoSW5kZXgg PSAwOyAoVGFibGVbSW5kZXhdLlNyYyAhPSAwKSAmJiAoSW5kZXggPCBDb3VudCk7IEluZGV4Kysp IHsNCj4gKyAgICBpZiAoVGFibGVbSW5kZXhdLlNyYyAmIFZhbHVlKSB7DQo+ICsgICAgICAqQ2Rj RmlsdGVyIHw9IFRhYmxlW0luZGV4XS5Ec3Q7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9DQo+ICsN Cj4gKy8qKg0KPiArDQo+ICsgIFVwZGF0ZXMgRmlsdGVyIHNldHRpbmdzIG9uIHRoZSBkZXZpY2Uu DQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVz Y3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5l dHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9T VEFUVVMNCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5k aVJlY2VpdmVGaWx0ZXIgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNf REFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAg ICAgU3RhdHVzOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICpNY2FzdExpc3Q7 DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgQ291bnQ7DQo+ICsgIFVJTlQ4ICAg ICAgICAgICAgICAgICAgICAgICAgSW5kZXgxOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAg ICAgICAgIEluZGV4MjsNCj4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICBDcGJBZGRy Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgIENwYlNpemU7DQo+ICsgIFVJTlQx NiAgICAgICAgICAgICAgICAgICAgICAgU2V0RmlsdGVyOw0KPiArICBQWEVfQ1BCX1JFQ0VJVkVf RklMVEVSUyAgICAgICpDcGI7DQo+ICsgIFVTQl9FVEhFUk5FVF9GVU5fREVTQ1JJUFRPUiAgVXNi RXRoRnVuRGVzY3JpcHRvcjsNCj4gKw0KPiArICBDb3VudCAgICAgPSAwOw0KPiArICBDcGJBZGRy ICAgPSBDZGItPkNQQmFkZHI7DQo+ICsgIENwYlNpemUgICA9IENkYi0+Q1BCc2l6ZTsNCj4gKyAg U2V0RmlsdGVyID0gKFVJTlQxNikoQ2RiLT5PcEZsYWdzICYgMHgxRik7DQo+ICsgIENwYiAgICAg ICA9IChQWEVfQ1BCX1JFQ0VJVkVfRklMVEVSUyAqKShVSU5UTilDcGJBZGRyOw0KPiArDQo+ICsg IC8vIFRoZSBDcGIgY291bGQgYmUgTlVMTC4ocmVmOlBYRV9DUEJBRERSX05PVF9VU0VEKQ0KPiAr ICBOaWMtPlJ4RmlsdGVyID0gKFVJTlQ4KVNldEZpbHRlcjsNCj4gKw0KPiArICBpZiAoKChTZXRG aWx0ZXIgJiBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9GSUxURVJFRF9NVUxUSUNBU1QpICE9 DQo+IDApIHx8IChDcGIgIT0gTlVMTCkpIHsNCj4gKyAgICBpZiAoQ3BiICE9IE5VTEwpIHsNCj4g KyAgICAgIE5pYy0+TWNhc3RDb3VudCA9IChVSU5UOCkoQ3BiU2l6ZSAvIFBYRV9NQUNfTEVOR1RI KTsNCj4gKyAgICAgIENvcHlNZW0gKCZOaWMtPk1jYXN0TGlzdCwgQ3BiLCBOaWMtPk1jYXN0Q291 bnQpOw0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICBOaWMtPk1jYXN0Q291bnQgPSAwOw0KPiAr ICAgIH0NCj4gKw0KPiArICAgIE5pYy0+VXNiRXRoLT5Vc2JFdGhGdW5EZXNjcmlwdG9yIChOaWMt PlVzYkV0aCwNCj4gJlVzYkV0aEZ1bkRlc2NyaXB0b3IpOw0KPiArICAgIGlmICgoVXNiRXRoRnVu RGVzY3JpcHRvci5OdW1iZXJNY0ZpbHRlcnMgPDwgMSkgPT0gMCkgew0KPiArICAgICAgTmljLT5S eEZpbHRlciB8PSBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9BTExfTVVMVElDQVNUOw0KPiAr ICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiU2V0VXNiRXRoUGFja2V0RmlsdGVyIE5pYyAlbHgg TmljLT5Vc2JFdGggJWx4DQo+ICIsIE5pYywgTmljLT5Vc2JFdGgpKTsNCj4gKyAgICAgIE5pYy0+ VXNiRXRoLT5TZXRVc2JFdGhQYWNrZXRGaWx0ZXIgKE5pYy0+VXNiRXRoLCBOaWMtPlJ4RmlsdGVy KTsNCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgU3RhdHVzID0gZ0JTLT5BbGxvY2F0ZVBvb2wg KEVmaUJvb3RTZXJ2aWNlc0RhdGEsIE5pYy0+TWNhc3RDb3VudCAqIDYsDQo+IChWT0lEICoqKSZN Y2FzdExpc3QpOw0KPiArICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAg ICByZXR1cm4gUFhFX1NUQVRDT0RFX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICAgICAgfQ0KPiAr DQo+ICsgICAgICBpZiAoQ3BiICE9IE5VTEwpIHsNCj4gKyAgICAgICAgZm9yIChJbmRleDEgPSAw OyBJbmRleDEgPCBOaWMtPk1jYXN0Q291bnQ7IEluZGV4MSsrKSB7DQo+ICsgICAgICAgICAgZm9y IChJbmRleDIgPSAwOyBJbmRleDIgPCA2OyBJbmRleDIrKykgew0KPiArICAgICAgICAgICAgTWNh c3RMaXN0W0NvdW50KytdID0gQ3BiLT5NQ2FzdExpc3RbSW5kZXgxXVtJbmRleDJdOw0KPiArICAg ICAgICAgIH0NCj4gKyAgICAgICAgfQ0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICBOaWMtPlJ4 RmlsdGVyIHw9IFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0ZJTFRFUkVEX01VTFRJQ0FTVDsN Cj4gKyAgICAgIGlmIChDcGIgIT0gTlVMTCkgew0KPiArICAgICAgICBOaWMtPlVzYkV0aC0+U2V0 VXNiRXRoTWNhc3RGaWx0ZXIgKE5pYy0+VXNiRXRoLCBOaWMtPk1jYXN0Q291bnQsDQo+IE1jYXN0 TGlzdCk7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIE5pYy0+VXNiRXRoLT5TZXRVc2JFdGhQ YWNrZXRGaWx0ZXIgKE5pYy0+VXNiRXRoLCBOaWMtPlJ4RmlsdGVyKTsNCj4gKyAgICAgIEZyZWVQ b29sIChNY2FzdExpc3QpOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBFRklf U1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgcmVxdWVzdCBpcyB1c2VkIHRv IGNvbmZpZ3VyZSBkZXZpY2UgRXRoZXJuZXQgcGFja2V0IGZpbHRlciBzZXR0aW5ncy4NCj4gKw0K PiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+IEVE S0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgVmFs dWUgICAgICAgICAgICAgUGFja2V0IEZpbHRlciBCaXRtYXAuDQo+ICsNCj4gKyAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0K PiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhl Y3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBU aGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVG SV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQN Cj4gdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0 ZWQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtTZXRVc2JSbmRp c1BhY2tldEZpbHRlciAoDQo+ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRo aXMsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUNCj4gKyAgKQ0K PiArew0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBU aGlzIHJlcXVlc3QgaXMgdXNlZCB0byByZXRyaWV2ZSBhIHN0YXRpc3RpYyBiYXNlZCBvbiB0aGUg ZmVhdHVyZSBzZWxlY3Rvci4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAg ICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5z dGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIEZlYXR1cmVTZWxlY3RvciAgICAgICBWYWx1ZSBvZiB0 aGUgZmVhdHVyZSBzZWxlY3Rvci4NCj4gKyAgQHBhcmFtW291dF0gU3RhdGlzdGljICAgICAgICAg ICAgIEEgcG9pbnRlciB0byB0aGUgMzIgYml0IHVuc2lnbmVkIGludGVnZXIuDQo+ICsNCj4gKyAg QHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vz c2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2Nj dXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJS T1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBA cmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFu IGludmFsaWQNCj4gdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5v dCBzdXBwb3J0ZWQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtH ZXRSbmRpc1N0YXRpc3RpYyAoDQo+ICsgIElOICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wg ICpUaGlzLA0KPiArICBJTiAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICBGZWF0dXJlU2Vs ZWN0b3IsDQo+ICsgIE9VVCBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICpTdGF0aXN0aWMN Cj4gKyAgKQ0KPiArew0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIFVuZGlTdGFydCBpcyBpbnZva2Vk Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRl c2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBO ZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ICsq Ki8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRpU3RhcnQgKA0KPiArICBJ TiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7 DQo+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gKw0KPiArICBERUJVRyAoKERFQlVHX0lORk8s ICJSbmRpc1VuZGlTdGFydCBOaWMgJWx4IENkYiAlbHggTmljIFN0YXRlICV4XG4iLA0KPiBOaWMs IENkYiwgTmljLT5TdGF0ZSkpOw0KPiArDQo+ICsgIC8vIElzc3VlIFJuZGlzIFJlc2V0IGFuZCBi cmluZyB0aGUgZGV2aWNlIHRvIFJORElTX0JVU19JTklUSUFMSVpFRCBzdGF0ZQ0KPiArICBTdGF0 dXMgPSBSbmRpc1VuZGlSZXNldCAoQ2RiLCBOaWMpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ICsgICAgUm5kaXNVbmRpUmVzZXQgKENkYiwgTmljKTsNCj4gKyAgfQ0KPiArDQo+ ICsgIFN0YXR1cyA9IFJuZGlzVW5kaUluaXRpYWxpemUgKENkYiwgTmljKTsNCj4gKyAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIFJuZGlzVW5kaUluaXRpYWxpemUgKENkYiwgTmlj KTsNCj4gKyAgfQ0KPiArDQo+ICsgIFJuZGlzVW5kaVNodXRkb3duIChDZGIsIE5pYyk7DQo+ICsN Cj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBm dW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBVbmRpc3RvcCBpcyBpbnZva2VkLg0KPiArDQo+ICsgIEBw YXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2su DQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFj ZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgVGhl IHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ ICtFRklBUEkNCj4gK1JuZGlzVW5kaVN0b3AgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIERFQlVHICgoREVCVUdf SU5GTywgIlJuZGlzVW5kaVN0b3AgU3RhdGUgJXhcbiIsIE5pYy0+U3RhdGUpKTsNCj4gKyAgcmV0 dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlvbiBp cyBjYWxsZWQgd2hlbiBVbmRpR2V0SW5pdEluZm8gaXMgaW52b2tlZC4NCj4gKw0KPiArICBAcGFy YW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0K PiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2Ug Y29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgIFRoZSBy ZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVT DQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaUdldEluaXRJbmZvICgNCj4gKyAgSU4gIFBYRV9DREIg ICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBFREtJ SV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpVc2JFdGhEZXZpY2U7DQo+ICsgIFVTQl9STkRJU19E RVZJQ0UgICAgICAgICAgICAgKlVzYlJuZGlzRGV2aWNlOw0KPiArICBQWEVfREJfR0VUX0lOSVRf SU5GTyAgICAgICAgICpEYjsNCj4gKw0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJSbmRpc1Vu ZGlHZXRJbml0SW5mb1xuIikpOw0KPiArDQo+ICsgIFVzYkV0aERldmljZSAgID0gTmljLT5Vc2JF dGg7DQo+ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFVz YkV0aERldmljZSk7DQo+ICsNCj4gKyAgRGIgPSAoUFhFX0RCX0dFVF9JTklUX0lORk8gKikoVUlO VE4pQ2RiLT5EQmFkZHI7DQo+ICsNCj4gKyAgRGItPkZyYW1lRGF0YUxlbiA9IFVzYlJuZGlzRGV2 aWNlLT5NYXhUcmFuc2ZlclNpemUgLSBzaXplb2YNCj4gKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cp IC0gUFhFX01BQ19IRUFERVJfTEVOX0VUSEVSOw0KPiArICAvLyBMaW1pdCBNYXggTVRVIHNpemUg dG8gMTUwMCBieXRlcyBhcyBSTkRJUyBzcGVjLg0KPiArICBpZiAoRGItPkZyYW1lRGF0YUxlbiA+ IFBYRV9NQVhfVFhSWF9VTklUX0VUSEVSKSB7DQo+ICsgICAgRGItPkZyYW1lRGF0YUxlbiA9IFBY RV9NQVhfVFhSWF9VTklUX0VUSEVSOw0KPiArICB9DQo+ICsNCj4gKyAgREVCVUcgKChERUJVR19J TkZPLCAiRGItPkZyYW1lRGF0YUxlbiAleFxuIiwgRGItPkZyYW1lRGF0YUxlbikpOw0KPiArDQo+ ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgZnVu Y3Rpb24gaXMgY2FsbGVkIHdoZW4gUm5kaXNVbmRpR2V0Q29uZmlnSW5mbyBpcyBpbnZva2VkLg0K PiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2Ny aXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3 b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ICsqKi8N Cj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRpR2V0Q29uZmlnSW5mbyAoDQo+ ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkN Cj4gK3sNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXNVbmRpR2V0Q29uZmlnSW5mb1xu IikpOw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBU aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIFVuZGlJbml0aWFsaXplIGlzIGludm9rZWQuDQo+ ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3Jp cHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdv cmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEBy ZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsNCj4gKyoqLw0K PiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlJbml0aWFsaXplICgNCj4gKyAg SU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiAr ew0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICAqVXNiRXRoRHJpdmVyOw0KPiAr ICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAgICAgICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsgIFJF TU9URV9ORElTX0lOSVRJQUxJWkVfTVNHICAgIFJuZGlzSW5pdE1zZzsNCj4gKyAgUkVNT1RFX05E SVNfSU5JVElBTElaRV9DTVBMVCAgUm5kaXNJbml0TXNnQ21wbHQ7DQo+ICsgIEVGSV9TVEFUVVMg ICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBERUJVRyAoKERFQlVHX0lORk8s ICJSbmRpc1VuZGlJbml0aWFsaXplXG4iKSk7DQo+ICsNCj4gKyAgVXNiRXRoRHJpdmVyICAgPSBO aWMtPlVzYkV0aDsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNFX0ZST01f VEhJUyAoVXNiRXRoRHJpdmVyKTsNCj4gKw0KPiArICBaZXJvTWVtICgmUm5kaXNJbml0TXNnLCBz aXplb2YgKFJFTU9URV9ORElTX0lOSVRJQUxJWkVfTVNHKSk7DQo+ICsgIFplcm9NZW0gKCZSbmRp c0luaXRNc2dDbXBsdCwgc2l6ZW9mDQo+IChSRU1PVEVfTkRJU19JTklUSUFMSVpFX0NNUExUKSk7 DQo+ICsNCj4gKyAgUm5kaXNJbml0TXNnLk1lc3NhZ2VUeXBlICAgICA9IFJORElTX0lOSVRJQUxJ WkVfTVNHOw0KPiArICBSbmRpc0luaXRNc2cuTWVzc2FnZUxlbmd0aCAgID0gc2l6ZW9mIChSRU1P VEVfTkRJU19JTklUSUFMSVpFX01TRyk7DQo+ICsgIFJuZGlzSW5pdE1zZy5SZXF1ZXN0SUQgICAg ICAgPSBVc2JSbmRpc0RldmljZS0+UmVxdWVzdElkOw0KPiArICBSbmRpc0luaXRNc2cuTWFqb3JW ZXJzaW9uICAgID0gUk5ESVNfTUFKT1JfVkVSU0lPTjsNCj4gKyAgUm5kaXNJbml0TXNnLk1pbm9y VmVyc2lvbiAgICA9IFJORElTX01JTk9SX1ZFUlNJT047DQo+ICsgIFJuZGlzSW5pdE1zZy5NYXhU cmFuc2ZlclNpemUgPSBSTkRJU19NQVhfVFJBTlNGRVJfU0laRTsNCj4gKw0KPiArICBSbmRpc0lu aXRNc2dDbXBsdC5NZXNzYWdlVHlwZSAgID0gUk5ESVNfSU5JVElBTElaRV9DTVBMVDsNCj4gKyAg Um5kaXNJbml0TXNnQ21wbHQuTWVzc2FnZUxlbmd0aCA9IHNpemVvZg0KPiAoUkVNT1RFX05ESVNf SU5JVElBTElaRV9DTVBMVCk7DQo+ICsNCj4gKyAgU3RhdHVzID0gUm5kaXNDb250cm9sTXNnIChV c2JSbmRpc0RldmljZSwNCj4gKFJFTU9URV9ORElTX01TR19IRUFERVIgKikmUm5kaXNJbml0TXNn LA0KPiAoUkVNT1RFX05ESVNfTVNHX0hFQURFUiAqKSZSbmRpc0luaXRNc2dDbXBsdCk7DQo+ICsN Cj4gKyAgVXNiUm5kaXNEZXZpY2UtPlJlcXVlc3RJZCsrOw0KPiArDQo+ICsgIGlmIChFRklfRVJS T1IgKFN0YXR1cykgfHwgKFJuZGlzSW5pdE1zZ0NtcGx0LlN0YXR1cyAmIDB4ODAwMDAwMDApKSB7 DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vIE9ubHkgV2lyZWQg TWVkaXVtIGlzIHN1cHBvcnRlZA0KPiArICBpZiAoUm5kaXNJbml0TXNnQ21wbHQuTWVkaXVtKSB7 DQo+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gKyAgfQ0KPiArDQo+ICsgIFVzYlJu ZGlzRGV2aWNlLT5NZWRpdW0gICAgICAgICAgICAgICAgPSBSbmRpc0luaXRNc2dDbXBsdC5NZWRp dW07DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5NYXhQYWNrZXRzUGVyVHJhbnNmZXIgPQ0KPiBSbmRp c0luaXRNc2dDbXBsdC5NYXhQYWNrZXRzUGVyVHJhbnNmZXI7DQo+ICsgIFVzYlJuZGlzRGV2aWNl LT5NYXhUcmFuc2ZlclNpemUgICAgICAgPQ0KPiBSbmRpc0luaXRNc2dDbXBsdC5NYXhUcmFuc2Zl clNpemU7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5QYWNrZXRBbGlnbm1lbnRGYWN0b3IgPQ0KPiBS bmRpc0luaXRNc2dDbXBsdC5QYWNrZXRBbGlnbm1lbnRGYWN0b3I7DQo+ICsNCj4gKyAgREVCVUcg KChERUJVR19JTkZPLCAiTWVkaXVtIDogJXggXG4iLCBSbmRpc0luaXRNc2dDbXBsdC5NZWRpdW0p KTsNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiTWF4UGFja2V0c1BlclRyYW5zZmVyIDogJXgg XG4iLA0KPiBSbmRpc0luaXRNc2dDbXBsdC5NYXhQYWNrZXRzUGVyVHJhbnNmZXIpKTsNCj4gKyAg REVCVUcgKChERUJVR19JTkZPLCAiTWF4VHJhbnNmZXJTaXplIDogJXhcbiIsDQo+IFJuZGlzSW5p dE1zZ0NtcGx0Lk1heFRyYW5zZmVyU2l6ZSkpOw0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJQ YWNrZXRBbGlnbm1lbnRGYWN0b3IgOiAleFxuIiwNCj4gUm5kaXNJbml0TXNnQ21wbHQuUGFja2V0 QWxpZ25tZW50RmFjdG9yKSk7DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gVW5kaVJlc2V0IGlzIGlu dm9rZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1h bmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8g dGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHku DQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBk dWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJ QVBJDQo+ICtSbmRpc1VuZGlSZXNldCAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAg SU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVU X1BST1RPQ09MICAqVXNiRXRoRHJpdmVyOw0KPiArICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAg ICAgICpVc2JSbmRpc0RldmljZTsNCj4gKyAgUkVNT1RFX05ESVNfUkVTRVRfTVNHICAgICAgICBS bmRpc1Jlc2V0TXNnOw0KPiArICBSRU1PVEVfTkRJU19SRVNFVF9DTVBMVCAgICAgIFJuZGlzUmVz ZXRDbXBsdDsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsN Cj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXNVbmRpUmVzZXRcbiIpKTsNCj4gKw0KPiAr ICBVc2JFdGhEcml2ZXIgICA9IE5pYy0+VXNiRXRoOw0KPiArICBVc2JSbmRpc0RldmljZSA9IFVT Ql9STkRJU19ERVZJQ0VfRlJPTV9USElTIChVc2JFdGhEcml2ZXIpOw0KPiArDQo+ICsgIFplcm9N ZW0gKCZSbmRpc1Jlc2V0TXNnLCBzaXplb2YgKFJFTU9URV9ORElTX1JFU0VUX01TRykpOw0KPiAr ICBaZXJvTWVtICgmUm5kaXNSZXNldENtcGx0LCBzaXplb2YgKFJFTU9URV9ORElTX1JFU0VUX0NN UExUKSk7DQo+ICsNCj4gKyAgUm5kaXNSZXNldE1zZy5NZXNzYWdlVHlwZSAgID0gUk5ESVNfUkVT RVRfTVNHOw0KPiArICBSbmRpc1Jlc2V0TXNnLk1lc3NhZ2VMZW5ndGggPSBzaXplb2YgKFJFTU9U RV9ORElTX1JFU0VUX01TRyk7DQo+ICsNCj4gKyAgUm5kaXNSZXNldENtcGx0Lk1lc3NhZ2VUeXBl ICAgPSBSTkRJU19SRVNFVF9DTVBMVDsNCj4gKyAgUm5kaXNSZXNldENtcGx0Lk1lc3NhZ2VMZW5n dGggPSBzaXplb2YgKFJFTU9URV9ORElTX1JFU0VUX0NNUExUKTsNCj4gKw0KPiArICBTdGF0dXMg PSBSbmRpc0NvbnRyb2xNc2cgKFVzYlJuZGlzRGV2aWNlLA0KPiAoUkVNT1RFX05ESVNfTVNHX0hF QURFUiAqKSZSbmRpc1Jlc2V0TXNnLA0KPiAoUkVNT1RFX05ESVNfTVNHX0hFQURFUiAqKSZSbmRp c1Jlc2V0Q21wbHQpOw0KPiArDQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5SZXF1ZXN0SWQgPSAxOyAg ICAgICAgICAvLyBMZXQncyBzdGFydCB3aXRoIDENCj4gKw0KPiArICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpIHx8IChSbmRpc1Jlc2V0Q21wbHQuU3RhdHVzICYgMHg4MDAwMDAwMCkpIHsNCj4gKyAg ICByZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBFRklf U1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk IHdoZW4gVW5kaVNodXRkb3duIGlzIGludm9rZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2Ri ICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFt W2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIg ZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBUaGUgcmVxdWVzdCBleGVj dXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJ DQo+ICtSbmRpc1VuZGlTaHV0ZG93biAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAg SU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVU X1BST1RPQ09MICAqVXNiRXRoRHJpdmVyOw0KPiArICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAg ICAgICpVc2JSbmRpc0RldmljZTsNCj4gKyAgUkVNT1RFX05ESVNfSEFMVF9NU0cgICAgICAgICBS bmRpc0hsdE1zZzsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ ICsNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXNVbmRpU2h1dGRvd25cbiIpKTsNCj4g Kw0KPiArICBVc2JFdGhEcml2ZXIgICA9IE5pYy0+VXNiRXRoOw0KPiArICBVc2JSbmRpc0Rldmlj ZSA9IFVTQl9STkRJU19ERVZJQ0VfRlJPTV9USElTIChVc2JFdGhEcml2ZXIpOw0KPiArDQo+ICsg IFplcm9NZW0gKCZSbmRpc0hsdE1zZywgc2l6ZW9mIChSRU1PVEVfTkRJU19IQUxUX01TRykpOw0K PiArDQo+ICsgIFJuZGlzSGx0TXNnLk1lc3NhZ2VUeXBlICAgPSBSTkRJU19ITFRfTVNHOw0KPiAr ICBSbmRpc0hsdE1zZy5NZXNzYWdlTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJU19IQUxUX01T Ryk7DQo+ICsNCj4gKyAgU3RhdHVzID0gUm5kaXNDb250cm9sTXNnIChVc2JSbmRpc0RldmljZSwN Cj4gKFJFTU9URV9ORElTX01TR19IRUFERVIgKikmUm5kaXNIbHRNc2csIE5VTEwpOw0KPiArDQo+ ICsgIGlmIChTdGF0dXMgPT0gRUZJX0RFVklDRV9FUlJPUikgew0KPiArICAgIFN0YXR1cyA9IEVG SV9TVUNDRVNTOw0KPiArICB9DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlJlcXVlc3RJZCA9 IDE7DQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBVcGRhdGUg dGhlIE1lZGlhIGNvbm5lY3Rpb24uDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50 ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmlj ICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4g Kw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNj ZXNzZnVsbHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRp c1VuZGlHZXRTdGF0dXMgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNf REFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIENkYi0+U3RhdEZsYWdzICY9IH4oUFhFX1NU QVRGTEFHU19HRVRfU1RBVFVTX05PX01FRElBKTsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0K PiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVHJhbnNtaXQgdGhlIGRhdGEgYWZ0ZXIgYXBwZW5kaW5n IFJORElTIGhlYWRlci4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgICAgQ2RiICAgICAgICAgICBB IHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2lu XSAgICAgIFRoaXMgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBFREtJSV9VU0JfRVRIRVJO RVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gICAgICBCdWxrT3V0RGF0YSAg IEEgcG9pbnRlciB0byB0aGUgYnVmZmVyIG9mIGRhdGEgdGhhdCB3aWxsIGJlDQo+IHRyYW5zbWl0 dGVkIHRvIFVTQg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2Ugb3Ig cmVjZWl2ZWQgZnJvbSBVU0IgZGV2aWNlLg0KPiArICBAcGFyYW1baW4sIG91dF0gRGF0YUxlbmd0 aCAgICBBIHBvaW50ZXIgdG8gdGhlIFBhY2tldExlbmd0aC4NCj4gKw0KPiArICBAcmV0dmFsIEVG SV9TVUNDRVNTICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsNCj4g KyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlUcmFuc21pdCAoDQo+ ICsgIElOICAgICAgUFhFX0NEQiAgICAgICAgICAgICAgICAgICAgICAqQ2RiLA0KPiArICBJTiAg ICAgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOICAgICAgVk9J RCAgICAgICAgICAgICAgICAgICAgICAgICAqQnVsa091dERhdGEsDQo+ICsgIElOIE9VVCAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAqRGF0YUxlbmd0aA0KPiArICApDQo+ICt7DQo+ICsg IEVGSV9TVEFUVVMgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAg ICAgICAgKlVzYlJuZGlzRGV2aWNlOw0KPiArICBSRU1PVEVfTkRJU19QQUNLRVRfTVNHICAqUm5k aXNQYWNrZXRNc2c7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgIFRyYW5zZmVyTGVuZ3Ro Ow0KPiArDQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzVW5kaVRyYW5zbWl0IERhdGFM ZW5ndGggOiAleFxuIiwNCj4gKkRhdGFMZW5ndGgpKTsNCj4gKw0KPiArICBVc2JSbmRpc0Rldmlj ZSA9IFVTQl9STkRJU19ERVZJQ0VfRlJPTV9USElTIChUaGlzKTsNCj4gKw0KPiArICBSbmRpc1Bh Y2tldE1zZyA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAoUkVNT1RFX05ESVNfUEFDS0VUX01T RykNCj4gKyAqRGF0YUxlbmd0aCk7DQo+ICsgIGlmIChSbmRpc1BhY2tldE1zZyA9PSBOVUxMKSB7 DQo+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICB9DQo+ICsNCj4gKyAg Um5kaXNQYWNrZXRNc2ctPk1lc3NhZ2VUeXBlICAgPSBSTkRJU19QQUNLRVRfTVNHOw0KPiArICBS bmRpc1BhY2tldE1zZy0+TWVzc2FnZUxlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfUEFDS0VU X01TRykNCj4gKyAoVUlOVDMyKSpEYXRhTGVuZ3RoOw0KPiArICBSbmRpc1BhY2tldE1zZy0+RGF0 YU9mZnNldCAgICA9IHNpemVvZiAoUkVNT1RFX05ESVNfUEFDS0VUX01TRykgLSA4Ow0KPiArICBS bmRpc1BhY2tldE1zZy0+RGF0YUxlbmd0aCAgICA9IChVSU5UMzIpKkRhdGFMZW5ndGg7DQo+ICsN Cj4gKyAgQ29weU1lbSAoDQo+ICsgICAgKChVSU5UOCAqKVJuZGlzUGFja2V0TXNnKSArIHNpemVv ZiAoUkVNT1RFX05ESVNfUEFDS0VUX01TRyksDQo+ICsgICAgQnVsa091dERhdGEsDQo+ICsgICAg KkRhdGFMZW5ndGgNCj4gKyAgICApOw0KPiArDQo+ICsgIFRyYW5zZmVyTGVuZ3RoID0gUm5kaXNQ YWNrZXRNc2ctPk1lc3NhZ2VMZW5ndGg7DQo+ICsNCj4gKyAgU3RhdHVzID0gUm5kaXNUcmFuc21p dERhdGFNc2cgKA0KPiArICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLA0KPiArICAgICAgICAg ICAgIChSRU1PVEVfTkRJU19NU0dfSEVBREVSICopUm5kaXNQYWNrZXRNc2csDQo+ICsgICAgICAg ICAgICAgJlRyYW5zZmVyTGVuZ3RoDQo+ICsgICAgICAgICAgICAgKTsNCj4gKw0KPiArICBERUJV RyAoKERFQlVHX0lORk8sICJcblJuZGlzVW5kaVRyYW5zbWl0IFRyYW5zZmVyTGVuZ3RoICVseFxu IiwNCj4gVHJhbnNmZXJMZW5ndGgpKTsNCj4gKw0KPiArICBGcmVlUG9vbCAoUm5kaXNQYWNrZXRN c2cpOw0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBS ZWNlaXZlcyBhbmQgcmVtb3ZlcyBSTkRJUyBoZWFkZXIgYW5kIHJldHVybnMgdGhlIHJhdyBkYXRh Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICBDZGIgICAgICAgICAgIEEgcG9pbnRlciB0byB0 aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICAgICAgVGhpcyAg ICAgICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBp bnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIEJ1bGtJbkRhdGEgICAgQSBwb2ludGVyIHRv IHRoZSBidWZmZXIgb2YgZGF0YSB0aGF0IHdpbGwgYmUNCj4gdHJhbnNtaXR0ZWQgdG8gVVNCDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSBvciByZWNlaXZlZCBmcm9t IFVTQiBkZXZpY2UuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBEYXRhTGVuZ3RoICAgIEEgcG9pbnRl ciB0byB0aGUgUGFja2V0TGVuZ3RoLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBF RklfQlVGRkVSX1RPT19TTUFMTCAgVGhlIHVzZXIgcHJvdmlkZWQgYnVmZmVyIGlzIHRvbyBzbWFs bA0KPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICBObyBidWZmZXIgd2FzIGZvdW5k IGluIHRoZSBsaXN0Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiAr Um5kaXNVbmRpUmVjZWl2ZSAoDQo+ICsgIElOICAgICBQWEVfQ0RCICAgICAgICAgICAgICAgICAg ICAgICpDZGIsDQo+ICsgIElOICAgICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlz LA0KPiArICBJTiBPVVQgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAqQnVsa0luRGF0YSwN Cj4gKyAgSU4gT1VUIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgKkRhdGFMZW5ndGgNCj4g KyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIFVT Ql9STkRJU19ERVZJQ0UgICAgICAgICpVc2JSbmRpc0RldmljZTsNCj4gKyAgUkVNT1RFX05ESVNf UEFDS0VUX01TRyAgKlJuZGlzUGFja2V0TXNnOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAg ICBUcmFuc2Zlckxlbmd0aDsNCj4gKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlcjsN Cj4gKyAgUEFDS0VUX0xJU1QgICAgICAgICAgICAgKkhlYWRQYWNrZXQ7DQo+ICsgIFBBQ0tFVF9M SVNUICAgICAgICAgICAgICpQYWNrZXRMaXN0Ow0KPiArDQo+ICsgIC8vIENoZWNrIGlmIHRoZXJl IGlzIGFueSBvdXRzdGFuZGluZyBwYWNrZXQgdG8gcmVjZWl2ZQ0KPiArICAvLyBUaGUgYnVmZmVy IGFsbG9jYXRlZCBoYXMgYSBsaW5rZWQgTGlzdCBmb2xsb3dlZCBieSB0aGUgcGFja2V0Lg0KPiAr DQo+ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFRoaXMp Ow0KPiArICBCdWZmZXIgICAgICAgICA9IE5VTEw7DQo+ICsgIEhlYWRQYWNrZXQgICAgID0gTlVM TDsNCj4gKw0KPiArICB3aGlsZSAoMSkgew0KPiArICAgIEJ1ZmZlciA9IEFsbG9jYXRlWmVyb1Bv b2wgKHNpemVvZiAoUEFDS0VUX0xJU1QpICsgc2l6ZW9mDQo+IChSRU1PVEVfTkRJU19QQUNLRVRf TVNHKSArIFVzYlJuZGlzRGV2aWNlLT5NYXhUcmFuc2ZlclNpemUpOw0KPiArICAgIGlmIChCdWZm ZXIgPT0gTlVMTCkgew0KPiArICAgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiAr ICAgIH0NCj4gKw0KPiArICAgIFJuZGlzUGFja2V0TXNnICAgICAgICAgICAgICAgID0gKFJFTU9U RV9ORElTX1BBQ0tFVF9NU0cgKikoc2l6ZW9mDQo+IChQQUNLRVRfTElTVCkgKyAoVUlOVDggKilC dWZmZXIpOw0KPiArICAgIFBhY2tldExpc3QgICAgICAgICAgICAgICAgICAgID0gKFBBQ0tFVF9M SVNUICopQnVmZmVyOw0KPiArICAgIFBhY2tldExpc3QtPlBhY2tldFN0YXJ0QnVmZmVyID0gKFVJ TlQ4ICopQnVmZmVyICsgc2l6ZW9mIChQQUNLRVRfTElTVCk7DQo+ICsgICAgLy8gU2F2ZSB0aGUg b3JpZ2luYWwgYWRkcmVzcyBmb3IgZnJlZWluZyBpdCB1cA0KPiArICAgIFBhY2tldExpc3QtPk9y Z0J1ZmZlciA9IChVSU5UOCAqKUJ1ZmZlcjsNCj4gKyAgICBUcmFuc2Zlckxlbmd0aCAgICAgICAg PSBVc2JSbmRpc0RldmljZS0+TWF4VHJhbnNmZXJTaXplOw0KPiArDQo+ICsgICAgU3RhdHVzID0g Um5kaXNSZWNlaXZlRGF0YU1zZyAoDQo+ICsgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZSwN Cj4gKyAgICAgICAgICAgICAgIChSRU1PVEVfTkRJU19NU0dfSEVBREVSICopUm5kaXNQYWNrZXRN c2csDQo+ICsgICAgICAgICAgICAgICAmVHJhbnNmZXJMZW5ndGgNCj4gKyAgICAgICAgICAgICAg ICk7DQo+ICsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpIHx8IChUcmFuc2Zlckxlbmd0 aCA9PSAwKSkgew0KPiArICAgICAgRnJlZVBvb2wgKEJ1ZmZlcik7DQo+ICsgICAgICBicmVhazsN Cj4gKyAgICB9DQo+ICsNCj4gKyAgICAvLyBDb2xsZWN0IGFsbCB0aGUgUk5ESVMgcGFja2V0IGlu IExpbmtlZCBsaXN0Lg0KPiArICAgIGlmICgoUm5kaXNQYWNrZXRNc2ctPk1lc3NhZ2VUeXBlID09 IFJORElTX1BBQ0tFVF9NU0cpICYmDQo+ICsgICAgICAgIChSbmRpc1BhY2tldE1zZy0+RGF0YU9m ZnNldCA9PSBzaXplb2YgKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpDQo+IC0gUk5ESVNfUkVTRVJW RURfQllURV9MRU5HVEgpICYmDQo+ICsgICAgICAgIChUcmFuc2Zlckxlbmd0aCA+PSBSbmRpc1Bh Y2tldE1zZy0+TWVzc2FnZUxlbmd0aCkpDQo+ICsgICAgew0KPiArICAgICAgLy8gSW5zZXJ0IFBh Y2tldA0KPiArICAgICAgUGFja2V0TGlzdC0+UmVtYWluaW5nTGVuZ3RoID0gVHJhbnNmZXJMZW5n dGg7DQo+ICsgICAgICBJbnNlcnRUYWlsTGlzdCAoJlVzYlJuZGlzRGV2aWNlLT5SZWNlaXZlUGFj a2V0TGlzdCwgQnVmZmVyKTsNCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgRnJlZVBvb2wgKEJ1 ZmZlcik7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgd2hpbGUgKCFJc0xpc3RFbXB0eSAo JlVzYlJuZGlzRGV2aWNlLT5SZWNlaXZlUGFja2V0TGlzdCkpIHsNCj4gKyAgICBIZWFkUGFja2V0 ID0gKFBBQ0tFVF9MSVNUICopR2V0Rmlyc3ROb2RlICgmVXNiUm5kaXNEZXZpY2UtDQo+ID5SZWNl aXZlUGFja2V0TGlzdCk7DQo+ICsNCj4gKyAgICBSbmRpc1BhY2tldE1zZyA9IChSRU1PVEVfTkRJ U19QQUNLRVRfTVNHICopKFVJTlQ4DQo+ICopSGVhZFBhY2tldC0+UGFja2V0U3RhcnRCdWZmZXI7 DQo+ICsNCj4gKyAgICBQcmludFJuZGlzTXNnICgoUkVNT1RFX05ESVNfTVNHX0hFQURFUiAqKVJu ZGlzUGFja2V0TXNnKTsNCj4gKw0KPiArICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIHBhY2tldCBp cyB2YWxpZCBSTkRJUyBwYWNrZXQuDQo+ICsgICAgaWYgKChIZWFkUGFja2V0LT5SZW1haW5pbmdM ZW5ndGggPiBzaXplb2YNCj4gKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpKSAmJiAoUm5kaXNQYWNr ZXRNc2ctPk1lc3NhZ2VUeXBlID09DQo+IFJORElTX1BBQ0tFVF9NU0cpICYmDQo+ICsgICAgICAg IChSbmRpc1BhY2tldE1zZy0+RGF0YU9mZnNldCA9PSAoc2l6ZW9mIChSRU1PVEVfTkRJU19QQUNL RVRfTVNHKQ0KPiAtIFJORElTX1JFU0VSVkVEX0JZVEVfTEVOR1RIKSkgJiYNCj4gKyAgICAgICAg KEhlYWRQYWNrZXQtPlJlbWFpbmluZ0xlbmd0aCA+PSBSbmRpc1BhY2tldE1zZy0+TWVzc2FnZUxl bmd0aCkpDQo+ICsgICAgew0KPiArICAgICAgaWYgKCpEYXRhTGVuZ3RoID49IFJuZGlzUGFja2V0 TXNnLT5EYXRhTGVuZ3RoKSB7DQo+ICsgICAgICAgIENvcHlNZW0gKA0KPiArICAgICAgICAgIEJ1 bGtJbkRhdGEsDQo+ICsgICAgICAgICAgKFVJTlQ4ICopUm5kaXNQYWNrZXRNc2cgKyAoUm5kaXNQ YWNrZXRNc2ctPkRhdGFPZmZzZXQgKw0KPiBSTkRJU19SRVNFUlZFRF9CWVRFX0xFTkdUSCksDQo+ ICsgICAgICAgICAgUm5kaXNQYWNrZXRNc2ctPkRhdGFMZW5ndGgNCj4gKyAgICAgICAgICApOw0K PiArDQo+ICsgICAgICAgICpEYXRhTGVuZ3RoID0gIFJuZGlzUGFja2V0TXNnLT5EYXRhTGVuZ3Ro Ow0KPiArDQo+ICsgICAgICAgIEhlYWRQYWNrZXQtPlJlbWFpbmluZ0xlbmd0aCAgID0gSGVhZFBh Y2tldC0+UmVtYWluaW5nTGVuZ3RoIC0NCj4gUm5kaXNQYWNrZXRNc2ctPk1lc3NhZ2VMZW5ndGg7 DQo+ICsgICAgICAgIEhlYWRQYWNrZXQtPlBhY2tldFN0YXJ0QnVmZmVyID0gKFVJTlQ4ICopUm5k aXNQYWNrZXRNc2cgKw0KPiBSbmRpc1BhY2tldE1zZy0+TWVzc2FnZUxlbmd0aDsNCj4gKw0KPiAr ICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICsgICAgICB9IGVsc2Ugew0KPiArICAgICAg ICAqRGF0YUxlbmd0aCA9IFJuZGlzUGFja2V0TXNnLT5EYXRhTGVuZ3RoOw0KPiArICAgICAgICBy ZXR1cm4gRUZJX0JVRkZFUl9UT09fU01BTEw7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArDQo+ ICsgICAgUmVtb3ZlRW50cnlMaXN0ICgmSGVhZFBhY2tldC0+UGFja2V0TGlzdCk7DQo+ICsgICAg RnJlZVBvb2wgKChQQUNLRVRfTElTVCAqKUhlYWRQYWNrZXQtPk9yZ0J1ZmZlcik7DQo+ICsgIH0N Cj4gKw0KPiArICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg IFRoaXMgaXMgYSBkdW1teSBmdW5jdGlvbiB3aGljaCBqdXN0IHJldHVybnMuIFVuaW1wbGVtZW50 ZWQNCj4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGZ1bmN0aW9ucw0KPiArICBwb2ludCB0 byB0aGlzIGZ1bmN0aW9uLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRv IHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBw b2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4g KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1 bGx5Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNEdW1t eVJldHVybiAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAq TmljDQo+ICsgICkNCj4gK3sNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXNEdW1teVJl dHVybiBjYWxsZWRcbiIpKTsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlvbiBzZW5kIHRoZSBSTkRJUyBjb21tYW5kIHRocm91Z2gg dGhlIGRldmljZSdzIGNvbnRyb2wNCj4gZW5kcG9pbnQNCj4gKw0KPiArICBAcGFyYW1baW5dICBV c2JSbmRpc0RldmljZSAgICBBIHBvaW50ZXIgdG8gdGhlIFVTQl9STkRJU19ERVZJQ0UNCj4gaW5z dGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIFJuZGlzTXNnICAgICAgICAgIEEgcG9pbnRlciB0byB0 aGUgUkVNT1RFX05ESVNfTVNHX0hFQURFUg0KPiBkYXRhLg0KPiArICBAcGFyYW1bb3V0XSBSbmRp c01zZ1Jlc3BvbnNlICBBIHBvaW50ZXIgdG8gdGhlDQo+IFJFTU9URV9ORElTX01TR19IRUFERVIg ZGF0YSBmb3IgZ2V0dGluZyByZXNwb25zZXMuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICAgVGhlIGJ1bGsgdHJhbnNmZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5DQo+IGV4 ZWN1dGVkLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1JuZGlzQ29udHJvbE1zZyAo DQo+ICsgIElOICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAqVXNiUm5kaXNEZXZpY2UsDQo+ICsg IElOICBSRU1PVEVfTkRJU19NU0dfSEVBREVSICAqUm5kaXNNc2csDQo+ICsgIE9VVCBSRU1PVEVf TkRJU19NU0dfSEVBREVSICAqUm5kaXNNc2dSZXNwb25zZQ0KPiArICApDQo+ICt7DQo+ICsgIEVG SV9VU0JfSU9fUFJPVE9DT0wgICAgICAgICAgICpVc2JJbyA9IFVzYlJuZGlzRGV2aWNlLT5Vc2JJ bzsNCj4gKyAgRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCAgICAgICAgRGV2UmVxOw0KPiArICBVSU5U MzIgICAgICAgICAgICAgICAgICAgICAgICBVc2JTdGF0dXM7DQo+ICsgIEVGSV9TVEFUVVMgICAg ICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAg ICAgU2F2ZVJlc3BvbnNlVHlwZTsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAg U2F2ZVJlc3BvbnNlTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICBJ bmRleDsNCj4gKyAgUkVNT1RFX05ESVNfSU5JVElBTElaRV9DTVBMVCAgKlJuZGlzSW5pdENtcGx0 Ow0KPiArDQo+ICsgIFNhdmVSZXNwb25zZVR5cGUgICA9IDA7DQo+ICsgIFNhdmVSZXNwb25zZUxl bmd0aCA9IDA7DQo+ICsgIFJuZGlzSW5pdENtcGx0ICAgICA9IChSRU1PVEVfTkRJU19JTklUSUFM SVpFX0NNUExUDQo+ICopUm5kaXNNc2dSZXNwb25zZTsNCj4gKw0KPiArICBpZiAoUm5kaXNNc2dS ZXNwb25zZSkgew0KPiArICAgIFNhdmVSZXNwb25zZVR5cGUgICA9IFJuZGlzTXNnUmVzcG9uc2Ut Pk1lc3NhZ2VUeXBlOw0KPiArICAgIFNhdmVSZXNwb25zZUxlbmd0aCA9IFJuZGlzTXNnUmVzcG9u c2UtPk1lc3NhZ2VMZW5ndGg7DQo+ICsgIH0NCj4gKw0KPiArICBaZXJvTWVtICgmRGV2UmVxLCBz aXplb2YgKEVGSV9VU0JfREVWSUNFX1JFUVVFU1QpKTsNCj4gKw0KPiArICBEZXZSZXEuUmVxdWVz dFR5cGUgPSBVU0JfUkVRX1RZUEVfQ0xBU1MgfCBVU0JfVEFSR0VUX0lOVEVSRkFDRTsNCj4gKyAg RGV2UmVxLlJlcXVlc3QgICAgID0gU0VORF9FTkNBUFNVTEFURURfQ09NTUFORDsNCj4gKyAgRGV2 UmVxLlZhbHVlICAgICAgID0gMDsNCj4gKyAgRGV2UmVxLkluZGV4ICAgICAgID0gMDsNCj4gKyAg RGV2UmVxLkxlbmd0aCAgICAgID0gKFVJTlQxNilSbmRpc01zZy0+TWVzc2FnZUxlbmd0aDsNCj4g Kw0KPiArICBQcmludFJuZGlzTXNnIChSbmRpc01zZyk7DQo+ICsNCj4gKyAgU3RhdHVzID0gVXNi SW8tPlVzYkNvbnRyb2xUcmFuc2ZlciAoDQo+ICsgICAgICAgICAgICAgICAgICAgIFVzYklvLA0K PiArICAgICAgICAgICAgICAgICAgICAmRGV2UmVxLA0KPiArICAgICAgICAgICAgICAgICAgICBF ZmlVc2JEYXRhT3V0LA0KPiArICAgICAgICAgICAgICAgICAgICBVU0JfRVRIRVJORVRfVFJBTlNG RVJfVElNRU9VVCwNCj4gKyAgICAgICAgICAgICAgICAgICAgUm5kaXNNc2csDQo+ICsgICAgICAg ICAgICAgICAgICAgIFJuZGlzTXNnLT5NZXNzYWdlTGVuZ3RoLA0KPiArICAgICAgICAgICAgICAg ICAgICAmVXNiU3RhdHVzDQo+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgREVC VUcgKChERUJVR19JTkZPLCAiUm5kaXNDb250cm9sTXNnOiBVc2JTdGF0dXMgOiAleCBTdGF0dXMg OiAlcg0KPiBSbmRpc01zZ1Jlc3BvbnNlIDogJWx4XG4iLCBVc2JTdGF0dXMsIFN0YXR1cywgUm5k aXNNc2dSZXNwb25zZSkpOw0KPiArDQo+ICsgIC8vIEVycm9yIG9yIG5vIHJlc3BvbnNlIGV4cGVj dGVkDQo+ICsgIGlmICgoRUZJX0VSUk9SIChTdGF0dXMpKSB8fCAoUm5kaXNNc2dSZXNwb25zZSA9 PSBOVUxMKSkgew0KPiArICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzQ29udHJvbE1zZzog VXNiU3RhdHVzIDogJXggU3RhdHVzIDogJXJcbiIsDQo+IFVzYlN0YXR1cywgU3RhdHVzKSk7DQo+ ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJ bmRleCA8IChSTkRJU19DT05UUk9MX1RJTUVPVVQvMTAwKTsgSW5kZXgrKykgew0KPiArICAgIFJl YWRSbmRpc1Jlc3BvbnNlSW50ZXJydXB0IChVc2JSbmRpc0RldmljZSk7DQo+ICsgICAgWmVyb01l bSAoJkRldlJlcSwgc2l6ZW9mIChFRklfVVNCX0RFVklDRV9SRVFVRVNUKSk7DQo+ICsNCj4gKyAg ICBEZXZSZXEuUmVxdWVzdFR5cGUgPSBVU0JfRU5EUE9JTlRfRElSX0lOIHwgVVNCX1JFUV9UWVBF X0NMQVNTDQo+IHwgVVNCX1RBUkdFVF9JTlRFUkZBQ0U7DQo+ICsgICAgRGV2UmVxLlJlcXVlc3Qg ICAgID0gR0VUX0VOQ0FQU1VMQVRFRF9SRVNQT05TRTsNCj4gKyAgICBEZXZSZXEuVmFsdWUgICAg ICAgPSAwOw0KPiArICAgIERldlJlcS5JbmRleCAgICAgICA9IDA7DQo+ICsgICAgRGV2UmVxLkxl bmd0aCAgICAgID0gKFVJTlQxNilSbmRpc01zZ1Jlc3BvbnNlLT5NZXNzYWdlTGVuZ3RoOw0KPiAr DQo+ICsgICAgU3RhdHVzID0gVXNiSW8tPlVzYkNvbnRyb2xUcmFuc2ZlciAoDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgVXNiSW8sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgJkRldlJlcSwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICBFZmlVc2JEYXRhSW4sDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgVVNCX0VUSEVSTkVUX1RSQU5TRkVSX1RJTUVPVVQsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgUm5kaXNNc2dSZXNwb25zZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICBSbmRp c01zZ1Jlc3BvbnNlLT5NZXNzYWdlTGVuZ3RoLA0KPiArICAgICAgICAgICAgICAgICAgICAgICZV c2JTdGF0dXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgICAgREVCVUcg KChERUJVR19JTkZPLCAiUm5kaXNDb250cm9sTXNnIFJlc3BvbnNlOiBVc2JTdGF0dXMgOiAleA0K PiBTdGF0dXMgOiAlciBcbiIsIFVzYlN0YXR1cywgU3RhdHVzKSk7DQo+ICsNCj4gKyAgICBQcmlu dFJuZGlzTXNnIChSbmRpc01zZ1Jlc3BvbnNlKTsNCj4gKw0KPiArICAgIGlmICghRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+ICsgICAgICBpZiAoKFJuZGlzSW5pdENtcGx0LT5SZXF1ZXN0SUQgIT0g KChSRU1PVEVfTkRJU19JTklUSUFMSVpFX0NNUExUDQo+ICopUm5kaXNNc2cpLT5SZXF1ZXN0SUQp IHx8IChSbmRpc0luaXRDbXBsdC0+TWVzc2FnZVR5cGUgIT0NCj4gU2F2ZVJlc3BvbnNlVHlwZSkp IHsNCj4gKyAgICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiUmV0cnkgdGhlIHJlc3BvbnNlXG4i KSk7DQo+ICsNCj4gKyAgICAgICAgUm5kaXNNc2dSZXNwb25zZS0+TWVzc2FnZVR5cGUgICA9IFNh dmVSZXNwb25zZVR5cGU7DQo+ICsgICAgICAgIFJuZGlzTXNnUmVzcG9uc2UtPk1lc3NhZ2VMZW5n dGggPSBTYXZlUmVzcG9uc2VMZW5ndGg7DQo+ICsgICAgICAgIGNvbnRpbnVlOw0KPiArICAgICAg fQ0KPiArICAgIH0NCj4gKw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiAr ICBERUJVRyAoKERFQlVHX0lORk8sICJSbmRpc0NvbnRyb2xNc2c6IFRpbWVPdXRcbiIpKTsNCj4g Kw0KPiArICByZXR1cm4gRUZJX1RJTUVPVVQ7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlz IGZ1bmN0aW9uIHNlbmQgdGhlIFJORElTIGNvbW1hbmQgdGhyb3VnaCB0aGUgZGV2aWNlJ3MgRGF0 YQ0KPiBlbmRwb2ludA0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICBVc2JSbmRpc0RldmljZSAg QSBwb2ludGVyIHRvIHRoZSBVU0JfUk5ESVNfREVWSUNFDQo+IGluc3RhbmNlLg0KPiArICBAcGFy YW1baW5dICAgICAgUm5kaXNNc2cgICAgICAgIEEgcG9pbnRlciB0byB0aGUNCj4gUkVNT1RFX05E SVNfTVNHX0hFQURFUiB0byBzZW5kIG91dC4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIFRyYW5zZmVy TGVuZ3RoICBUaGUgbGVuZ3RoIG9mIHRoZSBSbmRpc01zZyBkYXRhIHRvDQo+IHRyYW5zZmVyLg0K PiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1 Y2Nlc3NmdWxseS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtSbmRpc1RyYW5zbWl0 RGF0YU1zZyAoDQo+ICsgIElOICAgICAgVVNCX1JORElTX0RFVklDRSAgICAgICAgKlVzYlJuZGlz RGV2aWNlLA0KPiArICBJTiAgICAgIFJFTU9URV9ORElTX01TR19IRUFERVIgICpSbmRpc01zZywN Cj4gKyAgSU4gT1VUICBVSU5UTiAgICAgICAgICAgICAgICAgICAqVHJhbnNmZXJMZW5ndGgNCj4g KyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ICsgIFVJTlQzMiAgICAgIFVz YlN0YXR1czsNCj4gKw0KPiArICBpZiAoVXNiUm5kaXNEZXZpY2UtPkJ1bGtJbkVuZHBvaW50ID09 IDApIHsNCj4gKyAgICBHZXRFbmRwb2ludCAoVXNiUm5kaXNEZXZpY2UtPlVzYklvQ2RjRGF0YSwg VXNiUm5kaXNEZXZpY2UpOw0KPiArICB9DQo+ICsNCj4gKyAgUHJpbnRSbmRpc01zZyAoUm5kaXNN c2cpOw0KPiArDQo+ICsgIFN0YXR1cyA9IFVzYlJuZGlzRGV2aWNlLT5Vc2JJb0NkY0RhdGEtPlVz YkJ1bGtUcmFuc2ZlciAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYklvQ2RjRGF0YSwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+QnVsa091dEVuZHBvaW50 LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJuZGlzTXNn LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZmVy TGVuZ3RoLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVT Ql9UWF9FVEhFUk5FVF9CVUxLX1RJTUVPVVQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJlVzYlN0YXR1cw0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgaWYgKFN0YXR1cyA9PSBFRklfU1VDQ0VT Uykgew0KPiArICAgIGdTdG9wQnVsa0luQ250ID0gTUFYSU1VTV9TVE9QQlVMS0lOX0NOVDsgICAg IC8vIEFmdGVyIHNlbmRpbmcNCj4gY21kICx3ZSB3aWxsIHBvbGxpbmcgcmVjZWl2ZSBwYWNrYWdl IGZvciBNQVhJTVVNX1NUT1BCVUxLSU5fQ05UDQo+IHRpbWVzDQo+ICsgIH0NCj4gKw0KPiArICBy ZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlvbiBzZW5k IHRoZSBSTkRJUyBjb21tYW5kIHRocm91Z2ggdGhlIGRldmljZSdzIERhdGENCj4gZW5kcG9pbnQN Cj4gKw0KPiArICBAcGFyYW1baW5dICAgICAgVXNiUm5kaXNEZXZpY2UgICAgQSBwb2ludGVyIHRv IHRoZSBVU0JfUk5ESVNfREVWSUNFDQo+IGluc3RhbmNlLg0KPiArICBAcGFyYW1baW4sIG91dF0g Um5kaXNNc2cgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBSRU1PVEVfTkRJU19NU0dfSEVB REVSIHRvIHNlbmQgb3V0Lg0KPiArICBAcGFyYW1baW4sIG91dF0gVHJhbnNmZXJMZW5ndGggICAg VGhlIGxlbmd0aCBvZiB0aGUgUm5kaXNNc2cgZGF0YSB0bw0KPiB0cmFuc2Zlci4NCj4gKw0KPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVs bHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArUm5kaXNSZWNlaXZlRGF0YU1zZyAo DQo+ICsgIElOICAgICAgVVNCX1JORElTX0RFVklDRSAgICAgICAgKlVzYlJuZGlzRGV2aWNlLA0K PiArICBJTiBPVVQgIFJFTU9URV9ORElTX01TR19IRUFERVIgICpSbmRpc01zZywNCj4gKyAgSU4g T1VUICBVSU5UTiAgICAgICAgICAgICAgICAgICAqVHJhbnNmZXJMZW5ndGgNCj4gKyAgKQ0KPiAr ew0KPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ICsgIFVJTlQzMiAgICAgIFVzYlN0YXR1czsN Cj4gKw0KPiArICBVc2JTdGF0dXMgPSAwOw0KPiArDQo+ICsgIGlmIChVc2JSbmRpc0RldmljZS0+ QnVsa0luRW5kcG9pbnQgPT0gMCkgew0KPiArICAgIEdldEVuZHBvaW50IChVc2JSbmRpc0Rldmlj ZS0+VXNiSW9DZGNEYXRhLCBVc2JSbmRpc0RldmljZSk7DQo+ICsgIH0NCj4gKw0KPiArICAvLyBV c2UgZ1N0b3BCdWxrSW5DbnQgdG8gc3RvcCBCdWxrSW4gY29tbWFuZA0KPiArICBpZiAoZ1N0b3BC dWxrSW5DbnQgfHwgTEFOX0JVTEtJTl9DTURfQ09OVFJPTCkgew0KPiArICAgIFN0YXR1cyA9IFVz YlJuZGlzRGV2aWNlLT5Vc2JJb0NkY0RhdGEtPlVzYkJ1bGtUcmFuc2ZlciAoDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+VXNi SW9DZGNEYXRhLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVXNiUm5kaXNEZXZpY2UtPkJ1bGtJbkVuZHBvaW50LA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUm5kaXNNc2csDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zlckxlbmd0aCwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9SWF9FVEhFUk5FVF9CVUxL X1RJTUVPVVQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmVXNiU3RhdHVzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOw0KPiArDQo+ICsgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAg IGdTdG9wQnVsa0luQ250ID0gTUlOSU1VTV9TVE9QQlVMS0lOX0NOVDsNCj4gKyAgICB9IGVsc2Ug ew0KPiArICAgICAgZ1N0b3BCdWxrSW5DbnQtLTsNCj4gKyAgICB9DQo+ICsgIH0gZWxzZSB7DQo+ ICsgICAgU3RhdHVzICAgICAgICAgID0gRUZJX1RJTUVPVVQ7DQo+ICsgICAgKlRyYW5zZmVyTGVu Z3RoID0gMDsNCj4gKyAgICBnQmxvY2tCdWxrSW5DbnQrKzsNCj4gKyAgfQ0KPiArDQo+ICsgIGlm IChnQmxvY2tCdWxrSW5DbnQgPiBCVUxLSU5fQ01EX1BPTExJTkdfQ05UKSB7DQo+ICsgICAgZ1N0 b3BCdWxrSW5DbnQgID0gTUlOSU1VTV9TVE9QQlVMS0lOX0NOVDsNCj4gKyAgICBnQmxvY2tCdWxr SW5DbnQgPSAwOw0KPiArICB9DQo+ICsNCj4gKyAgUHJpbnRSbmRpc01zZyAoUm5kaXNNc2cpOw0K PiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBQcmludHMg Uk5ESVMgSGVhZGVyIGFuZCBEYXRhDQo+ICsNCj4gKyAgQHBhcmFtW2luXSBSbmRpc01zZyAgICBB IHBvaW50ZXIgdG8gdGhlIFJFTU9URV9ORElTX01TR19IRUFERVINCj4gZGF0YS4NCj4gKw0KPiAr KiovDQo+ICtWT0lEDQo+ICtQcmludFJuZGlzTXNnICgNCj4gKyAgSU4gIFJFTU9URV9ORElTX01T R19IRUFERVIgICpSbmRpc01zZw0KPiArICApDQo+ICt7DQo+ICsgIFVJTlROICAgICAgICAgICAg ICAgICAgICBMZW5ndGg7DQo+ICsgIFJFTU9URV9ORElTX1FVRVJZX0NNUExUICAqUm5kaXNRdWVy eUNtcGx0Ow0KPiArDQo+ICsgIExlbmd0aCA9IDA7DQo+ICsNCj4gKyAgc3dpdGNoIChSbmRpc01z Zy0+TWVzc2FnZVR5cGUpIHsNCj4gKyAgICBjYXNlIFJORElTX1BBQ0tFVF9NU0c6DQo+ICsgICAg ICBERUJVRyAoKERFQlVHX0lORk8sICJSTkRJU19QQUNLRVRfTVNHOlxuIikpOw0KPiArICAgICAg TGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJU19QQUNLRVRfTVNHKSArIDB4MTQ7DQo+ICsgICAg ICBicmVhazsNCj4gKyAgICBjYXNlIFJORElTX0lOSVRJQUxJWkVfTVNHOg0KPiArICAgICAgREVC VUcgKChERUJVR19JTkZPLCAiUk5ESVNfSU5JVElBTElaRV9NU0c6XG4iKSk7DQo+ICsgICAgICBM ZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElTX0lOSVRJQUxJWkVfTVNHKTsNCj4gKyAgICAgIGJy ZWFrOw0KPiArICAgIGNhc2UgUk5ESVNfSU5JVElBTElaRV9DTVBMVDoNCj4gKyAgICAgIERFQlVH ICgoREVCVUdfSU5GTywgIlJORElTX0lOSVRJQUxJWkVfQ01QTFQ6XG4iKSk7DQo+ICsgICAgICBM ZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElTX0lOSVRJQUxJWkVfQ01QTFQpOw0KPiArICAgICAg YnJlYWs7DQo+ICsgICAgY2FzZSBSTkRJU19ITFRfTVNHOg0KPiArICAgICAgREVCVUcgKChERUJV R19JTkZPLCAiUk5ESVNfSExUX01TRzpcbiIpKTsNCj4gKyAgICAgIExlbmd0aCA9IHNpemVvZiAo UkVNT1RFX05ESVNfSEFMVF9NU0cpOw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBSTkRJ U19RVUVSWV9NU0c6DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJSTkRJU19RVUVSWV9N U0c6XG4iKSk7DQo+ICsgICAgICBMZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElTX1FVRVJZX01T Ryk7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBjYXNlIFJORElTX1FVRVJZX0NNUExUOg0KPiAr ICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiUk5ESVNfUVVFUllfQ01QTFQ6XG4iKSk7DQo+ICsg ICAgICBSbmRpc1F1ZXJ5Q21wbHQgPSAoUkVNT1RFX05ESVNfUVVFUllfQ01QTFQgKilSbmRpc01z ZzsNCj4gKyAgICAgIExlbmd0aCAgICAgICAgICA9IHNpemVvZiAoUkVNT1RFX05ESVNfUVVFUllf Q01QTFQpICsNCj4gUm5kaXNRdWVyeUNtcGx0LT5JbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aDsNCj4g KyAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgUk5ESVNfU0VUX01TRzoNCj4gKyAgICAgIERFQlVH ICgoREVCVUdfSU5GTywgIlJORElTX1NFVF9NU0c6XG4iKSk7DQo+ICsgICAgICBMZW5ndGggPSBz aXplb2YgKFJFTU9URV9ORElTX1NFVF9NU0cpOw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgY2Fz ZSBSTkRJU19TRVRfQ01QTFQ6DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJSTkRJU19T RVRfQ01QTFQ6XG4iKSk7DQo+ICsgICAgICBMZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElTX1NF VF9DTVBMVCk7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBjYXNlIFJORElTX1JFU0VUX01TRzoN Cj4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJORElTX1JFU0VUX01TRzpcbiIpKTsNCj4g KyAgICAgIExlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfUkVTRVRfTVNHKTsNCj4gKyAgICAg IGJyZWFrOw0KPiArICAgIGNhc2UgUk5ESVNfUkVTRVRfQ01QTFQ6DQo+ICsgICAgICBERUJVRyAo KERFQlVHX0lORk8sICJSTkRJU19SRVNFVF9DTVBMVDpcbiIpKTsNCj4gKyAgICAgIExlbmd0aCA9 IHNpemVvZiAoUkVNT1RFX05ESVNfUkVTRVRfQ01QTFQpOw0KPiArICAgICAgYnJlYWs7DQo+ICsg ICAgY2FzZSBSTkRJU19JTkRJQ0FURV9TVEFUVVNfTVNHOg0KPiArICAgICAgREVCVUcgKChERUJV R19JTkZPLCAiUk5ESVNfSU5ESUNBVEVfU1RBVFVTX01TRzpcbiIpKTsNCj4gKyAgICAgIExlbmd0 aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfSU5ESUNBVEVfU1RBVFVTX01TRyk7DQo+ICsgICAgICBi cmVhazsNCj4gKyAgICBjYXNlIFJORElTX0tFRVBBTElWRV9NU0c6DQo+ICsgICAgICBERUJVRyAo KERFQlVHX0lORk8sICJSTkRJU19LRUVQQUxJVkVfTVNHOlxuIikpOw0KPiArICAgICAgTGVuZ3Ro ID0gc2l6ZW9mIChSRU1PVEVfTkRJU19LRUVQQUxJVkVfTVNHKTsNCj4gKyAgICAgIGJyZWFrOw0K PiArICAgIGNhc2UgUk5ESVNfS0VFUEFMSVZFX0NNUExUOg0KPiArICAgICAgREVCVUcgKChERUJV R19JTkZPLCAiUk5ESVNfS0VFUEFMSVZFX0NNUExUOlxuIikpOw0KPiArICAgICAgTGVuZ3RoID0g c2l6ZW9mIChSRU1PVEVfTkRJU19LRUVQQUxJVkVfQ01QTFQpOw0KPiArICB9DQo+ICsNCj4gKyAg aWYgKExlbmd0aCkgew0KPiArICAgIFVJTlROICBJbmRleCA9IDA7DQo+ICsgICAgZm9yICggOyBM ZW5ndGg7IExlbmd0aCAtPSA0LCBJbmRleCsrKSB7DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0lO Rk8sICIlOFhcdCIsICooKFVJTlQzMiAqKVJuZGlzTXNnICsgSW5kZXgpKSk7DQo+ICsgICAgICBp ZiAoKChJbmRleCAlIDQpID09IDMpICYmIChJbmRleCAhPSAwKSkgew0KPiArICAgICAgICBERUJV RyAoKERFQlVHX0lORk8sICJcbiIpKTsNCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgaWYgKChM ZW5ndGggPCA4KSAmJiAoTGVuZ3RoID4gNCkpIHsNCj4gKyAgICAgICAgVUlOVDMyICBEYXRhMzI7 DQo+ICsgICAgICAgIEluZGV4Kys7DQo+ICsgICAgICAgIERhdGEzMiA9ICooKFVJTlQzMiAqKVJu ZGlzTXNnICsgSW5kZXgpOw0KPiArICAgICAgICBERUJVRyAoKERFQlVHX0lORk8sICIlOFhcdCIs IERhdGEzMikpOw0KPiArICAgICAgICBicmVhazsNCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsN Cj4gKyAgICBpZiAoSW5kZXggJSA0KSB7DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJc biIpKTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4gZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBr Zy9JbmNsdWRlL1Byb3RvY29sL1VzYkV0aGVybmV0UHJvdG9jb2wuaA0KPiBiL01kZU1vZHVsZVBr Zy9JbmNsdWRlL1Byb3RvY29sL1VzYkV0aGVybmV0UHJvdG9jb2wuaA0KPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi44MDA5NDVkNGIzDQo+IC0tLSAvZGV2L251bGwN Cj4gKysrIGIvTWRlTW9kdWxlUGtnL0luY2x1ZGUvUHJvdG9jb2wvVXNiRXRoZXJuZXRQcm90b2Nv bC5oDQo+IEBAIC0wLDAgKzEsODc4IEBADQo+ICsvKiogQGZpbGUNCj4gKyAgSGVhZGVyIGZpbGUg Y29udGFpbnMgY29kZSBmb3IgVVNCIEV0aGVybmV0IFByb3RvY29sDQo+ICsgIGRlZmluaXRpb25z DQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDIzLCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVy bmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzDQo+IHJlc2VydmVkLjxCUj4NCj4gKyAgU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gKyoqLw0KPiArDQo+ICsjaWZu ZGVmIFVTQl9FVEhFUk5FVF9QUk9UT0NPTF9IXw0KPiArI2RlZmluZSBVU0JfRVRIRVJORVRfUFJP VE9DT0xfSF8NCj4gKw0KPiArI2RlZmluZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0xfR1VJ RCBcDQo+ICsgICAgezB4OGQ4OTY5Y2MsIDB4ZmViMCwgMHg0MzAzLCB7MHhiMiwgMHgxYSwgMHgx ZiwgMHgxMSwgMHg2ZiwgMHgzOCwgMHg1NiwNCj4gMHg0M319DQo+ICsNCj4gK3R5cGVkZWYgc3Ry dWN0IF9FREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wNCj4gRURLSUlfVVNCX0VUSEVSTkVUX1BS T1RPQ09MOw0KPiArDQo+ICsjZGVmaW5lIFVTQl9DRENfQ0xBU1MgICAgICAgICAgMHgwMg0KPiAr I2RlZmluZSBVU0JfQ0RDX0FDTV9TVUJDTEFTUyAgIDB4MDINCj4gKyNkZWZpbmUgVVNCX0NEQ19F Q01fU1VCQ0xBU1MgICAweDA2DQo+ICsjZGVmaW5lIFVTQl9DRENfTkNNX1NVQkNMQVNTICAgMHgw RA0KPiArI2RlZmluZSBVU0JfQ0RDX0RBVEFfQ0xBU1MgICAgIDB4MEENCj4gKyNkZWZpbmUgVVNC X0NEQ19EQVRBX1NVQkNMQVNTICAweDAwDQo+ICsjZGVmaW5lIFVTQl9OT19DTEFTU19QUk9UT0NP TCAgMHgwMA0KPiArI2RlZmluZSBVU0JfTkNNX05UQl9QUk9UT0NPTCAgIDB4MDENCj4gKyNkZWZp bmUgVVNCX1ZFTkRPUl9QUk9UT0NPTCAgICAweEZGDQo+ICsNCj4gKy8vIFR5cGUgVmFsdWVzIGZv ciB0aGUgRGVzY3JpcHRvclR5cGUgRmllbGQNCj4gKyNkZWZpbmUgQ1NfSU5URVJGQUNFICAweDI0 DQo+ICsjZGVmaW5lIENTX0VORFBPSU5UICAgMHgyNQ0KPiArDQo+ICsvLyBEZXNjcmlwdG9yIFN1 YlR5cGUgaW4gRnVuY3Rpb25hbCBEZXNjcmlwdG9ycw0KPiArI2RlZmluZSBIRUFERVJfRlVOX0RF U0NSSVBUT1IgICAgMHgwMA0KPiArI2RlZmluZSBVTklPTl9GVU5fREVTQ1JJUFRPUiAgICAgMHgw Ng0KPiArI2RlZmluZSBFVEhFUk5FVF9GVU5fREVTQ1JJUFRPUiAgMHgwRg0KPiArDQo+ICsjZGVm aW5lIE1BWF9MQU5fSU5URVJGQUNFICAweDEwDQo+ICsNCj4gKy8vIFRhYmxlIDIwOiBDbGFzcy1T cGVjaWZpYyBOb3RpZmljYXRpb24gQ29kZXMNCj4gKyNkZWZpbmUgVVNCX0NEQ19ORVRXT1JLX0NP Tk5FQ1RJT04gIDB4MDANCj4gKw0KPiArLy8gNi4zLjEgTmV0d29ya0Nvbm5lY3Rpb24NCj4gKyNk ZWZpbmUgTkVUV09SS19DT05ORUNURUQgICAweDAxDQo+ICsjZGVmaW5lIE5FVFdPUktfRElTQ09O TkVDVCAgMHgwMA0KPiArDQo+ICsvLyBVU0IgSGVhZGVyIGZ1bmN0aW9uYWwgRGVzY3JpcHRvcg0K PiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UOCAgICAgRnVuY3Rpb25MZW5ndGg7DQo+ICsg IFVJTlQ4ICAgICBEZXNjcmlwdG9yVHlwZTsNCj4gKyAgVUlOVDggICAgIERlc2NyaXB0b3JTdWJ0 eXBlOw0KPiArICBVSU5UMTYgICAgQmNkQ2RjOw0KPiArfSBVU0JfSEVBREVSX0ZVTl9ERVNDUklQ VE9SOw0KPiArDQo+ICsvLyBVU0IgVW5pb24gRnVuY3Rpb25hbCBEZXNjcmlwdG9yDQo+ICt0eXBl ZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQ4ICAgIEZ1bmN0aW9uTGVuZ3RoOw0KPiArICBVSU5UOCAg ICBEZXNjcmlwdG9yVHlwZTsNCj4gKyAgVUlOVDggICAgRGVzY3JpcHRvclN1YnR5cGU7DQo+ICsg IFVJTlQ4ICAgIE1hc3RlckludGVyZmFjZTsNCj4gKyAgVUlOVDggICAgU2xhdmVJbnRlcmZhY2U7 DQo+ICt9IFVTQl9VTklPTl9GVU5fREVTQ1JJUFRPUjsNCj4gKw0KPiArLy8gVVNCIEV0aGVybmV0 IEZ1bmN0aW9uYWwgRGVzY3JpcHRvcg0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UOCAg ICAgRnVuY3Rpb25MZW5ndGg7DQo+ICsgIFVJTlQ4ICAgICBEZXNjcmlwdG9yVHlwZTsNCj4gKyAg VUlOVDggICAgIERlc2NyaXB0b3JTdWJ0eXBlOw0KPiArICBVSU5UOCAgICAgTWFjQWRkcmVzczsN Cj4gKyAgVUlOVDMyICAgIEV0aGVybmV0U3RhdGlzdGljczsNCj4gKyAgVUlOVDE2ICAgIE1heFNl Z21lbnRTaXplOw0KPiArICBVSU5UMTYgICAgTnVtYmVyTWNGaWx0ZXJzOw0KPiArICBVSU5UOCAg ICAgTnVtYmVyUG93ZXJGaWx0ZXJzOw0KPiArfSBVU0JfRVRIRVJORVRfRlVOX0RFU0NSSVBUT1I7 DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIFVzQml0UmF0ZTsNCj4g KyAgVUlOVDMyICAgIERzQml0UmF0ZTsNCj4gK30gVVNCX0NPTk5FQ1RfU1BFRURfQ0hBTkdFOw0K PiArDQo+ICsvLyBSZXF1ZXN0IFR5cGUgQ29kZXMgZm9yIFVTQiBFdGhlcm5ldA0KPiArI2RlZmlu ZSBVU0JfRVRIRVJORVRfR0VUX1JFUV9UWVBFICAweEExDQo+ICsjZGVmaW5lIFVTQl9FVEhFUk5F VF9TRVRfUkVRX1RZUEUgIDB4MjENCj4gKw0KPiArLy8gQ2xhc3MtU3BlY2lmaWMgUmVxdWVzdCBD b2RlcyBmb3IgRXRoZXJuZXQgc3ViY2xhc3MNCj4gKy8vIFVTQiBFQ00gMS4yIHNwZWNpZmljYXRp b24sIFNlY3Rpb24gNi4yDQo+ICsjZGVmaW5lIFNFVF9FVEhfTVVMVElDQVNUX0ZJTFRFUlNfUkVR ICAgICAgICAgICAgICAgIDB4NDANCj4gKyNkZWZpbmUgU0VUX0VUSF9QT1dFUl9NQU5BR0VNRU5U X1BBVFRFUk5fRklMVEVSX1JFUSAgMHg0MQ0KPiArI2RlZmluZSBHRVRfRVRIX1BPV0VSX01BTkFH RU1FTlRfUEFUVEVSTl9GSUxURVJfUkVRICAweDQyDQo+ICsjZGVmaW5lIFNFVF9FVEhfUEFDS0VU X0ZJTFRFUl9SRVEgICAgICAgICAgICAgICAgICAgIDB4NDMNCj4gKyNkZWZpbmUgR0VUX0VUSF9T VEFUSVNUSUNfUkVRICAgICAgICAgICAgICAgICAgICAgICAgMHg0NA0KPiArDQo+ICsvLyBVU0Ig RUNNIGNvbW1hbmQgcmVxdWVzdCBsZW5ndGgNCj4gKyNkZWZpbmUgVVNCX0VUSF9QT1dFUl9GSUxU RVJfTEVOR1RIICAgMiAvLyBTZWN0aW9uIDYuMi4zDQo+ICsjZGVmaW5lIFVTQl9FVEhfUEFDS0VU X0ZJTFRFUl9MRU5HVEggIDAgLy8gU2VjdGlvbiA2LjIuNA0KPiArI2RlZmluZSBVU0JfRVRIX1NU QVRJU1RJQyAgICAgICAgICAgICA0IC8vIFNlY3Rpb24gNi4yLjUNCj4gKw0KPiArLy8gVVNCIEV0 aGVybmV0IFBhY2tldCBGaWx0ZXIgQml0bWFwDQo+ICsvLyBVU0IgRUNNIDEuMiBzcGVjaWZpY2F0 aW9uLCBTZWN0aW9uIDYuMi40DQo+ICsjZGVmaW5lIFVTQl9FVEhfUEFDS0VUX1RZUEVfUFJPTUlT Q1VPVVMgICAgQklUMA0KPiArI2RlZmluZSBVU0JfRVRIX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNB U1QgIEJJVDENCj4gKyNkZWZpbmUgVVNCX0VUSF9QQUNLRVRfVFlQRV9ESVJFQ1RFRCAgICAgICBC SVQyDQo+ICsjZGVmaW5lIFVTQl9FVEhfUEFDS0VUX1RZUEVfQlJPQURDQVNUICAgICAgQklUMw0K PiArI2RlZmluZSBVU0JfRVRIX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVCAgICAgIEJJVDQNCj4gKw0K PiArLy8gVVNCIEV0aGVybmV0IFN0YXRpc3RpY3MgRmVhdHVyZSBTZWxlY3RvciBDb2Rlcw0KPiAr Ly8gVVNCIEVDTSAxLjIgc3BlY2lmaWNhdGlvbiwgU2VjdGlvbiA2LjIuNQ0KPiArI2RlZmluZSBV U0JfRVRIX1hNSVRfT0sgICAgICAgICAgICAgICAgIDB4MDENCj4gKyNkZWZpbmUgVVNCX0VUSF9S Q1ZfT0sgICAgICAgICAgICAgICAgICAweDAyDQo+ICsjZGVmaW5lIFVTQl9FVEhfWE1JVF9FUlJP UiAgICAgICAgICAgICAgMHgwMw0KPiArI2RlZmluZSBVU0JfRVRIX1JDVl9FUlJPUiAgICAgICAg ICAgICAgIDB4MDQNCj4gKyNkZWZpbmUgVVNCX0VUSF9SQ1ZfTk9fQlVGRkVSICAgICAgICAgICAw eDA1DQo+ICsjZGVmaW5lIFVTQl9FVEhfRElSRUNURURfQllURVNfWE1JVCAgICAgMHgwNg0KPiAr I2RlZmluZSBVU0JfRVRIX0RJUkVDVEVEX0ZSQU1FU19YTUlUICAgIDB4MDcNCj4gKyNkZWZpbmUg VVNCX0VUSF9NVUxUSUNBU1RfQllURVNfWE1JVCAgICAweDA4DQo+ICsjZGVmaW5lIFVTQl9FVEhf TVVMVElDQVNUX0ZSQU1FU19YTUlUICAgMHgwOQ0KPiArI2RlZmluZSBVU0JfRVRIX0JST0FEQ0FT VF9CWVRFU19YTUlUICAgIDB4MEENCj4gKyNkZWZpbmUgVVNCX0VUSF9CUk9BRENBU1RfRlJBTUVT X1hNSVQgICAweDBCDQo+ICsjZGVmaW5lIFVTQl9FVEhfRElSRUNURURfQllURVNfUkNWICAgICAg MHgwQw0KPiArI2RlZmluZSBVU0JfRVRIX0RJUkVDVEVEX0ZSQU1FU19SQ1YgICAgIDB4MEQNCj4g KyNkZWZpbmUgVVNCX0VUSF9NVUxUSUNBU1RfQllURVNfUkNWICAgICAweDBFDQo+ICsjZGVmaW5l IFVTQl9FVEhfTVVMVElDQVNUX0ZSQU1FU19SQ1YgICAgMHgwRg0KPiArI2RlZmluZSBVU0JfRVRI X0JST0FEQ0FTVF9CWVRFU19SQ1YgICAgIDB4MTANCj4gKyNkZWZpbmUgVVNCX0VUSF9CUk9BRENB U1RfRlJBTUVTX1JDViAgICAweDExDQo+ICsjZGVmaW5lIFVTQl9FVEhfUkNWX0NSQ19FUlJPUiAg ICAgICAgICAgMHgxMg0KPiArI2RlZmluZSBVU0JfRVRIX1RSQU5TTUlUX1FVRVVFX0xFTkdUSCAg IDB4MTMNCj4gKyNkZWZpbmUgVVNCX0VUSF9SQ1ZfRVJST1JfQUxJR05NRU5UICAgICAweDE0DQo+ ICsjZGVmaW5lIFVTQl9FVEhfWE1JVF9PTkVfQ09MTElTSU9OICAgICAgMHgxNQ0KPiArI2RlZmlu ZSBVU0JfRVRIX1hNSVRfTU9SRV9DT0xMSVNJT05TICAgIDB4MTYNCj4gKyNkZWZpbmUgVVNCX0VU SF9YTUlUX0RFRkVSUkVEICAgICAgICAgICAweDE3DQo+ICsjZGVmaW5lIFVTQl9FVEhfWE1JVF9N QVhfQ09MTElTSU9OUyAgICAgMHgxOA0KPiArI2RlZmluZSBVU0JfRVRIX1JDVl9PVkVSUlVOICAg ICAgICAgICAgIDB4MTkNCj4gKyNkZWZpbmUgVVNCX0VUSF9YTUlUX1VOREVSUlVOICAgICAgICAg ICAweDFBDQo+ICsjZGVmaW5lIFVTQl9FVEhfWE1JVF9IRUFSVEJFQVRfRkFJTFVSRSAgMHgxQg0K PiArI2RlZmluZSBVU0JfRVRIX1hNSVRfVElNRVNfQ1JTX0xPU1QgICAgIDB4MUMNCj4gKyNkZWZp bmUgVVNCX0VUSF9YTUlUX0xBVEVfQ09MTElTSU9OUyAgICAweDFEDQo+ICsNCj4gKy8vIE5JQyBJ bmZvcm1hdGlvbg0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgICAgICAgICAg ICAgICAgICAgICAgU2lnbmF0dXJlOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wg ICAgKlVzYkV0aDsNCj4gKyAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICAgIEludGVycnVw T3BGbGFnOw0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgTWFwcGVkQWRkcjsN Cj4gKyAgUFhFX01BQ19BRERSICAgICAgICAgICAgICAgICAgIE1jYXN0TGlzdFtNQVhfTUNBU1Rf QUREUkVTU19DTlRdOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgTWNhc3RD b3VudDsNCj4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgIE1lZGlhSGVhZGVyW01B WF9YTUlUX0JVRkZFUlNdOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgVHhC dWZmZXJDb3VudDsNCj4gKyAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlOw0K PiArICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgQ2FuVHJhbnNtaXQ7DQo+ICsgIFVJ TlQxNiAgICAgICAgICAgICAgICAgICAgICAgICBSZWNlaXZlU3RhdHVzOw0KPiArICBVSU5UOCAg ICAgICAgICAgICAgICAgICAgICAgICAgUnhGaWx0ZXI7DQo+ICsgIFVJTlQzMiAgICAgICAgICAg ICAgICAgICAgICAgICBSeEZyYW1lOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAg ICAgVHhGcmFtZTsNCj4gKyAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHdvcmtD b25uZWN0Ow0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FibGVEZXRlY3Q7 DQo+ICsgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgICBNYXhTZWdtZW50U2l6ZTsNCj4g KyAgRUZJX01BQ19BRERSRVNTICAgICAgICAgICAgICAgIE1hY0FkZHI7DQo+ICsgIFBYRV9DUEJf U1RBUlRfMzEgICAgICAgICAgICAgICBQeGVTdGFydDsNCj4gKyAgUFhFX0NQQl9JTklUSUFMSVpF ICAgICAgICAgICAgIFB4ZUluaXQ7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAg ICBQZXJtTm9kZUFkZHJlc3NbUFhFX01BQ19MRU5HVEhdOw0KPiArICBVSU5UOCAgICAgICAgICAg ICAgICAgICAgICAgICAgQ3VycmVudE5vZGVBZGRyZXNzW1BYRV9NQUNfTEVOR1RIXTsNCj4gKyAg VUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgIEJyb2FkY2FzdE5vZGVBZGRyZXNzW1BYRV9N QUNfTEVOR1RIXTsNCj4gKyAgRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCAgICAgICAgIFJlcXVlc3Q7 DQo+ICsgIEVGSV9FVkVOVCAgICAgICAgICAgICAgICAgICAgICBSYXRlTGltaXRlcjsNCj4gKyAg VUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIFJhdGVMaW1pdGluZ0NyZWRpdDsNCj4gKyAg VUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIFJhdGVMaW1pdGluZ0NyZWRpdENvdW50Ow0K PiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgUmF0ZUxpbWl0aW5nUG9sbFRpbWVy Ow0KPiArICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgUmF0ZUxpbWl0aW5nRW5hYmxl Ow0KPiArfSBOSUNfREFUQTsNCj4gKw0KPiArI2RlZmluZSBOSUNfREFUQV9TSUdOQVRVUkUgIFNJ R05BVFVSRV8zMignbicsICdpJywgJ2MnLCAnZCcpDQo+ICsjZGVmaW5lIE5JQ19EQVRBX0ZST01f RURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MKGEpICBDUiAoYSwNCj4gTklDX0RBVEEsIFVzYkV0 aCwgTklDX0RBVEFfU0lHTkFUVVJFKQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlz IHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBvcGVyYXRpb25hbCBzdGF0ZSBvZiB0aGUgVU5ESS4NCj4g Kw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlw dG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29y ayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJl dHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0 aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVl c3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVl Lg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiAr KiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRI RVJORVRfVU5ESV9HRVRfU1RBVEUpKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAg SU4gIE5JQ19EQVRBICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29t bWFuZCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgVU5ESSBvcGVyYXRpb25hbCBzdGF0ZSBmcm9tIHN0 b3BwZWQNCj4gdG8gc3RhcnRlZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRl ciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMg IEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiAr DQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVk IHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1l b3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVW SUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4N Cj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJz IGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAg ICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9TVEFSVCkoDQo+ICsgIElOICBQWEVf Q0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0KPiArICApOw0KPiArDQo+ ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gY2hhbmdlIHRoZSBVTkRJIG9wZXJh dGlvbmFsIHN0YXRlIGZyb20gc3RhcnRlZA0KPiB0byBzdG9wcGVkLg0KPiArDQo+ICsgIEBwYXJh bVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBj b250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg VGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1F T1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0K PiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVl IHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBP bmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsgIEByZXR2 YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVk ZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1NU T1ApKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAgICpO aWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIHJl dHJpZXZlIGluaXRpYWxpemF0aW9uIGluZm9ybWF0aW9uIHRoYXQgaXMNCj4gKyAgbmVlZGVkIGJ5 IGRyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucyB0byBpbml0aWFsaXplZCBVTkRJLg0KPiArDQo+ICsg IEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxv Y2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVy ZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVG SV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1 ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWls ZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFN RVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsg IEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4g K3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9V TkRJX0dFVF9JTklUX0lORk8pKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4g IE5JQ19EQVRBICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFu ZCBpcyB1c2VkIHRvIHJldHJpZXZlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYWJvdXQNCj4g KyAgdGhlIE5JQyBiZWluZyBjb250cm9sbGVkIGJ5IHRoZSBVTkRJLg0KPiArDQo+ICsgIEBwYXJh bVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBj b250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg VGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1F T1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0K PiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVl IHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBP bmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsgIEByZXR2 YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVk ZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX0dF VF9DT05GSUdfSU5GTykoDQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklD X0RBVEEgICAgKk5pYw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIHJl c2V0cyB0aGUgbmV0d29yayBhZGFwdGVyIGFuZCBpbml0aWFsaXplcyBVTkRJIHVzaW5nDQo+ICsg IHRoZSBwYXJhbWV0ZXJzIHN1cHBsaWVkIGluIHRoZSBDUEIuDQo+ICsNCj4gKyAgQHBhcmFtW2lu XSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAg QHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRy b2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUg cmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQg ICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsg IEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8g YSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBv ZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4gKyAgQHJldHZhbCBF RklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0K PiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElfSU5JVElB TElaRSkoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmlj DQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgcmVzZXRzIHRoZSBuZXR3 b3JrIGFkYXB0ZXIgYW5kIHJlaW5pdGlhbGl6ZXMgdGhlIFVOREkNCj4gKyAgd2l0aCB0aGUgc2Ft ZSBwYXJhbWV0ZXJzIHByb3ZpZGVkIGluIHRoZSBJbml0aWFsaXplIGNvbW1hbmQuDQo+ICsNCj4g KyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBi bG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50 ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwg RUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJl cXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZh aWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFS QU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4g KyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0K PiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVU X1VORElfUkVTRVQpKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19E QVRBICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoZSBTaHV0ZG93biBjb21t YW5kIHJlc2V0cyB0aGUgbmV0d29yayBhZGFwdGVyIGFuZCBsZWF2ZXMgaXQgaW4gYQ0KPiArICBz YWZlIHN0YXRlIGZvciBhbm90aGVyIGRyaXZlciB0byBpbml0aWFsaXplLg0KPiArDQo+ICsgIEBw YXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2su DQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFj ZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9U SU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0 Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQg ZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsgIEBy ZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5 cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJ X1NIVVRET1dOKSgNCj4gKyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQo+ICsgIElOICBOSUNfREFU QSAgICAqTmljDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGUgSW50ZXJydXB0IEVuYWJs ZXMgY29tbWFuZCBjYW4gYmUgdXNlZCB0byByZWFkIGFuZC9vciBjaGFuZ2UNCj4gKyAgdGhlIGN1 cnJlbnQgZXh0ZXJuYWwgaW50ZXJydXB0IGVuYWJsZSBzZXR0aW5ncy4NCj4gKw0KPiArICBAcGFy YW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0K PiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2Ug Y29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAg IFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElN RU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4N Cj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1 ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIg T25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVlLg0KPiArICBAcmV0 dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBl ZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9J TlRFUlJVUFRfRU5BQkxFKSgNCj4gKyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQo+ICsgIElOICBO SUNfREFUQSAgICAqTmljDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQg aXMgdXNlZCB0byByZWFkIGFuZCBjaGFuZ2UgcmVjZWl2ZSBmaWx0ZXJzIGFuZCwNCj4gKyAgaWYg c3VwcG9ydGVkLCByZWFkIGFuZCBjaGFuZ2UgdGhlIG11bHRpY2FzdCBNQUMgYWRkcmVzcyBmaWx0 ZXIgbGlzdC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29t bWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0 byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxs eS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVk IGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAg ICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZh bCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZh bGlkDQo+IHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3Vw cG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpF REtJSV9VU0JfRVRIRVJORVRfVU5ESV9SRUNFSVZFX0ZJTFRFUikoDQo+ICsgIElOICBQWEVfQ0RC ICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0KPiArICApOw0KPiArDQo+ICsv KioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gZ2V0IGN1cnJlbnQgc3RhdGlvbiBhbmQg YnJvYWRjYXN0IE1BQyBhZGRyZXNzZXMNCj4gKyAgYW5kLCBpZiBzdXBwb3J0ZWQsIHRvIGNoYW5n ZSB0aGUgY3VycmVudCBzdGF0aW9uIE1BQyBhZGRyZXNzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0g IENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBw YXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9s bGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJl cXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAg ICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBA cmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEg ZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2Yg dGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJ X1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4g K0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1NUQVRJT05f QUREUkVTUykoDQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEg ICAgKk5pYw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQg dG8gcmVhZCBhbmQgY2xlYXIgdGhlIE5JQyB0cmFmZmljIHN0YXRpc3RpY3MuDQo+ICsNCj4gKyAg QHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9j ay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJm YWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJ X1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVl c3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxl ZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1F VEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4gKyAg QHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiAr dHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VO RElfU1RBVElTVElDUykoDQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklD X0RBVEEgICAgKk5pYw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVHJhbnNsYXRlIGEgbXVs dGljYXN0IElQdjQgb3IgSVB2NiBhZGRyZXNzIHRvIGEgbXVsdGljYXN0IE1BQyBhZGRyZXNzLg0K PiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2Ny aXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3 b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBA cmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5n IHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVx dWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZB TElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFs dWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9F VEhFUk5FVF9VTkRJX01DQVNUX0lQVE9NQUMpKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwN Cj4gKyAgSU4gIE5JQ19EQVRBICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRo aXMgY29tbWFuZCBpcyB1c2VkIHRvIHJlYWQgYW5kIHdyaXRlIChpZiBzdXBwb3J0ZWQgYnkgTklD IEgvVykNCj4gKyAgbm9udm9sYXRpbGUgc3RvcmFnZSBvbiB0aGUgTklDLg0KPiArDQo+ICsgIEBw YXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2su DQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFj ZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9U SU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0 Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQg ZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsgIEBy ZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5 cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJ X05WX0RBVEEpKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRB ICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCByZXR1cm5z IHRoZSBjdXJyZW50IGludGVycnVwdCBzdGF0dXMgYW5kL29yIHRoZQ0KPiArICB0cmFuc21pdHRl ZCBidWZmZXIgYWRkcmVzc2VzIGFuZCB0aGUgY3VycmVudCBtZWRpYSBzdGF0dXMuDQo+ICsNCj4g KyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBi bG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50 ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwg RUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJl cXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZh aWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFS QU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4g KyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0K PiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVU X1VORElfR0VUX1NUQVRVUykoDQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAg TklDX0RBVEEgICAgKk5pYw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5k IGlzIHVzZWQgdG8gZmlsbCB0aGUgbWVkaWEgaGVhZGVyKHMpIGluIHRyYW5zbWl0IHBhY2tldChz KS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBk ZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUg TmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4g KyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1 dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhl IHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklf SU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+ IHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVk Lg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9V U0JfRVRIRVJORVRfVU5ESV9GSUxMX0hFQURFUikoDQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2Ri LA0KPiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAg VGhlIFRyYW5zbWl0IGNvbW1hbmQgaXMgdXNlZCB0byBwbGFjZSBhIHBhY2tldCBpbnRvIHRoZSB0 cmFuc21pdCBxdWV1ZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0 aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9p bnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nl c3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9j Y3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VS Uk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAg QHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBh biBpbnZhbGlkDQo+IHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBO b3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJ QVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9UUkFOU01JVCkoDQo+ICsgIElOICBQWEVfQ0RC ICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0KPiArICApOw0KPiArDQo+ICsv KioNCj4gKyAgV2hlbiB0aGUgbmV0d29yayBhZGFwdGVyIGhhcyByZWNlaXZlZCBhIGZyYW1lLCB0 aGlzIGNvbW1hbmQgaXMgdXNlZA0KPiArICB0byBjb3B5IHRoZSBmcmFtZSBpbnRvIGRyaXZlci9h cHBsaWNhdGlvbiBzdG9yYWdlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVy IHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAg QSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsN Cj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQg c3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVv dXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJ Q0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0K PiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMg aGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAg ICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4g KyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1JFQ0VJVkUpKA0KPiArICBJTiAgUFhF X0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAgICpOaWMNCj4gKyAgKTsNCj4gKw0K PiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCByZXNldHMgdGhlIG5ldHdvcmsgYWRhcHRlciBhbmQg aW5pdGlhbGl6ZXMgVU5ESSB1c2luZw0KPiArICB0aGUgcGFyYW1ldGVycyBzdXBwbGllZCBpbiB0 aGUgQ1BCLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICBDZGIgIEEgcG9pbnRlciB0byB0aGUg Y29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW4sIG91dF0gTmljICBBIHBv aW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNj ZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBv Y2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9F UlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsg IEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMg YW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAg Tm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVG SUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX0lOSVRJQUxJWkUpKA0KPiArICBJTiAgICAgIFBYRV9D REIgICAqQ2RiLA0KPiArICBJTiBPVVQgIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4g Ky8qKg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byByZWFkIGFuZCBjbGVhciB0aGUgTklD IHRyYWZmaWMgc3RhdGlzdGljcy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBOaWMgICAgIEEgcG9p bnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArICBAcGFy YW1baW5dICBEYkFkZHIgIERhdGEgQmxvY2sgQWRkcmVzcy4NCj4gKyAgQHBhcmFtW2luXSAgRGJT aXplICBEYXRhIEJsb2NrIFNpemUuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVG SV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1 ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWls ZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFN RVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsg IEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4g K3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9T VEFUSVNUSUNTKSgNCj4gKyAgSU4gIE5JQ19EQVRBICAgICpOaWMsDQo+ICsgIElOICBVSU5UNjQg ICAgICBEYkFkZHIsDQo+ICsgIElOICBVSU5UMTYgICAgICBEYlNpemUNCj4gKyAgKTsNCj4gKw0K PiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBtYW5hZ2UgYSBVU0IgZGV2aWNl IHdpdGggdGhlIGJ1bGsgdHJhbnNmZXIgcGlwZS4NCj4gVGhlIGVuZHBvaW50IGlzIEJ1bGsgaW4u DQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIENkYiAgICAgICAgICAgQSBwb2ludGVyIHRvIHRo ZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gICAgICBUaGlzICAg ICAgICAgIEEgcG9pbnRlciB0byB0aGUNCj4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGlu c3RhbmNlLg0KPiArICBAcGFyYW1baW4sIG91dF0gUGFja2V0ICAgICAgICBBIHBvaW50ZXIgdG8g dGhlIGJ1ZmZlciBvZiBkYXRhIHRoYXQgd2lsbCBiZQ0KPiB0cmFuc21pdHRlZCB0byBVU0INCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIG9yIHJlY2VpdmVkIGZyb20g VVNCIGRldmljZS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIFBhY2tldExlbmd0aCAgQSBwb2ludGVy IHRvIHRoZSBQYWNrZXRMZW5ndGguDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgVGhlIGJ1bGsgdHJhbnNmZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5DQo+IGV4ZWN1dGVk Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgdHJhbnNmZXIgZmFpbGVk LiBUaGUgdHJhbnNmZXIgc3RhdHVzIGlzDQo+IHJldHVybmVkIGluIHN0YXR1cy4NCj4gKyAgQHJl dHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9yIG1vcmUgcGFyYW1ldGVycyBhcmUgaW52 YWxpZC4NCj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgVGhlIHJlcXVlc3QgY291 bGQgbm90IGJlIHN1Ym1pdHRlZA0KPiBkdWUgdG8gYSBsYWNrIG9mIHJlc291cmNlcy4NCj4gKyAg QHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgVGhlIGNvbnRyb2wgdHJhbnNmZXIgZmFpbHMg ZHVlIHRvIHRpbWVvdXQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhF RklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9SRUNFSVZFKSgNCj4gKyAgSU4gICAgIFBYRV9DREIg ICAgICAgICAgICAgICAqQ2RiLA0KPiArICBJTiAgICAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RP Q09MICpUaGlzLA0KPiArICBJTiBPVVQgVk9JRCAgICAgICAgICAgICAgICAgICpQYWNrZXQsDQo+ ICsgIElOIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgKlBhY2tldExlbmd0aA0KPiArICApOw0K PiArDQo+ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIG1hbmFnZSBhIFVTQiBk ZXZpY2Ugd2l0aCB0aGUgYnVsayB0cmFuc2ZlciBwaXBlLg0KPiBUaGUgZW5kcG9pbnQgaXMgQnVs ayBvdXQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIENkYiAgICAgICAgICAgQSBwb2ludGVy IHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gICAgICBU aGlzICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUNCj4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RP Q09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW4sIG91dF0gUGFja2V0ICAgICAgICBBIHBvaW50 ZXIgdG8gdGhlIGJ1ZmZlciBvZiBkYXRhIHRoYXQgd2lsbCBiZQ0KPiB0cmFuc21pdHRlZCB0byBV U0INCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIG9yIHJlY2VpdmVk IGZyb20gVVNCIGRldmljZS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIFBhY2tldExlbmd0aCAgQSBw b2ludGVyIHRvIHRoZSBQYWNrZXRMZW5ndGguDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICAgVGhlIGJ1bGsgdHJhbnNmZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5DQo+IGV4 ZWN1dGVkLg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgdHJhbnNmZXIg ZmFpbGVkLiBUaGUgdHJhbnNmZXIgc3RhdHVzIGlzDQo+IHJldHVybmVkIGluIHN0YXR1cy4NCj4g KyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9yIG1vcmUgcGFyYW1ldGVycyBh cmUgaW52YWxpZC4NCj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgVGhlIHJlcXVl c3QgY291bGQgbm90IGJlIHN1Ym1pdHRlZA0KPiBkdWUgdG8gYSBsYWNrIG9mIHJlc291cmNlcy4N Cj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgVGhlIGNvbnRyb2wgdHJhbnNmZXIg ZmFpbHMgZHVlIHRvIHRpbWVvdXQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMN Cj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9UUkFOU01JVCkoDQo+ICsgIElOICAgICBQ WEVfQ0RCICAgICAgICAgICAgICAgKkNkYiwNCj4gKyAgSU4gICAgIEVES0lJX1VTQl9FVEhFUk5F VF9QUk9UT0NPTCAqVGhpcywNCj4gKyAgSU4gT1VUIFZPSUQgICAgICAgICAgICAgICAgICAqUGFj a2V0LA0KPiArICBJTiBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICpQYWNrZXRMZW5ndGgNCj4g KyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBtYW5hZ2Ug YSBVU0IgZGV2aWNlIHdpdGggYW4gaW50ZXJydXB0IHRyYW5zZmVyDQo+IHBpcGUuDQo+ICsNCj4g KyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBFREtJ SV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIElzTmV3 VHJhbnNmZXIgICAgIElmIFRSVUUsIGEgbmV3IHRyYW5zZmVyIHdpbGwgYmUgc3VibWl0dGVkIHRv DQo+IFVTQiBjb250cm9sbGVyLiBJZg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGQUxTRSwgdGhlIGludGVycnVwdCB0cmFuc2ZlciBpcyBkZWxldGVkIGZyb20gdGhlIGRldmlj ZSdzDQo+IGludGVycnVwdA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFu c2ZlciBxdWV1ZS4NCj4gKyAgQHBhcmFtW2luXSAgUG9sbGluZ0ludGVydmFsICAgSW5kaWNhdGVz IHRoZSBwZXJpb2RpYyByYXRlLCBpbiBtaWxsaXNlY29uZHMsDQo+IHRoYXQgdGhlIHRyYW5zZmVy IGlzIHRvIGJlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVkLlRo aXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIHdoZW4gSXNOZXdUcmFuc2Zlcg0KPiBpcyBUUlVFLiBU aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbXVzdCBiZSBiZXR3 ZWVuIDEgdG8gMjU1LCBvdGhlcndpc2UNCj4gRUZJX0lOVkFMSURfUEFSQU1FVEVSIGlzIHJldHVy bmVkLg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdW5pdHMgYXJlIGlu IG1pbGxpc2Vjb25kcy4NCj4gKyAgQHBhcmFtW2luXSAgUmVxdWVzdCAgICAgICAgICAgQSBwb2lu dGVyIHRvIHRoZSBFRklfVVNCX0RFVklDRV9SRVFVRVNUDQo+IGRhdGEuDQo+ICsNCj4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIGFzeW5jaHJvbm91cyBVU0IgdHJhbnNmZXIg cmVxdWVzdA0KPiB0cmFuc2ZlciBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuDQo+ICsg IEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSBhc3luY2hyb25vdXMgVVNCIHRyYW5z ZmVyIHJlcXVlc3QNCj4gZmFpbGVkLg0KPiArDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9T VEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9JTlRFUlJVUFQpKA0KPiArICBJ TiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICAqVGhpcywNCj4gKyAgSU4gQk9PTEVBTiAg ICAgICAgICAgICAgICAgSXNOZXdUcmFuc2ZlciwNCj4gKyAgSU4gVUlOVE4gICAgICAgICAgICAg ICAgICAgUG9sbGluZ0ludGVydmFsLA0KPiArICBJTiBFRklfVVNCX0RFVklDRV9SRVFVRVNUICAq UmVxdWVzdA0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVzIHRoZSBVU0IgRXRo ZXJuZXQgTWFjIEFkZHJlc3MuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICBB IHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTA0KPiBpbnN0YW5jZS4N Cj4gKyAgQHBhcmFtW291dF0gTWFjQWRkcmVzcyAgICBBIHBvaW50ZXIgdG8gdGhlIGNhbGxlciBh bGxvY2F0ZWQgVVNCIEV0aGVybmV0DQo+IE1hYyBBZGRyZXNzLg0KPiArDQo+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBVU0IgSGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3JpcHRv ciB3YXMNCj4gcmV0cmlldmVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgVXNiSGVhZGVyRnVuRGVzY3JpcHRvciBpcyBOVUxMLg0KPiArICBAcmV0dmFs IEVGSV9OT1RfRk9VTkQgICAgICAgICBUaGUgVVNCIEhlYWRlciBGdW5jdGlvbmFsIGRlc2NyaXB0 b3Igd2FzDQo+IG5vdCBmb3VuZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0K PiArKEVGSUFQSSAqRURLSUlfVVNCX0dFVF9FVEhfTUFDX0FERFJFU1MpKA0KPiArICBJTiAgRURL SUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICpUaGlzLA0KPiArICBPVVQgRUZJX01BQ19BRERSRVNT ICAgICAgICpNYWNBZGRyZXNzDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBSZXRyaWV2ZXMg dGhlIFVTQiBFdGhlcm5ldCBCdWxrIHRyYW5zZmVyIGRhdGEgc2l6ZS4NCj4gKw0KPiArICBAcGFy YW1baW5dICBUaGlzICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVU X1BST1RPQ09MDQo+IGluc3RhbmNlLg0KPiArICBAcGFyYW1bb3V0XSBCdWxrU2l6ZSAgICAgIEEg cG9pbnRlciB0byB0aGUgQnVsayB0cmFuc2ZlciBkYXRhIHNpemUuDQo+ICsNCj4gKyAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIFVTQiBIZWFkZXIgRnVuY3Rpb25hbCBkZXNjcmlw dG9yIHdhcw0KPiByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZB TElEX1BBUkFNRVRFUiBVc2JIZWFkZXJGdW5EZXNjcmlwdG9yIGlzIE5VTEwuDQo+ICsgIEByZXR2 YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFRoZSBVU0IgSGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3Jp cHRvciB3YXMNCj4gbm90IGZvdW5kLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVT DQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIX01BWF9CVUxLX1NJWkUpKA0KPiArICBJTiAgRURL SUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICpUaGlzLA0KPiArICBPVVQgVUlOVE4gICAgICAgICAg ICAgICAgICpCdWxrU2l6ZQ0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVzIHRo ZSBVU0IgSGVhZGVyIGZ1bmN0aW9uYWwgRGVzY3JpcHRvci4NCj4gKw0KPiArICBAcGFyYW1baW5d ICBUaGlzICAgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUNCj4gRURLSUlfVVNCX0VU SEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1bb3V0XSBVc2JIZWFkZXJGdW5E ZXNjcmlwdG9yIEEgcG9pbnRlciB0byB0aGUgY2FsbGVyIGFsbG9jYXRlZA0KPiBVU0IgSGVhZGVy IEZ1bmN0aW9uYWwgRGVzY3JpcHRvci4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICBUaGUgVVNCIEhlYWRlciBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzDQo+IHJldHJp ZXZlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIFVz YkhlYWRlckZ1bkRlc2NyaXB0b3IgaXMgTlVMTC4NCj4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5E ICAgICAgICAgVGhlIFVTQiBIZWFkZXIgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcw0KPiBub3Qg Zm91bmQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVE S0lJX1VTQl9IRUFERVJfRlVOQ1RJT05BTF9ERVNDUklQVE9SKSgNCj4gKyAgSU4gRURLSUlfVVNC X0VUSEVSTkVUX1BST1RPQ09MICAgICAgKlRoaXMsDQo+ICsgIE9VVCBVU0JfSEVBREVSX0ZVTl9E RVNDUklQVE9SICpVc2JIZWFkZXJGdW5EZXNjcmlwdG9yDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0K PiArICBSZXRyaWV2ZXMgdGhlIFVTQiBVbmlvbiBmdW5jdGlvbmFsIERlc2NyaXB0b3IuDQo+ICsN Cj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhl DQo+IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW291 dF0gVXNiVW5pb25GdW5EZXNjcmlwdG9yICBBIHBvaW50ZXIgdG8gdGhlIGNhbGxlciBhbGxvY2F0 ZWQNCj4gVVNCIFVuaW9uIEZ1bmN0aW9uYWwgRGVzY3JpcHRvci4NCj4gKw0KPiArICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgVVNCIFVuaW9uIEZ1bmN0aW9uYWwgZGVzY3JpcHRv ciB3YXMNCj4gcmV0cmlldmVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgVXNiVW5pb25GdW5EZXNjcmlwdG9yIGlzIE5VTEwuDQo+ICsgIEByZXR2YWwg RUZJX05PVF9GT1VORCAgICAgICAgIFRoZSBVU0IgVW5pb24gRnVuY3Rpb25hbCBkZXNjcmlwdG9y IHdhcw0KPiBub3QgZm91bmQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4g KyhFRklBUEkgKkVES0lJX1VTQl9VTklPTl9GVU5DVElPTkFMX0RFU0NSSVBUT1IpKA0KPiArICBJ TiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICAgICpUaGlzLA0KPiArICBPVVQgVVNCX1VO SU9OX0ZVTl9ERVNDUklQVE9SICpVc2JVbmlvbkZ1bkRlc2NyaXB0b3INCj4gKyAgKTsNCj4gKw0K PiArLyoqDQo+ICsgIFJldHJpZXZlcyB0aGUgVVNCIEV0aGVybmV0IGZ1bmN0aW9uYWwgRGVzY3Jp cHRvci4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgICAgIEEgcG9p bnRlciB0byB0aGUNCj4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KPiAr ICBAcGFyYW1bb3V0XSBVc2JFdGhGdW5EZXNjcmlwdG9yICAgIEEgcG9pbnRlciB0byB0aGUgY2Fs bGVyIGFsbG9jYXRlZCBVU0INCj4gRXRoZXJuZXQgRnVuY3Rpb25hbCBEZXNjcmlwdG9yLg0KPiAr DQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBVU0IgRXRoZXJuZXQgRnVu Y3Rpb25hbCBkZXNjcmlwdG9yIHdhcw0KPiByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBA cmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBVc2JFdGhGdW5EZXNjcmlwdG9yIGlzIE5VTEwu DQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFRoZSBVU0IgRXRoZXJuZXQgRnVu Y3Rpb25hbCBkZXNjcmlwdG9yIHdhcw0KPiBub3QgZm91bmQuDQo+ICsqKi8NCj4gK3R5cGVkZWYN Cj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9GVU5DVElPTkFM X0RFU0NSSVBUT1IpKA0KPiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICAgICAg ICpUaGlzLA0KPiArICBPVVQgVVNCX0VUSEVSTkVUX0ZVTl9ERVNDUklQVE9SICpVc2JFdGhGdW5E ZXNjcmlwdG9yDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIHJlcXVlc3Qgc2V0cyB0 aGUgRXRoZXJuZXQgZGV2aWNlIG11bHRpY2FzdCBmaWx0ZXJzIGFzIHNwZWNpZmllZCBpbiB0aGUN Cj4gKyAgc2VxdWVudGlhbCBsaXN0IG9mIDQ4IGJpdCBFdGhlcm5ldCBtdWx0aWNhc3QgYWRkcmVz c2VzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICAgQSBwb2lu dGVyIHRvIHRoZQ0KPiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsg IEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGZpbHRlcnMuDQo+ ICsgIEBwYXJhbVtpbl0gIE1jYXN0QWRkciAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSB2 YWx1ZSBvZiB0aGUgbXVsdGljYXN0DQo+IGFkZHJlc3Nlcy4NCj4gKw0KPiArICBAcmV0dmFsIEVG SV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVj dXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRo ZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJ X0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZA0K PiB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRl ZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlf VVNCX0VUSEVSTkVUX1NFVF9FVEhfTVVMVElDQVNUX0ZJTFRFUlMpKA0KPiArICBJTiBFREtJSV9V U0JfRVRIRVJORVRfUFJPVE9DT0wgKlRoaXMsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAg ICBWYWx1ZSwNCj4gKyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICpNY2FzdEFkZHINCj4gKyAg KTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgcmVxdWVzdCBzZXRzIHVwIHRoZSBzcGVjaWZpZWQg RXRoZXJuZXQgcG93ZXIgbWFuYWdlbWVudCBwYXR0ZXJuDQo+IGZpbHRlciBhcw0KPiArICBkZXNj cmliZWQgaW4gdGhlIGRhdGEgc3RydWN0dXJlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMg ICAgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBFREtJSV9VU0JfRVRIRVJORVRf UFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgICAgICAg ICAgTnVtYmVyIG9mIGZpbHRlcnMuDQo+ICsgIEBwYXJhbVtpbl0gIExlbmd0aCAgICAgICAgICAg ICAgICAgU2l6ZSBvZiB0aGUgcG93ZXIgbWFuYWdlbWVudCBwYXR0ZXJuIGZpbHRlcg0KPiBkYXRh Lg0KPiArICBAcGFyYW1baW5dICBQYXR0ZXJuRmlsdGVyICAgICAgICAgIEEgcG9pbnRlciB0byB0 aGUgcG93ZXIgbWFuYWdlbWVudA0KPiBwYXR0ZXJuIGZpbHRlciBzdHJ1Y3R1cmUuDQo+ICsNCj4g KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3Vj Y2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQg b2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0Vf RVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiAr ICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFz IGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAg IE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhF RklBUEkNCj4gKkVES0lJX1VTQl9FVEhFUk5FVF9TRVRfRVRIX1BPV0VSX01BTkFHRV9QQVRURVJO X0ZJTFRFUikoDQo+ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAqVGhpcywNCj4g KyAgSU4gVUlOVDE2ICAgICAgICAgICAgICAgIFZhbHVlLA0KPiArICBJTiBVSU5UMTYgICAgICAg ICAgICAgICAgTGVuZ3RoLA0KPiArICBJTiBWT0lEICAgICAgICAgICAgICAgICAgKlBhdHRlcm5G aWx0ZXINCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgcmVxdWVzdCByZXRyaWV2ZXMg dGhlIHN0YXR1cyBvZiB0aGUgc3BlY2lmaWVkIEV0aGVybmV0IHBvd2VyDQo+IG1hbmFnZW1lbnQN Cj4gKyAgcGF0dGVybiBmaWx0ZXIgZnJvbSB0aGUgZGV2aWNlLg0KPiArDQo+ICsgIEBwYXJhbVtp bl0gIFRoaXMgICAgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBFREtJSV9VU0Jf RVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAg ICAgICAgICAgICAgVGhlIGZpbHRlciBudW1iZXIuDQo+ICsgIEBwYXJhbVtvdXRdIFBhdHRlcm5B Y3RpdmUgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBwYXR0ZXJuIGFjdGl2ZSBib29sZWFuLg0K PiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1 dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0 aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklf REVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJv ci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0 ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRF RCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVT DQo+ICsoRUZJQVBJDQo+ICpFREtJSV9VU0JfRVRIRVJORVRfR0VUX0VUSF9QT1dFUl9NQU5BR0Vf UEFUVEVSTl9GSUxURVIpKA0KPiArICBJTiAgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAq VGhpcywNCj4gKyAgSU4gICBVSU5UMTYgICAgICAgICAgICAgICAgVmFsdWUsDQo+ICsgIE9VVCAg Qk9PTEVBTiAgICAgICAgICAgICAgICpQYXR0ZXJuQWN0aXZlDQo+ICsgICk7DQo+ICsNCj4gKy8q Kg0KPiArICBUaGlzIHJlcXVlc3QgaXMgdXNlZCB0byBjb25maWd1cmUgZGV2aWNlIEV0aGVybmV0 IHBhY2tldCBmaWx0ZXIgc2V0dGluZ3MuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAg ICAgICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wg aW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgICAgIFBhY2tldCBGaWx0 ZXIgQml0bWFwLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBy ZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAg ICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAg QHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBh IGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9m IHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVlLg0KPiArICBAcmV0dmFsIEVG SV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfU0VUX0VUSF9QQUNL RVRfRklMVEVSKSgNCj4gKyAgSU4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICpUaGlzLA0K PiArICBJTiBVSU5UMTYgICAgICAgICAgICAgICAgVmFsdWUNCj4gKyAgKTsNCj4gKw0KPiArLyoq DQo+ICsgIFRoaXMgcmVxdWVzdCBpcyB1c2VkIHRvIHJldHJpZXZlIGEgc3RhdGlzdGljIGJhc2Vk IG9uIHRoZSBmZWF0dXJlIHNlbGVjdG9yLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAg ICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9U T0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgRmVhdHVyZVNlbGVjdG9yICAgICAgIFZh bHVlIG9mIHRoZSBmZWF0dXJlIHNlbGVjdG9yLg0KPiArICBAcGFyYW1bb3V0XSBTdGF0aXN0aWMg ICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSAzMiBiaXQgdW5zaWduZWQgaW50ZWdlci4NCj4g Kw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRl ZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGlt ZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RF VklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3Iu DQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVy cyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQg ICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0K PiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX0dFVF9FVEhfU1RBVElTVElDKSgNCj4gKyAg SU4gIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOICBVSU5UMTYg ICAgICAgICAgICAgICAgIEZlYXR1cmVTZWxlY3RvciwNCj4gKyAgT1VUIFZPSUQgICAgICAgICAg ICAgICAgICAgKlN0YXRpc3RpYw0KPiArICApOw0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX0dFVF9TVEFURSAgICAgICAgICAgVXNiRXRoVW5k aUdldFN0YXRlOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9TVEFSVCAgICAgICAgICAg ICAgIFVzYkV0aFVuZGlTdGFydDsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfU1RPUCAg ICAgICAgICAgICAgICBVc2JFdGhVbmRpU3RvcDsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VO RElfR0VUX0lOSVRfSU5GTyAgICAgICBVc2JFdGhVbmRpR2V0SW5pdEluZm87DQo+ICsgIEVES0lJ X1VTQl9FVEhFUk5FVF9VTkRJX0dFVF9DT05GSUdfSU5GTw0KPiBVc2JFdGhVbmRpR2V0Q29uZmln SW5mbzsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfSU5JVElBTElaRSAgICAgICAgICBV c2JFdGhVbmRpSW5pdGlhbGl6ZTsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfUkVTRVQg ICAgICAgICAgICAgICBVc2JFdGhVbmRpUmVzZXQ7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9V TkRJX1NIVVRET1dOICAgICAgICAgICAgVXNiRXRoVW5kaVNodXRkb3duOw0KPiArICBFREtJSV9V U0JfRVRIRVJORVRfVU5ESV9JTlRFUlJVUFRfRU5BQkxFDQo+IFVzYkV0aFVuZGlJbnRlcnJ1cHRF bmFibGU7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1JFQ0VJVkVfRklMVEVSDQo+IFVz YkV0aFVuZGlSZWNlaXZlRmlsdGVyOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9TVEFU SU9OX0FERFJFU1MNCj4gVXNiRXRoVW5kaVN0YXRpb25BZGRyZXNzOw0KPiArICBFREtJSV9VU0Jf RVRIRVJORVRfVU5ESV9TVEFUSVNUSUNTICAgICAgICAgIFVzYkV0aFVuZGlTdGF0aXN0aWNzOw0K PiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9NQ0FTVF9JUFRPTUFDDQo+IFVzYkV0aFVuZGlN Y2FzdElwMk1hYzsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfTlZfREFUQSAgICAgICAg ICAgICBVc2JFdGhVbmRpTnZEYXRhOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9HRVRf U1RBVFVTICAgICAgICAgIFVzYkV0aFVuZGlHZXRTdGF0dXM7DQo+ICsgIEVES0lJX1VTQl9FVEhF Uk5FVF9VTkRJX0ZJTExfSEVBREVSICAgICAgICAgVXNiRXRoVW5kaUZpbGxIZWFkZXI7DQo+ICsg IEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1RSQU5TTUlUICAgICAgICAgICAgVXNiRXRoVW5kaVRy YW5zbWl0Ow0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9SRUNFSVZFICAgICAgICAgICAg IFVzYkV0aFVuZGlSZWNlaXZlOw0KPiArfSBFREtJSV9VU0JfRVRIRVJORVRfVU5ESTsNCj4gKw0K PiArLy8gVGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBwcm92aWRlcyBzb21lIGJhc2lj IFVTQg0KPiBFdGhlcm5ldCBkZXZpY2UgcmVsZXZhbnQNCj4gKy8vIGRlc2NyaXB0b3IgYW5kIHNw ZWNpZmljIHJlcXVlc3RzLg0KPiArc3RydWN0IF9FREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wg ew0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVXNiRXRoVW5kaTsNCj4gKyAgLy8gZm9yIGNhbGxpbmcgdGhlIFVOREkgY2hpbGQg ZnVuY3Rpb25zDQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9JTklUSUFMSVpFICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBVc2JFdGhJbml0aWFsaXplOw0KPiArICBFREtJSV9VU0JfRVRIRVJO RVRfU1RBVElTVElDUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiRXRoU3RhdGlzdGlj czsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1JFQ0VJVkUgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFVzYkV0aFJlY2VpdmU7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9UUkFOU01J VCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JFdGhUcmFuc21pdDsNCj4gKyAgRURL SUlfVVNCX0VUSEVSTkVUX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVz YkV0aEludGVycnVwdDsNCj4gKyAgRURLSUlfVVNCX0dFVF9FVEhfTUFDX0FERFJFU1MgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFVzYkV0aE1hY0FkZHJlc3M7DQo+ICsgIEVES0lJX1VTQl9F VEhfTUFYX0JVTEtfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JFdGhNYXhC dWxrU2l6ZTsNCj4gKyAgRURLSUlfVVNCX0hFQURFUl9GVU5DVElPTkFMX0RFU0NSSVBUT1INCj4g VXNiSGVhZGVyRnVuRGVzY3JpcHRvcjsNCj4gKyAgRURLSUlfVVNCX1VOSU9OX0ZVTkNUSU9OQUxf REVTQ1JJUFRPUg0KPiBVc2JVbmlvbkZ1bkRlc2NyaXB0b3I7DQo+ICsgIEVES0lJX1VTQl9FVEhF Uk5FVF9GVU5DVElPTkFMX0RFU0NSSVBUT1INCj4gVXNiRXRoRnVuRGVzY3JpcHRvcjsNCj4gKyAg RURLSUlfVVNCX0VUSEVSTkVUX1NFVF9FVEhfTVVMVElDQVNUX0ZJTFRFUlMNCj4gU2V0VXNiRXRo TWNhc3RGaWx0ZXI7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9TRVRfRVRIX1BPV0VSX01BTkFH RV9QQVRURVJOX0ZJTFRFUg0KPiBTZXRVc2JFdGhQb3dlclBhdHRlcm5GaWx0ZXI7DQo+ICsgIEVE S0lJX1VTQl9FVEhFUk5FVF9HRVRfRVRIX1BPV0VSX01BTkFHRV9QQVRURVJOX0ZJTFRFUg0KPiBH ZXRVc2JFdGhQb3dlclBhdHRlcm5GaWx0ZXI7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9TRVRf RVRIX1BBQ0tFVF9GSUxURVINCj4gU2V0VXNiRXRoUGFja2V0RmlsdGVyOw0KPiArICBFREtJSV9V U0JfRVRIRVJORVRfR0VUX0VUSF9TVEFUSVNUSUMNCj4gR2V0VXNiRXRoU3RhdGlzdGljOw0KPiAr fTsNCj4gKw0KPiArZXh0ZXJuIEVGSV9HVUlEICBnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQ7DQo+ ICsNCj4gKyNlbmRpZg0KPiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5k ZWMNCj4gYi9NZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KPiBpbmRleCAzZWI0YTc5YmY3 Li44NjBlZWMwZjNjIDEwMDY0NA0KPiAtLS0gYS9NZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRl Yw0KPiArKysgYi9NZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KPiBAQCAtNjg1LDYgKzY4 NSw5IEBADQo+ICAgICMjIEluY2x1ZGUvUHJvdG9jb2wvVmFyaWFibGVQb2xpY3kuaA0KPiAgICBn RWRraWlWYXJpYWJsZVBvbGljeVByb3RvY29sR3VpZCA9IHsgMHg4MUQxNjc1QywgMHg4NkY2LCAw eDQ4REYsIHsgMHhCRCwNCj4gMHg5NSwgMHg5QSwgMHg2RSwgMHg0RiwgMHgwOSwgMHgyNSwgMHhD MyB9IH0NCj4NCj4gKyAgIyMgSW5jbHVkZS9Qcm90b2NvbC9Vc2JFdGhlcm5ldFByb3RvY29sLmgN Cj4gKyAgZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkID0geyAweDhkODk2OWNjLCAweGZlYjAsIDB4 NDMwMywgeyAweGIyLCAweDFhLA0KPiAweDFmLCAweDExLCAweDZmLCAweDM4LCAweDU2LCAweDQz IH0gfQ0KPiArDQo+ICBbUGNkc0ZlYXR1cmVGbGFnXQ0KPiAgICAjIyBJbmRpY2F0ZXMgaWYgdGhl IHBsYXRmb3JtIGNhbiBzdXBwb3J0IHVwZGF0ZSBjYXBzdWxlIGFjcm9zcyBhIHN5c3RlbQ0KPiBy ZXNldC48QlI+PEJSPg0KPiAgICAjICAgVFJVRSAgLSBTdXBwb3J0cyB1cGRhdGUgY2Fwc3VsZSBh Y3Jvc3MgYSBzeXN0ZW0gcmVzZXQuPEJSPg0KPiBAQCAtMjEwOCw2ICsyMTExLDIxIEBADQo+ICAg ICMgQFByb21wdCBUaGUgc2hhcmVkIGJpdCBtYXNrIHdoZW4gSW50ZWwgVGR4IGlzIGVuYWJsZWQu DQo+DQo+IGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RUZHhTaGFyZWRCaXRNYXNr fDB4MHxVSU5UNjR8MHgxDQo+IDAwMDAwMjUNCj4NCj4gKyAgIyMgSW5kaWNhdGVzIGlmIHRoZSBV c2IgTmV0d29yayByYXRlIGxpbWl0aW5nIFN1cHBvcnRlZC48QlI+PEJSPg0KPiArICAjICAgVFJV RSAgLSBVc2IgTmV0d29yayByYXRlIGxpbWl0aW5nIGlzIHN1cHBvcnRlZC48QlI+DQo+ICsgICMg ICBGQUxTRSAtIFVzYiBOZXR3b3JrIHJhdGUgbGltaXRpbmcgaXMgbm90IHN1cHBvcnRlZC48QlI+ DQo+ICsgICMgQFByb21wdCBFbmFibGUgVXNiIE5ldHdvcmsgcmF0ZSBsaW1pdGluZyBzdXBwb3J0 Lg0KPiArDQo+IGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RFbmFibGVVc2JOZXR3 b3JrUmF0ZUxpbWl0aW5nfEZBTA0KPiBTRXxCT09MRUFOfDB4MTAwMDAwMjYNCj4gKw0KPiArICAj IyBUaGUgcmF0ZSBsaW1pdGluZyBDcmVkaXQgdmFsdWUgaXMgY2hlY2sgaW4gcmF0ZSBsaW1pdGVy IGV2ZW50Lg0KPiArICAjICBJdCBpcyB0byBjb250cm9sIHRoZSBSYXRlTGltaXRpbmdDcmVkaXRD b3VudCBtYXggdmFsdWUuDQo+ICsgICMgQFByb21wdCBUaGUgdmFsdWUgaXMgdXNlIGZvciBVc2Ig TmV0d29yayByYXRlIGxpbWl0aW5nIHN1cHBvcnRlZC4NCj4gKw0KPiBnRWZpTWRlTW9kdWxlUGtn VG9rZW5TcGFjZUd1aWQuUGNkVXNiTmV0d29ya1JhdGVMaW1pdGluZ0NyZWRpdHwxMHwNCj4gVUlO VDMyfDB4MTAwMDAwMjcNCj4gKw0KPiArICAjIyBUaGUgdmFsdWUgb2YgcmF0ZSBsaW1pdGVyIGV2 ZW50IGZvciB0aW1lb3V0IGNoZWNrLiBEZWZhdWx0IHZhbHVlIGlzDQo+IDEwMCh1bml0IDFtcyku DQo+ICsgICMgQFByb21wdCBUaGUgdmFsdWUgaXMgdXNlIGZvciBVc2IgTmV0d29yayByYXRlIGxp bWl0aW5nIHN1cHBvcnRlZC4NCj4gKw0KPiBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQu UGNkVXNiTmV0d29ya1JhdGVMaW1pdGluZ0ZhY3RvcnwxMDANCj4gfFVJTlQzMnwweDEwMDAwMDI4 DQo+ICsNCj4gIFtQY2RzUGF0Y2hhYmxlSW5Nb2R1bGVdDQo+ICAgICMjIFNwZWNpZnkgbWVtb3J5 IHNpemUgd2l0aCBwYWdlIG51bWJlciBmb3IgUEVJIGNvZGUgd2hlbg0KPiAgICAjICBMb2FkaW5n IE1vZHVsZSBhdCBGaXhlZCBBZGRyZXNzIGZlYXR1cmUgaXMgZW5hYmxlZC4NCj4gZGlmZiAtLWdp dCBhL01kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZHNjDQo+IGIvTWRlTW9kdWxlUGtnL01kZU1v ZHVsZVBrZy5kc2MNCj4gaW5kZXggMTAxNDU5OGYzMS4uMGFhZGQ0MDVmMyAxMDA2NDQNCj4gLS0t IGEvTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kc2MNCj4gKysrIGIvTWRlTW9kdWxlUGtnL01k ZU1vZHVsZVBrZy5kc2MNCj4gQEAgLTI3NCw2ICsyNzQsMTAgQEANCj4gICAgTWRlTW9kdWxlUGtn L0J1cy9Vc2IvVXNiTWFzc1N0b3JhZ2VEeGUvVXNiTWFzc1N0b3JhZ2VEeGUuaW5mDQo+DQo+IE1k ZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk1vdXNlQWJzb2x1dGVQb2ludGVyRHhlL1VzYk1vdXNlQWJz b2x1dGUNCj4gUG9pbnRlckR4ZS5pbmYNCj4gICAgTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTW91 c2VEeGUvVXNiTW91c2VEeGUuaW5mDQo+ICsNCj4gTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0 d29yay9OZXR3b3JrQ29tbW9uL05ldHdvcmtDb21tb24uDQo+IGluZg0KPiArICBNZGVNb2R1bGVQ a2cvQnVzL1VzYi9Vc2JOZXR3b3JrL1VzYkNkY0VjbS9Vc2JDZGNFY20uaW5mDQo+ICsgIE1kZU1v ZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvVXNiQ2RjTmNtL1VzYkNkY05jbS5pbmYNCj4gKyAg TWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9Vc2JSbmRpcy9Vc2JSbmRpcy5pbmYNCj4g ICAgTWRlTW9kdWxlUGtnL0J1cy9JMmMvSTJjRHhlL0kyY0J1c0R4ZS5pbmYNCj4gICAgTWRlTW9k dWxlUGtnL0J1cy9JMmMvSTJjRHhlL0kyY0hvc3REeGUuaW5mDQo+ICAgIE1kZU1vZHVsZVBrZy9C dXMvSTJjL0kyY0R4ZS9JMmNEeGUuaW5mDQo+IC0tDQo+IDIuMzUuMS53aW5kb3dzLjINCj4gLVRo ZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhpcyBtZXNzYWdlIG1heSBiZSBjb25maWRlbnRp YWwgYW5kDQo+IHByb3ByaWV0YXJ5IHRvIEFtZXJpY2FuIE1lZ2F0cmVuZHMgKEFNSSkuIFRoaXMg Y29tbXVuaWNhdGlvbiBpcyBpbnRlbmRlZA0KPiB0byBiZSByZWFkIG9ubHkgYnkgdGhlIGluZGl2 aWR1YWwgb3IgZW50aXR5IHRvIHdob20gaXQgaXMgYWRkcmVzc2VkIG9yIGJ5IHRoZWlyDQo+IGRl c2lnbmVlLiBJZiB0aGUgcmVhZGVyIG9mIHRoaXMgbWVzc2FnZSBpcyBub3QgdGhlIGludGVuZGVk IHJlY2lwaWVudCwgeW91IGFyZQ0KPiBvbiBub3RpY2UgdGhhdCBhbnkgZGlzdHJpYnV0aW9uIG9m IHRoaXMgbWVzc2FnZSwgaW4gYW55IGZvcm0sIGlzIHN0cmljdGx5DQo+IHByb2hpYml0ZWQuIFBs ZWFzZSBwcm9tcHRseSBub3RpZnkgdGhlIHNlbmRlciBieSByZXBseSBlLW1haWwgb3IgYnkgdGVs ZXBob25lDQo+IGF0IDc3MC0yNDYtODYwMCwgYW5kIHRoZW4gZGVsZXRlIG9yIGRlc3Ryb3kgYWxs IGNvcGllcyBvZiB0aGUgdHJhbnNtaXNzaW9uLg0KPg0KPg0KPiANCj4NCj4NCj4gLVRoZSBpbmZv cm1hdGlvbiBjb250YWluZWQgaW4gdGhpcyBtZXNzYWdlIG1heSBiZSBjb25maWRlbnRpYWwgYW5k DQo+IHByb3ByaWV0YXJ5IHRvIEFtZXJpY2FuIE1lZ2F0cmVuZHMgKEFNSSkuIFRoaXMgY29tbXVu aWNhdGlvbiBpcyBpbnRlbmRlZA0KPiB0byBiZSByZWFkIG9ubHkgYnkgdGhlIGluZGl2aWR1YWwg b3IgZW50aXR5IHRvIHdob20gaXQgaXMgYWRkcmVzc2VkIG9yIGJ5IHRoZWlyDQo+IGRlc2lnbmVl LiBJZiB0aGUgcmVhZGVyIG9mIHRoaXMgbWVzc2FnZSBpcyBub3QgdGhlIGludGVuZGVkIHJlY2lw aWVudCwgeW91IGFyZQ0KPiBvbiBub3RpY2UgdGhhdCBhbnkgZGlzdHJpYnV0aW9uIG9mIHRoaXMg bWVzc2FnZSwgaW4gYW55IGZvcm0sIGlzIHN0cmljdGx5DQo+IHByb2hpYml0ZWQuIFBsZWFzZSBw cm9tcHRseSBub3RpZnkgdGhlIHNlbmRlciBieSByZXBseSBlLW1haWwgb3IgYnkgdGVsZXBob25l DQo+IGF0IDc3MC0yNDYtODYwMCwgYW5kIHRoZW4gZGVsZXRlIG9yIGRlc3Ryb3kgYWxsIGNvcGll cyBvZiB0aGUgdHJhbnNtaXNzaW9uLg0KLVRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhp cyBtZXNzYWdlIG1heSBiZSBjb25maWRlbnRpYWwgYW5kIHByb3ByaWV0YXJ5IHRvIEFtZXJpY2Fu IE1lZ2F0cmVuZHMgKEFNSSkuIFRoaXMgY29tbXVuaWNhdGlvbiBpcyBpbnRlbmRlZCB0byBiZSBy ZWFkIG9ubHkgYnkgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRvIHdob20gaXQgaXMgYWRkcmVz c2VkIG9yIGJ5IHRoZWlyIGRlc2lnbmVlLiBJZiB0aGUgcmVhZGVyIG9mIHRoaXMgbWVzc2FnZSBp cyBub3QgdGhlIGludGVuZGVkIHJlY2lwaWVudCwgeW91IGFyZSBvbiBub3RpY2UgdGhhdCBhbnkg ZGlzdHJpYnV0aW9uIG9mIHRoaXMgbWVzc2FnZSwgaW4gYW55IGZvcm0sIGlzIHN0cmljdGx5IHBy b2hpYml0ZWQuIFBsZWFzZSBwcm9tcHRseSBub3RpZnkgdGhlIHNlbmRlciBieSByZXBseSBlLW1h aWwgb3IgYnkgdGVsZXBob25lIGF0IDc3MC0yNDYtODYwMCwgYW5kIHRoZW4gZGVsZXRlIG9yIGRl c3Ryb3kgYWxsIGNvcGllcyBvZiB0aGUgdHJhbnNtaXNzaW9uLg0K