From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrzej Hajda Subject: Re: [PATCH v14 1/2] drm/bridge: add support for sn65dsi86 bridge driver Date: Thu, 19 Jul 2018 14:27:54 +0900 Message-ID: <20180719052801eucas1p2e0bc48b844f027abe575a8cf5eb180f6~CrfK6hgTh2322323223eucas1p2Q@eucas1p2.samsung.com> References: <20180716084330.26698-1-spanda@codeaurora.org> <20180716084330.26698-2-spanda@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180716084330.26698-2-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: linux-arm-msm@vger.kernel.org T24gMTYtSnVsLTE4IDE3OjQzLCBTYW5kZWVwIFBhbmRhIHdyb3RlOgo+IEFkZCBzdXBwb3J0IGZv ciBUSSdzIHNuNjVkc2k4NiBkc2kyZWRwIGJyaWRnZSBjaGlwLgo+IFRoZSBjaGlwIGNvbnZlcnRz IERTSSB0cmFuc21pdHRlZCBzaWduYWwgdG8gZURQIHNpZ25hbCwKPiB3aGljaCBpcyBmZWQgdG8g dGhlIGNvbm5lY3RlZCBlRFAgcGFuZWwuCj4KPiBUaGlzIGNoaXAgY2FuIGJlIGNvbnRyb2xsZWQg dmlhIGVpdGhlciBpMmMgaW50ZXJmYWNlIG9yCj4gZHNpIGludGVyZmFjZS4gQ3VycmVudGx5IGlu IGRyaXZlciBhbGwgdGhlIGNvbnRyb2wgcmVnaXN0ZXJzCj4gYXJlIGJlaW5nIGFjY2Vzc2VkIHRo cm91Z2ggaTJjIGludGVyZmFjZSBvbmx5Lgo+IEFsc28gYXMgb2Ygbm93IEhQRCBzdXBwb3J0IGhh cyBub3QgYmVlbiBhZGRlZCB0byBicmlkZ2UKPiBjaGlwIGRyaXZlci4KPgo+IENoYW5nZXMgaW4g djE6Cj4gICAtIFNwbGl0IHRoZSBkdC1iaW5kaW5ncyBhbmQgdGhlIGRyaXZlciBzdXBwb3J0IGlu dG8gc2VwYXJhdGUgcGF0Y2hlcwo+ICAgICAoQW5kcnplaiBIYWpkYSkuCj4gICAtIFVzZSBvZiBn cGlvZCBBUElzIHRvIHBhcnNlIGFuZCBjb25maWd1cmUgZ3Bpb3MgaW5zdGVhZCBvZiBvYnNvbGV0 ZSBvbmVzCj4gICAgIChBbmRyemVqIEhhamRhKS4KPiAgIC0gVXNlIG1hY3JvcyB0byBkZWZpbmUg dGhlIHJlZ2lzdGVyIG9mZnNldHMgKEFuZHJ6ZWogSGFqZGEpLgo+Cj4gQ2hhbmdlcyBpbiB2MjoK PiAgIC0gU2VwYXJhdGUgb3V0IGVkcCBwYW5lbCBzcGVjaWZpYyBIVyByZXNvdXJjZSBoYW5kbGlu ZyBmcm9tIGJyaWRnZQo+ICAgICBkcml2ZXIgYW5kIGNyZWF0ZSBhIHNlcGFyYXRlIGVkcCBwYW5l bCBkcml2ZXJzIHRvIGhhbmRsZSBwYW5lbAo+ICAgICBzcGVjaWZpYyBtb2RlIGluZm9ybWF0aW9u IGFuZCBIVyByZXNvdXJjZXMgKFNlYW4gUGF1bCkuCj4gICAtIFJlcGxhY2UgcHJfKiBBUElzIHRv IERSTV8qIEFQSXMgdG8gbG9nIGVycm9yIG9yIGRlYnVnIGluZm9ybWF0aW9uCj4gICAgIChTZWFu IFBhdWwpLgo+ICAgLSBSZW1vdmUgc29tZSBvZiB0aGUgdW5uZWNlc3Nhcnkgc3RydWN0dXJlL3Zh cmlhYmxlIGZyb20gZHJpdmVyIChTZWFuCj4gICAgIFBhdWwpLgo+ICAgLSBSZW5hbWUgdGhlIGZ1 bmN0aW9uIGFuZCBzdHJ1Y3R1cmUgcHJlZml4ICJzbjY1ZHNpODYiIHRvICJ0aV9zbl9icmlkZ2Ui Cj4gICAgIChTZWFuIFBhdWwgLyBSb2IgSGVycmluZykuCj4gICAtIFJlbW92ZSBtb3N0IG9mIHRo ZSBoYXJkLWNvZGluZyBhbmQgbW9kaWZpZWQgdGhlIGJyaWRnZSBpbml0IHNlcXVlbmNlCj4gICAg IGJhc2VkIG9uIGN1cnJlbnQgbW9kZSAoU2VhbiBQYXVsKS4KPiAgIC0gUmVtb3ZlIHRoZSBleGlz dGluZyBmdW5jdGlvbiB0byByZXRyaWV2ZSB0aGUgRURJRCBkYXRhIGFuZAo+ICAgICBpbXBsZW1l bnRlZCB0aGlzIGFzIGFuIGkyY19hZGFwdGVyIGFuZCB1c2UgZHJtX2dldF9lZGlkKCkgKFNlYW4g UGF1bCkuCj4gICAtIFJlbW92ZSB0aGUgZHVtbXkgaXJxIGhhbmRsZXIgaW1wbGVtZW50YXRpb24s IHdpbGwgYWRkIGJhY2sgdGhlCj4gICAgIHByb3BlciBpcnEgaGFuZGxpbmcgbGF0ZXIgKFNlYW4g UGF1bCkuCj4gICAtIENhcHR1cmUgdGhlIHJlcXVpcmVkIGVuYWJsZSBncGlvcyBpbiBhIHNpbmds ZSBhcnJheSBiYXNlZCBvbiBkdCBlbnRyeQo+ICAgICBpbnN0ZWFkIG9mIGhhdmluZyBpbmRpdmlk dWFsIGRlc2NyaXB0b3IgZm9yIGVhY2ggZ3BpbyAoU2VhbiBQYXVsKS4KPgo+IENoYW5nZXMgaW4g djM6Cj4gICAtIFJlbW92ZSB1c2FnZSBvZiBpcnFfZ3BpbyBhbmQgcmVwbGFjZSBpdCBhcyAiaW50 ZXJydXB0cyIgcHJvcGVydHkgKFJvYgo+ICAgICBIZXJyaW5nKS4KPiAgIC0gUmVtb3ZlIHRoZSB1 bm5lY2Vzc2FyeSBoZWFkZXIgZmlsZSBpbmNsdXNpb25zIChTZWFuIFBhdWwpLgo+ICAgLSBSZWFy cmFuZ2UgdGhlIGhlYWRlciBmaWxlcyBpbiBhbHBoYWJldGljYWwgb3JkZXIgKFNlYW4gUGF1bCku Cj4gICAtIFVzZSByZWdtYXAgaW50ZXJmYWNlIHRvIHBlcmZvcm0gaTJjIHRyYW5zYWN0aW9ucy4K PiAgIC0gVXBkYXRlIENvcHlyaWdodC9MaWNlbnNlIGZpZWxkIGFuZCBhZGRyZXNzIG90aGVyIHJl dmlldyBjb21tZW50cwo+ICAgICAoSm9yZGFuIENyb3VzZSkuCj4KPiBDaGFuZ2VzIGluIHY0Ogo+ ICAgLSBVcGRhdGUgTGljZW5zZS9Db3B5cmlnaHQgKFNlYW4gUGF1bCkuCj4gICAtIEFkZCBLY29u ZmlnIGFuZCBNYWtlZmlsZSBjaGFuZ2VzIChTZWFuIFBhdWwpLgo+ICAgLSBEcm9wIGkyYyBncGlv IGhhbmRsaW5nIGZyb20gdGhpcyBicmlkZ2UgZHJpdmVyLCBzaW5jZSBpMmMgc2RhL3NjbCBncGlv cwo+ICAgICB3aWxsIGJlIGhhbmRsZWQgYnkgaTJjIG1hc3Rlci4KPiAgIC0gVXBkYXRlIHJlcXVp cmVkIHN1cHBsaWVzIG5hbWVzLgo+ICAgLSBSZW1vdmUgdW5uZWNlc3NhcnkgZ290byBzdGF0ZW1l bnRzIChTZWFuIFBhdWwpLgo+ICAgLSBBZGQgbXV0ZXggbG9jayB0byBwb3dlcl9jdHJsIEFQSSB0 byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgKFNlYW4KPiAgICAgUGF1bCkuCj4gICAtIEFkZCBzdXBw b3J0IHRvIHBhcnNlIHJlZmVyZW5jZSBjbGsgZnJlcXVlbmN5IGZyb20gZHQob3B0aW9uYWwpLgo+ ICAgLSBVcGRhdGUgdGhlIGJyaWRnZSBjaGlwIGVuYWJsZS9kaXNhYmxlIHNlcXVlbmNlLgo+Cj4g Q2hhbmdlcyBpbiB2NToKPiAgIC0gRml4ZWQgS2J1aWxkIHRlc3Qgc2VydmljZSByZXBvcnRlZCB3 YXJuaW5ncy4KPgo+IENoYW5nZXMgaW4gdjY6Cj4gICAtIFVzZSBQTSBydW50aW1lIGJhc2VkIHJl Zi1jb3VudGluZyBpbnN0ZWFkIG9mIGxvY2FsIHJlZl9jb3VudCBtZWNoYW5pc20KPiAgICAgKFN0 ZXBoZW4gQm95ZCkuCj4gICAtIENsZWFuIHVwIHNvbWUgZGVidWcgbG9ncyBhbmQgaW5kZW50YXRp b25zIChTZWFuIFBhdWwpLgo+ICAgLSBTaW1wbGlmeSBkcCByYXRlIGNhbGN1bGF0aW9uIChTZWFu IFBhdWwpLgo+ICAgLSBBZGQgc3VwcG9ydCB0byBjb25maWd1cmUgcmVmY2xrIGJhc2VkIG9uIGlu cHV0IFJFRkNMSyBwaW4gb3IgREFDUC9OCj4gICAgIHBpbiAoU3RlcGhlbiBCb3lkKS4KPgo+IENo YW5nZXMgaW4gdjc6Cj4gICAtIFVzZSBzdGF0aWMgc3VwcGx5IGVudHJpZXMgaW5zdGVhZCBvZiBk eW5hbWljIGFsbG9jYXRpb24gKEFuZHJ6ZWoKPiAgICAgSGFqZGEpLgo+ICAgLSBEZWZlciBicmlk Z2UgZHJpdmVyIHByb2JlIGlmIHBhbmVsIGlzIG5vdCBwcm9iZWQgKEFuZHJ6ZWogSGFqZGEpLgo+ ICAgLSBVcGRhdGUgb2ZfZ3JhcGggQVBJcyBmb3IgY29ycmVjdCBub2RlIHJlZmVyZW5jZSBtYW5h Z2VtZW50LiAoQW5kcnplago+ICAgICBIYWpkYSkuCj4gICAtIFJlbW92ZSBsb2NhbCBkaXNwbGF5 X21vZGUgb2JqZWN0IChBbmRyemVqIEhhamRhKS4KPiAgIC0gUmVtb3ZlIHZlcnNpb24gaWQgY2hl Y2sgZnVuY3Rpb24gZnJvbSBkcml2ZXIuCj4KPiBDaGFuZ2VzIGluIHY4Ogo+ICAgLSBNb3ZlIGRz aSByZWdpc3Rlci9hdHRhY2ggZnVuY3Rpb24gdG8gYnJpZGdlIGRyaXZlciBwcm9iZSAoQW5kcnpl ago+ICAgICBIYWpkYSkuCj4gICAtIEludHJvZHVjZSBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gdG8g d3JpdGUgMTZiaXQgd29yZHMgaW50byBjb25zZWN1dGl2ZQo+ICAgICByZWdpc3RlcnMgKEFuZHJ6 ZWogSGFqZGEpLgo+ICAgLSBSZW1vdmUgdW5uZWNlc3NhcnkgbWFjcm9zIChBbmRyemVqIEhhamRh KS4KPgo+IENoYW5nZXMgaW4gdjk6Cj4gICAtIFJlbW92ZSBkc2kgcmVnaXN0ZXIvYXR0YWNoIGZy b20gYnJpZGdlIHByb2JlLCBzaW5jZSBkc2kgZGV2IHJlZ2lzdGVyCj4gICAgIGNvbXBsZXRpb24g YWxzbyB3YWl0cyBmb3IgYW55IHBhbmVsIG9yIGJyaWRnZSB0byBnZXQgYWRkZWQuIFRoaXMgY3Jl YXRlcwo+ICAgICBkZWFkbG9jayBzaXR1YXRpb24gd2hlbiBicmlkZ2UgZHJpdmVyIGNhbGxzIGRz aSBkZXYgcmVnaXN0ZXIgYW5kCj4gICAgIGF0dGFjaCBiZWZvcmUgYnJpZGdlIGFkZCwgaW4gaXRz IHByb2JlIGZ1bmN0aW9uLgo+ICAgLSBGaXggaXNzdWVzIGZhY2VkIGR1cmluZyB0ZXN0aW5nIG9m IGJyaWRnZSBkcml2ZXIgb24gYWN0dWFsIEhXLgo+ICAgLSBSZW1vdmUgdW5uZWNlc3NhcnkgaW5p dGlhbGl6YXRpb25zIChTdGVwaGVuIEJveWQpLgo+ICAgLSBVc2UgbG9jYWwgcmVmY2xrIGx1dCBz aXplIGluc3RlYWQgb2YgZ2xvYmFsIG1hY3JvIChTZWFuIFBhdWwpLgo+Cj4gQ2hhbmdlcyBpbiB2 MTA6Cj4gICAtIFVzZSByZWZjbGsgdG8gZGV0ZXJtaW5lIGlmIGNvbnRpbnVvdXMgZHNpIGNsb2Nr IGlzIG5lZWRlZCBvciBub3QuCj4KPiBDaGFuZ2VzIGluIHYxMToKPiAgIC0gUmVhZCBEUFBMTF9T UkMgcmVnaXN0ZXIgdG8gZGV0ZXJtaW5lIGNvbnRpbnVvdXMgY2xvY2sgaW5zdGVhZCBvZgo+ICAg ICB1c2luZyByZWZjbGsgaGFuZGxlIChTdGVwaGVuIEJveWQpLgo+Cj4gQ2hhbmdlcyBpbiB2MTI6 Cj4gICAtIEV4cGxhaW4gaW4gY29tbWVudCBhcyBpbiB3aHkgZHNpIGRldiByZWdpc3RyYXRpb24g aXMgZG9uZSBpbgo+ICAgICBicmlkZ2VfYXR0YWNoIChBbmRyemVqIEhhamRhKS4KPiAgIC0gTW92 ZSBIUEQgZGlzYWJsZSB0byBicmlkZ2VfcHJlX2VuYWJsZSAoQW5kcnplaiBIYWpkYSkuCj4gICAt IE1ha2UgcGFuZWwvRERDIGV4Y2x1c2l2ZSB1bnRpbCBIUEQgc3VwcG9ydCBpcyBhZGRlZCAoQW5k cnplaiBIYWpkYSkuCj4KPiBDaGFuZ2VzIGluIHYxMzoKPiAgIC0gZURQIHBhbmVscyByZXBvcnQg RURJRCB2aWEgRFAtQVVYIGNoYW5uZWwsIHNvIHJlbW92ZSBzdXBwb3J0IGZvcgo+ICAgICBkZWRp Y2F0ZWQgRERDIGxpbmUgKEFuZHJ6ZWogSGFqZGEpLgo+Cj4gU2lnbmVkLW9mZi1ieTogU2FuZGVl cCBQYW5kYSA8c3BhbmRhQGNvZGVhdXJvcmEub3JnPgo+IC0tLQo+ICAgZHJpdmVycy9ncHUvZHJt L2JyaWRnZS9LY29uZmlnICAgICAgICB8ICAgOSArCj4gICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdl L01ha2VmaWxlICAgICAgIHwgICAxICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktc242 NWRzaTg2LmMgfCA2NzYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAgMyBm aWxlcyBjaGFuZ2VkLCA2ODYgaW5zZXJ0aW9ucygrKQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktc242NWRzaTg2LmMKPgo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25m aWcKPiBpbmRleCAzYjk5ZDVhMDZjMTYuLjgxNTMxNTBhY2QzNiAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdl L0tjb25maWcKPiBAQCAtMTA4LDYgKzEwOCwxNSBAQCBjb25maWcgRFJNX1RJX1RGUDQxMAo+ICAg CS0tLWhlbHAtLS0KPiAgIAkgIFRleGFzIEluc3RydW1lbnRzIFRGUDQxMCBEVkkvSERNSSBUcmFu c21pdHRlciBkcml2ZXIKPiAgIAo+ICtjb25maWcgRFJNX1RJX1NONjVEU0k4Ngo+ICsJdHJpc3Rh dGUgIlRJIFNONjVEU0k4NiBEU0kgdG8gZURQIGJyaWRnZSIKPiArCWRlcGVuZHMgb24gT0YKPiAr CXNlbGVjdCBEUk1fS01TX0hFTFBFUgo+ICsJc2VsZWN0IFJFR01BUF9JMkMKPiArCXNlbGVjdCBE Uk1fUEFORUwKPiArCS0tLWhlbHAtLS0KPiArCSAgVGV4YXMgSW5zdHJ1bWVudHMgU042NURTSTg2 IERTSSB0byBlRFAgQnJpZGdlIGRyaXZlcgo+ICsKPiAgIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJt L2JyaWRnZS9hbmFsb2dpeC9LY29uZmlnIgo+ICAgCj4gICBzb3VyY2UgImRyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvYWR2NzUxMS9LY29uZmlnIgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v YnJpZGdlL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQo+IGluZGV4 IDM3M2ViMjhmMzFlZC4uYTdjYTAwMGY2MDQ4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxl Cj4gQEAgLTExLDUgKzExLDYgQEAgb2JqLSQoQ09ORklHX0RSTV9TSUk5MjM0KSArPSBzaWk5MjM0 Lm8KPiAgIG9iai0kKENPTkZJR19EUk1fVE9TSElCQV9UQzM1ODc2NykgKz0gdGMzNTg3Njcubwo+ ICAgb2JqLSQoQ09ORklHX0RSTV9BTkFMT0dJWF9EUCkgKz0gYW5hbG9naXgvCj4gICBvYmotJChD T05GSUdfRFJNX0kyQ19BRFY3NTExKSArPSBhZHY3NTExLwo+ICtvYmotJChDT05GSUdfRFJNX1RJ X1NONjVEU0k4NikgKz0gdGktc242NWRzaTg2Lm8KPiAgIG9iai0kKENPTkZJR19EUk1fVElfVEZQ NDEwKSArPSB0aS10ZnA0MTAubwo+ICAgb2JqLXkgKz0gc3lub3BzeXMvCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktc242NWRzaTg2LmMgYi9kcml2ZXJzL2dwdS9kcm0v YnJpZGdlL3RpLXNuNjVkc2k4Ni5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAw MDAwMDAwMDAuLjJmNTYwZTNhMTQ2MAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jCj4gQEAgLTAsMCArMSw2NzYgQEAKPiArLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiArLyoKPiArICogQ29weXJpZ2h0IChjKSAy MDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICovCj4g Kwo+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+ Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9k cm1fY3J0Y19oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KPiArI2lu Y2x1ZGUgPGRybS9kcm1fb2YuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L2Nsay5oPgo+ICsjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgo+ ICsjaW5jbHVkZSA8bGludXgvaTJjLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPgo+ ICsjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcmVnbWFw Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KPiArCj4gKy8qIExp bmsgVHJhaW5pbmcgc3BlY2lmaWMgcmVnaXN0ZXJzICovCj4gKyNkZWZpbmUgU05fREVWSUNFX1JF Vl9SRUcJCQkweDA4Cj4gKyNkZWZpbmUgU05fSFBEX0RJU0FCTEVfUkVHCQkJMHg1Qwo+ICsjZGVm aW5lIFNOX0RQUExMX1NSQ19SRUcJCQkweDBBCj4gKyNkZWZpbmUgU05fRFNJX0xBTkVTX1JFRwkJ CTB4MTAKPiArI2RlZmluZSBTTl9EU0lBX0NMS19GUkVRX1JFRwkJCTB4MTIKPiArI2RlZmluZSBT Tl9FTkhfRlJBTUVfUkVHCQkJMHg1QQo+ICsjZGVmaW5lIFNOX1NTQ19DT05GSUdfUkVHCQkJMHg5 Mwo+ICsjZGVmaW5lIFNOX0RBVEFSQVRFX0NPTkZJR19SRUcJCQkweDk0Cj4gKyNkZWZpbmUgU05f UExMX0VOQUJMRV9SRUcJCQkweDBECj4gKyNkZWZpbmUgU05fU0NSQU1CTEVfQ09ORklHX1JFRwkJ CTB4OTUKPiArI2RlZmluZSBTTl9BVVhfV0RBVEEwX1JFRwkJCTB4NjQKPiArI2RlZmluZSBTTl9B VVhfQUREUl8xOV8xNl9SRUcJCQkweDc0Cj4gKyNkZWZpbmUgU05fQVVYX0FERFJfMTVfOF9SRUcJ CQkweDc1Cj4gKyNkZWZpbmUgU05fQVVYX0FERFJfN18wX1JFRwkJCTB4NzYKPiArI2RlZmluZSBT Tl9BVVhfTEVOR1RIX1JFRwkJCTB4NzcKPiArI2RlZmluZSBTTl9BVVhfQ01EX1JFRwkJCQkweDc4 Cj4gKyNkZWZpbmUgU05fTUxfVFhfTU9ERV9SRUcJCQkweDk2Cj4gKy8qIHZpZGVvIGNvbmZpZyBz cGVjaWZpYyByZWdpc3RlcnMgKi8KPiArI2RlZmluZSBTTl9DSEFfQUNUSVZFX0xJTkVfTEVOR1RI X0xPV19SRUcJMHgyMAo+ICsjZGVmaW5lIFNOX0NIQV9WRVJUSUNBTF9ESVNQTEFZX1NJWkVfTE9X X1JFRwkweDI0Cj4gKyNkZWZpbmUgU05fQ0hBX0hTWU5DX1BVTFNFX1dJRFRIX0xPV19SRUcJMHgy Qwo+ICsjZGVmaW5lIFNOX0NIQV9IU1lOQ19QVUxTRV9XSURUSF9ISUdIX1JFRwkweDJECj4gKyNk ZWZpbmUgU05fQ0hBX1ZTWU5DX1BVTFNFX1dJRFRIX0xPV19SRUcJMHgzMAo+ICsjZGVmaW5lIFNO X0NIQV9WU1lOQ19QVUxTRV9XSURUSF9ISUdIX1JFRwkweDMxCj4gKyNkZWZpbmUgU05fQ0hBX0hP UklaT05UQUxfQkFDS19QT1JDSF9SRUcJMHgzNAo+ICsjZGVmaW5lIFNOX0NIQV9WRVJUSUNBTF9C QUNLX1BPUkNIX1JFRwkJMHgzNgo+ICsjZGVmaW5lIFNOX0NIQV9IT1JJWk9OVEFMX0ZST05UX1BP UkNIX1JFRwkweDM4Cj4gKyNkZWZpbmUgU05fQ0hBX1ZFUlRJQ0FMX0ZST05UX1BPUkNIX1JFRwkJ MHgzQQo+ICsjZGVmaW5lIFNOX0RBVEFfRk9STUFUX1JFRwkJCTB4NUIKPiArCj4gKyNkZWZpbmUg TUlOX0RTSV9DTEtfRlJFUV9NSFoJNDAKPiArCj4gKy8qIGZ1ZGdlIGZhY3RvciByZXF1aXJlZCB0 byBhY2NvdW50IGZvciA4Yi8xMGIgZW5jb2RpbmcgKi8KPiArI2RlZmluZSBEUF9DTEtfRlVER0Vf TlVNCTEwCj4gKyNkZWZpbmUgRFBfQ0xLX0ZVREdFX0RFTgk4Cj4gKwo+ICsjZGVmaW5lIERQUExM X0NMS19TUkNfUkVGQ0xLCTAKPiArI2RlZmluZSBEUFBMTF9DTEtfU1JDX0RTSUNMSwkxCj4gKwo+ ICsjZGVmaW5lIFNOX1JFRkNMS19GUkVRX09GRlNFVAkxCj4gKyNkZWZpbmUgU05fRFNJQV9MQU5F X09GRlNFVAkzCj4gKyNkZWZpbmUgU05fRFBfTEFORV9PRkZTRVQJNAo+ICsjZGVmaW5lIFNOX0RQ X0RBVEFfUkFURV9PRkZTRVQJNQo+ICsjZGVmaW5lIFNOX1NZTkNfUE9MQVJJVFlfT0ZGU0VUCTcK PiArCj4gKyNkZWZpbmUgU05fRU5BQkxFX1ZJRF9TVFJFQU1fQklUCUJJVCgzKQo+ICsjZGVmaW5l IFNOX1JFRkNMS19GUkVRX0JJVFMJCUdFTk1BU0soMywgMSkKPiArI2RlZmluZSBTTl9EU0lBX05V TV9MQU5FU19CSVRTCQlHRU5NQVNLKDQsIDMpCj4gKyNkZWZpbmUgU05fRFBfTlVNX0xBTkVTX0JJ VFMJCUdFTk1BU0soNSwgNCkKPiArI2RlZmluZSBTTl9EUF9EQVRBX1JBVEVfQklUUwkJR0VOTUFT Syg3LCA1KQo+ICsjZGVmaW5lIFNOX0hQRF9ESVNBQkxFX0JJVAkJQklUKDApCj4gKwo+ICsjZGVm aW5lIFNOX1JFR1VMQVRPUl9TVVBQTFlfTlVNCQk0Cj4gKwo+ICtzdHJ1Y3QgdGlfc25fYnJpZGdl IHsKPiArCXN0cnVjdCBkZXZpY2UJCQkqZGV2Owo+ICsJc3RydWN0IHJlZ21hcAkJCSpyZWdtYXA7 Cj4gKwlzdHJ1Y3QgZHJtX2JyaWRnZQkJYnJpZGdlOwo+ICsJc3RydWN0IGRybV9jb25uZWN0b3IJ CWNvbm5lY3RvcjsKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZQkJKmhvc3Rfbm9kZTsKPiArCXN0cnVj dCBtaXBpX2RzaV9kZXZpY2UJCSpkc2k7Cj4gKwlzdHJ1Y3QgY2xrCQkJKnJlZmNsazsKPiArCXN0 cnVjdCBkcm1fcGFuZWwJCSpwYW5lbDsKPiArCXN0cnVjdCBncGlvX2Rlc2MJCSplbmFibGVfZ3Bp bzsKPiArCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhCXN1cHBsaWVzW1NOX1JFR1VMQVRPUl9T VVBQTFlfTlVNXTsKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX3Jhbmdl IHRpX3NuX2JyaWRnZV92b2xhdGlsZV9yYW5nZXNbXSA9IHsKPiArCXsgLnJhbmdlX21pbiA9IDAs IC5yYW5nZV9tYXggPSAweEZGIH0sCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHJl Z21hcF9hY2Nlc3NfdGFibGUgdGlfc25fYnJpZGdlX3ZvbGF0aWxlX3RhYmxlID0gewo+ICsJLnll c19yYW5nZXMgPSB0aV9zbl9icmlkZ2Vfdm9sYXRpbGVfcmFuZ2VzLAo+ICsJLm5feWVzX3Jhbmdl cyA9IEFSUkFZX1NJWkUodGlfc25fYnJpZGdlX3ZvbGF0aWxlX3JhbmdlcyksCj4gK307Cj4gKwo+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgdGlfc25fYnJpZGdlX3JlZ21hcF9j b25maWcgPSB7Cj4gKwkucmVnX2JpdHMgPSA4LAo+ICsJLnZhbF9iaXRzID0gOCwKPiArCS52b2xh dGlsZV90YWJsZSA9ICZ0aV9zbl9icmlkZ2Vfdm9sYXRpbGVfdGFibGUsCj4gKwkuY2FjaGVfdHlw ZSA9IFJFR0NBQ0hFX05PTkUsCj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCB0aV9zbl9icmlkZ2Vf d3JpdGVfdTE2KHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhLAo+ICsJCQkJICAgdW5zaWduZWQg aW50IHJlZywgdTE2IHZhbCkKPiArewo+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIHJl ZywgdmFsICYgMHhGRik7Cj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgcmVnICsgMSwg dmFsID4+IDgpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHRpX3NuX2Jy aWRnZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgdGlfc25fYnJp ZGdlICpwZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsJaW50IHJldDsKPiArCj4gKwly ZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoU05fUkVHVUxBVE9SX1NVUFBMWV9OVU0sIHBkYXRh LT5zdXBwbGllcyk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZW5h YmxlIHN1cHBsaWVzICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJ Z3Bpb2Rfc2V0X3ZhbHVlKHBkYXRhLT5lbmFibGVfZ3BpbywgMSk7Cj4gKwo+ICsJcmV0dXJuIHJl dDsKPiArfQo+ICsKPiArc3RhdGljIGludCBfX21heWJlX3VudXNlZCB0aV9zbl9icmlkZ2Vfc3Vz cGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBk YXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWdwaW9kX3Nl dF92YWx1ZShwZGF0YS0+ZW5hYmxlX2dwaW8sIDApOwo+ICsKPiArCXJldCA9IHJlZ3VsYXRvcl9i dWxrX2Rpc2FibGUoU05fUkVHVUxBVE9SX1NVUFBMWV9OVU0sIHBkYXRhLT5zdXBwbGllcyk7Cj4g KwlpZiAocmV0KQo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGRpc2FibGUgc3VwcGxpZXMgJWRc biIsIHJldCk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBkZXZfcG1fb3BzIHRpX3NuX2JyaWRnZV9wbV9vcHMgPSB7Cj4gKwlTRVRfUlVOVElNRV9Q TV9PUFModGlfc25fYnJpZGdlX3N1c3BlbmQsIHRpX3NuX2JyaWRnZV9yZXN1bWUsIE5VTEwpCj4g K307Cj4gKwo+ICsvKiBDb25uZWN0b3IgZnVuY3MgKi8KPiArc3RhdGljIHN0cnVjdCB0aV9zbl9i cmlkZ2UgKgo+ICtjb25uZWN0b3JfdG9fdGlfc25fYnJpZGdlKHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IpCj4gK3sKPiArCXJldHVybiBjb250YWluZXJfb2YoY29ubmVjdG9yLCBzdHJ1 Y3QgdGlfc25fYnJpZGdlLCBjb25uZWN0b3IpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRpX3Nu X2JyaWRnZV9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IpCj4gK3sKPiArCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gY29ubmVjdG9yX3RvX3Rp X3NuX2JyaWRnZShjb25uZWN0b3IpOwo+ICsKPiArCXJldHVybiBkcm1fcGFuZWxfZ2V0X21vZGVz KHBkYXRhLT5wYW5lbCk7Cj4gK30KPiArCj4gK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cwo+ ICt0aV9zbl9icmlkZ2VfY29ubmVjdG9yX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvciwKPiArCQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKPiAr ewo+ICsJLyogbWF4aW11bSBzdXBwb3J0ZWQgcmVzb2x1dGlvbiBpcyA0SyBhdCA2MCBmcHMgKi8K PiArCWlmIChtb2RlLT5jbG9jayA+IDU5NDAwMCkKPiArCQlyZXR1cm4gTU9ERV9DTE9DS19ISUdI Owo+ICsKPiArCXJldHVybiBNT0RFX09LOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRybV9j b25uZWN0b3JfaGVscGVyX2Z1bmNzIHRpX3NuX2JyaWRnZV9jb25uZWN0b3JfaGVscGVyX2Z1bmNz ID0gewo+ICsJLmdldF9tb2RlcyA9IHRpX3NuX2JyaWRnZV9jb25uZWN0b3JfZ2V0X21vZGVzLAo+ ICsJLm1vZGVfdmFsaWQgPSB0aV9zbl9icmlkZ2VfY29ubmVjdG9yX21vZGVfdmFsaWQsCj4gK307 Cj4gKwo+ICtzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cwo+ICt0aV9zbl9icmlkZ2Vf Y29ubmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZv cmNlKQo+ICt7Cj4gKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGNvbm5lY3Rvcl90b190 aV9zbl9icmlkZ2UoY29ubmVjdG9yKTsKPiArCj4gKwkvKioKPiArCSAqIFRPRE86IEN1cnJlbnRs eSBpZiBkcm1fcGFuZWwgaXMgcHJlc2VudCwgdGhlbiBhbHdheXMKPiArCSAqIHJldHVybiB0aGUg c3RhdHVzIGFzIGNvbm5lY3RlZC4gTmVlZCB0byBhZGQgc3VwcG9ydCB0byBkZXRlY3QKPiArCSAq IGRldmljZSBzdGF0ZSBmb3Igbm8gcGFuZWwoaG90IHBsdWdnYWJsZSkgc2NlbmFyaW9zLgo+ICsJ ICovCj4gKwlpZiAocGRhdGEtPnBhbmVsKQoKU2luY2UgcGRhdGEtPnBhbmVsIGlzIGFsd2F5cyBu b24temVybyBhZnRlciBzdWNjZXNzZnVsIHByb2JlLCB5b3UgY2FuIApyZW1vdmUgYWxsIHN1Y2gg Y2hlY2tzLgoKPiArCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Cj4gKwllbHNl Cj4gKwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfdW5rbm93bjsKPiArfQo+ICsKPiArc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIHRpX3NuX2JyaWRnZV9jb25uZWN0b3Jf ZnVuY3MgPSB7Cj4gKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5l Y3Rvcl9tb2RlcywKPiArCS5kZXRlY3QgPSB0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2RldGVjdCwK PiArCS5kZXN0cm95ID0gZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwLAo+ICsJLnJlc2V0ID0gZHJtX2F0 b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAo+ICsJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUg PSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlLAo+ICsJLmF0b21p Y19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3Rh dGUsCj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHRpX3NuX2JyaWRnZSAqYnJpZGdlX3RvX3Rp X3NuX2JyaWRnZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+ICt7Cj4gKwlyZXR1cm4gY29u dGFpbmVyX29mKGJyaWRnZSwgc3RydWN0IHRpX3NuX2JyaWRnZSwgYnJpZGdlKTsKPiArfQo+ICsK PiArc3RhdGljIGludCB0aV9zbl9icmlkZ2VfcGFyc2VfcmVndWxhdG9ycyhzdHJ1Y3QgdGlfc25f YnJpZGdlICpwZGF0YSkKPiArewo+ICsJdW5zaWduZWQgaW50IGk7Cj4gKwljb25zdCBjaGFyICog Y29uc3QgdGlfc25fYnJpZGdlX3N1cHBseV9uYW1lc1tdID0gewo+ICsJCSJ2Y2NhIiwgInZjYyIs ICJ2Y2NpbyIsICJ2cGxsIiwKPiArCX07Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IFNOX1JFR1VM QVRPUl9TVVBQTFlfTlVNOyBpKyspCj4gKwkJcGRhdGEtPnN1cHBsaWVzW2ldLnN1cHBseSA9IHRp X3NuX2JyaWRnZV9zdXBwbHlfbmFtZXNbaV07Cj4gKwo+ICsJcmV0dXJuIGRldm1fcmVndWxhdG9y X2J1bGtfZ2V0KHBkYXRhLT5kZXYsIFNOX1JFR1VMQVRPUl9TVVBQTFlfTlVNLAo+ICsJCQkJICAg ICAgIHBkYXRhLT5zdXBwbGllcyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdGlfc25fYnJpZGdl X2F0dGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+ICt7Cj4gKwlpbnQgcmV0LCB2YWw7 Cj4gKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90b190aV9zbl9icmlkZ2Uo YnJpZGdlKTsKPiArCXN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0Owo+ICsJc3RydWN0IG1pcGlf ZHNpX2RldmljZSAqZHNpOwo+ICsJY29uc3Qgc3RydWN0IG1pcGlfZHNpX2RldmljZV9pbmZvIGlu Zm8gPSB7IC50eXBlID0gInRpX3NuX2JyaWRnZSIsCj4gKwkJCQkJCSAgIC5jaGFubmVsID0gMCwK PiArCQkJCQkJICAgLm5vZGUgPSBOVUxMLAo+ICsJCQkJCQkgfTsKPiArCj4gKwlyZXQgPSBkcm1f Y29ubmVjdG9yX2luaXQoYnJpZGdlLT5kZXYsICZwZGF0YS0+Y29ubmVjdG9yLAo+ICsJCQkJICZ0 aV9zbl9icmlkZ2VfY29ubmVjdG9yX2Z1bmNzLAo+ICsJCQkJIERSTV9NT0RFX0NPTk5FQ1RPUl9l RFApOwo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUg Y29ubmVjdG9yIHdpdGggZHJtXG4iKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCWRy bV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcGRhdGEtPmNvbm5lY3RvciwKPiArCQkJCSAmdGlfc25f YnJpZGdlX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOwo+ICsJZHJtX21vZGVfY29ubmVjdG9yX2F0 dGFjaF9lbmNvZGVyKCZwZGF0YS0+Y29ubmVjdG9yLCBicmlkZ2UtPmVuY29kZXIpOwo+ICsKPiAr CS8qCj4gKwkgKiBUT0RPOiBpZGVhbGx5IGZpbmRpbmcgaG9zdCByZXNvdXJjZSBhbmQgZHNpIGRl diByZWdpc3RyYXRpb24gbmVlZHMKPiArCSAqIHRvIGJlIGRvbmUgaW4gYnJpZGdlIHByb2JlLiBC dXQgc29tZSBleGlzdGluZyBEU0kgaG9zdCBkcml2ZXJzIHdpbGwKPiArCSAqIHdhaXQgZm9yIGFu eSBvZiB0aGUgZHJtX2JyaWRnZS9kcm1fcGFuZWwgdG8gZ2V0IGFkZGVkIHRvIHRoZSBnbG9iYWwK PiArCSAqIGJyaWRnZS9wYW5lbCBsaXN0LCBiZWZvcmUgY29tcGxldGluZyB0aGVpciBwcm9iZS4g U28gaWYgd2UgZG8gdGhlCj4gKwkgKiBkc2kgZGV2IHJlZ2lzdHJhdGlvbiBwYXJ0IGluIGJyaWRn ZSBwcm9iZSwgYmVmb3JlIHBvcHVsYXRpbmcgaW4KPiArCSAqIHRoZSBnbG9iYWwgYnJpZGdlIGxp c3QsIHRoZW4gaXQgd2lsbCBjYXVzZSBkZWFkbG9jayBhcyBkc2kgaG9zdCBwcm9iZQo+ICsJICog d2lsbCBuZXZlciBjb21wbGV0ZSwgbmVpdGhlciBvdXIgYnJpZGdlIHByb2JlLiBTbyBrZWVwaW5n IGl0IGhlcmUKPiArCSAqIHdpbGwgc2F0aXNmeSBtb3N0IG9mIHRoZSBleGlzdGluZyBob3N0IGRy aXZlcnMuIE9uY2UgdGhlIGhvc3QgZHJpdmVyCj4gKwkgKiBpcyBmaXhlZCB3ZSBjYW4gbW92ZSB0 aGUgYmVsb3cgY29kZSB0byBicmlkZ2UgcHJvYmUgc2FmZWx5Lgo+ICsJICovCj4gKwlob3N0ID0g b2ZfZmluZF9taXBpX2RzaV9ob3N0X2J5X25vZGUocGRhdGEtPmhvc3Rfbm9kZSk7Cj4gKwlpZiAo IWhvc3QpIHsKPiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBmaW5kIGRzaSBob3N0XG4iKTsKPiAr CQlyZXQgPSAtRU5PREVWOwo+ICsJCWdvdG8gZXJyX2RzaV9ob3N0Owo+ICsJfQo+ICsKPiArCWRz aSA9IG1pcGlfZHNpX2RldmljZV9yZWdpc3Rlcl9mdWxsKGhvc3QsICZpbmZvKTsKPiArCWlmIChJ U19FUlIoZHNpKSkgewo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBkc2kgZGV2aWNl XG4iKTsKPiArCQlyZXQgPSBQVFJfRVJSKGRzaSk7Cj4gKwkJZ290byBlcnJfZHNpX2hvc3Q7Cj4g Kwl9Cj4gKwo+ICsJLyogVE9ETzogc2V0dGluZyB0byA0IGxhbmVzIGFsd2F5cyBmb3Igbm93ICov Cj4gKwlkc2ktPmxhbmVzID0gNDsKPiArCWRzaS0+Zm9ybWF0ID0gTUlQSV9EU0lfRk1UX1JHQjg4 ODsKPiArCWRzaS0+bW9kZV9mbGFncyA9IE1JUElfRFNJX01PREVfVklERU8gfCBNSVBJX0RTSV9N T0RFX1ZJREVPX1NZTkNfUFVMU0UgfAo+ICsJCQkgIE1JUElfRFNJX01PREVfRU9UX1BBQ0tFVCB8 IE1JUElfRFNJX01PREVfVklERU9fSFNFOwo+ICsKPiArCS8qIGNoZWNrIGlmIGNvbnRpbnVvdXMg ZHNpIGNsb2NrIGlzIHJlcXVpcmVkIG9yIG5vdCAqLwo+ICsJcG1fcnVudGltZV9nZXRfc3luYyhw ZGF0YS0+ZGV2KTsKPiArCXJlZ21hcF9yZWFkKHBkYXRhLT5yZWdtYXAsIFNOX0RQUExMX1NSQ19S RUcsICZ2YWwpOwo+ICsJcG1fcnVudGltZV9wdXQocGRhdGEtPmRldik7Cj4gKwlpZiAoISh2YWwg JiBEUFBMTF9DTEtfU1JDX0RTSUNMSykpCj4gKwkJZHNpLT5tb2RlX2ZsYWdzIHw9IE1JUElfRFNJ X0NMT0NLX05PTl9DT05USU5VT1VTOwo+ICsKPiArCXJldCA9IG1pcGlfZHNpX2F0dGFjaChkc2kp Owo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBhdHRhY2ggZHNp IHRvIGhvc3RcbiIpOwo+ICsJCWdvdG8gZXJyX2RzaV9hdHRhY2g7Cj4gKwl9Cj4gKwlwZGF0YS0+ ZHNpID0gZHNpOwo+ICsKPiArCS8qIGF0dGFjaCBwYW5lbCB0byBicmlkZ2UgKi8KPiArCWlmIChw ZGF0YS0+cGFuZWwpCj4gKwkJZHJtX3BhbmVsX2F0dGFjaChwZGF0YS0+cGFuZWwsICZwZGF0YS0+ Y29ubmVjdG9yKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK2Vycl9kc2lfYXR0YWNoOgo+ICsJ bWlwaV9kc2lfZGV2aWNlX3VucmVnaXN0ZXIoZHNpKTsKPiArZXJyX2RzaV9ob3N0Ogo+ICsJZHJt X2Nvbm5lY3Rvcl9jbGVhbnVwKCZwZGF0YS0+Y29ubmVjdG9yKTsKPiArCXJldHVybiByZXQ7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9kaXNhYmxlKHN0cnVjdCBkcm1fYnJp ZGdlICpicmlkZ2UpCj4gK3sKPiArCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gYnJpZGdl X3RvX3RpX3NuX2JyaWRnZShicmlkZ2UpOwo+ICsKPiArCWlmIChwZGF0YS0+cGFuZWwpCj4gKwkJ ZHJtX3BhbmVsX2Rpc2FibGUocGRhdGEtPnBhbmVsKTsKPiArCj4gKwkvKiBkaXNhYmxlIHZpZGVv IHN0cmVhbSAqLwo+ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKHBkYXRhLT5yZWdtYXAsIFNOX0VOSF9G UkFNRV9SRUcsCj4gKwkJCSAgIFNOX0VOQUJMRV9WSURfU1RSRUFNX0JJVCwgMCk7Cj4gKwkvKiBz ZW1pIGF1dG8gbGluayB0cmFpbmluZyBtb2RlIE9GRiAqLwo+ICsJcmVnbWFwX3dyaXRlKHBkYXRh LT5yZWdtYXAsIFNOX01MX1RYX01PREVfUkVHLCAwKTsKPiArCS8qIGRpc2FibGUgRFAgUExMICov Cj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fUExMX0VOQUJMRV9SRUcsIDApOwo+ ICsKPiArCWlmIChwZGF0YS0+cGFuZWwpCj4gKwkJZHJtX3BhbmVsX3VucHJlcGFyZShwZGF0YS0+ cGFuZWwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdTMyIHRpX3NuX2JyaWRnZV9nZXRfZHNpX2ZyZXEo c3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCj4gK3sKPiArCXUzMiBiaXRfcmF0ZV9raHosIGNs a19mcmVxX2toejsKPiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0KPiArCQkmcGRh dGEtPmJyaWRnZS5lbmNvZGVyLT5jcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZTsKPiArCj4gKwli aXRfcmF0ZV9raHogPSBtb2RlLT5jbG9jayAqCj4gKwkJCW1pcGlfZHNpX3BpeGVsX2Zvcm1hdF90 b19icHAocGRhdGEtPmRzaS0+Zm9ybWF0KTsKPiArCWNsa19mcmVxX2toeiA9IGJpdF9yYXRlX2to eiAvIChwZGF0YS0+ZHNpLT5sYW5lcyAqIDIpOwo+ICsKPiArCXJldHVybiBjbGtfZnJlcV9raHo7 Cj4gK30KPiArCj4gKy8qIGNsayBmcmVxdWVuY2llcyBzdXBwb3J0ZWQgYnkgYnJpZGdlIGluIEh6 IGluIGNhc2UgZGVyaXZlZCBmcm9tIFJFRkNMSyBwaW4gKi8KPiArc3RhdGljIGNvbnN0IHUzMiB0 aV9zbl9icmlkZ2VfcmVmY2xrX2x1dFtdID0gewo+ICsJMTIwMDAwMDAsCj4gKwkxOTIwMDAwMCwK PiArCTI2MDAwMDAwLAo+ICsJMjcwMDAwMDAsCj4gKwkzODQwMDAwMCwKPiArfTsKPiArCj4gKy8q IGNsayBmcmVxdWVuY2llcyBzdXBwb3J0ZWQgYnkgYnJpZGdlIGluIEh6IGluIGNhc2UgZGVyaXZl ZCBmcm9tIERBQ1AvTiBwaW4gKi8KPiArc3RhdGljIGNvbnN0IHUzMiB0aV9zbl9icmlkZ2VfZHNp Y2xrX2x1dFtdID0gewo+ICsJNDY4MDAwMDAwLAo+ICsJMzg0MDAwMDAwLAo+ICsJNDE2MDAwMDAw LAo+ICsJNDg2MDAwMDAwLAo+ICsJNDYwODAwMDAwLAo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQg dGlfc25fYnJpZGdlX3NldF9yZWZjbGtfZnJlcShzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkK PiArewo+ICsJaW50IGk7Cj4gKwl1MzIgcmVmY2xrX3JhdGU7Cj4gKwljb25zdCB1MzIgKnJlZmNs a19sdXQ7Cj4gKwlzaXplX3QgcmVmY2xrX2x1dF9zaXplOwo+ICsKPiArCWlmIChwZGF0YS0+cmVm Y2xrKSB7Cj4gKwkJcmVmY2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUocGRhdGEtPnJlZmNsayk7Cj4g KwkJcmVmY2xrX2x1dCA9IHRpX3NuX2JyaWRnZV9yZWZjbGtfbHV0Owo+ICsJCXJlZmNsa19sdXRf c2l6ZSA9IEFSUkFZX1NJWkUodGlfc25fYnJpZGdlX3JlZmNsa19sdXQpOwo+ICsJCWNsa19wcmVw YXJlX2VuYWJsZShwZGF0YS0+cmVmY2xrKTsKPiArCX0gZWxzZSB7Cj4gKwkJcmVmY2xrX3JhdGUg PSB0aV9zbl9icmlkZ2VfZ2V0X2RzaV9mcmVxKHBkYXRhKSAqIDEwMDA7Cj4gKwkJcmVmY2xrX2x1 dCA9IHRpX3NuX2JyaWRnZV9kc2ljbGtfbHV0Owo+ICsJCXJlZmNsa19sdXRfc2l6ZSA9IEFSUkFZ X1NJWkUodGlfc25fYnJpZGdlX2RzaWNsa19sdXQpOwo+ICsJfQo+ICsKPiArCS8qIGZvciBpIGVx dWFscyB0byByZWZjbGtfbHV0X3NpemUgbWVhbnMgZGVmYXVsdCBmcmVxdWVuY3kgKi8KPiArCWZv ciAoaSA9IDA7IGkgPCByZWZjbGtfbHV0X3NpemU7IGkrKykKPiArCQlpZiAocmVmY2xrX2x1dFtp XSA9PSByZWZjbGtfcmF0ZSkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJcmVnbWFwX3VwZGF0ZV9iaXRz KHBkYXRhLT5yZWdtYXAsIFNOX0RQUExMX1NSQ19SRUcsCj4gKwkJCSAgIFNOX1JFRkNMS19GUkVR X0JJVFMsIGkgPDwgU05fUkVGQ0xLX0ZSRVFfT0ZGU0VUKTsKPiArfQo+ICsKPiArLyoqCj4gKyAq IExVVCBpbmRleCBjb3JyZXNwb25kcyB0byByZWdpc3RlciB2YWx1ZSBhbmQKPiArICogTFVUIHZh bHVlcyBjb3JyZXNwb25kcyB0byBkcCBkYXRhIHJhdGUgc3VwcG9ydGVkCj4gKyAqIGJ5IHRoZSBi cmlkZ2UgaW4gTWJwcyB1bml0Lgo+ICsgKi8KPiArc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB0 aV9zbl9icmlkZ2VfZHBfcmF0ZV9sdXRbXSA9IHsKPiArCTAsIDE2MjAsIDIxNjAsIDI0MzAsIDI3 MDAsIDMyNDAsIDQzMjAsIDU0MDAKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRn ZV9zZXRfZHNpX2RwX3JhdGUoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCj4gK3sKPiArCXVu c2lnbmVkIGludCBiaXRfcmF0ZV9taHosIGNsa19mcmVxX21oeiwgZHBfcmF0ZV9taHo7Cj4gKwl1 bnNpZ25lZCBpbnQgdmFsLCBpOwo+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPQo+ ICsJCSZwZGF0YS0+YnJpZGdlLmVuY29kZXItPmNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlOwo+ ICsKPiArCS8qIHNldCBEU0lBIGNsayBmcmVxdWVuY3kgKi8KPiArCWJpdF9yYXRlX21oeiA9ICht b2RlLT5jbG9jayAvIDEwMDApICoKPiArCQkJbWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChw ZGF0YS0+ZHNpLT5mb3JtYXQpOwo+ICsJY2xrX2ZyZXFfbWh6ID0gYml0X3JhdGVfbWh6IC8gKHBk YXRhLT5kc2ktPmxhbmVzICogMik7Cj4gKwo+ICsJLyogZm9yIGVhY2ggaW5jcmVtZW50IGluIHZh bCwgZnJlcXVlbmN5IGluY3JlYXNlcyBieSA1TUh6ICovCj4gKwl2YWwgPSAoTUlOX0RTSV9DTEtf RlJFUV9NSFogLyA1KSArCj4gKwkJKCgoY2xrX2ZyZXFfbWh6IC0gTUlOX0RTSV9DTEtfRlJFUV9N SFopIC8gNSkgJiAweEZGKTsKPiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9EU0lB X0NMS19GUkVRX1JFRywgdmFsKTsKPiArCj4gKwkvKiBzZXQgRFAgZGF0YSByYXRlICovCj4gKwlk cF9yYXRlX21oeiA9ICgoYml0X3JhdGVfbWh6IC8gcGRhdGEtPmRzaS0+bGFuZXMpICogRFBfQ0xL X0ZVREdFX05VTSkgLwo+ICsJCQkJCQkJRFBfQ0xLX0ZVREdFX0RFTjsKPiArCWZvciAoaSA9IDA7 IGkgPCBBUlJBWV9TSVpFKHRpX3NuX2JyaWRnZV9kcF9yYXRlX2x1dCkgLSAxOyBpKyspCj4gKwkJ aWYgKHRpX3NuX2JyaWRnZV9kcF9yYXRlX2x1dFtpXSA+IGRwX3JhdGVfbWh6KQo+ICsJCQlicmVh azsKPiArCj4gKwlyZWdtYXBfdXBkYXRlX2JpdHMocGRhdGEtPnJlZ21hcCwgU05fREFUQVJBVEVf Q09ORklHX1JFRywKPiArCQkJICAgU05fRFBfREFUQV9SQVRFX0JJVFMsIGkgPDwgU05fRFBfREFU QV9SQVRFX09GRlNFVCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9zZXRf dmlkZW9fdGltaW5ncyhzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkKPiArewo+ICsJc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPQo+ICsJCSZwZGF0YS0+YnJpZGdlLmVuY29kZXItPmNy dGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlOwo+ICsJdTggaHN5bmNfcG9sYXJpdHkgPSAwLCB2c3lu Y19wb2xhcml0eSA9IDA7Cj4gKwo+ICsJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19Q SFNZTkMpCj4gKwkJaHN5bmNfcG9sYXJpdHkgPSBCSVQoU05fU1lOQ19QT0xBUklUWV9PRkZTRVQp Owo+ICsJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19QVlNZTkMpCj4gKwkJdnN5bmNf cG9sYXJpdHkgPSBCSVQoU05fU1lOQ19QT0xBUklUWV9PRkZTRVQpOwo+ICsKPiArCXRpX3NuX2Jy aWRnZV93cml0ZV91MTYocGRhdGEsIFNOX0NIQV9BQ1RJVkVfTElORV9MRU5HVEhfTE9XX1JFRywK PiArCQkJICAgICAgIG1vZGUtPmhkaXNwbGF5KTsKPiArCXRpX3NuX2JyaWRnZV93cml0ZV91MTYo cGRhdGEsIFNOX0NIQV9WRVJUSUNBTF9ESVNQTEFZX1NJWkVfTE9XX1JFRywKPiArCQkJICAgICAg IG1vZGUtPnZkaXNwbGF5KTsKPiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFf SFNZTkNfUFVMU0VfV0lEVEhfTE9XX1JFRywKPiArCQkgICAgIChtb2RlLT5oc3luY19lbmQgLSBt b2RlLT5oc3luY19zdGFydCkgJiAweEZGKTsKPiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFw LCBTTl9DSEFfSFNZTkNfUFVMU0VfV0lEVEhfSElHSF9SRUcsCj4gKwkJICAgICAoKChtb2RlLT5o c3luY19lbmQgLSBtb2RlLT5oc3luY19zdGFydCkgPj4gOCkgJiAweDdGKSB8Cj4gKwkJICAgICBo c3luY19wb2xhcml0eSk7Cj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX1ZT WU5DX1BVTFNFX1dJRFRIX0xPV19SRUcsCj4gKwkJICAgICAobW9kZS0+dnN5bmNfZW5kIC0gbW9k ZS0+dnN5bmNfc3RhcnQpICYgMHhGRik7Cj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwg U05fQ0hBX1ZTWU5DX1BVTFNFX1dJRFRIX0hJR0hfUkVHLAo+ICsJCSAgICAoKChtb2RlLT52c3lu Y19lbmQgLSBtb2RlLT52c3luY19zdGFydCkgPj4gOCkgJiAweDdGKSB8Cj4gKwkJICAgIHZzeW5j X3BvbGFyaXR5KTsKPiArCj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX0hP UklaT05UQUxfQkFDS19QT1JDSF9SRUcsCj4gKwkJICAgICAobW9kZS0+aHRvdGFsIC0gbW9kZS0+ aHN5bmNfZW5kKSAmIDB4RkYpOwo+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0NI QV9WRVJUSUNBTF9CQUNLX1BPUkNIX1JFRywKPiArCQkgICAgIChtb2RlLT52dG90YWwgLSBtb2Rl LT52c3luY19lbmQpICYgMHhGRik7Cj4gKwo+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAs IFNOX0NIQV9IT1JJWk9OVEFMX0ZST05UX1BPUkNIX1JFRywKPiArCQkgICAgIChtb2RlLT5oc3lu Y19zdGFydCAtIG1vZGUtPmhkaXNwbGF5KSAmIDB4RkYpOwo+ICsJcmVnbWFwX3dyaXRlKHBkYXRh LT5yZWdtYXAsIFNOX0NIQV9WRVJUSUNBTF9GUk9OVF9QT1JDSF9SRUcsCj4gKwkJICAgICAobW9k ZS0+dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlzcGxheSkgJiAweEZGKTsKPiArCj4gKwl1c2xlZXBf cmFuZ2UoMTAwMDAsIDEwNTAwKTsgLyogMTBtcyBkZWxheSByZWNvbW1lbmRlZCBieSBzcGVjICov Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9lbmFibGUoc3RydWN0IGRybV9i cmlkZ2UgKmJyaWRnZSkKPiArewo+ICsJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEgPSBicmlk Z2VfdG9fdGlfc25fYnJpZGdlKGJyaWRnZSk7Cj4gKwl1bnNpZ25lZCBpbnQgdmFsOwo+ICsKPiAr CWlmIChwZGF0YS0+cGFuZWwpCj4gKwkJZHJtX3BhbmVsX3ByZXBhcmUocGRhdGEtPnBhbmVsKTsK PiArCj4gKwkvKiBEU0lfQSBsYW5lIGNvbmZpZyAqLwo+ICsJdmFsID0gKDQgLSBwZGF0YS0+ZHNp LT5sYW5lcykgPDwgU05fRFNJQV9MQU5FX09GRlNFVDsKPiArCXJlZ21hcF91cGRhdGVfYml0cyhw ZGF0YS0+cmVnbWFwLCBTTl9EU0lfTEFORVNfUkVHLAo+ICsJCQkgICBTTl9EU0lBX05VTV9MQU5F U19CSVRTLCB2YWwpOwo+ICsKPiArCS8qIERQIGxhbmUgY29uZmlnICovCj4gKwl2YWwgPSAocGRh dGEtPmRzaS0+bGFuZXMgLSAxKSA8PCBTTl9EUF9MQU5FX09GRlNFVDsKPiArCXJlZ21hcF91cGRh dGVfYml0cyhwZGF0YS0+cmVnbWFwLCBTTl9TU0NfQ09ORklHX1JFRywKPiArCQkJICAgU05fRFBf TlVNX0xBTkVTX0JJVFMsIHZhbCk7Cj4gKwo+ICsJLyogc2V0IGRzaS9kcCBjbGsgZnJlcXVlbmN5 IHZhbHVlICovCj4gKwl0aV9zbl9icmlkZ2Vfc2V0X2RzaV9kcF9yYXRlKHBkYXRhKTsKPiArCj4g KwkvKiBlbmFibGUgRFAgUExMICovCj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05f UExMX0VOQUJMRV9SRUcsIDEpOwo+ICsJdXNsZWVwX3JhbmdlKDEwMDAwLCAxMDUwMCk7IC8qIDEw bXMgZGVsYXkgcmVjb21tZW5kZWQgYnkgc3BlYyAqLwo+ICsKPiArCS8qKgo+ICsJICogVGhlIFNO NjVEU0k4NiBvbmx5IHN1cHBvcnRzIEFTU1IgRGlzcGxheSBBdXRoZW50aWNhdGlvbiBtZXRob2Qg YW5kCj4gKwkgKiB0aGlzIG1ldGhvZCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuIEFuIGVEUCBwYW5l bCBtdXN0IHN1cHBvcnQgdGhpcwo+ICsJICogYXV0aGVudGljYXRpb24gbWV0aG9kLiBXZSBuZWVk IHRvIGVuYWJsZSB0aGlzIG1ldGhvZCBpbiB0aGUgZURQIHBhbmVsCj4gKwkgKiBhdCBEaXNwbGF5 UG9ydCBhZGRyZXNzIDB4MDAxMEEgcHJpb3IgdG8gbGluayB0cmFpbmluZy4KPiArCSAqLwo+ICsJ cmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0FVWF9XREFUQTBfUkVHLCAweDAxKTsKPiAr CXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9BVVhfQUREUl8xOV8xNl9SRUcsIDB4MDAp Owo+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0FVWF9BRERSXzE1XzhfUkVHLCAw eDAxKTsKPiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9BVVhfQUREUl83XzBfUkVH LCAweDBBKTsKPiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9BVVhfTEVOR1RIX1JF RywgMHgwMSk7Cj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQVVYX0NNRF9SRUcs IDB4ODEpOwo+ICsJdXNsZWVwX3JhbmdlKDEwMDAwLCAxMDUwMCk7IC8qIDEwbXMgZGVsYXkgcmVj b21tZW5kZWQgYnkgc3BlYyAqLwo+ICsKPiArCS8qIFNlbWkgYXV0byBsaW5rIHRyYWluaW5nIG1v ZGUgKi8KPiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9NTF9UWF9NT0RFX1JFRywg MHgwQSk7Cj4gKwltc2xlZXAoMjApOyAvKiAyMG1zIGRlbGF5IHJlY29tbWVuZGVkIGJ5IHNwZWMg Ki8KPiArCj4gKwkvKiBjb25maWcgdmlkZW8gcGFyYW1ldGVycyAqLwo+ICsJdGlfc25fYnJpZGdl X3NldF92aWRlb190aW1pbmdzKHBkYXRhKTsKPiArCj4gKwkvKiBlbmFibGUgdmlkZW8gc3RyZWFt ICovCj4gKwlyZWdtYXBfdXBkYXRlX2JpdHMocGRhdGEtPnJlZ21hcCwgU05fRU5IX0ZSQU1FX1JF RywKPiArCQkJICAgU05fRU5BQkxFX1ZJRF9TVFJFQU1fQklULCBTTl9FTkFCTEVfVklEX1NUUkVB TV9CSVQpOwo+ICsKPiArCWlmIChwZGF0YS0+cGFuZWwpCj4gKwkJZHJtX3BhbmVsX2VuYWJsZShw ZGF0YS0+cGFuZWwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB0aV9zbl9icmlkZ2VfcHJlX2Vu YWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+ICt7Cj4gKwlzdHJ1Y3QgdGlfc25fYnJp ZGdlICpwZGF0YSA9IGJyaWRnZV90b190aV9zbl9icmlkZ2UoYnJpZGdlKTsKPiArCj4gKwlwbV9y dW50aW1lX2dldF9zeW5jKHBkYXRhLT5kZXYpOwo+ICsKPiArCS8qIGNvbmZpZ3VyZSBicmlkZ2Ug cmVmX2NsayAqLwo+ICsJdGlfc25fYnJpZGdlX3NldF9yZWZjbGtfZnJlcShwZGF0YSk7Cj4gKwo+ ICsJLyogaW4gY2FzZSBkcm1fcGFuZWwgaXMgY29ubmVjdGVkIHRoZW4gSFBEIGlzIG5vdCBzdXBw b3J0ZWQgKi8KPiArCWlmIChwZGF0YS0+cGFuZWwpCj4gKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKHBk YXRhLT5yZWdtYXAsIFNOX0hQRF9ESVNBQkxFX1JFRywKPiArCQkJCSAgIFNOX0hQRF9ESVNBQkxF X0JJVCwgU05fSFBEX0RJU0FCTEVfQklUKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdGlfc25f YnJpZGdlX3Bvc3RfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+ICt7Cj4gKwlz dHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90b190aV9zbl9icmlkZ2UoYnJpZGdl KTsKPiArCj4gKwlpZiAocGRhdGEtPnJlZmNsaykKPiArCQljbGtfZGlzYWJsZV91bnByZXBhcmUo cGRhdGEtPnJlZmNsayk7Cj4gKwo+ICsJcG1fcnVudGltZV9wdXRfc3luYyhwZGF0YS0+ZGV2KTsK PiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIHRpX3NuX2Jy aWRnZV9mdW5jcyA9IHsKPiArCS5hdHRhY2ggPSB0aV9zbl9icmlkZ2VfYXR0YWNoLAo+ICsJLnBy ZV9lbmFibGUgPSB0aV9zbl9icmlkZ2VfcHJlX2VuYWJsZSwKPiArCS5lbmFibGUgPSB0aV9zbl9i cmlkZ2VfZW5hYmxlLAo+ICsJLmRpc2FibGUgPSB0aV9zbl9icmlkZ2VfZGlzYWJsZSwKPiArCS5w b3N0X2Rpc2FibGUgPSB0aV9zbl9icmlkZ2VfcG9zdF9kaXNhYmxlLAo+ICt9Owo+ICsKPiArc3Rh dGljIGludCB0aV9zbl9icmlkZ2VfcGFyc2VfZHNpX2hvc3Qoc3RydWN0IHRpX3NuX2JyaWRnZSAq cGRhdGEpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGF0YS0+ZGV2LT5vZl9u b2RlOwo+ICsKPiArCXBkYXRhLT5ob3N0X25vZGUgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX25vZGUo bnAsIDAsIDApOwo+ICsKPiArCWlmICghcGRhdGEtPmhvc3Rfbm9kZSkgewo+ICsJCURSTV9FUlJP UigicmVtb3RlIGRzaSBob3N0IG5vZGUgbm90IGZvdW5kXG4iKTsKPiArCQlyZXR1cm4gLUVOT0RF VjsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCB0aV9zbl9i cmlkZ2VfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKPiArCSBjb25zdCBzdHJ1Y3Qg aTJjX2RldmljZV9pZCAqaWQpCj4gK3sKPiArCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhOwo+ ICsJaW50IHJldDsKPiArCj4gKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+ YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgewo+ICsJCURSTV9FUlJPUigiZGV2aWNlIGRvZXNuJ3Qg c3VwcG9ydCBJMkNcbiIpOwo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsJfQo+ICsKPiArCXBkYXRh ID0gZGV2bV9remFsbG9jKCZjbGllbnQtPmRldiwgc2l6ZW9mKHN0cnVjdCB0aV9zbl9icmlkZ2Up LAo+ICsJCQkgICAgIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFwZGF0YSkKPiArCQlyZXR1cm4gLUVO T01FTTsKPiArCj4gKwlwZGF0YS0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xpZW50 LAo+ICsJCQkJCSAgICAgJnRpX3NuX2JyaWRnZV9yZWdtYXBfY29uZmlnKTsKPiArCWlmIChJU19F UlIocGRhdGEtPnJlZ21hcCkpIHsKPiArCQlEUk1fRVJST1IoInJlZ21hcCBpMmMgaW5pdCBmYWls ZWRcbiIpOwo+ICsJCXJldHVybiBQVFJfRVJSKHBkYXRhLT5yZWdtYXApOwo+ICsJfQo+ICsKPiAr CXBkYXRhLT5kZXYgPSAmY2xpZW50LT5kZXY7Cj4gKwo+ICsJcmV0ID0gZHJtX29mX2ZpbmRfcGFu ZWxfb3JfYnJpZGdlKHBkYXRhLT5kZXYtPm9mX25vZGUsIDEsIDAsCj4gKwkJCQkJICAmcGRhdGEt PnBhbmVsLCBOVUxMKTsKPiArCWlmIChyZXQpIHsKPiArCQlEUk1fRVJST1IoImNvdWxkIG5vdCBm aW5kIGFueSBwYW5lbCBub2RlXG4iKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCWRl dl9zZXRfZHJ2ZGF0YSgmY2xpZW50LT5kZXYsIHBkYXRhKTsKPiArCj4gKwlwZGF0YS0+ZW5hYmxl X2dwaW8gPSBkZXZtX2dwaW9kX2dldChwZGF0YS0+ZGV2LCAiZW5hYmxlIiwKPiArCQkJCQkgICAg R1BJT0RfT1VUX0xPVyk7Cj4gKwlpZiAoSVNfRVJSKHBkYXRhLT5lbmFibGVfZ3BpbykpIHsKPiAr CQlEUk1fRVJST1IoImZhaWxlZCB0byBnZXQgZW5hYmxlIGdwaW8gZnJvbSBEVFxuIik7Cj4gKwkJ cmV0ID0gUFRSX0VSUihwZGF0YS0+ZW5hYmxlX2dwaW8pOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9 Cj4gKwo+ICsJcmV0ID0gdGlfc25fYnJpZGdlX3BhcnNlX3JlZ3VsYXRvcnMocGRhdGEpOwo+ICsJ aWYgKHJldCkgewo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBhcnNlIHJlZ3VsYXRvcnNcbiIp Owo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcGRhdGEtPnJlZmNsayA9IGRldm1fY2xr X2dldChwZGF0YS0+ZGV2LCAicmVmY2xrIik7Cj4gKwlpZiAoSVNfRVJSKHBkYXRhLT5yZWZjbGsp KSB7Cj4gKwkJcmV0ID0gUFRSX0VSUihwZGF0YS0+cmVmY2xrKTsKPiArCQlpZiAocmV0ID09IC1F UFJPQkVfREVGRVIpCj4gKwkJCXJldHVybiByZXQ7Cj4gKwkJRFJNX0RFQlVHX0tNUygicmVmY2xr IG5vdCBmb3VuZFxuIik7Cj4gKwkJcGRhdGEtPnJlZmNsayA9IE5VTEw7Cj4gKwl9Cj4gKwo+ICsJ cmV0ID0gdGlfc25fYnJpZGdlX3BhcnNlX2RzaV9ob3N0KHBkYXRhKTsKPiArCWlmIChyZXQpCj4g KwkJcmV0dXJuIHJldDsKPiArCj4gKwlwbV9ydW50aW1lX2VuYWJsZShwZGF0YS0+ZGV2KTsKPiAr Cj4gKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBwZGF0YSk7Cj4gKwo+ICsJcGRhdGEtPmJy aWRnZS5mdW5jcyA9ICZ0aV9zbl9icmlkZ2VfZnVuY3M7Cj4gKwlwZGF0YS0+YnJpZGdlLm9mX25v ZGUgPSBjbGllbnQtPmRldi5vZl9ub2RlOwo+ICsKPiArCWRybV9icmlkZ2VfYWRkKCZwZGF0YS0+ YnJpZGdlKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCB0aV9zbl9i cmlkZ2VfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCj4gK3sKPiArCXN0cnVjdCB0 aV9zbl9icmlkZ2UgKnBkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Cj4gKwo+ICsJ aWYgKCFwZGF0YSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlpZiAocGRhdGEtPmhvc3Rf bm9kZSkKPiArCQlvZl9ub2RlX3B1dChwZGF0YS0+aG9zdF9ub2RlKTsKCkl0IGlzIGFsd2F5cyB0 cnVlLgoKPiArCj4gKwlwbV9ydW50aW1lX2Rpc2FibGUocGRhdGEtPmRldik7Cj4gKwo+ICsJaWYg KHBkYXRhLT5kc2kpIHsKCkl0IGlzIGFsd2F5cyB0cnVlLgpCZXNpZGUgdGhlc2UgY2hlY2tzIGl0 IGxvb2tzIE9LLgoKUmVnYXJkcwpBbmRyemVqCgoKPiArCQltaXBpX2RzaV9kZXRhY2gocGRhdGEt PmRzaSk7Cj4gKwkJbWlwaV9kc2lfZGV2aWNlX3VucmVnaXN0ZXIocGRhdGEtPmRzaSk7Cj4gKwl9 Cj4gKwo+ICsJZHJtX2JyaWRnZV9yZW1vdmUoJnBkYXRhLT5icmlkZ2UpOwo+ICsKPiArCXJldHVy biAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGkyY19kZXZpY2VfaWQgdGlfc25fYnJpZGdl X2lkW10gPSB7Cj4gKwl7ICJ0aSxzbjY1ZHNpODYiLCAwfSwKPiArCXt9LAo+ICt9Owo+ICtNT0RV TEVfREVWSUNFX1RBQkxFKGkyYywgdGlfc25fYnJpZGdlX2lkKTsKPiArCj4gK3N0YXRpYyBjb25z dCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRpX3NuX2JyaWRnZV9tYXRjaF90YWJsZVtdID0gewo+ICsJ ey5jb21wYXRpYmxlID0gInRpLHNuNjVkc2k4NiJ9LAo+ICsJe30sCj4gK307Cj4gK01PRFVMRV9E RVZJQ0VfVEFCTEUob2YsIHRpX3NuX2JyaWRnZV9tYXRjaF90YWJsZSk7Cj4gKwo+ICtzdGF0aWMg c3RydWN0IGkyY19kcml2ZXIgdGlfc25fYnJpZGdlX2RyaXZlciA9IHsKPiArCS5kcml2ZXIgPSB7 Cj4gKwkJLm5hbWUgPSAidGlfc242NWRzaTg2IiwKPiArCQkub2ZfbWF0Y2hfdGFibGUgPSB0aV9z bl9icmlkZ2VfbWF0Y2hfdGFibGUsCj4gKwkJLnBtID0gJnRpX3NuX2JyaWRnZV9wbV9vcHMsCj4g Kwl9LAo+ICsJLnByb2JlID0gdGlfc25fYnJpZGdlX3Byb2JlLAo+ICsJLnJlbW92ZSA9IHRpX3Nu X2JyaWRnZV9yZW1vdmUsCj4gKwkuaWRfdGFibGUgPSB0aV9zbl9icmlkZ2VfaWQsCj4gK307Cj4g K21vZHVsZV9pMmNfZHJpdmVyKHRpX3NuX2JyaWRnZV9kcml2ZXIpOwo+ICsKPiArTU9EVUxFX0FV VEhPUigiU2FuZGVlcCBQYW5kYSA8c3BhbmRhQGNvZGVhdXJvcmEub3JnPiIpOwo+ICtNT0RVTEVf REVTQ1JJUFRJT04oInNuNjVkc2k4NiBEU0kgdG8gZURQIGJyaWRnZSBkcml2ZXIiKTsKPiArTU9E VUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vZHJpLWRldmVsCg==