From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 1/4 v3] drm: Add support of ARC PGU display controller Date: Mon, 14 Mar 2016 08:00:09 +0100 Message-ID: <20160314070009.GN14170@phenom.ffwll.local> References: <1457710959-9562-1-git-send-email-abrodkin@synopsys.com> <1457710959-9562-2-git-send-email-abrodkin@synopsys.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x244.google.com (mail-wm0-x244.google.com [IPv6:2a00:1450:400c:c09::244]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9FE686E5F8 for ; Mon, 14 Mar 2016 06:59:22 +0000 (UTC) Received: by mail-wm0-x244.google.com with SMTP id n186so13591483wmn.0 for ; Sun, 13 Mar 2016 23:59:22 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1457710959-9562-2-git-send-email-abrodkin@synopsys.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Alexey Brodkin Cc: Jose Abreu , linux-snps-arc@lists.infradead.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCBNYXIgMTEsIDIwMTYgYXQgMDY6NDI6MzZQTSArMDMwMCwgQWxleGV5IEJyb2RraW4g d3JvdGU6Cj4gQVJDIFBHVSBjb3VsZCBiZSBmb3VuZCBvbiBzb21lIGRldmVsb3BtZW50IGJvYXJk cyBmcm9tIFN5bm9wc3lzLgo+IFRoaXMgaXMgYSBzaW1wbGUgYnl0ZSBzdHJlYW1lciB0aGF0IHJl YWRzIGRhdGEgZnJvbSBhIGZyYW1lYnVmZmVyCj4gYW5kIHNlbmRzIGRhdGEgdG8gdGhlIHNpbmds ZSBlbmNvZGVyLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEFsZXhleSBCcm9ka2luIDxhYnJvZGtpbkBz eW5vcHN5cy5jb20+Cj4gQ2M6IERhdmlkIEFpcmxpZSA8YWlybGllZEBsaW51eC5pZT4KPiBDYzog ZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IENjOiBsaW51eC1zbnBzLWFyY0BsaXN0 cy5pbmZyYWRlYWQub3JnCj4gQ2M6IEpvc2UgQWJyZXUgPGpvYWJyZXVAc3lub3BzeXMuY29tPgo+ IC0tLQo+IAo+IENoYW5nZXMgdjIgLT4gdjM6Cj4gICogSW1wcm92ZWQgZmFpbHVyZSBwYXRoIGlm IGFyY3BndV9jb25uZWN0b3Igd2Fzbid0IGFsbG9jYXRlZCAodGhhbmtzIEpvc2UpLgo+ICAqIEZp eGVkIGRyaXZlciBidWlsZGluZyBhcyBtb2R1bGUgKHJlcG9ydGVkIGJ5IDAtREFZIGtlcm5lbCB0 ZXN0IGluZnJhc3RydWN0LikKPiAgKiBJbXBsZW1lbnRlZCB1bmNhY2hlZCBtYXBwaW5nIG9mIHVz ZXItc3BhY2UgRkIgcGFnZXMuCj4gCj4gTm8gY2hhbmdlcyB2MSAtPiB2Mi4KPiAKCkJ1bmNoIG9m IGNvbW1lbnRzIGJlbG93IHRvIHVwZGF0ZSB5b3VyIGRyaXZlciB0byBsYXRlc3Qgc3R5bGVzIGFu ZCBiZXN0CnByYWN0aWNlcy4KCkNoZWVycywgRGFuaWVsCgo+ICBkcml2ZXJzL2dwdS9kcm0vS2Nv bmZpZyAgICAgICAgICAgIHwgICAyICsKPiAgZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlICAgICAg ICAgICB8ICAgMSArCj4gIGRyaXZlcnMvZ3B1L2RybS9hcmMvS2NvbmZpZyAgICAgICAgfCAgMTAg KysKPiAgZHJpdmVycy9ncHUvZHJtL2FyYy9NYWtlZmlsZSAgICAgICB8ICAgMiArCj4gIGRyaXZl cnMvZ3B1L2RybS9hcmMvYXJjcGd1LmggICAgICAgfCAgNTAgKysrKysrKwo+ICBkcml2ZXJzL2dw dS9kcm0vYXJjL2FyY3BndV9jcnRjLmMgIHwgMjc0ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL2FyYy9hcmNwZ3VfZHJ2LmMgICB8IDI1MiAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9hcmMv YXJjcGd1X2ZiZGV2LmMgfCAyNDUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4g IGRyaXZlcnMvZ3B1L2RybS9hcmMvYXJjcGd1X2hkbWkuYyAgfCAyMDcgKysrKysrKysrKysrKysr KysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vYXJjL2FyY3BndV9yZWdzLmggIHwgIDM2 ICsrKysrCj4gIDEwIGZpbGVzIGNoYW5nZWQsIDEwNzkgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FyYy9LY29uZmlnCj4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vYXJjL01ha2VmaWxlCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vYXJjL2FyY3BndS5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vYXJjL2FyY3BndV9jcnRjLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9hcmMvYXJjcGd1X2Rydi5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vYXJjL2FyY3BndV9mYmRldi5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vYXJjL2FyY3BndV9oZG1pLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9hcmMvYXJjcGd1X3JlZ3MuaAo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v S2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gaW5kZXggZjJhNzRkMC4uOWU0ZjJm MSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9LY29uZmlnCj4gQEAgLTI4MSwzICsyODEsNSBAQCBzb3VyY2UgImRyaXZlcnMvZ3B1 L2RybS9pbXgvS2NvbmZpZyIKPiAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0vdmM0L0tjb25maWci Cj4gIAo+ICBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L0tjb25maWciCj4gKwo+ICtz b3VyY2UgImRyaXZlcnMvZ3B1L2RybS9hcmMvS2NvbmZpZyIKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gaW5kZXggNmVi OTRmYy4uYzMzOGQwNCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiBAQCAtNzgsMyArNzgsNCBAQCBvYmoteQkJ CSs9IHBhbmVsLwo+ICBvYmoteQkJCSs9IGJyaWRnZS8KPiAgb2JqLSQoQ09ORklHX0RSTV9GU0xf RENVKSArPSBmc2wtZGN1Lwo+ICBvYmotJChDT05GSUdfRFJNX0VUTkFWSVYpICs9IGV0bmF2aXYv Cj4gK29iai0kKENPTkZJR19EUk1fQVJDUEdVKSs9IGFyYy8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2FyYy9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL2FyYy9LY29uZmlnCj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5mOWExM2I2Cj4gLS0tIC9kZXYvbnVs bAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hcmMvS2NvbmZpZwo+IEBAIC0wLDAgKzEsMTAgQEAK PiArY29uZmlnIERSTV9BUkNQR1UKPiArCXRyaXN0YXRlICJBUkMgUEdVIgo+ICsJZGVwZW5kcyBv biBEUk0gJiYgT0YKPiArCXNlbGVjdCBEUk1fS01TX0NNQV9IRUxQRVIKPiArCXNlbGVjdCBEUk1f S01TX0ZCX0hFTFBFUgo+ICsJc2VsZWN0IERSTV9LTVNfSEVMUEVSCj4gKwloZWxwCj4gKwkgIENo b29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhbiBBUkMgUEdVIGNvbnRyb2xsZXIuCj4gKwo+ ICsJICBJZiBNIGlzIHNlbGVjdGVkIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYXJjcGd1Lgo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJjL01ha2VmaWxlIGIvZHJpdmVycy9ncHUv ZHJtL2FyYy9NYWtlZmlsZQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4u NzM2ZWU2Zgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYXJjL01ha2Vm aWxlCj4gQEAgLTAsMCArMSwyIEBACj4gK2FyY3BndS15IDo9IGFyY3BndV9jcnRjLm8gYXJjcGd1 X2hkbWkubyBhcmNwZ3VfZmJkZXYubyBhcmNwZ3VfZHJ2Lm8KPiArb2JqLSQoQ09ORklHX0RSTV9B UkNQR1UpICs9IGFyY3BndS5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hcmMvYXJj cGd1LmggYi9kcml2ZXJzL2dwdS9kcm0vYXJjL2FyY3BndS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCAwMDAwMDAwLi44NjU3NGI2Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9hcmMvYXJjcGd1LmgKPiBAQCAtMCwwICsxLDUwIEBACj4gKy8qCj4gKyAqIEFS QyBQR1UgRFJNIGRyaXZlci4KPiArICoKPiArICogQ29weXJpZ2h0IChDKSAyMDE2IFN5bm9wc3lz LCBJbmMuICh3d3cuc3lub3BzeXMuY29tKQo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsgKiBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNp b24gMiBhcwo+ICsgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K PiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiArICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICovCj4gKwo+ICsj aWZuZGVmIF9BUkNQR1VfSF8KPiArI2RlZmluZSBfQVJDUEdVX0hfCj4gKwo+ICtzdHJ1Y3QgYXJj cGd1X2RybV9wcml2YXRlIHsKPiArCXZvaWQgX19pb21lbQkJKnJlZ3M7Cj4gKwlzdHJ1Y3QgY2xr CQkqY2xrOwo+ICsJc3RydWN0IGRybV9mYmRldl9jbWEJKmZiZGV2Owo+ICsJc3RydWN0IGRybV9m cmFtZWJ1ZmZlcgkqZmI7Cj4gKwlzdHJ1Y3QgbGlzdF9oZWFkCWV2ZW50X2xpc3Q7Cj4gKwlzdHJ1 Y3QgZHJtX2NydGMJCWNydGM7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lCSpwbGFuZTsKPiArfTsKPiAr Cj4gKyNkZWZpbmUgY3J0Y190b19hcmNwZ3VfcHJpdih4KSBjb250YWluZXJfb2YoeCwgc3RydWN0 IGFyY3BndV9kcm1fcHJpdmF0ZSwgY3J0YykKPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNf cGd1X3dyaXRlKHN0cnVjdCBhcmNwZ3VfZHJtX3ByaXZhdGUgKmFyY3BndSwKPiArCQkJCSB1bnNp Z25lZCBpbnQgcmVnLCB1MzIgdmFsdWUpCj4gK3sKPiArCWlvd3JpdGUzMih2YWx1ZSwgYXJjcGd1 LT5yZWdzICsgcmVnKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB1MzIgYXJjX3BndV9yZWFk KHN0cnVjdCBhcmNwZ3VfZHJtX3ByaXZhdGUgKmFyY3BndSwKPiArCQkJICAgICAgIHVuc2lnbmVk IGludCByZWcpCj4gK3sKPiArCXJldHVybiBpb3JlYWQzMihhcmNwZ3UtPnJlZ3MgKyByZWcpOwo+ ICt9Cj4gKwo+ICtpbnQgYXJjX3BndV9zZXR1cF9jcnRjKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp Owo+ICtpbnQgYXJjcGd1X2RybV9oZG1pX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3Ry dWN0IGRldmljZV9ub2RlICpucCk7Cj4gK3N0cnVjdCBkcm1fZmJkZXZfY21hICphcmNwZ3VfZmJk ZXZfY21hX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiArCXVuc2lnbmVkIGludCBwcmVm ZXJyZWRfYnBwLCB1bnNpZ25lZCBpbnQgbnVtX2NydGMsCj4gKwl1bnNpZ25lZCBpbnQgbWF4X2Nv bm5fY291bnQpOwo+ICsKPiArI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9h cmMvYXJjcGd1X2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9hcmMvYXJjcGd1X2NydGMuYwo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uMGZlNWM4YQo+IC0tLSAvZGV2L251 bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYXJjL2FyY3BndV9jcnRjLmMKPiBAQCAtMCwwICsx LDI3NCBAQAo+ICsvKgo+ICsgKiBBUkMgUEdVIERSTSBkcml2ZXIuCj4gKyAqCj4gKyAqIENvcHly aWdodCAoQykgMjAxNiBTeW5vcHN5cywgSW5jLiAod3d3LnN5bm9wc3lzLmNvbSkKPiArICoKPiAr ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKPiArICogcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsg KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu Cj4gKyAqCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9m Yl9jbWFfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+Cj4g KyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8bGludXgvY2xr Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL3NpbXBsZWZiLmg+Cj4gKwo+ICsj aW5jbHVkZSAiYXJjcGd1LmgiCj4gKyNpbmNsdWRlICJhcmNwZ3VfcmVncy5oIgo+ICsKPiArI2Rl ZmluZSBFTkNPREVfUEdVX1hZKHgsIHkpCSgoKCh4KSAtIDEpIDw8IDE2KSB8ICgoeSkgLSAxKSkK PiArCj4gK3N0YXRpYyBzdHJ1Y3Qgc2ltcGxlZmJfZm9ybWF0IHN1cHBvcnRlZF9mb3JtYXRzW10g PSB7Cj4gKwl7ICJyNWc2YjUiLCAxNiwgezExLCA1fSwgezUsIDZ9LCB7MCwgNX0sIHswLCAwfSwg RFJNX0ZPUk1BVF9SR0I1NjUgfSwKPiArCXsgInI4ZzhiOCIsIDI0LCB7MTYsIDh9LCB7OCwgOH0s IHswLCA4fSwgezAsIDB9LCBEUk1fRk9STUFUX1JHQjg4OCB9LAo+ICt9Owo+ICsKPiArc3RhdGlj IHZvaWQgYXJjX3BndV9zZXRfcHhsX2ZtdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gK3sKPiAr CXN0cnVjdCBhcmNwZ3VfZHJtX3ByaXZhdGUgKmFyY3BndSA9IGNydGNfdG9fYXJjcGd1X3ByaXYo Y3J0Yyk7Cj4gKwl1aW50MzJfdCBwaXhlbF9mb3JtYXQgPSBjcnRjLT5wcmltYXJ5LT5zdGF0ZS0+ ZmItPnBpeGVsX2Zvcm1hdDsKPiArCXN0cnVjdCBzaW1wbGVmYl9mb3JtYXQgKmZvcm1hdCA9IE5V TEw7Cj4gKwlpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdXBwb3J0 ZWRfZm9ybWF0cyk7IGkrKykgewo+ICsJCWlmIChzdXBwb3J0ZWRfZm9ybWF0c1tpXS5mb3VyY2Mg PT0gcGl4ZWxfZm9ybWF0KQo+ICsJCQlmb3JtYXQgPSAmc3VwcG9ydGVkX2Zvcm1hdHNbaV07Cj4g Kwl9Cj4gKwo+ICsJaWYgKFdBUk5fT04oIWZvcm1hdCkpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWlm IChmb3JtYXQtPmZvdXJjYyA9PSBEUk1fRk9STUFUX1JHQjg4OCkKPiArCQlhcmNfcGd1X3dyaXRl KGFyY3BndSwgQVJDUEdVX1JFR19DVFJMLAo+ICsJCQkgICAgICBhcmNfcGd1X3JlYWQoYXJjcGd1 LCBBUkNQR1VfUkVHX0NUUkwpIHwKPiArCQkJCQkgICBBUkNQR1VfTU9ERV9SR0I4ODhfTUFTSyk7 Cj4gKwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGFyY19w Z3VfY3J0Y19mdW5jcyA9IHsKPiArCS5kZXN0cm95ID0gZHJtX2NydGNfY2xlYW51cCwKPiArCS5z ZXRfY29uZmlnID0gZHJtX2F0b21pY19oZWxwZXJfc2V0X2NvbmZpZywKPiArCS5wYWdlX2ZsaXAg PSBkcm1fYXRvbWljX2hlbHBlcl9wYWdlX2ZsaXAsCj4gKwkucmVzZXQgPSBkcm1fYXRvbWljX2hl bHBlcl9jcnRjX3Jlc2V0LAo+ICsJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWlj X2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZSwKPiArCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9 IGRybV9hdG9taWNfaGVscGVyX2NydGNfZGVzdHJveV9zdGF0ZSwKPiArfTsKPiArCj4gK3N0YXRp YyB2b2lkIGFyY19wZ3VfY3J0Y19tb2RlX3NldF9ub2ZiKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykK PiArewo+ICsJc3RydWN0IGFyY3BndV9kcm1fcHJpdmF0ZSAqYXJjcGd1ID0gY3J0Y190b19hcmNw Z3VfcHJpdihjcnRjKTsKPiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptID0gJmNydGMtPnN0 YXRlLT5hZGp1c3RlZF9tb2RlOwo+ICsKPiArCWFyY19wZ3Vfd3JpdGUoYXJjcGd1LCBBUkNQR1Vf UkVHX0ZNVCwKPiArCQkgICAgICBFTkNPREVfUEdVX1hZKG0tPmNydGNfaHRvdGFsLCBtLT5jcnRj X3Z0b3RhbCkpOwo+ICsKPiArCWFyY19wZ3Vfd3JpdGUoYXJjcGd1LCBBUkNQR1VfUkVHX0hTWU5D LAo+ICsJCSAgICAgIEVOQ09ERV9QR1VfWFkobS0+Y3J0Y19oc3luY19zdGFydCAtIG0tPmNydGNf aGRpc3BsYXksCj4gKwkJCQkgICAgbS0+Y3J0Y19oc3luY19lbmQgLSBtLT5jcnRjX2hkaXNwbGF5 KSk7Cj4gKwo+ICsJYXJjX3BndV93cml0ZShhcmNwZ3UsIEFSQ1BHVV9SRUdfVlNZTkMsCj4gKwkJ ICAgICAgRU5DT0RFX1BHVV9YWShtLT5jcnRjX3ZzeW5jX3N0YXJ0IC0gbS0+Y3J0Y192ZGlzcGxh eSwKPiArCQkJCSAgICBtLT5jcnRjX3ZzeW5jX2VuZCAtIG0tPmNydGNfdmRpc3BsYXkpKTsKPiAr Cj4gKwlhcmNfcGd1X3dyaXRlKGFyY3BndSwgQVJDUEdVX1JFR19BQ1RJVkUsCj4gKwkJICAgICAg RU5DT0RFX1BHVV9YWShtLT5jcnRjX2hibGFua19lbmQgLSBtLT5jcnRjX2hibGFua19zdGFydCwK PiArCQkJCSAgICBtLT5jcnRjX3ZibGFua19lbmQgLSBtLT5jcnRjX3ZibGFua19zdGFydCkpOwo+ ICsKPiArCWFyY19wZ3Vfd3JpdGUoYXJjcGd1LCBBUkNQR1VfUkVHX1NUUklERSwgMCk7Cj4gKwlh cmNfcGd1X3dyaXRlKGFyY3BndSwgQVJDUEdVX1JFR19TVEFSVF9TRVQsIDEpOwo+ICsKPiArCWFy Y19wZ3Vfc2V0X3B4bF9mbXQoY3J0Yyk7Cj4gKwo+ICsJY2xrX3NldF9yYXRlKGFyY3BndS0+Y2xr LCBtLT5jcnRjX2Nsb2NrICogMTAwMCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGFyY19wZ3Vf Y3J0Y19lbmFibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICt7Cj4gKwlzdHJ1Y3QgYXJjcGd1 X2RybV9wcml2YXRlICphcmNwZ3UgPSBjcnRjX3RvX2FyY3BndV9wcml2KGNydGMpOwo+ICsKPiAr CWNsa19wcmVwYXJlX2VuYWJsZShhcmNwZ3UtPmNsayk7Cj4gKwlhcmNfcGd1X3dyaXRlKGFyY3Bn dSwgQVJDUEdVX1JFR19DVFJMLAo+ICsJCSAgICAgIGFyY19wZ3VfcmVhZChhcmNwZ3UsIEFSQ1BH VV9SRUdfQ1RSTCkgfAo+ICsJCSAgICAgIEFSQ1BHVV9DVFJMX0VOQUJMRV9NQVNLKTsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgYXJjX3BndV9jcnRjX2Rpc2FibGUoc3RydWN0IGRybV9jcnRjICpj cnRjKQo+ICt7Cj4gKwlzdHJ1Y3QgYXJjcGd1X2RybV9wcml2YXRlICphcmNwZ3UgPSBjcnRjX3Rv X2FyY3BndV9wcml2KGNydGMpOwo+ICsKPiArCWlmICghY3J0Yy0+cHJpbWFyeS0+ZmIpCj4gKwkJ cmV0dXJuOwo+ICsKPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShhcmNwZ3UtPmNsayk7Cj4gKwlh cmNfcGd1X3dyaXRlKGFyY3BndSwgQVJDUEdVX1JFR19DVFJMLAo+ICsJCQkgICAgICBhcmNfcGd1 X3JlYWQoYXJjcGd1LCBBUkNQR1VfUkVHX0NUUkwpICYKPiArCQkJICAgICAgfkFSQ1BHVV9DVFJM X0VOQUJMRV9NQVNLKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBhcmNfcGd1X2NydGNfYXRvbWlj X2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiArCQkJCSAgICAgc3RydWN0IGRybV9jcnRj X3N0YXRlICpzdGF0ZSkKPiArewo+ICsJc3RydWN0IGFyY3BndV9kcm1fcHJpdmF0ZSAqYXJjcGd1 ID0gY3J0Y190b19hcmNwZ3VfcHJpdihjcnRjKTsKPiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlID0gJnN0YXRlLT5hZGp1c3RlZF9tb2RlOwo+ICsJbG9uZyByYXRlLCBjbGtfcmF0ZSA9 IG1vZGUtPmNsb2NrICogMTAwMDsKPiArCj4gKwlyYXRlID0gY2xrX3JvdW5kX3JhdGUoYXJjcGd1 LT5jbGssIGNsa19yYXRlKTsKPiArCWlmIChyYXRlICE9IGNsa19yYXRlKQo+ICsJCXJldHVybiAt RUlOVkFMOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhcmNfcGd1 X2NydGNfYXRvbWljX2JlZ2luKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiArCQkJCSAgICAgIHN0 cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCj4gK3sKPiArCXN0cnVjdCBhcmNwZ3VfZHJtX3By aXZhdGUgKmFyY3BndSA9IGNydGNfdG9fYXJjcGd1X3ByaXYoY3J0Yyk7Cj4gKwl1bnNpZ25lZCBs b25nIGZsYWdzOwo+ICsKPiArCWlmIChjcnRjLT5zdGF0ZS0+ZXZlbnQpIHsKPiArCQlzdHJ1Y3Qg ZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpldmVudCA9IGNydGMtPnN0YXRlLT5ldmVudDsKPiAr Cj4gKwkJY3J0Yy0+c3RhdGUtPmV2ZW50ID0gTlVMTDsKPiArCQlldmVudC0+cGlwZSA9IGRybV9j cnRjX2luZGV4KGNydGMpOwo+ICsKPiArCQlXQVJOX09OKGRybV9jcnRjX3ZibGFua19nZXQoY3J0 YykgIT0gMCk7Cj4gKwo+ICsJCXNwaW5fbG9ja19pcnFzYXZlKCZjcnRjLT5kZXYtPmV2ZW50X2xv Y2ssIGZsYWdzKTsKPiArCQlsaXN0X2FkZF90YWlsKCZldmVudC0+YmFzZS5saW5rLCAmYXJjcGd1 LT5ldmVudF9saXN0KTsKPiArCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcnRjLT5kZXYtPmV2 ZW50X2xvY2ssIGZsYWdzKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYXJjX3BndV9j cnRjX2F0b21pY19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gKwkJCQkgICAgICBzdHJ1 Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlKQo+ICt7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGFy Y19wZ3VfY3J0Y19tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiArCQkJCSAgICBj b25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKPiArCQkJCSAgICBzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKPiArewo+ICsJcmV0dXJuIHRydWU7Cj4gK30K CllvdSBjYW4gZHJvcCB0aGUgYWJvdmUgMiBkdW1teSBmdW5jdGlvbnMuCgo+ICsKPiArc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgYXJjX3BndV9jcnRjX2hlbHBlcl9m dW5jcyA9IHsKPiArCS5tb2RlX2ZpeHVwCT0gYXJjX3BndV9jcnRjX21vZGVfZml4dXAsCj4gKwku bW9kZV9zZXQJPSBkcm1faGVscGVyX2NydGNfbW9kZV9zZXQsCj4gKwkubW9kZV9zZXRfYmFzZQk9 IGRybV9oZWxwZXJfY3J0Y19tb2RlX3NldF9iYXNlLAo+ICsJLm1vZGVfc2V0X25vZmIJPSBhcmNf cGd1X2NydGNfbW9kZV9zZXRfbm9mYiwKPiArCS5lbmFibGUJCT0gYXJjX3BndV9jcnRjX2VuYWJs ZSwKPiArCS5kaXNhYmxlCT0gYXJjX3BndV9jcnRjX2Rpc2FibGUsCj4gKwkucHJlcGFyZQk9IGFy Y19wZ3VfY3J0Y19kaXNhYmxlLAo+ICsJLmNvbW1pdAkJPSBhcmNfcGd1X2NydGNfZW5hYmxlLAo+ ICsJLmF0b21pY19jaGVjawk9IGFyY19wZ3VfY3J0Y19hdG9taWNfY2hlY2ssCj4gKwkuYXRvbWlj X2JlZ2luCT0gYXJjX3BndV9jcnRjX2F0b21pY19iZWdpbiwKPiArCS5hdG9taWNfZmx1c2gJPSBh cmNfcGd1X2NydGNfYXRvbWljX2ZsdXNoLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBhcmNfcGd1 X3BsYW5lX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiArCQkJCSAgICAg IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQo+ICt7Cj4gKwlyZXR1cm4gMDsKPiArfQoK WW91IGRvbid0IG5lZWQgZHVtbXkgZnVuY3Rpb25zIGZvciB0aGlzLgoKPiArCj4gK3N0YXRpYyB2 b2lkIGFyY19wZ3VfcGxhbmVfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwK PiArCQkJCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKPiArewo+ICsJc3RydWN0IGFy Y3BndV9kcm1fcHJpdmF0ZSAqYXJjcGd1Owo+ICsJc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAq Z2VtOwo+ICsKPiArCWlmICghcGxhbmUtPnN0YXRlLT5jcnRjIHx8ICFwbGFuZS0+c3RhdGUtPmZi KQo+ICsJCXJldHVybjsKPiArCj4gKwlhcmNwZ3UgPSBjcnRjX3RvX2FyY3BndV9wcml2KHBsYW5l LT5zdGF0ZS0+Y3J0Yyk7Cj4gKwlnZW0gPSBkcm1fZmJfY21hX2dldF9nZW1fb2JqKHBsYW5lLT5z dGF0ZS0+ZmIsIDApOwo+ICsJYXJjX3BndV93cml0ZShhcmNwZ3UsIEFSQ1BHVV9SRUdfQlVGMF9B RERSLCBnZW0tPnBhZGRyKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxh bmVfaGVscGVyX2Z1bmNzIGFyY19wZ3VfcGxhbmVfaGVscGVyX2Z1bmNzID0gewo+ICsJLnByZXBh cmVfZmIgPSBOVUxMLAo+ICsJLmNsZWFudXBfZmIgPSBOVUxMLAo+ICsJLmF0b21pY19jaGVjayA9 IGFyY19wZ3VfcGxhbmVfYXRvbWljX2NoZWNrLAo+ICsJLmF0b21pY191cGRhdGUgPSBhcmNfcGd1 X3BsYW5lX2F0b21pY191cGRhdGUsCj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCBhcmNfcGd1X3Bs YW5lX2Rlc3Ryb3koc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCj4gK3sKPiArCWRybV9wbGFuZV9o ZWxwZXJfZGlzYWJsZShwbGFuZSk7Cj4gKwlkcm1fcGxhbmVfY2xlYW51cChwbGFuZSk7Cj4gK30K PiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGFyY19wZ3VfcGxhbmVf ZnVuY3MgPSB7Cj4gKwkudXBkYXRlX3BsYW5lCQk9IGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9w bGFuZSwKPiArCS5kaXNhYmxlX3BsYW5lCQk9IGRybV9hdG9taWNfaGVscGVyX2Rpc2FibGVfcGxh bmUsCj4gKwkuZGVzdHJveQkJPSBhcmNfcGd1X3BsYW5lX2Rlc3Ryb3ksCj4gKwkucmVzZXQJCQk9 IGRybV9hdG9taWNfaGVscGVyX3BsYW5lX3Jlc2V0LAo+ICsJLmF0b21pY19kdXBsaWNhdGVfc3Rh dGUgPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCj4gKwkuYXRvbWlj X2Rlc3Ryb3lfc3RhdGUJPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlLAo+ ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBkcm1fcGxhbmUgKmFyY19wZ3VfcGxhbmVfaW5pdChz dHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ICt7Cj4gKwlzdHJ1Y3QgYXJjcGd1X2RybV9wcml2YXRl ICphcmNwZ3UgPSBkcm0tPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUg PSBOVUxMOwo+ICsJdTMyIGZvcm1hdHNbQVJSQVlfU0laRShzdXBwb3J0ZWRfZm9ybWF0cyldLCBp Owo+ICsJaW50IHJldDsKPiArCj4gKwlwbGFuZSA9IGRldm1fa3phbGxvYyhkcm0tPmRldiwgc2l6 ZW9mKCpwbGFuZSksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFwbGFuZSkKPiArCQlyZXR1cm4gRVJS X1BUUigtRU5PTUVNKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdXBwb3J0 ZWRfZm9ybWF0cyk7IGkrKykKPiArCQlmb3JtYXRzW2ldID0gc3VwcG9ydGVkX2Zvcm1hdHNbaV0u Zm91cmNjOwo+ICsKPiArCXJldCA9IGRybV91bml2ZXJzYWxfcGxhbmVfaW5pdChkcm0sIHBsYW5l LCAweGZmLCAmYXJjX3BndV9wbGFuZV9mdW5jcywKPiArCQkJCSAgICAgICBmb3JtYXRzLCBBUlJB WV9TSVpFKGZvcm1hdHMpLAo+ICsJCQkJICAgICAgIERSTV9QTEFORV9UWVBFX1BSSU1BUlksIE5V TEwpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICsKPiArCWRybV9w bGFuZV9oZWxwZXJfYWRkKHBsYW5lLCAmYXJjX3BndV9wbGFuZV9oZWxwZXJfZnVuY3MpOwo+ICsJ YXJjcGd1LT5wbGFuZSA9IHBsYW5lOwo+ICsKPiArCXJldHVybiBwbGFuZTsKPiArfQo+ICsKPiAr dm9pZCBhcmNfcGd1X2NydGNfc3VzcGVuZChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gK3sKPiAr CWFyY19wZ3VfY3J0Y19kaXNhYmxlKGNydGMpOwo+ICt9Cj4gKwo+ICt2b2lkIGFyY19wZ3VfY3J0 Y19yZXN1bWUoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICt7Cj4gKwlhcmNfcGd1X2NydGNfZW5h YmxlKGNydGMpOwo+ICt9CgpQbGVhc2UgdXNlIHRoZSBhdG9taWMgc3VzcGVuZC9yZXN1bWUgaGVs cGVyIHRoYXQgVGhpZXJyeSByZWNlbnRseSBtZXJnZWQuClNlZSB0aGUga2VybmVsZG9jIG9mIGRy bV9hdG9taWNfaGVscGVyX3N1c3BlbmQgYXMgYSBzdGFydGluZyBwb2ludCBmb3IgaG93Cml0IHdv cmtzIGFuZCBob3cgaXQncyBzdXBwb3NlZCB0byBiZSB1c2VkLgoKPiArCj4gK2ludCBhcmNfcGd1 X3NldHVwX2NydGMoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiArewo+ICsJc3RydWN0IGFyY3Bn dV9kcm1fcHJpdmF0ZSAqYXJjcGd1ID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBkcm1f cGxhbmUgKnByaW1hcnk7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXByaW1hcnkgPSBhcmNfcGd1X3Bs YW5lX2luaXQoZHJtKTsKPiArCWlmIChJU19FUlIocHJpbWFyeSkpCj4gKwkJcmV0dXJuIFBUUl9F UlIocHJpbWFyeSk7Cj4gKwo+ICsJcmV0ID0gZHJtX2NydGNfaW5pdF93aXRoX3BsYW5lcyhkcm0s ICZhcmNwZ3UtPmNydGMsIHByaW1hcnksIE5VTEwsCj4gKwkJCQkJJmFyY19wZ3VfY3J0Y19mdW5j cywgTlVMTCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJYXJjX3BndV9wbGFuZV9kZXN0cm95KHByaW1h cnkpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJZHJtX2NydGNfaGVscGVyX2FkZCgm YXJjcGd1LT5jcnRjLCAmYXJjX3BndV9jcnRjX2hlbHBlcl9mdW5jcyk7Cj4gKwlyZXR1cm4gMDsK PiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJjL2FyY3BndV9kcnYuYyBiL2Ry aXZlcnMvZ3B1L2RybS9hcmMvYXJjcGd1X2Rydi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp bmRleCAwMDAwMDAwLi5kNDc0ODFkCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9hcmMvYXJjcGd1X2Rydi5jCj4gQEAgLTAsMCArMSwyNTIgQEAKPiArLyoKPiArICogQVJD IFBHVSBEUk0gZHJpdmVyLgo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTYgU3lub3BzeXMs IEluYy4gKHd3dy5zeW5vcHN5cy5jb20pCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lv biAyIGFzCj4gKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKi8KPiArCj4gKyNp bmNsdWRlIDxsaW51eC9jbGsuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4K PiArI2luY2x1ZGUgPGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2Ry bV9nZW1fY21hX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+ Cj4gKwo+ICsjaW5jbHVkZSAiYXJjcGd1LmgiCj4gKyNpbmNsdWRlICJhcmNwZ3VfcmVncy5oIgo+ ICsKPiArc3RhdGljIHZvaWQgYXJjcGd1X2ZiX291dHB1dF9wb2xsX2NoYW5nZWQoc3RydWN0IGRy bV9kZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IGFyY3BndV9kcm1fcHJpdmF0ZSAqYXJjcGd1 ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiArCj4gKwlpZiAoYXJjcGd1LT5mYmRldikKPiArCQlkcm1f ZmJkZXZfY21hX2hvdHBsdWdfZXZlbnQoYXJjcGd1LT5mYmRldik7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgYXJjcGd1X2F0b21pY19jb21taXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQkJ CSAgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsIGJvb2wgYXN5bmMpCj4gK3sKPiAr CXJldHVybiBkcm1fYXRvbWljX2hlbHBlcl9jb21taXQoZGV2LCBzdGF0ZSwgZmFsc2UpOwoKTm90 ZSB0aGF0IHRoaXMgaXNuJ3QgcmVhbGx5IGFzeW5jIGlmIHlvdSBldmVyIGdldCBhcm91bmQgdG8g aW1wbGVtZW50CmZlbmNlIHN1cHBvcnQgb3IgdmJsYW5rIHN1cHBvcnQuIEp1c3QgZnlpLgoKPiAr fQo+ICsKPiArc3RhdGljIHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgYXJjcGd1X2RybV9t b2RlY2ZnX2Z1bmNzID0gewo+ICsJLmZiX2NyZWF0ZSAgPSBkcm1fZmJfY21hX2NyZWF0ZSwKPiAr CS5vdXRwdXRfcG9sbF9jaGFuZ2VkID0gYXJjcGd1X2ZiX291dHB1dF9wb2xsX2NoYW5nZWQsCj4g KwkuYXRvbWljX2NoZWNrID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2ssCj4gKwkuYXRvbWljX2Nv bW1pdCA9IGFyY3BndV9hdG9taWNfY29tbWl0LAo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgYXJj cGd1X3NldHVwX21vZGVfY29uZmlnKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gK3sKPiArCWRy bV9tb2RlX2NvbmZpZ19pbml0KGRybSk7Cj4gKwlkcm0tPm1vZGVfY29uZmlnLm1pbl93aWR0aCA9 IDA7Cj4gKwlkcm0tPm1vZGVfY29uZmlnLm1pbl9oZWlnaHQgPSAwOwo+ICsJZHJtLT5tb2RlX2Nv bmZpZy5tYXhfd2lkdGggPSAxOTIwOwo+ICsJZHJtLT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0g MTA4MDsKPiArCWRybS0+bW9kZV9jb25maWcuZnVuY3MgPSAmYXJjcGd1X2RybV9tb2RlY2ZnX2Z1 bmNzOwo+ICt9Cj4gKwo+ICtpbnQgYXJjcGd1X2dlbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBz dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPiArewo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQg PSBkcm1fZ2VtX21tYXAoZmlscCwgdm1hKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsK PiArCj4gKwl2bWEtPnZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1fZ2V0X3BhZ2Vf cHJvdCh2bWEtPnZtX2ZsYWdzKSk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNv bnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXJjcGd1X2RybV9vcHMgPSB7Cj4gKwkub3duZXIg PSBUSElTX01PRFVMRSwKPiArCS5vcGVuID0gZHJtX29wZW4sCj4gKwkucmVsZWFzZSA9IGRybV9y ZWxlYXNlLAo+ICsJLnVubG9ja2VkX2lvY3RsID0gZHJtX2lvY3RsLAo+ICsjaWZkZWYgQ09ORklH X0NPTVBBVAo+ICsJLmNvbXBhdF9pb2N0bCA9IGRybV9jb21wYXRfaW9jdGwsCj4gKyNlbmRpZgo+ ICsJLnBvbGwgPSBkcm1fcG9sbCwKPiArCS5yZWFkID0gZHJtX3JlYWQsCj4gKwkubGxzZWVrID0g bm9fbGxzZWVrLAo+ICsJLm1tYXAgPSBhcmNwZ3VfZ2VtX21tYXAsCj4gK307Cj4gKwo+ICtzdGF0 aWMgdm9pZCBhcmNwZ3VfcHJlY2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IGRy bV9maWxlICpmaWxlKQo+ICt7Cj4gKwlzdHJ1Y3QgYXJjcGd1X2RybV9wcml2YXRlICphcmNwZ3Ug PSBkcm0tPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAq ZSwgKnQ7Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsKPiArCXNwaW5fbG9ja19pcnFzYXZl KCZkcm0tPmV2ZW50X2xvY2ssIGZsYWdzKTsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShl LCB0LCAmYXJjcGd1LT5ldmVudF9saXN0LCBiYXNlLmxpbmspIHsKPiArCQlpZiAoZS0+YmFzZS5m aWxlX3ByaXYgIT0gZmlsZSkKPiArCQkJY29udGludWU7Cj4gKwkJbGlzdF9kZWwoJmUtPmJhc2Uu bGluayk7Cj4gKwkJZS0+YmFzZS5kZXN0cm95KCZlLT5iYXNlKTsKPiArCX0KPiArCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJmRybS0+ZXZlbnRfbG9jaywgZmxhZ3MpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBhcmNwZ3VfbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gK3sKPiAr CXN0cnVjdCBhcmNwZ3VfZHJtX3ByaXZhdGUgKmFyY3BndSA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4g Kwo+ICsJZHJtX2ZiZGV2X2NtYV9yZXN0b3JlX21vZGUoYXJjcGd1LT5mYmRldik7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgYXJjcGd1X2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgdW5zaWdu ZWQgbG9uZyBmbGFncykKPiArewo+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGRy bS0+cGxhdGZvcm1kZXY7Cj4gKwlzdHJ1Y3QgYXJjcGd1X2RybV9wcml2YXRlICphcmNwZ3U7Cj4g KwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmVuY29kZXJfbm9kZTsKPiArCXN0cnVjdCByZXNvdXJjZSAq cmVzOwo+ICsJaW50IHJldDsKPiArCj4gKwlhcmNwZ3UgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRl diwgc2l6ZW9mKCphcmNwZ3UpLCBHRlBfS0VSTkVMKTsKPiArCWlmIChhcmNwZ3UgPT0gTlVMTCkK PiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlkcm0tPmRldl9wcml2YXRlID0gYXJjcGd1Owo+ ICsKPiArCWFyY3BndS0+Y2xrID0gZGV2bV9jbGtfZ2V0KGRybS0+ZGV2LCAicHhsY2xrIik7Cj4g KwlpZiAoSVNfRVJSKGFyY3BndS0+Y2xrKSkKPiArCQlyZXR1cm4gUFRSX0VSUihhcmNwZ3UtPmNs ayk7Cj4gKwo+ICsJSU5JVF9MSVNUX0hFQUQoJmFyY3BndS0+ZXZlbnRfbGlzdCk7Cj4gKwo+ICsJ YXJjcGd1X3NldHVwX21vZGVfY29uZmlnKGRybSk7Cj4gKwo+ICsJcmVzID0gcGxhdGZvcm1fZ2V0 X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKPiArCWFyY3BndS0+cmVncyA9IGRl dm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOwo+ICsJaWYgKElTX0VSUihhcmNw Z3UtPnJlZ3MpKSB7Cj4gKwkJZGV2X2Vycihkcm0tPmRldiwgIkNvdWxkIG5vdCByZW1hcCBJTyBt ZW1cbiIpOwo+ICsJCXJldHVybiBQVFJfRVJSKGFyY3BndS0+cmVncyk7Cj4gKwl9Cj4gKwo+ICsJ ZGV2X2luZm8oZHJtLT5kZXYsICJhcmNfcGd1IElEOiAweCV4XG4iLAo+ICsJCSBhcmNfcGd1X3Jl YWQoYXJjcGd1LCBBUkNQR1VfUkVHX0lEKSk7Cj4gKwo+ICsJaWYgKGRtYV9zZXRfbWFza19hbmRf Y29oZXJlbnQoZHJtLT5kZXYsIERNQV9CSVRfTUFTSygzMikpKQo+ICsJCXJldHVybiAtRU5PREVW Owo+ICsKPiArCWlmIChhcmNfcGd1X3NldHVwX2NydGMoZHJtKSA8IDApCj4gKwkJcmV0dXJuIC1F Tk9ERVY7Cj4gKwo+ICsJLyogZmluZCB0aGUgZW5jb2RlciBub2RlIGFuZCBpbml0aWFsaXplIGl0 ICovCj4gKwllbmNvZGVyX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKGRybS0+ZGV2LT5vZl9ub2Rl LCAiZW5jb2Rlci1zbGF2ZSIsIDApOwo+ICsJaWYgKCFlbmNvZGVyX25vZGUpIHsKPiArCQlkZXZf ZXJyKGRybS0+ZGV2LCAiZmFpbGVkIHRvIGdldCBhbiBlbmNvZGVyIHNsYXZlIG5vZGVcbiIpOwo+ ICsJCXJldHVybiAtRU5PREVWOwo+ICsJfQo+ICsKPiArCXJldCA9IGFyY3BndV9kcm1faGRtaV9p bml0KGRybSwgZW5jb2Rlcl9ub2RlKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7 Cj4gKwo+ICsJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRybSk7Cj4gKwlkcm1fa21zX2hlbHBlcl9w b2xsX2luaXQoZHJtKTsKPiArCj4gKwlhcmNwZ3UtPmZiZGV2ID0gYXJjcGd1X2ZiZGV2X2NtYV9p bml0KGRybSwgMTYsCj4gKwkJCQkJICAgICAgZHJtLT5tb2RlX2NvbmZpZy5udW1fY3J0YywKPiAr CQkJCQkgICAgICBkcm0tPm1vZGVfY29uZmlnLm51bV9jb25uZWN0b3IpOwo+ICsJaWYgKElTX0VS UihhcmNwZ3UtPmZiZGV2KSkgewo+ICsJCXJldCA9IFBUUl9FUlIoYXJjcGd1LT5mYmRldik7Cj4g KwkJYXJjcGd1LT5mYmRldiA9IE5VTEw7Cj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwl9Cj4gKwo+ ICsJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgYXJjcGd1KTsKPiArCXJldHVybiAwOwo+ICt9 Cj4gKwo+ICtpbnQgYXJjcGd1X3VubG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ICt7Cj4g KwlzdHJ1Y3QgYXJjcGd1X2RybV9wcml2YXRlICphcmNwZ3UgPSBkcm0tPmRldl9wcml2YXRlOwo+ ICsKPiArCWlmIChhcmNwZ3UtPmZiZGV2KSB7Cj4gKwkJZHJtX2ZiZGV2X2NtYV9maW5pKGFyY3Bn dS0+ZmJkZXYpOwo+ICsJCWFyY3BndS0+ZmJkZXYgPSBOVUxMOwo+ICsJfQo+ICsJZHJtX2ttc19o ZWxwZXJfcG9sbF9maW5pKGRybSk7Cj4gKwlkcm1fdmJsYW5rX2NsZWFudXAoZHJtKTsKPiArCWRy bV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRybSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBhcmNwZ3VfZHJtX2RyaXZlciA9IHsKPiArCS5kcml2 ZXJfZmVhdHVyZXMgPSBEUklWRVJfTU9ERVNFVCB8IERSSVZFUl9HRU0gfCBEUklWRVJfUFJJTUUg fAo+ICsJCQkgICBEUklWRVJfQVRPTUlDLAo+ICsJLnByZWNsb3NlID0gYXJjcGd1X3ByZWNsb3Nl LAo+ICsJLmxhc3RjbG9zZSA9IGFyY3BndV9sYXN0Y2xvc2UsCj4gKwkubmFtZSA9ICJkcm0tYXJj cGd1IiwKPiArCS5kZXNjID0gIkFSQyBQR1UgQ29udHJvbGxlciIsCj4gKwkuZGF0ZSA9ICIyMDE2 MDIxOSIsCj4gKwkubWFqb3IgPSAxLAo+ICsJLm1pbm9yID0gMCwKPiArCS5wYXRjaGxldmVsID0g MCwKPiArCS5mb3BzID0gJmFyY3BndV9kcm1fb3BzLAo+ICsJLmxvYWQgPSBhcmNwZ3VfbG9hZCwK PiArCS51bmxvYWQgPSBhcmNwZ3VfdW5sb2FkLAoKTG9hZCBhbmQgdW5sb2FkIGhvb2tzIGFyZSBk ZXByZWNhdGVkIChpdCdzIGEgY2xhc3NpYyBtaWRsYXllciBtaXN0YWtlKS4KUGxlYXNlIHVzZSBk cm1fZGV2X2FsbG9jL3JlZ2lzdGVyIHBhaXJzIGRpcmVjdGx5IGluc3RlYWQsIGFuZCBwdXQgeW91 cgpkZXZpY2Ugc2V0dXAgY29kZSBpbi1iZXR3ZWVuLiBTaW1pbGFyIGZvciB1bmxvYWRpbmcuIFRo ZXJlJ3MgYSBidW5jaCBvZgpleGFtcGxlIGRyaXZlcnMgY29udmVydGVkIGFscmVhZHkuCgo+ICsJ LmR1bWJfY3JlYXRlID0gZHJtX2dlbV9jbWFfZHVtYl9jcmVhdGUsCj4gKwkuZHVtYl9tYXBfb2Zm c2V0ID0gZHJtX2dlbV9jbWFfZHVtYl9tYXBfb2Zmc2V0LAo+ICsJLmR1bWJfZGVzdHJveSA9IGRy bV9nZW1fZHVtYl9kZXN0cm95LAo+ICsJLmdldF92YmxhbmtfY291bnRlciA9IGRybV92Ymxhbmtf bm9faHdfY291bnRlciwKPiArCS5wcmltZV9oYW5kbGVfdG9fZmQgPSBkcm1fZ2VtX3ByaW1lX2hh bmRsZV90b19mZCwKPiArCS5wcmltZV9mZF90b19oYW5kbGUgPSBkcm1fZ2VtX3ByaW1lX2ZkX3Rv X2hhbmRsZSwKPiArCS5nZW1fZnJlZV9vYmplY3QgPSBkcm1fZ2VtX2NtYV9mcmVlX29iamVjdCwK PiArCS5nZW1fdm1fb3BzID0gJmRybV9nZW1fY21hX3ZtX29wcywKPiArCS5nZW1fcHJpbWVfZXhw b3J0ID0gZHJtX2dlbV9wcmltZV9leHBvcnQsCj4gKwkuZ2VtX3ByaW1lX2ltcG9ydCA9IGRybV9n ZW1fcHJpbWVfaW1wb3J0LAo+ICsJLmdlbV9wcmltZV9nZXRfc2dfdGFibGUgPSBkcm1fZ2VtX2Nt YV9wcmltZV9nZXRfc2dfdGFibGUsCj4gKwkuZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSA9IGRy bV9nZW1fY21hX3ByaW1lX2ltcG9ydF9zZ190YWJsZSwKPiArCS5nZW1fcHJpbWVfdm1hcCA9IGRy bV9nZW1fY21hX3ByaW1lX3ZtYXAsCj4gKwkuZ2VtX3ByaW1lX3Z1bm1hcCA9IGRybV9nZW1fY21h X3ByaW1lX3Z1bm1hcCwKPiArCS5nZW1fcHJpbWVfbW1hcCA9IGRybV9nZW1fY21hX3ByaW1lX21t YXAsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IGFyY3BndV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlyZXR1cm4gZHJtX3BsYXRmb3JtX2luaXQoJmFyY3BndV9k cm1fZHJpdmVyLCBwZGV2KTsKCi4uLiBvciByZWFkIHRoZSBrZXJuZWxkb2Mgb2YgdGhpcyBmdW5j dGlvbiwgd2hpY2ggYWxzbyBleHBsYWlucyB3aGF0IHlvdQpzaG91bGQgZG8gOy0pCgo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGFyY3BndV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRl di0+ZGV2KTsKPiArCj4gKwlkcm1fcHV0X2Rldihkcm0pOwo+ICsKPiArCXJldHVybiAwOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhcmNwZ3Vfb2ZfdGFibGVb XSA9IHsKPiArCXsuY29tcGF0aWJsZSA9ICJzbnBzLGFyY3BndSJ9LAo+ICsJe30KPiArfTsKPiAr Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGFyY3BndV9vZl90YWJsZSk7Cj4gKwo+ICtzdGF0 aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhcmNwZ3VfcGxhdGZvcm1fZHJpdmVyID0gewo+ICsJ LnByb2JlID0gYXJjcGd1X3Byb2JlLAo+ICsJLnJlbW92ZSA9IGFyY3BndV9yZW1vdmUsCj4gKwku ZHJpdmVyID0gewo+ICsJCSAgIC5uYW1lID0gImFyY3BndSIsCj4gKwkJICAgLm93bmVyID0gVEhJ U19NT0RVTEUsCj4gKwkJICAgLm9mX21hdGNoX3RhYmxlID0gYXJjcGd1X29mX3RhYmxlLAo+ICsJ CSAgIH0sCj4gK307Cj4gKwo+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGFyY3BndV9wbGF0Zm9y bV9kcml2ZXIpOwo+ICsKPiArTU9EVUxFX0FVVEhPUigiQ2FybG9zIFBhbG1pbmhhIDxwYWxtaW5o YUBzeW5vcHN5cy5jb20iKTsKPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJBUkMgUEdVIERSTSBkcml2 ZXIiKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vYXJjL2FyY3BndV9mYmRldi5jIGIvZHJpdmVycy9ncHUvZHJtL2FyYy9hcmNwZ3VfZmJk ZXYuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNmY2NzcwNgo+IC0t LSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYXJjL2FyY3BndV9mYmRldi5jCj4g QEAgLTAsMCArMSwyNDUgQEAKPiArLyoKPiArICogQVJDIFBHVSBEUk0gZHJpdmVyLgo+ICsgKgo+ ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTYgU3lub3BzeXMsIEluYy4gKHd3dy5zeW5vcHN5cy5jb20p Cj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCj4gKyAqIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgo+ICsgKgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVs cGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2NtYV9oZWxwZXIuaD4KPiArI2luY2x1ZGUg PGRybS9kcm1fZmJfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVy Lmg+Cj4gKwo+ICtzdHJ1Y3QgZHJtX2ZiX2NtYSB7Cj4gKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy CQlmYjsKPiArCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QJKm9ials0XTsKPiArfTsKPiArCj4g K3N0cnVjdCBkcm1fZmJkZXZfY21hIHsKPiArCXN0cnVjdCBkcm1fZmJfaGVscGVyCWZiX2hlbHBl cjsKPiArCXN0cnVjdCBkcm1fZmJfY21hCSpmYjsKPiArfTsKPiArCj4gK3N0YXRpYyBpbmxpbmUg c3RydWN0IGRybV9mYmRldl9jbWEgKnRvX2ZiZGV2X2NtYShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAq aGVscGVyKQo+ICt7Cj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGhlbHBlciwgc3RydWN0IGRybV9m YmRldl9jbWEsIGZiX2hlbHBlcik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRy bV9mYl9jbWEgKnRvX2ZiX2NtYShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKPiArewo+ICsJ cmV0dXJuIGNvbnRhaW5lcl9vZihmYiwgc3RydWN0IGRybV9mYl9jbWEsIGZiKTsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgZHJtX2ZiX2NtYV9kZXN0cm95KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIg KmZiKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2ZiX2NtYSAqZmJfY21hID0gdG9fZmJfY21hKGZiKTsK PiArCWludCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKPiArCQlpZiAoZmJf Y21hLT5vYmpbaV0pCj4gKwkJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKCZm Yl9jbWEtPm9ialtpXS0+YmFzZSk7Cj4gKwl9Cj4gKwo+ICsJZHJtX2ZyYW1lYnVmZmVyX2NsZWFu dXAoZmIpOwo+ICsJa2ZyZWUoZmJfY21hKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcm1fZmJf Y21hX2NyZWF0ZV9oYW5kbGUoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4gKwlzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbGVfcHJpdiwgdW5zaWduZWQgaW50ICpoYW5kbGUpCj4gK3sKPiArCXN0cnVj dCBkcm1fZmJfY21hICpmYl9jbWEgPSB0b19mYl9jbWEoZmIpOwo+ICsKPiArCXJldHVybiBkcm1f Z2VtX2hhbmRsZV9jcmVhdGUoZmlsZV9wcml2LAo+ICsJCQkmZmJfY21hLT5vYmpbMF0tPmJhc2Us IGhhbmRsZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyX2Z1bmNz IGRybV9mYl9jbWFfZnVuY3MgPSB7Cj4gKwkuZGVzdHJveQk9IGRybV9mYl9jbWFfZGVzdHJveSwK PiArCS5jcmVhdGVfaGFuZGxlCT0gZHJtX2ZiX2NtYV9jcmVhdGVfaGFuZGxlLAo+ICt9Owo+ICsK PiArc3RhdGljIHN0cnVjdCBkcm1fZmJfY21hICpkcm1fZmJfY21hX2FsbG9jKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCj4gKwljb25zdCBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kMiAqbW9kZV9jbWQs Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICoqb2JqLAo+ICsJdW5zaWduZWQgaW50IG51 bV9wbGFuZXMpCj4gK3sKPiArCXN0cnVjdCBkcm1fZmJfY21hICpmYl9jbWE7Cj4gKwlpbnQgcmV0 Owo+ICsJaW50IGk7Cj4gKwo+ICsJZmJfY21hID0ga3phbGxvYyhzaXplb2YoKmZiX2NtYSksIEdG UF9LRVJORUwpOwo+ICsJaWYgKCFmYl9jbWEpCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7 Cj4gKwo+ICsJZHJtX2hlbHBlcl9tb2RlX2ZpbGxfZmJfc3RydWN0KCZmYl9jbWEtPmZiLCBtb2Rl X2NtZCk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IG51bV9wbGFuZXM7IGkrKykKPiArCQlmYl9j bWEtPm9ialtpXSA9IG9ialtpXTsKPiArCj4gKwlyZXQgPSBkcm1fZnJhbWVidWZmZXJfaW5pdChk ZXYsICZmYl9jbWEtPmZiLCAmZHJtX2ZiX2NtYV9mdW5jcyk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJ ZGV2X2VycihkZXYtPmRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIGZyYW1lYnVmZmVyOiAlZFxu IiwgcmV0KTsKPiArCQlrZnJlZShmYl9jbWEpOwo+ICsJCXJldHVybiBFUlJfUFRSKHJldCk7Cj4g Kwl9Cj4gKwo+ICsJcmV0dXJuIGZiX2NtYTsKPiArfQo+ICsKPiArLyoKPiArICogVGhpcyBmdW5j dGlvbiBpcyB0aGUgb25seSByZWFzb24gdG8gaGF2ZSBhIGNvcHkgb2YgZHJtX2ZiZGV2X2NtYV9p bml0KCkKPiArICogaGVyZSBpbiB0aGlzIGRyaXZlci4KPiArICoKPiArICogSW4gaXRzIHR1cm4g dGhpcyBtbWFwKCkgaXMgcmVxdWlyZWQgdG8gbWFyayB1c2VyLXNwYWNlIHBhZ2UgYXMgbm9uLWNh Y2hlZAo+ICsgKiBiZWNhdXNlIGl0IGlzIGp1c3QgYSBtaXJyb3Igb3IgcmVhbCBoYXJkd2FyZSBm cmFtZS1idWZmZXIuCj4gKyAqLwo+ICtzdGF0aWMgaW50IGFyY3BndV9tbWFwKHN0cnVjdCBmYl9p bmZvICppbmZvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPiArewo+ICsJdm1hLT52bV9w YWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtYS0+dm1fcGFnZV9wcm90KTsKPiArCXJldHVy biB2bV9pb21hcF9tZW1vcnkodm1hLCBpbmZvLT5maXguc21lbV9zdGFydCwgaW5mby0+Zml4LnNt ZW1fbGVuKTsKPiArfQoKVGhpcyBsb29rcyB2ZXJ5IGZpc2h5LCBubyBvdGhlciBkcm0gZHJpdmVy IGV2ZW4gYm90aGVycyB3aXRoIHByb3ZpZGluZyBhbgpmYl9tbWFwIGhvb2suIFdoYXQgZXhhY3Rs eSBkbyB5b3UgbmVlZCB0aGlzIGZvcj8gQXNzdW1pbmcgeW91J3ZlIG1tYXBwZWQKeW91ciBmYmNv biBkcm1fZnJhbWVidWZmZXIgY29ycmVjdGx5IGZvciBrZXJuZWwgYWNjZXNzIHRoaW5ncyBzaG91 bGQganVzdAp3b3JrIC4uLgoKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZmJfb3BzIGRybV9mYmRldl9j bWFfb3BzID0gewo+ICsJLm93bmVyCQk9IFRISVNfTU9EVUxFLAo+ICsJLmZiX21tYXAJPSBhcmNw Z3VfbW1hcCwKPiArCS5mYl9maWxscmVjdAk9IGRybV9mYl9oZWxwZXJfc3lzX2ZpbGxyZWN0LAo+ ICsJLmZiX2NvcHlhcmVhCT0gZHJtX2ZiX2hlbHBlcl9zeXNfY29weWFyZWEsCj4gKwkuZmJfaW1h Z2VibGl0CT0gZHJtX2ZiX2hlbHBlcl9zeXNfaW1hZ2VibGl0LAo+ICsJLmZiX2NoZWNrX3Zhcgk9 IGRybV9mYl9oZWxwZXJfY2hlY2tfdmFyLAo+ICsJLmZiX3NldF9wYXIJPSBkcm1fZmJfaGVscGVy X3NldF9wYXIsCj4gKwkuZmJfYmxhbmsJPSBkcm1fZmJfaGVscGVyX2JsYW5rLAo+ICsJLmZiX3Bh bl9kaXNwbGF5CT0gZHJtX2ZiX2hlbHBlcl9wYW5fZGlzcGxheSwKPiArCS5mYl9zZXRjbWFwCT0g ZHJtX2ZiX2hlbHBlcl9zZXRjbWFwLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBkcm1fZmJkZXZf Y21hX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqaGVscGVyLAo+ICsJc3RydWN0IGRybV9m Yl9oZWxwZXJfc3VyZmFjZV9zaXplICpzaXplcykKPiArewo+ICsJc3RydWN0IGRybV9mYmRldl9j bWEgKmZiZGV2X2NtYSA9IHRvX2ZiZGV2X2NtYShoZWxwZXIpOwo+ICsJc3RydWN0IGRybV9tb2Rl X2ZiX2NtZDIgbW9kZV9jbWQgPSB7IDAgfTsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBo ZWxwZXItPmRldjsKPiArCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKm9iajsKPiArCXN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiOwo+ICsJdW5zaWduZWQgaW50IGJ5dGVzX3Blcl9waXhlbDsK PiArCXVuc2lnbmVkIGxvbmcgb2Zmc2V0Owo+ICsJc3RydWN0IGZiX2luZm8gKmZiaTsKPiArCXNp emVfdCBzaXplOwo+ICsJaW50IHJldDsKPiArCj4gKwlEUk1fREVCVUdfS01TKCJzdXJmYWNlIHdp ZHRoKCVkKSwgaGVpZ2h0KCVkKSBhbmQgYnBwKCVkKVxuIiwKPiArCQkJc2l6ZXMtPnN1cmZhY2Vf d2lkdGgsIHNpemVzLT5zdXJmYWNlX2hlaWdodCwKPiArCQkJc2l6ZXMtPnN1cmZhY2VfYnBwKTsK PiArCj4gKwlieXRlc19wZXJfcGl4ZWwgPSBESVZfUk9VTkRfVVAoc2l6ZXMtPnN1cmZhY2VfYnBw LCA4KTsKPiArCj4gKwltb2RlX2NtZC53aWR0aCA9IHNpemVzLT5zdXJmYWNlX3dpZHRoOwo+ICsJ bW9kZV9jbWQuaGVpZ2h0ID0gc2l6ZXMtPnN1cmZhY2VfaGVpZ2h0Owo+ICsJbW9kZV9jbWQucGl0 Y2hlc1swXSA9IHNpemVzLT5zdXJmYWNlX3dpZHRoICogYnl0ZXNfcGVyX3BpeGVsOwo+ICsJbW9k ZV9jbWQucGl4ZWxfZm9ybWF0ID0gZHJtX21vZGVfbGVnYWN5X2ZiX2Zvcm1hdChzaXplcy0+c3Vy ZmFjZV9icHAsCj4gKwkJc2l6ZXMtPnN1cmZhY2VfZGVwdGgpOwo+ICsKPiArCXNpemUgPSBtb2Rl X2NtZC5waXRjaGVzWzBdICogbW9kZV9jbWQuaGVpZ2h0Owo+ICsJb2JqID0gZHJtX2dlbV9jbWFf Y3JlYXRlKGRldiwgc2l6ZSk7Cj4gKwlpZiAoSVNfRVJSKG9iaikpCj4gKwkJcmV0dXJuIC1FTk9N RU07Cj4gKwo+ICsJZmJpID0gZHJtX2ZiX2hlbHBlcl9hbGxvY19mYmkoaGVscGVyKTsKPiArCWlm IChJU19FUlIoZmJpKSkgewo+ICsJCXJldCA9IFBUUl9FUlIoZmJpKTsKPiArCQlnb3RvIGVycl9n ZW1fZnJlZV9vYmplY3Q7Cj4gKwl9Cj4gKwo+ICsJZmJkZXZfY21hLT5mYiA9IGRybV9mYl9jbWFf YWxsb2MoZGV2LCAmbW9kZV9jbWQsICZvYmosIDEpOwo+ICsJaWYgKElTX0VSUihmYmRldl9jbWEt PmZiKSkgewo+ICsJCWRldl9lcnIoZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgRFJNIGZy YW1lYnVmZmVyLlxuIik7Cj4gKwkJcmV0ID0gUFRSX0VSUihmYmRldl9jbWEtPmZiKTsKPiArCQln b3RvIGVycl9mYl9pbmZvX2Rlc3Ryb3k7Cj4gKwl9Cj4gKwo+ICsJZmIgPSAmZmJkZXZfY21hLT5m Yi0+ZmI7Cj4gKwloZWxwZXItPmZiID0gZmI7Cj4gKwo+ICsJZmJpLT5wYXIgPSBoZWxwZXI7Cj4g KwlmYmktPmZsYWdzID0gRkJJTkZPX0ZMQUdfREVGQVVMVDsKPiArCWZiaS0+ZmJvcHMgPSAmZHJt X2ZiZGV2X2NtYV9vcHM7Cj4gKwo+ICsJZHJtX2ZiX2hlbHBlcl9maWxsX2ZpeChmYmksIGZiLT5w aXRjaGVzWzBdLCBmYi0+ZGVwdGgpOwo+ICsJZHJtX2ZiX2hlbHBlcl9maWxsX3ZhcihmYmksIGhl bHBlciwgc2l6ZXMtPmZiX3dpZHRoLCBzaXplcy0+ZmJfaGVpZ2h0KTsKPiArCj4gKwlvZmZzZXQg PSBmYmktPnZhci54b2Zmc2V0ICogYnl0ZXNfcGVyX3BpeGVsOwo+ICsJb2Zmc2V0ICs9IGZiaS0+ dmFyLnlvZmZzZXQgKiBmYi0+cGl0Y2hlc1swXTsKPiArCj4gKwlkZXYtPm1vZGVfY29uZmlnLmZi X2Jhc2UgPSAocmVzb3VyY2Vfc2l6ZV90KW9iai0+cGFkZHI7Cj4gKwlmYmktPnNjcmVlbl9iYXNl ID0gb2JqLT52YWRkciArIG9mZnNldDsKPiArCWZiaS0+Zml4LnNtZW1fc3RhcnQgPSAodW5zaWdu ZWQgbG9uZykob2JqLT5wYWRkciArIG9mZnNldCk7Cj4gKwlmYmktPnNjcmVlbl9zaXplID0gc2l6 ZTsKPiArCWZiaS0+Zml4LnNtZW1fbGVuID0gc2l6ZTsKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4g K2Vycl9mYl9pbmZvX2Rlc3Ryb3k6Cj4gKwlkcm1fZmJfaGVscGVyX3JlbGVhc2VfZmJpKGhlbHBl cik7Cj4gK2Vycl9nZW1fZnJlZV9vYmplY3Q6Cj4gKwlkZXYtPmRyaXZlci0+Z2VtX2ZyZWVfb2Jq ZWN0KCZvYmotPmJhc2UpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1fZmJfaGVscGVyX2Z1bmNzIGRybV9mYl9jbWFfaGVscGVyX2Z1bmNzID0gewo+ ICsJLmZiX3Byb2JlID0gZHJtX2ZiZGV2X2NtYV9jcmVhdGUsCj4gK307Cj4gKwo+ICtzdHJ1Y3Qg ZHJtX2ZiZGV2X2NtYSAqYXJjcGd1X2ZiZGV2X2NtYV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCj4gKwl1bnNpZ25lZCBpbnQgcHJlZmVycmVkX2JwcCwgdW5zaWduZWQgaW50IG51bV9jcnRj LAo+ICsJdW5zaWduZWQgaW50IG1heF9jb25uX2NvdW50KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2Zi ZGV2X2NtYSAqZmJkZXZfY21hOwo+ICsJc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlcjsKPiAr CWludCByZXQ7Cj4gKwo+ICsJZmJkZXZfY21hID0ga3phbGxvYyhzaXplb2YoKmZiZGV2X2NtYSks IEdGUF9LRVJORUwpOwo+ICsJaWYgKCFmYmRldl9jbWEpIHsKPiArCQlkZXZfZXJyKGRldi0+ZGV2 LCAiRmFpbGVkIHRvIGFsbG9jYXRlIGRybSBmYmRldi5cbiIpOwo+ICsJCXJldHVybiBFUlJfUFRS KC1FTk9NRU0pOwo+ICsJfQo+ICsKPiArCWhlbHBlciA9ICZmYmRldl9jbWEtPmZiX2hlbHBlcjsK PiArCj4gKwlkcm1fZmJfaGVscGVyX3ByZXBhcmUoZGV2LCBoZWxwZXIsICZkcm1fZmJfY21hX2hl bHBlcl9mdW5jcyk7Cj4gKwo+ICsJcmV0ID0gZHJtX2ZiX2hlbHBlcl9pbml0KGRldiwgaGVscGVy LCBudW1fY3J0YywgbWF4X2Nvbm5fY291bnQpOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlkZXZf ZXJyKGRldi0+ZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgZHJtIGZiIGhlbHBlci5cbiIpOwo+ ICsJCWdvdG8gZXJyX2ZyZWU7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gZHJtX2ZiX2hlbHBlcl9zaW5n bGVfYWRkX2FsbF9jb25uZWN0b3JzKGhlbHBlcik7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCWRl dl9lcnIoZGV2LT5kZXYsICJGYWlsZWQgdG8gYWRkIGNvbm5lY3RvcnMuXG4iKTsKPiArCQlnb3Rv IGVycl9kcm1fZmJfaGVscGVyX2Zpbmk7Cj4gKwo+ICsJfQo+ICsKPiArCXJldCA9IGRybV9mYl9o ZWxwZXJfaW5pdGlhbF9jb25maWcoaGVscGVyLCBwcmVmZXJyZWRfYnBwKTsKPiArCWlmIChyZXQg PCAwKSB7Cj4gKwkJZGV2X2VycihkZXYtPmRldiwgIkZhaWxlZCB0byBzZXQgaW5pdGlhbCBodyBj b25maWd1cmF0aW9uLlxuIik7Cj4gKwkJZ290byBlcnJfZHJtX2ZiX2hlbHBlcl9maW5pOwo+ICsJ fQo+ICsKPiArCXJldHVybiBmYmRldl9jbWE7Cj4gKwo+ICtlcnJfZHJtX2ZiX2hlbHBlcl9maW5p Ogo+ICsJZHJtX2ZiX2hlbHBlcl9maW5pKGhlbHBlcik7Cj4gK2Vycl9mcmVlOgo+ICsJa2ZyZWUo ZmJkZXZfY21hKTsKPiArCj4gKwlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICt9Cj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9hcmMvYXJjcGd1X2hkbWkuYyBiL2RyaXZlcnMvZ3B1L2RybS9h cmMvYXJjcGd1X2hkbWkuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4u N2FkYWZhMwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYXJjL2FyY3Bn dV9oZG1pLmMKPiBAQCAtMCwwICsxLDIwNyBAQAo+ICsvKgo+ICsgKiBBUkMgUEdVIERSTSBkcml2 ZXIuCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAxNiBTeW5vcHN5cywgSW5jLiAod3d3LnN5 bm9wc3lzLmNvbSkKPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKPiArICog cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gKyAqCj4gKyAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGRybS9k cm1fY3J0Y19oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZW5jb2Rlcl9zbGF2ZS5oPgo+ ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cj4gKwo+ICsjaW5jbHVkZSAiYXJj cGd1LmgiCj4gKwo+ICtzdHJ1Y3QgYXJjcGd1X2RybV9jb25uZWN0b3Igewo+ICsJc3RydWN0IGRy bV9jb25uZWN0b3IgY29ubmVjdG9yOwo+ICsJc3RydWN0IGRybV9lbmNvZGVyX3NsYXZlICplbmNv ZGVyX3NsYXZlOwo+ICt9Owo+ICsKPiArc3RhdGljIGludCBhcmNwZ3VfZHJtX2Nvbm5lY3Rvcl9n ZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiArewo+ICsJY29uc3Qg c3RydWN0IGRybV9lbmNvZGVyX3NsYXZlX2Z1bmNzICpzZnVuY3M7Cj4gKwlzdHJ1Y3QgZHJtX2Vu Y29kZXJfc2xhdmUgKnNsYXZlOwo+ICsJc3RydWN0IGFyY3BndV9kcm1fY29ubmVjdG9yICpjb24g PQo+ICsJCWNvbnRhaW5lcl9vZihjb25uZWN0b3IsIHN0cnVjdCBhcmNwZ3VfZHJtX2Nvbm5lY3Rv ciwgY29ubmVjdG9yKTsKPiArCj4gKwlzbGF2ZSA9IGNvbi0+ZW5jb2Rlcl9zbGF2ZTsKPiArCWlm IChzbGF2ZSA9PSBOVUxMKSB7Cj4gKwkJZGV2X2Vycihjb25uZWN0b3ItPmRldi0+ZGV2LAo+ICsJ CQkiY29ubmVjdG9yX2dldF9tb2RlczogY2Fubm90IGZpbmQgc2xhdmUgZW5jb2RlciBmb3IgY29u bmVjdG9yXG4iKTsKPiArCQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwlzZnVuY3MgPSBzbGF2ZS0+ c2xhdmVfZnVuY3M7Cj4gKwlpZiAoc2Z1bmNzLT5nZXRfbW9kZXMgPT0gTlVMTCkKPiArCQlyZXR1 cm4gMDsKPiArCj4gKwlyZXR1cm4gc2Z1bmNzLT5nZXRfbW9kZXMoJnNsYXZlLT5iYXNlLCBjb25u ZWN0b3IpOwo+ICt9Cj4gKwo+ICtzdHJ1Y3QgZHJtX2VuY29kZXIgKgo+ICthcmNwZ3VfZHJtX2Nv bm5lY3Rvcl9iZXN0X2VuY29kZXIoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiAr ewo+ICsJc3RydWN0IGRybV9lbmNvZGVyX3NsYXZlICpzbGF2ZTsKPiArCXN0cnVjdCBhcmNwZ3Vf ZHJtX2Nvbm5lY3RvciAqY29uID0KPiArCQljb250YWluZXJfb2YoY29ubmVjdG9yLCBzdHJ1Y3Qg YXJjcGd1X2RybV9jb25uZWN0b3IsIGNvbm5lY3Rvcik7Cj4gKwo+ICsJc2xhdmUgPSBjb24tPmVu Y29kZXJfc2xhdmU7Cj4gKwlpZiAoc2xhdmUgPT0gTlVMTCkgewo+ICsJCWRldl9lcnIoY29ubmVj dG9yLT5kZXYtPmRldiwKPiArCQkJImNvbm5lY3Rvcl9iZXN0X2VuY29kZXI6IGNhbm5vdCBmaW5k IHNsYXZlIGVuY29kZXIgZm9yIGNvbm5lY3RvclxuIik7Cj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwl9 Cj4gKwo+ICsJcmV0dXJuICZzbGF2ZS0+YmFzZTsKPiArfQo+ICsKPiArc3RhdGljIGVudW0gZHJt X2Nvbm5lY3Rvcl9zdGF0dXMKPiArYXJjcGd1X2RybV9jb25uZWN0b3JfZGV0ZWN0KHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wgZm9yY2UpCj4gK3sKPiArCWVudW0gZHJtX2Nv bm5lY3Rvcl9zdGF0dXMgc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c191bmtub3duOwo+ICsJY29u c3Qgc3RydWN0IGRybV9lbmNvZGVyX3NsYXZlX2Z1bmNzICpzZnVuY3M7Cj4gKwlzdHJ1Y3QgZHJt X2VuY29kZXJfc2xhdmUgKnNsYXZlOwo+ICsKPiArCXN0cnVjdCBhcmNwZ3VfZHJtX2Nvbm5lY3Rv ciAqY29uID0KPiArCQljb250YWluZXJfb2YoY29ubmVjdG9yLCBzdHJ1Y3QgYXJjcGd1X2RybV9j b25uZWN0b3IsIGNvbm5lY3Rvcik7Cj4gKwo+ICsJc2xhdmUgPSBjb24tPmVuY29kZXJfc2xhdmU7 Cj4gKwlpZiAoc2xhdmUgPT0gTlVMTCkgewo+ICsJCWRldl9lcnIoY29ubmVjdG9yLT5kZXYtPmRl diwKPiArCQkJImNvbm5lY3Rvcl9kZXRlY3Q6IGNhbm5vdCBmaW5kIHNsYXZlIGVuY29kZXIgZm9y IGNvbm5lY3RvclxuIik7Cj4gKwkJcmV0dXJuIHN0YXR1czsKPiArCX0KPiArCj4gKwlzZnVuY3Mg PSBzbGF2ZS0+c2xhdmVfZnVuY3M7Cj4gKwlpZiAoc2Z1bmNzICYmIHNmdW5jcy0+ZGV0ZWN0KQo+ ICsJCXJldHVybiBzZnVuY3MtPmRldGVjdCgmc2xhdmUtPmJhc2UsIGNvbm5lY3Rvcik7Cj4gKwo+ ICsJZGV2X2Vycihjb25uZWN0b3ItPmRldi0+ZGV2LCAiY29ubmVjdG9yX2RldGVjdDogY291bGQg bm90IGRldGVjdCBzbGF2ZSBmdW5jc1xuIik7Cj4gKwlyZXR1cm4gc3RhdHVzOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBhcmNwZ3VfZHJtX2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IpCj4gK3sKPiArCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcihjb25u ZWN0b3IpOwo+ICsJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7Cj4gK30KPiArCj4g K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MKPiArYXJjcGd1 X2RybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0gewo+ICsJLmdldF9tb2RlcyA9IGFyY3BndV9k cm1fY29ubmVjdG9yX2dldF9tb2RlcywKPiArCS5iZXN0X2VuY29kZXIgPSBhcmNwZ3VfZHJtX2Nv bm5lY3Rvcl9iZXN0X2VuY29kZXIsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRy bV9jb25uZWN0b3JfZnVuY3MgYXJjcGd1X2RybV9jb25uZWN0b3JfZnVuY3MgPSB7Cj4gKwkuZHBt cyA9IGRybV9oZWxwZXJfY29ubmVjdG9yX2RwbXMsCj4gKwkucmVzZXQgPSBkcm1fYXRvbWljX2hl bHBlcl9jb25uZWN0b3JfcmVzZXQsCj4gKwkuZGV0ZWN0ID0gYXJjcGd1X2RybV9jb25uZWN0b3Jf ZGV0ZWN0LAo+ICsJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0 b3JfbW9kZXMsCj4gKwkuZGVzdHJveSA9IGFyY3BndV9kcm1fY29ubmVjdG9yX2Rlc3Ryb3ksCj4g KwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9k dXBsaWNhdGVfc3RhdGUsCj4gKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hl bHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3Qg ZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIGFyY3BndV9kcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3Mg PSB7Cj4gKwkuZHBtcyA9IGRybV9pMmNfZW5jb2Rlcl9kcG1zLAo+ICsJLm1vZGVfZml4dXAgPSBk cm1faTJjX2VuY29kZXJfbW9kZV9maXh1cCwKPiArCS5tb2RlX3NldCA9IGRybV9pMmNfZW5jb2Rl cl9tb2RlX3NldCwKPiArCS5wcmVwYXJlID0gZHJtX2kyY19lbmNvZGVyX3ByZXBhcmUsCj4gKwku Y29tbWl0ID0gZHJtX2kyY19lbmNvZGVyX2NvbW1pdCwKPiArCS5kZXRlY3QgPSBkcm1faTJjX2Vu Y29kZXJfZGV0ZWN0LAo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5j cyBhcmNwZ3VfZHJtX2VuY29kZXJfZnVuY3MgPSB7Cj4gKwkuZGVzdHJveSA9IGRybV9lbmNvZGVy X2NsZWFudXAsCj4gK307Cj4gKwo+ICtpbnQgYXJjcGd1X2RybV9oZG1pX2luaXQoc3RydWN0IGRy bV9kZXZpY2UgKmRybSwgc3RydWN0IGRldmljZV9ub2RlICpucCkKPiArewo+ICsJc3RydWN0IGFy Y3BndV9kcm1fY29ubmVjdG9yICphcmNwZ3VfY29ubmVjdG9yOwo+ICsJc3RydWN0IGRybV9pMmNf ZW5jb2Rlcl9kcml2ZXIgKmRyaXZlcjsKPiArCXN0cnVjdCBkcm1fZW5jb2Rlcl9zbGF2ZSAqZW5j b2RlcjsKPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Cj4gKwlzdHJ1Y3QgaTJj X2NsaWVudCAqaTJjX3NsYXZlOwo+ICsJaW50IHJldDsKPiArCj4gKwllbmNvZGVyID0gZGV2bV9r emFsbG9jKGRybS0+ZGV2LCBzaXplb2YoKmVuY29kZXIpLCBHRlBfS0VSTkVMKTsKPiArCWlmIChl bmNvZGVyID09IE5VTEwpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJaTJjX3NsYXZlID0g b2ZfZmluZF9pMmNfZGV2aWNlX2J5X25vZGUobnApOwo+ICsJaWYgKCFpMmNfc2xhdmUgfHwgIWky Y19nZXRfY2xpZW50ZGF0YShpMmNfc2xhdmUpKSB7Cj4gKwkJZGV2X2Vycihkcm0tPmRldiwgImZh aWxlZCB0byBmaW5kIGkyYyBzbGF2ZSBlbmNvZGVyXG4iKTsKPiArCQlyZXR1cm4gLUVQUk9CRV9E RUZFUjsKPiArCX0KPiArCj4gKwlpZiAoaTJjX3NsYXZlLT5kZXYuZHJpdmVyID09IE5VTEwpIHsK PiArCQlkZXZfZXJyKGRybS0+ZGV2LCAiZmFpbGVkIHRvIGZpbmQgaTJjIHNsYXZlIGRyaXZlclxu Iik7Cj4gKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7Cj4gKwl9Cj4gKwo+ICsJZHJpdmVyID0KPiAr CSAgICB0b19kcm1faTJjX2VuY29kZXJfZHJpdmVyKHRvX2kyY19kcml2ZXIoaTJjX3NsYXZlLT5k ZXYuZHJpdmVyKSk7Cj4gKwlyZXQgPSBkcml2ZXItPmVuY29kZXJfaW5pdChpMmNfc2xhdmUsIGRy bSwgZW5jb2Rlcik7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2Vycihkcm0tPmRldiwgImZhaWxl ZCB0byBpbml0aWFsaXplIGkyYyBlbmNvZGVyIHNsYXZlXG4iKTsKPiArCQlyZXR1cm4gcmV0Owo+ ICsJfQo+ICsKPiArCWVuY29kZXItPmJhc2UucG9zc2libGVfY3J0Y3MgPSAxOwo+ICsJZW5jb2Rl ci0+YmFzZS5wb3NzaWJsZV9jbG9uZXMgPSAwOwo+ICsJcmV0ID0gZHJtX2VuY29kZXJfaW5pdChk cm0sICZlbmNvZGVyLT5iYXNlLCAmYXJjcGd1X2RybV9lbmNvZGVyX2Z1bmNzLAo+ICsJCQkgICAg ICAgRFJNX01PREVfRU5DT0RFUl9UTURTLCBOVUxMKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJu IHJldDsKPiArCj4gKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKCZlbmNvZGVyLT5iYXNlLAo+ICsJ CQkgICAgICAgJmFyY3BndV9kcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MpOwo+ICsKPiArCWFyY3Bn dV9jb25uZWN0b3IgPSBkZXZtX2t6YWxsb2MoZHJtLT5kZXYsIHNpemVvZigqYXJjcGd1X2Nvbm5l Y3RvciksCj4gKwkJCQkJR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWFyY3BndV9jb25uZWN0b3IpIHsK PiArCQlyZXQgPSAtRU5PTUVNOwo+ICsJCWdvdG8gZXJyb3JfZW5jb2Rlcl9jbGVhbnVwOwo+ICsJ fQo+ICsKPiArCWNvbm5lY3RvciA9ICZhcmNwZ3VfY29ubmVjdG9yLT5jb25uZWN0b3I7Cj4gKwlk cm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoY29ubmVjdG9yLCAmYXJjcGd1X2RybV9jb25uZWN0b3Jf aGVscGVyX2Z1bmNzKTsKPiArCXJldCA9IGRybV9jb25uZWN0b3JfaW5pdChkcm0sIGNvbm5lY3Rv ciwgJmFyY3BndV9kcm1fY29ubmVjdG9yX2Z1bmNzLAo+ICsJCQlEUk1fTU9ERV9DT05ORUNUT1Jf SERNSUEpOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlkZXZfZXJyKGRybS0+ZGV2LCAiZmFpbGVk IHRvIGluaXRpYWxpemUgZHJtIGNvbm5lY3RvclxuIik7Cj4gKwkJZ290byBlcnJvcl9lbmNvZGVy X2NsZWFudXA7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9yZWdpc3Rlcihjb25u ZWN0b3IpOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlkZXZfZXJyKGRybS0+ZGV2LCAiZmFpbGVk IHRvIHJlZ2l0ZXIgRFJNIGNvbm5lY3RvciBhbmQgaGVscGVyIGZ1bmNzXG4iKTsKPiArCQlnb3Rv IGVycm9yX2Nvbm5lY3Rvcl9jbGVhbnVwOwo+ICsJfQo+ICsKPiArCXJldCA9IGRybV9tb2RlX2Nv bm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcihjb25uZWN0b3IsICZlbmNvZGVyLT5iYXNlKTsKPiArCWlm IChyZXQgPCAwKSB7Cj4gKwkJZGV2X2Vycihkcm0tPmRldiwgImNvdWxkIG5vdCBhdHRhY2ggY29u bmVjdG9yIHRvIGVuY29kZXJcbiIpOwo+ICsJCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcihjb25u ZWN0b3IpOwo+ICsJCWdvdG8gZXJyb3JfY29ubmVjdG9yX2NsZWFudXA7Cj4gKwl9Cj4gKwo+ICsJ YXJjcGd1X2Nvbm5lY3Rvci0+ZW5jb2Rlcl9zbGF2ZSA9IGVuY29kZXI7Cj4gKwo+ICsJcmV0dXJu IDA7Cj4gKwo+ICtlcnJvcl9jb25uZWN0b3JfY2xlYW51cDoKPiArCWRybV9jb25uZWN0b3JfY2xl YW51cChjb25uZWN0b3IpOwo+ICsKPiArZXJyb3JfZW5jb2Rlcl9jbGVhbnVwOgo+ICsJZHJtX2Vu Y29kZXJfY2xlYW51cCgmZW5jb2Rlci0+YmFzZSk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hcmMvYXJjcGd1X3JlZ3MuaCBiL2RyaXZlcnMvZ3B1 L2RybS9hcmMvYXJjcGd1X3JlZ3MuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAw MDAwMC4uZjA0MTY1Zgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYXJj L2FyY3BndV9yZWdzLmgKPiBAQCAtMCwwICsxLDM2IEBACj4gKy8qCj4gKyAqIEFSQyBQR1UgRFJN IGRyaXZlci4KPiArICoKPiArICogQ29weXJpZ2h0IChDKSAyMDE2IFN5bm9wc3lzLCBJbmMuICh3 d3cuc3lub3BzeXMuY29tKQo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsgKiBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwo+ ICsgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiAr ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICovCj4gKwo+ICsjaWZuZGVmIF9B UkNfUEdVX1JFR1NfSF8KPiArI2RlZmluZSBfQVJDX1BHVV9SRUdTX0hfCj4gKwo+ICsjZGVmaW5l IEFSQ1BHVV9SRUdfQ1RSTAkJMHgwMAo+ICsjZGVmaW5lIEFSQ1BHVV9SRUdfU1RBVAkJMHgwNAo+ ICsjZGVmaW5lIEFSQ1BHVV9SRUdfRk1UCQkweDEwCj4gKyNkZWZpbmUgQVJDUEdVX1JFR19IU1lO QwkweDE0Cj4gKyNkZWZpbmUgQVJDUEdVX1JFR19WU1lOQwkweDE4Cj4gKyNkZWZpbmUgQVJDUEdV X1JFR19BQ1RJVkUJMHgxYwo+ICsjZGVmaW5lIEFSQ1BHVV9SRUdfQlVGMF9BRERSCTB4NDAKPiAr I2RlZmluZSBBUkNQR1VfUkVHX1NUUklERQkweDUwCj4gKyNkZWZpbmUgQVJDUEdVX1JFR19TVEFS VF9TRVQJMHg4NAo+ICsKPiArI2RlZmluZSBBUkNQR1VfUkVHX0lECQkweDNGQwo+ICsKPiArI2Rl ZmluZSBBUkNQR1VfQ1RSTF9FTkFCTEVfTUFTSwkweDAyCj4gKyNkZWZpbmUgQVJDUEdVX01PREVf UkdCODg4X01BU0sJMHgwNAo+ICsjZGVmaW5lIEFSQ1BHVV9TVEFUX0JVU1lfTUFTSwkweDAyCj4g Kwo+ICsjZW5kaWYKPiAtLSAKPiAyLjUuMAo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCj4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+IGRyaS1kZXZl bEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5n aW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxp c3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=