From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v14 2/8] drm/mediatek: Add DRM Driver for Mediatek SoC MT8173. Date: Tue, 26 Apr 2016 10:48:00 +0200 Message-ID: <20160426084800.GZ2510@phenom.ffwll.local> References: <1460387376-11799-1-git-send-email-p.zabel@pengutronix.de> <1460387376-11799-3-git-send-email-p.zabel@pengutronix.de> <1461657922.3599.27.camel@pengutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1461657922.3599.27.camel@pengutronix.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Philipp Zabel Cc: Mark Rutland , Emil Velikov , Michael Turquette , Jie Qiu , Cawa Cheng , Mao Huang , Yingjoe Chen , devicetree@vger.kernel.org, Jitao Shi , Pawel Moll , Ian Campbell , YT Shen , Rob Herring , linux-mediatek@lists.infradead.org, dri-devel@lists.freedesktop.org, Matthias Brugger , Paul Bolle , Stephen Boyd , Tomasz Figa , kernel@pengutronix.de, Kumar Gala List-Id: devicetree@vger.kernel.org T24gVHVlLCBBcHIgMjYsIDIwMTYgYXQgMTA6MDU6MjJBTSArMDIwMCwgUGhpbGlwcCBaYWJlbCB3 cm90ZToKPiBGcm9tIDI0OTgyOTYxYTc0MDZjOWM2ZWQxMzkzMjljOWVlMTI2M2RkYzkyYzIgTW9u IFNlcCAxNyAwMDowMDowMCAyMDAxCj4gRnJvbTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4K PiBEYXRlOiBNb24sIDQgSmFuIDIwMTYgMTg6MzY6MzQgKzAxMDAKPiBTdWJqZWN0OiBbUEFUQ0gg djE0LjUgMi84XSBkcm0vbWVkaWF0ZWs6IEFkZCBEUk0gRHJpdmVyIGZvciBNZWRpYXRlayBTb0Mg TVQ4MTczLgo+IAo+IFRoaXMgcGF0Y2ggYWRkcyBhbiBpbml0aWFsIERSTSBkcml2ZXIgZm9yIHRo ZSBNZWRpYXRlayBNVDgxNzMgRElTUAo+IHN1YnN5c3RlbS4gSXQgY3VycmVudGx5IHN1cHBvcnRz IHR3byBmaXhlZCBvdXRwdXQgc3RyZWFtcyBmcm9tIHRoZQo+IE9WTDAvT1ZMMSBzb3VyY2VzIHRv IHRoZSBEU0kwL0RQSTAgc2lua3MsIHJlc3BlY3RpdmVseS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBD SyBIdSA8Y2suaHVAbWVkaWF0ZWsuY29tPgo+IFNpZ25lZC1vZmYtYnk6IFlUIFNoZW4gPHl0LnNo ZW5AbWVkaWF0ZWsuY29tPgo+IFNpZ25lZC1vZmYtYnk6IERhbmllbCBLdXJ0eiA8ZGprdXJ0ekBj aHJvbWl1bS5vcmc+Cj4gU2lnbmVkLW9mZi1ieTogQmliYnkgSHNpZWggPGJpYmJ5LmhzaWVoQG1l ZGlhdGVrLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBNYW8gSHVhbmcgPGxpdHRsZWN2ckBjaHJvbWl1 bS5vcmc+Cj4gU2lnbmVkLW9mZi1ieTogUGhpbGlwcCBaYWJlbCA8cC56YWJlbEBwZW5ndXRyb25p eC5kZT4KPiAtLS0KPiBDaGFuZ2VzIHNpbmNlIHYxNDoKPiAgLSBGaXhlZCBtb2R1bGUgYnVpbGQK PiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAgICAgICAgICAgICAgICAgICB8ICAg MiArCj4gIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgfCAgIDEg Kwo+ICBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZyAgICAgICAgICAgIHwgIDEyICsK PiAgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlICAgICAgICAgICB8ICAxMSArCj4g IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9vdmwuYyAgICAgfCAzMDIgKysrKysr KysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9yZG1hLmMgICAg fCAyNDAgKysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Ny dGMuYyAgICAgfCA1ODIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmggICAgIHwgIDMyICsrCj4gIGRyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5jICAgICAgfCAzNTMgKysrKysrKysrKysrKysrKysK PiAgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmggICAgICB8ICA0MSArKwo+ ICBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5jIHwgMjI1ICsrKysr KysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmggfCAx NTAgKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYyAgICAg IHwgNTY1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvbXRrX2RybV9kcnYuaCAgICAgIHwgIDU3ICsrKwo+ICBkcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvbXRrX2RybV9mYi5jICAgICAgIHwgMTY1ICsrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfZHJtX2ZiLmggICAgICAgfCAgMjMgKysKPiAgZHJpdmVycy9ncHUvZHJt L21lZGlhdGVrL210a19kcm1fZ2VtLmMgICAgICB8IDI2OSArKysrKysrKysrKysrCj4gIGRyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oICAgICAgfCAgNTkgKysrCj4gIGRyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmMgICAgfCAyNDAgKysrKysrKysrKysr Cj4gIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmggICAgfCAgNTkgKysr Cj4gIDIwIGZpbGVzIGNoYW5nZWQsIDMzODggaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcKPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQo+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX292bC5jCj4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3BfcmRtYS5jCj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMKPiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMu aAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f ZGRwLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZHJtX2RkcC5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9kZHBfY29tcC5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmMKPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmgKPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5jCj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uaAo+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuYwo+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxh bmUuaAo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMv Z3B1L2RybS9LY29uZmlnCj4gaW5kZXggZjJhNzRkMC4uNTQ4MjAxMiAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4g QEAgLTI4MSwzICsyODEsNSBAQCBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9pbXgvS2NvbmZpZyIK PiAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0vdmM0L0tjb25maWciCj4gIAo+ICBzb3VyY2UgImRy aXZlcnMvZ3B1L2RybS9ldG5hdml2L0tjb25maWciCj4gKwo+ICtzb3VyY2UgImRyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9LY29uZmlnIgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFr ZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiBpbmRleCA2ZWI5NGZjLi4wMmIxZjNl IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9NYWtlZmlsZQo+IEBAIC03Myw2ICs3Myw3IEBAIG9iai0kKENPTkZJR19EUk1fTVNN KSArPSBtc20vCj4gIG9iai0kKENPTkZJR19EUk1fVEVHUkEpICs9IHRlZ3JhLwo+ICBvYmotJChD T05GSUdfRFJNX1NUSSkgKz0gc3RpLwo+ICBvYmotJChDT05GSUdfRFJNX0lNWCkgKz0gaW14Lwo+ ICtvYmotJChDT05GSUdfRFJNX01FRElBVEVLKSArPSBtZWRpYXRlay8KPiAgb2JqLXkJCQkrPSBp MmMvCj4gIG9iai15CQkJKz0gcGFuZWwvCj4gIG9iai15CQkJKz0gYnJpZGdlLwo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9LY29uZmlnCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi44 ZGFkODkyCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9L Y29uZmlnCj4gQEAgLTAsMCArMSwxMiBAQAo+ICtjb25maWcgRFJNX01FRElBVEVLCj4gKwl0cmlz dGF0ZSAiRFJNIFN1cHBvcnQgZm9yIE1lZGlhdGVrIFNvQ3MiCj4gKwlkZXBlbmRzIG9uIERSTQo+ ICsJZGVwZW5kcyBvbiBBUkNIX01FRElBVEVLIHx8IChBUk0gJiYgQ09NUElMRV9URVNUKQo+ICsJ c2VsZWN0IERSTV9LTVNfSEVMUEVSCj4gKwlzZWxlY3QgSU9NTVVfRE1BCj4gKwlzZWxlY3QgTVRL X1NNSQo+ICsJaGVscAo+ICsJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSBNZWRp YXRlayBTb0NzLgo+ICsJICBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG1lZGlhdGVrLWRybQo+ ICsJICBUaGlzIGRyaXZlciBwcm92aWRlcyBrZXJuZWwgbW9kZSBzZXR0aW5nIGFuZAo+ICsJICBi dWZmZXIgbWFuYWdlbWVudCB0byB1c2Vyc3BhY2UuCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmls ZQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZDRiZGU3Ywo+IC0tLSAv ZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKPiBAQCAt MCwwICsxLDExIEBACj4gK21lZGlhdGVrLWRybS15IDo9IG10a19kaXNwX292bC5vIFwKPiArCQkg IG10a19kaXNwX3JkbWEubyBcCj4gKwkJICBtdGtfZHJtX2NydGMubyBcCj4gKwkJICBtdGtfZHJt X2RkcC5vIFwKPiArCQkgIG10a19kcm1fZGRwX2NvbXAubyBcCj4gKwkJICBtdGtfZHJtX2Rydi5v IFwKPiArCQkgIG10a19kcm1fZmIubyBcCj4gKwkJICBtdGtfZHJtX2dlbS5vIFwKPiArCQkgIG10 a19kcm1fcGxhbmUubwo+ICsKPiArb2JqLSQoQ09ORklHX0RSTV9NRURJQVRFSykgKz0gbWVkaWF0 ZWstZHJtLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNw X292bC5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX292bC5jCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi44ZjYyNjcxZgo+IC0tLSAvZGV2L251bGwK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3Bfb3ZsLmMKPiBAQCAtMCww ICsxLDMwMiBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgo+ ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwo+ICsgKiBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiArI2luY2x1ZGUg PGxpbnV4L2Nsay5oPgo+ICsjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9vZl9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgo+ICsjaW5j bHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gKwo+ICsjaW5jbHVkZSAibXRrX2RybV9j cnRjLmgiCj4gKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCj4gKwo+ICsjZGVmaW5lIERJ U1BfUkVHX09WTF9JTlRFTgkJCTB4MDAwNAo+ICsjZGVmaW5lIE9WTF9GTUVfQ1BMX0lOVAkJCQkJ QklUKDEpCj4gKyNkZWZpbmUgRElTUF9SRUdfT1ZMX0lOVFNUQQkJCTB4MDAwOAo+ICsjZGVmaW5l IERJU1BfUkVHX09WTF9FTgkJCQkweDAwMGMKPiArI2RlZmluZSBESVNQX1JFR19PVkxfUlNUCQkJ MHgwMDE0Cj4gKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1JPSV9TSVpFCQkJMHgwMDIwCj4gKyNkZWZp bmUgRElTUF9SRUdfT1ZMX1JPSV9CR0NMUgkJCTB4MDAyOAo+ICsjZGVmaW5lIERJU1BfUkVHX09W TF9TUkNfQ09OCQkJMHgwMDJjCj4gKyNkZWZpbmUgRElTUF9SRUdfT1ZMX0NPTihuKQkJCSgweDAw MzAgKyAweDIwICogKG4pKQo+ICsjZGVmaW5lIERJU1BfUkVHX09WTF9TUkNfU0laRShuKQkJKDB4 MDAzOCArIDB4MjAgKiAobikpCj4gKyNkZWZpbmUgRElTUF9SRUdfT1ZMX09GRlNFVChuKQkJCSgw eDAwM2MgKyAweDIwICogKG4pKQo+ICsjZGVmaW5lIERJU1BfUkVHX09WTF9QSVRDSChuKQkJCSgw eDAwNDQgKyAweDIwICogKG4pKQo+ICsjZGVmaW5lIERJU1BfUkVHX09WTF9SRE1BX0NUUkwobikJ CSgweDAwYzAgKyAweDIwICogKG4pKQo+ICsjZGVmaW5lIERJU1BfUkVHX09WTF9SRE1BX0dNQyhu KQkJKDB4MDBjOCArIDB4MjAgKiAobikpCj4gKyNkZWZpbmUgRElTUF9SRUdfT1ZMX0FERFIobikJ CQkoMHgwZjQwICsgMHgyMCAqIChuKSkKPiArCj4gKyNkZWZpbmUJT1ZMX1JETUFfTUVNX0dNQwkw eDQwNDAyMDIwCj4gKwo+ICsjZGVmaW5lIE9WTF9DT05fQllURV9TV0FQCUJJVCgyNCkKPiArI2Rl ZmluZSBPVkxfQ09OX0NMUkZNVF9SR0I1NjUJKDAgPDwgMTIpCj4gKyNkZWZpbmUgT1ZMX0NPTl9D TFJGTVRfUkdCODg4CSgxIDw8IDEyKQo+ICsjZGVmaW5lIE9WTF9DT05fQ0xSRk1UX1JHQkE4ODg4 CSgyIDw8IDEyKQo+ICsjZGVmaW5lIE9WTF9DT05fQ0xSRk1UX0FSR0I4ODg4CSgzIDw8IDEyKQo+ ICsjZGVmaW5lCU9WTF9DT05fQUVOCQlCSVQoOCkKPiArI2RlZmluZQlPVkxfQ09OX0FMUEhBCQkw eGZmCj4gKwo+ICsvKioKPiArICogc3RydWN0IG10a19kaXNwX292bCAtIERJU1BfT1ZMIGRyaXZl ciBzdHJ1Y3R1cmUKPiArICogQGRkcF9jb21wIC0gc3RydWN0dXJlIGNvbnRhaW5pbmcgdHlwZSBl bnVtIGFuZCBoYXJkd2FyZSByZXNvdXJjZXMKPiArICogQGNydGMgLSBhc3NvY2lhdGVkIGNydGMg dG8gcmVwb3J0IHZibGFuayBldmVudHMgdG8KPiArICovCj4gK3N0cnVjdCBtdGtfZGlzcF9vdmwg ewo+ICsJc3RydWN0IG10a19kZHBfY29tcAkJZGRwX2NvbXA7Cj4gKwlzdHJ1Y3QgZHJtX2NydGMJ CQkqY3J0YzsKPiArfTsKPiArCj4gK3N0YXRpYyBpcnFyZXR1cm5fdCBtdGtfZGlzcF9vdmxfaXJx X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQo+ICt7Cj4gKwlzdHJ1Y3QgbXRrX2Rpc3Bf b3ZsICpwcml2ID0gZGV2X2lkOwo+ICsJc3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gJnByaXYt PmRkcF9jb21wOwo+ICsKPiArCS8qIENsZWFyIGZyYW1lIGNvbXBsZXRpb24gaW50ZXJydXB0ICov Cj4gKwl3cml0ZWwoMHgwLCBvdmwtPnJlZ3MgKyBESVNQX1JFR19PVkxfSU5UU1RBKTsKPiArCj4g KwlpZiAoIXByaXYtPmNydGMpCj4gKwkJcmV0dXJuIElSUV9OT05FOwo+ICsKPiArCW10a19jcnRj X2RkcF9pcnEocHJpdi0+Y3J0Yywgb3ZsKTsKPiArCj4gKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIG10a19vdmxfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2Rk cF9jb21wICpjb21wLAo+ICsJCQkJICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gK3sKPiArCXN0 cnVjdCBtdGtfZGlzcF9vdmwgKnByaXYgPSBjb250YWluZXJfb2YoY29tcCwgc3RydWN0IG10a19k aXNwX292bCwKPiArCQkJCQkJIGRkcF9jb21wKTsKPiArCj4gKwlwcml2LT5jcnRjID0gY3J0YzsK PiArCXdyaXRlbF9yZWxheGVkKE9WTF9GTUVfQ1BMX0lOVCwgY29tcC0+cmVncyArIERJU1BfUkVH X09WTF9JTlRFTik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG10a19vdmxfZGlzYWJsZV92Ymxh bmsoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKPiArewo+ICsJc3RydWN0IG10a19kaXNwX292 bCAqcHJpdiA9IGNvbnRhaW5lcl9vZihjb21wLCBzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsLAo+ICsJCQkJ CQkgZGRwX2NvbXApOwo+ICsKPiArCXByaXYtPmNydGMgPSBOVUxMOwo+ICsJd3JpdGVsX3JlbGF4 ZWQoMHgwLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX0lOVEVOKTsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgbXRrX292bF9zdGFydChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQo+ICt7Cj4g Kwl3cml0ZWxfcmVsYXhlZCgweDEsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfRU4pOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfb3ZsX3N0b3Aoc3RydWN0IG10a19kZHBfY29tcCAqY29t cCkKPiArewo+ICsJd3JpdGVsX3JlbGF4ZWQoMHgwLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZM X0VOKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbXRrX292bF9jb25maWcoc3RydWN0IG10a19k ZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IHcsCj4gKwkJCSAgIHVuc2lnbmVkIGludCBoLCB1 bnNpZ25lZCBpbnQgdnJlZnJlc2gpCj4gK3sKPiArCWlmICh3ICE9IDAgJiYgaCAhPSAwKQo+ICsJ CXdyaXRlbF9yZWxheGVkKGggPDwgMTYgfCB3LCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1JP SV9TSVpFKTsKPiArCXdyaXRlbF9yZWxheGVkKDB4MCwgY29tcC0+cmVncyArIERJU1BfUkVHX09W TF9ST0lfQkdDTFIpOwo+ICsKPiArCXdyaXRlbCgweDEsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19P VkxfUlNUKTsKPiArCXdyaXRlbCgweDAsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfUlNUKTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgbXRrX292bF9sYXllcl9vbihzdHJ1Y3QgbXRrX2RkcF9j b21wICpjb21wLCB1bnNpZ25lZCBpbnQgaWR4KQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgcmVnOwo+ ICsKPiArCXdyaXRlbCgweDEsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfUkRNQV9DVFJMKGlk eCkpOwo+ICsJd3JpdGVsKE9WTF9SRE1BX01FTV9HTUMsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19P VkxfUkRNQV9HTUMoaWR4KSk7Cj4gKwo+ICsJcmVnID0gcmVhZGwoY29tcC0+cmVncyArIERJU1Bf UkVHX09WTF9TUkNfQ09OKTsKPiArCXJlZyA9IHJlZyB8IEJJVChpZHgpOwo+ICsJd3JpdGVsKHJl ZywgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9TUkNfQ09OKTsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgbXRrX292bF9sYXllcl9vZmYoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWdu ZWQgaW50IGlkeCkKPiArewo+ICsJdW5zaWduZWQgaW50IHJlZzsKPiArCj4gKwlyZWcgPSByZWFk bChjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1NSQ19DT04pOwo+ICsJcmVnID0gcmVnICYgfkJJ VChpZHgpOwo+ICsJd3JpdGVsKHJlZywgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9TUkNfQ09O KTsKPiArCj4gKwl3cml0ZWwoMHgwLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1JETUFfQ1RS TChpZHgpKTsKPiArfQo+ICsKPiArc3RhdGljIHVuc2lnbmVkIGludCBvdmxfZm10X2NvbnZlcnQo dW5zaWduZWQgaW50IGZtdCkKPiArewo+ICsJc3dpdGNoIChmbXQpIHsKPiArCWRlZmF1bHQ6Cj4g KwljYXNlIERSTV9GT1JNQVRfUkdCNTY1Ogo+ICsJCXJldHVybiBPVkxfQ09OX0NMUkZNVF9SR0I1 NjU7Cj4gKwljYXNlIERSTV9GT1JNQVRfQkdSNTY1Ogo+ICsJCXJldHVybiBPVkxfQ09OX0NMUkZN VF9SR0I1NjUgfCBPVkxfQ09OX0JZVEVfU1dBUDsKPiArCWNhc2UgRFJNX0ZPUk1BVF9SR0I4ODg6 Cj4gKwkJcmV0dXJuIE9WTF9DT05fQ0xSRk1UX1JHQjg4ODsKPiArCWNhc2UgRFJNX0ZPUk1BVF9C R1I4ODg6Cj4gKwkJcmV0dXJuIE9WTF9DT05fQ0xSRk1UX1JHQjg4OCB8IE9WTF9DT05fQllURV9T V0FQOwo+ICsJY2FzZSBEUk1fRk9STUFUX1JHQlg4ODg4Ogo+ICsJY2FzZSBEUk1fRk9STUFUX1JH QkE4ODg4Ogo+ICsJCXJldHVybiBPVkxfQ09OX0NMUkZNVF9BUkdCODg4ODsKPiArCWNhc2UgRFJN X0ZPUk1BVF9CR1JYODg4ODoKPiArCWNhc2UgRFJNX0ZPUk1BVF9CR1JBODg4ODoKPiArCQlyZXR1 cm4gT1ZMX0NPTl9DTFJGTVRfQVJHQjg4ODggfCBPVkxfQ09OX0JZVEVfU1dBUDsKPiArCWNhc2Ug RFJNX0ZPUk1BVF9YUkdCODg4ODoKPiArCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKPiArCQly ZXR1cm4gT1ZMX0NPTl9DTFJGTVRfUkdCQTg4ODg7Cj4gKwljYXNlIERSTV9GT1JNQVRfWEJHUjg4 ODg6Cj4gKwljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6Cj4gKwkJcmV0dXJuIE9WTF9DT05fQ0xS Rk1UX1JHQkE4ODg4IHwgT1ZMX0NPTl9CWVRFX1NXQVA7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIG10a19vdmxfbGF5ZXJfY29uZmlnKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVu c2lnbmVkIGludCBpZHgsCj4gKwkJCQkgc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqc3RhdGUpCj4g K3sKPiArCXN0cnVjdCBtdGtfcGxhbmVfcGVuZGluZ19zdGF0ZSAqcGVuZGluZyA9ICZzdGF0ZS0+ cGVuZGluZzsKPiArCXVuc2lnbmVkIGludCBhZGRyID0gcGVuZGluZy0+YWRkcjsKPiArCXVuc2ln bmVkIGludCBwaXRjaCA9IHBlbmRpbmctPnBpdGNoICYgMHhmZmZmOwo+ICsJdW5zaWduZWQgaW50 IGZtdCA9IHBlbmRpbmctPmZvcm1hdDsKPiArCXVuc2lnbmVkIGludCBvZmZzZXQgPSAocGVuZGlu Zy0+eSA8PCAxNikgfCBwZW5kaW5nLT54Owo+ICsJdW5zaWduZWQgaW50IHNyY19zaXplID0gKHBl bmRpbmctPmhlaWdodCA8PCAxNikgfCBwZW5kaW5nLT53aWR0aDsKPiArCXVuc2lnbmVkIGludCBj b247Cj4gKwo+ICsJaWYgKCFwZW5kaW5nLT5lbmFibGUpCj4gKwkJbXRrX292bF9sYXllcl9vZmYo Y29tcCwgaWR4KTsKPiArCj4gKwljb24gPSBvdmxfZm10X2NvbnZlcnQoZm10KTsKPiArCWlmIChp ZHggIT0gMCkKPiArCQljb24gfD0gT1ZMX0NPTl9BRU4gfCBPVkxfQ09OX0FMUEhBOwo+ICsKPiAr CXdyaXRlbF9yZWxheGVkKGNvbiwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9DT04oaWR4KSk7 Cj4gKwl3cml0ZWxfcmVsYXhlZChwaXRjaCwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9QSVRD SChpZHgpKTsKPiArCXdyaXRlbF9yZWxheGVkKHNyY19zaXplLCBjb21wLT5yZWdzICsgRElTUF9S RUdfT1ZMX1NSQ19TSVpFKGlkeCkpOwo+ICsJd3JpdGVsX3JlbGF4ZWQob2Zmc2V0LCBjb21wLT5y ZWdzICsgRElTUF9SRUdfT1ZMX09GRlNFVChpZHgpKTsKPiArCXdyaXRlbF9yZWxheGVkKGFkZHIs IGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfQUREUihpZHgpKTsKPiArCj4gKwlpZiAocGVuZGlu Zy0+ZW5hYmxlKQo+ICsJCW10a19vdmxfbGF5ZXJfb24oY29tcCwgaWR4KTsKPiArfQo+ICsKPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgbXRrX2Rpc3Bfb3ZsX2Z1bmNz ID0gewo+ICsJLmNvbmZpZyA9IG10a19vdmxfY29uZmlnLAo+ICsJLnN0YXJ0ID0gbXRrX292bF9z dGFydCwKPiArCS5zdG9wID0gbXRrX292bF9zdG9wLAo+ICsJLmVuYWJsZV92YmxhbmsgPSBtdGtf b3ZsX2VuYWJsZV92YmxhbmssCj4gKwkuZGlzYWJsZV92YmxhbmsgPSBtdGtfb3ZsX2Rpc2FibGVf dmJsYW5rLAo+ICsJLmxheWVyX29uID0gbXRrX292bF9sYXllcl9vbiwKPiArCS5sYXllcl9vZmYg PSBtdGtfb3ZsX2xheWVyX29mZiwKPiArCS5sYXllcl9jb25maWcgPSBtdGtfb3ZsX2xheWVyX2Nv bmZpZywKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgbXRrX2Rpc3Bfb3ZsX2JpbmQoc3RydWN0IGRl dmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCj4gKwkJCSAgICAgdm9pZCAqZGF0YSkK PiArewo+ICsJc3RydWN0IG10a19kaXNwX292bCAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYp Owo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkYXRhOwo+ICsJaW50IHJldDsKPiAr Cj4gKwlyZXQgPSBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIoZHJtX2RldiwgJnByaXYtPmRkcF9jb21w KTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVnaXN0 ZXIgY29tcG9uZW50ICVzOiAlZFxuIiwKPiArCQkJZGV2LT5vZl9ub2RlLT5mdWxsX25hbWUsIHJl dCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgbXRrX2Rpc3Bfb3ZsX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVj dCBkZXZpY2UgKm1hc3RlciwKPiArCQkJCXZvaWQgKmRhdGEpCj4gK3sKPiArCXN0cnVjdCBtdGtf ZGlzcF9vdmwgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCXN0cnVjdCBkcm1fZGV2 aWNlICpkcm1fZGV2ID0gZGF0YTsKPiArCj4gKwltdGtfZGRwX2NvbXBfdW5yZWdpc3Rlcihkcm1f ZGV2LCAmcHJpdi0+ZGRwX2NvbXApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGNv bXBvbmVudF9vcHMgbXRrX2Rpc3Bfb3ZsX2NvbXBvbmVudF9vcHMgPSB7Cj4gKwkuYmluZAk9IG10 a19kaXNwX292bF9iaW5kLAo+ICsJLnVuYmluZCA9IG10a19kaXNwX292bF91bmJpbmQsCj4gK307 Cj4gKwo+ICtzdGF0aWMgaW50IG10a19kaXNwX292bF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owo+ICsJ c3RydWN0IG10a19kaXNwX292bCAqcHJpdjsKPiArCWludCBjb21wX2lkOwo+ICsJaW50IGlycTsK PiArCWludCByZXQ7Cj4gKwo+ICsJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJp diksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFwcml2KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsK PiArCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Cj4gKwlpZiAoaXJxIDwgMCkKPiAr CQlyZXR1cm4gaXJxOwo+ICsKPiArCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIG10 a19kaXNwX292bF9pcnFfaGFuZGxlciwKPiArCQkJICAgICAgIElSUUZfVFJJR0dFUl9OT05FLCBk ZXZfbmFtZShkZXYpLCBwcml2KTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZGV2X2VycihkZXYs ICJGYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWQ6ICVkXG4iLCBpcnEsIHJldCk7Cj4gKwkJcmV0dXJu IHJldDsKPiArCX0KPiArCj4gKwljb21wX2lkID0gbXRrX2RkcF9jb21wX2dldF9pZChkZXYtPm9m X25vZGUsIE1US19ESVNQX09WTCk7Cj4gKwlpZiAoY29tcF9pZCA8IDApIHsKPiArCQlkZXZfZXJy KGRldiwgIkZhaWxlZCB0byBpZGVudGlmeSBieSBhbGlhczogJWRcbiIsIGNvbXBfaWQpOwo+ICsJ CXJldHVybiBjb21wX2lkOwo+ICsJfQo+ICsKPiArCXJldCA9IG10a19kZHBfY29tcF9pbml0KGRl diwgZGV2LT5vZl9ub2RlLCAmcHJpdi0+ZGRwX2NvbXAsIGNvbXBfaWQsCj4gKwkJCQkmbXRrX2Rp c3Bfb3ZsX2Z1bmNzKTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0 byBpbml0aWFsaXplIGNvbXBvbmVudDogJWRcbiIsIHJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiAr CX0KPiArCj4gKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsKPiArCj4gKwlyZXQg PSBjb21wb25lbnRfYWRkKGRldiwgJm10a19kaXNwX292bF9jb21wb25lbnRfb3BzKTsKPiArCWlm IChyZXQpCj4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWRkIGNvbXBvbmVudDogJWRcbiIs IHJldCk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBtdGtfZGlz cF9vdmxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCWNvbXBv bmVudF9kZWwoJnBkZXYtPmRldiwgJm10a19kaXNwX292bF9jb21wb25lbnRfb3BzKTsKPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQg bXRrX2Rpc3Bfb3ZsX2RyaXZlcl9kdF9tYXRjaFtdID0gewo+ICsJeyAuY29tcGF0aWJsZSA9ICJt ZWRpYXRlayxtdDgxNzMtZGlzcC1vdmwiLCB9LAo+ICsJe30sCj4gK307Cj4gK01PRFVMRV9ERVZJ Q0VfVEFCTEUob2YsIG10a19kaXNwX292bF9kcml2ZXJfZHRfbWF0Y2gpOwo+ICsKPiArc3RydWN0 IHBsYXRmb3JtX2RyaXZlciBtdGtfZGlzcF9vdmxfZHJpdmVyID0gewo+ICsJLnByb2JlCQk9IG10 a19kaXNwX292bF9wcm9iZSwKPiArCS5yZW1vdmUJCT0gbXRrX2Rpc3Bfb3ZsX3JlbW92ZSwKPiAr CS5kcml2ZXIJCT0gewo+ICsJCS5uYW1lCT0gIm1lZGlhdGVrLWRpc3Atb3ZsIiwKPiArCQkub3du ZXIJPSBUSElTX01PRFVMRSwKPiArCQkub2ZfbWF0Y2hfdGFibGUgPSBtdGtfZGlzcF9vdmxfZHJp dmVyX2R0X21hdGNoLAo+ICsJfSwKPiArfTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21lZGlhdGVrL210a19kaXNwX3JkbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZGlzcF9yZG1hLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjVmYjgw Y2IKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k aXNwX3JkbWEuYwo+IEBAIC0wLDAgKzEsMjQwIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykg MjAxNSBNZWRpYVRlayBJbmMuCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFz Cj4gKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxkcm0v ZHJtUC5oPgo+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9jb21w b25lbnQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvb2ZfaXJxLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiArCj4g KyNpbmNsdWRlICJtdGtfZHJtX2NydGMuaCIKPiArI2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAu aCIKPiArCj4gKyNkZWZpbmUgRElTUF9SRUdfUkRNQV9JTlRfRU5BQkxFCQkweDAwMDAKPiArI2Rl ZmluZSBESVNQX1JFR19SRE1BX0lOVF9TVEFUVVMJCTB4MDAwNAo+ICsjZGVmaW5lIFJETUFfVEFS R0VUX0xJTkVfSU5UCQkJCUJJVCg1KQo+ICsjZGVmaW5lIFJETUFfRklGT19VTkRFUkZMT1dfSU5U CQkJCUJJVCg0KQo+ICsjZGVmaW5lIFJETUFfRU9GX0FCTk9STUFMX0lOVAkJCQlCSVQoMykKPiAr I2RlZmluZSBSRE1BX0ZSQU1FX0VORF9JTlQJCQkJQklUKDIpCj4gKyNkZWZpbmUgUkRNQV9GUkFN RV9TVEFSVF9JTlQJCQkJQklUKDEpCj4gKyNkZWZpbmUgUkRNQV9SRUdfVVBEQVRFX0lOVAkJCQlC SVQoMCkKPiArI2RlZmluZSBESVNQX1JFR19SRE1BX0dMT0JBTF9DT04JCTB4MDAxMAo+ICsjZGVm aW5lIFJETUFfRU5HSU5FX0VOCQkJCQlCSVQoMCkKPiArI2RlZmluZSBESVNQX1JFR19SRE1BX1NJ WkVfQ09OXzAJCTB4MDAxNAo+ICsjZGVmaW5lIERJU1BfUkVHX1JETUFfU0laRV9DT05fMQkJMHgw MDE4Cj4gKyNkZWZpbmUgRElTUF9SRUdfUkRNQV9UQVJHRVRfTElORQkJMHgwMDFjCj4gKyNkZWZp bmUgRElTUF9SRUdfUkRNQV9GSUZPX0NPTgkJCTB4MDA0MAo+ICsjZGVmaW5lIFJETUFfRklGT19V TkRFUkZMT1dfRU4JCQkJQklUKDMxKQo+ICsjZGVmaW5lIFJETUFfRklGT19QU0VVRE9fU0laRShi eXRlcykJCQkoKChieXRlcykgLyAxNikgPDwgMTYpCj4gKyNkZWZpbmUgUkRNQV9PVVRQVVRfVkFM SURfRklGT19USFJFU0hPTEQoYnl0ZXMpCQkoKGJ5dGVzKSAvIDE2KQo+ICsKPiArLyoqCj4gKyAq IHN0cnVjdCBtdGtfZGlzcF9yZG1hIC0gRElTUF9SRE1BIGRyaXZlciBzdHJ1Y3R1cmUKPiArICog QGRkcF9jb21wIC0gc3RydWN0dXJlIGNvbnRhaW5pbmcgdHlwZSBlbnVtIGFuZCBoYXJkd2FyZSBy ZXNvdXJjZXMKPiArICogQGNydGMgLSBhc3NvY2lhdGVkIGNydGMgdG8gcmVwb3J0IGlycSBldmVu dHMgdG8KPiArICovCj4gK3N0cnVjdCBtdGtfZGlzcF9yZG1hIHsKPiArCXN0cnVjdCBtdGtfZGRw X2NvbXAJCWRkcF9jb21wOwo+ICsJc3RydWN0IGRybV9jcnRjCQkJKmNydGM7Cj4gK307Cj4gKwo+ ICtzdGF0aWMgaXJxcmV0dXJuX3QgbXRrX2Rpc3BfcmRtYV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2 b2lkICpkZXZfaWQpCj4gK3sKPiArCXN0cnVjdCBtdGtfZGlzcF9yZG1hICpwcml2ID0gZGV2X2lk Owo+ICsJc3RydWN0IG10a19kZHBfY29tcCAqcmRtYSA9ICZwcml2LT5kZHBfY29tcDsKPiArCj4g KwkvKiBDbGVhciBmcmFtZSBjb21wbGV0aW9uIGludGVycnVwdCAqLwo+ICsJd3JpdGVsKDB4MCwg cmRtYS0+cmVncyArIERJU1BfUkVHX1JETUFfSU5UX1NUQVRVUyk7Cj4gKwo+ICsJaWYgKCFwcml2 LT5jcnRjKQo+ICsJCXJldHVybiBJUlFfTk9ORTsKPiArCj4gKwltdGtfY3J0Y19kZHBfaXJxKHBy aXYtPmNydGMsIHJkbWEpOwo+ICsKPiArCXJldHVybiBJUlFfSEFORExFRDsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgcmRtYV91cGRhdGVfYml0cyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1 bnNpZ25lZCBpbnQgcmVnLAo+ICsJCQkgICAgIHVuc2lnbmVkIGludCBtYXNrLCB1bnNpZ25lZCBp bnQgdmFsKQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgdG1wID0gcmVhZGwoY29tcC0+cmVncyArIHJl Zyk7Cj4gKwo+ICsJdG1wID0gKHRtcCAmIH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsKPiArCXdyaXRl bCh0bXAsIGNvbXAtPnJlZ3MgKyByZWcpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfcmRt YV9lbmFibGVfdmJsYW5rKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsCj4gKwkJCQkgICBzdHJ1 Y3QgZHJtX2NydGMgKmNydGMpCj4gK3sKPiArCXN0cnVjdCBtdGtfZGlzcF9yZG1hICpwcml2ID0g Y29udGFpbmVyX29mKGNvbXAsIHN0cnVjdCBtdGtfZGlzcF9yZG1hLAo+ICsJCQkJCQkgIGRkcF9j b21wKTsKPiArCj4gKwlwcml2LT5jcnRjID0gY3J0YzsKPiArCXJkbWFfdXBkYXRlX2JpdHMoY29t cCwgRElTUF9SRUdfUkRNQV9JTlRfRU5BQkxFLCBSRE1BX0ZSQU1FX0VORF9JTlQsCj4gKwkJCSBS RE1BX0ZSQU1FX0VORF9JTlQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfcmRtYV9kaXNh YmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQo+ICt7Cj4gKwlzdHJ1Y3QgbXRr X2Rpc3BfcmRtYSAqcHJpdiA9IGNvbnRhaW5lcl9vZihjb21wLCBzdHJ1Y3QgbXRrX2Rpc3BfcmRt YSwKPiArCQkJCQkJICBkZHBfY29tcCk7Cj4gKwo+ICsJcHJpdi0+Y3J0YyA9IE5VTEw7Cj4gKwly ZG1hX3VwZGF0ZV9iaXRzKGNvbXAsIERJU1BfUkVHX1JETUFfSU5UX0VOQUJMRSwgUkRNQV9GUkFN RV9FTkRfSU5ULCAwKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbXRrX3JkbWFfc3RhcnQoc3Ry dWN0IG10a19kZHBfY29tcCAqY29tcCkKPiArewo+ICsJcmRtYV91cGRhdGVfYml0cyhjb21wLCBE SVNQX1JFR19SRE1BX0dMT0JBTF9DT04sIFJETUFfRU5HSU5FX0VOLAo+ICsJCQkgUkRNQV9FTkdJ TkVfRU4pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfcmRtYV9zdG9wKHN0cnVjdCBtdGtf ZGRwX2NvbXAgKmNvbXApCj4gK3sKPiArCXJkbWFfdXBkYXRlX2JpdHMoY29tcCwgRElTUF9SRUdf UkRNQV9HTE9CQUxfQ09OLCBSRE1BX0VOR0lORV9FTiwgMCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIG10a19yZG1hX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBp bnQgd2lkdGgsCj4gKwkJCSAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBpbnQgdnJl ZnJlc2gpCj4gK3sKPiArCXVuc2lnbmVkIGludCB0aHJlc2hvbGQ7Cj4gKwl1bnNpZ25lZCBpbnQg cmVnOwo+ICsKPiArCXJkbWFfdXBkYXRlX2JpdHMoY29tcCwgRElTUF9SRUdfUkRNQV9TSVpFX0NP Tl8wLCAweGZmZiwgd2lkdGgpOwo+ICsJcmRtYV91cGRhdGVfYml0cyhjb21wLCBESVNQX1JFR19S RE1BX1NJWkVfQ09OXzEsIDB4ZmZmZmYsIGhlaWdodCk7Cj4gKwo+ICsJLyoKPiArCSAqIEVuYWJs ZSBGSUZPIHVuZGVyZmxvdyBzaW5jZSBEU0kgYW5kIERQSSBjYW4ndCBiZSBibG9ja2VkLgo+ICsJ ICogS2VlcCB0aGUgRklGTyBwc2V1ZG8gc2l6ZSByZXNldCBkZWZhdWx0IG9mIDggS2lCLiBTZXQg dGhlCj4gKwkgKiBvdXRwdXQgdGhyZXNob2xkIHRvIDYgbWljcm9zZWNvbmRzIHdpdGggNy82IG92 ZXJoZWFkIHRvCj4gKwkgKiBhY2NvdW50IGZvciBibGFua2luZywgYW5kIHdpdGggYSBwaXhlbCBk ZXB0aCBvZiA0IGJ5dGVzOgo+ICsJICovCj4gKwl0aHJlc2hvbGQgPSB3aWR0aCAqIGhlaWdodCAq IHZyZWZyZXNoICogNCAqIDcgLyAxMDAwMDAwOwo+ICsJcmVnID0gUkRNQV9GSUZPX1VOREVSRkxP V19FTiB8Cj4gKwkgICAgICBSRE1BX0ZJRk9fUFNFVURPX1NJWkUoU1pfOEspIHwKPiArCSAgICAg IFJETUFfT1VUUFVUX1ZBTElEX0ZJRk9fVEhSRVNIT0xEKHRocmVzaG9sZCk7Cj4gKwl3cml0ZWwo cmVnLCBjb21wLT5yZWdzICsgRElTUF9SRUdfUkRNQV9GSUZPX0NPTik7Cj4gK30KPiArCj4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIG10a19kaXNwX3JkbWFfZnVuY3Mg PSB7Cj4gKwkuY29uZmlnID0gbXRrX3JkbWFfY29uZmlnLAo+ICsJLnN0YXJ0ID0gbXRrX3JkbWFf c3RhcnQsCj4gKwkuc3RvcCA9IG10a19yZG1hX3N0b3AsCj4gKwkuZW5hYmxlX3ZibGFuayA9IG10 a19yZG1hX2VuYWJsZV92YmxhbmssCj4gKwkuZGlzYWJsZV92YmxhbmsgPSBtdGtfcmRtYV9kaXNh YmxlX3ZibGFuaywKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgbXRrX2Rpc3BfcmRtYV9iaW5kKHN0 cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAo+ICsJCQkgICAgICB2b2lk ICpkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgbXRrX2Rpc3BfcmRtYSAqcHJpdiA9IGRldl9nZXRfZHJ2 ZGF0YShkZXYpOwo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkYXRhOwo+ICsJaW50 IHJldDsKPiArCj4gKwlyZXQgPSBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIoZHJtX2RldiwgJnByaXYt PmRkcF9jb21wKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQg dG8gcmVnaXN0ZXIgY29tcG9uZW50ICVzOiAlZFxuIiwKPiArCQkJZGV2LT5vZl9ub2RlLT5mdWxs X25hbWUsIHJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiAr Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG10a19kaXNwX3JkbWFfdW5iaW5kKHN0cnVjdCBkZXZp Y2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAo+ICsJCQkJIHZvaWQgKmRhdGEpCj4gK3sK PiArCXN0cnVjdCBtdGtfZGlzcF9yZG1hICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4g KwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9IGRhdGE7Cj4gKwo+ICsJbXRrX2RkcF9jb21w X3VucmVnaXN0ZXIoZHJtX2RldiwgJnByaXYtPmRkcF9jb21wKTsKPiArfQo+ICsKPiArc3RhdGlj IGNvbnN0IHN0cnVjdCBjb21wb25lbnRfb3BzIG10a19kaXNwX3JkbWFfY29tcG9uZW50X29wcyA9 IHsKPiArCS5iaW5kCT0gbXRrX2Rpc3BfcmRtYV9iaW5kLAo+ICsJLnVuYmluZCA9IG10a19kaXNw X3JkbWFfdW5iaW5kLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBtdGtfZGlzcF9yZG1hX3Byb2Jl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRl diA9ICZwZGV2LT5kZXY7Cj4gKwlzdHJ1Y3QgbXRrX2Rpc3BfcmRtYSAqcHJpdjsKPiArCWludCBj b21wX2lkOwo+ICsJaW50IGlycTsKPiArCWludCByZXQ7Cj4gKwo+ICsJcHJpdiA9IGRldm1fa3ph bGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFwcml2KQo+ICsJ CXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7 Cj4gKwlpZiAoaXJxIDwgMCkKPiArCQlyZXR1cm4gaXJxOwo+ICsKPiArCWNvbXBfaWQgPSBtdGtf ZGRwX2NvbXBfZ2V0X2lkKGRldi0+b2Zfbm9kZSwgTVRLX0RJU1BfUkRNQSk7Cj4gKwlpZiAoY29t cF9pZCA8IDApIHsKPiArCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpZGVudGlmeSBieSBhbGlh czogJWRcbiIsIGNvbXBfaWQpOwo+ICsJCXJldHVybiBjb21wX2lkOwo+ICsJfQo+ICsKPiArCXJl dCA9IG10a19kZHBfY29tcF9pbml0KGRldiwgZGV2LT5vZl9ub2RlLCAmcHJpdi0+ZGRwX2NvbXAs IGNvbXBfaWQsCj4gKwkJCQkmbXRrX2Rpc3BfcmRtYV9mdW5jcyk7Cj4gKwlpZiAocmV0KSB7Cj4g KwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb21wb25lbnQ6ICVkXG4iLCBy ZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJLyogRGlzYWJsZSBhbmQgY2xlYXIg cGVuZGluZyBpbnRlcnJ1cHRzICovCj4gKwl3cml0ZWwoMHgwLCBwcml2LT5kZHBfY29tcC5yZWdz ICsgRElTUF9SRUdfUkRNQV9JTlRfRU5BQkxFKTsKPiArCXdyaXRlbCgweDAsIHByaXYtPmRkcF9j b21wLnJlZ3MgKyBESVNQX1JFR19SRE1BX0lOVF9TVEFUVVMpOwo+ICsKPiArCXJldCA9IGRldm1f cmVxdWVzdF9pcnEoZGV2LCBpcnEsIG10a19kaXNwX3JkbWFfaXJxX2hhbmRsZXIsCj4gKwkJCSAg ICAgICBJUlFGX1RSSUdHRVJfTk9ORSwgZGV2X25hbWUoZGV2KSwgcHJpdik7Cj4gKwlpZiAocmV0 IDwgMCkgewo+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkOiAlZFxu IiwgaXJxLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcGxhdGZvcm1fc2V0 X2RydmRhdGEocGRldiwgcHJpdik7Cj4gKwo+ICsJcmV0ID0gY29tcG9uZW50X2FkZChkZXYsICZt dGtfZGlzcF9yZG1hX2NvbXBvbmVudF9vcHMpOwo+ICsJaWYgKHJldCkKPiArCQlkZXZfZXJyKGRl diwgIkZhaWxlZCB0byBhZGQgY29tcG9uZW50OiAlZFxuIiwgcmV0KTsKPiArCj4gKwlyZXR1cm4g cmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG10a19kaXNwX3JkbWFfcmVtb3ZlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCWNvbXBvbmVudF9kZWwoJnBkZXYtPmRldiwg Jm10a19kaXNwX3JkbWFfY29tcG9uZW50X29wcyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19kaXNwX3JkbWFfZHJpdmVy X2R0X21hdGNoW10gPSB7Cj4gKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNw LXJkbWEiLCB9LAo+ICsJe30sCj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG10a19k aXNwX3JkbWFfZHJpdmVyX2R0X21hdGNoKTsKPiArCj4gK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIg bXRrX2Rpc3BfcmRtYV9kcml2ZXIgPSB7Cj4gKwkucHJvYmUJCT0gbXRrX2Rpc3BfcmRtYV9wcm9i ZSwKPiArCS5yZW1vdmUJCT0gbXRrX2Rpc3BfcmRtYV9yZW1vdmUsCj4gKwkuZHJpdmVyCQk9IHsK PiArCQkubmFtZQk9ICJtZWRpYXRlay1kaXNwLXJkbWEiLAo+ICsJCS5vd25lcgk9IFRISVNfTU9E VUxFLAo+ICsJCS5vZl9tYXRjaF90YWJsZSA9IG10a19kaXNwX3JkbWFfZHJpdmVyX2R0X21hdGNo LAo+ICsJfSwKPiArfTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19kcm1fY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5jCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5mOGNiNmM2Cj4gLS0tIC9kZXYv bnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuYwo+IEBA IC0wLDAgKzEsNTgyIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJ bmMuCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCj4gKyAqIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiAr ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxhc20vYmFycmllci5oPgo+ICsj aW5jbHVkZSA8ZHJtL2RybVAuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5o Pgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2Ry bV9wbGFuZV9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+ICsjaW5jbHVkZSA8 bGludXgvcG1fcnVudGltZS5oPgo+ICsjaW5jbHVkZSA8c29jL21lZGlhdGVrL3NtaS5oPgo+ICsK PiArI2luY2x1ZGUgIm10a19kcm1fZHJ2LmgiCj4gKyNpbmNsdWRlICJtdGtfZHJtX2NydGMuaCIK PiArI2luY2x1ZGUgIm10a19kcm1fZGRwLmgiCj4gKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21w LmgiCj4gKyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgo+ICsjaW5jbHVkZSAibXRrX2RybV9wbGFu ZS5oIgo+ICsKPiArLyoqCj4gKyAqIHN0cnVjdCBtdGtfZHJtX2NydGMgLSBNZWRpYVRlayBzcGVj aWZpYyBjcnRjIHN0cnVjdHVyZS4KPiArICogQGJhc2U6IGNydGMgb2JqZWN0Lgo+ICsgKiBAZW5h YmxlZDogcmVjb3JkcyB3aGV0aGVyIGNydGNfZW5hYmxlIHN1Y2NlZWRlZAo+ICsgKiBAcGxhbmVz OiBhcnJheSBvZiA0IG10a19kcm1fcGxhbmUgc3RydWN0dXJlcywgb25lIGZvciBlYWNoIG92ZXJs YXkgcGxhbmUKPiArICogQHBlbmRpbmdfcGxhbmVzOiB3aGV0aGVyIGFueSBwbGFuZSBoYXMgcGVu ZGluZyBjaGFuZ2VzIHRvIGJlIGFwcGxpZWQKPiArICogQGNvbmZpZ19yZWdzOiBtZW1vcnkgbWFw cGVkIG1tc3lzIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgc3BhY2UKPiArICogQG11dGV4OiBoYW5k bGUgdG8gb25lIG9mIHRoZSB0ZW4gZGlzcF9tdXRleCBzdHJlYW1zCj4gKyAqIEBkZHBfY29tcF9u cjogbnVtYmVyIG9mIGNvbXBvbmVudHMgaW4gZGRwX2NvbXAKPiArICogQGRkcF9jb21wOiBhcnJh eSBvZiBwb2ludGVycyB0aGUgbXRrX2RkcF9jb21wIHN0cnVjdHVyZXMgdXNlZCBieSB0aGlzIGNy dGMKPiArICovCj4gK3N0cnVjdCBtdGtfZHJtX2NydGMgewo+ICsJc3RydWN0IGRybV9jcnRjCQkJ YmFzZTsKPiArCWJvb2wJCQkJZW5hYmxlZDsKPiArCj4gKwlib29sCQkJCXBlbmRpbmdfbmVlZHNf dmJsYW5rOwo+ICsJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudAkqZXZlbnQ7Cj4gKwo+ ICsJc3RydWN0IG10a19kcm1fcGxhbmUJCXBsYW5lc1tPVkxfTEFZRVJfTlJdOwo+ICsJYm9vbAkJ CQlwZW5kaW5nX3BsYW5lczsKPiArCj4gKwl2b2lkIF9faW9tZW0JCQkqY29uZmlnX3JlZ3M7Cj4g KwlzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXgJCSptdXRleDsKPiArCXVuc2lnbmVkIGludAkJCWRkcF9j b21wX25yOwo+ICsJc3RydWN0IG10a19kZHBfY29tcAkJKipkZHBfY29tcDsKPiArfTsKPiArCj4g K3N0cnVjdCBtdGtfY3J0Y19zdGF0ZSB7Cj4gKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUJCWJhc2U7 Cj4gKwo+ICsJYm9vbAkJCQlwZW5kaW5nX2NvbmZpZzsKPiArCXVuc2lnbmVkIGludAkJCXBlbmRp bmdfd2lkdGg7Cj4gKwl1bnNpZ25lZCBpbnQJCQlwZW5kaW5nX2hlaWdodDsKPiArCXVuc2lnbmVk IGludAkJCXBlbmRpbmdfdnJlZnJlc2g7Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVj dCBtdGtfZHJtX2NydGMgKnRvX210a19jcnRjKHN0cnVjdCBkcm1fY3J0YyAqYykKPiArewo+ICsJ cmV0dXJuIGNvbnRhaW5lcl9vZihjLCBzdHJ1Y3QgbXRrX2RybV9jcnRjLCBiYXNlKTsKPiArfQo+ ICsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX2NydGNfc3RhdGUgKnRvX210a19jcnRjX3N0 YXRlKHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqcykKPiArewo+ICsJcmV0dXJuIGNvbnRhaW5lcl9v ZihzLCBzdHJ1Y3QgbXRrX2NydGNfc3RhdGUsIGJhc2UpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBtdGtfZHJtX2NydGNfZmluaXNoX3BhZ2VfZmxpcChzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtf Y3J0YykKPiArewo+ICsJc3RydWN0IGRybV9jcnRjICpjcnRjID0gJm10a19jcnRjLT5iYXNlOwo+ ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3J0Yy0+ ZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7Cj4gKwlkcm1fc2VuZF92YmxhbmtfZXZlbnQoY3J0Yy0+ ZGV2LCBtdGtfY3J0Yy0+ZXZlbnQtPnBpcGUsIG10a19jcnRjLT5ldmVudCk7Cj4gKwlkcm1fY3J0 Y192YmxhbmtfcHV0KGNydGMpOwo+ICsJbXRrX2NydGMtPmV2ZW50ID0gTlVMTDsKPiArCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmNydGMtPmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBtdGtfZHJtX2ZpbmlzaF9wYWdlX2ZsaXAoc3RydWN0IG10a19kcm1f Y3J0YyAqbXRrX2NydGMpCj4gK3sKPiArCWRybV9jcnRjX2hhbmRsZV92YmxhbmsoJm10a19jcnRj LT5iYXNlKTsKPiArCWlmIChtdGtfY3J0Yy0+cGVuZGluZ19uZWVkc192YmxhbmspIHsKPiArCQlt dGtfZHJtX2NydGNfZmluaXNoX3BhZ2VfZmxpcChtdGtfY3J0Yyk7Cj4gKwkJbXRrX2NydGMtPnBl bmRpbmdfbmVlZHNfdmJsYW5rID0gZmFsc2U7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IG10a19kcm1fY3J0Y19kZXN0cm95KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArewo+ICsJc3Ry dWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0YyhjcnRjKTsKPiArCWludCBp Owo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykKPiAr CQljbGtfdW5wcmVwYXJlKG10a19jcnRjLT5kZHBfY29tcFtpXS0+Y2xrKTsKPiArCj4gKwltdGtf ZGlzcF9tdXRleF9wdXQobXRrX2NydGMtPm11dGV4KTsKPiArCj4gKwlkcm1fY3J0Y19jbGVhbnVw KGNydGMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfcmVzZXQoc3RydWN0 IGRybV9jcnRjICpjcnRjKQo+ICt7Cj4gKwlzdHJ1Y3QgbXRrX2NydGNfc3RhdGUgKnN0YXRlOwo+ ICsKPiArCWlmIChjcnRjLT5zdGF0ZSkgewo+ICsJCWlmIChjcnRjLT5zdGF0ZS0+bW9kZV9ibG9i KQo+ICsJCQlkcm1fcHJvcGVydHlfdW5yZWZlcmVuY2VfYmxvYihjcnRjLT5zdGF0ZS0+bW9kZV9i bG9iKTsKPiArCj4gKwkJc3RhdGUgPSB0b19tdGtfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7Cj4g KwkJbWVtc2V0KHN0YXRlLCAwLCBzaXplb2YoKnN0YXRlKSk7Cj4gKwl9IGVsc2Ugewo+ICsJCXN0 YXRlID0ga3phbGxvYyhzaXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7Cj4gKwkJaWYgKCFzdGF0 ZSkKPiArCQkJcmV0dXJuOwo+ICsJCWNydGMtPnN0YXRlID0gJnN0YXRlLT5iYXNlOwo+ICsJfQo+ ICsKPiArCXN0YXRlLT5iYXNlLmNydGMgPSBjcnRjOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0 IGRybV9jcnRjX3N0YXRlICptdGtfZHJtX2NydGNfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YykKPiArewo+ICsJc3RydWN0IG10a19jcnRjX3N0YXRlICpzdGF0ZTsKPiArCj4g KwlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFz dGF0ZSkKPiArCQlyZXR1cm4gTlVMTDsKPiArCj4gKwlfX2RybV9hdG9taWNfaGVscGVyX2NydGNf ZHVwbGljYXRlX3N0YXRlKGNydGMsICZzdGF0ZS0+YmFzZSk7Cj4gKwo+ICsJV0FSTl9PTihzdGF0 ZS0+YmFzZS5jcnRjICE9IGNydGMpOwo+ICsJc3RhdGUtPmJhc2UuY3J0YyA9IGNydGM7Cj4gKwo+ ICsJcmV0dXJuICZzdGF0ZS0+YmFzZTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbXRrX2RybV9j cnRjX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICsJCQkJICAgICAgIHN0 cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCj4gK3sKPiArCV9fZHJtX2F0b21pY19oZWxwZXJf Y3J0Y19kZXN0cm95X3N0YXRlKGNydGMsIHN0YXRlKTsKPiArCWtmcmVlKHRvX210a19jcnRjX3N0 YXRlKHN0YXRlKSk7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIG10a19kcm1fY3J0Y19tb2RlX2Zp eHVwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiArCQkJCSAgICBjb25zdCBzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSAqbW9kZSwKPiArCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRq dXN0ZWRfbW9kZSkKPiArewo+ICsJLyogTm90aGluZyB0byBkbyBoZXJlLCBidXQgdGhpcyBjYWxs YmFjayBpcyBtYW5kYXRvcnkuICovCj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgbXRrX2RybV9jcnRjX21vZGVfc2V0X25vZmIoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ ICt7Cj4gKwlzdHJ1Y3QgbXRrX2NydGNfc3RhdGUgKnN0YXRlID0gdG9fbXRrX2NydGNfc3RhdGUo Y3J0Yy0+c3RhdGUpOwo+ICsKPiArCXN0YXRlLT5wZW5kaW5nX3dpZHRoID0gY3J0Yy0+bW9kZS5o ZGlzcGxheTsKPiArCXN0YXRlLT5wZW5kaW5nX2hlaWdodCA9IGNydGMtPm1vZGUudmRpc3BsYXk7 Cj4gKwlzdGF0ZS0+cGVuZGluZ192cmVmcmVzaCA9IGNydGMtPm1vZGUudnJlZnJlc2g7Cj4gKwl3 bWIoKTsJLyogTWFrZSBzdXJlIHRoZSBhYm92ZSBwYXJhbWV0ZXJzIGFyZSBzZXQgYmVmb3JlIHVw ZGF0ZSAqLwo+ICsJc3RhdGUtPnBlbmRpbmdfY29uZmlnID0gdHJ1ZTsKPiArfQo+ICsKPiAraW50 IG10a19kcm1fY3J0Y19lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHVuc2ln bmVkIGludCBwaXBlKQo+ICt7Cj4gKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2ID0gZHJt LT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRr X2NydGMocHJpdi0+Y3J0Y1twaXBlXSk7Cj4gKwlzdHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwgPSBt dGtfY3J0Yy0+ZGRwX2NvbXBbMF07Cj4gKwo+ICsJbXRrX2RkcF9jb21wX2VuYWJsZV92Ymxhbmso b3ZsLCAmbXRrX2NydGMtPmJhc2UpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICt2b2lk IG10a19kcm1fY3J0Y19kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNp Z25lZCBpbnQgcGlwZSkKPiArewo+ICsJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdiA9IGRy bS0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210 a19jcnRjKHByaXYtPmNydGNbcGlwZV0pOwo+ICsJc3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0g bXRrX2NydGMtPmRkcF9jb21wWzBdOwo+ICsKPiArCW10a19kZHBfY29tcF9kaXNhYmxlX3ZibGFu ayhvdmwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG10a19jcnRjX2RkcF9jbGtfZW5hYmxlKHN0 cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsJaW50IGk7 Cj4gKwo+ICsJRFJNX0RFQlVHX0RSSVZFUigiJXNcbiIsIF9fZnVuY19fKTsKPiArCWZvciAoaSA9 IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykgewo+ICsJCXJldCA9IGNsa19lbmFi bGUobXRrX2NydGMtPmRkcF9jb21wW2ldLT5jbGspOwo+ICsJCWlmIChyZXQpIHsKPiArCQkJRFJN X0VSUk9SKCJGYWlsZWQgdG8gZW5hYmxlIGNsb2NrICVkOiAlZFxuIiwgaSwgcmV0KTsKPiArCQkJ Z290byBlcnI7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICtlcnI6Cj4gKwl3aGls ZSAoLS1pID49IDApCj4gKwkJY2xrX2Rpc2FibGUobXRrX2NydGMtPmRkcF9jb21wW2ldLT5jbGsp Owo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbXRrX2NydGNfZGRwX2Ns a19kaXNhYmxlKHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjKQo+ICt7Cj4gKwlpbnQgaTsK PiArCj4gKwlEUk1fREVCVUdfRFJJVkVSKCIlc1xuIiwgX19mdW5jX18pOwo+ICsJZm9yIChpID0g MDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKQo+ICsJCWNsa19kaXNhYmxlKG10a19j cnRjLT5kZHBfY29tcFtpXS0+Y2xrKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBtdGtfY3J0Y19k ZHBfaHdfaW5pdChzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YykKPiArewo+ICsJc3RydWN0 IGRybV9jcnRjICpjcnRjID0gJm10a19jcnRjLT5iYXNlOwo+ICsJdW5zaWduZWQgaW50IHdpZHRo LCBoZWlnaHQsIHZyZWZyZXNoOwo+ICsJaW50IHJldDsKPiArCWludCBpOwo+ICsKPiArCURSTV9E RUJVR19EUklWRVIoIiVzXG4iLCBfX2Z1bmNfXyk7Cj4gKwlpZiAoV0FSTl9PTighY3J0Yy0+c3Rh dGUpKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCXdpZHRoID0gY3J0Yy0+c3RhdGUtPmFk anVzdGVkX21vZGUuaGRpc3BsYXk7Cj4gKwloZWlnaHQgPSBjcnRjLT5zdGF0ZS0+YWRqdXN0ZWRf bW9kZS52ZGlzcGxheTsKPiArCXZyZWZyZXNoID0gY3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGUu dnJlZnJlc2g7Cj4gKwo+ICsJcmV0ID0gcG1fcnVudGltZV9nZXRfc3luYyhjcnRjLT5kZXYtPmRl dik7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIGVuYWJsZSBw b3dlciBkb21haW46ICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJ cmV0ID0gbXRrX2Rpc3BfbXV0ZXhfcHJlcGFyZShtdGtfY3J0Yy0+bXV0ZXgpOwo+ICsJaWYgKHJl dCA8IDApIHsKPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byBlbmFibGUgbXV0ZXggY2xvY2s6ICVk XG4iLCByZXQpOwo+ICsJCWdvdG8gZXJyX3BtX3J1bnRpbWVfcHV0Owo+ICsJfQo+ICsKPiArCXJl dCA9IG10a19jcnRjX2RkcF9jbGtfZW5hYmxlKG10a19jcnRjKTsKPiArCWlmIChyZXQgPCAwKSB7 Cj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZW5hYmxlIGNvbXBvbmVudCBjbG9ja3M6ICVkXG4i LCByZXQpOwo+ICsJCWdvdG8gZXJyX211dGV4X3VucHJlcGFyZTsKPiArCX0KPiArCj4gKwlEUk1f REVCVUdfRFJJVkVSKCJtZWRpYXRla19kZHBfZGRwX3BhdGhfc2V0dXBcbiIpOwo+ICsJZm9yIChp ID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9uciAtIDE7IGkrKykgewo+ICsJCW10a19kZHBf YWRkX2NvbXBfdG9fcGF0aChtdGtfY3J0Yy0+Y29uZmlnX3JlZ3MsCj4gKwkJCQkJIG10a19jcnRj LT5kZHBfY29tcFtpXS0+aWQsCj4gKwkJCQkJIG10a19jcnRjLT5kZHBfY29tcFtpICsgMV0tPmlk KTsKPiArCQltdGtfZGlzcF9tdXRleF9hZGRfY29tcChtdGtfY3J0Yy0+bXV0ZXgsCj4gKwkJCQkJ bXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCk7Cj4gKwl9Cj4gKwltdGtfZGlzcF9tdXRleF9hZGRf Y29tcChtdGtfY3J0Yy0+bXV0ZXgsIG10a19jcnRjLT5kZHBfY29tcFtpXS0+aWQpOwo+ICsJbXRr X2Rpc3BfbXV0ZXhfZW5hYmxlKG10a19jcnRjLT5tdXRleCk7Cj4gKwo+ICsJZm9yIChpID0gMDsg aSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKSB7Cj4gKwkJc3RydWN0IG10a19kZHBfY29t cCAqY29tcCA9IG10a19jcnRjLT5kZHBfY29tcFtpXTsKPiArCj4gKwkJbXRrX2RkcF9jb21wX2Nv bmZpZyhjb21wLCB3aWR0aCwgaGVpZ2h0LCB2cmVmcmVzaCk7Cj4gKwkJbXRrX2RkcF9jb21wX3N0 YXJ0KGNvbXApOwo+ICsJfQo+ICsKPiArCS8qIEluaXRpYWxseSBjb25maWd1cmUgYWxsIHBsYW5l cyAqLwo+ICsJZm9yIChpID0gMDsgaSA8IE9WTF9MQVlFUl9OUjsgaSsrKSB7Cj4gKwkJc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUgPSAmbXRrX2NydGMtPnBsYW5lc1tpXS5iYXNlOwo+ICsJCXN0cnVj dCBtdGtfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOwo+ICsKPiArCQlwbGFuZV9zdGF0ZSA9IHRv X210a19wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOwo+ICsJCW10a19kZHBfY29tcF9sYXllcl9j b25maWcobXRrX2NydGMtPmRkcF9jb21wWzBdLCBpLAo+ICsJCQkJCSAgcGxhbmVfc3RhdGUpOwo+ ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArZXJyX211dGV4X3VucHJlcGFyZToKPiArCW10 a19kaXNwX211dGV4X3VucHJlcGFyZShtdGtfY3J0Yy0+bXV0ZXgpOwo+ICtlcnJfcG1fcnVudGlt ZV9wdXQ6Cj4gKwlwbV9ydW50aW1lX3B1dChjcnRjLT5kZXYtPmRldik7Cj4gKwlyZXR1cm4gcmV0 Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfY3J0Y19kZHBfaHdfZmluaShzdHJ1Y3QgbXRr X2RybV9jcnRjICptdGtfY3J0YykKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IG10 a19jcnRjLT5iYXNlLmRldjsKPiArCWludCBpOwo+ICsKPiArCURSTV9ERUJVR19EUklWRVIoIiVz XG4iLCBfX2Z1bmNfXyk7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25y OyBpKyspCj4gKwkJbXRrX2RkcF9jb21wX3N0b3AobXRrX2NydGMtPmRkcF9jb21wW2ldKTsKPiAr CWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykKPiArCQltdGtfZGlz cF9tdXRleF9yZW1vdmVfY29tcChtdGtfY3J0Yy0+bXV0ZXgsCj4gKwkJCQkJICAgbXRrX2NydGMt PmRkcF9jb21wW2ldLT5pZCk7Cj4gKwltdGtfZGlzcF9tdXRleF9kaXNhYmxlKG10a19jcnRjLT5t dXRleCk7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yIC0gMTsgaSsr KSB7Cj4gKwkJbXRrX2RkcF9yZW1vdmVfY29tcF9mcm9tX3BhdGgobXRrX2NydGMtPmNvbmZpZ19y ZWdzLAo+ICsJCQkJCSAgICAgIG10a19jcnRjLT5kZHBfY29tcFtpXS0+aWQsCj4gKwkJCQkJICAg ICAgbXRrX2NydGMtPmRkcF9jb21wW2kgKyAxXS0+aWQpOwo+ICsJCW10a19kaXNwX211dGV4X3Jl bW92ZV9jb21wKG10a19jcnRjLT5tdXRleCwKPiArCQkJCQkgICBtdGtfY3J0Yy0+ZGRwX2NvbXBb aV0tPmlkKTsKPiArCX0KPiArCW10a19kaXNwX211dGV4X3JlbW92ZV9jb21wKG10a19jcnRjLT5t dXRleCwgbXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCk7Cj4gKwltdGtfY3J0Y19kZHBfY2xrX2Rp c2FibGUobXRrX2NydGMpOwo+ICsJbXRrX2Rpc3BfbXV0ZXhfdW5wcmVwYXJlKG10a19jcnRjLT5t dXRleCk7Cj4gKwo+ICsJcG1fcnVudGltZV9wdXQoZHJtLT5kZXYpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBtdGtfZHJtX2NydGNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArewo+ ICsJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0YyhjcnRjKTsKPiAr CXN0cnVjdCBtdGtfZGRwX2NvbXAgKm92bCA9IG10a19jcnRjLT5kZHBfY29tcFswXTsKPiArCWlu dCByZXQ7Cj4gKwo+ICsJRFJNX0RFQlVHX0RSSVZFUigiJXMgJWRcbiIsIF9fZnVuY19fLCBjcnRj LT5iYXNlLmlkKTsKPiArCj4gKwlyZXQgPSBtdGtfc21pX2xhcmJfZ2V0KG92bC0+bGFyYl9kZXYp Owo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIGdldCBsYXJiOiAlZFxu IiwgcmV0KTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gbXRrX2NydGNfZGRwX2h3 X2luaXQobXRrX2NydGMpOwo+ICsJaWYgKHJldCkgewo+ICsJCW10a19zbWlfbGFyYl9wdXQob3Zs LT5sYXJiX2Rldik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWRybV9jcnRjX3ZibGFua19v bihjcnRjKTsKPiArCW10a19jcnRjLT5lbmFibGVkID0gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgbXRrX2RybV9jcnRjX2Rpc2FibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICt7Cj4g KwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKGNydGMpOwo+ICsJ c3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gbXRrX2NydGMtPmRkcF9jb21wWzBdOwo+ICsJaW50 IGk7Cj4gKwo+ICsJRFJNX0RFQlVHX0RSSVZFUigiJXMgJWRcbiIsIF9fZnVuY19fLCBjcnRjLT5i YXNlLmlkKTsKPiArCWlmICghbXRrX2NydGMtPmVuYWJsZWQpCj4gKwkJcmV0dXJuOwo+ICsKPiAr CS8qIFNldCBhbGwgcGVuZGluZyBwbGFuZSBzdGF0ZSB0byBkaXNhYmxlZCAqLwo+ICsJZm9yIChp ID0gMDsgaSA8IE9WTF9MQVlFUl9OUjsgaSsrKSB7Cj4gKwkJc3RydWN0IGRybV9wbGFuZSAqcGxh bmUgPSAmbXRrX2NydGMtPnBsYW5lc1tpXS5iYXNlOwo+ICsJCXN0cnVjdCBtdGtfcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlOwo+ICsKPiArCQlwbGFuZV9zdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0 ZShwbGFuZS0+c3RhdGUpOwo+ICsJCXBsYW5lX3N0YXRlLT5wZW5kaW5nLmVuYWJsZSA9IGZhbHNl Owo+ICsJCXBsYW5lX3N0YXRlLT5wZW5kaW5nLmNvbmZpZyA9IHRydWU7Cj4gKwl9Cj4gKwltdGtf Y3J0Yy0+cGVuZGluZ19wbGFuZXMgPSB0cnVlOwo+ICsKPiArCS8qIFdhaXQgZm9yIHBsYW5lcyB0 byBiZSBkaXNhYmxlZCAqLwo+ICsJZHJtX2NydGNfd2FpdF9vbmVfdmJsYW5rKGNydGMpOwo+ICsK PiArCWRybV9jcnRjX3ZibGFua19vZmYoY3J0Yyk7Cj4gKwltdGtfY3J0Y19kZHBfaHdfZmluaSht dGtfY3J0Yyk7Cj4gKwltdGtfc21pX2xhcmJfcHV0KG92bC0+bGFyYl9kZXYpOwo+ICsKPiArCW10 a19jcnRjLT5lbmFibGVkID0gZmFsc2U7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG10a19kcm1f Y3J0Y19hdG9taWNfYmVnaW4oc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICsJCQkJICAgICAgc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSkKPiArewo+ICsJc3RydWN0IG10a19j cnRjX3N0YXRlICpzdGF0ZSA9IHRvX210a19jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKPiArCXN0 cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMoY3J0Yyk7Cj4gKwo+ICsJ aWYgKG10a19jcnRjLT5ldmVudCAmJiBzdGF0ZS0+YmFzZS5ldmVudCkKPiArCQlEUk1fRVJST1Io Im5ldyBldmVudCB3aGlsZSB0aGVyZSBpcyBzdGlsbCBhIHBlbmRpbmcgZXZlbnRcbiIpOwo+ICsK PiArCWlmIChzdGF0ZS0+YmFzZS5ldmVudCkgewo+ICsJCXN0YXRlLT5iYXNlLmV2ZW50LT5waXBl ID0gZHJtX2NydGNfaW5kZXgoY3J0Yyk7Cj4gKwkJV0FSTl9PTihkcm1fY3J0Y192YmxhbmtfZ2V0 KGNydGMpICE9IDApOwo+ICsJCW10a19jcnRjLT5ldmVudCA9IHN0YXRlLT5iYXNlLmV2ZW50Owo+ ICsJCXN0YXRlLT5iYXNlLmV2ZW50ID0gTlVMTDsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZv aWQgbXRrX2RybV9jcnRjX2F0b21pY19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gKwkJ CQkgICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKQo+ICt7Cj4gKwlz dHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKGNydGMpOwo+ICsJdW5z aWduZWQgaW50IHBlbmRpbmdfcGxhbmVzID0gMDsKPiArCWludCBpOwo+ICsKPiArCWlmIChtdGtf Y3J0Yy0+ZXZlbnQpCj4gKwkJbXRrX2NydGMtPnBlbmRpbmdfbmVlZHNfdmJsYW5rID0gdHJ1ZTsK PiArCWZvciAoaSA9IDA7IGkgPCBPVkxfTEFZRVJfTlI7IGkrKykgewo+ICsJCXN0cnVjdCBkcm1f cGxhbmUgKnBsYW5lID0gJm10a19jcnRjLT5wbGFuZXNbaV0uYmFzZTsKPiArCQlzdHJ1Y3QgbXRr X3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKPiArCj4gKwkJcGxhbmVfc3RhdGUgPSB0b19tdGtf cGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKPiArCQlpZiAocGxhbmVfc3RhdGUtPnBlbmRpbmcu ZGlydHkpIHsKPiArCQkJcGxhbmVfc3RhdGUtPnBlbmRpbmcuY29uZmlnID0gdHJ1ZTsKPiArCQkJ cGxhbmVfc3RhdGUtPnBlbmRpbmcuZGlydHkgPSBmYWxzZTsKPiArCQkJcGVuZGluZ19wbGFuZXMg fD0gQklUKGkpOwo+ICsJCX0KPiArCX0KPiArCWlmIChwZW5kaW5nX3BsYW5lcykKPiArCQltdGtf Y3J0Yy0+cGVuZGluZ19wbGFuZXMgPSB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9jcnRjX2Z1bmNzIG10a19jcnRjX2Z1bmNzID0gewo+ICsJLnNldF9jb25maWcJCT0g ZHJtX2F0b21pY19oZWxwZXJfc2V0X2NvbmZpZywKPiArCS5wYWdlX2ZsaXAJCT0gZHJtX2F0b21p Y19oZWxwZXJfcGFnZV9mbGlwLAo+ICsJLmRlc3Ryb3kJCT0gbXRrX2RybV9jcnRjX2Rlc3Ryb3ks Cj4gKwkucmVzZXQJCQk9IG10a19kcm1fY3J0Y19yZXNldCwKPiArCS5hdG9taWNfZHVwbGljYXRl X3N0YXRlCT0gbXRrX2RybV9jcnRjX2R1cGxpY2F0ZV9zdGF0ZSwKPiArCS5hdG9taWNfZGVzdHJv eV9zdGF0ZQk9IG10a19kcm1fY3J0Y19kZXN0cm95X3N0YXRlLAo+ICt9Owo+ICsKPiArc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgbXRrX2NydGNfaGVscGVyX2Z1bmNz ID0gewo+ICsJLm1vZGVfZml4dXAJPSBtdGtfZHJtX2NydGNfbW9kZV9maXh1cCwKPiArCS5tb2Rl X3NldF9ub2ZiCT0gbXRrX2RybV9jcnRjX21vZGVfc2V0X25vZmIsCj4gKwkuZW5hYmxlCQk9IG10 a19kcm1fY3J0Y19lbmFibGUsCj4gKwkuZGlzYWJsZQk9IG10a19kcm1fY3J0Y19kaXNhYmxlLAo+ ICsJLmF0b21pY19iZWdpbgk9IG10a19kcm1fY3J0Y19hdG9taWNfYmVnaW4sCj4gKwkuYXRvbWlj X2ZsdXNoCT0gbXRrX2RybV9jcnRjX2F0b21pY19mbHVzaCwKPiArfTsKPiArCj4gK3N0YXRpYyBp bnQgbXRrX2RybV9jcnRjX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwKPiArCQkJICAgICBz dHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YywKPiArCQkJICAgICBzdHJ1Y3QgZHJtX3BsYW5l ICpwcmltYXJ5LAo+ICsJCQkgICAgIHN0cnVjdCBkcm1fcGxhbmUgKmN1cnNvciwgdW5zaWduZWQg aW50IHBpcGUpCj4gK3sKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gZHJtX2NydGNfaW5pdF93 aXRoX3BsYW5lcyhkcm0sICZtdGtfY3J0Yy0+YmFzZSwgcHJpbWFyeSwgY3Vyc29yLAo+ICsJCQkJ CSZtdGtfY3J0Y19mdW5jcywgTlVMTCk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXJyX2NsZWFu dXBfY3J0YzsKPiArCj4gKwlkcm1fY3J0Y19oZWxwZXJfYWRkKCZtdGtfY3J0Yy0+YmFzZSwgJm10 a19jcnRjX2hlbHBlcl9mdW5jcyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnJfY2xlYW51 cF9jcnRjOgo+ICsJZHJtX2NydGNfY2xlYW51cCgmbXRrX2NydGMtPmJhc2UpOwo+ICsJcmV0dXJu IHJldDsKPiArfQo+ICsKPiArdm9pZCBtdGtfY3J0Y19kZHBfaXJxKHN0cnVjdCBkcm1fY3J0YyAq Y3J0Yywgc3RydWN0IG10a19kZHBfY29tcCAqb3ZsKQo+ICt7Cj4gKwlzdHJ1Y3QgbXRrX2RybV9j cnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKGNydGMpOwo+ICsJc3RydWN0IG10a19jcnRjX3N0 YXRlICpzdGF0ZSA9IHRvX210a19jcnRjX3N0YXRlKG10a19jcnRjLT5iYXNlLnN0YXRlKTsKPiAr CXVuc2lnbmVkIGludCBpOwo+ICsKPiArCS8qCj4gKwkgKiBUT0RPOiBpbnN0ZWFkIG9mIHVwZGF0 aW5nIHRoZSByZWdpc3RlcnMgaGVyZSwgd2Ugc2hvdWxkIHByZXBhcmUKPiArCSAqIHdvcmtpbmcg cmVnaXN0ZXJzIGluIGF0b21pY19jb21taXQgYW5kIGxldCB0aGUgaGFyZHdhcmUgY29tbWFuZAo+ ICsJICogcXVldWUgdXBkYXRlIG1vZHVsZSByZWdpc3RlcnMgb24gdmJsYW5rLgo+ICsJICovCj4g KwlpZiAoc3RhdGUtPnBlbmRpbmdfY29uZmlnKSB7Cj4gKwkJbXRrX2RkcF9jb21wX2NvbmZpZyhv dmwsIHN0YXRlLT5wZW5kaW5nX3dpZHRoLAo+ICsJCQkJICAgIHN0YXRlLT5wZW5kaW5nX2hlaWdo dCwKPiArCQkJCSAgICBzdGF0ZS0+cGVuZGluZ192cmVmcmVzaCk7Cj4gKwo+ICsJCXN0YXRlLT5w ZW5kaW5nX2NvbmZpZyA9IGZhbHNlOwo+ICsJfQo+ICsKPiArCWlmIChtdGtfY3J0Yy0+cGVuZGlu Z19wbGFuZXMpIHsKPiArCQlmb3IgKGkgPSAwOyBpIDwgT1ZMX0xBWUVSX05SOyBpKyspIHsKPiAr CQkJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSAmbXRrX2NydGMtPnBsYW5lc1tpXS5iYXNlOwo+ ICsJCQlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKPiArCj4gKwkJCXBsYW5l X3N0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7Cj4gKwo+ICsJCQlpZiAo cGxhbmVfc3RhdGUtPnBlbmRpbmcuY29uZmlnKSB7Cj4gKwkJCQltdGtfZGRwX2NvbXBfbGF5ZXJf Y29uZmlnKG92bCwgaSwgcGxhbmVfc3RhdGUpOwo+ICsJCQkJcGxhbmVfc3RhdGUtPnBlbmRpbmcu Y29uZmlnID0gZmFsc2U7Cj4gKwkJCX0KPiArCQl9Cj4gKwkJbXRrX2NydGMtPnBlbmRpbmdfcGxh bmVzID0gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJbXRrX2RybV9maW5pc2hfcGFnZV9mbGlwKG10a19j cnRjKTsKPiArfQo+ICsKPiAraW50IG10a19kcm1fY3J0Y19jcmVhdGUoc3RydWN0IGRybV9kZXZp Y2UgKmRybV9kZXYsCj4gKwkJCWNvbnN0IGVudW0gbXRrX2RkcF9jb21wX2lkICpwYXRoLCB1bnNp Z25lZCBpbnQgcGF0aF9sZW4pCj4gK3sKPiArCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXYg PSBkcm1fZGV2LT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRybV9kZXYt PmRldjsKPiArCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjOwo+ICsJZW51bSBkcm1fcGxh bmVfdHlwZSB0eXBlOwo+ICsJdW5zaWduZWQgaW50IHpwb3M7Cj4gKwlpbnQgcGlwZSA9IHByaXYt Pm51bV9waXBlczsKPiArCWludCByZXQ7Cj4gKwlpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBp IDwgcGF0aF9sZW47IGkrKykgewo+ICsJCWVudW0gbXRrX2RkcF9jb21wX2lkIGNvbXBfaWQgPSBw YXRoW2ldOwo+ICsJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKPiArCj4gKwkJbm9kZSA9IHBy aXYtPmNvbXBfbm9kZVtjb21wX2lkXTsKPiArCQlpZiAoIW5vZGUpIHsKPiArCQkJZGV2X2luZm8o ZGV2LAo+ICsJCQkJICJOb3QgY3JlYXRpbmcgY3J0YyAlZCBiZWNhdXNlIGNvbXBvbmVudCAlZCBp cyBkaXNhYmxlZCBvciBtaXNzaW5nXG4iLAo+ICsJCQkJIHBpcGUsIGNvbXBfaWQpOwo+ICsJCQly ZXR1cm4gMDsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJbXRrX2NydGMgPSBkZXZtX2t6YWxsb2MoZGV2 LCBzaXplb2YoKm10a19jcnRjKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIW10a19jcnRjKQo+ICsJ CXJldHVybiAtRU5PTUVNOwo+ICsKPiArCW10a19jcnRjLT5jb25maWdfcmVncyA9IHByaXYtPmNv bmZpZ19yZWdzOwo+ICsJbXRrX2NydGMtPmRkcF9jb21wX25yID0gcGF0aF9sZW47Cj4gKwltdGtf Y3J0Yy0+ZGRwX2NvbXAgPSBkZXZtX2ttYWxsb2NfYXJyYXkoZGV2LCBtdGtfY3J0Yy0+ZGRwX2Nv bXBfbnIsCj4gKwkJCQkJCXNpemVvZigqbXRrX2NydGMtPmRkcF9jb21wKSwKPiArCQkJCQkJR0ZQ X0tFUk5FTCk7Cj4gKwo+ICsJbXRrX2NydGMtPm11dGV4ID0gbXRrX2Rpc3BfbXV0ZXhfZ2V0KHBy aXYtPm11dGV4X2RldiwgcGlwZSk7Cj4gKwlpZiAoSVNfRVJSKG10a19jcnRjLT5tdXRleCkpIHsK PiArCQlyZXQgPSBQVFJfRVJSKG10a19jcnRjLT5tdXRleCk7Cj4gKwkJZGV2X2VycihkZXYsICJG YWlsZWQgdG8gZ2V0IG11dGV4OiAlZFxuIiwgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ ICsKPiArCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykgewo+ICsJ CWVudW0gbXRrX2RkcF9jb21wX2lkIGNvbXBfaWQgPSBwYXRoW2ldOwo+ICsJCXN0cnVjdCBtdGtf ZGRwX2NvbXAgKmNvbXA7Cj4gKwkJc3RydWN0IGRldmljZV9ub2RlICpub2RlOwo+ICsKPiArCQlu b2RlID0gcHJpdi0+Y29tcF9ub2RlW2NvbXBfaWRdOwo+ICsJCWNvbXAgPSBwcml2LT5kZHBfY29t cFtjb21wX2lkXTsKPiArCQlpZiAoIWNvbXApIHsKPiArCQkJZGV2X2VycihkZXYsICJDb21wb25l bnQgJXMgbm90IGluaXRpYWxpemVkXG4iLAo+ICsJCQkJbm9kZS0+ZnVsbF9uYW1lKTsKPiArCQkJ cmV0ID0gLUVOT0RFVjsKPiArCQkJZ290byB1bnByZXBhcmU7Cj4gKwkJfQo+ICsKPiArCQlyZXQg PSBjbGtfcHJlcGFyZShjb21wLT5jbGspOwo+ICsJCWlmIChyZXQpIHsKPiArCQkJZGV2X2Vycihk ZXYsCj4gKwkJCQkiRmFpbGVkIHRvIHByZXBhcmUgY2xvY2sgZm9yIGNvbXBvbmVudCAlczogJWRc biIsCj4gKwkJCQlub2RlLT5mdWxsX25hbWUsIHJldCk7Cj4gKwkJCWdvdG8gdW5wcmVwYXJlOwo+ ICsJCX0KPiArCj4gKwkJbXRrX2NydGMtPmRkcF9jb21wW2ldID0gY29tcDsKPiArCX0KPiArCj4g Kwlmb3IgKHpwb3MgPSAwOyB6cG9zIDwgT1ZMX0xBWUVSX05SOyB6cG9zKyspIHsKPiArCQl0eXBl ID0gKHpwb3MgPT0gMCkgPyBEUk1fUExBTkVfVFlQRV9QUklNQVJZIDoKPiArCQkJCSh6cG9zID09 IDEpID8gRFJNX1BMQU5FX1RZUEVfQ1VSU09SIDoKPiArCQkJCQkJRFJNX1BMQU5FX1RZUEVfT1ZF UkxBWTsKPiArCQlyZXQgPSBtdGtfcGxhbmVfaW5pdChkcm1fZGV2LCAmbXRrX2NydGMtPnBsYW5l c1t6cG9zXSwKPiArCQkJCSAgICAgQklUKHBpcGUpLCB0eXBlLCB6cG9zKTsKPiArCQlpZiAocmV0 KQo+ICsJCQlnb3RvIHVucHJlcGFyZTsKPiArCX0KPiArCj4gKwlyZXQgPSBtdGtfZHJtX2NydGNf aW5pdChkcm1fZGV2LCBtdGtfY3J0YywgJm10a19jcnRjLT5wbGFuZXNbMF0uYmFzZSwKPiArCQkJ CSZtdGtfY3J0Yy0+cGxhbmVzWzFdLmJhc2UsIHBpcGUpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJ Z290byB1bnByZXBhcmU7Cj4gKwo+ICsJcHJpdi0+Y3J0Y1twaXBlXSA9ICZtdGtfY3J0Yy0+YmFz ZTsKPiArCXByaXYtPm51bV9waXBlcysrOwo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArdW5wcmVw YXJlOgo+ICsJd2hpbGUgKC0taSA+PSAwKQo+ICsJCWNsa191bnByZXBhcmUobXRrX2NydGMtPmRk cF9jb21wW2ldLT5jbGspOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5oIGIvZHJpdmVycy9ncHUvZHJt L21lZGlhdGVrL210a19kcm1fY3J0Yy5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAw MDAwMDAwLi44MWU1NTY2Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZHJtX2NydGMuaAo+IEBAIC0wLDAgKzEsMzIgQEAKPiArLyoKPiArICogQ29w eXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiAr ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2 ZXJzaW9uIDIgYXMKPiArICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4gKyAqIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqLwo+ICsKPiArI2lm bmRlZiBNVEtfRFJNX0NSVENfSAo+ICsjZGVmaW5lIE1US19EUk1fQ1JUQ19ICj4gKwo+ICsjaW5j bHVkZSA8ZHJtL2RybV9jcnRjLmg+Cj4gKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCj4g KyNpbmNsdWRlICJtdGtfZHJtX3BsYW5lLmgiCj4gKwo+ICsjZGVmaW5lIE9WTF9MQVlFUl9OUgk0 Cj4gKwo+ICtpbnQgbXRrX2RybV9jcnRjX2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2Ug KmRybSwgdW5zaWduZWQgaW50IHBpcGUpOwo+ICt2b2lkIG10a19kcm1fY3J0Y19kaXNhYmxlX3Zi bGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBpbnQgcGlwZSk7Cj4gK3ZvaWQg bXRrX2RybV9jcnRjX2NoZWNrX2ZsdXNoKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cj4gK3ZvaWQg bXRrX2RybV9jcnRjX2NvbW1pdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwo+ICt2b2lkIG10a19j cnRjX2RkcF9pcnEoc3RydWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3QgbXRrX2RkcF9jb21wICpv dmwpOwo+ICtpbnQgbXRrX2RybV9jcnRjX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2Rl diwKPiArCQkJY29uc3QgZW51bSBtdGtfZGRwX2NvbXBfaWQgKnBhdGgsCj4gKwkJCXVuc2lnbmVk IGludCBwYXRoX2xlbik7Cj4gKwo+ICsjZW5kaWYgLyogTVRLX0RSTV9DUlRDX0ggKi8KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmMgYi9kcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMC4uMTdiYTkzNTUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmMKPiBAQCAtMCwwICsxLDM1MyBAQAo+ICsvKgo+ ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgo+ICsgKgo+ICsgKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQo+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIHZlcnNpb24gMiBhcwo+ICsgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbi4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiAr ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICovCj4g Kwo+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K PiArI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZv cm1fZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KPiArCj4gKyNpbmNsdWRl ICJtdGtfZHJtX2RkcC5oIgo+ICsjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgo+ICsKPiAr I2RlZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9PVkwwX01PVVRfRU4JMHgwNDAKPiArI2RlZmlu ZSBESVNQX1JFR19DT05GSUdfRElTUF9PVkwxX01PVVRfRU4JMHgwNDQKPiArI2RlZmluZSBESVNQ X1JFR19DT05GSUdfRElTUF9PRF9NT1VUX0VOCQkweDA0OAo+ICsjZGVmaW5lIERJU1BfUkVHX0NP TkZJR19ESVNQX0dBTU1BX01PVVRfRU4JMHgwNGMKPiArI2RlZmluZSBESVNQX1JFR19DT05GSUdf RElTUF9VRk9FX01PVVRfRU4JMHgwNTAKPiArI2RlZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9D T0xPUjBfU0VMX0lOCTB4MDg0Cj4gKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfQ09MT1Ix X1NFTF9JTgkweDA4OAo+ICsjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19EUElfU0VMX0lOCQkweDBh Ywo+ICsjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX1JETUExX01PVVRfRU4JMHgwYzgKPiAr I2RlZmluZSBESVNQX1JFR19DT05GSUdfTU1TWVNfQ0dfQ09OMAkJMHgxMDAKPiArCj4gKyNkZWZp bmUgRElTUF9SRUdfTVVURVhfRU4obikJKDB4MjAgKyAweDIwICogKG4pKQo+ICsjZGVmaW5lIERJ U1BfUkVHX01VVEVYX1JTVChuKQkoMHgyOCArIDB4MjAgKiAobikpCj4gKyNkZWZpbmUgRElTUF9S RUdfTVVURVhfTU9EKG4pCSgweDJjICsgMHgyMCAqIChuKSkKPiArI2RlZmluZSBESVNQX1JFR19N VVRFWF9TT0YobikJKDB4MzAgKyAweDIwICogKG4pKQo+ICsKPiArI2RlZmluZSBNVVRFWF9NT0Rf RElTUF9PVkwwCQlCSVQoMTEpCj4gKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfT1ZMMQkJQklUKDEy KQo+ICsjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1JETUEwCQlCSVQoMTMpCj4gKyNkZWZpbmUgTVVU RVhfTU9EX0RJU1BfUkRNQTEJCUJJVCgxNCkKPiArI2RlZmluZSBNVVRFWF9NT0RfRElTUF9SRE1B MgkJQklUKDE1KQo+ICsjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1dETUEwCQlCSVQoMTYpCj4gKyNk ZWZpbmUgTVVURVhfTU9EX0RJU1BfV0RNQTEJCUJJVCgxNykKPiArI2RlZmluZSBNVVRFWF9NT0Rf RElTUF9DT0xPUjAJCUJJVCgxOCkKPiArI2RlZmluZSBNVVRFWF9NT0RfRElTUF9DT0xPUjEJCUJJ VCgxOSkKPiArI2RlZmluZSBNVVRFWF9NT0RfRElTUF9BQUwJCUJJVCgyMCkKPiArI2RlZmluZSBN VVRFWF9NT0RfRElTUF9HQU1NQQkJQklUKDIxKQo+ICsjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1VG T0UJCUJJVCgyMikKPiArI2RlZmluZSBNVVRFWF9NT0RfRElTUF9QV00wCQlCSVQoMjMpCj4gKyNk ZWZpbmUgTVVURVhfTU9EX0RJU1BfUFdNMQkJQklUKDI0KQo+ICsjZGVmaW5lIE1VVEVYX01PRF9E SVNQX09ECQlCSVQoMjUpCj4gKwo+ICsjZGVmaW5lIE1VVEVYX1NPRl9TSU5HTEVfTU9ERQkJMAo+ ICsjZGVmaW5lIE1VVEVYX1NPRl9EU0kwCQkJMQo+ICsjZGVmaW5lIE1VVEVYX1NPRl9EU0kxCQkJ Mgo+ICsjZGVmaW5lIE1VVEVYX1NPRl9EUEkwCQkJMwo+ICsKPiArI2RlZmluZSBPVkwwX01PVVRf RU5fQ09MT1IwCQkweDEKPiArI2RlZmluZSBPRF9NT1VUX0VOX1JETUEwCQkweDEKPiArI2RlZmlu ZSBVRk9FX01PVVRfRU5fRFNJMAkJMHgxCj4gKyNkZWZpbmUgQ09MT1IwX1NFTF9JTl9PVkwwCQkw eDEKPiArI2RlZmluZSBPVkwxX01PVVRfRU5fQ09MT1IxCQkweDEKPiArI2RlZmluZSBHQU1NQV9N T1VUX0VOX1JETUExCQkweDEKPiArI2RlZmluZSBSRE1BMV9NT1VUX0RQSTAJCQkweDIKPiArI2Rl ZmluZSBEUEkwX1NFTF9JTl9SRE1BMQkJMHgxCj4gKyNkZWZpbmUgQ09MT1IxX1NFTF9JTl9PVkwx CQkweDEKPiArCj4gK3N0cnVjdCBtdGtfZGlzcF9tdXRleCB7Cj4gKwlpbnQgaWQ7Cj4gKwlib29s IGNsYWltZWQ7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgbXRrX2RkcCB7Cj4gKwlzdHJ1Y3QgZGV2aWNl CQkJKmRldjsKPiArCXN0cnVjdCBjbGsJCQkqY2xrOwo+ICsJdm9pZCBfX2lvbWVtCQkJKnJlZ3M7 Cj4gKwlzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXgJCW11dGV4WzEwXTsKPiArfTsKPiArCj4gK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBpbnQgbXV0ZXhfbW9kW0REUF9DT01QT05FTlRfSURfTUFYXSA9IHsK PiArCVtERFBfQ09NUE9ORU5UX0FBTF0gPSBNVVRFWF9NT0RfRElTUF9BQUwsCj4gKwlbRERQX0NP TVBPTkVOVF9DT0xPUjBdID0gTVVURVhfTU9EX0RJU1BfQ09MT1IwLAo+ICsJW0REUF9DT01QT05F TlRfQ09MT1IxXSA9IE1VVEVYX01PRF9ESVNQX0NPTE9SMSwKPiArCVtERFBfQ09NUE9ORU5UX0dB TU1BXSA9IE1VVEVYX01PRF9ESVNQX0dBTU1BLAo+ICsJW0REUF9DT01QT05FTlRfT0RdID0gTVVU RVhfTU9EX0RJU1BfT0QsCj4gKwlbRERQX0NPTVBPTkVOVF9PVkwwXSA9IE1VVEVYX01PRF9ESVNQ X09WTDAsCj4gKwlbRERQX0NPTVBPTkVOVF9PVkwxXSA9IE1VVEVYX01PRF9ESVNQX09WTDEsCj4g KwlbRERQX0NPTVBPTkVOVF9QV00wXSA9IE1VVEVYX01PRF9ESVNQX1BXTTAsCj4gKwlbRERQX0NP TVBPTkVOVF9QV00xXSA9IE1VVEVYX01PRF9ESVNQX1BXTTEsCj4gKwlbRERQX0NPTVBPTkVOVF9S RE1BMF0gPSBNVVRFWF9NT0RfRElTUF9SRE1BMCwKPiArCVtERFBfQ09NUE9ORU5UX1JETUExXSA9 IE1VVEVYX01PRF9ESVNQX1JETUExLAo+ICsJW0REUF9DT01QT05FTlRfUkRNQTJdID0gTVVURVhf TU9EX0RJU1BfUkRNQTIsCj4gKwlbRERQX0NPTVBPTkVOVF9VRk9FXSA9IE1VVEVYX01PRF9ESVNQ X1VGT0UsCj4gKwlbRERQX0NPTVBPTkVOVF9XRE1BMF0gPSBNVVRFWF9NT0RfRElTUF9XRE1BMCwK PiArCVtERFBfQ09NUE9ORU5UX1dETUExXSA9IE1VVEVYX01PRF9ESVNQX1dETUExLAo+ICt9Owo+ ICsKPiArc3RhdGljIHVuc2lnbmVkIGludCBtdGtfZGRwX21vdXRfZW4oZW51bSBtdGtfZGRwX2Nv bXBfaWQgY3VyLAo+ICsJCQkJICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQsCj4gKwkJCQkg ICAgdW5zaWduZWQgaW50ICphZGRyKQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgdmFsdWU7Cj4gKwo+ ICsJaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX09WTDAgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5U X0NPTE9SMCkgewo+ICsJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfT1ZMMF9NT1VUX0VO Owo+ICsJCXZhbHVlID0gT1ZMMF9NT1VUX0VOX0NPTE9SMDsKPiArCX0gZWxzZSBpZiAoY3VyID09 IEREUF9DT01QT05FTlRfT0QgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX1JETUEwKSB7Cj4gKwkJ KmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9PRF9NT1VUX0VOOwo+ICsJCXZhbHVlID0gT0Rf TU9VVF9FTl9SRE1BMDsKPiArCX0gZWxzZSBpZiAoY3VyID09IEREUF9DT01QT05FTlRfVUZPRSAm JiBuZXh0ID09IEREUF9DT01QT05FTlRfRFNJMCkgewo+ICsJCSphZGRyID0gRElTUF9SRUdfQ09O RklHX0RJU1BfVUZPRV9NT1VUX0VOOwo+ICsJCXZhbHVlID0gVUZPRV9NT1VUX0VOX0RTSTA7Cj4g Kwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX09WTDEgJiYgbmV4dCA9PSBERFBfQ09N UE9ORU5UX0NPTE9SMSkgewo+ICsJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfT1ZMMV9N T1VUX0VOOwo+ICsJCXZhbHVlID0gT1ZMMV9NT1VUX0VOX0NPTE9SMTsKPiArCX0gZWxzZSBpZiAo Y3VyID09IEREUF9DT01QT05FTlRfR0FNTUEgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX1JETUEx KSB7Cj4gKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9HQU1NQV9NT1VUX0VOOwo+ICsJ CXZhbHVlID0gR0FNTUFfTU9VVF9FTl9SRE1BMTsKPiArCX0gZWxzZSBpZiAoY3VyID09IEREUF9D T01QT05FTlRfUkRNQTEgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX0RQSTApIHsKPiArCQkqYWRk ciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX1JETUExX01PVVRfRU47Cj4gKwkJdmFsdWUgPSBSRE1B MV9NT1VUX0RQSTA7Cj4gKwl9IGVsc2Ugewo+ICsJCXZhbHVlID0gMDsKPiArCX0KPiArCj4gKwly ZXR1cm4gdmFsdWU7Cj4gK30KPiArCj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXRrX2RkcF9zZWxf aW4oZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAo+ICsJCQkJICAgZW51bSBtdGtfZGRwX2NvbXBf aWQgbmV4dCwKPiArCQkJCSAgIHVuc2lnbmVkIGludCAqYWRkcikKPiArewo+ICsJdW5zaWduZWQg aW50IHZhbHVlOwo+ICsKPiArCWlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9PVkwwICYmIG5leHQg PT0gRERQX0NPTVBPTkVOVF9DT0xPUjApIHsKPiArCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19E SVNQX0NPTE9SMF9TRUxfSU47Cj4gKwkJdmFsdWUgPSBDT0xPUjBfU0VMX0lOX09WTDA7Cj4gKwl9 IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX1JETUExICYmIG5leHQgPT0gRERQX0NPTVBP TkVOVF9EUEkwKSB7Cj4gKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRFBJX1NFTF9JTjsKPiAr CQl2YWx1ZSA9IERQSTBfU0VMX0lOX1JETUExOwo+ICsJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NP TVBPTkVOVF9PVkwxICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9DT0xPUjEpIHsKPiArCQkqYWRk ciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX0NPTE9SMV9TRUxfSU47Cj4gKwkJdmFsdWUgPSBDT0xP UjFfU0VMX0lOX09WTDE7Cj4gKwl9IGVsc2Ugewo+ICsJCXZhbHVlID0gMDsKPiArCX0KPiArCj4g KwlyZXR1cm4gdmFsdWU7Cj4gK30KPiArCj4gK3ZvaWQgbXRrX2RkcF9hZGRfY29tcF90b19wYXRo KHZvaWQgX19pb21lbSAqY29uZmlnX3JlZ3MsCj4gKwkJCSAgICAgIGVudW0gbXRrX2RkcF9jb21w X2lkIGN1ciwKPiArCQkJICAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCkKPiArewo+ICsJ dW5zaWduZWQgaW50IGFkZHIsIHZhbHVlLCByZWc7Cj4gKwo+ICsJdmFsdWUgPSBtdGtfZGRwX21v dXRfZW4oY3VyLCBuZXh0LCAmYWRkcik7Cj4gKwlpZiAodmFsdWUpIHsKPiArCQlyZWcgPSByZWFk bF9yZWxheGVkKGNvbmZpZ19yZWdzICsgYWRkcikgfCB2YWx1ZTsKPiArCQl3cml0ZWxfcmVsYXhl ZChyZWcsIGNvbmZpZ19yZWdzICsgYWRkcik7Cj4gKwl9Cj4gKwo+ICsJdmFsdWUgPSBtdGtfZGRw X3NlbF9pbihjdXIsIG5leHQsICZhZGRyKTsKPiArCWlmICh2YWx1ZSkgewo+ICsJCXJlZyA9IHJl YWRsX3JlbGF4ZWQoY29uZmlnX3JlZ3MgKyBhZGRyKSB8IHZhbHVlOwo+ICsJCXdyaXRlbF9yZWxh eGVkKHJlZywgY29uZmlnX3JlZ3MgKyBhZGRyKTsKPiArCX0KPiArfQo+ICsKPiArdm9pZCBtdGtf ZGRwX3JlbW92ZV9jb21wX2Zyb21fcGF0aCh2b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzLAo+ICsJ CQkJICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAo+ICsJCQkJICAgZW51bSBtdGtfZGRwX2Nv bXBfaWQgbmV4dCkKPiArewo+ICsJdW5zaWduZWQgaW50IGFkZHIsIHZhbHVlLCByZWc7Cj4gKwo+ ICsJdmFsdWUgPSBtdGtfZGRwX21vdXRfZW4oY3VyLCBuZXh0LCAmYWRkcik7Cj4gKwlpZiAodmFs dWUpIHsKPiArCQlyZWcgPSByZWFkbF9yZWxheGVkKGNvbmZpZ19yZWdzICsgYWRkcikgJiB+dmFs dWU7Cj4gKwkJd3JpdGVsX3JlbGF4ZWQocmVnLCBjb25maWdfcmVncyArIGFkZHIpOwo+ICsJfQo+ ICsKPiArCXZhbHVlID0gbXRrX2RkcF9zZWxfaW4oY3VyLCBuZXh0LCAmYWRkcik7Cj4gKwlpZiAo dmFsdWUpIHsKPiArCQlyZWcgPSByZWFkbF9yZWxheGVkKGNvbmZpZ19yZWdzICsgYWRkcikgJiB+ dmFsdWU7Cj4gKwkJd3JpdGVsX3JlbGF4ZWQocmVnLCBjb25maWdfcmVncyArIGFkZHIpOwo+ICsJ fQo+ICt9Cj4gKwo+ICtzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm10a19kaXNwX211dGV4X2dldChz dHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZCkKPiArewo+ICsJc3RydWN0IG10a19k ZHAgKmRkcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsKPiArCWlmIChpZCA+PSAxMCkKPiAr CQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiArCWlmIChkZHAtPm11dGV4W2lkXS5jbGFpbWVk KQo+ICsJCXJldHVybiBFUlJfUFRSKC1FQlVTWSk7Cj4gKwo+ICsJZGRwLT5tdXRleFtpZF0uY2xh aW1lZCA9IHRydWU7Cj4gKwo+ICsJcmV0dXJuICZkZHAtPm11dGV4W2lkXTsKPiArfQo+ICsKPiAr dm9pZCBtdGtfZGlzcF9tdXRleF9wdXQoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCkKPiAr ewo+ICsJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10 a19kZHAsCj4gKwkJCQkJICAgbXV0ZXhbbXV0ZXgtPmlkXSk7Cj4gKwo+ICsJV0FSTl9PTigmZGRw LT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKPiArCj4gKwltdXRleC0+Y2xhaW1lZCA9IGZh bHNlOwo+ICt9Cj4gKwo+ICtpbnQgbXRrX2Rpc3BfbXV0ZXhfcHJlcGFyZShzdHJ1Y3QgbXRrX2Rp c3BfbXV0ZXggKm11dGV4KQo+ICt7Cj4gKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0gY29udGFpbmVy X29mKG11dGV4LCBzdHJ1Y3QgbXRrX2RkcCwKPiArCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsK PiArCXJldHVybiBjbGtfcHJlcGFyZV9lbmFibGUoZGRwLT5jbGspOwo+ICt9Cj4gKwo+ICt2b2lk IG10a19kaXNwX211dGV4X3VucHJlcGFyZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KQo+ ICt7Cj4gKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0gY29udGFpbmVyX29mKG11dGV4LCBzdHJ1Y3Qg bXRrX2RkcCwKPiArCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKPiArCWNsa19kaXNhYmxlX3Vu cHJlcGFyZShkZHAtPmNsayk7Cj4gK30KPiArCj4gK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfYWRkX2Nv bXAoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCwKPiArCQkJICAgICBlbnVtIG10a19kZHBf Y29tcF9pZCBpZCkKPiArewo+ICsJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9vZiht dXRleCwgc3RydWN0IG10a19kZHAsCj4gKwkJCQkJICAgbXV0ZXhbbXV0ZXgtPmlkXSk7Cj4gKwl1 bnNpZ25lZCBpbnQgcmVnOwo+ICsKPiArCVdBUk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAh PSBtdXRleCk7Cj4gKwo+ICsJc3dpdGNoIChpZCkgewo+ICsJY2FzZSBERFBfQ09NUE9ORU5UX0RT STA6Cj4gKwkJcmVnID0gTVVURVhfU09GX0RTSTA7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEREUF9D T01QT05FTlRfRFNJMToKPiArCQlyZWcgPSBNVVRFWF9TT0ZfRFNJMDsKPiArCQlicmVhazsKPiAr CWNhc2UgRERQX0NPTVBPTkVOVF9EUEkwOgo+ICsJCXJlZyA9IE1VVEVYX1NPRl9EUEkwOwo+ICsJ CWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlyZWcgPSByZWFkbF9yZWxheGVkKGRkcC0+cmVncyAr IERJU1BfUkVHX01VVEVYX01PRChtdXRleC0+aWQpKTsKPiArCQlyZWcgfD0gbXV0ZXhfbW9kW2lk XTsKPiArCQl3cml0ZWxfcmVsYXhlZChyZWcsIGRkcC0+cmVncyArIERJU1BfUkVHX01VVEVYX01P RChtdXRleC0+aWQpKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJd3JpdGVsX3JlbGF4ZWQo cmVnLCBkZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRFWF9TT0YobXV0ZXgtPmlkKSk7Cj4gK30KPiAr Cj4gK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfcmVtb3ZlX2NvbXAoc3RydWN0IG10a19kaXNwX211dGV4 ICptdXRleCwKPiArCQkJCWVudW0gbXRrX2RkcF9jb21wX2lkIGlkKQo+ICt7Cj4gKwlzdHJ1Y3Qg bXRrX2RkcCAqZGRwID0gY29udGFpbmVyX29mKG11dGV4LCBzdHJ1Y3QgbXRrX2RkcCwKPiArCQkJ CQkgICBtdXRleFttdXRleC0+aWRdKTsKPiArCXVuc2lnbmVkIGludCByZWc7Cj4gKwo+ICsJV0FS Tl9PTigmZGRwLT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKPiArCj4gKwlzd2l0Y2ggKGlk KSB7Cj4gKwljYXNlIEREUF9DT01QT05FTlRfRFNJMDoKPiArCWNhc2UgRERQX0NPTVBPTkVOVF9E U0kxOgo+ICsJY2FzZSBERFBfQ09NUE9ORU5UX0RQSTA6Cj4gKwkJd3JpdGVsX3JlbGF4ZWQoTVVU RVhfU09GX1NJTkdMRV9NT0RFLAo+ICsJCQkgICAgICAgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVU RVhfU09GKG11dGV4LT5pZCkpOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlyZWcgPSBy ZWFkbF9yZWxheGVkKGRkcC0+cmVncyArIERJU1BfUkVHX01VVEVYX01PRChtdXRleC0+aWQpKTsK PiArCQlyZWcgJj0gfm11dGV4X21vZFtpZF07Cj4gKwkJd3JpdGVsX3JlbGF4ZWQocmVnLCBkZHAt PnJlZ3MgKyBESVNQX1JFR19NVVRFWF9NT0QobXV0ZXgtPmlkKSk7Cj4gKwkJYnJlYWs7Cj4gKwl9 Cj4gK30KPiArCj4gK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfZW5hYmxlKHN0cnVjdCBtdGtfZGlzcF9t dXRleCAqbXV0ZXgpCj4gK3sKPiArCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJfb2Yo bXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAo+ICsJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOwo+ICsK PiArCVdBUk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7Cj4gKwo+ICsJd3Jp dGVsKDEsIGRkcC0+cmVncyArIERJU1BfUkVHX01VVEVYX0VOKG11dGV4LT5pZCkpOwo+ICt9Cj4g Kwo+ICt2b2lkIG10a19kaXNwX211dGV4X2Rpc2FibGUoc3RydWN0IG10a19kaXNwX211dGV4ICpt dXRleCkKPiArewo+ICsJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwg c3RydWN0IG10a19kZHAsCj4gKwkJCQkJICAgbXV0ZXhbbXV0ZXgtPmlkXSk7Cj4gKwo+ICsJV0FS Tl9PTigmZGRwLT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKPiArCj4gKwl3cml0ZWwoMCwg ZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfRU4obXV0ZXgtPmlkKSk7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgbXRrX2RkcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7 Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owo+ICsJc3RydWN0IG10a19kZHAg KmRkcDsKPiArCXN0cnVjdCByZXNvdXJjZSAqcmVnczsKPiArCWludCBpOwo+ICsKPiArCWRkcCA9 IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZGRwKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWRk cCkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykK PiArCQlkZHAtPm11dGV4W2ldLmlkID0gaTsKPiArCj4gKwlkZHAtPmNsayA9IGRldm1fY2xrX2dl dChkZXYsIE5VTEwpOwo+ICsJaWYgKElTX0VSUihkZHAtPmNsaykpIHsKPiArCQlkZXZfZXJyKGRl diwgIkZhaWxlZCB0byBnZXQgY2xvY2tcbiIpOwo+ICsJCXJldHVybiBQVFJfRVJSKGRkcC0+Y2xr KTsKPiArCX0KPiArCj4gKwlyZWdzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVT T1VSQ0VfTUVNLCAwKTsKPiArCWRkcC0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYs IHJlZ3MpOwo+ICsJaWYgKElTX0VSUihkZHAtPnJlZ3MpKSB7Cj4gKwkJZGV2X2VycihkZXYsICJG YWlsZWQgdG8gbWFwIG11dGV4IHJlZ2lzdGVyc1xuIik7Cj4gKwkJcmV0dXJuIFBUUl9FUlIoZGRw LT5yZWdzKTsKPiArCX0KPiArCj4gKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZHApOwo+ ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG10a19kZHBfcmVtb3ZlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBkZHBfZHJpdmVyX2R0X21hdGNoW10g PSB7Cj4gKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLW11dGV4IiB9LAo+ ICsJe30sCj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGRkcF9kcml2ZXJfZHRfbWF0 Y2gpOwo+ICsKPiArc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGRwX2RyaXZlciA9IHsKPiAr CS5wcm9iZQkJPSBtdGtfZGRwX3Byb2JlLAo+ICsJLnJlbW92ZQkJPSBtdGtfZGRwX3JlbW92ZSwK PiArCS5kcml2ZXIJCT0gewo+ICsJCS5uYW1lCT0gIm1lZGlhdGVrLWRkcCIsCj4gKwkJLm93bmVy CT0gVEhJU19NT0RVTEUsCj4gKwkJLm9mX21hdGNoX3RhYmxlID0gZGRwX2RyaXZlcl9kdF9tYXRj aCwKPiArCX0sCj4gK307Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfZHJtX2RkcC5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmgKPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjkyYzExNzUKPiAtLS0gL2Rldi9u dWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmgKPiBAQCAt MCwwICsxLDQxIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMu Cj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCj4gKyAqIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgTVRLX0RSTV9ERFBfSAo+ICsjZGVmaW5l IE1US19EUk1fRERQX0gKPiArCj4gKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCj4gKwo+ ICtzdHJ1Y3QgcmVnbWFwOwo+ICtzdHJ1Y3QgZGV2aWNlOwo+ICtzdHJ1Y3QgbXRrX2Rpc3BfbXV0 ZXg7Cj4gKwo+ICt2b2lkIG10a19kZHBfYWRkX2NvbXBfdG9fcGF0aCh2b2lkIF9faW9tZW0gKmNv bmZpZ19yZWdzLAo+ICsJCQkgICAgICBlbnVtIG10a19kZHBfY29tcF9pZCBjdXIsCj4gKwkJCSAg ICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQpOwo+ICt2b2lkIG10a19kZHBfcmVtb3ZlX2Nv bXBfZnJvbV9wYXRoKHZvaWQgX19pb21lbSAqY29uZmlnX3JlZ3MsCj4gKwkJCQkgICBlbnVtIG10 a19kZHBfY29tcF9pZCBjdXIsCj4gKwkJCQkgICBlbnVtIG10a19kZHBfY29tcF9pZCBuZXh0KTsK PiArCj4gK3N0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXRrX2Rpc3BfbXV0ZXhfZ2V0KHN0cnVjdCBk ZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGlkKTsKPiAraW50IG10a19kaXNwX211dGV4X3ByZXBh cmUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCk7Cj4gK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhf YWRkX2NvbXAoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCwKPiArCQkJICAgICBlbnVtIG10 a19kZHBfY29tcF9pZCBpZCk7Cj4gK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfZW5hYmxlKHN0cnVjdCBt dGtfZGlzcF9tdXRleCAqbXV0ZXgpOwo+ICt2b2lkIG10a19kaXNwX211dGV4X2Rpc2FibGUoc3Ry dWN0IG10a19kaXNwX211dGV4ICptdXRleCk7Cj4gK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfcmVtb3Zl X2NvbXAoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCwKPiArCQkJCWVudW0gbXRrX2RkcF9j b21wX2lkIGlkKTsKPiArdm9pZCBtdGtfZGlzcF9tdXRleF91bnByZXBhcmUoc3RydWN0IG10a19k aXNwX211dGV4ICptdXRleCk7Cj4gK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfcHV0KHN0cnVjdCBtdGtf ZGlzcF9tdXRleCAqbXV0ZXgpOwo+ICsKPiArI2VuZGlmIC8qIE1US19EUk1fRERQX0ggKi8KPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuYyBi L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmMKPiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjM5NzBmY2YKPiAtLS0gL2Rldi9udWxsCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuYwo+IEBAIC0wLDAg KzEsMjI1IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCj4g KyAqIEF1dGhvcnM6Cj4gKyAqCVlUIFNoZW4gPHl0LnNoZW5AbWVkaWF0ZWsuY29tPgo+ICsgKglD SyBIdSA8Y2suaHVAbWVkaWF0ZWsuY29tPgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsgKiBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNp b24gMiBhcwo+ICsgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K PiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiArICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICovCj4gKwo+ICsjaW5jbHVk ZSA8bGludXgvY2xrLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvb2ZfYWRkcmVzcy5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9vZl9wbGF0Zm9ybS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNl Lmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVkZSAibXRrX2RybV9kcnYuaCIK PiArI2luY2x1ZGUgIm10a19kcm1fcGxhbmUuaCIKPiArI2luY2x1ZGUgIm10a19kcm1fZGRwX2Nv bXAuaCIKPiArCj4gKyNkZWZpbmUgRElTUF9PRF9FTgkJCQkweDAwMDAKPiArI2RlZmluZSBESVNQ X09EX0lOVEVOCQkJCTB4MDAwOAo+ICsjZGVmaW5lIERJU1BfT0RfSU5UU1RBCQkJCTB4MDAwYwo+ ICsjZGVmaW5lIERJU1BfT0RfQ0ZHCQkJCTB4MDAyMAo+ICsjZGVmaW5lIERJU1BfT0RfU0laRQkJ CQkweDAwMzAKPiArCj4gKyNkZWZpbmUgRElTUF9SRUdfVUZPX1NUQVJUCQkJMHgwMDAwCj4gKwo+ ICsjZGVmaW5lIERJU1BfQ09MT1JfQ0ZHX01BSU4JCQkweDA0MDAKPiArI2RlZmluZSBESVNQX0NP TE9SX1NUQVJUCQkJMHgwYzAwCj4gKyNkZWZpbmUgRElTUF9DT0xPUl9XSURUSAkJCTB4MGM1MAo+ ICsjZGVmaW5lIERJU1BfQ09MT1JfSEVJR0hUCQkJMHgwYzU0Cj4gKwo+ICsjZGVmaW5lCU9EX1JF TEFZX01PREUJCUJJVCgwKQo+ICsKPiArI2RlZmluZQlVRk9fQllQQVNTCQlCSVQoMikKPiArCj4g KyNkZWZpbmUJQ09MT1JfQllQQVNTX0FMTAlCSVQoNykKPiArI2RlZmluZQlDT0xPUl9TRVFfU0VM CQlCSVQoMTMpCj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfY29sb3JfY29uZmlnKHN0cnVjdCBtdGtf ZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCB3LAo+ICsJCQkgICAgIHVuc2lnbmVkIGludCBo LCB1bnNpZ25lZCBpbnQgdnJlZnJlc2gpCj4gK3sKPiArCXdyaXRlbCh3LCBjb21wLT5yZWdzICsg RElTUF9DT0xPUl9XSURUSCk7Cj4gKwl3cml0ZWwoaCwgY29tcC0+cmVncyArIERJU1BfQ09MT1Jf SEVJR0hUKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbXRrX2NvbG9yX3N0YXJ0KHN0cnVjdCBt dGtfZGRwX2NvbXAgKmNvbXApCj4gK3sKPiArCXdyaXRlbChDT0xPUl9CWVBBU1NfQUxMIHwgQ09M T1JfU0VRX1NFTCwKPiArCSAgICAgICBjb21wLT5yZWdzICsgRElTUF9DT0xPUl9DRkdfTUFJTik7 Cj4gKwl3cml0ZWwoMHgxLCBjb21wLT5yZWdzICsgRElTUF9DT0xPUl9TVEFSVCk7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIG10a19vZF9jb25maWcoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwg dW5zaWduZWQgaW50IHcsCj4gKwkJCSAgdW5zaWduZWQgaW50IGgsIHVuc2lnbmVkIGludCB2cmVm cmVzaCkKPiArewo+ICsJd3JpdGVsKHcgPDwgMTYgfCBoLCBjb21wLT5yZWdzICsgRElTUF9PRF9T SVpFKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbXRrX29kX3N0YXJ0KHN0cnVjdCBtdGtfZGRw X2NvbXAgKmNvbXApCj4gK3sKPiArCXdyaXRlbChPRF9SRUxBWV9NT0RFLCBjb21wLT5yZWdzICsg RElTUF9PRF9DRkcpOwo+ICsJd3JpdGVsKDEsIGNvbXAtPnJlZ3MgKyBESVNQX09EX0VOKTsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgbXRrX3Vmb2Vfc3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAq Y29tcCkKPiArewo+ICsJd3JpdGVsKFVGT19CWVBBU1MsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19V Rk9fU1RBUlQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9m dW5jcyBkZHBfY29sb3IgPSB7Cj4gKwkuY29uZmlnID0gbXRrX2NvbG9yX2NvbmZpZywKPiArCS5z dGFydCA9IG10a19jb2xvcl9zdGFydCwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg bXRrX2RkcF9jb21wX2Z1bmNzIGRkcF9vZCA9IHsKPiArCS5jb25maWcgPSBtdGtfb2RfY29uZmln LAo+ICsJLnN0YXJ0ID0gbXRrX29kX3N0YXJ0LAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgZGRwX3Vmb2UgPSB7Cj4gKwkuc3RhcnQgPSBtdGtfdWZv ZV9zdGFydCwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbXRrX2RkcF9j b21wX3N0ZW1bTVRLX0REUF9DT01QX1RZUEVfTUFYXSA9IHsKPiArCVtNVEtfRElTUF9PVkxdID0g Im92bCIsCj4gKwlbTVRLX0RJU1BfUkRNQV0gPSAicmRtYSIsCj4gKwlbTVRLX0RJU1BfV0RNQV0g PSAid2RtYSIsCj4gKwlbTVRLX0RJU1BfQ09MT1JdID0gImNvbG9yIiwKPiArCVtNVEtfRElTUF9B QUxdID0gImFhbCIsCj4gKwlbTVRLX0RJU1BfR0FNTUFdID0gImdhbW1hIiwKPiArCVtNVEtfRElT UF9VRk9FXSA9ICJ1Zm9lIiwKPiArCVtNVEtfRFNJXSA9ICJkc2kiLAo+ICsJW01US19EUEldID0g ImRwaSIsCj4gKwlbTVRLX0RJU1BfUFdNXSA9ICJwd20iLAo+ICsJW01US19ESVNQX01VVEVYXSA9 ICJtdXRleCIsCj4gKwlbTVRLX0RJU1BfT0RdID0gIm9kIiwKPiArfTsKPiArCj4gK3N0cnVjdCBt dGtfZGRwX2NvbXBfbWF0Y2ggewo+ICsJZW51bSBtdGtfZGRwX2NvbXBfdHlwZSB0eXBlOwo+ICsJ aW50IGFsaWFzX2lkOwo+ICsJY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyAqZnVuY3M7 Cj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9tYXRjaCBtdGtf ZGRwX21hdGNoZXNbRERQX0NPTVBPTkVOVF9JRF9NQVhdID0gewo+ICsJW0REUF9DT01QT05FTlRf QUFMXQk9IHsgTVRLX0RJU1BfQUFMLAkwLCBOVUxMIH0sCj4gKwlbRERQX0NPTVBPTkVOVF9DT0xP UjBdCT0geyBNVEtfRElTUF9DT0xPUiwJMCwgJmRkcF9jb2xvciB9LAo+ICsJW0REUF9DT01QT05F TlRfQ09MT1IxXQk9IHsgTVRLX0RJU1BfQ09MT1IsCTEsICZkZHBfY29sb3IgfSwKPiArCVtERFBf Q09NUE9ORU5UX0RQSTBdCT0geyBNVEtfRFBJLAkJMCwgTlVMTCB9LAo+ICsJW0REUF9DT01QT05F TlRfRFNJMF0JPSB7IE1US19EU0ksCQkwLCBOVUxMIH0sCj4gKwlbRERQX0NPTVBPTkVOVF9EU0kx XQk9IHsgTVRLX0RTSSwJCTEsIE5VTEwgfSwKPiArCVtERFBfQ09NUE9ORU5UX0dBTU1BXQk9IHsg TVRLX0RJU1BfR0FNTUEsCTAsIE5VTEwgfSwKPiArCVtERFBfQ09NUE9ORU5UX09EXQk9IHsgTVRL X0RJU1BfT0QsCTAsICZkZHBfb2QgfSwKPiArCVtERFBfQ09NUE9ORU5UX09WTDBdCT0geyBNVEtf RElTUF9PVkwsCTAsIE5VTEwgfSwKPiArCVtERFBfQ09NUE9ORU5UX09WTDFdCT0geyBNVEtfRElT UF9PVkwsCTEsIE5VTEwgfSwKPiArCVtERFBfQ09NUE9ORU5UX1BXTTBdCT0geyBNVEtfRElTUF9Q V00sCTAsIE5VTEwgfSwKPiArCVtERFBfQ09NUE9ORU5UX1JETUEwXQk9IHsgTVRLX0RJU1BfUkRN QSwJMCwgTlVMTCB9LAo+ICsJW0REUF9DT01QT05FTlRfUkRNQTFdCT0geyBNVEtfRElTUF9SRE1B LAkxLCBOVUxMIH0sCj4gKwlbRERQX0NPTVBPTkVOVF9SRE1BMl0JPSB7IE1US19ESVNQX1JETUEs CTIsIE5VTEwgfSwKPiArCVtERFBfQ09NUE9ORU5UX1VGT0VdCT0geyBNVEtfRElTUF9VRk9FLAkw LCAmZGRwX3Vmb2UgfSwKPiArCVtERFBfQ09NUE9ORU5UX1dETUEwXQk9IHsgTVRLX0RJU1BfV0RN QSwJMCwgTlVMTCB9LAo+ICsJW0REUF9DT01QT05FTlRfV0RNQTFdCT0geyBNVEtfRElTUF9XRE1B LAkxLCBOVUxMIH0sCj4gK307Cj4gKwo+ICtpbnQgbXRrX2RkcF9jb21wX2dldF9pZChzdHJ1Y3Qg ZGV2aWNlX25vZGUgKm5vZGUsCj4gKwkJCWVudW0gbXRrX2RkcF9jb21wX3R5cGUgY29tcF90eXBl KQo+ICt7Cj4gKwlpbnQgaWQgPSBvZl9hbGlhc19nZXRfaWQobm9kZSwgbXRrX2RkcF9jb21wX3N0 ZW1bY29tcF90eXBlXSk7Cj4gKwlpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRShtdGtfZGRwX21hdGNoZXMpOyBpKyspIHsKPiArCQlpZiAoY29tcF90eXBlID09IG10a19k ZHBfbWF0Y2hlc1tpXS50eXBlICYmCj4gKwkJICAgIChpZCA8IDAgfHwgaWQgPT0gbXRrX2RkcF9t YXRjaGVzW2ldLmFsaWFzX2lkKSkKPiArCQkJcmV0dXJuIGk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJu IC1FSU5WQUw7Cj4gK30KPiArCj4gK2ludCBtdGtfZGRwX2NvbXBfaW5pdChzdHJ1Y3QgZGV2aWNl ICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKPiArCQkgICAgICBzdHJ1Y3QgbXRrX2Rk cF9jb21wICpjb21wLCBlbnVtIG10a19kZHBfY29tcF9pZCBjb21wX2lkLAo+ICsJCSAgICAgIGNv bnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgKmZ1bmNzKQo+ICt7Cj4gKwllbnVtIG10a19k ZHBfY29tcF90eXBlIHR5cGU7Cj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmxhcmJfbm9kZTsKPiAr CXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmxhcmJfcGRldjsKPiArCj4gKwlpZiAoY29tcF9pZCA8 IDAgfHwgY29tcF9pZCA+PSBERFBfQ09NUE9ORU5UX0lEX01BWCkKPiArCQlyZXR1cm4gLUVJTlZB TDsKPiArCj4gKwljb21wLT5pZCA9IGNvbXBfaWQ7Cj4gKwljb21wLT5mdW5jcyA9IGZ1bmNzID86 IG10a19kZHBfbWF0Y2hlc1tjb21wX2lkXS5mdW5jczsKPiArCj4gKwlpZiAoY29tcF9pZCA9PSBE RFBfQ09NUE9ORU5UX0RQSTAgfHwKPiArCSAgICBjb21wX2lkID09IEREUF9DT01QT05FTlRfRFNJ MCB8fAo+ICsJICAgIGNvbXBfaWQgPT0gRERQX0NPTVBPTkVOVF9QV00wKSB7Cj4gKwkJY29tcC0+ cmVncyA9IE5VTEw7Cj4gKwkJY29tcC0+Y2xrID0gTlVMTDsKPiArCQljb21wLT5pcnEgPSAwOwo+ ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCWNvbXAtPnJlZ3MgPSBvZl9pb21hcChub2RlLCAw KTsKPiArCWNvbXAtPmlycSA9IG9mX2lycV9nZXQobm9kZSwgMCk7Cj4gKwljb21wLT5jbGsgPSBv Zl9jbGtfZ2V0KG5vZGUsIDApOwo+ICsJaWYgKElTX0VSUihjb21wLT5jbGspKQo+ICsJCWNvbXAt PmNsayA9IE5VTEw7Cj4gKwo+ICsJdHlwZSA9IG10a19kZHBfbWF0Y2hlc1tjb21wX2lkXS50eXBl Owo+ICsKPiArCS8qIE9ubHkgRE1BIGNhcGFibGUgY29tcG9uZW50cyBuZWVkIHRoZSBMQVJCIHBy b3BlcnR5ICovCj4gKwljb21wLT5sYXJiX2RldiA9IE5VTEw7Cj4gKwlpZiAodHlwZSAhPSBNVEtf RElTUF9PVkwgJiYKPiArCSAgICB0eXBlICE9IE1US19ESVNQX1JETUEgJiYKPiArCSAgICB0eXBl ICE9IE1US19ESVNQX1dETUEpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJbGFyYl9ub2RlID0gb2Zf cGFyc2VfcGhhbmRsZShub2RlLCAibWVkaWF0ZWssbGFyYiIsIDApOwo+ICsJaWYgKCFsYXJiX25v ZGUpIHsKPiArCQlkZXZfZXJyKGRldiwKPiArCQkJIk1pc3NpbmcgbWVkaWFkZWssbGFyYiBwaGFu ZGxlIGluICVzIG5vZGVcbiIsCj4gKwkJCW5vZGUtPmZ1bGxfbmFtZSk7Cj4gKwkJcmV0dXJuIC1F SU5WQUw7Cj4gKwl9Cj4gKwo+ICsJbGFyYl9wZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShs YXJiX25vZGUpOwo+ICsJaWYgKCFsYXJiX3BkZXYpIHsKPiArCQlkZXZfd2FybihkZXYsICJXYWl0 aW5nIGZvciBsYXJiIGRldmljZSAlc1xuIiwKPiArCQkJIGxhcmJfbm9kZS0+ZnVsbF9uYW1lKTsK PiArCQlvZl9ub2RlX3B1dChsYXJiX25vZGUpOwo+ICsJCXJldHVybiAtRVBST0JFX0RFRkVSOwo+ ICsJfQo+ICsJb2Zfbm9kZV9wdXQobGFyYl9ub2RlKTsKPiArCj4gKwljb21wLT5sYXJiX2RldiA9 ICZsYXJiX3BkZXYtPmRldjsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAraW50IG10a19k ZHBfY29tcF9yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgbXRrX2RkcF9j b21wICpjb21wKQo+ICt7Cj4gKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZHJt LT5kZXZfcHJpdmF0ZTsKPiArCj4gKwlpZiAocHJpdmF0ZS0+ZGRwX2NvbXBbY29tcC0+aWRdKQo+ ICsJCXJldHVybiAtRUJVU1k7Cj4gKwo+ICsJcHJpdmF0ZS0+ZGRwX2NvbXBbY29tcC0+aWRdID0g Y29tcDsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICt2b2lkIG10a19kZHBfY29tcF91bnJlZ2lz dGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCj4g K3sKPiArCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBkcm0tPmRldl9wcml2YXRl Owo+ICsKPiArCXByaXZhdGUtPmRkcF9jb21wW2NvbXAtPmlkXSA9IE5VTEw7Cj4gK30KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuaCBiL2Ry aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmgKPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjZiMTNiYTkKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuaAo+IEBAIC0wLDAgKzEs MTUwIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCj4gKyAq Cj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCj4gKyAqIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK PiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgTVRLX0RSTV9ERFBfQ09NUF9ICj4gKyNkZWZpbmUg TVRLX0RSTV9ERFBfQ09NUF9ICj4gKwo+ICsjaW5jbHVkZSA8bGludXgvaW8uaD4KPiArCj4gK3N0 cnVjdCBkZXZpY2U7Cj4gK3N0cnVjdCBkZXZpY2Vfbm9kZTsKPiArc3RydWN0IGRybV9jcnRjOwo+ ICtzdHJ1Y3QgZHJtX2RldmljZTsKPiArc3RydWN0IG10a19wbGFuZV9zdGF0ZTsKPiArCj4gK2Vu dW0gbXRrX2RkcF9jb21wX3R5cGUgewo+ICsJTVRLX0RJU1BfT1ZMLAo+ICsJTVRLX0RJU1BfUkRN QSwKPiArCU1US19ESVNQX1dETUEsCj4gKwlNVEtfRElTUF9DT0xPUiwKPiArCU1US19ESVNQX0FB TCwKPiArCU1US19ESVNQX0dBTU1BLAo+ICsJTVRLX0RJU1BfVUZPRSwKPiArCU1US19EU0ksCj4g KwlNVEtfRFBJLAo+ICsJTVRLX0RJU1BfUFdNLAo+ICsJTVRLX0RJU1BfTVVURVgsCj4gKwlNVEtf RElTUF9PRCwKPiArCU1US19ERFBfQ09NUF9UWVBFX01BWCwKPiArfTsKPiArCj4gK2VudW0gbXRr X2RkcF9jb21wX2lkIHsKPiArCUREUF9DT01QT05FTlRfQUFMLAo+ICsJRERQX0NPTVBPTkVOVF9D T0xPUjAsCj4gKwlERFBfQ09NUE9ORU5UX0NPTE9SMSwKPiArCUREUF9DT01QT05FTlRfRFBJMCwK PiArCUREUF9DT01QT05FTlRfRFNJMCwKPiArCUREUF9DT01QT05FTlRfRFNJMSwKPiArCUREUF9D T01QT05FTlRfR0FNTUEsCj4gKwlERFBfQ09NUE9ORU5UX09ELAo+ICsJRERQX0NPTVBPTkVOVF9P VkwwLAo+ICsJRERQX0NPTVBPTkVOVF9PVkwxLAo+ICsJRERQX0NPTVBPTkVOVF9QV00wLAo+ICsJ RERQX0NPTVBPTkVOVF9QV00xLAo+ICsJRERQX0NPTVBPTkVOVF9SRE1BMCwKPiArCUREUF9DT01Q T05FTlRfUkRNQTEsCj4gKwlERFBfQ09NUE9ORU5UX1JETUEyLAo+ICsJRERQX0NPTVBPTkVOVF9V Rk9FLAo+ICsJRERQX0NPTVBPTkVOVF9XRE1BMCwKPiArCUREUF9DT01QT05FTlRfV0RNQTEsCj4g KwlERFBfQ09NUE9ORU5UX0lEX01BWCwKPiArfTsKPiArCj4gK3N0cnVjdCBtdGtfZGRwX2NvbXA7 Cj4gKwo+ICtzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIHsKPiArCXZvaWQgKCpjb25maWcpKHN0 cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCB3LAo+ICsJCSAgICAgICB1bnNp Z25lZCBpbnQgaCwgdW5zaWduZWQgaW50IHZyZWZyZXNoKTsKPiArCXZvaWQgKCpzdGFydCkoc3Ry dWN0IG10a19kZHBfY29tcCAqY29tcCk7Cj4gKwl2b2lkICgqc3RvcCkoc3RydWN0IG10a19kZHBf Y29tcCAqY29tcCk7Cj4gKwl2b2lkICgqZW5hYmxlX3ZibGFuaykoc3RydWN0IG10a19kZHBfY29t cCAqY29tcCwgc3RydWN0IGRybV9jcnRjICpjcnRjKTsKPiArCXZvaWQgKCpkaXNhYmxlX3ZibGFu aykoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCk7Cj4gKwl2b2lkICgqbGF5ZXJfb24pKHN0cnVj dCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCBpZHgpOwo+ICsJdm9pZCAoKmxheWVy X29mZikoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IGlkeCk7Cj4gKwl2 b2lkICgqbGF5ZXJfY29uZmlnKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBp bnQgaWR4LAo+ICsJCQkgICAgIHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlKTsKPiArfTsK PiArCj4gK3N0cnVjdCBtdGtfZGRwX2NvbXAgewo+ICsJc3RydWN0IGNsayAqY2xrOwo+ICsJdm9p ZCBfX2lvbWVtICpyZWdzOwo+ICsJaW50IGlycTsKPiArCXN0cnVjdCBkZXZpY2UgKmxhcmJfZGV2 Owo+ICsJZW51bSBtdGtfZGRwX2NvbXBfaWQgaWQ7Cj4gKwljb25zdCBzdHJ1Y3QgbXRrX2RkcF9j b21wX2Z1bmNzICpmdW5jczsKPiArfTsKPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRw X2NvbXBfY29uZmlnKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsCj4gKwkJCQkgICAgICAgdW5z aWduZWQgaW50IHcsIHVuc2lnbmVkIGludCBoLAo+ICsJCQkJICAgICAgIHVuc2lnbmVkIGludCB2 cmVmcmVzaCkKPiArewo+ICsJaWYgKGNvbXAtPmZ1bmNzICYmIGNvbXAtPmZ1bmNzLT5jb25maWcp Cj4gKwkJY29tcC0+ZnVuY3MtPmNvbmZpZyhjb21wLCB3LCBoLCB2cmVmcmVzaCk7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfc3RhcnQoc3RydWN0IG10a19kZHBf Y29tcCAqY29tcCkKPiArewo+ICsJaWYgKGNvbXAtPmZ1bmNzICYmIGNvbXAtPmZ1bmNzLT5zdGFy dCkKPiArCQljb21wLT5mdW5jcy0+c3RhcnQoY29tcCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxp bmUgdm9pZCBtdGtfZGRwX2NvbXBfc3RvcChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQo+ICt7 Cj4gKwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPnN0b3ApCj4gKwkJY29tcC0+ZnVu Y3MtPnN0b3AoY29tcCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2Nv bXBfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLAo+ICsJCQkJCSAgICAg IHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArewo+ICsJaWYgKGNvbXAtPmZ1bmNzICYmIGNvbXAt PmZ1bmNzLT5lbmFibGVfdmJsYW5rKQo+ICsJCWNvbXAtPmZ1bmNzLT5lbmFibGVfdmJsYW5rKGNv bXAsIGNydGMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2RkcF9jb21wX2Rp c2FibGVfdmJsYW5rKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCj4gK3sKPiArCWlmIChjb21w LT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+ZGlzYWJsZV92YmxhbmspCj4gKwkJY29tcC0+ZnVuY3Mt PmRpc2FibGVfdmJsYW5rKGNvbXApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgbXRr X2RkcF9jb21wX2xheWVyX29uKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsCj4gKwkJCQkJIHVu c2lnbmVkIGludCBpZHgpCj4gK3sKPiArCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+ bGF5ZXJfb24pCj4gKwkJY29tcC0+ZnVuY3MtPmxheWVyX29uKGNvbXAsIGlkeCk7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfbGF5ZXJfb2ZmKHN0cnVjdCBtdGtf ZGRwX2NvbXAgKmNvbXAsCj4gKwkJCQkJICB1bnNpZ25lZCBpbnQgaWR4KQo+ICt7Cj4gKwlpZiAo Y29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPmxheWVyX29mZikKPiArCQljb21wLT5mdW5jcy0+ bGF5ZXJfb2ZmKGNvbXAsIGlkeCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtf ZGRwX2NvbXBfbGF5ZXJfY29uZmlnKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsCj4gKwkJCQkJ ICAgICB1bnNpZ25lZCBpbnQgaWR4LAo+ICsJCQkJCSAgICAgc3RydWN0IG10a19wbGFuZV9zdGF0 ZSAqc3RhdGUpCj4gK3sKPiArCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+bGF5ZXJf Y29uZmlnKQo+ICsJCWNvbXAtPmZ1bmNzLT5sYXllcl9jb25maWcoY29tcCwgaWR4LCBzdGF0ZSk7 Cj4gK30KPiArCj4gK2ludCBtdGtfZGRwX2NvbXBfZ2V0X2lkKHN0cnVjdCBkZXZpY2Vfbm9kZSAq bm9kZSwKPiArCQkJZW51bSBtdGtfZGRwX2NvbXBfdHlwZSBjb21wX3R5cGUpOwo+ICtpbnQgbXRr X2RkcF9jb21wX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNv bXBfbm9kZSwKPiArCQkgICAgICBzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCBlbnVtIG10a19k ZHBfY29tcF9pZCBjb21wX2lkLAo+ICsJCSAgICAgIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBf ZnVuY3MgKmZ1bmNzKTsKPiAraW50IG10a19kZHBfY29tcF9yZWdpc3RlcihzdHJ1Y3QgZHJtX2Rl dmljZSAqZHJtLCBzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKTsKPiArdm9pZCBtdGtfZGRwX2Nv bXBfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgbXRrX2RkcF9jb21w ICpjb21wKTsKPiArCj4gKyNlbmRpZiAvKiBNVEtfRFJNX0REUF9DT01QX0ggKi8KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMgYi9kcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5k ZXggMDAwMDAwMC4uYWIxYjQ1ZAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYwo+IEBAIC0wLDAgKzEsNTY1IEBACj4gKy8qCj4gKyAq IENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCj4gKyAqIEF1dGhvcjogWVQgU0hFTiA8 eXQuc2hlbkBtZWRpYXRlay5jb20+Cj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAy IGFzCj4gKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsg Kgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxk cm0vZHJtUC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KPiArI2luY2x1ZGUgPGRy bS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5o Pgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KPiArI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVu dC5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW9tbXUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX2Fk ZHJlc3MuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9wbV9ydW50aW1lLmg+Cj4gKwo+ICsjaW5jbHVkZSAibXRrX2RybV9jcnRjLmgiCj4gKyNp bmNsdWRlICJtdGtfZHJtX2RkcC5oIgo+ICsjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgo+ ICsjaW5jbHVkZSAibXRrX2RybV9kcnYuaCIKPiArI2luY2x1ZGUgIm10a19kcm1fZmIuaCIKPiAr I2luY2x1ZGUgIm10a19kcm1fZ2VtLmgiCj4gKwo+ICsjZGVmaW5lIERSSVZFUl9OQU1FICJtZWRp YXRlayIKPiArI2RlZmluZSBEUklWRVJfREVTQyAiTWVkaWF0ZWsgU29DIERSTSIKPiArI2RlZmlu ZSBEUklWRVJfREFURSAiMjAxNTA1MTMiCj4gKyNkZWZpbmUgRFJJVkVSX01BSk9SIDEKPiArI2Rl ZmluZSBEUklWRVJfTUlOT1IgMAo+ICsKPiArc3RhdGljIHZvaWQgbXRrX2F0b21pY19zY2hlZHVs ZShzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlLAo+ICsJCQkJc3RydWN0IGRybV9hdG9t aWNfc3RhdGUgKnN0YXRlKQo+ICt7Cj4gKwlwcml2YXRlLT5jb21taXQuc3RhdGUgPSBzdGF0ZTsK PiArCXNjaGVkdWxlX3dvcmsoJnByaXZhdGUtPmNvbW1pdC53b3JrKTsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgbXRrX2F0b21pY193YWl0X2Zvcl9mZW5jZXMoc3RydWN0IGRybV9hdG9taWNfc3Rh dGUgKnN0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKPiArCXN0cnVjdCBk cm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOwo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yX2VhY2hf cGxhbmVfaW5fc3RhdGUoc3RhdGUsIHBsYW5lLCBwbGFuZV9zdGF0ZSwgaSkKPiArCQltdGtfZmJf d2FpdChwbGFuZS0+c3RhdGUtPmZiKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbXRrX2F0b21p Y19jb21wbGV0ZShzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlLAo+ICsJCQkJc3RydWN0 IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJt ID0gcHJpdmF0ZS0+ZHJtOwo+ICsKPiArCW10a19hdG9taWNfd2FpdF9mb3JfZmVuY2VzKHN0YXRl KTsKPiArCj4gKwlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfbW9kZXNldF9kaXNhYmxlcyhkcm0s IHN0YXRlKTsKPiArCWRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9wbGFuZXMoZHJtLCBzdGF0ZSwg ZmFsc2UpOwo+ICsJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X21vZGVzZXRfZW5hYmxlcyhkcm0s IHN0YXRlKTsKPiArCWRybV9hdG9taWNfaGVscGVyX3dhaXRfZm9yX3ZibGFua3MoZHJtLCBzdGF0 ZSk7Cj4gKwlkcm1fYXRvbWljX2hlbHBlcl9jbGVhbnVwX3BsYW5lcyhkcm0sIHN0YXRlKTsKPiAr CWRybV9hdG9taWNfc3RhdGVfZnJlZShzdGF0ZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG10 a19hdG9taWNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gK3sKPiArCXN0cnVjdCBt dGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBjb250YWluZXJfb2Yod29yaywKPiArCQkJc3RydWN0 IG10a19kcm1fcHJpdmF0ZSwgY29tbWl0LndvcmspOwo+ICsKPiArCW10a19hdG9taWNfY29tcGxl dGUocHJpdmF0ZSwgcHJpdmF0ZS0+Y29tbWl0LnN0YXRlKTsKPiArfQo+ICsKPiArc3RhdGljIGlu dCBtdGtfYXRvbWljX2NvbW1pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAo+ICsJCQkgICAgIHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiArCQkJICAgICBib29sIGFzeW5jKQo+ICt7 Cj4gKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsK PiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gZHJtX2F0b21pY19oZWxwZXJfcHJlcGFyZV9wbGFu ZXMoZHJtLCBzdGF0ZSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJbXV0 ZXhfbG9jaygmcHJpdmF0ZS0+Y29tbWl0LmxvY2spOwo+ICsJZmx1c2hfd29yaygmcHJpdmF0ZS0+ Y29tbWl0LndvcmspOwo+ICsKPiArCWRybV9hdG9taWNfaGVscGVyX3N3YXBfc3RhdGUoZHJtLCBz dGF0ZSk7Cj4gKwo+ICsJaWYgKGFzeW5jKQo+ICsJCW10a19hdG9taWNfc2NoZWR1bGUocHJpdmF0 ZSwgc3RhdGUpOwo+ICsJZWxzZQo+ICsJCW10a19hdG9taWNfY29tcGxldGUocHJpdmF0ZSwgc3Rh dGUpOwo+ICsKPiArCW11dGV4X3VubG9jaygmcHJpdmF0ZS0+Y29tbWl0LmxvY2spOwo+ICsKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9tb2RlX2NvbmZp Z19mdW5jcyBtdGtfZHJtX21vZGVfY29uZmlnX2Z1bmNzID0gewo+ICsJLmZiX2NyZWF0ZSA9IG10 a19kcm1fbW9kZV9mYl9jcmVhdGUsCj4gKwkuYXRvbWljX2NoZWNrID0gZHJtX2F0b21pY19oZWxw ZXJfY2hlY2ssCj4gKwkuYXRvbWljX2NvbW1pdCA9IG10a19hdG9taWNfY29tbWl0LAo+ICt9Owo+ ICsKPiArc3RhdGljIGNvbnN0IGVudW0gbXRrX2RkcF9jb21wX2lkIG10a19kZHBfbWFpbltdID0g ewo+ICsJRERQX0NPTVBPTkVOVF9PVkwwLAo+ICsJRERQX0NPTVBPTkVOVF9DT0xPUjAsCj4gKwlE RFBfQ09NUE9ORU5UX0FBTCwKPiArCUREUF9DT01QT05FTlRfT0QsCj4gKwlERFBfQ09NUE9ORU5U X1JETUEwLAo+ICsJRERQX0NPTVBPTkVOVF9VRk9FLAo+ICsJRERQX0NPTVBPTkVOVF9EU0kwLAo+ ICsJRERQX0NPTVBPTkVOVF9QV00wLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IGVudW0gbXRr X2RkcF9jb21wX2lkIG10a19kZHBfZXh0W10gPSB7Cj4gKwlERFBfQ09NUE9ORU5UX09WTDEsCj4g KwlERFBfQ09NUE9ORU5UX0NPTE9SMSwKPiArCUREUF9DT01QT05FTlRfR0FNTUEsCj4gKwlERFBf Q09NUE9ORU5UX1JETUExLAo+ICsJRERQX0NPTVBPTkVOVF9EUEkwLAo+ICt9Owo+ICsKPiArc3Rh dGljIGludCBtdGtfZHJtX2ttc19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gK3sKPiAr CXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBkcm0tPmRldl9wcml2YXRlOwo+ICsJ c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7 Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlmICghaW9tbXVfcHJlc2VudCgmcGxhdGZvcm1fYnVzX3R5 cGUpKQo+ICsJCXJldHVybiAtRVBST0JFX0RFRkVSOwo+ICsKPiArCXBkZXYgPSBvZl9maW5kX2Rl dmljZV9ieV9ub2RlKHByaXZhdGUtPm11dGV4X25vZGUpOwo+ICsJaWYgKCFwZGV2KSB7Cj4gKwkJ ZGV2X2Vycihkcm0tPmRldiwgIldhaXRpbmcgZm9yIGRpc3AtbXV0ZXggZGV2aWNlICVzXG4iLAo+ ICsJCQlwcml2YXRlLT5tdXRleF9ub2RlLT5mdWxsX25hbWUpOwo+ICsJCW9mX25vZGVfcHV0KHBy aXZhdGUtPm11dGV4X25vZGUpOwo+ICsJCXJldHVybiAtRVBST0JFX0RFRkVSOwo+ICsJfQo+ICsJ cHJpdmF0ZS0+bXV0ZXhfZGV2ID0gJnBkZXYtPmRldjsKPiArCj4gKwlkcm1fbW9kZV9jb25maWdf aW5pdChkcm0pOwo+ICsKPiArCWRybS0+bW9kZV9jb25maWcubWluX3dpZHRoID0gNjQ7Cj4gKwlk cm0tPm1vZGVfY29uZmlnLm1pbl9oZWlnaHQgPSA2NDsKPiArCj4gKwkvKgo+ICsJICogc2V0IG1h eCB3aWR0aCBhbmQgaGVpZ2h0IGFzIGRlZmF1bHQgdmFsdWUoNDA5Nng0MDk2KS4KPiArCSAqIHRo aXMgdmFsdWUgd291bGQgYmUgdXNlZCB0byBjaGVjayBmcmFtZWJ1ZmZlciBzaXplIGxpbWl0YXRp b24KPiArCSAqIGF0IGRybV9tb2RlX2FkZGZiKCkuCj4gKwkgKi8KPiArCWRybS0+bW9kZV9jb25m aWcubWF4X3dpZHRoID0gNDA5NjsKPiArCWRybS0+bW9kZV9jb25maWcubWF4X2hlaWdodCA9IDQw OTY7Cj4gKwlkcm0tPm1vZGVfY29uZmlnLmZ1bmNzID0gJm10a19kcm1fbW9kZV9jb25maWdfZnVu Y3M7Cj4gKwo+ICsJcmV0ID0gY29tcG9uZW50X2JpbmRfYWxsKGRybS0+ZGV2LCBkcm0pOwo+ICsJ aWYgKHJldCkKPiArCQlnb3RvIGVycl9jb25maWdfY2xlYW51cDsKPiArCj4gKwkvKgo+ICsJICog V2UgY3VycmVudGx5IHN1cHBvcnQgdHdvIGZpeGVkIGRhdGEgc3RyZWFtcywgZWFjaCBvcHRpb25h bCwKPiArCSAqIGFuZCBlYWNoIHN0YXRpY2FsbHkgYXNzaWduZWQgdG8gYSBjcnRjOgo+ICsJICog T1ZMMCAtPiBDT0xPUjAgLT4gQUFMIC0+IE9EIC0+IFJETUEwIC0+IFVGT0UgLT4gRFNJMCAuLi4K PiArCSAqLwo+ICsJcmV0ID0gbXRrX2RybV9jcnRjX2NyZWF0ZShkcm0sIG10a19kZHBfbWFpbiwg QVJSQVlfU0laRShtdGtfZGRwX21haW4pKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCWdvdG8gZXJy X2NvbXBvbmVudF91bmJpbmQ7Cj4gKwkvKiAuLi4gYW5kIE9WTDEgLT4gQ09MT1IxIC0+IEdBTU1B IC0+IFJETUExIC0+IERQSTAuICovCj4gKwlyZXQgPSBtdGtfZHJtX2NydGNfY3JlYXRlKGRybSwg bXRrX2RkcF9leHQsIEFSUkFZX1NJWkUobXRrX2RkcF9leHQpKTsKPiArCWlmIChyZXQgPCAwKQo+ ICsJCWdvdG8gZXJyX2NvbXBvbmVudF91bmJpbmQ7Cj4gKwo+ICsJLyogVXNlIE9WTCBkZXZpY2Ug Zm9yIGFsbCBETUEgbWVtb3J5IGFsbG9jYXRpb25zICovCj4gKwlucCA9IHByaXZhdGUtPmNvbXBf bm9kZVttdGtfZGRwX21haW5bMF1dID86Cj4gKwkgICAgIHByaXZhdGUtPmNvbXBfbm9kZVttdGtf ZGRwX2V4dFswXV07Cj4gKwlwZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShucCk7Cj4gKwlp ZiAoIXBkZXYpIHsKPiArCQlyZXQgPSAtRU5PREVWOwo+ICsJCWRldl9lcnIoZHJtLT5kZXYsICJO ZWVkIGF0IGxlYXN0IG9uZSBPVkwgZGV2aWNlXG4iKTsKPiArCQlnb3RvIGVycl9jb21wb25lbnRf dW5iaW5kOwo+ICsJfQo+ICsKPiArCXByaXZhdGUtPmRtYV9kZXYgPSAmcGRldi0+ZGV2Owo+ICsK PiArCS8qCj4gKwkgKiBXZSBkb24ndCB1c2UgdGhlIGRybV9pcnFfaW5zdGFsbCgpIGhlbHBlcnMg cHJvdmlkZWQgYnkgdGhlIERSTQo+ICsJICogY29yZSwgc28gd2UgbmVlZCB0byBzZXQgdGhpcyBt YW51YWxseSBpbiBvcmRlciB0byBhbGxvdyB0aGUKPiArCSAqIERSTV9JT0NUTF9XQUlUX1ZCTEFO SyB0byBvcGVyYXRlIGNvcnJlY3RseS4KPiArCSAqLwo+ICsJZHJtLT5pcnFfZW5hYmxlZCA9IHRy dWU7Cj4gKwlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZHJtLCBNQVhfQ1JUQyk7Cj4gKwlpZiAocmV0 IDwgMCkKPiArCQlnb3RvIGVycl9jb21wb25lbnRfdW5iaW5kOwo+ICsKPiArCWRybV9rbXNfaGVs cGVyX3BvbGxfaW5pdChkcm0pOwo+ICsJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRybSk7Cj4gKwo+ ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnJfY29tcG9uZW50X3VuYmluZDoKPiArCWNvbXBvbmVudF91 bmJpbmRfYWxsKGRybS0+ZGV2LCBkcm0pOwo+ICtlcnJfY29uZmlnX2NsZWFudXA6Cj4gKwlkcm1f bW9kZV9jb25maWdfY2xlYW51cChkcm0pOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIG10a19kcm1fa21zX2RlaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ ICt7Cj4gKwlkcm1fa21zX2hlbHBlcl9wb2xsX2ZpbmkoZHJtKTsKPiArCj4gKwlkcm1fdmJsYW5r X2NsZWFudXAoZHJtKTsKPiArCWNvbXBvbmVudF91bmJpbmRfYWxsKGRybS0+ZGV2LCBkcm0pOwo+ ICsJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZHJtKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBt dGtfZHJtX3VubG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ICt7Cj4gKwltdGtfZHJtX2tt c19kZWluaXQoZHJtKTsKPiArCWRybS0+ZGV2X3ByaXZhdGUgPSBOVUxMOwo+ICsKPiArCXJldHVy biAwOwo+ICt9CgpMaWtlIGxvYWQsIHRoZSB1bmxvYWQgaG9vayBpcyBkZXByZWNhdGVkLiBBbmQg aW4gZHJtLW5leHQgd2Ugbm93IGhhdmUgc29tZQpuaWNlIGhlbHBlcnMgdG8gbWFrZSBub3QgdXNp bmcgYW4gdW5sb2FkIGhvb2sgZWFzaWVyLiBQbGVhc2UgcmVmYWN0b3IgcGVyCmV4aXN0aW5nIGV4 YW1wbGVzIGFuZCBnZXQgcmlkIG9mIHlvdXIgdW5sb2FkIGhvb2suCgo+ICtzdGF0aWMgY29uc3Qg c3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG10a19kcm1fZ2VtX3ZtX29wcyA9IHsKPiArCS5v cGVuID0gZHJtX2dlbV92bV9vcGVuLAo+ICsJLmNsb3NlID0gZHJtX2dlbV92bV9jbG9zZSwKPiAr fTsKCkRyaXZlLWJ5IHJldmlldyBJIGp1c3Qgc3BvdHRlZDogUGxlYXNlIHVzZSBkcm1fZ2VtX2Nt YV92bV9vcHMgaW5zdGVhZCBvZgpyb2xsaW5nIHlvdXIgb3duLgoKVGhhbmtzLCBEYW5pZWwKLS0g CkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6 Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1k ZXZlbAo=