From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM04-MW2-obe.outbound.protection.outlook.com (NAM04-MW2-obe.outbound.protection.outlook.com [40.107.101.55]) by mx.groups.io with SMTP id smtpd.web10.36545.1670824114935494829 for ; Sun, 11 Dec 2022 21:48:35 -0800 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.101.55, mailfrom: richardho@ami.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VUfXw9cQqSXxSjntSAQzRJbNVS0Yi8JOHga9qdI8Z6i+dET0zoajqHsXWoWJWccAa8TnpYwhjcDFkhiOnnjQHD2qhKwXuSEitYTY8P6Oni6uvgdog7U/v/zByGLCsU9GM3FxZri5VBT08dRAdoFs/QWw39U9/Bm/oct5i5pZMKu+yU8DyGTkxU7kiJqUKO51n+eeCAqV3HtO3QcckpvM9hLe7U+YjofopaxKrcnpb5bP3mupoH95fkXXeMVdeWIXB5ecsZ4PunOjc8HglZ2DMx+QfbwGnah3JNUUF5ZpbwILHD/LWgvSWCAG6+gPS5mLdQzL9JVGCdy5VkUmqbWd/w== 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=yOcpP2M87Og2nm8l33qxjVX9afUhuPzLkbP4LT/NmPU=; b=JcJPTEomEfZeYyJ1krroW5enVhWsu4Sd66qemMY2RM7MHsUgx1ubfhOpeGPNq+wFhciXZlv+SvbmfXC1akxATw4omBgzC5N1BNV5wRlNvEqIgp5Xk3f0ahfz/EQL9o46v/SL8HD+rUBo7YjhOtXGlHgXuPpTcr8nkxgmfpiWD/CyD6vg+IfQLooepYR74EgeeUBJEkokpnEOe0EkAJ/DJcFbm0LGFjna9avq6z+AS/G3OllziPy6VmbrbvkX1RzBoA8A2q2CcC6b9NyswOypjFs0olbHeT7blqEJa8puWSpffShmeZ0ooJa63YFe0wxH6xd975zg/y3PvlqJhcogJg== 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=yOcpP2M87Og2nm8l33qxjVX9afUhuPzLkbP4LT/NmPU=; b=iC5K6/PcnRYqx3ap1cEwCL/rp6i5hVCFs030Bi2t4/rmD5veH2BtPBbgSAFXSNHBIFQ7v0BJnRnNuYd2qwSFtwwONserF8upO9HkIak9pFkO562NzKxIXMQdrnypI9wIUB5Ll5/0t2TqP1FcUogIR6MG1PruZZasmOoTrM16ixg= Received: from DM5PR10MB1660.namprd10.prod.outlook.com (2603:10b6:4:6::13) by PH8PR10MB6386.namprd10.prod.outlook.com (2603:10b6:510:1c1::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5880.19; Mon, 12 Dec 2022 05:48:26 +0000 Received: from DM5PR10MB1660.namprd10.prod.outlook.com ([fe80::a244:56c7:8dd6:6ced]) by DM5PR10MB1660.namprd10.prod.outlook.com ([fe80::a244:56c7:8dd6:6ced%11]) with mapi id 15.20.5880.019; Mon, 12 Dec 2022 05:48:26 +0000 From: =?UTF-8?B?UmljaGFyZEhvIFvkvZXmmI7lv6Bd?= To: Rebecca Cran , "devel@edk2.groups.io" CC: Andrew Fish , Leif Lindholm , Michael D Kinney , Michael Kubacki , Zhiguang Liu , Liming Gao , =?big5?B?VG9ueSBMbyAow7mq96pRKQ==?= Subject: Re: [edk2-devel] [PATCH 1/3] UsbNetworkPkg/UsbRndis: Add USB RNDIS devices support Thread-Topic: [EXTERNAL] Re: [edk2-devel] [PATCH 1/3] UsbNetworkPkg/UsbRndis: Add USB RNDIS devices support Thread-Index: AQHZCrdOPRl+yF7EMU+hNE/5zh4Zca5jbdIAgAZWweA= Date: Mon, 12 Dec 2022 05:48:25 +0000 Message-ID: References: <20221208034302.6215-1-richardho@ami.com> <207aa040-7175-7dcd-37db-eb929c3c73de@quicinc.com> In-Reply-To: <207aa040-7175-7dcd-37db-eb929c3c73de@quicinc.com> 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: DM5PR10MB1660:EE_|PH8PR10MB6386:EE_ x-ms-office365-filtering-correlation-id: 07ddce27-7e7d-44f0-d052-08dadc047cef x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: vlCMhwAVdKWtqNUAnjspDGl1oA3rgm1+BvHCrTI9uwfId2f4U0eaGEOaXYOuORTD2mhDHzeXwrwj2dKA9+wjDG6EJGd9T9vm7+zPYjUUT+ilWqNo2UVNEluUgIBv04dHIajD0hj5gFJ0uZREiQQHdmEXuzwukG0/QI+c35iMxhH+4ncdFISkaSnLgrl7SeT7uH2lD3kZRFNxMXutAc+5Pekl1fSE6lLPUvuUkA5HVdkpD7fh4mVX1ttzmgrwJNtbqb7L3WoPVe0j00I68EW42TMUyuzpvhxm2VnfVYx6x8lGaukgdqFXnu4nBlog7u3N4+IVN1sXgdsdjtLGigK7jguNYcT1+JDVM3oGDTB+Sm+nCFlgPwo7NlNvkEwFpUK5w+MbuL0pBUFZ/PAi9HmUITuHGd1nbUN79Wk4cgoxc+j+wluEMA4Jjfz0yeBdIUmcWflOE+yQdpgoBAb6tPOSxpJ1FiVexjUKZAjm3S9MNJDBCDsbe6cGaEAhRXyJ8Cl3df2rHKYsvFqFoJ9LWeX6jqluN9Q8RaSZEXB+DWJGcE+KYpJzVTWY6XHHPcq8zNGcs9QTabc+6LCFOCM4bws5VuU8rtHfJlnoEH98WkMatAu1CaR8qE9KesOasSBn1Bpr9/TJ6HAGX4OpN6/j0kuyJsm+c94WSqWtlTyVslGOFyCWI+99FRgSuMkpgfQa+gAMx4MCSUHxA9ZS4B5FRGhreGTDA96ggAr7oSTK55GUHlFZjoFLsz2EbbbDhuMqi/I/ x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM5PR10MB1660.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(396003)(136003)(376002)(366004)(346002)(39850400004)(451199015)(110136005)(54906003)(83380400001)(316002)(64756008)(19627235002)(85182001)(5660300002)(8936002)(52536014)(66446008)(66556008)(66476007)(4326008)(66946007)(76116006)(8676002)(41300700001)(45080400002)(71200400001)(966005)(86362001)(9686003)(53546011)(6506007)(7696005)(26005)(478600001)(40140700001)(186003)(33656002)(122000001)(2906002)(38100700002)(55016003)(30864003)(66899015)(38070700005)(579004)(559001)(44824005);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?big5?B?elBIeUdncko4Ym5SZmh5VHB5NlJSbTMrQ2ZXVVlJZDhHelhPRHpFSnJVUHJNeWRo?= =?big5?B?VWIrNFlmdDd0M3g0aitBZDcvRU1kNGdHTXZOUkY5bE5FcFVIS0kzNjhZSE1KRkI3?= =?big5?B?RGlXanBMNFVkNzVyWDBUMFdtRk56SVp3MjVBME9zdmFUOVNIRHFCVmh6eTg1bldO?= =?big5?B?ZzhUQmJ1dk9zQUw2aEVqU1pNQ1JBOFNkN2NJL2tLdnF1MGpEZ2lVZ1ZySG0rRnpo?= =?big5?B?NWovOXd6Zm9RbE8vc1htc1JxZ3BWWW5JeW9XU0gxdHNEbTVPdTZVZGFZK2w2dmpy?= =?big5?B?VFlCSmxjNjhLSXBtRGFhbVJkK0FOMjlpQkFTL0YvOGtGcEIxY1hocmwyWFNVQTFF?= =?big5?B?WmRBR1NZU3loVitvaDluQmRNZzAxWWJSR0w0ZTFCMy9UODBUVWFVZHNrdTFVaENm?= =?big5?B?b01CV3pPTmI0MGlaZWM1RExqc2JaZzV6TTNPTzRSZE9zYVcveU9lbnlSeHdxUmNX?= =?big5?B?OGY2djl0bk9IcUs0MXRGempKOWxuR3dGaHVzRmxtRGVxcW8vOXVFS2hCbFkyRFBw?= =?big5?B?RzR0R2RqS3ZvSUlXb2h2dDFhcGtVdjluVjEzMUdUODBML3lYY0EwdTBVdXJLcDA5?= =?big5?B?RDZ2QTVVOFU5bFhSUmJMQU1haHJYRjdCS0dWcDdCdUN3TjZzZ0xoUHM2VVZVTE0v?= =?big5?B?aS9JOUpNSVZxQzNUa2s5ZlZ2NUorWTk0cHNmRVg0aGVqakRFY3RMWXNTR0ZwMjN4?= =?big5?B?T3oxb1FtVy8vT2tOMTQzdDhvdnQva2J6Q3MxNUVJdjBUUEpQZkd2MFpJcGhWYm9n?= =?big5?B?Y3dtYWQxYjBJazNwb2syU3pwRnYyY00yQ2tGUkIrMmtTNFJVQzVOV2tLZ1puajBK?= =?big5?B?MUQ1UWpJWjlsbEc2WThva3F3SWM4MmRxdHB4TlRtZk5PRTJ1VnUxMCtxZllNZU05?= =?big5?B?QUZTcE1oZnFDaG9QTXFEaS9QYVIzV1owZGVBZEtxd2pYZnk0aDFyMERyR1c1T3lI?= =?big5?B?QUtVQmVyd0pnVWtHOHV0bWNYY2RTMEtBTmFnSDdBb2pzcnh1L3U5TVN1UVpxejlU?= =?big5?B?OGpXSDhHVFM4dExqeGV4b010NThaU2RNWlVFdHVVZTErMWN4Tm1RSCsrNFJPNG9L?= =?big5?B?SFVqQWc4RHlDLzYyclh6L0MrSyttSHZxT3RLZnQ1VDB1a2xHRDNvM2RTSE5LaFlS?= =?big5?B?TkM2NnM5MmdSN1QySGQxOVp2QmZXZnhoNlVCSEpPeXdkWmsyazFYOEwrdGZtczEx?= =?big5?B?R2o3a09qaXBRbjVvZXd5UEpheU1IZENpalFCSVlPNmlXdy9WVnRaaHJ1eStNTmN2?= =?big5?B?UW5tZ2t2NjJZT1Z0UWRwcWVaQmd1YnREdTFwYjdQSngrZnphR1d5aU0wVG4xbkRF?= =?big5?B?OXg2Ykp5VDRFNGRGbDRHOEJRelR2OEtzSTNtS3BlRHQrTU4yNmpKZ2dIN1IwcVZ5?= =?big5?B?LzlwcmtnUHJrMzMxVituUXFRY1BvdTJQTHQxdmlEVmJmcVJrUHppT1VPdWd3VnRn?= =?big5?B?bndmZ3JXclhuTXMxc0N6b2o5eEhKUmFreFNtdlUzR3QrRW9ZblhoczNGWHcwallt?= =?big5?B?R1ZZYWZjTkhkSnhCY3hJbDljbE5ubWJ4VnM0WHVqakViY1d0aXNqcERwQ1J6QS9t?= =?big5?B?ZlJuWXdEcjVmd2V2ZWFNZndaZ0FtMGI4ZXpNRlFvTGxOeVJYQTlUYWtvaitMNXMz?= =?big5?B?RnhxZWw3YmdLNjNjR0I0Qm13UWpOSTJQdGd4MnB2U3hFdllhZEVwbjFYb0FvelRh?= =?big5?B?SmVkemJVcGxsaTBoYkdvenRtV3JITTJSMis0UFgycmN1aENaeG0yU1hYbDBmUWMx?= =?big5?B?UUExRjB0TkhFVFNCVW41c0lma3F2ODJhYVowWE15YlVYQVNJK01xd1Zpb1ZMK2xJ?= =?big5?B?emJObzNaMjVjT2UycUYzaUF5dThpcHdhNnoxdnVFMHJ2Nm16VEhKS2tpcy8yWlhu?= =?big5?B?MllVbWpXRjI2SDVZbTRHc1RUZkpyL2V0ZE83UDQwYzdmVFMza2lEREZULytFVGdn?= =?big5?B?elRpMXo3MWYrUy9DcnMzd0d5dE9KYjJtTHVBVmRzV3NZMWRPNStYRmx3N0hMU3ZJ?= =?big5?Q?8CUnQ9pmgnGPf5ib?= MIME-Version: 1.0 X-OriginatorOrg: ami.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM5PR10MB1660.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 07ddce27-7e7d-44f0-d052-08dadc047cef X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Dec 2022 05:48:25.9792 (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: 8x21h8cTOtveLEpr2erCp/FlvJIGCY0COiI5kgVTKW/EPjTFZnp/qdEfDim2XNuIBPoo4ZHDasicSNeI5seNoQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR10MB6386 Content-Language: zh-TW Content-Type: text/plain; charset="big5" Content-Transfer-Encoding: base64 SGkgUmViZWNjYSwNCg0KVGhhbmtzIGZvciB5b3VyIHJlc3BvbnNlLiBJIHdpbGwgZml4ZWQgaXQg bmV4dC4NCg0KVGhhbmtzLA0KUmljaGFyZA0KDQotLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0K RnJvbTogUmViZWNjYSBDcmFuIDxyZWJlY2NhQHF1aWNpbmMuY29tPg0KU2VudDogMjAyMqZ+MTKk 6zik6SAxMjo1OCBQTQ0KVG86IGRldmVsQGVkazIuZ3JvdXBzLmlvOyBSaWNoYXJkIEhvICim86n6 qb4pIDxSaWNoYXJkSG9AYW1pLmNvbT4NCkNjOiBBbmRyZXcgRmlzaCA8YWZpc2hAYXBwbGUuY29t PjsgTGVpZiBMaW5kaG9sbSA8cXVpY19sbGluZGhvbEBxdWljaW5jLmNvbT47IE1pY2hhZWwgRCBL aW5uZXkgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPjsgTWljaGFlbCBLdWJhY2tpIDxtaWNo YWVsLmt1YmFja2lAbWljcm9zb2Z0LmNvbT47IFpoaWd1YW5nIExpdSA8emhpZ3VhbmcubGl1QGlu dGVsLmNvbT47IExpbWluZyBHYW8gPGdhb2xpbWluZ0BieW9zb2Z0LmNvbS5jbj47IFRvbnkgTG8g KMO5qveqUSkgPFRvbnlMb0BhbWkuY29tPg0KU3ViamVjdDogW0VYVEVSTkFMXSBSZTogW2VkazIt ZGV2ZWxdIFtQQVRDSCAxLzNdIFVzYk5ldHdvcmtQa2cvVXNiUm5kaXM6IEFkZCBVU0IgUk5ESVMg ZGV2aWNlcyBzdXBwb3J0DQoNCg0KKipDQVVUSU9OOiBUaGUgZS1tYWlsIGJlbG93IGlzIGZyb20g YW4gZXh0ZXJuYWwgc291cmNlLiBQbGVhc2UgZXhlcmNpc2UgY2F1dGlvbiBiZWZvcmUgb3Blbmlu ZyBhdHRhY2htZW50cywgY2xpY2tpbmcgbGlua3MsIG9yIGZvbGxvd2luZyBndWlkYW5jZS4qKg0K DQpTZW5kUm5kaXNTZXRNc2cgc3RpbGwgZG9lc24ndCBhcHBlYXIgdG8gZXZlciBiZSBjYWxsZWQu DQoNClRoZSBmb2xsb3dpbmcgZG9lc24ndCBsb29rIGNvcnJlY3QuIElmIFVzYkV0aFJlY2VpdmUg c2V0cyBEYXRhTGVuZ3RoIHRvDQowLCB0aGVuIGl0cyB2YWx1ZSB3b24ndCBiZSByZXNldCBvbiB0 aGUgbmV4dCBpdGVyYXRpb24sIHNvIGl0J2xsDQpzdWJzZXF1ZW50bHkgYmUgY2FsbGVkIHdpdGgg RGF0YUxlbmd0aD0wLCB3aGljaCBzaG91bGQgY2F1c2UNClVzYkV0aFJlY2VpdmUgdG8gcmV0dXJu IGFuIGVycm9yLg0KDQorICB3aGlsZSAoMSkgew0KKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+ VXNiRXRoUmVjZWl2ZSAoQ2RiLCBOaWMtPlVzYkV0aCwgKFZPSUQNCiopQnVsa0luRGF0YSwgJkRh dGFMZW5ndGgpOw0KKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgICAgYnJlYWs7 DQorICAgIH0NCisNCisgICAgTmljLT5SeEZyYW1lKys7DQorDQorICAgIGlmIChEYXRhTGVuZ3Ro ICE9IDApIHsNCisgICAgICBpZiAoRGF0YUxlbmd0aCA+IENwYi0+QnVmZmVyTGVuKSB7DQorICAg ICAgICBEYXRhTGVuZ3RoID0gKFVJTlROKUNwYi0+QnVmZmVyTGVuOw0KKyAgICAgIH0NCisNCisg ICAgICBDb3B5TWVtICgoVUlOVDggKikoVUlOVE4pQ3BiLT5CdWZmZXJBZGRyLCAoVUlOVDggKilC dWxrSW5EYXRhLA0KRGF0YUxlbmd0aCk7DQorDQorICAgICAgSGVhZGVyID0gKEV0aGVybmV0SGVh ZGVyICopQnVsa0luRGF0YTsNCisNCisgICAgICBEYi0+RnJhbWVMZW4gICAgICAgPSAoVUlOVDMy KURhdGFMZW5ndGg7DQorICAgICAgRGItPk1lZGlhSGVhZGVyTGVuID0gUFhFX01BQ19IRUFERVJf TEVOX0VUSEVSOw0KKw0KKyAgICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFBYRV9IV0FERFJf TEVOX0VUSEVSOyBJbmRleCsrKSB7DQorICAgICAgICBpZiAoSGVhZGVyLT5EZXN0QWRkcltJbmRl eF0gIT0gTmljLT5DdXJyZW50Tm9kZUFkZHJlc3NbSW5kZXhdKSB7DQorICAgICAgICAgIGJyZWFr Ow0KKyAgICAgICAgfQ0KKyAgICAgIH0NCisNCisgICAgICBpZiAoSW5kZXggPj0gUFhFX0hXQURE Ul9MRU5fRVRIRVIpIHsNCisgICAgICAgIEZyYW1lVHlwZSA9IFBYRV9GUkFNRV9UWVBFX1VOSUNB U1Q7DQorICAgICAgfSBlbHNlIHsNCisgICAgICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFBY RV9IV0FERFJfTEVOX0VUSEVSOyBJbmRleCsrKSB7DQorICAgICAgICAgIGlmIChIZWFkZXItPkRl c3RBZGRyW0luZGV4XSAhPQ0KTmljLT5Ccm9hZGNhc3ROb2RlQWRkcmVzc1tJbmRleF0pIHsNCisg ICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAg aWYgKEluZGV4ID49IFBYRV9IV0FERFJfTEVOX0VUSEVSKSB7DQorICAgICAgICAgIEZyYW1lVHlw ZSA9IFBYRV9GUkFNRV9UWVBFX0JST0FEQ0FTVDsNCisgICAgICAgIH0gZWxzZSB7DQorICAgICAg ICAgIGlmICgoSGVhZGVyLT5EZXN0QWRkclswXSAmIDEpID09IDEpIHsNCisgICAgICAgICAgICBG cmFtZVR5cGUgPSBQWEVfRlJBTUVfVFlQRV9GSUxURVJFRF9NVUxUSUNBU1Q7DQorICAgICAgICAg IH0gZWxzZSB7DQorICAgICAgICAgICAgRnJhbWVUeXBlID0gUFhFX0ZSQU1FX1RZUEVfUFJPTUlT Q1VPVVM7DQorICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICB9DQoNCg0KDQpPbiAxMi83 LzIyIDIwOjQ0LCBSaWNoYXJkSG8gW6bzqfqpvl0gdmlhIGdyb3Vwcy5pbyB3cm90ZToNCj4gVGhp cyBkcml2ZXIgcHJvdmlkZXMgVUVGSSBkcml2ZXIgZm9yIFVTQiBSTkRJUyBkZXZpY2UNCj4NCj4g U2lnbmVkLW9mZi1ieTogUmljaGFyZCBIbyA8cmljaGFyZGhvQGFtaS5jb20+DQo+IENjOiBBbmRy ZXcgRmlzaCA8YWZpc2hAYXBwbGUuY29tPg0KPiBDYzogTGVpZiBMaW5kaG9sbSA8cXVpY19sbGlu ZGhvbEBxdWljaW5jLmNvbT4NCj4gQ2M6IE1pY2hhZWwgRCBLaW5uZXkgPG1pY2hhZWwuZC5raW5u ZXlAaW50ZWwuY29tPg0KPiBDYzogTWljaGFlbCBLdWJhY2tpIDxtaWNoYWVsLmt1YmFja2lAbWlj cm9zb2Z0LmNvbT4NCj4gQ2M6IFpoaWd1YW5nIExpdSA8emhpZ3VhbmcubGl1QGludGVsLmNvbT4N Cj4gQ2M6IExpbWluZyBHYW8gPGdhb2xpbWluZ0BieW9zb2Z0LmNvbS5jbj4NCj4gUmV2aWV3ZWQt Ynk6IFRvbnkgTG8gPHRvbnlsb0BhbWkuY29tPg0KPiAtLS0NCj4gICBVc2JOZXR3b3JrUGtnL0Nv bmZpZy9Vc2JOZXR3b3JrUGtnLmluYy5kc2MgICAgfCAgICA5ICsNCj4gICAuLi4vQ29uZmlnL1Vz Yk5ldHdvcmtQa2dDb21wb25lbnRzRHhlLmluYy5kc2MgfCAgIDIwICsNCj4gICAuLi4vQ29uZmln L1VzYk5ldHdvcmtQa2dDb21wb25lbnRzRHhlLmluYy5mZGYgfCAgIDIwICsNCj4gICAuLi4vQ29u ZmlnL1VzYk5ldHdvcmtQa2dEZWZpbmVzLmluYy5kc2MgICAgICAgfCAgIDIzICsNCj4gICAuLi4v UHJvdG9jb2wvRWRrSUlVc2JFdGhlcm5ldFByb3RvY29sLmggICAgICAgfCAgODc0ICsrKysrKysr DQo+ICAgVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL0NvbXBvbmVudE5hbWUuYyAgIHwgIDI2 MyArKysNCj4gICBVc2JOZXR3b3JrUGtnL05ldHdvcmtDb21tb24vRHJpdmVyQmluZGluZy5jICAg fCAgNTgzICsrKysrKw0KPiAgIFVzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1vbi9Ecml2ZXJCaW5k aW5nLmggICB8ICAyNjUgKysrDQo+ICAgVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL05ldHdv cmtDb21tb24uaW5mIHwgICA0NCArDQo+ICAgVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL1B4 ZUZ1bmN0aW9uLmMgICAgIHwgMTc0NyArKysrKysrKysrKysrKysrDQo+ICAgVXNiTmV0d29ya1Br Zy9SZWFkTWUubWQgICAgICAgICAgICAgICAgICAgICAgIHwgICA2NSArDQo+ICAgVXNiTmV0d29y a1BrZy9SZWxlYXNlTm90ZXMubWQgICAgICAgICAgICAgICAgIHwgICAxMSArDQo+ICAgVXNiTmV0 d29ya1BrZy9Vc2JOZXR3b3JrUGtnLmRlYyAgICAgICAgICAgICAgIHwgICAzNiArDQo+ICAgVXNi TmV0d29ya1BrZy9Vc2JSbmRpcy9Db21wb25lbnROYW1lLmMgICAgICAgIHwgIDE3MiArKw0KPiAg IFVzYk5ldHdvcmtQa2cvVXNiUm5kaXMvVXNiUm5kaXMuYyAgICAgICAgICAgICB8ICA4ODYgKysr KysrKysrDQo+ICAgVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpcy5oICAgICAgICAgICAg IHwgIDU5NCArKysrKysNCj4gICBVc2JOZXR3b3JrUGtnL1VzYlJuZGlzL1VzYlJuZGlzLmluZiAg ICAgICAgICAgfCAgIDQyICsNCj4gICBVc2JOZXR3b3JrUGtnL1VzYlJuZGlzL1VzYlJuZGlzRnVu Y3Rpb24uYyAgICAgfCAxNzU4ICsrKysrKysrKysrKysrKysrDQo+ICAgMTggZmlsZXMgY2hhbmdl ZCwgNzQxMiBpbnNlcnRpb25zKCspDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IFVzYk5ldHdvcmtQ a2cvQ29uZmlnL1VzYk5ldHdvcmtQa2cuaW5jLmRzYw0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBV c2JOZXR3b3JrUGtnL0NvbmZpZy9Vc2JOZXR3b3JrUGtnQ29tcG9uZW50c0R4ZS5pbmMuZHNjDQo+ ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IFVzYk5ldHdvcmtQa2cvQ29uZmlnL1VzYk5ldHdvcmtQa2dD b21wb25lbnRzRHhlLmluYy5mZGYNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNiTmV0d29ya1Br Zy9Db25maWcvVXNiTmV0d29ya1BrZ0RlZmluZXMuaW5jLmRzYw0KPiAgIGNyZWF0ZSBtb2RlIDEw MDY0NCBVc2JOZXR3b3JrUGtnL0luY2x1ZGUvUHJvdG9jb2wvRWRrSUlVc2JFdGhlcm5ldFByb3Rv Y29sLmgNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9u L0NvbXBvbmVudE5hbWUuYw0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JOZXR3b3JrUGtnL05l dHdvcmtDb21tb24vRHJpdmVyQmluZGluZy5jDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IFVzYk5l dHdvcmtQa2cvTmV0d29ya0NvbW1vbi9Ecml2ZXJCaW5kaW5nLmgNCj4gICBjcmVhdGUgbW9kZSAx MDA2NDQgVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL05ldHdvcmtDb21tb24uaW5mDQo+ICAg Y3JlYXRlIG1vZGUgMTAwNjQ0IFVzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1vbi9QeGVGdW5jdGlv bi5jDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IFVzYk5ldHdvcmtQa2cvUmVhZE1lLm1kDQo+ICAg Y3JlYXRlIG1vZGUgMTAwNjQ0IFVzYk5ldHdvcmtQa2cvUmVsZWFzZU5vdGVzLm1kDQo+ICAgY3Jl YXRlIG1vZGUgMTAwNjQ0IFVzYk5ldHdvcmtQa2cvVXNiTmV0d29ya1BrZy5kZWMNCj4gICBjcmVh dGUgbW9kZSAxMDA2NDQgVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Db21wb25lbnROYW1lLmMNCj4g ICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpcy5jDQo+ ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IFVzYk5ldHdvcmtQa2cvVXNiUm5kaXMvVXNiUm5kaXMuaA0K PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JOZXR3b3JrUGtnL1VzYlJuZGlzL1VzYlJuZGlzLmlu Zg0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JOZXR3b3JrUGtnL1VzYlJuZGlzL1VzYlJuZGlz RnVuY3Rpb24uYw0KPg0KPiBkaWZmIC0tZ2l0IGEvVXNiTmV0d29ya1BrZy9Db25maWcvVXNiTmV0 d29ya1BrZy5pbmMuZHNjIGIvVXNiTmV0d29ya1BrZy9Db25maWcvVXNiTmV0d29ya1BrZy5pbmMu ZHNjDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLmIxYzFiZWMx NjMNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9Vc2JOZXR3b3JrUGtnL0NvbmZpZy9Vc2JOZXR3 b3JrUGtnLmluYy5kc2MNCj4gQEAgLTAsMCArMSw5IEBADQo+ICsjIyBAZmlsZQ0KPiArIyBHbG9i YWwgRFNDIGRlZmluaXRpb25zIHRvIGJlIGluY2x1ZGVkIGludG8gcHJvamVjdCBEU0MgZmlsZS4N Cj4gKyMNCj4gKyMgQ29weXJpZ2h0IChjKSAyMDIyLCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVy bmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKyMgU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gKyMjDQo+ICsNCj4gK1tDb21wb25l bnRzLlg2NF0NCj4gKyFpbmNsdWRlIFVzYk5ldHdvcmtQa2cvQ29uZmlnL1VzYk5ldHdvcmtQa2dD b21wb25lbnRzRHhlLmluYy5kc2MNCj4gZGlmZiAtLWdpdCBhL1VzYk5ldHdvcmtQa2cvQ29uZmln L1VzYk5ldHdvcmtQa2dDb21wb25lbnRzRHhlLmluYy5kc2MgYi9Vc2JOZXR3b3JrUGtnL0NvbmZp Zy9Vc2JOZXR3b3JrUGtnQ29tcG9uZW50c0R4ZS5pbmMuZHNjDQo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLjc0YjVhM2MxYjMNCj4gLS0tIC9kZXYvbnVsbA0KPiAr KysgYi9Vc2JOZXR3b3JrUGtnL0NvbmZpZy9Vc2JOZXR3b3JrUGtnQ29tcG9uZW50c0R4ZS5pbmMu ZHNjDQo+IEBAIC0wLDAgKzEsMjAgQEANCj4gKyMjIEBmaWxlDQo+ICsjIExpc3Qgb2YgQ29yZSBD b21wb25lbnRzLg0KPiArIw0KPiArIyBDb3B5cmlnaHQgKGMpIDIwMjIsIEFtZXJpY2FuIE1lZ2F0 cmVuZHMgSW50ZXJuYXRpb25hbCBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArIyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiArIyMNCj4gKw0K PiArICBVc2JOZXR3b3JrUGtnL05ldHdvcmtDb21tb24vTmV0d29ya0NvbW1vbi5pbmYNCj4gKw0K PiArIWlmIGdVc2JOZXR3b3JrUGtnVG9rZW5TcGFjZUd1aWQuVXNiQ2RjRWNtU3VwcG9ydA0KPiAr ICBVc2JOZXR3b3JrUGtnL1VzYkNkY0VjbS9Vc2JDZGNFY20uaW5mDQo+ICshZW5kaWYNCj4gKw0K PiArIWlmIGdVc2JOZXR3b3JrUGtnVG9rZW5TcGFjZUd1aWQuVXNiQ2RjTmNtU3VwcG9ydA0KPiAr ICBVc2JOZXR3b3JrUGtnL1VzYkNkY05jbS9Vc2JDZGNOY20uaW5mDQo+ICshZW5kaWYNCj4gKw0K PiArIWlmIGdVc2JOZXR3b3JrUGtnVG9rZW5TcGFjZUd1aWQuVXNiUm5kaXNTdXBwb3J0DQo+ICsg IFVzYk5ldHdvcmtQa2cvVXNiUm5kaXMvVXNiUm5kaXMuaW5mDQo+ICshZW5kaWYNCj4gZGlmZiAt LWdpdCBhL1VzYk5ldHdvcmtQa2cvQ29uZmlnL1VzYk5ldHdvcmtQa2dDb21wb25lbnRzRHhlLmlu Yy5mZGYgYi9Vc2JOZXR3b3JrUGtnL0NvbmZpZy9Vc2JOZXR3b3JrUGtnQ29tcG9uZW50c0R4ZS5p bmMuZmRmDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLjVkNjI5 M2EwZWQNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9Vc2JOZXR3b3JrUGtnL0NvbmZpZy9Vc2JO ZXR3b3JrUGtnQ29tcG9uZW50c0R4ZS5pbmMuZmRmDQo+IEBAIC0wLDAgKzEsMjAgQEANCj4gKyMj IEBmaWxlDQo+ICsjIExpc3Qgb2YgQ29yZSBDb21wb25lbnRzLg0KPiArIw0KPiArIyBDb3B5cmln aHQgKGMpIDIwMjIsIEFtZXJpY2FuIE1lZ2F0cmVuZHMgSW50ZXJuYXRpb25hbCBMTEMuIEFsbCBy aWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTIt Q2xhdXNlLVBhdGVudA0KPiArIyMNCj4gKw0KPiArICBJTkYgVXNiTmV0d29ya1BrZy9OZXR3b3Jr Q29tbW9uL05ldHdvcmtDb21tb24uaW5mDQo+ICsNCj4gKyFpZiBnVXNiTmV0d29ya1BrZ1Rva2Vu U3BhY2VHdWlkLlVzYkNkY0VjbVN1cHBvcnQNCj4gKyAgSU5GIFVzYk5ldHdvcmtQa2cvVXNiQ2Rj RWNtL1VzYkNkY0VjbS5pbmYNCj4gKyFlbmRpZg0KPiArDQo+ICshaWYgZ1VzYk5ldHdvcmtQa2dU b2tlblNwYWNlR3VpZC5Vc2JDZGNOY21TdXBwb3J0DQo+ICsgIElORiBVc2JOZXR3b3JrUGtnL1Vz YkNkY05jbS9Vc2JDZGNOY20uaW5mDQo+ICshZW5kaWYNCj4gKw0KPiArIWlmIGdVc2JOZXR3b3Jr UGtnVG9rZW5TcGFjZUd1aWQuVXNiUm5kaXNTdXBwb3J0DQo+ICsgIElORiBVc2JOZXR3b3JrUGtn L1VzYlJuZGlzL1VzYlJuZGlzLmluZg0KPiArIWVuZGlmDQo+IGRpZmYgLS1naXQgYS9Vc2JOZXR3 b3JrUGtnL0NvbmZpZy9Vc2JOZXR3b3JrUGtnRGVmaW5lcy5pbmMuZHNjIGIvVXNiTmV0d29ya1Br Zy9Db25maWcvVXNiTmV0d29ya1BrZ0RlZmluZXMuaW5jLmRzYw0KPiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi4yYzFmMjU2ODViDQo+IC0tLSAvZGV2L251bGwNCj4g KysrIGIvVXNiTmV0d29ya1BrZy9Db25maWcvVXNiTmV0d29ya1BrZ0RlZmluZXMuaW5jLmRzYw0K PiBAQCAtMCwwICsxLDIzIEBADQo+ICsjIyBAZmlsZQ0KPiArIyBHbG9iYWwgc3dpdGNoZXMgZW5h YmxlL2Rpc2FibGUgcHJvamVjdCBmZWF0dXJlcy4NCj4gKyMNCj4gKyMgQ29weXJpZ2h0IChjKSAy MDIyLCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzIHJl c2VydmVkLjxCUj4NCj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1Q YXRlbnQNCj4gKyMjDQo+ICsNCj4gK1tEZWZpbmVzXQ0KPiArIWlmICJJQTMyIiBpbiAkKEFSQ0gp ICYmICJYNjQiIGluICQoQVJDSCkNCj4gKyAgREVGSU5FIFBFST1JQTMyDQo+ICsgIERFRklORSBE WEU9WDY0DQo+ICshZWxzZQ0KPiArICBERUZJTkUgUEVJPUNPTU1PTg0KPiArICBERUZJTkUgRFhF PUNPTU1PTg0KPiArIWVuZGlmDQo+ICsNCj4gK1tQYWNrYWdlc10NCj4gKyAgVXNiTmV0d29ya1Br Zy9Vc2JOZXR3b3JrUGtnLmRlYw0KPiArDQo+ICtbUGNkc0ZlYXR1cmVGbGFnXQ0KPiArICBnVXNi TmV0d29ya1BrZ1Rva2VuU3BhY2VHdWlkLlVzYkNkY0VjbVN1cHBvcnR8RkFMU0UNCj4gKyAgZ1Vz Yk5ldHdvcmtQa2dUb2tlblNwYWNlR3VpZC5Vc2JDZGNOY21TdXBwb3J0fEZBTFNFDQo+ICsgIGdV c2JOZXR3b3JrUGtnVG9rZW5TcGFjZUd1aWQuVXNiUm5kaXNTdXBwb3J0fFRSVUUNCj4gZGlmZiAt LWdpdCBhL1VzYk5ldHdvcmtQa2cvSW5jbHVkZS9Qcm90b2NvbC9FZGtJSVVzYkV0aGVybmV0UHJv dG9jb2wuaCBiL1VzYk5ldHdvcmtQa2cvSW5jbHVkZS9Qcm90b2NvbC9FZGtJSVVzYkV0aGVybmV0 UHJvdG9jb2wuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi41 MmYxNzkzZmViDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvVXNiTmV0d29ya1BrZy9JbmNsdWRl L1Byb3RvY29sL0Vka0lJVXNiRXRoZXJuZXRQcm90b2NvbC5oDQo+IEBAIC0wLDAgKzEsODc0IEBA DQo+ICsvKiogQGZpbGUNCj4gKyAgSGVhZGVyIGZpbGUgY29udGFpbnMgY29kZSBmb3IgVVNCIEV0 aGVybmV0IFByb3RvY29sDQo+ICsgIGRlZmluaXRpb25zDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChj KSAyMDIyLCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRz IHJlc2VydmVkLjxCUj4NCj4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVz ZS1QYXRlbnQNCj4gKyoqLw0KPiArDQo+ICsjaWZuZGVmIF9FREtJSV9VU0JfRVRIRVJORVRfUFJP VE9DT0xfSA0KPiArI2RlZmluZSBfRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MX0gNCj4gKw0K PiArI2RlZmluZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0xfR1VJRCBcDQo+ICsgICAgezB4 OGQ4OTY5Y2MsIDB4ZmViMCwgMHg0MzAzLCB7MHhiMiwgMHgxYSwgMHgxZiwgMHgxMSwgMHg2Ziwg MHgzOCwgMHg1NiwgMHg0M319DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IF9FREtJSV9VU0JfRVRI RVJORVRfUFJPVE9DT0wgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MOw0KPiArDQo+ICsjZGVm aW5lIFVTQl9DRENfQ0xBU1MgICAgICAgICAgMHgwMg0KPiArI2RlZmluZSBVU0JfQ0RDX0FDTV9T VUJDTEFTUyAgIDB4MDINCj4gKyNkZWZpbmUgVVNCX0NEQ19FQ01fU1VCQ0xBU1MgICAweDA2DQo+ ICsjZGVmaW5lIFVTQl9DRENfTkNNX1NVQkNMQVNTICAgMHgwRA0KPiArI2RlZmluZSBVU0JfQ0RD X0RBVEFfQ0xBU1MgICAgIDB4MEENCj4gKyNkZWZpbmUgVVNCX0NEQ19EQVRBX1NVQkNMQVNTICAw eDAwDQo+ICsjZGVmaW5lIFVTQl9OT19DTEFTU19QUk9UT0NPTCAgMHgwMA0KPiArI2RlZmluZSBV U0JfTkNNX05UQl9QUk9UT0NPTCAgIDB4MDENCj4gKyNkZWZpbmUgVVNCX1ZFTkRPUl9QUk9UT0NP TCAgICAweEZGDQo+ICsNCj4gKy8vIFR5cGUgVmFsdWVzIGZvciB0aGUgRGVzY3JpcHRvclR5cGUg RmllbGQNCj4gKyNkZWZpbmUgQ1NfSU5URVJGQUNFICAweDI0DQo+ICsjZGVmaW5lIENTX0VORFBP SU5UICAgMHgyNQ0KPiArDQo+ICsvLyBEZXNjcmlwdG9yIFN1YlR5cGUgaW4gRnVuY3Rpb25hbCBE ZXNjcmlwdG9ycw0KPiArI2RlZmluZSBIRUFERVJfRlVOX0RFU0NSSVBUT1IgICAgMHgwMA0KPiAr I2RlZmluZSBVTklPTl9GVU5fREVTQ1JJUFRPUiAgICAgMHgwNg0KPiArI2RlZmluZSBFVEhFUk5F VF9GVU5fREVTQ1JJUFRPUiAgMHgwRg0KPiArDQo+ICsjZGVmaW5lIE1BWF9MQU5fSU5URVJGQUNF ICAweDEwDQo+ICsNCj4gKy8vIFRhYmxlIDIwOiBDbGFzcy1TcGVjaWZpYyBOb3RpZmljYXRpb24g Q29kZXMNCj4gKyNkZWZpbmUgVVNCX0NEQ19ORVRXT1JLX0NPTk5FQ1RJT04gIDB4MDANCj4gKw0K PiArLy8gNi4zLjEgTmV0d29ya0Nvbm5lY3Rpb24NCj4gKyNkZWZpbmUgTkVUV09SS19DT05ORUNU RUQgICAweDAxDQo+ICsjZGVmaW5lIE5FVFdPUktfRElTQ09OTkVDVCAgMHgwMA0KPiArDQo+ICsv LyBVU0IgSGVhZGVyIGZ1bmN0aW9uYWwgRGVzY3JpcHRvcg0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0K PiArICBVSU5UOCAgICAgRnVuY3Rpb25MZW5ndGg7DQo+ICsgIFVJTlQ4ICAgICBEZXNjcmlwdG9y VHlwZTsNCj4gKyAgVUlOVDggICAgIERlc2NyaXB0b3JTdWJ0eXBlOw0KPiArICBVSU5UMTYgICAg QmNkQ2RjOw0KPiArfSBVU0JfSEVBREVSX0ZVTl9ERVNDUklQVE9SOw0KPiArDQo+ICsvLyBVU0Ig VW5pb24gRnVuY3Rpb25hbCBEZXNjcmlwdG9yDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJ TlQ4ICAgIEZ1bmN0aW9uTGVuZ3RoOw0KPiArICBVSU5UOCAgICBEZXNjcmlwdG9yVHlwZTsNCj4g KyAgVUlOVDggICAgRGVzY3JpcHRvclN1YnR5cGU7DQo+ICsgIFVJTlQ4ICAgIE1hc3RlckludGVy ZmFjZTsNCj4gKyAgVUlOVDggICAgU2xhdmVJbnRlcmZhY2U7DQo+ICt9IFVTQl9VTklPTl9GVU5f REVTQ1JJUFRPUjsNCj4gKw0KPiArLy8gVVNCIEV0aGVybmV0IEZ1bmN0aW9uYWwgRGVzY3JpcHRv cg0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UOCAgICAgRnVuY3Rpb25MZW5ndGg7DQo+ ICsgIFVJTlQ4ICAgICBEZXNjcmlwdG9yVHlwZTsNCj4gKyAgVUlOVDggICAgIERlc2NyaXB0b3JT dWJ0eXBlOw0KPiArICBVSU5UOCAgICAgTWFjQWRkcmVzczsNCj4gKyAgVUlOVDMyICAgIEV0aGVy bmV0U3RhdGlzdGljczsNCj4gKyAgVUlOVDE2ICAgIE1heFNlZ21lbnRTaXplOw0KPiArICBVSU5U MTYgICAgTnVtYmVyTWNGaWx0ZXJzOw0KPiArICBVSU5UOCAgICAgTnVtYmVyUG93ZXJGaWx0ZXJz Ow0KPiArfSBVU0JfRVRIRVJORVRfRlVOX0RFU0NSSVBUT1I7DQo+ICsNCj4gK3R5cGVkZWYgc3Ry dWN0IHsNCj4gKyAgVUlOVDMyICAgIFVzQml0UmF0ZTsNCj4gKyAgVUlOVDMyICAgIERzQml0UmF0 ZTsNCj4gK30gVVNCX0NPTk5FQ1RfU1BFRURfQ0hBTkdFOw0KPiArDQo+ICsvLyBSZXF1ZXN0IFR5 cGUgQ29kZXMgZm9yIFVTQiBFdGhlcm5ldA0KPiArI2RlZmluZSBVU0JfRVRIRVJORVRfR0VUX1JF UV9UWVBFICAweEExDQo+ICsjZGVmaW5lIFVTQl9FVEhFUk5FVF9TRVRfUkVRX1RZUEUgIDB4MjEN Cj4gKw0KPiArLy8gQ2xhc3MtU3BlY2lmaWMgUmVxdWVzdCBDb2RlcyBmb3IgRXRoZXJuZXQgc3Vi Y2xhc3MNCj4gKy8vIFVTQiBFQ00gMS4yIHNwZWNpZmljYXRpb24sIFNlY3Rpb24gNi4yDQo+ICsj ZGVmaW5lIFNFVF9FVEhfTVVMVElDQVNUX0ZJTFRFUlNfUkVRICAgICAgICAgICAgICAgIDB4NDAN Cj4gKyNkZWZpbmUgU0VUX0VUSF9QT1dFUl9NQU5BR0VNRU5UX1BBVFRFUk5fRklMVEVSX1JFUSAg MHg0MQ0KPiArI2RlZmluZSBHRVRfRVRIX1BPV0VSX01BTkFHRU1FTlRfUEFUVEVSTl9GSUxURVJf UkVRICAweDQyDQo+ICsjZGVmaW5lIFNFVF9FVEhfUEFDS0VUX0ZJTFRFUl9SRVEgICAgICAgICAg ICAgICAgICAgIDB4NDMNCj4gKyNkZWZpbmUgR0VUX0VUSF9TVEFUSVNUSUNfUkVRICAgICAgICAg ICAgICAgICAgICAgICAgMHg0NA0KPiArDQo+ICsvLyBVU0IgRUNNIGNvbW1hbmQgcmVxdWVzdCBs ZW5ndGgNCj4gKyNkZWZpbmUgVVNCX0VUSF9QT1dFUl9GSUxURVJfTEVOR1RIICAgMiAvLyBTZWN0 aW9uIDYuMi4zDQo+ICsjZGVmaW5lIFVTQl9FVEhfUEFDS0VUX0ZJTFRFUl9MRU5HVEggIDAgLy8g U2VjdGlvbiA2LjIuNA0KPiArI2RlZmluZSBVU0JfRVRIX1NUQVRJU1RJQyAgICAgICAgICAgICA0 IC8vIFNlY3Rpb24gNi4yLjUNCj4gKw0KPiArLy8gVVNCIEV0aGVybmV0IFBhY2tldCBGaWx0ZXIg Qml0bWFwDQo+ICsvLyBVU0IgRUNNIDEuMiBzcGVjaWZpY2F0aW9uLCBTZWN0aW9uIDYuMi40DQo+ ICsjZGVmaW5lIFVTQl9FVEhfUEFDS0VUX1RZUEVfUFJPTUlTQ1VPVVMgICAgQklUMA0KPiArI2Rl ZmluZSBVU0JfRVRIX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1QgIEJJVDENCj4gKyNkZWZpbmUg VVNCX0VUSF9QQUNLRVRfVFlQRV9ESVJFQ1RFRCAgICAgICBCSVQyDQo+ICsjZGVmaW5lIFVTQl9F VEhfUEFDS0VUX1RZUEVfQlJPQURDQVNUICAgICAgQklUMw0KPiArI2RlZmluZSBVU0JfRVRIX1BB Q0tFVF9UWVBFX01VTFRJQ0FTVCAgICAgIEJJVDQNCj4gKw0KPiArLy8gVVNCIEV0aGVybmV0IFN0 YXRpc3RpY3MgRmVhdHVyZSBTZWxlY3RvciBDb2Rlcw0KPiArLy8gVVNCIEVDTSAxLjIgc3BlY2lm aWNhdGlvbiwgU2VjdGlvbiA2LjIuNQ0KPiArI2RlZmluZSBVU0JfRVRIX1hNSVRfT0sgICAgICAg ICAgICAgICAgIDB4MDENCj4gKyNkZWZpbmUgVVNCX0VUSF9SQ1ZfT0sgICAgICAgICAgICAgICAg ICAweDAyDQo+ICsjZGVmaW5lIFVTQl9FVEhfWE1JVF9FUlJPUiAgICAgICAgICAgICAgMHgwMw0K PiArI2RlZmluZSBVU0JfRVRIX1JDVl9FUlJPUiAgICAgICAgICAgICAgIDB4MDQNCj4gKyNkZWZp bmUgVVNCX0VUSF9SQ1ZfTk9fQlVGRkVSICAgICAgICAgICAweDA1DQo+ICsjZGVmaW5lIFVTQl9F VEhfRElSRUNURURfQllURVNfWE1JVCAgICAgMHgwNg0KPiArI2RlZmluZSBVU0JfRVRIX0RJUkVD VEVEX0ZSQU1FU19YTUlUICAgIDB4MDcNCj4gKyNkZWZpbmUgVVNCX0VUSF9NVUxUSUNBU1RfQllU RVNfWE1JVCAgICAweDA4DQo+ICsjZGVmaW5lIFVTQl9FVEhfTVVMVElDQVNUX0ZSQU1FU19YTUlU ICAgMHgwOQ0KPiArI2RlZmluZSBVU0JfRVRIX0JST0FEQ0FTVF9CWVRFU19YTUlUICAgIDB4MEEN Cj4gKyNkZWZpbmUgVVNCX0VUSF9CUk9BRENBU1RfRlJBTUVTX1hNSVQgICAweDBCDQo+ICsjZGVm aW5lIFVTQl9FVEhfRElSRUNURURfQllURVNfUkNWICAgICAgMHgwQw0KPiArI2RlZmluZSBVU0Jf RVRIX0RJUkVDVEVEX0ZSQU1FU19SQ1YgICAgIDB4MEQNCj4gKyNkZWZpbmUgVVNCX0VUSF9NVUxU SUNBU1RfQllURVNfUkNWICAgICAweDBFDQo+ICsjZGVmaW5lIFVTQl9FVEhfTVVMVElDQVNUX0ZS QU1FU19SQ1YgICAgMHgwRg0KPiArI2RlZmluZSBVU0JfRVRIX0JST0FEQ0FTVF9CWVRFU19SQ1Yg ICAgIDB4MTANCj4gKyNkZWZpbmUgVVNCX0VUSF9CUk9BRENBU1RfRlJBTUVTX1JDViAgICAweDEx DQo+ICsjZGVmaW5lIFVTQl9FVEhfUkNWX0NSQ19FUlJPUiAgICAgICAgICAgMHgxMg0KPiArI2Rl ZmluZSBVU0JfRVRIX1RSQU5TTUlUX1FVRVVFX0xFTkdUSCAgIDB4MTMNCj4gKyNkZWZpbmUgVVNC X0VUSF9SQ1ZfRVJST1JfQUxJR05NRU5UICAgICAweDE0DQo+ICsjZGVmaW5lIFVTQl9FVEhfWE1J VF9PTkVfQ09MTElTSU9OICAgICAgMHgxNQ0KPiArI2RlZmluZSBVU0JfRVRIX1hNSVRfTU9SRV9D T0xMSVNJT05TICAgIDB4MTYNCj4gKyNkZWZpbmUgVVNCX0VUSF9YTUlUX0RFRkVSUkVEICAgICAg ICAgICAweDE3DQo+ICsjZGVmaW5lIFVTQl9FVEhfWE1JVF9NQVhfQ09MTElTSU9OUyAgICAgMHgx OA0KPiArI2RlZmluZSBVU0JfRVRIX1JDVl9PVkVSUlVOICAgICAgICAgICAgIDB4MTkNCj4gKyNk ZWZpbmUgVVNCX0VUSF9YTUlUX1VOREVSUlVOICAgICAgICAgICAweDFBDQo+ICsjZGVmaW5lIFVT Ql9FVEhfWE1JVF9IRUFSVEJFQVRfRkFJTFVSRSAgMHgxQg0KPiArI2RlZmluZSBVU0JfRVRIX1hN SVRfVElNRVNfQ1JTX0xPU1QgICAgIDB4MUMNCj4gKyNkZWZpbmUgVVNCX0VUSF9YTUlUX0xBVEVf Q09MTElTSU9OUyAgICAweDFEDQo+ICsNCj4gKy8vIE5JQyBJbmZvcm1hdGlvbg0KPiArdHlwZWRl ZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgU2lnbmF0dXJl Ow0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICAgKlVzYkV0aDsNCj4gKyAgVUlO VDE2ICAgICAgICAgICAgICAgICAgICAgICAgIEludGVycnVwT3BGbGFnOw0KPiArICBVSU5UNjQg ICAgICAgICAgICAgICAgICAgICAgICAgTWFwcGVkQWRkcjsNCj4gKyAgUFhFX01BQ19BRERSICAg ICAgICAgICAgICAgICAgIE1jYXN0TGlzdFtNQVhfTUNBU1RfQUREUkVTU19DTlRdOw0KPiArICBV SU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgTWNhc3RDb3VudDsNCj4gKyAgVUlOVDY0ICAg ICAgICAgICAgICAgICAgICAgICAgIE1lZGlhSGVhZGVyW01BWF9YTUlUX0JVRkZFUlNdOw0KPiAr ICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgVHhCdWZmZXJDb3VudDsNCj4gKyAgVUlO VDE2ICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlOw0KPiArICBCT09MRUFOICAgICAgICAg ICAgICAgICAgICAgICAgQ2FuVHJhbnNtaXQ7DQo+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAg ICAgICAgICBDYW5SZWNlaXZlOw0KPiArICBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgICAg UmVjZWl2ZVN0YXR1czsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgIFJ4Rmls dGVyOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgUnhGcmFtZTsNCj4gKyAg VUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIFR4RnJhbWU7DQo+ICsgIFVJTlQxNiAgICAg ICAgICAgICAgICAgICAgICAgICBOZXR3b3JrQ29ubmVjdDsNCj4gKyAgVUlOVDggICAgICAgICAg ICAgICAgICAgICAgICAgIENhYmxlRGV0ZWN0Ow0KPiArICBVSU5UMTYgICAgICAgICAgICAgICAg ICAgICAgICAgTWF4U2VnbWVudFNpemU7DQo+ICsgIEVGSV9NQUNfQUREUkVTUyAgICAgICAgICAg ICAgICBNYWNBZGRyOw0KPiArICBQWEVfQ1BCX1NUQVJUXzMxICAgICAgICAgICAgICAgUHhlU3Rh cnQ7DQo+ICsgIFBYRV9DUEJfSU5JVElBTElaRSAgICAgICAgICAgICBQeGVJbml0Ow0KPiArICBV SU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgUGVybU5vZGVBZGRyZXNzW1BYRV9NQUNfTEVO R1RIXTsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnROb2RlQWRk cmVzc1tQWEVfTUFDX0xFTkdUSF07DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAg ICBCcm9hZGNhc3ROb2RlQWRkcmVzc1tQWEVfTUFDX0xFTkdUSF07DQo+ICsgIEVGSV9VU0JfREVW SUNFX1JFUVVFU1QgICAgICAgICBSZXF1ZXN0Ow0KPiArfSBOSUNfREFUQTsNCj4gKw0KPiArI2Rl ZmluZSBOSUNfREFUQV9TSUdOQVRVUkUgIFNJR05BVFVSRV8zMignbicsICdpJywgJ2MnLCAnZCcp DQo+ICsjZGVmaW5lIE5JQ19EQVRBX0ZST01fRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MKGEp ICBDUiAoYSwgTklDX0RBVEEsIFVzYkV0aCwgTklDX0RBVEFfU0lHTkFUVVJFKQ0KPiArDQo+ICsv KioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBvcGVyYXRpb25h bCBzdGF0ZSBvZiB0aGUgVU5ESS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRl ciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMg IEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiAr DQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVk IHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1l b3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVW SUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4N Cj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJz IGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAg ICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICso RUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9HRVRfU1RBVEUpKA0KPiArICBJTiAgUFhF X0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAgICpOaWMNCj4gKyAgKTsNCj4gKw0K PiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgVU5ESSBvcGVy YXRpb25hbCBzdGF0ZSBmcm9tIHN0b3BwZWQgdG8gc3RhcnRlZC4NCj4gKw0KPiArICBAcGFyYW1b aW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiAr ICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29u dHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRo ZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9V VCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4g KyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0 byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25l IG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0KPiArICBAcmV0dmFsIEVG SV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9TVEFSVCko DQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0K PiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gY2hhbmdl IHRoZSBVTkRJIG9wZXJhdGlvbmFsIHN0YXRlIGZyb20gc3RhcnRlZCB0byBzdG9wcGVkLg0KPiAr DQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0 b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3Jr IGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0 dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRo ZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVz dCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElE X1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8N Cj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5F VF9VTkRJX1NUT1ApKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19E QVRBICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1 c2VkIHRvIHJldHJpZXZlIGluaXRpYWxpemF0aW9uIGluZm9ybWF0aW9uIHRoYXQgaXMNCj4gKyAg bmVlZGVkIGJ5IGRyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucyB0byBpbml0aWFsaXplZCBVTkRJLg0K PiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2Ny aXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3 b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBA cmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5n IHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVx dWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZB TElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUu DQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsq Ki8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhF Uk5FVF9VTkRJX0dFVF9JTklUX0lORk8pKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4g KyAgSU4gIE5JQ19EQVRBICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMg Y29tbWFuZCBpcyB1c2VkIHRvIHJldHJpZXZlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYWJv dXQNCj4gKyAgdGhlIE5JQyBiZWluZyBjb250cm9sbGVkIGJ5IHRoZSBVTkRJLg0KPiArDQo+ICsg IEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxv Y2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVy ZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVG SV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1 ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWls ZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFN RVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ICsgIEBy ZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5 cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJ X0dFVF9DT05GSUdfSU5GTykoDQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAg TklDX0RBVEEgICAgKk5pYw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5k IHJlc2V0cyB0aGUgbmV0d29yayBhZGFwdGVyIGFuZCBpbml0aWFsaXplcyBVTkRJIHVzaW5nDQo+ ICsgIHRoZSBwYXJhbWV0ZXJzIHN1cHBsaWVkIGluIHRoZSBDUEIuDQo+ICsNCj4gKyAgQHBhcmFt W2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4g KyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNv bnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBU aGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVP VVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUg dG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9u ZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4gKyAgQHJldHZhbCBF RklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0K PiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElfSU5JVElB TElaRSkoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmlj DQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgcmVzZXRzIHRoZSBuZXR3 b3JrIGFkYXB0ZXIgYW5kIHJlaW5pdGlhbGl6ZXMgdGhlIFVOREkNCj4gKyAgd2l0aCB0aGUgc2Ft ZSBwYXJhbWV0ZXJzIHByb3ZpZGVkIGluIHRoZSBJbml0aWFsaXplIGNvbW1hbmQuDQo+ICsNCj4g KyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBi bG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50 ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwg RUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJl cXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZh aWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFS QU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4gKyAg QHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiAr dHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VO RElfUkVTRVQpKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRB ICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoZSBTaHV0ZG93biBjb21tYW5k IHJlc2V0cyB0aGUgbmV0d29yayBhZGFwdGVyIGFuZCBsZWF2ZXMgaXQgaW4gYQ0KPiArICBzYWZl IHN0YXRlIGZvciBhbm90aGVyIGRyaXZlciB0byBpbml0aWFsaXplLg0KPiArDQo+ICsgIEBwYXJh bVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBj b250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg VGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1F T1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0K PiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVl IHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBP bmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ICsgIEByZXR2YWwg RUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYN Cj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1NIVVRE T1dOKSgNCj4gKyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgICAq TmljDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGUgSW50ZXJydXB0IEVuYWJsZXMgY29t bWFuZCBjYW4gYmUgdXNlZCB0byByZWFkIGFuZC9vciBjaGFuZ2UNCj4gKyAgdGhlIGN1cnJlbnQg ZXh0ZXJuYWwgaW50ZXJydXB0IGVuYWJsZSBzZXR0aW5ncy4NCj4gKw0KPiArICBAcGFyYW1baW5d ICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBA cGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJv bGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBy ZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAg ICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAg QHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBh IGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9m IHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9V TlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtF RklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9JTlRFUlJVUFRf RU5BQkxFKSgNCj4gKyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAg ICAqTmljDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0 byByZWFkIGFuZCBjaGFuZ2UgcmVjZWl2ZSBmaWx0ZXJzIGFuZCwNCj4gKyAgaWYgc3VwcG9ydGVk LCByZWFkIGFuZCBjaGFuZ2UgdGhlIG11bHRpY2FzdCBNQUMgYWRkcmVzcyBmaWx0ZXIgbGlzdC4N Cj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNj cmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0 d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAg QHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGlu ZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJl cXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5W QUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVl Lg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiAr KiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRI RVJORVRfVU5ESV9SRUNFSVZFX0ZJTFRFUikoDQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0K PiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhp cyBjb21tYW5kIGlzIHVzZWQgdG8gZ2V0IGN1cnJlbnQgc3RhdGlvbiBhbmQgYnJvYWRjYXN0IE1B QyBhZGRyZXNzZXMNCj4gKyAgYW5kLCBpZiBzdXBwb3J0ZWQsIHRvIGNoYW5nZSB0aGUgY3VycmVu dCBzdGF0aW9uIE1BQyBhZGRyZXNzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2lu dGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5p YyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0 ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRp bWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9E RVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9y Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRl cnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAg ICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4g KyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1NUQVRJT05fQUREUkVTUykoDQo+ICsg IElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0KPiArICAp Ow0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gcmVhZCBhbmQgY2xl YXIgdGhlIE5JQyB0cmFmZmljIHN0YXRpc3RpY3MuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2Ri ICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFt W2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIg ZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVz dCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAg ICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2 YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZp Y2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUg cGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQ T1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NU QVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElfU1RBVElTVElDUykoDQo+ ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0KPiAr ICApOw0KPiArDQo+ICsvKioNCj4gKyAgVHJhbnNsYXRlIGEgbXVsdGljYXN0IElQdjQgb3IgSVB2 NiBhZGRyZXNzIHRvIGEgbXVsdGljYXN0IE1BQyBhZGRyZXNzLg0KPiArDQo+ICsgIEBwYXJhbVtp bl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsg IEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250 cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhl IHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VU ICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiAr ICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRv IGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUg b2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJ X1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4g K0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX01DQVNUX0lQ VE9NQUMpKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAg ICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRv IHJlYWQgYW5kIHdyaXRlIChpZiBzdXBwb3J0ZWQgYnkgTklDIEgvVykNCj4gKyAgbm9udm9sYXRp bGUgc3RvcmFnZSBvbiB0aGUgTklDLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2lu dGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5p YyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0 ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRp bWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9E RVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9y Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRl cnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAg ICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4g KyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX05WX0RBVEEpKA0KPiArICBJTiAgUFhF X0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAgICpOaWMNCj4gKyAgKTsNCj4gKw0K PiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCByZXR1cm5zIHRoZSBjdXJyZW50IGludGVycnVwdCBz dGF0dXMgYW5kL29yIHRoZQ0KPiArICB0cmFuc21pdHRlZCBidWZmZXIgYWRkcmVzc2VzIGFuZCB0 aGUgY3VycmVudCBtZWRpYSBzdGF0dXMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBv aW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAg TmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4N Cj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVj dXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEg dGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJ X0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJy b3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1l dGVycyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQg ICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0K PiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElfR0VUX1NUQVRVUykoDQo+ICsgIElO ICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0KPiArICApOw0K PiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gZmlsbCB0aGUgbWVkaWEg aGVhZGVyKHMpIGluIHRyYW5zbWl0IHBhY2tldChzKS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBD ZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFy YW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxl ciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1 ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAg ICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJl dHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRl dmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRo ZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNV UFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklf U1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9GSUxMX0hFQURFUiko DQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0K PiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhlIFRyYW5zbWl0IGNvbW1hbmQgaXMgdXNlZCB0 byBwbGFjZSBhIHBhY2tldCBpbnRvIHRoZSB0cmFuc21pdCBxdWV1ZS4NCj4gKw0KPiArICBAcGFy YW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0K PiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2Ug Y29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAg IFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElN RU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4N Cj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1 ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIg T25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0KPiArICBAcmV0dmFs IEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVm DQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9UUkFO U01JVCkoDQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICAg Kk5pYw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgV2hlbiB0aGUgbmV0d29yayBhZGFwdGVy IGhhcyByZWNlaXZlZCBhIGZyYW1lLCB0aGlzIGNvbW1hbmQgaXMgdXNlZA0KPiArICB0byBjb3B5 IHRoZSBmcmFtZSBpbnRvIGRyaXZlci9hcHBsaWNhdGlvbiBzdG9yYWdlLg0KPiArDQo+ICsgIEBw YXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2su DQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFj ZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9U SU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0 Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQg ZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ICsgIEByZXR2 YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVk ZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1JF Q0VJVkUpKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAg ICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCByZXNldHMgdGhl IG5ldHdvcmsgYWRhcHRlciBhbmQgaW5pdGlhbGl6ZXMgVU5ESSB1c2luZw0KPiArICB0aGUgcGFy YW1ldGVycyBzdXBwbGllZCBpbiB0aGUgQ1BCLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICBD ZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFy YW1baW4sIG91dF0gTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRy b2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUg cmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQg ICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsg IEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8g YSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBv ZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklf VU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiAr RUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX0lOSVRJQUxJWkUpKA0K PiArICBJTiAgICAgIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiBPVVQgIE5JQ19EQVRBICAqTmlj DQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byByZWFk IGFuZCBjbGVhciB0aGUgTklDIHRyYWZmaWMgc3RhdGlzdGljcy4NCj4gKw0KPiArICBAcGFyYW1b aW5dICBOaWMgICAgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxl ciBkYXRhLg0KPiArICBAcGFyYW1baW5dICBEYkFkZHIgIERhdGEgQmxvY2sgQWRkcmVzcy4NCj4g KyAgQHBhcmFtW2luXSAgRGJTaXplICBEYXRhIEJsb2NrIFNpemUuDQo+ICsNCj4gKyAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5 Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQg ZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAg ICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFs IEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFs aWQgdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0 ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJ X1VTQl9FVEhFUk5FVF9TVEFUSVNUSUNTKSgNCj4gKyAgSU4gIE5JQ19EQVRBICAgICpOaWMsDQo+ ICsgIElOICBVSU5UNjQgICAgICBEYkFkZHIsDQo+ICsgIElOICBVSU5UMTYgICAgICBEYlNpemUN Cj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBtYW5h Z2UgYSBVU0IgZGV2aWNlIHdpdGggdGhlIGJ1bGsgdHJhbnNmZXIgcGlwZS4gVGhlIGVuZHBvaW50 IGlzIEJ1bGsgaW4uDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIENkYiAgICAgICAgICAgQSBw b2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0g ICAgICBUaGlzICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BS T1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW4sIG91dF0gUGFja2V0ICAgICAgICBBIHBv aW50ZXIgdG8gdGhlIGJ1ZmZlciBvZiBkYXRhIHRoYXQgd2lsbCBiZSB0cmFuc21pdHRlZCB0byBV U0INCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIG9yIHJlY2VpdmVk IGZyb20gVVNCIGRldmljZS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIFBhY2tldExlbmd0aCAgQSBw b2ludGVyIHRvIHRoZSBQYWNrZXRMZW5ndGguDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICAgVGhlIGJ1bGsgdHJhbnNmZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1 dGVkLg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgdHJhbnNmZXIgZmFp bGVkLiBUaGUgdHJhbnNmZXIgc3RhdHVzIGlzIHJldHVybmVkIGluIHN0YXR1cy4NCj4gKyAgQHJl dHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURSAgT25lIG9yIG1vcmUgcGFyYW1ldGVycyBhcmUgaW52 YWxpZC4NCj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgVGhlIHJlcXVlc3QgY291 bGQgbm90IGJlIHN1Ym1pdHRlZCBkdWUgdG8gYSBsYWNrIG9mIHJlc291cmNlcy4NCj4gKyAgQHJl dHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgVGhlIGNvbnRyb2wgdHJhbnNmZXIgZmFpbHMgZHVl IHRvIHRpbWVvdXQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklB UEkgKkVES0lJX1VTQl9FVEhFUk5FVF9SRUNFSVZFKSgNCj4gKyAgSU4gICAgIFBYRV9DREIgICAg ICAgICAgICAgICAqQ2RiLA0KPiArICBJTiAgICAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09M ICpUaGlzLA0KPiArICBJTiBPVVQgVk9JRCAgICAgICAgICAgICAgICAgICpQYWNrZXQsDQo+ICsg IElOIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgKlBhY2tldExlbmd0aA0KPiArICApOw0KPiAr DQo+ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIG1hbmFnZSBhIFVTQiBkZXZp Y2Ugd2l0aCB0aGUgYnVsayB0cmFuc2ZlciBwaXBlLiBUaGUgZW5kcG9pbnQgaXMgQnVsayBvdXQu DQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIENkYiAgICAgICAgICAgQSBwb2ludGVyIHRvIHRo ZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gICAgICBUaGlzICAg ICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3Rh bmNlLg0KPiArICBAcGFyYW1baW4sIG91dF0gUGFja2V0ICAgICAgICBBIHBvaW50ZXIgdG8gdGhl IGJ1ZmZlciBvZiBkYXRhIHRoYXQgd2lsbCBiZSB0cmFuc21pdHRlZCB0byBVU0INCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIG9yIHJlY2VpdmVkIGZyb20gVVNCIGRl dmljZS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIFBhY2tldExlbmd0aCAgQSBwb2ludGVyIHRvIHRo ZSBQYWNrZXRMZW5ndGguDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg VGhlIGJ1bGsgdHJhbnNmZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLg0KPiArICBA cmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgdHJhbnNmZXIgZmFpbGVkLiBUaGUgdHJh bnNmZXIgc3RhdHVzIGlzIHJldHVybmVkIGluIHN0YXR1cy4NCj4gKyAgQHJldHZhbCBFRklfSU5W QUxJRF9QQVJBTUVURSAgT25lIG9yIG1vcmUgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4NCj4gKyAg QHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgVGhlIHJlcXVlc3QgY291bGQgbm90IGJlIHN1 Ym1pdHRlZCBkdWUgdG8gYSBsYWNrIG9mIHJlc291cmNlcy4NCj4gKyAgQHJldHZhbCBFRklfVElN RU9VVCAgICAgICAgICAgVGhlIGNvbnRyb2wgdHJhbnNmZXIgZmFpbHMgZHVlIHRvIHRpbWVvdXQu DQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VT Ql9FVEhFUk5FVF9UUkFOU01JVCkoDQo+ICsgIElOICAgICBQWEVfQ0RCICAgICAgICAgICAgICAg KkNkYiwNCj4gKyAgSU4gICAgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAqVGhpcywNCj4g KyAgSU4gT1VUIFZPSUQgICAgICAgICAgICAgICAgICAqUGFja2V0LA0KPiArICBJTiBPVVQgVUlO VE4gICAgICAgICAgICAgICAgICpQYWNrZXRMZW5ndGgNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ ICsgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBtYW5hZ2UgYSBVU0IgZGV2aWNlIHdpdGggYW4g aW50ZXJydXB0IHRyYW5zZmVyIHBpcGUuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAg ICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5z dGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIElzTmV3VHJhbnNmZXIgICAgIElmIFRSVUUsIGEgbmV3 IHRyYW5zZmVyIHdpbGwgYmUgc3VibWl0dGVkIHRvIFVTQiBjb250cm9sbGVyLiBJZg0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwgdGhlIGludGVycnVwdCB0cmFuc2Zl ciBpcyBkZWxldGVkIGZyb20gdGhlIGRldmljZSdzIGludGVycnVwdA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlciBxdWV1ZS4NCj4gKyAgQHBhcmFtW2luXSAgUG9s bGluZ0ludGVydmFsICAgSW5kaWNhdGVzIHRoZSBwZXJpb2RpYyByYXRlLCBpbiBtaWxsaXNlY29u ZHMsIHRoYXQgdGhlIHRyYW5zZmVyIGlzIHRvIGJlDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGV4ZWN1dGVkLlRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIHdoZW4gSXNOZXdU cmFuc2ZlciBpcyBUUlVFLiBUaGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDEgdG8gMjU1LCBvdGhlcndpc2UgRUZJX0lOVkFMSURfUEFS QU1FVEVSIGlzIHJldHVybmVkLg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU aGUgdW5pdHMgYXJlIGluIG1pbGxpc2Vjb25kcy4NCj4gKyAgQHBhcmFtW2luXSAgUmVxdWVzdCAg ICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklfVVNCX0RFVklDRV9SRVFVRVNUIGRhdGEuDQo+ ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIGFzeW5jaHJvbm91cyBV U0IgdHJhbnNmZXIgcmVxdWVzdCB0cmFuc2ZlciBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0 ZWQuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSBhc3luY2hyb25vdXMg VVNCIHRyYW5zZmVyIHJlcXVlc3QgZmFpbGVkLg0KPiArDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4g K0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9JTlRFUlJVUFQpKA0K PiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICAqVGhpcywNCj4gKyAgSU4gQk9P TEVBTiAgICAgICAgICAgICAgICAgSXNOZXdUcmFuc2ZlciwNCj4gKyAgSU4gVUlOVE4gICAgICAg ICAgICAgICAgICAgUG9sbGluZ0ludGVydmFsLA0KPiArICBJTiBFRklfVVNCX0RFVklDRV9SRVFV RVNUICAqUmVxdWVzdA0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVzIHRoZSBV U0IgRXRoZXJuZXQgTWFjIEFkZHJlc3MuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAg ICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5j ZS4NCj4gKyAgQHBhcmFtW291dF0gTWFjQWRkcmVzcyAgICBBIHBvaW50ZXIgdG8gdGhlIGNhbGxl ciBhbGxvY2F0ZWQgVVNCIEV0aGVybmV0IE1hYyBBZGRyZXNzLg0KPiArDQo+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBVU0IgSGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3JpcHRv ciB3YXMgcmV0cmlldmVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9Q QVJBTUVURVIgVXNiSGVhZGVyRnVuRGVzY3JpcHRvciBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVG SV9OT1RfRk9VTkQgICAgICAgICBUaGUgVVNCIEhlYWRlciBGdW5jdGlvbmFsIGRlc2NyaXB0b3Ig d2FzIG5vdCBmb3VuZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVG SUFQSSAqRURLSUlfVVNCX0dFVF9FVEhfTUFDX0FERFJFU1MpKA0KPiArICBJTiAgRURLSUlfVVNC X0VUSEVSTkVUX1BST1RPQ09MICpUaGlzLA0KPiArICBPVVQgRUZJX01BQ19BRERSRVNTICAgICAg ICpNYWNBZGRyZXNzDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBSZXRyaWV2ZXMgdGhlIFVT QiBFdGhlcm5ldCBCdWxrIHRyYW5zZmVyIGRhdGEgc2l6ZS4NCj4gKw0KPiArICBAcGFyYW1baW5d ICBUaGlzICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RP Q09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1bb3V0XSBCdWxrU2l6ZSAgICAgIEEgcG9pbnRlciB0 byB0aGUgQnVsayB0cmFuc2ZlciBkYXRhIHNpemUuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICAgVGhlIFVTQiBIZWFkZXIgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcyBy ZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiBVc2JIZWFkZXJGdW5EZXNjcmlwdG9yIGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9G T1VORCAgICAgICAgIFRoZSBVU0IgSGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMgbm90 IGZvdW5kLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpF REtJSV9VU0JfRVRIX01BWF9CVUxLX1NJWkUpKA0KPiArICBJTiAgRURLSUlfVVNCX0VUSEVSTkVU X1BST1RPQ09MICpUaGlzLA0KPiArICBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICpCdWxrU2l6 ZQ0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVzIHRoZSBVU0IgSGVhZGVyIGZ1 bmN0aW9uYWwgRGVzY3JpcHRvci4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAg ICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGlu c3RhbmNlLg0KPiArICBAcGFyYW1bb3V0XSBVc2JIZWFkZXJGdW5EZXNjcmlwdG9yIEEgcG9pbnRl ciB0byB0aGUgY2FsbGVyIGFsbG9jYXRlZCBVU0IgSGVhZGVyIEZ1bmN0aW9uYWwgRGVzY3JpcHRv ci4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgVVNCIEhlYWRl ciBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzIHJldHJpZXZlZCBzdWNjZXNzZnVsbHkuDQo+ICsg IEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIFVzYkhlYWRlckZ1bkRlc2NyaXB0b3IgaXMg TlVMTC4NCj4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgVGhlIFVTQiBIZWFkZXIg RnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcyBub3QgZm91bmQuDQo+ICsqKi8NCj4gK3R5cGVkZWYN Cj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9IRUFERVJfRlVOQ1RJT05BTF9E RVNDUklQVE9SKSgNCj4gKyAgSU4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAgICAgKlRo aXMsDQo+ICsgIE9VVCBVU0JfSEVBREVSX0ZVTl9ERVNDUklQVE9SICpVc2JIZWFkZXJGdW5EZXNj cmlwdG9yDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBSZXRyaWV2ZXMgdGhlIFVTQiBVbmlv biBmdW5jdGlvbmFsIERlc2NyaXB0b3IuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAg ICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NP TCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW291dF0gVXNiVW5pb25GdW5EZXNjcmlwdG9yICBBIHBv aW50ZXIgdG8gdGhlIGNhbGxlciBhbGxvY2F0ZWQgVVNCIFVuaW9uIEZ1bmN0aW9uYWwgRGVzY3Jp cHRvci4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgVVNCIFVu aW9uIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMgcmV0cmlldmVkIHN1Y2Nlc3NmdWxseS4NCj4g KyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgVXNiVW5pb25GdW5EZXNjcmlwdG9yIGlz IE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFRoZSBVU0IgVW5pb24g RnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcyBub3QgZm91bmQuDQo+ICsqKi8NCj4gK3R5cGVkZWYN Cj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9VTklPTl9GVU5DVElPTkFMX0RF U0NSSVBUT1IpKA0KPiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICAgICpUaGlz LA0KPiArICBPVVQgVVNCX1VOSU9OX0ZVTl9ERVNDUklQVE9SICpVc2JVbmlvbkZ1bkRlc2NyaXB0 b3INCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFJldHJpZXZlcyB0aGUgVVNCIEV0aGVybmV0 IGZ1bmN0aW9uYWwgRGVzY3JpcHRvci4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAg ICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09M IGluc3RhbmNlLg0KPiArICBAcGFyYW1bb3V0XSBVc2JFdGhGdW5EZXNjcmlwdG9yICAgIEEgcG9p bnRlciB0byB0aGUgY2FsbGVyIGFsbG9jYXRlZCBVU0IgRXRoZXJuZXQgRnVuY3Rpb25hbCBEZXNj cmlwdG9yLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBVU0Ig RXRoZXJuZXQgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcyByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5 Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBVc2JFdGhGdW5EZXNjcmlwdG9y IGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFRoZSBVU0IgRXRo ZXJuZXQgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcyBub3QgZm91bmQuDQo+ICsqKi8NCj4gK3R5 cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9GVU5D VElPTkFMX0RFU0NSSVBUT1IpKA0KPiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wg ICAgICAgICpUaGlzLA0KPiArICBPVVQgVVNCX0VUSEVSTkVUX0ZVTl9ERVNDUklQVE9SICpVc2JF dGhGdW5EZXNjcmlwdG9yDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIHJlcXVlc3Qg c2V0cyB0aGUgRXRoZXJuZXQgZGV2aWNlIG11bHRpY2FzdCBmaWx0ZXJzIGFzIHNwZWNpZmllZCBp biB0aGUNCj4gKyAgc2VxdWVudGlhbCBsaXN0IG9mIDQ4IGJpdCBFdGhlcm5ldCBtdWx0aWNhc3Qg YWRkcmVzc2VzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICAg QSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGZpbHRlcnMu DQo+ICsgIEBwYXJhbVtpbl0gIE1jYXN0QWRkciAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRo ZSB2YWx1ZSBvZiB0aGUgbXVsdGljYXN0IGFkZHJlc3Nlcy4NCj4gKw0KPiArICBAcmV0dmFsIEVG SV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVj dXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRo ZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJ X0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2 YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4N Cj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNC X0VUSEVSTkVUX1NFVF9FVEhfTVVMVElDQVNUX0ZJTFRFUlMpKA0KPiArICBJTiBFREtJSV9VU0Jf RVRIRVJORVRfUFJPVE9DT0wgKlRoaXMsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICBW YWx1ZSwNCj4gKyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICpNY2FzdEFkZHINCj4gKyAgKTsN Cj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgcmVxdWVzdCBzZXRzIHVwIHRoZSBzcGVjaWZpZWQgRXRo ZXJuZXQgcG93ZXIgbWFuYWdlbWVudCBwYXR0ZXJuIGZpbHRlciBhcw0KPiArICBkZXNjcmliZWQg aW4gdGhlIGRhdGEgc3RydWN0dXJlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAg ICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wg aW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgICAgICAgICAgTnVtYmVy IG9mIGZpbHRlcnMuDQo+ICsgIEBwYXJhbVtpbl0gIExlbmd0aCAgICAgICAgICAgICAgICAgU2l6 ZSBvZiB0aGUgcG93ZXIgbWFuYWdlbWVudCBwYXR0ZXJuIGZpbHRlciBkYXRhLg0KPiArICBAcGFy YW1baW5dICBQYXR0ZXJuRmlsdGVyICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgcG93ZXIgbWFu YWdlbWVudCBwYXR0ZXJuIGZpbHRlciBzdHJ1Y3R1cmUuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiAr ICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0 aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUg cmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9J TlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFs dWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9F VEhFUk5FVF9TRVRfRVRIX1BPV0VSX01BTkFHRV9QQVRURVJOX0ZJTFRFUikoDQo+ICsgIElOIEVE S0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAqVGhpcywNCj4gKyAgSU4gVUlOVDE2ICAgICAgICAg ICAgICAgIFZhbHVlLA0KPiArICBJTiBVSU5UMTYgICAgICAgICAgICAgICAgTGVuZ3RoLA0KPiAr ICBJTiBWT0lEICAgICAgICAgICAgICAgICAgKlBhdHRlcm5GaWx0ZXINCj4gKyAgKTsNCj4gKw0K PiArLyoqDQo+ICsgIFRoaXMgcmVxdWVzdCByZXRyaWV2ZXMgdGhlIHN0YXR1cyBvZiB0aGUgc3Bl Y2lmaWVkIEV0aGVybmV0IHBvd2VyIG1hbmFnZW1lbnQNCj4gKyAgcGF0dGVybiBmaWx0ZXIgZnJv bSB0aGUgZGV2aWNlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAg ICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2Uu DQo+ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgICAgICAgICAgVGhlIGZpbHRlciBudW1i ZXIuDQo+ICsgIEBwYXJhbVtvdXRdIFBhdHRlcm5BY3RpdmUgICAgICAgICAgQSBwb2ludGVyIHRv IHRoZSBwYXR0ZXJuIGFjdGl2ZSBib29sZWFuLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJl dHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0 aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVl c3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0K PiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiov DQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJO RVRfR0VUX0VUSF9QT1dFUl9NQU5BR0VfUEFUVEVSTl9GSUxURVIpKA0KPiArICBJTiAgIEVES0lJ X1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAqVGhpcywNCj4gKyAgSU4gICBVSU5UMTYgICAgICAgICAg ICAgICAgVmFsdWUsDQo+ICsgIE9VVCAgQk9PTEVBTiAgICAgICAgICAgICAgICpQYXR0ZXJuQWN0 aXZlDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIHJlcXVlc3QgaXMgdXNlZCB0byBj b25maWd1cmUgZGV2aWNlIEV0aGVybmV0IHBhY2tldCBmaWx0ZXIgc2V0dGluZ3MuDQo+ICsNCj4g KyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9V U0JfRVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAg ICAgICAgICAgIFBhY2tldCBGaWx0ZXIgQml0bWFwLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAg QHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGlu ZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJl cXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5W QUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVl Lg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiAr KiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRI RVJORVRfU0VUX0VUSF9QQUNLRVRfRklMVEVSKSgNCj4gKyAgSU4gRURLSUlfVVNCX0VUSEVSTkVU X1BST1RPQ09MICpUaGlzLA0KPiArICBJTiBVSU5UMTYgICAgICAgICAgICAgICAgVmFsdWUNCj4g KyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgcmVxdWVzdCBpcyB1c2VkIHRvIHJldHJpZXZl IGEgc3RhdGlzdGljIGJhc2VkIG9uIHRoZSBmZWF0dXJlIHNlbGVjdG9yLg0KPiArDQo+ICsgIEBw YXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VT Ql9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgRmVhdHVyZVNl bGVjdG9yICAgICAgIFZhbHVlIG9mIHRoZSBmZWF0dXJlIHNlbGVjdG9yLg0KPiArICBAcGFyYW1b b3V0XSBTdGF0aXN0aWMgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSAzMiBiaXQgdW5zaWdu ZWQgaW50ZWdlci4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUg cmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQg ICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsg IEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8g YSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBv ZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklf VU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiAr RUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX0dFVF9FVEhfU1RBVElT VElDKSgNCj4gKyAgSU4gIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsg IElOICBVSU5UMTYgICAgICAgICAgICAgICAgIEZlYXR1cmVTZWxlY3RvciwNCj4gKyAgT1VUIFZP SUQgICAgICAgICAgICAgICAgICAgKlN0YXRpc3RpYw0KPiArICApOw0KPiArDQo+ICt0eXBlZGVm IHN0cnVjdCB7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX0dFVF9TVEFURSAgICAgICAg ICAgVXNiRXRoVW5kaUdldFN0YXRlOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9TVEFS VCAgICAgICAgICAgICAgIFVzYkV0aFVuZGlTdGFydDsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVU X1VORElfU1RPUCAgICAgICAgICAgICAgICBVc2JFdGhVbmRpU3RvcDsNCj4gKyAgRURLSUlfVVNC X0VUSEVSTkVUX1VORElfR0VUX0lOSVRfSU5GTyAgICAgICBVc2JFdGhVbmRpR2V0SW5pdEluZm87 DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX0dFVF9DT05GSUdfSU5GTyAgICAgVXNiRXRo VW5kaUdldENvbmZpZ0luZm87DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX0lOSVRJQUxJ WkUgICAgICAgICAgVXNiRXRoVW5kaUluaXRpYWxpemU7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5F VF9VTkRJX1JFU0VUICAgICAgICAgICAgICAgVXNiRXRoVW5kaVJlc2V0Ow0KPiArICBFREtJSV9V U0JfRVRIRVJORVRfVU5ESV9TSFVURE9XTiAgICAgICAgICAgIFVzYkV0aFVuZGlTaHV0ZG93bjsN Cj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfSU5URVJSVVBUX0VOQUJMRSAgICBVc2JFdGhV bmRpSW50ZXJydXB0RW5hYmxlOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9SRUNFSVZF X0ZJTFRFUiAgICAgIFVzYkV0aFVuZGlSZWNlaXZlRmlsdGVyOw0KPiArICBFREtJSV9VU0JfRVRI RVJORVRfVU5ESV9TVEFUSU9OX0FERFJFU1MgICAgIFVzYkV0aFVuZGlTdGF0aW9uQWRkcmVzczsN Cj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfU1RBVElTVElDUyAgICAgICAgICBVc2JFdGhV bmRpU3RhdGlzdGljczsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfTUNBU1RfSVBUT01B QyAgICAgICBVc2JFdGhVbmRpTWNhc3RJcDJNYWM7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9V TkRJX05WX0RBVEEgICAgICAgICAgICAgVXNiRXRoVW5kaU52RGF0YTsNCj4gKyAgRURLSUlfVVNC X0VUSEVSTkVUX1VORElfR0VUX1NUQVRVUyAgICAgICAgICBVc2JFdGhVbmRpR2V0U3RhdHVzOw0K PiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9GSUxMX0hFQURFUiAgICAgICAgIFVzYkV0aFVu ZGlGaWxsSGVhZGVyOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9UUkFOU01JVCAgICAg ICAgICAgIFVzYkV0aFVuZGlUcmFuc21pdDsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElf UkVDRUlWRSAgICAgICAgICAgICBVc2JFdGhVbmRpUmVjZWl2ZTsNCj4gK30gRURLSUlfVVNCX0VU SEVSTkVUX1VOREk7DQo+ICsNCj4gKy8vIFRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wg cHJvdmlkZXMgc29tZSBiYXNpYyBVU0IgRXRoZXJuZXQgZGV2aWNlIHJlbGV2YW50DQo+ICsvLyBk ZXNjcmlwdG9yIGFuZCBzcGVjaWZpYyByZXF1ZXN0cy4NCj4gK3N0cnVjdCBfRURLSUlfVVNCX0VU SEVSTkVUX1BST1RPQ09MIHsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VOREkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFVzYkV0aFVuZGk7DQo+ICsgIC8vIGZvciBjYWxsaW5n IHRoZSBVTkRJIGNoaWxkIGZ1bmN0aW9ucw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfSU5JVElB TElaRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiRXRoSW5pdGlhbGl6ZTsNCj4gKyAg RURLSUlfVVNCX0VUSEVSTkVUX1NUQVRJU1RJQ1MgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFVzYkV0aFN0YXRpc3RpY3M7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9SRUNFSVZFICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JFdGhSZWNlaXZlOw0KPiArICBFREtJSV9VU0Jf RVRIRVJORVRfVFJBTlNNSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiRXRoVHJh bnNtaXQ7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9JTlRFUlJVUFQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBVc2JFdGhJbnRlcnJ1cHQ7DQo+ICsgIEVES0lJX1VTQl9HRVRfRVRIX01B Q19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JFdGhNYWNBZGRyZXNzOw0K PiArICBFREtJSV9VU0JfRVRIX01BWF9CVUxLX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVXNiRXRoTWF4QnVsa1NpemU7DQo+ICsgIEVES0lJX1VTQl9IRUFERVJfRlVOQ1RJT05B TF9ERVNDUklQVE9SICAgICAgICAgICAgICAgICAgICBVc2JIZWFkZXJGdW5EZXNjcmlwdG9yOw0K PiArICBFREtJSV9VU0JfVU5JT05fRlVOQ1RJT05BTF9ERVNDUklQVE9SICAgICAgICAgICAgICAg ICAgICAgVXNiVW5pb25GdW5EZXNjcmlwdG9yOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfRlVO Q1RJT05BTF9ERVNDUklQVE9SICAgICAgICAgICAgICAgICAgVXNiRXRoRnVuRGVzY3JpcHRvcjsN Cj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1NFVF9FVEhfTVVMVElDQVNUX0ZJTFRFUlMgICAgICAg ICAgICAgIFNldFVzYkV0aE1jYXN0RmlsdGVyOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfU0VU X0VUSF9QT1dFUl9NQU5BR0VfUEFUVEVSTl9GSUxURVIgICAgU2V0VXNiRXRoUG93ZXJQYXR0ZXJu RmlsdGVyOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfR0VUX0VUSF9QT1dFUl9NQU5BR0VfUEFU VEVSTl9GSUxURVIgICAgR2V0VXNiRXRoUG93ZXJQYXR0ZXJuRmlsdGVyOw0KPiArICBFREtJSV9V U0JfRVRIRVJORVRfU0VUX0VUSF9QQUNLRVRfRklMVEVSICAgICAgICAgICAgICAgICAgU2V0VXNi RXRoUGFja2V0RmlsdGVyOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfR0VUX0VUSF9TVEFUSVNU SUMgICAgICAgICAgICAgICAgICAgICAgR2V0VXNiRXRoU3RhdGlzdGljOw0KPiArfTsNCj4gKw0K PiArZXh0ZXJuIEVGSV9HVUlEICBnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQ7DQo+ICsNCj4gKyNl bmRpZg0KPiBkaWZmIC0tZ2l0IGEvVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL0NvbXBvbmVu dE5hbWUuYyBiL1VzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1vbi9Db21wb25lbnROYW1lLmMNCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMC4uNDBjOTUzZjcxNg0KPiAt LS0gL2Rldi9udWxsDQo+ICsrKyBiL1VzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1vbi9Db21wb25l bnROYW1lLmMNCj4gQEAgLTAsMCArMSwyNjMgQEANCj4gKy8qKiBAZmlsZQ0KPiArICBUaGlzIGZp bGUgY29udGFpbnMgY29kZSBmb3IgVVNCIG5ldHdvcmsgY29tbW9uIGRyaXZlcg0KPiArICBjb21w b25lbnQgbmFtZSBkZWZpbml0aW9ucw0KPiArDQo+ICsgIENvcHlyaWdodCAoYykgMjAyMiwgQW1l cmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC48 QlI+DQo+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ ICsqKi8NCj4gKw0KPiArI2luY2x1ZGUgIkRyaXZlckJpbmRpbmcuaCINCj4gKw0KPiArZXh0ZXJu IEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgZ05ldHdvcmtDb21tb25Ecml2ZXJCaW5kaW5n Ow0KPiArDQo+ICtHTE9CQUxfUkVNT1ZFX0lGX1VOUkVGRVJFTkNFRCBFRklfVU5JQ09ERV9TVFJJ TkdfVEFCTEUgIGdOZXR3b3JrQ29tbW9uRHJpdmVyTmFtZVRhYmxlW10gPSB7DQo+ICsgIHsNCj4g KyAgICAiZW5nO2VuIiwNCj4gKyAgICBMIk5ldHdvcmsgQ29tbW9uIERyaXZlciINCj4gKyAgfSwN Cj4gKyAgew0KPiArICAgIE5VTEwsDQo+ICsgICAgTlVMTA0KPiArICB9DQo+ICt9Ow0KPiArR0xP QkFMX1JFTU9WRV9JRl9VTlJFRkVSRU5DRUQgRUZJX1VOSUNPREVfU1RSSU5HX1RBQkxFICAqZ05l dHdvcmtDb21tb25Db250cm9sbGVyTmFtZVRhYmxlID0gTlVMTDsNCj4gKw0KPiArRUZJX1NUQVRV Uw0KPiArRUZJQVBJDQo+ICtOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZUdldERyaXZlck5hbWUg KA0KPiArICBJTiAgRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4g IENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAgKkxhbmd1YWdlLA0KPiArICBPVVQgQ0hBUjE2 ICAgICAgICAgICAgICAgICAgICAgICAqKkRyaXZlck5hbWUNCj4gKyAgKTsNCj4gKw0KPiArRUZJ X1NUQVRVUw0KPiArRUZJQVBJDQo+ICtOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZUdldENvbnRy b2xsZXJOYW1lICgNCj4gKyAgSU4gRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MICAqVGhpcywN Cj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVyLA0KPiArICBJ TiBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENoaWxkSGFuZGxlICAgICAgICBPUFRJT05B TCwNCj4gKyAgSU4gQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICAqTGFuZ3VhZ2UsDQo+ICsg IE9VVCBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgKipDb250cm9sbGVyTmFtZQ0KPiArICAp Ow0KPiArDQo+ICtHTE9CQUxfUkVNT1ZFX0lGX1VOUkVGRVJFTkNFRCBFRklfQ09NUE9ORU5UX05B TUVfUFJPVE9DT0wgIGdOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZSA9IHsNCj4gKyAgTmV0d29y a0NvbW1vbkNvbXBvbmVudE5hbWVHZXREcml2ZXJOYW1lLA0KPiArICBOZXR3b3JrQ29tbW9uQ29t cG9uZW50TmFtZUdldENvbnRyb2xsZXJOYW1lLA0KPiArICAiZW5nIg0KPiArfTsNCj4gKw0KPiAr R0xPQkFMX1JFTU9WRV9JRl9VTlJFRkVSRU5DRUQgRUZJX0NPTVBPTkVOVF9OQU1FMl9QUk9UT0NP TCAgZ05ldHdvcmtDb21tb25Db21wb25lbnROYW1lMiA9IHsNCj4gKyAgKEVGSV9DT01QT05FTlRf TkFNRTJfR0VUX0RSSVZFUl9OQU1FKU5ldHdvcmtDb21tb25Db21wb25lbnROYW1lR2V0RHJpdmVy TmFtZSwNCj4gKyAgKEVGSV9DT01QT05FTlRfTkFNRTJfR0VUX0NPTlRST0xMRVJfTkFNRSlOZXR3 b3JrQ29tbW9uQ29tcG9uZW50TmFtZUdldENvbnRyb2xsZXJOYW1lLA0KPiArICAiZW4iDQo+ICt9 Ow0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVzIGEgVW5pY29kZSBzdHJpbmcgdGhhdCBpcyB0 aGUgdXNlciByZWFkYWJsZSBuYW1lIG9mIHRoZSBkcml2ZXIuDQo+ICsNCj4gKyAgVGhpcyBmdW5j dGlvbiByZXRyaWV2ZXMgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBvZiBhIGRyaXZlciBpbiB0aGUg Zm9ybSBvZiBhDQo+ICsgIFVuaWNvZGUgc3RyaW5nLiBJZiB0aGUgZHJpdmVyIHNwZWNpZmllZCBi eSBUaGlzIGhhcyBhIHVzZXIgcmVhZGFibGUgbmFtZSBpbg0KPiArICB0aGUgbGFuZ3VhZ2Ugc3Bl Y2lmaWVkIGJ5IExhbmd1YWdlLCB0aGVuIGEgcG9pbnRlciB0byB0aGUgZHJpdmVyIG5hbWUgaXMN Cj4gKyAgcmV0dXJuZWQgaW4gRHJpdmVyTmFtZSwgYW5kIEVGSV9TVUNDRVNTIGlzIHJldHVybmVk LiBJZiB0aGUgZHJpdmVyIHNwZWNpZmllZA0KPiArICBieSBUaGlzIGRvZXMgbm90IHN1cHBvcnQg dGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSwNCj4gKyAgdGhlbiBFRklfVU5TVVBQ T1JURUQgaXMgcmV0dXJuZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAg ICAgQSBwb2ludGVyIHRvIHRoZSBFRklfQ09NUE9ORU5UX05BTUUyX1BST1RPQ09MIG9yDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NP TCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgTGFuZ3VhZ2UgICAgICAgICAgQSBwb2ludGVy IHRvIGEgTnVsbC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZw0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhcnJheSBpbmRpY2F0aW5nIHRoZSBsYW5ndWFnZS4gVGhpcyBpcyB0aGUN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2Ugb2YgdGhlIGRyaXZl ciBuYW1lIHRoYXQgdGhlIGNhbGxlciBpcw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZXF1ZXN0aW5nLCBhbmQgaXQgbXVzdCBtYXRjaCBvbmUgb2YgdGhlDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlcyBzcGVjaWZpZWQgaW4gU3VwcG9ydGVk TGFuZ3VhZ2VzLiBUaGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVy IG9mIGxhbmd1YWdlcyBzdXBwb3J0ZWQgYnkgYSBkcml2ZXIgaXMgdXANCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGRyaXZlciB3cml0ZXIuIExhbmd1YWdlIGlzIHNw ZWNpZmllZA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBSRkMgNDY0NiBv ciBJU08gNjM5LTIgbGFuZ3VhZ2UgY29kZSBmb3JtYXQuDQo+ICsgIEBwYXJhbVtvdXRdIERyaXZl ck5hbWUgICAgICAgIEEgcG9pbnRlciB0byB0aGUgVW5pY29kZSBzdHJpbmcgdG8gcmV0dXJuLg0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIFVuaWNvZGUgc3RyaW5nIGlz IHRoZSBuYW1lIG9mIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2 ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgaW4gdGhlIGxhbmd1YWdlDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNwZWNpZmllZCBieSBMYW5ndWFnZS4NCj4gKw0KPiArICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgVW5pY29kZSBzdHJpbmcgZm9yIHRoZSBEcml2ZXIg c3BlY2lmaWVkIGJ5DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgYW5k IHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2Ugd2FzDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybmVkIGluIERyaXZlck5hbWUuDQo+ICsgIEByZXR2YWwg RUZJX0lOVkFMSURfUEFSQU1FVEVSIExhbmd1YWdlIGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJ X0lOVkFMSURfUEFSQU1FVEVSIERyaXZlck5hbWUgaXMgTlVMTC4NCj4gKyAgQHJldHZhbCBFRklf VU5TVVBQT1JURUQgICAgICAgVGhlIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBkb2VzIG5vdCBz dXBwb3J0DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsYW5ndWFnZSBz cGVjaWZpZWQgYnkgTGFuZ3VhZ2UuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJ QVBJDQo+ICtOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZUdldERyaXZlck5hbWUgKA0KPiArICBJ TiAgRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gIENIQVI4ICAg ICAgICAgICAgICAgICAgICAgICAgKkxhbmd1YWdlLA0KPiArICBPVVQgQ0hBUjE2ICAgICAgICAg ICAgICAgICAgICAgICAqKkRyaXZlck5hbWUNCj4gKyAgKQ0KPiArew0KPiArICByZXR1cm4gTG9v a3VwVW5pY29kZVN0cmluZzIgKA0KPiArICAgICAgICAgICBMYW5ndWFnZSwNCj4gKyAgICAgICAg ICAgVGhpcy0+U3VwcG9ydGVkTGFuZ3VhZ2VzLA0KPiArICAgICAgICAgICBnTmV0d29ya0NvbW1v bkRyaXZlck5hbWVUYWJsZSwNCj4gKyAgICAgICAgICAgRHJpdmVyTmFtZSwNCj4gKyAgICAgICAg ICAgKEJPT0xFQU4pKFRoaXMgPT0gJmdOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZSkNCj4gKyAg ICAgICAgICAgKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJldHJpZXZlcyBhIFVuaWNvZGUg c3RyaW5nIHRoYXQgaXMgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBvZiB0aGUgY29udHJvbGxlcg0K PiArICB0aGF0IGlzIGJlaW5nIG1hbmFnZWQgYnkgYSBkcml2ZXIuDQo+ICsNCj4gKyAgVGhpcyBm dW5jdGlvbiByZXRyaWV2ZXMgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBvZiB0aGUgY29udHJvbGxl ciBzcGVjaWZpZWQgYnkNCj4gKyAgQ29udHJvbGxlckhhbmRsZSBhbmQgQ2hpbGRIYW5kbGUgaW4g dGhlIGZvcm0gb2YgYSBVbmljb2RlIHN0cmluZy4gSWYgdGhlDQo+ICsgIGRyaXZlciBzcGVjaWZp ZWQgYnkgVGhpcyBoYXMgYSB1c2VyIHJlYWRhYmxlIG5hbWUgaW4gdGhlIGxhbmd1YWdlIHNwZWNp ZmllZCBieQ0KPiArICBMYW5ndWFnZSwgdGhlbiBhIHBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIg bmFtZSBpcyByZXR1cm5lZCBpbiBDb250cm9sbGVyTmFtZSwNCj4gKyAgYW5kIEVGSV9TVUNDRVNT IGlzIHJldHVybmVkLiAgSWYgdGhlIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBpcyBub3QgY3Vy cmVudGx5DQo+ICsgIG1hbmFnaW5nIHRoZSBjb250cm9sbGVyIHNwZWNpZmllZCBieSBDb250cm9s bGVySGFuZGxlIGFuZCBDaGlsZEhhbmRsZSwNCj4gKyAgdGhlbiBFRklfVU5TVVBQT1JURUQgaXMg cmV0dXJuZWQuICBJZiB0aGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGRvZXMgbm90DQo+ICsg IHN1cHBvcnQgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSwgdGhlbiBFRklfVU5T VVBQT1JURUQgaXMgcmV0dXJuZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAg ICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklfQ09NUE9ORU5UX05BTUUyX1BST1RPQ09MIG9yDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9DT01QT05FTlRfTkFNRV9QUk9U T0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgQ29udHJvbGxlciAgICAgICAgVGhlIGhh bmRsZSBvZiBhIGNvbnRyb2xsZXIgdGhhdCB0aGUgZHJpdmVyDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNwZWNpZmllZCBieSBUaGlzIGlzIG1hbmFnaW5nLiAgVGhpcyBoYW5k bGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVzIHRoZSBjb250 cm9sbGVyIHdob3NlIG5hbWUgaXMgdG8gYmUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuZWQuDQo+ICsgIEBwYXJhbVtpbl0gIENoaWxkSGFuZGxlICAgICAgIFRoZSBo YW5kbGUgb2YgdGhlIGNoaWxkIGNvbnRyb2xsZXIgdG8gcmV0cmlldmUNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGhlIG5hbWUgb2YuICBUaGlzIGlzIGFuIG9wdGlvbmFsIHBh cmFtZXRlciB0aGF0DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heSBiZSBO VUxMLiAgSXQgd2lsbCBiZSBOVUxMIGZvciBkZXZpY2UNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZHJpdmVycy4gIEl0IHdpbGwgYWxzbyBiZSBOVUxMIGZvciBhIGJ1cyBkcml2 ZXJzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgd2lzaCB0byByZXRy aWV2ZSB0aGUgbmFtZSBvZiB0aGUgYnVzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnRyb2xsZXIuICBJdCB3aWxsIG5vdCBiZSBOVUxMIGZvciBhIGJ1cw0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXIgdGhhdCB3aXNoZXMgdG8gcmV0cmlldmUg dGhlIG5hbWUgb2YgYQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCBj b250cm9sbGVyLg0KPiArICBAcGFyYW1baW5dICBMYW5ndWFnZSAgICAgICAgICBBIHBvaW50ZXIg dG8gYSBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFycmF5IGluZGljYXRpbmcgdGhlIGxhbmd1YWdlLiAgVGhpcyBpcyB0aGUN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2Ugb2YgdGhlIGRyaXZl ciBuYW1lIHRoYXQgdGhlIGNhbGxlciBpcw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZXF1ZXN0aW5nLCBhbmQgaXQgbXVzdCBtYXRjaCBvbmUgb2YgdGhlDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlcyBzcGVjaWZpZWQgaW4gU3VwcG9ydGVk TGFuZ3VhZ2VzLiBUaGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVy IG9mIGxhbmd1YWdlcyBzdXBwb3J0ZWQgYnkgYSBkcml2ZXIgaXMgdXANCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGRyaXZlciB3cml0ZXIuIExhbmd1YWdlIGlzIHNw ZWNpZmllZCBpbg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRkMgNDY0NiBv ciBJU08gNjM5LTIgbGFuZ3VhZ2UgY29kZSBmb3JtYXQuDQo+ICsgIEBwYXJhbVtvdXRdIENvbnRy b2xsZXJOYW1lICAgIEEgcG9pbnRlciB0byB0aGUgVW5pY29kZSBzdHJpbmcgdG8gcmV0dXJuLg0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIFVuaWNvZGUgc3RyaW5nIGlz IHRoZSBuYW1lIG9mIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250 cm9sbGVyIHNwZWNpZmllZCBieSBDb250cm9sbGVySGFuZGxlIGFuZA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBDaGlsZEhhbmRsZSBpbiB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVk IGJ5DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhbmd1YWdlIGZyb20gdGhl IHBvaW50IG9mIHZpZXcgb2YgdGhlIGRyaXZlcg0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzcGVjaWZpZWQgYnkgVGhpcy4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICAgICBUaGUgVW5pY29kZSBzdHJpbmcgZm9yIHRoZSB1c2VyIHJlYWRhYmxlIG5hbWUg aW4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxhbmd1YWdlIHNwZWNp ZmllZCBieSBMYW5ndWFnZSBmb3IgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyB3YXMgcmV0dXJuZWQgaW4NCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRHJpdmVyTmFtZS4NCj4gKyAgQHJldHZhbCBFRklfSU5W QUxJRF9QQVJBTUVURVIgQ29udHJvbGxlckhhbmRsZSBpcyBub3QgYSB2YWxpZCBFRklfSEFORExF Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBDaGlsZEhhbmRsZSBpcyBub3Qg TlVMTCBhbmQgaXQgaXMgbm90IGEgdmFsaWQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRUZJX0hBTkRMRS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgTGFu Z3VhZ2UgaXMgTlVMTC4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgQ29udHJv bGxlck5hbWUgaXMgTlVMTC4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgVGhl IGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBpcyBub3QgY3VycmVudGx5DQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1hbmFnaW5nIHRoZSBjb250cm9sbGVyIHNwZWNpZmllZCBi eQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlIGFu ZCBDaGlsZEhhbmRsZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgVGhlIGRy aXZlciBzcGVjaWZpZWQgYnkgVGhpcyBkb2VzIG5vdCBzdXBwb3J0DQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UuDQo+ ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtOZXR3b3JrQ29tbW9uQ29t cG9uZW50TmFtZUdldENvbnRyb2xsZXJOYW1lICgNCj4gKyAgSU4gIEVGSV9DT01QT05FTlRfTkFN RV9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOICBFRklfSEFORExFICAgICAgICAgICAgICAgICAg IENvbnRyb2xsZXIsDQo+ICsgIElOICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENoaWxk SGFuZGxlICAgICAgICBPUFRJT05BTCwNCj4gKyAgSU4gIENIQVI4ICAgICAgICAgICAgICAgICAg ICAgICAgKkxhbmd1YWdlLA0KPiArICBPVVQgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAq KkNvbnRyb2xsZXJOYW1lDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAg ICAgICAgU3RhdHVzOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAqSGFuZGxlTmFt ZTsNCj4gKyAgRUZJX1VTQl9JT19QUk9UT0NPTCAgICAgICAgKlVzYklvOw0KPiArICBFRklfVVNC X0RFVklDRV9ERVNDUklQVE9SICBEZXZEZXNjOw0KPiArDQo+ICsgIGlmICghTGFuZ3VhZ2UgfHwg IUNvbnRyb2xsZXJOYW1lKSB7DQo+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsN Cj4gKyAgfQ0KPiArDQo+ICsgIGlmIChDaGlsZEhhbmRsZSA9PSBOVUxMKSB7DQo+ICsgICAgcmV0 dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIE1ha2Ug c3VyZSB0aGlzIGRyaXZlciBpcyBjdXJyZW50bHkgbWFuYWdpbmcgQ29udHJvbGxlckhhbmRsZQ0K PiArICAvLw0KPiArICBTdGF0dXMgPSBFZmlUZXN0TWFuYWdlZERldmljZSAoDQo+ICsgICAgICAg ICAgICAgQ29udHJvbGxlciwNCj4gKyAgICAgICAgICAgICBnTmV0d29ya0NvbW1vbkRyaXZlckJp bmRpbmcuRHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAmZ0Vka0lJVXNiRXRo UHJvdG9jb2xHdWlkDQo+ICsgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiAr ICAvLyBNYWtlIHN1cmUgdGhpcyBkcml2ZXIgcHJvZHVjZWQgQ2hpbGRIYW5kbGUNCj4gKyAgLy8N Cj4gKyAgU3RhdHVzID0gRWZpVGVzdENoaWxkSGFuZGxlICgNCj4gKyAgICAgICAgICAgICBDb250 cm9sbGVyLA0KPiArICAgICAgICAgICAgIENoaWxkSGFuZGxlLA0KPiArICAgICAgICAgICAgICZn RWRrSUlVc2JFdGhQcm90b2NvbEd1aWQNCj4gKyAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ ICsgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKENvbnRyb2xsZXIsICZnRWZpVXNiSW9Q cm90b2NvbEd1aWQsIChWT0lEICoqKSZVc2JJbyk7DQo+ICsNCj4gKyAgaWYgKCFFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gKyAgICBTdGF0dXMgPSBVc2JJby0+VXNiR2V0RGV2aWNlRGVzY3JpcHRv ciAoVXNiSW8sICZEZXZEZXNjKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0NCj4gKw0KPiArICAgIFN0YXR1cyA9IFVz YklvLT5Vc2JHZXRTdHJpbmdEZXNjcmlwdG9yIChVc2JJbywgMHg0MDksIERldkRlc2MuU3RyTWFu dWZhY3R1cmVyLCAmSGFuZGxlTmFtZSk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICAqQ29udHJv bGxlck5hbWUgPSBIYW5kbGVOYW1lOw0KPiArDQo+ICsgICAgaWYgKGdOZXR3b3JrQ29tbW9uQ29u dHJvbGxlck5hbWVUYWJsZSAhPSBOVUxMKSB7DQo+ICsgICAgICBGcmVlVW5pY29kZVN0cmluZ1Rh YmxlIChnTmV0d29ya0NvbW1vbkNvbnRyb2xsZXJOYW1lVGFibGUpOw0KPiArICAgICAgZ05ldHdv cmtDb21tb25Db250cm9sbGVyTmFtZVRhYmxlID0gTlVMTDsNCj4gKyAgICB9DQo+ICsNCj4gKyAg ICBTdGF0dXMgPSBBZGRVbmljb2RlU3RyaW5nMiAoDQo+ICsgICAgICAgICAgICAgICAiZW5nIiwN Cj4gKyAgICAgICAgICAgICAgIGdOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZS5TdXBwb3J0ZWRM YW5ndWFnZXMsDQo+ICsgICAgICAgICAgICAgICAmZ05ldHdvcmtDb21tb25Db250cm9sbGVyTmFt ZVRhYmxlLA0KPiArICAgICAgICAgICAgICAgSGFuZGxlTmFtZSwNCj4gKyAgICAgICAgICAgICAg IFRSVUUNCj4gKyAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBTdGF0 dXMgPSBBZGRVbmljb2RlU3RyaW5nMiAoDQo+ICsgICAgICAgICAgICAgICAiZW4iLA0KPiArICAg ICAgICAgICAgICAgZ05ldHdvcmtDb21tb25Db21wb25lbnROYW1lMi5TdXBwb3J0ZWRMYW5ndWFn ZXMsDQo+ICsgICAgICAgICAgICAgICAmZ05ldHdvcmtDb21tb25Db250cm9sbGVyTmFtZVRhYmxl LA0KPiArICAgICAgICAgICAgICAgSGFuZGxlTmFtZSwNCj4gKyAgICAgICAgICAgICAgIEZBTFNF DQo+ICsgICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4gKyAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgcmV0dXJuIExv b2t1cFVuaWNvZGVTdHJpbmcyICgNCj4gKyAgICAgICAgICAgICBMYW5ndWFnZSwNCj4gKyAgICAg ICAgICAgICBUaGlzLT5TdXBwb3J0ZWRMYW5ndWFnZXMsDQo+ICsgICAgICAgICAgICAgZ05ldHdv cmtDb21tb25Db250cm9sbGVyTmFtZVRhYmxlLA0KPiArICAgICAgICAgICAgIENvbnRyb2xsZXJO YW1lLA0KPiArICAgICAgICAgICAgIChCT09MRUFOKShUaGlzID09ICZnTmV0d29ya0NvbW1vbkNv bXBvbmVudE5hbWUpDQo+ICsgICAgICAgICAgICAgKTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVy biBFRklfVU5TVVBQT1JURUQ7DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9Vc2JOZXR3b3JrUGtnL05l dHdvcmtDb21tb24vRHJpdmVyQmluZGluZy5jIGIvVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9u L0RyaXZlckJpbmRpbmcuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAw MDAwLi5kYmM5ZjAwN2VkDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvVXNiTmV0d29ya1BrZy9O ZXR3b3JrQ29tbW9uL0RyaXZlckJpbmRpbmcuYw0KPiBAQCAtMCwwICsxLDU4MyBAQA0KPiArLyoq IEBmaWxlDQo+ICsgIFRoaXMgZmlsZSBjb250YWlucyBjb2RlIGZvciBVU0IgbmV0d29yayBiaW5k aW5nIGRyaXZlcg0KPiArDQo+ICsgIENvcHlyaWdodCAoYykgMjAyMiwgQW1lcmljYW4gTWVnYXRy ZW5kcyBJbnRlcm5hdGlvbmFsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsgIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsqKi8NCj4gKw0K PiArI2luY2x1ZGUgIkRyaXZlckJpbmRpbmcuaCINCj4gKw0KPiArUFhFX1NXX1VOREkgICpnUHhl ID0gTlVMTDsNCj4gK05JQ19ERVZJQ0UgICAqZ0xhbkRldmljZUxpc3RbTUFYX0xBTl9JTlRFUkZB Q0VdOw0KPiArDQo+ICtFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgIGdOZXR3b3JrQ29tbW9u RHJpdmVyQmluZGluZyA9IHsNCj4gKyAgTmV0d29ya0NvbW1vblN1cHBvcnRlZCwNCj4gKyAgTmV0 d29ya0NvbW1vbkRyaXZlclN0YXJ0LA0KPiArICBOZXR3b3JrQ29tbW9uRHJpdmVyU3RvcCwNCj4g KyAgTkVUV09SS19DT01NT05fRFJJVkVSX1ZFUlNJT04sDQo+ICsgIE5VTEwsDQo+ICsgIE5VTEwN Cj4gK307DQo+ICsNCj4gKy8qKg0KPiArICBDcmVhdGUgTUFDIERldmljZSBQYXRoDQo+ICsNCj4g KyAgQHBhcmFtW2luLCBvdXRdIERldiAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9E RVZJQ0VfUEFUSF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgICAgIEJhc2VE ZXYgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCBpbnN0 YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgICAgIE5pYyAgICAgICAgICAgICBBIHBvaW50ZXIgdG8g dGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFs IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgIFRoZSBkZXZpY2UgcGF0aCBjb3VsZCBub3QgYmUgY3Jl YXRlZCBzdWNjZXNzZnVsbHkgZHVlIHRvIGEgbGFjayBvZiByZXNvdXJjZXMuDQo+ICsgIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgTUFDIGRldmljZSBwYXRoIGNyZWF0ZWQgc3VjY2Vz c2Z1bGx5Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0NyZWF0ZU1hY0RldmljZVBh dGggKA0KPiArICBJTiBPVVQgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgKipEZXYsDQo+ICsg IElOICAgICAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqQmFzZURldiwNCj4gKyAgSU4gICAg ICBOSUNfREFUQSAgICAgICAgICAgICAgICAgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBFRklf U1RBVFVTICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgTUFDX0FERFJfREVWSUNFX1BBVEgg ICAgICBNYWNBZGRyTm9kZTsNCj4gKyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqRW5kTm9k ZTsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAqRGV2aWNlUGF0aDsNCj4gKyAgVUlO VDE2ICAgICAgICAgICAgICAgICAgICBUb3RhbExlbmd0aDsNCj4gKyAgVUlOVDE2ICAgICAgICAg ICAgICAgICAgICBCYXNlTGVuZ3RoOw0KPiArDQo+ICsgIFplcm9NZW0gKCZNYWNBZGRyTm9kZSwg c2l6ZW9mIChNQUNfQUREUl9ERVZJQ0VfUEFUSCkpOw0KPiArICBDb3B5TWVtICgmTWFjQWRkck5v ZGUuTWFjQWRkcmVzcywgJk5pYy0+TWFjQWRkciwgc2l6ZW9mIChFRklfTUFDX0FERFJFU1MpKTsN Cj4gKw0KPiArICBNYWNBZGRyTm9kZS5IZWFkZXIuVHlwZSAgICAgID0gTUVTU0FHSU5HX0RFVklD RV9QQVRIOw0KPiArICBNYWNBZGRyTm9kZS5IZWFkZXIuU3ViVHlwZSAgID0gTVNHX01BQ19BRERS X0RQOw0KPiArICBNYWNBZGRyTm9kZS5IZWFkZXIuTGVuZ3RoWzBdID0gKFVJTlQ4KXNpemVvZiAo TWFjQWRkck5vZGUpOw0KPiArICBNYWNBZGRyTm9kZS5IZWFkZXIuTGVuZ3RoWzFdID0gMDsNCj4g Kw0KPiArICBFbmROb2RlID0gQmFzZURldjsNCj4gKw0KPiArICB3aGlsZSAoIUlzRGV2aWNlUGF0 aEVuZCAoRW5kTm9kZSkpIHsNCj4gKyAgICBFbmROb2RlID0gTmV4dERldmljZVBhdGhOb2RlIChF bmROb2RlKTsNCj4gKyAgfQ0KPiArDQo+ICsgIEJhc2VMZW5ndGggID0gKFVJTlQxNikoKFVJTlRO KShFbmROb2RlKSAtIChVSU5UTikoQmFzZURldikpOw0KPiArICBUb3RhbExlbmd0aCA9IChVSU5U MTYpKEJhc2VMZW5ndGggKyBzaXplb2YgKE1hY0FkZHJOb2RlKSArIHNpemVvZiAoRUZJX0RFVklD RV9QQVRIX1BST1RPQ09MKSk7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5BbGxvY2F0ZVBvb2wg KEVmaUJvb3RTZXJ2aWNlc0RhdGEsIFRvdGFsTGVuZ3RoLCAoVk9JRCAqKikmRGV2aWNlUGF0aCk7 DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0K PiArICB9DQo+ICsNCj4gKyAgKkRldiA9IChFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgKilEZXZp Y2VQYXRoOw0KPiArICBDb3B5TWVtIChEZXZpY2VQYXRoLCAoQ0hBUjggKilCYXNlRGV2LCBCYXNl TGVuZ3RoKTsNCj4gKyAgRGV2aWNlUGF0aCArPSBCYXNlTGVuZ3RoOw0KPiArICBDb3B5TWVtIChE ZXZpY2VQYXRoLCAoQ0hBUjggKikmTWFjQWRkck5vZGUsIHNpemVvZiAoTWFjQWRkck5vZGUpKTsN Cj4gKyAgRGV2aWNlUGF0aCArPSBzaXplb2YgKE1hY0FkZHJOb2RlKTsNCj4gKyAgQ29weU1lbSAo RGV2aWNlUGF0aCwgKENIQVI4ICopRW5kTm9kZSwgc2l6ZW9mIChFRklfREVWSUNFX1BBVEhfUFJP VE9DT0wpKTsNCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICBOZXR3b3JrIENvbW1vbiBEcml2ZXIgQmluZGluZyBTdXBwb3J0Lg0KPiArDQo+ICsg IEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICAgIFByb3RvY29sIGluc3RhbmNlIHBv aW50ZXIuDQo+ICsgIEBwYXJhbVtpbl0gIENvbnRyb2xsZXJIYW5kbGUgICAgICAgIEhhbmRsZSBv ZiBkZXZpY2UgdG8gdGVzdC4NCj4gKyAgQHBhcmFtW2luXSAgUmVtYWluaW5nRGV2aWNlUGF0aCAg ICAgT3B0aW9uYWwgcGFyYW1ldGVyIHVzZSB0byBwaWNrIGEgc3BlY2lmaWMgY2hpbGQNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHRvIHN0YXJ0Lg0KPiAr DQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgIFRoaXMgZHJpdmVyIHN1 cHBvcnRzIHRoaXMgZGV2aWNlLg0KPiArICBAcmV0dmFsIEVGSV9BTFJFQURZX1NUQVJURUQgICAg ICAgICBUaGlzIGRyaXZlciBpcyBhbHJlYWR5IHJ1bm5pbmcgb24gdGhpcyBkZXZpY2UuDQo+ICsg IEByZXR2YWwgb3RoZXIgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZHJpdmVyIGRvZXMgbm90 IHN1cHBvcnQgdGhpcyBkZXZpY2UuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJ QVBJDQo+ICtOZXR3b3JrQ29tbW9uU3VwcG9ydGVkICgNCj4gKyAgSU4gRUZJX0RSSVZFUl9CSU5E SU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAg ICBDb250cm9sbGVySGFuZGxlLA0KPiArICBJTiBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAg ICpSZW1haW5pbmdEZXZpY2VQYXRoDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAg ICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAg KlVzYkV0aDsNCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQo+ICsgICAg ICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgJmdF ZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZV c2JFdGgsDQo+ICsgICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0K PiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAg ICAgIEVGSV9PUEVOX1BST1RPQ09MX0JZX0RSSVZFUg0KPiArICAgICAgICAgICAgICAgICAgKTsN Cj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ ICsgIH0NCj4gKw0KPiArICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgQ29udHJv bGxlckhhbmRsZSwNCj4gKyAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsg ICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgQ29udHJvbGxl ckhhbmRsZQ0KPiArICAgICAgICAgKTsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgIE5ldHdvcmsgQ29tbW9uIERyaXZlciBCaW5kaW5nIFN0YXJ0Lg0KPiArDQo+ ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICAgIFByb3RvY29sIGluc3RhbmNl IHBvaW50ZXIuDQo+ICsgIEBwYXJhbVtpbl0gIENvbnRyb2xsZXJIYW5kbGUgICAgICAgIEhhbmRs ZSBvZiBkZXZpY2UgdG8gYmluZCBkcml2ZXIgdG8uDQo+ICsgIEBwYXJhbVtpbl0gIFJlbWFpbmlu Z0RldmljZVBhdGggICAgIE9wdGlvbmFsIHBhcmFtZXRlciB1c2UgdG8gcGljayBhIHNwZWNpZmlj IGNoaWxkDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSB0 byBzdGFydC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgICBU aGlzIGRyaXZlciBpcyBhZGRlZCB0byBDb250cm9sbGVySGFuZGxlDQo+ICsgIEByZXR2YWwgRUZJ X0RFVklDRV9FUlJPUiAgICAgICAgICAgIFRoaXMgZHJpdmVyIGNvdWxkIG5vdCBiZSBzdGFydGVk IGR1ZSB0byBhIGRldmljZSBlcnJvcg0KPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VT ICAgICAgICBUaGUgZHJpdmVyIGNvdWxkIG5vdCBpbnN0YWxsIHN1Y2Nlc3NmdWxseSBkdWUgdG8g YSBsYWNrIG9mIHJlc291cmNlcy4NCj4gKyAgQHJldHZhbCBvdGhlciAgICAgICAgICAgICAgICAg ICAgICAgVGhpcyBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGRldmljZQ0KPiArDQo+ICsq Ki8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArTmV0d29ya0NvbW1vbkRyaXZlclN0YXJ0 ICgNCj4gKyAgSU4gRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4g RUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICBJTiBF RklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICpSZW1haW5pbmdEZXZpY2VQYXRoDQo+ICsgICkN Cj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVG SV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgKlVzYkV0aFBhdGg7DQo+ICsgIEVES0lJX1VTQl9F VEhFUk5FVF9QUk9UT0NPTCAgKlVzYkV0aDsNCj4gKyAgRUZJX01BQ19BRERSRVNTICAgICAgICAg ICAgICBNYWNBZGRyZXNzOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgIEJ1bGtE YXRhU2l6ZTsNCj4gKyAgTklDX0RFVklDRSAgICAgICAgICAgICAgICAgICAqTmljRGV2aWNlOw0K PiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICpUbXBQeGVQb2ludGVyOw0KPiArDQo+ ICsgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgIENv bnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9j b2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVzYkV0aCwNCj4gKyAgICAg ICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAg ICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgRUZJX09QRU5fUFJP VE9DT0xfQllfRFJJVkVSDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsg IFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRy b2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2Nv bEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiRXRoUGF0aCwNCj4gKyAg ICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAg ICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgRUZJX09QRU5f UFJPVE9DT0xfQllfRFJJVkVSDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiAr ICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAmZ0Vka0lJVXNiRXRo UHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0K PiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICk7DQo+ICsgICAg cmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFplcm9NZW0gKCZNYWNBZGRyZXNzLCBz aXplb2YgKEVGSV9NQUNfQUREUkVTUykpOw0KPiArDQo+ICsgIFN0YXR1cyA9IFVzYkV0aC0+VXNi RXRoTWFjQWRkcmVzcyAoVXNiRXRoLCAmTWFjQWRkcmVzcyk7DQo+ICsgIEFTU0VSVF9FRklfRVJS T1IgKFN0YXR1cyk7DQo+ICsgIFN0YXR1cyA9IFVzYkV0aC0+VXNiRXRoTWF4QnVsa1NpemUgKFVz YkV0aCwgJkJ1bGtEYXRhU2l6ZSk7DQo+ICsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJI YW5kbGUsDQo+ICsgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAg ICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgQ29udHJv bGxlckhhbmRsZQ0KPiArICAgICAgICAgICApOw0KPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAo DQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICZnRWRrSUlV c2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5k bGUsDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgKTsNCj4g KyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgTmljRGV2aWNlID0gQWxsb2Nh dGVaZXJvUG9vbCAoc2l6ZW9mIChOSUNfREVWSUNFKSArIEJ1bGtEYXRhU2l6ZSArIDQwOTYpOw0K PiArICBpZiAoIU5pY0RldmljZSkgew0KPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsg ICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICZnRWZpRGV2aWNlUGF0 aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwN Cj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICApOw0KPiArICAg IGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ ICsgICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgIFRo aXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUN Cj4gKyAgICAgICAgICAgKTsNCj4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ ICsgIH0NCj4gKw0KPiArICAvLyBmb3IgYWxpZ25tZW50IGFkanVzdG1lbnQNCj4gKyAgaWYgKGdQ eGUgPT0gTlVMTCkgew0KPiArICAgIFRtcFB4ZVBvaW50ZXIgPSBOVUxMOw0KPiArICAgIFRtcFB4 ZVBvaW50ZXIgPSBBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YgKFBYRV9TV19VTkRJKSArIDE2KTsN Cj4gKyAgICBpZiAoIVRtcFB4ZVBvaW50ZXIpIHsNCj4gKyAgICAgIGlmIChOaWNEZXZpY2UgIT0g TlVMTCkgew0KPiArICAgICAgICBGcmVlUG9vbCAoTmljRGV2aWNlKTsNCj4gKyAgICAgIH0NCj4g Kw0KPiArICAgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgICBDb250cm9s bGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwN Cj4gKyAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAg ICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgICApOw0KPiArICAgICAgZ0JTLT5D bG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAg ICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgVGhp cy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxl DQo+ICsgICAgICAgICAgICAgKTsNCj4gKw0KPiArICAgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVT T1VSQ0VTOw0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICAvLyBjaGVjayBmb3IgcGFyYWdyYXBo IGFsaWdubWVudCBoZXJlDQo+ICsgICAgICBpZiAoKChVSU5UTilUbXBQeGVQb2ludGVyICYgMHgw RikgIT0gMCkgew0KPiArICAgICAgICBnUHhlID0gKFBYRV9TV19VTkRJICopKFRtcFB4ZVBvaW50 ZXIgKyA4KTsNCj4gKyAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgIGdQeGUgPSAoUFhFX1NXX1VO REkgKilUbXBQeGVQb2ludGVyOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICBpZiAoIWdQeGUp IHsNCj4gKyAgICAgICAgaWYgKE5pY0RldmljZSAhPSBOVUxMKSB7DQo+ICsgICAgICAgICAgRnJl ZVBvb2wgKE5pY0RldmljZSk7DQo+ICsgICAgICAgIH0NCj4gKw0KPiArICAgICAgICBnQlMtPkNs b3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAg ICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAg ICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICBDb250cm9s bGVySGFuZGxlDQo+ICsgICAgICAgICAgICAgICApOw0KPiArICAgICAgICBnQlMtPkNsb3NlUHJv dG9jb2wgKA0KPiArICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAg ICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICBUaGlz LT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRs ZQ0KPiArICAgICAgICAgICAgICAgKTsNCj4gKyAgICAgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVT T1VSQ0VTOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICBQeGVTdHJ1Y3RJbml0IChnUHhlKTsN Cj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBOaWNEZXZpY2UtPk5paVByb3RvY29sLklkICAg ID0gKFVJTlQ2NCkoVUlOVE4pKGdQeGUpOw0KPiArICBOaWNEZXZpY2UtPk5paVByb3RvY29sLklm TnVtID0gZ1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4Ow0KPiArDQo+ICsgIFVwZGF0 ZU5pY051bSAoJk5pY0RldmljZS0+TmljSW5mbywgZ1B4ZSk7DQo+ICsNCj4gKyAgTmljRGV2aWNl LT5OaWNJbmZvLlNpZ25hdHVyZSA9IE5JQ19EQVRBX1NJR05BVFVSRTsNCj4gKw0KPiArICBOaWNE ZXZpY2UtPk5pY0luZm8uVXNiRXRoICAgICAgICAgPSBVc2JFdGg7DQo+ICsgIE5pY0RldmljZS0+ TmljSW5mby5NYXhTZWdtZW50U2l6ZSA9IChVSU5UMTYpQnVsa0RhdGFTaXplOw0KPiArICBOaWNE ZXZpY2UtPk5pY0luZm8uQ2FibGVEZXRlY3QgICAgPSAwOw0KPiArICBOaWNEZXZpY2UtPlJlY2Vp dmVCdWZmZXIgICAgICAgICAgPSBBTElHTl9QT0lOVEVSICgoVk9JRCAqKU5pY0RldmljZSwgNDA5 Nik7DQo+ICsNCj4gKyAgQ29weU1lbSAoKENIQVI4ICopJihOaWNEZXZpY2UtPk5pY0luZm8uTWFj QWRkciksIChDSEFSOCAqKSZNYWNBZGRyZXNzLCBzaXplb2YgKE1hY0FkZHJlc3MpKTsNCj4gKw0K PiArICBOaWNEZXZpY2UtPk5pY0luZm8uVHhCdWZmZXJDb3VudCA9IDA7DQo+ICsNCj4gKyAgaWYg KE5pY0RldmljZS0+TmlpUHJvdG9jb2wuSWZOdW0gPCBNQVhfTEFOX0lOVEVSRkFDRSkgew0KPiAr ICAgIGdMYW5EZXZpY2VMaXN0W05pY0RldmljZS0+TmlpUHJvdG9jb2wuSWZOdW1dID0gTmljRGV2 aWNlOw0KPiArICB9IGVsc2Ugew0KPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAg ICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFBy b3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4g KyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICApOw0KPiArICAgIGdC Uy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsg ICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgIFRoaXMt PkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4g KyAgICAgICAgICAgKTsNCj4gKw0KPiArICAgIGlmIChUbXBQeGVQb2ludGVyICE9IE5VTEwpIHsN Cj4gKyAgICAgIEZyZWVQb29sIChUbXBQeGVQb2ludGVyKTsNCj4gKyAgICB9DQo+ICsNCj4gKyAg ICBpZiAoTmljRGV2aWNlICE9IE5VTEwpIHsNCj4gKyAgICAgIEZyZWVQb29sIChOaWNEZXZpY2Up Ow0KPiArICAgIH0NCj4gKw0KPiArICAgIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KPiArICB9 DQo+ICsNCj4gKyAgU3RhdHVzID0gQ3JlYXRlTWFjRGV2aWNlUGF0aCAoDQo+ICsgICAgICAgICAg ICAgJk5pY0RldmljZS0+RGV2UGF0aCwNCj4gKyAgICAgICAgICAgICBVc2JFdGhQYXRoLA0KPiAr ICAgICAgICAgICAgICZOaWNEZXZpY2UtPk5pY0luZm8NCj4gKyAgICAgICAgICAgICApOw0KPiAr DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBVcGRhdGVOaWNOdW0gKE5V TEwsIGdQeGUpOw0KPiArICAgIGlmIChUbXBQeGVQb2ludGVyICE9IE5VTEwpIHsNCj4gKyAgICAg IEZyZWVQb29sIChUbXBQeGVQb2ludGVyKTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBO aWNEZXZpY2UtPlNpZ25hdHVyZSAgICAgICAgICAgICAgICAgPSBVTkRJX0RFVl9TSUdOQVRVUkU7 DQo+ICsgIE5pY0RldmljZS0+TmlpUHJvdG9jb2wuUmV2aXNpb24gICAgICA9IEVGSV9ORVRXT1JL X0lOVEVSRkFDRV9JREVOVElGSUVSX1BST1RPQ09MX1JFVklTSU9OOw0KPiArICBOaWNEZXZpY2Ut Pk5paVByb3RvY29sLlR5cGUgICAgICAgICAgPSBFZmlOZXR3b3JrSW50ZXJmYWNlVW5kaTsNCj4g KyAgTmljRGV2aWNlLT5OaWlQcm90b2NvbC5NYWpvclZlciAgICAgID0gUFhFX1JPTUlEX01BSk9S VkVSOw0KPiArICBOaWNEZXZpY2UtPk5paVByb3RvY29sLk1pbm9yVmVyICAgICAgPSBQWEVfUk9N SURfTUlOT1JWRVI7DQo+ICsgIE5pY0RldmljZS0+TmlpUHJvdG9jb2wuSW1hZ2VTaXplICAgICA9 IDA7DQo+ICsgIE5pY0RldmljZS0+TmlpUHJvdG9jb2wuSW1hZ2VBZGRyICAgICA9IDA7DQo+ICsg IE5pY0RldmljZS0+TmlpUHJvdG9jb2wuSXB2NlN1cHBvcnRlZCA9IFRSVUU7DQo+ICsNCj4gKyAg TmljRGV2aWNlLT5OaWlQcm90b2NvbC5TdHJpbmdJZFswXSA9ICdVJzsNCj4gKyAgTmljRGV2aWNl LT5OaWlQcm90b2NvbC5TdHJpbmdJZFsxXSA9ICdOJzsNCj4gKyAgTmljRGV2aWNlLT5OaWlQcm90 b2NvbC5TdHJpbmdJZFsyXSA9ICdEJzsNCj4gKyAgTmljRGV2aWNlLT5OaWlQcm90b2NvbC5TdHJp bmdJZFszXSA9ICdJJzsNCj4gKyAgTmljRGV2aWNlLT5EZXZpY2VIYW5kbGUgICAgICAgICAgICA9 IE5VTEw7DQo+ICsNCj4gKyAgWmVyb01lbSAoJk5pY0RldmljZS0+TmljSW5mby5SZXF1ZXN0LCBz aXplb2YgKEVGSV9VU0JfREVWSUNFX1JFUVVFU1QpKTsNCj4gKw0KPiArICBTdGF0dXMgPSBVc2JF dGgtPlVzYkV0aEludGVycnVwdCAoVXNiRXRoLCBUUlVFLCBORVRXT1JLX0NPTU1PTl9QT0xMSU5H X0lOVEVSVkFMLCAmTmljRGV2aWNlLT5OaWNJbmZvLlJlcXVlc3QpOw0KPiArICBBU1NFUlRfRUZJ X0VSUk9SIChTdGF0dXMpOw0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+SW5zdGFsbE11bHRpcGxl UHJvdG9jb2xJbnRlcmZhY2VzICgNCj4gKyAgICAgICAgICAgICAgICAgICZOaWNEZXZpY2UtPkRl dmljZUhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpTmV0d29ya0ludGVyZmFjZUlk ZW50aWZpZXJQcm90b2NvbEd1aWRfMzEsDQo+ICsgICAgICAgICAgICAgICAgICAmTmljRGV2aWNl LT5OaWlQcm90b2NvbCwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3Rv Y29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIE5pY0RldmljZS0+RGV2UGF0aCwNCj4gKyAg ICAgICAgICAgICAgICAgIE5VTEwNCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIGlmIChOaWNEZXZpY2UtPk5paVByb3Rv Y29sLklmTnVtIDwgTUFYX0xBTl9JTlRFUkZBQ0UpIHsNCj4gKyAgICAgIGdMYW5EZXZpY2VMaXN0 W05pY0RldmljZS0+TmlpUHJvdG9jb2wuSWZOdW1dID0gTlVMTDsNCj4gKyAgICB9DQo+ICsNCj4g KyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxl LA0KPiArICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAg ICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJI YW5kbGUNCj4gKyAgICAgICAgICAgKTsNCj4gKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiAr ICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAmZ0Vka0lJVXNiRXRo UHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0K PiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICk7DQo+ICsNCj4g KyAgICBpZiAoVG1wUHhlUG9pbnRlciAhPSBOVUxMKSB7DQo+ICsgICAgICBGcmVlUG9vbCAoVG1w UHhlUG9pbnRlcik7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKE5pY0RldmljZS0+RGV2UGF0 aCAhPSBOVUxMKSB7DQo+ICsgICAgICBGcmVlUG9vbCAoTmljRGV2aWNlLT5EZXZQYXRoKTsNCj4g KyAgICB9DQo+ICsNCj4gKyAgICBpZiAoTmljRGV2aWNlICE9IE5VTEwpIHsNCj4gKyAgICAgIEZy ZWVQb29sIChOaWNEZXZpY2UpOw0KPiArICAgIH0NCj4gKw0KPiArICAgIHJldHVybiBFRklfREVW SUNFX0VSUk9SOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wg KA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAg ICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAo Vk9JRCAqKikmVXNiRXRoLA0KPiArICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGlu Z0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgIE5pY0RldmljZS0+RGV2aWNlSGFuZGxlLA0K PiArICAgICAgICAgICAgICAgICAgRUZJX09QRU5fUFJPVE9DT0xfQllfQ0hJTERfQ09OVFJPTExF Ug0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAgTmV0d29yayBDb21tb24gRHJpdmVyIEJpbmRpbmcgU3RvcC4N Cj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgICAgUHJvdG9jb2wgaW5z dGFuY2UgcG9pbnRlci4NCj4gKyAgQHBhcmFtW2luXSAgQ29udHJvbGxlckhhbmRsZSAgICAgIEhh bmRsZSBvZiBkZXZpY2UgdG8gc3RvcCBkcml2ZXIgb24NCj4gKyAgQHBhcmFtW2luXSAgTnVtYmVy T2ZDaGlsZHJlbiAgICAgIE51bWJlciBvZiBIYW5kbGVzIGluIENoaWxkSGFuZGxlQnVmZmVyLiBJ ZiBudW1iZXIgb2YNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxk cmVuIGlzIHplcm8gc3RvcCB0aGUgZW50aXJlIGJ1cyBkcml2ZXIuDQo+ICsgIEBwYXJhbVtpbl0g IENoaWxkSGFuZGxlQnVmZmVyICAgICBMaXN0IG9mIENoaWxkIEhhbmRsZXMgdG8gU3RvcC4NCj4g Kw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgVGhpcyBkcml2ZXIgaXMg cmVtb3ZlZCBDb250cm9sbGVySGFuZGxlDQo+ICsgIEByZXR2YWwgb3RoZXIgICAgICAgICAgICAg ICAgICAgICBUaGlzIGRyaXZlciB3YXMgbm90IHJlbW92ZWQgZnJvbSB0aGlzIGRldmljZQ0KPiAr DQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArTmV0d29ya0NvbW1vbkRyaXZl clN0b3AgKA0KPiArICBJTiAgRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4g KyAgSU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4g KyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZDaGlsZHJlbiwNCj4g KyAgSU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgKkNoaWxkSGFuZGxlQnVmZmVyDQo+ ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFN0YXR1czsNCj4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEFsbENoaWxkcmVuU3RvcHBlZDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEluZGV4Ow0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wg ICAgICAgICAgICAgICAgKlVzYkV0aDsNCj4gKyAgTklDX0RFVklDRSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICpOaWNEZXZpY2U7DQo+ICsgIEVGSV9ORVRXT1JLX0lOVEVSRkFDRV9J REVOVElGSUVSX1BST1RPQ09MICAqTmlpUHJvdG9jb2w7DQo+ICsNCj4gKyAgaWYgKE51bWJlck9m Q2hpbGRyZW4gPT0gMCkgew0KPiArICAgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICgNCj4g KyAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAg ICAgICAgJmdFZmlOZXR3b3JrSW50ZXJmYWNlSWRlbnRpZmllclByb3RvY29sR3VpZF8zMSwNCj4g KyAgICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJk5paVByb3RvY29sLA0KPiArICAgICAgICAg ICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAg ICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICBFRklfT1BFTl9Q Uk9UT0NPTF9HRVRfUFJPVE9DT0wNCj4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiAr ICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIGdCUy0+Q2xvc2VQcm90b2Nv bCAoDQo+ICsgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAm Z0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgVGhpcy0+RHJpdmVy QmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAg ICAgICAgICAgKTsNCj4gKyAgICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAg ICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9j b2xHdWlkLA0KPiArICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsg ICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICAgICk7DQo+ICsgICAg ICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgTmljRGV2aWNlID0g VU5ESV9ERVZfRlJPTV9USElTIChOaWlQcm90b2NvbCk7DQo+ICsgICAgU3RhdHVzICAgID0gZ0JT LT5Vbmluc3RhbGxNdWx0aXBsZVByb3RvY29sSW50ZXJmYWNlcyAoDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICZn RWZpTmV0d29ya0ludGVyZmFjZUlkZW50aWZpZXJQcm90b2NvbEd1aWRfMzEsDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICZOaWNEZXZpY2UtPk5paVByb3RvY29sLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgIE5pY0RldmljZS0+RGV2UGF0aCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg TlVMTA0KPiArICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gKyAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgfQ0KPiArDQo+ICsg ICAgRnJlZVBvb2wgKE5pY0RldmljZS0+RGV2UGF0aCk7DQo+ICsgICAgRnJlZVBvb2wgKE5pY0Rl dmljZSk7DQo+ICsNCj4gKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICBD b250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1 aWQsDQo+ICsgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAg ICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgKTsNCj4gKyAgICBnQlMtPkNsb3Nl UHJvdG9jb2wgKA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAg ICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICBUaGlzLT5Ecml2ZXJC aW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAg ICAgICk7DQo+ICsgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArICB9DQo+ICsNCj4gKyAgQWxs Q2hpbGRyZW5TdG9wcGVkID0gVFJVRTsNCj4gKw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXgg PCBOdW1iZXJPZkNoaWxkcmVuOyBJbmRleCsrKSB7DQo+ICsgICAgU3RhdHVzID0gZ0JTLT5PcGVu UHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgICBDaGlsZEhhbmRsZUJ1ZmZlcltJbmRl eF0sDQo+ICsgICAgICAgICAgICAgICAgICAgICZnRWZpTmV0d29ya0ludGVyZmFjZUlkZW50aWZp ZXJQcm90b2NvbEd1aWRfMzEsDQo+ICsgICAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZOaWlQ cm90b2NvbCwNCj4gKyAgICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRs ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAg ICAgICAgICAgICAgRUZJX09QRU5fUFJPVE9DT0xfR0VUX1BST1RPQ09MDQo+ICsgICAgICAgICAg ICAgICAgICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAg QWxsQ2hpbGRyZW5TdG9wcGVkID0gRkFMU0U7DQo+ICsgICAgICBjb250aW51ZTsNCj4gKyAgICB9 DQo+ICsNCj4gKyAgICBOaWNEZXZpY2UgPSBVTkRJX0RFVl9GUk9NX1RISVMgKE5paVByb3RvY29s KTsNCj4gKw0KPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgIENvbnRy b2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ ICsgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgIENo aWxkSGFuZGxlQnVmZmVyW0luZGV4XQ0KPiArICAgICAgICAgICApOw0KPiArDQo+ICsgICAgU3Rh dHVzID0gZ0JTLT5Vbmluc3RhbGxNdWx0aXBsZVByb3RvY29sSW50ZXJmYWNlcyAoDQo+ICsgICAg ICAgICAgICAgICAgICAgIENoaWxkSGFuZGxlQnVmZmVyW0luZGV4XSwNCj4gKyAgICAgICAgICAg ICAgICAgICAgJmdFZmlOZXR3b3JrSW50ZXJmYWNlSWRlbnRpZmllclByb3RvY29sR3VpZF8zMSwN Cj4gKyAgICAgICAgICAgICAgICAgICAgJk5pY0RldmljZS0+TmlpUHJvdG9jb2wsDQo+ICsgICAg ICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAg ICAgICAgICAgICAgTmljRGV2aWNlLT5EZXZQYXRoLA0KPiArICAgICAgICAgICAgICAgICAgICBO VUxMDQo+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiArICAgICAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiArICAgICAg ICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAo Vk9JRCAqKikmVXNiRXRoLA0KPiArICAgICAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJp bmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgQ2hpbGRIYW5kbGVCdWZmZXJb SW5kZXhdLA0KPiArICAgICAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0JZX0NI SUxEX0NPTlRST0xMRVINCj4gKyAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIH0gZWxz ZSB7DQo+ICsgICAgICBGcmVlUG9vbCAoTmljRGV2aWNlLT5EZXZQYXRoKTsNCj4gKyAgICAgIEZy ZWVQb29sIChOaWNEZXZpY2UpOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGlmICghQWxs Q2hpbGRyZW5TdG9wcGVkKSB7DQo+ICsgICAgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7DQo+ICsg IH0NCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgRW50 cnlwb2ludCBvZiBOZXR3b3JrIENvbW1vbiBEcml2ZXIuDQo+ICsNCj4gKyAgVGhpcyBmdW5jdGlv biBpcyB0aGUgZW50cnlwb2ludCBvZiBOZXR3b3JrIENvbW1vbiBEcml2ZXIuIEl0IGluc3RhbGxz IERyaXZlciBCaW5kaW5nDQo+ICsgIFByb3RvY29scyB0b2dldGhlciB3aXRoIENvbXBvbmVudCBO YW1lIFByb3RvY29scy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBJbWFnZUhhbmRsZSAgICAgICBU aGUgZmlybXdhcmUgYWxsb2NhdGVkIGhhbmRsZSBmb3IgdGhlIEVGSSBpbWFnZS4NCj4gKyAgQHBh cmFtW2luXSAgU3lzdGVtVGFibGUgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRkkgU3lzdGVtIFRh YmxlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBlbnRyeSBw b2ludCBpcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRV Uw0KPiArRUZJQVBJDQo+ICtOZXR3b3JrQ29tbW9uRW50cnkgKA0KPiArICBJTiBFRklfSEFORExF ICAgICAgICBJbWFnZUhhbmRsZSwNCj4gKyAgSU4gRUZJX1NZU1RFTV9UQUJMRSAgKlN5c3RlbVRh YmxlDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiArDQo+ICsgIGdO ZXR3b3JrQ29tbW9uRHJpdmVyQmluZGluZy5Ecml2ZXJCaW5kaW5nSGFuZGxlID0gSW1hZ2VIYW5k bGU7DQo+ICsgIGdOZXR3b3JrQ29tbW9uRHJpdmVyQmluZGluZy5JbWFnZUhhbmRsZSAgICAgICAg ID0gSW1hZ2VIYW5kbGU7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5JbnN0YWxsTXVsdGlwbGVQ cm90b2NvbEludGVyZmFjZXMgKA0KPiArICAgICAgICAgICAgICAgICAgJmdOZXR3b3JrQ29tbW9u RHJpdmVyQmluZGluZy5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAg JmdFZmlEcml2ZXJCaW5kaW5nUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgJmdO ZXR3b3JrQ29tbW9uRHJpdmVyQmluZGluZywNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpQ29t cG9uZW50TmFtZTJQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAmZ05ldHdvcmtD b21tb25Db21wb25lbnROYW1lMiwNCj4gKyAgICAgICAgICAgICAgICAgIE5VTEwNCj4gKyAgICAg ICAgICAgICAgICAgICk7DQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+IGRpZmYgLS1naXQg YS9Vc2JOZXR3b3JrUGtnL05ldHdvcmtDb21tb24vRHJpdmVyQmluZGluZy5oIGIvVXNiTmV0d29y a1BrZy9OZXR3b3JrQ29tbW9uL0RyaXZlckJpbmRpbmcuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KPiBpbmRleCAwMDAwMDAwMDAwLi40NjdlY2QwZjRhDQo+IC0tLSAvZGV2L251bGwNCj4gKysr IGIvVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL0RyaXZlckJpbmRpbmcuaA0KPiBAQCAtMCww ICsxLDI2NSBAQA0KPiArLyoqIEBmaWxlDQo+ICsgIEhlYWRlciBmaWxlIGZvciBmb3IgVVNCIG5l dHdvcmsgY29tbW9uIGRyaXZlcg0KPiArDQo+ICsgIENvcHlyaWdodCAoYykgMjAyMiwgQW1lcmlj YW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+ DQo+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsq Ki8NCj4gKw0KPiArI2lmbmRlZiBfRFJJVkVSX0JJTkRJTkdfSF8NCj4gKyNkZWZpbmUgX0RSSVZF Ul9CSU5ESU5HX0hfDQo+ICsNCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlEcml2ZXJFbnRyeVBv aW50Lmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIuaD4N Cj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Rl dmljZVBhdGhMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+ICsjaW5j bHVkZSA8TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9uTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFy eS9CYXNlTWVtb3J5TGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpVXNiTGliLmg+DQo+ ICsjaW5jbHVkZSA8UHJvdG9jb2wvVXNiSW8uaD4NCj4gKyNpbmNsdWRlIDxQcm90b2NvbC9OZXR3 b3JrSW50ZXJmYWNlSWRlbnRpZmllci5oPg0KPiArI2luY2x1ZGUgPFByb3RvY29sL0Vka0lJVXNi RXRoZXJuZXRQcm90b2NvbC5oPg0KPiArDQo+ICsjZGVmaW5lIE5FVFdPUktfQ09NTU9OX0RSSVZF Ul9WRVJTSU9OICAgIDENCj4gKyNkZWZpbmUgTkVUV09SS19DT01NT05fUE9MTElOR19JTlRFUlZB TCAgMHgxMA0KPiArI2RlZmluZSBSWF9CVUZGRVJfQ09VTlQgICAgICAgICAgICAgICAgICAzMg0K PiArI2RlZmluZSBUWF9CVUZGRVJfQ09VTlQgICAgICAgICAgICAgICAgICAzMg0KPiArI2RlZmlu ZSBNRU1PUllfUkVRVUlSRSAgICAgICAgICAgICAgICAgICAwDQo+ICsNCj4gKyNkZWZpbmUgVU5E SV9ERVZfU0lHTkFUVVJFICBTSUdOQVRVUkVfMzIoJ3UnLCduJywnZCcsJ2knKQ0KPiArI2RlZmlu ZSBVTkRJX0RFVl9GUk9NX1RISVMoYSkgIENSKGEsIE5JQ19ERVZJQ0UsIE5paVByb3RvY29sLCBV TkRJX0RFVl9TSUdOQVRVUkUpDQo+ICsjZGVmaW5lIFVORElfREVWX0ZST01fTklDKGEpICAgQ1Io YSwgTklDX0RFVklDRSwgTmljSW5mbywgVU5ESV9ERVZfU0lHTkFUVVJFKQ0KPiArDQo+ICsjcHJh Z21hIHBhY2soMSkNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDggICAgIERlc3RBZGRy W1BYRV9IV0FERFJfTEVOX0VUSEVSXTsNCj4gKyAgVUlOVDggICAgIFNyY0FkZHJbUFhFX0hXQURE Ul9MRU5fRVRIRVJdOw0KPiArICBVSU5UMTYgICAgUHJvdG9jb2w7DQo+ICt9IEV0aGVybmV0SGVh ZGVyOw0KPiArI3ByYWdtYSBwYWNrKCkNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBV SU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaWduYXR1cmU7DQo+ ICsgIEVGSV9ORVRXT1JLX0lOVEVSRkFDRV9JREVOVElGSUVSX1BST1RPQ09MICAgIE5paVByb3Rv Y29sOw0KPiArICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE ZXZpY2VIYW5kbGU7DQo+ICsgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgICAgICAgICAg ICAgICAgICpCYXNlRGV2UGF0aDsNCj4gKyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAg ICAgICAgICAgICAgICAgKkRldlBhdGg7DQo+ICsgIE5JQ19EQVRBICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE5pY0luZm87DQo+ICsgIFZPSUQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICpSZWNlaXZlQnVmZmVyOw0KPiArfSBOSUNfREVWSUNFOw0K PiArDQo+ICt0eXBlZGVmIFZPSUQgKCpBUElfRlVOQykoDQo+ICsgIFBYRV9DREIgKiwNCj4gKyAg TklDX0RBVEEgKg0KPiArICApOw0KPiArDQo+ICtleHRlcm4gUFhFX1NXX1VOREkgICAgICAgICAg ICAgICAgICAgKmdQeGU7DQo+ICtleHRlcm4gTklDX0RFVklDRSAgICAgICAgICAgICAgICAgICAg KmdMYW5EZXZpY2VMaXN0W01BWF9MQU5fSU5URVJGQUNFXTsNCj4gK2V4dGVybiBFRklfQ09NUE9O RU5UX05BTUUyX1BST1RPQ09MICBnTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWUyOw0KPiArDQo+ ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK05ldHdvcmtDb21tb25TdXBwb3J0ZWQgKA0KPiAr ICBJTiBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBFRklfSEFO RExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgIElOIEVGSV9ERVZJ Q0VfUEFUSF9QUk9UT0NPTCAgICAgKlJlbWFpbmluZ0RldmljZVBhdGgNCj4gKyAgKTsNCj4gKw0K PiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtOZXR3b3JrQ29tbW9uRHJpdmVyU3RhcnQgKA0K PiArICBJTiBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBFRklf SEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgIElOIEVGSV9E RVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgKlJlbWFpbmluZ0RldmljZVBhdGgNCj4gKyAgKTsNCj4g Kw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtOZXR3b3JrQ29tbW9uRHJpdmVyU3RvcCAo DQo+ICsgIElOICBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiAg RUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICBJTiAg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZkNoaWxkcmVuLA0KPiArICBJTiAg RUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAqQ2hpbGRIYW5kbGVCdWZmZXINCj4gKyAgKTsN Cj4gKw0KPiArVk9JRA0KPiArUHhlU3RydWN0SW5pdCAoDQo+ICsgIE9VVCBQWEVfU1dfVU5ESSAg KlB4ZVN3DQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1VwZGF0ZU5pY051bSAoDQo+ICsgIElO ICAgICAgTklDX0RBVEEgICAgICpOaWMsDQo+ICsgIElOIE9VVCAgUFhFX1NXX1VOREkgICpQeGVT dw0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1VuZGlBcGlFbnRy eSAoDQo+ICsgIElOICBVSU5UNjQgIENkYg0KPiArICApOw0KPiArDQo+ICtVSU5UTg0KPiArTWFw SXQgKA0KPiArICBJTiBOSUNfREFUQSAgKk5pYywNCj4gKyAgSU4gVUlOVDY0ICAgIE1lbUFkZHIs DQo+ICsgIElOIFVJTlQzMiAgICBTaXplLA0KPiArICBJTiBVSU5UMzIgICAgRGlyZWN0aW9uLA0K PiArICBPVVQgVUlOVDY0ICAgTWFwcGVkQWRkcg0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtV bk1hcEl0ICgNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMsDQo+ICsgIElOIFVJTlQ2NCAgICBNZW1B ZGRyLA0KPiArICBJTiBVSU5UMzIgICAgU2l6ZSwNCj4gKyAgSU4gVUlOVDMyICAgIERpcmVjdGlv biwNCj4gKyAgSU4gVUlOVDY0ICAgIE1hcHBlZEFkZHINCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0K PiArVW5kaUdldFN0YXRlICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklD X0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiArVW5kaVN0YXJ0ICgNCj4gKyAg SU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4g Kw0KPiArVk9JRA0KPiArVW5kaVN0b3AgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsg IElOICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtVbmRpR2V0SW5p dEluZm8gKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5p Yw0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtVbmRpR2V0Q29uZmlnSW5mbyAoDQo+ICsgIElO ICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsN Cj4gK1ZPSUQNCj4gK1VuZGlJbml0aWFsaXplICgNCj4gKyAgSU4gICAgICBQWEVfQ0RCICAgKkNk YiwNCj4gKyAgSU4gT1VUICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ ICtVbmRpUmVzZXQgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFU QSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtVbmRpU2h1dGRvd24gKA0KPiArICBJ TiAgICAgIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiBPVVQgIE5JQ19EQVRBICAqTmljDQo+ICsg ICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1VuZGlJbnRlcnJ1cHRFbmFibGUgKA0KPiArICBJTiAgUFhF X0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtW T0lEDQo+ICtVbmRpUmVjZWl2ZUZpbHRlciAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4g KyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1VuZGlTdGF0 aW9uQWRkcmVzcyAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRB ICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1VuZGlTdGF0aXN0aWNzICgNCj4gKyAg SU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4g Kw0KPiArVk9JRA0KPiArVW5kaU1jYXN0SXAyTWFjICgNCj4gKyAgSU4gT1VUICBQWEVfQ0RCICAg KkNkYiwNCj4gKyAgSU4gICAgICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtWT0lE DQo+ICtVbmRpTnZEYXRhICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklD X0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiArVW5kaUdldFN0YXR1cyAoDQo+ ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICk7 DQo+ICsNCj4gK1ZPSUQNCj4gK1VuZGlGaWxsSGVhZGVyICgNCj4gKyAgSU4gIFBYRV9DREIgICAq Q2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiAr VW5kaVRyYW5zbWl0ICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RB VEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiArVW5kaVJlY2VpdmUgKA0KPiArICBJ TiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiAr DQo+ICtVSU5UMTYNCj4gK0luaXRpYWxpemUgKA0KPiArICBJTiAgICAgIFBYRV9DREIgICAqQ2Ri LA0KPiArICBJTiBPVVQgIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK1VJTlQxNg0K PiArVHJhbnNtaXQgKA0KPiArICBJTiAgICAgIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiBPVVQg IE5JQ19EQVRBICAqTmljLA0KPiArICBJTiAgICAgIFVJTlQ2NCAgICBDcGJBZGRyLA0KPiArICBJ TiAgICAgIFVJTlQxNiAgICBPcEZsYWdzDQo+ICsgICk7DQo+ICsNCj4gK1VJTlQxNg0KPiArUmVj ZWl2ZSAoDQo+ICsgIElOIFBYRV9DREIgICAgICAgKkNkYiwNCj4gKyAgSU4gT1VUIE5JQ19EQVRB ICAqTmljLA0KPiArICBJTiBVSU5UNjQgICAgICAgIENwYkFkZHIsDQo+ICsgIElOIE9VVCBVSU5U NjQgICAgRGJBZGRyDQo+ICsgICk7DQo+ICsNCj4gK1VJTlQxNg0KPiArU2V0RmlsdGVyICgNCj4g KyAgSU4gIE5JQ19EQVRBICAqTmljLA0KPiArICBJTiAgVUlOVDE2ICAgIFNldEZpbHRlciwNCj4g KyAgSU4gIFVJTlQ2NCAgICBDcGJBZGRyLA0KPiArICBJTiAgVUlOVDMyICAgIENwYlNpemUNCj4g KyAgKTsNCj4gKw0KPiArVUlOVDE2DQo+ICtTdGF0aXN0aWNzICgNCj4gKyAgSU4gTklDX0RBVEEg ICpOaWMsDQo+ICsgIElOIFVJTlQ2NCAgICBEYkFkZHIsDQo+ICsgIElOIFVJTlQxNiAgICBEYlNp emUNCj4gKyAgKTsNCj4gKw0KPiArI2VuZGlmDQo+IGRpZmYgLS1naXQgYS9Vc2JOZXR3b3JrUGtn L05ldHdvcmtDb21tb24vTmV0d29ya0NvbW1vbi5pbmYgYi9Vc2JOZXR3b3JrUGtnL05ldHdvcmtD b21tb24vTmV0d29ya0NvbW1vbi5pbmYNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXgg MDAwMDAwMDAwMC4uODEwMDk5M2FlZQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL1VzYk5ldHdv cmtQa2cvTmV0d29ya0NvbW1vbi9OZXR3b3JrQ29tbW9uLmluZg0KPiBAQCAtMCwwICsxLDQ0IEBA DQo+ICsjIyBAZmlsZQ0KPiArIyAgIFRoaXMgaXMgVXNiIE5ldHdvcmsgQ29tbW9uIGRyaXZlciBm b3IgRFhFIHBoYXNlLg0KPiArIw0KPiArIyBDb3B5cmlnaHQgKGMpIDIwMjIsIEFtZXJpY2FuIE1l Z2F0cmVuZHMgSW50ZXJuYXRpb25hbCBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiAr IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiArIyMNCj4g Kw0KPiArW0RlZmluZXNdDQo+ICsgIElORl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICA9IDB4 MDAwMTAwMDUNCj4gKyAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAgICAgID0gTmV0d29ya0Nv bW1vbg0KPiArICBGSUxFX0dVSUQgICAgICAgICAgICAgICAgICAgICAgPSBjYTZlYjRmNC1mMWQ2 LTQzNzUtOTdkNi0xODg1Njg3MWUxYmYNCj4gKyAgTU9EVUxFX1RZUEUgICAgICAgICAgICAgICAg ICAgID0gRFhFX0RSSVZFUg0KPiArICBWRVJTSU9OX1NUUklORyAgICAgICAgICAgICAgICAgPSAx LjANCj4gKyAgRU5UUllfUE9JTlQgICAgICAgICAgICAgICAgICAgID0gTmV0d29ya0NvbW1vbkVu dHJ5DQo+ICsNCj4gK1tTb3VyY2VzXQ0KPiArICBEcml2ZXJCaW5kaW5nLmMNCj4gKyAgRHJpdmVy QmluZGluZy5oDQo+ICsgIENvbXBvbmVudE5hbWUuYw0KPiArICBQeGVGdW5jdGlvbi5jDQo+ICsN Cj4gK1tQYWNrYWdlc10NCj4gKyAgTWRlUGtnL01kZVBrZy5kZWMNCj4gKyAgTWRlTW9kdWxlUGtn L01kZU1vZHVsZVBrZy5kZWMNCj4gKyAgVXNiTmV0d29ya1BrZy9Vc2JOZXR3b3JrUGtnLmRlYw0K PiArDQo+ICtbTGlicmFyeUNsYXNzZXNdDQo+ICsgIFVlZmlEcml2ZXJFbnRyeVBvaW50DQo+ICsg IFVlZmlCb290U2VydmljZXNUYWJsZUxpYg0KPiArICBVZWZpTGliDQo+ICsgIERlYnVnTGliDQo+ ICsgIFVlZmlVc2JMaWINCj4gKyAgTWVtb3J5QWxsb2NhdGlvbkxpYg0KPiArICBCYXNlTWVtb3J5 TGliDQo+ICsNCj4gK1tQcm90b2NvbHNdDQo+ICsgIGdFZmlOZXR3b3JrSW50ZXJmYWNlSWRlbnRp ZmllclByb3RvY29sR3VpZF8zMQ0KPiArICBnRWZpVXNiSW9Qcm90b2NvbEd1aWQNCj4gKyAgZ0Vm aURldmljZVBhdGhQcm90b2NvbEd1aWQNCj4gKyAgZ0VmaURyaXZlckJpbmRpbmdQcm90b2NvbEd1 aWQNCj4gKyAgZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkDQo+ICsNCj4gK1tEZXBleF0NCj4gKyAg VFJVRQ0KPiBkaWZmIC0tZ2l0IGEvVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL1B4ZUZ1bmN0 aW9uLmMgYi9Vc2JOZXR3b3JrUGtnL05ldHdvcmtDb21tb24vUHhlRnVuY3Rpb24uYw0KPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi43NDgzODVkNmMyDQo+IC0tLSAv ZGV2L251bGwNCj4gKysrIGIvVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL1B4ZUZ1bmN0aW9u LmMNCj4gQEAgLTAsMCArMSwxNzQ3IEBADQo+ICsvKiogQGZpbGUNCj4gKyAgVGhpcyBmaWxlIGNv bnRhaW5zIGNvZGUgZm9yIFVOREkgY29tbWFuZCBiYXNlZCBvbiBVRUZJIHNwZWNpZmljYXRpb24u DQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDIyLCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVy bmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKyAgU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gKyoqLw0KPiArDQo+ICsjaW5jbHVk ZSAiRHJpdmVyQmluZGluZy5oIg0KPiArDQo+ICsvLyBBUEkgdGFibGUsIGRlZmluZWQgaW4gVUVG SSBzcGVjaWZpY2F0aW9uDQo+ICtBUElfRlVOQyAgZ1VuZGlBcGlUYWJsZVtdID0gew0KPiArICBV bmRpR2V0U3RhdGUsDQo+ICsgIFVuZGlTdGFydCwNCj4gKyAgVW5kaVN0b3AsDQo+ICsgIFVuZGlH ZXRJbml0SW5mbywNCj4gKyAgVW5kaUdldENvbmZpZ0luZm8sDQo+ICsgIFVuZGlJbml0aWFsaXpl LA0KPiArICBVbmRpUmVzZXQsDQo+ICsgIFVuZGlTaHV0ZG93biwNCj4gKyAgVW5kaUludGVycnVw dEVuYWJsZSwNCj4gKyAgVW5kaVJlY2VpdmVGaWx0ZXIsDQo+ICsgIFVuZGlTdGF0aW9uQWRkcmVz cywNCj4gKyAgVW5kaVN0YXRpc3RpY3MsDQo+ICsgIFVuZGlNY2FzdElwMk1hYywNCj4gKyAgVW5k aU52RGF0YSwNCj4gKyAgVW5kaUdldFN0YXR1cywNCj4gKyAgVW5kaUZpbGxIZWFkZXIsDQo+ICsg IFVuZGlUcmFuc21pdCwNCj4gKyAgVW5kaVJlY2VpdmUNCj4gK307DQo+ICsNCj4gKy8qKg0KPiAr ICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIG9wZXJhdGlvbmFsIHN0YXRl IG9mIHRoZSBVTkRJLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRo ZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2lu dGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyoq Lw0KPiArVk9JRA0KPiArVW5kaUdldFN0YXRlICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0K PiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICBT dGF0dXM7DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RFX0dFVF9TVEFU RSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9JTklUSUFMSVpF KSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdzICE9IFBYRV9TVEFURkxBR1NfSU5JVElBTEla RSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUtPklGY250 RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENkYi0+Q1BCc2l6ZSAhPSBQWEVfQ1BCU0laRV9OT1Rf VVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkNQQmFkZHIgIT0gUFhFX0NQQkFERFJfTk9UX1VTRUQp IHx8DQo+ICsgICAgICAoQ2RiLT5EQnNpemUgIT0gUFhFX0RCU0laRV9OT1RfVVNFRCkgfHwNCj4g KyAgICAgIChDZGItPkRCYWRkciAhPSBQWEVfREJBRERSX05PVF9VU0VEKSB8fA0KPiArICAgICAg KENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19OT1RfVVNFRCkpDQo+ICsgIHsNCj4gKyAgICBD ZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2Ri LT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgcmV0dXJuOw0K PiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01N QU5EX0NPTVBMRVRFOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX1NVQ0NF U1M7DQo+ICsgIH0NCj4gKw0KPiArICBDZGItPlN0YXRGbGFncyA9IENkYi0+U3RhdEZsYWdzIHwg TmljLT5TdGF0ZTsNCj4gKw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRo VW5kaUdldFN0YXRlICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNi RXRoVW5kaS5Vc2JFdGhVbmRpR2V0U3RhdGUgKENkYiwgTmljKTsNCj4gKyAgICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1Nf Q09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr ICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBjaGFuZ2UgdGhlIFVOREkgb3BlcmF0aW9uYWwgc3Rh dGUgZnJvbSBzdG9wcGVkIHRvIHN0YXJ0ZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBB IHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2lu XSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0 YS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtVbmRpU3RhcnQgKA0KPiArICBJTiAgUFhFX0NE QiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIFBY RV9DUEJfU1RBUlRfMzEgICpDcGI7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgIFN0YXR1czsNCj4g Kw0KPiArICBpZiAoKENkYi0+T3BDb2RlICE9IFBYRV9PUENPREVfU1RBUlQpIHx8DQo+ICsgICAg ICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENPREVfSU5JVElBTElaRSkgfHwNCj4gKyAgICAg IChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAg ICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwN Cj4gKyAgICAgIChDZGItPkNQQnNpemUgIT0gc2l6ZW9mIChQWEVfQ1BCX1NUQVJUXzMxKSkgfHwN Cj4gKyAgICAgIChDZGItPkRCc2l6ZSAhPSBQWEVfREJTSVpFX05PVF9VU0VEKSB8fA0KPiArICAg ICAgKENkYi0+REJhZGRyICE9IFBYRV9EQkFERFJfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2Ri LT5PcEZsYWdzICE9IFBYRV9PUEZMQUdTX05PVF9VU0VEKSkNCj4gKyAgew0KPiArICAgIENkYi0+ U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0 YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ICsg IH0gZWxzZSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRf Q09NUExFVEU7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsN Cj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlN0YXRlICE9IFBYRV9TVEFURkxBR1NfR0VUX1NU QVRFX1NUT1BQRUQpIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09N TUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfQUxSRUFE WV9TVEFSVEVEOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIENwYiA9IChQWEVf Q1BCX1NUQVJUXzMxICopKFVJTlROKUNkYi0+Q1BCYWRkcjsNCj4gKw0KPiArICBOaWMtPlB4ZVN0 YXJ0LkRlbGF5ICAgICA9IENwYi0+RGVsYXk7DQo+ICsgIE5pYy0+UHhlU3RhcnQuVmlydDJQaHlz ID0gQ3BiLT5WaXJ0MlBoeXM7DQo+ICsgIE5pYy0+UHhlU3RhcnQuQmxvY2sgICAgID0gQ3BiLT5C bG9jazsNCj4gKyAgTmljLT5QeGVTdGFydC5NYXBfTWVtICAgPSAwOw0KPiArICBOaWMtPlB4ZVN0 YXJ0LlVuTWFwX01lbSA9IDA7DQo+ICsgIE5pYy0+UHhlU3RhcnQuU3luY19NZW0gID0gQ3BiLT5T eW5jX01lbTsNCj4gKyAgTmljLT5QeGVTdGFydC5VbmlxdWVfSUQgPSBDcGItPlVuaXF1ZV9JRDsN Cj4gKyAgTmljLT5TdGF0ZSAgICAgICAgICAgICAgPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9T VEFSVEVEOw0KPiArDQo+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRp U3RhcnQgIT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRp LlVzYkV0aFVuZGlTdGFydCAoQ2RiLCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZB SUxFRDsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29t bWFuZCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgVU5ESSBvcGVyYXRpb25hbCBzdGF0ZSBmcm9tIHN0 YXJ0ZWQgdG8gc3RvcHBlZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0 byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEg cG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlTdG9wICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0K PiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICBT dGF0dXM7DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RFX1NUT1ApIHx8 DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENPREVfSU5JVElBTElaRSkgfHwN Cj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8 DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8 PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkNQQnNpemUgIT0gUFhFX0NQQlNJWkVfTk9UX1VTRUQp IHx8DQo+ICsgICAgICAoQ2RiLT5DUEJhZGRyICE9IFBYRV9DUEJBRERSX05PVF9VU0VEKSB8fA0K PiArICAgICAgKENkYi0+REJzaXplICE9IFBYRV9EQlNJWkVfTk9UX1VTRUQpIHx8DQo+ICsgICAg ICAoQ2RiLT5EQmFkZHIgIT0gUFhFX0RCQUREUl9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGIt Pk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfTk9UX1VTRUQpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5T dGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3Rh dENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAg fSBlbHNlIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9D T01QTEVURTsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0K PiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+U3RhdGUgPT0gUFhFX1NUQVRGTEFHU19HRVRfU1RB VEVfU1RPUFBFRCkgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01N QU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfU1RB UlRFRDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5TdGF0ZSA9 PSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KPiArICAgIENkYi0+U3Rh dEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRD b2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfU0hVVERPV047DQo+ICsgICAgcmV0dXJuOw0KPiArICB9 DQo+ICsNCj4gKyAgTmljLT5QeGVTdGFydC5EZWxheSAgICAgPSAwOw0KPiArICBOaWMtPlB4ZVN0 YXJ0LlZpcnQyUGh5cyA9IDA7DQo+ICsgIE5pYy0+UHhlU3RhcnQuQmxvY2sgICAgID0gMDsNCj4g KyAgTmljLT5QeGVTdGFydC5NYXBfTWVtICAgPSAwOw0KPiArICBOaWMtPlB4ZVN0YXJ0LlVuTWFw X01lbSA9IDA7DQo+ICsgIE5pYy0+UHhlU3RhcnQuU3luY19NZW0gID0gMDsNCj4gKyAgTmljLT5T dGF0ZSAgICAgICAgICAgICAgPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9TVE9QUEVEOw0KPiAr DQo+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3RvcCAhPSBOVUxM KSB7DQo+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVN0 b3AgKENkYiwgTmljKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAg ICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAg fQ0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0 byByZXRyaWV2ZSBpbml0aWFsaXphdGlvbiBpbmZvcm1hdGlvbiB0aGF0IGlzDQo+ICsgIG5lZWRl ZCBieSBkcml2ZXJzIGFuZCBhcHBsaWNhdGlvbnMgdG8gaW5pdGlhbGl6ZWQgVU5ESS4NCj4gKw0K PiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9y IGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBp bnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlH ZXRJbml0SW5mbyAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRB ICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgUFhFX0RCX0dFVF9JTklUX0lORk8gICpEYjsNCj4g KyAgRUZJX1NUQVRVUyAgICAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBpZiAoKENkYi0+T3BD b2RlICE9IFBYRV9PUENPREVfR0VUX0lOSVRfSU5GTykgfHwNCj4gKyAgICAgIChDZGItPlN0YXRD b2RlICE9IFBYRV9TVEFUQ09ERV9JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZs YWdzICE9IFBYRV9TVEFURkxBR1NfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVt ID49IChnUHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENk Yi0+Q1BCc2l6ZSAhPSBQWEVfQ1BCU0laRV9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkNQ QmFkZHIgIT0gUFhFX0NQQkFERFJfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5EQnNpemUg IT0gc2l6ZW9mIChQWEVfREJfR0VUX0lOSVRfSU5GTykpIHx8DQo+ICsgICAgICAoQ2RiLT5PcEZs YWdzICE9IFBYRV9PUEZMQUdTX05PVF9VU0VEKSkNCj4gKyAgew0KPiArICAgIENkYi0+U3RhdEZs YWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2Rl ICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0gZWxz ZSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09NUExF VEU7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gKyAg fQ0KPiArDQo+ICsgIGlmIChOaWMtPlN0YXRlID09IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX1NU T1BQRUQpIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9G QUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfTk9UX1NUQVJURUQ7 DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgRGIgPSAoUFhFX0RCX0dFVF9JTklU X0lORk8gKikoVUlOVE4pQ2RiLT5EQmFkZHI7DQo+ICsNCj4gKyAgRGItPk1lbW9yeVJlcXVpcmVk ICAgICAgICAgPSBNRU1PUllfUkVRVUlSRTsNCj4gKyAgRGItPkZyYW1lRGF0YUxlbiAgICAgICAg ICAgPSBQWEVfTUFYX1RYUlhfVU5JVF9FVEhFUjsNCj4gKyAgRGItPkxpbmtTcGVlZHNbMF0gICAg ICAgICAgPSAxMDsNCj4gKyAgRGItPkxpbmtTcGVlZHNbMV0gICAgICAgICAgPSAxMDA7DQo+ICsg IERiLT5MaW5rU3BlZWRzWzJdICAgICAgICAgID0gMTAwMDsNCj4gKyAgRGItPkxpbmtTcGVlZHNb M10gICAgICAgICAgPSAwOw0KPiArICBEYi0+TWVkaWFIZWFkZXJMZW4gICAgICAgICA9IFBYRV9N QUNfSEVBREVSX0xFTl9FVEhFUjsNCj4gKyAgRGItPkhXYWRkckxlbiAgICAgICAgICAgICAgPSBQ WEVfSFdBRERSX0xFTl9FVEhFUjsNCj4gKyAgRGItPk1DYXN0RmlsdGVyQ250ICAgICAgICAgPSBN QVhfTUNBU1RfQUREUkVTU19DTlQ7DQo+ICsgIERiLT5UeEJ1ZkNudCAgICAgICAgICAgICAgID0g TmljLT5QeGVJbml0LlR4QnVmQ250Ow0KPiArICBEYi0+VHhCdWZTaXplICAgICAgICAgICAgICA9 IE5pYy0+UHhlSW5pdC5UeEJ1ZlNpemU7DQo+ICsgIERiLT5SeEJ1ZkNudCAgICAgICAgICAgICAg ID0gTmljLT5QeGVJbml0LlJ4QnVmQ250Ow0KPiArICBEYi0+UnhCdWZTaXplICAgICAgICAgICAg ICA9IE5pYy0+UHhlSW5pdC5SeEJ1ZlNpemU7DQo+ICsgIERiLT5JRnR5cGUgICAgICAgICAgICAg ICAgID0gUFhFX0lGVFlQRV9FVEhFUk5FVDsNCj4gKyAgRGItPlN1cHBvcnRlZER1cGxleE1vZGVz ICAgPSBQWEVfRFVQTEVYX0RFRkFVTFQ7DQo+ICsgIERiLT5TdXBwb3J0ZWRMb29wQmFja01vZGVz ID0gTE9PUEJBQ0tfTk9STUFMOw0KPiArDQo+ICsgIENkYi0+U3RhdEZsYWdzIHw9IChQWEVfU1RB VEZMQUdTX0NBQkxFX0RFVEVDVF9TVVBQT1JURUQgfA0KPiArICAgICAgICAgICAgICAgICAgICAg UFhFX1NUQVRGTEFHU19HRVRfU1RBVFVTX05PX01FRElBX1NVUFBPUlRFRCk7DQo+ICsNCj4gKyAg aWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlHZXRJbml0SW5mbyAhPSBOVUxM KSB7DQo+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaUdl dEluaXRJbmZvIChDZGIsIE5pYyk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0K PiArICAgIH0NCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlz IHVzZWQgdG8gcmV0cmlldmUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhYm91dA0KPiArICB0 aGUgTklDIGJlaW5nIGNvbnRyb2xsZWQgYnkgdGhlIFVOREkuDQo+ICsNCj4gKyAgQHBhcmFtW2lu XSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAg QHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRy b2xsZXIgZGF0YS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtVbmRpR2V0Q29uZmlnSW5mbyAo DQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsg ICkNCj4gK3sNCj4gKyAgUFhFX0RCX0dFVF9DT05GSUdfSU5GTyAgKkRiOw0KPiArICBFRklfU1RB VFVTICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQ WEVfT1BDT0RFX0dFVF9DT05GSUdfSU5GTykgfHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2RlICE9 IFBYRV9TVEFUQ09ERV9JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdzICE9 IFBYRV9TVEFURkxBR1NfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVtID49IChn UHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENkYi0+Q1BC c2l6ZSAhPSBQWEVfQ1BCU0laRV9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkNQQmFkZHIg IT0gUFhFX0NQQkFERFJfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5EQnNpemUgIT0gc2l6 ZW9mIChQWEVfREJfR0VUX0NPTkZJR19JTkZPKSkgfHwNCj4gKyAgICAgIChDZGItPk9wRmxhZ3Mg IT0gUFhFX09QRkxBR1NfTk9UX1VTRUQpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3Mg PSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0g UFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfSBlbHNlIHsN Cj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsN Cj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArICB9DQo+ ICsNCj4gKyAgaWYgKE5pYy0+U3RhdGUgPT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfU1RPUFBF RCkgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxF RDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfU1RBUlRFRDsNCj4g KyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBEYiA9IChQWEVfREJfR0VUX0NPTkZJR19J TkZPICopKFVJTlROKUNkYi0+REJhZGRyOw0KPiArDQo+ICsgIERiLT5wY2kuQnVzVHlwZSA9IFBY RV9CVVNUWVBFX1VTQjsNCj4gKw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNi RXRoVW5kaUdldENvbmZpZ0luZm8gIT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNi RXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlHZXRDb25maWdJbmZvIChDZGIsIE5pYyk7DQo+ICsg ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQ WEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIHJlc2V0cyB0aGUgbmV0d29yayBhZGFwdGVyIGFu ZCBpbml0aWFsaXplcyBVTkRJIHVzaW5nDQo+ICsgIHRoZSBwYXJhbWV0ZXJzIHN1cHBsaWVkIGlu IHRoZSBDUEIuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIENkYiAgQSBwb2ludGVyIHRvIHRo ZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBOaWMgIEEg cG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlJbml0aWFsaXplICgNCj4gKyAgSU4gICAgICBQWEVfQ0RC ICAgKkNkYiwNCj4gKyAgSU4gT1VUICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsg IFBYRV9DUEJfSU5JVElBTElaRSAgKkNwYjsNCj4gKyAgUFhFX0RCX0lOSVRJQUxJWkUgICAqRGI7 DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgU3RhdHVzOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5P cENvZGUgIT0gUFhFX09QQ09ERV9JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdENv ZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Rmxh Z3MgIT0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+SUZudW0g Pj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkpIHx8DQo+ICsgICAgICAoQ2Ri LT5DUEJzaXplICE9IHNpemVvZiAoUFhFX0NQQl9JTklUSUFMSVpFKSkpDQo+ICsgIHsNCj4gKyAg ICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAg Q2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgcmV0dXJu Ow0KPiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19D T01NQU5EX0NPTVBMRVRFOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+U3RhdGUgPT0gUFhF X1NUQVRGTEFHU19HRVRfU1RBVEVfU1RPUFBFRCkgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0g UFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBY RV9TVEFUQ09ERV9OT1RfU1RBUlRFRDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiAr ICBpZiAoKENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19JTklUSUFMSVpFX0RFVEVDVF9DQUJM RSkgJiYNCj4gKyAgICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfSU5JVElBTElaRV9E T19OT1RfREVURUNUX0NBQkxFKSkNCj4gKyAgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhF X1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9T VEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBp ZiAoTmljLT5TdGF0ZSA9PSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0K PiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4g KyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9BTFJFQURZX0lOSVRJQUxJWkVEOw0K PiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIENwYiA9IChQWEVfQ1BCX0lOSVRJQUxJ WkUgKikoVUlOVE4pQ2RiLT5DUEJhZGRyOw0KPiArICBEYiAgPSAoUFhFX0RCX0lOSVRJQUxJWkUg KikoVUlOVE4pQ2RiLT5EQmFkZHI7DQo+ICsNCj4gKyAgTmljLT5QeGVJbml0LkxpbmtTcGVlZCAg ICA9IENwYi0+TGlua1NwZWVkOw0KPiArICBOaWMtPlB4ZUluaXQuRHVwbGV4TW9kZSAgID0gQ3Bi LT5EdXBsZXhNb2RlOw0KPiArICBOaWMtPlB4ZUluaXQuTG9vcEJhY2tNb2RlID0gQ3BiLT5Mb29w QmFja01vZGU7DQo+ICsgIE5pYy0+UHhlSW5pdC5NZW1vcnlBZGRyICAgPSBDcGItPk1lbW9yeUFk ZHI7DQo+ICsgIE5pYy0+UHhlSW5pdC5NZW1vcnlMZW5ndGggPSBDcGItPk1lbW9yeUxlbmd0aDsN Cj4gKyAgTmljLT5QeGVJbml0LlR4QnVmQ250ICAgICA9IFRYX0JVRkZFUl9DT1VOVDsNCj4gKyAg TmljLT5QeGVJbml0LlR4QnVmU2l6ZSAgICA9IE5pYy0+TWF4U2VnbWVudFNpemU7DQo+ICsgIE5p Yy0+UHhlSW5pdC5SeEJ1ZkNudCAgICAgPSBSWF9CVUZGRVJfQ09VTlQ7DQo+ICsgIE5pYy0+UHhl SW5pdC5SeEJ1ZlNpemUgICAgPSBOaWMtPk1heFNlZ21lbnRTaXplOw0KPiArDQo+ICsgIENkYi0+ U3RhdENvZGUgPSBJbml0aWFsaXplIChDZGIsIE5pYyk7DQo+ICsNCj4gKyAgRGItPk1lbW9yeVVz ZWQgPSBNRU1PUllfUkVRVUlSRTsNCj4gKyAgRGItPlR4QnVmQ250ICAgPSBOaWMtPlB4ZUluaXQu VHhCdWZDbnQ7DQo+ICsgIERiLT5UeEJ1ZlNpemUgID0gTmljLT5QeGVJbml0LlR4QnVmU2l6ZTsN Cj4gKyAgRGItPlJ4QnVmQ250ICAgPSBOaWMtPlB4ZUluaXQuUnhCdWZDbnQ7DQo+ICsgIERiLT5S eEJ1ZlNpemUgID0gTmljLT5QeGVJbml0LlJ4QnVmU2l6ZTsNCj4gKw0KPiArICBOaWMtPlJ4Rmls dGVyICAgID0gUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfQlJPQURDQVNUOw0KPiArICBOaWMt PkNhblJlY2VpdmUgID0gRkFMU0U7DQo+ICsgIE5pYy0+Q2FuVHJhbnNtaXQgPSBGQUxTRTsNCj4g Kw0KPiArICBpZiAoQ2RiLT5PcEZsYWdzID09IFBYRV9PUEZMQUdTX0lOSVRJQUxJWkVfREVURUNU X0NBQkxFKSB7DQo+ICsgICAgaWYgKChOaWMtPlJlcXVlc3QuUmVxdWVzdCA9PSBVU0JfQ0RDX05F VFdPUktfQ09OTkVDVElPTikgJiYgKE5pYy0+UmVxdWVzdC5WYWx1ZSA9PSBORVRXT1JLX0RJU0NP Tk5FQ1QpKSB7DQo+ICsgICAgICBOaWMtPkNhYmxlRGV0ZWN0ID0gMDsNCj4gKyAgICB9IGVsc2Ug aWYgKChOaWMtPlJlcXVlc3QuUmVxdWVzdCA9PSBVU0JfQ0RDX05FVFdPUktfQ09OTkVDVElPTikg JiYgKE5pYy0+UmVxdWVzdC5WYWx1ZSA9PSBORVRXT1JLX0NPTk5FQ1RFRCkpIHsNCj4gKyAgICAg IE5pYy0+Q2FibGVEZXRlY3QgPSAxOw0KPiArICAgIH0NCj4gKw0KPiArICAgIGlmIChOaWMtPkNh YmxlRGV0ZWN0ID09IDApIHsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdzIHw9IFBYRV9TVEFURkxB R1NfSU5JVElBTElaRURfTk9fTUVESUE7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYg KENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX1NVQ0NFU1MpIHsNCj4gKyAgICBDZGItPlN0 YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgIH0gZWxzZSB7DQo+ ICsgICAgTmljLT5TdGF0ZSA9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX0lOSVRJQUxJWkVEOw0K PiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlJ bml0aWFsaXplICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRo VW5kaS5Vc2JFdGhVbmRpSW5pdGlhbGl6ZSAoQ2RiLCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19D T01NQU5EX0ZBSUxFRDsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg IEluaXRpYWxpemUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsg IEBwYXJhbVtpbl0gICAgICBDZGIgICAgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlw dG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW4sIG91dF0gTmljICAgICBBIHBvaW50ZXIgdG8gdGhl IE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIFN0 YXR1cyAgQSB2YWx1ZSBvZiBQeGUgc3RhdGNvZGUuDQo+ICsNCj4gKyoqLw0KPiArVUlOVDE2DQo+ ICtJbml0aWFsaXplICgNCj4gKyAgSU4gICAgICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gT1VU ICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIFVJTlROICAgICAgIFN0YXR1czsN Cj4gKyAgVUlOVDMyICAgICAgSW5kZXg7DQo+ICsgIEVGSV9TVEFUVVMgIEVmaVN0YXR1czsNCj4g Kw0KPiArICBTdGF0dXMgPSBNYXBJdCAoDQo+ICsgICAgICAgICAgICAgTmljLA0KPiArICAgICAg ICAgICAgIE5pYy0+UHhlSW5pdC5NZW1vcnlBZGRyLA0KPiArICAgICAgICAgICAgIE5pYy0+UHhl SW5pdC5NZW1vcnlMZW5ndGgsDQo+ICsgICAgICAgICAgICAgVE9fQU5EX0ZST01fREVWSUNFLA0K PiArICAgICAgICAgICAgIChVSU5UNjQpKFVJTlROKSZOaWMtPk1hcHBlZEFkZHINCj4gKyAgICAg ICAgICAgICApOw0KPiArDQo+ICsgIGlmIChTdGF0dXMgIT0gMCkgew0KPiArICAgIHJldHVybiAo VUlOVDE2KVN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8 IFBYRV9IV0FERFJfTEVOX0VUSEVSOyBJbmRleCsrKSB7DQo+ICsgICAgTmljLT5QZXJtTm9kZUFk ZHJlc3NbSW5kZXhdID0gTmljLT5NYWNBZGRyLkFkZHJbSW5kZXhdOw0KPiArICB9DQo+ICsNCj4g KyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUFhFX0hXQUREUl9MRU5fRVRIRVI7IEluZGV4Kysp IHsNCj4gKyAgICBOaWMtPkN1cnJlbnROb2RlQWRkcmVzc1tJbmRleF0gPSBOaWMtPlBlcm1Ob2Rl QWRkcmVzc1tJbmRleF07DQo+ICsgIH0NCj4gKw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXgg PCBQWEVfSFdBRERSX0xFTl9FVEhFUjsgSW5kZXgrKykgew0KPiArICAgIE5pYy0+QnJvYWRjYXN0 Tm9kZUFkZHJlc3NbSW5kZXhdID0gMHhGRjsNCj4gKyAgfQ0KPiArDQo+ICsgIGZvciAoSW5kZXgg PSBQWEVfSFdBRERSX0xFTl9FVEhFUjsgSW5kZXggPCBQWEVfTUFDX0xFTkdUSDsgSW5kZXgrKykg ew0KPiArICAgIE5pYy0+Q3VycmVudE5vZGVBZGRyZXNzW0luZGV4XSAgID0gMDsNCj4gKyAgICBO aWMtPlBlcm1Ob2RlQWRkcmVzc1tJbmRleF0gICAgICA9IDA7DQo+ICsgICAgTmljLT5Ccm9hZGNh c3ROb2RlQWRkcmVzc1tJbmRleF0gPSAwOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNi RXRoLT5Vc2JFdGhJbml0aWFsaXplICE9IE5VTEwpIHsNCj4gKyAgICBFZmlTdGF0dXMgPSBOaWMt PlVzYkV0aC0+VXNiRXRoSW5pdGlhbGl6ZSAoQ2RiLCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJS T1IgKEVmaVN0YXR1cykpIHsNCj4gKyAgICAgIHJldHVybiBQWEVfU1RBVEZMQUdTX0NPTU1BTkRf RkFJTEVEOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiAoVUlOVDE2KVN0YXR1 czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCByZXNldHMgdGhlIG5ldHdv cmsgYWRhcHRlciBhbmQgcmVpbml0aWFsaXplcyB0aGUgVU5ESQ0KPiArICB3aXRoIHRoZSBzYW1l IHBhcmFtZXRlcnMgcHJvdmlkZWQgaW4gdGhlIEluaXRpYWxpemUgY29tbWFuZC4NCj4gKw0KPiAr ICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJs b2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRl cmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlSZXNl dCAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiArDQo+ICsgIGlmICgoQ2Ri LT5PcENvZGUgIT0gUFhFX09QQ09ERV9SRVNFVCkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2Rl ICE9IFBYRV9TVEFUQ09ERV9JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdz ICE9IFBYRV9TVEFURkxBR1NfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVtID49 IChnUHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENkYi0+ Q1BCc2l6ZSAhPSBQWEVfQ1BCU0laRV9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkNQQmFk ZHIgIT0gUFhFX0NQQkFERFJfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5EQnNpemUgIT0g UFhFX0RCU0laRV9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkRCYWRkciAhPSBQWEVfREJB RERSX05PVF9VU0VEKSkNCj4gKyAgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRG TEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09E RV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgQ2Ri LT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09NUExFVEU7DQo+ICsgICAgQ2Ri LT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gKyAgfQ0KPiArDQo+ICsgIGlm IChOaWMtPlN0YXRlICE9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX0lOSVRJQUxJWkVEKSB7DQo+ ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfTk9UX0lOSVRJQUxJWkVEOw0KPiAr ICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAg ICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoKENkYi0+T3BGbGFncyAhPSBQWEVfT1BG TEFHU19OT1RfVVNFRCkgJiYNCj4gKyAgICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1Nf UkVTRVRfRElTQUJMRV9JTlRFUlJVUFRTKSAmJg0KPiArICAgICAgKENkYi0+T3BGbGFncyAhPSBQ WEVfT1BGTEFHU19SRVNFVF9ESVNBQkxFX0ZJTFRFUlMpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5T dGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3Rh dENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAg fQ0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcEZsYWdzICYgUFhFX09QRkxBR1NfUkVTRVRfRElTQUJM RV9GSUxURVJTKSA9PSAwKSB7DQo+ICsgICAgTmljLT5SeEZpbHRlciA9IFBYRV9PUEZMQUdTX1JF Q0VJVkVfRklMVEVSX0JST0FEQ0FTVDsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcEZs YWdzICYgUFhFX09QRkxBR1NfUkVTRVRfRElTQUJMRV9JTlRFUlJVUFRTKSAhPSAwKSB7DQo+ICsg ICAgTmljLT5JbnRlcnJ1cE9wRmxhZyA9IDA7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5V c2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVJlc2V0ICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0 dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpUmVzZXQgKENkYiwgTmljKTsN Cj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFn cyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9 DQo+ICsNCj4gKy8qKg0KPiArICBUaGUgU2h1dGRvd24gY29tbWFuZCByZXNldHMgdGhlIG5ldHdv cmsgYWRhcHRlciBhbmQgbGVhdmVzIGl0IGluIGENCj4gKyAgc2FmZSBzdGF0ZSBmb3IgYW5vdGhl ciBkcml2ZXIgdG8gaW5pdGlhbGl6ZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgICAgQ2RiICBB IHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2lu LCBvdXRdIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVy IGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArVW5kaVNodXRkb3duICgNCj4gKyAgSU4g ICAgICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gT1VUICBOSUNfREFUQSAgKk5pYw0KPiArICAp DQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gKw0KPiArICBpZiAoKENkYi0+T3BD b2RlICE9IFBYRV9PUENPREVfU0hVVERPV04pIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAh PSBQWEVfU1RBVENPREVfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAh PSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAo Z1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkNQ QnNpemUgIT0gUFhFX0NQQlNJWkVfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJhZGRy ICE9IFBYRV9DUEJBRERSX05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+REJzaXplICE9IFBY RV9EQlNJWkVfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5EQmFkZHIgIT0gUFhFX0RCQURE Ul9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfTk9U X1VTRUQpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NP TU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFM SURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBDZGItPlN0YXRG bGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCj4gKyAgICBDZGItPlN0YXRD b2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+ U3RhdGUgIT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfSU5JVElBTElaRUQpIHsNCj4gKyAgICBD ZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfSU5JVElBTElaRUQ7DQo+ICsgICAgQ2Ri LT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIHJldHVy bjsNCj4gKyAgfQ0KPiArDQo+ICsgIE5pYy0+Q2FuUmVjZWl2ZSAgPSBGQUxTRTsNCj4gKyAgTmlj LT5DYW5UcmFuc21pdCA9IEZBTFNFOw0KPiArDQo+ICsgIE5pYy0+U3RhdGUgPSBQWEVfU1RBVEZM QUdTX0dFVF9TVEFURV9TVEFSVEVEOw0KPiArDQo+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRo VW5kaS5Vc2JFdGhVbmRpU2h1dGRvd24gIT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5pYy0+ VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlTaHV0ZG93biAoQ2RiLCBOaWMpOw0KPiArICAg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIENkYi0+U3RhdENvZGUgID0gUFhF X1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhF X1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgIFRoZSBJbnRlcnJ1cHQgRW5hYmxlcyBjb21tYW5kIGNhbiBiZSB1c2VkIHRv IHJlYWQgYW5kL29yIGNoYW5nZQ0KPiArICB0aGUgY3VycmVudCBleHRlcm5hbCBpbnRlcnJ1cHQg ZW5hYmxlIHNldHRpbmdzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRv IHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBw b2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4g KyoqLw0KPiArVk9JRA0KPiArVW5kaUludGVycnVwdEVuYWJsZSAoDQo+ICsgIElOICBQWEVfQ0RC ICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJ X1NUQVRVUyAgU3RhdHVzOw0KPiArDQo+ICsgIENkYi0+U3RhdENvZGUgPSBQWEVfU1RBVENPREVf VU5TVVBQT1JURUQ7DQo+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRp SW50ZXJydXB0RW5hYmxlICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+ VXNiRXRoVW5kaS5Vc2JFdGhVbmRpSW50ZXJydXB0RW5hYmxlIChDZGIsIE5pYyk7DQo+ICsgICAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVf U1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICBDZGIt PlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCj4gKyAgICAgIENk Yi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsgICAgfQ0KPiArICB9DQo+ ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byByZWFkIGFuZCBj aGFuZ2UgcmVjZWl2ZSBmaWx0ZXJzIGFuZCwNCj4gKyAgaWYgc3VwcG9ydGVkLCByZWFkIGFuZCBj aGFuZ2UgdGhlIG11bHRpY2FzdCBNQUMgYWRkcmVzcyBmaWx0ZXIgbGlzdC4NCj4gKw0KPiArICBA cGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2Nr Lg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZh Y2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlSZWNlaXZl RmlsdGVyICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpO aWMNCj4gKyAgKQ0KPiArew0KPiArICBVSU5UMTYgICAgICAgICAgICAgICAgICBOZXdGaWx0ZXI7 DQo+ICsgIFBYRV9EQl9SRUNFSVZFX0ZJTFRFUlMgICpEYjsNCj4gKyAgRUZJX1NUQVRVUyAgICAg ICAgICAgICAgU3RhdHVzOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcENvZGUgIT0gUFhFX09QQ09E RV9SRUNFSVZFX0ZJTFRFUlMpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RB VENPREVfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RB VEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZj bnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkpDQo+ICsgIHsNCj4gKyAgICBDZGItPlN0YXRGbGFn cyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAg PSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9IGVsc2Ug ew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRF Ow0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsgIH0N Cj4gKw0KPiArICBpZiAoTmljLT5TdGF0ZSAhPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklU SUFMSVpFRCkgew0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX05PVF9JTklU SUFMSVpFRDsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9G QUlMRUQ7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgTmV3RmlsdGVyID0gKFVJ TlQxNikoQ2RiLT5PcEZsYWdzICYgMHgxRik7DQo+ICsNCj4gKyAgc3dpdGNoIChDZGItPk9wRmxh Z3MgJiBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9PUE1BU0spIHsNCj4gKyAgICBjYXNlIFBY RV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX1JFQUQ6DQo+ICsgICAgICBpZiAoQ2RiLT5DUEJzaXpl ICE9IFBYRV9DUEJTSVpFX05PVF9VU0VEKSB7DQo+ICsgICAgICAgIENkYi0+U3RhdEZsYWdzID0g UFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICAgICAgQ2RiLT5TdGF0Q29kZSAg PSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIGlm ICgoTmV3RmlsdGVyICYgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfUkVTRVRfTUNBU1RfTElT VCkgPT0gMCkgew0KPiArICAgICAgICBpZiAoKENkYi0+REJzaXplICE9IDApKSB7DQo+ICsgICAg ICAgICAgRGIgPSAoUFhFX0RCX1JFQ0VJVkVfRklMVEVSUyAqKShVSU5UTilDZGItPkRCYWRkcjsN Cj4gKyAgICAgICAgICBDb3B5TWVtIChEYiwgJk5pYy0+TWNhc3RMaXN0LCBOaWMtPk1jYXN0Q291 bnQpOw0KPiArICAgICAgICB9DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIGJyZWFrOw0KPiAr DQo+ICsgICAgY2FzZSBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9FTkFCTEU6DQo+ICsgICAg ICBpZiAoTmV3RmlsdGVyID09IDApIHsNCj4gKyAgICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVf U1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICBpZiAo Q2RiLT5DUEJzaXplICE9IDApIHsNCj4gKyAgICAgICAgaWYgKCgoTmV3RmlsdGVyICYgUFhFX09Q RkxBR1NfUkVDRUlWRV9GSUxURVJfRklMVEVSRURfTVVMVElDQVNUKSA9PSAwKSB8fA0KPiArICAg ICAgICAgICAgKChOZXdGaWx0ZXIgJiBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9SRVNFVF9N Q0FTVF9MSVNUKSAhPSAwKSB8fA0KPiArICAgICAgICAgICAgKChOZXdGaWx0ZXIgJiBQWEVfT1BG TEFHU19SRUNFSVZFX0ZJTFRFUl9BTExfTVVMVElDQVNUKSAhPSAwKSB8fA0KPiArICAgICAgICAg ICAgKChDZGItPkNQQnNpemUgJSBzaXplb2YgKFBYRV9NQUNfQUREUikpICE9IDApKQ0KPiArICAg ICAgICB7DQo+ICsgICAgICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1B TkRfRkFJTEVEOw0KPiArICAgICAgICB9DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIGlmICgo Q2RiLT5PcEZsYWdzICYgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfRklMVEVSRURfTVVMVElD QVNUKSAhPSAwKSB7DQo+ICsgICAgICAgIGlmICgoKENkYi0+T3BGbGFncyAmIFBYRV9PUEZMQUdT X1JFQ0VJVkVfRklMVEVSX1JFU0VUX01DQVNUX0xJU1QpICE9IDApIHx8DQo+ICsgICAgICAgICAg ICAoKENkYi0+T3BGbGFncyAmIFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0FMTF9NVUxUSUNB U1QpICE9IDApKQ0KPiArICAgICAgICB7DQo+ICsgICAgICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQ WEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgICAgICB9DQo+ICsNCj4gKyAgICAg ICAgaWYgKChDZGItPkNQQnNpemUgPT0gMCkpIHsNCj4gKyAgICAgICAgICBDZGItPlN0YXRGbGFn cyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgICAgIH0NCj4gKyAgICAg IH0NCj4gKw0KPiArICAgICAgQ2RiLT5TdGF0Q29kZSA9IFNldEZpbHRlciAoTmljLCBOZXdGaWx0 ZXIsIENkYi0+Q1BCYWRkciwgQ2RiLT5DUEJzaXplKTsNCj4gKyAgICAgIGJyZWFrOw0KPiArDQo+ ICsgICAgY2FzZSBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9ESVNBQkxFOg0KPiArICAgICAg aWYgKENkYi0+Q1BCc2l6ZSAhPSBQWEVfQ1BCU0laRV9OT1RfVVNFRCkgew0KPiArICAgICAgICBD ZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgICAg IENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgICAgfQ0K PiArDQo+ICsgICAgICBOaWMtPkNhblJlY2VpdmUgPSBUUlVFOw0KPiArICAgICAgYnJlYWs7DQo+ ICsNCj4gKyAgICBkZWZhdWx0Og0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZM QUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENP REVfSU5WQUxJRF9DREI7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5DYW5SZWNlaXZlKSB7 DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSAoUFhFX1NUQVRGTEFHUykoQ2RiLT5TdGF0RmxhZ3Mg fCBOaWMtPlJ4RmlsdGVyKTsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNi RXRoVW5kaS5Vc2JFdGhVbmRpUmVjZWl2ZUZpbHRlciAhPSBOVUxMKSB7DQo+ICsgICAgU3RhdHVz ID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVJlY2VpdmVGaWx0ZXIgKENkYiwg TmljKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBDZGItPlN0 YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfQ0KPiArICB9 DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBTZXQgUFhFIHJlY2VpdmUgZmlsdGVyLg0KPiArDQo+ ICsgIEBwYXJhbVtpbl0gIE5pYyAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRl cmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArICBAcGFyYW1baW5dICBTZXRGaWx0ZXIgICBQWEUg cmVjZWl2ZSBmaWx0ZXINCj4gKyAgQHBhcmFtW2luXSAgQ3BiQWRkciAgICAgQ29tbWFuZCBQYXJh bWV0ZXIgQmxvY2sgQWRkcmVzcw0KPiArICBAcGFyYW1baW5dICBDcGJTaXplICAgICBDb21tYW5k IFBhcmFtZXRlciBCbG9jayBTaXplDQo+ICsNCj4gKyoqLw0KPiArVUlOVDE2DQo+ICtTZXRGaWx0 ZXIgKA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMsDQo+ICsgIElOICBVSU5UMTYgICAgU2V0Rmls dGVyLA0KPiArICBJTiAgVUlOVDY0ICAgIENwYkFkZHIsDQo+ICsgIElOICBVSU5UMzIgICAgQ3Bi U2l6ZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgU3Rh dHVzOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICpNY2FzdExpc3Q7DQo+ICsg IFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgQ291bnQ7DQo+ICsgIFVJTlQ4ICAgICAgICAg ICAgICAgICAgICAgICAgSW5kZXgxOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAg IEluZGV4MjsNCj4gKyAgUFhFX0NQQl9SRUNFSVZFX0ZJTFRFUlMgICAgICAqQ3BiOw0KPiArICBV U0JfRVRIRVJORVRfRlVOX0RFU0NSSVBUT1IgIFVzYkV0aEZ1bkRlc2NyaXB0b3I7DQo+ICsNCj4g KyAgQ291bnQgPSAwOw0KPiArICBDcGIgICA9IChQWEVfQ1BCX1JFQ0VJVkVfRklMVEVSUyAqKShV SU5UTilDcGJBZGRyOw0KPiArDQo+ICsgIC8vIFRoZSBDcGIgY291bGQgYmUgTlVMTC4ocmVmOlBY RV9DUEJBRERSX05PVF9VU0VEKQ0KPiArICBOaWMtPlJ4RmlsdGVyID0gKFVJTlQ4KVNldEZpbHRl cjsNCj4gKw0KPiArICBpZiAoKChTZXRGaWx0ZXIgJiBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRF Ul9GSUxURVJFRF9NVUxUSUNBU1QpICE9IDApIHx8IChDcGIgIT0gTlVMTCkpIHsNCj4gKyAgICBp ZiAoQ3BiICE9IE5VTEwpIHsNCj4gKyAgICAgIE5pYy0+TWNhc3RDb3VudCA9IChVSU5UOCkoQ3Bi U2l6ZSAvIFBYRV9NQUNfTEVOR1RIKTsNCj4gKyAgICAgIENvcHlNZW0gKCZOaWMtPk1jYXN0TGlz dCwgQ3BiLCBOaWMtPk1jYXN0Q291bnQpOw0KPiArICAgIH0NCj4gKw0KPiArICAgIGlmIChOaWMt PkNhblJlY2VpdmUpIHsNCj4gKyAgICAgIE5pYy0+Q2FuUmVjZWl2ZSA9IEZBTFNFOw0KPiArICAg IH0NCj4gKw0KPiArICAgIE5pYy0+VXNiRXRoLT5Vc2JFdGhGdW5EZXNjcmlwdG9yIChOaWMtPlVz YkV0aCwgJlVzYkV0aEZ1bkRlc2NyaXB0b3IpOw0KPiArICAgIGlmICgoVXNiRXRoRnVuRGVzY3Jp cHRvci5OdW1iZXJNY0ZpbHRlcnMgPDwgMSkgPT0gMCkgew0KPiArICAgICAgTmljLT5SeEZpbHRl ciB8PSBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9BTExfTVVMVElDQVNUOw0KPiArICAgICAg TmljLT5Vc2JFdGgtPlNldFVzYkV0aFBhY2tldEZpbHRlciAoTmljLT5Vc2JFdGgsIE5pYy0+UnhG aWx0ZXIpOw0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICBTdGF0dXMgPSBnQlMtPkFsbG9jYXRl UG9vbCAoRWZpQm9vdFNlcnZpY2VzRGF0YSwgTmljLT5NY2FzdENvdW50ICogNiwgKFZPSUQgKiop Jk1jYXN0TGlzdCk7DQo+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAg ICAgIHJldHVybiBQWEVfU1RBVENPREVfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgICAgICB9DQo+ ICsNCj4gKyAgICAgIGlmIChDcGIgIT0gTlVMTCkgew0KPiArICAgICAgICBmb3IgKEluZGV4MSA9 IDA7IEluZGV4MSA8IE5pYy0+TWNhc3RDb3VudDsgSW5kZXgxKyspIHsNCj4gKyAgICAgICAgICBm b3IgKEluZGV4MiA9IDA7IEluZGV4MiA8IDY7IEluZGV4MisrKSB7DQo+ICsgICAgICAgICAgICBN Y2FzdExpc3RbQ291bnQrK10gPSBDcGItPk1DYXN0TGlzdFtJbmRleDFdW0luZGV4Ml07DQo+ICsg ICAgICAgICAgfQ0KPiArICAgICAgICB9DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIE5pYy0+ UnhGaWx0ZXIgfD0gUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfRklMVEVSRURfTVVMVElDQVNU Ow0KPiArICAgICAgaWYgKENwYiAhPSBOVUxMKSB7DQo+ICsgICAgICAgIE5pYy0+VXNiRXRoLT5T ZXRVc2JFdGhNY2FzdEZpbHRlciAoTmljLT5Vc2JFdGgsIE5pYy0+TWNhc3RDb3VudCwgTWNhc3RM 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 IGlmIChDb21wYXJlTWVtICgmTmljLT5DdXJyZW50Tm9kZUFkZHJlc3NbMF0sICZOaWMtPlBlcm1O b2RlQWRkcmVzc1swXSwgUFhFX01BQ19MRU5HVEgpICE9IDApIHsNCj4gKyAgICAgIGZvciAoSW5k ZXggPSAwOyBJbmRleCA8IFBYRV9NQUNfTEVOR1RIOyBJbmRleCsrKSB7DQo+ICsgICAgICAgIE5p Yy0+Q3VycmVudE5vZGVBZGRyZXNzW0luZGV4XSA9IE5pYy0+UGVybU5vZGVBZGRyZXNzW0luZGV4 XTsNCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoQ2RiLT5DUEJh ZGRyICE9IDApIHsNCj4gKyAgICBDcGIgPSAoUFhFX0NQQl9TVEFUSU9OX0FERFJFU1MgKikoVUlO VE4pQ2RiLT5DUEJhZGRyOw0KPiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFBYRV9NQUNf TEVOR1RIOyBJbmRleCsrKSB7DQo+ICsgICAgICBOaWMtPkN1cnJlbnROb2RlQWRkcmVzc1tJbmRl eF0gPSBDcGItPlN0YXRpb25BZGRyW0luZGV4XTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiAr ICBpZiAoQ2RiLT5EQmFkZHIgIT0gMCkgew0KPiArICAgIERiID0gKFBYRV9EQl9TVEFUSU9OX0FE RFJFU1MgKikoVUlOVE4pQ2RiLT5EQmFkZHI7DQo+ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4 IDwgUFhFX01BQ19MRU5HVEg7IEluZGV4KyspIHsNCj4gKyAgICAgIERiLT5TdGF0aW9uQWRkcltJ bmRleF0gICA9IE5pYy0+Q3VycmVudE5vZGVBZGRyZXNzW0luZGV4XTsNCj4gKyAgICAgIERiLT5C cm9hZGNhc3RBZGRyW0luZGV4XSA9IE5pYy0+QnJvYWRjYXN0Tm9kZUFkZHJlc3NbSW5kZXhdOw0K PiArICAgICAgRGItPlBlcm1hbmVudEFkZHJbSW5kZXhdID0gTmljLT5QZXJtTm9kZUFkZHJlc3Nb SW5kZXhdOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNi RXRoVW5kaS5Vc2JFdGhVbmRpU3RhdGlvbkFkZHJlc3MgIT0gTlVMTCkgew0KPiArICAgIFN0YXR1 cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlTdGF0aW9uQWRkcmVzcyAoQ2Ri LCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIENkYi0+ U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICB9DQo+ICsg IH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIHJlYWQg YW5kIGNsZWFyIHRoZSBOSUMgdHJhZmZpYyBzdGF0aXN0aWNzLg0KPiArDQo+ICsgIEBwYXJhbVtp bl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsg IEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250 cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArVW5kaVN0YXRpc3RpY3MgKA0K PiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICAp DQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gKw0KPiArICBpZiAoKENkYi0+T3BD b2RlICE9IFBYRV9PUENPREVfU1RBVElTVElDUykgfHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2Rl ICE9IFBYRV9TVEFUQ09ERV9JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdz ICE9IFBYRV9TVEFURkxBR1NfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVtID49 IChnUHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENkYi0+ Q1BCc2l6ZSAhPSBQWEVfQ1BCU0laRV9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkNQQmFk ZHIgIT0gUFhFX0NQQkFERFJfTk9UX1VTRUQpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5TdGF0Rmxh Z3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUg ID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfSBlbHNl IHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVU RTsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlN0YXRlICE9IFBYRV9TVEFURkxBR1NfR0VU X1NUQVRFX0lOSVRJQUxJWkVEKSB7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENP REVfTk9UX0lOSVRJQUxJWkVEOw0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFH U19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBpZiAo KENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19TVEFUSVNUSUNTX1JFU0VUKSAmJg0KPiArICAg ICAgKENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19TVEFUSVNUSUNTX1JFQUQpKQ0KPiArICB7 DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0K PiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAg IHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIENkYi0+U3RhdENvZGUgPSBTdGF0aXN0aWNzIChO aWMsIENkYi0+REJhZGRyLCBDZGItPkRCc2l6ZSk7DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRo LT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlTdGF0aXN0aWNzICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0 dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3RhdGlzdGljcyAoQ2RiLCBO aWMpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIENkYi0+U3Rh dEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICB9DQo+ICsgIH0N Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJldHVybiBkYXRhIGZvciBEQiBkYXRhLg0KPiArDQo+ ICsgIEBwYXJhbVtpbl0gIE5pYyAgICAgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZh Y2UgY29udHJvbGxlciBkYXRhLg0KPiArICBAcGFyYW1baW5dICBEYkFkZHIgICBEYXRhIEJsb2Nr IEFkZHJlc3MuDQo+ICsgIEBwYXJhbVtpbl0gIERiU2l6ZSAgIERhdGEgQmxvY2sgU2l6ZS4NCj4g Kw0KPiArKiovDQo+ICtVSU5UMTYNCj4gK1N0YXRpc3RpY3MgKA0KPiArICBJTiBOSUNfREFUQSAg Kk5pYywNCj4gKyAgSU4gVUlOVDY0ICAgIERiQWRkciwNCj4gKyAgSU4gVUlOVDE2ICAgIERiU2l6 ZQ0KPiArICApDQo+ICt7DQo+ICsgIFBYRV9EQl9TVEFUSVNUSUNTICAqRGJTdGF0aXN0aWM7DQo+ ICsgIEVGSV9TVEFUVVMgICAgICAgICBTdGF0dXM7DQo+ICsNCj4gKyAgRGJTdGF0aXN0aWMgPSAo UFhFX0RCX1NUQVRJU1RJQ1MgKikoVUlOVE4pRGJBZGRyOw0KPiArDQo+ICsgIGlmIChEYlNpemUg PT0gMCkgew0KPiArICAgIHJldHVybiBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gKyAgfQ0KPiAr DQo+ICsgIERiU3RhdGlzdGljLT5TdXBwb3J0ZWQgID0gMHg4MDI7DQo+ICsgIERiU3RhdGlzdGlj LT5EYXRhWzB4MDFdID0gTmljLT5SeEZyYW1lOw0KPiArICBEYlN0YXRpc3RpYy0+RGF0YVsweDBC XSA9IE5pYy0+VHhGcmFtZTsNCj4gKw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFN0YXRp c3RpY3MgIT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhTdGF0 aXN0aWNzIChOaWMsIERiQWRkciwgRGJTaXplKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ICsgICAgICByZXR1cm4gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4g KyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUcmFuc2xhdGUgYSBtdWx0aWNhc3QgSVB2NCBvciBJUHY2 IGFkZHJlc3MgdG8gYSBtdWx0aWNhc3QgTUFDIGFkZHJlc3MuDQo+ICsNCj4gKyAgQHBhcmFtW2lu LCBvdXRdIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ ICsgIEBwYXJhbVtpbl0gICAgICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZh Y2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlNY2FzdElw Mk1hYyAoDQo+ICsgIElOIE9VVCAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICAgICAgTklDX0RB VEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBQWEVfQ1BCX01DQVNUX0lQX1RPX01BQyAgKkNw YjsNCj4gKyAgUFhFX0RCX01DQVNUX0lQX1RPX01BQyAgICpEYjsNCj4gKyAgVUlOVDggICAgICAg ICAgICAgICAgICAgICpUbXA7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICBTdGF0dXM7 DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RFX01DQVNUX0lQX1RPX01B QykgfHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9JTklUSUFMSVpF KSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdzICE9IFBYRV9TVEFURkxBR1NfSU5JVElBTEla RSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUtPklGY250 RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENkYi0+Q1BCc2l6ZSAhPSBzaXplb2YgKFBYRV9DUEJf TUNBU1RfSVBfVE9fTUFDKSkgfHwNCj4gKyAgICAgIChDZGItPkRCc2l6ZSAhPSBzaXplb2YgKFBY RV9EQl9NQ0FTVF9JUF9UT19NQUMpKSkNCj4gKyAgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0g UFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBY RV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0gZWxzZSB7DQo+ ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09NUExFVEU7DQo+ ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gKyAgfQ0KPiAr DQo+ICsgIGlmIChOaWMtPlN0YXRlICE9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX0lOSVRJQUxJ WkVEKSB7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfTk9UX0lOSVRJQUxJ WkVEOw0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxF RDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBDcGIgPSAoUFhFX0NQQl9NQ0FT VF9JUF9UT19NQUMgKikoVUlOVE4pQ2RiLT5DUEJhZGRyOw0KPiArICBEYiAgPSAoUFhFX0RCX01D QVNUX0lQX1RPX01BQyAqKShVSU5UTilDZGItPkRCYWRkcjsNCj4gKw0KPiArICBpZiAoKENkYi0+ T3BGbGFncyAmIFBYRV9PUEZMQUdTX01DQVNUX0lQVjZfVE9fTUFDKSAhPSAwKSB7DQo+ICsgICAg Q2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENk Yi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX1VOU1VQUE9SVEVEOw0KPiArICAgIHJldHVybjsN Cj4gKyAgfQ0KPiArDQo+ICsgIFRtcCA9IChVSU5UOCAqKSgmQ3BiLT5JUC5JUHY0KTsNCj4gKw0K PiArICBpZiAoKFRtcFswXSAmIDB4RjApICE9IDB4RTApIHsNCj4gKyAgICBDZGItPlN0YXRGbGFn cyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAg PSBQWEVfU1RBVENPREVfSU5WQUxJRF9DUEI7DQo+ICsgIH0NCj4gKw0KPiArICBEYi0+TUFDWzBd ID0gMHgwMTsNCj4gKyAgRGItPk1BQ1sxXSA9IDB4MDA7DQo+ICsgIERiLT5NQUNbMl0gPSAweDVF Ow0KPiArICBEYi0+TUFDWzNdID0gVG1wWzFdICYgMHg3RjsNCj4gKyAgRGItPk1BQ1s0XSA9IFRt cFsyXTsNCj4gKyAgRGItPk1BQ1s1XSA9IFRtcFszXTsNCj4gKw0KPiArICBpZiAoTmljLT5Vc2JF dGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaU1jYXN0SXAyTWFjICE9IE5VTEwpIHsNCj4gKyAgICBT dGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpTWNhc3RJcDJNYWMgKENk YiwgTmljKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBDZGIt PlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfQ0KPiAr ICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byByZWFk IGFuZCB3cml0ZSAoaWYgc3VwcG9ydGVkIGJ5IE5JQyBIL1cpDQo+ICsgIG5vbnZvbGF0aWxlIHN0 b3JhZ2Ugb24gdGhlIE5JQy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0 byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEg cG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlOdkRhdGEgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIs DQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMg IFN0YXR1czsNCj4gKw0KPiArICBDZGItPlN0YXRDb2RlID0gUFhFX1NUQVRDT0RFX1VOU1VQUE9S VEVEOw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaU52RGF0YSAh PSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRo VW5kaU52RGF0YSAoQ2RiLCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4gKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsN Cj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdT X0NPTU1BTkRfQ09NUExFVEU7DQo+ICsgICAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09E RV9TVUNDRVNTOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhp cyBjb21tYW5kIHJldHVybnMgdGhlIGN1cnJlbnQgaW50ZXJydXB0IHN0YXR1cyBhbmQvb3IgdGhl DQo+ICsgIHRyYW5zbWl0dGVkIGJ1ZmZlciBhZGRyZXNzZXMgYW5kIHRoZSBjdXJyZW50IG1lZGlh IHN0YXR1cy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29t bWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0 byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsqKi8NCj4g K1ZPSUQNCj4gK1VuZGlHZXRTdGF0dXMgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsg IElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIFBYRV9EQl9HRVRfU1RBVFVT ICAqRGI7DQo+ICsgIFBYRV9EQl9HRVRfU1RBVFVTICBUbXBHZXRTdGF0dXM7DQo+ICsgIFVJTlQx NiAgICAgICAgICAgICBOdW1FbnRyaWVzOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgSW5kZXg7 DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKChDZGItPk9w Q29kZSAhPSBQWEVfT1BDT0RFX0dFVF9TVEFUVVMpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29k ZSAhPSBQWEVfU1RBVENPREVfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFn cyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+ PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGIt PkNQQnNpemUgIT0gUFhFX0NQQlNJWkVfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJh ZGRyICE9IFBYRV9DUEJBRERSX05PVF9VU0VEKSkNCj4gKyAgew0KPiArICAgIENkYi0+U3RhdEZs YWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2Rl ICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0gZWxz ZSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09NUExF VEU7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gKyAg fQ0KPiArDQo+ICsgIGlmIChOaWMtPlN0YXRlICE9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX0lO SVRJQUxJWkVEKSB7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfTk9UX0lO SVRJQUxJWkVEOw0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5E X0ZBSUxFRDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBUbXBHZXRTdGF0dXMu UnhGcmFtZUxlbiA9IDA7DQo+ICsgIFRtcEdldFN0YXR1cy5yZXNlcnZlZCAgID0gMDsNCj4gKyAg RGIgICAgICAgICAgICAgICAgICAgICAgPSAoUFhFX0RCX0dFVF9TVEFUVVMgKikoVUlOVE4pQ2Ri LT5EQmFkZHI7DQo+ICsNCj4gKyAgaWYgKChDZGItPkRCc2l6ZSA+IDApICYmIChDZGItPkRCc2l6 ZSA8IHNpemVvZiAoVUlOVDMyKSAqIDIpKSB7DQo+ICsgICAgQ29weU1lbSAoRGIsICZUbXBHZXRT dGF0dXMsIENkYi0+REJzaXplKTsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBDb3B5TWVtIChEYiwg JlRtcEdldFN0YXR1cywgc2l6ZW9mIChVSU5UMzIpICogMik7DQo+ICsgIH0NCj4gKw0KPiArICBp ZiAoKENkYi0+T3BGbGFncyAmIFBYRV9PUEZMQUdTX0dFVF9UUkFOU01JVFRFRF9CVUZGRVJTKSAh PSAwKSB7DQo+ICsgICAgaWYgKENkYi0+REJzaXplID09IDApIHsNCj4gKyAgICAgIENkYi0+U3Rh dEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICAgIENkYi0+U3Rh dENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgICAgcmV0dXJuOw0KPiAr ICAgIH0NCj4gKw0KPiArICAgIE51bUVudHJpZXMgID0gQ2RiLT5EQnNpemUgLSBzaXplb2YgKFVJ TlQ2NCk7DQo+ICsgICAgQ2RiLT5EQnNpemUgPSBzaXplb2YgKFVJTlQzMikgKiAyOw0KPiArDQo+ ICsgICAgZm9yIChJbmRleCA9IDA7IE51bUVudHJpZXMgPj0gc2l6ZW9mIChVSU5UNjQpOyBJbmRl eCsrLCBOdW1FbnRyaWVzIC09IHNpemVvZiAoVUlOVDY0KSkgew0KPiArICAgICAgaWYgKE5pYy0+ VHhCdWZmZXJDb3VudCA+IDApIHsNCj4gKyAgICAgICAgTmljLT5UeEJ1ZmZlckNvdW50LS07DQo+ ICsgICAgICAgIERiLT5UeEJ1ZmZlcltJbmRleF0gPSBOaWMtPk1lZGlhSGVhZGVyW05pYy0+VHhC dWZmZXJDb3VudF07DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYg KChDZGItPk9wRmxhZ3MgJiBQWEVfT1BGTEFHU19HRVRfSU5URVJSVVBUX1NUQVRVUykgIT0gMCkg ew0KPiArICAgIGlmIChOaWMtPlJlY2VpdmVTdGF0dXMgIT0gMCkgew0KPiArICAgICAgQ2RiLT5T dGF0RmxhZ3MgfD0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVFVTX1JFQ0VJVkU7DQo+ICsgICAgfQ0K PiArICB9DQo+ICsNCj4gKyAgaWYgKChOaWMtPlJlcXVlc3QuUmVxdWVzdCA9PSBVU0JfQ0RDX05F VFdPUktfQ09OTkVDVElPTikgJiYgKE5pYy0+UmVxdWVzdC5WYWx1ZSA9PSBORVRXT1JLX0RJU0NP Tk5FQ1QpKSB7DQo+ICsgICAgTmljLT5DYWJsZURldGVjdCA9IDA7DQo+ICsgIH0gZWxzZSBpZiAo KE5pYy0+UmVxdWVzdC5SZXF1ZXN0ID09IFVTQl9DRENfTkVUV09SS19DT05ORUNUSU9OKSAmJiAo TmljLT5SZXF1ZXN0LlZhbHVlID09IE5FVFdPUktfQ09OTkVDVEVEKSkgew0KPiArICAgIE5pYy0+ Q2FibGVEZXRlY3QgPSAxOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wRmxhZ3MgJiBQ WEVfT1BGTEFHU19HRVRfTUVESUFfU1RBVFVTKSAhPSAwKSB7DQo+ICsgICAgaWYgKE5pYy0+Q2Fi bGVEZXRlY3QgPT0gMCkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgfD0gUFhFX1NUQVRGTEFH U19HRVRfU1RBVFVTX05PX01FRElBOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChO aWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpR2V0U3RhdHVzICE9IE5VTEwpIHsNCj4g KyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpR2V0U3RhdHVz IChDZGIsIE5pYyk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAg Q2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0N Cj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8g ZmlsbCB0aGUgbWVkaWEgaGVhZGVyKHMpIGluIHRyYW5zbWl0IHBhY2tldChzKS4NCj4gKw0KPiAr ICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJs b2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRl cmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlGaWxs SGVhZGVyICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpO aWMNCj4gKyAgKQ0KPiArew0KPiArICBQWEVfQ1BCX0ZJTExfSEVBREVSICAgICAgICAgICAgICpD cGJGaWxsSGVhZGVyOw0KPiArICBQWEVfQ1BCX0ZJTExfSEVBREVSX0ZSQUdNRU5URUQgICpDcGJG aWxsOw0KPiArICBFdGhlcm5ldEhlYWRlciAgICAgICAgICAgICAgICAgICpNYWNIZWFkZXI7DQo+ ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsgIEVGSV9TVEFU VVMgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcENv ZGUgIT0gUFhFX09QQ09ERV9GSUxMX0hFQURFUikgfHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2Rl ICE9IFBYRV9TVEFUQ09ERV9JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdz ICE9IFBYRV9TVEFURkxBR1NfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVtID49 IChnUHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENkYi0+ Q1BCc2l6ZSAhPSBzaXplb2YgKFBYRV9DUEJfRklMTF9IRUFERVJfRlJBR01FTlRFRCkpIHx8DQo+ ICsgICAgICAoQ2RiLT5EQnNpemUgIT0gUFhFX0RCU0laRV9OT1RfVVNFRCkgfHwNCj4gKyAgICAg IChDZGItPkRCYWRkciAhPSBQWEVfREJBRERSX05PVF9VU0VEKSkNCj4gKyAgew0KPiArICAgIENk Yi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGIt PlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ ICsgIH0gZWxzZSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1B TkRfQ09NUExFVEU7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VT UzsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlN0YXRlICE9IFBYRV9TVEFURkxBR1NfR0VU X1NUQVRFX0lOSVRJQUxJWkVEKSB7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENP REVfTk9UX0lOSVRJQUxJWkVEOw0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFH U19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBpZiAo Q2RiLT5DUEJzaXplID09IFBYRV9DUEJTSVpFX05PVF9VU0VEKSB7DQo+ICsgICAgQ2RiLT5TdGF0 RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENv ZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0K PiArDQo+ICsgIGlmICgoQ2RiLT5PcEZsYWdzICYgUFhFX09QRkxBR1NfRklMTF9IRUFERVJfRlJB R01FTlRFRCkgIT0gMCkgew0KPiArICAgIENwYkZpbGwgPSAoUFhFX0NQQl9GSUxMX0hFQURFUl9G UkFHTUVOVEVEICopKFVJTlROKUNkYi0+Q1BCYWRkcjsNCj4gKw0KPiArICAgIGlmICgoQ3BiRmls bC0+RnJhZ0NudCA9PSAwKSB8fCAoQ3BiRmlsbC0+RnJhZ0Rlc2NbMF0uRnJhZ0xlbiA8IFBYRV9N QUNfSEVBREVSX0xFTl9FVEhFUikpIHsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NU QVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NU QVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgICAgcmV0dXJuOw0KPiArICAgIH0NCj4gKw0KPiAr ICAgIE1hY0hlYWRlciAgICAgICAgICAgPSAoRXRoZXJuZXRIZWFkZXIgKikoVUlOVE4pQ3BiRmls bC0+RnJhZ0Rlc2NbMF0uRnJhZ0FkZHI7DQo+ICsgICAgTWFjSGVhZGVyLT5Qcm90b2NvbCA9IENw YkZpbGwtPlByb3RvY29sOw0KPiArDQo+ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUFhF X0hXQUREUl9MRU5fRVRIRVI7IEluZGV4KyspIHsNCj4gKyAgICAgIE1hY0hlYWRlci0+RGVzdEFk ZHJbSW5kZXhdID0gQ3BiRmlsbC0+RGVzdEFkZHJbSW5kZXhdOw0KPiArICAgICAgTWFjSGVhZGVy LT5TcmNBZGRyW0luZGV4XSAgPSBDcGJGaWxsLT5TcmNBZGRyW0luZGV4XTsNCj4gKyAgICB9DQo+ ICsgIH0gZWxzZSB7DQo+ICsgICAgQ3BiRmlsbEhlYWRlciA9IChQWEVfQ1BCX0ZJTExfSEVBREVS ICopKFVJTlROKUNkYi0+Q1BCYWRkcjsNCj4gKw0KPiArICAgIE1hY0hlYWRlciAgICAgICAgICAg PSAoRXRoZXJuZXRIZWFkZXIgKikoVUlOVE4pQ3BiRmlsbEhlYWRlci0+TWVkaWFIZWFkZXI7DQo+ ICsgICAgTWFjSGVhZGVyLT5Qcm90b2NvbCA9IENwYkZpbGxIZWFkZXItPlByb3RvY29sOw0KPiAr DQo+ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUFhFX0hXQUREUl9MRU5fRVRIRVI7IElu ZGV4KyspIHsNCj4gKyAgICAgIE1hY0hlYWRlci0+RGVzdEFkZHJbSW5kZXhdID0gQ3BiRmlsbEhl YWRlci0+RGVzdEFkZHJbSW5kZXhdOw0KPiArICAgICAgTWFjSGVhZGVyLT5TcmNBZGRyW0luZGV4 XSAgPSBDcGJGaWxsSGVhZGVyLT5TcmNBZGRyW0luZGV4XTsNCj4gKyAgICB9DQo+ICsgIH0NCj4g Kw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaUZpbGxIZWFkZXIg IT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0 aFVuZGlGaWxsSGVhZGVyIChDZGIsIE5pYyk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJ TEVEOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhlIFRyYW5z bWl0IGNvbW1hbmQgaXMgdXNlZCB0byBwbGFjZSBhIHBhY2tldCBpbnRvIHRoZSB0cmFuc21pdCBx dWV1ZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFu ZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0 aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZP SUQNCj4gK1VuZGlUcmFuc21pdCAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4g IE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0K PiArDQo+ICsgIGlmICgoQ2RiLT5PcENvZGUgIT0gUFhFX09QQ09ERV9UUkFOU01JVCkgfHwNCj4g KyAgICAgIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9JTklUSUFMSVpFKSB8fA0KPiAr ICAgICAgKENkYi0+U3RhdEZsYWdzICE9IFBYRV9TVEFURkxBR1NfSU5JVElBTElaRSkgfHwNCj4g KyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDgp KSB8fA0KPiArICAgICAgKENkYi0+Q1BCc2l6ZSAhPSBzaXplb2YgKFBYRV9DUEJfVFJBTlNNSVQp KSB8fA0KPiArICAgICAgKENkYi0+REJzaXplICE9IFBYRV9EQlNJWkVfTk9UX1VTRUQpIHx8DQo+ ICsgICAgICAoQ2RiLT5EQmFkZHIgIT0gUFhFX0RCQUREUl9OT1RfVVNFRCkpDQo+ICsgIHsNCj4g KyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsg ICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgcmV0 dXJuOw0KPiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFH U19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RF X1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5TdGF0ZSAhPSBQWEVfU1RBVEZM QUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhF X1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9T VEFUQ09ERV9OT1RfSU5JVElBTElaRUQ7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4g KyAgaWYgKENkYi0+Q1BCc2l6ZSA9PSBQWEVfQ1BCU0laRV9OT1RfVVNFRCkgew0KPiArICAgIENk Yi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGIt PlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVRy YW5zbWl0ICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5k aS5Vc2JFdGhVbmRpVHJhbnNtaXQgKENkYiwgTmljKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFO RF9GQUlMRUQ7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4g KyAgQ2RiLT5TdGF0Q29kZSA9IFRyYW5zbWl0IChDZGIsIE5pYywgQ2RiLT5DUEJhZGRyLCBDZGIt Pk9wRmxhZ3MpOw0KPiArDQo+ICsgIGlmIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9T VUNDRVNTKSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRf RkFJTEVEOw0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBVc2UgVVNCIEV0aGVybmV0 IFByb3RvY29sIEJ1bGsgb3V0IGNvbW1hbmQgdG8gdHJhbnNtaXQgZGF0YS4NCj4gKw0KPiArICBA cGFyYW1baW5dICAgICAgQ2RiICAgICAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0 b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBOaWMgICAgICBBIHBvaW50ZXIgdG8gdGhl IE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKyAgQHBhcmFtW2luXSAgICAg IENwYkFkZHIgIENvbW1hbmQgUGFyYW1ldGVyIEJsb2NrIEFkZHJlc3MuDQo+ICsgIEBwYXJhbVtp bl0gICAgICBPcEZsYWdzICBPcGVyYXRpb24gRmxhZ3MuDQo+ICsNCj4gKyoqLw0KPiArVUlOVDE2 DQo+ICtUcmFuc21pdCAoDQo+ICsgIElOICAgICAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOIE9V VCAgTklDX0RBVEEgICpOaWMsDQo+ICsgIElOICAgICAgVUlOVDY0ICAgIENwYkFkZHIsDQo+ICsg IElOICAgICAgVUlOVDE2ICAgIE9wRmxhZ3MNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVT ICAgICAgICBTdGF0dXM7DQo+ICsgIFBYRV9DUEJfVFJBTlNNSVQgICpDcGI7DQo+ICsgIFVJTlQ2 NCAgICAgICAgICAgIEJ1bGtPdXREYXRhOw0KPiArICBVSU5UTiAgICAgICAgICAgICBEYXRhTGVu Z3RoOw0KPiArICBVSU5UTiAgICAgICAgICAgICBUcmFuc21pdExlbmd0aDsNCj4gKyAgVUlOVE4g ICAgICAgICAgICAgTWFwOw0KPiArICBVSU5UMzIgICAgICAgICAgICBDb3VudGVyOw0KPiArICBV SU5UMTYgICAgICAgICAgICBTdGF0Q29kZTsNCj4gKw0KPiArICBCdWxrT3V0RGF0YSA9IDA7DQo+ ICsgIENvdW50ZXIgICAgID0gMDsNCj4gKyAgQ3BiICAgICAgICAgPSAoUFhFX0NQQl9UUkFOU01J VCAqKShVSU5UTilDcGJBZGRyOw0KPiArDQo+ICsgIGlmIChOaWMtPkNhblRyYW5zbWl0KSB7DQo+ ICsgICAgcmV0dXJuIFBYRV9TVEFUQ09ERV9CVVNZOw0KPiArICB9DQo+ICsNCj4gKyAgTmljLT5D YW5UcmFuc21pdCA9IFRSVUU7DQo+ICsNCj4gKyAgaWYgKChPcEZsYWdzICYgUFhFX09QRkxBR1Nf VFJBTlNNSVRfRlJBR01FTlRFRCkgIT0gMCkgew0KPiArICAgIHJldHVybiBQWEVfU1RBVENPREVf SU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgIH0NCj4gKw0KPiArICBNYXAgPSBNYXBJdCAoDQo+ICsg ICAgICAgICAgTmljLA0KPiArICAgICAgICAgIENwYi0+RnJhbWVBZGRyLA0KPiArICAgICAgICAg IENwYi0+RGF0YUxlbiArIChVSU5UMzIpQ3BiLT5NZWRpYWhlYWRlckxlbiwNCj4gKyAgICAgICAg ICBUT19ERVZJQ0UsDQo+ICsgICAgICAgICAgKFVJTlQ2NCkoVUlOVE4pJkJ1bGtPdXREYXRhDQo+ ICsgICAgICAgICAgKTsNCj4gKw0KPiArICBpZiAoTWFwICE9IDApIHsNCj4gKyAgICBOaWMtPkNh blRyYW5zbWl0ID0gRkFMU0U7DQo+ICsgICAgcmV0dXJuIFBYRV9TVEFUQ09ERV9JTlZBTElEX1BB UkFNRVRFUjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlR4QnVmZmVyQ291bnQgPCBNQVhf WE1JVF9CVUZGRVJTKSB7DQo+ICsgICAgTmljLT5NZWRpYUhlYWRlcltOaWMtPlR4QnVmZmVyQ291 bnRdID0gQ3BiLT5GcmFtZUFkZHI7DQo+ICsgICAgTmljLT5UeEJ1ZmZlckNvdW50Kys7DQo+ICsg IH0NCj4gKw0KPiArICBEYXRhTGVuZ3RoID0gKFVJTlROKShDcGItPkRhdGFMZW4gKyAoVUlOVDMy KUNwYi0+TWVkaWFoZWFkZXJMZW4pOw0KPiArDQo+ICsgIHdoaWxlICgxKSB7DQo+ICsgICAgaWYg KENvdW50ZXIgPj0gMykgew0KPiArICAgICAgU3RhdENvZGUgPSBQWEVfU1RBVENPREVfQlVTWTsN Cj4gKyAgICAgIGJyZWFrOw0KPiArICAgIH0NCj4gKw0KPiArICAgIFRyYW5zbWl0TGVuZ3RoID0g RGF0YUxlbmd0aDsNCj4gKw0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhUcmFu c21pdCAoQ2RiLCBOaWMtPlVzYkV0aCwgKFZPSUQgKikoVUlOVE4pQnVsa091dERhdGEsICZUcmFu c21pdExlbmd0aCk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAg U3RhdENvZGUgPSAgUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICB9DQo+ICsN Cj4gKyAgICBpZiAoU3RhdHVzID09IEVGSV9JTlZBTElEX1BBUkFNRVRFUikgew0KPiArICAgICAg U3RhdENvZGUgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgICAgICBicmVh azsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoU3RhdHVzID09IEVGSV9ERVZJQ0VfRVJST1Ip IHsNCj4gKyAgICAgIFN0YXRDb2RlID0gUFhFX1NUQVRDT0RFX0RFVklDRV9GQUlMVVJFOw0KPiAr ICAgICAgYnJlYWs7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4gKyAgICAgIE5pYy0+VHhGcmFtZSsrOw0KPiArICAgICAgU3RhdENvZGUgPSBQWEVf U1RBVENPREVfU1VDQ0VTUzsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIH0NCj4gKw0KPiArICAg IENvdW50ZXIrKzsNCj4gKyAgfQ0KPiArDQo+ICsgIFVuTWFwSXQgKA0KPiArICAgIE5pYywNCj4g KyAgICBDcGItPkZyYW1lQWRkciwNCj4gKyAgICBDcGItPkRhdGFMZW4gKyAoVUlOVDMyKUNwYi0+ TWVkaWFoZWFkZXJMZW4sDQo+ICsgICAgVE9fREVWSUNFLA0KPiArICAgIEJ1bGtPdXREYXRhDQo+ ICsgICAgKTsNCj4gKw0KPiArICBOaWMtPkNhblRyYW5zbWl0ID0gRkFMU0U7DQo+ICsNCj4gKyAg cmV0dXJuIFN0YXRDb2RlOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgV2hlbiB0aGUgbmV0d29y ayBhZGFwdGVyIGhhcyByZWNlaXZlZCBhIGZyYW1lLCB0aGlzIGNvbW1hbmQgaXMgdXNlZA0KPiAr ICB0byBjb3B5IHRoZSBmcmFtZSBpbnRvIGRyaXZlci9hcHBsaWNhdGlvbiBzdG9yYWdlLg0KPiAr DQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0 b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3Jr IGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArVW5k aVJlY2VpdmUgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAg Kk5pYw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gKw0KPiArICBp ZiAoKENkYi0+T3BDb2RlICE9IFBYRV9PUENPREVfUkVDRUlWRSkgfHwNCj4gKyAgICAgIChDZGIt PlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+ U3RhdEZsYWdzICE9IFBYRV9TVEFURkxBR1NfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGIt PklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDgpKSB8fA0KPiArICAg ICAgKENkYi0+Q1BCc2l6ZSAhPSBzaXplb2YgKFBYRV9DUEJfUkVDRUlWRSkpIHx8DQo+ICsgICAg ICAoQ2RiLT5EQnNpemUgIT0gc2l6ZW9mIChQWEVfREJfUkVDRUlWRSkpIHx8DQo+ICsgICAgICAo Q2RiLT5PcEZsYWdzICE9IFBYRV9PUEZMQUdTX05PVF9VU0VEKSkNCj4gKyAgew0KPiArICAgIENk Yi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGIt PlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ ICsgIH0gZWxzZSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1B TkRfQ09NUExFVEU7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VT UzsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlN0YXRlICE9IFBYRV9TVEFURkxBR1NfR0VU X1NUQVRFX0lOSVRJQUxJWkVEKSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZM QUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RF X05PVF9JTklUSUFMSVpFRDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBpZiAo IU5pYy0+Q2FuUmVjZWl2ZSkgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFH U19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9O T1RfSU5JVElBTElaRUQ7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5p Yy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlSZWNlaXZlICE9IE5VTEwpIHsNCj4gKyAg ICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpUmVjZWl2ZSAoQ2Ri LCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIENkYi0+ U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICB9DQo+ICsN Cj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBDZGItPlN0YXRDb2RlID0gUmVjZWl2 ZSAoQ2RiLCBOaWMsIENkYi0+Q1BCYWRkciwgQ2RiLT5EQmFkZHIpOw0KPiArDQo+ICsgIGlmIChD ZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9TVUNDRVNTKSB7DQo+ICsgICAgQ2RiLT5TdGF0 RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICB9DQo+ICt9DQo+ICsN Cj4gKy8qKg0KPiArICBVc2UgVVNCIEV0aGVybmV0IFByb3RvY29sIEJ1bGsgaW4gY29tbWFuZCB0 byByZWNlaXZlIGRhdGEuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIENkYiAgICAgIEEgcG9p bnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW4sIG91 dF0gTmljICAgICAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVy IGRhdGEuDQo+ICsgIEBwYXJhbVtpbl0gICAgICBDcGJBZGRyICBDb21tYW5kIFBhcmFtZXRlciBC bG9jayBBZGRyZXNzLg0KPiArICBAcGFyYW1baW4sIG91dF0gRGJBZGRyICAgRGF0YSBCbG9jayBB ZGRyZXNzLg0KPiArDQo+ICsqKi8NCj4gK1VJTlQxNg0KPiArUmVjZWl2ZSAoDQo+ICsgIElOIFBY RV9DREIgICAgICAgKkNkYiwNCj4gKyAgSU4gT1VUIE5JQ19EQVRBICAqTmljLA0KPiArICBJTiBV SU5UNjQgICAgICAgIENwYkFkZHIsDQo+ICsgIElOIE9VVCBVSU5UNjQgICAgRGJBZGRyDQo+ICsg ICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICBTdGF0dXM7DQo+ICsgIFVJTlROICAgICAg ICAgICAgSW5kZXg7DQo+ICsgIFVJTlQxNiAgICAgICAgICAgU3RhdENvZGU7DQo+ICsgIFBYRV9G UkFNRV9UWVBFICAgRnJhbWVUeXBlOw0KPiArICBQWEVfQ1BCX1JFQ0VJVkUgICpDcGI7DQo+ICsg IFBYRV9EQl9SRUNFSVZFICAgKkRiOw0KPiArICBOSUNfREVWSUNFICAgICAgICpOaWNEZXZpY2U7 DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgKkJ1bGtJbkRhdGE7DQo+ICsgIFVJTlROICAgICAgICAg ICAgRGF0YUxlbmd0aDsNCj4gKyAgRXRoZXJuZXRIZWFkZXIgICAqSGVhZGVyOw0KPiArDQo+ICsg IFN0YXRDb2RlICAgPSBQWEVfU1RBVENPREVfTk9fREFUQTsNCj4gKyAgRnJhbWVUeXBlICA9IFBY RV9GUkFNRV9UWVBFX05PTkU7DQo+ICsgIE5pY0RldmljZSAgPSBVTkRJX0RFVl9GUk9NX05JQyAo TmljKTsNCj4gKyAgQnVsa0luRGF0YSA9IE5pY0RldmljZS0+UmVjZWl2ZUJ1ZmZlcjsNCj4gKyAg RGF0YUxlbmd0aCA9IChVSU5UTilOaWMtPk1heFNlZ21lbnRTaXplOw0KPiArICBDcGIgICAgICAg ID0gKFBYRV9DUEJfUkVDRUlWRSAqKShVSU5UTilDcGJBZGRyOw0KPiArICBEYiAgICAgICAgID0g KFBYRV9EQl9SRUNFSVZFICopKFVJTlROKURiQWRkcjsNCj4gKw0KPiArICBpZiAoIUJ1bGtJbkRh dGEpIHsNCj4gKyAgICByZXR1cm4gUFhFX1NUQVRDT0RFX0lOVkFMSURfUEFSQU1FVEVSOw0KPiAr ICB9DQo+ICsNCj4gKyAgd2hpbGUgKDEpIHsNCj4gKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+ VXNiRXRoUmVjZWl2ZSAoQ2RiLCBOaWMtPlVzYkV0aCwgKFZPSUQgKilCdWxrSW5EYXRhLCAmRGF0 YUxlbmd0aCk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgYnJl YWs7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgTmljLT5SeEZyYW1lKys7DQo+ICsNCj4gKyAgICBp ZiAoRGF0YUxlbmd0aCAhPSAwKSB7DQo+ICsgICAgICBpZiAoRGF0YUxlbmd0aCA+IENwYi0+QnVm ZmVyTGVuKSB7DQo+ICsgICAgICAgIERhdGFMZW5ndGggPSAoVUlOVE4pQ3BiLT5CdWZmZXJMZW47 DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIENvcHlNZW0gKChVSU5UOCAqKShVSU5UTilDcGIt PkJ1ZmZlckFkZHIsIChVSU5UOCAqKUJ1bGtJbkRhdGEsIERhdGFMZW5ndGgpOw0KPiArDQo+ICsg ICAgICBIZWFkZXIgPSAoRXRoZXJuZXRIZWFkZXIgKilCdWxrSW5EYXRhOw0KPiArDQo+ICsgICAg ICBEYi0+RnJhbWVMZW4gICAgICAgPSAoVUlOVDMyKURhdGFMZW5ndGg7DQo+ICsgICAgICBEYi0+ TWVkaWFIZWFkZXJMZW4gPSBQWEVfTUFDX0hFQURFUl9MRU5fRVRIRVI7DQo+ICsNCj4gKyAgICAg IGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFBYRV9IV0FERFJfTEVOX0VUSEVSOyBJbmRleCsrKSB7 DQo+ICsgICAgICAgIGlmIChIZWFkZXItPkRlc3RBZGRyW0luZGV4XSAhPSBOaWMtPkN1cnJlbnRO b2RlQWRkcmVzc1tJbmRleF0pIHsNCj4gKyAgICAgICAgICBicmVhazsNCj4gKyAgICAgICAgfQ0K PiArICAgICAgfQ0KPiArDQo+ICsgICAgICBpZiAoSW5kZXggPj0gUFhFX0hXQUREUl9MRU5fRVRI RVIpIHsNCj4gKyAgICAgICAgRnJhbWVUeXBlID0gUFhFX0ZSQU1FX1RZUEVfVU5JQ0FTVDsNCj4g KyAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFBYRV9I V0FERFJfTEVOX0VUSEVSOyBJbmRleCsrKSB7DQo+ICsgICAgICAgICAgaWYgKEhlYWRlci0+RGVz dEFkZHJbSW5kZXhdICE9IE5pYy0+QnJvYWRjYXN0Tm9kZUFkZHJlc3NbSW5kZXhdKSB7DQo+ICsg ICAgICAgICAgICBicmVhazsNCj4gKyAgICAgICAgICB9DQo+ICsgICAgICAgIH0NCj4gKw0KPiAr ICAgICAgICBpZiAoSW5kZXggPj0gUFhFX0hXQUREUl9MRU5fRVRIRVIpIHsNCj4gKyAgICAgICAg ICBGcmFtZVR5cGUgPSBQWEVfRlJBTUVfVFlQRV9CUk9BRENBU1Q7DQo+ICsgICAgICAgIH0gZWxz ZSB7DQo+ICsgICAgICAgICAgaWYgKChIZWFkZXItPkRlc3RBZGRyWzBdICYgMSkgPT0gMSkgew0K PiArICAgICAgICAgICAgRnJhbWVUeXBlID0gUFhFX0ZSQU1FX1RZUEVfRklMVEVSRURfTVVMVElD QVNUOw0KPiArICAgICAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICBGcmFtZVR5cGUgPSBQ WEVfRlJBTUVfVFlQRV9QUk9NSVNDVU9VUzsNCj4gKyAgICAgICAgICB9DQo+ICsgICAgICAgIH0N Cj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgRGItPlR5cGUgICAgID0gRnJhbWVUeXBlOw0KPiAr ICAgICAgRGItPlByb3RvY29sID0gSGVhZGVyLT5Qcm90b2NvbDsNCj4gKw0KPiArICAgICAgZm9y IChJbmRleCA9IDA7IEluZGV4IDwgUFhFX0hXQUREUl9MRU5fRVRIRVI7IEluZGV4KyspIHsNCj4g KyAgICAgICAgRGItPlNyY0FkZHJbSW5kZXhdICA9IEhlYWRlci0+U3JjQWRkcltJbmRleF07DQo+ ICsgICAgICAgIERiLT5EZXN0QWRkcltJbmRleF0gPSBIZWFkZXItPkRlc3RBZGRyW0luZGV4XTsN Cj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgU3RhdENvZGUgPSBQWEVfU1RBVENPREVfU1VDQ0VT UzsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChGcmFt ZVR5cGUgPT0gUFhFX0ZSQU1FX1RZUEVfTk9ORSkgew0KPiArICAgIE5pYy0+UmVjZWl2ZVN0YXR1 cyA9IDA7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgTmljLT5SZWNlaXZlU3RhdHVzID0gMTsNCj4g KyAgfQ0KPiArDQo+ICsgIHJldHVybiBTdGF0Q29kZTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg IEZpbGwgb3V0IFBYRSBTVyBVTkRJIHN0cnVjdHVyZS4NCj4gKw0KPiArICBAcGFyYW1bb3V0XSAg UHhlU3cgICAgICBBIHBvaW50ZXIgdG8gdGhlIFBYRSBTVyBVTkRJIHN0cnVjdHVyZS4NCj4gKw0K PiArKiovDQo+ICtWT0lEDQo+ICtQeGVTdHJ1Y3RJbml0ICgNCj4gKyAgT1VUIFBYRV9TV19VTkRJ ICAqUHhlU3cNCj4gKyAgKQ0KPiArew0KPiArICBQeGVTdy0+U2lnbmF0dXJlID0gUFhFX1JPTUlE X1NJR05BVFVSRTsNCj4gKyAgUHhlU3ctPkxlbiAgICAgICA9IChVSU5UOClzaXplb2YgKFBYRV9T V19VTkRJKTsNCj4gKyAgUHhlU3ctPkZ1ZGdlICAgICA9IDA7DQo+ICsgIFB4ZVN3LT5JRmNudCAg ICAgPSAwOw0KPiArICBQeGVTdy0+SUZjbnRFeHQgID0gMDsNCj4gKyAgUHhlU3ctPlJldiAgICAg ICA9IFBYRV9ST01JRF9SRVY7DQo+ICsgIFB4ZVN3LT5NYWpvclZlciAgPSBQWEVfUk9NSURfTUFK T1JWRVI7DQo+ICsgIFB4ZVN3LT5NaW5vclZlciAgPSBQWEVfUk9NSURfTUlOT1JWRVI7DQo+ICsg IFB4ZVN3LT5yZXNlcnZlZDEgPSAwOw0KPiArDQo+ICsgIFB4ZVN3LT5JbXBsZW1lbnRhdGlvbiA9 IFBYRV9ST01JRF9JTVBfU1dfVklSVF9BRERSIHwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgUFhFX1JPTUlEX0lNUF9GUkFHX1NVUFBPUlRFRCB8DQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgIFBYRV9ST01JRF9JTVBfQ01EX0xJTktfU1VQUE9SVEVEIHwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgUFhFX1JPTUlEX0lNUF9TVEFUSU9OX0FERFJfU0VUVEFCTEUgfA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICBQWEVfUk9NSURfSU1QX1BST01JU0NVT1VTX01VTFRJ Q0FTVF9SWF9TVVBQT1JURUQgfA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICBQWEVfUk9N SURfSU1QX1BST01JU0NVT1VTX1JYX1NVUFBPUlRFRCB8DQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgIFBYRV9ST01JRF9JTVBfQlJPQURDQVNUX1JYX1NVUFBPUlRFRCB8DQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgIFBYRV9ST01JRF9JTVBfRklMVEVSRURfTVVMVElDQVNUX1JYX1NV UFBPUlRFRDsNCj4gKw0KPiArICBQeGVTdy0+RW50cnlQb2ludCAgID0gKFVJTlQ2NCkoVUlOVE4p VW5kaUFwaUVudHJ5Ow0KPiArICBQeGVTdy0+cmVzZXJ2ZWQyWzBdID0gMDsNCj4gKyAgUHhlU3ct PnJlc2VydmVkMlsxXSA9IDA7DQo+ICsgIFB4ZVN3LT5yZXNlcnZlZDJbMl0gPSAwOw0KPiArICBQ eGVTdy0+QnVzQ250ICAgICAgID0gMTsNCj4gKyAgUHhlU3ctPkJ1c1R5cGVbMF0gICA9IFBYRV9C VVNUWVBFX1VTQjsNCj4gKyAgUHhlU3ctPkZ1ZGdlICAgICAgICA9IFB4ZVN3LT5GdWRnZSAtIENh bGN1bGF0ZVN1bTggKChWT0lEICopUHhlU3csIFB4ZVN3LT5MZW4pOw0KPiArfQ0KPiArDQo+ICsv KioNCj4gKyAgVXBkYXRlIE5JQyBudW1iZXIuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIE5p YyAgICAgICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0 YS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIFB4ZVN3ICAgICBBIHBvaW50ZXIgdG8gdGhlIFBYRSBT VyBVTkRJIHN0cnVjdHVyZS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtVcGRhdGVOaWNOdW0g KA0KPiArICBJTiAgICAgIE5JQ19EQVRBICAgICAqTmljLA0KPiArICBJTiBPVVQgIFBYRV9TV19V TkRJICAqUHhlU3cNCj4gKyAgKQ0KPiArew0KPiArICBVSU5UMTYgIE5pY051bTsNCj4gKw0KPiAr ICBOaWNOdW0gPSAoUHhlU3ctPklGY250IHwgUHhlU3ctPklGY250RXh0IDw8IDgpOw0KPiArDQo+ ICsgIGlmIChOaWMgPT0gTlVMTCkgew0KPiArICAgIGlmIChOaWNOdW0gPiAwKSB7DQo+ICsgICAg ICBOaWNOdW0tLTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBQeGVTdy0+SUZjbnQgICAgPSAoVUlO VDgpKE5pY051bSAmIDB4RkYpOyAgICAgICAgICAvLyBHZXQgbG93ZXIgYnl0ZQ0KPiArICAgIFB4 ZVN3LT5JRmNudEV4dCA9IChVSU5UOCkoKE5pY051bSAmIDB4RkYwMCkgPj4gOCk7IC8vIEdldCB1 cHBlciBieXRlDQo+ICsgICAgUHhlU3ctPkZ1ZGdlICAgID0gKFVJTlQ4KShQeGVTdy0+RnVkZ2Ug LSBDYWxjdWxhdGVTdW04ICgoVk9JRCAqKVB4ZVN3LCBQeGVTdy0+TGVuKSk7DQo+ICsgICAgcmV0 dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgTmljTnVtKys7DQo+ICsNCj4gKyAgUHhlU3ctPklGY250 ICAgID0gKFVJTlQ4KShOaWNOdW0gJiAweEZGKTsgICAgICAgICAgLy8gR2V0IGxvd2VyIGJ5dGUN Cj4gKyAgUHhlU3ctPklGY250RXh0ID0gKFVJTlQ4KSgoTmljTnVtICYgMHhGRjAwKSA+PiA4KTsg Ly8gR2V0IHVwcGVyIGJ5dGUNCj4gKyAgUHhlU3ctPkZ1ZGdlICAgID0gKFVJTlQ4KShQeGVTdy0+ RnVkZ2UgLSBDYWxjdWxhdGVTdW04ICgoVk9JRCAqKVB4ZVN3LCBQeGVTdy0+TGVuKSk7DQo+ICt9 DQo+ICsNCj4gKy8qKg0KPiArICBVTkRJIEFQSSB0YWJsZSBlbnRyeS4NCj4gKw0KPiArICBAcGFy YW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0K PiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVW5kaUFwaUVudHJ5ICgN Cj4gKyAgSU4gIFVJTlQ2NCAgQ2RiDQo+ICsgICkNCj4gK3sNCj4gKyAgUFhFX0NEQiAgICpDZGJQ dHI7DQo+ICsgIE5JQ19EQVRBICAqTmljOw0KPiArDQo+ICsgIGlmIChDZGIgPT0gMCkgew0KPiAr ICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgIH0NCj4gKw0KPiArICBDZGJQ dHIgPSAoUFhFX0NEQiAqKShVSU5UTilDZGI7DQo+ICsgIE5pYyAgICA9ICYoZ0xhbkRldmljZUxp c3RbQ2RiUHRyLT5JRm51bV0tPk5pY0luZm8pOw0KPiArICBnVW5kaUFwaVRhYmxlW0NkYlB0ci0+ T3BDb2RlXShDZGJQdHIsIE5pYyk7DQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4g Kw0KPiArLyoqDQo+ICsgIE1hcCB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzIGZvciBETUEuIFRoaXMg ZmllbGQgY2FuIGJlIHNldCB0bw0KPiArICB6ZXJvIGlmIHRoZXJlIGlzIG5vIG1hcHBpbmcgc2Vy dmljZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBOaWMgICAgICAgICAgIEEgcG9pbnRlciB0byB0 aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArICBAcGFyYW1baW5dICBN ZW1BZGRyICAgICAgIFZpcnR1YWwgYWRkcmVzcyB0byBiZSBtYXBwZWQuDQo+ICsgIEBwYXJhbVtp bl0gIFNpemUgICAgICAgICAgU2l6ZSBvZiBtZW1vcnkgdG8gYmUgbWFwcGVkLg0KPiArICBAcGFy YW1baW5dICBEaXJlY3Rpb24gICAgIERpcmVjdGlvbiBvZiBkYXRhIGZsb3cgZm9yIHRoaXMgbWVt b3J5J3MgdXNhZ2U6DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1LT5kZXZpY2Us IGRldmljZS0+Y3B1IG9yIGJvdGggd2F5cy4NCj4gKyAgQHBhcmFtW291dF0gTWFwcGVkQWRkciAg ICBQb2ludGVyIHRvIHJldHVybiB0aGUgbWFwcGVkIGRldmljZSBhZGRyZXNzLg0KPiArDQo+ICsq Ki8NCj4gK1VJTlRODQo+ICtNYXBJdCAoDQo+ICsgIElOIE5JQ19EQVRBICAqTmljLA0KPiArICBJ TiBVSU5UNjQgICAgTWVtQWRkciwNCj4gKyAgSU4gVUlOVDMyICAgIFNpemUsDQo+ICsgIElOIFVJ TlQzMiAgICBEaXJlY3Rpb24sDQo+ICsgIE9VVCBVSU5UNjQgICBNYXBwZWRBZGRyDQo+ICsgICkN Cj4gK3sNCj4gKyAgVUlOVDY0ICAqUGh5QWRkcjsNCj4gKw0KPiArICBQaHlBZGRyID0gKFVJTlQ2 NCAqKShVSU5UTilNYXBwZWRBZGRyOw0KPiArDQo+ICsgIGlmIChOaWMtPlB4ZVN0YXJ0Lk1hcF9N ZW0gPT0gMCkgew0KPiArICAgICpQaHlBZGRyID0gTWVtQWRkcjsNCj4gKyAgfSBlbHNlIHsNCj4g KyAgICAoKHZvaWQgKCopKFVJTlQ2NCwgVUlOVDY0LCBVSU5UMzIsIFVJTlQzMiwgVUlOVDY0KSko VUlOVE4pIE5pYy0+UHhlU3RhcnQuTWFwX01lbSkoDQo+ICsgIE5pYy0+UHhlU3RhcnQuVW5pcXVl X0lELA0KPiArICBNZW1BZGRyLA0KPiArICBTaXplLA0KPiArICBEaXJlY3Rpb24sDQo+ICsgIE1h cHBlZEFkZHINCj4gKyAgKTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBQWEVfU1RBVENPREVf U1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFVuLW1hcCBwcmV2aW91c2x5IG1hcHBl ZCB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzLiBUaGlzIGZpZWxkIGNhbiBiZSBzZXQNCj4gKyAgdG8g emVybyBvbmx5IGlmIHRoZSBNYXBfTWVtKCkgc2VydmljZSBpcyBhbHNvIHNldCB0byB6ZXJvLg0K PiArDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBOZXR3 b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsgIEBwYXJhbVtpbl0gIE1lbUFkZHIg ICAgICAgVmlydHVhbCBhZGRyZXNzIHRvIGJlIG1hcHBlZC4NCj4gKyAgQHBhcmFtW2luXSAgU2l6 ZSAgICAgICAgICBTaXplIG9mIG1lbW9yeSB0byBiZSBtYXBwZWQuDQo+ICsgIEBwYXJhbVtpbl0g IERpcmVjdGlvbiAgICAgRGlyZWN0aW9uIG9mIGRhdGEgZmxvdyBmb3IgdGhpcyBtZW1vcnkncyB1 c2FnZToNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHUtPmRldmljZSwgZGV2aWNl LT5jcHUgb3IgYm90aCB3YXlzLg0KPiArICBAcGFyYW1baW5dICBNYXBwZWRBZGRyICAgIFBvaW50 ZXIgdG8gcmV0dXJuIHRoZSBtYXBwZWQgZGV2aWNlIGFkZHJlc3MuDQo+ICsNCj4gKyoqLw0KPiAr Vk9JRA0KPiArVW5NYXBJdCAoDQo+ICsgIElOIE5JQ19EQVRBICAqTmljLA0KPiArICBJTiBVSU5U NjQgICAgTWVtQWRkciwNCj4gKyAgSU4gVUlOVDMyICAgIFNpemUsDQo+ICsgIElOIFVJTlQzMiAg ICBEaXJlY3Rpb24sDQo+ICsgIElOIFVJTlQ2NCAgICBNYXBwZWRBZGRyDQo+ICsgICkNCj4gK3sN Cj4gKyAgaWYgKE5pYy0+UHhlU3RhcnQuVW5NYXBfTWVtICE9IDApIHsNCj4gKyAgICAoKHZvaWQg KCopKFVJTlQ2NCwgVUlOVDY0LCBVSU5UMzIsIFVJTlQzMiwgVUlOVDY0KSkoVUlOVE4pIE5pYy0+ UHhlU3RhcnQuVW5NYXBfTWVtKSgNCj4gKyAgTmljLT5QeGVTdGFydC5VbmlxdWVfSUQsDQo+ICsg IE1lbUFkZHIsDQo+ICsgIFNpemUsDQo+ICsgIERpcmVjdGlvbiwNCj4gKyAgTWFwcGVkQWRkcg0K PiArICApOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuOw0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEv VXNiTmV0d29ya1BrZy9SZWFkTWUubWQgYi9Vc2JOZXR3b3JrUGtnL1JlYWRNZS5tZA0KPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi5jYjcwNjg0ZjBiDQo+IC0tLSAv ZGV2L251bGwNCj4gKysrIGIvVXNiTmV0d29ya1BrZy9SZWFkTWUubWQNCj4gQEAgLTAsMCArMSw2 NSBAQA0KPiArIyBVc2JOZXR3b3JrUGtnDQo+ICsNCj4gK1RoaXMgZG9jdW1lbnQgaXMgaW50ZW5k IHRvIHByb3ZpZGUgcGFja2FnZSBpbmZvcm1hdGlvbiwgaW5jbHVkZSB0aGUgaW50ZXJmYWNlIGRl dGFpbHMuDQo+ICsNCj4gKyMgSU5ERVgNCj4gKyAgKiBbSW50cm9kdWN0aW9uXSgjaW50cm9kdWN0 aW9uKQ0KPiArICAqIFtDb21wb25lbnRzXSgjY29tcG9uZW50cykNCj4gKyAgICAqIFtbTmV0d29y a0NvbW1vbl1dKCNuZXR3b3JrY29tbW9uKQ0KPiArICAgICogW1tVc2JDZGNFY21dXSgjdXNiY2Rj ZWNtKQ0KPiArICAgICogW1tVc2JDZGNOY21dXSgjdXNiY2RjbmNtKQ0KPiArICAgICogW1tVc2JS bmRpc11dKCN1c2JybmRpcykNCj4gKw0KPiArIyAgSW50cm9kdWN0aW9uDQo+ICtVc2JOZXR3b3Jr UGtnIHByb3ZpZGVzIG5ldHdvcmsgZnVuY3Rpb25zIGZvciBVU0IgTEFOIGRldmljZXMuDQo+ICsN Cj4gKyMgQ29tcG9uZW50cw0KPiArQmVsb3cgbW9kdWxlIGlzIGluY2x1ZGVkIGluIHRoaXMgcGFj a2FnZTo8YnI+DQo+ICstIE5ldHdvcmtDb21tb24NCj4gKy0gVXNiQ2RjRWNtDQo+ICstIFVzYkNk Y05jbQ0KPiArLSBVc2JSbmRpcw0KPiArDQo+ICsjIyBbTmV0d29ya0NvbW1vbl0NCj4gK1Byb3Zp ZGVzIGEgTEFOIGRyaXZlciBiYXNlZCBvbiBVRUZJIHNwZWNpZmljYXRpb24oVU5ESSkuIEl0IHN1 cHBvcnRzIFVTQiBjb21tdW5pY2F0aW9uIGNsYXNzIHN1YmNsYXNzIGRldmljZXMgYW5kIFVTQiBS bmRpcyBkZXZpY2VzLCBkZXBlbmRpbmcgb24gdGhlIFVzYkV0aGVybmV0UHJvdG9jb2wuDQo+ICsN Cj4gKyMjIFJlcXVpcmVkIENvbXBvbmVudHMNCj4gKy0gTmV0d29ya1BrZw0KPiArDQo+ICsjIyBb VXNiQ2RjRWNtXQ0KPiArVGhpcyBkcml2ZXIgcHJvdmlkZXMgYSBjb21tdW5pY2F0aW9uIGludGVy ZmFjZSBmb3IgVVNCIEV0aGVybmV0IGRldmljZXMgdGhhdCBmb2xsb3dzIHRoZSBFQ00gcHJvdG9j b2wuIFRoZSBkcml2ZXIgaW5zdGFsbHMgVXNiRXRoZXJuZXRQcm90b2NvbCB3aXRoIEVDTSBmdW5j dGlvbnMgd2hpY2ggYXJlIGNvbnN1bWVkIGJ5IHRoZSBOZXR3b3JrQ29tbW9uIGRyaXZlci4NCj4g Kw0KPiArVGhlIGRyaXZlciBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGZvbGxvd2luZyBVU0IgY2xh c3MgY29kZXM6DQo+ICt8Q2xhc3MgQ29kZXxTdWJDbGFzcyBDb2RlfFByb3RvY29sIENvZGV8DQo+ ICt8Oi0tLS0tLS0tOnw6LS0tLS0tLS0tLS06fDotLS0tLS0tLS0tLTp8DQo+ICt8MHgwMnwweDA2 fDB4MDB8DQo+ICsNCj4gKyMjIFJlcXVpcmVkIENvbXBvbmVudHMNCj4gKy0gTmV0d29ya0NvbW1v bg0KPiArLSBNZGVNb2R1bGVQa2coVVNCIGJ1cyBkcml2ZXIpDQo+ICsNCj4gKyMjIFtVc2JDZGNO Y21dDQo+ICtUaGlzIGRyaXZlciBwcm92aWRlcyBhIGNvbW11bmljYXRpb24gaW50ZXJmYWNlIGZv ciBVU0IgRXRoZXJuZXQgZGV2aWNlcyB0aGF0IGZvbGxvd3MgdGhlIE5DTSBwcm90b2NvbC4gVGhl IGRyaXZlciBpbnN0YWxscyBVc2JFdGhlcm5ldFByb3RvY29sIHdpdGggTkNNIGZ1bmN0aW9ucyB3 aGljaCBhcmUgY29uc3VtZWQgYnkgdGhlIE5ldHdvcmtDb21tb24gZHJpdmVyLg0KPiArDQo+ICtU aGUgZHJpdmVyIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgZm9sbG93aW5nIFVTQiBjbGFzcyBjb2Rl czoNCj4gK3xDbGFzcyBDb2RlfFN1YkNsYXNzIENvZGV8UHJvdG9jb2wgQ29kZXwNCj4gK3w6LS0t LS0tLS06fDotLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tOnwNCj4gK3wweDAyfDB4MER8MHgwMHwN Cj4gKw0KPiArIyMgUmVxdWlyZWQgQ29tcG9uZW50cw0KPiArLSBOZXR3b3JrQ29tbW9uDQo+ICst IE1kZU1vZHVsZVBrZyhVU0IgYnVzIGRyaXZlcikNCj4gKw0KPiArIyMgW1VzYlJuZGlzXQ0KPiAr VGhpcyBkcml2ZXIgcHJvdmlkZXMgYSBjb21tdW5pY2F0aW9uIGludGVyZmFjZSBmb3IgVVNCIEV0 aGVybmV0IGRldmljZXMgdGhhdCBmb2xsb3dzIHRoZSBSTkRJUyBwcm90b2NvbC4gVGhlIGRyaXZl ciBpbnN0YWxscyBVc2JFdGhlcm5ldFByb3RvY29sIHdpdGggUk5ESVMgZnVuY3Rpb25zIHdoaWNo IGFyZSBjb25zdW1lZCBieSB0aGUgTmV0d29ya0NvbW1vbiBkcml2ZXIuDQo+ICsNCj4gK1RoZSBk cml2ZXIgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBmb2xsb3dpbmcgVVNCIGNsYXNzIGNvZGVzOg0K PiArfENsYXNzIENvZGV8U3ViQ2xhc3MgQ29kZXxQcm90b2NvbCBDb2RlfA0KPiArfDotLS0tLS0t LTp8Oi0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS06fA0KPiArfDB4MDJ8MHgwMnwweEZGfA0KPiAr fDB4RUZ8MHgwNHwweDAxfA0KPiArDQo+ICsjIyBSZXF1aXJlZCBDb21wb25lbnRzDQo+ICstIE5l dHdvcmtDb21tb24NCj4gKy0gTWRlTW9kdWxlUGtnKFVTQiBidXMgZHJpdmVyKQ0KPiArDQo+IGRp ZmYgLS1naXQgYS9Vc2JOZXR3b3JrUGtnL1JlbGVhc2VOb3Rlcy5tZCBiL1VzYk5ldHdvcmtQa2cv UmVsZWFzZU5vdGVzLm1kDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAw MDAuLmY4Y2NjY2RiMDgNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9Vc2JOZXR3b3JrUGtnL1Jl bGVhc2VOb3Rlcy5tZA0KPiBAQCAtMCwwICsxLDExIEBADQo+ICsjIFVzYk5ldHdvcmtQa2cgUmVs ZWFzZSBOb3RlczwhLS0gb21pdCBpbiB0b2MgLS0+DQo+ICsNCj4gKyMgUmVsZWFzZSBIaXN0b3J5 PCEtLSBvbWl0IGluIHRvYyAtLT4NCj4gKy0gWzEuMDBdKCMxMDApDQo+ICsNCj4gKyMjIDEuMDAN Cj4gKw0KPiArKipSZWxlYXNlIERhdGU6KiogTWFyIDEwLCAyMDIyDQo+ICsNCj4gKyoqTmV3IEZl YXR1cmVzKioNCj4gKy0gVXNiTmV0d29ya1BrZyBmaXJzdCByZWxlYXNlLg0KPiBkaWZmIC0tZ2l0 IGEvVXNiTmV0d29ya1BrZy9Vc2JOZXR3b3JrUGtnLmRlYyBiL1VzYk5ldHdvcmtQa2cvVXNiTmV0 d29ya1BrZy5kZWMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMC4u MDIxNTQyYTdmZA0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL1VzYk5ldHdvcmtQa2cvVXNiTmV0 d29ya1BrZy5kZWMNCj4gQEAgLTAsMCArMSwzNiBAQA0KPiArIyMgQGZpbGUNCj4gKyMgIFRoaXMg cGFja2FnZSBkZWZpbmVzIFVzYiBuZXR3b3JrIHNwZWNpZmljIGludGVyZmFjZXMgYW5kIGxpYnJh cnkgY2xhc3Nlcw0KPiArIyAgYXMgd2VsbCBhcyBjb25maWd1cmF0aW9uIGZvciBzdGFuZGFyZCBl ZGsyIHBhY2thZ2VzLg0KPiArIw0KPiArIyBDb3B5cmlnaHQgKGMpIDIwMjIsIEFtZXJpY2FuIE1l Z2F0cmVuZHMgSW50ZXJuYXRpb25hbCBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiAr IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiArIyMNCj4g Kw0KPiArW0RlZmluZXNdDQo+ICsgIERFQ19TUEVDSUZJQ0FUSU9OICAgICAgICAgICAgICA9IDB4 MDAwMTAwMDUNCj4gKyAgUEFDS0FHRV9OQU1FICAgICAgICAgICAgICAgICAgID0gVXNiTmV0d29y a1BrZw0KPiArICBQQUNLQUdFX0dVSUQgICAgICAgICAgICAgICAgICAgPSBhYmZhYjkxZS0zN2Vh LTRjYjQtODBhNi01NjNkYmIwYmNlYzYNCj4gKyAgUEFDS0FHRV9WRVJTSU9OICAgICAgICAgICAg ICAgID0gMC4xDQo+ICsNCj4gK1tJbmNsdWRlc10NCj4gKyAgSW5jbHVkZQ0KPiArDQo+ICtbUHJv dG9jb2xzXQ0KPiArICAjIyBJbmNsdWRlL1Byb3RvY29sL0Vka0lJVXNiRXRoZXJuZXQuaA0KPiAr ICBnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQgPSB7IDB4OGQ4OTY5Y2MsIDB4ZmViMCwgMHg0MzAz LCB7IDB4YjIsIDB4MWEsIDB4MWYsIDB4MTEsIDB4NmYsIDB4MzgsIDB4NTYsIDB4NDMgfSB9DQo+ ICsNCj4gK1tHdWlkc10NCj4gKyAgIyMgVXNiIE5ldHdvcmsgcGFja2FnZSB0b2tlbiBzcGFjZSBH VUlEDQo+ICsgIGdVc2JOZXR3b3JrUGtnVG9rZW5TcGFjZUd1aWQgID0geyAweEExMjMxRTgyLCAw eDIxQjgsIDB4NDIwNCwgeyAweDkyLCAweEJCLCAweDM3LCAweDNBLCAweEZCLCAweDAxLCAweEM2 LCAweEExIH0gfQ0KPiArDQo+ICtbUGNkc0ZlYXR1cmVGbGFnXQ0KPiArDQo+ICsgICMjIFNldCB0 aGUgUENEICdVc2JDZGNFY21TdXBwb3J0JyB0byAnVFJVRScgaWYgJ1VzYiBDZGMgRWNtIGRldmlj ZScgbmVlZCB0byBiZSBlbmFibGVkLg0KPiArICBnVXNiTmV0d29ya1BrZ1Rva2VuU3BhY2VHdWlk LlVzYkNkY0VjbVN1cHBvcnR8RkFMU0V8Qk9PTEVBTnwweDAwMDAwMDAxDQo+ICsNCj4gKyAgIyMg U2V0IHRoZSBQQ0QgJ1VzYkNkY05jbVN1cHBvcnQnIHRvICdUUlVFJyBpZiAnVXNiIENkYyBOY20g ZGV2aWNlJyBuZWVkIHRvIGJlIGVuYWJsZWQuDQo+ICsgIGdVc2JOZXR3b3JrUGtnVG9rZW5TcGFj ZUd1aWQuVXNiQ2RjTmNtU3VwcG9ydHxGQUxTRXxCT09MRUFOfDB4MDAwMDAwMDINCj4gKw0KPiAr ICAjIyBTZXQgdGhlIFBDRCAnVXNiUm5kaXNTdXBwb3J0JyB0byAnVFJVRScgaWYgJ1VzYiBSbmRp cyBkZXZpY2UnIG5lZWQgdG8gYmUgZW5hYmxlZC4NCj4gKyAgZ1VzYk5ldHdvcmtQa2dUb2tlblNw YWNlR3VpZC5Vc2JSbmRpc1N1cHBvcnR8VFJVRXxCT09MRUFOfDB4MDAwMDAwMDMNCj4gKw0KPiBk aWZmIC0tZ2l0IGEvVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Db21wb25lbnROYW1lLmMgYi9Vc2JO ZXR3b3JrUGtnL1VzYlJuZGlzL0NvbXBvbmVudE5hbWUuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KPiBpbmRleCAwMDAwMDAwMDAwLi40MzdkNzc2YjE3DQo+IC0tLSAvZGV2L251bGwNCj4gKysr IGIvVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Db21wb25lbnROYW1lLmMNCj4gQEAgLTAsMCArMSwx NzIgQEANCj4gKy8qKiBAZmlsZQ0KPiArICBUaGlzIGZpbGUgY29udGFpbnMgY29kZSBmb3IgVVNC IFJORElTIERyaXZlciBDb21wb25lbnQNCj4gKyAgTmFtZSBkZWZpbml0aW9ucw0KPiArDQo+ICsg IENvcHlyaWdodCAoYykgMjAyMiwgQW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExM Qy4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsqKi8NCj4gKw0KPiArI2luY2x1ZGUgIlVzYlJuZGlz LmgiDQo+ICsNCj4gK0dMT0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEIEVGSV9VTklDT0RFX1NU UklOR19UQUJMRSAgZ1VzYlJuZGlzRHJpdmVyTmFtZVRhYmxlW10gPSB7DQo+ICsgIHsNCj4gKyAg ICAiZW5nO2VuIiwNCj4gKyAgICBMIlVTQiBSTkRJUyBEcml2ZXIiDQo+ICsgIH0sDQo+ICsgIHsN Cj4gKyAgICBOVUxMLA0KPiArICAgIE5VTEwNCj4gKyAgfQ0KPiArfTsNCj4gKw0KPiArRUZJX1NU QVRVUw0KPiArRUZJQVBJDQo+ICtVc2JSbmRpc0NvbXBvbmVudE5hbWVHZXREcml2ZXJOYW1lICgN Cj4gKyAgSU4gIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOICBD SEFSOCAgICAgICAgICAgICAgICAgICAgICAgICpMYW5ndWFnZSwNCj4gKyAgT1VUIENIQVIxNiAg ICAgICAgICAgICAgICAgICAgICAgKipEcml2ZXJOYW1lDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9T VEFUVVMNCj4gK0VGSUFQSQ0KPiArVXNiUm5kaXNDb21wb25lbnROYW1lR2V0Q29udHJvbGxlck5h bWUgKA0KPiArICBJTiBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJ TiBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXIsDQo+ICsgIElOIEVGSV9I QU5ETEUgICAgICAgICAgICAgICAgICAgQ2hpbGRIYW5kbGUgICAgICAgIE9QVElPTkFMLA0KPiAr ICBJTiBDSEFSOCAgICAgICAgICAgICAgICAgICAgICAgICpMYW5ndWFnZSwNCj4gKyAgT1VUIENI QVIxNiAgICAgICAgICAgICAgICAgICAgICAqKkNvbnRyb2xsZXJOYW1lDQo+ICsgICk7DQo+ICsN Cj4gK0dMT0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEIEVGSV9DT01QT05FTlRfTkFNRV9QUk9U T0NPTCAgZ1VzYlJuZGlzQ29tcG9uZW50TmFtZSA9IHsNCj4gKyAgVXNiUm5kaXNDb21wb25lbnRO YW1lR2V0RHJpdmVyTmFtZSwNCj4gKyAgVXNiUm5kaXNDb21wb25lbnROYW1lR2V0Q29udHJvbGxl ck5hbWUsDQo+ICsgICJlbmciDQo+ICt9Ow0KPiArDQo+ICtHTE9CQUxfUkVNT1ZFX0lGX1VOUkVG RVJFTkNFRCBFRklfQ09NUE9ORU5UX05BTUUyX1BST1RPQ09MICBnVXNiUm5kaXNDb21wb25lbnRO YW1lMiA9IHsNCj4gKyAgKEVGSV9DT01QT05FTlRfTkFNRTJfR0VUX0RSSVZFUl9OQU1FKVVzYlJu ZGlzQ29tcG9uZW50TmFtZUdldERyaXZlck5hbWUsDQo+ICsgIChFRklfQ09NUE9ORU5UX05BTUUy X0dFVF9DT05UUk9MTEVSX05BTUUpVXNiUm5kaXNDb21wb25lbnROYW1lR2V0Q29udHJvbGxlck5h bWUsDQo+ICsgICJlbiINCj4gK307DQo+ICsNCj4gKy8qKg0KPiArICBSZXRyaWV2ZXMgYSBVbmlj b2RlIHN0cmluZyB0aGF0IGlzIHRoZSB1c2VyIHJlYWRhYmxlIG5hbWUgb2YgdGhlIGRyaXZlci4N Cj4gKw0KPiArICBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgdXNlciByZWFkYWJsZSBuYW1l IG9mIGEgZHJpdmVyIGluIHRoZSBmb3JtIG9mIGENCj4gKyAgVW5pY29kZSBzdHJpbmcuIElmIHRo ZSBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgaGFzIGEgdXNlciByZWFkYWJsZSBuYW1lIGluDQo+ ICsgIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UsIHRoZW4gYSBwb2ludGVyIHRv IHRoZSBkcml2ZXIgbmFtZSBpcw0KPiArICByZXR1cm5lZCBpbiBEcml2ZXJOYW1lLCBhbmQgRUZJ X1NVQ0NFU1MgaXMgcmV0dXJuZWQuIElmIHRoZSBkcml2ZXIgc3BlY2lmaWVkDQo+ICsgIGJ5IFRo aXMgZG9lcyBub3Qgc3VwcG9ydCB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlLA0K PiArICB0aGVuIEVGSV9VTlNVUFBPUlRFRCBpcyByZXR1cm5lZC4NCj4gKw0KPiArICBAcGFyYW1b aW5dICBUaGlzICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9DT01QT05FTlRfTkFN RTJfUFJPVE9DT0wgb3INCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX0NP TVBPTkVOVF9OQU1FX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBMYW5ndWFn ZSAgICAgICAgICBBIHBvaW50ZXIgdG8gYSBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5IGluZGljYXRpbmcgdGhlIGxh bmd1YWdlLiBUaGlzIGlzIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs YW5ndWFnZSBvZiB0aGUgZHJpdmVyIG5hbWUgdGhhdCB0aGUgY2FsbGVyIGlzDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RpbmcsIGFuZCBpdCBtdXN0IG1hdGNoIG9u ZSBvZiB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VzIHNw ZWNpZmllZCBpbiBTdXBwb3J0ZWRMYW5ndWFnZXMuIFRoZQ0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBudW1iZXIgb2YgbGFuZ3VhZ2VzIHN1cHBvcnRlZCBieSBhIGRyaXZlciBp cyB1cA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgZHJpdmVyIHdy aXRlci4gTGFuZ3VhZ2UgaXMgc3BlY2lmaWVkDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGluIFJGQyA0NjQ2IG9yIElTTyA2MzktMiBsYW5ndWFnZSBjb2RlIGZvcm1hdC4NCj4g KyAgQHBhcmFtW291dF0gRHJpdmVyTmFtZSAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBVbmljb2Rl IHN0cmluZyB0byByZXR1cm4uDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRo aXMgVW5pY29kZSBzdHJpbmcgaXMgdGhlIG5hbWUgb2YgdGhlDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBpbiB0aGUgbGFuZ3VhZ2UN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGJ5IExhbmd1YWdl Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBVbmljb2RlIHN0 cmluZyBmb3IgdGhlIERyaXZlciBzcGVjaWZpZWQgYnkNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVGhpcyBhbmQgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSB3 YXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQgaW4gRHJpdmVy TmFtZS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgTGFuZ3VhZ2UgaXMgTlVM TC4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgRHJpdmVyTmFtZSBpcyBOVUxM Lg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBUaGUgZHJpdmVyIHNwZWNpZmll ZCBieSBUaGlzIGRvZXMgbm90IHN1cHBvcnQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZS4NCj4gKw0KPiArKiovDQo+ ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1VzYlJuZGlzQ29tcG9uZW50TmFtZUdldERyaXZl ck5hbWUgKA0KPiArICBJTiAgRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MICAqVGhpcywNCj4g KyAgSU4gIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAgKkxhbmd1YWdlLA0KPiArICBPVVQg Q0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAqKkRyaXZlck5hbWUNCj4gKyAgKQ0KPiArew0K PiArICByZXR1cm4gTG9va3VwVW5pY29kZVN0cmluZzIgKA0KPiArICAgICAgICAgICBMYW5ndWFn ZSwNCj4gKyAgICAgICAgICAgVGhpcy0+U3VwcG9ydGVkTGFuZ3VhZ2VzLA0KPiArICAgICAgICAg ICBnVXNiUm5kaXNEcml2ZXJOYW1lVGFibGUsDQo+ICsgICAgICAgICAgIERyaXZlck5hbWUsDQo+ ICsgICAgICAgICAgIChCT09MRUFOKShUaGlzID09ICZnVXNiUm5kaXNDb21wb25lbnROYW1lKQ0K PiArICAgICAgICAgICApOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVzIGEgVW5p Y29kZSBzdHJpbmcgdGhhdCBpcyB0aGUgdXNlciByZWFkYWJsZSBuYW1lIG9mIHRoZSBjb250cm9s bGVyDQo+ICsgIHRoYXQgaXMgYmVpbmcgbWFuYWdlZCBieSBhIGRyaXZlci4NCj4gKw0KPiArICBU aGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgdXNlciByZWFkYWJsZSBuYW1lIG9mIHRoZSBjb250 cm9sbGVyIHNwZWNpZmllZCBieQ0KPiArICBDb250cm9sbGVySGFuZGxlIGFuZCBDaGlsZEhhbmRs ZSBpbiB0aGUgZm9ybSBvZiBhIFVuaWNvZGUgc3RyaW5nLiBJZiB0aGUNCj4gKyAgZHJpdmVyIHNw ZWNpZmllZCBieSBUaGlzIGhhcyBhIHVzZXIgcmVhZGFibGUgbmFtZSBpbiB0aGUgbGFuZ3VhZ2Ug c3BlY2lmaWVkIGJ5DQo+ICsgIExhbmd1YWdlLCB0aGVuIGEgcG9pbnRlciB0byB0aGUgY29udHJv bGxlciBuYW1lIGlzIHJldHVybmVkIGluIENvbnRyb2xsZXJOYW1lLA0KPiArICBhbmQgRUZJX1NV Q0NFU1MgaXMgcmV0dXJuZWQuICBJZiB0aGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGlzIG5v dCBjdXJyZW50bHkNCj4gKyAgbWFuYWdpbmcgdGhlIGNvbnRyb2xsZXIgc3BlY2lmaWVkIGJ5IENv bnRyb2xsZXJIYW5kbGUgYW5kIENoaWxkSGFuZGxlLA0KPiArICB0aGVuIEVGSV9VTlNVUFBPUlRF RCBpcyByZXR1cm5lZC4gIElmIHRoZSBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgZG9lcyBub3QN Cj4gKyAgc3VwcG9ydCB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlLCB0aGVuIEVG SV9VTlNVUFBPUlRFRCBpcyByZXR1cm5lZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAg ICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9DT01QT05FTlRfTkFNRTJfUFJPVE9DT0wg b3INCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX0NPTVBPTkVOVF9OQU1F X1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBDb250cm9sbGVyICAgICAgICBU aGUgaGFuZGxlIG9mIGEgY29udHJvbGxlciB0aGF0IHRoZSBkcml2ZXINCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGJ5IFRoaXMgaXMgbWFuYWdpbmcuICBUaGlz IGhhbmRsZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgdGhl IGNvbnRyb2xsZXIgd2hvc2UgbmFtZSBpcyB0byBiZQ0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm5lZC4NCj4gKyAgQHBhcmFtW2luXSAgQ2hpbGRIYW5kbGUgICAgICAg VGhlIGhhbmRsZSBvZiB0aGUgY2hpbGQgY29udHJvbGxlciB0byByZXRyaWV2ZQ0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbmFtZSBvZi4gIFRoaXMgaXMgYW4gb3B0aW9u YWwgcGFyYW1ldGVyIHRoYXQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5 IGJlIE5VTEwuICBJdCB3aWxsIGJlIE5VTEwgZm9yIGRldmljZQ0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkcml2ZXJzLiAgSXQgd2lsbCBhbHNvIGJlIE5VTEwgZm9yIGEgYnVz IGRyaXZlcnMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB3aXNoIHRv IHJldHJpZXZlIHRoZSBuYW1lIG9mIHRoZSBidXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29udHJvbGxlci4gIEl0IHdpbGwgbm90IGJlIE5VTEwgZm9yIGEgYnVzDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlciB0aGF0IHdpc2hlcyB0byByZXRy aWV2ZSB0aGUgbmFtZSBvZiBhDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo aWxkIGNvbnRyb2xsZXIuDQo+ICsgIEBwYXJhbVtpbl0gIExhbmd1YWdlICAgICAgICAgIEEgcG9p bnRlciB0byBhIE51bGwtdGVybWluYXRlZCBBU0NJSSBzdHJpbmcNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYXJyYXkgaW5kaWNhdGluZyB0aGUgbGFuZ3VhZ2UuICBUaGlzIGlz IHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZSBvZiB0aGUg ZHJpdmVyIG5hbWUgdGhhdCB0aGUgY2FsbGVyIGlzDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJlcXVlc3RpbmcsIGFuZCBpdCBtdXN0IG1hdGNoIG9uZSBvZiB0aGUNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VzIHNwZWNpZmllZCBpbiBTdXBw b3J0ZWRMYW5ndWFnZXMuIFRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu dW1iZXIgb2YgbGFuZ3VhZ2VzIHN1cHBvcnRlZCBieSBhIGRyaXZlciBpcyB1cA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgZHJpdmVyIHdyaXRlci4gTGFuZ3VhZ2Ug aXMgc3BlY2lmaWVkIGluDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJGQyA0 NjQ2IG9yIElTTyA2MzktMiBsYW5ndWFnZSBjb2RlIGZvcm1hdC4NCj4gKyAgQHBhcmFtW291dF0g Q29udHJvbGxlck5hbWUgICAgQSBwb2ludGVyIHRvIHRoZSBVbmljb2RlIHN0cmluZyB0byByZXR1 cm4uDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgVW5pY29kZSBzdHJp bmcgaXMgdGhlIG5hbWUgb2YgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnRyb2xsZXIgc3BlY2lmaWVkIGJ5IENvbnRyb2xsZXJIYW5kbGUgYW5kDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIENoaWxkSGFuZGxlIGluIHRoZSBsYW5ndWFnZSBzcGVj aWZpZWQgYnkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFuZ3VhZ2UgZnJv bSB0aGUgcG9pbnQgb2YgdmlldyBvZiB0aGUgZHJpdmVyDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNwZWNpZmllZCBieSBUaGlzLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgIFRoZSBVbmljb2RlIHN0cmluZyBmb3IgdGhlIHVzZXIgcmVhZGFibGUg bmFtZSBpbg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGFuZ3VhZ2Ug c3BlY2lmaWVkIGJ5IExhbmd1YWdlIGZvciB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIHdhcyByZXR1cm5lZCBpbg0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcml2ZXJOYW1lLg0KPiArICBAcmV0dmFsIEVG SV9JTlZBTElEX1BBUkFNRVRFUiBDb250cm9sbGVySGFuZGxlIGlzIG5vdCBhIHZhbGlkIEVGSV9I QU5ETEUuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIENoaWxkSGFuZGxlIGlz IG5vdCBOVUxMIGFuZCBpdCBpcyBub3QgYSB2YWxpZA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBFRklfSEFORExFLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiBMYW5ndWFnZSBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBD b250cm9sbGVyTmFtZSBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAg ICBUaGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGlzIG5vdCBjdXJyZW50bHkNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFuYWdpbmcgdGhlIGNvbnRyb2xsZXIgc3BlY2lm aWVkIGJ5DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5k bGUgYW5kIENoaWxkSGFuZGxlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBU aGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGRvZXMgbm90IHN1cHBvcnQNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFn ZS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1VzYlJuZGlzQ29t cG9uZW50TmFtZUdldENvbnRyb2xsZXJOYW1lICgNCj4gKyAgSU4gRUZJX0NPTVBPTkVOVF9OQU1F X1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBD b250cm9sbGVyLA0KPiArICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENoaWxkSGFu ZGxlICAgICAgICBPUFRJT05BTCwNCj4gKyAgSU4gQ0hBUjggICAgICAgICAgICAgICAgICAgICAg ICAqTGFuZ3VhZ2UsDQo+ICsgIE9VVCBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgKipDb250 cm9sbGVyTmFtZQ0KPiArICApDQo+ICt7DQo+ICsgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ ICt9DQo+IGRpZmYgLS1naXQgYS9Vc2JOZXR3b3JrUGtnL1VzYlJuZGlzL1VzYlJuZGlzLmMgYi9V c2JOZXR3b3JrUGtnL1VzYlJuZGlzL1VzYlJuZGlzLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gaW5kZXggMDAwMDAwMDAwMC4uMGI1YzU1NTM2OA0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBi L1VzYk5ldHdvcmtQa2cvVXNiUm5kaXMvVXNiUm5kaXMuYw0KPiBAQCAtMCwwICsxLDg4NiBAQA0K PiArLyoqIEBmaWxlDQo+ICsgIFRoaXMgZmlsZSBjb250YWlucyBjb2RlIGZvciBVU0IgUmVtb3Rl IE5ldHdvcmsgRHJpdmVyDQo+ICsgIEludGVyZmFjZSBTcGVjLiBEcml2ZXIgQmluZGluZw0KPiAr DQo+ICsgIENvcHlyaWdodCAoYykgMjAyMiwgQW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlv bmFsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsqKi8NCj4gKw0KPiArI2luY2x1ZGUgIlVz YlJuZGlzLmgiDQo+ICsNCj4gK0VGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgZ1VzYlJuZGlz RHJpdmVyQmluZGluZyA9IHsNCj4gKyAgVXNiUm5kaXNEcml2ZXJTdXBwb3J0ZWQsDQo+ICsgIFVz YlJuZGlzRHJpdmVyU3RhcnQsDQo+ICsgIFVzYlJuZGlzRHJpdmVyU3RvcCwNCj4gKyAgVVNCX1JO RElTX0RSSVZFUl9WRVJTSU9OLA0KPiArICBOVUxMLA0KPiArICBOVUxMDQo+ICt9Ow0KPiArDQo+ ICsvKioNCj4gKyAgQ2hlY2sgaWYgdGhpcyBpbnRlcmZhY2UgaXMgVVNCIFJuZGlzIFN1YlR5cGUN Cj4gKw0KPiArICBAcGFyYW1baW5dICBVc2JJbyAgQSBwb2ludGVyIHRvIHRoZSBFRklfVVNCX0lP X1BST1RPQ09MIGluc3RhbmNlLg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgIFVTQiBSbmRpcyBT dWJUeXBlLg0KPiArICBAcmV0dmFsIEZBTFNFICBOb3QgVVNCIFJuZGlzIFN1YlR5cGUuDQo+ICsN Cj4gKyoqLw0KPiArQk9PTEVBTg0KPiArSXNTdXBwb3J0ZWREZXZpY2UgKA0KPiArICBJTiBFRklf VVNCX0lPX1BST1RPQ09MICAqVXNiSW8NCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAg ICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVGSV9VU0JfSU5URVJGQUNFX0RFU0NSSVBU T1IgIEludGVyZmFjZURlc2NyaXB0b3I7DQo+ICsNCj4gKyAgU3RhdHVzID0gVXNiSW8tPlVzYkdl dEludGVyZmFjZURlc2NyaXB0b3IgKFVzYklvLCAmSW50ZXJmYWNlRGVzY3JpcHRvcik7DQo+ICsg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gRkFMU0U7DQo+ICsgIH0N Cj4gKw0KPiArICAvLyBDaGVjayBzcGVjaWZpYyBkZXZpY2UvUk5ESVMgYW5kIENEQy1EQVRBDQo+ ICsgIGlmICgoKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlQ2xhc3MgPT0gMHgyKSAmJg0K PiArICAgICAgIChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZVN1YkNsYXNzID09IDB4Mikg JiYNCj4gKyAgICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VQcm90b2NvbCA9PSAw eEZGKSkgfHwgXA0KPiArICAgICAgKChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZUNsYXNz ID09IDB4RUYpICYmDQo+ICsgICAgICAgKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlU3Vi Q2xhc3MgPT0gMHg0KSAmJg0KPiArICAgICAgIChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFj ZVByb3RvY29sID09IDB4MSkpIHx8IFwNCj4gKyAgICAgICgoSW50ZXJmYWNlRGVzY3JpcHRvci5J bnRlcmZhY2VDbGFzcyA9PSAweEEpICYmDQo+ICsgICAgICAgKEludGVyZmFjZURlc2NyaXB0b3Iu SW50ZXJmYWNlU3ViQ2xhc3MgPT0gMHgwKSAmJg0KPiArICAgICAgIChJbnRlcmZhY2VEZXNjcmlw dG9yLkludGVyZmFjZVByb3RvY29sID09IDB4MDApKQ0KPiArICAgICAgKQ0KPiArICB7DQo+ICsg ICAgcmV0dXJuIFRSVUU7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gRkFMU0U7DQo+ICt9DQo+ ICsNCj4gKy8qKg0KPiArICBDaGVjayBpZiB0aGlzIGludGVyZmFjZSBpcyBVU0IgUm5kaXMgU3Vi VHlwZSBidXQgbm90IENEQyBEYXRhIGludGVyZmFjZQ0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFVz YklvICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9VU0JfSU9fUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsN Cj4gKyAgQHJldHZhbCBUUlVFICAgVVNCIFJuZGlzIFN1YlR5cGUuDQo+ICsgIEByZXR2YWwgRkFM U0UgIE5vdCBVU0IgUm5kaXMgU3ViVHlwZS4NCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArSXNSbmRp c0ludGVyZmFjZSAoDQo+ICsgIElOIEVGSV9VU0JfSU9fUFJPVE9DT0wgICpVc2JJbw0KPiArICAp DQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAg RUZJX1VTQl9JTlRFUkZBQ0VfREVTQ1JJUFRPUiAgSW50ZXJmYWNlRGVzY3JpcHRvcjsNCj4gKw0K PiArICBTdGF0dXMgPSBVc2JJby0+VXNiR2V0SW50ZXJmYWNlRGVzY3JpcHRvciAoVXNiSW8sICZJ bnRlcmZhY2VEZXNjcmlwdG9yKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAr ICAgIHJldHVybiBGQUxTRTsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vIENoZWNrIGZvciBzcGVjaWZp YyBkZXZpY2UvUk5ESVMgYW5kIENEQy1EQVRBDQo+ICsgIGlmICgoKEludGVyZmFjZURlc2NyaXB0 b3IuSW50ZXJmYWNlQ2xhc3MgPT0gMHgyKSAmJg0KPiArICAgICAgIChJbnRlcmZhY2VEZXNjcmlw dG9yLkludGVyZmFjZVN1YkNsYXNzID09IDB4MikgJiYNCj4gKyAgICAgICAoSW50ZXJmYWNlRGVz Y3JpcHRvci5JbnRlcmZhY2VQcm90b2NvbCA9PSAweEZGKSkgfHwgXA0KPiArICAgICAgKChJbnRl cmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZUNsYXNzID09IDB4RUYpICYmDQo+ICsgICAgICAgKElu dGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlU3ViQ2xhc3MgPT0gMHg0KSAmJg0KPiArICAgICAg IChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZVByb3RvY29sID09IDB4MSkpDQo+ICsgICAg ICApDQo+ICsgIHsNCj4gKyAgICByZXR1cm4gVFJVRTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVy biBGQUxTRTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENoZWNrIGlmIHRoZSBVU0IgUk5ESVMg YW5kIFVTQiBDREMgRGF0YSBpbnRlcmZhY2VzIGFyZSBmcm9tIHRoZSBzYW1lIGRldmljZS4NCj4g Kw0KPiArICBAcGFyYW1baW5dICBVc2JSbmRpc0RhdGFQYXRoICBBIHBvaW50ZXIgdG8gdGhlIEVG SV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgVXNiQ2Rj RGF0YVBhdGggICAgQSBwb2ludGVyIHRvIHRoZSBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgaW5z dGFuY2UuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgSXMgdGhlIHNh bWUgZGV2aWNlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBJcyBub3QgdGhl IHNhbWUgZGV2aWNlLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0lzU2FtZURldmlj ZSAoDQo+ICsgIElOICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICpVc2JSbmRpc0RhdGFQYXRo LA0KPiArICBJTiAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqVXNiQ2RjRGF0YVBhdGgNCj4g KyAgKQ0KPiArew0KPiArICBERUJVRyAoKERFQlVHX1ZFUkJPU0UsICJJc1NhbWVEZXZpY2UgRW50 cnkgXG4iKSk7DQo+ICsgIHdoaWxlICgxKSB7DQo+ICsgICAgaWYgKElzRGV2aWNlUGF0aEVuZCAo TmV4dERldmljZVBhdGhOb2RlIChVc2JSbmRpc0RhdGFQYXRoKSkpIHsNCj4gKyAgICAgIGlmICgo KFVTQl9ERVZJQ0VfUEFUSCAqKVVzYlJuZGlzRGF0YVBhdGgpLT5QYXJlbnRQb3J0TnVtYmVyID09 DQo+ICsgICAgICAgICAgKChVU0JfREVWSUNFX1BBVEggKilVc2JDZGNEYXRhUGF0aCktPlBhcmVu dFBvcnROdW1iZXIpDQo+ICsgICAgICB7DQo+ICsgICAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsN Cj4gKyAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ ICsgICAgICB9DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgIGlmIChDb21wYXJlTWVtIChVc2JD ZGNEYXRhUGF0aCwgVXNiUm5kaXNEYXRhUGF0aCwgc2l6ZW9mIChFRklfREVWSUNFX1BBVEhfUFJP VE9DT0wpKSAhPSAwKSB7DQo+ICsgICAgICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ICsg ICAgICB9DQo+ICsNCj4gKyAgICAgIFVzYlJuZGlzRGF0YVBhdGggPSBOZXh0RGV2aWNlUGF0aE5v ZGUgKFVzYlJuZGlzRGF0YVBhdGgpOw0KPiArICAgICAgVXNiQ2RjRGF0YVBhdGggICA9IE5leHRE ZXZpY2VQYXRoTm9kZSAoVXNiQ2RjRGF0YVBhdGgpOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ ICsgIERFQlVHICgoREVCVUdfVkVSQk9TRSwgIklzU2FtZURldmljZSBFeGl0IFxuIikpOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAgQ2hlY2sgaWYgdGhlIFVTQiBDREMgRGF0YShVc2JJbykgaW5z dGFsbGVkIGFuZCByZXR1cm4gVVNCIENEQyBEYXRhIEhhbmRsZS4NCj4gKw0KPiArICBAcGFyYW1b aW5dICBVc2JJbyAgQSBwb2ludGVyIHRvIHRoZSBFRklfVVNCX0lPX1BST1RPQ09MIGluc3RhbmNl Lg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICAgICAgVVNCIENEQyBEYXRhKFVzYklv KSBpbnN0YWxsZWQuDQo+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICAgICAgVVNCIENEQyBEYXRh KFVzYklvKSBkaWQgbm90IGluc3RhbGxlZC4NCj4gKw0KPiArKiovDQo+ICtCT09MRUFODQo+ICtJ c1VzYkNkY0RhdGEgKA0KPiArICBJTiBFRklfVVNCX0lPX1BST1RPQ09MICAqVXNiSW8NCj4gKyAg KQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsg IEVGSV9VU0JfSU5URVJGQUNFX0RFU0NSSVBUT1IgIEludGVyZmFjZURlc2NyaXB0b3I7DQo+ICsN Cj4gKyAgU3RhdHVzID0gVXNiSW8tPlVzYkdldEludGVyZmFjZURlc2NyaXB0b3IgKFVzYklvLCAm SW50ZXJmYWNlRGVzY3JpcHRvcik7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g KyAgICByZXR1cm4gRkFMU0U7DQo+ICsgIH0NCj4gKw0KPiArICAvLyBDaGVjayBmb3IgQ0RDLURB VEENCj4gKyAgaWYgKChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZUNsYXNzID09IDB4QSkg JiYNCj4gKyAgICAgIChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZVN1YkNsYXNzID09IDB4 MCkgJiYNCj4gKyAgICAgIChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZVByb3RvY29sID09 IDB4MCkpDQo+ICsgIHsNCj4gKyAgICByZXR1cm4gVFJVRTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJl dHVybiBGQUxTRTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENoZWNrIGlmIHRoZSBVU0IgUm5k aXMoVXNiSW8pIGluc3RhbGxlZA0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFVzYklvICAgICAgICBB IHBvaW50ZXIgdG8gdGhlIEVGSV9VU0JfSU9fUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsNCj4gKyAg QHJldHZhbCBUUlVFICAgICAgICAgICAgICBVU0IgUm5kaXMoVXNiSW8pIGluc3RhbGxlZC4NCj4g KyAgQHJldHZhbCBGQUxTRSAgICAgICAgICAgICBVU0IgUm5kaXMoVXNiSW8pIGRpZCBub3QgaW5z dGFsbGVkLg0KPiArDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0lzVXNiUm5kaXMgKA0KPiArICBJ TiBFRklfVVNCX0lPX1BST1RPQ09MICAqVXNiSW8NCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RB VFVTICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVGSV9VU0JfSU5URVJGQUNFX0RF U0NSSVBUT1IgIEludGVyZmFjZURlc2NyaXB0b3I7DQo+ICsNCj4gKyAgU3RhdHVzID0gVXNiSW8t PlVzYkdldEludGVyZmFjZURlc2NyaXB0b3IgKFVzYklvLCAmSW50ZXJmYWNlRGVzY3JpcHRvcik7 DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gRkFMU0U7DQo+ ICsgIH0NCj4gKw0KPiArICAvLyBDaGVjayBmb3IgUm5kaXMNCj4gKyAgaWYgKChJbnRlcmZhY2VE ZXNjcmlwdG9yLkludGVyZmFjZUNsYXNzID09IDB4MikgJiYNCj4gKyAgICAgIChJbnRlcmZhY2VE ZXNjcmlwdG9yLkludGVyZmFjZVN1YkNsYXNzID09IDB4MikgJiYNCj4gKyAgICAgIChJbnRlcmZh Y2VEZXNjcmlwdG9yLkludGVyZmFjZVByb3RvY29sID09IDB4RkYpKQ0KPiArICB7DQo+ICsgICAg cmV0dXJuIFRSVUU7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gRkFMU0U7DQo+ICt9DQo+ICsN Cj4gKy8qKg0KPiArICBDb250cm9sIGNvbWVzIGhlcmUgd2hlbiBhIENEQyBkZXZpY2UgaXMgZm91 bmQuQ2hlY2sgaWYgYSBSTkRJUyBpbnRlcmZhY2UgaXMgYWxyZWFkeSBmb3VuZCBmb3IgdGhpcyBk ZXZpY2Ugb3Igbm90Lg0KPiArICBGb3Igb25lIGRldmljZSB0d28gVVNCSU8gd2lsbCBiZSBpbnN0 YWxsZWQgZWFjaCBmb3IgQ0RDIGFuZCBSTkRJUyBpbnRlcmZhY2UuDQo+ICsNCj4gKyAgQHBhcmFt W2luXSAgVXNiRXRoUGF0aCAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklfREVWSUNFX1BBVEhf UFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtvdXRdIFVzYlJuZGlzRGV2aWNlICAgIEEg cG9pbnRlciB0byB0aGUgVVNCX1JORElTX0RFVklDRSBEYXRhLg0KPiArDQo+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgICAgVGhlIFVTQl9STkRJU19ERVZJQ0UgbWF0Y2hpbmcgdGhp cyBDREMgRGF0YSBpcyBmb3VuZC4NCj4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAg ICBUaGUgVVNCX1JORElTX0RFVklDRSBtYXRjaGluZyB0aGlzIENEQyBEYXRhIGlzIG5vdCBmb3Vu ZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtVcGRhdGVSbmRpc0RldmljZSAoDQo+ ICsgIElOICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICpVc2JDZGNEYXRhUGF0aCwNCj4gKyAg T1VUIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICAgKipVc2JSbmRpc0RldmljZQ0KPiArICApDQo+ ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiArICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgICAgIEhhbmRsZUNvdW50Ow0KPiArICBFRklfSEFORExFICAgICAgICAgICAgICAgICAg ICpIYW5kbGVCdWZmZXI7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlVzYkV0 aERldmljZTsNCj4gKyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAqVXNiUm5kaXNEYXRh UGF0aDsNCj4gKyAgRUZJX1VTQl9JT19QUk9UT0NPTCAgICAgICAgICAqVXNiSW87DQo+ICsgIEJP T0xFQU4gICAgICAgICAgICAgICAgICAgICAgSXNSbmRpc0ludGVyZmFjZUZsYWc7DQo+ICsNCj4g KyAgSXNSbmRpc0ludGVyZmFjZUZsYWcgPSBGQUxTRTsNCj4gKw0KPiArICBTdGF0dXMgPSBnQlMt PkxvY2F0ZUhhbmRsZUJ1ZmZlciAoDQo+ICsgICAgICAgICAgICAgICAgICBCeVByb3RvY29sLA0K PiArICAgICAgICAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAg ICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAgICAgICAgICAgICAgICAmSGFuZGxlQ291bnQsDQo+ ICsgICAgICAgICAgICAgICAgICAmSGFuZGxlQnVmZmVyDQo+ICsgICAgICAgICAgICAgICAgICAp Ow0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsN Cj4gKyAgfQ0KPiArDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IEhhbmRsZUNvdW50OyBJ bmRleCsrKSB7DQo+ICsgICAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ICsgICAg ICAgICAgICAgICAgICAgIEhhbmRsZUJ1ZmZlcltJbmRleF0sDQo+ICsgICAgICAgICAgICAgICAg ICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAgIChW T0lEICoqKSZVc2JFdGhEZXZpY2UNCj4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBjb250aW51ZTsNCj4gKyAgICB9DQo+ ICsNCj4gKyAgICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCj4gKyAgICAgICAgICAg ICAgICAgICAgSGFuZGxlQnVmZmVyW0luZGV4XSwNCj4gKyAgICAgICAgICAgICAgICAgICAgJmdF ZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVz YklvDQo+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiArICAgICAgY29udGludWU7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgSXNSbmRp c0ludGVyZmFjZUZsYWcgPSBJc1JuZGlzSW50ZXJmYWNlIChVc2JJbyk7DQo+ICsgICAgaWYgKElz Um5kaXNJbnRlcmZhY2VGbGFnID09IEZBTFNFKSB7DQo+ICsgICAgICBjb250aW51ZTsNCj4gKyAg ICB9DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCj4gKyAgICAg ICAgICAgICAgICAgICAgSGFuZGxlQnVmZmVyW0luZGV4XSwNCj4gKyAgICAgICAgICAgICAgICAg ICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgICAo Vk9JRCAqKikmVXNiUm5kaXNEYXRhUGF0aA0KPiArICAgICAgICAgICAgICAgICAgICApOw0KPiAr ICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIGNvbnRpbnVlOw0KPiArICAg IH0NCj4gKw0KPiArICAgIFN0YXR1cyA9IElzU2FtZURldmljZSAoVXNiUm5kaXNEYXRhUGF0aCwg VXNiQ2RjRGF0YVBhdGgpOw0KPiArDQo+ICsgICAgREVCVUcgKChERUJVR19WRVJCT1NFLCAiUm5k aXMgSXNTYW1lRGV2aWNlICVyXG4iLCBTdGF0dXMpKTsNCj4gKw0KPiArICAgIGlmICghRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICAqVXNiUm5kaXNEZXZpY2UgPSBVU0JfUk5ESVNfREVW SUNFX0ZST01fVEhJUyAoVXNiRXRoRGV2aWNlKTsNCj4gKyAgICAgIEZyZWVQb29sIChIYW5kbGVC dWZmZXIpOw0KPiArICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArICAgIH0NCj4gKyAgfSAg IC8vIEVuZCBvZiBGb3IgbG9vcA0KPiArDQo+ICsgIEZyZWVQb29sIChIYW5kbGVCdWZmZXIpOw0K PiArICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsNCj4gKyAg Rm9yIHRoZSBnaXZlbiBSbmRpcyBEZXZpY2UsIGZpbmQgYSBtYXRjaGluZyBDREMgZGV2aWNlIGFs cmVhZHkgZXhpc3RzIG9yIG5vdC4gSWYgZm91bmQgdXBkYXRlIHRoZSBoYW5kbGUNCj4gKyAgYW5k IFVzYklPIHByb3RvY29sLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFVzYlJuZGlzRGV2aWNlICAg ICAgICBBIHBvaW50ZXIgdG8gdGhlIFVTQl9STkRJU19ERVZJQ0UgZGF0YS4NCj4gKw0KPiArKiov DQo+ICtWT0lEDQo+ICtGaW5kTWF0Y2hpbmdDZGNEYXRhICgNCj4gKyAgSU4gVVNCX1JORElTX0RF VklDRSAgKlVzYlJuZGlzRGV2aWNlDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAg ICAgICAgICAgICBTdGF0dXM7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgSW5kZXg7 DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgSGFuZGxlQ291bnQ7DQo+ICsgIEVGSV9I QU5ETEUgICAgICAgICAgICAgICAgKkhhbmRsZUJ1ZmZlcjsNCj4gKyAgRUZJX1VTQl9JT19QUk9U T0NPTCAgICAgICAqVXNiSW87DQo+ICsgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgKlVzYlJu ZGlzRGF0YVBhdGg7DQo+ICsgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgKlVzYkNkY0RhdGFQ YXRoOw0KPiArDQo+ICsgIC8vIEZpbmQgdGhlIHBhcmVudCBSTkRJUyBhbmQgdXBkYXRlIHRoZSBV c2JJbyBmb3IgdGhlIENEQyBkZXZpY2UNCj4gKyAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2Nv bCAoDQo+ICsgICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+VXNiUm5kaXNIYW5kbGUs DQo+ICsgICAgICAgICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsg ICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiUm5kaXNEYXRhUGF0aA0KPiArICAgICAgICAg ICAgICAgICAgKTsNCj4gKw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAg cmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVIYW5kbGVCdWZm ZXIgKA0KPiArICAgICAgICAgICAgICAgICAgQnlQcm90b2NvbCwNCj4gKyAgICAgICAgICAgICAg ICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICBOVUxMLA0K PiArICAgICAgICAgICAgICAgICAgJkhhbmRsZUNvdW50LA0KPiArICAgICAgICAgICAgICAgICAg JkhhbmRsZUJ1ZmZlcg0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIGZvciAoSW5k ZXggPSAwOyBJbmRleCA8IEhhbmRsZUNvdW50OyBJbmRleCsrKSB7DQo+ICsgICAgU3RhdHVzID0g Z0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICAgIEhhbmRsZUJ1ZmZl cltJbmRleF0sDQo+ICsgICAgICAgICAgICAgICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQs DQo+ICsgICAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZVc2JJbw0KPiArICAgICAgICAgICAg ICAgICAgICApOw0KPiArICAgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ICsNCj4gKyAg ICBpZiAoSXNVc2JDZGNEYXRhIChVc2JJbykpIHsNCj4gKyAgICAgIERFQlVHICgoREVCVUdfVkVS Qk9TRSwgIlJuZGlzIEZpbmRNYXRjaGluZ0NkY0RhdGEgQ0RDRGF0YSBpbnRlcmZhY2UgZm91bmRc biIpKTsNCj4gKw0KPiArICAgICAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgSGFuZGxlQnVmZmVyW0luZGV4XSwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgKFZPSUQgKiopJlVzYkNkY0RhdGFQYXRoDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgKTsNCj4gKyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICAgREVC VUcgKChERUJVR19WRVJCT1NFLCAiUm5kaXMgQ0RDRGF0YSBEZXZpY2VQYXRoIG5vdCBmb3VuZFxu IikpOw0KPiArICAgICAgICBGcmVlUG9vbCAoSGFuZGxlQnVmZmVyKTsNCj4gKyAgICAgICAgcmV0 dXJuOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICBTdGF0dXMgPSBJc1NhbWVEZXZpY2UgKFVz YlJuZGlzRGF0YVBhdGgsIFVzYkNkY0RhdGFQYXRoKTsNCj4gKyAgICAgIERFQlVHICgoREVCVUdf VkVSQk9TRSwgIlJuZGlzIElzU2FtZURldmljZSAlclxuIiwgU3RhdHVzKSk7DQo+ICsgICAgICBp ZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgICBVc2JSbmRpc0RldmljZS0+VXNi Q2RjRGF0YUhhbmRsZSA9IEhhbmRsZUJ1ZmZlcltJbmRleF07DQo+ICsgICAgICAgIFVzYlJuZGlz RGV2aWNlLT5Vc2JJb0NkY0RhdGEgICAgID0gVXNiSW87DQo+ICsgICAgICAgIEdldEVuZHBvaW50 IChVc2JSbmRpc0RldmljZS0+VXNiSW9DZGNEYXRhLCBVc2JSbmRpc0RldmljZSk7DQo+ICsgICAg ICAgIEZyZWVQb29sIChIYW5kbGVCdWZmZXIpOw0KPiArICAgICAgICByZXR1cm47DQo+ICsgICAg ICB9DQo+ICsgICAgfQ0KPiArICB9ICAgLy8gRW5kIG9mIEZvciBsb29wDQo+ICsNCj4gKyAgRnJl ZVBvb2wgKEhhbmRsZUJ1ZmZlcik7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArDQo+ICsgIEZvciB0 aGUgZ2l2ZW4gVXNiSW8gQ2RjRGF0YSwgZmluZCBhIG1hdGNoaW5nIFJORElTIGRldmljZSBhbHJl YWR5IGV4aXN0cyBvciBub3QuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RjSGFuZGxlICAgICAg IEEgcG9pbnRlciB0byB0aGUgRUZJX0hBTkRMRSBmb3IgVVNCIENEQyBEYXRhLg0KPiArICBAcGFy YW1bb3V0XSBDZGNVc2JJbyAgICAgICAgQSBwb2ludGVyIGZvciByZXRyaWV2ZSB0aGUgRUZJX1VT Ql9JT19QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW291dF0gUm5kaXNIYW5kbGUgICAg IEEgcG9pbnRlciBmb3IgcmV0cmlldmUgdGhlIGhhbmRsZSBvZiBSTkRJUyBkZXZpY2UuDQo+ICsN Cj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBUaGUgVVNCX1JORElTX0RFVklD RSBtYXRjaGluZyB0aGlzIENEQyBEYXRhIGlzIGZvdW5kLg0KPiArICBAcmV0dmFsIEVGSV9OT1Rf Rk9VTkQgICAgICAgICAgIFRoZSBVU0JfUk5ESVNfREVWSUNFIG1hdGNoaW5nIHRoaXMgQ0RDIERh dGEgaXMgbm90IGZvdW5kLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0K PiArRmluZE1hdGNoaW5nUm5kaXNEZXYgKA0KPiArICBJTiAgRUZJX0hBTkRMRSAgICAgICAgICAg Q2RjSGFuZGxlLA0KPiArICBPVVQgRUZJX1VTQl9JT19QUk9UT0NPTCAgKipDZGNVc2JJbywNCj4g KyAgT1VUIEVGSV9IQU5ETEUgICAgICAgICAgICpSbmRpc0hhbmRsZQ0KPiArICApDQo+ICt7DQo+ ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgIEluZGV4Ow0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEhhbmRs ZUNvdW50Ow0KPiArICBFRklfSEFORExFICAgICAgICAgICAgICAgICpIYW5kbGVCdWZmZXI7DQo+ ICsgIEVGSV9VU0JfSU9fUFJPVE9DT0wgICAgICAgKlVzYklvOw0KPiArICBFRklfREVWSUNFX1BB VEhfUFJPVE9DT0wgICpVc2JSbmRpc0RhdGFQYXRoOw0KPiArICBFRklfREVWSUNFX1BBVEhfUFJP VE9DT0wgICpVc2JDZGNEYXRhUGF0aDsNCj4gKw0KPiArICAvLyBGaW5kIHRoZSBwYXJlbnQgUk5E SVMgYW5kIHVwZGF0ZSB0aGUgVXNiSW8gZm9yIHRoZSBDREMgZGV2aWNlDQo+ICsgIFN0YXR1cyA9 IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgQ2RjSGFuZGxlLA0K PiArICAgICAgICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAg ICAgICAgICAgICAgICAgKFZPSUQgKiopJlVzYkNkY0RhdGFQYXRoDQo+ICsgICAgICAgICAgICAg ICAgICApOw0KPiArDQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1 cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVIYW5kbGVC dWZmZXIgKA0KPiArICAgICAgICAgICAgICAgICAgQnlQcm90b2NvbCwNCj4gKyAgICAgICAgICAg ICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICBOVUxM LA0KPiArICAgICAgICAgICAgICAgICAgJkhhbmRsZUNvdW50LA0KPiArICAgICAgICAgICAgICAg ICAgJkhhbmRsZUJ1ZmZlcg0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiAr ICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBIYW5kbGVDb3VudDsgSW5kZXgrKykgew0KPiArICAg IFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgICBI YW5kbGVCdWZmZXJbSW5kZXhdLA0KPiArICAgICAgICAgICAgICAgICAgICAmZ0VmaVVzYklvUHJv dG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiSW8NCj4gKyAg ICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0NCj4gKw0KPiArICAgIGlmIChJc1VzYlJu ZGlzIChVc2JJbykpIHsNCj4gKyAgICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0K PiArICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZUJ1ZmZlcltJbmRleF0sDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAg ICAgICAgICAgICAgIChWT0lEICoqKSZVc2JSbmRpc0RhdGFQYXRoDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgKTsNCj4gKyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAg ICAgREVCVUcgKChERUJVR19FUlJPUiwgIlVzYiBSbmRpcyBEZXZpY2VQYXRoIG5vdCBmb3VuZFxu IikpOw0KPiArICAgICAgICBicmVhazsNCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgU3RhdHVz ID0gSXNTYW1lRGV2aWNlIChVc2JSbmRpc0RhdGFQYXRoLCBVc2JDZGNEYXRhUGF0aCk7DQo+ICsN Cj4gKyAgICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICAgICpSbmRpc0hh bmRsZSA9IEhhbmRsZUJ1ZmZlcltJbmRleF07DQo+ICsgICAgICAgICpDZGNVc2JJbyAgICA9IFVz YklvOw0KPiArICAgICAgICBGcmVlUG9vbCAoSGFuZGxlQnVmZmVyKTsNCj4gKyAgICAgICAgcmV0 dXJuIFN0YXR1czsNCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsgIH0gICAvLyBFbmQgb2YgRm9y IGxvb3ANCj4gKw0KPiArICBGcmVlUG9vbCAoSGFuZGxlQnVmZmVyKTsNCj4gKw0KPiArICByZXR1 cm4gRUZJX05PVF9GT1VORDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFVTQiBSbmRpcyBEcml2 ZXIgQmluZGluZyBTdXBwb3J0Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAg ICAgICAgICAgIFByb3RvY29sIGluc3RhbmNlIHBvaW50ZXIuDQo+ICsgIEBwYXJhbVtpbl0gIENv bnRyb2xsZXJIYW5kbGUgICAgICAgIEhhbmRsZSBvZiBkZXZpY2UgdG8gdGVzdC4NCj4gKyAgQHBh cmFtW2luXSAgUmVtYWluaW5nRGV2aWNlUGF0aCAgICAgT3B0aW9uYWwgcGFyYW1ldGVyIHVzZSB0 byBwaWNrIGEgc3BlY2lmaWMgY2hpbGQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGV2aWNlIHRvIHN0YXJ0Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgICAgICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoaXMgZGV2aWNlLg0KPiArICBA cmV0dmFsIEVGSV9BTFJFQURZX1NUQVJURUQgICAgICAgICBUaGlzIGRyaXZlciBpcyBhbHJlYWR5 IHJ1bm5pbmcgb24gdGhpcyBkZXZpY2UuDQo+ICsgIEByZXR2YWwgb3RoZXIgICAgICAgICAgICAg ICAgICAgICAgIFRoaXMgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBkZXZpY2UuDQo+ICsN Cj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVc2JSbmRpc0RyaXZlclN1cHBv cnRlZCAoDQo+ICsgIElOIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ICsg IElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAg SU4gRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAqUmVtYWluaW5nRGV2aWNlUGF0aA0KPiAr ICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX1VT Ql9JT19QUk9UT0NPTCAgKlVzYklvOw0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+T3BlblByb3Rv Y29sICgNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAg ICAgICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAg KFZPSUQgKiopJlVzYklvLA0KPiArICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGlu Z0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAg ICAgICAgICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9CWV9EUklWRVINCj4gKyAgICAgICAgICAg ICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4g U3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gSXNTdXBwb3J0ZWREZXZpY2UgKFVz YklvKSA/IEVGSV9TVUNDRVNTIDogRUZJX1VOU1VQUE9SVEVEOw0KPiArDQo+ICsgIGdCUy0+Q2xv c2VQcm90b2NvbCAoDQo+ICsgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAg JmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdI YW5kbGUsDQo+ICsgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICApOw0KPiAr ICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVVNCIFJORElTIERyaXZl ciBCaW5kaW5nIFN0YXJ0Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAg ICAgICAgIFByb3RvY29sIGluc3RhbmNlIHBvaW50ZXIuDQo+ICsgIEBwYXJhbVtpbl0gIENvbnRy b2xsZXJIYW5kbGUgICAgICAgIEhhbmRsZSBvZiBkZXZpY2UgdG8gYmluZCBkcml2ZXIgdG8uDQo+ ICsgIEBwYXJhbVtpbl0gIFJlbWFpbmluZ0RldmljZVBhdGggICAgIE9wdGlvbmFsIHBhcmFtZXRl ciB1c2UgdG8gcGljayBhIHNwZWNpZmljIGNoaWxkDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRldmljZSB0byBzdGFydC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgICAgICAgICAgICBUaGlzIGRyaXZlciBpcyBhZGRlZCB0byBDb250cm9sbGVy SGFuZGxlDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgICAgICAgIFRoaXMgZHJp dmVyIGNvdWxkIG5vdCBiZSBzdGFydGVkIGR1ZSB0byBhIGRldmljZSBlcnJvcg0KPiArICBAcmV0 dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgICAgICBUaGUgZHJpdmVyIGNvdWxkIG5vdCBpbnN0 YWxsIHN1Y2Nlc3NmdWxseSBkdWUgdG8gYSBsYWNrIG9mIHJlc291cmNlcy4NCj4gKyAgQHJldHZh bCBvdGhlciAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBkcml2ZXIgZG9lcyBub3Qgc3VwcG9y dCB0aGlzIGRldmljZQ0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiAr VXNiUm5kaXNEcml2ZXJTdGFydCAoDQo+ICsgIElOIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NP TCAgKlRoaXMsDQo+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxl ckhhbmRsZSwNCj4gKyAgSU4gRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAqUmVtYWluaW5n RGV2aWNlUGF0aA0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAg ICAgIFN0YXR1czsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgICAgICAgKlVzYlJuZGlz RGV2aWNlOw0KPiArICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICAqVXNiRXRoUGF0aDsN Cj4gKyAgRUZJX1VTQl9JT19QUk9UT0NPTCAgICAgICAgICAgKlVzYklvOw0KPiArICBFRklfVVNC X0lOVEVSRkFDRV9ERVNDUklQVE9SICBJbnRlcmZhY2U7DQo+ICsgIEVGSV9IQU5ETEUgICAgICAg ICAgICAgICAgICAgIFJuZGlzSGFuZGxlOw0KPiArDQo+ICsgIFJuZGlzSGFuZGxlID0gQ29udHJv bGxlckhhbmRsZTsNCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQo+ICsg ICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAg JmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZV c2JJbywNCj4gKyAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAg ICAgRUZJX09QRU5fUFJPVE9DT0xfQllfRFJJVkVSDQo+ICsgICAgICAgICAgICAgICAgICApOw0K PiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4g KyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICgNCj4gKyAgICAgICAg ICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0VmaURl dmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNi RXRoUGF0aCwNCj4gKyAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUs DQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAg ICAgICAgRUZJX09QRU5fUFJPVE9DT0xfQllfRFJJVkVSDQo+ICsgICAgICAgICAgICAgICAgICAp Ow0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgZ0JTLT5DbG9zZVByb3Rv Y29sICgNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgJmdF ZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hh bmRsZSwNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICApOw0K PiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBnQlMtPkNsb3NlUHJvdG9j b2wgKA0KPiArICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICZnRWZpRGV2 aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5k bGUsDQo+ICsgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICApOw0KPiArDQo+ ICsgIC8vIENvbnRyb2xzIGNvbWUgaGVyZSBmb3IgUk5ESVMgYW5kIENEQy4gSWYgaXQgaXMgQ0RD LCBjaGVjayB3aGV0aGVyIFJORElTIGlzIHByZXNlbnQgb24gdGhlIHNhbWUgY29udHJvbGxlciBv ciBub3QuDQo+ICsgIGlmIChJc1VzYkNkY0RhdGEgKFVzYklvKSkgew0KPiArICAgIERFQlVHICgo REVCVUdfSU5GTywgIlJuZGlzIENEQ0RhdGEgaW50ZXJmYWNlIGZvdW5kXG4iKSk7DQo+ICsNCj4g KyAgICAvLyBGaW5kIHRoZSBwYXJlbnQgUk5ESVMgYW5kIHVwZGF0ZSB0aGUgVXNiSW8gZm9yIHRo ZSBDREMgZGV2aWNlDQo+ICsgICAgU3RhdHVzID0gVXBkYXRlUm5kaXNEZXZpY2UgKA0KPiArICAg ICAgICAgICAgICAgVXNiRXRoUGF0aCwNCj4gKyAgICAgICAgICAgICAgICZVc2JSbmRpc0Rldmlj ZQ0KPiArICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICAgIGlmICghRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJSbmRpcyBNYXRjaGluZyBpbnRl cmZhY2UgZm91bmRcbiIpKTsNCj4gKyAgICAgIFVzYlJuZGlzRGV2aWNlLT5Vc2JDZGNEYXRhSGFu ZGxlID0gQ29udHJvbGxlckhhbmRsZTsNCj4gKyAgICAgIFVzYlJuZGlzRGV2aWNlLT5Vc2JJb0Nk Y0RhdGEgICAgID0gVXNiSW87DQo+ICsgICAgICBHZXRFbmRwb2ludCAoVXNiUm5kaXNEZXZpY2Ut PlVzYklvQ2RjRGF0YSwgVXNiUm5kaXNEZXZpY2UpOw0KPiArICAgICAgcmV0dXJuIFN0YXR1czsN Cj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgLy8gQ2hlY2sgaWYgUm5EaXMgZXhpc3QNCj4gKyAg ICAgIFN0YXR1cyA9IEZpbmRNYXRjaGluZ1JuZGlzRGV2ICgNCj4gKyAgICAgICAgICAgICAgICAg Q29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgJlVzYklvLA0KPiArICAgICAg ICAgICAgICAgICAmUm5kaXNIYW5kbGUNCj4gKyAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiAr ICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgICBnQlMtPkNsb3NlUHJv dG9jb2wgKA0KPiArICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAg ICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICBUaGlzLT5E cml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0K PiArICAgICAgICAgICAgICAgKTsNCj4gKyAgICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICAg IH0NCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBVc2JSbmRpc0RldmljZSA9IEFsbG9jYXRl WmVyb1Bvb2wgKHNpemVvZiAoVVNCX1JORElTX0RFVklDRSkpOw0KPiArDQo+ICsgIGlmICghVXNi Um5kaXNEZXZpY2UpIHsNCj4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiQWxsb2NhdGVaZXJv UG9vbCBGYWlsXG4iKSk7DQo+ICsNCj4gKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAg ICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAmZ0VmaVVzYklvUHJvdG9j b2xHdWlkLA0KPiArICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAg ICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICk7DQo+ICsgICAgcmV0dXJu IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gTG9hZEFs bERlc2NyaXB0b3IgKA0KPiArICAgICAgICAgICAgIFVzYklvLA0KPiArICAgICAgICAgICAgICZV c2JSbmRpc0RldmljZS0+Q29uZmlnDQo+ICsgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTpMb2FkQWxs RGVzY3JpcHRvciBzdGF0dXMgPSAlclxuIiwgX19GVU5DVElPTl9fLCBTdGF0dXMpKTsNCj4gKyAg ICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0K PiArICAgICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICBUaGlz LT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ ICsgICAgICAgICAgICk7DQo+ICsgICAgRnJlZVBvb2wgKFVzYlJuZGlzRGV2aWNlKTsNCj4gKyAg ICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gVXNiSW8tPlVzYkdl dEludGVyZmFjZURlc2NyaXB0b3IgKA0KPiArICAgICAgICAgICAgICAgICAgICBVc2JJbywNCj4g KyAgICAgICAgICAgICAgICAgICAgJkludGVyZmFjZQ0KPiArICAgICAgICAgICAgICAgICAgICAp Ow0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgREVCVUcgKChERUJVR19F UlJPUiwgIiVhOlVzYkdldEludGVyZmFjZURlc2NyaXB0b3Igc3RhdHVzID0gJXJcbiIsIF9fRlVO Q1RJT05fXywgU3RhdHVzKSk7DQo+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAg ICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29s R3VpZCwNCj4gKyAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAg ICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICApOw0KPiArICAgIEZyZWVQb29s IChVc2JSbmRpc0RldmljZS0+Q29uZmlnKTsNCj4gKyAgICBGcmVlUG9vbCAoVXNiUm5kaXNEZXZp Y2UpOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBVc2JSbmRpc0Rl dmljZS0+U2lnbmF0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICA9IFVTQl9STkRJU19TSUdO QVRVUkU7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5OdW1PZkludGVyZmFjZSAgICAgICAgICAgICAg ICAgICAgID0gSW50ZXJmYWNlLkludGVyZmFjZU51bWJlcjsNCj4gKyAgVXNiUm5kaXNEZXZpY2Ut PlVzYlJuZGlzSGFuZGxlICAgICAgICAgICAgICAgICAgICAgPSBSbmRpc0hhbmRsZTsNCj4gKyAg VXNiUm5kaXNEZXZpY2UtPlVzYkNkY0RhdGFIYW5kbGUgICAgICAgICAgICAgICAgICAgPSAwOw0K PiArICBVc2JSbmRpc0RldmljZS0+VXNiSW8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9 IFVzYklvOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFJlY2VpdmUgICAgICAg ICAgICAgICA9IFJuZGlzVW5kaVJlY2VpdmU7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGgu VXNiRXRoVHJhbnNtaXQgICAgICAgICAgICAgID0gUm5kaXNVbmRpVHJhbnNtaXQ7DQo+ICsgIFVz YlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoSW50ZXJydXB0ICAgICAgICAgICAgID0gVXNiUm5k aXNJbnRlcnJ1cHQ7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoTWFjQWRkcmVz cyAgICAgICAgICAgID0gR2V0VXNiRXRoTWFjQWRkcmVzczsNCj4gKyAgVXNiUm5kaXNEZXZpY2Ut PlVzYkV0aC5Vc2JFdGhNYXhCdWxrU2l6ZSAgICAgICAgICAgPSBVc2JFdGhCdWxrU2l6ZTsNCj4g KyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JIZWFkZXJGdW5EZXNjcmlwdG9yICAgICAgPSBH ZXRVc2JIZWFkZXJGdW5EZXNjcmlwdG9yOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVz YlVuaW9uRnVuRGVzY3JpcHRvciAgICAgICA9IEdldFVzYlVuaW9uRnVuRGVzY3JpcHRvcjsNCj4g KyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhGdW5EZXNjcmlwdG9yICAgICAgICAgPSBH ZXRVc2JSbmRpc0Z1bkRlc2NyaXB0b3I7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguU2V0 VXNiRXRoTWNhc3RGaWx0ZXIgICAgICAgID0gU2V0VXNiUm5kaXNNY2FzdEZpbHRlcjsNCj4gKyAg VXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5TZXRVc2JFdGhQb3dlclBhdHRlcm5GaWx0ZXIgPSBTZXRV c2JSbmRpc1Bvd2VyRmlsdGVyOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLkdldFVzYkV0 aFBvd2VyUGF0dGVybkZpbHRlciA9IEdldFVzYlJuZGlzUG93ZXJGaWx0ZXI7DQo+ICsgIFVzYlJu ZGlzRGV2aWNlLT5Vc2JFdGguU2V0VXNiRXRoUGFja2V0RmlsdGVyICAgICAgID0gU2V0VXNiUm5k aXNQYWNrZXRGaWx0ZXI7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguR2V0VXNiRXRoU3Rh dGlzdGljICAgICAgICAgID0gR2V0Um5kaXNTdGF0aXN0aWM7DQo+ICsNCj4gKyAgVXNiUm5kaXNE ZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlHZXRTdGF0ZSAgICAgICAgPSBSbmRp c0R1bW15UmV0dXJuOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNi RXRoVW5kaVN0YXJ0ICAgICAgICAgICA9IFJuZGlzVW5kaVN0YXJ0Ow0KPiArICBVc2JSbmRpc0Rl dmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaVN0b3AgICAgICAgICAgICA9IFJuZGlz VW5kaVN0b3A7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhV bmRpR2V0SW5pdEluZm8gICAgID0gUm5kaXNVbmRpR2V0SW5pdEluZm87DQo+ICsgIFVzYlJuZGlz RGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpR2V0Q29uZmlnSW5mbyAgID0gUm5k aXNVbmRpR2V0Q29uZmlnSW5mbzsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhV bmRpLlVzYkV0aFVuZGlJbml0aWFsaXplICAgICAgPSBSbmRpc1VuZGlJbml0aWFsaXplOw0KPiAr ICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaVJlc2V0ICAgICAg ICAgICA9IFJuZGlzVW5kaVJlc2V0Ow0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0 aFVuZGkuVXNiRXRoVW5kaVNodXRkb3duICAgICAgICA9IFJuZGlzVW5kaVNodXRkb3duOw0KPiAr ICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaUludGVycnVwdEVu YWJsZSA9IFJuZGlzRHVtbXlSZXR1cm47DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNi RXRoVW5kaS5Vc2JFdGhVbmRpUmVjZWl2ZUZpbHRlciAgID0gUm5kaXNVbmRpUmVjZWl2ZUZpbHRl cjsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlTdGF0 aW9uQWRkcmVzcyAgPSBSbmRpc0R1bW15UmV0dXJuOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNi RXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaVN0YXRpc3RpY3MgICAgICA9IE5VTEw7DQo+ICsgIFVz YlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpTWNhc3RJcDJNYWMgICAg ID0gUm5kaXNEdW1teVJldHVybjsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhV bmRpLlVzYkV0aFVuZGlOdkRhdGEgICAgICAgICAgPSBSbmRpc0R1bW15UmV0dXJuOw0KPiArICBV c2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaUdldFN0YXR1cyAgICAg ICA9IFJuZGlzVW5kaUdldFN0YXR1czsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JF dGhVbmRpLlVzYkV0aFVuZGlGaWxsSGVhZGVyICAgICAgPSBSbmRpc0R1bW15UmV0dXJuOw0KPiAr ICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaVRyYW5zbWl0ICAg ICAgICA9IE5VTEw7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JF dGhVbmRpUmVjZWl2ZSAgICAgICAgID0gTlVMTDsNCj4gKw0KPiArICBVc2JSbmRpc0RldmljZS0+ TWF4VHJhbnNmZXJTaXplICAgICAgID0gUk5ESVNfTUFYX1RSQU5TRkVSX1NJWkU7DQo+ICsgIFVz YlJuZGlzRGV2aWNlLT5NYXhQYWNrZXRzUGVyVHJhbnNmZXIgPSAxOw0KPiArICBVc2JSbmRpc0Rl dmljZS0+UGFja2V0QWxpZ25tZW50RmFjdG9yID0gMDsNCj4gKw0KPiArICBJbml0aWFsaXplTGlz dEhlYWQgKCZVc2JSbmRpc0RldmljZS0+UmVjZWl2ZVBhY2tldExpc3QpOw0KPiArDQo+ICsgIC8v IFRoaXMgaXMgYSBSTkRJUyBpbnRlcmZhY2UuIFNlZSB3aGV0aGVyIENEQy1EQVRBIGludGVyZmFj ZSBoYXMgYWxyZWFkeSBiZWVuIGNvbm5lY3RlZCBvciBub3QNCj4gKyAgRmluZE1hdGNoaW5nQ2Rj RGF0YSAoVXNiUm5kaXNEZXZpY2UpOw0KPiArDQo+ICsgIGlmIChVc2JSbmRpc0RldmljZS0+VXNi SW9DZGNEYXRhKSB7DQo+ICsgICAgU3RhdHVzID0gZ0JTLT5JbnN0YWxsUHJvdG9jb2xJbnRlcmZh Y2UgKA0KPiArICAgICAgICAgICAgICAgICAgICAmQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAg ICAgICAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAg ICAgICAgICAgRUZJX05BVElWRV9JTlRFUkZBQ0UsDQo+ICsgICAgICAgICAgICAgICAgICAgICYo VXNiUm5kaXNEZXZpY2UtPlVzYkV0aCkNCj4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAg ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBnQlMtPkNsb3NlUHJvdG9jb2wg KA0KPiArICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgJmdF ZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5n SGFuZGxlLA0KPiArICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAg ICApOw0KPiArDQo+ICsgICAgICBGcmVlUG9vbCAoVXNiUm5kaXNEZXZpY2UtPkNvbmZpZyk7DQo+ ICsgICAgICBGcmVlUG9vbCAoVXNiUm5kaXNEZXZpY2UpOw0KPiArICAgICAgcmV0dXJuIFN0YXR1 czsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBHZXRFbmRwb2ludCAoVXNiUm5kaXNEZXZpY2UtPlVz YklvLCBVc2JSbmRpc0RldmljZSk7DQo+ICsNCj4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJS bmRpcyBEZXZpY2VIYW5kbGUgJXJcbiIsIFVzYlJuZGlzRGV2aWNlLT5Vc2JSbmRpc0hhbmRsZSkp Ow0KPiArICAgIERFQlVHICgoREVCVUdfSU5GTywgIkNEQyBEZXZpY2VIYW5kbGUgJXJcbiIsIFVz YlJuZGlzRGV2aWNlLT5Vc2JDZGNEYXRhSGFuZGxlKSk7DQo+ICsgICAgcmV0dXJuIEVGSV9TVUND RVNTOw0KPiArICB9DQo+ICsNCj4gKyAgRnJlZVBvb2wgKFVzYlJuZGlzRGV2aWNlLT5Db25maWcp Ow0KPiArICBGcmVlUG9vbCAoVXNiUm5kaXNEZXZpY2UpOw0KPiArDQo+ICsgIHJldHVybiBFRklf U1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENoZWNrYW5kU3RvcFJuZGlzRGV2aWNl DQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgUHJvdG9jb2wgaW5z dGFuY2UgcG9pbnRlci4NCj4gKyAgQHBhcmFtW2luXSAgQ29udHJvbGxlckhhbmRsZSAgICAgSGFu ZGxlIG9mIGRldmljZSB0byBiaW5kIGRyaXZlciB0by4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgICAgIFRoaXMgZHJpdmVyIGlzIGFkZGVkIHRvIENvbnRyb2xsZXJIYW5kbGUN Cj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICBUaGlzIGRyaXZlciBjb3VsZCBub3Qg YmUgc3RhcnRlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3INCj4gKyAgQHJldHZhbCBvdGhlciAgICAg ICAgICAgICAgICBUaGlzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZGV2aWNlDQo+ICsN Cj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtDaGVja2FuZFN0b3BSbmRpc0Rl dmljZSAoDQo+ICsgIElOICBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgICpUaGlzLA0KPiAr ICBJTiAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsg ICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgU3RhdHVzOw0KPiArICBFRklfVVNC X0lPX1BST1RPQ09MICAqVXNiSW87DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9j b2wgKA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAg ICAgICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAo Vk9JRCAqKikmVXNiSW8sDQo+ICsgICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5n SGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAg ICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0dFVF9QUk9UT0NPTA0KPiArICAgICAgICAg ICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVy biBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoSXNVc2JSbmRpcyAoVXNiSW8pKSB7DQo+ ICsgICAgU3RhdHVzID0gZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAg ICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgJmdFZmlVc2JJb1By b3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hh bmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAg ICAgICAgICAgICAgICApOw0KPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICJSbmRpcyBDb250 cm9sbGVySGFuZGxlIFN0b3AgJXJcbiIsIFN0YXR1cykpOw0KPiArICAgIHJldHVybiBTdGF0dXM7 DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArfQ0KPiArDQo+ ICsvKioNCj4gKyAgVVNCIFJuZGlzIERyaXZlciBCaW5kaW5nIFN0b3AuDQo+ICsNCj4gKyAgQHBh cmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgIFByb3RvY29sIGluc3RhbmNlIHBvaW50ZXIu DQo+ICsgIEBwYXJhbVtpbl0gIENvbnRyb2xsZXJIYW5kbGUgICAgICBIYW5kbGUgb2YgZGV2aWNl IHRvIHN0b3AgZHJpdmVyIG9uDQo+ICsgIEBwYXJhbVtpbl0gIE51bWJlck9mQ2hpbGRyZW4gICAg ICBOdW1iZXIgb2YgSGFuZGxlcyBpbiBDaGlsZEhhbmRsZUJ1ZmZlci4gSWYgbnVtYmVyIG9mDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbiBpcyB6ZXJvIHN0 b3AgdGhlIGVudGlyZSBidXMgZHJpdmVyLg0KPiArICBAcGFyYW1baW5dICBDaGlsZEhhbmRsZUJ1 ZmZlciAgICAgTGlzdCBvZiBDaGlsZCBIYW5kbGVzIHRvIFN0b3AuDQo+ICsNCj4gKyAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgIFRoaXMgZHJpdmVyIGlzIHJlbW92ZWQgQ29udHJv bGxlckhhbmRsZQ0KPiArICBAcmV0dmFsIG90aGVyICAgICAgICAgICAgICAgICAgICAgVGhpcyBk cml2ZXIgd2FzIG5vdCByZW1vdmVkIGZyb20gdGhpcyBkZXZpY2UNCj4gKw0KPiArKiovDQo+ICtF RklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1VzYlJuZGlzRHJpdmVyU3RvcCAoDQo+ICsgIElOICBF RklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiAgRUZJX0hBTkRMRSAg ICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICBJTiAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgICBOdW1iZXJPZkNoaWxkcmVuLA0KPiArICBJTiAgRUZJX0hBTkRMRSAg ICAgICAgICAgICAgICAgICAqQ2hpbGRIYW5kbGVCdWZmZXINCj4gKyAgKQ0KPiArew0KPiArICBF RklfU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRURLSUlfVVNCX0VUSEVS TkVUX1BST1RPQ09MICAqVXNiRXRoUHJvdG9jb2w7DQo+ICsgIFVTQl9STkRJU19ERVZJQ0UgICAg ICAgICAgICAgKlVzYlJuZGlzRGV2aWNlOw0KPiArDQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywg IlVzYlJuZGlzRHJpdmVyU3RvcCBDb250cm9sbGVySGFuZGxlICVseFxuIiwgQ29udHJvbGxlckhh bmRsZSkpOw0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICgNCj4gKyAgICAg ICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0Vk a0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVz YkV0aFByb3RvY29sLA0KPiArICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hh bmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAg ICAgICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9HRVRfUFJPVE9DT0wNCj4gKyAgICAgICAgICAg ICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBTdGF0dXMg PSBDaGVja2FuZFN0b3BSbmRpc0RldmljZSAoVGhpcywgQ29udHJvbGxlckhhbmRsZSk7DQo+ICsg ICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNC X1JORElTX0RFVklDRV9GUk9NX1RISVMgKFVzYkV0aFByb3RvY29sKTsNCj4gKw0KPiArICBTdGF0 dXMgPSBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgVXNiUm5kaXNE ZXZpY2UtPlVzYkNkY0RhdGFIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0VmaVVzYklv UHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hh bmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Vc2JDZGNEYXRhSGFu ZGxlDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOkNsb3NlUHJvdG9jb2wgc3RhdHVz ID0gJXJcbiIsIF9fRlVOQ1RJT05fXywgU3RhdHVzKSk7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0 dXMgPSBnQlMtPlVuaW5zdGFsbFByb3RvY29sSW50ZXJmYWNlICgNCj4gKyAgICAgICAgICAgICAg ICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0Vka0lJVXNiRXRo UHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgVXNiRXRoUHJvdG9jb2wNCj4gKyAg ICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAg ICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5DbG9zZVBy b3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAg ICAgICAgICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAg ICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRy b2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgRnJlZVBvb2wg KFVzYlJuZGlzRGV2aWNlLT5Db25maWcpOw0KPiArICBGcmVlUG9vbCAoVXNiUm5kaXNEZXZpY2Up Ow0KPiArDQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlVzYlJuZGlzRHJpdmVyU3RvcCAlclxu IiwgU3RhdHVzKSk7DQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr ICBFbnRyeXBvaW50IG9mIFJORElTIERyaXZlci4NCj4gKw0KPiArICBUaGlzIGZ1bmN0aW9uIGlz IHRoZSBlbnRyeXBvaW50IG9mIFJORElTIERyaXZlci4gSXQgaW5zdGFsbHMgRHJpdmVyIEJpbmRp bmcNCj4gKyAgUHJvdG9jb2xzIHRvZ2V0aGVyIHdpdGggQ29tcG9uZW50IE5hbWUgUHJvdG9jb2xz Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIEltYWdlSGFuZGxlICAgICAgIFRoZSBmaXJtd2FyZSBh bGxvY2F0ZWQgaGFuZGxlIGZvciB0aGUgRUZJIGltYWdlLg0KPiArICBAcGFyYW1baW5dICBTeXN0 ZW1UYWJsZSAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSSBTeXN0ZW0gVGFibGUuDQo+ICsNCj4g KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIGVudHJ5IHBvaW50IGlzIGV4ZWN1 dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkN Cj4gK1VzYlJuZGlzRW50cnkgKA0KPiArICBJTiBFRklfSEFORExFICAgICAgICBJbWFnZUhhbmRs ZSwNCj4gKyAgSU4gRUZJX1NZU1RFTV9UQUJMRSAgKlN5c3RlbVRhYmxlDQo+ICsgICkNCj4gK3sN Cj4gKyAgZ1VzYlJuZGlzRHJpdmVyQmluZGluZy5Ecml2ZXJCaW5kaW5nSGFuZGxlID0gSW1hZ2VI YW5kbGU7DQo+ICsgIGdVc2JSbmRpc0RyaXZlckJpbmRpbmcuSW1hZ2VIYW5kbGUgICAgICAgICA9 IEltYWdlSGFuZGxlOw0KPiArDQo+ICsgIHJldHVybiBnQlMtPkluc3RhbGxNdWx0aXBsZVByb3Rv Y29sSW50ZXJmYWNlcyAoDQo+ICsgICAgICAgICAgICAgICAgJmdVc2JSbmRpc0RyaXZlckJpbmRp bmcuRHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAmZ0VmaURyaXZlckJp bmRpbmdQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgJmdVc2JSbmRpc0RyaXZlckJp bmRpbmcsDQo+ICsgICAgICAgICAgICAgICAgJmdFZmlDb21wb25lbnROYW1lMlByb3RvY29sR3Vp ZCwNCj4gKyAgICAgICAgICAgICAgICAmZ1VzYlJuZGlzQ29tcG9uZW50TmFtZTIsDQo+ICsgICAg ICAgICAgICAgICAgTlVMTA0KPiArICAgICAgICAgICAgICAgICk7DQo+ICt9DQo+IGRpZmYgLS1n aXQgYS9Vc2JOZXR3b3JrUGtnL1VzYlJuZGlzL1VzYlJuZGlzLmggYi9Vc2JOZXR3b3JrUGtnL1Vz YlJuZGlzL1VzYlJuZGlzLmgNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAw MDAwMC4uNDM0ZjgzMjNjMw0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL1VzYk5ldHdvcmtQa2cv VXNiUm5kaXMvVXNiUm5kaXMuaA0KPiBAQCAtMCwwICsxLDU5NCBAQA0KPiArLyoqIEBmaWxlDQo+ ICsgIEhlYWRlciBmaWxlIGZvciBmb3IgVVNCIFJuZGlzIGRyaXZlcg0KPiArDQo+ICsgIENvcHly aWdodCAoYykgMjAyMiwgQW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExMQy4gQWxs IHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0Qt Mi1DbGF1c2UtUGF0ZW50DQo+ICsqKi8NCj4gKw0KPiArI2lmbmRlZiBfVVNCX1JORElTX0hfDQo+ ICsjZGVmaW5lIF9VU0JfUk5ESVNfSF8NCj4gKw0KPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaURy aXZlckVudHJ5UG9pbnQuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNU YWJsZUxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaUxpYi5oPg0KPiArI2luY2x1ZGUg PExpYnJhcnkvRGV2aWNlUGF0aExpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIu aD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4NCj4gKyNpbmNs dWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlV c2JMaWIuaD4NCj4gKyNpbmNsdWRlIDxQcm90b2NvbC9Vc2JJby5oPg0KPiArI2luY2x1ZGUgPFBy b3RvY29sL0Vka0lJVXNiRXRoZXJuZXRQcm90b2NvbC5oPg0KPiArDQo+ICt0eXBlZGVmIHN0cnVj dCBfUkVNT1RFX05ESVNfTVNHX0hFQURFUiBSRU1PVEVfTkRJU19NU0dfSEVBREVSOw0KPiArDQo+ ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICBT aWduYXR1cmU7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgICBVc2JFdGg7DQo+ ICsgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICBVc2JDZGNEYXRhSGFuZGxlOw0KPiAr ICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAgVXNiUm5kaXNIYW5kbGU7DQo+ICsgIEVG SV9VU0JfSU9fUFJPVE9DT0wgICAgICAgICAgICAqVXNiSW87DQo+ICsgIEVGSV9VU0JfSU9fUFJP VE9DT0wgICAgICAgICAgICAqVXNiSW9DZGNEYXRhOw0KPiArICBFRklfVVNCX0NPTkZJR19ERVND UklQVE9SICAgICAgKkNvbmZpZzsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAg IE51bU9mSW50ZXJmYWNlOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgQnVs a0luRW5kcG9pbnQ7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICBCdWxrT3V0 RW5kcG9pbnQ7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cEVu ZHBvaW50Ow0KPiArICBFRklfTUFDX0FERFJFU1MgICAgICAgICAgICAgICAgTWFjQWRkcmVzczsN Cj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3RJZDsNCj4gKyAgVUlO VDMyICAgICAgICAgICAgICAgICAgICAgICAgIE1lZGl1bTsNCj4gKyAgVUlOVDMyICAgICAgICAg ICAgICAgICAgICAgICAgIE1heFBhY2tldHNQZXJUcmFuc2ZlcjsNCj4gKyAgVUlOVDMyICAgICAg ICAgICAgICAgICAgICAgICAgIE1heFRyYW5zZmVyU2l6ZTsNCj4gKyAgVUlOVDMyICAgICAgICAg ICAgICAgICAgICAgICAgIFBhY2tldEFsaWdubWVudEZhY3RvcjsNCj4gKyAgTElTVF9FTlRSWSAg ICAgICAgICAgICAgICAgICAgIFJlY2VpdmVQYWNrZXRMaXN0Ow0KPiArfSBVU0JfUk5ESVNfREVW SUNFOw0KPiArDQo+ICsjZGVmaW5lIFVTQl9STkRJU19EUklWRVJfVkVSU0lPTiAgICAgICAxDQo+ ICsjZGVmaW5lIFVTQl9UWF9FVEhFUk5FVF9CVUxLX1RJTUVPVVQgICAzMDAwDQo+ICsjZGVmaW5l IFVTQl9SWF9FVEhFUk5FVF9CVUxLX1RJTUVPVVQgICAzDQo+ICsjZGVmaW5lIFVTQl9FVEhFUk5F VF9UUkFOU0ZFUl9USU1FT1VUICAyMDANCj4gKw0KPiArI2RlZmluZSBMQU5fQlVMS0lOX0NNRF9D T05UUk9MICAgICAgMQ0KPiArI2RlZmluZSBNQVhJTVVNX1NUT1BCVUxLSU5fQ05UICAgICAgMzAw ICAgICAgICAvLyBJbmRpY2F0aW5nIG1heGltdW0gY291bnRzIGZvciB3YWl0aW5nIGJ1bGsgaW4g Y29tbWFuZA0KPiArI2RlZmluZSBNSU5JTVVNX1NUT1BCVUxLSU5fQ05UICAgICAgMyAgICAgICAg ICAvLyBJbmRpY2F0aW5nIG1pbmltdW0gY291bnRzIGZvciB3YWl0aW5nIGJ1bGsgaW4gY29tbWFu ZA0KPiArI2RlZmluZSBCVUxLSU5fQ01EX1BPTExJTkdfQ05UICAgICAgMzAwICAgICAgICAvLyBJ bmRpY2F0aW5nIHRoZSB3YWl0aW5nIGNvdW50cyBmb3Igc2VuZCBidWxrIGluIGNvbW1hbmQgd2hl biBzeXN0ZW0gcGVuZGluZw0KPiArI2RlZmluZSBSTkRJU19SRVNFUlZFRF9CWVRFX0xFTkdUSCAg OA0KPiArDQo+ICsjZGVmaW5lIFVTQl9STkRJU19TSUdOQVRVUkUgIFNJR05BVFVSRV8zMigncics ICduJywgJ2QnLCAncycpDQo+ICsjZGVmaW5lIFVTQl9STkRJU19ERVZJQ0VfRlJPTV9USElTKGEp ICBDUiAoYSwgVVNCX1JORElTX0RFVklDRSwgVXNiRXRoLCBVU0JfUk5ESVNfU0lHTkFUVVJFKQ0K PiArDQo+ICtleHRlcm4gRUZJX0NPTVBPTkVOVF9OQU1FMl9QUk9UT0NPTCAgZ1VzYlJuZGlzQ29t cG9uZW50TmFtZTI7DQo+ICsNCj4gK3N0cnVjdCBCSVRfTUFQIHsNCj4gKyAgdW5zaWduZWQgaW50 ICAgIFNyYzsNCj4gKyAgdW5zaWduZWQgaW50ICAgIERzdDsNCj4gK307DQo+ICsNCj4gK0VGSV9T VEFUVVMNCj4gK0VGSUFQSQ0KPiArVXNiUm5kaXNEcml2ZXJTdXBwb3J0ZWQgKA0KPiArICBJTiBF RklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBFRklfSEFORExFICAg ICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgIElOIEVGSV9ERVZJQ0VfUEFU SF9QUk9UT0NPTCAgICAgKlJlbWFpbmluZ0RldmljZVBhdGgNCj4gKyAgKTsNCj4gKw0KPiArRUZJ X1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVc2JSbmRpc0RyaXZlclN0YXJ0ICgNCj4gKyAgSU4gRUZJ X0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAg ICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICBJTiBFRklfREVWSUNFX1BBVEhf UFJPVE9DT0wgICAgICpSZW1haW5pbmdEZXZpY2VQYXRoDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9T VEFUVVMNCj4gK0VGSUFQSQ0KPiArVXNiUm5kaXNEcml2ZXJTdG9wICgNCj4gKyAgSU4gIEVGSV9E UklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOICBFRklfSEFORExFICAgICAg ICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAgIE51bWJlck9mQ2hpbGRyZW4sDQo+ICsgIElOICBFRklfSEFORExFICAgICAg ICAgICAgICAgICAgICpDaGlsZEhhbmRsZUJ1ZmZlcg0KPiArICApOw0KPiArDQo+ICtFRklfU1RB VFVTDQo+ICtMb2FkQWxsRGVzY3JpcHRvciAoDQo+ICsgIElOICBFRklfVVNCX0lPX1BST1RPQ09M ICAgICAgICAqVXNiSW8sDQo+ICsgIE9VVCBFRklfVVNCX0NPTkZJR19ERVNDUklQVE9SICAqKkNv bmZpZ0Rlc2MNCj4gKyAgKTsNCj4gKw0KPiArQk9PTEVBTg0KPiArTmV4dERlc2NyaXB0b3IgKA0K PiArICBJTiBFRklfVVNCX0NPTkZJR19ERVNDUklQVE9SICAqRGVzYywNCj4gKyAgSU4gT1VUIFVJ TlROICAgICAgICAgICAgICAgICAgKk9mZnNldA0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVT DQo+ICtHZXRGdW5jdGlvbmFsRGVzY3JpcHRvciAoDQo+ICsgIElOICBFRklfVVNCX0NPTkZJR19E RVNDUklQVE9SICAqQ29uZmlnLA0KPiArICBJTiAgVUlOVDggICAgICAgICAgICAgICAgICAgICAg RnVuRGVzY3JpcHRvclR5cGUsDQo+ICsgIE9VVCBWT0lEICAgICAgICAgICAgICAgICAgICAgICAq RGF0YUJ1ZmZlcg0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtHZXRFbmRwb2ludCAoDQo+ICsg IElOICAgICAgRUZJX1VTQl9JT19QUk9UT0NPTCAgKlVzYklvLA0KPiArICBJTiBPVVQgIFVTQl9S TkRJU19ERVZJQ0UgICAgICpVc2JSbmRpc0RldmljZQ0KPiArICApOw0KPiArDQo+ICtFRklfU1RB VFVTDQo+ICtFRklBUEkNCj4gK1VzYlJuZGlzSW50ZXJydXB0ICgNCj4gKyAgSU4gRURLSUlfVVNC X0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gQk9PTEVBTiAgICAgICAgICAgICAg ICAgICAgICBJc05ld1RyYW5zZmVyLA0KPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAg ICAgIFBvbGxpbmdJbnRlcnZhbCwNCj4gKyAgSU4gRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCAgICAg ICAqUmVxdXN0DQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArSW50 ZXJydXB0Q2FsbGJhY2sgKA0KPiArICBJTiAgVk9JRCAgICAqRGF0YSwNCj4gKyAgSU4gIFVJTlRO ICAgRGF0YUxlbmd0aCwNCj4gKyAgSU4gIFZPSUQgICAgKkNvbnRleHQsDQo+ICsgIElOICBVSU5U MzIgIFN0YXR1cw0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0dl dFVzYkV0aE1hY0FkZHJlc3MgKA0KPiArICBJTiAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09M ICAqVGhpcywNCj4gKyAgT1VUIEVGSV9NQUNfQUREUkVTUyAgICAgICAgICAgICAgKk1hY0FkZHJl c3MNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVc2JFdGhCdWxr U2l6ZSAoDQo+ICsgIElOICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiAr ICBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAqQnVsa1NpemUNCj4gKyAgKTsNCj4g Kw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc0R1bW15UmV0dXJuICgNCj4gKyAg SU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4g Kw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlTdGFydCAoDQo+ICsgIElO IFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaVN0b3AgKA0KPiArICBJTiBQWEVf Q0RCICAgKkNkYiwNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArRUZJ X1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlHZXRJbml0SW5mbyAoDQo+ICsgIElOIFBY RV9DREIgICAqQ2RiLA0KPiArICBJTiBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtF RklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaUdldENvbmZpZ0luZm8gKA0KPiArICBJ TiBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0K PiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlJbml0aWFsaXplICgNCj4gKyAg SU4gUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsN Cj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRpVHJhbnNtaXQgKA0KPiArICBJ TiAgICAgIFBYRV9DREIgICAgICAgICAgICAgICAgICAgICAgKkNkYiwNCj4gKyAgSU4gICAgICBF REtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiAgICAgIFZPSUQgICAg ICAgICAgICAgICAgICAgICAgICAgKkJ1bGtPdXREYXRhLA0KPiArICBJTiBPVVQgIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICAgKkRhdGFMZW5ndGgNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NU QVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlSZWNlaXZlICgNCj4gKyAgSU4gICAgIFBYRV9D REIgICAgICAgICAgICAgICAgICAgICAgKkNkYiwNCj4gKyAgSU4gICAgIEVES0lJX1VTQl9FVEhF Uk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIE9VVCBWT0lEICAgICAgICAgICAgICAgICAg ICAgICAgICpCdWxrSW5EYXRhLA0KPiArICBJTiBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAg ICAgICAqRGF0YUxlbmd0aA0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkN Cj4gK1JuZGlzVW5kaVJlc2V0ICgNCj4gKyAgSU4gUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOIE5J Q19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiAr Um5kaXNVbmRpU2h1dGRvd24gKA0KPiArICBJTiBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gTklD X0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtS bmRpc1VuZGlSZWNlaXZlRmlsdGVyICgNCj4gKyAgSU4gUFhFX0NEQiAgICpDZGIsDQo+ICsgIElO IE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0K PiArUm5kaXNVbmRpR2V0U3RhdHVzICgNCj4gKyAgSU4gUFhFX0NEQiAgICpDZGIsDQo+ICsgIElO IE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0K PiArR2V0VXNiSGVhZGVyRnVuRGVzY3JpcHRvciAoDQo+ICsgIElOICBFREtJSV9VU0JfRVRIRVJO RVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBPVVQgVVNCX0hFQURFUl9GVU5fREVTQ1JJUFRPUiAg ICAqVXNiSGVhZGVyRnVuRGVzY3JpcHRvcg0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ ICtFRklBUEkNCj4gK0dldFVzYlVuaW9uRnVuRGVzY3JpcHRvciAoDQo+ICsgIElOICBFREtJSV9V U0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBPVVQgVVNCX1VOSU9OX0ZVTl9ERVND UklQVE9SICAgICAqVXNiVW5pb25GdW5EZXNjcmlwdG9yDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9T VEFUVVMNCj4gK0VGSUFQSQ0KPiArR2V0VXNiUm5kaXNGdW5EZXNjcmlwdG9yICgNCj4gKyAgSU4g IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIE9VVCBVU0JfRVRIRVJO RVRfRlVOX0RFU0NSSVBUT1IgICpVc2JFdGhGdW5EZXNjcmlwdG9yDQo+ICsgICk7DQo+ICsNCj4g K0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArU2V0VXNiUm5kaXNNY2FzdEZpbHRlciAoDQo+ICsg IElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIFVJTlQxNiAg ICAgICAgICAgICAgICAgICAgICAgVmFsdWUsDQo+ICsgIElOIFZPSUQgICAgICAgICAgICAgICAg ICAgICAgICAgKk1jYXN0QWRkcg0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklB UEkNCj4gK1NldFVzYlJuZGlzUG93ZXJGaWx0ZXIgKA0KPiArICBJTiBFREtJSV9VU0JfRVRIRVJO RVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAg IFZhbHVlLA0KPiArICBJTiBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCwNCj4g KyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAqUGF0dGVybkZpbHRlcg0KPiArICAp Ow0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0dldFVzYlJuZGlzUG93ZXJGaWx0 ZXIgKA0KPiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJ TiBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlLA0KPiArICBJTiBCT09MRUFOICAg ICAgICAgICAgICAgICAgICAgICpQYXR0ZXJuQWN0aXZlDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9T VEFUVVMNCj4gK0VGSUFQSQ0KPiArU2V0VXNiUm5kaXNQYWNrZXRGaWx0ZXIgKA0KPiArICBJTiBF REtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBVSU5UMTYgICAgICAg ICAgICAgICAgICAgICAgIFZhbHVlDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VG SUFQSQ0KPiArR2V0Um5kaXNTdGF0aXN0aWMgKA0KPiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRf UFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgIFZh bHVlLA0KPiArICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICpTdGF0aXN0aWMNCj4g KyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArU2VuZFJuZGlzU2V0TXNnICgNCj4gKyAgSU4g IFVTQl9STkRJU19ERVZJQ0UgICpVc2JSbmRpc0RldmljZSwNCj4gKyAgVUlOVDggICAgICAgICAg ICAgICAgIE9pZCwNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgIExlbmd0aCwNCj4gKyAgVUlO VDggICAgICAgICAgICAgICAgICpCdWYNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiAr Um5kaXNDb250cm9sTXNnICgNCj4gKyAgSU4gIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICpVc2JS bmRpc0RldmljZSwNCj4gKyAgSU4gIFJFTU9URV9ORElTX01TR19IRUFERVIgICpSbmRpc01zZywN Cj4gKyAgT1VUIFJFTU9URV9ORElTX01TR19IRUFERVIgICpSbmRpc01zZ1Jlc3BvbnNlDQo+ICsg ICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK1JuZGlzVHJhbnNtaXREYXRhTXNnICgNCj4gKyAg SU4gIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICpVc2JSbmRpc0RldmljZSwNCj4gKyAgSU4gIFJF TU9URV9ORElTX01TR19IRUFERVIgICpSbmRpc01zZywNCj4gKyAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICpUcmFuc2Zlckxlbmd0aA0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ ICtSbmRpc1JlY2VpdmVEYXRhTXNnICgNCj4gKyAgSU4gIFVTQl9STkRJU19ERVZJQ0UgICAgICAg ICpVc2JSbmRpc0RldmljZSwNCj4gKyAgSU4gIFJFTU9URV9ORElTX01TR19IRUFERVIgICpSbmRp c01zZywNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICpUcmFuc2Zlckxlbmd0aA0K PiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtQcmludFJuZGlzTXNnICgNCj4gKyAgSU4gIFJFTU9U RV9ORElTX01TR19IRUFERVIgICpSbmRpc01zZw0KPiArICApOw0KPiArDQo+ICsjZGVmaW5lIFJO RElTX01BSk9SX1ZFUlNJT04gICAgICAweDAwMDAwMDAxDQo+ICsjZGVmaW5lIFJORElTX01JTk9S X1ZFUlNJT04gICAgICAweDAwMDAwMDAwDQo+ICsjZGVmaW5lIFJORElTX01BWF9UUkFOU0ZFUl9T SVpFICAweDQwMDANCj4gKw0KPiArI2RlZmluZSBSTkRJU19QQUNLRVRfTVNHICAgICAgICAgICAw eDAwMDAwMDAxDQo+ICsjZGVmaW5lIFJORElTX0lOSVRJQUxJWkVfTVNHICAgICAgIDB4MDAwMDAw MDINCj4gKyNkZWZpbmUgUk5ESVNfSU5JVElBTElaRV9DTVBMVCAgICAgMHg4MDAwMDAwMg0KPiAr I2RlZmluZSBSTkRJU19ITFRfTVNHICAgICAgICAgICAgICAweDAwMDAwMDAzDQo+ICsjZGVmaW5l IFJORElTX1FVRVJZX01TRyAgICAgICAgICAgIDB4MDAwMDAwMDQNCj4gKyNkZWZpbmUgUk5ESVNf UVVFUllfQ01QTFQgICAgICAgICAgMHg4MDAwMDAwNA0KPiArI2RlZmluZSBSTkRJU19TRVRfTVNH ICAgICAgICAgICAgICAweDAwMDAwMDA1DQo+ICsjZGVmaW5lIFJORElTX1NFVF9DTVBMVCAgICAg ICAgICAgIDB4ODAwMDAwMDUNCj4gKyNkZWZpbmUgUk5ESVNfUkVTRVRfTVNHICAgICAgICAgICAg MHgwMDAwMDAwNg0KPiArI2RlZmluZSBSTkRJU19SRVNFVF9DTVBMVCAgICAgICAgICAweDgwMDAw MDA2DQo+ICsjZGVmaW5lIFJORElTX0lORElDQVRFX1NUQVRVU19NU0cgIDB4MDAwMDAwMDcNCj4g KyNkZWZpbmUgUk5ESVNfS0VFUEFMSVZFX01TRyAgICAgICAgMHgwMDAwMDAwOA0KPiArI2RlZmlu ZSBSTkRJU19LRUVQQUxJVkVfQ01QTFQgICAgICAweDgwMDAwMDA4DQo+ICsNCj4gKyNkZWZpbmUg Uk5ESVNfU1RBVFVTX1NVQ0NFU1MgICAgICAgICAgIDB4MDAwMDAwMDANCj4gKyNkZWZpbmUgUk5E SVNfU1RBVFVTX0ZBSUxVUkUgICAgICAgICAgIDB4QzAwMDAwMDENCj4gKyNkZWZpbmUgUk5ESVNf U1RBVFVTX0lOVkFMSURfREFUQSAgICAgIDB4QzAwMTAwMTUNCj4gKyNkZWZpbmUgUk5ESVNfU1RB VFVTX05PVF9TVVBQT1JURUQgICAgIDB4QzAwMDAwQkINCj4gKyNkZWZpbmUgUk5ESVNfU1RBVFVT X01FRElBX0NPTk5FQ1QgICAgIDB4NDAwMTAwMEINCj4gKyNkZWZpbmUgUk5ESVNfU1RBVFVTX01F RElBX0RJU0NPTk5FQ1QgIDB4NDAwMTAwMEMNCj4gKw0KPiArI2RlZmluZSBSTkRJU19DT05UUk9M X1RJTUVPVVQgICAgMTAwMDAgICAgICAgICAgICAvLyAxMHNlYw0KPiArI2RlZmluZSBSTkRJU19L RUVQQUxJVkVfVElNRU9VVCAgNTAwMCAgICAgICAgICAgICAvLyA1c2VjDQo+ICsNCj4gKyNkZWZp bmUgU0VORF9FTkNBUFNVTEFURURfQ09NTUFORCAgMHgwMDAwMDAwMA0KPiArI2RlZmluZSBHRVRf RU5DQVBTVUxBVEVEX1JFU1BPTlNFICAweDAwMDAwMDAxDQo+ICsNCj4gKy8vDQo+ICsvLyBHZW5l cmFsIE9iamVjdHMNCj4gKy8vDQo+ICsvLyBUYWtlbiBmcm9tIE5URERORElTLkgNCj4gKyNkZWZp bmUgT0lEX0dFTl9TVVBQT1JURURfTElTVCAgICAgICAgIDB4MDAwMTAxMDENCj4gKyNkZWZpbmUg T0lEX0dFTl9IQVJEV0FSRV9TVEFUVVMgICAgICAgIDB4MDAwMTAxMDINCj4gKyNkZWZpbmUgT0lE X0dFTl9NRURJQV9TVVBQT1JURUQgICAgICAgIDB4MDAwMTAxMDMNCj4gKyNkZWZpbmUgT0lEX0dF Tl9NRURJQV9JTl9VU0UgICAgICAgICAgIDB4MDAwMTAxMDQNCj4gKyNkZWZpbmUgT0lEX0dFTl9N QVhJTVVNX0xPT0tBSEVBRCAgICAgIDB4MDAwMTAxMDUNCj4gKyNkZWZpbmUgT0lEX0dFTl9NQVhJ TVVNX0ZSQU1FX1NJWkUgICAgIDB4MDAwMTAxMDYNCj4gKyNkZWZpbmUgT0lEX0dFTl9MSU5LX1NQ RUVEICAgICAgICAgICAgIDB4MDAwMTAxMDcNCj4gKyNkZWZpbmUgT0lEX0dFTl9UUkFOU01JVF9C VUZGRVJfU1BBQ0UgIDB4MDAwMTAxMDgNCj4gKyNkZWZpbmUgT0lEX0dFTl9SRUNFSVZFX0JVRkZF Ul9TUEFDRSAgIDB4MDAwMTAxMDkNCj4gKyNkZWZpbmUgT0lEX0dFTl9UUkFOU01JVF9CTE9DS19T SVpFICAgIDB4MDAwMTAxMEENCj4gKyNkZWZpbmUgT0lEX0dFTl9SRUNFSVZFX0JMT0NLX1NJWkUg ICAgIDB4MDAwMTAxMEINCj4gKyNkZWZpbmUgT0lEX0dFTl9WRU5ET1JfSUQgICAgICAgICAgICAg IDB4MDAwMTAxMEMNCj4gKyNkZWZpbmUgT0lEX0dFTl9WRU5ET1JfREVTQ1JJUFRJT04gICAgIDB4 MDAwMTAxMEQNCj4gKyNkZWZpbmUgT0lEX0dFTl9DVVJSRU5UX1BBQ0tFVF9GSUxURVIgIDB4MDAw MTAxMEUNCj4gKyNkZWZpbmUgT0lEX0dFTl9DVVJSRU5UX0xPT0tBSEVBRCAgICAgIDB4MDAwMTAx MEYNCj4gKyNkZWZpbmUgT0lEX0dFTl9EUklWRVJfVkVSU0lPTiAgICAgICAgIDB4MDAwMTAxMTAN Cj4gKyNkZWZpbmUgT0lEX0dFTl9NQVhJTVVNX1RPVEFMX1NJWkUgICAgIDB4MDAwMTAxMTENCj4g KyNkZWZpbmUgT0lEX0dFTl9QUk9UT0NPTF9PUFRJT05TICAgICAgIDB4MDAwMTAxMTINCj4gKyNk ZWZpbmUgT0lEX0dFTl9NQUNfT1BUSU9OUyAgICAgICAgICAgIDB4MDAwMTAxMTMNCj4gKyNkZWZp bmUgT0lEX0dFTl9NRURJQV9DT05ORUNUX1NUQVRVUyAgIDB4MDAwMTAxMTQNCj4gKyNkZWZpbmUg T0lEX0dFTl9NQVhJTVVNX1NFTkRfUEFDS0VUUyAgIDB4MDAwMTAxMTUNCj4gKyNkZWZpbmUgT0lE X0dFTl9WRU5ET1JfRFJJVkVSX1ZFUlNJT04gIDB4MDAwMTAxMTYNCj4gKw0KPiArI2RlZmluZSBP SURfR0VOX1hNSVRfT0sgICAgICAgIDB4MDAwMjAxMDENCj4gKyNkZWZpbmUgT0lEX0dFTl9SQ1Zf T0sgICAgICAgICAweDAwMDIwMTAyDQo+ICsjZGVmaW5lIE9JRF9HRU5fWE1JVF9FUlJPUiAgICAg MHgwMDAyMDEwMw0KPiArI2RlZmluZSBPSURfR0VOX1JDVl9FUlJPUiAgICAgIDB4MDAwMjAxMDQN Cj4gKyNkZWZpbmUgT0lEX0dFTl9SQ1ZfTk9fQlVGRkVSICAweDAwMDIwMTA1DQo+ICsNCj4gKyNk ZWZpbmUgT0lEX0dFTl9ESVJFQ1RFRF9CWVRFU19YTUlUICAgIDB4MDAwMjAyMDENCj4gKyNkZWZp bmUgT0lEX0dFTl9ESVJFQ1RFRF9GUkFNRVNfWE1JVCAgIDB4MDAwMjAyMDINCj4gKyNkZWZpbmUg T0lEX0dFTl9NVUxUSUNBU1RfQllURVNfWE1JVCAgIDB4MDAwMjAyMDMNCj4gKyNkZWZpbmUgT0lE X0dFTl9NVUxUSUNBU1RfRlJBTUVTX1hNSVQgIDB4MDAwMjAyMDQNCj4gKyNkZWZpbmUgT0lEX0dF Tl9CUk9BRENBU1RfQllURVNfWE1JVCAgIDB4MDAwMjAyMDUNCj4gKyNkZWZpbmUgT0lEX0dFTl9C Uk9BRENBU1RfRlJBTUVTX1hNSVQgIDB4MDAwMjAyMDYNCj4gKyNkZWZpbmUgT0lEX0dFTl9ESVJF Q1RFRF9CWVRFU19SQ1YgICAgIDB4MDAwMjAyMDcNCj4gKyNkZWZpbmUgT0lEX0dFTl9ESVJFQ1RF RF9GUkFNRVNfUkNWICAgIDB4MDAwMjAyMDgNCj4gKyNkZWZpbmUgT0lEX0dFTl9NVUxUSUNBU1Rf QllURVNfUkNWICAgIDB4MDAwMjAyMDkNCj4gKyNkZWZpbmUgT0lEX0dFTl9NVUxUSUNBU1RfRlJB TUVTX1JDViAgIDB4MDAwMjAyMEENCj4gKyNkZWZpbmUgT0lEX0dFTl9CUk9BRENBU1RfQllURVNf UkNWICAgIDB4MDAwMjAyMEINCj4gKyNkZWZpbmUgT0lEX0dFTl9CUk9BRENBU1RfRlJBTUVTX1JD ViAgIDB4MDAwMjAyMEMNCj4gKyNkZWZpbmUgT0lEX0dFTl9SQ1ZfQ1JDX0VSUk9SICAgICAgICAg IDB4MDAwMjAyMEQNCj4gKyNkZWZpbmUgT0lEX0dFTl9UUkFOU01JVF9RVUVVRV9MRU5HVEggIDB4 MDAwMjAyMEUNCj4gKw0KPiArI2RlZmluZSBPSURfODAyXzNfQ1VSUkVOVF9BRERSRVNTICAweDAx MDEwMTAyDQo+ICsvLw0KPiArLy8gTmRpcyBQYWNrZXQgRmlsdGVyIEJpdHMgKE9JRF9HRU5fQ1VS UkVOVF9QQUNLRVRfRklMVEVSKS4NCj4gKy8vDQo+ICsjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVf RElSRUNURUQgICAgICAgIDB4MDAwMQ0KPiArI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX01VTFRJ Q0FTVCAgICAgICAweDAwMDINCj4gKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9BTExfTVVMVElD QVNUICAgMHgwMDA0DQo+ICsjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfQlJPQURDQVNUICAgICAg IDB4MDAwOA0KPiArI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX1NPVVJDRV9ST1VUSU5HICAweDAw MTANCj4gKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9QUk9NSVNDVU9VUyAgICAgMHgwMDIwDQo+ ICsjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfU01UICAgICAgICAgICAgIDB4MDA0MA0KPiArI2Rl ZmluZSBORElTX1BBQ0tFVF9UWVBFX0FMTF9MT0NBTCAgICAgICAweDAwODANCj4gKyNkZWZpbmUg TkRJU19QQUNLRVRfVFlQRV9NQUNfRlJBTUUgICAgICAgMHg4MDAwDQo+ICsjZGVmaW5lIE5ESVNf UEFDS0VUX1RZUEVfRlVOQ1RJT05BTCAgICAgIDB4NDAwMA0KPiArI2RlZmluZSBORElTX1BBQ0tF VF9UWVBFX0FMTF9GVU5DVElPTkFMICAweDIwMDANCj4gKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQ RV9HUk9VUCAgICAgICAgICAgMHgxMDAwDQo+ICsNCj4gKyNwcmFnbWEgcGFjaygxKQ0KPiArDQo+ ICt0eXBlZGVmIHN0cnVjdCBfUkVNT1RFX05ESVNfTVNHX0hFQURFUiB7DQo+ICsgIFVJTlQzMiAg ICBNZXNzYWdlVHlwZTsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5ndGg7DQo+ICt9IFJFTU9U RV9ORElTX01TR19IRUFERVI7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMy ICAgIE1lc3NhZ2VUeXBlOw0KPiArICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsNCj4gKyAgVUlO VDMyICAgIFJlcXVlc3RJRDsNCj4gKyAgVUlOVDMyICAgIE1ham9yVmVyc2lvbjsNCj4gKyAgVUlO VDMyICAgIE1pbm9yVmVyc2lvbjsNCj4gKyAgVUlOVDMyICAgIE1heFRyYW5zZmVyU2l6ZTsNCj4g K30gUkVNT1RFX05ESVNfSU5JVElBTElaRV9NU0c7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsN Cj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KPiArICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0 aDsNCj4gKyAgVUlOVDMyICAgIFJlcXVlc3RJRDsNCj4gK30gUkVNT1RFX05ESVNfSEFMVF9NU0c7 DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0K PiArICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsNCj4gKyAgVUlOVDMyICAgIFJlcXVlc3RJRDsN Cj4gKyAgVUlOVDMyICAgIE9pZDsNCj4gKyAgVUlOVDMyICAgIEluZm9ybWF0aW9uQnVmZmVyTGVu Z3RoOw0KPiArICBVSU5UMzIgICAgSW5mb3JtYXRpb25CdWZmZXJPZmZzZXQ7DQo+ICsgIFVJTlQz MiAgICBSZXNlcnZlZDsNCj4gK30gUkVNT1RFX05ESVNfUVVFUllfTVNHOw0KPiArDQo+ICt0eXBl ZGVmIHN0cnVjdCB7DQo+ICsgIFJFTU9URV9ORElTX1FVRVJZX01TRyAgICBRdWVyeU1zZzsNCj4g KyAgVUlOVDggICAgICAgICAgICAgICAgICAgIEFkZHJbNl07DQo+ICt9IFJFTU9URV9ORElTX1FV RVJZX01BQ19NU0c7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgUkVNT1RFX05ESVNf UVVFUllfTVNHICAgIFF1ZXJ5TXNnOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgTWF4 VG90YWxTaXplOw0KPiArfSBSRU1PVEVfTkRJU19RVUVSWV9NQVhfVE9UQUxfU0laRV9NU0c7DQo+ ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KPiAr ICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsNCj4gKyAgVUlOVDMyICAgIFJlcXVlc3RJRDsNCj4g KyAgVUlOVDMyICAgIE9pZDsNCj4gKyAgVUlOVDMyICAgIEluZm9ybWF0aW9uQnVmZmVyTGVuZ3Ro Ow0KPiArICBVSU5UMzIgICAgSW5mb3JtYXRpb25CdWZmZXJPZmZzZXQ7DQo+ICsgIFVJTlQzMiAg ICBSZXNlcnZlZDsNCj4gK30gUkVNT1RFX05ESVNfU0VUX01TRzsNCj4gKw0KPiArdHlwZWRlZiBz dHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ICsgIFVJTlQzMiAgICBNZXNz YWdlTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgUmVzZXJ2ZWQ7DQo+ICt9IFJFTU9URV9ORElTX1JF U0VUX01TRzsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgTWVzc2Fn ZVR5cGU7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgU3Rh dHVzOw0KPiArICBVSU5UMzIgICAgU3RhdHVzQnVmZmVyTGVuZ3RoOw0KPiArICBVSU5UMzIgICAg U3RhdHVzQnVmZmVyT2Zmc2V0Ow0KPiArfSBSRU1PVEVfTkRJU19JTkRJQ0FURV9TVEFUVVNfTVNH Ow0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQzMiAgICBEaWFnU3RhdHVzOw0K PiArICBVSU5UMzIgICAgRXJyb3JPZmZzZXQ7DQo+ICt9IFJORElTX0RJQUdOT1NUSUNfSU5GTzsN Cj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ ICsgIFVJTlQzMiAgICBNZXNzYWdlTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgUmVxdWVzdElEOw0K PiArfSBSRU1PVEVfTkRJU19LRUVQQUxJVkVfTVNHOw0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7 DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlVHlwZTsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5n dGg7DQo+ICsgIFVJTlQzMiAgICBSZXF1ZXN0SUQ7DQo+ICsgIFVJTlQzMiAgICBTdGF0dXM7DQo+ ICsgIFVJTlQzMiAgICBNYWpvclZlcnNpb247DQo+ICsgIFVJTlQzMiAgICBNaW5vclZlcnNpb247 DQo+ICsgIFVJTlQzMiAgICBEZXZpY2VGbGFnczsNCj4gKyAgVUlOVDMyICAgIE1lZGl1bTsNCj4g KyAgVUlOVDMyICAgIE1heFBhY2tldHNQZXJUcmFuc2ZlcjsNCj4gKyAgVUlOVDMyICAgIE1heFRy YW5zZmVyU2l6ZTsNCj4gKyAgVUlOVDMyICAgIFBhY2tldEFsaWdubWVudEZhY3RvcjsNCj4gKyAg VUlOVDY0ICAgIFJlc2VydmVkOw0KPiArfSBSRU1PVEVfTkRJU19JTklUSUFMSVpFX0NNUExUOw0K PiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlVHlwZTsNCj4g KyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5ndGg7DQo+ICsgIFVJTlQzMiAgICBSZXF1ZXN0SUQ7DQo+ ICsgIFVJTlQzMiAgICBTdGF0dXM7DQo+ICsgIFVJTlQzMiAgICBJbmZvcm1hdGlvbkJ1ZmZlckxl bmd0aDsNCj4gKyAgVUlOVDMyICAgIEluZm9ybWF0aW9uQnVmZmVyT2Zmc2V0Ow0KPiArfSBSRU1P VEVfTkRJU19RVUVSWV9DTVBMVDsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBSRU1P VEVfTkRJU19RVUVSWV9DTVBMVCAgICBRdWVyeUNtcGx0Ow0KPiArICBVSU5UOCAgICAgICAgICAg ICAgICAgICAgICBBZGRyWzZdOw0KPiArfSBSRU1PVEVfTkRJU19RVUVSWV9NQUNfQ01QTFQ7DQo+ ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgUkVNT1RFX05ESVNfUVVFUllfQ01QTFQgICAg UXVlcnlDbXBsdDsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgTWF4VG90YWxTaXpl Ow0KPiArfSBSRU1PVEVfTkRJU19RVUVSWV9NQVhfVE9UQUxfU0laRV9DTVBMVDsNCj4gKw0KPiAr dHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ICsgIFVJTlQz MiAgICBNZXNzYWdlTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgUmVxdWVzdElEOw0KPiArICBVSU5U MzIgICAgU3RhdHVzOw0KPiArfSBSRU1PVEVfTkRJU19TRVRfQ01QTFQ7DQo+ICsNCj4gK3R5cGVk ZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KPiArICBVSU5UMzIgICAg TWVzc2FnZUxlbmd0aDsNCj4gKyAgVUlOVDMyICAgIFN0YXR1czsNCj4gKyAgVUlOVDMyICAgIEFk ZHJlc3NpbmdSZXNldDsNCj4gK30gUkVNT1RFX05ESVNfUkVTRVRfQ01QTFQ7DQo+ICsNCj4gK3R5 cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KPiArICBVSU5UMzIg ICAgTWVzc2FnZUxlbmd0aDsNCj4gKyAgVUlOVDMyICAgIFJlcXVlc3RJRDsNCj4gKyAgVUlOVDMy ICAgIFN0YXR1czsNCj4gK30gUkVNT1RFX05ESVNfS0VFUEFMSVZFX0NNUExUOw0KPiArDQo+ICt0 eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlVHlwZTsNCj4gKyAgVUlOVDMy ICAgIE1lc3NhZ2VMZW5ndGg7DQo+ICsgIFVJTlQzMiAgICBEYXRhT2Zmc2V0Ow0KPiArICBVSU5U MzIgICAgRGF0YUxlbmd0aDsNCj4gKyAgVUlOVDMyICAgIE91dE9mQmFuZERhdGFPZmZzZXQ7DQo+ ICsgIFVJTlQzMiAgICBPdXRPZkJhbmREYXRhTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgTnVtT3V0 T2ZCYW5kRGF0YUVsZW1lbnRzOw0KPiArICBVSU5UMzIgICAgUGVyUGFja2V0SW5mb09mZnNldDsN Cj4gKyAgVUlOVDMyICAgIFBlclBhY2tldEluZm9MZW5ndGg7DQo+ICsgIFVJTlQzMiAgICBSZXNl cnZlZDE7DQo+ICsgIFVJTlQzMiAgICBSZXNlcnZlZDI7DQo+ICt9IFJFTU9URV9ORElTX1BBQ0tF VF9NU0c7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIFNpemU7DQo+ ICsgIFVJTlQzMiAgICBUeXBlOw0KPiArICBVSU5UMzIgICAgQ2xhc3NJbmZvcm1hdGlvbk9mZnNl dDsNCj4gK30gT1VUX09GX0JBTkRfREFUQV9SRUNPUkQ7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0 IHsNCj4gKyAgVUlOVDMyICAgIFNpemU7DQo+ICsgIFVJTlQzMiAgICBUeXBlOw0KPiArICBVSU5U MzIgICAgQ2xhc3NJbmZvcm1hdGlvbk9mZnNldDsNCj4gK30gUEVSX1BBQ0tFVF9JTkZPX0RBVEFf UkVDT1JEOw0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIExJU1RfRU5UUlkgICAgUGFj a2V0TGlzdDsNCj4gKyAgVUlOVDggICAgICAgICAqT3JnQnVmZmVyOw0KPiArICBVSU5UTiAgICAg ICAgIFJlbWFpbmluZ0xlbmd0aDsNCj4gKyAgVUlOVDggICAgICAgICAqUGFja2V0U3RhcnRCdWZm ZXI7ICAgIC8vIFZhcmlhYmxlIHNpemUgZGF0YSB0byBmb2xsb3cNCj4gK30gUEFDS0VUX0xJU1Q7 DQo+ICsNCj4gKyNwcmFnbWEgcGFjaygpDQo+ICsNCj4gKyNlbmRpZg0KPiBkaWZmIC0tZ2l0IGEv VXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpcy5pbmYgYi9Vc2JOZXR3b3JrUGtnL1VzYlJu ZGlzL1VzYlJuZGlzLmluZg0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAw MDAwLi40YzI5NjFmMWY0DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvVXNiTmV0d29ya1BrZy9V c2JSbmRpcy9Vc2JSbmRpcy5pbmYNCj4gQEAgLTAsMCArMSw0MiBAQA0KPiArIyMgQGZpbGUNCj4g KyMgICBUaGlzIGlzIFVzYiBSbmRpcyBkcml2ZXIgZm9yIERYRSBwaGFzZS4NCj4gKyMNCj4gKyMg Q29weXJpZ2h0IChjKSAyMDIyLCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExD LiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gKyMjDQo+ICsNCj4gK1tEZWZpbmVzXQ0KPiArICBJTkZf VkVSU0lPTiAgICAgICAgICAgICAgICAgICAgPSAweDAwMDEwMDA1DQo+ICsgIEJBU0VfTkFNRSAg ICAgICAgICAgICAgICAgICAgICA9IFVzYlJuZGlzDQo+ICsgIEZJTEVfR1VJRCAgICAgICAgICAg ICAgICAgICAgICA9IDExRTMyQzM0LTYwQjUtNDk5MS04REVBLTYzRDNFOEM4NzZERQ0KPiArICBN T0RVTEVfVFlQRSAgICAgICAgICAgICAgICAgICAgPSBEWEVfRFJJVkVSDQo+ICsgIFZFUlNJT05f U1RSSU5HICAgICAgICAgICAgICAgICA9IDEuMA0KPiArICBFTlRSWV9QT0lOVCAgICAgICAgICAg ICAgICAgICAgPSBVc2JSbmRpc0VudHJ5DQo+ICsNCj4gK1tTb3VyY2VzXQ0KPiArICBVc2JSbmRp cy5jDQo+ICsgIFVzYlJuZGlzLmgNCj4gKyAgVXNiUm5kaXNGdW5jdGlvbi5jDQo+ICsgIENvbXBv bmVudE5hbWUuYw0KPiArDQo+ICtbUGFja2FnZXNdDQo+ICsgIE1kZVBrZy9NZGVQa2cuZGVjDQo+ ICsgIFVzYk5ldHdvcmtQa2cvVXNiTmV0d29ya1BrZy5kZWMNCj4gKw0KPiArW0xpYnJhcnlDbGFz c2VzXQ0KPiArICBVZWZpRHJpdmVyRW50cnlQb2ludA0KPiArICBVZWZpQm9vdFNlcnZpY2VzVGFi bGVMaWINCj4gKyAgVWVmaUxpYg0KPiArICBEZWJ1Z0xpYg0KPiArICBVZWZpVXNiTGliDQo+ICsg IE1lbW9yeUFsbG9jYXRpb25MaWINCj4gKyAgQmFzZU1lbW9yeUxpYg0KPiArDQo+ICtbUHJvdG9j b2xzXQ0KPiArICBnRWZpVXNiSW9Qcm90b2NvbEd1aWQNCj4gKyAgZ0VmaURldmljZVBhdGhQcm90 b2NvbEd1aWQNCj4gKyAgZ0VmaURyaXZlckJpbmRpbmdQcm90b2NvbEd1aWQNCj4gKyAgZ0Vka0lJ VXNiRXRoUHJvdG9jb2xHdWlkDQo+ICsNCj4gK1tEZXBleF0NCj4gKyAgVFJVRQ0KPiBkaWZmIC0t Z2l0IGEvVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpc0Z1bmN0aW9uLmMgYi9Vc2JOZXR3 b3JrUGtnL1VzYlJuZGlzL1VzYlJuZGlzRnVuY3Rpb24uYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KPiBpbmRleCAwMDAwMDAwMDAwLi42MWRmMGIyMTdjDQo+IC0tLSAvZGV2L251bGwNCj4gKysr IGIvVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpc0Z1bmN0aW9uLmMNCj4gQEAgLTAsMCAr MSwxNzU4IEBADQo+ICsvKiogQGZpbGUNCj4gKyAgVGhpcyBmaWxlIGNvbnRhaW5zIGNvZGUgZm9y IFVTQiBFdGhlcm5ldCBkZXNjcmlwdG9yDQo+ICsgIGFuZCBzcGVjaWZpYyByZXF1ZXN0cyBpbXBs ZW1lbnQuDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDIyLCBBbWVyaWNhbiBNZWdhdHJlbmRz IEludGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKyAgU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gKyoqLw0KPiArDQo+ICsj aW5jbHVkZSAiVXNiUm5kaXMuaCINCj4gKw0KPiArVUlOVDE2ICBnU3RvcEJ1bGtJbkNudCAgPSAw Ow0KPiArVUlOVDE2ICBnQmxvY2tCdWxrSW5DbnQgPSAwOw0KPiArDQo+ICsvKioNCj4gKyAgTG9h ZCBBbGwgb2YgZGV2aWNlIGRlc2NyaXB0b3IuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVXNiSW8g ICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX1VTQl9JT19QUk9UT0NPTCBpbnN0 YW5jZS4NCj4gKyAgQHBhcmFtW291dF0gQ29uZmlnRGVzYyAgICAgICAgICAgIEEgcG9pbnRlciB0 byB0aGUgY29uZmlndXJhdGlvbiBkZXNjcmlwdG9yLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAg QHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgVGhlIHJlcXVlc3QgY291bGQgbm90IGJlIGNv bXBsZXRlZCBiZWNhdXNlIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi dWZmZXIgc3BlY2lmaWVkIGJ5IERlc2NyaXB0b3JMZW5ndGggYW5kIERlc2NyaXB0b3INCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IGxhcmdlIGVub3VnaCB0byBob2xk IHRoZSByZXN1bHQgb2YgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAg ICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEBy ZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBk ZXZpY2UgZXJyb3IuIFRoZSB0cmFuc2Zlcg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdGF0dXMgaXMgcmV0dXJuZWQgaW4gU3RhdHVzLg0KPiArKiovDQo+ICtFRklfU1RBVFVT DQo+ICtMb2FkQWxsRGVzY3JpcHRvciAoDQo+ICsgIElOICBFRklfVVNCX0lPX1BST1RPQ09MICAg ICAgICAqVXNiSW8sDQo+ICsgIE9VVCBFRklfVVNCX0NPTkZJR19ERVNDUklQVE9SICAqKkNvbmZp Z0Rlc2MNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICBTdGF0 dXM7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgIFRyYW5zU3RhdHVzOw0KPiArICBF RklfVVNCX0NPTkZJR19ERVNDUklQVE9SICBUbXA7DQo+ICsNCj4gKyAgU3RhdHVzID0gVXNiSW8t PlVzYkdldENvbmZpZ0Rlc2NyaXB0b3IgKFVzYklvLCAmVG1wKTsNCj4gKyAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTpVc2JHZXRDb25m aWdEZXNjcmlwdG9yIHN0YXR1cyA9ICVyXG4iLCBfX0ZVTkNUSU9OX18sIFN0YXR1cykpOw0KPiAr ICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPkFsbG9j YXRlUG9vbCAoDQo+ICsgICAgICAgICAgICAgICAgICBFZmlCb290U2VydmljZXNEYXRhLA0KPiAr ICAgICAgICAgICAgICAgICAgVG1wLlRvdGFsTGVuZ3RoLA0KPiArICAgICAgICAgICAgICAgICAg KFZPSUQgKiopQ29uZmlnRGVzYw0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTogQWxs b2NhdGVQb29sIHN0YXR1cyA9ICVyXG4iLCBfX0ZVTkNUSU9OX18sIFN0YXR1cykpOw0KPiArICAg IHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBVc2JHZXREZXNjcmlw dG9yICgNCj4gKyAgICAgICAgICAgICBVc2JJbywNCj4gKyAgICAgICAgICAgICBVU0JfREVTQ19U WVBFX0NPTkZJRyA8PCA4IHwgKFRtcC5Db25maWd1cmF0aW9uVmFsdWUgLSAxKSwgICAgICAgICAg ICAgICAgIC8vIHplcm8gYmFzZWQNCj4gKyAgICAgICAgICAgICAwLA0KPiArICAgICAgICAgICAg IFRtcC5Ub3RhbExlbmd0aCwNCj4gKyAgICAgICAgICAgICAqQ29uZmlnRGVzYywNCj4gKyAgICAg ICAgICAgICAmVHJhbnNTdGF0dXMNCj4gKyAgICAgICAgICAgICApOw0KPiArICByZXR1cm4gU3Rh dHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmV0dXJucyBwb2ludGVyIHRvIHRoZSBuZXh0 IGRlc2NyaXB0b3IgZm9yIHRoZSBwYWNrIG9mIFVTQiBkZXNjcmlwdG9ycw0KPiArICBsb2NhdGVk IGluIGNvbnRpbnVlcyBtZW1vcnkgc2VnbWVudA0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICBE ZXNjICAgQSBwb2ludGVyIHRvIHRoZSBDT05GSUdfREVTQ1JJUFRPUiBpbnN0YW5jZS4NCj4gKyAg QHBhcmFtW2luLCBvdXRdIE9mZnNldCBBIHBvaW50ZXIgdG8gdGhlIHN1bSBvZiBkZXNjcmlwdG9y IGxlbmd0aC4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBz dWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRkFMU0UgIE5vIG5leHQgZGVzY3JpcHRvci4NCj4g Kw0KPiArKiovDQo+ICtCT09MRUFODQo+ICtOZXh0RGVzY3JpcHRvciAoDQo+ICsgIElOICAgICAg RUZJX1VTQl9DT05GSUdfREVTQ1JJUFRPUiAgKkRlc2MsDQo+ICsgIElOIE9VVCAgVUlOVE4gICAg ICAgICAgICAgICAgICAgICAgKk9mZnNldA0KPiArICApDQo+ICt7DQo+ICsgIGlmICgoRGVzYyA9 PSBOVUxMKSB8fCAoKk9mZnNldCA+PSBEZXNjLT5Ub3RhbExlbmd0aCkpIHsNCj4gKyAgICByZXR1 cm4gRkFMU0U7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoKChFRklfVVNCX0NPTkZJR19ERVNDUklQ VE9SICopKChjaGFyICopRGVzYysqT2Zmc2V0KSktPkxlbmd0aCA9PSAwKSB7DQo+ICsgICAgcmV0 dXJuIEZBTFNFOw0KPiArICB9DQo+ICsNCj4gKyAgKk9mZnNldCArPSAoKEVGSV9VU0JfQ09ORklH X0RFU0NSSVBUT1IgKikoKGNoYXIgKilEZXNjKypPZmZzZXQpKS0+TGVuZ3RoOw0KPiArICBpZiAo ICpPZmZzZXQgPj0gRGVzYy0+VG90YWxMZW5ndGggKSB7DQo+ICsgICAgcmV0dXJuIEZBTFNFOw0K PiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIFRSVUU7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBS ZWFkIEZ1bmN0aW9uIGRlc2NyaXB0b3INCj4gKw0KPiArICBAcGFyYW1baW5dICBDb25maWcgICAg ICAgICAgICAgQSBwb2ludGVyIHRvIGFsbCBvZiBjb25maWd1cmF0aW9uLg0KPiArICBAcGFyYW1b aW5dICBGdW5EZXNjcmlwdG9yVHlwZSAgVVNCIENEQyBjbGFzcyBkZXNjcmlwdG9yIFN1YlR5cGUu DQo+ICsgIEBwYXJhbVtvdXRdIERhdGFCdWZmZXIgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIERh dGEgb2YgY29ycmVzcG9uZGluZyB0byBkZXZpY2UgY2FwYWJpbGl0eS4NCj4gKw0KPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICBUaGUgZGV2aWNlIGNhcGFiaWxpdHkgZGVzY3JpcHRvciB3 YXMgcmV0cmlldmVkDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWxs eS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgTm8gc3VwcG9ydGVkLg0KPiArICBA cmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICBUaGUgZGV2aWNlIGNhcGFiaWxpdHkgZGVzY3JpcHRv ciB3YXMgbm90IGZvdW5kLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0dldEZ1bmN0 aW9uYWxEZXNjcmlwdG9yICgNCj4gKyAgSU4gIEVGSV9VU0JfQ09ORklHX0RFU0NSSVBUT1IgICpD b25maWcsDQo+ICsgIElOICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICBGdW5EZXNjcmlwdG9y VHlwZSwNCj4gKyAgT1VUIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICpEYXRhQnVmZmVyDQo+ ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0K PiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXQ7DQo+ICsgIEVGSV9VU0Jf SU5URVJGQUNFX0RFU0NSSVBUT1IgICpJbnRlcmZhY2U7DQo+ICsNCj4gKyAgU3RhdHVzID0gRUZJ X05PVF9GT1VORDsNCj4gKw0KPiArICBmb3IgKE9mZnNldCA9IDA7IE5leHREZXNjcmlwdG9yIChD b25maWcsICZPZmZzZXQpOykgew0KPiArICAgIEludGVyZmFjZSA9IChFRklfVVNCX0lOVEVSRkFD RV9ERVNDUklQVE9SICopKChVSU5UOCAqKUNvbmZpZyArIE9mZnNldCk7DQo+ICsgICAgaWYgKElu dGVyZmFjZS0+RGVzY3JpcHRvclR5cGUgPT0gQ1NfSU5URVJGQUNFKSB7DQo+ICsgICAgICBpZiAo KChVU0JfSEVBREVSX0ZVTl9ERVNDUklQVE9SICopSW50ZXJmYWNlKS0+RGVzY3JpcHRvclN1YnR5 cGUgPT0gRnVuRGVzY3JpcHRvclR5cGUpIHsNCj4gKyAgICAgICAgc3dpdGNoIChGdW5EZXNjcmlw dG9yVHlwZSkgew0KPiArICAgICAgICAgIGNhc2UgSEVBREVSX0ZVTl9ERVNDUklQVE9SOg0KPiAr ICAgICAgICAgICAgQ29weU1lbSAoDQo+ICsgICAgICAgICAgICAgIERhdGFCdWZmZXIsDQo+ICsg ICAgICAgICAgICAgIChVU0JfSEVBREVSX0ZVTl9ERVNDUklQVE9SICopSW50ZXJmYWNlLA0KPiAr ICAgICAgICAgICAgICBzaXplb2YgKFVTQl9IRUFERVJfRlVOX0RFU0NSSVBUT1IpDQo+ICsgICAg ICAgICAgICAgICk7DQo+ICsgICAgICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICsgICAg ICAgICAgY2FzZSBVTklPTl9GVU5fREVTQ1JJUFRPUjoNCj4gKyAgICAgICAgICAgIENvcHlNZW0g KA0KPiArICAgICAgICAgICAgICBEYXRhQnVmZmVyLA0KPiArICAgICAgICAgICAgICAoVVNCX1VO SU9OX0ZVTl9ERVNDUklQVE9SICopSW50ZXJmYWNlLA0KPiArICAgICAgICAgICAgICAoKFVTQl9V TklPTl9GVU5fREVTQ1JJUFRPUiAqKUludGVyZmFjZSktPkZ1bmN0aW9uTGVuZ3RoDQo+ICsgICAg ICAgICAgICAgICk7DQo+ICsgICAgICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICsgICAg ICAgICAgY2FzZSBFVEhFUk5FVF9GVU5fREVTQ1JJUFRPUjoNCj4gKyAgICAgICAgICAgIENvcHlN ZW0gKA0KPiArICAgICAgICAgICAgICBEYXRhQnVmZmVyLA0KPiArICAgICAgICAgICAgICAoVVNC X0VUSEVSTkVUX0ZVTl9ERVNDUklQVE9SICopSW50ZXJmYWNlLA0KPiArICAgICAgICAgICAgICBz aXplb2YgKFVTQl9FVEhFUk5FVF9GVU5fREVTQ1JJUFRPUikNCj4gKyAgICAgICAgICAgICAgKTsN Cj4gKyAgICAgICAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gKyAgICAgICAgICBkZWZhdWx0 Og0KPiArICAgICAgICAgICAgU3RhdHVzID0gRUZJX1VOU1VQUE9SVEVEOw0KPiArICAgICAgICAg ICAgYnJlYWs7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsgIH0NCj4g Kw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgR2V0IFVTQiBF dGhlcm5ldCBJTyBlbmRwb2ludCBhbmQgVVNCIENEQyBkYXRhIElPIGVuZHBvaW50Lg0KPiArDQo+ ICsgIEBwYXJhbVtpbl0gICAgICBVc2JJbyAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklf VVNCX0lPX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW4sIG91dF0gVXNiUm5kaXNE ZXZpY2UgIEEgcG9pbnRlciB0byB0aGUgVVNCX1JORElTX0RFVklDRSBpbnN0YW5jZS4NCj4gKw0K PiArKiovDQo+ICtWT0lEDQo+ICtHZXRFbmRwb2ludCAoDQo+ICsgIElOICAgICAgRUZJX1VTQl9J T19QUk9UT0NPTCAgKlVzYklvLA0KPiArICBJTiBPVVQgIFVTQl9STkRJU19ERVZJQ0UgICAgICpV c2JSbmRpc0RldmljZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAg ICAgICAgIFN0YXR1czsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7 DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdDsNCj4gKyAgRUZJX1VT Ql9JTlRFUkZBQ0VfREVTQ1JJUFRPUiAgSW50ZXJmYWNlOw0KPiArICBFRklfVVNCX0VORFBPSU5U X0RFU0NSSVBUT1IgICBFbmRwb2ludDsNCj4gKw0KPiArICBTdGF0dXMgPSBVc2JJby0+VXNiR2V0 SW50ZXJmYWNlRGVzY3JpcHRvciAoVXNiSW8sICZJbnRlcmZhY2UpOw0KPiArICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOlVzYkdldElu dGVyZmFjZURlc2NyaXB0b3Igc3RhdHVzID0gJXJcbiIsIF9fRlVOQ1RJT05fXywgU3RhdHVzKSk7 DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKEludGVyZmFjZS5OdW1FbmRw b2ludHMgPT0gMCApIHsNCj4gKyAgICBTdGF0dXMgPSBVc2JTZXRJbnRlcmZhY2UgKFVzYklvLCAx LCAwLCAmUmVzdWx0KTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAg ICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6VXNiU2V0SW50ZXJmYWNlIHN0YXR1cyA9ICVyXG4i LCBfX0ZVTkNUSU9OX18sIFN0YXR1cykpOw0KPiArICAgICAgcmV0dXJuOw0KPiArICAgIH0NCj4g Kw0KPiArICAgIFN0YXR1cyA9IFVzYklvLT5Vc2JHZXRJbnRlcmZhY2VEZXNjcmlwdG9yIChVc2JJ bywgJkludGVyZmFjZSk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAg ICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOlVzYkdldEludGVyZmFjZURlc2NyaXB0b3Igc3Rh dHVzID0gJXJcbiIsIF9fRlVOQ1RJT05fXywgU3RhdHVzKSk7DQo+ICsgICAgICByZXR1cm47DQo+ ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgSW50ZXJm YWNlLk51bUVuZHBvaW50czsgSW5kZXgrKykgew0KPiArICAgIFN0YXR1cyA9IFVzYklvLT5Vc2JH ZXRFbmRwb2ludERlc2NyaXB0b3IgKFVzYklvLCBJbmRleCwgJkVuZHBvaW50KTsNCj4gKyAgICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAi JWE6VXNiR2V0RW5kcG9pbnREZXNjcmlwdG9yIHN0YXR1cyA9ICVyXG4iLCBfX0ZVTkNUSU9OX18s IFN0YXR1cykpOw0KPiArICAgICAgcmV0dXJuOw0KPiArICAgIH0NCj4gKw0KPiArICAgIHN3aXRj aCAoKEVuZHBvaW50LkF0dHJpYnV0ZXMgJiAoQklUMCB8IEJJVDEpKSkgew0KPiArICAgICAgY2Fz ZSBVU0JfRU5EUE9JTlRfQlVMSzoNCj4gKyAgICAgICAgaWYgKEVuZHBvaW50LkVuZHBvaW50QWRk cmVzcyAmIEJJVDcpIHsNCj4gKyAgICAgICAgICBVc2JSbmRpc0RldmljZS0+QnVsa0luRW5kcG9p bnQgPSBFbmRwb2ludC5FbmRwb2ludEFkZHJlc3M7DQo+ICsgICAgICAgIH0gZWxzZSB7DQo+ICsg ICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPkJ1bGtPdXRFbmRwb2ludCA9IEVuZHBvaW50LkVuZHBv aW50QWRkcmVzczsNCj4gKyAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgIGJyZWFrOw0KPiArICAg ICAgY2FzZSBVU0JfRU5EUE9JTlRfSU5URVJSVVBUOg0KPiArICAgICAgICBVc2JSbmRpc0Rldmlj ZS0+SW50ZXJydXBFbmRwb2ludCA9IEVuZHBvaW50LkVuZHBvaW50QWRkcmVzczsNCj4gKyAgICAg ICAgYnJlYWs7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBBc3lu YyBVU0IgdHJhbnNmZXIgY2FsbGJhY2sgcm91dGluZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBE YXRhICAgICAgICAgICAgRGF0YSByZWNlaXZlZCBvciBzZW50IHZpYSB0aGUgVVNCIEFzeW5jaHJv bm91cyBUcmFuc2ZlciwgaWYgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 cmFuc2ZlciBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcGFyYW1baW5dICBEYXRhTGVu Z3RoICAgICAgVGhlIGxlbmd0aCBvZiBEYXRhIHJlY2VpdmVkIG9yIHNlbnQgdmlhIHRoZSBBc3lu Y2hyb25vdXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZmVyLCBpZiB0 cmFuc2ZlciBzdWNjZXNzZnVsbHkgY29tcGxldGVzLg0KPiArICBAcGFyYW1baW5dICBDb250ZXh0 ICAgICAgICAgRGF0YSBwYXNzZWQgZnJvbSBVc2JBc3luY0ludGVycnVwdFRyYW5zZmVyKCkgcmVx dWVzdC4NCj4gKyAgQHBhcmFtW2luXSAgU3RhdHVzICAgICAgICAgIEluZGljYXRlcyB0aGUgcmVz dWx0IG9mIHRoZSBhc3luY2hyb25vdXMgdHJhbnNmZXIuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICAgVGhlIGFzeW5jaHJvbm91cyBVU0IgdHJhbnNmZXIgcmVxdWVzdCBo YXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9F UlJPUiAgICAgIFRoZSBhc3luY2hyb25vdXMgVVNCIHRyYW5zZmVyIHJlcXVlc3QgZmFpbGVkLg0K PiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArSW50ZXJydXB0Q2FsbGJh Y2sgKA0KPiArICBJTiAgVk9JRCAgICAqRGF0YSwNCj4gKyAgSU4gIFVJTlROICAgRGF0YUxlbmd0 aCwNCj4gKyAgSU4gIFZPSUQgICAgKkNvbnRleHQsDQo+ICsgIElOICBVSU5UMzIgIFN0YXR1cw0K PiArICApDQo+ICt7DQo+ICsgIGlmICgoKEVGSV9VU0JfREVWSUNFX1JFUVVFU1QgKilEYXRhKS0+ UmVxdWVzdCA9PSAwKSB7DQo+ICsgICAgQ29weU1lbSAoDQo+ICsgICAgICAoRUZJX1VTQl9ERVZJ Q0VfUkVRVUVTVCAqKUNvbnRleHQsDQo+ICsgICAgICAoRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCAq KURhdGEsDQo+ICsgICAgICBzaXplb2YgKEVGSV9VU0JfREVWSUNFX1JFUVVFU1QpDQo+ICsgICAg ICApOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIG1hbmFnZSBhIFVTQiBkZXZpY2Ug d2l0aCBhbiBpbnRlcnJ1cHQgdHJhbnNmZXIgcGlwZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBU aGlzICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9U T0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgSXNOZXdUcmFuc2ZlciAgICAgSWYgVFJV RSwgYSBuZXcgdHJhbnNmZXIgd2lsbCBiZSBzdWJtaXR0ZWQgdG8gVVNCIGNvbnRyb2xsZXIuIElm DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLCB0aGUgaW50ZXJydXB0 IHRyYW5zZmVyIGlzIGRlbGV0ZWQgZnJvbSB0aGUgZGV2aWNlJ3MgaW50ZXJydXB0DQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyIHF1ZXVlLg0KPiArICBAcGFyYW1b aW5dICBQb2xsaW5nSW50ZXJ2YWwgICBJbmRpY2F0ZXMgdGhlIHBlcmlvZGljIHJhdGUsIGluIG1p bGxpc2Vjb25kcywgdGhhdCB0aGUgdHJhbnNmZXIgaXMgdG8gYmUNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZXhlY3V0ZWQuVGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgd2hl biBJc05ld1RyYW5zZmVyIGlzIFRSVUUuIFRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMSB0byAyNTUsIG90aGVyd2lzZSBFRklfSU5W QUxJRF9QQVJBTUVURVIgaXMgcmV0dXJuZWQuDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFRoZSB1bml0cyBhcmUgaW4gbWlsbGlzZWNvbmRzLg0KPiArICBAcGFyYW1baW5dICBS ZXF1ZXN0ICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9VU0JfREVWSUNFX1JFUVVFU1Qg ZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgYXN5bmNo cm9ub3VzIFVTQiB0cmFuc2ZlciByZXF1ZXN0IHRyYW5zZmVyIGhhcyBiZWVuIHN1Y2Nlc3NmdWxs eSBleGVjdXRlZC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIGFzeW5j aHJvbm91cyBVU0IgdHJhbnNmZXIgcmVxdWVzdCBmYWlsZWQuDQo+ICsNCj4gKyoqLw0KPiArRUZJ X1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVc2JSbmRpc0ludGVycnVwdCAoDQo+ICsgIElOIEVES0lJ X1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIEJPT0xFQU4gICAgICAgICAg ICAgICAgICAgICAgSXNOZXdUcmFuc2ZlciwNCj4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAg ICAgICAgICBQb2xsaW5nSW50ZXJ2YWwsDQo+ICsgIElOIEVGSV9VU0JfREVWSUNFX1JFUVVFU1Qg ICAgICAgKlJlcXVzdA0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgIFN0YXR1 czsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAgKlVzYlJuZGlzRGV2aWNlOw0KPiArICBVSU5UTiAg ICAgICAgICAgICBEYXRhTGVuZ3RoOw0KPiArDQo+ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JO RElTX0RFVklDRV9GUk9NX1RISVMgKFRoaXMpOw0KPiArICBEYXRhTGVuZ3RoICAgICA9IDA7DQo+ ICsNCj4gKyAgaWYgKElzTmV3VHJhbnNmZXIgPT0gVFJVRSkgew0KPiArICAgIERhdGFMZW5ndGgg PSBzaXplb2YgKEVGSV9VU0JfREVWSUNFX1JFUVVFU1QpICsgc2l6ZW9mIChVU0JfQ09OTkVDVF9T UEVFRF9DSEFOR0UpOw0KPiArICAgIFN0YXR1cyAgICAgPSBVc2JSbmRpc0RldmljZS0+VXNiSW8t PlVzYkFzeW5jSW50ZXJydXB0VHJhbnNmZXIgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYklvLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPkludGVycnVwRW5k cG9pbnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJc05l d1RyYW5zZmVyLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UG9sbGluZ0ludGVydmFsLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRGF0YUxlbmd0aCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEludGVycnVwdENhbGxiYWNrLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVxdXN0DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOw0KPiArDQo+ICsgICAgaWYgKFN0YXR1cyA9PSBFRklfSU5WQUxJRF9QQVJB TUVURVIpIHsNCj4gKyAgICAgIC8vIEJlY2F1c2Ugb2YgU3RhY2tlZCBBc3luY0ludGVycnVwdCBy ZXF1ZXN0IGFyZSBub3Qgc3VwcG9ydGVkDQo+ICsgICAgICBTdGF0dXMgPSBVc2JSbmRpc0Rldmlj ZS0+VXNiSW8tPlVzYkFzeW5jSW50ZXJydXB0VHJhbnNmZXIgKA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Vc2JJbywNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+SW50ZXJy dXBFbmRwb2ludCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE5VTEwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOw0KPiArICAgIH0NCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBTdGF0dXMgPSBV c2JSbmRpc0RldmljZS0+VXNiSW8tPlVzYkFzeW5jSW50ZXJydXB0VHJhbnNmZXIgKA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+VXNiSW8s DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNl LT5JbnRlcnJ1cEVuZHBvaW50LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBJc05ld1RyYW5zZmVyLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAwLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0K PiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlYWQgVVNC IGludGVycnVwdCB0cmFuc2ZlciBiZWZvcmUgdGhlIHJlc3BvbnNlIFJORElTIG1lc3NhZ2UuDQo+ ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBV U0JfUk5ESVNfREVWSUNFIGluc3RhbmNlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgIFRoZSBVU0IgaW50ZXJydXB0IHRyYW5zZmVyIGhhcyBiZWVuIHN1Y2Nlc3NmdWxs eSBleGVjdXRlZC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIFVTQiBp bnRlcnJ1cHQgdHJhbnNmZXIgZmFpbGVkLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4g K0VGSUFQSQ0KPiArUmVhZFJuZGlzUmVzcG9uc2VJbnRlcnJ1cHQgKA0KPiArICBJTiBVU0JfUk5E SVNfREVWSUNFICAqVXNiUm5kaXNEZXZpY2UNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVT ICBTdGF0dXM7DQo+ICsgIFVJTlQzMiAgICAgIERhdGFbMl07DQo+ICsgIFVJTlQzMiAgICAgIFVz YlN0YXR1czsNCj4gKyAgVUlOVE4gICAgICAgRGF0YUxlbmd0aDsNCj4gKw0KPiArICBEYXRhTGVu Z3RoID0gODsNCj4gKw0KPiArICBaZXJvTWVtIChEYXRhLCBzaXplb2YgKERhdGEpKTsNCj4gKw0K PiArICBTdGF0dXMgPSBVc2JSbmRpc0RldmljZS0+VXNiSW8tPlVzYlN5bmNJbnRlcnJ1cHRUcmFu c2ZlciAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0Rl dmljZS0+VXNiSW8sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JS bmRpc0RldmljZS0+SW50ZXJydXBFbmRwb2ludCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZEYXRhLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJkRhdGFMZW5ndGgsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw eDIwLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlVzYlN0YXR1cw0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICByZXR1 cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVzIHRoZSBVU0IgRXRo ZXJuZXQgTWFjIEFkZHJlc3MuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICBB IHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4g KyAgQHBhcmFtW291dF0gTWFjQWRkcmVzcyAgICBBIHBvaW50ZXIgdG8gdGhlIGNhbGxlciBhbGxv Y2F0ZWQgVVNCIEV0aGVybmV0IE1hYyBBZGRyZXNzLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgIFRoZSBVU0IgSGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMg cmV0cmlldmVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVU RVIgVXNiSGVhZGVyRnVuRGVzY3JpcHRvciBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9OT1Rf Rk9VTkQgICAgICAgICBUaGUgVVNCIEhlYWRlciBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzIG5v dCBmb3VuZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0dldFVz YkV0aE1hY0FkZHJlc3MgKA0KPiArICBJTiAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAq VGhpcywNCj4gKyAgT1VUIEVGSV9NQUNfQUREUkVTUyAgICAgICAgICAgICAgKk1hY0FkZHJlc3MN Cj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0YXR1czsN Cj4gKyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgICAgICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsg IFVTQl9FVEhFUk5FVF9GVU5fREVTQ1JJUFRPUiAgVXNiRXRoRGVzY3JpcHRvcjsNCj4gKyAgQ0hB UjE2ICAgICAgICAgICAgICAgICAgICAgICAqRGF0YTsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAg ICAgICAgICAgICAqRGF0YVB0cjsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICBU bXBTdHJbMV07DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsg IFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgSGk7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAg ICAgICAgICAgICAgTG93Ow0KPiArDQo+ICsgIFJFTU9URV9ORElTX1FVRVJZX01BQ19NU0cgICAg Um5kaXNRdWVyeU1zZzsNCj4gKyAgUkVNT1RFX05ESVNfUVVFUllfTUFDX0NNUExUICBSbmRpc1F1 ZXJ5TXNnQ21wbHQ7DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNF X0ZST01fVEhJUyAoVGhpcyk7DQo+ICsNCj4gKyAgWmVyb01lbSAoJlJuZGlzUXVlcnlNc2csIHNp emVvZiAoUkVNT1RFX05ESVNfUVVFUllfTUFDX01TRykpOw0KPiArICBaZXJvTWVtICgmUm5kaXNR dWVyeU1zZ0NtcGx0LCBzaXplb2YgKFJFTU9URV9ORElTX1FVRVJZX01BQ19DTVBMVCkpOw0KPiAr DQo+ICsgIFJuZGlzUXVlcnlNc2cuUXVlcnlNc2cuTWVzc2FnZVR5cGUgICA9IFJORElTX1FVRVJZ X01TRzsNCj4gKyAgUm5kaXNRdWVyeU1zZy5RdWVyeU1zZy5NZXNzYWdlTGVuZ3RoID0gc2l6ZW9m IChSRU1PVEVfTkRJU19RVUVSWV9NQUNfTVNHKTsNCj4gKyAgUm5kaXNRdWVyeU1zZy5RdWVyeU1z Zy5SZXF1ZXN0SUQgICAgID0gVXNiUm5kaXNEZXZpY2UtPlJlcXVlc3RJZDsNCj4gKyAgUm5kaXNR dWVyeU1zZy5RdWVyeU1zZy5PaWQgICAgICAgICAgID0gT0lEXzgwMl8zX0NVUlJFTlRfQUREUkVT UzsNCj4gKw0KPiArICBSbmRpc1F1ZXJ5TXNnQ21wbHQuUXVlcnlDbXBsdC5NZXNzYWdlVHlwZSAg ID0gUk5ESVNfUVVFUllfQ01QTFQ7DQo+ICsgIFJuZGlzUXVlcnlNc2dDbXBsdC5RdWVyeUNtcGx0 Lk1lc3NhZ2VMZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElTX1FVRVJZX01BQ19DTVBMVCk7DQo+ ICsNCj4gKyAgU3RhdHVzID0gUm5kaXNDb250cm9sTXNnICgNCj4gKyAgICAgICAgICAgICBVc2JS bmRpc0RldmljZSwNCj4gKyAgICAgICAgICAgICAoUkVNT1RFX05ESVNfTVNHX0hFQURFUiAqKSZS bmRpc1F1ZXJ5TXNnLA0KPiArICAgICAgICAgICAgIChSRU1PVEVfTkRJU19NU0dfSEVBREVSICop JlJuZGlzUXVlcnlNc2dDbXBsdA0KPiArICAgICAgICAgICAgICk7DQo+ICsgIGlmICghRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ICsgICAgREVCVUcgKChERUJVR19JTkZPLCAiU3VjY2VzcyB0byBn ZXQgTWFjIGFkZHJlc3MgZnJvbSBSTkRJUyBtZXNzYWdlLlxuIikpOw0KPiArICAgIGZvciAoSW5k ZXggPSAwOyBJbmRleCA8IFBYRV9IV0FERFJfTEVOX0VUSEVSOyBJbmRleCsrKSB7DQo+ICsgICAg ICBNYWNBZGRyZXNzLT5BZGRyW0luZGV4XSA9IFJuZGlzUXVlcnlNc2dDbXBsdC5BZGRyW0luZGV4 XTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBVc2JSbmRpc0RldmljZS0+UmVxdWVzdElkKys7DQo+ ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vIElmIGl0IGlzIG5vdCBz dXBwb3J0IHRoZSBPSURfODAyXzNfQ1VSUkVOVF9BRERSRVNTLg0KPiArICAvLyBUbyBjaGVjayBV U0IgRXRoZXJuZXQgZnVuY3Rpb25hbCBEZXNjcmlwdG9yDQo+ICsgIFN0YXR1cyA9IFRoaXMtPlVz YkV0aEZ1bkRlc2NyaXB0b3IgKFRoaXMsICZVc2JFdGhEZXNjcmlwdG9yKTsNCj4gKyAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTpVc2JF dGhGdW5EZXNjcmlwdG9yIHN0YXR1cyA9ICVyXG4iLCBfX0ZVTkNUSU9OX18sIFN0YXR1cykpOw0K PiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBVc2JSbmRp c0RldmljZS0+VXNiSW8tPlVzYkdldFN0cmluZ0Rlc2NyaXB0b3IgKA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYklvLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDksICAgICAgICAgICAgICAgICAgICAg ICAvLyBFbmdsaXNoLVVTIExhbmd1YWdlIElEDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBVc2JFdGhEZXNjcmlwdG9yLk1hY0FkZHJlc3MsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmRGF0YQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIERF QlVHICgoREVCVUdfRVJST1IsICIlYTpVc2JHZXRTdHJpbmdEZXNjcmlwdG9yIHN0YXR1cyA9ICVy XG4iLCBfX0ZVTkNUSU9OX18sIFN0YXR1cykpOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsg IH0NCj4gKw0KPiArICBEYXRhUHRyID0gRGF0YTsNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4 IDwgUFhFX0hXQUREUl9MRU5fRVRIRVI7IEluZGV4KyspIHsNCj4gKyAgICBDb3B5TWVtIChUbXBT dHIsIERhdGFQdHIsIHNpemVvZiAoQ0hBUjE2KSk7DQo+ICsgICAgRGF0YVB0cisrOw0KPiArICAg IEhpID0gKFVJTlQ4KVN0ckhleFRvVWludG4gKFRtcFN0cik7DQo+ICsgICAgQ29weU1lbSAoVG1w U3RyLCBEYXRhUHRyLCBzaXplb2YgKENIQVIxNikpOw0KPiArICAgIERhdGFQdHIrKzsNCj4gKyAg ICBMb3cgICAgICAgICAgICAgICAgICAgICA9IChVSU5UOClTdHJIZXhUb1VpbnRuIChUbXBTdHIp Ow0KPiArICAgIE1hY0FkZHJlc3MtPkFkZHJbSW5kZXhdID0gKEhpIDw8IDQpIHwgTG93Ow0KPiAr ICB9DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJl dHJpZXZlcyB0aGUgVVNCIEV0aGVybmV0IEJ1bGsgdHJhbnNmZXIgZGF0YSBzaXplLg0KPiArDQo+ ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0Jf RVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtvdXRdIEJ1bGtTaXplICAg ICAgQSBwb2ludGVyIHRvIHRoZSBCdWxrIHRyYW5zZmVyIGRhdGEgc2l6ZS4NCj4gKw0KPiArICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFRoZSBidWxrIHRyYW5zZmVyIGRhdGEgc2l6ZSB3YXMg cmV0cmlldmVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBvdGhlciAgICAgICAgICAgICBG YWlsZWQgdG8gcmV0cmlldmUgdGhlIGJ1bGsgdHJhbnNmZXIgZGF0YSBzaXplLg0KPiArDQo+ICsq Ki8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVXNiRXRoQnVsa1NpemUgKA0KPiArICBJ TiAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgT1VUIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICAgKkJ1bGtTaXplDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NU QVRVUyAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIFVTQl9FVEhFUk5FVF9GVU5fREVT Q1JJUFRPUiAgVXNiRXRoRnVuRGVzY3JpcHRvcjsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAgICAg ICAgICAgICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsNCj4gKyAgUkVNT1RFX05ESVNfUVVFUllfTUFY X1RPVEFMX1NJWkVfTVNHICAgIFJuZGlzUXVlcnlNc2c7DQo+ICsgIFJFTU9URV9ORElTX1FVRVJZ X01BWF9UT1RBTF9TSVpFX0NNUExUICBSbmRpc1F1ZXJ5TXNnQ21wbHQ7DQo+ICsNCj4gKyAgVXNi Um5kaXNEZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNFX0ZST01fVEhJUyAoVGhpcyk7DQo+ICsNCj4g KyAgWmVyb01lbSAoJlJuZGlzUXVlcnlNc2csIHNpemVvZiAoUkVNT1RFX05ESVNfUVVFUllfTUFY X1RPVEFMX1NJWkVfTVNHKSk7DQo+ICsgIFplcm9NZW0gKCZSbmRpc1F1ZXJ5TXNnQ21wbHQsIHNp emVvZiAoUkVNT1RFX05ESVNfUVVFUllfTUFYX1RPVEFMX1NJWkVfQ01QTFQpKTsNCj4gKw0KPiAr ICBSbmRpc1F1ZXJ5TXNnLlF1ZXJ5TXNnLk1lc3NhZ2VUeXBlICAgPSBSTkRJU19RVUVSWV9NU0c7 DQo+ICsgIFJuZGlzUXVlcnlNc2cuUXVlcnlNc2cuTWVzc2FnZUxlbmd0aCA9IHNpemVvZiAoUkVN T1RFX05ESVNfUVVFUllfTUFYX1RPVEFMX1NJWkVfTVNHKTsNCj4gKyAgUm5kaXNRdWVyeU1zZy5R dWVyeU1zZy5SZXF1ZXN0SUQgICAgID0gVXNiUm5kaXNEZXZpY2UtPlJlcXVlc3RJZDsNCj4gKyAg Um5kaXNRdWVyeU1zZy5RdWVyeU1zZy5PaWQgICAgICAgICAgID0gT0lEX0dFTl9NQVhJTVVNX1RP VEFMX1NJWkU7DQo+ICsNCj4gKyAgUm5kaXNRdWVyeU1zZ0NtcGx0LlF1ZXJ5Q21wbHQuTWVzc2Fn ZVR5cGUgICA9IFJORElTX1FVRVJZX0NNUExUOw0KPiArICBSbmRpc1F1ZXJ5TXNnQ21wbHQuUXVl cnlDbXBsdC5NZXNzYWdlTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJU19RVUVSWV9NQVhfVE9U QUxfU0laRV9DTVBMVCk7DQo+ICsNCj4gKyAgU3RhdHVzID0gUm5kaXNDb250cm9sTXNnICgNCj4g KyAgICAgICAgICAgICBVc2JSbmRpc0RldmljZSwNCj4gKyAgICAgICAgICAgICAoUkVNT1RFX05E SVNfTVNHX0hFQURFUiAqKSZSbmRpc1F1ZXJ5TXNnLA0KPiArICAgICAgICAgICAgIChSRU1PVEVf TkRJU19NU0dfSEVBREVSICopJlJuZGlzUXVlcnlNc2dDbXBsdA0KPiArICAgICAgICAgICAgICk7 DQo+ICsgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgREVCVUcgKChERUJVR19J TkZPLCAiU3VjY2VzcyB0byBnZXQgTWF4IFRvdGFsIHNpemUgOiAlWCAgXG4iLCBSbmRpc1F1ZXJ5 TXNnQ21wbHQuTWF4VG90YWxTaXplKSk7DQo+ICsgICAgKkJ1bGtTaXplID0gUm5kaXNRdWVyeU1z Z0NtcGx0Lk1heFRvdGFsU2l6ZTsNCj4gKyAgICBVc2JSbmRpc0RldmljZS0+UmVxdWVzdElkKys7 DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IFRoaXMt PlVzYkV0aEZ1bkRlc2NyaXB0b3IgKFRoaXMsICZVc2JFdGhGdW5EZXNjcmlwdG9yKTsNCj4gKyAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0N Cj4gKw0KPiArICAqQnVsa1NpemUgPSAoVUlOVE4pVXNiRXRoRnVuRGVzY3JpcHRvci5NYXhTZWdt ZW50U2l6ZTsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJl dHJpZXZlcyB0aGUgVVNCIEhlYWRlciBmdW5jdGlvbmFsIERlc2NyaXB0b3IuDQo+ICsNCj4gKyAg QHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJ X1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW291dF0gVXNiSGVh ZGVyRnVuRGVzY3JpcHRvciBBIHBvaW50ZXIgdG8gdGhlIGNhbGxlciBhbGxvY2F0ZWQgVVNCIEhl YWRlciBGdW5jdGlvbmFsIERlc2NyaXB0b3IuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICAgVGhlIFVTQiBIZWFkZXIgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcyByZXRy aWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBV c2JIZWFkZXJGdW5EZXNjcmlwdG9yIGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VO RCAgICAgICAgIFRoZSBVU0IgSGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMgbm90IGZv dW5kLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArR2V0VXNiSGVh ZGVyRnVuRGVzY3JpcHRvciAoDQo+ICsgIElOICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wg ICpUaGlzLA0KPiArICBPVVQgVVNCX0hFQURFUl9GVU5fREVTQ1JJUFRPUiAgICAqVXNiSGVhZGVy RnVuRGVzY3JpcHRvcg0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgIFN0YXR1 czsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAgKlVzYlJuZGlzRGV2aWNlOw0KPiArDQo+ICsgIFVz YlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFRoaXMpOw0KPiArDQo+ ICsgIGlmIChVc2JIZWFkZXJGdW5EZXNjcmlwdG9yID09IE5VTEwpIHsNCj4gKyAgICByZXR1cm4g RUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gR2V0RnVu Y3Rpb25hbERlc2NyaXB0b3IgKA0KPiArICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Db25m aWcsDQo+ICsgICAgICAgICAgICAgSEVBREVSX0ZVTl9ERVNDUklQVE9SLA0KPiArICAgICAgICAg ICAgIFVzYkhlYWRlckZ1bkRlc2NyaXB0b3INCj4gKyAgICAgICAgICAgICApOw0KPiArICByZXR1 cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVzIHRoZSBVU0IgVW5p b24gZnVuY3Rpb25hbCBEZXNjcmlwdG9yLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAg ICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9D T0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtvdXRdIFVzYlVuaW9uRnVuRGVzY3JpcHRvciAgQSBw b2ludGVyIHRvIHRoZSBjYWxsZXIgYWxsb2NhdGVkIFVTQiBVbmlvbiBGdW5jdGlvbmFsIERlc2Ny aXB0b3IuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBVU0Ig VW5pb24gRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcyByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0K PiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVXNiVW5pb25GdW5EZXNjcmlwdG9y IGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICBUaGUgVVNCIFVu aW9uIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMgbm90IGZvdW5kLg0KPiArDQo+ICsqKi8NCj4g K0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArR2V0VXNiVW5pb25GdW5EZXNjcmlwdG9yICgNCj4g KyAgSU4gIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIE9VVCBVU0Jf VU5JT05fRlVOX0RFU0NSSVBUT1IgICAgICpVc2JVbmlvbkZ1bkRlc2NyaXB0b3INCj4gKyAgKQ0K PiArew0KPiArICBFRklfU1RBVFVTICAgICAgICBTdGF0dXM7DQo+ICsgIFVTQl9STkRJU19ERVZJ Q0UgICpVc2JSbmRpc0RldmljZTsNCj4gKw0KPiArICBVc2JSbmRpc0RldmljZSA9IFVTQl9STkRJ U19ERVZJQ0VfRlJPTV9USElTIChUaGlzKTsNCj4gKw0KPiArICBpZiAoVXNiVW5pb25GdW5EZXNj cmlwdG9yID09IE5VTEwpIHsNCj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0K PiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gR2V0RnVuY3Rpb25hbERlc2NyaXB0b3IgKA0KPiAr ICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Db25maWcsDQo+ICsgICAgICAgICAgICAgVU5J T05fRlVOX0RFU0NSSVBUT1IsDQo+ICsgICAgICAgICAgICAgVXNiVW5pb25GdW5EZXNjcmlwdG9y DQo+ICsgICAgICAgICAgICAgKTsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiAr LyoqDQo+ICsgIFJldHJpZXZlcyB0aGUgVVNCIEV0aGVybmV0IGZ1bmN0aW9uYWwgRGVzY3JpcHRv ci4NCj4gKw0KPiArICBUaGlzIGZ1bmN0aW9uIGdldCB0aGUgTWFjIEFkZHJlc3MsIEV0aGVybmV0 IHN0YXRpc3RpY3MsIG1heGltdW0gc2VnbWVudCBzaXplLA0KPiArICBudW1iZXIgb2YgbXVsdGlj YXN0IGZpbHRlcnMsIGFuZCBudW1iZXIgb2YgcGF0dGVybiBmaWx0ZXJzIGZyb20gRXRoZXJuZXQN Cj4gKyAgZnVuY3Rpb25hbCBEZXNjcmlwdG9yLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMg ICAgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJP VE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtvdXRdIFVzYkV0aEZ1bkRlc2NyaXB0b3IgICAg QSBwb2ludGVyIHRvIHRoZSBjYWxsZXIgYWxsb2NhdGVkIFVTQiBFdGhlcm5ldCBGdW5jdGlvbmFs IERlc2NyaXB0b3IuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRo ZSBVU0IgRXRoZXJuZXQgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcyByZXRyaWV2ZWQgc3VjY2Vz c2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVXNiRXRoRnVuRGVz Y3JpcHRvciBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgVGhl IFVTQiBFdGhlcm5ldCBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzIG5vdCBmb3VuZC4NCj4gKw0K PiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0dldFVzYlJuZGlzRnVuRGVzY3Jp cHRvciAoDQo+ICsgIElOICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiAr ICBPVVQgVVNCX0VUSEVSTkVUX0ZVTl9ERVNDUklQVE9SICAqVXNiRXRoRnVuRGVzY3JpcHRvcg0K PiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgIFN0YXR1czsNCj4gKyAgVVNCX1JO RElTX0RFVklDRSAgKlVzYlJuZGlzRGV2aWNlOw0KPiArDQo+ICsgIFVzYlJuZGlzRGV2aWNlID0g VVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFRoaXMpOw0KPiArDQo+ICsgIGlmIChVc2JFdGhG dW5EZXNjcmlwdG9yID09IE5VTEwpIHsNCj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1F VEVSOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gR2V0RnVuY3Rpb25hbERlc2NyaXB0b3Ig KA0KPiArICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Db25maWcsDQo+ICsgICAgICAgICAg ICAgRVRIRVJORVRfRlVOX0RFU0NSSVBUT1IsDQo+ICsgICAgICAgICAgICAgVXNiRXRoRnVuRGVz Y3JpcHRvcg0KPiArICAgICAgICAgICAgICk7DQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ ICsNCj4gKy8qKg0KPiArICBUaGlzIHJlcXVlc3Qgc2V0cyB0aGUgRXRoZXJuZXQgZGV2aWNlIG11 bHRpY2FzdCBmaWx0ZXJzIGFzIHNwZWNpZmllZCBpbiB0aGUNCj4gKyAgc2VxdWVudGlhbCBsaXN0 IG9mIDQ4IGJpdCBFdGhlcm5ldCBtdWx0aWNhc3QgYWRkcmVzc2VzLg0KPiArDQo+ICsgIEBwYXJh bVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0Jf RVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAg ICAgICAgICAgICAgTnVtYmVyIG9mIGZpbHRlcnMuDQo+ICsgIEBwYXJhbVtpbl0gIE1jYXN0QWRk ciAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSB2YWx1ZSBvZiB0aGUgbXVsdGljYXN0IGFk ZHJlc3Nlcy4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIHJl cXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAg ICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAg QHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8g YSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBPbmUg b2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJ X1VOU1VQUE9SVEVEICAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9T VEFUVVMNCj4gK0VGSUFQSQ0KPiArU2V0VXNiUm5kaXNNY2FzdEZpbHRlciAoDQo+ICsgIElOIEVE S0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIFVJTlQxNiAgICAgICAg ICAgICAgICAgICAgICAgVmFsdWUsDQo+ICsgIElOIFZPSUQgICAgICAgICAgICAgICAgICAgICAg ICAgKk1jYXN0QWRkcg0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAg ICAgICAgU3RhdHVzOw0KPiArICBFRklfVVNCX0RFVklDRV9SRVFVRVNUICAgICAgIFJlcXVlc3Q7 DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNTdGF0dXM7DQo+ICsgIFVT Ql9FVEhFUk5FVF9GVU5fREVTQ1JJUFRPUiAgVXNiRXRoRnVuRGVzY3JpcHRvcjsNCj4gKyAgVVNC X1JORElTX0RFVklDRSAgICAgICAgICAgICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsNCj4gKyAgVXNi Um5kaXNEZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNFX0ZST01fVEhJUyAoVGhpcyk7DQo+ICsNCj4g KyAgU3RhdHVzID0gVGhpcy0+VXNiRXRoRnVuRGVzY3JpcHRvciAoVGhpcywgJlVzYkV0aEZ1bkRl c2NyaXB0b3IpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJu IFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgoVXNiRXRoRnVuRGVzY3JpcHRvci5OdW1i ZXJNY0ZpbHRlcnMgPDwgMSkgPT0gMCkgew0KPiArICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7 DQo+ICsgIH0NCj4gKw0KPiArICBSZXF1ZXN0LlJlcXVlc3RUeXBlID0gVVNCX0VUSEVSTkVUX1NF VF9SRVFfVFlQRTsNCj4gKyAgUmVxdWVzdC5SZXF1ZXN0ICAgICA9IFNFVF9FVEhfTVVMVElDQVNU X0ZJTFRFUlNfUkVROw0KPiArICBSZXF1ZXN0LlZhbHVlICAgICAgID0gVmFsdWU7DQo+ICsgIFJl cXVlc3QuSW5kZXggICAgICAgPSBVc2JSbmRpc0RldmljZS0+TnVtT2ZJbnRlcmZhY2U7DQo+ICsg IFJlcXVlc3QuTGVuZ3RoICAgICAgPSBWYWx1ZSAqIDY7DQo+ICsNCj4gKyAgcmV0dXJuIFVzYlJu ZGlzRGV2aWNlLT5Vc2JJby0+VXNiQ29udHJvbFRyYW5zZmVyICgNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+VXNiSW8sDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJlJlcXVlc3QsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRWZpVXNiRGF0YU91dCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBVU0JfRVRIRVJORVRfVFJBTlNGRVJfVElNRU9VVCwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBNY2FzdEFkZHIsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVxdWVzdC5MZW5ndGgsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJlRyYW5zU3RhdHVzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgcmVxdWVzdCBzZXRzIHVwIHRo ZSBzcGVjaWZpZWQgRXRoZXJuZXQgcG93ZXIgbWFuYWdlbWVudCBwYXR0ZXJuIGZpbHRlciBhcw0K PiArICBkZXNjcmliZWQgaW4gdGhlIGRhdGEgc3RydWN0dXJlLg0KPiArDQo+ICsgIEBwYXJhbVtp bl0gIFRoaXMgICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhF Uk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgVmFsdWUgICAgICAgICAg ICAgICAgIE51bWJlciBvZiBmaWx0ZXJzLg0KPiArICBAcGFyYW1baW5dICBMZW5ndGggICAgICAg ICAgICAgICAgU2l6ZSBvZiB0aGUgcG93ZXIgbWFuYWdlbWVudCBwYXR0ZXJuIGZpbHRlciBkYXRh Lg0KPiArICBAcGFyYW1baW5dICBQYXR0ZXJuRmlsdGVyICAgICAgICAgQSBwb2ludGVyIHRvIHRo ZSBwb3dlciBtYW5hZ2VtZW50IHBhdHRlcm4gZmlsdGVyIHN0cnVjdHVyZS4NCj4gKw0KPiArICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vz c2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICAgQSB0aW1lb3V0IG9j Y3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VS Uk9SICAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsg IEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFz IGFuIGludmFsaWQgdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICBO b3Qgc3VwcG9ydGVkLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiAr U2V0VXNiUm5kaXNQb3dlckZpbHRlciAoDQo+ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9U T0NPTCAgKlRoaXMsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUs DQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoLA0KPiArICBJTiBW T0lEICAgICAgICAgICAgICAgICAgICAgICAgICpQYXR0ZXJuRmlsdGVyDQo+ICsgICkNCj4gK3sN Cj4gKyAgRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCAgUmVxdWVzdDsNCj4gKyAgVUlOVDMyICAgICAg ICAgICAgICAgICAgVHJhbnNTdGF0dXM7DQo+ICsgIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICpV c2JSbmRpc0RldmljZTsNCj4gKw0KPiArICBVc2JSbmRpc0RldmljZSA9IFVTQl9STkRJU19ERVZJ Q0VfRlJPTV9USElTIChUaGlzKTsNCj4gKw0KPiArICBSZXF1ZXN0LlJlcXVlc3RUeXBlID0gVVNC X0VUSEVSTkVUX1NFVF9SRVFfVFlQRTsNCj4gKyAgUmVxdWVzdC5SZXF1ZXN0ICAgICA9IFNFVF9F VEhfUE9XRVJfTUFOQUdFTUVOVF9QQVRURVJOX0ZJTFRFUl9SRVE7DQo+ICsgIFJlcXVlc3QuVmFs dWUgICAgICAgPSBWYWx1ZTsNCj4gKyAgUmVxdWVzdC5JbmRleCAgICAgICA9IFVzYlJuZGlzRGV2 aWNlLT5OdW1PZkludGVyZmFjZTsNCj4gKyAgUmVxdWVzdC5MZW5ndGggICAgICA9IExlbmd0aDsN Cj4gKw0KPiArICByZXR1cm4gVXNiUm5kaXNEZXZpY2UtPlVzYklvLT5Vc2JDb250cm9sVHJhbnNm ZXIgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNl LT5Vc2JJbywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUmVxdWVzdCwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZmlVc2JEYXRhT3V0LA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9FVEhFUk5FVF9UUkFOU0ZFUl9U SU1FT1VULA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhdHRlcm5GaWx0 ZXIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoLA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZUcmFuc1N0YXR1cw0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlz IHJlcXVlc3QgcmV0cmlldmVzIHRoZSBzdGF0dXMgb2YgdGhlIHNwZWNpZmllZCBFdGhlcm5ldCBw b3dlciBtYW5hZ2VtZW50DQo+ICsgIHBhdHRlcm4gZmlsdGVyIGZyb20gdGhlIGRldmljZS4NCj4g Kw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0 aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5d ICBWYWx1ZSAgICAgICAgICAgICAgICAgIFRoZSBmaWx0ZXIgbnVtYmVyLg0KPiArICBAcGFyYW1b b3V0XSBQYXR0ZXJuQWN0aXZlICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgcGF0dGVybiBhY3Rp dmUgYm9vbGVhbi4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhl IHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VU ICAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4g KyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUg dG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBP bmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQo+ICsgIEByZXR2YWwg RUZJX1VOU1VQUE9SVEVEICAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArDQo+ICsqKi8NCj4gK0VG SV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArR2V0VXNiUm5kaXNQb3dlckZpbHRlciAoDQo+ICsgIElO ICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiAgVUlOVDE2ICAg ICAgICAgICAgICAgICAgICAgICBWYWx1ZSwNCj4gKyAgT1VUIEJPT0xFQU4gICAgICAgICAgICAg ICAgICAgICAgKlBhdHRlcm5BY3RpdmUNCj4gKyAgKQ0KPiArew0KPiArICBFRklfVVNCX0RFVklD RV9SRVFVRVNUICBSZXF1ZXN0Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICBUcmFuc1N0 YXR1czsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgKlVzYlJuZGlzRGV2aWNlOw0KPiAr DQo+ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFRoaXMp Ow0KPiArDQo+ICsgIFJlcXVlc3QuUmVxdWVzdFR5cGUgPSBVU0JfRVRIRVJORVRfR0VUX1JFUV9U WVBFOw0KPiArICBSZXF1ZXN0LlJlcXVlc3QgICAgID0gR0VUX0VUSF9QT1dFUl9NQU5BR0VNRU5U X1BBVFRFUk5fRklMVEVSX1JFUTsNCj4gKyAgUmVxdWVzdC5WYWx1ZSAgICAgICA9IFZhbHVlOw0K PiArICBSZXF1ZXN0LkluZGV4ICAgICAgID0gVXNiUm5kaXNEZXZpY2UtPk51bU9mSW50ZXJmYWNl Ow0KPiArICBSZXF1ZXN0Lkxlbmd0aCAgICAgID0gVVNCX0VUSF9QT1dFUl9GSUxURVJfTEVOR1RI Ow0KPiArDQo+ICsgIHJldHVybiBVc2JSbmRpc0RldmljZS0+VXNiSW8tPlVzYkNvbnRyb2xUcmFu c2ZlciAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZp Y2UtPlVzYklvLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZSZXF1ZXN0 LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVmaVVzYkRhdGFJbiwNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfRVRIRVJORVRfVFJBTlNGRVJf VElNRU9VVCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXR0ZXJuQWN0 aXZlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9FVEhfUE9XRVJf RklMVEVSX0xFTkdUSCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmVHJh bnNTdGF0dXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArfQ0K PiArDQo+ICsvKioNCj4gKw0KPiArICBDb252ZXJ0cyBQWEUgZmlsdGVyIHNldHRpbmdzIHRvIFJO RElTIHZhbHVlcw0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgUFhFIGZpbHRlciBk YXRhLg0KPiArICBAcGFyYW1bb3V0XSBDZGNGaWx0ZXIgIEEgcG9pbnRlciB0byB0aGUgRXRoZXJu ZXQgUGFja2V0IEZpbHRlciBCaXRtYXAgdmFsdWUgY29udmVydGVkIGJ5IFBYRV9PUEZMQUdTLg0K PiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0NvbnZlcnRGaWx0ZXIgKA0KPiArICBJTiAgVUlOVDE2 ICBWYWx1ZSwNCj4gKyAgT1VUIFVJTlQxNiAgKkNkY0ZpbHRlcg0KPiArICApDQo+ICt7DQo+ICsg IFVJTlQzMiAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAg ICAgQ291bnQ7DQo+ICsgIHN0YXRpYyBzdHJ1Y3QgQklUX01BUCAgVGFibGVbXSA9IHsNCj4gKyAg ICB7IFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX1VOSUNBU1QsICAgICAgICAgICAgTkRJU19Q QUNLRVRfVFlQRV9ESVJFQ1RFRCAgICAgIH0sDQo+ICsgICAgeyBQWEVfT1BGTEFHU19SRUNFSVZF X0ZJTFRFUl9CUk9BRENBU1QsICAgICAgICAgIE5ESVNfUEFDS0VUX1RZUEVfQlJPQURDQVNUICAg ICB9LA0KPiArICAgIHsgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfRklMVEVSRURfTVVMVElD QVNULCBORElTX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVCAgICAgfSwNCj4gKyAgICB7IFBYRV9PUEZM QUdTX1JFQ0VJVkVfRklMVEVSX1BST01JU0NVT1VTLCAgICAgICAgTkRJU19QQUNLRVRfVFlQRV9Q Uk9NSVNDVU9VUyAgIH0sDQo+ICsgICAgeyBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9BTExf TVVMVElDQVNULCAgICAgIE5ESVNfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVCB9LA0KPiArICB9 Ow0KPiArDQo+ICsgIENvdW50ID0gc2l6ZW9mIChUYWJsZSkvc2l6ZW9mIChUYWJsZVswXSk7DQo+ ICsNCj4gKyAgZm9yIChJbmRleCA9IDA7IChUYWJsZVtJbmRleF0uU3JjICE9IDApICYmIChJbmRl eCA8IENvdW50KTsgSW5kZXgrKykgew0KPiArICAgIGlmIChUYWJsZVtJbmRleF0uU3JjICYgVmFs dWUpIHsNCj4gKyAgICAgICpDZGNGaWx0ZXIgfD0gVGFibGVbSW5kZXhdLkRzdDsNCj4gKyAgICB9 DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsNCj4gKyAgVXBkYXRlcyBGaWx0ZXIgc2V0 dGluZ3Mgb24gdGhlIGRldmljZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRl ciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMg IEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiAr DQo+ICsgIEByZXR2YWwgRUZJX1NUQVRVUw0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4g K0VGSUFQSQ0KPiArUm5kaXNVbmRpUmVjZWl2ZUZpbHRlciAoDQo+ICsgIElOICBQWEVfQ0RCICAg KkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NU QVRVUyAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAg ICAgICAgICAgKk1jYXN0TGlzdDsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICBD b3VudDsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICBJbmRleDE7DQo+ICsgIFVJ TlQ4ICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXgyOw0KPiArICBVSU5UNjQgICAgICAgICAg ICAgICAgICAgICAgIENwYkFkZHI7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAg Q3BiU2l6ZTsNCj4gKyAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICBTZXRGaWx0ZXI7DQo+ ICsgIFBYRV9DUEJfUkVDRUlWRV9GSUxURVJTICAgICAgKkNwYjsNCj4gKyAgVVNCX0VUSEVSTkVU X0ZVTl9ERVNDUklQVE9SICBVc2JFdGhGdW5EZXNjcmlwdG9yOw0KPiArDQo+ICsgIENvdW50ICAg ICA9IDA7DQo+ICsgIENwYkFkZHIgICA9IENkYi0+Q1BCYWRkcjsNCj4gKyAgQ3BiU2l6ZSAgID0g Q2RiLT5DUEJzaXplOw0KPiArICBTZXRGaWx0ZXIgPSAoVUlOVDE2KShDZGItPk9wRmxhZ3MgJiAw eDFGKTsNCj4gKyAgQ3BiICAgICAgID0gKFBYRV9DUEJfUkVDRUlWRV9GSUxURVJTICopKFVJTlRO KUNwYkFkZHI7DQo+ICsNCj4gKyAgLy8gVGhlIENwYiBjb3VsZCBiZSBOVUxMLihyZWY6UFhFX0NQ QkFERFJfTk9UX1VTRUQpDQo+ICsgIE5pYy0+UnhGaWx0ZXIgPSAoVUlOVDgpU2V0RmlsdGVyOw0K PiArDQo+ICsgIGlmICgoKFNldEZpbHRlciAmIFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0ZJ TFRFUkVEX01VTFRJQ0FTVCkgIT0gMCkgfHwgKENwYiAhPSBOVUxMKSkgew0KPiArICAgIGlmIChD cGIgIT0gTlVMTCkgew0KPiArICAgICAgTmljLT5NY2FzdENvdW50ID0gKFVJTlQ4KShDcGJTaXpl IC8gUFhFX01BQ19MRU5HVEgpOw0KPiArICAgICAgQ29weU1lbSAoJk5pYy0+TWNhc3RMaXN0LCBD cGIsIE5pYy0+TWNhc3RDb3VudCk7DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgIE5pYy0+TWNh c3RDb3VudCA9IDA7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKE5pYy0+Q2FuUmVjZWl2ZSkg ew0KPiArICAgICAgTmljLT5DYW5SZWNlaXZlID0gRkFMU0U7DQo+ICsgICAgfQ0KPiArDQo+ICsg ICAgTmljLT5Vc2JFdGgtPlVzYkV0aEZ1bkRlc2NyaXB0b3IgKE5pYy0+VXNiRXRoLCAmVXNiRXRo RnVuRGVzY3JpcHRvcik7DQo+ICsgICAgaWYgKChVc2JFdGhGdW5EZXNjcmlwdG9yLk51bWJlck1j RmlsdGVycyA8PCAxKSA9PSAwKSB7DQo+ICsgICAgICBOaWMtPlJ4RmlsdGVyIHw9IFBYRV9PUEZM QUdTX1JFQ0VJVkVfRklMVEVSX0FMTF9NVUxUSUNBU1Q7DQo+ICsgICAgICBERUJVRyAoKERFQlVH X0lORk8sICJTZXRVc2JFdGhQYWNrZXRGaWx0ZXIgTmljICVseCBOaWMtPlVzYkV0aCAlbHggIiwg TmljLCBOaWMtPlVzYkV0aCkpOw0KPiArICAgICAgTmljLT5Vc2JFdGgtPlNldFVzYkV0aFBhY2tl dEZpbHRlciAoTmljLT5Vc2JFdGgsIE5pYy0+UnhGaWx0ZXIpOw0KPiArICAgIH0gZWxzZSB7DQo+ ICsgICAgICBTdGF0dXMgPSBnQlMtPkFsbG9jYXRlUG9vbCAoRWZpQm9vdFNlcnZpY2VzRGF0YSwg TmljLT5NY2FzdENvdW50ICogNiwgKFZPSUQgKiopJk1jYXN0TGlzdCk7DQo+ICsgICAgICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICAgIHJldHVybiBQWEVfU1RBVENPREVfSU5W QUxJRF9QQVJBTUVURVI7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIGlmIChDcGIgIT0gTlVM TCkgew0KPiArICAgICAgICBmb3IgKEluZGV4MSA9IDA7IEluZGV4MSA8IE5pYy0+TWNhc3RDb3Vu dDsgSW5kZXgxKyspIHsNCj4gKyAgICAgICAgICBmb3IgKEluZGV4MiA9IDA7IEluZGV4MiA8IDY7 IEluZGV4MisrKSB7DQo+ICsgICAgICAgICAgICBNY2FzdExpc3RbQ291bnQrK10gPSBDcGItPk1D YXN0TGlzdFtJbmRleDFdW0luZGV4Ml07DQo+ICsgICAgICAgICAgfQ0KPiArICAgICAgICB9DQo+ ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIE5pYy0+UnhGaWx0ZXIgfD0gUFhFX09QRkxBR1NfUkVD RUlWRV9GSUxURVJfRklMVEVSRURfTVVMVElDQVNUOw0KPiArICAgICAgaWYgKENwYiAhPSBOVUxM KSB7DQo+ICsgICAgICAgIE5pYy0+VXNiRXRoLT5TZXRVc2JFdGhNY2FzdEZpbHRlciAoTmljLT5V c2JFdGgsIE5pYy0+TWNhc3RDb3VudCwgTWNhc3RMaXN0KTsNCj4gKyAgICAgIH0NCj4gKw0KPiAr ICAgICAgTmljLT5Vc2JFdGgtPlNldFVzYkV0aFBhY2tldEZpbHRlciAoTmljLT5Vc2JFdGgsIE5p Yy0+UnhGaWx0ZXIpOw0KPiArICAgICAgRnJlZVBvb2wgKE1jYXN0TGlzdCk7DQo+ICsgICAgfQ0K PiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioN Cj4gKyAgVGhpcyByZXF1ZXN0IGlzIHVzZWQgdG8gY29uZmlndXJlIGRldmljZSBFdGhlcm5ldCBw YWNrZXQgZmlsdGVyIHNldHRpbmdzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAg ICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3Rh bmNlLg0KPiArICBAcGFyYW1baW5dICBWYWx1ZSAgICAgICAgICAgICBQYWNrZXQgRmlsdGVyIEJp dG1hcC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVz dCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAg ICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2 YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZp Y2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUg cGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQ T1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ ICtFRklBUEkNCj4gK1NldFVzYlJuZGlzUGFja2V0RmlsdGVyICgNCj4gKyAgSU4gRURLSUlfVVNC X0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gVUlOVDE2ICAgICAgICAgICAgICAg ICAgICAgICBWYWx1ZQ0KPiArICApDQo+ICt7DQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgcmVxdWVzdCBpcyB1c2VkIHRvIHJldHJpZXZlIGEg c3RhdGlzdGljIGJhc2VkIG9uIHRoZSBmZWF0dXJlIHNlbGVjdG9yLg0KPiArDQo+ICsgIEBwYXJh bVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9F VEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgRmVhdHVyZVNlbGVj dG9yICAgICAgIFZhbHVlIG9mIHRoZSBmZWF0dXJlIHNlbGVjdG9yLg0KPiArICBAcGFyYW1bb3V0 XSBTdGF0aXN0aWMgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSAzMiBiaXQgdW5zaWduZWQg aW50ZWdlci4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVx dWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAg ICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEBy ZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBk ZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0 aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5T VVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVT DQo+ICtFRklBUEkNCj4gK0dldFJuZGlzU3RhdGlzdGljICgNCj4gKyAgSU4gIEVES0lJX1VTQl9F VEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOICBVSU5UMTYgICAgICAgICAgICAgICAg ICAgICAgIEZlYXR1cmVTZWxlY3RvciwNCj4gKyAgT1VUIFZPSUQgICAgICAgICAgICAgICAgICAg ICAgICAgKlN0YXRpc3RpYw0KPiArICApDQo+ICt7DQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsN Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gVW5k aVN0YXJ0IGlzIGludm9rZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIg dG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBB IHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0K PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNz ZnVsbHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1Vu ZGlTdGFydCAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAq TmljDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiArDQo+ICsgIERF QlVHICgoREVCVUdfSU5GTywgIlJuZGlzVW5kaVN0YXJ0IE5pYyAlbHggQ2RiICVseCBOaWMgU3Rh dGUgJXhcbiIsIE5pYywgQ2RiLCBOaWMtPlN0YXRlKSk7DQo+ICsNCj4gKyAgLy8gSXNzdWUgUm5k aXMgUmVzZXQgYW5kIGJyaW5nIHRoZSBkZXZpY2UgdG8gUk5ESVNfQlVTX0lOSVRJQUxJWkVEIHN0 YXRlDQo+ICsgIFN0YXR1cyA9IFJuZGlzVW5kaVJlc2V0IChDZGIsIE5pYyk7DQo+ICsgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBSbmRpc1VuZGlSZXNldCAoQ2RiLCBOaWMpOw0K PiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gUm5kaXNVbmRpSW5pdGlhbGl6ZSAoQ2RiLCBOaWMp Ow0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgUm5kaXNVbmRpSW5pdGlh bGl6ZSAoQ2RiLCBOaWMpOw0KPiArICB9DQo+ICsNCj4gKyAgUm5kaXNVbmRpU2h1dGRvd24gKENk YiwgTmljKTsNCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIFVuZGlzdG9wIGlzIGludm9rZWQu DQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVz Y3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5l dHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsqKi8NCj4g K0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRpU3RvcCAoDQo+ICsgIElOICBQWEVf Q0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAg REVCVUcgKChERUJVR19JTkZPLCAiUm5kaXNVbmRpU3RvcCBTdGF0ZSAleFxuIiwgTmljLT5TdGF0 ZSkpOw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBU aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIFVuZGlHZXRJbml0SW5mbyBpcyBpbnZva2VkLg0K PiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2Ny aXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3 b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ICsqKi8N Cj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRpR2V0SW5pdEluZm8gKA0KPiAr ICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ ICt7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlVzYkV0aERldmljZTsNCj4g KyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgICAgICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsgIFBY RV9EQl9HRVRfSU5JVF9JTkZPICAgICAgICAgKkRiOw0KPiArDQo+ICsgIERFQlVHICgoREVCVUdf SU5GTywgIlJuZGlzVW5kaUdldEluaXRJbmZvXG4iKSk7DQo+ICsNCj4gKyAgVXNiRXRoRGV2aWNl ICAgPSBOaWMtPlVzYkV0aDsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNF X0ZST01fVEhJUyAoVXNiRXRoRGV2aWNlKTsNCj4gKw0KPiArICBEYiA9IChQWEVfREJfR0VUX0lO SVRfSU5GTyAqKShVSU5UTilDZGItPkRCYWRkcjsNCj4gKw0KPiArICBEYi0+RnJhbWVEYXRhTGVu ID0gVXNiUm5kaXNEZXZpY2UtPk1heFRyYW5zZmVyU2l6ZSAtIHNpemVvZiAoUkVNT1RFX05ESVNf UEFDS0VUX01TRykgLSBQWEVfTUFDX0hFQURFUl9MRU5fRVRIRVI7DQo+ICsgIC8vIExpbWl0IE1h eCBNVFUgc2l6ZSB0byAxNTAwIGJ5dGVzIGFzIFJORElTIHNwZWMuDQo+ICsgIGlmIChEYi0+RnJh bWVEYXRhTGVuID4gUFhFX01BWF9UWFJYX1VOSVRfRVRIRVIpIHsNCj4gKyAgICBEYi0+RnJhbWVE YXRhTGVuID0gUFhFX01BWF9UWFJYX1VOSVRfRVRIRVI7DQo+ICsgIH0NCj4gKw0KPiArICBERUJV RyAoKERFQlVHX0lORk8sICJEYi0+RnJhbWVEYXRhTGVuICV4XG4iLCBEYi0+RnJhbWVEYXRhTGVu KSk7DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4g KyAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBSbmRpc1VuZGlHZXRDb25maWdJbmZvIGlz IGludm9rZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNv bW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIg dG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlHZXRDb25m aWdJbmZvICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpO aWMNCj4gKyAgKQ0KPiArew0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJSbmRpc1VuZGlHZXRD b25maWdJbmZvXG4iKSk7DQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiAr LyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gVW5kaUluaXRpYWxpemUgaXMg aW52b2tlZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29t bWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0 byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxs eS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4g Kw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaUluaXRpYWxp emUgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0K PiArICApDQo+ICt7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgICpVc2JFdGhE cml2ZXI7DQo+ICsgIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICAgICAgICpVc2JSbmRpc0Rldmlj ZTsNCj4gKyAgUkVNT1RFX05ESVNfSU5JVElBTElaRV9NU0cgICAgUm5kaXNJbml0TXNnOw0KPiAr ICBSRU1PVEVfTkRJU19JTklUSUFMSVpFX0NNUExUICBSbmRpc0luaXRNc2dDbXBsdDsNCj4gKyAg RUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArDQo+ICsgIERFQlVHICgo REVCVUdfSU5GTywgIlJuZGlzVW5kaUluaXRpYWxpemVcbiIpKTsNCj4gKw0KPiArICBVc2JFdGhE cml2ZXIgICA9IE5pYy0+VXNiRXRoOw0KPiArICBVc2JSbmRpc0RldmljZSA9IFVTQl9STkRJU19E RVZJQ0VfRlJPTV9USElTIChVc2JFdGhEcml2ZXIpOw0KPiArDQo+ICsgIFplcm9NZW0gKCZSbmRp c0luaXRNc2csIHNpemVvZiAoUkVNT1RFX05ESVNfSU5JVElBTElaRV9NU0cpKTsNCj4gKyAgWmVy b01lbSAoJlJuZGlzSW5pdE1zZ0NtcGx0LCBzaXplb2YgKFJFTU9URV9ORElTX0lOSVRJQUxJWkVf Q01QTFQpKTsNCj4gKw0KPiArICBSbmRpc0luaXRNc2cuTWVzc2FnZVR5cGUgICAgID0gUk5ESVNf SU5JVElBTElaRV9NU0c7DQo+ICsgIFJuZGlzSW5pdE1zZy5NZXNzYWdlTGVuZ3RoICAgPSBzaXpl b2YgKFJFTU9URV9ORElTX0lOSVRJQUxJWkVfTVNHKTsNCj4gKyAgUm5kaXNJbml0TXNnLlJlcXVl c3RJRCAgICAgICA9IFVzYlJuZGlzRGV2aWNlLT5SZXF1ZXN0SWQ7DQo+ICsgIFJuZGlzSW5pdE1z Zy5NYWpvclZlcnNpb24gICAgPSBSTkRJU19NQUpPUl9WRVJTSU9OOw0KPiArICBSbmRpc0luaXRN c2cuTWlub3JWZXJzaW9uICAgID0gUk5ESVNfTUlOT1JfVkVSU0lPTjsNCj4gKyAgUm5kaXNJbml0 TXNnLk1heFRyYW5zZmVyU2l6ZSA9IFJORElTX01BWF9UUkFOU0ZFUl9TSVpFOw0KPiArDQo+ICsg IFJuZGlzSW5pdE1zZ0NtcGx0Lk1lc3NhZ2VUeXBlICAgPSBSTkRJU19JTklUSUFMSVpFX0NNUExU Ow0KPiArICBSbmRpc0luaXRNc2dDbXBsdC5NZXNzYWdlTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVf TkRJU19JTklUSUFMSVpFX0NNUExUKTsNCj4gKw0KPiArICBTdGF0dXMgPSBSbmRpc0NvbnRyb2xN c2cgKFVzYlJuZGlzRGV2aWNlLCAoUkVNT1RFX05ESVNfTVNHX0hFQURFUiAqKSZSbmRpc0luaXRN c2csIChSRU1PVEVfTkRJU19NU0dfSEVBREVSICopJlJuZGlzSW5pdE1zZ0NtcGx0KTsNCj4gKw0K PiArICBVc2JSbmRpc0RldmljZS0+UmVxdWVzdElkKys7DQo+ICsNCj4gKyAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSB8fCAoUm5kaXNJbml0TXNnQ21wbHQuU3RhdHVzICYgMHg4MDAwMDAwMCkpIHsN Cj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgLy8gT25seSBXaXJlZCBN ZWRpdW0gaXMgc3VwcG9ydGVkDQo+ICsgIGlmIChSbmRpc0luaXRNc2dDbXBsdC5NZWRpdW0pIHsN Cj4gKyAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArICB9DQo+ICsNCj4gKyAgVXNiUm5k aXNEZXZpY2UtPk1lZGl1bSAgICAgICAgICAgICAgICA9IFJuZGlzSW5pdE1zZ0NtcGx0Lk1lZGl1 bTsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPk1heFBhY2tldHNQZXJUcmFuc2ZlciA9IFJuZGlzSW5p dE1zZ0NtcGx0Lk1heFBhY2tldHNQZXJUcmFuc2ZlcjsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPk1h eFRyYW5zZmVyU2l6ZSAgICAgICA9IFJuZGlzSW5pdE1zZ0NtcGx0Lk1heFRyYW5zZmVyU2l6ZTsN Cj4gKyAgVXNiUm5kaXNEZXZpY2UtPlBhY2tldEFsaWdubWVudEZhY3RvciA9IFJuZGlzSW5pdE1z Z0NtcGx0LlBhY2tldEFsaWdubWVudEZhY3RvcjsNCj4gKw0KPiArICBERUJVRyAoKERFQlVHX0lO Rk8sICJNZWRpdW0gOiAleCBcbiIsIFJuZGlzSW5pdE1zZ0NtcGx0Lk1lZGl1bSkpOw0KPiArICBE RUJVRyAoKERFQlVHX0lORk8sICJNYXhQYWNrZXRzUGVyVHJhbnNmZXIgOiAleCBcbiIsIFJuZGlz SW5pdE1zZ0NtcGx0Lk1heFBhY2tldHNQZXJUcmFuc2ZlcikpOw0KPiArICBERUJVRyAoKERFQlVH X0lORk8sICJNYXhUcmFuc2ZlclNpemUgOiAleFxuIiwgUm5kaXNJbml0TXNnQ21wbHQuTWF4VHJh bnNmZXJTaXplKSk7DQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlBhY2tldEFsaWdubWVudEZh Y3RvciA6ICV4XG4iLCBSbmRpc0luaXRNc2dDbXBsdC5QYWNrZXRBbGlnbm1lbnRGYWN0b3IpKTsN Cj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBm dW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBVbmRpUmVzZXQgaXMgaW52b2tlZC4NCj4gKw0KPiArICBA cGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2Nr Lg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZh Y2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAg ICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklf REVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJv ci4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaVJl c2V0ICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMN Cj4gKyAgKQ0KPiArew0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpVc2JFdGhE cml2ZXI7DQo+ICsgIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICAgICAgKlVzYlJuZGlzRGV2aWNl Ow0KPiArICBSRU1PVEVfTkRJU19SRVNFVF9NU0cgICAgICAgIFJuZGlzUmVzZXRNc2c7DQo+ICsg IFJFTU9URV9ORElTX1JFU0VUX0NNUExUICAgICAgUm5kaXNSZXNldENtcGx0Ow0KPiArICBFRklf U1RBVFVTICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBERUJVRyAoKERFQlVH X0lORk8sICJSbmRpc1VuZGlSZXNldFxuIikpOw0KPiArDQo+ICsgIFVzYkV0aERyaXZlciAgID0g TmljLT5Vc2JFdGg7DQo+ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9N X1RISVMgKFVzYkV0aERyaXZlcik7DQo+ICsNCj4gKyAgWmVyb01lbSAoJlJuZGlzUmVzZXRNc2cs IHNpemVvZiAoUkVNT1RFX05ESVNfUkVTRVRfTVNHKSk7DQo+ICsgIFplcm9NZW0gKCZSbmRpc1Jl c2V0Q21wbHQsIHNpemVvZiAoUkVNT1RFX05ESVNfUkVTRVRfQ01QTFQpKTsNCj4gKw0KPiArICBS bmRpc1Jlc2V0TXNnLk1lc3NhZ2VUeXBlICAgPSBSTkRJU19SRVNFVF9NU0c7DQo+ICsgIFJuZGlz UmVzZXRNc2cuTWVzc2FnZUxlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfUkVTRVRfTVNHKTsN Cj4gKw0KPiArICBSbmRpc1Jlc2V0Q21wbHQuTWVzc2FnZVR5cGUgICA9IFJORElTX1JFU0VUX0NN UExUOw0KPiArICBSbmRpc1Jlc2V0Q21wbHQuTWVzc2FnZUxlbmd0aCA9IHNpemVvZiAoUkVNT1RF X05ESVNfUkVTRVRfQ01QTFQpOw0KPiArDQo+ICsgIFN0YXR1cyA9IFJuZGlzQ29udHJvbE1zZyAo VXNiUm5kaXNEZXZpY2UsIChSRU1PVEVfTkRJU19NU0dfSEVBREVSICopJlJuZGlzUmVzZXRNc2cs IChSRU1PVEVfTkRJU19NU0dfSEVBREVSICopJlJuZGlzUmVzZXRDbXBsdCk7DQo+ICsNCj4gKyAg VXNiUm5kaXNEZXZpY2UtPlJlcXVlc3RJZCA9IDE7ICAgICAgICAgIC8vIExldCdzIHN0YXJ0IHdp dGggMQ0KPiArDQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykgfHwgKFJuZGlzUmVzZXRDbXBs dC5TdGF0dXMgJiAweDgwMDAwMDAwKSkgew0KPiArICAgIHJldHVybiBFRklfREVWSUNFX0VSUk9S Ow0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsv KioNCj4gKyAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBVbmRpU2h1dGRvd24gaXMgaW52 b2tlZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFu ZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0 aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKw0K PiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaVNodXRkb3duICgN Cj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAg KQ0KPiArew0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpVc2JFdGhEcml2ZXI7 DQo+ICsgIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICAgICAgKlVzYlJuZGlzRGV2aWNlOw0KPiAr ICBSRU1PVEVfTkRJU19IQUxUX01TRyAgICAgICAgIFJuZGlzSGx0TXNnOw0KPiArICBFRklfU1RB VFVTICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBERUJVRyAoKERFQlVHX0lO Rk8sICJSbmRpc1VuZGlTaHV0ZG93blxuIikpOw0KPiArDQo+ICsgIFVzYkV0aERyaXZlciAgID0g TmljLT5Vc2JFdGg7DQo+ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9N X1RISVMgKFVzYkV0aERyaXZlcik7DQo+ICsNCj4gKyAgWmVyb01lbSAoJlJuZGlzSGx0TXNnLCBz aXplb2YgKFJFTU9URV9ORElTX0hBTFRfTVNHKSk7DQo+ICsNCj4gKyAgUm5kaXNIbHRNc2cuTWVz c2FnZVR5cGUgICA9IFJORElTX0hMVF9NU0c7DQo+ICsgIFJuZGlzSGx0TXNnLk1lc3NhZ2VMZW5n dGggPSBzaXplb2YgKFJFTU9URV9ORElTX0hBTFRfTVNHKTsNCj4gKw0KPiArICBTdGF0dXMgPSBS bmRpc0NvbnRyb2xNc2cgKFVzYlJuZGlzRGV2aWNlLCAoUkVNT1RFX05ESVNfTVNHX0hFQURFUiAq KSZSbmRpc0hsdE1zZywgTlVMTCk7DQo+ICsNCj4gKyAgaWYgKFN0YXR1cyA9PSBFRklfREVWSUNF X0VSUk9SKSB7DQo+ICsgICAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiAr ICBVc2JSbmRpc0RldmljZS0+UmVxdWVzdElkID0gMTsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgIFVwZGF0ZSB0aGUgTWVkaWEgY29ubmVjdGlvbi4NCj4gKw0K PiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9y IGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBp bnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKw0KPiArKiovDQo+ICtF RklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaUdldFN0YXR1cyAoDQo+ICsgIElOICBQ WEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4g KyAgQ2RiLT5TdGF0RmxhZ3MgJj0gfihQWEVfU1RBVEZMQUdTX0dFVF9TVEFUVVNfTk9fTUVESUEp Ow0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUcmFu c21pdCB0aGUgZGF0YSBhZnRlciBhcHBlbmRpbmcgUk5ESVMgaGVhZGVyLg0KPiArDQo+ICsgIEBw YXJhbVtpbl0gICAgICBDZGIgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNj cmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICAgICAgVGhpcyAgICAgICAgICBBIHBvaW50 ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBh cmFtW2luXSAgICAgIEJ1bGtPdXREYXRhICAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIgb2YgZGF0 YSB0aGF0IHdpbGwgYmUgdHJhbnNtaXR0ZWQgdG8gVVNCDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRldmljZSBvciByZWNlaXZlZCBmcm9tIFVTQiBkZXZpY2UuDQo+ICsgIEBw YXJhbVtpbiwgb3V0XSBEYXRhTGVuZ3RoICAgIEEgcG9pbnRlciB0byB0aGUgUGFja2V0TGVuZ3Ro Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVk IHN1Y2Nlc3NmdWxseS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4g K1JuZGlzVW5kaVRyYW5zbWl0ICgNCj4gKyAgSU4gICAgICBQWEVfQ0RCICAgICAgICAgICAgICAg ICAgICAgICpDZGIsDQo+ICsgIElOICAgICAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAq VGhpcywNCj4gKyAgSU4gICAgICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICpCdWxrT3V0 RGF0YSwNCj4gKyAgSU4gT1VUICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICpEYXRhTGVu Z3RoDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgU3RhdHVzOw0K PiArICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsgIFJFTU9U RV9ORElTX1BBQ0tFVF9NU0cgICpSbmRpc1BhY2tldE1zZzsNCj4gKyAgVUlOVE4gICAgICAgICAg ICAgICAgICAgVHJhbnNmZXJMZW5ndGg7DQo+ICsNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAi Um5kaXNVbmRpVHJhbnNtaXQgRGF0YUxlbmd0aCA6ICV4XG4iLCAqRGF0YUxlbmd0aCkpOw0KPiAr DQo+ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFRoaXMp Ow0KPiArDQo+ICsgIFJuZGlzUGFja2V0TXNnID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChS RU1PVEVfTkRJU19QQUNLRVRfTVNHKSArICpEYXRhTGVuZ3RoKTsNCj4gKyAgaWYgKFJuZGlzUGFj a2V0TXNnID09IE5VTEwpIHsNCj4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ ICsgIH0NCj4gKw0KPiArICBSbmRpc1BhY2tldE1zZy0+TWVzc2FnZVR5cGUgICA9IFJORElTX1BB Q0tFVF9NU0c7DQo+ICsgIFJuZGlzUGFja2V0TXNnLT5NZXNzYWdlTGVuZ3RoID0gc2l6ZW9mIChS RU1PVEVfTkRJU19QQUNLRVRfTVNHKSArIChVSU5UMzIpKkRhdGFMZW5ndGg7DQo+ICsgIFJuZGlz UGFja2V0TXNnLT5EYXRhT2Zmc2V0ICAgID0gc2l6ZW9mIChSRU1PVEVfTkRJU19QQUNLRVRfTVNH KSAtIDg7DQo+ICsgIFJuZGlzUGFja2V0TXNnLT5EYXRhTGVuZ3RoICAgID0gKFVJTlQzMikqRGF0 YUxlbmd0aDsNCj4gKw0KPiArICBDb3B5TWVtICgNCj4gKyAgICAoKFVJTlQ4ICopUm5kaXNQYWNr ZXRNc2cpICsgc2l6ZW9mIChSRU1PVEVfTkRJU19QQUNLRVRfTVNHKSwNCj4gKyAgICBCdWxrT3V0 RGF0YSwNCj4gKyAgICAqRGF0YUxlbmd0aA0KPiArICAgICk7DQo+ICsNCj4gKyAgVHJhbnNmZXJM ZW5ndGggPSBSbmRpc1BhY2tldE1zZy0+TWVzc2FnZUxlbmd0aDsNCj4gKw0KPiArICBTdGF0dXMg PSBSbmRpc1RyYW5zbWl0RGF0YU1zZyAoDQo+ICsgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2Us DQo+ICsgICAgICAgICAgICAgKFJFTU9URV9ORElTX01TR19IRUFERVIgKilSbmRpc1BhY2tldE1z ZywNCj4gKyAgICAgICAgICAgICAmVHJhbnNmZXJMZW5ndGgNCj4gKyAgICAgICAgICAgICApOw0K PiArDQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlxuUm5kaXNVbmRpVHJhbnNtaXQgVHJhbnNm ZXJMZW5ndGggJWx4XG4iLCBUcmFuc2Zlckxlbmd0aCkpOw0KPiArDQo+ICsgIEZyZWVQb29sIChS bmRpc1BhY2tldE1zZyk7DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiAr LyoqDQo+ICsgIFJlY2VpdmVzIGFuZCByZW1vdmVzIFJORElTIGhlYWRlciBhbmQgcmV0dXJucyB0 aGUgcmF3IGRhdGEuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIENkYiAgICAgICAgICAgQSBw b2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0g ICAgICBUaGlzICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BS T1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW4sIG91dF0gQnVsa0luRGF0YSAgICBBIHBv aW50ZXIgdG8gdGhlIGJ1ZmZlciBvZiBkYXRhIHRoYXQgd2lsbCBiZSB0cmFuc21pdHRlZCB0byBV U0INCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIG9yIHJlY2VpdmVk IGZyb20gVVNCIGRldmljZS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIERhdGFMZW5ndGggICAgQSBw b2ludGVyIHRvIHRoZSBQYWNrZXRMZW5ndGguDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0 dmFsIEVGSV9CVUZGRVJfVE9PX1NNQUxMICBUaGUgdXNlciBwcm92aWRlZCBidWZmZXIgaXMgdG9v IHNtYWxsDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIE5vIGJ1ZmZlciB3YXMg Zm91bmQgaW4gdGhlIGxpc3QuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJ DQo+ICtSbmRpc1VuZGlSZWNlaXZlICgNCj4gKyAgSU4gICAgIFBYRV9DREIgICAgICAgICAgICAg ICAgICAgICAgKkNkYiwNCj4gKyAgSU4gICAgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAg KlRoaXMsDQo+ICsgIElOIE9VVCBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICpCdWxrSW5E YXRhLA0KPiArICBJTiBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAqRGF0YUxlbmd0 aA0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgIFN0YXR1czsNCj4g KyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgKlVzYlJuZGlzRGV2aWNlOw0KPiArICBSRU1PVEVf TkRJU19QQUNLRVRfTVNHICAqUm5kaXNQYWNrZXRNc2c7DQo+ICsgIFVJTlROICAgICAgICAgICAg ICAgICAgIFRyYW5zZmVyTGVuZ3RoOw0KPiArICBWT0lEICAgICAgICAgICAgICAgICAgICAqQnVm ZmVyOw0KPiArICBQQUNLRVRfTElTVCAgICAgICAgICAgICAqSGVhZFBhY2tldDsNCj4gKyAgUEFD S0VUX0xJU1QgICAgICAgICAgICAgKlBhY2tldExpc3Q7DQo+ICsNCj4gKyAgLy8gQ2hlY2sgaWYg dGhlcmUgaXMgYW55IG91dHN0YW5kaW5nIHBhY2tldCB0byByZWNlaXZlDQo+ICsgIC8vIFRoZSBi dWZmZXIgYWxsb2NhdGVkIGhhcyBhIGxpbmtlZCBMaXN0IGZvbGxvd2VkIGJ5IHRoZSBwYWNrZXQu DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNFX0ZST01fVEhJUyAo VGhpcyk7DQo+ICsgIEJ1ZmZlciAgICAgICAgID0gTlVMTDsNCj4gKyAgSGVhZFBhY2tldCAgICAg PSBOVUxMOw0KPiArDQo+ICsgIHdoaWxlICgxKSB7DQo+ICsgICAgQnVmZmVyID0gQWxsb2NhdGVa ZXJvUG9vbCAoc2l6ZW9mIChQQUNLRVRfTElTVCkgKyBzaXplb2YgKFJFTU9URV9ORElTX1BBQ0tF VF9NU0cpICsgVXNiUm5kaXNEZXZpY2UtPk1heFRyYW5zZmVyU2l6ZSk7DQo+ICsgICAgaWYgKEJ1 ZmZlciA9PSBOVUxMKSB7DQo+ICsgICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ ICsgICAgfQ0KPiArDQo+ICsgICAgUm5kaXNQYWNrZXRNc2cgICAgICAgICAgICAgICAgPSAoUkVN T1RFX05ESVNfUEFDS0VUX01TRyAqKShzaXplb2YgKFBBQ0tFVF9MSVNUKSArIChVSU5UOCAqKUJ1 ZmZlcik7DQo+ICsgICAgUGFja2V0TGlzdCAgICAgICAgICAgICAgICAgICAgPSAoUEFDS0VUX0xJ U1QgKilCdWZmZXI7DQo+ICsgICAgUGFja2V0TGlzdC0+UGFja2V0U3RhcnRCdWZmZXIgPSAoVUlO VDggKilCdWZmZXIgKyBzaXplb2YgKFBBQ0tFVF9MSVNUKTsNCj4gKyAgICAvLyBTYXZlIHRoZSBv cmlnaW5hbCBhZGRyZXNzIGZvciBmcmVlaW5nIGl0IHVwDQo+ICsgICAgUGFja2V0TGlzdC0+T3Jn QnVmZmVyID0gKFVJTlQ4ICopQnVmZmVyOw0KPiArICAgIFRyYW5zZmVyTGVuZ3RoICAgICAgICA9 IFVzYlJuZGlzRGV2aWNlLT5NYXhUcmFuc2ZlclNpemU7DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBS bmRpc1JlY2VpdmVEYXRhTXNnICgNCj4gKyAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLA0K PiArICAgICAgICAgICAgICAgKFJFTU9URV9ORElTX01TR19IRUFERVIgKilSbmRpc1BhY2tldE1z ZywNCj4gKyAgICAgICAgICAgICAgICZUcmFuc2Zlckxlbmd0aA0KPiArICAgICAgICAgICAgICAg KTsNCj4gKw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykgfHwgKFRyYW5zZmVyTGVuZ3Ro ID09IDApKSB7DQo+ICsgICAgICBGcmVlUG9vbCAoQnVmZmVyKTsNCj4gKyAgICAgIGJyZWFrOw0K PiArICAgIH0NCj4gKw0KPiArICAgIC8vIENvbGxlY3QgYWxsIHRoZSBSTkRJUyBwYWNrZXQgaW4g TGlua2VkIGxpc3QuDQo+ICsgICAgaWYgKChSbmRpc1BhY2tldE1zZy0+TWVzc2FnZVR5cGUgPT0g Uk5ESVNfUEFDS0VUX01TRykgJiYNCj4gKyAgICAgICAgKFJuZGlzUGFja2V0TXNnLT5EYXRhT2Zm c2V0ID09IHNpemVvZiAoUkVNT1RFX05ESVNfUEFDS0VUX01TRykgLSBSTkRJU19SRVNFUlZFRF9C WVRFX0xFTkdUSCkgJiYNCj4gKyAgICAgICAgKFRyYW5zZmVyTGVuZ3RoID49IFJuZGlzUGFja2V0 TXNnLT5NZXNzYWdlTGVuZ3RoKSkNCj4gKyAgICB7DQo+ICsgICAgICAvLyBJbnNlcnQgUGFja2V0 DQo+ICsgICAgICBQYWNrZXRMaXN0LT5SZW1haW5pbmdMZW5ndGggPSBUcmFuc2Zlckxlbmd0aDsN Cj4gKyAgICAgIEluc2VydFRhaWxMaXN0ICgmVXNiUm5kaXNEZXZpY2UtPlJlY2VpdmVQYWNrZXRM aXN0LCBCdWZmZXIpOw0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICBGcmVlUG9vbCAoQnVmZmVy KTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICB3aGlsZSAoIUlzTGlzdEVtcHR5ICgmVXNi Um5kaXNEZXZpY2UtPlJlY2VpdmVQYWNrZXRMaXN0KSkgew0KPiArICAgIEhlYWRQYWNrZXQgPSAo UEFDS0VUX0xJU1QgKilHZXRGaXJzdE5vZGUgKCZVc2JSbmRpc0RldmljZS0+UmVjZWl2ZVBhY2tl dExpc3QpOw0KPiArDQo+ICsgICAgUm5kaXNQYWNrZXRNc2cgPSAoUkVNT1RFX05ESVNfUEFDS0VU X01TRyAqKShVSU5UOCAqKUhlYWRQYWNrZXQtPlBhY2tldFN0YXJ0QnVmZmVyOw0KPiArDQo+ICsg ICAgUHJpbnRSbmRpc01zZyAoKFJFTU9URV9ORElTX01TR19IRUFERVIgKilSbmRpc1BhY2tldE1z Zyk7DQo+ICsNCj4gKyAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBwYWNrZXQgaXMgdmFsaWQgUk5E SVMgcGFja2V0Lg0KPiArICAgIGlmICgoSGVhZFBhY2tldC0+UmVtYWluaW5nTGVuZ3RoID4gc2l6 ZW9mIChSRU1PVEVfTkRJU19QQUNLRVRfTVNHKSkgJiYgKFJuZGlzUGFja2V0TXNnLT5NZXNzYWdl VHlwZSA9PSBSTkRJU19QQUNLRVRfTVNHKSAmJg0KPiArICAgICAgICAoUm5kaXNQYWNrZXRNc2ct PkRhdGFPZmZzZXQgPT0gKHNpemVvZiAoUkVNT1RFX05ESVNfUEFDS0VUX01TRykgLSBSTkRJU19S RVNFUlZFRF9CWVRFX0xFTkdUSCkpICYmDQo+ICsgICAgICAgIChIZWFkUGFja2V0LT5SZW1haW5p bmdMZW5ndGggPj0gUm5kaXNQYWNrZXRNc2ctPk1lc3NhZ2VMZW5ndGgpKQ0KPiArICAgIHsNCj4g KyAgICAgIGlmICgqRGF0YUxlbmd0aCA+PSBSbmRpc1BhY2tldE1zZy0+RGF0YUxlbmd0aCkgew0K PiArICAgICAgICBDb3B5TWVtICgNCj4gKyAgICAgICAgICBCdWxrSW5EYXRhLA0KPiArICAgICAg ICAgIChVSU5UOCAqKVJuZGlzUGFja2V0TXNnICsgKFJuZGlzUGFja2V0TXNnLT5EYXRhT2Zmc2V0 ICsgUk5ESVNfUkVTRVJWRURfQllURV9MRU5HVEgpLA0KPiArICAgICAgICAgIFJuZGlzUGFja2V0 TXNnLT5EYXRhTGVuZ3RoDQo+ICsgICAgICAgICAgKTsNCj4gKw0KPiArICAgICAgICAqRGF0YUxl bmd0aCA9ICBSbmRpc1BhY2tldE1zZy0+RGF0YUxlbmd0aDsNCj4gKw0KPiArICAgICAgICBIZWFk UGFja2V0LT5SZW1haW5pbmdMZW5ndGggICA9IEhlYWRQYWNrZXQtPlJlbWFpbmluZ0xlbmd0aCAt IFJuZGlzUGFja2V0TXNnLT5NZXNzYWdlTGVuZ3RoOw0KPiArICAgICAgICBIZWFkUGFja2V0LT5Q YWNrZXRTdGFydEJ1ZmZlciA9IChVSU5UOCAqKVJuZGlzUGFja2V0TXNnICsgUm5kaXNQYWNrZXRN c2ctPk1lc3NhZ2VMZW5ndGg7DQo+ICsNCj4gKyAgICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0K PiArICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgKkRhdGFMZW5ndGggPSBSbmRpc1BhY2tldE1z Zy0+RGF0YUxlbmd0aDsNCj4gKyAgICAgICAgcmV0dXJuIEVGSV9CVUZGRVJfVE9PX1NNQUxMOw0K PiArICAgICAgfQ0KPiArICAgIH0NCj4gKw0KPiArICAgIFJlbW92ZUVudHJ5TGlzdCAoJkhlYWRQ YWNrZXQtPlBhY2tldExpc3QpOw0KPiArICAgIEZyZWVQb29sICgoUEFDS0VUX0xJU1QgKilIZWFk UGFja2V0LT5PcmdCdWZmZXIpOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9OT1RfRk9V TkQ7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGlzIGEgZHVtbXkgZnVuY3Rpb24gd2hp Y2gganVzdCByZXR1cm5zLiBVbmltcGxlbWVudGVkIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NP TCBmdW5jdGlvbnMNCj4gKyAgcG9pbnQgdG8gdGhpcyBmdW5jdGlvbi4NCj4gKw0KPiArICBAcGFy YW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0K PiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2Ug Y29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgIFRoZSBy ZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVT DQo+ICtFRklBUEkNCj4gK1JuZGlzRHVtbXlSZXR1cm4gKA0KPiArICBJTiAgUFhFX0NEQiAgICpD ZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIERFQlVHICgo REVCVUdfSU5GTywgIlJuZGlzRHVtbXlSZXR1cm4gY2FsbGVkXG4iKSk7DQo+ICsgIHJldHVybiBF RklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gc2VuZHMg dGhlIFJORElTIFNFVF9NU0cgY21kDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVXNiUm5kaXNEZXZp Y2UgIEEgcG9pbnRlciB0byB0aGUgVVNCX1JORElTX0RFVklDRSBpbnN0YW5jZS4NCj4gKyAgQHBh cmFtW2luXSAgT2lkICAgICAgICAgICAgIFZhbHVlIG9mIHRoZSBPSUQuDQo+ICsgIEBwYXJhbVtp bl0gIExlbmd0aCAgICAgICAgICBMZW5ndGggb2YgdGhlIGRhdGEgYnVmZmVyLg0KPiArICBAcGFy YW1baW5dICBCdWYgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlci4NCj4g Kw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQg c3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1NlbmRSbmRpc1Nl dE1zZyAoDQo+ICsgIElOICBVU0JfUk5ESVNfREVWSUNFICAqVXNiUm5kaXNEZXZpY2UsDQo+ICsg IElOICBVSU5UOCAgICAgICAgICAgICBPaWQsDQo+ICsgIElOICBVSU5UMzIgICAgICAgICAgICBM ZW5ndGgsDQo+ICsgIElOICBVSU5UOCAgICAgICAgICAgICAqQnVmDQo+ICsgICkNCj4gK3sNCj4g KyAgUkVNT1RFX05ESVNfU0VUX01TRyAgKlJuZGlzU2V0TXNnOw0KPiArICBFRklfU1RBVFVTICAg ICAgICAgICBTdGF0dXM7DQo+ICsNCj4gKyAgUm5kaXNTZXRNc2cgPSBBbGxvY2F0ZVplcm9Qb29s IChzaXplb2YgKFVTQl9STkRJU19ERVZJQ0UpICsgTGVuZ3RoKTsNCj4gKw0KPiArICBSbmRpc1Nl dE1zZy0+TWVzc2FnZVR5cGUgICAgICAgICAgICAgPSBSTkRJU19TRVRfTVNHOw0KPiArICBSbmRp c1NldE1zZy0+TWVzc2FnZUxlbmd0aCAgICAgICAgICAgPSBzaXplb2YgKFJFTU9URV9ORElTX1NF VF9NU0cpICsgTGVuZ3RoOw0KPiArICBSbmRpc1NldE1zZy0+UmVxdWVzdElEICAgICAgICAgICAg ICAgPSBVc2JSbmRpc0RldmljZS0+UmVxdWVzdElkOw0KPiArICBSbmRpc1NldE1zZy0+T2lkICAg ICAgICAgICAgICAgICAgICAgPSBPaWQ7DQo+ICsgIFJuZGlzU2V0TXNnLT5JbmZvcm1hdGlvbkJ1 ZmZlckxlbmd0aCA9IExlbmd0aDsNCj4gKyAgUm5kaXNTZXRNc2ctPkluZm9ybWF0aW9uQnVmZmVy T2Zmc2V0ID0gc2l6ZW9mIChSRU1PVEVfTkRJU19TRVRfTVNHKSAtIDg7DQo+ICsNCj4gKyAgZ0JT LT5Db3B5TWVtICgoKFVJTlQ4ICopUm5kaXNTZXRNc2cpICsgc2l6ZW9mIChSRU1PVEVfTkRJU19T RVRfTVNHKSwgQnVmLCBMZW5ndGgpOw0KPiArDQo+ICsgIFN0YXR1cyA9IFJuZGlzQ29udHJvbE1z ZyAoVXNiUm5kaXNEZXZpY2UsIChSRU1PVEVfTkRJU19NU0dfSEVBREVSICopUm5kaXNTZXRNc2cs IE5VTEwpOw0KPiArDQo+ICsgIEZyZWVQb29sIChSbmRpc1NldE1zZyk7DQo+ICsNCj4gKyAgcmV0 dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gc2VuZCB0 aGUgUk5ESVMgY29tbWFuZCB0aHJvdWdoIHRoZSBkZXZpY2UncyBjb250cm9sIGVuZHBvaW50DQo+ ICsNCj4gKyAgQHBhcmFtW2luXSAgVXNiUm5kaXNEZXZpY2UgICAgQSBwb2ludGVyIHRvIHRoZSBV U0JfUk5ESVNfREVWSUNFIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBSbmRpc01zZyAgICAg ICAgICBBIHBvaW50ZXIgdG8gdGhlIFJFTU9URV9ORElTX01TR19IRUFERVIgZGF0YS4NCj4gKyAg QHBhcmFtW291dF0gUm5kaXNNc2dSZXNwb25zZSAgQSBwb2ludGVyIHRvIHRoZSBSRU1PVEVfTkRJ U19NU0dfSEVBREVSIGRhdGEgZm9yIGdldHRpbmcgcmVzcG9uc2VzLg0KPiArDQo+ICsgIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBidWxrIHRyYW5zZmVyIGhhcyBiZWVuIHN1Y2Nl c3NmdWxseSBleGVjdXRlZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtSbmRpc0Nv bnRyb2xNc2cgKA0KPiArICBJTiAgVVNCX1JORElTX0RFVklDRSAgICAgICAgKlVzYlJuZGlzRGV2 aWNlLA0KPiArICBJTiAgUkVNT1RFX05ESVNfTVNHX0hFQURFUiAgKlJuZGlzTXNnLA0KPiArICBP VVQgUkVNT1RFX05ESVNfTVNHX0hFQURFUiAgKlJuZGlzTXNnUmVzcG9uc2UNCj4gKyAgKQ0KPiAr ew0KPiArICBFRklfVVNCX0lPX1BST1RPQ09MICAgICAgICAgICAqVXNiSW8gPSBVc2JSbmRpc0Rl dmljZS0+VXNiSW87DQo+ICsgIEVGSV9VU0JfREVWSUNFX1JFUVVFU1QgICAgICAgIERldlJlcTsN Cj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgVXNiU3RhdHVzOw0KPiArICBFRklf U1RBVFVTICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIFVJTlQzMiAgICAgICAgICAg ICAgICAgICAgICAgIFNhdmVSZXNwb25zZVR5cGU7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAg ICAgICAgICAgIFNhdmVSZXNwb25zZUxlbmd0aDsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAg ICAgICAgICAgSW5kZXg7DQo+ICsgIFJFTU9URV9ORElTX0lOSVRJQUxJWkVfQ01QTFQgICpSbmRp c0luaXRDbXBsdDsNCj4gKw0KPiArICBTYXZlUmVzcG9uc2VUeXBlICAgPSAwOw0KPiArICBTYXZl UmVzcG9uc2VMZW5ndGggPSAwOw0KPiArICBSbmRpc0luaXRDbXBsdCAgICAgPSAoUkVNT1RFX05E SVNfSU5JVElBTElaRV9DTVBMVCAqKVJuZGlzTXNnUmVzcG9uc2U7DQo+ICsNCj4gKyAgaWYgKFJu ZGlzTXNnUmVzcG9uc2UpIHsNCj4gKyAgICBTYXZlUmVzcG9uc2VUeXBlICAgPSBSbmRpc01zZ1Jl c3BvbnNlLT5NZXNzYWdlVHlwZTsNCj4gKyAgICBTYXZlUmVzcG9uc2VMZW5ndGggPSBSbmRpc01z Z1Jlc3BvbnNlLT5NZXNzYWdlTGVuZ3RoOw0KPiArICB9DQo+ICsNCj4gKyAgWmVyb01lbSAoJkRl dlJlcSwgc2l6ZW9mIChFRklfVVNCX0RFVklDRV9SRVFVRVNUKSk7DQo+ICsNCj4gKyAgRGV2UmVx LlJlcXVlc3RUeXBlID0gVVNCX1JFUV9UWVBFX0NMQVNTIHwgVVNCX1RBUkdFVF9JTlRFUkZBQ0U7 DQo+ICsgIERldlJlcS5SZXF1ZXN0ICAgICA9IFNFTkRfRU5DQVBTVUxBVEVEX0NPTU1BTkQ7DQo+ ICsgIERldlJlcS5WYWx1ZSAgICAgICA9IDA7DQo+ICsgIERldlJlcS5JbmRleCAgICAgICA9IDA7 DQo+ICsgIERldlJlcS5MZW5ndGggICAgICA9IChVSU5UMTYpUm5kaXNNc2ctPk1lc3NhZ2VMZW5n dGg7DQo+ICsNCj4gKyAgUHJpbnRSbmRpc01zZyAoUm5kaXNNc2cpOw0KPiArDQo+ICsgIFN0YXR1 cyA9IFVzYklvLT5Vc2JDb250cm9sVHJhbnNmZXIgKA0KPiArICAgICAgICAgICAgICAgICAgICBV c2JJbywNCj4gKyAgICAgICAgICAgICAgICAgICAgJkRldlJlcSwNCj4gKyAgICAgICAgICAgICAg ICAgICAgRWZpVXNiRGF0YU91dCwNCj4gKyAgICAgICAgICAgICAgICAgICAgVVNCX0VUSEVSTkVU X1RSQU5TRkVSX1RJTUVPVVQsDQo+ICsgICAgICAgICAgICAgICAgICAgIFJuZGlzTXNnLA0KPiAr ICAgICAgICAgICAgICAgICAgICBSbmRpc01zZy0+TWVzc2FnZUxlbmd0aCwNCj4gKyAgICAgICAg ICAgICAgICAgICAgJlVzYlN0YXR1cw0KPiArICAgICAgICAgICAgICAgICAgICApOw0KPiArDQo+ ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzQ29udHJvbE1zZzogVXNiU3RhdHVzIDogJXgg U3RhdHVzIDogJXIgUm5kaXNNc2dSZXNwb25zZSA6ICVseFxuIiwgVXNiU3RhdHVzLCBTdGF0dXMs IFJuZGlzTXNnUmVzcG9uc2UpKTsNCj4gKw0KPiArICAvLyBFcnJvciBvciBubyByZXNwb25zZSBl eHBlY3RlZA0KPiArICBpZiAoKEVGSV9FUlJPUiAoU3RhdHVzKSkgfHwgKFJuZGlzTXNnUmVzcG9u c2UgPT0gTlVMTCkpIHsNCj4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJSbmRpc0NvbnRyb2xN c2c6IFVzYlN0YXR1cyA6ICV4IFN0YXR1cyA6ICVyXG4iLCBVc2JTdGF0dXMsIFN0YXR1cykpOw0K PiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBmb3IgKEluZGV4ID0gMDsg SW5kZXggPCAoUk5ESVNfQ09OVFJPTF9USU1FT1VULzEwMCk7IEluZGV4KyspIHsNCj4gKyAgICBS ZWFkUm5kaXNSZXNwb25zZUludGVycnVwdCAoVXNiUm5kaXNEZXZpY2UpOw0KPiArICAgIFplcm9N ZW0gKCZEZXZSZXEsIHNpemVvZiAoRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCkpOw0KPiArDQo+ICsg ICAgRGV2UmVxLlJlcXVlc3RUeXBlID0gVVNCX0VORFBPSU5UX0RJUl9JTiB8IFVTQl9SRVFfVFlQ RV9DTEFTUyB8IFVTQl9UQVJHRVRfSU5URVJGQUNFOw0KPiArICAgIERldlJlcS5SZXF1ZXN0ICAg ICA9IEdFVF9FTkNBUFNVTEFURURfUkVTUE9OU0U7DQo+ICsgICAgRGV2UmVxLlZhbHVlICAgICAg ID0gMDsNCj4gKyAgICBEZXZSZXEuSW5kZXggICAgICAgPSAwOw0KPiArICAgIERldlJlcS5MZW5n dGggICAgICA9IChVSU5UMTYpUm5kaXNNc2dSZXNwb25zZS0+TWVzc2FnZUxlbmd0aDsNCj4gKw0K PiArICAgIFN0YXR1cyA9IFVzYklvLT5Vc2JDb250cm9sVHJhbnNmZXIgKA0KPiArICAgICAgICAg ICAgICAgICAgICAgIFVzYklvLA0KPiArICAgICAgICAgICAgICAgICAgICAgICZEZXZSZXEsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgRWZpVXNiRGF0YUluLA0KPiArICAgICAgICAgICAgICAg ICAgICAgIFVTQl9FVEhFUk5FVF9UUkFOU0ZFUl9USU1FT1VULA0KPiArICAgICAgICAgICAgICAg ICAgICAgIFJuZGlzTXNnUmVzcG9uc2UsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgUm5kaXNN c2dSZXNwb25zZS0+TWVzc2FnZUxlbmd0aCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAmVXNi U3RhdHVzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICAgIERFQlVHICgo REVCVUdfSU5GTywgIlJuZGlzQ29udHJvbE1zZyBSZXNwb25zZTogVXNiU3RhdHVzIDogJXggU3Rh dHVzIDogJXIgXG4iLCBVc2JTdGF0dXMsIFN0YXR1cykpOw0KPiArDQo+ICsgICAgUHJpbnRSbmRp c01zZyAoUm5kaXNNc2dSZXNwb25zZSk7DQo+ICsNCj4gKyAgICBpZiAoIUVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiArICAgICAgaWYgKChSbmRpc0luaXRDbXBsdC0+UmVxdWVzdElEICE9ICgoUkVN T1RFX05ESVNfSU5JVElBTElaRV9DTVBMVCAqKVJuZGlzTXNnKS0+UmVxdWVzdElEKSB8fCAoUm5k aXNJbml0Q21wbHQtPk1lc3NhZ2VUeXBlICE9IFNhdmVSZXNwb25zZVR5cGUpKSB7DQo+ICsgICAg ICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJldHJ5IHRoZSByZXNwb25zZVxuIikpOw0KPiArDQo+ ICsgICAgICAgIFJuZGlzTXNnUmVzcG9uc2UtPk1lc3NhZ2VUeXBlICAgPSBTYXZlUmVzcG9uc2VU eXBlOw0KPiArICAgICAgICBSbmRpc01zZ1Jlc3BvbnNlLT5NZXNzYWdlTGVuZ3RoID0gU2F2ZVJl c3BvbnNlTGVuZ3RoOw0KPiArICAgICAgICBjb250aW51ZTsNCj4gKyAgICAgIH0NCj4gKyAgICB9 DQo+ICsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgREVCVUcgKChE RUJVR19JTkZPLCAiUm5kaXNDb250cm9sTXNnOiBUaW1lT3V0XG4iKSk7DQo+ICsNCj4gKyAgcmV0 dXJuIEVGSV9USU1FT1VUOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlvbiBz ZW5kIHRoZSBSTkRJUyBjb21tYW5kIHRocm91Z2ggdGhlIGRldmljZSdzIERhdGEgZW5kcG9pbnQN Cj4gKw0KPiArICBAcGFyYW1baW5dICAgICAgVXNiUm5kaXNEZXZpY2UgIEEgcG9pbnRlciB0byB0 aGUgVVNCX1JORElTX0RFVklDRSBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgICAgIFJuZGlz TXNnICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIFJFTU9URV9ORElTX01TR19IRUFERVIgdG8gc2Vu ZCBvdXQuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBUcmFuc2Zlckxlbmd0aCAgVGhlIGxlbmd0aCBv ZiB0aGUgUm5kaXNNc2cgZGF0YSB0byB0cmFuc2Zlci4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsNCj4gKyoq Lw0KPiArRUZJX1NUQVRVUw0KPiArUm5kaXNUcmFuc21pdERhdGFNc2cgKA0KPiArICBJTiAgICAg IFVTQl9STkRJU19ERVZJQ0UgICAgICAgICpVc2JSbmRpc0RldmljZSwNCj4gKyAgSU4gICAgICBS RU1PVEVfTkRJU19NU0dfSEVBREVSICAqUm5kaXNNc2csDQo+ICsgIElOIE9VVCAgVUlOVE4gICAg ICAgICAgICAgICAgICAgKlRyYW5zZmVyTGVuZ3RoDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NU QVRVUyAgU3RhdHVzOw0KPiArICBVSU5UMzIgICAgICBVc2JTdGF0dXM7DQo+ICsNCj4gKyAgaWYg KFVzYlJuZGlzRGV2aWNlLT5CdWxrSW5FbmRwb2ludCA9PSAwKSB7DQo+ICsgICAgR2V0RW5kcG9p bnQgKFVzYlJuZGlzRGV2aWNlLT5Vc2JJb0NkY0RhdGEsIFVzYlJuZGlzRGV2aWNlKTsNCj4gKyAg fQ0KPiArDQo+ICsgIFByaW50Um5kaXNNc2cgKFJuZGlzTXNnKTsNCj4gKw0KPiArICBTdGF0dXMg PSBVc2JSbmRpc0RldmljZS0+VXNiSW9DZGNEYXRhLT5Vc2JCdWxrVHJhbnNmZXIgKA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5V c2JJb0NkY0RhdGEsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVXNiUm5kaXNEZXZpY2UtPkJ1bGtPdXRFbmRwb2ludCwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBSbmRpc01zZywNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zlckxlbmd0aCwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfVFhfRVRIRVJORVRfQlVMS19USU1F T1VULA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZVc2JT dGF0dXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0K PiArDQo+ICsgIGlmIChTdGF0dXMgPT0gRUZJX1NVQ0NFU1MpIHsNCj4gKyAgICBnU3RvcEJ1bGtJ bkNudCA9IE1BWElNVU1fU1RPUEJVTEtJTl9DTlQ7ICAgICAvLyBBZnRlciBzZW5kaW5nIGNtZCAs d2Ugd2lsbCBwb2xsaW5nIHJlY2VpdmUgcGFja2FnZSBmb3IgTUFYSU1VTV9TVE9QQlVMS0lOX0NO VCB0aW1lcw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiAr LyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gc2VuZCB0aGUgUk5ESVMgY29tbWFuZCB0aHJvdWdoIHRo ZSBkZXZpY2UncyBEYXRhIGVuZHBvaW50DQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIFVzYlJu ZGlzRGV2aWNlICAgIEEgcG9pbnRlciB0byB0aGUgVVNCX1JORElTX0RFVklDRSBpbnN0YW5jZS4N Cj4gKyAgQHBhcmFtW2luLCBvdXRdIFJuZGlzTXNnICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUg UkVNT1RFX05ESVNfTVNHX0hFQURFUiB0byBzZW5kIG91dC4NCj4gKyAgQHBhcmFtW2luLCBvdXRd IFRyYW5zZmVyTGVuZ3RoICAgIFRoZSBsZW5ndGggb2YgdGhlIFJuZGlzTXNnIGRhdGEgdG8gdHJh bnNmZXIuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgVGhlIHJlcXVlc3QgZXhl Y3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1JuZGlz UmVjZWl2ZURhdGFNc2cgKA0KPiArICBJTiAgICAgIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICpV c2JSbmRpc0RldmljZSwNCj4gKyAgSU4gT1VUICBSRU1PVEVfTkRJU19NU0dfSEVBREVSICAqUm5k aXNNc2csDQo+ICsgIElOIE9VVCAgVUlOVE4gICAgICAgICAgICAgICAgICAgKlRyYW5zZmVyTGVu Z3RoDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiArICBVSU5UMzIg ICAgICBVc2JTdGF0dXM7DQo+ICsNCj4gKyAgVXNiU3RhdHVzID0gMDsNCj4gKw0KPiArICBpZiAo VXNiUm5kaXNEZXZpY2UtPkJ1bGtJbkVuZHBvaW50ID09IDApIHsNCj4gKyAgICBHZXRFbmRwb2lu dCAoVXNiUm5kaXNEZXZpY2UtPlVzYklvQ2RjRGF0YSwgVXNiUm5kaXNEZXZpY2UpOw0KPiArICB9 DQo+ICsNCj4gKyAgLy8gVXNlIGdTdG9wQnVsa0luQ250IHRvIHN0b3AgQnVsa0luIGNvbW1hbmQN Cj4gKyAgaWYgKGdTdG9wQnVsa0luQ250IHx8IExBTl9CVUxLSU5fQ01EX0NPTlRST0wpIHsNCj4g KyAgICBTdGF0dXMgPSBVc2JSbmRpc0RldmljZS0+VXNiSW9DZGNEYXRhLT5Vc2JCdWxrVHJhbnNm ZXIgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNi Um5kaXNEZXZpY2UtPlVzYklvQ2RjRGF0YSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5CdWxrSW5FbmRwb2ludCwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJuZGlzTXNnLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmZXJMZW5n dGgsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0Jf UlhfRVRIRVJORVRfQlVMS19USU1FT1VULA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJlVzYlN0YXR1cw0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICAgIGlmICghRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ICsgICAgICBnU3RvcEJ1bGtJbkNudCA9IE1JTklNVU1fU1RPUEJVTEtJTl9DTlQ7 DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgIGdTdG9wQnVsa0luQ250LS07DQo+ICsgICAgfQ0K PiArICB9IGVsc2Ugew0KPiArICAgIFN0YXR1cyAgICAgICAgICA9IEVGSV9USU1FT1VUOw0KPiAr ICAgICpUcmFuc2Zlckxlbmd0aCA9IDA7DQo+ICsgICAgZ0Jsb2NrQnVsa0luQ250Kys7DQo+ICsg IH0NCj4gKw0KPiArICBpZiAoZ0Jsb2NrQnVsa0luQ250ID4gQlVMS0lOX0NNRF9QT0xMSU5HX0NO VCkgew0KPiArICAgIGdTdG9wQnVsa0luQ250ICA9IE1JTklNVU1fU1RPUEJVTEtJTl9DTlQ7DQo+ ICsgICAgZ0Jsb2NrQnVsa0luQ250ID0gMDsNCj4gKyAgfQ0KPiArDQo+ICsgIFByaW50Um5kaXNN c2cgKFJuZGlzTXNnKTsNCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsv KioNCj4gKyAgUHJpbnRzIFJORElTIEhlYWRlciBhbmQgRGF0YQ0KPiArDQo+ICsgIEBwYXJhbVtp bl0gUm5kaXNNc2cgICAgQSBwb2ludGVyIHRvIHRoZSBSRU1PVEVfTkRJU19NU0dfSEVBREVSIGRh dGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArUHJpbnRSbmRpc01zZyAoDQo+ICsgIElOICBS RU1PVEVfTkRJU19NU0dfSEVBREVSICAqUm5kaXNNc2cNCj4gKyAgKQ0KPiArew0KPiArICBVSU5U TiAgICAgICAgICAgICAgICAgICAgTGVuZ3RoOw0KPiArICBSRU1PVEVfTkRJU19RVUVSWV9DTVBM VCAgKlJuZGlzUXVlcnlDbXBsdDsNCj4gKw0KPiArICBMZW5ndGggPSAwOw0KPiArDQo+ICsgIHN3 aXRjaCAoUm5kaXNNc2ctPk1lc3NhZ2VUeXBlKSB7DQo+ICsgICAgY2FzZSBSTkRJU19QQUNLRVRf TVNHOg0KPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiUk5ESVNfUEFDS0VUX01TRzpcbiIp KTsNCj4gKyAgICAgIExlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfUEFDS0VUX01TRykgKyAw eDE0Ow0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBSTkRJU19JTklUSUFMSVpFX01TRzoN Cj4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJORElTX0lOSVRJQUxJWkVfTVNHOlxuIikp Ow0KPiArICAgICAgTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJU19JTklUSUFMSVpFX01TRyk7 DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBjYXNlIFJORElTX0lOSVRJQUxJWkVfQ01QTFQ6DQo+ ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJSTkRJU19JTklUSUFMSVpFX0NNUExUOlxuIikp Ow0KPiArICAgICAgTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJU19JTklUSUFMSVpFX0NNUExU KTsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgUk5ESVNfSExUX01TRzoNCj4gKyAgICAg IERFQlVHICgoREVCVUdfSU5GTywgIlJORElTX0hMVF9NU0c6XG4iKSk7DQo+ICsgICAgICBMZW5n dGggPSBzaXplb2YgKFJFTU9URV9ORElTX0hBTFRfTVNHKTsNCj4gKyAgICAgIGJyZWFrOw0KPiAr ICAgIGNhc2UgUk5ESVNfUVVFUllfTVNHOg0KPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAi Uk5ESVNfUVVFUllfTVNHOlxuIikpOw0KPiArICAgICAgTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVf TkRJU19RVUVSWV9NU0cpOw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBSTkRJU19RVUVS WV9DTVBMVDoNCj4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJORElTX1FVRVJZX0NNUExU OlxuIikpOw0KPiArICAgICAgUm5kaXNRdWVyeUNtcGx0ID0gKFJFTU9URV9ORElTX1FVRVJZX0NN UExUICopUm5kaXNNc2c7DQo+ICsgICAgICBMZW5ndGggICAgICAgICAgPSBzaXplb2YgKFJFTU9U RV9ORElTX1FVRVJZX0NNUExUKSArIFJuZGlzUXVlcnlDbXBsdC0+SW5mb3JtYXRpb25CdWZmZXJM ZW5ndGg7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBjYXNlIFJORElTX1NFVF9NU0c6DQo+ICsg ICAgICBERUJVRyAoKERFQlVHX0lORk8sICJSTkRJU19TRVRfTVNHOlxuIikpOw0KPiArICAgICAg TGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJU19TRVRfTVNHKTsNCj4gKyAgICAgIGJyZWFrOw0K PiArICAgIGNhc2UgUk5ESVNfU0VUX0NNUExUOg0KPiArICAgICAgREVCVUcgKChERUJVR19JTkZP LCAiUk5ESVNfU0VUX0NNUExUOlxuIikpOw0KPiArICAgICAgTGVuZ3RoID0gc2l6ZW9mIChSRU1P VEVfTkRJU19TRVRfQ01QTFQpOw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBSTkRJU19S RVNFVF9NU0c6DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJSTkRJU19SRVNFVF9NU0c6 XG4iKSk7DQo+ICsgICAgICBMZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElTX1JFU0VUX01TRyk7 DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBjYXNlIFJORElTX1JFU0VUX0NNUExUOg0KPiArICAg ICAgREVCVUcgKChERUJVR19JTkZPLCAiUk5ESVNfUkVTRVRfQ01QTFQ6XG4iKSk7DQo+ICsgICAg ICBMZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElTX1JFU0VUX0NNUExUKTsNCj4gKyAgICAgIGJy ZWFrOw0KPiArICAgIGNhc2UgUk5ESVNfSU5ESUNBVEVfU1RBVFVTX01TRzoNCj4gKyAgICAgIERF QlVHICgoREVCVUdfSU5GTywgIlJORElTX0lORElDQVRFX1NUQVRVU19NU0c6XG4iKSk7DQo+ICsg ICAgICBMZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElTX0lORElDQVRFX1NUQVRVU19NU0cpOw0K PiArICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBSTkRJU19LRUVQQUxJVkVfTVNHOg0KPiArICAg ICAgREVCVUcgKChERUJVR19JTkZPLCAiUk5ESVNfS0VFUEFMSVZFX01TRzpcbiIpKTsNCj4gKyAg ICAgIExlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfS0VFUEFMSVZFX01TRyk7DQo+ICsgICAg ICBicmVhazsNCj4gKyAgICBjYXNlIFJORElTX0tFRVBBTElWRV9DTVBMVDoNCj4gKyAgICAgIERF QlVHICgoREVCVUdfSU5GTywgIlJORElTX0tFRVBBTElWRV9DTVBMVDpcbiIpKTsNCj4gKyAgICAg IExlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfS0VFUEFMSVZFX0NNUExUKTsNCj4gKyAgfQ0K PiArDQo+ICsgIGlmIChMZW5ndGgpIHsNCj4gKyAgICBVSU5UTiAgSW5kZXggPSAwOw0KPiArICAg IGZvciAoIDsgTGVuZ3RoOyBMZW5ndGggLT0gNCwgSW5kZXgrKykgew0KPiArICAgICAgREVCVUcg KChERUJVR19JTkZPLCAiJThYXHQiLCAqKChVSU5UMzIgKilSbmRpc01zZyArIEluZGV4KSkpOw0K PiArICAgICAgaWYgKCgoSW5kZXggJSA0KSA9PSAzKSAmJiAoSW5kZXggIT0gMCkpIHsNCj4gKyAg ICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiXG4iKSk7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAg ICAgIGlmICgoTGVuZ3RoIDwgOCkgJiYgKExlbmd0aCA+IDQpKSB7DQo+ICsgICAgICAgIFVJTlQz MiAgRGF0YTMyOw0KPiArICAgICAgICBJbmRleCsrOw0KPiArICAgICAgICBEYXRhMzIgPSAqKChV SU5UMzIgKilSbmRpc01zZyArIEluZGV4KTsNCj4gKyAgICAgICAgREVCVUcgKChERUJVR19JTkZP LCAiJThYXHQiLCBEYXRhMzIpKTsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgICB9DQo+ICsg ICAgfQ0KPiArDQo+ICsgICAgaWYgKEluZGV4ICUgNCkgew0KPiArICAgICAgREVCVUcgKChERUJV R19JTkZPLCAiXG4iKSk7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9DQo+IC0tDQo+IDIuMzUuMS53 aW5kb3dzLjINCj4gLVRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhpcyBtZXNzYWdlIG1h eSBiZSBjb25maWRlbnRpYWwgYW5kIHByb3ByaWV0YXJ5IHRvIEFtZXJpY2FuIE1lZ2F0cmVuZHMg KEFNSSkuIFRoaXMgY29tbXVuaWNhdGlvbiBpcyBpbnRlbmRlZCB0byBiZSByZWFkIG9ubHkgYnkg dGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRvIHdob20gaXQgaXMgYWRkcmVzc2VkIG9yIGJ5IHRo ZWlyIGRlc2lnbmVlLiBJZiB0aGUgcmVhZGVyIG9mIHRoaXMgbWVzc2FnZSBpcyBub3QgdGhlIGlu dGVuZGVkIHJlY2lwaWVudCwgeW91IGFyZSBvbiBub3RpY2UgdGhhdCBhbnkgZGlzdHJpYnV0aW9u IG9mIHRoaXMgbWVzc2FnZSwgaW4gYW55IGZvcm0sIGlzIHN0cmljdGx5IHByb2hpYml0ZWQuIFBs ZWFzZSBwcm9tcHRseSBub3RpZnkgdGhlIHNlbmRlciBieSByZXBseSBlLW1haWwgb3IgYnkgdGVs ZXBob25lIGF0IDc3MC0yNDYtODYwMCwgYW5kIHRoZW4gZGVsZXRlIG9yIGRlc3Ryb3kgYWxsIGNv cGllcyBvZiB0aGUgdHJhbnNtaXNzaW9uLg0KPg0KPg0KPiANCj4NCj4NCi1UaGUgaW5mb3JtYXRp b24gY29udGFpbmVkIGluIHRoaXMgbWVzc2FnZSBtYXkgYmUgY29uZmlkZW50aWFsIGFuZCBwcm9w cmlldGFyeSB0byBBbWVyaWNhbiBNZWdhdHJlbmRzIChBTUkpLiBUaGlzIGNvbW11bmljYXRpb24g aXMgaW50ZW5kZWQgdG8gYmUgcmVhZCBvbmx5IGJ5IHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0 byB3aG9tIGl0IGlzIGFkZHJlc3NlZCBvciBieSB0aGVpciBkZXNpZ25lZS4gSWYgdGhlIHJlYWRl ciBvZiB0aGlzIG1lc3NhZ2UgaXMgbm90IHRoZSBpbnRlbmRlZCByZWNpcGllbnQsIHlvdSBhcmUg b24gbm90aWNlIHRoYXQgYW55IGRpc3RyaWJ1dGlvbiBvZiB0aGlzIG1lc3NhZ2UsIGluIGFueSBm b3JtLCBpcyBzdHJpY3RseSBwcm9oaWJpdGVkLiBQbGVhc2UgcHJvbXB0bHkgbm90aWZ5IHRoZSBz ZW5kZXIgYnkgcmVwbHkgZS1tYWlsIG9yIGJ5IHRlbGVwaG9uZSBhdCA3NzAtMjQ2LTg2MDAsIGFu ZCB0aGVuIGRlbGV0ZSBvciBkZXN0cm95IGFsbCBjb3BpZXMgb2YgdGhlIHRyYW5zbWlzc2lvbi4N Cg==