From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id ABA946E49C for ; Mon, 18 Nov 2019 11:55:49 +0000 (UTC) Date: Mon, 18 Nov 2019 13:55:45 +0200 From: Petri Latvala Message-ID: <20191118115545.GX25209@platvala-desk.ger.corp.intel.com> References: <20191024110515.11741-1-arkadiusz.hiler@intel.com> <20191024110515.11741-3-arkadiusz.hiler@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20191024110515.11741-3-arkadiusz.hiler@intel.com> Subject: Re: [igt-dev] [PATCH i-g-t 2/4] Introduce device selection API List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Arkadiusz Hiler Cc: igt-dev@lists.freedesktop.org List-ID: T24gVGh1LCBPY3QgMjQsIDIwMTkgYXQgMDI6MDU6MTNQTSArMDMwMCwgQXJrYWRpdXN6IEhpbGVy IHdyb3RlOgo+IEZyb206IFpiaWduaWV3IEtlbXBjennFhHNraSA8emJpZ25pZXcua2VtcGN6eW5z a2lAaW50ZWwuY29tPgo+IAo+IENoYW5nZSBhZGRzIGRldmljZSBzZWxlY3Rpb24gQVBJIGJhc2Vk IG9uIHNjYW5uaW5nIGRybSBzdWJzeXN0ZW0KPiB1c2luZyB1ZGV2IGxpYnJhcnkuCj4gCj4gdjIg KEFyZWspOgo+ICAqIGRyb3AgbW9zdCBvZiB0aGUgZ2xpYiBjb2RlIGluIGZhdm9yIG9mIGlndF9s aXN0IGFuZCBwbGFpbiBDCj4gICogbWFrZSBzeXNmcyBwYXRocyBoYW5kbGluZyBub24tc3BlY2lh bCAtIGludHJvZHVjZSBzeXM6IGZpbHRlcgo+ICAqIGRyb3AgbXVsdGlwbGUgZmlsdGVyXyogc3Ry dWN0cyBpbiBmYXZvciBvZiBqdXN0IHR3bzoKPiAgICAtIGZpbHRlcl9jbGFzcyBmb3IgZGVmaW5p bmcgZmlsdGVycyB0eXBlcyAoZS5nLiBzeXM6KQo+ICAgIC0gZmlsdGVyIGZvciAiZmlsdGVyIGlu c3RhbmNlIiAtIHRoZSBkYXRhIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCj4gICogcHJvbW90ZSBtYW55 IG1hY3JvcyB0byByZWFsIGZ1bmN0aW9ucyBmb3IgdHlwZSBzYWZldHkKPiAgKiByZW5hbWUgZGV2 cy0+ZGV2cyB0byBkZXZzLT5hbGwKPiAgKiByZW5hbWUgZGV2cy0+dmlldyB0byBkZXZzLT5maWx0 ZXJlZAo+ICAqIGRvbid0IGV4cG9zZSAiY2hpcCIgKGUuZy4gRFJJVkVSX0FOWSkgYXMgaXQncyB1 bnJlYWRhYmxlIGFzIGludAo+ICAqIHVwZGF0ZSBkb2NzIHRvIHJlZmxlY3QgdGhvc2UgY2hhbmdl cwo+ICAqIG1vdmUgb3BlbiBmdW5jdGlvbnMgdGhhdCBvcGVuIGlndF9kZXZpY2VfY2FyZCB0byB0 aGlzIHBhdGNoCj4gICogcmVtb3ZlIHBsYXRmb3JtIGZpbHRlciBjbGFzcyBmb3Igbm93Cj4gICog dXNlIG9ubHkgYSBzaW5nbGUgZmlsdGVyCj4gCj4gQ2M6IFBldHJpIExhdHZhbGEgPHBldHJpLmxh dHZhbGFAaW50ZWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6IFpiaWduaWV3IEtlbXBjennFhHNraSA8 emJpZ25pZXcua2VtcGN6eW5za2lAaW50ZWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6IEFya2FkaXVz eiBIaWxlciA8YXJrYWRpdXN6LmhpbGVyQGludGVsLmNvbT4KPiAtLS0KPiAgLi4uL2lndC1ncHUt dG9vbHMvaWd0LWdwdS10b29scy1kb2NzLnhtbCAgICAgIHwgICAgMSArCj4gIGxpYi9NYWtlZmls ZS5zb3VyY2VzICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwo+ICBsaWIvaWd0X2Rl dmljZV9zY2FuLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMTk5ICsrKysrKysrKysrKysr KysrCj4gIGxpYi9pZ3RfZGV2aWNlX3NjYW4uaCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg NjcgKwo+ICBsaWIvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg ICAxICsKPiAgNSBmaWxlcyBjaGFuZ2VkLCAxMjcwIGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGxpYi9pZ3RfZGV2aWNlX3NjYW4uYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGli L2lndF9kZXZpY2Vfc2Nhbi5oCj4gCj4gZGlmZiAtLWdpdCBhL2RvY3MvcmVmZXJlbmNlL2lndC1n cHUtdG9vbHMvaWd0LWdwdS10b29scy1kb2NzLnhtbCBiL2RvY3MvcmVmZXJlbmNlL2lndC1ncHUt dG9vbHMvaWd0LWdwdS10b29scy1kb2NzLnhtbAo+IGluZGV4IDNmMTRkN2JlLi5jNDFjYmI3OCAx MDA2NDQKPiAtLS0gYS9kb2NzL3JlZmVyZW5jZS9pZ3QtZ3B1LXRvb2xzL2lndC1ncHUtdG9vbHMt ZG9jcy54bWwKPiArKysgYi9kb2NzL3JlZmVyZW5jZS9pZ3QtZ3B1LXRvb2xzL2lndC1ncHUtdG9v bHMtZG9jcy54bWwKPiBAQCAtMjMsNiArMjMsNyBAQAo+ICAgICAgPHhpOmluY2x1ZGUgaHJlZj0i eG1sL2lndF9jb3JlLnhtbCIvPgo+ICAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF9kZWJ1 Z2ZzLnhtbCIvPgo+ICAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF9kZXZpY2UueG1sIi8+ Cj4gKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvaWd0X2RldmljZV9zY2FuLnhtbCIvPgo+ICAg ICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF9kcmF3LnhtbCIvPgo+ICAgICAgPHhpOmluY2x1 ZGUgaHJlZj0ieG1sL2lndF9kdW1teWxvYWQueG1sIi8+Cj4gICAgICA8eGk6aW5jbHVkZSBocmVm PSJ4bWwvaWd0X2ZiLnhtbCIvPgo+IGRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUuc291cmNlcyBi L2xpYi9NYWtlZmlsZS5zb3VyY2VzCj4gaW5kZXggMWI1OGI2ZDAuLjdlODU5NGM1IDEwMDY0NAo+ IC0tLSBhL2xpYi9NYWtlZmlsZS5zb3VyY2VzCj4gKysrIGIvbGliL01ha2VmaWxlLnNvdXJjZXMK PiBAQCAtMjUsNiArMjUsOCBAQCBsaWJfc291cmNlX2xpc3QgPQkgCVwKPiAgCWlndF9kZWJ1Z2Zz LmgJCVwKPiAgCWlndF9kZXZpY2UuYwkJXAo+ICAJaWd0X2RldmljZS5oCQlcCj4gKwlpZ3RfZGV2 aWNlX3NjYW4uYwlcCj4gKwlpZ3RfZGV2aWNlX3NjYW4uaAlcCj4gIAlpZ3RfYXV4LmMJCVwKPiAg CWlndF9hdXguaAkJXAo+ICAJaWd0X2NvbG9yX2VuY29kaW5nLmMJXAo+IGRpZmYgLS1naXQgYS9s aWIvaWd0X2RldmljZV9zY2FuLmMgYi9saWIvaWd0X2RldmljZV9zY2FuLmMKPiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwLi43MWQzMDU4Nwo+IC0tLSAvZGV2L251bGwKPiAr KysgYi9saWIvaWd0X2RldmljZV9zY2FuLmMKPiBAQCAtMCwwICsxLDExOTkgQEAKPiArLyoKPiAr ICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlz c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0 YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29m dHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlz dHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0 d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlz IGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6 Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np b24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBp bmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsg KiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZS SU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklH SFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsg KiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9U SEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBT T0ZUV0FSRS4KPiArICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSAiaWd0LmgiCj4gKyNpbmNsdWRl ICJpZ3RfbGlzdC5oIgo+ICsjaW5jbHVkZSAiaWd0X3N5c2ZzLmgiCj4gKyNpbmNsdWRlICJpZ3Rf ZGV2aWNlLmgiCj4gKyNpbmNsdWRlICJpZ3RfZGV2aWNlX3NjYW4uaCIKPiArI2luY2x1ZGUgPGds aWIuaD4KPiArI2luY2x1ZGUgPGxpYnVkZXYuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5o Pgo+ICsjaW5jbHVkZSA8c3lzL3N0YXQuaD4KPiArI2luY2x1ZGUgPHN5cy90eXBlcy5oPgo+ICsj aW5jbHVkZSA8ZGlyZW50Lmg+Cj4gKyNpbmNsdWRlIDxmY250bC5oPgo+ICsKPiArLyoqCj4gKyAq IFNFQ1RJT046aWd0X2RldmljZV9zY2FuCj4gKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogRGV2aWNl IHNjYW5uaW5nIGFuZCBzZWxlY3Rpb24KPiArICogQHRpdGxlOiBEZXZpY2Ugc2VsZWN0aW9uCj4g KyAqIEBpbmNsdWRlOiBpZ3QuaAo+ICsgKgo+ICsgKiAjIERldmljZSBzY2FubmluZwo+ICsgKgo+ ICsgKiBEZXZpY2Ugc2Nhbm5pbmcgaXRlcmF0ZXMgb3ZlciBEUk0gc3Vic3lzdGVtIHVzaW5nIHVk ZXYgbGlicmFyeQo+ICsgKiB0byBhY3F1aXJlIERSTSBkZXZpY2VzLgo+ICsgKiBGb3IgZWFjaCBE Uk0gZGV2aWNlIHdlIGFsc28gZ2V0IGFuZCBzdG9yZSBpdHMgcGFyZW50IHRvIGFsbG93IGRldmlj ZQo+ICsgKiBzZWxlY3Rpb24gaGFwcGVuIGluIGEgbW9yZSBjb250ZXh0dWFsIHdheS4KPiArICoK PiArICogUGFyZW50IGRldmljZXMgYXJlIGJ1cyBkZXZpY2VzIChsaWtlIFBDSSwgcGxhdGZvcm0s IGV0Yy4pIGFuZCBjb250YWluIGEgbG90Cj4gKyAqIG9mIGV4dHJhIGRhdGEgb24gdG9wIG9mIHRo ZSBEUk0gZGV2aWNlIGl0c2VsZi4KPiArICoKPiArICogIyBGaWx0ZXJzCj4gKyAqCj4gKyAqIERl dmljZSBzZWxlY3Rpb24gY2FuIGJlIGRvbmUgdXNpbmcgZmlsdGVycyB0aGF0IGFyZSB1c2luZyB0 aGUgZGF0YSBjb2xsZWN0ZWQKPiArICogdWRldiArIHNvbWUgc3ludGFjdGljIHN1Z2FyLgo+ICsg Kgo+ICsgKiBEaXJlY3QgZGV2aWNlIHNlbGVjdGlvbiBmaWx0ZXIgdXNlcyBzeXNmcyBwYXRoIHRv IGZpbmQgdGhlIGRldmljZToKPiArICoKPiArICogfFs8IS0tIGxhbmd1YWdlPSJwbGFpbiIgLS0+ Cj4gKyAqIHN5czovc3lzL3BhdGgvdG8vZGV2aWNlL29yL3BhcmVudAo+ICsgKiBdfAo+ICsgKgo+ ICsgKiBFeGFtcGxlczoKPiArICogfFs8IS0tIGxhbmd1YWdlPSJwbGFpbiIgLS0+Cj4gKyAqIC0g c3lzOi9zeXMvZGV2aWNlcy9wY2kwMDAwOjAwLzAwMDA6MDA6MDIuMC9kcm0vY2FyZDAKPiArICog LSBzeXM6L3N5cy9kZXZpY2VzL3BjaTAwMDA6MDAvMDAwMDowMDowMi4wCj4gKyAqIC0gc3lzOi9z eXMvZGV2aWNlcy9wbGF0Zm9ybS92Z2VtCj4gKyAqIF18Cj4gKyAqCj4gKyAqIFRoZSBhbHRlcm5h dGl2ZSBpcyB0byB1c2Ugb3RoZXIgaW1wbGVtZW50ZWQgZmlsdGVyczoKPiArICoKPiArICogLSBk cm06IGdldCBkcm0gL2Rldi9kcmkvLi4uIGRldmljZSBkaXJlY3RseQo+ICsgKgo+ICsgKiAgIHxb PCEtLSBsYW5ndWFnZT0icGxhaW4iIC0tPgo+ICsgKiAgIGRybTovZGV2L2RyaS8uLi4KPiArICog ICBdfAo+ICsgKgo+ICsgKiAgIExvYWRpbmcgZHJpdmVycyBpbiBkaWZmZXJlbnQgb3JkZXIgY2Fu IGNhdXNlIGRpZmZlcmVudCBvcmRlcmluZyBvZgo+ICsgKiAgIC9kZXYvZHJpL2NhcmQgbm9kZXMg d2hpY2ggYmUgcHJvYmxlbWF0aWMgZm9yIHJlbGlhYmxlIGFuZCByZXByb2R1Y2libGUKPiArICog ICBkZXZpY2Ugc2VsZWN0aW9uLCBlLmcuIGluIGF1dG9tYXRlZCBleGVjdXRpb24gc2V0dGluZy4g SW4gc3VjaCBzY2VuYXJpb3MKPiArICogICBwbGVhc2UgY29uc2lkZXIgdXNpbmcgc3lzLCBwY2kg b3IgcGxhdGZvcm0gZmlsdGVycyBpbnN0ZWFkLgo+ICsgKgo+ICsgKiAtIHBjaTogc2VsZWN0IGRl dmljZSB1c2luZyBQQ0kgdmVuZG9yIGFuZCBkZXZpY2UgcHJvcGVydGllcwo+ICsgKiAgIHxbPCEt LSBsYW5ndWFnZT0icGxhaW4iIC0tPgo+ICsgKiAgIHBjaTpbdmVuZG9yPSUwNHgvbmFtZV1bLGRl dmljZT0lMDR4XVssY2FyZD0lZF0KPiArICogICBdfAo+ICsgKgo+ICsgKiAgIEZpbHRlciBhbGxv d3MgZGV2aWNlIHNlbGVjdGlvbiB1c2luZyB2ZW5kb3IgKGhleCBvciBuYW1lKSwgZGV2aWNlIGlk Cj4gKyAqICAgKGhleCkgYW5kIG50aC1jYXJkIGZyb20gYWxsIG1hdGNoZXMuIEZvciBleGFtcGxl IGlmIHRoZXJlIGFyZSA0IFBDSSBjYXJkcwo+ICsgKiAgIGluc3RhbGxlZCAobGV0IHR3byBjYXJk cyBoYXZlIDEyMzQgYW5kIG90aGVyIHR3byAxMjM1IGRldmljZSBpZCwgYWxsIG9mCj4gKyAqICAg dGhlbSBvZiB2ZW5kb3IgSW50ZWwpIHlvdSBjYW4gc2VsZWN0IG9uZSB1c2luZzoKPiArICoKPiAr ICogICB8WzwhLS0gbGFuZ3VhZ2U9InBsYWluIiAtLT4KPiArICogICBwY2k6dmVuZG9yPUludGVs LGRldmljZT0xMjM0LGNhcmQ9MAo+ICsgKiAgIF18Cj4gKyAqCj4gKyAqICAgb3IKPiArICoKPiAr ICogICB8WzwhLS0gbGFuZ3VhZ2U9InBsYWluIiAtLT4KPiArICogICBwY2k6dmVuZG9yPTgwODYs ZGV2aWNlPTEyMzQsY2FyZD0wCj4gKyAqICAgXXwKPiArICoKPiArICogICBUaGlzIHRha2VzIGZp cnN0IGRldmljZSB3aXRoIDEyMzQgaWQgZm9yIEludGVsIHZlbmRvciAoODA4NikuCj4gKyAqCj4g KyAqICAgfFs8IS0tIGxhbmd1YWdlPSJwbGFpbiIgLS0+Cj4gKyAqICAgcGNpOnZlbmRvcj1JbnRl bCxkZXZpY2U9MTIzNCxjYXJkPTEKPiArICogICBdfAo+ICsgKgo+ICsgKiAgIG9yCj4gKyAqCj4g KyAqICAgfFs8IS0tIGxhbmd1YWdlPSJwbGFpbiIgLS0+Cj4gKyAqICAgcGNpOnZlbmRvcj04MDg2 LGRldmljZT0xMjM0LGNhcmQ9MQo+ICsgKiAgIF18Cj4gKyAqCj4gKyAqICAgSXQgc2VsZWN0cyB0 aGUgc2Vjb25kIG9uZS4KPiArICoKPiArICogICBBcyBvcmRlciB0aGUgb24gUENJIGJ1cyBkb2Vz bid0IGNoYW5nZSAodW5sZXNzIHlvdSdsbCBhZGQgbmV3IGRldmljZSBvcgo+ICsgKiAgIHJlb3Jk ZXIgZXhpc3Rpbmcgb25lKSBkZXZpY2Ugc2VsZWN0aW9uIHVzaW5nIHRoaXMgZmlsdGVyIHdpbGwg YWx3YXlzCj4gKyAqICAgcmV0dXJuIHlvdSBzYW1lIGRldmljZSByZWdhcmRsZXNzIHRoZSBvcmRl ciBvZiBlbnVtZXJhdGlvbi4KPiArICoKPiArICogICBTaW1wbGUgc3ludGFjdGljIHN1Z2FyIG92 ZXIgdXNpbmcgdGhlIHN5c2ZzIHBhdGhzLgo+ICsgKi8KPiArCj4gKyNpZmRlZiBERUJVR19ERVZJ Q0VfU0NBTgo+ICsjZGVmaW5lIERCRyguLi4pIFwKPiAreyBcCj4gKwlzdHJ1Y3QgdGltZXZhbCB0 bTsgXAo+ICsJZ2V0dGltZW9mZGF5KCZ0bSwgTlVMTCk7IFwKPiArCXByaW50ZigiJTEwbGQuJTAz bGQ6ICIsIHRtLnR2X3NlYywgdG0udHZfdXNlYyk7IFwKPiArCXByaW50ZihfX1ZBX0FSR1NfXyk7 IFwKPiArCX0KPiArCj4gKyNlbHNlCj4gKyNkZWZpbmUgREJHKC4uLikge30KPiArI2VuZGlmCj4g Kwo+ICtzdGF0aWMgaW5saW5lIGJvb2wgc3RyZXF1YWwoY29uc3QgY2hhciAqYSwgY29uc3QgY2hh ciAqYikKPiArewo+ICsJaWYgKGEgPT0gTlVMTCB8fCBiID09IE5VTEwpCj4gKwkJcmV0dXJuIGZh bHNlOwo+ICsKPiArCXJldHVybiBzdHJjbXAoYSwgYikgPT0gMDsKPiArfQo+ICsKPiArc3RydWN0 IGlndF9kZXZpY2Ugewo+ICsJLyogRmlsbGVkIGZvciBkcm0gZGV2aWNlcyAqLwo+ICsJc3RydWN0 IGlndF9kZXZpY2UgKnBhcmVudDsKPiArCj4gKwkvKiBQb2ludCB0byB2ZW5kb3Igc3BlYyBpZiBj YW4gYmUgZm91bmQgKi8KPiArCj4gKwkvKiBQcm9wZXJ0aWVzIC8gc3lzYXR0cnMgcmV3cml0ZW4g ZnJvbSB1ZGV2IGxpc3RzICovCj4gKwlHSGFzaFRhYmxlICpwcm9wc19odDsKPiArCUdIYXNoVGFi bGUgKmF0dHJzX2h0Owo+ICsKPiArCS8qIE1vc3QgdXNhYmxlIHZhcmlhYmxlcyBmcm9tIHVkZXYg ZGV2aWNlICovCj4gKwljaGFyICpzdWJzeXN0ZW07Cj4gKwljaGFyICpzeXNwYXRoOwo+ICsJY2hh ciAqZGV2bm9kZTsKPiArCj4gKwkvKiAvZGV2L2RyaS8uLi4gcGF0aHMgKi8KPiArCWNoYXIgKmRy bV9jYXJkOwo+ICsJY2hhciAqZHJtX3JlbmRlcjsKPiArCj4gKwkvKiBGb3IgcGNpIHN1YnN5c3Rl bSAqLwo+ICsJY2hhciAqdmVuZG9yOwo+ICsJY2hhciAqZGV2aWNlOwo+ICsKPiArCXN0cnVjdCBp Z3RfbGlzdCBsaW5rOwo+ICt9Owo+ICsKPiArLyogU2Nhbm5lZCBkZXZpY2VzICovCj4gK3N0YXRp YyBzdHJ1Y3Qgewo+ICsJc3RydWN0IGlndF9saXN0IGFsbDsKPiArCXN0cnVjdCBpZ3RfbGlzdCBm aWx0ZXJlZDsKPiArCWJvb2wgZGV2c19zY2FubmVkOwo+ICt9IGlndF9kZXZzOwo+ICsKPiArc3Rh dGljIHN0cnVjdCB7Cj4gKwljb25zdCBjaGFyICpuYW1lOwo+ICsJY29uc3QgY2hhciAqdmVuZG9y X2lkOwo+ICt9IHBjaV92ZW5kb3JfbWFwcGluZ1tdID0gewo+ICsJeyAiaW50ZWwiLCAiODA4NiIg fSwKPiArCXsgImFtZCIsICIxMDAyIiB9LAo+ICsJeyBOVUxMLCB9LAo+ICt9Owo+ICsKPiArc3Rh dGljIGNvbnN0IGNoYXIgKmdldF9wY2lfdmVuZG9yX2lkX2J5X25hbWUoY29uc3QgY2hhciAqbmFt ZSkKPiArewo+ICsJZm9yICh0eXBlb2YoKnBjaV92ZW5kb3JfbWFwcGluZykgKnZtID0gcGNpX3Zl bmRvcl9tYXBwaW5nOyB2bS0+bmFtZTsgdm0rKykKPiArCXsKPiArCQlpZiAoIXN0cmNhc2VjbXAo bmFtZSwgdm0tPm5hbWUpKQo+ICsJCQlyZXR1cm4gdm0tPnZlbmRvcl9pZDsKPiArCX0KPiArCj4g KwlyZXR1cm4gTlVMTDsKPiArfQo+ICsKPiArLyogUmVhZGluZyBzeXNhdHRyIHZhbHVlcyBjYW4g dGFrZSB0aW1lIChldmVuIHNlY29uZHMpLAo+ICsgKiB3ZSB3YW50IHRvIGF2b2lkIHJlYWRpbmcg c3VjaCBrZXlzLgo+ICsgKi8KPiArc3RhdGljIGJvb2wgaXNfb25fYmxhY2tsaXN0KGNvbnN0IGNo YXIgKndoYXQpCj4gK3sKPiArCXN0YXRpYyBjb25zdCBjaGFyICprZXlzW10gPSB7ICJjb25maWci LCAibW9kYWxpYXMiLCAibW9kZXMiLAo+ICsJCQkJICAgICAgInJlc291cmNlIiwKPiArCQkJCSAg ICAgICJyZXNvdXJjZTAiLCAicmVzb3VyY2UxIiwgInJlc291cmNlMiIsCj4gKwkJCQkgICAgICAi cmVzb3VyY2UzIiwgInJlc291cmNlNCIsICJyZXNvdXJjZTUiLAo+ICsJCQkJICAgICAgInJlc291 cmNlMF93YyIsICJyZXNvdXJjZTFfd2MiLCAicmVzb3VyY2UyX3djIiwKPiArCQkJCSAgICAgICJy ZXNvdXJjZTNfd2MiLCAicmVzb3VyY2U0X3djIiwgInJlc291cmNlNV93YyIsCj4gKwkJCQkgICAg ICAiZHJpdmVyIiwKPiArCQkJCSAgICAgICJ1ZXZlbnQiLCBOVUxMfTsKPiArCWNvbnN0IGNoYXIg KmtleTsKPiArCWludCBpID0gMDsKPiArCj4gKwlpZiAod2hhdCA9PSBOVUxMKQo+ICsJCXJldHVy biBmYWxzZTsKPiArCj4gKwl3aGlsZSAoKGtleSA9IGtleXNbaSsrXSkpIHsKPiArCQlpZiAoc3Ry Y21wKGtleSwgd2hhdCkgPT0gMCkKPiArCQkJcmV0dXJuIHRydWU7Cj4gKwl9Cj4gKwo+ICsJcmV0 dXJuIGZhbHNlOwo+ICsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBpZ3RfZGV2aWNlICppZ3Rf ZGV2aWNlX25ldyh2b2lkKQo+ICt7Cj4gKwlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2Owo+ICsKPiAr CWRldiA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGlndF9kZXZpY2UpKTsKPiArCWlmICghZGV2 KQo+ICsJCXJldHVybiBOVUxMOwo+ICsKPiArCWRldi0+YXR0cnNfaHQgPSBnX2hhc2hfdGFibGVf bmV3X2Z1bGwoZ19zdHJfaGFzaCwgZ19zdHJfZXF1YWwsCj4gKwkJCQkJICAgICAgZnJlZSwgZnJl ZSk7Cj4gKwlkZXYtPnByb3BzX2h0ID0gZ19oYXNoX3RhYmxlX25ld19mdWxsKGdfc3RyX2hhc2gs IGdfc3RyX2VxdWFsLAo+ICsJCQkJCSAgICAgIGZyZWUsIGZyZWUpOwo+ICsKPiArCWlmIChkZXYt PmF0dHJzX2h0ICYmIGRldi0+cHJvcHNfaHQpCj4gKwkJcmV0dXJuIGRldjsKPiArCj4gKwlyZXR1 cm4gTlVMTDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaWd0X2RldmljZV9hZGRfcHJvcChzdHJ1 Y3QgaWd0X2RldmljZSAqZGV2LAo+ICsJCQkJY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2 YWx1ZSkKPiArewo+ICsJaWYgKCFrZXkgfHwgIXZhbHVlKQo+ICsJCXJldHVybjsKPiArCj4gKwln X2hhc2hfdGFibGVfaW5zZXJ0KGRldi0+cHJvcHNfaHQsIHN0cmR1cChrZXkpLCBzdHJkdXAodmFs dWUpKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaWd0X2RldmljZV9hZGRfYXR0cihzdHJ1Y3Qg aWd0X2RldmljZSAqZGV2LAo+ICsJCQkJY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1 ZSkKPiArewo+ICsJY29uc3QgY2hhciAqdiA9IHZhbHVlOwo+ICsKPiArCWlmICgha2V5KQo+ICsJ CXJldHVybjsKPiArCj4gKwkvKiBJdCdzIHBvc3NpYmxlIHdlIGhhdmUgc3ltbGluayBhdCBrZXkg ZmlsZW5hbWUsIGJ1dCB1ZGV2Cj4gKwkgKiBsaWJyYXJ5IHJlc29sdmVzIG9ubHkgZmV3IG9mIHRo ZW0KPiArCSAqLwo+ICsJaWYgKCF2KSB7Cj4gKwkJc3RydWN0IHN0YXQgc3Q7Cj4gKwkJY2hhciBw YXRoW1BBVEhfTUFYXTsKPiArCQljaGFyIGxpbmt0b1tQQVRIX01BWF07Cj4gKwkJaW50IGxlbjsK PiArCj4gKwkJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiJXMvJXMiLCBkZXYtPnN5c3Bh dGgsIGtleSk7Cj4gKwkJaWYgKGxzdGF0KHBhdGgsICZzdCkgIT0gMCkKPiArCQkJcmV0dXJuOwo+ ICsKPiArCQlsZW4gPSByZWFkbGluayhwYXRoLCBsaW5rdG8sIHNpemVvZihsaW5rdG8pKTsKPiAr CQlpZiAobGVuIDw9IDAgfHwgbGVuID09IChzc2l6ZV90KSBzaXplb2YobGlua3RvKSkKPiArCQkJ cmV0dXJuOwo+ICsJCWxpbmt0b1tsZW5dID0gJ1wwJzsKPiArCQl2ID0gc3RycmNocihsaW5rdG8s ICcvJyk7Cj4gKwkJaWYgKHYgPT0gTlVMTCkKPiArCQkJcmV0dXJuOwo+ICsJCXYrKzsKPiArCX0K PiArCj4gKwlnX2hhc2hfdGFibGVfaW5zZXJ0KGRldi0+YXR0cnNfaHQsIHN0cmR1cChrZXkpLCBz dHJkdXAodikpOwo+ICt9Cj4gKwo+ICsvKiBJdGVyYXRlIG92ZXIgdWRldiBwcm9wZXJ0aWVzIGxp c3QgYW5kIHJld3JpdGUgaXQgdG8gaWd0X2RldmljZSBwcm9wZXJ0aWVzCj4gKyAqIGhhc2ggdGFi bGUgZm9yIGluc3RhbnQgYWNjZXNzLgo+ICsgKi8KPiArc3RhdGljIHZvaWQgZ2V0X3Byb3BzKHN0 cnVjdCB1ZGV2X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWd0X2RldmljZSAqaWRldikKPiArewo+ICsJ c3RydWN0IHVkZXZfbGlzdF9lbnRyeSAqZW50cnk7Cj4gKwo+ICsJZW50cnkgPSB1ZGV2X2Rldmlj ZV9nZXRfcHJvcGVydGllc19saXN0X2VudHJ5KGRldik7Cj4gKwl3aGlsZSAoZW50cnkpIHsKPiAr CQljb25zdCBjaGFyICpuYW1lID0gdWRldl9saXN0X2VudHJ5X2dldF9uYW1lKGVudHJ5KTsKPiAr CQljb25zdCBjaGFyICp2YWx1ZSA9IHVkZXZfbGlzdF9lbnRyeV9nZXRfdmFsdWUoZW50cnkpOwo+ ICsKPiArCQlpZ3RfZGV2aWNlX2FkZF9wcm9wKGlkZXYsIG5hbWUsIHZhbHVlKTsKPiArCQllbnRy eSA9IHVkZXZfbGlzdF9lbnRyeV9nZXRfbmV4dChlbnRyeSk7Cj4gKwkJREJHKCJwcm9wOiAlcywg dmFsOiAlc1xuIiwgbmFtZSwgdmFsdWUpOwo+ICsJfQo+ICt9Cj4gKwo+ICsvKiBTYW1lIGFzIGdl dF9wcm9wcygpLCBidXQgcmV3cml0ZXMgc3lzYXR0cnMuIFJlc29sdmVzIHN5bWJvbGljIGxpbmtz Cj4gKyAqIG5vdCBoYW5kbGVkIGJ5IHVkZXYgZ2V0X3N5c2F0dHJfdmFsdWUoKS4KPiArICogRnVu Y3Rpb24gc2tpcHMgc3lzYXR0cnMgZnJvbSBibGFja2xpc3QgaHQgKGFjcXVpcmluZyBzb21lIHZh bHVlcyBjYW4gdGFrZQo+ICsgKiBzZWNvbmRzKS4KPiArICovCj4gK3N0YXRpYyB2b2lkIGdldF9h dHRycyhzdHJ1Y3QgdWRldl9kZXZpY2UgKmRldiwgc3RydWN0IGlndF9kZXZpY2UgKmlkZXYpCj4g K3sKPiArCXN0cnVjdCB1ZGV2X2xpc3RfZW50cnkgKmVudHJ5Owo+ICsKPiArCWVudHJ5ID0gdWRl dl9kZXZpY2VfZ2V0X3N5c2F0dHJfbGlzdF9lbnRyeShkZXYpOwo+ICsJd2hpbGUgKGVudHJ5KSB7 Cj4gKwkJY29uc3QgY2hhciAqa2V5ID0gdWRldl9saXN0X2VudHJ5X2dldF9uYW1lKGVudHJ5KTsK PiArCQljb25zdCBjaGFyICp2YWx1ZTsKPiArCj4gKwkJaWYgKGlzX29uX2JsYWNrbGlzdChrZXkp KSB7Cj4gKwkJCWVudHJ5ID0gdWRldl9saXN0X2VudHJ5X2dldF9uZXh0KGVudHJ5KTsKPiArCQkJ Y29udGludWU7Cj4gKwkJfQo+ICsKPiArCQl2YWx1ZSA9IHVkZXZfZGV2aWNlX2dldF9zeXNhdHRy X3ZhbHVlKGRldiwga2V5KTsKPiArCQlpZ3RfZGV2aWNlX2FkZF9hdHRyKGlkZXYsIGtleSwgdmFs dWUpOwo+ICsJCWVudHJ5ID0gdWRldl9saXN0X2VudHJ5X2dldF9uZXh0KGVudHJ5KTsKPiArCQlE QkcoImF0dHI6ICVzLCB2YWw6ICVzXG4iLCBrZXksIHZhbHVlKTsKPiArCX0KPiArfQo+ICsKPiAr I2RlZmluZSBnZXRfcHJvcChkZXYsIHByb3ApICgoY2hhciAqKSBnX2hhc2hfdGFibGVfbG9va3Vw KGRldi0+cHJvcHNfaHQsIHByb3ApKQo+ICsjZGVmaW5lIGdldF9hdHRyKGRldiwgYXR0cikgKChj aGFyICopIGdfaGFzaF90YWJsZV9sb29rdXAoZGV2LT5hdHRyc19odCwgYXR0cikpCj4gKyNkZWZp bmUgZ2V0X3Byb3Bfc3Vic3lzdGVtKGRldikgZ2V0X3Byb3AoZGV2LCAiU1VCU1lTVEVNIikKPiAr I2RlZmluZSBpc19kcm1fc3Vic3lzdGVtKGRldikgIChzdHJlcXVhbChnZXRfcHJvcF9zdWJzeXN0 ZW0oZGV2KSwgImRybSIpKQo+ICsjZGVmaW5lIGlzX3BjaV9zdWJzeXN0ZW0oZGV2KSAgKHN0cmVx dWFsKGdldF9wcm9wX3N1YnN5c3RlbShkZXYpLCAicGNpIikpCj4gKwo+ICsvKiBHZXRzIFBDSV9J RCBwcm9wZXJ0eSwgc3BsaXRzIHRvIHh4eHg6eXl5eSBhbmQgc3RvcmVzCj4gKyAqIHh4eHggdG8g ZGV2LT52ZW5kb3IgYW5kIHl5eXkgdG8gZGV2LT5kZXZpY2UgZm9yCj4gKyAqIGZhc3RlciBhY2Nl c3MuCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBzZXRfdmVuZG9yX2RldmljZShzdHJ1Y3QgaWd0X2Rl dmljZSAqZGV2KQo+ICt7Cj4gKwljb25zdCBjaGFyICpwY2lfaWQgPSBnZXRfcHJvcChkZXYsICJQ Q0lfSUQiKTsKPiArCj4gKwlpZiAoIXBjaV9pZCB8fCBzdHJsZW4ocGNpX2lkKSAhPSA5KQo+ICsJ CXJldHVybjsKPiArCWRldi0+dmVuZG9yID0gc3RybmR1cChwY2lfaWQsIDQpOwo+ICsJZGV2LT5k ZXZpY2UgPSBzdHJuZHVwKHBjaV9pZCArIDUsIDQpOwo+ICt9Cj4gKwo+ICsvKiBBbGxvY2F0ZSBh cnJheXMgZm9yIGtlZXBpbmcgc2Nhbm5lZCBkZXZpY2VzICovCj4gK3N0YXRpYyBib29sIHByZXBh cmVfc2Nhbih2b2lkKQo+ICt7Cj4gKwlpZiAoaWd0X2RldnMuYWxsLnByZXYgPT0gTlVMTCB8fCBp Z3RfZGV2cy5hbGwubmV4dCA9PSBOVUxMKQo+ICsJCWlndF9saXN0X2luaXQoJmlndF9kZXZzLmFs bCk7Cj4gKwo+ICsJaWYgKGlndF9kZXZzLmZpbHRlcmVkLnByZXYgPT0gTlVMTCB8fCBpZ3RfZGV2 cy5maWx0ZXJlZC5uZXh0ID09IE5VTEwpCj4gKwkJaWd0X2xpc3RfaW5pdCgmaWd0X2RldnMuZmls dGVyZWQpOwo+ICsKPiArCj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIGNoYXIq IHN0cmR1cF9udWxsc2FmZShjb25zdCBjaGFyKiBzdHIpCj4gK3sKPiArCWlmIChzdHIgPT0gTlVM TCkKPiArCQlyZXR1cm4gTlVMTDsKPiArCj4gKwlyZXR1cm4gc3RyZHVwKHN0cik7Cj4gK30KPiAr Cj4gKy8qIENyZWF0ZSBuZXcgaWd0X2RldmljZSBmcm9tIHVkZXYgZGV2aWNlLgo+ICsgKiBGaWxs cyBzdHJ1Y3R1cmUgd2l0aCBtb3N0IHVzYWJsZSB1ZGV2IGRldmljZSB2YXJpYWJsZXMsIHByb3Bl cnRpZXMKPiArICogYW5kIHN5c2F0dHJzLgo+ICsgKi8KPiArc3RhdGljIHN0cnVjdCBpZ3RfZGV2 aWNlICppZ3RfZGV2aWNlX25ld19mcm9tX3VkZXYoc3RydWN0IHVkZXZfZGV2aWNlICpkZXYpCj4g K3sKPiArCXN0cnVjdCBpZ3RfZGV2aWNlICppZGV2ID0gaWd0X2RldmljZV9uZXcoKTsKPiArCj4g KwlpZ3RfYXNzZXJ0KGlkZXYpOwo+ICsJaWRldi0+c3lzcGF0aCA9IHN0cmR1cF9udWxsc2FmZSh1 ZGV2X2RldmljZV9nZXRfc3lzcGF0aChkZXYpKTsKPiArCWlkZXYtPnN1YnN5c3RlbSA9IHN0cmR1 cF9udWxsc2FmZSh1ZGV2X2RldmljZV9nZXRfc3Vic3lzdGVtKGRldikpOwo+ICsJaWRldi0+ZGV2 bm9kZSA9IHN0cmR1cF9udWxsc2FmZSh1ZGV2X2RldmljZV9nZXRfZGV2bm9kZShkZXYpKTsKPiAr Cj4gKwlpZiAoaWRldi0+ZGV2bm9kZSAmJiBzdHJzdHIoaWRldi0+ZGV2bm9kZSwgIi9kZXYvZHJp L2NhcmQiKSkKPiArCQlpZGV2LT5kcm1fY2FyZCA9IHN0cmR1cChpZGV2LT5kZXZub2RlKTsKPiAr CWVsc2UgaWYgKGlkZXYtPmRldm5vZGUgJiYgc3Ryc3RyKGlkZXYtPmRldm5vZGUsICIvZGV2L2Ry aS9yZW5kZXIiKSkKPiArCQlpZGV2LT5kcm1fcmVuZGVyID0gc3RyZHVwKGlkZXYtPmRldm5vZGUp Owo+ICsKPiArCWdldF9wcm9wcyhkZXYsIGlkZXYpOwo+ICsJZ2V0X2F0dHJzKGRldiwgaWRldik7 Cj4gKwo+ICsJcmV0dXJuIGlkZXY7Cj4gK30KPiArCj4gKy8qIEl0ZXJhdGUgb3ZlciBhbGwgaWd0 X2RldmljZXMgYXJyYXkgYW5kIGZpbmQgb25lIG1hdGNoZWQgdG8KPiArICogc3Vic3lzdGVtIGFu ZCBzeXNwYXRoLgo+ICsgKi8KPiArc3RhdGljIHN0cnVjdCBpZ3RfZGV2aWNlICppZ3RfZGV2aWNl X2ZpbmQoY29uc3QgY2hhciAqc3Vic3lzdGVtLAo+ICsJCQkJCSAgY29uc3QgY2hhciAqc3lzcGF0 aCkKPiArewo+ICsJc3RydWN0IGlndF9kZXZpY2UgKmRldjsKPiArCj4gKwlpZ3RfbGlzdF9mb3Jf ZWFjaChkZXYsICZpZ3RfZGV2cy5hbGwsIGxpbmspCj4gKwl7Cj4gKwkJaWYgKHN0cmNtcChkZXYt PnN1YnN5c3RlbSwgc3Vic3lzdGVtKSA9PSAwICYmCj4gKwkJCXN0cmNtcChkZXYtPnN5c3BhdGgs IHN5c3BhdGgpID09IDApCj4gKwkJCXJldHVybiBkZXY7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIE5V TEw7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgaWd0X2RldmljZSAqaWd0X2RldmljZV9mcm9t X3N5c3BhdGgoY29uc3QgY2hhciAqc3lzcGF0aCkKPiArewo+ICsJc3RydWN0IGlndF9kZXZpY2Ug KmRldjsKPiArCj4gKwlpZ3RfbGlzdF9mb3JfZWFjaChkZXYsICZpZ3RfZGV2cy5hbGwsIGxpbmsp Cj4gKwl7Cj4gKwkJaWYgKHN0cmNtcChkZXYtPnN5c3BhdGgsIHN5c3BhdGgpID09IDApCj4gKwkJ CXJldHVybiBkZXY7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIE5VTEw7Cj4gK30KPiArCj4gKy8qIEZv ciBlYWNoIGRybSBpZ3RfZGV2aWNlIGFkZCBvciB1cGRhdGUgaXRzIHBhcmVudCBpZ3RfZGV2aWNl IHRvIHRoZSBhcnJheS4KPiArICogQXMgY2FyZC9yZW5kZXIgZHJtIGRldmljZXMgbW9zdGx5IGhh dmUgc2FtZSBwYXJlbnQgKHZrbXMgaXMgYW4gZXhjZXB0aW9uKQo+ICsgKiBsaW5rIHRvIGl0IGFu ZCB1cGRhdGUgY29ycmVzcG9uZGluZyBkcm1fY2FyZCAvIGRybV9yZW5kZXIgZmllbGRzLgo+ICsg Ki8KPiArc3RhdGljIHZvaWQgdXBkYXRlX29yX2FkZF9wYXJlbnQoc3RydWN0IHVkZXZfZGV2aWNl ICpkZXYsCj4gKwkJCQkgc3RydWN0IGlndF9kZXZpY2UgKmlkZXYpCj4gK3sKPiArCXN0cnVjdCB1 ZGV2X2RldmljZSAqcGFyZW50X2RldjsKPiArCXN0cnVjdCBpZ3RfZGV2aWNlICpwYXJlbnRfaWRl djsKPiArCWNvbnN0IGNoYXIgKnN1YnN5c3RlbSwgKnN5c3BhdGgsICpkZXZuYW1lOwo+ICsKPiAr CXBhcmVudF9kZXYgPSB1ZGV2X2RldmljZV9nZXRfcGFyZW50KGRldik7Cj4gKwlpZ3RfYXNzZXJ0 KHBhcmVudF9kZXYpOwo+ICsKPiArCXN1YnN5c3RlbSA9IHVkZXZfZGV2aWNlX2dldF9zdWJzeXN0 ZW0ocGFyZW50X2Rldik7Cj4gKwlzeXNwYXRoID0gdWRldl9kZXZpY2VfZ2V0X3N5c3BhdGgocGFy ZW50X2Rldik7Cj4gKwo+ICsJcGFyZW50X2lkZXYgPSBpZ3RfZGV2aWNlX2ZpbmQoc3Vic3lzdGVt LCBzeXNwYXRoKTsKPiArCWlmICghcGFyZW50X2lkZXYpIHsKPiArCQlwYXJlbnRfaWRldiA9IGln dF9kZXZpY2VfbmV3X2Zyb21fdWRldihwYXJlbnRfZGV2KTsKPiArCQlpZiAoaXNfcGNpX3N1YnN5 c3RlbShwYXJlbnRfaWRldikpIHsKPiArCQkJc2V0X3ZlbmRvcl9kZXZpY2UocGFyZW50X2lkZXYp Owo+ICsJCX0KPiArCQlpZ3RfbGlzdF9pbnNlcnRfdGFpbCgmaWd0X2RldnMuYWxsLCAmcGFyZW50 X2lkZXYtPmxpbmspOwo+ICsJfQo+ICsJZGV2bmFtZSA9IHVkZXZfZGV2aWNlX2dldF9kZXZub2Rl KGRldik7Cj4gKwlpZiAoZGV2bmFtZSAhPSBOVUxMICYmIHN0cnN0cihkZXZuYW1lLCAiL2Rldi9k cmkvY2FyZCIpKQo+ICsJCXBhcmVudF9pZGV2LT5kcm1fY2FyZCA9IHN0cmR1cChkZXZuYW1lKTsK PiArCWVsc2UgaWYgKGRldm5hbWUgIT0gTlVMTCAmJiBzdHJzdHIoZGV2bmFtZSwgIi9kZXYvZHJp L3JlbmRlciIpKQo+ICsJCXBhcmVudF9pZGV2LT5kcm1fcmVuZGVyID0gc3RyZHVwKGRldm5hbWUp Owo+ICsKPiArCWlkZXYtPnBhcmVudCA9IHBhcmVudF9pZGV2Owo+ICt9Cj4gKwo+ICtzdGF0aWMg c3RydWN0IGlndF9kZXZpY2UgKmR1cGxpY2F0ZV9kZXZpY2Uoc3RydWN0IGlndF9kZXZpY2UgKmRl dikgewo+ICsJc3RydWN0IGlndF9kZXZpY2UgKmR1cCA9IG1hbGxvYyhzaXplb2YoKmR1cCkpOwo+ ICsJbWVtY3B5KGR1cCwgZGV2LCBzaXplb2YoKmRldikpOwo+ICsJZHVwLT5saW5rLnByZXYgPSBO VUxMOwo+ICsJZHVwLT5saW5rLm5leHQgPSBOVUxMOwo+ICsJcmV0dXJuIGR1cDsKPiArfQo+ICsK PiArc3RhdGljIGdpbnQgZGV2c19jb21wYXJlKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIp Cj4gK3sKPiArCXN0cnVjdCBpZ3RfZGV2aWNlICpkZXYxLCAqZGV2MjsKPiArCWludCByZXQ7Cj4g Kwo+ICsJZGV2MSA9ICooc3RydWN0IGlndF9kZXZpY2UgKiopIGE7Cj4gKwlkZXYyID0gKihzdHJ1 Y3QgaWd0X2RldmljZSAqKikgYjsKPiArCXJldCA9IHN0cmNtcChkZXYxLT5zdWJzeXN0ZW0sIGRl djItPnN1YnN5c3RlbSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0 dXJuIHN0cmNtcChkZXYxLT5zeXNwYXRoLCBkZXYyLT5zeXNwYXRoKTsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgc29ydF9hbGxfZGV2aWNlcyh2b2lkKQo+ICt7Cj4gKwlzdHJ1Y3QgaWd0X2Rldmlj ZSAqZGV2LCAqdG1wOwo+ICsJaW50IGxlbiA9IGlndF9saXN0X2xlbmd0aCgmaWd0X2RldnMuYWxs KTsKPiArCXN0cnVjdCBpZ3RfZGV2aWNlICoqZGV2cyA9IG1hbGxvYyhsZW4gKiBzaXplb2YoKmRl dikpOwo+ICsKPiArCWludCBpID0gMDsKPiArCWlndF9saXN0X2Zvcl9lYWNoX3NhZmUoZGV2LCB0 bXAsICZpZ3RfZGV2cy5hbGwsIGxpbmspIHsKPiArCQlkZXZzW2ldID0gZGV2Owo+ICsJCWlndF9h c3NlcnQoaSsrIDwgbGVuKTsKPiArCQlpZ3RfbGlzdF9yZW1vdmUoJmRldi0+bGluayk7Cj4gKwl9 Cj4gKwo+ICsJcXNvcnQoZGV2cywgbGVuLCBzaXplb2YoKmRldnMpLCBkZXZzX2NvbXBhcmUpOwo+ ICsKPiArCWZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkgewo+ICsJCWlndF9saXN0X2luc2VydF90 YWlsKCZpZ3RfZGV2cy5hbGwsICZkZXZzW2ldLT5saW5rKTsKPiArCX0KCkxhc3QgbWludXRlIGZp bmRpbmc6IFRoaXMgbGVha3MgbWVtb3J5LgoKZnJlZShkZXZzKTsKCgotLSAKUGV0cmkgTGF0dmFs YQoKCgoKPiArfQo+ICsKPiArLyogQ29yZSBzY2FubmluZyBmdW5jdGlvbi4KPiArICoKPiArICog QWxsIHNjYW5uZWQgZGV2aWNlcyBhcmUga2VwdCBpbnNpZGUgaWd0X2RldnMuYWxsIHBvaW50ZXIg YXJyYXkuCj4gKyAqIEVhY2ggYWRkZWQgZGV2aWNlIGlzIGlndF9kZXZpY2Ugc3RydWN0dXJlLCB3 aGljaCBjb250cmFyeSB0byB1ZGV2IGRldmljZQo+ICsgKiBoYXMgcHJvcGVydGllcyAvIHN5c2F0 dHJzIHN0b3JlZCBpbnNpZGUgaGFzaCB0YWJsZSBpbnN0ZWFkIG9mIGxpc3QuCj4gKyAqCj4gKyAq IEZ1bmN0aW9uIGl0ZXJhdGVzIG92ZXIgZGV2aWNlcyBvbiAnZHJtJyBzdWJzeXN0ZW0uIEZvciBl YWNoIGRybSBkZXZpY2UKPiArICogaXRzIHBhcmVudCBpcyB0YWtlbiAoYnVzIGRldmljZSkgYW5k IHN0b3JlZCBpbnNpZGUgc2FtZSBhcnJheS4KPiArICogRnVuY3Rpb24gc29ydHMgYWxsIGZvdW5k IGRldmljZXMgdG8ga2VlcCBzYW1lIG9yZGVyIG9mIGJ1cyBkZXZpY2VzCj4gKyAqIGZvciBwcm92 aWRpbmcgcHJlZGljdGFibGUgc2VhcmNoLgo+ICsgKi8KPiArc3RhdGljIHZvaWQgc2Nhbl9kcm1f ZGV2aWNlcyh2b2lkKQo+ICt7Cj4gKwlzdHJ1Y3QgdWRldiAqdWRldjsKPiArCXN0cnVjdCB1ZGV2 X2VudW1lcmF0ZSAqZW51bWVyYXRlOwo+ICsJc3RydWN0IHVkZXZfbGlzdF9lbnRyeSAqZGV2aWNl cywgKmRldl9saXN0X2VudHJ5Owo+ICsJc3RydWN0IGlndF9kZXZpY2UgKmRldjsKPiArCWludCBy ZXQ7Cj4gKwo+ICsJdWRldiA9IHVkZXZfbmV3KCk7Cj4gKwlpZ3RfYXNzZXJ0KHVkZXYpOwo+ICsK PiArCWVudW1lcmF0ZSA9IHVkZXZfZW51bWVyYXRlX25ldyh1ZGV2KTsKPiArCWlndF9hc3NlcnQo ZW51bWVyYXRlKTsKPiArCj4gKwlEQkcoIlNjYW5uaW5nIGRybSBzdWJzeXN0ZW1cbiIpOwo+ICsJ cmV0ID0gdWRldl9lbnVtZXJhdGVfYWRkX21hdGNoX3N1YnN5c3RlbShlbnVtZXJhdGUsICJkcm0i KTsKPiArCWlndF9hc3NlcnQoIXJldCk7Cj4gKwo+ICsJdWRldl9lbnVtZXJhdGVfYWRkX21hdGNo X3Byb3BlcnR5KGVudW1lcmF0ZSwgIkRFVk5BTUUiLCAiL2Rldi9kcmkvKiIpOwo+ICsJaWd0X2Fz c2VydCghcmV0KTsKPiArCj4gKwlyZXQgPSB1ZGV2X2VudW1lcmF0ZV9zY2FuX2RldmljZXMoZW51 bWVyYXRlKTsKPiArCWlndF9hc3NlcnQoIXJldCk7Cj4gKwo+ICsJZGV2aWNlcyA9IHVkZXZfZW51 bWVyYXRlX2dldF9saXN0X2VudHJ5KGVudW1lcmF0ZSk7Cj4gKwlpZiAoIWRldmljZXMpCj4gKwkJ cmV0dXJuOwo+ICsKPiArCXVkZXZfbGlzdF9lbnRyeV9mb3JlYWNoKGRldl9saXN0X2VudHJ5LCBk ZXZpY2VzKSB7Cj4gKwkJY29uc3QgY2hhciAqcGF0aDsKPiArCQlzdHJ1Y3QgdWRldl9kZXZpY2Ug KnVkZXZfZGV2Owo+ICsJCXN0cnVjdCBpZ3RfZGV2aWNlICppZGV2Owo+ICsKPiArCQlwYXRoID0g dWRldl9saXN0X2VudHJ5X2dldF9uYW1lKGRldl9saXN0X2VudHJ5KTsKPiArCQl1ZGV2X2RldiA9 IHVkZXZfZGV2aWNlX25ld19mcm9tX3N5c3BhdGgodWRldiwgcGF0aCk7Cj4gKwkJaWRldiA9IGln dF9kZXZpY2VfbmV3X2Zyb21fdWRldih1ZGV2X2Rldik7Cj4gKwkJdXBkYXRlX29yX2FkZF9wYXJl bnQodWRldl9kZXYsIGlkZXYpOwo+ICsJCWlndF9saXN0X2luc2VydF90YWlsKCZpZ3RfZGV2cy5h bGwsICZpZGV2LT5saW5rKTsKPiArCj4gKwkJdWRldl9kZXZpY2VfdW5yZWYodWRldl9kZXYpOwo+ ICsJfQo+ICsJdWRldl9lbnVtZXJhdGVfdW5yZWYoZW51bWVyYXRlKTsKPiArCXVkZXZfdW5yZWYo dWRldik7Cj4gKwo+ICsJc29ydF9hbGxfZGV2aWNlcygpOwo+ICsKPiArCWlndF9saXN0X2Zvcl9l YWNoKGRldiwgJmlndF9kZXZzLmFsbCwgbGluaykgewo+ICsJCXN0cnVjdCBpZ3RfZGV2aWNlICpk ZXZfZHVwID0gZHVwbGljYXRlX2RldmljZShkZXYpOwo+ICsJCWlndF9saXN0X2luc2VydF90YWls KCZpZ3RfZGV2cy5maWx0ZXJlZCwgJmRldl9kdXAtPmxpbmspOwo+ICsJfQo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBpZ3RfZGV2aWNlX2ZyZWUoc3RydWN0IGlndF9kZXZpY2UgKmRldikKPiArewo+ ICsJZnJlZShkZXYtPmRldm5vZGUpOwo+ICsJZnJlZShkZXYtPnN1YnN5c3RlbSk7Cj4gKwlmcmVl KGRldi0+c3lzcGF0aCk7Cj4gKwlmcmVlKGRldi0+ZHJtX2NhcmQpOwo+ICsJZnJlZShkZXYtPmRy bV9yZW5kZXIpOwo+ICsJZnJlZShkZXYtPnZlbmRvcik7Cj4gKwlmcmVlKGRldi0+ZGV2aWNlKTsK PiArCWdfaGFzaF90YWJsZV9kZXN0cm95KGRldi0+YXR0cnNfaHQpOwo+ICsJZ19oYXNoX3RhYmxl X2Rlc3Ryb3koZGV2LT5wcm9wc19odCk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBpZ3RfZGV2aWNl c19zY2FuCj4gKyAqIEBmb3JjZTogZW5mb3JjZSBzY2FubmluZyBkZXZpY2VzCj4gKyAqCj4gKyAq IEZ1bmN0aW9uIHNjYW5zIHVkZXYgaW4gc2VhcmNoIG9mIGdwdSBkZXZpY2VzLiBGb3IgZmlyc3Qg cnVuIGl0IGNhbiBiZQo+ICsgKiBjYWxsZWQgd2l0aCBAZm9yY2UgPSBmYWxzZS4gSWYgc29tZXRo aW5nIGNoYW5nZXMgZHVyaW5nIHRoZSB0aGUgdGVzdAo+ICsgKiBvciB0ZXN0IGRvZXMgc29tZSBt b2R1bGUgbG9hZGluZyAobmV3IGRybSBkZXZpY2VzIG9jY3VycyBkdXJpbmcgZXhlY3V0aW9uKQo+ ICsgKiBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBhZ2FpbiB3aXRoIEBmb3JjZSA9IHRydWUgdG8g cmVmcmVzaCBkZXZpY2UgYXJyYXkuCj4gKyAqLwo+ICt2b2lkIGlndF9kZXZpY2VzX3NjYW4oYm9v bCBmb3JjZSkKPiArewo+ICsJaWYgKGZvcmNlICYmIGlndF9kZXZzLmRldnNfc2Nhbm5lZCkgewo+ ICsJCXN0cnVjdCBpZ3RfZGV2aWNlICpkZXYsICp0bXA7Cj4gKwkJaWd0X2xpc3RfZm9yX2VhY2hf c2FmZShkZXYsIHRtcCwgJmlndF9kZXZzLmFsbCwgbGluaykgewo+ICsJCQlpZ3RfZGV2aWNlX2Zy ZWUoZGV2KTsKPiArCQkJZnJlZShkZXYpOwo+ICsJCX0KPiArCj4gKwkJaWd0X2RldnMuZGV2c19z Y2FubmVkID0gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJaWYgKGlndF9kZXZzLmRldnNfc2Nhbm5lZCkK PiArCQlyZXR1cm47Cj4gKwo+ICsJcHJlcGFyZV9zY2FuKCk7Cj4gKwlzY2FuX2RybV9kZXZpY2Vz KCk7Cj4gKwo+ICsJaWd0X2RldnMuZGV2c19zY2FubmVkID0gdHJ1ZTsKPiArfQo+ICsKPiArc3Rh dGljIGlubGluZSB2b2lkIF9wcl9zaW1wbGUoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdikK PiArewo+ICsJcHJpbnRmKCIgICAgJS0xNnM6ICVzXG4iLCBrLCB2KTsKPiArfQo+ICsKPiArc3Rh dGljIGlubGluZSB2b2lkIF9wcl9zaW1wbGUyKGNvbnN0IGNoYXIgKmssIGNvbnN0IGNoYXIgKnYx LCBjb25zdCBjaGFyICp2MikKPiArewo+ICsJcHJpbnRmKCIgICAgJS0xNnM6ICVzOiVzXG4iLCBr LCB2MSwgdjIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpZ3RfZGV2c19wcmludF9zaW1wbGUo c3RydWN0IGlndF9saXN0ICp2aWV3KQo+ICt7Cj4gKwlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2Owo+ ICsKPiArCWlmICghdmlldykKPiArCQlyZXR1cm47Cj4gKwo+ICsJaWYgKGlndF9saXN0X2VtcHR5 KHZpZXcpKSB7Cj4gKwkJcHJpbnRmKCJObyBHUFUgZGV2aWNlcyBmb3VuZFxuIik7Cj4gKwkJcmV0 dXJuOwo+ICsJfQo+ICsKPiArCWlndF9saXN0X2Zvcl9lYWNoKGRldiwgdmlldywgbGluaykgewo+ ICsJCXByaW50Zigic3lzOiVzXG4iLCBkZXYtPnN5c3BhdGgpOwo+ICsJCWlmIChkZXYtPnN1YnN5 c3RlbSkKPiArCQkJX3ByX3NpbXBsZSgic3Vic3lzdGVtIiwgZGV2LT5zdWJzeXN0ZW0pOwo+ICsJ CWlmIChkZXYtPmRybV9jYXJkKQo+ICsJCQlfcHJfc2ltcGxlKCJkcm0gY2FyZCIsIGRldi0+ZHJt X2NhcmQpOwo+ICsJCWlmIChkZXYtPmRybV9yZW5kZXIpCj4gKwkJCV9wcl9zaW1wbGUoImRybSBy ZW5kZXIiLCBkZXYtPmRybV9yZW5kZXIpOwo+ICsJCWlmIChpc19kcm1fc3Vic3lzdGVtKGRldikp IHsKPiArCQkJX3ByX3NpbXBsZTIoInBhcmVudCIsICJzeXMiLAo+ICsJCQkJICAgZGV2LT5wYXJl bnQtPnN5c3BhdGgpOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCWlmIChpc19wY2lfc3Vic3lzdGVtKGRl dikpIHsKPiArCQkJCV9wcl9zaW1wbGUoInZlbmRvciIsIGRldi0+dmVuZG9yKTsKPiArCQkJCV9w cl9zaW1wbGUoImRldmljZSIsIGRldi0+ZGV2aWNlKTsKPiArCQkJfQo+ICsJCX0KPiArCQlwcmlu dGYoIlxuIik7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBfcHJpbnRfa2V5 X3ZhbHVlKGNvbnN0IGNoYXIqIGssIGNvbnN0IGNoYXIgKnYpCj4gK3sKPiArCXByaW50ZigiJS0z MnM6ICVzXG4iLCBrLCB2KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcHJpbnRfaHQoR0hhc2hU YWJsZSAqaHQpCj4gK3sKPiArCUdMaXN0ICprZXlzID0gZ19oYXNoX3RhYmxlX2dldF9rZXlzKGh0 KTsKPiArCj4gKwlrZXlzID0gZ19saXN0X3NvcnQoa2V5cywgKEdDb21wYXJlRnVuYykgc3RyY21w KTsKPiArCXdoaWxlIChrZXlzKSB7Cj4gKwkJY2hhciAqayA9IChjaGFyICopIGtleXMtPmRhdGE7 Cj4gKwkJY2hhciAqdiA9IGdfaGFzaF90YWJsZV9sb29rdXAoaHQsIGspOwo+ICsKPiArCQlfcHJp bnRfa2V5X3ZhbHVlKGssIHYpOwo+ICsJCWtleXMgPSBnX2xpc3RfbmV4dChrZXlzKTsKPiArCX0K PiArCWdfbGlzdF9mcmVlKGtleXMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpZ3RfZGV2c19w cmludF9kZXRhaWwoc3RydWN0IGlndF9saXN0ICp2aWV3KQo+ICt7Cj4gKwlzdHJ1Y3QgaWd0X2Rl dmljZSAqZGV2Owo+ICsKPiArCWlmICghdmlldykKPiArCQlyZXR1cm47Cj4gKwo+ICsJaWYgKGln dF9saXN0X2VtcHR5KHZpZXcpKSB7Cj4gKwkJcHJpbnRmKCJObyBHUFUgZGV2aWNlcyBmb3VuZFxu Iik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWlndF9saXN0X2Zvcl9lYWNoKGRldiwgdmll dywgbGluaykgewo+ICsJCXByaW50ZigiPT09PT09PT09PSAlczolcyA9PT09PT09PT09XG4iLAo+ ICsJCSAgICAgICBkZXYtPnN1YnN5c3RlbSwgZGV2LT5zeXNwYXRoKTsKPiArCQlpZiAoIWlzX2Ry bV9zdWJzeXN0ZW0oZGV2KSkgewo+ICsJCQlfcHJpbnRfa2V5X3ZhbHVlKCJjYXJkIGRldmljZSIs IGRldi0+ZHJtX2NhcmQpOwo+ICsJCQlfcHJpbnRfa2V5X3ZhbHVlKCJyZW5kZXIgZGV2aWNlIiwg ZGV2LT5kcm1fcmVuZGVyKTsKPiArCQl9Cj4gKwo+ICsJCXByaW50ZigiXG5bcHJvcGVydGllc11c biIpOwo+ICsJCXByaW50X2h0KGRldi0+cHJvcHNfaHQpOwo+ICsJCXByaW50ZigiXG5bYXR0cmli dXRlc11cbiIpOwo+ICsJCXByaW50X2h0KGRldi0+YXR0cnNfaHQpOwo+ICsJCXByaW50ZigiXG4i KTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBwcmludF9mdW5jIHsKPiArCXZvaWQg KCpwcm4pKHN0cnVjdCBpZ3RfbGlzdCAqdmlldyk7Cj4gK30gcHJpbnRfZnVuY3Rpb25zW10gPSB7 Cj4gKwlbSUdUX1BSSU5UX1NJTVBMRV0gPSB7IC5wcm4gPSBpZ3RfZGV2c19wcmludF9zaW1wbGUg fSwKPiArCVtJR1RfUFJJTlRfREVUQUlMXSA9IHsgLnBybiA9IGlndF9kZXZzX3ByaW50X2RldGFp bCB9LAo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIGlndF9kZXZpY2VzX3ByaW50Cj4gKyAqIEBwcmlu dHR5cGU6IElHVF9QUklOVF9TSU1QTEUgb3IgSUdUX1BSSU5UX0RFVEFJTAo+ICsgKgo+ICsgKiBG dW5jdGlvbiBjYW4gYmUgdXNlZCBieSBleHRlcm5hbCB0b29sIHRvIHByaW50IGRldmljZSBhcnJh eSBpbiBzaW1wbGUKPiArICogb3IgZGV0YWlsZWQgZm9ybS4gVGhpcyBmdW5jdGlvbiBpcyBhZGRl ZCBoZXJlIHRvIGF2b2lkIGV4cG9zaW5nCj4gKyAqIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRh dGEgc3RydWN0dXJlcy4KPiArICovCj4gK3ZvaWQgaWd0X2RldmljZXNfcHJpbnQoZW51bSBpZ3Rf ZGV2aWNlc19wcmludF90eXBlIHByaW50dHlwZSkKPiArewo+ICsJcHJpbnRfZnVuY3Rpb25zW3By aW50dHlwZV0ucHJuKCZpZ3RfZGV2cy5maWx0ZXJlZCk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBp Z3RfZGV2aWNlc19wcmludF92ZW5kb3JzCj4gKyAqCj4gKyAqIFByaW50IHBjaSBpZCAtPiB2ZW5k b3IgbWFwcGluZ3MuIFZlbmRvciBuYW1lcyBwcmludGVkIGJ5IHRoaXMgZnVuY3Rpb24KPiArICog Y2FuIGJlIHVzZWQgZm9yIGZpbHRlcnMgbGlrZSBwY2kgd2hpY2ggYWxsb3dzIHBhc3NpbmcgdmVu ZG9yIC0gbGlrZQo+ICsgKiB2ZW5kb3IgaWQgKDgwODYpIG9yIGFzIGEgc3RyaW5nIChJbnRlbCku Cj4gKyAqLwo+ICt2b2lkIGlndF9kZXZpY2VzX3ByaW50X3ZlbmRvcnModm9pZCkKPiArewo+ICsJ cHJpbnRmKCJSZWNvZ25pemVkIHZlbmRvcnM6XG4iKTsKPiArCXByaW50ZigiJS04cyAlLTE2c1xu IiwgIlBDSSBJRCIsICJ2ZW5kb3IiKTsKPiArCWZvciAodHlwZW9mKCpwY2lfdmVuZG9yX21hcHBp bmcpICp2bSA9IHBjaV92ZW5kb3JfbWFwcGluZzsgdm0tPm5hbWU7IHZtKyspIHsKPiArCQlwcmlu dGYoIiUtOHMgJS0xNnNcbiIsIHZtLT52ZW5kb3JfaWQsIHZtLT5uYW1lKTsKPiArCX0KPiArfQo+ ICsKPiArc3RydWN0IGZpbHRlcjsKPiArCj4gKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KPiArc3Ry dWN0IGZpbHRlcl9jbGFzcyB7Cj4gKwlzdHJ1Y3QgaWd0X2xpc3QgKigqZmlsdGVyX2Z1bmN0aW9u KShjb25zdCBzdHJ1Y3QgZmlsdGVyX2NsYXNzICpmY2xzLAo+ICsJCQkJCSAgICBjb25zdCBzdHJ1 Y3QgZmlsdGVyICpmaWx0ZXIpOwo+ICsJYm9vbCAoKmlzX3ZhbGlkKShjb25zdCBzdHJ1Y3QgZmls dGVyX2NsYXNzICpmY2xzLAo+ICsJCQkgY29uc3Qgc3RydWN0IGZpbHRlciAqZmlsdGVyKTsKPiAr CWNvbnN0IGNoYXIgKm5hbWU7Cj4gKwljb25zdCBjaGFyICpoZWxwOwo+ICsJY29uc3QgY2hhciAq ZGV0YWlsOwo+ICt9Owo+ICsKPiArI2RlZmluZSBGSUxURVJfTkFNRV9MRU4gMzIKPiArI2RlZmlu ZSBGSUxURVJfREFUQV9MRU4gMjU2Cj4gKwo+ICtzdHJ1Y3QgZmlsdGVyIHsKPiArCXN0cnVjdCBm aWx0ZXJfY2xhc3MgKmNsYXNzOwo+ICsKPiArCWNoYXIgcmF3X2RhdGFbRklMVEVSX0RBVEFfTEVO XTsKPiArCj4gKwlzdHJ1Y3Qgewo+ICsJCWNoYXIgKnZlbmRvcjsKPiArCQljaGFyICpkZXZpY2U7 Cj4gKwkJY2hhciAqY2FyZDsKPiArCQljaGFyICpkcm07Cj4gKwkJY2hhciAqZHJpdmVyOwo+ICsJ fSBkYXRhOwo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgZmlsbF9maWx0ZXJfZGF0YShzdHJ1Y3Qg ZmlsdGVyICpmaWx0ZXIsIGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUpCj4gK3sK PiArCWlmIChrZXkgPT0gTlVMTCB8fCB2YWx1ZSA9PSBOVUxMKSB7Cj4gKwkJcmV0dXJuOwo+ICsJ fQo+ICsKPiArI2RlZmluZSBfX2ZpbGxfa2V5KG5hbWUpIGlmIChzdHJjbXAoa2V5LCAjbmFtZSkg PT0gMCkgXAo+ICsJZmlsdGVyLT5kYXRhLm5hbWUgPSBzdHJkdXAodmFsdWUpCj4gKwlfX2ZpbGxf a2V5KHZlbmRvcik7Cj4gKwlfX2ZpbGxfa2V5KGRldmljZSk7Cj4gKwlfX2ZpbGxfa2V5KGNhcmQp Owo+ICsJX19maWxsX2tleShkcm0pOwo+ICsJX19maWxsX2tleShkcml2ZXIpOwo+ICsjdW5kZWYg X19maWxsX2tleQo+ICsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc3BsaXRfZmlsdGVyX2RhdGEo c3RydWN0IGZpbHRlciAqZmlsdGVyKQo+ICt7Cj4gKwljaGFyICpwcm9wZXJ0eSwgKmtleSwgKmRh dGEsICpkdXA7Cj4gKwo+ICsJZHVwID0gc3RyZHVwKGZpbHRlci0+cmF3X2RhdGEpOwo+ICsJZGF0 YSA9IGR1cDsKPiArCj4gKwl3aGlsZSAoKHByb3BlcnR5ID0gc3Ryc2VwKCZkYXRhLCAiLCIpKSkg ewo+ICsJCWtleSA9IHN0cnNlcCgmcHJvcGVydHksICI9Iik7Cj4gKwkJZmlsbF9maWx0ZXJfZGF0 YShmaWx0ZXIsIGtleSwgcHJvcGVydHkpOwo+ICsJfQo+ICsKPiArCWZyZWUoZHVwKTsKPiArfQo+ ICsKPiArc3RhdGljIHN0cnVjdCBmaWx0ZXJfY2xhc3MgKmdldF9maWx0ZXJfY2xhc3MoY29uc3Qg Y2hhciAqY2xhc3NfbmFtZSwgY29uc3Qgc3RydWN0IGZpbHRlciAqZmlsdGVyKTsKPiArCj4gK3N0 YXRpYyBib29sIHBhcnNlX2ZpbHRlcihjb25zdCBjaGFyICpmc3RyLCBzdHJ1Y3QgZmlsdGVyICpm aWx0ZXIpCj4gK3sKPiArCWNoYXIgY2xhc3NfbmFtZVszMl07Cj4gKwlpZiAoIWZzdHIgfHwgIWZp bHRlcikKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJbWVtc2V0KGZpbHRlciwgMCwgc2l6ZW9m KCpmaWx0ZXIpKTsKPiArCj4gKwo+ICsJaWYgKHNzY2FuZihmc3RyLCAiJTMxW146XTolMjU1cyIs IGNsYXNzX25hbWUsIGZpbHRlci0+cmF3X2RhdGEpID49IDEpIHsKPiArCQlmaWx0ZXItPmNsYXNz ID0gZ2V0X2ZpbHRlcl9jbGFzcyhjbGFzc19uYW1lLCBmaWx0ZXIpOwo+ICsJCXNwbGl0X2ZpbHRl cl9kYXRhKGZpbHRlcik7Cj4gKwkJcmV0dXJuIHRydWU7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGZh bHNlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBpc192ZW5kb3JfbWF0Y2hlZChzdHJ1Y3QgaWd0 X2RldmljZSAqZGV2LCBjb25zdCBjaGFyICp2ZW5kb3IpCj4gK3sKPiArCWNvbnN0IGNoYXIgKnZl bmRvcl9pZDsKPiArCj4gKwlpZiAoIWRldi0+dmVuZG9yIHx8ICF2ZW5kb3IpCj4gKwkJcmV0dXJu IGZhbHNlOwo+ICsKPiArCS8qIEZpcnN0IHdlIGNvbXBhcmUgdmVuZG9yIGlkLCBsaWtlIDgwODYg Ki8KPiArCWlmICghc3RyY2FzZWNtcChkZXYtPnZlbmRvciwgdmVuZG9yKSkKPiArCQlyZXR1cm4g dHJ1ZTsKPiArCj4gKwkvKiBMaWtlbHkgd2UgaGF2ZSB2ZW5kb3Igc3RyaW5nIGluc3RlYWQgb2Yg aWQgKi8KPiArCXZlbmRvcl9pZCA9IGdldF9wY2lfdmVuZG9yX2lkX2J5X25hbWUodmVuZG9yKTsK PiArCWlmICghdmVuZG9yX2lkKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlyZXR1cm4gIXN0 cmNhc2VjbXAoZGV2LT52ZW5kb3IsIHZlbmRvcl9pZCk7Cj4gK30KPiArCj4gKy8qIEZpbHRlciB3 aGljaCBtYXRjaGVzIHN1YnN5c3RlbTovc3lzLy4uLiBwYXRoLgo+ICsgKiBVc2VkIGFzIGZpcnN0 IGZpbHRlciBpbiBjaGFpbi4KPiArICovCj4gK3N0YXRpYyBzdHJ1Y3QgaWd0X2xpc3QgKmZpbHRl cl9zeXMoY29uc3Qgc3RydWN0IGZpbHRlcl9jbGFzcyAqZmNscywKPiArCQkJCSAgIGNvbnN0IHN0 cnVjdCBmaWx0ZXIgKmZpbHRlcikKPiArewo+ICsJc3RydWN0IGlndF9kZXZpY2UgKmRldjsKPiAr CSh2b2lkKSBmY2xzOwo+ICsKPiArCURCRygiZmlsdGVyIHN5c1xuIik7Cj4gKwlpZiAoIXN0cmxl bihmaWx0ZXItPnJhd19kYXRhKSkKPiArCQlyZXR1cm4gJmlndF9kZXZzLmZpbHRlcmVkOwo+ICsK PiArCWRldiA9IGlndF9kZXZpY2VfZnJvbV9zeXNwYXRoKGZpbHRlci0+cmF3X2RhdGEpOwo+ICsJ aWYgKGRldikgewo+ICsJCXN0cnVjdCBpZ3RfZGV2aWNlICpkdXAgPSBkdXBsaWNhdGVfZGV2aWNl KGRldik7Cj4gKwkJaWd0X2xpc3RfaW5zZXJ0X3RhaWwoJmlndF9kZXZzLmZpbHRlcmVkLCAmZHVw LT5saW5rKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gJmlndF9kZXZzLmZpbHRlcmVkOwo+ICt9Cj4g Kwo+ICsvKiBGaW5kIGRybSBkZXZpY2UgdXNpbmcgZGlyZWN0IHBhdGggdG8gL2Rldi9kcmkvLgo+ ICsgKiBJdCBleHRlbmRzIGZpbHRlcl9zeXMgdG8gYWxsb3cgdXNpbmcgZHJtOi9kZXYvZHJpL2Nh cmRYIGFuZAo+ICsgKiBkcm06L2Rldi9kcmkvcmVuZGVyRFggZmlsdGVyIHN5bnRheC4KPiArICov Cj4gK3N0YXRpYyBzdHJ1Y3QgaWd0X2xpc3QgKmZpbHRlcl9kcm0oY29uc3Qgc3RydWN0IGZpbHRl cl9jbGFzcyAqZmNscywKPiArCQkJCSAgIGNvbnN0IHN0cnVjdCBmaWx0ZXIgKmZpbHRlcikKPiAr ewo+ICsJc3RydWN0IGlndF9kZXZpY2UgKmRldjsKPiArCSh2b2lkKSBmY2xzOwo+ICsKPiArCURC RygiZmlsdGVyIGRybVxuIik7Cj4gKwlpZiAoIXN0cmxlbihmaWx0ZXItPnJhd19kYXRhKSkKPiAr CQlyZXR1cm4gJmlndF9kZXZzLmZpbHRlcmVkOwo+ICsKPiArCWlndF9saXN0X2Zvcl9lYWNoKGRl diwgJmlndF9kZXZzLmFsbCwgbGluaykgewo+ICsJCWlmICghaXNfZHJtX3N1YnN5c3RlbShkZXYp KQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJaWYgKHN0cmVxdWFsKGRldi0+c3lzcGF0aCwgZmls dGVyLT5yYXdfZGF0YSkgfHwKPiArCQkJc3RyZXF1YWwoZGV2LT5kcm1fY2FyZCwgZmlsdGVyLT5y YXdfZGF0YSkgfHwKPiArCQkJc3RyZXF1YWwoZGV2LT5kcm1fcmVuZGVyLCBmaWx0ZXItPnJhd19k YXRhKSkgewo+ICsJCQlzdHJ1Y3QgaWd0X2RldmljZSAqZHVwID0gZHVwbGljYXRlX2RldmljZShk ZXYpOwo+ICsJCQlpZ3RfbGlzdF9pbnNlcnRfdGFpbCgmaWd0X2RldnMuZmlsdGVyZWQsICZkdXAt PmxpbmspOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsKPiArCXJldHVybiAmaWd0 X2RldnMuZmlsdGVyZWQ7Cj4gK30KPiArCj4gKy8qIEZpbmQgYXBwcm9wcmlhdGUgcGNpIGRldmlj ZSBtYXRjaGluZyB2ZW5kb3IvZGV2aWNlL2NhcmQgZmlsdGVyIGFyZ3VtZW50cy4KPiArICovCj4g K3N0YXRpYyBzdHJ1Y3QgaWd0X2xpc3QgKmZpbHRlcl9wY2koY29uc3Qgc3RydWN0IGZpbHRlcl9j bGFzcyAqZmNscywKPiArCQkJCSAgIGNvbnN0IHN0cnVjdCBmaWx0ZXIgKmZpbHRlcikKPiArewo+ ICsJc3RydWN0IGlndF9kZXZpY2UgKmRldjsKPiArCWludCBjYXJkID0gLTE7Cj4gKwkodm9pZCkg ZmNsczsKPiArCj4gKwlEQkcoImZpbHRlciBwY2lcbiIpOwo+ICsKPiArCWlmIChmaWx0ZXItPmRh dGEuY2FyZCkgewo+ICsJCXNzY2FuZihmaWx0ZXItPmRhdGEuY2FyZCwgIiVkIiwgJmNhcmQpOwo+ ICsJCWlmIChjYXJkIDwgMCkgewo+ICsJCQlyZXR1cm4gJmlndF9kZXZzLmZpbHRlcmVkOwo+ICsJ CX0KPiArCX0gZWxzZSB7Cj4gKwkJY2FyZCA9IDA7Cj4gKwl9Cj4gKwo+ICsJaWd0X2xpc3RfZm9y X2VhY2goZGV2LCAmaWd0X2RldnMuYWxsLCBsaW5rKSB7Cj4gKwkJaWYgKCFpc19wY2lfc3Vic3lz dGVtKGRldikpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQkvKiBTa2lwIGlmICd2ZW5kb3InIGRv ZXNuJ3QgbWF0Y2ggKGhleCBvciBuYW1lKSAqLwo+ICsJCWlmIChmaWx0ZXItPmRhdGEudmVuZG9y ICYmICFpc192ZW5kb3JfbWF0Y2hlZChkZXYsIGZpbHRlci0+ZGF0YS52ZW5kb3IpKQo+ICsJCQlj b250aW51ZTsKPiArCj4gKwkJLyogU2tpcCBpZiAnZGV2aWNlJyBkb2Vzbid0IG1hdGNoICovCj4g KwkJaWYgKGZpbHRlci0+ZGF0YS5kZXZpY2UgJiYgc3RyY2FzZWNtcChmaWx0ZXItPmRhdGEuZGV2 aWNlLCBkZXYtPmRldmljZSkpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQkvKiBXZSBnZXQgbi10 aCBjYXJkICovCj4gKwkJaWYgKCFjYXJkKSB7Cj4gKwkJCXN0cnVjdCBpZ3RfZGV2aWNlICpkdXAg PSBkdXBsaWNhdGVfZGV2aWNlKGRldik7Cj4gKwkJCWlndF9saXN0X2luc2VydF90YWlsKCZpZ3Rf ZGV2cy5maWx0ZXJlZCwgJmR1cC0+bGluayk7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCQljYXJk LS07Cj4gKwl9Cj4gKwo+ICsJREJHKCJGaWx0ZXIgcGNpIGZpbHRlcmVkIHNpemU6ICVkXG4iLCBp Z3RfbGlzdF9sZW5ndGgoJmlndF9kZXZzLmZpbHRlcmVkKSk7Cj4gKwo+ICsJcmV0dXJuICZpZ3Rf ZGV2cy5maWx0ZXJlZDsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgc3lzX3BhdGhfdmFsaWQoY29u c3Qgc3RydWN0IGZpbHRlcl9jbGFzcyAqZmNscywKPiArCQkJICAgY29uc3Qgc3RydWN0IGZpbHRl ciAqZmlsdGVyKQo+ICt7Cj4gKwlzdHJ1Y3Qgc3RhdCBzdDsKPiArCj4gKwlpZiAoc3RhdChmaWx0 ZXItPnJhd19kYXRhLCAmc3QpKSB7Cj4gKwkJaWd0X3dhcm4oInN5c19wYXRoX3ZhbGlkOiBzeXNw YXRoIFslc10sIGVycjogJXNcbiIsCj4gKwkJCSBmaWx0ZXItPnJhd19kYXRhLCBzdHJlcnJvcihl cnJubykpOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArCj4gKwlyZXR1cm4gdHJ1ZTsKPiAr fQo+ICsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZmlsdGVyX2NsYXNzIGZpbHRlcl9kZWZpbml0aW9u X2xpc3RbXSA9IHsKPiArCXsKPiArCQkubmFtZSA9ICJzeXMiLAo+ICsJCS5pc192YWxpZCA9IHN5 c19wYXRoX3ZhbGlkLAo+ICsJCS5maWx0ZXJfZnVuY3Rpb24gPSBmaWx0ZXJfc3lzLAo+ICsJCS5o ZWxwID0gInN5czovc3lzL2RldmljZXMvcGNpMDAwMDowMC8wMDAwOjAwOjAyLjAiLAo+ICsJCS5k ZXRhaWwgPSAiZmluZCBkZXZpY2UgYnl0IGl0cyBzeXNmcyBwYXRoXG4iLAo+ICsJfSwKPiArCXsK PiArCQkubmFtZSA9ICJkcm0iLAo+ICsJCS5maWx0ZXJfZnVuY3Rpb24gPSBmaWx0ZXJfZHJtLAo+ ICsJCS5oZWxwID0gImRybTovZGV2L2RyaS8qIHBhdGgiLAo+ICsJCS5kZXRhaWwgPSAiZmluZCBk cm0gZGV2aWNlIGJ5IC9kZXYvZHJpLyogbm9kZVxuIiwKPiArCX0sCj4gKwl7Cj4gKwkJLm5hbWUg PSAicGNpIiwKPiArCQkuZmlsdGVyX2Z1bmN0aW9uID0gZmlsdGVyX3BjaSwKPiArCQkuaGVscCA9 ICJwY2k6W3ZlbmRvcj0lMDR4L25hbWVdWyxkZXZpY2U9JTA0eF1bLGNhcmQ9JWRdIiwKPiArCQku ZGV0YWlsID0gInZlbmRvciBpcyBoZXggbnVtYmVyIG9yIHZlbmRvciBuYW1lXG4iLAo+ICsJfSwK PiArCXsKPiArCQkubmFtZSA9IE5VTEwsCj4gKwl9LAo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVj dCBmaWx0ZXJfY2xhc3MgKmdldF9maWx0ZXJfY2xhc3MoY29uc3QgY2hhciAqY2xhc3NfbmFtZSwg Y29uc3Qgc3RydWN0IGZpbHRlciAqZmlsdGVyKQo+ICt7Cj4gKwlzdHJ1Y3QgZmlsdGVyX2NsYXNz ICpmY2xzID0gTlVMTDsKPiArCWludCBpID0gMDsKPiArCj4gKwl3aGlsZSAoKGZjbHMgPSAmZmls dGVyX2RlZmluaXRpb25fbGlzdFtpKytdKS0+bmFtZSAhPSBOVUxMKSB7Cj4gKwkJaWYgKHN0cmNt cChjbGFzc19uYW1lLCBmY2xzLT5uYW1lKSA9PSAwKQo+ICsJCQlyZXR1cm4gZmNsczsKPiArCX0K PiArCj4gKwlyZXR1cm4gTlVMTDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIEBpZ3RfZGV2aWNlX3By aW50X2ZpbHRlcl90eXBlcwo+ICsgKgo+ICsgKiBQcmludCBhbGwgZmlsdGVycyBzeW50YXggZm9y IGRldmljZSBzZWxlY3Rpb24uCj4gKyAqLwo+ICt2b2lkIGlndF9kZXZpY2VfcHJpbnRfZmlsdGVy X3R5cGVzKHZvaWQpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBmaWx0ZXJfY2xhc3MgKmZpbHRlciA9 IE5VTEw7Cj4gKwlpbnQgaSA9IDA7Cj4gKwo+ICsJcHJpbnRmKCJGaWx0ZXIgdHlwZXM6XG4tLS1c biIpOwo+ICsJcHJpbnRmKCIlLTEycyAgJXNcbi0tLVxuIiwgImZpbHRlciIsICJzeW50YXgiKTsK PiArCj4gKwl3aGlsZSAoKGZpbHRlciA9ICZmaWx0ZXJfZGVmaW5pdGlvbl9saXN0W2krK10pLT5u YW1lICE9IE5VTEwpIHsKPiArCQlwcmludGYoIiUtMTJzICAlc1xuIiwgZmlsdGVyLT5uYW1lLCBm aWx0ZXItPmhlbHApOwo+ICsJCXByaW50ZigiJS0xMnMgICVzXG4iLCAiIiwgZmlsdGVyLT5kZXRh aWwpOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgY2hhciAqZGV2aWNlX2ZpbHRlcjsKPiArCj4g Ky8qKgo+ICsgKiBpZ3RfZGV2aWNlX2lzX2ZpbHRlcl9zZXQKPiArICoKPiArICogUmV0dXJucyB3 aGV0aGVyIHdlIGhhdmUgYSBmaWx0ZXIgc2V0Lgo+ICsgKi8KPiArYm9vbCBpZ3RfZGV2aWNlX2lz X2ZpbHRlcl9zZXQodm9pZCkKPiArewo+ICsJcmV0dXJuIGRldmljZV9maWx0ZXIgIT0gTlVMTDsK PiArfQo+ICsKPiArLyogQ2hlY2sgZG9lcyBmaWx0ZXIgaXMgdmFsaWQuIEl0IGNoZWNrczoKPiAr ICogMS4gL3N5cy8uLi4gcGF0aCBmaXJzdAo+ICsgKiAyLiBmaWx0ZXIgbmFtZSBmcm9tIGZpbHRl ciBkZWZpbml0aW9uCj4gKyAqLwo+ICtzdGF0aWMgYm9vbCBpc19maWx0ZXJfdmFsaWQoY29uc3Qg Y2hhciAqZnN0cikKPiArewo+ICsJc3RydWN0IGZpbHRlciBmaWx0ZXI7Cj4gKwlpbnQgcmV0Owo+ ICsKPiArCXJldCA9IHBhcnNlX2ZpbHRlcihmc3RyLCAmZmlsdGVyKTsKPiArCWlmICghcmV0KQo+ ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlpZiAoZmlsdGVyLmNsYXNzID09IE5VTEwpIHsKPiAr CQlpZ3Rfd2FybigiTm8gZmlsdGVyIG1hdGNoaW5nIFslczolc11cbiIsIGZpbHRlci5jbGFzcy0+ bmFtZSwgZmlsdGVyLnJhd19kYXRhKTsKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJ aWYgKGZpbHRlci5jbGFzcy0+aXNfdmFsaWQgIT0gTlVMTCAmJiAhZmlsdGVyLmNsYXNzLT5pc192 YWxpZChmaWx0ZXIuY2xhc3MsICZmaWx0ZXIpKQo+ICsJewo+ICsJCWlndF93YXJuKCJGaWx0ZXIg bm90IHZhbGlkIFslczolc11cbiIsIGZpbHRlci5jbGFzcy0+bmFtZSwgZmlsdGVyLnJhd19kYXRh KTsKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiAr Cj4gKy8qKgo+ICsgKiBpZ3RfZGV2aWNlX2ZpbHRlcl9zZXQKPiArICogQGZpbHRlcjogZmlsdGVy IHRoYXQgc2hvdWxkIGJlIHNldCBnbG9iYWxseQo+ICsgKgo+ICsgKiBSZXR1cm5zIG51bWJlciBv ZiBmaWx0ZXJzIGFkZGVkIHRvIGZpbHRlciBhcnJheS4gQ2FuIGJlIGdyZWF0ZXIgdGhhbgo+ICsg KiAxIGlmIEBmaWx0ZXJzIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgZmlsdGVyIHNlcGFyYXRlZCBi eSBzZW1pY29sb24uCj4gKyAqLwo+ICt2b2lkIGlndF9kZXZpY2VfZmlsdGVyX3NldChjb25zdCBj aGFyICpmaWx0ZXIpCj4gK3sKPiArCWlmICghaXNfZmlsdGVyX3ZhbGlkKGZpbHRlcikpIHsKPiAr CQlpZ3Rfd2FybigiSW52YWxpZCBmaWx0ZXI6ICVzXG4iLCBmaWx0ZXIpOwo+ICsJCXJldHVybjsK PiArCX0KPiArCj4gKwlkZXZpY2VfZmlsdGVyID0gc3RyZHVwKGZpbHRlcik7Cj4gK30KPiArCj4g Ky8qKgo+ICsgKiBpZ3RfZGV2aWNlX2ZpbHRlcl9mcmVlCj4gKyAqCj4gKyAqIEZyZWUgdGhlIGZp bHRlciB0aGF0IHdlIHN0b3JlIGludGVybmFsbHksIGVmZmVjdGl2ZWx5IGluc2V0dGluZyBpdC4K PiArICovCj4gK3ZvaWQgaWd0X2RldmljZV9maWx0ZXJfZnJlZSh2b2lkKQo+ICt7Cj4gKwlpZiAo ZGV2aWNlX2ZpbHRlciAhPSBOVUxMKQo+ICsJCWZyZWUoZGV2aWNlX2ZpbHRlcik7Cj4gK30KPiAr Cj4gKy8qKgo+ICsgKiBpZ3RfZGV2aWNlX2ZpbHRlcl9nZXQKPiArICoKPiArICogUmV0dXJucyBm aWx0ZXIgc3RyaW5nIG9yIE5VTEwgaWYgbm90IHNldAo+ICsgKi8KPiArY29uc3QgY2hhciAqaWd0 X2RldmljZV9maWx0ZXJfZ2V0KHZvaWQpCj4gK3sKPiArCXJldHVybiBkZXZpY2VfZmlsdGVyOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBpZ3RfZGV2aWNlX2ZpbHRlcl9hcHBseShjb25zdCBjaGFy ICpmc3RyKQo+ICt7Cj4gKwlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2LCAqdG1wOwo+ICsJc3RydWN0 IGZpbHRlciBmaWx0ZXI7Cj4gKwlib29sIHJldDsKPiArCj4gKwlpZiAoIWZzdHIpCj4gKwkJcmV0 dXJuIGZhbHNlOwo+ICsKPiArCXJldCA9IHBhcnNlX2ZpbHRlcihmc3RyLCAmZmlsdGVyKTsKPiAr CWlmICghcmV0KSB7Cj4gKwkJaWd0X3dhcm4oIkNhbid0IHNwbGl0IGZpbHRlciBbJXNdXG4iLCBm c3RyKTsKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJLyogQ2xlYW4gdGhlIGZpbHRl cmVkIGxpc3QgKi8KPiArCWlndF9saXN0X2Zvcl9lYWNoX3NhZmUoZGV2LCB0bXAsICZpZ3RfZGV2 cy5maWx0ZXJlZCwgbGluaykgewo+ICsJCWlndF9saXN0X3JlbW92ZSgmZGV2LT5saW5rKTsKPiAr CQlmcmVlKGRldik7Cj4gKwl9Cj4gKwo+ICsJLyogSWYgZmlsdGVyLmRhdGEgY29udGFpbnMgIi9z eXMiIHVzZSBkaXJlY3QgcGF0aCBpbnN0ZWFkCj4gKwkgKiBjb250ZXh0dWFsIGZpbHRlci4KPiAr CSAqLwo+ICsKPiArCWlmICghZmlsdGVyLmNsYXNzKSB7Cj4gKwkJaWd0X3dhcm4oIk5vIGZpbHRl ciBtYXRjaGluZyBbJXM6JXNdXG4iLCBmaWx0ZXIuY2xhc3MtPm5hbWUsIGZpbHRlci5yYXdfZGF0 YSk7Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJfQo+ICsJZmlsdGVyLmNsYXNzLT5maWx0ZXJfZnVu Y3Rpb24oZmlsdGVyLmNsYXNzLCAmZmlsdGVyKTsKPiArCj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ ICsKPiArLyoqCj4gKyAqIGlndF9kZXZpY2VfY2FyZF9tYXRjaAo+ICsgKiBAZmlsdGVyOiBmaWx0 ZXIgc3RyaW5nCj4gKyAqIEBjYXJkOiBwb2ludGVyIHRvIGlndF9kZXZpY2VfY2FyZCBzdHJ1Y3QK PiArICoKPiArICogRnVuY3Rpb24gYXBwbGllcyBmaWx0ZXIgdG8gbWF0Y2ggZGV2aWNlIGZyb20g ZGV2aWNlIGFycmF5Lgo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsgKiBmYWxzZSAtIG5vIGNhcmQg cG9pbnRlciB3YXMgcGFzc2VkIG9yIGNhcmQgd2Fzbid0IG1hdGNoZWQsCj4gKyAqIHRydWUgLSBj YXJkIG1hdGNoZWQgYW5kIHJldHVybmVkLgo+ICsgKi8KPiArYm9vbCBpZ3RfZGV2aWNlX2NhcmRf bWF0Y2goY29uc3QgY2hhciAqZmlsdGVyLCBzdHJ1Y3QgaWd0X2RldmljZV9jYXJkICpjYXJkKQo+ ICt7Cj4gKwlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2ID0gTlVMTDsKPiArCj4gKwlpZiAoIWNhcmQp Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJbWVtc2V0KGNhcmQsIDAsIHNpemVvZigqY2FyZCkpOwo+ ICsKPiArCWlndF9kZXZpY2VzX3NjYW4oZmFsc2UpOwo+ICsKPiArCWlmIChpZ3RfZGV2aWNlX2Zp bHRlcl9hcHBseShmaWx0ZXIpID09IGZhbHNlKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlp ZiAoaWd0X2xpc3RfZW1wdHkoJmlndF9kZXZzLmZpbHRlcmVkKSkKPiArCQlyZXR1cm4gZmFsc2U7 Cj4gKwo+ICsJLyogV2UgdGFrZSBmaXJzdCBvbmUgaWYgbW9yZSB0aGFuIG9uZSBjYXJkIG1hdGNo ZXMgZmlsdGVyICovCj4gKwlkZXYgPSBpZ3RfbGlzdF9maXJzdF9lbnRyeSgmaWd0X2RldnMuZmls dGVyZWQsIGRldiwgbGluayk7Cj4gKwo+ICsJaWYgKGRldi0+c3Vic3lzdGVtICE9IE5VTEwpCj4g KwkJc3RybmNweShjYXJkLT5zdWJzeXN0ZW0sIGRldi0+c3Vic3lzdGVtLAo+ICsJCQkgICAgIHNp emVvZihjYXJkLT5zdWJzeXN0ZW0pIC0gMSk7Cj4gKwo+ICsJaWYgKGRldi0+ZHJtX2NhcmQgIT0g TlVMTCkKPiArCQlzdHJuY3B5KGNhcmQtPmNhcmQsIGRldi0+ZHJtX2NhcmQsCj4gKwkJCSAgICAg c2l6ZW9mKGNhcmQtPmNhcmQpIC0gMSk7Cj4gKwo+ICsJaWYgKGRldi0+ZHJtX3JlbmRlciAhPSBO VUxMKQo+ICsJCXN0cm5jcHkoY2FyZC0+cmVuZGVyLCBkZXYtPmRybV9yZW5kZXIsCj4gKwkJCSAg ICAgc2l6ZW9mKGNhcmQtPnJlbmRlcikgLSAxKTsKPiArCj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ ICsKPiArLyoqCj4gKyAqIGlndF9vcGVuX2NhcmQ6Cj4gKyAqIEBjYXJkOiBwb2ludGVyIHRvIGln dF9kZXZpY2VfY2FyZCBzdHJ1Y3R1cmUKPiArICoKPiArICogT3BlbiAvZGV2L2RyaS9jYXJkWCBk ZXZpY2UgcmVwcmVzZW50ZWQgYnkgaWd0X2RldmljZV9jYXJkIHN0cnVjdHVyZS4KPiArICogUmVx dWlyZXMgZmlsbGVkIEBjYXJkIGFyZ3VtZW50IChzZWUgaWd0X2RldmljZV9jYXJkX21hdGNoKCkg ZnVuY3Rpb24pLgo+ICsgKgo+ICsgKiBBbiBvcGVuIERSTSBmZCBvciAtMSBvbiBlcnJvcgo+ICsg Ki8KPiAraW50IGlndF9vcGVuX2NhcmQoc3RydWN0IGlndF9kZXZpY2VfY2FyZCAqY2FyZCkKPiAr ewo+ICsJaWYgKCFjYXJkIHx8ICFzdHJsZW4oY2FyZC0+Y2FyZCkpCj4gKwkJcmV0dXJuIC0xOwo+ ICsKPiArCXJldHVybiBvcGVuKGNhcmQtPmNhcmQsIE9fUkRXUik7Cj4gK30KPiArCj4gKy8qKgo+ ICsgKiBpZ3Rfb3Blbl9yZW5kZXI6Cj4gKyAqIEBjYXJkOiBwb2ludGVyIHRvIGlndF9kZXZpY2Vf Y2FyZCBzdHJ1Y3R1cmUKPiArICoKPiArICogT3BlbiAvZGV2L2RyaS9yZW5kZXJEWCBkZXZpY2Ug cmVwcmVzZW50ZWQgYnkgaWd0X2RldmljZV9jYXJkIHN0cnVjdHVyZS4KPiArICogUmVxdWlyZXMg ZmlsbGVkIEBjYXJkIGFyZ3VtZW50IChzZWUgaWd0X2RldmljZV9jYXJkX21hdGNoKCkgZnVuY3Rp b24pLgo+ICsgKgo+ICsgKiBBbiBvcGVuIERSTSBmZCBvciAtMSBvbiBlcnJvcgo+ICsgKi8KPiAr aW50IGlndF9vcGVuX3JlbmRlcihzdHJ1Y3QgaWd0X2RldmljZV9jYXJkICpjYXJkKQo+ICt7Cj4g KwlpZiAoIWNhcmQgfHwgIXN0cmxlbihjYXJkLT5yZW5kZXIpKQo+ICsJCXJldHVybiAtMTsKPiAr Cj4gKwlyZXR1cm4gb3BlbihjYXJkLT5yZW5kZXIsIE9fUkRXUik7Cj4gK30KPiBkaWZmIC0tZ2l0 IGEvbGliL2lndF9kZXZpY2Vfc2Nhbi5oIGIvbGliL2lndF9kZXZpY2Vfc2Nhbi5oCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMC4uZGJkZTg4MTYKPiAtLS0gL2Rldi9udWxs Cj4gKysrIGIvbGliL2lndF9kZXZpY2Vfc2Nhbi5oCj4gQEAgLTAsMCArMSw2NyBAQAo+ICsvKgo+ ICsgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv YnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9j dW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBT b2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9u Cj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk aXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNv ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUg aXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u czoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJl IGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4g KyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVE LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklO RlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlS SUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4g KyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Ig T1RIRVJXSVNFLCBBUklTSU5HCj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJ VEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiArICogSU4gVEhF IFNPRlRXQVJFLgo+ICsgKgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX19JR1RfREVWSUNFX1NDQU5f SF9fCj4gKyNkZWZpbmUgX19JR1RfREVWSUNFX1NDQU5fSF9fCj4gKwo+ICsjaW5jbHVkZSA8bGlt aXRzLmg+Cj4gKyNpbmNsdWRlIDxpZ3QuaD4KPiArCj4gK2VudW0gaWd0X2RldmljZXNfcHJpbnRf dHlwZSB7Cj4gKwlJR1RfUFJJTlRfU0lNUExFLAo+ICsJSUdUX1BSSU5UX0RFVEFJTCwKPiArfTsK PiArCj4gK3N0cnVjdCBpZ3RfZGV2aWNlX2NhcmQgewo+ICsJY2hhciBzdWJzeXN0ZW1bTkFNRV9N QVhdOwo+ICsJY2hhciBjYXJkW05BTUVfTUFYXTsKPiArCWNoYXIgcmVuZGVyW05BTUVfTUFYXTsK PiArfTsKPiArCj4gKy8qIFNjYW4gdWRldiBzdWJzeXN0ZW1zLiBEbyBpdCBvbmNlIHVubGVzcyBm b3JjZSBpcyB0cnVlLCB3aGF0IHJlc2NhbnMKPiArICogZGV2aWNlcyBhZ2Fpbi4KPiArICovCj4g K3ZvaWQgaWd0X2RldmljZXNfc2Nhbihib29sIGZvcmNlKTsKPiArCj4gK3ZvaWQgaWd0X2Rldmlj ZXNfcHJpbnQoZW51bSBpZ3RfZGV2aWNlc19wcmludF90eXBlIHByaW50dHlwZSk7Cj4gK3ZvaWQg aWd0X2RldmljZXNfcHJpbnRfdmVuZG9ycyh2b2lkKTsKPiArdm9pZCBpZ3RfZGV2aWNlX3ByaW50 X2ZpbHRlcl90eXBlcyh2b2lkKTsKPiArCj4gKy8qCj4gKyAqIEhhbmRsZSBkZXZpY2UgZmlsdGVy IGNvbGxlY3Rpb24gYXJyYXkuCj4gKyAqIElHVCBjYW4gc3RvcmUvcmV0cmlldmUgZmlsdGVycyBw YXNzZWQgYnkgdXNlciB1c2luZyAnLS1kZXZpY2UnIGFyZ3MuCj4gKyAqLwo+ICsKPiArYm9vbCBp Z3RfZGV2aWNlX2lzX2ZpbHRlcl9zZXQodm9pZCk7Cj4gK3ZvaWQgaWd0X2RldmljZV9maWx0ZXJf c2V0KGNvbnN0IGNoYXIgKmZpbHRlcik7Cj4gK3ZvaWQgaWd0X2RldmljZV9maWx0ZXJfZnJlZSh2 b2lkKTsKPiArY29uc3QgY2hhciAqaWd0X2RldmljZV9maWx0ZXJfZ2V0KHZvaWQpOwo+ICsKPiAr LyogVXNlIGZpbHRlciB0byBtYXRjaCB0aGUgZGV2aWNlIGFuZCBmaWxsIGNhcmQgc3RydWN0dXJl ICovCj4gK2Jvb2wgaWd0X2RldmljZV9jYXJkX21hdGNoKGNvbnN0IGNoYXIgKmZpbHRlciwgc3Ry dWN0IGlndF9kZXZpY2VfY2FyZCAqY2FyZCk7Cj4gKwo+ICtpbnQgaWd0X29wZW5fY2FyZChzdHJ1 Y3QgaWd0X2RldmljZV9jYXJkICpjYXJkKTsKPiAraW50IGlndF9vcGVuX3JlbmRlcihzdHJ1Y3Qg aWd0X2RldmljZV9jYXJkICpjYXJkKTsKPiArCj4gKyNlbmRpZiAvKiBfX0lHVF9ERVZJQ0VfU0NB Tl9IX18gKi8KPiBkaWZmIC0tZ2l0IGEvbGliL21lc29uLmJ1aWxkIGIvbGliL21lc29uLmJ1aWxk Cj4gaW5kZXggMTljYjYyNTUuLjQ4NmY1MWQ3IDEwMDY0NAo+IC0tLSBhL2xpYi9tZXNvbi5idWls ZAo+ICsrKyBiL2xpYi9tZXNvbi5idWlsZAo+IEBAIC0xMCw2ICsxMCw3IEBAIGxpYl9zb3VyY2Vz ID0gWwo+ICAJJ2lndF9jb2xvcl9lbmNvZGluZy5jJywKPiAgCSdpZ3RfZGVidWdmcy5jJywKPiAg CSdpZ3RfZGV2aWNlLmMnLAo+ICsJJ2lndF9kZXZpY2Vfc2Nhbi5jJywKPiAgCSdpZ3RfYXV4LmMn LAo+ICAJJ2lndF9ndC5jJywKPiAgCSdpZ3RfZ3Z0LmMnLAo+IC0tIAo+IDIuMjEuMAo+IApfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxp bmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=