From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philippe CORNU Subject: Re: [PATCH v2 3/3] drm/panel: Add support for otm8009a panel driver Date: Mon, 17 Jul 2017 13:28:40 +0000 Message-ID: <65bff918-4511-7008-09e3-9010f283247e@st.com> References: <1499677333-10571-1-git-send-email-philippe.cornu@st.com> <1499677333-10571-4-git-send-email-philippe.cornu@st.com> <831126ea-c1a2-8fc5-7e31-47ddd4740f8c@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx07-00178001.pphosted.com (mx07-00178001.pphosted.com [62.209.51.94]) by gabe.freedesktop.org (Postfix) with ESMTPS id 690F1898A7 for ; Mon, 17 Jul 2017 13:28:57 +0000 (UTC) In-Reply-To: <831126ea-c1a2-8fc5-7e31-47ddd4740f8c@samsung.com> Content-Language: en-US Content-ID: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Andrzej Hajda , Alexandre TORGUE , Thierry Reding , David Airlie , Maxime Coquelin , Russell King , Mark Rutland , Rob Herring , Arnd Bergmann , Benjamin Gaignard , Yannick FERTRE , Archit Taneja Cc: "linux-arm-kernel@lists.infradead.org" , "devicetree@vger.kernel.org" , "dri-devel@lists.freedesktop.org" , Fabien DESSENNE , Mickael REULIER , Vincent ABRIOU , Gabriel FERNANDEZ , Ludovic BARRE List-Id: dri-devel@lists.freedesktop.org DQoNCk9uIDA3LzEyLzIwMTcgMDQ6MTIgUE0sIEFuZHJ6ZWogSGFqZGEgd3JvdGU6DQo+IE9uIDEw LjA3LjIwMTcgMTE6MDIsIFBoaWxpcHBlIENPUk5VIHdyb3RlOg0KPj4gVGhpcyBwYXRjaCBhZGRz IE9yaXNlIFRlY2ggb3RtODAwOWEgMy45NyIgNDgweDgwMCBURlQgTENEDQo+PiBwYW5lbCBkcml2 ZXIgKE1JUEktRFNJIHZpZGVvIG1vZGUpLiBUaGUgcGFuZWwgYmFja2xpZ2h0IGlzDQo+PiBtYW5h Z2VkIHRocm91Z2ggdGhlIERTSSBsaW5rLiBUaGlzIHBhbmVsIGRyaXZlciBpcyB1c2VkIGluDQo+ PiBzZXZlcmFsIFNUTTMyIGJvYXJkcy4NCj4+DQo+PiBTaWduZWQtb2ZmLWJ5OiBQaGlsaXBwZSBD T1JOVSA8cGhpbGlwcGUuY29ybnVAc3QuY29tPg0KPj4gLS0tDQo+PiAgIGRyaXZlcnMvZ3B1L2Ry bS9wYW5lbC9LY29uZmlnICAgICAgICAgICAgICAgICAgICB8ICAgOSArDQo+PiAgIGRyaXZlcnMv Z3B1L2RybS9wYW5lbC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICB8ICAgMSArDQo+PiAgIGRy aXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1vcmlzZXRlY2gtb3RtODAwOWEuYyB8IDQ4OSArKysr KysrKysrKysrKysrKysrKysrKw0KPj4gICAzIGZpbGVzIGNoYW5nZWQsIDQ5OSBpbnNlcnRpb25z KCspDQo+PiAgIGNyZWF0ZSBtb2RlIDEwMDc1NSBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwt b3Jpc2V0ZWNoLW90bTgwMDlhLmMNCj4+DQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3BhbmVsL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZw0KPj4gaW5kZXgg ZDg0YTAzMS4uYzFjOTI5MSAxMDA2NDQNCj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9L Y29uZmlnDQo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZw0KPj4gQEAgLTEx Nyw0ICsxMTcsMTMgQEAgY29uZmlnIERSTV9QQU5FTF9TSVRST05JWF9TVDc3ODlWDQo+PiAgIAkg IFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBTaXRyb25p eA0KPj4gICAJICBTVDc3ODlWIGNvbnRyb2xsZXIgZm9yIDI0MHgzMjAgTENEIHBhbmVscw0KPj4g ICANCj4+ICtjb25maWcgRFJNX1BBTkVMX09SSVNFVEVDSF9PVE04MDA5QQ0KPj4gKwl0cmlzdGF0 ZSAiT3Jpc2UgVGVjaCBvdG04MDA5YSA0ODBwIGRzaSAyZGwgdmlkZW8gbW9kZSBwYW5lbCINCj4+ ICsJZGVwZW5kcyBvbiBPRg0KPj4gKwlkZXBlbmRzIG9uIERSTV9NSVBJX0RTSQ0KPj4gKwlkZXBl bmRzIG9uIEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UNCj4+ICsJaGVscA0KPj4gKwkgIFNheSBZIGhl cmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIE9yaXNlIFRlY2ggT1RNODAwOUEN Cj4+ICsJICA0ODB4ODAwIERTSSBwYW5lbA0KPj4gKw0KPj4gICBlbmRtZW51DQo+PiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3Bh bmVsL01ha2VmaWxlDQo+PiBpbmRleCA5ZjY2MTBkLi5hYzc5OGYzIDEwMDY0NA0KPj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlDQo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0v cGFuZWwvTWFrZWZpbGUNCj4+IEBAIC0xMCwzICsxMCw0IEBAIG9iai0kKENPTkZJR19EUk1fUEFO RUxfU0FNU1VOR19TNkU4QUEwKSArPSBwYW5lbC1zYW1zdW5nLXM2ZThhYTAubw0KPj4gICBvYmot JChDT05GSUdfRFJNX1BBTkVMX1NIQVJQX0xRMTAxUjFTWDAxKSArPSBwYW5lbC1zaGFycC1scTEw MXIxc3gwMS5vDQo+PiAgIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0hBUlBfTFMwNDNUMUxFMDEp ICs9IHBhbmVsLXNoYXJwLWxzMDQzdDFsZTAxLm8NCj4+ICAgb2JqLSQoQ09ORklHX0RSTV9QQU5F TF9TSVRST05JWF9TVDc3ODlWKSArPSBwYW5lbC1zaXRyb25peC1zdDc3ODl2Lm8NCj4+ICtvYmot JChDT05GSUdfRFJNX1BBTkVMX09SSVNFVEVDSF9PVE04MDA5QSkgKz0gcGFuZWwtb3Jpc2V0ZWNo LW90bTgwMDlhLm8NCj4+IFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQ0KPiANCj4gQWxwaGFi ZXRpY2FsIG9yZGVyIGFuZCBuZXcgbGluZSBhdCBFT0YuDQo+IA0KDQpEZWFyIEFuZHJ6ZWosDQpN YW55IHRoYW5rcyBmb3IgeW91ciBjb2RlIHJldmlldy4NCk1ha2VmaWxlICYgS2NvbmZpZyBhcmUg bm93IGZpeGVkIGluIHYzIGZvbGxvd2luZyB5b3VyIGNvbW1lbnRzLg0KDQo+PiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLW9yaXNldGVjaC1vdG04MDA5YS5jIGIvZHJp dmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLW9yaXNldGVjaC1vdG04MDA5YS5jDQo+PiBuZXcgZmls ZSBtb2RlIDEwMDc1NQ0KPj4gaW5kZXggMDAwMDAwMC4uMmEzY2U0Nw0KPj4gLS0tIC9kZXYvbnVs bA0KPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLW9yaXNldGVjaC1vdG04MDA5 YS5jDQo+PiBAQCAtMCwwICsxLDQ4OSBAQA0KPj4gKy8qDQo+PiArICogQ29weXJpZ2h0IChDKSBT VE1pY3JvZWxlY3Ryb25pY3MgU0EgMjAxNw0KPj4gKyAqDQo+PiArICogQXV0aG9yczogUGhpbGlw cGUgQ29ybnUgPHBoaWxpcHBlLmNvcm51QHN0LmNvbT4NCj4+ICsgKiAgICAgICAgICBZYW5uaWNr IEZlcnRyZSA8eWFubmljay5mZXJ0cmVAc3QuY29tPg0KPj4gKyAqDQo+PiArICogTGljZW5zZSB0 ZXJtczogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLCB2ZXJzaW9uIDINCj4+ICsg Ki8NCj4+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4NCj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9taXBp X2RzaS5oPg0KPj4gKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+DQo+PiArI2luY2x1ZGUgPGxp bnV4L2JhY2tsaWdodC5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+DQo+ PiArI2luY2x1ZGUgPHZpZGVvL21pcGlfZGlzcGxheS5oPg0KPj4gKw0KPj4gKyNkZWZpbmUgRFJW X05BTUUgIm9yaXNldGVjaF9vdG04MDA5YSINCj4+ICsNCj4+ICsjZGVmaW5lIE9UTTgwMDlBX0JB Q0tMSUdIVF9ERUZBVUxUCTI0MA0KPj4gKyNkZWZpbmUgT1RNODAwOUFfQkFDS0xJR0hUX01BWAkJ MjU1DQo+PiArDQo+PiArLyogTWFudWZhY3R1cmVyIENvbW1hbmQgU2V0ICovDQo+PiArI2RlZmlu ZSBNQ1NfQURSU0ZUCTB4MDAwMAkvKiBBZGRyZXNzIFNoaWZ0IEZ1bmN0aW9uICovDQo+PiArI2Rl ZmluZSBNQ1NfUEFOU0VUCTB4QjNBNgkvKiBQYW5lbCBUeXBlIFNldHRpbmcgKi8NCj4+ICsjZGVm aW5lIE1DU19TRF9DVFJMCTB4QzBBMgkvKiBTb3VyY2UgRHJpdmVyIFRpbWluZyBTZXR0aW5nICov DQo+PiArI2RlZmluZSBNQ1NfUF9EUlZfTQkweEMwQjQJLyogUGFuZWwgRHJpdmluZyBNb2RlICov DQo+PiArI2RlZmluZSBNQ1NfT1NDX0FESgkweEMxODEJLyogT3NjaWxsYXRvciBBZGp1c3RtZW50 IGZvciBJZGxlL05vcm1hbCBtb2RlICovDQo+PiArI2RlZmluZSBNQ1NfUkdCX1ZJRF9TRVQJMHhD MUExCS8qIFJHQiBWaWRlbyBNb2RlIFNldHRpbmcgKi8NCj4+ICsjZGVmaW5lIE1DU19TRF9QQ0hf Q1RSTAkweEM0ODAJLyogU291cmNlIERyaXZlciBQcmVjaGFyZ2UgQ29udHJvbCAqLw0KPj4gKyNk ZWZpbmUgTUNTX05PX0RPQzEJMHhDNDhBCS8qIENvbW1hbmQgbm90IGRvY3VtZW50ZWQgKi8NCj4+ ICsjZGVmaW5lIE1DU19QV1JfQ1RSTDEJMHhDNTgwCS8qIFBvd2VyIENvbnRyb2wgU2V0dGluZyAx ICovDQo+PiArI2RlZmluZSBNQ1NfUFdSX0NUUkwyCTB4QzU5MAkvKiBQb3dlciBDb250cm9sIFNl dHRpbmcgMiBmb3IgTm9ybWFsIE1vZGUgKi8NCj4+ICsjZGVmaW5lIE1DU19QV1JfQ1RSTDQJMHhD NUIwCS8qIFBvd2VyIENvbnRyb2wgU2V0dGluZyA0IGZvciBEQyBWb2x0YWdlICovDQo+PiArI2Rl ZmluZSBNQ1NfUEFOQ1RSTFNFVDEJMHhDQjgwCS8qIFBhbmVsIENvbnRyb2wgU2V0dGluZyAxICov DQo+PiArI2RlZmluZSBNQ1NfUEFOQ1RSTFNFVDIJMHhDQjkwCS8qIFBhbmVsIENvbnRyb2wgU2V0 dGluZyAyICovDQo+PiArI2RlZmluZSBNQ1NfUEFOQ1RSTFNFVDMJMHhDQkEwCS8qIFBhbmVsIENv bnRyb2wgU2V0dGluZyAzICovDQo+PiArI2RlZmluZSBNQ1NfUEFOQ1RSTFNFVDQJMHhDQkIwCS8q IFBhbmVsIENvbnRyb2wgU2V0dGluZyA0ICovDQo+PiArI2RlZmluZSBNQ1NfUEFOQ1RSTFNFVDUJ MHhDQkMwCS8qIFBhbmVsIENvbnRyb2wgU2V0dGluZyA1ICovDQo+PiArI2RlZmluZSBNQ1NfUEFO Q1RSTFNFVDYJMHhDQkQwCS8qIFBhbmVsIENvbnRyb2wgU2V0dGluZyA2ICovDQo+PiArI2RlZmlu ZSBNQ1NfUEFOQ1RSTFNFVDcJMHhDQkUwCS8qIFBhbmVsIENvbnRyb2wgU2V0dGluZyA3ICovDQo+ PiArI2RlZmluZSBNQ1NfUEFOQ1RSTFNFVDgJMHhDQkYwCS8qIFBhbmVsIENvbnRyb2wgU2V0dGlu ZyA4ICovDQo+PiArI2RlZmluZSBNQ1NfUEFOVTJEMQkweENDODAJLyogUGFuZWwgVTJEIFNldHRp bmcgMSAqLw0KPj4gKyNkZWZpbmUgTUNTX1BBTlUyRDIJMHhDQzkwCS8qIFBhbmVsIFUyRCBTZXR0 aW5nIDIgKi8NCj4+ICsjZGVmaW5lIE1DU19QQU5VMkQzCTB4Q0NBMAkvKiBQYW5lbCBVMkQgU2V0 dGluZyAzICovDQo+PiArI2RlZmluZSBNQ1NfUEFORDJVMQkweENDQjAJLyogUGFuZWwgRDJVIFNl dHRpbmcgMSAqLw0KPj4gKyNkZWZpbmUgTUNTX1BBTkQyVTIJMHhDQ0MwCS8qIFBhbmVsIEQyVSBT ZXR0aW5nIDIgKi8NCj4+ICsjZGVmaW5lIE1DU19QQU5EMlUzCTB4Q0NEMAkvKiBQYW5lbCBEMlUg U2V0dGluZyAzICovDQo+PiArI2RlZmluZSBNQ1NfR09BVlNUCTB4Q0U4MAkvKiBHT0EgVlNUIFNl dHRpbmcgKi8NCj4+ICsjZGVmaW5lIE1DU19HT0FDTEtBMQkweENFQTAJLyogR09BIENMS0ExIFNl dHRpbmcgKi8NCj4+ICsjZGVmaW5lIE1DU19HT0FDTEtBMwkweENFQjAJLyogR09BIENMS0EzIFNl dHRpbmcgKi8NCj4+ICsjZGVmaW5lIE1DU19HT0FFQ0xLCTB4Q0ZDMAkvKiBHT0EgRUNMSyBTZXR0 aW5nICovDQo+PiArI2RlZmluZSBNQ1NfTk9fRE9DMgkweENGRDAJLyogQ29tbWFuZCBub3QgZG9j dW1lbnRlZCAqLw0KPj4gKyNkZWZpbmUgTUNTX0dWRERTRVQJMHhEODAwCS8qIEdWREQvTkdWREQg Ki8NCj4+ICsjZGVmaW5lIE1DU19WQ09NREMJMHhEOTAwCS8qIFZDT00gVm9sdGFnZSBTZXR0aW5n ICovDQo+PiArI2RlZmluZSBNQ1NfR01DVDJfMlAJMHhFMTAwCS8qIEdhbW1hIENvcnJlY3Rpb24g Mi4yKyBTZXR0aW5nICovDQo+PiArI2RlZmluZSBNQ1NfR01DVDJfMk4JMHhFMjAwCS8qIEdhbW1h IENvcnJlY3Rpb24gMi4yLSBTZXR0aW5nICovDQo+PiArI2RlZmluZSBNQ1NfTk9fRE9DMwkweEY1 QjYJLyogQ29tbWFuZCBub3QgZG9jdW1lbnRlZCAqLw0KPj4gKyNkZWZpbmUgTUNTX0NNRDJfRU5B MQkweEZGMDAJLyogRW5hYmxlIEFjY2VzcyBDb21tYW5kMiAiQ01EMiIgKi8NCj4+ICsjZGVmaW5l IE1DU19DTUQyX0VOQTIJMHhGRjgwCS8qIEVuYWJsZSBBY2Nlc3MgT3Jpc2UgQ29tbWFuZDIgKi8N Cj4+ICsNCj4+ICtzdHJ1Y3Qgb3RtODAwOWEgew0KPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7DQo+ PiArCXN0cnVjdCBkcm1fcGFuZWwgcGFuZWw7DQo+PiArCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNl ICpibF9kZXY7DQo+PiArCXN0cnVjdCBncGlvX2Rlc2MgKnJlc2V0X2dwaW87DQo+PiArCWJvb2wg cHJlcGFyZWQ7DQo+PiArCWJvb2wgZW5hYmxlZDsNCj4+ICt9Ow0KPj4gKw0KPj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBkZWZhdWx0X21vZGUgPSB7DQo+PiArCS5jbG9j ayA9IDMyNzI5LA0KPj4gKwkuaGRpc3BsYXkgPSA0ODAsDQo+PiArCS5oc3luY19zdGFydCA9IDQ4 MCArIDEyMCwNCj4+ICsJLmhzeW5jX2VuZCA9IDQ4MCArIDEyMCArIDYzLA0KPj4gKwkuaHRvdGFs ID0gNDgwICsgMTIwICsgNjMgKyAxMjAsDQo+PiArCS52ZGlzcGxheSA9IDgwMCwNCj4+ICsJLnZz eW5jX3N0YXJ0ID0gODAwICsgMTIsDQo+PiArCS52c3luY19lbmQgPSA4MDAgKyAxMiArIDEyLA0K Pj4gKwkudnRvdGFsID0gODAwICsgMTIgKyAxMiArIDEyLA0KPj4gKwkudnJlZnJlc2ggPSA1MCwN Cj4+ICsJLmZsYWdzID0gMCwNCj4+ICsJLndpZHRoX21tID0gNTIsDQo+PiArCS5oZWlnaHRfbW0g PSA4NiwNCj4+ICt9Ow0KPj4gKw0KPj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IG90bTgwMDlhICpw YW5lbF90b19vdG04MDA5YShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkNCj4+ICt7DQo+PiArCXJl dHVybiBjb250YWluZXJfb2YocGFuZWwsIHN0cnVjdCBvdG04MDA5YSwgcGFuZWwpOw0KPj4gK30N Cj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBvdG04MDA5YV9kY3Nfd3JpdGVfYnVmKHN0cnVjdCBvdG04 MDA5YSAqY3R4LCBjb25zdCB2b2lkICpkYXRhLA0KPj4gKwkJCQkgICBzaXplX3QgbGVuKQ0KPj4g K3sNCj4+ICsJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpID0gdG9fbWlwaV9kc2lfZGV2aWNl KGN0eC0+ZGV2KTsNCj4+ICsNCj4+ICsJaWYgKG1pcGlfZHNpX2Rjc193cml0ZV9idWZmZXIoZHNp LCBkYXRhLCBsZW4pIDwgMCkNCj4+ICsJCURSTV9XQVJOKCJtaXBpIGRzaSBkY3Mgd3JpdGUgYnVm ZmVyIGZhaWxlZFxuIik7DQo+PiArfQ0KPj4gKw0KPj4gKyNkZWZpbmUgZGNzX3dyaXRlX3NlcShj dHgsIHNlcS4uLikJCQlcDQo+PiArKHsJCQkJCQkJXA0KPj4gKwlzdGF0aWMgY29uc3QgdTggZFtd ID0geyBzZXEgfTsJCQlcDQo+PiArCW90bTgwMDlhX2Rjc193cml0ZV9idWYoY3R4LCBkLCBBUlJB WV9TSVpFKGQpKTsJXA0KPj4gK30pDQo+PiArDQo+PiArI2RlZmluZSBkY3Nfd3JpdGVfY21kX2F0 KGN0eCwgY21kLCBzZXEuLi4pCQlcDQo+PiArKHsJCQkJCQkJXA0KPj4gKwlkY3Nfd3JpdGVfc2Vx KGN0eCwgTUNTX0FEUlNGVCwgKGNtZCkgJiAweEZGKTsJXA0KPj4gKwlkY3Nfd3JpdGVfc2VxKGN0 eCwgKGNtZCkgPj4gOCwgc2VxKTsJCVwNCj4+ICt9KQ0KPiANCj4gVGhpcyBhcHByb2FjaCBsb29r cyBiZXR0ZXIgdGhhbiBteSBwcm9wb3NpdGlvbiwgZm9yIHN1cmUgaXQgaXMgbW9yZQ0KPiBjb25z aXN0ZW50IHdpdGggZG9jdW1lbnRhdGlvbi4NCj4gDQpUaGFuayB5b3UgZm9yIHlvdXIgZ29vZCBp bml0aWFsIHByb3Bvc2l0aW9uIGhlbHBpbmcgbWUgYSBsb3QgdG8gaW1wcm92ZSANCmFsbCB0aGlz IDogKQ0KDQo+PiArDQo+PiArc3RhdGljIGludCBvdG04MDA5YV9pbml0X3NlcXVlbmNlKHN0cnVj dCBvdG04MDA5YSAqY3R4KQ0KPj4gK3sNCj4+ICsJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNp ID0gdG9fbWlwaV9kc2lfZGV2aWNlKGN0eC0+ZGV2KTsNCj4+ICsJaW50IHJldDsNCj4+ICsNCj4+ ICsJLyogRW50ZXIgQ01EMiAqLw0KPj4gKwlkY3Nfd3JpdGVfY21kX2F0KGN0eCwgTUNTX0NNRDJf RU5BMSwgMHg4MCwgMHgwOSwgMHgwMSk7DQo+PiArDQo+PiArCS8qIEVudGVyIE9yaXNlIENvbW1h bmQyICovDQo+PiArCWRjc193cml0ZV9jbWRfYXQoY3R4LCBNQ1NfQ01EMl9FTkEyLCAweDgwLCAw eDA5KTsNCj4+ICsNCj4+ICsJZGNzX3dyaXRlX2NtZF9hdChjdHgsIE1DU19TRF9QQ0hfQ1RSTCwg MHgzMCk7DQo+PiArCW1kZWxheSgxMCk7DQo+PiArDQo+PiArCWRjc193cml0ZV9jbWRfYXQoY3R4 LCBNQ1NfTk9fRE9DMSwgMHg0MCk7DQo+PiArCW1kZWxheSgxMCk7DQo+PiArDQo+PiArCWRjc193 cml0ZV9jbWRfYXQoY3R4LCBNQ1NfUFdSX0NUUkw0ICsgMSwgMHhBOSk7DQo+PiArCWRjc193cml0 ZV9jbWRfYXQoY3R4LCBNQ1NfUFdSX0NUUkwyICsgMSwgMHgzNCk7DQo+PiArCWRjc193cml0ZV9j bWRfYXQoY3R4LCBNQ1NfUF9EUlZfTSwgMHg1MCk7DQo+PiArCWRjc193cml0ZV9jbWRfYXQoY3R4 LCBNQ1NfVkNPTURDLCAweDRFKTsNCj4+ICsJZGNzX3dyaXRlX2NtZF9hdChjdHgsIE1DU19PU0Nf QURKLCAweDY2KTsgLyogNjVIeiAqLw0KPj4gKwlkY3Nfd3JpdGVfY21kX2F0KGN0eCwgTUNTX1JH Ql9WSURfU0VULCAweDA4KTsNCj4+ICsJZGNzX3dyaXRlX2NtZF9hdChjdHgsIE1DU19QV1JfQ1RS TDIgKyAyLCAweDAxKTsNCj4+ICsJZGNzX3dyaXRlX2NtZF9hdChjdHgsIE1DU19QV1JfQ1RSTDIg KyA1LCAweDM0KTsNCj4+ICsJZGNzX3dyaXRlX2NtZF9hdChjdHgsIE1DU19QV1JfQ1RSTDIgKyA0 LCAweDMzKTsNCj4+ICsJZGNzX3dyaXRlX2NtZF9hdChjdHgsIE1DU19HVkREU0VULCAweDc5LCAw eDc5KTsNCj4+ICsJZGNzX3dyaXRlX2NtZF9hdChjdHgsIE1DU19TRF9DVFJMICsgMSwgMHgxQik7 DQo+PiArCWRjc193cml0ZV9jbWRfYXQoY3R4LCBNQ1NfUFdSX0NUUkwxICsgMiwgMHg4Myk7DQo+ PiArCWRjc193cml0ZV9jbWRfYXQoY3R4LCBNQ1NfU0RfUENIX0NUUkwgKyAxLCAweDgzKTsNCj4+ ICsJZGNzX3dyaXRlX2NtZF9hdChjdHgsIE1DU19SR0JfVklEX1NFVCwgMHgwRSk7IC8qIEZJWE1F IGJlZm9yZSAweDA4ISAqLw0KPiANCj4gUXVpdGUgY3J5cHRpYyBjb21tZW50LCBlaXRoZXIgcmVt b3ZlLCBlaXRoZXIgbWFrZSBpdCByZWFkYWJsZS4NCj4gDQpmaXhlZCBpbiB2MywgdGhhbmtzLg0K DQo+PiArCWRjc193cml0ZV9jbWRfYXQoY3R4LCBNQ1NfUEFOU0VULCAweDAwLCAweDAxKTsNCj4+ ICsNCj4+ICsJZGNzX3dyaXRlX2NtZF9hdChjdHgsIE1DU19HT0FWU1QsIDB4ODUsIDB4MDEsIDB4 MDAsIDB4ODQsIDB4MDEsIDB4MDApOw0KPj4gKwlkY3Nfd3JpdGVfY21kX2F0KGN0eCwgTUNTX0dP QUNMS0ExLCAweDE4LCAweDA0LCAweDAzLCAweDM5LCAweDAwLCAweDAwLA0KPj4gKwkJCSAweDAw LCAweDE4LCAweDAzLCAweDAzLCAweDNBLCAweDAwLCAweDAwLCAweDAwKTsNCj4+ICsJZGNzX3dy aXRlX2NtZF9hdChjdHgsIE1DU19HT0FDTEtBMywgMHgxOCwgMHgwMiwgMHgwMywgMHgzQiwgMHgw MCwgMHgwMCwNCj4+ICsJCQkgMHgwMCwgMHgxOCwgMHgwMSwgMHgwMywgMHgzQywgMHgwMCwgMHgw MCwgMHgwMCk7DQo+PiArCWRjc193cml0ZV9jbWRfYXQoY3R4LCBNQ1NfR09BRUNMSywgMHgwMSwg MHgwMSwgMHgyMCwgMHgyMCwgMHgwMCwgMHgwMCwNCj4+ICsJCQkgMHgwMSwgMHgwMiwgMHgwMCwg MHgwMCk7DQo+PiArDQo+PiArCWRjc193cml0ZV9jbWRfYXQoY3R4LCBNQ1NfTk9fRE9DMiwgMHgw MCk7DQo+PiArDQo+PiArCWRjc193cml0ZV9jbWRfYXQoY3R4LCBNQ1NfUEFOQ1RSTFNFVDEsIDAs IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApOw0KPj4gKwlkY3Nfd3JpdGVfY21kX2F0KGN0eCwg TUNTX1BBTkNUUkxTRVQyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLA0KPj4gKwkJCSAw LCAwLCAwLCAwLCAwKTsNCj4+ICsJZGNzX3dyaXRlX2NtZF9hdChjdHgsIE1DU19QQU5DVFJMU0VU MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwNCj4+ICsJCQkgMCwgMCwgMCwgMCwgMCk7 DQo+PiArCWRjc193cml0ZV9jbWRfYXQoY3R4LCBNQ1NfUEFOQ1RSTFNFVDQsIDAsIDAsIDAsIDAs IDAsIDAsIDAsIDAsIDAsIDApOw0KPj4gKwlkY3Nfd3JpdGVfY21kX2F0KGN0eCwgTUNTX1BBTkNU UkxTRVQ1LCAwLCA0LCA0LCA0LCA0LCA0LCAwLCAwLCAwLCAwLA0KPj4gKwkJCSAwLCAwLCAwLCAw LCAwKTsNCj4+ICsJZGNzX3dyaXRlX2NtZF9hdChjdHgsIE1DU19QQU5DVFJMU0VUNiwgMCwgMCwg MCwgMCwgMCwgMCwgNCwgNCwgNCwgNCwNCj4+ICsJCQkgNCwgMCwgMCwgMCwgMCk7DQo+PiArCWRj c193cml0ZV9jbWRfYXQoY3R4LCBNQ1NfUEFOQ1RSTFNFVDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAs IDAsIDAsIDApOw0KPj4gKwlkY3Nfd3JpdGVfY21kX2F0KGN0eCwgTUNTX1BBTkNUUkxTRVQ4LCAw eEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLA0KPj4gKwkJCSAweEZGLCAweEZGLCAweEZGLCAw eEZGLCAweEZGKTsNCj4+ICsNCj4+ICsJZGNzX3dyaXRlX2NtZF9hdChjdHgsIE1DU19QQU5VMkQx LCAweDAwLCAweDI2LCAweDA5LCAweDBCLCAweDAxLCAweDI1LA0KPj4gKwkJCSAweDAwLCAweDAw LCAweDAwLCAweDAwKTsNCj4+ICsJZGNzX3dyaXRlX2NtZF9hdChjdHgsIE1DU19QQU5VMkQyLCAw eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KPj4gKwkJCSAweDAwLCAweDAwLCAw eDAwLCAweDAwLCAweDAwLCAweDI2LCAweDBBLCAweDBDLCAweDAyKTsNCj4+ICsJZGNzX3dyaXRl X2NtZF9hdChjdHgsIE1DU19QQU5VMkQzLCAweDI1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw eDAwLA0KPj4gKwkJCSAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw eDAwLCAweDAwKTsNCj4+ICsJZGNzX3dyaXRlX2NtZF9hdChjdHgsIE1DU19QQU5EMlUxLCAweDAw LCAweDI1LCAweDBDLCAweDBBLCAweDAyLCAweDI2LA0KPj4gKwkJCSAweDAwLCAweDAwLCAweDAw LCAweDAwKTsNCj4+ICsJZGNzX3dyaXRlX2NtZF9hdChjdHgsIE1DU19QQU5EMlUyLCAweDAwLCAw eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KPj4gKwkJCSAweDAwLCAweDAwLCAweDAwLCAw eDAwLCAweDAwLCAweDI1LCAweDBCLCAweDA5LCAweDAxKTsNCj4+ICsJZGNzX3dyaXRlX2NtZF9h dChjdHgsIE1DU19QQU5EMlUzLCAweDI2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0K Pj4gKwkJCSAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw eDAwKTsNCj4+ICsNCj4+ICsJZGNzX3dyaXRlX2NtZF9hdChjdHgsIE1DU19QV1JfQ1RSTDEgKyAx LCAweDY2KTsNCj4+ICsNCj4+ICsJZGNzX3dyaXRlX2NtZF9hdChjdHgsIE1DU19OT19ET0MzLCAw eDA2KTsNCj4+ICsNCj4+ICsJZGNzX3dyaXRlX2NtZF9hdChjdHgsIE1DU19HTUNUMl8yUCwgMHgw MCwgMHgwOSwgMHgwRiwgMHgwRSwgMHgwNywgMHgxMCwNCj4+ICsJCQkgMHgwQiwgMHgwQSwgMHgw NCwgMHgwNywgMHgwQiwgMHgwOCwgMHgwRiwgMHgxMCwgMHgwQSwNCj4+ICsJCQkgMHgwMSk7DQo+ PiArCWRjc193cml0ZV9jbWRfYXQoY3R4LCBNQ1NfR01DVDJfMk4sIDB4MDAsIDB4MDksIDB4MEYs IDB4MEUsIDB4MDcsIDB4MTAsDQo+PiArCQkJIDB4MEIsIDB4MEEsIDB4MDQsIDB4MDcsIDB4MEIs IDB4MDgsIDB4MEYsIDB4MTAsIDB4MEEsDQo+PiArCQkJIDB4MDEpOw0KPj4gKw0KPj4gKwkvKiBF eGl0IENNRDIgKi8NCj4+ICsJZGNzX3dyaXRlX2NtZF9hdChjdHgsIE1DU19DTUQyX0VOQTEsIDB4 RkYsIDB4RkYsIDB4RkYpOw0KPj4gKw0KPj4gKwlyZXQgPSBtaXBpX2RzaV9kY3Nfbm9wKGRzaSk7 DQo+PiArCWlmIChyZXQpDQo+PiArCQlyZXR1cm4gcmV0Ow0KPj4gKw0KPj4gKwlyZXQgPSBtaXBp X2RzaV9kY3NfZXhpdF9zbGVlcF9tb2RlKGRzaSk7DQo+PiArCWlmIChyZXQpDQo+PiArCQlyZXR1 cm4gcmV0Ow0KPj4gKw0KPj4gKwkvKiBXYWl0IGZvciBzbGVlcCBvdXQgZXhpdCAqLw0KPj4gKwlt ZGVsYXkoMTIwKTsNCj4+ICsNCj4+ICsJLyogRGVmYXVsdCBwb3J0cmFpdCA0ODB4ODAwIHJnYjI0 ICovDQo+PiArCWRjc193cml0ZV9zZXEoY3R4LCBNSVBJX0RDU19TRVRfQUREUkVTU19NT0RFLCAw eDAwKTsNCj4+ICsNCj4+ICsJcmV0ID0gbWlwaV9kc2lfZGNzX3NldF9jb2x1bW5fYWRkcmVzcyhk c2ksIDAsDQo+PiArCQkJCQkgICAgICBkZWZhdWx0X21vZGUuaGRpc3BsYXkgLSAxKTsNCj4+ICsJ aWYgKHJldCkNCj4+ICsJCXJldHVybiByZXQ7DQo+PiArDQo+PiArCXJldCA9IG1pcGlfZHNpX2Rj c19zZXRfcGFnZV9hZGRyZXNzKGRzaSwgMCwgZGVmYXVsdF9tb2RlLnZkaXNwbGF5IC0gMSk7DQo+ PiArCWlmIChyZXQpDQo+PiArCQlyZXR1cm4gcmV0Ow0KPj4gKw0KPj4gKwkvKiBTZWUgb3RtODAw OWEgZHJpdmVyIGRvY3VtZW50YXRpb24gZm9yIHBpeGVsIGZvcm1hdCBkZXNjcmlwdGlvbnMgKi8N Cj4+ICsJcmV0ID0gbWlwaV9kc2lfZGNzX3NldF9waXhlbF9mb3JtYXQoZHNpLCBNSVBJX0RDU19Q SVhFTF9GTVRfMjRCSVQgfA0KPj4gKwkJCQkJICAgIE1JUElfRENTX1BJWEVMX0ZNVF8yNEJJVCA8 PCA0KTsNCj4+ICsJaWYgKHJldCkNCj4+ICsJCXJldHVybiByZXQ7DQo+PiArDQo+PiArCS8qIERp c2FibGUgQ0FCQyBmZWF0dXJlICovDQo+PiArCWRjc193cml0ZV9zZXEoY3R4LCBNSVBJX0RDU19X UklURV9QT1dFUl9TQVZFLCAweDAwKTsNCj4+ICsNCj4+ICsJcmV0ID0gbWlwaV9kc2lfZGNzX3Nl dF9kaXNwbGF5X29uKGRzaSk7DQo+PiArCWlmIChyZXQpDQo+PiArCQlyZXR1cm4gcmV0Ow0KPj4g Kw0KPj4gKwlyZXQgPSBtaXBpX2RzaV9kY3Nfbm9wKGRzaSk7DQo+PiArCWlmIChyZXQpDQo+PiAr CQlyZXR1cm4gcmV0Ow0KPj4gKw0KPj4gKwkvKiBTZW5kIENvbW1hbmQgR1JBTSBtZW1vcnkgd3Jp dGUgKG5vIHBhcmFtZXRlcnMpICovDQo+PiArCWRjc193cml0ZV9zZXEoY3R4LCBNSVBJX0RDU19X UklURV9NRU1PUllfU1RBUlQpOw0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+ PiArc3RhdGljIGludCBvdG04MDA5YV9kaXNhYmxlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQ0K Pj4gK3sNCj4+ICsJc3RydWN0IG90bTgwMDlhICpjdHggPSBwYW5lbF90b19vdG04MDA5YShwYW5l bCk7DQo+PiArCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSA9IHRvX21pcGlfZHNpX2Rldmlj ZShjdHgtPmRldik7DQo+PiArCWludCByZXQ7DQo+PiArDQo+PiArCWlmICghY3R4LT5lbmFibGVk KQ0KPj4gKwkJcmV0dXJuIDA7IC8qIFRoaXMgaXMgbm90IGFuIGlzc3VlIHNvIHdlIHJldHVybiAw IGhlcmUgKi8NCj4+ICsNCj4+ICsJLyogUG93ZXIgb2ZmIHRoZSBiYWNrbGlnaHQuIE5vdGU6IGVu ZC11c2VyIHN0aWxsIGNvbnRyb2xzIGJyaWdodG5lc3MgKi8NCj4+ICsJY3R4LT5ibF9kZXYtPnBy b3BzLnBvd2VyID0gRkJfQkxBTktfUE9XRVJET1dOOw0KPj4gKwlyZXQgPSBiYWNrbGlnaHRfdXBk YXRlX3N0YXR1cyhjdHgtPmJsX2Rldik7DQo+PiArCWlmIChyZXQpDQo+PiArCQlyZXR1cm4gcmV0 Ow0KPj4gKw0KPj4gKwlyZXQgPSBtaXBpX2RzaV9kY3Nfc2V0X2Rpc3BsYXlfb2ZmKGRzaSk7DQo+ PiArCWlmIChyZXQgPCAwKQ0KPj4gKwkJcmV0dXJuIHJldDsNCj4+ICsNCj4+ICsJcmV0ID0gbWlw aV9kc2lfZGNzX2VudGVyX3NsZWVwX21vZGUoZHNpKTsNCj4+ICsJaWYgKHJldCA8IDApDQo+PiAr CQlyZXR1cm4gcmV0Ow0KPj4gKw0KPj4gKwltc2xlZXAoMTIwKTsNCj4+ICsNCj4+ICsJY3R4LT5l bmFibGVkID0gZmFsc2U7DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtz dGF0aWMgaW50IG90bTgwMDlhX3VucHJlcGFyZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkNCj4+ ICt7DQo+PiArCXN0cnVjdCBvdG04MDA5YSAqY3R4ID0gcGFuZWxfdG9fb3RtODAwOWEocGFuZWwp Ow0KPj4gKw0KPj4gKwlpZiAoIWN0eC0+cHJlcGFyZWQpDQo+PiArCQlyZXR1cm4gMDsNCj4+ICsN Cj4+ICsJaWYgKGN0eC0+cmVzZXRfZ3Bpbykgew0KPj4gKwkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNs ZWVwKGN0eC0+cmVzZXRfZ3BpbywgMSk7DQo+PiArCQltc2xlZXAoMjApOw0KPj4gKwl9DQo+PiAr DQo+PiArCWN0eC0+cHJlcGFyZWQgPSBmYWxzZTsNCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiAr fQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgb3RtODAwOWFfcHJlcGFyZShzdHJ1Y3QgZHJtX3BhbmVs ICpwYW5lbCkNCj4+ICt7DQo+PiArCXN0cnVjdCBvdG04MDA5YSAqY3R4ID0gcGFuZWxfdG9fb3Rt ODAwOWEocGFuZWwpOw0KPj4gKwlpbnQgcmV0Ow0KPj4gKw0KPj4gKwlpZiAoY3R4LT5wcmVwYXJl ZCkNCj4+ICsJCXJldHVybiAwOw0KPj4gKw0KPj4gKwlpZiAoY3R4LT5yZXNldF9ncGlvKSB7DQo+ PiArCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoY3R4LT5yZXNldF9ncGlvLCAwKTsNCj4+ICsJ CWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChjdHgtPnJlc2V0X2dwaW8sIDEpOw0KPj4gKwkJbXNs ZWVwKDIwKTsNCj4+ICsJCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChjdHgtPnJlc2V0X2dwaW8s IDApOw0KPj4gKwkJbXNsZWVwKDEwMCk7DQo+PiArCX0NCj4+ICsNCj4+ICsJcmV0ID0gb3RtODAw OWFfaW5pdF9zZXF1ZW5jZShjdHgpOw0KPj4gKwlpZiAocmV0KQ0KPj4gKwkJcmV0dXJuIHJldDsN Cj4+ICsNCj4+ICsJY3R4LT5wcmVwYXJlZCA9IHRydWU7DQo+PiArDQo+PiArCS8qIFBvd2VyIG9u IHRoZSBiYWNrbGlnaHQuIE5vdGU6IGVuZC11c2VyIHN0aWxsIGNvbnRyb2xzIGJyaWdodG5lc3Mg Ki8NCj4+ICsJY3R4LT5ibF9kZXYtPnByb3BzLnBvd2VyID0gRkJfQkxBTktfVU5CTEFOSzsNCj4+ ICsJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoY3R4LT5ibF9kZXYpOw0KPj4gKw0KPj4gKwlyZXR1 cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBvdG04MDA5YV9lbmFibGUoc3RydWN0 IGRybV9wYW5lbCAqcGFuZWwpDQo+PiArew0KPj4gKwlzdHJ1Y3Qgb3RtODAwOWEgKmN0eCA9IHBh bmVsX3RvX290bTgwMDlhKHBhbmVsKTsNCj4+ICsNCj4+ICsJY3R4LT5lbmFibGVkID0gdHJ1ZTsN Cj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPiANCj4gSSBhbSBub3Qgc3VyZSBhYm91dCBp dCwgYnV0IEkgZ3Vlc3MgdW5ibGFua2luZyBzaG91bGQgYmUgcGVyZm9ybWVkIGluDQo+IF9lbmFi bGUgY2FsbGJhY2suIE90aGVyd2lzZSB5b3UgcmlzayBzZWVpbmcgZ2FyYmFnZSBhdCBwYW5lbCBz dGFydCAtIGl0DQo+IHN0YXJ0cyBkaXNwbGF5aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YS4NCj4gVXN1 YWxseSBzZXF1ZW5jZSBsb29rcyBsaWtlOg0KPiBBLiBQb3dlciBvbiBEU0kgaG9zdA0KPiBCLiBJ bml0aWFsaXplIHBhbmVsIChwcmVwYXJlIGNhbGxiYWNrKQ0KPiBDLiBTdGFydCB2aWRlbyB0cmFu c21pc3Npb24gZnJvbSB0aGUgaG9zdCB0byB0aGUgcGFuZWwNCj4gRC4gd2FpdCBhYm91dCAxMjBt cywgdGhlbiB1bmJsYW5rIHBhbmVsIChlbmFibGUgY2FsbGJhY2spDQo+IA0KPiBPZiBjb3Vyc2Ug dGhpcyBpcyBvbmx5IG15IGV4cGVyaWVuY2UsIG1heWJlIHlvdXIgcGFuZWwgaXMgZGlmZmVyZW50 Lg0KDQpUaGlzIG90bTgwMDlhIHBhbmVsIGRvZXMgbm90IHJlYWxseSBsaWtlIHJlY2VpdmluZyBk c2kgY29tbWFuZHMgZHVyaW5nIA0KdGhlIHZpZGVvIG1vZGUgYmxhbmtpbmdzLCB0aGF0IGlzIHdo eSBJIGhhdmUgYW4gX2VuYWJsZSgpIGZ1bmN0aW9uIHdpdGggDQpubyBkY3MgY29tbWFuZCBjYWxs LiBNYXliZSBpdCBjb3VsZCBiZSBpbXByb3ZlZCBpbiB0aGUgZnV0dXJlLCBieSANCmFkanVzdGlu ZyB0aW1pbmdzIGZvciBpbnN0YW5jZSwgaGVscGluZyB0aGUgcGFuZWwgdG8gc3VwcG9ydCBkY3Mg DQpjb21tYW5kcyBkdXJpbmcgdmlkZW8gbW9kZSBibGFua2luZ3MuIEZvciB0aGUgbW9tZW50LCBJ IHByZWZlciB0aGUgKnNhZmUgDQphcHByb2FjaCogaWUuIG5vIGRzaSBjb21tYW5kIGR1cmluZyB2 aWRlbyBtb2RlIGJsYW5raW5ncyAoZXhjZXB0ZWQgDQpiYWNrbGlnaHQgdXBkYXRlcykuDQoNCj4g DQo+IEJlc2lkZSBhYm92ZSBjb21tZW50czoNCj4gUmV2aWV3ZWQtYnk6IEFuZHJ6ZWogSGFqZGEg PGEuaGFqZGFAc2Ftc3VuZy5jb20+DQo+IA0KPiAgIC0tDQo+IFJlZ2FyZHMNCj4gQW5kcnplag0K PiANCj4gDQoNCk1hbnkgdGhhbmtzLA0KUGhpbGlwcGUNCj4+ICsNCj4+ICtzdGF0aWMgaW50IG90 bTgwMDlhX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkNCj4+ICt7DQo+PiArCXN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOw0KPj4gKw0KPj4gKwltb2RlID0gZHJtX21vZGVf ZHVwbGljYXRlKHBhbmVsLT5kcm0sICZkZWZhdWx0X21vZGUpOw0KPj4gKwlpZiAoIW1vZGUpIHsN Cj4+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGFkZCBtb2RlICV1eCV1eEAldVxuIiwNCj4+ICsJ CQkgIGRlZmF1bHRfbW9kZS5oZGlzcGxheSwgZGVmYXVsdF9tb2RlLnZkaXNwbGF5LA0KPj4gKwkJ CSAgZGVmYXVsdF9tb2RlLnZyZWZyZXNoKTsNCj4+ICsJCXJldHVybiAtRU5PTUVNOw0KPj4gKwl9 DQo+PiArDQo+PiArCWRybV9tb2RlX3NldF9uYW1lKG1vZGUpOw0KPj4gKw0KPj4gKwltb2RlLT50 eXBlID0gRFJNX01PREVfVFlQRV9EUklWRVIgfCBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRDsNCj4+ ICsJZHJtX21vZGVfcHJvYmVkX2FkZChwYW5lbC0+Y29ubmVjdG9yLCBtb2RlKTsNCj4+ICsNCj4+ ICsJcGFuZWwtPmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLndpZHRoX21tID0gbW9kZS0+d2lkdGhf bW07DQo+PiArCXBhbmVsLT5jb25uZWN0b3ItPmRpc3BsYXlfaW5mby5oZWlnaHRfbW0gPSBtb2Rl LT5oZWlnaHRfbW07DQo+PiArDQo+PiArCXJldHVybiAxOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9wYW5lbF9mdW5jcyBvdG04MDA5YV9kcm1fZnVuY3MgPSB7DQo+ PiArCS5kaXNhYmxlICAgPSBvdG04MDA5YV9kaXNhYmxlLA0KPj4gKwkudW5wcmVwYXJlID0gb3Rt ODAwOWFfdW5wcmVwYXJlLA0KPj4gKwkucHJlcGFyZSAgID0gb3RtODAwOWFfcHJlcGFyZSwNCj4+ ICsJLmVuYWJsZSAgICA9IG90bTgwMDlhX2VuYWJsZSwNCj4+ICsJLmdldF9tb2RlcyA9IG90bTgw MDlhX2dldF9tb2RlcywNCj4+ICt9Ow0KPj4gKw0KPj4gKy8qDQo+PiArICogRFNJLUJBU0VEIEJB Q0tMSUdIVA0KPj4gKyAqLw0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgb3RtODAwOWFfYmFja2xpZ2h0 X3VwZGF0ZV9zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQ0KPj4gK3sNCj4+ICsJ c3RydWN0IG90bTgwMDlhICpjdHggPSBibF9nZXRfZGF0YShiZCk7DQo+PiArCXU4IGRhdGFbMl07 DQo+PiArDQo+PiArCWlmICghY3R4LT5wcmVwYXJlZCkgew0KPj4gKwkJRFJNX0RFQlVHKCJsY2Qg bm90IHJlYWR5IHlldCBmb3Igc2V0dGluZyBpdHMgYmFja2xpZ2h0IVxuIik7DQo+PiArCQlyZXR1 cm4gLUVOWElPOw0KPj4gKwl9DQo+PiArDQo+PiArCWlmIChiZC0+cHJvcHMucG93ZXIgPD0gRkJf QkxBTktfTk9STUFMKSB7DQo+PiArCQkvKiBQb3dlciBvbiB0aGUgYmFja2xpZ2h0IHdpdGggdGhl IHJlcXVlc3RlZCBicmlnaHRuZXNzDQo+PiArCQkgKiBOb3RlIFdlIGNhbiBub3QgdXNlIG1pcGlf ZHNpX2Rjc19zZXRfZGlzcGxheV9icmlnaHRuZXNzKCkNCj4+ICsJCSAqIGFzIG90bTgwMDlhIGRy aXZlciBzdXBwb3J0IG9ubHkgOC1iaXQgYnJpZ2h0bmVzcyAoMSBwYXJhbSkuDQo+PiArCQkgKi8N Cj4+ICsJCWRhdGFbMF0gPSBNSVBJX0RDU19TRVRfRElTUExBWV9CUklHSFRORVNTOw0KPj4gKwkJ ZGF0YVsxXSA9IGJkLT5wcm9wcy5icmlnaHRuZXNzOw0KPj4gKwkJb3RtODAwOWFfZGNzX3dyaXRl X2J1ZihjdHgsIGRhdGEsIEFSUkFZX1NJWkUoZGF0YSkpOw0KPj4gKw0KPj4gKwkJLyogc2V0IEJy aWdodG5lc3MgQ29udHJvbCAmIEJhY2tsaWdodCBvbiAqLw0KPj4gKwkJZGF0YVsxXSA9IDB4MjQ7 DQo+PiArDQo+PiArCX0gZWxzZSB7DQo+PiArCQkvKiBQb3dlciBvZmYgdGhlIGJhY2tsaWdodDog c2V0IEJyaWdodG5lc3MgQ29udHJvbCAmIEJsIG9mZiAqLw0KPj4gKwkJZGF0YVsxXSA9IDA7DQo+ PiArCX0NCj4+ICsNCj4+ICsJLyogVXBkYXRlIEJyaWdodG5lc3MgQ29udHJvbCAmIEJhY2tsaWdo dCAqLw0KPj4gKwlkYXRhWzBdID0gTUlQSV9EQ1NfV1JJVEVfQ09OVFJPTF9ESVNQTEFZOw0KPj4g KwlvdG04MDA5YV9kY3Nfd3JpdGVfYnVmKGN0eCwgZGF0YSwgQVJSQVlfU0laRShkYXRhKSk7DQo+ PiArDQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IGJhY2tsaWdodF9vcHMgb3RtODAwOWFfYmFja2xpZ2h0X29wcyA9IHsNCj4+ICsJLnVwZGF0ZV9z dGF0dXMgPSBvdG04MDA5YV9iYWNrbGlnaHRfdXBkYXRlX3N0YXR1cywNCj4+ICt9Ow0KPj4gKw0K Pj4gK3N0YXRpYyBpbnQgb3RtODAwOWFfcHJvYmUoc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNp KQ0KPj4gK3sNCj4+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJmRzaS0+ZGV2Ow0KPj4gKwlzdHJ1 Y3Qgb3RtODAwOWEgKmN0eDsNCj4+ICsJaW50IHJldDsNCj4+ICsNCj4+ICsJY3R4ID0gZGV2bV9r emFsbG9jKGRldiwgc2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVMKTsNCj4+ICsJaWYgKCFjdHgpDQo+ PiArCQlyZXR1cm4gLUVOT01FTTsNCj4+ICsNCj4+ICsJY3R4LT5yZXNldF9ncGlvID0gZGV2bV9n cGlvZF9nZXRfb3B0aW9uYWwoZGV2LCAicmVzZXQiLCBHUElPRF9PVVRfTE9XKTsNCj4+ICsJaWYg KElTX0VSUihjdHgtPnJlc2V0X2dwaW8pKSB7DQo+PiArCQlkZXZfZXJyKGRldiwgImNhbm5vdCBn ZXQgcmVzZXQtZ3Bpb1xuIik7DQo+PiArCQlyZXR1cm4gUFRSX0VSUihjdHgtPnJlc2V0X2dwaW8p Ow0KPj4gKwl9DQo+PiArDQo+PiArCW1pcGlfZHNpX3NldF9kcnZkYXRhKGRzaSwgY3R4KTsNCj4+ ICsNCj4+ICsJY3R4LT5kZXYgPSBkZXY7DQo+PiArDQo+PiArCWRzaS0+bGFuZXMgPSAyOw0KPj4g Kwlkc2ktPmZvcm1hdCA9IE1JUElfRFNJX0ZNVF9SR0I4ODg7DQo+PiArCWRzaS0+bW9kZV9mbGFn cyA9IE1JUElfRFNJX01PREVfVklERU8gfCBNSVBJX0RTSV9NT0RFX1ZJREVPX0JVUlNUIHwNCj4+ ICsJCQkgIE1JUElfRFNJX01PREVfTFBNOw0KPj4gKw0KPj4gKwlkcm1fcGFuZWxfaW5pdCgmY3R4 LT5wYW5lbCk7DQo+PiArCWN0eC0+cGFuZWwuZGV2ID0gZGV2Ow0KPj4gKwljdHgtPnBhbmVsLmZ1 bmNzID0gJm90bTgwMDlhX2RybV9mdW5jczsNCj4+ICsNCj4+ICsJY3R4LT5ibF9kZXYgPSBiYWNr bGlnaHRfZGV2aWNlX3JlZ2lzdGVyKERSVl9OQU1FICJfYmFja2xpZ2h0IiwgZGV2LCBjdHgsDQo+ PiArCQkJCQkJJm90bTgwMDlhX2JhY2tsaWdodF9vcHMsIE5VTEwpOw0KPj4gKwlpZiAoSVNfRVJS KGN0eC0+YmxfZGV2KSkgew0KPj4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIg YmFja2xpZ2h0IGRldmljZVxuIik7DQo+PiArCQlyZXR1cm4gUFRSX0VSUihjdHgtPmJsX2Rldik7 DQo+PiArCX0NCj4+ICsNCj4+ICsJY3R4LT5ibF9kZXYtPnByb3BzLm1heF9icmlnaHRuZXNzID0g T1RNODAwOUFfQkFDS0xJR0hUX01BWDsNCj4+ICsJY3R4LT5ibF9kZXYtPnByb3BzLmJyaWdodG5l c3MgPSBPVE04MDA5QV9CQUNLTElHSFRfREVGQVVMVDsNCj4+ICsJY3R4LT5ibF9kZXYtPnByb3Bz LnBvd2VyID0gRkJfQkxBTktfUE9XRVJET1dOOw0KPj4gKwljdHgtPmJsX2Rldi0+cHJvcHMudHlw ZSA9IEJBQ0tMSUdIVF9SQVc7DQo+PiArDQo+PiArCWRybV9wYW5lbF9hZGQoJmN0eC0+cGFuZWwp Ow0KPj4gKw0KPj4gKwlyZXQgPSBtaXBpX2RzaV9hdHRhY2goZHNpKTsNCj4+ICsJaWYgKHJldCA8 IDApIHsNCj4+ICsJCWRldl9lcnIoZGV2LCAibWlwaV9kc2lfYXR0YWNoIGZhaWxlZC4gSXMgaG9z dCByZWFkeT9cbiIpOw0KPj4gKwkJZHJtX3BhbmVsX3JlbW92ZSgmY3R4LT5wYW5lbCk7DQo+PiAr CQliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoY3R4LT5ibF9kZXYpOw0KPj4gKwkJcmV0dXJu IHJldDsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlEUk1fSU5GTyhEUlZfTkFNRSAiX3BhbmVsICV1eCV1 QCV1ICV1YnBwIGRzaSAldWRsIC0gcmVhZHlcbiIsDQo+PiArCQkgZGVmYXVsdF9tb2RlLmhkaXNw bGF5LCBkZWZhdWx0X21vZGUudmRpc3BsYXksDQo+PiArCQkgZGVmYXVsdF9tb2RlLnZyZWZyZXNo LA0KPj4gKwkJIG1pcGlfZHNpX3BpeGVsX2Zvcm1hdF90b19icHAoZHNpLT5mb3JtYXQpLCBkc2kt PmxhbmVzKTsNCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBp bnQgb3RtODAwOWFfcmVtb3ZlKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkNCj4+ICt7DQo+ PiArCXN0cnVjdCBvdG04MDA5YSAqY3R4ID0gbWlwaV9kc2lfZ2V0X2RydmRhdGEoZHNpKTsNCj4+ ICsNCj4+ICsJbWlwaV9kc2lfZGV0YWNoKGRzaSk7DQo+PiArCWRybV9wYW5lbF9yZW1vdmUoJmN0 eC0+cGFuZWwpOw0KPj4gKw0KPj4gKwliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoY3R4LT5i bF9kZXYpOw0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGNv bnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb3Jpc2V0ZWNoX290bTgwMDlhX29mX21hdGNoW10gPSB7 DQo+PiArCXsgLmNvbXBhdGlibGUgPSAib3Jpc2V0ZWNoLG90bTgwMDlhIiB9LA0KPj4gKwl7IH0N Cj4+ICt9Ow0KPj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9yaXNldGVjaF9vdG04MDA5YV9v Zl9tYXRjaCk7DQo+PiArDQo+PiArc3RhdGljIHN0cnVjdCBtaXBpX2RzaV9kcml2ZXIgb3Jpc2V0 ZWNoX290bTgwMDlhX2RyaXZlciA9IHsNCj4+ICsJLnByb2JlICA9IG90bTgwMDlhX3Byb2JlLA0K Pj4gKwkucmVtb3ZlID0gb3RtODAwOWFfcmVtb3ZlLA0KPj4gKwkuZHJpdmVyID0gew0KPj4gKwkJ Lm5hbWUgPSBEUlZfTkFNRSAiX3BhbmVsIiwNCj4+ICsJCS5vZl9tYXRjaF90YWJsZSA9IG9yaXNl dGVjaF9vdG04MDA5YV9vZl9tYXRjaCwNCj4+ICsJfSwNCj4+ICt9Ow0KPj4gK21vZHVsZV9taXBp X2RzaV9kcml2ZXIob3Jpc2V0ZWNoX290bTgwMDlhX2RyaXZlcik7DQo+PiArDQo+PiArTU9EVUxF X0FVVEhPUigiUGhpbGlwcGUgQ29ybnUgPHBoaWxpcHBlLmNvcm51QHN0LmNvbT4iKTsNCj4+ICtN T0RVTEVfQVVUSE9SKCJZYW5uaWNrIEZlcnRyZSA8eWFubmljay5mZXJ0cmVAc3QuY29tPiIpOw0K Pj4gK01PRFVMRV9ERVNDUklQVElPTigiRFJNIGRyaXZlciBmb3IgT3Jpc2UgVGVjaCBPVE04MDA5 QSBNSVBJIERTSSBwYW5lbCIpOw0KPj4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsNCj4gDQo+ IApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2 ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK