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 411D36EBD6 for ; Fri, 23 Aug 2019 07:32:01 +0000 (UTC) From: =?UTF-8?q?Zbigniew=20Kempczy=C5=84ski?= Date: Fri, 23 Aug 2019 09:03:50 +0200 Message-Id: <20190823070351.16863-2-zbigniew.kempczynski@intel.com> In-Reply-To: <20190823070351.16863-1-zbigniew.kempczynski@intel.com> References: <20190823070351.16863-1-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v5 1/2] 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: igt-dev@lists.freedesktop.org Cc: Daniel Vetter , Petri Latvala List-ID: Q2hhbmdlIGFkZHMgZGV2aWNlIHNlbGVjdGlvbiBiYXNlZCBvbiBzY2FubmluZyBkcm0gc3Vic3lz dGVtCnVzaW5nIHVkZXYgbGlicmFyeS4KClRvb2wgJ2xzZ3B1JyBmb3IgZGV2aWNlIHNjYW5uaW5n IGFuZCBzZWxlY3Rpb24gd2FzIGFkZGVkLgoKU2lnbmVkLW9mZi1ieTogWmJpZ25pZXcgS2VtcGN6 ecWEc2tpIDx6Ymlnbmlldy5rZW1wY3p5bnNraUBpbnRlbC5jb20+CkNjOiBBcmthZGl1c3ogSGls ZXIgPGFya2FkaXVzei5oaWxlckBpbnRlbC5jb20+CkNjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWxA ZmZ3bGwuY2g+CkNjOiBQZXRyaSBMYXR2YWxhIDxwZXRyaS5sYXR2YWxhQGludGVsLmNvbT4KLS0t CiAuLi4vaWd0LWdwdS10b29scy9pZ3QtZ3B1LXRvb2xzLWRvY3MueG1sICAgICAgfCAgICAxICsK IGxpYi9NYWtlZmlsZS5zb3VyY2VzICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwog bGliL2lndF9kZXZpY2Vfc2Nhbi5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTM4MCArKysr KysrKysrKysrKysrKwogbGliL2lndF9kZXZpY2Vfc2Nhbi5oICAgICAgICAgICAgICAgICAgICAg ICAgIHwgICA3NCArCiBsaWIvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgICAxICsKIHRvb2xzL01ha2VmaWxlLnNvdXJjZXMgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgIDEgKwogdG9vbHMvbHNncHUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgIDI2MSArKysrCiB0b29scy9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgICAxICsKIDggZmlsZXMgY2hhbmdlZCwgMTcyMSBpbnNlcnRpb25zKCspCiBjcmVhdGUg bW9kZSAxMDA2NDQgbGliL2lndF9kZXZpY2Vfc2Nhbi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGli L2lndF9kZXZpY2Vfc2Nhbi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvbHNncHUuYwoKZGlm ZiAtLWdpdCBhL2RvY3MvcmVmZXJlbmNlL2lndC1ncHUtdG9vbHMvaWd0LWdwdS10b29scy1kb2Nz LnhtbCBiL2RvY3MvcmVmZXJlbmNlL2lndC1ncHUtdG9vbHMvaWd0LWdwdS10b29scy1kb2NzLnht bAppbmRleCBhYzgzMjcyZi4uNGIzYzM4YWYgMTAwNjQ0Ci0tLSBhL2RvY3MvcmVmZXJlbmNlL2ln dC1ncHUtdG9vbHMvaWd0LWdwdS10b29scy1kb2NzLnhtbAorKysgYi9kb2NzL3JlZmVyZW5jZS9p Z3QtZ3B1LXRvb2xzL2lndC1ncHUtdG9vbHMtZG9jcy54bWwKQEAgLTIzLDYgKzIzLDcgQEAKICAg ICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvaWd0X2NvcmUueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUg aHJlZj0ieG1sL2lndF9kZWJ1Z2ZzLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9p Z3RfZGV2aWNlLnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9pZ3RfZGV2aWNlX3Nj YW4ueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF9kcmF3LnhtbCIvPgogICAg IDx4aTppbmNsdWRlIGhyZWY9InhtbC9pZ3RfZHVtbXlsb2FkLnhtbCIvPgogICAgIDx4aTppbmNs dWRlIGhyZWY9InhtbC9pZ3RfZmIueG1sIi8+CmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUuc291 cmNlcyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCmluZGV4IGNmMDk0YWI4Li5hOWU5NTU3YSAxMDA2 NDQKLS0tIGEvbGliL01ha2VmaWxlLnNvdXJjZXMKKysrIGIvbGliL01ha2VmaWxlLnNvdXJjZXMK QEAgLTI1LDYgKzI1LDggQEAgbGliX3NvdXJjZV9saXN0ID0JIAlcCiAJaWd0X2RlYnVnZnMuaAkJ XAogCWlndF9kZXZpY2UuYwkJXAogCWlndF9kZXZpY2UuaAkJXAorCWlndF9kZXZpY2Vfc2Nhbi5j CVwKKwlpZ3RfZGV2aWNlX3NjYW4uaAlcCiAJaWd0X2F1eC5jCQlcCiAJaWd0X2F1eC5oCQlcCiAJ aWd0X2NvbG9yX2VuY29kaW5nLmMJXApkaWZmIC0tZ2l0IGEvbGliL2lndF9kZXZpY2Vfc2Nhbi5j IGIvbGliL2lndF9kZXZpY2Vfc2Nhbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwLi44ZGU3OTBkOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9pZ3RfZGV2aWNlX3NjYW4uYwpA QCAtMCwwICsxLDEzODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3Jh dGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8g ZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhv dXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2Us IHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMg b2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNv ZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVy bWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBi ZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQor ICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xV RElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ LAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVO VC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVS UyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZ LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFS SVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJF IE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisg Ki8KKworI2luY2x1ZGUgImlndC5oIgorI2luY2x1ZGUgImlndF9zeXNmcy5oIgorI2luY2x1ZGUg ImlndF9kZXZpY2UuaCIKKyNpbmNsdWRlICJpZ3RfZGV2aWNlX3NjYW4uaCIKKyNpbmNsdWRlIDxn bGliLmg+CisjaW5jbHVkZSA8bGlidWRldi5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPgor I2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8 ZGlyZW50Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworLyoqCisgKiBTRUNUSU9OOmlndF9kZXZp Y2Vfc2NhbgorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBEZXZpY2Ugc2Nhbm5pbmcgYW5kIHNlbGVj dGlvbgorICogQHRpdGxlOiBEZXZpY2Ugc2VsZWN0aW9uCisgKiBAaW5jbHVkZTogaWd0LmgKKyAq CisgKiAjIERldmljZSBzY2FubmluZworICoKKyAqIERldmljZSBzY2FubmluZyBpdGVyYXRlcyBv dmVyIGRybSBzdWJzeXN0ZW0gdXNpbmcgdWRldiBsaWJyYXJ5CisgKiB0byBhY3F1aXJlIGRybSBk ZXZpY2VzLgorICogRm9yIGVhY2ggZHJtIGRldmljZSB3ZSBhbHNvIGdldCBhbmQgc3RvcmUgaXRz IHBhcmVudCBpbiBhIGRldmljZSBhcnJheQorICogdG8gYWxsb3cgZGV2aWNlIHNlbGVjdGlvbiBp biBtb3JlIGNvbnRleHR1YWwgd2F5LgorICoKKyAqIFBhcmVudCBkZXZpY2VzIGFyZSBidXMgZGV2 aWNlcyAobGlrZSBwY2ksIHBsYXRmb3JtLCBldGMuKSBhbmQgY29udGFpbiBhIGxvdAorICogb2Yg dXNhYmxlIGluZm9ybWF0aW9uIGNvbXBhcmluZyB0byBkcm0gZGV2aWNlLgorICoKKyAqIFVkZXYg a2VlcHMgcHJvcGVydGllcyBhbmQgc3lzYXR0cnMgZm9yIHRoZSBkZXZpY2UgYXMgYSBsaXN0IHdo YXQgaXMgbm90CisgKiBjb252aW5pZW50IGZvciBrZXkvdmFsdWUgc2VhcmNoaW5nLiBTbyB1ZGV2 IGRldmljZSBwcm9wZXJ0aWVzIGFuZCBzeXNhdHRycworICogYXJlIHJld3JpdHRlbiB0byBpbnRl cm5hbCBoYXNoIHRhYmxlcyBpbiBpZ3RfZGV2aWNlIHN0cnVjdHVyZS4KKyAqCisgKiAjIEZpbHRl cnMKKyAqCisgKiBEZXZpY2Ugc2VsZWN0aW9uIGNhbiBiZSBkb25lIHVzaW5nIGZpbHRlcnMuIEZp bHRlcnMgYWxsb3cgc29waGlzdGljYXRlZAorICogZGV2aWNlIG1hdGNoaW5nIGFuZCBzZWxlY3Rp b24uIFByZXZpb3VzbHkgbWVudGlvbmVkIHByb3BlcnRpZXMgYW5kIHN5c2F0dHJzCisgKiBjb2xs ZWN0ZWQgaW4gaWd0X2RldmljZSBoYXNoIHRhYmxlcyBzaW1wbGlmeSB3cml0aW5nIGZpbHRlciBp bXBsZW1lbnRhdGlvbi4KKyAqCisgKiBEaXJlY3QgZGV2aWNlIHNlbGVjdGlvbiBmaWx0ZXIKKyAq IGlzIHNwZWNpYWwgZmlsdGVyIGFuZCBpdCBpcyBjaGVja2VkIGZpcnN0LiBUaGVuIGNvbnRleHR1 YWwgZmlsdGVyIGlzIGNob3NlbgorICogZGVwZW5kaW5nIG9uIGZpbHRlciBuYW1lLgorICoKKyAq IERpcmVjdCBkZXZpY2Ugc2VsZWN0aW9uIGZpbHRlciBtdXN0IGJlOgorICoKKyAqIHxbPCEtLSBs YW5ndWFnZT0icGxhaW4iIC0tPgorICogc3Vic3lzdGVtOi9zeXMKKyAqIF18CisgKgorICogU28s IHdoZW4gdXNlciBwYXNzZXMgZmlsdGVyIHdoaWNoIGxvb2tzIGxpa2UgZm9sbG93czoKKyAqIHxb PCEtLSBsYW5ndWFnZT0icGxhaW4iIC0tPgorICogLSBkcm06L3N5cy9kZXZpY2VzL3BjaTAwMDA6 MDAvMDAwMDowMDowMi4wL2RybS9jYXJkMAorICogLSBwY2k6L3N5cy9kZXZpY2VzL3BjaTAwMDA6 MDAvMDAwMDowMDowMi4wCisgKiAtIHBsYXRmb3JtOi9zeXMvZGV2aWNlcy9wbGF0Zm9ybS92Z2Vt CisgKiBdfAorICoKKyAqIGRldmljZSBmcm9tIGFycmF5IHdoaWNoIGhhcyBzdWJzeXN0ZW0gYW5k IHN5cyBwYXRoIHdpbGwgYmUgcmV0dXJuZWQuCisgKgorICogV2hlbiAvc3lzIGlzIG5vdCBzcGVj aWZpZWQgYWZ0ZXIgY29sb24gY29udGV4dHVhbCBmaWx0ZXJzIGFyZSB0YWtlbgorICogaW50byBh Y2NvdW50LiBEcm0gZGV2aWNlIG9jY3VycyBpbiB0aGUgc3lzdGVtIHdoZW4gYXBwcm9wcmlhdGUg bW9kdWxlCisgKiBpcyBsb2FkZWQgYW5kIGRldmljZSBpcyBkZXRlY3RlZCAob3IgZXhwb3NlZCBm b3IgcGxhdGZvcm0gZGV2aWNlcykuIExvYWRpbmcKKyAqIGRyaXZlcnMgaW4gZGlmZmVyZW50IG9y ZGVyIGNhbiBiZSBwcm9ibGVtYXRpYyBmcm9tIENJIHBvaW50IG9mIHZpZXcsIHdoZXJlCisgKiBl eHBlY3RhdGlvbiBpcyB0byBnZXQgc2FtZSBkZXZpY2UgZXNwZWNpYWxseSB3aGVuIG11bHRpcGxl IGdwdSBkZXZpY2VzCisgKiBleGlzdHMgaW4gdGhlIHN5c3RlbS4gRm9yIHN1Y2ggZGV2aWNlcyBp dHMgcGFyZW50IGxvY2F0aW9uIG9uIHBjaSBidXMKKyAqIGlzIGNvbnN0YW50IGFuZCBhbGxvd3Mg YXBwcm9wcmlhdGUgZGV2aWNlIHNlbGVjdGlvbiB1c2luZyBmb3IgZXhhbXBsZQorICogdmVuZG9y IC8gZGV2aWNlIGlkcy4KKyAqCisgKiBGb3IgdGVzdHMgd2hpY2ggb3BlbnMgbW9yZSB0aGFuIG9u ZSBkZXZpY2UgZGV2aWNlIGZpbHRlciBjb2xsZWN0aW9uIEFQSQorICogY2FuIGJlIHVzZWQuIFlv dSBjYW4gYWRkIGEgZmlsdGVyIHRvIHRoZSBhcnJheSB1c2luZyBpZ3RfZGV2aWNlX2ZpbHRlcl9h ZGQoKSwKKyAqIGdldCB0aGUgbnRoIGZpbHRlciBzdG9yZWQgdXNpbmcgaWd0X2RldmljZV9maWx0 ZXJfZ2V0KCkgYW5kIGdldAorICogI2lndF9kZXZpY2VfY2FyZCB1c2luZyBpZ3RfZGV2aWNlX2Nh cmRfbWF0Y2goKSB3aXRoIHRoYXQgZmlsdGVyLgorICoKKyAqIEltcGxlbWVudGVkIGZpbHRlcnM6 CisgKgorICogLSBkcm06IGdldCBkcm0gL2Rldi9kcmkvLi4uIGRldmljZSBkaXJlY3RseQorICoK KyAqICAgfFs8IS0tIGxhbmd1YWdlPSJwbGFpbiIgLS0+CisgKiAgIGRybTovZGV2L2RyaS8uLi4K KyAqICAgXXwKKyAqCisgKiAtIHBjaTogc2VsZWN0IGRldmljZSB1c2luZyBwY2kgcHJvcGVydGll cworICogICB8WzwhLS0gbGFuZ3VhZ2U9InBsYWluIiAtLT4KKyAqICAgcGNpOlt2ZW5kb3I9JTA0 eC9uYW1lXVssZGV2aWNlPSUwNHhdWyxjYXJkPSVkXQorICogICBdfAorICoKKyAqICAgRmlsdGVy IGFsbG93cyBkZXZpY2Ugc2VsZWN0aW9uIHVzaW5nIHZlbmRvciAoaGV4IG9yIG5hbWUpLCBkZXZp Y2UgaWQKKyAqICAgKGhleCkgYW5kIG50aC1jYXJkIGZyb20gYWxsIG1hdGNoZXMuIEZvciBleGFt cGxlIGlmIHRoZXJlJ3JlIDQgcGNpCisgKiAgIGNhcmRzIGluc3RhbGxlZCAobGV0IHR3byBjYXJk cyBoYXZlIDEyMzQgYW5kIG90aGVyIHR3byAxMjM1IGRldmljZSBpZCwKKyAqICAgYWxsIG9mIHRo ZW0gb2YgdmVuZG9yIEludGVsKSB5b3UgY2FuIHNlbGVjdCBvbmUgdXNpbmc6CisgKgorICogICB8 WzwhLS0gbGFuZ3VhZ2U9InBsYWluIiAtLT4KKyAqICAgcGNpOnZlbmRvcj1JbnRlbCxkZXZpY2U9 MTIzNCxjYXJkPTAKKyAqICAgXXwKKyAqCisgKiAgIG9yCisgKgorICogICB8WzwhLS0gbGFuZ3Vh Z2U9InBsYWluIiAtLT4KKyAqICAgcGNpOnZlbmRvcj04MDg2LGRldmljZT0xMjM0LGNhcmQ9MAor ICogICBdfAorICoKKyAqICAgVGhpcyB0YWtlcyBmaXJzdCBkZXZpY2Ugd2l0aCAxMjM0IGlkIGZv ciBJbnRlbCB2ZW5kb3IgKDgwODYpLgorICoKKyAqICAgfFs8IS0tIGxhbmd1YWdlPSJwbGFpbiIg LS0+CisgKiAgIHBjaTp2ZW5kb3I9SW50ZWwsZGV2aWNlPTEyMzQsY2FyZD0xCisgKiAgIF18Cisg KgorICogICBvcgorICoKKyAqICAgfFs8IS0tIGxhbmd1YWdlPSJwbGFpbiIgLS0+CisgKiAgIHBj aTp2ZW5kb3I9ODA4NixkZXZpY2U9MTIzNCxjYXJkPTEKKyAqICAgXXwKKyAqCisgKiAgIEl0IHNl bGVjdHMgc2Vjb25kIG9uZS4KKyAqCisgKiAgIEFzIG9yZGVyIG9uIHBjaSBidXMgZG9lc24ndCBj aGFuZ2UgKHVubGVzcyB5b3UnbGwgYWRkIG5ldyBkZXZpY2Ugb3IKKyAqICAgcmVvcmRlciBleGlz dGluZyBvbmUpIGRldmljZSBzZWxlY3Rpb24gdXNpbmcgdGhpcyBmaWx0ZXIgd2lsbCBhbHdheXMK KyAqICAgcmV0dXJuIHlvdSBzYW1lIGRldmljZSByZWdhcmRsZXNzIG1vZHVsZSBsb2FkaW5nIHRp bWUuCisgKgorICogLSB2Z2VtOiBzZWxlY3QgdmlydHVhbCBnZW0gZGV2aWNlCisgKgorICogICB8 WzwhLS0gbGFuZ3VhZ2U9InBsYWluIiAtLT4KKyAqICAgdmdlbTpbY2FyZD0lZF0KKyAqICAgXXwK KyAqCisgKiAgIEZvciBleGFtcGxlOgorICoKKyAqICAgfFs8IS0tIGxhbmd1YWdlPSJwbGFpbiIg LS0+CisgKiAgIHZnZW06CisgKiAgIHZnZW06Y2FyZD0wCisgKiAgIF18CisgKgorICogICBCb3Ro IHNlbGVjdHMgZmlyc3QgdmdlbSBkZXZpY2UgKG5vIGlkZWEgaWYgbW9yZSB0aGFuIG9uZSBkZXZp Y2Ugd2lsbAorICogICBiZSB2aXNpYmxlLCBpZiB5ZXMgdXNlIGNhcmQ9IGFyZ3VtZW50IHRvIHBv aW50IHJpZ2h0IG9uZSkuCisgKgorICogLSB2a21zOiBzZWxlY3QgdmlydHVhbCBrbXMgZGV2aWNl CisgKgorICogICB8WzwhLS0gbGFuZ3VhZ2U9InBsYWluIiAtLT4KKyAqICAgdmttczpbY2FyZD0l ZF0KKyAqICAgXXwKKyAqCisgKiAgIEZvciBleGFtcGxlOgorICoKKyAqICAgfFs8IS0tIGxhbmd1 YWdlPSJwbGFpbiIgLS0+CisgKiAgIHZrbXM6CisgKiAgIHZrbXM6Y2FyZD0wCisgKiAgIF18Cisg KgorICogICBCb3RoIHNlbGVjdHMgZmlyc3QgdmttcyBkZXZpY2UuIFNhbWUgYXMgZm9yIHZnZW0g SSBhc3N1bWUgbW9yZSB0aGFuCisgKiAgIG9uZSBkZXZpY2UgY2FuIGFwcGVhciBpbiB0aGUgZnV0 dXJlLgorICoKKyAqIC0gdmM0OiBzZWxlY3QgVkM0IGRldmljZQorICoKKyAqICAgfFs8IS0tIGxh bmd1YWdlPSJwbGFpbiIgLS0+CisgKiAgIHZjNDpbY2FyZD0lZF0KKyAqICAgXXwKKyAqCisgKiAg IEZvciBleGFtcGxlOgorICoKKyAqICAgfFs8IS0tIGxhbmd1YWdlPSJwbGFpbiIgLS0+CisgKiAg IHZjNDoKKyAqICAgdmM0OmNhcmQ9MAorICogICBdfAorICoKKyAqICAgQm90aCBzZWxlY3RzIGZp cnN0IFZDNCBkZXZpY2UuIEF0IHRoZSBtb21lbnQgUmFzcGVycnkgUEkgaGFzIG9ubHkKKyAqICAg b25lIGdwdSwgYnV0IGZpbHRlciBpcyByZWFkeSBpZiB0aGVyZSB3aWxsIGJlIG1vcmUuCisgKgor ICogIyBsc2dwdQorICoKKyAqIFRoZSBkZXZpY2VzIGNhbiBiZSBzY2FubmVkIGFuZCBkaXNwbGF5 ZWQgdXNpbmcgJ2xzZ3B1JyB0b29sLiBUb29sIGFsc28KKyAqIGRpc3BsYXlzIHByb3BlcnRpZXMg YW5kIHN5c2F0dHJzICgtcCBzd2l0Y2gsIG1lYW5zIHByaW50IGRldGFpbCkgd2hpY2gKKyAqIGNh biBiZSB1c2VkIGR1cmluZyBmaWx0ZXIgaW1wbGVtZW50YXRpb24uCisgKgorICogVG9vbCBjYW4g YWxzbyBiZSB1c2VkIHRvIHRyeSBvdXQgZmlsdGVycy4KKyAqIFRvIHNlbGVjdCBkZXZpY2UgdXNl ICctZCcgb3IgJy0tZGV2aWNlJyBhcmd1bWVudCBsaWtlOgorICoKKyAqIHxbPCEtLSBsYW5ndWFn ZT0icGxhaW4iIC0tPgorICogLi9sc2dwdSAtZCAncGNpOnZlbmRvcj1JbnRlbCcKKyAqID09PSBE ZXZpY2UgZmlsdGVyIGxpc3QgPT09CisgKiBbIDBdOiBwY2k6dmVuZG9yPUludGVsCisKKyAqID09 PSBUZXN0aW5nIGRldmljZSBvcGVuID09PQorICogc3Vic3lzdGVtICAgOiBwY2kKKyAqIGNoaXBz ZXQgICAgIDogMQorICogZHJtIGNhcmQgICAgOiAvZGV2L2RyaS9jYXJkMAorICogZHJtIHJlbmRl ciAgOiAvZGV2L2RyaS9yZW5kZXJEMTI4CisgKiBEZXZpY2UgL2Rldi9kcmkvY2FyZDAgc3VjY2Vz c2Z1bGx5IG9wZW5lZAorICogRGV2aWNlIC9kZXYvZHJpL3JlbmRlckQxMjggc3VjY2Vzc2Z1bGx5 IG9wZW5lZAorICogXXwKKyAqCisgKiBBZGRpdGlvbmFsbHkgbHNncHUgdHJpZXMgdG8gb3BlbiB0 aGUgY2FyZCBhbmQgcmVuZGVyIG5vZGVzIHRvIHZlcmlmeQorICogcGVybWlzc2lvbnMuIEl0IGFs c28gdXNlcyBJR1QgdmFyaWFibGUgc2VhcmNoIG9yZGVyOgorICogLSB1c2UgLS1kZXZpY2UgZmly c3QgKGl0IG92ZXJyaWRlcyBJR1RfREVWSUNFIGFuZCAuaWd0cmMgQ29tbW9uOjpEZXZpY2UKKyAq ICAgc2V0dGluZ3MpCisgKiAtIHVzZSBJR1RfREVWSUNFIGVudmlyb21lbnQgdmFyaWFibGUgaWYg bm8gLS1kZXZpY2UgYXJlIHBhc3NlZAorICogLSB1c2UgLmlndHJjIENvbW1vbjo6RGV2aWNlIGlm IG5vIC0tZGV2aWNlIG5vciBJR1RfREVWSUNFIGFyZSBwYXNzZWQKKyAqLworCisjaWZkZWYgREVC VUdfREVWSUNFX1NDQU4KKyNkZWZpbmUgREJHKC4uLikgXAoreyBcCisJc3RydWN0IHRpbWV2YWwg dG07IFwKKwlnZXR0aW1lb2ZkYXkoJnRtLCBOVUxMKTsgXAorCXByaW50ZigiJTEwbGQuJTAzbGQ6 ICIsIHRtLnR2X3NlYywgdG0udHZfdXNlYyk7IFwKKwlwcmludGYoX19WQV9BUkdTX18pOyBcCisJ fQorCisjZWxzZQorI2RlZmluZSBEQkcoLi4uKSB7fQorI2VuZGlmCisKKyNkZWZpbmUgc3RyZXF1 YWwoeCwgeSkgKCh4KSAmJiAoeSkgJiYgIXN0cmNtcCgoeCksICh5KSkpCisjZGVmaW5lIElHVF9E Uk1fUEFUSCAiL2Rldi9kcmkiCisKK3N0YXRpYyBHSGFzaFRhYmxlICpzeXNhdHRyc19ibGFja2xp c3RfaHQ7IC8qIHN5c2F0dHJzIHdlIGRvbid0IHdhbnQgdG8gcmVhZCAqLworc3RhdGljIEdIYXNo VGFibGUgKmdwdV92ZW5kb3JfaHQ7ICAgICAgICAgLyogc2VhcmNoIGlkIC0+IHZlbmRvcl9zcGVj IG1hcHBpbmcgKi8KK3N0YXRpYyBHSGFzaFRhYmxlICpmaWx0ZXJfZGVmaW5pdGlvbl9odDsgLyog c3VwcG9ydGVkIGZpbHRlcnMgKHBjaT0uLi4sIGV0Yy4pICovCisKKy8qIEdlbmVyaWMgbmFtZS0+ dmFsdWUgc3RydWN0ICovCitzdHJ1Y3QgbmFtZV92YWx1ZSB7CisJY29uc3QgY2hhciAqbmFtZTsK KwlncG9pbnRlciAqdmFsdWU7Cit9OworCisvKiBWZW5kb3Igc3BlY2lmaWMgZGF0YSAqLworc3Ry dWN0IHZlbmRvcl9zcGVjIHsKKwljb25zdCBjaGFyICp2ZW5kb3I7CisJY29uc3QgY2hhciAqbWF0 Y2g7CisJaW50IGNoaXBzZXQ7Cit9OworCitzdHJ1Y3QgaWd0X2RldmljZSB7CisJLyogRmlsbGVk IGZvciBkcm0gZGV2aWNlcyAqLworCXN0cnVjdCBpZ3RfZGV2aWNlICpwYXJlbnQ7CisKKwkvKiBQ b2ludCB0byB2ZW5kb3Igc3BlYyBpZiBjYW4gYmUgZm91bmQgKi8KKwljb25zdCBzdHJ1Y3QgdmVu ZG9yX3NwZWMgKnZzOworCisJLyogUHJvcGVydGllcyAvIHN5c2F0dHJzIHJld3JpdGVuIGZyb20g dWRldiBsaXN0cyAqLworCUdIYXNoVGFibGUgKnByb3BzX2h0OworCUdIYXNoVGFibGUgKmF0dHJz X2h0OworCisJLyogTW9zdCB1c2FibGUgdmFyaWFibGVzIGZyb20gdWRldiBkZXZpY2UgKi8KKwlj aGFyICpzdWJzeXN0ZW07CisJY2hhciAqc3lzcGF0aDsKKwljaGFyICpkZXZub2RlOworCisJLyog L2Rldi9kcmkvLi4uIHBhdGhzICovCisJY2hhciAqZHJtX2NhcmQ7CisJY2hhciAqZHJtX3JlbmRl cjsKKworCS8qIEZvciBwY2kgc3Vic3lzdGVtICovCisJY2hhciAqdmVuZG9yOworCWNoYXIgKmRl dmljZTsKK307CisKKy8qIFNjYW5uZWQgZGV2aWNlcyAqLworc3RydWN0IGlndF9kZXZpY2VzIHsK KwlHUHRyQXJyYXkgKmRldnM7CQkvL2FsbCBkZXZpY2VzCisJR1B0ckFycmF5ICp2aWV3OwkJLy9m aWx0ZXJlZCB2aWV3CisJYm9vbCBkZXZzX3NjYW5uZWQ7Cit9OworCisvKiBTY2FubmVkIGRldmlj ZXMgaG9sZGVyICovCitzdGF0aWMgc3RydWN0IGlndF9kZXZpY2VzIGlndF9kZXZzOworCitzdGF0 aWMgY29uc3Qgc3RydWN0IHZlbmRvcl9zcGVjIHZfaW50ZWwgPSB7CisJLnZlbmRvciA9ICJJbnRl bCIsCisJLmNoaXBzZXQgPSBEUklWRVJfSU5URUwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg dmVuZG9yX3NwZWMgdl9hbWQgPSB7CisJLnZlbmRvciA9ICJBTUQiLAorCS5jaGlwc2V0ID0gRFJJ VkVSX0FNREdQVQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2ZW5kb3Jfc3BlYyB2X3ZnZW0g PSB7CisJLnZlbmRvciA9ICJWaXJ0dWFsLUdFTSIsCisJLmNoaXBzZXQgPSBEUklWRVJfVkdFTQor fTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2ZW5kb3Jfc3BlYyB2X3ZjNCA9IHsKKwkudmVuZG9y ID0gIkJyb2FkY29tIiwKKwkuY2hpcHNldCA9IERSSVZFUl9WQzQKK307CisKKy8qIE1hcHBpbmcg dmVuZG9yIGlkID0+IHZlbmRvcl9zcGVjIHNob3VsZCBiZSB1bmlxdWUgKHZlbmRvciBzdHJpbmcg bWF0Y2hpbmcKKyAqIGlzIHdyaXR0ZW4gYXJvdW5kIHRoaXMpLgorICoKKyAqIEtleXMgbXVzdCBi ZSBkZWZpbmVkIGFzIGZvbGxvd3M6CisgKiBQQ0kgZGV2aWNlczogUENJX1NMT1RfSUQgLT4gdmVu ZG9yX3NwZWMuCisgKi8KK2NvbnN0IHN0cnVjdCBuYW1lX3ZhbHVlIGdwdV92ZW5kb3JfbGlzdFtd ID0geworCXsgIjgwODYiLCAoZ3BvaW50ZXIpICZ2X2ludGVsIH0sCisJeyAiMTAwMiIsIChncG9p bnRlcikgJnZfYW1kIH0sCisJeyBOVUxMLCB9LAorfTsKKworLyogR2VuZXJpYyBoYXNoIHRhYmxl IGZpbGwgZnVuY3Rpb24sIHJlcXVpcmVzIG5hbWUgLyB2YWx1ZSBwdHJzIGFycmF5ICovCitzdGF0 aWMgdm9pZCBmaWxsX2h0KEdIYXNoVGFibGUgKipodCwgY29uc3Qgc3RydWN0IG5hbWVfdmFsdWUg KmRhdGEpCit7CisJaWYgKCpodCkKKwkJcmV0dXJuOworCisJKmh0ID0gZ19oYXNoX3RhYmxlX25l dyhnX3N0cl9oYXNoLCBnX3N0cl9lcXVhbCk7CisJaWd0X2Fzc2VydCgqaHQpOworCisJd2hpbGUg KGRhdGEtPm5hbWUpIHsKKwkJZ19oYXNoX3RhYmxlX2luc2VydCgqaHQsCisJCQkJICAgIChncG9p bnRlcikgZGF0YS0+bmFtZSwKKwkJCQkgICAgZGF0YS0+dmFsdWUpOworCQlkYXRhKys7CisJfQor fQorCisjZGVmaW5lIGdldF92ZW5kb3Jfc3BlYyhwcm9wKSBcCisJZ19oYXNoX3RhYmxlX2xvb2t1 cChncHVfdmVuZG9yX2h0LCBwcm9wKQorCisvKiBHbyB0aHJvdWdoIHdob2xlIHZlbmRvciBsaXN0 IGFuZCBjb21wYXJlIGFnYWluc3QgdmVuZG9yIGZpZWxkLgorICogVXNlZCBtb3N0bHkgd2l0aCB2 ZW5kb3I9Li4uIGZpbHRlciBwYXJhbWV0ZXIgd2hlbiBQQ0kgaWQgaXMgbm90IG1hdGNoZWQuCisg Ki8KK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfcGNpX3ZlbmRvcl9pZF9ieV9uYW1lKGNvbnN0IGNo YXIgKm5hbWUpCit7CisJY29uc3Qgc3RydWN0IG5hbWVfdmFsdWUgKmRhdGEgPSAmZ3B1X3ZlbmRv cl9saXN0WzBdOworCisJd2hpbGUgKGRhdGEtPm5hbWUpIHsKKwkJc3RydWN0IHZlbmRvcl9zcGVj ICp2cyA9IChzdHJ1Y3QgdmVuZG9yX3NwZWMgKikgZGF0YS0+dmFsdWU7CisKKwkJaWYgKCFzdHJj YXNlY21wKG5hbWUsIHZzLT52ZW5kb3IpKQorCQkJcmV0dXJuIGRhdGEtPm5hbWU7CisJCWRhdGEr KzsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyogUmVhZGluZyBzeXNhdHRyIHZhbHVlcyBj YW4gdGFrZSB0aW1lIChldmVuIHNlY29uZHMpLAorICogd2Ugd2FudCB0byBhdm9pZCByZWFkaW5n IHN1Y2gga2V5cy4KKyAqLworc3RhdGljIHZvaWQgcG9wdWxhdGVfYmxhY2tsaXN0X2tleXModm9p ZCkKK3sKKwljb25zdCBjaGFyICprZXlzW10gPSB7ICJjb25maWciLCAibW9kYWxpYXMiLCAibW9k ZXMiLAorCQkJICAgICAgICJyZXNvdXJjZSIsCisJCQkgICAgICAgInJlc291cmNlMCIsICJyZXNv dXJjZTEiLCAicmVzb3VyY2UyIiwKKwkJCSAgICAgICAicmVzb3VyY2UzIiwgInJlc291cmNlNCIs ICJyZXNvdXJjZTUiLAorCQkJICAgICAgICJyZXNvdXJjZTBfd2MiLCAicmVzb3VyY2UxX3djIiwg InJlc291cmNlMl93YyIsCisJCQkgICAgICAgInJlc291cmNlM193YyIsICJyZXNvdXJjZTRfd2Mi LCAicmVzb3VyY2U1X3djIiwKKwkJCSAgICAgICAiZHJpdmVyIiwKKwkJCSAgICAgICAidWV2ZW50 IiwgTlVMTH07CisJY29uc3QgY2hhciAqa2V5OworCWludCBpID0gMDsKKworCWlmIChzeXNhdHRy c19ibGFja2xpc3RfaHQpCisJCXJldHVybjsKKworCXN5c2F0dHJzX2JsYWNrbGlzdF9odCA9IGdf aGFzaF90YWJsZV9uZXcoZ19zdHJfaGFzaCwgZ19zdHJfZXF1YWwpOworCWlndF9hc3NlcnQoc3lz YXR0cnNfYmxhY2tsaXN0X2h0KTsKKworCXdoaWxlICgoa2V5ID0ga2V5c1tpKytdKSkKKwkJZ19o YXNoX3RhYmxlX2FkZChzeXNhdHRyc19ibGFja2xpc3RfaHQsIChncG9pbnRlcikga2V5KTsKK30K KworI2RlZmluZSBpc19vbl9ibGFja2xpc3Qoa2V5KSBcCisJZ19oYXNoX3RhYmxlX2NvbnRhaW5z KHN5c2F0dHJzX2JsYWNrbGlzdF9odCwga2V5KQorCitzdGF0aWMgc3RydWN0IGlndF9kZXZpY2Ug KmlndF9kZXZpY2VfbmV3KHZvaWQpCit7CisJc3RydWN0IGlndF9kZXZpY2UgKmRldjsKKworCWRl diA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGlndF9kZXZpY2UpKTsKKwlpZiAoIWRldikKKwkJ cmV0dXJuIE5VTEw7CisKKwlkZXYtPmF0dHJzX2h0ID0gZ19oYXNoX3RhYmxlX25ld19mdWxsKGdf c3RyX2hhc2gsIGdfc3RyX2VxdWFsLAorCQkJCQkgICAgICBmcmVlLCBmcmVlKTsKKwlkZXYtPnBy b3BzX2h0ID0gZ19oYXNoX3RhYmxlX25ld19mdWxsKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsLAor CQkJCQkgICAgICBmcmVlLCBmcmVlKTsKKworCWlmIChkZXYtPmF0dHJzX2h0ICYmIGRldi0+cHJv cHNfaHQpCisJCXJldHVybiBkZXY7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQg aWd0X2RldmljZV9hZGRfcHJvcChzdHJ1Y3QgaWd0X2RldmljZSAqZGV2LAorCQkJCWNvbnN0IGNo YXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCFrZXkgfHwgIXZhbHVlKQorCQly ZXR1cm47CisKKwlnX2hhc2hfdGFibGVfaW5zZXJ0KGRldi0+cHJvcHNfaHQsIHN0cmR1cChrZXkp LCBzdHJkdXAodmFsdWUpKTsKK30KKworc3RhdGljIHZvaWQgaWd0X2RldmljZV9hZGRfYXR0cihz dHJ1Y3QgaWd0X2RldmljZSAqZGV2LAorCQkJCWNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAq dmFsdWUpCit7CisJY29uc3QgY2hhciAqdiA9IHZhbHVlOworCisJaWYgKCFrZXkpCisJCXJldHVy bjsKKworCS8qIEl0J3MgcG9zc2libGUgd2UgaGF2ZSBzeW1saW5rIGF0IGtleSBmaWxlbmFtZSwg YnV0IHVkZXYKKwkgKiBsaWJyYXJ5IHJlc29sdmVzIG9ubHkgZmV3IG9mIHRoZW0KKwkgKi8KKwlp ZiAoIXYpIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCWNoYXIgcGF0aFtQQVRIX01BWF07CisJCWNo YXIgbGlua3RvW1BBVEhfTUFYXTsKKwkJaW50IGxlbjsKKworCQlzbnByaW50ZihwYXRoLCBzaXpl b2YocGF0aCksICIlcy8lcyIsIGRldi0+c3lzcGF0aCwga2V5KTsKKwkJaWYgKGxzdGF0KHBhdGgs ICZzdCkgIT0gMCkKKwkJCXJldHVybjsKKworCQlsZW4gPSByZWFkbGluayhwYXRoLCBsaW5rdG8s IHNpemVvZihsaW5rdG8pKTsKKwkJaWYgKGxlbiA8PSAwIHx8IGxlbiA9PSAoc3NpemVfdCkgc2l6 ZW9mKGxpbmt0bykpCisJCQlyZXR1cm47CisJCWxpbmt0b1tsZW5dID0gJ1wwJzsKKwkJdiA9IHN0 cnJjaHIobGlua3RvLCAnLycpOworCQlpZiAodiA9PSBOVUxMKQorCQkJcmV0dXJuOworCQl2Kys7 CisJfQorCisJZ19oYXNoX3RhYmxlX2luc2VydChkZXYtPmF0dHJzX2h0LCBzdHJkdXAoa2V5KSwg c3RyZHVwKHYpKTsKK30KKworLyogSXRlcmF0ZSBvdmVyIHVkZXYgcHJvcGVydGllcyBsaXN0IGFu ZCByZXdyaXRlIGl0IHRvIGlndF9kZXZpY2UgcHJvcGVydGllcworICogaGFzaCB0YWJsZSBmb3Ig aW5zdGFudCBhY2Nlc3MuCisgKi8KK3N0YXRpYyB2b2lkIGdldF9wcm9wcyhzdHJ1Y3QgdWRldl9k ZXZpY2UgKmRldiwgc3RydWN0IGlndF9kZXZpY2UgKmlkZXYpCit7CisJc3RydWN0IHVkZXZfbGlz dF9lbnRyeSAqZW50cnk7CisKKwllbnRyeSA9IHVkZXZfZGV2aWNlX2dldF9wcm9wZXJ0aWVzX2xp c3RfZW50cnkoZGV2KTsKKwl3aGlsZSAoZW50cnkpIHsKKwkJY29uc3QgY2hhciAqbmFtZSA9IHVk ZXZfbGlzdF9lbnRyeV9nZXRfbmFtZShlbnRyeSk7CisJCWNvbnN0IGNoYXIgKnZhbHVlID0gdWRl dl9saXN0X2VudHJ5X2dldF92YWx1ZShlbnRyeSk7CisKKwkJaWd0X2RldmljZV9hZGRfcHJvcChp ZGV2LCBuYW1lLCB2YWx1ZSk7CisJCWVudHJ5ID0gdWRldl9saXN0X2VudHJ5X2dldF9uZXh0KGVu dHJ5KTsKKwkJREJHKCJwcm9wOiAlcywgdmFsOiAlc1xuIiwgbmFtZSwgdmFsdWUpOworCX0KK30K KworLyogU2FtZSBhcyBnZXRfcHJvcHMoKSwgYnV0IHJld3JpdGVzIHN5c2F0dHJzLiBSZXNvbHZl cyBzeW1ib2xpYyBsaW5rcworICogbm90IGhhbmRsZWQgYnkgdWRldiBnZXRfc3lzYXR0cl92YWx1 ZSgpLgorICogRnVuY3Rpb24gc2tpcHMgc3lzYXR0cnMgZnJvbSBibGFja2xpc3QgaHQgKGFjcXVp cmluZyBzb21lIHZhbHVlcyBjYW4gdGFrZQorICogc2Vjb25kcykuCisgKi8KK3N0YXRpYyB2b2lk IGdldF9hdHRycyhzdHJ1Y3QgdWRldl9kZXZpY2UgKmRldiwgc3RydWN0IGlndF9kZXZpY2UgKmlk ZXYpCit7CisJc3RydWN0IHVkZXZfbGlzdF9lbnRyeSAqZW50cnk7CisKKwllbnRyeSA9IHVkZXZf ZGV2aWNlX2dldF9zeXNhdHRyX2xpc3RfZW50cnkoZGV2KTsKKwl3aGlsZSAoZW50cnkpIHsKKwkJ Y29uc3QgY2hhciAqa2V5ID0gdWRldl9saXN0X2VudHJ5X2dldF9uYW1lKGVudHJ5KTsKKwkJY29u c3QgY2hhciAqdmFsdWU7CisKKwkJaWYgKGlzX29uX2JsYWNrbGlzdChrZXkpKSB7CisJCQllbnRy eSA9IHVkZXZfbGlzdF9lbnRyeV9nZXRfbmV4dChlbnRyeSk7CisJCQljb250aW51ZTsKKwkJfQor CisJCXZhbHVlID0gdWRldl9kZXZpY2VfZ2V0X3N5c2F0dHJfdmFsdWUoZGV2LCBrZXkpOworCQlp Z3RfZGV2aWNlX2FkZF9hdHRyKGlkZXYsIGtleSwgdmFsdWUpOworCQllbnRyeSA9IHVkZXZfbGlz dF9lbnRyeV9nZXRfbmV4dChlbnRyeSk7CisJCURCRygiYXR0cjogJXMsIHZhbDogJXNcbiIsIGtl eSwgdmFsdWUpOworCX0KK30KKworI2RlZmluZSBnZXRfcHJvcChkZXYsIHByb3ApICgoY2hhciAq KSBnX2hhc2hfdGFibGVfbG9va3VwKGRldi0+cHJvcHNfaHQsIHByb3ApKQorI2RlZmluZSBnZXRf YXR0cihkZXYsIGF0dHIpICgoY2hhciAqKSBnX2hhc2hfdGFibGVfbG9va3VwKGRldi0+YXR0cnNf aHQsIGF0dHIpKQorI2RlZmluZSBnZXRfcHJvcF9zdWJzeXN0ZW0oZGV2KSBnZXRfcHJvcChkZXYs ICJTVUJTWVNURU0iKQorI2RlZmluZSBpc19kcm1fc3Vic3lzdGVtKGRldikgICAoIXN0cmNtcChn ZXRfcHJvcF9zdWJzeXN0ZW0oZGV2KSwgImRybSIpKQorI2RlZmluZSBpc19wY2lfc3Vic3lzdGVt KGRldikgICAoIXN0cmNtcChnZXRfcHJvcF9zdWJzeXN0ZW0oZGV2KSwgInBjaSIpKQorI2RlZmlu ZSBpc19wbGF0Zm9ybV9zdWJzeXN0ZW0oZGV2KSBcCisJKCFzdHJjbXAoZ2V0X3Byb3Bfc3Vic3lz dGVtKGRldiksICJwbGF0Zm9ybSIpKQorCisvKiBHZXRzIFBDSV9JRCBwcm9wZXJ0eSwgc3BsaXRz IHRvIHh4eHg6eXl5eSBhbmQgc3RvcmVzCisgKiB4eHh4IHRvIGRldi0+dmVuZG9yIGFuZCB5eXl5 IHRvIGRldi0+ZGV2aWNlIGZvcgorICogZmFzdGVyIGFjY2Vzcy4KKyAqLworc3RhdGljIHZvaWQg c2V0X3ZlbmRvcl9kZXZpY2Uoc3RydWN0IGlndF9kZXZpY2UgKmRldikKK3sKKwljb25zdCBjaGFy ICpwY2lfaWQgPSBnZXRfcHJvcChkZXYsICJQQ0lfSUQiKTsKKworCWlmICghcGNpX2lkIHx8IHN0 cmxlbihwY2lfaWQpICE9IDkpCisJCXJldHVybjsKKwlkZXYtPnZlbmRvciA9IHN0cm5kdXAocGNp X2lkLCA0KTsKKwlkZXYtPmRldmljZSA9IHN0cm5kdXAocGNpX2lkICsgNSwgNCk7Cit9CisKKy8q IEFsbG9jYXRlIGFycmF5cyBmb3Iga2VlcGluZyBzY2FubmVkIGRldmljZXMgKi8KK3N0YXRpYyBi b29sIHByZXBhcmVfc2Nhbih2b2lkKQoreworCWlmICghaWd0X2RldnMuZGV2cykKKwkJaWd0X2Rl dnMuZGV2cyA9IGdfcHRyX2FycmF5X3NpemVkX25ldyg0KTsKKwlpZiAoIWlndF9kZXZzLnZpZXcp CisJCWlndF9kZXZzLnZpZXcgPSBnX3B0cl9hcnJheV9zaXplZF9uZXcoNCk7CisKKwlpZiAoIWln dF9kZXZzLmRldnMgfHwgIWlndF9kZXZzLnZpZXcpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVy biB0cnVlOworfQorCisvKiBDcmVhdGUgbmV3IGlndF9kZXZpY2UgZnJvbSB1ZGV2IGRldmljZS4K KyAqIEZpbGxzIHN0cnVjdHVyZSB3aXRoIG1vc3QgdXNhYmxlIHVkZXYgZGV2aWNlIHZhcmlhYmxl cywgcHJvcGVydGllcworICogYW5kIHN5c2F0dHJzLgorICovCitzdGF0aWMgc3RydWN0IGlndF9k ZXZpY2UgKmlndF9kZXZpY2VfbmV3X2Zyb21fdWRldihzdHJ1Y3QgdWRldl9kZXZpY2UgKmRldikK K3sKKwlzdHJ1Y3QgaWd0X2RldmljZSAqaWRldiA9IGlndF9kZXZpY2VfbmV3KCk7CisKKwlpZ3Rf YXNzZXJ0KGlkZXYpOworCWlkZXYtPnN5c3BhdGggPSBnX3N0cmR1cCh1ZGV2X2RldmljZV9nZXRf c3lzcGF0aChkZXYpKTsKKwlpZGV2LT5zdWJzeXN0ZW0gPSBnX3N0cmR1cCh1ZGV2X2RldmljZV9n ZXRfc3Vic3lzdGVtKGRldikpOworCWlkZXYtPmRldm5vZGUgPSBnX3N0cmR1cCh1ZGV2X2Rldmlj ZV9nZXRfZGV2bm9kZShkZXYpKTsKKworCWlmIChpZGV2LT5kZXZub2RlICYmIHN0cnN0cihpZGV2 LT5kZXZub2RlLCAiL2Rldi9kcmkvY2FyZCIpKQorCQlpZGV2LT5kcm1fY2FyZCA9IGdfc3RyZHVw KGlkZXYtPmRldm5vZGUpOworCWVsc2UgaWYgKGlkZXYtPmRldm5vZGUgJiYgc3Ryc3RyKGlkZXYt PmRldm5vZGUsICIvZGV2L2RyaS9yZW5kZXIiKSkKKwkJaWRldi0+ZHJtX3JlbmRlciA9IGdfc3Ry ZHVwKGlkZXYtPmRldm5vZGUpOworCisJZ2V0X3Byb3BzKGRldiwgaWRldik7CisJZ2V0X2F0dHJz KGRldiwgaWRldik7CisKKwlyZXR1cm4gaWRldjsKK30KKworLyogSXRlcmF0ZSBvdmVyIGFsbCBp Z3RfZGV2aWNlcyBhcnJheSBhbmQgZmluZCBvbmUgbWF0Y2hlZCB0bworICogc3Vic3lzdGVtIGFu ZCBzeXNwYXRoLgorICovCitzdGF0aWMgc3RydWN0IGlndF9kZXZpY2UgKmlndF9kZXZpY2VfZmlu ZChjb25zdCBjaGFyICpzdWJzeXN0ZW0sCisJCQkJCSAgY29uc3QgY2hhciAqc3lzcGF0aCkKK3sK KwlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2OworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBpZ3RfZGV2 cy5kZXZzLT5sZW47IGkrKykgeworCQlkZXYgPSBnX3B0cl9hcnJheV9pbmRleChpZ3RfZGV2cy5k ZXZzLCBpKTsKKwkJaWYgKCFzdHJjbXAoZGV2LT5zdWJzeXN0ZW0sIHN1YnN5c3RlbSkgJiYKKwkJ CSFzdHJjbXAoZGV2LT5zeXNwYXRoLCBzeXNwYXRoKSkKKwkJCXJldHVybiBkZXY7CisJfQorCXJl dHVybiBOVUxMOworfQorCisvKiBGb3IgZWFjaCBkcm0gaWd0X2RldmljZSBhZGQgb3IgdXBkYXRl IGl0cyBwYXJlbnQgaWd0X2RldmljZSB0byB0aGUgYXJyYXkuCisgKiBBcyBjYXJkL3JlbmRlciBk cm0gZGV2aWNlcyBtb3N0bHkgaGF2ZSBzYW1lIHBhcmVudCAodmttcyBpcyBhbiBleGNlcHRpb24p CisgKiBsaW5rIHRvIGl0IGFuZCB1cGRhdGUgY29ycmVzcG9uZGluZyBkcm1fY2FyZCAvIGRybV9y ZW5kZXIgZmllbGRzLgorICovCitzdGF0aWMgdm9pZCB1cGRhdGVfb3JfYWRkX3BhcmVudChzdHJ1 Y3QgdWRldl9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGlndF9kZXZpY2UgKmlkZXYpCit7CisJ c3RydWN0IHVkZXZfZGV2aWNlICpwYXJlbnRfZGV2OworCXN0cnVjdCBpZ3RfZGV2aWNlICpwYXJl bnRfaWRldjsKKwljb25zdCBjaGFyICpzdWJzeXN0ZW0sICpzeXNwYXRoLCAqZGV2bmFtZTsKKwor CXBhcmVudF9kZXYgPSB1ZGV2X2RldmljZV9nZXRfcGFyZW50KGRldik7CisJaWd0X2Fzc2VydChw YXJlbnRfZGV2KTsKKworCXN1YnN5c3RlbSA9IHVkZXZfZGV2aWNlX2dldF9zdWJzeXN0ZW0ocGFy ZW50X2Rldik7CisJc3lzcGF0aCA9IHVkZXZfZGV2aWNlX2dldF9zeXNwYXRoKHBhcmVudF9kZXYp OworCisJcGFyZW50X2lkZXYgPSBpZ3RfZGV2aWNlX2ZpbmQoc3Vic3lzdGVtLCBzeXNwYXRoKTsK KwlpZiAoIXBhcmVudF9pZGV2KSB7CisJCXBhcmVudF9pZGV2ID0gaWd0X2RldmljZV9uZXdfZnJv bV91ZGV2KHBhcmVudF9kZXYpOworCQlpZiAoaXNfcGNpX3N1YnN5c3RlbShwYXJlbnRfaWRldikp IHsKKwkJCXNldF92ZW5kb3JfZGV2aWNlKHBhcmVudF9pZGV2KTsKKwkJCXBhcmVudF9pZGV2LT52 cyA9IGdldF92ZW5kb3Jfc3BlYyhwYXJlbnRfaWRldi0+dmVuZG9yKTsKKwkJfQorCQlnX3B0cl9h cnJheV9hZGQoaWd0X2RldnMuZGV2cywgcGFyZW50X2lkZXYpOworCX0KKwlkZXZuYW1lID0gdWRl dl9kZXZpY2VfZ2V0X2Rldm5vZGUoZGV2KTsKKwlpZiAoc3Ryc3RyKGRldm5hbWUsICIvZGV2L2Ry aS9jYXJkIikpCisJCXBhcmVudF9pZGV2LT5kcm1fY2FyZCA9IGdfc3RyZHVwKGRldm5hbWUpOwor CWVsc2UgaWYgKHN0cnN0cihkZXZuYW1lLCAiL2Rldi9kcmkvcmVuZGVyIikpCisJCXBhcmVudF9p ZGV2LT5kcm1fcmVuZGVyID0gZ19zdHJkdXAoZGV2bmFtZSk7CisKKwlpZGV2LT5wYXJlbnQgPSBw YXJlbnRfaWRldjsKK30KKworc3RhdGljIGdpbnQgZGV2c19jb21wYXJlKGdjb25zdHBvaW50ZXIg YSwgZ2NvbnN0cG9pbnRlciBiKQoreworCXN0cnVjdCBpZ3RfZGV2aWNlICpkZXYxLCAqZGV2MjsK KwlpbnQgcmV0OworCisJZGV2MSA9ICooc3RydWN0IGlndF9kZXZpY2UgKiopIGE7CisJZGV2MiA9 ICooc3RydWN0IGlndF9kZXZpY2UgKiopIGI7CisJcmV0ID0gc3RyY21wKGRldjEtPnN1YnN5c3Rl bSwgZGV2Mi0+c3Vic3lzdGVtKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJu IHN0cmNtcChkZXYxLT5zeXNwYXRoLCBkZXYyLT5zeXNwYXRoKTsKK30KKworLyogQ29yZSBzY2Fu bmluZyBmdW5jdGlvbi4KKyAqCisgKiBBbGwgc2Nhbm5lZCBkZXZpY2VzIGFyZSBrZXB0IGluc2lk ZSBpZ3RfZGV2cy5kZXZzIHBvaW50ZXIgYXJyYXkuCisgKiBFYWNoIGFkZGVkIGRldmljZSBpcyBp Z3RfZGV2aWNlIHN0cnVjdHVyZSwgd2hpY2ggY29udHJhcnkgdG8gdWRldiBkZXZpY2UKKyAqIGhh cyBwcm9wZXJ0aWVzIC8gc3lzYXR0cnMgc3RvcmVkIGluc2lkZSBoYXNoIHRhYmxlIGluc3RlYWQg b2YgbGlzdC4KKyAqCisgKiBGdW5jdGlvbiBpdGVyYXRlcyBvdmVyIGRldmljZXMgb24gJ2RybScg c3Vic3lzdGVtLiBGb3IgZWFjaCBkcm0gZGV2aWNlCisgKiBpdHMgcGFyZW50IGlzIHRha2VuIChi dXMgZGV2aWNlKSBhbmQgc3RvcmVkIGluc2lkZSBzYW1lIGFycmF5LgorICogRnVuY3Rpb24gc29y dHMgYWxsIGZvdW5kIGRldmljZXMgdG8ga2VlcCBzYW1lIG9yZGVyIG9mIGJ1cyBkZXZpY2VzCisg KiBmb3IgcHJvdmlkaW5nIHByZWRpY3RhYmxlIHNlYXJjaC4KKyAqLworc3RhdGljIHZvaWQgc2Nh bl9kcm1fZGV2aWNlcyh2b2lkKQoreworCXN0cnVjdCB1ZGV2ICp1ZGV2OworCXN0cnVjdCB1ZGV2 X2VudW1lcmF0ZSAqZW51bWVyYXRlOworCXN0cnVjdCB1ZGV2X2xpc3RfZW50cnkgKmRldmljZXMs ICpkZXZfbGlzdF9lbnRyeTsKKwlpbnQgcmV0OworCisJdWRldiA9IHVkZXZfbmV3KCk7CisJaWd0 X2Fzc2VydCh1ZGV2KTsKKworCWVudW1lcmF0ZSA9IHVkZXZfZW51bWVyYXRlX25ldyh1ZGV2KTsK KwlpZ3RfYXNzZXJ0KGVudW1lcmF0ZSk7CisKKwlEQkcoIlNjYW5uaW5nIGRybSBzdWJzeXN0ZW1c biIpOworCXJldCA9IHVkZXZfZW51bWVyYXRlX2FkZF9tYXRjaF9zdWJzeXN0ZW0oZW51bWVyYXRl LCAiZHJtIik7CisJaWd0X2Fzc2VydCghcmV0KTsKKworCXVkZXZfZW51bWVyYXRlX2FkZF9tYXRj aF9wcm9wZXJ0eShlbnVtZXJhdGUsICJERVZOQU1FIiwgIi9kZXYvZHJpLyoiKTsKKwlpZ3RfYXNz ZXJ0KCFyZXQpOworCisJcmV0ID0gdWRldl9lbnVtZXJhdGVfc2Nhbl9kZXZpY2VzKGVudW1lcmF0 ZSk7CisJaWd0X2Fzc2VydCghcmV0KTsKKworCWRldmljZXMgPSB1ZGV2X2VudW1lcmF0ZV9nZXRf bGlzdF9lbnRyeShlbnVtZXJhdGUpOworCWlmICghZGV2aWNlcykKKwkJcmV0dXJuOworCisJdWRl dl9saXN0X2VudHJ5X2ZvcmVhY2goZGV2X2xpc3RfZW50cnksIGRldmljZXMpIHsKKwkJY29uc3Qg Y2hhciAqcGF0aDsKKwkJc3RydWN0IHVkZXZfZGV2aWNlICpkZXY7CisJCXN0cnVjdCBpZ3RfZGV2 aWNlICppZGV2OworCisJCXBhdGggPSB1ZGV2X2xpc3RfZW50cnlfZ2V0X25hbWUoZGV2X2xpc3Rf ZW50cnkpOworCQlkZXYgPSB1ZGV2X2RldmljZV9uZXdfZnJvbV9zeXNwYXRoKHVkZXYsIHBhdGgp OworCQlpZGV2ID0gaWd0X2RldmljZV9uZXdfZnJvbV91ZGV2KGRldik7CisJCXVwZGF0ZV9vcl9h ZGRfcGFyZW50KGRldiwgaWRldik7CisJCWdfcHRyX2FycmF5X2FkZChpZ3RfZGV2cy5kZXZzLCBp ZGV2KTsKKworCQl1ZGV2X2RldmljZV91bnJlZihkZXYpOworCX0KKwl1ZGV2X2VudW1lcmF0ZV91 bnJlZihlbnVtZXJhdGUpOworCXVkZXZfdW5yZWYodWRldik7CisKKwlnX3B0cl9hcnJheV9zb3J0 KGlndF9kZXZzLmRldnMsIGRldnNfY29tcGFyZSk7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBpZ3Rf ZGV2cy5kZXZzLT5sZW47IGkrKykgeworCQlnX3B0cl9hcnJheV9hZGQoaWd0X2RldnMudmlldywK KwkJCQlnX3B0cl9hcnJheV9pbmRleChpZ3RfZGV2cy5kZXZzLCBpKSk7CisJfQorfQorCitzdGF0 aWMgc3RydWN0IG5hbWVfdmFsdWUgZmlsdGVyX2RlZmluaXRpb25fbGlzdFtdOworc3RhdGljIHZv aWQgcG9wdWxhdGVfZ3B1X2RhdGEodm9pZCkKK3sKKwlmaWxsX2h0KCZncHVfdmVuZG9yX2h0LCAm Z3B1X3ZlbmRvcl9saXN0WzBdKTsKKwlmaWxsX2h0KCZmaWx0ZXJfZGVmaW5pdGlvbl9odCwgJmZp bHRlcl9kZWZpbml0aW9uX2xpc3RbMF0pOworfQorCitzdGF0aWMgdm9pZCBpZ3RfZGV2aWNlX2Zy ZWUoc3RydWN0IGlndF9kZXZpY2UgKmRldikKK3sKKwlmcmVlKGRldi0+ZGV2bm9kZSk7CisJZnJl ZShkZXYtPnN1YnN5c3RlbSk7CisJZnJlZShkZXYtPnN5c3BhdGgpOworCWZyZWUoZGV2LT5kcm1f Y2FyZCk7CisJZnJlZShkZXYtPmRybV9yZW5kZXIpOworCWZyZWUoZGV2LT52ZW5kb3IpOworCWZy ZWUoZGV2LT5kZXZpY2UpOworCWdfaGFzaF90YWJsZV9kZXN0cm95KGRldi0+YXR0cnNfaHQpOwor CWdfaGFzaF90YWJsZV9kZXN0cm95KGRldi0+cHJvcHNfaHQpOworfQorCisvKioKKyAqIGlndF9k ZXZpY2VzX3NjYW4KKyAqIEBmb3JjZTogZW5mb3JjZSBzY2FubmluZyBkZXZpY2VzCisgKgorICog RnVuY3Rpb24gc2NhbnMgdWRldiBpbiBzZWFyY2ggb2YgZ3B1IGRldmljZXMuIEZvciBmaXJzdCBy dW4gaXQgY2FuIGJlCisgKiBjYWxsZWQgd2l0aCBAZm9yY2UgPSBmYWxzZS4gSWYgc29tZXRoaW5n IGNoYW5nZXMgZHVyaW5nIHRoZSB0aGUgdGVzdAorICogb3IgdGVzdCBkb2VzIHNvbWUgbW9kdWxl IGxvYWRpbmcgKG5ldyBkcm0gZGV2aWNlcyBvY2N1cnMgZHVyaW5nIGV4ZWN1dGlvbikKKyAqIGZ1 bmN0aW9uIG11c3QgYmUgY2FsbGVkIGFnYWluIHdpdGggQGZvcmNlID0gdHJ1ZSB0byByZWZyZXNo IGRldmljZSBhcnJheS4KKyAqLwordm9pZCBpZ3RfZGV2aWNlc19zY2FuKGJvb2wgZm9yY2UpCit7 CisJaWYgKGZvcmNlICYmIGlndF9kZXZzLmRldnNfc2Nhbm5lZCkgeworCQlmb3IgKGludCBpID0g MDsgaSA8IGlndF9kZXZzLmRldnMtPmxlbjsgaSsrKSB7CisJCQlzdHJ1Y3QgaWd0X2RldmljZSAq ZGV2ID0KKwkJCQkJZ19wdHJfYXJyYXlfaW5kZXgoaWd0X2RldnMuZGV2cywgaSk7CisJCQlpZ3Rf ZGV2aWNlX2ZyZWUoZGV2KTsKKwkJCWZyZWUoZGV2KTsKKwkJfQorCQlpZ3RfZGV2cy5kZXZzX3Nj YW5uZWQgPSBmYWxzZTsKKwkJZ19wdHJfYXJyYXlfZnJlZShpZ3RfZGV2cy52aWV3LCB0cnVlKTsK KwkJZ19wdHJfYXJyYXlfZnJlZShpZ3RfZGV2cy5kZXZzLCB0cnVlKTsKKwkJaWd0X2RldnMudmll dyA9IE5VTEw7CisJCWlndF9kZXZzLmRldnMgPSBOVUxMOworCX0KKworCWlmIChpZ3RfZGV2cy5k ZXZzX3NjYW5uZWQpCisJCXJldHVybjsKKworCXBvcHVsYXRlX2JsYWNrbGlzdF9rZXlzKCk7ICAg ICAgLy9rZXlzIGZyb20gc3lzYXR0ciB3ZSBza2lwCisJcG9wdWxhdGVfZ3B1X2RhdGEoKTsKKwor CXByZXBhcmVfc2NhbigpOworCXNjYW5fZHJtX2RldmljZXMoKTsKKworCWlndF9kZXZzLmRldnNf c2Nhbm5lZCA9IHRydWU7Cit9CisKKyNkZWZpbmUgcHJfc2ltcGxlKGssIHYpIHByaW50ZigiICAg ICUtMTZzOiAlc1xuIiwgaywgdikKKyNkZWZpbmUgcHJfc2ltcGxlMihrLCB2MSwgdjIpIHByaW50 ZigiICAgICUtMTZzOiAlczolc1xuIiwgaywgdjEsIHYyKQorI2RlZmluZSBwcl9zaW1wbGVfcHJv cChkZXYsIGtleSkgcHJfc2ltcGxlKGtleSwgZ2V0X3Byb3AoZGV2LCBrZXkpKQorI2RlZmluZSBw cl9zaW1wbGVfYXR0cihkZXYsIGtleSkgcHJfc2ltcGxlKGtleSwgZ2V0X2F0dHIoZGV2LCBrZXkp KQorCitzdGF0aWMgdm9pZCBpZ3RfZGV2c19wcmludF9zaW1wbGUoR1B0ckFycmF5ICp2aWV3KQor eworCXN0cnVjdCBpZ3RfZGV2aWNlICpkZXY7CisJaW50IGk7CisKKwlpZiAoIXZpZXcpCisJCXJl dHVybjsKKworCWlmICghdmlldy0+bGVuKSB7CisJCXByaW50ZigiTm8gR1BVIGRldmljZXMgZm91 bmRcbiIpOworCQlyZXR1cm47CisJfQorCisJZm9yIChpID0gMDsgaSA8IHZpZXctPmxlbjsgaSsr KSB7CisJCWRldiA9IGdfcHRyX2FycmF5X2luZGV4KHZpZXcsIGkpOworCQlwcmludGYoIiVzOiVz XG4iLCBkZXYtPnN1YnN5c3RlbSwgZGV2LT5zeXNwYXRoKTsKKwkJaWYgKGRldi0+ZHJtX2NhcmQp CisJCQlwcl9zaW1wbGUoImRybSBjYXJkIiwgZGV2LT5kcm1fY2FyZCk7CisJCWlmIChkZXYtPmRy bV9yZW5kZXIpCisJCQlwcl9zaW1wbGUoImRybSByZW5kZXIiLCBkZXYtPmRybV9yZW5kZXIpOwor CQlpZiAoaXNfZHJtX3N1YnN5c3RlbShkZXYpKSB7CisJCQlwcl9zaW1wbGUyKCJwYXJlbnQiLCBk ZXYtPnBhcmVudC0+c3Vic3lzdGVtLAorCQkJCSAgIGRldi0+cGFyZW50LT5zeXNwYXRoKTsKKwkJ fSBlbHNlIHsKKwkJCWlmIChpc19wY2lfc3Vic3lzdGVtKGRldikpIHsKKwkJCQlwcl9zaW1wbGUo InZlbmRvciIsIGRldi0+dmVuZG9yKTsKKwkJCQlwcl9zaW1wbGUoImRldmljZSIsIGRldi0+ZGV2 aWNlKTsKKwkJCX0KKwkJfQorCQlwcmludGYoIlxuIik7CisJfQorfQorCisjZGVmaW5lIHByX2Rl dGFpbChrLCB2KSBwcmludGYoIiUtMzJzOiAlc1xuIiwgaywgdikKKworc3RhdGljIHZvaWQgcHJp bnRfaHQoR0hhc2hUYWJsZSAqaHQpCit7CisJR0xpc3QgKmtleXMgPSBnX2hhc2hfdGFibGVfZ2V0 X2tleXMoaHQpOworCisJa2V5cyA9IGdfbGlzdF9zb3J0KGtleXMsIChHQ29tcGFyZUZ1bmMpIHN0 cmNtcCk7CisJd2hpbGUgKGtleXMpIHsKKwkJY2hhciAqayA9IChjaGFyICopIGtleXMtPmRhdGE7 CisJCWNoYXIgKnYgPSBnX2hhc2hfdGFibGVfbG9va3VwKGh0LCBrKTsKKworCQlwcl9kZXRhaWwo aywgdik7CisJCWtleXMgPSBnX2xpc3RfbmV4dChrZXlzKTsKKwl9CisJZ19saXN0X2ZyZWUoa2V5 cyk7Cit9CisKK3N0YXRpYyB2b2lkIGlndF9kZXZzX3ByaW50X2RldGFpbChHUHRyQXJyYXkgKnZp ZXcpCit7CisJc3RydWN0IGlndF9kZXZpY2UgKmRldjsKKwlpbnQgaTsKKworCWlmICghdmlldykK KwkJcmV0dXJuOworCisJaWYgKCF2aWV3LT5sZW4pIHsKKwkJcHJpbnRmKCJObyBHUFUgZGV2aWNl cyBmb3VuZFxuIik7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgdmlldy0+bGVu OyBpKyspIHsKKwkJZGV2ID0gZ19wdHJfYXJyYXlfaW5kZXgodmlldywgaSk7CisJCXByaW50Zigi PT09PT09PT09PSAlczolcyA9PT09PT09PT09XG4iLAorCQkgICAgICAgZGV2LT5zdWJzeXN0ZW0s IGRldi0+c3lzcGF0aCk7CisJCWlmICghaXNfZHJtX3N1YnN5c3RlbShkZXYpKSB7CisJCQlwcl9k ZXRhaWwoImNhcmQgZGV2aWNlIiwgZGV2LT5kcm1fY2FyZCk7CisJCQlwcl9kZXRhaWwoInJlbmRl ciBkZXZpY2UiLCBkZXYtPmRybV9yZW5kZXIpOworCQl9CisKKwkJcHJpbnRmKCJcbltwcm9wZXJ0 aWVzXVxuIik7CisJCXByaW50X2h0KGRldi0+cHJvcHNfaHQpOworCQlwcmludGYoIlxuW2F0dHJp YnV0ZXNdXG4iKTsKKwkJcHJpbnRfaHQoZGV2LT5hdHRyc19odCk7CisJCXByaW50ZigiXG4iKTsK Kwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHJpbnRfZnVuYyB7CisJdm9pZCAoKnBybikoR1B0ckFy cmF5ICp2aWV3KTsKK30gcHJpbnRfZnVuY3Rpb25zW10gPSB7CisJW0lHVF9QUklOVF9TSU1QTEVd ID0geyAucHJuID0gaWd0X2RldnNfcHJpbnRfc2ltcGxlIH0sCisJW0lHVF9QUklOVF9ERVRBSUxd ID0geyAucHJuID0gaWd0X2RldnNfcHJpbnRfZGV0YWlsIH0sCit9OworCisvKioKKyAqIGlndF9k ZXZpY2VzX3ByaW50CisgKiBAcHJpbnR0eXBlOiBJR1RfUFJJTlRfU0lNUExFIG9yIElHVF9QUklO VF9ERVRBSUwKKyAqCisgKiBGdW5jdGlvbiBpcyB1c2VkIGJ5ICdsc2dwdScgdG9vbCB0byBwcmlu dCBkZXZpY2UgYXJyYXkgaW4gc2ltcGxlIG9yIGRldGFpbGVkCisgKiBmb3JtLiBUaGlzIGZ1bmN0 aW9uIGlzIGFkZGVkIGhlcmUgaW5zdGVhZCBpbiAnbHNncHUnIHRvIGF2b2lkIGV4cG9zaW5nCisg KiBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkYXRhIHN0cnVjdHVyZXMuCisgKi8KK3ZvaWQgaWd0 X2RldmljZXNfcHJpbnQoZW51bSBpZ3RfZGV2aWNlc19wcmludF90eXBlIHByaW50dHlwZSkKK3sK KwlwcmludF9mdW5jdGlvbnNbcHJpbnR0eXBlXS5wcm4oaWd0X2RldnMudmlldyk7Cit9CisKKy8q KgorICogaWd0X2RldmljZXNfcHJpbnRfdmVuZG9ycworICoKKyAqIFByaW50IHBjaSBpZCAtPiB2 ZW5kb3IgbWFwcGluZ3MuIFZlbmRvciBuYW1lcyBwcmludGVkIGJ5IHRoaXMgZnVuY3Rpb24KKyAq IGNhbiBiZSB1c2VkIGZvciBmaWx0ZXJzIGxpa2UgcGNpIHdoaWNoIGFsbG93cyBwYXNzaW5nIHZl bmRvciAtIGxpa2UKKyAqIHZlbmRvciBpZCAoODA4Nikgb3IgYXMgYSBzdHJpbmcgKEludGVsKS4K KyAqLwordm9pZCBpZ3RfZGV2aWNlc19wcmludF92ZW5kb3JzKHZvaWQpCit7CisJY29uc3Qgc3Ry dWN0IG5hbWVfdmFsdWUgKmxpc3QgPSAmZ3B1X3ZlbmRvcl9saXN0WzBdOworCisJcHJpbnRmKCJS ZWNvZ25pemVkIHZlbmRvcnM6XG4iKTsKKwlwcmludGYoIiUtOHMgJS0xNnNcbiIsICJQQ0kgSUQi LCAidmVuZG9yIik7CisJd2hpbGUgKGxpc3QtPm5hbWUpIHsKKwkJc3RydWN0IHZlbmRvcl9zcGVj ICp2cyA9IChzdHJ1Y3QgdmVuZG9yX3NwZWMgKikgbGlzdC0+dmFsdWU7CisKKwkJaWYgKHZzKQor CQkJcHJpbnRmKCIlLThzICUtMTZzXG4iLCBsaXN0LT5uYW1lLCB2cy0+dmVuZG9yKTsKKwkJbGlz dCsrOworCX0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGSUxURVJfU1BF Q19OQU1FX0xFTiAzMgorI2RlZmluZSBGSUxURVJfU1BFQ19EQVRBX0xFTiAyNTYKK3N0cnVjdCBm aWx0ZXJfc3BlYyB7CisJY2hhciBuYW1lW0ZJTFRFUl9TUEVDX05BTUVfTEVOXTsKKwljaGFyIGRh dGFbRklMVEVSX1NQRUNfREFUQV9MRU5dOworfTsKKworc3RydWN0IGZpbHRlcl9mdW5jIHsKKwlH UHRyQXJyYXkgKigqZmlsdGVyX2Z1bmN0aW9uKShzdHJ1Y3QgZmlsdGVyX3NwZWMgKmZzcGVjLAor CQkJCSAgICAgIHN0cnVjdCBmaWx0ZXJfZnVuYyAqZmZ1bmMpOworCWNvbnN0IGNoYXIgKmhlbHA7 CisJY29uc3QgY2hhciAqZGV0YWlsOworCisJY29uc3QgY2hhciAqcHJvcGVydHk7CisJY29uc3Qg Y2hhciAqdmFsdWU7Cit9OworCitzdHJ1Y3QgZmlsdGVyX2RhdGEgeworCWNoYXIgKnZlbmRvcjsK KwljaGFyICpkZXZpY2U7CisJY2hhciAqY2FyZDsKKwljaGFyICpkcm07Cit9OworCitzdGF0aWMg R0hhc2hUYWJsZSAqc3BsaXRfZmlsdGVyX2RhdGEoY29uc3QgY2hhciAqZGF0YSkKK3sKKwlHSGFz aFRhYmxlICpodCA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbChnX3N0cl9oYXNoLCBnX3N0cl9lcXVh bCwKKwkJCQkJICAgICAgIGZyZWUsIGZyZWUpOworCWdjaGFyICoqczsKKwlnY2hhciAqKnN0cnYg PSBnX3N0cnNwbGl0KGRhdGEsICIsIiwgLTEpOworCisJcyA9IHN0cnY7CisJd2hpbGUgKCpzKSB7 CisJCWNoYXIgKmssICp2OworCisJCXYgPSBzdHJjaHIoKnMsICc9Jyk7CisJCWlmICghdikgewor CQkJcysrOworCQkJY29udGludWU7CisJCX0KKwkJayA9IHN0cm5kdXAoKnMsIHYgLSAoKnMpKTsK KwkJdiA9IHN0cmR1cCh2ICsgMSk7CisJCWdfaGFzaF90YWJsZV9pbnNlcnQoaHQsIGssIHYpOwor CQlzKys7CisJfQorCWdfc3RyZnJlZXYoc3Rydik7CisKKwlyZXR1cm4gaHQ7Cit9CisKK3N0YXRp YyBib29sIGdldF9maWx0ZXJfc3BlYyhjb25zdCBjaGFyICpmaWx0ZXIsIHN0cnVjdCBmaWx0ZXJf c3BlYyAqc3BlYykKK3sKKwlpZiAoIWZpbHRlcikKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHNz Y2FuZihmaWx0ZXIsICIlMzFbXjpdOiUyNTVzIiwgc3BlYy0+bmFtZSwgc3BlYy0+ZGF0YSkgPj0g MSkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGlz X3ZlbmRvcl9tYXRjaGVkKHN0cnVjdCBpZ3RfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnZlbmRv cikKK3sKKwljb25zdCBjaGFyICp2ZW5kb3JfaWQ7CisKKwlpZiAoIWRldi0+dmVuZG9yIHx8ICF2 ZW5kb3IpCisJCXJldHVybiBmYWxzZTsKKworCS8qIEZpcnN0IHdlIGNvbXBhcmUgdmVuZG9yIGlk LCBsaWtlIDgwODYgKi8KKwlpZiAoIXN0cmNhc2VjbXAoZGV2LT52ZW5kb3IsIHZlbmRvcikpCisJ CXJldHVybiB0cnVlOworCisJLyogTGlrZWx5IHdlIGhhdmUgdmVuZG9yIHN0cmluZyBpbnN0ZWFk IG9mIGlkICovCisJdmVuZG9yX2lkID0gZ2V0X3BjaV92ZW5kb3JfaWRfYnlfbmFtZSh2ZW5kb3Ip OworCWlmICghdmVuZG9yX2lkKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gIXN0cmNhc2Vj bXAoZGV2LT52ZW5kb3IsIHZlbmRvcl9pZCk7Cit9CisKKy8qIEZpbHRlciB3aGljaCBtYXRjaGVz IHN1YnN5c3RlbTovc3lzLy4uLiBwYXRoLgorICogVXNlZCBhcyBmaXJzdCBmaWx0ZXIgaW4gY2hh aW4uCisgKi8KK3N0YXRpYyBHUHRyQXJyYXkgKmZpbHRlcl9zeXMoc3RydWN0IGZpbHRlcl9zcGVj ICpmc3BlYywKKwkJCSAgICAgc3RydWN0IGZpbHRlcl9mdW5jICpmZnVuYykKK3sKKwkodm9pZCkg ZmZ1bmM7CisKKwlEQkcoImZpbHRlciBzeXNcbiIpOworCWlmICghc3RybGVuKGZzcGVjLT5kYXRh KSkKKwkJcmV0dXJuIGlndF9kZXZzLnZpZXc7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IGlndF9k ZXZzLmRldnMtPmxlbjsgaSsrKSB7CisJCXN0cnVjdCBpZ3RfZGV2aWNlICpkZXYgPSBnX3B0cl9h cnJheV9pbmRleChpZ3RfZGV2cy5kZXZzLCBpKTsKKworCQlpZiAoc3RyZXF1YWwoZGV2LT5zdWJz eXN0ZW0sIGZzcGVjLT5uYW1lKSAmJgorCQkJc3RyZXF1YWwoZGV2LT5zeXNwYXRoLCBmc3BlYy0+ ZGF0YSkpIHsKKwkJCWdfcHRyX2FycmF5X2FkZChpZ3RfZGV2cy52aWV3LCBkZXYpOworCQkJYnJl YWs7CisJCX0KKwl9CisKKwlEQkcoIkZpbHRlciBzeXMgdmlldyBzaXplOiAlZFxuIiwgaWd0X2Rl dnMudmlldy0+bGVuKTsKKworCXJldHVybiBpZ3RfZGV2cy52aWV3OworfQorCisvKiBGaW5kIGRy bSBkZXZpY2UgdXNpbmcgZGlyZWN0IHBhdGggdG8gL2Rldi9kcmkvLgorICogSXQgZXh0ZW5kcyBm aWx0ZXJfc3lzIHRvIGFsbG93IHVzaW5nIGRybTovZGV2L2RyaS9jYXJkWCBhbmQKKyAqIGRybTov ZGV2L2RyaS9yZW5kZXJEWCBmaWx0ZXIgc3ludGF4LgorICovCitzdGF0aWMgR1B0ckFycmF5ICpm aWx0ZXJfZHJtKHN0cnVjdCBmaWx0ZXJfc3BlYyAqZnNwZWMsCisJCQkgICAgIHN0cnVjdCBmaWx0 ZXJfZnVuYyAqZmZ1bmMpCit7CisJKHZvaWQpIGZmdW5jOworCisJREJHKCJmaWx0ZXIgZHJtXG4i KTsKKwlpZiAoIXN0cmxlbihmc3BlYy0+ZGF0YSkpCisJCXJldHVybiBpZ3RfZGV2cy52aWV3Owor CisJZm9yIChpbnQgaSA9IDA7IGkgPCBpZ3RfZGV2cy5kZXZzLT5sZW47IGkrKykgeworCQlzdHJ1 Y3QgaWd0X2RldmljZSAqZGV2ID0gZ19wdHJfYXJyYXlfaW5kZXgoaWd0X2RldnMuZGV2cywgaSk7 CisKKwkJaWYgKCFpc19kcm1fc3Vic3lzdGVtKGRldikpCisJCQljb250aW51ZTsKKworCQlpZiAo c3RyZXF1YWwoZGV2LT5zeXNwYXRoLCBmc3BlYy0+ZGF0YSkgfHwKKwkJCXN0cmVxdWFsKGRldi0+ ZHJtX2NhcmQsIGZzcGVjLT5kYXRhKSB8fAorCQkJc3RyZXF1YWwoZGV2LT5kcm1fcmVuZGVyLCBm c3BlYy0+ZGF0YSkpIHsKKwkJCWdfcHRyX2FycmF5X2FkZChpZ3RfZGV2cy52aWV3LCBkZXYpOwor CQkJYnJlYWs7CisJCX0KKwl9CisKKwlEQkcoIkZpbHRlciBkcm0gdmlldyBzaXplOiAlZFxuIiwg aWd0X2RldnMudmlldy0+bGVuKTsKKworCXJldHVybiBpZ3RfZGV2cy52aWV3OworfQorCisvKiBG aW5kIGFwcHJvcHJpYXRlIHBjaSBkZXZpY2UgbWF0Y2hpbmcgdmVuZG9yL2RldmljZS9jYXJkIGZp bHRlciBhcmd1bWVudHMuCisgKi8KK3N0YXRpYyBHUHRyQXJyYXkgKmZpbHRlcl9wY2koc3RydWN0 IGZpbHRlcl9zcGVjICpmc3BlYywKKwkJCSAgICAgc3RydWN0IGZpbHRlcl9mdW5jICpmZnVuYykK K3sKKwlHSGFzaFRhYmxlICpodDsKKwlzdHJ1Y3QgZmlsdGVyX2RhdGEgZmRhdGE7CisJaW50IGNh cmQgPSAtMTsKKwkodm9pZCkgZmZ1bmM7CisKKwlEQkcoImZpbHRlciBwY2lcbiIpOworCisJaHQg PSBzcGxpdF9maWx0ZXJfZGF0YShmc3BlYy0+ZGF0YSk7CisJZmRhdGEudmVuZG9yID0gZ19oYXNo X3RhYmxlX2xvb2t1cChodCwgInZlbmRvciIpOworCWZkYXRhLmRldmljZSA9IGdfaGFzaF90YWJs ZV9sb29rdXAoaHQsICJkZXZpY2UiKTsKKwlmZGF0YS5jYXJkID0gZ19oYXNoX3RhYmxlX2xvb2t1 cChodCwgImNhcmQiKTsKKworCWlmIChmZGF0YS5jYXJkKSB7CisJCXNzY2FuZihmZGF0YS5jYXJk LCAiJWQiLCAmY2FyZCk7CisJCWlmIChjYXJkIDwgMCkgeworCQkJZ19oYXNoX3RhYmxlX2Rlc3Ry b3koaHQpOworCQkJcmV0dXJuIGlndF9kZXZzLnZpZXc7CisJCX0KKwl9IGVsc2UgeworCQljYXJk ID0gMDsKKwl9CisKKwlmb3IgKGludCBpID0gMDsgaSA8IGlndF9kZXZzLmRldnMtPmxlbjsgaSsr KSB7CisJCXN0cnVjdCBpZ3RfZGV2aWNlICpkZXYgPSBnX3B0cl9hcnJheV9pbmRleChpZ3RfZGV2 cy5kZXZzLCBpKTsKKworCQlpZiAoIWlzX3BjaV9zdWJzeXN0ZW0oZGV2KSkKKwkJCWNvbnRpbnVl OworCisJCS8qIFNraXAgaWYgJ3ZlbmRvcicgZG9lc24ndCBtYXRjaCAoaGV4IG9yIG5hbWUpICov CisJCWlmIChmZGF0YS52ZW5kb3IgJiYgIWlzX3ZlbmRvcl9tYXRjaGVkKGRldiwgZmRhdGEudmVu ZG9yKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFNraXAgaWYgJ2RldmljZScgZG9lc24ndCBtYXRj aCAqLworCQlpZiAoZmRhdGEuZGV2aWNlICYmIHN0cmNhc2VjbXAoZmRhdGEuZGV2aWNlLCBkZXYt PmRldmljZSkpCisJCQljb250aW51ZTsKKworCQkvKiBXZSBnZXQgbi10aCBjYXJkICovCisJCWlm ICghY2FyZCkgeworCQkJZ19wdHJfYXJyYXlfYWRkKGlndF9kZXZzLnZpZXcsIGRldik7CisJCQli cmVhazsKKwkJfQorCQljYXJkLS07CisJfQorCisJREJHKCJGaWx0ZXIgcGNpIHZpZXcgc2l6ZTog JWRcbiIsIGlndF9kZXZzLnZpZXctPmxlbik7CisKKwlnX2hhc2hfdGFibGVfZGVzdHJveShodCk7 CisKKwlyZXR1cm4gaWd0X2RldnMudmlldzsKK30KKworLyogSGVscGVyIGZvciBmaW5kaW5nIGZp cnN0IGRldmljZSBtYXRjaGluZyBwcm9wZXJ0eTp2YWx1ZS4KKyAqLworc3RhdGljIEdQdHJBcnJh eSAqZmlsdGVyX3Byb3BlcnR5KHN0cnVjdCBmaWx0ZXJfc3BlYyAqZnNwZWMsCisJCQkJICBzdHJ1 Y3QgZmlsdGVyX2Z1bmMgKmZmdW5jKQoreworCUdIYXNoVGFibGUgKmh0OworCXN0cnVjdCBmaWx0 ZXJfZGF0YSBmZGF0YTsKKwlpbnQgY2FyZCA9IC0xOworCWNvbnN0IGNoYXIgKnByb3BlcnR5ID0g ZmZ1bmMtPnByb3BlcnR5OworCWNvbnN0IGNoYXIgKnZhbHVlID0gZmZ1bmMtPnZhbHVlOworCisJ aWYgKCFwcm9wZXJ0eSB8fCAhdmFsdWUpCisJCXJldHVybiBpZ3RfZGV2cy52aWV3OworCisJREJH KCJmaWx0ZXIgcHJvcGVydHkvdmFsdWUgWyVzLyVzXVxuIiwgcHJvcGVydHksIHZhbHVlKTsKKwor CWh0ID0gc3BsaXRfZmlsdGVyX2RhdGEoZnNwZWMtPmRhdGEpOworCWZkYXRhLmNhcmQgPSBnX2hh c2hfdGFibGVfbG9va3VwKGh0LCAiY2FyZCIpOworCisJaWYgKGZkYXRhLmNhcmQpIHsKKwkJc3Nj YW5mKGZkYXRhLmNhcmQsICIlZCIsICZjYXJkKTsKKwkJaWYgKGNhcmQgPCAwKSB7CisJCQlnX2hh c2hfdGFibGVfZGVzdHJveShodCk7CisJCQlyZXR1cm4gaWd0X2RldnMudmlldzsKKwkJfQorCX0g ZWxzZSB7CisJCWNhcmQgPSAwOworCX0KKworCWZvciAoaW50IGkgPSAwOyBpIDwgaWd0X2RldnMu ZGV2cy0+bGVuOyBpKyspIHsKKwkJY29uc3QgY2hhciAqcHJvcF92YWx1ZTsKKwkJc3RydWN0IGln dF9kZXZpY2UgKmRldiA9IGdfcHRyX2FycmF5X2luZGV4KGlndF9kZXZzLmRldnMsIGkpOworCisJ CXByb3BfdmFsdWUgPSBnZXRfcHJvcChkZXYsIHByb3BlcnR5KTsKKwkJaWYgKHByb3BfdmFsdWUg JiYgIXN0cmNtcChwcm9wX3ZhbHVlLCB2YWx1ZSkpIHsKKwkJCWlmICghY2FyZCkgeworCQkJCWdf cHRyX2FycmF5X2FkZChpZ3RfZGV2cy52aWV3LCBkZXYpOworCQkJCWJyZWFrOworCQkJfQorCQkJ Y2FyZC0tOworCQl9CisJfQorCisJREJHKCJGaWx0ZXIgdmlldyBzaXplOiAlZFxuIiwgaWd0X2Rl dnMudmlldy0+bGVuKTsKKworCWdfaGFzaF90YWJsZV9kZXN0cm95KGh0KTsKKworCXJldHVybiBp Z3RfZGV2cy52aWV3OworfQorCitzdGF0aWMgR1B0ckFycmF5ICpmaWx0ZXJfdmdlbShzdHJ1Y3Qg ZmlsdGVyX3NwZWMgKmZzcGVjLAorCQkJICAgICAgc3RydWN0IGZpbHRlcl9mdW5jICpmZnVuYykK K3sKKwlHUHRyQXJyYXkgKnZpZXcgPSBmaWx0ZXJfcHJvcGVydHkoZnNwZWMsIGZmdW5jKTsKKwor CWlmICh2aWV3KSB7CisJCXN0cnVjdCBpZ3RfZGV2aWNlICpkZXYgPSBnX3B0cl9hcnJheV9pbmRl eCh2aWV3LCAwKTsKKworCQlkZXYtPnZzID0gJnZfdmdlbTsKKwl9CisJcmV0dXJuIHZpZXc7Cit9 CisKK3N0YXRpYyBHUHRyQXJyYXkgKmZpbHRlcl92a21zKHN0cnVjdCBmaWx0ZXJfc3BlYyAqZnNw ZWMsCisJCQkgICAgICBzdHJ1Y3QgZmlsdGVyX2Z1bmMgKmZmdW5jKQoreworCXJldHVybiBmaWx0 ZXJfcHJvcGVydHkoZnNwZWMsIGZmdW5jKTsKK30KKworc3RhdGljIEdQdHJBcnJheSAqZmlsdGVy X3ZjNChzdHJ1Y3QgZmlsdGVyX3NwZWMgKmZzcGVjLAorCQkJICAgICBzdHJ1Y3QgZmlsdGVyX2Z1 bmMgKmZmdW5jKQoreworCUdQdHJBcnJheSAqdmlldyA9IGZpbHRlcl9wcm9wZXJ0eShmc3BlYywg ZmZ1bmMpOworCisJaWYgKHZpZXcpIHsKKwkJc3RydWN0IGlndF9kZXZpY2UgKmRldiA9IGdfcHRy X2FycmF5X2luZGV4KHZpZXcsIDApOworCisJCWRldi0+dnMgPSAmdl92YzQ7CisJfQorCXJldHVy biBmaWx0ZXJfcHJvcGVydHkoZnNwZWMsIGZmdW5jKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCBmaWx0ZXJfZnVuYyBmX2RybSA9IHsKKwkuZmlsdGVyX2Z1bmN0aW9uID0gZmlsdGVyX2RybSwK KwkuaGVscCA9ICJkcm06L2Rldi9kcmkvKiBwYXRoIiwKKwkuZGV0YWlsID0gImZpbmQgZHJtIGRl dmljZSBieSAvZGV2L2RyaS8qIG5vZGVcbiIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZp bHRlcl9mdW5jIGZfcGNpID0geworCS5maWx0ZXJfZnVuY3Rpb24gPSBmaWx0ZXJfcGNpLAorCS5o ZWxwID0gInBjaTpbdmVuZG9yPSUwNHgvbmFtZV1bLGRldmljZT0lMDR4XVssY2FyZD0lZF0iLAor CS5kZXRhaWwgPSAidmVuZG9yIGlzIGhleCBudW1iZXIgb3IgdmVuZG9yIG5hbWVcbiIsCit9Owor CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbHRlcl9mdW5jIGZfdmdlbSA9IHsKKwkuZmlsdGVyX2Z1 bmN0aW9uID0gZmlsdGVyX3ZnZW0sCisJLmhlbHAgPSAidmdlbTpbY2FyZD0lZF0iLAorCS5kZXRh aWwgPSAiY2FyZCBpcyBuLXRoIHZnZW0gY2FyZCBudW1iZXJcbiIsCisJLnByb3BlcnR5ID0gIk1P REFMSUFTIiwKKwkudmFsdWUgPSAicGxhdGZvcm06dmdlbSIsCit9OworCitzdGF0aWMgY29uc3Qg c3RydWN0IGZpbHRlcl9mdW5jIGZfdmttcyA9IHsKKwkuZmlsdGVyX2Z1bmN0aW9uID0gZmlsdGVy X3ZrbXMsCisJLmhlbHAgPSAidmttczpbY2FyZD0lZF0iLAorCS5kZXRhaWwgPSAiY2FyZCBpcyBu LXRoIHZrbXMgY2FyZCBudW1iZXJcbiIsCisJLnByb3BlcnR5ID0gIk1PREFMSUFTIiwKKwkudmFs dWUgPSAicGxhdGZvcm06dmttcyIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbHRlcl9m dW5jIGZfdmM0ID0geworCS5maWx0ZXJfZnVuY3Rpb24gPSBmaWx0ZXJfdmM0LAorCS5oZWxwID0g InZjNDpbY2FyZD0lZF0iLAorCS5kZXRhaWwgPSAiY2FyZCBpcyBuLXRoIHZjNCBjYXJkIG51bWJl clxuIiwKKwkucHJvcGVydHkgPSAiT0ZfQ09NUEFUSUJMRV8wIiwKKwkudmFsdWUgPSAiYnJjbSxi Y20yODM1LXZjNCIsCit9OworCitzdGF0aWMgc3RydWN0IG5hbWVfdmFsdWUgZmlsdGVyX2RlZmlu aXRpb25fbGlzdFtdID0geworCXsgImRybSIsICAgICAoZ3BvaW50ZXIpICZmX2RybSB9LAorCXsg InBjaSIsICAgICAoZ3BvaW50ZXIpICZmX3BjaSB9LAorCXsgInZnZW0iLCAgICAoZ3BvaW50ZXIp ICZmX3ZnZW0gfSwKKwl7ICJ2a21zIiwgICAgKGdwb2ludGVyKSAmZl92a21zIH0sCisJeyAidmM0 IiwgICAgIChncG9pbnRlcikgJmZfdmM0IH0sCisJeyBOVUxMLCB9LAorfTsKKworLyoqCisgKiBA aWd0X2RldmljZV9wcmludF9maWx0ZXJfdHlwZXMKKyAqCisgKiBQcmludCBhbGwgZmlsdGVycyBz eW50YXggZm9yIGRldmljZSBzZWxlY3Rpb24uCisgKi8KK3ZvaWQgaWd0X2RldmljZV9wcmludF9m aWx0ZXJfdHlwZXModm9pZCkKK3sKKwlzdHJ1Y3QgbmFtZV92YWx1ZSAqbGlzdCA9ICZmaWx0ZXJf ZGVmaW5pdGlvbl9saXN0WzBdOworCisJcHJpbnRmKCJGaWx0ZXIgdHlwZXM6XG4tLS1cbiIpOwor CXByaW50ZigiJS0xMnMgICVzXG4tLS1cbiIsICJmaWx0ZXIiLCAic3ludGF4Iik7CisKKwlwcmlu dGYoIiUtMTJzICAlc1xuIiwgIiIsICJkaXJlY3Qgc3Vic3lzdGVtOi9zeXMvLi4uIHBhdGggc2Vs ZWN0aW9uXG4iKTsKKwlwcmludGYoIiUtMTJzICAlc1xuIiwgIiIsCisJICAgICAgICJleDogZHJt Oi9zeXMvZGV2aWNlcy9wY2kwMDAwOjAwLzAwMDA6MDA6MDIuMC9kcm0vY2FyZDAiKTsKKwlwcmlu dGYoIiUtMTJzICAlc1xuIiwgIiIsCisJICAgICAgICIgICAgcGNpOi9zeXMvZGV2aWNlcy9wY2kw MDAwOjAwLzAwMDA6MDA6MDIuMCIpOworCXByaW50ZigiJS0xMnMgICVzXG4iLCAiIiwKKwkgICAg ICAgIiAgICBwbGF0Zm9ybTovc3lzL2RldmljZXMvcGxhdGZvcm0vdmdlbVxuIik7CisKKwl3aGls ZSAobGlzdC0+bmFtZSkgeworCQlzdHJ1Y3QgZmlsdGVyX2Z1bmMgKnYgPSAoc3RydWN0IGZpbHRl cl9mdW5jICopIGxpc3QtPnZhbHVlOworCisJCXByaW50ZigiJS0xMnMgICVzXG4iLCBsaXN0LT5u YW1lLCB2LT5oZWxwKTsKKwkJcHJpbnRmKCIlLTEycyAgJXNcbiIsICIiLCB2LT5kZXRhaWwpOwor CQlsaXN0Kys7CisJfQorfQorCitzdGF0aWMgR1B0ckFycmF5ICpkZXZpY2VfZmlsdGVycyA9IE5V TEw7CisKKyNkZWZpbmUgREVWSUNFX0ZJTFRFUl9DSEVDS19BTExPQygpIFwKKwlkbyB7IFwKKwkJ aWYgKCFkZXZpY2VfZmlsdGVycykgXAorCQkJZGV2aWNlX2ZpbHRlcnMgPSBnX3B0cl9hcnJheV9u ZXdfZnVsbCgyLCBmcmVlKTsgXAorCQlpZ3RfYXNzZXJ0KGRldmljZV9maWx0ZXJzKTsgXAorCX0g d2hpbGUgKDApCisKKy8qKgorICogaWd0X2RldmljZV9maWx0ZXJfY291bnQKKyAqCisgKiBSZXR1 cm5zIG51bWJlciBvZiBmaWx0ZXJzIGNvbGxlY3RlZCBpbiB0aGUgZmlsdGVyIGFycmF5LgorICov CitpbnQgaWd0X2RldmljZV9maWx0ZXJfY291bnQodm9pZCkKK3sKKwlERVZJQ0VfRklMVEVSX0NI RUNLX0FMTE9DKCk7CisKKwlyZXR1cm4gZGV2aWNlX2ZpbHRlcnMtPmxlbjsKK30KKworLyoqCisg KiBpZ3RfZGV2aWNlX2ZpbHRlcl9hZGQKKyAqIEBmaWx0ZXI6IGZpbHRlciB0byBiZSBzdG9yZWQg aW4gZmlsdGVyIGFycmF5CisgKgorICogRnVuY3Rpb24gYWxsb3dzIHBhc3Npbmcgc2luZ2xlIG9y IG1vcmUgZmlsdGVycyB3aXRoaW4gb25lIHN0cmluZy4gVGhpcyBpcworICogZm9yIENJIHdoZW4g aXQgY2FuIGV4dHJhY3QgZmlsdGVyIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGUgKGFuZCBpdCBt dXN0CisgKiBiZSBzaW5nbGUgc3RyaW5nKS4gU28gaWYgQGZpbHRlciBjb250YWlucyBzZW1pY29s b24gJzsnIGl0IHRyZWF0cworICogZWFjaCBwYXJ0IGFzIHNlcGFyYXRlIGZpbHRlciBhbmQgYWRk cyB0byB0aGUgZmlsdGVyIGFycmF5LgorICoKKyAqIFJldHVybnMgbnVtYmVyIG9mIGZpbHRlcnMg YWRkZWQgdG8gZmlsdGVyIGFycmF5LiBDYW4gYmUgZ3JlYXRlciB0aGFuCisgKiAxIGlmIEBmaWx0 ZXIgY29udGFpbnMgbW9yZSB0aGFuIG9uZSBmaWx0ZXIgc2VwYXJhdGVkIGJ5IHNlbWljb2xvbi4K KyAqLworaW50IGlndF9kZXZpY2VfZmlsdGVyX2FkZChjb25zdCBjaGFyICpmaWx0ZXIpCit7CisJ Z2NoYXIgKipzdHJ2LCAqKnM7CisJaW50IGMgPSAwOworCisJREVWSUNFX0ZJTFRFUl9DSEVDS19B TExPQygpOworCisJc3RydiA9IGdfc3Ryc3BsaXQoZmlsdGVyLCAiOyIsIC0xKTsKKworCXMgPSBz dHJ2OworCXdoaWxlICgqcykgeworCQlnX3B0cl9hcnJheV9hZGQoZGV2aWNlX2ZpbHRlcnMsIHN0 cmR1cCgqcykpOworCQlzKys7CisJfQorCWdfc3RyZnJlZXYoc3Rydik7CisKKwlyZXR1cm4gYzsK K30KKworLyoqCisgKiBpZ3RfZGV2aWNlX2ZpbHRlcl9mcmVlX2FsbAorICoKKyAqIEZyZWUgYWxs IGZpbHRlcnMgd2l0aGluIGFycmF5LgorICovCit2b2lkIGlndF9kZXZpY2VfZmlsdGVyX2ZyZWVf YWxsKHZvaWQpCit7CisJaWYgKCFkZXZpY2VfZmlsdGVycykKKwkJcmV0dXJuOworCisJZ19wdHJf YXJyYXlfc2V0X2ZyZWVfZnVuYyhkZXZpY2VfZmlsdGVycywgZnJlZSk7CisJZ19wdHJfYXJyYXlf dW5yZWYoZGV2aWNlX2ZpbHRlcnMpOworCWRldmljZV9maWx0ZXJzID0gTlVMTDsKK30KKworLyoq CisgKiBpZ3RfZGV2aWNlX2ZpbHRlcl9nZXQKKyAqIEBudW06IE51bWJlciBvZiBmaWx0ZXIgZnJv bSBmaWx0ZXIgYXJyYXkKKyAqCisgKiBSZXR1cm5zIGZpbHRlciBzdHJpbmcgb3IgTlVMTCBpZiBA bnVtIGlzIG91dCBvZiByYW5nZSBvZiBmaWx0ZXIgYXJyYXkuCisgKi8KK2NvbnN0IGNoYXIgKmln dF9kZXZpY2VfZmlsdGVyX2dldChpbnQgbnVtKQoreworCURFVklDRV9GSUxURVJfQ0hFQ0tfQUxM T0MoKTsKKworCWlmIChudW0gPCAwIHx8IG51bSA+PSBkZXZpY2VfZmlsdGVycy0+bGVuKQorCQly ZXR1cm4gTlVMTDsKKworCXJldHVybiBnX3B0cl9hcnJheV9pbmRleChkZXZpY2VfZmlsdGVycywg bnVtKTsKK30KKworc3RhdGljIGJvb2wgaWd0X2RldmljZV9maWx0ZXJfYXBwbHkoY29uc3QgY2hh ciAqZmlsdGVyKQoreworCXN0cnVjdCBmaWx0ZXJfc3BlYyBmc3BlYzsKKwlib29sIHJldDsKKwor CWlmICghZmlsdGVyKQorCQlyZXR1cm4gZmFsc2U7CisKKwltZW1zZXQoJmZzcGVjLCAwLCBzaXpl b2YoZnNwZWMpKTsKKwlyZXQgPSBnZXRfZmlsdGVyX3NwZWMoZmlsdGVyLCAmZnNwZWMpOworCWlm ICghcmV0KSB7CisJCWlndF93YXJuKCJDYW4ndCBzcGxpdCBmaWx0ZXIgWyVzXVxuIiwgZmlsdGVy KTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIENsZWFuIHZpZXcgKi8KKwlnX3B0cl9hcnJh eV9yZW1vdmVfcmFuZ2UoaWd0X2RldnMudmlldywgMCwgaWd0X2RldnMudmlldy0+bGVuKTsKKwor CS8qIElmIGZzcGVjLmRhdGEgY29udGFpbnMgIi9zeXMiIHVzZSBkaXJlY3QgcGF0aCBpbnN0ZWFk CisJICogY29udGV4dHVhbCBmaWx0ZXIuCisJICovCisJaWYgKCFzdHJuY21wKGZzcGVjLmRhdGEs ICIvc3lzIiwgNCkpCisJCWZpbHRlcl9zeXMoJmZzcGVjLCBOVUxMKTsKKwllbHNlIHsKKwkJc3Ry dWN0IGZpbHRlcl9mdW5jICpmZnVuYzsKKworCQlmZnVuYyA9IGdfaGFzaF90YWJsZV9sb29rdXAo ZmlsdGVyX2RlZmluaXRpb25faHQsIGZzcGVjLm5hbWUpOworCQlpZiAoIWZmdW5jKSB7CisJCQlp Z3Rfd2FybigiTm8gZmlsdGVyIHdpdGggbmFtZSBbJXNdXG4iLCBmc3BlYy5uYW1lKTsKKwkJCXJl dHVybiBmYWxzZTsKKwkJfQorCQlmZnVuYy0+ZmlsdGVyX2Z1bmN0aW9uKCZmc3BlYywgZmZ1bmMp OworCX0KKworCXJldHVybiB0cnVlOworfQorCisjZGVmaW5lIHNhZmVfc3RybmNweShkc3QsIHNy Yywgc2l6ZSkgZG8geyBcCisJaWYgKChkc3QpICYmIChzcmMpKSBcCisJCXN0cm5jcHkoKGRzdCks IChzcmMpLCAoc2l6ZSkpOyBcCisJfSB3aGlsZSAoMCkKKworLyoqCisgKiBpZ3RfZGV2aWNlX2Nh cmRfbWF0Y2gKKyAqIEBmaWx0ZXI6IGZpbHRlciBzdHJpbmcKKyAqIEBjYXJkOiBwb2ludGVyIHRv IGlndF9kZXZpY2VfY2FyZCBzdHJ1Y3QKKyAqCisgKiBGdW5jdGlvbiBhcHBsaWVzIGZpbHRlciB0 byBtYXRjaCBkZXZpY2UgZnJvbSBkZXZpY2UgYXJyYXkuCisgKgorICogUmV0dXJuczoKKyAqIGZh bHNlIC0gbm8gY2FyZCBwb2ludGVyIHdhcyBwYXNzZWQgb3IgY2FyZCB3YXNuJ3QgbWF0Y2hlZCwK KyAqIHRydWUgLSBjYXJkIG1hdGNoZWQgYW5kIHJldHVybmVkLgorICovCitib29sIGlndF9kZXZp Y2VfY2FyZF9tYXRjaChjb25zdCBjaGFyICpmaWx0ZXIsIHN0cnVjdCBpZ3RfZGV2aWNlX2NhcmQg KmNhcmQpCit7CisJc3RydWN0IGlndF9kZXZpY2UgKmRldiA9IE5VTEw7CisKKwlpZiAoIWNhcmQp CisJCXJldHVybiBmYWxzZTsKKwltZW1zZXQoY2FyZCwgMCwgc2l6ZW9mKCpjYXJkKSk7CisKKwlp Z3RfZGV2aWNlc19zY2FuKGZhbHNlKTsKKworCWlmIChpZ3RfZGV2aWNlX2ZpbHRlcl9hcHBseShm aWx0ZXIpID09IGZhbHNlKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIWlndF9kZXZzLnZpZXct PmxlbikKKwkJcmV0dXJuIGZhbHNlOworCisJLyogV2UgdGFrZSBmaXJzdCBvbmUgaWYgbW9yZSB0 aGFuIG9uZSBjYXJkIG1hdGNoZXMgZmlsdGVyICovCisJZGV2ID0gZ19wdHJfYXJyYXlfaW5kZXgo aWd0X2RldnMudmlldywgMCk7CisJY2FyZC0+Y2hpcHNldCA9IERSSVZFUl9BTlk7CisJaWYgKGRl di0+dnMpCisJCWNhcmQtPmNoaXBzZXQgPSBkZXYtPnZzLT5jaGlwc2V0OworCisJc2FmZV9zdHJu Y3B5KGNhcmQtPnN1YnN5c3RlbSwgZGV2LT5zdWJzeXN0ZW0sIE5BTUVfTUFYKTsKKwlzYWZlX3N0 cm5jcHkoY2FyZC0+Y2FyZCwgZGV2LT5kcm1fY2FyZCwgTkFNRV9NQVgpOworCXNhZmVfc3RybmNw eShjYXJkLT5yZW5kZXIsIGRldi0+ZHJtX3JlbmRlciwgTkFNRV9NQVgpOworCisJcmV0dXJuIHRy dWU7Cit9CmRpZmYgLS1naXQgYS9saWIvaWd0X2RldmljZV9zY2FuLmggYi9saWIvaWd0X2Rldmlj ZV9zY2FuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmM2OGQyM2YwCi0t LSAvZGV2L251bGwKKysrIGIvbGliL2lndF9kZXZpY2Vfc2Nhbi5oCkBAIC0wLDAgKzEsNzQgQEAK Ky8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGlu Y2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwg Y29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgor ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg QU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNI QUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFO WSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFD VElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9V VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RI RVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0lH VF9ERVZJQ0VfU0NBTl9IX18KKyNkZWZpbmUgX19JR1RfREVWSUNFX1NDQU5fSF9fCisKKyNpbmNs dWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxpZ3QuaD4KKworZW51bSBpZ3RfZGV2aWNlc19wcmlu dF90eXBlIHsKKwlJR1RfUFJJTlRfU0lNUExFLAorCUlHVF9QUklOVF9ERVRBSUwsCit9OworCitz dHJ1Y3QgaWd0X2RldmljZV9jYXJkIHsKKwlpbnQgY2hpcHNldDsKKwljaGFyIHN1YnN5c3RlbVtO QU1FX01BWF07CisJY2hhciBjYXJkW05BTUVfTUFYXTsKKwljaGFyIHJlbmRlcltOQU1FX01BWF07 Cit9OworCisvKiBTY2FuIHVkZXYgc3Vic3lzdGVtcy4gRG8gaXQgb25jZSB1bmxlc3MgZm9yY2Ug aXMgdHJ1ZSwgd2hhdCByZXNjYW5zCisgKiBkZXZpY2VzIGFnYWluLgorICovCit2b2lkIGlndF9k ZXZpY2VzX3NjYW4oYm9vbCBmb3JjZSk7CisKK3ZvaWQgaWd0X2RldmljZXNfcHJpbnQoZW51bSBp Z3RfZGV2aWNlc19wcmludF90eXBlIHByaW50dHlwZSk7Cit2b2lkIGlndF9kZXZpY2VzX3ByaW50 X3ZlbmRvcnModm9pZCk7Cit2b2lkIGlndF9kZXZpY2VfcHJpbnRfZmlsdGVyX3R5cGVzKHZvaWQp OworCisvKgorICogSGFuZGxlIGRldmljZSBmaWx0ZXIgY29sbGVjdGlvbiBhcnJheS4KKyAqIElH VCBjYW4gc3RvcmUvcmV0cmlldmUgZmlsdGVycyBwYXNzZWQgYnkgdXNlciB1c2luZyAnLS1kZXZp Y2UnIGFyZ3MuCisgKi8KKworLyogUmV0dXJuIG51bWJlciBvZiBmaWx0ZXJzIGNvbGxlY3RlZC4g Ki8KK2ludCBpZ3RfZGV2aWNlX2ZpbHRlcl9jb3VudCh2b2lkKTsKKworLyogQWRkIGZpbHRlcihz KSB0byB0aGUgYXJyYXkuIFJldHVybnMgbnVtYmVyIG9mIGZpbHRlcnMgYWRkZWQgKD4xIGlmCisg KiB1c2VyIHBhc3NlcyBtb3JlIHRoYW4gb25lIGZpbHRlciBzZXBhcmF0ZWQgYnkgJzsnKQorICov CitpbnQgaWd0X2RldmljZV9maWx0ZXJfYWRkKGNvbnN0IGNoYXIgKmZpbHRlcik7CisKKy8qIEZy ZWUgYWxsIGZpbHRlcnMuICovCit2b2lkIGlndF9kZXZpY2VfZmlsdGVyX2ZyZWVfYWxsKHZvaWQp OworCisvKiBHZXQgbi10aCBmaWx0ZXIgc3RvcmVkIGluIHRoZSBhcnJheSBvciBOVUxMICovCitj b25zdCBjaGFyICppZ3RfZGV2aWNlX2ZpbHRlcl9nZXQoaW50IG51bSk7CisKKy8qIFVzZSBmaWx0 ZXIgdG8gbWF0Y2ggdGhlIGRldmljZSBhbmQgZmlsbCBjYXJkIHN0cnVjdHVyZSAqLworYm9vbCBp Z3RfZGV2aWNlX2NhcmRfbWF0Y2goY29uc3QgY2hhciAqZmlsdGVyLCBzdHJ1Y3QgaWd0X2Rldmlj ZV9jYXJkICpjYXJkKTsKKworI2VuZGlmIC8qIF9fSUdUX0RFVklDRV9TQ0FOX0hfXyAqLwpkaWZm IC0tZ2l0IGEvbGliL21lc29uLmJ1aWxkIGIvbGliL21lc29uLmJ1aWxkCmluZGV4IDIyMWFlMjhj Li43Mzk1ZDM4OCAxMDA2NDQKLS0tIGEvbGliL21lc29uLmJ1aWxkCisrKyBiL2xpYi9tZXNvbi5i dWlsZApAQCAtMTAsNiArMTAsNyBAQCBsaWJfc291cmNlcyA9IFsKIAknaWd0X2NvbG9yX2VuY29k aW5nLmMnLAogCSdpZ3RfZGVidWdmcy5jJywKIAknaWd0X2RldmljZS5jJywKKwknaWd0X2Rldmlj ZV9zY2FuLmMnLAogCSdpZ3RfYXV4LmMnLAogCSdpZ3RfZ3B1X3Bvd2VyLmMnLAogCSdpZ3RfZ3Qu YycsCmRpZmYgLS1naXQgYS90b29scy9NYWtlZmlsZS5zb3VyY2VzIGIvdG9vbHMvTWFrZWZpbGUu c291cmNlcwppbmRleCA1MDcwNmY0MS4uMGU2N2I2NTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL01ha2Vm aWxlLnNvdXJjZXMKKysrIGIvdG9vbHMvTWFrZWZpbGUuc291cmNlcwpAQCAtMzMsNiArMzMsNyBA QCB0b29sc19wcm9nX2xpc3RzID0JCVwKIAlpbnRlbF93YXRlcm1hcmsJCVwKIAlpbnRlbF9nZW1f aW5mbwkJXAogCWludGVsX2d2dGdfdGVzdCAgICAgXAorCWxzZ3B1CQkJXAogCSQoTlVMTCkKIAog ZGlzdF9iaW5fU0NSSVBUUyA9IGludGVsX2dwdV9hYnJ0CmRpZmYgLS1naXQgYS90b29scy9sc2dw dS5jIGIvdG9vbHMvbHNncHUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4u YmM2MDQ2ZmEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9sc2dwdS5jCkBAIC0wLDAgKzEsMjYx IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv biBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24K KyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0 cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoK KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4g YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgor ICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVO VCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZP UiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9N LCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S IE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRl ICJpZ3RfZGV2aWNlX3NjYW4uaCIKKyNpbmNsdWRlICJpZ3QuaCIKKyNpbmNsdWRlIDxzeXMvaW9j dGwuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8 c3RyaW5nLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorCitlbnVt IHsKKwlPUFRfUFJJTlRfREVUQUlMICAgPSAncCcsCisJT1BUX0xJU1RfVkVORE9SUyAgID0gJ3Yn LAorCU9QVF9MSVNUX0ZJTFRFUlMgICA9ICdsJywKKwlPUFRfREVWSUNFICAgICAgICAgPSAnZCcs CisJT1BUX0hFTFAgICAgICAgICAgID0gJ2gnCit9OworCitzdGF0aWMgYm9vbCBnX3Nob3dfdmVu ZG9yczsKK3N0YXRpYyBib29sIGdfbGlzdF9maWx0ZXJzOworc3RhdGljIGJvb2wgZ19kZXZpY2U7 CitzdGF0aWMgYm9vbCBnX2hlbHA7CitzdGF0aWMgY2hhciAqaWd0X3JjX2RldmljZTsKKworc3Rh dGljIGNvbnN0IGNoYXIgKnVzYWdlX3N0ciA9CisJInVzYWdlOiBsc2dwdSBbb3B0aW9uc11cblxu IgorCSJPcHRpb25zOlxuIgorCSIgIC1wLCAtLXByaW50LWRldGFpbHMgICAgICAgICBQcmludCBk ZXZpY2VzIHdpdGggZGV0YWlsc1xuIgorCSIgIC12LCAtLWxpc3QtdmVuZG9ycyAgICAgICAgICBM aXN0IHJlY29nbml6ZWQgdmVuZG9yc1xuIgorCSIgIC1sLCAtLWxpc3QtZmlsdGVyLXR5cGVzICAg ICBMaXN0IHJlZ2lzdGVyZWQgZGV2aWNlIGZpbHRlcnMgdHlwZXNcbiIKKwkiICAtZCwgLS1kZXZp Y2UgZmlsdGVyICAgICAgICAgRGV2aWNlIGZpbHRlciwgY2FuIGJlIGdpdmVuIG11bHRpcGxlIHRp bWVzXG4iCisJIiAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwIG1l c3NhZ2UgYW5kIGV4aXRcbiI7CisKK3N0YXRpYyB2b2lkIHRlc3RfZGV2aWNlX29wZW4oc3RydWN0 IGlndF9kZXZpY2VfY2FyZCAqY2FyZCkKK3sKKwlpbnQgZmQ7CisKKwlpZiAoIWNhcmQpCisJCXJl dHVybjsKKworCWZkID0gZHJtX29wZW5fY2FyZChjYXJkKTsKKwlpZiAoZmQgPj0gMCkgeworCQlw cmludGYoIkRldmljZSAlcyBzdWNjZXNzZnVsbHkgb3BlbmVkXG4iLCBjYXJkLT5jYXJkKTsKKwkJ Y2xvc2UoZmQpOworCX0gZWxzZSB7CisJCWlmIChzdHJsZW4oY2FyZC0+Y2FyZCkpCisJCQlwcmlu dGYoIkNhbm5vdCBvcGVuIGNhcmQgJXMgZGV2aWNlXG4iLCBjYXJkLT5jYXJkKTsKKwkJZWxzZQor CQkJcHJpbnRmKCJDYW5ub3Qgb3BlbiBjYXJkIGRldmljZSwgZW1wdHkgbmFtZVxuIik7CisJfQor CisJZmQgPSBkcm1fb3Blbl9yZW5kZXIoY2FyZCk7CisJaWYgKGZkID49IDApIHsKKwkJcHJpbnRm KCJEZXZpY2UgJXMgc3VjY2Vzc2Z1bGx5IG9wZW5lZFxuIiwgY2FyZC0+cmVuZGVyKTsKKwkJY2xv c2UoZmQpOworCX0gZWxzZSB7CisJCWlmIChzdHJsZW4oY2FyZC0+cmVuZGVyKSkKKwkJCXByaW50 ZigiQ2Fubm90IG9wZW4gcmVuZGVyICVzIGRldmljZVxuIiwgY2FyZC0+cmVuZGVyKTsKKwkJZWxz ZQorCQkJcHJpbnRmKCJDYW5ub3Qgb3BlbiByZW5kZXIgZGV2aWNlLCBlbXB0eSBuYW1lXG4iKTsK Kwl9Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2NhcmQoc3RydWN0IGlndF9kZXZpY2VfY2FyZCAq Y2FyZCkKK3sKKwlpZiAoIWNhcmQpCisJCXJldHVybjsKKworCXByaW50Zigic3Vic3lzdGVtICAg OiAlc1xuIiwgY2FyZC0+c3Vic3lzdGVtKTsKKwlwcmludGYoImNoaXBzZXQgICAgIDogJXhcbiIs IGNhcmQtPmNoaXBzZXQpOworCXByaW50ZigiZHJtIGNhcmQgICAgOiAlc1xuIiwgY2FyZC0+Y2Fy ZCk7CisJcHJpbnRmKCJkcm0gcmVuZGVyICA6ICVzXG4iLCBjYXJkLT5yZW5kZXIpOworfQorCisv KiBQYXJ0aWFsbHkgY29waWVkIGZyb20gaWd0X2NvcmUgdG8gc2ltdWxhdGUgZGV2aWNlIHNlbGVj dGlvbiBvcmRlcjoKKyAqIDEuIC0tZGV2aWNlICAgICAgICAoSUdUX0RFVklDRSBhbmQgLmlndHJj IENvbW1vbjo6RGV2aWNlIGFyZSBpZ25vcmVkKQorICogMi4gSUdUX0RFVklDRSBlbnYgICguaWd0 cmMgQ29tbW9uOjpEZXZpY2UgaXMgaWdub3JlZCkKKyAqIDMuIC5pZ3RyYyAgICAgICAgICAob3Zl cnJpZGVzCisgKi8KK3N0YXRpYyB2b2lkIGNvbW1vbl9pbml0X2NvbmZpZyh2b2lkKQoreworCWNo YXIgKmtleV9maWxlX2VudiA9IE5VTEw7CisJY2hhciAqa2V5X2ZpbGVfbG9jID0gTlVMTDsKKwlH RXJyb3IgKmVycm9yID0gTlVMTDsKKwlHS2V5RmlsZSAqaWd0X2tleV9maWxlOworCWludCByZXQ7 CisKKwkvKiBGaWx0ZXIgY291bnQgPiAwLCBqdXN0IHNraXAgLmlndHJjICovCisJaWYgKGlndF9k ZXZpY2VfZmlsdGVyX2NvdW50KCkpCisJCXJldHVybjsKKworCS8qIERldGVybWluZSBpZ3QgY29u ZmlnIHBhdGggKi8KKwlrZXlfZmlsZV9lbnYgPSBnZXRlbnYoIklHVF9DT05GSUdfUEFUSCIpOwor CWlmIChrZXlfZmlsZV9lbnYpIHsKKwkJa2V5X2ZpbGVfbG9jID0ga2V5X2ZpbGVfZW52OworCX0g ZWxzZSB7CisJCWtleV9maWxlX2xvYyA9IG1hbGxvYygxMDApOworCQlzbnByaW50ZihrZXlfZmls ZV9sb2MsIDEwMCwgIiVzLy5pZ3RyYyIsIGdfZ2V0X2hvbWVfZGlyKCkpOworCX0KKworCS8qIExv YWQgaWd0IGNvbmZpZyBmaWxlICovCisJaWd0X2tleV9maWxlID0gZ19rZXlfZmlsZV9uZXcoKTsK KwlyZXQgPSBnX2tleV9maWxlX2xvYWRfZnJvbV9maWxlKGlndF9rZXlfZmlsZSwga2V5X2ZpbGVf bG9jLAorCQkJCQlHX0tFWV9GSUxFX05PTkUsICZlcnJvcik7CisJaWYgKCFyZXQpIHsKKwkJZ19l cnJvcl9mcmVlKGVycm9yKTsKKwkJZ19rZXlfZmlsZV9mcmVlKGlndF9rZXlfZmlsZSk7CisJCWln dF9rZXlfZmlsZSA9IE5VTEw7CisKKwkJcmV0dXJuOworCX0KKworCWdfY2xlYXJfZXJyb3IoJmVy cm9yKTsKKworCWlmICghaWd0X3JjX2RldmljZSkKKwkJaWd0X3JjX2RldmljZSA9CisJCQlnX2tl eV9maWxlX2dldF9zdHJpbmcoaWd0X2tleV9maWxlLCAiQ29tbW9uIiwKKwkJCQkJICAgICAgIkRl dmljZSIsICZlcnJvcik7CisKKwlpZiAoaWd0X3JjX2RldmljZSkgeworCQlpZ3RfZGV2aWNlX2Zp bHRlcl9hZGQoaWd0X3JjX2RldmljZSk7CisJCWdfZGV2aWNlID0gdHJ1ZTsKKwl9CisKKwlnX2Ns ZWFyX2Vycm9yKCZlcnJvcik7Cit9CisKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKK3sKKwlzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9IHsKKwkJeyJwcmlu dC1kZXRhaWwiLCAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBPUFRfUFJJTlRfREVUQUlM fSwKKwkJeyJsaXN0LXZlbmRvcnMiLCAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBPUFRf TElTVF9WRU5ET1JTfSwKKwkJeyJsaXN0LWZpbHRlci10eXBlcyIsIG5vX2FyZ3VtZW50LCAgICAg ICBOVUxMLCBPUFRfTElTVF9GSUxURVJTfSwKKwkJeyJkZXZpY2UiLCAgICAgICAgICAgIHJlcXVp cmVkX2FyZ3VtZW50LCBOVUxMLCBPUFRfREVWSUNFfSwKKwkJeyJoZWxwIiwgICAgICAgICAgICAg IG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBPUFRfSEVMUH0sCisJCXswLCAwLCAwLCAwfQorCX07 CisJaW50IGMsIGluZGV4ID0gMDsKKwljb25zdCBjaGFyICplbnY7CisJZW51bSBpZ3RfZGV2aWNl c19wcmludF90eXBlIHByaW50dHlwZSA9IElHVF9QUklOVF9TSU1QTEU7CisKKwllbnYgPSBnZXRl bnYoIklHVF9ERVZJQ0UiKTsKKwlpZiAoZW52KSB7CisJCWlndF9kZXZpY2VfZmlsdGVyX2FkZChl bnYpOworCQlnX2RldmljZSA9IHRydWU7CisJfQorCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmco YXJnYywgYXJndiwgInB2bGQ6aCIsCisJCQkJbG9uZ19vcHRpb25zLCAmaW5kZXgpKSAhPSAtMSkg eworCQlzd2l0Y2goYykgeworCisJCWNhc2UgT1BUX1BSSU5UX0RFVEFJTDoKKwkJCXByaW50dHlw ZSA9IElHVF9QUklOVF9ERVRBSUw7CisJCQlicmVhazsKKwkJY2FzZSBPUFRfTElTVF9WRU5ET1JT OgorCQkJZ19zaG93X3ZlbmRvcnMgPSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgT1BUX0xJU1Rf RklMVEVSUzoKKwkJCWdfbGlzdF9maWx0ZXJzID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIE9Q VF9ERVZJQ0U6CisJCQlnX2RldmljZSA9IHRydWU7CisJCQlpZiAoZ2V0ZW52KCJJR1RfREVWSUNF IikgJiYgaWd0X2RldmljZV9maWx0ZXJfY291bnQoKSkgeworCQkJCXVuc2V0ZW52KCJJR1RfREVW SUNFIik7CisJCQkJaWd0X3JjX2RldmljZSA9IE5VTEw7CisJCQkJaWd0X2RldmljZV9maWx0ZXJf ZnJlZV9hbGwoKTsKKwkJCX0KKwkJCWlndF9kZXZpY2VfZmlsdGVyX2FkZChvcHRhcmcpOworCQkJ YnJlYWs7CisJCWNhc2UgT1BUX0hFTFA6CisJCQlnX2hlbHAgPSB0cnVlOworCQkJYnJlYWs7CisJ CX0KKwl9CisJY29tbW9uX2luaXRfY29uZmlnKCk7CisKKwlpZiAoZ19oZWxwKSB7CisJCXByaW50 ZigiJXNcbiIsIHVzYWdlX3N0cik7CisJCWV4aXQoMCk7CisJfQorCisJaWYgKGdfc2hvd192ZW5k b3JzKSB7CisJCWlndF9kZXZpY2VzX3ByaW50X3ZlbmRvcnMoKTsKKwkJcmV0dXJuIDA7CisJfQor CisJaWYgKGdfbGlzdF9maWx0ZXJzKSB7CisJCWlndF9kZXZpY2VfcHJpbnRfZmlsdGVyX3R5cGVz KCk7CisJCXJldHVybiAwOworCX0KKworCWlndF9kZXZpY2VzX3NjYW4oZmFsc2UpOworCisJaWYg KGdldGVudigiSUdUX0RFVklDRSIpKSB7CisJCXByaW50ZigiTm90aWNlOiBVc2luZyBJR1RfREVW SUNFIGRldmljZSBzZXR0aW5ncyBbJXNdXG4iLAorCQkgICAgICAgZ2V0ZW52KCJJR1RfREVWSUNF IikpOworCX0gZWxzZSBpZiAoaWd0X3JjX2RldmljZSkgeworCQlwcmludGYoIk5vdGljZTogVXNp bmcgLmlndHJjIGRldmljZSBzZXR0aW5ncyBbJXNdXG4iLAorCQkgICAgICAgaWd0X3JjX2Rldmlj ZSk7CisJfQorCisJaWYgKGdfZGV2aWNlKSB7CisJCWludCBuID0gaWd0X2RldmljZV9maWx0ZXJf Y291bnQoKTsKKwkJcHJpbnRmKCI9PT0gRGV2aWNlIGZpbHRlciBsaXN0ID09PVxuIik7CisJCWZv ciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQlwcmludGYoIlslMmRdOiAlc1xuIiwgaSwK KwkJCSAgICAgICBpZ3RfZGV2aWNlX2ZpbHRlcl9nZXQoaSkpOworCQl9CisJCXByaW50ZigiXG4i KTsKKworCQlwcmludGYoIj09PSBUZXN0aW5nIGRldmljZSBvcGVuID09PVxuIik7CisJCWZvciAo aW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQlzdHJ1Y3QgaWd0X2RldmljZV9jYXJkIGNhcmQ7 CisJCQljb25zdCBjaGFyICpmaWx0ZXIgPSBpZ3RfZGV2aWNlX2ZpbHRlcl9nZXQoaSk7CisKKwkJ CWlmICghaWd0X2RldmljZV9jYXJkX21hdGNoKGZpbHRlciwgJmNhcmQpKSB7CisJCQkJcHJpbnRm KCJbJTJkXTogTm8gZGV2aWNlIGZvdW5kIGZvciBmaWx0ZXJcblxuIiwKKwkJCQkgICAgICAgaSk7 CisJCQkJY29udGludWU7CisJCQl9CisJCQlwcmludGYoIlslMmRdOiBEZXZpY2UgZGV0YWlsOlxu IiwgaSk7CisJCQlwcmludF9jYXJkKCZjYXJkKTsKKwkJCXRlc3RfZGV2aWNlX29wZW4oJmNhcmQp OworCQkJaWYgKHByaW50dHlwZSA9PSBJR1RfUFJJTlRfREVUQUlMKSB7CisJCQkJcHJpbnRmKCJc biIpOworCQkJCWlndF9kZXZpY2VzX3ByaW50KHByaW50dHlwZSk7CisJCQl9CisJCQlwcmludGYo Ii0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCQl9CisK KwkJcmV0dXJuIDA7CisJfQorCisJaWd0X2RldmljZXNfcHJpbnQocHJpbnR0eXBlKTsKKworCXJl dHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWVzb24uYnVpbGQgYi90b29scy9tZXNvbi5i dWlsZAppbmRleCA2ZTcyYjI2My4uOWIzYTJhNjkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL21lc29uLmJ1 aWxkCisrKyBiL3Rvb2xzL21lc29uLmJ1aWxkCkBAIC0zNiw2ICszNiw3IEBAIHRvb2xzX3Byb2dz ID0gWwogCSdpbnRlbF9nZW1faW5mbycsCiAJJ2ludGVsX2d2dGdfdGVzdCcsCiAJJ2RwY2RfcmVn JywKKwknbHNncHUnLAogXQogdG9vbF9kZXBzID0gaWd0X2RlcHMKIAotLSAKMi4yMS4wCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxp bmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=