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=-10.5 required=3.0 tests=BAYES_00, CHARSET_FARAWAY_HEADER,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, 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 0CE01C433C1 for ; Wed, 24 Mar 2021 10:13:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A8276619E4 for ; Wed, 24 Mar 2021 10:13:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230035AbhCXKNQ (ORCPT ); Wed, 24 Mar 2021 06:13:16 -0400 Received: from mail.ilitek.com ([60.248.80.92]:44971 "EHLO cello.ilitek.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S229500AbhCXKMq (ORCPT ); Wed, 24 Mar 2021 06:12:46 -0400 X-UUID: be392871f23e44a6a148ceab00b79d03-20210324 X-UUID: be392871f23e44a6a148ceab00b79d03-20210324 Received: from ex1.ili.com.tw [(192.168.1.131)] by cello.ilitek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.12 Build 0701 with TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 128/128) with ESMTP id 678979592; Wed, 24 Mar 2021 18:12:41 +0800 Received: from EX2.ili.com.tw (192.168.1.132) by EX1.ili.com.tw (192.168.1.131) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.2; Wed, 24 Mar 2021 18:12:40 +0800 Received: from EX2.ili.com.tw ([fe80::89a8:5a29:1f3a:8b1f]) by EX2.ili.com.tw ([fe80::89a8:5a29:1f3a:8b1f%4]) with mapi id 15.01.2176.002; Wed, 24 Mar 2021 18:12:40 +0800 From: =?big5?B?Sm9lIEh1bmcgKKx4u8q2pyk=?= To: Dmitry Torokhov CC: "robh+dt@kernel.org" , "devicetree@vger.kernel.org" , "linux-input@vger.kernel.org" , =?big5?B?THVjYSBIc3UgKK59ucXB5Sk=?= Subject: RE: [RESEND v6 2/2] input: touchscreen: Add support for ILITEK Lego Series Thread-Topic: [RESEND v6 2/2] input: touchscreen: Add support for ILITEK Lego Series Thread-Index: AQHXHwfmdHscyKdIqEudoXgW/Vp0nKqRsBSAgAEOe/A= Date: Wed, 24 Mar 2021 10:12:40 +0000 Message-ID: <86e2c2bd38004c409315b32c0e1273a1@ilitek.com> References: <20210322104131.4136679-1-joe_hung@ilitek.com> <20210322104131.4136679-2-joe_hung@ilitek.com> In-Reply-To: Accept-Language: zh-TW, en-US Content-Language: zh-TW X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [192.168.30.42] Content-Type: text/plain; charset="big5" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org SGVsbG8gRG1pdHJ5LA0KDQpUaGFua3MgZm9yIHlvdXIgcXVpY2sgcmVzcG9uc2UsIGFncmVlZCBv biBhbGwgeW91ciBjb21tZW50cy4NCg0KU29tZSBleHBsYW5hdGlvbiByZXBsaWVkIGJsb3cuDQpB bGwgY29tbWVudHMgc2hvdWxkIGJlIHRvb2sgYW5kIG1vZGlmaWVkIGluIFBBVENIIHY3IHNob3J0 bHkuDQoNCk9uIFR1ZSwgTWFyIDIzLCAyMDIxIGF0IDE2OjEzOjI1UE0gLTA3MDAsIERtaXRyeSBU b3Jva2hvdiB3cm90ZQ0KPiBIaSBKb2UsDQo+IA0KPiBPbiBNb24sIE1hciAyMiwgMjAyMSBhdCAw Njo0MTozMVBNICswODAwLCBKb2UgSHVuZyB3cm90ZToNCj4gPiBBZGQgc3VwcG9ydCBmb3IgSUxJ VEVLIExlZ28gc2VyaWVzIG9mIHRvdWNoIGRldmljZXMuDQo+ID4gTGVnbyBzZXJpZXMgaW5jbHVk ZXMgSUxJVEVLIDIxM1gvMjNYWC8yNVhYLg0KPiA+IA0KPiA+IFRlc3RlZC9wYXNzZWQgd2l0aCBl dmFsdWF0aW9uIGJvYXJkIHdpdGggSUxJMjUyMC8yMzIyIElDLg0KPiANCj4gVGhlIGRyaXZlciBs b29rcyBwcmV0dHkgZ29vZCwgYSBmZXcgbW9yZSBjb21tZW50cyB0aG91Z2guDQo+IA0KPiA+IA0K PiA+IFNpZ25lZC1vZmYtYnk6IEpvZSBIdW5nIDxqb2VfaHVuZ0BpbGl0ZWsuY29tPg0KPiA+IC0t LQ0KPiA+IENoYW5nZXMgaW4gdjY6DQo+ID4gICAtIE1vZGlmaWVkIHByaW50IG1lc3NhZ2UgZnJv bSBzeXNmcyBmaWxlIG5vZGUNCj4gPiAgIC0gQWRkIGkyYyBmdW5jdGlvbmFsaXR5IGNoZWNrIGlu IHByb2JlIGZ1bmN0aW9uDQo+ID4gICAtIEFkZCBzaW5nbGUgdG91Y2ggQUJTX1gvQUJTX1kgcmVn aXN0cmF0aW9uDQo+ID4gICAtIFJlbW92ZSBUT1VDSF9NQUpPUi9XSURUSF9NQUpPUg0KPiA+IA0K PiA+IENoYW5nZXMgaW4gdjU6DQo+ID4gICAtIE5vbmUNCj4gPiANCj4gPiBDaGFuZ2VzIGluIHY0 Og0KPiA+ICAgLSBSZW1vdmUgdW51c2VkIGlubGN1ZGUgaGVhZGVyIGZpbGUNCj4gPiAgIC0gUmVt b3ZlIHBhcmVudGhlc2lzIGZvciBzY2FsYXIgdmFsdWVzDQo+ID4gICAtIFBsYWNlIHRvIHVzZSBz dGFuZGFyZCBtYWNybyBESVZfUk9VTkRfVVANCj4gPiAgIC0gUmVtb3ZlIHVudXNlZC91bnJlcXVp cmVkIG1lbWJlciBvZiBzdHJ1Y3QNCj4gPiAgIC0gUmVtb3ZlIHJldHJpZXMgd2hlbiBJMkMgdHJh bnNmZXINCj4gPiAgIC0gUmVtb3ZlIGlycV9kaXNhYmxlL2VuYWJsZSB3cmFwcGVyDQo+ID4gICAt IFJlbW92ZSBrZXkgaGFuZGxlcg0KPiA+ICAgLSBBZGp1c3QgdG8gdXNlIGdldF91bmFsaWduZWRf bGUxNi9iZTE2DQo+ID4gICAtIE1vZGlmeSBpbGl0ZWtfcmVzZXQoKSB0byBsZWF2ZSByZXNldCBn cGlvIGluLWFjdGl2ZSBmaW5hbGx5DQo+ID4gICAtIFJlbW92ZSBudWxsIGNoZWNrIGZvciBpbnB1 dCBhcmd1bWVudCB0aGF0IHNob3VsZCBub3QgaGFwcGVuDQo+ID4gICAtIE1vZGlmeSByZXR1cm4g dmFsdWUgZm9yIHJlYWRfdHBfaW5mbygpDQo+ID4gICAtIE1vZGlmeSB0byB1c2UgY29tbW9uIHRv dWNoc2NyZWVuXyogYXBpDQo+ID4gICAtIEFkZCBlcnJvciBoYW5kbGluZyBmb3IgaW5wdXRfbXRf aW5pdF9zbG90cw0KPiA+ICAgLSBNb2RpZnkgaW5wdXQgZmxhZyBmb3IgaXJxIHJlcXVlc3QsIGFu ZCBwYXJzZSBpdCBmcm9tIEFDUEkvRFRTDQo+ID4gICAtIFJldHVybiBzdG9yZWQgdmFsdWUgaW5z dGVhZCBvZiBxdWVyeWluZyB2aWEgSTJDIGluICpfc2hvdyBhcGkNCj4gPiAgIC0gTW9kaWZ5IHRv IHVzZSBkZXZtXyogQVBJcyBhbmQgZ2V0IHJpZCBvZiByZW1vdmUgYXBpDQo+ID4gICAtIEFkZCBQ TSAoc3VzcGVuZC9yZXN1bWUpIGhhbmRsaW5nDQo+ID4gDQo+ID4gQ2hhbmdlcyBpbiB2MzoNCj4g PiAgIC0gTm9uZQ0KPiA+IA0KPiA+IENoYW5nZXMgaW4gdjI6DQo+ID4gICAtIFJlbW92ZSBpcnEt Z3BpbyBhbmQgcmVsYXRlZCBmbG93DQo+ID4gDQo+ID4gIGRyaXZlcnMvaW5wdXQvdG91Y2hzY3Jl ZW4vS2NvbmZpZyAgICAgICAgIHwgIDEyICsNCj4gPiAgZHJpdmVycy9pbnB1dC90b3VjaHNjcmVl bi9NYWtlZmlsZSAgICAgICAgfCAgIDEgKw0KPiA+ICBkcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVu L2lsaXRla190c19pMmMuYyB8IDc1MyANCj4gPiArKysrKysrKysrKysrKysrKysrKysrDQo+ID4g IDMgZmlsZXMgY2hhbmdlZCwgNzY2IGluc2VydGlvbnMoKykNCj4gPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaWxpdGVrX3RzX2kyYy5jDQo+ID4gDQo+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZyANCj4gPiBiL2Ry aXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZw0KPiA+IGluZGV4IGYwMTJmZTc0NmRmMC4u MDNhMTY4NTJkNGJjIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4v S2NvbmZpZw0KPiA+ICsrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZw0KPiA+ IEBAIC0xMzM0LDQgKzEzMzQsMTYgQEAgY29uZmlnIFRPVUNIU0NSRUVOX1pJTklUSVgNCj4gPiAg CSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhl DQo+ID4gIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB6aW5pdGl4Lg0KPiA+IA0KPiA+ICtjb25m aWcgVE9VQ0hTQ1JFRU5fSUxJVEVLDQo+ID4gKwl0cmlzdGF0ZSAiSWxpdGVrIEkyQyAyMTNYLzIz WFgvMjVYWC9MZWdvIFNlcmllcyBUb3VjaCBJQ3MiDQo+ID4gKwlkZXBlbmRzIG9uIEkyQw0KPiA+ ICsJaGVscA0KPiA+ICsJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIHRvdWNoc2NyZWVuIHdpdGgg SUxJVEVLIHRvdWNoIElDLA0KPiA+ICsJICBpdCBzdXBwb3J0cyAyMTNYLzIzWFgvMjVYWCBhbmQg b3RoZXIgTGVnbyBzZXJpZXMuDQo+ID4gKw0KPiA+ICsJICBJZiB1bnN1cmUsIHNheSBOLg0KPiA+ ICsNCj4gPiArCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0g aGVyZTogdGhlDQo+ID4gKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpbGl0ZWtfdHNfaTJjLg0K PiA+ICsNCj4gPiAgZW5kaWYNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNj cmVlbi9NYWtlZmlsZSANCj4gPiBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vTWFrZWZpbGUN Cj4gPiBpbmRleCA2MjMzNTQxZTkxNzMuLjE2MjJlNjZjNGVhYSAxMDA2NDQNCj4gPiAtLS0gYS9k cml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL01ha2VmaWxlDQo+ID4gKysrIGIvZHJpdmVycy9pbnB1 dC90b3VjaHNjcmVlbi9NYWtlZmlsZQ0KPiA+IEBAIC0xMTIsMyArMTEyLDQgQEAgb2JqLSQoQ09O RklHX1RPVUNIU0NSRUVOX1JPSE1fQlUyMTAyMykJKz0gcm9obV9idTIxMDIzLm8NCj4gPiAgb2Jq LSQoQ09ORklHX1RPVUNIU0NSRUVOX1JBU1BCRVJSWVBJX0ZXKQkrPSByYXNwYmVycnlwaS10cy5v DQo+ID4gIG9iai0kKENPTkZJR19UT1VDSFNDUkVFTl9JUVM1WFgpCSs9IGlxczV4eC5vDQo+ID4g IG9iai0kKENPTkZJR19UT1VDSFNDUkVFTl9aSU5JVElYKQkrPSB6aW5pdGl4Lm8NCj4gPiArb2Jq LSQoQ09ORklHX1RPVUNIU0NSRUVOX0lMSVRFSykJKz0gaWxpdGVrX3RzX2kyYy5vDQo+ID4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaWxpdGVrX3RzX2kyYy5jIA0KPiA+ IGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9pbGl0ZWtfdHNfaTJjLmMNCj4gPiBuZXcgZmls ZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uNTA3YWI3MzVmMmI2DQo+ID4g LS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaWxpdGVr X3RzX2kyYy5jDQo+ID4gQEAgLTAsMCArMSw3NTMgQEANCj4gPiArLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjANCj4gPiArLyoNCj4gPiArICogSUxJVEVLIFRvdWNoIElDIGRyaXZl ciBmb3IgMjNYWCwgMjVYWCBhbmQgTGVnbyBzZXJpZXMNCj4gPiArICoNCj4gPiArICogQ29weXJp Z2h0IChDKSAyMDExIElMSSBUZWNobm9sb2d5IENvcnBvcmF0aW9uLg0KPiA+ICsgKiBDb3B5cmln aHQgKEMpIDIwMjAgTHVjYSBIc3UgPGx1Y2FfaHN1QGlsaXRlay5jb20+DQo+ID4gKyAqIENvcHly aWdodCAoQykgMjAyMSBKb2UgSHVuZyA8am9lX2h1bmdAaWxpdGVrLmNvbT4gICovDQo+ID4gKw0K PiA+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51 eC9pbnB1dC9tdC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaTJjLmg+DQo+ID4gKyNpbmNsdWRl IDxsaW51eC9zbGFiLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KPiA+ICsjaW5j bHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+DQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51 eC9lcnJuby5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvYWNwaS5oPg0KPiA+ICsjaW5jbHVkZSA8 bGludXgvaW5wdXQvdG91Y2hzY3JlZW4uaD4NCj4gPiArI2luY2x1ZGUgPGFzbS91bmFsaWduZWQu aD4NCj4gPiArDQo+ID4gKw0KPiA+ICsjZGVmaW5lIElMSVRFS19UU19OQU1FCQkJCQkiaWxpdGVr X3RzIg0KPiA+ICsjZGVmaW5lIEJMX1YxXzgJCQkJCQkweDEwOA0KPiA+ICsjZGVmaW5lIEJMX1Yx XzcJCQkJCQkweDEwNw0KPiA+ICsjZGVmaW5lIEJMX1YxXzYJCQkJCQkweDEwNg0KPiA+ICsNCj4g PiArI2RlZmluZSBJTElURUtfVFBfQ01EX0dFVF9UUF9SRVMJCQkweDIwDQo+ID4gKyNkZWZpbmUg SUxJVEVLX1RQX0NNRF9HRVRfU0NSTl9SRVMJCQkweDIxDQo+ID4gKyNkZWZpbmUgSUxJVEVLX1RQ X0NNRF9TRVRfSUNfU0xFRVAJCQkweDMwDQo+ID4gKyNkZWZpbmUgSUxJVEVLX1RQX0NNRF9TRVRf SUNfV0FLRQkJCTB4MzENCj4gPiArI2RlZmluZSBJTElURUtfVFBfQ01EX0dFVF9GV19WRVIJCQkw eDQwDQo+ID4gKyNkZWZpbmUgSUxJVEVLX1RQX0NNRF9HRVRfUFJMX1ZFUgkJCTB4NDINCj4gPiAr I2RlZmluZSBJTElURUtfVFBfQ01EX0dFVF9NQ1VfVkVSCQkJMHg2MQ0KPiA+ICsjZGVmaW5lIElM SVRFS19UUF9DTURfR0VUX0lDX01PREUJCQkweEMwDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFJFUE9S VF9BRERSRVNTX0NPVU5UCQkJCTYxDQo+ID4gKyNkZWZpbmUgSUxJVEVLX1NVUFBPUlRfTUFYX1BP SU5UCQkJNDANCj4gPiArDQo+ID4gKyNkZWZpbmUgUFRMX1YzCQkJCQkJMHgwMw0KPiA+ICsjZGVm aW5lIFBUTF9WNgkJCQkJCTB4MDYNCj4gDQo+IEFyZSB0aGVzZSBuZWVkZWQ/IERvIHlvdSBwbGFu IGJyaW5naW5nIGluIFYzIHByb3RvY29sIHN1cHBvcnQ/DQoNClllcywgd2UgcGxhbiB0byBzdXBw b3J0IFYzIHByb3RvY29sIGluIHRoZSBmb2xsb3dpbmcgdXBzdHJlYW1pbmcgcGF0Y2guDQoNCkJ1 dCBhZ3JlZWQsIHRoaXMgcGF0Y2ggaXMgcGxhbm5lZCB0byBzdXBwb3J0IFY2IChMZWdvIHNlcmll cykgb25seS4NCldpbGwgcmVtb3ZlIHByb3RvY29sIHJlbGF0ZWQgbWFuaXB1bGF0aW9uIGluIFBB VENIIHY3Lg0KDQo+IA0KPiA+ICsNCj4gPiArI2RlZmluZSBNT0RfQVAJCQkJCQkweDVBDQo+ID4g KyNkZWZpbmUgTU9EX0JMCQkJCQkJMHg1NQ0KPiANCj4gVGhlc2UgYXJlIG5vdCB1c2VkPw0KDQpZ ZXMgYW5kIGFncmVlZCwgaXQgc2hvdWxkIGJlIHJlbW92ZWQgaW4gUEFUQ0ggdjcuDQoNCj4gDQo+ ID4gKw0KPiA+ICtzdHJ1Y3QgaWxpdGVrX3Byb3RvY29sX2luZm8gew0KPiA+ICsJdTE2IHZlcjsN Cj4gPiArCXU4IHZlcl9tYWpvcjsNCj4gPiArCXU4IGZsYWc7DQo+ID4gK307DQo+ID4gKw0KPiA+ ICtzdHJ1Y3QgaWxpdGVrX3RvdWNoX2luZm8gew0KPiA+ICsJdTE2IGlkOw0KPiA+ICsJdTE2IHg7 DQo+ID4gKwl1MTYgeTsNCj4gPiArCXUxNiBwOw0KPiA+ICsJdTE2IHc7DQo+ID4gKwl1MTYgaDsN Cj4gPiArCXUxNiBzdGF0dXM7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgaWxpdGVrX3Rz X2RhdGEgew0KPiA+ICsJc3RydWN0IGkyY19jbGllbnQJCSpjbGllbnQ7DQo+ID4gKwlzdHJ1Y3Qg Z3Bpb19kZXNjCQkqcmVzZXRfZ3BpbzsNCj4gPiArCXN0cnVjdCBpbnB1dF9kZXYJCSppbnB1dF9k ZXY7DQo+ID4gKwlzdHJ1Y3QgdG91Y2hzY3JlZW5fcHJvcGVydGllcwlwcm9wOw0KPiA+ICsNCj4g PiArCWludCAoKnByb2Nlc3NfYW5kX3JlcG9ydCkoc3RydWN0IGlsaXRla190c19kYXRhICp0cyk7 DQo+IA0KPiBVbnRpbCB0aGUgZHJpdmVyIHN1cHBvcnRzIG11bHRpcGxlIHByb3RvY29sIHZlcnNp b25zIHRoZXJlIGlzIG5vIHBvaW50IGluIGhhdmluZyB0aGlzIHBvaW50ZXIuDQoNCkFncmVlZCwg aXQgc2hvdWxkIGJlIHJlbW92ZWQgaW4gUEFUQ0ggdjcuDQoNCj4gDQo+ID4gKw0KPiA+ICsJc3Ry dWN0IFBST1RPQ09MX01BUAkJKnB0bF9jYl9mdW5jOw0KPiA+ICsJc3RydWN0IGlsaXRla19wcm90 b2NvbF9pbmZvCXB0bDsNCj4gPiArDQo+ID4gKwlzdHJ1Y3QgaWxpdGVrX3RvdWNoX2luZm8JdHBp bmZvW0lMSVRFS19TVVBQT1JUX01BWF9QT0lOVF07DQo+ID4gKw0KPiA+ICsJY2hhcgkJCQlwcm9k dWN0X2lkWzMwXTsNCj4gPiArCXUxNgkJCQltY3VfdmVyOw0KPiA+ICsJdTgJCQkJaWNfbW9kZTsN Cj4gPiArCXU4CQkJCWZpcm13YXJlX3Zlcls4XTsNCj4gPiArDQo+ID4gKwlzMzIJCQkJcmVzZXRf dGltZTsNCj4gPiArCXMzMgkJCQlzY3JlZW5fbWF4X3g7DQo+ID4gKwlzMzIJCQkJc2NyZWVuX21h eF95Ow0KPiA+ICsJczMyCQkJCXNjcmVlbl9taW5feDsNCj4gPiArCXMzMgkJCQlzY3JlZW5fbWlu X3k7DQo+ID4gKwlzMzIJCQkJbWF4X3RwOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArZW51bSBpbGl0 ZWtfY21kcyB7DQo+ID4gKwkvKiBjb21tb24gY21kcyAqLw0KPiA+ICsJR0VUX1BUTF9WRVIgPSAw LA0KPiA+ICsJR0VUX0ZXX1ZFUiwNCj4gPiArCUdFVF9TQ1JOX1JFUywNCj4gPiArCUdFVF9UUF9S RVMsDQo+ID4gKwlHRVRfSUNfTU9ERSwNCj4gPiArCUdFVF9NQ1VfVkVSLA0KPiA+ICsJU0VUX0lD X1NMRUVQLA0KPiA+ICsJU0VUX0lDX1dBS0UsDQo+ID4gKw0KPiA+ICsJLyogQUxXQVlTIGtlZXAg YXQgdGhlIGVuZCAqLw0KPiA+ICsJTUFYX0NNRF9DTlQNCj4gPiArfTsNCj4gPiArDQo+ID4gK3R5 cGVkZWYgaW50IHByb3RvY29sX2Z1bmMoc3RydWN0IGlsaXRla190c19kYXRhICp0cywNCj4gPiAr CQkJICB1MTYgY21kLCB1OCAqaW5idWYsIHU4ICpvdXRidWYpOw0KPiA+ICsNCj4gPiArc3RydWN0 IFBST1RPQ09MX01BUCB7DQo+ID4gKwl1MTYgY21kOw0KPiA+ICsJY29uc3QgY2hhciAqbmFtZTsN Cj4gPiArCXByb3RvY29sX2Z1bmMgKmZ1bmM7DQo+ID4gKwl1OCBmbGFnOw0KPiA+ICt9Ow0KPiA+ ICsNCj4gPiArLyogSUxJVEVLIEkyQyBSL1cgQVBJcyAqLw0KPiA+ICtzdGF0aWMgaW50IGlsaXRl a19pMmNfd3JpdGVfYW5kX3JlYWQoc3RydWN0IGlsaXRla190c19kYXRhICp0cywNCj4gPiArCQkJ CSAgICAgdTggKmNtZCwgaW50IHdyaXRlX2xlbiwgaW50IGRlbGF5LA0KPiA+ICsJCQkJICAgICB1 OCAqZGF0YSwgaW50IHJlYWRfbGVuKQ0KPiA+ICt7DQo+ID4gKwlpbnQgcmV0ID0gMDsNCj4gPiAr CXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0cy0+Y2xpZW50Ow0KPiA+ICsJc3RydWN0IGky Y19tc2cgbXNnc1syXSA9IHsNCj4gPiArCQl7LmFkZHIgPSBjbGllbnQtPmFkZHIsIC5mbGFncyA9 IDAsDQo+ID4gKwkJIC5sZW4gPSB3cml0ZV9sZW4sIC5idWYgPSBjbWQsfSwNCj4gPiArCQl7LmFk ZHIgPSBjbGllbnQtPmFkZHIsIC5mbGFncyA9IEkyQ19NX1JELA0KPiA+ICsJCSAubGVuID0gcmVh ZF9sZW4sIC5idWYgPSBkYXRhLH0NCj4gPiArCX07DQo+ID4gKw0KPiA+ICsJaWYgKGRlbGF5ID09 IDAgJiYgd3JpdGVfbGVuID4gMCAmJiByZWFkX2xlbiA+IDApIHsNCj4gPiArCQlyZXQgPSBpMmNf dHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2dzLCAyKTsNCj4gPiArCQlpZiAocmV0IDwgMCkN Cj4gPiArCQkJcmV0dXJuIHJldDsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJaWYgKHdyaXRlX2xl biA+IDApIHsNCj4gPiArCQkJcmV0ID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgbXNn cywgMSk7DQo+ID4gKwkJCWlmIChyZXQgPCAwKQ0KPiA+ICsJCQkJcmV0dXJuIHJldDsNCj4gPiAr CQl9DQo+ID4gKwkJaWYgKGRlbGF5ID4gMCkNCj4gPiArCQkJbWRlbGF5KGRlbGF5KTsNCj4gPiAr CQlpZiAocmVhZF9sZW4gPiAwKSB7DQo+ID4gKwkJCXJldCA9IGkyY190cmFuc2ZlcihjbGllbnQt PmFkYXB0ZXIsIG1zZ3MgKyAxLCAxKTsNCj4gPiArCQkJaWYgKHJldCA8IDApDQo+ID4gKwkJCQly ZXR1cm4gcmV0Ow0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArLyogSUxJVEVLIElTUiBBUElzICovDQo+ID4gK3N0YXRpYyB2b2lk IGlsaXRla190b3VjaF9kb3duKHN0cnVjdCBpbGl0ZWtfdHNfZGF0YSAqdHMsDQo+ID4gKwkJCSAg ICAgIGludCBpZCwgaW50IHgsIGludCB5LCBpbnQgcCwgaW50IGgsIGludCB3KSB7DQo+ID4gKwlz dHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IHRzLT5pbnB1dF9kZXY7DQo+ID4gKw0KPiA+ICsJaW5w dXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPVUNILCAxKTsNCj4gPiArDQo+ID4gKwlpbnB1dF9t dF9zbG90KGlucHV0LCBpZCk7DQo+ID4gKwlpbnB1dF9tdF9yZXBvcnRfc2xvdF9zdGF0ZShpbnB1 dCwgTVRfVE9PTF9GSU5HRVIsIHRydWUpOw0KPiA+ICsNCj4gPiArCXRvdWNoc2NyZWVuX3JlcG9y dF9wb3MoaW5wdXQsICZ0cy0+cHJvcCwgeCwgeSwgdHJ1ZSk7DQo+ID4gKw0KPiA+ICsJdHMtPnRw aW5mb1tpZF0uc3RhdHVzID0gMTsNCj4gPiArCXRzLT50cGluZm9baWRdLmlkID0gaWQ7DQo+ID4g Kwl0cy0+dHBpbmZvW2lkXS54ID0geDsNCj4gPiArCXRzLT50cGluZm9baWRdLnkgPSB5Ow0KPiA+ ICsJdHMtPnRwaW5mb1tpZF0ucCA9IHA7DQo+ID4gKwl0cy0+dHBpbmZvW2lkXS5oID0gaDsNCj4g PiArCXRzLT50cGluZm9baWRdLncgPSB3Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9p ZCBpbGl0ZWtfdG91Y2hfcmVsZWFzZShzdHJ1Y3QgaWxpdGVrX3RzX2RhdGEgKnRzLCBpbnQgaWQp IHsNCj4gPiArCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gdHMtPmlucHV0X2RldjsNCj4gPiAr DQo+ID4gKwlpZiAodHMtPnRwaW5mb1tpZF0uc3RhdHVzID09IDEpIHsNCj4gPiArCQlpbnB1dF9t dF9zbG90KGlucHV0LCBpZCk7DQo+ID4gKwkJaW5wdXRfbXRfcmVwb3J0X3Nsb3Rfc3RhdGUoaW5w dXQsIE1UX1RPT0xfRklOR0VSLCBmYWxzZSk7DQo+ID4gKwkJdHMtPnRwaW5mb1tpZF0uc3RhdHVz ID0gMDsNCj4gPiArCX0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgaWxpdGVrX3Rv dWNoX3JlbGVhc2VfYWxsKHN0cnVjdCBpbGl0ZWtfdHNfZGF0YSAqdHMpIHsNCj4gPiArCXN0cnVj dCBpbnB1dF9kZXYgKmlucHV0ID0gdHMtPmlucHV0X2RldjsNCj4gPiArCWludCBpID0gMDsNCj4g PiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgdHMtPm1heF90cDsgaSsrKQ0KPiA+ICsJCWlsaXRl a190b3VjaF9yZWxlYXNlKHRzLCBpKTsNCj4gPiArCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJU Tl9UT1VDSCwgMCk7IH0NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgaWxpdGVrX3Byb2Nlc3NfYW5k X3JlcG9ydF92NihzdHJ1Y3QgaWxpdGVrX3RzX2RhdGEgKnRzKSB7DQo+ID4gKwlpbnQgcmV0ID0g MDsNCj4gPiArCXU4IGJ1Zls1MTJdID0gezB9Ow0KPiA+ICsJaW50IHBhY2tldF9sZW4gPSA1Ow0K PiA+ICsJaW50IHBhY2tldF9tYXhfcG9pbnQgPSAxMDsNCj4gPiArCWludCByZXBvcnRfbWF4X3Bv aW50ID0gNjsNCj4gPiArCWludCByZWxlYXNlX3BvaW50ID0gMDsNCj4gPiArCWludCBpID0gMCwg Y291bnQgPSAwOw0KPiA+ICsJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSB0cy0+aW5wdXRfZGV2 Ow0KPiA+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnRzLT5jbGllbnQtPmRldjsNCj4gPiArCXUx NiB4LCB5LCBwID0gMTAsIHcgPSAxMCwgaCA9IDEwLCBzdGF0dXMsIGlkOw0KPiA+ICsNCj4gPiAr CXJldCA9IGlsaXRla19pMmNfd3JpdGVfYW5kX3JlYWQodHMsIE5VTEwsIDAsIDAsIGJ1ZiwgNjQp Ow0KPiA+ICsJaWYgKHJldCA8IDApIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgImdldCB0b3VjaCBp bmZvIGZhaWxlZCwgZXJyOiVkXG4iLCByZXQpOw0KPiA+ICsJCWdvdG8gZXJyX3JlbGVhc2VfdG91 Y2hfYW5kX2tleTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXBvcnRfbWF4X3BvaW50ID0gYnVm W1JFUE9SVF9BRERSRVNTX0NPVU5UXTsNCj4gPiArCWlmIChyZXBvcnRfbWF4X3BvaW50ID4gdHMt Pm1heF90cCkgew0KPiA+ICsJCWRldl9lcnIoZGV2LCAiRlcgcmVwb3J0IG1heCBwb2ludDolZCA+ IHBhbmVsIGluZm8uIG1heDolZFxuIiwNCj4gPiArCQkJcmVwb3J0X21heF9wb2ludCwgdHMtPm1h eF90cCk7DQo+ID4gKwkJcmV0ID0gLUVJTlZBTDsNCj4gPiArCQlnb3RvIGVycl9yZWxlYXNlX3Rv dWNoX2FuZF9rZXk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJY291bnQgPSBESVZfUk9VTkRfVVAo cmVwb3J0X21heF9wb2ludCwgcGFja2V0X21heF9wb2ludCk7DQo+ID4gKwlmb3IgKGkgPSAxOyBp IDwgY291bnQ7IGkrKykgew0KPiA+ICsJCXJldCA9IGlsaXRla19pMmNfd3JpdGVfYW5kX3JlYWQo dHMsIE5VTEwsIDAsIDAsDQo+ID4gKwkJCWJ1ZiArIGkgKiA2NCwgNjQpOw0KPiA+ICsJCWlmIChy ZXQgPCAwKSB7DQo+ID4gKwkJCWRldl9lcnIoZGV2LCAiZ2V0IHRvdWNoIGluZm8uIGVyciwgY291 bnQ9JWRcbiIsIGNvdW50KTsNCj4gPiArCQkJZ290byBlcnJfcmVsZWFzZV90b3VjaF9hbmRfa2V5 Ow0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgcmVwb3J0 X21heF9wb2ludDsgaSsrKSB7DQo+ID4gKwkJc3RhdHVzID0gYnVmW2kgKiBwYWNrZXRfbGVuICsg MV0gJiAweDQwOw0KPiA+ICsJCWlkID0gYnVmW2kgKiBwYWNrZXRfbGVuICsgMV0gJiAweDNGOw0K PiA+ICsNCj4gPiArCQlpZiAoIXN0YXR1cykgew0KPiA+ICsJCQlyZWxlYXNlX3BvaW50Kys7DQo+ ID4gKwkJCWlsaXRla190b3VjaF9yZWxlYXNlKHRzLCBpZCk7DQo+ID4gKwkJCWNvbnRpbnVlOw0K PiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJeCA9IGdldF91bmFsaWduZWRfbGUxNihidWYgKyBpICog cGFja2V0X2xlbiArIDIpOw0KPiA+ICsJCXkgPSBnZXRfdW5hbGlnbmVkX2xlMTYoYnVmICsgaSAq IHBhY2tldF9sZW4gKyA0KTsNCj4gPiArDQo+ID4gKwkJaWYgKHggPiB0cy0+c2NyZWVuX21heF94 IHx8IHggPCB0cy0+c2NyZWVuX21pbl94IHx8DQo+ID4gKwkJICAgIHkgPiB0cy0+c2NyZWVuX21h eF95IHx8IHkgPCB0cy0+c2NyZWVuX21pbl95KSB7DQo+ID4gKwkJCWRldl93YXJuKGRldiwgImlu dmFsaWQgcG9zaXRpb24sIFhbJWQsJWQsJWRdLCBZWyVkLCVkLCVkXVxuIiwNCj4gPiArCQkJCSB0 cy0+c2NyZWVuX21pbl94LCB4LCB0cy0+c2NyZWVuX21heF94LA0KPiA+ICsJCQkJIHRzLT5zY3Jl ZW5fbWluX3ksIHksIHRzLT5zY3JlZW5fbWF4X3kpOw0KPiA+ICsJCQljb250aW51ZTsNCj4gPiAr CQl9DQo+ID4gKwkJaWxpdGVrX3RvdWNoX2Rvd24odHMsIGlkLCB4LCB5LCBwLCBoLCB3KTsNCj4g PiArCX0NCj4gPiArDQo+ID4gK2Vycl9yZWxlYXNlX3RvdWNoX2FuZF9rZXk6DQo+ID4gKwlpZiAo cmV0IDwgMCB8fCByZWxlYXNlX3BvaW50ID09IHJlcG9ydF9tYXhfcG9pbnQpDQo+ID4gKwkJaWxp dGVrX3RvdWNoX3JlbGVhc2VfYWxsKHRzKTsNCj4gDQo+IElmIHlvdSB1c2UgaW5wdXRfbXRfc3lu Y19mcmFtZSgpIGhlcmUgeW91IHdpbGwgbm90IG5lZWQgdG8gYXJlIGFib3V0IHJlbGVhc2luZyBC VE5fVE9VQ0ggb3IgZG9pbmcgc2luZ2xlLXRvdWNoIGVtdWxhdGlvbi4NCg0KQWdyZWVkLCB3b3Vs ZCBtb2RpZnkgaW4gUEFUQ0ggdjcuDQoNCj4gDQo+ID4gKwlpbnB1dF9zeW5jKGlucHV0KTsNCj4g PiArCXJldHVybiAocmV0IDwgMCkgPyByZXQgOiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsNCj4g PiArLyogQVBJcyBvZiBjbWRzIGZvciBJTElURUsgVG91Y2ggSUMgKi8gc3RhdGljIGludCANCj4g PiArYXBpX3Byb3RvY29sX3NldF9jbWQoc3RydWN0IGlsaXRla190c19kYXRhICp0cywNCj4gPiAr CQkJCXUxNiBpZHgsIHU4ICppbmJ1ZiwgdTggKm91dGJ1ZikNCj4gPiArew0KPiA+ICsJdTE2IGNt ZDsNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ICsNCj4gPiArCWlmIChpZHggPj0gTUFYX0NNRF9D TlQpDQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsJLyogY2hlY2sgaWYgY21k IGlzIHN1cHBvcnRlZCBieSBpdHMgcHJvdG9jb2wgdmVyc2lvbiAqLw0KPiA+ICsJaWYgKCEodHMt PnB0bC5mbGFnICYgdHMtPnB0bF9jYl9mdW5jW2lkeF0uZmxhZykpDQo+ID4gKwkJcmV0dXJuIC1F SU5WQUw7DQo+ID4gKw0KPiA+ICsJY21kID0gdHMtPnB0bF9jYl9mdW5jW2lkeF0uY21kOw0KPiA+ ICsJcmV0ID0gdHMtPnB0bF9jYl9mdW5jW2lkeF0uZnVuYyh0cywgY21kLCBpbmJ1Ziwgb3V0YnVm KTsNCj4gPiArCWlmIChyZXQgPCAwKQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJ cmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgYXBpX3Byb3RvY29sX2dl dF9wdGxfdmVyKHN0cnVjdCBpbGl0ZWtfdHNfZGF0YSAqdHMsDQo+ID4gKwkJCQkgICAgdTE2IGNt ZCwgdTggKmluYnVmLCB1OCAqb3V0YnVmKSB7DQo+ID4gKwlpbnQgcmV0ID0gMDsNCj4gPiArCXU4 IGJ1Zls2NF0gPSB7MH07DQo+ID4gKw0KPiA+ICsJYnVmWzBdID0gY21kOw0KPiA+ICsJcmV0ID0g aWxpdGVrX2kyY193cml0ZV9hbmRfcmVhZCh0cywgYnVmLCAxLCA1LCBvdXRidWYsIDMpOw0KPiA+ ICsJaWYgKHJldCA8IDApDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKwl0cy0+cHRs LnZlciA9IGdldF91bmFsaWduZWRfYmUxNihvdXRidWYpOw0KPiA+ICsJdHMtPnB0bC52ZXJfbWFq b3IgPSBvdXRidWZbMF07DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyBpbnQgYXBpX3Byb3RvY29sX2dldF9tY3VfdmVyKHN0cnVjdCBpbGl0ZWtfdHNf ZGF0YSAqdHMsDQo+ID4gKwkJCQkgICAgdTE2IGNtZCwgdTggKmluYnVmLCB1OCAqb3V0YnVmKSB7 DQo+ID4gKwlpbnQgcmV0ID0gMDsNCj4gPiArCXU4IGJ1Zls2NF0gPSB7MH07DQo+ID4gKw0KPiA+ ICsJYnVmWzBdID0gY21kOw0KPiA+ICsJcmV0ID0gaWxpdGVrX2kyY193cml0ZV9hbmRfcmVhZCh0 cywgYnVmLCAxLCA1LCBvdXRidWYsIDMyKTsNCj4gPiArCWlmIChyZXQgPCAwKQ0KPiA+ICsJCXJl dHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJdHMtPm1jdV92ZXIgPSBnZXRfdW5hbGlnbmVkX2xlMTYo b3V0YnVmKTsNCj4gPiArCW1lbXNldCh0cy0+cHJvZHVjdF9pZCwgMCwgc2l6ZW9mKHRzLT5wcm9k dWN0X2lkKSk7DQo+ID4gKwltZW1jcHkodHMtPnByb2R1Y3RfaWQsIG91dGJ1Zis2LCAyNik7DQo+ ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgYXBp X3Byb3RvY29sX2dldF9md192ZXIoc3RydWN0IGlsaXRla190c19kYXRhICp0cywNCj4gPiArCQkJ CSAgIHUxNiBjbWQsIHU4ICppbmJ1ZiwgdTggKm91dGJ1Zikgew0KPiA+ICsJaW50IHJldCA9IDA7 DQo+ID4gKwl1OCBidWZbNjRdID0gezB9Ow0KPiA+ICsNCj4gPiArCWJ1ZlswXSA9IGNtZDsNCj4g PiArCXJldCA9IGlsaXRla19pMmNfd3JpdGVfYW5kX3JlYWQodHMsIGJ1ZiwgMSwgNSwgb3V0YnVm LCA4KTsNCj4gPiArCWlmIChyZXQgPCAwKQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ ICsJbWVtY3B5KHRzLT5maXJtd2FyZV92ZXIsIG91dGJ1ZiwgOCk7DQo+ID4gKw0KPiA+ICsJcmV0 dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgYXBpX3Byb3RvY29sX2dldF9z Y3JuX3JlcyhzdHJ1Y3QgaWxpdGVrX3RzX2RhdGEgKnRzLA0KPiA+ICsJCQkJICAgICB1MTYgY21k LCB1OCAqaW5idWYsIHU4ICpvdXRidWYpIHsNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ICsJdTgg YnVmWzY0XSA9IHswfTsNCj4gPiArDQo+ID4gKwlidWZbMF0gPSBjbWQ7DQo+ID4gKwlyZXQgPSBp bGl0ZWtfaTJjX3dyaXRlX2FuZF9yZWFkKHRzLCBidWYsIDEsIDUsIG91dGJ1ZiwgOCk7DQo+ID4g KwlpZiAocmV0IDwgMCkNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCXRzLT5zY3Jl ZW5fbWluX3ggPSBnZXRfdW5hbGlnbmVkX2xlMTYob3V0YnVmKTsNCj4gPiArCXRzLT5zY3JlZW5f bWluX3kgPSBnZXRfdW5hbGlnbmVkX2xlMTYob3V0YnVmICsgMik7DQo+ID4gKwl0cy0+c2NyZWVu X21heF94ID0gZ2V0X3VuYWxpZ25lZF9sZTE2KG91dGJ1ZiArIDQpOw0KPiA+ICsJdHMtPnNjcmVl bl9tYXhfeSA9IGdldF91bmFsaWduZWRfbGUxNihvdXRidWYgKyA2KTsNCj4gPiArDQo+ID4gKwly ZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBhcGlfcHJvdG9jb2xfZ2V0 X3RwX3JlcyhzdHJ1Y3QgaWxpdGVrX3RzX2RhdGEgKnRzLA0KPiA+ICsJCQkJICAgdTE2IGNtZCwg dTggKmluYnVmLCB1OCAqb3V0YnVmKSB7DQo+ID4gKwlpbnQgcmV0ID0gMDsNCj4gPiArCXU4IGJ1 Zls2NF0gPSB7MH07DQo+ID4gKw0KPiA+ICsJYnVmWzBdID0gY21kOw0KPiA+ICsJcmV0ID0gaWxp dGVrX2kyY193cml0ZV9hbmRfcmVhZCh0cywgYnVmLCAxLCA1LCBvdXRidWYsIDE1KTsNCj4gPiAr CWlmIChyZXQgPCAwKQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJdHMtPm1heF90 cCA9IG91dGJ1Zls4XTsNCj4gPiArDQo+ID4gKwlpZiAodHMtPm1heF90cCA+IElMSVRFS19TVVBQ T1JUX01BWF9QT0lOVCkgew0KPiA+ICsJCWRldl9lcnIoJnRzLT5jbGllbnQtPmRldiwgIkludmFs aWQgTUFYX1RQOiVkIGZyb20gRldcbiIsDQo+ID4gKwkJCXRzLT5tYXhfdHApOw0KPiA+ICsJCXJl dHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgaW50IGFwaV9wcm90b2NvbF9nZXRfaWNfbW9kZShzdHJ1Y3QgaWxp dGVrX3RzX2RhdGEgKnRzLA0KPiA+ICsJCQkJICAgIHUxNiBjbWQsIHU4ICppbmJ1ZiwgdTggKm91 dGJ1Zikgew0KPiA+ICsJaW50IHJldCA9IDA7DQo+ID4gKwl1OCBidWZbNjRdID0gezB9Ow0KPiA+ ICsNCj4gPiArCWJ1ZlswXSA9IGNtZDsNCj4gPiArCXJldCA9IGlsaXRla19pMmNfd3JpdGVfYW5k X3JlYWQodHMsIGJ1ZiwgMSwgNSwgb3V0YnVmLCAyKTsNCj4gPiArCWlmIChyZXQgPCAwKQ0KPiA+ ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJdHMtPmljX21vZGUgPSBvdXRidWZbMF07DQo+ ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBhcGlfcHJvdG9j b2xfc2V0X2ljX3NsZWVwKHN0cnVjdCBpbGl0ZWtfdHNfZGF0YSAqdHMsDQo+ID4gKwkJCQkgICAg IHUxNiBjbWQsIHU4ICppbmJ1ZiwgdTggKm91dGJ1Zikgew0KPiA+ICsJdTggYnVmWzY0XSA9IHsw fTsNCj4gPiArDQo+ID4gKwlidWZbMF0gPSBjbWQ7DQo+ID4gKwlyZXR1cm4gaWxpdGVrX2kyY193 cml0ZV9hbmRfcmVhZCh0cywgYnVmLCAxLCAwLCBOVUxMLCAwKTsgfQ0KPiA+ICsNCj4gPiArc3Rh dGljIGludCBhcGlfcHJvdG9jb2xfc2V0X2ljX3dha2Uoc3RydWN0IGlsaXRla190c19kYXRhICp0 cywNCj4gPiArCQkJCSAgICB1MTYgY21kLCB1OCAqaW5idWYsIHU4ICpvdXRidWYpIHsNCj4gPiAr CXU4IGJ1Zls2NF0gPSB7MH07DQo+ID4gKw0KPiA+ICsJYnVmWzBdID0gY21kOw0KPiA+ICsJcmV0 dXJuIGlsaXRla19pMmNfd3JpdGVfYW5kX3JlYWQodHMsIGJ1ZiwgMSwgMCwgTlVMTCwgMCk7IH0N Cj4gPiArDQo+ID4gK3N0cnVjdCBQUk9UT0NPTF9NQVAgcHRsX2Z1bmNfbWFwW10gPSB7DQo+ID4g KwkvKiBjb21tb24gY21kcyAqLw0KPiA+ICsJW0dFVF9QVExfVkVSXQk9IHtJTElURUtfVFBfQ01E X0dFVF9QUkxfVkVSLCAiR0VUX1BUTF9WRVIiLA0KPiA+ICsJCQkgICBhcGlfcHJvdG9jb2xfZ2V0 X3B0bF92ZXIsIFBUTF9WMyB8IFBUTF9WNn0sDQo+ID4gKwlbR0VUX0ZXX1ZFUl0JPSB7SUxJVEVL X1RQX0NNRF9HRVRfRldfVkVSLCAiR0VUX0ZXX1ZFUiIsDQo+ID4gKwkJCSAgIGFwaV9wcm90b2Nv bF9nZXRfZndfdmVyLCBQVExfVjMgfCBQVExfVjZ9LA0KPiA+ICsJW0dFVF9TQ1JOX1JFU10JPSB7 SUxJVEVLX1RQX0NNRF9HRVRfU0NSTl9SRVMsICJHRVRfU0NSTl9SRVMiLA0KPiA+ICsJCQkgICBh cGlfcHJvdG9jb2xfZ2V0X3Njcm5fcmVzLCBQVExfVjMgfCBQVExfVjZ9LA0KPiA+ICsJW0dFVF9U UF9SRVNdCT0ge0lMSVRFS19UUF9DTURfR0VUX1RQX1JFUywgIkdFVF9UUF9SRVMiLA0KPiA+ICsJ CQkgICBhcGlfcHJvdG9jb2xfZ2V0X3RwX3JlcywgUFRMX1YzIHwgUFRMX1Y2fSwNCj4gPiArCVtH RVRfSUNfTU9ERV0JPSB7SUxJVEVLX1RQX0NNRF9HRVRfSUNfTU9ERSwgIkdFVF9JQ19NT0RFIiwN Cj4gPiArCQkJICAgYXBpX3Byb3RvY29sX2dldF9pY19tb2RlLCBQVExfVjMgfCBQVExfVjZ9LA0K PiA+ICsJW0dFVF9NQ1VfVkVSXQk9IHtJTElURUtfVFBfQ01EX0dFVF9NQ1VfVkVSLCAiR0VUX01P RF9WRVIiLA0KPiA+ICsJCQkgICBhcGlfcHJvdG9jb2xfZ2V0X21jdV92ZXIsIFBUTF9WMyB8IFBU TF9WNn0sDQo+ID4gKwlbU0VUX0lDX1NMRUVQXQk9IHtJTElURUtfVFBfQ01EX1NFVF9JQ19TTEVF UCwgIlNFVF9JQ19TTEVFUCIsDQo+ID4gKwkJCSAgIGFwaV9wcm90b2NvbF9zZXRfaWNfc2xlZXAs IFBUTF9WMyB8IFBUTF9WNn0sDQo+ID4gKwlbU0VUX0lDX1dBS0VdCT0ge0lMSVRFS19UUF9DTURf U0VUX0lDX1dBS0UsICJTRVRfSUNfV0FLRSIsDQo+ID4gKwkJCSAgIGFwaV9wcm90b2NvbF9zZXRf aWNfd2FrZSwgUFRMX1YzIHwgUFRMX1Y2fSwgfTsNCj4gPiArDQo+ID4gKy8qIFByb2JlIEFQSXMg Ki8NCj4gPiArc3RhdGljIHZvaWQgaWxpdGVrX3Jlc2V0KHN0cnVjdCBpbGl0ZWtfdHNfZGF0YSAq dHMsIGludCBkZWxheSwgYm9vbCANCj4gPiArYm9vdCkgew0KPiA+ICsJaWYgKCFib290KQ0KPiA+ ICsJCWRpc2FibGVfaXJxX25vc3luYyh0cy0+Y2xpZW50LT5pcnEpOw0KPiANCj4gSSBhbSBjb25m dXNlZCBhYm91dCB0aGlzIGZsYWcuIGlsaXRla19yZXNldCgpIGlzIGNhbGxlZCBmcm9tIHByb2Jl IGFuZCByZXN1bWUgaGFuZGxlcnMsIGFuZCBpbiByZXN1bWUgaW50ZXJydXB0cyBhcmUgYWxyZWFk eSBkaXNhYmxlZCwgc28gd2h5IGFyZSB5b3UgdHJ5aW5nIHRvIGRpc2FibGUgdGhlbSBhZ2FpbiBo ZXJlPw0KDQpSZXNldCB0b3VjaCBjb250cm9sbGVyIHdpbGwgdHJpZ2dlciBJUlEgZHVyaW5nIGZp cm13YXJlIGluaXRpYWxpemF0aW9uLA0KVGhpcyB0cmlnZ2VyZWQgaXJxIGlzIG5vdCB1c2VkIGZv ciByZXBvcnRpbmcgdG91Y2ggZXZlbnQsDQpzbyB3ZSBkaXNhYmxlIGlycSBhcyBhIGtpbmQgb2Yg cHJldmVudGlvbi4NCg0KQnV0IGFncmVlZCwgaWxpdGVrX3Jlc2V0KCkgaW4gdGhpcyBwYXRjaCBz aG91bGQgd29yayBmaW5lLA0KYmVjYXVzZSBpcnEgc2hvdWxkIGJlIGRpc2FibGVkIHdlbGwgd2hl biBjYWxsaW5nDQppbGl0ZWtfcmVzZXQoKSBvbmx5IGluIHByb2JlIGFuZCByZXN1bWUgaGFuZGxl cnMuDQoNClNvIGFncmVlZCwgc2hvdWxkIHJlbW92ZSBpdCBpbiBQQVRDSCB2Ny4NCg0KPiANCj4g PiArDQo+ID4gKwlpZiAodHMtPnJlc2V0X2dwaW8pIHsNCj4gPiArCQlncGlvZF9zZXRfdmFsdWUo dHMtPnJlc2V0X2dwaW8sIDEpOw0KPiA+ICsJCW1kZWxheSgxMCk7DQo+ID4gKwkJZ3Bpb2Rfc2V0 X3ZhbHVlKHRzLT5yZXNldF9ncGlvLCAwKTsNCj4gPiArCQltZGVsYXkoZGVsYXkpOw0KPiA+ICsJ fQ0KPiA+ICsNCj4gPiArCWlmICghYm9vdCkNCj4gPiArCQllbmFibGVfaXJxKHRzLT5jbGllbnQt PmlycSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgaWxpdGVrX3Byb3RvY29sX2lu aXQoc3RydWN0IGlsaXRla190c19kYXRhICp0cykgew0KPiA+ICsJaW50IHJldCA9IDA7DQo+ID4g Kwl1OCBvdXRidWZbNjRdID0gezB9Ow0KPiA+ICsNCj4gPiArCXRzLT5wdGwuZmxhZyA9IFBUTF9W NjsNCj4gPiArCXRzLT5wdGxfY2JfZnVuYyA9IHB0bF9mdW5jX21hcDsNCj4gPiArCXRzLT5wcm9j ZXNzX2FuZF9yZXBvcnQgPSBpbGl0ZWtfcHJvY2Vzc19hbmRfcmVwb3J0X3Y2Ow0KPiA+ICsJdHMt PnJlc2V0X3RpbWUgPSA2MDA7DQo+ID4gKw0KPiA+ICsJcmV0ID0gYXBpX3Byb3RvY29sX3NldF9j bWQodHMsIEdFVF9QVExfVkVSLCBOVUxMLCBvdXRidWYpOw0KPiA+ICsJaWYgKHJldCA8IDApDQo+ ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKwkvKiBQcm90b2NvbCB2MyBpcyBub3Qgc3Vw cG9ydCBjdXJyZW50bHkgKi8NCj4gPiArCWlmICh0cy0+cHRsLnZlcl9tYWpvciA9PSAweDMgfHwN Cj4gPiArCSAgICB0cy0+cHRsLnZlciA9PSBCTF9WMV82IHx8DQo+ID4gKwkgICAgdHMtPnB0bC52 ZXIgPT0gQkxfVjFfNykNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwlyZXR1 cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBpbGl0ZWtfcmVhZF90cF9pbmZv KHN0cnVjdCBpbGl0ZWtfdHNfZGF0YSAqdHMsIGJvb2wgYm9vdCkgDQo+ID4gK3sNCj4gPiArCXU4 IG91dGJ1ZlsyNTZdID0gezB9Ow0KPiA+ICsJaW50IGVycm9yID0gMDsNCj4gPiArDQo+ID4gKwll cnJvciA9IGFwaV9wcm90b2NvbF9zZXRfY21kKHRzLCBHRVRfUFRMX1ZFUiwgTlVMTCwgb3V0YnVm KTsNCj4gPiArCWlmIChlcnJvciA8IDApDQo+ID4gKwkJcmV0dXJuIGVycm9yOw0KPiANCj4gDQo+ IGFwaV9wcm90b2NvbF9zZXRfY21kKCkgcmV0dXJucyBub3JtYWxpemVkICgtPHJjPiwgMF0sIGku ZS4gaXQgaXMgbmV2ZXIgcG9zaXRpdmUsIHNvIHNpbXBseQ0KPiANCj4gCWlmIChlcnJvcikNCj4g CQlyZXR1cm4gZXJyb3I7DQoNCkFncmVlZCwgc2hvdWxkIG1vZGlmaWVkIHdob2xlIGZpbGUgd2hl cmUgY2FsbGluZyBpdCBpbiBQQVRDSCB2Nw0KDQo+IA0KPiA+ICsNCj4gPiArCWVycm9yID0gYXBp X3Byb3RvY29sX3NldF9jbWQodHMsIEdFVF9NQ1VfVkVSLCBOVUxMLCBvdXRidWYpOw0KPiA+ICsJ aWYgKGVycm9yIDwgMCkNCj4gPiArCQlyZXR1cm4gZXJyb3I7DQo+ID4gKw0KPiA+ICsJZXJyb3Ig PSBhcGlfcHJvdG9jb2xfc2V0X2NtZCh0cywgR0VUX0ZXX1ZFUiwgTlVMTCwgb3V0YnVmKTsNCj4g PiArCWlmIChlcnJvciA8IDApDQo+ID4gKwkJcmV0dXJuIGVycm9yOw0KPiA+ICsNCj4gPiArCWlm IChib290KSB7DQo+ID4gKwkJZXJyb3IgPSBhcGlfcHJvdG9jb2xfc2V0X2NtZCh0cywgR0VUX1ND Uk5fUkVTLCBOVUxMLA0KPiA+ICsJCQkJCSAgICAgb3V0YnVmKTsNCj4gPiArCQlpZiAoZXJyb3Ig PCAwKQ0KPiA+ICsJCQlyZXR1cm4gZXJyb3I7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZXJyb3Ig PSBhcGlfcHJvdG9jb2xfc2V0X2NtZCh0cywgR0VUX1RQX1JFUywgTlVMTCwgb3V0YnVmKTsNCj4g PiArCWlmIChlcnJvciA8IDApDQo+ID4gKwkJcmV0dXJuIGVycm9yOw0KPiA+ICsNCj4gPiArCWVy cm9yID0gYXBpX3Byb3RvY29sX3NldF9jbWQodHMsIEdFVF9JQ19NT0RFLCBOVUxMLCBvdXRidWYp Ow0KPiA+ICsJaWYgKGVycm9yIDwgMCkNCj4gPiArCQlyZXR1cm4gZXJyb3I7DQo+ID4gKw0KPiA+ ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgaWxpdGVrX2lucHV0 X2Rldl9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IA0KPiA+ICtpbGl0ZWtfdHNfZGF0 YSAqdHMpIHsNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ICsJc3RydWN0IGlucHV0X2RldiAqaW5w dXQgPSBOVUxMOw0KPiANCj4gTm8gbmVlZCB0byBpbml0aWFsaXplIHZhcmlhYmxlcyBsaWtlIHRo aXMsIGl0IG9ubHkgaHVydHMsIGFzIG90aGVyd2lzZSBjb21waWxlciBjYW4gd2FybiB5b3UgaWYg eW91IGZvcmdlciB0byBhc3NpZ24gYSB2YWx1ZSB0byBhIHZhcmlhYmxlIGFuZCB0cnkgdG8gdXNl IGl0Lg0KDQpBZ3JlZWQsIHNob3VsZCBtb2RpZmllZCBpbiBQQVRDSCB2Ny4NCg0KPiANCj4gPiAr DQo+ID4gKwlpbnB1dCA9IGRldm1faW5wdXRfYWxsb2NhdGVfZGV2aWNlKGRldik7DQo+ID4gKwlp ZiAoIWlucHV0KQ0KPiA+ICsJCXJldHVybiAtRU5PTUVNOw0KPiA+ICsNCj4gPiArCXRzLT5pbnB1 dF9kZXYgPSBpbnB1dDsNCj4gPiArCWlucHV0LT5uYW1lID0gSUxJVEVLX1RTX05BTUU7DQo+ID4g KwlpbnB1dC0+aWQuYnVzdHlwZSA9IEJVU19JMkM7DQo+ID4gKw0KPiA+ICsJX19zZXRfYml0KElO UFVUX1BST1BfRElSRUNULCBpbnB1dC0+cHJvcGJpdCk7DQo+ID4gKwlpbnB1dC0+ZXZiaXRbMF0g PSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfQUJTKTsNCj4gPiArCWlucHV0LT5rZXli aXRbQklUX1dPUkQoQlROX1RPVUNIKV0gPSBCSVRfTUFTSyhCVE5fVE9VQ0gpOw0KPiANCj4gSSBk byBub3QgdGhpbmsgYW55dGhpbmcgb2YgdGhpcyBiZXNpZGVzIElOUFVUX1BST1BfRElSRUNUIGlz IG5lZWRlZCwgYXMgaW5wdXRfc2V0X2Fic19wYXJhbXMsIGFuZCBpbnB1dF9tdF9pbml0X3Nsb3Rz IHdpbGwgc2V0IG5lZWRlZCBjYXBhYmlsaXRpZXMuDQoNCkFncmVlZCwgc2hvdWxkIHJlbW92ZSB0 aG9zZSBpbiBQQVRDSCB2Ny4NCg0KPiANCj4gPiArDQo+ID4gKwkvKiBTaW5nbGUgdG91Y2ggaW5w dXQgc2V0dXAgKi8NCj4gPiArCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfWCwgdHMt PnNjcmVlbl9taW5feCwNCj4gPiArCQkJICAgICB0cy0+c2NyZWVuX21heF94LCAwLCAwKTsNCj4g PiArCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfWSwgdHMtPnNjcmVlbl9taW5feSwN Cj4gPiArCQkJICAgICB0cy0+c2NyZWVuX21heF95LCAwLCAwKTsNCj4gPiArDQo+ID4gKwkvKiBN dWx0aS10b3VjaCBpbnB1dCBzZXR1cCAqLw0KPiA+ICsJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5w dXQsIEFCU19NVF9QT1NJVElPTl9YLA0KPiA+ICsJCQkgICAgIHRzLT5zY3JlZW5fbWluX3gsDQo+ ID4gKwkJCSAgICAgdHMtPnNjcmVlbl9tYXhfeCwgMCwgMCk7DQo+ID4gKwlpbnB1dF9zZXRfYWJz X3BhcmFtcyhpbnB1dCwgQUJTX01UX1BPU0lUSU9OX1ksDQo+ID4gKwkJCSAgICAgdHMtPnNjcmVl bl9taW5feSwNCj4gPiArCQkJICAgICB0cy0+c2NyZWVuX21heF95LCAwLCAwKTsNCj4gPiArDQo+ ID4gKwl0b3VjaHNjcmVlbl9wYXJzZV9wcm9wZXJ0aWVzKGlucHV0LCB0cnVlLCAmdHMtPnByb3Ap Ow0KPiA+ICsNCj4gPiArCXJldCA9IGlucHV0X210X2luaXRfc2xvdHMoaW5wdXQsIHRzLT5tYXhf dHAsIElOUFVUX01UX0RJUkVDVCk7DQo+IA0KPiBJIHByZWZlciB2YXJpYWJsZXMgdGhhdCBob2xk IGVycm9yIGNvZGVzIHRvIGJlIGNhbGxlZCAiZXJyb3IiLg0KDQpVbmRlcnN0YW5kLCBzaG91bGQg Y2hlY2sgYW5kIG1vZGlmeSB3aG9sZSBmaWxlIGluIFBBVENIIHY3Lg0KDQo+IA0KPiBBbHNvLCBp ZiB5b3Ugc3BlY2lmeSBJTlBVVF9NVF9EUk9QX1VOVVNFRCBhcyBhbiBhZGRpdGlvbmFsIGZsYWcg Zm9yDQo+IGlucHV0X210X2luaXRfc2xvdHMoKSBhbmQgdXNlIGlucHV0X210X3N5bmNfZnJhbWUo KSB3aGVuIHJlcG9ydGluZyBldmVudHMgeW91IHdvdWxkIG5vdCBuZWVkIHRvIHRyYWNrIHRoZSBz dGF0ZSBvZiBjb250YWN0cyBpbiB5b3VyIGRyaXZlciBhbmQgZXhwbGljaXRseSByZWxlYXNlIHRo ZW0uDQoNCkFncmVlZCwgc2hvdWxkIG1vZGlmeSBhbmQgcmVtb3ZlIHJlbGF0ZWQgZmxvdyBpbiBQ QVRDSCB2Ny4NCg0KPiANCj4gDQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2X2VycihkZXYs ICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBNVCBzbG90cywgZXJyOiVkXG4iLCByZXQpOw0KPiA+ICsJ CXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0ID0gaW5wdXRfcmVnaXN0ZXJf ZGV2aWNlKGlucHV0KTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgImZh aWxlZCB0byByZWdpc3RlciBpbnB1dCBkZXZpY2UsIGVycjolZFxuIiwgcmV0KTsNCj4gPiArCQly ZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgaXJxcmV0dXJuX3QgaWxpdGVrX2kyY19pc3IoaW50IGlycSwgdm9pZCAq ZGV2X2lkKSB7DQo+ID4gKwlzdHJ1Y3QgaWxpdGVrX3RzX2RhdGEgKnRzID0gZGV2X2lkOw0KPiA+ ICsJaW50IHJldCA9IDA7DQo+ID4gKw0KPiA+ICsJcmV0ID0gdHMtPnByb2Nlc3NfYW5kX3JlcG9y dCh0cyk7DQo+ID4gKw0KPiA+ICsJaWYgKHJldCA8IDApIHsNCj4gPiArCQlkZXZfZXJyKCZ0cy0+ Y2xpZW50LT5kZXYsICJbJXNdIGVycjolZFxuIiwgX19mdW5jX18sIHJldCk7DQo+ID4gKwkJcmV0 dXJuIElSUV9OT05FOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiBJUlFfSEFORExFRDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHNzaXplX3QgZmlybXdhcmVfdmVyc2lvbl9zaG93 KHN0cnVjdCBkZXZpY2UgKmRldiwNCj4gPiArCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1 dGUgKmF0dHIsIGNoYXIgKmJ1Zikgew0KPiA+ICsJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9 IHRvX2kyY19jbGllbnQoZGV2KTsNCj4gPiArCXN0cnVjdCBpbGl0ZWtfdHNfZGF0YSAqdHMgPSBp MmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gc2NucHJpbnRm KGJ1ZiwgUEFHRV9TSVpFLA0KPiA+ICsJCQkgImZ3IHZlcnNpb246IFslMDJYJTAyWC4lMDJYJTAy WC4lMDJYJTAyWC4lMDJYJTAyWF1cbiIsDQo+ID4gKwkJCSB0cy0+ZmlybXdhcmVfdmVyWzBdLCB0 cy0+ZmlybXdhcmVfdmVyWzFdLA0KPiA+ICsJCQkgdHMtPmZpcm13YXJlX3ZlclsyXSwgdHMtPmZp cm13YXJlX3ZlclszXSwNCj4gPiArCQkJIHRzLT5maXJtd2FyZV92ZXJbNF0sIHRzLT5maXJtd2Fy ZV92ZXJbNV0sDQo+ID4gKwkJCSB0cy0+ZmlybXdhcmVfdmVyWzZdLCB0cy0+ZmlybXdhcmVfdmVy WzddKTsgfSBzdGF0aWMgDQo+ID4gK0RFVklDRV9BVFRSX1JPKGZpcm13YXJlX3ZlcnNpb24pOw0K PiA+ICsNCj4gPiArc3RhdGljIHNzaXplX3QgcHJvZHVjdF9pZF9zaG93KHN0cnVjdCBkZXZpY2Ug KmRldiwNCj4gPiArCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFy ICpidWYpIHsNCj4gPiArCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50 KGRldik7DQo+ID4gKwlzdHJ1Y3QgaWxpdGVrX3RzX2RhdGEgKnRzID0gaTJjX2dldF9jbGllbnRk YXRhKGNsaWVudCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0la RSwgInByb2R1Y3QgaWQ6IFslMDRYXSwgbW9kdWxlOiBbJXNdXG4iLA0KPiA+ICsJCQkgdHMtPm1j dV92ZXIsIHRzLT5wcm9kdWN0X2lkKTsNCj4gPiArfQ0KPiA+ICtzdGF0aWMgREVWSUNFX0FUVFJf Uk8ocHJvZHVjdF9pZCk7DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaWxp dGVrX3N5c2ZzX2F0dHJzW10gPSB7DQo+ID4gKwkmZGV2X2F0dHJfZmlybXdhcmVfdmVyc2lvbi5h dHRyLA0KPiA+ICsJJmRldl9hdHRyX3Byb2R1Y3RfaWQuYXR0ciwNCj4gPiArCU5VTEwNCj4gPiAr fTsNCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGlsaXRla19hdHRy c19ncm91cFtdID0gew0KPiA+ICsJey5hdHRycyA9IGlsaXRla19zeXNmc19hdHRyc30sDQo+ID4g K307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGlsaXRla190c19pMmNfcHJvYmUoc3RydWN0IGky Y19jbGllbnQgKmNsaWVudCwNCj4gPiArCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNl X2lkICppZCkgew0KPiA+ICsJc3RydWN0IGlsaXRla190c19kYXRhICp0cyA9IE5VTEw7DQo+ID4g KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7DQo+ID4gKwlpbnQgcmV0ID0gMDsN Cj4gDQo+IFBsZWFzZSBkcm9wIHVubmVlZGVkIGluaXRpYWxpemF0aW9ucywgcy9yZXQvZXJyb3Iv DQoNCkFncmVlZCwgc2hvdWxkIGNoZWNrIGFuZCBtb2RpZnkgd2hvbGUgZmlsZSBpbiBQQVRDSCB2 Ny4NCg0KPiANCj4gPiArDQo+ID4gKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVu dC0+YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgew0KPiA+ICsJCWRldl9lcnIoZGV2LCAiJXM6IGky YyBjaGVjayBmdW5jdGlvbmFsaXR5IGZhaWxlZFxuIiwNCj4gPiArCQkJSUxJVEVLX1RTX05BTUUp Ow0KPiANCj4gSSBkbyBub3QgdGhpbmsgeW91IG5lZWQgdG8gaGF2ZSBJTElURUtfVFNfTkFNRSBh cyBkZXZpY2UgYW5kIGRyaXZlciBuYW1lIGFyZSBhbHJlYWR5IHByaW50ZWQgYnkgZGV2X2Vyci4N Cg0KQWdyZWVkLCBzaG91bGQgbW9kaWZpZWQgaW4gUEFUQ0ggdjcuDQoNCj4gDQo+ID4gKwkJcmV0 dXJuIC1FTlhJTzsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwl0cyA9IGRldm1fa3phbGxvYyhkZXYs IHNpemVvZigqdHMpLCBHRlBfS0VSTkVMKTsNCj4gPiArCWlmICghdHMpDQo+ID4gKwkJcmV0dXJu IC1FTk9NRU07DQo+ID4gKw0KPiA+ICsJdHMtPmNsaWVudCA9IGNsaWVudDsNCj4gPiArCWkyY19z ZXRfY2xpZW50ZGF0YShjbGllbnQsIHRzKTsNCj4gPiArDQo+ID4gKwl0cy0+cmVzZXRfZ3BpbyA9 IGRldm1fZ3Bpb2RfZ2V0KGRldiwgInJlc2V0IiwgR1BJT0RfT1VUX0hJR0gpOw0KPiANCj4gTWFr ZSBpdCBkZXZtX2dwaW9kX2dldF9vcHRpb25hbCgpIGFzIHlvdSBhbHJlYWR5IGhhbmRsZSBpdCBi ZWluZyBub3QgcHJlc2VudCBpbiBpbGl0ZWtfcmVzZXQoKS4NCg0KQWdyZWVkLCBzaG91bGQgbW9k aWZ5IGluIFBBVENIIHY3DQoNCj4gDQo+ID4gKwlpZiAoSVNfRVJSKHRzLT5yZXNldF9ncGlvKSkg ew0KPiA+ICsJCXJldCA9IFBUUl9FUlIodHMtPnJlc2V0X2dwaW8pOw0KPiA+ICsJCWRldl9lcnIo ZGV2LCAicmVxdWVzdCBncGlvZCBmYWlsZWQsIGVycjolZCIsIHJldCk7DQo+ID4gKwkJcmV0dXJu IHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpbGl0ZWtfcmVzZXQodHMsIDEwMDAsIHRydWUp Ow0KPiA+ICsJcmV0ID0gaWxpdGVrX3Byb3RvY29sX2luaXQodHMpOw0KPiA+ICsJaWYgKHJldCA8 IDApIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgInByb3RvY29sIGluaXQgZmFpbGVkLCBlcnI6JWQi LCByZXQpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0ID0g aWxpdGVrX3JlYWRfdHBfaW5mbyh0cywgdHJ1ZSk7DQo+ID4gKwlpZiAocmV0IDwgMCkgew0KPiA+ ICsJCWRldl9lcnIoZGV2LCAicmVhZCB0cCBpbmZvIGZhaWxlZCwgZXJyOiVkIiwgcmV0KTsNCj4g PiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldCA9IGlsaXRla19pbnB1 dF9kZXZfaW5pdChkZXYsIHRzKTsNCj4gPiArCWlmIChyZXQgPCAwKSB7DQo+ID4gKwkJZGV2X2Vy cihkZXYsICJpbnB1dCBkZXYgaW5pdCBmYWlsZWQsIGVycjolZCIsIHJldCk7DQo+ID4gKwkJcmV0 dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFk ZWRfaXJxKGRldiwgdHMtPmNsaWVudC0+aXJxLCBOVUxMLA0KPiA+ICsJCQkJCWlsaXRla19pMmNf aXNyLCBJUlFGX09ORVNIT1QsDQo+ID4gKwkJCQkJImlsaXRla190b3VjaF9pcnEiLCB0cyk7DQo+ ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2X2VycihkZXYsICJyZXF1ZXN0IHRocmVhZGVkIGly cSBmYWlsZWQsIGVycjolZFxuIiwgcmV0KTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCXJldCA9IGRldm1fZGV2aWNlX2FkZF9ncm91cChkZXYsIGlsaXRla19hdHRy c19ncm91cCk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2X2VycihkZXYsICJzeXNmcyBj cmVhdGUgZ3JvdXAgZmFpbGVkLCBlcnI6JWRcbiIsIHJldCk7DQo+ID4gKwkJcmV0dXJuIHJldDsN Cj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIGludCBfX21heWJlX3VudXNlZCBpbGl0ZWtfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYp IHsNCj4gPiArCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7 DQo+ID4gKwlzdHJ1Y3QgaWxpdGVrX3RzX2RhdGEgKnRzID0gaTJjX2dldF9jbGllbnRkYXRhKGNs aWVudCk7DQo+ID4gKwlpbnQgZXJyb3IgPSAwOw0KPiA+ICsNCj4gPiArCWRpc2FibGVfaXJxKGNs aWVudC0+aXJxKTsNCj4gPiArDQo+ID4gKwlpZiAoZGV2aWNlX21heV93YWtldXAoZGV2KSkgew0K PiA+ICsJCWVuYWJsZV9pcnFfd2FrZShjbGllbnQtPmlycSk7DQo+IA0KPiBZb3UgZG8gbm90IG5l ZWQgdG8gZW5hYmxlIGlycSB3YWtlIGhlcmUsIGkyYyBjb3JlIHdpbGwgZG8gaXQgZm9yIHlvdS4N Cg0KVW5kZXJzdGFuZCwgc2hvdWxkIG1vZGlmeSBpbiBQQVRDSCB2Ny4NCg0KPiANCj4gPiArCX0g ZWxzZSB7DQo+ID4gKwkJZXJyb3IgPSBhcGlfcHJvdG9jb2xfc2V0X2NtZCh0cywgU0VUX0lDX1NM RUVQLCBOVUxMLCBOVUxMKTsNCj4gPiArCQlpZiAoZXJyb3IgPCAwKQ0KPiA+ICsJCQlyZXR1cm4g ZXJyb3I7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgaWxpdGVrX3Jlc3VtZShzdHJ1Y3QgZGV2aWNl ICpkZXYpIHsNCj4gPiArCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50 KGRldik7DQo+ID4gKwlzdHJ1Y3QgaWxpdGVrX3RzX2RhdGEgKnRzID0gaTJjX2dldF9jbGllbnRk YXRhKGNsaWVudCk7DQo+ID4gKwlpbnQgZXJyb3IgPSAwOw0KPiA+ICsNCj4gPiArCWlmIChkZXZp Y2VfbWF5X3dha2V1cChkZXYpKSB7DQo+ID4gKwkJZGlzYWJsZV9pcnFfd2FrZShjbGllbnQtPmly cSk7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCWVycm9yID0gYXBpX3Byb3RvY29sX3NldF9jbWQo dHMsIFNFVF9JQ19XQUtFLCBOVUxMLCBOVUxMKTsNCj4gPiArCQlpZiAoZXJyb3IgPCAwKQ0KPiA+ ICsJCQlyZXR1cm4gZXJyb3I7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWxpdGVrX3Jlc2V0KHRz LCB0cy0+cmVzZXRfdGltZSwgZmFsc2UpOw0KPiANCj4gQXJlIHlvdSBzdXJlIHlvdSBuZWVkIHRv IHBlcmZvcm0gcmVzZXQgd2hlbiBkZXZpY2UgaXMgYSB3YWtldXAgc291cmNlPw0KPiBJJ2QgZXhw ZWN0IGluIHRoYXQgY2FzZSBpdCB3b3VsZCBzdGF5IG9wZXJhdGlvbmFsLg0KDQpJdCBzaG91bGQg cGVyZm9ybSByZXNldCBhZnRlciBTRVRfSUNfV0FLRSwgc2hvdWxkIG1vZGlmeSBpbiBQQVRDSCB2 Ny4NCg0KPiANCj4gPiArCWVuYWJsZV9pcnEoY2xpZW50LT5pcnEpOw0KPiA+ICsNCj4gPiArCXJl dHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoaWxp dGVrX3BtX29wcywgaWxpdGVrX3N1c3BlbmQsIA0KPiA+ICtpbGl0ZWtfcmVzdW1lKTsNCj4gPiAr DQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBpbGl0ZWtfdHNfaTJjX2lk W10gPSB7DQo+ID4gKwl7SUxJVEVLX1RTX05BTUUsIDB9LA0KPiA+ICsJeyB9LA0KPiA+ICt9Ow0K PiA+ICtNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgaWxpdGVrX3RzX2kyY19pZCk7DQo+ID4gKw0K PiA+ICsjaWZkZWYgQ09ORklHX0FDUEkNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2Rl dmljZV9pZCBpbGl0ZWt0c19hY3BpX2lkW10gPSB7DQo+ID4gKwl7ICJJTFRLMDAwMSIsIDAgfSwN Cj4gPiArCXsgfSwNCj4gPiArfTsNCj4gPiArTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBpbGl0 ZWt0c19hY3BpX2lkKTsgI2VuZGlmDQo+ID4gKw0KPiA+ICsjaWZkZWYgQ09ORklHX09GDQo+ID4g K3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGlsaXRla190c19pMmNfbWF0Y2hbXSA9 IHsNCj4gPiArCXsuY29tcGF0aWJsZSA9ICJpbGl0ZWssaWxpMjEzMCIsfSwNCj4gPiArCXsuY29t cGF0aWJsZSA9ICJpbGl0ZWssaWxpMjEzMSIsfSwNCj4gPiArCXsuY29tcGF0aWJsZSA9ICJpbGl0 ZWssaWxpMjEzMiIsfSwNCj4gPiArCXsuY29tcGF0aWJsZSA9ICJpbGl0ZWssaWxpMjMxNiIsfSwN Cj4gPiArCXsuY29tcGF0aWJsZSA9ICJpbGl0ZWssaWxpMjMyMiIsfSwNCj4gPiArCXsuY29tcGF0 aWJsZSA9ICJpbGl0ZWssaWxpMjMyMyIsfSwNCj4gPiArCXsuY29tcGF0aWJsZSA9ICJpbGl0ZWss aWxpMjMyNiIsfSwNCj4gPiArCXsuY29tcGF0aWJsZSA9ICJpbGl0ZWssaWxpMjUyMCIsfSwNCj4g PiArCXsuY29tcGF0aWJsZSA9ICJpbGl0ZWssaWxpMjUyMSIsfSwNCj4gPiArCXsgfSwNCj4gPiAr fTsNCj4gPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgaWxpdGVrX3RzX2kyY19tYXRjaCk7ICNl bmRpZg0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGlsaXRla190c19pMmNf ZHJpdmVyID0gew0KPiA+ICsJLmRyaXZlciA9IHsNCj4gPiArCQkubmFtZSA9IElMSVRFS19UU19O QU1FLA0KPiA+ICsJCS5wbSA9ICZpbGl0ZWtfcG1fb3BzLA0KPiA+ICsJCS5vZl9tYXRjaF90YWJs ZSA9IG9mX21hdGNoX3B0cihpbGl0ZWtfdHNfaTJjX21hdGNoKSwNCj4gPiArCQkuYWNwaV9tYXRj aF90YWJsZSA9IEFDUElfUFRSKGlsaXRla3RzX2FjcGlfaWQpLA0KPiA+ICsJfSwNCj4gPiArCS5w cm9iZSA9IGlsaXRla190c19pMmNfcHJvYmUsDQo+ID4gKwkuaWRfdGFibGUgPSBpbGl0ZWtfdHNf aTJjX2lkLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArbW9kdWxlX2kyY19kcml2ZXIoaWxpdGVrX3Rz X2kyY19kcml2ZXIpOw0KPiA+ICsNCj4gPiArTU9EVUxFX0FVVEhPUigiSUxJVEVLIik7DQo+ID4g K01PRFVMRV9ERVNDUklQVElPTigiSUxJVEVLIEkyQyBUb3VjaHNjcmVlbiBEcml2ZXIiKTsgDQo+ ID4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsNCj4gPiAtLQ0KPiA+IDIuMjUuMQ0KPiA+IA0KPiA+ IA0KPiANCj4gVGhhbmtzLg0KPiANCj4gLS0NCj4gRG1pdHJ5DQoNClRoYW5rIHlvdSB2ZXJ5IG11 Y2guDQoNCi0tDQpKb2UgSHVuZw0K