From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [PATCH v5 1/4] drm/bridge: add support for sn65dsi86 bridge driver Date: Wed, 2 May 2018 15:03:16 -0400 Message-ID: <20180502190316.GR73214@art_vandelay> References: <1525235522-8954-1-git-send-email-spanda@codeaurora.org> <1525235522-8954-2-git-send-email-spanda@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1525235522-8954-2-git-send-email-spanda@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Sandeep Panda Cc: devicetree@vger.kernel.org, ryadav@codeaurora.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, abhinavk@codeaurora.org, hoegsberg@chromium.org, freedreno@lists.freedesktop.org, chandanu@codeaurora.org List-Id: linux-arm-msm@vger.kernel.org T24gV2VkLCBNYXkgMDIsIDIwMTggYXQgMTA6MDE6NTlBTSArMDUzMCwgU2FuZGVlcCBQYW5kYSB3 cm90ZToKPiBBZGQgc3VwcG9ydCBmb3IgVEkncyBzbjY1ZHNpODYgZHNpMmVkcCBicmlkZ2UgY2hp cC4KPiBUaGUgY2hpcCBjb252ZXJ0cyBEU0kgdHJhbnNtaXR0ZWQgc2lnbmFsIHRvIGVEUCBzaWdu YWwsCj4gd2hpY2ggaXMgZmVkIHRvIHRoZSBjb25uZWN0ZWQgZURQIHBhbmVsLgo+IAo+IFRoaXMg Y2hpcCBjYW4gYmUgY29udHJvbGxlZCB2aWEgZWl0aGVyIGkyYyBpbnRlcmZhY2Ugb3IKPiBkc2kg aW50ZXJmYWNlLiBDdXJyZW50bHkgaW4gZHJpdmVyIGFsbCB0aGUgY29udHJvbCByZWdpc3RlcnMK PiBhcmUgYmVpbmcgYWNjZXNzZWQgdGhyb3VnaCBpMmMgaW50ZXJmYWNlIG9ubHkuCj4gQWxzbyBh cyBvZiBub3cgSFBEIHN1cHBvcnQgaGFzIG5vdCBiZWVuIGFkZGVkIHRvIGJyaWRnZQo+IGNoaXAg ZHJpdmVyLgo+IAo+IENoYW5nZXMgaW4gdjE6Cj4gIC0gU3BsaXQgdGhlIGR0LWJpbmRpbmdzIGFu ZCB0aGUgZHJpdmVyIHN1cHBvcnQgaW50byBzZXBhcmF0ZSBwYXRjaGVzCj4gICAgKEFuZHJ6ZWog SGFqZGEpLgo+ICAtIFVzZSBvZiBncGlvZCBBUElzIHRvIHBhcnNlIGFuZCBjb25maWd1cmUgZ3Bp b3MgaW5zdGVhZCBvZiBvYnNvbGV0ZSBvbmVzCj4gICAgKEFuZHJ6ZWogSGFqZGEpLgo+ICAtIFVz ZSBtYWNyb3MgdG8gZGVmaW5lIHRoZSByZWdpc3RlciBvZmZzZXRzIChBbmRyemVqIEhhamRhKS4K PiAKPiBDaGFuZ2VzIGluIHYyOgo+ICAtIFNlcGFyYXRlIG91dCBlZHAgcGFuZWwgc3BlY2lmaWMg SFcgcmVzb3VyY2UgaGFuZGxpbmcgZnJvbSBicmlkZ2UKPiAgICBkcml2ZXIgYW5kIGNyZWF0ZSBh IHNlcGFyYXRlIGVkcCBwYW5lbCBkcml2ZXJzIHRvIGhhbmRsZSBwYW5lbAo+ICAgIHNwZWNpZmlj IG1vZGUgaW5mb3JtYXRpb24gYW5kIEhXIHJlc291cmNlcyAoU2VhbiBQYXVsKS4KPiAgLSBSZXBs YWNlIHByXyogQVBJcyB0byBEUk1fKiBBUElzIHRvIGxvZyBlcnJvciBvciBkZWJ1ZyBpbmZvcm1h dGlvbgo+ICAgIChTZWFuIFBhdWwpLgo+ICAtIFJlbW92ZSBzb21lIG9mIHRoZSB1bm5lY2Vzc2Fy eSBzdHJ1Y3R1cmUvdmFyaWFibGUgZnJvbSBkcml2ZXIgKFNlYW4KPiAgICBQYXVsKS4KPiAgLSBS ZW5hbWUgdGhlIGZ1bmN0aW9uIGFuZCBzdHJ1Y3R1cmUgcHJlZml4ICJzbjY1ZHNpODYiIHRvICJ0 aV9zbl9icmlkZ2UiCj4gICAgKFNlYW4gUGF1bCAvIFJvYiBIZXJyaW5nKS4KPiAgLSBSZW1vdmUg bW9zdCBvZiB0aGUgaGFyZC1jb2RpbmcgYW5kIG1vZGlmaWVkIHRoZSBicmlkZ2UgaW5pdCBzZXF1 ZW5jZQo+ICAgIGJhc2VkIG9uIGN1cnJlbnQgbW9kZSAoU2VhbiBQYXVsKS4KPiAgLSBSZW1vdmUg dGhlIGV4aXN0aW5nIGZ1bmN0aW9uIHRvIHJldHJpZXZlIHRoZSBFRElEIGRhdGEgYW5kCj4gICAg aW1wbGVtZW50ZWQgdGhpcyBhcyBhbiBpMmNfYWRhcHRlciBhbmQgdXNlIGRybV9nZXRfZWRpZCgp IChTZWFuIFBhdWwpLgo+ICAtIFJlbW92ZSB0aGUgZHVtbXkgaXJxIGhhbmRsZXIgaW1wbGVtZW50 YXRpb24sIHdpbGwgYWRkIGJhY2sgdGhlCj4gICAgcHJvcGVyIGlycSBoYW5kbGluZyBsYXRlciAo U2VhbiBQYXVsKS4KPiAgLSBDYXB0dXJlIHRoZSByZXF1aXJlZCBlbmFibGUgZ3Bpb3MgaW4gYSBz aW5nbGUgYXJyYXkgYmFzZWQgb24gZHQgZW50cnkKPiAgICBpbnN0ZWFkIG9mIGhhdmluZyBpbmRp dmlkdWFsIGRlc2NyaXB0b3IgZm9yIGVhY2ggZ3BpbyAoU2VhbiBQYXVsKS4KPiAKPiBDaGFuZ2Vz IGluIHYzOgo+ICAtIFJlbW92ZSB1c2FnZSBvZiBpcnFfZ3BpbyBhbmQgcmVwbGFjZSBpdCBhcyAi aW50ZXJydXB0cyIgcHJvcGVydHkgKFJvYgo+ICAgIEhlcnJpbmcpLgo+ICAtIFJlbW92ZSB0aGUg dW5uZWNlc3NhcnkgaGVhZGVyIGZpbGUgaW5jbHVzaW9ucyAoU2VhbiBQYXVsKS4KPiAgLSBSZWFy cmFuZ2UgdGhlIGhlYWRlciBmaWxlcyBpbiBhbHBoYWJldGljYWwgb3JkZXIgKFNlYW4gUGF1bCku Cj4gIC0gVXNlIHJlZ21hcCBpbnRlcmZhY2UgdG8gcGVyZm9ybSBpMmMgdHJhbnNhY3Rpb25zLgo+ ICAtIFVwZGF0ZSBDb3B5cmlnaHQvTGljZW5zZSBmaWVsZCBhbmQgYWRkcmVzcyBvdGhlciByZXZp ZXcgY29tbWVudHMKPiAgICAoSm9yZGFuIENyb3VzZSkuCj4gCj4gQ2hhbmdlcyBpbiB2NDoKPiAg LSBVcGRhdGUgTGljZW5zZS9Db3B5cmlnaHQgKFNlYW4gUGF1bCkuCj4gIC0gQWRkIEtjb25maWcg YW5kIE1ha2VmaWxlIGNoYW5nZXMgKFNlYW4gUGF1bCkuCj4gIC0gRHJvcCBpMmMgZ3BpbyBoYW5k bGluZyBmcm9tIHRoaXMgYnJpZGdlIGRyaXZlciwgc2luY2UgaTJjIHNkYS9zY2wgZ3Bpb3MKPiAg ICB3aWxsIGJlIGhhbmRsZWQgYnkgaTJjIG1hc3Rlci4KPiAgLSBSZW1vdmUgdW5uZWNlc3Nhcnkg Z290byBzdGF0ZW1lbnRzIChTZWFuIFBhdWwpLgo+ICAtIEFkZCBtdXRleCBsb2NrIHRvIHBvd2Vy X2N0cmwgQVBJIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyAoU2Vhbgo+ICAgIFBhdWwpLgo+ICAt IEFkZCBzdXBwb3J0IHRvIHBhcnNlIHJlZmVyZW5jZSBjbGsgZnJlcXVlbmN5IGZyb20gZHQob3B0 aW9uYWwpLgo+ICAtIFVwZGF0ZSB0aGUgYnJpZGdlIGNoaXAgZW5hYmxlL2Rpc2FibGUgc2VxdWVu Y2UuCgpJdCBzZWVtcyBsaWtlIHlvdSBhbHNvIGFkZGVkIDIgbmV3IHN1cHBseSBuYW1lcywgYXMg d2VsbCBhcyByZW1vdmUgdGhlCmNvbmZpZ3VyYWJsZSBncGlvcz8KCj4gCj4gQ2hhbmdlcyBpbiB2 NToKPiAgLSBGaXhlZCBLYnVpbGQgdGVzdCBzZXJ2aWNlIHJlcG9ydGVkIHdhcm5pbmdzLgo+IAo+ IFNpZ25lZC1vZmYtYnk6IFNhbmRlZXAgUGFuZGEgPHNwYW5kYUBjb2RlYXVyb3JhLm9yZz4KPiAt LS0KPiAgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnICAgICAgICB8ICAgOSArCj4gIGRy aXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUgICAgICAgfCAgIDEgKwo+ICBkcml2ZXJzL2dw dS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jIHwgNzI1ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKPiAgMyBmaWxlcyBjaGFuZ2VkLCA3MzUgaW5zZXJ0aW9ucygrKQo+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODYuYwo+IAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcgYi9kcml2ZXJzL2dw dS9kcm0vYnJpZGdlL0tjb25maWcKPiBpbmRleCAzYjk5ZDVhLi44MTUzMTUwIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvS2NvbmZpZwo+IEBAIC0xMDgsNiArMTA4LDE1IEBAIGNvbmZpZyBEUk1fVElfVEZQ NDEwCj4gIAktLS1oZWxwLS0tCj4gIAkgIFRleGFzIEluc3RydW1lbnRzIFRGUDQxMCBEVkkvSERN SSBUcmFuc21pdHRlciBkcml2ZXIKPiAgCj4gK2NvbmZpZyBEUk1fVElfU042NURTSTg2Cj4gKwl0 cmlzdGF0ZSAiVEkgU042NURTSTg2IERTSSB0byBlRFAgYnJpZGdlIgo+ICsJZGVwZW5kcyBvbiBP Rgo+ICsJc2VsZWN0IERSTV9LTVNfSEVMUEVSCj4gKwlzZWxlY3QgUkVHTUFQX0kyQwo+ICsJc2Vs ZWN0IERSTV9QQU5FTAo+ICsJLS0taGVscC0tLQo+ICsJICBUZXhhcyBJbnN0cnVtZW50cyBTTjY1 RFNJODYgRFNJIHRvIGVEUCBCcmlkZ2UgZHJpdmVyCj4gKwo+ICBzb3VyY2UgImRyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvYW5hbG9naXgvS2NvbmZpZyIKPiAgCj4gIHNvdXJjZSAiZHJpdmVycy9ncHUv ZHJtL2JyaWRnZS9hZHY3NTExL0tjb25maWciCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCj4gaW5k ZXggMzczZWIyOC4uMzcxMWJlOCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdl L01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQo+IEBAIC0x Miw0ICsxMiw1IEBAIG9iai0kKENPTkZJR19EUk1fVE9TSElCQV9UQzM1ODc2NykgKz0gdGMzNTg3 Njcubwo+ICBvYmotJChDT05GSUdfRFJNX0FOQUxPR0lYX0RQKSArPSBhbmFsb2dpeC8KPiAgb2Jq LSQoQ09ORklHX0RSTV9JMkNfQURWNzUxMSkgKz0gYWR2NzUxMS8KPiAgb2JqLSQoQ09ORklHX0RS TV9USV9URlA0MTApICs9IHRpLXRmcDQxMC5vCj4gK29iai0kKENPTkZJR19EUk1fVElfU042NURT STg2KSArPSB0aS1zbjY1ZHNpODYubwo+ICBvYmoteSArPSBzeW5vcHN5cy8KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODYuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvdGktc242NWRzaTg2LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAw MDAwMDAuLjAxOWM3Y2QKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS90aS1zbjY1ZHNpODYuYwo+IEBAIC0wLDAgKzEsNzI1IEBACj4gKy8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxOCwgVGhl IExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqLwo+ICsKPiArI2lu Y2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgo+ICsjaW5j bHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNf aGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+Cj4gKyNpbmNsdWRlIDxk cm0vZHJtX3BhbmVsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9pMmMuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KPiArI2luY2x1ZGUgPGxp bnV4L29mX2dyYXBoLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KPiArI2luY2x1ZGUg PGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgo+ICsKPiArI2RlZmluZSBTTl9CUklER0VfUkVW SVNJT05fSUQgMHgyCj4gKwo+ICsvKiBMaW5rIFRyYWluaW5nIHNwZWNpZmljIHJlZ2lzdGVycyAq Lwo+ICsjZGVmaW5lIFNOX0RFVklDRV9SRVZfUkVHCQkJMHgwOAo+ICsjZGVmaW5lIFNOX0hQRF9E SVNBQkxFX1JFRwkJCTB4NUMKPiArI2RlZmluZSBTTl9SRUZDTEtfRlJFUV9SRUcJCQkweDBBCj4g KyNkZWZpbmUgU05fRFNJX0xBTkVTX1JFRwkJCTB4MTAKPiArI2RlZmluZSBTTl9EU0lBX0NMS19G UkVRX1JFRwkJCTB4MTIKPiArI2RlZmluZSBTTl9FTkhfRlJBTUVfUkVHCQkJMHg1QQo+ICsjZGVm aW5lIFNOX1NTQ19DT05GSUdfUkVHCQkJMHg5Mwo+ICsjZGVmaW5lIFNOX0RBVEFSQVRFX0NPTkZJ R19SRUcJCQkweDk0Cj4gKyNkZWZpbmUgU05fUExMX0VOQUJMRV9SRUcJCQkweDBECj4gKyNkZWZp bmUgU05fU0NSQU1CTEVfQ09ORklHX1JFRwkJCTB4OTUKPiArI2RlZmluZSBTTl9BVVhfV0RBVEEw X1JFRwkJCTB4NjQKPiArI2RlZmluZSBTTl9BVVhfQUREUl8xOV8xNl9SRUcJCQkweDc0Cj4gKyNk ZWZpbmUgU05fQVVYX0FERFJfMTVfOF9SRUcJCQkweDc1Cj4gKyNkZWZpbmUgU05fQVVYX0FERFJf N18wX1JFRwkJCTB4NzYKPiArI2RlZmluZSBTTl9BVVhfTEVOR1RIX1JFRwkJCTB4NzcKPiArI2Rl ZmluZSBTTl9BVVhfQ01EX1JFRwkJCQkweDc4Cj4gKyNkZWZpbmUgU05fTUxfVFhfTU9ERV9SRUcJ CQkweDk2Cj4gKy8qIHZpZGVvIGNvbmZpZyBzcGVjaWZpYyByZWdpc3RlcnMgKi8KPiArI2RlZmlu ZSBTTl9DSEFfQUNUSVZFX0xJTkVfTEVOR1RIX0xPV19SRUcJMHgyMAo+ICsjZGVmaW5lIFNOX0NI QV9BQ1RJVkVfTElORV9MRU5HVEhfSElHSF9SRUcJMHgyMQo+ICsjZGVmaW5lIFNOX0NIQV9WRVJU SUNBTF9ESVNQTEFZX1NJWkVfTE9XX1JFRwkweDI0Cj4gKyNkZWZpbmUgU05fQ0hBX1ZFUlRJQ0FM X0RJU1BMQVlfU0laRV9ISUdIX1JFRwkweDI1Cj4gKyNkZWZpbmUgU05fQ0hBX0hTWU5DX1BVTFNF X1dJRFRIX0xPV19SRUcJMHgyQwo+ICsjZGVmaW5lIFNOX0NIQV9IU1lOQ19QVUxTRV9XSURUSF9I SUdIX1JFRwkweDJECj4gKyNkZWZpbmUgU05fQ0hBX1ZTWU5DX1BVTFNFX1dJRFRIX0xPV19SRUcJ MHgzMAo+ICsjZGVmaW5lIFNOX0NIQV9WU1lOQ19QVUxTRV9XSURUSF9ISUdIX1JFRwkweDMxCj4g KyNkZWZpbmUgU05fQ0hBX0hPUklaT05UQUxfQkFDS19QT1JDSF9SRUcJMHgzNAo+ICsjZGVmaW5l IFNOX0NIQV9WRVJUSUNBTF9CQUNLX1BPUkNIX1JFRwkJMHgzNgo+ICsjZGVmaW5lIFNOX0NIQV9I T1JJWk9OVEFMX0ZST05UX1BPUkNIX1JFRwkweDM4Cj4gKyNkZWZpbmUgU05fQ0hBX1ZFUlRJQ0FM X0ZST05UX1BPUkNIX1JFRwkJMHgzQQo+ICsjZGVmaW5lIFNOX0RBVEFfRk9STUFUX1JFRwkJCTB4 NUIKPiArCj4gKyNkZWZpbmUgTUlOX0RTSV9DTEtfRlJFUV9NSFoJNDAKPiArI2RlZmluZSBTTl9E RUZBVUxUX1JFRl9DTEtfS0haCTE5MjAwCj4gKwo+ICsvKiBmdWRnZSBmYWN0b3IgcmVxdWlyZWQg dG8gYWNjb3VudCBmb3IgOGIvMTBiIGVuY29kaW5nICovCj4gKyNkZWZpbmUgRFBfQ0xLX0ZVREdF X05VTQkxMAo+ICsjZGVmaW5lIERQX0NMS19GVURHRV9ERU4JOAo+ICsKPiArI2RlZmluZSBEUFBM TF9DTEtfU1JDX1JFRkNMSwkwCj4gKyNkZWZpbmUgRFBQTExfQ0xLX1NSQ19EU0lDTEsJMQo+ICsK PiArI2RlZmluZSBTTl9EU0lBX1JFRkNMS19PRkZTRVQJMQo+ICsjZGVmaW5lIFNOX0RTSUFfTEFO RV9PRkZTRVQJMwo+ICsjZGVmaW5lIFNOX0RQX0xBTkVfT0ZGU0VUCTQKPiArI2RlZmluZSBTTl9E UF9EQVRBX1JBVEVfT0ZGU0VUCTUKPiArI2RlZmluZSBTTl9USU1JTkdfSElHSF9PRkZTRVQJOAo+ ICsKPiArI2RlZmluZSBTTl9FTkFCTEVfVklEX1NUUkVBTV9CSVQJQklUKDMpCj4gKyNkZWZpbmUg U05fRFNJQV9OVU1fTEFORVNfQklUUwkJKEJJVCg0KSB8IEJJVCgzKSkKPiArI2RlZmluZSBTTl9E UF9OVU1fTEFORVNfQklUUwkJKEJJVCg1KSB8IEJJVCg0KSkKPiArI2RlZmluZSBTTl9EUF9EQVRB X1JBVEVfQklUUwkJKEJJVCg3KSB8IEJJVCg2KSB8IEJJVCg1KSkKPiArI2RlZmluZSBTTl9IUERf RElTQUJMRV9CSVQJCUJJVCgwKQo+ICsKPiArc3RydWN0IHRpX3NuX2JyaWRnZSB7Cj4gKwlzdHJ1 Y3QgZGV2aWNlICpkZXY7Cj4gKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7Cj4gKwlzdHJ1Y3QgZHJt X2JyaWRnZSBicmlkZ2U7Cj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBjb25uZWN0b3I7Cj4gKwlz dHJ1Y3QgZGV2aWNlX25vZGUgKmhvc3Rfbm9kZTsKPiArCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2Ug KmRzaTsKPiArCXVuc2lnbmVkIGludCByZWZjbGtfa2h6Owo+ICsJc3RydWN0IGRybV9wYW5lbCAq cGFuZWw7Cj4gKwlzdHJ1Y3QgZ3Bpb19kZXNjICplbmFibGVfZ3BpbzsKPiArCXVuc2lnbmVkIGlu dCBudW1fc3VwcGxpZXM7Cj4gKwlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSAqc3VwcGxpZXM7 Cj4gKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmRkYzsKPiArCXVuc2lnbmVkIGludCBudW1fbW9kZXM7 CgpZb3Ugb25seSB1c2UgdGhpcyBpbiBvbmUgZnVuY3Rpb24sIGl0IHNob3VsZCBiZSBhIGxvY2Fs LgoKPiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIGN1cnJfbW9kZTsKPiArCXN0cnVjdCBtdXRl eCBsb2NrOwo+ICsJdW5zaWduZWQgaW50IGN0cmxfcmVmX2NvdW50Owo+ICt9Owo+ICsKPiArc3Rh dGljIGNvbnN0IHN0cnVjdCByZWdtYXBfcmFuZ2UgdGlfc25fYnJpZGdlX3ZvbGF0aWxlX3Jhbmdl c1tdID0gewo+ICsJeyAucmFuZ2VfbWluID0gMCwgLnJhbmdlX21heCA9IDB4ZmYgfSwKPiArfTsK PiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2FjY2Vzc190YWJsZSB0aV9zbl9icmlk Z2Vfdm9sYXRpbGVfdGFibGUgPSB7Cj4gKwkueWVzX3JhbmdlcyA9IHRpX3NuX2JyaWRnZV92b2xh dGlsZV9yYW5nZXMsCj4gKwkubl95ZXNfcmFuZ2VzID0gQVJSQVlfU0laRSh0aV9zbl9icmlkZ2Vf dm9sYXRpbGVfcmFuZ2VzKSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFw X2NvbmZpZyB0aV9zbl9icmlkZ2VfcmVnbWFwX2NvbmZpZyA9IHsKPiArCS5yZWdfYml0cyA9IDgs Cj4gKwkudmFsX2JpdHMgPSA4LAo+ICsJLnZvbGF0aWxlX3RhYmxlID0gJnRpX3NuX2JyaWRnZV92 b2xhdGlsZV90YWJsZSwKPiArCS5jYWNoZV90eXBlID0gUkVHQ0FDSEVfTk9ORSwKPiArfTsKPiAr Cj4gK3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX3Bvd2VyX2N0cmwoc3RydWN0IHRpX3NuX2JyaWRn ZSAqcGRhdGEsIGJvb2wgZW5hYmxlKQo+ICt7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwltdXRl eF9sb2NrKCZwZGF0YS0+bG9jayk7Cj4gKwlpZiAoZW5hYmxlKQo+ICsJCXBkYXRhLT5jdHJsX3Jl Zl9jb3VudCsrOwo+ICsJZWxzZQo+ICsJCXBkYXRhLT5jdHJsX3JlZl9jb3VudC0tOwoKSSB0aGlu ayB5b3Ugc2hvdWxkIHVzZSBhIGtyZWYgaW5zdGVhZCBvZiByb2xsaW5nIHlvdXIgb3duIHJlZl9j b3VudC4gWW91IGNhbgpoYW5kbGUgcmVsZWFzZSBieSBjYWxsaW5nIGtyZWZfcHV0X211dGV4KCks IHdoaWNoIHdpbGwgaGFuZGxlIHRoZSByZWZlcmVuY2UgYW5kCnRoZSBsb2NrLiBPbiB0aGUgYWNx dWlyZSBzaWRlLCB5b3UgY2FuIHVzZSBrcmVmX2dldF91bmxlc3NfemVybyB3aGljaCB3aWxsIGJl CmZhc3QgaWYgdGhlIHJlZmVyZW5jZSBpcyBhbHJlYWR5IGFjdGl2ZS4KCj4gKwo+ICsJaWYgKGVu YWJsZSAmJiAocGRhdGEtPmN0cmxfcmVmX2NvdW50ID09IDEpKSB7Cj4gKwkJcmV0ID0gcmVndWxh dG9yX2J1bGtfZW5hYmxlKHBkYXRhLT5udW1fc3VwcGxpZXMsCj4gKwkJCQkJCSBwZGF0YS0+c3Vw cGxpZXMpOwo+ICsJCWlmIChyZXQpIHsKPiArCQkJRFJNX0VSUk9SKCJicmlkZ2UgcmVndWxhdG9y IGVuYWJsZSBmYWlsZWRcbiIpOwoKcHJpbnQgcmV0IG9uIGZhaWx1cmUKCj4gKwkJCWdvdG8gZXhp dDsKPiArCQl9Cj4gKwo+ICsJCWdwaW9kX3NldF92YWx1ZShwZGF0YS0+ZW5hYmxlX2dwaW8sIDEp Owo+ICsJfSBlbHNlIGlmICghZW5hYmxlICYmICFwZGF0YS0+Y3RybF9yZWZfY291bnQpIHsKPiAr CQlncGlvZF9zZXRfdmFsdWUocGRhdGEtPmVuYWJsZV9ncGlvLCAwKTsKPiArCj4gKwkJcmVndWxh dG9yX2J1bGtfZGlzYWJsZShwZGF0YS0+bnVtX3N1cHBsaWVzLCBwZGF0YS0+c3VwcGxpZXMpOwo+ ICsJfSBlbHNlIHsKPiArCQlEUk1fREVCVUcoInRpX3NuX2JyaWRnZSBwb3dlciBjdHJsOiAlZCBy ZWZjb3VudDogJWRcbiIsCj4gKwkJCQkJCWVuYWJsZSwgcGRhdGEtPmN0cmxfcmVmX2NvdW50KTsK Ck5vIG5lZWQgZm9yIHRoaXMuCgo+ICsJfQo+ICsKPiArZXhpdDoKPiArCW11dGV4X3VubG9jaygm cGRhdGEtPmxvY2spOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyogQ29ubmVjdG9yIGZ1 bmNzICovCj4gK3N0YXRpYyBzdHJ1Y3QgdGlfc25fYnJpZGdlICoKPiArY29ubmVjdG9yX3RvX3Rp X3NuX2JyaWRnZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ICt7Cj4gKwlyZXR1 cm4gY29udGFpbmVyX29mKGNvbm5lY3Rvciwgc3RydWN0IHRpX3NuX2JyaWRnZSwgY29ubmVjdG9y KTsKPiArfQo+ICsKPiArc3RhdGljIGludCB0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2dldF9tb2Rl cyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ICt7Cj4gKwlzdHJ1Y3QgdGlfc25f YnJpZGdlICpwZGF0YSA9IGNvbm5lY3Rvcl90b190aV9zbl9icmlkZ2UoY29ubmVjdG9yKTsKPiAr CXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsID0gcGRhdGEtPnBhbmVsOwo+ICsJc3RydWN0IGVkaWQg KmVkaWQ7Cj4gKwo+ICsJaWYgKHBhbmVsKSB7Cj4gKwkJRFJNX0RFQlVHKCJnZXQgbW9kZSBmcm9t IGNvbm5lY3RlZCBkcm1fcGFuZWxcbiIpOwo+ICsJCXBkYXRhLT5udW1fbW9kZXMgPSBkcm1fcGFu ZWxfZ2V0X21vZGVzKHBhbmVsKTsKPiArCQlyZXR1cm4gcGRhdGEtPm51bV9tb2RlczsKPiArCX0K PiArCj4gKwkvKiBnZXQgZnJvbSBFRElEICovCgpUaGlzIGNvbW1lbnQgaXNuJ3QgdXNlZnVsLgoK PiArCWlmICghcGRhdGEtPmRkYykKPiArCQlyZXR1cm4gMDsKPiArCj4gKwl0aV9zbl9icmlkZ2Vf cG93ZXJfY3RybChwZGF0YSwgdHJ1ZSk7Cj4gKwllZGlkID0gZHJtX2dldF9lZGlkKGNvbm5lY3Rv ciwgcGRhdGEtPmRkYyk7Cj4gKwl0aV9zbl9icmlkZ2VfcG93ZXJfY3RybChwZGF0YSwgZmFsc2Up Owo+ICsJaWYgKCFlZGlkKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWRybV9tb2RlX2Nvbm5lY3Rv cl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uZWN0b3IsIGVkaWQpOwo+ICsJcGRhdGEtPm51bV9t b2RlcyA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3IsIGVkaWQpOwo+ICsJa2ZyZWUoZWRp ZCk7Cj4gKwo+ICsJcmV0dXJuIHBkYXRhLT5udW1fbW9kZXM7Cj4gK30KPiArCj4gK3N0YXRpYyBl bnVtIGRybV9tb2RlX3N0YXR1cwo+ICt0aV9zbl9icmlkZ2VfY29ubmVjdG9yX21vZGVfdmFsaWQo c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiArCQkJICAgICBzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSAqbW9kZSkKPiArewo+ICsJLyogbWF4aW11bSBzdXBwb3J0ZWQgcmVzb2x1dGlv biBpcyA0SyBhdCA2MCBmcHMgKi8KPiArCWlmIChtb2RlLT5jbG9jayA+IDU5NDAwMCkKPiArCQly ZXR1cm4gTU9ERV9DTE9DS19ISUdIOwo+ICsKPiArCXJldHVybiBNT0RFX09LOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIHRpX3NuX2JyaWRnZV9j b25uZWN0b3JfaGVscGVyX2Z1bmNzID0gewo+ICsJLmdldF9tb2RlcyA9IHRpX3NuX2JyaWRnZV9j b25uZWN0b3JfZ2V0X21vZGVzLAo+ICsJLm1vZGVfdmFsaWQgPSB0aV9zbl9icmlkZ2VfY29ubmVj dG9yX21vZGVfdmFsaWQsCj4gK307Cj4gKwo+ICtzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0 YXR1cwo+ICt0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQo+ICt7Cj4gKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpw ZGF0YSA9IGNvbm5lY3Rvcl90b190aV9zbl9icmlkZ2UoY29ubmVjdG9yKTsKPiArCj4gKwkvKioK PiArCSAqIFRPRE86IEN1cnJlbnRseSBpZiBkcm1fcGFuZWwgaXMgcHJlc2VudCwgdGhlbiBhbHdh eXMKPiArCSAqIHJldHVybiB0aGUgc3RhdHVzIGFzIGNvbm5lY3RlZC4gTmVlZCB0byBhZGQgc3Vw cG9ydCB0byBkZXRlY3QKPiArCSAqIGRldmljZSBzdGF0ZSBmb3Igbm8gcGFuZWwoaG90IHBsdWdn YWJsZSkgc2NlbmFyaW9zLgo+ICsJICovCj4gKwlpZiAocGRhdGEtPnBhbmVsKQo+ICsJCXJldHVy biBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKPiArCWVsc2UKPiArCQlyZXR1cm4gY29ubmVj dG9yX3N0YXR1c191bmtub3duOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9j b25uZWN0b3JfZnVuY3MgdGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKPiArCS5maWxs X21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAo+ICsJLmRl dGVjdCA9IHRpX3NuX2JyaWRnZV9jb25uZWN0b3JfZGV0ZWN0LAo+ICsJLmRlc3Ryb3kgPSBkcm1f Y29ubmVjdG9yX2NsZWFudXAsCj4gKwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0 b3JfcmVzZXQsCj4gKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVy X2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCj4gKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBk cm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKPiArfTsKPiArCj4gK3N0 YXRpYyBzdHJ1Y3QgdGlfc25fYnJpZGdlICpicmlkZ2VfdG9fdGlfc25fYnJpZGdlKHN0cnVjdCBk cm1fYnJpZGdlICpicmlkZ2UpCj4gK3sKPiArCXJldHVybiBjb250YWluZXJfb2YoYnJpZGdlLCBz dHJ1Y3QgdGlfc25fYnJpZGdlLCBicmlkZ2UpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRpX3Nu X2JyaWRnZV9yZWFkX2RldmljZV9yZXYoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCj4gK3sK PiArCXVuc2lnbmVkIGludCByZXYgPSAwOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJcmV0ID0g cmVnbWFwX3JlYWQocGRhdGEtPnJlZ21hcCwgU05fREVWSUNFX1JFVl9SRUcsICZyZXYpOwo+ICsJ aWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCWlmIChyZXYgIT0gU05fQlJJREdFX1JF VklTSU9OX0lEKSB7Cj4gKwkJRFJNX0VSUk9SKCJ0aV9zbl9icmlkZ2UgcmV2aXNpb24gaWQ6IDB4 JXggbWlzbWF0Y2hcbiIsIHJldik7Cj4gKwkJcmV0ID0gLUVJTlZBTDsKPiArCX0KPiArCj4gKwly ZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRpX3NuX2Jy aWRnZV9zdXBwbHlfbmFtZXNbXSA9IHsKPiArCSJ2Y2NhIiwKPiArCSJ2Y2MiLAo+ICsJInZjY2lv IiwKPiArCSJ2cGxsIiwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX3BhcnNl X3JlZ3VsYXRvcnMoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCj4gK3sKPiArCXVuc2lnbmVk IGludCBpOwo+ICsKPiArCXBkYXRhLT5udW1fc3VwcGxpZXMgPSBBUlJBWV9TSVpFKHRpX3NuX2Jy aWRnZV9zdXBwbHlfbmFtZXMpOwo+ICsKPiArCXBkYXRhLT5zdXBwbGllcyA9IGRldm1fa2NhbGxv YyhwZGF0YS0+ZGV2LCBwZGF0YS0+bnVtX3N1cHBsaWVzLAo+ICsJCQkJICAgICBzaXplb2YoKnBk YXRhLT5zdXBwbGllcyksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFwZGF0YS0+c3VwcGxpZXMpCj4g KwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fc3Vw cGxpZXM7IGkrKykKPiArCQlwZGF0YS0+c3VwcGxpZXNbaV0uc3VwcGx5ID0gdGlfc25fYnJpZGdl X3N1cHBseV9uYW1lc1tpXTsKPiArCj4gKwlyZXR1cm4gZGV2bV9yZWd1bGF0b3JfYnVsa19nZXQo cGRhdGEtPmRldiwKPiArCQkJCXBkYXRhLT5udW1fc3VwcGxpZXMsIHBkYXRhLT5zdXBwbGllcyk7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX2F0dGFjaF9wYW5lbChzdHJ1Y3Qg dGlfc25fYnJpZGdlICpwZGF0YSkKPiArewo+ICsJc3RydWN0IGRldmljZV9ub2RlICpwYW5lbF9u b2RlLCAqcG9ydCwgKmVuZHBvaW50Owo+ICsKPiArCXBkYXRhLT5wYW5lbCA9IE5VTEw7Cj4gKwlw b3J0ID0gb2ZfZ3JhcGhfZ2V0X3BvcnRfYnlfaWQocGRhdGEtPmRldi0+b2Zfbm9kZSwgMSk7Cj4g KwlpZiAocG9ydCkgewoKRmxpcCB0aGlzIHRvIGF2b2lkIGluZGVudGluZyB0aGUgd2hvbGUgZnVu Y3Rpb24uIGllOgoKaWYgKCFwb3J0KQogICAgICAgIHJldHVybiAwOwoKPiArCQllbmRwb2ludCA9 IG9mX2dldF9jaGlsZF9ieV9uYW1lKHBvcnQsICJlbmRwb2ludCIpOwo+ICsJCW9mX25vZGVfcHV0 KHBvcnQpOwo+ICsJCWlmICghZW5kcG9pbnQpIHsKPiArCQkJRFJNX0VSUk9SKCJubyBvdXRwdXQg ZW5kcG9pbnQgZm91bmRcbiIpOwo+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiArCQl9Cj4gKwo+ICsJ CXBhbmVsX25vZGUgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50KGVuZHBvaW50KTsK PiArCQlvZl9ub2RlX3B1dChlbmRwb2ludCk7Cj4gKwkJaWYgKCFwYW5lbF9ub2RlKSB7Cj4gKwkJ CURSTV9FUlJPUigibm8gb3V0cHV0IG5vZGUgZm91bmRcbiIpOwo+ICsJCQlyZXR1cm4gLUVJTlZB TDsKPiArCQl9Cj4gKwo+ICsJCXBkYXRhLT5wYW5lbCA9IG9mX2RybV9maW5kX3BhbmVsKHBhbmVs X25vZGUpOwo+ICsJCW9mX25vZGVfcHV0KHBhbmVsX25vZGUpOwo+ICsJCWlmICghcGRhdGEtPnBh bmVsKSB7Cj4gKwkJCURSTV9FUlJPUigibm8gcGFuZWwgbm9kZSBmb3VuZFxuIik7Cj4gKwkJCXJl dHVybiAtRUlOVkFMOwo+ICsJCX0KPiArCQlkcm1fcGFuZWxfYXR0YWNoKHBkYXRhLT5wYW5lbCwg JnBkYXRhLT5jb25uZWN0b3IpOwo+ICsJCURSTV9ERUJVRygicGFuZWwgYXR0YWNoZWRcbiIpOwoK VGhpcyBsb2cgc2hvdWxkIGJlIERSTV9ERUJVR19LTVMgYW5kIHlvdSBzaG91bGQgYmUgbW9yZSBk ZXNjcmlwdGl2ZSBpbiB5b3VyCm1lc3NhZ2UgKGllOiAiQXR0YWNoZWQgc242NWRzaTg2IHBhbmVs IikuCgo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRpX3Nu X2JyaWRnZV9hdHRhY2goc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPiArewo+ICsJc3RydWN0 IG1pcGlfZHNpX2hvc3QgKmhvc3Q7Cj4gKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2k7Cj4g KwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90b190aV9zbl9icmlkZ2UoYnJp ZGdlKTsKPiArCWludCByZXQ7Cj4gKwljb25zdCBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlX2luZm8g aW5mbyA9IHsgLnR5cGUgPSAidGlfc25fYnJpZGdlIiwKPiArCQkJCQkJICAgLmNoYW5uZWwgPSAw LAo+ICsJCQkJCQkgICAubm9kZSA9IE5VTEwsCj4gKwkJCQkJCSB9Owo+ICsKPiArCWlmICghYnJp ZGdlLT5lbmNvZGVyKSB7Cj4gKwkJRFJNX0VSUk9SKCJQYXJlbnQgZW5jb2RlciBvYmplY3Qgbm90 IGZvdW5kXG4iKTsKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArCj4gKwkvKiBIUEQgbm90 IHN1cHBvcnRlZCAqLwo+ICsJcGRhdGEtPmNvbm5lY3Rvci5wb2xsZWQgPSAwOwo+ICsKPiArCXJl dCA9IGRybV9jb25uZWN0b3JfaW5pdChicmlkZ2UtPmRldiwgJnBkYXRhLT5jb25uZWN0b3IsCj4g KwkJCQkgJnRpX3NuX2JyaWRnZV9jb25uZWN0b3JfZnVuY3MsCj4gKwkJCQkgRFJNX01PREVfQ09O TkVDVE9SX2VEUCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5p dGlhbGl6ZSBjb25uZWN0b3Igd2l0aCBkcm1cbiIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4g Kwo+ICsJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZwZGF0YS0+Y29ubmVjdG9yLAo+ICsJCQkJ ICZ0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7Cj4gKwlkcm1fbW9kZV9jb25u ZWN0b3JfYXR0YWNoX2VuY29kZXIoJnBkYXRhLT5jb25uZWN0b3IsIGJyaWRnZS0+ZW5jb2Rlcik7 Cj4gKwo+ICsJaG9zdCA9IG9mX2ZpbmRfbWlwaV9kc2lfaG9zdF9ieV9ub2RlKHBkYXRhLT5ob3N0 X25vZGUpOwo+ICsJaWYgKCFob3N0KSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZmluZCBk c2kgaG9zdFxuIik7Cj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwl9Cj4gKwo+ICsJZHNpID0gbWlw aV9kc2lfZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoaG9zdCwgJmluZm8pOwo+ICsJaWYgKElTX0VSUihk c2kpKSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gY3JlYXRlIGRzaSBkZXZpY2VcbiIpOwo+ ICsJCXJldCA9IFBUUl9FUlIoZHNpKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCS8q IFRPRE86IHNldHRpbmcgdG8gNCBsYW5lcyBhbHdheXMgZm9yIG5vdyAqLwo+ICsJZHNpLT5sYW5l cyA9IDQ7Cj4gKwlkc2ktPmZvcm1hdCA9IE1JUElfRFNJX0ZNVF9SR0I4ODg7Cj4gKwlkc2ktPm1v ZGVfZmxhZ3MgPSBNSVBJX0RTSV9NT0RFX1ZJREVPIHwgTUlQSV9EU0lfTU9ERV9WSURFT19TWU5D X1BVTFNFIHwKPiArCQkJICBNSVBJX0RTSV9NT0RFX0VPVF9QQUNLRVQgfCBNSVBJX0RTSV9NT0RF X1ZJREVPX0hTRTsKPiArCj4gKwlyZXQgPSBtaXBpX2RzaV9hdHRhY2goZHNpKTsKPiArCWlmIChy ZXQgPCAwKSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gYXR0YWNoIGRzaSB0byBob3N0XG4i KTsKPiArCQltaXBpX2RzaV9kZXZpY2VfdW5yZWdpc3Rlcihkc2kpOwo+ICsJCXJldHVybiByZXQ7 Cj4gKwl9Cj4gKwo+ICsJcGRhdGEtPmRzaSA9IGRzaTsKPiArCj4gKwlEUk1fREVCVUcoImJyaWRn ZSBhdHRhY2hlZFxuIik7CgpTYW1lIGNvbW1lbnQgaGVyZSByZWdhcmRpbmcgYmVpbmcgbW9yZSBk ZXNjcmlwdGl2ZS4KCj4gKwkvKiBhdHRhY2ggcGFuZWwgdG8gYnJpZGdlICovCj4gKwl0aV9zbl9i cmlkZ2VfYXR0YWNoX3BhbmVsKHBkYXRhKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX21vZGVfc2V0KHN0cnVjdCBkcm1fYnJpZGdlICpicmlk Z2UsCj4gKwkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCj4gKwkJCQkgICAg c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkal9tb2RlKQo+ICt7Cj4gKwlzdHJ1Y3QgdGlfc25f YnJpZGdlICpwZGF0YSA9IGJyaWRnZV90b190aV9zbl9icmlkZ2UoYnJpZGdlKTsKPiArCj4gKwlE Uk1fREVCVUcoIm1vZGVfc2V0OiBoZGlzcGxheT0lZCwgdmRpc3BsYXk9JWQsIHZyZWZyZXNoPSVk LCBjbG9jaz0lZFxuIiwKPiArCQlhZGpfbW9kZS0+aGRpc3BsYXksIGFkal9tb2RlLT52ZGlzcGxh eSwKPiArCQlhZGpfbW9kZS0+dnJlZnJlc2gsIGFkal9tb2RlLT5jbG9jayk7Cj4gKwo+ICsJZHJt X21vZGVfY29weSgmcGRhdGEtPmN1cnJfbW9kZSwgYWRqX21vZGUpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCB0aV9zbl9icmlkZ2VfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+ ICt7Cj4gKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90b190aV9zbl9icmlk Z2UoYnJpZGdlKTsKPiArCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsID0gcGRhdGEtPnBhbmVsOwo+ ICsKPiArCWlmIChwYW5lbCkgewo+ICsJCWRybV9wYW5lbF9kaXNhYmxlKHBhbmVsKTsKPiArCQlk cm1fcGFuZWxfdW5wcmVwYXJlKHBhbmVsKTsKPiArCX0KPiArCj4gKwkvKiBkaXNhYmxlIHZpZGVv IHN0cmVhbSAqLwo+ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKHBkYXRhLT5yZWdtYXAsIFNOX0VOSF9G UkFNRV9SRUcsCj4gKwkJCVNOX0VOQUJMRV9WSURfU1RSRUFNX0JJVCwgMCk7Cj4gKwkvKiBzZW1p IGF1dG8gbGluayB0cmFpbmluZyBtb2RlIE9GRiAqLwo+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5y ZWdtYXAsIFNOX01MX1RYX01PREVfUkVHLCAwKTsKPiArCS8qIGRpc2FibGUgRFAgUExMICovCj4g KwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fUExMX0VOQUJMRV9SRUcsIDApOwo+ICt9 Cj4gKwo+ICsvKiByZWZlcmVuY2UgY2xrIGZyZXF1ZW5jaWVzIHN1cHBvcnRlZCBieSB0aGUgYnJp ZGdlIGluIEtIeiAqLwo+ICtzdGF0aWMgdTMyIHRpX3NuX2JyaWRnZV9yZWZfY2xrX3RhYmxlW10g PSB7Cj4gKwkxMjAwMCwKPiArCTE5MjAwLAo+ICsJMjYwMDAsCj4gKwkyNzAwMCwKPiArCTM4NDAw LAo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX3NldF9yZWZjbGsoc3RydWN0 IHRpX3NuX2JyaWRnZSAqcGRhdGEpCj4gK3sKPiArCWludCBpID0gMDsKPiArCj4gKwlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRSh0aV9zbl9icmlkZ2VfcmVmX2Nsa190YWJsZSk7IGkrKykKPiAr CQlpZiAodGlfc25fYnJpZGdlX3JlZl9jbGtfdGFibGVbaV0gPT0gcGRhdGEtPnJlZmNsa19raHop Cj4gKwkJCWJyZWFrOwo+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX1JFRkNMS19G UkVRX1JFRywKPiArCQkoRFBQTExfQ0xLX1NSQ19SRUZDTEsgfCAoaSA8PCBTTl9EU0lBX1JFRkNM S19PRkZTRVQpKSk7CgpXaGF0IGlmIHRoZSByZWZjbGsgZnJlcXVlbmN5IGlzbid0IGZvdW5kPwoK PiArfQo+ICsKPiArc3RydWN0IGRwX2RhdGFfcmF0ZSB7Cj4gKwl1bnNpZ25lZCBpbnQgYml0X3Zh bDsKPiArCXVuc2lnbmVkIGludCBkcF9yYXRlOwo+ICt9Owo+ICsKPiArLyogZHAgZGF0YSByYXRl IHN1cHBvcnRlZCBieSB0aGUgYnJpZGdlIE1icHMgKi8KPiArc3RhdGljIHN0cnVjdCBkcF9kYXRh X3JhdGUgdGlfc25fYnJpZGdlX2RwX3JhdGVfdGFibGVbXSA9IHsKPiArCXsxLCAxNjIwfSwKPiAr CXsyLCAyMTYwfSwKPiArCXszLCAyNDMwfSwKPiArCXs0LCAyNzAwfSwKPiArCXs1LCAzMjQwfSwK PiArCXs2LCA0MzIwfSwKPiArCXs3LCA1NDAwfSwKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lkIHRp X3NuX2JyaWRnZV9zZXRfZHNpX2RwX3JhdGUoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCj4g K3sKPiArCXVuc2lnbmVkIGludCBiaXRfcmF0ZV9taHosIGNsa19mcmVxX21oeiwgZHBfcmF0ZV9t aHo7Cj4gKwl1bnNpZ25lZCBpbnQgdmFsID0gMCwgaSA9IDA7Cj4gKwlzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqbW9kZSA9ICZwZGF0YS0+Y3Vycl9tb2RlOwo+ICsKPiArCS8qIHNldCBEU0lBIGNs ayBmcmVxdWVuY3kgKi8KPiArCWJpdF9yYXRlX21oeiA9IChtb2RlLT5jbG9jayAvIDEwMDApICoK PiArCQkJbWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChwZGF0YS0+ZHNpLT5mb3JtYXQpOwo+ ICsJY2xrX2ZyZXFfbWh6ID0gYml0X3JhdGVfbWh6IC8gKHBkYXRhLT5kc2ktPmxhbmVzICogMik7 Cj4gKwo+ICsJLyogZm9yIGVhY2ggaW5jcmVtZW50IGluIHZhbCwgZnJlcXVlbmN5IGluY3JlYXNl cyBieSA1TUh6ICovCj4gKwl2YWwgPSAoTUlOX0RTSV9DTEtfRlJFUV9NSFogLyA1KSArCj4gKwkJ KCgoY2xrX2ZyZXFfbWh6IC0gTUlOX0RTSV9DTEtfRlJFUV9NSFopIC8gNSkgJiAweEZGKTsKPiAr CXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9EU0lBX0NMS19GUkVRX1JFRywgdmFsKTsK PiArCj4gKwkvKiBzZXQgRFAgZGF0YSByYXRlICovCj4gKwlkcF9yYXRlX21oeiA9ICgoYml0X3Jh dGVfbWh6IC8gcGRhdGEtPmRzaS0+bGFuZXMpICogRFBfQ0xLX0ZVREdFX05VTSkgLwo+ICsJCQkJ CQkJRFBfQ0xLX0ZVREdFX0RFTjsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRpX3Nu X2JyaWRnZV9kcF9yYXRlX3RhYmxlKTsgaSsrKQo+ICsJCWlmICh0aV9zbl9icmlkZ2VfZHBfcmF0 ZV90YWJsZVtpXS5kcF9yYXRlID4gZHBfcmF0ZV9taHopCj4gKwkJCWJyZWFrOwo+ICsJaWYgKGkg PT0gQVJSQVlfU0laRSh0aV9zbl9icmlkZ2VfZHBfcmF0ZV90YWJsZSkpCj4gKwkJaS0tOyAvKiBz ZXQgdG8gbWF4aW11bSBwb3NzaWJsZSAqLwo+ICsKPiArCXZhbCA9IHRpX3NuX2JyaWRnZV9kcF9y YXRlX3RhYmxlW2ldLmJpdF92YWwgPDwgU05fRFBfREFUQV9SQVRFX09GRlNFVDsKPiArCXJlZ21h cF91cGRhdGVfYml0cyhwZGF0YS0+cmVnbWFwLCBTTl9EQVRBUkFURV9DT05GSUdfUkVHLAo+ICsJ CQkJCQlTTl9EUF9EQVRBX1JBVEVfQklUUywgdmFsKTsKCkkgdGhpbmsgdGhpcyBjYW4gYmUgc2lt cGxpZmllZC4KCi8qIEFycmF5IGluZGV4IGNvcnJlc3BvbmRzIHRvIHJlZ2lzdGVyIHZhbHVlICov CnN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdGlfc25fYnJpZGdlX2RwX3JhdGVfbHV0W10gPSB7 IAogICAgICAgIDAsIDE2MjAsIDIxNjAsIDI0MzAsIDI3MDAsIDMyNDAsIDQzMjAsIDU0MDAKfTsK CnN0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9zZXRfZHNpX2RwX3JhdGUoc3RydWN0IHRpX3NuX2Jy aWRnZSAqcGRhdGEpCnsKICAgICAgICAuLi4KICAgICAgICBmb3IgKGkgPSBBUlJBWV9TSVpFKHRp X3NuX2JyaWRnZV9kcF9yYXRlX2x1dCkgLSAxOyBpID49IDA7IGktLSkgewogICAgICAgICAgICAg ICAgaWYgKHRpX3NuX2JyaWRnZV9kcF9yYXRlX2x1dFtpXSA8PSBkcF9yYXRlX21oeikKICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHJlZ21hcF91cGRhdGVf Yml0cyhwZGF0YS0+cmVnbWFwLCBTTl9EQVRBUkFURV9DT05GSUdfUkVHLAogICAgICAgICAgICAg ICAgICAgICAgICAgICBTTl9EUF9EQVRBX1JBVEVfQklUUywgaSA8PCBTTl9EUF9EQVRBX1JBVEVf T0ZGU0VUKTsKfQoKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX3NldF92aWRl b190aW1pbmdzKHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqbW9kZSA9ICZwZGF0YS0+Y3Vycl9tb2RlOwo+ICsKPiArCXJlZ21hcF93 cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfQUNUSVZFX0xJTkVfTEVOR1RIX0xPV19SRUcsCj4g KwkJCW1vZGUtPmhkaXNwbGF5ICYgMHhGRik7Cj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21h cCwgU05fQ0hBX0FDVElWRV9MSU5FX0xFTkdUSF9ISUdIX1JFRywKPiArCQkJKG1vZGUtPmhkaXNw bGF5ID4+IFNOX1RJTUlOR19ISUdIX09GRlNFVCkgJiAweEZGKTsKPiArCXJlZ21hcF93cml0ZShw ZGF0YS0+cmVnbWFwLCBTTl9DSEFfVkVSVElDQUxfRElTUExBWV9TSVpFX0xPV19SRUcsCj4gKwkJ CW1vZGUtPnZkaXNwbGF5ICYgMHhGRik7Cj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwg U05fQ0hBX1ZFUlRJQ0FMX0RJU1BMQVlfU0laRV9ISUdIX1JFRywKPiArCQkJKG1vZGUtPnZkaXNw bGF5ID4+IFNOX1RJTUlOR19ISUdIX09GRlNFVCkgJiAweEZGKTsKPiArCXJlZ21hcF93cml0ZShw ZGF0YS0+cmVnbWFwLCBTTl9DSEFfSFNZTkNfUFVMU0VfV0lEVEhfTE9XX1JFRywKPiArCQkJKG1v ZGUtPmhzeW5jX2VuZCAtIG1vZGUtPmhzeW5jX3N0YXJ0KSAmIDB4RkYpOwo+ICsJcmVnbWFwX3dy aXRlKHBkYXRhLT5yZWdtYXAsIFNOX0NIQV9IU1lOQ19QVUxTRV9XSURUSF9ISUdIX1JFRywKPiAr CQkJKChtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5oc3luY19zdGFydCkgPj4KPiArCQkJIFNOX1RJ TUlOR19ISUdIX09GRlNFVCkgJiAweEZGKTsKPiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFw LCBTTl9DSEFfVlNZTkNfUFVMU0VfV0lEVEhfTE9XX1JFRywKPiArCQkJKG1vZGUtPnZzeW5jX2Vu ZCAtIG1vZGUtPnZzeW5jX3N0YXJ0KSAmIDB4RkYpOwo+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5y ZWdtYXAsIFNOX0NIQV9WU1lOQ19QVUxTRV9XSURUSF9ISUdIX1JFRywKPiArCQkJKChtb2RlLT52 c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFydCkgPj4KPiArCQkJIFNOX1RJTUlOR19ISUdIX09G RlNFVCkgJiAweEZGKTsKPiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfSE9S SVpPTlRBTF9CQUNLX1BPUkNIX1JFRywKPiArCQkJKG1vZGUtPmh0b3RhbCAtIG1vZGUtPmhzeW5j X2VuZCkgJiAweEZGKTsKPiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfVkVS VElDQUxfQkFDS19QT1JDSF9SRUcsCj4gKwkJCShtb2RlLT52dG90YWwgLSBtb2RlLT52c3luY19l bmQpICYgMHhGRik7Cj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX0hPUkla T05UQUxfRlJPTlRfUE9SQ0hfUkVHLAo+ICsJCQkobW9kZS0+aHN5bmNfc3RhcnQgLSBtb2RlLT5o ZGlzcGxheSkgJiAweEZGKTsKPiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFf VkVSVElDQUxfRlJPTlRfUE9SQ0hfUkVHLAo+ICsJCQkobW9kZS0+dnN5bmNfc3RhcnQgLSBtb2Rl LT52ZGlzcGxheSkgJiAweEZGKTsKPiArCXVzbGVlcF9yYW5nZSgxMDAwMCwgMTAwNTApOyAvKiAx MG1zIGRlbGF5IHJlY29tbWVuZGVkIGJ5IHNwZWMgKi8KCllvdSB3b3VsZCBwcm9iYWJseSBiZSBm aW5lIHRvIHNldCB0aGUgdXBwZXIgYm91bmQgdG8gMTA1MDAgc28gd2UgZG9uJ3QgdHJpZ2dlcgph biB1bm5lY2Vzc2FyeSBpbnRlcnJ1cHQuCgo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB0aV9zbl9i cmlkZ2VfZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCj4gK3sKPiArCXN0cnVjdCB0 aV9zbl9icmlkZ2UgKnBkYXRhID0gYnJpZGdlX3RvX3RpX3NuX2JyaWRnZShicmlkZ2UpOwo+ICsJ c3RydWN0IGRybV9wYW5lbCAqcGFuZWwgPSBwZGF0YS0+cGFuZWw7Cj4gKwl1bnNpZ25lZCBpbnQg dmFsID0gMDsKPiArCj4gKwlpZiAocGFuZWwpIHsKPiArCQlkcm1fcGFuZWxfcHJlcGFyZShwYW5l bCk7Cj4gKwkJLyogaW4gY2FzZSBkcm1fcGFuZWwgaXMgY29ubmVjdGVkIHRoZW4gSFBEIGlzIG5v dCBzdXBwb3J0ZWQgKi8KPiArCQlyZWdtYXBfdXBkYXRlX2JpdHMocGRhdGEtPnJlZ21hcCwgU05f SFBEX0RJU0FCTEVfUkVHLAo+ICsJCQkJICAgU05fSFBEX0RJU0FCTEVfQklULCBTTl9IUERfRElT QUJMRV9CSVQpOwo+ICsJfQo+ICsKPiArCS8qIERTSV9BIGxhbmUgY29uZmlnICovCj4gKwl2YWwg PSAoNCAtIHBkYXRhLT5kc2ktPmxhbmVzKSA8PCBTTl9EU0lBX0xBTkVfT0ZGU0VUOwo+ICsJcmVn bWFwX3VwZGF0ZV9iaXRzKHBkYXRhLT5yZWdtYXAsIFNOX0RTSV9MQU5FU19SRUcsCj4gKwkJCQkJ U05fRFNJQV9OVU1fTEFORVNfQklUUywgdmFsKTsKPiArCj4gKwkvKiBEUCBsYW5lIGNvbmZpZyAq Lwo+ICsJdmFsID0gKHBkYXRhLT5kc2ktPmxhbmVzIC0gMSkgPDwgU05fRFBfTEFORV9PRkZTRVQ7 Cj4gKwlyZWdtYXBfdXBkYXRlX2JpdHMocGRhdGEtPnJlZ21hcCwgU05fU1NDX0NPTkZJR19SRUcs Cj4gKwkJCQkJU05fRFBfTlVNX0xBTkVTX0JJVFMsIHZhbCk7Cj4gKwo+ICsJLyogc2V0IGRzaS9k cCBjbGsgZnJlcXVlbmN5IHZhbHVlICovCj4gKwl0aV9zbl9icmlkZ2Vfc2V0X2RzaV9kcF9yYXRl KHBkYXRhKTsKPiArCj4gKwkvKiBlbmFibGUgRFAgUExMICovCj4gKwlyZWdtYXBfd3JpdGUocGRh dGEtPnJlZ21hcCwgU05fUExMX0VOQUJMRV9SRUcsIDEpOwo+ICsJdXNsZWVwX3JhbmdlKDEwMDAw LCAxMDA1MCk7IC8qIDEwbXMgZGVsYXkgcmVjb21tZW5kZWQgYnkgc3BlYyAqLwo+ICsKPiArCS8q Kgo+ICsJICogVGhlIFNONjVEU0k4NiBvbmx5IHN1cHBvcnRzIEFTU1IgRGlzcGxheSBBdXRoZW50 aWNhdGlvbiBtZXRob2QgYW5kCj4gKwkgKiB0aGlzIG1ldGhvZCBpcyBlbmFibGVkIGJ5IGRlZmF1 bHQuIEFuIGVEUCBwYW5lbCBtdXN0IHN1cHBvcnQgdGhpcwo+ICsJICogYXV0aGVudGljYXRpb24g bWV0aG9kLiBXZSBuZWVkIHRvIGVuYWJsZSB0aGlzIG1ldGhvZCBpbiB0aGUgZURQIHBhbmVsCj4g KwkgKiBhdCBEaXNwbGF5UG9ydCBhZGRyZXNzIDB4MDAxMEEgcHJpb3IgdG8gbGluayB0cmFpbmlu Zy4KPiArCSAqLwo+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0FVWF9XREFUQTBf UkVHLCAweDAxKTsKPiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9BVVhfQUREUl8x OV8xNl9SRUcsIDB4MDApOwo+ICsJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0FVWF9B RERSXzE1XzhfUkVHLCAweDAxKTsKPiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9B VVhfQUREUl83XzBfUkVHLCAweDBBKTsKPiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBT Tl9BVVhfTEVOR1RIX1JFRywgMHgwMSk7Cj4gKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwg U05fQVVYX0NNRF9SRUcsIDB4ODEpOwo+ICsJdXNsZWVwX3JhbmdlKDEwMDAwLCAxMDA1MCk7IC8q IDEwbXMgZGVsYXkgcmVjb21tZW5kZWQgYnkgc3BlYyAqLwo+ICsKPiArCS8qIFNlbWkgYXV0byBs aW5rIHRyYWluaW5nIG1vZGUgKi8KPiArCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9N TF9UWF9NT0RFX1JFRywgMHgwQSk7Cj4gKwltc2xlZXAoMjApOyAvKiAyMG1zIGRlbGF5IHJlY29t bWVuZGVkIGJ5IHNwZWMgKi8KPiArCj4gKwkvKiBjb25maWcgdmlkZW8gcGFyYW1ldGVycyAqLwo+ ICsJdGlfc25fYnJpZGdlX3NldF92aWRlb190aW1pbmdzKHBkYXRhKTsKPiArCj4gKwkvKiBlbmFi bGUgdmlkZW8gc3RyZWFtICovCj4gKwlyZWdtYXBfdXBkYXRlX2JpdHMocGRhdGEtPnJlZ21hcCwg U05fRU5IX0ZSQU1FX1JFRywKPiArCQkJICAgU05fRU5BQkxFX1ZJRF9TVFJFQU1fQklULCBTTl9F TkFCTEVfVklEX1NUUkVBTV9CSVQpOwo+ICsKPiArCWlmIChwYW5lbCkKPiArCQlkcm1fcGFuZWxf ZW5hYmxlKHBhbmVsKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX3ByZV9l bmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPiArewo+ICsJc3RydWN0IHRpX3NuX2Jy aWRnZSAqcGRhdGEgPSBicmlkZ2VfdG9fdGlfc25fYnJpZGdlKGJyaWRnZSk7Cj4gKwo+ICsJdGlf c25fYnJpZGdlX3Bvd2VyX2N0cmwocGRhdGEsIHRydWUpOwo+ICsKPiArCS8qIGNvbmZpZ3VyZSBi cmlkZ2UgQ0xLX1NSQyBhbmQgcmVmX2NsayAqLwo+ICsJdGlfc25fYnJpZGdlX3NldF9yZWZjbGso cGRhdGEpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB0aV9zbl9icmlkZ2VfcG9zdF9kaXNhYmxl KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCj4gK3sKPiArCXN0cnVjdCB0aV9zbl9icmlkZ2Ug KnBkYXRhID0gYnJpZGdlX3RvX3RpX3NuX2JyaWRnZShicmlkZ2UpOwo+ICsKPiArCXRpX3NuX2Jy aWRnZV9wb3dlcl9jdHJsKHBkYXRhLCBmYWxzZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX2JyaWRnZV9mdW5jcyB0aV9zbl9icmlkZ2VfZnVuY3MgPSB7Cj4gKwkuYXR0YWNo ID0gdGlfc25fYnJpZGdlX2F0dGFjaCwKPiArCS5wcmVfZW5hYmxlID0gdGlfc25fYnJpZGdlX3By ZV9lbmFibGUsCj4gKwkuZW5hYmxlID0gdGlfc25fYnJpZGdlX2VuYWJsZSwKPiArCS5kaXNhYmxl ID0gdGlfc25fYnJpZGdlX2Rpc2FibGUsCj4gKwkucG9zdF9kaXNhYmxlID0gdGlfc25fYnJpZGdl X3Bvc3RfZGlzYWJsZSwKPiArCS5tb2RlX3NldCA9IHRpX3NuX2JyaWRnZV9tb2RlX3NldCwKPiAr fTsKPiArCj4gK3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX3BhcnNlX2RzaV9ob3N0KHN0cnVjdCB0 aV9zbl9icmlkZ2UgKnBkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGRh dGEtPmRldi0+b2Zfbm9kZTsKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZW5kX25vZGU7Cj4gKwo+ ICsJZW5kX25vZGUgPSBvZl9ncmFwaF9nZXRfZW5kcG9pbnRfYnlfcmVncyhucCwgMCwgMCk7Cj4g KwlpZiAoIWVuZF9ub2RlKSB7Cj4gKwkJRFJNX0VSUk9SKCJyZW1vdGUgZW5kcG9pbnQgbm90IGZv dW5kXG4iKTsKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArCj4gKwlwZGF0YS0+aG9zdF9u b2RlID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9wb3J0X3BhcmVudChlbmRfbm9kZSk7Cj4gKwlvZl9u b2RlX3B1dChlbmRfbm9kZSk7Cj4gKwlpZiAoIXBkYXRhLT5ob3N0X25vZGUpIHsKPiArCQlEUk1f RVJST1IoInJlbW90ZSBub2RlIG5vdCBmb3VuZFxuIik7Cj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4g Kwl9Cj4gKwlvZl9ub2RlX3B1dChwZGF0YS0+aG9zdF9ub2RlKTsKPiArCj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiArc3RhdGljIGludCB0aV9zbl9icmlkZ2VfcHJvYmUoc3RydWN0IGkyY19jbGll bnQgKmNsaWVudCwKPiArCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCj4gK3sKPiAr CXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhOwo+ICsJc3RydWN0IGRldmljZV9ub2RlICpkZGNf bm9kZTsKPiArCWludCByZXQgPSAwOwo+ICsKPiArCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxp dHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpKSB7Cj4gKwkJRFJNX0VSUk9SKCJkZXZp Y2UgZG9lc24ndCBzdXBwb3J0IEkyQ1xuIik7Cj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwl9Cj4g Kwo+ICsJcGRhdGEgPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LAo+ICsJCXNpemVvZihzdHJ1 Y3QgdGlfc25fYnJpZGdlKSwgR0ZQX0tFUk5FTCk7CgogICAgICAgIHBkYXRhID0gZGV2bV9remFs bG9jKCZjbGllbnQtPmRldiwgc2l6ZW9mKHN0cnVjdCB0aV9zbl9icmlkZ2UpLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEdGUF9LRVJORUwpOwoKPiArCWlmICghcGRhdGEpCj4gKwkJcmV0 dXJuIC1FTk9NRU07Cj4gKwo+ICsJcGRhdGEtPmRldiA9ICZjbGllbnQtPmRldjsKPiArCURSTV9E RUJVRygiSTJDIGFkZHJlc3MgaXMgJXhcbiIsIGNsaWVudC0+YWRkcik7Cgp1bm5lY2Vzc2FyeQoK PiArCj4gKwlwZGF0YS0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xpZW50LAo+ICsJ CQkJJnRpX3NuX2JyaWRnZV9yZWdtYXBfY29uZmlnKTsKCmluZGVudGF0aW9uIGlzIHdyb25nIGhl cmUsIHNob3VsZCBiZToKCiAgICAgICAgcGRhdGEtPnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRf aTJjKGNsaWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JnRpX3NuX2JyaWRnZV9yZWdtYXBfY29uZmlnKTsKCj4gKwlpZiAoSVNfRVJSKHBkYXRhLT5yZWdt YXApKQoKUHJpbnQgYW4gZXJyb3I/Cgo+ICsJCXJldHVybiBQVFJfRVJSKHBkYXRhLT5yZWdtYXAp Owo+ICsKPiArCXBkYXRhLT5lbmFibGVfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0KHBkYXRhLT5kZXYs Cj4gKwkJCQkJICAgICJlbmFibGUiLCBHUElPRF9PVVRfTE9XKTsKPiArCWlmIChJU19FUlIocGRh dGEtPmVuYWJsZV9ncGlvKSkgewo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBlbmFibGUg Z3BpbyBmcm9tIERUXG4iKTsKPiArCQlyZXQgPSBQVFJfRVJSKHBkYXRhLT5lbmFibGVfZ3Bpbyk7 Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXQgPSB0aV9zbl9icmlkZ2VfcGFyc2Vf cmVndWxhdG9ycyhwZGF0YSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQg dG8gcGFyc2UgcmVndWxhdG9yc1xuIik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwly ZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihwZGF0YS0+ZGV2LT5vZl9ub2RlLAo+ICsJCQkicmVm Y2xrLWZyZXEta2h6IiwgJnBkYXRhLT5yZWZjbGtfa2h6KTsKPiArCWlmIChyZXQpCj4gKwkJcGRh dGEtPnJlZmNsa19raHogPSBTTl9ERUZBVUxUX1JFRl9DTEtfS0haOwo+ICsKPiArCXJldCA9IHRp X3NuX2JyaWRnZV9wYXJzZV9kc2lfaG9zdChwZGF0YSk7Cj4gKwlpZiAocmV0KQoKRFJNX0VSUk9S PwoKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCWRkY19ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShw ZGF0YS0+ZGV2LT5vZl9ub2RlLCAiZGRjLWkyYy1idXMiLCAwKTsKPiArCWlmIChkZGNfbm9kZSkg ewo+ICsJCXBkYXRhLT5kZGMgPSBvZl9maW5kX2kyY19hZGFwdGVyX2J5X25vZGUoZGRjX25vZGUp Owo+ICsJCW9mX25vZGVfcHV0KGRkY19ub2RlKTsKPiArCQlpZiAoIXBkYXRhLT5kZGMpIHsKPiAr CQkJZGV2X2RiZyhwZGF0YS0+ZGV2LCAiZmFpbGVkIHRvIHJlYWQgZGRjIG5vZGVcbiIpOwo+ICsJ CQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKPiArCQl9Cj4gKwl9IGVsc2Ugewo+ICsJCWRldl9kYmco cGRhdGEtPmRldiwgIm5vIGRkYyBwcm9wZXJ0eSBmb3VuZFxuIik7CgpZb3UndmUgY29waWVkIGRl dl9kYmcoKSBsb2dzLCB0aGV5IHNob3VsZCBiZSBEUk1fREVCVUdfS01TKCkuCgo+ICsJfQo+ICsK PiArCXRpX3NuX2JyaWRnZV9wb3dlcl9jdHJsKHBkYXRhLCB0cnVlKTsKPiArCXJldCA9IHRpX3Nu X2JyaWRnZV9yZWFkX2RldmljZV9yZXYocGRhdGEpOwo+ICsJdGlfc25fYnJpZGdlX3Bvd2VyX2N0 cmwocGRhdGEsIGZhbHNlKTsKClRoaXMgY291bGQgYmUgZG9uZSBiZWZvcmUgaGFuZGxpbmcgcmVm Y2xrIG9yIGRkYy4KCj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJaTJjX3Nl dF9jbGllbnRkYXRhKGNsaWVudCwgcGRhdGEpOwo+ICsJbXV0ZXhfaW5pdCgmcGRhdGEtPmxvY2sp Owo+ICsKPiArCXBkYXRhLT5icmlkZ2UuZnVuY3MgPSAmdGlfc25fYnJpZGdlX2Z1bmNzOwo+ICsJ cGRhdGEtPmJyaWRnZS5vZl9ub2RlID0gY2xpZW50LT5kZXYub2Zfbm9kZTsKPiArCj4gKwlkcm1f YnJpZGdlX2FkZCgmcGRhdGEtPmJyaWRnZSk7Cj4gKwo+ICsJRFJNX0RFQlVHKCJicmlkZ2UgZGV2 aWNlIHJlZ2lzdGVyZWQgc3VjY2Vzc2Z1bGx5XG4iKTsKCnVubmVjZXNzYXJ5Cgo+ICsKPiArCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9yZW1vdmUoc3RydWN0 IGkyY19jbGllbnQgKmNsaWVudCkKPiArewo+ICsJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEg PSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKPiArCj4gKwlpZiAoIXBkYXRhKQo+ICsJCXJl dHVybiAtRUlOVkFMOwo+ICsKPiArCW1pcGlfZHNpX2RldGFjaChwZGF0YS0+ZHNpKTsKPiArCW1p cGlfZHNpX2RldmljZV91bnJlZ2lzdGVyKHBkYXRhLT5kc2kpOwo+ICsKPiArCWRybV9icmlkZ2Vf cmVtb3ZlKCZwZGF0YS0+YnJpZGdlKTsKPiArCWkyY19wdXRfYWRhcHRlcihwZGF0YS0+ZGRjKTsK PiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBpMmNfZGV2aWNlX2lk IHRpX3NuX2JyaWRnZV9pZFtdID0gewo+ICsJeyAidGksc242NWRzaTg2IiwgMH0sCj4gKwl7fSwK PiArfTsKPiArTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHRpX3NuX2JyaWRnZV9pZCk7Cj4gKwo+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB0aV9zbl9icmlkZ2VfbWF0Y2hfdGFi bGVbXSA9IHsKPiArCXsuY29tcGF0aWJsZSA9ICJ0aSxzbjY1ZHNpODYifSwKPiArCXt9LAo+ICt9 Owo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB0aV9zbl9icmlkZ2VfbWF0Y2hfdGFibGUpOwo+ ICsKPiArc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHRpX3NuX2JyaWRnZV9kcml2ZXIgPSB7Cj4g KwkuZHJpdmVyID0gewo+ICsJCS5uYW1lID0gInRpX3NuNjVkc2k4NiIsCj4gKwkJLm9mX21hdGNo X3RhYmxlID0gdGlfc25fYnJpZGdlX21hdGNoX3RhYmxlLAo+ICsJfSwKPiArCS5wcm9iZSA9IHRp X3NuX2JyaWRnZV9wcm9iZSwKPiArCS5yZW1vdmUgPSB0aV9zbl9icmlkZ2VfcmVtb3ZlLAo+ICsJ LmlkX3RhYmxlID0gdGlfc25fYnJpZGdlX2lkLAo+ICt9Owo+ICsKPiArbW9kdWxlX2kyY19kcml2 ZXIodGlfc25fYnJpZGdlX2RyaXZlcik7Cj4gK01PRFVMRV9ERVNDUklQVElPTigic242NWRzaTg2 IERTSSB0byBlRFAgYnJpZGdlIGRyaXZlciIpOwo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7 Cj4gLS0gCj4gVGhlIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIGlzIGEgbWVtYmVy IG9mIHRoZSBDb2RlIEF1cm9yYSBGb3J1bSwKPiBhIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3Jh dGl2ZSBQcm9qZWN0Cj4gCgotLSAKU2VhbiBQYXVsLCBTb2Z0d2FyZSBFbmdpbmVlciwgR29vZ2xl IC8gQ2hyb21pdW0gT1MKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRl dmVsCg==