From mboxrd@z Thu Jan 1 00:00:00 1970 From: Subject: RE: [PATCH v5 1/5] drm: xlnx: Xilinx DRM KMS module Date: Tue, 20 Feb 2018 09:11:42 -0800 Message-ID: <20180220171141.GA5004@smtp.xilinx.com> References: <1517967400-16993-1-git-send-email-hyun.kwon@xilinx.com> <20180219094307.GK22199@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20180219094307.GK22199@phenom.ffwll.local> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter Cc: "devicetree@vger.kernel.org" , Michal Simek , "dri-devel@lists.freedesktop.org" , Rob Herring , Laurent Pinchart , Daniel Vetter List-Id: devicetree@vger.kernel.org Cgo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4gRnJvbTogRGFuaWVsIFZldHRlciBbbWFp bHRvOmRhbmllbC52ZXR0ZXJAZmZ3bGwuY2hdIE9uIEJlaGFsZiBPZiBEYW5pZWwKPiBWZXR0ZXIK PiBTZW50OiBNb25kYXksIEZlYnJ1YXJ5IDE5LCAyMDE4IDE6NDMgQU0KPiBUbzogSHl1biBLd29u IDxoeXVua0B4aWxpbnguY29tPgo+IENjOiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn OyBkZXZpY2V0cmVlQHZnZXIua2VybmVsLm9yZzsgRGFuaWVsCj4gVmV0dGVyIDxkYW5pZWwudmV0 dGVyQGludGVsLmNvbT47IFJvYiBIZXJyaW5nIDxyb2JoK2R0QGtlcm5lbC5vcmc+Owo+IE1pY2hh bCBTaW1layA8bWljaGFsLnNpbWVrQHhpbGlueC5jb20+OyBMYXVyZW50IFBpbmNoYXJ0Cj4gPGxh dXJlbnQucGluY2hhcnRAaWRlYXNvbmJvYXJkLmNvbT4KPiBTdWJqZWN0OiBSZTogW1BBVENIIHY1 IDEvNV0gZHJtOiB4bG54OiBYaWxpbnggRFJNIEtNUyBtb2R1bGUKPiAKPiBPbiBUdWUsIEZlYiAw NiwgMjAxOCBhdCAwNTozNjozNlBNIC0wODAwLCBIeXVuIEt3b24gd3JvdGU6Cj4gPiBYaWxpbngg aGFzIHZhcmlvdXMgcGxhdGZvcm1zIGZvciBkaXNwbGF5LCB3aGVyZSB1c2VycyBjYW4gY3JlYXRl Cj4gPiB1c2luZyBtdWx0aXBsZSBJUHMgaW4gdGhlIHByb2dyYW1tYWJsZSBGUEdBIGZhYnJpYywg b3Igd2hlcmUKPiA+IHNvbWUgaGFyZGVuZWQgcGllcGxpbmUgaXMgYXZhaWxhYmxlIG9uIHRoZSBj aGlwLiBGdXJ0aGVybW9yZSwKPiA+IGhhcmRlbmVkIHBpcGVsaW5lIGNhbiBhbHNvIGludGVyYWN0 IHdpdGggc29mdCBsb2dpY3MgaW4gRlBHQS4KPiA+Cj4gPiBUaGUgWGlsaW54IERSTSBLTVMgbW9k dWxlIGlzIHRvIGludGVncmF0ZSBtdWx0aXBsZSBzdWJkZXZpY2VzIGFuZAo+ID4gdG8gcmVwcmVz ZW50IHRoZSBlbnRpcmUgcGlwZWxpbmUgYXMgYSBzaW5nbGUgRFJNIGRldmljZS4gVGhlIG1vZHVs ZQo+ID4gaW5jbHVkZXMgaGVscGVyIChleCwgZnJhbWVidWZmZXIgYW5kIGdlbSBoZWxwZXJzKSBh bmQKPiA+IGdsdWUgbG9naWMgKGV4LCBjcnRjIGludGVyZmFjZSkgZnVuY3Rpb25zLgo+ID4KPiA+ IFNpZ25lZC1vZmYtYnk6IEh5dW4gS3dvbiA8aHl1bi5rd29uQHhpbGlueC5jb20+Cj4gPiBBY2tl ZC1ieTogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KPiAKPiBMb29rcyBh bGwgcmVhZHkgZm9yIG1lcmdpbmcuIERpZCB5b3UgYXBwbHkgZm9yIGNvbW1pdCByaWdodHMgdG8g ZHJtLW1pc2MKPiBhbHJlYWR5IHNvIHlvdSBjb3VsZCBwdXNoIHRoaXMgcmlnaHQgYXdheT8KClll cywgSSd2ZSBjcmVhdGVkIHRoZSByZXF1ZXN0LCBhbmQgYW0gd2FpdGluZyBmb3IgdGhlIHJlc3Bv bnNlIHRoZXJlOgpodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD0x MDUwMTcKClRoYW5rcywKLWh5dW4KCj4gLURhbmllbAo+IAo+ID4gLS0tCj4gPiB2NQo+ID4gLSBS ZWRlZmluZSB4bG54X3BpcGVsaW5lX2luaXQoKQo+ID4gdjQKPiA+IC0gRml4IGEgYnVnIGluIG9m IGdyYXBoIGJpbmRpbmcgaGFuZGxpbmcKPiA+IC0gUmVtb3ZlIHZibGFuayBjYWxsYmFja3MgZnJv bSB4bG54X2NydGMKPiA+IC0gUmVtb3ZlIHRoZSBkdCBiaW5kaW5nLiBUaGlzIG1vZHVsZSBiZWNv bWVzIG1vcmUgbGlrZSBhIGxpYnJhcnkuCj4gPiAtIFJlcGhyYXNlIHRoZSBjb21taXQgbWVzc2Fn ZQo+ID4gdjMKPiA+IC0gQWRkIExhdXJlbnQgYXMgYSBtYWludGFpbmVyCj4gPiAtIEZpeCBtdWx0 aXBsZS1yZWZlcmVuY2Ugb24gZ2VtIG9iamVjdHMKPiA+IHYyCj4gPiAtIENoYW5nZSB0aGUgU1BE WCBpZGVudGlmaWVyIGZvcm1hdAo+ID4gLSBNZXJnZSBwYXRjaGVzKGNydGMsIGdlbSwgZmIpIGlu dG8gc2luZ2xlIG9uZQo+ID4gdjIgb2YgeGxueF9kcnYKPiA+IC0gUmVuYW1lIGttcyB0byBkaXNw bGF5IGluIHhsbnhfZHJ2Cj4gPiAtIFJlcGxhY2Ugc29tZSB4bG54IHNwZWNpZmljIGZiIGhlbHBl ciB3aXRoIGNvbW1vbiBoZWxwZXJzIGluIHhsbnhfZHJ2Cj4gPiAtIERvbid0IHNldCB0aGUgY29t bWl0IHRhaWwgY2FsbGJhY2sgaW4geGxueF9kcnYKPiA+IC0gU3VwcG9ydCAncG9ydHMnIGdyYXBo IGJpbmRpbmcgaW4geGxueF9kcnYKPiA+IHYyIG9mIHhsbnhfZmIKPiA+IC0gUmVtb3ZlIHdyYXBw ZXJzIGluIHhsbnhfZmIKPiA+IC0gUmVwbGFjZSBzb21lIGZ1bmN0aW9ucyB3aXRoIGRybSBjb3Jl IGhlbHBlcnMgaW4geGxueF9mYgo+ID4gLS0tCj4gPiAtLS0KPiA+ICBNQUlOVEFJTkVSUyAgICAg ICAgICAgICAgICAgICAgICB8ICAgOSArCj4gPiAgZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAg ICAgICAgfCAgIDIgKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgICAgIHwgICAx ICsKPiA+ICBkcml2ZXJzL2dwdS9kcm0veGxueC9LY29uZmlnICAgICB8ICAxMiArCj4gPiAgZHJp dmVycy9ncHUvZHJtL3hsbngvTWFrZWZpbGUgICAgfCAgIDIgKwo+ID4gIGRyaXZlcnMvZ3B1L2Ry bS94bG54L3hsbnhfY3J0Yy5jIHwgMTc3ICsrKysrKysrKysrKysrCj4gPiAgZHJpdmVycy9ncHUv ZHJtL3hsbngveGxueF9jcnRjLmggfCAgNzAgKysrKysrCj4gPiAgZHJpdmVycy9ncHUvZHJtL3hs bngveGxueF9kcnYuYyAgfCA1MDEKPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKPiA+ICBkcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2Rydi5oICB8ICAzMyArKysKPiA+ ICBkcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2ZiLmMgICB8IDI5OCArKysrKysrKysrKysrKysr KysrKysrKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZmIuaCAgIHwgIDMzICsrKwo+ ID4gIGRyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZ2VtLmMgIHwgIDQ3ICsrKysKPiA+ICBkcml2 ZXJzL2dwdS9kcm0veGxueC94bG54X2dlbS5oICB8ICAyNiArKwo+ID4gIDEzIGZpbGVzIGNoYW5n ZWQsIDEyMTEgaW5zZXJ0aW9ucygrKQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0veGxueC9LY29uZmlnCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS94bG54L01ha2VmaWxlCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94 bG54L3hsbnhfY3J0Yy5jCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94 bG54L3hsbnhfY3J0Yy5oCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94 bG54L3hsbnhfZHJ2LmMKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hs bngveGxueF9kcnYuaAo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veGxu eC94bG54X2ZiLmMKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hsbngv eGxueF9mYi5oCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94bG54L3hs bnhfZ2VtLmMKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hsbngveGxu eF9nZW0uaAo+ID4KPiA+IGRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCj4g PiBpbmRleCA1YmMwODhmLi4wN2MwZTczIDEwMDY0NAo+ID4gLS0tIGEvTUFJTlRBSU5FUlMKPiA+ ICsrKyBiL01BSU5UQUlORVJTCj4gPiBAQCAtNDc4OSw2ICs0Nzg5LDE1IEBAIEY6CWRyaXZlcnMv Z3B1L2RybS9ldG5hdml2Lwo+ID4gIEY6CWluY2x1ZGUvdWFwaS9kcm0vZXRuYXZpdl9kcm0uaAo+ ID4gIEY6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L2V0bmF2aXYv Cj4gPgo+ID4gK0RSTSBEUklWRVJTIEZPUiBYSUxJTlgKPiA+ICtNOglIeXVuIEt3b24gPGh5dW4u a3dvbkB4aWxpbnguY29tPgo+ID4gK006CUxhdXJlbnQgUGluY2hhcnQgPGxhdXJlbnQucGluY2hh cnRAaWRlYXNvbmJvYXJkLmNvbT4KPiA+ICtMOglkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCj4gPiArUzoJTWFpbnRhaW5lZAo+ID4gK0Y6CWRyaXZlcnMvZ3B1L2RybS94bG54Lwo+ID4g K0Y6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3hsbngvCj4gPiAr VDoJZ2l0IGdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2RybS9kcm0tbWlzYwo+ID4gKwo+ ID4gIERSTSBEUklWRVJTIEZPUiBaVEUgWlgKPiA+ICBNOglTaGF3biBHdW8gPHNoYXduZ3VvQGtl cm5lbC5vcmc+Cj4gPiAgTDoJZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ID4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25m aWcKPiA+IGluZGV4IGRlZWVmYTcuLjVhM2VjNjYgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vS2NvbmZpZwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKPiA+IEBAIC0y ODksNiArMjg5LDggQEAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0vcGwxMTEvS2NvbmZpZyIKPiA+ Cj4gPiAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0vdHZlMjAwL0tjb25maWciCj4gPgo+ID4gK3Nv dXJjZSAiZHJpdmVycy9ncHUvZHJtL3hsbngvS2NvbmZpZyIKPiA+ICsKPiA+ICAjIEtlZXAgbGVn YWN5IGRyaXZlcnMgbGFzdAo+ID4KPiA+ICBtZW51Y29uZmlnIERSTV9MRUdBQ1kKPiA+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZp bGUKPiA+IGluZGV4IDUwMDkzZmYuLmY5MzU1N2UgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vTWFrZWZpbGUKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ID4gQEAg LTEwMywzICsxMDMsNCBAQCBvYmotJChDT05GSUdfRFJNX01YU0ZCKQkrPSBteHNmYi8KPiA+ICBv YmotJChDT05GSUdfRFJNX1RJTllEUk0pICs9IHRpbnlkcm0vCj4gPiAgb2JqLSQoQ09ORklHX0RS TV9QTDExMSkgKz0gcGwxMTEvCj4gPiAgb2JqLSQoQ09ORklHX0RSTV9UVkUyMDApICs9IHR2ZTIw MC8KPiA+ICtvYmotJChDT05GSUdfRFJNX1hMTlgpCSs9IHhsbngvCj4gPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3hsbngvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS94bG54L0tjb25m aWcKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi4xOWZkN2NkCj4g PiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGxueC9LY29uZmlnCj4g PiBAQCAtMCwwICsxLDEyIEBACj4gPiArY29uZmlnIERSTV9YTE5YCj4gPiArCXRyaXN0YXRlICJY aWxpbnggRFJNIEtNUyBEcml2ZXIiCj4gPiArCWRlcGVuZHMgb24gRFJNICYmIE9GCj4gPiArCXNl bGVjdCBEUk1fS01TX0hFTFBFUgo+ID4gKwlzZWxlY3QgRFJNX0tNU19DTUFfSEVMUEVSCj4gPiAr CXNlbGVjdCBEUk1fR0VNX0NNQV9IRUxQRVIKPiA+ICsJaGVscAo+ID4gKwkgIFhpbGlueCBEUk0g S01TIGRyaXZlci4gQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlCj4gPiArCSAgYSBYaWxp bnggU29DcyB3aXRoIGhhcmRlbmVkIGRpc3BsYXkgcGlwZWxpbmUgb3Igc29mdAo+ID4gKwkgIGRp c3BsYXkgcGlwZWxpbmUgdXNpbmcgWGlsaW54IElQcyBpbiBGUEdBLiBUaGlzIG1vZHVsZQo+ID4g KwkgIHByb3ZpZGVzIHRoZSBrZXJuZWwgbW9kZSBzZXR0aW5nIGZ1bmN0aW9uYWxpdGllcwo+ID4g KwkgIGZvciBYaWxpbnggZGlzcGxheSBkcml2ZXJzLgo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS94bG54L01ha2VmaWxlCj4gYi9kcml2ZXJzL2dwdS9kcm0veGxueC9NYWtlZmlsZQo+ ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAuLmM2MGEyODEKPiA+IC0t LSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94bG54L01ha2VmaWxlCj4gPiBA QCAtMCwwICsxLDIgQEAKPiA+ICt4bG54X2RybS1vYmpzICs9IHhsbnhfY3J0Yy5vIHhsbnhfZHJ2 Lm8geGxueF9mYi5vIHhsbnhfZ2VtLm8KPiA+ICtvYmotJChDT05GSUdfRFJNX1hMTlgpICs9IHhs bnhfZHJtLm8KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2NydGMu Ywo+IGIvZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9jcnRjLmMKPiA+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi5kZTgzOTA1Cj4gPiAtLS0gL2Rldi9udWxsCj4gPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2NydGMuYwo+ID4gQEAgLTAsMCArMSwxNzcg QEAKPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ID4gKy8qCj4gPiAr ICogWGlsaW54IERSTSBjcnRjIGRyaXZlcgo+ID4gKyAqCj4gPiArICogIENvcHlyaWdodCAoQykg MjAxNyAtIDIwMTggWGlsaW54LCBJbmMuCj4gPiArICoKPiA+ICsgKiAgQXV0aG9yOiBIeXVuIFdv byBLd29uIDxoeXVuLmt3b25AeGlsaW54LmNvbT4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgc29mdHdh cmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMK PiA+ICsgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIGFuZAo+ID4gKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBh bmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCj4gPiArICoKPiA+ICsgKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiA+ ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgo+ID4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiA+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpbmNsdWRlIDxkcm0vZHJt UC5oPgo+ID4gKwo+ID4gKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Cj4gPiArCj4gPiArI2luY2x1 ZGUgInhsbnhfY3J0Yy5oIgo+ID4gKyNpbmNsdWRlICJ4bG54X2Rydi5oIgo+ID4gKwo+ID4gKy8q Cj4gPiArICogT3ZlcnZpZXcKPiA+ICsgKiAtLS0tLS0tLQo+ID4gKyAqCj4gPiArICogVGhlIFhp bGlueCBDUlRDIGxheWVyIGlzIHRvIGVuYWJsZSB0aGUgY3VzdG9tIGludGVyZmFjZSB0byBDUlRD IGRyaXZlcnMuCj4gPiArICogVGhlIGludGVyZmFjZSBpcyB1c2VkIGJ5IFhpbGlueCBEUk0gZHJp dmVyIHdoZXJlIGl0IG5lZWRzIENSVEMKPiA+ICsgKiBmdW5jdGlvbmFpbHR5LiBDUlRDIGRyaXZl cnMgc2hvdWxkIGF0dGFjaCB0aGUgZGVzaXJlZCBjYWxsYmFja3MKPiA+ICsgKiB0byBzdHJ1Y3Qg eGxueF9jcnRjIGFuZCByZWdpc3RlciB0aGUgeGxueF9jcnRjIHdpdGggY29ycmVjc3BvbmRpbmcK PiA+ICsgKiBkcm1fZGV2aWNlLiBJdCdzIGhpZ2hseSByZWNvbW1lbmRlZCBDUlRDIGRyaXZlcnMg cmVnaXN0ZXIgYWxsCj4gY2FsbGJhY2tzCj4gPiArICogZXZlbiB0aG91Z2ggbWFueSBvZiB0aGVt IGFyZSBvcHRpb25hbC4KPiA+ICsgKiBUaGUgQ1JUQyBoZWxwZXIgc2ltcGx5IHdhbGtzIHRocm91 Z2ggdGhlIHJlZ2lzdGVyZWQgQ1JUQyBkZXZpY2UsCj4gPiArICogYW5kIGNhbGwgdGhlIGNhbGxi YWNrcy4KPiA+ICsgKi8KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBzdHJ1Y3QgeGxueF9jcnRjX2hl bHBlciAtIFhpbGlueCBDUlRDIGhlbHBlcgo+ID4gKyAqIEB4bG54X2NydGNzOiBsaXN0IG9mIFhp bGlueCBDUlRDIGRldmljZXMKPiA+ICsgKiBAbG9jazogbG9jayB0byBwcm90ZWN0IEB4bG54X2Ny dGNzCj4gPiArICogQGRybTogYmFjayBwb2ludGVyIHRvIERSTSBjb3JlCj4gPiArICovCj4gPiAr c3RydWN0IHhsbnhfY3J0Y19oZWxwZXIgewo+ID4gKwlzdHJ1Y3QgbGlzdF9oZWFkIHhsbnhfY3J0 Y3M7Cj4gPiArCXN0cnVjdCBtdXRleCBsb2NrOyAvKiBsb2NrIGZvciBAeGxueF9jcnRjcyAqLwo+ ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtOwo+ID4gK307Cj4gPiArCj4gPiArI2RlZmluZSBY TE5YX0NSVENfTUFYX0hFSUdIVF9XSURUSAlVSU5UX01BWAo+ID4gKwo+ID4gK3Vuc2lnbmVkIGlu dCB4bG54X2NydGNfaGVscGVyX2dldF9hbGlnbihzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqaGVs cGVyKQo+ID4gK3sKPiA+ICsJc3RydWN0IHhsbnhfY3J0YyAqY3J0YzsKPiA+ICsJdW5zaWduZWQg aW50IGFsaWduID0gMSwgdG1wOwo+ID4gKwo+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMs ICZoZWxwZXItPnhsbnhfY3J0Y3MsIGxpc3QpIHsKPiA+ICsJCWlmIChjcnRjLT5nZXRfYWxpZ24p IHsKPiA+ICsJCQl0bXAgPSBjcnRjLT5nZXRfYWxpZ24oY3J0Yyk7Cj4gPiArCQkJYWxpZ24gPSBB TElHTihhbGlnbiwgdG1wKTsKPiA+ICsJCX0KPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gYWxp Z247Cj4gPiArfQo+ID4gKwo+ID4gK3U2NCB4bG54X2NydGNfaGVscGVyX2dldF9kbWFfbWFzayhz dHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqaGVscGVyKQo+ID4gK3sKPiA+ICsJc3RydWN0IHhsbnhf Y3J0YyAqY3J0YzsKPiA+ICsJdTY0IG1hc2sgPSBETUFfQklUX01BU0soc2l6ZW9mKGRtYV9hZGRy X3QpICogOCksIHRtcDsKPiA+ICsKPiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmaGVs cGVyLT54bG54X2NydGNzLCBsaXN0KSB7Cj4gPiArCQlpZiAoY3J0Yy0+Z2V0X2RtYV9tYXNrKSB7 Cj4gPiArCQkJdG1wID0gY3J0Yy0+Z2V0X2RtYV9tYXNrKGNydGMpOwo+ID4gKwkJCW1hc2sgPSBt aW4obWFzaywgdG1wKTsKPiA+ICsJCX0KPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gbWFzazsK PiA+ICt9Cj4gPiArCj4gPiAraW50IHhsbnhfY3J0Y19oZWxwZXJfZ2V0X21heF93aWR0aChzdHJ1 Y3QgeGxueF9jcnRjX2hlbHBlciAqaGVscGVyKQo+ID4gK3sKPiA+ICsJc3RydWN0IHhsbnhfY3J0 YyAqY3J0YzsKPiA+ICsJdW5zaWduZWQgaW50IHdpZHRoID0gWExOWF9DUlRDX01BWF9IRUlHSFRf V0lEVEgsIHRtcDsKPiA+ICsKPiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmaGVscGVy LT54bG54X2NydGNzLCBsaXN0KSB7Cj4gPiArCQlpZiAoY3J0Yy0+Z2V0X21heF93aWR0aCkgewo+ ID4gKwkJCXRtcCA9IGNydGMtPmdldF9tYXhfd2lkdGgoY3J0Yyk7Cj4gPiArCQkJd2lkdGggPSBt aW4od2lkdGgsIHRtcCk7Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIHdpZHRo Owo+ID4gK30KPiA+ICsKPiA+ICtpbnQgeGxueF9jcnRjX2hlbHBlcl9nZXRfbWF4X2hlaWdodChz dHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqaGVscGVyKQo+ID4gK3sKPiA+ICsJc3RydWN0IHhsbnhf Y3J0YyAqY3J0YzsKPiA+ICsJdW5zaWduZWQgaW50IGhlaWdodCA9IFhMTlhfQ1JUQ19NQVhfSEVJ R0hUX1dJRFRILCB0bXA7Cj4gPiArCj4gPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmhl bHBlci0+eGxueF9jcnRjcywgbGlzdCkgewo+ID4gKwkJaWYgKGNydGMtPmdldF9tYXhfaGVpZ2h0 KSB7Cj4gPiArCQkJdG1wID0gY3J0Yy0+Z2V0X21heF9oZWlnaHQoY3J0Yyk7Cj4gPiArCQkJaGVp Z2h0ID0gbWluKGhlaWdodCwgdG1wKTsKPiA+ICsJCX0KPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1 cm4gaGVpZ2h0Owo+ID4gK30KPiA+ICsKPiA+ICt1aW50MzJfdCB4bG54X2NydGNfaGVscGVyX2dl dF9mb3JtYXQoc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIgKmhlbHBlcikKPiA+ICt7Cj4gPiArCXN0 cnVjdCB4bG54X2NydGMgKmNydGM7Cj4gPiArCXUzMiBmb3JtYXQgPSAwLCB0bXA7Cj4gPiArCj4g PiArCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmhlbHBlci0+eGxueF9jcnRjcywgbGlzdCkg ewo+ID4gKwkJaWYgKGNydGMtPmdldF9mb3JtYXQpIHsKPiA+ICsJCQl0bXAgPSBjcnRjLT5nZXRf Zm9ybWF0KGNydGMpOwo+ID4gKwkJCWlmIChmb3JtYXQgJiYgZm9ybWF0ICE9IHRtcCkKPiA+ICsJ CQkJcmV0dXJuIDA7Cj4gPiArCQkJZm9ybWF0ID0gdG1wOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiAr Cj4gPiArCXJldHVybiBmb3JtYXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0cnVjdCB4bG54X2NydGNf aGVscGVyICp4bG54X2NydGNfaGVscGVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiA+ ICt7Cj4gPiArCXN0cnVjdCB4bG54X2NydGNfaGVscGVyICpoZWxwZXI7Cj4gPiArCj4gPiArCWhl bHBlciA9IGRldm1fa3phbGxvYyhkcm0tPmRldiwgc2l6ZW9mKCpoZWxwZXIpLCBHRlBfS0VSTkVM KTsKPiA+ICsJaWYgKCFoZWxwZXIpCj4gPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiA+ ICsKPiA+ICsJSU5JVF9MSVNUX0hFQUQoJmhlbHBlci0+eGxueF9jcnRjcyk7Cj4gPiArCW11dGV4 X2luaXQoJmhlbHBlci0+bG9jayk7Cj4gPiArCWhlbHBlci0+ZHJtID0gZHJtOwo+ID4gKwo+ID4g KwlyZXR1cm4gaGVscGVyOwo+ID4gK30KPiA+ICsKPiA+ICt2b2lkIHhsbnhfY3J0Y19oZWxwZXJf ZmluaShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAo+ID4gKwkJCSAgIHN0cnVjdCB4bG54X2NydGNf aGVscGVyICpoZWxwZXIpCj4gPiArewo+ID4gKwlpZiAoV0FSTl9PTihoZWxwZXItPmRybSAhPSBk cm0pKQo+ID4gKwkJcmV0dXJuOwo+ID4gKwo+ID4gKwlpZiAoV0FSTl9PTighbGlzdF9lbXB0eSgm aGVscGVyLT54bG54X2NydGNzKSkpCj4gPiArCQlyZXR1cm47Cj4gPiArCj4gPiArCW11dGV4X2Rl c3Ryb3koJmhlbHBlci0+bG9jayk7Cj4gPiArCWRldm1fa2ZyZWUoZHJtLT5kZXYsIGhlbHBlcik7 Cj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQgeGxueF9jcnRjX3JlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2 aWNlICpkcm0sIHN0cnVjdCB4bG54X2NydGMgKmNydGMpCj4gPiArewo+ID4gKwlzdHJ1Y3QgeGxu eF9jcnRjX2hlbHBlciAqaGVscGVyID0geGxueF9nZXRfY3J0Y19oZWxwZXIoZHJtKTsKPiA+ICsK PiA+ICsJbXV0ZXhfbG9jaygmaGVscGVyLT5sb2NrKTsKPiA+ICsJbGlzdF9hZGRfdGFpbCgmY3J0 Yy0+bGlzdCwgJmhlbHBlci0+eGxueF9jcnRjcyk7Cj4gPiArCW11dGV4X3VubG9jaygmaGVscGVy LT5sb2NrKTsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTF9HUEwoeGxueF9jcnRjX3JlZ2lzdGVy KTsKPiA+ICsKPiA+ICt2b2lkIHhsbnhfY3J0Y191bnJlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNl ICpkcm0sIHN0cnVjdCB4bG54X2NydGMgKmNydGMpCj4gPiArewo+ID4gKwlzdHJ1Y3QgeGxueF9j cnRjX2hlbHBlciAqaGVscGVyID0geGxueF9nZXRfY3J0Y19oZWxwZXIoZHJtKTsKPiA+ICsKPiA+ ICsJbXV0ZXhfbG9jaygmaGVscGVyLT5sb2NrKTsKPiA+ICsJbGlzdF9kZWwoJmNydGMtPmxpc3Qp Owo+ID4gKwltdXRleF91bmxvY2soJmhlbHBlci0+bG9jayk7Cj4gPiArfQo+ID4gK0VYUE9SVF9T WU1CT0xfR1BMKHhsbnhfY3J0Y191bnJlZ2lzdGVyKTsKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0veGxueC94bG54X2NydGMuaAo+IGIvZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9j cnRjLmgKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi5iZmY1ZTNk Cj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2Ny dGMuaAo+ID4gQEAgLTAsMCArMSw3MCBAQAo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wCj4gPiArLyoKPiA+ICsgKiBYaWxpbnggRFJNIGNydGMgaGVhZGVyCj4gPiArICoK PiA+ICsgKiAgQ29weXJpZ2h0IChDKSAyMDE3IC0gMjAxOCBYaWxpbngsIEluYy4KPiA+ICsgKgo+ ID4gKyAqICBBdXRob3I6IEh5dW4gV29vIEt3b24gPGh5dW4ua3dvbkB4aWxpbnguY29tPgo+ID4g KyAqCj4gPiArICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYwo+ID4gKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCj4gPiArICogbWF5IGJl IGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KPiA+ ICsgKgo+ID4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAo+ID4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gPiArICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ID4gKyAqIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gPiArICovCj4gPiAr Cj4gPiArI2lmbmRlZiBfWExOWF9DUlRDX0hfCj4gPiArI2RlZmluZSBfWExOWF9DUlRDX0hfCj4g PiArCj4gPiArLyoqCj4gPiArICogc3RydWN0IHhsbnhfY3J0YyAtIFhpbGlueCBDUlRDIGRldmlj ZQo+ID4gKyAqIEBjcnRjOiBEUk0gQ1JUQyBkZXZpY2UKPiA+ICsgKiBAbGlzdDogbGlzdCBub2Rl IGZvciBYaWxpbnggQ1JUQyBkZXZpY2UgbGlzdAo+ID4gKyAqIEBnZXRfYWxpZ246IEdldCB0aGUg YWxpZ25tZW50IHJlcXVpcmVtZW50IG9mIENSVEMgZGV2aWNlCj4gPiArICogQGdldF9kbWFfbWFz azogR2V0IHRoZSBkbWEgbWFzayBvZiBDUlRDIGRldmljZQo+ID4gKyAqIEBnZXRfbWF4X3dpZHRo OiBHZXQgdGhlIG1heGltdW0gc3VwcG9ydGVkIHdpZHRoCj4gPiArICogQGdldF9tYXhfaGVpZ2h0 OiBHZXQgdGhlIG1heGltdW0gc3VwcG9ydGVkIGhlaWdodAo+ID4gKyAqIEBnZXRfZm9ybWF0OiBH ZXQgdGhlIGN1cnJlbnQgZm9ybWF0IG9mIENSVEMgZGV2aWNlCj4gPiArICovCj4gPiArc3RydWN0 IHhsbnhfY3J0YyB7Cj4gPiArCXN0cnVjdCBkcm1fY3J0YyBjcnRjOwo+ID4gKwlzdHJ1Y3QgbGlz dF9oZWFkIGxpc3Q7Cj4gPiArCXVuc2lnbmVkIGludCAoKmdldF9hbGlnbikoc3RydWN0IHhsbnhf Y3J0YyAqY3J0Yyk7Cj4gPiArCXU2NCAoKmdldF9kbWFfbWFzaykoc3RydWN0IHhsbnhfY3J0YyAq Y3J0Yyk7Cj4gPiArCWludCAoKmdldF9tYXhfd2lkdGgpKHN0cnVjdCB4bG54X2NydGMgKmNydGMp Owo+ID4gKwlpbnQgKCpnZXRfbWF4X2hlaWdodCkoc3RydWN0IHhsbnhfY3J0YyAqY3J0Yyk7Cj4g PiArCXVpbnQzMl90ICgqZ2V0X2Zvcm1hdCkoc3RydWN0IHhsbnhfY3J0YyAqY3J0Yyk7Cj4gPiAr fTsKPiA+ICsKPiA+ICsvKgo+ID4gKyAqIEhlbHBlciBmdW5jdGlvbnM6IHVzZWQgd2l0aGluIFhs bnggRFJNCj4gPiArICovCj4gPiArCj4gPiArc3RydWN0IHhsbnhfY3J0Y19oZWxwZXI7Cj4gPiAr Cj4gPiArdW5zaWduZWQgaW50IHhsbnhfY3J0Y19oZWxwZXJfZ2V0X2FsaWduKHN0cnVjdCB4bG54 X2NydGNfaGVscGVyICpoZWxwZXIpOwo+ID4gK3U2NCB4bG54X2NydGNfaGVscGVyX2dldF9kbWFf bWFzayhzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqaGVscGVyKTsKPiA+ICtpbnQgeGxueF9jcnRj X2hlbHBlcl9nZXRfbWF4X3dpZHRoKHN0cnVjdCB4bG54X2NydGNfaGVscGVyICpoZWxwZXIpOwo+ ID4gK2ludCB4bG54X2NydGNfaGVscGVyX2dldF9tYXhfaGVpZ2h0KHN0cnVjdCB4bG54X2NydGNf aGVscGVyICpoZWxwZXIpOwo+ID4gK3VpbnQzMl90IHhsbnhfY3J0Y19oZWxwZXJfZ2V0X2Zvcm1h dChzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqaGVscGVyKTsKPiA+ICsKPiA+ICtzdHJ1Y3QgeGxu eF9jcnRjX2hlbHBlciAqeGxueF9jcnRjX2hlbHBlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpk cm0pOwo+ID4gK3ZvaWQgeGxueF9jcnRjX2hlbHBlcl9maW5pKHN0cnVjdCBkcm1fZGV2aWNlICpk cm0sCj4gPiArCQkJICAgc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIgKmhlbHBlcik7Cj4gPiArCj4g PiArLyoKPiA+ICsgKiBDUlRDIHJlZ2lzdHJhdGlvbjogdXNlZCBieSBvdGhlciBzdWItZHJpdmVy IG1vZHVsZXMKPiA+ICsgKi8KPiA+ICsKPiA+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCB4bG54X2Ny dGMgKnRvX3hsbnhfY3J0YyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gPiArewo+ID4gKwlyZXR1 cm4gY29udGFpbmVyX29mKGNydGMsIHN0cnVjdCB4bG54X2NydGMsIGNydGMpOwo+ID4gK30KPiA+ ICsKPiA+ICt2b2lkIHhsbnhfY3J0Y19yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBz dHJ1Y3QgeGxueF9jcnRjICpjcnRjKTsKPiA+ICt2b2lkIHhsbnhfY3J0Y191bnJlZ2lzdGVyKHN0 cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCB4bG54X2NydGMKPiAqY3J0Yyk7Cj4gPiArCj4g PiArI2VuZGlmIC8qIF9YTE5YX0NSVENfSF8gKi8KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0veGxueC94bG54X2Rydi5jCj4gYi9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2Rydi5j Cj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMC4uOGYwZTM1Nwo+ID4g LS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9kcnYuYwo+ ID4gQEAgLTAsMCArMSw1MDEgQEAKPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMAo+ID4gKy8qCj4gPiArICogWGlsaW54IERSTSBLTVMgRHJpdmVyCj4gPiArICoKPiA+ICsg KiAgQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAxOCBYaWxpbngsIEluYy4KPiA+ICsgKgo+ID4gKyAq ICBBdXRob3I6IEh5dW4gV29vIEt3b24gPGh5dW4ua3dvbkB4aWxpbnguY29tPgo+ID4gKyAqCj4g PiArICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYwo+ID4gKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCj4gPiArICogbWF5IGJlIGNvcGll ZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KPiA+ICsgKgo+ ID4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAo+ID4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ID4gKyAqIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gPiArICovCj4gPiArCj4gPiAr I2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+Cj4g PiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ID4gKyNpbmNsdWRlIDxkcm0v ZHJtX2NydGNfaGVscGVyLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+Cj4g PiArI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KPiA+ICsjaW5jbHVkZSA8ZHJt L2RybV9vZi5oPgo+ID4gKwo+ID4gKyNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQuaD4KPiA+ICsj aW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4K PiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2dy YXBoLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ID4gKyNpbmNs dWRlIDxsaW51eC9yZXNlcnZhdGlvbi5oPgo+ID4gKwo+ID4gKyNpbmNsdWRlICJ4bG54X2NydGMu aCIKPiA+ICsjaW5jbHVkZSAieGxueF9mYi5oIgo+ID4gKyNpbmNsdWRlICJ4bG54X2dlbS5oIgo+ ID4gKwo+ID4gKyNkZWZpbmUgRFJJVkVSX05BTUUJInhsbngiCj4gPiArI2RlZmluZSBEUklWRVJf REVTQwkiWGlsaW54IERSTSBLTVMgRHJpdmVyIgo+ID4gKyNkZWZpbmUgRFJJVkVSX0RBVEUJIjIw MTMwNTA5Igo+ID4gKyNkZWZpbmUgRFJJVkVSX01BSk9SCTEKPiA+ICsjZGVmaW5lIERSSVZFUl9N SU5PUgkwCj4gPiArCj4gPiArc3RhdGljIHVpbnQgeGxueF9mYmRldl92cmVzID0gMjsKPiA+ICtt b2R1bGVfcGFyYW1fbmFtZWQoZmJkZXZfdnJlcywgeGxueF9mYmRldl92cmVzLCB1aW50LCAwNDQ0 KTsKPiA+ICtNT0RVTEVfUEFSTV9ERVNDKGZiZGV2X3ZyZXMsCj4gPiArCQkgImZiZGV2IHZpcnR1 YWwgcmVzb2x1dGlvbiBtdWx0aXBsaWVyIGZvciBmYiAoZGVmYXVsdDogMikiKTsKPiA+ICsKPiA+ ICsvKioKPiA+ICsgKiBzdHJ1Y3QgeGxueF9kcm0gLSBYaWxpbnggRFJNIHByaXZhdGUgZGF0YQo+ ID4gKyAqIEBkcm06IERSTSBjb3JlCj4gPiArICogQGNydGM6IFhpbGlueCBEUk0gQ1JUQyBoZWxw ZXIKPiA+ICsgKiBAZmI6IERSTSBmYiBoZWxwZXIKPiA+ICsgKiBAbWFzdGVyOiBsb2dpY2FsIG1h c3RlciBkZXZpY2UgZm9yIHBpcGVsaW5lCj4gPiArICogQHN1c3BlbmRfc3RhdGU6IGF0b21pYyBz dGF0ZSBmb3Igc3VzcGVuZCAvIHJlc3VtZQo+ID4gKyAqLwo+ID4gK3N0cnVjdCB4bG54X2RybSB7 Cj4gPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm07Cj4gPiArCXN0cnVjdCB4bG54X2NydGNfaGVs cGVyICpjcnRjOwo+ID4gKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmI7Cj4gPiArCXN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKm1hc3RlcjsKPiA+ICsJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN1 c3BlbmRfc3RhdGU7Cj4gPiArfTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiB4bG54X2dldF9jcnRj X2hlbHBlciAtIFJldHVybiB0aGUgY3J0YyBoZWxwZXIgaW5zdGFuY2UKPiA+ICsgKiBAZHJtOiBE Uk0gZGV2aWNlCj4gPiArICoKPiA+ICsgKiBSZXR1cm46IHRoZSBjcnRjIGhlbHBlciBpbnN0YW5j ZQo+ID4gKyAqLwo+ID4gK3N0cnVjdCB4bG54X2NydGNfaGVscGVyICp4bG54X2dldF9jcnRjX2hl bHBlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ID4gK3sKPiA+ICsJc3RydWN0IHhsbnhfZHJt ICp4bG54X2RybSA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gPiArCj4gPiArCXJldHVybiB4bG54X2Ry bS0+Y3J0YzsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogeGxueF9nZXRfYWxpZ24gLSBS ZXR1cm4gdGhlIGFsaWduIHJlcXVpcmVtZW50IHRocm91Z2ggQ1JUQyBoZWxwZXIKPiA+ICsgKiBA ZHJtOiBEUk0gZGV2aWNlCj4gPiArICoKPiA+ICsgKiBSZXR1cm46IHRoZSBhbGlnbm1lbnQgcmVx dWlyZW1lbnQKPiA+ICsgKi8KPiA+ICt1bnNpZ25lZCBpbnQgeGxueF9nZXRfYWxpZ24oc3RydWN0 IGRybV9kZXZpY2UgKmRybSkKPiA+ICt7Cj4gPiArCXN0cnVjdCB4bG54X2RybSAqeGxueF9kcm0g PSBkcm0tPmRldl9wcml2YXRlOwo+ID4gKwo+ID4gKwlyZXR1cm4geGxueF9jcnRjX2hlbHBlcl9n ZXRfYWxpZ24oeGxueF9kcm0tPmNydGMpOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiB4 bG54X2dldF9mb3JtYXQgLSBSZXR1cm4gdGhlIGN1cnJlbnQgZm9ybWF0IG9mIENSVEMKPiA+ICsg KiBAZHJtOiBEUk0gZGV2aWNlCj4gPiArICoKPiA+ICsgKiBSZXR1cm46IHRoZSBjdXJyZW50IENS VEMgZm9ybWF0Cj4gPiArICovCj4gPiArdWludDMyX3QgeGxueF9nZXRfZm9ybWF0KHN0cnVjdCBk cm1fZGV2aWNlICpkcm0pCj4gPiArewo+ID4gKwlzdHJ1Y3QgeGxueF9kcm0gKnhsbnhfZHJtID0g ZHJtLT5kZXZfcHJpdmF0ZTsKPiA+ICsKPiA+ICsJcmV0dXJuIHhsbnhfY3J0Y19oZWxwZXJfZ2V0 X2Zvcm1hdCh4bG54X2RybS0+Y3J0Yyk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHhs bnhfb3V0cHV0X3BvbGxfY2hhbmdlZChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ID4gK3sKPiA+ ICsJc3RydWN0IHhsbnhfZHJtICp4bG54X2RybSA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gPiArCj4g PiArCWlmICh4bG54X2RybS0+ZmIpCj4gPiArCQlkcm1fZmJfaGVscGVyX2hvdHBsdWdfZXZlbnQo eGxueF9kcm0tPmZiKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1f bW9kZV9jb25maWdfZnVuY3MgeGxueF9tb2RlX2NvbmZpZ19mdW5jcyA9IHsKPiA+ICsJLmZiX2Ny ZWF0ZQkJPSB4bG54X2ZiX2NyZWF0ZSwKPiA+ICsJLm91dHB1dF9wb2xsX2NoYW5nZWQJPSB4bG54 X291dHB1dF9wb2xsX2NoYW5nZWQsCj4gPiArCS5hdG9taWNfY2hlY2sJCT0gZHJtX2F0b21pY19o ZWxwZXJfY2hlY2ssCj4gPiArCS5hdG9taWNfY29tbWl0CQk9IGRybV9hdG9taWNfaGVscGVyX2Nv bW1pdCwKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHhsbnhfbW9kZV9jb25maWdfaW5p dChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ID4gK3sKPiA+ICsJc3RydWN0IHhsbnhfZHJtICp4 bG54X2RybSA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gPiArCXN0cnVjdCB4bG54X2NydGNfaGVscGVy ICpjcnRjID0geGxueF9kcm0tPmNydGM7Cj4gPiArCj4gPiArCWRybS0+bW9kZV9jb25maWcubWlu X3dpZHRoID0gMDsKPiA+ICsJZHJtLT5tb2RlX2NvbmZpZy5taW5faGVpZ2h0ID0gMDsKPiA+ICsJ ZHJtLT5tb2RlX2NvbmZpZy5tYXhfd2lkdGggPQo+IHhsbnhfY3J0Y19oZWxwZXJfZ2V0X21heF93 aWR0aChjcnRjKTsKPiA+ICsJZHJtLT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0KPiB4bG54X2Ny dGNfaGVscGVyX2dldF9tYXhfaGVpZ2h0KGNydGMpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMg dm9pZCB4bG54X2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ID4gK3sKPiA+ICsJ c3RydWN0IHhsbnhfZHJtICp4bG54X2RybSA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gPiArCj4gPiAr CWlmICh4bG54X2RybS0+ZmIpCj4gPiArCQlkcm1fZmJfaGVscGVyX3Jlc3RvcmVfZmJkZXZfbW9k ZV91bmxvY2tlZCh4bG54X2RybS0KPiA+ZmIpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgY29u c3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB4bG54X2ZvcHMgPSB7Cj4gPiArCS5vd25lcgkJPSBU SElTX01PRFVMRSwKPiA+ICsJLm9wZW4JCT0gZHJtX29wZW4sCj4gPiArCS5yZWxlYXNlCT0gZHJt X3JlbGVhc2UsCj4gPiArCS51bmxvY2tlZF9pb2N0bAk9IGRybV9pb2N0bCwKPiA+ICsJLm1tYXAJ CT0gZHJtX2dlbV9jbWFfbW1hcCwKPiA+ICsJLnBvbGwJCT0gZHJtX3BvbGwsCj4gPiArCS5yZWFk CQk9IGRybV9yZWFkLAo+ID4gKyNpZmRlZiBDT05GSUdfQ09NUEFUCj4gPiArCS5jb21wYXRfaW9j dGwJPSBkcm1fY29tcGF0X2lvY3RsLAo+ID4gKyNlbmRpZgo+ID4gKwkubGxzZWVrCQk9IG5vb3Bf bGxzZWVrLAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIHhsbnhf ZHJtX2RyaXZlciA9IHsKPiA+ICsJLmRyaXZlcl9mZWF0dXJlcwkJPSBEUklWRVJfTU9ERVNFVCB8 IERSSVZFUl9HRU0KPiB8Cj4gPiArCQkJCQkgIERSSVZFUl9BVE9NSUMgfCBEUklWRVJfUFJJTUUs Cj4gPiArCS5sYXN0Y2xvc2UJCQk9IHhsbnhfbGFzdGNsb3NlLAo+ID4gKwo+ID4gKwkucHJpbWVf aGFuZGxlX3RvX2ZkCQk9IGRybV9nZW1fcHJpbWVfaGFuZGxlX3RvX2ZkLAo+ID4gKwkucHJpbWVf ZmRfdG9faGFuZGxlCQk9IGRybV9nZW1fcHJpbWVfZmRfdG9faGFuZGxlLAo+ID4gKwkuZ2VtX3By aW1lX2V4cG9ydAkJPSBkcm1fZ2VtX3ByaW1lX2V4cG9ydCwKPiA+ICsJLmdlbV9wcmltZV9pbXBv cnQJCT0gZHJtX2dlbV9wcmltZV9pbXBvcnQsCj4gPiArCS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxl CQk9Cj4gZHJtX2dlbV9jbWFfcHJpbWVfZ2V0X3NnX3RhYmxlLAo+ID4gKwkuZ2VtX3ByaW1lX2lt cG9ydF9zZ190YWJsZQk9Cj4gZHJtX2dlbV9jbWFfcHJpbWVfaW1wb3J0X3NnX3RhYmxlLAo+ID4g KwkuZ2VtX3ByaW1lX3ZtYXAJCQk9Cj4gZHJtX2dlbV9jbWFfcHJpbWVfdm1hcCwKPiA+ICsJLmdl bV9wcmltZV92dW5tYXAJCT0gZHJtX2dlbV9jbWFfcHJpbWVfdnVubWFwLAo+ID4gKwkuZ2VtX3By aW1lX21tYXAJCQk9Cj4gZHJtX2dlbV9jbWFfcHJpbWVfbW1hcCwKPiA+ICsJLmdlbV9mcmVlX29i amVjdAkJPSBkcm1fZ2VtX2NtYV9mcmVlX29iamVjdCwKPiA+ICsJLmdlbV92bV9vcHMJCQk9ICZk cm1fZ2VtX2NtYV92bV9vcHMsCj4gPiArCS5kdW1iX2NyZWF0ZQkJCT0geGxueF9nZW1fY21hX2R1 bWJfY3JlYXRlLAo+ID4gKwkuZHVtYl9kZXN0cm95CQkJPSBkcm1fZ2VtX2R1bWJfZGVzdHJveSwK PiA+ICsKPiA+ICsJLmZvcHMJCQkJPSAmeGxueF9mb3BzLAo+ID4gKwo+ID4gKwkubmFtZQkJCQk9 IERSSVZFUl9OQU1FLAo+ID4gKwkuZGVzYwkJCQk9IERSSVZFUl9ERVNDLAo+ID4gKwkuZGF0ZQkJ CQk9IERSSVZFUl9EQVRFLAo+ID4gKwkubWFqb3IJCQkJPSBEUklWRVJfTUFKT1IsCj4gPiArCS5t aW5vcgkJCQk9IERSSVZFUl9NSU5PUiwKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgeGxu eF9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldikKPiA+ICt7Cj4gPiArCXN0cnVjdCB4bG54X2RybSAq eGxueF9kcm07Cj4gPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm07Cj4gPiArCWNvbnN0IHN0cnVj dCBkcm1fZm9ybWF0X2luZm8gKmluZm87Cj4gPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1h c3RlciA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwo+ID4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldi0+cGFyZW50KTsKPiA+ICsJaW50IHJl dDsKPiA+ICsJdTMyIGZvcm1hdDsKPiA+ICsKPiA+ICsJZHJtID0gZHJtX2Rldl9hbGxvYygmeGxu eF9kcm1fZHJpdmVyLCAmcGRldi0+ZGV2KTsKPiA+ICsJaWYgKElTX0VSUihkcm0pKQo+ID4gKwkJ cmV0dXJuIFBUUl9FUlIoZHJtKTsKPiA+ICsKPiA+ICsJeGxueF9kcm0gPSBkZXZtX2t6YWxsb2Mo ZHJtLT5kZXYsIHNpemVvZigqeGxueF9kcm0pLAo+IEdGUF9LRVJORUwpOwo+ID4gKwlpZiAoIXhs bnhfZHJtKSB7Cj4gPiArCQlyZXQgPSAtRU5PTUVNOwo+ID4gKwkJZ290byBlcnJfZHJtOwo+ID4g Kwl9Cj4gPiArCj4gPiArCWRybV9tb2RlX2NvbmZpZ19pbml0KGRybSk7Cj4gPiArCWRybS0+bW9k ZV9jb25maWcuZnVuY3MgPSAmeGxueF9tb2RlX2NvbmZpZ19mdW5jczsKPiA+ICsKPiA+ICsJcmV0 ID0gZHJtX3ZibGFua19pbml0KGRybSwgMSk7Cj4gPiArCWlmIChyZXQpIHsKPiA+ICsJCWRldl9l cnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBpbml0aWFsaXplIHZibGFua1xuIik7Cj4gPiArCQln b3RvIGVycl94bG54X2RybTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlkcm0tPmlycV9lbmFibGVkID0g MTsKPiA+ICsJZHJtLT5kZXZfcHJpdmF0ZSA9IHhsbnhfZHJtOwo+ID4gKwl4bG54X2RybS0+ZHJt ID0gZHJtOwo+ID4gKwl4bG54X2RybS0+bWFzdGVyID0gbWFzdGVyOwo+ID4gKwlkcm1fa21zX2hl bHBlcl9wb2xsX2luaXQoZHJtKTsKPiA+ICsJcGxhdGZvcm1fc2V0X2RydmRhdGEobWFzdGVyLCB4 bG54X2RybSk7Cj4gPiArCj4gPiArCXhsbnhfZHJtLT5jcnRjID0geGxueF9jcnRjX2hlbHBlcl9p bml0KGRybSk7Cj4gPiArCWlmIChJU19FUlIoeGxueF9kcm0tPmNydGMpKSB7Cj4gPiArCQlyZXQg PSBQVFJfRVJSKHhsbnhfZHJtLT5jcnRjKTsKPiA+ICsJCWdvdG8gZXJyX3hsbnhfZHJtOwo+ID4g Kwl9Cj4gPiArCj4gPiArCXJldCA9IGNvbXBvbmVudF9iaW5kX2FsbCgmbWFzdGVyLT5kZXYsIGRy bSk7Cj4gPiArCWlmIChyZXQpCj4gPiArCQlnb3RvIGVycl9jcnRjOwo+ID4gKwo+ID4gKwl4bG54 X21vZGVfY29uZmlnX2luaXQoZHJtKTsKPiA+ICsJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRybSk7 Cj4gPiArCWRtYV9zZXRfbWFzayhkcm0tPmRldiwKPiB4bG54X2NydGNfaGVscGVyX2dldF9kbWFf bWFzayh4bG54X2RybS0+Y3J0YykpOwo+ID4gKwo+ID4gKwlmb3JtYXQgPSB4bG54X2NydGNfaGVs cGVyX2dldF9mb3JtYXQoeGxueF9kcm0tPmNydGMpOwo+ID4gKwlpbmZvID0gZHJtX2Zvcm1hdF9p bmZvKGZvcm1hdCk7Cj4gPiArCWlmIChpbmZvICYmIGluZm8tPmRlcHRoICYmIGluZm8tPmNwcFsw XSkgewo+ID4gKwkJdW5zaWduZWQgaW50IGFsaWduOwo+ID4gKwo+ID4gKwkJYWxpZ24gPSB4bG54 X2NydGNfaGVscGVyX2dldF9hbGlnbih4bG54X2RybS0+Y3J0Yyk7Cj4gPiArCQl4bG54X2RybS0+ ZmIgPSB4bG54X2ZiX2luaXQoZHJtLCBpbmZvLT5jcHBbMF0gKiA4LCAxLCBhbGlnbiwKPiA+ICsJ CQkJCSAgICB4bG54X2ZiZGV2X3ZyZXMpOwo+ID4gKwkJaWYgKElTX0VSUih4bG54X2RybS0+ZmIp KSB7Cj4gPiArCQkJZGV2X2VycigmcGRldi0+ZGV2LAo+ID4gKwkJCQkiZmFpbGVkIHRvIGluaXRp YWxpemUgZHJtIGZiXG4iKTsKPiA+ICsJCQl4bG54X2RybS0+ZmIgPSBOVUxMOwo+ID4gKwkJfQo+ ID4gKwl9IGVsc2Ugewo+ID4gKwkJLyogZmJkZXYgZW11bGF0aW9uIGlzIG9wdGlvbmFsICovCj4g PiArCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiZmJkZXYgaXMgbm90IGluaXRpYWxpemVkXG4iKTsK PiA+ICsJfQo+ID4gKwo+ID4gKwlyZXQgPSBkcm1fZGV2X3JlZ2lzdGVyKGRybSwgMCk7Cj4gPiAr CWlmIChyZXQgPCAwKQo+ID4gKwkJZ290byBlcnJfZmI7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ ID4gKwo+ID4gK2Vycl9mYjoKPiA+ICsJaWYgKHhsbnhfZHJtLT5mYikKPiA+ICsJCXhsbnhfZmJf ZmluaSh4bG54X2RybS0+ZmIpOwo+ID4gKwljb21wb25lbnRfdW5iaW5kX2FsbChkcm0tPmRldiwg ZHJtKTsKPiA+ICtlcnJfY3J0YzoKPiA+ICsJeGxueF9jcnRjX2hlbHBlcl9maW5pKGRybSwgeGxu eF9kcm0tPmNydGMpOwo+ID4gK2Vycl94bG54X2RybToKPiA+ICsJZHJtX21vZGVfY29uZmlnX2Ns ZWFudXAoZHJtKTsKPiA+ICtlcnJfZHJtOgo+ID4gKwlkcm1fZGV2X3VucmVmKGRybSk7Cj4gPiAr CXJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHhsbnhfdW5iaW5kKHN0 cnVjdCBkZXZpY2UgKmRldikKPiA+ICt7Cj4gPiArCXN0cnVjdCB4bG54X2RybSAqeGxueF9kcm0g PSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiA+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IHhs bnhfZHJtLT5kcm07Cj4gPiArCj4gPiArCWRybV9kZXZfdW5yZWdpc3Rlcihkcm0pOwo+ID4gKwlp ZiAoeGxueF9kcm0tPmZiKQo+ID4gKwkJeGxueF9mYl9maW5pKHhsbnhfZHJtLT5mYik7Cj4gPiAr CWNvbXBvbmVudF91bmJpbmRfYWxsKCZ4bG54X2RybS0+bWFzdGVyLT5kZXYsIGRybSk7Cj4gPiAr CXhsbnhfY3J0Y19oZWxwZXJfZmluaShkcm0sIHhsbnhfZHJtLT5jcnRjKTsKPiA+ICsJZHJtX2tt c19oZWxwZXJfcG9sbF9maW5pKGRybSk7Cj4gPiArCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRy bSk7Cj4gPiArCWRybV9kZXZfdW5yZWYoZHJtKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGNv bnN0IHN0cnVjdCBjb21wb25lbnRfbWFzdGVyX29wcyB4bG54X21hc3Rlcl9vcHMgPSB7Cj4gPiAr CS5iaW5kCT0geGxueF9iaW5kLAo+ID4gKwkudW5iaW5kCT0geGxueF91bmJpbmQsCj4gPiArfTsK PiA+ICsKPiA+ICtzdGF0aWMgaW50IHhsbnhfb2ZfY29tcG9uZW50X3Byb2JlKHN0cnVjdCBkZXZp Y2UgKm1hc3Rlcl9kZXYsCj4gPiArCQkJCSAgIGludCAoKmNvbXBhcmVfb2YpKHN0cnVjdCBkZXZp Y2UgKiwgdm9pZCAqKSwKPiA+ICsJCQkJICAgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9tYXN0ZXJf b3BzCj4gKm1fb3BzKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gbWFzdGVyX2Rl di0+cGFyZW50Owo+ID4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmVwLCAqcG9ydCwgKnJlbW90ZSwg KnBhcmVudDsKPiA+ICsJc3RydWN0IGNvbXBvbmVudF9tYXRjaCAqbWF0Y2ggPSBOVUxMOwo+ID4g KwlpbnQgaTsKPiA+ICsKPiA+ICsJaWYgKCFkZXYtPm9mX25vZGUpCj4gPiArCQlyZXR1cm4gLUVJ TlZBTDsKPiA+ICsKPiA+ICsJY29tcG9uZW50X21hdGNoX2FkZChtYXN0ZXJfZGV2LCAmbWF0Y2gs IGNvbXBhcmVfb2YsIGRldi0KPiA+b2Zfbm9kZSk7Cj4gPiArCj4gPiArCWZvciAoaSA9IDA7IDsg aSsrKSB7Cj4gPiArCQlwb3J0ID0gb2ZfcGFyc2VfcGhhbmRsZShkZXYtPm9mX25vZGUsICJwb3J0 cyIsIGkpOwo+ID4gKwkJaWYgKCFwb3J0KQo+ID4gKwkJCWJyZWFrOwo+ID4gKwo+ID4gKwkJcGFy ZW50ID0gcG9ydC0+cGFyZW50Owo+ID4gKwkJaWYgKCFvZl9ub2RlX2NtcChwYXJlbnQtPm5hbWUs ICJwb3J0cyIpKQo+ID4gKwkJCXBhcmVudCA9IHBhcmVudC0+cGFyZW50Owo+ID4gKwkJcGFyZW50 ID0gb2Zfbm9kZV9nZXQocGFyZW50KTsKPiA+ICsKPiA+ICsJCWlmICghb2ZfZGV2aWNlX2lzX2F2 YWlsYWJsZShwYXJlbnQpKSB7Cj4gPiArCQkJb2Zfbm9kZV9wdXQocGFyZW50KTsKPiA+ICsJCQlv Zl9ub2RlX3B1dChwb3J0KTsKPiA+ICsJCQljb250aW51ZTsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJ CWNvbXBvbmVudF9tYXRjaF9hZGQobWFzdGVyX2RldiwgJm1hdGNoLCBjb21wYXJlX29mLAo+IHBh cmVudCk7Cj4gPiArCQlvZl9ub2RlX3B1dChwYXJlbnQpOwo+ID4gKwkJb2Zfbm9kZV9wdXQocG9y dCk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcGFyZW50ID0gZGV2LT5vZl9ub2RlOwo+ID4gKwlmb3Ig KGkgPSAwOyA7IGkrKykgewo+ID4gKwkJcGFyZW50ID0gb2Zfbm9kZV9nZXQocGFyZW50KTsKPiA+ ICsJCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShwYXJlbnQpKSB7Cj4gPiArCQkJb2Zfbm9k ZV9wdXQocGFyZW50KTsKPiA+ICsJCQljb250aW51ZTsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCWZv cl9lYWNoX2VuZHBvaW50X29mX25vZGUocGFyZW50LCBlcCkgewo+ID4gKwkJCXJlbW90ZSA9IG9m X2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJlbnQoZXApOwo+ID4gKwkJCWlmICghcmVtb3RlIHx8 ICFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKHJlbW90ZSkgfHwKPiA+ICsJCQkgICAgcmVtb3RlID09 IGRldi0+b2Zfbm9kZSkgewo+ID4gKwkJCQlvZl9ub2RlX3B1dChyZW1vdGUpOwo+ID4gKwkJCQlj b250aW51ZTsKPiA+ICsJCQl9IGVsc2UgaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKHJlbW90 ZS0+cGFyZW50KSkgewo+ID4gKwkJCQlkZXZfd2FybihkZXYsICJwYXJlbnQgZGV2IG9mICVzCj4g dW5hdmFpbGFibGVcbiIsCj4gPiArCQkJCQkgcmVtb3RlLT5mdWxsX25hbWUpOwo+ID4gKwkJCQlv Zl9ub2RlX3B1dChyZW1vdGUpOwo+ID4gKwkJCQljb250aW51ZTsKPiA+ICsJCQl9Cj4gPiArCQkJ Y29tcG9uZW50X21hdGNoX2FkZChtYXN0ZXJfZGV2LCAmbWF0Y2gsCj4gY29tcGFyZV9vZiwKPiA+ ICsJCQkJCSAgICByZW1vdGUpOwo+ID4gKwkJCW9mX25vZGVfcHV0KHJlbW90ZSk7Cj4gPiArCQl9 Cj4gPiArCQlvZl9ub2RlX3B1dChwYXJlbnQpOwo+ID4gKwo+ID4gKwkJcG9ydCA9IG9mX3BhcnNl X3BoYW5kbGUoZGV2LT5vZl9ub2RlLCAicG9ydHMiLCBpKTsKPiA+ICsJCWlmICghcG9ydCkKPiA+ ICsJCQlicmVhazsKPiA+ICsKPiA+ICsJCXBhcmVudCA9IHBvcnQtPnBhcmVudDsKPiA+ICsJCWlm ICghb2Zfbm9kZV9jbXAocGFyZW50LT5uYW1lLCAicG9ydHMiKSkKPiA+ICsJCQlwYXJlbnQgPSBw YXJlbnQtPnBhcmVudDsKPiA+ICsJCW9mX25vZGVfcHV0KHBvcnQpOwo+ID4gKwl9Cj4gPiArCj4g PiArCXJldHVybiBjb21wb25lbnRfbWFzdGVyX2FkZF93aXRoX21hdGNoKG1hc3Rlcl9kZXYsIG1f b3BzLAo+IG1hdGNoKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCB4bG54X2NvbXBhcmVf b2Yoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQo+ID4gK3sKPiA+ICsJcmV0dXJuIGRl di0+b2Zfbm9kZSA9PSBkYXRhOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHhsbnhfcGxh dGZvcm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiA+ICt7Cj4gPiArCXJl dHVybiB4bG54X29mX2NvbXBvbmVudF9wcm9iZSgmcGRldi0+ZGV2LCB4bG54X2NvbXBhcmVfb2Ys Cj4gPiArCQkJCSAgICAgICAmeGxueF9tYXN0ZXJfb3BzKTsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIGludCB4bG54X3BsYXRmb3JtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQo+ID4gK3sKPiA+ICsJY29tcG9uZW50X21hc3Rlcl9kZWwoJnBkZXYtPmRldiwgJnhsbnhfbWFz dGVyX29wcyk7Cj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCB4 bG54X3BsYXRmb3JtX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPiAr ewo+ID4gKwlzdHJ1Y3QgeGxueF9kcm0gKnhsbnhfZHJtID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEo cGRldik7Cj4gPiArCj4gPiArCWRybV9wdXRfZGV2KHhsbnhfZHJtLT5kcm0pOwo+ID4gK30KPiA+ ICsKPiA+ICtzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHhsbnhfcG1fc3VzcGVuZChzdHJ1Y3Qg ZGV2aWNlICpkZXYpCj4gPiArewo+ID4gKwlzdHJ1Y3QgeGxueF9kcm0gKnhsbnhfZHJtID0gZGV2 X2dldF9kcnZkYXRhKGRldik7Cj4gPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSB4bG54X2Ry bS0+ZHJtOwo+ID4gKwo+ID4gKwlkcm1fa21zX2hlbHBlcl9wb2xsX2Rpc2FibGUoZHJtKTsKPiA+ ICsKPiA+ICsJeGxueF9kcm0tPnN1c3BlbmRfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9zdXNw ZW5kKGRybSk7Cj4gPiArCWlmIChJU19FUlIoeGxueF9kcm0tPnN1c3BlbmRfc3RhdGUpKSB7Cj4g PiArCQlkcm1fa21zX2hlbHBlcl9wb2xsX2VuYWJsZShkcm0pOwo+ID4gKwkJcmV0dXJuIFBUUl9F UlIoeGxueF9kcm0tPnN1c3BlbmRfc3RhdGUpOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiAw Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHhsbnhfcG1fcmVz dW1lKHN0cnVjdCBkZXZpY2UgKmRldikKPiA+ICt7Cj4gPiArCXN0cnVjdCB4bG54X2RybSAqeGxu eF9kcm0gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiA+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRy bSA9IHhsbnhfZHJtLT5kcm07Cj4gPiArCj4gPiArCWRybV9hdG9taWNfaGVscGVyX3Jlc3VtZShk cm0sIHhsbnhfZHJtLT5zdXNwZW5kX3N0YXRlKTsKPiA+ICsJZHJtX2ttc19oZWxwZXJfcG9sbF9l bmFibGUoZHJtKTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB4bG54X3BtX29wcyA9IHsKPiA+ICsJU0VUX1NZU1RF TV9TTEVFUF9QTV9PUFMoeGxueF9wbV9zdXNwZW5kLCB4bG54X3BtX3Jlc3VtZSkKPiA+ICt9Owo+ ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHhsbnhfZHJpdmVyID0gewo+ ID4gKwkucHJvYmUJCQk9IHhsbnhfcGxhdGZvcm1fcHJvYmUsCj4gPiArCS5yZW1vdmUJCQk9IHhs bnhfcGxhdGZvcm1fcmVtb3ZlLAo+ID4gKwkuc2h1dGRvd24JCT0geGxueF9wbGF0Zm9ybV9zaHV0 ZG93biwKPiA+ICsJLmRyaXZlcgkJCT0gewo+ID4gKwkJLm5hbWUJCT0gInhsbngtZHJtIiwKPiA+ ICsJCS5wbQkJPSAmeGxueF9wbV9vcHMsCj4gPiArCX0sCj4gPiArfTsKPiA+ICsKPiA+ICsvKiBi aXRtYXAgZm9yIG1hc3RlciBpZCAqLwo+ID4gK3N0YXRpYyB1MzIgeGxueF9tYXN0ZXJfaWRzID0g R0VOTUFTSygzMSwgMCk7Cj4gPiArCj4gPiArLyoqCj4gPiArICogeGlsaW54X2RybV9waXBlbGlu ZV9pbml0IC0gSW5pdGlhbGl6ZSB0aGUgZHJtIHBpcGVsaW5lIGZvciB0aGUgZGV2aWNlCj4gPiAr ICogQHBkZXY6IFRoZSBwbGF0Zm9ybSBkZXZpY2UgdG8gaW5pdGlhbGl6ZSB0aGUgZHJtIHBpcGVs aW5lIGRldmljZQo+ID4gKyAqCj4gPiArICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUg ZHJtIHBpcGVsaW5lIGRldmljZSwgc3RydWN0IGRybV9kZXZpY2UsCj4gPiArICogb24gQHBkZXYg YnkgY3JlYXRpbmcgYSBsb2dpY2FsIG1hc3RlciBwbGF0Zm9ybSBkZXZpY2UuIFRoZSBsb2dpY2Fs Cj4gcGxhdGZvcm0KPiA+ICsgKiBkZXZpY2UgYWN0cyBhcyBhIG1hc3RlciBkZXZpY2UgdG8gYmlu ZCBzbGF2ZSBkZXZpY2VzIGFuZCByZXByZXNlbnRzCj4gPiArICogdGhlIGVudGlyZSBwaXBlbGlu ZS4KPiA+ICsgKiBUaGUgbG9naWNhbCBtYXN0ZXIgdXNlcyB0aGUgcG9ydCBiaW5kaW5ncyBvZiB0 aGUgY2FsbGluZyBkZXZpY2UgdG8KPiA+ICsgKiBmaWd1cmUgb3V0IHRoZSBwaXBlbGluZSB0b3Bv bG9neS4KPiA+ICsgKgo+ID4gKyAqIFJldHVybjogdGhlIGxvZ2ljYWwgbWFzdGVyIHBsYXRmb3Jt IGRldmljZSBpZiB0aGUgZHJtIGRldmljZSBpcwo+IGluaXRpYWxpemVkCj4gPiArICogb24gQHBk ZXYuIEVycm9yIGNvZGUgb3RoZXJ3aXNlLgo+ID4gKyAqLwo+ID4gK3N0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnhsbnhfZHJtX3BpcGVsaW5lX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZQo+ICpw ZGV2KQo+ID4gK3sKPiA+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbWFzdGVyOwo+ID4gKwlp bnQgaWQsIHJldDsKPiA+ICsKPiA+ICsJaWQgPSBmZnMoeGxueF9tYXN0ZXJfaWRzKTsKPiA+ICsJ aWYgKCFpZCkKPiA+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9TUEMpOwo+ID4gKwo+ID4gKwltYXN0 ZXIgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInhsbngtZHJtIiwgaWQgLSAxKTsKPiA+ICsJaWYg KCFtYXN0ZXIpCj4gPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiA+ICsKPiA+ICsJbWFz dGVyLT5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKPiA+ICsJcmV0ID0gcGxhdGZvcm1fZGV2aWNl X2FkZChtYXN0ZXIpOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJZ290byBlcnJfb3V0Owo+ID4gKwo+ ID4gKwlXQVJOX09OKG1hc3Rlci0+aWQgIT0gaWQgLSAxKTsKPiA+ICsJeGxueF9tYXN0ZXJfaWRz ICY9IH5CSVQobWFzdGVyLT5pZCk7Cj4gPiArCXJldHVybiBtYXN0ZXI7Cj4gPiArCj4gPiArZXJy X291dDoKPiA+ICsJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIobWFzdGVyKTsKPiA+ICsJcmV0 dXJuIEVSUl9QVFIocmV0KTsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTF9HUEwoeGxueF9kcm1f cGlwZWxpbmVfaW5pdCk7Cj4gPiArCj4gPiArLyoqCj4gPiArICogeGlsaW54X2RybV9waXBlbGlu ZV9leGl0IC0gUmVsZWFzZSB0aGUgZHJtIHBpcGVsaW5lIGZvciB0aGUgZGV2aWNlCj4gPiArICog QG1hc3RlcjogVGhlIG1hc3RlciBwaXBlbGluZSBkZXZpY2UgdG8gcmVsZWFzZQo+ID4gKyAqCj4g PiArICogUmVsZWFzZSB0aGUgbG9naWNhbCBwaXBlbGluZSBkZXZpY2UgcmV0dXJuZWQgYnkKPiB4 bG54X2RybV9waXBlbGluZV9pbml0KCkuCj4gPiArICovCj4gPiArdm9pZCB4bG54X2RybV9waXBl bGluZV9leGl0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1hc3RlcikKPiA+ICt7Cj4gPiArCXhs bnhfbWFzdGVyX2lkcyB8PSBCSVQobWFzdGVyLT5pZCk7Cj4gPiArCXBsYXRmb3JtX2RldmljZV91 bnJlZ2lzdGVyKG1hc3Rlcik7Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0xfR1BMKHhsbnhfZHJt X3BpcGVsaW5lX2V4aXQpOwo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgX19pbml0IHhsbnhfZHJtX2Ry dl9pbml0KHZvaWQpCj4gPiArewo+ID4gKwlwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnhsbnhf ZHJpdmVyKTsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIF9f ZXhpdCB4bG54X2RybV9kcnZfZXhpdCh2b2lkKQo+ID4gK3sKPiA+ICsJcGxhdGZvcm1fZHJpdmVy X3VucmVnaXN0ZXIoJnhsbnhfZHJpdmVyKTsKPiA+ICt9Cj4gPiArCj4gPiArbW9kdWxlX2luaXQo eGxueF9kcm1fZHJ2X2luaXQpOwo+ID4gK21vZHVsZV9leGl0KHhsbnhfZHJtX2Rydl9leGl0KTsK PiA+ICsKPiA+ICtNT0RVTEVfQVVUSE9SKCJYaWxpbngsIEluYy4iKTsKPiA+ICtNT0RVTEVfREVT Q1JJUFRJT04oIlhpbGlueCBEUk0gS01TIERyaXZlciIpOwo+ID4gK01PRFVMRV9MSUNFTlNFKCJH UEwgdjIiKTsKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2Rydi5o Cj4gYi9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2Rydi5oCj4gPiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+ID4gaW5kZXggMDAwMDAwMC4uMGY2NTk1Zgo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysr IGIvZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9kcnYuaAo+ID4gQEAgLTAsMCArMSwzMyBAQAo+ ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gPiArLyoKPiA+ICsgKiBY aWxpbnggRFJNIEtNUyBIZWFkZXIgZm9yIFhpbGlueAo+ID4gKyAqCj4gPiArICogIENvcHlyaWdo dCAoQykgMjAxMyAtIDIwMTggWGlsaW54LCBJbmMuCj4gPiArICoKPiA+ICsgKiAgQXV0aG9yOiBI eXVuIFdvbyBLd29uIDxoeXVua0B4aWxpbnguY29tPgo+ID4gKyAqCj4gPiArICogVGhpcyBzb2Z0 d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp Ywo+ID4gKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgYW5kCj4gPiArICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQs IGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ ID4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCj4gPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ID4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCj4gPiArICovCj4gPiArCj4gPiArI2lmbmRlZiBfWExOWF9E UlZfSF8KPiA+ICsjZGVmaW5lIF9YTE5YX0RSVl9IXwo+ID4gKwo+ID4gK3N0cnVjdCBkcm1fZGV2 aWNlOwo+ID4gK3N0cnVjdCB4bG54X2NydGNfaGVscGVyOwo+ID4gKwo+ID4gK3N0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnhsbnhfZHJtX3BpcGVsaW5lX2luaXQoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZQo+ICpwYXJlbnQpOwo+ID4gK3ZvaWQgeGxueF9kcm1fcGlwZWxpbmVfZXhpdChzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwaXBlbGluZSk7Cj4gPiArCj4gPiArdWludDMyX3QgeGxueF9nZXRfZm9y bWF0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pOwo+ID4gK3Vuc2lnbmVkIGludCB4bG54X2dldF9h bGlnbihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKTsKPiA+ICtzdHJ1Y3QgeGxueF9jcnRjX2hlbHBl ciAqeGxueF9nZXRfY3J0Y19oZWxwZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSk7Cj4gPiArc3Ry dWN0IHhsbnhfYnJpZGdlX2hlbHBlciAqeGxueF9nZXRfYnJpZGdlX2hlbHBlcihzdHJ1Y3QgZHJt X2RldmljZQo+ICpkcm0pOwo+ID4gKwo+ID4gKyNlbmRpZiAvKiBfWExOWF9EUlZfSF8gKi8KPiA+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2ZiLmMKPiBiL2RyaXZlcnMv Z3B1L2RybS94bG54L3hsbnhfZmIuYwo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4 IDAwMDAwMDAuLmU3MjA4N2QKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS94bG54L3hsbnhfZmIuYwo+ID4gQEAgLTAsMCArMSwyOTggQEAKPiA+ICsvLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ID4gKy8qCj4gPiArICogWGlsaW54IERSTSBLTVMg RnJhbWVidWZmZXIgaGVscGVyCj4gPiArICoKPiA+ICsgKiAgQ29weXJpZ2h0IChDKSAyMDE1IC0g MjAxOCBYaWxpbngsIEluYy4KPiA+ICsgKgo+ID4gKyAqICBBdXRob3I6IEh5dW4gV29vIEt3b24g PGh5dW4ua3dvbkB4aWxpbnguY29tPgo+ID4gKyAqCj4gPiArICogQmFzZWQgb24gZHJtX2ZiX2Nt YV9oZWxwZXIuYwo+ID4gKyAqCj4gPiArICogIENvcHlyaWdodCAoQykgMjAxMiBBbmFsb2cgRGV2 aWNlIEluYy4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKPiA+ICsgKiBMaWNlbnNlIHZlcnNp b24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAo+ ID4gKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhv c2UgdGVybXMuCj4gPiArICoKPiA+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiA+ICsgKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ID4gKyAqIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKPiA+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ ID4gKyAqLwo+ID4gKwo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ID4gKyNpbmNsdWRlIDxk cm0vZHJtX2NydGMuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+ID4g KyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2dl bV9jbWFfaGVscGVyLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2ZyYW1lYnVmZmVyX2hl bHBlci5oPgo+ID4gKwo+ID4gKyNpbmNsdWRlICJ4bG54X2Rydi5oIgo+ID4gKyNpbmNsdWRlICJ4 bG54X2ZiLmgiCj4gPiArCj4gPiArI2RlZmluZSBYTE5YX01BWF9QTEFORVMJNAo+ID4gKwo+ID4g K3N0cnVjdCB4bG54X2ZiZGV2IHsKPiA+ICsJc3RydWN0IGRybV9mYl9oZWxwZXIgZmJfaGVscGVy Owo+ID4gKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKPiA+ICsJdW5zaWduZWQgaW50IGFs aWduOwo+ID4gKwl1bnNpZ25lZCBpbnQgdnJlc19tdWx0Owo+ID4gK307Cj4gPiArCj4gPiArc3Rh dGljIGlubGluZSBzdHJ1Y3QgeGxueF9mYmRldiAqdG9fZmJkZXYoc3RydWN0IGRybV9mYl9oZWxw ZXIKPiAqZmJfaGVscGVyKQo+ID4gK3sKPiA+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihmYl9oZWxw ZXIsIHN0cnVjdCB4bG54X2ZiZGV2LCBmYl9oZWxwZXIpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyB4bG54X2ZiX2Z1bmNzID0gewo+ID4gKwku ZGVzdHJveQk9IGRybV9nZW1fZmJfZGVzdHJveSwKPiA+ICsJLmNyZWF0ZV9oYW5kbGUJPSBkcm1f Z2VtX2ZiX2NyZWF0ZV9oYW5kbGUsCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50Cj4gPiAr eGxueF9mYl9pb2N0bChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdW5zaWduZWQgaW50IGNtZCwgdW5z aWduZWQgbG9uZyBhcmcpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVs cGVyID0gaW5mby0+cGFyOwo+ID4gKwl1bnNpZ25lZCBpbnQgaTsKPiA+ICsJaW50IHJldCA9IDA7 Cj4gPiArCj4gPiArCXN3aXRjaCAoY21kKSB7Cj4gPiArCWNhc2UgRkJJT19XQUlURk9SVlNZTkM6 Cj4gPiArCQlmb3IgKGkgPSAwOyBpIDwgZmJfaGVscGVyLT5jcnRjX2NvdW50OyBpKyspIHsKPiA+ ICsJCQlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2RlX3NldDsKPiA+ICsJCQlzdHJ1Y3QgZHJtX2Ny dGMgKmNydGM7Cj4gPiArCj4gPiArCQkJbW9kZV9zZXQgPSAmZmJfaGVscGVyLT5jcnRjX2luZm9b aV0ubW9kZV9zZXQ7Cj4gPiArCQkJY3J0YyA9IG1vZGVfc2V0LT5jcnRjOwo+ID4gKwkJCXJldCA9 IGRybV9jcnRjX3ZibGFua19nZXQoY3J0Yyk7Cj4gPiArCQkJaWYgKCFyZXQpIHsKPiA+ICsJCQkJ ZHJtX2NydGNfd2FpdF9vbmVfdmJsYW5rKGNydGMpOwo+ID4gKwkJCQlkcm1fY3J0Y192Ymxhbmtf cHV0KGNydGMpOwo+ID4gKwkJCX0KPiA+ICsJCX0KPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCWRl ZmF1bHQ6Cj4gPiArCQlyZXR1cm4gLUVOT1RUWTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4g MDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHN0cnVjdCBmYl9vcHMgeGxueF9mYmRldl9vcHMg PSB7Cj4gPiArCS5vd25lcgkJPSBUSElTX01PRFVMRSwKPiA+ICsJLmZiX2ZpbGxyZWN0CT0gc3lz X2ZpbGxyZWN0LAo+ID4gKwkuZmJfY29weWFyZWEJPSBzeXNfY29weWFyZWEsCj4gPiArCS5mYl9p bWFnZWJsaXQJPSBzeXNfaW1hZ2VibGl0LAo+ID4gKwkuZmJfY2hlY2tfdmFyCT0gZHJtX2ZiX2hl bHBlcl9jaGVja192YXIsCj4gPiArCS5mYl9zZXRfcGFyCT0gZHJtX2ZiX2hlbHBlcl9zZXRfcGFy LAo+ID4gKwkuZmJfYmxhbmsJPSBkcm1fZmJfaGVscGVyX2JsYW5rLAo+ID4gKwkuZmJfcGFuX2Rp c3BsYXkJPSBkcm1fZmJfaGVscGVyX3Bhbl9kaXNwbGF5LAo+ID4gKwkuZmJfc2V0Y21hcAk9IGRy bV9mYl9oZWxwZXJfc2V0Y21hcCwKPiA+ICsJLmZiX2lvY3RsCT0geGxueF9mYl9pb2N0bCwKPiA+ ICt9Owo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIHhsbnhfZmJkZXZfY3JlYXRlIC0gQ3JlYXRlIHRo ZSBmYmRldiB3aXRoIGEgZnJhbWVidWZmZXIKPiA+ICsgKiBAZmJfaGVscGVyOiBmYiBoZWxwZXIg c3RydWN0dXJlCj4gPiArICogQHNpemU6IGZyYW1lYnVmZmVyIHNpemUgaW5mbwo+ID4gKyAqCj4g PiArICogVGhpcyBmdW5jdGlvbiBpcyBiYXNlZCBvbiBkcm1fZmJkZXZfY21hX2NyZWF0ZSgpLgo+ ID4gKyAqCj4gPiArICogUmV0dXJuOiAwIGlmIHN1Y2Nlc3NmdWwsIG9yIHRoZSBlcnJvciBjb2Rl Lgo+ID4gKyAqLwo+ID4gK3N0YXRpYyBpbnQgeGxueF9mYmRldl9jcmVhdGUoc3RydWN0IGRybV9m Yl9oZWxwZXIgKmZiX2hlbHBlciwKPiA+ICsJCQkgICAgIHN0cnVjdCBkcm1fZmJfaGVscGVyX3N1 cmZhY2Vfc2l6ZSAqc2l6ZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCB4bG54X2ZiZGV2ICpmYmRldiA9 IHRvX2ZiZGV2KGZiX2hlbHBlcik7Cj4gPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBmYl9o ZWxwZXItPmRldjsKPiA+ICsJc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqb2JqOwo+ID4gKwlz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKPiA+ICsJdW5zaWduZWQgaW50IGJ5dGVzX3Blcl9w aXhlbDsKPiA+ICsJdW5zaWduZWQgbG9uZyBvZmZzZXQ7Cj4gPiArCXN0cnVjdCBmYl9pbmZvICpm Ymk7Cj4gPiArCXNpemVfdCBieXRlczsKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJZGV2X2Ri Zyhkcm0tPmRldiwgInN1cmZhY2Ugd2lkdGgoJWQpLCBoZWlnaHQoJWQpIGFuZCBicHAoJWQpXG4i LAo+ID4gKwkJc2l6ZS0+c3VyZmFjZV93aWR0aCwgc2l6ZS0+c3VyZmFjZV9oZWlnaHQsIHNpemUt Cj4gPnN1cmZhY2VfYnBwKTsKPiA+ICsKPiA+ICsJc2l6ZS0+c3VyZmFjZV9oZWlnaHQgKj0gZmJk ZXYtPnZyZXNfbXVsdDsKPiA+ICsJYnl0ZXNfcGVyX3BpeGVsID0gRElWX1JPVU5EX1VQKHNpemUt PnN1cmZhY2VfYnBwLCA4KTsKPiA+ICsJYnl0ZXMgPSBBTElHTihzaXplLT5zdXJmYWNlX3dpZHRo ICogYnl0ZXNfcGVyX3BpeGVsLCBmYmRldi0+YWxpZ24pOwo+ID4gKwlieXRlcyAqPSBzaXplLT5z dXJmYWNlX2hlaWdodDsKPiA+ICsKPiA+ICsJb2JqID0gZHJtX2dlbV9jbWFfY3JlYXRlKGRybSwg Ynl0ZXMpOwo+ID4gKwlpZiAoSVNfRVJSKG9iaikpCj4gPiArCQlyZXR1cm4gUFRSX0VSUihvYmop Owo+ID4gKwo+ID4gKwlmYmkgPSBmcmFtZWJ1ZmZlcl9hbGxvYygwLCBkcm0tPmRldik7Cj4gPiAr CWlmICghZmJpKSB7Cj4gPiArCQlkZXZfZXJyKGRybS0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRl IGZyYW1lYnVmZmVyIGluZm8uXG4iKTsKPiA+ICsJCXJldCA9IC1FTk9NRU07Cj4gPiArCQlnb3Rv IGVycl9kcm1fZ2VtX2NtYV9mcmVlX29iamVjdDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlmYmRldi0+ ZmIgPSBkcm1fZ2VtX2ZiZGV2X2ZiX2NyZWF0ZShkcm0sIHNpemUsIGZiZGV2LT5hbGlnbiwKPiAm b2JqLT5iYXNlLAo+ID4gKwkJCQkJICAgICZ4bG54X2ZiX2Z1bmNzKTsKPiA+ICsJaWYgKElTX0VS UihmYmRldi0+ZmIpKSB7Cj4gPiArCQlkZXZfZXJyKGRybS0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9j YXRlIERSTSBmcmFtZWJ1ZmZlci5cbiIpOwo+ID4gKwkJcmV0ID0gUFRSX0VSUihmYmRldi0+ZmIp Owo+ID4gKwkJZ290byBlcnJfZnJhbWVidWZmZXJfcmVsZWFzZTsKPiA+ICsJfQo+ID4gKwo+ID4g KwlmYiA9IGZiZGV2LT5mYjsKPiA+ICsJZmJfaGVscGVyLT5mYiA9IGZiOwo+ID4gKwlmYl9oZWxw ZXItPmZiZGV2ID0gZmJpOwo+ID4gKwlmYmktPnBhciA9IGZiX2hlbHBlcjsKPiA+ICsJZmJpLT5m bGFncyA9IEZCSU5GT19GTEFHX0RFRkFVTFQ7Cj4gPiArCWZiaS0+ZmJvcHMgPSAmeGxueF9mYmRl dl9vcHM7Cj4gPiArCj4gPiArCXJldCA9IGZiX2FsbG9jX2NtYXAoJmZiaS0+Y21hcCwgMjU2LCAw KTsKPiA+ICsJaWYgKHJldCkgewo+ID4gKwkJZGV2X2Vycihkcm0tPmRldiwgIkZhaWxlZCB0byBh bGxvY2F0ZSBjb2xvciBtYXAuXG4iKTsKPiA+ICsJCWdvdG8gZXJyX2ZiX2Rlc3Ryb3k7Cj4gPiAr CX0KPiA+ICsKPiA+ICsJZHJtX2ZiX2hlbHBlcl9maWxsX2ZpeChmYmksIGZiLT5waXRjaGVzWzBd LCBmYi0+Zm9ybWF0LT5kZXB0aCk7Cj4gPiArCWRybV9mYl9oZWxwZXJfZmlsbF92YXIoZmJpLCBm Yl9oZWxwZXIsIGZiLT53aWR0aCwgZmItPmhlaWdodCk7Cj4gPiArCWZiaS0+dmFyLnlyZXMgPSBm Yi0+aGVpZ2h0IC8gZmJkZXYtPnZyZXNfbXVsdDsKPiA+ICsKPiA+ICsJb2Zmc2V0ID0gZmJpLT52 YXIueG9mZnNldCAqIGJ5dGVzX3Blcl9waXhlbDsKPiA+ICsJb2Zmc2V0ICs9IGZiaS0+dmFyLnlv ZmZzZXQgKiBmYi0+cGl0Y2hlc1swXTsKPiA+ICsKPiA+ICsJZHJtLT5tb2RlX2NvbmZpZy5mYl9i YXNlID0gKHJlc291cmNlX3NpemVfdClvYmotPnBhZGRyOwo+ID4gKwlmYmktPnNjcmVlbl9iYXNl ID0gKGNoYXIgX19pb21lbSAqKShvYmotPnZhZGRyICsgb2Zmc2V0KTsKPiA+ICsJZmJpLT5maXgu c21lbV9zdGFydCA9ICh1bnNpZ25lZCBsb25nKShvYmotPnBhZGRyICsgb2Zmc2V0KTsKPiA+ICsJ ZmJpLT5zY3JlZW5fc2l6ZSA9IGJ5dGVzOwo+ID4gKwlmYmktPmZpeC5zbWVtX2xlbiA9IGJ5dGVz Owo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICsKPiA+ICtlcnJfZmJfZGVzdHJveToKPiA+ICsJ ZHJtX2ZyYW1lYnVmZmVyX3VucmVnaXN0ZXJfcHJpdmF0ZShmYik7Cj4gPiArCWRybV9nZW1fZmJf ZGVzdHJveShmYik7Cj4gPiArZXJyX2ZyYW1lYnVmZmVyX3JlbGVhc2U6Cj4gPiArCWZyYW1lYnVm ZmVyX3JlbGVhc2UoZmJpKTsKPiA+ICtlcnJfZHJtX2dlbV9jbWFfZnJlZV9vYmplY3Q6Cj4gPiAr CWRybV9nZW1fY21hX2ZyZWVfb2JqZWN0KCZvYmotPmJhc2UpOwo+ID4gKwlyZXR1cm4gcmV0Owo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IGRybV9mYl9oZWxwZXJfZnVuY3MgeGxueF9m Yl9oZWxwZXJfZnVuY3MgPSB7Cj4gPiArCS5mYl9wcm9iZSA9IHhsbnhfZmJkZXZfY3JlYXRlLAo+ ID4gK307Cj4gPiArCj4gPiArLyoqCj4gPiArICogeGxueF9mYl9pbml0IC0gQWxsb2NhdGUgYW5k IGluaXRpYWxpemVzIHRoZSBYaWxpbnggZnJhbWVidWZmZXIKPiA+ICsgKiBAZHJtOiBEUk0gZGV2 aWNlCj4gPiArICogQHByZWZlcnJlZF9icHA6IHByZWZlcnJlZCBiaXRzIHBlciBwaXhlbCBmb3Ig dGhlIGRldmljZQo+ID4gKyAqIEBtYXhfY29ubl9jb3VudDogbWF4aW11bSBudW1iZXIgb2YgY29u bmVjdG9ycwo+ID4gKyAqIEBhbGlnbjogYWxpZ25tZW50IHZhbHVlIGZvciBwaXRjaAo+ID4gKyAq IEB2cmVzX211bHQ6IG11bHRpcGxpZXIgZm9yIHZpcnR1YWwgcmVzb2x1dGlvbgo+ID4gKyAqCj4g PiArICogVGhpcyBmdW5jdGlvbiBpcyBiYXNlZCBvbiBkcm1fZmJkZXZfY21hX2luaXQoKS4KPiA+ ICsgKgo+ID4gKyAqIFJldHVybjogYSBuZXdseSBhbGxvY2F0ZWQgZHJtX2ZiX2hlbHBlciBzdHJ1 Y3Qgb3IgYSBFUlJfUFRSLgo+ID4gKyAqLwo+ID4gK3N0cnVjdCBkcm1fZmJfaGVscGVyICoKPiA+ ICt4bG54X2ZiX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgaW50IHByZWZlcnJlZF9icHAs Cj4gPiArCSAgICAgdW5zaWduZWQgaW50IG1heF9jb25uX2NvdW50LCB1bnNpZ25lZCBpbnQgYWxp Z24sCj4gPiArCSAgICAgdW5zaWduZWQgaW50IHZyZXNfbXVsdCkKPiA+ICt7Cj4gPiArCXN0cnVj dCB4bG54X2ZiZGV2ICpmYmRldjsKPiA+ICsJc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBl cjsKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJZmJkZXYgPSBremFsbG9jKHNpemVvZigqZmJk ZXYpLCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYgKCFmYmRldikKPiA+ICsJCXJldHVybiBFUlJfUFRS KC1FTk9NRU0pOwo+ID4gKwo+ID4gKwlmYmRldi0+dnJlc19tdWx0ID0gdnJlc19tdWx0Owo+ID4g KwlmYmRldi0+YWxpZ24gPSBhbGlnbjsKPiA+ICsJZmJfaGVscGVyID0gJmZiZGV2LT5mYl9oZWxw ZXI7Cj4gPiArCWRybV9mYl9oZWxwZXJfcHJlcGFyZShkcm0sIGZiX2hlbHBlciwgJnhsbnhfZmJf aGVscGVyX2Z1bmNzKTsKPiA+ICsKPiA+ICsJcmV0ID0gZHJtX2ZiX2hlbHBlcl9pbml0KGRybSwg ZmJfaGVscGVyLCBtYXhfY29ubl9jb3VudCk7Cj4gPiArCWlmIChyZXQgPCAwKSB7Cj4gPiArCQlk ZXZfZXJyKGRybS0+ZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgZHJtIGZiIGhlbHBlci5cbiIp Owo+ID4gKwkJZ290byBlcnJfZnJlZTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXQgPSBkcm1fZmJf aGVscGVyX3NpbmdsZV9hZGRfYWxsX2Nvbm5lY3RvcnMoZmJfaGVscGVyKTsKPiA+ICsJaWYgKHJl dCA8IDApIHsKPiA+ICsJCWRldl9lcnIoZHJtLT5kZXYsICJGYWlsZWQgdG8gYWRkIGNvbm5lY3Rv cnMuXG4iKTsKPiA+ICsJCWdvdG8gZXJyX2RybV9mYl9oZWxwZXJfZmluaTsKPiA+ICsJfQo+ID4g Kwo+ID4gKwlyZXQgPSBkcm1fZmJfaGVscGVyX2luaXRpYWxfY29uZmlnKGZiX2hlbHBlciwgcHJl ZmVycmVkX2JwcCk7Cj4gPiArCWlmIChyZXQgPCAwKSB7Cj4gPiArCQlkZXZfZXJyKGRybS0+ZGV2 LCAiRmFpbGVkIHRvIHNldCBpbml0aWFsIGh3Cj4gY29uZmlndXJhdGlvbi5cbiIpOwo+ID4gKwkJ Z290byBlcnJfZHJtX2ZiX2hlbHBlcl9maW5pOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiBm Yl9oZWxwZXI7Cj4gPiArCj4gPiArZXJyX2RybV9mYl9oZWxwZXJfZmluaToKPiA+ICsJZHJtX2Zi X2hlbHBlcl9maW5pKGZiX2hlbHBlcik7Cj4gPiArZXJyX2ZyZWU6Cj4gPiArCWtmcmVlKGZiZGV2 KTsKPiA+ICsJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiAr ICogeGxueF9mYmRldl9kZWZpb19maW5pIC0gRnJlZSB0aGUgZGVmaW8gZmIKPiA+ICsgKiBAZmJp OiBmYl9pbmZvIHN0cnVjdAo+ID4gKyAqCj4gPiArICogVGhpcyBmdW5jdGlvbiBpcyBiYXNlZCBv biBkcm1fZmJkZXZfY21hX2RlZmlvX2ZpbmkoKS4KPiA+ICsgKi8KPiA+ICtzdGF0aWMgdm9pZCB4 bG54X2ZiZGV2X2RlZmlvX2Zpbmkoc3RydWN0IGZiX2luZm8gKmZiaSkKPiA+ICt7Cj4gPiArCWlm ICghZmJpLT5mYmRlZmlvKQo+ID4gKwkJcmV0dXJuOwo+ID4gKwo+ID4gKwlmYl9kZWZlcnJlZF9p b19jbGVhbnVwKGZiaSk7Cj4gPiArCWtmcmVlKGZiaS0+ZmJkZWZpbyk7Cj4gPiArCWtmcmVlKGZi aS0+ZmJvcHMpOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiB4bG54X2ZiZGV2X2Zpbmkg LSBGcmVlIHRoZSBYaWxpbnggZnJhbWVidWZmZXIKPiA+ICsgKiBAZmJfaGVscGVyOiBkcm1fZmJf aGVscGVyIHN0cnVjdAo+ID4gKyAqCj4gPiArICogVGhpcyBmdW5jdGlvbiBpcyBiYXNlZCBvbiBk cm1fZmJkZXZfY21hX2ZpbmkoKS4KPiA+ICsgKi8KPiA+ICt2b2lkIHhsbnhfZmJfZmluaShzdHJ1 Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKQo+ID4gK3sKPiA+ICsJc3RydWN0IHhsbnhfZmJk ZXYgKmZiZGV2ID0gdG9fZmJkZXYoZmJfaGVscGVyKTsKPiA+ICsKPiA+ICsJZHJtX2ZiX2hlbHBl cl91bnJlZ2lzdGVyX2ZiaSgmZmJkZXYtPmZiX2hlbHBlcik7Cj4gPiArCWlmIChmYmRldi0+ZmJf aGVscGVyLmZiZGV2KQo+ID4gKwkJeGxueF9mYmRldl9kZWZpb19maW5pKGZiZGV2LT5mYl9oZWxw ZXIuZmJkZXYpOwo+ID4gKwo+ID4gKwlpZiAoZmJkZXYtPmZiX2hlbHBlci5mYikKPiA+ICsJCWRy bV9mcmFtZWJ1ZmZlcl9yZW1vdmUoZmJkZXYtPmZiX2hlbHBlci5mYik7Cj4gPiArCj4gPiArCWRy bV9mYl9oZWxwZXJfZmluaSgmZmJkZXYtPmZiX2hlbHBlcik7Cj4gPiArCWtmcmVlKGZiZGV2KTsK PiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogeGxueF9mYl9jcmVhdGUgLSAoc3RydWN0IGRy bV9tb2RlX2NvbmZpZ19mdW5jcyAqKS0+ZmJfY3JlYXRlCj4gY2FsbGJhY2sKPiA+ICsgKiBAZHJt OiBEUk0gZGV2aWNlCj4gPiArICogQGZpbGVfcHJpdjogZHJtIGZpbGUgcHJpdmF0ZSBkYXRhCj4g PiArICogQG1vZGVfY21kOiBtb2RlIGNvbW1hbmQgZm9yIGZiIGNyZWF0aW9uCj4gPiArICoKPiA+ ICsgKiBUaGlzIGZ1bmN0aW9ucyBjcmVhdGVzIGEgZHJtX2ZyYW1lYnVmZmVyIHdpdGggeGxueF9m Yl9mdW5jcyBmb3IgZ2l2ZW4KPiBtb2RlCj4gPiArICogQG1vZGVfY21kLiBUaGlzIGZ1bmN0aW9u cyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGZvciB0aGUgZmJfY3JlYXRlCj4gY2FsbGJhY2sKPiA+ ICsgKiBmdW5jdGlvbiBvZiBkcm1fbW9kZV9jb25maWdfZnVuY3MuCj4gPiArICoKPiA+ICsgKiBS ZXR1cm46IGEgZHJtX2ZyYW1lYnVmZmVyIG9iamVjdCBpZiBzdWNjZXNzZnVsLCBvcgo+ID4gKyAq IEVSUl9QVFIgZnJvbSBkcm1fZ2VtX2ZiX2NyZWF0ZV93aXRoX2Z1bmNzKCkuCj4gPiArICovCj4g PiArc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqCj4gPiAreGxueF9mYl9jcmVhdGUoc3RydWN0IGRy bV9kZXZpY2UgKmRybSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCj4gPiArCSAgICAgICBj b25zdCBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kMiAqbW9kZV9jbWQpCj4gPiArewo+ID4gKwlyZXR1 cm4gZHJtX2dlbV9mYl9jcmVhdGVfd2l0aF9mdW5jcyhkcm0sIGZpbGVfcHJpdiwgbW9kZV9jbWQs Cj4gPiArCQkJCQkgICAgJnhsbnhfZmJfZnVuY3MpOwo+ID4gK30KPiA+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0veGxueC94bG54X2ZiLmgKPiBiL2RyaXZlcnMvZ3B1L2RybS94bG54L3hs bnhfZmIuaAo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAuLjZlZmM5 ODUKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhf ZmIuaAo+ID4gQEAgLTAsMCArMSwzMyBAQAo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wCj4gPiArLyoKPiA+ICsgKiBYaWxpbnggRFJNIEtNUyBGcmFtZWJ1ZmZlciBoZWxw ZXIgaGVhZGVyCj4gPiArICoKPiA+ICsgKiAgQ29weXJpZ2h0IChDKSAyMDE1IC0gMjAxOCBYaWxp bngsIEluYy4KPiA+ICsgKgo+ID4gKyAqICBBdXRob3I6IEh5dW4gV29vIEt3b24gPGh5dW4ua3dv bkB4aWxpbnguY29tPgo+ID4gKyAqCj4gPiArICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwo+ID4gKyAqIExpY2Vuc2Ug dmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg YW5kCj4gPiArICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRl ciB0aG9zZSB0ZXJtcy4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ID4gKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gPiAr ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQo+ID4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCj4gPiArICovCj4gPiArCj4gPiArI2lmbmRlZiBfWExOWF9GQl9IXwo+ID4gKyNkZWZpbmUg X1hMTlhfRkJfSF8KPiA+ICsKPiA+ICtzdHJ1Y3QgZHJtX2ZiX2hlbHBlcjsKPiA+ICsKPiA+ICtz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICoKPiA+ICt4bG54X2ZiX2NyZWF0ZShzdHJ1Y3QgZHJtX2Rl dmljZSAqZHJtLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKPiA+ICsJICAgICAgIGNvbnN0 IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICptb2RlX2NtZCk7Cj4gPiArc3RydWN0IGRybV9mYl9o ZWxwZXIgKgo+ID4gK3hsbnhfZmJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBpbnQgcHJl ZmVycmVkX2JwcCwKPiA+ICsJICAgICB1bnNpZ25lZCBpbnQgbWF4X2Nvbm5fY291bnQsIHVuc2ln bmVkIGludCBhbGlnbiwKPiA+ICsJICAgICB1bnNpZ25lZCBpbnQgdnJlc19tdWx0KTsKPiA+ICt2 b2lkIHhsbnhfZmJfZmluaShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKTsKPiA+ICsK PiA+ICsjZW5kaWYgLyogX1hMTlhfRkJfSF8gKi8KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0veGxueC94bG54X2dlbS5jCj4gYi9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2dlbS5j Cj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMC4uNGE1ZDUzMwo+ID4g LS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9nZW0uYwo+ ID4gQEAgLTAsMCArMSw0NyBAQAo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wCj4gPiArLyoKPiA+ICsgKiBYaWxpbnggRFJNIEtNUyBHRU0gaGVscGVyCj4gPiArICoKPiA+ ICsgKiAgQ29weXJpZ2h0IChDKSAyMDE1IC0gMjAxOCBYaWxpbngsIEluYy4KPiA+ICsgKgo+ID4g KyAqICBBdXRob3I6IEh5dW4gV29vIEt3b24gPGh5dW4ua3dvbkB4aWxpbnguY29tPgo+ID4gKyAq Cj4gPiArICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYwo+ID4gKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCj4gPiArICogbWF5IGJlIGNv cGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KPiA+ICsg Kgo+ID4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAo+ID4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gPiArICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ID4gKyAqIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gPiArICovCj4gPiArCj4g PiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9o ZWxwZXIuaD4KPiA+ICsKPiA+ICsjaW5jbHVkZSAieGxueF9kcnYuaCIKPiA+ICsjaW5jbHVkZSAi eGxueF9nZW0uaCIKPiA+ICsKPiA+ICsvKgo+ID4gKyAqIHhsbnhfZ2VtX2NtYV9kdW1iX2NyZWF0 ZSAtIChzdHJ1Y3QgZHJtX2RyaXZlciktPmR1bWJfY3JlYXRlCj4gY2FsbGJhY2sKPiA+ICsgKiBA ZmlsZV9wcml2OiBkcm1fZmlsZSBvYmplY3QKPiA+ICsgKiBAZHJtOiBEUk0gb2JqZWN0Cj4gPiAr ICogQGFyZ3M6IGluZm8gZm9yIGR1bWIgc2Nhbm91dCBidWZmZXIgY3JlYXRpb24KPiA+ICsgKgo+ ID4gKyAqIFRoaXMgZnVuY3Rpb24gaXMgZm9yIGR1bWJfY3JlYXRlIGNhbGxiYWNrIG9mIGRybV9k cml2ZXIgc3RydWN0LiBTaW1wbHkKPiA+ICsgKiBpdCB3cmFwcyBhcm91bmQgZHJtX2dlbV9jbWFf ZHVtYl9jcmVhdGUoKSBhbmQgc2V0cyB0aGUgcGl0Y2gKPiB2YWx1ZQo+ID4gKyAqIGJ5IHJldHJp ZXZpbmcgdGhlIHZhbHVlIGZyb20gdGhlIGRldmljZS4KPiA+ICsgKgo+ID4gKyAqIFJldHVybjog VGhlIHJldHVybiB2YWx1ZSBmcm9tIGRybV9nZW1fY21hX2R1bWJfY3JlYXRlKCkKPiA+ICsgKi8K PiA+ICtpbnQgeGxueF9nZW1fY21hX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9w cml2LCBzdHJ1Y3QKPiBkcm1fZGV2aWNlICpkcm0sCj4gPiArCQkJICAgICBzdHJ1Y3QgZHJtX21v ZGVfY3JlYXRlX2R1bWIgKmFyZ3MpCj4gPiArewo+ID4gKwlpbnQgcGl0Y2ggPSBESVZfUk9VTkRf VVAoYXJncy0+d2lkdGggKiBhcmdzLT5icHAsIDgpOwo+ID4gKwl1bnNpZ25lZCBpbnQgYWxpZ24g PSB4bG54X2dldF9hbGlnbihkcm0pOwo+ID4gKwo+ID4gKwlpZiAoIWFyZ3MtPnBpdGNoIHx8ICFJ U19BTElHTkVEKGFyZ3MtPnBpdGNoLCBhbGlnbikpCj4gPiArCQlhcmdzLT5waXRjaCA9IEFMSUdO KHBpdGNoLCBhbGlnbik7Cj4gPiArCj4gPiArCXJldHVybiBkcm1fZ2VtX2NtYV9kdW1iX2NyZWF0 ZV9pbnRlcm5hbChmaWxlX3ByaXYsIGRybSwgYXJncyk7Cj4gPiArfQo+ID4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZ2VtLmgKPiBiL2RyaXZlcnMvZ3B1L2RybS94bG54 L3hsbnhfZ2VtLmgKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi5m MzgwZGU5Cj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGxueC94 bG54X2dlbS5oCj4gPiBAQCAtMCwwICsxLDI2IEBACj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAKPiA+ICsvKgo+ID4gKyAqIFhpbGlueCBEUk0gS01TIEdFTSBoZWxwZXIg aGVhZGVyCj4gPiArICoKPiA+ICsgKiAgQ29weXJpZ2h0IChDKSAyMDE1IC0gMjAxOCBYaWxpbngs IEluYy4KPiA+ICsgKgo+ID4gKyAqICBBdXRob3I6IEh5dW4gV29vIEt3b24gPGh5dW4ua3dvbkB4 aWxpbnguY29tPgo+ID4gKyAqCj4gPiArICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwo+ID4gKyAqIExpY2Vuc2UgdmVy c2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5k Cj4gPiArICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0 aG9zZSB0ZXJtcy4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ID4gKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gPiArICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQo+ID4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu Cj4gPiArICovCj4gPiArCj4gPiArI2lmbmRlZiBfWExOWF9HRU1fSF8KPiA+ICsjZGVmaW5lIF9Y TE5YX0dFTV9IXwo+ID4gKwo+ID4gK2ludCB4bG54X2dlbV9jbWFfZHVtYl9jcmVhdGUoc3RydWN0 IGRybV9maWxlICpmaWxlX3ByaXYsCj4gPiArCQkJICAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZHJt LAo+ID4gKwkJCSAgICAgc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iICphcmdzKTsKPiA+ICsK PiA+ICsjZW5kaWYgLyogX1hMTlhfR0VNX0hfICovCj4gPiAtLQo+ID4gMi43LjQKPiA+Cj4gPiBf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+ID4gZHJpLWRl dmVsIG1haWxpbmcgbGlzdAo+ID4gZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ID4g aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK PiAKPiAtLQo+IERhbmllbCBWZXR0ZXIKPiBTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9y YXRpb24KPiBodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9kcmktZGV2ZWwK