From mboxrd@z Thu Jan 1 00:00:00 1970 From: spanda-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org Subject: Re: [PATCH v6 1/4] drm/bridge: add support for sn65dsi86 bridge driver Date: Thu, 17 May 2018 14:40:09 +0530 Message-ID: <2e7e2a5910f81c2dec9d3a534cf5447d@codeaurora.org> References: <1526363564-13823-1-git-send-email-spanda@codeaurora.org> <1526363564-13823-2-git-send-email-spanda@codeaurora.org> <658f5b66-cda3-59cd-a795-45dba3d7c7d5@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Andrzej Hajda Cc: devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, ryadav-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, chandanu-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org List-Id: devicetree@vger.kernel.org T24gMjAxOC0wNS0xNiAxMjo1NiwgQW5kcnplaiBIYWpkYSB3cm90ZToKPiBJIHN1cHBvc2UgeW91 IHdhbnRlZCB0byByZXNwb25kIG9uIHRoZSBsaXN0LCBzbyBJIGhhdmUgYWRkZWQgYmFjayBhbGwK PiByZWNpcGllbnRzLgo+IAo+IE9uIDE2LjA1LjIwMTggMDY6MzksIHNwYW5kYUBjb2RlYXVyb3Jh Lm9yZyB3cm90ZToKPj4gT24gMjAxOC0wNS0xNSAxOToyMywgQW5kcnplaiBIYWpkYSB3cm90ZToK Pj4+IE9uIDE1LjA1LjIwMTggMDc6NTIsIFNhbmRlZXAgUGFuZGEgd3JvdGU6Cj4+Pj4gQWRkIHN1 cHBvcnQgZm9yIFRJJ3Mgc242NWRzaTg2IGRzaTJlZHAgYnJpZGdlIGNoaXAuCj4+Pj4gVGhlIGNo aXAgY29udmVydHMgRFNJIHRyYW5zbWl0dGVkIHNpZ25hbCB0byBlRFAgc2lnbmFsLAo+Pj4+IHdo aWNoIGlzIGZlZCB0byB0aGUgY29ubmVjdGVkIGVEUCBwYW5lbC4KPj4+PiAKPj4+PiBUaGlzIGNo aXAgY2FuIGJlIGNvbnRyb2xsZWQgdmlhIGVpdGhlciBpMmMgaW50ZXJmYWNlIG9yCj4+Pj4gZHNp IGludGVyZmFjZS4gQ3VycmVudGx5IGluIGRyaXZlciBhbGwgdGhlIGNvbnRyb2wgcmVnaXN0ZXJz Cj4+Pj4gYXJlIGJlaW5nIGFjY2Vzc2VkIHRocm91Z2ggaTJjIGludGVyZmFjZSBvbmx5Lgo+Pj4+ IEFsc28gYXMgb2Ygbm93IEhQRCBzdXBwb3J0IGhhcyBub3QgYmVlbiBhZGRlZCB0byBicmlkZ2UK Pj4+PiBjaGlwIGRyaXZlci4KPj4+PiAKPj4+PiBDaGFuZ2VzIGluIHYxOgo+Pj4+ICAtIFNwbGl0 IHRoZSBkdC1iaW5kaW5ncyBhbmQgdGhlIGRyaXZlciBzdXBwb3J0IGludG8gc2VwYXJhdGUgCj4+ Pj4gcGF0Y2hlcwo+Pj4+ICAgIChBbmRyemVqIEhhamRhKS4KPj4+PiAgLSBVc2Ugb2YgZ3Bpb2Qg QVBJcyB0byBwYXJzZSBhbmQgY29uZmlndXJlIGdwaW9zIGluc3RlYWQgb2YgCj4+Pj4gb2Jzb2xl dGUKPj4+PiBvbmVzCj4+Pj4gICAgKEFuZHJ6ZWogSGFqZGEpLgo+Pj4+ICAtIFVzZSBtYWNyb3Mg dG8gZGVmaW5lIHRoZSByZWdpc3RlciBvZmZzZXRzIChBbmRyemVqIEhhamRhKS4KPj4+PiAKPj4+ PiBDaGFuZ2VzIGluIHYyOgo+Pj4+ICAtIFNlcGFyYXRlIG91dCBlZHAgcGFuZWwgc3BlY2lmaWMg SFcgcmVzb3VyY2UgaGFuZGxpbmcgZnJvbSBicmlkZ2UKPj4+PiAgICBkcml2ZXIgYW5kIGNyZWF0 ZSBhIHNlcGFyYXRlIGVkcCBwYW5lbCBkcml2ZXJzIHRvIGhhbmRsZSBwYW5lbAo+Pj4+ICAgIHNw ZWNpZmljIG1vZGUgaW5mb3JtYXRpb24gYW5kIEhXIHJlc291cmNlcyAoU2VhbiBQYXVsKS4KPj4+ PiAgLSBSZXBsYWNlIHByXyogQVBJcyB0byBEUk1fKiBBUElzIHRvIGxvZyBlcnJvciBvciBkZWJ1 ZyBpbmZvcm1hdGlvbgo+Pj4+ICAgIChTZWFuIFBhdWwpLgo+Pj4+ICAtIFJlbW92ZSBzb21lIG9m IHRoZSB1bm5lY2Vzc2FyeSBzdHJ1Y3R1cmUvdmFyaWFibGUgZnJvbSBkcml2ZXIgCj4+Pj4gKFNl YW4KPj4+PiAgICBQYXVsKS4KPj4+PiAgLSBSZW5hbWUgdGhlIGZ1bmN0aW9uIGFuZCBzdHJ1Y3R1 cmUgcHJlZml4ICJzbjY1ZHNpODYiIHRvCj4+Pj4gInRpX3NuX2JyaWRnZSIKPj4+PiAgICAoU2Vh biBQYXVsIC8gUm9iIEhlcnJpbmcpLgo+Pj4+ICAtIFJlbW92ZSBtb3N0IG9mIHRoZSBoYXJkLWNv ZGluZyBhbmQgbW9kaWZpZWQgdGhlIGJyaWRnZSBpbml0Cj4+Pj4gc2VxdWVuY2UKPj4+PiAgICBi YXNlZCBvbiBjdXJyZW50IG1vZGUgKFNlYW4gUGF1bCkuCj4+Pj4gIC0gUmVtb3ZlIHRoZSBleGlz dGluZyBmdW5jdGlvbiB0byByZXRyaWV2ZSB0aGUgRURJRCBkYXRhIGFuZAo+Pj4+ICAgIGltcGxl bWVudGVkIHRoaXMgYXMgYW4gaTJjX2FkYXB0ZXIgYW5kIHVzZSBkcm1fZ2V0X2VkaWQoKSAoU2Vh bgo+Pj4+IFBhdWwpLgo+Pj4+ICAtIFJlbW92ZSB0aGUgZHVtbXkgaXJxIGhhbmRsZXIgaW1wbGVt ZW50YXRpb24sIHdpbGwgYWRkIGJhY2sgdGhlCj4+Pj4gICAgcHJvcGVyIGlycSBoYW5kbGluZyBs YXRlciAoU2VhbiBQYXVsKS4KPj4+PiAgLSBDYXB0dXJlIHRoZSByZXF1aXJlZCBlbmFibGUgZ3Bp b3MgaW4gYSBzaW5nbGUgYXJyYXkgYmFzZWQgb24gZHQKPj4+PiBlbnRyeQo+Pj4+ICAgIGluc3Rl YWQgb2YgaGF2aW5nIGluZGl2aWR1YWwgZGVzY3JpcHRvciBmb3IgZWFjaCBncGlvIChTZWFuIAo+ Pj4+IFBhdWwpLgo+Pj4+IAo+Pj4+IENoYW5nZXMgaW4gdjM6Cj4+Pj4gIC0gUmVtb3ZlIHVzYWdl IG9mIGlycV9ncGlvIGFuZCByZXBsYWNlIGl0IGFzICJpbnRlcnJ1cHRzIiBwcm9wZXJ0eQo+Pj4+ IChSb2IKPj4+PiAgICBIZXJyaW5nKS4KPj4+PiAgLSBSZW1vdmUgdGhlIHVubmVjZXNzYXJ5IGhl YWRlciBmaWxlIGluY2x1c2lvbnMgKFNlYW4gUGF1bCkuCj4+Pj4gIC0gUmVhcnJhbmdlIHRoZSBo ZWFkZXIgZmlsZXMgaW4gYWxwaGFiZXRpY2FsIG9yZGVyIChTZWFuIFBhdWwpLgo+Pj4+ICAtIFVz ZSByZWdtYXAgaW50ZXJmYWNlIHRvIHBlcmZvcm0gaTJjIHRyYW5zYWN0aW9ucy4KPj4+PiAgLSBV cGRhdGUgQ29weXJpZ2h0L0xpY2Vuc2UgZmllbGQgYW5kIGFkZHJlc3Mgb3RoZXIgcmV2aWV3IGNv bW1lbnRzCj4+Pj4gICAgKEpvcmRhbiBDcm91c2UpLgo+Pj4+IAo+Pj4+IENoYW5nZXMgaW4gdjQ6 Cj4+Pj4gIC0gVXBkYXRlIExpY2Vuc2UvQ29weXJpZ2h0IChTZWFuIFBhdWwpLgo+Pj4+ICAtIEFk ZCBLY29uZmlnIGFuZCBNYWtlZmlsZSBjaGFuZ2VzIChTZWFuIFBhdWwpLgo+Pj4+ICAtIERyb3Ag aTJjIGdwaW8gaGFuZGxpbmcgZnJvbSB0aGlzIGJyaWRnZSBkcml2ZXIsIHNpbmNlIGkyYyBzZGEv c2NsCj4+Pj4gZ3Bpb3MKPj4+PiAgICB3aWxsIGJlIGhhbmRsZWQgYnkgaTJjIG1hc3Rlci4KPj4+ PiAgLSBVcGRhdGUgcmVxdWlyZWQgc3VwcGxpZXMgbmFtZXMuCj4+Pj4gIC0gUmVtb3ZlIHVubmVj ZXNzYXJ5IGdvdG8gc3RhdGVtZW50cyAoU2VhbiBQYXVsKS4KPj4+PiAgLSBBZGQgbXV0ZXggbG9j ayB0byBwb3dlcl9jdHJsIEFQSSB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgKFNlYW4KPj4+PiAg ICBQYXVsKS4KPj4+PiAgLSBBZGQgc3VwcG9ydCB0byBwYXJzZSByZWZlcmVuY2UgY2xrIGZyZXF1 ZW5jeSBmcm9tIGR0KG9wdGlvbmFsKS4KPj4+PiAgLSBVcGRhdGUgdGhlIGJyaWRnZSBjaGlwIGVu YWJsZS9kaXNhYmxlIHNlcXVlbmNlLgo+Pj4+IAo+Pj4+IENoYW5nZXMgaW4gdjU6Cj4+Pj4gIC0g Rml4ZWQgS2J1aWxkIHRlc3Qgc2VydmljZSByZXBvcnRlZCB3YXJuaW5ncy4KPj4+PiAKPj4+PiBD aGFuZ2VzIGluIHY2Ogo+Pj4+ICAtIFVzZSBQTSBydW50aW1lIGJhc2VkIHJlZi1jb3VudGluZyBp bnN0ZWFkIG9mIGxvY2FsIHJlZl9jb3VudAo+Pj4+IG1lY2hhbmlzbQo+Pj4+ICAgIChTdGVwaGVu IEJveWQpLgo+Pj4+ICAtIENsZWFuIHVwIHNvbWUgZGVidWcgbG9ncyBhbmQgaW5kZW50YXRpb25z IChTZWFuIFBhdWwpLgo+Pj4+ICAtIFNpbXBsaWZ5IGRwIHJhdGUgY2FsY3VsYXRpb24gKFNlYW4g UGF1bCkuCj4+Pj4gIC0gQWRkIHN1cHBvcnQgdG8gY29uZmlndXJlIHJlZmNsayBiYXNlZCBvbiBp bnB1dCBSRUZDTEsgcGluIG9yIAo+Pj4+IERBQ1AvTgo+Pj4+ICAgIHBpbiAoU3RlcGhlbiBCb3lk KS4KPj4+PiAKPj4+PiBTaWduZWQtb2ZmLWJ5OiBTYW5kZWVwIFBhbmRhIDxzcGFuZGFAY29kZWF1 cm9yYS5vcmc+Cj4+Pj4gLS0tCj4+Pj4gIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZyAg ICAgICAgfCAgIDkgKwo+Pj4+ICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlICAgICAg IHwgICAxICsKPj4+PiAgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODYuYyB8IDc2 Ngo+Pj4+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4+PiAgMyBmaWxlcyBj aGFuZ2VkLCA3NzYgaW5zZXJ0aW9ucygrKQo+Pj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODYuYwo+Pj4+IAo+Pj4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcKPj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9icmlk Z2UvS2NvbmZpZwo+Pj4+IGluZGV4IDNiOTlkNWEuLjgxNTMxNTAgMTAwNjQ0Cj4+Pj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnCj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2JyaWRnZS9LY29uZmlnCj4+Pj4gQEAgLTEwOCw2ICsxMDgsMTUgQEAgY29uZmlnIERSTV9USV9U RlA0MTAKPj4+PiAgCS0tLWhlbHAtLS0KPj4+PiAgCSAgVGV4YXMgSW5zdHJ1bWVudHMgVEZQNDEw IERWSS9IRE1JIFRyYW5zbWl0dGVyIGRyaXZlcgo+Pj4+IAo+Pj4+ICtjb25maWcgRFJNX1RJX1NO NjVEU0k4Ngo+Pj4+ICsJdHJpc3RhdGUgIlRJIFNONjVEU0k4NiBEU0kgdG8gZURQIGJyaWRnZSIK Pj4+PiArCWRlcGVuZHMgb24gT0YKPj4+PiArCXNlbGVjdCBEUk1fS01TX0hFTFBFUgo+Pj4+ICsJ c2VsZWN0IFJFR01BUF9JMkMKPj4+PiArCXNlbGVjdCBEUk1fUEFORUwKPj4+PiArCS0tLWhlbHAt LS0KPj4+PiArCSAgVGV4YXMgSW5zdHJ1bWVudHMgU042NURTSTg2IERTSSB0byBlRFAgQnJpZGdl IGRyaXZlcgo+Pj4+ICsKPj4+PiAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxv Z2l4L0tjb25maWciCj4+Pj4gCj4+Pj4gIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9h ZHY3NTExL0tjb25maWciCj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv TWFrZWZpbGUKPj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUKPj4+PiBpbmRl eCAzNzNlYjI4Li4zNzExYmU4IDEwMDY0NAo+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlk Z2UvTWFrZWZpbGUKPj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCj4+ Pj4gQEAgLTEyLDQgKzEyLDUgQEAgb2JqLSQoQ09ORklHX0RSTV9UT1NISUJBX1RDMzU4NzY3KSAr PSB0YzM1ODc2Ny5vCj4+Pj4gIG9iai0kKENPTkZJR19EUk1fQU5BTE9HSVhfRFApICs9IGFuYWxv Z2l4Lwo+Pj4+ICBvYmotJChDT05GSUdfRFJNX0kyQ19BRFY3NTExKSArPSBhZHY3NTExLwo+Pj4+ ICBvYmotJChDT05GSUdfRFJNX1RJX1RGUDQxMCkgKz0gdGktdGZwNDEwLm8KPj4+PiArb2JqLSQo Q09ORklHX0RSTV9USV9TTjY1RFNJODYpICs9IHRpLXNuNjVkc2k4Ni5vCj4+Pj4gIG9iai15ICs9 IHN5bm9wc3lzLwo+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNu NjVkc2k4Ni5jCj4+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jCj4+ Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4+PiBpbmRleCAwMDAwMDAwLi4xZDNlNTQ5Cj4+Pj4g LS0tIC9kZXYvbnVsbAo+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktc242NWRz aTg2LmMKPj4+PiBAQCAtMCwwICsxLDc2NiBAQAo+Pj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMAo+Pj4+ICsvKgo+Pj4+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTgsIFRoZSBM aW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+Pj4+ICsgKi8KPj4+PiArCj4+ Pj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+Pj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMu aD4KPj4+PiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+Pj4+ICsjaW5jbHVk ZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+Pj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9taXBpX2Rz aS5oPgo+Pj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgo+Pj4+ICsjaW5jbHVkZSA8bGlu dXgvY2xrLmg+Cj4+Pj4gKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Cj4+Pj4gKyNpbmNsdWRlIDxs aW51eC9pMmMuaD4KPj4+PiArI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KPj4+PiArI2luY2x1 ZGUgPGxpbnV4L29mX2dyYXBoLmg+Cj4+Pj4gKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+ Cj4+Pj4gKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KPj4+PiArI2luY2x1ZGUgPGxpbnV4L3Jl Z3VsYXRvci9jb25zdW1lci5oPgo+Pj4+ICsKPj4+PiArI2RlZmluZSBTTl9CUklER0VfUkVWSVNJ T05fSUQgMHgyCj4+Pj4gKwo+Pj4+ICsvKiBMaW5rIFRyYWluaW5nIHNwZWNpZmljIHJlZ2lzdGVy cyAqLwo+Pj4+ICsjZGVmaW5lIFNOX0RFVklDRV9SRVZfUkVHCQkJMHgwOAo+Pj4+ICsjZGVmaW5l IFNOX0hQRF9ESVNBQkxFX1JFRwkJCTB4NUMKPj4+PiArI2RlZmluZSBTTl9SRUZDTEtfRlJFUV9S RUcJCQkweDBBCj4+Pj4gKyNkZWZpbmUgU05fRFNJX0xBTkVTX1JFRwkJCTB4MTAKPj4+PiArI2Rl ZmluZSBTTl9EU0lBX0NMS19GUkVRX1JFRwkJCTB4MTIKPj4+PiArI2RlZmluZSBTTl9FTkhfRlJB TUVfUkVHCQkJMHg1QQo+Pj4+ICsjZGVmaW5lIFNOX1NTQ19DT05GSUdfUkVHCQkJMHg5Mwo+Pj4+ ICsjZGVmaW5lIFNOX0RBVEFSQVRFX0NPTkZJR19SRUcJCQkweDk0Cj4+Pj4gKyNkZWZpbmUgU05f UExMX0VOQUJMRV9SRUcJCQkweDBECj4+Pj4gKyNkZWZpbmUgU05fU0NSQU1CTEVfQ09ORklHX1JF RwkJCTB4OTUKPj4+PiArI2RlZmluZSBTTl9BVVhfV0RBVEEwX1JFRwkJCTB4NjQKPj4+PiArI2Rl ZmluZSBTTl9BVVhfQUREUl8xOV8xNl9SRUcJCQkweDc0Cj4+Pj4gKyNkZWZpbmUgU05fQVVYX0FE RFJfMTVfOF9SRUcJCQkweDc1Cj4+Pj4gKyNkZWZpbmUgU05fQVVYX0FERFJfN18wX1JFRwkJCTB4 NzYKPj4+PiArI2RlZmluZSBTTl9BVVhfTEVOR1RIX1JFRwkJCTB4NzcKPj4+PiArI2RlZmluZSBT Tl9BVVhfQ01EX1JFRwkJCQkweDc4Cj4+Pj4gKyNkZWZpbmUgU05fTUxfVFhfTU9ERV9SRUcJCQkw eDk2Cj4+Pj4gKy8qIHZpZGVvIGNvbmZpZyBzcGVjaWZpYyByZWdpc3RlcnMgKi8KPj4+PiArI2Rl ZmluZSBTTl9DSEFfQUNUSVZFX0xJTkVfTEVOR1RIX0xPV19SRUcJMHgyMAo+Pj4+ICsjZGVmaW5l IFNOX0NIQV9BQ1RJVkVfTElORV9MRU5HVEhfSElHSF9SRUcJMHgyMQo+Pj4+ICsjZGVmaW5lIFNO X0NIQV9WRVJUSUNBTF9ESVNQTEFZX1NJWkVfTE9XX1JFRwkweDI0Cj4+Pj4gKyNkZWZpbmUgU05f Q0hBX1ZFUlRJQ0FMX0RJU1BMQVlfU0laRV9ISUdIX1JFRwkweDI1Cj4+Pj4gKyNkZWZpbmUgU05f Q0hBX0hTWU5DX1BVTFNFX1dJRFRIX0xPV19SRUcJMHgyQwo+Pj4+ICsjZGVmaW5lIFNOX0NIQV9I U1lOQ19QVUxTRV9XSURUSF9ISUdIX1JFRwkweDJECj4+Pj4gKyNkZWZpbmUgU05fQ0hBX1ZTWU5D X1BVTFNFX1dJRFRIX0xPV19SRUcJMHgzMAo+Pj4+ICsjZGVmaW5lIFNOX0NIQV9WU1lOQ19QVUxT RV9XSURUSF9ISUdIX1JFRwkweDMxCj4+Pj4gKyNkZWZpbmUgU05fQ0hBX0hPUklaT05UQUxfQkFD S19QT1JDSF9SRUcJMHgzNAo+Pj4+ICsjZGVmaW5lIFNOX0NIQV9WRVJUSUNBTF9CQUNLX1BPUkNI X1JFRwkJMHgzNgo+Pj4+ICsjZGVmaW5lIFNOX0NIQV9IT1JJWk9OVEFMX0ZST05UX1BPUkNIX1JF RwkweDM4Cj4+Pj4gKyNkZWZpbmUgU05fQ0hBX1ZFUlRJQ0FMX0ZST05UX1BPUkNIX1JFRwkJMHgz QQo+Pj4+ICsjZGVmaW5lIFNOX0RBVEFfRk9STUFUX1JFRwkJCTB4NUIKPj4+PiArCj4+Pj4gKyNk ZWZpbmUgTUlOX0RTSV9DTEtfRlJFUV9NSFoJNDAKPj4+PiArCj4+Pj4gKy8qIGZ1ZGdlIGZhY3Rv ciByZXF1aXJlZCB0byBhY2NvdW50IGZvciA4Yi8xMGIgZW5jb2RpbmcgKi8KPj4+PiArI2RlZmlu ZSBEUF9DTEtfRlVER0VfTlVNCTEwCj4+Pj4gKyNkZWZpbmUgRFBfQ0xLX0ZVREdFX0RFTgk4Cj4+ Pj4gKwo+Pj4+ICsjZGVmaW5lIERQUExMX0NMS19TUkNfUkVGQ0xLCTAKPj4+PiArI2RlZmluZSBE UFBMTF9DTEtfU1JDX0RTSUNMSwkxCj4+Pj4gKwo+Pj4+ICsjZGVmaW5lIFNOX0RTSUFfUkVGQ0xL X09GRlNFVAkxCj4+Pj4gKyNkZWZpbmUgU05fRFNJQV9MQU5FX09GRlNFVAkzCj4+Pj4gKyNkZWZp bmUgU05fRFBfTEFORV9PRkZTRVQJNAo+Pj4+ICsjZGVmaW5lIFNOX0RQX0RBVEFfUkFURV9PRkZT RVQJNQo+Pj4+ICsjZGVmaW5lIFNOX1RJTUlOR19ISUdIX09GRlNFVAk4Cj4+Pj4gKwo+Pj4+ICsj ZGVmaW5lIFNOX0VOQUJMRV9WSURfU1RSRUFNX0JJVAlCSVQoMykKPj4+PiArI2RlZmluZSBTTl9E U0lBX05VTV9MQU5FU19CSVRTCQkoQklUKDQpIHwgQklUKDMpKQo+Pj4+ICsjZGVmaW5lIFNOX0RQ X05VTV9MQU5FU19CSVRTCQkoQklUKDUpIHwgQklUKDQpKQo+Pj4+ICsjZGVmaW5lIFNOX0RQX0RB VEFfUkFURV9CSVRTCQkoQklUKDcpIHwgQklUKDYpIHwgQklUKDUpKQo+Pj4+ICsjZGVmaW5lIFNO X0hQRF9ESVNBQkxFX0JJVAkJQklUKDApCj4+Pj4gKwo+Pj4+ICtzdHJ1Y3QgdGlfc25fYnJpZGdl IHsKPj4+PiArCXN0cnVjdCBkZXZpY2UJCQkqZGV2Owo+Pj4+ICsJc3RydWN0IHJlZ21hcAkJCSpy ZWdtYXA7Cj4+PiBJIGhhdmUgbm90IHNwb3R0ZWQgd2hvIGFkdmlzZWQgeW91IHRvIHVzZSByZWdt YXAsIEkgdGhpbmsgdW5sZXNzIHlvdQo+Pj4gc2hhcmUgaGFyZHdhcmUgYmV0d2VlbiBtdWx0aXBs ZSBkcml2ZXJzIGl0IGlzIGFuIG92ZXJraWxsLgo+Pj4gQXJlIHRoZXJlIGFueSBmZWF0dXJlcyBv ZiB0aGlzIGludGVyZmFjZSB0byB1c2UgaXQgb3ZlciBpMmM/Cj4+PiAKPj4gU2luY2Ugd2UgYXJl IHVzaW5nIHRoZSBpMmMgbWVjaGFuaXNtIHRvIHVwZGF0ZSB0aGUgY29udHJvbCByZWdpc3RlcnMK Pj4gb2YgdGhlIGJyaWRnZSwgdGhvdWdodCB0aGF0IHJlZ21hcCBnaXZlcyBhIHByb3BlciBpbnRl cmZhY2UgZm9yIAo+PiBoYW5kbGluZwo+PiBhbGwgdGhlIHJlZ2lzdGVyIGNvbnRyb2wgb3BlcmF0 aW9ucyBsaWtlIHJlYWQvd3JpdGUvdXBkYXRlX2JpdC9tYXNrIAo+PiBldGMuCj4+IEFsc28gbW9z dCBvZiB0aGUgYnJpZGdlIGRyaXZlciBwcmVzZW50IGluIGRybSBhcmUgdXNpbmcgdGhpcyAKPj4g bWVjaGFuaXNtLgo+IAo+IFllcywgSSBrbm93IG1hbnkgcHBsIGFkdmVydGlzZXMgaXQgYnV0IGFs c28gbWFueSBhcmUgYWdhaW5zdCB1c2luZyBpdCAKPiBpbgo+IHN1Y2ggc2ltcGxlIGNhc2VzLiBB bnl3YXkgSSBkbyBub3Qgd2FudCB0byBmb3JjZSB5b3UgdG8gcmVtb3ZlIGl0LCBkbwo+IHdoYXQg eW91IHByZWZlci4KPiAKPj4gCj4+Pj4gKwlzdHJ1Y3QgZHJtX2JyaWRnZQkJYnJpZGdlOwo+Pj4+ ICsJc3RydWN0IGRybV9jb25uZWN0b3IJCWNvbm5lY3RvcjsKPj4+PiArCXN0cnVjdCBkZXZpY2Vf bm9kZQkJKmhvc3Rfbm9kZTsKPj4+PiArCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UJCSpkc2k7Cj4+ Pj4gKwlzdHJ1Y3QgY2xrCQkJKnJlZmNsazsKPj4+PiArCXN0cnVjdCBkcm1fcGFuZWwJCSpwYW5l bDsKPj4+PiArCXN0cnVjdCBncGlvX2Rlc2MJCSplbmFibGVfZ3BpbzsKPj4+PiArCXVuc2lnbmVk IGludAkJCW51bV9zdXBwbGllczsKPj4+PiArCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhCSpz dXBwbGllczsKPj4+PiArCXN0cnVjdCBpMmNfYWRhcHRlcgkJKmRkYzsKPj4+PiArCXN0cnVjdCBk cm1fZGlzcGxheV9tb2RlCQljdXJyX21vZGU7Cj4+PiBJIHRoaW5rIHlvdSBjYW4gZHJvcCB0aGlz IGZpZWxkLCBjdXJyZW50IG1vZGUgaXMgYWx3YXlzIGF2YWlsYWJsZSAKPj4+IHZpYToKPj4+IAo+ Pj4gcGRhdGEtPmJyaWRnZS5lbmNvZGVyLmNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlOwo+Pj4g Cj4+PiAKPj4gT2suIGkgd2lsbCByZW1vdmUgdGhpcyBjdXJyX21vZGUuCj4+IAo+Pj4+ICt9Owo+ Pj4+ICsKPj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfcmFuZ2UgdGlfc25fYnJpZGdl X3ZvbGF0aWxlX3Jhbmdlc1tdID0gewo+Pj4+ICsJeyAucmFuZ2VfbWluID0gMCwgLnJhbmdlX21h eCA9IDB4ZmYgfSwKPj4+PiArfTsKPj4+PiArCj4+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVn bWFwX2FjY2Vzc190YWJsZSB0aV9zbl9icmlkZ2Vfdm9sYXRpbGVfdGFibGUgCj4+Pj4gPQo+Pj4+ IHsKPj4+PiArCS55ZXNfcmFuZ2VzID0gdGlfc25fYnJpZGdlX3ZvbGF0aWxlX3JhbmdlcywKPj4+ PiArCS5uX3llc19yYW5nZXMgPSBBUlJBWV9TSVpFKHRpX3NuX2JyaWRnZV92b2xhdGlsZV9yYW5n ZXMpLAo+Pj4+ICt9Owo+Pj4+ICsKPj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29u ZmlnIHRpX3NuX2JyaWRnZV9yZWdtYXBfY29uZmlnID0gewo+Pj4+ICsJLnJlZ19iaXRzID0gOCwK Pj4+PiArCS52YWxfYml0cyA9IDgsCj4+Pj4gKwkudm9sYXRpbGVfdGFibGUgPSAmdGlfc25fYnJp ZGdlX3ZvbGF0aWxlX3RhYmxlLAo+Pj4+ICsJLmNhY2hlX3R5cGUgPSBSRUdDQUNIRV9OT05FLAo+ Pj4+ICt9Owo+Pj4+ICsKPj4+PiArI2lmZGVmIENPTkZJR19QTQo+Pj4gUGxlYXNlIG1hcmsgUE0g Y2FsbGJhY2tzIHdpdGggX19tYXliZV91bnVzZWQgaW5zdGVhZCBpZiBjb25kaXRpb25hbAo+Pj4g bWFjcm9zLgo+Pj4gCj4+IE9rLgo+PiAKPj4+PiArc3RhdGljIGludCB0aV9zbl9icmlkZ2VfcmVz dW1lKHN0cnVjdCBkZXZpY2UgKmRldikKPj4+PiArewo+Pj4+ICsJc3RydWN0IHRpX3NuX2JyaWRn ZSAqcGRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPj4+PiArCWludCByZXQgPSAwOwo+Pj4+ ICsKPj4+PiArCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShwZGF0YS0+bnVtX3N1cHBsaWVz LCBwZGF0YS0+c3VwcGxpZXMpOwo+Pj4+ICsJaWYgKHJldCkgewo+Pj4+ICsJCURSTV9FUlJPUigi ZmFpbGVkIHRvIGVuYWJsZSBzdXBwbGllcyAlZFxuIiwgcmV0KTsKPj4+PiArCQlyZXR1cm4gcmV0 Owo+Pj4+ICsJfQo+Pj4+ICsKPj4+PiArCWdwaW9kX3NldF92YWx1ZShwZGF0YS0+ZW5hYmxlX2dw aW8sIDEpOwo+Pj4+ICsKPj4+PiArCXJldHVybiByZXQ7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0 YXRpYyBpbnQgdGlfc25fYnJpZGdlX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQo+Pj4+ICt7 Cj4+Pj4gKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYp Owo+Pj4+ICsJaW50IHJldCA9IDA7Cj4+Pj4gKwo+Pj4+ICsJZ3Bpb2Rfc2V0X3ZhbHVlKHBkYXRh LT5lbmFibGVfZ3BpbywgMCk7Cj4+Pj4gKwo+Pj4+ICsJcmV0ID0gcmVndWxhdG9yX2J1bGtfZGlz YWJsZShwZGF0YS0+bnVtX3N1cHBsaWVzLCAKPj4+PiBwZGF0YS0+c3VwcGxpZXMpOwo+Pj4+ICsJ aWYgKHJldCkKPj4+PiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBkaXNhYmxlIHN1cHBsaWVzICVk XG4iLCByZXQpOwo+Pj4+ICsKPj4+PiArCXJldHVybiByZXQ7Cj4+Pj4gK30KPj4+PiArI2VuZGlm Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgdGlfc25fYnJpZGdl X3BtX29wcyA9IHsKPj4+PiArCVNFVF9SVU5USU1FX1BNX09QUyh0aV9zbl9icmlkZ2Vfc3VzcGVu ZCwgdGlfc25fYnJpZGdlX3Jlc3VtZSwgCj4+Pj4gTlVMTCkKPj4+PiArfTsKPj4+PiArCj4+Pj4g Ky8qIENvbm5lY3RvciBmdW5jcyAqLwo+Pj4+ICtzdGF0aWMgc3RydWN0IHRpX3NuX2JyaWRnZSAq Cj4+Pj4gK2Nvbm5lY3Rvcl90b190aV9zbl9icmlkZ2Uoc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvcikKPj4+PiArewo+Pj4+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihjb25uZWN0b3IsIHN0 cnVjdCB0aV9zbl9icmlkZ2UsIGNvbm5lY3Rvcik7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRp YyBpbnQgdGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0 b3IKPj4+PiAqY29ubmVjdG9yKQo+Pj4+ICt7Cj4+Pj4gKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpw ZGF0YSA9IGNvbm5lY3Rvcl90b190aV9zbl9icmlkZ2UoY29ubmVjdG9yKTsKPj4+PiArCXN0cnVj dCBkcm1fcGFuZWwgKnBhbmVsID0gcGRhdGEtPnBhbmVsOwo+Pj4+ICsJc3RydWN0IGVkaWQgKmVk aWQ7Cj4+Pj4gKwl1MzIgbnVtX21vZGVzOwo+Pj4+ICsKPj4+PiArCWlmIChwYW5lbCkgewo+Pj4+ ICsJCURSTV9ERUJVR19LTVMoImdldCBtb2RlIGZyb20gY29ubmVjdGVkIGRybV9wYW5lbFxuIik7 Cj4+Pj4gKwkJcmV0dXJuIGRybV9wYW5lbF9nZXRfbW9kZXMocGFuZWwpOwo+Pj4+ICsJfQo+Pj4+ ICsKPj4+PiArCWlmICghcGRhdGEtPmRkYykKPj4+PiArCQlyZXR1cm4gMDsKPj4+PiArCj4+Pj4g KwlwbV9ydW50aW1lX2dldF9zeW5jKHBkYXRhLT5kZXYpOwo+Pj4+ICsJZWRpZCA9IGRybV9nZXRf ZWRpZChjb25uZWN0b3IsIHBkYXRhLT5kZGMpOwo+Pj4+ICsJcG1fcnVudGltZV9wdXRfc3luYyhw ZGF0YS0+ZGV2KTsKPj4+PiArCWlmICghZWRpZCkKPj4+PiArCQlyZXR1cm4gMDsKPj4+PiArCj4+ Pj4gKwlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29ubmVjdG9yLCBl ZGlkKTsKPj4+PiArCW51bV9tb2RlcyA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3IsIGVk aWQpOwo+Pj4+ICsJa2ZyZWUoZWRpZCk7Cj4+Pj4gKwo+Pj4+ICsJcmV0dXJuIG51bV9tb2RlczsK Pj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIGVudW0gZHJtX21vZGVfc3RhdHVzCj4+Pj4gK3Rp X3NuX2JyaWRnZV9jb25uZWN0b3JfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yLAo+Pj4+ICsJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQo+Pj4+ ICt7Cj4+Pj4gKwkvKiBtYXhpbXVtIHN1cHBvcnRlZCByZXNvbHV0aW9uIGlzIDRLIGF0IDYwIGZw cyAqLwo+Pj4+ICsJaWYgKG1vZGUtPmNsb2NrID4gNTk0MDAwKQo+Pj4+ICsJCXJldHVybiBNT0RF X0NMT0NLX0hJR0g7Cj4+Pj4gKwo+Pj4+ICsJcmV0dXJuIE1PREVfT0s7Cj4+Pj4gK30KPj4+PiAr Cj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MKPj4+PiB0aV9z bl9icmlkZ2VfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKPj4+PiArCS5nZXRfbW9kZXMgPSB0 aV9zbl9icmlkZ2VfY29ubmVjdG9yX2dldF9tb2RlcywKPj4+PiArCS5tb2RlX3ZhbGlkID0gdGlf c25fYnJpZGdlX2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkLAo+Pj4+ICt9Owo+Pj4+ICsKPj4+PiArc3Rh dGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKPj4+PiArdGlfc25fYnJpZGdlX2Nvbm5lY3Rv cl9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbAo+Pj4+IGZvcmNl KQo+Pj4+ICt7Cj4+Pj4gKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGNvbm5lY3Rvcl90 b190aV9zbl9icmlkZ2UoY29ubmVjdG9yKTsKPj4+PiArCj4+Pj4gKwkvKioKPj4+PiArCSAqIFRP RE86IEN1cnJlbnRseSBpZiBkcm1fcGFuZWwgaXMgcHJlc2VudCwgdGhlbiBhbHdheXMKPj4+PiAr CSAqIHJldHVybiB0aGUgc3RhdHVzIGFzIGNvbm5lY3RlZC4gTmVlZCB0byBhZGQgc3VwcG9ydCB0 byBkZXRlY3QKPj4+PiArCSAqIGRldmljZSBzdGF0ZSBmb3Igbm8gcGFuZWwoaG90IHBsdWdnYWJs ZSkgc2NlbmFyaW9zLgo+Pj4+ICsJICovCj4+Pj4gKwlpZiAocGRhdGEtPnBhbmVsKQo+Pj4+ICsJ CXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKPj4+PiArCWVsc2UKPj4+PiArCQly ZXR1cm4gY29ubmVjdG9yX3N0YXR1c191bmtub3duOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgCj4+Pj4gdGlfc25fYnJpZGdlX2Nv bm5lY3Rvcl9mdW5jcwo+Pj4+ID0gewo+Pj4+ICsJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3By b2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCj4+Pj4gKwkuZGV0ZWN0ID0gdGlfc25fYnJpZGdl X2Nvbm5lY3Rvcl9kZXRlY3QsCj4+Pj4gKwkuZGVzdHJveSA9IGRybV9jb25uZWN0b3JfY2xlYW51 cCwKPj4+PiArCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKPj4+ PiArCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0KPj4+PiBkcm1fYXRvbWljX2hlbHBlcl9jb25u ZWN0b3JfZHVwbGljYXRlX3N0YXRlLAo+Pj4+ICsJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJt X2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCj4+Pj4gK307Cj4+Pj4gKwo+ Pj4+ICtzdGF0aWMgc3RydWN0IHRpX3NuX2JyaWRnZSAqYnJpZGdlX3RvX3RpX3NuX2JyaWRnZShz dHJ1Y3QgCj4+Pj4gZHJtX2JyaWRnZQo+Pj4+ICpicmlkZ2UpCj4+Pj4gK3sKPj4+PiArCXJldHVy biBjb250YWluZXJfb2YoYnJpZGdlLCBzdHJ1Y3QgdGlfc25fYnJpZGdlLCBicmlkZ2UpOwo+Pj4+ ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9yZWFkX2RldmljZV9yZXYo c3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCj4+Pj4gK3sKPj4+PiArCXVuc2lnbmVkIGludCBy ZXYgPSAwOwo+Pj4+ICsJaW50IHJldCA9IDA7Cj4+Pj4gKwo+Pj4+ICsJcmV0ID0gcmVnbWFwX3Jl YWQocGRhdGEtPnJlZ21hcCwgU05fREVWSUNFX1JFVl9SRUcsICZyZXYpOwo+Pj4+ICsJaWYgKHJl dCkgewo+Pj4+ICsJCURSTV9FUlJPUigiUmV2aXNpb24gcmVhZCBmYWlsZWQgJWRcbiIsIHJldCk7 Cj4+Pj4gKwkJcmV0dXJuIHJldDsKPj4+PiArCX0KPj4+PiArCj4+Pj4gKwlpZiAocmV2ICE9IFNO X0JSSURHRV9SRVZJU0lPTl9JRCkgewo+Pj4+ICsJCURSTV9FUlJPUigidGlfc25fYnJpZGdlIHJl dmlzaW9uIGlkOiAweCV4IG1pc21hdGNoXG4iLCByZXYpOwo+Pj4+ICsJCXJldCA9IC1FSU5WQUw7 Cj4+Pj4gKwl9Cj4+PiBBcmUgeW91IHN1cmUgaXQgd29uJ3Qgd29yayB3aXRoIG90aGVyIHJldmlz aW9ucz8KPj4+IAo+PiBUaGUgZGF0YXNoZWV0IHdoaWNoIGkgaGF2ZSwgbWVudGlvbnMgdGhlIHJl dmlzaW9uIHRvIGJlIDB4Mi4gSSBhbSBub3QKPj4gc3VyZSB3aGV0aGVyIHRoaXMgZHJpdmVyIHdv cmtzIHdpdGggb3RoZXIgcmV2aXNpb25zLCB0aGF0J3Mgd2h5IGkgaGF2ZQo+PiBwdXQgdGhpcyBj aGVjay4KPj4gQWxzbyB0aGlzIGNoZWNrIGhlbHBzIHRvIGNvbmZpcm0gaWYgdGhlIGdwaW8gYW5k IHN1cHBsaWVzIG9mIHRoZSAKPj4gYnJpZGdlCj4+IGNoaXAgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5 IGVuYWJsZWQgbm90IGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgcmVhZC4KPiAKPiBTbyBtYXliZSBi ZXR0ZXIgY29udmVydCBEUk1fRVJST1IgdG8gd2FybmluZyBhbmQgY29udGludWUuCj4gCk9rLiBJ IHdpbGwgcmVtb3ZlIHRoZSBmYWlsdXJlIHJldHVybiBpbiBjYXNlIG9mIGlkIG1pc21hdGNoIGFu ZCBqdXN0IApwcmludCBhIHdhcm5pbmcuCj4+IAo+Pj4+ICsKPj4+PiArCXJldHVybiByZXQ7Cj4+ Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdGlfc25fYnJpZGdl X3N1cHBseV9uYW1lc1tdID0gewo+Pj4+ICsJInZjY2EiLAo+Pj4+ICsJInZjYyIsCj4+Pj4gKwki dmNjaW8iLAo+Pj4+ICsJInZwbGwiLAo+Pj4+ICt9Owo+Pj4+ICsKPj4+PiArc3RhdGljIGludCB0 aV9zbl9icmlkZ2VfcGFyc2VfcmVndWxhdG9ycyhzdHJ1Y3QgdGlfc25fYnJpZGdlIAo+Pj4+ICpw ZGF0YSkKPj4+PiArewo+Pj4+ICsJdW5zaWduZWQgaW50IGk7Cj4+Pj4gKwo+Pj4+ICsJcGRhdGEt Pm51bV9zdXBwbGllcyA9IEFSUkFZX1NJWkUodGlfc25fYnJpZGdlX3N1cHBseV9uYW1lcyk7Cj4+ Pj4gKwo+Pj4+ICsJcGRhdGEtPnN1cHBsaWVzID0gZGV2bV9rY2FsbG9jKHBkYXRhLT5kZXYsIHBk YXRhLT5udW1fc3VwcGxpZXMsCj4+Pj4gKwkJCQkgICAgICAgc2l6ZW9mKCpwZGF0YS0+c3VwcGxp ZXMpLCBHRlBfS0VSTkVMKTsKPj4+IEl0IHNlZW1zIHRoZXJlIGlzIGNvbnN0YW50IG51bWJlciBv ZiBzdXBwbGllcy4gWW91IGNhbiBjb252ZXJ0IAo+Pj4gc3VwcGxpZXMKPj4+IHRvIGFycmF5IGFu ZCBhdm9pZCBkeW5hbWljIGFsbG9jYXRpb24uCj4+PiAKPj4gSnVzdCB3YW50IHRvIHVuZGVyc3Rh bmQgaGVyZSB3aGF0IGlzIHRoZSBpc3N1ZSB3aXRoIGR5bmFtaWMgYWxsb2NhdGlvbgo+PiBoZXJl Pwo+PiBXZSBhcmUgdXNpbmcgZGV2aWNlIG1hbmFnZWQgYWxsb2NhdGlvbiwgc28gdGhlIHJlc291 cmNlIG1hbmFnZW1lbnQgCj4+IHdpbGwKPj4gYmUgcHJvcGVybHkKPj4gZG9uZSBieSBrZXJuZWwu Cj4gCj4gSnVzdCBsZXNzIGNvZGUsIG5vIGV4dHJhIGFsbG9jYXRpb25zLCBubyBleHRyYSByZXNv dXJjZSBtYW5hZ2VtZW50Lgo+IER5bmFtaWMgYWxsb2NhdGlvbnMgaW4gc3VjaCBjYXNlIG1ha2Vz IHNlbnNlIG9ubHkgaWYgYXJyYXkgc2l6ZSBpcwo+IGNvbXB1dGVkIGluIHJ1bnRpbWUuCj4gCk9r Lgo+PiAKPj4+PiArCWlmICghcGRhdGEtPnN1cHBsaWVzKQo+Pj4+ICsJCXJldHVybiAtRU5PTUVN Owo+Pj4+ICsKPj4+PiArCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX3N1cHBsaWVzOyBpKysp Cj4+Pj4gKwkJcGRhdGEtPnN1cHBsaWVzW2ldLnN1cHBseSA9IHRpX3NuX2JyaWRnZV9zdXBwbHlf bmFtZXNbaV07Cj4+Pj4gKwo+Pj4+ICsJcmV0dXJuIGRldm1fcmVndWxhdG9yX2J1bGtfZ2V0KHBk YXRhLT5kZXYsCj4+Pj4gKwkJCQkgICAgICAgcGRhdGEtPm51bV9zdXBwbGllcywgcGRhdGEtPnN1 cHBsaWVzKTsKPj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIGludCB0aV9zbl9icmlkZ2VfYXR0 YWNoX3BhbmVsKHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhKQo+Pj4+ICt7Cj4+Pj4gKwlzdHJ1 Y3QgZGV2aWNlX25vZGUgKnBhbmVsX25vZGUsICpwb3J0LCAqZW5kcG9pbnQ7Cj4+Pj4gKwo+Pj4+ ICsJcGRhdGEtPnBhbmVsID0gTlVMTDsKPj4+PiArCXBvcnQgPSBvZl9ncmFwaF9nZXRfcG9ydF9i eV9pZChwZGF0YS0+ZGV2LT5vZl9ub2RlLCAxKTsKPj4+PiArCWlmICghcG9ydCkKPj4+PiArCQly ZXR1cm4gMDsKPj4+PiArCj4+Pj4gKwllbmRwb2ludCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKHBv cnQsICJlbmRwb2ludCIpOwo+Pj4+ICsJb2Zfbm9kZV9wdXQocG9ydCk7Cj4+Pj4gKwlpZiAoIWVu ZHBvaW50KSB7Cj4+Pj4gKwkJRFJNX0VSUk9SKCJubyBvdXRwdXQgZW5kcG9pbnQgZm91bmRcbiIp Owo+Pj4+ICsJCXJldHVybiAtRUlOVkFMOwo+Pj4+ICsJfQo+Pj4gV2h5IG5vdCBvZl9ncmFwaF9n ZXRfZW5kcG9pbnRfYnlfcmVncyA/Cj4+PiAKPj4+PiArCj4+Pj4gKwlwYW5lbF9ub2RlID0gb2Zf Z3JhcGhfZ2V0X3JlbW90ZV9wb3J0X3BhcmVudChlbmRwb2ludCk7Cj4+Pj4gKwlvZl9ub2RlX3B1 dChlbmRwb2ludCk7Cj4+Pj4gKwlpZiAoIXBhbmVsX25vZGUpIHsKPj4+PiArCQlEUk1fRVJST1Io Im5vIG91dHB1dCBub2RlIGZvdW5kXG4iKTsKPj4+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4+PiAr CX0KPj4+IE9yIGV2ZW4gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9ub2RlPwo+Pj4gCj4+Pj4gKwo+Pj4+ ICsJcGRhdGEtPnBhbmVsID0gb2ZfZHJtX2ZpbmRfcGFuZWwocGFuZWxfbm9kZSk7Cj4+Pj4gKwlv Zl9ub2RlX3B1dChwYW5lbF9ub2RlKTsKPj4+IE9yIGV2ZW4sIGV2ZW4gZHJtX29mX2ZpbmRfcGFu ZWxfb3JfYnJpZGdlID8gOikKPj4gT2suIGkgd2lsbCB1c2UgZHJtX29mX2ZpbmRfcGFuZWxfb3Jf YnJpZGdlKCkgaGVyZS4KPj4gCj4+Pj4gKwlpZiAoIXBkYXRhLT5wYW5lbCkgewo+Pj4+ICsJCURS TV9FUlJPUigibm8gcGFuZWwgbm9kZSBmb3VuZFxuIik7Cj4+Pj4gKwkJcmV0dXJuIC1FSU5WQUw7 Cj4+PiBZb3Ugc2hvdWxkIHByb2JhYmx5IHJldHVybiAtRVBST0JFX0RFRkVSIGhlcmUuCj4+PiAK Pj4gVGhpcyBBUEkgbWF5IG5vdCBiZSBjYWxsZWQgZnJvbSBwcm9iZSgpLCBpcyBpdCBvayBpZiB3 ZSByZXR1cm4KPj4gLUVQUk9CRV9ERUZFUiBoZXJlPwo+IAo+IEFoaCwgT0ssIGJ1dCBpbiBzdWNo IGNhc2UgdGhpcyBpcyBpbmNvcnJlY3QsIHNlZSBiZWxvdy4KPiAKPj4gCj4+Pj4gKwl9Cj4+Pj4g Kwlkcm1fcGFuZWxfYXR0YWNoKHBkYXRhLT5wYW5lbCwgJnBkYXRhLT5jb25uZWN0b3IpOwo+Pj4+ ICsJRFJNX0RFQlVHX0tNUygiZHJtIHBhbmVsIGF0dGFjaGVkIHRvIHRpX3NuX2JyaWRnZVxuIik7 Cj4+Pj4gKwo+Pj4+ICsJcmV0dXJuIDA7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyBpbnQg dGlfc25fYnJpZGdlX2F0dGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+Pj4+ICt7Cj4+ Pj4gKwlzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdDsKPj4+PiArCXN0cnVjdCBtaXBpX2RzaV9k ZXZpY2UgKmRzaTsKPj4+PiArCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gYnJpZGdlX3Rv X3RpX3NuX2JyaWRnZShicmlkZ2UpOwo+Pj4+ICsJaW50IHJldDsKPj4+PiArCWNvbnN0IHN0cnVj dCBtaXBpX2RzaV9kZXZpY2VfaW5mbyBpbmZvID0geyAudHlwZSA9ICJ0aV9zbl9icmlkZ2UiLAo+ Pj4+ICsJCQkJCQkgICAuY2hhbm5lbCA9IDAsCj4+Pj4gKwkJCQkJCSAgIC5ub2RlID0gTlVMTCwK Pj4+PiArCQkJCQkJIH07Cj4+Pj4gKwo+Pj4+ICsJaWYgKCFicmlkZ2UtPmVuY29kZXIpIHsKPj4+ PiArCQlEUk1fRVJST1IoIlBhcmVudCBlbmNvZGVyIG9iamVjdCBub3QgZm91bmRcbiIpOwo+Pj4+ ICsJCXJldHVybiAtRU5PREVWOwo+Pj4+ICsJfQo+Pj4+ICsKPj4+PiArCS8qIEhQRCBub3Qgc3Vw cG9ydGVkICovCj4+Pj4gKwlwZGF0YS0+Y29ubmVjdG9yLnBvbGxlZCA9IDA7Cj4+PiBZb3UgY2Fu IHNraXAgdGhpcyBsaW5lLgo+Pj4gCj4+IE9LLgo+PiAKPj4+PiArCj4+Pj4gKwlyZXQgPSBkcm1f Y29ubmVjdG9yX2luaXQoYnJpZGdlLT5kZXYsICZwZGF0YS0+Y29ubmVjdG9yLAo+Pj4+ICsJCQkJ ICZ0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2Z1bmNzLAo+Pj4+ICsJCQkJIERSTV9NT0RFX0NPTk5F Q1RPUl9lRFApOwo+Pj4+ICsJaWYgKHJldCkgewo+Pj4+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRv IGluaXRpYWxpemUgY29ubmVjdG9yIHdpdGggZHJtXG4iKTsKPj4+PiArCQlyZXR1cm4gcmV0Owo+ Pj4+ICsJfQo+Pj4+ICsKPj4+PiArCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcGRhdGEtPmNv bm5lY3RvciwKPj4+PiArCQkJCSAmdGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3Mp Owo+Pj4+ICsJZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZwZGF0YS0+Y29ubmVj dG9yLAo+Pj4+IGJyaWRnZS0+ZW5jb2Rlcik7Cj4+Pj4gKwo+Pj4+ICsJaG9zdCA9IG9mX2ZpbmRf bWlwaV9kc2lfaG9zdF9ieV9ub2RlKHBkYXRhLT5ob3N0X25vZGUpOwo+Pj4+ICsJaWYgKCFob3N0 KSB7Cj4+Pj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZmluZCBkc2kgaG9zdFxuIik7Cj4+Pj4g KwkJcmV0dXJuIC1FTk9ERVY7Cj4+PiBBZ2FpbiAtRVBST0JFX0RFRkVSLgo+Pj4gCj4+IFRoaXMg QVBJIG1heSBub3QgYmUgY2FsbGVkIGZyb20gcHJvYmUoKSwgaXMgaXQgb2sgaWYgd2UgcmV0dXJu Cj4+IC1FUFJPQkVfREVGRVIgaGVyZT8KPiAKPiBkaXR0bwo+IAo+PiAKPj4+PiArCX0KPj4+PiAr Cj4+Pj4gKwlkc2kgPSBtaXBpX2RzaV9kZXZpY2VfcmVnaXN0ZXJfZnVsbChob3N0LCAmaW5mbyk7 Cj4+Pj4gKwlpZiAoSVNfRVJSKGRzaSkpIHsKPj4+PiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBj cmVhdGUgZHNpIGRldmljZVxuIik7Cj4+Pj4gKwkJcmV0ID0gUFRSX0VSUihkc2kpOwo+Pj4+ICsJ CXJldHVybiByZXQ7Cj4+Pj4gKwl9Cj4+Pj4gKwo+Pj4+ICsJLyogVE9ETzogc2V0dGluZyB0byA0 IGxhbmVzIGFsd2F5cyBmb3Igbm93ICovCj4+Pj4gKwlkc2ktPmxhbmVzID0gNDsKPj4+PiArCWRz aS0+Zm9ybWF0ID0gTUlQSV9EU0lfRk1UX1JHQjg4ODsKPj4+PiArCWRzaS0+bW9kZV9mbGFncyA9 IE1JUElfRFNJX01PREVfVklERU8gfAo+Pj4+IE1JUElfRFNJX01PREVfVklERU9fU1lOQ19QVUxT RSB8Cj4+Pj4gKwkJCSAgTUlQSV9EU0lfTU9ERV9FT1RfUEFDS0VUIHwgTUlQSV9EU0lfTU9ERV9W SURFT19IU0U7Cj4+Pj4gKwo+Pj4+ICsJcmV0ID0gbWlwaV9kc2lfYXR0YWNoKGRzaSk7Cj4+Pj4g KwlpZiAocmV0IDwgMCkgewo+Pj4+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGF0dGFjaCBkc2kg dG8gaG9zdFxuIik7Cj4+Pj4gKwkJbWlwaV9kc2lfZGV2aWNlX3VucmVnaXN0ZXIoZHNpKTsKPj4+ PiArCQlyZXR1cm4gcmV0Owo+Pj4+ICsJfQo+Pj4+ICsKPj4+PiArCXBkYXRhLT5kc2kgPSBkc2k7 Cj4+Pj4gKwo+Pj4+ICsJRFJNX0RFQlVHX0tNUygidGlfc25fYnJpZGdlIGF0dGFjaGVkIHRvIGRz aVxuIik7Cj4+Pj4gKwkvKiBhdHRhY2ggcGFuZWwgdG8gYnJpZGdlICovCj4+Pj4gKwl0aV9zbl9i cmlkZ2VfYXR0YWNoX3BhbmVsKHBkYXRhKTsKPj4+IMKgCj4+PiBGdW5jdGlvbiBjYW4gZmFpbCwg eW91IHNob3VsZCBoYW5kbGUgaXQuCj4+PiAKPj4gVGhpcyBpcyBub3QgZmF0YWwsIGlmIHRoaXMg ZnVuY3Rpb24gZmFpbHMgdGhlbiB3ZSBhc3N1bWUgdGhlcmUgaXMgbm8gCj4+IGVkcAo+PiBwYW5l bCBhdHRhY2hlZCB0byB0aGlzIGJyaWRnZS4KPiAKPiBTbyBpdCBzZWVtcyB3cm9uZyB0byBtZS4g WW91IGRvIG5vdCBoYXZlIGd1YXJhbnRlZSB0aGF0IHBhbmVsIGRyaXZlciBpcwo+IGJvdW5kIGF0 IHRoaXMgbW9tZW50LiBTbyBpbiBjYXNlIG9mIGRpZmZlcmVudCBkcml2ZXIgYmluZGluZyBvcmRl ciB5b3UKPiB3aWxsIGVuZCB1cCB3aXRoIGluY29ycmVjdCBzZXR1cDogYnJpZGdlIHdpbGwgd29y ayB3aXRoIGFzc3VtcHRpb24gCj4gdGhlcmUKPiBpcyBubyBwYW5lbCBiZWhpbmQgaXQsIGJ1dCB0 aGUgcGFuZWwgaXMgdGhlcmUsIGl0IHdpbGwgYmUganVzdCBwcm9iZWQgCj4gbGF0ZXIuCj4gCj4g SSB0aGluayB0aGUgcHJvcGVyIHNvbHV0aW9uIGhlcmUgaXMgdG8gZG8gbm90IGFkdmVydGlzZSBi cmlkZ2UgKGllIGNhbGwKPiBkcm1fYnJpZGdlX2FkZCksIHVudGlsIGFsbCByZXF1aXJlZCByZXNv dXJjZXMgYXJlIHByZXNlbnQsIGluY2x1ZGluZyAKPiBEU0kKPiBob3N0IGFuZCBwYW5lbC4gQW5k IHRvIG1ha2UgaXQgY2xlYXIsIGlmIHRoZSBwYW5lbCBpcyBkZWZpbmVkIGluCj4gYmluZGluZ3Mg aXQgbWVhbnMgaXQgaXMgcmVxdWlyZWQuCj4gCj4gCk9rLiBTbyBpIHdpbGwgbW92ZSB0aGlzIGF0 dGFjaCBjb2RlIHRvIHRpX3NuX2JyaWRnZV9wcm9iZSgpIGFuZCBpZiBpIApkb250IGdldCB0aGUg cGFuZWwgdGhlcmUgaSB3aWxsIHJldHVybiAtRVBST0JFX0RFRkVSLgpDdXJyZW50bHkgSFBEIGlz IG5vdCBzdXBwb3J0ZWQgaW4gdGhlIGRyaXZlciwgc28gd2Ugd2lsbCByZWx5IG9uIHRoZSAKcGFu ZWwgdG8gc3VjY2Vzc2Z1bGx5IGZpbmlzaCBicmlkZ2UgZHJpdmVyJ3MgcHJvYmUuCj4+IAo+Pj4+ ICsKPj4+PiArCXJldHVybiAwOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgdm9pZCB0aV9z bl9icmlkZ2VfbW9kZV9zZXQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKPj4+PiArCQkJCSAg ICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKPj4+PiArCQkJCSAgICBzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqYWRqX21vZGUpCj4+Pj4gK3sKPj4+PiArCXN0cnVjdCB0aV9zbl9icmlk Z2UgKnBkYXRhID0gYnJpZGdlX3RvX3RpX3NuX2JyaWRnZShicmlkZ2UpOwo+Pj4+ICsKPj4+PiAr CURSTV9ERUJVRygibW9kZV9zZXQ6IGhkaXNwbGF5PSVkLCB2ZGlzcGxheT0lZCwgdnJlZnJlc2g9 JWQsCj4+Pj4gY2xvY2s9JWRcbiIsCj4+Pj4gKwkJYWRqX21vZGUtPmhkaXNwbGF5LCBhZGpfbW9k ZS0+dmRpc3BsYXksCj4+Pj4gKwkJYWRqX21vZGUtPnZyZWZyZXNoLCBhZGpfbW9kZS0+Y2xvY2sp Owo+Pj4+ICsKPj4+PiArCWRybV9tb2RlX2NvcHkoJnBkYXRhLT5jdXJyX21vZGUsIGFkal9tb2Rl KTsKPj4+PiArfQo+Pj4gVGhpcyBjYWxsYmFjayBjYW4gYmUgZHJvcHBlZCwgc2VlIGNvbW1lbnQg Zm9yIGN1cnJfbW9kZS4KPj4+IAo+Pj4+ICsKPj4+PiArc3RhdGljIHZvaWQgdGlfc25fYnJpZGdl X2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPj4+PiArewo+Pj4+ICsJc3RydWN0 IHRpX3NuX2JyaWRnZSAqcGRhdGEgPSBicmlkZ2VfdG9fdGlfc25fYnJpZGdlKGJyaWRnZSk7Cj4+ Pj4gKwlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCA9IHBkYXRhLT5wYW5lbDsKPj4+PiArCj4+Pj4g KwlpZiAocGFuZWwpIHsKPj4+PiArCQlkcm1fcGFuZWxfZGlzYWJsZShwYW5lbCk7Cj4+Pj4gKwkJ ZHJtX3BhbmVsX3VucHJlcGFyZShwYW5lbCk7Cj4+Pj4gKwl9Cj4+Pj4gKwo+Pj4+ICsJLyogZGlz YWJsZSB2aWRlbyBzdHJlYW0gKi8KPj4+PiArCXJlZ21hcF91cGRhdGVfYml0cyhwZGF0YS0+cmVn bWFwLCBTTl9FTkhfRlJBTUVfUkVHLAo+Pj4+ICsJCQkgICBTTl9FTkFCTEVfVklEX1NUUkVBTV9C SVQsIDApOwo+Pj4+ICsJLyogc2VtaSBhdXRvIGxpbmsgdHJhaW5pbmcgbW9kZSBPRkYgKi8KPj4+ PiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9NTF9UWF9NT0RFX1JFRywgMCk7Cj4+ Pj4gKwkvKiBkaXNhYmxlIERQIFBMTCAqLwo+Pj4+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdt YXAsIFNOX1BMTF9FTkFCTEVfUkVHLCAwKTsKPj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIHUz MiB0aV9zbl9icmlkZ2VfZ2V0X2RzaV9mcmVxKHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhKQo+ Pj4+ICt7Cj4+Pj4gKwl1MzIgYml0X3JhdGVfa2h6LCBjbGtfZnJlcV9raHo7Cj4+Pj4gKwlzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9ICZwZGF0YS0+Y3Vycl9tb2RlOwo+Pj4+ICsKPj4+ PiArCWJpdF9yYXRlX2toeiA9IG1vZGUtPmNsb2NrICoKPj4+PiArCQkJbWlwaV9kc2lfcGl4ZWxf Zm9ybWF0X3RvX2JwcChwZGF0YS0+ZHNpLT5mb3JtYXQpOwo+Pj4+ICsJY2xrX2ZyZXFfa2h6ID0g Yml0X3JhdGVfa2h6IC8gKHBkYXRhLT5kc2ktPmxhbmVzICogMik7Cj4+Pj4gKwo+Pj4+ICsJcmV0 dXJuIGNsa19mcmVxX2toejsKPj4+PiArfQo+Pj4+ICsKPj4+PiArI2RlZmluZSBSRUZDTEtfTFVU X1NJWkUJNQo+Pj4+ICsKPj4+PiArLyogY2xrIGZyZXF1ZW5jaWVzIHN1cHBvcnRlZCBieSBicmlk Z2UgaW4gSHogaW4gY2FzZSBkZXJpdmVkIGZyb20KPj4+PiBSRUZDTEsgcGluICovCj4+Pj4gK3N0 YXRpYyBjb25zdCB1MzIgdGlfc25fYnJpZGdlX3JlZmNsa19sdXRbXSA9IHsKPj4+PiArCTEyMDAw MDAwLAo+Pj4+ICsJMTkyMDAwMDAsCj4+Pj4gKwkyNjAwMDAwMCwKPj4+PiArCTI3MDAwMDAwLAo+ Pj4+ICsJMzg0MDAwMDAsCj4+Pj4gK307Cj4+Pj4gKwo+Pj4+ICsvKiBjbGsgZnJlcXVlbmNpZXMg c3VwcG9ydGVkIGJ5IGJyaWRnZSBpbiBIeiBpbiBjYXNlIGRlcml2ZWQgZnJvbQo+Pj4+IERBQ1Av TiBwaW4gKi8KPj4+PiArc3RhdGljIGNvbnN0IHUzMiB0aV9zbl9icmlkZ2VfZHNpY2xrX2x1dFtd ID0gewo+Pj4+ICsJNDY4MDAwMDAwLAo+Pj4+ICsJMzg0MDAwMDAwLAo+Pj4+ICsJNDE2MDAwMDAw LAo+Pj4+ICsJNDg2MDAwMDAwLAo+Pj4+ICsJNDYwODAwMDAwLAo+Pj4+ICt9Owo+Pj4+ICsKPj4+ PiArc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX3NldF9yZWZjbGsoc3RydWN0IHRpX3NuX2JyaWRn ZSAqcGRhdGEpCj4+Pj4gK3sKPj4+PiArCWludCBpID0gMDsKPj4+PiArCXU4IHJlZmNsa19zcmM7 Cj4+Pj4gKwl1MzIgcmVmY2xrX3JhdGU7Cj4+Pj4gKwljb25zdCB1MzIgKnJlZmNsa19sdXQ7Cj4+ Pj4gKwo+Pj4+ICsJaWYgKHBkYXRhLT5yZWZjbGspIHsKPj4+PiArCQlyZWZjbGtfc3JjID0gRFBQ TExfQ0xLX1NSQ19SRUZDTEs7Cj4+Pj4gKwkJcmVmY2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUocGRh dGEtPnJlZmNsayk7Cj4+Pj4gKwkJcmVmY2xrX2x1dCA9IHRpX3NuX2JyaWRnZV9yZWZjbGtfbHV0 Owo+Pj4+ICsJCWNsa19wcmVwYXJlX2VuYWJsZShwZGF0YS0+cmVmY2xrKTsKPj4+PiArCX0gZWxz ZSB7Cj4+Pj4gKwkJcmVmY2xrX3NyYyA9IERQUExMX0NMS19TUkNfRFNJQ0xLOwo+Pj4+ICsJCXJl ZmNsa19yYXRlID0gdGlfc25fYnJpZGdlX2dldF9kc2lfZnJlcShwZGF0YSkgKiAxMDAwOwo+Pj4+ ICsJCXJlZmNsa19sdXQgPSB0aV9zbl9icmlkZ2VfZHNpY2xrX2x1dDsKPj4+PiArCX0KPj4+PiAr Cj4+Pj4gKwkvKiBmb3IgaSBlcXVhbHMgdG8gUkVGQ0xLX0xVVF9TSVpFIG1lYW5zIGRlZmF1bHQg ZnJlcXVlbmN5ICovCj4+Pj4gKwlmb3IgKGkgPSAwOyBpIDwgUkVGQ0xLX0xVVF9TSVpFOyBpKysp Cj4+Pj4gKwkJaWYgKHJlZmNsa19sdXRbaV0gPT0gcmVmY2xrX3JhdGUpCj4+Pj4gKwkJCWJyZWFr Owo+Pj4+ICsKPj4+PiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9SRUZDTEtfRlJF UV9SRUcsCj4+Pj4gKwkJICAgICAocmVmY2xrX3NyYyB8IChpIDw8IFNOX0RTSUFfUkVGQ0xLX09G RlNFVCkpKTsKPj4+PiArfQo+Pj4+ICsKPj4+PiArLyoqCj4+Pj4gKyAqIExVVCBpbmRleCBjb3Jy ZXNwb25kcyB0byByZWdpc3RlciB2YWx1ZSBhbmQKPj4+PiArICogTFVUIHZhbHVlcyBjb3JyZXNw b25kcyB0byBkcCBkYXRhIHJhdGUgc3VwcG9ydGVkCj4+Pj4gKyAqIGJ5IHRoZSBicmlkZ2UgaW4g TWJwcyB1bml0Lgo+Pj4+ICsgKi8KPj4+PiArc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB0aV9z bl9icmlkZ2VfZHBfcmF0ZV9sdXRbXSA9IHsKPj4+PiArCTAsIDE2MjAsIDIxNjAsIDI0MzAsIDI3 MDAsIDMyNDAsIDQzMjAsIDU0MDAKPj4+PiArfTsKPj4+PiArCj4+Pj4gK3N0YXRpYyB2b2lkIHRp X3NuX2JyaWRnZV9zZXRfZHNpX2RwX3JhdGUoc3RydWN0IHRpX3NuX2JyaWRnZSAKPj4+PiAqcGRh dGEpCj4+Pj4gK3sKPj4+PiArCXVuc2lnbmVkIGludCBiaXRfcmF0ZV9taHosIGNsa19mcmVxX21o eiwgZHBfcmF0ZV9taHo7Cj4+Pj4gKwl1bnNpZ25lZCBpbnQgdmFsID0gMCwgaSA9IDA7Cj4+Pj4g KwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9ICZwZGF0YS0+Y3Vycl9tb2RlOwo+Pj4+ ICsKPj4+PiArCS8qIHNldCBEU0lBIGNsayBmcmVxdWVuY3kgKi8KPj4+PiArCWJpdF9yYXRlX21o eiA9IChtb2RlLT5jbG9jayAvIDEwMDApICoKPj4+PiArCQkJbWlwaV9kc2lfcGl4ZWxfZm9ybWF0 X3RvX2JwcChwZGF0YS0+ZHNpLT5mb3JtYXQpOwo+Pj4+ICsJY2xrX2ZyZXFfbWh6ID0gYml0X3Jh dGVfbWh6IC8gKHBkYXRhLT5kc2ktPmxhbmVzICogMik7Cj4+Pj4gKwo+Pj4+ICsJLyogZm9yIGVh Y2ggaW5jcmVtZW50IGluIHZhbCwgZnJlcXVlbmN5IGluY3JlYXNlcyBieSA1TUh6ICovCj4+Pj4g Kwl2YWwgPSAoTUlOX0RTSV9DTEtfRlJFUV9NSFogLyA1KSArCj4+Pj4gKwkJKCgoY2xrX2ZyZXFf bWh6IC0gTUlOX0RTSV9DTEtfRlJFUV9NSFopIC8gNSkgJiAweEZGKTsKPj4+PiArCXJlZ21hcF93 cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9EU0lBX0NMS19GUkVRX1JFRywgdmFsKTsKPj4+PiArCj4+ Pj4gKwkvKiBzZXQgRFAgZGF0YSByYXRlICovCj4+Pj4gKwlkcF9yYXRlX21oeiA9ICgoYml0X3Jh dGVfbWh6IC8gcGRhdGEtPmRzaS0+bGFuZXMpICoKPj4+PiBEUF9DTEtfRlVER0VfTlVNKSAvCj4+ Pj4gKwkJCQkJCQlEUF9DTEtfRlVER0VfREVOOwo+Pj4+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUodGlfc25fYnJpZGdlX2RwX3JhdGVfbHV0KTsgaSsrKQo+Pj4+ICsJCWlmICh0aV9zbl9i cmlkZ2VfZHBfcmF0ZV9sdXRbaV0gPiBkcF9yYXRlX21oeikKPj4+PiArCQkJYnJlYWs7Cj4+Pj4g KwlpZiAoaSA9PSBBUlJBWV9TSVpFKHRpX3NuX2JyaWRnZV9kcF9yYXRlX2x1dCkpCj4+Pj4gKwkJ aS0tOyAvKiBzZXQgdG8gbWF4aW11bSBwb3NzaWJsZSAqLwo+Pj4gSnVzdCB1c2U6IGZvciAoaSA9 IDA7IGkgPCBBUlJBWV9TSVpFKHRpX3NuX2JyaWRnZV9kcF9yYXRlX2x1dCkgLSAxOwo+Pj4gaSsr KQo+Pj4gCj4+IE9rLgo+PiAKPj4+PiArCj4+Pj4gKwlyZWdtYXBfdXBkYXRlX2JpdHMocGRhdGEt PnJlZ21hcCwgU05fREFUQVJBVEVfQ09ORklHX1JFRywKPj4+PiArCQkJICAgU05fRFBfREFUQV9S QVRFX0JJVFMsIGkgPDwgU05fRFBfREFUQV9SQVRFX09GRlNFVCk7Cj4+Pj4gK30KPj4+PiArCj4+ Pj4gK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9zZXRfdmlkZW9fdGltaW5ncyhzdHJ1Y3QgdGlf c25fYnJpZGdlCj4+Pj4gKnBkYXRhKQo+Pj4+ICt7Cj4+Pj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZSA9ICZwZGF0YS0+Y3Vycl9tb2RlOwo+Pj4+ICsKPj4+PiArCXJlZ21hcF93cml0 ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfQUNUSVZFX0xJTkVfTEVOR1RIX0xPV19SRUcsCj4+Pj4g KwkJICAgICBtb2RlLT5oZGlzcGxheSAmIDB4RkYpOwo+Pj4+ICsJcmVnbWFwX3dyaXRlKHBkYXRh LT5yZWdtYXAsIFNOX0NIQV9BQ1RJVkVfTElORV9MRU5HVEhfSElHSF9SRUcsCj4+Pj4gKwkJICAg ICAobW9kZS0+aGRpc3BsYXkgPj4gU05fVElNSU5HX0hJR0hfT0ZGU0VUKSAmIDB4RkYpOwo+Pj4+ ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0NIQV9WRVJUSUNBTF9ESVNQTEFZX1NJ WkVfTE9XX1JFRywKPj4+PiArCQkgICAgIG1vZGUtPnZkaXNwbGF5ICYgMHhGRik7Cj4+Pj4gKwly ZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX1ZFUlRJQ0FMX0RJU1BMQVlfU0laRV9I SUdIX1JFRywKPj4+PiArCQkgICAgIChtb2RlLT52ZGlzcGxheSA+PiBTTl9USU1JTkdfSElHSF9P RkZTRVQpICYgMHhGRik7Cj4+Pj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hB X0hTWU5DX1BVTFNFX1dJRFRIX0xPV19SRUcsCj4+Pj4gKwkJICAgICAobW9kZS0+aHN5bmNfZW5k IC0gbW9kZS0+aHN5bmNfc3RhcnQpICYgMHhGRik7Cj4+Pj4gKwlyZWdtYXBfd3JpdGUocGRhdGEt PnJlZ21hcCwgU05fQ0hBX0hTWU5DX1BVTFNFX1dJRFRIX0hJR0hfUkVHLAo+Pj4+ICsJCSAgICAg KChtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5oc3luY19zdGFydCkgPj4KPj4+PiArCQkgICAgICBT Tl9USU1JTkdfSElHSF9PRkZTRVQpICYgMHhGRik7Cj4+Pj4gKwlyZWdtYXBfd3JpdGUocGRhdGEt PnJlZ21hcCwgU05fQ0hBX1ZTWU5DX1BVTFNFX1dJRFRIX0xPV19SRUcsCj4+Pj4gKwkJICAgICAo bW9kZS0+dnN5bmNfZW5kIC0gbW9kZS0+dnN5bmNfc3RhcnQpICYgMHhGRik7Cj4+Pj4gKwlyZWdt YXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX1ZTWU5DX1BVTFNFX1dJRFRIX0hJR0hfUkVH LAo+Pj4+ICsJCSAgICAgKChtb2RlLT52c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFydCkgPj4K Pj4+PiArCQkgICAgICBTTl9USU1JTkdfSElHSF9PRkZTRVQpICYgMHhGRik7Cj4+Pj4gKwlyZWdt YXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX0hPUklaT05UQUxfQkFDS19QT1JDSF9SRUcs Cj4+Pj4gKwkJICAgICAobW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5bmNfZW5kKSAmIDB4RkYpOwo+ Pj4+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0NIQV9WRVJUSUNBTF9CQUNLX1BP UkNIX1JFRywKPj4+PiArCQkgICAgIChtb2RlLT52dG90YWwgLSBtb2RlLT52c3luY19lbmQpICYg MHhGRik7Cj4+Pj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX0hPUklaT05U QUxfRlJPTlRfUE9SQ0hfUkVHLAo+Pj4+ICsJCSAgICAgKG1vZGUtPmhzeW5jX3N0YXJ0IC0gbW9k ZS0+aGRpc3BsYXkpICYgMHhGRik7Cj4+Pj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwg U05fQ0hBX1ZFUlRJQ0FMX0ZST05UX1BPUkNIX1JFRywKPj4+PiArCQkgICAgIChtb2RlLT52c3lu Y19zdGFydCAtIG1vZGUtPnZkaXNwbGF5KSAmIDB4RkYpOwo+Pj4+ICsJdXNsZWVwX3JhbmdlKDEw MDAwLCAxMDUwMCk7IC8qIDEwbXMgZGVsYXkgcmVjb21tZW5kZWQgYnkgc3BlYyAqLwo+Pj4+ICt9 Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgdm9pZCB0aV9zbl9icmlkZ2VfZW5hYmxlKHN0cnVjdCBkcm1f YnJpZGdlICpicmlkZ2UpCj4+Pj4gK3sKPj4+PiArCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRh ID0gYnJpZGdlX3RvX3RpX3NuX2JyaWRnZShicmlkZ2UpOwo+Pj4+ICsJc3RydWN0IGRybV9wYW5l bCAqcGFuZWwgPSBwZGF0YS0+cGFuZWw7Cj4+Pj4gKwl1bnNpZ25lZCBpbnQgdmFsID0gMDsKPj4+ PiArCj4+Pj4gKwlpZiAocGFuZWwpIHsKPj4+PiArCQlkcm1fcGFuZWxfcHJlcGFyZShwYW5lbCk7 Cj4+Pj4gKwkJLyogaW4gY2FzZSBkcm1fcGFuZWwgaXMgY29ubmVjdGVkIHRoZW4gSFBEIGlzIG5v dCBzdXBwb3J0ZWQgKi8KPj4+PiArCQlyZWdtYXBfdXBkYXRlX2JpdHMocGRhdGEtPnJlZ21hcCwg U05fSFBEX0RJU0FCTEVfUkVHLAo+Pj4+ICsJCQkJICAgU05fSFBEX0RJU0FCTEVfQklULCBTTl9I UERfRElTQUJMRV9CSVQpOwo+Pj4+ICsJfQo+Pj4+ICsKPj4+PiArCS8qIERTSV9BIGxhbmUgY29u ZmlnICovCj4+Pj4gKwl2YWwgPSAoNCAtIHBkYXRhLT5kc2ktPmxhbmVzKSA8PCBTTl9EU0lBX0xB TkVfT0ZGU0VUOwo+Pj4+ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKHBkYXRhLT5yZWdtYXAsIFNOX0RT SV9MQU5FU19SRUcsCj4+Pj4gKwkJCSAgIFNOX0RTSUFfTlVNX0xBTkVTX0JJVFMsIHZhbCk7Cj4+ Pj4gKwo+Pj4+ICsJLyogRFAgbGFuZSBjb25maWcgKi8KPj4+PiArCXZhbCA9IChwZGF0YS0+ZHNp LT5sYW5lcyAtIDEpIDw8IFNOX0RQX0xBTkVfT0ZGU0VUOwo+Pj4+ICsJcmVnbWFwX3VwZGF0ZV9i aXRzKHBkYXRhLT5yZWdtYXAsIFNOX1NTQ19DT05GSUdfUkVHLAo+Pj4+ICsJCQkgICBTTl9EUF9O VU1fTEFORVNfQklUUywgdmFsKTsKPj4+PiArCj4+Pj4gKwkvKiBzZXQgZHNpL2RwIGNsayBmcmVx dWVuY3kgdmFsdWUgKi8KPj4+PiArCXRpX3NuX2JyaWRnZV9zZXRfZHNpX2RwX3JhdGUocGRhdGEp Owo+Pj4+ICsKPj4+PiArCS8qIGVuYWJsZSBEUCBQTEwgKi8KPj4+PiArCXJlZ21hcF93cml0ZShw ZGF0YS0+cmVnbWFwLCBTTl9QTExfRU5BQkxFX1JFRywgMSk7Cj4+Pj4gKwl1c2xlZXBfcmFuZ2Uo MTAwMDAsIDEwNTAwKTsgLyogMTBtcyBkZWxheSByZWNvbW1lbmRlZCBieSBzcGVjICovCj4+Pj4g Kwo+Pj4+ICsJLyoqCj4+Pj4gKwkgKiBUaGUgU042NURTSTg2IG9ubHkgc3VwcG9ydHMgQVNTUiBE aXNwbGF5IEF1dGhlbnRpY2F0aW9uIG1ldGhvZAo+Pj4+IGFuZAo+Pj4+ICsJICogdGhpcyBtZXRo b2QgaXMgZW5hYmxlZCBieSBkZWZhdWx0LiBBbiBlRFAgcGFuZWwgbXVzdCBzdXBwb3J0IAo+Pj4+ IHRoaXMKPj4+PiArCSAqIGF1dGhlbnRpY2F0aW9uIG1ldGhvZC4gV2UgbmVlZCB0byBlbmFibGUg dGhpcyBtZXRob2QgaW4gdGhlIGVEUAo+Pj4+IHBhbmVsCj4+Pj4gKwkgKiBhdCBEaXNwbGF5UG9y dCBhZGRyZXNzIDB4MDAxMEEgcHJpb3IgdG8gbGluayB0cmFpbmluZy4KPj4+PiArCSAqLwo+Pj4+ ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0FVWF9XREFUQTBfUkVHLCAweDAxKTsK Pj4+PiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9BVVhfQUREUl8xOV8xNl9SRUcs IDB4MDApOwo+Pj4+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0FVWF9BRERSXzE1 XzhfUkVHLCAweDAxKTsKPj4+PiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9BVVhf QUREUl83XzBfUkVHLCAweDBBKTsKPj4+PiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBT Tl9BVVhfTEVOR1RIX1JFRywgMHgwMSk7Cj4+Pj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21h cCwgU05fQVVYX0NNRF9SRUcsIDB4ODEpOwo+Pj4+ICsJdXNsZWVwX3JhbmdlKDEwMDAwLCAxMDUw MCk7IC8qIDEwbXMgZGVsYXkgcmVjb21tZW5kZWQgYnkgc3BlYyAqLwo+Pj4+ICsKPj4+PiArCS8q IFNlbWkgYXV0byBsaW5rIHRyYWluaW5nIG1vZGUgKi8KPj4+PiArCXJlZ21hcF93cml0ZShwZGF0 YS0+cmVnbWFwLCBTTl9NTF9UWF9NT0RFX1JFRywgMHgwQSk7Cj4+Pj4gKwltc2xlZXAoMjApOyAv KiAyMG1zIGRlbGF5IHJlY29tbWVuZGVkIGJ5IHNwZWMgKi8KPj4+PiArCj4+Pj4gKwkvKiBjb25m aWcgdmlkZW8gcGFyYW1ldGVycyAqLwo+Pj4+ICsJdGlfc25fYnJpZGdlX3NldF92aWRlb190aW1p bmdzKHBkYXRhKTsKPj4+PiArCj4+Pj4gKwkvKiBlbmFibGUgdmlkZW8gc3RyZWFtICovCj4+Pj4g KwlyZWdtYXBfdXBkYXRlX2JpdHMocGRhdGEtPnJlZ21hcCwgU05fRU5IX0ZSQU1FX1JFRywKPj4+ PiArCQkJICAgU05fRU5BQkxFX1ZJRF9TVFJFQU1fQklULCBTTl9FTkFCTEVfVklEX1NUUkVBTV9C SVQpOwo+Pj4+ICsKPj4+PiArCWlmIChwYW5lbCkKPj4+PiArCQlkcm1fcGFuZWxfZW5hYmxlKHBh bmVsKTsKPj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX3ByZV9l bmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPj4+PiArewo+Pj4+ICsJc3RydWN0IHRp X3NuX2JyaWRnZSAqcGRhdGEgPSBicmlkZ2VfdG9fdGlfc25fYnJpZGdlKGJyaWRnZSk7Cj4+Pj4g Kwo+Pj4+ICsJcG1fcnVudGltZV9nZXRfc3luYyhwZGF0YS0+ZGV2KTsKPj4+PiArCj4+Pj4gKwkv KiBjb25maWd1cmUgYnJpZGdlIENMS19TUkMgYW5kIHJlZl9jbGsgKi8KPj4+PiArCXRpX3NuX2Jy aWRnZV9zZXRfcmVmY2xrKHBkYXRhKTsKPj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIHZvaWQg dGlfc25fYnJpZGdlX3Bvc3RfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+Pj4+ ICt7Cj4+Pj4gKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90b190aV9zbl9i cmlkZ2UoYnJpZGdlKTsKPj4+PiArCj4+Pj4gKwlpZiAocGRhdGEtPnJlZmNsaykKPj4+PiArCQlj bGtfZGlzYWJsZV91bnByZXBhcmUocGRhdGEtPnJlZmNsayk7Cj4+Pj4gKwo+Pj4+ICsJcG1fcnVu dGltZV9wdXRfc3luYyhwZGF0YS0+ZGV2KTsKPj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIGNv bnN0IHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIHRpX3NuX2JyaWRnZV9mdW5jcyA9IHsKPj4+PiAr CS5hdHRhY2ggPSB0aV9zbl9icmlkZ2VfYXR0YWNoLAo+Pj4+ICsJLnByZV9lbmFibGUgPSB0aV9z bl9icmlkZ2VfcHJlX2VuYWJsZSwKPj4+PiArCS5lbmFibGUgPSB0aV9zbl9icmlkZ2VfZW5hYmxl LAo+Pj4+ICsJLmRpc2FibGUgPSB0aV9zbl9icmlkZ2VfZGlzYWJsZSwKPj4+PiArCS5wb3N0X2Rp c2FibGUgPSB0aV9zbl9icmlkZ2VfcG9zdF9kaXNhYmxlLAo+Pj4+ICsJLm1vZGVfc2V0ID0gdGlf c25fYnJpZGdlX21vZGVfc2V0LAo+Pj4+ICt9Owo+Pj4+ICsKPj4+PiArc3RhdGljIGludCB0aV9z bl9icmlkZ2VfcGFyc2VfZHNpX2hvc3Qoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCj4+Pj4g K3sKPj4+PiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGF0YS0+ZGV2LT5vZl9ub2RlOwo+ Pj4+ICsJc3RydWN0IGRldmljZV9ub2RlICplbmRfbm9kZTsKPj4+PiArCj4+Pj4gKwllbmRfbm9k ZSA9IG9mX2dyYXBoX2dldF9lbmRwb2ludF9ieV9yZWdzKG5wLCAwLCAwKTsKPj4+PiArCWlmICgh ZW5kX25vZGUpIHsKPj4+PiArCQlEUk1fRVJST1IoInJlbW90ZSBlbmRwb2ludCBub3QgZm91bmRc biIpOwo+Pj4+ICsJCXJldHVybiAtRU5PREVWOwo+Pj4+ICsJfQo+Pj4+ICsKPj4+PiArCXBkYXRh LT5ob3N0X25vZGUgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50KGVuZF9ub2RlKTsK Pj4+PiArCW9mX25vZGVfcHV0KGVuZF9ub2RlKTsKPj4+PiArCWlmICghcGRhdGEtPmhvc3Rfbm9k ZSkgewo+Pj4+ICsJCURSTV9FUlJPUigicmVtb3RlIG5vZGUgbm90IGZvdW5kXG4iKTsKPj4+PiAr CQlyZXR1cm4gLUVOT0RFVjsKPj4+PiArCX0KPj4+PiArCW9mX25vZGVfcHV0KHBkYXRhLT5ob3N0 X25vZGUpOwo+Pj4gV2h5IG5vdCBvZl9ncmFwaF9nZXRfcmVtb3RlX25vZGUgPwo+Pj4gCj4+IEp1 c3QgZm9yIG15IHVuZGVyc3RhbmRpbmcsIGlzIG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJl bnQgbm90Cj4+IHJlY29tbWVuZGVkPyB3aGF0IGlzIHRoZSBiZW5lZml0IG9mIHVzaW5nIG9mX2dy YXBoX2dldF9yZW1vdGVfbm9kZSgpPwo+IAo+IAo+IEJlY2F1c2UgaXQgZW5jYXBzdWxhdGVzIGJv dGggb2ZfZ3JhcGhfZ2V0X2VuZHBvaW50X2J5X3JlZ3MgYW5kCj4gb2ZfZ3JhcGhfZ2V0X3JlbW90 ZV9wb3J0X3BhcmVudCB3aXRoIGNvcnJlY3Qgbm9kZSByZWZlcmVuY2UgbWFuYWdlbWVudC4KPiAK T2suCj4+IAo+Pj4+ICsKPj4+PiArCXJldHVybiAwOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0 aWMgaW50IHRpX3NuX2JyaWRnZV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAo+Pj4+ ICsJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKPj4+PiArewo+Pj4+ICsJc3RydWN0 IHRpX3NuX2JyaWRnZSAqcGRhdGE7Cj4+Pj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRkY19ub2Rl Owo+Pj4+ICsJaW50IHJldCA9IDA7Cj4+Pj4gKwo+Pj4+ICsJaWYgKCFpMmNfY2hlY2tfZnVuY3Rp b25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpIHsKPj4+PiArCQlEUk1fRVJS T1IoImRldmljZSBkb2Vzbid0IHN1cHBvcnQgSTJDXG4iKTsKPj4+PiArCQlyZXR1cm4gLUVOT0RF VjsKPj4+PiArCX0KPj4+PiArCj4+Pj4gKwlwZGF0YSA9IGRldm1fa3phbGxvYygmY2xpZW50LT5k ZXYsIHNpemVvZihzdHJ1Y3QgdGlfc25fYnJpZGdlKSwKPj4+PiArCQkJICAgICBHRlBfS0VSTkVM KTsKPj4+PiArCWlmICghcGRhdGEpCj4+Pj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4+Pj4gKwo+Pj4+ ICsJcGRhdGEtPmRldiA9ICZjbGllbnQtPmRldjsKPj4+PiArCWRldl9zZXRfZHJ2ZGF0YSgmY2xp ZW50LT5kZXYsIHBkYXRhKTsKPj4+PiArCj4+Pj4gKwlwZGF0YS0+cmVnbWFwID0gZGV2bV9yZWdt YXBfaW5pdF9pMmMoY2xpZW50LAo+Pj4+ICsJCQkJCSAgICAgJnRpX3NuX2JyaWRnZV9yZWdtYXBf Y29uZmlnKTsKPj4+PiArCWlmIChJU19FUlIocGRhdGEtPnJlZ21hcCkpIHsKPj4+PiArCQlEUk1f RVJST1IoInJlZ21hcCBpMmMgaW5pdCBmYWlsZWRcbiIpOwo+Pj4+ICsJCXJldHVybiBQVFJfRVJS KHBkYXRhLT5yZWdtYXApOwo+Pj4+ICsJfQo+Pj4+ICsKPj4+PiArCXBkYXRhLT5lbmFibGVfZ3Bp byA9IGRldm1fZ3Bpb2RfZ2V0KHBkYXRhLT5kZXYsCj4+Pj4gKwkJCQkJICAgICJlbmFibGUiLCBH UElPRF9PVVRfTE9XKTsKPj4+PiArCWlmIChJU19FUlIocGRhdGEtPmVuYWJsZV9ncGlvKSkgewo+ Pj4+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBlbmFibGUgZ3BpbyBmcm9tIERUXG4iKTsK Pj4+PiArCQlyZXQgPSBQVFJfRVJSKHBkYXRhLT5lbmFibGVfZ3Bpbyk7Cj4+Pj4gKwkJcmV0dXJu IHJldDsKPj4+PiArCX0KPj4+PiArCj4+Pj4gKwlyZXQgPSB0aV9zbl9icmlkZ2VfcGFyc2VfcmVn dWxhdG9ycyhwZGF0YSk7Cj4+Pj4gKwlpZiAocmV0KSB7Cj4+Pj4gKwkJRFJNX0VSUk9SKCJmYWls ZWQgdG8gcGFyc2UgcmVndWxhdG9yc1xuIik7Cj4+Pj4gKwkJcmV0dXJuIHJldDsKPj4+PiArCX0K Pj4+PiArCj4+Pj4gKwlyZXQgPSB0aV9zbl9icmlkZ2VfcGFyc2VfZHNpX2hvc3QocGRhdGEpOwo+ Pj4+ICsJaWYgKHJldCkKPj4+PiArCQlyZXR1cm4gcmV0Owo+Pj4+ICsKPj4+PiArCXBtX3J1bnRp bWVfZW5hYmxlKHBkYXRhLT5kZXYpOwo+Pj4+ICsJcG1fcnVudGltZV9nZXRfc3luYyhwZGF0YS0+ ZGV2KTsKPj4+PiArCXJldCA9IHRpX3NuX2JyaWRnZV9yZWFkX2RldmljZV9yZXYocGRhdGEpOwo+ Pj4+ICsJcG1fcnVudGltZV9wdXRfc3luYyhwZGF0YS0+ZGV2KTsKPj4+IEkgd291bGQgcHV0IGl0 IGludG8gKHByZSkgZW5hYmxlIGNhbGxiYWNrcywgbWF5YmUgd2l0aCBtYXJraW5nIGl0IHRvCj4+ PiBydW4KPj4+IG9ubHkgb25jZS4KPj4+IAo+PiBkbyB5b3UgbWVhbiB3ZSBzaG91bGQgcHV0IHRo ZSB0aV9zbl9icmlkZ2VfcmVhZF9kZXZpY2VfcmV2KCkgaW4gcHJlCj4+IGVuYWJsZSBjYWxsYmFj az8KPiAKPiBZZXMsIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHN3aXRjaGluZyBvbi9vZmYgZGV2aWNl Lgo+IApPay4gaW4gdGhhdCBjYXNlIGkgaGF2ZSBhZGQgYSByZXYgZmllbGQgaW4gdGhlIHByaXZh dGUgZGF0YSBhbmQgY2hlY2sgCmZvciB0aGlzIGJlIG5vbi16ZXJvIGV2ZXJ5IHRpbWUgcHJlX2Vu YWJsZSBpcyBjYWxsZWQgZWxzZSByZWFkIHRoZSByZXYuCj4gUmVnYXJkcwo+IEFuZHJ6ZWoKPiAK Pj4gCj4+PiBSZWdhcmRzCj4+PiBBbmRyemVqCj4+PiAKPj4+PiArCWlmIChyZXQpCj4+Pj4gKwkJ Z290byBlcnJfcmV2X3JlYWQ7Cj4+Pj4gKwo+Pj4+ICsJcGRhdGEtPnJlZmNsayA9IGRldm1fY2xr X2dldChwZGF0YS0+ZGV2LCAicmVmY2xrIik7Cj4+Pj4gKwo+Pj4+ICsJZGRjX25vZGUgPSBvZl9w YXJzZV9waGFuZGxlKHBkYXRhLT5kZXYtPm9mX25vZGUsICJkZGMtaTJjLWJ1cyIsIAo+Pj4+IDAp Owo+Pj4+ICsJaWYgKGRkY19ub2RlKSB7Cj4+Pj4gKwkJcGRhdGEtPmRkYyA9IG9mX2ZpbmRfaTJj X2FkYXB0ZXJfYnlfbm9kZShkZGNfbm9kZSk7Cj4+Pj4gKwkJb2Zfbm9kZV9wdXQoZGRjX25vZGUp Owo+Pj4+ICsJCWlmICghcGRhdGEtPmRkYykgewo+Pj4+ICsJCQlEUk1fREVCVUdfS01TKCJmYWls ZWQgdG8gcmVhZCBkZGMgbm9kZVxuIik7Cj4+Pj4gKwkJCXJldCA9IC1FUFJPQkVfREVGRVI7Cj4+ Pj4gKwkJCWdvdG8gZXJyX3Jldl9yZWFkOwo+Pj4+ICsJCX0KPj4+PiArCX0gZWxzZSB7Cj4+Pj4g KwkJRFJNX0RFQlVHX0tNUygibm8gZGRjIHByb3BlcnR5IGZvdW5kXG4iKTsKPj4+PiArCX0KPj4+ PiArCj4+Pj4gKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBwZGF0YSk7Cj4+Pj4gKwo+Pj4+ ICsJcGRhdGEtPmJyaWRnZS5mdW5jcyA9ICZ0aV9zbl9icmlkZ2VfZnVuY3M7Cj4+Pj4gKwlwZGF0 YS0+YnJpZGdlLm9mX25vZGUgPSBjbGllbnQtPmRldi5vZl9ub2RlOwo+Pj4+ICsKPj4+PiArCWRy bV9icmlkZ2VfYWRkKCZwZGF0YS0+YnJpZGdlKTsKPj4+PiArCj4+Pj4gKwlyZXR1cm4gMDsKPj4+ PiArCj4+Pj4gK2Vycl9yZXZfcmVhZDoKPj4+PiArCXBtX3J1bnRpbWVfZGlzYWJsZShwZGF0YS0+ ZGV2KTsKPj4+PiArCXJldHVybiByZXQ7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyBpbnQg dGlfc25fYnJpZGdlX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQo+Pj4+ICt7Cj4+ Pj4gKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGll bnQpOwo+Pj4+ICsKPj4+PiArCWlmICghcGRhdGEpCj4+Pj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ Pj4gKwo+Pj4+ICsJbWlwaV9kc2lfZGV0YWNoKHBkYXRhLT5kc2kpOwo+Pj4+ICsJbWlwaV9kc2lf ZGV2aWNlX3VucmVnaXN0ZXIocGRhdGEtPmRzaSk7Cj4+Pj4gKwo+Pj4+ICsJZHJtX2JyaWRnZV9y ZW1vdmUoJnBkYXRhLT5icmlkZ2UpOwo+Pj4+ICsJcG1fcnVudGltZV9kaXNhYmxlKHBkYXRhLT5k ZXYpOwo+Pj4+ICsJaTJjX3B1dF9hZGFwdGVyKHBkYXRhLT5kZGMpOwo+Pj4+ICsKPj4+PiArCXJl dHVybiAwOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgc3RydWN0IGkyY19kZXZpY2VfaWQg dGlfc25fYnJpZGdlX2lkW10gPSB7Cj4+Pj4gKwl7ICJ0aSxzbjY1ZHNpODYiLCAwfSwKPj4+PiAr CXt9LAo+Pj4+ICt9Owo+Pj4+ICtNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgdGlfc25fYnJpZGdl X2lkKTsKPj4+PiArCj4+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRpX3Nu X2JyaWRnZV9tYXRjaF90YWJsZVtdID0gewo+Pj4+ICsJey5jb21wYXRpYmxlID0gInRpLHNuNjVk c2k4NiJ9LAo+Pj4+ICsJe30sCj4+Pj4gK307Cj4+Pj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2Ys IHRpX3NuX2JyaWRnZV9tYXRjaF90YWJsZSk7Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgc3RydWN0IGky Y19kcml2ZXIgdGlfc25fYnJpZGdlX2RyaXZlciA9IHsKPj4+PiArCS5kcml2ZXIgPSB7Cj4+Pj4g KwkJLm5hbWUgPSAidGlfc242NWRzaTg2IiwKPj4+PiArCQkub2ZfbWF0Y2hfdGFibGUgPSB0aV9z bl9icmlkZ2VfbWF0Y2hfdGFibGUsCj4+Pj4gKwkJLnBtID0gJnRpX3NuX2JyaWRnZV9wbV9vcHMs Cj4+Pj4gKwl9LAo+Pj4+ICsJLnByb2JlID0gdGlfc25fYnJpZGdlX3Byb2JlLAo+Pj4+ICsJLnJl bW92ZSA9IHRpX3NuX2JyaWRnZV9yZW1vdmUsCj4+Pj4gKwkuaWRfdGFibGUgPSB0aV9zbl9icmlk Z2VfaWQsCj4+Pj4gK307Cj4+Pj4gKwo+Pj4+ICttb2R1bGVfaTJjX2RyaXZlcih0aV9zbl9icmlk Z2VfZHJpdmVyKTsKPj4+PiArTU9EVUxFX0RFU0NSSVBUSU9OKCJzbjY1ZHNpODYgRFNJIHRvIGVE UCBicmlkZ2UgZHJpdmVyIik7Cj4+Pj4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKPj4gCj4+ IApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpGcmVlZHJl bm8gbWFpbGluZyBsaXN0CkZyZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8K