From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v3 2/8] drm: xlnx: Xilinx DRM KMS driver Date: Wed, 17 Jan 2018 09:20:28 +0100 Message-ID: <20180117082028.GC2759@phenom.ffwll.local> References: <1516067831-11382-1-git-send-email-hyun.kwon@xilinx.com> <1516067831-11382-2-git-send-email-hyun.kwon@xilinx.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1516067831-11382-2-git-send-email-hyun.kwon@xilinx.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Hyun Kwon Cc: devicetree@vger.kernel.org, Daniel Vetter , Michal Simek , dri-devel@lists.freedesktop.org, Laurent Pinchart List-Id: devicetree@vger.kernel.org T24gTW9uLCBKYW4gMTUsIDIwMTggYXQgMDU6NTc6MDVQTSAtMDgwMCwgSHl1biBLd29uIHdyb3Rl Ogo+IFhpbGlueCBoYXMgdmFyaW91cyBwbGF0Zm9ybXMgZm9yIGRpc3BsYXksIHdoZXJlIHVzZXJz IGNhbiBjcmVhdGUKPiB1c2luZyBtdWx0aXBsZSBJUHMgaW4gdGhlIHByb2dyYW1tYWJsZSBGUEdB IGZhYnJpYywgb3Igd2hlcmUKPiBzb21lIGhhcmRlbmVkIHBpZXBsaW5lIGlzIGF2YWlsYWJsZSBv biB0aGUgY2hpcC4gRnVydGhlcm1vcmUsCj4gaGFyZGVuZWQgcGlwZWxpbmUgY2FuIGFsc28gaW50 ZXJhY3Qgd2l0aCBzb2Z0IGxvZ2ljcyBpbiBGUEdBLgo+IAo+IFRoZSBYaWxpbnggRFJNIEtNUyBp cyB0byBpbnRlZ3JhdGUgbXVsdGlwbGUgc3ViZGV2aWNlcyBhbmQgdG8gcmVwcmVzZW50Cj4gdGhl IGVudGlyZSBwaXBlbGluZSBhcyBhIHNpbmdsZSBEUk0gZGV2aWNlLiBUaGUgZHJpdmVyIGluY2x1 ZGVzIGhlbHBlcnMKPiAoZXgsIGZyYW1lYnVmZmVyIGFuZCBnZW0gaGVscGVycykgYW5kIGdsdWUg bG9naWNzIChleCwgY3J0YyBpbnRlcmZhY2UpLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEh5dW4gS3dv biA8aHl1bi5rd29uQHhpbGlueC5jb20+Cj4gLS0tCj4gdjMKPiAtIEFkZCBMYXVyZW50IGFzIGEg bWFpbnRhaW5lcgo+IC0gRml4IG11bHRpcGxlLXJlZmVyZW5jZSBvbiBnZW0gb2JqZWN0cwo+IHYy Cj4gLSBDaGFuZ2UgdGhlIFNQRFggaWRlbnRpZmllciBmb3JtYXQKPiAtIE1lcmdlIHBhdGNoZXMo Y3J0YywgZ2VtLCBmYikgaW50byBzaW5nbGUgb25lCj4gdjIgb2YgeGxueF9kcnYKPiAtIFJlbmFt ZSBrbXMgdG8gZGlzcGxheSBpbiB4bG54X2Rydgo+IC0gUmVwbGFjZSBzb21lIHhsbnggc3BlY2lm aWMgZmIgaGVscGVyIHdpdGggY29tbW9uIGhlbHBlcnMgaW4geGxueF9kcnYKPiAtIERvbid0IHNl dCB0aGUgY29tbWl0IHRhaWwgY2FsbGJhY2sgaW4geGxueF9kcnYKPiAtIFN1cHBvcnQgJ3BvcnRz JyBncmFwaCBiaW5kaW5nIGluIHhsbnhfZHJ2Cj4gdjIgb2YgeGxueF9mYgo+IC0gUmVtb3ZlIHdy YXBwZXJzIGluIHhsbnhfZmIKPiAtIFJlcGxhY2Ugc29tZSBmdW5jdGlvbnMgd2l0aCBkcm0gY29y ZSBoZWxwZXJzIGluIHhsbnhfZmIKPiAtLS0KPiAtLS0KPiAgTUFJTlRBSU5FUlMgICAgICAgICAg ICAgICAgICAgICAgfCAgIDkgKwo+ICBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAgICAgICB8 ICAgMiArCj4gIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgICAgIHwgICAxICsKPiAgZHJp dmVycy9ncHUvZHJtL3hsbngvS2NvbmZpZyAgICAgfCAgMTIgKysKPiAgZHJpdmVycy9ncHUvZHJt L3hsbngvTWFrZWZpbGUgICAgfCAgIDIgKwo+ICBkcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2Ny dGMuYyB8IDIwMyArKysrKysrKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL3hsbngveGxu eF9jcnRjLmggfCAgNzggKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2Rydi5j ICB8IDQ0NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgZHJpdmVy cy9ncHUvZHJtL3hsbngveGxueF9kcnYuaCAgfCAgMzAgKysrCj4gIGRyaXZlcnMvZ3B1L2RybS94 bG54L3hsbnhfZmIuYyAgIHwgMjk4ICsrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGRyaXZl cnMvZ3B1L2RybS94bG54L3hsbnhfZmIuaCAgIHwgIDMzICsrKwo+ICBkcml2ZXJzL2dwdS9kcm0v eGxueC94bG54X2dlbS5jICB8ICA0NyArKysrCj4gIGRyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhf Z2VtLmggIHwgIDI2ICsrKwo+ICAxMyBmaWxlcyBjaGFuZ2VkLCAxMTg4IGluc2VydGlvbnMoKykK PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94bG54L0tjb25maWcKPiAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94bG54L01ha2VmaWxlCj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2NydGMuYwo+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9jcnRjLmgKPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZHJ2LmMKPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZHJ2LmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZmIuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL3hsbngveGxueF9mYi5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0veGxueC94bG54X2dlbS5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0veGxueC94bG54X2dlbS5oCj4gCj4gZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJ TlRBSU5FUlMKPiBpbmRleCAyODExYTIxLi5kYzg0MzQ2IDEwMDY0NAo+IC0tLSBhL01BSU5UQUlO RVJTCj4gKysrIGIvTUFJTlRBSU5FUlMKPiBAQCAtNDY4Miw2ICs0NjgyLDE1IEBAIEY6ICAgICAg IGRyaXZlcnMvZ3B1L2RybS9ldG5hdml2Lwo+ICBGOiAgICAgaW5jbHVkZS91YXBpL2RybS9ldG5h dml2X2RybS5oCj4gIEY6ICAgICBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlz cGxheS9ldG5hdml2Lwo+IAo+ICtEUk0gRFJJVkVSUyBGT1IgWElMSU5YCj4gK006ICAgICBIeXVu IEt3b24gPGh5dW4ua3dvbkB4aWxpbnguY29tPgo+ICtNOiAgICAgTGF1cmVudCBQaW5jaGFydCA8 bGF1cmVudC5waW5jaGFydEBpZGVhc29uYm9hcmQuY29tPgo+ICtMOiAgICAgZHJpLWRldmVsQGxp c3RzLmZyZWVkZXNrdG9wLm9yZwo+ICtTOiAgICAgTWFpbnRhaW5lZAo+ICtGOiAgICAgZHJpdmVy cy9ncHUvZHJtL3hsbngvCj4gK0Y6ICAgICBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGlu Z3MvZGlzcGxheS94bG54Lwo+ICtUOiAgICAgZ2l0IGdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Au b3JnL2RybS9kcm0tbWlzYwoKT2ssIEkgc2Nyb2xsZWQgdGhyb3VnaCB0aGUgcGF0Y2hlcyBhZ2Fp biBhbmQgYmVzaWRlcyB0aGUgb25lIG5pdCBmb3IgdGhlCmVuYWJsZS9kaXNhYmxlX3ZibGFuayBj YWxsYmFjayBpdCBsb29rcyBhbGwgZ29vZC4gT24gcGF0Y2hlcyAyIGFuZCA0LTY6CgpBY2tlZC1i eTogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KClRoZXNlIGFyZSByZWFk eSBmb3IgbWVyZ2luZy4gVGhlIDIgZHQgcGF0Y2hlcyBuZWVkIGFuIGFjayBmcm9tIFJvYgpIZXJy aW5nLiBUaGUgZmluYWwgMiBwYXRjaGVzIHdpdGggdGhlIG5ldyBwcm9wZXJ0aWVzIG5lZWQgdGhl IHVzdWFsIHVhcGkKd29yayBhbmQgdXNlcnNwYWNlIGVuYWJsaW5nIHBlcgoKaHR0cHM6Ly9kcmku ZnJlZWRlc2t0b3Aub3JnL2RvY3MvZHJtL2dwdS9kcm0tdWFwaS5odG1sI29wZW4tc291cmNlLXVz ZXJzcGFjZS1yZXF1aXJlbWVudHMKClNpbmNlIExhdXJlbnQgaXMgbGlzdGVkIGFzIGNvLW1haW50 YWluZXIsIGFuZCBMYXVyZW50IGlzIGFscmVhZHkgZHJtLW1pc2MKY29tbWl0dGVyIEkgdGhpbmsg aXQncyBpbmRlZWQgYmVzdCB0byBtYWludGFpbiBpdCBpbiB0aGVyZS4gUGxlYXNlIHJlcXVlc3QK YSBuZXcgYWNjb3VudCBwZXIKCmh0dHBzOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL0FjY291 bnRSZXF1ZXN0cy8KCmFuZCBjaGVjayBvdXQgcXVpY2tzdGFydCBpbgoKaHR0cHM6Ly8wMS5vcmcv bGludXhncmFwaGljcy9nZngtZG9jcy9tYWludGFpbmVyLXRvb2xzL2RpbS5odG1sI3F1aWNrc3Rh cnQKCkZvciBhbnkgcXVlc3Rpb25zIEkgb3IgTGF1cmVudCBzaG91bGQgYmUgYWJsZSB0byBoZWxw IG91dC4gTXkgZXhwZWN0YXRpb24KaXMgdGhhdCBvbmNlIHlvdSBoYXZlIHRoZSBhY2sgZnJvbSBE VCBtYWludGFpbmVycyB5b3UnbGwgbWVyZ2UgcGF0Y2hlcyAxLTYKeW91cnNlbGYgZGlyZWN0bHku CgpUaGFua3MsIERhbmllbAoKPiArCj4gIERSTSBEUklWRVJTIEZPUiBaVEUgWlgKPiAgTTogICAg IFNoYXduIEd1byA8c2hhd25ndW9Aa2VybmVsLm9yZz4KPiAgTDogICAgIGRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcg Yi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+IGluZGV4IDIyZWU1YTEuLmYzYzcxZTMgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v S2NvbmZpZwo+IEBAIC0yODIsNiArMjgyLDggQEAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0vdGlu eWRybS9LY29uZmlnIgo+IAo+ICBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9wbDExMS9LY29uZmln Igo+IAo+ICtzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS94bG54L0tjb25maWciCj4gKwo+ICAjIEtl ZXAgbGVnYWN5IGRyaXZlcnMgbGFzdAo+IAo+ICBtZW51Y29uZmlnIERSTV9MRUdBQ1kKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2Vm aWxlCj4gaW5kZXggOTI1NTBkZC4uMmY0NGM3NyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiBAQCAtMTAzLDMg KzEwMyw0IEBAIG9iai0kKENPTkZJR19EUk1fWlRFKSAgICAgICArPSB6dGUvCj4gIG9iai0kKENP TkZJR19EUk1fTVhTRkIpICAgICAgICArPSBteHNmYi8KPiAgb2JqLSQoQ09ORklHX0RSTV9USU5Z RFJNKSArPSB0aW55ZHJtLwo+ICBvYmotJChDT05GSUdfRFJNX1BMMTExKSArPSBwbDExMS8KPiAr b2JqLSQoQ09ORklHX0RSTV9YTE5YKSArPSB4bG54Lwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0veGxueC9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3hsbngvS2NvbmZpZwo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uMTlmZDdjZAo+IC0tLSAvZGV2L251bGwK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGxueC9LY29uZmlnCj4gQEAgLTAsMCArMSwxMiBAQAo+ ICtjb25maWcgRFJNX1hMTlgKPiArICAgICAgIHRyaXN0YXRlICJYaWxpbnggRFJNIEtNUyBEcml2 ZXIiCj4gKyAgICAgICBkZXBlbmRzIG9uIERSTSAmJiBPRgo+ICsgICAgICAgc2VsZWN0IERSTV9L TVNfSEVMUEVSCj4gKyAgICAgICBzZWxlY3QgRFJNX0tNU19DTUFfSEVMUEVSCj4gKyAgICAgICBz ZWxlY3QgRFJNX0dFTV9DTUFfSEVMUEVSCj4gKyAgICAgICBoZWxwCj4gKyAgICAgICAgIFhpbGlu eCBEUk0gS01TIGRyaXZlci4gQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlCj4gKyAgICAg ICAgIGEgWGlsaW54IFNvQ3Mgd2l0aCBoYXJkZW5lZCBkaXNwbGF5IHBpcGVsaW5lIG9yIHNvZnQK PiArICAgICAgICAgZGlzcGxheSBwaXBlbGluZSB1c2luZyBYaWxpbnggSVBzIGluIEZQR0EuIFRo aXMgbW9kdWxlCj4gKyAgICAgICAgIHByb3ZpZGVzIHRoZSBrZXJuZWwgbW9kZSBzZXR0aW5nIGZ1 bmN0aW9uYWxpdGllcwo+ICsgICAgICAgICBmb3IgWGlsaW54IGRpc3BsYXkgZHJpdmVycy4KPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hsbngvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9k cm0veGxueC9NYWtlZmlsZQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4u YzYwYTI4MQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGxueC9NYWtl ZmlsZQo+IEBAIC0wLDAgKzEsMiBAQAo+ICt4bG54X2RybS1vYmpzICs9IHhsbnhfY3J0Yy5vIHhs bnhfZHJ2Lm8geGxueF9mYi5vIHhsbnhfZ2VtLm8KPiArb2JqLSQoQ09ORklHX0RSTV9YTE5YKSAr PSB4bG54X2RybS5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfY3J0 Yy5jIGIvZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9jcnRjLmMKPiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+IGluZGV4IDAwMDAwMDAuLjg5YmViOWUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL3hsbngveGxueF9jcnRjLmMKPiBAQCAtMCwwICsxLDIwMyBAQAo+ICsvLyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ICsvKgo+ICsgKiBYaWxpbnggRFJNIGNy dGMgZHJpdmVyCj4gKyAqCj4gKyAqICBDb3B5cmlnaHQgKEMpIDIwMTcgLSAyMDE4IFhpbGlueCwg SW5jLgo+ICsgKgo+ICsgKiAgQXV0aG9yOiBIeXVuIFdvbyBLd29uIDxoeXVuLmt3b25AeGlsaW54 LmNvbT4KPiArICoKPiArICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAo+ICsgKiBtYXkg YmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgo+ ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKi8KPiArCj4gKyNpbmNsdWRl IDxkcm0vZHJtUC5oPgo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KPiArCj4gKyNpbmNs dWRlICJ4bG54X2NydGMuaCIKPiArI2luY2x1ZGUgInhsbnhfZHJ2LmgiCj4gKwo+ICsvKgo+ICsg KiBPdmVydmlldwo+ICsgKiAtLS0tLS0tLQo+ICsgKgo+ICsgKiBUaGUgWGlsaW54IENSVEMgbGF5 ZXIgaXMgdG8gZW5hYmxlIHRoZSBjdXN0b20gaW50ZXJmYWNlIHRvIENSVEMgZHJpdmVycy4KPiAr ICogVGhlIGludGVyZmFjZSBpcyB1c2VkIGJ5IFhpbGlueCBEUk0gZHJpdmVyIHdoZXJlIGl0IG5l ZWRzIENSVEMKPiArICogZnVuY3Rpb25haWx0eS4gQ1JUQyBkcml2ZXJzIHNob3VsZCBhdHRhY2gg dGhlIGRlc2lyZWQgY2FsbGJhY2tzCj4gKyAqIHRvIHN0cnVjdCB4bG54X2NydGMgYW5kIHJlZ2lz dGVyIHRoZSB4bG54X2NydGMgd2l0aCBjb3JyZWNzcG9uZGluZwo+ICsgKiBkcm1fZGV2aWNlLiBJ dCdzIGhpZ2hseSByZWNvbW1lbmRlZCBDUlRDIGRyaXZlcnMgcmVnaXN0ZXIgYWxsIGNhbGxiYWNr cwo+ICsgKiBldmVuIHRob3VnaCBtYW55IG9mIHRoZW0gYXJlIG9wdGlvbmFsLgo+ICsgKiBUaGUg Q1JUQyBoZWxwZXIgc2ltcGx5IHdhbGtzIHRocm91Z2ggdGhlIHJlZ2lzdGVyZWQgQ1JUQyBkZXZp Y2UsCj4gKyAqIGFuZCBjYWxsIHRoZSBjYWxsYmFja3MuCj4gKyAqLwo+ICsKPiArLyoqCj4gKyAq IHN0cnVjdCB4bG54X2NydGNfaGVscGVyIC0gWGlsaW54IENSVEMgaGVscGVyCj4gKyAqIEB4bG54 X2NydGNzOiBsaXN0IG9mIFhpbGlueCBDUlRDIGRldmljZXMKPiArICogQGxvY2s6IGxvY2sgdG8g cHJvdGVjdCBAeGxueF9jcnRjcwo+ICsgKiBAZHJtOiBiYWNrIHBvaW50ZXIgdG8gRFJNIGNvcmUK PiArICovCj4gK3N0cnVjdCB4bG54X2NydGNfaGVscGVyIHsKPiArICAgICAgIHN0cnVjdCBsaXN0 X2hlYWQgeGxueF9jcnRjczsKPiArICAgICAgIHN0cnVjdCBtdXRleCBsb2NrOyAvKiBsb2NrIGZv ciBAeGxueF9jcnRjcyAqLwo+ICsgICAgICAgc3RydWN0IGRybV9kZXZpY2UgKmRybTsKPiArfTsK PiArCj4gKyNkZWZpbmUgWExOWF9DUlRDX01BWF9IRUlHSFRfV0lEVEggICAgIFVJTlRfTUFYCj4g Kwo+ICtpbnQgeGxueF9jcnRjX2hlbHBlcl9lbmFibGVfdmJsYW5rKHN0cnVjdCB4bG54X2NydGNf aGVscGVyICpoZWxwZXIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgY3J0Y19pZCkKPiArewo+ICsgICAgICAgc3RydWN0IHhsbnhfY3J0YyAqY3J0YzsK PiArCj4gKyAgICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZoZWxwZXItPnhsbnhfY3J0 Y3MsIGxpc3QpCj4gKyAgICAgICAgICAgICAgIGlmIChkcm1fY3J0Y19pbmRleCgmY3J0Yy0+Y3J0 YykgPT0gY3J0Y19pZCkKPiArICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3J0Yy0+ZW5hYmxl X3ZibGFuaykKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcnRjLT5l bmFibGVfdmJsYW5rKGNydGMpOwo+ICsgICAgICAgcmV0dXJuIC1FTk9ERVY7Cj4gK30KPiArCj4g K3ZvaWQgeGxueF9jcnRjX2hlbHBlcl9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgeGxueF9jcnRjX2hl bHBlciAqaGVscGVyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgY3J0Y19pZCkKPiArewo+ICsgICAgICAgc3RydWN0IHhsbnhfY3J0YyAqY3J0YzsK PiArCj4gKyAgICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZoZWxwZXItPnhsbnhfY3J0 Y3MsIGxpc3QpIHsKPiArICAgICAgICAgICAgICAgaWYgKGRybV9jcnRjX2luZGV4KCZjcnRjLT5j cnRjKSA9PSBjcnRjX2lkKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNydGMtPmRp c2FibGVfdmJsYW5rKQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3J0Yy0+ZGlz YWJsZV92YmxhbmsoY3J0Yyk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwo+ICsg ICAgICAgICAgICAgICB9Cj4gKyAgICAgICB9Cj4gK30KPiArCj4gK3Vuc2lnbmVkIGludCB4bG54 X2NydGNfaGVscGVyX2dldF9hbGlnbihzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqaGVscGVyKQo+ ICt7Cj4gKyAgICAgICBzdHJ1Y3QgeGxueF9jcnRjICpjcnRjOwo+ICsgICAgICAgdW5zaWduZWQg aW50IGFsaWduID0gMSwgdG1wOwo+ICsKPiArICAgICAgIGxpc3RfZm9yX2VhY2hfZW50cnkoY3J0 YywgJmhlbHBlci0+eGxueF9jcnRjcywgbGlzdCkgewo+ICsgICAgICAgICAgICAgICBpZiAoY3J0 Yy0+Z2V0X2FsaWduKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gY3J0Yy0+Z2V0 X2FsaWduKGNydGMpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGFsaWduID0gQUxJR04oYWxp Z24sIHRtcCk7Cj4gKyAgICAgICAgICAgICAgIH0KPiArICAgICAgIH0KPiArCj4gKyAgICAgICBy ZXR1cm4gYWxpZ247Cj4gK30KPiArCj4gK3U2NCB4bG54X2NydGNfaGVscGVyX2dldF9kbWFfbWFz ayhzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqaGVscGVyKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3Qg eGxueF9jcnRjICpjcnRjOwo+ICsgICAgICAgdTY0IG1hc2sgPSBETUFfQklUX01BU0soc2l6ZW9m KGRtYV9hZGRyX3QpICogOCksIHRtcDsKPiArCj4gKyAgICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5 KGNydGMsICZoZWxwZXItPnhsbnhfY3J0Y3MsIGxpc3QpIHsKPiArICAgICAgICAgICAgICAgaWYg KGNydGMtPmdldF9kbWFfbWFzaykgewo+ICsgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IGNy dGMtPmdldF9kbWFfbWFzayhjcnRjKTsKPiArICAgICAgICAgICAgICAgICAgICAgICBtYXNrID0g bWluKG1hc2ssIHRtcCk7Cj4gKyAgICAgICAgICAgICAgIH0KPiArICAgICAgIH0KPiArCj4gKyAg ICAgICByZXR1cm4gbWFzazsKPiArfQo+ICsKPiAraW50IHhsbnhfY3J0Y19oZWxwZXJfZ2V0X21h eF93aWR0aChzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqaGVscGVyKQo+ICt7Cj4gKyAgICAgICBz dHJ1Y3QgeGxueF9jcnRjICpjcnRjOwo+ICsgICAgICAgdW5zaWduZWQgaW50IHdpZHRoID0gWExO WF9DUlRDX01BWF9IRUlHSFRfV0lEVEgsIHRtcDsKPiArCj4gKyAgICAgICBsaXN0X2Zvcl9lYWNo X2VudHJ5KGNydGMsICZoZWxwZXItPnhsbnhfY3J0Y3MsIGxpc3QpIHsKPiArICAgICAgICAgICAg ICAgaWYgKGNydGMtPmdldF9tYXhfd2lkdGgpIHsKPiArICAgICAgICAgICAgICAgICAgICAgICB0 bXAgPSBjcnRjLT5nZXRfbWF4X3dpZHRoKGNydGMpOwo+ICsgICAgICAgICAgICAgICAgICAgICAg IHdpZHRoID0gbWluKHdpZHRoLCB0bXApOwo+ICsgICAgICAgICAgICAgICB9Cj4gKyAgICAgICB9 Cj4gKwo+ICsgICAgICAgcmV0dXJuIHdpZHRoOwo+ICt9Cj4gKwo+ICtpbnQgeGxueF9jcnRjX2hl bHBlcl9nZXRfbWF4X2hlaWdodChzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqaGVscGVyKQo+ICt7 Cj4gKyAgICAgICBzdHJ1Y3QgeGxueF9jcnRjICpjcnRjOwo+ICsgICAgICAgdW5zaWduZWQgaW50 IGhlaWdodCA9IFhMTlhfQ1JUQ19NQVhfSEVJR0hUX1dJRFRILCB0bXA7Cj4gKwo+ICsgICAgICAg bGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmaGVscGVyLT54bG54X2NydGNzLCBsaXN0KSB7Cj4g KyAgICAgICAgICAgICAgIGlmIChjcnRjLT5nZXRfbWF4X2hlaWdodCkgewo+ICsgICAgICAgICAg ICAgICAgICAgICAgIHRtcCA9IGNydGMtPmdldF9tYXhfaGVpZ2h0KGNydGMpOwo+ICsgICAgICAg ICAgICAgICAgICAgICAgIGhlaWdodCA9IG1pbihoZWlnaHQsIHRtcCk7Cj4gKyAgICAgICAgICAg ICAgIH0KPiArICAgICAgIH0KPiArCj4gKyAgICAgICByZXR1cm4gaGVpZ2h0Owo+ICt9Cj4gKwo+ ICt1aW50MzJfdCB4bG54X2NydGNfaGVscGVyX2dldF9mb3JtYXQoc3RydWN0IHhsbnhfY3J0Y19o ZWxwZXIgKmhlbHBlcikKPiArewo+ICsgICAgICAgc3RydWN0IHhsbnhfY3J0YyAqY3J0YzsKPiAr ICAgICAgIHUzMiBmb3JtYXQgPSAwLCB0bXA7Cj4gKwo+ICsgICAgICAgbGlzdF9mb3JfZWFjaF9l bnRyeShjcnRjLCAmaGVscGVyLT54bG54X2NydGNzLCBsaXN0KSB7Cj4gKyAgICAgICAgICAgICAg IGlmIChjcnRjLT5nZXRfZm9ybWF0KSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgdG1wID0g Y3J0Yy0+Z2V0X2Zvcm1hdChjcnRjKTsKPiArICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9y bWF0ICYmIGZvcm1hdCAhPSB0bXApCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gMDsKPiArICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSB0bXA7Cj4gKyAgICAg ICAgICAgICAgIH0KPiArICAgICAgIH0KPiArCj4gKyAgICAgICByZXR1cm4gZm9ybWF0Owo+ICt9 Cj4gKwo+ICtzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqeGxueF9jcnRjX2hlbHBlcl9pbml0KHN0 cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gK3sKPiArICAgICAgIHN0cnVjdCB4bG54X2NydGNfaGVs cGVyICpoZWxwZXI7Cj4gKwo+ICsgICAgICAgaGVscGVyID0gZGV2bV9remFsbG9jKGRybS0+ZGV2 LCBzaXplb2YoKmhlbHBlciksIEdGUF9LRVJORUwpOwo+ICsgICAgICAgaWYgKCFoZWxwZXIpCj4g KyAgICAgICAgICAgICAgIHJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICsKPiArICAgICAgIElO SVRfTElTVF9IRUFEKCZoZWxwZXItPnhsbnhfY3J0Y3MpOwo+ICsgICAgICAgbXV0ZXhfaW5pdCgm aGVscGVyLT5sb2NrKTsKPiArICAgICAgIGhlbHBlci0+ZHJtID0gZHJtOwo+ICsKPiArICAgICAg IHJldHVybiBoZWxwZXI7Cj4gK30KPiArCj4gK3ZvaWQgeGxueF9jcnRjX2hlbHBlcl9maW5pKHN0 cnVjdCBkcm1fZGV2aWNlICpkcm0sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IHhsbnhfY3J0Y19oZWxwZXIgKmhlbHBlcikKPiArewo+ICsgICAgICAgaWYgKFdBUk5fT04oaGVs cGVyLT5kcm0gIT0gZHJtKSkKPiArICAgICAgICAgICAgICAgcmV0dXJuOwo+ICsKPiArICAgICAg IGlmIChXQVJOX09OKCFsaXN0X2VtcHR5KCZoZWxwZXItPnhsbnhfY3J0Y3MpKSkKPiArICAgICAg ICAgICAgICAgcmV0dXJuOwo+ICsKPiArICAgICAgIG11dGV4X2Rlc3Ryb3koJmhlbHBlci0+bG9j ayk7Cj4gKyAgICAgICBkZXZtX2tmcmVlKGRybS0+ZGV2LCBoZWxwZXIpOwo+ICt9Cj4gKwo+ICt2 b2lkIHhsbnhfY3J0Y19yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgeGxu eF9jcnRjICpjcnRjKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqaGVs cGVyID0geGxueF9nZXRfY3J0Y19oZWxwZXIoZHJtKTsKPiArCj4gKyAgICAgICBtdXRleF9sb2Nr KCZoZWxwZXItPmxvY2spOwo+ICsgICAgICAgbGlzdF9hZGRfdGFpbCgmY3J0Yy0+bGlzdCwgJmhl bHBlci0+eGxueF9jcnRjcyk7Cj4gKyAgICAgICBtdXRleF91bmxvY2soJmhlbHBlci0+bG9jayk7 Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwoeGxueF9jcnRjX3JlZ2lzdGVyKTsKPiArCj4gK3Zv aWQgeGxueF9jcnRjX3VucmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IHhs bnhfY3J0YyAqY3J0YykKPiArewo+ICsgICAgICAgc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIgKmhl bHBlciA9IHhsbnhfZ2V0X2NydGNfaGVscGVyKGRybSk7Cj4gKwo+ICsgICAgICAgbXV0ZXhfbG9j aygmaGVscGVyLT5sb2NrKTsKPiArICAgICAgIGxpc3RfZGVsKCZjcnRjLT5saXN0KTsKPiArICAg ICAgIG11dGV4X3VubG9jaygmaGVscGVyLT5sb2NrKTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQ TCh4bG54X2NydGNfdW5yZWdpc3Rlcik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94 bG54L3hsbnhfY3J0Yy5oIGIvZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9jcnRjLmgKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjE0OThlMTAKPiAtLS0gL2Rldi9udWxs Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9jcnRjLmgKPiBAQCAtMCwwICsxLDc4 IEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8qCj4gKyAqIFhp bGlueCBEUk0gY3J0YyBoZWFkZXIKPiArICoKPiArICogIENvcHlyaWdodCAoQykgMjAxNyAtIDIw MTggWGlsaW54LCBJbmMuCj4gKyAqCj4gKyAqICBBdXRob3I6IEh5dW4gV29vIEt3b24gPGh5dW4u a3dvbkB4aWxpbnguY29tPgo+ICsgKgo+ICsgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgdmVy c2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5k Cj4gKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhv c2UgdGVybXMuCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4gKyAq IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqLwo+ICsK PiArI2lmbmRlZiBfWExOWF9DUlRDX0hfCj4gKyNkZWZpbmUgX1hMTlhfQ1JUQ19IXwo+ICsKPiAr LyoqCj4gKyAqIHN0cnVjdCB4bG54X2NydGMgLSBYaWxpbnggQ1JUQyBkZXZpY2UKPiArICogQGNy dGM6IERSTSBDUlRDIGRldmljZQo+ICsgKiBAbGlzdDogbGlzdCBub2RlIGZvciBYaWxpbnggQ1JU QyBkZXZpY2UgbGlzdAo+ICsgKiBAZW5hYmxlX3ZibGFuazogRW5hYmxlIHZibGFuawo+ICsgKiBA ZGlzYWJsZV92Ymxhbms6IERpc2FibGUgdmJsYW5rCj4gKyAqIEBnZXRfYWxpZ246IEdldCB0aGUg YWxpZ25tZW50IHJlcXVpcmVtZW50IG9mIENSVEMgZGV2aWNlCj4gKyAqIEBnZXRfZG1hX21hc2s6 IEdldCB0aGUgZG1hIG1hc2sgb2YgQ1JUQyBkZXZpY2UKPiArICogQGdldF9tYXhfd2lkdGg6IEdl dCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgd2lkdGgKPiArICogQGdldF9tYXhfaGVpZ2h0OiBHZXQg dGhlIG1heGltdW0gc3VwcG9ydGVkIGhlaWdodAo+ICsgKiBAZ2V0X2Zvcm1hdDogR2V0IHRoZSBj dXJyZW50IGZvcm1hdCBvZiBDUlRDIGRldmljZQo+ICsgKi8KPiArc3RydWN0IHhsbnhfY3J0YyB7 Cj4gKyAgICAgICBzdHJ1Y3QgZHJtX2NydGMgY3J0YzsKPiArICAgICAgIHN0cnVjdCBsaXN0X2hl YWQgbGlzdDsKPiArICAgICAgIGludCAoKmVuYWJsZV92YmxhbmspKHN0cnVjdCB4bG54X2NydGMg KmNydGMpOwo+ICsgICAgICAgdm9pZCAoKmRpc2FibGVfdmJsYW5rKShzdHJ1Y3QgeGxueF9jcnRj ICpjcnRjKTsKPiArICAgICAgIHVuc2lnbmVkIGludCAoKmdldF9hbGlnbikoc3RydWN0IHhsbnhf Y3J0YyAqY3J0Yyk7Cj4gKyAgICAgICB1NjQgKCpnZXRfZG1hX21hc2spKHN0cnVjdCB4bG54X2Ny dGMgKmNydGMpOwo+ICsgICAgICAgaW50ICgqZ2V0X21heF93aWR0aCkoc3RydWN0IHhsbnhfY3J0 YyAqY3J0Yyk7Cj4gKyAgICAgICBpbnQgKCpnZXRfbWF4X2hlaWdodCkoc3RydWN0IHhsbnhfY3J0 YyAqY3J0Yyk7Cj4gKyAgICAgICB1aW50MzJfdCAoKmdldF9mb3JtYXQpKHN0cnVjdCB4bG54X2Ny dGMgKmNydGMpOwo+ICt9Owo+ICsKPiArLyoKPiArICogSGVscGVyIGZ1bmN0aW9uczogdXNlZCB3 aXRoaW4gWGxueCBEUk0KPiArICovCj4gKwo+ICtzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlcjsKPiAr Cj4gK2ludCB4bG54X2NydGNfaGVscGVyX2VuYWJsZV92Ymxhbmsoc3RydWN0IHhsbnhfY3J0Y19o ZWxwZXIgKmhlbHBlciwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBjcnRjX2lkKTsKPiArdm9pZCB4bG54X2NydGNfaGVscGVyX2Rpc2FibGVfdmJsYW5r KHN0cnVjdCB4bG54X2NydGNfaGVscGVyICpoZWxwZXIsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjcnRjX2lkKTsKPiArdW5zaWduZWQgaW50IHhs bnhfY3J0Y19oZWxwZXJfZ2V0X2FsaWduKHN0cnVjdCB4bG54X2NydGNfaGVscGVyICpoZWxwZXIp Owo+ICt1NjQgeGxueF9jcnRjX2hlbHBlcl9nZXRfZG1hX21hc2soc3RydWN0IHhsbnhfY3J0Y19o ZWxwZXIgKmhlbHBlcik7Cj4gK2ludCB4bG54X2NydGNfaGVscGVyX2dldF9tYXhfd2lkdGgoc3Ry dWN0IHhsbnhfY3J0Y19oZWxwZXIgKmhlbHBlcik7Cj4gK2ludCB4bG54X2NydGNfaGVscGVyX2dl dF9tYXhfaGVpZ2h0KHN0cnVjdCB4bG54X2NydGNfaGVscGVyICpoZWxwZXIpOwo+ICt1aW50MzJf dCB4bG54X2NydGNfaGVscGVyX2dldF9mb3JtYXQoc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIgKmhl bHBlcik7Cj4gKwo+ICtzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqeGxueF9jcnRjX2hlbHBlcl9p bml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pOwo+ICt2b2lkIHhsbnhfY3J0Y19oZWxwZXJfZmlu aShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCB4bG54X2NydGNfaGVscGVyICpoZWxwZXIpOwo+ICsKPiArLyoKPiArICogQ1JUQyByZWdp c3RyYXRpb246IHVzZWQgYnkgb3RoZXIgc3ViLWRyaXZlciBtb2R1bGVzCj4gKyAqLwo+ICsKPiAr c3RhdGljIGlubGluZSBzdHJ1Y3QgeGxueF9jcnRjICp0b194bG54X2NydGMoc3RydWN0IGRybV9j cnRjICpjcnRjKQo+ICt7Cj4gKyAgICAgICByZXR1cm4gY29udGFpbmVyX29mKGNydGMsIHN0cnVj dCB4bG54X2NydGMsIGNydGMpOwo+ICt9Cj4gKwo+ICt2b2lkIHhsbnhfY3J0Y19yZWdpc3Rlcihz dHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgeGxueF9jcnRjICpjcnRjKTsKPiArdm9pZCB4 bG54X2NydGNfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgeGxueF9j cnRjICpjcnRjKTsKPiArCj4gKyNlbmRpZiAvKiBfWExOWF9DUlRDX0hfICovCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0veGxu eC94bG54X2Rydi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5hMzUw NDkyCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZHJ2 LmMKPiBAQCAtMCwwICsxLDQ0NyBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMAo+ICsvKgo+ICsgKiBYaWxpbnggRFJNIEtNUyBEcml2ZXIKPiArICoKPiArICogIENvcHly aWdodCAoQykgMjAxMyAtIDIwMTggWGlsaW54LCBJbmMuCj4gKyAqCj4gKyAqICBBdXRob3I6IEh5 dW4gV29vIEt3b24gPGh5dW4ua3dvbkB4aWxpbnguY29tPgo+ICsgKgo+ICsgKiBUaGlzIHNvZnR3 YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj Cj4gKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgYW5kCj4gKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQg bW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv Zgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxk cm0vZHJtX2F0b21pYy5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cj4g KyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2Zi X2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fY21hX2hlbHBlci5oPgo+ICsjaW5j bHVkZSA8ZHJtL2RybV9vZi5oPgo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgo+ ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+ Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBo Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxp bnV4L3Jlc2VydmF0aW9uLmg+Cj4gKwo+ICsjaW5jbHVkZSAieGxueF9jcnRjLmgiCj4gKyNpbmNs dWRlICJ4bG54X2ZiLmgiCj4gKyNpbmNsdWRlICJ4bG54X2dlbS5oIgo+ICsKPiArI2RlZmluZSBE UklWRVJfTkFNRSAgICAieGxueCIKPiArI2RlZmluZSBEUklWRVJfREVTQyAgICAiWGlsaW54IERS TSBLTVMgRHJpdmVyIgo+ICsjZGVmaW5lIERSSVZFUl9EQVRFICAgICIyMDEzMDUwOSIKPiArI2Rl ZmluZSBEUklWRVJfTUFKT1IgICAxCj4gKyNkZWZpbmUgRFJJVkVSX01JTk9SICAgMAo+ICsKPiAr c3RhdGljIHVpbnQgeGxueF9mYmRldl92cmVzID0gMjsKPiArbW9kdWxlX3BhcmFtX25hbWVkKGZi ZGV2X3ZyZXMsIHhsbnhfZmJkZXZfdnJlcywgdWludCwgMDQ0NCk7Cj4gK01PRFVMRV9QQVJNX0RF U0MoZmJkZXZfdnJlcywKPiArICAgICAgICAgICAgICAgICJmYmRldiB2aXJ0dWFsIHJlc29sdXRp b24gbXVsdGlwbGllciBmb3IgZmIgKGRlZmF1bHQ6IDIpIik7Cj4gKwo+ICsvKioKPiArICogc3Ry dWN0IHhsbnhfZHJtIC0gWGlsaW54IERSTSBwcml2YXRlIGRhdGEKPiArICogQGRybTogRFJNIGNv cmUKPiArICogQGNydGM6IFhpbGlueCBEUk0gQ1JUQyBoZWxwZXIKPiArICogQGZiOiBEUk0gZmIg aGVscGVyCj4gKyAqIEBwZGV2OiBwbGF0Zm9ybSBkZXZpY2UKPiArICogQHN1c3BlbmRfc3RhdGU6 IGF0b21pYyBzdGF0ZSBmb3Igc3VzcGVuZCAvIHJlc3VtZQo+ICsgKi8KPiArc3RydWN0IHhsbnhf ZHJtIHsKPiArICAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkcm07Cj4gKyAgICAgICBzdHJ1Y3Qg eGxueF9jcnRjX2hlbHBlciAqY3J0YzsKPiArICAgICAgIHN0cnVjdCBkcm1fZmJfaGVscGVyICpm YjsKPiArICAgICAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Cj4gKyAgICAgICBzdHJ1 Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3VzcGVuZF9zdGF0ZTsKPiArfTsKPiArCj4gKy8qKgo+ICsg KiB4bG54X2dldF9jcnRjX2hlbHBlciAtIFJldHVybiB0aGUgY3J0YyBoZWxwZXIgaW5zdGFuY2UK PiArICogQGRybTogRFJNIGRldmljZQo+ICsgKgo+ICsgKiBSZXR1cm46IHRoZSBjcnRjIGhlbHBl ciBpbnN0YW5jZQo+ICsgKi8KPiArc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIgKnhsbnhfZ2V0X2Ny dGNfaGVscGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gK3sKPiArICAgICAgIHN0cnVjdCB4 bG54X2RybSAqeGxueF9kcm0gPSBkcm0tPmRldl9wcml2YXRlOwo+ICsKPiArICAgICAgIHJldHVy biB4bG54X2RybS0+Y3J0YzsKPiArfQo+ICsKPiArLyoqCj4gKyAqIHhsbnhfZ2V0X2FsaWduIC0g UmV0dXJuIHRoZSBhbGlnbiByZXF1aXJlbWVudCB0aHJvdWdoIENSVEMgaGVscGVyCj4gKyAqIEBk cm06IERSTSBkZXZpY2UKPiArICoKPiArICogUmV0dXJuOiB0aGUgYWxpZ25tZW50IHJlcXVpcmVt ZW50Cj4gKyAqLwo+ICt1bnNpZ25lZCBpbnQgeGxueF9nZXRfYWxpZ24oc3RydWN0IGRybV9kZXZp Y2UgKmRybSkKPiArewo+ICsgICAgICAgc3RydWN0IHhsbnhfZHJtICp4bG54X2RybSA9IGRybS0+ ZGV2X3ByaXZhdGU7Cj4gKwo+ICsgICAgICAgcmV0dXJuIHhsbnhfY3J0Y19oZWxwZXJfZ2V0X2Fs aWduKHhsbnhfZHJtLT5jcnRjKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIHhsbnhfZ2V0X2Zvcm1h dCAtIFJldHVybiB0aGUgY3VycmVudCBmb3JtYXQgb2YgQ1JUQwo+ICsgKiBAZHJtOiBEUk0gZGV2 aWNlCj4gKyAqCj4gKyAqIFJldHVybjogdGhlIGN1cnJlbnQgQ1JUQyBmb3JtYXQKPiArICovCj4g K3VpbnQzMl90IHhsbnhfZ2V0X2Zvcm1hdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ICt7Cj4g KyAgICAgICBzdHJ1Y3QgeGxueF9kcm0gKnhsbnhfZHJtID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiAr Cj4gKyAgICAgICByZXR1cm4geGxueF9jcnRjX2hlbHBlcl9nZXRfZm9ybWF0KHhsbnhfZHJtLT5j cnRjKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgeGxueF9vdXRwdXRfcG9sbF9jaGFuZ2VkKHN0 cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gK3sKPiArICAgICAgIHN0cnVjdCB4bG54X2RybSAqeGxu eF9kcm0gPSBkcm0tPmRldl9wcml2YXRlOwo+ICsKPiArICAgICAgIGlmICh4bG54X2RybS0+ZmIp Cj4gKyAgICAgICAgICAgICAgIGRybV9mYl9oZWxwZXJfaG90cGx1Z19ldmVudCh4bG54X2RybS0+ ZmIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9tb2RlX2NvbmZpZ19mdW5j cyB4bG54X21vZGVfY29uZmlnX2Z1bmNzID0gewo+ICsgICAgICAgLmZiX2NyZWF0ZSAgICAgICAg ICAgICAgPSB4bG54X2ZiX2NyZWF0ZSwKPiArICAgICAgIC5vdXRwdXRfcG9sbF9jaGFuZ2VkICAg ID0geGxueF9vdXRwdXRfcG9sbF9jaGFuZ2VkLAo+ICsgICAgICAgLmF0b21pY19jaGVjayAgICAg ICAgICAgPSBkcm1fYXRvbWljX2hlbHBlcl9jaGVjaywKPiArICAgICAgIC5hdG9taWNfY29tbWl0 ICAgICAgICAgID0gZHJtX2F0b21pY19oZWxwZXJfY29tbWl0LAo+ICt9Owo+ICsKPiArc3RhdGlj IGludCB4bG54X2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgdW5zaWduZWQg aW50IGNydGMpCj4gK3sKPiArICAgICAgIHN0cnVjdCB4bG54X2RybSAqeGxueF9kcm0gPSBkcm0t PmRldl9wcml2YXRlOwo+ICsKPiArICAgICAgIHJldHVybiB4bG54X2NydGNfaGVscGVyX2VuYWJs ZV92YmxhbmsoeGxueF9kcm0tPmNydGMsIGNydGMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB4 bG54X2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHVuc2lnbmVkIGludCBj cnRjKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgeGxueF9kcm0gKnhsbnhfZHJtID0gZHJtLT5kZXZf cHJpdmF0ZTsKPiArCj4gKyAgICAgICB4bG54X2NydGNfaGVscGVyX2Rpc2FibGVfdmJsYW5rKHhs bnhfZHJtLT5jcnRjLCBjcnRjKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgeGxueF9tb2RlX2Nv bmZpZ19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gK3sKPiArICAgICAgIHN0cnVjdCB4 bG54X2RybSAqeGxueF9kcm0gPSBkcm0tPmRldl9wcml2YXRlOwo+ICsgICAgICAgc3RydWN0IHhs bnhfY3J0Y19oZWxwZXIgKmNydGMgPSB4bG54X2RybS0+Y3J0YzsKPiArCj4gKyAgICAgICBkcm0t Pm1vZGVfY29uZmlnLm1pbl93aWR0aCA9IDA7Cj4gKyAgICAgICBkcm0tPm1vZGVfY29uZmlnLm1p bl9oZWlnaHQgPSAwOwo+ICsgICAgICAgZHJtLT5tb2RlX2NvbmZpZy5tYXhfd2lkdGggPSB4bG54 X2NydGNfaGVscGVyX2dldF9tYXhfd2lkdGgoY3J0Yyk7Cj4gKyAgICAgICBkcm0tPm1vZGVfY29u ZmlnLm1heF9oZWlnaHQgPSB4bG54X2NydGNfaGVscGVyX2dldF9tYXhfaGVpZ2h0KGNydGMpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB4bG54X2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAq ZHJtKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgeGxueF9kcm0gKnhsbnhfZHJtID0gZHJtLT5kZXZf cHJpdmF0ZTsKPiArCj4gKyAgICAgICBpZiAoeGxueF9kcm0tPmZiKQo+ICsgICAgICAgICAgICAg ICBkcm1fZmJfaGVscGVyX3Jlc3RvcmVfZmJkZXZfbW9kZV91bmxvY2tlZCh4bG54X2RybS0+ZmIp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB4bG54X2Zv cHMgPSB7Cj4gKyAgICAgICAub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKPiArICAgICAg IC5vcGVuICAgICAgICAgICA9IGRybV9vcGVuLAo+ICsgICAgICAgLnJlbGVhc2UgICAgICAgID0g ZHJtX3JlbGVhc2UsCj4gKyAgICAgICAudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCj4gKyAg ICAgICAubW1hcCAgICAgICAgICAgPSBkcm1fZ2VtX2NtYV9tbWFwLAo+ICsgICAgICAgLnBvbGwg ICAgICAgICAgID0gZHJtX3BvbGwsCj4gKyAgICAgICAucmVhZCAgICAgICAgICAgPSBkcm1fcmVh ZCwKPiArI2lmZGVmIENPTkZJR19DT01QQVQKPiArICAgICAgIC5jb21wYXRfaW9jdGwgICA9IGRy bV9jb21wYXRfaW9jdGwsCj4gKyNlbmRpZgo+ICsgICAgICAgLmxsc2VlayAgICAgICAgID0gbm9v cF9sbHNlZWssCj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgeGxueF9kcm1f ZHJpdmVyID0gewo+ICsgICAgICAgLmRyaXZlcl9mZWF0dXJlcyAgICAgICAgICAgICAgICA9IERS SVZFUl9NT0RFU0VUIHwgRFJJVkVSX0dFTSB8Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRFJJVkVSX0FUT01JQyB8IERSSVZFUl9QUklNRSwKPiArICAgICAgIC5s YXN0Y2xvc2UgICAgICAgICAgICAgICAgICAgICAgPSB4bG54X2xhc3RjbG9zZSwKPiArCj4gKyAg ICAgICAuZW5hYmxlX3ZibGFuayAgICAgICAgICAgICAgICAgID0geGxueF9lbmFibGVfdmJsYW5r LAo+ICsgICAgICAgLmRpc2FibGVfdmJsYW5rICAgICAgICAgICAgICAgICA9IHhsbnhfZGlzYWJs ZV92YmxhbmssCj4gKwo+ICsgICAgICAgLnByaW1lX2hhbmRsZV90b19mZCAgICAgICAgICAgICA9 IGRybV9nZW1fcHJpbWVfaGFuZGxlX3RvX2ZkLAo+ICsgICAgICAgLnByaW1lX2ZkX3RvX2hhbmRs ZSAgICAgICAgICAgICA9IGRybV9nZW1fcHJpbWVfZmRfdG9faGFuZGxlLAo+ICsgICAgICAgLmdl bV9wcmltZV9leHBvcnQgICAgICAgICAgICAgICA9IGRybV9nZW1fcHJpbWVfZXhwb3J0LAo+ICsg ICAgICAgLmdlbV9wcmltZV9pbXBvcnQgICAgICAgICAgICAgICA9IGRybV9nZW1fcHJpbWVfaW1w b3J0LAo+ICsgICAgICAgLmdlbV9wcmltZV9nZXRfc2dfdGFibGUgICAgICAgICA9IGRybV9nZW1f Y21hX3ByaW1lX2dldF9zZ190YWJsZSwKPiArICAgICAgIC5nZW1fcHJpbWVfaW1wb3J0X3NnX3Rh YmxlICAgICAgPSBkcm1fZ2VtX2NtYV9wcmltZV9pbXBvcnRfc2dfdGFibGUsCj4gKyAgICAgICAu Z2VtX3ByaW1lX3ZtYXAgICAgICAgICAgICAgICAgID0gZHJtX2dlbV9jbWFfcHJpbWVfdm1hcCwK PiArICAgICAgIC5nZW1fcHJpbWVfdnVubWFwICAgICAgICAgICAgICAgPSBkcm1fZ2VtX2NtYV9w cmltZV92dW5tYXAsCj4gKyAgICAgICAuZ2VtX3ByaW1lX21tYXAgICAgICAgICAgICAgICAgID0g ZHJtX2dlbV9jbWFfcHJpbWVfbW1hcCwKPiArICAgICAgIC5nZW1fZnJlZV9vYmplY3QgICAgICAg ICAgICAgICAgPSBkcm1fZ2VtX2NtYV9mcmVlX29iamVjdCwKPiArICAgICAgIC5nZW1fdm1fb3Bz ICAgICAgICAgICAgICAgICAgICAgPSAmZHJtX2dlbV9jbWFfdm1fb3BzLAo+ICsgICAgICAgLmR1 bWJfY3JlYXRlICAgICAgICAgICAgICAgICAgICA9IHhsbnhfZ2VtX2NtYV9kdW1iX2NyZWF0ZSwK PiArICAgICAgIC5kdW1iX2Rlc3Ryb3kgICAgICAgICAgICAgICAgICAgPSBkcm1fZ2VtX2R1bWJf ZGVzdHJveSwKPiArCj4gKyAgICAgICAuZm9wcyAgICAgICAgICAgICAgICAgICAgICAgICAgID0g JnhsbnhfZm9wcywKPiArCj4gKyAgICAgICAubmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAg ID0gRFJJVkVSX05BTUUsCj4gKyAgICAgICAuZGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAg ID0gRFJJVkVSX0RFU0MsCj4gKyAgICAgICAuZGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAg ID0gRFJJVkVSX0RBVEUsCj4gKyAgICAgICAubWFqb3IgICAgICAgICAgICAgICAgICAgICAgICAg ID0gRFJJVkVSX01BSk9SLAo+ICsgICAgICAgLm1pbm9yICAgICAgICAgICAgICAgICAgICAgICAg ICA9IERSSVZFUl9NSU5PUiwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgeGxueF9iaW5kKHN0cnVj dCBkZXZpY2UgKmRldikKPiArewo+ICsgICAgICAgc3RydWN0IHhsbnhfZHJtICp4bG54X2RybTsK PiArICAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkcm07Cj4gKyAgICAgICBjb25zdCBzdHJ1Y3Qg ZHJtX2Zvcm1hdF9pbmZvICppbmZvOwo+ICsgICAgICAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwo+ICsgICAgICAgaW50IHJldDsKPiArICAg ICAgIHUzMiBmb3JtYXQ7Cj4gKwo+ICsgICAgICAgZHJtID0gZHJtX2Rldl9hbGxvYygmeGxueF9k cm1fZHJpdmVyLCAmcGRldi0+ZGV2KTsKPiArICAgICAgIGlmIChJU19FUlIoZHJtKSkKPiArICAg ICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIoZHJtKTsKPiArCj4gKyAgICAgICB4bG54X2RybSA9 IGRldm1fa3phbGxvYyhkcm0tPmRldiwgc2l6ZW9mKCp4bG54X2RybSksIEdGUF9LRVJORUwpOwo+ ICsgICAgICAgaWYgKCF4bG54X2RybSkgewo+ICsgICAgICAgICAgICAgICByZXQgPSAtRU5PTUVN Owo+ICsgICAgICAgICAgICAgICBnb3RvIGVycl9kcm07Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAg ICAgZHJtX21vZGVfY29uZmlnX2luaXQoZHJtKTsKPiArICAgICAgIGRybS0+bW9kZV9jb25maWcu ZnVuY3MgPSAmeGxueF9tb2RlX2NvbmZpZ19mdW5jczsKPiArCj4gKyAgICAgICByZXQgPSBkcm1f dmJsYW5rX2luaXQoZHJtLCAxKTsKPiArICAgICAgIGlmIChyZXQpIHsKPiArICAgICAgICAgICAg ICAgZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgdmJsYW5rXG4iKTsK PiArICAgICAgICAgICAgICAgZ290byBlcnJfeGxueF9kcm07Cj4gKyAgICAgICB9Cj4gKwo+ICsg ICAgICAgZHJtLT5pcnFfZW5hYmxlZCA9IDE7Cj4gKyAgICAgICBkcm0tPmRldl9wcml2YXRlID0g eGxueF9kcm07Cj4gKyAgICAgICB4bG54X2RybS0+ZHJtID0gZHJtOwo+ICsgICAgICAgZHJtX2tt c19oZWxwZXJfcG9sbF9pbml0KGRybSk7Cj4gKyAgICAgICBwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShw ZGV2LCB4bG54X2RybSk7Cj4gKwo+ICsgICAgICAgeGxueF9kcm0tPmNydGMgPSB4bG54X2NydGNf aGVscGVyX2luaXQoZHJtKTsKPiArICAgICAgIGlmIChJU19FUlIoeGxueF9kcm0tPmNydGMpKSB7 Cj4gKyAgICAgICAgICAgICAgIHJldCA9IFBUUl9FUlIoeGxueF9kcm0tPmNydGMpOwo+ICsgICAg ICAgICAgICAgICBnb3RvIGVycl94bG54X2RybTsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICBy ZXQgPSBjb21wb25lbnRfYmluZF9hbGwoZHJtLT5kZXYsIGRybSk7Cj4gKyAgICAgICBpZiAocmV0 KQo+ICsgICAgICAgICAgICAgICBnb3RvIGVycl9jcnRjOwo+ICsKPiArICAgICAgIHhsbnhfbW9k ZV9jb25maWdfaW5pdChkcm0pOwo+ICsgICAgICAgZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRybSk7 Cj4gKyAgICAgICBkbWFfc2V0X21hc2soZHJtLT5kZXYsIHhsbnhfY3J0Y19oZWxwZXJfZ2V0X2Rt YV9tYXNrKHhsbnhfZHJtLT5jcnRjKSk7Cj4gKwo+ICsgICAgICAgZm9ybWF0ID0geGxueF9jcnRj X2hlbHBlcl9nZXRfZm9ybWF0KHhsbnhfZHJtLT5jcnRjKTsKPiArICAgICAgIGluZm8gPSBkcm1f Zm9ybWF0X2luZm8oZm9ybWF0KTsKPiArICAgICAgIGlmIChpbmZvICYmIGluZm8tPmRlcHRoICYm IGluZm8tPmNwcFswXSkgewo+ICsgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYWxpZ247Cj4g Kwo+ICsgICAgICAgICAgICAgICBhbGlnbiA9IHhsbnhfY3J0Y19oZWxwZXJfZ2V0X2FsaWduKHhs bnhfZHJtLT5jcnRjKTsKPiArICAgICAgICAgICAgICAgeGxueF9kcm0tPmZiID0geGxueF9mYl9p bml0KGRybSwgaW5mby0+Y3BwWzBdICogOCwgMSwgYWxpZ24sCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB4bG54X2ZiZGV2X3ZyZXMpOwo+ICsgICAgICAgICAg ICAgICBpZiAoSVNfRVJSKHhsbnhfZHJtLT5mYikpIHsKPiArICAgICAgICAgICAgICAgICAgICAg ICBkZXZfZXJyKCZwZGV2LT5kZXYsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi ZmFpbGVkIHRvIGluaXRpYWxpemUgZHJtIGZiXG4iKTsKPiArICAgICAgICAgICAgICAgICAgICAg ICB4bG54X2RybS0+ZmIgPSBOVUxMOwo+ICsgICAgICAgICAgICAgICB9Cj4gKyAgICAgICB9IGVs c2Ugewo+ICsgICAgICAgICAgICAgICAvKiBmYmRldiBlbXVsYXRpb24gaXMgb3B0aW9uYWwgKi8K PiArICAgICAgICAgICAgICAgZGV2X2luZm8oJnBkZXYtPmRldiwgImZiZGV2IGlzIG5vdCBpbml0 aWFsaXplZFxuIik7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgcmV0ID0gZHJtX2Rldl9yZWdp c3Rlcihkcm0sIDApOwo+ICsgICAgICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgICAgICAgIGdv dG8gZXJyX2ZiOwo+ICsKPiArICAgICAgIHJldHVybiAwOwo+ICsKPiArZXJyX2ZiOgo+ICsgICAg ICAgaWYgKHhsbnhfZHJtLT5mYikKPiArICAgICAgICAgICAgICAgeGxueF9mYl9maW5pKHhsbnhf ZHJtLT5mYik7Cj4gKyAgICAgICBjb21wb25lbnRfdW5iaW5kX2FsbChkcm0tPmRldiwgZHJtKTsK PiArZXJyX2NydGM6Cj4gKyAgICAgICB4bG54X2NydGNfaGVscGVyX2ZpbmkoZHJtLCB4bG54X2Ry bS0+Y3J0Yyk7Cj4gK2Vycl94bG54X2RybToKPiArICAgICAgIGRybV9tb2RlX2NvbmZpZ19jbGVh bnVwKGRybSk7Cj4gK2Vycl9kcm06Cj4gKyAgICAgICBkcm1fZGV2X3VucmVmKGRybSk7Cj4gKyAg ICAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB4bG54X3VuYmluZChzdHJ1 Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArICAgICAgIHN0cnVjdCB4bG54X2RybSAqeGxueF9kcm0g PSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArICAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkcm0g PSB4bG54X2RybS0+ZHJtOwo+ICsKPiArICAgICAgIGRybV9kZXZfdW5yZWdpc3Rlcihkcm0pOwo+ ICsgICAgICAgaWYgKHhsbnhfZHJtLT5mYikKPiArICAgICAgICAgICAgICAgeGxueF9mYl9maW5p KHhsbnhfZHJtLT5mYik7Cj4gKyAgICAgICBjb21wb25lbnRfdW5iaW5kX2FsbChkcm0tPmRldiwg ZHJtKTsKPiArICAgICAgIHhsbnhfY3J0Y19oZWxwZXJfZmluaShkcm0sIHhsbnhfZHJtLT5jcnRj KTsKPiArICAgICAgIGRybV9rbXNfaGVscGVyX3BvbGxfZmluaShkcm0pOwo+ICsgICAgICAgZHJt X21vZGVfY29uZmlnX2NsZWFudXAoZHJtKTsKPiArICAgICAgIGRybV9kZXZfdW5yZWYoZHJtKTsK PiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfbWFzdGVyX29wcyB4bG54 X21hc3Rlcl9vcHMgPSB7Cj4gKyAgICAgICAuYmluZCAgID0geGxueF9iaW5kLAo+ICsgICAgICAg LnVuYmluZCA9IHhsbnhfdW5iaW5kLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCB4bG54X29mX2Nv bXBvbmVudF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgKCpjb21wYXJlX29mKShzdHJ1Y3QgZGV2aWNlICosIHZvaWQgKiks Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgY29tcG9u ZW50X21hc3Rlcl9vcHMgKm1fb3BzKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUg KmVwLCAqcG9ydCwgKnJlbW90ZSwgKnBhcmVudDsKPiArICAgICAgIHN0cnVjdCBjb21wb25lbnRf bWF0Y2ggKm1hdGNoID0gTlVMTDsKPiArICAgICAgIGludCBpOwo+ICsKPiArICAgICAgIGlmICgh ZGV2LT5vZl9ub2RlKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiArCj4gKyAg ICAgICBmb3IgKGkgPSAwOyA7IGkrKykgewo+ICsgICAgICAgICAgICAgICBwb3J0ID0gb2ZfcGFy c2VfcGhhbmRsZShkZXYtPm9mX25vZGUsICJwb3J0cyIsIGkpOwo+ICsgICAgICAgICAgICAgICBp ZiAoIXBvcnQpCj4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKwo+ICsgICAgICAg ICAgICAgICBwYXJlbnQgPSBvZl9ncmFwaF9nZXRfcG9ydF9wYXJlbnQocG9ydCk7Cj4gKyAgICAg ICAgICAgICAgIGlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShwYXJlbnQpKSB7Cj4gKyAgICAg ICAgICAgICAgICAgICAgICAgb2Zfbm9kZV9wdXQocG9ydCk7Cj4gKyAgICAgICAgICAgICAgICAg ICAgICAgY29udGludWU7Cj4gKyAgICAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgICAg IGNvbXBvbmVudF9tYXRjaF9hZGQoZGV2LCAmbWF0Y2gsIGNvbXBhcmVfb2YsIHBhcmVudCk7Cj4g KyAgICAgICAgICAgICAgIG9mX25vZGVfcHV0KHBhcmVudCk7Cj4gKyAgICAgICAgICAgICAgIG9m X25vZGVfcHV0KHBvcnQpOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIGlmIChpID09IDApIHsK PiArICAgICAgICAgICAgICAgZGV2X2VycihkZXYsICJtaXNzaW5nICdwb3J0cycgcHJvcGVydHlc biIpOwo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKPiArICAgICAgIH0KPiArCj4g KyAgICAgICBpZiAoIW1hdGNoKSB7Cj4gKyAgICAgICAgICAgICAgIGRldl9lcnIoZGV2LCAibm8g YXZhaWxhYmxlIHBvcnRcbiIpOwo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKPiAr ICAgICAgIH0KPiArCj4gKyAgICAgICBmb3IgKGkgPSAwOyA7IGkrKykgewo+ICsgICAgICAgICAg ICAgICBwb3J0ID0gb2ZfcGFyc2VfcGhhbmRsZShkZXYtPm9mX25vZGUsICJwb3J0cyIsIGkpOwo+ ICsgICAgICAgICAgICAgICBpZiAoIXBvcnQpCj4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7Cj4gKwo+ICsgICAgICAgICAgICAgICBwYXJlbnQgPSBvZl9ncmFwaF9nZXRfcG9ydF9wYXJl bnQocG9ydCk7Cj4gKyAgICAgICAgICAgICAgIGlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShw YXJlbnQpKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgb2Zfbm9kZV9wdXQocG9ydCk7Cj4g KyAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4gKyAgICAgICAgICAgICAgIH0KPiAr Cj4gKyAgICAgICAgICAgICAgIGZvcl9lYWNoX2NoaWxkX29mX25vZGUocG9ydCwgZXApIHsKPiAr ICAgICAgICAgICAgICAgICAgICAgICByZW1vdGUgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRf cGFyZW50KGVwKTsKPiArICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlbW90ZSB8fCAhb2Zf ZGV2aWNlX2lzX2F2YWlsYWJsZShyZW1vdGUpKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBvZl9ub2RlX3B1dChyZW1vdGUpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29udGludWU7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghb2Zf ZGV2aWNlX2lzX2F2YWlsYWJsZShyZW1vdGUtPnBhcmVudCkpIHsKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRldl93YXJuKGRldiwgInBhcmVudCBkZXYgb2YgJXMgdW5hdmFpbGFi bGVcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGUt PmZ1bGxfbmFtZSk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZl9ub2RlX3B1 dChyZW1vdGUpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4g KyAgICAgICAgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbXBv bmVudF9tYXRjaF9hZGQoZGV2LCAmbWF0Y2gsIGNvbXBhcmVfb2YsIHJlbW90ZSk7Cj4gKyAgICAg ICAgICAgICAgICAgICAgICAgb2Zfbm9kZV9wdXQocmVtb3RlKTsKPiArICAgICAgICAgICAgICAg fQo+ICsgICAgICAgICAgICAgICBvZl9ub2RlX3B1dChwb3J0KTsKPiArICAgICAgIH0KPiArCj4g KyAgICAgICByZXR1cm4gY29tcG9uZW50X21hc3Rlcl9hZGRfd2l0aF9tYXRjaChkZXYsIG1fb3Bz LCBtYXRjaCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgeGxueF9jb21wYXJlX29mKHN0cnVjdCBk ZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKPiArewo+ICsgICAgICAgcmV0dXJuIGRldi0+b2Zfbm9k ZSA9PSBkYXRhOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHhsbnhfcGxhdGZvcm1fcHJvYmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsgICAgICAgcmV0dXJuIHhsbnhfb2Zf Y29tcG9uZW50X3Byb2JlKCZwZGV2LT5kZXYsIHhsbnhfY29tcGFyZV9vZiwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeGxueF9tYXN0ZXJfb3BzKTsKPiArfQo+ICsK PiArc3RhdGljIGludCB4bG54X3BsYXRmb3JtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQo+ICt7Cj4gKyAgICAgICBjb21wb25lbnRfbWFzdGVyX2RlbCgmcGRldi0+ZGV2LCAm eGxueF9tYXN0ZXJfb3BzKTsKPiArICAgICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCB4bG54X3BsYXRmb3JtX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp Cj4gK3sKPiArICAgICAgIHN0cnVjdCB4bG54X2RybSAqeGxueF9kcm0gPSBwbGF0Zm9ybV9nZXRf ZHJ2ZGF0YShwZGV2KTsKPiArCj4gKyAgICAgICBkcm1fcHV0X2Rldih4bG54X2RybS0+ZHJtKTsK PiArfQo+ICsKPiArc3RhdGljIGludCBfX21heWJlX3VudXNlZCB4bG54X3BtX3N1c3BlbmQoc3Ry dWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgeGxueF9kcm0gKnhsbnhfZHJt ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gKyAgICAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZHJt ID0geGxueF9kcm0tPmRybTsKPiArCj4gKyAgICAgICBkcm1fa21zX2hlbHBlcl9wb2xsX2Rpc2Fi bGUoZHJtKTsKPiArCj4gKyAgICAgICB4bG54X2RybS0+c3VzcGVuZF9zdGF0ZSA9IGRybV9hdG9t aWNfaGVscGVyX3N1c3BlbmQoZHJtKTsKPiArICAgICAgIGlmIChJU19FUlIoeGxueF9kcm0tPnN1 c3BlbmRfc3RhdGUpKSB7Cj4gKyAgICAgICAgICAgICAgIGRybV9rbXNfaGVscGVyX3BvbGxfZW5h YmxlKGRybSk7Cj4gKyAgICAgICAgICAgICAgIHJldHVybiBQVFJfRVJSKHhsbnhfZHJtLT5zdXNw ZW5kX3N0YXRlKTsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICByZXR1cm4gMDsKPiArfQo+ICsK PiArc3RhdGljIGludCBfX21heWJlX3VudXNlZCB4bG54X3BtX3Jlc3VtZShzdHJ1Y3QgZGV2aWNl ICpkZXYpCj4gK3sKPiArICAgICAgIHN0cnVjdCB4bG54X2RybSAqeGxueF9kcm0gPSBkZXZfZ2V0 X2RydmRhdGEoZGV2KTsKPiArICAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSB4bG54X2Ry bS0+ZHJtOwo+ICsKPiArICAgICAgIGRybV9hdG9taWNfaGVscGVyX3Jlc3VtZShkcm0sIHhsbnhf ZHJtLT5zdXNwZW5kX3N0YXRlKTsKPiArICAgICAgIGRybV9rbXNfaGVscGVyX3BvbGxfZW5hYmxl KGRybSk7Cj4gKwo+ICsgICAgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZGV2X3BtX29wcyB4bG54X3BtX29wcyA9IHsKPiArICAgICAgIFNFVF9TWVNURU1fU0xF RVBfUE1fT1BTKHhsbnhfcG1fc3VzcGVuZCwgeGxueF9wbV9yZXN1bWUpCj4gK307Cj4gKwo+ICtz dGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB4bG54X29mX21hdGNoW10gPSB7Cj4gKyAg ICAgICB7IC5jb21wYXRpYmxlID0gInhsbngsZGlzcGxheSIsIH0sCj4gKyAgICAgICB7IC8qIGVu ZCBvZiB0YWJsZSAqLyB9LAo+ICt9Owo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB4bG54X29m X21hdGNoKTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHhsbnhfZHJpdmVy ID0gewo+ICsgICAgICAgLnByb2JlICAgICAgICAgICAgICAgICAgPSB4bG54X3BsYXRmb3JtX3By b2JlLAo+ICsgICAgICAgLnJlbW92ZSAgICAgICAgICAgICAgICAgPSB4bG54X3BsYXRmb3JtX3Jl bW92ZSwKPiArICAgICAgIC5zaHV0ZG93biAgICAgICAgICAgICAgID0geGxueF9wbGF0Zm9ybV9z aHV0ZG93biwKPiArICAgICAgIC5kcml2ZXIgICAgICAgICAgICAgICAgID0gewo+ICsgICAgICAg ICAgICAgICAubmFtZSAgICAgICAgICAgPSAieGxueC1kcm0iLAo+ICsgICAgICAgICAgICAgICAu cG0gICAgICAgICAgICAgPSAmeGxueF9wbV9vcHMsCj4gKyAgICAgICAgICAgICAgIC5vZl9tYXRj aF90YWJsZSA9IHhsbnhfb2ZfbWF0Y2gsCj4gKyAgICAgICB9LAo+ICt9Owo+ICsKPiArbW9kdWxl X3BsYXRmb3JtX2RyaXZlcih4bG54X2RyaXZlcik7Cj4gKwo+ICtNT0RVTEVfQVVUSE9SKCJYaWxp bngsIEluYy4iKTsKPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJYaWxpbnggRFJNIEtNUyBEcml2ZXIi KTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0veGxueC94bG54X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9kcnYuaAo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uOGMzMjBmZAo+IC0tLSAvZGV2 L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2Rydi5oCj4gQEAgLTAsMCAr MSwzMCBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ICsvKgo+ICsg KiBYaWxpbnggRFJNIEtNUyBIZWFkZXIgZm9yIFhpbGlueAo+ICsgKgo+ICsgKiAgQ29weXJpZ2h0 IChDKSAyMDEzIC0gMjAxOCBYaWxpbngsIEluYy4KPiArICoKPiArICogIEF1dGhvcjogSHl1biBX b28gS3dvbiA8aHl1bmtAeGlsaW54LmNvbT4KPiArICoKPiArICogVGhpcyBzb2Z0d2FyZSBpcyBs aWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwo+ICsgKiBM aWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIGFuZAo+ICsgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVk IHVuZGVyIHRob3NlIHRlcm1zLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ ICsgKi8KPiArCj4gKyNpZm5kZWYgX1hMTlhfRFJWX0hfCj4gKyNkZWZpbmUgX1hMTlhfRFJWX0hf Cj4gKwo+ICtzdHJ1Y3QgZHJtX2RldmljZTsKPiArc3RydWN0IHhsbnhfY3J0Y19oZWxwZXI7Cj4g Kwo+ICt1aW50MzJfdCB4bG54X2dldF9mb3JtYXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSk7Cj4g K3Vuc2lnbmVkIGludCB4bG54X2dldF9hbGlnbihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKTsKPiAr c3RydWN0IHhsbnhfY3J0Y19oZWxwZXIgKnhsbnhfZ2V0X2NydGNfaGVscGVyKHN0cnVjdCBkcm1f ZGV2aWNlICpkcm0pOwo+ICtzdHJ1Y3QgeGxueF9icmlkZ2VfaGVscGVyICp4bG54X2dldF9icmlk Z2VfaGVscGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pOwo+ICsKPiArI2VuZGlmIC8qIF9YTE5Y X0RSVl9IXyAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2ZiLmMg Yi9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2ZiLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ IGluZGV4IDAwMDAwMDAuLmU3MjA4N2QKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL3hsbngveGxueF9mYi5jCj4gQEAgLTAsMCArMSwyOTggQEAKPiArLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiArLyoKPiArICogWGlsaW54IERSTSBLTVMgRnJhbWVi dWZmZXIgaGVscGVyCj4gKyAqCj4gKyAqICBDb3B5cmlnaHQgKEMpIDIwMTUgLSAyMDE4IFhpbGlu eCwgSW5jLgo+ICsgKgo+ICsgKiAgQXV0aG9yOiBIeXVuIFdvbyBLd29uIDxoeXVuLmt3b25AeGls aW54LmNvbT4KPiArICoKPiArICogQmFzZWQgb24gZHJtX2ZiX2NtYV9oZWxwZXIuYwo+ICsgKgo+ ICsgKiAgQ29weXJpZ2h0IChDKSAyMDEyIEFuYWxvZyBEZXZpY2UgSW5jLgo+ICsgKgo+ICsgKiBU aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljCj4gKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCj4gKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1 dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCj4gKyAqCj4gKyAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNp bmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIu aD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJt X2dlbV9jbWFfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9mcmFtZWJ1ZmZlcl9o ZWxwZXIuaD4KPiArCj4gKyNpbmNsdWRlICJ4bG54X2Rydi5oIgo+ICsjaW5jbHVkZSAieGxueF9m Yi5oIgo+ICsKPiArI2RlZmluZSBYTE5YX01BWF9QTEFORVMgICAgICAgIDQKPiArCj4gK3N0cnVj dCB4bG54X2ZiZGV2IHsKPiArICAgICAgIHN0cnVjdCBkcm1fZmJfaGVscGVyIGZiX2hlbHBlcjsK PiArICAgICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOwo+ICsgICAgICAgdW5zaWduZWQg aW50IGFsaWduOwo+ICsgICAgICAgdW5zaWduZWQgaW50IHZyZXNfbXVsdDsKPiArfTsKPiArCj4g K3N0YXRpYyBpbmxpbmUgc3RydWN0IHhsbnhfZmJkZXYgKnRvX2ZiZGV2KHN0cnVjdCBkcm1fZmJf aGVscGVyICpmYl9oZWxwZXIpCj4gK3sKPiArICAgICAgIHJldHVybiBjb250YWluZXJfb2YoZmJf aGVscGVyLCBzdHJ1Y3QgeGxueF9mYmRldiwgZmJfaGVscGVyKTsKPiArfQo+ICsKPiArc3RhdGlj IHN0cnVjdCBkcm1fZnJhbWVidWZmZXJfZnVuY3MgeGxueF9mYl9mdW5jcyA9IHsKPiArICAgICAg IC5kZXN0cm95ICAgICAgICA9IGRybV9nZW1fZmJfZGVzdHJveSwKPiArICAgICAgIC5jcmVhdGVf aGFuZGxlICA9IGRybV9nZW1fZmJfY3JlYXRlX2hhbmRsZSwKPiArfTsKPiArCj4gK3N0YXRpYyBp bnQKPiAreGxueF9mYl9pb2N0bChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdW5zaWduZWQgaW50IGNt ZCwgdW5zaWduZWQgbG9uZyBhcmcpCj4gK3sKPiArICAgICAgIHN0cnVjdCBkcm1fZmJfaGVscGVy ICpmYl9oZWxwZXIgPSBpbmZvLT5wYXI7Cj4gKyAgICAgICB1bnNpZ25lZCBpbnQgaTsKPiArICAg ICAgIGludCByZXQgPSAwOwo+ICsKPiArICAgICAgIHN3aXRjaCAoY21kKSB7Cj4gKyAgICAgICBj YXNlIEZCSU9fV0FJVEZPUlZTWU5DOgo+ICsgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwg ZmJfaGVscGVyLT5jcnRjX2NvdW50OyBpKyspIHsKPiArICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgZHJtX21vZGVfc2V0ICptb2RlX3NldDsKPiArICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4gKwo+ICsgICAgICAgICAgICAgICAgICAgICAgIG1vZGVf c2V0ID0gJmZiX2hlbHBlci0+Y3J0Y19pbmZvW2ldLm1vZGVfc2V0Owo+ICsgICAgICAgICAgICAg ICAgICAgICAgIGNydGMgPSBtb2RlX3NldC0+Y3J0YzsKPiArICAgICAgICAgICAgICAgICAgICAg ICByZXQgPSBkcm1fY3J0Y192YmxhbmtfZ2V0KGNydGMpOwo+ICsgICAgICAgICAgICAgICAgICAg ICAgIGlmICghcmV0KSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcm1fY3J0 Y193YWl0X29uZV92YmxhbmsoY3J0Yyk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkcm1fY3J0Y192YmxhbmtfcHV0KGNydGMpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIH0K PiArICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ICsgICAg ICAgZGVmYXVsdDoKPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9UVFk7Cj4gKyAgICAgICB9 Cj4gKwo+ICsgICAgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZmJfb3Bz IHhsbnhfZmJkZXZfb3BzID0gewo+ICsgICAgICAgLm93bmVyICAgICAgICAgID0gVEhJU19NT0RV TEUsCj4gKyAgICAgICAuZmJfZmlsbHJlY3QgICAgPSBzeXNfZmlsbHJlY3QsCj4gKyAgICAgICAu ZmJfY29weWFyZWEgICAgPSBzeXNfY29weWFyZWEsCj4gKyAgICAgICAuZmJfaW1hZ2VibGl0ICAg PSBzeXNfaW1hZ2VibGl0LAo+ICsgICAgICAgLmZiX2NoZWNrX3ZhciAgID0gZHJtX2ZiX2hlbHBl cl9jaGVja192YXIsCj4gKyAgICAgICAuZmJfc2V0X3BhciAgICAgPSBkcm1fZmJfaGVscGVyX3Nl dF9wYXIsCj4gKyAgICAgICAuZmJfYmxhbmsgICAgICAgPSBkcm1fZmJfaGVscGVyX2JsYW5rLAo+ ICsgICAgICAgLmZiX3Bhbl9kaXNwbGF5ID0gZHJtX2ZiX2hlbHBlcl9wYW5fZGlzcGxheSwKPiAr ICAgICAgIC5mYl9zZXRjbWFwICAgICA9IGRybV9mYl9oZWxwZXJfc2V0Y21hcCwKPiArICAgICAg IC5mYl9pb2N0bCAgICAgICA9IHhsbnhfZmJfaW9jdGwsCj4gK307Cj4gKwo+ICsvKioKPiArICog eGxueF9mYmRldl9jcmVhdGUgLSBDcmVhdGUgdGhlIGZiZGV2IHdpdGggYSBmcmFtZWJ1ZmZlcgo+ ICsgKiBAZmJfaGVscGVyOiBmYiBoZWxwZXIgc3RydWN0dXJlCj4gKyAqIEBzaXplOiBmcmFtZWJ1 ZmZlciBzaXplIGluZm8KPiArICoKPiArICogVGhpcyBmdW5jdGlvbiBpcyBiYXNlZCBvbiBkcm1f ZmJkZXZfY21hX2NyZWF0ZSgpLgo+ICsgKgo+ICsgKiBSZXR1cm46IDAgaWYgc3VjY2Vzc2Z1bCwg b3IgdGhlIGVycm9yIGNvZGUuCj4gKyAqLwo+ICtzdGF0aWMgaW50IHhsbnhfZmJkZXZfY3JlYXRl KHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9zdXJmYWNlX3NpemUgKnNpemUpCj4gK3sKPiAr ICAgICAgIHN0cnVjdCB4bG54X2ZiZGV2ICpmYmRldiA9IHRvX2ZiZGV2KGZiX2hlbHBlcik7Cj4g KyAgICAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZmJfaGVscGVyLT5kZXY7Cj4gKyAgICAg ICBzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpvYmo7Cj4gKyAgICAgICBzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYjsKPiArICAgICAgIHVuc2lnbmVkIGludCBieXRlc19wZXJfcGl4ZWw7Cj4g KyAgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldDsKPiArICAgICAgIHN0cnVjdCBmYl9pbmZvICpm Ymk7Cj4gKyAgICAgICBzaXplX3QgYnl0ZXM7Cj4gKyAgICAgICBpbnQgcmV0Owo+ICsKPiArICAg ICAgIGRldl9kYmcoZHJtLT5kZXYsICJzdXJmYWNlIHdpZHRoKCVkKSwgaGVpZ2h0KCVkKSBhbmQg YnBwKCVkKVxuIiwKPiArICAgICAgICAgICAgICAgc2l6ZS0+c3VyZmFjZV93aWR0aCwgc2l6ZS0+ c3VyZmFjZV9oZWlnaHQsIHNpemUtPnN1cmZhY2VfYnBwKTsKPiArCj4gKyAgICAgICBzaXplLT5z dXJmYWNlX2hlaWdodCAqPSBmYmRldi0+dnJlc19tdWx0Owo+ICsgICAgICAgYnl0ZXNfcGVyX3Bp eGVsID0gRElWX1JPVU5EX1VQKHNpemUtPnN1cmZhY2VfYnBwLCA4KTsKPiArICAgICAgIGJ5dGVz ID0gQUxJR04oc2l6ZS0+c3VyZmFjZV93aWR0aCAqIGJ5dGVzX3Blcl9waXhlbCwgZmJkZXYtPmFs aWduKTsKPiArICAgICAgIGJ5dGVzICo9IHNpemUtPnN1cmZhY2VfaGVpZ2h0Owo+ICsKPiArICAg ICAgIG9iaiA9IGRybV9nZW1fY21hX2NyZWF0ZShkcm0sIGJ5dGVzKTsKPiArICAgICAgIGlmIChJ U19FUlIob2JqKSkKPiArICAgICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIob2JqKTsKPiArCj4g KyAgICAgICBmYmkgPSBmcmFtZWJ1ZmZlcl9hbGxvYygwLCBkcm0tPmRldik7Cj4gKyAgICAgICBp ZiAoIWZiaSkgewo+ICsgICAgICAgICAgICAgICBkZXZfZXJyKGRybS0+ZGV2LCAiRmFpbGVkIHRv IGFsbG9jYXRlIGZyYW1lYnVmZmVyIGluZm8uXG4iKTsKPiArICAgICAgICAgICAgICAgcmV0ID0g LUVOT01FTTsKPiArICAgICAgICAgICAgICAgZ290byBlcnJfZHJtX2dlbV9jbWFfZnJlZV9vYmpl Y3Q7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgZmJkZXYtPmZiID0gZHJtX2dlbV9mYmRldl9m Yl9jcmVhdGUoZHJtLCBzaXplLCBmYmRldi0+YWxpZ24sICZvYmotPmJhc2UsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeGxueF9mYl9mdW5jcyk7Cj4gKyAg ICAgICBpZiAoSVNfRVJSKGZiZGV2LT5mYikpIHsKPiArICAgICAgICAgICAgICAgZGV2X2Vycihk cm0tPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBEUk0gZnJhbWVidWZmZXIuXG4iKTsKPiArICAg ICAgICAgICAgICAgcmV0ID0gUFRSX0VSUihmYmRldi0+ZmIpOwo+ICsgICAgICAgICAgICAgICBn b3RvIGVycl9mcmFtZWJ1ZmZlcl9yZWxlYXNlOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIGZi ID0gZmJkZXYtPmZiOwo+ICsgICAgICAgZmJfaGVscGVyLT5mYiA9IGZiOwo+ICsgICAgICAgZmJf aGVscGVyLT5mYmRldiA9IGZiaTsKPiArICAgICAgIGZiaS0+cGFyID0gZmJfaGVscGVyOwo+ICsg ICAgICAgZmJpLT5mbGFncyA9IEZCSU5GT19GTEFHX0RFRkFVTFQ7Cj4gKyAgICAgICBmYmktPmZi b3BzID0gJnhsbnhfZmJkZXZfb3BzOwo+ICsKPiArICAgICAgIHJldCA9IGZiX2FsbG9jX2NtYXAo JmZiaS0+Y21hcCwgMjU2LCAwKTsKPiArICAgICAgIGlmIChyZXQpIHsKPiArICAgICAgICAgICAg ICAgZGV2X2Vycihkcm0tPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBjb2xvciBtYXAuXG4iKTsK PiArICAgICAgICAgICAgICAgZ290byBlcnJfZmJfZGVzdHJveTsKPiArICAgICAgIH0KPiArCj4g KyAgICAgICBkcm1fZmJfaGVscGVyX2ZpbGxfZml4KGZiaSwgZmItPnBpdGNoZXNbMF0sIGZiLT5m b3JtYXQtPmRlcHRoKTsKPiArICAgICAgIGRybV9mYl9oZWxwZXJfZmlsbF92YXIoZmJpLCBmYl9o ZWxwZXIsIGZiLT53aWR0aCwgZmItPmhlaWdodCk7Cj4gKyAgICAgICBmYmktPnZhci55cmVzID0g ZmItPmhlaWdodCAvIGZiZGV2LT52cmVzX211bHQ7Cj4gKwo+ICsgICAgICAgb2Zmc2V0ID0gZmJp LT52YXIueG9mZnNldCAqIGJ5dGVzX3Blcl9waXhlbDsKPiArICAgICAgIG9mZnNldCArPSBmYmkt PnZhci55b2Zmc2V0ICogZmItPnBpdGNoZXNbMF07Cj4gKwo+ICsgICAgICAgZHJtLT5tb2RlX2Nv bmZpZy5mYl9iYXNlID0gKHJlc291cmNlX3NpemVfdClvYmotPnBhZGRyOwo+ICsgICAgICAgZmJp LT5zY3JlZW5fYmFzZSA9IChjaGFyIF9faW9tZW0gKikob2JqLT52YWRkciArIG9mZnNldCk7Cj4g KyAgICAgICBmYmktPmZpeC5zbWVtX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpKG9iai0+cGFkZHIg KyBvZmZzZXQpOwo+ICsgICAgICAgZmJpLT5zY3JlZW5fc2l6ZSA9IGJ5dGVzOwo+ICsgICAgICAg ZmJpLT5maXguc21lbV9sZW4gPSBieXRlczsKPiArCj4gKyAgICAgICByZXR1cm4gMDsKPiArCj4g K2Vycl9mYl9kZXN0cm95Ogo+ICsgICAgICAgZHJtX2ZyYW1lYnVmZmVyX3VucmVnaXN0ZXJfcHJp dmF0ZShmYik7Cj4gKyAgICAgICBkcm1fZ2VtX2ZiX2Rlc3Ryb3koZmIpOwo+ICtlcnJfZnJhbWVi dWZmZXJfcmVsZWFzZToKPiArICAgICAgIGZyYW1lYnVmZmVyX3JlbGVhc2UoZmJpKTsKPiArZXJy X2RybV9nZW1fY21hX2ZyZWVfb2JqZWN0Ogo+ICsgICAgICAgZHJtX2dlbV9jbWFfZnJlZV9vYmpl Y3QoJm9iai0+YmFzZSk7Cj4gKyAgICAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMg c3RydWN0IGRybV9mYl9oZWxwZXJfZnVuY3MgeGxueF9mYl9oZWxwZXJfZnVuY3MgPSB7Cj4gKyAg ICAgICAuZmJfcHJvYmUgPSB4bG54X2ZiZGV2X2NyZWF0ZSwKPiArfTsKPiArCj4gKy8qKgo+ICsg KiB4bG54X2ZiX2luaXQgLSBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZXMgdGhlIFhpbGlueCBmcmFt ZWJ1ZmZlcgo+ICsgKiBAZHJtOiBEUk0gZGV2aWNlCj4gKyAqIEBwcmVmZXJyZWRfYnBwOiBwcmVm ZXJyZWQgYml0cyBwZXIgcGl4ZWwgZm9yIHRoZSBkZXZpY2UKPiArICogQG1heF9jb25uX2NvdW50 OiBtYXhpbXVtIG51bWJlciBvZiBjb25uZWN0b3JzCj4gKyAqIEBhbGlnbjogYWxpZ25tZW50IHZh bHVlIGZvciBwaXRjaAo+ICsgKiBAdnJlc19tdWx0OiBtdWx0aXBsaWVyIGZvciB2aXJ0dWFsIHJl c29sdXRpb24KPiArICoKPiArICogVGhpcyBmdW5jdGlvbiBpcyBiYXNlZCBvbiBkcm1fZmJkZXZf Y21hX2luaXQoKS4KPiArICoKPiArICogUmV0dXJuOiBhIG5ld2x5IGFsbG9jYXRlZCBkcm1fZmJf aGVscGVyIHN0cnVjdCBvciBhIEVSUl9QVFIuCj4gKyAqLwo+ICtzdHJ1Y3QgZHJtX2ZiX2hlbHBl ciAqCj4gK3hsbnhfZmJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBpbnQgcHJlZmVycmVk X2JwcCwKPiArICAgICAgICAgICAgdW5zaWduZWQgaW50IG1heF9jb25uX2NvdW50LCB1bnNpZ25l ZCBpbnQgYWxpZ24sCj4gKyAgICAgICAgICAgIHVuc2lnbmVkIGludCB2cmVzX211bHQpCj4gK3sK PiArICAgICAgIHN0cnVjdCB4bG54X2ZiZGV2ICpmYmRldjsKPiArICAgICAgIHN0cnVjdCBkcm1f ZmJfaGVscGVyICpmYl9oZWxwZXI7Cj4gKyAgICAgICBpbnQgcmV0Owo+ICsKPiArICAgICAgIGZi ZGV2ID0ga3phbGxvYyhzaXplb2YoKmZiZGV2KSwgR0ZQX0tFUk5FTCk7Cj4gKyAgICAgICBpZiAo IWZiZGV2KQo+ICsgICAgICAgICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCj4g KyAgICAgICBmYmRldi0+dnJlc19tdWx0ID0gdnJlc19tdWx0Owo+ICsgICAgICAgZmJkZXYtPmFs aWduID0gYWxpZ247Cj4gKyAgICAgICBmYl9oZWxwZXIgPSAmZmJkZXYtPmZiX2hlbHBlcjsKPiAr ICAgICAgIGRybV9mYl9oZWxwZXJfcHJlcGFyZShkcm0sIGZiX2hlbHBlciwgJnhsbnhfZmJfaGVs cGVyX2Z1bmNzKTsKPiArCj4gKyAgICAgICByZXQgPSBkcm1fZmJfaGVscGVyX2luaXQoZHJtLCBm Yl9oZWxwZXIsIG1heF9jb25uX2NvdW50KTsKPiArICAgICAgIGlmIChyZXQgPCAwKSB7Cj4gKyAg ICAgICAgICAgICAgIGRldl9lcnIoZHJtLT5kZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBkcm0g ZmIgaGVscGVyLlxuIik7Cj4gKyAgICAgICAgICAgICAgIGdvdG8gZXJyX2ZyZWU7Cj4gKyAgICAg ICB9Cj4gKwo+ICsgICAgICAgcmV0ID0gZHJtX2ZiX2hlbHBlcl9zaW5nbGVfYWRkX2FsbF9jb25u ZWN0b3JzKGZiX2hlbHBlcik7Cj4gKyAgICAgICBpZiAocmV0IDwgMCkgewo+ICsgICAgICAgICAg ICAgICBkZXZfZXJyKGRybS0+ZGV2LCAiRmFpbGVkIHRvIGFkZCBjb25uZWN0b3JzLlxuIik7Cj4g KyAgICAgICAgICAgICAgIGdvdG8gZXJyX2RybV9mYl9oZWxwZXJfZmluaTsKPiArICAgICAgIH0K PiArCj4gKyAgICAgICByZXQgPSBkcm1fZmJfaGVscGVyX2luaXRpYWxfY29uZmlnKGZiX2hlbHBl ciwgcHJlZmVycmVkX2JwcCk7Cj4gKyAgICAgICBpZiAocmV0IDwgMCkgewo+ICsgICAgICAgICAg ICAgICBkZXZfZXJyKGRybS0+ZGV2LCAiRmFpbGVkIHRvIHNldCBpbml0aWFsIGh3IGNvbmZpZ3Vy YXRpb24uXG4iKTsKPiArICAgICAgICAgICAgICAgZ290byBlcnJfZHJtX2ZiX2hlbHBlcl9maW5p Owo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIHJldHVybiBmYl9oZWxwZXI7Cj4gKwo+ICtlcnJf ZHJtX2ZiX2hlbHBlcl9maW5pOgo+ICsgICAgICAgZHJtX2ZiX2hlbHBlcl9maW5pKGZiX2hlbHBl cik7Cj4gK2Vycl9mcmVlOgo+ICsgICAgICAga2ZyZWUoZmJkZXYpOwo+ICsgICAgICAgcmV0dXJu IEVSUl9QVFIocmV0KTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIHhsbnhfZmJkZXZfZGVmaW9fZmlu aSAtIEZyZWUgdGhlIGRlZmlvIGZiCj4gKyAqIEBmYmk6IGZiX2luZm8gc3RydWN0Cj4gKyAqCj4g KyAqIFRoaXMgZnVuY3Rpb24gaXMgYmFzZWQgb24gZHJtX2ZiZGV2X2NtYV9kZWZpb19maW5pKCku Cj4gKyAqLwo+ICtzdGF0aWMgdm9pZCB4bG54X2ZiZGV2X2RlZmlvX2Zpbmkoc3RydWN0IGZiX2lu Zm8gKmZiaSkKPiArewo+ICsgICAgICAgaWYgKCFmYmktPmZiZGVmaW8pCj4gKyAgICAgICAgICAg ICAgIHJldHVybjsKPiArCj4gKyAgICAgICBmYl9kZWZlcnJlZF9pb19jbGVhbnVwKGZiaSk7Cj4g KyAgICAgICBrZnJlZShmYmktPmZiZGVmaW8pOwo+ICsgICAgICAga2ZyZWUoZmJpLT5mYm9wcyk7 Cj4gK30KPiArCj4gKy8qKgo+ICsgKiB4bG54X2ZiZGV2X2ZpbmkgLSBGcmVlIHRoZSBYaWxpbngg ZnJhbWVidWZmZXIKPiArICogQGZiX2hlbHBlcjogZHJtX2ZiX2hlbHBlciBzdHJ1Y3QKPiArICoK PiArICogVGhpcyBmdW5jdGlvbiBpcyBiYXNlZCBvbiBkcm1fZmJkZXZfY21hX2ZpbmkoKS4KPiAr ICovCj4gK3ZvaWQgeGxueF9mYl9maW5pKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIp Cj4gK3sKPiArICAgICAgIHN0cnVjdCB4bG54X2ZiZGV2ICpmYmRldiA9IHRvX2ZiZGV2KGZiX2hl bHBlcik7Cj4gKwo+ICsgICAgICAgZHJtX2ZiX2hlbHBlcl91bnJlZ2lzdGVyX2ZiaSgmZmJkZXYt PmZiX2hlbHBlcik7Cj4gKyAgICAgICBpZiAoZmJkZXYtPmZiX2hlbHBlci5mYmRldikKPiArICAg ICAgICAgICAgICAgeGxueF9mYmRldl9kZWZpb19maW5pKGZiZGV2LT5mYl9oZWxwZXIuZmJkZXYp Owo+ICsKPiArICAgICAgIGlmIChmYmRldi0+ZmJfaGVscGVyLmZiKQo+ICsgICAgICAgICAgICAg ICBkcm1fZnJhbWVidWZmZXJfcmVtb3ZlKGZiZGV2LT5mYl9oZWxwZXIuZmIpOwo+ICsKPiArICAg ICAgIGRybV9mYl9oZWxwZXJfZmluaSgmZmJkZXYtPmZiX2hlbHBlcik7Cj4gKyAgICAgICBrZnJl ZShmYmRldik7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiB4bG54X2ZiX2NyZWF0ZSAtIChzdHJ1Y3Qg ZHJtX21vZGVfY29uZmlnX2Z1bmNzICopLT5mYl9jcmVhdGUgY2FsbGJhY2sKPiArICogQGRybTog RFJNIGRldmljZQo+ICsgKiBAZmlsZV9wcml2OiBkcm0gZmlsZSBwcml2YXRlIGRhdGEKPiArICog QG1vZGVfY21kOiBtb2RlIGNvbW1hbmQgZm9yIGZiIGNyZWF0aW9uCj4gKyAqCj4gKyAqIFRoaXMg ZnVuY3Rpb25zIGNyZWF0ZXMgYSBkcm1fZnJhbWVidWZmZXIgd2l0aCB4bG54X2ZiX2Z1bmNzIGZv ciBnaXZlbiBtb2RlCj4gKyAqIEBtb2RlX2NtZC4gVGhpcyBmdW5jdGlvbnMgaXMgaW50ZW5kZWQg dG8gYmUgdXNlZCBmb3IgdGhlIGZiX2NyZWF0ZSBjYWxsYmFjawo+ICsgKiBmdW5jdGlvbiBvZiBk cm1fbW9kZV9jb25maWdfZnVuY3MuCj4gKyAqCj4gKyAqIFJldHVybjogYSBkcm1fZnJhbWVidWZm ZXIgb2JqZWN0IGlmIHN1Y2Nlc3NmdWwsIG9yCj4gKyAqIEVSUl9QVFIgZnJvbSBkcm1fZ2VtX2Zi X2NyZWF0ZV93aXRoX2Z1bmNzKCkuCj4gKyAqLwo+ICtzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICoK PiAreGxueF9mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYsCj4gKyAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGRybV9tb2RlX2ZiX2Nt ZDIgKm1vZGVfY21kKQo+ICt7Cj4gKyAgICAgICByZXR1cm4gZHJtX2dlbV9mYl9jcmVhdGVfd2l0 aF9mdW5jcyhkcm0sIGZpbGVfcHJpdiwgbW9kZV9jbWQsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmeGxueF9mYl9mdW5jcyk7Cj4gK30KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9mYi5oIGIvZHJpdmVycy9ncHUvZHJtL3hsbngv eGxueF9mYi5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi42ZWZjOTg1 Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZmIuaAo+ IEBAIC0wLDAgKzEsMzMgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAK PiArLyoKPiArICogWGlsaW54IERSTSBLTVMgRnJhbWVidWZmZXIgaGVscGVyIGhlYWRlcgo+ICsg Kgo+ICsgKiAgQ29weXJpZ2h0IChDKSAyMDE1IC0gMjAxOCBYaWxpbngsIEluYy4KPiArICoKPiAr ICogIEF1dGhvcjogSHl1biBXb28gS3dvbiA8aHl1bi5rd29uQHhpbGlueC5jb20+Cj4gKyAqCj4g KyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKPiArICogbWF5IGJlIGNvcGllZCwgZGlz dHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KPiArICoKPiArICogVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICovCj4gKwo+ICsjaWZuZGVmIF9YTE5YX0ZCX0hfCj4g KyNkZWZpbmUgX1hMTlhfRkJfSF8KPiArCj4gK3N0cnVjdCBkcm1fZmJfaGVscGVyOwo+ICsKPiAr c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqCj4gK3hsbnhfZmJfY3JlYXRlKHN0cnVjdCBkcm1fZGV2 aWNlICpkcm0sIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAo+ICsgICAgICAgICAgICAgIGNv bnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICptb2RlX2NtZCk7Cj4gK3N0cnVjdCBkcm1fZmJf aGVscGVyICoKPiAreGxueF9mYl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIGludCBwcmVm ZXJyZWRfYnBwLAo+ICsgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWF4X2Nvbm5fY291bnQsIHVu c2lnbmVkIGludCBhbGlnbiwKPiArICAgICAgICAgICAgdW5zaWduZWQgaW50IHZyZXNfbXVsdCk7 Cj4gK3ZvaWQgeGxueF9mYl9maW5pKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIpOwo+ ICsKPiArI2VuZGlmIC8qIF9YTE5YX0ZCX0hfICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS94bG54L3hsbnhfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2dlbS5jCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi40YTVkNTMzCj4gLS0tIC9kZXYv bnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZ2VtLmMKPiBAQCAtMCwwICsx LDQ3IEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8qCj4gKyAq IFhpbGlueCBEUk0gS01TIEdFTSBoZWxwZXIKPiArICoKPiArICogIENvcHlyaWdodCAoQykgMjAx NSAtIDIwMTggWGlsaW54LCBJbmMuCj4gKyAqCj4gKyAqICBBdXRob3I6IEh5dW4gV29vIEt3b24g PGh5dW4ua3dvbkB4aWxpbnguY29tPgo+ICsgKgo+ICsgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vu c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vu c2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgYW5kCj4gKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5k ZXIgdGhvc2UgdGVybXMuCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl Cj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAq Lwo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9j bWFfaGVscGVyLmg+Cj4gKwo+ICsjaW5jbHVkZSAieGxueF9kcnYuaCIKPiArI2luY2x1ZGUgInhs bnhfZ2VtLmgiCj4gKwo+ICsvKgo+ICsgKiB4bG54X2dlbV9jbWFfZHVtYl9jcmVhdGUgLSAoc3Ry dWN0IGRybV9kcml2ZXIpLT5kdW1iX2NyZWF0ZSBjYWxsYmFjawo+ICsgKiBAZmlsZV9wcml2OiBk cm1fZmlsZSBvYmplY3QKPiArICogQGRybTogRFJNIG9iamVjdAo+ICsgKiBAYXJnczogaW5mbyBm b3IgZHVtYiBzY2Fub3V0IGJ1ZmZlciBjcmVhdGlvbgo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9u IGlzIGZvciBkdW1iX2NyZWF0ZSBjYWxsYmFjayBvZiBkcm1fZHJpdmVyIHN0cnVjdC4gU2ltcGx5 Cj4gKyAqIGl0IHdyYXBzIGFyb3VuZCBkcm1fZ2VtX2NtYV9kdW1iX2NyZWF0ZSgpIGFuZCBzZXRz IHRoZSBwaXRjaCB2YWx1ZQo+ICsgKiBieSByZXRyaWV2aW5nIHRoZSB2YWx1ZSBmcm9tIHRoZSBk ZXZpY2UuCj4gKyAqCj4gKyAqIFJldHVybjogVGhlIHJldHVybiB2YWx1ZSBmcm9tIGRybV9nZW1f Y21hX2R1bWJfY3JlYXRlKCkKPiArICovCj4gK2ludCB4bG54X2dlbV9jbWFfZHVtYl9jcmVhdGUo c3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsIHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFy Z3MpCj4gK3sKPiArICAgICAgIGludCBwaXRjaCA9IERJVl9ST1VORF9VUChhcmdzLT53aWR0aCAq IGFyZ3MtPmJwcCwgOCk7Cj4gKyAgICAgICB1bnNpZ25lZCBpbnQgYWxpZ24gPSB4bG54X2dldF9h bGlnbihkcm0pOwo+ICsKPiArICAgICAgIGlmICghYXJncy0+cGl0Y2ggfHwgIUlTX0FMSUdORUQo YXJncy0+cGl0Y2gsIGFsaWduKSkKPiArICAgICAgICAgICAgICAgYXJncy0+cGl0Y2ggPSBBTElH TihwaXRjaCwgYWxpZ24pOwo+ICsKPiArICAgICAgIHJldHVybiBkcm1fZ2VtX2NtYV9kdW1iX2Ny ZWF0ZV9pbnRlcm5hbChmaWxlX3ByaXYsIGRybSwgYXJncyk7Cj4gK30KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9nZW0uaCBiL2RyaXZlcnMvZ3B1L2RybS94bG54L3hs bnhfZ2VtLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmYzODBkZTkK PiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9nZW0uaAo+ IEBAIC0wLDAgKzEsMjYgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAK PiArLyoKPiArICogWGlsaW54IERSTSBLTVMgR0VNIGhlbHBlciBoZWFkZXIKPiArICoKPiArICog IENvcHlyaWdodCAoQykgMjAxNSAtIDIwMTggWGlsaW54LCBJbmMuCj4gKyAqCj4gKyAqICBBdXRo b3I6IEh5dW4gV29vIEt3b24gPGh5dW4ua3dvbkB4aWxpbnguY29tPgo+ICsgKgo+ICsgKiBUaGlz IHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljCj4gKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCj4gKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVk LCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfWExOWF9HRU1fSF8KPiArI2RlZmlu ZSBfWExOWF9HRU1fSF8KPiArCj4gK2ludCB4bG54X2dlbV9jbWFfZHVtYl9jcmVhdGUoc3RydWN0 IGRybV9maWxlICpmaWxlX3ByaXYsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgZHJtX2RldmljZSAqZHJtLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IGRybV9tb2RlX2NyZWF0ZV9kdW1iICphcmdzKTsKPiArCj4gKyNlbmRpZiAvKiBfWExOWF9HRU1f SF8gKi8KPiAtLQo+IDIuNy40Cj4gCj4gVGhpcyBlbWFpbCBhbmQgYW55IGF0dGFjaG1lbnRzIGFy ZSBpbnRlbmRlZCBmb3IgdGhlIHNvbGUgdXNlIG9mIHRoZSBuYW1lZCByZWNpcGllbnQocykgYW5k IGNvbnRhaW4ocykgY29uZmlkZW50aWFsIGluZm9ybWF0aW9uIHRoYXQgbWF5IGJlIHByb3ByaWV0 YXJ5LCBwcml2aWxlZ2VkIG9yIGNvcHlyaWdodGVkIHVuZGVyIGFwcGxpY2FibGUgbGF3LiBJZiB5 b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQgcmVjaXBpZW50LCBkbyBub3QgcmVhZCwgY29weSwgb3Ig Zm9yd2FyZCB0aGlzIGVtYWlsIG1lc3NhZ2Ugb3IgYW55IGF0dGFjaG1lbnRzLiBEZWxldGUgdGhp cyBlbWFpbCBtZXNzYWdlIGFuZCBhbnkgYXR0YWNobWVudHMgaW1tZWRpYXRlbHkuCgotLSAKRGFu aWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Js b2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs Cg==