From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CD159C433E0 for ; Wed, 23 Dec 2020 01:45:35 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 66AED2256F for ; Wed, 23 Dec 2020 01:45:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726923AbgLWBpT (ORCPT ); Tue, 22 Dec 2020 20:45:19 -0500 Received: from 60-251-196-230.HINET-IP.hinet.net ([60.251.196.230]:65235 "EHLO ironport.ite.com.tw" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726069AbgLWBpS (ORCPT ); Tue, 22 Dec 2020 20:45:18 -0500 IronPort-SDR: 1nXLhCLXVkSsoXtVI2QcKPDQ3zQ3wrv3pcyF5NTnplVa6OuZb5ukmbmJ0CXf4YlHQcSW6qp95Q ocMl9L1SdyJQ== Received: from unknown (HELO mse.ite.com.tw) ([192.168.35.30]) by ironport.ite.com.tw with ESMTP; 23 Dec 2020 09:44:34 +0800 Received: from CSBMAIL1.internal.ite.com.tw (csbmail1.internal.ite.com.tw [192.168.65.58]) by mse.ite.com.tw with ESMTP id 0BN1iSRZ032475; Wed, 23 Dec 2020 09:44:28 +0800 (GMT-8) (envelope-from allen.chen@ite.com.tw) Received: from CSBMAIL1.internal.ite.com.tw (192.168.65.58) by CSBMAIL1.internal.ite.com.tw (192.168.65.58) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Wed, 23 Dec 2020 09:44:27 +0800 Received: from CSBMAIL1.internal.ite.com.tw ([fe80::2cba:f37c:ac09:f33f]) by CSBMAIL1.internal.ite.com.tw ([fe80::2cba:f37c:ac09:f33f%22]) with mapi id 15.01.1713.004; Wed, 23 Dec 2020 09:44:27 +0800 From: To: CC: , , , , , , , , , , , , , , , , Subject: RE: [PATCH v6] drm/bridge: add it6505 driver Thread-Topic: [PATCH v6] drm/bridge: add it6505 driver Thread-Index: AQHW2H5MqIJWKQZyLUe7jYGEvJP5aaoD6AEw Date: Wed, 23 Dec 2020 01:44:27 +0000 Message-ID: <53d756230bb04f239c6482c688ce7523@ite.com.tw> References: <20201208105808.78029-1-allen.chen@ite.com.tw> <734036b1c57f4fb89d6cf68e54337ee7@ite.com.tw> In-Reply-To: Accept-Language: en-US Content-Language: zh-TW X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [192.168.70.104] x-tm-snts-smtp: 57ADD411EC0C474BF228A30C90C235EB7F5FA0B8F29E36AFABAC9455F8C5587D2000:8 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MAIL: mse.ite.com.tw 0BN1iSRZ032475 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgTGF1cmVudCBQaW5jaGFydA0KDQpUaGFua3MgZm9yIHJlcGx5Lg0KDQotLS0tLU9yaWdpbmFs IE1lc3NhZ2UtLS0tLQ0KRnJvbTogTGF1cmVudCBQaW5jaGFydCBbbWFpbHRvOmxhdXJlbnQucGlu Y2hhcnRAaWRlYXNvbmJvYXJkLmNvbV0gDQpTZW50OiBXZWRuZXNkYXksIERlY2VtYmVyIDIzLCAy MDIwIDEyOjIwIEFNDQpUbzogQWxsZW4gQ2hlbiAo6Zmz5p+P5a6HKQ0KQ2M6IEphdS1DaGloIFRz ZW5nICjmm77mmK3mmbopOyBIZXJtZXMgV3UgKOWQs+S9s+Wujyk7IEtlbm5ldGggSHVuZyAo5rSq 5a625YCrKTsgcGloc3VuQGNocm9taXVtLm9yZzsgaml0YW8uc2hpQG1lZGlhdGVrLmNvbTsgeWxs aW5AZ29vZ2xlLmNvbTsgYS5oYWpkYUBzYW1zdW5nLmNvbTsgbmFybXN0cm9uZ0BiYXlsaWJyZS5j b207IGpvbmFzQGt3aWJvby5zZTsgamVybmVqLnNrcmFiZWNAc2lvbC5uZXQ7IGFpcmxpZWRAbGlu dXguaWU7IGRhbmllbEBmZndsbC5jaDsgbWF0dGhpYXMuYmdnQGdtYWlsLmNvbTsgbGludXgta2Vy bmVsQHZnZXIua2VybmVsLm9yZzsgZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZzsgbGlu dXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnOyBsaW51eC1tZWRpYXRla0BsaXN0cy5p bmZyYWRlYWQub3JnDQpTdWJqZWN0OiBSZTogW1BBVENIIHY2XSBkcm0vYnJpZGdlOiBhZGQgaXQ2 NTA1IGRyaXZlcg0KDQpIaSBBbGxlbiwNCg0KT24gVHVlLCBEZWMgMjIsIDIwMjAgYXQgMTE6Mjk6 MzRBTSArMDAwMCwgYWxsZW4uY2hlbkBpdGUuY29tLnR3IHdyb3RlOg0KPiBIaQ0KPiANCj4gSXQg aGFzIGJlZW4gYWJvdXQgdHdvIHdlZWtzIHNpbmNlIEkgcG9zdGVkIHY2IGFuZCBoYXZlbid0IGhl YXJkIGFueXRoaW5nLg0KPiBDb25zaWRlciB0aGlzIGEgZ2VudGxlIHBpbmcuDQo+IA0KPiBKdXN0 IHdvbmRlcmluZyBpZiB0aGUgc2V0IG5lZWRzIGFkZGl0aW9uYWwgd29yayBhbmQgSSB3aWxsIGZp eCBhbmQNCj4gdXBzdHJlYW0gYWdhaW4uDQoNCkknbSBhZnJhaWQgSSBkb24ndCBoYXZlIGVub3Vn aCBiYW5kd2lkdGggdGhlc2UgZGF5cyB0byByZXZpZXcgYWxsIG5ldw0KYnJpZGdlIGRyaXZlcnMg Oi1TIE1heWJlIG9uZSBvZiB0aGUgRFJNIGJyaWRnZSBtYWludGFpbmVycyB3b3VsZCBoYXZlDQpt b3JlIHRpbWUgdG8gc3BlbmQgPw0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZy b206IEFsbGVuIENoZW4gKOmZs+afj+WuhykgDQo+IFNlbnQ6IFR1ZXNkYXksIERlY2VtYmVyIDA4 LCAyMDIwIDY6NTggUE0NCj4gQ2M6IEphdS1DaGloIFRzZW5nICjmm77mmK3mmbopOyBIZXJtZXMg V3UgKOWQs+S9s+Wujyk7IEtlbm5ldGggSHVuZyAo5rSq5a625YCrKTsgQWxsZW4gQ2hlbiAo6Zmz 5p+P5a6HKTsgUGktSHN1biBTaGloOyBKaXRhbyBTaGk7IFlpbHVuIExpbjsgSGVybWVzIFd1ICjl kLPkvbPlro8pOyBBbmRyemVqIEhhamRhOyBOZWlsIEFybXN0cm9uZzsgTGF1cmVudCBQaW5jaGFy dDsgSm9uYXMgS2FybG1hbjsgSmVybmVqIFNrcmFiZWM7IERhdmlkIEFpcmxpZTsgRGFuaWVsIFZl dHRlcjsgTWF0dGhpYXMgQnJ1Z2dlcjsgb3BlbiBsaXN0OyBvcGVuIGxpc3Q6RFJNIERSSVZFUlM7 IG1vZGVyYXRlZCBsaXN0OkFSTS9NZWRpYXRlayBTb0Mgc3VwcG9ydDsgbW9kZXJhdGVkIGxpc3Q6 QVJNL01lZGlhdGVrIFNvQyBzdXBwb3J0DQo+IFN1YmplY3Q6IFtQQVRDSCB2Nl0gZHJtL2JyaWRn ZTogYWRkIGl0NjUwNSBkcml2ZXINCj4gDQo+IFRoaXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgaVRF IElUNjUwNS4NCj4gVGhpcyBkZXZpY2UgY2FuIGNvbnZlcnQgRFBJIHNpZ25hbCB0byBEUCBvdXRw dXQuDQo+IA0KPiBGcm9tOiBBbGxlbiBDaGVuIDxhbGxlbi5jaGVuQGl0ZS5jb20udHc+DQo+IFNp Z25lZC1vZmYtYnk6IEppdGFvIFNoaSA8aml0YW8uc2hpQG1lZGlhdGVrLmNvbT4NCj4gU2lnbmVk LW9mZi1ieTogUGktSHN1biBTaGloIDxwaWhzdW5AY2hyb21pdW0ub3JnPg0KPiBTaWduZWQtb2Zm LWJ5OiBZaWx1biBMaW4gPHlsbGluQGdvb2dsZS5jb20+DQo+IFNpZ25lZC1vZmYtYnk6IEhlcm1l cyBXdSA8aGVybWVzLnd1QGl0ZS5jb20udHc+DQo+IFNpZ25lZC1vZmYtYnk6IEFsbGVuIENoZW4g PGFsbGVuLmNoZW5AaXRlLmNvbS50dz4NCj4gLS0tDQo+ICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdl L0tjb25maWcgICAgICB8ICAgIDcgKw0KPiAgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmls ZSAgICAgfCAgICAxICsNCj4gIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvaXRlLWl0NjUwNS5jIHwg MzM0MyArKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gIDMgZmlsZXMgY2hhbmdlZCwgMzM1 MSBpbnNlcnRpb25zKCspDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS9pdGUtaXQ2NTA1LmMNCj4gDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJp ZGdlL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcNCj4gaW5kZXggZTQx MTBkNmNhN2IzYy4uMjVkMzRkNzE5NjAwNCAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2JyaWRnZS9LY29uZmlnDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZw0K PiBAQCAtNzQsNiArNzQsMTMgQEAgY29uZmlnIERSTV9MT05USVVNX0xUOTYxMVVYQw0KPiAgCSAg SERNSSBzaWduYWxzDQo+ICAJICBQbGVhc2Ugc2F5IFkgaWYgeW91IGhhdmUgc3VjaCBoYXJkd2Fy ZS4NCj4gIA0KPiArY29uZmlnIERSTV9JVEVfSVQ2NTA1DQo+ICsJdHJpc3RhdGUgIklURSBJVDY1 MDUgRGlzcGxheVBvcnQgYnJpZGdlIg0KPiArCWRlcGVuZHMgb24gT0YNCj4gKwlzZWxlY3QgRFJN X0tNU19IRUxQRVINCj4gKwloZWxwDQo+ICsJICBJVEUgSVQ2NTA1IERpc3BsYXlQb3J0IGJyaWRn ZSBjaGlwIGRyaXZlci4NCj4gKw0KPiAgY29uZmlnIERSTV9MVkRTX0NPREVDDQo+ICAJdHJpc3Rh dGUgIlRyYW5zcGFyZW50IExWRFMgZW5jb2RlcnMgYW5kIGRlY29kZXJzIHN1cHBvcnQiDQo+ICAJ ZGVwZW5kcyBvbiBPRg0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtl ZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUNCj4gaW5kZXggODZlN2FjYzc2 ZjhkNi4uMmIyZjhmMGI1YjBmYSAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS9NYWtlZmlsZQ0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlDQo+IEBA IC00LDYgKzQsNyBAQCBvYmotJChDT05GSUdfRFJNX0NIUk9OVEVMX0NINzAzMykgKz0gY2hyb250 ZWwtY2g3MDMzLm8NCj4gIG9iai0kKENPTkZJR19EUk1fRElTUExBWV9DT05ORUNUT1IpICs9IGRp c3BsYXktY29ubmVjdG9yLm8NCj4gIG9iai0kKENPTkZJR19EUk1fTE9OVElVTV9MVDk2MTEpICs9 IGxvbnRpdW0tbHQ5NjExLm8NCj4gIG9iai0kKENPTkZJR19EUk1fTE9OVElVTV9MVDk2MTFVWEMp ICs9IGxvbnRpdW0tbHQ5NjExdXhjLm8NCj4gK29iai0kKENPTkZJR19EUk1fSVRFX0lUNjUwNSkg Kz0gaXRlLWl0NjUwNS5vDQo+ICBvYmotJChDT05GSUdfRFJNX0xWRFNfQ09ERUMpICs9IGx2ZHMt Y29kZWMubw0KPiAgb2JqLSQoQ09ORklHX0RSTV9NRUdBQ0hJUFNfU1REUFhYWFhfR0VfQjg1MFYz X0ZXKSArPSBtZWdhY2hpcHMtc3RkcHh4eHgtZ2UtYjg1MHYzLWZ3Lm8NCj4gIG9iai0kKENPTkZJ R19EUk1fTlhQX1BUTjM0NjApICs9IG54cC1wdG4zNDYwLm8NCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9icmlkZ2UvaXRlLWl0NjUwNS5jIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9p dGUtaXQ2NTA1LmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAw MC4uNWU3NjcxOWE1MWE0YQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvaXRlLWl0NjUwNS5jDQo+IEBAIC0wLDAgKzEsMzM0MyBAQA0KPiArLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKQ0KPiArLyoN Cj4gKyAqIENvcHlyaWdodCAoYykgMjAyMCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuDQo+ICsgKi8NCj4gKyNpbmNsdWRlIDxsaW51eC9iaXRzLmg+DQo+ICsjaW5j bHVkZSA8bGludXgvZGVsYXkuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4NCj4gKyNp bmNsdWRlIDxsaW51eC9lcnIuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9leHRjb24uaD4NCj4gKyNp bmNsdWRlIDxsaW51eC9mcy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4N Cj4gKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQu aD4NCj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+DQo+ICsjaW5jbHVkZSA8bGlu dXgvcmVnbWFwLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+DQo+ ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+DQo+ ICsNCj4gKyNpbmNsdWRlIDxjcnlwdG8vaGFzaC5oPg0KPiArDQo+ICsjaW5jbHVkZSA8ZHJtL2Ry bV9hdG9taWNfaGVscGVyLmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9icmlkZ2UuaD4NCj4gKyNp bmNsdWRlIDxkcm0vZHJtX2NydGMuaD4NCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVy Lmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9kcF9oZWxwZXIuaD4NCj4gKyNpbmNsdWRlIDxkcm0v ZHJtX2VkaWQuaD4NCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2hkY3AuaD4NCj4gKyNpbmNsdWRlIDxk cm0vZHJtX3ByaW50Lmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9wcm9iZV9oZWxwZXIuaD4NCj4g Kw0KPiArI2luY2x1ZGUgPHNvdW5kL2hkbWktY29kZWMuaD4NCj4gKw0KPiArI2RlZmluZSBSRUdf SUNfVkVSIDB4MDQNCj4gKw0KPiArI2RlZmluZSBSRUdfUkVTRVRfQ1RSTCAweDA1DQo+ICsjZGVm aW5lIFZJREVPX1JFU0VUIEJJVCgwKQ0KPiArI2RlZmluZSBBVURJT19SRVNFVCBCSVQoMSkNCj4g KyNkZWZpbmUgQUxMX0xPR0lDX1JFU0VUIEJJVCgyKQ0KPiArI2RlZmluZSBBVVhfUkVTRVQgQklU KDMpDQo+ICsjZGVmaW5lIEhEQ1BfUkVTRVQgQklUKDQpDQo+ICsNCj4gKyNkZWZpbmUgSU5UX1NU QVRVU18wMSAweDA2DQo+ICsjZGVmaW5lIElOVF9NQVNLXzAxIDB4MDkNCj4gKyNkZWZpbmUgSU5U X0hQRF9DSEFOR0UgQklUKDApDQo+ICsjZGVmaW5lIElOVF9SRUNFSVZFX0hQRF9JUlEgQklUKDEp DQo+ICsjZGVmaW5lIElOVF9TQ0RUX0NIQU5HRSBCSVQoMikNCj4gKyNkZWZpbmUgSU5UX0hEQ1Bf RkFJTCBCSVQoMykNCj4gKyNkZWZpbmUgSU5UX0hEQ1BfRE9ORSBCSVQoNCkNCj4gKw0KPiArI2Rl ZmluZSBJTlRfU1RBVFVTXzAyIDB4MDcNCj4gKyNkZWZpbmUgSU5UX01BU0tfMDIgMHgwQQ0KPiAr I2RlZmluZSBJTlRfQVVYX0NNRF9GQUlMIEJJVCgwKQ0KPiArI2RlZmluZSBJTlRfSERDUF9LU1Zf Q0hFQ0sgQklUKDEpDQo+ICsjZGVmaW5lIElOVF9BVURJT19GSUZPX0VSUk9SIEJJVCgyKQ0KPiAr DQo+ICsjZGVmaW5lIElOVF9TVEFUVVNfMDMgMHgwOA0KPiArI2RlZmluZSBJTlRfTUFTS18wMyAw eDBCDQo+ICsjZGVmaW5lIElOVF9MSU5LX1RSQUlOX0ZBSUwgQklUKDQpDQo+ICsjZGVmaW5lIElO VF9WSURfRklGT19FUlJPUiBCSVQoNSkNCj4gKyNkZWZpbmUgSU5UX0lPX0xBVENIX0ZJRk9fT1ZF UkZMT1cgQklUKDcpDQo+ICsNCj4gKyNkZWZpbmUgUkVHX1NZU1RFTV9TVFMgMHgwRA0KPiArI2Rl ZmluZSBJTlRfU1RTIEJJVCgwKQ0KPiArI2RlZmluZSBIUERfU1RTIEJJVCgxKQ0KPiArI2RlZmlu ZSBWSURFT19TVEIgQklUKDIpDQo+ICsNCj4gKyNkZWZpbmUgUkVHX0xJTktfVFJBSU5fU1RTIDB4 MEUNCj4gKyNkZWZpbmUgTElOS19TVEFURV9DUiBCSVQoMikNCj4gKyNkZWZpbmUgTElOS19TVEFU RV9FUSBCSVQoMykNCj4gKyNkZWZpbmUgTElOS19TVEFURV9OT1JQIEJJVCg0KQ0KPiArDQo+ICsj ZGVmaW5lIFJFR19CQU5LX1NFTCAweDBGDQo+ICsjZGVmaW5lIFJFR19DTEtfQ1RSTDAgMHgxMA0K PiArI2RlZmluZSBNX1BDTEtfREVMQVkgMHgwMw0KPiArDQo+ICsjZGVmaW5lIFJFR19BVVhfT1BU IDB4MTENCj4gKyNkZWZpbmUgQVVYX0FVVE9fUlNUIEJJVCgwKQ0KPiArI2RlZmluZSBBVVhfRklY X0ZSRVEgQklUKDMpDQo+ICsNCj4gKyNkZWZpbmUgUkVHX0RBVEFfQ1RSTDAgMHgxMg0KPiArI2Rl ZmluZSBWSURFT19MQVRDSF9FREdFIEJJVCg0KQ0KPiArI2RlZmluZSBFTkFCTEVfUENMS19DT1VO VEVSIEJJVCg3KQ0KPiArDQo+ICsjZGVmaW5lIFJFR19QQ0xLX0NPVU5URVJfVkFMVUUgMHgxMw0K PiArDQo+ICsjZGVmaW5lIFJFR181MDFfRklGT19DVFJMIDB4MTUNCj4gKyNkZWZpbmUgUlNUXzUw MV9GSUZPIEJJVCgxKQ0KPiArDQo+ICsjZGVmaW5lIFJFR19UUkFJTl9DVFJMMCAweDE2DQo+ICsj ZGVmaW5lIEZPUkNFX0xCUiBCSVQoMCkNCj4gKyNkZWZpbmUgTEFORV9DT1VOVF9NQVNLIDB4MDYN Cj4gKyNkZWZpbmUgTEFORV9TV0FQIEJJVCgzKQ0KPiArI2RlZmluZSBTUFJFQURfQU1QXzUgQklU KDQpDQo+ICsjZGVmaW5lIEZPUkNFX0NSX0RPTkUgQklUKDUpDQo+ICsjZGVmaW5lIEZPUkNFX0VR X0RPTkUgQklUKDYpDQo+ICsNCj4gKyNkZWZpbmUgUkVHX1RSQUlOX0NUUkwxIDB4MTcNCj4gKyNk ZWZpbmUgQVVUT19UUkFJTiBCSVQoMCkNCj4gKyNkZWZpbmUgTUFOVUFMX1RSQUlOIEJJVCgxKQ0K PiArI2RlZmluZSBGT1JDRV9SRVRSQUlOIEJJVCgyKQ0KPiArDQo+ICsjZGVmaW5lIFJFR19BVVhf Q1RSTCAweDIzDQo+ICsjZGVmaW5lIENMUl9FRElEX0ZJRk8gQklUKDApDQo+ICsjZGVmaW5lIEFV WF9VU0VSX01PREUgQklUKDEpDQo+ICsjZGVmaW5lIEFVWF9OT19TRUdNRU5UX1dSIEJJVCg2KQ0K PiArI2RlZmluZSBBVVhfRU5fRklGT19SRUFEIEJJVCg3KQ0KPiArDQo+ICsjZGVmaW5lIFJFR19B VVhfQURSXzBfNyAweDI0DQo+ICsjZGVmaW5lIFJFR19BVVhfQURSXzhfMTUgMHgyNQ0KPiArI2Rl ZmluZSBSRUdfQVVYX0FEUl8xNl8xOSAweDI2DQo+ICsjZGVmaW5lIFJFR19BVVhfT1VUX0RBVEEw IDB4MjcNCj4gKw0KPiArI2RlZmluZSBSRUdfQVVYX0NNRF9SRVEgMHgyQg0KPiArI2RlZmluZSBB VVhfQlVTWSBCSVQoNSkNCj4gKw0KPiArI2RlZmluZSBSRUdfQVVYX0RBVEFfMF83IDB4MkMNCj4g KyNkZWZpbmUgUkVHX0FVWF9EQVRBXzhfMTUgMHgyRA0KPiArI2RlZmluZSBSRUdfQVVYX0RBVEFf MTZfMjMgMHgyRQ0KPiArI2RlZmluZSBSRUdfQVVYX0RBVEFfMjRfMzEgMHgyRg0KPiArDQo+ICsj ZGVmaW5lIFJFR19BVVhfREFUQV9GSUZPIDB4MkYNCj4gKw0KPiArI2RlZmluZSBSRUdfQVVYX0VS Uk9SX1NUUyAweDlGDQo+ICsjZGVmaW5lIE1fQVVYX1JFUV9GQUlMIDB4MDMNCj4gKw0KPiArI2Rl ZmluZSBSRUdfSERDUF9DVFJMMSAweDM4DQo+ICsjZGVmaW5lIEhEQ1BfQ1BfRU5BQkxFIEJJVCgw KQ0KPiArDQo+ICsjZGVmaW5lIFJFR19IRENQX1RSSUdHRVIgMHgzOQ0KPiArI2RlZmluZSBIRENQ X1RSSUdHRVJfU1RBUlQgIEJJVCgwKQ0KPiArI2RlZmluZSBIRENQX1RSSUdHRVJfQ1BJUlEgIEJJ VCgxKQ0KPiArI2RlZmluZSBIRENQX1RSSUdHRVJfS1NWX0RPTkUgIEJJVCg0KQ0KPiArI2RlZmlu ZSBIRENQX1RSSUdHRVJfS1NWX0ZBSUwgQklUKDUpDQo+ICsNCj4gKyNkZWZpbmUgUkVHX0hEQ1Bf Q1RSTDIgMHgzQQ0KPiArI2RlZmluZSBIRENQX0FOX1NFTCBCSVQoMCkNCj4gKyNkZWZpbmUgSERD UF9BTl9HRU4gQklUKDEpDQo+ICsjZGVmaW5lIEhEQ1BfSFdfSFBESVJRX0FDVCBCSVQoMikNCj4g KyNkZWZpbmUgSERDUF9FTl9NMF9SRUFEIEJJVCg1KQ0KPiArDQo+ICsjZGVmaW5lIFJFR19NMF8w XzcgMHg0Qw0KPiArI2RlZmluZSBSRUdfQU5fMF83IDB4NEMNCj4gKyNkZWZpbmUgUkVHX1NQX0NU UkwwIDB4NTgNCj4gKyNkZWZpbmUgUkVHX0lQX0NUUkwxIDB4NTkNCj4gKyNkZWZpbmUgUkVHX0lQ X0NUUkwyIDB4NUENCj4gKw0KPiArI2RlZmluZSBSRUdfTElOS19EUlYgMHg1Qw0KPiArI2RlZmlu ZSBEUlZfSFMgQklUKDEpDQo+ICsNCj4gKyNkZWZpbmUgUkVHX0RSVl9MTl9EQVRBX1NFTCAweDVE DQo+ICsNCj4gKyNkZWZpbmUgUkVHX0FVWCAweDVFDQo+ICsNCj4gKyNkZWZpbmUgUkVHX1ZJRF9C VVNfQ1RSTDAgMHg2MA0KPiArI2RlZmluZSBJTl9ERFIgQklUKDIpDQo+ICsjZGVmaW5lIEREUl9D RCAoMHgwMSA8PCA2KQ0KPiArDQo+ICsjZGVmaW5lIFJFR19WSURfQlVTX0NUUkwxIDB4NjENCj4g KyNkZWZpbmUgVFhfRklGT19SRVNFVCBCSVQoMSkNCj4gKw0KPiArI2RlZmluZSBSRUdfSU5QVVRf Q1RSTCAweEEwDQo+ICsjZGVmaW5lIElOUFVUX0hTWU5DX1BPTCBCSVQoMCkNCj4gKyNkZWZpbmUg SU5QVVRfVlNZTkNfUE9MIEJJVCgyKQ0KPiArI2RlZmluZSBJTlBVVF9JTlRFUkxBQ0VEIEJJVCg0 KQ0KPiArDQo+ICsjZGVmaW5lIFJFR19JTlBVVF9IVE9UQUwgMHhBMQ0KPiArI2RlZmluZSBSRUdf SU5QVVRfSEFDVElWRV9TVEFSVCAweEEzDQo+ICsjZGVmaW5lIFJFR19JTlBVVF9IQUNUSVZFX1dJ RFRIIDB4QTUNCj4gKyNkZWZpbmUgUkVHX0lOUFVUX0hGUk9OVF9QT1JDSCAweEE3DQo+ICsjZGVm aW5lIFJFR19JTlBVVF9IU1lOQ19XSURUSCAweEE5DQo+ICsjZGVmaW5lIFJFR19JTlBVVF9WVE9U QUwgMHhBQg0KPiArI2RlZmluZSBSRUdfSU5QVVRfVkFDVElWRV9TVEFSVCAweEFEDQo+ICsjZGVm aW5lIFJFR19JTlBVVF9WQUNUSVZFX1dJRFRIIDB4QUYNCj4gKyNkZWZpbmUgUkVHX0lOUFVUX1ZG Uk9OVF9QT1JDSCAweEIxDQo+ICsjZGVmaW5lIFJFR19JTlBVVF9WU1lOQ19XSURUSCAweEIzDQo+ ICsNCj4gKyNkZWZpbmUgUkVHX0FVRElPX1NSQ19DVFJMIDB4QjgNCj4gKyNkZWZpbmUgTV9BVURJ T19JMlNfRU4gMHgwRg0KPiArI2RlZmluZSBFTl9JMlMwIEJJVCgwKQ0KPiArI2RlZmluZSBFTl9J MlMxIEJJVCgxKQ0KPiArI2RlZmluZSBFTl9JMlMyIEJJVCgyKQ0KPiArI2RlZmluZSBFTl9JMlMz IEJJVCgzKQ0KPiArI2RlZmluZSBBVURJT19GSUZPX1JFU0VUIEJJVCg3KQ0KPiArDQo+ICsjZGVm aW5lIFJFR19BVURJT19GTVQgMHhCOQ0KPiArI2RlZmluZSBSRUdfQVVESU9fRklGT19TRUwgMHhC QQ0KPiArDQo+ICsjZGVmaW5lIFJFR19BVURJT19DVFJMMCAweEJCDQo+ICsjZGVmaW5lIEFVRElP X0ZVTExfUEtUIEJJVCg0KQ0KPiArI2RlZmluZSBBVURJT18xNkJfQk9VTkQgQklUKDUpDQo+ICsN Cj4gKyNkZWZpbmUgUkVHX0FVRElPX0NUUkwxIDB4QkMNCj4gKyNkZWZpbmUgUkVHX0FVRElPX0lO UFVUX0ZSRVEgMHhCRQ0KPiArDQo+ICsjZGVmaW5lIFJFR19JRUM5NThfU1RTMCAweEJGDQo+ICsj ZGVmaW5lIFJFR19JRUM5NThfU1RTMSAweEMwDQo+ICsjZGVmaW5lIFJFR19JRUM5NThfU1RTMiAw eEMxDQo+ICsjZGVmaW5lIFJFR19JRUM5NThfU1RTMyAweEMyDQo+ICsjZGVmaW5lIFJFR19JRUM5 NThfU1RTNCAweEMzDQo+ICsNCj4gKyNkZWZpbmUgUkVHX0hQRF9JUlFfVElNRSAweEM5DQo+ICsj ZGVmaW5lIFJFR19BVVhfREVCVUdfTU9ERSAweENBDQo+ICsjZGVmaW5lIFJFR19BVVhfT1BUMiAw eENCDQo+ICsjZGVmaW5lIFJFR19IRENQX09QVCAweENFDQo+ICsjZGVmaW5lIFJFR19VU0VSX0RS Vl9QUkUgMHhDRg0KPiArDQo+ICsjZGVmaW5lIFJFR19EQVRBX01VVEVfQ1RSTCAweEQzDQo+ICsj ZGVmaW5lIEVOQUJMRV9FTkhBTkNFRF9GUkFNRSBCSVQoMCkNCj4gKyNkZWZpbmUgRU5BQkxFX0FV VE9fVklERU9fRklGT19SRVNFVCBCSVQoMSkNCj4gKyNkZWZpbmUgRU5fVklEX01VVEUgQklUKDQp DQo+ICsjZGVmaW5lIEVOX0FVRF9NVVRFIEJJVCg1KQ0KPiArDQo+ICsjZGVmaW5lIFJFR19USU1F X1NUTVBfQ1RSTCAweEQ0DQo+ICsjZGVmaW5lIEVOX0VOSEFOQ0VfVklEX1NUTVAgQklUKDApDQo+ ICsjZGVmaW5lIEVOX0VOSEFOQ0VfQVVEX1NUTVAgQklUKDIpDQo+ICsjZGVmaW5lIE1fU1RBTVBf U1RFUCAweDMwDQo+ICsjZGVmaW5lIEVOX1NTQ19HQVQgQklUKDYpDQo+ICsNCj4gKyNkZWZpbmUg UkVHX0lORk9GUkFNRV9DVFJMIDB4RTgNCj4gKyNkZWZpbmUgRU5fQVZJX1BLVCBCSVQoMCkNCj4g KyNkZWZpbmUgRU5fQVVEX1BLVCBCSVQoMSkNCj4gKyNkZWZpbmUgRU5fTVBHX1BLVCBCSVQoMikN Cj4gKyNkZWZpbmUgRU5fR0VOX1BLVCBCSVQoMykNCj4gKyNkZWZpbmUgRU5fVklEX1RJTUVfU1RN UCBCSVQoNCkNCj4gKyNkZWZpbmUgRU5fQVVEX1RJTUVfU1RNUCBCSVQoNSkNCj4gKyNkZWZpbmUg RU5fVklEX0NUUkxfUEtUIChFTl9BVklfUEtUIHwgRU5fVklEX1RJTUVfU1RNUCkNCj4gKyNkZWZp bmUgRU5fQVVEX0NUUkxfUEtUIChFTl9BVURfUEtUIHwgRU5fQVVEX1RJTUVfU1RNUCkNCj4gKw0K PiArI2RlZmluZSBSRUdfQVVESU9fTl8wXzcgMHhERQ0KPiArI2RlZmluZSBSRUdfQVVESU9fTl84 XzE1IDB4REYNCj4gKyNkZWZpbmUgUkVHX0FVRElPX05fMTZfMjMgMHhFMA0KPiArDQo+ICsjZGVm aW5lIFJFR19BVklfSU5GT19EQjEgMHhFOQ0KPiArI2RlZmluZSBSRUdfQVZJX0lORk9fREIyIDB4 RUENCj4gKyNkZWZpbmUgUkVHX0FWSV9JTkZPX0RCMyAweEVCDQo+ICsjZGVmaW5lIFJFR19BVklf SU5GT19EQjQgMHhFQw0KPiArI2RlZmluZSBSRUdfQVZJX0lORk9fREI1IDB4RUQNCj4gKyNkZWZp bmUgUkVHX0FWSV9JTkZPX1NVTSAweEY2DQo+ICsNCj4gKyNkZWZpbmUgUkVHX0FVRF9JTkZPRlJB TV9EQjEgMHhGNw0KPiArI2RlZmluZSBSRUdfQVVEX0lORk9GUkFNX0RCMiAweEY4DQo+ICsjZGVm aW5lIFJFR19BVURfSU5GT0ZSQU1fREIzIDB4RjkNCj4gKyNkZWZpbmUgUkVHX0FVRF9JTkZPRlJB TV9EQjQgMHhGQQ0KPiArI2RlZmluZSBSRUdfQVVEX0lORk9GUkFNX1NVTSAweEZCDQo+ICsNCj4g Ky8qIHRoZSBmb2xsb3dpbmcgc2l4IHJlZ2lzdGVycyBhcmUgaW4gYmFuazEgKi8NCj4gKyNkZWZp bmUgUkVHX0RSVl8wX0RCXzgwMF9NViAweDdFDQo+ICsjZGVmaW5lIFJFR19QUkVfMF9EQl84MDBf TVYgMHg3Rg0KPiArI2RlZmluZSBSRUdfUFJFXzNQNV9EQl84MDBfTVYgMHg4MQ0KPiArI2RlZmlu ZSBSRUdfU1NDX0NUUkwwIDB4ODgNCj4gKyNkZWZpbmUgUkVHX1NTQ19DVFJMMSAweDg5DQo+ICsj ZGVmaW5lIFJFR19TU0NfQ1RSTDIgMHg4QQ0KPiArDQo+ICsjZGVmaW5lIFJCUiBEUF9MSU5LX0JX XzFfNjINCj4gKyNkZWZpbmUgSEJSIERQX0xJTktfQldfMl83DQo+ICsjZGVmaW5lIEhCUjIgRFBf TElOS19CV181XzQNCj4gKyNkZWZpbmUgSEJSMyBEUF9MSU5LX0JXXzhfMQ0KPiArDQo+ICsvKiBW ZW5kb3Igb3B0aW9uICovDQo+ICsjZGVmaW5lIEhEQ1BfREVTSVJFRCAxDQo+ICsjZGVmaW5lIE1B WF9MQU5FX0NPVU5UIDQNCj4gKyNkZWZpbmUgTUFYX0xJTktfUkFURSBIQlINCj4gKyNkZWZpbmUg QVVUT19UUkFJTl9SRVRSWSAzDQo+ICsjZGVmaW5lIE1BWF9IRENQX0RPV05fU1RSRUFNX0NPVU5U IDEwDQo+ICsjZGVmaW5lIE1BWF9DUl9MRVZFTCAweDAzDQo+ICsjZGVmaW5lIE1BWF9FUV9MRVZF TCAweDAzDQo+ICsjZGVmaW5lIEFVWF9XQUlUX1RJTUVPVVRfTVMgMTUNCj4gKyNkZWZpbmUgQVVY X0ZJRk9fTUFYX1NJWkUgMzINCj4gKyNkZWZpbmUgUElYRUxfQ0xLX0RFTEFZIDENCj4gKyNkZWZp bmUgUElYRUxfQ0xLX0lOVkVSU0UgMA0KPiArI2RlZmluZSBBREpVU1RfUEhBU0VfVEhSRVNIT0xE IDgwMDAwDQo+ICsjZGVmaW5lIERQSV9QSVhFTF9DTEtfTUFYIDk1MDAwDQo+ICsjZGVmaW5lIEhE Q1BfU0hBMV9GSUZPX0xFTiAoTUFYX0hEQ1BfRE9XTl9TVFJFQU1fQ09VTlQgKiA1ICsgMTApDQo+ ICsjZGVmaW5lIERFRkFVTFRfUFdSX09OIDANCj4gKyNkZWZpbmUgREVGQVVMVF9EUlZfSE9MRCAw DQo+ICsNCj4gKyNkZWZpbmUgQVVESU9fU0VMRUNUIEkyUw0KPiArI2RlZmluZSBBVURJT19UWVBF IExQQ00NCj4gKyNkZWZpbmUgQVVESU9fU0FNUExFX1JBVEUgU0FNUExFX1JBVEVfNDhLDQo+ICsj ZGVmaW5lIEFVRElPX0NIQU5ORUxfQ09VTlQgMg0KPiArDQo+ICsvKg0KPiArICogMDogU3RhbmRh cmQgSTJTDQo+ICsgKiAxOiAzMmJpdCBJMlMNCj4gKyAqLw0KPiArI2RlZmluZSBJMlNfSU5QVVRf Rk9STUFUIDENCj4gKw0KPiArLyoNCj4gKyAqIDA6IExlZnQtanVzdGlmaWVkDQo+ICsgKiAxOiBS aWdodC1qdXN0aWZpZWQNCj4gKyAqLw0KPiArI2RlZmluZSBJMlNfSlVTVElGSUVEIDANCj4gKw0K PiArLyoNCj4gKyAqIDA6IERhdGEgZGVsYXkgMVQgY29ycmVzcG9uZCB0byBXUw0KPiArICogMTog Tm8gZGF0YSBkZWxheSBjb3JyZXNwb25kIHRvIFdTDQo+ICsgKi8NCj4gKyNkZWZpbmUgSTJTX0RB VEFfREVMQVkgMA0KPiArDQo+ICsvKg0KPiArICogMDogTGVmdCBjaGFubmVsDQo+ICsgKiAxOiBS aWdodCBjaGFubmVsDQo+ICsgKi8NCj4gKyNkZWZpbmUgSTJTX1dTX0NIQU5ORUwgMA0KPiArDQo+ ICsvKg0KPiArICogMDogTVNCIHNoaWZ0IGZpcnN0DQo+ICsgKiAxOiBMU0Igc2hpZnQgZmlyc3QN Cj4gKyAqLw0KPiArI2RlZmluZSBJMlNfREFUQV9TRVFVRU5DRSAwDQo+ICsNCj4gKy8qDQo+ICsg KiBBdWRpbyBTYW1wbGUgV29yZCBMZW5ndGgNCj4gKyAqIFdPUkRfTEVOR1RIXzE2QklUDQo+ICsg KiBXT1JEX0xFTkdUSF8xOEJJVA0KPiArICogV09SRF9MRU5HVEhfMjBCSVQNCj4gKyAqIFdPUkRf TEVOR1RIXzI0QklUDQo+ICsgKi8NCj4gKyNkZWZpbmUgQVVESU9fV09SRF9MRU5HVEggV09SRF9M RU5HVEhfMjRCSVQNCj4gKw0KPiArZW51bSBhdXhfY21kX3R5cGUgew0KPiArCUNNRF9BVVhfTkFU SVZFX1JFQUQgPSAweDAsDQo+ICsJQ01EX0FVWF9OQVRJVkVfV1JJVEUgPSAweDUsDQo+ICsJQ01E X0FVWF9JMkNfRURJRF9SRUFEID0gMHhCLA0KPiArfTsNCj4gKw0KPiArZW51bSBhdXhfY21kX3Jl cGx5IHsNCj4gKwlSRVBMWV9BQ0ssDQo+ICsJUkVQTFlfTkFDSywNCj4gKwlSRVBMWV9ERUZFUiwN Cj4gK307DQo+ICsNCj4gK2VudW0gbGlua190cmFpbl9zdGF0dXMgew0KPiArCUxJTktfSURMRSwN Cj4gKwlMSU5LX0JVU1ksDQo+ICsJTElOS19PSywNCj4gK307DQo+ICsNCj4gK2VudW0gaGRjcF9z dGF0ZSB7DQo+ICsJSERDUF9BVVRIX0lETEUsDQo+ICsJSERDUF9BVVRIX0dPSU5HLA0KPiArCUhE Q1BfQVVUSF9ET05FLA0KPiArfTsNCj4gKw0KPiArc3RydWN0IGl0NjUwNV9wbGF0Zm9ybV9kYXRh IHsNCj4gKwlzdHJ1Y3QgcmVndWxhdG9yICpwd3IxODsNCj4gKwlzdHJ1Y3QgcmVndWxhdG9yICpv dmRkOw0KPiArCXN0cnVjdCBncGlvX2Rlc2MgKmdwaW9kX3Jlc2V0Ow0KPiArfTsNCj4gKw0KPiAr ZW51bSBpdDY1MDVfYXVkaW9fc2VsZWN0IHsNCj4gKwlJMlMgPSAwLA0KPiArCVNQRElGLA0KPiAr fTsNCj4gKw0KPiArZW51bSBpdDY1MDVfYXVkaW9fc2FtcGxlX3JhdGUgew0KPiArCVNBTVBMRV9S QVRFXzI0SyA9IDB4NiwNCj4gKwlTQU1QTEVfUkFURV8zMksgPSAweDMsDQo+ICsJU0FNUExFX1JB VEVfNDhLID0gMHgyLA0KPiArCVNBTVBMRV9SQVRFXzk2SyA9IDB4QSwNCj4gKwlTQU1QTEVfUkFU RV8xOTJLID0gMHhFLA0KPiArCVNBTVBMRV9SQVRFXzQ0XzFLID0gMHgwLA0KPiArCVNBTVBMRV9S QVRFXzg4XzJLID0gMHg4LA0KPiArCVNBTVBMRV9SQVRFXzE3Nl80SyA9IDB4QywNCj4gK307DQo+ ICsNCj4gK2VudW0gaXQ2NTA1X2F1ZGlvX3R5cGUgew0KPiArCUxQQ00gPSAwLA0KPiArCU5MUENN LA0KPiArCURTUywNCj4gK307DQo+ICsNCj4gK2VudW0gaXQ2NTA1X2F1ZGlvX3dvcmRfbGVuZ3Ro IHsNCj4gKwlXT1JEX0xFTkdUSF8xNkJJVCA9IDAsDQo+ICsJV09SRF9MRU5HVEhfMThCSVQsDQo+ ICsJV09SRF9MRU5HVEhfMjBCSVQsDQo+ICsJV09SRF9MRU5HVEhfMjRCSVQsDQo+ICt9Ow0KPiAr DQo+ICtzdHJ1Y3QgaXQ2NTA1X2F1ZGlvX2RhdGEgew0KPiArCWVudW0gaXQ2NTA1X2F1ZGlvX3Nl bGVjdCBzZWxlY3Q7DQo+ICsJZW51bSBpdDY1MDVfYXVkaW9fc2FtcGxlX3JhdGUgc2FtcGxlX3Jh dGU7DQo+ICsJZW51bSBpdDY1MDVfYXVkaW9fdHlwZSB0eXBlOw0KPiArCWVudW0gaXQ2NTA1X2F1 ZGlvX3dvcmRfbGVuZ3RoIHdvcmRfbGVuZ3RoOw0KPiArCXU4IGNoYW5uZWxfY291bnQ7DQo+ICsJ dTggaTJzX2lucHV0X2Zvcm1hdDsNCj4gKwl1OCBpMnNfanVzdGlmaWVkOw0KPiArCXU4IGkyc19k YXRhX2RlbGF5Ow0KPiArCXU4IGkyc193c19jaGFubmVsOw0KPiArCXU4IGkyc19kYXRhX3NlcXVl bmNlOw0KPiArfTsNCj4gKw0KPiArc3RydWN0IGl0NjUwNV9hdWRpb19zYW1wbGVfcmF0ZV9tYXAg ew0KPiArCWVudW0gaXQ2NTA1X2F1ZGlvX3NhbXBsZV9yYXRlIHJhdGU7DQo+ICsJaW50IHNhbXBs ZV9yYXRlX3ZhbHVlOw0KPiArfTsNCj4gKw0KPiArc3RydWN0IGl0NjUwNV9kcm1fZHBfbGluayB7 DQo+ICsJdW5zaWduZWQgY2hhciByZXZpc2lvbjsNCj4gKwl1bnNpZ25lZCBpbnQgcmF0ZTsNCj4g Kwl1bnNpZ25lZCBpbnQgbnVtX2xhbmVzOw0KPiArCXVuc2lnbmVkIGxvbmcgY2FwYWJpbGl0aWVz Ow0KPiArfTsNCj4gKw0KPiArc3RydWN0IGl0NjUwNSB7DQo+ICsJc3RydWN0IGRybV9kcF9hdXgg YXV4Ow0KPiArCXN0cnVjdCBkcm1fYnJpZGdlIGJyaWRnZTsNCj4gKwlzdHJ1Y3QgaTJjX2NsaWVu dCAqY2xpZW50Ow0KPiArCXN0cnVjdCBlZGlkICplZGlkOw0KPiArCXN0cnVjdCBkcm1fY29ubmVj dG9yIGNvbm5lY3RvcjsNCj4gKwlzdHJ1Y3QgaXQ2NTA1X2RybV9kcF9saW5rIGxpbms7DQo+ICsJ c3RydWN0IGl0NjUwNV9wbGF0Zm9ybV9kYXRhIHBkYXRhOw0KPiArCXN0cnVjdCBtdXRleCBleHRj b25fbG9jazsNCj4gKwlzdHJ1Y3QgbXV0ZXggbW9kZV9sb2NrOw0KPiArCXN0cnVjdCBtdXRleCBh dXhfbG9jazsNCj4gKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7DQo+ICsJc3RydWN0IGRybV9kaXNw bGF5X21vZGUgdmlkZW9faW5mbzsNCj4gKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZXZlbnRfbmI7 DQo+ICsJc3RydWN0IGV4dGNvbl9kZXYgKmV4dGNvbjsNCj4gKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qg ZXh0Y29uX3dxOw0KPiArCWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgY29ubmVjdG9yX3N0YXR1 czsNCj4gKwllbnVtIGxpbmtfdHJhaW5fc3RhdHVzIGxpbmtfc3RhdGU7DQo+ICsJc3RydWN0IHdv cmtfc3RydWN0IGxpbmtfd29ya3M7DQo+ICsJdTggZHBjZFtEUF9SRUNFSVZFUl9DQVBfU0laRV07 DQo+ICsJdTggbGFuZV9jb3VudDsNCj4gKwl1OCBsaW5rX3JhdGVfYndfY29kZTsNCj4gKwl1OCBz aW5rX2NvdW50Ow0KPiArCWJvb2wgc3RlcF90cmFpbjsNCj4gKwlib29sIGJyYW5jaF9kZXZpY2U7 DQo+ICsJYm9vbCBlbmFibGVfc3NjOw0KPiArCWJvb2wgbGFuZV9zd2FwX2Rpc2FibGVkOw0KPiAr CWJvb2wgbGFuZV9zd2FwOw0KPiArCWJvb2wgcG93ZXJlZDsNCj4gKwl1MzIgYWZlX3NldHRpbmc7 DQo+ICsJZW51bSBoZGNwX3N0YXRlIGhkY3Bfc3RhdHVzOw0KPiArCXN0cnVjdCBkZWxheWVkX3dv cmsgaGRjcF93b3JrOw0KPiArCXN0cnVjdCB3b3JrX3N0cnVjdCBoZGNwX3dhaXRfa3N2X2xpc3Q7 DQo+ICsJc3RydWN0IGNvbXBsZXRpb24gd2FpdF9lZGlkX2NvbXBsZXRlOw0KPiArCXU4IGF1dG9f dHJhaW5fcmV0cnk7DQo+ICsJYm9vbCBoZGNwX2Rlc2lyZWQ7DQo+ICsJYm9vbCBpc19yZXBlYXRl cjsNCj4gKwl1OCBoZGNwX2Rvd25fc3RyZWFtX2NvdW50Ow0KPiArCXU4IGJrc3ZzW0RSTV9IRENQ X0tTVl9MRU5dOw0KPiArCXU4IHNoYTFfaW5wdXRbSERDUF9TSEExX0ZJRk9fTEVOXTsNCj4gKwli b29sIGVuYWJsZV9lbmhhbmNlZF9mcmFtZTsNCj4gKwloZG1pX2NvZGVjX3BsdWdnZWRfY2IgcGx1 Z2dlZF9jYjsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpjb2RlY19kZXY7DQo+ICsJc3RydWN0IGRlbGF5 ZWRfd29yayBkZWxheWVkX2F1ZGlvOw0KPiArCXN0cnVjdCBpdDY1MDVfYXVkaW9fZGF0YSBhdWRp bzsNCj4gKw0KPiArCS8qIGl0NjUwNSBkcml2ZXIgaG9sZCBvcHRpb24gKi8NCj4gKwlib29sIGVu YWJsZV9kcnZfaG9sZDsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBpdDY1MDVfc3RlcF90cmFpbl9w YXJhIHsNCj4gKwl1OCB2b2x0YWdlX3N3aW5nW01BWF9MQU5FX0NPVU5UXTsNCj4gKwl1OCBwcmVf ZW1waGFzaXNbTUFYX0xBTkVfQ09VTlRdOw0KPiArfTsNCj4gKw0KPiArLyoNCj4gKyAqIFZlbmRv ciBvcHRpb24gYWZlIHNldHRpbmdzIGZvciBkaWZmZXJlbnQgcGxhdGZvcm1zDQo+ICsgKiAwOiB3 aXRob3V0IEZQQyBjYWJsZQ0KPiArICogMTogd2l0aCBGUEMgY2FibGUNCj4gKyAqLw0KPiArDQo+ ICtzdGF0aWMgdTggY29uc3QgYWZlX3NldHRpbmdfdGFibGVbXVszXSA9IHsNCj4gKwl7MHg4Miwg MHgwMCwgMHg0NX0sDQo+ICsJezB4OTMsIDB4MkEsIDB4ODV9DQo+ICt9Ow0KPiArDQo+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGl0NjUwNV9hdWRpb19zYW1wbGVfcmF0ZV9tYXAgYXVkaW9fc2FtcGxl X3JhdGVfbWFwW10gPSB7DQo+ICsJe1NBTVBMRV9SQVRFXzI0SywgMjQwMDB9LA0KPiArCXtTQU1Q TEVfUkFURV8zMkssIDMyMDAwfSwNCj4gKwl7U0FNUExFX1JBVEVfNDhLLCA0ODAwMH0sDQo+ICsJ e1NBTVBMRV9SQVRFXzk2SywgOTYwMDB9LA0KPiArCXtTQU1QTEVfUkFURV8xOTJLLCAxOTIwMDB9 LA0KPiArCXtTQU1QTEVfUkFURV80NF8xSywgNDQxMDB9LA0KPiArCXtTQU1QTEVfUkFURV84OF8y SywgODgyMDB9LA0KPiArCXtTQU1QTEVfUkFURV8xNzZfNEssIDE3NjQwMH0sDQo+ICt9Ow0KPiAr DQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9yYW5nZSBpdDY1MDVfYnJpZGdlX3ZvbGF0 aWxlX3Jhbmdlc1tdID0gew0KPiArCXsgLnJhbmdlX21pbiA9IDAsIC5yYW5nZV9tYXggPSAweEZG IH0sDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9hY2Nlc3NfdGFi bGUgaXQ2NTA1X2JyaWRnZV92b2xhdGlsZV90YWJsZSA9IHsNCj4gKwkueWVzX3JhbmdlcyA9IGl0 NjUwNV9icmlkZ2Vfdm9sYXRpbGVfcmFuZ2VzLA0KPiArCS5uX3llc19yYW5nZXMgPSBBUlJBWV9T SVpFKGl0NjUwNV9icmlkZ2Vfdm9sYXRpbGVfcmFuZ2VzKSwNCj4gK307DQo+ICsNCj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBpdDY1MDVfcmVnbWFwX2NvbmZpZyA9IHsNCj4g KwkucmVnX2JpdHMgPSA4LA0KPiArCS52YWxfYml0cyA9IDgsDQo+ICsJLnZvbGF0aWxlX3RhYmxl ID0gJml0NjUwNV9icmlkZ2Vfdm9sYXRpbGVfdGFibGUsDQo+ICsJLmNhY2hlX3R5cGUgPSBSRUdD QUNIRV9OT05FLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGludCBpdDY1MDVfcmVhZChzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDUsIHVuc2lnbmVkIGludCByZWdfYWRkcikNCj4gK3sNCj4gKwl1bnNpZ25l ZCBpbnQgdmFsdWU7DQo+ICsJaW50IGVycjsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2 NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiArCWVyciA9IHJlZ21hcF9yZWFkKGl0NjUwNS0+cmVn bWFwLCByZWdfYWRkciwgJnZhbHVlKTsNCj4gKwlpZiAoZXJyIDwgMCkgew0KPiArCQlEUk1fREVW X0VSUk9SKGRldiwgInJlYWQgZmFpbGVkIHJlZ1sweCV4XSBlcnI6ICVkIiwgcmVnX2FkZHIsDQo+ ICsJCQkgICAgICBlcnIpOw0KPiArCQlyZXR1cm4gZXJyOw0KPiArCX0NCj4gKw0KPiArCXJldHVy biB2YWx1ZTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBpdDY1MDVfd3JpdGUoc3RydWN0IGl0 NjUwNSAqaXQ2NTA1LCB1bnNpZ25lZCBpbnQgcmVnX2FkZHIsDQo+ICsJCSAgICAgIHVuc2lnbmVk IGludCByZWdfdmFsKQ0KPiArew0KPiArCWludCBlcnI7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2 ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsNCj4gKwllcnIgPSByZWdtYXBfd3JpdGUoaXQ2 NTA1LT5yZWdtYXAsIHJlZ19hZGRyLCByZWdfdmFsKTsNCj4gKw0KPiArCWlmIChlcnIgPCAwKSB7 DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAid3JpdGUgZmFpbGVkIHJlZ1sweCV4XSA9IDB4JXgg ZXJyID0gJWQiLA0KPiArCQkJICAgICAgcmVnX2FkZHIsIHJlZ192YWwsIGVycik7DQo+ICsJCXJl dHVybiBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyBpbnQgaXQ2NTA1X3NldF9iaXRzKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdW5zaWduZWQgaW50 IHJlZywNCj4gKwkJCSB1bnNpZ25lZCBpbnQgbWFzaywgdW5zaWduZWQgaW50IHZhbHVlKQ0KPiAr ew0KPiArCWludCBlcnI7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50 LT5kZXY7DQo+ICsNCj4gKwllcnIgPSByZWdtYXBfdXBkYXRlX2JpdHMoaXQ2NTA1LT5yZWdtYXAs IHJlZywgbWFzaywgdmFsdWUpOw0KPiArCWlmIChlcnIgPCAwKSB7DQo+ICsJCURSTV9ERVZfRVJS T1IoDQo+ICsJCQlkZXYsICJ3cml0ZSByZWdbMHgleF0gPSAweCV4IG1hc2sgPSAweCV4IGZhaWxl ZCBlcnIgJWQiLA0KPiArCQkJcmVnLCB2YWx1ZSwgbWFzaywgZXJyKTsNCj4gKwkJcmV0dXJuIGVy cjsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQg aXQ2NTA1X2RlYnVnX3ByaW50KHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdW5zaWduZWQgaW50IHJl ZywNCj4gKwkJCSAgICAgY29uc3QgY2hhciAqcHJlZml4KQ0KPiArew0KPiArCXN0cnVjdCBkZXZp Y2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiArCWludCB2YWw7DQo+ICsNCj4gKwlp ZiAobGlrZWx5KCEoX19kcm1fZGVidWcgJiBEUk1fVVRfRFJJVkVSKSkpDQo+ICsJCXJldHVybjsN Cj4gKw0KPiArCXZhbCA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgcmVnKTsNCj4gKwlpZiAodmFsIDwg MCkNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiJXMgcmVnWyUwMnhdIHJlYWQgZXJy b3IgKCVkKSIsDQo+ICsJCQkJICAgICBwcmVmaXgsIHJlZywgdmFsKTsNCj4gKwllbHNlDQo+ICsJ CURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIiVzIHJlZ1slMDJ4XSA9IDB4JTAyeCIsIHByZWZp eCwgcmVnLA0KPiArCQkJCSAgICAgdmFsKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBpdDY1 MDVfZHBjZF9yZWFkKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdW5zaWduZWQgbG9uZyBvZmZzZXQp DQo+ICt7DQo+ICsJdTggdmFsdWU7DQo+ICsJaW50IHJldDsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiArCXJldCA9IGRybV9kcF9kcGNkX3Jl YWRiKCZpdDY1MDUtPmF1eCwgb2Zmc2V0LCAmdmFsdWUpOw0KPiArCWlmIChyZXQgPCAwKSB7DQo+ ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRFBDRCByZWFkIGZhaWxlZCBbMHglbHhdIHJldDogJWQi LCBvZmZzZXQsDQo+ICsJCQkgICAgICByZXQpOw0KPiArCQlyZXR1cm4gcmV0Ow0KPiArCX0NCj4g KwlyZXR1cm4gdmFsdWU7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X2RwY2Rfd3Jp dGUoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LCB1bnNpZ25lZCBsb25nIG9mZnNldCwNCj4gKwkJCSAg ICAgdW5zaWduZWQgbG9uZyBkYXRhaW4pDQo+ICt7DQo+ICsJaW50IHJldDsNCj4gKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiArCXJldCA9IGRybV9k cF9kcGNkX3dyaXRlYigmaXQ2NTA1LT5hdXgsIG9mZnNldCwgZGF0YWluKTsNCj4gKwlpZiAocmV0 IDwgMCkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkRQQ0Qgd3JpdGUgZmFpbGVkIFsweCVs eF0gcmV0OiAlZCIsIG9mZnNldCwNCj4gKwkJCSAgICAgIHJldCk7DQo+ICsJCXJldHVybiByZXQ7 DQo+ICsJfQ0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGl0NjUwNV9n ZXRfZHBjZChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsIGludCBvZmZzZXQsIHU4ICpkcGNkLCBpbnQg bnVtKQ0KPiArew0KPiArCWludCByZXQ7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUw NS0+Y2xpZW50LT5kZXY7DQo+ICsNCj4gKwlyZXQgPSBkcm1fZHBfZHBjZF9yZWFkKCZpdDY1MDUt PmF1eCwgb2Zmc2V0LCBkcGNkLCBudW0pOw0KPiArDQo+ICsJaWYgKHJldCA8IDApDQo+ICsJCXJl dHVybiByZXQ7DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJyZXQgPSAlZCBE UENEWzB4JXhdID0gMHglKnBoIiwgcmV0LCBvZmZzZXQsDQo+ICsJCQkgICAgIG51bSwgZHBjZCk7 DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2R1 bXAoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCXVuc2lnbmVkIGludCBpLCBqOw0K PiArCXU4IHJlZ3NbMTZdOw0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVu dC0+ZGV2Ow0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8PSAweGZmOyBpICs9IDE2KSB7DQo+ICsJ CWZvciAoaiA9IDA7IGogPCAxNjsgaisrKQ0KPiArCQkJcmVnc1tqXSA9IGl0NjUwNV9yZWFkKGl0 NjUwNSwgaSArIGopOw0KPiArDQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlsweCUw MnhdID0gJTE2cGgiLCBpLCByZWdzKTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBib29s IGl0NjUwNV9nZXRfc2lua19ocGRfc3RhdHVzKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sN Cj4gKwlpbnQgcmVnXzBkOw0KPiArDQo+ICsJcmVnXzBkID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBS RUdfU1lTVEVNX1NUUyk7DQo+ICsNCj4gKwlpZiAocmVnXzBkIDwgMCkNCj4gKwkJcmV0dXJuIGZh bHNlOw0KPiArDQo+ICsJcmV0dXJuICEhKHJlZ18wZCAmIEhQRF9TVFMpOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgaW50IGl0NjUwNV9yZWFkX3dvcmQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LCB1bnNp Z25lZCBpbnQgcmVnKQ0KPiArew0KPiArCWludCB2YWwwLCB2YWwxOw0KPiArDQo+ICsJdmFsMCA9 IGl0NjUwNV9yZWFkKGl0NjUwNSwgcmVnKTsNCj4gKwlpZiAodmFsMCA8IDApDQo+ICsJCXJldHVy biB2YWwwOw0KPiArDQo+ICsJdmFsMSA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgcmVnICsgMSk7DQo+ ICsJaWYgKHZhbDEgPCAwKQ0KPiArCQlyZXR1cm4gdmFsMTsNCj4gKw0KPiArCXJldHVybiAodmFs MSA8PCA4KSB8IHZhbDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9jYWxjX3Zp ZGVvX2luZm8oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCXN0cnVjdCBkZXZpY2Ug KmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiArCWludCBoc3luY19wb2wsIHZzeW5jX3Bv bCwgaW50ZXJsYWNlZDsNCj4gKwlpbnQgaHRvdGFsLCBoZGVzLCBoZGV3LCBoZnBoLCBoc3luY3c7 DQo+ICsJaW50IHZ0b3RhbCwgdmRlcywgdmRldywgdmZwaCwgdnN5bmN3Ow0KPiArCWludCByZGRh dGEsIGksIHBjbGssIHN1bSA9IDA7DQo+ICsNCj4gKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDE1MDAw KTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQkFOS19TRUwsIDB4MDApOw0KPiArCXJk ZGF0YSA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX0lOUFVUX0NUUkwpOw0KPiArCWhzeW5jX3Bv bCA9IHJkZGF0YSAmIElOUFVUX0hTWU5DX1BPTDsNCj4gKwl2c3luY19wb2wgPSAocmRkYXRhICYg SU5QVVRfVlNZTkNfUE9MKSA+PiAyOw0KPiArCWludGVybGFjZWQgPSAocmRkYXRhICYgSU5QVVRf SU5URVJMQUNFRCkgPj4gNDsNCj4gKw0KPiArCWh0b3RhbCA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2 NTA1LCBSRUdfSU5QVVRfSFRPVEFMKSAmIDB4MUZGRjsNCj4gKwloZGVzID0gaXQ2NTA1X3JlYWRf d29yZChpdDY1MDUsIFJFR19JTlBVVF9IQUNUSVZFX1NUQVJUKSAmIDB4MUZGRjsNCj4gKwloZGV3 ID0gaXQ2NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19JTlBVVF9IQUNUSVZFX1dJRFRIKSAmIDB4 MUZGRjsNCj4gKwloZnBoID0gaXQ2NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19JTlBVVF9IRlJP TlRfUE9SQ0gpICYgMHgxRkZGOw0KPiArCWhzeW5jdyA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2NTA1 LCBSRUdfSU5QVVRfSFNZTkNfV0lEVEgpICYgMHgxRkZGOw0KPiArDQo+ICsJdnRvdGFsID0gaXQ2 NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19JTlBVVF9WVE9UQUwpICYgMHhGRkY7DQo+ICsJdmRl cyA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2NTA1LCBSRUdfSU5QVVRfVkFDVElWRV9TVEFSVCkgJiAw eEZGRjsNCj4gKwl2ZGV3ID0gaXQ2NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19JTlBVVF9WQUNU SVZFX1dJRFRIKSAmIDB4RkZGOw0KPiArCXZmcGggPSBpdDY1MDVfcmVhZF93b3JkKGl0NjUwNSwg UkVHX0lOUFVUX1ZGUk9OVF9QT1JDSCkgJiAweEZGRjsNCj4gKwl2c3luY3cgPSBpdDY1MDVfcmVh ZF93b3JkKGl0NjUwNSwgUkVHX0lOUFVUX1ZTWU5DX1dJRFRIKSAmIDB4RkZGOw0KPiArDQo+ICsJ RFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiaHN5bmNfcG9sOiVkLCB2c3luY19wb2w6JWQsIGlu dGVybGFjZWQ6JWQiLA0KPiArCQkJICAgICBoc3luY19wb2wsIHZzeW5jX3BvbCwgaW50ZXJsYWNl ZCk7DQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiaGFjdGl2ZV9zdGFydDolZCwgdmFj dGl2ZV9zdGFydDolZCIsDQo+ICsJCQkgICAgIGhkZXMsIHZkZXMpOw0KPiArDQo+ICsJZm9yIChp ID0gMDsgaSA8IDEwOyBpKyspIHsNCj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RB VEFfQ1RSTDAsIEVOQUJMRV9QQ0xLX0NPVU5URVIsDQo+ICsJCQkJRU5BQkxFX1BDTEtfQ09VTlRF Uik7DQo+ICsJCXVzbGVlcF9yYW5nZSgxMDAwMCwgMTUwMDApOw0KPiArCQlpdDY1MDVfc2V0X2Jp dHMoaXQ2NTA1LCBSRUdfREFUQV9DVFJMMCwgRU5BQkxFX1BDTEtfQ09VTlRFUiwNCj4gKwkJCQkw eDAwKTsNCj4gKwkJcmRkYXRhID0gaXQ2NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19QQ0xLX0NP VU5URVJfVkFMVUUpICYNCj4gKwkJCSAweEZGRjsNCj4gKw0KPiArCQlzdW0gKz0gcmRkYXRhOw0K PiArCX0NCj4gKw0KPiArCWlmIChzdW0gPT0gMCkgew0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZF UihkZXYsICJjYWxjIHZpZGVvIHRpbWluZyBlcnJvciIpOw0KPiArCQlyZXR1cm47DQo+ICsJfQ0K PiArDQo+ICsJc3VtIC89IDEwOw0KPiArCXBjbGsgPSAxMzUwMCAqIDIwNDggLyBzdW07DQo+ICsJ aXQ2NTA1LT52aWRlb19pbmZvLmNsb2NrID0gcGNsazsNCj4gKwlpdDY1MDUtPnZpZGVvX2luZm8u aGRpc3BsYXkgPSBoZGV3Ow0KPiArCWl0NjUwNS0+dmlkZW9faW5mby5oc3luY19zdGFydCA9IGhk ZXcgKyBoZnBoOw0KPiArCWl0NjUwNS0+dmlkZW9faW5mby5oc3luY19lbmQgPSBoZGV3ICsgaGZw aCArIGhzeW5jdzsNCj4gKwlpdDY1MDUtPnZpZGVvX2luZm8uaHRvdGFsID0gaHRvdGFsOw0KPiAr CWl0NjUwNS0+dmlkZW9faW5mby52ZGlzcGxheSA9IHZkZXc7DQo+ICsJaXQ2NTA1LT52aWRlb19p bmZvLnZzeW5jX3N0YXJ0ID0gdmRldyArIHZmcGg7DQo+ICsJaXQ2NTA1LT52aWRlb19pbmZvLnZz eW5jX2VuZCA9IHZkZXcgKyB2ZnBoICsgdnN5bmN3Ow0KPiArCWl0NjUwNS0+dmlkZW9faW5mby52 dG90YWwgPSB2dG90YWw7DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsIERSTV9N T0RFX0ZNVCwNCj4gKwkJCSAgICAgRFJNX01PREVfQVJHKCZpdDY1MDUtPnZpZGVvX2luZm8pKTsN Cj4gK30NCj4gKw0KPiArc3RhdGljIGludCBpdDY1MDVfZHJtX2RwX2xpbmtfcHJvYmUoc3RydWN0 IGRybV9kcF9hdXggKmF1eCwNCj4gKwkJCQkgICAgc3RydWN0IGl0NjUwNV9kcm1fZHBfbGluayAq bGluaykNCj4gK3sNCj4gKwl1OCB2YWx1ZXNbM107DQo+ICsJaW50IGVycjsNCj4gKw0KPiArCW1l bXNldChsaW5rLCAwLCBzaXplb2YoKmxpbmspKTsNCj4gKw0KPiArCWVyciA9IGRybV9kcF9kcGNk X3JlYWQoYXV4LCBEUF9EUENEX1JFViwgdmFsdWVzLCBzaXplb2YodmFsdWVzKSk7DQo+ICsJaWYg KGVyciA8IDApDQo+ICsJCXJldHVybiBlcnI7DQo+ICsNCj4gKwlsaW5rLT5yZXZpc2lvbiA9IHZh bHVlc1swXTsNCj4gKwlsaW5rLT5yYXRlID0gZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKHZh bHVlc1sxXSk7DQo+ICsJbGluay0+bnVtX2xhbmVzID0gdmFsdWVzWzJdICYgRFBfTUFYX0xBTkVf Q09VTlRfTUFTSzsNCj4gKw0KPiArCWlmICh2YWx1ZXNbMl0gJiBEUF9FTkhBTkNFRF9GUkFNRV9D QVApDQo+ICsJCWxpbmstPmNhcGFiaWxpdGllcyA9IDE7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4g K30NCj4gKw0KPiArc3RhdGljIGludCBpdDY1MDVfZHJtX2RwX2xpbmtfcG93ZXJfdXAoc3RydWN0 IGRybV9kcF9hdXggKmF1eCwNCj4gKwkJCQkgICAgICAgc3RydWN0IGl0NjUwNV9kcm1fZHBfbGlu ayAqbGluaykNCj4gK3sNCj4gKwl1OCB2YWx1ZTsNCj4gKwlpbnQgZXJyOw0KPiArDQo+ICsJLyog RFBfU0VUX1BPV0VSIHJlZ2lzdGVyIGlzIG9ubHkgYXZhaWxhYmxlIG9uIERQQ0QgdjEuMSBhbmQg bGF0ZXIgKi8NCj4gKwlpZiAobGluay0+cmV2aXNpb24gPCAweDExKQ0KPiArCQlyZXR1cm4gMDsN Cj4gKw0KPiArCWVyciA9IGRybV9kcF9kcGNkX3JlYWRiKGF1eCwgRFBfU0VUX1BPV0VSLCAmdmFs dWUpOw0KPiArCWlmIChlcnIgPCAwKQ0KPiArCQlyZXR1cm4gZXJyOw0KPiArDQo+ICsJdmFsdWUg Jj0gfkRQX1NFVF9QT1dFUl9NQVNLOw0KPiArCXZhbHVlIHw9IERQX1NFVF9QT1dFUl9EMDsNCj4g Kw0KPiArCWVyciA9IGRybV9kcF9kcGNkX3dyaXRlYihhdXgsIERQX1NFVF9QT1dFUiwgdmFsdWUp Ow0KPiArCWlmIChlcnIgPCAwKQ0KPiArCQlyZXR1cm4gZXJyOw0KPiArDQo+ICsJLyoNCj4gKwkg KiBBY2NvcmRpbmcgdG8gdGhlIERQIDEuMSBzcGVjaWZpY2F0aW9uLCBhICJTaW5rIERldmljZSBt dXN0IGV4aXQgdGhlDQo+ICsJICogcG93ZXIgc2F2aW5nIHN0YXRlIHdpdGhpbiAxIG1zIiAoU2Vj dGlvbiAyLjUuMy4xLCBUYWJsZSA1LTUyLCAiU2luaw0KPiArCSAqIENvbnRyb2wgRmllbGQiIChy ZWdpc3RlciAweDYwMCkuDQo+ICsJICovDQo+ICsJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOw0K PiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9jbGVh cl9pbnQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWl0NjUwNV93cml0ZShpdDY1 MDUsIFJFR19CQU5LX1NFTCwgMHgwMCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5UX1NU QVRVU18wMSwgMHhGRik7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5UX1NUQVRVU18wMiwg MHhGRik7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5UX1NUQVRVU18wMywgMHhGRik7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9pbnRfbWFza19lbmFibGUoc3RydWN0IGl0 NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19CQU5LX1NF TCwgMHgwMCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5UX01BU0tfMDEsIDB4MUYpOw0K PiArCWl0NjUwNV93cml0ZShpdDY1MDUsIElOVF9NQVNLXzAyLCAweDA3KTsNCj4gKwlpdDY1MDVf d3JpdGUoaXQ2NTA1LCBJTlRfTUFTS18wMywgMHhCMCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2 b2lkIGl0NjUwNV9pbnRfbWFza19kaXNhYmxlKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sN Cj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQkFOS19TRUwsIDB4MDApOw0KPiArCWl0NjUw NV93cml0ZShpdDY1MDUsIElOVF9NQVNLXzAxLCAweDAwKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2 NTA1LCBJTlRfTUFTS18wMiwgMHgwMCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5UX01B U0tfMDMsIDB4MDApOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfbGFuZV90ZXJt aW5hdGlvbl9vbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaW50IHJlZ2NmOw0K PiArDQo+ICsJcmVnY2YgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19VU0VSX0RSVl9QUkUpOw0K PiArDQo+ICsJaWYgKHJlZ2NmID09IDB4RjApDQo+ICsJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUs IFJFR19EUlZfTE5fREFUQV9TRUwsIDB4ODAsIDB4MDApOw0KPiArDQo+ICsJaWYgKHJlZ2NmID09 IDB4NzApIHsNCj4gKwkJaWYgKGl0NjUwNS0+bGFuZV9zd2FwKSB7DQo+ICsJCQlzd2l0Y2ggKGl0 NjUwNS0+bGFuZV9jb3VudCkgew0KPiArCQkJY2FzZSAxOg0KPiArCQkJY2FzZSAyOg0KPiArCQkJ CWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EUlZfTE5fREFUQV9TRUwsDQo+ICsJCQkJCQkw eDBDLCAweDA4KTsNCj4gKwkJCQlicmVhazsNCj4gKwkJCWRlZmF1bHQ6DQo+ICsJCQkJaXQ2NTA1 X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RSVl9MTl9EQVRBX1NFTCwNCj4gKwkJCQkJCTB4MEMsIDB4 MEMpOw0KPiArCQkJCWJyZWFrOw0KPiArCQkJfQ0KPiArCQl9IGVsc2Ugew0KPiArCQkJc3dpdGNo IChpdDY1MDUtPmxhbmVfY291bnQpIHsNCj4gKwkJCWNhc2UgMToNCj4gKwkJCWNhc2UgMjoNCj4g KwkJCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfRFJWX0xOX0RBVEFfU0VMLA0KPiArCQkJ CQkJMHgwQywgMHgwNCk7DQo+ICsJCQkJYnJlYWs7DQo+ICsJCQlkZWZhdWx0Og0KPiArCQkJCWl0 NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EUlZfTE5fREFUQV9TRUwsDQo+ICsJCQkJCQkweDBD LCAweDBDKTsNCj4gKwkJCQlicmVhazsNCj4gKwkJCX0NCj4gKwkJfQ0KPiArCX0NCj4gK30NCj4g Kw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2xhbmVfdGVybWluYXRpb25fb2ZmKHN0cnVjdCBpdDY1 MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlpbnQgcmVnY2Y7DQo+ICsNCj4gKwlyZWdjZiA9IGl0NjUw NV9yZWFkKGl0NjUwNSwgUkVHX1VTRVJfRFJWX1BSRSk7DQo+ICsNCj4gKwlpZiAocmVnY2YgPT0g MHhGMCkNCj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RSVl9MTl9EQVRBX1NFTCwg MHg4MCwgMHg4MCk7DQo+ICsNCj4gKwlpZiAocmVnY2YgPT0gMHg3MCkNCj4gKwkJaXQ2NTA1X3Nl dF9iaXRzKGl0NjUwNSwgUkVHX0RSVl9MTl9EQVRBX1NFTCwgMHgwQywgMHgwMCk7DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9sYW5lX3Bvd2VyX29uKHN0cnVjdCBpdDY1MDUgKml0 NjUwNSkNCj4gK3sNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfTElOS19EUlYsIDB4 RjEsDQo+ICsJCQkoaXQ2NTA1LT5sYW5lX3N3YXAgPw0KPiArCQkJCSBHRU5NQVNLKDcsIDggLSBp dDY1MDUtPmxhbmVfY291bnQpIDoNCj4gKwkJCQkgR0VOTUFTSygzICsgaXQ2NTA1LT5sYW5lX2Nv dW50LCA0KSkgfA0KPiArCQkJCTB4MDEpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1 MDVfbGFuZV9wb3dlcl9vZmYoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWl0NjUw NV9zZXRfYml0cyhpdDY1MDUsIFJFR19MSU5LX0RSViwgMHhGMCwgMHgwMCk7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9sYW5lX29mZihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ ICt7DQo+ICsJaXQ2NTA1X2xhbmVfcG93ZXJfb2ZmKGl0NjUwNSk7DQo+ICsJaXQ2NTA1X2xhbmVf dGVybWluYXRpb25fb2ZmKGl0NjUwNSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUw NV9hdXhfdGVybWluYXRpb25fb24oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWlu dCByZWdjZjsNCj4gKw0KPiArCXJlZ2NmID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfVVNFUl9E UlZfUFJFKTsNCj4gKw0KPiArCWlmIChyZWdjZiA9PSAweEYwKQ0KPiArCQlpdDY1MDVfbGFuZV90 ZXJtaW5hdGlvbl9vbihpdDY1MDUpOw0KPiArDQo+ICsJaWYgKHJlZ2NmID09IDB4NzApDQo+ICsJ CWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EUlZfTE5fREFUQV9TRUwsIDB4ODAsIDB4ODAp Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfYXV4X3Bvd2VyX29uKHN0cnVjdCBp dDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfQVVY LCAweDAyLCAweDAyKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2F1eF9vbihz dHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaXQ2NTA1X2F1eF9wb3dlcl9vbihpdDY1 MDUpOw0KPiArCWl0NjUwNV9hdXhfdGVybWluYXRpb25fb24oaXQ2NTA1KTsNCj4gK30NCj4gKw0K PiArc3RhdGljIHZvaWQgaXQ2NTA1X2F1eF9yZXNldChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ ICt7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1JFU0VUX0NUUkwsIEFVWF9SRVNF VCwgQVVYX1JFU0VUKTsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfUkVTRVRfQ1RS TCwgQVVYX1JFU0VULCAweDAwKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X3Jl c2V0X2xvZ2ljKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlyZWdtYXBfd3JpdGUo aXQ2NTA1LT5yZWdtYXAsIFJFR19SRVNFVF9DVFJMLCBBTExfTE9HSUNfUkVTRVQpOw0KPiArCXVz bGVlcF9yYW5nZSgxMDAwLCAxNTAwKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGJvb2wgaXQ2NTA1 X2F1eF9vcF9maW5pc2hlZChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaW50IHJl ZzJiID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfQVVYX0NNRF9SRVEpOw0KPiArDQo+ICsJaWYg KHJlZzJiIDwgMCkNCj4gKwkJcmV0dXJuIGZhbHNlOw0KPiArDQo+ICsJcmV0dXJuIChyZWcyYiAm IEFVWF9CVVNZKSA9PSAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGl0NjUwNV9hdXhfd2Fp dChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaW50IHN0YXR1czsNCj4gKwl1bnNp Z25lZCBsb25nIHRpbWVvdXQ7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xp ZW50LT5kZXY7DQo+ICsNCj4gKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMo QVVYX1dBSVRfVElNRU9VVF9NUykgKyAxOw0KPiArDQo+ICsJd2hpbGUgKCFpdDY1MDVfYXV4X29w X2ZpbmlzaGVkKGl0NjUwNSkpIHsNCj4gKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91 dCkpIHsNCj4gKwkJCURSTV9ERVZfRVJST1IoZGV2LCAiVGltZWQgb3V0IHdhaXRpbmcgQVVYIHRv IGZpbmlzaCIpOw0KPiArCQkJcmV0dXJuIC1FVElNRURPVVQ7DQo+ICsJCX0NCj4gKwkJdXNsZWVw X3JhbmdlKDEwMDAsIDIwMDApOw0KPiArCX0NCj4gKw0KPiArCXN0YXR1cyA9IGl0NjUwNV9yZWFk KGl0NjUwNSwgUkVHX0FVWF9FUlJPUl9TVFMpOw0KPiArCWlmIChzdGF0dXMgPCAwKSB7DQo+ICsJ CURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHJlYWQgQVVYIGNoYW5uZWw6ICVkIiwgc3Rh dHVzKTsNCj4gKwkJcmV0dXJuIHN0YXR1czsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4g K30NCj4gKw0KPiArc3RhdGljIHNzaXplX3QgaXQ2NTA1X2F1eF9vcGVyYXRpb24oc3RydWN0IGl0 NjUwNSAqaXQ2NTA1LA0KPiArCQkJCSAgICBlbnVtIGF1eF9jbWRfdHlwZSBjbWQsDQo+ICsJCQkJ ICAgIHVuc2lnbmVkIGludCBhZGRyZXNzLCB1OCAqYnVmZmVyLA0KPiArCQkJCSAgICBzaXplX3Qg c2l6ZSwgZW51bSBhdXhfY21kX3JlcGx5ICpyZXBseSkNCj4gK3sNCj4gKwlpbnQgaSwgcmV0Ow0K PiArCWJvb2wgYXV4X3dyaXRlX2NoZWNrID0gZmFsc2U7DQo+ICsNCj4gKwlpZiAoIWl0NjUwNV9n ZXRfc2lua19ocGRfc3RhdHVzKGl0NjUwNSkpDQo+ICsJCXJldHVybiAtRUlPOw0KPiArDQo+ICsJ Lyogc2V0IEFVWCB1c2VyIG1vZGUgKi8NCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdf QVVYX0NUUkwsIEFVWF9VU0VSX01PREUsIEFVWF9VU0VSX01PREUpOw0KPiArDQo+ICthdXhfb3Bf c3RhcnQ6DQo+ICsJaWYgKGNtZCA9PSBDTURfQVVYX0kyQ19FRElEX1JFQUQpIHsNCj4gKwkJLyog QVVYIEVESUQgRklGTyBoYXMgbWF4IGxlbmd0aCBvZiBBVVhfRklGT19NQVhfU0laRSBieXRlcy4g Ki8NCj4gKwkJc2l6ZSA9IG1pbl90KHNpemVfdCwgc2l6ZSwgQVVYX0ZJRk9fTUFYX1NJWkUpOw0K PiArCQkvKiBFbmFibGUgQVVYIEZJRk8gcmVhZCBiYWNrIGFuZCBjbGVhciBGSUZPICovDQo+ICsJ CWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19BVVhfQ1RSTCwNCj4gKwkJCQlBVVhfRU5fRklG T19SRUFEIHwgQ0xSX0VESURfRklGTywNCj4gKwkJCQlBVVhfRU5fRklGT19SRUFEIHwgQ0xSX0VE SURfRklGTyk7DQo+ICsNCj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0FVWF9DVFJM LA0KPiArCQkJCUFVWF9FTl9GSUZPX1JFQUQgfCBDTFJfRURJRF9GSUZPLA0KPiArCQkJCUFVWF9F Tl9GSUZPX1JFQUQpOw0KPiArCX0gZWxzZSB7DQo+ICsJCS8qIFRoZSBEUCBBVVggdHJhbnNtaXQg YnVmZmVyIGhhcyA0IGJ5dGVzLiAqLw0KPiArCQlzaXplID0gbWluX3Qoc2l6ZV90LCBzaXplLCA0 KTsNCj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0FVWF9DVFJMLCBBVVhfTk9fU0VH TUVOVF9XUiwNCj4gKwkJCQlBVVhfTk9fU0VHTUVOVF9XUik7DQo+ICsJfQ0KPiArDQo+ICsJLyog U3RhcnQgQWRkcmVzc1s3OjBdICovDQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVWF9B RFJfMF83LCAoYWRkcmVzcyA+PiAwKSAmIDB4RkYpOw0KPiArCS8qIFN0YXJ0IEFkZHJlc3NbMTU6 OF0gKi8NCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVYX0FEUl84XzE1LCAoYWRkcmVz cyA+PiA4KSAmIDB4RkYpOw0KPiArCS8qIFdyaXRlTnVtWzM6MF0rU3RhcnRBZHJbMTk6MTZdICov DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVWF9BRFJfMTZfMTksDQo+ICsJCSAgICAg KChhZGRyZXNzID4+IDE2KSAmIDB4MEYpIHwgKChzaXplIC0gMSkgPDwgNCkpOw0KPiArDQo+ICsJ aWYgKGNtZCA9PSBDTURfQVVYX05BVElWRV9XUklURSkNCj4gKwkJcmVnbWFwX2J1bGtfd3JpdGUo aXQ2NTA1LT5yZWdtYXAsIFJFR19BVVhfT1VUX0RBVEEwLCBidWZmZXIsDQo+ICsJCQkJICBzaXpl KTsNCj4gKw0KPiArCS8qIEF1eCBGaXJlICovDQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVH X0FVWF9DTURfUkVRLCBjbWQpOw0KPiArDQo+ICsJcmV0ID0gaXQ2NTA1X2F1eF93YWl0KGl0NjUw NSk7DQo+ICsJaWYgKHJldCA8IDApDQo+ICsJCWdvdG8gYXV4X29wX2VycjsNCj4gKw0KPiArCXJl dCA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX0FVWF9FUlJPUl9TVFMpOw0KPiArCWlmIChyZXQg PCAwKQ0KPiArCQlnb3RvIGF1eF9vcF9lcnI7DQo+ICsNCj4gKwlzd2l0Y2ggKChyZXQgPj4gNikg JiAweDMpIHsNCj4gKwljYXNlIDA6DQo+ICsJCSpyZXBseSA9IFJFUExZX0FDSzsNCj4gKwkJYnJl YWs7DQo+ICsJY2FzZSAxOg0KPiArCQkqcmVwbHkgPSBSRVBMWV9ERUZFUjsNCj4gKwkJcmV0ID0g LUVBR0FJTjsNCj4gKwkJZ290byBhdXhfb3BfZXJyOw0KPiArCWNhc2UgMjoNCj4gKwkJKnJlcGx5 ID0gUkVQTFlfTkFDSzsNCj4gKwkJcmV0ID0gLUVJTzsNCj4gKwkJZ290byBhdXhfb3BfZXJyOw0K PiArCWNhc2UgMzoNCj4gKwkJcmV0ID0gLUVUSU1FRE9VVDsNCj4gKwkJZ290byBhdXhfb3BfZXJy Ow0KPiArCX0NCj4gKw0KPiArCS8qIFJlYWQgYmFjayBOYXRpdmUgV3JpdGUgZGF0YSAqLw0KPiAr CWlmIChjbWQgPT0gQ01EX0FVWF9OQVRJVkVfV1JJVEUpIHsNCj4gKwkJYXV4X3dyaXRlX2NoZWNr ID0gdHJ1ZTsNCj4gKwkJY21kID0gQ01EX0FVWF9OQVRJVkVfUkVBRDsNCj4gKwkJZ290byBhdXhf b3Bfc3RhcnQ7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKGNtZCA9PSBDTURfQVVYX0kyQ19FRElEX1JF QUQpIHsNCj4gKwkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgew0KPiArCQkJcmV0ID0gaXQ2 NTA1X3JlYWQoaXQ2NTA1LCBSRUdfQVVYX0RBVEFfRklGTyk7DQo+ICsJCQlpZiAocmV0IDwgMCkN Cj4gKwkJCQlnb3RvIGF1eF9vcF9lcnI7DQo+ICsJCQlidWZmZXJbaV0gPSByZXQ7DQo+ICsJCX0N Cj4gKwl9IGVsc2Ugew0KPiArCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7DQo+ICsJCQly ZXQgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19BVVhfREFUQV8wXzcgKyBpKTsNCj4gKwkJCWlm IChyZXQgPCAwKQ0KPiArCQkJCWdvdG8gYXV4X29wX2VycjsNCj4gKw0KPiArCQkJaWYgKGF1eF93 cml0ZV9jaGVjayAmJiBidWZmZXJbc2l6ZSAtIDEgLSBpXSAhPSByZXQpIHsNCj4gKwkJCQlyZXQg PSAtRUlOVkFMOw0KPiArCQkJCWdvdG8gYXV4X29wX2VycjsNCj4gKwkJCX0NCj4gKw0KPiArCQkJ YnVmZmVyW3NpemUgLSAxIC0gaV0gPSByZXQ7DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4gKwlyZXQg PSBpOw0KPiArDQo+ICthdXhfb3BfZXJyOg0KPiArCWlmIChjbWQgPT0gQ01EX0FVWF9JMkNfRURJ RF9SRUFEKSB7DQo+ICsJCS8qIGNsZWFyIEFVWCBGSUZPICovDQo+ICsJCWl0NjUwNV9zZXRfYml0 cyhpdDY1MDUsIFJFR19BVVhfQ1RSTCwNCj4gKwkJCQlBVVhfRU5fRklGT19SRUFEIHwgQ0xSX0VE SURfRklGTywNCj4gKwkJCQlBVVhfRU5fRklGT19SRUFEIHwgQ0xSX0VESURfRklGTyk7DQo+ICsJ CWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19BVVhfQ1RSTCwNCj4gKwkJCQlBVVhfRU5fRklG T19SRUFEIHwgQ0xSX0VESURfRklGTywgMHgwMCk7DQo+ICsJfQ0KPiArDQo+ICsJLyogTGVhdmUg QVVYIHVzZXIgbW9kZSAqLw0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19BVVhfQ1RS TCwgQVVYX1VTRVJfTU9ERSwgMCk7DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgc3NpemVfdCBpdDY1MDVfYXV4X2RvX3RyYW5zZmVyKHN0cnVjdCBpdDY1MDUgKml0 NjUwNSwNCj4gKwkJCQkgICAgICBlbnVtIGF1eF9jbWRfdHlwZSBjbWQsDQo+ICsJCQkJICAgICAg dW5zaWduZWQgaW50IGFkZHJlc3MsIHU4ICpidWZmZXIsDQo+ICsJCQkJICAgICAgc2l6ZV90IHNp emUsIGVudW0gYXV4X2NtZF9yZXBseSAqcmVwbHkpDQo+ICt7DQo+ICsJaW50IGksIHJldF9zaXpl LCByZXQgPSAwLCByZXF1ZXN0X3NpemU7DQo+ICsNCj4gKwltdXRleF9sb2NrKCZpdDY1MDUtPmF1 eF9sb2NrKTsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSA0KSB7DQo+ICsJCXJlcXVl c3Rfc2l6ZSA9IG1pbigoaW50KXNpemUgLSBpLCA0KTsNCj4gKwkJcmV0X3NpemUgPSBpdDY1MDVf YXV4X29wZXJhdGlvbihpdDY1MDUsIGNtZCwgYWRkcmVzcyArIGksDQo+ICsJCQkJCQlidWZmZXIg KyBpLCByZXF1ZXN0X3NpemUsDQo+ICsJCQkJCQlyZXBseSk7DQo+ICsJCWlmIChyZXRfc2l6ZSA8 IDApIHsNCj4gKwkJCXJldCA9IHJldF9zaXplOw0KPiArCQkJZ290byBhdXhfb3BfZXJyOw0KPiAr CQl9DQo+ICsNCj4gKwkJcmV0ICs9IHJldF9zaXplOw0KPiArCX0NCj4gKw0KPiArYXV4X29wX2Vy cjoNCj4gKwltdXRleF91bmxvY2soJml0NjUwNS0+YXV4X2xvY2spOw0KPiArCXJldHVybiByZXQ7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzc2l6ZV90IGl0NjUwNV9hdXhfdHJhbnNmZXIoc3RydWN0 IGRybV9kcF9hdXggKmF1eCwNCj4gKwkJCQkgICBzdHJ1Y3QgZHJtX2RwX2F1eF9tc2cgKm1zZykN Cj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBjb250YWluZXJfb2YoYXV4LCBzdHJ1 Y3QgaXQ2NTA1LCBhdXgpOw0KPiArCXU4IGNtZDsNCj4gKwlib29sIGlzX2kyYyA9ICEobXNnLT5y ZXF1ZXN0ICYgRFBfQVVYX05BVElWRV9XUklURSk7DQo+ICsJaW50IHJldDsNCj4gKwllbnVtIGF1 eF9jbWRfcmVwbHkgcmVwbHk7DQo+ICsNCj4gKwkvKiBJVDY1MDUgZG9lc24ndCBzdXBwb3J0IGFy Yml0cmFyeSBJMkMgcmVhZCAvIHdyaXRlLiAqLw0KPiArCWlmIChpc19pMmMpDQo+ICsJCXJldHVy biAtRUlOVkFMOw0KPiArDQo+ICsJc3dpdGNoIChtc2ctPnJlcXVlc3QpIHsNCj4gKwljYXNlIERQ X0FVWF9OQVRJVkVfUkVBRDoNCj4gKwkJY21kID0gQ01EX0FVWF9OQVRJVkVfUkVBRDsNCj4gKwkJ YnJlYWs7DQo+ICsJY2FzZSBEUF9BVVhfTkFUSVZFX1dSSVRFOg0KPiArCQljbWQgPSBDTURfQVVY X05BVElWRV9XUklURTsNCj4gKwkJYnJlYWs7DQo+ICsJZGVmYXVsdDoNCj4gKwkJcmV0dXJuIC1F SU5WQUw7DQo+ICsJfQ0KPiArDQo+ICsJcmV0ID0gaXQ2NTA1X2F1eF9kb190cmFuc2ZlcihpdDY1 MDUsIGNtZCwgbXNnLT5hZGRyZXNzLCBtc2ctPmJ1ZmZlciwNCj4gKwkJCQkgICAgIG1zZy0+c2l6 ZSwgJnJlcGx5KTsNCj4gKwlpZiAocmV0IDwgMCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiAr CXN3aXRjaCAocmVwbHkpIHsNCj4gKwljYXNlIFJFUExZX0FDSzoNCj4gKwkJbXNnLT5yZXBseSA9 IERQX0FVWF9OQVRJVkVfUkVQTFlfQUNLOw0KPiArCQlicmVhazsNCj4gKwljYXNlIFJFUExZX05B Q0s6DQo+ICsJCW1zZy0+cmVwbHkgPSBEUF9BVVhfTkFUSVZFX1JFUExZX05BQ0s7DQo+ICsJCWJy ZWFrOw0KPiArCWNhc2UgUkVQTFlfREVGRVI6DQo+ICsJCW1zZy0+cmVwbHkgPSBEUF9BVVhfTkFU SVZFX1JFUExZX0RFRkVSOw0KPiArCQlicmVhazsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gcmV0 Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGl0NjUwNV9nZXRfZWRpZF9ibG9jayh2b2lkICpk YXRhLCB1OCAqYnVmLCB1bnNpZ25lZCBpbnQgYmxvY2ssDQo+ICsJCQkJIHNpemVfdCBsZW4pDQo+ ICt7DQo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gZGF0YTsNCj4gKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKwllbnVtIGF1eF9jbWRfcmVwbHkgcmVw bHk7DQo+ICsJaW50IG9mZnNldCwgcmV0LCBhdXhfcmV0cnkgPSAxMDA7DQo+ICsNCj4gKwlpdDY1 MDVfYXV4X3Jlc2V0KGl0NjUwNSk7DQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiYmxv Y2sgbnVtYmVyID0gJWQiLCBibG9jayk7DQo+ICsNCj4gKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNl dCA8IEVESURfTEVOR1RIOykgew0KPiArCQlyZXQgPSBpdDY1MDVfYXV4X2RvX3RyYW5zZmVyKGl0 NjUwNSwgQ01EX0FVWF9JMkNfRURJRF9SRUFELA0KPiArCQkJCQkgICAgIGJsb2NrICogRURJRF9M RU5HVEggKyBvZmZzZXQsDQo+ICsJCQkJCSAgICAgYnVmICsgb2Zmc2V0LCA4LCAmcmVwbHkpOw0K PiArDQo+ICsJCWlmIChyZXQgPCAwICYmIHJldCAhPSAtRUFHQUlOKQ0KPiArCQkJcmV0dXJuIHJl dDsNCj4gKw0KPiArCQlzd2l0Y2ggKHJlcGx5KSB7DQo+ICsJCWNhc2UgUkVQTFlfQUNLOg0KPiAr CQkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiWzB4JTAyeF06ICU4cGgiLCBvZmZzZXQsDQo+ ICsJCQkJCSAgICAgYnVmICsgb2Zmc2V0KTsNCj4gKwkJCW9mZnNldCArPSA4Ow0KPiArCQkJYXV4 X3JldHJ5ID0gMTAwOw0KPiArCQkJYnJlYWs7DQo+ICsJCWNhc2UgUkVQTFlfTkFDSzoNCj4gKwkJ CXJldHVybiAtRUlPOw0KPiArCQljYXNlIFJFUExZX0RFRkVSOg0KPiArCQkJbXNsZWVwKDIwKTsN Cj4gKwkJCWlmICghKC0tYXV4X3JldHJ5KSkNCj4gKwkJCQlyZXR1cm4gLUVJTzsNCj4gKwkJfQ0K PiArCX0NCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1 MDVfdmFyaWFibGVfY29uZmlnKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlpdDY1 MDUtPmxpbmtfcmF0ZV9id19jb2RlID0gSEJSOw0KPiArCWl0NjUwNS0+bGFuZV9jb3VudCA9IE1B WF9MQU5FX0NPVU5UOw0KPiArCWl0NjUwNS0+bGlua19zdGF0ZSA9IExJTktfSURMRTsNCj4gKwlp dDY1MDUtPmhkY3BfZGVzaXJlZCA9IEhEQ1BfREVTSVJFRDsNCj4gKwlpdDY1MDUtPmF1dG9fdHJh aW5fcmV0cnkgPSBBVVRPX1RSQUlOX1JFVFJZOw0KPiArCWl0NjUwNS0+YXVkaW8uc2VsZWN0ID0g QVVESU9fU0VMRUNUOw0KPiArCWl0NjUwNS0+YXVkaW8uc2FtcGxlX3JhdGUgPSBBVURJT19TQU1Q TEVfUkFURTsNCj4gKwlpdDY1MDUtPmF1ZGlvLmNoYW5uZWxfY291bnQgPSBBVURJT19DSEFOTkVM X0NPVU5UOw0KPiArCWl0NjUwNS0+YXVkaW8udHlwZSA9IEFVRElPX1RZUEU7DQo+ICsJaXQ2NTA1 LT5hdWRpby5pMnNfaW5wdXRfZm9ybWF0ID0gSTJTX0lOUFVUX0ZPUk1BVDsNCj4gKwlpdDY1MDUt PmF1ZGlvLmkyc19qdXN0aWZpZWQgPSBJMlNfSlVTVElGSUVEOw0KPiArCWl0NjUwNS0+YXVkaW8u aTJzX2RhdGFfZGVsYXkgPSBJMlNfREFUQV9ERUxBWTsNCj4gKwlpdDY1MDUtPmF1ZGlvLmkyc193 c19jaGFubmVsID0gSTJTX1dTX0NIQU5ORUw7DQo+ICsJaXQ2NTA1LT5hdWRpby5pMnNfZGF0YV9z ZXF1ZW5jZSA9IEkyU19EQVRBX1NFUVVFTkNFOw0KPiArCWl0NjUwNS0+YXVkaW8ud29yZF9sZW5n dGggPSBBVURJT19XT1JEX0xFTkdUSDsNCj4gKwltZW1zZXQoaXQ2NTA1LT5zaGExX2lucHV0LCAw LCBzaXplb2YoaXQ2NTA1LT5zaGExX2lucHV0KSk7DQo+ICsJbWVtc2V0KGl0NjUwNS0+YmtzdnMs IDAsIHNpemVvZihpdDY1MDUtPmJrc3ZzKSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgaXQ2 NTA1X3NlbmRfdmlkZW9faW5mb2ZyYW1lKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwNCj4gKwkJCQkg ICAgICAgc3RydWN0IGhkbWlfYXZpX2luZm9mcmFtZSAqZnJhbWUpDQo+ICt7DQo+ICsJdTggYnVm ZmVyW0hETUlfSU5GT0ZSQU1FX0hFQURFUl9TSVpFICsgSERNSV9BVklfSU5GT0ZSQU1FX1NJWkVd Ow0KPiArCWludCBlcnI7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50 LT5kZXY7DQo+ICsNCj4gKwllcnIgPSBoZG1pX2F2aV9pbmZvZnJhbWVfcGFjayhmcmFtZSwgYnVm ZmVyLCBzaXplb2YoYnVmZmVyKSk7DQo+ICsJaWYgKGVyciA8IDApIHsNCj4gKwkJRFJNX0RFVl9F UlJPUihkZXYsICJGYWlsZWQgdG8gcGFjayBBVkkgaW5mb2ZyYW1lOiAlZCIsIGVycik7DQo+ICsJ CXJldHVybiBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJZXJyID0gaXQ2NTA1X3NldF9iaXRzKGl0NjUw NSwgUkVHX0lORk9GUkFNRV9DVFJMLCBFTl9BVklfUEtULCAweDAwKTsNCj4gKwlpZiAoZXJyKQ0K PiArCQlyZXR1cm4gZXJyOw0KPiArDQo+ICsJZXJyID0gcmVnbWFwX2J1bGtfd3JpdGUoaXQ2NTA1 LT5yZWdtYXAsIFJFR19BVklfSU5GT19EQjEsDQo+ICsJCQkJYnVmZmVyICsgSERNSV9JTkZPRlJB TUVfSEVBREVSX1NJWkUsDQo+ICsJCQkJZnJhbWUtPmxlbmd0aCk7DQo+ICsJaWYgKGVycikNCj4g KwkJcmV0dXJuIGVycjsNCj4gKw0KPiArCWVyciA9IGl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJF R19JTkZPRlJBTUVfQ1RSTCwgRU5fQVZJX1BLVCwNCj4gKwkJCSAgICAgIEVOX0FWSV9QS1QpOw0K PiArCWlmIChlcnIpDQo+ICsJCXJldHVybiBlcnI7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30N Cj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2dldF9leHRjb25fcHJvcGVydHkoc3RydWN0IGl0 NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWludCBlcnI7DQo+ICsJdW5pb24gZXh0Y29uX3Byb3Bl cnR5X3ZhbHVlIHByb3BlcnR5Ow0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNs aWVudC0+ZGV2Ow0KPiArDQo+ICsJaWYgKGl0NjUwNS0+ZXh0Y29uICYmICFpdDY1MDUtPmxhbmVf c3dhcF9kaXNhYmxlZCkgew0KPiArCQllcnIgPSBleHRjb25fZ2V0X3Byb3BlcnR5KGl0NjUwNS0+ ZXh0Y29uLCBFWFRDT05fRElTUF9EUCwNCj4gKwkJCQkJICBFWFRDT05fUFJPUF9VU0JfVFlQRUNf UE9MQVJJVFksDQo+ICsJCQkJCSAgJnByb3BlcnR5KTsNCj4gKwkJaWYgKGVycikgew0KPiArCQkJ RFJNX0RFVl9FUlJPUihkZXYsICJnZXQgcHJvcGVydHkgZmFpbCEiKTsNCj4gKwkJCXJldHVybjsN Cj4gKwkJfQ0KPiArCQlpdDY1MDUtPmxhbmVfc3dhcCA9IHByb3BlcnR5LmludHZhbDsNCj4gKwl9 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9jbGtfcGhhc2VfYWRqdXN0bWVudChz dHJ1Y3QgaXQ2NTA1ICppdDY1MDUsDQo+ICsJCQkJCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICptb2RlKQ0KPiArew0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19DTEtfQ1RS TDAsIE1fUENMS19ERUxBWSwNCj4gKwkJbW9kZS0+Y2xvY2sgPCBBREpVU1RfUEhBU0VfVEhSRVNI T0xEID8gUElYRUxfQ0xLX0RFTEFZIDogMCk7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwg UkVHX0RBVEFfQ1RSTDAsIFZJREVPX0xBVENIX0VER0UsDQo+ICsJCQlQSVhFTF9DTEtfSU5WRVJT RSA8PCA0KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2luaXQoc3RydWN0IGl0 NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19CQU5LX1NF TCwgMHgwMCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVWF9PUFQsIEFVWF9BVVRP X1JTVCB8IEFVWF9GSVhfRlJFUSk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVWF9D VFJMLCBBVVhfTk9fU0VHTUVOVF9XUik7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0hE Q1BfQ1RSTDIsIEhEQ1BfQU5fU0VMIHwgSERDUF9IV19IUERJUlFfQUNUKTsNCj4gKwlpdDY1MDVf d3JpdGUoaXQ2NTA1LCBSRUdfVklEX0JVU19DVFJMMCwgSU5fRERSIHwgRERSX0NEKTsNCj4gKwlp dDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfVklEX0JVU19DVFJMMSwgMHgwMSk7DQo+ICsJaXQ2NTA1 X3dyaXRlKGl0NjUwNSwgUkVHX0FVRElPX0NUUkwwLCBBVURJT18xNkJfQk9VTkQpOw0KPiArDQo+ ICsJLyogY2hpcCBpbnRlcm5hbCBzZXR0aW5nLCBkb24ndCBtb2RpZnkgKi8NCj4gKwlpdDY1MDVf d3JpdGUoaXQ2NTA1LCBSRUdfSFBEX0lSUV9USU1FLCAweEY1KTsNCj4gKwlpdDY1MDVfd3JpdGUo aXQ2NTA1LCBSRUdfQVVYX0RFQlVHX01PREUsIDB4NEQpOw0KPiArCWl0NjUwNV93cml0ZShpdDY1 MDUsIFJFR19BVVhfT1BUMiwgMHgxNyk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0hE Q1BfT1BULCAweDYwKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfREFUQV9NVVRFX0NU UkwsDQo+ICsJCSAgICAgRU5fVklEX01VVEUgfCBFTl9BVURfTVVURSB8IEVOQUJMRV9BVVRPX1ZJ REVPX0ZJRk9fUkVTRVQpOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19USU1FX1NUTVBf Q1RSTCwNCj4gKwkJICAgICBFTl9TU0NfR0FUIHwgRU5fRU5IQU5DRV9WSURfU1RNUCB8IEVOX0VO SEFOQ0VfQVVEX1NUTVApOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19JTkZPRlJBTUVf Q1RSTCwgMHgwMCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0JBTktfU0VMLCAweDAx KTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfRFJWXzBfREJfODAwX01WLA0KPiArCQkg ICAgIGFmZV9zZXR0aW5nX3RhYmxlW2l0NjUwNS0+YWZlX3NldHRpbmddWzBdKTsNCj4gKwlpdDY1 MDVfd3JpdGUoaXQ2NTA1LCBSRUdfUFJFXzBfREJfODAwX01WLA0KPiArCQkgICAgIGFmZV9zZXR0 aW5nX3RhYmxlW2l0NjUwNS0+YWZlX3NldHRpbmddWzFdKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2 NTA1LCBSRUdfUFJFXzNQNV9EQl84MDBfTVYsDQo+ICsJCSAgICAgYWZlX3NldHRpbmdfdGFibGVb aXQ2NTA1LT5hZmVfc2V0dGluZ11bMl0pOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19T U0NfQ1RSTDAsIDB4OUUpOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19TU0NfQ1RSTDEs IDB4MUMpOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19TU0NfQ1RSTDIsIDB4NDIpOw0K PiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19CQU5LX1NFTCwgMHgwMCk7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkIGl0NjUwNV92aWRlb19kaXNhYmxlKHN0cnVjdCBpdDY1MDUgKml0NjUw NSkNCj4gK3sNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfREFUQV9NVVRFX0NUUkws IEVOX1ZJRF9NVVRFLCBFTl9WSURfTVVURSk7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwg UkVHX0lORk9GUkFNRV9DVFJMLCBFTl9WSURfQ1RSTF9QS1QsIDB4MDApOw0KPiArCWl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCBWSURFT19SRVNFVCwgVklERU9fUkVTRVQp Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfdmlkZW9fcmVzZXQoc3RydWN0IGl0 NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EQVRB X01VVEVfQ1RSTCwgRU5fVklEX01VVEUsIEVOX1ZJRF9NVVRFKTsNCj4gKwlpdDY1MDVfc2V0X2Jp dHMoaXQ2NTA1LCBSRUdfSU5GT0ZSQU1FX0NUUkwsIEVOX1ZJRF9DVFJMX1BLVCwgMHgwMCk7DQo+ ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1JFU0VUX0NUUkwsIFZJREVPX1JFU0VULCBW SURFT19SRVNFVCk7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHXzUwMV9GSUZPX0NU UkwsIFJTVF81MDFfRklGTywgUlNUXzUwMV9GSUZPKTsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2 NTA1LCBSRUdfNTAxX0ZJRk9fQ1RSTCwgUlNUXzUwMV9GSUZPLCAweDAwKTsNCj4gKwlpdDY1MDVf c2V0X2JpdHMoaXQ2NTA1LCBSRUdfUkVTRVRfQ1RSTCwgVklERU9fUkVTRVQsIDB4MDApOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfdXBkYXRlX3ZpZGVvX3BhcmFtZXRlcihzdHJ1 Y3QgaXQ2NTA1ICppdDY1MDUsDQo+ICsJCQkJCSAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKm1vZGUpDQo+ICt7DQo+ICsJaXQ2NTA1X2Nsa19waGFzZV9hZGp1c3RtZW50KGl0NjUwNSwg bW9kZSk7DQo+ICsJaXQ2NTA1X3ZpZGVvX2Rpc2FibGUoaXQ2NTA1KTsNCj4gK30NCj4gKw0KPiAr c3RhdGljIGJvb2wgaXQ2NTA1X2F1ZGlvX2lucHV0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4g K3sNCj4gKwlpbnQgcmVnMDUsIHJlZ2JlOw0KPiArDQo+ICsJcmVnMDUgPSBpdDY1MDVfcmVhZChp dDY1MDUsIFJFR19SRVNFVF9DVFJMKTsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdf UkVTRVRfQ1RSTCwgQVVESU9fUkVTRVQsIDB4MDApOw0KPiArCXVzbGVlcF9yYW5nZSgzMDAwLCA0 MDAwKTsNCj4gKwlyZWdiZSA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX0FVRElPX0lOUFVUX0ZS RVEpOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCByZWcwNSk7DQo+ ICsNCj4gKwlyZXR1cm4gcmVnYmUgIT0gMHhGRjsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQg aXQ2NTA1X3NldHVwX2F1ZGlvX2NoYW5uZWxfc3RhdHVzKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkN Cj4gK3sNCj4gKwllbnVtIGl0NjUwNV9hdWRpb19zYW1wbGVfcmF0ZSBzYW1wbGVfcmF0ZSA9IGl0 NjUwNS0+YXVkaW8uc2FtcGxlX3JhdGU7DQo+ICsJdTggYXVkaW9fd29yZF9sZW5ndGhfbWFwW10g PSB7IDB4MDIsIDB4MDQsIDB4MDMsIDB4MEIgfTsNCj4gKw0KPiArCS8qIENoYW5uZWwgU3RhdHVz ICovDQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0lFQzk1OF9TVFMwLCBpdDY1MDUtPmF1 ZGlvLnR5cGUgPDwgMSk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0lFQzk1OF9TVFMx LCAweDAwKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfSUVDOTU4X1NUUzIsIDB4MDAp Ow0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19JRUM5NThfU1RTMywgc2FtcGxlX3JhdGUp Ow0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19JRUM5NThfU1RTNCwgKH5zYW1wbGVfcmF0 ZSA8PCA0KSB8DQo+ICsJCSAgICAgYXVkaW9fd29yZF9sZW5ndGhfbWFwW2l0NjUwNS0+YXVkaW8u d29yZF9sZW5ndGhdKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X3NldHVwX2F1 ZGlvX2Zvcm1hdChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJLyogSTJTIE1PREUg Ki8NCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVESU9fRk1ULA0KPiArCQkgICAgIChp dDY1MDUtPmF1ZGlvLndvcmRfbGVuZ3RoIDw8IDUpIHwNCj4gKwkJICAgICAoaXQ2NTA1LT5hdWRp by5pMnNfZGF0YV9zZXF1ZW5jZSA8PCA0KSB8DQo+ICsJCSAgICAgKGl0NjUwNS0+YXVkaW8uaTJz X3dzX2NoYW5uZWwgPDwgMykgfA0KPiArCQkgICAgIChpdDY1MDUtPmF1ZGlvLmkyc19kYXRhX2Rl bGF5IDw8IDIpIHwNCj4gKwkJICAgICAoaXQ2NTA1LT5hdWRpby5pMnNfanVzdGlmaWVkIDw8IDEp IHwNCj4gKwkJICAgICBpdDY1MDUtPmF1ZGlvLmkyc19pbnB1dF9mb3JtYXQpOw0KPiArCWlmIChp dDY1MDUtPmF1ZGlvLnNlbGVjdCA9PSBTUERJRikgew0KPiArCQlpdDY1MDVfd3JpdGUoaXQ2NTA1 LCBSRUdfQVVESU9fRklGT19TRUwsIDB4MDApOw0KPiArCQkvKiAweDMwID0gMTI4KkZTICovDQo+ ICsJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19BVVhfT1BULCAweEYwLCAweDMwKTsNCj4g Kwl9IGVsc2Ugew0KPiArCQlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVESU9fRklGT19TRUws IDB4RTQpOw0KPiArCX0NCj4gKw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURJT19D VFJMMCwgMHgyMCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRElPX0NUUkwxLCAw eDAwKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2VuYWJsZV9hdWRpb19zb3Vy Y2Uoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCXVuc2lnbmVkIGludCBhdWRpb19z b3VyY2VfY291bnQ7DQo+ICsNCj4gKwlhdWRpb19zb3VyY2VfY291bnQgPSBCSVQoRElWX1JPVU5E X1VQKGl0NjUwNS0+YXVkaW8uY2hhbm5lbF9jb3VudCwgMikpDQo+ICsJCQkJIC0gMTsNCj4gKw0K PiArCWF1ZGlvX3NvdXJjZV9jb3VudCB8PSBpdDY1MDUtPmF1ZGlvLnNlbGVjdCA8PCA0Ow0KPiAr DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRElPX1NSQ19DVFJMLCBhdWRpb19zb3Vy Y2VfY291bnQpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfZW5hYmxlX2F1ZGlv X2luZm9mcmFtZShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJc3RydWN0IGRldmlj ZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJdTggYXVkaW9faW5mb19jYVtdID0g eyAweDAwLCAweDAwLCAweDAxLCAweDAzLCAweDA3LCAweDBCLCAweDBGLCAweDFGIH07DQo+ICsN Cj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJpbmZvZnJhbWUgY2hhbm5lbF9hbGxvY2F0 aW9uOjB4JTAyeCIsDQo+ICsJCQkgICAgIGF1ZGlvX2luZm9fY2FbaXQ2NTA1LT5hdWRpby5jaGFu bmVsX2NvdW50IC0gMV0pOw0KPiArDQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRF9J TkZPRlJBTV9EQjEsIGl0NjUwNS0+YXVkaW8uY2hhbm5lbF9jb3VudA0KPiArCQkgICAgIC0gMSk7 DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRF9JTkZPRlJBTV9EQjIsIDB4MDApOw0K PiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURfSU5GT0ZSQU1fREIzLA0KPiArCQkgICAg IGF1ZGlvX2luZm9fY2FbaXQ2NTA1LT5hdWRpby5jaGFubmVsX2NvdW50IC0gMV0pOw0KPiArCWl0 NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURfSU5GT0ZSQU1fREI0LCAweDAwKTsNCj4gKwlpdDY1 MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVEX0lORk9GUkFNX1NVTSwgMHgwMCk7DQo+ICsNCj4gKwkv KiBFbmFibGUgQXVkaW8gSW5mb0ZyYW1lICovDQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwg UkVHX0lORk9GUkFNRV9DVFJMLCBFTl9BVURfQ1RSTF9QS1QsDQo+ICsJCQlFTl9BVURfQ1RSTF9Q S1QpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfZGlzYWJsZV9hdWRpbyhzdHJ1 Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVH X0RBVEFfTVVURV9DVFJMLCBFTl9BVURfTVVURSwgRU5fQVVEX01VVEUpOw0KPiArCWl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19BVURJT19TUkNfQ1RSTCwgTV9BVURJT19JMlNfRU4sIDB4MDAp Ow0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19JTkZPRlJBTUVfQ1RSTCwgRU5fQVVE X0NUUkxfUEtULCAweDAwKTsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfUkVTRVRf Q1RSTCwgQVVESU9fUkVTRVQsIEFVRElPX1JFU0VUKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZv aWQgaXQ2NTA1X2VuYWJsZV9hdWRpbyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJ c3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJaW50IHJlZ2Jl Ow0KPiArDQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAic3RhcnQiKTsNCj4gKwlpdDY1 MDVfZGlzYWJsZV9hdWRpbyhpdDY1MDUpOw0KPiArDQo+ICsJaXQ2NTA1X3NldHVwX2F1ZGlvX2No YW5uZWxfc3RhdHVzKGl0NjUwNSk7DQo+ICsJaXQ2NTA1X3NldHVwX2F1ZGlvX2Zvcm1hdChpdDY1 MDUpOw0KPiArCWl0NjUwNV9lbmFibGVfYXVkaW9fc291cmNlKGl0NjUwNSk7DQo+ICsJaXQ2NTA1 X2VuYWJsZV9hdWRpb19pbmZvZnJhbWUoaXQ2NTA1KTsNCj4gKw0KPiArCWl0NjUwNV93cml0ZShp dDY1MDUsIFJFR19BVURJT19OXzBfNywgMHgwMCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwg UkVHX0FVRElPX05fOF8xNSwgMHg4MCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FV RElPX05fMTZfMjMsIDB4MDApOw0KPiArDQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVH X0FVRElPX1NSQ19DVFJMLCBBVURJT19GSUZPX1JFU0VULA0KPiArCQkJQVVESU9fRklGT19SRVNF VCk7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0FVRElPX1NSQ19DVFJMLCBBVURJ T19GSUZPX1JFU0VULCAweDAwKTsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfUkVT RVRfQ1RSTCwgQVVESU9fUkVTRVQsIDB4MDApOw0KPiArCXJlZ2JlID0gaXQ2NTA1X3JlYWQoaXQ2 NTA1LCBSRUdfQVVESU9fSU5QVVRfRlJFUSk7DQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2 LCAicmVnYmU6MHglMDJ4IGF1ZGlvIGlucHV0IGZzOiAlZC4lZCBrSHoiLA0KPiArCQkJICAgICBy ZWdiZSwgNjc1MCAvIHJlZ2JlLCAoNjc1MCAlIHJlZ2JlKSAqIDEwIC8gcmVnYmUpOw0KPiArCWl0 NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EQVRBX01VVEVfQ1RSTCwgRU5fQVVEX01VVEUsIDB4 MDApOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBpdDY1MDVfdXNlX3N0ZXBfdHJhaW5fY2hl Y2soc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWlmIChpdDY1MDUtPmxpbmsucmV2 aXNpb24gPj0gMHgxMikNCj4gKwkJcmV0dXJuIGl0NjUwNS0+ZHBjZFtEUF9UUkFJTklOR19BVVhf UkRfSU5URVJWQUxdID49IDB4MDE7DQo+ICsNCj4gKwlyZXR1cm4gdHJ1ZTsNCj4gK30NCj4gKw0K PiArc3RhdGljIHZvaWQgaXQ2NTA1X3BhcnNlX2xpbmtfY2FwYWJpbGl0aWVzKHN0cnVjdCBpdDY1 MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGll bnQtPmRldjsNCj4gKwlzdHJ1Y3QgaXQ2NTA1X2RybV9kcF9saW5rICpsaW5rID0gJml0NjUwNS0+ bGluazsNCj4gKwlpbnQgYmNhcHM7DQo+ICsNCj4gKwlpZiAoaXQ2NTA1LT5kcGNkWzBdID09IDAp IHsNCj4gKwkJaXQ2NTA1X2F1eF9vbihpdDY1MDUpOw0KPiArCQlpdDY1MDVfZ2V0X2RwY2QoaXQ2 NTA1LCBEUF9EUENEX1JFViwgaXQ2NTA1LT5kcGNkLA0KPiArCQkJCUFSUkFZX1NJWkUoaXQ2NTA1 LT5kcGNkKSk7DQo+ICsJfQ0KPiArDQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiRFBD RCBSZXYuOiAlZC4lZCIsDQo+ICsJCQkgICAgIGxpbmstPnJldmlzaW9uID4+IDQsIGxpbmstPnJl dmlzaW9uICYgMHgwRik7DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJTaW5r IG1heCBsaW5rIHJhdGU6ICVkLiUwMmQgR2JwcyBwZXIgbGFuZSIsDQo+ICsJCQkgICAgIGxpbmst PnJhdGUgLyAxMDAwMDAsIGxpbmstPnJhdGUgLyAxMDAwICUgMTAwKTsNCj4gKw0KPiArCWl0NjUw NS0+bGlua19yYXRlX2J3X2NvZGUgPSBkcm1fZHBfbGlua19yYXRlX3RvX2J3X2NvZGUobGluay0+ cmF0ZSk7DQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAibGluayByYXRlIGJ3IGNvZGU6 MHglMDJ4IiwNCj4gKwkJCSAgICAgaXQ2NTA1LT5saW5rX3JhdGVfYndfY29kZSk7DQo+ICsJaXQ2 NTA1LT5saW5rX3JhdGVfYndfY29kZSA9IG1pbigoaW50KWl0NjUwNS0+bGlua19yYXRlX2J3X2Nv ZGUsDQo+ICsJCQkJCU1BWF9MSU5LX1JBVEUpOw0KPiArDQo+ICsJaXQ2NTA1LT5sYW5lX2NvdW50 ID0gbGluay0+bnVtX2xhbmVzOw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlNpbmsg c3VwcG9ydCAlZCBsYW5lcyB0cmFpbmluZyIsDQo+ICsJCQkgICAgIGl0NjUwNS0+bGFuZV9jb3Vu dCk7DQo+ICsJaXQ2NTA1LT5sYW5lX2NvdW50ID0gbWluKChpbnQpaXQ2NTA1LT5sYW5lX2NvdW50 LCBNQVhfTEFORV9DT1VOVCk7DQo+ICsNCj4gKwlpdDY1MDUtPmJyYW5jaF9kZXZpY2UgPSBkcm1f ZHBfaXNfYnJhbmNoKGl0NjUwNS0+ZHBjZCk7DQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2 LCAiU2luayAlc2JyYW5jaCBkZXZpY2UiLA0KPiArCQkJICAgICBpdDY1MDUtPmJyYW5jaF9kZXZp Y2UgPyAiIiA6ICJOb3QgIik7DQo+ICsNCj4gKwlpdDY1MDUtPmVuYWJsZV9lbmhhbmNlZF9mcmFt ZSA9ICEhbGluay0+Y2FwYWJpbGl0aWVzOw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwg IlNpbmsgJXNTdXBwb3J0IEVuaGFuY2VkIEZyYW1pbmciLA0KPiArCQkJICAgICBpdDY1MDUtPmVu YWJsZV9lbmhhbmNlZF9mcmFtZSA/ICIiIDogIk5vdCAiKTsNCj4gKw0KPiArCWl0NjUwNS0+ZW5h YmxlX3NzYyA9ICEhKGl0NjUwNS0+ZHBjZFtEUF9NQVhfRE9XTlNQUkVBRF0gJg0KPiArCQkJCURQ X01BWF9ET1dOU1BSRUFEXzBfNSk7DQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiTWF4 aW11bSBEb3duLVNwcmVhZDogJXMsICVzc3VwcG9ydCBTU0MhIiwNCj4gKwkJCSAgICAgaXQ2NTA1 LT5lbmFibGVfc3NjID8gIjAuNSIgOiAiMCIsDQo+ICsJCQkgICAgIGl0NjUwNS0+ZW5hYmxlX3Nz YyA/ICIiIDogIk5vdCAiKTsNCj4gKw0KPiArCWl0NjUwNS0+c3RlcF90cmFpbiA9IGl0NjUwNV91 c2Vfc3RlcF90cmFpbl9jaGVjayhpdDY1MDUpOw0KPiArCWlmIChpdDY1MDUtPnN0ZXBfdHJhaW4p DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImF1dG8gdHJhaW4gZmFpbCwgd2lsbCBz dGVwIHRyYWluIik7DQo+ICsNCj4gKwliY2FwcyA9IGl0NjUwNV9kcGNkX3JlYWQoaXQ2NTA1LCBE UF9BVVhfSERDUF9CQ0FQUyk7DQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiYmNhcHM6 MHglMDJ4IiwgYmNhcHMpOw0KPiArCWlmIChiY2FwcyAmIERQX0JDQVBTX0hEQ1BfQ0FQQUJMRSkg ew0KPiArCQlpdDY1MDUtPmlzX3JlcGVhdGVyID0gISEoYmNhcHMgJiBEUF9CQ0FQU19SRVBFQVRF Ul9QUkVTRU5UKTsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiU3VwcG9ydCBIRENQ ISBEb3duc3RyZWFtIGlzICVzISIsDQo+ICsJCQkJICAgICBpdDY1MDUtPmlzX3JlcGVhdGVyID8g InJlcGVhdGVyIiA6DQo+ICsJCQkJICAgICAicmVjZWl2ZXIiKTsNCj4gKwl9IGVsc2Ugew0KPiAr CQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJTaW5rIG5vdCBzdXBwb3J0IEhEQ1AhIik7DQo+ ICsJCWl0NjUwNS0+aGRjcF9kZXNpcmVkID0gZmFsc2U7DQo+ICsJfQ0KPiArCURSTV9ERVZfREVC VUdfRFJJVkVSKGRldiwgIkhEQ1AgJXMiLA0KPiArCQkJICAgICBpdDY1MDUtPmhkY3BfZGVzaXJl ZCA/ICJkZXNpcmVkIiA6ICJ1bmRlc2lyZWQiKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQg aXQ2NTA1X3NldHVwX3NzYyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaXQ2NTA1 X3NldF9iaXRzKGl0NjUwNSwgUkVHX1RSQUlOX0NUUkwwLCBTUFJFQURfQU1QXzUsDQo+ICsJCQlp dDY1MDUtPmVuYWJsZV9zc2MgPyBTUFJFQURfQU1QXzUgOiAweDAwKTsNCj4gKwlpZiAoaXQ2NTA1 LT5lbmFibGVfc3NjKSB7DQo+ICsJCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19CQU5LX1NFTCwg MHgwMSk7DQo+ICsJCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19TU0NfQ1RSTDAsIDB4OUUpOw0K PiArCQlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfU1NDX0NUUkwxLCAweDFDKTsNCj4gKwkJaXQ2 NTA1X3dyaXRlKGl0NjUwNSwgUkVHX1NTQ19DVFJMMiwgMHg0Mik7DQo+ICsJCWl0NjUwNV93cml0 ZShpdDY1MDUsIFJFR19CQU5LX1NFTCwgMHgwMCk7DQo+ICsJCWl0NjUwNV93cml0ZShpdDY1MDUs IFJFR19TUF9DVFJMMCwgMHgwNyk7DQo+ICsJCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19JUF9D VFJMMSwgMHgyOSk7DQo+ICsJCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19JUF9DVFJMMiwgMHgw Myk7DQo+ICsJCS8qIFN0YW1wIEludGVycnVwdCBTdGVwICovDQo+ICsJCWl0NjUwNV9zZXRfYml0 cyhpdDY1MDUsIFJFR19USU1FX1NUTVBfQ1RSTCwgTV9TVEFNUF9TVEVQLA0KPiArCQkJCTB4MTAp Ow0KPiArCQlpdDY1MDVfZHBjZF93cml0ZShpdDY1MDUsIERQX0RPV05TUFJFQURfQ1RSTCwNCj4g KwkJCQkgIERQX1NQUkVBRF9BTVBfMF81KTsNCj4gKwl9IGVsc2Ugew0KPiArCQlpdDY1MDVfZHBj ZF93cml0ZShpdDY1MDUsIERQX0RPV05TUFJFQURfQ1RSTCwgMHgwMCk7DQo+ICsJCWl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19USU1FX1NUTVBfQ1RSTCwgTV9TVEFNUF9TVEVQLA0KPiArCQkJ CTB4MDApOw0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkIGl0NjUwNV9s aW5rX3JhdGVfc2V0dXAoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19UUkFJTl9DVFJMMCwgRk9SQ0VfTEJSLA0KPiArCQkJKGl0NjUw NS0+bGlua19yYXRlX2J3X2NvZGUgPT0gUkJSKSA/IEZPUkNFX0xCUiA6IDB4MDApOw0KPiArCWl0 NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19MSU5LX0RSViwgRFJWX0hTLA0KPiArCQkJKGl0NjUw NS0+bGlua19yYXRlX2J3X2NvZGUgPT0gUkJSKSA/IDB4MDAgOiBEUlZfSFMpOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfbGFuZV9jb3VudF9zZXR1cChzdHJ1Y3QgaXQ2NTA1ICpp dDY1MDUpDQo+ICt7DQo+ICsJaXQ2NTA1X2dldF9leHRjb25fcHJvcGVydHkoaXQ2NTA1KTsNCj4g KwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfVFJBSU5fQ1RSTDAsIExBTkVfU1dBUCwNCj4g KwkJCWl0NjUwNS0+bGFuZV9zd2FwID8gTEFORV9TV0FQIDogMHgwMCk7DQo+ICsJaXQ2NTA1X3Nl dF9iaXRzKGl0NjUwNSwgUkVHX1RSQUlOX0NUUkwwLCBMQU5FX0NPVU5UX01BU0ssDQo+ICsJCQko aXQ2NTA1LT5sYW5lX2NvdW50IC0gMSkgPDwgMSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lk IGl0NjUwNV9saW5rX3RyYWluaW5nX3NldHVwKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sN Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiAr CWlmIChpdDY1MDUtPmVuYWJsZV9lbmhhbmNlZF9mcmFtZSkNCj4gKwkJaXQ2NTA1X3NldF9iaXRz KGl0NjUwNSwgUkVHX0RBVEFfTVVURV9DVFJMLA0KPiArCQkJCUVOQUJMRV9FTkhBTkNFRF9GUkFN RSwgRU5BQkxFX0VOSEFOQ0VEX0ZSQU1FKTsNCj4gKw0KPiArCWl0NjUwNV9saW5rX3JhdGVfc2V0 dXAoaXQ2NTA1KTsNCj4gKwlpdDY1MDVfbGFuZV9jb3VudF9zZXR1cChpdDY1MDUpOw0KPiArCWl0 NjUwNV9zZXR1cF9zc2MoaXQ2NTA1KTsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsDQo+ ICsJCQkgICAgICIlcywgJWQgbGFuZXMsICVzYWJsZSBzc2MsICVzYWJsZSBlbmhhbmNlZCBmcmFt ZSIsDQo+ICsJCQkgICAgIGl0NjUwNS0+bGlua19yYXRlX2J3X2NvZGUgIT0gUkJSID8gIkhCUiIg OiAiUkJSIiwNCj4gKwkJCSAgICAgaXQ2NTA1LT5sYW5lX2NvdW50LA0KPiArCQkJICAgICBpdDY1 MDUtPmVuYWJsZV9zc2MgPyAiZW4iIDogImRpcyIsDQo+ICsJCQkgICAgIGl0NjUwNS0+ZW5hYmxl X2VuaGFuY2VkX2ZyYW1lID8gImVuIiA6ICJkaXMiKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGJv b2wgaXQ2NTA1X2xpbmtfc3RhcnRfYXV0b190cmFpbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ ICt7DQo+ICsJaW50IHRpbWVvdXQgPSA1MDAsIGxpbmtfdHJhaW5pbmdfc3RhdGU7DQo+ICsJYm9v bCBzdGF0ZSA9IGZhbHNlOw0KPiArDQo+ICsJbXV0ZXhfbG9jaygmaXQ2NTA1LT5hdXhfbG9jayk7 DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1RSQUlOX0NUUkwwLA0KPiArCQkJCUZP UkNFX0NSX0RPTkUgfCBGT1JDRV9FUV9ET05FLCAweDAwKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2 NTA1LCBSRUdfVFJBSU5fQ1RSTDEsIEZPUkNFX1JFVFJBSU4pOw0KPiArCWl0NjUwNV93cml0ZShp dDY1MDUsIFJFR19UUkFJTl9DVFJMMSwgQVVUT19UUkFJTik7DQo+ICsNCj4gKwl3aGlsZSAodGlt ZW91dCA+IDApIHsNCj4gKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOw0KPiArCQlsaW5rX3Ry YWluaW5nX3N0YXRlID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfTElOS19UUkFJTl9TVFMpOw0K PiArDQo+ICsJCWlmICgobGlua190cmFpbmluZ19zdGF0ZSA+IDApICYmDQo+ICsJCSAgICAobGlu a190cmFpbmluZ19zdGF0ZSAmIExJTktfU1RBVEVfTk9SUCkpIHsNCj4gKwkJCXN0YXRlID0gdHJ1 ZTsNCj4gKwkJCWdvdG8gdW5sb2NrOw0KPiArCQl9DQo+ICsNCj4gKwkJdGltZW91dC0tOw0KPiAr CX0NCj4gK3VubG9jazoNCj4gKwltdXRleF91bmxvY2soJml0NjUwNS0+YXV4X2xvY2spOw0KPiAr DQo+ICsJcmV0dXJuIHN0YXRlOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGl0NjUwNV9kcm1f ZHBfbGlua19jb25maWd1cmUoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCXU4IHZh bHVlc1syXTsNCj4gKwlpbnQgZXJyOw0KPiArCXN0cnVjdCBkcm1fZHBfYXV4ICphdXggPSAmaXQ2 NTA1LT5hdXg7DQo+ICsNCj4gKwl2YWx1ZXNbMF0gPSBpdDY1MDUtPmxpbmtfcmF0ZV9id19jb2Rl Ow0KPiArCXZhbHVlc1sxXSA9IGl0NjUwNS0+bGFuZV9jb3VudDsNCj4gKw0KPiArCWlmIChpdDY1 MDUtPmVuYWJsZV9lbmhhbmNlZF9mcmFtZSkNCj4gKwkJdmFsdWVzWzFdIHw9IERQX0xBTkVfQ09V TlRfRU5IQU5DRURfRlJBTUVfRU47DQo+ICsNCj4gKwllcnIgPSBkcm1fZHBfZHBjZF93cml0ZShh dXgsIERQX0xJTktfQldfU0VULCB2YWx1ZXMsIHNpemVvZih2YWx1ZXMpKTsNCj4gKwlpZiAoZXJy IDwgMCkNCj4gKwkJcmV0dXJuIGVycjsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgYm9vbCBpdDY1MDVfY2hlY2tfdm9sdGFnZV9zd2luZ19tYXgodTggbGFuZV92b2x0 YWdlX3N3aW5nX3ByZV9lbXBoYXNpcykNCj4gK3sNCj4gKwlyZXR1cm4gKChsYW5lX3ZvbHRhZ2Vf c3dpbmdfcHJlX2VtcGhhc2lzICYgMHgwMykgPT0gTUFYX0NSX0xFVkVMKTsNCj4gK30NCj4gKw0K PiArc3RhdGljIGJvb2wgaXQ2NTA1X2NoZWNrX3ByZV9lbXBoYXNpc19tYXgodTggbGFuZV92b2x0 YWdlX3N3aW5nX3ByZV9lbXBoYXNpcykNCj4gK3sNCj4gKwlyZXR1cm4gKChsYW5lX3ZvbHRhZ2Vf c3dpbmdfcHJlX2VtcGhhc2lzICYgMHgwMykgPT0gTUFYX0VRX0xFVkVMKTsNCj4gK30NCj4gKw0K PiArc3RhdGljIGJvb2wgaXQ2NTA1X2NoZWNrX21heF92b2x0YWdlX3N3aW5nX3JlYWNoZWQodTgg KmxhbmVfdm9sdGFnZV9zd2luZywNCj4gKwkJCQkJCSAgIHU4IGxhbmVfY291bnQpDQo+ICt7DQo+ ICsJdTggaTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBsYW5lX2NvdW50OyBpKyspIHsNCj4g KwkJaWYgKGxhbmVfdm9sdGFnZV9zd2luZ1tpXSAmIERQX1RSQUlOX01BWF9TV0lOR19SRUFDSEVE KQ0KPiArCQkJcmV0dXJuIHRydWU7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIGZhbHNlOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBpdDY1MDVfc3RlcF90cmFpbl9sYW5lX3ZvbHRhZ2VfcHJl X2VtcGhhc2lzX3NldCgNCj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsDQo+ICsJc3RydWN0IGl0 NjUwNV9zdGVwX3RyYWluX3BhcmEgKmxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMsDQo+ICsJdTgg KmxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXNfc2V0KQ0KPiArew0KPiArCXU4IGk7DQo+ICsNCj4g Kwlmb3IgKGkgPSAwOyBpIDwgaXQ2NTA1LT5sYW5lX2NvdW50OyBpKyspIHsNCj4gKwkJbGFuZV92 b2x0YWdlX3ByZV9lbXBoYXNpcy0+dm9sdGFnZV9zd2luZ1tpXSAmPSAweDAzOw0KPiArCQlsYW5l X3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldFtpXSA9DQo+ICsJCQlsYW5lX3ZvbHRhZ2VfcHJlX2Vt cGhhc2lzLT52b2x0YWdlX3N3aW5nW2ldOw0KPiArCQlpZiAoaXQ2NTA1X2NoZWNrX3ZvbHRhZ2Vf c3dpbmdfbWF4KA0KPiArCQkJICAgIGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vf c3dpbmdbaV0pKQ0KPiArCQkJbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpc19zZXRbaV0gfD0NCj4g KwkJCQlEUF9UUkFJTl9NQVhfU1dJTkdfUkVBQ0hFRDsNCj4gKw0KPiArCQlsYW5lX3ZvbHRhZ2Vf cHJlX2VtcGhhc2lzLT5wcmVfZW1waGFzaXNbaV0gJj0gMHgwMzsNCj4gKwkJbGFuZV92b2x0YWdl X3ByZV9lbXBoYXNpc19zZXRbaV0gfD0NCj4gKwkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMt PnByZV9lbXBoYXNpc1tpXQ0KPiArCQkJPDwgRFBfVFJBSU5fUFJFX0VNUEhBU0lTX1NISUZUOw0K PiArCQlpZiAoaXQ2NTA1X2NoZWNrX3ByZV9lbXBoYXNpc19tYXgoDQo+ICsJCQkgICAgbGFuZV92 b2x0YWdlX3ByZV9lbXBoYXNpcy0+cHJlX2VtcGhhc2lzW2ldKSkNCj4gKwkJCWxhbmVfdm9sdGFn ZV9wcmVfZW1waGFzaXNfc2V0W2ldIHw9DQo+ICsJCQkJRFBfVFJBSU5fTUFYX1BSRV9FTVBIQVNJ U19SRUFDSEVEOw0KPiArCQlpdDY1MDVfZHBjZF93cml0ZShpdDY1MDUsIERQX1RSQUlOSU5HX0xB TkUwX1NFVCArIGksDQo+ICsJCQkJICBsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldFtpXSk7 DQo+ICsNCj4gKwkJaWYgKGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXNfc2V0W2ldICE9DQo+ICsJ CSAgICBpdDY1MDVfZHBjZF9yZWFkKGl0NjUwNSwgRFBfVFJBSU5JTkdfTEFORTBfU0VUICsgaSkp DQo+ICsJCQlyZXR1cm4gZmFsc2U7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIHRydWU7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBib29sDQo+ICtpdDY1MDVfc3RlcF9jcl90cmFpbihzdHJ1Y3QgaXQ2 NTA1ICppdDY1MDUsDQo+ICsJCSAgICAgc3RydWN0IGl0NjUwNV9zdGVwX3RyYWluX3BhcmEgKmxh bmVfdm9sdGFnZV9wcmVfZW1waGFzaXMpDQo+ICt7DQo+ICsJdTggbG9vcF9jb3VudCA9IDAsIGkg PSAwLCBqOw0KPiArCXU4IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdID0geyAwIH07 DQo+ICsJdTggbGFuZV9sZXZlbF9jb25maWdbTUFYX0xBTkVfQ09VTlRdID0geyAwIH07DQo+ICsJ aW50IHByZV9lbXBoYXNpc19hZGp1c3QgPSAtMSwgdm9sdGFnZV9zd2luZ19hZGp1c3QgPSAtMTsN Cj4gKw0KPiArCWl0NjUwNV9kcGNkX3dyaXRlKGl0NjUwNSwgRFBfRE9XTlNQUkVBRF9DVFJMLA0K PiArCQkJICBpdDY1MDUtPmVuYWJsZV9zc2MgPyBEUF9TUFJFQURfQU1QXzBfNSA6IDB4MDApOw0K PiArCWl0NjUwNV9kcGNkX3dyaXRlKGl0NjUwNSwgRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQsDQo+ ICsJCQkgIERQX1RSQUlOSU5HX1BBVFRFUk5fMSk7DQo+ICsNCj4gKwl3aGlsZSAobG9vcF9jb3Vu dCA8IDUgJiYgaSA8IDEwKSB7DQo+ICsJCWkrKzsNCj4gKwkJaWYgKCFpdDY1MDVfc3RlcF90cmFp bl9sYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldCgNCj4gKwkJCSAgICBpdDY1MDUsIGxhbmVf dm9sdGFnZV9wcmVfZW1waGFzaXMsDQo+ICsJCQkgICAgbGFuZV9sZXZlbF9jb25maWcpKQ0KPiAr CQkJY29udGludWU7DQo+ICsJCWRybV9kcF9saW5rX3RyYWluX2Nsb2NrX3JlY292ZXJ5X2RlbGF5 KGl0NjUwNS0+ZHBjZCk7DQo+ICsJCWRybV9kcF9kcGNkX3JlYWRfbGlua19zdGF0dXMoJml0NjUw NS0+YXV4LCBsaW5rX3N0YXR1cyk7DQo+ICsNCj4gKwkJaWYgKGRybV9kcF9jbG9ja19yZWNvdmVy eV9vayhsaW5rX3N0YXR1cywgaXQ2NTA1LT5sYW5lX2NvdW50KSkgew0KPiArCQkJaXQ2NTA1X3Nl dF9iaXRzKGl0NjUwNSwgUkVHX1RSQUlOX0NUUkwwLCBGT1JDRV9DUl9ET05FLA0KPiArCQkJCQlG T1JDRV9DUl9ET05FKTsNCj4gKwkJCXJldHVybiB0cnVlOw0KPiArCQl9DQo+ICsJCURSTV9ERVZf REVCVUdfRFJJVkVSKCZpdDY1MDUtPmNsaWVudC0+ZGV2LCAiY3Igbm90IGRvbmUiKTsNCj4gKw0K PiArCQlpZiAoaXQ2NTA1X2NoZWNrX21heF92b2x0YWdlX3N3aW5nX3JlYWNoZWQobGFuZV9sZXZl bF9jb25maWcsDQo+ICsJCQkJCQkJICAgaXQ2NTA1LT5sYW5lX2NvdW50KSkNCj4gKwkJCWdvdG8g Y3JfdHJhaW5fZmFpbDsNCj4gKw0KPiArCQlmb3IgKGogPSAwOyBqIDwgaXQ2NTA1LT5sYW5lX2Nv dW50OyBqKyspIHsNCj4gKwkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vfc3dp bmdbal0gPQ0KPiArCQkJCWRybV9kcF9nZXRfYWRqdXN0X3JlcXVlc3Rfdm9sdGFnZShsaW5rX3N0 YXR1cywNCj4gKwkJCQkJCQkJICBqKSA+Pg0KPiArCQkJCURQX1RSQUlOX1ZPTFRBR0VfU1dJTkdf U0hJRlQ7DQo+ICsJCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT5wcmVfZW1waGFzaXNbal0g PQ0KPiArCQkJCWRybV9kcF9nZXRfYWRqdXN0X3JlcXVlc3RfcHJlX2VtcGhhc2lzKA0KPiArCQkJ CQlsaW5rX3N0YXR1cywgaikgPj4NCj4gKwkJCQlEUF9UUkFJTl9QUkVfRU1QSEFTSVNfU0hJRlQ7 DQo+ICsJCQlpZiAoKHZvbHRhZ2Vfc3dpbmdfYWRqdXN0ID09DQo+ICsJCQkgICAgIGxhbmVfdm9s dGFnZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbal0pICYmDQo+ICsJCQkgICAgKHByZV9l bXBoYXNpc19hZGp1c3QgPT0NCj4gKwkJCSAgICAgbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+ cHJlX2VtcGhhc2lzW2pdKSkgew0KPiArCQkJCWxvb3BfY291bnQrKzsNCj4gKwkJCQljb250aW51 ZTsNCj4gKwkJCX0NCj4gKw0KPiArCQkJdm9sdGFnZV9zd2luZ19hZGp1c3QgPQ0KPiArCQkJCWxh bmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbal07DQo+ICsJCQlwcmVfZW1w aGFzaXNfYWRqdXN0ID0NCj4gKwkJCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT5wcmVfZW1w aGFzaXNbal07DQo+ICsJCQlsb29wX2NvdW50ID0gMDsNCj4gKw0KPiArCQkJaWYgKHZvbHRhZ2Vf c3dpbmdfYWRqdXN0ICsgcHJlX2VtcGhhc2lzX2FkanVzdCA+DQo+ICsJCQkgICAgTUFYX0VRX0xF VkVMKQ0KPiArCQkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbal0g PQ0KPiArCQkJCQlNQVhfRVFfTEVWRUwgLQ0KPiArCQkJCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhh c2lzDQo+ICsJCQkJCQktPnByZV9lbXBoYXNpc1tqXTsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiAr Y3JfdHJhaW5fZmFpbDoNCj4gKwlpdDY1MDVfZHBjZF93cml0ZShpdDY1MDUsIERQX1RSQUlOSU5H X1BBVFRFUk5fU0VULA0KPiArCQkJICBEUF9UUkFJTklOR19QQVRURVJOX0RJU0FCTEUpOw0KPiAr DQo+ICsJcmV0dXJuIGZhbHNlOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbA0KPiAraXQ2NTA1 X3N0ZXBfZXFfdHJhaW4oc3RydWN0IGl0NjUwNSAqaXQ2NTA1LA0KPiArCQkgICAgIHN0cnVjdCBp dDY1MDVfc3RlcF90cmFpbl9wYXJhICpsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzKQ0KPiArew0K PiArCXU4IGxvb3BfY291bnQgPSAwLCBpLCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpF XSA9IHsgMCB9Ow0KPiArCXU4IGxhbmVfbGV2ZWxfY29uZmlnW01BWF9MQU5FX0NPVU5UXSA9IHsg MCB9Ow0KPiArDQo+ICsJaXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9UUkFJTklOR19QQVRU RVJOX1NFVCwNCj4gKwkJCSAgRFBfVFJBSU5JTkdfUEFUVEVSTl8yKTsNCj4gKw0KPiArCXdoaWxl IChsb29wX2NvdW50IDwgNikgew0KPiArCQlsb29wX2NvdW50Kys7DQo+ICsNCj4gKwkJaWYgKCFp dDY1MDVfc3RlcF90cmFpbl9sYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldCgNCj4gKwkJCSAg ICBpdDY1MDUsIGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMsDQo+ICsJCQkgICAgbGFuZV9sZXZl bF9jb25maWcpKQ0KPiArCQkJY29udGludWU7DQo+ICsNCj4gKwkJZHJtX2RwX2xpbmtfdHJhaW5f Y2hhbm5lbF9lcV9kZWxheShpdDY1MDUtPmRwY2QpOw0KPiArCQlkcm1fZHBfZHBjZF9yZWFkX2xp bmtfc3RhdHVzKCZpdDY1MDUtPmF1eCwgbGlua19zdGF0dXMpOw0KPiArDQo+ICsJCWlmICghZHJt X2RwX2Nsb2NrX3JlY292ZXJ5X29rKGxpbmtfc3RhdHVzLCBpdDY1MDUtPmxhbmVfY291bnQpKQ0K PiArCQkJZ290byBlcV90cmFpbl9mYWlsOw0KPiArDQo+ICsJCWlmIChkcm1fZHBfY2hhbm5lbF9l cV9vayhsaW5rX3N0YXR1cywgaXQ2NTA1LT5sYW5lX2NvdW50KSkgew0KPiArCQkJaXQ2NTA1X2Rw Y2Rfd3JpdGUoaXQ2NTA1LCBEUF9UUkFJTklOR19QQVRURVJOX1NFVCwNCj4gKwkJCQkJICBEUF9U UkFJTklOR19QQVRURVJOX0RJU0FCTEUpOw0KPiArCQkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwg UkVHX1RSQUlOX0NUUkwwLCBGT1JDRV9FUV9ET05FLA0KPiArCQkJCQlGT1JDRV9FUV9ET05FKTsN Cj4gKwkJCXJldHVybiB0cnVlOw0KPiArCQl9DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKCZp dDY1MDUtPmNsaWVudC0+ZGV2LCAiZXEgbm90IGRvbmUiKTsNCj4gKw0KPiArCQlmb3IgKGkgPSAw OyBpIDwgaXQ2NTA1LT5sYW5lX2NvdW50OyBpKyspIHsNCj4gKwkJCWxhbmVfdm9sdGFnZV9wcmVf ZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbaV0gPQ0KPiArCQkJCWRybV9kcF9nZXRfYWRqdXN0X3Jl cXVlc3Rfdm9sdGFnZShsaW5rX3N0YXR1cywNCj4gKwkJCQkJCQkJICBpKSA+Pg0KPiArCQkJCURQ X1RSQUlOX1ZPTFRBR0VfU1dJTkdfU0hJRlQ7DQo+ICsJCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhh c2lzLT5wcmVfZW1waGFzaXNbaV0gPQ0KPiArCQkJCWRybV9kcF9nZXRfYWRqdXN0X3JlcXVlc3Rf cHJlX2VtcGhhc2lzKA0KPiArCQkJCQlsaW5rX3N0YXR1cywgaSkgPj4NCj4gKwkJCQlEUF9UUkFJ Tl9QUkVfRU1QSEFTSVNfU0hJRlQ7DQo+ICsNCj4gKwkJCWlmIChsYW5lX3ZvbHRhZ2VfcHJlX2Vt cGhhc2lzLT52b2x0YWdlX3N3aW5nW2ldICsNCj4gKwkJCQkgICAgbGFuZV92b2x0YWdlX3ByZV9l bXBoYXNpcy0+cHJlX2VtcGhhc2lzW2ldID4NCj4gKwkJCSAgICBNQVhfRVFfTEVWRUwpDQo+ICsJ CQkJbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+dm9sdGFnZV9zd2luZ1tpXSA9DQo+ICsJCQkJ CTB4MDMgLSBsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzDQo+ICsJCQkJCQkgICAgICAgLT5wcmVf ZW1waGFzaXNbaV07DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4gK2VxX3RyYWluX2ZhaWw6DQo+ICsJ aXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9UUkFJTklOR19QQVRURVJOX1NFVCwNCj4gKwkJ CSAgRFBfVFJBSU5JTkdfUEFUVEVSTl9ESVNBQkxFKTsNCj4gKwlyZXR1cm4gZmFsc2U7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBib29sIGl0NjUwNV9saW5rX3N0YXJ0X3N0ZXBfdHJhaW4oc3RydWN0 IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWludCBlcnI7DQo+ICsJc3RydWN0IGl0NjUwNV9z dGVwX3RyYWluX3BhcmEgbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcyA9IHsNCj4gKwkJLnZvbHRh Z2Vfc3dpbmcgPSB7IDAgfSwNCj4gKwkJLnByZV9lbXBoYXNpcyA9IHsgMCB9LA0KPiArCX07DQo+ ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUigmaXQ2NTA1LT5jbGllbnQtPmRldiwgInN0YXJ0 Iik7DQo+ICsJZXJyID0gaXQ2NTA1X2RybV9kcF9saW5rX2NvbmZpZ3VyZShpdDY1MDUpOw0KPiAr DQo+ICsJaWYgKGVyciA8IDApDQo+ICsJCXJldHVybiBmYWxzZTsNCj4gKwlpZiAoIWl0NjUwNV9z dGVwX2NyX3RyYWluKGl0NjUwNSwgJmxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMpKQ0KPiArCQly ZXR1cm4gZmFsc2U7DQo+ICsJaWYgKCFpdDY1MDVfc3RlcF9lcV90cmFpbihpdDY1MDUsICZsYW5l X3ZvbHRhZ2VfcHJlX2VtcGhhc2lzKSkNCj4gKwkJcmV0dXJuIGZhbHNlOw0KPiArCXJldHVybiB0 cnVlOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBpdDY1MDVfZ2V0X3ZpZGVvX3N0YXR1cyhz dHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaW50IHJlZ18wZDsNCj4gKw0KPiArCXJl Z18wZCA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX1NZU1RFTV9TVFMpOw0KPiArDQo+ICsJaWYg KHJlZ18wZCA8IDApDQo+ICsJCXJldHVybiBmYWxzZTsNCj4gKw0KPiArCXJldHVybiAhIShyZWdf MGQgJiBWSURFT19TVEIpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfcmVzZXRf aGRjcChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaXQ2NTA1LT5oZGNwX3N0YXR1 cyA9IEhEQ1BfQVVUSF9JRExFOw0KPiArCS8qIERpc2FibGUgQ1BfRGVzaXJlZCAqLw0KPiArCWl0 NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX0NUUkwxLCBIRENQX0NQX0VOQUJMRSwgMHgw MCk7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1JFU0VUX0NUUkwsIEhEQ1BfUkVT RVQsIEhEQ1BfUkVTRVQpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfc3RhcnRf aGRjcChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2 ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihk ZXYsICJzdGFydCIpOw0KPiArCWl0NjUwNV9yZXNldF9oZGNwKGl0NjUwNSk7DQo+ICsJcXVldWVf ZGVsYXllZF93b3JrKHN5c3RlbV93cSwgJml0NjUwNS0+aGRjcF93b3JrLA0KPiArCQkJICAgbXNl Y3NfdG9famlmZmllcygyNDAwKSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9z dG9wX2hkY3Aoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWl0NjUwNV9yZXNldF9o ZGNwKGl0NjUwNSk7DQo+ICsJY2FuY2VsX2RlbGF5ZWRfd29yaygmaXQ2NTA1LT5oZGNwX3dvcmsp Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBpdDY1MDVfaGRjcF9pc19rc3ZfdmFsaWQodTgg KmtzdikNCj4gK3sNCj4gKwlpbnQgaSwgb25lcyA9IDA7DQo+ICsNCj4gKwkvKiBLU1YgaGFzIDIw IDEncyBhbmQgMjAgMCdzICovDQo+ICsJZm9yIChpID0gMDsgaSA8IERSTV9IRENQX0tTVl9MRU47 IGkrKykNCj4gKwkJb25lcyArPSBod2VpZ2h0OChrc3ZbaV0pOw0KPiArCWlmIChvbmVzICE9IDIw KQ0KPiArCQlyZXR1cm4gZmFsc2U7DQo+ICsJcmV0dXJuIHRydWU7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyB2b2lkIGl0NjUwNV9oZGNwX3BhcnQxX2F1dGgoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0K PiArew0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiAr CXU4IGhkY3BfYmNhcHM7DQo+ICsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfUkVT RVRfQ1RSTCwgSERDUF9SRVNFVCwgMHgwMCk7DQo+ICsJLyogRGlzYWJsZSBDUF9EZXNpcmVkICov DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfQ1RSTDEsIEhEQ1BfQ1BfRU5B QkxFLCAweDAwKTsNCj4gKw0KPiArCXVzbGVlcF9yYW5nZSgxMDAwLCAxNTAwKTsNCj4gKwloZGNw X2JjYXBzID0gaXQ2NTA1X2RwY2RfcmVhZChpdDY1MDUsIERQX0FVWF9IRENQX0JDQVBTKTsNCj4g KwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJEUENEWzB4NjgwMjhdOiAweCUwMngiLA0KPiAr CQkJICAgICBoZGNwX2JjYXBzKTsNCj4gKw0KPiArCWlmICghaGRjcF9iY2FwcykNCj4gKwkJcmV0 dXJuOw0KPiArDQo+ICsJLyogY2xlYXIgdGhlIHJlcGVhdGVyIExpc3QgQ2hrIERvbmUgYW5kIGZh aWwgYml0ICovDQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfVFJJR0dFUiwN Cj4gKwkJCUhEQ1BfVFJJR0dFUl9LU1ZfRE9ORSB8IEhEQ1BfVFJJR0dFUl9LU1ZfRkFJTCwNCj4g KwkJCTB4MDApOw0KPiArDQo+ICsJLyogRW5hYmxlIEFuIEdlbmVyYXRvciAqLw0KPiArCWl0NjUw NV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX0NUUkwyLCBIRENQX0FOX0dFTiwgSERDUF9BTl9H RU4pOw0KPiArCS8qIGRlbGF5MW1zKDEwKTsqLw0KPiArCXVzbGVlcF9yYW5nZSgxMDAwMCwgMTUw MDApOw0KPiArCS8qIFN0b3AgQW4gR2VuZXJhdG9yICovDQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0 NjUwNSwgUkVHX0hEQ1BfQ1RSTDIsIEhEQ1BfQU5fR0VOLCAweDAwKTsNCj4gKw0KPiArCWl0NjUw NV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX0NUUkwxLCBIRENQX0NQX0VOQUJMRSwgSERDUF9D UF9FTkFCTEUpOw0KPiArDQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfVFJJ R0dFUiwgSERDUF9UUklHR0VSX1NUQVJULA0KPiArCQkJSERDUF9UUklHR0VSX1NUQVJUKTsNCj4g Kw0KPiArCWl0NjUwNS0+aGRjcF9zdGF0dXMgPSBIRENQX0FVVEhfR09JTkc7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBpbnQgaXQ2NTA1X3NoYTFfZGlnZXN0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSwg dTggKnNoYTFfaW5wdXQsDQo+ICsJCQkgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdTggKm91dHB1 dF9hdikNCj4gK3sNCj4gKwlzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYzsNCj4gKwlzdHJ1Y3QgY3J5 cHRvX3NoYXNoICp0Zm07DQo+ICsJaW50IGVycjsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm aXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiArCXRmbSA9IGNyeXB0b19hbGxvY19zaGFzaCgi c2hhMSIsIDAsIDApOw0KPiArCWlmIChJU19FUlIodGZtKSkgew0KPiArCQlEUk1fREVWX0VSUk9S KGRldiwgImNyeXB0b19hbGxvY19zaGFzaCBzaGExIGZhaWxlZCIpOw0KPiArCQlyZXR1cm4gUFRS X0VSUih0Zm0pOw0KPiArCX0NCj4gKwlkZXNjID0ga3phbGxvYyhzaXplb2YoKmRlc2MpICsgY3J5 cHRvX3NoYXNoX2Rlc2NzaXplKHRmbSksIEdGUF9LRVJORUwpOw0KPiArCWlmICghZGVzYykgew0K PiArCQljcnlwdG9fZnJlZV9zaGFzaCh0Zm0pOw0KPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gKwl9 DQo+ICsNCj4gKwlkZXNjLT50Zm0gPSB0Zm07DQo+ICsJZXJyID0gY3J5cHRvX3NoYXNoX2RpZ2Vz dChkZXNjLCBzaGExX2lucHV0LCBzaXplLCBvdXRwdXRfYXYpOw0KPiArCWlmIChlcnIpDQo+ICsJ CURSTV9ERVZfRVJST1IoZGV2LCAiY3J5cHRvX3NoYXNoX2RpZ2VzdCBzaGExIGZhaWxlZCIpOw0K PiArDQo+ICsJY3J5cHRvX2ZyZWVfc2hhc2godGZtKTsNCj4gKwlrZnJlZShkZXNjKTsNCj4gKwly ZXR1cm4gZXJyOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGl0NjUwNV9zZXR1cF9zaGExX2lu cHV0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdTggKnNoYTFfaW5wdXQpDQo+ICt7DQo+ICsJc3Ry dWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJdTggYmluZm9bMl07 DQo+ICsJaW50IGRvd25fc3RyZWFtX2NvdW50LCBpLCBlcnIsIG1zZ19jb3VudCA9IDA7DQo+ICsN Cj4gKwllcnIgPSBpdDY1MDVfZ2V0X2RwY2QoaXQ2NTA1LCBEUF9BVVhfSERDUF9CSU5GTywgYmlu Zm8sDQo+ICsJCQkgICAgICBBUlJBWV9TSVpFKGJpbmZvKSk7DQo+ICsNCj4gKwlpZiAoZXJyIDwg MCkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIlJlYWQgYmluZm8gdmFsdWUgRmFpbCIpOw0K PiArCQlyZXR1cm4gZXJyOw0KPiArCX0NCj4gKw0KPiArCWRvd25fc3RyZWFtX2NvdW50ID0gYmlu Zm9bMF0gJiAweDdGOw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImJpbmZvOjB4JSpw aCIsIChpbnQpQVJSQVlfU0laRShiaW5mbyksDQo+ICsJCQkgICAgIGJpbmZvKTsNCj4gKw0KPiAr CWlmICgoYmluZm9bMF0gJiBCSVQoNykpIHx8IChiaW5mb1sxXSAmIEJJVCgzKSkpIHsNCj4gKwkJ RFJNX0RFVl9FUlJPUihkZXYsICJIRENQIG1heCBjYXNjYWRlIGRldmljZSBleGNlZWQiKTsNCj4g KwkJcmV0dXJuIDA7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKCFkb3duX3N0cmVhbV9jb3VudCB8fA0K PiArCSAgICAoZG93bl9zdHJlYW1fY291bnQgPiBNQVhfSERDUF9ET1dOX1NUUkVBTV9DT1VOVCkp IHsNCj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJIRENQIGRvd24gc3RyZWFtIGNvdW50IEVycm9y ICVkIiwNCj4gKwkJCSAgICAgIGRvd25fc3RyZWFtX2NvdW50KTsNCj4gKwkJcmV0dXJuIDA7DQo+ ICsJfQ0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IGRvd25fc3RyZWFtX2NvdW50OyBpKyspIHsN Cj4gKwkJZXJyID0gaXQ2NTA1X2dldF9kcGNkKGl0NjUwNSwgRFBfQVVYX0hEQ1BfS1NWX0ZJRk8g Kw0KPiArCQkJCSAgICAgIChpICUgMykgKiBEUk1fSERDUF9LU1ZfTEVOLA0KPiArCQkJCSAgICAg IHNoYTFfaW5wdXQgKyBtc2dfY291bnQsDQo+ICsJCQkJICAgICAgRFJNX0hEQ1BfS1NWX0xFTik7 DQo+ICsNCj4gKwkJaWYgKGVyciA8IDApDQo+ICsJCQlyZXR1cm4gZXJyOw0KPiArDQo+ICsJCW1z Z19jb3VudCArPSA1Ow0KPiArCX0NCj4gKw0KPiArCWl0NjUwNS0+aGRjcF9kb3duX3N0cmVhbV9j b3VudCA9IGRvd25fc3RyZWFtX2NvdW50Ow0KPiArCXNoYTFfaW5wdXRbbXNnX2NvdW50KytdID0g YmluZm9bMF07DQo+ICsJc2hhMV9pbnB1dFttc2dfY291bnQrK10gPSBiaW5mb1sxXTsNCj4gKw0K PiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX0NUUkwyLCBIRENQX0VOX00wX1JF QUQsDQo+ICsJCQlIRENQX0VOX00wX1JFQUQpOw0KPiArDQo+ICsJZXJyID0gcmVnbWFwX2J1bGtf cmVhZChpdDY1MDUtPnJlZ21hcCwgUkVHX00wXzBfNywNCj4gKwkJCSAgICAgICBzaGExX2lucHV0 ICsgbXNnX2NvdW50LCA4KTsNCj4gKw0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19I RENQX0NUUkwyLCBIRENQX0VOX00wX1JFQUQsIDB4MDApOw0KPiArDQo+ICsJaWYgKGVyciA8IDAp IHsNCj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICIgV2FybmluZywgUmVhZCBNIHZhbHVlIEZhaWwi KTsNCj4gKwkJcmV0dXJuIGVycjsNCj4gKwl9DQo+ICsNCj4gKwltc2dfY291bnQgKz0gODsNCj4g Kw0KPiArCXJldHVybiBtc2dfY291bnQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBib29sIGl0NjUw NV9oZGNwX3BhcnQyX2tzdmxpc3RfY2hlY2soc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0K PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiArCXU4IGF2 WzVdWzRdLCBidls1XVs0XTsNCj4gKwlpbnQgaSwgZXJyOw0KPiArDQo+ICsJaSA9IGl0NjUwNV9z ZXR1cF9zaGExX2lucHV0KGl0NjUwNSwgaXQ2NTA1LT5zaGExX2lucHV0KTsNCj4gKwlpZiAoaSA8 PSAwKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiU0hBLTEgSW5wdXQgbGVuZ3RoIGVycm9y ICVkIiwgaSk7DQo+ICsJCXJldHVybiBmYWxzZTsNCj4gKwl9DQo+ICsNCj4gKwlpdDY1MDVfc2hh MV9kaWdlc3QoaXQ2NTA1LCBpdDY1MDUtPnNoYTFfaW5wdXQsIGksICh1OCAqKWF2KTsNCj4gKw0K PiArCWVyciA9IGl0NjUwNV9nZXRfZHBjZChpdDY1MDUsIERQX0FVWF9IRENQX1ZfUFJJTUUoMCks ICh1OCAqKWJ2LA0KPiArCQkJICAgICAgc2l6ZW9mKGJ2KSk7DQo+ICsNCj4gKwlpZiAoZXJyIDwg MCkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIlJlYWQgVicgdmFsdWUgRmFpbCIpOw0KPiAr CQlyZXR1cm4gZmFsc2U7DQo+ICsJfQ0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IDU7IGkrKykN Cj4gKwkJaWYgKChidltpXVszXSAhPSBhdltpXVswXSkgfHwgKGJ2W2ldWzJdICE9IGF2W2ldWzFd KSB8fA0KPiArCQkgICAgKGJ2W2ldWzFdICE9IGF2W2ldWzJdKSB8fCAoYnZbaV1bMF0gIT0gYXZb aV1bM10pKQ0KPiArCQkJcmV0dXJuIGZhbHNlOw0KPiArDQo+ICsJRFJNX0RFVl9ERUJVR19EUklW RVIoZGV2LCAiVicgYWxsIG1hdGNoISEiKTsNCj4gKwlyZXR1cm4gdHJ1ZTsNCj4gK30NCj4gKw0K PiArc3RhdGljIHZvaWQgaXQ2NTA1X2hkY3Bfd2FpdF9rc3ZfbGlzdChzdHJ1Y3Qgd29ya19zdHJ1 Y3QgKndvcmspDQo+ICt7DQo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gY29udGFpbmVyX29m KHdvcmssIHN0cnVjdCBpdDY1MDUsDQo+ICsJCQkJCSAgICAgaGRjcF93YWl0X2tzdl9saXN0KTsN Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKwl1bnNp Z25lZCBpbnQgdGltZW91dCA9IDUwMDA7DQo+ICsJdTggYnN0YXR1cyA9IDA7DQo+ICsJYm9vbCBr c3ZfbGlzdF9jaGVjazsNCj4gKw0KPiArCXRpbWVvdXQgLz0gMjA7DQo+ICsJd2hpbGUgKHRpbWVv dXQgPiAwKSB7DQo+ICsJCWlmICghaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSkN Cj4gKwkJCXJldHVybjsNCj4gKw0KPiArCQlic3RhdHVzID0gaXQ2NTA1X2RwY2RfcmVhZChpdDY1 MDUsIERQX0FVWF9IRENQX0JTVEFUVVMpOw0KPiArDQo+ICsJCWlmIChic3RhdHVzICYgRFBfQlNU QVRVU19SRUFEWSkNCj4gKwkJCWJyZWFrOw0KPiArDQo+ICsJCW1zbGVlcCgyMCk7DQo+ICsJCXRp bWVvdXQtLTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAodGltZW91dCA9PSAwKSB7DQo+ICsJCURSTV9E RVZfREVCVUdfRFJJVkVSKGRldiwgInRpbWVvdXQgYW5kIGtzdiBsaXN0IHdhaXQgZmFpbGVkIik7 DQo+ICsJCWdvdG8gdGltZW91dDsNCj4gKwl9DQo+ICsNCj4gKwlrc3ZfbGlzdF9jaGVjayA9IGl0 NjUwNV9oZGNwX3BhcnQyX2tzdmxpc3RfY2hlY2soaXQ2NTA1KTsNCj4gKwlEUk1fREVWX0RFQlVH X0RSSVZFUihkZXYsICJrc3YgbGlzdCByZWFkeSwga3N2IGxpc3QgY2hlY2sgJXMiLA0KPiArCQkJ ICAgICBrc3ZfbGlzdF9jaGVjayA/ICJwYXNzIiA6ICJmYWlsIik7DQo+ICsJaWYgKGtzdl9saXN0 X2NoZWNrKSB7DQo+ICsJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX1RSSUdHRVIs DQo+ICsJCQkJSERDUF9UUklHR0VSX0tTVl9ET05FLCBIRENQX1RSSUdHRVJfS1NWX0RPTkUpOw0K PiArCQlyZXR1cm47DQo+ICsJfQ0KPiArdGltZW91dDoNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2 NTA1LCBSRUdfSERDUF9UUklHR0VSLA0KPiArCQkJSERDUF9UUklHR0VSX0tTVl9ET05FIHwgSERD UF9UUklHR0VSX0tTVl9GQUlMLA0KPiArCQkJSERDUF9UUklHR0VSX0tTVl9ET05FIHwgSERDUF9U UklHR0VSX0tTVl9GQUlMKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2hkY3Bf d29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQo+ICt7DQo+ICsJc3RydWN0IGl0NjUwNSAq aXQ2NTA1ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpdDY1MDUsDQo+ICsJCQkJCSAgICAg aGRjcF93b3JrLndvcmspOw0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVu dC0+ZGV2Ow0KPiArCWludCByZXQ7DQo+ICsJdTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNf U0laRV0gPSB7IDAgfTsNCj4gKw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInN0YXJ0 Iik7DQo+ICsNCj4gKwlpZiAoIWl0NjUwNV9nZXRfc2lua19ocGRfc3RhdHVzKGl0NjUwNSkpDQo+ ICsJCXJldHVybjsNCj4gKw0KPiArCXJldCA9IGRybV9kcF9kcGNkX3JlYWRfbGlua19zdGF0dXMo Jml0NjUwNS0+YXV4LCBsaW5rX3N0YXR1cyk7DQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2 LCAicmV0OiAlZCBsaW5rX3N0YXR1czogJSpwaCIsIHJldCwNCj4gKwkJCSAgICAgKGludClzaXpl b2YobGlua19zdGF0dXMpLCBsaW5rX3N0YXR1cyk7DQo+ICsNCj4gKwlpZiAoKHJldCA8IDApIHx8 ICFkcm1fZHBfY2hhbm5lbF9lcV9vayhsaW5rX3N0YXR1cywgaXQ2NTA1LT5sYW5lX2NvdW50KQ0K PiArCSAgICB8fCAhaXQ2NTA1X2dldF92aWRlb19zdGF0dXMoaXQ2NTA1KSkgew0KPiArCQlEUk1f REVWX0RFQlVHX0RSSVZFUihkZXYsICJsaW5rIHRyYWluIG5vdCBkb25lIG9yIG5vIHZpZGVvIik7 DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ICsNCj4gKwlyZXQgPSBpdDY1MDVfZ2V0X2RwY2QoaXQ2 NTA1LCBEUF9BVVhfSERDUF9CS1NWLCBpdDY1MDUtPmJrc3ZzLA0KPiArCQkJICAgICAgQVJSQVlf U0laRShpdDY1MDUtPmJrc3ZzKSk7DQo+ICsJaWYgKHJldCA8IDApIHsNCj4gKwkJRFJNX0RFVl9F UlJPUihkZXYsICJmYWlsIHRvIGdldCBia3N2ICByZXQ6ICVkIiwgcmV0KTsNCj4gKwkJaXQ2NTA1 X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfVFJJR0dFUiwNCj4gKwkJCQlIRENQX1RSSUdHRVJf S1NWX0ZBSUwsIEhEQ1BfVFJJR0dFUl9LU1ZfRkFJTCk7DQo+ICsJfQ0KPiArDQo+ICsJRFJNX0RF Vl9ERUJVR19EUklWRVIoZGV2LCAiYmtzdiA9IDB4JSpwaCIsDQo+ICsJCQkgICAgIChpbnQpQVJS QVlfU0laRShpdDY1MDUtPmJrc3ZzKSwgaXQ2NTA1LT5ia3N2cyk7DQo+ICsNCj4gKwlpZiAoIWl0 NjUwNV9oZGNwX2lzX2tzdl92YWxpZChpdDY1MDUtPmJrc3ZzKSkgew0KPiArCQlEUk1fREVWX0VS Uk9SKGRldiwgIkRpc3BsYXkgUG9ydCBia3N2IG5vdCB2YWxpZCIpOw0KPiArCQlpdDY1MDVfc2V0 X2JpdHMoaXQ2NTA1LCBSRUdfSERDUF9UUklHR0VSLA0KPiArCQkJCUhEQ1BfVFJJR0dFUl9LU1Zf RkFJTCwgSERDUF9UUklHR0VSX0tTVl9GQUlMKTsNCj4gKwl9DQo+ICsNCj4gKwlpdDY1MDVfaGRj cF9wYXJ0MV9hdXRoKGl0NjUwNSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9z aG93X2hkY3BfaW5mbyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJc3RydWN0IGRl dmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJaW50IGk7DQo+ICsJdTggKnNo YTEgPSBpdDY1MDUtPnNoYTFfaW5wdXQ7DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihk ZXYsICJoZGNwX3N0YXR1czogJWQgaXNfcmVwZWF0ZXI6ICVkIiwNCj4gKwkJCSAgICAgaXQ2NTA1 LT5oZGNwX3N0YXR1cywgaXQ2NTA1LT5pc19yZXBlYXRlcik7DQo+ICsJRFJNX0RFVl9ERUJVR19E UklWRVIoZGV2LCAiYmtzdiA9IDB4JSpwaCIsDQo+ICsJCQkgICAgIChpbnQpQVJSQVlfU0laRShp dDY1MDUtPmJrc3ZzKSwgaXQ2NTA1LT5ia3N2cyk7DQo+ICsNCj4gKwlpZiAoaXQ2NTA1LT5pc19y ZXBlYXRlcikgew0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJoZGNwX2Rvd25fc3Ry ZWFtX2NvdW50OiAlZCIsDQo+ICsJCQkJICAgICBpdDY1MDUtPmhkY3BfZG93bl9zdHJlYW1fY291 bnQpOw0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJzaGExX2lucHV0OiAweCUqcGgi LA0KPiArCQkJCSAgICAgKGludClBUlJBWV9TSVpFKGl0NjUwNS0+c2hhMV9pbnB1dCksDQo+ICsJ CQkJICAgICBpdDY1MDUtPnNoYTFfaW5wdXQpOw0KPiArCQlmb3IgKGkgPSAwOyBpIDwgaXQ2NTA1 LT5oZGNwX2Rvd25fc3RyZWFtX2NvdW50OyBpKyspIHsNCj4gKwkJCURSTV9ERVZfREVCVUdfRFJJ VkVSKGRldiwgIktTVl8lZCA9IDB4JSpwaCIsIGksDQo+ICsJCQkJCSAgICAgRFJNX0hEQ1BfS1NW X0xFTiwgc2hhMSk7DQo+ICsJCQlzaGExICs9IERSTV9IRENQX0tTVl9MRU47DQo+ICsJCX0NCj4g KwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiYmluZm86IDB4JTJwaCBNMDogMHglOHBoIiwN Cj4gKwkJCQkgICAgIHNoYTEsIHNoYTEgKyAyKTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyB2b2lkIGl0NjUwNV9zdG9wX2xpbmtfdHJhaW4oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiAr ew0KPiArCWl0NjUwNS0+bGlua19zdGF0ZSA9IExJTktfSURMRTsNCj4gKwljYW5jZWxfd29ya19z eW5jKCZpdDY1MDUtPmxpbmtfd29ya3MpOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19U UkFJTl9DVFJMMSwgRk9SQ0VfUkVUUkFJTik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0 NjUwNV9saW5rX3RyYWluX29rKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiArCWl0NjUwNS0+ bGlua19zdGF0ZSA9IExJTktfT0s7DQo+ICsJLyogZGlzYWxiZSBtdXRlIGVuYWJsZSBhdmkgaW5m byBmcmFtZSAqLw0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EQVRBX01VVEVfQ1RS TCwgRU5fVklEX01VVEUsIDB4MDApOw0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19J TkZPRlJBTUVfQ1RSTCwNCj4gKwkJCUVOX1ZJRF9DVFJMX1BLVCwgRU5fVklEX0NUUkxfUEtUKTsN Cj4gKw0KPiArCWlmIChpdDY1MDVfYXVkaW9faW5wdXQoaXQ2NTA1KSkgew0KPiArCQlEUk1fREVW X0RFQlVHX0RSSVZFUihkZXYsICJFbmFibGUgYXVkaW8hIik7DQo+ICsJCWl0NjUwNV9lbmFibGVf YXVkaW8oaXQ2NTA1KTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoaXQ2NTA1LT5oZGNwX2Rlc2lyZWQp DQo+ICsJCWl0NjUwNV9zdGFydF9oZGNwKGl0NjUwNSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2 b2lkIGl0NjUwNV9saW5rX3N0ZXBfdHJhaW5fcHJvY2VzcyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUp DQo+ICt7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ ICsJaW50IHJldCwgaSwgc3RlcF9yZXRyeSA9IDM7DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RS SVZFUihkZXYsICJTdGFydCBzdGVwIHRyYWluIik7DQo+ICsNCj4gKwlpZiAoaXQ2NTA1LT5zaW5r X2NvdW50ID09IDApIHsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiaXQ2NTA1LT5z aW5rX2NvdW50OiVkLCBmb3JjZSBlcSIsDQo+ICsJCQkJICAgICBpdDY1MDUtPnNpbmtfY291bnQp Ow0KPiArCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LAlSRUdfVFJBSU5fQ1RSTDAsIEZPUkNFX0VR X0RPTkUsDQo+ICsJCQkJRk9SQ0VfRVFfRE9ORSk7DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ICsN Cj4gKwlpZiAoIWl0NjUwNS0+c3RlcF90cmFpbikgew0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZF UihkZXYsICJub3Qgc3VwcG9ydCBzdGVwIHRyYWluIik7DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ ICsNCj4gKwkvKiBzZXRwIHRyYWluaW5nIHN0YXJ0IGhlcmUgKi8NCj4gKwlmb3IgKGkgPSAwOyBp IDwgc3RlcF9yZXRyeTsgaSsrKSB7DQo+ICsJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19U UkFJTl9DVFJMMCwNCj4gKwkJCQlGT1JDRV9DUl9ET05FIHwgRk9SQ0VfRVFfRE9ORSwgMHgwMCk7 DQo+ICsJCWl0NjUwNV9kcGNkX3dyaXRlKGl0NjUwNSwgRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQs DQo+ICsJCQkJICBEUF9UUkFJTklOR19QQVRURVJOX0RJU0FCTEUpOw0KPiArCQlyZXQgPSBpdDY1 MDVfbGlua19zdGFydF9zdGVwX3RyYWluKGl0NjUwNSk7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJ VkVSKGRldiwgInN0ZXAgdHJhaW4gJXMsIHJldHJ5OiVkIHRpbWVzIiwNCj4gKwkJCQkgICAgIHJl dCA/ICJwYXNzIiA6ICJmYWlsZWQiLCBpICsgMSk7DQo+ICsJCWlmIChyZXQpIHsNCj4gKwkJCWl0 NjUwNV9saW5rX3RyYWluX29rKGl0NjUwNSk7DQo+ICsJCQlyZXR1cm47DQo+ICsJCX0NCj4gKwl9 DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJ0cmFpbmluZyBmYWlsIik7DQo+ ICsJaXQ2NTA1LT5saW5rX3N0YXRlID0gTElOS19JRExFOw0KPiArCWl0NjUwNV92aWRlb19yZXNl dChpdDY1MDUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfbGlua190cmFpbmlu Z193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1 ICppdDY1MDUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl0NjUwNSwgbGlua193b3Jrcyk7 DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJaW50 IHJldDsNCj4gKw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIml0NjUwNS0+c2lua19j b3VudDogJWQiLA0KPiArCQkJICAgICBpdDY1MDUtPnNpbmtfY291bnQpOw0KPiArDQo+ICsJaWYg KCFpdDY1MDVfZ2V0X3NpbmtfaHBkX3N0YXR1cyhpdDY1MDUpKQ0KPiArCQlyZXR1cm47DQo+ICsN Cj4gKwlpdDY1MDVfbGlua190cmFpbmluZ19zZXR1cChpdDY1MDUpOw0KPiArCWl0NjUwNV9yZXNl dF9oZGNwKGl0NjUwNSk7DQo+ICsJaXQ2NTA1X2F1eF9yZXNldChpdDY1MDUpOw0KPiArDQo+ICsJ aWYgKGl0NjUwNS0+YXV0b190cmFpbl9yZXRyeSA8IDEpIHsNCj4gKwkJaXQ2NTA1X2xpbmtfc3Rl cF90cmFpbl9wcm9jZXNzKGl0NjUwNSk7DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ICsNCj4gKwly ZXQgPSBpdDY1MDVfbGlua19zdGFydF9hdXRvX3RyYWluKGl0NjUwNSk7DQo+ICsJRFJNX0RFVl9E RUJVR19EUklWRVIoZGV2LCAiYXV0byB0cmFpbiAlcywgYXV0b190cmFpbl9yZXRyeTogJWQiLA0K PiArCQkJICAgICByZXQgPyAicGFzcyIgOiAiZmFpbGVkIiwgaXQ2NTA1LT5hdXRvX3RyYWluX3Jl dHJ5KTsNCj4gKwlpdDY1MDUtPmF1dG9fdHJhaW5fcmV0cnktLTsNCj4gKw0KPiArCWlmIChyZXQp IHsNCj4gKwkJaXQ2NTA1X2xpbmtfdHJhaW5fb2soaXQ2NTA1KTsNCj4gKwkJcmV0dXJuOw0KPiAr CX0NCj4gKw0KPiArCWl0NjUwNV9kdW1wKGl0NjUwNSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2 b2lkIGl0NjUwNV9wbHVnZ2VkX3N0YXR1c190b19jb2RlYyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUp DQo+ICt7DQo+ICsJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXMgPSBpdDY1MDUtPmNv bm5lY3Rvcl9zdGF0dXM7DQo+ICsNCj4gKwlpZiAoaXQ2NTA1LT5wbHVnZ2VkX2NiICYmIGl0NjUw NS0+Y29kZWNfZGV2KQ0KPiArCQlpdDY1MDUtPnBsdWdnZWRfY2IoaXQ2NTA1LT5jb2RlY19kZXYs DQo+ICsJCQkJICAgc3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKTsNCj4gK30N Cj4gKw0KPiArc3RhdGljIGludCBpdDY1MDVfcHJvY2Vzc19ocGRfaXJxKHN0cnVjdCBpdDY1MDUg Kml0NjUwNSkNCj4gK3sNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQt PmRldjsNCj4gKwlpbnQgcmV0LCBkcGNkX3NpbmtfY291bnQsIGRwX2lycV92ZWN0b3IsIGJzdGF0 dXM7DQo+ICsJdTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV07DQo+ICsNCj4gKwlp ZiAoIWl0NjUwNV9nZXRfc2lua19ocGRfc3RhdHVzKGl0NjUwNSkpIHsNCj4gKwkJRFJNX0RFVl9E RUJVR19EUklWRVIoZGV2LCAiSFBEX0lSUSBIUEQgbG93Iik7DQo+ICsJCWl0NjUwNS0+c2lua19j b3VudCA9IDA7DQo+ICsJCXJldHVybiAwOw0KPiArCX0NCj4gKw0KPiArCXJldCA9IGl0NjUwNV9k cGNkX3JlYWQoaXQ2NTA1LCBEUF9TSU5LX0NPVU5UKTsNCj4gKwlpZiAocmV0IDwgMCkNCj4gKwkJ cmV0dXJuIHJldDsNCj4gKw0KPiArCWRwY2Rfc2lua19jb3VudCA9IERQX0dFVF9TSU5LX0NPVU5U KHJldCk7DQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiZHBjZF9zaW5rX2NvdW50OiAl ZCBpdDY1MDUtPnNpbmtfY291bnQ6JWQiLA0KPiArCQkJICAgICBkcGNkX3NpbmtfY291bnQsIGl0 NjUwNS0+c2lua19jb3VudCk7DQo+ICsNCj4gKwlpZiAoaXQ2NTA1LT5icmFuY2hfZGV2aWNlICYm IGRwY2Rfc2lua19jb3VudCAhPSBpdDY1MDUtPnNpbmtfY291bnQpIHsNCj4gKwkJbWVtc2V0KGl0 NjUwNS0+ZHBjZCwgMCwgc2l6ZW9mKGl0NjUwNS0+ZHBjZCkpOw0KPiArCQlpdDY1MDUtPnNpbmtf Y291bnQgPSBkcGNkX3NpbmtfY291bnQ7DQo+ICsJCWtmcmVlKGl0NjUwNS0+ZWRpZCk7DQo+ICsJ CWl0NjUwNS0+ZWRpZCA9IE5VTEw7DQo+ICsJCWl0NjUwNV9yZXNldF9sb2dpYyhpdDY1MDUpOw0K PiArCQlpdDY1MDVfaW50X21hc2tfZW5hYmxlKGl0NjUwNSk7DQo+ICsJCWl0NjUwNV9pbml0KGl0 NjUwNSk7DQo+ICsJCXJldHVybiAwOw0KPiArCX0NCj4gKw0KPiArCWRwX2lycV92ZWN0b3IgPSBp dDY1MDVfZHBjZF9yZWFkKGl0NjUwNSwgRFBfREVWSUNFX1NFUlZJQ0VfSVJRX1ZFQ1RPUik7DQo+ ICsJaWYgKGRwX2lycV92ZWN0b3IgPCAwKQ0KPiArCQlyZXR1cm4gZHBfaXJxX3ZlY3RvcjsNCj4g Kw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImRwX2lycV92ZWN0b3IgPSAweCUwMngi LCBkcF9pcnFfdmVjdG9yKTsNCj4gKw0KPiArCWlmIChkcF9pcnFfdmVjdG9yICYgRFBfQ1BfSVJR KSB7DQo+ICsJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX1RSSUdHRVIsIEhEQ1Bf VFJJR0dFUl9DUElSUSwNCj4gKwkJCQlIRENQX1RSSUdHRVJfQ1BJUlEpOw0KPiArDQo+ICsJCWJz dGF0dXMgPSBpdDY1MDVfZHBjZF9yZWFkKGl0NjUwNSwgRFBfQVVYX0hEQ1BfQlNUQVRVUyk7DQo+ ICsJCWlmIChic3RhdHVzIDwgMCkNCj4gKwkJCXJldHVybiBic3RhdHVzOw0KPiArDQo+ICsJCURS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIkJzdGF0dXMgPSAweCUwMngiLCBic3RhdHVzKTsNCj4g Kwl9DQo+ICsNCj4gKwlyZXQgPSBkcm1fZHBfZHBjZF9yZWFkX2xpbmtfc3RhdHVzKCZpdDY1MDUt PmF1eCwgbGlua19zdGF0dXMpOw0KPiArCWlmIChyZXQgPCAwKSB7DQo+ICsJCURSTV9ERVZfRVJS T1IoZGV2LCAiRmFpbCB0byByZWFkIGxpbmsgc3RhdHVzIHJldDogJWQiLA0KPiArCQkJICAgICAg cmV0KTsNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RS SVZFUihkZXYsICJsaW5rIHN0YXR1cyA9IDB4JSpwaCIsDQo+ICsJCQkgICAgIChpbnQpQVJSQVlf U0laRShsaW5rX3N0YXR1cyksIGxpbmtfc3RhdHVzKTsNCj4gKw0KPiArCWlmICghZHJtX2RwX2No YW5uZWxfZXFfb2sobGlua19zdGF0dXMsIGl0NjUwNS0+bGFuZV9jb3VudCkpIHsNCj4gKwkJaXQ2 NTA1LT5hdXRvX3RyYWluX3JldHJ5ID0gQVVUT19UUkFJTl9SRVRSWTsNCj4gKwkJaXQ2NTA1X3Zp ZGVvX3Jlc2V0KGl0NjUwNSk7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9jaGVja19yZWcwNihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUs IHVuc2lnbmVkIGludCByZWcwNikNCj4gK3sNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2 NTA1LT5jbGllbnQtPmRldjsNCj4gKwlib29sIGRhdGE7DQo+ICsNCj4gKwlpZiAocmVnMDYgJiBJ TlRfSFBEX0NIQU5HRSkgew0KPiArCQlkYXRhID0gaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMo aXQ2NTA1KTsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiaHBkIGNoYW5nZSBpbnRl cnJ1cHQsIGNoYW5nZSB0byAlcyIsDQo+ICsJCQkJICAgICBkYXRhID8gImhpZ2giIDogImxvdyIp Ow0KPiArCQlpZiAoaXQ2NTA1LT5jb25uZWN0b3IuZGV2KQ0KPiArCQkJZHJtX2hlbHBlcl9ocGRf aXJxX2V2ZW50KGl0NjUwNS0+Y29ubmVjdG9yLmRldik7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJ VkVSKGRldiwgIml0NjUwNS0+c2lua19jb3VudDogJWQiLA0KPiArCQkJCSAgICAgaXQ2NTA1LT5z aW5rX2NvdW50KTsNCj4gKw0KPiArCQlpZiAoZGF0YSkgew0KPiArCQkJd2FpdF9mb3JfY29tcGxl dGlvbl90aW1lb3V0KCZpdDY1MDUtPndhaXRfZWRpZF9jb21wbGV0ZSwNCj4gKwkJCQkJCSAgICBt c2Vjc190b19qaWZmaWVzKDYwMDApKTsNCj4gKwkJCWl0NjUwNV9sYW5lX3Rlcm1pbmF0aW9uX29u KGl0NjUwNSk7DQo+ICsJCQlpdDY1MDVfbGFuZV9wb3dlcl9vbihpdDY1MDUpOw0KPiArDQo+ICsJ CQkvKg0KPiArCQkJICogZm9yIHNvbWUgZG9uZ2xlIHdoaWNoIGlzc3VlIEhQRF9pcnENCj4gKwkJ CSAqIHdoZW4gc2luayBjb3VudCBjaGFuZ2UgZnJvbSAgMC0+MQ0KPiArCQkJICogaXQ2NTA1IG5v dCBhYmxlIHRvIHJlY2VpdmUgSFBEX0lSUQ0KPiArCQkJICogaWYgSFcgbmV2ZXIgZ28gaW50byB0 cmFpbmlnIGRvbmUNCj4gKwkJCSAqLw0KPiArDQo+ICsJCQlpZiAoaXQ2NTA1LT5icmFuY2hfZGV2 aWNlICYmIGl0NjUwNS0+c2lua19jb3VudCA9PSAwKQ0KPiArCQkJCXNjaGVkdWxlX3dvcmsoJml0 NjUwNS0+bGlua193b3Jrcyk7DQo+ICsNCj4gKwkJCWlmICghaXQ2NTA1X2dldF92aWRlb19zdGF0 dXMoaXQ2NTA1KSkNCj4gKwkJCQlpdDY1MDVfdmlkZW9fcmVzZXQoaXQ2NTA1KTsNCj4gKw0KPiAr CQkJaXQ2NTA1X2NhbGNfdmlkZW9faW5mbyhpdDY1MDUpOw0KPiArCQl9IGVsc2Ugew0KPiArCQkJ a2ZyZWUoaXQ2NTA1LT5lZGlkKTsNCj4gKwkJCWl0NjUwNS0+ZWRpZCA9IE5VTEw7DQo+ICsJCQlt ZW1zZXQoaXQ2NTA1LT5kcGNkLCAwLCBzaXplb2YoaXQ2NTA1LT5kcGNkKSk7DQo+ICsNCj4gKwkJ CWlmIChpdDY1MDUtPmhkY3BfZGVzaXJlZCkNCj4gKwkJCQlpdDY1MDVfc3RvcF9oZGNwKGl0NjUw NSk7DQo+ICsNCj4gKwkJCWl0NjUwNV92aWRlb19kaXNhYmxlKGl0NjUwNSk7DQo+ICsJCQlpdDY1 MDVfZGlzYWJsZV9hdWRpbyhpdDY1MDUpOw0KPiArCQkJaXQ2NTA1X3N0b3BfbGlua190cmFpbihp dDY1MDUpOw0KPiArCQkJaXQ2NTA1X2xhbmVfb2ZmKGl0NjUwNSk7DQo+ICsJCQlyZXR1cm47DQo+ ICsJCX0NCj4gKwl9DQo+ICsNCj4gKwlpZiAocmVnMDYgJiBJTlRfUkVDRUlWRV9IUERfSVJRKSB7 DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImhwZF9pcnEgaW50ZXJydXB0Iik7DQo+ ICsNCj4gKwkJaWYgKGl0NjUwNV9wcm9jZXNzX2hwZF9pcnEoaXQ2NTA1KSA8IDApDQo+ICsJCQlE Uk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJwcm9jZXNzIGhwZF9pcnEgZmFpbCEiKTsNCj4gKwl9 DQo+ICsNCj4gKwlpZiAocmVnMDYgJiBJTlRfU0NEVF9DSEFOR0UpIHsNCj4gKwkJZGF0YSA9IGl0 NjUwNV9nZXRfdmlkZW9fc3RhdHVzKGl0NjUwNSk7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgInZpZGVvIHN0YWJsZSBjaGFuZ2UgaW50ZXJydXB0LCAlcyIsDQo+ICsJCQkJICAgICBk YXRhID8gInN0YWJsZSIgOiAidW5zdGFibGUiKTsNCj4gKwkJaXQ2NTA1X2NhbGNfdmlkZW9faW5m byhpdDY1MDUpOw0KPiArDQo+ICsJCWlmIChkYXRhKQ0KPiArCQkJc2NoZWR1bGVfd29yaygmaXQ2 NTA1LT5saW5rX3dvcmtzKTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAocmVnMDYgJiBJTlRfSERDUF9E T05FKSB7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImhkY3AgZG9uZSBpbnRlcnJ1 cHQiKTsNCj4gKwkJaXQ2NTA1LT5oZGNwX3N0YXR1cyA9IEhEQ1BfQVVUSF9ET05FOw0KPiArCQlp dDY1MDVfc2hvd19oZGNwX2luZm8oaXQ2NTA1KTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAocmVnMDYg JiBJTlRfSERDUF9GQUlMKSB7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImhkY3Ag ZmFpbCBpbnRlcnJ1cHQiKTsNCj4gKwkJaXQ2NTA1LT5oZGNwX3N0YXR1cyA9IEhEQ1BfQVVUSF9J RExFOw0KPiArCQlpdDY1MDVfc2hvd19oZGNwX2luZm8oaXQ2NTA1KTsNCj4gKwkJaXQ2NTA1X3N0 YXJ0X2hkY3AoaXQ2NTA1KTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUw NV9jaGVja19yZWcwNyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsIHVuc2lnbmVkIGludCByZWcwNykN Cj4gK3sNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4g Kw0KPiArCWlmIChyZWcwNyAmIElOVF9BVVhfQ01EX0ZBSUwpDQo+ICsJCURSTV9ERVZfREVCVUdf RFJJVkVSKGRldiwgIkFVWCBQQyBSZXF1ZXN0IEZhaWwgSW50ZXJydXB0Iik7DQo+ICsNCj4gKwlp ZiAocmVnMDcgJiBJTlRfSERDUF9LU1ZfQ0hFQ0spIHsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklW RVIoZGV2LCAiSERDUCBldmVudCBJbnRlcnJ1cHQiKTsNCj4gKwkJc2NoZWR1bGVfd29yaygmaXQ2 NTA1LT5oZGNwX3dhaXRfa3N2X2xpc3QpOw0KPiArCX0NCj4gKw0KPiArCWlmIChyZWcwNyAmIElO VF9BVURJT19GSUZPX0VSUk9SKSB7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImF1 ZGlvIGZpZm8gZXJyb3IgSW50ZXJydXB0Iik7DQo+ICsNCj4gKwkJaWYgKGl0NjUwNV9hdWRpb19p bnB1dChpdDY1MDUpKQ0KPiArCQkJaXQ2NTA1X2VuYWJsZV9hdWRpbyhpdDY1MDUpOw0KPiArCX0N Cj4gKw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfY2hlY2tfcmVnMDgoc3RydWN0 IGl0NjUwNSAqaXQ2NTA1LCB1bnNpZ25lZCBpbnQgcmVnMDgpDQo+ICt7DQo+ICsJc3RydWN0IGRl dmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsNCj4gKwlpZiAocmVnMDggJiBJ TlRfTElOS19UUkFJTl9GQUlMKSB7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImxp bmsgdHJhaW5pbmcgZmFpbCBpbnRlcnJ1cHQiKTsNCj4gKwkJc2NoZWR1bGVfd29yaygmaXQ2NTA1 LT5saW5rX3dvcmtzKTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAocmVnMDggJiBJTlRfVklEX0ZJRk9f RVJST1IpIHsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAidmlkZW8gZmlmbyBvdmVy ZmxvdyBpbnRlcnJ1cHQiKTsNCj4gKwkJaXQ2NTA1LT5hdXRvX3RyYWluX3JldHJ5ID0gQVVUT19U UkFJTl9SRVRSWTsNCj4gKwkJZmx1c2hfd29yaygmaXQ2NTA1LT5saW5rX3dvcmtzKTsNCj4gKwkJ aXQ2NTA1X3N0b3BfaGRjcChpdDY1MDUpOw0KPiArCQlpdDY1MDVfdmlkZW9fcmVzZXQoaXQ2NTA1 KTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAocmVnMDggJiBJTlRfSU9fTEFUQ0hfRklGT19PVkVSRkxP Vykgew0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJJTyBsYXRjaCBmaWZvIG92ZXJm bG93IGludGVycnVwdCIpOw0KPiArCQlpdDY1MDUtPmF1dG9fdHJhaW5fcmV0cnkgPSBBVVRPX1RS QUlOX1JFVFJZOw0KPiArCQlmbHVzaF93b3JrKCZpdDY1MDUtPmxpbmtfd29ya3MpOw0KPiArCQlp dDY1MDVfc3RvcF9oZGNwKGl0NjUwNSk7DQo+ICsJCWl0NjUwNV92aWRlb19yZXNldChpdDY1MDUp Ow0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGljIGlycXJldHVybl90IGl0NjUwNV9pbnRfdGhy ZWFkZWRfaGFuZGxlcihpbnQgdW51c2VkLCB2b2lkICpkYXRhKQ0KPiArew0KPiArCXN0cnVjdCBp dDY1MDUgKml0NjUwNSA9IGRhdGE7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+ Y2xpZW50LT5kZXY7DQo+ICsJaW50IHJlZzA2LCByZWcwNywgcmVnMDg7DQo+ICsNCj4gKwltc2xl ZXAoMTAwKTsNCj4gKwltdXRleF9sb2NrKCZpdDY1MDUtPmV4dGNvbl9sb2NrKTsNCj4gKw0KPiAr CWlmIChpdDY1MDUtPmVuYWJsZV9kcnZfaG9sZCB8fCAhaXQ2NTA1LT5wb3dlcmVkKQ0KPiArCQln b3RvIHVubG9jazsNCj4gKw0KPiArCXJlZzA2ID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBJTlRfU1RB VFVTXzAxKTsNCj4gKwlyZWcwNyA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgSU5UX1NUQVRVU18wMik7 DQo+ICsJcmVnMDggPSBpdDY1MDVfcmVhZChpdDY1MDUsIElOVF9TVEFUVVNfMDMpOw0KPiArDQo+ ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5UX1NUQVRVU18wMSwgcmVnMDYpOw0KPiArCWl0NjUw NV93cml0ZShpdDY1MDUsIElOVF9TVEFUVVNfMDIsIHJlZzA3KTsNCj4gKwlpdDY1MDVfd3JpdGUo aXQ2NTA1LCBJTlRfU1RBVFVTXzAzLCByZWcwOCk7DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RS SVZFUihkZXYsICJyZWcwNiA9IDB4JTAyeCIsIHJlZzA2KTsNCj4gKwlEUk1fREVWX0RFQlVHX0RS SVZFUihkZXYsICJyZWcwNyA9IDB4JTAyeCIsIHJlZzA3KTsNCj4gKwlEUk1fREVWX0RFQlVHX0RS SVZFUihkZXYsICJyZWcwOCA9IDB4JTAyeCIsIHJlZzA4KTsNCj4gKwlpdDY1MDVfZGVidWdfcHJp bnQoaXQ2NTA1LCBSRUdfU1lTVEVNX1NUUywgIiIpOw0KPiArDQo+ICsJaWYgKHJlZzA2ICE9IDAp DQo+ICsJCWl0NjUwNV9jaGVja19yZWcwNihpdDY1MDUsIHJlZzA2KTsNCj4gKw0KPiArCWlmIChy ZWcwNyAhPSAwKQ0KPiArCQlpdDY1MDVfY2hlY2tfcmVnMDcoaXQ2NTA1LCByZWcwNyk7DQo+ICsN Cj4gKwlpZiAocmVnMDggIT0gMCkNCj4gKwkJaXQ2NTA1X2NoZWNrX3JlZzA4KGl0NjUwNSwgcmVn MDgpOw0KPiArDQo+ICt1bmxvY2s6DQo+ICsJbXV0ZXhfdW5sb2NrKCZpdDY1MDUtPmV4dGNvbl9s b2NrKTsNCj4gKw0KPiArCXJldHVybiBJUlFfSEFORExFRDsNCj4gK30NCj4gKw0KPiArc3RhdGlj IGludCBpdDY1MDVfcG93ZXJvbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJc3Ry dWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJc3RydWN0IGl0NjUw NV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9ICZpdDY1MDUtPnBkYXRhOw0KPiArCWludCBlcnI7DQo+ ICsNCj4gKwlpZiAoaXQ2NTA1LT5wb3dlcmVkKSB7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgIml0NjUwNSBhbHJlYWR5IHBvd2VyZWQgb24iKTsNCj4gKwkJcmV0dXJuIDA7DQo+ICsJ fQ0KPiArDQo+ICsJaWYgKHBkYXRhLT5wd3IxOCkgew0KPiArCQllcnIgPSByZWd1bGF0b3JfZW5h YmxlKHBkYXRhLT5wd3IxOCk7DQo+ICsJCWlmIChlcnIpIHsNCj4gKwkJCURSTV9ERVZfREVCVUdf RFJJVkVSKGRldiwgIkZhaWxlZCB0byBlbmFibGUgVkREMTg6ICVkIiwNCj4gKwkJCQkJICAgICBl cnIpOw0KPiArCQkJcmV0dXJuIGVycjsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCWlmIChwZGF0 YS0+b3ZkZCkgew0KPiArCQkvKiB0aW1lIGludGVydmFsIGJldHdlZW4gSVZERCBhbmQgT1ZERCBh dCBsZWFzdCBiZSAxbXMgKi8NCj4gKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOw0KPiArCQll cnIgPSByZWd1bGF0b3JfZW5hYmxlKHBkYXRhLT5vdmRkKTsNCj4gKwkJaWYgKGVycikgew0KPiAr CQkJcmVndWxhdG9yX2Rpc2FibGUocGRhdGEtPnB3cjE4KTsNCj4gKwkJCXJldHVybiBlcnI7DQo+ ICsJCX0NCj4gKwl9DQo+ICsJLyogdGltZSBpbnRlcnZhbCBiZXR3ZWVuIE9WREQgYW5kIFNZU1JT VE4gYXQgbGVhc3QgYmUgMTBtcyAqLw0KPiArCWlmIChwZGF0YS0+Z3Bpb2RfcmVzZXQpIHsNCj4g KwkJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7DQo+ICsJCWdwaW9kX3NldF92YWx1ZV9jYW5z bGVlcChwZGF0YS0+Z3Bpb2RfcmVzZXQsIDApOw0KPiArCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAw MCk7DQo+ICsJCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChwZGF0YS0+Z3Bpb2RfcmVzZXQsIDEp Ow0KPiArCQl1c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsNCj4gKwl9DQo+ICsNCj4gKwlpdDY1 MDVfcmVzZXRfbG9naWMoaXQ2NTA1KTsNCj4gKwlpdDY1MDVfaW50X21hc2tfZW5hYmxlKGl0NjUw NSk7DQo+ICsJaXQ2NTA1X2luaXQoaXQ2NTA1KTsNCj4gKwlpdDY1MDVfbGFuZV9vZmYoaXQ2NTA1 KTsNCj4gKw0KPiArCWl0NjUwNS0+cG93ZXJlZCA9IHRydWU7DQo+ICsNCj4gKwlyZXR1cm4gMDsN Cj4gK30NCj4gKw0KPiArc3RhdGljIGludCBpdDY1MDVfcG93ZXJvZmYoc3RydWN0IGl0NjUwNSAq aXQ2NTA1KQ0KPiArew0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ ZGV2Ow0KPiArCXN0cnVjdCBpdDY1MDVfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSAmaXQ2NTA1LT5w ZGF0YTsNCj4gKwlpbnQgZXJyOw0KPiArDQo+ICsJaWYgKCFpdDY1MDUtPnBvd2VyZWQpIHsNCj4g KwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAicG93ZXIgaGFkIGJlZW4gYWxyZWFkeSBvZmYi KTsNCj4gKwkJcmV0dXJuIDA7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKHBkYXRhLT5ncGlvZF9yZXNl dCkNCj4gKwkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHBkYXRhLT5ncGlvZF9yZXNldCwgMCk7 DQo+ICsNCj4gKwlpZiAocGRhdGEtPnB3cjE4KSB7DQo+ICsJCWVyciA9IHJlZ3VsYXRvcl9kaXNh YmxlKHBkYXRhLT5wd3IxOCk7DQo+ICsJCWlmIChlcnIpDQo+ICsJCQlyZXR1cm4gZXJyOw0KPiAr CX0NCj4gKw0KPiArCWlmIChwZGF0YS0+b3ZkZCkgew0KPiArCQllcnIgPSByZWd1bGF0b3JfZGlz YWJsZShwZGF0YS0+b3ZkZCk7DQo+ICsJCWlmIChlcnIpDQo+ICsJCQlyZXR1cm4gZXJyOw0KPiAr CX0NCj4gKw0KPiArCWl0NjUwNS0+cG93ZXJlZCA9IGZhbHNlOw0KPiArCWtmcmVlKGl0NjUwNS0+ ZWRpZCk7DQo+ICsJaXQ2NTA1LT5lZGlkID0gTlVMTDsNCj4gKwlpdDY1MDUtPnNpbmtfY291bnQg PSAwOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgc3Ry dWN0IGl0NjUwNSAqY29ubmVjdG9yX3RvX2l0NjUwNShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqYykN Cj4gK3sNCj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGMsIHN0cnVjdCBpdDY1MDUsIGNvbm5lY3Rv cik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X2dldF9tb2RlcyhzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yKQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9 IGNvbm5lY3Rvcl90b19pdDY1MDUoY29ubmVjdG9yKTsNCj4gKwlpbnQgZXJyLCBudW1fbW9kZXMg PSAwLCBpOw0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0K PiArDQo+ICsJaWYgKGl0NjUwNS0+ZWRpZCkNCj4gKwkJcmV0dXJuIGRybV9hZGRfZWRpZF9tb2Rl cyhjb25uZWN0b3IsIGl0NjUwNS0+ZWRpZCk7DQo+ICsNCj4gKwltdXRleF9sb2NrKCZpdDY1MDUt Pm1vZGVfbG9jayk7DQo+ICsJcmVpbml0X2NvbXBsZXRpb24oJml0NjUwNS0+d2FpdF9lZGlkX2Nv bXBsZXRlKTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsNCj4gKwkJaWYgKCFp dDY1MDVfZ2V0X3NpbmtfaHBkX3N0YXR1cyhpdDY1MDUpKQ0KPiArCQkJZ290byB1bmxvY2s7DQo+ ICsNCj4gKwkJaXQ2NTA1LT5lZGlkID0gZHJtX2RvX2dldF9lZGlkKCZpdDY1MDUtPmNvbm5lY3Rv ciwNCj4gKwkJCQkJICAgICAgIGl0NjUwNV9nZXRfZWRpZF9ibG9jaywgaXQ2NTA1KTsNCj4gKw0K PiArCQlpZiAoaXQ2NTA1LT5lZGlkKQ0KPiArCQkJYnJlYWs7DQo+ICsJfQ0KPiArCWlmICghaXQ2 NTA1LT5lZGlkKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHJlYWQgRURJ RCIpOw0KPiArCQludW1fbW9kZXMgPSAtRUlPOw0KPiArCQlnb3RvIHVubG9jazsNCj4gKwl9DQo+ ICsNCj4gKwllcnIgPSBkcm1fY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3Rv ciwgaXQ2NTA1LT5lZGlkKTsNCj4gKwlpZiAoZXJyKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2 LCAiRmFpbGVkIHRvIHVwZGF0ZSBFRElEIHByb3BlcnR5OiAlZCIsIGVycik7DQo+ICsJCW51bV9t b2RlcyA9IGVycjsNCj4gKwkJZ290byB1bmxvY2s7DQo+ICsJfQ0KPiArDQo+ICsJbnVtX21vZGVz ID0gZHJtX2FkZF9lZGlkX21vZGVzKGNvbm5lY3RvciwgaXQ2NTA1LT5lZGlkKTsNCj4gKw0KPiAr dW5sb2NrOg0KPiArCWNvbXBsZXRlKCZpdDY1MDUtPndhaXRfZWRpZF9jb21wbGV0ZSk7DQo+ICsJ bXV0ZXhfdW5sb2NrKCZpdDY1MDUtPm1vZGVfbG9jayk7DQo+ICsNCj4gKwlyZXR1cm4gbnVtX21v ZGVzOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVs cGVyX2Z1bmNzIGl0NjUwNV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0gew0KPiArCS5nZXRfbW9k ZXMgPSBpdDY1MDVfZ2V0X21vZGVzLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGVudW0gZHJtX2Nv bm5lY3Rvcl9zdGF0dXMgaXQ2NTA1X2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLA0KPiArCQkJCQkgICAgICAgYm9vbCBmb3JjZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1 ICppdDY1MDUgPSBjb25uZWN0b3JfdG9faXQ2NTA1KGNvbm5lY3Rvcik7DQo+ICsJc3RydWN0IGRl dmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJZW51bSBkcm1fY29ubmVjdG9y X3N0YXR1cyBzdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsNCj4gKw0KPiAr CURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIml0NjUwNS0+c2lua19jb3VudDolZCBwb3dlcmVk OiVkIiwNCj4gKwkJCSAgICAgaXQ2NTA1LT5zaW5rX2NvdW50LCBpdDY1MDUtPnBvd2VyZWQpOw0K PiArDQo+ICsJbXV0ZXhfbG9jaygmaXQ2NTA1LT5tb2RlX2xvY2spOw0KPiArDQo+ICsJaWYgKCFp dDY1MDUtPnBvd2VyZWQpDQo+ICsJCWdvdG8gdW5sb2NrOw0KPiArDQo+ICsJaWYgKGl0NjUwNS0+ ZW5hYmxlX2Rydl9ob2xkKSB7DQo+ICsJCXN0YXR1cyA9IGl0NjUwNV9nZXRfc2lua19ocGRfc3Rh dHVzKGl0NjUwNSkgPw0KPiArCQkJCQljb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCA6DQo+ICsJ CQkJCWNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOw0KPiArCQlnb3RvIHVubG9jazsNCj4g Kwl9DQo+ICsNCj4gKwlpZiAoaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSkgew0K PiArCQlpdDY1MDVfYXV4X29uKGl0NjUwNSk7DQo+ICsJCWl0NjUwNV9kcm1fZHBfbGlua19wcm9i ZSgmaXQ2NTA1LT5hdXgsICZpdDY1MDUtPmxpbmspOw0KPiArCQlpdDY1MDVfZHJtX2RwX2xpbmtf cG93ZXJfdXAoJml0NjUwNS0+YXV4LCAmaXQ2NTA1LT5saW5rKTsNCj4gKwkJaXQ2NTA1LT5hdXRv X3RyYWluX3JldHJ5ID0gQVVUT19UUkFJTl9SRVRSWTsNCj4gKw0KPiArCQlpZiAoaXQ2NTA1LT5k cGNkWzBdID09IDApIHsNCj4gKwkJCWl0NjUwNV9nZXRfZHBjZChpdDY1MDUsIERQX0RQQ0RfUkVW LCBpdDY1MDUtPmRwY2QsDQo+ICsJCQkJCUFSUkFZX1NJWkUoaXQ2NTA1LT5kcGNkKSk7DQo+ICsJ CQlpdDY1MDVfdmFyaWFibGVfY29uZmlnKGl0NjUwNSk7DQo+ICsJCQlpdDY1MDVfcGFyc2VfbGlu a19jYXBhYmlsaXRpZXMoaXQ2NTA1KTsNCj4gKwkJfQ0KPiArDQo+ICsJCWl0NjUwNS0+c2lua19j b3VudCA9IERQX0dFVF9TSU5LX0NPVU5UKGl0NjUwNV9kcGNkX3JlYWQoaXQ2NTA1LA0KPiArCQkJ CQkJICAgICAgIERQX1NJTktfQ09VTlQpKTsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2 LCAiaXQ2NTA1LT5zaW5rX2NvdW50OiVkIGJyYW5jaDolZCIsDQo+ICsJCQkJICAgICBpdDY1MDUt PnNpbmtfY291bnQsIGl0NjUwNS0+YnJhbmNoX2RldmljZSk7DQo+ICsNCj4gKwkJaWYgKGl0NjUw NS0+YnJhbmNoX2RldmljZSkgew0KPiArCQkJc3RhdHVzID0gKGl0NjUwNS0+c2lua19jb3VudCAh PSAwKSA/DQo+ICsJCQkJIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkIDoNCj4gKwkJCQkgY29u bmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7DQo+ICsJCX0gZWxzZSB7DQo+ICsJCQlzdGF0dXMg PSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsNCj4gKwkJfQ0KPiArCX0gZWxzZSB7DQo+ICsJ CWl0NjUwNS0+c2lua19jb3VudCA9IDA7DQo+ICsJCW1lbXNldChpdDY1MDUtPmRwY2QsIDAsIHNp emVvZihpdDY1MDUtPmRwY2QpKTsNCj4gKwl9DQo+ICsNCj4gK3VubG9jazoNCj4gKwlpZiAoaXQ2 NTA1LT5jb25uZWN0b3Jfc3RhdHVzICE9IHN0YXR1cykgew0KPiArCQlpdDY1MDUtPmNvbm5lY3Rv cl9zdGF0dXMgPSBzdGF0dXM7DQo+ICsJCWl0NjUwNV9wbHVnZ2VkX3N0YXR1c190b19jb2RlYyhp dDY1MDUpOw0KPiArCX0NCj4gKw0KPiArCW11dGV4X3VubG9jaygmaXQ2NTA1LT5tb2RlX2xvY2sp Ow0KPiArDQo+ICsJcmV0dXJuIHN0YXR1czsNCj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIGl0NjUwNV9jb25uZWN0b3JfZnVuY3MgPSB7DQo+ICsJ LmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsDQo+ ICsJLmRldGVjdCA9IGl0NjUwNV9kZXRlY3QsDQo+ICsJLmRlc3Ryb3kgPSBkcm1fY29ubmVjdG9y X2NsZWFudXAsDQo+ICsJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0 LA0KPiArCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVj dG9yX2R1cGxpY2F0ZV9zdGF0ZSwNCj4gKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRv bWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwNCj4gK307DQo+ICsNCj4gK3N0YXRp YyBpbnQgaXQ2NTA1X2V4dGNvbl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYs DQo+ICsJCQkJICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpDQo+ICt7DQo+ICsJc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1ID0gY29udGFpbmVyX29mKHNlbGYsIHN0cnVjdCBpdDY1MDUsIGV2 ZW50X25iKTsNCj4gKw0KPiArCXNjaGVkdWxlX3dvcmsoJml0NjUwNS0+ZXh0Y29uX3dxKTsNCj4g KwlyZXR1cm4gTk9USUZZX0RPTkU7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9l eHRjb25fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQo+ICt7DQo+ICsJc3RydWN0IGl0 NjUwNSAqaXQ2NTA1ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpdDY1MDUsIGV4dGNvbl93 cSk7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJ aW50IHN0YXRlID0gZXh0Y29uX2dldF9zdGF0ZShpdDY1MDUtPmV4dGNvbiwgRVhUQ09OX0RJU1Bf RFApOw0KPiArCXVuc2lnbmVkIGludCBwd3JvZmZyZXRyeSA9IDA7DQo+ICsNCj4gKwlpZiAoaXQ2 NTA1LT5lbmFibGVfZHJ2X2hvbGQpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCW11dGV4X2xvY2so Jml0NjUwNS0+ZXh0Y29uX2xvY2spOw0KPiArDQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2 LCAiRVhUQ09OX0RJU1BfRFAgPSAweCUwMngiLCBzdGF0ZSk7DQo+ICsJaWYgKHN0YXRlID4gMCkg ew0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJzdGFydCB0byBwb3dlciBvbiIpOw0K PiArCQltc2xlZXAoMTAwKTsNCj4gKwkJaXQ2NTA1X3Bvd2Vyb24oaXQ2NTA1KTsNCj4gKwl9IGVs c2Ugew0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJzdGFydCB0byBwb3dlciBvZmYi KTsNCj4gKwkJd2hpbGUgKGl0NjUwNV9wb3dlcm9mZihpdDY1MDUpICYmIHB3cm9mZnJldHJ5Kysg PCA1KSB7DQo+ICsJCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJwb3dlciBvZmYgZmFpbCAl ZCB0aW1lcyIsDQo+ICsJCQkJCSAgICAgcHdyb2ZmcmV0cnkpOw0KPiArCQl9DQo+ICsNCj4gKwkJ ZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50KGl0NjUwNS0+Y29ubmVjdG9yLmRldik7DQo+ICsJCW1l bXNldChpdDY1MDUtPmRwY2QsIDAsIHNpemVvZihpdDY1MDUtPmRwY2QpKTsNCj4gKwkJRFJNX0RF Vl9ERUJVR19EUklWRVIoZGV2LCAicG93ZXIgb2ZmIGl0NjUwNSBzdWNjZXNzISIpOw0KPiArCX0N Cj4gKw0KPiArCW11dGV4X3VubG9jaygmaXQ2NTA1LT5leHRjb25fbG9jayk7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBpbnQgaXQ2NTA1X3VzZV9ub3RpZmllcl9tb2R1bGUoc3RydWN0IGl0NjUwNSAq aXQ2NTA1KQ0KPiArew0KPiArCWludCByZXQ7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0 NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsNCj4gKwlpdDY1MDUtPmV2ZW50X25iLm5vdGlmaWVyX2Nh bGwgPSBpdDY1MDVfZXh0Y29uX25vdGlmaWVyOw0KPiArCUlOSVRfV09SSygmaXQ2NTA1LT5leHRj b25fd3EsIGl0NjUwNV9leHRjb25fd29yayk7DQo+ICsJcmV0ID0gZGV2bV9leHRjb25fcmVnaXN0 ZXJfbm90aWZpZXIoJml0NjUwNS0+Y2xpZW50LT5kZXYsDQo+ICsJCQkJCSAgICBpdDY1MDUtPmV4 dGNvbiwgRVhUQ09OX0RJU1BfRFAsDQo+ICsJCQkJCSAgICAmaXQ2NTA1LT5ldmVudF9uYik7DQo+ ICsJaWYgKHJldCkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgImZhaWxlZCB0byByZWdpc3Rl ciBub3RpZmllciBmb3IgRFAiKTsNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ICsNCj4gKwlz Y2hlZHVsZV93b3JrKCZpdDY1MDUtPmV4dGNvbl93cSk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4g K30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X3JlbW92ZV9ub3RpZmllcl9tb2R1bGUoc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWlmIChpdDY1MDUtPmV4dGNvbikgew0KPiAr CQlkZXZtX2V4dGNvbl91bnJlZ2lzdGVyX25vdGlmaWVyKCZpdDY1MDUtPmNsaWVudC0+ZGV2LA0K PiArCQkJCQkJaXQ2NTA1LT5leHRjb24sCUVYVENPTl9ESVNQX0RQLA0KPiArCQkJCQkJJml0NjUw NS0+ZXZlbnRfbmIpOw0KPiArDQo+ICsJCWZsdXNoX3dvcmsoJml0NjUwNS0+ZXh0Y29uX3dxKTsN Cj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIF9fbWF5YmVfdW51c2VkIGl0NjUwNV9k ZWxheWVkX2F1ZGlvKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCj4gK3sNCj4gKwlzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl0NjUwNSwNCj4gKwkJ CQkJICAgICBkZWxheWVkX2F1ZGlvLndvcmspOw0KPiArDQo+ICsJRFJNX0RFVl9ERUJVR19EUklW RVIoJml0NjUwNS0+Y2xpZW50LT5kZXYsICJzdGFydCIpOw0KPiArDQo+ICsJaWYgKCFpdDY1MDUt PnBvd2VyZWQpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCWlmICghaXQ2NTA1LT5lbmFibGVfZHJ2 X2hvbGQpDQo+ICsJCWl0NjUwNV9lbmFibGVfYXVkaW8oaXQ2NTA1KTsNCj4gK30NCj4gKw0KPiAr c3RhdGljIGludCBfX21heWJlX3VudXNlZCBpdDY1MDVfYXVkaW9fc2V0dXBfaHdfcGFyYW1zKHN0 cnVjdCBpdDY1MDUgKml0NjUwNSwNCj4gKwkJCQkJc3RydWN0IGhkbWlfY29kZWNfcGFyYW1zICpw YXJhbXMpDQo+ICt7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5k ZXY7DQo+ICsJaW50IGkgPSAwOw0KPiArDQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAi JXMgJWQgSHosICVkIGJpdCwgJWQgY2hhbm5lbHNcbiIsIF9fZnVuY19fLA0KPiArCQkJICAgICBw YXJhbXMtPnNhbXBsZV9yYXRlLCBwYXJhbXMtPnNhbXBsZV93aWR0aCwNCj4gKwkJCSAgICAgcGFy YW1zLT5jZWEuY2hhbm5lbHMpOw0KPiArDQo+ICsJaWYgKCFpdDY1MDUtPmJyaWRnZS5lbmNvZGVy KQ0KPiArCQlyZXR1cm4gLUVOT0RFVjsNCj4gKw0KPiArCWlmIChwYXJhbXMtPmNlYS5jaGFubmVs cyA8PSAxIHx8IHBhcmFtcy0+Y2VhLmNoYW5uZWxzID4gOCkgew0KPiArCQlEUk1fREVWX0RFQlVH X0RSSVZFUihkZXYsICJjaGFubmVsIG51bWJlcjogJWQgbm90IHN1cHBvcnQiLA0KPiArCQkJCSAg ICAgaXQ2NTA1LT5hdWRpby5jaGFubmVsX2NvdW50KTsNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ ICsJfQ0KPiArDQo+ICsJaXQ2NTA1LT5hdWRpby5jaGFubmVsX2NvdW50ID0gcGFyYW1zLT5jZWEu Y2hhbm5lbHM7DQo+ICsNCj4gKwl3aGlsZSAoaSA8IEFSUkFZX1NJWkUoYXVkaW9fc2FtcGxlX3Jh dGVfbWFwKSAmJg0KPiArCSAgICAgICBwYXJhbXMtPnNhbXBsZV9yYXRlICE9DQo+ICsJCSAgICAg ICBhdWRpb19zYW1wbGVfcmF0ZV9tYXBbaV0uc2FtcGxlX3JhdGVfdmFsdWUpIHsNCj4gKwkJaSsr Ow0KPiArCX0NCj4gKwlpZiAoaSA9PSBBUlJBWV9TSVpFKGF1ZGlvX3NhbXBsZV9yYXRlX21hcCkp IHsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAic2FtcGxlIHJhdGU6ICVkIEh6IG5v dCBzdXBwb3J0IiwNCj4gKwkJCQkgICAgIHBhcmFtcy0+c2FtcGxlX3JhdGUpOw0KPiArCQlyZXR1 cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsJaXQ2NTA1LT5hdWRpby5zYW1wbGVfcmF0ZSA9IGF1ZGlv X3NhbXBsZV9yYXRlX21hcFtpXS5yYXRlOw0KPiArDQo+ICsJc3dpdGNoIChwYXJhbXMtPnNhbXBs ZV93aWR0aCkgew0KPiArCWNhc2UgMTY6DQo+ICsJCWl0NjUwNS0+YXVkaW8ud29yZF9sZW5ndGgg PSBXT1JEX0xFTkdUSF8xNkJJVDsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSAxODoNCj4gKwkJaXQ2 NTA1LT5hdWRpby53b3JkX2xlbmd0aCA9IFdPUkRfTEVOR1RIXzE4QklUOw0KPiArCQlicmVhazsN Cj4gKwljYXNlIDIwOg0KPiArCQlpdDY1MDUtPmF1ZGlvLndvcmRfbGVuZ3RoID0gV09SRF9MRU5H VEhfMjBCSVQ7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgMjQ6DQo+ICsJY2FzZSAzMjoNCj4gKwkJ aXQ2NTA1LT5hdWRpby53b3JkX2xlbmd0aCA9IFdPUkRfTEVOR1RIXzI0QklUOw0KPiArCQlicmVh azsNCj4gKwlkZWZhdWx0Og0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJ3b3JkbGVu Z3RoOiAlZCBiaXQgbm90IHN1cHBvcnQiLA0KPiArCQkJCSAgICAgcGFyYW1zLT5zYW1wbGVfd2lk dGgpOw0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4g K30NCj4gKw0KPiArc3RhdGljIHZvaWQgX19tYXliZV91bnVzZWQgaXQ2NTA1X2F1ZGlvX3NodXRk b3duKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2 NTA1ICppdDY1MDUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gKw0KPiArCWlmIChpdDY1MDUt PnBvd2VyZWQpDQo+ICsJCWl0NjUwNV9kaXNhYmxlX2F1ZGlvKGl0NjUwNSk7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgaXQ2NTA1X2F1ZGlvX2hvb2tfcGx1Z2dlZF9j YihzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+ICsJCQkJCQkgICAgICAgdm9pZCAqZGF0YSwNCj4gKwkJ CQkJCSAgICAgICBoZG1pX2NvZGVjX3BsdWdnZWRfY2IgZm4sDQo+ICsJCQkJCQkgICAgICAgc3Ry dWN0IGRldmljZSAqY29kZWNfZGV2KQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9 IGRhdGE7DQo+ICsNCj4gKwlpdDY1MDUtPnBsdWdnZWRfY2IgPSBmbjsNCj4gKwlpdDY1MDUtPmNv ZGVjX2RldiA9IGNvZGVjX2RldjsNCj4gKwlpdDY1MDVfcGx1Z2dlZF9zdGF0dXNfdG9fY29kZWMo aXQ2NTA1KTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5l IHN0cnVjdCBpdDY1MDUgKmJyaWRnZV90b19pdDY1MDUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRn ZSkNCj4gK3sNCj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGJyaWRnZSwgc3RydWN0IGl0NjUwNSwg YnJpZGdlKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2JyaWRnZV9tb2RlX3Nl dChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLA0KPiArCQkJCSAgIGNvbnN0IHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlLA0KPiArCQkJCSAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICphZGp1c3RlZF9tb2RlKQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGJy aWRnZV90b19pdDY1MDUoYnJpZGdlKTsNCj4gKwlzdHJ1Y3QgaGRtaV9hdmlfaW5mb2ZyYW1lIGZy YW1lOw0KPiArCWludCBlcnI7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xp ZW50LT5kZXY7DQo+ICsNCj4gKwlpZiAoV0FSTl9PTighaXQ2NTA1LT5wb3dlcmVkKSkNCj4gKwkJ cmV0dXJuOw0KPiArDQo+ICsJbXV0ZXhfbG9jaygmaXQ2NTA1LT5tb2RlX2xvY2spOw0KPiArDQo+ ICsJZXJyID0gZHJtX2hkbWlfYXZpX2luZm9mcmFtZV9mcm9tX2Rpc3BsYXlfbW9kZSgmZnJhbWUs DQo+ICsJCQkJCQkgICAgICAgJml0NjUwNS0+Y29ubmVjdG9yLA0KPiArCQkJCQkJICAgICAgIGFk anVzdGVkX21vZGUpOw0KPiArCWlmIChlcnIpIHsNCj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJG YWlsZWQgdG8gc2V0dXAgQVZJIGluZm9mcmFtZTogJWQiLCBlcnIpOw0KPiArCQlnb3RvIHVubG9j azsNCj4gKwl9DQo+ICsNCj4gKwlpdDY1MDVfdXBkYXRlX3ZpZGVvX3BhcmFtZXRlcihpdDY1MDUs IGFkanVzdGVkX21vZGUpOw0KPiArDQo+ICsJZXJyID0gaXQ2NTA1X3NlbmRfdmlkZW9faW5mb2Zy YW1lKGl0NjUwNSwgJmZyYW1lKTsNCj4gKwlpZiAoZXJyKQ0KPiArCQlEUk1fREVWX0VSUk9SKGRl diwgIkZhaWxlZCB0byBzZW5kIEFWSSBpbmZvZnJhbWU6ICVkIiwgZXJyKTsNCj4gKw0KPiArdW5s b2NrOg0KPiArCW11dGV4X3VubG9jaygmaXQ2NTA1LT5tb2RlX2xvY2spOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgaW50IGl0NjUwNV9icmlkZ2VfYXR0YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlk Z2UsDQo+ICsJCQkJZW51bSBkcm1fYnJpZGdlX2F0dGFjaF9mbGFncyBmbGFncykNCj4gK3sNCj4g KwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBicmlkZ2VfdG9faXQ2NTA1KGJyaWRnZSk7DQo+ICsJ c3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJaW50IGVycjsN Cj4gKw0KPiArCWlmIChmbGFncyAmIERSTV9CUklER0VfQVRUQUNIX05PX0NPTk5FQ1RPUikgew0K PiArCQlEUk1fRVJST1IoIkZpeCBicmlkZ2UgZHJpdmVyIHRvIG1ha2UgY29ubmVjdG9yIG9wdGlv bmFsISIpOw0KPiArCQlyZXR1cm4gMDsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoIWJyaWRnZS0+ZW5j b2Rlcikgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIlBhcmVudCBlbmNvZGVyIG9iamVjdCBu b3QgZm91bmQiKTsNCj4gKwkJcmV0dXJuIC1FTk9ERVY7DQo+ICsJfQ0KPiArDQo+ICsJZXJyID0g ZHJtX2Nvbm5lY3Rvcl9pbml0KGJyaWRnZS0+ZGV2LCAmaXQ2NTA1LT5jb25uZWN0b3IsDQo+ICsJ CQkJICZpdDY1MDVfY29ubmVjdG9yX2Z1bmNzLA0KPiArCQkJCSBEUk1fTU9ERV9DT05ORUNUT1Jf RGlzcGxheVBvcnQpOw0KPiArCWlmIChlcnIgPCAwKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2 LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgY29ubmVjdG9yOiAlZCIsIGVycik7DQo+ICsJCXJldHVy biBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZpdDY1MDUt PmNvbm5lY3RvciwNCj4gKwkJCQkgJml0NjUwNV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsNCj4g Kw0KPiArCWl0NjUwNS0+Y29ubmVjdG9yLnBvbGxlZCA9IERSTV9DT05ORUNUT1JfUE9MTF9IUEQ7 DQo+ICsNCj4gKwllcnIgPSBkcm1fY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZpdDY1MDUtPmNv bm5lY3RvciwgYnJpZGdlLT5lbmNvZGVyKTsNCj4gKwlpZiAoZXJyIDwgMCkgew0KPiArCQlEUk1f REVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBsaW5rIHVwIGNvbm5lY3RvciB0byBlbmNvZGVyOiAl ZCIsDQo+ICsJCQkgICAgICBlcnIpOw0KPiArCQlnb3RvIGNsZWFudXBfY29ubmVjdG9yOw0KPiAr CX0NCj4gKw0KPiArCWVyciA9IGRybV9jb25uZWN0b3JfcmVnaXN0ZXIoJml0NjUwNS0+Y29ubmVj dG9yKTsNCj4gKwlpZiAoZXJyIDwgMCkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxl ZCB0byByZWdpc3RlciBjb25uZWN0b3I6ICVkIiwgZXJyKTsNCj4gKwkJZ290byBjbGVhbnVwX2Nv bm5lY3RvcjsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoaXQ2NTA1LT5leHRjb24pIHsNCj4gKwkJZXJy ID0gaXQ2NTA1X3VzZV9ub3RpZmllcl9tb2R1bGUoaXQ2NTA1KTsNCj4gKwkJaWYgKGVyciA8IDAp IHsNCj4gKwkJCWRybV9jb25uZWN0b3JfdW5yZWdpc3RlcigmaXQ2NTA1LT5jb25uZWN0b3IpOw0K PiArCQkJZ290byBjbGVhbnVwX2Nvbm5lY3RvcjsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCXJl dHVybiAwOw0KPiArDQo+ICtjbGVhbnVwX2Nvbm5lY3RvcjoNCj4gKwlkcm1fY29ubmVjdG9yX2Ns ZWFudXAoJml0NjUwNS0+Y29ubmVjdG9yKTsNCj4gKwlyZXR1cm4gZXJyOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgdm9pZCBpdDY1MDVfYnJpZGdlX2RldGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJp ZGdlKQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGJyaWRnZV90b19pdDY1MDUo YnJpZGdlKTsNCj4gKw0KPiArCWZsdXNoX3dvcmsoJml0NjUwNS0+bGlua193b3Jrcyk7DQo+ICsJ aXQ2NTA1X3JlbW92ZV9ub3RpZmllcl9tb2R1bGUoaXQ2NTA1KTsNCj4gKwlkcm1fY29ubmVjdG9y X3VucmVnaXN0ZXIoJml0NjUwNS0+Y29ubmVjdG9yKTsNCj4gKwlkcm1fY29ubmVjdG9yX2NsZWFu dXAoJml0NjUwNS0+Y29ubmVjdG9yKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGVudW0gZHJtX21v ZGVfc3RhdHVzDQo+ICtpdDY1MDVfYnJpZGdlX21vZGVfdmFsaWQoc3RydWN0IGRybV9icmlkZ2Ug KmJyaWRnZSwNCj4gKwkJCSBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyAqaW5mbywNCj4g KwkJCSBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkNCj4gK3sNCj4gKwlzdHJ1 Y3QgaXQ2NTA1ICppdDY1MDUgPSBicmlkZ2VfdG9faXQ2NTA1KGJyaWRnZSk7DQo+ICsNCj4gKwlp ZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkNCj4gKwkJcmV0dXJuIE1P REVfTk9fSU5URVJMQUNFOw0KPiArDQo+ICsJaWYgKG1vZGUtPmNsb2NrID4gRFBJX1BJWEVMX0NM S19NQVgpDQo+ICsJCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7DQo+ICsNCj4gKwlpdDY1MDUtPnZp ZGVvX2luZm8uY2xvY2sgPSBtb2RlLT5jbG9jazsNCj4gKw0KPiArCXJldHVybiBNT0RFX09LOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfYnJpZGdlX2VuYWJsZShzdHJ1Y3QgZHJt X2JyaWRnZSAqYnJpZGdlKQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGJyaWRn ZV90b19pdDY1MDUoYnJpZGdlKTsNCj4gKw0KPiArCWl0NjUwNV9pbnRfbWFza19lbmFibGUoaXQ2 NTA1KTsNCj4gKwlpdDY1MDVfdmlkZW9fcmVzZXQoaXQ2NTA1KTsNCj4gK30NCj4gKw0KPiArc3Rh dGljIHZvaWQgaXQ2NTA1X2JyaWRnZV9kaXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2Up DQo+ICt7DQo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gYnJpZGdlX3RvX2l0NjUwNShicmlk Z2UpOw0KPiArDQo+ICsJaWYgKGl0NjUwNS0+cG93ZXJlZCkNCj4gKwkJaXQ2NTA1X3ZpZGVvX2Rp c2FibGUoaXQ2NTA1KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9z dGF0dXMNCj4gK2l0NjUwNV9icmlkZ2VfZGV0ZWN0KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2Up DQo+ICt7DQo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gYnJpZGdlX3RvX2l0NjUwNShicmlk Z2UpOw0KPiArDQo+ICsJcmV0dXJuIGl0NjUwNV9kZXRlY3QoJml0NjUwNS0+Y29ubmVjdG9yLCAw KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHN0cnVjdCBlZGlkICppdDY1MDVfYnJpZGdlX2dldF9l ZGlkKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsDQo+ICsJCQkJCSAgIHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IpDQo+ICt7DQo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gYnJp ZGdlX3RvX2l0NjUwNShicmlkZ2UpOw0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUt PmNsaWVudC0+ZGV2Ow0KPiArCXN0cnVjdCBlZGlkICplZGlkOw0KPiArDQo+ICsJZWRpZCA9IGRy bV9kb19nZXRfZWRpZCgmaXQ2NTA1LT5jb25uZWN0b3IsIGl0NjUwNV9nZXRfZWRpZF9ibG9jaywN Cj4gKwkJCSAgICAgICBpdDY1MDUpOw0KPiArDQo+ICsJaWYgKCFlZGlkKSB7DQo+ICsJCURSTV9E RVZfREVCVUdfRFJJVkVSKGRldiwgImZhaWxlZCB0byBnZXQgZWRpZCEiKTsNCj4gKwkJcmV0dXJu IE5VTEw7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIGVkaWQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgZHJtX2JyaWRnZV9mdW5jcyBpdDY1MDVfYnJpZGdlX2Z1bmNzID0gew0K PiArCS5hdHRhY2ggPSBpdDY1MDVfYnJpZGdlX2F0dGFjaCwNCj4gKwkuZGV0YWNoID0gaXQ2NTA1 X2JyaWRnZV9kZXRhY2gsDQo+ICsJLm1vZGVfdmFsaWQgPSBpdDY1MDVfYnJpZGdlX21vZGVfdmFs aWQsDQo+ICsJLm1vZGVfc2V0ID0gaXQ2NTA1X2JyaWRnZV9tb2RlX3NldCwNCj4gKwkuZW5hYmxl ID0gaXQ2NTA1X2JyaWRnZV9lbmFibGUsDQo+ICsJLmRpc2FibGUgPSBpdDY1MDVfYnJpZGdlX2Rp c2FibGUsDQo+ICsJLmRldGVjdCA9IGl0NjUwNV9icmlkZ2VfZGV0ZWN0LA0KPiArCS5nZXRfZWRp ZCA9IGl0NjUwNV9icmlkZ2VfZ2V0X2VkaWQsDQo+ICt9Ow0KPiArDQo+ICsjaWZkZWYgQ09ORklH X1BNX1NMRUVQDQo+ICsNCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X2JyaWRnZV9yZXN1bWUoc3RydWN0 IGRldmljZSAqZGV2KQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGRldl9nZXRf ZHJ2ZGF0YShkZXYpOw0KPiArDQo+ICsJcmV0dXJuIGl0NjUwNV9wb3dlcm9uKGl0NjUwNSk7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X2JyaWRnZV9zdXNwZW5kKHN0cnVjdCBkZXZp Y2UgKmRldikNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBkZXZfZ2V0X2RydmRh dGEoZGV2KTsNCj4gKw0KPiArCXJldHVybiBpdDY1MDVfcG93ZXJvZmYoaXQ2NTA1KTsNCj4gK30N Cj4gKw0KPiArc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKGl0NjUwNV9icmlkZ2VfcG1fb3BzLCBp dDY1MDVfYnJpZGdlX3N1c3BlbmQsDQo+ICsJCQkgaXQ2NTA1X2JyaWRnZV9yZXN1bWUpOw0KPiAr DQo+ICsjZW5kaWYNCj4gKw0KPiArc3RhdGljIGludCBpdDY1MDVfaW5pdF9wZGF0YShzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJc3RydWN0IGl0NjUwNV9wbGF0Zm9ybV9kYXRhICpw ZGF0YSA9ICZpdDY1MDUtPnBkYXRhOw0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUt PmNsaWVudC0+ZGV2Ow0KPiArDQo+ICsJLyogMS4wViBkaWdpdGFsIGNvcmUgcG93ZXIgcmVndWxh dG9yICAqLw0KPiArCXBkYXRhLT5wd3IxOCA9IGRldm1fcmVndWxhdG9yX2dldChkZXYsICJwd3Ix OCIpOw0KPiArCWlmIChJU19FUlIocGRhdGEtPnB3cjE4KSkgew0KPiArCQlEUk1fREVWX0VSUk9S KGRldiwgInB3cjE4IHJlZ3VsYXRvciBub3QgZm91bmQiKTsNCj4gKwkJcmV0dXJuIFBUUl9FUlIo cGRhdGEtPnB3cjE4KTsNCj4gKwl9DQo+ICsNCj4gKwlwZGF0YS0+b3ZkZCA9IGRldm1fcmVndWxh dG9yX2dldChkZXYsICJvdmRkIik7DQo+ICsJaWYgKElTX0VSUihwZGF0YS0+b3ZkZCkpIHsNCj4g KwkJRFJNX0RFVl9FUlJPUihkZXYsICJvdmRkIHJlZ3VsYXRvciBub3QgZm91bmQiKTsNCj4gKwkJ cmV0dXJuIFBUUl9FUlIocGRhdGEtPm92ZGQpOw0KPiArCX0NCj4gKw0KPiArCXBkYXRhLT5ncGlv ZF9yZXNldCA9IGRldm1fZ3Bpb2RfZ2V0KGRldiwgInJlc2V0IiwgR1BJT0RfT1VUX0hJR0gpOw0K PiArCWlmIChJU19FUlIocGRhdGEtPmdwaW9kX3Jlc2V0KSkgew0KPiArCQlEUk1fREVWX0VSUk9S KGRldiwgImdwaW9kX3Jlc2V0IGdwaW8gbm90IGZvdW5kIik7DQo+ICsJCXJldHVybiBQVFJfRVJS KHBkYXRhLT5ncGlvZF9yZXNldCk7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9wYXJzZV9kdChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUp DQo+ICt7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ ICsJdTMyICphZmVfc2V0dGluZyA9ICZpdDY1MDUtPmFmZV9zZXR0aW5nOw0KPiArDQo+ICsJaXQ2 NTA1LT5sYW5lX3N3YXBfZGlzYWJsZWQgPQ0KPiArCQlkZXZpY2VfcHJvcGVydHlfcmVhZF9ib29s KGRldiwgIm5vLWxhbmVzd2FwIik7DQo+ICsNCj4gKwlpZiAoaXQ2NTA1LT5sYW5lX3N3YXBfZGlz YWJsZWQpDQo+ICsJCWl0NjUwNS0+bGFuZV9zd2FwID0gZmFsc2U7DQo+ICsNCj4gKwlpZiAoZGV2 aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgImFmZS1zZXR0aW5nIiwgYWZlX3NldHRpbmcpID09 IDApIHsNCj4gKwkJaWYgKCphZmVfc2V0dGluZyA+PSBBUlJBWV9TSVpFKGFmZV9zZXR0aW5nX3Rh YmxlKSkgew0KPiArCQkJRFJNX0RFVl9FUlJPUihkZXYsICJhZmUgc2V0dGluZyBlcnJvciwgdXNl IGRlZmF1bHQiKTsNCj4gKwkJCSphZmVfc2V0dGluZyA9IDA7DQo+ICsJCX0NCj4gKwl9IGVsc2Ug ew0KPiArCQkqYWZlX3NldHRpbmcgPSAwOw0KPiArCX0NCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZF UihkZXYsICJ1c2luZyBhZmVfc2V0dGluZzogJWQiLCAqYWZlX3NldHRpbmcpOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgc3NpemVfdCBwcmludF90aW1pbmdfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYs DQo+ICsJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpDQo+ICt7 DQo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+ICsJ c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKnZpZCA9ICZpdDY1MDUtPnZpZGVvX2luZm87DQo+ICsJ Y2hhciAqc3RyID0gYnVmLCAqZW5kID0gYnVmICsgUEFHRV9TSVpFOw0KPiArDQo+ICsJaXQ2NTA1 X2NhbGNfdmlkZW9faW5mbyhpdDY1MDUpOw0KPiArCXN0ciArPSBzY25wcmludGYoc3RyLCBlbmQg LSBzdHIsICItLS12aWRlbyB0aW1pbmctLS1cbiIpOw0KPiArCXN0ciArPSBzY25wcmludGYoc3Ry LCBlbmQgLSBzdHIsICJQQ0xLOiVkLiUwM2RNSHpcbiIsDQo+ICsJCQkgdmlkLT5jbG9jayAvIDEw MDAsIHZpZC0+Y2xvY2sgJSAxMDAwKTsNCj4gKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0g c3RyLCAiSFRvdGFsOiVkXG4iLCB2aWQtPmh0b3RhbCk7DQo+ICsJc3RyICs9IHNjbnByaW50Zihz dHIsIGVuZCAtIHN0ciwgIkhBY3RpdmU6JWRcbiIsIHZpZC0+aGRpc3BsYXkpOw0KPiArCXN0ciAr PSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIsICJIRnJvbnRQb3JjaDolZFxuIiwNCj4gKwkJCSB2 aWQtPmhzeW5jX3N0YXJ0IC0gdmlkLT5oZGlzcGxheSk7DQo+ICsJc3RyICs9IHNjbnByaW50Zihz dHIsIGVuZCAtIHN0ciwgIkhTeW5jV2lkdGg6JWRcbiIsDQo+ICsJCQkgdmlkLT5oc3luY19lbmQg LSB2aWQtPmhzeW5jX3N0YXJ0KTsNCj4gKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3Ry LCAiSEJhY2tQb3JjaDolZFxuIiwNCj4gKwkJCSB2aWQtPmh0b3RhbCAtIHZpZC0+aHN5bmNfZW5k KTsNCj4gKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAiVlRvdGFsOiVkXG4iLCB2 aWQtPnZ0b3RhbCk7DQo+ICsJc3RyICs9IHNjbnByaW50ZihzdHIsIGVuZCAtIHN0ciwgIlZBY3Rp dmU6JWRcbiIsIHZpZC0+dmRpc3BsYXkpOw0KPiArCXN0ciArPSBzY25wcmludGYoc3RyLCBlbmQg LSBzdHIsICJWRnJvbnRQb3JjaDolZFxuIiwNCj4gKwkJCSB2aWQtPnZzeW5jX3N0YXJ0IC0gdmlk LT52ZGlzcGxheSk7DQo+ICsJc3RyICs9IHNjbnByaW50ZihzdHIsIGVuZCAtIHN0ciwgIlZTeW5j V2lkdGg6JWRcbiIsDQo+ICsJCQkgdmlkLT52c3luY19lbmQgLSB2aWQtPnZzeW5jX3N0YXJ0KTsN Cj4gKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAiVkJhY2tQb3JjaDolZFxuIiwN Cj4gKwkJCSB2aWQtPnZ0b3RhbCAtIHZpZC0+dnN5bmNfZW5kKTsNCj4gKw0KPiArCXJldHVybiBz dHIgLSBidWY7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzc2l6ZV90IGZvcmNlX3B3cm9ub2ZmX3N0 b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwNCj4gKwkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1 dGUgKmF0dHIsDQo+ICsJCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQ0KPiAr ew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiAr CWludCBwd3I7DQo+ICsNCj4gKwlpZiAoa3N0cnRvaW50KGJ1ZiwgMTAsICZwd3IpIDwgMCkNCj4g KwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwlpZiAocHdyKQ0KPiArCQlpdDY1MDVfcG93ZXJv bihpdDY1MDUpOw0KPiArCWVsc2UNCj4gKwkJaXQ2NTA1X3Bvd2Vyb2ZmKGl0NjUwNSk7DQo+ICsN Cj4gKwlyZXR1cm4gY291bnQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzc2l6ZV90IGVuYWJsZV9k cnZfaG9sZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwNCj4gKwkJCQkgICAgc3RydWN0IGRldmlj ZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1ICpp dDY1MDUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gKw0KPiArCXJldHVybiBzY25wcmludGYo YnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgaXQ2NTA1LT5lbmFibGVfZHJ2X2hvbGQpOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgc3NpemVfdCBlbmFibGVfZHJ2X2hvbGRfc3RvcmUoc3RydWN0IGRldmlj ZSAqZGV2LA0KPiArCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsDQo+ICsJ CQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkNCj4gK3sNCj4gKwlzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gKwl1bnNpZ25lZCBpbnQg ZHJ2X2hvbGQ7DQo+ICsNCj4gKwlpZiAoa3N0cnRvaW50KGJ1ZiwgMTAsICZkcnZfaG9sZCkgPCAw KQ0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArCWl0NjUwNS0+ZW5hYmxlX2Rydl9ob2xk ID0gISFkcnZfaG9sZDsNCj4gKw0KPiArCWlmIChpdDY1MDUtPmVuYWJsZV9kcnZfaG9sZCkgew0K PiArCQlpdDY1MDVfaW50X21hc2tfZGlzYWJsZShpdDY1MDUpOw0KPiArCX0gZWxzZSB7DQo+ICsJ CWl0NjUwNV9jbGVhcl9pbnQoaXQ2NTA1KTsNCj4gKwkJaXQ2NTA1X2ludF9tYXNrX2VuYWJsZShp dDY1MDUpOw0KPiArDQo+ICsJCWlmIChpdDY1MDUtPnBvd2VyZWQpIHsNCj4gKwkJCWl0NjUwNS0+ Y29ubmVjdG9yX3N0YXR1cyA9DQo+ICsJCQkJCWl0NjUwNV9nZXRfc2lua19ocGRfc3RhdHVzKGl0 NjUwNSkgPw0KPiArCQkJCQljb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCA6DQo+ICsJCQkJCWNv bm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOw0KPiArCQl9IGVsc2Ugew0KPiArCQkJaXQ2NTA1 LT5jb25uZWN0b3Jfc3RhdHVzID0NCj4gKwkJCQkJY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0 ZWQ7DQo+ICsJCX0NCj4gKwl9DQo+ICsJcmV0dXJuIGNvdW50Ow0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgREVWSUNFX0FUVFJfUk8ocHJpbnRfdGltaW5nKTsNCj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9X Tyhmb3JjZV9wd3Jvbm9mZik7DQo+ICtzdGF0aWMgREVWSUNFX0FUVFJfUlcoZW5hYmxlX2Rydl9o b2xkKTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKml0NjUwNV9hdHRy c1tdID0gew0KPiArCSZkZXZfYXR0cl9wcmludF90aW1pbmcuYXR0ciwNCj4gKwkmZGV2X2F0dHJf Zm9yY2VfcHdyb25vZmYuYXR0ciwNCj4gKwkmZGV2X2F0dHJfZW5hYmxlX2Rydl9ob2xkLmF0dHIs DQo+ICsJTlVMTCwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9zaHV0ZG93bihz dHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUw NSA9IGRldl9nZXRfZHJ2ZGF0YSgmY2xpZW50LT5kZXYpOw0KPiArDQo+ICsJa2ZyZWUoaXQ2NTA1 LT5lZGlkKTsNCj4gKwlpdDY1MDUtPmVkaWQgPSBOVUxMOw0KPiArDQo+ICsJaWYgKGl0NjUwNS0+ cG93ZXJlZCkNCj4gKwkJaXQ2NTA1X2xhbmVfb2ZmKGl0NjUwNSk7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBpbnQgaXQ2NTA1X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LA0KPiAr CQkJICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkNCj4gK3sNCj4gKwlzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDU7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJmNsaWVudC0+ZGV2Ow0K PiArCXN0cnVjdCBleHRjb25fZGV2ICpleHRjb247DQo+ICsJaW50IGVyciwgaW50cF9pcnE7DQo+ ICsNCj4gKwlpdDY1MDUgPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LCBzaXplb2YoKml0NjUw NSksIEdGUF9LRVJORUwpOw0KPiArCWlmICghaXQ2NTA1KQ0KPiArCQlyZXR1cm4gLUVOT01FTTsN Cj4gKw0KPiArCW11dGV4X2luaXQoJml0NjUwNS0+ZXh0Y29uX2xvY2spOw0KPiArCW11dGV4X2lu aXQoJml0NjUwNS0+bW9kZV9sb2NrKTsNCj4gKwltdXRleF9pbml0KCZpdDY1MDUtPmF1eF9sb2Nr KTsNCj4gKw0KPiArCWl0NjUwNS0+YnJpZGdlLm9mX25vZGUgPSBjbGllbnQtPmRldi5vZl9ub2Rl Ow0KPiArCWl0NjUwNS0+Y29ubmVjdG9yX3N0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29u bmVjdGVkOw0KPiArCWl0NjUwNS0+Y2xpZW50ID0gY2xpZW50Ow0KPiArCWkyY19zZXRfY2xpZW50 ZGF0YShjbGllbnQsIGl0NjUwNSk7DQo+ICsNCj4gKwkvKiBnZXQgZXh0Y29uIGRldmljZSBmcm9t IERUUyAqLw0KPiArCWV4dGNvbiA9IGV4dGNvbl9nZXRfZWRldl9ieV9waGFuZGxlKGRldiwgMCk7 DQo+ICsJaWYgKFBUUl9FUlIoZXh0Y29uKSA9PSAtRVBST0JFX0RFRkVSKQ0KPiArCQlyZXR1cm4g LUVQUk9CRV9ERUZFUjsNCj4gKwlpZiAoSVNfRVJSKGV4dGNvbikpIHsNCj4gKwkJRFJNX0RFVl9F UlJPUihkZXYsICJjYW4gbm90IGdldCBleHRjb24gZGV2aWNlISIpOw0KPiArCQlyZXR1cm4gUFRS X0VSUihleHRjb24pOw0KPiArCX0NCj4gKw0KPiArCWl0NjUwNS0+ZXh0Y29uID0gZXh0Y29uOw0K PiArDQo+ICsJaXQ2NTA1LT5yZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsICZp dDY1MDVfcmVnbWFwX2NvbmZpZyk7DQo+ICsJaWYgKElTX0VSUihpdDY1MDUtPnJlZ21hcCkpIHsN Cj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJyZWdtYXAgaTJjIGluaXQgZmFpbGVkIik7DQo+ICsJ CWVyciA9IFBUUl9FUlIoaXQ2NTA1LT5yZWdtYXApOw0KPiArCQlyZXR1cm4gZXJyOw0KPiArCX0N Cj4gKw0KPiArCWVyciA9IGl0NjUwNV9pbml0X3BkYXRhKGl0NjUwNSk7DQo+ICsJaWYgKGVycikg ew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIHBkYXRhOiAl ZCIsIGVycik7DQo+ICsJCXJldHVybiBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJaXQ2NTA1X3BhcnNl X2R0KGl0NjUwNSk7DQo+ICsNCj4gKwlpbnRwX2lycSA9IGNsaWVudC0+aXJxOw0KPiArDQo+ICsJ aWYgKCFpbnRwX2lycSkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBnZXQg SU5UUCBJUlEiKTsNCj4gKwkJZXJyID0gLUVOT0RFVjsNCj4gKwkJcmV0dXJuIGVycjsNCj4gKwl9 DQo+ICsNCj4gKwllcnIgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKCZjbGllbnQtPmRldiwg aW50cF9pcnEsIE5VTEwsDQo+ICsJCQkJCWl0NjUwNV9pbnRfdGhyZWFkZWRfaGFuZGxlciwNCj4g KwkJCQkJSVJRRl9UUklHR0VSX0xPVyB8IElSUUZfT05FU0hPVCwNCj4gKwkJCQkJIml0NjUwNS1p bnRwIiwgaXQ2NTA1KTsNCj4gKwlpZiAoZXJyKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAi RmFpbGVkIHRvIHJlcXVlc3QgSU5UUCB0aHJlYWRlZCBJUlE6ICVkIiwNCj4gKwkJCSAgICAgIGVy cik7DQo+ICsJCXJldHVybiBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJLyogUmVnaXN0ZXIgYXV4IGNo YW5uZWwgKi8NCj4gKwlpdDY1MDUtPmF1eC5uYW1lID0gIkRQLUFVWCI7DQo+ICsJaXQ2NTA1LT5h dXguZGV2ID0gZGV2Ow0KPiArCWl0NjUwNS0+YXV4LnRyYW5zZmVyID0gaXQ2NTA1X2F1eF90cmFu c2ZlcjsNCj4gKw0KPiArCWVyciA9IGRybV9kcF9hdXhfcmVnaXN0ZXIoJml0NjUwNS0+YXV4KTsN Cj4gKwlpZiAoZXJyIDwgMCkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBy ZWdpc3RlciBhdXg6ICVkIiwgZXJyKTsNCj4gKwkJcmV0dXJuIGVycjsNCj4gKwl9DQo+ICsNCj4g KwlJTklUX1dPUksoJml0NjUwNS0+bGlua193b3JrcywgaXQ2NTA1X2xpbmtfdHJhaW5pbmdfd29y ayk7DQo+ICsJSU5JVF9XT1JLKCZpdDY1MDUtPmhkY3Bfd2FpdF9rc3ZfbGlzdCwgaXQ2NTA1X2hk Y3Bfd2FpdF9rc3ZfbGlzdCk7DQo+ICsJSU5JVF9ERUxBWUVEX1dPUksoJml0NjUwNS0+aGRjcF93 b3JrLCBpdDY1MDVfaGRjcF93b3JrKTsNCj4gKwlpbml0X2NvbXBsZXRpb24oJml0NjUwNS0+d2Fp dF9lZGlkX2NvbXBsZXRlKTsNCj4gKwltZW1zZXQoaXQ2NTA1LT5kcGNkLCAwLCBzaXplb2YoaXQ2 NTA1LT5kcGNkKSk7DQo+ICsJaXQ2NTA1LT5wb3dlcmVkID0gZmFsc2U7DQo+ICsJaXQ2NTA1LT5l bmFibGVfZHJ2X2hvbGQgPSBERUZBVUxUX0RSVl9IT0xEOw0KPiArDQo+ICsJaWYgKERFRkFVTFRf UFdSX09OKQ0KPiArCQlpdDY1MDVfcG93ZXJvbihpdDY1MDUpOw0KPiArDQo+ICsJZXJyID0gc3lz ZnNfY3JlYXRlX2ZpbGVzKCZjbGllbnQtPmRldi5rb2JqLCBpdDY1MDVfYXR0cnMpOw0KPiArCWlm IChlcnIpIHsNCj4gKwkJZHJtX2RwX2F1eF91bnJlZ2lzdGVyKCZpdDY1MDUtPmF1eCk7DQo+ICsJ CXJldHVybiBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJaXQ2NTA1LT5icmlkZ2UuZnVuY3MgPSAmaXQ2 NTA1X2JyaWRnZV9mdW5jczsNCj4gKwlkcm1fYnJpZGdlX2FkZCgmaXQ2NTA1LT5icmlkZ2UpOw0K PiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X2kyY19y ZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1 ICppdDY1MDUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsNCj4gKw0KPiArCWRybV9jb25u ZWN0b3JfdW5yZWdpc3RlcigmaXQ2NTA1LT5jb25uZWN0b3IpOw0KPiArCWRybV9jb25uZWN0b3Jf Y2xlYW51cCgmaXQ2NTA1LT5jb25uZWN0b3IpOw0KPiArCWRybV9icmlkZ2VfcmVtb3ZlKCZpdDY1 MDUtPmJyaWRnZSk7DQo+ICsJZHJtX2RwX2F1eF91bnJlZ2lzdGVyKCZpdDY1MDUtPmF1eCk7DQo+ ICsJc3lzZnNfcmVtb3ZlX2ZpbGVzKCZjbGllbnQtPmRldi5rb2JqLCBpdDY1MDVfYXR0cnMpOw0K PiArCWl0NjUwNV9wb3dlcm9mZihpdDY1MDUpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBpdDY1MDVfaWRbXSA9IHsN Cj4gKwl7ICJpdDY1MDUiLCAwIH0sDQo+ICsJeyB9DQo+ICt9Ow0KPiArDQo+ICtNT0RVTEVfREVW SUNFX1RBQkxFKGkyYywgaXQ2NTA1X2lkKTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBv Zl9kZXZpY2VfaWQgaXQ2NTA1X29mX21hdGNoW10gPSB7DQo+ICsJeyAuY29tcGF0aWJsZSA9ICJp dGUsaXQ2NTA1IiB9LA0KPiArCXsgfQ0KPiArfTsNCj4gKw0KPiArc3RhdGljIHN0cnVjdCBpMmNf ZHJpdmVyIGl0NjUwNV9pMmNfZHJpdmVyID0gew0KPiArCS5kcml2ZXIgPSB7DQo+ICsJCS5uYW1l ID0gIml0NjUwNSIsDQo+ICsJCS5vZl9tYXRjaF90YWJsZSA9IGl0NjUwNV9vZl9tYXRjaCwNCj4g KyNpZmRlZiBDT05GSUdfUE1fU0xFRVANCj4gKwkJLnBtID0gJml0NjUwNV9icmlkZ2VfcG1fb3Bz LA0KPiArI2VuZGlmDQo+ICsJfSwNCj4gKwkucHJvYmUgPSBpdDY1MDVfaTJjX3Byb2JlLA0KPiAr CS5yZW1vdmUgPSBpdDY1MDVfaTJjX3JlbW92ZSwNCj4gKwkuc2h1dGRvd24gPSBpdDY1MDVfc2h1 dGRvd24sDQo+ICsJLmlkX3RhYmxlID0gaXQ2NTA1X2lkLA0KPiArfTsNCj4gKw0KPiArbW9kdWxl X2kyY19kcml2ZXIoaXQ2NTA1X2kyY19kcml2ZXIpOw0KPiArDQo+ICtNT0RVTEVfQVVUSE9SKCJB bGxlbiBDaGVuIDxhbGxlbi5jaGVuQGl0ZS5jb20udHc+Iik7DQo+ICtNT0RVTEVfREVTQ1JJUFRJ T04oIklUNjUwNSBEaXNwbGF5UG9ydCBUcmFuc21pdHRlciBkcml2ZXIiKTsNCj4gK01PRFVMRV9M SUNFTlNFKCJHUEwgdjIiKTsNCg0KLS0gDQpSZWdhcmRzLA0KDQpMYXVyZW50IFBpbmNoYXJ0DQo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.8 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B031AC433E0 for ; Wed, 23 Dec 2020 01:45:00 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 07A092256F for ; Wed, 23 Dec 2020 01:44:59 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 07A092256F Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ite.com.tw Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:In-Reply-To:References:Message-ID:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=rGlW5XHYFX3Vt7ZmLjk+6ptifCnR5DL6i8HbDSmd/YY=; b=1qZ7Fs3QWEHd9zQtRFqF9DDVH zxRtD8x/dbPVRaljmhqIhJNFd5Ym2DgfkBDUspIiIze6yCqFZ8Tqa2l2zcYsTLGCGbGnok5jfCZXy 4k2d1DlpkHNjkxzgP//wv7vw++5mvlJgn9MjXE7ggLncgX1gfFdD7i5yPkBmHQ/NtvIjFkuqeclKz +ycZpPl3SuwxC2BgfLT/a+evVFUHf6q1OkCoWi+jFKSDN6Nhhcn0adigqXnNMmpVjFiohxkeio+mR ZH7KvOTnVIqmTgl4mDIDxWeYeFqu9qKfz5bwvBBo6eahDKZBVCVUBvsZ8RkiDirhIcfq1+SCtLgU8 bP0e6jL/A==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1krtCl-0003gD-I5; Wed, 23 Dec 2020 01:44:43 +0000 Received: from 60-251-196-230.hinet-ip.hinet.net ([60.251.196.230] helo=ironport.ite.com.tw) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1krtCh-0003fb-2d; Wed, 23 Dec 2020 01:44:42 +0000 IronPort-SDR: 1nXLhCLXVkSsoXtVI2QcKPDQ3zQ3wrv3pcyF5NTnplVa6OuZb5ukmbmJ0CXf4YlHQcSW6qp95Q ocMl9L1SdyJQ== Received: from unknown (HELO mse.ite.com.tw) ([192.168.35.30]) by ironport.ite.com.tw with ESMTP; 23 Dec 2020 09:44:34 +0800 Received: from CSBMAIL1.internal.ite.com.tw (csbmail1.internal.ite.com.tw [192.168.65.58]) by mse.ite.com.tw with ESMTP id 0BN1iSRZ032475; Wed, 23 Dec 2020 09:44:28 +0800 (GMT-8) (envelope-from allen.chen@ite.com.tw) Received: from CSBMAIL1.internal.ite.com.tw (192.168.65.58) by CSBMAIL1.internal.ite.com.tw (192.168.65.58) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Wed, 23 Dec 2020 09:44:27 +0800 Received: from CSBMAIL1.internal.ite.com.tw ([fe80::2cba:f37c:ac09:f33f]) by CSBMAIL1.internal.ite.com.tw ([fe80::2cba:f37c:ac09:f33f%22]) with mapi id 15.01.1713.004; Wed, 23 Dec 2020 09:44:27 +0800 From: To: Subject: RE: [PATCH v6] drm/bridge: add it6505 driver Thread-Topic: [PATCH v6] drm/bridge: add it6505 driver Thread-Index: AQHW2H5MqIJWKQZyLUe7jYGEvJP5aaoD6AEw Date: Wed, 23 Dec 2020 01:44:27 +0000 Message-ID: <53d756230bb04f239c6482c688ce7523@ite.com.tw> References: <20201208105808.78029-1-allen.chen@ite.com.tw> <734036b1c57f4fb89d6cf68e54337ee7@ite.com.tw> In-Reply-To: Accept-Language: en-US Content-Language: zh-TW X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [192.168.70.104] x-tm-snts-smtp: 57ADD411EC0C474BF228A30C90C235EB7F5FA0B8F29E36AFABAC9455F8C5587D2000:8 MIME-Version: 1.0 X-MAIL: mse.ite.com.tw 0BN1iSRZ032475 X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kenneth.Hung@ite.com.tw, jitao.shi@mediatek.com, daniel@ffwll.ch, Jau-Chih.Tseng@ite.com.tw, yllin@google.com, airlied@linux.ie, narmstrong@baylibre.com, jernej.skrabec@siol.net, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, a.hajda@samsung.com, Hermes.Wu@ite.com.tw, linux-mediatek@lists.infradead.org, pihsun@chromium.org, matthias.bgg@gmail.com, linux-arm-kernel@lists.infradead.org, jonas@kwiboo.se Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org SGkgTGF1cmVudCBQaW5jaGFydA0KDQpUaGFua3MgZm9yIHJlcGx5Lg0KDQotLS0tLU9yaWdpbmFs IE1lc3NhZ2UtLS0tLQ0KRnJvbTogTGF1cmVudCBQaW5jaGFydCBbbWFpbHRvOmxhdXJlbnQucGlu Y2hhcnRAaWRlYXNvbmJvYXJkLmNvbV0gDQpTZW50OiBXZWRuZXNkYXksIERlY2VtYmVyIDIzLCAy MDIwIDEyOjIwIEFNDQpUbzogQWxsZW4gQ2hlbiAo6Zmz5p+P5a6HKQ0KQ2M6IEphdS1DaGloIFRz ZW5nICjmm77mmK3mmbopOyBIZXJtZXMgV3UgKOWQs+S9s+Wujyk7IEtlbm5ldGggSHVuZyAo5rSq 5a625YCrKTsgcGloc3VuQGNocm9taXVtLm9yZzsgaml0YW8uc2hpQG1lZGlhdGVrLmNvbTsgeWxs aW5AZ29vZ2xlLmNvbTsgYS5oYWpkYUBzYW1zdW5nLmNvbTsgbmFybXN0cm9uZ0BiYXlsaWJyZS5j b207IGpvbmFzQGt3aWJvby5zZTsgamVybmVqLnNrcmFiZWNAc2lvbC5uZXQ7IGFpcmxpZWRAbGlu dXguaWU7IGRhbmllbEBmZndsbC5jaDsgbWF0dGhpYXMuYmdnQGdtYWlsLmNvbTsgbGludXgta2Vy bmVsQHZnZXIua2VybmVsLm9yZzsgZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZzsgbGlu dXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnOyBsaW51eC1tZWRpYXRla0BsaXN0cy5p bmZyYWRlYWQub3JnDQpTdWJqZWN0OiBSZTogW1BBVENIIHY2XSBkcm0vYnJpZGdlOiBhZGQgaXQ2 NTA1IGRyaXZlcg0KDQpIaSBBbGxlbiwNCg0KT24gVHVlLCBEZWMgMjIsIDIwMjAgYXQgMTE6Mjk6 MzRBTSArMDAwMCwgYWxsZW4uY2hlbkBpdGUuY29tLnR3IHdyb3RlOg0KPiBIaQ0KPiANCj4gSXQg aGFzIGJlZW4gYWJvdXQgdHdvIHdlZWtzIHNpbmNlIEkgcG9zdGVkIHY2IGFuZCBoYXZlbid0IGhl YXJkIGFueXRoaW5nLg0KPiBDb25zaWRlciB0aGlzIGEgZ2VudGxlIHBpbmcuDQo+IA0KPiBKdXN0 IHdvbmRlcmluZyBpZiB0aGUgc2V0IG5lZWRzIGFkZGl0aW9uYWwgd29yayBhbmQgSSB3aWxsIGZp eCBhbmQNCj4gdXBzdHJlYW0gYWdhaW4uDQoNCkknbSBhZnJhaWQgSSBkb24ndCBoYXZlIGVub3Vn aCBiYW5kd2lkdGggdGhlc2UgZGF5cyB0byByZXZpZXcgYWxsIG5ldw0KYnJpZGdlIGRyaXZlcnMg Oi1TIE1heWJlIG9uZSBvZiB0aGUgRFJNIGJyaWRnZSBtYWludGFpbmVycyB3b3VsZCBoYXZlDQpt b3JlIHRpbWUgdG8gc3BlbmQgPw0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZy b206IEFsbGVuIENoZW4gKOmZs+afj+WuhykgDQo+IFNlbnQ6IFR1ZXNkYXksIERlY2VtYmVyIDA4 LCAyMDIwIDY6NTggUE0NCj4gQ2M6IEphdS1DaGloIFRzZW5nICjmm77mmK3mmbopOyBIZXJtZXMg V3UgKOWQs+S9s+Wujyk7IEtlbm5ldGggSHVuZyAo5rSq5a625YCrKTsgQWxsZW4gQ2hlbiAo6Zmz 5p+P5a6HKTsgUGktSHN1biBTaGloOyBKaXRhbyBTaGk7IFlpbHVuIExpbjsgSGVybWVzIFd1ICjl kLPkvbPlro8pOyBBbmRyemVqIEhhamRhOyBOZWlsIEFybXN0cm9uZzsgTGF1cmVudCBQaW5jaGFy dDsgSm9uYXMgS2FybG1hbjsgSmVybmVqIFNrcmFiZWM7IERhdmlkIEFpcmxpZTsgRGFuaWVsIFZl dHRlcjsgTWF0dGhpYXMgQnJ1Z2dlcjsgb3BlbiBsaXN0OyBvcGVuIGxpc3Q6RFJNIERSSVZFUlM7 IG1vZGVyYXRlZCBsaXN0OkFSTS9NZWRpYXRlayBTb0Mgc3VwcG9ydDsgbW9kZXJhdGVkIGxpc3Q6 QVJNL01lZGlhdGVrIFNvQyBzdXBwb3J0DQo+IFN1YmplY3Q6IFtQQVRDSCB2Nl0gZHJtL2JyaWRn ZTogYWRkIGl0NjUwNSBkcml2ZXINCj4gDQo+IFRoaXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgaVRF IElUNjUwNS4NCj4gVGhpcyBkZXZpY2UgY2FuIGNvbnZlcnQgRFBJIHNpZ25hbCB0byBEUCBvdXRw dXQuDQo+IA0KPiBGcm9tOiBBbGxlbiBDaGVuIDxhbGxlbi5jaGVuQGl0ZS5jb20udHc+DQo+IFNp Z25lZC1vZmYtYnk6IEppdGFvIFNoaSA8aml0YW8uc2hpQG1lZGlhdGVrLmNvbT4NCj4gU2lnbmVk LW9mZi1ieTogUGktSHN1biBTaGloIDxwaWhzdW5AY2hyb21pdW0ub3JnPg0KPiBTaWduZWQtb2Zm LWJ5OiBZaWx1biBMaW4gPHlsbGluQGdvb2dsZS5jb20+DQo+IFNpZ25lZC1vZmYtYnk6IEhlcm1l cyBXdSA8aGVybWVzLnd1QGl0ZS5jb20udHc+DQo+IFNpZ25lZC1vZmYtYnk6IEFsbGVuIENoZW4g PGFsbGVuLmNoZW5AaXRlLmNvbS50dz4NCj4gLS0tDQo+ICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdl L0tjb25maWcgICAgICB8ICAgIDcgKw0KPiAgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmls ZSAgICAgfCAgICAxICsNCj4gIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvaXRlLWl0NjUwNS5jIHwg MzM0MyArKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gIDMgZmlsZXMgY2hhbmdlZCwgMzM1 MSBpbnNlcnRpb25zKCspDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS9pdGUtaXQ2NTA1LmMNCj4gDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJp ZGdlL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcNCj4gaW5kZXggZTQx MTBkNmNhN2IzYy4uMjVkMzRkNzE5NjAwNCAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2JyaWRnZS9LY29uZmlnDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZw0K PiBAQCAtNzQsNiArNzQsMTMgQEAgY29uZmlnIERSTV9MT05USVVNX0xUOTYxMVVYQw0KPiAgCSAg SERNSSBzaWduYWxzDQo+ICAJICBQbGVhc2Ugc2F5IFkgaWYgeW91IGhhdmUgc3VjaCBoYXJkd2Fy ZS4NCj4gIA0KPiArY29uZmlnIERSTV9JVEVfSVQ2NTA1DQo+ICsJdHJpc3RhdGUgIklURSBJVDY1 MDUgRGlzcGxheVBvcnQgYnJpZGdlIg0KPiArCWRlcGVuZHMgb24gT0YNCj4gKwlzZWxlY3QgRFJN X0tNU19IRUxQRVINCj4gKwloZWxwDQo+ICsJICBJVEUgSVQ2NTA1IERpc3BsYXlQb3J0IGJyaWRn ZSBjaGlwIGRyaXZlci4NCj4gKw0KPiAgY29uZmlnIERSTV9MVkRTX0NPREVDDQo+ICAJdHJpc3Rh dGUgIlRyYW5zcGFyZW50IExWRFMgZW5jb2RlcnMgYW5kIGRlY29kZXJzIHN1cHBvcnQiDQo+ICAJ ZGVwZW5kcyBvbiBPRg0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtl ZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUNCj4gaW5kZXggODZlN2FjYzc2 ZjhkNi4uMmIyZjhmMGI1YjBmYSAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS9NYWtlZmlsZQ0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlDQo+IEBA IC00LDYgKzQsNyBAQCBvYmotJChDT05GSUdfRFJNX0NIUk9OVEVMX0NINzAzMykgKz0gY2hyb250 ZWwtY2g3MDMzLm8NCj4gIG9iai0kKENPTkZJR19EUk1fRElTUExBWV9DT05ORUNUT1IpICs9IGRp c3BsYXktY29ubmVjdG9yLm8NCj4gIG9iai0kKENPTkZJR19EUk1fTE9OVElVTV9MVDk2MTEpICs9 IGxvbnRpdW0tbHQ5NjExLm8NCj4gIG9iai0kKENPTkZJR19EUk1fTE9OVElVTV9MVDk2MTFVWEMp ICs9IGxvbnRpdW0tbHQ5NjExdXhjLm8NCj4gK29iai0kKENPTkZJR19EUk1fSVRFX0lUNjUwNSkg Kz0gaXRlLWl0NjUwNS5vDQo+ICBvYmotJChDT05GSUdfRFJNX0xWRFNfQ09ERUMpICs9IGx2ZHMt Y29kZWMubw0KPiAgb2JqLSQoQ09ORklHX0RSTV9NRUdBQ0hJUFNfU1REUFhYWFhfR0VfQjg1MFYz X0ZXKSArPSBtZWdhY2hpcHMtc3RkcHh4eHgtZ2UtYjg1MHYzLWZ3Lm8NCj4gIG9iai0kKENPTkZJ R19EUk1fTlhQX1BUTjM0NjApICs9IG54cC1wdG4zNDYwLm8NCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9icmlkZ2UvaXRlLWl0NjUwNS5jIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9p dGUtaXQ2NTA1LmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAw MC4uNWU3NjcxOWE1MWE0YQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvaXRlLWl0NjUwNS5jDQo+IEBAIC0wLDAgKzEsMzM0MyBAQA0KPiArLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKQ0KPiArLyoN Cj4gKyAqIENvcHlyaWdodCAoYykgMjAyMCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuDQo+ICsgKi8NCj4gKyNpbmNsdWRlIDxsaW51eC9iaXRzLmg+DQo+ICsjaW5j bHVkZSA8bGludXgvZGVsYXkuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4NCj4gKyNp bmNsdWRlIDxsaW51eC9lcnIuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9leHRjb24uaD4NCj4gKyNp bmNsdWRlIDxsaW51eC9mcy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4N Cj4gKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQu aD4NCj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+DQo+ICsjaW5jbHVkZSA8bGlu dXgvcmVnbWFwLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+DQo+ ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+DQo+ ICsNCj4gKyNpbmNsdWRlIDxjcnlwdG8vaGFzaC5oPg0KPiArDQo+ICsjaW5jbHVkZSA8ZHJtL2Ry bV9hdG9taWNfaGVscGVyLmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9icmlkZ2UuaD4NCj4gKyNp bmNsdWRlIDxkcm0vZHJtX2NydGMuaD4NCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVy Lmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9kcF9oZWxwZXIuaD4NCj4gKyNpbmNsdWRlIDxkcm0v ZHJtX2VkaWQuaD4NCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2hkY3AuaD4NCj4gKyNpbmNsdWRlIDxk cm0vZHJtX3ByaW50Lmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9wcm9iZV9oZWxwZXIuaD4NCj4g Kw0KPiArI2luY2x1ZGUgPHNvdW5kL2hkbWktY29kZWMuaD4NCj4gKw0KPiArI2RlZmluZSBSRUdf SUNfVkVSIDB4MDQNCj4gKw0KPiArI2RlZmluZSBSRUdfUkVTRVRfQ1RSTCAweDA1DQo+ICsjZGVm aW5lIFZJREVPX1JFU0VUIEJJVCgwKQ0KPiArI2RlZmluZSBBVURJT19SRVNFVCBCSVQoMSkNCj4g KyNkZWZpbmUgQUxMX0xPR0lDX1JFU0VUIEJJVCgyKQ0KPiArI2RlZmluZSBBVVhfUkVTRVQgQklU KDMpDQo+ICsjZGVmaW5lIEhEQ1BfUkVTRVQgQklUKDQpDQo+ICsNCj4gKyNkZWZpbmUgSU5UX1NU QVRVU18wMSAweDA2DQo+ICsjZGVmaW5lIElOVF9NQVNLXzAxIDB4MDkNCj4gKyNkZWZpbmUgSU5U X0hQRF9DSEFOR0UgQklUKDApDQo+ICsjZGVmaW5lIElOVF9SRUNFSVZFX0hQRF9JUlEgQklUKDEp DQo+ICsjZGVmaW5lIElOVF9TQ0RUX0NIQU5HRSBCSVQoMikNCj4gKyNkZWZpbmUgSU5UX0hEQ1Bf RkFJTCBCSVQoMykNCj4gKyNkZWZpbmUgSU5UX0hEQ1BfRE9ORSBCSVQoNCkNCj4gKw0KPiArI2Rl ZmluZSBJTlRfU1RBVFVTXzAyIDB4MDcNCj4gKyNkZWZpbmUgSU5UX01BU0tfMDIgMHgwQQ0KPiAr I2RlZmluZSBJTlRfQVVYX0NNRF9GQUlMIEJJVCgwKQ0KPiArI2RlZmluZSBJTlRfSERDUF9LU1Zf Q0hFQ0sgQklUKDEpDQo+ICsjZGVmaW5lIElOVF9BVURJT19GSUZPX0VSUk9SIEJJVCgyKQ0KPiAr DQo+ICsjZGVmaW5lIElOVF9TVEFUVVNfMDMgMHgwOA0KPiArI2RlZmluZSBJTlRfTUFTS18wMyAw eDBCDQo+ICsjZGVmaW5lIElOVF9MSU5LX1RSQUlOX0ZBSUwgQklUKDQpDQo+ICsjZGVmaW5lIElO VF9WSURfRklGT19FUlJPUiBCSVQoNSkNCj4gKyNkZWZpbmUgSU5UX0lPX0xBVENIX0ZJRk9fT1ZF UkZMT1cgQklUKDcpDQo+ICsNCj4gKyNkZWZpbmUgUkVHX1NZU1RFTV9TVFMgMHgwRA0KPiArI2Rl ZmluZSBJTlRfU1RTIEJJVCgwKQ0KPiArI2RlZmluZSBIUERfU1RTIEJJVCgxKQ0KPiArI2RlZmlu ZSBWSURFT19TVEIgQklUKDIpDQo+ICsNCj4gKyNkZWZpbmUgUkVHX0xJTktfVFJBSU5fU1RTIDB4 MEUNCj4gKyNkZWZpbmUgTElOS19TVEFURV9DUiBCSVQoMikNCj4gKyNkZWZpbmUgTElOS19TVEFU RV9FUSBCSVQoMykNCj4gKyNkZWZpbmUgTElOS19TVEFURV9OT1JQIEJJVCg0KQ0KPiArDQo+ICsj ZGVmaW5lIFJFR19CQU5LX1NFTCAweDBGDQo+ICsjZGVmaW5lIFJFR19DTEtfQ1RSTDAgMHgxMA0K PiArI2RlZmluZSBNX1BDTEtfREVMQVkgMHgwMw0KPiArDQo+ICsjZGVmaW5lIFJFR19BVVhfT1BU IDB4MTENCj4gKyNkZWZpbmUgQVVYX0FVVE9fUlNUIEJJVCgwKQ0KPiArI2RlZmluZSBBVVhfRklY X0ZSRVEgQklUKDMpDQo+ICsNCj4gKyNkZWZpbmUgUkVHX0RBVEFfQ1RSTDAgMHgxMg0KPiArI2Rl ZmluZSBWSURFT19MQVRDSF9FREdFIEJJVCg0KQ0KPiArI2RlZmluZSBFTkFCTEVfUENMS19DT1VO VEVSIEJJVCg3KQ0KPiArDQo+ICsjZGVmaW5lIFJFR19QQ0xLX0NPVU5URVJfVkFMVUUgMHgxMw0K PiArDQo+ICsjZGVmaW5lIFJFR181MDFfRklGT19DVFJMIDB4MTUNCj4gKyNkZWZpbmUgUlNUXzUw MV9GSUZPIEJJVCgxKQ0KPiArDQo+ICsjZGVmaW5lIFJFR19UUkFJTl9DVFJMMCAweDE2DQo+ICsj ZGVmaW5lIEZPUkNFX0xCUiBCSVQoMCkNCj4gKyNkZWZpbmUgTEFORV9DT1VOVF9NQVNLIDB4MDYN Cj4gKyNkZWZpbmUgTEFORV9TV0FQIEJJVCgzKQ0KPiArI2RlZmluZSBTUFJFQURfQU1QXzUgQklU KDQpDQo+ICsjZGVmaW5lIEZPUkNFX0NSX0RPTkUgQklUKDUpDQo+ICsjZGVmaW5lIEZPUkNFX0VR X0RPTkUgQklUKDYpDQo+ICsNCj4gKyNkZWZpbmUgUkVHX1RSQUlOX0NUUkwxIDB4MTcNCj4gKyNk ZWZpbmUgQVVUT19UUkFJTiBCSVQoMCkNCj4gKyNkZWZpbmUgTUFOVUFMX1RSQUlOIEJJVCgxKQ0K PiArI2RlZmluZSBGT1JDRV9SRVRSQUlOIEJJVCgyKQ0KPiArDQo+ICsjZGVmaW5lIFJFR19BVVhf Q1RSTCAweDIzDQo+ICsjZGVmaW5lIENMUl9FRElEX0ZJRk8gQklUKDApDQo+ICsjZGVmaW5lIEFV WF9VU0VSX01PREUgQklUKDEpDQo+ICsjZGVmaW5lIEFVWF9OT19TRUdNRU5UX1dSIEJJVCg2KQ0K PiArI2RlZmluZSBBVVhfRU5fRklGT19SRUFEIEJJVCg3KQ0KPiArDQo+ICsjZGVmaW5lIFJFR19B VVhfQURSXzBfNyAweDI0DQo+ICsjZGVmaW5lIFJFR19BVVhfQURSXzhfMTUgMHgyNQ0KPiArI2Rl ZmluZSBSRUdfQVVYX0FEUl8xNl8xOSAweDI2DQo+ICsjZGVmaW5lIFJFR19BVVhfT1VUX0RBVEEw IDB4MjcNCj4gKw0KPiArI2RlZmluZSBSRUdfQVVYX0NNRF9SRVEgMHgyQg0KPiArI2RlZmluZSBB VVhfQlVTWSBCSVQoNSkNCj4gKw0KPiArI2RlZmluZSBSRUdfQVVYX0RBVEFfMF83IDB4MkMNCj4g KyNkZWZpbmUgUkVHX0FVWF9EQVRBXzhfMTUgMHgyRA0KPiArI2RlZmluZSBSRUdfQVVYX0RBVEFf MTZfMjMgMHgyRQ0KPiArI2RlZmluZSBSRUdfQVVYX0RBVEFfMjRfMzEgMHgyRg0KPiArDQo+ICsj ZGVmaW5lIFJFR19BVVhfREFUQV9GSUZPIDB4MkYNCj4gKw0KPiArI2RlZmluZSBSRUdfQVVYX0VS Uk9SX1NUUyAweDlGDQo+ICsjZGVmaW5lIE1fQVVYX1JFUV9GQUlMIDB4MDMNCj4gKw0KPiArI2Rl ZmluZSBSRUdfSERDUF9DVFJMMSAweDM4DQo+ICsjZGVmaW5lIEhEQ1BfQ1BfRU5BQkxFIEJJVCgw KQ0KPiArDQo+ICsjZGVmaW5lIFJFR19IRENQX1RSSUdHRVIgMHgzOQ0KPiArI2RlZmluZSBIRENQ X1RSSUdHRVJfU1RBUlQgIEJJVCgwKQ0KPiArI2RlZmluZSBIRENQX1RSSUdHRVJfQ1BJUlEgIEJJ VCgxKQ0KPiArI2RlZmluZSBIRENQX1RSSUdHRVJfS1NWX0RPTkUgIEJJVCg0KQ0KPiArI2RlZmlu ZSBIRENQX1RSSUdHRVJfS1NWX0ZBSUwgQklUKDUpDQo+ICsNCj4gKyNkZWZpbmUgUkVHX0hEQ1Bf Q1RSTDIgMHgzQQ0KPiArI2RlZmluZSBIRENQX0FOX1NFTCBCSVQoMCkNCj4gKyNkZWZpbmUgSERD UF9BTl9HRU4gQklUKDEpDQo+ICsjZGVmaW5lIEhEQ1BfSFdfSFBESVJRX0FDVCBCSVQoMikNCj4g KyNkZWZpbmUgSERDUF9FTl9NMF9SRUFEIEJJVCg1KQ0KPiArDQo+ICsjZGVmaW5lIFJFR19NMF8w XzcgMHg0Qw0KPiArI2RlZmluZSBSRUdfQU5fMF83IDB4NEMNCj4gKyNkZWZpbmUgUkVHX1NQX0NU UkwwIDB4NTgNCj4gKyNkZWZpbmUgUkVHX0lQX0NUUkwxIDB4NTkNCj4gKyNkZWZpbmUgUkVHX0lQ X0NUUkwyIDB4NUENCj4gKw0KPiArI2RlZmluZSBSRUdfTElOS19EUlYgMHg1Qw0KPiArI2RlZmlu ZSBEUlZfSFMgQklUKDEpDQo+ICsNCj4gKyNkZWZpbmUgUkVHX0RSVl9MTl9EQVRBX1NFTCAweDVE DQo+ICsNCj4gKyNkZWZpbmUgUkVHX0FVWCAweDVFDQo+ICsNCj4gKyNkZWZpbmUgUkVHX1ZJRF9C VVNfQ1RSTDAgMHg2MA0KPiArI2RlZmluZSBJTl9ERFIgQklUKDIpDQo+ICsjZGVmaW5lIEREUl9D RCAoMHgwMSA8PCA2KQ0KPiArDQo+ICsjZGVmaW5lIFJFR19WSURfQlVTX0NUUkwxIDB4NjENCj4g KyNkZWZpbmUgVFhfRklGT19SRVNFVCBCSVQoMSkNCj4gKw0KPiArI2RlZmluZSBSRUdfSU5QVVRf Q1RSTCAweEEwDQo+ICsjZGVmaW5lIElOUFVUX0hTWU5DX1BPTCBCSVQoMCkNCj4gKyNkZWZpbmUg SU5QVVRfVlNZTkNfUE9MIEJJVCgyKQ0KPiArI2RlZmluZSBJTlBVVF9JTlRFUkxBQ0VEIEJJVCg0 KQ0KPiArDQo+ICsjZGVmaW5lIFJFR19JTlBVVF9IVE9UQUwgMHhBMQ0KPiArI2RlZmluZSBSRUdf SU5QVVRfSEFDVElWRV9TVEFSVCAweEEzDQo+ICsjZGVmaW5lIFJFR19JTlBVVF9IQUNUSVZFX1dJ RFRIIDB4QTUNCj4gKyNkZWZpbmUgUkVHX0lOUFVUX0hGUk9OVF9QT1JDSCAweEE3DQo+ICsjZGVm aW5lIFJFR19JTlBVVF9IU1lOQ19XSURUSCAweEE5DQo+ICsjZGVmaW5lIFJFR19JTlBVVF9WVE9U QUwgMHhBQg0KPiArI2RlZmluZSBSRUdfSU5QVVRfVkFDVElWRV9TVEFSVCAweEFEDQo+ICsjZGVm aW5lIFJFR19JTlBVVF9WQUNUSVZFX1dJRFRIIDB4QUYNCj4gKyNkZWZpbmUgUkVHX0lOUFVUX1ZG Uk9OVF9QT1JDSCAweEIxDQo+ICsjZGVmaW5lIFJFR19JTlBVVF9WU1lOQ19XSURUSCAweEIzDQo+ ICsNCj4gKyNkZWZpbmUgUkVHX0FVRElPX1NSQ19DVFJMIDB4QjgNCj4gKyNkZWZpbmUgTV9BVURJ T19JMlNfRU4gMHgwRg0KPiArI2RlZmluZSBFTl9JMlMwIEJJVCgwKQ0KPiArI2RlZmluZSBFTl9J MlMxIEJJVCgxKQ0KPiArI2RlZmluZSBFTl9JMlMyIEJJVCgyKQ0KPiArI2RlZmluZSBFTl9JMlMz IEJJVCgzKQ0KPiArI2RlZmluZSBBVURJT19GSUZPX1JFU0VUIEJJVCg3KQ0KPiArDQo+ICsjZGVm aW5lIFJFR19BVURJT19GTVQgMHhCOQ0KPiArI2RlZmluZSBSRUdfQVVESU9fRklGT19TRUwgMHhC QQ0KPiArDQo+ICsjZGVmaW5lIFJFR19BVURJT19DVFJMMCAweEJCDQo+ICsjZGVmaW5lIEFVRElP X0ZVTExfUEtUIEJJVCg0KQ0KPiArI2RlZmluZSBBVURJT18xNkJfQk9VTkQgQklUKDUpDQo+ICsN Cj4gKyNkZWZpbmUgUkVHX0FVRElPX0NUUkwxIDB4QkMNCj4gKyNkZWZpbmUgUkVHX0FVRElPX0lO UFVUX0ZSRVEgMHhCRQ0KPiArDQo+ICsjZGVmaW5lIFJFR19JRUM5NThfU1RTMCAweEJGDQo+ICsj ZGVmaW5lIFJFR19JRUM5NThfU1RTMSAweEMwDQo+ICsjZGVmaW5lIFJFR19JRUM5NThfU1RTMiAw eEMxDQo+ICsjZGVmaW5lIFJFR19JRUM5NThfU1RTMyAweEMyDQo+ICsjZGVmaW5lIFJFR19JRUM5 NThfU1RTNCAweEMzDQo+ICsNCj4gKyNkZWZpbmUgUkVHX0hQRF9JUlFfVElNRSAweEM5DQo+ICsj ZGVmaW5lIFJFR19BVVhfREVCVUdfTU9ERSAweENBDQo+ICsjZGVmaW5lIFJFR19BVVhfT1BUMiAw eENCDQo+ICsjZGVmaW5lIFJFR19IRENQX09QVCAweENFDQo+ICsjZGVmaW5lIFJFR19VU0VSX0RS Vl9QUkUgMHhDRg0KPiArDQo+ICsjZGVmaW5lIFJFR19EQVRBX01VVEVfQ1RSTCAweEQzDQo+ICsj ZGVmaW5lIEVOQUJMRV9FTkhBTkNFRF9GUkFNRSBCSVQoMCkNCj4gKyNkZWZpbmUgRU5BQkxFX0FV VE9fVklERU9fRklGT19SRVNFVCBCSVQoMSkNCj4gKyNkZWZpbmUgRU5fVklEX01VVEUgQklUKDQp DQo+ICsjZGVmaW5lIEVOX0FVRF9NVVRFIEJJVCg1KQ0KPiArDQo+ICsjZGVmaW5lIFJFR19USU1F X1NUTVBfQ1RSTCAweEQ0DQo+ICsjZGVmaW5lIEVOX0VOSEFOQ0VfVklEX1NUTVAgQklUKDApDQo+ ICsjZGVmaW5lIEVOX0VOSEFOQ0VfQVVEX1NUTVAgQklUKDIpDQo+ICsjZGVmaW5lIE1fU1RBTVBf U1RFUCAweDMwDQo+ICsjZGVmaW5lIEVOX1NTQ19HQVQgQklUKDYpDQo+ICsNCj4gKyNkZWZpbmUg UkVHX0lORk9GUkFNRV9DVFJMIDB4RTgNCj4gKyNkZWZpbmUgRU5fQVZJX1BLVCBCSVQoMCkNCj4g KyNkZWZpbmUgRU5fQVVEX1BLVCBCSVQoMSkNCj4gKyNkZWZpbmUgRU5fTVBHX1BLVCBCSVQoMikN Cj4gKyNkZWZpbmUgRU5fR0VOX1BLVCBCSVQoMykNCj4gKyNkZWZpbmUgRU5fVklEX1RJTUVfU1RN UCBCSVQoNCkNCj4gKyNkZWZpbmUgRU5fQVVEX1RJTUVfU1RNUCBCSVQoNSkNCj4gKyNkZWZpbmUg RU5fVklEX0NUUkxfUEtUIChFTl9BVklfUEtUIHwgRU5fVklEX1RJTUVfU1RNUCkNCj4gKyNkZWZp bmUgRU5fQVVEX0NUUkxfUEtUIChFTl9BVURfUEtUIHwgRU5fQVVEX1RJTUVfU1RNUCkNCj4gKw0K PiArI2RlZmluZSBSRUdfQVVESU9fTl8wXzcgMHhERQ0KPiArI2RlZmluZSBSRUdfQVVESU9fTl84 XzE1IDB4REYNCj4gKyNkZWZpbmUgUkVHX0FVRElPX05fMTZfMjMgMHhFMA0KPiArDQo+ICsjZGVm aW5lIFJFR19BVklfSU5GT19EQjEgMHhFOQ0KPiArI2RlZmluZSBSRUdfQVZJX0lORk9fREIyIDB4 RUENCj4gKyNkZWZpbmUgUkVHX0FWSV9JTkZPX0RCMyAweEVCDQo+ICsjZGVmaW5lIFJFR19BVklf SU5GT19EQjQgMHhFQw0KPiArI2RlZmluZSBSRUdfQVZJX0lORk9fREI1IDB4RUQNCj4gKyNkZWZp bmUgUkVHX0FWSV9JTkZPX1NVTSAweEY2DQo+ICsNCj4gKyNkZWZpbmUgUkVHX0FVRF9JTkZPRlJB TV9EQjEgMHhGNw0KPiArI2RlZmluZSBSRUdfQVVEX0lORk9GUkFNX0RCMiAweEY4DQo+ICsjZGVm aW5lIFJFR19BVURfSU5GT0ZSQU1fREIzIDB4RjkNCj4gKyNkZWZpbmUgUkVHX0FVRF9JTkZPRlJB TV9EQjQgMHhGQQ0KPiArI2RlZmluZSBSRUdfQVVEX0lORk9GUkFNX1NVTSAweEZCDQo+ICsNCj4g Ky8qIHRoZSBmb2xsb3dpbmcgc2l4IHJlZ2lzdGVycyBhcmUgaW4gYmFuazEgKi8NCj4gKyNkZWZp bmUgUkVHX0RSVl8wX0RCXzgwMF9NViAweDdFDQo+ICsjZGVmaW5lIFJFR19QUkVfMF9EQl84MDBf TVYgMHg3Rg0KPiArI2RlZmluZSBSRUdfUFJFXzNQNV9EQl84MDBfTVYgMHg4MQ0KPiArI2RlZmlu ZSBSRUdfU1NDX0NUUkwwIDB4ODgNCj4gKyNkZWZpbmUgUkVHX1NTQ19DVFJMMSAweDg5DQo+ICsj ZGVmaW5lIFJFR19TU0NfQ1RSTDIgMHg4QQ0KPiArDQo+ICsjZGVmaW5lIFJCUiBEUF9MSU5LX0JX XzFfNjINCj4gKyNkZWZpbmUgSEJSIERQX0xJTktfQldfMl83DQo+ICsjZGVmaW5lIEhCUjIgRFBf TElOS19CV181XzQNCj4gKyNkZWZpbmUgSEJSMyBEUF9MSU5LX0JXXzhfMQ0KPiArDQo+ICsvKiBW ZW5kb3Igb3B0aW9uICovDQo+ICsjZGVmaW5lIEhEQ1BfREVTSVJFRCAxDQo+ICsjZGVmaW5lIE1B WF9MQU5FX0NPVU5UIDQNCj4gKyNkZWZpbmUgTUFYX0xJTktfUkFURSBIQlINCj4gKyNkZWZpbmUg QVVUT19UUkFJTl9SRVRSWSAzDQo+ICsjZGVmaW5lIE1BWF9IRENQX0RPV05fU1RSRUFNX0NPVU5U IDEwDQo+ICsjZGVmaW5lIE1BWF9DUl9MRVZFTCAweDAzDQo+ICsjZGVmaW5lIE1BWF9FUV9MRVZF TCAweDAzDQo+ICsjZGVmaW5lIEFVWF9XQUlUX1RJTUVPVVRfTVMgMTUNCj4gKyNkZWZpbmUgQVVY X0ZJRk9fTUFYX1NJWkUgMzINCj4gKyNkZWZpbmUgUElYRUxfQ0xLX0RFTEFZIDENCj4gKyNkZWZp bmUgUElYRUxfQ0xLX0lOVkVSU0UgMA0KPiArI2RlZmluZSBBREpVU1RfUEhBU0VfVEhSRVNIT0xE IDgwMDAwDQo+ICsjZGVmaW5lIERQSV9QSVhFTF9DTEtfTUFYIDk1MDAwDQo+ICsjZGVmaW5lIEhE Q1BfU0hBMV9GSUZPX0xFTiAoTUFYX0hEQ1BfRE9XTl9TVFJFQU1fQ09VTlQgKiA1ICsgMTApDQo+ ICsjZGVmaW5lIERFRkFVTFRfUFdSX09OIDANCj4gKyNkZWZpbmUgREVGQVVMVF9EUlZfSE9MRCAw DQo+ICsNCj4gKyNkZWZpbmUgQVVESU9fU0VMRUNUIEkyUw0KPiArI2RlZmluZSBBVURJT19UWVBF IExQQ00NCj4gKyNkZWZpbmUgQVVESU9fU0FNUExFX1JBVEUgU0FNUExFX1JBVEVfNDhLDQo+ICsj ZGVmaW5lIEFVRElPX0NIQU5ORUxfQ09VTlQgMg0KPiArDQo+ICsvKg0KPiArICogMDogU3RhbmRh cmQgSTJTDQo+ICsgKiAxOiAzMmJpdCBJMlMNCj4gKyAqLw0KPiArI2RlZmluZSBJMlNfSU5QVVRf Rk9STUFUIDENCj4gKw0KPiArLyoNCj4gKyAqIDA6IExlZnQtanVzdGlmaWVkDQo+ICsgKiAxOiBS aWdodC1qdXN0aWZpZWQNCj4gKyAqLw0KPiArI2RlZmluZSBJMlNfSlVTVElGSUVEIDANCj4gKw0K PiArLyoNCj4gKyAqIDA6IERhdGEgZGVsYXkgMVQgY29ycmVzcG9uZCB0byBXUw0KPiArICogMTog Tm8gZGF0YSBkZWxheSBjb3JyZXNwb25kIHRvIFdTDQo+ICsgKi8NCj4gKyNkZWZpbmUgSTJTX0RB VEFfREVMQVkgMA0KPiArDQo+ICsvKg0KPiArICogMDogTGVmdCBjaGFubmVsDQo+ICsgKiAxOiBS aWdodCBjaGFubmVsDQo+ICsgKi8NCj4gKyNkZWZpbmUgSTJTX1dTX0NIQU5ORUwgMA0KPiArDQo+ ICsvKg0KPiArICogMDogTVNCIHNoaWZ0IGZpcnN0DQo+ICsgKiAxOiBMU0Igc2hpZnQgZmlyc3QN Cj4gKyAqLw0KPiArI2RlZmluZSBJMlNfREFUQV9TRVFVRU5DRSAwDQo+ICsNCj4gKy8qDQo+ICsg KiBBdWRpbyBTYW1wbGUgV29yZCBMZW5ndGgNCj4gKyAqIFdPUkRfTEVOR1RIXzE2QklUDQo+ICsg KiBXT1JEX0xFTkdUSF8xOEJJVA0KPiArICogV09SRF9MRU5HVEhfMjBCSVQNCj4gKyAqIFdPUkRf TEVOR1RIXzI0QklUDQo+ICsgKi8NCj4gKyNkZWZpbmUgQVVESU9fV09SRF9MRU5HVEggV09SRF9M RU5HVEhfMjRCSVQNCj4gKw0KPiArZW51bSBhdXhfY21kX3R5cGUgew0KPiArCUNNRF9BVVhfTkFU SVZFX1JFQUQgPSAweDAsDQo+ICsJQ01EX0FVWF9OQVRJVkVfV1JJVEUgPSAweDUsDQo+ICsJQ01E X0FVWF9JMkNfRURJRF9SRUFEID0gMHhCLA0KPiArfTsNCj4gKw0KPiArZW51bSBhdXhfY21kX3Jl cGx5IHsNCj4gKwlSRVBMWV9BQ0ssDQo+ICsJUkVQTFlfTkFDSywNCj4gKwlSRVBMWV9ERUZFUiwN Cj4gK307DQo+ICsNCj4gK2VudW0gbGlua190cmFpbl9zdGF0dXMgew0KPiArCUxJTktfSURMRSwN Cj4gKwlMSU5LX0JVU1ksDQo+ICsJTElOS19PSywNCj4gK307DQo+ICsNCj4gK2VudW0gaGRjcF9z dGF0ZSB7DQo+ICsJSERDUF9BVVRIX0lETEUsDQo+ICsJSERDUF9BVVRIX0dPSU5HLA0KPiArCUhE Q1BfQVVUSF9ET05FLA0KPiArfTsNCj4gKw0KPiArc3RydWN0IGl0NjUwNV9wbGF0Zm9ybV9kYXRh IHsNCj4gKwlzdHJ1Y3QgcmVndWxhdG9yICpwd3IxODsNCj4gKwlzdHJ1Y3QgcmVndWxhdG9yICpv dmRkOw0KPiArCXN0cnVjdCBncGlvX2Rlc2MgKmdwaW9kX3Jlc2V0Ow0KPiArfTsNCj4gKw0KPiAr ZW51bSBpdDY1MDVfYXVkaW9fc2VsZWN0IHsNCj4gKwlJMlMgPSAwLA0KPiArCVNQRElGLA0KPiAr fTsNCj4gKw0KPiArZW51bSBpdDY1MDVfYXVkaW9fc2FtcGxlX3JhdGUgew0KPiArCVNBTVBMRV9S QVRFXzI0SyA9IDB4NiwNCj4gKwlTQU1QTEVfUkFURV8zMksgPSAweDMsDQo+ICsJU0FNUExFX1JB VEVfNDhLID0gMHgyLA0KPiArCVNBTVBMRV9SQVRFXzk2SyA9IDB4QSwNCj4gKwlTQU1QTEVfUkFU RV8xOTJLID0gMHhFLA0KPiArCVNBTVBMRV9SQVRFXzQ0XzFLID0gMHgwLA0KPiArCVNBTVBMRV9S QVRFXzg4XzJLID0gMHg4LA0KPiArCVNBTVBMRV9SQVRFXzE3Nl80SyA9IDB4QywNCj4gK307DQo+ ICsNCj4gK2VudW0gaXQ2NTA1X2F1ZGlvX3R5cGUgew0KPiArCUxQQ00gPSAwLA0KPiArCU5MUENN LA0KPiArCURTUywNCj4gK307DQo+ICsNCj4gK2VudW0gaXQ2NTA1X2F1ZGlvX3dvcmRfbGVuZ3Ro IHsNCj4gKwlXT1JEX0xFTkdUSF8xNkJJVCA9IDAsDQo+ICsJV09SRF9MRU5HVEhfMThCSVQsDQo+ ICsJV09SRF9MRU5HVEhfMjBCSVQsDQo+ICsJV09SRF9MRU5HVEhfMjRCSVQsDQo+ICt9Ow0KPiAr DQo+ICtzdHJ1Y3QgaXQ2NTA1X2F1ZGlvX2RhdGEgew0KPiArCWVudW0gaXQ2NTA1X2F1ZGlvX3Nl bGVjdCBzZWxlY3Q7DQo+ICsJZW51bSBpdDY1MDVfYXVkaW9fc2FtcGxlX3JhdGUgc2FtcGxlX3Jh dGU7DQo+ICsJZW51bSBpdDY1MDVfYXVkaW9fdHlwZSB0eXBlOw0KPiArCWVudW0gaXQ2NTA1X2F1 ZGlvX3dvcmRfbGVuZ3RoIHdvcmRfbGVuZ3RoOw0KPiArCXU4IGNoYW5uZWxfY291bnQ7DQo+ICsJ dTggaTJzX2lucHV0X2Zvcm1hdDsNCj4gKwl1OCBpMnNfanVzdGlmaWVkOw0KPiArCXU4IGkyc19k YXRhX2RlbGF5Ow0KPiArCXU4IGkyc193c19jaGFubmVsOw0KPiArCXU4IGkyc19kYXRhX3NlcXVl bmNlOw0KPiArfTsNCj4gKw0KPiArc3RydWN0IGl0NjUwNV9hdWRpb19zYW1wbGVfcmF0ZV9tYXAg ew0KPiArCWVudW0gaXQ2NTA1X2F1ZGlvX3NhbXBsZV9yYXRlIHJhdGU7DQo+ICsJaW50IHNhbXBs ZV9yYXRlX3ZhbHVlOw0KPiArfTsNCj4gKw0KPiArc3RydWN0IGl0NjUwNV9kcm1fZHBfbGluayB7 DQo+ICsJdW5zaWduZWQgY2hhciByZXZpc2lvbjsNCj4gKwl1bnNpZ25lZCBpbnQgcmF0ZTsNCj4g Kwl1bnNpZ25lZCBpbnQgbnVtX2xhbmVzOw0KPiArCXVuc2lnbmVkIGxvbmcgY2FwYWJpbGl0aWVz Ow0KPiArfTsNCj4gKw0KPiArc3RydWN0IGl0NjUwNSB7DQo+ICsJc3RydWN0IGRybV9kcF9hdXgg YXV4Ow0KPiArCXN0cnVjdCBkcm1fYnJpZGdlIGJyaWRnZTsNCj4gKwlzdHJ1Y3QgaTJjX2NsaWVu dCAqY2xpZW50Ow0KPiArCXN0cnVjdCBlZGlkICplZGlkOw0KPiArCXN0cnVjdCBkcm1fY29ubmVj dG9yIGNvbm5lY3RvcjsNCj4gKwlzdHJ1Y3QgaXQ2NTA1X2RybV9kcF9saW5rIGxpbms7DQo+ICsJ c3RydWN0IGl0NjUwNV9wbGF0Zm9ybV9kYXRhIHBkYXRhOw0KPiArCXN0cnVjdCBtdXRleCBleHRj b25fbG9jazsNCj4gKwlzdHJ1Y3QgbXV0ZXggbW9kZV9sb2NrOw0KPiArCXN0cnVjdCBtdXRleCBh dXhfbG9jazsNCj4gKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7DQo+ICsJc3RydWN0IGRybV9kaXNw bGF5X21vZGUgdmlkZW9faW5mbzsNCj4gKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZXZlbnRfbmI7 DQo+ICsJc3RydWN0IGV4dGNvbl9kZXYgKmV4dGNvbjsNCj4gKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qg ZXh0Y29uX3dxOw0KPiArCWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgY29ubmVjdG9yX3N0YXR1 czsNCj4gKwllbnVtIGxpbmtfdHJhaW5fc3RhdHVzIGxpbmtfc3RhdGU7DQo+ICsJc3RydWN0IHdv cmtfc3RydWN0IGxpbmtfd29ya3M7DQo+ICsJdTggZHBjZFtEUF9SRUNFSVZFUl9DQVBfU0laRV07 DQo+ICsJdTggbGFuZV9jb3VudDsNCj4gKwl1OCBsaW5rX3JhdGVfYndfY29kZTsNCj4gKwl1OCBz aW5rX2NvdW50Ow0KPiArCWJvb2wgc3RlcF90cmFpbjsNCj4gKwlib29sIGJyYW5jaF9kZXZpY2U7 DQo+ICsJYm9vbCBlbmFibGVfc3NjOw0KPiArCWJvb2wgbGFuZV9zd2FwX2Rpc2FibGVkOw0KPiAr CWJvb2wgbGFuZV9zd2FwOw0KPiArCWJvb2wgcG93ZXJlZDsNCj4gKwl1MzIgYWZlX3NldHRpbmc7 DQo+ICsJZW51bSBoZGNwX3N0YXRlIGhkY3Bfc3RhdHVzOw0KPiArCXN0cnVjdCBkZWxheWVkX3dv cmsgaGRjcF93b3JrOw0KPiArCXN0cnVjdCB3b3JrX3N0cnVjdCBoZGNwX3dhaXRfa3N2X2xpc3Q7 DQo+ICsJc3RydWN0IGNvbXBsZXRpb24gd2FpdF9lZGlkX2NvbXBsZXRlOw0KPiArCXU4IGF1dG9f dHJhaW5fcmV0cnk7DQo+ICsJYm9vbCBoZGNwX2Rlc2lyZWQ7DQo+ICsJYm9vbCBpc19yZXBlYXRl cjsNCj4gKwl1OCBoZGNwX2Rvd25fc3RyZWFtX2NvdW50Ow0KPiArCXU4IGJrc3ZzW0RSTV9IRENQ X0tTVl9MRU5dOw0KPiArCXU4IHNoYTFfaW5wdXRbSERDUF9TSEExX0ZJRk9fTEVOXTsNCj4gKwli b29sIGVuYWJsZV9lbmhhbmNlZF9mcmFtZTsNCj4gKwloZG1pX2NvZGVjX3BsdWdnZWRfY2IgcGx1 Z2dlZF9jYjsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpjb2RlY19kZXY7DQo+ICsJc3RydWN0IGRlbGF5 ZWRfd29yayBkZWxheWVkX2F1ZGlvOw0KPiArCXN0cnVjdCBpdDY1MDVfYXVkaW9fZGF0YSBhdWRp bzsNCj4gKw0KPiArCS8qIGl0NjUwNSBkcml2ZXIgaG9sZCBvcHRpb24gKi8NCj4gKwlib29sIGVu YWJsZV9kcnZfaG9sZDsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBpdDY1MDVfc3RlcF90cmFpbl9w YXJhIHsNCj4gKwl1OCB2b2x0YWdlX3N3aW5nW01BWF9MQU5FX0NPVU5UXTsNCj4gKwl1OCBwcmVf ZW1waGFzaXNbTUFYX0xBTkVfQ09VTlRdOw0KPiArfTsNCj4gKw0KPiArLyoNCj4gKyAqIFZlbmRv ciBvcHRpb24gYWZlIHNldHRpbmdzIGZvciBkaWZmZXJlbnQgcGxhdGZvcm1zDQo+ICsgKiAwOiB3 aXRob3V0IEZQQyBjYWJsZQ0KPiArICogMTogd2l0aCBGUEMgY2FibGUNCj4gKyAqLw0KPiArDQo+ ICtzdGF0aWMgdTggY29uc3QgYWZlX3NldHRpbmdfdGFibGVbXVszXSA9IHsNCj4gKwl7MHg4Miwg MHgwMCwgMHg0NX0sDQo+ICsJezB4OTMsIDB4MkEsIDB4ODV9DQo+ICt9Ow0KPiArDQo+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGl0NjUwNV9hdWRpb19zYW1wbGVfcmF0ZV9tYXAgYXVkaW9fc2FtcGxl X3JhdGVfbWFwW10gPSB7DQo+ICsJe1NBTVBMRV9SQVRFXzI0SywgMjQwMDB9LA0KPiArCXtTQU1Q TEVfUkFURV8zMkssIDMyMDAwfSwNCj4gKwl7U0FNUExFX1JBVEVfNDhLLCA0ODAwMH0sDQo+ICsJ e1NBTVBMRV9SQVRFXzk2SywgOTYwMDB9LA0KPiArCXtTQU1QTEVfUkFURV8xOTJLLCAxOTIwMDB9 LA0KPiArCXtTQU1QTEVfUkFURV80NF8xSywgNDQxMDB9LA0KPiArCXtTQU1QTEVfUkFURV84OF8y SywgODgyMDB9LA0KPiArCXtTQU1QTEVfUkFURV8xNzZfNEssIDE3NjQwMH0sDQo+ICt9Ow0KPiAr DQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9yYW5nZSBpdDY1MDVfYnJpZGdlX3ZvbGF0 aWxlX3Jhbmdlc1tdID0gew0KPiArCXsgLnJhbmdlX21pbiA9IDAsIC5yYW5nZV9tYXggPSAweEZG IH0sDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9hY2Nlc3NfdGFi bGUgaXQ2NTA1X2JyaWRnZV92b2xhdGlsZV90YWJsZSA9IHsNCj4gKwkueWVzX3JhbmdlcyA9IGl0 NjUwNV9icmlkZ2Vfdm9sYXRpbGVfcmFuZ2VzLA0KPiArCS5uX3llc19yYW5nZXMgPSBBUlJBWV9T SVpFKGl0NjUwNV9icmlkZ2Vfdm9sYXRpbGVfcmFuZ2VzKSwNCj4gK307DQo+ICsNCj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBpdDY1MDVfcmVnbWFwX2NvbmZpZyA9IHsNCj4g KwkucmVnX2JpdHMgPSA4LA0KPiArCS52YWxfYml0cyA9IDgsDQo+ICsJLnZvbGF0aWxlX3RhYmxl ID0gJml0NjUwNV9icmlkZ2Vfdm9sYXRpbGVfdGFibGUsDQo+ICsJLmNhY2hlX3R5cGUgPSBSRUdD QUNIRV9OT05FLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGludCBpdDY1MDVfcmVhZChzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDUsIHVuc2lnbmVkIGludCByZWdfYWRkcikNCj4gK3sNCj4gKwl1bnNpZ25l ZCBpbnQgdmFsdWU7DQo+ICsJaW50IGVycjsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2 NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiArCWVyciA9IHJlZ21hcF9yZWFkKGl0NjUwNS0+cmVn bWFwLCByZWdfYWRkciwgJnZhbHVlKTsNCj4gKwlpZiAoZXJyIDwgMCkgew0KPiArCQlEUk1fREVW X0VSUk9SKGRldiwgInJlYWQgZmFpbGVkIHJlZ1sweCV4XSBlcnI6ICVkIiwgcmVnX2FkZHIsDQo+ ICsJCQkgICAgICBlcnIpOw0KPiArCQlyZXR1cm4gZXJyOw0KPiArCX0NCj4gKw0KPiArCXJldHVy biB2YWx1ZTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBpdDY1MDVfd3JpdGUoc3RydWN0IGl0 NjUwNSAqaXQ2NTA1LCB1bnNpZ25lZCBpbnQgcmVnX2FkZHIsDQo+ICsJCSAgICAgIHVuc2lnbmVk IGludCByZWdfdmFsKQ0KPiArew0KPiArCWludCBlcnI7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2 ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsNCj4gKwllcnIgPSByZWdtYXBfd3JpdGUoaXQ2 NTA1LT5yZWdtYXAsIHJlZ19hZGRyLCByZWdfdmFsKTsNCj4gKw0KPiArCWlmIChlcnIgPCAwKSB7 DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAid3JpdGUgZmFpbGVkIHJlZ1sweCV4XSA9IDB4JXgg ZXJyID0gJWQiLA0KPiArCQkJICAgICAgcmVnX2FkZHIsIHJlZ192YWwsIGVycik7DQo+ICsJCXJl dHVybiBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyBpbnQgaXQ2NTA1X3NldF9iaXRzKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdW5zaWduZWQgaW50 IHJlZywNCj4gKwkJCSB1bnNpZ25lZCBpbnQgbWFzaywgdW5zaWduZWQgaW50IHZhbHVlKQ0KPiAr ew0KPiArCWludCBlcnI7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50 LT5kZXY7DQo+ICsNCj4gKwllcnIgPSByZWdtYXBfdXBkYXRlX2JpdHMoaXQ2NTA1LT5yZWdtYXAs IHJlZywgbWFzaywgdmFsdWUpOw0KPiArCWlmIChlcnIgPCAwKSB7DQo+ICsJCURSTV9ERVZfRVJS T1IoDQo+ICsJCQlkZXYsICJ3cml0ZSByZWdbMHgleF0gPSAweCV4IG1hc2sgPSAweCV4IGZhaWxl ZCBlcnIgJWQiLA0KPiArCQkJcmVnLCB2YWx1ZSwgbWFzaywgZXJyKTsNCj4gKwkJcmV0dXJuIGVy cjsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQg aXQ2NTA1X2RlYnVnX3ByaW50KHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdW5zaWduZWQgaW50IHJl ZywNCj4gKwkJCSAgICAgY29uc3QgY2hhciAqcHJlZml4KQ0KPiArew0KPiArCXN0cnVjdCBkZXZp Y2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiArCWludCB2YWw7DQo+ICsNCj4gKwlp ZiAobGlrZWx5KCEoX19kcm1fZGVidWcgJiBEUk1fVVRfRFJJVkVSKSkpDQo+ICsJCXJldHVybjsN Cj4gKw0KPiArCXZhbCA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgcmVnKTsNCj4gKwlpZiAodmFsIDwg MCkNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiJXMgcmVnWyUwMnhdIHJlYWQgZXJy b3IgKCVkKSIsDQo+ICsJCQkJICAgICBwcmVmaXgsIHJlZywgdmFsKTsNCj4gKwllbHNlDQo+ICsJ CURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIiVzIHJlZ1slMDJ4XSA9IDB4JTAyeCIsIHByZWZp eCwgcmVnLA0KPiArCQkJCSAgICAgdmFsKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBpdDY1 MDVfZHBjZF9yZWFkKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdW5zaWduZWQgbG9uZyBvZmZzZXQp DQo+ICt7DQo+ICsJdTggdmFsdWU7DQo+ICsJaW50IHJldDsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiArCXJldCA9IGRybV9kcF9kcGNkX3Jl YWRiKCZpdDY1MDUtPmF1eCwgb2Zmc2V0LCAmdmFsdWUpOw0KPiArCWlmIChyZXQgPCAwKSB7DQo+ ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRFBDRCByZWFkIGZhaWxlZCBbMHglbHhdIHJldDogJWQi LCBvZmZzZXQsDQo+ICsJCQkgICAgICByZXQpOw0KPiArCQlyZXR1cm4gcmV0Ow0KPiArCX0NCj4g KwlyZXR1cm4gdmFsdWU7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X2RwY2Rfd3Jp dGUoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LCB1bnNpZ25lZCBsb25nIG9mZnNldCwNCj4gKwkJCSAg ICAgdW5zaWduZWQgbG9uZyBkYXRhaW4pDQo+ICt7DQo+ICsJaW50IHJldDsNCj4gKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiArCXJldCA9IGRybV9k cF9kcGNkX3dyaXRlYigmaXQ2NTA1LT5hdXgsIG9mZnNldCwgZGF0YWluKTsNCj4gKwlpZiAocmV0 IDwgMCkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkRQQ0Qgd3JpdGUgZmFpbGVkIFsweCVs eF0gcmV0OiAlZCIsIG9mZnNldCwNCj4gKwkJCSAgICAgIHJldCk7DQo+ICsJCXJldHVybiByZXQ7 DQo+ICsJfQ0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGl0NjUwNV9n ZXRfZHBjZChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsIGludCBvZmZzZXQsIHU4ICpkcGNkLCBpbnQg bnVtKQ0KPiArew0KPiArCWludCByZXQ7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUw NS0+Y2xpZW50LT5kZXY7DQo+ICsNCj4gKwlyZXQgPSBkcm1fZHBfZHBjZF9yZWFkKCZpdDY1MDUt PmF1eCwgb2Zmc2V0LCBkcGNkLCBudW0pOw0KPiArDQo+ICsJaWYgKHJldCA8IDApDQo+ICsJCXJl dHVybiByZXQ7DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJyZXQgPSAlZCBE UENEWzB4JXhdID0gMHglKnBoIiwgcmV0LCBvZmZzZXQsDQo+ICsJCQkgICAgIG51bSwgZHBjZCk7 DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2R1 bXAoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCXVuc2lnbmVkIGludCBpLCBqOw0K PiArCXU4IHJlZ3NbMTZdOw0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVu dC0+ZGV2Ow0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8PSAweGZmOyBpICs9IDE2KSB7DQo+ICsJ CWZvciAoaiA9IDA7IGogPCAxNjsgaisrKQ0KPiArCQkJcmVnc1tqXSA9IGl0NjUwNV9yZWFkKGl0 NjUwNSwgaSArIGopOw0KPiArDQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlsweCUw MnhdID0gJTE2cGgiLCBpLCByZWdzKTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBib29s IGl0NjUwNV9nZXRfc2lua19ocGRfc3RhdHVzKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sN Cj4gKwlpbnQgcmVnXzBkOw0KPiArDQo+ICsJcmVnXzBkID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBS RUdfU1lTVEVNX1NUUyk7DQo+ICsNCj4gKwlpZiAocmVnXzBkIDwgMCkNCj4gKwkJcmV0dXJuIGZh bHNlOw0KPiArDQo+ICsJcmV0dXJuICEhKHJlZ18wZCAmIEhQRF9TVFMpOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgaW50IGl0NjUwNV9yZWFkX3dvcmQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LCB1bnNp Z25lZCBpbnQgcmVnKQ0KPiArew0KPiArCWludCB2YWwwLCB2YWwxOw0KPiArDQo+ICsJdmFsMCA9 IGl0NjUwNV9yZWFkKGl0NjUwNSwgcmVnKTsNCj4gKwlpZiAodmFsMCA8IDApDQo+ICsJCXJldHVy biB2YWwwOw0KPiArDQo+ICsJdmFsMSA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgcmVnICsgMSk7DQo+ ICsJaWYgKHZhbDEgPCAwKQ0KPiArCQlyZXR1cm4gdmFsMTsNCj4gKw0KPiArCXJldHVybiAodmFs MSA8PCA4KSB8IHZhbDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9jYWxjX3Zp ZGVvX2luZm8oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCXN0cnVjdCBkZXZpY2Ug KmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiArCWludCBoc3luY19wb2wsIHZzeW5jX3Bv bCwgaW50ZXJsYWNlZDsNCj4gKwlpbnQgaHRvdGFsLCBoZGVzLCBoZGV3LCBoZnBoLCBoc3luY3c7 DQo+ICsJaW50IHZ0b3RhbCwgdmRlcywgdmRldywgdmZwaCwgdnN5bmN3Ow0KPiArCWludCByZGRh dGEsIGksIHBjbGssIHN1bSA9IDA7DQo+ICsNCj4gKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDE1MDAw KTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQkFOS19TRUwsIDB4MDApOw0KPiArCXJk ZGF0YSA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX0lOUFVUX0NUUkwpOw0KPiArCWhzeW5jX3Bv bCA9IHJkZGF0YSAmIElOUFVUX0hTWU5DX1BPTDsNCj4gKwl2c3luY19wb2wgPSAocmRkYXRhICYg SU5QVVRfVlNZTkNfUE9MKSA+PiAyOw0KPiArCWludGVybGFjZWQgPSAocmRkYXRhICYgSU5QVVRf SU5URVJMQUNFRCkgPj4gNDsNCj4gKw0KPiArCWh0b3RhbCA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2 NTA1LCBSRUdfSU5QVVRfSFRPVEFMKSAmIDB4MUZGRjsNCj4gKwloZGVzID0gaXQ2NTA1X3JlYWRf d29yZChpdDY1MDUsIFJFR19JTlBVVF9IQUNUSVZFX1NUQVJUKSAmIDB4MUZGRjsNCj4gKwloZGV3 ID0gaXQ2NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19JTlBVVF9IQUNUSVZFX1dJRFRIKSAmIDB4 MUZGRjsNCj4gKwloZnBoID0gaXQ2NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19JTlBVVF9IRlJP TlRfUE9SQ0gpICYgMHgxRkZGOw0KPiArCWhzeW5jdyA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2NTA1 LCBSRUdfSU5QVVRfSFNZTkNfV0lEVEgpICYgMHgxRkZGOw0KPiArDQo+ICsJdnRvdGFsID0gaXQ2 NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19JTlBVVF9WVE9UQUwpICYgMHhGRkY7DQo+ICsJdmRl cyA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2NTA1LCBSRUdfSU5QVVRfVkFDVElWRV9TVEFSVCkgJiAw eEZGRjsNCj4gKwl2ZGV3ID0gaXQ2NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19JTlBVVF9WQUNU SVZFX1dJRFRIKSAmIDB4RkZGOw0KPiArCXZmcGggPSBpdDY1MDVfcmVhZF93b3JkKGl0NjUwNSwg UkVHX0lOUFVUX1ZGUk9OVF9QT1JDSCkgJiAweEZGRjsNCj4gKwl2c3luY3cgPSBpdDY1MDVfcmVh ZF93b3JkKGl0NjUwNSwgUkVHX0lOUFVUX1ZTWU5DX1dJRFRIKSAmIDB4RkZGOw0KPiArDQo+ICsJ RFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiaHN5bmNfcG9sOiVkLCB2c3luY19wb2w6JWQsIGlu dGVybGFjZWQ6JWQiLA0KPiArCQkJICAgICBoc3luY19wb2wsIHZzeW5jX3BvbCwgaW50ZXJsYWNl ZCk7DQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiaGFjdGl2ZV9zdGFydDolZCwgdmFj dGl2ZV9zdGFydDolZCIsDQo+ICsJCQkgICAgIGhkZXMsIHZkZXMpOw0KPiArDQo+ICsJZm9yIChp ID0gMDsgaSA8IDEwOyBpKyspIHsNCj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RB VEFfQ1RSTDAsIEVOQUJMRV9QQ0xLX0NPVU5URVIsDQo+ICsJCQkJRU5BQkxFX1BDTEtfQ09VTlRF Uik7DQo+ICsJCXVzbGVlcF9yYW5nZSgxMDAwMCwgMTUwMDApOw0KPiArCQlpdDY1MDVfc2V0X2Jp dHMoaXQ2NTA1LCBSRUdfREFUQV9DVFJMMCwgRU5BQkxFX1BDTEtfQ09VTlRFUiwNCj4gKwkJCQkw eDAwKTsNCj4gKwkJcmRkYXRhID0gaXQ2NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19QQ0xLX0NP VU5URVJfVkFMVUUpICYNCj4gKwkJCSAweEZGRjsNCj4gKw0KPiArCQlzdW0gKz0gcmRkYXRhOw0K PiArCX0NCj4gKw0KPiArCWlmIChzdW0gPT0gMCkgew0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZF UihkZXYsICJjYWxjIHZpZGVvIHRpbWluZyBlcnJvciIpOw0KPiArCQlyZXR1cm47DQo+ICsJfQ0K PiArDQo+ICsJc3VtIC89IDEwOw0KPiArCXBjbGsgPSAxMzUwMCAqIDIwNDggLyBzdW07DQo+ICsJ aXQ2NTA1LT52aWRlb19pbmZvLmNsb2NrID0gcGNsazsNCj4gKwlpdDY1MDUtPnZpZGVvX2luZm8u aGRpc3BsYXkgPSBoZGV3Ow0KPiArCWl0NjUwNS0+dmlkZW9faW5mby5oc3luY19zdGFydCA9IGhk ZXcgKyBoZnBoOw0KPiArCWl0NjUwNS0+dmlkZW9faW5mby5oc3luY19lbmQgPSBoZGV3ICsgaGZw aCArIGhzeW5jdzsNCj4gKwlpdDY1MDUtPnZpZGVvX2luZm8uaHRvdGFsID0gaHRvdGFsOw0KPiAr CWl0NjUwNS0+dmlkZW9faW5mby52ZGlzcGxheSA9IHZkZXc7DQo+ICsJaXQ2NTA1LT52aWRlb19p bmZvLnZzeW5jX3N0YXJ0ID0gdmRldyArIHZmcGg7DQo+ICsJaXQ2NTA1LT52aWRlb19pbmZvLnZz eW5jX2VuZCA9IHZkZXcgKyB2ZnBoICsgdnN5bmN3Ow0KPiArCWl0NjUwNS0+dmlkZW9faW5mby52 dG90YWwgPSB2dG90YWw7DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsIERSTV9N T0RFX0ZNVCwNCj4gKwkJCSAgICAgRFJNX01PREVfQVJHKCZpdDY1MDUtPnZpZGVvX2luZm8pKTsN Cj4gK30NCj4gKw0KPiArc3RhdGljIGludCBpdDY1MDVfZHJtX2RwX2xpbmtfcHJvYmUoc3RydWN0 IGRybV9kcF9hdXggKmF1eCwNCj4gKwkJCQkgICAgc3RydWN0IGl0NjUwNV9kcm1fZHBfbGluayAq bGluaykNCj4gK3sNCj4gKwl1OCB2YWx1ZXNbM107DQo+ICsJaW50IGVycjsNCj4gKw0KPiArCW1l bXNldChsaW5rLCAwLCBzaXplb2YoKmxpbmspKTsNCj4gKw0KPiArCWVyciA9IGRybV9kcF9kcGNk X3JlYWQoYXV4LCBEUF9EUENEX1JFViwgdmFsdWVzLCBzaXplb2YodmFsdWVzKSk7DQo+ICsJaWYg KGVyciA8IDApDQo+ICsJCXJldHVybiBlcnI7DQo+ICsNCj4gKwlsaW5rLT5yZXZpc2lvbiA9IHZh bHVlc1swXTsNCj4gKwlsaW5rLT5yYXRlID0gZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKHZh bHVlc1sxXSk7DQo+ICsJbGluay0+bnVtX2xhbmVzID0gdmFsdWVzWzJdICYgRFBfTUFYX0xBTkVf Q09VTlRfTUFTSzsNCj4gKw0KPiArCWlmICh2YWx1ZXNbMl0gJiBEUF9FTkhBTkNFRF9GUkFNRV9D QVApDQo+ICsJCWxpbmstPmNhcGFiaWxpdGllcyA9IDE7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4g K30NCj4gKw0KPiArc3RhdGljIGludCBpdDY1MDVfZHJtX2RwX2xpbmtfcG93ZXJfdXAoc3RydWN0 IGRybV9kcF9hdXggKmF1eCwNCj4gKwkJCQkgICAgICAgc3RydWN0IGl0NjUwNV9kcm1fZHBfbGlu ayAqbGluaykNCj4gK3sNCj4gKwl1OCB2YWx1ZTsNCj4gKwlpbnQgZXJyOw0KPiArDQo+ICsJLyog RFBfU0VUX1BPV0VSIHJlZ2lzdGVyIGlzIG9ubHkgYXZhaWxhYmxlIG9uIERQQ0QgdjEuMSBhbmQg bGF0ZXIgKi8NCj4gKwlpZiAobGluay0+cmV2aXNpb24gPCAweDExKQ0KPiArCQlyZXR1cm4gMDsN Cj4gKw0KPiArCWVyciA9IGRybV9kcF9kcGNkX3JlYWRiKGF1eCwgRFBfU0VUX1BPV0VSLCAmdmFs dWUpOw0KPiArCWlmIChlcnIgPCAwKQ0KPiArCQlyZXR1cm4gZXJyOw0KPiArDQo+ICsJdmFsdWUg Jj0gfkRQX1NFVF9QT1dFUl9NQVNLOw0KPiArCXZhbHVlIHw9IERQX1NFVF9QT1dFUl9EMDsNCj4g Kw0KPiArCWVyciA9IGRybV9kcF9kcGNkX3dyaXRlYihhdXgsIERQX1NFVF9QT1dFUiwgdmFsdWUp Ow0KPiArCWlmIChlcnIgPCAwKQ0KPiArCQlyZXR1cm4gZXJyOw0KPiArDQo+ICsJLyoNCj4gKwkg KiBBY2NvcmRpbmcgdG8gdGhlIERQIDEuMSBzcGVjaWZpY2F0aW9uLCBhICJTaW5rIERldmljZSBt dXN0IGV4aXQgdGhlDQo+ICsJICogcG93ZXIgc2F2aW5nIHN0YXRlIHdpdGhpbiAxIG1zIiAoU2Vj dGlvbiAyLjUuMy4xLCBUYWJsZSA1LTUyLCAiU2luaw0KPiArCSAqIENvbnRyb2wgRmllbGQiIChy ZWdpc3RlciAweDYwMCkuDQo+ICsJICovDQo+ICsJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOw0K PiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9jbGVh cl9pbnQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWl0NjUwNV93cml0ZShpdDY1 MDUsIFJFR19CQU5LX1NFTCwgMHgwMCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5UX1NU QVRVU18wMSwgMHhGRik7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5UX1NUQVRVU18wMiwg MHhGRik7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5UX1NUQVRVU18wMywgMHhGRik7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9pbnRfbWFza19lbmFibGUoc3RydWN0IGl0 NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19CQU5LX1NF TCwgMHgwMCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5UX01BU0tfMDEsIDB4MUYpOw0K PiArCWl0NjUwNV93cml0ZShpdDY1MDUsIElOVF9NQVNLXzAyLCAweDA3KTsNCj4gKwlpdDY1MDVf d3JpdGUoaXQ2NTA1LCBJTlRfTUFTS18wMywgMHhCMCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2 b2lkIGl0NjUwNV9pbnRfbWFza19kaXNhYmxlKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sN Cj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQkFOS19TRUwsIDB4MDApOw0KPiArCWl0NjUw NV93cml0ZShpdDY1MDUsIElOVF9NQVNLXzAxLCAweDAwKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2 NTA1LCBJTlRfTUFTS18wMiwgMHgwMCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5UX01B U0tfMDMsIDB4MDApOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfbGFuZV90ZXJt aW5hdGlvbl9vbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaW50IHJlZ2NmOw0K PiArDQo+ICsJcmVnY2YgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19VU0VSX0RSVl9QUkUpOw0K PiArDQo+ICsJaWYgKHJlZ2NmID09IDB4RjApDQo+ICsJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUs IFJFR19EUlZfTE5fREFUQV9TRUwsIDB4ODAsIDB4MDApOw0KPiArDQo+ICsJaWYgKHJlZ2NmID09 IDB4NzApIHsNCj4gKwkJaWYgKGl0NjUwNS0+bGFuZV9zd2FwKSB7DQo+ICsJCQlzd2l0Y2ggKGl0 NjUwNS0+bGFuZV9jb3VudCkgew0KPiArCQkJY2FzZSAxOg0KPiArCQkJY2FzZSAyOg0KPiArCQkJ CWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EUlZfTE5fREFUQV9TRUwsDQo+ICsJCQkJCQkw eDBDLCAweDA4KTsNCj4gKwkJCQlicmVhazsNCj4gKwkJCWRlZmF1bHQ6DQo+ICsJCQkJaXQ2NTA1 X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RSVl9MTl9EQVRBX1NFTCwNCj4gKwkJCQkJCTB4MEMsIDB4 MEMpOw0KPiArCQkJCWJyZWFrOw0KPiArCQkJfQ0KPiArCQl9IGVsc2Ugew0KPiArCQkJc3dpdGNo IChpdDY1MDUtPmxhbmVfY291bnQpIHsNCj4gKwkJCWNhc2UgMToNCj4gKwkJCWNhc2UgMjoNCj4g KwkJCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfRFJWX0xOX0RBVEFfU0VMLA0KPiArCQkJ CQkJMHgwQywgMHgwNCk7DQo+ICsJCQkJYnJlYWs7DQo+ICsJCQlkZWZhdWx0Og0KPiArCQkJCWl0 NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EUlZfTE5fREFUQV9TRUwsDQo+ICsJCQkJCQkweDBD LCAweDBDKTsNCj4gKwkJCQlicmVhazsNCj4gKwkJCX0NCj4gKwkJfQ0KPiArCX0NCj4gK30NCj4g Kw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2xhbmVfdGVybWluYXRpb25fb2ZmKHN0cnVjdCBpdDY1 MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlpbnQgcmVnY2Y7DQo+ICsNCj4gKwlyZWdjZiA9IGl0NjUw NV9yZWFkKGl0NjUwNSwgUkVHX1VTRVJfRFJWX1BSRSk7DQo+ICsNCj4gKwlpZiAocmVnY2YgPT0g MHhGMCkNCj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RSVl9MTl9EQVRBX1NFTCwg MHg4MCwgMHg4MCk7DQo+ICsNCj4gKwlpZiAocmVnY2YgPT0gMHg3MCkNCj4gKwkJaXQ2NTA1X3Nl dF9iaXRzKGl0NjUwNSwgUkVHX0RSVl9MTl9EQVRBX1NFTCwgMHgwQywgMHgwMCk7DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9sYW5lX3Bvd2VyX29uKHN0cnVjdCBpdDY1MDUgKml0 NjUwNSkNCj4gK3sNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfTElOS19EUlYsIDB4 RjEsDQo+ICsJCQkoaXQ2NTA1LT5sYW5lX3N3YXAgPw0KPiArCQkJCSBHRU5NQVNLKDcsIDggLSBp dDY1MDUtPmxhbmVfY291bnQpIDoNCj4gKwkJCQkgR0VOTUFTSygzICsgaXQ2NTA1LT5sYW5lX2Nv dW50LCA0KSkgfA0KPiArCQkJCTB4MDEpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1 MDVfbGFuZV9wb3dlcl9vZmYoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWl0NjUw NV9zZXRfYml0cyhpdDY1MDUsIFJFR19MSU5LX0RSViwgMHhGMCwgMHgwMCk7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9sYW5lX29mZihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ ICt7DQo+ICsJaXQ2NTA1X2xhbmVfcG93ZXJfb2ZmKGl0NjUwNSk7DQo+ICsJaXQ2NTA1X2xhbmVf dGVybWluYXRpb25fb2ZmKGl0NjUwNSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUw NV9hdXhfdGVybWluYXRpb25fb24oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWlu dCByZWdjZjsNCj4gKw0KPiArCXJlZ2NmID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfVVNFUl9E UlZfUFJFKTsNCj4gKw0KPiArCWlmIChyZWdjZiA9PSAweEYwKQ0KPiArCQlpdDY1MDVfbGFuZV90 ZXJtaW5hdGlvbl9vbihpdDY1MDUpOw0KPiArDQo+ICsJaWYgKHJlZ2NmID09IDB4NzApDQo+ICsJ CWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EUlZfTE5fREFUQV9TRUwsIDB4ODAsIDB4ODAp Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfYXV4X3Bvd2VyX29uKHN0cnVjdCBp dDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfQVVY LCAweDAyLCAweDAyKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2F1eF9vbihz dHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaXQ2NTA1X2F1eF9wb3dlcl9vbihpdDY1 MDUpOw0KPiArCWl0NjUwNV9hdXhfdGVybWluYXRpb25fb24oaXQ2NTA1KTsNCj4gK30NCj4gKw0K PiArc3RhdGljIHZvaWQgaXQ2NTA1X2F1eF9yZXNldChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ ICt7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1JFU0VUX0NUUkwsIEFVWF9SRVNF VCwgQVVYX1JFU0VUKTsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfUkVTRVRfQ1RS TCwgQVVYX1JFU0VULCAweDAwKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X3Jl c2V0X2xvZ2ljKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlyZWdtYXBfd3JpdGUo aXQ2NTA1LT5yZWdtYXAsIFJFR19SRVNFVF9DVFJMLCBBTExfTE9HSUNfUkVTRVQpOw0KPiArCXVz bGVlcF9yYW5nZSgxMDAwLCAxNTAwKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGJvb2wgaXQ2NTA1 X2F1eF9vcF9maW5pc2hlZChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaW50IHJl ZzJiID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfQVVYX0NNRF9SRVEpOw0KPiArDQo+ICsJaWYg KHJlZzJiIDwgMCkNCj4gKwkJcmV0dXJuIGZhbHNlOw0KPiArDQo+ICsJcmV0dXJuIChyZWcyYiAm IEFVWF9CVVNZKSA9PSAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGl0NjUwNV9hdXhfd2Fp dChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaW50IHN0YXR1czsNCj4gKwl1bnNp Z25lZCBsb25nIHRpbWVvdXQ7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xp ZW50LT5kZXY7DQo+ICsNCj4gKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMo QVVYX1dBSVRfVElNRU9VVF9NUykgKyAxOw0KPiArDQo+ICsJd2hpbGUgKCFpdDY1MDVfYXV4X29w X2ZpbmlzaGVkKGl0NjUwNSkpIHsNCj4gKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91 dCkpIHsNCj4gKwkJCURSTV9ERVZfRVJST1IoZGV2LCAiVGltZWQgb3V0IHdhaXRpbmcgQVVYIHRv IGZpbmlzaCIpOw0KPiArCQkJcmV0dXJuIC1FVElNRURPVVQ7DQo+ICsJCX0NCj4gKwkJdXNsZWVw X3JhbmdlKDEwMDAsIDIwMDApOw0KPiArCX0NCj4gKw0KPiArCXN0YXR1cyA9IGl0NjUwNV9yZWFk KGl0NjUwNSwgUkVHX0FVWF9FUlJPUl9TVFMpOw0KPiArCWlmIChzdGF0dXMgPCAwKSB7DQo+ICsJ CURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHJlYWQgQVVYIGNoYW5uZWw6ICVkIiwgc3Rh dHVzKTsNCj4gKwkJcmV0dXJuIHN0YXR1czsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4g K30NCj4gKw0KPiArc3RhdGljIHNzaXplX3QgaXQ2NTA1X2F1eF9vcGVyYXRpb24oc3RydWN0IGl0 NjUwNSAqaXQ2NTA1LA0KPiArCQkJCSAgICBlbnVtIGF1eF9jbWRfdHlwZSBjbWQsDQo+ICsJCQkJ ICAgIHVuc2lnbmVkIGludCBhZGRyZXNzLCB1OCAqYnVmZmVyLA0KPiArCQkJCSAgICBzaXplX3Qg c2l6ZSwgZW51bSBhdXhfY21kX3JlcGx5ICpyZXBseSkNCj4gK3sNCj4gKwlpbnQgaSwgcmV0Ow0K PiArCWJvb2wgYXV4X3dyaXRlX2NoZWNrID0gZmFsc2U7DQo+ICsNCj4gKwlpZiAoIWl0NjUwNV9n ZXRfc2lua19ocGRfc3RhdHVzKGl0NjUwNSkpDQo+ICsJCXJldHVybiAtRUlPOw0KPiArDQo+ICsJ Lyogc2V0IEFVWCB1c2VyIG1vZGUgKi8NCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdf QVVYX0NUUkwsIEFVWF9VU0VSX01PREUsIEFVWF9VU0VSX01PREUpOw0KPiArDQo+ICthdXhfb3Bf c3RhcnQ6DQo+ICsJaWYgKGNtZCA9PSBDTURfQVVYX0kyQ19FRElEX1JFQUQpIHsNCj4gKwkJLyog QVVYIEVESUQgRklGTyBoYXMgbWF4IGxlbmd0aCBvZiBBVVhfRklGT19NQVhfU0laRSBieXRlcy4g Ki8NCj4gKwkJc2l6ZSA9IG1pbl90KHNpemVfdCwgc2l6ZSwgQVVYX0ZJRk9fTUFYX1NJWkUpOw0K PiArCQkvKiBFbmFibGUgQVVYIEZJRk8gcmVhZCBiYWNrIGFuZCBjbGVhciBGSUZPICovDQo+ICsJ CWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19BVVhfQ1RSTCwNCj4gKwkJCQlBVVhfRU5fRklG T19SRUFEIHwgQ0xSX0VESURfRklGTywNCj4gKwkJCQlBVVhfRU5fRklGT19SRUFEIHwgQ0xSX0VE SURfRklGTyk7DQo+ICsNCj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0FVWF9DVFJM LA0KPiArCQkJCUFVWF9FTl9GSUZPX1JFQUQgfCBDTFJfRURJRF9GSUZPLA0KPiArCQkJCUFVWF9F Tl9GSUZPX1JFQUQpOw0KPiArCX0gZWxzZSB7DQo+ICsJCS8qIFRoZSBEUCBBVVggdHJhbnNtaXQg YnVmZmVyIGhhcyA0IGJ5dGVzLiAqLw0KPiArCQlzaXplID0gbWluX3Qoc2l6ZV90LCBzaXplLCA0 KTsNCj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0FVWF9DVFJMLCBBVVhfTk9fU0VH TUVOVF9XUiwNCj4gKwkJCQlBVVhfTk9fU0VHTUVOVF9XUik7DQo+ICsJfQ0KPiArDQo+ICsJLyog U3RhcnQgQWRkcmVzc1s3OjBdICovDQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVWF9B RFJfMF83LCAoYWRkcmVzcyA+PiAwKSAmIDB4RkYpOw0KPiArCS8qIFN0YXJ0IEFkZHJlc3NbMTU6 OF0gKi8NCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVYX0FEUl84XzE1LCAoYWRkcmVz cyA+PiA4KSAmIDB4RkYpOw0KPiArCS8qIFdyaXRlTnVtWzM6MF0rU3RhcnRBZHJbMTk6MTZdICov DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVWF9BRFJfMTZfMTksDQo+ICsJCSAgICAg KChhZGRyZXNzID4+IDE2KSAmIDB4MEYpIHwgKChzaXplIC0gMSkgPDwgNCkpOw0KPiArDQo+ICsJ aWYgKGNtZCA9PSBDTURfQVVYX05BVElWRV9XUklURSkNCj4gKwkJcmVnbWFwX2J1bGtfd3JpdGUo aXQ2NTA1LT5yZWdtYXAsIFJFR19BVVhfT1VUX0RBVEEwLCBidWZmZXIsDQo+ICsJCQkJICBzaXpl KTsNCj4gKw0KPiArCS8qIEF1eCBGaXJlICovDQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVH X0FVWF9DTURfUkVRLCBjbWQpOw0KPiArDQo+ICsJcmV0ID0gaXQ2NTA1X2F1eF93YWl0KGl0NjUw NSk7DQo+ICsJaWYgKHJldCA8IDApDQo+ICsJCWdvdG8gYXV4X29wX2VycjsNCj4gKw0KPiArCXJl dCA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX0FVWF9FUlJPUl9TVFMpOw0KPiArCWlmIChyZXQg PCAwKQ0KPiArCQlnb3RvIGF1eF9vcF9lcnI7DQo+ICsNCj4gKwlzd2l0Y2ggKChyZXQgPj4gNikg JiAweDMpIHsNCj4gKwljYXNlIDA6DQo+ICsJCSpyZXBseSA9IFJFUExZX0FDSzsNCj4gKwkJYnJl YWs7DQo+ICsJY2FzZSAxOg0KPiArCQkqcmVwbHkgPSBSRVBMWV9ERUZFUjsNCj4gKwkJcmV0ID0g LUVBR0FJTjsNCj4gKwkJZ290byBhdXhfb3BfZXJyOw0KPiArCWNhc2UgMjoNCj4gKwkJKnJlcGx5 ID0gUkVQTFlfTkFDSzsNCj4gKwkJcmV0ID0gLUVJTzsNCj4gKwkJZ290byBhdXhfb3BfZXJyOw0K PiArCWNhc2UgMzoNCj4gKwkJcmV0ID0gLUVUSU1FRE9VVDsNCj4gKwkJZ290byBhdXhfb3BfZXJy Ow0KPiArCX0NCj4gKw0KPiArCS8qIFJlYWQgYmFjayBOYXRpdmUgV3JpdGUgZGF0YSAqLw0KPiAr CWlmIChjbWQgPT0gQ01EX0FVWF9OQVRJVkVfV1JJVEUpIHsNCj4gKwkJYXV4X3dyaXRlX2NoZWNr ID0gdHJ1ZTsNCj4gKwkJY21kID0gQ01EX0FVWF9OQVRJVkVfUkVBRDsNCj4gKwkJZ290byBhdXhf b3Bfc3RhcnQ7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKGNtZCA9PSBDTURfQVVYX0kyQ19FRElEX1JF QUQpIHsNCj4gKwkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgew0KPiArCQkJcmV0ID0gaXQ2 NTA1X3JlYWQoaXQ2NTA1LCBSRUdfQVVYX0RBVEFfRklGTyk7DQo+ICsJCQlpZiAocmV0IDwgMCkN Cj4gKwkJCQlnb3RvIGF1eF9vcF9lcnI7DQo+ICsJCQlidWZmZXJbaV0gPSByZXQ7DQo+ICsJCX0N Cj4gKwl9IGVsc2Ugew0KPiArCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7DQo+ICsJCQly ZXQgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19BVVhfREFUQV8wXzcgKyBpKTsNCj4gKwkJCWlm IChyZXQgPCAwKQ0KPiArCQkJCWdvdG8gYXV4X29wX2VycjsNCj4gKw0KPiArCQkJaWYgKGF1eF93 cml0ZV9jaGVjayAmJiBidWZmZXJbc2l6ZSAtIDEgLSBpXSAhPSByZXQpIHsNCj4gKwkJCQlyZXQg PSAtRUlOVkFMOw0KPiArCQkJCWdvdG8gYXV4X29wX2VycjsNCj4gKwkJCX0NCj4gKw0KPiArCQkJ YnVmZmVyW3NpemUgLSAxIC0gaV0gPSByZXQ7DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4gKwlyZXQg PSBpOw0KPiArDQo+ICthdXhfb3BfZXJyOg0KPiArCWlmIChjbWQgPT0gQ01EX0FVWF9JMkNfRURJ RF9SRUFEKSB7DQo+ICsJCS8qIGNsZWFyIEFVWCBGSUZPICovDQo+ICsJCWl0NjUwNV9zZXRfYml0 cyhpdDY1MDUsIFJFR19BVVhfQ1RSTCwNCj4gKwkJCQlBVVhfRU5fRklGT19SRUFEIHwgQ0xSX0VE SURfRklGTywNCj4gKwkJCQlBVVhfRU5fRklGT19SRUFEIHwgQ0xSX0VESURfRklGTyk7DQo+ICsJ CWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19BVVhfQ1RSTCwNCj4gKwkJCQlBVVhfRU5fRklG T19SRUFEIHwgQ0xSX0VESURfRklGTywgMHgwMCk7DQo+ICsJfQ0KPiArDQo+ICsJLyogTGVhdmUg QVVYIHVzZXIgbW9kZSAqLw0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19BVVhfQ1RS TCwgQVVYX1VTRVJfTU9ERSwgMCk7DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgc3NpemVfdCBpdDY1MDVfYXV4X2RvX3RyYW5zZmVyKHN0cnVjdCBpdDY1MDUgKml0 NjUwNSwNCj4gKwkJCQkgICAgICBlbnVtIGF1eF9jbWRfdHlwZSBjbWQsDQo+ICsJCQkJICAgICAg dW5zaWduZWQgaW50IGFkZHJlc3MsIHU4ICpidWZmZXIsDQo+ICsJCQkJICAgICAgc2l6ZV90IHNp emUsIGVudW0gYXV4X2NtZF9yZXBseSAqcmVwbHkpDQo+ICt7DQo+ICsJaW50IGksIHJldF9zaXpl LCByZXQgPSAwLCByZXF1ZXN0X3NpemU7DQo+ICsNCj4gKwltdXRleF9sb2NrKCZpdDY1MDUtPmF1 eF9sb2NrKTsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSA0KSB7DQo+ICsJCXJlcXVl c3Rfc2l6ZSA9IG1pbigoaW50KXNpemUgLSBpLCA0KTsNCj4gKwkJcmV0X3NpemUgPSBpdDY1MDVf YXV4X29wZXJhdGlvbihpdDY1MDUsIGNtZCwgYWRkcmVzcyArIGksDQo+ICsJCQkJCQlidWZmZXIg KyBpLCByZXF1ZXN0X3NpemUsDQo+ICsJCQkJCQlyZXBseSk7DQo+ICsJCWlmIChyZXRfc2l6ZSA8 IDApIHsNCj4gKwkJCXJldCA9IHJldF9zaXplOw0KPiArCQkJZ290byBhdXhfb3BfZXJyOw0KPiAr CQl9DQo+ICsNCj4gKwkJcmV0ICs9IHJldF9zaXplOw0KPiArCX0NCj4gKw0KPiArYXV4X29wX2Vy cjoNCj4gKwltdXRleF91bmxvY2soJml0NjUwNS0+YXV4X2xvY2spOw0KPiArCXJldHVybiByZXQ7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzc2l6ZV90IGl0NjUwNV9hdXhfdHJhbnNmZXIoc3RydWN0 IGRybV9kcF9hdXggKmF1eCwNCj4gKwkJCQkgICBzdHJ1Y3QgZHJtX2RwX2F1eF9tc2cgKm1zZykN Cj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBjb250YWluZXJfb2YoYXV4LCBzdHJ1 Y3QgaXQ2NTA1LCBhdXgpOw0KPiArCXU4IGNtZDsNCj4gKwlib29sIGlzX2kyYyA9ICEobXNnLT5y ZXF1ZXN0ICYgRFBfQVVYX05BVElWRV9XUklURSk7DQo+ICsJaW50IHJldDsNCj4gKwllbnVtIGF1 eF9jbWRfcmVwbHkgcmVwbHk7DQo+ICsNCj4gKwkvKiBJVDY1MDUgZG9lc24ndCBzdXBwb3J0IGFy Yml0cmFyeSBJMkMgcmVhZCAvIHdyaXRlLiAqLw0KPiArCWlmIChpc19pMmMpDQo+ICsJCXJldHVy biAtRUlOVkFMOw0KPiArDQo+ICsJc3dpdGNoIChtc2ctPnJlcXVlc3QpIHsNCj4gKwljYXNlIERQ X0FVWF9OQVRJVkVfUkVBRDoNCj4gKwkJY21kID0gQ01EX0FVWF9OQVRJVkVfUkVBRDsNCj4gKwkJ YnJlYWs7DQo+ICsJY2FzZSBEUF9BVVhfTkFUSVZFX1dSSVRFOg0KPiArCQljbWQgPSBDTURfQVVY X05BVElWRV9XUklURTsNCj4gKwkJYnJlYWs7DQo+ICsJZGVmYXVsdDoNCj4gKwkJcmV0dXJuIC1F SU5WQUw7DQo+ICsJfQ0KPiArDQo+ICsJcmV0ID0gaXQ2NTA1X2F1eF9kb190cmFuc2ZlcihpdDY1 MDUsIGNtZCwgbXNnLT5hZGRyZXNzLCBtc2ctPmJ1ZmZlciwNCj4gKwkJCQkgICAgIG1zZy0+c2l6 ZSwgJnJlcGx5KTsNCj4gKwlpZiAocmV0IDwgMCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiAr CXN3aXRjaCAocmVwbHkpIHsNCj4gKwljYXNlIFJFUExZX0FDSzoNCj4gKwkJbXNnLT5yZXBseSA9 IERQX0FVWF9OQVRJVkVfUkVQTFlfQUNLOw0KPiArCQlicmVhazsNCj4gKwljYXNlIFJFUExZX05B Q0s6DQo+ICsJCW1zZy0+cmVwbHkgPSBEUF9BVVhfTkFUSVZFX1JFUExZX05BQ0s7DQo+ICsJCWJy ZWFrOw0KPiArCWNhc2UgUkVQTFlfREVGRVI6DQo+ICsJCW1zZy0+cmVwbHkgPSBEUF9BVVhfTkFU SVZFX1JFUExZX0RFRkVSOw0KPiArCQlicmVhazsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gcmV0 Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGl0NjUwNV9nZXRfZWRpZF9ibG9jayh2b2lkICpk YXRhLCB1OCAqYnVmLCB1bnNpZ25lZCBpbnQgYmxvY2ssDQo+ICsJCQkJIHNpemVfdCBsZW4pDQo+ ICt7DQo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gZGF0YTsNCj4gKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKwllbnVtIGF1eF9jbWRfcmVwbHkgcmVw bHk7DQo+ICsJaW50IG9mZnNldCwgcmV0LCBhdXhfcmV0cnkgPSAxMDA7DQo+ICsNCj4gKwlpdDY1 MDVfYXV4X3Jlc2V0KGl0NjUwNSk7DQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiYmxv Y2sgbnVtYmVyID0gJWQiLCBibG9jayk7DQo+ICsNCj4gKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNl dCA8IEVESURfTEVOR1RIOykgew0KPiArCQlyZXQgPSBpdDY1MDVfYXV4X2RvX3RyYW5zZmVyKGl0 NjUwNSwgQ01EX0FVWF9JMkNfRURJRF9SRUFELA0KPiArCQkJCQkgICAgIGJsb2NrICogRURJRF9M RU5HVEggKyBvZmZzZXQsDQo+ICsJCQkJCSAgICAgYnVmICsgb2Zmc2V0LCA4LCAmcmVwbHkpOw0K PiArDQo+ICsJCWlmIChyZXQgPCAwICYmIHJldCAhPSAtRUFHQUlOKQ0KPiArCQkJcmV0dXJuIHJl dDsNCj4gKw0KPiArCQlzd2l0Y2ggKHJlcGx5KSB7DQo+ICsJCWNhc2UgUkVQTFlfQUNLOg0KPiAr CQkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiWzB4JTAyeF06ICU4cGgiLCBvZmZzZXQsDQo+ ICsJCQkJCSAgICAgYnVmICsgb2Zmc2V0KTsNCj4gKwkJCW9mZnNldCArPSA4Ow0KPiArCQkJYXV4 X3JldHJ5ID0gMTAwOw0KPiArCQkJYnJlYWs7DQo+ICsJCWNhc2UgUkVQTFlfTkFDSzoNCj4gKwkJ CXJldHVybiAtRUlPOw0KPiArCQljYXNlIFJFUExZX0RFRkVSOg0KPiArCQkJbXNsZWVwKDIwKTsN Cj4gKwkJCWlmICghKC0tYXV4X3JldHJ5KSkNCj4gKwkJCQlyZXR1cm4gLUVJTzsNCj4gKwkJfQ0K PiArCX0NCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1 MDVfdmFyaWFibGVfY29uZmlnKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlpdDY1 MDUtPmxpbmtfcmF0ZV9id19jb2RlID0gSEJSOw0KPiArCWl0NjUwNS0+bGFuZV9jb3VudCA9IE1B WF9MQU5FX0NPVU5UOw0KPiArCWl0NjUwNS0+bGlua19zdGF0ZSA9IExJTktfSURMRTsNCj4gKwlp dDY1MDUtPmhkY3BfZGVzaXJlZCA9IEhEQ1BfREVTSVJFRDsNCj4gKwlpdDY1MDUtPmF1dG9fdHJh aW5fcmV0cnkgPSBBVVRPX1RSQUlOX1JFVFJZOw0KPiArCWl0NjUwNS0+YXVkaW8uc2VsZWN0ID0g QVVESU9fU0VMRUNUOw0KPiArCWl0NjUwNS0+YXVkaW8uc2FtcGxlX3JhdGUgPSBBVURJT19TQU1Q TEVfUkFURTsNCj4gKwlpdDY1MDUtPmF1ZGlvLmNoYW5uZWxfY291bnQgPSBBVURJT19DSEFOTkVM X0NPVU5UOw0KPiArCWl0NjUwNS0+YXVkaW8udHlwZSA9IEFVRElPX1RZUEU7DQo+ICsJaXQ2NTA1 LT5hdWRpby5pMnNfaW5wdXRfZm9ybWF0ID0gSTJTX0lOUFVUX0ZPUk1BVDsNCj4gKwlpdDY1MDUt PmF1ZGlvLmkyc19qdXN0aWZpZWQgPSBJMlNfSlVTVElGSUVEOw0KPiArCWl0NjUwNS0+YXVkaW8u aTJzX2RhdGFfZGVsYXkgPSBJMlNfREFUQV9ERUxBWTsNCj4gKwlpdDY1MDUtPmF1ZGlvLmkyc193 c19jaGFubmVsID0gSTJTX1dTX0NIQU5ORUw7DQo+ICsJaXQ2NTA1LT5hdWRpby5pMnNfZGF0YV9z ZXF1ZW5jZSA9IEkyU19EQVRBX1NFUVVFTkNFOw0KPiArCWl0NjUwNS0+YXVkaW8ud29yZF9sZW5n dGggPSBBVURJT19XT1JEX0xFTkdUSDsNCj4gKwltZW1zZXQoaXQ2NTA1LT5zaGExX2lucHV0LCAw LCBzaXplb2YoaXQ2NTA1LT5zaGExX2lucHV0KSk7DQo+ICsJbWVtc2V0KGl0NjUwNS0+YmtzdnMs IDAsIHNpemVvZihpdDY1MDUtPmJrc3ZzKSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgaXQ2 NTA1X3NlbmRfdmlkZW9faW5mb2ZyYW1lKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwNCj4gKwkJCQkg ICAgICAgc3RydWN0IGhkbWlfYXZpX2luZm9mcmFtZSAqZnJhbWUpDQo+ICt7DQo+ICsJdTggYnVm ZmVyW0hETUlfSU5GT0ZSQU1FX0hFQURFUl9TSVpFICsgSERNSV9BVklfSU5GT0ZSQU1FX1NJWkVd Ow0KPiArCWludCBlcnI7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50 LT5kZXY7DQo+ICsNCj4gKwllcnIgPSBoZG1pX2F2aV9pbmZvZnJhbWVfcGFjayhmcmFtZSwgYnVm ZmVyLCBzaXplb2YoYnVmZmVyKSk7DQo+ICsJaWYgKGVyciA8IDApIHsNCj4gKwkJRFJNX0RFVl9F UlJPUihkZXYsICJGYWlsZWQgdG8gcGFjayBBVkkgaW5mb2ZyYW1lOiAlZCIsIGVycik7DQo+ICsJ CXJldHVybiBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJZXJyID0gaXQ2NTA1X3NldF9iaXRzKGl0NjUw NSwgUkVHX0lORk9GUkFNRV9DVFJMLCBFTl9BVklfUEtULCAweDAwKTsNCj4gKwlpZiAoZXJyKQ0K PiArCQlyZXR1cm4gZXJyOw0KPiArDQo+ICsJZXJyID0gcmVnbWFwX2J1bGtfd3JpdGUoaXQ2NTA1 LT5yZWdtYXAsIFJFR19BVklfSU5GT19EQjEsDQo+ICsJCQkJYnVmZmVyICsgSERNSV9JTkZPRlJB TUVfSEVBREVSX1NJWkUsDQo+ICsJCQkJZnJhbWUtPmxlbmd0aCk7DQo+ICsJaWYgKGVycikNCj4g KwkJcmV0dXJuIGVycjsNCj4gKw0KPiArCWVyciA9IGl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJF R19JTkZPRlJBTUVfQ1RSTCwgRU5fQVZJX1BLVCwNCj4gKwkJCSAgICAgIEVOX0FWSV9QS1QpOw0K PiArCWlmIChlcnIpDQo+ICsJCXJldHVybiBlcnI7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30N Cj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2dldF9leHRjb25fcHJvcGVydHkoc3RydWN0IGl0 NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWludCBlcnI7DQo+ICsJdW5pb24gZXh0Y29uX3Byb3Bl cnR5X3ZhbHVlIHByb3BlcnR5Ow0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNs aWVudC0+ZGV2Ow0KPiArDQo+ICsJaWYgKGl0NjUwNS0+ZXh0Y29uICYmICFpdDY1MDUtPmxhbmVf c3dhcF9kaXNhYmxlZCkgew0KPiArCQllcnIgPSBleHRjb25fZ2V0X3Byb3BlcnR5KGl0NjUwNS0+ ZXh0Y29uLCBFWFRDT05fRElTUF9EUCwNCj4gKwkJCQkJICBFWFRDT05fUFJPUF9VU0JfVFlQRUNf UE9MQVJJVFksDQo+ICsJCQkJCSAgJnByb3BlcnR5KTsNCj4gKwkJaWYgKGVycikgew0KPiArCQkJ RFJNX0RFVl9FUlJPUihkZXYsICJnZXQgcHJvcGVydHkgZmFpbCEiKTsNCj4gKwkJCXJldHVybjsN Cj4gKwkJfQ0KPiArCQlpdDY1MDUtPmxhbmVfc3dhcCA9IHByb3BlcnR5LmludHZhbDsNCj4gKwl9 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9jbGtfcGhhc2VfYWRqdXN0bWVudChz dHJ1Y3QgaXQ2NTA1ICppdDY1MDUsDQo+ICsJCQkJCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICptb2RlKQ0KPiArew0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19DTEtfQ1RS TDAsIE1fUENMS19ERUxBWSwNCj4gKwkJbW9kZS0+Y2xvY2sgPCBBREpVU1RfUEhBU0VfVEhSRVNI T0xEID8gUElYRUxfQ0xLX0RFTEFZIDogMCk7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwg UkVHX0RBVEFfQ1RSTDAsIFZJREVPX0xBVENIX0VER0UsDQo+ICsJCQlQSVhFTF9DTEtfSU5WRVJT RSA8PCA0KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2luaXQoc3RydWN0IGl0 NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19CQU5LX1NF TCwgMHgwMCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVWF9PUFQsIEFVWF9BVVRP X1JTVCB8IEFVWF9GSVhfRlJFUSk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVWF9D VFJMLCBBVVhfTk9fU0VHTUVOVF9XUik7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0hE Q1BfQ1RSTDIsIEhEQ1BfQU5fU0VMIHwgSERDUF9IV19IUERJUlFfQUNUKTsNCj4gKwlpdDY1MDVf d3JpdGUoaXQ2NTA1LCBSRUdfVklEX0JVU19DVFJMMCwgSU5fRERSIHwgRERSX0NEKTsNCj4gKwlp dDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfVklEX0JVU19DVFJMMSwgMHgwMSk7DQo+ICsJaXQ2NTA1 X3dyaXRlKGl0NjUwNSwgUkVHX0FVRElPX0NUUkwwLCBBVURJT18xNkJfQk9VTkQpOw0KPiArDQo+ ICsJLyogY2hpcCBpbnRlcm5hbCBzZXR0aW5nLCBkb24ndCBtb2RpZnkgKi8NCj4gKwlpdDY1MDVf d3JpdGUoaXQ2NTA1LCBSRUdfSFBEX0lSUV9USU1FLCAweEY1KTsNCj4gKwlpdDY1MDVfd3JpdGUo aXQ2NTA1LCBSRUdfQVVYX0RFQlVHX01PREUsIDB4NEQpOw0KPiArCWl0NjUwNV93cml0ZShpdDY1 MDUsIFJFR19BVVhfT1BUMiwgMHgxNyk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0hE Q1BfT1BULCAweDYwKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfREFUQV9NVVRFX0NU UkwsDQo+ICsJCSAgICAgRU5fVklEX01VVEUgfCBFTl9BVURfTVVURSB8IEVOQUJMRV9BVVRPX1ZJ REVPX0ZJRk9fUkVTRVQpOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19USU1FX1NUTVBf Q1RSTCwNCj4gKwkJICAgICBFTl9TU0NfR0FUIHwgRU5fRU5IQU5DRV9WSURfU1RNUCB8IEVOX0VO SEFOQ0VfQVVEX1NUTVApOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19JTkZPRlJBTUVf Q1RSTCwgMHgwMCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0JBTktfU0VMLCAweDAx KTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfRFJWXzBfREJfODAwX01WLA0KPiArCQkg ICAgIGFmZV9zZXR0aW5nX3RhYmxlW2l0NjUwNS0+YWZlX3NldHRpbmddWzBdKTsNCj4gKwlpdDY1 MDVfd3JpdGUoaXQ2NTA1LCBSRUdfUFJFXzBfREJfODAwX01WLA0KPiArCQkgICAgIGFmZV9zZXR0 aW5nX3RhYmxlW2l0NjUwNS0+YWZlX3NldHRpbmddWzFdKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2 NTA1LCBSRUdfUFJFXzNQNV9EQl84MDBfTVYsDQo+ICsJCSAgICAgYWZlX3NldHRpbmdfdGFibGVb aXQ2NTA1LT5hZmVfc2V0dGluZ11bMl0pOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19T U0NfQ1RSTDAsIDB4OUUpOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19TU0NfQ1RSTDEs IDB4MUMpOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19TU0NfQ1RSTDIsIDB4NDIpOw0K PiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19CQU5LX1NFTCwgMHgwMCk7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkIGl0NjUwNV92aWRlb19kaXNhYmxlKHN0cnVjdCBpdDY1MDUgKml0NjUw NSkNCj4gK3sNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfREFUQV9NVVRFX0NUUkws IEVOX1ZJRF9NVVRFLCBFTl9WSURfTVVURSk7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwg UkVHX0lORk9GUkFNRV9DVFJMLCBFTl9WSURfQ1RSTF9QS1QsIDB4MDApOw0KPiArCWl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCBWSURFT19SRVNFVCwgVklERU9fUkVTRVQp Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfdmlkZW9fcmVzZXQoc3RydWN0IGl0 NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EQVRB X01VVEVfQ1RSTCwgRU5fVklEX01VVEUsIEVOX1ZJRF9NVVRFKTsNCj4gKwlpdDY1MDVfc2V0X2Jp dHMoaXQ2NTA1LCBSRUdfSU5GT0ZSQU1FX0NUUkwsIEVOX1ZJRF9DVFJMX1BLVCwgMHgwMCk7DQo+ ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1JFU0VUX0NUUkwsIFZJREVPX1JFU0VULCBW SURFT19SRVNFVCk7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHXzUwMV9GSUZPX0NU UkwsIFJTVF81MDFfRklGTywgUlNUXzUwMV9GSUZPKTsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2 NTA1LCBSRUdfNTAxX0ZJRk9fQ1RSTCwgUlNUXzUwMV9GSUZPLCAweDAwKTsNCj4gKwlpdDY1MDVf c2V0X2JpdHMoaXQ2NTA1LCBSRUdfUkVTRVRfQ1RSTCwgVklERU9fUkVTRVQsIDB4MDApOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfdXBkYXRlX3ZpZGVvX3BhcmFtZXRlcihzdHJ1 Y3QgaXQ2NTA1ICppdDY1MDUsDQo+ICsJCQkJCSAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKm1vZGUpDQo+ICt7DQo+ICsJaXQ2NTA1X2Nsa19waGFzZV9hZGp1c3RtZW50KGl0NjUwNSwg bW9kZSk7DQo+ICsJaXQ2NTA1X3ZpZGVvX2Rpc2FibGUoaXQ2NTA1KTsNCj4gK30NCj4gKw0KPiAr c3RhdGljIGJvb2wgaXQ2NTA1X2F1ZGlvX2lucHV0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4g K3sNCj4gKwlpbnQgcmVnMDUsIHJlZ2JlOw0KPiArDQo+ICsJcmVnMDUgPSBpdDY1MDVfcmVhZChp dDY1MDUsIFJFR19SRVNFVF9DVFJMKTsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdf UkVTRVRfQ1RSTCwgQVVESU9fUkVTRVQsIDB4MDApOw0KPiArCXVzbGVlcF9yYW5nZSgzMDAwLCA0 MDAwKTsNCj4gKwlyZWdiZSA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX0FVRElPX0lOUFVUX0ZS RVEpOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCByZWcwNSk7DQo+ ICsNCj4gKwlyZXR1cm4gcmVnYmUgIT0gMHhGRjsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQg aXQ2NTA1X3NldHVwX2F1ZGlvX2NoYW5uZWxfc3RhdHVzKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkN Cj4gK3sNCj4gKwllbnVtIGl0NjUwNV9hdWRpb19zYW1wbGVfcmF0ZSBzYW1wbGVfcmF0ZSA9IGl0 NjUwNS0+YXVkaW8uc2FtcGxlX3JhdGU7DQo+ICsJdTggYXVkaW9fd29yZF9sZW5ndGhfbWFwW10g PSB7IDB4MDIsIDB4MDQsIDB4MDMsIDB4MEIgfTsNCj4gKw0KPiArCS8qIENoYW5uZWwgU3RhdHVz ICovDQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0lFQzk1OF9TVFMwLCBpdDY1MDUtPmF1 ZGlvLnR5cGUgPDwgMSk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0lFQzk1OF9TVFMx LCAweDAwKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfSUVDOTU4X1NUUzIsIDB4MDAp Ow0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19JRUM5NThfU1RTMywgc2FtcGxlX3JhdGUp Ow0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19JRUM5NThfU1RTNCwgKH5zYW1wbGVfcmF0 ZSA8PCA0KSB8DQo+ICsJCSAgICAgYXVkaW9fd29yZF9sZW5ndGhfbWFwW2l0NjUwNS0+YXVkaW8u d29yZF9sZW5ndGhdKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X3NldHVwX2F1 ZGlvX2Zvcm1hdChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJLyogSTJTIE1PREUg Ki8NCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVESU9fRk1ULA0KPiArCQkgICAgIChp dDY1MDUtPmF1ZGlvLndvcmRfbGVuZ3RoIDw8IDUpIHwNCj4gKwkJICAgICAoaXQ2NTA1LT5hdWRp by5pMnNfZGF0YV9zZXF1ZW5jZSA8PCA0KSB8DQo+ICsJCSAgICAgKGl0NjUwNS0+YXVkaW8uaTJz X3dzX2NoYW5uZWwgPDwgMykgfA0KPiArCQkgICAgIChpdDY1MDUtPmF1ZGlvLmkyc19kYXRhX2Rl bGF5IDw8IDIpIHwNCj4gKwkJICAgICAoaXQ2NTA1LT5hdWRpby5pMnNfanVzdGlmaWVkIDw8IDEp IHwNCj4gKwkJICAgICBpdDY1MDUtPmF1ZGlvLmkyc19pbnB1dF9mb3JtYXQpOw0KPiArCWlmIChp dDY1MDUtPmF1ZGlvLnNlbGVjdCA9PSBTUERJRikgew0KPiArCQlpdDY1MDVfd3JpdGUoaXQ2NTA1 LCBSRUdfQVVESU9fRklGT19TRUwsIDB4MDApOw0KPiArCQkvKiAweDMwID0gMTI4KkZTICovDQo+ ICsJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19BVVhfT1BULCAweEYwLCAweDMwKTsNCj4g Kwl9IGVsc2Ugew0KPiArCQlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVESU9fRklGT19TRUws IDB4RTQpOw0KPiArCX0NCj4gKw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURJT19D VFJMMCwgMHgyMCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRElPX0NUUkwxLCAw eDAwKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2VuYWJsZV9hdWRpb19zb3Vy Y2Uoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCXVuc2lnbmVkIGludCBhdWRpb19z b3VyY2VfY291bnQ7DQo+ICsNCj4gKwlhdWRpb19zb3VyY2VfY291bnQgPSBCSVQoRElWX1JPVU5E X1VQKGl0NjUwNS0+YXVkaW8uY2hhbm5lbF9jb3VudCwgMikpDQo+ICsJCQkJIC0gMTsNCj4gKw0K PiArCWF1ZGlvX3NvdXJjZV9jb3VudCB8PSBpdDY1MDUtPmF1ZGlvLnNlbGVjdCA8PCA0Ow0KPiAr DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRElPX1NSQ19DVFJMLCBhdWRpb19zb3Vy Y2VfY291bnQpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfZW5hYmxlX2F1ZGlv X2luZm9mcmFtZShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJc3RydWN0IGRldmlj ZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJdTggYXVkaW9faW5mb19jYVtdID0g eyAweDAwLCAweDAwLCAweDAxLCAweDAzLCAweDA3LCAweDBCLCAweDBGLCAweDFGIH07DQo+ICsN Cj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJpbmZvZnJhbWUgY2hhbm5lbF9hbGxvY2F0 aW9uOjB4JTAyeCIsDQo+ICsJCQkgICAgIGF1ZGlvX2luZm9fY2FbaXQ2NTA1LT5hdWRpby5jaGFu bmVsX2NvdW50IC0gMV0pOw0KPiArDQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRF9J TkZPRlJBTV9EQjEsIGl0NjUwNS0+YXVkaW8uY2hhbm5lbF9jb3VudA0KPiArCQkgICAgIC0gMSk7 DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRF9JTkZPRlJBTV9EQjIsIDB4MDApOw0K PiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURfSU5GT0ZSQU1fREIzLA0KPiArCQkgICAg IGF1ZGlvX2luZm9fY2FbaXQ2NTA1LT5hdWRpby5jaGFubmVsX2NvdW50IC0gMV0pOw0KPiArCWl0 NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURfSU5GT0ZSQU1fREI0LCAweDAwKTsNCj4gKwlpdDY1 MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVEX0lORk9GUkFNX1NVTSwgMHgwMCk7DQo+ICsNCj4gKwkv KiBFbmFibGUgQXVkaW8gSW5mb0ZyYW1lICovDQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwg UkVHX0lORk9GUkFNRV9DVFJMLCBFTl9BVURfQ1RSTF9QS1QsDQo+ICsJCQlFTl9BVURfQ1RSTF9Q S1QpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfZGlzYWJsZV9hdWRpbyhzdHJ1 Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVH X0RBVEFfTVVURV9DVFJMLCBFTl9BVURfTVVURSwgRU5fQVVEX01VVEUpOw0KPiArCWl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19BVURJT19TUkNfQ1RSTCwgTV9BVURJT19JMlNfRU4sIDB4MDAp Ow0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19JTkZPRlJBTUVfQ1RSTCwgRU5fQVVE X0NUUkxfUEtULCAweDAwKTsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfUkVTRVRf Q1RSTCwgQVVESU9fUkVTRVQsIEFVRElPX1JFU0VUKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZv aWQgaXQ2NTA1X2VuYWJsZV9hdWRpbyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJ c3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJaW50IHJlZ2Jl Ow0KPiArDQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAic3RhcnQiKTsNCj4gKwlpdDY1 MDVfZGlzYWJsZV9hdWRpbyhpdDY1MDUpOw0KPiArDQo+ICsJaXQ2NTA1X3NldHVwX2F1ZGlvX2No YW5uZWxfc3RhdHVzKGl0NjUwNSk7DQo+ICsJaXQ2NTA1X3NldHVwX2F1ZGlvX2Zvcm1hdChpdDY1 MDUpOw0KPiArCWl0NjUwNV9lbmFibGVfYXVkaW9fc291cmNlKGl0NjUwNSk7DQo+ICsJaXQ2NTA1 X2VuYWJsZV9hdWRpb19pbmZvZnJhbWUoaXQ2NTA1KTsNCj4gKw0KPiArCWl0NjUwNV93cml0ZShp dDY1MDUsIFJFR19BVURJT19OXzBfNywgMHgwMCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwg UkVHX0FVRElPX05fOF8xNSwgMHg4MCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FV RElPX05fMTZfMjMsIDB4MDApOw0KPiArDQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVH X0FVRElPX1NSQ19DVFJMLCBBVURJT19GSUZPX1JFU0VULA0KPiArCQkJQVVESU9fRklGT19SRVNF VCk7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0FVRElPX1NSQ19DVFJMLCBBVURJ T19GSUZPX1JFU0VULCAweDAwKTsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfUkVT RVRfQ1RSTCwgQVVESU9fUkVTRVQsIDB4MDApOw0KPiArCXJlZ2JlID0gaXQ2NTA1X3JlYWQoaXQ2 NTA1LCBSRUdfQVVESU9fSU5QVVRfRlJFUSk7DQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2 LCAicmVnYmU6MHglMDJ4IGF1ZGlvIGlucHV0IGZzOiAlZC4lZCBrSHoiLA0KPiArCQkJICAgICBy ZWdiZSwgNjc1MCAvIHJlZ2JlLCAoNjc1MCAlIHJlZ2JlKSAqIDEwIC8gcmVnYmUpOw0KPiArCWl0 NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EQVRBX01VVEVfQ1RSTCwgRU5fQVVEX01VVEUsIDB4 MDApOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBpdDY1MDVfdXNlX3N0ZXBfdHJhaW5fY2hl Y2soc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWlmIChpdDY1MDUtPmxpbmsucmV2 aXNpb24gPj0gMHgxMikNCj4gKwkJcmV0dXJuIGl0NjUwNS0+ZHBjZFtEUF9UUkFJTklOR19BVVhf UkRfSU5URVJWQUxdID49IDB4MDE7DQo+ICsNCj4gKwlyZXR1cm4gdHJ1ZTsNCj4gK30NCj4gKw0K PiArc3RhdGljIHZvaWQgaXQ2NTA1X3BhcnNlX2xpbmtfY2FwYWJpbGl0aWVzKHN0cnVjdCBpdDY1 MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGll bnQtPmRldjsNCj4gKwlzdHJ1Y3QgaXQ2NTA1X2RybV9kcF9saW5rICpsaW5rID0gJml0NjUwNS0+ bGluazsNCj4gKwlpbnQgYmNhcHM7DQo+ICsNCj4gKwlpZiAoaXQ2NTA1LT5kcGNkWzBdID09IDAp IHsNCj4gKwkJaXQ2NTA1X2F1eF9vbihpdDY1MDUpOw0KPiArCQlpdDY1MDVfZ2V0X2RwY2QoaXQ2 NTA1LCBEUF9EUENEX1JFViwgaXQ2NTA1LT5kcGNkLA0KPiArCQkJCUFSUkFZX1NJWkUoaXQ2NTA1 LT5kcGNkKSk7DQo+ICsJfQ0KPiArDQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiRFBD RCBSZXYuOiAlZC4lZCIsDQo+ICsJCQkgICAgIGxpbmstPnJldmlzaW9uID4+IDQsIGxpbmstPnJl dmlzaW9uICYgMHgwRik7DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJTaW5r IG1heCBsaW5rIHJhdGU6ICVkLiUwMmQgR2JwcyBwZXIgbGFuZSIsDQo+ICsJCQkgICAgIGxpbmst PnJhdGUgLyAxMDAwMDAsIGxpbmstPnJhdGUgLyAxMDAwICUgMTAwKTsNCj4gKw0KPiArCWl0NjUw NS0+bGlua19yYXRlX2J3X2NvZGUgPSBkcm1fZHBfbGlua19yYXRlX3RvX2J3X2NvZGUobGluay0+ cmF0ZSk7DQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAibGluayByYXRlIGJ3IGNvZGU6 MHglMDJ4IiwNCj4gKwkJCSAgICAgaXQ2NTA1LT5saW5rX3JhdGVfYndfY29kZSk7DQo+ICsJaXQ2 NTA1LT5saW5rX3JhdGVfYndfY29kZSA9IG1pbigoaW50KWl0NjUwNS0+bGlua19yYXRlX2J3X2Nv ZGUsDQo+ICsJCQkJCU1BWF9MSU5LX1JBVEUpOw0KPiArDQo+ICsJaXQ2NTA1LT5sYW5lX2NvdW50 ID0gbGluay0+bnVtX2xhbmVzOw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlNpbmsg c3VwcG9ydCAlZCBsYW5lcyB0cmFpbmluZyIsDQo+ICsJCQkgICAgIGl0NjUwNS0+bGFuZV9jb3Vu dCk7DQo+ICsJaXQ2NTA1LT5sYW5lX2NvdW50ID0gbWluKChpbnQpaXQ2NTA1LT5sYW5lX2NvdW50 LCBNQVhfTEFORV9DT1VOVCk7DQo+ICsNCj4gKwlpdDY1MDUtPmJyYW5jaF9kZXZpY2UgPSBkcm1f ZHBfaXNfYnJhbmNoKGl0NjUwNS0+ZHBjZCk7DQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2 LCAiU2luayAlc2JyYW5jaCBkZXZpY2UiLA0KPiArCQkJICAgICBpdDY1MDUtPmJyYW5jaF9kZXZp Y2UgPyAiIiA6ICJOb3QgIik7DQo+ICsNCj4gKwlpdDY1MDUtPmVuYWJsZV9lbmhhbmNlZF9mcmFt ZSA9ICEhbGluay0+Y2FwYWJpbGl0aWVzOw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwg IlNpbmsgJXNTdXBwb3J0IEVuaGFuY2VkIEZyYW1pbmciLA0KPiArCQkJICAgICBpdDY1MDUtPmVu YWJsZV9lbmhhbmNlZF9mcmFtZSA/ICIiIDogIk5vdCAiKTsNCj4gKw0KPiArCWl0NjUwNS0+ZW5h YmxlX3NzYyA9ICEhKGl0NjUwNS0+ZHBjZFtEUF9NQVhfRE9XTlNQUkVBRF0gJg0KPiArCQkJCURQ X01BWF9ET1dOU1BSRUFEXzBfNSk7DQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiTWF4 aW11bSBEb3duLVNwcmVhZDogJXMsICVzc3VwcG9ydCBTU0MhIiwNCj4gKwkJCSAgICAgaXQ2NTA1 LT5lbmFibGVfc3NjID8gIjAuNSIgOiAiMCIsDQo+ICsJCQkgICAgIGl0NjUwNS0+ZW5hYmxlX3Nz YyA/ICIiIDogIk5vdCAiKTsNCj4gKw0KPiArCWl0NjUwNS0+c3RlcF90cmFpbiA9IGl0NjUwNV91 c2Vfc3RlcF90cmFpbl9jaGVjayhpdDY1MDUpOw0KPiArCWlmIChpdDY1MDUtPnN0ZXBfdHJhaW4p DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImF1dG8gdHJhaW4gZmFpbCwgd2lsbCBz dGVwIHRyYWluIik7DQo+ICsNCj4gKwliY2FwcyA9IGl0NjUwNV9kcGNkX3JlYWQoaXQ2NTA1LCBE UF9BVVhfSERDUF9CQ0FQUyk7DQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiYmNhcHM6 MHglMDJ4IiwgYmNhcHMpOw0KPiArCWlmIChiY2FwcyAmIERQX0JDQVBTX0hEQ1BfQ0FQQUJMRSkg ew0KPiArCQlpdDY1MDUtPmlzX3JlcGVhdGVyID0gISEoYmNhcHMgJiBEUF9CQ0FQU19SRVBFQVRF Ul9QUkVTRU5UKTsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiU3VwcG9ydCBIRENQ ISBEb3duc3RyZWFtIGlzICVzISIsDQo+ICsJCQkJICAgICBpdDY1MDUtPmlzX3JlcGVhdGVyID8g InJlcGVhdGVyIiA6DQo+ICsJCQkJICAgICAicmVjZWl2ZXIiKTsNCj4gKwl9IGVsc2Ugew0KPiAr CQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJTaW5rIG5vdCBzdXBwb3J0IEhEQ1AhIik7DQo+ ICsJCWl0NjUwNS0+aGRjcF9kZXNpcmVkID0gZmFsc2U7DQo+ICsJfQ0KPiArCURSTV9ERVZfREVC VUdfRFJJVkVSKGRldiwgIkhEQ1AgJXMiLA0KPiArCQkJICAgICBpdDY1MDUtPmhkY3BfZGVzaXJl ZCA/ICJkZXNpcmVkIiA6ICJ1bmRlc2lyZWQiKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQg aXQ2NTA1X3NldHVwX3NzYyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaXQ2NTA1 X3NldF9iaXRzKGl0NjUwNSwgUkVHX1RSQUlOX0NUUkwwLCBTUFJFQURfQU1QXzUsDQo+ICsJCQlp dDY1MDUtPmVuYWJsZV9zc2MgPyBTUFJFQURfQU1QXzUgOiAweDAwKTsNCj4gKwlpZiAoaXQ2NTA1 LT5lbmFibGVfc3NjKSB7DQo+ICsJCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19CQU5LX1NFTCwg MHgwMSk7DQo+ICsJCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19TU0NfQ1RSTDAsIDB4OUUpOw0K PiArCQlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfU1NDX0NUUkwxLCAweDFDKTsNCj4gKwkJaXQ2 NTA1X3dyaXRlKGl0NjUwNSwgUkVHX1NTQ19DVFJMMiwgMHg0Mik7DQo+ICsJCWl0NjUwNV93cml0 ZShpdDY1MDUsIFJFR19CQU5LX1NFTCwgMHgwMCk7DQo+ICsJCWl0NjUwNV93cml0ZShpdDY1MDUs IFJFR19TUF9DVFJMMCwgMHgwNyk7DQo+ICsJCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19JUF9D VFJMMSwgMHgyOSk7DQo+ICsJCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19JUF9DVFJMMiwgMHgw Myk7DQo+ICsJCS8qIFN0YW1wIEludGVycnVwdCBTdGVwICovDQo+ICsJCWl0NjUwNV9zZXRfYml0 cyhpdDY1MDUsIFJFR19USU1FX1NUTVBfQ1RSTCwgTV9TVEFNUF9TVEVQLA0KPiArCQkJCTB4MTAp Ow0KPiArCQlpdDY1MDVfZHBjZF93cml0ZShpdDY1MDUsIERQX0RPV05TUFJFQURfQ1RSTCwNCj4g KwkJCQkgIERQX1NQUkVBRF9BTVBfMF81KTsNCj4gKwl9IGVsc2Ugew0KPiArCQlpdDY1MDVfZHBj ZF93cml0ZShpdDY1MDUsIERQX0RPV05TUFJFQURfQ1RSTCwgMHgwMCk7DQo+ICsJCWl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19USU1FX1NUTVBfQ1RSTCwgTV9TVEFNUF9TVEVQLA0KPiArCQkJ CTB4MDApOw0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkIGl0NjUwNV9s aW5rX3JhdGVfc2V0dXAoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19UUkFJTl9DVFJMMCwgRk9SQ0VfTEJSLA0KPiArCQkJKGl0NjUw NS0+bGlua19yYXRlX2J3X2NvZGUgPT0gUkJSKSA/IEZPUkNFX0xCUiA6IDB4MDApOw0KPiArCWl0 NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19MSU5LX0RSViwgRFJWX0hTLA0KPiArCQkJKGl0NjUw NS0+bGlua19yYXRlX2J3X2NvZGUgPT0gUkJSKSA/IDB4MDAgOiBEUlZfSFMpOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfbGFuZV9jb3VudF9zZXR1cChzdHJ1Y3QgaXQ2NTA1ICpp dDY1MDUpDQo+ICt7DQo+ICsJaXQ2NTA1X2dldF9leHRjb25fcHJvcGVydHkoaXQ2NTA1KTsNCj4g KwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfVFJBSU5fQ1RSTDAsIExBTkVfU1dBUCwNCj4g KwkJCWl0NjUwNS0+bGFuZV9zd2FwID8gTEFORV9TV0FQIDogMHgwMCk7DQo+ICsJaXQ2NTA1X3Nl dF9iaXRzKGl0NjUwNSwgUkVHX1RSQUlOX0NUUkwwLCBMQU5FX0NPVU5UX01BU0ssDQo+ICsJCQko aXQ2NTA1LT5sYW5lX2NvdW50IC0gMSkgPDwgMSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lk IGl0NjUwNV9saW5rX3RyYWluaW5nX3NldHVwKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sN Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiAr CWlmIChpdDY1MDUtPmVuYWJsZV9lbmhhbmNlZF9mcmFtZSkNCj4gKwkJaXQ2NTA1X3NldF9iaXRz KGl0NjUwNSwgUkVHX0RBVEFfTVVURV9DVFJMLA0KPiArCQkJCUVOQUJMRV9FTkhBTkNFRF9GUkFN RSwgRU5BQkxFX0VOSEFOQ0VEX0ZSQU1FKTsNCj4gKw0KPiArCWl0NjUwNV9saW5rX3JhdGVfc2V0 dXAoaXQ2NTA1KTsNCj4gKwlpdDY1MDVfbGFuZV9jb3VudF9zZXR1cChpdDY1MDUpOw0KPiArCWl0 NjUwNV9zZXR1cF9zc2MoaXQ2NTA1KTsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsDQo+ ICsJCQkgICAgICIlcywgJWQgbGFuZXMsICVzYWJsZSBzc2MsICVzYWJsZSBlbmhhbmNlZCBmcmFt ZSIsDQo+ICsJCQkgICAgIGl0NjUwNS0+bGlua19yYXRlX2J3X2NvZGUgIT0gUkJSID8gIkhCUiIg OiAiUkJSIiwNCj4gKwkJCSAgICAgaXQ2NTA1LT5sYW5lX2NvdW50LA0KPiArCQkJICAgICBpdDY1 MDUtPmVuYWJsZV9zc2MgPyAiZW4iIDogImRpcyIsDQo+ICsJCQkgICAgIGl0NjUwNS0+ZW5hYmxl X2VuaGFuY2VkX2ZyYW1lID8gImVuIiA6ICJkaXMiKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGJv b2wgaXQ2NTA1X2xpbmtfc3RhcnRfYXV0b190cmFpbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ ICt7DQo+ICsJaW50IHRpbWVvdXQgPSA1MDAsIGxpbmtfdHJhaW5pbmdfc3RhdGU7DQo+ICsJYm9v bCBzdGF0ZSA9IGZhbHNlOw0KPiArDQo+ICsJbXV0ZXhfbG9jaygmaXQ2NTA1LT5hdXhfbG9jayk7 DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1RSQUlOX0NUUkwwLA0KPiArCQkJCUZP UkNFX0NSX0RPTkUgfCBGT1JDRV9FUV9ET05FLCAweDAwKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2 NTA1LCBSRUdfVFJBSU5fQ1RSTDEsIEZPUkNFX1JFVFJBSU4pOw0KPiArCWl0NjUwNV93cml0ZShp dDY1MDUsIFJFR19UUkFJTl9DVFJMMSwgQVVUT19UUkFJTik7DQo+ICsNCj4gKwl3aGlsZSAodGlt ZW91dCA+IDApIHsNCj4gKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOw0KPiArCQlsaW5rX3Ry YWluaW5nX3N0YXRlID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfTElOS19UUkFJTl9TVFMpOw0K PiArDQo+ICsJCWlmICgobGlua190cmFpbmluZ19zdGF0ZSA+IDApICYmDQo+ICsJCSAgICAobGlu a190cmFpbmluZ19zdGF0ZSAmIExJTktfU1RBVEVfTk9SUCkpIHsNCj4gKwkJCXN0YXRlID0gdHJ1 ZTsNCj4gKwkJCWdvdG8gdW5sb2NrOw0KPiArCQl9DQo+ICsNCj4gKwkJdGltZW91dC0tOw0KPiAr CX0NCj4gK3VubG9jazoNCj4gKwltdXRleF91bmxvY2soJml0NjUwNS0+YXV4X2xvY2spOw0KPiAr DQo+ICsJcmV0dXJuIHN0YXRlOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGl0NjUwNV9kcm1f ZHBfbGlua19jb25maWd1cmUoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCXU4IHZh bHVlc1syXTsNCj4gKwlpbnQgZXJyOw0KPiArCXN0cnVjdCBkcm1fZHBfYXV4ICphdXggPSAmaXQ2 NTA1LT5hdXg7DQo+ICsNCj4gKwl2YWx1ZXNbMF0gPSBpdDY1MDUtPmxpbmtfcmF0ZV9id19jb2Rl Ow0KPiArCXZhbHVlc1sxXSA9IGl0NjUwNS0+bGFuZV9jb3VudDsNCj4gKw0KPiArCWlmIChpdDY1 MDUtPmVuYWJsZV9lbmhhbmNlZF9mcmFtZSkNCj4gKwkJdmFsdWVzWzFdIHw9IERQX0xBTkVfQ09V TlRfRU5IQU5DRURfRlJBTUVfRU47DQo+ICsNCj4gKwllcnIgPSBkcm1fZHBfZHBjZF93cml0ZShh dXgsIERQX0xJTktfQldfU0VULCB2YWx1ZXMsIHNpemVvZih2YWx1ZXMpKTsNCj4gKwlpZiAoZXJy IDwgMCkNCj4gKwkJcmV0dXJuIGVycjsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgYm9vbCBpdDY1MDVfY2hlY2tfdm9sdGFnZV9zd2luZ19tYXgodTggbGFuZV92b2x0 YWdlX3N3aW5nX3ByZV9lbXBoYXNpcykNCj4gK3sNCj4gKwlyZXR1cm4gKChsYW5lX3ZvbHRhZ2Vf c3dpbmdfcHJlX2VtcGhhc2lzICYgMHgwMykgPT0gTUFYX0NSX0xFVkVMKTsNCj4gK30NCj4gKw0K PiArc3RhdGljIGJvb2wgaXQ2NTA1X2NoZWNrX3ByZV9lbXBoYXNpc19tYXgodTggbGFuZV92b2x0 YWdlX3N3aW5nX3ByZV9lbXBoYXNpcykNCj4gK3sNCj4gKwlyZXR1cm4gKChsYW5lX3ZvbHRhZ2Vf c3dpbmdfcHJlX2VtcGhhc2lzICYgMHgwMykgPT0gTUFYX0VRX0xFVkVMKTsNCj4gK30NCj4gKw0K PiArc3RhdGljIGJvb2wgaXQ2NTA1X2NoZWNrX21heF92b2x0YWdlX3N3aW5nX3JlYWNoZWQodTgg KmxhbmVfdm9sdGFnZV9zd2luZywNCj4gKwkJCQkJCSAgIHU4IGxhbmVfY291bnQpDQo+ICt7DQo+ ICsJdTggaTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBsYW5lX2NvdW50OyBpKyspIHsNCj4g KwkJaWYgKGxhbmVfdm9sdGFnZV9zd2luZ1tpXSAmIERQX1RSQUlOX01BWF9TV0lOR19SRUFDSEVE KQ0KPiArCQkJcmV0dXJuIHRydWU7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIGZhbHNlOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBpdDY1MDVfc3RlcF90cmFpbl9sYW5lX3ZvbHRhZ2VfcHJl X2VtcGhhc2lzX3NldCgNCj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsDQo+ICsJc3RydWN0IGl0 NjUwNV9zdGVwX3RyYWluX3BhcmEgKmxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMsDQo+ICsJdTgg KmxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXNfc2V0KQ0KPiArew0KPiArCXU4IGk7DQo+ICsNCj4g Kwlmb3IgKGkgPSAwOyBpIDwgaXQ2NTA1LT5sYW5lX2NvdW50OyBpKyspIHsNCj4gKwkJbGFuZV92 b2x0YWdlX3ByZV9lbXBoYXNpcy0+dm9sdGFnZV9zd2luZ1tpXSAmPSAweDAzOw0KPiArCQlsYW5l X3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldFtpXSA9DQo+ICsJCQlsYW5lX3ZvbHRhZ2VfcHJlX2Vt cGhhc2lzLT52b2x0YWdlX3N3aW5nW2ldOw0KPiArCQlpZiAoaXQ2NTA1X2NoZWNrX3ZvbHRhZ2Vf c3dpbmdfbWF4KA0KPiArCQkJICAgIGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vf c3dpbmdbaV0pKQ0KPiArCQkJbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpc19zZXRbaV0gfD0NCj4g KwkJCQlEUF9UUkFJTl9NQVhfU1dJTkdfUkVBQ0hFRDsNCj4gKw0KPiArCQlsYW5lX3ZvbHRhZ2Vf cHJlX2VtcGhhc2lzLT5wcmVfZW1waGFzaXNbaV0gJj0gMHgwMzsNCj4gKwkJbGFuZV92b2x0YWdl X3ByZV9lbXBoYXNpc19zZXRbaV0gfD0NCj4gKwkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMt PnByZV9lbXBoYXNpc1tpXQ0KPiArCQkJPDwgRFBfVFJBSU5fUFJFX0VNUEhBU0lTX1NISUZUOw0K PiArCQlpZiAoaXQ2NTA1X2NoZWNrX3ByZV9lbXBoYXNpc19tYXgoDQo+ICsJCQkgICAgbGFuZV92 b2x0YWdlX3ByZV9lbXBoYXNpcy0+cHJlX2VtcGhhc2lzW2ldKSkNCj4gKwkJCWxhbmVfdm9sdGFn ZV9wcmVfZW1waGFzaXNfc2V0W2ldIHw9DQo+ICsJCQkJRFBfVFJBSU5fTUFYX1BSRV9FTVBIQVNJ U19SRUFDSEVEOw0KPiArCQlpdDY1MDVfZHBjZF93cml0ZShpdDY1MDUsIERQX1RSQUlOSU5HX0xB TkUwX1NFVCArIGksDQo+ICsJCQkJICBsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldFtpXSk7 DQo+ICsNCj4gKwkJaWYgKGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXNfc2V0W2ldICE9DQo+ICsJ CSAgICBpdDY1MDVfZHBjZF9yZWFkKGl0NjUwNSwgRFBfVFJBSU5JTkdfTEFORTBfU0VUICsgaSkp DQo+ICsJCQlyZXR1cm4gZmFsc2U7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIHRydWU7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBib29sDQo+ICtpdDY1MDVfc3RlcF9jcl90cmFpbihzdHJ1Y3QgaXQ2 NTA1ICppdDY1MDUsDQo+ICsJCSAgICAgc3RydWN0IGl0NjUwNV9zdGVwX3RyYWluX3BhcmEgKmxh bmVfdm9sdGFnZV9wcmVfZW1waGFzaXMpDQo+ICt7DQo+ICsJdTggbG9vcF9jb3VudCA9IDAsIGkg PSAwLCBqOw0KPiArCXU4IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdID0geyAwIH07 DQo+ICsJdTggbGFuZV9sZXZlbF9jb25maWdbTUFYX0xBTkVfQ09VTlRdID0geyAwIH07DQo+ICsJ aW50IHByZV9lbXBoYXNpc19hZGp1c3QgPSAtMSwgdm9sdGFnZV9zd2luZ19hZGp1c3QgPSAtMTsN Cj4gKw0KPiArCWl0NjUwNV9kcGNkX3dyaXRlKGl0NjUwNSwgRFBfRE9XTlNQUkVBRF9DVFJMLA0K PiArCQkJICBpdDY1MDUtPmVuYWJsZV9zc2MgPyBEUF9TUFJFQURfQU1QXzBfNSA6IDB4MDApOw0K PiArCWl0NjUwNV9kcGNkX3dyaXRlKGl0NjUwNSwgRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQsDQo+ ICsJCQkgIERQX1RSQUlOSU5HX1BBVFRFUk5fMSk7DQo+ICsNCj4gKwl3aGlsZSAobG9vcF9jb3Vu dCA8IDUgJiYgaSA8IDEwKSB7DQo+ICsJCWkrKzsNCj4gKwkJaWYgKCFpdDY1MDVfc3RlcF90cmFp bl9sYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldCgNCj4gKwkJCSAgICBpdDY1MDUsIGxhbmVf dm9sdGFnZV9wcmVfZW1waGFzaXMsDQo+ICsJCQkgICAgbGFuZV9sZXZlbF9jb25maWcpKQ0KPiAr CQkJY29udGludWU7DQo+ICsJCWRybV9kcF9saW5rX3RyYWluX2Nsb2NrX3JlY292ZXJ5X2RlbGF5 KGl0NjUwNS0+ZHBjZCk7DQo+ICsJCWRybV9kcF9kcGNkX3JlYWRfbGlua19zdGF0dXMoJml0NjUw NS0+YXV4LCBsaW5rX3N0YXR1cyk7DQo+ICsNCj4gKwkJaWYgKGRybV9kcF9jbG9ja19yZWNvdmVy eV9vayhsaW5rX3N0YXR1cywgaXQ2NTA1LT5sYW5lX2NvdW50KSkgew0KPiArCQkJaXQ2NTA1X3Nl dF9iaXRzKGl0NjUwNSwgUkVHX1RSQUlOX0NUUkwwLCBGT1JDRV9DUl9ET05FLA0KPiArCQkJCQlG T1JDRV9DUl9ET05FKTsNCj4gKwkJCXJldHVybiB0cnVlOw0KPiArCQl9DQo+ICsJCURSTV9ERVZf REVCVUdfRFJJVkVSKCZpdDY1MDUtPmNsaWVudC0+ZGV2LCAiY3Igbm90IGRvbmUiKTsNCj4gKw0K PiArCQlpZiAoaXQ2NTA1X2NoZWNrX21heF92b2x0YWdlX3N3aW5nX3JlYWNoZWQobGFuZV9sZXZl bF9jb25maWcsDQo+ICsJCQkJCQkJICAgaXQ2NTA1LT5sYW5lX2NvdW50KSkNCj4gKwkJCWdvdG8g Y3JfdHJhaW5fZmFpbDsNCj4gKw0KPiArCQlmb3IgKGogPSAwOyBqIDwgaXQ2NTA1LT5sYW5lX2Nv dW50OyBqKyspIHsNCj4gKwkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vfc3dp bmdbal0gPQ0KPiArCQkJCWRybV9kcF9nZXRfYWRqdXN0X3JlcXVlc3Rfdm9sdGFnZShsaW5rX3N0 YXR1cywNCj4gKwkJCQkJCQkJICBqKSA+Pg0KPiArCQkJCURQX1RSQUlOX1ZPTFRBR0VfU1dJTkdf U0hJRlQ7DQo+ICsJCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT5wcmVfZW1waGFzaXNbal0g PQ0KPiArCQkJCWRybV9kcF9nZXRfYWRqdXN0X3JlcXVlc3RfcHJlX2VtcGhhc2lzKA0KPiArCQkJ CQlsaW5rX3N0YXR1cywgaikgPj4NCj4gKwkJCQlEUF9UUkFJTl9QUkVfRU1QSEFTSVNfU0hJRlQ7 DQo+ICsJCQlpZiAoKHZvbHRhZ2Vfc3dpbmdfYWRqdXN0ID09DQo+ICsJCQkgICAgIGxhbmVfdm9s dGFnZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbal0pICYmDQo+ICsJCQkgICAgKHByZV9l bXBoYXNpc19hZGp1c3QgPT0NCj4gKwkJCSAgICAgbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+ cHJlX2VtcGhhc2lzW2pdKSkgew0KPiArCQkJCWxvb3BfY291bnQrKzsNCj4gKwkJCQljb250aW51 ZTsNCj4gKwkJCX0NCj4gKw0KPiArCQkJdm9sdGFnZV9zd2luZ19hZGp1c3QgPQ0KPiArCQkJCWxh bmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbal07DQo+ICsJCQlwcmVfZW1w aGFzaXNfYWRqdXN0ID0NCj4gKwkJCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT5wcmVfZW1w aGFzaXNbal07DQo+ICsJCQlsb29wX2NvdW50ID0gMDsNCj4gKw0KPiArCQkJaWYgKHZvbHRhZ2Vf c3dpbmdfYWRqdXN0ICsgcHJlX2VtcGhhc2lzX2FkanVzdCA+DQo+ICsJCQkgICAgTUFYX0VRX0xF VkVMKQ0KPiArCQkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbal0g PQ0KPiArCQkJCQlNQVhfRVFfTEVWRUwgLQ0KPiArCQkJCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhh c2lzDQo+ICsJCQkJCQktPnByZV9lbXBoYXNpc1tqXTsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiAr Y3JfdHJhaW5fZmFpbDoNCj4gKwlpdDY1MDVfZHBjZF93cml0ZShpdDY1MDUsIERQX1RSQUlOSU5H X1BBVFRFUk5fU0VULA0KPiArCQkJICBEUF9UUkFJTklOR19QQVRURVJOX0RJU0FCTEUpOw0KPiAr DQo+ICsJcmV0dXJuIGZhbHNlOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbA0KPiAraXQ2NTA1 X3N0ZXBfZXFfdHJhaW4oc3RydWN0IGl0NjUwNSAqaXQ2NTA1LA0KPiArCQkgICAgIHN0cnVjdCBp dDY1MDVfc3RlcF90cmFpbl9wYXJhICpsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzKQ0KPiArew0K PiArCXU4IGxvb3BfY291bnQgPSAwLCBpLCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpF XSA9IHsgMCB9Ow0KPiArCXU4IGxhbmVfbGV2ZWxfY29uZmlnW01BWF9MQU5FX0NPVU5UXSA9IHsg MCB9Ow0KPiArDQo+ICsJaXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9UUkFJTklOR19QQVRU RVJOX1NFVCwNCj4gKwkJCSAgRFBfVFJBSU5JTkdfUEFUVEVSTl8yKTsNCj4gKw0KPiArCXdoaWxl IChsb29wX2NvdW50IDwgNikgew0KPiArCQlsb29wX2NvdW50Kys7DQo+ICsNCj4gKwkJaWYgKCFp dDY1MDVfc3RlcF90cmFpbl9sYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldCgNCj4gKwkJCSAg ICBpdDY1MDUsIGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMsDQo+ICsJCQkgICAgbGFuZV9sZXZl bF9jb25maWcpKQ0KPiArCQkJY29udGludWU7DQo+ICsNCj4gKwkJZHJtX2RwX2xpbmtfdHJhaW5f Y2hhbm5lbF9lcV9kZWxheShpdDY1MDUtPmRwY2QpOw0KPiArCQlkcm1fZHBfZHBjZF9yZWFkX2xp bmtfc3RhdHVzKCZpdDY1MDUtPmF1eCwgbGlua19zdGF0dXMpOw0KPiArDQo+ICsJCWlmICghZHJt X2RwX2Nsb2NrX3JlY292ZXJ5X29rKGxpbmtfc3RhdHVzLCBpdDY1MDUtPmxhbmVfY291bnQpKQ0K PiArCQkJZ290byBlcV90cmFpbl9mYWlsOw0KPiArDQo+ICsJCWlmIChkcm1fZHBfY2hhbm5lbF9l cV9vayhsaW5rX3N0YXR1cywgaXQ2NTA1LT5sYW5lX2NvdW50KSkgew0KPiArCQkJaXQ2NTA1X2Rw Y2Rfd3JpdGUoaXQ2NTA1LCBEUF9UUkFJTklOR19QQVRURVJOX1NFVCwNCj4gKwkJCQkJICBEUF9U UkFJTklOR19QQVRURVJOX0RJU0FCTEUpOw0KPiArCQkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwg UkVHX1RSQUlOX0NUUkwwLCBGT1JDRV9FUV9ET05FLA0KPiArCQkJCQlGT1JDRV9FUV9ET05FKTsN Cj4gKwkJCXJldHVybiB0cnVlOw0KPiArCQl9DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKCZp dDY1MDUtPmNsaWVudC0+ZGV2LCAiZXEgbm90IGRvbmUiKTsNCj4gKw0KPiArCQlmb3IgKGkgPSAw OyBpIDwgaXQ2NTA1LT5sYW5lX2NvdW50OyBpKyspIHsNCj4gKwkJCWxhbmVfdm9sdGFnZV9wcmVf ZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbaV0gPQ0KPiArCQkJCWRybV9kcF9nZXRfYWRqdXN0X3Jl cXVlc3Rfdm9sdGFnZShsaW5rX3N0YXR1cywNCj4gKwkJCQkJCQkJICBpKSA+Pg0KPiArCQkJCURQ X1RSQUlOX1ZPTFRBR0VfU1dJTkdfU0hJRlQ7DQo+ICsJCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhh c2lzLT5wcmVfZW1waGFzaXNbaV0gPQ0KPiArCQkJCWRybV9kcF9nZXRfYWRqdXN0X3JlcXVlc3Rf cHJlX2VtcGhhc2lzKA0KPiArCQkJCQlsaW5rX3N0YXR1cywgaSkgPj4NCj4gKwkJCQlEUF9UUkFJ Tl9QUkVfRU1QSEFTSVNfU0hJRlQ7DQo+ICsNCj4gKwkJCWlmIChsYW5lX3ZvbHRhZ2VfcHJlX2Vt cGhhc2lzLT52b2x0YWdlX3N3aW5nW2ldICsNCj4gKwkJCQkgICAgbGFuZV92b2x0YWdlX3ByZV9l bXBoYXNpcy0+cHJlX2VtcGhhc2lzW2ldID4NCj4gKwkJCSAgICBNQVhfRVFfTEVWRUwpDQo+ICsJ CQkJbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+dm9sdGFnZV9zd2luZ1tpXSA9DQo+ICsJCQkJ CTB4MDMgLSBsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzDQo+ICsJCQkJCQkgICAgICAgLT5wcmVf ZW1waGFzaXNbaV07DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4gK2VxX3RyYWluX2ZhaWw6DQo+ICsJ aXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9UUkFJTklOR19QQVRURVJOX1NFVCwNCj4gKwkJ CSAgRFBfVFJBSU5JTkdfUEFUVEVSTl9ESVNBQkxFKTsNCj4gKwlyZXR1cm4gZmFsc2U7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBib29sIGl0NjUwNV9saW5rX3N0YXJ0X3N0ZXBfdHJhaW4oc3RydWN0 IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWludCBlcnI7DQo+ICsJc3RydWN0IGl0NjUwNV9z dGVwX3RyYWluX3BhcmEgbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcyA9IHsNCj4gKwkJLnZvbHRh Z2Vfc3dpbmcgPSB7IDAgfSwNCj4gKwkJLnByZV9lbXBoYXNpcyA9IHsgMCB9LA0KPiArCX07DQo+ ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUigmaXQ2NTA1LT5jbGllbnQtPmRldiwgInN0YXJ0 Iik7DQo+ICsJZXJyID0gaXQ2NTA1X2RybV9kcF9saW5rX2NvbmZpZ3VyZShpdDY1MDUpOw0KPiAr DQo+ICsJaWYgKGVyciA8IDApDQo+ICsJCXJldHVybiBmYWxzZTsNCj4gKwlpZiAoIWl0NjUwNV9z dGVwX2NyX3RyYWluKGl0NjUwNSwgJmxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMpKQ0KPiArCQly ZXR1cm4gZmFsc2U7DQo+ICsJaWYgKCFpdDY1MDVfc3RlcF9lcV90cmFpbihpdDY1MDUsICZsYW5l X3ZvbHRhZ2VfcHJlX2VtcGhhc2lzKSkNCj4gKwkJcmV0dXJuIGZhbHNlOw0KPiArCXJldHVybiB0 cnVlOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBpdDY1MDVfZ2V0X3ZpZGVvX3N0YXR1cyhz dHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaW50IHJlZ18wZDsNCj4gKw0KPiArCXJl Z18wZCA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX1NZU1RFTV9TVFMpOw0KPiArDQo+ICsJaWYg KHJlZ18wZCA8IDApDQo+ICsJCXJldHVybiBmYWxzZTsNCj4gKw0KPiArCXJldHVybiAhIShyZWdf MGQgJiBWSURFT19TVEIpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfcmVzZXRf aGRjcChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaXQ2NTA1LT5oZGNwX3N0YXR1 cyA9IEhEQ1BfQVVUSF9JRExFOw0KPiArCS8qIERpc2FibGUgQ1BfRGVzaXJlZCAqLw0KPiArCWl0 NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX0NUUkwxLCBIRENQX0NQX0VOQUJMRSwgMHgw MCk7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1JFU0VUX0NUUkwsIEhEQ1BfUkVT RVQsIEhEQ1BfUkVTRVQpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfc3RhcnRf aGRjcChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2 ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihk ZXYsICJzdGFydCIpOw0KPiArCWl0NjUwNV9yZXNldF9oZGNwKGl0NjUwNSk7DQo+ICsJcXVldWVf ZGVsYXllZF93b3JrKHN5c3RlbV93cSwgJml0NjUwNS0+aGRjcF93b3JrLA0KPiArCQkJICAgbXNl Y3NfdG9famlmZmllcygyNDAwKSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9z dG9wX2hkY3Aoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWl0NjUwNV9yZXNldF9o ZGNwKGl0NjUwNSk7DQo+ICsJY2FuY2VsX2RlbGF5ZWRfd29yaygmaXQ2NTA1LT5oZGNwX3dvcmsp Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBpdDY1MDVfaGRjcF9pc19rc3ZfdmFsaWQodTgg KmtzdikNCj4gK3sNCj4gKwlpbnQgaSwgb25lcyA9IDA7DQo+ICsNCj4gKwkvKiBLU1YgaGFzIDIw IDEncyBhbmQgMjAgMCdzICovDQo+ICsJZm9yIChpID0gMDsgaSA8IERSTV9IRENQX0tTVl9MRU47 IGkrKykNCj4gKwkJb25lcyArPSBod2VpZ2h0OChrc3ZbaV0pOw0KPiArCWlmIChvbmVzICE9IDIw KQ0KPiArCQlyZXR1cm4gZmFsc2U7DQo+ICsJcmV0dXJuIHRydWU7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyB2b2lkIGl0NjUwNV9oZGNwX3BhcnQxX2F1dGgoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0K PiArew0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiAr CXU4IGhkY3BfYmNhcHM7DQo+ICsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfUkVT RVRfQ1RSTCwgSERDUF9SRVNFVCwgMHgwMCk7DQo+ICsJLyogRGlzYWJsZSBDUF9EZXNpcmVkICov DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfQ1RSTDEsIEhEQ1BfQ1BfRU5B QkxFLCAweDAwKTsNCj4gKw0KPiArCXVzbGVlcF9yYW5nZSgxMDAwLCAxNTAwKTsNCj4gKwloZGNw X2JjYXBzID0gaXQ2NTA1X2RwY2RfcmVhZChpdDY1MDUsIERQX0FVWF9IRENQX0JDQVBTKTsNCj4g KwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJEUENEWzB4NjgwMjhdOiAweCUwMngiLA0KPiAr CQkJICAgICBoZGNwX2JjYXBzKTsNCj4gKw0KPiArCWlmICghaGRjcF9iY2FwcykNCj4gKwkJcmV0 dXJuOw0KPiArDQo+ICsJLyogY2xlYXIgdGhlIHJlcGVhdGVyIExpc3QgQ2hrIERvbmUgYW5kIGZh aWwgYml0ICovDQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfVFJJR0dFUiwN Cj4gKwkJCUhEQ1BfVFJJR0dFUl9LU1ZfRE9ORSB8IEhEQ1BfVFJJR0dFUl9LU1ZfRkFJTCwNCj4g KwkJCTB4MDApOw0KPiArDQo+ICsJLyogRW5hYmxlIEFuIEdlbmVyYXRvciAqLw0KPiArCWl0NjUw NV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX0NUUkwyLCBIRENQX0FOX0dFTiwgSERDUF9BTl9H RU4pOw0KPiArCS8qIGRlbGF5MW1zKDEwKTsqLw0KPiArCXVzbGVlcF9yYW5nZSgxMDAwMCwgMTUw MDApOw0KPiArCS8qIFN0b3AgQW4gR2VuZXJhdG9yICovDQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0 NjUwNSwgUkVHX0hEQ1BfQ1RSTDIsIEhEQ1BfQU5fR0VOLCAweDAwKTsNCj4gKw0KPiArCWl0NjUw NV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX0NUUkwxLCBIRENQX0NQX0VOQUJMRSwgSERDUF9D UF9FTkFCTEUpOw0KPiArDQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfVFJJ R0dFUiwgSERDUF9UUklHR0VSX1NUQVJULA0KPiArCQkJSERDUF9UUklHR0VSX1NUQVJUKTsNCj4g Kw0KPiArCWl0NjUwNS0+aGRjcF9zdGF0dXMgPSBIRENQX0FVVEhfR09JTkc7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBpbnQgaXQ2NTA1X3NoYTFfZGlnZXN0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSwg dTggKnNoYTFfaW5wdXQsDQo+ICsJCQkgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdTggKm91dHB1 dF9hdikNCj4gK3sNCj4gKwlzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYzsNCj4gKwlzdHJ1Y3QgY3J5 cHRvX3NoYXNoICp0Zm07DQo+ICsJaW50IGVycjsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm aXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiArCXRmbSA9IGNyeXB0b19hbGxvY19zaGFzaCgi c2hhMSIsIDAsIDApOw0KPiArCWlmIChJU19FUlIodGZtKSkgew0KPiArCQlEUk1fREVWX0VSUk9S KGRldiwgImNyeXB0b19hbGxvY19zaGFzaCBzaGExIGZhaWxlZCIpOw0KPiArCQlyZXR1cm4gUFRS X0VSUih0Zm0pOw0KPiArCX0NCj4gKwlkZXNjID0ga3phbGxvYyhzaXplb2YoKmRlc2MpICsgY3J5 cHRvX3NoYXNoX2Rlc2NzaXplKHRmbSksIEdGUF9LRVJORUwpOw0KPiArCWlmICghZGVzYykgew0K PiArCQljcnlwdG9fZnJlZV9zaGFzaCh0Zm0pOw0KPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gKwl9 DQo+ICsNCj4gKwlkZXNjLT50Zm0gPSB0Zm07DQo+ICsJZXJyID0gY3J5cHRvX3NoYXNoX2RpZ2Vz dChkZXNjLCBzaGExX2lucHV0LCBzaXplLCBvdXRwdXRfYXYpOw0KPiArCWlmIChlcnIpDQo+ICsJ CURSTV9ERVZfRVJST1IoZGV2LCAiY3J5cHRvX3NoYXNoX2RpZ2VzdCBzaGExIGZhaWxlZCIpOw0K PiArDQo+ICsJY3J5cHRvX2ZyZWVfc2hhc2godGZtKTsNCj4gKwlrZnJlZShkZXNjKTsNCj4gKwly ZXR1cm4gZXJyOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGl0NjUwNV9zZXR1cF9zaGExX2lu cHV0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdTggKnNoYTFfaW5wdXQpDQo+ICt7DQo+ICsJc3Ry dWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJdTggYmluZm9bMl07 DQo+ICsJaW50IGRvd25fc3RyZWFtX2NvdW50LCBpLCBlcnIsIG1zZ19jb3VudCA9IDA7DQo+ICsN Cj4gKwllcnIgPSBpdDY1MDVfZ2V0X2RwY2QoaXQ2NTA1LCBEUF9BVVhfSERDUF9CSU5GTywgYmlu Zm8sDQo+ICsJCQkgICAgICBBUlJBWV9TSVpFKGJpbmZvKSk7DQo+ICsNCj4gKwlpZiAoZXJyIDwg MCkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIlJlYWQgYmluZm8gdmFsdWUgRmFpbCIpOw0K PiArCQlyZXR1cm4gZXJyOw0KPiArCX0NCj4gKw0KPiArCWRvd25fc3RyZWFtX2NvdW50ID0gYmlu Zm9bMF0gJiAweDdGOw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImJpbmZvOjB4JSpw aCIsIChpbnQpQVJSQVlfU0laRShiaW5mbyksDQo+ICsJCQkgICAgIGJpbmZvKTsNCj4gKw0KPiAr CWlmICgoYmluZm9bMF0gJiBCSVQoNykpIHx8IChiaW5mb1sxXSAmIEJJVCgzKSkpIHsNCj4gKwkJ RFJNX0RFVl9FUlJPUihkZXYsICJIRENQIG1heCBjYXNjYWRlIGRldmljZSBleGNlZWQiKTsNCj4g KwkJcmV0dXJuIDA7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKCFkb3duX3N0cmVhbV9jb3VudCB8fA0K PiArCSAgICAoZG93bl9zdHJlYW1fY291bnQgPiBNQVhfSERDUF9ET1dOX1NUUkVBTV9DT1VOVCkp IHsNCj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJIRENQIGRvd24gc3RyZWFtIGNvdW50IEVycm9y ICVkIiwNCj4gKwkJCSAgICAgIGRvd25fc3RyZWFtX2NvdW50KTsNCj4gKwkJcmV0dXJuIDA7DQo+ ICsJfQ0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IGRvd25fc3RyZWFtX2NvdW50OyBpKyspIHsN Cj4gKwkJZXJyID0gaXQ2NTA1X2dldF9kcGNkKGl0NjUwNSwgRFBfQVVYX0hEQ1BfS1NWX0ZJRk8g Kw0KPiArCQkJCSAgICAgIChpICUgMykgKiBEUk1fSERDUF9LU1ZfTEVOLA0KPiArCQkJCSAgICAg IHNoYTFfaW5wdXQgKyBtc2dfY291bnQsDQo+ICsJCQkJICAgICAgRFJNX0hEQ1BfS1NWX0xFTik7 DQo+ICsNCj4gKwkJaWYgKGVyciA8IDApDQo+ICsJCQlyZXR1cm4gZXJyOw0KPiArDQo+ICsJCW1z Z19jb3VudCArPSA1Ow0KPiArCX0NCj4gKw0KPiArCWl0NjUwNS0+aGRjcF9kb3duX3N0cmVhbV9j b3VudCA9IGRvd25fc3RyZWFtX2NvdW50Ow0KPiArCXNoYTFfaW5wdXRbbXNnX2NvdW50KytdID0g YmluZm9bMF07DQo+ICsJc2hhMV9pbnB1dFttc2dfY291bnQrK10gPSBiaW5mb1sxXTsNCj4gKw0K PiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX0NUUkwyLCBIRENQX0VOX00wX1JF QUQsDQo+ICsJCQlIRENQX0VOX00wX1JFQUQpOw0KPiArDQo+ICsJZXJyID0gcmVnbWFwX2J1bGtf cmVhZChpdDY1MDUtPnJlZ21hcCwgUkVHX00wXzBfNywNCj4gKwkJCSAgICAgICBzaGExX2lucHV0 ICsgbXNnX2NvdW50LCA4KTsNCj4gKw0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19I RENQX0NUUkwyLCBIRENQX0VOX00wX1JFQUQsIDB4MDApOw0KPiArDQo+ICsJaWYgKGVyciA8IDAp IHsNCj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICIgV2FybmluZywgUmVhZCBNIHZhbHVlIEZhaWwi KTsNCj4gKwkJcmV0dXJuIGVycjsNCj4gKwl9DQo+ICsNCj4gKwltc2dfY291bnQgKz0gODsNCj4g Kw0KPiArCXJldHVybiBtc2dfY291bnQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBib29sIGl0NjUw NV9oZGNwX3BhcnQyX2tzdmxpc3RfY2hlY2soc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0K PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiArCXU4IGF2 WzVdWzRdLCBidls1XVs0XTsNCj4gKwlpbnQgaSwgZXJyOw0KPiArDQo+ICsJaSA9IGl0NjUwNV9z ZXR1cF9zaGExX2lucHV0KGl0NjUwNSwgaXQ2NTA1LT5zaGExX2lucHV0KTsNCj4gKwlpZiAoaSA8 PSAwKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiU0hBLTEgSW5wdXQgbGVuZ3RoIGVycm9y ICVkIiwgaSk7DQo+ICsJCXJldHVybiBmYWxzZTsNCj4gKwl9DQo+ICsNCj4gKwlpdDY1MDVfc2hh MV9kaWdlc3QoaXQ2NTA1LCBpdDY1MDUtPnNoYTFfaW5wdXQsIGksICh1OCAqKWF2KTsNCj4gKw0K PiArCWVyciA9IGl0NjUwNV9nZXRfZHBjZChpdDY1MDUsIERQX0FVWF9IRENQX1ZfUFJJTUUoMCks ICh1OCAqKWJ2LA0KPiArCQkJICAgICAgc2l6ZW9mKGJ2KSk7DQo+ICsNCj4gKwlpZiAoZXJyIDwg MCkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIlJlYWQgVicgdmFsdWUgRmFpbCIpOw0KPiAr CQlyZXR1cm4gZmFsc2U7DQo+ICsJfQ0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IDU7IGkrKykN Cj4gKwkJaWYgKChidltpXVszXSAhPSBhdltpXVswXSkgfHwgKGJ2W2ldWzJdICE9IGF2W2ldWzFd KSB8fA0KPiArCQkgICAgKGJ2W2ldWzFdICE9IGF2W2ldWzJdKSB8fCAoYnZbaV1bMF0gIT0gYXZb aV1bM10pKQ0KPiArCQkJcmV0dXJuIGZhbHNlOw0KPiArDQo+ICsJRFJNX0RFVl9ERUJVR19EUklW RVIoZGV2LCAiVicgYWxsIG1hdGNoISEiKTsNCj4gKwlyZXR1cm4gdHJ1ZTsNCj4gK30NCj4gKw0K PiArc3RhdGljIHZvaWQgaXQ2NTA1X2hkY3Bfd2FpdF9rc3ZfbGlzdChzdHJ1Y3Qgd29ya19zdHJ1 Y3QgKndvcmspDQo+ICt7DQo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gY29udGFpbmVyX29m KHdvcmssIHN0cnVjdCBpdDY1MDUsDQo+ICsJCQkJCSAgICAgaGRjcF93YWl0X2tzdl9saXN0KTsN Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKwl1bnNp Z25lZCBpbnQgdGltZW91dCA9IDUwMDA7DQo+ICsJdTggYnN0YXR1cyA9IDA7DQo+ICsJYm9vbCBr c3ZfbGlzdF9jaGVjazsNCj4gKw0KPiArCXRpbWVvdXQgLz0gMjA7DQo+ICsJd2hpbGUgKHRpbWVv dXQgPiAwKSB7DQo+ICsJCWlmICghaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSkN Cj4gKwkJCXJldHVybjsNCj4gKw0KPiArCQlic3RhdHVzID0gaXQ2NTA1X2RwY2RfcmVhZChpdDY1 MDUsIERQX0FVWF9IRENQX0JTVEFUVVMpOw0KPiArDQo+ICsJCWlmIChic3RhdHVzICYgRFBfQlNU QVRVU19SRUFEWSkNCj4gKwkJCWJyZWFrOw0KPiArDQo+ICsJCW1zbGVlcCgyMCk7DQo+ICsJCXRp bWVvdXQtLTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAodGltZW91dCA9PSAwKSB7DQo+ICsJCURSTV9E RVZfREVCVUdfRFJJVkVSKGRldiwgInRpbWVvdXQgYW5kIGtzdiBsaXN0IHdhaXQgZmFpbGVkIik7 DQo+ICsJCWdvdG8gdGltZW91dDsNCj4gKwl9DQo+ICsNCj4gKwlrc3ZfbGlzdF9jaGVjayA9IGl0 NjUwNV9oZGNwX3BhcnQyX2tzdmxpc3RfY2hlY2soaXQ2NTA1KTsNCj4gKwlEUk1fREVWX0RFQlVH X0RSSVZFUihkZXYsICJrc3YgbGlzdCByZWFkeSwga3N2IGxpc3QgY2hlY2sgJXMiLA0KPiArCQkJ ICAgICBrc3ZfbGlzdF9jaGVjayA/ICJwYXNzIiA6ICJmYWlsIik7DQo+ICsJaWYgKGtzdl9saXN0 X2NoZWNrKSB7DQo+ICsJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX1RSSUdHRVIs DQo+ICsJCQkJSERDUF9UUklHR0VSX0tTVl9ET05FLCBIRENQX1RSSUdHRVJfS1NWX0RPTkUpOw0K PiArCQlyZXR1cm47DQo+ICsJfQ0KPiArdGltZW91dDoNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2 NTA1LCBSRUdfSERDUF9UUklHR0VSLA0KPiArCQkJSERDUF9UUklHR0VSX0tTVl9ET05FIHwgSERD UF9UUklHR0VSX0tTVl9GQUlMLA0KPiArCQkJSERDUF9UUklHR0VSX0tTVl9ET05FIHwgSERDUF9U UklHR0VSX0tTVl9GQUlMKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2hkY3Bf d29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQo+ICt7DQo+ICsJc3RydWN0IGl0NjUwNSAq aXQ2NTA1ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpdDY1MDUsDQo+ICsJCQkJCSAgICAg aGRjcF93b3JrLndvcmspOw0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVu dC0+ZGV2Ow0KPiArCWludCByZXQ7DQo+ICsJdTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNf U0laRV0gPSB7IDAgfTsNCj4gKw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInN0YXJ0 Iik7DQo+ICsNCj4gKwlpZiAoIWl0NjUwNV9nZXRfc2lua19ocGRfc3RhdHVzKGl0NjUwNSkpDQo+ ICsJCXJldHVybjsNCj4gKw0KPiArCXJldCA9IGRybV9kcF9kcGNkX3JlYWRfbGlua19zdGF0dXMo Jml0NjUwNS0+YXV4LCBsaW5rX3N0YXR1cyk7DQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2 LCAicmV0OiAlZCBsaW5rX3N0YXR1czogJSpwaCIsIHJldCwNCj4gKwkJCSAgICAgKGludClzaXpl b2YobGlua19zdGF0dXMpLCBsaW5rX3N0YXR1cyk7DQo+ICsNCj4gKwlpZiAoKHJldCA8IDApIHx8 ICFkcm1fZHBfY2hhbm5lbF9lcV9vayhsaW5rX3N0YXR1cywgaXQ2NTA1LT5sYW5lX2NvdW50KQ0K PiArCSAgICB8fCAhaXQ2NTA1X2dldF92aWRlb19zdGF0dXMoaXQ2NTA1KSkgew0KPiArCQlEUk1f REVWX0RFQlVHX0RSSVZFUihkZXYsICJsaW5rIHRyYWluIG5vdCBkb25lIG9yIG5vIHZpZGVvIik7 DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ICsNCj4gKwlyZXQgPSBpdDY1MDVfZ2V0X2RwY2QoaXQ2 NTA1LCBEUF9BVVhfSERDUF9CS1NWLCBpdDY1MDUtPmJrc3ZzLA0KPiArCQkJICAgICAgQVJSQVlf U0laRShpdDY1MDUtPmJrc3ZzKSk7DQo+ICsJaWYgKHJldCA8IDApIHsNCj4gKwkJRFJNX0RFVl9F UlJPUihkZXYsICJmYWlsIHRvIGdldCBia3N2ICByZXQ6ICVkIiwgcmV0KTsNCj4gKwkJaXQ2NTA1 X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfVFJJR0dFUiwNCj4gKwkJCQlIRENQX1RSSUdHRVJf S1NWX0ZBSUwsIEhEQ1BfVFJJR0dFUl9LU1ZfRkFJTCk7DQo+ICsJfQ0KPiArDQo+ICsJRFJNX0RF Vl9ERUJVR19EUklWRVIoZGV2LCAiYmtzdiA9IDB4JSpwaCIsDQo+ICsJCQkgICAgIChpbnQpQVJS QVlfU0laRShpdDY1MDUtPmJrc3ZzKSwgaXQ2NTA1LT5ia3N2cyk7DQo+ICsNCj4gKwlpZiAoIWl0 NjUwNV9oZGNwX2lzX2tzdl92YWxpZChpdDY1MDUtPmJrc3ZzKSkgew0KPiArCQlEUk1fREVWX0VS Uk9SKGRldiwgIkRpc3BsYXkgUG9ydCBia3N2IG5vdCB2YWxpZCIpOw0KPiArCQlpdDY1MDVfc2V0 X2JpdHMoaXQ2NTA1LCBSRUdfSERDUF9UUklHR0VSLA0KPiArCQkJCUhEQ1BfVFJJR0dFUl9LU1Zf RkFJTCwgSERDUF9UUklHR0VSX0tTVl9GQUlMKTsNCj4gKwl9DQo+ICsNCj4gKwlpdDY1MDVfaGRj cF9wYXJ0MV9hdXRoKGl0NjUwNSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9z aG93X2hkY3BfaW5mbyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJc3RydWN0IGRl dmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJaW50IGk7DQo+ICsJdTggKnNo YTEgPSBpdDY1MDUtPnNoYTFfaW5wdXQ7DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihk ZXYsICJoZGNwX3N0YXR1czogJWQgaXNfcmVwZWF0ZXI6ICVkIiwNCj4gKwkJCSAgICAgaXQ2NTA1 LT5oZGNwX3N0YXR1cywgaXQ2NTA1LT5pc19yZXBlYXRlcik7DQo+ICsJRFJNX0RFVl9ERUJVR19E UklWRVIoZGV2LCAiYmtzdiA9IDB4JSpwaCIsDQo+ICsJCQkgICAgIChpbnQpQVJSQVlfU0laRShp dDY1MDUtPmJrc3ZzKSwgaXQ2NTA1LT5ia3N2cyk7DQo+ICsNCj4gKwlpZiAoaXQ2NTA1LT5pc19y ZXBlYXRlcikgew0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJoZGNwX2Rvd25fc3Ry ZWFtX2NvdW50OiAlZCIsDQo+ICsJCQkJICAgICBpdDY1MDUtPmhkY3BfZG93bl9zdHJlYW1fY291 bnQpOw0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJzaGExX2lucHV0OiAweCUqcGgi LA0KPiArCQkJCSAgICAgKGludClBUlJBWV9TSVpFKGl0NjUwNS0+c2hhMV9pbnB1dCksDQo+ICsJ CQkJICAgICBpdDY1MDUtPnNoYTFfaW5wdXQpOw0KPiArCQlmb3IgKGkgPSAwOyBpIDwgaXQ2NTA1 LT5oZGNwX2Rvd25fc3RyZWFtX2NvdW50OyBpKyspIHsNCj4gKwkJCURSTV9ERVZfREVCVUdfRFJJ VkVSKGRldiwgIktTVl8lZCA9IDB4JSpwaCIsIGksDQo+ICsJCQkJCSAgICAgRFJNX0hEQ1BfS1NW X0xFTiwgc2hhMSk7DQo+ICsJCQlzaGExICs9IERSTV9IRENQX0tTVl9MRU47DQo+ICsJCX0NCj4g KwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiYmluZm86IDB4JTJwaCBNMDogMHglOHBoIiwN Cj4gKwkJCQkgICAgIHNoYTEsIHNoYTEgKyAyKTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyB2b2lkIGl0NjUwNV9zdG9wX2xpbmtfdHJhaW4oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiAr ew0KPiArCWl0NjUwNS0+bGlua19zdGF0ZSA9IExJTktfSURMRTsNCj4gKwljYW5jZWxfd29ya19z eW5jKCZpdDY1MDUtPmxpbmtfd29ya3MpOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19U UkFJTl9DVFJMMSwgRk9SQ0VfUkVUUkFJTik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0 NjUwNV9saW5rX3RyYWluX29rKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiArCWl0NjUwNS0+ bGlua19zdGF0ZSA9IExJTktfT0s7DQo+ICsJLyogZGlzYWxiZSBtdXRlIGVuYWJsZSBhdmkgaW5m byBmcmFtZSAqLw0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EQVRBX01VVEVfQ1RS TCwgRU5fVklEX01VVEUsIDB4MDApOw0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19J TkZPRlJBTUVfQ1RSTCwNCj4gKwkJCUVOX1ZJRF9DVFJMX1BLVCwgRU5fVklEX0NUUkxfUEtUKTsN Cj4gKw0KPiArCWlmIChpdDY1MDVfYXVkaW9faW5wdXQoaXQ2NTA1KSkgew0KPiArCQlEUk1fREVW X0RFQlVHX0RSSVZFUihkZXYsICJFbmFibGUgYXVkaW8hIik7DQo+ICsJCWl0NjUwNV9lbmFibGVf YXVkaW8oaXQ2NTA1KTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoaXQ2NTA1LT5oZGNwX2Rlc2lyZWQp DQo+ICsJCWl0NjUwNV9zdGFydF9oZGNwKGl0NjUwNSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2 b2lkIGl0NjUwNV9saW5rX3N0ZXBfdHJhaW5fcHJvY2VzcyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUp DQo+ICt7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ ICsJaW50IHJldCwgaSwgc3RlcF9yZXRyeSA9IDM7DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RS SVZFUihkZXYsICJTdGFydCBzdGVwIHRyYWluIik7DQo+ICsNCj4gKwlpZiAoaXQ2NTA1LT5zaW5r X2NvdW50ID09IDApIHsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiaXQ2NTA1LT5z aW5rX2NvdW50OiVkLCBmb3JjZSBlcSIsDQo+ICsJCQkJICAgICBpdDY1MDUtPnNpbmtfY291bnQp Ow0KPiArCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LAlSRUdfVFJBSU5fQ1RSTDAsIEZPUkNFX0VR X0RPTkUsDQo+ICsJCQkJRk9SQ0VfRVFfRE9ORSk7DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ICsN Cj4gKwlpZiAoIWl0NjUwNS0+c3RlcF90cmFpbikgew0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZF UihkZXYsICJub3Qgc3VwcG9ydCBzdGVwIHRyYWluIik7DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ ICsNCj4gKwkvKiBzZXRwIHRyYWluaW5nIHN0YXJ0IGhlcmUgKi8NCj4gKwlmb3IgKGkgPSAwOyBp IDwgc3RlcF9yZXRyeTsgaSsrKSB7DQo+ICsJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19U UkFJTl9DVFJMMCwNCj4gKwkJCQlGT1JDRV9DUl9ET05FIHwgRk9SQ0VfRVFfRE9ORSwgMHgwMCk7 DQo+ICsJCWl0NjUwNV9kcGNkX3dyaXRlKGl0NjUwNSwgRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQs DQo+ICsJCQkJICBEUF9UUkFJTklOR19QQVRURVJOX0RJU0FCTEUpOw0KPiArCQlyZXQgPSBpdDY1 MDVfbGlua19zdGFydF9zdGVwX3RyYWluKGl0NjUwNSk7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJ VkVSKGRldiwgInN0ZXAgdHJhaW4gJXMsIHJldHJ5OiVkIHRpbWVzIiwNCj4gKwkJCQkgICAgIHJl dCA/ICJwYXNzIiA6ICJmYWlsZWQiLCBpICsgMSk7DQo+ICsJCWlmIChyZXQpIHsNCj4gKwkJCWl0 NjUwNV9saW5rX3RyYWluX29rKGl0NjUwNSk7DQo+ICsJCQlyZXR1cm47DQo+ICsJCX0NCj4gKwl9 DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJ0cmFpbmluZyBmYWlsIik7DQo+ ICsJaXQ2NTA1LT5saW5rX3N0YXRlID0gTElOS19JRExFOw0KPiArCWl0NjUwNV92aWRlb19yZXNl dChpdDY1MDUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfbGlua190cmFpbmlu Z193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1 ICppdDY1MDUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl0NjUwNSwgbGlua193b3Jrcyk7 DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJaW50 IHJldDsNCj4gKw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIml0NjUwNS0+c2lua19j b3VudDogJWQiLA0KPiArCQkJICAgICBpdDY1MDUtPnNpbmtfY291bnQpOw0KPiArDQo+ICsJaWYg KCFpdDY1MDVfZ2V0X3NpbmtfaHBkX3N0YXR1cyhpdDY1MDUpKQ0KPiArCQlyZXR1cm47DQo+ICsN Cj4gKwlpdDY1MDVfbGlua190cmFpbmluZ19zZXR1cChpdDY1MDUpOw0KPiArCWl0NjUwNV9yZXNl dF9oZGNwKGl0NjUwNSk7DQo+ICsJaXQ2NTA1X2F1eF9yZXNldChpdDY1MDUpOw0KPiArDQo+ICsJ aWYgKGl0NjUwNS0+YXV0b190cmFpbl9yZXRyeSA8IDEpIHsNCj4gKwkJaXQ2NTA1X2xpbmtfc3Rl cF90cmFpbl9wcm9jZXNzKGl0NjUwNSk7DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ICsNCj4gKwly ZXQgPSBpdDY1MDVfbGlua19zdGFydF9hdXRvX3RyYWluKGl0NjUwNSk7DQo+ICsJRFJNX0RFVl9E RUJVR19EUklWRVIoZGV2LCAiYXV0byB0cmFpbiAlcywgYXV0b190cmFpbl9yZXRyeTogJWQiLA0K PiArCQkJICAgICByZXQgPyAicGFzcyIgOiAiZmFpbGVkIiwgaXQ2NTA1LT5hdXRvX3RyYWluX3Jl dHJ5KTsNCj4gKwlpdDY1MDUtPmF1dG9fdHJhaW5fcmV0cnktLTsNCj4gKw0KPiArCWlmIChyZXQp IHsNCj4gKwkJaXQ2NTA1X2xpbmtfdHJhaW5fb2soaXQ2NTA1KTsNCj4gKwkJcmV0dXJuOw0KPiAr CX0NCj4gKw0KPiArCWl0NjUwNV9kdW1wKGl0NjUwNSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2 b2lkIGl0NjUwNV9wbHVnZ2VkX3N0YXR1c190b19jb2RlYyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUp DQo+ICt7DQo+ICsJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXMgPSBpdDY1MDUtPmNv bm5lY3Rvcl9zdGF0dXM7DQo+ICsNCj4gKwlpZiAoaXQ2NTA1LT5wbHVnZ2VkX2NiICYmIGl0NjUw NS0+Y29kZWNfZGV2KQ0KPiArCQlpdDY1MDUtPnBsdWdnZWRfY2IoaXQ2NTA1LT5jb2RlY19kZXYs DQo+ICsJCQkJICAgc3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKTsNCj4gK30N Cj4gKw0KPiArc3RhdGljIGludCBpdDY1MDVfcHJvY2Vzc19ocGRfaXJxKHN0cnVjdCBpdDY1MDUg Kml0NjUwNSkNCj4gK3sNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQt PmRldjsNCj4gKwlpbnQgcmV0LCBkcGNkX3NpbmtfY291bnQsIGRwX2lycV92ZWN0b3IsIGJzdGF0 dXM7DQo+ICsJdTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV07DQo+ICsNCj4gKwlp ZiAoIWl0NjUwNV9nZXRfc2lua19ocGRfc3RhdHVzKGl0NjUwNSkpIHsNCj4gKwkJRFJNX0RFVl9E RUJVR19EUklWRVIoZGV2LCAiSFBEX0lSUSBIUEQgbG93Iik7DQo+ICsJCWl0NjUwNS0+c2lua19j b3VudCA9IDA7DQo+ICsJCXJldHVybiAwOw0KPiArCX0NCj4gKw0KPiArCXJldCA9IGl0NjUwNV9k cGNkX3JlYWQoaXQ2NTA1LCBEUF9TSU5LX0NPVU5UKTsNCj4gKwlpZiAocmV0IDwgMCkNCj4gKwkJ cmV0dXJuIHJldDsNCj4gKw0KPiArCWRwY2Rfc2lua19jb3VudCA9IERQX0dFVF9TSU5LX0NPVU5U KHJldCk7DQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiZHBjZF9zaW5rX2NvdW50OiAl ZCBpdDY1MDUtPnNpbmtfY291bnQ6JWQiLA0KPiArCQkJICAgICBkcGNkX3NpbmtfY291bnQsIGl0 NjUwNS0+c2lua19jb3VudCk7DQo+ICsNCj4gKwlpZiAoaXQ2NTA1LT5icmFuY2hfZGV2aWNlICYm IGRwY2Rfc2lua19jb3VudCAhPSBpdDY1MDUtPnNpbmtfY291bnQpIHsNCj4gKwkJbWVtc2V0KGl0 NjUwNS0+ZHBjZCwgMCwgc2l6ZW9mKGl0NjUwNS0+ZHBjZCkpOw0KPiArCQlpdDY1MDUtPnNpbmtf Y291bnQgPSBkcGNkX3NpbmtfY291bnQ7DQo+ICsJCWtmcmVlKGl0NjUwNS0+ZWRpZCk7DQo+ICsJ CWl0NjUwNS0+ZWRpZCA9IE5VTEw7DQo+ICsJCWl0NjUwNV9yZXNldF9sb2dpYyhpdDY1MDUpOw0K PiArCQlpdDY1MDVfaW50X21hc2tfZW5hYmxlKGl0NjUwNSk7DQo+ICsJCWl0NjUwNV9pbml0KGl0 NjUwNSk7DQo+ICsJCXJldHVybiAwOw0KPiArCX0NCj4gKw0KPiArCWRwX2lycV92ZWN0b3IgPSBp dDY1MDVfZHBjZF9yZWFkKGl0NjUwNSwgRFBfREVWSUNFX1NFUlZJQ0VfSVJRX1ZFQ1RPUik7DQo+ ICsJaWYgKGRwX2lycV92ZWN0b3IgPCAwKQ0KPiArCQlyZXR1cm4gZHBfaXJxX3ZlY3RvcjsNCj4g Kw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImRwX2lycV92ZWN0b3IgPSAweCUwMngi LCBkcF9pcnFfdmVjdG9yKTsNCj4gKw0KPiArCWlmIChkcF9pcnFfdmVjdG9yICYgRFBfQ1BfSVJR KSB7DQo+ICsJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX1RSSUdHRVIsIEhEQ1Bf VFJJR0dFUl9DUElSUSwNCj4gKwkJCQlIRENQX1RSSUdHRVJfQ1BJUlEpOw0KPiArDQo+ICsJCWJz dGF0dXMgPSBpdDY1MDVfZHBjZF9yZWFkKGl0NjUwNSwgRFBfQVVYX0hEQ1BfQlNUQVRVUyk7DQo+ ICsJCWlmIChic3RhdHVzIDwgMCkNCj4gKwkJCXJldHVybiBic3RhdHVzOw0KPiArDQo+ICsJCURS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIkJzdGF0dXMgPSAweCUwMngiLCBic3RhdHVzKTsNCj4g Kwl9DQo+ICsNCj4gKwlyZXQgPSBkcm1fZHBfZHBjZF9yZWFkX2xpbmtfc3RhdHVzKCZpdDY1MDUt PmF1eCwgbGlua19zdGF0dXMpOw0KPiArCWlmIChyZXQgPCAwKSB7DQo+ICsJCURSTV9ERVZfRVJS T1IoZGV2LCAiRmFpbCB0byByZWFkIGxpbmsgc3RhdHVzIHJldDogJWQiLA0KPiArCQkJICAgICAg cmV0KTsNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RS SVZFUihkZXYsICJsaW5rIHN0YXR1cyA9IDB4JSpwaCIsDQo+ICsJCQkgICAgIChpbnQpQVJSQVlf U0laRShsaW5rX3N0YXR1cyksIGxpbmtfc3RhdHVzKTsNCj4gKw0KPiArCWlmICghZHJtX2RwX2No YW5uZWxfZXFfb2sobGlua19zdGF0dXMsIGl0NjUwNS0+bGFuZV9jb3VudCkpIHsNCj4gKwkJaXQ2 NTA1LT5hdXRvX3RyYWluX3JldHJ5ID0gQVVUT19UUkFJTl9SRVRSWTsNCj4gKwkJaXQ2NTA1X3Zp ZGVvX3Jlc2V0KGl0NjUwNSk7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9jaGVja19yZWcwNihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUs IHVuc2lnbmVkIGludCByZWcwNikNCj4gK3sNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2 NTA1LT5jbGllbnQtPmRldjsNCj4gKwlib29sIGRhdGE7DQo+ICsNCj4gKwlpZiAocmVnMDYgJiBJ TlRfSFBEX0NIQU5HRSkgew0KPiArCQlkYXRhID0gaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMo aXQ2NTA1KTsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiaHBkIGNoYW5nZSBpbnRl cnJ1cHQsIGNoYW5nZSB0byAlcyIsDQo+ICsJCQkJICAgICBkYXRhID8gImhpZ2giIDogImxvdyIp Ow0KPiArCQlpZiAoaXQ2NTA1LT5jb25uZWN0b3IuZGV2KQ0KPiArCQkJZHJtX2hlbHBlcl9ocGRf aXJxX2V2ZW50KGl0NjUwNS0+Y29ubmVjdG9yLmRldik7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJ VkVSKGRldiwgIml0NjUwNS0+c2lua19jb3VudDogJWQiLA0KPiArCQkJCSAgICAgaXQ2NTA1LT5z aW5rX2NvdW50KTsNCj4gKw0KPiArCQlpZiAoZGF0YSkgew0KPiArCQkJd2FpdF9mb3JfY29tcGxl dGlvbl90aW1lb3V0KCZpdDY1MDUtPndhaXRfZWRpZF9jb21wbGV0ZSwNCj4gKwkJCQkJCSAgICBt c2Vjc190b19qaWZmaWVzKDYwMDApKTsNCj4gKwkJCWl0NjUwNV9sYW5lX3Rlcm1pbmF0aW9uX29u KGl0NjUwNSk7DQo+ICsJCQlpdDY1MDVfbGFuZV9wb3dlcl9vbihpdDY1MDUpOw0KPiArDQo+ICsJ CQkvKg0KPiArCQkJICogZm9yIHNvbWUgZG9uZ2xlIHdoaWNoIGlzc3VlIEhQRF9pcnENCj4gKwkJ CSAqIHdoZW4gc2luayBjb3VudCBjaGFuZ2UgZnJvbSAgMC0+MQ0KPiArCQkJICogaXQ2NTA1IG5v dCBhYmxlIHRvIHJlY2VpdmUgSFBEX0lSUQ0KPiArCQkJICogaWYgSFcgbmV2ZXIgZ28gaW50byB0 cmFpbmlnIGRvbmUNCj4gKwkJCSAqLw0KPiArDQo+ICsJCQlpZiAoaXQ2NTA1LT5icmFuY2hfZGV2 aWNlICYmIGl0NjUwNS0+c2lua19jb3VudCA9PSAwKQ0KPiArCQkJCXNjaGVkdWxlX3dvcmsoJml0 NjUwNS0+bGlua193b3Jrcyk7DQo+ICsNCj4gKwkJCWlmICghaXQ2NTA1X2dldF92aWRlb19zdGF0 dXMoaXQ2NTA1KSkNCj4gKwkJCQlpdDY1MDVfdmlkZW9fcmVzZXQoaXQ2NTA1KTsNCj4gKw0KPiAr CQkJaXQ2NTA1X2NhbGNfdmlkZW9faW5mbyhpdDY1MDUpOw0KPiArCQl9IGVsc2Ugew0KPiArCQkJ a2ZyZWUoaXQ2NTA1LT5lZGlkKTsNCj4gKwkJCWl0NjUwNS0+ZWRpZCA9IE5VTEw7DQo+ICsJCQlt ZW1zZXQoaXQ2NTA1LT5kcGNkLCAwLCBzaXplb2YoaXQ2NTA1LT5kcGNkKSk7DQo+ICsNCj4gKwkJ CWlmIChpdDY1MDUtPmhkY3BfZGVzaXJlZCkNCj4gKwkJCQlpdDY1MDVfc3RvcF9oZGNwKGl0NjUw NSk7DQo+ICsNCj4gKwkJCWl0NjUwNV92aWRlb19kaXNhYmxlKGl0NjUwNSk7DQo+ICsJCQlpdDY1 MDVfZGlzYWJsZV9hdWRpbyhpdDY1MDUpOw0KPiArCQkJaXQ2NTA1X3N0b3BfbGlua190cmFpbihp dDY1MDUpOw0KPiArCQkJaXQ2NTA1X2xhbmVfb2ZmKGl0NjUwNSk7DQo+ICsJCQlyZXR1cm47DQo+ ICsJCX0NCj4gKwl9DQo+ICsNCj4gKwlpZiAocmVnMDYgJiBJTlRfUkVDRUlWRV9IUERfSVJRKSB7 DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImhwZF9pcnEgaW50ZXJydXB0Iik7DQo+ ICsNCj4gKwkJaWYgKGl0NjUwNV9wcm9jZXNzX2hwZF9pcnEoaXQ2NTA1KSA8IDApDQo+ICsJCQlE Uk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJwcm9jZXNzIGhwZF9pcnEgZmFpbCEiKTsNCj4gKwl9 DQo+ICsNCj4gKwlpZiAocmVnMDYgJiBJTlRfU0NEVF9DSEFOR0UpIHsNCj4gKwkJZGF0YSA9IGl0 NjUwNV9nZXRfdmlkZW9fc3RhdHVzKGl0NjUwNSk7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgInZpZGVvIHN0YWJsZSBjaGFuZ2UgaW50ZXJydXB0LCAlcyIsDQo+ICsJCQkJICAgICBk YXRhID8gInN0YWJsZSIgOiAidW5zdGFibGUiKTsNCj4gKwkJaXQ2NTA1X2NhbGNfdmlkZW9faW5m byhpdDY1MDUpOw0KPiArDQo+ICsJCWlmIChkYXRhKQ0KPiArCQkJc2NoZWR1bGVfd29yaygmaXQ2 NTA1LT5saW5rX3dvcmtzKTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAocmVnMDYgJiBJTlRfSERDUF9E T05FKSB7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImhkY3AgZG9uZSBpbnRlcnJ1 cHQiKTsNCj4gKwkJaXQ2NTA1LT5oZGNwX3N0YXR1cyA9IEhEQ1BfQVVUSF9ET05FOw0KPiArCQlp dDY1MDVfc2hvd19oZGNwX2luZm8oaXQ2NTA1KTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAocmVnMDYg JiBJTlRfSERDUF9GQUlMKSB7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImhkY3Ag ZmFpbCBpbnRlcnJ1cHQiKTsNCj4gKwkJaXQ2NTA1LT5oZGNwX3N0YXR1cyA9IEhEQ1BfQVVUSF9J RExFOw0KPiArCQlpdDY1MDVfc2hvd19oZGNwX2luZm8oaXQ2NTA1KTsNCj4gKwkJaXQ2NTA1X3N0 YXJ0X2hkY3AoaXQ2NTA1KTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUw NV9jaGVja19yZWcwNyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsIHVuc2lnbmVkIGludCByZWcwNykN Cj4gK3sNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4g Kw0KPiArCWlmIChyZWcwNyAmIElOVF9BVVhfQ01EX0ZBSUwpDQo+ICsJCURSTV9ERVZfREVCVUdf RFJJVkVSKGRldiwgIkFVWCBQQyBSZXF1ZXN0IEZhaWwgSW50ZXJydXB0Iik7DQo+ICsNCj4gKwlp ZiAocmVnMDcgJiBJTlRfSERDUF9LU1ZfQ0hFQ0spIHsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklW RVIoZGV2LCAiSERDUCBldmVudCBJbnRlcnJ1cHQiKTsNCj4gKwkJc2NoZWR1bGVfd29yaygmaXQ2 NTA1LT5oZGNwX3dhaXRfa3N2X2xpc3QpOw0KPiArCX0NCj4gKw0KPiArCWlmIChyZWcwNyAmIElO VF9BVURJT19GSUZPX0VSUk9SKSB7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImF1 ZGlvIGZpZm8gZXJyb3IgSW50ZXJydXB0Iik7DQo+ICsNCj4gKwkJaWYgKGl0NjUwNV9hdWRpb19p bnB1dChpdDY1MDUpKQ0KPiArCQkJaXQ2NTA1X2VuYWJsZV9hdWRpbyhpdDY1MDUpOw0KPiArCX0N Cj4gKw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfY2hlY2tfcmVnMDgoc3RydWN0 IGl0NjUwNSAqaXQ2NTA1LCB1bnNpZ25lZCBpbnQgcmVnMDgpDQo+ICt7DQo+ICsJc3RydWN0IGRl dmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsNCj4gKwlpZiAocmVnMDggJiBJ TlRfTElOS19UUkFJTl9GQUlMKSB7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImxp bmsgdHJhaW5pbmcgZmFpbCBpbnRlcnJ1cHQiKTsNCj4gKwkJc2NoZWR1bGVfd29yaygmaXQ2NTA1 LT5saW5rX3dvcmtzKTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAocmVnMDggJiBJTlRfVklEX0ZJRk9f RVJST1IpIHsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAidmlkZW8gZmlmbyBvdmVy ZmxvdyBpbnRlcnJ1cHQiKTsNCj4gKwkJaXQ2NTA1LT5hdXRvX3RyYWluX3JldHJ5ID0gQVVUT19U UkFJTl9SRVRSWTsNCj4gKwkJZmx1c2hfd29yaygmaXQ2NTA1LT5saW5rX3dvcmtzKTsNCj4gKwkJ aXQ2NTA1X3N0b3BfaGRjcChpdDY1MDUpOw0KPiArCQlpdDY1MDVfdmlkZW9fcmVzZXQoaXQ2NTA1 KTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAocmVnMDggJiBJTlRfSU9fTEFUQ0hfRklGT19PVkVSRkxP Vykgew0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJJTyBsYXRjaCBmaWZvIG92ZXJm bG93IGludGVycnVwdCIpOw0KPiArCQlpdDY1MDUtPmF1dG9fdHJhaW5fcmV0cnkgPSBBVVRPX1RS QUlOX1JFVFJZOw0KPiArCQlmbHVzaF93b3JrKCZpdDY1MDUtPmxpbmtfd29ya3MpOw0KPiArCQlp dDY1MDVfc3RvcF9oZGNwKGl0NjUwNSk7DQo+ICsJCWl0NjUwNV92aWRlb19yZXNldChpdDY1MDUp Ow0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGljIGlycXJldHVybl90IGl0NjUwNV9pbnRfdGhy ZWFkZWRfaGFuZGxlcihpbnQgdW51c2VkLCB2b2lkICpkYXRhKQ0KPiArew0KPiArCXN0cnVjdCBp dDY1MDUgKml0NjUwNSA9IGRhdGE7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+ Y2xpZW50LT5kZXY7DQo+ICsJaW50IHJlZzA2LCByZWcwNywgcmVnMDg7DQo+ICsNCj4gKwltc2xl ZXAoMTAwKTsNCj4gKwltdXRleF9sb2NrKCZpdDY1MDUtPmV4dGNvbl9sb2NrKTsNCj4gKw0KPiAr CWlmIChpdDY1MDUtPmVuYWJsZV9kcnZfaG9sZCB8fCAhaXQ2NTA1LT5wb3dlcmVkKQ0KPiArCQln b3RvIHVubG9jazsNCj4gKw0KPiArCXJlZzA2ID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBJTlRfU1RB VFVTXzAxKTsNCj4gKwlyZWcwNyA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgSU5UX1NUQVRVU18wMik7 DQo+ICsJcmVnMDggPSBpdDY1MDVfcmVhZChpdDY1MDUsIElOVF9TVEFUVVNfMDMpOw0KPiArDQo+ ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5UX1NUQVRVU18wMSwgcmVnMDYpOw0KPiArCWl0NjUw NV93cml0ZShpdDY1MDUsIElOVF9TVEFUVVNfMDIsIHJlZzA3KTsNCj4gKwlpdDY1MDVfd3JpdGUo aXQ2NTA1LCBJTlRfU1RBVFVTXzAzLCByZWcwOCk7DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RS SVZFUihkZXYsICJyZWcwNiA9IDB4JTAyeCIsIHJlZzA2KTsNCj4gKwlEUk1fREVWX0RFQlVHX0RS SVZFUihkZXYsICJyZWcwNyA9IDB4JTAyeCIsIHJlZzA3KTsNCj4gKwlEUk1fREVWX0RFQlVHX0RS SVZFUihkZXYsICJyZWcwOCA9IDB4JTAyeCIsIHJlZzA4KTsNCj4gKwlpdDY1MDVfZGVidWdfcHJp bnQoaXQ2NTA1LCBSRUdfU1lTVEVNX1NUUywgIiIpOw0KPiArDQo+ICsJaWYgKHJlZzA2ICE9IDAp DQo+ICsJCWl0NjUwNV9jaGVja19yZWcwNihpdDY1MDUsIHJlZzA2KTsNCj4gKw0KPiArCWlmIChy ZWcwNyAhPSAwKQ0KPiArCQlpdDY1MDVfY2hlY2tfcmVnMDcoaXQ2NTA1LCByZWcwNyk7DQo+ICsN Cj4gKwlpZiAocmVnMDggIT0gMCkNCj4gKwkJaXQ2NTA1X2NoZWNrX3JlZzA4KGl0NjUwNSwgcmVn MDgpOw0KPiArDQo+ICt1bmxvY2s6DQo+ICsJbXV0ZXhfdW5sb2NrKCZpdDY1MDUtPmV4dGNvbl9s b2NrKTsNCj4gKw0KPiArCXJldHVybiBJUlFfSEFORExFRDsNCj4gK30NCj4gKw0KPiArc3RhdGlj IGludCBpdDY1MDVfcG93ZXJvbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJc3Ry dWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJc3RydWN0IGl0NjUw NV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9ICZpdDY1MDUtPnBkYXRhOw0KPiArCWludCBlcnI7DQo+ ICsNCj4gKwlpZiAoaXQ2NTA1LT5wb3dlcmVkKSB7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgIml0NjUwNSBhbHJlYWR5IHBvd2VyZWQgb24iKTsNCj4gKwkJcmV0dXJuIDA7DQo+ICsJ fQ0KPiArDQo+ICsJaWYgKHBkYXRhLT5wd3IxOCkgew0KPiArCQllcnIgPSByZWd1bGF0b3JfZW5h YmxlKHBkYXRhLT5wd3IxOCk7DQo+ICsJCWlmIChlcnIpIHsNCj4gKwkJCURSTV9ERVZfREVCVUdf RFJJVkVSKGRldiwgIkZhaWxlZCB0byBlbmFibGUgVkREMTg6ICVkIiwNCj4gKwkJCQkJICAgICBl cnIpOw0KPiArCQkJcmV0dXJuIGVycjsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCWlmIChwZGF0 YS0+b3ZkZCkgew0KPiArCQkvKiB0aW1lIGludGVydmFsIGJldHdlZW4gSVZERCBhbmQgT1ZERCBh dCBsZWFzdCBiZSAxbXMgKi8NCj4gKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOw0KPiArCQll cnIgPSByZWd1bGF0b3JfZW5hYmxlKHBkYXRhLT5vdmRkKTsNCj4gKwkJaWYgKGVycikgew0KPiAr CQkJcmVndWxhdG9yX2Rpc2FibGUocGRhdGEtPnB3cjE4KTsNCj4gKwkJCXJldHVybiBlcnI7DQo+ ICsJCX0NCj4gKwl9DQo+ICsJLyogdGltZSBpbnRlcnZhbCBiZXR3ZWVuIE9WREQgYW5kIFNZU1JT VE4gYXQgbGVhc3QgYmUgMTBtcyAqLw0KPiArCWlmIChwZGF0YS0+Z3Bpb2RfcmVzZXQpIHsNCj4g KwkJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7DQo+ICsJCWdwaW9kX3NldF92YWx1ZV9jYW5z bGVlcChwZGF0YS0+Z3Bpb2RfcmVzZXQsIDApOw0KPiArCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAw MCk7DQo+ICsJCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChwZGF0YS0+Z3Bpb2RfcmVzZXQsIDEp Ow0KPiArCQl1c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsNCj4gKwl9DQo+ICsNCj4gKwlpdDY1 MDVfcmVzZXRfbG9naWMoaXQ2NTA1KTsNCj4gKwlpdDY1MDVfaW50X21hc2tfZW5hYmxlKGl0NjUw NSk7DQo+ICsJaXQ2NTA1X2luaXQoaXQ2NTA1KTsNCj4gKwlpdDY1MDVfbGFuZV9vZmYoaXQ2NTA1 KTsNCj4gKw0KPiArCWl0NjUwNS0+cG93ZXJlZCA9IHRydWU7DQo+ICsNCj4gKwlyZXR1cm4gMDsN Cj4gK30NCj4gKw0KPiArc3RhdGljIGludCBpdDY1MDVfcG93ZXJvZmYoc3RydWN0IGl0NjUwNSAq aXQ2NTA1KQ0KPiArew0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ ZGV2Ow0KPiArCXN0cnVjdCBpdDY1MDVfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSAmaXQ2NTA1LT5w ZGF0YTsNCj4gKwlpbnQgZXJyOw0KPiArDQo+ICsJaWYgKCFpdDY1MDUtPnBvd2VyZWQpIHsNCj4g KwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAicG93ZXIgaGFkIGJlZW4gYWxyZWFkeSBvZmYi KTsNCj4gKwkJcmV0dXJuIDA7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKHBkYXRhLT5ncGlvZF9yZXNl dCkNCj4gKwkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHBkYXRhLT5ncGlvZF9yZXNldCwgMCk7 DQo+ICsNCj4gKwlpZiAocGRhdGEtPnB3cjE4KSB7DQo+ICsJCWVyciA9IHJlZ3VsYXRvcl9kaXNh YmxlKHBkYXRhLT5wd3IxOCk7DQo+ICsJCWlmIChlcnIpDQo+ICsJCQlyZXR1cm4gZXJyOw0KPiAr CX0NCj4gKw0KPiArCWlmIChwZGF0YS0+b3ZkZCkgew0KPiArCQllcnIgPSByZWd1bGF0b3JfZGlz YWJsZShwZGF0YS0+b3ZkZCk7DQo+ICsJCWlmIChlcnIpDQo+ICsJCQlyZXR1cm4gZXJyOw0KPiAr CX0NCj4gKw0KPiArCWl0NjUwNS0+cG93ZXJlZCA9IGZhbHNlOw0KPiArCWtmcmVlKGl0NjUwNS0+ ZWRpZCk7DQo+ICsJaXQ2NTA1LT5lZGlkID0gTlVMTDsNCj4gKwlpdDY1MDUtPnNpbmtfY291bnQg PSAwOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgc3Ry dWN0IGl0NjUwNSAqY29ubmVjdG9yX3RvX2l0NjUwNShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqYykN Cj4gK3sNCj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGMsIHN0cnVjdCBpdDY1MDUsIGNvbm5lY3Rv cik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X2dldF9tb2RlcyhzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yKQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9 IGNvbm5lY3Rvcl90b19pdDY1MDUoY29ubmVjdG9yKTsNCj4gKwlpbnQgZXJyLCBudW1fbW9kZXMg PSAwLCBpOw0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0K PiArDQo+ICsJaWYgKGl0NjUwNS0+ZWRpZCkNCj4gKwkJcmV0dXJuIGRybV9hZGRfZWRpZF9tb2Rl cyhjb25uZWN0b3IsIGl0NjUwNS0+ZWRpZCk7DQo+ICsNCj4gKwltdXRleF9sb2NrKCZpdDY1MDUt Pm1vZGVfbG9jayk7DQo+ICsJcmVpbml0X2NvbXBsZXRpb24oJml0NjUwNS0+d2FpdF9lZGlkX2Nv bXBsZXRlKTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsNCj4gKwkJaWYgKCFp dDY1MDVfZ2V0X3NpbmtfaHBkX3N0YXR1cyhpdDY1MDUpKQ0KPiArCQkJZ290byB1bmxvY2s7DQo+ ICsNCj4gKwkJaXQ2NTA1LT5lZGlkID0gZHJtX2RvX2dldF9lZGlkKCZpdDY1MDUtPmNvbm5lY3Rv ciwNCj4gKwkJCQkJICAgICAgIGl0NjUwNV9nZXRfZWRpZF9ibG9jaywgaXQ2NTA1KTsNCj4gKw0K PiArCQlpZiAoaXQ2NTA1LT5lZGlkKQ0KPiArCQkJYnJlYWs7DQo+ICsJfQ0KPiArCWlmICghaXQ2 NTA1LT5lZGlkKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHJlYWQgRURJ RCIpOw0KPiArCQludW1fbW9kZXMgPSAtRUlPOw0KPiArCQlnb3RvIHVubG9jazsNCj4gKwl9DQo+ ICsNCj4gKwllcnIgPSBkcm1fY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3Rv ciwgaXQ2NTA1LT5lZGlkKTsNCj4gKwlpZiAoZXJyKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2 LCAiRmFpbGVkIHRvIHVwZGF0ZSBFRElEIHByb3BlcnR5OiAlZCIsIGVycik7DQo+ICsJCW51bV9t b2RlcyA9IGVycjsNCj4gKwkJZ290byB1bmxvY2s7DQo+ICsJfQ0KPiArDQo+ICsJbnVtX21vZGVz ID0gZHJtX2FkZF9lZGlkX21vZGVzKGNvbm5lY3RvciwgaXQ2NTA1LT5lZGlkKTsNCj4gKw0KPiAr dW5sb2NrOg0KPiArCWNvbXBsZXRlKCZpdDY1MDUtPndhaXRfZWRpZF9jb21wbGV0ZSk7DQo+ICsJ bXV0ZXhfdW5sb2NrKCZpdDY1MDUtPm1vZGVfbG9jayk7DQo+ICsNCj4gKwlyZXR1cm4gbnVtX21v ZGVzOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVs cGVyX2Z1bmNzIGl0NjUwNV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0gew0KPiArCS5nZXRfbW9k ZXMgPSBpdDY1MDVfZ2V0X21vZGVzLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGVudW0gZHJtX2Nv bm5lY3Rvcl9zdGF0dXMgaXQ2NTA1X2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLA0KPiArCQkJCQkgICAgICAgYm9vbCBmb3JjZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1 ICppdDY1MDUgPSBjb25uZWN0b3JfdG9faXQ2NTA1KGNvbm5lY3Rvcik7DQo+ICsJc3RydWN0IGRl dmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJZW51bSBkcm1fY29ubmVjdG9y X3N0YXR1cyBzdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsNCj4gKw0KPiAr CURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIml0NjUwNS0+c2lua19jb3VudDolZCBwb3dlcmVk OiVkIiwNCj4gKwkJCSAgICAgaXQ2NTA1LT5zaW5rX2NvdW50LCBpdDY1MDUtPnBvd2VyZWQpOw0K PiArDQo+ICsJbXV0ZXhfbG9jaygmaXQ2NTA1LT5tb2RlX2xvY2spOw0KPiArDQo+ICsJaWYgKCFp dDY1MDUtPnBvd2VyZWQpDQo+ICsJCWdvdG8gdW5sb2NrOw0KPiArDQo+ICsJaWYgKGl0NjUwNS0+ ZW5hYmxlX2Rydl9ob2xkKSB7DQo+ICsJCXN0YXR1cyA9IGl0NjUwNV9nZXRfc2lua19ocGRfc3Rh dHVzKGl0NjUwNSkgPw0KPiArCQkJCQljb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCA6DQo+ICsJ CQkJCWNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOw0KPiArCQlnb3RvIHVubG9jazsNCj4g Kwl9DQo+ICsNCj4gKwlpZiAoaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSkgew0K PiArCQlpdDY1MDVfYXV4X29uKGl0NjUwNSk7DQo+ICsJCWl0NjUwNV9kcm1fZHBfbGlua19wcm9i ZSgmaXQ2NTA1LT5hdXgsICZpdDY1MDUtPmxpbmspOw0KPiArCQlpdDY1MDVfZHJtX2RwX2xpbmtf cG93ZXJfdXAoJml0NjUwNS0+YXV4LCAmaXQ2NTA1LT5saW5rKTsNCj4gKwkJaXQ2NTA1LT5hdXRv X3RyYWluX3JldHJ5ID0gQVVUT19UUkFJTl9SRVRSWTsNCj4gKw0KPiArCQlpZiAoaXQ2NTA1LT5k cGNkWzBdID09IDApIHsNCj4gKwkJCWl0NjUwNV9nZXRfZHBjZChpdDY1MDUsIERQX0RQQ0RfUkVW LCBpdDY1MDUtPmRwY2QsDQo+ICsJCQkJCUFSUkFZX1NJWkUoaXQ2NTA1LT5kcGNkKSk7DQo+ICsJ CQlpdDY1MDVfdmFyaWFibGVfY29uZmlnKGl0NjUwNSk7DQo+ICsJCQlpdDY1MDVfcGFyc2VfbGlu a19jYXBhYmlsaXRpZXMoaXQ2NTA1KTsNCj4gKwkJfQ0KPiArDQo+ICsJCWl0NjUwNS0+c2lua19j b3VudCA9IERQX0dFVF9TSU5LX0NPVU5UKGl0NjUwNV9kcGNkX3JlYWQoaXQ2NTA1LA0KPiArCQkJ CQkJICAgICAgIERQX1NJTktfQ09VTlQpKTsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2 LCAiaXQ2NTA1LT5zaW5rX2NvdW50OiVkIGJyYW5jaDolZCIsDQo+ICsJCQkJICAgICBpdDY1MDUt PnNpbmtfY291bnQsIGl0NjUwNS0+YnJhbmNoX2RldmljZSk7DQo+ICsNCj4gKwkJaWYgKGl0NjUw NS0+YnJhbmNoX2RldmljZSkgew0KPiArCQkJc3RhdHVzID0gKGl0NjUwNS0+c2lua19jb3VudCAh PSAwKSA/DQo+ICsJCQkJIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkIDoNCj4gKwkJCQkgY29u bmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7DQo+ICsJCX0gZWxzZSB7DQo+ICsJCQlzdGF0dXMg PSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsNCj4gKwkJfQ0KPiArCX0gZWxzZSB7DQo+ICsJ CWl0NjUwNS0+c2lua19jb3VudCA9IDA7DQo+ICsJCW1lbXNldChpdDY1MDUtPmRwY2QsIDAsIHNp emVvZihpdDY1MDUtPmRwY2QpKTsNCj4gKwl9DQo+ICsNCj4gK3VubG9jazoNCj4gKwlpZiAoaXQ2 NTA1LT5jb25uZWN0b3Jfc3RhdHVzICE9IHN0YXR1cykgew0KPiArCQlpdDY1MDUtPmNvbm5lY3Rv cl9zdGF0dXMgPSBzdGF0dXM7DQo+ICsJCWl0NjUwNV9wbHVnZ2VkX3N0YXR1c190b19jb2RlYyhp dDY1MDUpOw0KPiArCX0NCj4gKw0KPiArCW11dGV4X3VubG9jaygmaXQ2NTA1LT5tb2RlX2xvY2sp Ow0KPiArDQo+ICsJcmV0dXJuIHN0YXR1czsNCj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIGl0NjUwNV9jb25uZWN0b3JfZnVuY3MgPSB7DQo+ICsJ LmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsDQo+ ICsJLmRldGVjdCA9IGl0NjUwNV9kZXRlY3QsDQo+ICsJLmRlc3Ryb3kgPSBkcm1fY29ubmVjdG9y X2NsZWFudXAsDQo+ICsJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0 LA0KPiArCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVj dG9yX2R1cGxpY2F0ZV9zdGF0ZSwNCj4gKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRv bWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwNCj4gK307DQo+ICsNCj4gK3N0YXRp YyBpbnQgaXQ2NTA1X2V4dGNvbl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYs DQo+ICsJCQkJICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpDQo+ICt7DQo+ICsJc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1ID0gY29udGFpbmVyX29mKHNlbGYsIHN0cnVjdCBpdDY1MDUsIGV2 ZW50X25iKTsNCj4gKw0KPiArCXNjaGVkdWxlX3dvcmsoJml0NjUwNS0+ZXh0Y29uX3dxKTsNCj4g KwlyZXR1cm4gTk9USUZZX0RPTkU7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9l eHRjb25fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQo+ICt7DQo+ICsJc3RydWN0IGl0 NjUwNSAqaXQ2NTA1ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpdDY1MDUsIGV4dGNvbl93 cSk7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJ aW50IHN0YXRlID0gZXh0Y29uX2dldF9zdGF0ZShpdDY1MDUtPmV4dGNvbiwgRVhUQ09OX0RJU1Bf RFApOw0KPiArCXVuc2lnbmVkIGludCBwd3JvZmZyZXRyeSA9IDA7DQo+ICsNCj4gKwlpZiAoaXQ2 NTA1LT5lbmFibGVfZHJ2X2hvbGQpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCW11dGV4X2xvY2so Jml0NjUwNS0+ZXh0Y29uX2xvY2spOw0KPiArDQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2 LCAiRVhUQ09OX0RJU1BfRFAgPSAweCUwMngiLCBzdGF0ZSk7DQo+ICsJaWYgKHN0YXRlID4gMCkg ew0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJzdGFydCB0byBwb3dlciBvbiIpOw0K PiArCQltc2xlZXAoMTAwKTsNCj4gKwkJaXQ2NTA1X3Bvd2Vyb24oaXQ2NTA1KTsNCj4gKwl9IGVs c2Ugew0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJzdGFydCB0byBwb3dlciBvZmYi KTsNCj4gKwkJd2hpbGUgKGl0NjUwNV9wb3dlcm9mZihpdDY1MDUpICYmIHB3cm9mZnJldHJ5Kysg PCA1KSB7DQo+ICsJCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJwb3dlciBvZmYgZmFpbCAl ZCB0aW1lcyIsDQo+ICsJCQkJCSAgICAgcHdyb2ZmcmV0cnkpOw0KPiArCQl9DQo+ICsNCj4gKwkJ ZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50KGl0NjUwNS0+Y29ubmVjdG9yLmRldik7DQo+ICsJCW1l bXNldChpdDY1MDUtPmRwY2QsIDAsIHNpemVvZihpdDY1MDUtPmRwY2QpKTsNCj4gKwkJRFJNX0RF Vl9ERUJVR19EUklWRVIoZGV2LCAicG93ZXIgb2ZmIGl0NjUwNSBzdWNjZXNzISIpOw0KPiArCX0N Cj4gKw0KPiArCW11dGV4X3VubG9jaygmaXQ2NTA1LT5leHRjb25fbG9jayk7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBpbnQgaXQ2NTA1X3VzZV9ub3RpZmllcl9tb2R1bGUoc3RydWN0IGl0NjUwNSAq aXQ2NTA1KQ0KPiArew0KPiArCWludCByZXQ7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0 NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsNCj4gKwlpdDY1MDUtPmV2ZW50X25iLm5vdGlmaWVyX2Nh bGwgPSBpdDY1MDVfZXh0Y29uX25vdGlmaWVyOw0KPiArCUlOSVRfV09SSygmaXQ2NTA1LT5leHRj b25fd3EsIGl0NjUwNV9leHRjb25fd29yayk7DQo+ICsJcmV0ID0gZGV2bV9leHRjb25fcmVnaXN0 ZXJfbm90aWZpZXIoJml0NjUwNS0+Y2xpZW50LT5kZXYsDQo+ICsJCQkJCSAgICBpdDY1MDUtPmV4 dGNvbiwgRVhUQ09OX0RJU1BfRFAsDQo+ICsJCQkJCSAgICAmaXQ2NTA1LT5ldmVudF9uYik7DQo+ ICsJaWYgKHJldCkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgImZhaWxlZCB0byByZWdpc3Rl ciBub3RpZmllciBmb3IgRFAiKTsNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ICsNCj4gKwlz Y2hlZHVsZV93b3JrKCZpdDY1MDUtPmV4dGNvbl93cSk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4g K30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X3JlbW92ZV9ub3RpZmllcl9tb2R1bGUoc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWlmIChpdDY1MDUtPmV4dGNvbikgew0KPiAr CQlkZXZtX2V4dGNvbl91bnJlZ2lzdGVyX25vdGlmaWVyKCZpdDY1MDUtPmNsaWVudC0+ZGV2LA0K PiArCQkJCQkJaXQ2NTA1LT5leHRjb24sCUVYVENPTl9ESVNQX0RQLA0KPiArCQkJCQkJJml0NjUw NS0+ZXZlbnRfbmIpOw0KPiArDQo+ICsJCWZsdXNoX3dvcmsoJml0NjUwNS0+ZXh0Y29uX3dxKTsN Cj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIF9fbWF5YmVfdW51c2VkIGl0NjUwNV9k ZWxheWVkX2F1ZGlvKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCj4gK3sNCj4gKwlzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl0NjUwNSwNCj4gKwkJ CQkJICAgICBkZWxheWVkX2F1ZGlvLndvcmspOw0KPiArDQo+ICsJRFJNX0RFVl9ERUJVR19EUklW RVIoJml0NjUwNS0+Y2xpZW50LT5kZXYsICJzdGFydCIpOw0KPiArDQo+ICsJaWYgKCFpdDY1MDUt PnBvd2VyZWQpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCWlmICghaXQ2NTA1LT5lbmFibGVfZHJ2 X2hvbGQpDQo+ICsJCWl0NjUwNV9lbmFibGVfYXVkaW8oaXQ2NTA1KTsNCj4gK30NCj4gKw0KPiAr c3RhdGljIGludCBfX21heWJlX3VudXNlZCBpdDY1MDVfYXVkaW9fc2V0dXBfaHdfcGFyYW1zKHN0 cnVjdCBpdDY1MDUgKml0NjUwNSwNCj4gKwkJCQkJc3RydWN0IGhkbWlfY29kZWNfcGFyYW1zICpw YXJhbXMpDQo+ICt7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5k ZXY7DQo+ICsJaW50IGkgPSAwOw0KPiArDQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAi JXMgJWQgSHosICVkIGJpdCwgJWQgY2hhbm5lbHNcbiIsIF9fZnVuY19fLA0KPiArCQkJICAgICBw YXJhbXMtPnNhbXBsZV9yYXRlLCBwYXJhbXMtPnNhbXBsZV93aWR0aCwNCj4gKwkJCSAgICAgcGFy YW1zLT5jZWEuY2hhbm5lbHMpOw0KPiArDQo+ICsJaWYgKCFpdDY1MDUtPmJyaWRnZS5lbmNvZGVy KQ0KPiArCQlyZXR1cm4gLUVOT0RFVjsNCj4gKw0KPiArCWlmIChwYXJhbXMtPmNlYS5jaGFubmVs cyA8PSAxIHx8IHBhcmFtcy0+Y2VhLmNoYW5uZWxzID4gOCkgew0KPiArCQlEUk1fREVWX0RFQlVH X0RSSVZFUihkZXYsICJjaGFubmVsIG51bWJlcjogJWQgbm90IHN1cHBvcnQiLA0KPiArCQkJCSAg ICAgaXQ2NTA1LT5hdWRpby5jaGFubmVsX2NvdW50KTsNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ ICsJfQ0KPiArDQo+ICsJaXQ2NTA1LT5hdWRpby5jaGFubmVsX2NvdW50ID0gcGFyYW1zLT5jZWEu Y2hhbm5lbHM7DQo+ICsNCj4gKwl3aGlsZSAoaSA8IEFSUkFZX1NJWkUoYXVkaW9fc2FtcGxlX3Jh dGVfbWFwKSAmJg0KPiArCSAgICAgICBwYXJhbXMtPnNhbXBsZV9yYXRlICE9DQo+ICsJCSAgICAg ICBhdWRpb19zYW1wbGVfcmF0ZV9tYXBbaV0uc2FtcGxlX3JhdGVfdmFsdWUpIHsNCj4gKwkJaSsr Ow0KPiArCX0NCj4gKwlpZiAoaSA9PSBBUlJBWV9TSVpFKGF1ZGlvX3NhbXBsZV9yYXRlX21hcCkp IHsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAic2FtcGxlIHJhdGU6ICVkIEh6IG5v dCBzdXBwb3J0IiwNCj4gKwkJCQkgICAgIHBhcmFtcy0+c2FtcGxlX3JhdGUpOw0KPiArCQlyZXR1 cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsJaXQ2NTA1LT5hdWRpby5zYW1wbGVfcmF0ZSA9IGF1ZGlv X3NhbXBsZV9yYXRlX21hcFtpXS5yYXRlOw0KPiArDQo+ICsJc3dpdGNoIChwYXJhbXMtPnNhbXBs ZV93aWR0aCkgew0KPiArCWNhc2UgMTY6DQo+ICsJCWl0NjUwNS0+YXVkaW8ud29yZF9sZW5ndGgg PSBXT1JEX0xFTkdUSF8xNkJJVDsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSAxODoNCj4gKwkJaXQ2 NTA1LT5hdWRpby53b3JkX2xlbmd0aCA9IFdPUkRfTEVOR1RIXzE4QklUOw0KPiArCQlicmVhazsN Cj4gKwljYXNlIDIwOg0KPiArCQlpdDY1MDUtPmF1ZGlvLndvcmRfbGVuZ3RoID0gV09SRF9MRU5H VEhfMjBCSVQ7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgMjQ6DQo+ICsJY2FzZSAzMjoNCj4gKwkJ aXQ2NTA1LT5hdWRpby53b3JkX2xlbmd0aCA9IFdPUkRfTEVOR1RIXzI0QklUOw0KPiArCQlicmVh azsNCj4gKwlkZWZhdWx0Og0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJ3b3JkbGVu Z3RoOiAlZCBiaXQgbm90IHN1cHBvcnQiLA0KPiArCQkJCSAgICAgcGFyYW1zLT5zYW1wbGVfd2lk dGgpOw0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4g K30NCj4gKw0KPiArc3RhdGljIHZvaWQgX19tYXliZV91bnVzZWQgaXQ2NTA1X2F1ZGlvX3NodXRk b3duKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2 NTA1ICppdDY1MDUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gKw0KPiArCWlmIChpdDY1MDUt PnBvd2VyZWQpDQo+ICsJCWl0NjUwNV9kaXNhYmxlX2F1ZGlvKGl0NjUwNSk7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgaXQ2NTA1X2F1ZGlvX2hvb2tfcGx1Z2dlZF9j YihzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+ICsJCQkJCQkgICAgICAgdm9pZCAqZGF0YSwNCj4gKwkJ CQkJCSAgICAgICBoZG1pX2NvZGVjX3BsdWdnZWRfY2IgZm4sDQo+ICsJCQkJCQkgICAgICAgc3Ry dWN0IGRldmljZSAqY29kZWNfZGV2KQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9 IGRhdGE7DQo+ICsNCj4gKwlpdDY1MDUtPnBsdWdnZWRfY2IgPSBmbjsNCj4gKwlpdDY1MDUtPmNv ZGVjX2RldiA9IGNvZGVjX2RldjsNCj4gKwlpdDY1MDVfcGx1Z2dlZF9zdGF0dXNfdG9fY29kZWMo aXQ2NTA1KTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5l IHN0cnVjdCBpdDY1MDUgKmJyaWRnZV90b19pdDY1MDUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRn ZSkNCj4gK3sNCj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGJyaWRnZSwgc3RydWN0IGl0NjUwNSwg YnJpZGdlKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2JyaWRnZV9tb2RlX3Nl dChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLA0KPiArCQkJCSAgIGNvbnN0IHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlLA0KPiArCQkJCSAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICphZGp1c3RlZF9tb2RlKQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGJy aWRnZV90b19pdDY1MDUoYnJpZGdlKTsNCj4gKwlzdHJ1Y3QgaGRtaV9hdmlfaW5mb2ZyYW1lIGZy YW1lOw0KPiArCWludCBlcnI7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xp ZW50LT5kZXY7DQo+ICsNCj4gKwlpZiAoV0FSTl9PTighaXQ2NTA1LT5wb3dlcmVkKSkNCj4gKwkJ cmV0dXJuOw0KPiArDQo+ICsJbXV0ZXhfbG9jaygmaXQ2NTA1LT5tb2RlX2xvY2spOw0KPiArDQo+ ICsJZXJyID0gZHJtX2hkbWlfYXZpX2luZm9mcmFtZV9mcm9tX2Rpc3BsYXlfbW9kZSgmZnJhbWUs DQo+ICsJCQkJCQkgICAgICAgJml0NjUwNS0+Y29ubmVjdG9yLA0KPiArCQkJCQkJICAgICAgIGFk anVzdGVkX21vZGUpOw0KPiArCWlmIChlcnIpIHsNCj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJG YWlsZWQgdG8gc2V0dXAgQVZJIGluZm9mcmFtZTogJWQiLCBlcnIpOw0KPiArCQlnb3RvIHVubG9j azsNCj4gKwl9DQo+ICsNCj4gKwlpdDY1MDVfdXBkYXRlX3ZpZGVvX3BhcmFtZXRlcihpdDY1MDUs IGFkanVzdGVkX21vZGUpOw0KPiArDQo+ICsJZXJyID0gaXQ2NTA1X3NlbmRfdmlkZW9faW5mb2Zy YW1lKGl0NjUwNSwgJmZyYW1lKTsNCj4gKwlpZiAoZXJyKQ0KPiArCQlEUk1fREVWX0VSUk9SKGRl diwgIkZhaWxlZCB0byBzZW5kIEFWSSBpbmZvZnJhbWU6ICVkIiwgZXJyKTsNCj4gKw0KPiArdW5s b2NrOg0KPiArCW11dGV4X3VubG9jaygmaXQ2NTA1LT5tb2RlX2xvY2spOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgaW50IGl0NjUwNV9icmlkZ2VfYXR0YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlk Z2UsDQo+ICsJCQkJZW51bSBkcm1fYnJpZGdlX2F0dGFjaF9mbGFncyBmbGFncykNCj4gK3sNCj4g KwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBicmlkZ2VfdG9faXQ2NTA1KGJyaWRnZSk7DQo+ICsJ c3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJaW50IGVycjsN Cj4gKw0KPiArCWlmIChmbGFncyAmIERSTV9CUklER0VfQVRUQUNIX05PX0NPTk5FQ1RPUikgew0K PiArCQlEUk1fRVJST1IoIkZpeCBicmlkZ2UgZHJpdmVyIHRvIG1ha2UgY29ubmVjdG9yIG9wdGlv bmFsISIpOw0KPiArCQlyZXR1cm4gMDsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoIWJyaWRnZS0+ZW5j b2Rlcikgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIlBhcmVudCBlbmNvZGVyIG9iamVjdCBu b3QgZm91bmQiKTsNCj4gKwkJcmV0dXJuIC1FTk9ERVY7DQo+ICsJfQ0KPiArDQo+ICsJZXJyID0g ZHJtX2Nvbm5lY3Rvcl9pbml0KGJyaWRnZS0+ZGV2LCAmaXQ2NTA1LT5jb25uZWN0b3IsDQo+ICsJ CQkJICZpdDY1MDVfY29ubmVjdG9yX2Z1bmNzLA0KPiArCQkJCSBEUk1fTU9ERV9DT05ORUNUT1Jf RGlzcGxheVBvcnQpOw0KPiArCWlmIChlcnIgPCAwKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2 LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgY29ubmVjdG9yOiAlZCIsIGVycik7DQo+ICsJCXJldHVy biBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZpdDY1MDUt PmNvbm5lY3RvciwNCj4gKwkJCQkgJml0NjUwNV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsNCj4g Kw0KPiArCWl0NjUwNS0+Y29ubmVjdG9yLnBvbGxlZCA9IERSTV9DT05ORUNUT1JfUE9MTF9IUEQ7 DQo+ICsNCj4gKwllcnIgPSBkcm1fY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZpdDY1MDUtPmNv bm5lY3RvciwgYnJpZGdlLT5lbmNvZGVyKTsNCj4gKwlpZiAoZXJyIDwgMCkgew0KPiArCQlEUk1f REVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBsaW5rIHVwIGNvbm5lY3RvciB0byBlbmNvZGVyOiAl ZCIsDQo+ICsJCQkgICAgICBlcnIpOw0KPiArCQlnb3RvIGNsZWFudXBfY29ubmVjdG9yOw0KPiAr CX0NCj4gKw0KPiArCWVyciA9IGRybV9jb25uZWN0b3JfcmVnaXN0ZXIoJml0NjUwNS0+Y29ubmVj dG9yKTsNCj4gKwlpZiAoZXJyIDwgMCkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxl ZCB0byByZWdpc3RlciBjb25uZWN0b3I6ICVkIiwgZXJyKTsNCj4gKwkJZ290byBjbGVhbnVwX2Nv bm5lY3RvcjsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoaXQ2NTA1LT5leHRjb24pIHsNCj4gKwkJZXJy ID0gaXQ2NTA1X3VzZV9ub3RpZmllcl9tb2R1bGUoaXQ2NTA1KTsNCj4gKwkJaWYgKGVyciA8IDAp IHsNCj4gKwkJCWRybV9jb25uZWN0b3JfdW5yZWdpc3RlcigmaXQ2NTA1LT5jb25uZWN0b3IpOw0K PiArCQkJZ290byBjbGVhbnVwX2Nvbm5lY3RvcjsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCXJl dHVybiAwOw0KPiArDQo+ICtjbGVhbnVwX2Nvbm5lY3RvcjoNCj4gKwlkcm1fY29ubmVjdG9yX2Ns ZWFudXAoJml0NjUwNS0+Y29ubmVjdG9yKTsNCj4gKwlyZXR1cm4gZXJyOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgdm9pZCBpdDY1MDVfYnJpZGdlX2RldGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJp ZGdlKQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGJyaWRnZV90b19pdDY1MDUo YnJpZGdlKTsNCj4gKw0KPiArCWZsdXNoX3dvcmsoJml0NjUwNS0+bGlua193b3Jrcyk7DQo+ICsJ aXQ2NTA1X3JlbW92ZV9ub3RpZmllcl9tb2R1bGUoaXQ2NTA1KTsNCj4gKwlkcm1fY29ubmVjdG9y X3VucmVnaXN0ZXIoJml0NjUwNS0+Y29ubmVjdG9yKTsNCj4gKwlkcm1fY29ubmVjdG9yX2NsZWFu dXAoJml0NjUwNS0+Y29ubmVjdG9yKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGVudW0gZHJtX21v ZGVfc3RhdHVzDQo+ICtpdDY1MDVfYnJpZGdlX21vZGVfdmFsaWQoc3RydWN0IGRybV9icmlkZ2Ug KmJyaWRnZSwNCj4gKwkJCSBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyAqaW5mbywNCj4g KwkJCSBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkNCj4gK3sNCj4gKwlzdHJ1 Y3QgaXQ2NTA1ICppdDY1MDUgPSBicmlkZ2VfdG9faXQ2NTA1KGJyaWRnZSk7DQo+ICsNCj4gKwlp ZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkNCj4gKwkJcmV0dXJuIE1P REVfTk9fSU5URVJMQUNFOw0KPiArDQo+ICsJaWYgKG1vZGUtPmNsb2NrID4gRFBJX1BJWEVMX0NM S19NQVgpDQo+ICsJCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7DQo+ICsNCj4gKwlpdDY1MDUtPnZp ZGVvX2luZm8uY2xvY2sgPSBtb2RlLT5jbG9jazsNCj4gKw0KPiArCXJldHVybiBNT0RFX09LOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfYnJpZGdlX2VuYWJsZShzdHJ1Y3QgZHJt X2JyaWRnZSAqYnJpZGdlKQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGJyaWRn ZV90b19pdDY1MDUoYnJpZGdlKTsNCj4gKw0KPiArCWl0NjUwNV9pbnRfbWFza19lbmFibGUoaXQ2 NTA1KTsNCj4gKwlpdDY1MDVfdmlkZW9fcmVzZXQoaXQ2NTA1KTsNCj4gK30NCj4gKw0KPiArc3Rh dGljIHZvaWQgaXQ2NTA1X2JyaWRnZV9kaXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2Up DQo+ICt7DQo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gYnJpZGdlX3RvX2l0NjUwNShicmlk Z2UpOw0KPiArDQo+ICsJaWYgKGl0NjUwNS0+cG93ZXJlZCkNCj4gKwkJaXQ2NTA1X3ZpZGVvX2Rp c2FibGUoaXQ2NTA1KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9z dGF0dXMNCj4gK2l0NjUwNV9icmlkZ2VfZGV0ZWN0KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2Up DQo+ICt7DQo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gYnJpZGdlX3RvX2l0NjUwNShicmlk Z2UpOw0KPiArDQo+ICsJcmV0dXJuIGl0NjUwNV9kZXRlY3QoJml0NjUwNS0+Y29ubmVjdG9yLCAw KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHN0cnVjdCBlZGlkICppdDY1MDVfYnJpZGdlX2dldF9l ZGlkKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsDQo+ICsJCQkJCSAgIHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IpDQo+ICt7DQo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gYnJp ZGdlX3RvX2l0NjUwNShicmlkZ2UpOw0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUt PmNsaWVudC0+ZGV2Ow0KPiArCXN0cnVjdCBlZGlkICplZGlkOw0KPiArDQo+ICsJZWRpZCA9IGRy bV9kb19nZXRfZWRpZCgmaXQ2NTA1LT5jb25uZWN0b3IsIGl0NjUwNV9nZXRfZWRpZF9ibG9jaywN Cj4gKwkJCSAgICAgICBpdDY1MDUpOw0KPiArDQo+ICsJaWYgKCFlZGlkKSB7DQo+ICsJCURSTV9E RVZfREVCVUdfRFJJVkVSKGRldiwgImZhaWxlZCB0byBnZXQgZWRpZCEiKTsNCj4gKwkJcmV0dXJu IE5VTEw7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIGVkaWQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgZHJtX2JyaWRnZV9mdW5jcyBpdDY1MDVfYnJpZGdlX2Z1bmNzID0gew0K PiArCS5hdHRhY2ggPSBpdDY1MDVfYnJpZGdlX2F0dGFjaCwNCj4gKwkuZGV0YWNoID0gaXQ2NTA1 X2JyaWRnZV9kZXRhY2gsDQo+ICsJLm1vZGVfdmFsaWQgPSBpdDY1MDVfYnJpZGdlX21vZGVfdmFs aWQsDQo+ICsJLm1vZGVfc2V0ID0gaXQ2NTA1X2JyaWRnZV9tb2RlX3NldCwNCj4gKwkuZW5hYmxl ID0gaXQ2NTA1X2JyaWRnZV9lbmFibGUsDQo+ICsJLmRpc2FibGUgPSBpdDY1MDVfYnJpZGdlX2Rp c2FibGUsDQo+ICsJLmRldGVjdCA9IGl0NjUwNV9icmlkZ2VfZGV0ZWN0LA0KPiArCS5nZXRfZWRp ZCA9IGl0NjUwNV9icmlkZ2VfZ2V0X2VkaWQsDQo+ICt9Ow0KPiArDQo+ICsjaWZkZWYgQ09ORklH X1BNX1NMRUVQDQo+ICsNCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X2JyaWRnZV9yZXN1bWUoc3RydWN0 IGRldmljZSAqZGV2KQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGRldl9nZXRf ZHJ2ZGF0YShkZXYpOw0KPiArDQo+ICsJcmV0dXJuIGl0NjUwNV9wb3dlcm9uKGl0NjUwNSk7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X2JyaWRnZV9zdXNwZW5kKHN0cnVjdCBkZXZp Y2UgKmRldikNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBkZXZfZ2V0X2RydmRh dGEoZGV2KTsNCj4gKw0KPiArCXJldHVybiBpdDY1MDVfcG93ZXJvZmYoaXQ2NTA1KTsNCj4gK30N Cj4gKw0KPiArc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKGl0NjUwNV9icmlkZ2VfcG1fb3BzLCBp dDY1MDVfYnJpZGdlX3N1c3BlbmQsDQo+ICsJCQkgaXQ2NTA1X2JyaWRnZV9yZXN1bWUpOw0KPiAr DQo+ICsjZW5kaWYNCj4gKw0KPiArc3RhdGljIGludCBpdDY1MDVfaW5pdF9wZGF0YShzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJc3RydWN0IGl0NjUwNV9wbGF0Zm9ybV9kYXRhICpw ZGF0YSA9ICZpdDY1MDUtPnBkYXRhOw0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUt PmNsaWVudC0+ZGV2Ow0KPiArDQo+ICsJLyogMS4wViBkaWdpdGFsIGNvcmUgcG93ZXIgcmVndWxh dG9yICAqLw0KPiArCXBkYXRhLT5wd3IxOCA9IGRldm1fcmVndWxhdG9yX2dldChkZXYsICJwd3Ix OCIpOw0KPiArCWlmIChJU19FUlIocGRhdGEtPnB3cjE4KSkgew0KPiArCQlEUk1fREVWX0VSUk9S KGRldiwgInB3cjE4IHJlZ3VsYXRvciBub3QgZm91bmQiKTsNCj4gKwkJcmV0dXJuIFBUUl9FUlIo cGRhdGEtPnB3cjE4KTsNCj4gKwl9DQo+ICsNCj4gKwlwZGF0YS0+b3ZkZCA9IGRldm1fcmVndWxh dG9yX2dldChkZXYsICJvdmRkIik7DQo+ICsJaWYgKElTX0VSUihwZGF0YS0+b3ZkZCkpIHsNCj4g KwkJRFJNX0RFVl9FUlJPUihkZXYsICJvdmRkIHJlZ3VsYXRvciBub3QgZm91bmQiKTsNCj4gKwkJ cmV0dXJuIFBUUl9FUlIocGRhdGEtPm92ZGQpOw0KPiArCX0NCj4gKw0KPiArCXBkYXRhLT5ncGlv ZF9yZXNldCA9IGRldm1fZ3Bpb2RfZ2V0KGRldiwgInJlc2V0IiwgR1BJT0RfT1VUX0hJR0gpOw0K PiArCWlmIChJU19FUlIocGRhdGEtPmdwaW9kX3Jlc2V0KSkgew0KPiArCQlEUk1fREVWX0VSUk9S KGRldiwgImdwaW9kX3Jlc2V0IGdwaW8gbm90IGZvdW5kIik7DQo+ICsJCXJldHVybiBQVFJfRVJS KHBkYXRhLT5ncGlvZF9yZXNldCk7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9wYXJzZV9kdChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUp DQo+ICt7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ ICsJdTMyICphZmVfc2V0dGluZyA9ICZpdDY1MDUtPmFmZV9zZXR0aW5nOw0KPiArDQo+ICsJaXQ2 NTA1LT5sYW5lX3N3YXBfZGlzYWJsZWQgPQ0KPiArCQlkZXZpY2VfcHJvcGVydHlfcmVhZF9ib29s KGRldiwgIm5vLWxhbmVzd2FwIik7DQo+ICsNCj4gKwlpZiAoaXQ2NTA1LT5sYW5lX3N3YXBfZGlz YWJsZWQpDQo+ICsJCWl0NjUwNS0+bGFuZV9zd2FwID0gZmFsc2U7DQo+ICsNCj4gKwlpZiAoZGV2 aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgImFmZS1zZXR0aW5nIiwgYWZlX3NldHRpbmcpID09 IDApIHsNCj4gKwkJaWYgKCphZmVfc2V0dGluZyA+PSBBUlJBWV9TSVpFKGFmZV9zZXR0aW5nX3Rh YmxlKSkgew0KPiArCQkJRFJNX0RFVl9FUlJPUihkZXYsICJhZmUgc2V0dGluZyBlcnJvciwgdXNl IGRlZmF1bHQiKTsNCj4gKwkJCSphZmVfc2V0dGluZyA9IDA7DQo+ICsJCX0NCj4gKwl9IGVsc2Ug ew0KPiArCQkqYWZlX3NldHRpbmcgPSAwOw0KPiArCX0NCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZF UihkZXYsICJ1c2luZyBhZmVfc2V0dGluZzogJWQiLCAqYWZlX3NldHRpbmcpOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgc3NpemVfdCBwcmludF90aW1pbmdfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYs DQo+ICsJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpDQo+ICt7 DQo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+ICsJ c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKnZpZCA9ICZpdDY1MDUtPnZpZGVvX2luZm87DQo+ICsJ Y2hhciAqc3RyID0gYnVmLCAqZW5kID0gYnVmICsgUEFHRV9TSVpFOw0KPiArDQo+ICsJaXQ2NTA1 X2NhbGNfdmlkZW9faW5mbyhpdDY1MDUpOw0KPiArCXN0ciArPSBzY25wcmludGYoc3RyLCBlbmQg LSBzdHIsICItLS12aWRlbyB0aW1pbmctLS1cbiIpOw0KPiArCXN0ciArPSBzY25wcmludGYoc3Ry LCBlbmQgLSBzdHIsICJQQ0xLOiVkLiUwM2RNSHpcbiIsDQo+ICsJCQkgdmlkLT5jbG9jayAvIDEw MDAsIHZpZC0+Y2xvY2sgJSAxMDAwKTsNCj4gKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0g c3RyLCAiSFRvdGFsOiVkXG4iLCB2aWQtPmh0b3RhbCk7DQo+ICsJc3RyICs9IHNjbnByaW50Zihz dHIsIGVuZCAtIHN0ciwgIkhBY3RpdmU6JWRcbiIsIHZpZC0+aGRpc3BsYXkpOw0KPiArCXN0ciAr PSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIsICJIRnJvbnRQb3JjaDolZFxuIiwNCj4gKwkJCSB2 aWQtPmhzeW5jX3N0YXJ0IC0gdmlkLT5oZGlzcGxheSk7DQo+ICsJc3RyICs9IHNjbnByaW50Zihz dHIsIGVuZCAtIHN0ciwgIkhTeW5jV2lkdGg6JWRcbiIsDQo+ICsJCQkgdmlkLT5oc3luY19lbmQg LSB2aWQtPmhzeW5jX3N0YXJ0KTsNCj4gKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3Ry LCAiSEJhY2tQb3JjaDolZFxuIiwNCj4gKwkJCSB2aWQtPmh0b3RhbCAtIHZpZC0+aHN5bmNfZW5k KTsNCj4gKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAiVlRvdGFsOiVkXG4iLCB2 aWQtPnZ0b3RhbCk7DQo+ICsJc3RyICs9IHNjbnByaW50ZihzdHIsIGVuZCAtIHN0ciwgIlZBY3Rp dmU6JWRcbiIsIHZpZC0+dmRpc3BsYXkpOw0KPiArCXN0ciArPSBzY25wcmludGYoc3RyLCBlbmQg LSBzdHIsICJWRnJvbnRQb3JjaDolZFxuIiwNCj4gKwkJCSB2aWQtPnZzeW5jX3N0YXJ0IC0gdmlk LT52ZGlzcGxheSk7DQo+ICsJc3RyICs9IHNjbnByaW50ZihzdHIsIGVuZCAtIHN0ciwgIlZTeW5j V2lkdGg6JWRcbiIsDQo+ICsJCQkgdmlkLT52c3luY19lbmQgLSB2aWQtPnZzeW5jX3N0YXJ0KTsN Cj4gKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAiVkJhY2tQb3JjaDolZFxuIiwN Cj4gKwkJCSB2aWQtPnZ0b3RhbCAtIHZpZC0+dnN5bmNfZW5kKTsNCj4gKw0KPiArCXJldHVybiBz dHIgLSBidWY7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzc2l6ZV90IGZvcmNlX3B3cm9ub2ZmX3N0 b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwNCj4gKwkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1 dGUgKmF0dHIsDQo+ICsJCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQ0KPiAr ew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiAr CWludCBwd3I7DQo+ICsNCj4gKwlpZiAoa3N0cnRvaW50KGJ1ZiwgMTAsICZwd3IpIDwgMCkNCj4g KwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwlpZiAocHdyKQ0KPiArCQlpdDY1MDVfcG93ZXJv bihpdDY1MDUpOw0KPiArCWVsc2UNCj4gKwkJaXQ2NTA1X3Bvd2Vyb2ZmKGl0NjUwNSk7DQo+ICsN Cj4gKwlyZXR1cm4gY291bnQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzc2l6ZV90IGVuYWJsZV9k cnZfaG9sZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwNCj4gKwkJCQkgICAgc3RydWN0IGRldmlj ZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1ICpp dDY1MDUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gKw0KPiArCXJldHVybiBzY25wcmludGYo YnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgaXQ2NTA1LT5lbmFibGVfZHJ2X2hvbGQpOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgc3NpemVfdCBlbmFibGVfZHJ2X2hvbGRfc3RvcmUoc3RydWN0IGRldmlj ZSAqZGV2LA0KPiArCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsDQo+ICsJ CQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkNCj4gK3sNCj4gKwlzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gKwl1bnNpZ25lZCBpbnQg ZHJ2X2hvbGQ7DQo+ICsNCj4gKwlpZiAoa3N0cnRvaW50KGJ1ZiwgMTAsICZkcnZfaG9sZCkgPCAw KQ0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArCWl0NjUwNS0+ZW5hYmxlX2Rydl9ob2xk ID0gISFkcnZfaG9sZDsNCj4gKw0KPiArCWlmIChpdDY1MDUtPmVuYWJsZV9kcnZfaG9sZCkgew0K PiArCQlpdDY1MDVfaW50X21hc2tfZGlzYWJsZShpdDY1MDUpOw0KPiArCX0gZWxzZSB7DQo+ICsJ CWl0NjUwNV9jbGVhcl9pbnQoaXQ2NTA1KTsNCj4gKwkJaXQ2NTA1X2ludF9tYXNrX2VuYWJsZShp dDY1MDUpOw0KPiArDQo+ICsJCWlmIChpdDY1MDUtPnBvd2VyZWQpIHsNCj4gKwkJCWl0NjUwNS0+ Y29ubmVjdG9yX3N0YXR1cyA9DQo+ICsJCQkJCWl0NjUwNV9nZXRfc2lua19ocGRfc3RhdHVzKGl0 NjUwNSkgPw0KPiArCQkJCQljb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCA6DQo+ICsJCQkJCWNv bm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOw0KPiArCQl9IGVsc2Ugew0KPiArCQkJaXQ2NTA1 LT5jb25uZWN0b3Jfc3RhdHVzID0NCj4gKwkJCQkJY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0 ZWQ7DQo+ICsJCX0NCj4gKwl9DQo+ICsJcmV0dXJuIGNvdW50Ow0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgREVWSUNFX0FUVFJfUk8ocHJpbnRfdGltaW5nKTsNCj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9X Tyhmb3JjZV9wd3Jvbm9mZik7DQo+ICtzdGF0aWMgREVWSUNFX0FUVFJfUlcoZW5hYmxlX2Rydl9o b2xkKTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKml0NjUwNV9hdHRy c1tdID0gew0KPiArCSZkZXZfYXR0cl9wcmludF90aW1pbmcuYXR0ciwNCj4gKwkmZGV2X2F0dHJf Zm9yY2VfcHdyb25vZmYuYXR0ciwNCj4gKwkmZGV2X2F0dHJfZW5hYmxlX2Rydl9ob2xkLmF0dHIs DQo+ICsJTlVMTCwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9zaHV0ZG93bihz dHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUw NSA9IGRldl9nZXRfZHJ2ZGF0YSgmY2xpZW50LT5kZXYpOw0KPiArDQo+ICsJa2ZyZWUoaXQ2NTA1 LT5lZGlkKTsNCj4gKwlpdDY1MDUtPmVkaWQgPSBOVUxMOw0KPiArDQo+ICsJaWYgKGl0NjUwNS0+ cG93ZXJlZCkNCj4gKwkJaXQ2NTA1X2xhbmVfb2ZmKGl0NjUwNSk7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBpbnQgaXQ2NTA1X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LA0KPiAr CQkJICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkNCj4gK3sNCj4gKwlzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDU7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJmNsaWVudC0+ZGV2Ow0K PiArCXN0cnVjdCBleHRjb25fZGV2ICpleHRjb247DQo+ICsJaW50IGVyciwgaW50cF9pcnE7DQo+ ICsNCj4gKwlpdDY1MDUgPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LCBzaXplb2YoKml0NjUw NSksIEdGUF9LRVJORUwpOw0KPiArCWlmICghaXQ2NTA1KQ0KPiArCQlyZXR1cm4gLUVOT01FTTsN Cj4gKw0KPiArCW11dGV4X2luaXQoJml0NjUwNS0+ZXh0Y29uX2xvY2spOw0KPiArCW11dGV4X2lu aXQoJml0NjUwNS0+bW9kZV9sb2NrKTsNCj4gKwltdXRleF9pbml0KCZpdDY1MDUtPmF1eF9sb2Nr KTsNCj4gKw0KPiArCWl0NjUwNS0+YnJpZGdlLm9mX25vZGUgPSBjbGllbnQtPmRldi5vZl9ub2Rl Ow0KPiArCWl0NjUwNS0+Y29ubmVjdG9yX3N0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29u bmVjdGVkOw0KPiArCWl0NjUwNS0+Y2xpZW50ID0gY2xpZW50Ow0KPiArCWkyY19zZXRfY2xpZW50 ZGF0YShjbGllbnQsIGl0NjUwNSk7DQo+ICsNCj4gKwkvKiBnZXQgZXh0Y29uIGRldmljZSBmcm9t IERUUyAqLw0KPiArCWV4dGNvbiA9IGV4dGNvbl9nZXRfZWRldl9ieV9waGFuZGxlKGRldiwgMCk7 DQo+ICsJaWYgKFBUUl9FUlIoZXh0Y29uKSA9PSAtRVBST0JFX0RFRkVSKQ0KPiArCQlyZXR1cm4g LUVQUk9CRV9ERUZFUjsNCj4gKwlpZiAoSVNfRVJSKGV4dGNvbikpIHsNCj4gKwkJRFJNX0RFVl9F UlJPUihkZXYsICJjYW4gbm90IGdldCBleHRjb24gZGV2aWNlISIpOw0KPiArCQlyZXR1cm4gUFRS X0VSUihleHRjb24pOw0KPiArCX0NCj4gKw0KPiArCWl0NjUwNS0+ZXh0Y29uID0gZXh0Y29uOw0K PiArDQo+ICsJaXQ2NTA1LT5yZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsICZp dDY1MDVfcmVnbWFwX2NvbmZpZyk7DQo+ICsJaWYgKElTX0VSUihpdDY1MDUtPnJlZ21hcCkpIHsN Cj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJyZWdtYXAgaTJjIGluaXQgZmFpbGVkIik7DQo+ICsJ CWVyciA9IFBUUl9FUlIoaXQ2NTA1LT5yZWdtYXApOw0KPiArCQlyZXR1cm4gZXJyOw0KPiArCX0N Cj4gKw0KPiArCWVyciA9IGl0NjUwNV9pbml0X3BkYXRhKGl0NjUwNSk7DQo+ICsJaWYgKGVycikg ew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIHBkYXRhOiAl ZCIsIGVycik7DQo+ICsJCXJldHVybiBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJaXQ2NTA1X3BhcnNl X2R0KGl0NjUwNSk7DQo+ICsNCj4gKwlpbnRwX2lycSA9IGNsaWVudC0+aXJxOw0KPiArDQo+ICsJ aWYgKCFpbnRwX2lycSkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBnZXQg SU5UUCBJUlEiKTsNCj4gKwkJZXJyID0gLUVOT0RFVjsNCj4gKwkJcmV0dXJuIGVycjsNCj4gKwl9 DQo+ICsNCj4gKwllcnIgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKCZjbGllbnQtPmRldiwg aW50cF9pcnEsIE5VTEwsDQo+ICsJCQkJCWl0NjUwNV9pbnRfdGhyZWFkZWRfaGFuZGxlciwNCj4g KwkJCQkJSVJRRl9UUklHR0VSX0xPVyB8IElSUUZfT05FU0hPVCwNCj4gKwkJCQkJIml0NjUwNS1p bnRwIiwgaXQ2NTA1KTsNCj4gKwlpZiAoZXJyKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAi RmFpbGVkIHRvIHJlcXVlc3QgSU5UUCB0aHJlYWRlZCBJUlE6ICVkIiwNCj4gKwkJCSAgICAgIGVy cik7DQo+ICsJCXJldHVybiBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJLyogUmVnaXN0ZXIgYXV4IGNo YW5uZWwgKi8NCj4gKwlpdDY1MDUtPmF1eC5uYW1lID0gIkRQLUFVWCI7DQo+ICsJaXQ2NTA1LT5h dXguZGV2ID0gZGV2Ow0KPiArCWl0NjUwNS0+YXV4LnRyYW5zZmVyID0gaXQ2NTA1X2F1eF90cmFu c2ZlcjsNCj4gKw0KPiArCWVyciA9IGRybV9kcF9hdXhfcmVnaXN0ZXIoJml0NjUwNS0+YXV4KTsN Cj4gKwlpZiAoZXJyIDwgMCkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBy ZWdpc3RlciBhdXg6ICVkIiwgZXJyKTsNCj4gKwkJcmV0dXJuIGVycjsNCj4gKwl9DQo+ICsNCj4g KwlJTklUX1dPUksoJml0NjUwNS0+bGlua193b3JrcywgaXQ2NTA1X2xpbmtfdHJhaW5pbmdfd29y ayk7DQo+ICsJSU5JVF9XT1JLKCZpdDY1MDUtPmhkY3Bfd2FpdF9rc3ZfbGlzdCwgaXQ2NTA1X2hk Y3Bfd2FpdF9rc3ZfbGlzdCk7DQo+ICsJSU5JVF9ERUxBWUVEX1dPUksoJml0NjUwNS0+aGRjcF93 b3JrLCBpdDY1MDVfaGRjcF93b3JrKTsNCj4gKwlpbml0X2NvbXBsZXRpb24oJml0NjUwNS0+d2Fp dF9lZGlkX2NvbXBsZXRlKTsNCj4gKwltZW1zZXQoaXQ2NTA1LT5kcGNkLCAwLCBzaXplb2YoaXQ2 NTA1LT5kcGNkKSk7DQo+ICsJaXQ2NTA1LT5wb3dlcmVkID0gZmFsc2U7DQo+ICsJaXQ2NTA1LT5l bmFibGVfZHJ2X2hvbGQgPSBERUZBVUxUX0RSVl9IT0xEOw0KPiArDQo+ICsJaWYgKERFRkFVTFRf UFdSX09OKQ0KPiArCQlpdDY1MDVfcG93ZXJvbihpdDY1MDUpOw0KPiArDQo+ICsJZXJyID0gc3lz ZnNfY3JlYXRlX2ZpbGVzKCZjbGllbnQtPmRldi5rb2JqLCBpdDY1MDVfYXR0cnMpOw0KPiArCWlm IChlcnIpIHsNCj4gKwkJZHJtX2RwX2F1eF91bnJlZ2lzdGVyKCZpdDY1MDUtPmF1eCk7DQo+ICsJ CXJldHVybiBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJaXQ2NTA1LT5icmlkZ2UuZnVuY3MgPSAmaXQ2 NTA1X2JyaWRnZV9mdW5jczsNCj4gKwlkcm1fYnJpZGdlX2FkZCgmaXQ2NTA1LT5icmlkZ2UpOw0K PiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X2kyY19y ZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1 ICppdDY1MDUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsNCj4gKw0KPiArCWRybV9jb25u ZWN0b3JfdW5yZWdpc3RlcigmaXQ2NTA1LT5jb25uZWN0b3IpOw0KPiArCWRybV9jb25uZWN0b3Jf Y2xlYW51cCgmaXQ2NTA1LT5jb25uZWN0b3IpOw0KPiArCWRybV9icmlkZ2VfcmVtb3ZlKCZpdDY1 MDUtPmJyaWRnZSk7DQo+ICsJZHJtX2RwX2F1eF91bnJlZ2lzdGVyKCZpdDY1MDUtPmF1eCk7DQo+ ICsJc3lzZnNfcmVtb3ZlX2ZpbGVzKCZjbGllbnQtPmRldi5rb2JqLCBpdDY1MDVfYXR0cnMpOw0K PiArCWl0NjUwNV9wb3dlcm9mZihpdDY1MDUpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBpdDY1MDVfaWRbXSA9IHsN Cj4gKwl7ICJpdDY1MDUiLCAwIH0sDQo+ICsJeyB9DQo+ICt9Ow0KPiArDQo+ICtNT0RVTEVfREVW SUNFX1RBQkxFKGkyYywgaXQ2NTA1X2lkKTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBv Zl9kZXZpY2VfaWQgaXQ2NTA1X29mX21hdGNoW10gPSB7DQo+ICsJeyAuY29tcGF0aWJsZSA9ICJp dGUsaXQ2NTA1IiB9LA0KPiArCXsgfQ0KPiArfTsNCj4gKw0KPiArc3RhdGljIHN0cnVjdCBpMmNf ZHJpdmVyIGl0NjUwNV9pMmNfZHJpdmVyID0gew0KPiArCS5kcml2ZXIgPSB7DQo+ICsJCS5uYW1l ID0gIml0NjUwNSIsDQo+ICsJCS5vZl9tYXRjaF90YWJsZSA9IGl0NjUwNV9vZl9tYXRjaCwNCj4g KyNpZmRlZiBDT05GSUdfUE1fU0xFRVANCj4gKwkJLnBtID0gJml0NjUwNV9icmlkZ2VfcG1fb3Bz LA0KPiArI2VuZGlmDQo+ICsJfSwNCj4gKwkucHJvYmUgPSBpdDY1MDVfaTJjX3Byb2JlLA0KPiAr CS5yZW1vdmUgPSBpdDY1MDVfaTJjX3JlbW92ZSwNCj4gKwkuc2h1dGRvd24gPSBpdDY1MDVfc2h1 dGRvd24sDQo+ICsJLmlkX3RhYmxlID0gaXQ2NTA1X2lkLA0KPiArfTsNCj4gKw0KPiArbW9kdWxl X2kyY19kcml2ZXIoaXQ2NTA1X2kyY19kcml2ZXIpOw0KPiArDQo+ICtNT0RVTEVfQVVUSE9SKCJB bGxlbiBDaGVuIDxhbGxlbi5jaGVuQGl0ZS5jb20udHc+Iik7DQo+ICtNT0RVTEVfREVTQ1JJUFRJ T04oIklUNjUwNSBEaXNwbGF5UG9ydCBUcmFuc21pdHRlciBkcml2ZXIiKTsNCj4gK01PRFVMRV9M SUNFTlNFKCJHUEwgdjIiKTsNCg0KLS0gDQpSZWdhcmRzLA0KDQpMYXVyZW50IFBpbmNoYXJ0DQpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eC1tZWRp YXRlayBtYWlsaW5nIGxpc3QKTGludXgtbWVkaWF0ZWtAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRw Oi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LW1lZGlhdGVrCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id DA34AC433E0 for ; Wed, 23 Dec 2020 10:52:16 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A66D3207FF for ; Wed, 23 Dec 2020 10:52:16 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A66D3207FF Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ite.com.tw Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 14E256E903; Wed, 23 Dec 2020 10:51:36 +0000 (UTC) Received: from ironport.ite.com.tw (60-251-196-230.HINET-IP.hinet.net [60.251.196.230]) by gabe.freedesktop.org (Postfix) with ESMTPS id 44B7B6E86C for ; Wed, 23 Dec 2020 01:44:36 +0000 (UTC) IronPort-SDR: 1nXLhCLXVkSsoXtVI2QcKPDQ3zQ3wrv3pcyF5NTnplVa6OuZb5ukmbmJ0CXf4YlHQcSW6qp95Q ocMl9L1SdyJQ== Received: from unknown (HELO mse.ite.com.tw) ([192.168.35.30]) by ironport.ite.com.tw with ESMTP; 23 Dec 2020 09:44:34 +0800 Received: from CSBMAIL1.internal.ite.com.tw (csbmail1.internal.ite.com.tw [192.168.65.58]) by mse.ite.com.tw with ESMTP id 0BN1iSRZ032475; Wed, 23 Dec 2020 09:44:28 +0800 (GMT-8) (envelope-from allen.chen@ite.com.tw) Received: from CSBMAIL1.internal.ite.com.tw (192.168.65.58) by CSBMAIL1.internal.ite.com.tw (192.168.65.58) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Wed, 23 Dec 2020 09:44:27 +0800 Received: from CSBMAIL1.internal.ite.com.tw ([fe80::2cba:f37c:ac09:f33f]) by CSBMAIL1.internal.ite.com.tw ([fe80::2cba:f37c:ac09:f33f%22]) with mapi id 15.01.1713.004; Wed, 23 Dec 2020 09:44:27 +0800 From: To: Subject: RE: [PATCH v6] drm/bridge: add it6505 driver Thread-Topic: [PATCH v6] drm/bridge: add it6505 driver Thread-Index: AQHW2H5MqIJWKQZyLUe7jYGEvJP5aaoD6AEw Date: Wed, 23 Dec 2020 01:44:27 +0000 Message-ID: <53d756230bb04f239c6482c688ce7523@ite.com.tw> References: <20201208105808.78029-1-allen.chen@ite.com.tw> <734036b1c57f4fb89d6cf68e54337ee7@ite.com.tw> In-Reply-To: Accept-Language: en-US Content-Language: zh-TW X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [192.168.70.104] x-tm-snts-smtp: 57ADD411EC0C474BF228A30C90C235EB7F5FA0B8F29E36AFABAC9455F8C5587D2000:8 MIME-Version: 1.0 X-MAIL: mse.ite.com.tw 0BN1iSRZ032475 X-Mailman-Approved-At: Wed, 23 Dec 2020 10:51:31 +0000 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kenneth.Hung@ite.com.tw, jitao.shi@mediatek.com, Jau-Chih.Tseng@ite.com.tw, yllin@google.com, airlied@linux.ie, narmstrong@baylibre.com, jernej.skrabec@siol.net, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, a.hajda@samsung.com, Hermes.Wu@ite.com.tw, linux-mediatek@lists.infradead.org, pihsun@chromium.org, matthias.bgg@gmail.com, linux-arm-kernel@lists.infradead.org, jonas@kwiboo.se Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" SGkgTGF1cmVudCBQaW5jaGFydA0KDQpUaGFua3MgZm9yIHJlcGx5Lg0KDQotLS0tLU9yaWdpbmFs IE1lc3NhZ2UtLS0tLQ0KRnJvbTogTGF1cmVudCBQaW5jaGFydCBbbWFpbHRvOmxhdXJlbnQucGlu Y2hhcnRAaWRlYXNvbmJvYXJkLmNvbV0gDQpTZW50OiBXZWRuZXNkYXksIERlY2VtYmVyIDIzLCAy MDIwIDEyOjIwIEFNDQpUbzogQWxsZW4gQ2hlbiAo6Zmz5p+P5a6HKQ0KQ2M6IEphdS1DaGloIFRz ZW5nICjmm77mmK3mmbopOyBIZXJtZXMgV3UgKOWQs+S9s+Wujyk7IEtlbm5ldGggSHVuZyAo5rSq 5a625YCrKTsgcGloc3VuQGNocm9taXVtLm9yZzsgaml0YW8uc2hpQG1lZGlhdGVrLmNvbTsgeWxs aW5AZ29vZ2xlLmNvbTsgYS5oYWpkYUBzYW1zdW5nLmNvbTsgbmFybXN0cm9uZ0BiYXlsaWJyZS5j b207IGpvbmFzQGt3aWJvby5zZTsgamVybmVqLnNrcmFiZWNAc2lvbC5uZXQ7IGFpcmxpZWRAbGlu dXguaWU7IGRhbmllbEBmZndsbC5jaDsgbWF0dGhpYXMuYmdnQGdtYWlsLmNvbTsgbGludXgta2Vy bmVsQHZnZXIua2VybmVsLm9yZzsgZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZzsgbGlu dXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnOyBsaW51eC1tZWRpYXRla0BsaXN0cy5p bmZyYWRlYWQub3JnDQpTdWJqZWN0OiBSZTogW1BBVENIIHY2XSBkcm0vYnJpZGdlOiBhZGQgaXQ2 NTA1IGRyaXZlcg0KDQpIaSBBbGxlbiwNCg0KT24gVHVlLCBEZWMgMjIsIDIwMjAgYXQgMTE6Mjk6 MzRBTSArMDAwMCwgYWxsZW4uY2hlbkBpdGUuY29tLnR3IHdyb3RlOg0KPiBIaQ0KPiANCj4gSXQg aGFzIGJlZW4gYWJvdXQgdHdvIHdlZWtzIHNpbmNlIEkgcG9zdGVkIHY2IGFuZCBoYXZlbid0IGhl YXJkIGFueXRoaW5nLg0KPiBDb25zaWRlciB0aGlzIGEgZ2VudGxlIHBpbmcuDQo+IA0KPiBKdXN0 IHdvbmRlcmluZyBpZiB0aGUgc2V0IG5lZWRzIGFkZGl0aW9uYWwgd29yayBhbmQgSSB3aWxsIGZp eCBhbmQNCj4gdXBzdHJlYW0gYWdhaW4uDQoNCkknbSBhZnJhaWQgSSBkb24ndCBoYXZlIGVub3Vn aCBiYW5kd2lkdGggdGhlc2UgZGF5cyB0byByZXZpZXcgYWxsIG5ldw0KYnJpZGdlIGRyaXZlcnMg Oi1TIE1heWJlIG9uZSBvZiB0aGUgRFJNIGJyaWRnZSBtYWludGFpbmVycyB3b3VsZCBoYXZlDQpt b3JlIHRpbWUgdG8gc3BlbmQgPw0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZy b206IEFsbGVuIENoZW4gKOmZs+afj+WuhykgDQo+IFNlbnQ6IFR1ZXNkYXksIERlY2VtYmVyIDA4 LCAyMDIwIDY6NTggUE0NCj4gQ2M6IEphdS1DaGloIFRzZW5nICjmm77mmK3mmbopOyBIZXJtZXMg V3UgKOWQs+S9s+Wujyk7IEtlbm5ldGggSHVuZyAo5rSq5a625YCrKTsgQWxsZW4gQ2hlbiAo6Zmz 5p+P5a6HKTsgUGktSHN1biBTaGloOyBKaXRhbyBTaGk7IFlpbHVuIExpbjsgSGVybWVzIFd1ICjl kLPkvbPlro8pOyBBbmRyemVqIEhhamRhOyBOZWlsIEFybXN0cm9uZzsgTGF1cmVudCBQaW5jaGFy dDsgSm9uYXMgS2FybG1hbjsgSmVybmVqIFNrcmFiZWM7IERhdmlkIEFpcmxpZTsgRGFuaWVsIFZl dHRlcjsgTWF0dGhpYXMgQnJ1Z2dlcjsgb3BlbiBsaXN0OyBvcGVuIGxpc3Q6RFJNIERSSVZFUlM7 IG1vZGVyYXRlZCBsaXN0OkFSTS9NZWRpYXRlayBTb0Mgc3VwcG9ydDsgbW9kZXJhdGVkIGxpc3Q6 QVJNL01lZGlhdGVrIFNvQyBzdXBwb3J0DQo+IFN1YmplY3Q6IFtQQVRDSCB2Nl0gZHJtL2JyaWRn ZTogYWRkIGl0NjUwNSBkcml2ZXINCj4gDQo+IFRoaXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgaVRF IElUNjUwNS4NCj4gVGhpcyBkZXZpY2UgY2FuIGNvbnZlcnQgRFBJIHNpZ25hbCB0byBEUCBvdXRw dXQuDQo+IA0KPiBGcm9tOiBBbGxlbiBDaGVuIDxhbGxlbi5jaGVuQGl0ZS5jb20udHc+DQo+IFNp Z25lZC1vZmYtYnk6IEppdGFvIFNoaSA8aml0YW8uc2hpQG1lZGlhdGVrLmNvbT4NCj4gU2lnbmVk LW9mZi1ieTogUGktSHN1biBTaGloIDxwaWhzdW5AY2hyb21pdW0ub3JnPg0KPiBTaWduZWQtb2Zm LWJ5OiBZaWx1biBMaW4gPHlsbGluQGdvb2dsZS5jb20+DQo+IFNpZ25lZC1vZmYtYnk6IEhlcm1l cyBXdSA8aGVybWVzLnd1QGl0ZS5jb20udHc+DQo+IFNpZ25lZC1vZmYtYnk6IEFsbGVuIENoZW4g PGFsbGVuLmNoZW5AaXRlLmNvbS50dz4NCj4gLS0tDQo+ICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdl L0tjb25maWcgICAgICB8ICAgIDcgKw0KPiAgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmls ZSAgICAgfCAgICAxICsNCj4gIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvaXRlLWl0NjUwNS5jIHwg MzM0MyArKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gIDMgZmlsZXMgY2hhbmdlZCwgMzM1 MSBpbnNlcnRpb25zKCspDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS9pdGUtaXQ2NTA1LmMNCj4gDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJp ZGdlL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcNCj4gaW5kZXggZTQx MTBkNmNhN2IzYy4uMjVkMzRkNzE5NjAwNCAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2JyaWRnZS9LY29uZmlnDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZw0K PiBAQCAtNzQsNiArNzQsMTMgQEAgY29uZmlnIERSTV9MT05USVVNX0xUOTYxMVVYQw0KPiAgCSAg SERNSSBzaWduYWxzDQo+ICAJICBQbGVhc2Ugc2F5IFkgaWYgeW91IGhhdmUgc3VjaCBoYXJkd2Fy ZS4NCj4gIA0KPiArY29uZmlnIERSTV9JVEVfSVQ2NTA1DQo+ICsJdHJpc3RhdGUgIklURSBJVDY1 MDUgRGlzcGxheVBvcnQgYnJpZGdlIg0KPiArCWRlcGVuZHMgb24gT0YNCj4gKwlzZWxlY3QgRFJN X0tNU19IRUxQRVINCj4gKwloZWxwDQo+ICsJICBJVEUgSVQ2NTA1IERpc3BsYXlQb3J0IGJyaWRn ZSBjaGlwIGRyaXZlci4NCj4gKw0KPiAgY29uZmlnIERSTV9MVkRTX0NPREVDDQo+ICAJdHJpc3Rh dGUgIlRyYW5zcGFyZW50IExWRFMgZW5jb2RlcnMgYW5kIGRlY29kZXJzIHN1cHBvcnQiDQo+ICAJ ZGVwZW5kcyBvbiBPRg0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtl ZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUNCj4gaW5kZXggODZlN2FjYzc2 ZjhkNi4uMmIyZjhmMGI1YjBmYSAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS9NYWtlZmlsZQ0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlDQo+IEBA IC00LDYgKzQsNyBAQCBvYmotJChDT05GSUdfRFJNX0NIUk9OVEVMX0NINzAzMykgKz0gY2hyb250 ZWwtY2g3MDMzLm8NCj4gIG9iai0kKENPTkZJR19EUk1fRElTUExBWV9DT05ORUNUT1IpICs9IGRp c3BsYXktY29ubmVjdG9yLm8NCj4gIG9iai0kKENPTkZJR19EUk1fTE9OVElVTV9MVDk2MTEpICs9 IGxvbnRpdW0tbHQ5NjExLm8NCj4gIG9iai0kKENPTkZJR19EUk1fTE9OVElVTV9MVDk2MTFVWEMp ICs9IGxvbnRpdW0tbHQ5NjExdXhjLm8NCj4gK29iai0kKENPTkZJR19EUk1fSVRFX0lUNjUwNSkg Kz0gaXRlLWl0NjUwNS5vDQo+ICBvYmotJChDT05GSUdfRFJNX0xWRFNfQ09ERUMpICs9IGx2ZHMt Y29kZWMubw0KPiAgb2JqLSQoQ09ORklHX0RSTV9NRUdBQ0hJUFNfU1REUFhYWFhfR0VfQjg1MFYz X0ZXKSArPSBtZWdhY2hpcHMtc3RkcHh4eHgtZ2UtYjg1MHYzLWZ3Lm8NCj4gIG9iai0kKENPTkZJ R19EUk1fTlhQX1BUTjM0NjApICs9IG54cC1wdG4zNDYwLm8NCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9icmlkZ2UvaXRlLWl0NjUwNS5jIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9p dGUtaXQ2NTA1LmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAw MC4uNWU3NjcxOWE1MWE0YQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvaXRlLWl0NjUwNS5jDQo+IEBAIC0wLDAgKzEsMzM0MyBAQA0KPiArLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKQ0KPiArLyoN Cj4gKyAqIENvcHlyaWdodCAoYykgMjAyMCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuDQo+ICsgKi8NCj4gKyNpbmNsdWRlIDxsaW51eC9iaXRzLmg+DQo+ICsjaW5j bHVkZSA8bGludXgvZGVsYXkuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4NCj4gKyNp bmNsdWRlIDxsaW51eC9lcnIuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9leHRjb24uaD4NCj4gKyNp bmNsdWRlIDxsaW51eC9mcy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4N Cj4gKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQu aD4NCj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+DQo+ICsjaW5jbHVkZSA8bGlu dXgvcmVnbWFwLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+DQo+ ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+DQo+ ICsNCj4gKyNpbmNsdWRlIDxjcnlwdG8vaGFzaC5oPg0KPiArDQo+ICsjaW5jbHVkZSA8ZHJtL2Ry bV9hdG9taWNfaGVscGVyLmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9icmlkZ2UuaD4NCj4gKyNp bmNsdWRlIDxkcm0vZHJtX2NydGMuaD4NCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVy Lmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9kcF9oZWxwZXIuaD4NCj4gKyNpbmNsdWRlIDxkcm0v ZHJtX2VkaWQuaD4NCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2hkY3AuaD4NCj4gKyNpbmNsdWRlIDxk cm0vZHJtX3ByaW50Lmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9wcm9iZV9oZWxwZXIuaD4NCj4g Kw0KPiArI2luY2x1ZGUgPHNvdW5kL2hkbWktY29kZWMuaD4NCj4gKw0KPiArI2RlZmluZSBSRUdf SUNfVkVSIDB4MDQNCj4gKw0KPiArI2RlZmluZSBSRUdfUkVTRVRfQ1RSTCAweDA1DQo+ICsjZGVm aW5lIFZJREVPX1JFU0VUIEJJVCgwKQ0KPiArI2RlZmluZSBBVURJT19SRVNFVCBCSVQoMSkNCj4g KyNkZWZpbmUgQUxMX0xPR0lDX1JFU0VUIEJJVCgyKQ0KPiArI2RlZmluZSBBVVhfUkVTRVQgQklU KDMpDQo+ICsjZGVmaW5lIEhEQ1BfUkVTRVQgQklUKDQpDQo+ICsNCj4gKyNkZWZpbmUgSU5UX1NU QVRVU18wMSAweDA2DQo+ICsjZGVmaW5lIElOVF9NQVNLXzAxIDB4MDkNCj4gKyNkZWZpbmUgSU5U X0hQRF9DSEFOR0UgQklUKDApDQo+ICsjZGVmaW5lIElOVF9SRUNFSVZFX0hQRF9JUlEgQklUKDEp DQo+ICsjZGVmaW5lIElOVF9TQ0RUX0NIQU5HRSBCSVQoMikNCj4gKyNkZWZpbmUgSU5UX0hEQ1Bf RkFJTCBCSVQoMykNCj4gKyNkZWZpbmUgSU5UX0hEQ1BfRE9ORSBCSVQoNCkNCj4gKw0KPiArI2Rl ZmluZSBJTlRfU1RBVFVTXzAyIDB4MDcNCj4gKyNkZWZpbmUgSU5UX01BU0tfMDIgMHgwQQ0KPiAr I2RlZmluZSBJTlRfQVVYX0NNRF9GQUlMIEJJVCgwKQ0KPiArI2RlZmluZSBJTlRfSERDUF9LU1Zf Q0hFQ0sgQklUKDEpDQo+ICsjZGVmaW5lIElOVF9BVURJT19GSUZPX0VSUk9SIEJJVCgyKQ0KPiAr DQo+ICsjZGVmaW5lIElOVF9TVEFUVVNfMDMgMHgwOA0KPiArI2RlZmluZSBJTlRfTUFTS18wMyAw eDBCDQo+ICsjZGVmaW5lIElOVF9MSU5LX1RSQUlOX0ZBSUwgQklUKDQpDQo+ICsjZGVmaW5lIElO VF9WSURfRklGT19FUlJPUiBCSVQoNSkNCj4gKyNkZWZpbmUgSU5UX0lPX0xBVENIX0ZJRk9fT1ZF UkZMT1cgQklUKDcpDQo+ICsNCj4gKyNkZWZpbmUgUkVHX1NZU1RFTV9TVFMgMHgwRA0KPiArI2Rl ZmluZSBJTlRfU1RTIEJJVCgwKQ0KPiArI2RlZmluZSBIUERfU1RTIEJJVCgxKQ0KPiArI2RlZmlu ZSBWSURFT19TVEIgQklUKDIpDQo+ICsNCj4gKyNkZWZpbmUgUkVHX0xJTktfVFJBSU5fU1RTIDB4 MEUNCj4gKyNkZWZpbmUgTElOS19TVEFURV9DUiBCSVQoMikNCj4gKyNkZWZpbmUgTElOS19TVEFU RV9FUSBCSVQoMykNCj4gKyNkZWZpbmUgTElOS19TVEFURV9OT1JQIEJJVCg0KQ0KPiArDQo+ICsj ZGVmaW5lIFJFR19CQU5LX1NFTCAweDBGDQo+ICsjZGVmaW5lIFJFR19DTEtfQ1RSTDAgMHgxMA0K PiArI2RlZmluZSBNX1BDTEtfREVMQVkgMHgwMw0KPiArDQo+ICsjZGVmaW5lIFJFR19BVVhfT1BU IDB4MTENCj4gKyNkZWZpbmUgQVVYX0FVVE9fUlNUIEJJVCgwKQ0KPiArI2RlZmluZSBBVVhfRklY X0ZSRVEgQklUKDMpDQo+ICsNCj4gKyNkZWZpbmUgUkVHX0RBVEFfQ1RSTDAgMHgxMg0KPiArI2Rl ZmluZSBWSURFT19MQVRDSF9FREdFIEJJVCg0KQ0KPiArI2RlZmluZSBFTkFCTEVfUENMS19DT1VO VEVSIEJJVCg3KQ0KPiArDQo+ICsjZGVmaW5lIFJFR19QQ0xLX0NPVU5URVJfVkFMVUUgMHgxMw0K PiArDQo+ICsjZGVmaW5lIFJFR181MDFfRklGT19DVFJMIDB4MTUNCj4gKyNkZWZpbmUgUlNUXzUw MV9GSUZPIEJJVCgxKQ0KPiArDQo+ICsjZGVmaW5lIFJFR19UUkFJTl9DVFJMMCAweDE2DQo+ICsj ZGVmaW5lIEZPUkNFX0xCUiBCSVQoMCkNCj4gKyNkZWZpbmUgTEFORV9DT1VOVF9NQVNLIDB4MDYN Cj4gKyNkZWZpbmUgTEFORV9TV0FQIEJJVCgzKQ0KPiArI2RlZmluZSBTUFJFQURfQU1QXzUgQklU KDQpDQo+ICsjZGVmaW5lIEZPUkNFX0NSX0RPTkUgQklUKDUpDQo+ICsjZGVmaW5lIEZPUkNFX0VR X0RPTkUgQklUKDYpDQo+ICsNCj4gKyNkZWZpbmUgUkVHX1RSQUlOX0NUUkwxIDB4MTcNCj4gKyNk ZWZpbmUgQVVUT19UUkFJTiBCSVQoMCkNCj4gKyNkZWZpbmUgTUFOVUFMX1RSQUlOIEJJVCgxKQ0K PiArI2RlZmluZSBGT1JDRV9SRVRSQUlOIEJJVCgyKQ0KPiArDQo+ICsjZGVmaW5lIFJFR19BVVhf Q1RSTCAweDIzDQo+ICsjZGVmaW5lIENMUl9FRElEX0ZJRk8gQklUKDApDQo+ICsjZGVmaW5lIEFV WF9VU0VSX01PREUgQklUKDEpDQo+ICsjZGVmaW5lIEFVWF9OT19TRUdNRU5UX1dSIEJJVCg2KQ0K PiArI2RlZmluZSBBVVhfRU5fRklGT19SRUFEIEJJVCg3KQ0KPiArDQo+ICsjZGVmaW5lIFJFR19B VVhfQURSXzBfNyAweDI0DQo+ICsjZGVmaW5lIFJFR19BVVhfQURSXzhfMTUgMHgyNQ0KPiArI2Rl ZmluZSBSRUdfQVVYX0FEUl8xNl8xOSAweDI2DQo+ICsjZGVmaW5lIFJFR19BVVhfT1VUX0RBVEEw IDB4MjcNCj4gKw0KPiArI2RlZmluZSBSRUdfQVVYX0NNRF9SRVEgMHgyQg0KPiArI2RlZmluZSBB VVhfQlVTWSBCSVQoNSkNCj4gKw0KPiArI2RlZmluZSBSRUdfQVVYX0RBVEFfMF83IDB4MkMNCj4g KyNkZWZpbmUgUkVHX0FVWF9EQVRBXzhfMTUgMHgyRA0KPiArI2RlZmluZSBSRUdfQVVYX0RBVEFf MTZfMjMgMHgyRQ0KPiArI2RlZmluZSBSRUdfQVVYX0RBVEFfMjRfMzEgMHgyRg0KPiArDQo+ICsj ZGVmaW5lIFJFR19BVVhfREFUQV9GSUZPIDB4MkYNCj4gKw0KPiArI2RlZmluZSBSRUdfQVVYX0VS Uk9SX1NUUyAweDlGDQo+ICsjZGVmaW5lIE1fQVVYX1JFUV9GQUlMIDB4MDMNCj4gKw0KPiArI2Rl ZmluZSBSRUdfSERDUF9DVFJMMSAweDM4DQo+ICsjZGVmaW5lIEhEQ1BfQ1BfRU5BQkxFIEJJVCgw KQ0KPiArDQo+ICsjZGVmaW5lIFJFR19IRENQX1RSSUdHRVIgMHgzOQ0KPiArI2RlZmluZSBIRENQ X1RSSUdHRVJfU1RBUlQgIEJJVCgwKQ0KPiArI2RlZmluZSBIRENQX1RSSUdHRVJfQ1BJUlEgIEJJ VCgxKQ0KPiArI2RlZmluZSBIRENQX1RSSUdHRVJfS1NWX0RPTkUgIEJJVCg0KQ0KPiArI2RlZmlu ZSBIRENQX1RSSUdHRVJfS1NWX0ZBSUwgQklUKDUpDQo+ICsNCj4gKyNkZWZpbmUgUkVHX0hEQ1Bf Q1RSTDIgMHgzQQ0KPiArI2RlZmluZSBIRENQX0FOX1NFTCBCSVQoMCkNCj4gKyNkZWZpbmUgSERD UF9BTl9HRU4gQklUKDEpDQo+ICsjZGVmaW5lIEhEQ1BfSFdfSFBESVJRX0FDVCBCSVQoMikNCj4g KyNkZWZpbmUgSERDUF9FTl9NMF9SRUFEIEJJVCg1KQ0KPiArDQo+ICsjZGVmaW5lIFJFR19NMF8w XzcgMHg0Qw0KPiArI2RlZmluZSBSRUdfQU5fMF83IDB4NEMNCj4gKyNkZWZpbmUgUkVHX1NQX0NU UkwwIDB4NTgNCj4gKyNkZWZpbmUgUkVHX0lQX0NUUkwxIDB4NTkNCj4gKyNkZWZpbmUgUkVHX0lQ X0NUUkwyIDB4NUENCj4gKw0KPiArI2RlZmluZSBSRUdfTElOS19EUlYgMHg1Qw0KPiArI2RlZmlu ZSBEUlZfSFMgQklUKDEpDQo+ICsNCj4gKyNkZWZpbmUgUkVHX0RSVl9MTl9EQVRBX1NFTCAweDVE DQo+ICsNCj4gKyNkZWZpbmUgUkVHX0FVWCAweDVFDQo+ICsNCj4gKyNkZWZpbmUgUkVHX1ZJRF9C VVNfQ1RSTDAgMHg2MA0KPiArI2RlZmluZSBJTl9ERFIgQklUKDIpDQo+ICsjZGVmaW5lIEREUl9D RCAoMHgwMSA8PCA2KQ0KPiArDQo+ICsjZGVmaW5lIFJFR19WSURfQlVTX0NUUkwxIDB4NjENCj4g KyNkZWZpbmUgVFhfRklGT19SRVNFVCBCSVQoMSkNCj4gKw0KPiArI2RlZmluZSBSRUdfSU5QVVRf Q1RSTCAweEEwDQo+ICsjZGVmaW5lIElOUFVUX0hTWU5DX1BPTCBCSVQoMCkNCj4gKyNkZWZpbmUg SU5QVVRfVlNZTkNfUE9MIEJJVCgyKQ0KPiArI2RlZmluZSBJTlBVVF9JTlRFUkxBQ0VEIEJJVCg0 KQ0KPiArDQo+ICsjZGVmaW5lIFJFR19JTlBVVF9IVE9UQUwgMHhBMQ0KPiArI2RlZmluZSBSRUdf SU5QVVRfSEFDVElWRV9TVEFSVCAweEEzDQo+ICsjZGVmaW5lIFJFR19JTlBVVF9IQUNUSVZFX1dJ RFRIIDB4QTUNCj4gKyNkZWZpbmUgUkVHX0lOUFVUX0hGUk9OVF9QT1JDSCAweEE3DQo+ICsjZGVm aW5lIFJFR19JTlBVVF9IU1lOQ19XSURUSCAweEE5DQo+ICsjZGVmaW5lIFJFR19JTlBVVF9WVE9U QUwgMHhBQg0KPiArI2RlZmluZSBSRUdfSU5QVVRfVkFDVElWRV9TVEFSVCAweEFEDQo+ICsjZGVm aW5lIFJFR19JTlBVVF9WQUNUSVZFX1dJRFRIIDB4QUYNCj4gKyNkZWZpbmUgUkVHX0lOUFVUX1ZG Uk9OVF9QT1JDSCAweEIxDQo+ICsjZGVmaW5lIFJFR19JTlBVVF9WU1lOQ19XSURUSCAweEIzDQo+ ICsNCj4gKyNkZWZpbmUgUkVHX0FVRElPX1NSQ19DVFJMIDB4QjgNCj4gKyNkZWZpbmUgTV9BVURJ T19JMlNfRU4gMHgwRg0KPiArI2RlZmluZSBFTl9JMlMwIEJJVCgwKQ0KPiArI2RlZmluZSBFTl9J MlMxIEJJVCgxKQ0KPiArI2RlZmluZSBFTl9JMlMyIEJJVCgyKQ0KPiArI2RlZmluZSBFTl9JMlMz IEJJVCgzKQ0KPiArI2RlZmluZSBBVURJT19GSUZPX1JFU0VUIEJJVCg3KQ0KPiArDQo+ICsjZGVm aW5lIFJFR19BVURJT19GTVQgMHhCOQ0KPiArI2RlZmluZSBSRUdfQVVESU9fRklGT19TRUwgMHhC QQ0KPiArDQo+ICsjZGVmaW5lIFJFR19BVURJT19DVFJMMCAweEJCDQo+ICsjZGVmaW5lIEFVRElP X0ZVTExfUEtUIEJJVCg0KQ0KPiArI2RlZmluZSBBVURJT18xNkJfQk9VTkQgQklUKDUpDQo+ICsN Cj4gKyNkZWZpbmUgUkVHX0FVRElPX0NUUkwxIDB4QkMNCj4gKyNkZWZpbmUgUkVHX0FVRElPX0lO UFVUX0ZSRVEgMHhCRQ0KPiArDQo+ICsjZGVmaW5lIFJFR19JRUM5NThfU1RTMCAweEJGDQo+ICsj ZGVmaW5lIFJFR19JRUM5NThfU1RTMSAweEMwDQo+ICsjZGVmaW5lIFJFR19JRUM5NThfU1RTMiAw eEMxDQo+ICsjZGVmaW5lIFJFR19JRUM5NThfU1RTMyAweEMyDQo+ICsjZGVmaW5lIFJFR19JRUM5 NThfU1RTNCAweEMzDQo+ICsNCj4gKyNkZWZpbmUgUkVHX0hQRF9JUlFfVElNRSAweEM5DQo+ICsj ZGVmaW5lIFJFR19BVVhfREVCVUdfTU9ERSAweENBDQo+ICsjZGVmaW5lIFJFR19BVVhfT1BUMiAw eENCDQo+ICsjZGVmaW5lIFJFR19IRENQX09QVCAweENFDQo+ICsjZGVmaW5lIFJFR19VU0VSX0RS Vl9QUkUgMHhDRg0KPiArDQo+ICsjZGVmaW5lIFJFR19EQVRBX01VVEVfQ1RSTCAweEQzDQo+ICsj ZGVmaW5lIEVOQUJMRV9FTkhBTkNFRF9GUkFNRSBCSVQoMCkNCj4gKyNkZWZpbmUgRU5BQkxFX0FV VE9fVklERU9fRklGT19SRVNFVCBCSVQoMSkNCj4gKyNkZWZpbmUgRU5fVklEX01VVEUgQklUKDQp DQo+ICsjZGVmaW5lIEVOX0FVRF9NVVRFIEJJVCg1KQ0KPiArDQo+ICsjZGVmaW5lIFJFR19USU1F X1NUTVBfQ1RSTCAweEQ0DQo+ICsjZGVmaW5lIEVOX0VOSEFOQ0VfVklEX1NUTVAgQklUKDApDQo+ ICsjZGVmaW5lIEVOX0VOSEFOQ0VfQVVEX1NUTVAgQklUKDIpDQo+ICsjZGVmaW5lIE1fU1RBTVBf U1RFUCAweDMwDQo+ICsjZGVmaW5lIEVOX1NTQ19HQVQgQklUKDYpDQo+ICsNCj4gKyNkZWZpbmUg UkVHX0lORk9GUkFNRV9DVFJMIDB4RTgNCj4gKyNkZWZpbmUgRU5fQVZJX1BLVCBCSVQoMCkNCj4g KyNkZWZpbmUgRU5fQVVEX1BLVCBCSVQoMSkNCj4gKyNkZWZpbmUgRU5fTVBHX1BLVCBCSVQoMikN Cj4gKyNkZWZpbmUgRU5fR0VOX1BLVCBCSVQoMykNCj4gKyNkZWZpbmUgRU5fVklEX1RJTUVfU1RN UCBCSVQoNCkNCj4gKyNkZWZpbmUgRU5fQVVEX1RJTUVfU1RNUCBCSVQoNSkNCj4gKyNkZWZpbmUg RU5fVklEX0NUUkxfUEtUIChFTl9BVklfUEtUIHwgRU5fVklEX1RJTUVfU1RNUCkNCj4gKyNkZWZp bmUgRU5fQVVEX0NUUkxfUEtUIChFTl9BVURfUEtUIHwgRU5fQVVEX1RJTUVfU1RNUCkNCj4gKw0K PiArI2RlZmluZSBSRUdfQVVESU9fTl8wXzcgMHhERQ0KPiArI2RlZmluZSBSRUdfQVVESU9fTl84 XzE1IDB4REYNCj4gKyNkZWZpbmUgUkVHX0FVRElPX05fMTZfMjMgMHhFMA0KPiArDQo+ICsjZGVm aW5lIFJFR19BVklfSU5GT19EQjEgMHhFOQ0KPiArI2RlZmluZSBSRUdfQVZJX0lORk9fREIyIDB4 RUENCj4gKyNkZWZpbmUgUkVHX0FWSV9JTkZPX0RCMyAweEVCDQo+ICsjZGVmaW5lIFJFR19BVklf SU5GT19EQjQgMHhFQw0KPiArI2RlZmluZSBSRUdfQVZJX0lORk9fREI1IDB4RUQNCj4gKyNkZWZp bmUgUkVHX0FWSV9JTkZPX1NVTSAweEY2DQo+ICsNCj4gKyNkZWZpbmUgUkVHX0FVRF9JTkZPRlJB TV9EQjEgMHhGNw0KPiArI2RlZmluZSBSRUdfQVVEX0lORk9GUkFNX0RCMiAweEY4DQo+ICsjZGVm aW5lIFJFR19BVURfSU5GT0ZSQU1fREIzIDB4RjkNCj4gKyNkZWZpbmUgUkVHX0FVRF9JTkZPRlJB TV9EQjQgMHhGQQ0KPiArI2RlZmluZSBSRUdfQVVEX0lORk9GUkFNX1NVTSAweEZCDQo+ICsNCj4g Ky8qIHRoZSBmb2xsb3dpbmcgc2l4IHJlZ2lzdGVycyBhcmUgaW4gYmFuazEgKi8NCj4gKyNkZWZp bmUgUkVHX0RSVl8wX0RCXzgwMF9NViAweDdFDQo+ICsjZGVmaW5lIFJFR19QUkVfMF9EQl84MDBf TVYgMHg3Rg0KPiArI2RlZmluZSBSRUdfUFJFXzNQNV9EQl84MDBfTVYgMHg4MQ0KPiArI2RlZmlu ZSBSRUdfU1NDX0NUUkwwIDB4ODgNCj4gKyNkZWZpbmUgUkVHX1NTQ19DVFJMMSAweDg5DQo+ICsj ZGVmaW5lIFJFR19TU0NfQ1RSTDIgMHg4QQ0KPiArDQo+ICsjZGVmaW5lIFJCUiBEUF9MSU5LX0JX XzFfNjINCj4gKyNkZWZpbmUgSEJSIERQX0xJTktfQldfMl83DQo+ICsjZGVmaW5lIEhCUjIgRFBf TElOS19CV181XzQNCj4gKyNkZWZpbmUgSEJSMyBEUF9MSU5LX0JXXzhfMQ0KPiArDQo+ICsvKiBW ZW5kb3Igb3B0aW9uICovDQo+ICsjZGVmaW5lIEhEQ1BfREVTSVJFRCAxDQo+ICsjZGVmaW5lIE1B WF9MQU5FX0NPVU5UIDQNCj4gKyNkZWZpbmUgTUFYX0xJTktfUkFURSBIQlINCj4gKyNkZWZpbmUg QVVUT19UUkFJTl9SRVRSWSAzDQo+ICsjZGVmaW5lIE1BWF9IRENQX0RPV05fU1RSRUFNX0NPVU5U IDEwDQo+ICsjZGVmaW5lIE1BWF9DUl9MRVZFTCAweDAzDQo+ICsjZGVmaW5lIE1BWF9FUV9MRVZF TCAweDAzDQo+ICsjZGVmaW5lIEFVWF9XQUlUX1RJTUVPVVRfTVMgMTUNCj4gKyNkZWZpbmUgQVVY X0ZJRk9fTUFYX1NJWkUgMzINCj4gKyNkZWZpbmUgUElYRUxfQ0xLX0RFTEFZIDENCj4gKyNkZWZp bmUgUElYRUxfQ0xLX0lOVkVSU0UgMA0KPiArI2RlZmluZSBBREpVU1RfUEhBU0VfVEhSRVNIT0xE IDgwMDAwDQo+ICsjZGVmaW5lIERQSV9QSVhFTF9DTEtfTUFYIDk1MDAwDQo+ICsjZGVmaW5lIEhE Q1BfU0hBMV9GSUZPX0xFTiAoTUFYX0hEQ1BfRE9XTl9TVFJFQU1fQ09VTlQgKiA1ICsgMTApDQo+ ICsjZGVmaW5lIERFRkFVTFRfUFdSX09OIDANCj4gKyNkZWZpbmUgREVGQVVMVF9EUlZfSE9MRCAw DQo+ICsNCj4gKyNkZWZpbmUgQVVESU9fU0VMRUNUIEkyUw0KPiArI2RlZmluZSBBVURJT19UWVBF IExQQ00NCj4gKyNkZWZpbmUgQVVESU9fU0FNUExFX1JBVEUgU0FNUExFX1JBVEVfNDhLDQo+ICsj ZGVmaW5lIEFVRElPX0NIQU5ORUxfQ09VTlQgMg0KPiArDQo+ICsvKg0KPiArICogMDogU3RhbmRh cmQgSTJTDQo+ICsgKiAxOiAzMmJpdCBJMlMNCj4gKyAqLw0KPiArI2RlZmluZSBJMlNfSU5QVVRf Rk9STUFUIDENCj4gKw0KPiArLyoNCj4gKyAqIDA6IExlZnQtanVzdGlmaWVkDQo+ICsgKiAxOiBS aWdodC1qdXN0aWZpZWQNCj4gKyAqLw0KPiArI2RlZmluZSBJMlNfSlVTVElGSUVEIDANCj4gKw0K PiArLyoNCj4gKyAqIDA6IERhdGEgZGVsYXkgMVQgY29ycmVzcG9uZCB0byBXUw0KPiArICogMTog Tm8gZGF0YSBkZWxheSBjb3JyZXNwb25kIHRvIFdTDQo+ICsgKi8NCj4gKyNkZWZpbmUgSTJTX0RB VEFfREVMQVkgMA0KPiArDQo+ICsvKg0KPiArICogMDogTGVmdCBjaGFubmVsDQo+ICsgKiAxOiBS aWdodCBjaGFubmVsDQo+ICsgKi8NCj4gKyNkZWZpbmUgSTJTX1dTX0NIQU5ORUwgMA0KPiArDQo+ ICsvKg0KPiArICogMDogTVNCIHNoaWZ0IGZpcnN0DQo+ICsgKiAxOiBMU0Igc2hpZnQgZmlyc3QN Cj4gKyAqLw0KPiArI2RlZmluZSBJMlNfREFUQV9TRVFVRU5DRSAwDQo+ICsNCj4gKy8qDQo+ICsg KiBBdWRpbyBTYW1wbGUgV29yZCBMZW5ndGgNCj4gKyAqIFdPUkRfTEVOR1RIXzE2QklUDQo+ICsg KiBXT1JEX0xFTkdUSF8xOEJJVA0KPiArICogV09SRF9MRU5HVEhfMjBCSVQNCj4gKyAqIFdPUkRf TEVOR1RIXzI0QklUDQo+ICsgKi8NCj4gKyNkZWZpbmUgQVVESU9fV09SRF9MRU5HVEggV09SRF9M RU5HVEhfMjRCSVQNCj4gKw0KPiArZW51bSBhdXhfY21kX3R5cGUgew0KPiArCUNNRF9BVVhfTkFU SVZFX1JFQUQgPSAweDAsDQo+ICsJQ01EX0FVWF9OQVRJVkVfV1JJVEUgPSAweDUsDQo+ICsJQ01E X0FVWF9JMkNfRURJRF9SRUFEID0gMHhCLA0KPiArfTsNCj4gKw0KPiArZW51bSBhdXhfY21kX3Jl cGx5IHsNCj4gKwlSRVBMWV9BQ0ssDQo+ICsJUkVQTFlfTkFDSywNCj4gKwlSRVBMWV9ERUZFUiwN Cj4gK307DQo+ICsNCj4gK2VudW0gbGlua190cmFpbl9zdGF0dXMgew0KPiArCUxJTktfSURMRSwN Cj4gKwlMSU5LX0JVU1ksDQo+ICsJTElOS19PSywNCj4gK307DQo+ICsNCj4gK2VudW0gaGRjcF9z dGF0ZSB7DQo+ICsJSERDUF9BVVRIX0lETEUsDQo+ICsJSERDUF9BVVRIX0dPSU5HLA0KPiArCUhE Q1BfQVVUSF9ET05FLA0KPiArfTsNCj4gKw0KPiArc3RydWN0IGl0NjUwNV9wbGF0Zm9ybV9kYXRh IHsNCj4gKwlzdHJ1Y3QgcmVndWxhdG9yICpwd3IxODsNCj4gKwlzdHJ1Y3QgcmVndWxhdG9yICpv dmRkOw0KPiArCXN0cnVjdCBncGlvX2Rlc2MgKmdwaW9kX3Jlc2V0Ow0KPiArfTsNCj4gKw0KPiAr ZW51bSBpdDY1MDVfYXVkaW9fc2VsZWN0IHsNCj4gKwlJMlMgPSAwLA0KPiArCVNQRElGLA0KPiAr fTsNCj4gKw0KPiArZW51bSBpdDY1MDVfYXVkaW9fc2FtcGxlX3JhdGUgew0KPiArCVNBTVBMRV9S QVRFXzI0SyA9IDB4NiwNCj4gKwlTQU1QTEVfUkFURV8zMksgPSAweDMsDQo+ICsJU0FNUExFX1JB VEVfNDhLID0gMHgyLA0KPiArCVNBTVBMRV9SQVRFXzk2SyA9IDB4QSwNCj4gKwlTQU1QTEVfUkFU RV8xOTJLID0gMHhFLA0KPiArCVNBTVBMRV9SQVRFXzQ0XzFLID0gMHgwLA0KPiArCVNBTVBMRV9S QVRFXzg4XzJLID0gMHg4LA0KPiArCVNBTVBMRV9SQVRFXzE3Nl80SyA9IDB4QywNCj4gK307DQo+ ICsNCj4gK2VudW0gaXQ2NTA1X2F1ZGlvX3R5cGUgew0KPiArCUxQQ00gPSAwLA0KPiArCU5MUENN LA0KPiArCURTUywNCj4gK307DQo+ICsNCj4gK2VudW0gaXQ2NTA1X2F1ZGlvX3dvcmRfbGVuZ3Ro IHsNCj4gKwlXT1JEX0xFTkdUSF8xNkJJVCA9IDAsDQo+ICsJV09SRF9MRU5HVEhfMThCSVQsDQo+ ICsJV09SRF9MRU5HVEhfMjBCSVQsDQo+ICsJV09SRF9MRU5HVEhfMjRCSVQsDQo+ICt9Ow0KPiAr DQo+ICtzdHJ1Y3QgaXQ2NTA1X2F1ZGlvX2RhdGEgew0KPiArCWVudW0gaXQ2NTA1X2F1ZGlvX3Nl bGVjdCBzZWxlY3Q7DQo+ICsJZW51bSBpdDY1MDVfYXVkaW9fc2FtcGxlX3JhdGUgc2FtcGxlX3Jh dGU7DQo+ICsJZW51bSBpdDY1MDVfYXVkaW9fdHlwZSB0eXBlOw0KPiArCWVudW0gaXQ2NTA1X2F1 ZGlvX3dvcmRfbGVuZ3RoIHdvcmRfbGVuZ3RoOw0KPiArCXU4IGNoYW5uZWxfY291bnQ7DQo+ICsJ dTggaTJzX2lucHV0X2Zvcm1hdDsNCj4gKwl1OCBpMnNfanVzdGlmaWVkOw0KPiArCXU4IGkyc19k YXRhX2RlbGF5Ow0KPiArCXU4IGkyc193c19jaGFubmVsOw0KPiArCXU4IGkyc19kYXRhX3NlcXVl bmNlOw0KPiArfTsNCj4gKw0KPiArc3RydWN0IGl0NjUwNV9hdWRpb19zYW1wbGVfcmF0ZV9tYXAg ew0KPiArCWVudW0gaXQ2NTA1X2F1ZGlvX3NhbXBsZV9yYXRlIHJhdGU7DQo+ICsJaW50IHNhbXBs ZV9yYXRlX3ZhbHVlOw0KPiArfTsNCj4gKw0KPiArc3RydWN0IGl0NjUwNV9kcm1fZHBfbGluayB7 DQo+ICsJdW5zaWduZWQgY2hhciByZXZpc2lvbjsNCj4gKwl1bnNpZ25lZCBpbnQgcmF0ZTsNCj4g Kwl1bnNpZ25lZCBpbnQgbnVtX2xhbmVzOw0KPiArCXVuc2lnbmVkIGxvbmcgY2FwYWJpbGl0aWVz Ow0KPiArfTsNCj4gKw0KPiArc3RydWN0IGl0NjUwNSB7DQo+ICsJc3RydWN0IGRybV9kcF9hdXgg YXV4Ow0KPiArCXN0cnVjdCBkcm1fYnJpZGdlIGJyaWRnZTsNCj4gKwlzdHJ1Y3QgaTJjX2NsaWVu dCAqY2xpZW50Ow0KPiArCXN0cnVjdCBlZGlkICplZGlkOw0KPiArCXN0cnVjdCBkcm1fY29ubmVj dG9yIGNvbm5lY3RvcjsNCj4gKwlzdHJ1Y3QgaXQ2NTA1X2RybV9kcF9saW5rIGxpbms7DQo+ICsJ c3RydWN0IGl0NjUwNV9wbGF0Zm9ybV9kYXRhIHBkYXRhOw0KPiArCXN0cnVjdCBtdXRleCBleHRj b25fbG9jazsNCj4gKwlzdHJ1Y3QgbXV0ZXggbW9kZV9sb2NrOw0KPiArCXN0cnVjdCBtdXRleCBh dXhfbG9jazsNCj4gKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7DQo+ICsJc3RydWN0IGRybV9kaXNw bGF5X21vZGUgdmlkZW9faW5mbzsNCj4gKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZXZlbnRfbmI7 DQo+ICsJc3RydWN0IGV4dGNvbl9kZXYgKmV4dGNvbjsNCj4gKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qg ZXh0Y29uX3dxOw0KPiArCWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgY29ubmVjdG9yX3N0YXR1 czsNCj4gKwllbnVtIGxpbmtfdHJhaW5fc3RhdHVzIGxpbmtfc3RhdGU7DQo+ICsJc3RydWN0IHdv cmtfc3RydWN0IGxpbmtfd29ya3M7DQo+ICsJdTggZHBjZFtEUF9SRUNFSVZFUl9DQVBfU0laRV07 DQo+ICsJdTggbGFuZV9jb3VudDsNCj4gKwl1OCBsaW5rX3JhdGVfYndfY29kZTsNCj4gKwl1OCBz aW5rX2NvdW50Ow0KPiArCWJvb2wgc3RlcF90cmFpbjsNCj4gKwlib29sIGJyYW5jaF9kZXZpY2U7 DQo+ICsJYm9vbCBlbmFibGVfc3NjOw0KPiArCWJvb2wgbGFuZV9zd2FwX2Rpc2FibGVkOw0KPiAr CWJvb2wgbGFuZV9zd2FwOw0KPiArCWJvb2wgcG93ZXJlZDsNCj4gKwl1MzIgYWZlX3NldHRpbmc7 DQo+ICsJZW51bSBoZGNwX3N0YXRlIGhkY3Bfc3RhdHVzOw0KPiArCXN0cnVjdCBkZWxheWVkX3dv cmsgaGRjcF93b3JrOw0KPiArCXN0cnVjdCB3b3JrX3N0cnVjdCBoZGNwX3dhaXRfa3N2X2xpc3Q7 DQo+ICsJc3RydWN0IGNvbXBsZXRpb24gd2FpdF9lZGlkX2NvbXBsZXRlOw0KPiArCXU4IGF1dG9f dHJhaW5fcmV0cnk7DQo+ICsJYm9vbCBoZGNwX2Rlc2lyZWQ7DQo+ICsJYm9vbCBpc19yZXBlYXRl cjsNCj4gKwl1OCBoZGNwX2Rvd25fc3RyZWFtX2NvdW50Ow0KPiArCXU4IGJrc3ZzW0RSTV9IRENQ X0tTVl9MRU5dOw0KPiArCXU4IHNoYTFfaW5wdXRbSERDUF9TSEExX0ZJRk9fTEVOXTsNCj4gKwli b29sIGVuYWJsZV9lbmhhbmNlZF9mcmFtZTsNCj4gKwloZG1pX2NvZGVjX3BsdWdnZWRfY2IgcGx1 Z2dlZF9jYjsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpjb2RlY19kZXY7DQo+ICsJc3RydWN0IGRlbGF5 ZWRfd29yayBkZWxheWVkX2F1ZGlvOw0KPiArCXN0cnVjdCBpdDY1MDVfYXVkaW9fZGF0YSBhdWRp bzsNCj4gKw0KPiArCS8qIGl0NjUwNSBkcml2ZXIgaG9sZCBvcHRpb24gKi8NCj4gKwlib29sIGVu YWJsZV9kcnZfaG9sZDsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBpdDY1MDVfc3RlcF90cmFpbl9w YXJhIHsNCj4gKwl1OCB2b2x0YWdlX3N3aW5nW01BWF9MQU5FX0NPVU5UXTsNCj4gKwl1OCBwcmVf ZW1waGFzaXNbTUFYX0xBTkVfQ09VTlRdOw0KPiArfTsNCj4gKw0KPiArLyoNCj4gKyAqIFZlbmRv ciBvcHRpb24gYWZlIHNldHRpbmdzIGZvciBkaWZmZXJlbnQgcGxhdGZvcm1zDQo+ICsgKiAwOiB3 aXRob3V0IEZQQyBjYWJsZQ0KPiArICogMTogd2l0aCBGUEMgY2FibGUNCj4gKyAqLw0KPiArDQo+ ICtzdGF0aWMgdTggY29uc3QgYWZlX3NldHRpbmdfdGFibGVbXVszXSA9IHsNCj4gKwl7MHg4Miwg MHgwMCwgMHg0NX0sDQo+ICsJezB4OTMsIDB4MkEsIDB4ODV9DQo+ICt9Ow0KPiArDQo+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGl0NjUwNV9hdWRpb19zYW1wbGVfcmF0ZV9tYXAgYXVkaW9fc2FtcGxl X3JhdGVfbWFwW10gPSB7DQo+ICsJe1NBTVBMRV9SQVRFXzI0SywgMjQwMDB9LA0KPiArCXtTQU1Q TEVfUkFURV8zMkssIDMyMDAwfSwNCj4gKwl7U0FNUExFX1JBVEVfNDhLLCA0ODAwMH0sDQo+ICsJ e1NBTVBMRV9SQVRFXzk2SywgOTYwMDB9LA0KPiArCXtTQU1QTEVfUkFURV8xOTJLLCAxOTIwMDB9 LA0KPiArCXtTQU1QTEVfUkFURV80NF8xSywgNDQxMDB9LA0KPiArCXtTQU1QTEVfUkFURV84OF8y SywgODgyMDB9LA0KPiArCXtTQU1QTEVfUkFURV8xNzZfNEssIDE3NjQwMH0sDQo+ICt9Ow0KPiAr DQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9yYW5nZSBpdDY1MDVfYnJpZGdlX3ZvbGF0 aWxlX3Jhbmdlc1tdID0gew0KPiArCXsgLnJhbmdlX21pbiA9IDAsIC5yYW5nZV9tYXggPSAweEZG IH0sDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9hY2Nlc3NfdGFi bGUgaXQ2NTA1X2JyaWRnZV92b2xhdGlsZV90YWJsZSA9IHsNCj4gKwkueWVzX3JhbmdlcyA9IGl0 NjUwNV9icmlkZ2Vfdm9sYXRpbGVfcmFuZ2VzLA0KPiArCS5uX3llc19yYW5nZXMgPSBBUlJBWV9T SVpFKGl0NjUwNV9icmlkZ2Vfdm9sYXRpbGVfcmFuZ2VzKSwNCj4gK307DQo+ICsNCj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBpdDY1MDVfcmVnbWFwX2NvbmZpZyA9IHsNCj4g KwkucmVnX2JpdHMgPSA4LA0KPiArCS52YWxfYml0cyA9IDgsDQo+ICsJLnZvbGF0aWxlX3RhYmxl ID0gJml0NjUwNV9icmlkZ2Vfdm9sYXRpbGVfdGFibGUsDQo+ICsJLmNhY2hlX3R5cGUgPSBSRUdD QUNIRV9OT05FLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGludCBpdDY1MDVfcmVhZChzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDUsIHVuc2lnbmVkIGludCByZWdfYWRkcikNCj4gK3sNCj4gKwl1bnNpZ25l ZCBpbnQgdmFsdWU7DQo+ICsJaW50IGVycjsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2 NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiArCWVyciA9IHJlZ21hcF9yZWFkKGl0NjUwNS0+cmVn bWFwLCByZWdfYWRkciwgJnZhbHVlKTsNCj4gKwlpZiAoZXJyIDwgMCkgew0KPiArCQlEUk1fREVW X0VSUk9SKGRldiwgInJlYWQgZmFpbGVkIHJlZ1sweCV4XSBlcnI6ICVkIiwgcmVnX2FkZHIsDQo+ ICsJCQkgICAgICBlcnIpOw0KPiArCQlyZXR1cm4gZXJyOw0KPiArCX0NCj4gKw0KPiArCXJldHVy biB2YWx1ZTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBpdDY1MDVfd3JpdGUoc3RydWN0IGl0 NjUwNSAqaXQ2NTA1LCB1bnNpZ25lZCBpbnQgcmVnX2FkZHIsDQo+ICsJCSAgICAgIHVuc2lnbmVk IGludCByZWdfdmFsKQ0KPiArew0KPiArCWludCBlcnI7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2 ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsNCj4gKwllcnIgPSByZWdtYXBfd3JpdGUoaXQ2 NTA1LT5yZWdtYXAsIHJlZ19hZGRyLCByZWdfdmFsKTsNCj4gKw0KPiArCWlmIChlcnIgPCAwKSB7 DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAid3JpdGUgZmFpbGVkIHJlZ1sweCV4XSA9IDB4JXgg ZXJyID0gJWQiLA0KPiArCQkJICAgICAgcmVnX2FkZHIsIHJlZ192YWwsIGVycik7DQo+ICsJCXJl dHVybiBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyBpbnQgaXQ2NTA1X3NldF9iaXRzKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdW5zaWduZWQgaW50 IHJlZywNCj4gKwkJCSB1bnNpZ25lZCBpbnQgbWFzaywgdW5zaWduZWQgaW50IHZhbHVlKQ0KPiAr ew0KPiArCWludCBlcnI7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50 LT5kZXY7DQo+ICsNCj4gKwllcnIgPSByZWdtYXBfdXBkYXRlX2JpdHMoaXQ2NTA1LT5yZWdtYXAs IHJlZywgbWFzaywgdmFsdWUpOw0KPiArCWlmIChlcnIgPCAwKSB7DQo+ICsJCURSTV9ERVZfRVJS T1IoDQo+ICsJCQlkZXYsICJ3cml0ZSByZWdbMHgleF0gPSAweCV4IG1hc2sgPSAweCV4IGZhaWxl ZCBlcnIgJWQiLA0KPiArCQkJcmVnLCB2YWx1ZSwgbWFzaywgZXJyKTsNCj4gKwkJcmV0dXJuIGVy cjsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQg aXQ2NTA1X2RlYnVnX3ByaW50KHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdW5zaWduZWQgaW50IHJl ZywNCj4gKwkJCSAgICAgY29uc3QgY2hhciAqcHJlZml4KQ0KPiArew0KPiArCXN0cnVjdCBkZXZp Y2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiArCWludCB2YWw7DQo+ICsNCj4gKwlp ZiAobGlrZWx5KCEoX19kcm1fZGVidWcgJiBEUk1fVVRfRFJJVkVSKSkpDQo+ICsJCXJldHVybjsN Cj4gKw0KPiArCXZhbCA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgcmVnKTsNCj4gKwlpZiAodmFsIDwg MCkNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiJXMgcmVnWyUwMnhdIHJlYWQgZXJy b3IgKCVkKSIsDQo+ICsJCQkJICAgICBwcmVmaXgsIHJlZywgdmFsKTsNCj4gKwllbHNlDQo+ICsJ CURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIiVzIHJlZ1slMDJ4XSA9IDB4JTAyeCIsIHByZWZp eCwgcmVnLA0KPiArCQkJCSAgICAgdmFsKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBpdDY1 MDVfZHBjZF9yZWFkKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdW5zaWduZWQgbG9uZyBvZmZzZXQp DQo+ICt7DQo+ICsJdTggdmFsdWU7DQo+ICsJaW50IHJldDsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiArCXJldCA9IGRybV9kcF9kcGNkX3Jl YWRiKCZpdDY1MDUtPmF1eCwgb2Zmc2V0LCAmdmFsdWUpOw0KPiArCWlmIChyZXQgPCAwKSB7DQo+ ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRFBDRCByZWFkIGZhaWxlZCBbMHglbHhdIHJldDogJWQi LCBvZmZzZXQsDQo+ICsJCQkgICAgICByZXQpOw0KPiArCQlyZXR1cm4gcmV0Ow0KPiArCX0NCj4g KwlyZXR1cm4gdmFsdWU7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X2RwY2Rfd3Jp dGUoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LCB1bnNpZ25lZCBsb25nIG9mZnNldCwNCj4gKwkJCSAg ICAgdW5zaWduZWQgbG9uZyBkYXRhaW4pDQo+ICt7DQo+ICsJaW50IHJldDsNCj4gKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiArCXJldCA9IGRybV9k cF9kcGNkX3dyaXRlYigmaXQ2NTA1LT5hdXgsIG9mZnNldCwgZGF0YWluKTsNCj4gKwlpZiAocmV0 IDwgMCkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkRQQ0Qgd3JpdGUgZmFpbGVkIFsweCVs eF0gcmV0OiAlZCIsIG9mZnNldCwNCj4gKwkJCSAgICAgIHJldCk7DQo+ICsJCXJldHVybiByZXQ7 DQo+ICsJfQ0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGl0NjUwNV9n ZXRfZHBjZChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsIGludCBvZmZzZXQsIHU4ICpkcGNkLCBpbnQg bnVtKQ0KPiArew0KPiArCWludCByZXQ7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUw NS0+Y2xpZW50LT5kZXY7DQo+ICsNCj4gKwlyZXQgPSBkcm1fZHBfZHBjZF9yZWFkKCZpdDY1MDUt PmF1eCwgb2Zmc2V0LCBkcGNkLCBudW0pOw0KPiArDQo+ICsJaWYgKHJldCA8IDApDQo+ICsJCXJl dHVybiByZXQ7DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJyZXQgPSAlZCBE UENEWzB4JXhdID0gMHglKnBoIiwgcmV0LCBvZmZzZXQsDQo+ICsJCQkgICAgIG51bSwgZHBjZCk7 DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2R1 bXAoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCXVuc2lnbmVkIGludCBpLCBqOw0K PiArCXU4IHJlZ3NbMTZdOw0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVu dC0+ZGV2Ow0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8PSAweGZmOyBpICs9IDE2KSB7DQo+ICsJ CWZvciAoaiA9IDA7IGogPCAxNjsgaisrKQ0KPiArCQkJcmVnc1tqXSA9IGl0NjUwNV9yZWFkKGl0 NjUwNSwgaSArIGopOw0KPiArDQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlsweCUw MnhdID0gJTE2cGgiLCBpLCByZWdzKTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBib29s IGl0NjUwNV9nZXRfc2lua19ocGRfc3RhdHVzKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sN Cj4gKwlpbnQgcmVnXzBkOw0KPiArDQo+ICsJcmVnXzBkID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBS RUdfU1lTVEVNX1NUUyk7DQo+ICsNCj4gKwlpZiAocmVnXzBkIDwgMCkNCj4gKwkJcmV0dXJuIGZh bHNlOw0KPiArDQo+ICsJcmV0dXJuICEhKHJlZ18wZCAmIEhQRF9TVFMpOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgaW50IGl0NjUwNV9yZWFkX3dvcmQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LCB1bnNp Z25lZCBpbnQgcmVnKQ0KPiArew0KPiArCWludCB2YWwwLCB2YWwxOw0KPiArDQo+ICsJdmFsMCA9 IGl0NjUwNV9yZWFkKGl0NjUwNSwgcmVnKTsNCj4gKwlpZiAodmFsMCA8IDApDQo+ICsJCXJldHVy biB2YWwwOw0KPiArDQo+ICsJdmFsMSA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgcmVnICsgMSk7DQo+ ICsJaWYgKHZhbDEgPCAwKQ0KPiArCQlyZXR1cm4gdmFsMTsNCj4gKw0KPiArCXJldHVybiAodmFs MSA8PCA4KSB8IHZhbDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9jYWxjX3Zp ZGVvX2luZm8oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCXN0cnVjdCBkZXZpY2Ug KmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiArCWludCBoc3luY19wb2wsIHZzeW5jX3Bv bCwgaW50ZXJsYWNlZDsNCj4gKwlpbnQgaHRvdGFsLCBoZGVzLCBoZGV3LCBoZnBoLCBoc3luY3c7 DQo+ICsJaW50IHZ0b3RhbCwgdmRlcywgdmRldywgdmZwaCwgdnN5bmN3Ow0KPiArCWludCByZGRh dGEsIGksIHBjbGssIHN1bSA9IDA7DQo+ICsNCj4gKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDE1MDAw KTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQkFOS19TRUwsIDB4MDApOw0KPiArCXJk ZGF0YSA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX0lOUFVUX0NUUkwpOw0KPiArCWhzeW5jX3Bv bCA9IHJkZGF0YSAmIElOUFVUX0hTWU5DX1BPTDsNCj4gKwl2c3luY19wb2wgPSAocmRkYXRhICYg SU5QVVRfVlNZTkNfUE9MKSA+PiAyOw0KPiArCWludGVybGFjZWQgPSAocmRkYXRhICYgSU5QVVRf SU5URVJMQUNFRCkgPj4gNDsNCj4gKw0KPiArCWh0b3RhbCA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2 NTA1LCBSRUdfSU5QVVRfSFRPVEFMKSAmIDB4MUZGRjsNCj4gKwloZGVzID0gaXQ2NTA1X3JlYWRf d29yZChpdDY1MDUsIFJFR19JTlBVVF9IQUNUSVZFX1NUQVJUKSAmIDB4MUZGRjsNCj4gKwloZGV3 ID0gaXQ2NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19JTlBVVF9IQUNUSVZFX1dJRFRIKSAmIDB4 MUZGRjsNCj4gKwloZnBoID0gaXQ2NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19JTlBVVF9IRlJP TlRfUE9SQ0gpICYgMHgxRkZGOw0KPiArCWhzeW5jdyA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2NTA1 LCBSRUdfSU5QVVRfSFNZTkNfV0lEVEgpICYgMHgxRkZGOw0KPiArDQo+ICsJdnRvdGFsID0gaXQ2 NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19JTlBVVF9WVE9UQUwpICYgMHhGRkY7DQo+ICsJdmRl cyA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2NTA1LCBSRUdfSU5QVVRfVkFDVElWRV9TVEFSVCkgJiAw eEZGRjsNCj4gKwl2ZGV3ID0gaXQ2NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19JTlBVVF9WQUNU SVZFX1dJRFRIKSAmIDB4RkZGOw0KPiArCXZmcGggPSBpdDY1MDVfcmVhZF93b3JkKGl0NjUwNSwg UkVHX0lOUFVUX1ZGUk9OVF9QT1JDSCkgJiAweEZGRjsNCj4gKwl2c3luY3cgPSBpdDY1MDVfcmVh ZF93b3JkKGl0NjUwNSwgUkVHX0lOUFVUX1ZTWU5DX1dJRFRIKSAmIDB4RkZGOw0KPiArDQo+ICsJ RFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiaHN5bmNfcG9sOiVkLCB2c3luY19wb2w6JWQsIGlu dGVybGFjZWQ6JWQiLA0KPiArCQkJICAgICBoc3luY19wb2wsIHZzeW5jX3BvbCwgaW50ZXJsYWNl ZCk7DQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiaGFjdGl2ZV9zdGFydDolZCwgdmFj dGl2ZV9zdGFydDolZCIsDQo+ICsJCQkgICAgIGhkZXMsIHZkZXMpOw0KPiArDQo+ICsJZm9yIChp ID0gMDsgaSA8IDEwOyBpKyspIHsNCj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RB VEFfQ1RSTDAsIEVOQUJMRV9QQ0xLX0NPVU5URVIsDQo+ICsJCQkJRU5BQkxFX1BDTEtfQ09VTlRF Uik7DQo+ICsJCXVzbGVlcF9yYW5nZSgxMDAwMCwgMTUwMDApOw0KPiArCQlpdDY1MDVfc2V0X2Jp dHMoaXQ2NTA1LCBSRUdfREFUQV9DVFJMMCwgRU5BQkxFX1BDTEtfQ09VTlRFUiwNCj4gKwkJCQkw eDAwKTsNCj4gKwkJcmRkYXRhID0gaXQ2NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19QQ0xLX0NP VU5URVJfVkFMVUUpICYNCj4gKwkJCSAweEZGRjsNCj4gKw0KPiArCQlzdW0gKz0gcmRkYXRhOw0K PiArCX0NCj4gKw0KPiArCWlmIChzdW0gPT0gMCkgew0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZF UihkZXYsICJjYWxjIHZpZGVvIHRpbWluZyBlcnJvciIpOw0KPiArCQlyZXR1cm47DQo+ICsJfQ0K PiArDQo+ICsJc3VtIC89IDEwOw0KPiArCXBjbGsgPSAxMzUwMCAqIDIwNDggLyBzdW07DQo+ICsJ aXQ2NTA1LT52aWRlb19pbmZvLmNsb2NrID0gcGNsazsNCj4gKwlpdDY1MDUtPnZpZGVvX2luZm8u aGRpc3BsYXkgPSBoZGV3Ow0KPiArCWl0NjUwNS0+dmlkZW9faW5mby5oc3luY19zdGFydCA9IGhk ZXcgKyBoZnBoOw0KPiArCWl0NjUwNS0+dmlkZW9faW5mby5oc3luY19lbmQgPSBoZGV3ICsgaGZw aCArIGhzeW5jdzsNCj4gKwlpdDY1MDUtPnZpZGVvX2luZm8uaHRvdGFsID0gaHRvdGFsOw0KPiAr CWl0NjUwNS0+dmlkZW9faW5mby52ZGlzcGxheSA9IHZkZXc7DQo+ICsJaXQ2NTA1LT52aWRlb19p bmZvLnZzeW5jX3N0YXJ0ID0gdmRldyArIHZmcGg7DQo+ICsJaXQ2NTA1LT52aWRlb19pbmZvLnZz eW5jX2VuZCA9IHZkZXcgKyB2ZnBoICsgdnN5bmN3Ow0KPiArCWl0NjUwNS0+dmlkZW9faW5mby52 dG90YWwgPSB2dG90YWw7DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsIERSTV9N T0RFX0ZNVCwNCj4gKwkJCSAgICAgRFJNX01PREVfQVJHKCZpdDY1MDUtPnZpZGVvX2luZm8pKTsN Cj4gK30NCj4gKw0KPiArc3RhdGljIGludCBpdDY1MDVfZHJtX2RwX2xpbmtfcHJvYmUoc3RydWN0 IGRybV9kcF9hdXggKmF1eCwNCj4gKwkJCQkgICAgc3RydWN0IGl0NjUwNV9kcm1fZHBfbGluayAq bGluaykNCj4gK3sNCj4gKwl1OCB2YWx1ZXNbM107DQo+ICsJaW50IGVycjsNCj4gKw0KPiArCW1l bXNldChsaW5rLCAwLCBzaXplb2YoKmxpbmspKTsNCj4gKw0KPiArCWVyciA9IGRybV9kcF9kcGNk X3JlYWQoYXV4LCBEUF9EUENEX1JFViwgdmFsdWVzLCBzaXplb2YodmFsdWVzKSk7DQo+ICsJaWYg KGVyciA8IDApDQo+ICsJCXJldHVybiBlcnI7DQo+ICsNCj4gKwlsaW5rLT5yZXZpc2lvbiA9IHZh bHVlc1swXTsNCj4gKwlsaW5rLT5yYXRlID0gZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKHZh bHVlc1sxXSk7DQo+ICsJbGluay0+bnVtX2xhbmVzID0gdmFsdWVzWzJdICYgRFBfTUFYX0xBTkVf Q09VTlRfTUFTSzsNCj4gKw0KPiArCWlmICh2YWx1ZXNbMl0gJiBEUF9FTkhBTkNFRF9GUkFNRV9D QVApDQo+ICsJCWxpbmstPmNhcGFiaWxpdGllcyA9IDE7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4g K30NCj4gKw0KPiArc3RhdGljIGludCBpdDY1MDVfZHJtX2RwX2xpbmtfcG93ZXJfdXAoc3RydWN0 IGRybV9kcF9hdXggKmF1eCwNCj4gKwkJCQkgICAgICAgc3RydWN0IGl0NjUwNV9kcm1fZHBfbGlu ayAqbGluaykNCj4gK3sNCj4gKwl1OCB2YWx1ZTsNCj4gKwlpbnQgZXJyOw0KPiArDQo+ICsJLyog RFBfU0VUX1BPV0VSIHJlZ2lzdGVyIGlzIG9ubHkgYXZhaWxhYmxlIG9uIERQQ0QgdjEuMSBhbmQg bGF0ZXIgKi8NCj4gKwlpZiAobGluay0+cmV2aXNpb24gPCAweDExKQ0KPiArCQlyZXR1cm4gMDsN Cj4gKw0KPiArCWVyciA9IGRybV9kcF9kcGNkX3JlYWRiKGF1eCwgRFBfU0VUX1BPV0VSLCAmdmFs dWUpOw0KPiArCWlmIChlcnIgPCAwKQ0KPiArCQlyZXR1cm4gZXJyOw0KPiArDQo+ICsJdmFsdWUg Jj0gfkRQX1NFVF9QT1dFUl9NQVNLOw0KPiArCXZhbHVlIHw9IERQX1NFVF9QT1dFUl9EMDsNCj4g Kw0KPiArCWVyciA9IGRybV9kcF9kcGNkX3dyaXRlYihhdXgsIERQX1NFVF9QT1dFUiwgdmFsdWUp Ow0KPiArCWlmIChlcnIgPCAwKQ0KPiArCQlyZXR1cm4gZXJyOw0KPiArDQo+ICsJLyoNCj4gKwkg KiBBY2NvcmRpbmcgdG8gdGhlIERQIDEuMSBzcGVjaWZpY2F0aW9uLCBhICJTaW5rIERldmljZSBt dXN0IGV4aXQgdGhlDQo+ICsJICogcG93ZXIgc2F2aW5nIHN0YXRlIHdpdGhpbiAxIG1zIiAoU2Vj dGlvbiAyLjUuMy4xLCBUYWJsZSA1LTUyLCAiU2luaw0KPiArCSAqIENvbnRyb2wgRmllbGQiIChy ZWdpc3RlciAweDYwMCkuDQo+ICsJICovDQo+ICsJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOw0K PiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9jbGVh cl9pbnQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWl0NjUwNV93cml0ZShpdDY1 MDUsIFJFR19CQU5LX1NFTCwgMHgwMCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5UX1NU QVRVU18wMSwgMHhGRik7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5UX1NUQVRVU18wMiwg MHhGRik7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5UX1NUQVRVU18wMywgMHhGRik7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9pbnRfbWFza19lbmFibGUoc3RydWN0IGl0 NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19CQU5LX1NF TCwgMHgwMCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5UX01BU0tfMDEsIDB4MUYpOw0K PiArCWl0NjUwNV93cml0ZShpdDY1MDUsIElOVF9NQVNLXzAyLCAweDA3KTsNCj4gKwlpdDY1MDVf d3JpdGUoaXQ2NTA1LCBJTlRfTUFTS18wMywgMHhCMCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2 b2lkIGl0NjUwNV9pbnRfbWFza19kaXNhYmxlKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sN Cj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQkFOS19TRUwsIDB4MDApOw0KPiArCWl0NjUw NV93cml0ZShpdDY1MDUsIElOVF9NQVNLXzAxLCAweDAwKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2 NTA1LCBJTlRfTUFTS18wMiwgMHgwMCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5UX01B U0tfMDMsIDB4MDApOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfbGFuZV90ZXJt aW5hdGlvbl9vbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaW50IHJlZ2NmOw0K PiArDQo+ICsJcmVnY2YgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19VU0VSX0RSVl9QUkUpOw0K PiArDQo+ICsJaWYgKHJlZ2NmID09IDB4RjApDQo+ICsJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUs IFJFR19EUlZfTE5fREFUQV9TRUwsIDB4ODAsIDB4MDApOw0KPiArDQo+ICsJaWYgKHJlZ2NmID09 IDB4NzApIHsNCj4gKwkJaWYgKGl0NjUwNS0+bGFuZV9zd2FwKSB7DQo+ICsJCQlzd2l0Y2ggKGl0 NjUwNS0+bGFuZV9jb3VudCkgew0KPiArCQkJY2FzZSAxOg0KPiArCQkJY2FzZSAyOg0KPiArCQkJ CWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EUlZfTE5fREFUQV9TRUwsDQo+ICsJCQkJCQkw eDBDLCAweDA4KTsNCj4gKwkJCQlicmVhazsNCj4gKwkJCWRlZmF1bHQ6DQo+ICsJCQkJaXQ2NTA1 X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RSVl9MTl9EQVRBX1NFTCwNCj4gKwkJCQkJCTB4MEMsIDB4 MEMpOw0KPiArCQkJCWJyZWFrOw0KPiArCQkJfQ0KPiArCQl9IGVsc2Ugew0KPiArCQkJc3dpdGNo IChpdDY1MDUtPmxhbmVfY291bnQpIHsNCj4gKwkJCWNhc2UgMToNCj4gKwkJCWNhc2UgMjoNCj4g KwkJCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfRFJWX0xOX0RBVEFfU0VMLA0KPiArCQkJ CQkJMHgwQywgMHgwNCk7DQo+ICsJCQkJYnJlYWs7DQo+ICsJCQlkZWZhdWx0Og0KPiArCQkJCWl0 NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EUlZfTE5fREFUQV9TRUwsDQo+ICsJCQkJCQkweDBD LCAweDBDKTsNCj4gKwkJCQlicmVhazsNCj4gKwkJCX0NCj4gKwkJfQ0KPiArCX0NCj4gK30NCj4g Kw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2xhbmVfdGVybWluYXRpb25fb2ZmKHN0cnVjdCBpdDY1 MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlpbnQgcmVnY2Y7DQo+ICsNCj4gKwlyZWdjZiA9IGl0NjUw NV9yZWFkKGl0NjUwNSwgUkVHX1VTRVJfRFJWX1BSRSk7DQo+ICsNCj4gKwlpZiAocmVnY2YgPT0g MHhGMCkNCj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RSVl9MTl9EQVRBX1NFTCwg MHg4MCwgMHg4MCk7DQo+ICsNCj4gKwlpZiAocmVnY2YgPT0gMHg3MCkNCj4gKwkJaXQ2NTA1X3Nl dF9iaXRzKGl0NjUwNSwgUkVHX0RSVl9MTl9EQVRBX1NFTCwgMHgwQywgMHgwMCk7DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9sYW5lX3Bvd2VyX29uKHN0cnVjdCBpdDY1MDUgKml0 NjUwNSkNCj4gK3sNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfTElOS19EUlYsIDB4 RjEsDQo+ICsJCQkoaXQ2NTA1LT5sYW5lX3N3YXAgPw0KPiArCQkJCSBHRU5NQVNLKDcsIDggLSBp dDY1MDUtPmxhbmVfY291bnQpIDoNCj4gKwkJCQkgR0VOTUFTSygzICsgaXQ2NTA1LT5sYW5lX2Nv dW50LCA0KSkgfA0KPiArCQkJCTB4MDEpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1 MDVfbGFuZV9wb3dlcl9vZmYoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWl0NjUw NV9zZXRfYml0cyhpdDY1MDUsIFJFR19MSU5LX0RSViwgMHhGMCwgMHgwMCk7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9sYW5lX29mZihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ ICt7DQo+ICsJaXQ2NTA1X2xhbmVfcG93ZXJfb2ZmKGl0NjUwNSk7DQo+ICsJaXQ2NTA1X2xhbmVf dGVybWluYXRpb25fb2ZmKGl0NjUwNSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUw NV9hdXhfdGVybWluYXRpb25fb24oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWlu dCByZWdjZjsNCj4gKw0KPiArCXJlZ2NmID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfVVNFUl9E UlZfUFJFKTsNCj4gKw0KPiArCWlmIChyZWdjZiA9PSAweEYwKQ0KPiArCQlpdDY1MDVfbGFuZV90 ZXJtaW5hdGlvbl9vbihpdDY1MDUpOw0KPiArDQo+ICsJaWYgKHJlZ2NmID09IDB4NzApDQo+ICsJ CWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EUlZfTE5fREFUQV9TRUwsIDB4ODAsIDB4ODAp Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfYXV4X3Bvd2VyX29uKHN0cnVjdCBp dDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfQVVY LCAweDAyLCAweDAyKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2F1eF9vbihz dHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaXQ2NTA1X2F1eF9wb3dlcl9vbihpdDY1 MDUpOw0KPiArCWl0NjUwNV9hdXhfdGVybWluYXRpb25fb24oaXQ2NTA1KTsNCj4gK30NCj4gKw0K PiArc3RhdGljIHZvaWQgaXQ2NTA1X2F1eF9yZXNldChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ ICt7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1JFU0VUX0NUUkwsIEFVWF9SRVNF VCwgQVVYX1JFU0VUKTsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfUkVTRVRfQ1RS TCwgQVVYX1JFU0VULCAweDAwKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X3Jl c2V0X2xvZ2ljKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlyZWdtYXBfd3JpdGUo aXQ2NTA1LT5yZWdtYXAsIFJFR19SRVNFVF9DVFJMLCBBTExfTE9HSUNfUkVTRVQpOw0KPiArCXVz bGVlcF9yYW5nZSgxMDAwLCAxNTAwKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGJvb2wgaXQ2NTA1 X2F1eF9vcF9maW5pc2hlZChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaW50IHJl ZzJiID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfQVVYX0NNRF9SRVEpOw0KPiArDQo+ICsJaWYg KHJlZzJiIDwgMCkNCj4gKwkJcmV0dXJuIGZhbHNlOw0KPiArDQo+ICsJcmV0dXJuIChyZWcyYiAm IEFVWF9CVVNZKSA9PSAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGl0NjUwNV9hdXhfd2Fp dChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaW50IHN0YXR1czsNCj4gKwl1bnNp Z25lZCBsb25nIHRpbWVvdXQ7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xp ZW50LT5kZXY7DQo+ICsNCj4gKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMo QVVYX1dBSVRfVElNRU9VVF9NUykgKyAxOw0KPiArDQo+ICsJd2hpbGUgKCFpdDY1MDVfYXV4X29w X2ZpbmlzaGVkKGl0NjUwNSkpIHsNCj4gKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91 dCkpIHsNCj4gKwkJCURSTV9ERVZfRVJST1IoZGV2LCAiVGltZWQgb3V0IHdhaXRpbmcgQVVYIHRv IGZpbmlzaCIpOw0KPiArCQkJcmV0dXJuIC1FVElNRURPVVQ7DQo+ICsJCX0NCj4gKwkJdXNsZWVw X3JhbmdlKDEwMDAsIDIwMDApOw0KPiArCX0NCj4gKw0KPiArCXN0YXR1cyA9IGl0NjUwNV9yZWFk KGl0NjUwNSwgUkVHX0FVWF9FUlJPUl9TVFMpOw0KPiArCWlmIChzdGF0dXMgPCAwKSB7DQo+ICsJ CURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHJlYWQgQVVYIGNoYW5uZWw6ICVkIiwgc3Rh dHVzKTsNCj4gKwkJcmV0dXJuIHN0YXR1czsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4g K30NCj4gKw0KPiArc3RhdGljIHNzaXplX3QgaXQ2NTA1X2F1eF9vcGVyYXRpb24oc3RydWN0IGl0 NjUwNSAqaXQ2NTA1LA0KPiArCQkJCSAgICBlbnVtIGF1eF9jbWRfdHlwZSBjbWQsDQo+ICsJCQkJ ICAgIHVuc2lnbmVkIGludCBhZGRyZXNzLCB1OCAqYnVmZmVyLA0KPiArCQkJCSAgICBzaXplX3Qg c2l6ZSwgZW51bSBhdXhfY21kX3JlcGx5ICpyZXBseSkNCj4gK3sNCj4gKwlpbnQgaSwgcmV0Ow0K PiArCWJvb2wgYXV4X3dyaXRlX2NoZWNrID0gZmFsc2U7DQo+ICsNCj4gKwlpZiAoIWl0NjUwNV9n ZXRfc2lua19ocGRfc3RhdHVzKGl0NjUwNSkpDQo+ICsJCXJldHVybiAtRUlPOw0KPiArDQo+ICsJ Lyogc2V0IEFVWCB1c2VyIG1vZGUgKi8NCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdf QVVYX0NUUkwsIEFVWF9VU0VSX01PREUsIEFVWF9VU0VSX01PREUpOw0KPiArDQo+ICthdXhfb3Bf c3RhcnQ6DQo+ICsJaWYgKGNtZCA9PSBDTURfQVVYX0kyQ19FRElEX1JFQUQpIHsNCj4gKwkJLyog QVVYIEVESUQgRklGTyBoYXMgbWF4IGxlbmd0aCBvZiBBVVhfRklGT19NQVhfU0laRSBieXRlcy4g Ki8NCj4gKwkJc2l6ZSA9IG1pbl90KHNpemVfdCwgc2l6ZSwgQVVYX0ZJRk9fTUFYX1NJWkUpOw0K PiArCQkvKiBFbmFibGUgQVVYIEZJRk8gcmVhZCBiYWNrIGFuZCBjbGVhciBGSUZPICovDQo+ICsJ CWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19BVVhfQ1RSTCwNCj4gKwkJCQlBVVhfRU5fRklG T19SRUFEIHwgQ0xSX0VESURfRklGTywNCj4gKwkJCQlBVVhfRU5fRklGT19SRUFEIHwgQ0xSX0VE SURfRklGTyk7DQo+ICsNCj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0FVWF9DVFJM LA0KPiArCQkJCUFVWF9FTl9GSUZPX1JFQUQgfCBDTFJfRURJRF9GSUZPLA0KPiArCQkJCUFVWF9F Tl9GSUZPX1JFQUQpOw0KPiArCX0gZWxzZSB7DQo+ICsJCS8qIFRoZSBEUCBBVVggdHJhbnNtaXQg YnVmZmVyIGhhcyA0IGJ5dGVzLiAqLw0KPiArCQlzaXplID0gbWluX3Qoc2l6ZV90LCBzaXplLCA0 KTsNCj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0FVWF9DVFJMLCBBVVhfTk9fU0VH TUVOVF9XUiwNCj4gKwkJCQlBVVhfTk9fU0VHTUVOVF9XUik7DQo+ICsJfQ0KPiArDQo+ICsJLyog U3RhcnQgQWRkcmVzc1s3OjBdICovDQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVWF9B RFJfMF83LCAoYWRkcmVzcyA+PiAwKSAmIDB4RkYpOw0KPiArCS8qIFN0YXJ0IEFkZHJlc3NbMTU6 OF0gKi8NCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVYX0FEUl84XzE1LCAoYWRkcmVz cyA+PiA4KSAmIDB4RkYpOw0KPiArCS8qIFdyaXRlTnVtWzM6MF0rU3RhcnRBZHJbMTk6MTZdICov DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVWF9BRFJfMTZfMTksDQo+ICsJCSAgICAg KChhZGRyZXNzID4+IDE2KSAmIDB4MEYpIHwgKChzaXplIC0gMSkgPDwgNCkpOw0KPiArDQo+ICsJ aWYgKGNtZCA9PSBDTURfQVVYX05BVElWRV9XUklURSkNCj4gKwkJcmVnbWFwX2J1bGtfd3JpdGUo aXQ2NTA1LT5yZWdtYXAsIFJFR19BVVhfT1VUX0RBVEEwLCBidWZmZXIsDQo+ICsJCQkJICBzaXpl KTsNCj4gKw0KPiArCS8qIEF1eCBGaXJlICovDQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVH X0FVWF9DTURfUkVRLCBjbWQpOw0KPiArDQo+ICsJcmV0ID0gaXQ2NTA1X2F1eF93YWl0KGl0NjUw NSk7DQo+ICsJaWYgKHJldCA8IDApDQo+ICsJCWdvdG8gYXV4X29wX2VycjsNCj4gKw0KPiArCXJl dCA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX0FVWF9FUlJPUl9TVFMpOw0KPiArCWlmIChyZXQg PCAwKQ0KPiArCQlnb3RvIGF1eF9vcF9lcnI7DQo+ICsNCj4gKwlzd2l0Y2ggKChyZXQgPj4gNikg JiAweDMpIHsNCj4gKwljYXNlIDA6DQo+ICsJCSpyZXBseSA9IFJFUExZX0FDSzsNCj4gKwkJYnJl YWs7DQo+ICsJY2FzZSAxOg0KPiArCQkqcmVwbHkgPSBSRVBMWV9ERUZFUjsNCj4gKwkJcmV0ID0g LUVBR0FJTjsNCj4gKwkJZ290byBhdXhfb3BfZXJyOw0KPiArCWNhc2UgMjoNCj4gKwkJKnJlcGx5 ID0gUkVQTFlfTkFDSzsNCj4gKwkJcmV0ID0gLUVJTzsNCj4gKwkJZ290byBhdXhfb3BfZXJyOw0K PiArCWNhc2UgMzoNCj4gKwkJcmV0ID0gLUVUSU1FRE9VVDsNCj4gKwkJZ290byBhdXhfb3BfZXJy Ow0KPiArCX0NCj4gKw0KPiArCS8qIFJlYWQgYmFjayBOYXRpdmUgV3JpdGUgZGF0YSAqLw0KPiAr CWlmIChjbWQgPT0gQ01EX0FVWF9OQVRJVkVfV1JJVEUpIHsNCj4gKwkJYXV4X3dyaXRlX2NoZWNr ID0gdHJ1ZTsNCj4gKwkJY21kID0gQ01EX0FVWF9OQVRJVkVfUkVBRDsNCj4gKwkJZ290byBhdXhf b3Bfc3RhcnQ7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKGNtZCA9PSBDTURfQVVYX0kyQ19FRElEX1JF QUQpIHsNCj4gKwkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgew0KPiArCQkJcmV0ID0gaXQ2 NTA1X3JlYWQoaXQ2NTA1LCBSRUdfQVVYX0RBVEFfRklGTyk7DQo+ICsJCQlpZiAocmV0IDwgMCkN Cj4gKwkJCQlnb3RvIGF1eF9vcF9lcnI7DQo+ICsJCQlidWZmZXJbaV0gPSByZXQ7DQo+ICsJCX0N Cj4gKwl9IGVsc2Ugew0KPiArCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7DQo+ICsJCQly ZXQgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19BVVhfREFUQV8wXzcgKyBpKTsNCj4gKwkJCWlm IChyZXQgPCAwKQ0KPiArCQkJCWdvdG8gYXV4X29wX2VycjsNCj4gKw0KPiArCQkJaWYgKGF1eF93 cml0ZV9jaGVjayAmJiBidWZmZXJbc2l6ZSAtIDEgLSBpXSAhPSByZXQpIHsNCj4gKwkJCQlyZXQg PSAtRUlOVkFMOw0KPiArCQkJCWdvdG8gYXV4X29wX2VycjsNCj4gKwkJCX0NCj4gKw0KPiArCQkJ YnVmZmVyW3NpemUgLSAxIC0gaV0gPSByZXQ7DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4gKwlyZXQg PSBpOw0KPiArDQo+ICthdXhfb3BfZXJyOg0KPiArCWlmIChjbWQgPT0gQ01EX0FVWF9JMkNfRURJ RF9SRUFEKSB7DQo+ICsJCS8qIGNsZWFyIEFVWCBGSUZPICovDQo+ICsJCWl0NjUwNV9zZXRfYml0 cyhpdDY1MDUsIFJFR19BVVhfQ1RSTCwNCj4gKwkJCQlBVVhfRU5fRklGT19SRUFEIHwgQ0xSX0VE SURfRklGTywNCj4gKwkJCQlBVVhfRU5fRklGT19SRUFEIHwgQ0xSX0VESURfRklGTyk7DQo+ICsJ CWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19BVVhfQ1RSTCwNCj4gKwkJCQlBVVhfRU5fRklG T19SRUFEIHwgQ0xSX0VESURfRklGTywgMHgwMCk7DQo+ICsJfQ0KPiArDQo+ICsJLyogTGVhdmUg QVVYIHVzZXIgbW9kZSAqLw0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19BVVhfQ1RS TCwgQVVYX1VTRVJfTU9ERSwgMCk7DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgc3NpemVfdCBpdDY1MDVfYXV4X2RvX3RyYW5zZmVyKHN0cnVjdCBpdDY1MDUgKml0 NjUwNSwNCj4gKwkJCQkgICAgICBlbnVtIGF1eF9jbWRfdHlwZSBjbWQsDQo+ICsJCQkJICAgICAg dW5zaWduZWQgaW50IGFkZHJlc3MsIHU4ICpidWZmZXIsDQo+ICsJCQkJICAgICAgc2l6ZV90IHNp emUsIGVudW0gYXV4X2NtZF9yZXBseSAqcmVwbHkpDQo+ICt7DQo+ICsJaW50IGksIHJldF9zaXpl LCByZXQgPSAwLCByZXF1ZXN0X3NpemU7DQo+ICsNCj4gKwltdXRleF9sb2NrKCZpdDY1MDUtPmF1 eF9sb2NrKTsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSA0KSB7DQo+ICsJCXJlcXVl c3Rfc2l6ZSA9IG1pbigoaW50KXNpemUgLSBpLCA0KTsNCj4gKwkJcmV0X3NpemUgPSBpdDY1MDVf YXV4X29wZXJhdGlvbihpdDY1MDUsIGNtZCwgYWRkcmVzcyArIGksDQo+ICsJCQkJCQlidWZmZXIg KyBpLCByZXF1ZXN0X3NpemUsDQo+ICsJCQkJCQlyZXBseSk7DQo+ICsJCWlmIChyZXRfc2l6ZSA8 IDApIHsNCj4gKwkJCXJldCA9IHJldF9zaXplOw0KPiArCQkJZ290byBhdXhfb3BfZXJyOw0KPiAr CQl9DQo+ICsNCj4gKwkJcmV0ICs9IHJldF9zaXplOw0KPiArCX0NCj4gKw0KPiArYXV4X29wX2Vy cjoNCj4gKwltdXRleF91bmxvY2soJml0NjUwNS0+YXV4X2xvY2spOw0KPiArCXJldHVybiByZXQ7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzc2l6ZV90IGl0NjUwNV9hdXhfdHJhbnNmZXIoc3RydWN0 IGRybV9kcF9hdXggKmF1eCwNCj4gKwkJCQkgICBzdHJ1Y3QgZHJtX2RwX2F1eF9tc2cgKm1zZykN Cj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBjb250YWluZXJfb2YoYXV4LCBzdHJ1 Y3QgaXQ2NTA1LCBhdXgpOw0KPiArCXU4IGNtZDsNCj4gKwlib29sIGlzX2kyYyA9ICEobXNnLT5y ZXF1ZXN0ICYgRFBfQVVYX05BVElWRV9XUklURSk7DQo+ICsJaW50IHJldDsNCj4gKwllbnVtIGF1 eF9jbWRfcmVwbHkgcmVwbHk7DQo+ICsNCj4gKwkvKiBJVDY1MDUgZG9lc24ndCBzdXBwb3J0IGFy Yml0cmFyeSBJMkMgcmVhZCAvIHdyaXRlLiAqLw0KPiArCWlmIChpc19pMmMpDQo+ICsJCXJldHVy biAtRUlOVkFMOw0KPiArDQo+ICsJc3dpdGNoIChtc2ctPnJlcXVlc3QpIHsNCj4gKwljYXNlIERQ X0FVWF9OQVRJVkVfUkVBRDoNCj4gKwkJY21kID0gQ01EX0FVWF9OQVRJVkVfUkVBRDsNCj4gKwkJ YnJlYWs7DQo+ICsJY2FzZSBEUF9BVVhfTkFUSVZFX1dSSVRFOg0KPiArCQljbWQgPSBDTURfQVVY X05BVElWRV9XUklURTsNCj4gKwkJYnJlYWs7DQo+ICsJZGVmYXVsdDoNCj4gKwkJcmV0dXJuIC1F SU5WQUw7DQo+ICsJfQ0KPiArDQo+ICsJcmV0ID0gaXQ2NTA1X2F1eF9kb190cmFuc2ZlcihpdDY1 MDUsIGNtZCwgbXNnLT5hZGRyZXNzLCBtc2ctPmJ1ZmZlciwNCj4gKwkJCQkgICAgIG1zZy0+c2l6 ZSwgJnJlcGx5KTsNCj4gKwlpZiAocmV0IDwgMCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiAr CXN3aXRjaCAocmVwbHkpIHsNCj4gKwljYXNlIFJFUExZX0FDSzoNCj4gKwkJbXNnLT5yZXBseSA9 IERQX0FVWF9OQVRJVkVfUkVQTFlfQUNLOw0KPiArCQlicmVhazsNCj4gKwljYXNlIFJFUExZX05B Q0s6DQo+ICsJCW1zZy0+cmVwbHkgPSBEUF9BVVhfTkFUSVZFX1JFUExZX05BQ0s7DQo+ICsJCWJy ZWFrOw0KPiArCWNhc2UgUkVQTFlfREVGRVI6DQo+ICsJCW1zZy0+cmVwbHkgPSBEUF9BVVhfTkFU SVZFX1JFUExZX0RFRkVSOw0KPiArCQlicmVhazsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gcmV0 Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGl0NjUwNV9nZXRfZWRpZF9ibG9jayh2b2lkICpk YXRhLCB1OCAqYnVmLCB1bnNpZ25lZCBpbnQgYmxvY2ssDQo+ICsJCQkJIHNpemVfdCBsZW4pDQo+ ICt7DQo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gZGF0YTsNCj4gKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKwllbnVtIGF1eF9jbWRfcmVwbHkgcmVw bHk7DQo+ICsJaW50IG9mZnNldCwgcmV0LCBhdXhfcmV0cnkgPSAxMDA7DQo+ICsNCj4gKwlpdDY1 MDVfYXV4X3Jlc2V0KGl0NjUwNSk7DQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiYmxv Y2sgbnVtYmVyID0gJWQiLCBibG9jayk7DQo+ICsNCj4gKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNl dCA8IEVESURfTEVOR1RIOykgew0KPiArCQlyZXQgPSBpdDY1MDVfYXV4X2RvX3RyYW5zZmVyKGl0 NjUwNSwgQ01EX0FVWF9JMkNfRURJRF9SRUFELA0KPiArCQkJCQkgICAgIGJsb2NrICogRURJRF9M RU5HVEggKyBvZmZzZXQsDQo+ICsJCQkJCSAgICAgYnVmICsgb2Zmc2V0LCA4LCAmcmVwbHkpOw0K PiArDQo+ICsJCWlmIChyZXQgPCAwICYmIHJldCAhPSAtRUFHQUlOKQ0KPiArCQkJcmV0dXJuIHJl dDsNCj4gKw0KPiArCQlzd2l0Y2ggKHJlcGx5KSB7DQo+ICsJCWNhc2UgUkVQTFlfQUNLOg0KPiAr CQkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiWzB4JTAyeF06ICU4cGgiLCBvZmZzZXQsDQo+ ICsJCQkJCSAgICAgYnVmICsgb2Zmc2V0KTsNCj4gKwkJCW9mZnNldCArPSA4Ow0KPiArCQkJYXV4 X3JldHJ5ID0gMTAwOw0KPiArCQkJYnJlYWs7DQo+ICsJCWNhc2UgUkVQTFlfTkFDSzoNCj4gKwkJ CXJldHVybiAtRUlPOw0KPiArCQljYXNlIFJFUExZX0RFRkVSOg0KPiArCQkJbXNsZWVwKDIwKTsN Cj4gKwkJCWlmICghKC0tYXV4X3JldHJ5KSkNCj4gKwkJCQlyZXR1cm4gLUVJTzsNCj4gKwkJfQ0K PiArCX0NCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1 MDVfdmFyaWFibGVfY29uZmlnKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlpdDY1 MDUtPmxpbmtfcmF0ZV9id19jb2RlID0gSEJSOw0KPiArCWl0NjUwNS0+bGFuZV9jb3VudCA9IE1B WF9MQU5FX0NPVU5UOw0KPiArCWl0NjUwNS0+bGlua19zdGF0ZSA9IExJTktfSURMRTsNCj4gKwlp dDY1MDUtPmhkY3BfZGVzaXJlZCA9IEhEQ1BfREVTSVJFRDsNCj4gKwlpdDY1MDUtPmF1dG9fdHJh aW5fcmV0cnkgPSBBVVRPX1RSQUlOX1JFVFJZOw0KPiArCWl0NjUwNS0+YXVkaW8uc2VsZWN0ID0g QVVESU9fU0VMRUNUOw0KPiArCWl0NjUwNS0+YXVkaW8uc2FtcGxlX3JhdGUgPSBBVURJT19TQU1Q TEVfUkFURTsNCj4gKwlpdDY1MDUtPmF1ZGlvLmNoYW5uZWxfY291bnQgPSBBVURJT19DSEFOTkVM X0NPVU5UOw0KPiArCWl0NjUwNS0+YXVkaW8udHlwZSA9IEFVRElPX1RZUEU7DQo+ICsJaXQ2NTA1 LT5hdWRpby5pMnNfaW5wdXRfZm9ybWF0ID0gSTJTX0lOUFVUX0ZPUk1BVDsNCj4gKwlpdDY1MDUt PmF1ZGlvLmkyc19qdXN0aWZpZWQgPSBJMlNfSlVTVElGSUVEOw0KPiArCWl0NjUwNS0+YXVkaW8u aTJzX2RhdGFfZGVsYXkgPSBJMlNfREFUQV9ERUxBWTsNCj4gKwlpdDY1MDUtPmF1ZGlvLmkyc193 c19jaGFubmVsID0gSTJTX1dTX0NIQU5ORUw7DQo+ICsJaXQ2NTA1LT5hdWRpby5pMnNfZGF0YV9z ZXF1ZW5jZSA9IEkyU19EQVRBX1NFUVVFTkNFOw0KPiArCWl0NjUwNS0+YXVkaW8ud29yZF9sZW5n dGggPSBBVURJT19XT1JEX0xFTkdUSDsNCj4gKwltZW1zZXQoaXQ2NTA1LT5zaGExX2lucHV0LCAw LCBzaXplb2YoaXQ2NTA1LT5zaGExX2lucHV0KSk7DQo+ICsJbWVtc2V0KGl0NjUwNS0+YmtzdnMs IDAsIHNpemVvZihpdDY1MDUtPmJrc3ZzKSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgaXQ2 NTA1X3NlbmRfdmlkZW9faW5mb2ZyYW1lKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwNCj4gKwkJCQkg ICAgICAgc3RydWN0IGhkbWlfYXZpX2luZm9mcmFtZSAqZnJhbWUpDQo+ICt7DQo+ICsJdTggYnVm ZmVyW0hETUlfSU5GT0ZSQU1FX0hFQURFUl9TSVpFICsgSERNSV9BVklfSU5GT0ZSQU1FX1NJWkVd Ow0KPiArCWludCBlcnI7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50 LT5kZXY7DQo+ICsNCj4gKwllcnIgPSBoZG1pX2F2aV9pbmZvZnJhbWVfcGFjayhmcmFtZSwgYnVm ZmVyLCBzaXplb2YoYnVmZmVyKSk7DQo+ICsJaWYgKGVyciA8IDApIHsNCj4gKwkJRFJNX0RFVl9F UlJPUihkZXYsICJGYWlsZWQgdG8gcGFjayBBVkkgaW5mb2ZyYW1lOiAlZCIsIGVycik7DQo+ICsJ CXJldHVybiBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJZXJyID0gaXQ2NTA1X3NldF9iaXRzKGl0NjUw NSwgUkVHX0lORk9GUkFNRV9DVFJMLCBFTl9BVklfUEtULCAweDAwKTsNCj4gKwlpZiAoZXJyKQ0K PiArCQlyZXR1cm4gZXJyOw0KPiArDQo+ICsJZXJyID0gcmVnbWFwX2J1bGtfd3JpdGUoaXQ2NTA1 LT5yZWdtYXAsIFJFR19BVklfSU5GT19EQjEsDQo+ICsJCQkJYnVmZmVyICsgSERNSV9JTkZPRlJB TUVfSEVBREVSX1NJWkUsDQo+ICsJCQkJZnJhbWUtPmxlbmd0aCk7DQo+ICsJaWYgKGVycikNCj4g KwkJcmV0dXJuIGVycjsNCj4gKw0KPiArCWVyciA9IGl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJF R19JTkZPRlJBTUVfQ1RSTCwgRU5fQVZJX1BLVCwNCj4gKwkJCSAgICAgIEVOX0FWSV9QS1QpOw0K PiArCWlmIChlcnIpDQo+ICsJCXJldHVybiBlcnI7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30N Cj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2dldF9leHRjb25fcHJvcGVydHkoc3RydWN0IGl0 NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWludCBlcnI7DQo+ICsJdW5pb24gZXh0Y29uX3Byb3Bl cnR5X3ZhbHVlIHByb3BlcnR5Ow0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNs aWVudC0+ZGV2Ow0KPiArDQo+ICsJaWYgKGl0NjUwNS0+ZXh0Y29uICYmICFpdDY1MDUtPmxhbmVf c3dhcF9kaXNhYmxlZCkgew0KPiArCQllcnIgPSBleHRjb25fZ2V0X3Byb3BlcnR5KGl0NjUwNS0+ ZXh0Y29uLCBFWFRDT05fRElTUF9EUCwNCj4gKwkJCQkJICBFWFRDT05fUFJPUF9VU0JfVFlQRUNf UE9MQVJJVFksDQo+ICsJCQkJCSAgJnByb3BlcnR5KTsNCj4gKwkJaWYgKGVycikgew0KPiArCQkJ RFJNX0RFVl9FUlJPUihkZXYsICJnZXQgcHJvcGVydHkgZmFpbCEiKTsNCj4gKwkJCXJldHVybjsN Cj4gKwkJfQ0KPiArCQlpdDY1MDUtPmxhbmVfc3dhcCA9IHByb3BlcnR5LmludHZhbDsNCj4gKwl9 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9jbGtfcGhhc2VfYWRqdXN0bWVudChz dHJ1Y3QgaXQ2NTA1ICppdDY1MDUsDQo+ICsJCQkJCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICptb2RlKQ0KPiArew0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19DTEtfQ1RS TDAsIE1fUENMS19ERUxBWSwNCj4gKwkJbW9kZS0+Y2xvY2sgPCBBREpVU1RfUEhBU0VfVEhSRVNI T0xEID8gUElYRUxfQ0xLX0RFTEFZIDogMCk7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwg UkVHX0RBVEFfQ1RSTDAsIFZJREVPX0xBVENIX0VER0UsDQo+ICsJCQlQSVhFTF9DTEtfSU5WRVJT RSA8PCA0KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2luaXQoc3RydWN0IGl0 NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19CQU5LX1NF TCwgMHgwMCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVWF9PUFQsIEFVWF9BVVRP X1JTVCB8IEFVWF9GSVhfRlJFUSk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVWF9D VFJMLCBBVVhfTk9fU0VHTUVOVF9XUik7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0hE Q1BfQ1RSTDIsIEhEQ1BfQU5fU0VMIHwgSERDUF9IV19IUERJUlFfQUNUKTsNCj4gKwlpdDY1MDVf d3JpdGUoaXQ2NTA1LCBSRUdfVklEX0JVU19DVFJMMCwgSU5fRERSIHwgRERSX0NEKTsNCj4gKwlp dDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfVklEX0JVU19DVFJMMSwgMHgwMSk7DQo+ICsJaXQ2NTA1 X3dyaXRlKGl0NjUwNSwgUkVHX0FVRElPX0NUUkwwLCBBVURJT18xNkJfQk9VTkQpOw0KPiArDQo+ ICsJLyogY2hpcCBpbnRlcm5hbCBzZXR0aW5nLCBkb24ndCBtb2RpZnkgKi8NCj4gKwlpdDY1MDVf d3JpdGUoaXQ2NTA1LCBSRUdfSFBEX0lSUV9USU1FLCAweEY1KTsNCj4gKwlpdDY1MDVfd3JpdGUo aXQ2NTA1LCBSRUdfQVVYX0RFQlVHX01PREUsIDB4NEQpOw0KPiArCWl0NjUwNV93cml0ZShpdDY1 MDUsIFJFR19BVVhfT1BUMiwgMHgxNyk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0hE Q1BfT1BULCAweDYwKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfREFUQV9NVVRFX0NU UkwsDQo+ICsJCSAgICAgRU5fVklEX01VVEUgfCBFTl9BVURfTVVURSB8IEVOQUJMRV9BVVRPX1ZJ REVPX0ZJRk9fUkVTRVQpOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19USU1FX1NUTVBf Q1RSTCwNCj4gKwkJICAgICBFTl9TU0NfR0FUIHwgRU5fRU5IQU5DRV9WSURfU1RNUCB8IEVOX0VO SEFOQ0VfQVVEX1NUTVApOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19JTkZPRlJBTUVf Q1RSTCwgMHgwMCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0JBTktfU0VMLCAweDAx KTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfRFJWXzBfREJfODAwX01WLA0KPiArCQkg ICAgIGFmZV9zZXR0aW5nX3RhYmxlW2l0NjUwNS0+YWZlX3NldHRpbmddWzBdKTsNCj4gKwlpdDY1 MDVfd3JpdGUoaXQ2NTA1LCBSRUdfUFJFXzBfREJfODAwX01WLA0KPiArCQkgICAgIGFmZV9zZXR0 aW5nX3RhYmxlW2l0NjUwNS0+YWZlX3NldHRpbmddWzFdKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2 NTA1LCBSRUdfUFJFXzNQNV9EQl84MDBfTVYsDQo+ICsJCSAgICAgYWZlX3NldHRpbmdfdGFibGVb aXQ2NTA1LT5hZmVfc2V0dGluZ11bMl0pOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19T U0NfQ1RSTDAsIDB4OUUpOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19TU0NfQ1RSTDEs IDB4MUMpOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19TU0NfQ1RSTDIsIDB4NDIpOw0K PiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19CQU5LX1NFTCwgMHgwMCk7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkIGl0NjUwNV92aWRlb19kaXNhYmxlKHN0cnVjdCBpdDY1MDUgKml0NjUw NSkNCj4gK3sNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfREFUQV9NVVRFX0NUUkws IEVOX1ZJRF9NVVRFLCBFTl9WSURfTVVURSk7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwg UkVHX0lORk9GUkFNRV9DVFJMLCBFTl9WSURfQ1RSTF9QS1QsIDB4MDApOw0KPiArCWl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCBWSURFT19SRVNFVCwgVklERU9fUkVTRVQp Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfdmlkZW9fcmVzZXQoc3RydWN0IGl0 NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EQVRB X01VVEVfQ1RSTCwgRU5fVklEX01VVEUsIEVOX1ZJRF9NVVRFKTsNCj4gKwlpdDY1MDVfc2V0X2Jp dHMoaXQ2NTA1LCBSRUdfSU5GT0ZSQU1FX0NUUkwsIEVOX1ZJRF9DVFJMX1BLVCwgMHgwMCk7DQo+ ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1JFU0VUX0NUUkwsIFZJREVPX1JFU0VULCBW SURFT19SRVNFVCk7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHXzUwMV9GSUZPX0NU UkwsIFJTVF81MDFfRklGTywgUlNUXzUwMV9GSUZPKTsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2 NTA1LCBSRUdfNTAxX0ZJRk9fQ1RSTCwgUlNUXzUwMV9GSUZPLCAweDAwKTsNCj4gKwlpdDY1MDVf c2V0X2JpdHMoaXQ2NTA1LCBSRUdfUkVTRVRfQ1RSTCwgVklERU9fUkVTRVQsIDB4MDApOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfdXBkYXRlX3ZpZGVvX3BhcmFtZXRlcihzdHJ1 Y3QgaXQ2NTA1ICppdDY1MDUsDQo+ICsJCQkJCSAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKm1vZGUpDQo+ICt7DQo+ICsJaXQ2NTA1X2Nsa19waGFzZV9hZGp1c3RtZW50KGl0NjUwNSwg bW9kZSk7DQo+ICsJaXQ2NTA1X3ZpZGVvX2Rpc2FibGUoaXQ2NTA1KTsNCj4gK30NCj4gKw0KPiAr c3RhdGljIGJvb2wgaXQ2NTA1X2F1ZGlvX2lucHV0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4g K3sNCj4gKwlpbnQgcmVnMDUsIHJlZ2JlOw0KPiArDQo+ICsJcmVnMDUgPSBpdDY1MDVfcmVhZChp dDY1MDUsIFJFR19SRVNFVF9DVFJMKTsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdf UkVTRVRfQ1RSTCwgQVVESU9fUkVTRVQsIDB4MDApOw0KPiArCXVzbGVlcF9yYW5nZSgzMDAwLCA0 MDAwKTsNCj4gKwlyZWdiZSA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX0FVRElPX0lOUFVUX0ZS RVEpOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCByZWcwNSk7DQo+ ICsNCj4gKwlyZXR1cm4gcmVnYmUgIT0gMHhGRjsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQg aXQ2NTA1X3NldHVwX2F1ZGlvX2NoYW5uZWxfc3RhdHVzKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkN Cj4gK3sNCj4gKwllbnVtIGl0NjUwNV9hdWRpb19zYW1wbGVfcmF0ZSBzYW1wbGVfcmF0ZSA9IGl0 NjUwNS0+YXVkaW8uc2FtcGxlX3JhdGU7DQo+ICsJdTggYXVkaW9fd29yZF9sZW5ndGhfbWFwW10g PSB7IDB4MDIsIDB4MDQsIDB4MDMsIDB4MEIgfTsNCj4gKw0KPiArCS8qIENoYW5uZWwgU3RhdHVz ICovDQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0lFQzk1OF9TVFMwLCBpdDY1MDUtPmF1 ZGlvLnR5cGUgPDwgMSk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0lFQzk1OF9TVFMx LCAweDAwKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfSUVDOTU4X1NUUzIsIDB4MDAp Ow0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19JRUM5NThfU1RTMywgc2FtcGxlX3JhdGUp Ow0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19JRUM5NThfU1RTNCwgKH5zYW1wbGVfcmF0 ZSA8PCA0KSB8DQo+ICsJCSAgICAgYXVkaW9fd29yZF9sZW5ndGhfbWFwW2l0NjUwNS0+YXVkaW8u d29yZF9sZW5ndGhdKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X3NldHVwX2F1 ZGlvX2Zvcm1hdChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJLyogSTJTIE1PREUg Ki8NCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVESU9fRk1ULA0KPiArCQkgICAgIChp dDY1MDUtPmF1ZGlvLndvcmRfbGVuZ3RoIDw8IDUpIHwNCj4gKwkJICAgICAoaXQ2NTA1LT5hdWRp by5pMnNfZGF0YV9zZXF1ZW5jZSA8PCA0KSB8DQo+ICsJCSAgICAgKGl0NjUwNS0+YXVkaW8uaTJz X3dzX2NoYW5uZWwgPDwgMykgfA0KPiArCQkgICAgIChpdDY1MDUtPmF1ZGlvLmkyc19kYXRhX2Rl bGF5IDw8IDIpIHwNCj4gKwkJICAgICAoaXQ2NTA1LT5hdWRpby5pMnNfanVzdGlmaWVkIDw8IDEp IHwNCj4gKwkJICAgICBpdDY1MDUtPmF1ZGlvLmkyc19pbnB1dF9mb3JtYXQpOw0KPiArCWlmIChp dDY1MDUtPmF1ZGlvLnNlbGVjdCA9PSBTUERJRikgew0KPiArCQlpdDY1MDVfd3JpdGUoaXQ2NTA1 LCBSRUdfQVVESU9fRklGT19TRUwsIDB4MDApOw0KPiArCQkvKiAweDMwID0gMTI4KkZTICovDQo+ ICsJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19BVVhfT1BULCAweEYwLCAweDMwKTsNCj4g Kwl9IGVsc2Ugew0KPiArCQlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVESU9fRklGT19TRUws IDB4RTQpOw0KPiArCX0NCj4gKw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURJT19D VFJMMCwgMHgyMCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRElPX0NUUkwxLCAw eDAwKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2VuYWJsZV9hdWRpb19zb3Vy Y2Uoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCXVuc2lnbmVkIGludCBhdWRpb19z b3VyY2VfY291bnQ7DQo+ICsNCj4gKwlhdWRpb19zb3VyY2VfY291bnQgPSBCSVQoRElWX1JPVU5E X1VQKGl0NjUwNS0+YXVkaW8uY2hhbm5lbF9jb3VudCwgMikpDQo+ICsJCQkJIC0gMTsNCj4gKw0K PiArCWF1ZGlvX3NvdXJjZV9jb3VudCB8PSBpdDY1MDUtPmF1ZGlvLnNlbGVjdCA8PCA0Ow0KPiAr DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRElPX1NSQ19DVFJMLCBhdWRpb19zb3Vy Y2VfY291bnQpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfZW5hYmxlX2F1ZGlv X2luZm9mcmFtZShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJc3RydWN0IGRldmlj ZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJdTggYXVkaW9faW5mb19jYVtdID0g eyAweDAwLCAweDAwLCAweDAxLCAweDAzLCAweDA3LCAweDBCLCAweDBGLCAweDFGIH07DQo+ICsN Cj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJpbmZvZnJhbWUgY2hhbm5lbF9hbGxvY2F0 aW9uOjB4JTAyeCIsDQo+ICsJCQkgICAgIGF1ZGlvX2luZm9fY2FbaXQ2NTA1LT5hdWRpby5jaGFu bmVsX2NvdW50IC0gMV0pOw0KPiArDQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRF9J TkZPRlJBTV9EQjEsIGl0NjUwNS0+YXVkaW8uY2hhbm5lbF9jb3VudA0KPiArCQkgICAgIC0gMSk7 DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRF9JTkZPRlJBTV9EQjIsIDB4MDApOw0K PiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURfSU5GT0ZSQU1fREIzLA0KPiArCQkgICAg IGF1ZGlvX2luZm9fY2FbaXQ2NTA1LT5hdWRpby5jaGFubmVsX2NvdW50IC0gMV0pOw0KPiArCWl0 NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURfSU5GT0ZSQU1fREI0LCAweDAwKTsNCj4gKwlpdDY1 MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVEX0lORk9GUkFNX1NVTSwgMHgwMCk7DQo+ICsNCj4gKwkv KiBFbmFibGUgQXVkaW8gSW5mb0ZyYW1lICovDQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwg UkVHX0lORk9GUkFNRV9DVFJMLCBFTl9BVURfQ1RSTF9QS1QsDQo+ICsJCQlFTl9BVURfQ1RSTF9Q S1QpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfZGlzYWJsZV9hdWRpbyhzdHJ1 Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVH X0RBVEFfTVVURV9DVFJMLCBFTl9BVURfTVVURSwgRU5fQVVEX01VVEUpOw0KPiArCWl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19BVURJT19TUkNfQ1RSTCwgTV9BVURJT19JMlNfRU4sIDB4MDAp Ow0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19JTkZPRlJBTUVfQ1RSTCwgRU5fQVVE X0NUUkxfUEtULCAweDAwKTsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfUkVTRVRf Q1RSTCwgQVVESU9fUkVTRVQsIEFVRElPX1JFU0VUKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZv aWQgaXQ2NTA1X2VuYWJsZV9hdWRpbyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJ c3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJaW50IHJlZ2Jl Ow0KPiArDQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAic3RhcnQiKTsNCj4gKwlpdDY1 MDVfZGlzYWJsZV9hdWRpbyhpdDY1MDUpOw0KPiArDQo+ICsJaXQ2NTA1X3NldHVwX2F1ZGlvX2No YW5uZWxfc3RhdHVzKGl0NjUwNSk7DQo+ICsJaXQ2NTA1X3NldHVwX2F1ZGlvX2Zvcm1hdChpdDY1 MDUpOw0KPiArCWl0NjUwNV9lbmFibGVfYXVkaW9fc291cmNlKGl0NjUwNSk7DQo+ICsJaXQ2NTA1 X2VuYWJsZV9hdWRpb19pbmZvZnJhbWUoaXQ2NTA1KTsNCj4gKw0KPiArCWl0NjUwNV93cml0ZShp dDY1MDUsIFJFR19BVURJT19OXzBfNywgMHgwMCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwg UkVHX0FVRElPX05fOF8xNSwgMHg4MCk7DQo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FV RElPX05fMTZfMjMsIDB4MDApOw0KPiArDQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVH X0FVRElPX1NSQ19DVFJMLCBBVURJT19GSUZPX1JFU0VULA0KPiArCQkJQVVESU9fRklGT19SRVNF VCk7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0FVRElPX1NSQ19DVFJMLCBBVURJ T19GSUZPX1JFU0VULCAweDAwKTsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfUkVT RVRfQ1RSTCwgQVVESU9fUkVTRVQsIDB4MDApOw0KPiArCXJlZ2JlID0gaXQ2NTA1X3JlYWQoaXQ2 NTA1LCBSRUdfQVVESU9fSU5QVVRfRlJFUSk7DQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2 LCAicmVnYmU6MHglMDJ4IGF1ZGlvIGlucHV0IGZzOiAlZC4lZCBrSHoiLA0KPiArCQkJICAgICBy ZWdiZSwgNjc1MCAvIHJlZ2JlLCAoNjc1MCAlIHJlZ2JlKSAqIDEwIC8gcmVnYmUpOw0KPiArCWl0 NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EQVRBX01VVEVfQ1RSTCwgRU5fQVVEX01VVEUsIDB4 MDApOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBpdDY1MDVfdXNlX3N0ZXBfdHJhaW5fY2hl Y2soc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWlmIChpdDY1MDUtPmxpbmsucmV2 aXNpb24gPj0gMHgxMikNCj4gKwkJcmV0dXJuIGl0NjUwNS0+ZHBjZFtEUF9UUkFJTklOR19BVVhf UkRfSU5URVJWQUxdID49IDB4MDE7DQo+ICsNCj4gKwlyZXR1cm4gdHJ1ZTsNCj4gK30NCj4gKw0K PiArc3RhdGljIHZvaWQgaXQ2NTA1X3BhcnNlX2xpbmtfY2FwYWJpbGl0aWVzKHN0cnVjdCBpdDY1 MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGll bnQtPmRldjsNCj4gKwlzdHJ1Y3QgaXQ2NTA1X2RybV9kcF9saW5rICpsaW5rID0gJml0NjUwNS0+ bGluazsNCj4gKwlpbnQgYmNhcHM7DQo+ICsNCj4gKwlpZiAoaXQ2NTA1LT5kcGNkWzBdID09IDAp IHsNCj4gKwkJaXQ2NTA1X2F1eF9vbihpdDY1MDUpOw0KPiArCQlpdDY1MDVfZ2V0X2RwY2QoaXQ2 NTA1LCBEUF9EUENEX1JFViwgaXQ2NTA1LT5kcGNkLA0KPiArCQkJCUFSUkFZX1NJWkUoaXQ2NTA1 LT5kcGNkKSk7DQo+ICsJfQ0KPiArDQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiRFBD RCBSZXYuOiAlZC4lZCIsDQo+ICsJCQkgICAgIGxpbmstPnJldmlzaW9uID4+IDQsIGxpbmstPnJl dmlzaW9uICYgMHgwRik7DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJTaW5r IG1heCBsaW5rIHJhdGU6ICVkLiUwMmQgR2JwcyBwZXIgbGFuZSIsDQo+ICsJCQkgICAgIGxpbmst PnJhdGUgLyAxMDAwMDAsIGxpbmstPnJhdGUgLyAxMDAwICUgMTAwKTsNCj4gKw0KPiArCWl0NjUw NS0+bGlua19yYXRlX2J3X2NvZGUgPSBkcm1fZHBfbGlua19yYXRlX3RvX2J3X2NvZGUobGluay0+ cmF0ZSk7DQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAibGluayByYXRlIGJ3IGNvZGU6 MHglMDJ4IiwNCj4gKwkJCSAgICAgaXQ2NTA1LT5saW5rX3JhdGVfYndfY29kZSk7DQo+ICsJaXQ2 NTA1LT5saW5rX3JhdGVfYndfY29kZSA9IG1pbigoaW50KWl0NjUwNS0+bGlua19yYXRlX2J3X2Nv ZGUsDQo+ICsJCQkJCU1BWF9MSU5LX1JBVEUpOw0KPiArDQo+ICsJaXQ2NTA1LT5sYW5lX2NvdW50 ID0gbGluay0+bnVtX2xhbmVzOw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlNpbmsg c3VwcG9ydCAlZCBsYW5lcyB0cmFpbmluZyIsDQo+ICsJCQkgICAgIGl0NjUwNS0+bGFuZV9jb3Vu dCk7DQo+ICsJaXQ2NTA1LT5sYW5lX2NvdW50ID0gbWluKChpbnQpaXQ2NTA1LT5sYW5lX2NvdW50 LCBNQVhfTEFORV9DT1VOVCk7DQo+ICsNCj4gKwlpdDY1MDUtPmJyYW5jaF9kZXZpY2UgPSBkcm1f ZHBfaXNfYnJhbmNoKGl0NjUwNS0+ZHBjZCk7DQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2 LCAiU2luayAlc2JyYW5jaCBkZXZpY2UiLA0KPiArCQkJICAgICBpdDY1MDUtPmJyYW5jaF9kZXZp Y2UgPyAiIiA6ICJOb3QgIik7DQo+ICsNCj4gKwlpdDY1MDUtPmVuYWJsZV9lbmhhbmNlZF9mcmFt ZSA9ICEhbGluay0+Y2FwYWJpbGl0aWVzOw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwg IlNpbmsgJXNTdXBwb3J0IEVuaGFuY2VkIEZyYW1pbmciLA0KPiArCQkJICAgICBpdDY1MDUtPmVu YWJsZV9lbmhhbmNlZF9mcmFtZSA/ICIiIDogIk5vdCAiKTsNCj4gKw0KPiArCWl0NjUwNS0+ZW5h YmxlX3NzYyA9ICEhKGl0NjUwNS0+ZHBjZFtEUF9NQVhfRE9XTlNQUkVBRF0gJg0KPiArCQkJCURQ X01BWF9ET1dOU1BSRUFEXzBfNSk7DQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiTWF4 aW11bSBEb3duLVNwcmVhZDogJXMsICVzc3VwcG9ydCBTU0MhIiwNCj4gKwkJCSAgICAgaXQ2NTA1 LT5lbmFibGVfc3NjID8gIjAuNSIgOiAiMCIsDQo+ICsJCQkgICAgIGl0NjUwNS0+ZW5hYmxlX3Nz YyA/ICIiIDogIk5vdCAiKTsNCj4gKw0KPiArCWl0NjUwNS0+c3RlcF90cmFpbiA9IGl0NjUwNV91 c2Vfc3RlcF90cmFpbl9jaGVjayhpdDY1MDUpOw0KPiArCWlmIChpdDY1MDUtPnN0ZXBfdHJhaW4p DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImF1dG8gdHJhaW4gZmFpbCwgd2lsbCBz dGVwIHRyYWluIik7DQo+ICsNCj4gKwliY2FwcyA9IGl0NjUwNV9kcGNkX3JlYWQoaXQ2NTA1LCBE UF9BVVhfSERDUF9CQ0FQUyk7DQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiYmNhcHM6 MHglMDJ4IiwgYmNhcHMpOw0KPiArCWlmIChiY2FwcyAmIERQX0JDQVBTX0hEQ1BfQ0FQQUJMRSkg ew0KPiArCQlpdDY1MDUtPmlzX3JlcGVhdGVyID0gISEoYmNhcHMgJiBEUF9CQ0FQU19SRVBFQVRF Ul9QUkVTRU5UKTsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiU3VwcG9ydCBIRENQ ISBEb3duc3RyZWFtIGlzICVzISIsDQo+ICsJCQkJICAgICBpdDY1MDUtPmlzX3JlcGVhdGVyID8g InJlcGVhdGVyIiA6DQo+ICsJCQkJICAgICAicmVjZWl2ZXIiKTsNCj4gKwl9IGVsc2Ugew0KPiAr CQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJTaW5rIG5vdCBzdXBwb3J0IEhEQ1AhIik7DQo+ ICsJCWl0NjUwNS0+aGRjcF9kZXNpcmVkID0gZmFsc2U7DQo+ICsJfQ0KPiArCURSTV9ERVZfREVC VUdfRFJJVkVSKGRldiwgIkhEQ1AgJXMiLA0KPiArCQkJICAgICBpdDY1MDUtPmhkY3BfZGVzaXJl ZCA/ICJkZXNpcmVkIiA6ICJ1bmRlc2lyZWQiKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQg aXQ2NTA1X3NldHVwX3NzYyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaXQ2NTA1 X3NldF9iaXRzKGl0NjUwNSwgUkVHX1RSQUlOX0NUUkwwLCBTUFJFQURfQU1QXzUsDQo+ICsJCQlp dDY1MDUtPmVuYWJsZV9zc2MgPyBTUFJFQURfQU1QXzUgOiAweDAwKTsNCj4gKwlpZiAoaXQ2NTA1 LT5lbmFibGVfc3NjKSB7DQo+ICsJCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19CQU5LX1NFTCwg MHgwMSk7DQo+ICsJCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19TU0NfQ1RSTDAsIDB4OUUpOw0K PiArCQlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfU1NDX0NUUkwxLCAweDFDKTsNCj4gKwkJaXQ2 NTA1X3dyaXRlKGl0NjUwNSwgUkVHX1NTQ19DVFJMMiwgMHg0Mik7DQo+ICsJCWl0NjUwNV93cml0 ZShpdDY1MDUsIFJFR19CQU5LX1NFTCwgMHgwMCk7DQo+ICsJCWl0NjUwNV93cml0ZShpdDY1MDUs IFJFR19TUF9DVFJMMCwgMHgwNyk7DQo+ICsJCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19JUF9D VFJMMSwgMHgyOSk7DQo+ICsJCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19JUF9DVFJMMiwgMHgw Myk7DQo+ICsJCS8qIFN0YW1wIEludGVycnVwdCBTdGVwICovDQo+ICsJCWl0NjUwNV9zZXRfYml0 cyhpdDY1MDUsIFJFR19USU1FX1NUTVBfQ1RSTCwgTV9TVEFNUF9TVEVQLA0KPiArCQkJCTB4MTAp Ow0KPiArCQlpdDY1MDVfZHBjZF93cml0ZShpdDY1MDUsIERQX0RPV05TUFJFQURfQ1RSTCwNCj4g KwkJCQkgIERQX1NQUkVBRF9BTVBfMF81KTsNCj4gKwl9IGVsc2Ugew0KPiArCQlpdDY1MDVfZHBj ZF93cml0ZShpdDY1MDUsIERQX0RPV05TUFJFQURfQ1RSTCwgMHgwMCk7DQo+ICsJCWl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19USU1FX1NUTVBfQ1RSTCwgTV9TVEFNUF9TVEVQLA0KPiArCQkJ CTB4MDApOw0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkIGl0NjUwNV9s aW5rX3JhdGVfc2V0dXAoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19UUkFJTl9DVFJMMCwgRk9SQ0VfTEJSLA0KPiArCQkJKGl0NjUw NS0+bGlua19yYXRlX2J3X2NvZGUgPT0gUkJSKSA/IEZPUkNFX0xCUiA6IDB4MDApOw0KPiArCWl0 NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19MSU5LX0RSViwgRFJWX0hTLA0KPiArCQkJKGl0NjUw NS0+bGlua19yYXRlX2J3X2NvZGUgPT0gUkJSKSA/IDB4MDAgOiBEUlZfSFMpOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfbGFuZV9jb3VudF9zZXR1cChzdHJ1Y3QgaXQ2NTA1ICpp dDY1MDUpDQo+ICt7DQo+ICsJaXQ2NTA1X2dldF9leHRjb25fcHJvcGVydHkoaXQ2NTA1KTsNCj4g KwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfVFJBSU5fQ1RSTDAsIExBTkVfU1dBUCwNCj4g KwkJCWl0NjUwNS0+bGFuZV9zd2FwID8gTEFORV9TV0FQIDogMHgwMCk7DQo+ICsJaXQ2NTA1X3Nl dF9iaXRzKGl0NjUwNSwgUkVHX1RSQUlOX0NUUkwwLCBMQU5FX0NPVU5UX01BU0ssDQo+ICsJCQko aXQ2NTA1LT5sYW5lX2NvdW50IC0gMSkgPDwgMSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lk IGl0NjUwNV9saW5rX3RyYWluaW5nX3NldHVwKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sN Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiAr CWlmIChpdDY1MDUtPmVuYWJsZV9lbmhhbmNlZF9mcmFtZSkNCj4gKwkJaXQ2NTA1X3NldF9iaXRz KGl0NjUwNSwgUkVHX0RBVEFfTVVURV9DVFJMLA0KPiArCQkJCUVOQUJMRV9FTkhBTkNFRF9GUkFN RSwgRU5BQkxFX0VOSEFOQ0VEX0ZSQU1FKTsNCj4gKw0KPiArCWl0NjUwNV9saW5rX3JhdGVfc2V0 dXAoaXQ2NTA1KTsNCj4gKwlpdDY1MDVfbGFuZV9jb3VudF9zZXR1cChpdDY1MDUpOw0KPiArCWl0 NjUwNV9zZXR1cF9zc2MoaXQ2NTA1KTsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsDQo+ ICsJCQkgICAgICIlcywgJWQgbGFuZXMsICVzYWJsZSBzc2MsICVzYWJsZSBlbmhhbmNlZCBmcmFt ZSIsDQo+ICsJCQkgICAgIGl0NjUwNS0+bGlua19yYXRlX2J3X2NvZGUgIT0gUkJSID8gIkhCUiIg OiAiUkJSIiwNCj4gKwkJCSAgICAgaXQ2NTA1LT5sYW5lX2NvdW50LA0KPiArCQkJICAgICBpdDY1 MDUtPmVuYWJsZV9zc2MgPyAiZW4iIDogImRpcyIsDQo+ICsJCQkgICAgIGl0NjUwNS0+ZW5hYmxl X2VuaGFuY2VkX2ZyYW1lID8gImVuIiA6ICJkaXMiKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGJv b2wgaXQ2NTA1X2xpbmtfc3RhcnRfYXV0b190cmFpbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ ICt7DQo+ICsJaW50IHRpbWVvdXQgPSA1MDAsIGxpbmtfdHJhaW5pbmdfc3RhdGU7DQo+ICsJYm9v bCBzdGF0ZSA9IGZhbHNlOw0KPiArDQo+ICsJbXV0ZXhfbG9jaygmaXQ2NTA1LT5hdXhfbG9jayk7 DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1RSQUlOX0NUUkwwLA0KPiArCQkJCUZP UkNFX0NSX0RPTkUgfCBGT1JDRV9FUV9ET05FLCAweDAwKTsNCj4gKwlpdDY1MDVfd3JpdGUoaXQ2 NTA1LCBSRUdfVFJBSU5fQ1RSTDEsIEZPUkNFX1JFVFJBSU4pOw0KPiArCWl0NjUwNV93cml0ZShp dDY1MDUsIFJFR19UUkFJTl9DVFJMMSwgQVVUT19UUkFJTik7DQo+ICsNCj4gKwl3aGlsZSAodGlt ZW91dCA+IDApIHsNCj4gKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOw0KPiArCQlsaW5rX3Ry YWluaW5nX3N0YXRlID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfTElOS19UUkFJTl9TVFMpOw0K PiArDQo+ICsJCWlmICgobGlua190cmFpbmluZ19zdGF0ZSA+IDApICYmDQo+ICsJCSAgICAobGlu a190cmFpbmluZ19zdGF0ZSAmIExJTktfU1RBVEVfTk9SUCkpIHsNCj4gKwkJCXN0YXRlID0gdHJ1 ZTsNCj4gKwkJCWdvdG8gdW5sb2NrOw0KPiArCQl9DQo+ICsNCj4gKwkJdGltZW91dC0tOw0KPiAr CX0NCj4gK3VubG9jazoNCj4gKwltdXRleF91bmxvY2soJml0NjUwNS0+YXV4X2xvY2spOw0KPiAr DQo+ICsJcmV0dXJuIHN0YXRlOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGl0NjUwNV9kcm1f ZHBfbGlua19jb25maWd1cmUoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCXU4IHZh bHVlc1syXTsNCj4gKwlpbnQgZXJyOw0KPiArCXN0cnVjdCBkcm1fZHBfYXV4ICphdXggPSAmaXQ2 NTA1LT5hdXg7DQo+ICsNCj4gKwl2YWx1ZXNbMF0gPSBpdDY1MDUtPmxpbmtfcmF0ZV9id19jb2Rl Ow0KPiArCXZhbHVlc1sxXSA9IGl0NjUwNS0+bGFuZV9jb3VudDsNCj4gKw0KPiArCWlmIChpdDY1 MDUtPmVuYWJsZV9lbmhhbmNlZF9mcmFtZSkNCj4gKwkJdmFsdWVzWzFdIHw9IERQX0xBTkVfQ09V TlRfRU5IQU5DRURfRlJBTUVfRU47DQo+ICsNCj4gKwllcnIgPSBkcm1fZHBfZHBjZF93cml0ZShh dXgsIERQX0xJTktfQldfU0VULCB2YWx1ZXMsIHNpemVvZih2YWx1ZXMpKTsNCj4gKwlpZiAoZXJy IDwgMCkNCj4gKwkJcmV0dXJuIGVycjsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgYm9vbCBpdDY1MDVfY2hlY2tfdm9sdGFnZV9zd2luZ19tYXgodTggbGFuZV92b2x0 YWdlX3N3aW5nX3ByZV9lbXBoYXNpcykNCj4gK3sNCj4gKwlyZXR1cm4gKChsYW5lX3ZvbHRhZ2Vf c3dpbmdfcHJlX2VtcGhhc2lzICYgMHgwMykgPT0gTUFYX0NSX0xFVkVMKTsNCj4gK30NCj4gKw0K PiArc3RhdGljIGJvb2wgaXQ2NTA1X2NoZWNrX3ByZV9lbXBoYXNpc19tYXgodTggbGFuZV92b2x0 YWdlX3N3aW5nX3ByZV9lbXBoYXNpcykNCj4gK3sNCj4gKwlyZXR1cm4gKChsYW5lX3ZvbHRhZ2Vf c3dpbmdfcHJlX2VtcGhhc2lzICYgMHgwMykgPT0gTUFYX0VRX0xFVkVMKTsNCj4gK30NCj4gKw0K PiArc3RhdGljIGJvb2wgaXQ2NTA1X2NoZWNrX21heF92b2x0YWdlX3N3aW5nX3JlYWNoZWQodTgg KmxhbmVfdm9sdGFnZV9zd2luZywNCj4gKwkJCQkJCSAgIHU4IGxhbmVfY291bnQpDQo+ICt7DQo+ ICsJdTggaTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBsYW5lX2NvdW50OyBpKyspIHsNCj4g KwkJaWYgKGxhbmVfdm9sdGFnZV9zd2luZ1tpXSAmIERQX1RSQUlOX01BWF9TV0lOR19SRUFDSEVE KQ0KPiArCQkJcmV0dXJuIHRydWU7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIGZhbHNlOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBpdDY1MDVfc3RlcF90cmFpbl9sYW5lX3ZvbHRhZ2VfcHJl X2VtcGhhc2lzX3NldCgNCj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsDQo+ICsJc3RydWN0IGl0 NjUwNV9zdGVwX3RyYWluX3BhcmEgKmxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMsDQo+ICsJdTgg KmxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXNfc2V0KQ0KPiArew0KPiArCXU4IGk7DQo+ICsNCj4g Kwlmb3IgKGkgPSAwOyBpIDwgaXQ2NTA1LT5sYW5lX2NvdW50OyBpKyspIHsNCj4gKwkJbGFuZV92 b2x0YWdlX3ByZV9lbXBoYXNpcy0+dm9sdGFnZV9zd2luZ1tpXSAmPSAweDAzOw0KPiArCQlsYW5l X3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldFtpXSA9DQo+ICsJCQlsYW5lX3ZvbHRhZ2VfcHJlX2Vt cGhhc2lzLT52b2x0YWdlX3N3aW5nW2ldOw0KPiArCQlpZiAoaXQ2NTA1X2NoZWNrX3ZvbHRhZ2Vf c3dpbmdfbWF4KA0KPiArCQkJICAgIGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vf c3dpbmdbaV0pKQ0KPiArCQkJbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpc19zZXRbaV0gfD0NCj4g KwkJCQlEUF9UUkFJTl9NQVhfU1dJTkdfUkVBQ0hFRDsNCj4gKw0KPiArCQlsYW5lX3ZvbHRhZ2Vf cHJlX2VtcGhhc2lzLT5wcmVfZW1waGFzaXNbaV0gJj0gMHgwMzsNCj4gKwkJbGFuZV92b2x0YWdl X3ByZV9lbXBoYXNpc19zZXRbaV0gfD0NCj4gKwkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMt PnByZV9lbXBoYXNpc1tpXQ0KPiArCQkJPDwgRFBfVFJBSU5fUFJFX0VNUEhBU0lTX1NISUZUOw0K PiArCQlpZiAoaXQ2NTA1X2NoZWNrX3ByZV9lbXBoYXNpc19tYXgoDQo+ICsJCQkgICAgbGFuZV92 b2x0YWdlX3ByZV9lbXBoYXNpcy0+cHJlX2VtcGhhc2lzW2ldKSkNCj4gKwkJCWxhbmVfdm9sdGFn ZV9wcmVfZW1waGFzaXNfc2V0W2ldIHw9DQo+ICsJCQkJRFBfVFJBSU5fTUFYX1BSRV9FTVBIQVNJ U19SRUFDSEVEOw0KPiArCQlpdDY1MDVfZHBjZF93cml0ZShpdDY1MDUsIERQX1RSQUlOSU5HX0xB TkUwX1NFVCArIGksDQo+ICsJCQkJICBsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldFtpXSk7 DQo+ICsNCj4gKwkJaWYgKGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXNfc2V0W2ldICE9DQo+ICsJ CSAgICBpdDY1MDVfZHBjZF9yZWFkKGl0NjUwNSwgRFBfVFJBSU5JTkdfTEFORTBfU0VUICsgaSkp DQo+ICsJCQlyZXR1cm4gZmFsc2U7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIHRydWU7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBib29sDQo+ICtpdDY1MDVfc3RlcF9jcl90cmFpbihzdHJ1Y3QgaXQ2 NTA1ICppdDY1MDUsDQo+ICsJCSAgICAgc3RydWN0IGl0NjUwNV9zdGVwX3RyYWluX3BhcmEgKmxh bmVfdm9sdGFnZV9wcmVfZW1waGFzaXMpDQo+ICt7DQo+ICsJdTggbG9vcF9jb3VudCA9IDAsIGkg PSAwLCBqOw0KPiArCXU4IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdID0geyAwIH07 DQo+ICsJdTggbGFuZV9sZXZlbF9jb25maWdbTUFYX0xBTkVfQ09VTlRdID0geyAwIH07DQo+ICsJ aW50IHByZV9lbXBoYXNpc19hZGp1c3QgPSAtMSwgdm9sdGFnZV9zd2luZ19hZGp1c3QgPSAtMTsN Cj4gKw0KPiArCWl0NjUwNV9kcGNkX3dyaXRlKGl0NjUwNSwgRFBfRE9XTlNQUkVBRF9DVFJMLA0K PiArCQkJICBpdDY1MDUtPmVuYWJsZV9zc2MgPyBEUF9TUFJFQURfQU1QXzBfNSA6IDB4MDApOw0K PiArCWl0NjUwNV9kcGNkX3dyaXRlKGl0NjUwNSwgRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQsDQo+ ICsJCQkgIERQX1RSQUlOSU5HX1BBVFRFUk5fMSk7DQo+ICsNCj4gKwl3aGlsZSAobG9vcF9jb3Vu dCA8IDUgJiYgaSA8IDEwKSB7DQo+ICsJCWkrKzsNCj4gKwkJaWYgKCFpdDY1MDVfc3RlcF90cmFp bl9sYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldCgNCj4gKwkJCSAgICBpdDY1MDUsIGxhbmVf dm9sdGFnZV9wcmVfZW1waGFzaXMsDQo+ICsJCQkgICAgbGFuZV9sZXZlbF9jb25maWcpKQ0KPiAr CQkJY29udGludWU7DQo+ICsJCWRybV9kcF9saW5rX3RyYWluX2Nsb2NrX3JlY292ZXJ5X2RlbGF5 KGl0NjUwNS0+ZHBjZCk7DQo+ICsJCWRybV9kcF9kcGNkX3JlYWRfbGlua19zdGF0dXMoJml0NjUw NS0+YXV4LCBsaW5rX3N0YXR1cyk7DQo+ICsNCj4gKwkJaWYgKGRybV9kcF9jbG9ja19yZWNvdmVy eV9vayhsaW5rX3N0YXR1cywgaXQ2NTA1LT5sYW5lX2NvdW50KSkgew0KPiArCQkJaXQ2NTA1X3Nl dF9iaXRzKGl0NjUwNSwgUkVHX1RSQUlOX0NUUkwwLCBGT1JDRV9DUl9ET05FLA0KPiArCQkJCQlG T1JDRV9DUl9ET05FKTsNCj4gKwkJCXJldHVybiB0cnVlOw0KPiArCQl9DQo+ICsJCURSTV9ERVZf REVCVUdfRFJJVkVSKCZpdDY1MDUtPmNsaWVudC0+ZGV2LCAiY3Igbm90IGRvbmUiKTsNCj4gKw0K PiArCQlpZiAoaXQ2NTA1X2NoZWNrX21heF92b2x0YWdlX3N3aW5nX3JlYWNoZWQobGFuZV9sZXZl bF9jb25maWcsDQo+ICsJCQkJCQkJICAgaXQ2NTA1LT5sYW5lX2NvdW50KSkNCj4gKwkJCWdvdG8g Y3JfdHJhaW5fZmFpbDsNCj4gKw0KPiArCQlmb3IgKGogPSAwOyBqIDwgaXQ2NTA1LT5sYW5lX2Nv dW50OyBqKyspIHsNCj4gKwkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vfc3dp bmdbal0gPQ0KPiArCQkJCWRybV9kcF9nZXRfYWRqdXN0X3JlcXVlc3Rfdm9sdGFnZShsaW5rX3N0 YXR1cywNCj4gKwkJCQkJCQkJICBqKSA+Pg0KPiArCQkJCURQX1RSQUlOX1ZPTFRBR0VfU1dJTkdf U0hJRlQ7DQo+ICsJCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT5wcmVfZW1waGFzaXNbal0g PQ0KPiArCQkJCWRybV9kcF9nZXRfYWRqdXN0X3JlcXVlc3RfcHJlX2VtcGhhc2lzKA0KPiArCQkJ CQlsaW5rX3N0YXR1cywgaikgPj4NCj4gKwkJCQlEUF9UUkFJTl9QUkVfRU1QSEFTSVNfU0hJRlQ7 DQo+ICsJCQlpZiAoKHZvbHRhZ2Vfc3dpbmdfYWRqdXN0ID09DQo+ICsJCQkgICAgIGxhbmVfdm9s dGFnZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbal0pICYmDQo+ICsJCQkgICAgKHByZV9l bXBoYXNpc19hZGp1c3QgPT0NCj4gKwkJCSAgICAgbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+ cHJlX2VtcGhhc2lzW2pdKSkgew0KPiArCQkJCWxvb3BfY291bnQrKzsNCj4gKwkJCQljb250aW51 ZTsNCj4gKwkJCX0NCj4gKw0KPiArCQkJdm9sdGFnZV9zd2luZ19hZGp1c3QgPQ0KPiArCQkJCWxh bmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbal07DQo+ICsJCQlwcmVfZW1w aGFzaXNfYWRqdXN0ID0NCj4gKwkJCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT5wcmVfZW1w aGFzaXNbal07DQo+ICsJCQlsb29wX2NvdW50ID0gMDsNCj4gKw0KPiArCQkJaWYgKHZvbHRhZ2Vf c3dpbmdfYWRqdXN0ICsgcHJlX2VtcGhhc2lzX2FkanVzdCA+DQo+ICsJCQkgICAgTUFYX0VRX0xF VkVMKQ0KPiArCQkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbal0g PQ0KPiArCQkJCQlNQVhfRVFfTEVWRUwgLQ0KPiArCQkJCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhh c2lzDQo+ICsJCQkJCQktPnByZV9lbXBoYXNpc1tqXTsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiAr Y3JfdHJhaW5fZmFpbDoNCj4gKwlpdDY1MDVfZHBjZF93cml0ZShpdDY1MDUsIERQX1RSQUlOSU5H X1BBVFRFUk5fU0VULA0KPiArCQkJICBEUF9UUkFJTklOR19QQVRURVJOX0RJU0FCTEUpOw0KPiAr DQo+ICsJcmV0dXJuIGZhbHNlOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbA0KPiAraXQ2NTA1 X3N0ZXBfZXFfdHJhaW4oc3RydWN0IGl0NjUwNSAqaXQ2NTA1LA0KPiArCQkgICAgIHN0cnVjdCBp dDY1MDVfc3RlcF90cmFpbl9wYXJhICpsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzKQ0KPiArew0K PiArCXU4IGxvb3BfY291bnQgPSAwLCBpLCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpF XSA9IHsgMCB9Ow0KPiArCXU4IGxhbmVfbGV2ZWxfY29uZmlnW01BWF9MQU5FX0NPVU5UXSA9IHsg MCB9Ow0KPiArDQo+ICsJaXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9UUkFJTklOR19QQVRU RVJOX1NFVCwNCj4gKwkJCSAgRFBfVFJBSU5JTkdfUEFUVEVSTl8yKTsNCj4gKw0KPiArCXdoaWxl IChsb29wX2NvdW50IDwgNikgew0KPiArCQlsb29wX2NvdW50Kys7DQo+ICsNCj4gKwkJaWYgKCFp dDY1MDVfc3RlcF90cmFpbl9sYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldCgNCj4gKwkJCSAg ICBpdDY1MDUsIGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMsDQo+ICsJCQkgICAgbGFuZV9sZXZl bF9jb25maWcpKQ0KPiArCQkJY29udGludWU7DQo+ICsNCj4gKwkJZHJtX2RwX2xpbmtfdHJhaW5f Y2hhbm5lbF9lcV9kZWxheShpdDY1MDUtPmRwY2QpOw0KPiArCQlkcm1fZHBfZHBjZF9yZWFkX2xp bmtfc3RhdHVzKCZpdDY1MDUtPmF1eCwgbGlua19zdGF0dXMpOw0KPiArDQo+ICsJCWlmICghZHJt X2RwX2Nsb2NrX3JlY292ZXJ5X29rKGxpbmtfc3RhdHVzLCBpdDY1MDUtPmxhbmVfY291bnQpKQ0K PiArCQkJZ290byBlcV90cmFpbl9mYWlsOw0KPiArDQo+ICsJCWlmIChkcm1fZHBfY2hhbm5lbF9l cV9vayhsaW5rX3N0YXR1cywgaXQ2NTA1LT5sYW5lX2NvdW50KSkgew0KPiArCQkJaXQ2NTA1X2Rw Y2Rfd3JpdGUoaXQ2NTA1LCBEUF9UUkFJTklOR19QQVRURVJOX1NFVCwNCj4gKwkJCQkJICBEUF9U UkFJTklOR19QQVRURVJOX0RJU0FCTEUpOw0KPiArCQkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwg UkVHX1RSQUlOX0NUUkwwLCBGT1JDRV9FUV9ET05FLA0KPiArCQkJCQlGT1JDRV9FUV9ET05FKTsN Cj4gKwkJCXJldHVybiB0cnVlOw0KPiArCQl9DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKCZp dDY1MDUtPmNsaWVudC0+ZGV2LCAiZXEgbm90IGRvbmUiKTsNCj4gKw0KPiArCQlmb3IgKGkgPSAw OyBpIDwgaXQ2NTA1LT5sYW5lX2NvdW50OyBpKyspIHsNCj4gKwkJCWxhbmVfdm9sdGFnZV9wcmVf ZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbaV0gPQ0KPiArCQkJCWRybV9kcF9nZXRfYWRqdXN0X3Jl cXVlc3Rfdm9sdGFnZShsaW5rX3N0YXR1cywNCj4gKwkJCQkJCQkJICBpKSA+Pg0KPiArCQkJCURQ X1RSQUlOX1ZPTFRBR0VfU1dJTkdfU0hJRlQ7DQo+ICsJCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhh c2lzLT5wcmVfZW1waGFzaXNbaV0gPQ0KPiArCQkJCWRybV9kcF9nZXRfYWRqdXN0X3JlcXVlc3Rf cHJlX2VtcGhhc2lzKA0KPiArCQkJCQlsaW5rX3N0YXR1cywgaSkgPj4NCj4gKwkJCQlEUF9UUkFJ Tl9QUkVfRU1QSEFTSVNfU0hJRlQ7DQo+ICsNCj4gKwkJCWlmIChsYW5lX3ZvbHRhZ2VfcHJlX2Vt cGhhc2lzLT52b2x0YWdlX3N3aW5nW2ldICsNCj4gKwkJCQkgICAgbGFuZV92b2x0YWdlX3ByZV9l bXBoYXNpcy0+cHJlX2VtcGhhc2lzW2ldID4NCj4gKwkJCSAgICBNQVhfRVFfTEVWRUwpDQo+ICsJ CQkJbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+dm9sdGFnZV9zd2luZ1tpXSA9DQo+ICsJCQkJ CTB4MDMgLSBsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzDQo+ICsJCQkJCQkgICAgICAgLT5wcmVf ZW1waGFzaXNbaV07DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4gK2VxX3RyYWluX2ZhaWw6DQo+ICsJ aXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9UUkFJTklOR19QQVRURVJOX1NFVCwNCj4gKwkJ CSAgRFBfVFJBSU5JTkdfUEFUVEVSTl9ESVNBQkxFKTsNCj4gKwlyZXR1cm4gZmFsc2U7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBib29sIGl0NjUwNV9saW5rX3N0YXJ0X3N0ZXBfdHJhaW4oc3RydWN0 IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWludCBlcnI7DQo+ICsJc3RydWN0IGl0NjUwNV9z dGVwX3RyYWluX3BhcmEgbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcyA9IHsNCj4gKwkJLnZvbHRh Z2Vfc3dpbmcgPSB7IDAgfSwNCj4gKwkJLnByZV9lbXBoYXNpcyA9IHsgMCB9LA0KPiArCX07DQo+ ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUigmaXQ2NTA1LT5jbGllbnQtPmRldiwgInN0YXJ0 Iik7DQo+ICsJZXJyID0gaXQ2NTA1X2RybV9kcF9saW5rX2NvbmZpZ3VyZShpdDY1MDUpOw0KPiAr DQo+ICsJaWYgKGVyciA8IDApDQo+ICsJCXJldHVybiBmYWxzZTsNCj4gKwlpZiAoIWl0NjUwNV9z dGVwX2NyX3RyYWluKGl0NjUwNSwgJmxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMpKQ0KPiArCQly ZXR1cm4gZmFsc2U7DQo+ICsJaWYgKCFpdDY1MDVfc3RlcF9lcV90cmFpbihpdDY1MDUsICZsYW5l X3ZvbHRhZ2VfcHJlX2VtcGhhc2lzKSkNCj4gKwkJcmV0dXJuIGZhbHNlOw0KPiArCXJldHVybiB0 cnVlOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBpdDY1MDVfZ2V0X3ZpZGVvX3N0YXR1cyhz dHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaW50IHJlZ18wZDsNCj4gKw0KPiArCXJl Z18wZCA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX1NZU1RFTV9TVFMpOw0KPiArDQo+ICsJaWYg KHJlZ18wZCA8IDApDQo+ICsJCXJldHVybiBmYWxzZTsNCj4gKw0KPiArCXJldHVybiAhIShyZWdf MGQgJiBWSURFT19TVEIpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfcmVzZXRf aGRjcChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJaXQ2NTA1LT5oZGNwX3N0YXR1 cyA9IEhEQ1BfQVVUSF9JRExFOw0KPiArCS8qIERpc2FibGUgQ1BfRGVzaXJlZCAqLw0KPiArCWl0 NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX0NUUkwxLCBIRENQX0NQX0VOQUJMRSwgMHgw MCk7DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1JFU0VUX0NUUkwsIEhEQ1BfUkVT RVQsIEhEQ1BfUkVTRVQpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfc3RhcnRf aGRjcChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2 ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihk ZXYsICJzdGFydCIpOw0KPiArCWl0NjUwNV9yZXNldF9oZGNwKGl0NjUwNSk7DQo+ICsJcXVldWVf ZGVsYXllZF93b3JrKHN5c3RlbV93cSwgJml0NjUwNS0+aGRjcF93b3JrLA0KPiArCQkJICAgbXNl Y3NfdG9famlmZmllcygyNDAwKSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9z dG9wX2hkY3Aoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWl0NjUwNV9yZXNldF9o ZGNwKGl0NjUwNSk7DQo+ICsJY2FuY2VsX2RlbGF5ZWRfd29yaygmaXQ2NTA1LT5oZGNwX3dvcmsp Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBpdDY1MDVfaGRjcF9pc19rc3ZfdmFsaWQodTgg KmtzdikNCj4gK3sNCj4gKwlpbnQgaSwgb25lcyA9IDA7DQo+ICsNCj4gKwkvKiBLU1YgaGFzIDIw IDEncyBhbmQgMjAgMCdzICovDQo+ICsJZm9yIChpID0gMDsgaSA8IERSTV9IRENQX0tTVl9MRU47 IGkrKykNCj4gKwkJb25lcyArPSBod2VpZ2h0OChrc3ZbaV0pOw0KPiArCWlmIChvbmVzICE9IDIw KQ0KPiArCQlyZXR1cm4gZmFsc2U7DQo+ICsJcmV0dXJuIHRydWU7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyB2b2lkIGl0NjUwNV9oZGNwX3BhcnQxX2F1dGgoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0K PiArew0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiAr CXU4IGhkY3BfYmNhcHM7DQo+ICsNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfUkVT RVRfQ1RSTCwgSERDUF9SRVNFVCwgMHgwMCk7DQo+ICsJLyogRGlzYWJsZSBDUF9EZXNpcmVkICov DQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfQ1RSTDEsIEhEQ1BfQ1BfRU5B QkxFLCAweDAwKTsNCj4gKw0KPiArCXVzbGVlcF9yYW5nZSgxMDAwLCAxNTAwKTsNCj4gKwloZGNw X2JjYXBzID0gaXQ2NTA1X2RwY2RfcmVhZChpdDY1MDUsIERQX0FVWF9IRENQX0JDQVBTKTsNCj4g KwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJEUENEWzB4NjgwMjhdOiAweCUwMngiLA0KPiAr CQkJICAgICBoZGNwX2JjYXBzKTsNCj4gKw0KPiArCWlmICghaGRjcF9iY2FwcykNCj4gKwkJcmV0 dXJuOw0KPiArDQo+ICsJLyogY2xlYXIgdGhlIHJlcGVhdGVyIExpc3QgQ2hrIERvbmUgYW5kIGZh aWwgYml0ICovDQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfVFJJR0dFUiwN Cj4gKwkJCUhEQ1BfVFJJR0dFUl9LU1ZfRE9ORSB8IEhEQ1BfVFJJR0dFUl9LU1ZfRkFJTCwNCj4g KwkJCTB4MDApOw0KPiArDQo+ICsJLyogRW5hYmxlIEFuIEdlbmVyYXRvciAqLw0KPiArCWl0NjUw NV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX0NUUkwyLCBIRENQX0FOX0dFTiwgSERDUF9BTl9H RU4pOw0KPiArCS8qIGRlbGF5MW1zKDEwKTsqLw0KPiArCXVzbGVlcF9yYW5nZSgxMDAwMCwgMTUw MDApOw0KPiArCS8qIFN0b3AgQW4gR2VuZXJhdG9yICovDQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0 NjUwNSwgUkVHX0hEQ1BfQ1RSTDIsIEhEQ1BfQU5fR0VOLCAweDAwKTsNCj4gKw0KPiArCWl0NjUw NV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX0NUUkwxLCBIRENQX0NQX0VOQUJMRSwgSERDUF9D UF9FTkFCTEUpOw0KPiArDQo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfVFJJ R0dFUiwgSERDUF9UUklHR0VSX1NUQVJULA0KPiArCQkJSERDUF9UUklHR0VSX1NUQVJUKTsNCj4g Kw0KPiArCWl0NjUwNS0+aGRjcF9zdGF0dXMgPSBIRENQX0FVVEhfR09JTkc7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBpbnQgaXQ2NTA1X3NoYTFfZGlnZXN0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSwg dTggKnNoYTFfaW5wdXQsDQo+ICsJCQkgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdTggKm91dHB1 dF9hdikNCj4gK3sNCj4gKwlzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYzsNCj4gKwlzdHJ1Y3QgY3J5 cHRvX3NoYXNoICp0Zm07DQo+ICsJaW50IGVycjsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm aXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiArCXRmbSA9IGNyeXB0b19hbGxvY19zaGFzaCgi c2hhMSIsIDAsIDApOw0KPiArCWlmIChJU19FUlIodGZtKSkgew0KPiArCQlEUk1fREVWX0VSUk9S KGRldiwgImNyeXB0b19hbGxvY19zaGFzaCBzaGExIGZhaWxlZCIpOw0KPiArCQlyZXR1cm4gUFRS X0VSUih0Zm0pOw0KPiArCX0NCj4gKwlkZXNjID0ga3phbGxvYyhzaXplb2YoKmRlc2MpICsgY3J5 cHRvX3NoYXNoX2Rlc2NzaXplKHRmbSksIEdGUF9LRVJORUwpOw0KPiArCWlmICghZGVzYykgew0K PiArCQljcnlwdG9fZnJlZV9zaGFzaCh0Zm0pOw0KPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gKwl9 DQo+ICsNCj4gKwlkZXNjLT50Zm0gPSB0Zm07DQo+ICsJZXJyID0gY3J5cHRvX3NoYXNoX2RpZ2Vz dChkZXNjLCBzaGExX2lucHV0LCBzaXplLCBvdXRwdXRfYXYpOw0KPiArCWlmIChlcnIpDQo+ICsJ CURSTV9ERVZfRVJST1IoZGV2LCAiY3J5cHRvX3NoYXNoX2RpZ2VzdCBzaGExIGZhaWxlZCIpOw0K PiArDQo+ICsJY3J5cHRvX2ZyZWVfc2hhc2godGZtKTsNCj4gKwlrZnJlZShkZXNjKTsNCj4gKwly ZXR1cm4gZXJyOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGl0NjUwNV9zZXR1cF9zaGExX2lu cHV0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgdTggKnNoYTFfaW5wdXQpDQo+ICt7DQo+ICsJc3Ry dWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJdTggYmluZm9bMl07 DQo+ICsJaW50IGRvd25fc3RyZWFtX2NvdW50LCBpLCBlcnIsIG1zZ19jb3VudCA9IDA7DQo+ICsN Cj4gKwllcnIgPSBpdDY1MDVfZ2V0X2RwY2QoaXQ2NTA1LCBEUF9BVVhfSERDUF9CSU5GTywgYmlu Zm8sDQo+ICsJCQkgICAgICBBUlJBWV9TSVpFKGJpbmZvKSk7DQo+ICsNCj4gKwlpZiAoZXJyIDwg MCkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIlJlYWQgYmluZm8gdmFsdWUgRmFpbCIpOw0K PiArCQlyZXR1cm4gZXJyOw0KPiArCX0NCj4gKw0KPiArCWRvd25fc3RyZWFtX2NvdW50ID0gYmlu Zm9bMF0gJiAweDdGOw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImJpbmZvOjB4JSpw aCIsIChpbnQpQVJSQVlfU0laRShiaW5mbyksDQo+ICsJCQkgICAgIGJpbmZvKTsNCj4gKw0KPiAr CWlmICgoYmluZm9bMF0gJiBCSVQoNykpIHx8IChiaW5mb1sxXSAmIEJJVCgzKSkpIHsNCj4gKwkJ RFJNX0RFVl9FUlJPUihkZXYsICJIRENQIG1heCBjYXNjYWRlIGRldmljZSBleGNlZWQiKTsNCj4g KwkJcmV0dXJuIDA7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKCFkb3duX3N0cmVhbV9jb3VudCB8fA0K PiArCSAgICAoZG93bl9zdHJlYW1fY291bnQgPiBNQVhfSERDUF9ET1dOX1NUUkVBTV9DT1VOVCkp IHsNCj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJIRENQIGRvd24gc3RyZWFtIGNvdW50IEVycm9y ICVkIiwNCj4gKwkJCSAgICAgIGRvd25fc3RyZWFtX2NvdW50KTsNCj4gKwkJcmV0dXJuIDA7DQo+ ICsJfQ0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IGRvd25fc3RyZWFtX2NvdW50OyBpKyspIHsN Cj4gKwkJZXJyID0gaXQ2NTA1X2dldF9kcGNkKGl0NjUwNSwgRFBfQVVYX0hEQ1BfS1NWX0ZJRk8g Kw0KPiArCQkJCSAgICAgIChpICUgMykgKiBEUk1fSERDUF9LU1ZfTEVOLA0KPiArCQkJCSAgICAg IHNoYTFfaW5wdXQgKyBtc2dfY291bnQsDQo+ICsJCQkJICAgICAgRFJNX0hEQ1BfS1NWX0xFTik7 DQo+ICsNCj4gKwkJaWYgKGVyciA8IDApDQo+ICsJCQlyZXR1cm4gZXJyOw0KPiArDQo+ICsJCW1z Z19jb3VudCArPSA1Ow0KPiArCX0NCj4gKw0KPiArCWl0NjUwNS0+aGRjcF9kb3duX3N0cmVhbV9j b3VudCA9IGRvd25fc3RyZWFtX2NvdW50Ow0KPiArCXNoYTFfaW5wdXRbbXNnX2NvdW50KytdID0g YmluZm9bMF07DQo+ICsJc2hhMV9pbnB1dFttc2dfY291bnQrK10gPSBiaW5mb1sxXTsNCj4gKw0K PiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX0NUUkwyLCBIRENQX0VOX00wX1JF QUQsDQo+ICsJCQlIRENQX0VOX00wX1JFQUQpOw0KPiArDQo+ICsJZXJyID0gcmVnbWFwX2J1bGtf cmVhZChpdDY1MDUtPnJlZ21hcCwgUkVHX00wXzBfNywNCj4gKwkJCSAgICAgICBzaGExX2lucHV0 ICsgbXNnX2NvdW50LCA4KTsNCj4gKw0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19I RENQX0NUUkwyLCBIRENQX0VOX00wX1JFQUQsIDB4MDApOw0KPiArDQo+ICsJaWYgKGVyciA8IDAp IHsNCj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICIgV2FybmluZywgUmVhZCBNIHZhbHVlIEZhaWwi KTsNCj4gKwkJcmV0dXJuIGVycjsNCj4gKwl9DQo+ICsNCj4gKwltc2dfY291bnQgKz0gODsNCj4g Kw0KPiArCXJldHVybiBtc2dfY291bnQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBib29sIGl0NjUw NV9oZGNwX3BhcnQyX2tzdmxpc3RfY2hlY2soc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0K PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0KPiArCXU4IGF2 WzVdWzRdLCBidls1XVs0XTsNCj4gKwlpbnQgaSwgZXJyOw0KPiArDQo+ICsJaSA9IGl0NjUwNV9z ZXR1cF9zaGExX2lucHV0KGl0NjUwNSwgaXQ2NTA1LT5zaGExX2lucHV0KTsNCj4gKwlpZiAoaSA8 PSAwKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiU0hBLTEgSW5wdXQgbGVuZ3RoIGVycm9y ICVkIiwgaSk7DQo+ICsJCXJldHVybiBmYWxzZTsNCj4gKwl9DQo+ICsNCj4gKwlpdDY1MDVfc2hh MV9kaWdlc3QoaXQ2NTA1LCBpdDY1MDUtPnNoYTFfaW5wdXQsIGksICh1OCAqKWF2KTsNCj4gKw0K PiArCWVyciA9IGl0NjUwNV9nZXRfZHBjZChpdDY1MDUsIERQX0FVWF9IRENQX1ZfUFJJTUUoMCks ICh1OCAqKWJ2LA0KPiArCQkJICAgICAgc2l6ZW9mKGJ2KSk7DQo+ICsNCj4gKwlpZiAoZXJyIDwg MCkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIlJlYWQgVicgdmFsdWUgRmFpbCIpOw0KPiAr CQlyZXR1cm4gZmFsc2U7DQo+ICsJfQ0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IDU7IGkrKykN Cj4gKwkJaWYgKChidltpXVszXSAhPSBhdltpXVswXSkgfHwgKGJ2W2ldWzJdICE9IGF2W2ldWzFd KSB8fA0KPiArCQkgICAgKGJ2W2ldWzFdICE9IGF2W2ldWzJdKSB8fCAoYnZbaV1bMF0gIT0gYXZb aV1bM10pKQ0KPiArCQkJcmV0dXJuIGZhbHNlOw0KPiArDQo+ICsJRFJNX0RFVl9ERUJVR19EUklW RVIoZGV2LCAiVicgYWxsIG1hdGNoISEiKTsNCj4gKwlyZXR1cm4gdHJ1ZTsNCj4gK30NCj4gKw0K PiArc3RhdGljIHZvaWQgaXQ2NTA1X2hkY3Bfd2FpdF9rc3ZfbGlzdChzdHJ1Y3Qgd29ya19zdHJ1 Y3QgKndvcmspDQo+ICt7DQo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gY29udGFpbmVyX29m KHdvcmssIHN0cnVjdCBpdDY1MDUsDQo+ICsJCQkJCSAgICAgaGRjcF93YWl0X2tzdl9saXN0KTsN Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKwl1bnNp Z25lZCBpbnQgdGltZW91dCA9IDUwMDA7DQo+ICsJdTggYnN0YXR1cyA9IDA7DQo+ICsJYm9vbCBr c3ZfbGlzdF9jaGVjazsNCj4gKw0KPiArCXRpbWVvdXQgLz0gMjA7DQo+ICsJd2hpbGUgKHRpbWVv dXQgPiAwKSB7DQo+ICsJCWlmICghaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSkN Cj4gKwkJCXJldHVybjsNCj4gKw0KPiArCQlic3RhdHVzID0gaXQ2NTA1X2RwY2RfcmVhZChpdDY1 MDUsIERQX0FVWF9IRENQX0JTVEFUVVMpOw0KPiArDQo+ICsJCWlmIChic3RhdHVzICYgRFBfQlNU QVRVU19SRUFEWSkNCj4gKwkJCWJyZWFrOw0KPiArDQo+ICsJCW1zbGVlcCgyMCk7DQo+ICsJCXRp bWVvdXQtLTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAodGltZW91dCA9PSAwKSB7DQo+ICsJCURSTV9E RVZfREVCVUdfRFJJVkVSKGRldiwgInRpbWVvdXQgYW5kIGtzdiBsaXN0IHdhaXQgZmFpbGVkIik7 DQo+ICsJCWdvdG8gdGltZW91dDsNCj4gKwl9DQo+ICsNCj4gKwlrc3ZfbGlzdF9jaGVjayA9IGl0 NjUwNV9oZGNwX3BhcnQyX2tzdmxpc3RfY2hlY2soaXQ2NTA1KTsNCj4gKwlEUk1fREVWX0RFQlVH X0RSSVZFUihkZXYsICJrc3YgbGlzdCByZWFkeSwga3N2IGxpc3QgY2hlY2sgJXMiLA0KPiArCQkJ ICAgICBrc3ZfbGlzdF9jaGVjayA/ICJwYXNzIiA6ICJmYWlsIik7DQo+ICsJaWYgKGtzdl9saXN0 X2NoZWNrKSB7DQo+ICsJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX1RSSUdHRVIs DQo+ICsJCQkJSERDUF9UUklHR0VSX0tTVl9ET05FLCBIRENQX1RSSUdHRVJfS1NWX0RPTkUpOw0K PiArCQlyZXR1cm47DQo+ICsJfQ0KPiArdGltZW91dDoNCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2 NTA1LCBSRUdfSERDUF9UUklHR0VSLA0KPiArCQkJSERDUF9UUklHR0VSX0tTVl9ET05FIHwgSERD UF9UUklHR0VSX0tTVl9GQUlMLA0KPiArCQkJSERDUF9UUklHR0VSX0tTVl9ET05FIHwgSERDUF9U UklHR0VSX0tTVl9GQUlMKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2hkY3Bf d29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQo+ICt7DQo+ICsJc3RydWN0IGl0NjUwNSAq aXQ2NTA1ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpdDY1MDUsDQo+ICsJCQkJCSAgICAg aGRjcF93b3JrLndvcmspOw0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVu dC0+ZGV2Ow0KPiArCWludCByZXQ7DQo+ICsJdTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNf U0laRV0gPSB7IDAgfTsNCj4gKw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInN0YXJ0 Iik7DQo+ICsNCj4gKwlpZiAoIWl0NjUwNV9nZXRfc2lua19ocGRfc3RhdHVzKGl0NjUwNSkpDQo+ ICsJCXJldHVybjsNCj4gKw0KPiArCXJldCA9IGRybV9kcF9kcGNkX3JlYWRfbGlua19zdGF0dXMo Jml0NjUwNS0+YXV4LCBsaW5rX3N0YXR1cyk7DQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2 LCAicmV0OiAlZCBsaW5rX3N0YXR1czogJSpwaCIsIHJldCwNCj4gKwkJCSAgICAgKGludClzaXpl b2YobGlua19zdGF0dXMpLCBsaW5rX3N0YXR1cyk7DQo+ICsNCj4gKwlpZiAoKHJldCA8IDApIHx8 ICFkcm1fZHBfY2hhbm5lbF9lcV9vayhsaW5rX3N0YXR1cywgaXQ2NTA1LT5sYW5lX2NvdW50KQ0K PiArCSAgICB8fCAhaXQ2NTA1X2dldF92aWRlb19zdGF0dXMoaXQ2NTA1KSkgew0KPiArCQlEUk1f REVWX0RFQlVHX0RSSVZFUihkZXYsICJsaW5rIHRyYWluIG5vdCBkb25lIG9yIG5vIHZpZGVvIik7 DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ICsNCj4gKwlyZXQgPSBpdDY1MDVfZ2V0X2RwY2QoaXQ2 NTA1LCBEUF9BVVhfSERDUF9CS1NWLCBpdDY1MDUtPmJrc3ZzLA0KPiArCQkJICAgICAgQVJSQVlf U0laRShpdDY1MDUtPmJrc3ZzKSk7DQo+ICsJaWYgKHJldCA8IDApIHsNCj4gKwkJRFJNX0RFVl9F UlJPUihkZXYsICJmYWlsIHRvIGdldCBia3N2ICByZXQ6ICVkIiwgcmV0KTsNCj4gKwkJaXQ2NTA1 X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfVFJJR0dFUiwNCj4gKwkJCQlIRENQX1RSSUdHRVJf S1NWX0ZBSUwsIEhEQ1BfVFJJR0dFUl9LU1ZfRkFJTCk7DQo+ICsJfQ0KPiArDQo+ICsJRFJNX0RF Vl9ERUJVR19EUklWRVIoZGV2LCAiYmtzdiA9IDB4JSpwaCIsDQo+ICsJCQkgICAgIChpbnQpQVJS QVlfU0laRShpdDY1MDUtPmJrc3ZzKSwgaXQ2NTA1LT5ia3N2cyk7DQo+ICsNCj4gKwlpZiAoIWl0 NjUwNV9oZGNwX2lzX2tzdl92YWxpZChpdDY1MDUtPmJrc3ZzKSkgew0KPiArCQlEUk1fREVWX0VS Uk9SKGRldiwgIkRpc3BsYXkgUG9ydCBia3N2IG5vdCB2YWxpZCIpOw0KPiArCQlpdDY1MDVfc2V0 X2JpdHMoaXQ2NTA1LCBSRUdfSERDUF9UUklHR0VSLA0KPiArCQkJCUhEQ1BfVFJJR0dFUl9LU1Zf RkFJTCwgSERDUF9UUklHR0VSX0tTVl9GQUlMKTsNCj4gKwl9DQo+ICsNCj4gKwlpdDY1MDVfaGRj cF9wYXJ0MV9hdXRoKGl0NjUwNSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9z aG93X2hkY3BfaW5mbyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJc3RydWN0IGRl dmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJaW50IGk7DQo+ICsJdTggKnNo YTEgPSBpdDY1MDUtPnNoYTFfaW5wdXQ7DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihk ZXYsICJoZGNwX3N0YXR1czogJWQgaXNfcmVwZWF0ZXI6ICVkIiwNCj4gKwkJCSAgICAgaXQ2NTA1 LT5oZGNwX3N0YXR1cywgaXQ2NTA1LT5pc19yZXBlYXRlcik7DQo+ICsJRFJNX0RFVl9ERUJVR19E UklWRVIoZGV2LCAiYmtzdiA9IDB4JSpwaCIsDQo+ICsJCQkgICAgIChpbnQpQVJSQVlfU0laRShp dDY1MDUtPmJrc3ZzKSwgaXQ2NTA1LT5ia3N2cyk7DQo+ICsNCj4gKwlpZiAoaXQ2NTA1LT5pc19y ZXBlYXRlcikgew0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJoZGNwX2Rvd25fc3Ry ZWFtX2NvdW50OiAlZCIsDQo+ICsJCQkJICAgICBpdDY1MDUtPmhkY3BfZG93bl9zdHJlYW1fY291 bnQpOw0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJzaGExX2lucHV0OiAweCUqcGgi LA0KPiArCQkJCSAgICAgKGludClBUlJBWV9TSVpFKGl0NjUwNS0+c2hhMV9pbnB1dCksDQo+ICsJ CQkJICAgICBpdDY1MDUtPnNoYTFfaW5wdXQpOw0KPiArCQlmb3IgKGkgPSAwOyBpIDwgaXQ2NTA1 LT5oZGNwX2Rvd25fc3RyZWFtX2NvdW50OyBpKyspIHsNCj4gKwkJCURSTV9ERVZfREVCVUdfRFJJ VkVSKGRldiwgIktTVl8lZCA9IDB4JSpwaCIsIGksDQo+ICsJCQkJCSAgICAgRFJNX0hEQ1BfS1NW X0xFTiwgc2hhMSk7DQo+ICsJCQlzaGExICs9IERSTV9IRENQX0tTVl9MRU47DQo+ICsJCX0NCj4g KwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiYmluZm86IDB4JTJwaCBNMDogMHglOHBoIiwN Cj4gKwkJCQkgICAgIHNoYTEsIHNoYTEgKyAyKTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyB2b2lkIGl0NjUwNV9zdG9wX2xpbmtfdHJhaW4oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiAr ew0KPiArCWl0NjUwNS0+bGlua19zdGF0ZSA9IExJTktfSURMRTsNCj4gKwljYW5jZWxfd29ya19z eW5jKCZpdDY1MDUtPmxpbmtfd29ya3MpOw0KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19U UkFJTl9DVFJMMSwgRk9SQ0VfUkVUUkFJTik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0 NjUwNV9saW5rX3RyYWluX29rKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkNCj4gK3sNCj4gKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4gKw0KPiArCWl0NjUwNS0+ bGlua19zdGF0ZSA9IExJTktfT0s7DQo+ICsJLyogZGlzYWxiZSBtdXRlIGVuYWJsZSBhdmkgaW5m byBmcmFtZSAqLw0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EQVRBX01VVEVfQ1RS TCwgRU5fVklEX01VVEUsIDB4MDApOw0KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19J TkZPRlJBTUVfQ1RSTCwNCj4gKwkJCUVOX1ZJRF9DVFJMX1BLVCwgRU5fVklEX0NUUkxfUEtUKTsN Cj4gKw0KPiArCWlmIChpdDY1MDVfYXVkaW9faW5wdXQoaXQ2NTA1KSkgew0KPiArCQlEUk1fREVW X0RFQlVHX0RSSVZFUihkZXYsICJFbmFibGUgYXVkaW8hIik7DQo+ICsJCWl0NjUwNV9lbmFibGVf YXVkaW8oaXQ2NTA1KTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoaXQ2NTA1LT5oZGNwX2Rlc2lyZWQp DQo+ICsJCWl0NjUwNV9zdGFydF9oZGNwKGl0NjUwNSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2 b2lkIGl0NjUwNV9saW5rX3N0ZXBfdHJhaW5fcHJvY2VzcyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUp DQo+ICt7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ ICsJaW50IHJldCwgaSwgc3RlcF9yZXRyeSA9IDM7DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RS SVZFUihkZXYsICJTdGFydCBzdGVwIHRyYWluIik7DQo+ICsNCj4gKwlpZiAoaXQ2NTA1LT5zaW5r X2NvdW50ID09IDApIHsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiaXQ2NTA1LT5z aW5rX2NvdW50OiVkLCBmb3JjZSBlcSIsDQo+ICsJCQkJICAgICBpdDY1MDUtPnNpbmtfY291bnQp Ow0KPiArCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LAlSRUdfVFJBSU5fQ1RSTDAsIEZPUkNFX0VR X0RPTkUsDQo+ICsJCQkJRk9SQ0VfRVFfRE9ORSk7DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ICsN Cj4gKwlpZiAoIWl0NjUwNS0+c3RlcF90cmFpbikgew0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZF UihkZXYsICJub3Qgc3VwcG9ydCBzdGVwIHRyYWluIik7DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ ICsNCj4gKwkvKiBzZXRwIHRyYWluaW5nIHN0YXJ0IGhlcmUgKi8NCj4gKwlmb3IgKGkgPSAwOyBp IDwgc3RlcF9yZXRyeTsgaSsrKSB7DQo+ICsJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19U UkFJTl9DVFJMMCwNCj4gKwkJCQlGT1JDRV9DUl9ET05FIHwgRk9SQ0VfRVFfRE9ORSwgMHgwMCk7 DQo+ICsJCWl0NjUwNV9kcGNkX3dyaXRlKGl0NjUwNSwgRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQs DQo+ICsJCQkJICBEUF9UUkFJTklOR19QQVRURVJOX0RJU0FCTEUpOw0KPiArCQlyZXQgPSBpdDY1 MDVfbGlua19zdGFydF9zdGVwX3RyYWluKGl0NjUwNSk7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJ VkVSKGRldiwgInN0ZXAgdHJhaW4gJXMsIHJldHJ5OiVkIHRpbWVzIiwNCj4gKwkJCQkgICAgIHJl dCA/ICJwYXNzIiA6ICJmYWlsZWQiLCBpICsgMSk7DQo+ICsJCWlmIChyZXQpIHsNCj4gKwkJCWl0 NjUwNV9saW5rX3RyYWluX29rKGl0NjUwNSk7DQo+ICsJCQlyZXR1cm47DQo+ICsJCX0NCj4gKwl9 DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJ0cmFpbmluZyBmYWlsIik7DQo+ ICsJaXQ2NTA1LT5saW5rX3N0YXRlID0gTElOS19JRExFOw0KPiArCWl0NjUwNV92aWRlb19yZXNl dChpdDY1MDUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfbGlua190cmFpbmlu Z193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1 ICppdDY1MDUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl0NjUwNSwgbGlua193b3Jrcyk7 DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJaW50 IHJldDsNCj4gKw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIml0NjUwNS0+c2lua19j b3VudDogJWQiLA0KPiArCQkJICAgICBpdDY1MDUtPnNpbmtfY291bnQpOw0KPiArDQo+ICsJaWYg KCFpdDY1MDVfZ2V0X3NpbmtfaHBkX3N0YXR1cyhpdDY1MDUpKQ0KPiArCQlyZXR1cm47DQo+ICsN Cj4gKwlpdDY1MDVfbGlua190cmFpbmluZ19zZXR1cChpdDY1MDUpOw0KPiArCWl0NjUwNV9yZXNl dF9oZGNwKGl0NjUwNSk7DQo+ICsJaXQ2NTA1X2F1eF9yZXNldChpdDY1MDUpOw0KPiArDQo+ICsJ aWYgKGl0NjUwNS0+YXV0b190cmFpbl9yZXRyeSA8IDEpIHsNCj4gKwkJaXQ2NTA1X2xpbmtfc3Rl cF90cmFpbl9wcm9jZXNzKGl0NjUwNSk7DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ICsNCj4gKwly ZXQgPSBpdDY1MDVfbGlua19zdGFydF9hdXRvX3RyYWluKGl0NjUwNSk7DQo+ICsJRFJNX0RFVl9E RUJVR19EUklWRVIoZGV2LCAiYXV0byB0cmFpbiAlcywgYXV0b190cmFpbl9yZXRyeTogJWQiLA0K PiArCQkJICAgICByZXQgPyAicGFzcyIgOiAiZmFpbGVkIiwgaXQ2NTA1LT5hdXRvX3RyYWluX3Jl dHJ5KTsNCj4gKwlpdDY1MDUtPmF1dG9fdHJhaW5fcmV0cnktLTsNCj4gKw0KPiArCWlmIChyZXQp IHsNCj4gKwkJaXQ2NTA1X2xpbmtfdHJhaW5fb2soaXQ2NTA1KTsNCj4gKwkJcmV0dXJuOw0KPiAr CX0NCj4gKw0KPiArCWl0NjUwNV9kdW1wKGl0NjUwNSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2 b2lkIGl0NjUwNV9wbHVnZ2VkX3N0YXR1c190b19jb2RlYyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUp DQo+ICt7DQo+ICsJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXMgPSBpdDY1MDUtPmNv bm5lY3Rvcl9zdGF0dXM7DQo+ICsNCj4gKwlpZiAoaXQ2NTA1LT5wbHVnZ2VkX2NiICYmIGl0NjUw NS0+Y29kZWNfZGV2KQ0KPiArCQlpdDY1MDUtPnBsdWdnZWRfY2IoaXQ2NTA1LT5jb2RlY19kZXYs DQo+ICsJCQkJICAgc3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKTsNCj4gK30N Cj4gKw0KPiArc3RhdGljIGludCBpdDY1MDVfcHJvY2Vzc19ocGRfaXJxKHN0cnVjdCBpdDY1MDUg Kml0NjUwNSkNCj4gK3sNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQt PmRldjsNCj4gKwlpbnQgcmV0LCBkcGNkX3NpbmtfY291bnQsIGRwX2lycV92ZWN0b3IsIGJzdGF0 dXM7DQo+ICsJdTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV07DQo+ICsNCj4gKwlp ZiAoIWl0NjUwNV9nZXRfc2lua19ocGRfc3RhdHVzKGl0NjUwNSkpIHsNCj4gKwkJRFJNX0RFVl9E RUJVR19EUklWRVIoZGV2LCAiSFBEX0lSUSBIUEQgbG93Iik7DQo+ICsJCWl0NjUwNS0+c2lua19j b3VudCA9IDA7DQo+ICsJCXJldHVybiAwOw0KPiArCX0NCj4gKw0KPiArCXJldCA9IGl0NjUwNV9k cGNkX3JlYWQoaXQ2NTA1LCBEUF9TSU5LX0NPVU5UKTsNCj4gKwlpZiAocmV0IDwgMCkNCj4gKwkJ cmV0dXJuIHJldDsNCj4gKw0KPiArCWRwY2Rfc2lua19jb3VudCA9IERQX0dFVF9TSU5LX0NPVU5U KHJldCk7DQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiZHBjZF9zaW5rX2NvdW50OiAl ZCBpdDY1MDUtPnNpbmtfY291bnQ6JWQiLA0KPiArCQkJICAgICBkcGNkX3NpbmtfY291bnQsIGl0 NjUwNS0+c2lua19jb3VudCk7DQo+ICsNCj4gKwlpZiAoaXQ2NTA1LT5icmFuY2hfZGV2aWNlICYm IGRwY2Rfc2lua19jb3VudCAhPSBpdDY1MDUtPnNpbmtfY291bnQpIHsNCj4gKwkJbWVtc2V0KGl0 NjUwNS0+ZHBjZCwgMCwgc2l6ZW9mKGl0NjUwNS0+ZHBjZCkpOw0KPiArCQlpdDY1MDUtPnNpbmtf Y291bnQgPSBkcGNkX3NpbmtfY291bnQ7DQo+ICsJCWtmcmVlKGl0NjUwNS0+ZWRpZCk7DQo+ICsJ CWl0NjUwNS0+ZWRpZCA9IE5VTEw7DQo+ICsJCWl0NjUwNV9yZXNldF9sb2dpYyhpdDY1MDUpOw0K PiArCQlpdDY1MDVfaW50X21hc2tfZW5hYmxlKGl0NjUwNSk7DQo+ICsJCWl0NjUwNV9pbml0KGl0 NjUwNSk7DQo+ICsJCXJldHVybiAwOw0KPiArCX0NCj4gKw0KPiArCWRwX2lycV92ZWN0b3IgPSBp dDY1MDVfZHBjZF9yZWFkKGl0NjUwNSwgRFBfREVWSUNFX1NFUlZJQ0VfSVJRX1ZFQ1RPUik7DQo+ ICsJaWYgKGRwX2lycV92ZWN0b3IgPCAwKQ0KPiArCQlyZXR1cm4gZHBfaXJxX3ZlY3RvcjsNCj4g Kw0KPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImRwX2lycV92ZWN0b3IgPSAweCUwMngi LCBkcF9pcnFfdmVjdG9yKTsNCj4gKw0KPiArCWlmIChkcF9pcnFfdmVjdG9yICYgRFBfQ1BfSVJR KSB7DQo+ICsJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX1RSSUdHRVIsIEhEQ1Bf VFJJR0dFUl9DUElSUSwNCj4gKwkJCQlIRENQX1RSSUdHRVJfQ1BJUlEpOw0KPiArDQo+ICsJCWJz dGF0dXMgPSBpdDY1MDVfZHBjZF9yZWFkKGl0NjUwNSwgRFBfQVVYX0hEQ1BfQlNUQVRVUyk7DQo+ ICsJCWlmIChic3RhdHVzIDwgMCkNCj4gKwkJCXJldHVybiBic3RhdHVzOw0KPiArDQo+ICsJCURS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIkJzdGF0dXMgPSAweCUwMngiLCBic3RhdHVzKTsNCj4g Kwl9DQo+ICsNCj4gKwlyZXQgPSBkcm1fZHBfZHBjZF9yZWFkX2xpbmtfc3RhdHVzKCZpdDY1MDUt PmF1eCwgbGlua19zdGF0dXMpOw0KPiArCWlmIChyZXQgPCAwKSB7DQo+ICsJCURSTV9ERVZfRVJS T1IoZGV2LCAiRmFpbCB0byByZWFkIGxpbmsgc3RhdHVzIHJldDogJWQiLA0KPiArCQkJICAgICAg cmV0KTsNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RS SVZFUihkZXYsICJsaW5rIHN0YXR1cyA9IDB4JSpwaCIsDQo+ICsJCQkgICAgIChpbnQpQVJSQVlf U0laRShsaW5rX3N0YXR1cyksIGxpbmtfc3RhdHVzKTsNCj4gKw0KPiArCWlmICghZHJtX2RwX2No YW5uZWxfZXFfb2sobGlua19zdGF0dXMsIGl0NjUwNS0+bGFuZV9jb3VudCkpIHsNCj4gKwkJaXQ2 NTA1LT5hdXRvX3RyYWluX3JldHJ5ID0gQVVUT19UUkFJTl9SRVRSWTsNCj4gKwkJaXQ2NTA1X3Zp ZGVvX3Jlc2V0KGl0NjUwNSk7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9jaGVja19yZWcwNihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUs IHVuc2lnbmVkIGludCByZWcwNikNCj4gK3sNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2 NTA1LT5jbGllbnQtPmRldjsNCj4gKwlib29sIGRhdGE7DQo+ICsNCj4gKwlpZiAocmVnMDYgJiBJ TlRfSFBEX0NIQU5HRSkgew0KPiArCQlkYXRhID0gaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMo aXQ2NTA1KTsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiaHBkIGNoYW5nZSBpbnRl cnJ1cHQsIGNoYW5nZSB0byAlcyIsDQo+ICsJCQkJICAgICBkYXRhID8gImhpZ2giIDogImxvdyIp Ow0KPiArCQlpZiAoaXQ2NTA1LT5jb25uZWN0b3IuZGV2KQ0KPiArCQkJZHJtX2hlbHBlcl9ocGRf aXJxX2V2ZW50KGl0NjUwNS0+Y29ubmVjdG9yLmRldik7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJ VkVSKGRldiwgIml0NjUwNS0+c2lua19jb3VudDogJWQiLA0KPiArCQkJCSAgICAgaXQ2NTA1LT5z aW5rX2NvdW50KTsNCj4gKw0KPiArCQlpZiAoZGF0YSkgew0KPiArCQkJd2FpdF9mb3JfY29tcGxl dGlvbl90aW1lb3V0KCZpdDY1MDUtPndhaXRfZWRpZF9jb21wbGV0ZSwNCj4gKwkJCQkJCSAgICBt c2Vjc190b19qaWZmaWVzKDYwMDApKTsNCj4gKwkJCWl0NjUwNV9sYW5lX3Rlcm1pbmF0aW9uX29u KGl0NjUwNSk7DQo+ICsJCQlpdDY1MDVfbGFuZV9wb3dlcl9vbihpdDY1MDUpOw0KPiArDQo+ICsJ CQkvKg0KPiArCQkJICogZm9yIHNvbWUgZG9uZ2xlIHdoaWNoIGlzc3VlIEhQRF9pcnENCj4gKwkJ CSAqIHdoZW4gc2luayBjb3VudCBjaGFuZ2UgZnJvbSAgMC0+MQ0KPiArCQkJICogaXQ2NTA1IG5v dCBhYmxlIHRvIHJlY2VpdmUgSFBEX0lSUQ0KPiArCQkJICogaWYgSFcgbmV2ZXIgZ28gaW50byB0 cmFpbmlnIGRvbmUNCj4gKwkJCSAqLw0KPiArDQo+ICsJCQlpZiAoaXQ2NTA1LT5icmFuY2hfZGV2 aWNlICYmIGl0NjUwNS0+c2lua19jb3VudCA9PSAwKQ0KPiArCQkJCXNjaGVkdWxlX3dvcmsoJml0 NjUwNS0+bGlua193b3Jrcyk7DQo+ICsNCj4gKwkJCWlmICghaXQ2NTA1X2dldF92aWRlb19zdGF0 dXMoaXQ2NTA1KSkNCj4gKwkJCQlpdDY1MDVfdmlkZW9fcmVzZXQoaXQ2NTA1KTsNCj4gKw0KPiAr CQkJaXQ2NTA1X2NhbGNfdmlkZW9faW5mbyhpdDY1MDUpOw0KPiArCQl9IGVsc2Ugew0KPiArCQkJ a2ZyZWUoaXQ2NTA1LT5lZGlkKTsNCj4gKwkJCWl0NjUwNS0+ZWRpZCA9IE5VTEw7DQo+ICsJCQlt ZW1zZXQoaXQ2NTA1LT5kcGNkLCAwLCBzaXplb2YoaXQ2NTA1LT5kcGNkKSk7DQo+ICsNCj4gKwkJ CWlmIChpdDY1MDUtPmhkY3BfZGVzaXJlZCkNCj4gKwkJCQlpdDY1MDVfc3RvcF9oZGNwKGl0NjUw NSk7DQo+ICsNCj4gKwkJCWl0NjUwNV92aWRlb19kaXNhYmxlKGl0NjUwNSk7DQo+ICsJCQlpdDY1 MDVfZGlzYWJsZV9hdWRpbyhpdDY1MDUpOw0KPiArCQkJaXQ2NTA1X3N0b3BfbGlua190cmFpbihp dDY1MDUpOw0KPiArCQkJaXQ2NTA1X2xhbmVfb2ZmKGl0NjUwNSk7DQo+ICsJCQlyZXR1cm47DQo+ ICsJCX0NCj4gKwl9DQo+ICsNCj4gKwlpZiAocmVnMDYgJiBJTlRfUkVDRUlWRV9IUERfSVJRKSB7 DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImhwZF9pcnEgaW50ZXJydXB0Iik7DQo+ ICsNCj4gKwkJaWYgKGl0NjUwNV9wcm9jZXNzX2hwZF9pcnEoaXQ2NTA1KSA8IDApDQo+ICsJCQlE Uk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJwcm9jZXNzIGhwZF9pcnEgZmFpbCEiKTsNCj4gKwl9 DQo+ICsNCj4gKwlpZiAocmVnMDYgJiBJTlRfU0NEVF9DSEFOR0UpIHsNCj4gKwkJZGF0YSA9IGl0 NjUwNV9nZXRfdmlkZW9fc3RhdHVzKGl0NjUwNSk7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgInZpZGVvIHN0YWJsZSBjaGFuZ2UgaW50ZXJydXB0LCAlcyIsDQo+ICsJCQkJICAgICBk YXRhID8gInN0YWJsZSIgOiAidW5zdGFibGUiKTsNCj4gKwkJaXQ2NTA1X2NhbGNfdmlkZW9faW5m byhpdDY1MDUpOw0KPiArDQo+ICsJCWlmIChkYXRhKQ0KPiArCQkJc2NoZWR1bGVfd29yaygmaXQ2 NTA1LT5saW5rX3dvcmtzKTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAocmVnMDYgJiBJTlRfSERDUF9E T05FKSB7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImhkY3AgZG9uZSBpbnRlcnJ1 cHQiKTsNCj4gKwkJaXQ2NTA1LT5oZGNwX3N0YXR1cyA9IEhEQ1BfQVVUSF9ET05FOw0KPiArCQlp dDY1MDVfc2hvd19oZGNwX2luZm8oaXQ2NTA1KTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAocmVnMDYg JiBJTlRfSERDUF9GQUlMKSB7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImhkY3Ag ZmFpbCBpbnRlcnJ1cHQiKTsNCj4gKwkJaXQ2NTA1LT5oZGNwX3N0YXR1cyA9IEhEQ1BfQVVUSF9J RExFOw0KPiArCQlpdDY1MDVfc2hvd19oZGNwX2luZm8oaXQ2NTA1KTsNCj4gKwkJaXQ2NTA1X3N0 YXJ0X2hkY3AoaXQ2NTA1KTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUw NV9jaGVja19yZWcwNyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsIHVuc2lnbmVkIGludCByZWcwNykN Cj4gK3sNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsNCj4g Kw0KPiArCWlmIChyZWcwNyAmIElOVF9BVVhfQ01EX0ZBSUwpDQo+ICsJCURSTV9ERVZfREVCVUdf RFJJVkVSKGRldiwgIkFVWCBQQyBSZXF1ZXN0IEZhaWwgSW50ZXJydXB0Iik7DQo+ICsNCj4gKwlp ZiAocmVnMDcgJiBJTlRfSERDUF9LU1ZfQ0hFQ0spIHsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklW RVIoZGV2LCAiSERDUCBldmVudCBJbnRlcnJ1cHQiKTsNCj4gKwkJc2NoZWR1bGVfd29yaygmaXQ2 NTA1LT5oZGNwX3dhaXRfa3N2X2xpc3QpOw0KPiArCX0NCj4gKw0KPiArCWlmIChyZWcwNyAmIElO VF9BVURJT19GSUZPX0VSUk9SKSB7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImF1 ZGlvIGZpZm8gZXJyb3IgSW50ZXJydXB0Iik7DQo+ICsNCj4gKwkJaWYgKGl0NjUwNV9hdWRpb19p bnB1dChpdDY1MDUpKQ0KPiArCQkJaXQ2NTA1X2VuYWJsZV9hdWRpbyhpdDY1MDUpOw0KPiArCX0N Cj4gKw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfY2hlY2tfcmVnMDgoc3RydWN0 IGl0NjUwNSAqaXQ2NTA1LCB1bnNpZ25lZCBpbnQgcmVnMDgpDQo+ICt7DQo+ICsJc3RydWN0IGRl dmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsNCj4gKwlpZiAocmVnMDggJiBJ TlRfTElOS19UUkFJTl9GQUlMKSB7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImxp bmsgdHJhaW5pbmcgZmFpbCBpbnRlcnJ1cHQiKTsNCj4gKwkJc2NoZWR1bGVfd29yaygmaXQ2NTA1 LT5saW5rX3dvcmtzKTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAocmVnMDggJiBJTlRfVklEX0ZJRk9f RVJST1IpIHsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAidmlkZW8gZmlmbyBvdmVy ZmxvdyBpbnRlcnJ1cHQiKTsNCj4gKwkJaXQ2NTA1LT5hdXRvX3RyYWluX3JldHJ5ID0gQVVUT19U UkFJTl9SRVRSWTsNCj4gKwkJZmx1c2hfd29yaygmaXQ2NTA1LT5saW5rX3dvcmtzKTsNCj4gKwkJ aXQ2NTA1X3N0b3BfaGRjcChpdDY1MDUpOw0KPiArCQlpdDY1MDVfdmlkZW9fcmVzZXQoaXQ2NTA1 KTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAocmVnMDggJiBJTlRfSU9fTEFUQ0hfRklGT19PVkVSRkxP Vykgew0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJJTyBsYXRjaCBmaWZvIG92ZXJm bG93IGludGVycnVwdCIpOw0KPiArCQlpdDY1MDUtPmF1dG9fdHJhaW5fcmV0cnkgPSBBVVRPX1RS QUlOX1JFVFJZOw0KPiArCQlmbHVzaF93b3JrKCZpdDY1MDUtPmxpbmtfd29ya3MpOw0KPiArCQlp dDY1MDVfc3RvcF9oZGNwKGl0NjUwNSk7DQo+ICsJCWl0NjUwNV92aWRlb19yZXNldChpdDY1MDUp Ow0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGljIGlycXJldHVybl90IGl0NjUwNV9pbnRfdGhy ZWFkZWRfaGFuZGxlcihpbnQgdW51c2VkLCB2b2lkICpkYXRhKQ0KPiArew0KPiArCXN0cnVjdCBp dDY1MDUgKml0NjUwNSA9IGRhdGE7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+ Y2xpZW50LT5kZXY7DQo+ICsJaW50IHJlZzA2LCByZWcwNywgcmVnMDg7DQo+ICsNCj4gKwltc2xl ZXAoMTAwKTsNCj4gKwltdXRleF9sb2NrKCZpdDY1MDUtPmV4dGNvbl9sb2NrKTsNCj4gKw0KPiAr CWlmIChpdDY1MDUtPmVuYWJsZV9kcnZfaG9sZCB8fCAhaXQ2NTA1LT5wb3dlcmVkKQ0KPiArCQln b3RvIHVubG9jazsNCj4gKw0KPiArCXJlZzA2ID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBJTlRfU1RB VFVTXzAxKTsNCj4gKwlyZWcwNyA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgSU5UX1NUQVRVU18wMik7 DQo+ICsJcmVnMDggPSBpdDY1MDVfcmVhZChpdDY1MDUsIElOVF9TVEFUVVNfMDMpOw0KPiArDQo+ ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5UX1NUQVRVU18wMSwgcmVnMDYpOw0KPiArCWl0NjUw NV93cml0ZShpdDY1MDUsIElOVF9TVEFUVVNfMDIsIHJlZzA3KTsNCj4gKwlpdDY1MDVfd3JpdGUo aXQ2NTA1LCBJTlRfU1RBVFVTXzAzLCByZWcwOCk7DQo+ICsNCj4gKwlEUk1fREVWX0RFQlVHX0RS SVZFUihkZXYsICJyZWcwNiA9IDB4JTAyeCIsIHJlZzA2KTsNCj4gKwlEUk1fREVWX0RFQlVHX0RS SVZFUihkZXYsICJyZWcwNyA9IDB4JTAyeCIsIHJlZzA3KTsNCj4gKwlEUk1fREVWX0RFQlVHX0RS SVZFUihkZXYsICJyZWcwOCA9IDB4JTAyeCIsIHJlZzA4KTsNCj4gKwlpdDY1MDVfZGVidWdfcHJp bnQoaXQ2NTA1LCBSRUdfU1lTVEVNX1NUUywgIiIpOw0KPiArDQo+ICsJaWYgKHJlZzA2ICE9IDAp DQo+ICsJCWl0NjUwNV9jaGVja19yZWcwNihpdDY1MDUsIHJlZzA2KTsNCj4gKw0KPiArCWlmIChy ZWcwNyAhPSAwKQ0KPiArCQlpdDY1MDVfY2hlY2tfcmVnMDcoaXQ2NTA1LCByZWcwNyk7DQo+ICsN Cj4gKwlpZiAocmVnMDggIT0gMCkNCj4gKwkJaXQ2NTA1X2NoZWNrX3JlZzA4KGl0NjUwNSwgcmVn MDgpOw0KPiArDQo+ICt1bmxvY2s6DQo+ICsJbXV0ZXhfdW5sb2NrKCZpdDY1MDUtPmV4dGNvbl9s b2NrKTsNCj4gKw0KPiArCXJldHVybiBJUlFfSEFORExFRDsNCj4gK30NCj4gKw0KPiArc3RhdGlj IGludCBpdDY1MDVfcG93ZXJvbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJc3Ry dWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJc3RydWN0IGl0NjUw NV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9ICZpdDY1MDUtPnBkYXRhOw0KPiArCWludCBlcnI7DQo+ ICsNCj4gKwlpZiAoaXQ2NTA1LT5wb3dlcmVkKSB7DQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgIml0NjUwNSBhbHJlYWR5IHBvd2VyZWQgb24iKTsNCj4gKwkJcmV0dXJuIDA7DQo+ICsJ fQ0KPiArDQo+ICsJaWYgKHBkYXRhLT5wd3IxOCkgew0KPiArCQllcnIgPSByZWd1bGF0b3JfZW5h YmxlKHBkYXRhLT5wd3IxOCk7DQo+ICsJCWlmIChlcnIpIHsNCj4gKwkJCURSTV9ERVZfREVCVUdf RFJJVkVSKGRldiwgIkZhaWxlZCB0byBlbmFibGUgVkREMTg6ICVkIiwNCj4gKwkJCQkJICAgICBl cnIpOw0KPiArCQkJcmV0dXJuIGVycjsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCWlmIChwZGF0 YS0+b3ZkZCkgew0KPiArCQkvKiB0aW1lIGludGVydmFsIGJldHdlZW4gSVZERCBhbmQgT1ZERCBh dCBsZWFzdCBiZSAxbXMgKi8NCj4gKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOw0KPiArCQll cnIgPSByZWd1bGF0b3JfZW5hYmxlKHBkYXRhLT5vdmRkKTsNCj4gKwkJaWYgKGVycikgew0KPiAr CQkJcmVndWxhdG9yX2Rpc2FibGUocGRhdGEtPnB3cjE4KTsNCj4gKwkJCXJldHVybiBlcnI7DQo+ ICsJCX0NCj4gKwl9DQo+ICsJLyogdGltZSBpbnRlcnZhbCBiZXR3ZWVuIE9WREQgYW5kIFNZU1JT VE4gYXQgbGVhc3QgYmUgMTBtcyAqLw0KPiArCWlmIChwZGF0YS0+Z3Bpb2RfcmVzZXQpIHsNCj4g KwkJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7DQo+ICsJCWdwaW9kX3NldF92YWx1ZV9jYW5z bGVlcChwZGF0YS0+Z3Bpb2RfcmVzZXQsIDApOw0KPiArCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAw MCk7DQo+ICsJCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChwZGF0YS0+Z3Bpb2RfcmVzZXQsIDEp Ow0KPiArCQl1c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsNCj4gKwl9DQo+ICsNCj4gKwlpdDY1 MDVfcmVzZXRfbG9naWMoaXQ2NTA1KTsNCj4gKwlpdDY1MDVfaW50X21hc2tfZW5hYmxlKGl0NjUw NSk7DQo+ICsJaXQ2NTA1X2luaXQoaXQ2NTA1KTsNCj4gKwlpdDY1MDVfbGFuZV9vZmYoaXQ2NTA1 KTsNCj4gKw0KPiArCWl0NjUwNS0+cG93ZXJlZCA9IHRydWU7DQo+ICsNCj4gKwlyZXR1cm4gMDsN Cj4gK30NCj4gKw0KPiArc3RhdGljIGludCBpdDY1MDVfcG93ZXJvZmYoc3RydWN0IGl0NjUwNSAq aXQ2NTA1KQ0KPiArew0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ ZGV2Ow0KPiArCXN0cnVjdCBpdDY1MDVfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSAmaXQ2NTA1LT5w ZGF0YTsNCj4gKwlpbnQgZXJyOw0KPiArDQo+ICsJaWYgKCFpdDY1MDUtPnBvd2VyZWQpIHsNCj4g KwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAicG93ZXIgaGFkIGJlZW4gYWxyZWFkeSBvZmYi KTsNCj4gKwkJcmV0dXJuIDA7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKHBkYXRhLT5ncGlvZF9yZXNl dCkNCj4gKwkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHBkYXRhLT5ncGlvZF9yZXNldCwgMCk7 DQo+ICsNCj4gKwlpZiAocGRhdGEtPnB3cjE4KSB7DQo+ICsJCWVyciA9IHJlZ3VsYXRvcl9kaXNh YmxlKHBkYXRhLT5wd3IxOCk7DQo+ICsJCWlmIChlcnIpDQo+ICsJCQlyZXR1cm4gZXJyOw0KPiAr CX0NCj4gKw0KPiArCWlmIChwZGF0YS0+b3ZkZCkgew0KPiArCQllcnIgPSByZWd1bGF0b3JfZGlz YWJsZShwZGF0YS0+b3ZkZCk7DQo+ICsJCWlmIChlcnIpDQo+ICsJCQlyZXR1cm4gZXJyOw0KPiAr CX0NCj4gKw0KPiArCWl0NjUwNS0+cG93ZXJlZCA9IGZhbHNlOw0KPiArCWtmcmVlKGl0NjUwNS0+ ZWRpZCk7DQo+ICsJaXQ2NTA1LT5lZGlkID0gTlVMTDsNCj4gKwlpdDY1MDUtPnNpbmtfY291bnQg PSAwOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgc3Ry dWN0IGl0NjUwNSAqY29ubmVjdG9yX3RvX2l0NjUwNShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqYykN Cj4gK3sNCj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGMsIHN0cnVjdCBpdDY1MDUsIGNvbm5lY3Rv cik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X2dldF9tb2RlcyhzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yKQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9 IGNvbm5lY3Rvcl90b19pdDY1MDUoY29ubmVjdG9yKTsNCj4gKwlpbnQgZXJyLCBudW1fbW9kZXMg PSAwLCBpOw0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Ow0K PiArDQo+ICsJaWYgKGl0NjUwNS0+ZWRpZCkNCj4gKwkJcmV0dXJuIGRybV9hZGRfZWRpZF9tb2Rl cyhjb25uZWN0b3IsIGl0NjUwNS0+ZWRpZCk7DQo+ICsNCj4gKwltdXRleF9sb2NrKCZpdDY1MDUt Pm1vZGVfbG9jayk7DQo+ICsJcmVpbml0X2NvbXBsZXRpb24oJml0NjUwNS0+d2FpdF9lZGlkX2Nv bXBsZXRlKTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsNCj4gKwkJaWYgKCFp dDY1MDVfZ2V0X3NpbmtfaHBkX3N0YXR1cyhpdDY1MDUpKQ0KPiArCQkJZ290byB1bmxvY2s7DQo+ ICsNCj4gKwkJaXQ2NTA1LT5lZGlkID0gZHJtX2RvX2dldF9lZGlkKCZpdDY1MDUtPmNvbm5lY3Rv ciwNCj4gKwkJCQkJICAgICAgIGl0NjUwNV9nZXRfZWRpZF9ibG9jaywgaXQ2NTA1KTsNCj4gKw0K PiArCQlpZiAoaXQ2NTA1LT5lZGlkKQ0KPiArCQkJYnJlYWs7DQo+ICsJfQ0KPiArCWlmICghaXQ2 NTA1LT5lZGlkKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHJlYWQgRURJ RCIpOw0KPiArCQludW1fbW9kZXMgPSAtRUlPOw0KPiArCQlnb3RvIHVubG9jazsNCj4gKwl9DQo+ ICsNCj4gKwllcnIgPSBkcm1fY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3Rv ciwgaXQ2NTA1LT5lZGlkKTsNCj4gKwlpZiAoZXJyKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2 LCAiRmFpbGVkIHRvIHVwZGF0ZSBFRElEIHByb3BlcnR5OiAlZCIsIGVycik7DQo+ICsJCW51bV9t b2RlcyA9IGVycjsNCj4gKwkJZ290byB1bmxvY2s7DQo+ICsJfQ0KPiArDQo+ICsJbnVtX21vZGVz ID0gZHJtX2FkZF9lZGlkX21vZGVzKGNvbm5lY3RvciwgaXQ2NTA1LT5lZGlkKTsNCj4gKw0KPiAr dW5sb2NrOg0KPiArCWNvbXBsZXRlKCZpdDY1MDUtPndhaXRfZWRpZF9jb21wbGV0ZSk7DQo+ICsJ bXV0ZXhfdW5sb2NrKCZpdDY1MDUtPm1vZGVfbG9jayk7DQo+ICsNCj4gKwlyZXR1cm4gbnVtX21v ZGVzOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVs cGVyX2Z1bmNzIGl0NjUwNV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0gew0KPiArCS5nZXRfbW9k ZXMgPSBpdDY1MDVfZ2V0X21vZGVzLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGVudW0gZHJtX2Nv bm5lY3Rvcl9zdGF0dXMgaXQ2NTA1X2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLA0KPiArCQkJCQkgICAgICAgYm9vbCBmb3JjZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1 ICppdDY1MDUgPSBjb25uZWN0b3JfdG9faXQ2NTA1KGNvbm5lY3Rvcik7DQo+ICsJc3RydWN0IGRl dmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJZW51bSBkcm1fY29ubmVjdG9y X3N0YXR1cyBzdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsNCj4gKw0KPiAr CURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIml0NjUwNS0+c2lua19jb3VudDolZCBwb3dlcmVk OiVkIiwNCj4gKwkJCSAgICAgaXQ2NTA1LT5zaW5rX2NvdW50LCBpdDY1MDUtPnBvd2VyZWQpOw0K PiArDQo+ICsJbXV0ZXhfbG9jaygmaXQ2NTA1LT5tb2RlX2xvY2spOw0KPiArDQo+ICsJaWYgKCFp dDY1MDUtPnBvd2VyZWQpDQo+ICsJCWdvdG8gdW5sb2NrOw0KPiArDQo+ICsJaWYgKGl0NjUwNS0+ ZW5hYmxlX2Rydl9ob2xkKSB7DQo+ICsJCXN0YXR1cyA9IGl0NjUwNV9nZXRfc2lua19ocGRfc3Rh dHVzKGl0NjUwNSkgPw0KPiArCQkJCQljb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCA6DQo+ICsJ CQkJCWNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOw0KPiArCQlnb3RvIHVubG9jazsNCj4g Kwl9DQo+ICsNCj4gKwlpZiAoaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSkgew0K PiArCQlpdDY1MDVfYXV4X29uKGl0NjUwNSk7DQo+ICsJCWl0NjUwNV9kcm1fZHBfbGlua19wcm9i ZSgmaXQ2NTA1LT5hdXgsICZpdDY1MDUtPmxpbmspOw0KPiArCQlpdDY1MDVfZHJtX2RwX2xpbmtf cG93ZXJfdXAoJml0NjUwNS0+YXV4LCAmaXQ2NTA1LT5saW5rKTsNCj4gKwkJaXQ2NTA1LT5hdXRv X3RyYWluX3JldHJ5ID0gQVVUT19UUkFJTl9SRVRSWTsNCj4gKw0KPiArCQlpZiAoaXQ2NTA1LT5k cGNkWzBdID09IDApIHsNCj4gKwkJCWl0NjUwNV9nZXRfZHBjZChpdDY1MDUsIERQX0RQQ0RfUkVW LCBpdDY1MDUtPmRwY2QsDQo+ICsJCQkJCUFSUkFZX1NJWkUoaXQ2NTA1LT5kcGNkKSk7DQo+ICsJ CQlpdDY1MDVfdmFyaWFibGVfY29uZmlnKGl0NjUwNSk7DQo+ICsJCQlpdDY1MDVfcGFyc2VfbGlu a19jYXBhYmlsaXRpZXMoaXQ2NTA1KTsNCj4gKwkJfQ0KPiArDQo+ICsJCWl0NjUwNS0+c2lua19j b3VudCA9IERQX0dFVF9TSU5LX0NPVU5UKGl0NjUwNV9kcGNkX3JlYWQoaXQ2NTA1LA0KPiArCQkJ CQkJICAgICAgIERQX1NJTktfQ09VTlQpKTsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2 LCAiaXQ2NTA1LT5zaW5rX2NvdW50OiVkIGJyYW5jaDolZCIsDQo+ICsJCQkJICAgICBpdDY1MDUt PnNpbmtfY291bnQsIGl0NjUwNS0+YnJhbmNoX2RldmljZSk7DQo+ICsNCj4gKwkJaWYgKGl0NjUw NS0+YnJhbmNoX2RldmljZSkgew0KPiArCQkJc3RhdHVzID0gKGl0NjUwNS0+c2lua19jb3VudCAh PSAwKSA/DQo+ICsJCQkJIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkIDoNCj4gKwkJCQkgY29u bmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7DQo+ICsJCX0gZWxzZSB7DQo+ICsJCQlzdGF0dXMg PSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsNCj4gKwkJfQ0KPiArCX0gZWxzZSB7DQo+ICsJ CWl0NjUwNS0+c2lua19jb3VudCA9IDA7DQo+ICsJCW1lbXNldChpdDY1MDUtPmRwY2QsIDAsIHNp emVvZihpdDY1MDUtPmRwY2QpKTsNCj4gKwl9DQo+ICsNCj4gK3VubG9jazoNCj4gKwlpZiAoaXQ2 NTA1LT5jb25uZWN0b3Jfc3RhdHVzICE9IHN0YXR1cykgew0KPiArCQlpdDY1MDUtPmNvbm5lY3Rv cl9zdGF0dXMgPSBzdGF0dXM7DQo+ICsJCWl0NjUwNV9wbHVnZ2VkX3N0YXR1c190b19jb2RlYyhp dDY1MDUpOw0KPiArCX0NCj4gKw0KPiArCW11dGV4X3VubG9jaygmaXQ2NTA1LT5tb2RlX2xvY2sp Ow0KPiArDQo+ICsJcmV0dXJuIHN0YXR1czsNCj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIGl0NjUwNV9jb25uZWN0b3JfZnVuY3MgPSB7DQo+ICsJ LmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsDQo+ ICsJLmRldGVjdCA9IGl0NjUwNV9kZXRlY3QsDQo+ICsJLmRlc3Ryb3kgPSBkcm1fY29ubmVjdG9y X2NsZWFudXAsDQo+ICsJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0 LA0KPiArCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVj dG9yX2R1cGxpY2F0ZV9zdGF0ZSwNCj4gKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRv bWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwNCj4gK307DQo+ICsNCj4gK3N0YXRp YyBpbnQgaXQ2NTA1X2V4dGNvbl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYs DQo+ICsJCQkJICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpDQo+ICt7DQo+ICsJc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1ID0gY29udGFpbmVyX29mKHNlbGYsIHN0cnVjdCBpdDY1MDUsIGV2 ZW50X25iKTsNCj4gKw0KPiArCXNjaGVkdWxlX3dvcmsoJml0NjUwNS0+ZXh0Y29uX3dxKTsNCj4g KwlyZXR1cm4gTk9USUZZX0RPTkU7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9l eHRjb25fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQo+ICt7DQo+ICsJc3RydWN0IGl0 NjUwNSAqaXQ2NTA1ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpdDY1MDUsIGV4dGNvbl93 cSk7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJ aW50IHN0YXRlID0gZXh0Y29uX2dldF9zdGF0ZShpdDY1MDUtPmV4dGNvbiwgRVhUQ09OX0RJU1Bf RFApOw0KPiArCXVuc2lnbmVkIGludCBwd3JvZmZyZXRyeSA9IDA7DQo+ICsNCj4gKwlpZiAoaXQ2 NTA1LT5lbmFibGVfZHJ2X2hvbGQpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCW11dGV4X2xvY2so Jml0NjUwNS0+ZXh0Y29uX2xvY2spOw0KPiArDQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2 LCAiRVhUQ09OX0RJU1BfRFAgPSAweCUwMngiLCBzdGF0ZSk7DQo+ICsJaWYgKHN0YXRlID4gMCkg ew0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJzdGFydCB0byBwb3dlciBvbiIpOw0K PiArCQltc2xlZXAoMTAwKTsNCj4gKwkJaXQ2NTA1X3Bvd2Vyb24oaXQ2NTA1KTsNCj4gKwl9IGVs c2Ugew0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJzdGFydCB0byBwb3dlciBvZmYi KTsNCj4gKwkJd2hpbGUgKGl0NjUwNV9wb3dlcm9mZihpdDY1MDUpICYmIHB3cm9mZnJldHJ5Kysg PCA1KSB7DQo+ICsJCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJwb3dlciBvZmYgZmFpbCAl ZCB0aW1lcyIsDQo+ICsJCQkJCSAgICAgcHdyb2ZmcmV0cnkpOw0KPiArCQl9DQo+ICsNCj4gKwkJ ZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50KGl0NjUwNS0+Y29ubmVjdG9yLmRldik7DQo+ICsJCW1l bXNldChpdDY1MDUtPmRwY2QsIDAsIHNpemVvZihpdDY1MDUtPmRwY2QpKTsNCj4gKwkJRFJNX0RF Vl9ERUJVR19EUklWRVIoZGV2LCAicG93ZXIgb2ZmIGl0NjUwNSBzdWNjZXNzISIpOw0KPiArCX0N Cj4gKw0KPiArCW11dGV4X3VubG9jaygmaXQ2NTA1LT5leHRjb25fbG9jayk7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBpbnQgaXQ2NTA1X3VzZV9ub3RpZmllcl9tb2R1bGUoc3RydWN0IGl0NjUwNSAq aXQ2NTA1KQ0KPiArew0KPiArCWludCByZXQ7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0 NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsNCj4gKwlpdDY1MDUtPmV2ZW50X25iLm5vdGlmaWVyX2Nh bGwgPSBpdDY1MDVfZXh0Y29uX25vdGlmaWVyOw0KPiArCUlOSVRfV09SSygmaXQ2NTA1LT5leHRj b25fd3EsIGl0NjUwNV9leHRjb25fd29yayk7DQo+ICsJcmV0ID0gZGV2bV9leHRjb25fcmVnaXN0 ZXJfbm90aWZpZXIoJml0NjUwNS0+Y2xpZW50LT5kZXYsDQo+ICsJCQkJCSAgICBpdDY1MDUtPmV4 dGNvbiwgRVhUQ09OX0RJU1BfRFAsDQo+ICsJCQkJCSAgICAmaXQ2NTA1LT5ldmVudF9uYik7DQo+ ICsJaWYgKHJldCkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgImZhaWxlZCB0byByZWdpc3Rl ciBub3RpZmllciBmb3IgRFAiKTsNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ICsNCj4gKwlz Y2hlZHVsZV93b3JrKCZpdDY1MDUtPmV4dGNvbl93cSk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4g K30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X3JlbW92ZV9ub3RpZmllcl9tb2R1bGUoc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1KQ0KPiArew0KPiArCWlmIChpdDY1MDUtPmV4dGNvbikgew0KPiAr CQlkZXZtX2V4dGNvbl91bnJlZ2lzdGVyX25vdGlmaWVyKCZpdDY1MDUtPmNsaWVudC0+ZGV2LA0K PiArCQkJCQkJaXQ2NTA1LT5leHRjb24sCUVYVENPTl9ESVNQX0RQLA0KPiArCQkJCQkJJml0NjUw NS0+ZXZlbnRfbmIpOw0KPiArDQo+ICsJCWZsdXNoX3dvcmsoJml0NjUwNS0+ZXh0Y29uX3dxKTsN Cj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIF9fbWF5YmVfdW51c2VkIGl0NjUwNV9k ZWxheWVkX2F1ZGlvKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCj4gK3sNCj4gKwlzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl0NjUwNSwNCj4gKwkJ CQkJICAgICBkZWxheWVkX2F1ZGlvLndvcmspOw0KPiArDQo+ICsJRFJNX0RFVl9ERUJVR19EUklW RVIoJml0NjUwNS0+Y2xpZW50LT5kZXYsICJzdGFydCIpOw0KPiArDQo+ICsJaWYgKCFpdDY1MDUt PnBvd2VyZWQpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCWlmICghaXQ2NTA1LT5lbmFibGVfZHJ2 X2hvbGQpDQo+ICsJCWl0NjUwNV9lbmFibGVfYXVkaW8oaXQ2NTA1KTsNCj4gK30NCj4gKw0KPiAr c3RhdGljIGludCBfX21heWJlX3VudXNlZCBpdDY1MDVfYXVkaW9fc2V0dXBfaHdfcGFyYW1zKHN0 cnVjdCBpdDY1MDUgKml0NjUwNSwNCj4gKwkJCQkJc3RydWN0IGhkbWlfY29kZWNfcGFyYW1zICpw YXJhbXMpDQo+ICt7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5k ZXY7DQo+ICsJaW50IGkgPSAwOw0KPiArDQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAi JXMgJWQgSHosICVkIGJpdCwgJWQgY2hhbm5lbHNcbiIsIF9fZnVuY19fLA0KPiArCQkJICAgICBw YXJhbXMtPnNhbXBsZV9yYXRlLCBwYXJhbXMtPnNhbXBsZV93aWR0aCwNCj4gKwkJCSAgICAgcGFy YW1zLT5jZWEuY2hhbm5lbHMpOw0KPiArDQo+ICsJaWYgKCFpdDY1MDUtPmJyaWRnZS5lbmNvZGVy KQ0KPiArCQlyZXR1cm4gLUVOT0RFVjsNCj4gKw0KPiArCWlmIChwYXJhbXMtPmNlYS5jaGFubmVs cyA8PSAxIHx8IHBhcmFtcy0+Y2VhLmNoYW5uZWxzID4gOCkgew0KPiArCQlEUk1fREVWX0RFQlVH X0RSSVZFUihkZXYsICJjaGFubmVsIG51bWJlcjogJWQgbm90IHN1cHBvcnQiLA0KPiArCQkJCSAg ICAgaXQ2NTA1LT5hdWRpby5jaGFubmVsX2NvdW50KTsNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ ICsJfQ0KPiArDQo+ICsJaXQ2NTA1LT5hdWRpby5jaGFubmVsX2NvdW50ID0gcGFyYW1zLT5jZWEu Y2hhbm5lbHM7DQo+ICsNCj4gKwl3aGlsZSAoaSA8IEFSUkFZX1NJWkUoYXVkaW9fc2FtcGxlX3Jh dGVfbWFwKSAmJg0KPiArCSAgICAgICBwYXJhbXMtPnNhbXBsZV9yYXRlICE9DQo+ICsJCSAgICAg ICBhdWRpb19zYW1wbGVfcmF0ZV9tYXBbaV0uc2FtcGxlX3JhdGVfdmFsdWUpIHsNCj4gKwkJaSsr Ow0KPiArCX0NCj4gKwlpZiAoaSA9PSBBUlJBWV9TSVpFKGF1ZGlvX3NhbXBsZV9yYXRlX21hcCkp IHsNCj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAic2FtcGxlIHJhdGU6ICVkIEh6IG5v dCBzdXBwb3J0IiwNCj4gKwkJCQkgICAgIHBhcmFtcy0+c2FtcGxlX3JhdGUpOw0KPiArCQlyZXR1 cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsJaXQ2NTA1LT5hdWRpby5zYW1wbGVfcmF0ZSA9IGF1ZGlv X3NhbXBsZV9yYXRlX21hcFtpXS5yYXRlOw0KPiArDQo+ICsJc3dpdGNoIChwYXJhbXMtPnNhbXBs ZV93aWR0aCkgew0KPiArCWNhc2UgMTY6DQo+ICsJCWl0NjUwNS0+YXVkaW8ud29yZF9sZW5ndGgg PSBXT1JEX0xFTkdUSF8xNkJJVDsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSAxODoNCj4gKwkJaXQ2 NTA1LT5hdWRpby53b3JkX2xlbmd0aCA9IFdPUkRfTEVOR1RIXzE4QklUOw0KPiArCQlicmVhazsN Cj4gKwljYXNlIDIwOg0KPiArCQlpdDY1MDUtPmF1ZGlvLndvcmRfbGVuZ3RoID0gV09SRF9MRU5H VEhfMjBCSVQ7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgMjQ6DQo+ICsJY2FzZSAzMjoNCj4gKwkJ aXQ2NTA1LT5hdWRpby53b3JkX2xlbmd0aCA9IFdPUkRfTEVOR1RIXzI0QklUOw0KPiArCQlicmVh azsNCj4gKwlkZWZhdWx0Og0KPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJ3b3JkbGVu Z3RoOiAlZCBiaXQgbm90IHN1cHBvcnQiLA0KPiArCQkJCSAgICAgcGFyYW1zLT5zYW1wbGVfd2lk dGgpOw0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4g K30NCj4gKw0KPiArc3RhdGljIHZvaWQgX19tYXliZV91bnVzZWQgaXQ2NTA1X2F1ZGlvX3NodXRk b3duKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2 NTA1ICppdDY1MDUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gKw0KPiArCWlmIChpdDY1MDUt PnBvd2VyZWQpDQo+ICsJCWl0NjUwNV9kaXNhYmxlX2F1ZGlvKGl0NjUwNSk7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgaXQ2NTA1X2F1ZGlvX2hvb2tfcGx1Z2dlZF9j YihzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+ICsJCQkJCQkgICAgICAgdm9pZCAqZGF0YSwNCj4gKwkJ CQkJCSAgICAgICBoZG1pX2NvZGVjX3BsdWdnZWRfY2IgZm4sDQo+ICsJCQkJCQkgICAgICAgc3Ry dWN0IGRldmljZSAqY29kZWNfZGV2KQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9 IGRhdGE7DQo+ICsNCj4gKwlpdDY1MDUtPnBsdWdnZWRfY2IgPSBmbjsNCj4gKwlpdDY1MDUtPmNv ZGVjX2RldiA9IGNvZGVjX2RldjsNCj4gKwlpdDY1MDVfcGx1Z2dlZF9zdGF0dXNfdG9fY29kZWMo aXQ2NTA1KTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5l IHN0cnVjdCBpdDY1MDUgKmJyaWRnZV90b19pdDY1MDUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRn ZSkNCj4gK3sNCj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGJyaWRnZSwgc3RydWN0IGl0NjUwNSwg YnJpZGdlKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaXQ2NTA1X2JyaWRnZV9tb2RlX3Nl dChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLA0KPiArCQkJCSAgIGNvbnN0IHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlLA0KPiArCQkJCSAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICphZGp1c3RlZF9tb2RlKQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGJy aWRnZV90b19pdDY1MDUoYnJpZGdlKTsNCj4gKwlzdHJ1Y3QgaGRtaV9hdmlfaW5mb2ZyYW1lIGZy YW1lOw0KPiArCWludCBlcnI7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xp ZW50LT5kZXY7DQo+ICsNCj4gKwlpZiAoV0FSTl9PTighaXQ2NTA1LT5wb3dlcmVkKSkNCj4gKwkJ cmV0dXJuOw0KPiArDQo+ICsJbXV0ZXhfbG9jaygmaXQ2NTA1LT5tb2RlX2xvY2spOw0KPiArDQo+ ICsJZXJyID0gZHJtX2hkbWlfYXZpX2luZm9mcmFtZV9mcm9tX2Rpc3BsYXlfbW9kZSgmZnJhbWUs DQo+ICsJCQkJCQkgICAgICAgJml0NjUwNS0+Y29ubmVjdG9yLA0KPiArCQkJCQkJICAgICAgIGFk anVzdGVkX21vZGUpOw0KPiArCWlmIChlcnIpIHsNCj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJG YWlsZWQgdG8gc2V0dXAgQVZJIGluZm9mcmFtZTogJWQiLCBlcnIpOw0KPiArCQlnb3RvIHVubG9j azsNCj4gKwl9DQo+ICsNCj4gKwlpdDY1MDVfdXBkYXRlX3ZpZGVvX3BhcmFtZXRlcihpdDY1MDUs IGFkanVzdGVkX21vZGUpOw0KPiArDQo+ICsJZXJyID0gaXQ2NTA1X3NlbmRfdmlkZW9faW5mb2Zy YW1lKGl0NjUwNSwgJmZyYW1lKTsNCj4gKwlpZiAoZXJyKQ0KPiArCQlEUk1fREVWX0VSUk9SKGRl diwgIkZhaWxlZCB0byBzZW5kIEFWSSBpbmZvZnJhbWU6ICVkIiwgZXJyKTsNCj4gKw0KPiArdW5s b2NrOg0KPiArCW11dGV4X3VubG9jaygmaXQ2NTA1LT5tb2RlX2xvY2spOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgaW50IGl0NjUwNV9icmlkZ2VfYXR0YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlk Z2UsDQo+ICsJCQkJZW51bSBkcm1fYnJpZGdlX2F0dGFjaF9mbGFncyBmbGFncykNCj4gK3sNCj4g KwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBicmlkZ2VfdG9faXQ2NTA1KGJyaWRnZSk7DQo+ICsJ c3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ICsJaW50IGVycjsN Cj4gKw0KPiArCWlmIChmbGFncyAmIERSTV9CUklER0VfQVRUQUNIX05PX0NPTk5FQ1RPUikgew0K PiArCQlEUk1fRVJST1IoIkZpeCBicmlkZ2UgZHJpdmVyIHRvIG1ha2UgY29ubmVjdG9yIG9wdGlv bmFsISIpOw0KPiArCQlyZXR1cm4gMDsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoIWJyaWRnZS0+ZW5j b2Rlcikgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIlBhcmVudCBlbmNvZGVyIG9iamVjdCBu b3QgZm91bmQiKTsNCj4gKwkJcmV0dXJuIC1FTk9ERVY7DQo+ICsJfQ0KPiArDQo+ICsJZXJyID0g ZHJtX2Nvbm5lY3Rvcl9pbml0KGJyaWRnZS0+ZGV2LCAmaXQ2NTA1LT5jb25uZWN0b3IsDQo+ICsJ CQkJICZpdDY1MDVfY29ubmVjdG9yX2Z1bmNzLA0KPiArCQkJCSBEUk1fTU9ERV9DT05ORUNUT1Jf RGlzcGxheVBvcnQpOw0KPiArCWlmIChlcnIgPCAwKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2 LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgY29ubmVjdG9yOiAlZCIsIGVycik7DQo+ICsJCXJldHVy biBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZpdDY1MDUt PmNvbm5lY3RvciwNCj4gKwkJCQkgJml0NjUwNV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsNCj4g Kw0KPiArCWl0NjUwNS0+Y29ubmVjdG9yLnBvbGxlZCA9IERSTV9DT05ORUNUT1JfUE9MTF9IUEQ7 DQo+ICsNCj4gKwllcnIgPSBkcm1fY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZpdDY1MDUtPmNv bm5lY3RvciwgYnJpZGdlLT5lbmNvZGVyKTsNCj4gKwlpZiAoZXJyIDwgMCkgew0KPiArCQlEUk1f REVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBsaW5rIHVwIGNvbm5lY3RvciB0byBlbmNvZGVyOiAl ZCIsDQo+ICsJCQkgICAgICBlcnIpOw0KPiArCQlnb3RvIGNsZWFudXBfY29ubmVjdG9yOw0KPiAr CX0NCj4gKw0KPiArCWVyciA9IGRybV9jb25uZWN0b3JfcmVnaXN0ZXIoJml0NjUwNS0+Y29ubmVj dG9yKTsNCj4gKwlpZiAoZXJyIDwgMCkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxl ZCB0byByZWdpc3RlciBjb25uZWN0b3I6ICVkIiwgZXJyKTsNCj4gKwkJZ290byBjbGVhbnVwX2Nv bm5lY3RvcjsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoaXQ2NTA1LT5leHRjb24pIHsNCj4gKwkJZXJy ID0gaXQ2NTA1X3VzZV9ub3RpZmllcl9tb2R1bGUoaXQ2NTA1KTsNCj4gKwkJaWYgKGVyciA8IDAp IHsNCj4gKwkJCWRybV9jb25uZWN0b3JfdW5yZWdpc3RlcigmaXQ2NTA1LT5jb25uZWN0b3IpOw0K PiArCQkJZ290byBjbGVhbnVwX2Nvbm5lY3RvcjsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCXJl dHVybiAwOw0KPiArDQo+ICtjbGVhbnVwX2Nvbm5lY3RvcjoNCj4gKwlkcm1fY29ubmVjdG9yX2Ns ZWFudXAoJml0NjUwNS0+Y29ubmVjdG9yKTsNCj4gKwlyZXR1cm4gZXJyOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgdm9pZCBpdDY1MDVfYnJpZGdlX2RldGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJp ZGdlKQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGJyaWRnZV90b19pdDY1MDUo YnJpZGdlKTsNCj4gKw0KPiArCWZsdXNoX3dvcmsoJml0NjUwNS0+bGlua193b3Jrcyk7DQo+ICsJ aXQ2NTA1X3JlbW92ZV9ub3RpZmllcl9tb2R1bGUoaXQ2NTA1KTsNCj4gKwlkcm1fY29ubmVjdG9y X3VucmVnaXN0ZXIoJml0NjUwNS0+Y29ubmVjdG9yKTsNCj4gKwlkcm1fY29ubmVjdG9yX2NsZWFu dXAoJml0NjUwNS0+Y29ubmVjdG9yKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGVudW0gZHJtX21v ZGVfc3RhdHVzDQo+ICtpdDY1MDVfYnJpZGdlX21vZGVfdmFsaWQoc3RydWN0IGRybV9icmlkZ2Ug KmJyaWRnZSwNCj4gKwkJCSBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyAqaW5mbywNCj4g KwkJCSBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkNCj4gK3sNCj4gKwlzdHJ1 Y3QgaXQ2NTA1ICppdDY1MDUgPSBicmlkZ2VfdG9faXQ2NTA1KGJyaWRnZSk7DQo+ICsNCj4gKwlp ZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkNCj4gKwkJcmV0dXJuIE1P REVfTk9fSU5URVJMQUNFOw0KPiArDQo+ICsJaWYgKG1vZGUtPmNsb2NrID4gRFBJX1BJWEVMX0NM S19NQVgpDQo+ICsJCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7DQo+ICsNCj4gKwlpdDY1MDUtPnZp ZGVvX2luZm8uY2xvY2sgPSBtb2RlLT5jbG9jazsNCj4gKw0KPiArCXJldHVybiBNT0RFX09LOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfYnJpZGdlX2VuYWJsZShzdHJ1Y3QgZHJt X2JyaWRnZSAqYnJpZGdlKQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGJyaWRn ZV90b19pdDY1MDUoYnJpZGdlKTsNCj4gKw0KPiArCWl0NjUwNV9pbnRfbWFza19lbmFibGUoaXQ2 NTA1KTsNCj4gKwlpdDY1MDVfdmlkZW9fcmVzZXQoaXQ2NTA1KTsNCj4gK30NCj4gKw0KPiArc3Rh dGljIHZvaWQgaXQ2NTA1X2JyaWRnZV9kaXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2Up DQo+ICt7DQo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gYnJpZGdlX3RvX2l0NjUwNShicmlk Z2UpOw0KPiArDQo+ICsJaWYgKGl0NjUwNS0+cG93ZXJlZCkNCj4gKwkJaXQ2NTA1X3ZpZGVvX2Rp c2FibGUoaXQ2NTA1KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9z dGF0dXMNCj4gK2l0NjUwNV9icmlkZ2VfZGV0ZWN0KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2Up DQo+ICt7DQo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gYnJpZGdlX3RvX2l0NjUwNShicmlk Z2UpOw0KPiArDQo+ICsJcmV0dXJuIGl0NjUwNV9kZXRlY3QoJml0NjUwNS0+Y29ubmVjdG9yLCAw KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHN0cnVjdCBlZGlkICppdDY1MDVfYnJpZGdlX2dldF9l ZGlkKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsDQo+ICsJCQkJCSAgIHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IpDQo+ICt7DQo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gYnJp ZGdlX3RvX2l0NjUwNShicmlkZ2UpOw0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUt PmNsaWVudC0+ZGV2Ow0KPiArCXN0cnVjdCBlZGlkICplZGlkOw0KPiArDQo+ICsJZWRpZCA9IGRy bV9kb19nZXRfZWRpZCgmaXQ2NTA1LT5jb25uZWN0b3IsIGl0NjUwNV9nZXRfZWRpZF9ibG9jaywN Cj4gKwkJCSAgICAgICBpdDY1MDUpOw0KPiArDQo+ICsJaWYgKCFlZGlkKSB7DQo+ICsJCURSTV9E RVZfREVCVUdfRFJJVkVSKGRldiwgImZhaWxlZCB0byBnZXQgZWRpZCEiKTsNCj4gKwkJcmV0dXJu IE5VTEw7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIGVkaWQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgZHJtX2JyaWRnZV9mdW5jcyBpdDY1MDVfYnJpZGdlX2Z1bmNzID0gew0K PiArCS5hdHRhY2ggPSBpdDY1MDVfYnJpZGdlX2F0dGFjaCwNCj4gKwkuZGV0YWNoID0gaXQ2NTA1 X2JyaWRnZV9kZXRhY2gsDQo+ICsJLm1vZGVfdmFsaWQgPSBpdDY1MDVfYnJpZGdlX21vZGVfdmFs aWQsDQo+ICsJLm1vZGVfc2V0ID0gaXQ2NTA1X2JyaWRnZV9tb2RlX3NldCwNCj4gKwkuZW5hYmxl ID0gaXQ2NTA1X2JyaWRnZV9lbmFibGUsDQo+ICsJLmRpc2FibGUgPSBpdDY1MDVfYnJpZGdlX2Rp c2FibGUsDQo+ICsJLmRldGVjdCA9IGl0NjUwNV9icmlkZ2VfZGV0ZWN0LA0KPiArCS5nZXRfZWRp ZCA9IGl0NjUwNV9icmlkZ2VfZ2V0X2VkaWQsDQo+ICt9Ow0KPiArDQo+ICsjaWZkZWYgQ09ORklH X1BNX1NMRUVQDQo+ICsNCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X2JyaWRnZV9yZXN1bWUoc3RydWN0 IGRldmljZSAqZGV2KQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGRldl9nZXRf ZHJ2ZGF0YShkZXYpOw0KPiArDQo+ICsJcmV0dXJuIGl0NjUwNV9wb3dlcm9uKGl0NjUwNSk7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X2JyaWRnZV9zdXNwZW5kKHN0cnVjdCBkZXZp Y2UgKmRldikNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBkZXZfZ2V0X2RydmRh dGEoZGV2KTsNCj4gKw0KPiArCXJldHVybiBpdDY1MDVfcG93ZXJvZmYoaXQ2NTA1KTsNCj4gK30N Cj4gKw0KPiArc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKGl0NjUwNV9icmlkZ2VfcG1fb3BzLCBp dDY1MDVfYnJpZGdlX3N1c3BlbmQsDQo+ICsJCQkgaXQ2NTA1X2JyaWRnZV9yZXN1bWUpOw0KPiAr DQo+ICsjZW5kaWYNCj4gKw0KPiArc3RhdGljIGludCBpdDY1MDVfaW5pdF9wZGF0YShzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDUpDQo+ICt7DQo+ICsJc3RydWN0IGl0NjUwNV9wbGF0Zm9ybV9kYXRhICpw ZGF0YSA9ICZpdDY1MDUtPnBkYXRhOw0KPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUt PmNsaWVudC0+ZGV2Ow0KPiArDQo+ICsJLyogMS4wViBkaWdpdGFsIGNvcmUgcG93ZXIgcmVndWxh dG9yICAqLw0KPiArCXBkYXRhLT5wd3IxOCA9IGRldm1fcmVndWxhdG9yX2dldChkZXYsICJwd3Ix OCIpOw0KPiArCWlmIChJU19FUlIocGRhdGEtPnB3cjE4KSkgew0KPiArCQlEUk1fREVWX0VSUk9S KGRldiwgInB3cjE4IHJlZ3VsYXRvciBub3QgZm91bmQiKTsNCj4gKwkJcmV0dXJuIFBUUl9FUlIo cGRhdGEtPnB3cjE4KTsNCj4gKwl9DQo+ICsNCj4gKwlwZGF0YS0+b3ZkZCA9IGRldm1fcmVndWxh dG9yX2dldChkZXYsICJvdmRkIik7DQo+ICsJaWYgKElTX0VSUihwZGF0YS0+b3ZkZCkpIHsNCj4g KwkJRFJNX0RFVl9FUlJPUihkZXYsICJvdmRkIHJlZ3VsYXRvciBub3QgZm91bmQiKTsNCj4gKwkJ cmV0dXJuIFBUUl9FUlIocGRhdGEtPm92ZGQpOw0KPiArCX0NCj4gKw0KPiArCXBkYXRhLT5ncGlv ZF9yZXNldCA9IGRldm1fZ3Bpb2RfZ2V0KGRldiwgInJlc2V0IiwgR1BJT0RfT1VUX0hJR0gpOw0K PiArCWlmIChJU19FUlIocGRhdGEtPmdwaW9kX3Jlc2V0KSkgew0KPiArCQlEUk1fREVWX0VSUk9S KGRldiwgImdwaW9kX3Jlc2V0IGdwaW8gbm90IGZvdW5kIik7DQo+ICsJCXJldHVybiBQVFJfRVJS KHBkYXRhLT5ncGlvZF9yZXNldCk7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9wYXJzZV9kdChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUp DQo+ICt7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7DQo+ ICsJdTMyICphZmVfc2V0dGluZyA9ICZpdDY1MDUtPmFmZV9zZXR0aW5nOw0KPiArDQo+ICsJaXQ2 NTA1LT5sYW5lX3N3YXBfZGlzYWJsZWQgPQ0KPiArCQlkZXZpY2VfcHJvcGVydHlfcmVhZF9ib29s KGRldiwgIm5vLWxhbmVzd2FwIik7DQo+ICsNCj4gKwlpZiAoaXQ2NTA1LT5sYW5lX3N3YXBfZGlz YWJsZWQpDQo+ICsJCWl0NjUwNS0+bGFuZV9zd2FwID0gZmFsc2U7DQo+ICsNCj4gKwlpZiAoZGV2 aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgImFmZS1zZXR0aW5nIiwgYWZlX3NldHRpbmcpID09 IDApIHsNCj4gKwkJaWYgKCphZmVfc2V0dGluZyA+PSBBUlJBWV9TSVpFKGFmZV9zZXR0aW5nX3Rh YmxlKSkgew0KPiArCQkJRFJNX0RFVl9FUlJPUihkZXYsICJhZmUgc2V0dGluZyBlcnJvciwgdXNl IGRlZmF1bHQiKTsNCj4gKwkJCSphZmVfc2V0dGluZyA9IDA7DQo+ICsJCX0NCj4gKwl9IGVsc2Ug ew0KPiArCQkqYWZlX3NldHRpbmcgPSAwOw0KPiArCX0NCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZF UihkZXYsICJ1c2luZyBhZmVfc2V0dGluZzogJWQiLCAqYWZlX3NldHRpbmcpOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgc3NpemVfdCBwcmludF90aW1pbmdfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYs DQo+ICsJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpDQo+ICt7 DQo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+ICsJ c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKnZpZCA9ICZpdDY1MDUtPnZpZGVvX2luZm87DQo+ICsJ Y2hhciAqc3RyID0gYnVmLCAqZW5kID0gYnVmICsgUEFHRV9TSVpFOw0KPiArDQo+ICsJaXQ2NTA1 X2NhbGNfdmlkZW9faW5mbyhpdDY1MDUpOw0KPiArCXN0ciArPSBzY25wcmludGYoc3RyLCBlbmQg LSBzdHIsICItLS12aWRlbyB0aW1pbmctLS1cbiIpOw0KPiArCXN0ciArPSBzY25wcmludGYoc3Ry LCBlbmQgLSBzdHIsICJQQ0xLOiVkLiUwM2RNSHpcbiIsDQo+ICsJCQkgdmlkLT5jbG9jayAvIDEw MDAsIHZpZC0+Y2xvY2sgJSAxMDAwKTsNCj4gKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0g c3RyLCAiSFRvdGFsOiVkXG4iLCB2aWQtPmh0b3RhbCk7DQo+ICsJc3RyICs9IHNjbnByaW50Zihz dHIsIGVuZCAtIHN0ciwgIkhBY3RpdmU6JWRcbiIsIHZpZC0+aGRpc3BsYXkpOw0KPiArCXN0ciAr PSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIsICJIRnJvbnRQb3JjaDolZFxuIiwNCj4gKwkJCSB2 aWQtPmhzeW5jX3N0YXJ0IC0gdmlkLT5oZGlzcGxheSk7DQo+ICsJc3RyICs9IHNjbnByaW50Zihz dHIsIGVuZCAtIHN0ciwgIkhTeW5jV2lkdGg6JWRcbiIsDQo+ICsJCQkgdmlkLT5oc3luY19lbmQg LSB2aWQtPmhzeW5jX3N0YXJ0KTsNCj4gKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3Ry LCAiSEJhY2tQb3JjaDolZFxuIiwNCj4gKwkJCSB2aWQtPmh0b3RhbCAtIHZpZC0+aHN5bmNfZW5k KTsNCj4gKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAiVlRvdGFsOiVkXG4iLCB2 aWQtPnZ0b3RhbCk7DQo+ICsJc3RyICs9IHNjbnByaW50ZihzdHIsIGVuZCAtIHN0ciwgIlZBY3Rp dmU6JWRcbiIsIHZpZC0+dmRpc3BsYXkpOw0KPiArCXN0ciArPSBzY25wcmludGYoc3RyLCBlbmQg LSBzdHIsICJWRnJvbnRQb3JjaDolZFxuIiwNCj4gKwkJCSB2aWQtPnZzeW5jX3N0YXJ0IC0gdmlk LT52ZGlzcGxheSk7DQo+ICsJc3RyICs9IHNjbnByaW50ZihzdHIsIGVuZCAtIHN0ciwgIlZTeW5j V2lkdGg6JWRcbiIsDQo+ICsJCQkgdmlkLT52c3luY19lbmQgLSB2aWQtPnZzeW5jX3N0YXJ0KTsN Cj4gKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAiVkJhY2tQb3JjaDolZFxuIiwN Cj4gKwkJCSB2aWQtPnZ0b3RhbCAtIHZpZC0+dnN5bmNfZW5kKTsNCj4gKw0KPiArCXJldHVybiBz dHIgLSBidWY7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzc2l6ZV90IGZvcmNlX3B3cm9ub2ZmX3N0 b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwNCj4gKwkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1 dGUgKmF0dHIsDQo+ICsJCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQ0KPiAr ew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiAr CWludCBwd3I7DQo+ICsNCj4gKwlpZiAoa3N0cnRvaW50KGJ1ZiwgMTAsICZwd3IpIDwgMCkNCj4g KwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwlpZiAocHdyKQ0KPiArCQlpdDY1MDVfcG93ZXJv bihpdDY1MDUpOw0KPiArCWVsc2UNCj4gKwkJaXQ2NTA1X3Bvd2Vyb2ZmKGl0NjUwNSk7DQo+ICsN Cj4gKwlyZXR1cm4gY291bnQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzc2l6ZV90IGVuYWJsZV9k cnZfaG9sZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwNCj4gKwkJCQkgICAgc3RydWN0IGRldmlj ZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1ICpp dDY1MDUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gKw0KPiArCXJldHVybiBzY25wcmludGYo YnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgaXQ2NTA1LT5lbmFibGVfZHJ2X2hvbGQpOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgc3NpemVfdCBlbmFibGVfZHJ2X2hvbGRfc3RvcmUoc3RydWN0IGRldmlj ZSAqZGV2LA0KPiArCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsDQo+ICsJ CQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkNCj4gK3sNCj4gKwlzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gKwl1bnNpZ25lZCBpbnQg ZHJ2X2hvbGQ7DQo+ICsNCj4gKwlpZiAoa3N0cnRvaW50KGJ1ZiwgMTAsICZkcnZfaG9sZCkgPCAw KQ0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArCWl0NjUwNS0+ZW5hYmxlX2Rydl9ob2xk ID0gISFkcnZfaG9sZDsNCj4gKw0KPiArCWlmIChpdDY1MDUtPmVuYWJsZV9kcnZfaG9sZCkgew0K PiArCQlpdDY1MDVfaW50X21hc2tfZGlzYWJsZShpdDY1MDUpOw0KPiArCX0gZWxzZSB7DQo+ICsJ CWl0NjUwNV9jbGVhcl9pbnQoaXQ2NTA1KTsNCj4gKwkJaXQ2NTA1X2ludF9tYXNrX2VuYWJsZShp dDY1MDUpOw0KPiArDQo+ICsJCWlmIChpdDY1MDUtPnBvd2VyZWQpIHsNCj4gKwkJCWl0NjUwNS0+ Y29ubmVjdG9yX3N0YXR1cyA9DQo+ICsJCQkJCWl0NjUwNV9nZXRfc2lua19ocGRfc3RhdHVzKGl0 NjUwNSkgPw0KPiArCQkJCQljb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCA6DQo+ICsJCQkJCWNv bm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOw0KPiArCQl9IGVsc2Ugew0KPiArCQkJaXQ2NTA1 LT5jb25uZWN0b3Jfc3RhdHVzID0NCj4gKwkJCQkJY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0 ZWQ7DQo+ICsJCX0NCj4gKwl9DQo+ICsJcmV0dXJuIGNvdW50Ow0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgREVWSUNFX0FUVFJfUk8ocHJpbnRfdGltaW5nKTsNCj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9X Tyhmb3JjZV9wd3Jvbm9mZik7DQo+ICtzdGF0aWMgREVWSUNFX0FUVFJfUlcoZW5hYmxlX2Rydl9o b2xkKTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKml0NjUwNV9hdHRy c1tdID0gew0KPiArCSZkZXZfYXR0cl9wcmludF90aW1pbmcuYXR0ciwNCj4gKwkmZGV2X2F0dHJf Zm9yY2VfcHdyb25vZmYuYXR0ciwNCj4gKwkmZGV2X2F0dHJfZW5hYmxlX2Rydl9ob2xkLmF0dHIs DQo+ICsJTlVMTCwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9zaHV0ZG93bihz dHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQ0KPiArew0KPiArCXN0cnVjdCBpdDY1MDUgKml0NjUw NSA9IGRldl9nZXRfZHJ2ZGF0YSgmY2xpZW50LT5kZXYpOw0KPiArDQo+ICsJa2ZyZWUoaXQ2NTA1 LT5lZGlkKTsNCj4gKwlpdDY1MDUtPmVkaWQgPSBOVUxMOw0KPiArDQo+ICsJaWYgKGl0NjUwNS0+ cG93ZXJlZCkNCj4gKwkJaXQ2NTA1X2xhbmVfb2ZmKGl0NjUwNSk7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBpbnQgaXQ2NTA1X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LA0KPiAr CQkJICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkNCj4gK3sNCj4gKwlzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDU7DQo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJmNsaWVudC0+ZGV2Ow0K PiArCXN0cnVjdCBleHRjb25fZGV2ICpleHRjb247DQo+ICsJaW50IGVyciwgaW50cF9pcnE7DQo+ ICsNCj4gKwlpdDY1MDUgPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LCBzaXplb2YoKml0NjUw NSksIEdGUF9LRVJORUwpOw0KPiArCWlmICghaXQ2NTA1KQ0KPiArCQlyZXR1cm4gLUVOT01FTTsN Cj4gKw0KPiArCW11dGV4X2luaXQoJml0NjUwNS0+ZXh0Y29uX2xvY2spOw0KPiArCW11dGV4X2lu aXQoJml0NjUwNS0+bW9kZV9sb2NrKTsNCj4gKwltdXRleF9pbml0KCZpdDY1MDUtPmF1eF9sb2Nr KTsNCj4gKw0KPiArCWl0NjUwNS0+YnJpZGdlLm9mX25vZGUgPSBjbGllbnQtPmRldi5vZl9ub2Rl Ow0KPiArCWl0NjUwNS0+Y29ubmVjdG9yX3N0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29u bmVjdGVkOw0KPiArCWl0NjUwNS0+Y2xpZW50ID0gY2xpZW50Ow0KPiArCWkyY19zZXRfY2xpZW50 ZGF0YShjbGllbnQsIGl0NjUwNSk7DQo+ICsNCj4gKwkvKiBnZXQgZXh0Y29uIGRldmljZSBmcm9t IERUUyAqLw0KPiArCWV4dGNvbiA9IGV4dGNvbl9nZXRfZWRldl9ieV9waGFuZGxlKGRldiwgMCk7 DQo+ICsJaWYgKFBUUl9FUlIoZXh0Y29uKSA9PSAtRVBST0JFX0RFRkVSKQ0KPiArCQlyZXR1cm4g LUVQUk9CRV9ERUZFUjsNCj4gKwlpZiAoSVNfRVJSKGV4dGNvbikpIHsNCj4gKwkJRFJNX0RFVl9F UlJPUihkZXYsICJjYW4gbm90IGdldCBleHRjb24gZGV2aWNlISIpOw0KPiArCQlyZXR1cm4gUFRS X0VSUihleHRjb24pOw0KPiArCX0NCj4gKw0KPiArCWl0NjUwNS0+ZXh0Y29uID0gZXh0Y29uOw0K PiArDQo+ICsJaXQ2NTA1LT5yZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsICZp dDY1MDVfcmVnbWFwX2NvbmZpZyk7DQo+ICsJaWYgKElTX0VSUihpdDY1MDUtPnJlZ21hcCkpIHsN Cj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJyZWdtYXAgaTJjIGluaXQgZmFpbGVkIik7DQo+ICsJ CWVyciA9IFBUUl9FUlIoaXQ2NTA1LT5yZWdtYXApOw0KPiArCQlyZXR1cm4gZXJyOw0KPiArCX0N Cj4gKw0KPiArCWVyciA9IGl0NjUwNV9pbml0X3BkYXRhKGl0NjUwNSk7DQo+ICsJaWYgKGVycikg ew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIHBkYXRhOiAl ZCIsIGVycik7DQo+ICsJCXJldHVybiBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJaXQ2NTA1X3BhcnNl X2R0KGl0NjUwNSk7DQo+ICsNCj4gKwlpbnRwX2lycSA9IGNsaWVudC0+aXJxOw0KPiArDQo+ICsJ aWYgKCFpbnRwX2lycSkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBnZXQg SU5UUCBJUlEiKTsNCj4gKwkJZXJyID0gLUVOT0RFVjsNCj4gKwkJcmV0dXJuIGVycjsNCj4gKwl9 DQo+ICsNCj4gKwllcnIgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKCZjbGllbnQtPmRldiwg aW50cF9pcnEsIE5VTEwsDQo+ICsJCQkJCWl0NjUwNV9pbnRfdGhyZWFkZWRfaGFuZGxlciwNCj4g KwkJCQkJSVJRRl9UUklHR0VSX0xPVyB8IElSUUZfT05FU0hPVCwNCj4gKwkJCQkJIml0NjUwNS1p bnRwIiwgaXQ2NTA1KTsNCj4gKwlpZiAoZXJyKSB7DQo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAi RmFpbGVkIHRvIHJlcXVlc3QgSU5UUCB0aHJlYWRlZCBJUlE6ICVkIiwNCj4gKwkJCSAgICAgIGVy cik7DQo+ICsJCXJldHVybiBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJLyogUmVnaXN0ZXIgYXV4IGNo YW5uZWwgKi8NCj4gKwlpdDY1MDUtPmF1eC5uYW1lID0gIkRQLUFVWCI7DQo+ICsJaXQ2NTA1LT5h dXguZGV2ID0gZGV2Ow0KPiArCWl0NjUwNS0+YXV4LnRyYW5zZmVyID0gaXQ2NTA1X2F1eF90cmFu c2ZlcjsNCj4gKw0KPiArCWVyciA9IGRybV9kcF9hdXhfcmVnaXN0ZXIoJml0NjUwNS0+YXV4KTsN Cj4gKwlpZiAoZXJyIDwgMCkgew0KPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBy ZWdpc3RlciBhdXg6ICVkIiwgZXJyKTsNCj4gKwkJcmV0dXJuIGVycjsNCj4gKwl9DQo+ICsNCj4g KwlJTklUX1dPUksoJml0NjUwNS0+bGlua193b3JrcywgaXQ2NTA1X2xpbmtfdHJhaW5pbmdfd29y ayk7DQo+ICsJSU5JVF9XT1JLKCZpdDY1MDUtPmhkY3Bfd2FpdF9rc3ZfbGlzdCwgaXQ2NTA1X2hk Y3Bfd2FpdF9rc3ZfbGlzdCk7DQo+ICsJSU5JVF9ERUxBWUVEX1dPUksoJml0NjUwNS0+aGRjcF93 b3JrLCBpdDY1MDVfaGRjcF93b3JrKTsNCj4gKwlpbml0X2NvbXBsZXRpb24oJml0NjUwNS0+d2Fp dF9lZGlkX2NvbXBsZXRlKTsNCj4gKwltZW1zZXQoaXQ2NTA1LT5kcGNkLCAwLCBzaXplb2YoaXQ2 NTA1LT5kcGNkKSk7DQo+ICsJaXQ2NTA1LT5wb3dlcmVkID0gZmFsc2U7DQo+ICsJaXQ2NTA1LT5l bmFibGVfZHJ2X2hvbGQgPSBERUZBVUxUX0RSVl9IT0xEOw0KPiArDQo+ICsJaWYgKERFRkFVTFRf UFdSX09OKQ0KPiArCQlpdDY1MDVfcG93ZXJvbihpdDY1MDUpOw0KPiArDQo+ICsJZXJyID0gc3lz ZnNfY3JlYXRlX2ZpbGVzKCZjbGllbnQtPmRldi5rb2JqLCBpdDY1MDVfYXR0cnMpOw0KPiArCWlm IChlcnIpIHsNCj4gKwkJZHJtX2RwX2F1eF91bnJlZ2lzdGVyKCZpdDY1MDUtPmF1eCk7DQo+ICsJ CXJldHVybiBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJaXQ2NTA1LT5icmlkZ2UuZnVuY3MgPSAmaXQ2 NTA1X2JyaWRnZV9mdW5jczsNCj4gKwlkcm1fYnJpZGdlX2FkZCgmaXQ2NTA1LT5icmlkZ2UpOw0K PiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X2kyY19y ZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkNCj4gK3sNCj4gKwlzdHJ1Y3QgaXQ2NTA1 ICppdDY1MDUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsNCj4gKw0KPiArCWRybV9jb25u ZWN0b3JfdW5yZWdpc3RlcigmaXQ2NTA1LT5jb25uZWN0b3IpOw0KPiArCWRybV9jb25uZWN0b3Jf Y2xlYW51cCgmaXQ2NTA1LT5jb25uZWN0b3IpOw0KPiArCWRybV9icmlkZ2VfcmVtb3ZlKCZpdDY1 MDUtPmJyaWRnZSk7DQo+ICsJZHJtX2RwX2F1eF91bnJlZ2lzdGVyKCZpdDY1MDUtPmF1eCk7DQo+ ICsJc3lzZnNfcmVtb3ZlX2ZpbGVzKCZjbGllbnQtPmRldi5rb2JqLCBpdDY1MDVfYXR0cnMpOw0K PiArCWl0NjUwNV9wb3dlcm9mZihpdDY1MDUpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBpdDY1MDVfaWRbXSA9IHsN Cj4gKwl7ICJpdDY1MDUiLCAwIH0sDQo+ICsJeyB9DQo+ICt9Ow0KPiArDQo+ICtNT0RVTEVfREVW SUNFX1RBQkxFKGkyYywgaXQ2NTA1X2lkKTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBv Zl9kZXZpY2VfaWQgaXQ2NTA1X29mX21hdGNoW10gPSB7DQo+ICsJeyAuY29tcGF0aWJsZSA9ICJp dGUsaXQ2NTA1IiB9LA0KPiArCXsgfQ0KPiArfTsNCj4gKw0KPiArc3RhdGljIHN0cnVjdCBpMmNf ZHJpdmVyIGl0NjUwNV9pMmNfZHJpdmVyID0gew0KPiArCS5kcml2ZXIgPSB7DQo+ICsJCS5uYW1l ID0gIml0NjUwNSIsDQo+ICsJCS5vZl9tYXRjaF90YWJsZSA9IGl0NjUwNV9vZl9tYXRjaCwNCj4g KyNpZmRlZiBDT05GSUdfUE1fU0xFRVANCj4gKwkJLnBtID0gJml0NjUwNV9icmlkZ2VfcG1fb3Bz LA0KPiArI2VuZGlmDQo+ICsJfSwNCj4gKwkucHJvYmUgPSBpdDY1MDVfaTJjX3Byb2JlLA0KPiAr CS5yZW1vdmUgPSBpdDY1MDVfaTJjX3JlbW92ZSwNCj4gKwkuc2h1dGRvd24gPSBpdDY1MDVfc2h1 dGRvd24sDQo+ICsJLmlkX3RhYmxlID0gaXQ2NTA1X2lkLA0KPiArfTsNCj4gKw0KPiArbW9kdWxl X2kyY19kcml2ZXIoaXQ2NTA1X2kyY19kcml2ZXIpOw0KPiArDQo+ICtNT0RVTEVfQVVUSE9SKCJB bGxlbiBDaGVuIDxhbGxlbi5jaGVuQGl0ZS5jb20udHc+Iik7DQo+ICtNT0RVTEVfREVTQ1JJUFRJ T04oIklUNjUwNSBEaXNwbGF5UG9ydCBUcmFuc21pdHRlciBkcml2ZXIiKTsNCj4gK01PRFVMRV9M SUNFTlNFKCJHUEwgdjIiKTsNCg0KLS0gDQpSZWdhcmRzLA0KDQpMYXVyZW50IFBpbmNoYXJ0DQpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwg bWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK