From mboxrd@z Thu Jan 1 00:00:00 1970 From: spanda-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org Subject: Re: [[RFC]DPU PATCH 1/4] drm/bridge: add support for sn65dsi86 bridge driver Date: Thu, 19 Apr 2018 00:01:27 +0530 Message-ID: References: <1524054002-17869-1-git-send-email-spanda@codeaurora.org> <1524054002-17869-2-git-send-email-spanda@codeaurora.org> <20180418141144.GW73214@art_vandelay> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180418141144.GW73214@art_vandelay> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Sean Paul Cc: devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, ryadav-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, chandanu-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org List-Id: devicetree@vger.kernel.org T24gMjAxOC0wNC0xOCAxOTo0MSwgU2VhbiBQYXVsIHdyb3RlOgo+IE9uIFdlZCwgQXByIDE4LCAy MDE4IGF0IDA1OjQ5OjU5UE0gKzA1MzAsIFNhbmRlZXAgUGFuZGEgd3JvdGU6Cj4+IEFkZCBzdXBw b3J0IGZvciBUSSdzIHNuNjVkc2k4NiBkc2kyZWRwIGJyaWRnZSBjaGlwLgo+PiBUaGUgY2hpcCBj b252ZXJ0cyBEU0kgdHJhbnNtaXR0ZWQgc2lnbmFsIHRvIGVEUCBzaWduYWwsCj4+IHdoaWNoIGlz IGZlZCB0byB0aGUgY29ubmVjdGVkIGVEUCBwYW5lbC4KPj4gCj4+IFRoaXMgY2hpcCBjYW4gYmUg Y29udHJvbGxlZCB2aWEgZWl0aGVyIGkyYyBpbnRlcmZhY2Ugb3IKPj4gZHNpIGludGVyZmFjZS4g Q3VycmVudGx5IGluIGRyaXZlciBhbGwgdGhlIGNvbnRyb2wgcmVnaXN0ZXJzCj4+IGFyZSBiZWlu ZyBhY2Nlc3NlZCB0aHJvdWdoIGkyYyBpbnRlcmZhY2Ugb25seS4KPj4gQWxzbyBhcyBvZiBub3cg SFBEIHN1cHBvcnQgaGFzIG5vdCBiZWVuIGFkZGVkIHRvIGJyaWRnZQo+PiBjaGlwIGRyaXZlci4K Pj4gCj4+IFNpZ25lZC1vZmYtYnk6IFNhbmRlZXAgUGFuZGEgPHNwYW5kYUBjb2RlYXVyb3JhLm9y Zz4KPj4gLS0tCj4+ICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jIHwgNzQy IAo+PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+ICAxIGZpbGUgY2hhbmdl ZCwgNzQyIGluc2VydGlvbnMoKykKPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jCj4+IAo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2JyaWRnZS90aS1zbjY1ZHNpODYuYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3Rp LXNuNjVkc2k4Ni5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLmM3 OThmMmYKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3Rp LXNuNjVkc2k4Ni5jCj4+IEBAIC0wLDAgKzEsNzQyIEBACj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMCAqLwo+PiArCj4+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KPj4g KyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K Pj4gKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+ Cj4+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4+ICsjaW5jbHVkZSA8bGlu dXgvZGVsYXkuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KPj4gKyNpbmNsdWRlIDxsaW51 eC9ncGlvLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgo+PiArI2luY2x1ZGUgPGxp bnV4L29mX2dyYXBoLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+ Cj4+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5o Pgo+PiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+PiArI2luY2x1ZGUgPGRy bS9kcm1fY3J0Y19oZWxwZXIuaD4KPj4gKyNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+Cj4+ ICsjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgo+IAo+IEkgaGF2ZSBhIGhhcmQgdGltZSBiZWxp ZXZpbmcgdGhhdCB5b3UgbmVlZCBhbGwgb2YgdGhlc2UgaW5jbHVkZXMuIE9mZiAKPiB0aGUgdG9w IG9mCj4gbXkgaGVhZCwgeW91IGNvdWxkIHByb2JhYmx5IHJlbW92ZSB0eXBlcywga2VybmVsLCBp bml0LCAKPiBwbGF0Zm9ybV9kZXZpY2UsIGRlbGF5LAo+IGRybVAsIGRybV9hdG9taWMsIGRybV9j cnRjX2hlbHBlci4gWW91IGNvdWxkIHByb2JhYmx5IHRyaW0gaXQgZXZlbiAKPiBmdXJ0aGVyIHdp dGgKPiB0aGUgaGVscCBvZiB5b3VyIGNvbXBpbGVyLiBUaGVzZSBzaG91bGQgYWxzbyBiZSBpbiBh bHBoYWJldGljYWwgb3JkZXIuCj4gCkkgd2lsbCB0YWtlIGNhcmUgb2YgYWxwaGFiZXRpY2FsIG9y ZGVyIGFuZCBnZW5lcmljIGtlcm5lbCBoZWFkZXIgZmlsZSAKaW5jbHVzaW9uLiBCdXQgdGhlIGhl YWRlciBmaWxlcyBvZgpkcm1QLCBkcm1fYXRvbWljLCBkcm1fY3J0Y19oZWxwZXIgYXJlIHJlcXVp cmVkIGhlcmUuCgpkcm1QLCBkcm1fYXRvbWljLCBkcm1fY3J0Y19oZWxwZXIgYWxsIHRoZXNlIGFy ZSBuZWVkZWQgYmVjYXVzZSBvZiB0aGUgCmRybSBhcGkgdGhhdCB3ZSB1c2luZyBpbiB0aGlzIGRy aXZlcgpmb3IgbW9kZXMsIGNvbm5lY3RvcnMgYW5kIGJyaWRnZXMuIHRoZSBkcm0gaGVhZGVyIGZp bGVzIGkgaGF2ZSBhbHJlYWR5IApjaGVja2VkIHdpdGggY29tcGlsZXIuCgoKPj4gKwo+PiArI2Rl ZmluZSBTTl9CUklER0VfUkVWSVNJT05fSUQgMHgyCj4+ICsKPj4gKy8qIExpbmsgVHJhaW5pbmcg c3BlY2lmaWMgcmVnaXN0ZXJzICovCj4+ICsjZGVmaW5lIFNOX0RFVklDRV9SRVZfUkVHCQkJMHgw OAo+PiArI2RlZmluZSBTTl9SRUZDTEtfRlJFUV9SRUcJCQkweDBBCj4+ICsjZGVmaW5lIFNOX0RT SV9MQU5FU19SRUcJCQkweDEwCj4+ICsjZGVmaW5lIFNOX0RTSUFfQ0xLX0ZSRVFfUkVHCQkJMHgx Mgo+PiArI2RlZmluZSBTTl9FTkhfRlJBTUVfUkVHCQkJMHg1QQo+PiArI2RlZmluZSBTTl9TU0Nf Q09ORklHX1JFRwkJCTB4OTMKPj4gKyNkZWZpbmUgU05fREFUQVJBVEVfQ09ORklHX1JFRwkJCTB4 OTQKPj4gKyNkZWZpbmUgU05fUExMX0VOQUJMRV9SRUcJCQkweDBECj4+ICsjZGVmaW5lIFNOX1ND UkFNQkxFX0NPTkZJR19SRUcJCQkweDk1Cj4+ICsjZGVmaW5lIFNOX0FVWF9XREFUQTBfUkVHCQkJ MHg2NAo+PiArI2RlZmluZSBTTl9BVVhfQUREUl8xOV8xNl9SRUcJCQkweDc0Cj4+ICsjZGVmaW5l IFNOX0FVWF9BRERSXzE1XzhfUkVHCQkJMHg3NQo+PiArI2RlZmluZSBTTl9BVVhfQUREUl83XzBf UkVHCQkJMHg3Ngo+PiArI2RlZmluZSBTTl9BVVhfTEVOR1RIX1JFRwkJCTB4NzcKPj4gKyNkZWZp bmUgU05fQVVYX0NNRF9SRUcJCQkJMHg3OAo+PiArI2RlZmluZSBTTl9NTF9UWF9NT0RFX1JFRwkJ CTB4OTYKPj4gKyNkZWZpbmUgU05fUEFHRV9TRUxFQ1RfUkVHCQkJMHhGRgo+PiArI2RlZmluZSBT Tl9BVVhfUkRBVEEwX1JFRwkJCTB4NzkKPj4gKy8qIHZpZGVvIGNvbmZpZyBzcGVjaWZpYyByZWdp c3RlcnMgKi8KPj4gKyNkZWZpbmUgU05fQ0hBX0FDVElWRV9MSU5FX0xFTkdUSF9MT1dfUkVHCTB4 MjAKPj4gKyNkZWZpbmUgU05fQ0hBX0FDVElWRV9MSU5FX0xFTkdUSF9ISUdIX1JFRwkweDIxCj4+ ICsjZGVmaW5lIFNOX0NIQV9WRVJUSUNBTF9ESVNQTEFZX1NJWkVfTE9XX1JFRwkweDI0Cj4+ICsj ZGVmaW5lIFNOX0NIQV9WRVJUSUNBTF9ESVNQTEFZX1NJWkVfSElHSF9SRUcJMHgyNQo+PiArI2Rl ZmluZSBTTl9DSEFfSFNZTkNfUFVMU0VfV0lEVEhfTE9XX1JFRwkweDJDCj4+ICsjZGVmaW5lIFNO X0NIQV9IU1lOQ19QVUxTRV9XSURUSF9ISUdIX1JFRwkweDJECj4+ICsjZGVmaW5lIFNOX0NIQV9W U1lOQ19QVUxTRV9XSURUSF9MT1dfUkVHCTB4MzAKPj4gKyNkZWZpbmUgU05fQ0hBX1ZTWU5DX1BV TFNFX1dJRFRIX0hJR0hfUkVHCTB4MzEKPj4gKyNkZWZpbmUgU05fQ0hBX0hPUklaT05UQUxfQkFD S19QT1JDSF9SRUcJMHgzNAo+PiArI2RlZmluZSBTTl9DSEFfVkVSVElDQUxfQkFDS19QT1JDSF9S RUcJCTB4MzYKPj4gKyNkZWZpbmUgU05fQ0hBX0hPUklaT05UQUxfRlJPTlRfUE9SQ0hfUkVHCTB4 MzgKPj4gKyNkZWZpbmUgU05fQ0hBX1ZFUlRJQ0FMX0ZST05UX1BPUkNIX1JFRwkJMHgzQQo+PiAr I2RlZmluZSBTTl9EQVRBX0ZPUk1BVF9SRUcJCQkweDVCCj4+ICsjZGVmaW5lIFNOX0NPTE9SX0JB Ul9DT05GSUdfUkVHCQkJMHgzQwo+PiArCj4+ICsjZGVmaW5lIERQUExMX0NMS19TUkNfUkVGQ0xL CTAKPj4gKyNkZWZpbmUgRFBQTExfQ0xLX1NSQ19EU0lDTEsJMQo+PiArI2RlZmluZSBNSU5fRFNJ X0NMS19GUkVRX01IWgk0MAo+PiArCj4+ICtlbnVtIHRpX3NuX2JyaWRnZV9yZWZfY2xrcyB7Cj4+ ICsJU05fUkVGX0NMS18xMl9NSFogPSAwLAo+PiArCVNOX1JFRl9DTEtfMTlfMl9NSFosCj4+ICsJ U05fUkVGX0NMS18yNl9NSFosCj4+ICsJU05fUkVGX0NMS18yN19NSFosCj4+ICsJU05fUkVGX0NM S18zOF80X01IWiwKPj4gKwlTTl9SRUZfQ0xLX01BWCwKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCB0 aV9zbl9icmlkZ2Ugewo+PiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPj4gKwlzdHJ1Y3QgZHJtX2Jy aWRnZSBicmlkZ2U7Cj4+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgY29ubmVjdG9yOwo+PiArCXN0 cnVjdCBkZXZpY2Vfbm9kZSAqaG9zdF9ub2RlOwo+PiArCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2Ug KmRzaTsKPj4gKwkvKiBoYW5kbGUgdG8gdGhlIGNvbm5lY3RlZCBlRFAgcGFuZWwgKi8KPj4gKwlz dHJ1Y3QgZHJtX3BhbmVsICpwYW5lbDsKPj4gKwlpbnQgaXJxOwo+PiArCXN0cnVjdCBncGlvX2Rl c2MgKmlycV9ncGlvOwo+PiArCS8qIGxpc3Qgb2YgZ3Bpb3MgbmVlZGVkIHRvIGVuYWJsZSB0aGUg YnJpZGdlIGZ1bmN0aW9uYWxpdHkgKi8KPj4gKwlzdHJ1Y3QgZ3Bpb19kZXNjcyAqZW5hYmxlX2dw aW9zOwo+IAo+IFdoeSBhcmUgdGhlIGVuYWJsZSBncGlvcyBhIGxpc3Q/Cj4gCj4+ICsJdW5zaWdu ZWQgaW50IG51bV9zdXBwbGllczsKPj4gKwlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSAqc3Vw cGxpZXM7Cj4+ICsJc3RydWN0IGkyY19jbGllbnQgKmkyY19jbGllbnQ7Cj4+ICsJc3RydWN0IGky Y19hZGFwdGVyICpkZGM7Cj4+ICsJYm9vbCBwb3dlcl9vbjsKPj4gKwl1MzIgbnVtX21vZGVzOwo+ PiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIGN1cnJfbW9kZTsKPj4gK307Cj4+ICsKPj4gK3N0 YXRpYyBpbnQgdGlfc25fYnJpZGdlX3dyaXRlKHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhLCB1 OCByZWcsIHU4IAo+PiB2YWwpCj4+ICt7Cj4+ICsJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9 IHBkYXRhLT5pMmNfY2xpZW50Owo+PiArCXU4IGJ1ZlsyXSA9IHtyZWcsIHZhbH07Cj4+ICsJc3Ry dWN0IGkyY19tc2cgbXNnID0gewo+PiArCQkuYWRkciA9IGNsaWVudC0+YWRkciwKPj4gKwkJLmZs YWdzID0gMCwKPj4gKwkJLmxlbiA9IDIsCj4+ICsJCS5idWYgPSBidWYsCj4+ICsJfTsKPj4gKwo+ PiArCWlmIChpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCAmbXNnLCAxKSA8IDEpIHsKPj4g KwkJRFJNX0VSUk9SKCJpMmMgd3JpdGUgZmFpbGVkXG4iKTsKPj4gKwkJcmV0dXJuIC1FSU87Cj4+ ICsJfQo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdGlfc25f YnJpZGdlX3JlYWQoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEsCj4+ICsJCQkJCXU4IHJlZywg Y2hhciAqYnVmLCB1MzIgc2l6ZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50 ID0gcGRhdGEtPmkyY19jbGllbnQ7Cj4+ICsJc3RydWN0IGkyY19tc2cgbXNnWzJdID0gewo+PiAr CQl7Cj4+ICsJCQkuYWRkciA9IGNsaWVudC0+YWRkciwKPj4gKwkJCS5mbGFncyA9IDAsCj4+ICsJ CQkubGVuID0gMSwKPj4gKwkJCS5idWYgPSAmcmVnLAo+PiArCQl9LAo+PiArCQl7Cj4+ICsJCQku YWRkciA9IGNsaWVudC0+YWRkciwKPj4gKwkJCS5mbGFncyA9IEkyQ19NX1JELAo+PiArCQkJLmxl biA9IHNpemUsCj4+ICsJCQkuYnVmID0gYnVmLAo+PiArCQl9Cj4+ICsJfTsKPj4gKwo+PiArCWlm IChpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2csIDIpICE9IDIpIHsKPj4gKwkJRFJN X0VSUk9SKCJpMmMgcmVhZCBmYWlsZWRcbiIpOwo+PiArCQlyZXR1cm4gLUVJTzsKPj4gKwl9Cj4+ ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgdGlfc25fYnJpZGdl X2dwaW9fY29uZmlndXJlKHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhLCAKPj4gYm9vbCBvbikK Pj4gK3sKPj4gKwlpbnQgdmFsdWUsIGkgPSAwLCBudW0gPSAwOwo+PiArCWludCAqdmFsdWVfYXJy YXkgPSBOVUxMOwo+PiArCj4+ICsJaWYgKCFwZGF0YSkKPj4gKwkJcmV0dXJuOwo+PiArCj4+ICsJ dmFsdWUgPSBvbiA/IDEgOiAwOwo+PiArCW51bSA9IHBkYXRhLT5lbmFibGVfZ3Bpb3MtPm5kZXNj czsKPj4gKwl2YWx1ZV9hcnJheSA9IGttYWxsb2MobnVtICogc2l6ZW9mKGludCksIEdGUF9LRVJO RUwpOwo+PiArCWlmICh2YWx1ZV9hcnJheSkgewo+PiArCQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBp KyspCj4+ICsJCQl2YWx1ZV9hcnJheVtpXSA9IHZhbHVlOwo+PiArCQlncGlvZF9zZXRfYXJyYXlf dmFsdWUobnVtLCBwZGF0YS0+ZW5hYmxlX2dwaW9zLT5kZXNjLAo+PiArCQkJCSAgICAgIHZhbHVl X2FycmF5KTsKPj4gKwkJa2ZyZWUodmFsdWVfYXJyYXkpOwo+PiArCX0KPj4gKwo+PiArCWlmIChw ZGF0YS0+aXJxX2dwaW8pCj4+ICsJCWdwaW9kX3NldF92YWx1ZShwZGF0YS0+aXJxX2dwaW8sIHZh bHVlKTsKPj4gKwo+PiArCURSTV9ERUJVRygiY29uZmlnIHRvOiAlZFxuIiwgdmFsdWUpOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgdm9pZCB0aV9zbl9icmlkZ2VfcG93ZXJfY3RybChzdHJ1Y3QgdGlf c25fYnJpZGdlICpwZGF0YSwgYm9vbCAKPj4gZW5hYmxlKQo+PiArewo+PiArCXN0YXRpYyBpbnQg cmVmX2NvdW50Owo+PiArCj4+ICsJaWYgKCFwZGF0YSkKPj4gKwkJcmV0dXJuOwo+PiArCj4+ICsJ aWYgKGVuYWJsZSkKPj4gKwkJcmVmX2NvdW50Kys7Cj4+ICsJZWxzZQo+PiArCQlyZWZfY291bnQt LTsKPj4gKwo+PiArCWlmIChlbmFibGUgJiYgKHJlZl9jb3VudCA9PSAxKSkgewo+PiArCQl0aV9z bl9icmlkZ2VfZ3Bpb19jb25maWd1cmUocGRhdGEsIHRydWUpOwo+PiArCj4+ICsJCWlmIChyZWd1 bGF0b3JfYnVsa19lbmFibGUocGRhdGEtPm51bV9zdXBwbGllcywKPj4gKwkJCQkJCXBkYXRhLT5z dXBwbGllcykpIHsKPj4gKwkJCURSTV9FUlJPUigiYnJpZGdlIHJlZ3VsYXRvciBlbmFibGUgZmFp bGVkXG4iKTsKPj4gKwkJCXJldHVybjsKPj4gKwkJfQo+PiArCQlwZGF0YS0+cG93ZXJfb24gPSB0 cnVlOwo+PiArCX0gZWxzZSBpZiAoIWVuYWJsZSAmJiAhcmVmX2NvdW50KSB7Cj4+ICsJCXJlZ3Vs YXRvcl9idWxrX2Rpc2FibGUocGRhdGEtPm51bV9zdXBwbGllcywgcGRhdGEtPnN1cHBsaWVzKTsK Pj4gKwo+PiArCQl0aV9zbl9icmlkZ2VfZ3Bpb19jb25maWd1cmUocGRhdGEsIGZhbHNlKTsKPj4g KwkJcGRhdGEtPnBvd2VyX29uID0gZmFsc2U7Cj4+ICsJfSBlbHNlIHsKPj4gKwkJRFJNX0RFQlVH KCJ0aV9zbl9icmlkZ2UgcG93ZXIgY3RybDogJWQgcmVmY291bnQ6ICVkXG4iLAo+PiArCQkJCQkJ CWVuYWJsZSwgcmVmX2NvdW50KTsKPj4gKwl9Cj4+ICt9Cj4+ICsKPj4gKy8qIENvbm5lY3RvciBm dW5jcyAqLwo+PiArc3RhdGljIHN0cnVjdCB0aV9zbl9icmlkZ2UgKgo+PiArY29ubmVjdG9yX3Rv X3RpX3NuX2JyaWRnZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+PiArewo+PiAr CXJldHVybiBjb250YWluZXJfb2YoY29ubmVjdG9yLCBzdHJ1Y3QgdGlfc25fYnJpZGdlLCBjb25u ZWN0b3IpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9jb25uZWN0b3Jf Z2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yIAo+PiAqY29ubmVjdG9yKQo+PiArewo+PiAr CXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gY29ubmVjdG9yX3RvX3RpX3NuX2JyaWRnZShj b25uZWN0b3IpOwo+PiArCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsID0gcGRhdGEtPnBhbmVsOwo+ PiArCXN0cnVjdCBlZGlkICplZGlkOwo+PiArCj4+ICsJaWYgKHBhbmVsKSB7Cj4+ICsJCURSTV9E RUJVRygiZ2V0IG1vZGUgZnJvbSBjb25uZWN0ZWQgZHJtX3BhbmVsXG4iKTsKPj4gKwkJcGRhdGEt Pm51bV9tb2RlcyA9IGRybV9wYW5lbF9nZXRfbW9kZXMocGFuZWwpOwo+PiArCX0gZWxzZSB7Cj4+ ICsJCS8qIGdldCBmcm9tIEVESUQgKi8KPj4gKwkJaWYgKCFwZGF0YS0+ZGRjKQo+PiArCQkJcmV0 dXJuIDA7Cj4+ICsJCXRpX3NuX2JyaWRnZV9wb3dlcl9jdHJsKHBkYXRhLCB0cnVlKTsKPj4gKwkJ ZWRpZCA9IGRybV9nZXRfZWRpZChjb25uZWN0b3IsIHBkYXRhLT5kZGMpOwo+PiArCQlpZiAoZWRp ZCkgewo+PiArCQkJZHJtX21vZGVfY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5l Y3RvciwKPj4gKwkJCQkJCQkJZWRpZCk7Cj4+ICsJCQlwZGF0YS0+bnVtX21vZGVzID0gZHJtX2Fk ZF9lZGlkX21vZGVzKGNvbm5lY3RvciwgZWRpZCk7Cj4+ICsJCQlkcm1fZWRpZF90b19lbGQoY29u bmVjdG9yLCBlZGlkKTsKPj4gKwkJCWtmcmVlKGVkaWQpOwo+PiArCQl9IGVsc2Ugewo+PiArCQkJ RFJNX0RFQlVHKCJmYWlsZWQgdG8gZ2V0IGVkaWRcbiIpOwo+PiArCQl9Cj4+ICsJCXRpX3NuX2Jy aWRnZV9wb3dlcl9jdHJsKHBkYXRhLCBmYWxzZSk7Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIHBk YXRhLT5udW1fbW9kZXM7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1 cwo+PiArdGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IsCj4+ICsJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2Rl KQo+PiArewo+PiArCS8qIG1heGltdW0gc3VwcG9ydGVkIHJlc29sdXRpb24gaXMgNEsgYXQgNjAg ZnBzICovCj4+ICsJaWYgKG1vZGUtPmNsb2NrID4gNTk0MDAwKQo+PiArCQlyZXR1cm4gTU9ERV9D TE9DS19ISUdIOwo+PiArCj4+ICsJcmV0dXJuIE1PREVfT0s7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRp YyBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgCj4+IHRpX3NuX2JyaWRnZV9jb25u ZWN0b3JfaGVscGVyX2Z1bmNzID0gewo+PiArCS5nZXRfbW9kZXMgPSB0aV9zbl9icmlkZ2VfY29u bmVjdG9yX2dldF9tb2RlcywKPj4gKwkubW9kZV92YWxpZCA9IHRpX3NuX2JyaWRnZV9jb25uZWN0 b3JfbW9kZV92YWxpZCwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jf c3RhdHVzCj4+ICt0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yLCBib29sIAo+PiBmb3JjZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgdGlfc25f YnJpZGdlICpwZGF0YSA9IGNvbm5lY3Rvcl90b190aV9zbl9icmlkZ2UoY29ubmVjdG9yKTsKPj4g Kwo+PiArCS8qKgo+PiArCSAqIFRPRE86IEN1cnJlbnRseSBpZiBkcm1fcGFuZWwgaXMgcHJlc2Vu dCwgdGhlbiBhbHdheXMKPj4gKwkgKiByZXR1cm4gdGhlIHN0YXR1cyBhcyBjb25uZWN0ZWQuIE5l ZWQgdG8gYWRkIHN1cHBvcnQgdG8gZGV0ZWN0Cj4+ICsJICogZGV2aWNlIHN0YXRlIGZvciBubyBw YW5lbChob3QgcGx1Z2dhYmxlKSBzY2VuYXJpb3MuCj4+ICsJICovCj4+ICsJaWYgKHBkYXRhLT5w YW5lbCkKPj4gKwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwo+PiArCWVsc2UK Pj4gKwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwo+PiArfQo+PiArCj4+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgdGlfc25fYnJpZGdlX2Nv bm5lY3Rvcl9mdW5jcyAKPj4gPSB7Cj4+ICsJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2Jl X3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCj4+ICsJLmRldGVjdCA9IHRpX3NuX2JyaWRnZV9jb25u ZWN0b3JfZGV0ZWN0LAo+PiArCS5kZXN0cm95ID0gZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwLAo+PiAr CS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKPj4gKwkuYXRvbWlj X2R1cGxpY2F0ZV9zdGF0ZSA9IAo+PiBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGlj YXRlX3N0YXRlLAo+PiArCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVy X2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIHN0cnVjdCB0 aV9zbl9icmlkZ2UgKmJyaWRnZV90b190aV9zbl9icmlkZ2Uoc3RydWN0IGRybV9icmlkZ2UgCj4+ ICpicmlkZ2UpCj4+ICt7Cj4+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihicmlkZ2UsIHN0cnVjdCB0 aV9zbl9icmlkZ2UsIGJyaWRnZSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdGlfc25fYnJp ZGdlX3JlYWRfZGV2aWNlX3JldihzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkKPj4gK3sKPj4g Kwl1OCByZXYgPSAwOwo+PiArCWludCByZXQgPSAwOwo+PiArCj4+ICsJcmV0ID0gdGlfc25fYnJp ZGdlX3JlYWQocGRhdGEsIFNOX0RFVklDRV9SRVZfUkVHLCAmcmV2LCAxKTsKPj4gKwlpZiAocmV0 KQo+PiArCQlnb3RvIGV4aXQ7Cj4+ICsKPj4gKwlpZiAocmV2ID09IFNOX0JSSURHRV9SRVZJU0lP Tl9JRCkgewo+PiArCQlEUk1fREVCVUcoInRpX3NuX2JyaWRnZSByZXZpc2lvbiBpZDogMHgleFxu IiwgcmV2KTsKPj4gKwl9IGVsc2Ugewo+PiArCQlEUk1fRVJST1IoInRpX3NuX2JyaWRnZSByZXZp c2lvbiBpZCBtaXNtYXRjaFxuIik7Cj4+ICsJCXJldCA9IC1FSU5WQUw7Cj4+ICsJfQo+PiArCj4+ ICtleGl0Ogo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBjaGFy ICogY29uc3QgdGlfc25fYnJpZGdlX3N1cHBseV9uYW1lc1tdID0gewo+PiArCSJ2Y2NpbyIsCj4+ ICsJInZjY2EiLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGludCB0aV9zbl9icmlkZ2VfcGFyc2Vf cmVndWxhdG9ycyhzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkKPj4gK3sKPj4gKwl1bnNpZ25l ZCBpbnQgaTsKPj4gKwlpbnQgcmV0Owo+PiArCj4+ICsJcGRhdGEtPm51bV9zdXBwbGllcyA9IEFS UkFZX1NJWkUodGlfc25fYnJpZGdlX3N1cHBseV9uYW1lcyk7Cj4+ICsKPj4gKwlwZGF0YS0+c3Vw cGxpZXMgPSBkZXZtX2tjYWxsb2MocGRhdGEtPmRldiwgcGRhdGEtPm51bV9zdXBwbGllcywKPj4g KwkJCQkgICAgIHNpemVvZigqcGRhdGEtPnN1cHBsaWVzKSwgR0ZQX0tFUk5FTCk7Cj4+ICsJaWYg KCFwZGF0YS0+c3VwcGxpZXMpCj4+ICsJCXJldHVybiAtRU5PTUVNOwo+PiArCj4+ICsJZm9yIChp ID0gMDsgaSA8IHBkYXRhLT5udW1fc3VwcGxpZXM7IGkrKykKPj4gKwkJcGRhdGEtPnN1cHBsaWVz W2ldLnN1cHBseSA9IHRpX3NuX2JyaWRnZV9zdXBwbHlfbmFtZXNbaV07Cj4+ICsKPj4gKwlyZXQg PSBkZXZtX3JlZ3VsYXRvcl9idWxrX2dldChwZGF0YS0+ZGV2LAo+PiArCQkJcGRhdGEtPm51bV9z dXBwbGllcywgcGRhdGEtPnN1cHBsaWVzKTsKPj4gKwo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9hdHRhY2hfcGFuZWwoc3RydWN0IHRpX3Nu X2JyaWRnZSAqcGRhdGEpCj4+ICt7Cj4+ICsJc3RydWN0IGRldmljZV9ub2RlICpwYW5lbF9ub2Rl LCAqcG9ydCwgKmVuZHBvaW50Owo+PiArCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsID0gTlVMTDsK Pj4gKwo+PiArCXBvcnQgPSBvZl9ncmFwaF9nZXRfcG9ydF9ieV9pZChwZGF0YS0+ZGV2LT5vZl9u b2RlLCAxKTsKPj4gKwlpZiAocG9ydCkgewo+PiArCQllbmRwb2ludCA9IG9mX2dldF9jaGlsZF9i eV9uYW1lKHBvcnQsICJlbmRwb2ludCIpOwo+PiArCQlvZl9ub2RlX3B1dChwb3J0KTsKPj4gKwkJ aWYgKCFlbmRwb2ludCkgewo+PiArCQkJZGV2X2VycihwZGF0YS0+ZGV2LCAibm8gb3V0cHV0IGVu ZHBvaW50IGZvdW5kXG4iKTsKPj4gKwkJCWdvdG8gZXJyb3I7Cj4+ICsJCX0KPj4gKwo+PiArCQlw YW5lbF9ub2RlID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9wb3J0X3BhcmVudChlbmRwb2ludCk7Cj4+ ICsJCW9mX25vZGVfcHV0KGVuZHBvaW50KTsKPj4gKwkJaWYgKCFwYW5lbF9ub2RlKSB7Cj4+ICsJ CQlkZXZfZXJyKHBkYXRhLT5kZXYsICJubyBvdXRwdXQgbm9kZSBmb3VuZFxuIik7Cj4+ICsJCQln b3RvIGVycm9yOwo+PiArCQl9Cj4+ICsKPj4gKwkJcGFuZWwgPSBvZl9kcm1fZmluZF9wYW5lbChw YW5lbF9ub2RlKTsKPj4gKwkJb2Zfbm9kZV9wdXQocGFuZWxfbm9kZSk7Cj4+ICsJCWlmICghcGFu ZWwpIHsKPj4gKwkJCWRldl9lcnIocGRhdGEtPmRldiwgIm5vIHBhbmVsIG5vZGUgZm91bmRcbiIp Owo+PiArCQkJZ290byBlcnJvcjsKPj4gKwkJfQo+PiArCX0KPj4gKwo+PiArCXBkYXRhLT5wYW5l bCA9IHBhbmVsOwo+PiArCWRybV9wYW5lbF9hdHRhY2gocGFuZWwsICZwZGF0YS0+Y29ubmVjdG9y KTsKPj4gKwo+PiArCXJldHVybjsKPj4gKwo+PiArZXJyb3I6Cj4+ICsJcGRhdGEtPnBhbmVsID0g TlVMTDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCB0aV9zbl9icmlkZ2VfYXR0YWNoKHN0cnVj dCBkcm1fYnJpZGdlICpicmlkZ2UpCj4+ICt7Cj4+ICsJc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhv c3Q7Cj4+ICsJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpOwo+PiArCXN0cnVjdCB0aV9zbl9i cmlkZ2UgKnBkYXRhID0gYnJpZGdlX3RvX3RpX3NuX2JyaWRnZShicmlkZ2UpOwo+PiArCWludCBy ZXQ7Cj4+ICsJY29uc3Qgc3RydWN0IG1pcGlfZHNpX2RldmljZV9pbmZvIGluZm8gPSB7IC50eXBl ID0gInRpX3NuX2JyaWRnZSIsCj4+ICsJCQkJCQkgICAuY2hhbm5lbCA9IDAsCj4+ICsJCQkJCQkg ICAubm9kZSA9IE5VTEwsCj4+ICsJCQkJCQkgfTsKPj4gKwo+PiArCWlmICghYnJpZGdlLT5lbmNv ZGVyKSB7Cj4+ICsJCURSTV9FUlJPUigiUGFyZW50IGVuY29kZXIgb2JqZWN0IG5vdCBmb3VuZCIp Owo+PiArCQlyZXR1cm4gLUVOT0RFVjsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBIUEQgbm90IHN1cHBv cnRlZCAqLwo+PiArCXBkYXRhLT5jb25uZWN0b3IucG9sbGVkID0gMDsKPj4gKwo+PiArCXJldCA9 IGRybV9jb25uZWN0b3JfaW5pdChicmlkZ2UtPmRldiwgJnBkYXRhLT5jb25uZWN0b3IsCj4+ICsJ CQkJICZ0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2Z1bmNzLAo+PiArCQkJCSBEUk1fTU9ERV9DT05O RUNUT1JfZURQKTsKPj4gKwlpZiAocmV0KSB7Cj4+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIGlu aXRpYWxpemUgY29ubmVjdG9yIHdpdGggZHJtXG4iKTsKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwl9 Cj4+ICsKPj4gKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnBkYXRhLT5jb25uZWN0b3IsCj4+ ICsJCQkJICZ0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7Cj4+ICsJZHJtX21v ZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZwZGF0YS0+Y29ubmVjdG9yLCAKPj4gYnJpZGdl LT5lbmNvZGVyKTsKPj4gKwo+PiArCWhvc3QgPSBvZl9maW5kX21pcGlfZHNpX2hvc3RfYnlfbm9k ZShwZGF0YS0+aG9zdF9ub2RlKTsKPj4gKwlpZiAoIWhvc3QpIHsKPj4gKwkJRFJNX0VSUk9SKCJm YWlsZWQgdG8gZmluZCBkc2kgaG9zdFxuIik7Cj4+ICsJCXJldHVybiAtRU5PREVWOwo+PiArCX0K Pj4gKwo+PiArCWRzaSA9IG1pcGlfZHNpX2RldmljZV9yZWdpc3Rlcl9mdWxsKGhvc3QsICZpbmZv KTsKPj4gKwlpZiAoSVNfRVJSKGRzaSkpIHsKPj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gY3Jl YXRlIGRzaSBkZXZpY2VcbiIpOwo+PiArCQlyZXQgPSBQVFJfRVJSKGRzaSk7Cj4+ICsJCWdvdG8g ZXJyX2RzaV9kZXZpY2U7Cj4+ICsJfQo+PiArCj4+ICsJLyogVE9ETzogc2V0dGluZyB0byA0IGxh bmVzIGFsd2F5cyBmb3Igbm93ICovCj4+ICsJZHNpLT5sYW5lcyA9IDQ7Cj4+ICsJZHNpLT5mb3Jt YXQgPSBNSVBJX0RTSV9GTVRfUkdCODg4Owo+PiArCWRzaS0+bW9kZV9mbGFncyA9IE1JUElfRFNJ X01PREVfVklERU8gfCAKPj4gTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNFIHwKPj4gKwkJ CSAgTUlQSV9EU0lfTU9ERV9FT1RfUEFDS0VUIHwgTUlQSV9EU0lfTU9ERV9WSURFT19IU0U7Cj4+ ICsKPj4gKwlyZXQgPSBtaXBpX2RzaV9hdHRhY2goZHNpKTsKPj4gKwlpZiAocmV0IDwgMCkgewo+ PiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBhdHRhY2ggZHNpIHRvIGhvc3RcbiIpOwo+PiArCQln b3RvIGVycl9kc2lfYXR0YWNoOwo+PiArCX0KPj4gKwo+PiArCXBkYXRhLT5kc2kgPSBkc2k7Cj4+ ICsKPj4gKwlEUk1fREVCVUcoImJyaWRnZSBhdHRhY2hlZFxuIik7Cj4+ICsJLyogYXR0YWNoIHBh bmVsIHRvIGJyaWRnZSAqLwo+PiArCXRpX3NuX2JyaWRnZV9hdHRhY2hfcGFuZWwocGRhdGEpOwo+ PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICsKPj4gK2Vycl9kc2lfYXR0YWNoOgo+PiArCW1pcGlfZHNp X2RldmljZV91bnJlZ2lzdGVyKGRzaSk7Cj4+ICtlcnJfZHNpX2RldmljZToKPj4gKwlyZXR1cm4g cmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCB0aV9zbl9icmlkZ2VfbW9kZV9zZXQoc3Ry dWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKPj4gKwkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKm1vZGUsCj4+ICsJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGpfbW9kZSkK Pj4gK3sKPj4gKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90b190aV9zbl9i cmlkZ2UoYnJpZGdlKTsKPj4gKwo+PiArCURSTV9ERUJVRygibW9kZV9zZXQ6IGhkaXNwbGF5PSVk LCB2ZGlzcGxheT0lZCwgdnJlZnJlc2g9JWQsIAo+PiBjbG9jaz0lZFxuIiwKPj4gKwkJYWRqX21v ZGUtPmhkaXNwbGF5LCBhZGpfbW9kZS0+dmRpc3BsYXksCj4+ICsJCWFkal9tb2RlLT52cmVmcmVz aCwgYWRqX21vZGUtPmNsb2NrKTsKPj4gKwo+PiArCWRybV9tb2RlX2NvcHkoJnBkYXRhLT5jdXJy X21vZGUsIGFkal9tb2RlKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgdGlfc25fYnJpZGdl X2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgdGlf c25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90b190aV9zbl9icmlkZ2UoYnJpZGdlKTsKPj4gKwlz dHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCA9IHBkYXRhLT5wYW5lbDsKPj4gKwo+PiArCWlmIChwYW5l bCkgewo+PiArCQlkcm1fcGFuZWxfZGlzYWJsZShwYW5lbCk7Cj4+ICsJCWRybV9wYW5lbF91bnBy ZXBhcmUocGFuZWwpOwo+PiArCX0KPj4gKwo+PiArCXRpX3NuX2JyaWRnZV9wb3dlcl9jdHJsKHBk YXRhLCBmYWxzZSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9lbmFi bGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgdGlfc25fYnJp ZGdlICpwZGF0YSA9IGJyaWRnZV90b190aV9zbl9icmlkZ2UoYnJpZGdlKTsKPj4gKwlzdHJ1Y3Qg ZHJtX3BhbmVsICpwYW5lbCA9IHBkYXRhLT5wYW5lbDsKPj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZSA9ICZwZGF0YS0+Y3Vycl9tb2RlOwo+PiArCXUzMiBiaXRfcmF0ZV9taHosIGNs a19mcmVxX21oejsKPj4gKwl1OCB2YWwgPSAwOwo+PiArCj4+ICsJaWYgKCFwZGF0YS0+bnVtX21v ZGVzKQo+PiArCQlyZXR1cm47Cj4+ICsKPj4gKwl0aV9zbl9icmlkZ2VfcG93ZXJfY3RybChwZGF0 YSwgdHJ1ZSk7Cj4+ICsKPj4gKwlpZiAocGFuZWwpCj4+ICsJCWRybV9wYW5lbF9wcmVwYXJlKHBh bmVsKTsKPj4gKwo+PiArCS8qIENMS19TUkMgY29uZmlnICovCj4+ICsJdGlfc25fYnJpZGdlX3dy aXRlKHBkYXRhLCBTTl9SRUZDTEtfRlJFUV9SRUcsCj4+ICsJCQkoRFBQTExfQ0xLX1NSQ19SRUZD TEsgfCAoU05fUkVGX0NMS18xOV8yX01IWiA8PCAweDEpKSk7Cj4+ICsKPj4gKwkvKiBEU0lfQSBs YW5lIGNvbmZpZyAqLwo+PiArCXRpX3NuX2JyaWRnZV9yZWFkKHBkYXRhLCBTTl9EU0lfTEFORVNf UkVHLCAmdmFsLCAweDEpOwo+PiArCXZhbCB8PSAoKDB4NCAtIHBkYXRhLT5kc2ktPmxhbmVzKSAm IDB4MDMpIDw8IDB4MzsKPj4gKwl0aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0RTSV9MQU5F U19SRUcsIHZhbCk7Cj4+ICsKPj4gKwkvKiBEUCBsYW5lIGNvbmZpZyAqLwo+PiArCXRpX3NuX2Jy aWRnZV9yZWFkKHBkYXRhLCBTTl9TU0NfQ09ORklHX1JFRywgJnZhbCwgMHgxKTsKPj4gKwl2YWwg fD0gKChwZGF0YS0+ZHNpLT5sYW5lcyAtIDB4MSkgJiAweDAzKSA8PCAweDQ7Cj4+ICsJdGlfc25f YnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9TU0NfQ09ORklHX1JFRywgdmFsKTsKPj4gKwo+PiArCS8q IHNldCBkc2kgY2xrIGZyZXF1ZW5jeSB2YWx1ZSAqLwo+PiArCWJpdF9yYXRlX21oeiA9IChtb2Rl LT5jbG9jayAvIDEwMDApICoKPj4gKwkJCW1pcGlfZHNpX3BpeGVsX2Zvcm1hdF90b19icHAocGRh dGEtPmRzaS0+Zm9ybWF0KTsKPj4gKwljbGtfZnJlcV9taHogPSBiaXRfcmF0ZV9taHogLyAocGRh dGEtPmRzaS0+bGFuZXMgKiAyKTsKPj4gKwkvKiBmb3IgZWFjaCBpbmNyZW1lbnQgaW4gdmFsLCBm cmVxdWVuY3kgaW5jcmVhc2VzIGJ5IDVNSHogKi8KPj4gKwl2YWwgPSAoTUlOX0RTSV9DTEtfRlJF UV9NSFogLyAweDUpICsKPj4gKwkJKCgoY2xrX2ZyZXFfbWh6IC0gTUlOX0RTSV9DTEtfRlJFUV9N SFopIC8gMHg1KSAmIDB4RkYpOwo+PiArCXRpX3NuX2JyaWRnZV93cml0ZShwZGF0YSwgU05fRFNJ QV9DTEtfRlJFUV9SRUcsIHZhbCk7Cj4+ICsKPj4gKwl0aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEs IFNOX0RBVEFSQVRFX0NPTkZJR19SRUcsIDB4ODApOyAvKiBzZXQgSEJSIAo+PiAqLwo+PiArCj4+ ICsJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9QTExfRU5BQkxFX1JFRywgMHgxKTsgLyog RW5hYmxlIFBMTCAqLwo+PiArCXVzbGVlcF9yYW5nZSgxMDAwMCwgMTAwMDEpOwo+PiArCj4+ICsJ LyogRFBDRCBSZWdpc3RlciAweDAwMTBBIGluIFNpbmsgKi8KPj4gKwl0aV9zbl9icmlkZ2Vfd3Jp dGUocGRhdGEsIFNOX0FVWF9XREFUQTBfUkVHLCAweDAxKTsKPj4gKwl0aV9zbl9icmlkZ2Vfd3Jp dGUocGRhdGEsIFNOX0FVWF9BRERSXzE5XzE2X1JFRywgMHgwMCk7Cj4+ICsJdGlfc25fYnJpZGdl X3dyaXRlKHBkYXRhLCBTTl9BVVhfQUREUl8xNV84X1JFRywgMHgwMSk7Cj4+ICsJdGlfc25fYnJp ZGdlX3dyaXRlKHBkYXRhLCBTTl9BVVhfQUREUl83XzBfUkVHLCAweDBBKTsKPj4gKwl0aV9zbl9i cmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0FVWF9MRU5HVEhfUkVHLCAweDAxKTsKPj4gKwl0aV9zbl9i cmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0FVWF9DTURfUkVHLCAweDgxKTsKPj4gKwl1c2xlZXBfcmFu Z2UoMTAwMDAsIDEwMDAxKTsKPj4gKwo+PiArCS8qIFNlbWkgYXV0byBsaW5rIHRyYWluaW5nIG1v ZGUgKi8KPj4gKwl0aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNOX01MX1RYX01PREVfUkVHLCAw eDBBKTsKPj4gKwl1c2xlZXBfcmFuZ2UoMjAwMDAsIDIwMDAxKTsKPj4gKwo+PiArCS8qIGNvbmZp ZyB2aWRlbyBwYXJhbWV0ZXJzICovCj4+ICsJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9D SEFfQUNUSVZFX0xJTkVfTEVOR1RIX0xPV19SRUcsCj4+ICsJCQltb2RlLT5oZGlzcGxheSAmIDB4 RkYpOwo+PiArCXRpX3NuX2JyaWRnZV93cml0ZShwZGF0YSwgU05fQ0hBX0FDVElWRV9MSU5FX0xF TkdUSF9ISUdIX1JFRywKPj4gKwkJCShtb2RlLT5oZGlzcGxheSA+PiAweDgpICYgMHhGRik7Cj4+ ICsJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9DSEFfVkVSVElDQUxfRElTUExBWV9TSVpF X0xPV19SRUcsCj4+ICsJCQltb2RlLT52ZGlzcGxheSAmIDB4RkYpOwo+PiArCXRpX3NuX2JyaWRn ZV93cml0ZShwZGF0YSwgU05fQ0hBX1ZFUlRJQ0FMX0RJU1BMQVlfU0laRV9ISUdIX1JFRywKPj4g KwkJCShtb2RlLT5oZGlzcGxheSA+PiAweDgpICYgMHhGRik7Cj4+ICsJdGlfc25fYnJpZGdlX3dy aXRlKHBkYXRhLCBTTl9DSEFfSFNZTkNfUFVMU0VfV0lEVEhfTE9XX1JFRywKPj4gKwkJCShtb2Rl LT5odG90YWwgLSBtb2RlLT5oc3luY19lbmQpICYgMHhGRik7Cj4+ICsJdGlfc25fYnJpZGdlX3dy aXRlKHBkYXRhLCBTTl9DSEFfSFNZTkNfUFVMU0VfV0lEVEhfSElHSF9SRUcsCj4+ICsJCQkoKG1v ZGUtPmh0b3RhbCAtIG1vZGUtPmhzeW5jX2VuZCkgPj4gMHg4KSAmIDB4RkYpOwo+PiArCXRpX3Nu X2JyaWRnZV93cml0ZShwZGF0YSwgU05fQ0hBX1ZTWU5DX1BVTFNFX1dJRFRIX0xPV19SRUcsCj4+ ICsJCQkobW9kZS0+dnRvdGFsIC0gbW9kZS0+dnN5bmNfZW5kKSAmIDB4RkYpOwo+PiArCXRpX3Nu X2JyaWRnZV93cml0ZShwZGF0YSwgU05fQ0hBX1ZTWU5DX1BVTFNFX1dJRFRIX0hJR0hfUkVHLAo+ PiArCQkJKChtb2RlLT52dG90YWwgLSBtb2RlLT52c3luY19lbmQpID4+IDB4OCkgJiAweEZGKTsK Pj4gKwl0aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0NIQV9IT1JJWk9OVEFMX0JBQ0tfUE9S Q0hfUkVHLAo+PiArCQkJKG1vZGUtPmhzeW5jX3N0YXJ0IC0gbW9kZS0+aGRpc3BsYXkpICYgMHhG Rik7Cj4+ICsJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9DSEFfVkVSVElDQUxfQkFDS19Q T1JDSF9SRUcsCj4+ICsJCQkobW9kZS0+dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlzcGxheSkgJiAw eEZGKTsKPj4gKwl0aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0NIQV9IT1JJWk9OVEFMX0ZS T05UX1BPUkNIX1JFRywKPj4gKwkJCShtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5oc3luY19zdGFy dCkgJiAweEZGKTsKPj4gKwl0aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0NIQV9WRVJUSUNB TF9GUk9OVF9QT1JDSF9SRUcsCj4+ICsJCQkobW9kZS0+dnN5bmNfZW5kIC0gbW9kZS0+dnN5bmNf c3RhcnQpICYgMHhGRik7Cj4+ICsJaWYgKHBkYXRhLT5kc2ktPmZvcm1hdCA9PSBNSVBJX0RTSV9G TVRfUkdCODg4KQo+PiArCQl0aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0RBVEFfRk9STUFU X1JFRywgMHgwMCk7Cj4+ICsJZWxzZQo+PiArCQl0aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNO X0RBVEFfRk9STUFUX1JFRywgMHgwMSk7Cj4+ICsJdXNsZWVwX3JhbmdlKDEwMDAwLCAxMDAwMSk7 Cj4+ICsKPj4gKwkvKiBlbmFibGUgdmlkZW8gc3RyZWFtICovCj4+ICsJdGlfc25fYnJpZGdlX3Jl YWQocGRhdGEsIFNOX0VOSF9GUkFNRV9SRUcsICZ2YWwsIDB4MSk7Cj4+ICsJdmFsIHw9IEJJVCgz KTsKPj4gKwl0aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0VOSF9GUkFNRV9SRUcsIHZhbCk7 Cj4+ICsKPj4gKwlpZiAocGFuZWwpCj4+ICsJCWRybV9wYW5lbF9lbmFibGUocGFuZWwpOwo+IAo+ IEFzIG1lbnRpb25lZCBpbiB0aGUgcHJldmlvdXMgcmV2aWV3LCB5b3Ugc2hvdWxkIGNvbmZpZ3Vy ZSB0aGUgbW9kZSBpbiAKPiBtb2RlX3NldCwKPiBub3QgZW5hYmxlLiBUaGlzIGVsaW1pbmF0ZXMg dGhlIG5lZWQgZm9yIGN1cnJfbW9kZS4KCklmIHdlIG1vdmUgdGhpcyB0byBtb2RlX3NldCB0aGVu IGl0IGRvZXMgbm90IG1hdGNoIHdpdGggdGhlIGRhdGFzaGVldCAKaW5pdCBzZXF1ZW5jZQpwcm92 aWRlZCBpbiBwYWdlIDcxLiBGaXJzdCBtb2RlX3NldCBpcyBjYWxsZWQgaW4gY29tbWl0IHdoaWNo IHdpbGwgc2V0IAp0aGUgY3VycmVudCBtb2RlLgphZnRlciB0aGF0IHdoZW4gYnJpZGdlIGVuYWJs ZSBnZXRzIGNhbGxlZCBncGlvIGFuZCByZWd1bGF0b3IgZW5hYmxlIGFuZCAKdGhlbiB0aGUgYnJp ZGdlIHJlZ2lzdGVycwpuZWVkcyB0byBiZSBwcm9ncmFtbWVkIGJhc2VkIG9uIGN1cnJlbnQgbW9k ZS4KCj4gCj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2JyaWRnZV9mdW5j cyB0aV9zbl9icmlkZ2VfZnVuY3MgPSB7Cj4+ICsJLmF0dGFjaCA9IHRpX3NuX2JyaWRnZV9hdHRh Y2gsCj4+ICsJLmVuYWJsZSA9IHRpX3NuX2JyaWRnZV9lbmFibGUsCj4+ICsJLmRpc2FibGUgPSB0 aV9zbl9icmlkZ2VfZGlzYWJsZSwKPj4gKwkubW9kZV9zZXQgPSB0aV9zbl9icmlkZ2VfbW9kZV9z ZXQsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9wYXJzZV9ncGlvcyhz dHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkKPj4gK3sKPj4gKwlpbnQgcmV0ID0gMDsKPj4gKwo+ PiArCWlmICghcGRhdGEgfHwgIXBkYXRhLT5kZXYpCj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiAr Cj4+ICsJcGRhdGEtPmVuYWJsZV9ncGlvcyA9IGRldm1fZ3Bpb2RfZ2V0X2FycmF5KHBkYXRhLT5k ZXYsCj4+ICsJCQkJCQkiZW5hYmxlIiwgR1BJT0RfT1VUX0xPVyk7Cj4+ICsJaWYgKElTX0VSUihw ZGF0YS0+ZW5hYmxlX2dwaW9zKSkgewo+PiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBnZXQgZW5h YmxlIGdwaW8gZnJvbSBEVFxuIik7Cj4+ICsJCXJldCA9IFBUUl9FUlIocGRhdGEtPmVuYWJsZV9n cGlvcyk7Cj4+ICsJCWdvdG8gZXhpdDsKPj4gKwl9Cj4+ICsKPj4gKwlwZGF0YS0+aXJxX2dwaW8g PSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChwZGF0YS0+ZGV2LCAiaXJxIiwKPj4gKwkJCQkJCSAg R1BJT0RfT1VUX0xPVyk7Cj4+ICsJaWYgKElTX0VSUihwZGF0YS0+aXJxX2dwaW8pKQo+PiArCQlE Uk1fRVJST1IoImZhaWxlZCB0byBnZXQgaXJxIGdwaW8gZnJvbSBEVFxuIik7Cj4+ICsKPj4gK2V4 aXQ6Cj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCB0aV9zbl9icmlk Z2VfcGFyc2VfZHNpX2hvc3Qoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCj4+ICt7Cj4+ICsJ c3RydWN0IGRldmljZV9ub2RlICpucCA9IHBkYXRhLT5kZXYtPm9mX25vZGU7Cj4+ICsJc3RydWN0 IGRldmljZV9ub2RlICplbmRfbm9kZTsKPj4gKwo+PiArCWVuZF9ub2RlID0gb2ZfZ3JhcGhfZ2V0 X2VuZHBvaW50X2J5X3JlZ3MobnAsIDAsIDApOwo+PiArCWlmICghZW5kX25vZGUpIHsKPj4gKwkJ RFJNX0VSUk9SKCJyZW1vdGUgZW5kcG9pbnQgbm90IGZvdW5kXG4iKTsKPj4gKwkJcmV0dXJuIC1F Tk9ERVY7Cj4+ICsJfQo+PiArCj4+ICsJcGRhdGEtPmhvc3Rfbm9kZSA9IG9mX2dyYXBoX2dldF9y ZW1vdGVfcG9ydF9wYXJlbnQoZW5kX25vZGUpOwo+PiArCW9mX25vZGVfcHV0KGVuZF9ub2RlKTsK Pj4gKwlpZiAoIXBkYXRhLT5ob3N0X25vZGUpIHsKPj4gKwkJRFJNX0VSUk9SKCJyZW1vdGUgbm9k ZSBub3QgZm91bmRcbiIpOwo+PiArCQlyZXR1cm4gLUVOT0RFVjsKPj4gKwl9Cj4+ICsJb2Zfbm9k ZV9wdXQocGRhdGEtPmhvc3Rfbm9kZSk7Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+ PiArc3RhdGljIGludCB0aV9zbl9icmlkZ2VfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVu dCwKPj4gKwkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQo+PiArewo+PiArCXN0cnVj dCB0aV9zbl9icmlkZ2UgKnBkYXRhOwo+PiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZGRjX25vZGU7 Cj4+ICsJaW50IHJldCA9IDA7Cj4+ICsKPj4gKwlpZiAoIWNsaWVudCB8fCAhY2xpZW50LT5kZXYu b2Zfbm9kZSkgewo+PiArCQlEUk1fRVJST1IoImludmFsaWQgaW5wdXRcbiIpOwo+PiArCQlyZXR1 cm4gLUVJTlZBTDsKPj4gKwl9Cj4+ICsKPj4gKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5 KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgewo+PiArCQlEUk1fRVJST1IoImRldmlj ZSBkb2Vzbid0IHN1cHBvcnQgSTJDXG4iKTsKPj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4+ICsJfQo+ PiArCj4+ICsJcGRhdGEgPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LAo+PiArCQlzaXplb2Yo c3RydWN0IHRpX3NuX2JyaWRnZSksIEdGUF9LRVJORUwpOwo+PiArCWlmICghcGRhdGEpCj4+ICsJ CXJldHVybiAtRU5PTUVNOwo+PiArCj4+ICsJcGRhdGEtPnBvd2VyX29uID0gZmFsc2U7Cj4+ICsJ cGRhdGEtPmRldiA9ICZjbGllbnQtPmRldjsKPj4gKwlwZGF0YS0+aTJjX2NsaWVudCA9IGNsaWVu dDsKPj4gKwlEUk1fREVCVUcoIkkyQyBhZGRyZXNzIGlzICV4XG4iLCBjbGllbnQtPmFkZHIpOwo+ PiArCj4+ICsJcmV0ID0gdGlfc25fYnJpZGdlX3BhcnNlX2RzaV9ob3N0KHBkYXRhKTsKPj4gKwlp ZiAocmV0KSB7Cj4+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBhcnNlIGRldmljZSB0cmVlXG4i KTsKPj4gKwkJZ290byBlcnJfZHRfcGFyc2U7Cj4+ICsJfQo+PiArCj4+ICsJcmV0ID0gdGlfc25f YnJpZGdlX3BhcnNlX2dwaW9zKHBkYXRhKTsKPj4gKwlpZiAocmV0KSB7Cj4+ICsJCURSTV9FUlJP UigiZmFpbGVkIHRvIHBhcnNlIGdwaW9zIGZyb20gRFRcbiIpOwo+PiArCQlnb3RvIGVycl9kdF9w YXJzZTsKPj4gKwl9Cj4+ICsKPj4gKwlyZXQgPSB0aV9zbl9icmlkZ2VfcGFyc2VfcmVndWxhdG9y cyhwZGF0YSk7Cj4+ICsJaWYgKHJldCkgewo+PiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBwYXJz ZSByZWd1bGF0b3JzXG4iKTsKPj4gKwkJZ290byBlcnJfZHRfcGFyc2U7Cj4+ICsJfQo+PiArCj4+ ICsJZGRjX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKHBkYXRhLT5kZXYtPm9mX25vZGUsICJkZGMt aTJjLWJ1cyIsIDApOwo+PiArCWlmIChkZGNfbm9kZSkgewo+PiArCQlwZGF0YS0+ZGRjID0gb2Zf ZmluZF9pMmNfYWRhcHRlcl9ieV9ub2RlKGRkY19ub2RlKTsKPj4gKwkJb2Zfbm9kZV9wdXQoZGRj X25vZGUpOwo+PiArCQlpZiAoIXBkYXRhLT5kZGMpIHsKPj4gKwkJCWRldl9kYmcocGRhdGEtPmRl diwgImZhaWxlZCB0byByZWFkIGRkYyBub2RlXG4iKTsKPj4gKwkJCXJldHVybiAtRVBST0JFX0RF RkVSOwo+PiArCQl9Cj4+ICsJfSBlbHNlIHsKPj4gKwkJZGV2X2RiZyhwZGF0YS0+ZGV2LCAibm8g ZGRjIHByb3BlcnR5IGZvdW5kXG4iKTsKPj4gKwl9Cj4+ICsKPj4gKwl0aV9zbl9icmlkZ2VfcG93 ZXJfY3RybChwZGF0YSwgdHJ1ZSk7Cj4+ICsJcmV0ID0gdGlfc25fYnJpZGdlX3JlYWRfZGV2aWNl X3JldihwZGF0YSk7Cj4+ICsJaWYgKHJldCkgewo+PiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBy ZWFkIGNoaXAgcmV2XG4iKTsKPj4gKwkJZ290byBlcnJfY29uZmlnOwo+PiArCX0gZWxzZSB7Cj4+ ICsJCURSTV9ERUJVRygiYnJpZGdlIGNoaXAgZW5hYmxlZCBzdWNjZXNzZnVsbHlcbiIpOwo+PiAr CX0KPj4gKwl0aV9zbl9icmlkZ2VfcG93ZXJfY3RybChwZGF0YSwgZmFsc2UpOwo+PiArCj4+ICsJ aTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgcGRhdGEpOwo+PiArCWRldl9zZXRfZHJ2ZGF0YSgm Y2xpZW50LT5kZXYsIHBkYXRhKTsKPj4gKwo+PiArCXBkYXRhLT5icmlkZ2UuZnVuY3MgPSAmdGlf c25fYnJpZGdlX2Z1bmNzOwo+PiArCXBkYXRhLT5icmlkZ2Uub2Zfbm9kZSA9IGNsaWVudC0+ZGV2 Lm9mX25vZGU7Cj4+ICsKPj4gKwlkcm1fYnJpZGdlX2FkZCgmcGRhdGEtPmJyaWRnZSk7Cj4+ICsK Pj4gKwlyZXR1cm4gcmV0Owo+PiArCj4+ICtlcnJfY29uZmlnOgo+PiArCXRpX3NuX2JyaWRnZV9w b3dlcl9jdHJsKHBkYXRhLCBmYWxzZSk7Cj4+ICtlcnJfZHRfcGFyc2U6Cj4+ICsJZGV2bV9rZnJl ZSgmY2xpZW50LT5kZXYsIHBkYXRhKTsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtz dGF0aWMgaW50IHRpX3NuX2JyaWRnZV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkK Pj4gK3sKPj4gKwlpbnQgcmV0ID0gLUVJTlZBTDsKPj4gKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpw ZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwo+PiArCj4+ICsJaWYgKCFwZGF0YSkK Pj4gKwkJZ290byBlbmQ7Cj4+ICsKPj4gKwltaXBpX2RzaV9kZXRhY2gocGRhdGEtPmRzaSk7Cj4+ ICsJbWlwaV9kc2lfZGV2aWNlX3VucmVnaXN0ZXIocGRhdGEtPmRzaSk7Cj4+ICsKPj4gKwlkcm1f YnJpZGdlX3JlbW92ZSgmcGRhdGEtPmJyaWRnZSk7Cj4+ICsKPj4gKwlkaXNhYmxlX2lycShwZGF0 YS0+aXJxKTsKPj4gKwlmcmVlX2lycShwZGF0YS0+aXJxLCBwZGF0YSk7Cj4gCj4gVGhpcyBpcyB1 bmluaXRpYWxpemVkLgpzaW5jZSBpcnEgaXMgYW55d2F5cyBub3QgdXNlZCBpbiB0aGlzIGRyaXZl ciB5ZXQgc28gaSB3aWxsIHJlbW92ZSB0aGlzIApwYXJ0Lgo+IAo+PiArCj4+ICsJdGlfc25fYnJp ZGdlX2dwaW9fY29uZmlndXJlKHBkYXRhLCBmYWxzZSk7Cj4+ICsJaTJjX3B1dF9hZGFwdGVyKHBk YXRhLT5kZGMpOwo+PiArCj4+ICsJZGV2bV9rZnJlZSgmY2xpZW50LT5kZXYsIHBkYXRhKTsKPj4g Kwo+PiArZW5kOgo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3Qg aTJjX2RldmljZV9pZCB0aV9zbl9icmlkZ2VfaWRbXSA9IHsKPj4gKwl7ICJ0aSxzbjY1ZHNpODYi LCAwfSwKPj4gKwl7fQo+PiArfTsKPj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB0aV9zbl9i cmlkZ2VfaWQpOwo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB0aV9z bl9icmlkZ2VfbWF0Y2hfdGFibGVbXSA9IHsKPj4gKwl7LmNvbXBhdGlibGUgPSAidGksc242NWRz aTg2In0sCj4+ICsJe30KPj4gK307Cj4+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB0aV9zbl9i cmlkZ2VfbWF0Y2hfdGFibGUpOwo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdGlf c25fYnJpZGdlX2RyaXZlciA9IHsKPj4gKwkuZHJpdmVyID0gewo+PiArCQkubmFtZSA9ICJ0aV9z bjY1ZHNpODYiLAo+PiArCQkub3duZXIgPSBUSElTX01PRFVMRSwKPj4gKwkJLm9mX21hdGNoX3Rh YmxlID0gdGlfc25fYnJpZGdlX21hdGNoX3RhYmxlLAo+PiArCX0sCj4+ICsJLnByb2JlID0gdGlf c25fYnJpZGdlX3Byb2JlLAo+PiArCS5yZW1vdmUgPSB0aV9zbl9icmlkZ2VfcmVtb3ZlLAo+PiAr CS5pZF90YWJsZSA9IHRpX3NuX2JyaWRnZV9pZCwKPj4gK307Cj4+ICsKPj4gK21vZHVsZV9pMmNf ZHJpdmVyKHRpX3NuX2JyaWRnZV9kcml2ZXIpOwo+PiArTU9EVUxFX0RFU0NSSVBUSU9OKCJzbjY1 ZHNpODYgRFNJIHRvIGVEUCBicmlkZ2UgZHJpdmVyIik7Cj4+IC0tCj4+IFRoZSBRdWFsY29tbSBJ bm5vdmF0aW9uIENlbnRlciwgSW5jLiBpcyBhIG1lbWJlciBvZiB0aGUgQ29kZSBBdXJvcmEgCj4+ IEZvcnVtLAo+PiBhIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2ZSBQcm9qZWN0Cj4+IApf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpGcmVlZHJlbm8g bWFpbGluZyBsaXN0CkZyZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8K