From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [PATCH v7 1/2] drm/panel: Add support for Truly NT35597 panel driver Date: Thu, 20 Sep 2018 11:52:26 -0400 Message-ID: <20180920155226.GC188300@art_vandelay> References: <1537412140-5252-1-git-send-email-abhinavk@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-yw1-xc43.google.com (mail-yw1-xc43.google.com [IPv6:2607:f8b0:4864:20::c43]) by gabe.freedesktop.org (Postfix) with ESMTPS id BD1526E632 for ; Thu, 20 Sep 2018 15:52:27 +0000 (UTC) Received: by mail-yw1-xc43.google.com with SMTP id d193-v6so1066157ywb.3 for ; Thu, 20 Sep 2018 08:52:27 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1537412140-5252-1-git-send-email-abhinavk@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Abhinav Kumar Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, bjorn.andersson@linaro.org, thierry.reding@gmail.com, hoegsberg@google.com, seanpaul@chromium.org, chandanu@codeaurora.org List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCBTZXAgMTksIDIwMTggYXQgMDc6NTU6MzlQTSAtMDcwMCwgQWJoaW5hdiBLdW1hciB3 cm90ZToKPiBGcm9tOiAiYWJoaW5hdmtAY29kZWF1cm9yYS5vcmciIDxhYmhpbmF2a0Bjb2RlYXVy b3JhLm9yZz4KPiAKPiBBZGQgc3VwcG9ydCBmb3IgVHJ1bHkgTlQzNTU5NyBwYW5lbCBkcml2ZXIg dXNlZAo+IGluIE1TTSByZWZlcmVuY2UgcGxhdGZvcm1zLgo+IAo+IFRoaXMgcGFuZWwgZHJpdmVy IHN1cHBvcnRzIGJvdGggc2luZ2xlIERTSSBhbmQgZHVhbCBEU0kKPiBtb2Rlcy4KPiAKPiBIb3dl dmVyLCB0aGlzIHBhdGNoIHNlcmllcyBhZGRzIHN1cHBvcnQgb25seSBmb3IKPiBkdWFsIERTSSBt b2RlLgo+IAo+IENoYW5nZXMgaW4gdjc6Cj4gLSBNYWtlIHRoZSBwYW5lbCBjb21tYW5kcywgbmFt ZSBhbmQgbW9kZSBhcyBjb25zdAo+IC0gQ29uZmlndXJlIHRoZSByZXNldCBwaW4gYXMgYWN0aXZl IGxvdyBpbiB0aGUgZGV2aWNlCj4gICB0cmVlIGFuZCBhZGp1c3QgdGhlIHJlc2V0IHNlcXVlbmNl Cj4gLSBSZW1vdmUgdGhlIG1hY3JvcyB0byBjYWxsIHRoZSBmdW5jdGlvbnMKPiAtIEZpeCByZXR1 cm4gY29uZGl0aW9ucyBpbiB0aGUgcGFuZWwgcHJlcGFyZSBjYWxsCj4gLSBDaGFuZ2UgdGhlIGNv bXBhdGlibGUgc3RyaW5nIHRvIGhhdmUgb25seSB0aGUKPiAgIHBhbmVsIGRyaXZlciBhbmQgdGhl IHJlc29sdXRpb24gZGV0YWlscwo+IAo+IFNpZ25lZC1vZmYtYnk6IEFyY2hpdCBUYW5lamEgPGFy Y2hpdHRAY29kZWF1cm9yYS5vcmc+Cj4gU2lnbmVkLW9mZi1ieTogQWJoaW5hdiBLdW1hciA8YWJo aW5hdmtAY29kZWF1cm9yYS5vcmc+CgpIZXkgQWJoaW5hdiwKVGhhbmtzIGZvciByZXZpc2luZyB0 aGUgcGF0Y2guIEknbSBhIGJpdCB0b3JuIG9uIHNlbmRpbmcgbW9yZSBmZWVkYmFjayBzaW5jZQp5 b3UncmUgYWxyZWFkeSBvbiB2NyBhbmQgaXQncyBiZWVuIG9uLWxpc3QgZm9yIGEgd2hpbGUuIFVu Zm9ydHVuYXRlbHkgSSB0aGluawp0aGVyZSdzIGVub3VnaCB0byB3YXJyYW50IGEgcmVzcGluLCBz byBhcG9sb2dpZXMgZm9yIGtlZXBpbmcgdGhpcyB0aGluZyBpbgpsaW1ibywgYnV0IGhvcGVmdWxs eSB3ZSdyZSBjb252ZXJnaW5nLgoKPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25m aWcgICAgICAgICAgICAgICB8ICAgOCArCj4gIGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmls ZSAgICAgICAgICAgICAgfCAgIDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtdHJ1 bHktbnQzNTU5Ny5jIHwgNzA2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgMyBmaWxl cyBjaGFuZ2VkLCA3MTUgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL3BhbmVsL3BhbmVsLXRydWx5LW50MzU1OTcuYwo+IAo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29u ZmlnCj4gaW5kZXggNjAyMGMzMC4uN2FlNzRjMiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vcGFuZWwvS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnCj4g QEAgLTE4Niw0ICsxODYsMTIgQEAgY29uZmlnIERSTV9QQU5FTF9TSVRST05JWF9TVDc3ODlWCj4g IAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBTaXRy b25peAo+ICAJICBTVDc3ODlWIGNvbnRyb2xsZXIgZm9yIDI0MHgzMjAgTENEIHBhbmVscwo+ICAK PiArY29uZmlnIERSTV9QQU5FTF9UUlVMWV9OVDM1NTk3X1dRWEdBCj4gKwl0cmlzdGF0ZSAiVHJ1 bHkgV1FYR0EiCj4gKwlkZXBlbmRzIG9uIE9GCj4gKwlkZXBlbmRzIG9uIERSTV9NSVBJX0RTSQo+ ICsJc2VsZWN0IFZJREVPTU9ERV9IRUxQRVJTCgpJIGRvbid0IHRoaW5rIHlvdSdyZSB1c2luZyB0 aGUgdmlkZW9tb2RlIHN0dWZmIGFueSBsb25nZXI/Cgo+ICsJaGVscAo+ICsJICBTYXkgWSBoZXJl IGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciBUcnVseSBOVDM1NTk3IFdRWEdBIER1 YWwgRFNJCj4gKwkgIFZpZGVvIE1vZGUgcGFuZWwKPiAgZW5kbWVudQo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFr ZWZpbGUKPiBpbmRleCA1Y2NhYWE5Li44MGZkMTlmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9wYW5lbC9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmls ZQo+IEBAIC0xOSwzICsxOSw0IEBAIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0VJS09fNDNXVkYx RykgKz0gcGFuZWwtc2Vpa28tNDN3dmYxZy5vCj4gIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0hB UlBfTFExMDFSMVNYMDEpICs9IHBhbmVsLXNoYXJwLWxxMTAxcjFzeDAxLm8KPiAgb2JqLSQoQ09O RklHX0RSTV9QQU5FTF9TSEFSUF9MUzA0M1QxTEUwMSkgKz0gcGFuZWwtc2hhcnAtbHMwNDN0MWxl MDEubwo+ICBvYmotJChDT05GSUdfRFJNX1BBTkVMX1NJVFJPTklYX1NUNzc4OVYpICs9IHBhbmVs LXNpdHJvbml4LXN0Nzc4OXYubwo+ICtvYmotJChDT05GSUdfRFJNX1BBTkVMX1RSVUxZX05UMzU1 OTdfV1FYR0EpICs9IHBhbmVsLXRydWx5LW50MzU1OTcubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vcGFuZWwvcGFuZWwtdHJ1bHktbnQzNTU5Ny5jIGIvZHJpdmVycy9ncHUvZHJtL3Bh bmVsL3BhbmVsLXRydWx5LW50MzU1OTcuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXgg MDAwMDAwMC4uYTA3MGQwZgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v cGFuZWwvcGFuZWwtdHJ1bHktbnQzNTU5Ny5jCj4gQEAgLTAsMCArMSw3MDYgQEAKPiArLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiArLyoKPiArICogQ29weXJpZ2h0IChjKSAy MDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICovCj4g Kwo+ICsjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgo+ICsjaW5jbHVkZSA8bGludXgv b2ZfZ3JhcGguaD4KPiArI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgo+ICsj aW5jbHVkZSA8bGludXgvcGluY3RybC9jb25zdW1lci5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2Zf ZGV2aWNlLmg+Cj4gKwo+ICsjaW5jbHVkZSA8dmlkZW8vbWlwaV9kaXNwbGF5Lmg+Cj4gKyNpbmNs dWRlIDx2aWRlby9vZl92aWRlb21vZGUuaD4KPiArI2luY2x1ZGUgPHZpZGVvL3ZpZGVvbW9kZS5o PgoKU2FtZSBjb21tZW50IGhlcmUgcmU6IHZpZGVvbW9kZQoKPiArCj4gKyNpbmNsdWRlIDxkcm0v ZHJtUC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2Ry bV9taXBpX2RzaS5oPgo+ICsKPiArc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCByZWd1bGF0b3Jf bmFtZXNbXSA9IHsKPiArCSJ2ZGRhIiwKPiArCSJ2ZGlzcHAiLAo+ICsJInZkaXNwbiIsCj4gK307 Cj4gKwo+ICtzdGF0aWMgdW5zaWduZWQgbG9uZyBjb25zdCByZWd1bGF0b3JfZW5hYmxlX2xvYWRz W10gPSB7Cj4gKwk2MjAwMCwKPiArCTEwMDAwMCwKPiArCTEwMDAwMCwKPiArfTsKPiArCj4gK3N0 YXRpYyB1bnNpZ25lZCBsb25nIGNvbnN0IHJlZ3VsYXRvcl9kaXNhYmxlX2xvYWRzW10gPSB7Cj4g Kwk4MCwKPiArCTEwMCwKPiArCTEwMCwKPiArfTsKPiArCj4gK3N0cnVjdCBudDM1NTk3X2NvbmZp ZyB7Cj4gKwl1MzIgd2lkdGhfbW07Cj4gKwl1MzIgaGVpZ2h0X21tOwo+ICsJY29uc3QgY2hhciAq cGFuZWxfbmFtZTsKPiArCWNvbnN0IHZvaWQgKnBhbmVsX29uX2NtZHM7Cj4gKwl1MzIgbnVtX29u X2NtZHM7Cj4gKwljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZG07Cj4gK307Cj4gKwo+ ICtzdHJ1Y3QgdHJ1bHlfbnQzNTU5NyB7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gKwlzdHJ1 Y3QgZHJtX3BhbmVsIHBhbmVsOwo+ICsKPiArCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHN1 cHBsaWVzW0FSUkFZX1NJWkUocmVndWxhdG9yX25hbWVzKV07Cj4gKwo+ICsJc3RydWN0IGdwaW9f ZGVzYyAqcmVzZXRfZ3BpbzsKPiArCXN0cnVjdCBncGlvX2Rlc2MgKm1vZGVfZ3BpbzsKPiArCj4g KwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0Owo+ICsKPiArCXN0cnVjdCBtaXBp X2RzaV9kZXZpY2UgKmRzaVsyXTsKPiArCj4gKwljb25zdCBzdHJ1Y3QgbnQzNTU5N19jb25maWcg KmNvbmZpZzsKPiArCWJvb2wgcHJlcGFyZWQ7Cj4gKwlib29sIGVuYWJsZWQ7Cj4gK307Cj4gKwo+ ICtzdGF0aWMgaW5saW5lIHN0cnVjdCB0cnVseV9udDM1NTk3ICpwYW5lbF90b19jdHgoc3RydWN0 IGRybV9wYW5lbCAqcGFuZWwpCj4gK3sKPiArCXJldHVybiBjb250YWluZXJfb2YocGFuZWwsIHN0 cnVjdCB0cnVseV9udDM1NTk3LCBwYW5lbCk7Cj4gK30KPiArCj4gKyNkZWZpbmUgTUFYX0xFTgk1 CgpBc2lkZSBmcm9tIHRoZSBhbWJpZ3VvdXMgbmFtZSwgdGhpcyBpcyBvbmx5IHVzZWQgaW4gb25l IHBsYWNlIGFuZCBzZWVtcyBsaWtlCml0J3MgMSBieXRlIHRvbyBiaWcuIENvdWxkIHlvdSBwbGVh c2UganVzdCBkZWNsYXJlIGNvbW1hbmRzIGFzICd1OCBjb21tYW5kc1s0XTsnCmJlbG93PwoKPiAr I2RlZmluZSBTSE9SVF9QQUNLRVQgMgo+ICsjZGVmaW5lIExPTkdfUEFDS0VUIDQKClNIT1JUX1BB Q0tFVCBhbmQgTE9OR19QQUNLRVQgYXJlbid0IHVzZWQgYW55d2hlcmUKCj4gKwo+ICtzdHJ1Y3Qg Y21kX3NldCB7Cj4gKwl1OCBjb21tYW5kc1tNQVhfTEVOXTsKPiArCXU4IHNpemU7Cj4gK307Cj4g Kwo+ICtzdGF0aWMgc3RydWN0IGNtZF9zZXQgcWNvbV8ya19wYW5lbF9tYWdpY19jbWRzW10gPSB7 Cj4gKwkvKiBDTUQyX1AwICovCj4gKwl7IHsgMHhmZiwgMHgyMCB9LCAyIH0sCj4gKwl7IHsgMHhm YiwgMHgwMSB9LCAyIH0sCj4gKwl7IHsgMHgwMCwgMHgwMSB9LCAyIH0sCj4gKwl7IHsgMHgwMSwg MHg1NSB9LCAyIH0sCj4gKwl7IHsgMHgwMiwgMHg0NSB9LCAyIH0sCj4gKwl7IHsgMHgwNSwgMHg0 MCB9LCAyIH0sCj4gKwl7IHsgMHgwNiwgMHgxOSB9LCAyIH0sCj4gKwl7IHsgMHgwNywgMHgxZSB9 LCAyIH0sCj4gKwl7IHsgMHgwYiwgMHg3MyB9LCAyIH0sCj4gKwl7IHsgMHgwYywgMHg3MyB9LCAy IH0sCj4gKwl7IHsgMHgwZSwgMHhiMCB9LCAyIH0sCj4gKwl7IHsgMHgwZiwgMHhhZSB9LCAyIH0s Cj4gKwl7IHsgMHgxMSwgMHhiOCB9LCAyIH0sCj4gKwl7IHsgMHgxMywgMHgwMCB9LCAyIH0sCj4g Kwl7IHsgMHg1OCwgMHg4MCB9LCAyIH0sCj4gKwl7IHsgMHg1OSwgMHgwMSB9LCAyIH0sCj4gKwl7 IHsgMHg1YSwgMHgwMCB9LCAyIH0sCj4gKwl7IHsgMHg1YiwgMHgwMSB9LCAyIH0sCj4gKwl7IHsg MHg1YywgMHg4MCB9LCAyIH0sCj4gKwl7IHsgMHg1ZCwgMHg4MSB9LCAyIH0sCj4gKwl7IHsgMHg1 ZSwgMHgwMCB9LCAyIH0sCj4gKwl7IHsgMHg1ZiwgMHgwMSB9LCAyIH0sCj4gKwl7IHsgMHg3Miwg MHgxMSB9LCAyIH0sCj4gKwl7IHsgMHg2OCwgMHgwMyB9LCAyIH0sCj4gKwkvKiBDTUQyX1A0ICov Cj4gKwl7IHsgMHhGRiwgMHgyNCB9LCAyIH0sCj4gKwl7IHsgMHhGQiwgMHgwMSB9LCAyIH0sCj4g Kwl7IHsgMHgwMCwgMHgxQyB9LCAyIH0sCj4gKwl7IHsgMHgwMSwgMHgwQiB9LCAyIH0sCj4gKwl7 IHsgMHgwMiwgMHgwQyB9LCAyIH0sCj4gKwl7IHsgMHgwMywgMHgwMSB9LCAyIH0sCj4gKwl7IHsg MHgwNCwgMHgwRiB9LCAyIH0sCj4gKwl7IHsgMHgwNSwgMHgxMCB9LCAyIH0sCj4gKwl7IHsgMHgw NiwgMHgxMCB9LCAyIH0sCj4gKwl7IHsgMHgwNywgMHgxMCB9LCAyIH0sCj4gKwl7IHsgMHgwOCwg MHg4OSB9LCAyIH0sCj4gKwl7IHsgMHgwOSwgMHg4QSB9LCAyIH0sCj4gKwl7IHsgMHgwQSwgMHgx MyB9LCAyIH0sCj4gKwl7IHsgMHgwQiwgMHgxMyB9LCAyIH0sCj4gKwl7IHsgMHgwQywgMHgxNSB9 LCAyIH0sCj4gKwl7IHsgMHgwRCwgMHgxNSB9LCAyIH0sCj4gKwl7IHsgMHgwRSwgMHgxNyB9LCAy IH0sCj4gKwl7IHsgMHgwRiwgMHgxNyB9LCAyIH0sCj4gKwl7IHsgMHgxMCwgMHgxQyB9LCAyIH0s Cj4gKwl7IHsgMHgxMSwgMHgwQiB9LCAyIH0sCj4gKwl7IHsgMHgxMiwgMHgwQyB9LCAyIH0sCj4g Kwl7IHsgMHgxMywgMHgwMSB9LCAyIH0sCj4gKwl7IHsgMHgxNCwgMHgwRiB9LCAyIH0sCj4gKwl7 IHsgMHgxNSwgMHgxMCB9LCAyIH0sCj4gKwl7IHsgMHgxNiwgMHgxMCB9LCAyIH0sCj4gKwl7IHsg MHgxNywgMHgxMCB9LCAyIH0sCj4gKwl7IHsgMHgxOCwgMHg4OSB9LCAyIH0sCj4gKwl7IHsgMHgx OSwgMHg4QSB9LCAyIH0sCj4gKwl7IHsgMHgxQSwgMHgxMyB9LCAyIH0sCj4gKwl7IHsgMHgxQiwg MHgxMyB9LCAyIH0sCj4gKwl7IHsgMHgxQywgMHgxNSB9LCAyIH0sCj4gKwl7IHsgMHgxRCwgMHgx NSB9LCAyIH0sCj4gKwl7IHsgMHgxRSwgMHgxNyB9LCAyIH0sCj4gKwl7IHsgMHgxRiwgMHgxNyB9 LCAyIH0sCj4gKwkvKiBTVFYgKi8KPiArCXsgeyAweDIwLCAweDQwIH0sIDIgfSwKPiArCXsgeyAw eDIxLCAweDAxIH0sIDIgfSwKPiArCXsgeyAweDIyLCAweDAwIH0sIDIgfSwKPiArCXsgeyAweDIz LCAweDQwIH0sIDIgfSwKPiArCXsgeyAweDI0LCAweDQwIH0sIDIgfSwKPiArCXsgeyAweDI1LCAw eDZEIH0sIDIgfSwKPiArCXsgeyAweDI2LCAweDQwIH0sIDIgfSwKPiArCXsgeyAweDI3LCAweDQw IH0sIDIgfSwKPiArCS8qIFZlbmQgKi8KPiArCXsgeyAweEUwLCAweDAwIH0sIDIgfSwKPiArCXsg eyAweERDLCAweDIxIH0sIDIgfSwKPiArCXsgeyAweERELCAweDIyIH0sIDIgfSwKPiArCXsgeyAw eERFLCAweDA3IH0sIDIgfSwKPiArCXsgeyAweERGLCAweDA3IH0sIDIgfSwKPiArCXsgeyAweEUz LCAweDZEIH0sIDIgfSwKPiArCXsgeyAweEUxLCAweDA3IH0sIDIgfSwKPiArCXsgeyAweEUyLCAw eDA3IH0sIDIgfSwKPiArCS8qIFVEICovCj4gKwl7IHsgMHgyOSwgMHhEOCB9LCAyIH0sCj4gKwl7 IHsgMHgyQSwgMHgyQSB9LCAyIH0sCj4gKwkvKiBDTEsgKi8KPiArCXsgeyAweDRCLCAweDAzIH0s IDIgfSwKPiArCXsgeyAweDRDLCAweDExIH0sIDIgfSwKPiArCXsgeyAweDRELCAweDEwIH0sIDIg fSwKPiArCXsgeyAweDRFLCAweDAxIH0sIDIgfSwKPiArCXsgeyAweDRGLCAweDAxIH0sIDIgfSwK PiArCXsgeyAweDUwLCAweDEwIH0sIDIgfSwKPiArCXsgeyAweDUxLCAweDAwIH0sIDIgfSwKPiAr CXsgeyAweDUyLCAweDgwIH0sIDIgfSwKPiArCXsgeyAweDUzLCAweDAwIH0sIDIgfSwKPiArCXsg eyAweDU2LCAweDAwIH0sIDIgfSwKPiArCXsgeyAweDU0LCAweDA3IH0sIDIgfSwKPiArCXsgeyAw eDU4LCAweDA3IH0sIDIgfSwKPiArCXsgeyAweDU1LCAweDI1IH0sIDIgfSwKPiArCS8qIFJlc2V0 IFhET05CICovCj4gKwl7IHsgMHg1QiwgMHg0MyB9LCAyIH0sCj4gKwl7IHsgMHg1QywgMHgwMCB9 LCAyIH0sCj4gKwl7IHsgMHg1RiwgMHg3MyB9LCAyIH0sCj4gKwl7IHsgMHg2MCwgMHg3MyB9LCAy IH0sCj4gKwl7IHsgMHg2MywgMHgyMiB9LCAyIH0sCj4gKwl7IHsgMHg2NCwgMHgwMCB9LCAyIH0s Cj4gKwl7IHsgMHg2NywgMHgwOCB9LCAyIH0sCj4gKwl7IHsgMHg2OCwgMHgwNCB9LCAyIH0sCj4g KwkvKiBSZXNvbHV0aW9uOjE0NDB4MjU2MCAqLwo+ICsJeyB7IDB4NzIsIDB4MDIgfSwgMiB9LAo+ ICsJLyogbXV4ICovCj4gKwl7IHsgMHg3QSwgMHg4MCB9LCAyIH0sCj4gKwl7IHsgMHg3QiwgMHg5 MSB9LCAyIH0sCj4gKwl7IHsgMHg3QywgMHhEOCB9LCAyIH0sCj4gKwl7IHsgMHg3RCwgMHg2MCB9 LCAyIH0sCj4gKwl7IHsgMHg3RiwgMHgxNSB9LCAyIH0sCj4gKwl7IHsgMHg3NSwgMHgxNSB9LCAy IH0sCj4gKwkvKiBBQk9GRiAqLwo+ICsJeyB7IDB4QjMsIDB4QzAgfSwgMiB9LAo+ICsJeyB7IDB4 QjQsIDB4MDAgfSwgMiB9LAo+ICsJeyB7IDB4QjUsIDB4MDAgfSwgMiB9LAo+ICsJLyogU291cmNl IEVRICovCj4gKwl7IHsgMHg3OCwgMHgwMCB9LCAyIH0sCj4gKwl7IHsgMHg3OSwgMHgwMCB9LCAy IH0sCj4gKwl7IHsgMHg4MCwgMHgwMCB9LCAyIH0sCj4gKwl7IHsgMHg4MywgMHgwMCB9LCAyIH0s Cj4gKwkvKiBGUCBCUCAqLwo+ICsJeyB7IDB4OTMsIDB4MEEgfSwgMiB9LAo+ICsJeyB7IDB4OTQs IDB4MEEgfSwgMiB9LAo+ICsJLyogSW52ZXJzaW9uIFR5cGUgKi8KPiArCXsgeyAweDhBLCAweDAw IH0sIDIgfSwKPiArCXsgeyAweDlCLCAweEZGIH0sIDIgfSwKPiArCS8qIElNR1NXQVAgPTEgQFBv cnRTd2FwPTEgKi8KPiArCXsgeyAweDlELCAweEIwIH0sIDIgfSwKPiArCXsgeyAweDlGLCAweDYz IH0sIDIgfSwKPiArCXsgeyAweDk4LCAweDEwIH0sIDIgfSwKPiArCS8qIEZSTSAqLwo+ICsJeyB7 IDB4RUMsIDB4MDAgfSwgMiB9LAo+ICsJLyogQ01EMSAqLwo+ICsJeyB7IDB4RkYsIDB4MTAgfSwg MiB9LAo+ICsJLyogVkJQK1ZTQT0sVkZQID0gMTBIICovCj4gKwl7IHsgMHgzQiwgMHgwMywgMHgw QSwgMHgwQSB9LCA0IH0sCj4gKwkvKiBGVEUgb24gKi8KPiArCXsgeyAweDM1LCAweDAwIH0sIDIg fSwKPiArCS8qIEVOX0JLID0xKGF1dG8gYmxhY2spICovCj4gKwl7IHsgMHhFNSwgMHgwMSB9LCAy IH0sCj4gKwkvKiBDTUQgbW9kZSgxMCkgVkRPIG1vZGUoMDMpICovCj4gKwl7IHsgMHhCQiwgMHgw MyB9LCAyIH0sCj4gKwkvKiBOb24gUmVsb2FkIE1UUCAqLwo+ICsJeyB7IDB4RkIsIDB4MDEgfSwg MiB9LAo+ICt9Owo+ICsKPiArc3RhdGljIGludCB0cnVseV9kY3Nfd3JpdGUoc3RydWN0IGRybV9w YW5lbCAqcGFuZWwsIHUzMiBjb21tYW5kKQo+ICt7Cj4gKwlzdHJ1Y3QgdHJ1bHlfbnQzNTU5NyAq Y3R4ID0gcGFuZWxfdG9fY3R4KHBhbmVsKTsKPiArCWludCBpLCByZXQ7Cj4gKwo+ICsJZm9yIChp ID0gMDsgaSA8IEFSUkFZX1NJWkUoY3R4LT5kc2kpOyBpKyspIHsKPiArCQlyZXQgPSBtaXBpX2Rz aV9kY3Nfd3JpdGUoY3R4LT5kc2lbaV0sCj4gKwkJCWNvbW1hbmQsIE5VTEwsIDApOwoKVGhpcyBj YW4gZml0IG9uIG9uZSBsaW5lCgo+ICsJCWlmIChyZXQgPCAwKSB7Cj4gKwkJCURSTV9ERVZfRVJS T1IoY3R4LT5kZXYsCj4gKwkJCQkiY21kIDB4JXggZmFpbGVkIGZvciBkc2kgPSAlZFxuIiwgY29t bWFuZCwKPiArCQkJCQlpKTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ ICsKPiArc3RhdGljIGludCB0cnVseV9kY3Nfd3JpdGVfYnVmKHN0cnVjdCBkcm1fcGFuZWwgKnBh bmVsLAo+ICsJdTMyIHNpemUsIHU4ICpidWYpCj4gK3sKPiArCXN0cnVjdCB0cnVseV9udDM1NTk3 ICpjdHggPSBwYW5lbF90b19jdHgocGFuZWwpOwo+ICsJaW50IHJldCA9IDA7Cj4gKwlpbnQgaTsK PiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjdHgtPmRzaSk7IGkrKykgewo+ICsJ CXJldCA9IG1pcGlfZHNpX2Rjc193cml0ZV9idWZmZXIoY3R4LT5kc2lbaV0sCj4gKwkJCWJ1ZiwK PiArCQkJc2l6ZSk7CgpUaGlzIGNhbiBmaXQgb24gb25lIGxpbmUKCj4gKwo+ICsJCWlmIChyZXQg PCAwKSB7Cj4gKwkJCURSTV9ERVZfRVJST1IoY3R4LT5kZXYsCj4gKwkJCQkiZmFpbGVkIHRvIHR4 IGNtZCBbJWRdLCBlcnI6ICVkXG4iLAo+ICsJCQkJaSwgcmV0KTsKPiArCQkJcmV0dXJuIHJldDsK PiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCB0 cnVseV8zNTU5N19wb3dlcl9vbihzdHJ1Y3QgdHJ1bHlfbnQzNTU5NyAqY3R4KQo+ICt7Cj4gKwlp bnQgcmV0LCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN0eC0+c3VwcGxp ZXMpOyBpKyspIHsKPiArCQlyZXQgPSByZWd1bGF0b3Jfc2V0X2xvYWQoY3R4LT5zdXBwbGllc1tp XS5jb25zdW1lciwKPiArCQkJCQlyZWd1bGF0b3JfZW5hYmxlX2xvYWRzW2ldKTsKPiArCQlpZiAo cmV0KQo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldCA9IHJlZ3VsYXRvcl9idWxr X2VuYWJsZShBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMpLCBjdHgtPnN1cHBsaWVzKTsKPiArCWlm IChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJLyogUmVzZXQgc2VxdWVuY2Ugb2Yg dHJ1bHkgcGFuZWwgcmVxdWlyZXMKPiArCSAqIHRoZSByZXNldCBwaW4gdG8gYmUgcHVsbGVkIGhp Z2ggZm9yIDEwbXMKPiArCSAqIGZvbGxvd2VkIGJ5IGEgbG93IHBlcmlvZCBvZiAxMG1zIGFuZCB0 aGVuCgpUaGUgaGlnaHMgYW5kIGxvd3MgYXJlIGJhY2t3YXJkcyBpbiB0aGlzIGNvbW1lbnQuIFlv dXIgYWxzbyB3YXkgaW5zaWRlIDgwIGNoYXJzCmZvciB0aGlzIGNvbW1lbnQuIFBlcmhhcHMgaXQg d2FzIHByZXZpb3VzbHkgaW5kZW50ZWQgYSBidW5jaCBhbmQgaGFzbid0IGJlZW4KcmVmbG93ZWQ/ IEFueXdheXMsIGl0IG1pZ2h0IGJlIG1vcmUgY2xlYXIgaWYgeW91IGRvbid0IHRhbGsgYWJvdXQg d2hhdCB0aGUgcGluCmlzIGRvaW5nLCBidXQgcmF0aGVyIHRoZSByZXNldCBzdGF0ZSBvZiB0aGUg cGFuZWw6CgogICAgICAgIC8qCiAgICAgICAgICogUmVzZXQgc2VxdWVuY2Ugb2YgdHJ1bHkgcGFu ZWwgcmVxdWlyZXMgdGhlIHBhbmVsIHRvIGJlIG91dCBvZiByZXNldAogICAgICAgICAqIGZvciAx MG1zLCBmb2xsb3dlZCBieSBiZWluZyBoZWxkIGluIHJlc2V0IGZvciAxMG1zIGFuZCB0aGVuIG91 dCBhZ2FpbgogICAgICAgICAqLwoKPiArCSAqIHB1bGxlZCBoaWdoIGFnYWluCj4gKwkgKi8KPiAr Cj4gKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5yZXNldF9ncGlvLCAwKTsKPiArCXVzbGVlcF9yYW5n ZSgxMDAwMCwgMjAwMDApOwo+ICsJZ3Bpb2Rfc2V0X3ZhbHVlKGN0eC0+cmVzZXRfZ3BpbywgMSk7 Cj4gKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsKPiArCWdwaW9kX3NldF92YWx1ZShjdHgt PnJlc2V0X2dwaW8sIDApOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IHRydWx5X250MzU1OTdfcG93ZXJfb2ZmKHN0cnVjdCB0cnVseV9udDM1NTk3ICpjdHgpCj4gK3sK PiArCWludCByZXQsIGk7Cj4gKwo+ICsJZ3Bpb2Rfc2V0X3ZhbHVlKGN0eC0+cmVzZXRfZ3Bpbywg MSk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3R4LT5zdXBwbGllcyk7IGkr Kykgewo+ICsJCXJldCA9IHJlZ3VsYXRvcl9zZXRfbG9hZChjdHgtPnN1cHBsaWVzW2ldLmNvbnN1 bWVyLAo+ICsJCQkJcmVndWxhdG9yX2Rpc2FibGVfbG9hZHNbaV0pOwo+ICsJCWlmIChyZXQpCj4g KwkJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJlZ3VsYXRvcl9idWxrX2Rpc2Fi bGUoQVJSQVlfU0laRShjdHgtPnN1cHBsaWVzKSwgY3R4LT5zdXBwbGllcyk7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgdHJ1bHlfbnQzNTU5N19kaXNhYmxlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVs KQo+ICt7Cj4gKwlzdHJ1Y3QgdHJ1bHlfbnQzNTU5NyAqY3R4ID0gcGFuZWxfdG9fY3R4KHBhbmVs KTsKPiArCWludCByZXQ7Cj4gKwo+ICsJaWYgKCFjdHgtPmVuYWJsZWQpCj4gKwkJcmV0dXJuIDA7 Cj4gKwo+ICsJaWYgKGN0eC0+YmFja2xpZ2h0KSB7Cj4gKwkJcmV0ID0gYmFja2xpZ2h0X2Rpc2Fi bGUoY3R4LT5iYWNrbGlnaHQpOwo+ICsJCWlmIChyZXQgPCAwKQo+ICsJCQlEUk1fREVWX0VSUk9S KGN0eC0+ZGV2LCAiYmFja2xpZ2h0IGRpc2FibGUgZmFpbGVkICVkXG4iLAo+ICsJCQkJcmV0KTsK PiArCX0KPiArCj4gKwljdHgtPmVuYWJsZWQgPSBmYWxzZTsKPiArCXJldHVybiAwOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IHRydWx5X250MzU1OTdfdW5wcmVwYXJlKHN0cnVjdCBkcm1fcGFuZWwg KnBhbmVsKQo+ICt7Cj4gKwlzdHJ1Y3QgdHJ1bHlfbnQzNTU5NyAqY3R4ID0gcGFuZWxfdG9fY3R4 KHBhbmVsKTsKPiArCWludCByZXQgPSAwOwo+ICsKPiArCWlmICghY3R4LT5wcmVwYXJlZCkKPiAr CQlyZXR1cm4gMDsKPiArCj4gKwljdHgtPmRzaVswXS0+bW9kZV9mbGFncyA9IDA7Cj4gKwljdHgt PmRzaVsxXS0+bW9kZV9mbGFncyA9IDA7Cj4gKwo+ICsJcmV0ID0gdHJ1bHlfZGNzX3dyaXRlKHBh bmVsLCBNSVBJX0RDU19TRVRfRElTUExBWV9PRkYpOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlE Uk1fREVWX0VSUk9SKGN0eC0+ZGV2LAo+ICsJCQkic2V0X2Rpc3BsYXlfb2ZmIGNtZCBmYWlsZWQg cmV0ID0gJWRcbiIsCj4gKwkJCXJldCk7Cj4gKwl9Cj4gKwo+ICsJLyogMTIwbXMgZGVsYXkgcmVx dWlyZWQgaGVyZSBhcyBwZXIgRENTIHNwZWMgKi8KPiArCW1zbGVlcCgxMjApOwo+ICsKPiArCXJl dCA9IHRydWx5X2Rjc193cml0ZShwYW5lbCwgTUlQSV9EQ1NfRU5URVJfU0xFRVBfTU9ERSk7Cj4g KwlpZiAocmV0IDwgMCkgewo+ICsJCURSTV9ERVZfRVJST1IoY3R4LT5kZXYsCj4gKwkJCSJlbnRl cl9zbGVlcCBjbWQgZmFpbGVkIHJldCA9ICVkXG4iLAo+ICsJCQlyZXQpOwo+ICsJfQo+ICsKPiAr CXJldCA9IHRydWx5X250MzU1OTdfcG93ZXJfb2ZmKGN0eCk7Cj4gKwlpZiAocmV0IDwgMCkKPiAr CQlEUk1fREVWX0VSUk9SKGN0eC0+ZGV2LAo+ICsJCQkidHJ1bHlfbnQzNTU5N19wb3dlcl9vZmYg ZmFpbGVkIHJldCA9ICVkXG4iLAo+ICsJCQlyZXQpOwo+ICsKPiArCWN0eC0+cHJlcGFyZWQgPSBm YWxzZTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdHJ1bHlfbnQzNTU5 N19wcmVwYXJlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+ICt7Cj4gKwlzdHJ1Y3QgdHJ1bHlf bnQzNTU5NyAqY3R4ID0gcGFuZWxfdG9fY3R4KHBhbmVsKTsKPiArCWludCByZXQ7Cj4gKwlpbnQg aTsKPiArCXN0cnVjdCBjbWRfc2V0ICpwYW5lbF9vbl9jbWRzOwo+ICsJY29uc3Qgc3RydWN0IG50 MzU1OTdfY29uZmlnICpjb25maWc7Cj4gKwl1MzIgbnVtX2NtZHM7Cj4gKwo+ICsJaWYgKGN0eC0+ cHJlcGFyZWQpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJcmV0ID0gdHJ1bHlfMzU1OTdfcG93ZXJf b24oY3R4KTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJY3R4LT5k c2lbMF0tPm1vZGVfZmxhZ3MgfD0gTUlQSV9EU0lfTU9ERV9MUE07Cj4gKwljdHgtPmRzaVsxXS0+ bW9kZV9mbGFncyB8PSBNSVBJX0RTSV9NT0RFX0xQTTsKPiArCj4gKwljb25maWcgPSBjdHgtPmNv bmZpZzsKPiArCXBhbmVsX29uX2NtZHMgPSAoc3RydWN0IGNtZF9zZXQgKiljb25maWctPnBhbmVs X29uX2NtZHM7Cj4gKwludW1fY21kcyA9IGNvbmZpZy0+bnVtX29uX2NtZHM7Cj4gKwo+ICsJZm9y IChpID0gMDsgaSA8IG51bV9jbWRzOyBpKyspIHsKPiArCQlyZXQgPSB0cnVseV9kY3Nfd3JpdGVf YnVmKHBhbmVsLAo+ICsJCQkJcGFuZWxfb25fY21kc1tpXS5zaXplLAo+ICsJCQkJCXBhbmVsX29u X2NtZHNbaV0uY29tbWFuZHMpOwo+ICsJCWlmIChyZXQgPCAwKSB7Cj4gKwkJCURSTV9ERVZfRVJS T1IoY3R4LT5kZXYsCj4gKwkJCQkiY21kIHNldCB0eCBmYWlsZWQgaSA9ICVkIHJldCA9ICVkXG4i LAo+ICsJCQkJCWksIHJldCk7Cj4gKwkJCWdvdG8gcG93ZXJfb2ZmOwo+ICsJCX0KPiArCX0KPiAr Cj4gKwkvKiBBcyBwZXIgRFNJIHNwZWMgbmVlZCB0byB3YWl0IGZvciAxMjBtcwo+ICsJICogYWZ0 ZXIgc2VuZGluZyB0aGUgZXhpdCBzbGVlcCBEQ1MgY29tbWFuZAo+ICsJICovCgpUaGlzIGNvbW1l bnQgc2VlbXMgbGlrZSBpdCdzIGluIHRoZSB3cm9uZyBwbGFjZS4gQWxzbywgbXVsdGktbGluZSBj b21tZW50cyBhcmUKZm9ybWF0dGVkIGFzIGZvbGxvd3M6CgovKgogKiBtdWx0aS1saW5lCiAqIGNv bW1lbnQKICovCgpJZiB5b3UgbGlrZSB0byBzYXZlIHNwYWNlLCBsaWtlIG1lLCB5b3UgY291bGQg cHJvYmFibHkgZml0IHRoaXMgb24gMSBsaW5lIGxpa2U6CgogICAgICAgIC8qIFBlciBEU0kgc3Bl Yywgd2FpdCAxMjBtcyBhZnRlciBzZW5kaW5nIHRoZSBleGl0IHNsZWVwIERDUyBjb21tYW5kICov Cgo+ICsKPiArCXJldCA9IHRydWx5X2Rjc193cml0ZShwYW5lbCwgTUlQSV9EQ1NfRVhJVF9TTEVF UF9NT0RFKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihjdHgtPmRldiwK PiArCQkJImV4aXRfc2xlZXBfbW9kZSBjbWQgZmFpbGVkIHJldCA9ICVkXG4iLAo+ICsJCQlyZXQp Owo+ICsJCWdvdG8gcG93ZXJfb2ZmOwo+ICsJfQo+ICsKPiArCW1zbGVlcCgxMjApOwo+ICsKPiAr CXJldCA9IHRydWx5X2Rjc193cml0ZShwYW5lbCwgTUlQSV9EQ1NfU0VUX0RJU1BMQVlfT04pOwo+ ICsJaWYgKHJldCA8IDApIHsKPiArCQlEUk1fREVWX0VSUk9SKGN0eC0+ZGV2LAo+ICsJCQkic2V0 X2Rpc3BsYXlfb24gY21kIGZhaWxlZCByZXQgPSAlZFxuIiwKPiArCQkJcmV0KTsKPiArCQlnb3Rv IHBvd2VyX29mZjsKPiArCX0KPiArCj4gKwkvKiBBZGRpbmcgMTIwbXMgZGVsYXkgYmVmb3JlIHRo ZSBzdGFydCBvZgo+ICsJICogcGl4ZWwgc3RyZWFtIHRvIHRoZSBwYW5lbCBhZnRlciBzZW5kaW5n Cj4gKwkgKiB0aGUgc2V0X2Rpc3BsYXlfb24gRENTIGNvbW1hbmQKPiArCSAqLwo+ICsKPiArCW1z bGVlcCgxMjApOwo+ICsKPiArCWN0eC0+cHJlcGFyZWQgPSB0cnVlOwo+ICsKPiArCXJldHVybiAw Owo+ICsKPiArcG93ZXJfb2ZmOgo+ICsJZ3Bpb2Rfc2V0X3ZhbHVlKGN0eC0+cmVzZXRfZ3Bpbywg MSk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3R4LT5zdXBwbGllcyk7IGkr KykKPiArCQlyZWd1bGF0b3Jfc2V0X2xvYWQoY3R4LT5zdXBwbGllc1tpXS5jb25zdW1lciwKPiAr CQkJcmVndWxhdG9yX2Rpc2FibGVfbG9hZHNbaV0pOwo+ICsKPiArCXJldCA9IHJlZ3VsYXRvcl9i dWxrX2Rpc2FibGUoQVJSQVlfU0laRShjdHgtPnN1cHBsaWVzKSwKPiArCQkJY3R4LT5zdXBwbGll cyk7CgpUaGlzIHNlZW1zIGxpa2UgYSBzdHJhaWdodCBjb3B5IG9mIHRydWx5X250MzU1OTdfcG93 ZXJfb2ZmKCksIGp1c3QgY2FsbCB0aGF0CmZ1bmN0aW9uLgoKPiArCURSTV9ERVZfRVJST1IoY3R4 LT5kZXYsCj4gKwkJInJlZ3VsYXRvciBkaXNhYmxlIGZhaWxlZCwgJWRcbiIsIHJldCk7CgpUaGlz IGZpdHMgb24gb25lIGxpbmUuCgo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgdHJ1bHlfbnQzNTU5N19lbmFibGUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCj4gK3sK PiArCXN0cnVjdCB0cnVseV9udDM1NTk3ICpjdHggPSBwYW5lbF90b19jdHgocGFuZWwpOwo+ICsJ aW50IHJldDsKPiArCj4gKwlpZiAoY3R4LT5lbmFibGVkKQo+ICsJCXJldHVybiAwOwo+ICsKPiAr CWlmIChjdHgtPmJhY2tsaWdodCkgewo+ICsJCXJldCA9IGJhY2tsaWdodF9lbmFibGUoY3R4LT5i YWNrbGlnaHQpOwo+ICsJCWlmIChyZXQgPCAwKQo+ICsJCQlEUk1fREVWX0VSUk9SKGN0eC0+ZGV2 LCAiYmFja2xpZ2h0IGVuYWJsZSBmYWlsZWQgJWRcbiIsCj4gKwkJCQkJCSAgcmV0KTsKPiArCX0K PiArCj4gKwljdHgtPmVuYWJsZWQgPSB0cnVlOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IHRydWx5X250MzU1OTdfZ2V0X21vZGVzKHN0cnVjdCBkcm1fcGFuZWwgKnBh bmVsKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gcGFuZWwtPmNv bm5lY3RvcjsKPiArCXN0cnVjdCB0cnVseV9udDM1NTk3ICpjdHggPSBwYW5lbF90b19jdHgocGFu ZWwpOwo+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7Cj4gKwljb25zdCBzdHJ1Y3Qg bnQzNTU5N19jb25maWcgKmNvbmZpZzsKPiArCj4gKwljb25maWcgPSBjdHgtPmNvbmZpZzsKPiAr CW1vZGUgPSBkcm1fbW9kZV9jcmVhdGUoY29ubmVjdG9yLT5kZXYpOwo+ICsJaWYgKCFtb2RlKSB7 Cj4gKwkJRFJNX0RFVl9FUlJPUihjdHgtPmRldiwKPiArCQkJImZhaWxlZCB0byBjcmVhdGUgYSBu ZXcgZGlzcGxheSBtb2RlXG4iKTsKPiArCQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwljb25uZWN0 b3ItPmRpc3BsYXlfaW5mby53aWR0aF9tbSA9IGNvbmZpZy0+d2lkdGhfbW07Cj4gKwljb25uZWN0 b3ItPmRpc3BsYXlfaW5mby5oZWlnaHRfbW0gPSBjb25maWctPmhlaWdodF9tbTsKPiArCWRybV9t b2RlX2NvcHkobW9kZSwgY29uZmlnLT5kbSk7Cj4gKwltb2RlLT50eXBlID0gRFJNX01PREVfVFlQ RV9EUklWRVIgfCBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRDsKPiArCWRybV9tb2RlX3Byb2JlZF9h ZGQoY29ubmVjdG9yLCBtb2RlKTsKPiArCj4gKwlyZXR1cm4gMTsKPiArfQo+ICsKPiArc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fcGFuZWxfZnVuY3MgdHJ1bHlfbnQzNTU5N19kcm1fZnVuY3MgPSB7 Cj4gKwkuZGlzYWJsZSA9IHRydWx5X250MzU1OTdfZGlzYWJsZSwKPiArCS51bnByZXBhcmUgPSB0 cnVseV9udDM1NTk3X3VucHJlcGFyZSwKPiArCS5wcmVwYXJlID0gdHJ1bHlfbnQzNTU5N19wcmVw YXJlLAo+ICsJLmVuYWJsZSA9IHRydWx5X250MzU1OTdfZW5hYmxlLAo+ICsJLmdldF9tb2RlcyA9 IHRydWx5X250MzU1OTdfZ2V0X21vZGVzLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCB0cnVseV9u dDM1NTk3X3BhbmVsX2FkZChzdHJ1Y3QgdHJ1bHlfbnQzNTU5NyAqY3R4KQo+ICt7Cj4gKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSBjdHgtPmRldjsKPiArCWludCByZXQsIGk7Cj4gKwljb25zdCBzdHJ1 Y3QgbnQzNTU5N19jb25maWcgKmNvbmZpZzsKPiArCj4gKwljb25maWcgPSBjdHgtPmNvbmZpZzsK PiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMpOyBpKyspCj4gKwkJ Y3R4LT5zdXBwbGllc1tpXS5zdXBwbHkgPSByZWd1bGF0b3JfbmFtZXNbaV07Cj4gKwo+ICsJcmV0 ID0gZGV2bV9yZWd1bGF0b3JfYnVsa19nZXQoZGV2LCBBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMp LAo+ICsJCQkJICAgICAgY3R4LT5zdXBwbGllcyk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1 cm4gcmV0Owo+ICsKPiArCWN0eC0+cmVzZXRfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0KGRldiwgInJl c2V0IiwgR1BJT0RfT1VUX0xPVyk7Cj4gKwlpZiAoSVNfRVJSKGN0eC0+cmVzZXRfZ3BpbykpIHsK PiArCQlEUk1fREVWX0VSUk9SKGRldiwgImNhbm5vdCBnZXQgcmVzZXQgZ3BpbyAlbGRcbiIsCj4g KwkJCVBUUl9FUlIoY3R4LT5yZXNldF9ncGlvKSk7Cj4gKwkJcmV0dXJuIFBUUl9FUlIoY3R4LT5y ZXNldF9ncGlvKTsKPiArCX0KPiArCj4gKwljdHgtPm1vZGVfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0 KGRldiwgIm1vZGUiLCBHUElPRF9PVVRfTE9XKTsKPiArCWlmIChJU19FUlIoY3R4LT5tb2RlX2dw aW8pKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJjYW5ub3QgZ2V0IG1vZGUgZ3BpbyAlbGRc biIsCj4gKwkJCVBUUl9FUlIoY3R4LT5tb2RlX2dwaW8pKTsKPiArCQlyZXR1cm4gUFRSX0VSUihj dHgtPm1vZGVfZ3Bpbyk7Cj4gKwl9Cj4gKwo+ICsJLyogZHVhbCBwb3J0ICovCj4gKwlncGlvZF9z ZXRfdmFsdWUoY3R4LT5tb2RlX2dwaW8sIDApOwo+ICsKPiArCWRybV9wYW5lbF9pbml0KCZjdHgt PnBhbmVsKTsKPiArCWN0eC0+cGFuZWwuZGV2ID0gZGV2Owo+ICsJY3R4LT5wYW5lbC5mdW5jcyA9 ICZ0cnVseV9udDM1NTk3X2RybV9mdW5jczsKPiArCWRybV9wYW5lbF9hZGQoJmN0eC0+cGFuZWwp Owo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9k aXNwbGF5X21vZGUgcWNvbV9zZG04NDVfbXRwXzJrX21vZGUgPSB7Cj4gKwkubmFtZSA9ICIxNDQw eDI1NjAiLAo+ICsJLmNsb2NrID0gMjY4MzE2LAo+ICsJLmhkaXNwbGF5ID0gMTQ0MCwKPiArCS5o c3luY19zdGFydCA9IDE0NDAgKyAyMDAsCj4gKwkuaHN5bmNfZW5kID0gMTQ0MCArIDIwMCArIDMy LAo+ICsJLmh0b3RhbCA9IDE0NDAgKyAyMDAgKyAzMiArIDY0LAo+ICsJLnZkaXNwbGF5ID0gMjU2 MCwKPiArCS52c3luY19zdGFydCA9IDI1NjAgKyA4LAo+ICsJLnZzeW5jX2VuZCA9IDI1NjAgKyA4 ICsgMSwKPiArCS52dG90YWwgPSAyNTYwICsgOCArIDEgKyA3LAo+ICsJLnZyZWZyZXNoID0gNjAs Cj4gKwkuZmxhZ3MgPSAwLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBudDM1NTk3 X2NvbmZpZyBudDM1NTk3X2RpciA9IHsKPiArCS53aWR0aF9tbSA9IDc0LAo+ICsJLmhlaWdodF9t bSA9IDEzMSwKPiArCS5wYW5lbF9uYW1lID0gInFjb21fc2RtODQ1X210cF8ya19wYW5lbCIsCj4g KwkuZG0gPSAmcWNvbV9zZG04NDVfbXRwXzJrX21vZGUsCj4gKwkucGFuZWxfb25fY21kcyA9IHFj b21fMmtfcGFuZWxfbWFnaWNfY21kcywKPiArCS5udW1fb25fY21kcyA9IEFSUkFZX1NJWkUocWNv bV8ya19wYW5lbF9tYWdpY19jbWRzKSwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgdHJ1bHlfbnQz NTU5N19wcm9iZShzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kpCj4gK3sKPiArCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZkc2ktPmRldjsKPiArCXN0cnVjdCB0cnVseV9udDM1NTk3ICpjdHg7Cj4g KwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kxX2RldmljZTsKPiArCXN0cnVjdCBkZXZpY2Vf bm9kZSAqZHNpMTsKPiArCXN0cnVjdCBtaXBpX2RzaV9ob3N0ICpkc2kxX2hvc3Q7Cj4gKwlzdHJ1 Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2lfZGV2Owo+ICsJaW50IHJldCA9IDA7Cj4gKwlpbnQgaTsK PiArCj4gKwljb25zdCBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlX2luZm8gaW5mbyA9IHsKPiArCQku dHlwZSA9ICJ0cnVseW50MzU1OTciLAo+ICsJCS5jaGFubmVsID0gMCwKPiArCQkubm9kZSA9IE5V TEwsCj4gKwl9Owo+ICsKPiArCWN0eCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY3R4KSwg R0ZQX0tFUk5FTCk7Cj4gKwo+ICsJaWYgKCFjdHgpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ ICsJLyogVGhpcyBkZXZpY2UgcmVwcmVzZW50cyBpdHNlbGYgYXMgb25lIHdpdGgKPiArCSAqIHR3 byBpbnB1dCBwb3J0cyB3aGljaCBhcmUgZmVkIGJ5IHRoZSBvdXRwdXQKPiArCSAqIHBvcnRzIG9m IHRoZSB0d28gRFNJIGNvbnRyb2xsZXJzIC4gVGhlIERTSTAKPiArCSAqIGlzIHRoZSBtYXN0ZXIg Y29udHJvbGxlciBhbmQgaGFzIG1vc3Qgb2YgdGhlCj4gKwkgKiBwYW5lbCByZWxhdGVkIGluZm8g aW4gaXRzIGNoaWxkIG5vZGUuCj4gKwkgKi8KPiArCj4gKwljdHgtPmNvbmZpZyA9IG9mX2Rldmlj ZV9nZXRfbWF0Y2hfZGF0YShkZXYpOwo+ICsKPiArCWlmICghY3R4LT5jb25maWcpIHsKPiArCQlk ZXZfZXJyKGRldiwgIm1pc3NpbmcgZGV2aWNlIGNvbmZpZ3VyYXRpb25cbiIpOwo+ICsJCXJldHVy biAtRU5PREVWOwo+ICsJfQo+ICsKPiArCWRzaTEgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX25vZGUo ZHNpLT5kZXYub2Zfbm9kZSwgMSwgLTEpOwo+ICsJaWYgKCFkc2kxKSB7Cj4gKwkJRFJNX0RFVl9F UlJPUihkZXYsCj4gKwkJCSJmYWlsZWQgdG8gZ2V0IHJlbW90ZSBub2RlIGZvciBkc2kxX2Rldmlj ZVxuIik7Cj4gKwkJcmV0ID0gLUVOT0RFVjsKPiArCQlnb3RvIGVycl9nZXRfcmVtb3RlOwoKSnVz dCByZXR1cm4gZGlyZWN0bHkuCgo+ICsJfQo+ICsKPiArCWRzaTFfaG9zdCA9IG9mX2ZpbmRfbWlw aV9kc2lfaG9zdF9ieV9ub2RlKGRzaTEpOwoKTW92ZSB0aGF0IG9mX25vZGVfcHV0KGRzaTEpIGhl cmUuCgo+ICsJaWYgKCFkc2kxX2hvc3QpIHsKPiArCQlEUk1fREVWX0VSUk9SKGRldiwgImZhaWxl ZCB0byBmaW5kIGRzaSBob3N0XG4iKTsKPiArCQlyZXQgPSAtRVBST0JFX0RFRkVSOwo+ICsJCWdv dG8gZXJyX2hvc3Q7CgpOb3cgeW91IGNhbiByZXR1cm4gZGlyZWN0bHkgZnJvbSBoZXJlCgo+ICsJ fQo+ICsKPiArCW9mX25vZGVfcHV0KGRzaTEpOwo+ICsKPiArCS8qIHJlZ2lzdGVyIHRoZSBzZWNv bmQgRFNJIGRldmljZSAqLwo+ICsJZHNpMV9kZXZpY2UgPSBtaXBpX2RzaV9kZXZpY2VfcmVnaXN0 ZXJfZnVsbChkc2kxX2hvc3QsICZpbmZvKTsKPiArCWlmIChJU19FUlIoZHNpMV9kZXZpY2UpKSB7 Cj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJmYWlsZWQgdG8gY3JlYXRlIGRzaSBkZXZpY2VcbiIp Owo+ICsJCXJldCA9IFBUUl9FUlIoZHNpKTsKPiArCQlnb3RvIGVycl9kc2lfZGV2aWNlOwoKQW5k IGhlcmUKCj4gKwl9Cj4gKwo+ICsJbWlwaV9kc2lfc2V0X2RydmRhdGEoZHNpLCBjdHgpOwo+ICsK PiArCWN0eC0+ZGV2ID0gZGV2Owo+ICsJY3R4LT5kc2lbMF0gPSBkc2k7Cj4gKwljdHgtPmRzaVsx XSA9IGRzaTFfZGV2aWNlOwo+ICsKPiArCXJldCA9IHRydWx5X250MzU1OTdfcGFuZWxfYWRkKGN0 eCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJmYWlsZWQgdG8gYWRk IHBhbmVsXG4iKTsKPiArCQlnb3RvIGVycl9wYW5lbF9hZGQ7Cj4gKwl9Cj4gKwo+ICsJZm9yIChp ID0gMDsgaSA8IEFSUkFZX1NJWkUoY3R4LT5kc2kpOyBpKyspIHsKPiArCQlkc2lfZGV2ID0gY3R4 LT5kc2lbaV07Cj4gKwkJZHNpX2Rldi0+bGFuZXMgPSA0Owo+ICsJCWRzaV9kZXYtPmZvcm1hdCA9 IE1JUElfRFNJX0ZNVF9SR0I4ODg7Cj4gKwkJZHNpX2Rldi0+bW9kZV9mbGFncyA9IE1JUElfRFNJ X01PREVfVklERU8gfCBNSVBJX0RTSV9NT0RFX0xQTSB8Cj4gKwkJCU1JUElfRFNJX0NMT0NLX05P Tl9DT05USU5VT1VTOwo+ICsJCXJldCA9IG1pcGlfZHNpX2F0dGFjaChkc2lfZGV2KTsKPiArCQlp ZiAocmV0IDwgMCkgewo+ICsJCQlEUk1fREVWX0VSUk9SKGRldiwKPiArCQkJCSJkc2kgYXR0YWNo IGZhaWxlZCBpID0gJWRcbiIsIGkpOwo+ICsJCQkJZ290byBlcnJfZHNpX2F0dGFjaDsKPiArCQl9 Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnJfZHNpX2F0dGFjaDoKPiArCWRybV9w YW5lbF9yZW1vdmUoJmN0eC0+cGFuZWwpOwo+ICtlcnJfcGFuZWxfYWRkOgo+ICsJbWlwaV9kc2lf ZGV2aWNlX3VucmVnaXN0ZXIoZHNpMV9kZXZpY2UpOwo+ICtlcnJfZHNpX2RldmljZToKPiArZXJy X2hvc3Q6Cj4gKwlvZl9ub2RlX3B1dChkc2kxKTsKPiArZXJyX2dldF9yZW1vdGU6Cj4gKwlyZXR1 cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRydWx5X250MzU1OTdfcmVtb3ZlKHN0cnVj dCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkKPiArewo+ICsJc3RydWN0IHRydWx5X250MzU1OTcgKmN0 eCA9IG1pcGlfZHNpX2dldF9kcnZkYXRhKGRzaSk7Cj4gKwo+ICsJaWYgKGN0eC0+ZHNpWzBdKQo+ ICsJCW1pcGlfZHNpX2RldGFjaChjdHgtPmRzaVswXSk7Cj4gKwlpZiAoY3R4LT5kc2lbMV0pIHsK PiArCQltaXBpX2RzaV9kZXRhY2goY3R4LT5kc2lbMV0pOwo+ICsJCW1pcGlfZHNpX2RldmljZV91 bnJlZ2lzdGVyKGN0eC0+ZHNpWzFdKTsKPiArCX0KPiArCj4gKwlkcm1fcGFuZWxfcmVtb3ZlKCZj dHgtPnBhbmVsKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IG9mX2RldmljZV9pZCB0cnVseV9udDM1NTk3X29mX21hdGNoW10gPSB7Cj4gKwl7CS5jb21wYXRp YmxlID0gInRydWx5LG50MzU1OTctMkstZGlzcGxheSIsCj4gKwkJLmRhdGEgPSAmbnQzNTU5N19k aXIsCj4gKwl9LAo+ICsKPiArCXsgfQo+ICt9Owo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB0 cnVseV9udDM1NTk3X29mX21hdGNoKTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgbWlwaV9kc2lfZHJp dmVyIHRydWx5X250MzU1OTdfZHJpdmVyID0gewo+ICsJLmRyaXZlciA9IHsKPiArCQkubmFtZSA9 ICJwYW5lbF90cnVseV9udDM1NTk3IiwKPiArCQkub2ZfbWF0Y2hfdGFibGUgPSB0cnVseV9udDM1 NTk3X29mX21hdGNoLAo+ICsJfSwKPiArCS5wcm9iZSA9IHRydWx5X250MzU1OTdfcHJvYmUsCj4g KwkucmVtb3ZlID0gdHJ1bHlfbnQzNTU5N19yZW1vdmUsCj4gK307Cj4gK21vZHVsZV9taXBpX2Rz aV9kcml2ZXIodHJ1bHlfbnQzNTU5N19kcml2ZXIpOwo+ICsKPiArTU9EVUxFX0RFU0NSSVBUSU9O KCJUcnVseSBOVDM1NTk3IERTSSBQYW5lbCBEcml2ZXIiKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQ TCB2MiIpOwo+IC0tIAo+IFRoZSBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBpcyBh IG1lbWJlciBvZiB0aGUgQ29kZSBBdXJvcmEgRm9ydW0sCj4gYSBMaW51eCBGb3VuZGF0aW9uIENv bGxhYm9yYXRpdmUgUHJvamVjdAo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCj4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+IGRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2RyaS1kZXZlbAoKLS0gClNlYW4gUGF1bCwgU29mdHdhcmUgRW5naW5lZXIsIEdv b2dsZSAvIENocm9taXVtIE9TCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Ry aS1kZXZlbAo=