From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrzej Hajda Subject: Re: [PATCH v6 1/4] drm/bridge: add support for sn65dsi86 bridge driver Date: Tue, 15 May 2018 15:53:32 +0200 Message-ID: <658f5b66-cda3-59cd-a795-45dba3d7c7d5@samsung.com> References: <1526363564-13823-1-git-send-email-spanda@codeaurora.org> <1526363564-13823-2-git-send-email-spanda@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1526363564-13823-2-git-send-email-spanda@codeaurora.org> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Sandeep Panda , dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, devicetree@vger.kernel.org Cc: hoegsberg@chromium.org, chandanu@codeaurora.org, ryadav@codeaurora.org, abhinavk@codeaurora.org List-Id: devicetree@vger.kernel.org T24gMTUuMDUuMjAxOCAwNzo1MiwgU2FuZGVlcCBQYW5kYSB3cm90ZToKPiBBZGQgc3VwcG9ydCBm b3IgVEkncyBzbjY1ZHNpODYgZHNpMmVkcCBicmlkZ2UgY2hpcC4KPiBUaGUgY2hpcCBjb252ZXJ0 cyBEU0kgdHJhbnNtaXR0ZWQgc2lnbmFsIHRvIGVEUCBzaWduYWwsCj4gd2hpY2ggaXMgZmVkIHRv IHRoZSBjb25uZWN0ZWQgZURQIHBhbmVsLgo+Cj4gVGhpcyBjaGlwIGNhbiBiZSBjb250cm9sbGVk IHZpYSBlaXRoZXIgaTJjIGludGVyZmFjZSBvcgo+IGRzaSBpbnRlcmZhY2UuIEN1cnJlbnRseSBp biBkcml2ZXIgYWxsIHRoZSBjb250cm9sIHJlZ2lzdGVycwo+IGFyZSBiZWluZyBhY2Nlc3NlZCB0 aHJvdWdoIGkyYyBpbnRlcmZhY2Ugb25seS4KPiBBbHNvIGFzIG9mIG5vdyBIUEQgc3VwcG9ydCBo YXMgbm90IGJlZW4gYWRkZWQgdG8gYnJpZGdlCj4gY2hpcCBkcml2ZXIuCj4KPiBDaGFuZ2VzIGlu IHYxOgo+ICAtIFNwbGl0IHRoZSBkdC1iaW5kaW5ncyBhbmQgdGhlIGRyaXZlciBzdXBwb3J0IGlu dG8gc2VwYXJhdGUgcGF0Y2hlcwo+ICAgIChBbmRyemVqIEhhamRhKS4KPiAgLSBVc2Ugb2YgZ3Bp b2QgQVBJcyB0byBwYXJzZSBhbmQgY29uZmlndXJlIGdwaW9zIGluc3RlYWQgb2Ygb2Jzb2xldGUg b25lcwo+ICAgIChBbmRyemVqIEhhamRhKS4KPiAgLSBVc2UgbWFjcm9zIHRvIGRlZmluZSB0aGUg cmVnaXN0ZXIgb2Zmc2V0cyAoQW5kcnplaiBIYWpkYSkuCj4KPiBDaGFuZ2VzIGluIHYyOgo+ICAt IFNlcGFyYXRlIG91dCBlZHAgcGFuZWwgc3BlY2lmaWMgSFcgcmVzb3VyY2UgaGFuZGxpbmcgZnJv bSBicmlkZ2UKPiAgICBkcml2ZXIgYW5kIGNyZWF0ZSBhIHNlcGFyYXRlIGVkcCBwYW5lbCBkcml2 ZXJzIHRvIGhhbmRsZSBwYW5lbAo+ICAgIHNwZWNpZmljIG1vZGUgaW5mb3JtYXRpb24gYW5kIEhX IHJlc291cmNlcyAoU2VhbiBQYXVsKS4KPiAgLSBSZXBsYWNlIHByXyogQVBJcyB0byBEUk1fKiBB UElzIHRvIGxvZyBlcnJvciBvciBkZWJ1ZyBpbmZvcm1hdGlvbgo+ICAgIChTZWFuIFBhdWwpLgo+ ICAtIFJlbW92ZSBzb21lIG9mIHRoZSB1bm5lY2Vzc2FyeSBzdHJ1Y3R1cmUvdmFyaWFibGUgZnJv bSBkcml2ZXIgKFNlYW4KPiAgICBQYXVsKS4KPiAgLSBSZW5hbWUgdGhlIGZ1bmN0aW9uIGFuZCBz dHJ1Y3R1cmUgcHJlZml4ICJzbjY1ZHNpODYiIHRvICJ0aV9zbl9icmlkZ2UiCj4gICAgKFNlYW4g UGF1bCAvIFJvYiBIZXJyaW5nKS4KPiAgLSBSZW1vdmUgbW9zdCBvZiB0aGUgaGFyZC1jb2Rpbmcg YW5kIG1vZGlmaWVkIHRoZSBicmlkZ2UgaW5pdCBzZXF1ZW5jZQo+ICAgIGJhc2VkIG9uIGN1cnJl bnQgbW9kZSAoU2VhbiBQYXVsKS4KPiAgLSBSZW1vdmUgdGhlIGV4aXN0aW5nIGZ1bmN0aW9uIHRv IHJldHJpZXZlIHRoZSBFRElEIGRhdGEgYW5kCj4gICAgaW1wbGVtZW50ZWQgdGhpcyBhcyBhbiBp MmNfYWRhcHRlciBhbmQgdXNlIGRybV9nZXRfZWRpZCgpIChTZWFuIFBhdWwpLgo+ICAtIFJlbW92 ZSB0aGUgZHVtbXkgaXJxIGhhbmRsZXIgaW1wbGVtZW50YXRpb24sIHdpbGwgYWRkIGJhY2sgdGhl Cj4gICAgcHJvcGVyIGlycSBoYW5kbGluZyBsYXRlciAoU2VhbiBQYXVsKS4KPiAgLSBDYXB0dXJl IHRoZSByZXF1aXJlZCBlbmFibGUgZ3Bpb3MgaW4gYSBzaW5nbGUgYXJyYXkgYmFzZWQgb24gZHQg ZW50cnkKPiAgICBpbnN0ZWFkIG9mIGhhdmluZyBpbmRpdmlkdWFsIGRlc2NyaXB0b3IgZm9yIGVh Y2ggZ3BpbyAoU2VhbiBQYXVsKS4KPgo+IENoYW5nZXMgaW4gdjM6Cj4gIC0gUmVtb3ZlIHVzYWdl IG9mIGlycV9ncGlvIGFuZCByZXBsYWNlIGl0IGFzICJpbnRlcnJ1cHRzIiBwcm9wZXJ0eSAoUm9i Cj4gICAgSGVycmluZykuCj4gIC0gUmVtb3ZlIHRoZSB1bm5lY2Vzc2FyeSBoZWFkZXIgZmlsZSBp bmNsdXNpb25zIChTZWFuIFBhdWwpLgo+ICAtIFJlYXJyYW5nZSB0aGUgaGVhZGVyIGZpbGVzIGlu IGFscGhhYmV0aWNhbCBvcmRlciAoU2VhbiBQYXVsKS4KPiAgLSBVc2UgcmVnbWFwIGludGVyZmFj ZSB0byBwZXJmb3JtIGkyYyB0cmFuc2FjdGlvbnMuCj4gIC0gVXBkYXRlIENvcHlyaWdodC9MaWNl bnNlIGZpZWxkIGFuZCBhZGRyZXNzIG90aGVyIHJldmlldyBjb21tZW50cwo+ICAgIChKb3JkYW4g Q3JvdXNlKS4KPgo+IENoYW5nZXMgaW4gdjQ6Cj4gIC0gVXBkYXRlIExpY2Vuc2UvQ29weXJpZ2h0 IChTZWFuIFBhdWwpLgo+ICAtIEFkZCBLY29uZmlnIGFuZCBNYWtlZmlsZSBjaGFuZ2VzIChTZWFu IFBhdWwpLgo+ICAtIERyb3AgaTJjIGdwaW8gaGFuZGxpbmcgZnJvbSB0aGlzIGJyaWRnZSBkcml2 ZXIsIHNpbmNlIGkyYyBzZGEvc2NsIGdwaW9zCj4gICAgd2lsbCBiZSBoYW5kbGVkIGJ5IGkyYyBt YXN0ZXIuCj4gIC0gVXBkYXRlIHJlcXVpcmVkIHN1cHBsaWVzIG5hbWVzLgo+ICAtIFJlbW92ZSB1 bm5lY2Vzc2FyeSBnb3RvIHN0YXRlbWVudHMgKFNlYW4gUGF1bCkuCj4gIC0gQWRkIG11dGV4IGxv Y2sgdG8gcG93ZXJfY3RybCBBUEkgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIChTZWFuCj4gICAg UGF1bCkuCj4gIC0gQWRkIHN1cHBvcnQgdG8gcGFyc2UgcmVmZXJlbmNlIGNsayBmcmVxdWVuY3kg ZnJvbSBkdChvcHRpb25hbCkuCj4gIC0gVXBkYXRlIHRoZSBicmlkZ2UgY2hpcCBlbmFibGUvZGlz YWJsZSBzZXF1ZW5jZS4KPgo+IENoYW5nZXMgaW4gdjU6Cj4gIC0gRml4ZWQgS2J1aWxkIHRlc3Qg c2VydmljZSByZXBvcnRlZCB3YXJuaW5ncy4KPgo+IENoYW5nZXMgaW4gdjY6Cj4gIC0gVXNlIFBN IHJ1bnRpbWUgYmFzZWQgcmVmLWNvdW50aW5nIGluc3RlYWQgb2YgbG9jYWwgcmVmX2NvdW50IG1l Y2hhbmlzbQo+ICAgIChTdGVwaGVuIEJveWQpLgo+ICAtIENsZWFuIHVwIHNvbWUgZGVidWcgbG9n cyBhbmQgaW5kZW50YXRpb25zIChTZWFuIFBhdWwpLgo+ICAtIFNpbXBsaWZ5IGRwIHJhdGUgY2Fs Y3VsYXRpb24gKFNlYW4gUGF1bCkuCj4gIC0gQWRkIHN1cHBvcnQgdG8gY29uZmlndXJlIHJlZmNs ayBiYXNlZCBvbiBpbnB1dCBSRUZDTEsgcGluIG9yIERBQ1AvTgo+ICAgIHBpbiAoU3RlcGhlbiBC b3lkKS4KPgo+IFNpZ25lZC1vZmYtYnk6IFNhbmRlZXAgUGFuZGEgPHNwYW5kYUBjb2RlYXVyb3Jh Lm9yZz4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnICAgICAgICB8ICAg OSArCj4gIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUgICAgICAgfCAgIDEgKwo+ICBk cml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jIHwgNzY2ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKPiAgMyBmaWxlcyBjaGFuZ2VkLCA3NzYgaW5zZXJ0aW9ucygr KQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNp ODYuYwo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZyBiL2Ry aXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZwo+IGluZGV4IDNiOTlkNWEuLjgxNTMxNTAgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnCj4gQEAgLTEwOCw2ICsxMDgsMTUgQEAgY29uZmlnIERS TV9USV9URlA0MTAKPiAgCS0tLWhlbHAtLS0KPiAgCSAgVGV4YXMgSW5zdHJ1bWVudHMgVEZQNDEw IERWSS9IRE1JIFRyYW5zbWl0dGVyIGRyaXZlcgo+ICAKPiArY29uZmlnIERSTV9USV9TTjY1RFNJ ODYKPiArCXRyaXN0YXRlICJUSSBTTjY1RFNJODYgRFNJIHRvIGVEUCBicmlkZ2UiCj4gKwlkZXBl bmRzIG9uIE9GCj4gKwlzZWxlY3QgRFJNX0tNU19IRUxQRVIKPiArCXNlbGVjdCBSRUdNQVBfSTJD Cj4gKwlzZWxlY3QgRFJNX1BBTkVMCj4gKwktLS1oZWxwLS0tCj4gKwkgIFRleGFzIEluc3RydW1l bnRzIFNONjVEU0k4NiBEU0kgdG8gZURQIEJyaWRnZSBkcml2ZXIKPiArCj4gIHNvdXJjZSAiZHJp dmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9LY29uZmlnIgo+ICAKPiAgc291cmNlICJkcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL2Fkdjc1MTEvS2NvbmZpZyIKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZp bGUKPiBpbmRleCAzNzNlYjI4Li4zNzExYmU4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxl Cj4gQEAgLTEyLDQgKzEyLDUgQEAgb2JqLSQoQ09ORklHX0RSTV9UT1NISUJBX1RDMzU4NzY3KSAr PSB0YzM1ODc2Ny5vCj4gIG9iai0kKENPTkZJR19EUk1fQU5BTE9HSVhfRFApICs9IGFuYWxvZ2l4 Lwo+ICBvYmotJChDT05GSUdfRFJNX0kyQ19BRFY3NTExKSArPSBhZHY3NTExLwo+ICBvYmotJChD T05GSUdfRFJNX1RJX1RGUDQxMCkgKz0gdGktdGZwNDEwLm8KPiArb2JqLSQoQ09ORklHX0RSTV9U SV9TTjY1RFNJODYpICs9IHRpLXNuNjVkc2k4Ni5vCj4gIG9iai15ICs9IHN5bm9wc3lzLwo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jIGIvZHJpdmVy cy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODYuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMC4uMWQzZTU0OQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jCj4gQEAgLTAsMCArMSw3NjYgQEAKPiArLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiArLyoKPiArICogQ29weXJpZ2h0IChjKSAy MDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICovCj4g Kwo+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+ Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9k cm1fY3J0Y19oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KPiArI2lu Y2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+ICsjaW5j bHVkZSA8bGludXgvZ3Bpby5oPgo+ICsjaW5jbHVkZSA8bGludXgvaTJjLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9vZl9ncGlvLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPgo+ICsjaW5j bHVkZSA8bGludXgvcG1fcnVudGltZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KPiArCj4gKyNkZWZpbmUgU05f QlJJREdFX1JFVklTSU9OX0lEIDB4Mgo+ICsKPiArLyogTGluayBUcmFpbmluZyBzcGVjaWZpYyBy ZWdpc3RlcnMgKi8KPiArI2RlZmluZSBTTl9ERVZJQ0VfUkVWX1JFRwkJCTB4MDgKPiArI2RlZmlu ZSBTTl9IUERfRElTQUJMRV9SRUcJCQkweDVDCj4gKyNkZWZpbmUgU05fUkVGQ0xLX0ZSRVFfUkVH CQkJMHgwQQo+ICsjZGVmaW5lIFNOX0RTSV9MQU5FU19SRUcJCQkweDEwCj4gKyNkZWZpbmUgU05f RFNJQV9DTEtfRlJFUV9SRUcJCQkweDEyCj4gKyNkZWZpbmUgU05fRU5IX0ZSQU1FX1JFRwkJCTB4 NUEKPiArI2RlZmluZSBTTl9TU0NfQ09ORklHX1JFRwkJCTB4OTMKPiArI2RlZmluZSBTTl9EQVRB UkFURV9DT05GSUdfUkVHCQkJMHg5NAo+ICsjZGVmaW5lIFNOX1BMTF9FTkFCTEVfUkVHCQkJMHgw RAo+ICsjZGVmaW5lIFNOX1NDUkFNQkxFX0NPTkZJR19SRUcJCQkweDk1Cj4gKyNkZWZpbmUgU05f QVVYX1dEQVRBMF9SRUcJCQkweDY0Cj4gKyNkZWZpbmUgU05fQVVYX0FERFJfMTlfMTZfUkVHCQkJ MHg3NAo+ICsjZGVmaW5lIFNOX0FVWF9BRERSXzE1XzhfUkVHCQkJMHg3NQo+ICsjZGVmaW5lIFNO X0FVWF9BRERSXzdfMF9SRUcJCQkweDc2Cj4gKyNkZWZpbmUgU05fQVVYX0xFTkdUSF9SRUcJCQkw eDc3Cj4gKyNkZWZpbmUgU05fQVVYX0NNRF9SRUcJCQkJMHg3OAo+ICsjZGVmaW5lIFNOX01MX1RY X01PREVfUkVHCQkJMHg5Ngo+ICsvKiB2aWRlbyBjb25maWcgc3BlY2lmaWMgcmVnaXN0ZXJzICov Cj4gKyNkZWZpbmUgU05fQ0hBX0FDVElWRV9MSU5FX0xFTkdUSF9MT1dfUkVHCTB4MjAKPiArI2Rl ZmluZSBTTl9DSEFfQUNUSVZFX0xJTkVfTEVOR1RIX0hJR0hfUkVHCTB4MjEKPiArI2RlZmluZSBT Tl9DSEFfVkVSVElDQUxfRElTUExBWV9TSVpFX0xPV19SRUcJMHgyNAo+ICsjZGVmaW5lIFNOX0NI QV9WRVJUSUNBTF9ESVNQTEFZX1NJWkVfSElHSF9SRUcJMHgyNQo+ICsjZGVmaW5lIFNOX0NIQV9I U1lOQ19QVUxTRV9XSURUSF9MT1dfUkVHCTB4MkMKPiArI2RlZmluZSBTTl9DSEFfSFNZTkNfUFVM U0VfV0lEVEhfSElHSF9SRUcJMHgyRAo+ICsjZGVmaW5lIFNOX0NIQV9WU1lOQ19QVUxTRV9XSURU SF9MT1dfUkVHCTB4MzAKPiArI2RlZmluZSBTTl9DSEFfVlNZTkNfUFVMU0VfV0lEVEhfSElHSF9S RUcJMHgzMQo+ICsjZGVmaW5lIFNOX0NIQV9IT1JJWk9OVEFMX0JBQ0tfUE9SQ0hfUkVHCTB4MzQK PiArI2RlZmluZSBTTl9DSEFfVkVSVElDQUxfQkFDS19QT1JDSF9SRUcJCTB4MzYKPiArI2RlZmlu ZSBTTl9DSEFfSE9SSVpPTlRBTF9GUk9OVF9QT1JDSF9SRUcJMHgzOAo+ICsjZGVmaW5lIFNOX0NI QV9WRVJUSUNBTF9GUk9OVF9QT1JDSF9SRUcJCTB4M0EKPiArI2RlZmluZSBTTl9EQVRBX0ZPUk1B VF9SRUcJCQkweDVCCj4gKwo+ICsjZGVmaW5lIE1JTl9EU0lfQ0xLX0ZSRVFfTUhaCTQwCj4gKwo+ ICsvKiBmdWRnZSBmYWN0b3IgcmVxdWlyZWQgdG8gYWNjb3VudCBmb3IgOGIvMTBiIGVuY29kaW5n ICovCj4gKyNkZWZpbmUgRFBfQ0xLX0ZVREdFX05VTQkxMAo+ICsjZGVmaW5lIERQX0NMS19GVURH RV9ERU4JOAo+ICsKPiArI2RlZmluZSBEUFBMTF9DTEtfU1JDX1JFRkNMSwkwCj4gKyNkZWZpbmUg RFBQTExfQ0xLX1NSQ19EU0lDTEsJMQo+ICsKPiArI2RlZmluZSBTTl9EU0lBX1JFRkNMS19PRkZT RVQJMQo+ICsjZGVmaW5lIFNOX0RTSUFfTEFORV9PRkZTRVQJMwo+ICsjZGVmaW5lIFNOX0RQX0xB TkVfT0ZGU0VUCTQKPiArI2RlZmluZSBTTl9EUF9EQVRBX1JBVEVfT0ZGU0VUCTUKPiArI2RlZmlu ZSBTTl9USU1JTkdfSElHSF9PRkZTRVQJOAo+ICsKPiArI2RlZmluZSBTTl9FTkFCTEVfVklEX1NU UkVBTV9CSVQJQklUKDMpCj4gKyNkZWZpbmUgU05fRFNJQV9OVU1fTEFORVNfQklUUwkJKEJJVCg0 KSB8IEJJVCgzKSkKPiArI2RlZmluZSBTTl9EUF9OVU1fTEFORVNfQklUUwkJKEJJVCg1KSB8IEJJ VCg0KSkKPiArI2RlZmluZSBTTl9EUF9EQVRBX1JBVEVfQklUUwkJKEJJVCg3KSB8IEJJVCg2KSB8 IEJJVCg1KSkKPiArI2RlZmluZSBTTl9IUERfRElTQUJMRV9CSVQJCUJJVCgwKQo+ICsKPiArc3Ry dWN0IHRpX3NuX2JyaWRnZSB7Cj4gKwlzdHJ1Y3QgZGV2aWNlCQkJKmRldjsKPiArCXN0cnVjdCBy ZWdtYXAJCQkqcmVnbWFwOwoKSSBoYXZlIG5vdCBzcG90dGVkIHdobyBhZHZpc2VkIHlvdSB0byB1 c2UgcmVnbWFwLCBJIHRoaW5rIHVubGVzcyB5b3UKc2hhcmUgaGFyZHdhcmUgYmV0d2VlbiBtdWx0 aXBsZSBkcml2ZXJzIGl0IGlzIGFuIG92ZXJraWxsLgpBcmUgdGhlcmUgYW55IGZlYXR1cmVzIG9m IHRoaXMgaW50ZXJmYWNlIHRvIHVzZSBpdCBvdmVyIGkyYz8KCj4gKwlzdHJ1Y3QgZHJtX2JyaWRn ZQkJYnJpZGdlOwo+ICsJc3RydWN0IGRybV9jb25uZWN0b3IJCWNvbm5lY3RvcjsKPiArCXN0cnVj dCBkZXZpY2Vfbm9kZQkJKmhvc3Rfbm9kZTsKPiArCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UJCSpk c2k7Cj4gKwlzdHJ1Y3QgY2xrCQkJKnJlZmNsazsKPiArCXN0cnVjdCBkcm1fcGFuZWwJCSpwYW5l bDsKPiArCXN0cnVjdCBncGlvX2Rlc2MJCSplbmFibGVfZ3BpbzsKPiArCXVuc2lnbmVkIGludAkJ CW51bV9zdXBwbGllczsKPiArCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhCSpzdXBwbGllczsK PiArCXN0cnVjdCBpMmNfYWRhcHRlcgkJKmRkYzsKPiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl CQljdXJyX21vZGU7CgpJIHRoaW5rIHlvdSBjYW4gZHJvcCB0aGlzIGZpZWxkLCBjdXJyZW50IG1v ZGUgaXMgYWx3YXlzIGF2YWlsYWJsZSB2aWE6CgpwZGF0YS0+YnJpZGdlLmVuY29kZXIuY3J0Yy0+ c3RhdGUtPmFkanVzdGVkX21vZGU7CgoKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg cmVnbWFwX3JhbmdlIHRpX3NuX2JyaWRnZV92b2xhdGlsZV9yYW5nZXNbXSA9IHsKPiArCXsgLnJh bmdlX21pbiA9IDAsIC5yYW5nZV9tYXggPSAweGZmIH0sCj4gK307Cj4gKwo+ICtzdGF0aWMgY29u c3Qgc3RydWN0IHJlZ21hcF9hY2Nlc3NfdGFibGUgdGlfc25fYnJpZGdlX3ZvbGF0aWxlX3RhYmxl ID0gewo+ICsJLnllc19yYW5nZXMgPSB0aV9zbl9icmlkZ2Vfdm9sYXRpbGVfcmFuZ2VzLAo+ICsJ Lm5feWVzX3JhbmdlcyA9IEFSUkFZX1NJWkUodGlfc25fYnJpZGdlX3ZvbGF0aWxlX3Jhbmdlcyks Cj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgdGlfc25fYnJp ZGdlX3JlZ21hcF9jb25maWcgPSB7Cj4gKwkucmVnX2JpdHMgPSA4LAo+ICsJLnZhbF9iaXRzID0g OCwKPiArCS52b2xhdGlsZV90YWJsZSA9ICZ0aV9zbl9icmlkZ2Vfdm9sYXRpbGVfdGFibGUsCj4g KwkuY2FjaGVfdHlwZSA9IFJFR0NBQ0hFX05PTkUsCj4gK307Cj4gKwo+ICsjaWZkZWYgQ09ORklH X1BNCgpQbGVhc2UgbWFyayBQTSBjYWxsYmFja3Mgd2l0aCBfX21heWJlX3VudXNlZCBpbnN0ZWFk IGlmIGNvbmRpdGlvbmFsIG1hY3Jvcy4KCj4gK3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX3Jlc3Vt ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRh ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlyZXQgPSBy ZWd1bGF0b3JfYnVsa19lbmFibGUocGRhdGEtPm51bV9zdXBwbGllcywgcGRhdGEtPnN1cHBsaWVz KTsKPiArCWlmIChyZXQpIHsKPiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBlbmFibGUgc3VwcGxp ZXMgJWRcbiIsIHJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlncGlvZF9zZXRf dmFsdWUocGRhdGEtPmVuYWJsZV9ncGlvLCAxKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikK PiArewo+ICsJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2 KTsKPiArCWludCByZXQgPSAwOwo+ICsKPiArCWdwaW9kX3NldF92YWx1ZShwZGF0YS0+ZW5hYmxl X2dwaW8sIDApOwo+ICsKPiArCXJldCA9IHJlZ3VsYXRvcl9idWxrX2Rpc2FibGUocGRhdGEtPm51 bV9zdXBwbGllcywgcGRhdGEtPnN1cHBsaWVzKTsKPiArCWlmIChyZXQpCj4gKwkJRFJNX0VSUk9S KCJmYWlsZWQgdG8gZGlzYWJsZSBzdXBwbGllcyAlZFxuIiwgcmV0KTsKPiArCj4gKwlyZXR1cm4g cmV0Owo+ICt9Cj4gKyNlbmRpZgo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3Bz IHRpX3NuX2JyaWRnZV9wbV9vcHMgPSB7Cj4gKwlTRVRfUlVOVElNRV9QTV9PUFModGlfc25fYnJp ZGdlX3N1c3BlbmQsIHRpX3NuX2JyaWRnZV9yZXN1bWUsIE5VTEwpCj4gK307Cj4gKwo+ICsvKiBD b25uZWN0b3IgZnVuY3MgKi8KPiArc3RhdGljIHN0cnVjdCB0aV9zbl9icmlkZ2UgKgo+ICtjb25u ZWN0b3JfdG9fdGlfc25fYnJpZGdlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCj4g K3sKPiArCXJldHVybiBjb250YWluZXJfb2YoY29ubmVjdG9yLCBzdHJ1Y3QgdGlfc25fYnJpZGdl LCBjb25uZWN0b3IpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9jb25uZWN0 b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCj4gK3sKPiArCXN0 cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gY29ubmVjdG9yX3RvX3RpX3NuX2JyaWRnZShjb25u ZWN0b3IpOwo+ICsJc3RydWN0IGRybV9wYW5lbCAqcGFuZWwgPSBwZGF0YS0+cGFuZWw7Cj4gKwlz dHJ1Y3QgZWRpZCAqZWRpZDsKPiArCXUzMiBudW1fbW9kZXM7Cj4gKwo+ICsJaWYgKHBhbmVsKSB7 Cj4gKwkJRFJNX0RFQlVHX0tNUygiZ2V0IG1vZGUgZnJvbSBjb25uZWN0ZWQgZHJtX3BhbmVsXG4i KTsKPiArCQlyZXR1cm4gZHJtX3BhbmVsX2dldF9tb2RlcyhwYW5lbCk7Cj4gKwl9Cj4gKwo+ICsJ aWYgKCFwZGF0YS0+ZGRjKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXBtX3J1bnRpbWVfZ2V0X3N5 bmMocGRhdGEtPmRldik7Cj4gKwllZGlkID0gZHJtX2dldF9lZGlkKGNvbm5lY3RvciwgcGRhdGEt PmRkYyk7Cj4gKwlwbV9ydW50aW1lX3B1dF9zeW5jKHBkYXRhLT5kZXYpOwo+ICsJaWYgKCFlZGlk KQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9w cm9wZXJ0eShjb25uZWN0b3IsIGVkaWQpOwo+ICsJbnVtX21vZGVzID0gZHJtX2FkZF9lZGlkX21v ZGVzKGNvbm5lY3RvciwgZWRpZCk7Cj4gKwlrZnJlZShlZGlkKTsKPiArCj4gKwlyZXR1cm4gbnVt X21vZGVzOwo+ICt9Cj4gKwo+ICtzdGF0aWMgZW51bSBkcm1fbW9kZV9zdGF0dXMKPiArdGlfc25f YnJpZGdlX2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IsCj4gKwkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCj4gK3sKPiArCS8q IG1heGltdW0gc3VwcG9ydGVkIHJlc29sdXRpb24gaXMgNEsgYXQgNjAgZnBzICovCj4gKwlpZiAo bW9kZS0+Y2xvY2sgPiA1OTQwMDApCj4gKwkJcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsKPiArCj4g KwlyZXR1cm4gTU9ERV9PSzsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9y X2hlbHBlcl9mdW5jcyB0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKPiAr CS5nZXRfbW9kZXMgPSB0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2dldF9tb2RlcywKPiArCS5tb2Rl X3ZhbGlkID0gdGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkLAo+ICt9Owo+ICsKPiAr c3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKPiArdGlfc25fYnJpZGdlX2Nvbm5lY3Rv cl9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBmb3JjZSkKPiAr ewo+ICsJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEgPSBjb25uZWN0b3JfdG9fdGlfc25fYnJp ZGdlKGNvbm5lY3Rvcik7Cj4gKwo+ICsJLyoqCj4gKwkgKiBUT0RPOiBDdXJyZW50bHkgaWYgZHJt X3BhbmVsIGlzIHByZXNlbnQsIHRoZW4gYWx3YXlzCj4gKwkgKiByZXR1cm4gdGhlIHN0YXR1cyBh cyBjb25uZWN0ZWQuIE5lZWQgdG8gYWRkIHN1cHBvcnQgdG8gZGV0ZWN0Cj4gKwkgKiBkZXZpY2Ug c3RhdGUgZm9yIG5vIHBhbmVsKGhvdCBwbHVnZ2FibGUpIHNjZW5hcmlvcy4KPiArCSAqLwo+ICsJ aWYgKHBkYXRhLT5wYW5lbCkKPiArCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7 Cj4gKwllbHNlCj4gKwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfdW5rbm93bjsKPiArfQo+ICsK PiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIHRpX3NuX2JyaWRnZV9j b25uZWN0b3JfZnVuY3MgPSB7Cj4gKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2lu Z2xlX2Nvbm5lY3Rvcl9tb2RlcywKPiArCS5kZXRlY3QgPSB0aV9zbl9icmlkZ2VfY29ubmVjdG9y X2RldGVjdCwKPiArCS5kZXN0cm95ID0gZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwLAo+ICsJLnJlc2V0 ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAo+ICsJLmF0b21pY19kdXBsaWNh dGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlLAo+ ICsJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rl c3Ryb3lfc3RhdGUsCj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHRpX3NuX2JyaWRnZSAqYnJp ZGdlX3RvX3RpX3NuX2JyaWRnZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+ICt7Cj4gKwly ZXR1cm4gY29udGFpbmVyX29mKGJyaWRnZSwgc3RydWN0IHRpX3NuX2JyaWRnZSwgYnJpZGdlKTsK PiArfQo+ICsKPiArc3RhdGljIGludCB0aV9zbl9icmlkZ2VfcmVhZF9kZXZpY2VfcmV2KHN0cnVj dCB0aV9zbl9icmlkZ2UgKnBkYXRhKQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgcmV2ID0gMDsKPiAr CWludCByZXQgPSAwOwo+ICsKPiArCXJldCA9IHJlZ21hcF9yZWFkKHBkYXRhLT5yZWdtYXAsIFNO X0RFVklDRV9SRVZfUkVHLCAmcmV2KTsKPiArCWlmIChyZXQpIHsKPiArCQlEUk1fRVJST1IoIlJl dmlzaW9uIHJlYWQgZmFpbGVkICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4g Kwo+ICsJaWYgKHJldiAhPSBTTl9CUklER0VfUkVWSVNJT05fSUQpIHsKPiArCQlEUk1fRVJST1Io InRpX3NuX2JyaWRnZSByZXZpc2lvbiBpZDogMHgleCBtaXNtYXRjaFxuIiwgcmV2KTsKPiArCQly ZXQgPSAtRUlOVkFMOwo+ICsJfQoKQXJlIHlvdSBzdXJlIGl0IHdvbid0IHdvcmsgd2l0aCBvdGhl ciByZXZpc2lvbnM/Cgo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25z dCBjaGFyICogY29uc3QgdGlfc25fYnJpZGdlX3N1cHBseV9uYW1lc1tdID0gewo+ICsJInZjY2Ei LAo+ICsJInZjYyIsCj4gKwkidmNjaW8iLAo+ICsJInZwbGwiLAo+ICt9Owo+ICsKPiArc3RhdGlj IGludCB0aV9zbl9icmlkZ2VfcGFyc2VfcmVndWxhdG9ycyhzdHJ1Y3QgdGlfc25fYnJpZGdlICpw ZGF0YSkKPiArewo+ICsJdW5zaWduZWQgaW50IGk7Cj4gKwo+ICsJcGRhdGEtPm51bV9zdXBwbGll cyA9IEFSUkFZX1NJWkUodGlfc25fYnJpZGdlX3N1cHBseV9uYW1lcyk7Cj4gKwo+ICsJcGRhdGEt PnN1cHBsaWVzID0gZGV2bV9rY2FsbG9jKHBkYXRhLT5kZXYsIHBkYXRhLT5udW1fc3VwcGxpZXMs Cj4gKwkJCQkgICAgICAgc2l6ZW9mKCpwZGF0YS0+c3VwcGxpZXMpLCBHRlBfS0VSTkVMKTsKCkl0 IHNlZW1zIHRoZXJlIGlzIGNvbnN0YW50IG51bWJlciBvZiBzdXBwbGllcy4gWW91IGNhbiBjb252 ZXJ0IHN1cHBsaWVzCnRvIGFycmF5IGFuZCBhdm9pZCBkeW5hbWljIGFsbG9jYXRpb24uCgo+ICsJ aWYgKCFwZGF0YS0+c3VwcGxpZXMpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJZm9yIChp ID0gMDsgaSA8IHBkYXRhLT5udW1fc3VwcGxpZXM7IGkrKykKPiArCQlwZGF0YS0+c3VwcGxpZXNb aV0uc3VwcGx5ID0gdGlfc25fYnJpZGdlX3N1cHBseV9uYW1lc1tpXTsKPiArCj4gKwlyZXR1cm4g ZGV2bV9yZWd1bGF0b3JfYnVsa19nZXQocGRhdGEtPmRldiwKPiArCQkJCSAgICAgICBwZGF0YS0+ bnVtX3N1cHBsaWVzLCBwZGF0YS0+c3VwcGxpZXMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRp X3NuX2JyaWRnZV9hdHRhY2hfcGFuZWwoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCj4gK3sK PiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFuZWxfbm9kZSwgKnBvcnQsICplbmRwb2ludDsKPiAr Cj4gKwlwZGF0YS0+cGFuZWwgPSBOVUxMOwo+ICsJcG9ydCA9IG9mX2dyYXBoX2dldF9wb3J0X2J5 X2lkKHBkYXRhLT5kZXYtPm9mX25vZGUsIDEpOwo+ICsJaWYgKCFwb3J0KQo+ICsJCXJldHVybiAw Owo+ICsKPiArCWVuZHBvaW50ID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUocG9ydCwgImVuZHBvaW50 Iik7Cj4gKwlvZl9ub2RlX3B1dChwb3J0KTsKPiArCWlmICghZW5kcG9pbnQpIHsKPiArCQlEUk1f RVJST1IoIm5vIG91dHB1dCBlbmRwb2ludCBmb3VuZFxuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7 Cj4gKwl9CgpXaHkgbm90IG9mX2dyYXBoX2dldF9lbmRwb2ludF9ieV9yZWdzID8KCj4gKwo+ICsJ cGFuZWxfbm9kZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJlbnQoZW5kcG9pbnQpOwo+ ICsJb2Zfbm9kZV9wdXQoZW5kcG9pbnQpOwo+ICsJaWYgKCFwYW5lbF9ub2RlKSB7Cj4gKwkJRFJN X0VSUk9SKCJubyBvdXRwdXQgbm9kZSBmb3VuZFxuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4g Kwl9CgpPciBldmVuIG9mX2dyYXBoX2dldF9yZW1vdGVfbm9kZT8KCj4gKwo+ICsJcGRhdGEtPnBh bmVsID0gb2ZfZHJtX2ZpbmRfcGFuZWwocGFuZWxfbm9kZSk7Cj4gKwlvZl9ub2RlX3B1dChwYW5l bF9ub2RlKTsKCk9yIGV2ZW4sIGV2ZW4gZHJtX29mX2ZpbmRfcGFuZWxfb3JfYnJpZGdlID8gOikK Cj4gKwlpZiAoIXBkYXRhLT5wYW5lbCkgewo+ICsJCURSTV9FUlJPUigibm8gcGFuZWwgbm9kZSBm b3VuZFxuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7CgpZb3Ugc2hvdWxkIHByb2JhYmx5IHJldHVy biAtRVBST0JFX0RFRkVSIGhlcmUuCgo+ICsJfQo+ICsJZHJtX3BhbmVsX2F0dGFjaChwZGF0YS0+ cGFuZWwsICZwZGF0YS0+Y29ubmVjdG9yKTsKPiArCURSTV9ERUJVR19LTVMoImRybSBwYW5lbCBh dHRhY2hlZCB0byB0aV9zbl9icmlkZ2VcbiIpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9hdHRhY2goc3RydWN0IGRybV9icmlkZ2UgKmJyaWRn ZSkKPiArewo+ICsJc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3Q7Cj4gKwlzdHJ1Y3QgbWlwaV9k c2lfZGV2aWNlICpkc2k7Cj4gKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90 b190aV9zbl9icmlkZ2UoYnJpZGdlKTsKPiArCWludCByZXQ7Cj4gKwljb25zdCBzdHJ1Y3QgbWlw aV9kc2lfZGV2aWNlX2luZm8gaW5mbyA9IHsgLnR5cGUgPSAidGlfc25fYnJpZGdlIiwKPiArCQkJ CQkJICAgLmNoYW5uZWwgPSAwLAo+ICsJCQkJCQkgICAubm9kZSA9IE5VTEwsCj4gKwkJCQkJCSB9 Owo+ICsKPiArCWlmICghYnJpZGdlLT5lbmNvZGVyKSB7Cj4gKwkJRFJNX0VSUk9SKCJQYXJlbnQg ZW5jb2RlciBvYmplY3Qgbm90IGZvdW5kXG4iKTsKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCX0K PiArCj4gKwkvKiBIUEQgbm90IHN1cHBvcnRlZCAqLwo+ICsJcGRhdGEtPmNvbm5lY3Rvci5wb2xs ZWQgPSAwOwoKWW91IGNhbiBza2lwIHRoaXMgbGluZS4KCj4gKwo+ICsJcmV0ID0gZHJtX2Nvbm5l Y3Rvcl9pbml0KGJyaWRnZS0+ZGV2LCAmcGRhdGEtPmNvbm5lY3RvciwKPiArCQkJCSAmdGlfc25f YnJpZGdlX2Nvbm5lY3Rvcl9mdW5jcywKPiArCQkJCSBEUk1fTU9ERV9DT05ORUNUT1JfZURQKTsK PiArCWlmIChyZXQpIHsKPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byBpbml0aWFsaXplIGNvbm5l Y3RvciB3aXRoIGRybVxuIik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlkcm1fY29u bmVjdG9yX2hlbHBlcl9hZGQoJnBkYXRhLT5jb25uZWN0b3IsCj4gKwkJCQkgJnRpX3NuX2JyaWRn ZV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKPiArCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hf ZW5jb2RlcigmcGRhdGEtPmNvbm5lY3RvciwgYnJpZGdlLT5lbmNvZGVyKTsKPiArCj4gKwlob3N0 ID0gb2ZfZmluZF9taXBpX2RzaV9ob3N0X2J5X25vZGUocGRhdGEtPmhvc3Rfbm9kZSk7Cj4gKwlp ZiAoIWhvc3QpIHsKPiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBmaW5kIGRzaSBob3N0XG4iKTsK PiArCQlyZXR1cm4gLUVOT0RFVjsKCkFnYWluIC1FUFJPQkVfREVGRVIuCgo+ICsJfQo+ICsKPiAr CWRzaSA9IG1pcGlfZHNpX2RldmljZV9yZWdpc3Rlcl9mdWxsKGhvc3QsICZpbmZvKTsKPiArCWlm IChJU19FUlIoZHNpKSkgewo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBkc2kgZGV2 aWNlXG4iKTsKPiArCQlyZXQgPSBQVFJfRVJSKGRzaSk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0K PiArCj4gKwkvKiBUT0RPOiBzZXR0aW5nIHRvIDQgbGFuZXMgYWx3YXlzIGZvciBub3cgKi8KPiAr CWRzaS0+bGFuZXMgPSA0Owo+ICsJZHNpLT5mb3JtYXQgPSBNSVBJX0RTSV9GTVRfUkdCODg4Owo+ ICsJZHNpLT5tb2RlX2ZsYWdzID0gTUlQSV9EU0lfTU9ERV9WSURFTyB8IE1JUElfRFNJX01PREVf VklERU9fU1lOQ19QVUxTRSB8Cj4gKwkJCSAgTUlQSV9EU0lfTU9ERV9FT1RfUEFDS0VUIHwgTUlQ SV9EU0lfTU9ERV9WSURFT19IU0U7Cj4gKwo+ICsJcmV0ID0gbWlwaV9kc2lfYXR0YWNoKGRzaSk7 Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGF0dGFjaCBkc2kg dG8gaG9zdFxuIik7Cj4gKwkJbWlwaV9kc2lfZGV2aWNlX3VucmVnaXN0ZXIoZHNpKTsKPiArCQly ZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXBkYXRhLT5kc2kgPSBkc2k7Cj4gKwo+ICsJRFJNX0RF QlVHX0tNUygidGlfc25fYnJpZGdlIGF0dGFjaGVkIHRvIGRzaVxuIik7Cj4gKwkvKiBhdHRhY2gg cGFuZWwgdG8gYnJpZGdlICovCj4gKwl0aV9zbl9icmlkZ2VfYXR0YWNoX3BhbmVsKHBkYXRhKTsK wqAKRnVuY3Rpb24gY2FuIGZhaWwsIHlvdSBzaG91bGQgaGFuZGxlIGl0LgoKPiArCj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX21vZGVfc2V0KHN0cnVj dCBkcm1fYnJpZGdlICpicmlkZ2UsCj4gKwkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Km1vZGUsCj4gKwkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkal9tb2RlKQo+ICt7 Cj4gKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90b190aV9zbl9icmlkZ2Uo YnJpZGdlKTsKPiArCj4gKwlEUk1fREVCVUcoIm1vZGVfc2V0OiBoZGlzcGxheT0lZCwgdmRpc3Bs YXk9JWQsIHZyZWZyZXNoPSVkLCBjbG9jaz0lZFxuIiwKPiArCQlhZGpfbW9kZS0+aGRpc3BsYXks IGFkal9tb2RlLT52ZGlzcGxheSwKPiArCQlhZGpfbW9kZS0+dnJlZnJlc2gsIGFkal9tb2RlLT5j bG9jayk7Cj4gKwo+ICsJZHJtX21vZGVfY29weSgmcGRhdGEtPmN1cnJfbW9kZSwgYWRqX21vZGUp Owo+ICt9CgpUaGlzIGNhbGxiYWNrIGNhbiBiZSBkcm9wcGVkLCBzZWUgY29tbWVudCBmb3IgY3Vy cl9tb2RlLgoKPiArCj4gK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9kaXNhYmxlKHN0cnVjdCBk cm1fYnJpZGdlICpicmlkZ2UpCj4gK3sKPiArCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0g YnJpZGdlX3RvX3RpX3NuX2JyaWRnZShicmlkZ2UpOwo+ICsJc3RydWN0IGRybV9wYW5lbCAqcGFu ZWwgPSBwZGF0YS0+cGFuZWw7Cj4gKwo+ICsJaWYgKHBhbmVsKSB7Cj4gKwkJZHJtX3BhbmVsX2Rp c2FibGUocGFuZWwpOwo+ICsJCWRybV9wYW5lbF91bnByZXBhcmUocGFuZWwpOwo+ICsJfQo+ICsK PiArCS8qIGRpc2FibGUgdmlkZW8gc3RyZWFtICovCj4gKwlyZWdtYXBfdXBkYXRlX2JpdHMocGRh dGEtPnJlZ21hcCwgU05fRU5IX0ZSQU1FX1JFRywKPiArCQkJICAgU05fRU5BQkxFX1ZJRF9TVFJF QU1fQklULCAwKTsKPiArCS8qIHNlbWkgYXV0byBsaW5rIHRyYWluaW5nIG1vZGUgT0ZGICovCj4g KwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fTUxfVFhfTU9ERV9SRUcsIDApOwo+ICsJ LyogZGlzYWJsZSBEUCBQTEwgKi8KPiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9Q TExfRU5BQkxFX1JFRywgMCk7Cj4gK30KPiArCj4gK3N0YXRpYyB1MzIgdGlfc25fYnJpZGdlX2dl dF9kc2lfZnJlcShzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkKPiArewo+ICsJdTMyIGJpdF9y YXRlX2toeiwgY2xrX2ZyZXFfa2h6Owo+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUg PSAmcGRhdGEtPmN1cnJfbW9kZTsKPiArCj4gKwliaXRfcmF0ZV9raHogPSBtb2RlLT5jbG9jayAq Cj4gKwkJCW1pcGlfZHNpX3BpeGVsX2Zvcm1hdF90b19icHAocGRhdGEtPmRzaS0+Zm9ybWF0KTsK PiArCWNsa19mcmVxX2toeiA9IGJpdF9yYXRlX2toeiAvIChwZGF0YS0+ZHNpLT5sYW5lcyAqIDIp Owo+ICsKPiArCXJldHVybiBjbGtfZnJlcV9raHo7Cj4gK30KPiArCj4gKyNkZWZpbmUgUkVGQ0xL X0xVVF9TSVpFCTUKPiArCj4gKy8qIGNsayBmcmVxdWVuY2llcyBzdXBwb3J0ZWQgYnkgYnJpZGdl IGluIEh6IGluIGNhc2UgZGVyaXZlZCBmcm9tIFJFRkNMSyBwaW4gKi8KPiArc3RhdGljIGNvbnN0 IHUzMiB0aV9zbl9icmlkZ2VfcmVmY2xrX2x1dFtdID0gewo+ICsJMTIwMDAwMDAsCj4gKwkxOTIw MDAwMCwKPiArCTI2MDAwMDAwLAo+ICsJMjcwMDAwMDAsCj4gKwkzODQwMDAwMCwKPiArfTsKPiAr Cj4gKy8qIGNsayBmcmVxdWVuY2llcyBzdXBwb3J0ZWQgYnkgYnJpZGdlIGluIEh6IGluIGNhc2Ug ZGVyaXZlZCBmcm9tIERBQ1AvTiBwaW4gKi8KPiArc3RhdGljIGNvbnN0IHUzMiB0aV9zbl9icmlk Z2VfZHNpY2xrX2x1dFtdID0gewo+ICsJNDY4MDAwMDAwLAo+ICsJMzg0MDAwMDAwLAo+ICsJNDE2 MDAwMDAwLAo+ICsJNDg2MDAwMDAwLAo+ICsJNDYwODAwMDAwLAo+ICt9Owo+ICsKPiArc3RhdGlj IHZvaWQgdGlfc25fYnJpZGdlX3NldF9yZWZjbGsoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEp Cj4gK3sKPiArCWludCBpID0gMDsKPiArCXU4IHJlZmNsa19zcmM7Cj4gKwl1MzIgcmVmY2xrX3Jh dGU7Cj4gKwljb25zdCB1MzIgKnJlZmNsa19sdXQ7Cj4gKwo+ICsJaWYgKHBkYXRhLT5yZWZjbGsp IHsKPiArCQlyZWZjbGtfc3JjID0gRFBQTExfQ0xLX1NSQ19SRUZDTEs7Cj4gKwkJcmVmY2xrX3Jh dGUgPSBjbGtfZ2V0X3JhdGUocGRhdGEtPnJlZmNsayk7Cj4gKwkJcmVmY2xrX2x1dCA9IHRpX3Nu X2JyaWRnZV9yZWZjbGtfbHV0Owo+ICsJCWNsa19wcmVwYXJlX2VuYWJsZShwZGF0YS0+cmVmY2xr KTsKPiArCX0gZWxzZSB7Cj4gKwkJcmVmY2xrX3NyYyA9IERQUExMX0NMS19TUkNfRFNJQ0xLOwo+ ICsJCXJlZmNsa19yYXRlID0gdGlfc25fYnJpZGdlX2dldF9kc2lfZnJlcShwZGF0YSkgKiAxMDAw Owo+ICsJCXJlZmNsa19sdXQgPSB0aV9zbl9icmlkZ2VfZHNpY2xrX2x1dDsKPiArCX0KPiArCj4g KwkvKiBmb3IgaSBlcXVhbHMgdG8gUkVGQ0xLX0xVVF9TSVpFIG1lYW5zIGRlZmF1bHQgZnJlcXVl bmN5ICovCj4gKwlmb3IgKGkgPSAwOyBpIDwgUkVGQ0xLX0xVVF9TSVpFOyBpKyspCj4gKwkJaWYg KHJlZmNsa19sdXRbaV0gPT0gcmVmY2xrX3JhdGUpCj4gKwkJCWJyZWFrOwo+ICsKPiArCXJlZ21h cF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9SRUZDTEtfRlJFUV9SRUcsCj4gKwkJICAgICAocmVm Y2xrX3NyYyB8IChpIDw8IFNOX0RTSUFfUkVGQ0xLX09GRlNFVCkpKTsKPiArfQo+ICsKPiArLyoq Cj4gKyAqIExVVCBpbmRleCBjb3JyZXNwb25kcyB0byByZWdpc3RlciB2YWx1ZSBhbmQKPiArICog TFVUIHZhbHVlcyBjb3JyZXNwb25kcyB0byBkcCBkYXRhIHJhdGUgc3VwcG9ydGVkCj4gKyAqIGJ5 IHRoZSBicmlkZ2UgaW4gTWJwcyB1bml0Lgo+ICsgKi8KPiArc3RhdGljIGNvbnN0IHVuc2lnbmVk IGludCB0aV9zbl9icmlkZ2VfZHBfcmF0ZV9sdXRbXSA9IHsKPiArCTAsIDE2MjAsIDIxNjAsIDI0 MzAsIDI3MDAsIDMyNDAsIDQzMjAsIDU0MDAKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lkIHRpX3Nu X2JyaWRnZV9zZXRfZHNpX2RwX3JhdGUoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCj4gK3sK PiArCXVuc2lnbmVkIGludCBiaXRfcmF0ZV9taHosIGNsa19mcmVxX21oeiwgZHBfcmF0ZV9taHo7 Cj4gKwl1bnNpZ25lZCBpbnQgdmFsID0gMCwgaSA9IDA7Cj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZSA9ICZwZGF0YS0+Y3Vycl9tb2RlOwo+ICsKPiArCS8qIHNldCBEU0lBIGNsayBm cmVxdWVuY3kgKi8KPiArCWJpdF9yYXRlX21oeiA9IChtb2RlLT5jbG9jayAvIDEwMDApICoKPiAr CQkJbWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChwZGF0YS0+ZHNpLT5mb3JtYXQpOwo+ICsJ Y2xrX2ZyZXFfbWh6ID0gYml0X3JhdGVfbWh6IC8gKHBkYXRhLT5kc2ktPmxhbmVzICogMik7Cj4g Kwo+ICsJLyogZm9yIGVhY2ggaW5jcmVtZW50IGluIHZhbCwgZnJlcXVlbmN5IGluY3JlYXNlcyBi eSA1TUh6ICovCj4gKwl2YWwgPSAoTUlOX0RTSV9DTEtfRlJFUV9NSFogLyA1KSArCj4gKwkJKCgo Y2xrX2ZyZXFfbWh6IC0gTUlOX0RTSV9DTEtfRlJFUV9NSFopIC8gNSkgJiAweEZGKTsKPiArCXJl Z21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9EU0lBX0NMS19GUkVRX1JFRywgdmFsKTsKPiAr Cj4gKwkvKiBzZXQgRFAgZGF0YSByYXRlICovCj4gKwlkcF9yYXRlX21oeiA9ICgoYml0X3JhdGVf bWh6IC8gcGRhdGEtPmRzaS0+bGFuZXMpICogRFBfQ0xLX0ZVREdFX05VTSkgLwo+ICsJCQkJCQkJ RFBfQ0xLX0ZVREdFX0RFTjsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRpX3NuX2Jy aWRnZV9kcF9yYXRlX2x1dCk7IGkrKykKPiArCQlpZiAodGlfc25fYnJpZGdlX2RwX3JhdGVfbHV0 W2ldID4gZHBfcmF0ZV9taHopCj4gKwkJCWJyZWFrOwo+ICsJaWYgKGkgPT0gQVJSQVlfU0laRSh0 aV9zbl9icmlkZ2VfZHBfcmF0ZV9sdXQpKQo+ICsJCWktLTsgLyogc2V0IHRvIG1heGltdW0gcG9z c2libGUgKi8KCkp1c3QgdXNlOiBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0aV9zbl9icmlk Z2VfZHBfcmF0ZV9sdXQpIC0gMTsgaSsrKQoKPiArCj4gKwlyZWdtYXBfdXBkYXRlX2JpdHMocGRh dGEtPnJlZ21hcCwgU05fREFUQVJBVEVfQ09ORklHX1JFRywKPiArCQkJICAgU05fRFBfREFUQV9S QVRFX0JJVFMsIGkgPDwgU05fRFBfREFUQV9SQVRFX09GRlNFVCk7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIHRpX3NuX2JyaWRnZV9zZXRfdmlkZW9fdGltaW5ncyhzdHJ1Y3QgdGlfc25fYnJpZGdl ICpwZGF0YSkKPiArewo+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSAmcGRhdGEt PmN1cnJfbW9kZTsKPiArCj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX0FD VElWRV9MSU5FX0xFTkdUSF9MT1dfUkVHLAo+ICsJCSAgICAgbW9kZS0+aGRpc3BsYXkgJiAweEZG KTsKPiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfQUNUSVZFX0xJTkVfTEVO R1RIX0hJR0hfUkVHLAo+ICsJCSAgICAgKG1vZGUtPmhkaXNwbGF5ID4+IFNOX1RJTUlOR19ISUdI X09GRlNFVCkgJiAweEZGKTsKPiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFf VkVSVElDQUxfRElTUExBWV9TSVpFX0xPV19SRUcsCj4gKwkJICAgICBtb2RlLT52ZGlzcGxheSAm IDB4RkYpOwo+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0NIQV9WRVJUSUNBTF9E SVNQTEFZX1NJWkVfSElHSF9SRUcsCj4gKwkJICAgICAobW9kZS0+dmRpc3BsYXkgPj4gU05fVElN SU5HX0hJR0hfT0ZGU0VUKSAmIDB4RkYpOwo+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAs IFNOX0NIQV9IU1lOQ19QVUxTRV9XSURUSF9MT1dfUkVHLAo+ICsJCSAgICAgKG1vZGUtPmhzeW5j X2VuZCAtIG1vZGUtPmhzeW5jX3N0YXJ0KSAmIDB4RkYpOwo+ICsJcmVnbWFwX3dyaXRlKHBkYXRh LT5yZWdtYXAsIFNOX0NIQV9IU1lOQ19QVUxTRV9XSURUSF9ISUdIX1JFRywKPiArCQkgICAgICgo bW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQpID4+Cj4gKwkJICAgICAgU05fVElN SU5HX0hJR0hfT0ZGU0VUKSAmIDB4RkYpOwo+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAs IFNOX0NIQV9WU1lOQ19QVUxTRV9XSURUSF9MT1dfUkVHLAo+ICsJCSAgICAgKG1vZGUtPnZzeW5j X2VuZCAtIG1vZGUtPnZzeW5jX3N0YXJ0KSAmIDB4RkYpOwo+ICsJcmVnbWFwX3dyaXRlKHBkYXRh LT5yZWdtYXAsIFNOX0NIQV9WU1lOQ19QVUxTRV9XSURUSF9ISUdIX1JFRywKPiArCQkgICAgICgo bW9kZS0+dnN5bmNfZW5kIC0gbW9kZS0+dnN5bmNfc3RhcnQpID4+Cj4gKwkJICAgICAgU05fVElN SU5HX0hJR0hfT0ZGU0VUKSAmIDB4RkYpOwo+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAs IFNOX0NIQV9IT1JJWk9OVEFMX0JBQ0tfUE9SQ0hfUkVHLAo+ICsJCSAgICAgKG1vZGUtPmh0b3Rh bCAtIG1vZGUtPmhzeW5jX2VuZCkgJiAweEZGKTsKPiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVn bWFwLCBTTl9DSEFfVkVSVElDQUxfQkFDS19QT1JDSF9SRUcsCj4gKwkJICAgICAobW9kZS0+dnRv dGFsIC0gbW9kZS0+dnN5bmNfZW5kKSAmIDB4RkYpOwo+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5y ZWdtYXAsIFNOX0NIQV9IT1JJWk9OVEFMX0ZST05UX1BPUkNIX1JFRywKPiArCQkgICAgIChtb2Rl LT5oc3luY19zdGFydCAtIG1vZGUtPmhkaXNwbGF5KSAmIDB4RkYpOwo+ICsJcmVnbWFwX3dyaXRl KHBkYXRhLT5yZWdtYXAsIFNOX0NIQV9WRVJUSUNBTF9GUk9OVF9QT1JDSF9SRUcsCj4gKwkJICAg ICAobW9kZS0+dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlzcGxheSkgJiAweEZGKTsKPiArCXVzbGVl cF9yYW5nZSgxMDAwMCwgMTA1MDApOyAvKiAxMG1zIGRlbGF5IHJlY29tbWVuZGVkIGJ5IHNwZWMg Ki8KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX2VuYWJsZShzdHJ1Y3QgZHJt X2JyaWRnZSAqYnJpZGdlKQo+ICt7Cj4gKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJy aWRnZV90b190aV9zbl9icmlkZ2UoYnJpZGdlKTsKPiArCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVs ID0gcGRhdGEtPnBhbmVsOwo+ICsJdW5zaWduZWQgaW50IHZhbCA9IDA7Cj4gKwo+ICsJaWYgKHBh bmVsKSB7Cj4gKwkJZHJtX3BhbmVsX3ByZXBhcmUocGFuZWwpOwo+ICsJCS8qIGluIGNhc2UgZHJt X3BhbmVsIGlzIGNvbm5lY3RlZCB0aGVuIEhQRCBpcyBub3Qgc3VwcG9ydGVkICovCj4gKwkJcmVn bWFwX3VwZGF0ZV9iaXRzKHBkYXRhLT5yZWdtYXAsIFNOX0hQRF9ESVNBQkxFX1JFRywKPiArCQkJ CSAgIFNOX0hQRF9ESVNBQkxFX0JJVCwgU05fSFBEX0RJU0FCTEVfQklUKTsKPiArCX0KPiArCj4g KwkvKiBEU0lfQSBsYW5lIGNvbmZpZyAqLwo+ICsJdmFsID0gKDQgLSBwZGF0YS0+ZHNpLT5sYW5l cykgPDwgU05fRFNJQV9MQU5FX09GRlNFVDsKPiArCXJlZ21hcF91cGRhdGVfYml0cyhwZGF0YS0+ cmVnbWFwLCBTTl9EU0lfTEFORVNfUkVHLAo+ICsJCQkgICBTTl9EU0lBX05VTV9MQU5FU19CSVRT LCB2YWwpOwo+ICsKPiArCS8qIERQIGxhbmUgY29uZmlnICovCj4gKwl2YWwgPSAocGRhdGEtPmRz aS0+bGFuZXMgLSAxKSA8PCBTTl9EUF9MQU5FX09GRlNFVDsKPiArCXJlZ21hcF91cGRhdGVfYml0 cyhwZGF0YS0+cmVnbWFwLCBTTl9TU0NfQ09ORklHX1JFRywKPiArCQkJICAgU05fRFBfTlVNX0xB TkVTX0JJVFMsIHZhbCk7Cj4gKwo+ICsJLyogc2V0IGRzaS9kcCBjbGsgZnJlcXVlbmN5IHZhbHVl ICovCj4gKwl0aV9zbl9icmlkZ2Vfc2V0X2RzaV9kcF9yYXRlKHBkYXRhKTsKPiArCj4gKwkvKiBl bmFibGUgRFAgUExMICovCj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fUExMX0VO QUJMRV9SRUcsIDEpOwo+ICsJdXNsZWVwX3JhbmdlKDEwMDAwLCAxMDUwMCk7IC8qIDEwbXMgZGVs YXkgcmVjb21tZW5kZWQgYnkgc3BlYyAqLwo+ICsKPiArCS8qKgo+ICsJICogVGhlIFNONjVEU0k4 NiBvbmx5IHN1cHBvcnRzIEFTU1IgRGlzcGxheSBBdXRoZW50aWNhdGlvbiBtZXRob2QgYW5kCj4g KwkgKiB0aGlzIG1ldGhvZCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuIEFuIGVEUCBwYW5lbCBtdXN0 IHN1cHBvcnQgdGhpcwo+ICsJICogYXV0aGVudGljYXRpb24gbWV0aG9kLiBXZSBuZWVkIHRvIGVu YWJsZSB0aGlzIG1ldGhvZCBpbiB0aGUgZURQIHBhbmVsCj4gKwkgKiBhdCBEaXNwbGF5UG9ydCBh ZGRyZXNzIDB4MDAxMEEgcHJpb3IgdG8gbGluayB0cmFpbmluZy4KPiArCSAqLwo+ICsJcmVnbWFw X3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0FVWF9XREFUQTBfUkVHLCAweDAxKTsKPiArCXJlZ21h cF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9BVVhfQUREUl8xOV8xNl9SRUcsIDB4MDApOwo+ICsJ cmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0FVWF9BRERSXzE1XzhfUkVHLCAweDAxKTsK PiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9BVVhfQUREUl83XzBfUkVHLCAweDBB KTsKPiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9BVVhfTEVOR1RIX1JFRywgMHgw MSk7Cj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQVVYX0NNRF9SRUcsIDB4ODEp Owo+ICsJdXNsZWVwX3JhbmdlKDEwMDAwLCAxMDUwMCk7IC8qIDEwbXMgZGVsYXkgcmVjb21tZW5k ZWQgYnkgc3BlYyAqLwo+ICsKPiArCS8qIFNlbWkgYXV0byBsaW5rIHRyYWluaW5nIG1vZGUgKi8K PiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9NTF9UWF9NT0RFX1JFRywgMHgwQSk7 Cj4gKwltc2xlZXAoMjApOyAvKiAyMG1zIGRlbGF5IHJlY29tbWVuZGVkIGJ5IHNwZWMgKi8KPiAr Cj4gKwkvKiBjb25maWcgdmlkZW8gcGFyYW1ldGVycyAqLwo+ICsJdGlfc25fYnJpZGdlX3NldF92 aWRlb190aW1pbmdzKHBkYXRhKTsKPiArCj4gKwkvKiBlbmFibGUgdmlkZW8gc3RyZWFtICovCj4g KwlyZWdtYXBfdXBkYXRlX2JpdHMocGRhdGEtPnJlZ21hcCwgU05fRU5IX0ZSQU1FX1JFRywKPiAr CQkJICAgU05fRU5BQkxFX1ZJRF9TVFJFQU1fQklULCBTTl9FTkFCTEVfVklEX1NUUkVBTV9CSVQp Owo+ICsKPiArCWlmIChwYW5lbCkKPiArCQlkcm1fcGFuZWxfZW5hYmxlKHBhbmVsKTsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX3ByZV9lbmFibGUoc3RydWN0IGRybV9icmlk Z2UgKmJyaWRnZSkKPiArewo+ICsJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEgPSBicmlkZ2Vf dG9fdGlfc25fYnJpZGdlKGJyaWRnZSk7Cj4gKwo+ICsJcG1fcnVudGltZV9nZXRfc3luYyhwZGF0 YS0+ZGV2KTsKPiArCj4gKwkvKiBjb25maWd1cmUgYnJpZGdlIENMS19TUkMgYW5kIHJlZl9jbGsg Ki8KPiArCXRpX3NuX2JyaWRnZV9zZXRfcmVmY2xrKHBkYXRhKTsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgdGlfc25fYnJpZGdlX3Bvc3RfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdl KQo+ICt7Cj4gKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90b190aV9zbl9i cmlkZ2UoYnJpZGdlKTsKPiArCj4gKwlpZiAocGRhdGEtPnJlZmNsaykKPiArCQljbGtfZGlzYWJs ZV91bnByZXBhcmUocGRhdGEtPnJlZmNsayk7Cj4gKwo+ICsJcG1fcnVudGltZV9wdXRfc3luYyhw ZGF0YS0+ZGV2KTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fYnJpZGdlX2Z1 bmNzIHRpX3NuX2JyaWRnZV9mdW5jcyA9IHsKPiArCS5hdHRhY2ggPSB0aV9zbl9icmlkZ2VfYXR0 YWNoLAo+ICsJLnByZV9lbmFibGUgPSB0aV9zbl9icmlkZ2VfcHJlX2VuYWJsZSwKPiArCS5lbmFi bGUgPSB0aV9zbl9icmlkZ2VfZW5hYmxlLAo+ICsJLmRpc2FibGUgPSB0aV9zbl9icmlkZ2VfZGlz YWJsZSwKPiArCS5wb3N0X2Rpc2FibGUgPSB0aV9zbl9icmlkZ2VfcG9zdF9kaXNhYmxlLAo+ICsJ Lm1vZGVfc2V0ID0gdGlfc25fYnJpZGdlX21vZGVfc2V0LAo+ICt9Owo+ICsKPiArc3RhdGljIGlu dCB0aV9zbl9icmlkZ2VfcGFyc2VfZHNpX2hvc3Qoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEp Cj4gK3sKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGF0YS0+ZGV2LT5vZl9ub2RlOwo+ ICsJc3RydWN0IGRldmljZV9ub2RlICplbmRfbm9kZTsKPiArCj4gKwllbmRfbm9kZSA9IG9mX2dy YXBoX2dldF9lbmRwb2ludF9ieV9yZWdzKG5wLCAwLCAwKTsKPiArCWlmICghZW5kX25vZGUpIHsK PiArCQlEUk1fRVJST1IoInJlbW90ZSBlbmRwb2ludCBub3QgZm91bmRcbiIpOwo+ICsJCXJldHVy biAtRU5PREVWOwo+ICsJfQo+ICsKPiArCXBkYXRhLT5ob3N0X25vZGUgPSBvZl9ncmFwaF9nZXRf cmVtb3RlX3BvcnRfcGFyZW50KGVuZF9ub2RlKTsKPiArCW9mX25vZGVfcHV0KGVuZF9ub2RlKTsK PiArCWlmICghcGRhdGEtPmhvc3Rfbm9kZSkgewo+ICsJCURSTV9FUlJPUigicmVtb3RlIG5vZGUg bm90IGZvdW5kXG4iKTsKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArCW9mX25vZGVfcHV0 KHBkYXRhLT5ob3N0X25vZGUpOwoKV2h5IG5vdCBvZl9ncmFwaF9nZXRfcmVtb3RlX25vZGUgPwoK PiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCB0aV9zbl9icmlkZ2VfcHJv YmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKPiArCSBjb25zdCBzdHJ1Y3QgaTJjX2Rldmlj ZV9pZCAqaWQpCj4gK3sKPiArCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhOwo+ICsJc3RydWN0 IGRldmljZV9ub2RlICpkZGNfbm9kZTsKPiArCWludCByZXQgPSAwOwo+ICsKPiArCWlmICghaTJj X2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpKSB7Cj4g KwkJRFJNX0VSUk9SKCJkZXZpY2UgZG9lc24ndCBzdXBwb3J0IEkyQ1xuIik7Cj4gKwkJcmV0dXJu IC1FTk9ERVY7Cj4gKwl9Cj4gKwo+ICsJcGRhdGEgPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2 LCBzaXplb2Yoc3RydWN0IHRpX3NuX2JyaWRnZSksCj4gKwkJCSAgICAgR0ZQX0tFUk5FTCk7Cj4g KwlpZiAoIXBkYXRhKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCXBkYXRhLT5kZXYgPSAm Y2xpZW50LT5kZXY7Cj4gKwlkZXZfc2V0X2RydmRhdGEoJmNsaWVudC0+ZGV2LCBwZGF0YSk7Cj4g Kwo+ICsJcGRhdGEtPnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGNsaWVudCwKPiArCQkJ CQkgICAgICZ0aV9zbl9icmlkZ2VfcmVnbWFwX2NvbmZpZyk7Cj4gKwlpZiAoSVNfRVJSKHBkYXRh LT5yZWdtYXApKSB7Cj4gKwkJRFJNX0VSUk9SKCJyZWdtYXAgaTJjIGluaXQgZmFpbGVkXG4iKTsK PiArCQlyZXR1cm4gUFRSX0VSUihwZGF0YS0+cmVnbWFwKTsKPiArCX0KPiArCj4gKwlwZGF0YS0+ ZW5hYmxlX2dwaW8gPSBkZXZtX2dwaW9kX2dldChwZGF0YS0+ZGV2LAo+ICsJCQkJCSAgICAiZW5h YmxlIiwgR1BJT0RfT1VUX0xPVyk7Cj4gKwlpZiAoSVNfRVJSKHBkYXRhLT5lbmFibGVfZ3Bpbykp IHsKPiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBnZXQgZW5hYmxlIGdwaW8gZnJvbSBEVFxuIik7 Cj4gKwkJcmV0ID0gUFRSX0VSUihwZGF0YS0+ZW5hYmxlX2dwaW8pOwo+ICsJCXJldHVybiByZXQ7 Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gdGlfc25fYnJpZGdlX3BhcnNlX3JlZ3VsYXRvcnMocGRhdGEp Owo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBhcnNlIHJlZ3VsYXRv cnNcbiIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gdGlfc25fYnJpZGdl X3BhcnNlX2RzaV9ob3N0KHBkYXRhKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiAr Cj4gKwlwbV9ydW50aW1lX2VuYWJsZShwZGF0YS0+ZGV2KTsKPiArCXBtX3J1bnRpbWVfZ2V0X3N5 bmMocGRhdGEtPmRldik7Cj4gKwlyZXQgPSB0aV9zbl9icmlkZ2VfcmVhZF9kZXZpY2VfcmV2KHBk YXRhKTsKPiArCXBtX3J1bnRpbWVfcHV0X3N5bmMocGRhdGEtPmRldik7CgpJIHdvdWxkIHB1dCBp dCBpbnRvIChwcmUpIGVuYWJsZSBjYWxsYmFja3MsIG1heWJlIHdpdGggbWFya2luZyBpdCB0byBy dW4Kb25seSBvbmNlLgoKUmVnYXJkcwpBbmRyemVqCgo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVy cl9yZXZfcmVhZDsKPiArCj4gKwlwZGF0YS0+cmVmY2xrID0gZGV2bV9jbGtfZ2V0KHBkYXRhLT5k ZXYsICJyZWZjbGsiKTsKPiArCj4gKwlkZGNfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUocGRhdGEt PmRldi0+b2Zfbm9kZSwgImRkYy1pMmMtYnVzIiwgMCk7Cj4gKwlpZiAoZGRjX25vZGUpIHsKPiAr CQlwZGF0YS0+ZGRjID0gb2ZfZmluZF9pMmNfYWRhcHRlcl9ieV9ub2RlKGRkY19ub2RlKTsKPiAr CQlvZl9ub2RlX3B1dChkZGNfbm9kZSk7Cj4gKwkJaWYgKCFwZGF0YS0+ZGRjKSB7Cj4gKwkJCURS TV9ERUJVR19LTVMoImZhaWxlZCB0byByZWFkIGRkYyBub2RlXG4iKTsKPiArCQkJcmV0ID0gLUVQ Uk9CRV9ERUZFUjsKPiArCQkJZ290byBlcnJfcmV2X3JlYWQ7Cj4gKwkJfQo+ICsJfSBlbHNlIHsK PiArCQlEUk1fREVCVUdfS01TKCJubyBkZGMgcHJvcGVydHkgZm91bmRcbiIpOwo+ICsJfQo+ICsK PiArCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHBkYXRhKTsKPiArCj4gKwlwZGF0YS0+YnJp ZGdlLmZ1bmNzID0gJnRpX3NuX2JyaWRnZV9mdW5jczsKPiArCXBkYXRhLT5icmlkZ2Uub2Zfbm9k ZSA9IGNsaWVudC0+ZGV2Lm9mX25vZGU7Cj4gKwo+ICsJZHJtX2JyaWRnZV9hZGQoJnBkYXRhLT5i cmlkZ2UpOwo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArZXJyX3Jldl9yZWFkOgo+ICsJcG1fcnVu dGltZV9kaXNhYmxlKHBkYXRhLT5kZXYpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3Rh dGljIGludCB0aV9zbl9icmlkZ2VfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCj4g K3sKPiArCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNs aWVudCk7Cj4gKwo+ICsJaWYgKCFwZGF0YSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlt aXBpX2RzaV9kZXRhY2gocGRhdGEtPmRzaSk7Cj4gKwltaXBpX2RzaV9kZXZpY2VfdW5yZWdpc3Rl cihwZGF0YS0+ZHNpKTsKPiArCj4gKwlkcm1fYnJpZGdlX3JlbW92ZSgmcGRhdGEtPmJyaWRnZSk7 Cj4gKwlwbV9ydW50aW1lX2Rpc2FibGUocGRhdGEtPmRldik7Cj4gKwlpMmNfcHV0X2FkYXB0ZXIo cGRhdGEtPmRkYyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3Qg aTJjX2RldmljZV9pZCB0aV9zbl9icmlkZ2VfaWRbXSA9IHsKPiArCXsgInRpLHNuNjVkc2k4NiIs IDB9LAo+ICsJe30sCj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB0aV9zbl9icmlk Z2VfaWQpOwo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdGlfc25fYnJp ZGdlX21hdGNoX3RhYmxlW10gPSB7Cj4gKwl7LmNvbXBhdGlibGUgPSAidGksc242NWRzaTg2In0s Cj4gKwl7fSwKPiArfTsKPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgdGlfc25fYnJpZGdlX21h dGNoX3RhYmxlKTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0aV9zbl9icmlkZ2Vf ZHJpdmVyID0gewo+ICsJLmRyaXZlciA9IHsKPiArCQkubmFtZSA9ICJ0aV9zbjY1ZHNpODYiLAo+ ICsJCS5vZl9tYXRjaF90YWJsZSA9IHRpX3NuX2JyaWRnZV9tYXRjaF90YWJsZSwKPiArCQkucG0g PSAmdGlfc25fYnJpZGdlX3BtX29wcywKPiArCX0sCj4gKwkucHJvYmUgPSB0aV9zbl9icmlkZ2Vf cHJvYmUsCj4gKwkucmVtb3ZlID0gdGlfc25fYnJpZGdlX3JlbW92ZSwKPiArCS5pZF90YWJsZSA9 IHRpX3NuX2JyaWRnZV9pZCwKPiArfTsKPiArCj4gK21vZHVsZV9pMmNfZHJpdmVyKHRpX3NuX2Jy aWRnZV9kcml2ZXIpOwo+ICtNT0RVTEVfREVTQ1JJUFRJT04oInNuNjVkc2k4NiBEU0kgdG8gZURQ IGJyaWRnZSBkcml2ZXIiKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwoKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5n IGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=