From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id DDF8A6E5C3 for ; Fri, 19 Jul 2019 09:50:36 +0000 (UTC) From: =?UTF-8?q?Zbigniew=20Kempczy=C5=84ski?= Date: Fri, 19 Jul 2019 11:50:14 +0200 Message-Id: <20190719095014.2061-2-zbigniew.kempczynski@intel.com> In-Reply-To: <20190719095014.2061-1-zbigniew.kempczynski@intel.com> References: <20190719095014.2061-1-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v2 1/1] Introduce new method of device selection 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: Q2hhbmdlIGFkZHMgZGV2aWNlIHNlbGVjdGlvbiBiYXNlZCBvbiBpbXBsZW1lbnRlZCBmaWx0ZXJz LgpEaWZmZXJlbnQgZmlsdGVycyBjYW4gYmUgYWRkZWQgdG8gYWRkcmVzcyBkaWZmZXJlbnQgZGV2 aWNlCnNlbGVjdGlvbiBwb3NzaWJpbGl0aWVzLgoKTmV3IGRldmljZSBzZWxlY3Rpb24gdXNlcyAt LWRldmljZSBmaWx0ZXIgb3IgSUdUX0RFVklDRSBlbnZpcm9uZW50CnZhcmlhYmxlLiBTZWxlY3Rp b24gb2YgbWFueSBkZXZpY2VzIGNhbiBiZSBkb25lIGJ5IHVzaW5nIC0tZGV2aWNlCmFyZ3VtZW50 IG11bHRpcGxlIHRpbWVzLiBBcyBJR1RfREVWSUNFIGVudmlyb21lbnQgY2FuIGJlIHNldApvbmNl ICc7JyBpcyByZWNvZ25pemVkIGFzIGZpbHRlciBzZXBhcmF0b3IuCgpUb29sICdsc2dwdScgd2hp Y2ggdXNlcyBkZXZpY2Ugc2Nhbm5pbmcgZmVhdHVyZSB3YXMgYWRkZWQuCgotLS0KdjI6IHJlbW92 aW5nIG1vZHVsZSBtYW5hZ2VtZW50LCBrZWVwaW5nIG9ubHkgc2ltcGxlIGRldmljZSBwY2kvCiAg ICBwbGF0Zm9ybSBzY2FubmluZwoKU2lnbmVkLW9mZi1ieTogWmJpZ25pZXcgS2VtcGN6ecWEc2tp IDx6Ymlnbmlldy5rZW1wY3p5bnNraUBpbnRlbC5jb20+CkNjOiBBcmthZGl1c3ogSGlsZXIgPGFy a2FkaXVzei5oaWxlckBpbnRlbC5jb20+CkNjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWxAZmZ3bGwu Y2g+CkNjOiBQZXRyaSBMYXR2YWxhIDxwZXRyaS5sYXR2YWxhQGludGVsLmNvbT4KLS0tCiBkb2Nz L211bHRpLWRldmljZS1zZWxlY3Rpb24udHh0IHwgIDEwOCArKysKIGxpYi9NYWtlZmlsZS5zb3Vy Y2VzICAgICAgICAgICAgfCAgICAyICsKIGxpYi9kcm10ZXN0LmMgICAgICAgICAgICAgICAgICAg fCAgMTUxICsrKystCiBsaWIvZHJtdGVzdC5oICAgICAgICAgICAgICAgICAgIHwgICAgOSArCiBs aWIvaWd0X2NvcmUuYyAgICAgICAgICAgICAgICAgIHwgICAxMyArCiBsaWIvaWd0X2RldmljZV9z Y2FuLmMgICAgICAgICAgIHwgMTA4NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBs aWIvaWd0X2RldmljZV9zY2FuLmggICAgICAgICAgIHwgICA4MiArKysKIGxpYi9tZXNvbi5idWls ZCAgICAgICAgICAgICAgICAgfCAgICAxICsKIHRvb2xzL01ha2VmaWxlLnNvdXJjZXMgICAgICAg ICAgfCAgICAxICsKIHRvb2xzL2xzZ3B1LmMgICAgICAgICAgICAgICAgICAgfCAgMjIxICsrKysr KysKIHRvb2xzL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgfCAgICAxICsKIDExIGZpbGVzIGNo YW5nZWQsIDE2NzEgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkb2NzL211bHRpLWRldmljZS1zZWxlY3Rpb24udHh0CiBjcmVhdGUgbW9kZSAxMDA2NDQg bGliL2lndF9kZXZpY2Vfc2Nhbi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2lndF9kZXZpY2Vf c2Nhbi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvbHNncHUuYwoKZGlmZiAtLWdpdCBhL2Rv Y3MvbXVsdGktZGV2aWNlLXNlbGVjdGlvbi50eHQgYi9kb2NzL211bHRpLWRldmljZS1zZWxlY3Rp b24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi4xZThiYzdiOQotLS0g L2Rldi9udWxsCisrKyBiL2RvY3MvbXVsdGktZGV2aWNlLXNlbGVjdGlvbi50eHQKQEAgLTAsMCAr MSwxMDggQEAKK011bHRpLWRldmljZSBzY2FubmluZyBhbmQgc2VsZWN0aW9uCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisxLiBTY2FubmluZworCitEZXZpY2Ugc2VsZWN0 aW9uIGlzIGJ1aWxkIGFyb3VuZCBzY2FubmluZyBidXNlcyB1c2luZyB1ZGV2IChQQ0kgYW5kIHBs YXRmb3JtKSwKK2dhdGhlcmluZyBpbmZvcm1hdGlvbiBhYm91dCBtYXRjaGluZyBkZXZpY2VzIGFu ZCB1c2luZyBmaWx0ZXJzIG9uIGRpc2NvdmVyZWQKK2RhdGEuCisKK1BDSSBzY2FubmluZyBpcyBl YXN5IGFuZCBnaXZlcyBhbGwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGRldmljZXMgKG1vZHVsZSBk b2Vzbid0CituZWVkIHRvIGJlIGxvYWRlZCkuIFByb2JsZW1zIG9jY3VycyB3aGVuIHBsYXRmb3Jt IGRldmljZXMgYXJlIHRha2VuIGludG8KK2FjY291bnQuIFNvbWUgb2YgdGhlbSBoYXZlIGFwcHJv cHJpYXRlIGVudHJpZXMgaW4gZGV2aWNlIHRyZWUgKGxpa2UKK1Jhc3BiZXJyeSBQaSB2YzQgZHJp dmVyKSwgc28gZGlzcGxheWluZyB0aGVtIHdpdGhvdXQgbG9hZGVkIG1vZHVsZSBpcyBwb3NzaWJs ZS4KK1N1Y2ggZGV2aWNlcyBleHBvc2UgT0ZfQ09NUEFUSUJMRV9YIHByb3BlcnRpZXMgd2hpY2gg YXJlIG1hdGNoZWQgYWdhaW5zdAorYXBwcm9wcmlhdGUgZHJpdmVyLiBTb21lIGRldmljZXMgYXJl IHJlZ2lzdGVyZWQgaW5zaWRlIHBsYXRmb3JtIHRyZWUgYXQgZHJpdmVyCitsb2FkaW5nIHRpbWUg c28gZGlzY292ZXJpbmcgc3VjaCBkZXZpY2VzIGlzIG5vdCBwb3NzaWJsZSB1bmxlc3MgZHJpdmVy IGlzIGxvYWRlZC4KKworCisyLiBGaWx0ZXJpbmcKKworQWZ0ZXIgc2Nhbm5pbmcgYWxsIGdhdGhl cmVkIGluZm9ybWF0aW9uIGFyZSBzdG9yZWQgaW4gZGV2aWNlcyBhcnJheS4gRmlsdGVyaW5nCitt ZWFucyBjcmVhdGluZyBhIHZpZXcgdGhhdCBtYXRjaGVzIGZpbHRlciBvbiBkZXZpY2VzIGFycmF5 LiBGaWx0ZXJzIGRlZmluZWQKK29uIG5vbi1kaXNjb3ZlcmFibGUgZGV2aWNlcyBsb2FkcyBtb2R1 bGUgKGlmIG5vdCBhbHJlYWR5IGxvYWRlZCkgYW5kIGV4ZWN1dGUKK2RldmljZSBkaXNjb3Zlcnkg YWdhaW4uCisKK1VzaW5nICdsc2dwdScgdG9vbCB3ZSBjYW4gZ2V0IGxpc3Qgb2YgZGVmaW5lZCBm aWx0ZXIgdHlwZXMgKCctbCcgc3dpdGNoKToKKy4uLgorcGNpICAgICAgIHBjaTpbdmVuZG9yPSUw NHgvbmFtZV1bLGRldmljZT0lMDR4XVssY2FyZD0lZF0KKwkgIHZlbmRvciBpcyBoZXggbnVtYmVy IG9yIG5hbWUKKy4uLgorCitwY2kgaXMgZmlsdGVyIG5hbWUsIGl0IGNhbGxzIGZpbHRlciBvbiBk ZXZpY2VzIGFycmF5IHRvIHNlbGVjdCBvbmx5IFBDSQorZGV2aWNlcy4gRm9yIGV4YW1wbGU6CisK K3BjaTp2ZW5kb3I9ODA4NgorZmluZCBmaXJzdCBwY2kgY2FyZCBvbiB0aGUgYnVzIHdpdGggODA4 NiBQQ0kgZGV2aWNlIElECisKK3BjaTp2ZW5kb3I9aW50ZWwKK3NhbWUgYXMgYWJvdmUgYnV0IHVz ZXMgdmVuZG9yIG5hbWUgKHNlZSBsc2dwdSAtdikKKworcGNpOnZlbmRvcj04MDg2LGNhcmQ9MAor c2FtZSBhcyBhYm92ZSwgY2FyZD0wIGlzIGRlZmF1bHQKKworcGNpOnZlbmRvcj1pbnRlbCxkZXZp Y2U9MTIzNCxjYXJkPTEKK2ZpbmRzIHNlY29uZCBJbnRlbCBjYXJkIHdoaWNoIGRldmljZSBJRCBp cyAweDEyMzQKKworCiszLiBsc2dwdQorCitUbyBwbGF5IHdpdGggZGV2aWNlcyAnbHNncHUnIHRv b2wgd2FzIHdyaXR0ZW4uIEl0IGlzIG1vc3RseSB3cmFwcGVyIHRvIGlndAorZGV2aWNlcyBzY2Fu IGNvZGUgKGlndF9kZXZpY2Vfc2Nhbi5jKS4KKworSWYgcnVuIHdpdGhvdXQgYXJndW1lbnRzIGl0 IGRpc3BsYXlzIGFsbCByZWNvZ25pemVkIGNhcmRzLgorVXNhZ2UgZXhhbXBsZXM6CisKKyMgbHNn cHUgLWQKK2Rpc3BsYXlzIGRldmljZXMgaW4gJ2RldGFpbCcgbW9kZSwgd2l0aCBhbGwgcHJvcGVy dGllcyBhbmQgYXR0cmlidXRlcy4gU29tZQorYXR0cmlidXRlcyBhcmUgc2tpcHBlZCBiZWNhdXNl IGFjcXVpcmluZyB2YWx1ZSBjYW4gdGFrZSBldmVuIHNlY29uZHMgKHRoZXJlJ3MKK3NwZWNpYWwg YmxhY2tsaXN0IGhhc2ggdGFibGUgaW5zaWRlIHRoZSBjb2RlKQorCisjIGxzZ3B1IC12CitkaXNw bGF5cyByZWNvZ25pemVkIHZlbmRvcnMKKworIyBsc2dwdSAtbAorZGlzcGxheXMgZGVmaW5lZCBm aWx0ZXIgdHlwZXMKKworIyBsc2dwdSAtLWRldmljZSAncGNpOmNhcmQ9MDt2Z2VtOmNhcmQ9MDt2 a21zOmNhcmQ9MCcKK2FuZAorIyBsc2dwdSAtLWRldmljZSAncGNpOmNhcmQ9MCcgLS1kZXZpY2Ug J3ZnZW06Y2FyZD0wJyAtLWRldmljZSAndmttczpjYXJkPTAnCithbmQKKyMgZXhwb3J0IElHVF9E RVZJQ0U9J3BjaTpjYXJkPTA7dmdlbTpjYXJkPTA7dmttczpjYXJkPTAnCisjIGxzZ3B1CittYXRj aGVzIG11bHRpcGxlIGNhcmRzLiBJR1RfREVWSUNFIHVzZXMgJzsnIHNlcGFyYXRlZCBmaWx0ZXIg c3ludGF4LCBpdCBpcyBhbHNvCitwZXJtaXR0ZWQgaW4gLS1kZXZpY2UgKGZ1bmN0aW9uIHNwbGl0 cyBhcmd1bWVudCBhZ2FpbnN0ICc7JykuCisKKworNC4gQ29tcGF0aWJpbGl0eSB3aXRoIGN1cnJl bnQgZGV2aWNlIG9wZW4gQVBJCisKK1ByYWN0aWNhbGx5IGFsbCBJR1QgdGVzdHMgdXNlOgoraW50 IF9fZHJtX29wZW5fZHJpdmVyKGludCBjaGlwc2V0KTsKK2ludCBfX2RybV9vcGVuX2RyaXZlcl9y ZW5kZXIoaW50IGNoaXBzZXQpOworCitBYm92ZSBmdW5jdGlvbnMgd2VyZSBleHRlbmRlZCB0byB1 c2UgLS1kZXZpY2UgLyBlbnYgSUdUX0RFVklDRSBmaWx0ZXJzCisoaWYgZ2l2ZW4gZHVyaW5nIElH VCB0ZXN0IHJ1bikuIElmIG1vcmUgdGhhbiBzaW5nbGUgZGV2aWNlIHdlcmUgcGFzc2VkCitmaXJz dCBtYXRjaGluZyBmaWx0ZXIgYWdhaW5zdCBjaGlwc2V0IGlzIHNlbGVjdGVkLiBUaGlzIGFsbG93 cyB0ZXN0IGxpa2UKK3ByaW1lX3ZnZW0gdG8gd29yaywgZXg6CisKKyMgLi9wcmltZV92Z2VtIC0t ciBiYXNpYy1yZWFkIC0tZGV2aWNlICdwY2k6Y2FyZD0wJyAtLWRldmljZSAndmdlbTpjYXJkPTAn CisjIC4vcHJpbWVfdmdlbSAtLXIgYmFzaWMtcmVhZCAtLWRldmljZSAndmdlbTpjYXJkPTAnIC0t ZGV2aWNlICdwY2k6Y2FyZD0wJworCisKKzUuIE5ldyBkZXZpY2Ugc2VsZWN0aW9uIEFQSQorCitG b2xsb3dpbmcgcHJvdG90eXBlcyBkZWZpbmUgbmV3IEFQSToKKworLyogTXVsdGkgZGV2aWNlIEFQ SSAqLworaW50IF9fZHJtX29wZW5fY2FyZF93aXRoX250aF9maWx0ZXIoaW50IG51bSwgaW50IGNo aXBzZXQpOworaW50IF9fZHJtX29wZW5fcmVuZGVyX3dpdGhfbnRoX2ZpbHRlcihpbnQgbnVtLCBp bnQgY2hpcHNldCk7CisKK1doZW4gdGVzdCByZXF1aXJlIERSSVZFUl9JTlRFTCBpdCBoYXMgdG8g YmUgc3VyZSB0aGF0IHVzZXIgZGlkbid0IHBhc3NlZAorYW5vdGhlciBkZXZpY2UgKHZjNCBmb3Ig ZXhhbXBsZSkuIFNvIGlmIHVzZXIgcGFzc2VkIC0tZGV2aWNlIHZjNDpjYXJkPTAKK3RoaXMgb3Bl biB3aWxsIGZhaWwuCisKK3N0cnVjdCBpZ3RfZGV2aWNlX2NhcmQ7CitpbnQgX19kcm1fb3Blbl9j YXJkKHN0cnVjdCBpZ3RfZGV2aWNlX2NhcmQgKmNhcmQpOworaW50IF9fZHJtX29wZW5fcmVuZGVy KHN0cnVjdCBpZ3RfZGV2aWNlX2NhcmQgKmNhcmQpOworCitUaGVzZSBmdW5jdGlvbnMgYWxsb3dz IHRvIG9wZW4gZGV2aWNlIHJlZ2FyZGxlc3MgY2hpcCByZXF1aXJlbWVudC4KZGlmZiAtLWdpdCBh L2xpYi9NYWtlZmlsZS5zb3VyY2VzIGIvbGliL01ha2VmaWxlLnNvdXJjZXMKaW5kZXggZTE2ZGU4 NmUuLmMzODNhODE3IDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUuc291cmNlcworKysgYi9saWIv TWFrZWZpbGUuc291cmNlcwpAQCAtMjUsNiArMjUsOCBAQCBsaWJfc291cmNlX2xpc3QgPQkgCVwK IAlpZ3RfZGVidWdmcy5oCQlcCiAJaWd0X2RldmljZS5jCQlcCiAJaWd0X2RldmljZS5oCQlcCisJ aWd0X2RldmljZV9zY2FuLmMJXAorCWlndF9kZXZpY2Vfc2Nhbi5oCVwKIAlpZ3RfYXV4LmMJCVwK IAlpZ3RfYXV4LmgJCVwKIAlpZ3RfY29sb3JfZW5jb2RpbmcuYwlcCmRpZmYgLS1naXQgYS9saWIv ZHJtdGVzdC5jIGIvbGliL2RybXRlc3QuYwppbmRleCBjMzc5YTdiNy4uNDM0MDY2ZWUgMTAwNjQ0 Ci0tLSBhL2xpYi9kcm10ZXN0LmMKKysrIGIvbGliL2RybXRlc3QuYwpAQCAtNTUsNiArNTUsNyBA QAogI2luY2x1ZGUgImlndF9ndC5oIgogI2luY2x1ZGUgImlndF9rbW9kLmgiCiAjaW5jbHVkZSAi aWd0X3N5c2ZzLmgiCisjaW5jbHVkZSAiaWd0X2RldmljZV9zY2FuLmgiCiAjaW5jbHVkZSAidmVy c2lvbi5oIgogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgImludGVsX3JlZy5oIgpAQCAt Mjg5LDI1ICsyOTAsMTcxIEBAIHN0YXRpYyBpbnQgX19vcGVuX2RyaXZlcihjb25zdCBjaGFyICpi YXNlLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgY2hpcHNldCkKIAlyZXR1cm4gX19zZWFyY2hf YW5kX29wZW4oYmFzZSwgb2Zmc2V0LCBjaGlwc2V0KTsKIH0KIAorc3RhdGljIGludCBfX29wZW5f ZHJpdmVyX2V4YWN0KGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBjaGlwc2V0KQorewor CXN0YXRpYyBwdGhyZWFkX211dGV4X3QgbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVS OworCWludCBmZDsKKworCWZkID0gb3Blbl9kZXZpY2UobmFtZSwgY2hpcHNldCk7CisJaWYgKGZk ICE9IC0xKQorCQlyZXR1cm4gZmQ7CisKKwlwdGhyZWFkX211dGV4X2xvY2soJm11dGV4KTsKKwlm b3IgKGNvbnN0IHN0cnVjdCBtb2R1bGUgKm0gPSBtb2R1bGVzOyBtLT5tb2R1bGU7IG0rKykgewor CQlpZiAoY2hpcHNldCAmIG0tPmJpdCkgeworCQkJaWYgKG0tPm1vZHByb2JlKQorCQkJCW0tPm1v ZHByb2JlKG0tPm1vZHVsZSk7CisJCQllbHNlCisJCQkJbW9kcHJvYmUobS0+bW9kdWxlKTsKKwkJ fQorCX0KKwlwdGhyZWFkX211dGV4X3VubG9jaygmbXV0ZXgpOworCisJcmV0dXJuIG9wZW5fZGV2 aWNlKG5hbWUsIGNoaXBzZXQpOworfQorCisvKioKKyAqIF9fZmluZF9jYXJkX3dpdGhfY2hpcHNl dAorICogQGNoaXBzZXQ6IGNoaXBzZXQgZm9yIGNvbXBhcmUgd2l0aCBjYXJkIG1hdGNoCisgKiBA Y2FyZDogcG9pbnRlciB3aGVyZSBjYXJkIGluZm9ybWF0aW9uIHdpbGwgYmUgc3RvcmVkCisgKgor ICogRm9yIGNvbXBhdGliaWxpdHkgbW9kZSB3aGVuIG11bHRpcGxlIC0tZGV2aWNlIGFyZ3VtZW50 IHdlcmUgcGFzc2VkCisgKiB0aGlzIGZ1bmN0aW9uIHRyaWVzIHRvIGJlIHNtYXJ0IGVub3VnaCB0 byBoYW5kbGUgdGVzdHMgd2hpY2ggb3BlbnMKKyAqIG1vcmUgdGhhbiBzaW5nbGUgZGV2aWNlLiBJ dCBpdGVyYXRlcyBvdmVyIGZpbHRlciBsaXN0IGFuZAorICogY29tcGFyZXMgY2hpcHNldCB0byBj YXJkIGNoaXBzZXQgZm9yIGZpbHRlciBtYXRjaGVkLgorICoKKyAqIFJldHVybnM6CisgKiBUcnVl IGlmIGNhcmQgYWNjb3JkaW5nIHRvIGZpbHRlcnMgYWRkZWQgYW5kIGNoaXBzZXQgd2FzIGZvdW5k LAorICogZmFsc2Ugb3Rod2Vyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgX19maW5kX2NhcmRfd2l0 aF9jaGlwc2V0KGludCBjaGlwc2V0LCBzdHJ1Y3QgaWd0X2RldmljZV9jYXJkICpjYXJkKQorewor CWludCBpLCBuID0gaWd0X2RldmljZV9maWx0ZXJfY291bnQoKTsKKwljb25zdCBjaGFyICpmaWx0 ZXI7CisJYm9vbCBtYXRjaDsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJZmlsdGVy ID0gaWd0X2RldmljZV9maWx0ZXJfZ2V0KGkpOworCQltYXRjaCA9IGlndF9kZXZpY2VfY2FyZF9t YXRjaChmaWx0ZXIsIGNhcmQpOworCQlpZiAobWF0Y2ggJiYgKGNhcmQtPmNoaXBzZXQgPT0gY2hp cHNldCB8fCBjaGlwc2V0ID09IERSSVZFUl9BTlkpKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJ cmV0dXJuIGZhbHNlOworfQorCiAvKioKICAqIF9fZHJtX29wZW5fZHJpdmVyOgogICogQGNoaXBz ZXQ6IE9SJ2QgZmxhZ3MgZm9yIGVhY2ggY2hpcHNldCB0byBzZWFyY2gsIGVnLiAjRFJJVkVSX0lO VEVMCiAgKgotICogT3BlbiB0aGUgZmlyc3QgRFJNIGRldmljZSB3ZSBjYW4gZmluZCwgc2VhcmNo aW5nIHVwIHRvIDE2IGRldmljZSBub2RlcworICogRnVuY3Rpb24gb3BlbnMgZGV2aWNlIHdpdGgg Zm9sbG93aW5nIG9yZGVyOgorICogMS4gd2hlbiAtLWRldmljZSBhcmd1bWVudHMgYXJlIHByZXNl bnQgZGV2aWNlIHNjYW5uaW5nIHdpbGwgYmUgZXhlY3V0ZWQsCisgKiB0aGVuIG1hdGNoaW5nIGNv bnNpZGVycyBhbGwgZGV2aWNlIHdoaWNoIG1hdGNoZXMgZmlsdGVyIGFyZ3VtZW50IHdpbGwgYmUg c2VsZWN0ZWQuCisgKiAyLiBjb21wYXRpYmlsaXR5IG1vZGUgLSBvcGVuIHRoZSBmaXJzdCBEUk0g ZGV2aWNlIHdlIGNhbiBmaW5kLAorICogc2VhcmNoaW5nIHVwIHRvIDE2IGRldmljZSBub2Rlcy4K ICAqCiAgKiBSZXR1cm5zOgogICogQW4gb3BlbiBEUk0gZmQgb3IgLTEgb24gZXJyb3IKICAqLwog aW50IF9fZHJtX29wZW5fZHJpdmVyKGludCBjaGlwc2V0KQogeworCWludCBuID0gaWd0X2Rldmlj ZV9maWx0ZXJfY291bnQoKTsKKworCWlmIChuKSB7CisJCWJvb2wgZm91bmQ7CisJCXN0cnVjdCBp Z3RfZGV2aWNlX2NhcmQgY2FyZDsKKworCQlmb3VuZCA9IF9fZmluZF9jYXJkX3dpdGhfY2hpcHNl dChjaGlwc2V0LCAmY2FyZCk7CisJCWlmICghZm91bmQgfHwgIXN0cmxlbihjYXJkLmNhcmQpKQor CQkJcmV0dXJuIC0xOworCisJCXJldHVybiBfX29wZW5fZHJpdmVyX2V4YWN0KGNhcmQuY2FyZCwg Y2hpcHNldCk7CisJfQorCiAJcmV0dXJuIF9fb3Blbl9kcml2ZXIoIi9kZXYvZHJpL2NhcmQiLCAw LCBjaGlwc2V0KTsKIH0KIAotc3RhdGljIGludCBfX2RybV9vcGVuX2RyaXZlcl9yZW5kZXIoaW50 IGNoaXBzZXQpCitpbnQgX19kcm1fb3Blbl9kcml2ZXJfcmVuZGVyKGludCBjaGlwc2V0KQogewor CWludCBuID0gaWd0X2RldmljZV9maWx0ZXJfY291bnQoKTsKKworCWlmIChuKSB7CisJCWJvb2wg Zm91bmQ7CisJCXN0cnVjdCBpZ3RfZGV2aWNlX2NhcmQgY2FyZDsKKworCQlmb3VuZCA9IF9fZmlu ZF9jYXJkX3dpdGhfY2hpcHNldChjaGlwc2V0LCAmY2FyZCk7CisJCWlmICghZm91bmQgfHwgIXN0 cmxlbihjYXJkLnJlbmRlcikpCisJCQlyZXR1cm4gLTE7CisKKwkJcmV0dXJuIF9fb3Blbl9kcml2 ZXJfZXhhY3QoY2FyZC5yZW5kZXIsIGNoaXBzZXQpOworCX0KKwogCXJldHVybiBfX29wZW5fZHJp dmVyKCIvZGV2L2RyaS9yZW5kZXJEIiwgMTI4LCBjaGlwc2V0KTsKIH0KIAorc3RhdGljIGludCBf X2RybV9vcGVuX3dpdGhfbnRoX2ZpbHRlcihpbnQgbnVtLCBpbnQgY2hpcHNldCwgYm9vbCBvcGVu X3JlbmRlcikKK3sKKwlzdHJ1Y3QgaWd0X2RldmljZV9jYXJkIGNhcmQ7CisJY29uc3QgY2hhciAq ZmlsdGVyLCAqZGV2bmFtZTsKKwlib29sIG1hdGNoOworCWludCBuID0gaWd0X2RldmljZV9maWx0 ZXJfY291bnQoKTsKKworCWlmICghbiB8fCBudW0gPCAwIHx8IG51bSA+PSBuKSB7CisJCWlndF93 YXJuKCJObyBkZXZpY2UgZmlsdGVyIG51bSA9PSAlZCBwYXNzZWRcbiIsIG51bSk7CisJCXJldHVy biAtMTsKKwl9CisKKwlmaWx0ZXIgPSBpZ3RfZGV2aWNlX2ZpbHRlcl9nZXQobnVtKTsKKwltYXRj aCA9IGlndF9kZXZpY2VfY2FyZF9tYXRjaChmaWx0ZXIsICZjYXJkKTsKKwlpZiAoIW1hdGNoKSB7 CisJCWlndF93YXJuKCJObyBkZXZpY2UgbWF0Y2ggZmlsdGVyOiAlc1xuIiwgZmlsdGVyKTsKKwkJ cmV0dXJuIC0xOworCX0KKworCWlmIChjaGlwc2V0ICE9IGNhcmQuY2hpcHNldCkgeworCQlpZ3Rf d2FybigiRmlsdGVyZWQgZGV2aWNlIGRvZXNuJ3QgbWF0Y2ggY2hpcHNldCAoJWQgIT0gJWQpXG4i LAorCQkJIGNoaXBzZXQsIGNhcmQuY2hpcHNldCk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKCFz dHJsZW4oY2FyZC5jYXJkKSkKKwkJcmV0dXJuIC0xOworCisJZGV2bmFtZSA9IG9wZW5fcmVuZGVy ID8gY2FyZC5yZW5kZXIgOiBjYXJkLmNhcmQ7CisJaWYgKCFzdHJsZW4oZGV2bmFtZSkpIHsKKwkJ aWd0X3dhcm4oIk5vICVzIG5vZGUgbWF0Y2hpbmcgZmlsdGVyOiAlc1xuIiwKKwkJCSBvcGVuX3Jl bmRlciA/ICJyZW5kZXIiIDogImNhcmQiLCBmaWx0ZXIpOworCQlyZXR1cm4gLTE7CisJfQorCXJl dHVybiBfX29wZW5fZHJpdmVyX2V4YWN0KGRldm5hbWUsIGNhcmQuY2hpcHNldCk7Cit9CisKK2lu dCBfX2RybV9vcGVuX2NhcmRfd2l0aF9udGhfZmlsdGVyKGludCBudW0sIGludCBjaGlwc2V0KQor eworCXJldHVybiBfX2RybV9vcGVuX3dpdGhfbnRoX2ZpbHRlcihudW0sIGNoaXBzZXQsIGZhbHNl KTsKK30KKworaW50IF9fZHJtX29wZW5fcmVuZGVyX3dpdGhfbnRoX2ZpbHRlcihpbnQgbnVtLCBp bnQgY2hpcHNldCkKK3sKKwlyZXR1cm4gX19kcm1fb3Blbl93aXRoX250aF9maWx0ZXIobnVtLCBj aGlwc2V0LCB0cnVlKTsKK30KKworaW50IF9fZHJtX29wZW5fY2FyZChzdHJ1Y3QgaWd0X2Rldmlj ZV9jYXJkICpjYXJkKQoreworCWlmICghY2FyZCB8fCAhc3RybGVuKGNhcmQtPmNhcmQpKQorCQly ZXR1cm4gLTE7CisKKwlyZXR1cm4gX19vcGVuX2RyaXZlcl9leGFjdChjYXJkLT5jYXJkLCBjYXJk LT5jaGlwc2V0KTsKK30KKworaW50IF9fZHJtX29wZW5fcmVuZGVyKHN0cnVjdCBpZ3RfZGV2aWNl X2NhcmQgKmNhcmQpCit7CisJaWYgKCFjYXJkIHx8ICFzdHJsZW4oY2FyZC0+cmVuZGVyKSkKKwkJ cmV0dXJuIC0xOworCisJcmV0dXJuIF9fb3Blbl9kcml2ZXJfZXhhY3QoY2FyZC0+cmVuZGVyLCBj YXJkLT5jaGlwc2V0KTsKK30KKworCiBzdGF0aWMgaW50IGF0X2V4aXRfZHJtX2ZkID0gLTE7CiBz dGF0aWMgaW50IGF0X2V4aXRfZHJtX3JlbmRlcl9mZCA9IC0xOwogCmRpZmYgLS1naXQgYS9saWIv ZHJtdGVzdC5oIGIvbGliL2RybXRlc3QuaAppbmRleCA2MTRmNTdlNi4uNGFkYjk5MDggMTAwNjQ0 Ci0tLSBhL2xpYi9kcm10ZXN0LmgKKysrIGIvbGliL2RybXRlc3QuaApAQCAtNTAsNiArNTAsNyBA QAogI2RlZmluZSBEUklWRVJfQU1ER1BVCSgxIDw8IDMpCiAjZGVmaW5lIERSSVZFUl9WM0QJKDEg PDwgNCkKICNkZWZpbmUgRFJJVkVSX1BBTkZST1NUCSgxIDw8IDUpCisKIC8qCiAgKiBFeGNsdWRl IERSVkVSX1ZHRU0gZnJvbSBEUklWRVJfQU5ZIHNpbmNlIGlmIHlvdSBydW4gb24gYSBzeXN0ZW0K ICAqIHdpdGggdmdlbSBhcyB3ZWxsIGFzIGEgc3VwcG9ydGVkIGRyaXZlciwgeW91IGNhbiBlbmQg dXAgd2l0aCBhCkBAIC04MSw2ICs4MiwxNCBAQCBpbnQgZHJtX29wZW5fZHJpdmVyKGludCBjaGlw c2V0KTsKIGludCBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKGludCBjaGlwc2V0KTsKIGludCBkcm1f b3Blbl9kcml2ZXJfcmVuZGVyKGludCBjaGlwc2V0KTsKIGludCBfX2RybV9vcGVuX2RyaXZlcihp bnQgY2hpcHNldCk7CitpbnQgX19kcm1fb3Blbl9kcml2ZXJfcmVuZGVyKGludCBjaGlwc2V0KTsK KworLyogTXVsdGkgZGV2aWNlIEFQSSAqLworaW50IF9fZHJtX29wZW5fY2FyZF93aXRoX250aF9m aWx0ZXIoaW50IG51bSwgaW50IGNoaXBzZXQpOworaW50IF9fZHJtX29wZW5fcmVuZGVyX3dpdGhf bnRoX2ZpbHRlcihpbnQgbnVtLCBpbnQgY2hpcHNldCk7CitzdHJ1Y3QgaWd0X2RldmljZV9jYXJk OworaW50IF9fZHJtX29wZW5fY2FyZChzdHJ1Y3QgaWd0X2RldmljZV9jYXJkICpjYXJkKTsKK2lu dCBfX2RybV9vcGVuX3JlbmRlcihzdHJ1Y3QgaWd0X2RldmljZV9jYXJkICpjYXJkKTsKIAogdm9p ZCBnZW1fcXVpZXNjZW50X2dwdShpbnQgZmQpOwogCmRpZmYgLS1naXQgYS9saWIvaWd0X2NvcmUu YyBiL2xpYi9pZ3RfY29yZS5jCmluZGV4IDFjYmIwOWY5Li45Yjg1MTE3NSAxMDA2NDQKLS0tIGEv bGliL2lndF9jb3JlLmMKKysrIGIvbGliL2lndF9jb3JlLmMKQEAgLTcxLDYgKzcxLDcgQEAKICNp bmNsdWRlICJpZ3Rfc3lzcnEuaCIKICNpbmNsdWRlICJpZ3RfcmMuaCIKICNpbmNsdWRlICJpZ3Rf bGlzdC5oIgorI2luY2x1ZGUgImlndF9kZXZpY2Vfc2Nhbi5oIgogCiAjZGVmaW5lIFVOV19MT0NB TF9PTkxZCiAjaW5jbHVkZSA8bGlidW53aW5kLmg+CkBAIC0zMDQsNiArMzA1LDcgQEAgZW51bSB7 CiAJT1BUX0RFQlVHLAogCU9QVF9JTlRFUkFDVElWRV9ERUJVRywKIAlPUFRfU0tJUF9DUkMsCisJ T1BUX0RFVklDRSwKIAlPUFRfSEVMUCA9ICdoJwogfTsKIApAQCAtNjI0LDYgKzYyNiw3IEBAIHN0 YXRpYyB2b2lkIHByaW50X3VzYWdlKGNvbnN0IGNoYXIgKmhlbHBfc3RyLCBib29sIG91dHB1dF9v bl9zdGRlcnIpCiAJCSAgICIgIC0tc2tpcC1jcmMtY29tcGFyZVxuIgogCQkgICAiICAtLWhlbHAt ZGVzY3JpcHRpb25cbiIKIAkJICAgIiAgLS1kZXNjcmliZVxuIgorCQkgICAiICAtLWRldmljZSBm aWx0ZXJcbiIKIAkJICAgIiAgLS1oZWxwfC1oXG4iKTsKIAlpZiAoaGVscF9zdHIpCiAJCWZwcmlu dGYoZiwgIiVzXG4iLCBoZWxwX3N0cik7CkBAIC03MjUsNiArNzI4LDExIEBAIHN0YXRpYyB2b2lk IGNvbW1vbl9pbml0X2Vudih2b2lkKQogCWlmIChlbnYpIHsKIAkJX19zZXRfZm9yY2VkX2RyaXZl cihlbnYpOwogCX0KKworCWVudiA9IGdldGVudigiSUdUX0RFVklDRSIpOworCWlmIChlbnYpIHsK KwkJaWd0X2RldmljZV9maWx0ZXJfYWRkKGVudik7CisJfQogfQogCiBzdGF0aWMgaW50IGNvbW1v bl9pbml0KGludCAqYXJnYywgY2hhciAqKmFyZ3YsCkBAIC03NDMsNiArNzUxLDcgQEAgc3RhdGlj IGludCBjb21tb25faW5pdChpbnQgKmFyZ2MsIGNoYXIgKiphcmd2LAogCQl7ImRlYnVnIiwgICAg ICAgICAgICAgb3B0aW9uYWxfYXJndW1lbnQsIE5VTEwsIE9QVF9ERUJVR30sCiAJCXsiaW50ZXJh Y3RpdmUtZGVidWciLCBvcHRpb25hbF9hcmd1bWVudCwgTlVMTCwgT1BUX0lOVEVSQUNUSVZFX0RF QlVHfSwKIAkJeyJza2lwLWNyYy1jb21wYXJlIiwgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBP UFRfU0tJUF9DUkN9LAorCQl7ImRldmljZSIsICAgICAgICAgICAgcmVxdWlyZWRfYXJndW1lbnQs IE5VTEwsIE9QVF9ERVZJQ0V9LAogCQl7ImhlbHAiLCAgICAgICAgICAgICAgbm9fYXJndW1lbnQs ICAgICAgIE5VTEwsIE9QVF9IRUxQfSwKIAkJezAsIDAsIDAsIDB9CiAJfTsKQEAgLTg2NSw2ICs4 NzQsMTAgQEAgc3RhdGljIGludCBjb21tb25faW5pdChpbnQgKmFyZ2MsIGNoYXIgKiphcmd2LAog CQljYXNlIE9QVF9TS0lQX0NSQzoKIAkJCWlndF9za2lwX2NyY19jb21wYXJlID0gdHJ1ZTsKIAkJ CWdvdG8gb3V0OworCQljYXNlIE9QVF9ERVZJQ0U6CisJCQlhc3NlcnQob3B0YXJnKTsKKwkJCWln dF9kZXZpY2VfZmlsdGVyX2FkZChvcHRhcmcpOworCQkJYnJlYWs7CiAJCWNhc2UgT1BUX0hFTFA6 CiAJCQlwcmludF91c2FnZShoZWxwX3N0ciwgZmFsc2UpOwogCQkJcmV0ID0gLTE7CmRpZmYgLS1n aXQgYS9saWIvaWd0X2RldmljZV9zY2FuLmMgYi9saWIvaWd0X2RldmljZV9zY2FuLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjVlMzE0NjlhCi0tLSAvZGV2L251bGwKKysr IGIvbGliL2lndF9kZXZpY2Vfc2Nhbi5jCkBAIC0wLDAgKzEsMTA4NCBAQAorLyoKKyAqIENvcHly aWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJl YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAq IGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVz ICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJl c3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRv IHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5z ZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQg cGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBz dWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29w eXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBu ZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vi c3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdB UkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQ UkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBB VVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B R0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRS QUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENP Tk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwor ICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSAiaWd0LmgiCisjaW5jbHVk ZSAiaWd0X3N5c2ZzLmgiCisjaW5jbHVkZSAiaWd0X2RldmljZS5oIgorI2luY2x1ZGUgImlndF9k ZXZpY2Vfc2Nhbi5oIgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxsaWJ1ZGV2Lmg+Cisj aW5jbHVkZSA8bGludXgvbGltaXRzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRl IDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgor CisvKioKKyAqIFNFQ1RJT046aWd0X2RldmljZV9zY2FuCisgKiBAc2hvcnRfZGVzY3JpcHRpb246 IFBDSSBhbmQgcGxhdGZvcm0gZGV2aWNlcyBzY2FuCisgKiBAdGl0bGU6IERldmljZSBzY2FuCisg KiBAaW5jbHVkZTogaWd0LmgKKyAqCisgKiBEZXZpY2UgZGlzY292ZXJ5IHVzZXMgdWRldiBmdW5j dGlvbmFsaXR5IGZvciBzY2FubmluZyBkaWZmZXJlbnQgc3Vic3lzdGVtcy4KKyAqIFRoaXMgY29k ZSB1c2VzIHNjYW5uaW5nICdwY2knIGFuZCAncGxhdGZvcm0nIHN1YnN5c3RlbXMgaW5zdGVhZCBv ZiBkaXJlY3QKKyAqIGl0ZXJhdGluZyBvdmVyICdkcm0nIHN1YnN5c3RlbS4KKyovCisKKy8vI2Rl ZmluZSBERUJVR19ERVZJQ0VfU0NBTgorI2lmZGVmIERFQlVHX0RFVklDRV9TQ0FOCisjZGVmaW5l IERCRyguLi4pIFwKK3sgXAorCXN0cnVjdCB0aW1ldmFsIHRtOyBcCisJZ2V0dGltZW9mZGF5KCZ0 bSwgTlVMTCk7IFwKKwlwcmludGYoIiUxMGxkLiUwM2xkOiAiLCB0bS50dl9zZWMsIHRtLnR2X3Vz ZWMpOyBcCisJcHJpbnRmKF9fVkFfQVJHU19fKTsgXAorCX0KKworI2Vsc2UKKyNkZWZpbmUgREJH KC4uLikge30KKyNlbmRpZgorCisjZGVmaW5lIElHVF9EUk1fUEFUSCAiL2Rldi9kcmkiCisKKy8q IFRoZXJlJ3JlIHR3byBwb3NzaWJpbGl0aWVzIHRvIGdldCBkcm0gZGV2aWNlcy4KKyAqIEZpcnN0 IGlzIHRvIHNjYW4gJ2RybScgc3Vic3lzdGVtIGRpcmVjdGx5LiBJdCdzIGVhc3kgYnV0IG5vIGFk ZGl0aW9uYWwKKyAqIG1ldGFkYXRhIGlzIGVhc3kgdG8gZ2V0IChsaWtlIHZlbmRvciBldGMuKS4K KyAqIFNlY29uZCBpcyB0byBzY2FuICdwY2knIGFuZCAncGxhdGZvcm0nIHN1YnN5c3RlbSB3aXRo IGFwcm9wcmlhdGUgZmlsdGVycworICogZm9yIGRldmljZXMgd2UncmUgaW50ZXJlc3RlZCBvZi4g Rm9yIFBDSSBkZXZpY2VzIGl0IGlzIFBDSV9DTEFTUyBhdHRyaWJ1dGUsCisgKiBmb3IgcGxhdGZv cm0gZGV2aWNlcyB0aGlzIGlzIGEgbGl0dGxlIGJpdCBjaGFvdGljIGFuZCBkZXBlbmRzIG9uIGRl dmljZQorICogdmVuZG9yLgorKi8KKworZW51bSBpZ3RfZGV2aWNlc19zY2FuX3R5cGUgeworCUlH VF9TQ0FOX1BDSSAgICAgICA9IDEsCisJSUdUX1NDQU5fUExBVEZPUk0gID0gMiwKK307CisKK3N0 YXRpYyBHSGFzaFRhYmxlICpzeXNhdHRyc19ibGFja2xpc3RfaHQ7ICAvL3N5c2F0dHJzIHdlIGRv bid0IHdhbnQgdG8gcmVhZAorc3RhdGljIEdIYXNoVGFibGUgKmdwdV92ZW5kb3JfaHQ7ICAgICAg ICAgIC8vc2VhcmNoIGlkIC0+IHZlbmRvcl9zcGVjIG1hcHBpbmcKK3N0YXRpYyBHSGFzaFRhYmxl ICpmaWx0ZXJfZGVmaW5pdGlvbl9odDsgICAvL3N1cHBvcnRlZCBmaWx0ZXJzIChwY2k9Li4uLCBl dGMuKQorCisvKiBHZW5lcmljIG5hbWUtPnZhbHVlIHN0cnVjdCAqLworc3RydWN0IG5hbWVfdmFs dWUgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJZ3BvaW50ZXIgKnZhbHVlOworfTsKKworLyogVmVu ZG9yIHNwZWNpZmljIGRhdGEgKi8KK3N0cnVjdCB2ZW5kb3Jfc3BlYyB7CisJZW51bSBpZ3RfZGV2 aWNlX3R5cGUgZGV2X3R5cGU7CisJY29uc3QgY2hhciAqdmVuZG9yOworCWNvbnN0IGNoYXIgKm1h dGNoOworCWludCBjaGlwc2V0OworfTsKKworLyogU2luZ2xlIGlndF9kZXZpY2UgZm91bmQgaW4g UENJIC8gcGxhdGZvcm0gc3Vic3lzdGVtcyAqLworc3RydWN0IGlndF9kZXZpY2UgeworCWNoYXIg KnByZXR0eV9uYW1lOworCXN0cnVjdCB2ZW5kb3Jfc3BlYyAqdnM7CisJR0hhc2hUYWJsZSAqcHJv cHNfaHQ7CisJR0hhc2hUYWJsZSAqYXR0cnNfaHQ7CisJY2hhciAqc3lzcGF0aDsKKwljaGFyICpk cnZwYXRoOworCWNoYXIgKmRybV9jYXJkX3BhdGg7CisJY2hhciAqZHJtX3JlbmRlcl9wYXRoOwor CWNoYXIgKnZlbmRvcjsKKwljaGFyICpkZXZpY2U7CisJZW51bSBpZ3RfZGV2aWNlX3R5cGUgZGV2 X3R5cGU7Cit9OworCisvKiBTY2FubmVkIGRldmljZXMgc3RydWN0ICovCitzdHJ1Y3QgaWd0X2Rl dmljZXMgeworCUdQdHJBcnJheSAqZGV2czsJCS8vYWxsIGdwdSBkZXZpY2VzIGFycmF5CisJR1B0 ckFycmF5ICp2aWV3OwkJLy9maWx0ZXJlZCB2aWV3CisJYm9vbCBkZXZzX3NjYW5uZWQ7Cit9Owor CisvKiBTY2FubmVkIGRldmljZXMgaG9sZGVyICovCitzdGF0aWMgc3RydWN0IGlndF9kZXZpY2Vz IGlndF9kZXZzOworCisvKiBMaXN0IG9mIGF0dHJpYnV0ZSBrZXktPnZhbHVlIGFwcGxpZWQgYXMg dWRldiBmaWx0ZXIKKyAqIGZvciBlbnVtZXJhdGlvbiBmb3IgUENJIGRldmljZXMgKi8KK3N0cnVj dCBuYW1lX3ZhbHVlIHBjaV91ZGV2X2ZpbHRlcnNfYXR0cl9saXN0W10gPSB7CisJeyAiUENJX0NM QVNTIiwgKGdwb2ludGVyKSAiMzAwMDAiIH0sCisJeyAiUENJX0NMQVNTIiwgKGdwb2ludGVyKSAi MzAxMDAiIH0sCisJeyAiUENJX0NMQVNTIiwgKGdwb2ludGVyKSAiMzAyMDAiIH0sCisJeyAiUENJ X0NMQVNTIiwgKGdwb2ludGVyKSAiMzgwMDAiIH0sCisJeyBOVUxMLCB9LAorfTsKKworLyogTGlz dCBvZiBhdHRyaWJ1dGUga2V5LT52YWx1ZSBhcHBsaWVkIGFzIHVkZXYgZmlsdGVyCisgKiBmb3Ig ZW51bWVyYXRpb24gZm9yIHBsYXRmb3JtIGRldmljZXMgKi8KK3N0cnVjdCBuYW1lX3ZhbHVlIHBs YXRmb3JtX3VkZXZfZmlsdGVyc19hdHRyX2xpc3RbXSA9IHsKKwl7ICJNT0RBTElBUyIsIChncG9p bnRlcikgInBsYXRmb3JtOnZnZW0iIH0sCisJeyAiTU9EQUxJQVMiLCAoZ3BvaW50ZXIpICJwbGF0 Zm9ybTp2a21zIiB9LAorCXsgTlVMTCwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdmVuZG9yX3Nw ZWMgdl9pbnRlbCAgPSB7IC5kZXZfdHlwZSA9IERFVl9QQ0ksCisJCQkJICAgICAgIC52ZW5kb3Ig PSAiSW50ZWwiLAorCQkJCSAgICAgICAuY2hpcHNldCA9IERSSVZFUl9JTlRFTAorCQkJCSAgICAg fTsKK3N0YXRpYyBzdHJ1Y3QgdmVuZG9yX3NwZWMgdl9hbWQgICAgPSB7IC5kZXZfdHlwZSA9IERF Vl9QQ0ksCisJCQkJICAgICAgIC52ZW5kb3IgPSAiQU1EIiwKKwkJCQkgICAgICAgLmNoaXBzZXQg PSBEUklWRVJfQU1ER1BVCisJCQkJICAgICB9Oworc3RhdGljIHN0cnVjdCB2ZW5kb3Jfc3BlYyB2 X3ZnZW0gICA9IHsgLmRldl90eXBlID0gREVWX1BMQVRGT1JNLAorCQkJCSAgICAgICAudmVuZG9y ID0gIlZpcnR1YWwtR0VNIiwKKwkJCQkgICAgICAgLmNoaXBzZXQgPSBEUklWRVJfVkdFTQorCQkJ CSAgICAgfTsKK3N0YXRpYyBzdHJ1Y3QgdmVuZG9yX3NwZWMgdl92YzQgICA9IHsgLmRldl90eXBl ID0gREVWX1BMQVRGT1JNLAorCQkJCSAgICAgICAudmVuZG9yID0gIkJyb2FkY29tIiwKKwkJCQkg ICAgICAgLmNoaXBzZXQgPSBEUklWRVJfVkM0CisJCQkJICAgICB9OworCisvKiBNYXBwaW5nIHZl bmRvciBpZCA9PiB2ZW5kb3Jfc3BlYyBzaG91bGQgYmUgdW5pcXVlICh2ZW5kb3Igc3RyaW5nIG1h dGNoaW5nCisgKiBpcyB3cml0dGVuIGFyb3VuZCB0aGlzKS4KKyAqCisgKiBLZXlzIG11c3QgYmUg ZGVmaW5lZCBhcyBmb2xsb3dzOgorICogUENJIGRldmljZXM6IFBDSV9TTE9UX0lEIC0+IHZlbmRv cl9zcGVjLgorKi8KK3N0cnVjdCBuYW1lX3ZhbHVlIGdwdV92ZW5kb3JfbGlzdFtdID0geworCXsg IjgwODYiLCAoZ3BvaW50ZXIpICZ2X2ludGVsIH0sCisJeyAiMTAwMiIsIChncG9pbnRlcikgJnZf YW1kIH0sCisJeyBOVUxMLCB9LAorfTsKKworLyogR2VuZXJpYyBoYXNoIHRhYmxlIGZpbGwgZnVu Y3Rpb24sIHJlcXVpcmVzIG5hbWUgLyB2YWx1ZSBwdHJzIGFycmF5ICovCitzdGF0aWMgdm9pZCBm aWxsX2h0KEdIYXNoVGFibGUgKipodCwgc3RydWN0IG5hbWVfdmFsdWUgKmRhdGEpCit7CisJaWYg KCpodCkKKwkJcmV0dXJuOworCisJKmh0ID0gZ19oYXNoX3RhYmxlX25ldyhnX3N0cl9oYXNoLCBn X3N0cl9lcXVhbCk7CisJaWd0X2Fzc2VydCgqaHQpOworCisJd2hpbGUgKGRhdGEtPm5hbWUpIHsK KwkJZ19oYXNoX3RhYmxlX2luc2VydCgqaHQsCisJCQkJICAgIChncG9pbnRlcikgZGF0YS0+bmFt ZSwKKwkJCQkgICAgZGF0YS0+dmFsdWUpOworCQlkYXRhKys7CisJfQorfQorCisjZGVmaW5lIGdl dF92ZW5kb3Jfc3BlYyhwcm9wKSBcCisJZ19oYXNoX3RhYmxlX2xvb2t1cChncHVfdmVuZG9yX2h0 LCBwcm9wKQorCisvKiBHbyB0aHJvdWdoIHdob2xlIHZlbmRvciBoYXNoIHRhYmxlIGFuZCBjb21w YXJlIGFnYWluc3QgdmVuZG9yIGZpZWxkLgorICogVXNlZCBtb3N0bHkgd2l0aCB2ZW5kb3I9Li4u IGZpbHRlciBwYXJhbWV0ZXIgd2hlbiBQQ0kgaWQgaXMgbm90IG1hdGNoZWQuCisqLworc3RhdGlj IGJvb2wgaXNfcGNpX3ZlbmRvcl9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJYm9vbCByZXQg PSBmYWxzZTsKKwlHTGlzdCAqa2V5cyA9IGdfaGFzaF90YWJsZV9nZXRfa2V5cyhncHVfdmVuZG9y X2h0KTsKKworCWlmICghbmFtZSkKKwkJcmV0dXJuIGZhbHNlOworCisJd2hpbGUgKGtleXMpIHsK KwkJY2hhciAqayA9IChjaGFyICopIGtleXMtPmRhdGE7CisJCXN0cnVjdCB2ZW5kb3Jfc3BlYyAq dnMgPSBnX2hhc2hfdGFibGVfbG9va3VwKGdwdV92ZW5kb3JfaHQsIGspOworCQlrZXlzID0gZ19s aXN0X25leHQoa2V5cyk7CisKKwkJaWYgKHZzLT5kZXZfdHlwZSAhPSBERVZfUENJKQorCQkJY29u dGludWU7CisKKwkJaWYgKCFzdHJjYXNlY21wKG5hbWUsIHZzLT52ZW5kb3IpKSB7CisJCQlyZXQg PSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisJZ19saXN0X2ZyZWUoa2V5cyk7CisKKwlyZXR1 cm4gcmV0OworfQorCisvKiBSZWFkaW5nIHN5c2F0dHIgdmFsdWVzIGNhbiB0YWtlIHRpbWUgKGV2 ZW4gc2Vjb25kcyksCisgKiB3ZSB3YW50IHRvIGF2b2lkIHJlYWRpbmcgc3VjaCBrZXlzLgorKi8K K3N0YXRpYyB2b2lkIHBvcHVsYXRlX2JsYWNrbGlzdF9rZXlzKHZvaWQpCit7CisJY29uc3QgY2hh ciAqa2V5c1tdID0geyAiY29uZmlnIiwgIm1vZGFsaWFzIiwKKwkJCSAgICAgICAicmVzb3VyY2Ui LAorCQkJICAgICAgICJyZXNvdXJjZTAiLCAicmVzb3VyY2UxIiwgInJlc291cmNlMiIsCisJCQkg ICAgICAgInJlc291cmNlMyIsICJyZXNvdXJjZTQiLCAicmVzb3VyY2U1IiwKKwkJCSAgICAgICAi cmVzb3VyY2UwX3djIiwgInJlc291cmNlMV93YyIsICJyZXNvdXJjZTJfd2MiLAorCQkJICAgICAg ICJyZXNvdXJjZTNfd2MiLCAicmVzb3VyY2U0X3djIiwgInJlc291cmNlNV93YyIsCisJCQkgICAg ICAgImRyaXZlciIsCisJCQkgICAgICAgInVldmVudCIsIE5VTEx9OworCWNvbnN0IGNoYXIgKmtl eTsKKwlpbnQgaSA9IDA7CisKKwlpZiAoc3lzYXR0cnNfYmxhY2tsaXN0X2h0KQorCQlyZXR1cm47 CisKKwlzeXNhdHRyc19ibGFja2xpc3RfaHQgPSBnX2hhc2hfdGFibGVfbmV3KGdfc3RyX2hhc2gs IGdfc3RyX2VxdWFsKTsKKwlpZ3RfYXNzZXJ0KHN5c2F0dHJzX2JsYWNrbGlzdF9odCk7CisKKwl3 aGlsZSAoKGtleSA9IGtleXNbaSsrXSkpCisJCWdfaGFzaF90YWJsZV9hZGQoc3lzYXR0cnNfYmxh Y2tsaXN0X2h0LCAoZ3BvaW50ZXIpIGtleSk7Cit9CisKKyNkZWZpbmUgaXNfb25fYmxhY2tsaXN0 KGtleSkgXAorCWdfaGFzaF90YWJsZV9jb250YWlucyhzeXNhdHRyc19ibGFja2xpc3RfaHQsIGtl eSkKKworc3RhdGljIHN0cnVjdCBpZ3RfZGV2aWNlICppZ3RfZGV2aWNlX25ldyh2b2lkKQorewor CXN0cnVjdCBpZ3RfZGV2aWNlICpkZXY7CisJZGV2ID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qg aWd0X2RldmljZSkpOworCWlmICghZGV2KQorCQlyZXR1cm4gTlVMTDsKKworCWRldi0+YXR0cnNf aHQgPSBnX2hhc2hfdGFibGVfbmV3X2Z1bGwoZ19zdHJfaGFzaCwgZ19zdHJfZXF1YWwsCisJCQkJ CSAgICAgIGZyZWUsIGZyZWUpOworCWRldi0+cHJvcHNfaHQgPSBnX2hhc2hfdGFibGVfbmV3X2Z1 bGwoZ19zdHJfaGFzaCwgZ19zdHJfZXF1YWwsCisJCQkJCSAgICAgIGZyZWUsIGZyZWUpOworCisJ aWYgKGRldi0+YXR0cnNfaHQgJiYgZGV2LT5wcm9wc19odCkKKwkJcmV0dXJuIGRldjsKKworCXJl dHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBpZ3RfZGV2aWNlX2FkZF9wcm9wKHN0cnVjdCBp Z3RfZGV2aWNlICpkZXYsCisJCQkJY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSkK K3sKKwlpZiAoIWtleSB8fCAhdmFsdWUpCisJCXJldHVybjsKKworCWdfaGFzaF90YWJsZV9pbnNl cnQoZGV2LT5wcm9wc19odCwgc3RyZHVwKGtleSksIHN0cmR1cCh2YWx1ZSkpOworfQorCitzdGF0 aWMgdm9pZCBpZ3RfZGV2aWNlX2FkZF9hdHRyKHN0cnVjdCBpZ3RfZGV2aWNlICpkZXYsCisJCQkJ Y29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwljb25zdCBjaGFyICp2ID0g dmFsdWU7CisKKwlpZiAoIWtleSkKKwkJcmV0dXJuOworCisJLyogSXQncyBwb3NzaWJsZSB3ZSBo YXZlIHN5bWxpbmsgYXQga2V5IGZpbGVuYW1lLCBidXQgdWRldgorCSAqIGxpYnJhcnkgcmVzb2x2 ZXMgb25seSBmZXcgb2YgdGhlbSAqLworCWlmICghdikgeworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJ Y2hhciBwYXRoW1BBVEhfTUFYXTsKKwkJY2hhciBsaW5rdG9bUEFUSF9NQVhdOworCQlpbnQgbGVu OworCisJCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIiVzLyVzIiwgZGV2LT5zeXNwYXRo LCBrZXkpOworCQlpZiAobHN0YXQocGF0aCwgJnN0KSAhPSAwKQorCQkJcmV0dXJuOworCisJCWxl biA9IHJlYWRsaW5rKHBhdGgsIGxpbmt0bywgc2l6ZW9mKGxpbmt0bykpOworCQlpZiAobGVuIDw9 IDAgfHwgbGVuID09IChzc2l6ZV90KSBzaXplb2YobGlua3RvKSkKKwkJCXJldHVybjsKKwkJbGlu a3RvW2xlbl0gPSAnXDAnOworCQl2ID0gc3RycmNocihsaW5rdG8sICcvJyk7CisJCWlmICh2ID09 IE5VTEwpCisJCQlyZXR1cm47CisJCXYrKzsKKwl9CisKKwlnX2hhc2hfdGFibGVfaW5zZXJ0KGRl di0+YXR0cnNfaHQsIHN0cmR1cChrZXkpLCBzdHJkdXAodikpOworfQorCisvKiBJdGVyYXRlIG92 ZXIgdWRldiBwcm9wZXJ0aWVzIGxpc3QgYW5kIHJld3JpdGUgaXQgdG8gaWd0X2RldmljZSBwcm9w ZXJ0aWVzCisgKiBoYXNoIHRhYmxlIGZvciBpbnN0YW50IGFjY2Vzcy4KKyAqLworc3RhdGljIHZv aWQgZ2V0X3Byb3BzKHN0cnVjdCB1ZGV2X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWd0X2RldmljZSAq aWRldikKK3sKKwlzdHJ1Y3QgdWRldl9saXN0X2VudHJ5ICplbnRyeTsKKworCWVudHJ5ID0gdWRl dl9kZXZpY2VfZ2V0X3Byb3BlcnRpZXNfbGlzdF9lbnRyeShkZXYpOworCXdoaWxlIChlbnRyeSkg eworCQljb25zdCBjaGFyICpuYW1lID0gdWRldl9saXN0X2VudHJ5X2dldF9uYW1lKGVudHJ5KTsK KwkJY29uc3QgY2hhciAqdmFsdWUgPSB1ZGV2X2xpc3RfZW50cnlfZ2V0X3ZhbHVlKGVudHJ5KTsK KwkJaWd0X2RldmljZV9hZGRfcHJvcChpZGV2LCBuYW1lLCB2YWx1ZSk7CisJCWVudHJ5ID0gdWRl dl9saXN0X2VudHJ5X2dldF9uZXh0KGVudHJ5KTsKKwkJREJHKCJwcm9wOiAlcywgdmFsOiAlc1xu IiwgbmFtZSwgdmFsdWUpOworCX0KK30KKworLyogU2FtZSBhcyBnZXRfcHJvcHMoKSwgYnV0IHJl d3JpdGVzIHN5c2F0dHJzLiBSZXNvbHZlZCBzeW1ib2xpYyBsaW5rcworICogbm90IGhhbmRsZWQg YnkgdWRldiBnZXRfc3lzYXR0cl92YWx1ZSgpLgorICogRnVuY3Rpb24gc2tpcHMgc3lzYXR0cnMg ZnJvbSBibGFja2xpc3QgaHQgKGFjcXVpcmluZyBzb21lIHZhbHVlcyBjYW4gdGFrZQorICogc2Vj b25kcykuCisgKi8KK3N0YXRpYyB2b2lkIGdldF9hdHRycyhzdHJ1Y3QgdWRldl9kZXZpY2UgKmRl diwgc3RydWN0IGlndF9kZXZpY2UgKmlkZXYpCit7CisJc3RydWN0IHVkZXZfbGlzdF9lbnRyeSAq ZW50cnk7CisKKwllbnRyeSA9IHVkZXZfZGV2aWNlX2dldF9zeXNhdHRyX2xpc3RfZW50cnkoZGV2 KTsKKwl3aGlsZSAoZW50cnkpIHsKKwkJY29uc3QgY2hhciAqa2V5ID0gdWRldl9saXN0X2VudHJ5 X2dldF9uYW1lKGVudHJ5KTsKKwkJY29uc3QgY2hhciAqdmFsdWU7CisKKwkJaWYgKGlzX29uX2Js YWNrbGlzdChrZXkpKSB7CisJCQllbnRyeSA9IHVkZXZfbGlzdF9lbnRyeV9nZXRfbmV4dChlbnRy eSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXZhbHVlID0gdWRldl9kZXZpY2VfZ2V0X3N5c2F0 dHJfdmFsdWUoZGV2LCBrZXkpOworCQlpZ3RfZGV2aWNlX2FkZF9hdHRyKGlkZXYsIGtleSwgdmFs dWUpOworCQllbnRyeSA9IHVkZXZfbGlzdF9lbnRyeV9nZXRfbmV4dChlbnRyeSk7CisJCURCRygi YXR0cjogJXMsIHZhbDogJXNcbiIsIGtleSwgdmFsdWUpOworCX0KK30KKworI2RlZmluZSBnZXRf cHJvcChkZXYsIHByb3ApIChjaGFyICopIGdfaGFzaF90YWJsZV9sb29rdXAoZGV2LT5wcm9wc19o dCwgcHJvcCkKKyNkZWZpbmUgZ2V0X2F0dHIoZGV2LCBhdHRyKSAoY2hhciAqKSBnX2hhc2hfdGFi bGVfbG9va3VwKGRldi0+YXR0cnNfaHQsIGF0dHIpCisjZGVmaW5lIGdldF9wcm9wX3BjaV9pZChk ZXYpICAgIGdldF9wcm9wKGRldiwgIlBDSV9JRCIpCisjZGVmaW5lIGdldF9wcm9wX3BjaV9zbG90 KGRldikgIGdldF9wcm9wKGRldiwgIlBDSV9TTE9UX05BTUUiKQorI2RlZmluZSBnZXRfcHJvcF9k ZXZwYXRoKGRldikgICBnZXRfcHJvcChkZXYsICJERVZQQVRIIikKKyNkZWZpbmUgZ2V0X3Byb3Bf ZHJpdmVyKGRldikgICAgZ2V0X3Byb3AoZGV2LCAiRFJJVkVSIikKKyNkZWZpbmUgZ2V0X3Byb3Bf bW9kYWxpYXMoZGV2KSAgZ2V0X3Byb3AoZGV2LCAiTU9EQUxJQVMiKQorI2RlZmluZSBnZXRfcHJv cF9vZl9jb21wYXRpYmxlXzAoZGV2KSBnZXRfcHJvcChkZXYsICJPRl9DT01QQVRJQkxFXzAiKQor CisvKiBHZXRzIFBDSV9JRCBwcm9wZXJ0eSwgc3BsaXRzIHRvIHh4eHg6eXl5eSBhbmQgc3RvcmVz CisgKiB4eHh4IHRvIGRldi0+dmVuZG9yIGFuZCB5eXl5IHRvIGRldi0+ZGV2aWNlIGZvcgorICog ZmFzdGVyIGFjY2Vzcy4KKyAqLworc3RhdGljIHZvaWQgc2V0X3ZlbmRvcl9kZXZpY2Uoc3RydWN0 IGlndF9kZXZpY2UgKmRldikKK3sKKwljb25zdCBjaGFyICpwY2lfaWQgPSBnZXRfcHJvcF9wY2lf aWQoZGV2KTsKKwlpZiAoIXBjaV9pZCB8fCBzdHJsZW4ocGNpX2lkKSAhPSA5KQorCQlyZXR1cm47 CisJZGV2LT52ZW5kb3IgPSBzdHJuZHVwKHBjaV9pZCwgNCk7CisJZGV2LT5kZXZpY2UgPSBzdHJu ZHVwKHBjaV9pZCArIDUsIDQpOworfQorCisvKiBGaW5kIGFwcHJvcHJpYXRlIC9kZXYvZHJpL2Nh cmRYIGFuZCAvZGV2L2RyaS9yZW5kZXJEWCBub2RlcworICogZm9yIGlndF9kZXZpY2UuCisgKi8K K3N0YXRpYyB2b2lkIGZpbmRfZHJtX3BhdGhzKHN0cnVjdCBpZ3RfZGV2aWNlICpkZXYpCit7CisJ Y2hhciBkaXJuYW1lW1BBVEhfTUFYXTsKKwlESVIgKmRpcjsKKwlzdHJ1Y3QgZGlyZW50ICplOwor CisJc25wcmludGYoZGlybmFtZSwgUEFUSF9NQVgsICIlcy9kcm0iLCBkZXYtPnN5c3BhdGgpOwor CWRpciA9IG9wZW5kaXIoZGlybmFtZSk7CisJaWYgKCFkaXIpCisJCXJldHVybjsKKworCXdoaWxl KChlID0gcmVhZGRpcihkaXIpKSkgeworCQlpbnQgbjsKKwkJaWYgKHNzY2FuZihlLT5kX25hbWUs ICJjYXJkJWQiLCAmbikgPT0gMSkKKwkJCWRldi0+ZHJtX2NhcmRfcGF0aCA9IGdfc3RyZHVwX3By aW50ZigiJXMvJXMiLAorCQkJCQkJCSAgICAgSUdUX0RSTV9QQVRILAorCQkJCQkJCSAgICAgZS0+ ZF9uYW1lKTsKKwkJZWxzZSBpZiAoc3NjYW5mKGUtPmRfbmFtZSwgInJlbmRlckQlZCIsICZuKSA9 PSAxKQorCQkJZGV2LT5kcm1fcmVuZGVyX3BhdGggPSBnX3N0cmR1cF9wcmludGYoIiVzLyVzIiwK KwkJCQkJCQkgICAgICAgSUdUX0RSTV9QQVRILAorCQkJCQkJCSAgICAgICBlLT5kX25hbWUpOwor CX0KKwljbG9zZWRpcihkaXIpOworCisJaWYgKGRldi0+ZHJtX2NhcmRfcGF0aCkKKwkJREJHKCJj YXJkOiAlc1xuIiwgZGV2LT5kcm1fY2FyZF9wYXRoKTsKKwlpZiAoZGV2LT5kcm1fcmVuZGVyX3Bh dGgpCisJCURCRygicmVuZDogJXNcbiIsIGRldi0+ZHJtX3JlbmRlcl9wYXRoKTsKK30KKworc3Rh dGljIGJvb2wgcHJlcGFyZV9zY2FuKHZvaWQpCit7CisJaWYgKCFpZ3RfZGV2cy5kZXZzKQorCQlp Z3RfZGV2cy5kZXZzID0gZ19wdHJfYXJyYXlfc2l6ZWRfbmV3KDQpOworCWlmICghaWd0X2RldnMu dmlldykKKwkJaWd0X2RldnMudmlldyA9IGdfcHRyX2FycmF5X3NpemVkX25ldyg0KTsKKworCWlm ICghaWd0X2RldnMuZGV2cyB8fCAhaWd0X2RldnMudmlldykKKwkJcmV0dXJuIGZhbHNlOworCisJ cmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHNldF91ZGV2X2ZpbHRlcihzdHJ1Y3QgdWRl dl9lbnVtZXJhdGUgKmVudW1lcmF0ZSwKKwkJCSAgICBzdHJ1Y3QgbmFtZV92YWx1ZSAqbnYpCit7 CisJLyogQnlwYXNzIGZpbHRlcmluZywgd2Ugd2FudCB0byBzZWUgYWxsIGRldmljZXMuCisJICog TGlrZWx5IHVzZWQgb25seSBpbiBsc2dwdS4KKwkqLworCWlmIChnZXRlbnYoIklHVF9TQ0FOX0dF VF9BTExfREVWSUNFUyIpKQorCQlyZXR1cm47CisKKwl3aGlsZSAobnYtPm5hbWUpIHsKKwkJdWRl dl9lbnVtZXJhdGVfYWRkX21hdGNoX3Byb3BlcnR5KGVudW1lcmF0ZSwgbnYtPm5hbWUsCisJCQkJ CQkgIChjb25zdCBjaGFyICopIG52LT52YWx1ZSk7CisJCW52Kys7CisJfQorfQorCitzdGF0aWMg dm9pZCBzZXRfcGNpX3VkZXZfZmlsdGVyKHN0cnVjdCB1ZGV2X2VudW1lcmF0ZSAqZW51bWVyYXRl KQoreworCXNldF91ZGV2X2ZpbHRlcihlbnVtZXJhdGUsICZwY2lfdWRldl9maWx0ZXJzX2F0dHJf bGlzdFswXSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9wbGF0Zm9ybV91ZGV2X2ZpbHRlcihzdHJ1 Y3QgdWRldl9lbnVtZXJhdGUgKmVudW1lcmF0ZSkKK3sKKwlzZXRfdWRldl9maWx0ZXIoZW51bWVy YXRlLCAmcGxhdGZvcm1fdWRldl9maWx0ZXJzX2F0dHJfbGlzdFswXSk7Cit9CisKKy8qIFN1YnN5 c3RlbSBzY2FubmluZyAqLworc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgZGV2X3R5cGU7CisKKwkv KiB1ZGV2IHJlbGF0ZWQgKi8KKwljb25zdCBjaGFyICpzdWJzeXM7CisJdm9pZCAoKnVkZXZfZmls dGVyKShzdHJ1Y3QgdWRldl9lbnVtZXJhdGUgKmVudW1lcmF0ZSk7Cit9IGNsc1tdID0geworCVtJ R1RfU0NBTl9QQ0ldID0geyAuZGV2X3R5cGUgPSBERVZfUENJLAorCQkJICAgLnN1YnN5cyA9ICJw Y2kiLAorCQkJICAgLnVkZXZfZmlsdGVyID0gc2V0X3BjaV91ZGV2X2ZpbHRlciwKKwkJCSB9LAor CVtJR1RfU0NBTl9QTEFURk9STV0gPSB7IC5kZXZfdHlwZSA9IERFVl9QTEFURk9STSwKKwkJCQku c3Vic3lzID0gInBsYXRmb3JtIiwKKwkJCQkudWRldl9maWx0ZXIgPSBzZXRfcGxhdGZvcm1fdWRl dl9maWx0ZXIsCisJCQkgICAgICB9LAorfTsKKworc3RhdGljIHZvaWQgc2Nhbl9kZXZpY2VzKGVu dW0gaWd0X2RldmljZXNfc2Nhbl90eXBlIHNjYW50eXBlKQoreworCXN0cnVjdCB1ZGV2ICp1ZGV2 OworCXN0cnVjdCB1ZGV2X2RldmljZSAqZGV2OworCXN0cnVjdCB1ZGV2X2VudW1lcmF0ZSAqZW51 bWVyYXRlOworCXN0cnVjdCB1ZGV2X2xpc3RfZW50cnkgKmRldmljZXMsICpkZXZfbGlzdF9lbnRy eTsKKwlpbnQgcmV0OworCisJdWRldiA9IHVkZXZfbmV3KCk7CisJaWd0X2Fzc2VydCh1ZGV2KTsK KworCWVudW1lcmF0ZSA9IHVkZXZfZW51bWVyYXRlX25ldyh1ZGV2KTsKKwlpZ3RfYXNzZXJ0KGVu dW1lcmF0ZSk7CisKKwlEQkcoIlNjYW5uaW5nIHN1YnN5c3RlbSAlc1xuIiwgY2xzW3NjYW50eXBl XS5zdWJzeXMpOworCXJldCA9IHVkZXZfZW51bWVyYXRlX2FkZF9tYXRjaF9zdWJzeXN0ZW0oZW51 bWVyYXRlLCBjbHNbc2NhbnR5cGVdLnN1YnN5cyk7CisJaWd0X2Fzc2VydCghcmV0KTsKKwljbHNb c2NhbnR5cGVdLnVkZXZfZmlsdGVyKGVudW1lcmF0ZSk7CisKKwlyZXQgPSB1ZGV2X2VudW1lcmF0 ZV9zY2FuX2RldmljZXMoZW51bWVyYXRlKTsKKwlpZ3RfYXNzZXJ0KCFyZXQpOworCisJZGV2aWNl cyA9IHVkZXZfZW51bWVyYXRlX2dldF9saXN0X2VudHJ5KGVudW1lcmF0ZSk7CisJaWYgKCFkZXZp Y2VzKQorCQlyZXR1cm47CisKKwl1ZGV2X2xpc3RfZW50cnlfZm9yZWFjaChkZXZfbGlzdF9lbnRy eSwgZGV2aWNlcykgeworCQlzdHJ1Y3QgaWd0X2RldmljZSAqaWRldjsKKwkJY29uc3QgY2hhciAq cGF0aDsKKworCQlwYXRoID0gdWRldl9saXN0X2VudHJ5X2dldF9uYW1lKGRldl9saXN0X2VudHJ5 KTsKKwkJZGV2ID0gdWRldl9kZXZpY2VfbmV3X2Zyb21fc3lzcGF0aCh1ZGV2LCBwYXRoKTsKKwor CQlpZGV2ID0gaWd0X2RldmljZV9uZXcoKTsKKwkJaWd0X2Fzc2VydChpZGV2KTsKKworCQlpZGV2 LT5kZXZfdHlwZSA9IGNsc1tzY2FudHlwZV0uZGV2X3R5cGU7CisJCWlkZXYtPnN5c3BhdGggPSBz dHJkdXAodWRldl9kZXZpY2VfZ2V0X3N5c3BhdGgoZGV2KSk7CisJCWdldF9wcm9wcyhkZXYsIGlk ZXYpOworCQlnZXRfYXR0cnMoZGV2LCBpZGV2KTsKKwkJZmluZF9kcm1fcGF0aHMoaWRldik7CisK KwkJc3dpdGNoIChpZGV2LT5kZXZfdHlwZSkgeworCQljb25zdCBjaGFyICp0bXA7CisJCWNhc2Ug REVWX1BDSToKKwkJCXRtcCA9IGdldF9wcm9wX3BjaV9zbG90KGlkZXYpOworCQkJc2V0X3ZlbmRv cl9kZXZpY2UoaWRldik7CisJCQlpZGV2LT5wcmV0dHlfbmFtZSA9IHN0cmR1cCh0bXAgPzogIiA/ ICIpOworCQkJaWRldi0+dnMgPSBnZXRfdmVuZG9yX3NwZWMoaWRldi0+dmVuZG9yKTsKKwkJCWJy ZWFrOworCQlkZWZhdWx0OgorCQkJdG1wICA9IGdldF9wcm9wX21vZGFsaWFzKGlkZXYpOworCQkJ aWRldi0+cHJldHR5X25hbWUgPSBzdHJkdXAodG1wID86ICIgPyAiKTsKKwkJfQorCisJCWdfcHRy X2FycmF5X2FkZChpZ3RfZGV2cy5kZXZzLCBpZGV2KTsKKwkJZ19wdHJfYXJyYXlfYWRkKGlndF9k ZXZzLnZpZXcsIGlkZXYpOworCisJCXVkZXZfZGV2aWNlX3VucmVmKGRldik7CisJfQorCXVkZXZf ZW51bWVyYXRlX3VucmVmKGVudW1lcmF0ZSk7CisJdWRldl91bnJlZih1ZGV2KTsKK30KKworc3Ry dWN0IG5hbWVfdmFsdWUgZmlsdGVyX2RlZmluaXRpb25fbGlzdFtdOworc3RhdGljIHZvaWQgcG9w dWxhdGVfZ3B1X2RhdGEodm9pZCkKK3sKKwlmaWxsX2h0KCZncHVfdmVuZG9yX2h0LCAmZ3B1X3Zl bmRvcl9saXN0WzBdKTsKKwlmaWxsX2h0KCZmaWx0ZXJfZGVmaW5pdGlvbl9odCwgJmZpbHRlcl9k ZWZpbml0aW9uX2xpc3RbMF0pOworfQorCitzdGF0aWMgdm9pZCBpZ3RfZGV2aWNlX2ZyZWUoc3Ry dWN0IGlndF9kZXZpY2UgKmRldikKK3sKKwlmcmVlKGRldi0+cHJldHR5X25hbWUpOworCWZyZWUo ZGV2LT5kZXZpY2UpOworCWZyZWUoZGV2LT5kcm1fY2FyZF9wYXRoKTsKKwlmcmVlKGRldi0+ZHJt X3JlbmRlcl9wYXRoKTsKKwlmcmVlKGRldi0+ZHJ2cGF0aCk7CisJZnJlZShkZXYtPnN5c3BhdGgp OworCWZyZWUoZGV2LT52ZW5kb3IpOworCWdfaGFzaF90YWJsZV9kZXN0cm95KGRldi0+YXR0cnNf aHQpOworCWdfaGFzaF90YWJsZV9kZXN0cm95KGRldi0+cHJvcHNfaHQpOworfQorCit2b2lkIGln dF9kZXZpY2VzX3NjYW4oYm9vbCBmb3JjZSkKK3sKKwlpZiAoZm9yY2UgJiYgaWd0X2RldnMuZGV2 c19zY2FubmVkKSB7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgaWd0X2RldnMuZGV2cy0+bGVuOyBp KyspIHsKKwkJCXN0cnVjdCBpZ3RfZGV2aWNlICpkZXYgPSBnX3B0cl9hcnJheV9pbmRleChpZ3Rf ZGV2cy5kZXZzLCBpKTsKKwkJCWlndF9kZXZpY2VfZnJlZShkZXYpOworCQkJZnJlZShkZXYpOwor CQl9CisJCWlndF9kZXZzLmRldnNfc2Nhbm5lZCA9IGZhbHNlOworCQlnX3B0cl9hcnJheV9mcmVl KGlndF9kZXZzLnZpZXcsIHRydWUpOworCQlnX3B0cl9hcnJheV9mcmVlKGlndF9kZXZzLmRldnMs IHRydWUpOworCQlpZ3RfZGV2cy52aWV3ID0gTlVMTDsKKwkJaWd0X2RldnMuZGV2cyA9IE5VTEw7 CisJfQorCisJaWYgKGlndF9kZXZzLmRldnNfc2Nhbm5lZCkKKwkJcmV0dXJuOworCisJcG9wdWxh dGVfYmxhY2tsaXN0X2tleXMoKTsgICAgICAvL2tleXMgZnJvbSBzeXNhdHRyIHdlIHNraXAKKwlw b3B1bGF0ZV9ncHVfZGF0YSgpOworCisJcHJlcGFyZV9zY2FuKCk7CisJc2Nhbl9kZXZpY2VzKElH VF9TQ0FOX1BDSSk7CisJc2Nhbl9kZXZpY2VzKElHVF9TQ0FOX1BMQVRGT1JNKTsKKwlpZ3RfZGV2 cy5kZXZzX3NjYW5uZWQgPSB0cnVlOworfQorCisjZGVmaW5lIHByX3NpbXBsZShrLCB2KSBwcmlu dGYoIiAgICAlLTE2czogJXNcbiIsIGssIHYpCisjZGVmaW5lIHByX3NpbXBsZV9wcm9wKGRldiwg a2V5KSBwcl9zaW1wbGUoa2V5LCBnZXRfcHJvcChkZXYsIGtleSkpCisjZGVmaW5lIHByX3NpbXBs ZV9hdHRyKGRldiwga2V5KSBwcl9zaW1wbGUoa2V5LCBnZXRfYXR0cihkZXYsIGtleSkpCisKK3N0 YXRpYyB2b2lkIGlndF9kZXZzX3ByaW50X3NpbXBsZShHUHRyQXJyYXkgKnZpZXcpCit7CisJc3Ry dWN0IGlndF9kZXZpY2UgKmRldjsKKwlpbnQgaTsKKworCWlmICghdmlldykKKwkJcmV0dXJuOwor CisJZm9yIChpID0gMDsgaSA8IHZpZXctPmxlbjsgaSsrKSB7CisJCWRldiA9IGdfcHRyX2FycmF5 X2luZGV4KHZpZXcsIGkpOworCQlwcmludGYoIiVzXG4iLCBkZXYtPnByZXR0eV9uYW1lKTsKKwkJ cHJfc2ltcGxlKCJzeXNwYXRoIiwgZGV2LT5zeXNwYXRoKTsKKwkJcHJfc2ltcGxlKCJkcm0gY2Fy ZCIsIGRldi0+ZHJtX2NhcmRfcGF0aCk7CisJCXByX3NpbXBsZSgiZHJtIHJlbmRlciIsIGRldi0+ ZHJtX3JlbmRlcl9wYXRoKTsKKworCQlpZiAoZ2V0X3Byb3BfcGNpX2lkKGRldikpCisJCQlwcl9z aW1wbGVfcHJvcChkZXYsICJQQ0lfSUQiKTsKKwkJaWYgKGdldF9wcm9wX2RyaXZlcihkZXYpKQor CQkJcHJfc2ltcGxlX3Byb3AoZGV2LCAiRFJJVkVSIik7CisJfQorfQorCisjZGVmaW5lIHByX2Rl dGFpbChrLCB2KSBwcmludGYoIiUtMzJzOiAlc1xuIiwgaywgdikKKworc3RhdGljIHZvaWQgcHJp bnRfaHQoR0hhc2hUYWJsZSAqaHQpCit7CisJR0xpc3QgKmtleXMgPSBnX2hhc2hfdGFibGVfZ2V0 X2tleXMoaHQpOworCWtleXMgPSBnX2xpc3Rfc29ydChrZXlzLCAoR0NvbXBhcmVGdW5jKSBzdHJj bXApOworCXdoaWxlIChrZXlzKSB7CisJCWNoYXIgKmsgPSAoY2hhciAqKSBrZXlzLT5kYXRhOwor CQljaGFyICp2ID0gZ19oYXNoX3RhYmxlX2xvb2t1cChodCwgayk7CisJCXByX2RldGFpbChrLCB2 KTsKKwkJa2V5cyA9IGdfbGlzdF9uZXh0KGtleXMpOworCX0KKwlnX2xpc3RfZnJlZShrZXlzKTsK K30KKworc3RhdGljIHZvaWQgaWd0X2RldnNfcHJpbnRfZGV0YWlsKEdQdHJBcnJheSAqdmlldykK K3sKKwlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2OworCWludCBpOworCisJaWYgKCF2aWV3KQorCQly ZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgdmlldy0+bGVuOyBpKyspIHsKKwkJZGV2ID0gZ19w dHJfYXJyYXlfaW5kZXgodmlldywgaSk7CisJCXByaW50ZigiPT09PT09PT09PSAlcyA9PT09PT09 PT09XG4iLCBkZXYtPnByZXR0eV9uYW1lKTsKKwkJcHJpbnRmKCJbZHJtXVxuIik7CisJCXByX2Rl dGFpbCgiY2FyZCBkZXZpY2UiLCBkZXYtPmRybV9jYXJkX3BhdGgpOworCQlwcl9kZXRhaWwoInJl bmRlciBkZXZpY2UiLCBkZXYtPmRybV9yZW5kZXJfcGF0aCk7CisJCXByX2RldGFpbCgic3lzcGF0 aCIsIGRldi0+c3lzcGF0aCk7CisKKwkJcHJpbnRmKCJcbltwcm9wZXJ0aWVzXVxuIik7CisJCXBy aW50X2h0KGRldi0+cHJvcHNfaHQpOworCQlwcmludGYoIlxuW2F0dHJpYnV0ZXNdXG4iKTsKKwkJ cHJpbnRfaHQoZGV2LT5hdHRyc19odCk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHByaW50X2Z1 bmMgeworCXZvaWQgKCpwcm4pKEdQdHJBcnJheSAqKTsKK30gcHJpbnRfZnVuY3Rpb25zW10gPSB7 CisJW0lHVF9QUklOVF9TSU1QTEVdID0geyAucHJuID0gaWd0X2RldnNfcHJpbnRfc2ltcGxlIH0s CisJW0lHVF9QUklOVF9ERVRBSUxdID0geyAucHJuID0gaWd0X2RldnNfcHJpbnRfZGV0YWlsIH0s Cit9OworCit2b2lkIGlndF9kZXZpY2VzX3ByaW50KGVudW0gaWd0X2RldmljZXNfcHJpbnRfdHlw ZSBwcmludHR5cGUpCit7CisJcHJpbnRfZnVuY3Rpb25zW3ByaW50dHlwZV0ucHJuKGlndF9kZXZz LnZpZXcpOworfQorCit2b2lkIGlndF9kZXZpY2VzX3ByaW50X3ZlbmRvcnModm9pZCkKK3sKKwlz dHJ1Y3QgbmFtZV92YWx1ZSAqbGlzdCA9ICZncHVfdmVuZG9yX2xpc3RbMF07CisJcHJpbnRmKCJS ZWNvZ25pemVkIHZlbmRvcnM6XG4iKTsKKworCXByaW50ZigiJS04cyAlLTE2c1xuIiwgIlBDSSBJ RCIsICJ2ZW5kb3IiKTsKKwl3aGlsZSAobGlzdC0+bmFtZSkgeworCQlzdHJ1Y3QgdmVuZG9yX3Nw ZWMgKnZzID0gKHN0cnVjdCB2ZW5kb3Jfc3BlYyAqKSBsaXN0LT52YWx1ZTsKKwkJaWYgKHZzKQor CQkJcHJpbnRmKCIlLThzICUtMTZzXG4iLCBsaXN0LT5uYW1lLCB2cy0+dmVuZG9yKTsKKwkJbGlz dCsrOworCX0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBGSUxURVJfU1BF Q19OQU1FX0xFTiAzMgorI2RlZmluZSBGSUxURVJfU1BFQ19EQVRBX0xFTiAyNTYKK3N0cnVjdCBm aWx0ZXJfc3BlYyB7CisJY2hhciBuYW1lW0ZJTFRFUl9TUEVDX05BTUVfTEVOXTsKKwljaGFyIGRh dGFbRklMVEVSX1NQRUNfREFUQV9MRU5dOworfTsKKworc3RydWN0IGZpbHRlcl9mdW5jIHsKKwlH UHRyQXJyYXkgKigqZmlsdGVyX2Z1bmN0aW9uKShzdHJ1Y3QgZmlsdGVyX3NwZWMgKmZzcGVjLAor CQkJCSAgICAgIHN0cnVjdCBmaWx0ZXJfZnVuYyAqZmZ1bmMpOworCWNvbnN0IGNoYXIgKmhlbHA7 CisJY29uc3QgY2hhciAqZGV0YWlsOworCisJY29uc3QgY2hhciAqcHJvcGVydHk7CisJY29uc3Qg Y2hhciAqdmFsdWU7Cit9OworCitzdHJ1Y3QgZmlsdGVyX2RhdGEgeworCWNoYXIgKnZlbmRvcjsK KwljaGFyICpkZXZpY2U7CisJY2hhciAqY2FyZDsKK307CisKK3N0YXRpYyBHSGFzaFRhYmxlICpz cGxpdF9maWx0ZXJfZGF0YShjb25zdCBjaGFyICpkYXRhKQoreworCUdIYXNoVGFibGUgKmh0ID0g Z19oYXNoX3RhYmxlX25ld19mdWxsKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsLAorCQkJCQkgICAg ICAgZnJlZSwgZnJlZSk7CisJZ2NoYXIgKipzOworCWdjaGFyICoqc3RydiA9IGdfc3Ryc3BsaXQo ZGF0YSwgIiwiLCAtMSk7CisKKwlzID0gc3RydjsKKwl3aGlsZSAoKnMpIHsKKwkJY2hhciAqaywg KnY7CisJCXYgPSBzdHJjaHIoKnMsICc9Jyk7CisJCWlmICghdikgeworCQkJcysrOworCQkJY29u dGludWU7CisJCX0KKwkJayA9IHN0cm5kdXAoKnMsIHYgLSAoKnMpKTsKKwkJdiA9IHN0cmR1cCh2 ICsgMSk7CisJCWdfaGFzaF90YWJsZV9pbnNlcnQoaHQsIGssIHYpOworCQlzKys7CisJfQorCWdf c3RyZnJlZXYoc3Rydik7CisKKwlyZXR1cm4gaHQ7Cit9CisKK3N0YXRpYyBib29sIGdldF9maWx0 ZXJfc3BlYyhjb25zdCBjaGFyICpmaWx0ZXIsIHN0cnVjdCBmaWx0ZXJfc3BlYyAqc3BlYykKK3sK KwlpZiAoIWZpbHRlcikKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHNzY2FuZihmaWx0ZXIsICIl MzFbXjpdOiUyNTVzIiwgc3BlYy0+bmFtZSwgc3BlYy0+ZGF0YSkgPj0gMSkKKwkJcmV0dXJuIHRy dWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBHUHRyQXJyYXkgKmZpbHRlcl9kcm0o c3RydWN0IGZpbHRlcl9zcGVjICpmc3BlYywKKwkJCSAgICAgc3RydWN0IGZpbHRlcl9mdW5jICpm ZnVuYykKK3sKKwlHSGFzaFRhYmxlICpodDsKKwlHUHRyQXJyYXkgKmRldnMsICp2aWV3OworCXN0 cnVjdCBmaWx0ZXJfZGF0YSBmZGF0YTsKKwlpbnQgY2FyZCA9IC0xOworCWNoYXIgY2FyZHN0cltO QU1FX01BWF07CisKKwkodm9pZCkgZmZ1bmM7CisJREJHKCJmaWx0ZXIgZHJtXG4iKTsKKworCWh0 ID0gc3BsaXRfZmlsdGVyX2RhdGEoZnNwZWMtPmRhdGEpOworCWZkYXRhLmNhcmQgPSBnX2hhc2hf dGFibGVfbG9va3VwKGh0LCAiY2FyZCIpOworCisJdmlldyA9IGlndF9kZXZzLnZpZXc7CisJZGV2 cyA9IGlndF9kZXZzLmRldnM7CisKKwlpZiAoZmRhdGEuY2FyZCkgeworCQlzc2NhbmYoZmRhdGEu Y2FyZCwgIiVkIiwgJmNhcmQpOworCQlpZiAoY2FyZCA8IDApIHsKKwkJCWdfaGFzaF90YWJsZV9k ZXN0cm95KGh0KTsKKwkJCXJldHVybiB2aWV3OworCQl9CisJfSBlbHNlIHsKKwkJY2FyZCA9IDA7 CisJfQorCisJc25wcmludGYoY2FyZHN0ciwgTkFNRV9NQVgsICIlcy9jYXJkJWQiLCBJR1RfRFJN X1BBVEgsIGNhcmQpOworCWZvciAoaW50IGkgPSAwOyBpIDwgZGV2cy0+bGVuOyBpKyspIHsKKwkJ c3RydWN0IGlndF9kZXZpY2UgKmRldiA9IGdfcHRyX2FycmF5X2luZGV4KGRldnMsIGkpOworCQlp ZiAoZGV2LT5kcm1fY2FyZF9wYXRoICYmICFzdHJjbXAoY2FyZHN0ciwgZGV2LT5kcm1fY2FyZF9w YXRoKSkgeworCQkJZ19wdHJfYXJyYXlfYWRkKHZpZXcsIGRldik7CisJCQlicmVhazsKKwkJfQor CX0KKworCURCRygiRmlsdGVyIGRybSB2aWV3IHNpemU6ICVkXG4iLCB2aWV3LT5sZW4pOworCisJ Z19oYXNoX3RhYmxlX2Rlc3Ryb3koaHQpOworCisJcmV0dXJuIHZpZXc7Cit9CisKK3N0YXRpYyBH UHRyQXJyYXkgKmZpbHRlcl9wY2koc3RydWN0IGZpbHRlcl9zcGVjICpmc3BlYywKKwkJCSAgICAg c3RydWN0IGZpbHRlcl9mdW5jICpmZnVuYykKK3sKKwlHSGFzaFRhYmxlICpodDsKKwlHUHRyQXJy YXkgKmRldnMsICp2aWV3OworCXN0cnVjdCBmaWx0ZXJfZGF0YSBmZGF0YTsKKwlpbnQgY2FyZCA9 IC0xOworCisJREJHKCJmaWx0ZXIgcGNpXG4iKTsKKworCSh2b2lkKSBmZnVuYzsKKwlodCA9IHNw bGl0X2ZpbHRlcl9kYXRhKGZzcGVjLT5kYXRhKTsKKwlmZGF0YS52ZW5kb3IgPSBnX2hhc2hfdGFi bGVfbG9va3VwKGh0LCAidmVuZG9yIik7CisJZmRhdGEuZGV2aWNlID0gZ19oYXNoX3RhYmxlX2xv b2t1cChodCwgImRldmljZSIpOworCWZkYXRhLmNhcmQgPSBnX2hhc2hfdGFibGVfbG9va3VwKGh0 LCAiY2FyZCIpOworCisJdmlldyA9IGlndF9kZXZzLnZpZXc7CisJZGV2cyA9IGlndF9kZXZzLmRl dnM7CisKKwlpZiAoZmRhdGEuY2FyZCkgeworCQlzc2NhbmYoZmRhdGEuY2FyZCwgIiVkIiwgJmNh cmQpOworCQlpZiAoY2FyZCA8IDApIHsKKwkJCWdfaGFzaF90YWJsZV9kZXN0cm95KGh0KTsKKwkJ CXJldHVybiB2aWV3OworCQl9CisJfSBlbHNlIHsKKwkJY2FyZCA9IDA7CisJfQorCisJZm9yIChp bnQgaSA9IDA7IGkgPCBkZXZzLT5sZW47IGkrKykgeworCQlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2 ID0gZ19wdHJfYXJyYXlfaW5kZXgoZGV2cywgaSk7CisKKwkJaWYgKGRldi0+ZGV2X3R5cGUgIT0g REVWX1BDSSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFNraXAgaWYgJ3ZlbmRvcicgZG9lc24ndCBt YXRjaCAoaGV4IG9yIG5hbWUpICovCisJCWlmIChmZGF0YS52ZW5kb3IgJiYKKwkJCQlzdHJjYXNl Y21wKGZkYXRhLnZlbmRvciwgZGV2LT52ZW5kb3IpICYmCisJCQkJIWlzX3BjaV92ZW5kb3JfbmFt ZShmZGF0YS52ZW5kb3IpKQorCQkJY29udGludWU7CisKKwkJLyogU2tpcCBpZiAnZGV2aWNlJyBk b2Vzbid0IG1hdGNoICovCisJCWlmIChmZGF0YS5kZXZpY2UgJiYKKwkJCQlzdHJjYXNlY21wKGZk YXRhLmRldmljZSwgZGV2LT5kZXZpY2UpKQorCQkJY29udGludWU7CisKKwkJaWYgKCFjYXJkKSB7 CisJCQlnX3B0cl9hcnJheV9hZGQodmlldywgZGV2KTsKKwkJCWJyZWFrOworCQl9CisJCWNhcmQt LTsKKwl9CisKKwlEQkcoIkZpbHRlciBwY2kgdmlldyBzaXplOiAlZFxuIiwgdmlldy0+bGVuKTsK KworCWdfaGFzaF90YWJsZV9kZXN0cm95KGh0KTsKKworCXJldHVybiB2aWV3OworfQorCisvKiBI ZWxwZXIgZm9yIGZpbmRpbmcgZmlyc3QgZGV2aWNlIG1hdGNoaW5nIHByb3BlcnR5OnZhbHVlLiAq Lworc3RhdGljIEdQdHJBcnJheSAqZmlsdGVyX3Byb3BlcnR5KHN0cnVjdCBmaWx0ZXJfc3BlYyAq ZnNwZWMsCisJCQkJICBzdHJ1Y3QgZmlsdGVyX2Z1bmMgKmZmdW5jKQoreworCUdIYXNoVGFibGUg Kmh0OworCUdQdHJBcnJheSAqZGV2cywgKnZpZXc7CisJc3RydWN0IGZpbHRlcl9kYXRhIGZkYXRh OworCWludCBjYXJkID0gLTE7CisJY29uc3QgY2hhciAqcHJvcGVydHkgPSBmZnVuYy0+cHJvcGVy dHk7CisJY29uc3QgY2hhciAqdmFsdWUgPSBmZnVuYy0+dmFsdWU7CisKKwlpZiAoIXByb3BlcnR5 IHx8ICF2YWx1ZSkKKwkJcmV0dXJuIGlndF9kZXZzLnZpZXc7CisKKwlEQkcoImZpbHRlciBwcm9w ZXJ0eS92YWx1ZSBbJXMvJXNdXG4iLCBwcm9wZXJ0eSwgdmFsdWUpOworCisJaHQgPSBzcGxpdF9m aWx0ZXJfZGF0YShmc3BlYy0+ZGF0YSk7CisJZmRhdGEuY2FyZCA9IGdfaGFzaF90YWJsZV9sb29r dXAoaHQsICJjYXJkIik7CisKKwl2aWV3ID0gaWd0X2RldnMudmlldzsKKwlkZXZzID0gaWd0X2Rl dnMuZGV2czsKKworCWlmIChmZGF0YS5jYXJkKSB7CisJCXNzY2FuZihmZGF0YS5jYXJkLCAiJWQi LCAmY2FyZCk7CisJCWlmIChjYXJkIDwgMCkgeworCQkJZ19oYXNoX3RhYmxlX2Rlc3Ryb3koaHQp OworCQkJcmV0dXJuIHZpZXc7CisJCX0KKwl9IGVsc2UgeworCQljYXJkID0gMDsKKwl9CisKKwlm b3IgKGludCBpID0gMDsgaSA8IGRldnMtPmxlbjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnByb3Bf dmFsdWU7CisJCXN0cnVjdCBpZ3RfZGV2aWNlICpkZXYgPSBnX3B0cl9hcnJheV9pbmRleChkZXZz LCBpKTsKKworCQlwcm9wX3ZhbHVlID0gZ2V0X3Byb3AoZGV2LCBwcm9wZXJ0eSk7CisJCWlmIChw cm9wX3ZhbHVlICYmICFzdHJjbXAocHJvcF92YWx1ZSwgdmFsdWUpKSB7CisJCQlpZiAoIWNhcmQp IHsKKwkJCQlnX3B0cl9hcnJheV9hZGQodmlldywgZGV2KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJ CWNhcmQtLTsKKwkJfQorCX0KKworCURCRygiRmlsdGVyIHZpZXcgc2l6ZTogJWRcbiIsIHZpZXct Pmxlbik7CisKKwlnX2hhc2hfdGFibGVfZGVzdHJveShodCk7CisKKwlyZXR1cm4gdmlldzsKK30K Kworc3RhdGljIEdQdHJBcnJheSAqZmlsdGVyX3ZnZW0oc3RydWN0IGZpbHRlcl9zcGVjICpmc3Bl YywKKwkJCSAgICAgIHN0cnVjdCBmaWx0ZXJfZnVuYyAqZmZ1bmMpCit7CisJR1B0ckFycmF5ICp2 aWV3ID0gZmlsdGVyX3Byb3BlcnR5KGZzcGVjLCBmZnVuYyk7CisJaWYgKHZpZXcpIHsKKwkJc3Ry dWN0IGlndF9kZXZpY2UgKmRldiA9IGdfcHRyX2FycmF5X2luZGV4KHZpZXcsIDApOworCQlkZXYt PnZzID0gJnZfdmdlbTsKKwl9CisJcmV0dXJuIHZpZXc7Cit9CisKK3N0YXRpYyBHUHRyQXJyYXkg KmZpbHRlcl92a21zKHN0cnVjdCBmaWx0ZXJfc3BlYyAqZnNwZWMsCisJCQkgICAgICBzdHJ1Y3Qg ZmlsdGVyX2Z1bmMgKmZmdW5jKQoreworCXJldHVybiBmaWx0ZXJfcHJvcGVydHkoZnNwZWMsIGZm dW5jKTsKK30KKworc3RhdGljIEdQdHJBcnJheSAqZmlsdGVyX3ZjNChzdHJ1Y3QgZmlsdGVyX3Nw ZWMgKmZzcGVjLAorCQkJICAgICBzdHJ1Y3QgZmlsdGVyX2Z1bmMgKmZmdW5jKQoreworCUdQdHJB cnJheSAqdmlldyA9IGZpbHRlcl9wcm9wZXJ0eShmc3BlYywgZmZ1bmMpOworCWlmICh2aWV3KSB7 CisJCXN0cnVjdCBpZ3RfZGV2aWNlICpkZXYgPSBnX3B0cl9hcnJheV9pbmRleCh2aWV3LCAwKTsK KwkJZGV2LT52cyA9ICZ2X3ZjNDsKKwl9CisJcmV0dXJuIGZpbHRlcl9wcm9wZXJ0eShmc3BlYywg ZmZ1bmMpOworfQorCitzdGF0aWMgc3RydWN0IGZpbHRlcl9mdW5jIGZfZHJtID0geyAuZmlsdGVy X2Z1bmN0aW9uID0gZmlsdGVyX2RybSwKKwkJCQkgICAgLmhlbHAgPSAiZHJtOltjYXJkPSVkXSIs CisJCQkJICAgIC5kZXRhaWwgPSAiY2FyZCBpcyBOLWNhcmQgbnVtYmVyIChmcm9tIC9kZXYvZHJp L2NhcmROKVxuIiwKKwkJCQkgIH07CisKK3N0YXRpYyBzdHJ1Y3QgZmlsdGVyX2Z1bmMgZl9wY2kg PSB7IC5maWx0ZXJfZnVuY3Rpb24gPSBmaWx0ZXJfcGNpLAorCQkJCSAgICAuaGVscCA9ICJwY2k6 W3ZlbmRvcj0lMDR4L25hbWVdWyxkZXZpY2U9JTA0eF1bLGNhcmQ9JWRdXG4iLAorCQkJCSAgICAu ZGV0YWlsID0gInZlbmRvciBpcyBoZXggbnVtYmVyIG9yIG5hbWUiLAorCQkJCSAgfTsKKworc3Rh dGljIHN0cnVjdCBmaWx0ZXJfZnVuYyBmX3ZnZW0gPSB7IC5maWx0ZXJfZnVuY3Rpb24gPSBmaWx0 ZXJfdmdlbSwKKwkJCQkgICAgIC5oZWxwID0gInZnZW06W2NhcmQ9JWRdIiwKKwkJCQkgICAgIC5k ZXRhaWwgPSAiY2FyZCBpcyBuLXRoIHZnZW0gY2FyZCBudW1iZXJcbiIsCisJCQkJICAgICAucHJv cGVydHkgPSAiTU9EQUxJQVMiLAorCQkJCSAgICAgLnZhbHVlID0gInBsYXRmb3JtOnZnZW0iLAor CQkJCSAgIH07CisKK3N0YXRpYyBzdHJ1Y3QgZmlsdGVyX2Z1bmMgZl92a21zID0geyAuZmlsdGVy X2Z1bmN0aW9uID0gZmlsdGVyX3ZrbXMsCisJCQkJICAgICAuaGVscCA9ICJ2a21zOltjYXJkPSVk XSIsCisJCQkJICAgICAuZGV0YWlsID0gImNhcmQgaXMgbi10aCB2a21zIGNhcmQgbnVtYmVyXG4i LAorCQkJCSAgICAgLnByb3BlcnR5ID0gIk1PREFMSUFTIiwKKwkJCQkgICAgIC52YWx1ZSA9ICJw bGF0Zm9ybTp2a21zIiwKKwkJCQkgICB9OworCitzdGF0aWMgc3RydWN0IGZpbHRlcl9mdW5jIGZf dmM0ID0geyAuZmlsdGVyX2Z1bmN0aW9uID0gZmlsdGVyX3ZjNCwKKwkJCQkgICAgLmhlbHAgPSAi dmM0OltjYXJkPSVkXSIsCisJCQkJICAgIC5kZXRhaWwgPSAiY2FyZCBpcyBuLXRoIHZjNCBjYXJk IG51bWJlclxuIiwKKwkJCQkgICAgLnByb3BlcnR5ID0gIk9GX0NPTVBBVElCTEVfMCIsCisJCQkJ ICAgIC52YWx1ZSA9ICJicmNtLGJjbTI4MzUtdmM0IiwKKwkJCQkgIH07CisKK3N0cnVjdCBuYW1l X3ZhbHVlIGZpbHRlcl9kZWZpbml0aW9uX2xpc3RbXSA9IHsKKwl7ICJkcm0iLCAgICAgKGdwb2lu dGVyKSAmZl9kcm0gfSwKKwl7ICJwY2kiLCAgICAgKGdwb2ludGVyKSAmZl9wY2kgfSwKKwl7ICJ2 Z2VtIiwgICAgKGdwb2ludGVyKSAmZl92Z2VtIH0sCisJeyAidmttcyIsICAgIChncG9pbnRlcikg JmZfdmttcyB9LAorCXsgInZjNCIsICAgICAoZ3BvaW50ZXIpICZmX3ZjNCB9LAorCXsgTlVMTCwg fSwKK307CisKK3ZvaWQgaWd0X2RldmljZV9wcmludF9maWx0ZXJfdHlwZXModm9pZCkKK3sKKwlz dHJ1Y3QgbmFtZV92YWx1ZSAqbGlzdCA9ICZmaWx0ZXJfZGVmaW5pdGlvbl9saXN0WzBdOworCisJ cHJpbnRmKCJGaWx0ZXIgdHlwZXM6XG4tLS1cbiIpOworCXByaW50ZigiJS04cyAgJXNcbi0tLVxu IiwgImZpbHRlciIsICJzeW50YXgiKTsKKwl3aGlsZSAobGlzdC0+bmFtZSkgeworCQlzdHJ1Y3Qg ZmlsdGVyX2Z1bmMgKnYgPSAoc3RydWN0IGZpbHRlcl9mdW5jICopIGxpc3QtPnZhbHVlOworCQlw cmludGYoIiUtOHMgICVzXG4iLCBsaXN0LT5uYW1lLCB2LT5oZWxwKTsKKwkJcHJpbnRmKCIlLThz ICAlc1xuIiwgIiIsIHYtPmRldGFpbCk7CisJCWxpc3QrKzsKKwl9Cit9CisKK3N0YXRpYyBHUHRy QXJyYXkgKmRldmljZV9maWx0ZXJzID0gTlVMTDsKKworI2RlZmluZSBERVZJQ0VfRklMVEVSX0NI RUNLX0FMTE9DKCkgXAorCWRvIHsgXAorCQlpZiAoIWRldmljZV9maWx0ZXJzKSBcCisJCQlkZXZp Y2VfZmlsdGVycyA9IGdfcHRyX2FycmF5X25ld19mdWxsKDIsIGZyZWUpOyBcCisJCWlndF9hc3Nl cnQoZGV2aWNlX2ZpbHRlcnMpOyBcCisJfSB3aGlsZSgwKQorCitpbnQgaWd0X2RldmljZV9maWx0 ZXJfY291bnQodm9pZCkKK3sKKwlERVZJQ0VfRklMVEVSX0NIRUNLX0FMTE9DKCk7CisKKwlyZXR1 cm4gZGV2aWNlX2ZpbHRlcnMtPmxlbjsKK30KKworaW50IGlndF9kZXZpY2VfZmlsdGVyX2FkZChj b25zdCBjaGFyICpmaWx0ZXIpCit7CisJZ2NoYXIgKipzdHJ2LCAqKnM7CisJaW50IGMgPSAwOwor CisJREVWSUNFX0ZJTFRFUl9DSEVDS19BTExPQygpOworCisJc3RydiA9IGdfc3Ryc3BsaXQoZmls dGVyLCAiOyIsIC0xKTsKKworCXMgPSBzdHJ2OworCXdoaWxlICgqcykgeworCQlnX3B0cl9hcnJh eV9hZGQoZGV2aWNlX2ZpbHRlcnMsIHN0cmR1cCgqcykpOworCQlzKys7CisJfQorCWdfc3RyZnJl ZXYoc3Rydik7CisKKwlyZXR1cm4gYzsKK30KKworY29uc3QgY2hhciAqaWd0X2RldmljZV9maWx0 ZXJfZ2V0KGludCBudW0pCit7CisJREVWSUNFX0ZJTFRFUl9DSEVDS19BTExPQygpOworCisJaWYg KG51bSA8IDAgfHwgbnVtID49IGRldmljZV9maWx0ZXJzLT5sZW4pCisJCXJldHVybiBOVUxMOwor CisJcmV0dXJuIGdfcHRyX2FycmF5X2luZGV4KGRldmljZV9maWx0ZXJzLCBudW0pOworfQorCisj ZGVmaW5lIGRldl9pc19ub25fZGlzY292ZXJhYmxlKHZzKSBcCisJKCh2cyktPmRldl90eXBlID09 IERFVl9QTEFURk9STV9OT05fRElTQ09WRVJBQkxFKQorCitib29sIGlndF9kZXZpY2VfZmlsdGVy X2FwcGx5KGNvbnN0IGNoYXIgKmZpbHRlcikKK3sKKwlzdHJ1Y3QgZmlsdGVyX3NwZWMgZnNwZWM7 CisJc3RydWN0IGZpbHRlcl9mdW5jICpmZnVuYzsKKwlib29sIHJldDsKKworCWlmICghZmlsdGVy KQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXQgPSBnZXRfZmlsdGVyX3NwZWMoZmlsdGVyLCAmZnNw ZWMpOworCWlmICghcmV0KSB7CisJCWlndF93YXJuKCJDYW4ndCBzcGxpdCBmaWx0ZXIgWyVzXVxu IiwgZmlsdGVyKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWZmdW5jID0gZ19oYXNoX3RhYmxl X2xvb2t1cChmaWx0ZXJfZGVmaW5pdGlvbl9odCwgZnNwZWMubmFtZSk7CisJaWYgKCFmZnVuYykg eworCQlpZ3Rfd2FybigiTm8gZmlsdGVyIHdpdGggbmFtZSBbJXNdXG4iLCBmc3BlYy5uYW1lKTsK KwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIENsZWFuIHZpZXcgKi8KKwlnX3B0cl9hcnJheV9y ZW1vdmVfcmFuZ2UoaWd0X2RldnMudmlldywgMCwgaWd0X2RldnMudmlldy0+bGVuKTsKKworCWZm dW5jLT5maWx0ZXJfZnVuY3Rpb24oJmZzcGVjLCBmZnVuYyk7CisKKwlyZXR1cm4gdHJ1ZTsKK30K KworYm9vbCBpZ3RfZGV2aWNlX2ZpbHRlcl9hcHBseV9udGgoaW50IG51bSkKK3sKKwljb25zdCBj aGFyICpmaWx0ZXIgPSBpZ3RfZGV2aWNlX2ZpbHRlcl9nZXQobnVtKTsKKwlpZiAoIWZpbHRlcikK KwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIGlndF9kZXZpY2VfZmlsdGVyX2FwcGx5KGZpbHRl cik7Cit9CisKKyNkZWZpbmUgc2FmZV9zdHJuY3B5KGRzdCwgc3JjLCBzaXplKSBcCisJaWYgKHNy Yykgc3RybmNweSgoZHN0KSwgKHNyYyksIChzaXplKSkKKy8qCisgKiBSZXR1cm5zOgorICogZmFs c2UgLSBubyBjYXJkIHBvaW50ZXIgd2FzIHBhc3NlZCBvciBjYXJkIHdhc24ndCBtYXRjaGVkLAor ICogdHJ1ZSAtIGNhcmQgbWF0Y2hlZCBhbmQgcmV0dXJuZWQuCisgKi8KK2Jvb2wgaWd0X2Rldmlj ZV9jYXJkX21hdGNoKGNvbnN0IGNoYXIgKmZpbHRlciwgc3RydWN0IGlndF9kZXZpY2VfY2FyZCAq Y2FyZCkKK3sJCisJc3RydWN0IGlndF9kZXZpY2UgKmRldiA9IE5VTEw7CisKKwlpZiAoIWNhcmQp CisJCXJldHVybiBmYWxzZTsKKwltZW1zZXQoY2FyZCwgMCwgc2l6ZW9mKCpjYXJkKSk7CisKKwlp Z3RfZGV2aWNlc19zY2FuKGZhbHNlKTsKKworCWlmIChpZ3RfZGV2aWNlX2ZpbHRlcl9hcHBseShm aWx0ZXIpID09IGZhbHNlKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIWlndF9kZXZzLnZpZXct PmxlbikKKwkJcmV0dXJuIGZhbHNlOworCisJLyogV2UgdGFrZSBmaXJzdCBvbmUgaWYgbW9yZSB0 aGFuIG9uZSBjYXJkIG1hdGNoZXMgZmlsdGVyICovCisJZGV2ID0gZ19wdHJfYXJyYXlfaW5kZXgo aWd0X2RldnMudmlldywgMCk7CisJY2FyZC0+ZGV2X3R5cGUgPSBkZXYtPmRldl90eXBlOworCWNh cmQtPmNoaXBzZXQgPSBEUklWRVJfQU5ZOworCWlmIChkZXYtPnZzKQorCQljYXJkLT5jaGlwc2V0 ID0gZGV2LT52cy0+Y2hpcHNldDsKKwlpZiAoZGV2LT5kZXZfdHlwZSA9PSBERVZfUENJKSB7CisJ CXNhZmVfc3RybmNweShjYXJkLT5wY2lfc2xvdCwgZ2V0X3Byb3BfcGNpX3Nsb3QoZGV2KSwKKwkJ CVBDSV9TTE9UX0xFTkdUSCk7CisJfQorCXNhZmVfc3RybmNweShjYXJkLT5jYXJkLCBkZXYtPmRy bV9jYXJkX3BhdGgsIE5BTUVfTUFYKTsKKwlzYWZlX3N0cm5jcHkoY2FyZC0+cmVuZGVyLCBkZXYt PmRybV9yZW5kZXJfcGF0aCwgTkFNRV9NQVgpOworCisJcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1n aXQgYS9saWIvaWd0X2RldmljZV9zY2FuLmggYi9saWIvaWd0X2RldmljZV9zY2FuLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmIwM2IzMDA3Ci0tLSAvZGV2L251bGwKKysr IGIvbGliL2lndF9kZXZpY2Vfc2Nhbi5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmln aHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5 IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBj b3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAo dGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0 cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1 c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us CisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBl cnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3Vi amVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4 dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0 YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJF IElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJF U1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVU SE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdF UyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFD VCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05O RUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAq IElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0lHVF9ERVZJQ0VfU0NBTl9I X18KKyNkZWZpbmUgX19JR1RfREVWSUNFX1NDQU5fSF9fCisKKyNpbmNsdWRlIDxsaW1pdHMuaD4K KyNpbmNsdWRlIDxpZ3QuaD4KKworZW51bSBpZ3RfZGV2aWNlc19wcmludF90eXBlIHsKKwlJR1Rf UFJJTlRfU0lNUExFLAorCUlHVF9QUklOVF9ERVRBSUwsCit9OworCitlbnVtIGlndF9kZXZpY2Vf dHlwZSB7CisJREVWX1BDSSwKKwlERVZfUExBVEZPUk0sCit9OworCisjZGVmaW5lIFBDSV9TTE9U X0xFTkdUSCAxMworc3RydWN0IGlndF9kZXZpY2VfY2FyZCB7CisJZW51bSBpZ3RfZGV2aWNlX3R5 cGUgZGV2X3R5cGU7CisJaW50IGNoaXBzZXQ7CisJY2hhciBjYXJkW05BTUVfTUFYXTsKKwljaGFy IHJlbmRlcltOQU1FX01BWF07CisJY2hhciBwY2lfc2xvdFtQQ0lfU0xPVF9MRU5HVEhdOworfTsK KworLyogU2NhbiB1ZGV2IHN1YnN5c3RlbXMuIERvIGl0IG9uY2UgdW5sZXNzIGZvcmNlIGlzIHRy dWUsIHdoYXQgcmVzY2FucworICogZGV2aWNlcyBhZ2FpbiAqLwordm9pZCBpZ3RfZGV2aWNlc19z Y2FuKGJvb2wgZm9yY2UpOworCit2b2lkIGlndF9kZXZpY2VzX3ByaW50KGVudW0gaWd0X2Rldmlj ZXNfcHJpbnRfdHlwZSBwcmludHR5cGUpOwordm9pZCBpZ3RfZGV2aWNlc19wcmludF92ZW5kb3Jz KHZvaWQpOwordm9pZCBpZ3RfZGV2aWNlX3ByaW50X2ZpbHRlcl90eXBlcyh2b2lkKTsKKworLyoK KyAqIEhhbmRsZSBkZXZpY2UgZmlsdGVyIGNvbGxlY3Rpb24gYXJyYXkuCisgKiBJR1QgY2FuIHN0 b3JlL3JldHJpZXZlIGZpbHRlcnMgcGFzc2VkIGJ5IHVzZXIgdXNpbmcgJy0tZGV2aWNlJyBhcmdz LgorKi8KKworLyogUmV0dXJuIG51bWJlciBvZiBmaWx0ZXJzIGNvbGxlY3RlZCAqLworaW50IGln dF9kZXZpY2VfZmlsdGVyX2NvdW50KHZvaWQpOworCisvKiBBZGQgZmlsdGVyKHMpIHRvIHRoZSBh cnJheS4gUmV0dXJucyBudW1iZXIgb2YgZmlsdGVycyBhZGRlZCAoPjEgaWYKKyAqIHVzZXIgcGFz c2VzIG1vcmUgdGhhbiBvbmUgZmlsdGVyIHNlcGFyYXRpbmVkIGJ5ICc7JykgKi8KK2ludCBpZ3Rf ZGV2aWNlX2ZpbHRlcl9hZGQoY29uc3QgY2hhciAqZmlsdGVyKTsKKworLyogR2V0IG4tdGggZmls dGVyIHN0b3JlZCBpbiB0aGUgYXJyYXkgb3IgTlVMTCAqLworY29uc3QgY2hhciAqaWd0X2Rldmlj ZV9maWx0ZXJfZ2V0KGludCBudW0pOworCisvKiBDcmVhdGUgZGV2aWNlcyB2aWV3IGFjY29yZGlu ZyB0byBmaWx0ZXIgcGFzc2VkIGFzIGFuIGFyZ3VtZW50ICovCitib29sIGlndF9kZXZpY2VfZmls dGVyX2FwcGx5KGNvbnN0IGNoYXIgKmZpbHRlcik7CisKKy8qIEFwcGx5IG4tdGggZmlsdGVyIGFu ZCBjcmVhdGUgdGhlIHZpZXcgKi8KK2Jvb2wgaWd0X2RldmljZV9maWx0ZXJfYXBwbHlfbnRoKGlu dCBudW0pOworCisvKiBVc2UgZmlsdGVyIHRvIG1hdGNoIHRoZSBkZXZpY2UgYW5kIGZpbGwgY2Fy ZCBzdHJ1Y3R1cmUgKi8KK2Jvb2wgaWd0X2RldmljZV9jYXJkX21hdGNoKGNvbnN0IGNoYXIgKmZp bHRlciwgc3RydWN0IGlndF9kZXZpY2VfY2FyZCAqY2FyZCk7CisKKyNlbmRpZiAvKiBfX0lHVF9E RVZJQ0VfU0NBTl9IX18gKi8KZGlmZiAtLWdpdCBhL2xpYi9tZXNvbi5idWlsZCBiL2xpYi9tZXNv bi5idWlsZAppbmRleCAxNTc2MjRlNy4uODI2ZWJiZTMgMTAwNjQ0Ci0tLSBhL2xpYi9tZXNvbi5i dWlsZAorKysgYi9saWIvbWVzb24uYnVpbGQKQEAgLTEwLDYgKzEwLDcgQEAgbGliX3NvdXJjZXMg PSBbCiAJJ2lndF9jb2xvcl9lbmNvZGluZy5jJywKIAknaWd0X2RlYnVnZnMuYycsCiAJJ2lndF9k ZXZpY2UuYycsCisJJ2lndF9kZXZpY2Vfc2Nhbi5jJywKIAknaWd0X2F1eC5jJywKIAknaWd0X2dw dV9wb3dlci5jJywKIAknaWd0X2d0LmMnLApkaWZmIC0tZ2l0IGEvdG9vbHMvTWFrZWZpbGUuc291 cmNlcyBiL3Rvb2xzL01ha2VmaWxlLnNvdXJjZXMKaW5kZXggNTA3MDZmNDEuLjBlNjdiNjU0IDEw MDY0NAotLS0gYS90b29scy9NYWtlZmlsZS5zb3VyY2VzCisrKyBiL3Rvb2xzL01ha2VmaWxlLnNv dXJjZXMKQEAgLTMzLDYgKzMzLDcgQEAgdG9vbHNfcHJvZ19saXN0cyA9CQlcCiAJaW50ZWxfd2F0 ZXJtYXJrCQlcCiAJaW50ZWxfZ2VtX2luZm8JCVwKIAlpbnRlbF9ndnRnX3Rlc3QgICAgIFwKKwls c2dwdQkJCVwKIAkkKE5VTEwpCiAKIGRpc3RfYmluX1NDUklQVFMgPSBpbnRlbF9ncHVfYWJydApk aWZmIC0tZ2l0IGEvdG9vbHMvbHNncHUuYyBiL3Rvb2xzL2xzZ3B1LmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAuLjRjMjIxYWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMv bHNncHUuYwpAQCAtMCwwICsxLDIyMSBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVs IENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBv ZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0 d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiks CisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5 LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxs IGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRo ZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xs b3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQg dGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgp IHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg b2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G UklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdI VCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS V0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJF LgorICoKKyAqLworCisjaW5jbHVkZSAiaWd0X2RldmljZV9zY2FuLmgiCisjaW5jbHVkZSAiaWd0 LmgiCisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRl IDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorCitl bnVtIHsKKwlPUFRfUFJJTlRfU0lNUExFICAgPSAnaScsCisJT1BUX1BSSU5UX0RFVEFJTCAgID0g J2QnLAorCU9QVF9ESVNQTEFZX0FMTCAgICA9ICdhJywKKwlPUFRfTElTVF9WRU5ET1JTICAgPSAn dicsCisJT1BUX0xJU1RfRklMVEVSUyAgID0gJ2wnLAorCU9QVF9TRVRfRklMVEVSICAgICA9ICdz JywKKwlPUFRfREVWSUNFICAgICAgICAgPSAnRCcsCisJT1BUX0hFTFAgICAgICAgICAgID0gJ2gn Cit9OworCitib29sIGdfZGlzcGxheV9hbGw7Citib29sIGdfc2hvd192ZW5kb3JzOworY2hhciAq Z19wY2lfaWQ7Citib29sIGdfbGlzdF9maWx0ZXJzOworY2hhciAqZ19maWx0ZXI7Citib29sIGdf ZGV2aWNlOworYm9vbCBnX2hlbHA7CisKK3N0YXRpYyBjb25zdCBjaGFyICp1c2FnZV9zdHIgPQor CSJ1c2FnZTogbHNncHUgW29wdGlvbnNdXG5cbiIKKwkiT3B0aW9uczpcbiIKKwkiICAtaSwgLS1w cmludC1zaW1wbGUgICAgICAgICAgUHJpbnQgZGV2aWNlcyBhcyBzaW1wbGUgbGlzdCAoZGVmYXVs dClcbiIKKwkiICAtZCwgLS1wcmludC1kZXRhaWxzICAgICAgICAgUHJpbnQgZGV2aWNlcyB3aXRo IGRldGFpbHNcbiIKKwkiICAtYSwgLS1kaXNwbGF5LWFsbCAgICAgICAgICAgRG9uJ3QgYXBwbHkg dWRldiBmaWx0ZXJzIGFuZCBwcmludCBhbGwgZGV2aWNlc1xuIgorCSIgIC12LCAtLWxpc3QtdmVu ZG9ycyAgICAgICAgICBMaXN0IHJlY29nbml6ZWQgdmVuZG9yc1xuIgorCSIgIC1sLCAtLWxpc3Qt ZmlsdGVyLXR5cGVzICAgICBMaXN0IHJlZ2lzdGVyZWQgZGV2aWNlIGZpbHRlcnMgdHlwZXNcbiIK KwkiICAtcywgLS1zZXQtZmlsdGVyIGZpbHRlciAgICAgU2V0IGZpbHRlciBmb3IgcHJvY2Vzc2lu ZyBkZXZpY2VzXG4iCisJIiAgLUQsIC0tZGV2aWNlIGZpbHRlciAgICAgICAgIERldmljZSBmaWx0 ZXIsIGNhbiBiZSBnaXZlbiBtdWx0aXBsZSB0aW1lc1xuIgorCSIgIC1oLCAtLWhlbHAgICAgICAg ICAgICAgICAgICBTaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0XG4iOworCitzdGF0aWMg dm9pZCB0ZXN0X2RldmljZV9vcGVuKHN0cnVjdCBpZ3RfZGV2aWNlX2NhcmQgKmNhcmQpCit7CisJ aW50IGZkOworCisJaWYgKCFjYXJkKQorCQlyZXR1cm47CisKKwlmZCA9IF9fZHJtX29wZW5fY2Fy ZChjYXJkKTsKKwlpZiAoZmQgPj0gMCkgeworCQlwcmludGYoIkRldmljZSAlcyBzdWNjZXNzZnVs bHkgb3BlbmVkXG4iLCBjYXJkLT5jYXJkKTsKKwkJY2xvc2UoZmQpOworCX0gZWxzZSB7CisJCWlm IChzdHJsZW4oY2FyZC0+Y2FyZCkpCisJCQlwcmludGYoIkNhbm5vdCBvcGVuIGNhcmQgJXMgZGV2 aWNlXG4iLCBjYXJkLT5jYXJkKTsKKwkJZWxzZQorCQkJcHJpbnRmKCJDYW5ub3Qgb3BlbiBjYXJk IGRldmljZSwgZW1wdHkgbmFtZVxuIik7CisJfQorCisJZmQgPSBfX2RybV9vcGVuX3JlbmRlcihj YXJkKTsKKwlpZiAoZmQgPj0gMCkgeworCQlwcmludGYoIkRldmljZSAlcyBzdWNjZXNzZnVsbHkg b3BlbmVkXG4iLCBjYXJkLT5yZW5kZXIpOworCQljbG9zZShmZCk7CisJfSBlbHNlIHsKKwkJaWYg KHN0cmxlbihjYXJkLT5yZW5kZXIpKQorCQkJcHJpbnRmKCJDYW5ub3Qgb3BlbiByZW5kZXIgJXMg ZGV2aWNlXG4iLCBjYXJkLT5yZW5kZXIpOworCQllbHNlCisJCQlwcmludGYoIkNhbm5vdCBvcGVu IHJlbmRlciBkZXZpY2UsIGVtcHR5IG5hbWVcbiIpOworCX0KK30KKworc3RhdGljIHZvaWQgcHJp bnRfY2FyZChzdHJ1Y3QgaWd0X2RldmljZV9jYXJkICpjYXJkKQoreworCWlmICghY2FyZCkKKwkJ cmV0dXJuOworCisJc3dpdGNoIChjYXJkLT5kZXZfdHlwZSkgeworCWNhc2UgREVWX1BDSToKKwkJ cHJpbnRmKCJkZXYgdHlwZSAgICA6ICVzXG4iLCAiUENJIik7CisJCXByaW50ZigiUENJIHNsb3Qg ICAgOiAlc1xuIiwgY2FyZC0+cGNpX3Nsb3QpOworCQlicmVhazsKKwljYXNlIERFVl9QTEFURk9S TToKKwkJcHJpbnRmKCJkZXYgdHlwZSAgICA6ICVzXG4iLCAiUExBVEZPUk0iKTsKKwkJYnJlYWs7 CisJfQorCXByaW50ZigiY2hpcHNldCAgICAgOiAleFxuIiwgY2FyZC0+Y2hpcHNldCk7CisJcHJp bnRmKCJkcm0gY2FyZCAgICA6ICVzXG4iLCBjYXJkLT5jYXJkKTsKKwlwcmludGYoImRybSByZW5k ZXIgIDogJXNcbiIsIGNhcmQtPnJlbmRlcik7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCit7CisJc3RhdGljIHN0cnVjdCBvcHRpb24gbG9uZ19vcHRpb25zW10gPSB7CisJ CXsicHJpbnQtc2ltcGxlIiwgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgT1BUX1BSSU5U X1NJTVBMRX0sCisJCXsicHJpbnQtZGV0YWlsIiwgICAgICBub19hcmd1bWVudCwgICAgICAgTlVM TCwgT1BUX1BSSU5UX0RFVEFJTH0sCisJCXsiZGlzcGxheS1hbGwiLCAgICAgICBub19hcmd1bWVu dCwgICAgICAgTlVMTCwgT1BUX0RJU1BMQVlfQUxMfSwKKwkJeyJsaXN0LXZlbmRvcnMiLCAgICAg IG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBPUFRfTElTVF9WRU5ET1JTfSwKKwkJeyJsaXN0LWZp bHRlci10eXBlcyIsIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBPUFRfTElTVF9GSUxURVJTfSwK KwkJeyJzZXQtZmlsdGVyIiwgICAgICAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCBPUFRfU0VU X0ZJTFRFUn0sCisJCXsiZGV2aWNlIiwgICAgICAgICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVM TCwgT1BUX0RFVklDRX0sCisJCXsiaGVscCIsICAgICAgICAgICAgICBub19hcmd1bWVudCwgICAg ICAgTlVMTCwgT1BUX0hFTFB9LAorCQl7MCwgMCwgMCwgMH0KKwl9OworCWludCBjLCBpbmRleCA9 IDA7CisJY29uc3QgY2hhciAqZW52OworCWVudW0gaWd0X2RldmljZXNfcHJpbnRfdHlwZSBwcmlu dHR5cGUgPSBJR1RfUFJJTlRfU0lNUExFOworCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJn YywgYXJndiwgImlkYXZsczpEOmgiLAorCQkJCWxvbmdfb3B0aW9ucywgJmluZGV4KSkgIT0gLTEp IHsKKwkJc3dpdGNoKGMpIHsKKwkJY2FzZSBPUFRfUFJJTlRfU0lNUExFOgorCQkJcHJpbnR0eXBl ID0gSUdUX1BSSU5UX1NJTVBMRTsKKwkJCWJyZWFrOworCQljYXNlIE9QVF9QUklOVF9ERVRBSUw6 CisJCQlwcmludHR5cGUgPSBJR1RfUFJJTlRfREVUQUlMOworCQkJYnJlYWs7CisJCWNhc2UgT1BU X0RJU1BMQVlfQUxMOgorCQkJZ19kaXNwbGF5X2FsbCA9IHRydWU7CisJCQlicmVhazsKKwkJY2Fz ZSBPUFRfTElTVF9WRU5ET1JTOgorCQkJZ19zaG93X3ZlbmRvcnMgPSB0cnVlOworCQkJYnJlYWs7 CisJCWNhc2UgT1BUX1NFVF9GSUxURVI6CisJCQlnX2ZpbHRlciA9IHN0cmR1cChvcHRhcmcpOwor CQkJYnJlYWs7CisJCWNhc2UgT1BUX0xJU1RfRklMVEVSUzoKKwkJCWdfbGlzdF9maWx0ZXJzID0g dHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIE9QVF9ERVZJQ0U6CisJCQlnX2RldmljZSA9IHRydWU7 CisJCQlpZ3RfZGV2aWNlX2ZpbHRlcl9hZGQob3B0YXJnKTsKKwkJCWJyZWFrOworCQljYXNlIE9Q VF9IRUxQOgorCQkJZ19oZWxwID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGdf aGVscCkgeworCQlwcmludGYoIiVzXG4iLCB1c2FnZV9zdHIpOworCQlleGl0KDApOworCX0KKwor CWVudiA9IGdldGVudigiSUdUX0RFVklDRSIpOworCWlmIChlbnYpIHsKKwkJaWd0X2RldmljZV9m aWx0ZXJfYWRkKGVudik7CisJCWdfZGV2aWNlID0gdHJ1ZTsKKwl9CisKKwlpZiAoZ19zaG93X3Zl bmRvcnMpIHsKKwkJaWd0X2RldmljZXNfcHJpbnRfdmVuZG9ycygpOworCQlyZXR1cm4gMDsKKwl9 CisKKwlpZiAoZ19saXN0X2ZpbHRlcnMpIHsKKwkJaWd0X2RldmljZV9wcmludF9maWx0ZXJfdHlw ZXMoKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogVGhpcyB2YXJpYWJsZSBpcyB1c2VkIG9ubHkg Zm9yIGxzZ3B1IHRvIGRpc3BsYXkgaW5mb3JtYXRpb24KKwkgKiBhYm91dCBhbGwgZGV2aWNlcyBp biB1ZGV2ICovCisJaWYgKGdfZGlzcGxheV9hbGwpCisJCXNldGVudigiSUdUX1NDQU5fR0VUX0FM TF9ERVZJQ0VTIiwgIjEiLCAwKTsKKwlpZ3RfZGV2aWNlc19zY2FuKGZhbHNlKTsKKworCWlmIChn X2ZpbHRlcikgeworCQlpZ3RfZGV2aWNlX2ZpbHRlcl9hcHBseShnX2ZpbHRlcik7CisJfQorCisJ aWYgKGdfZGV2aWNlKSB7CisJCWludCBuID0gaWd0X2RldmljZV9maWx0ZXJfY291bnQoKTsKKwkJ cHJpbnRmKCI9PT0gRGV2aWNlIGZpbHRlciBsaXN0ID09PVxuIik7CisJCWZvciAoaW50IGkgPSAw OyBpIDwgbjsgaSsrKSB7CisJCQlwcmludGYoIlslMmRdOiAlc1xuIiwgaSwKKwkJCSAgICAgICBp Z3RfZGV2aWNlX2ZpbHRlcl9nZXQoaSkpOworCQkJaWd0X2RldmljZV9maWx0ZXJfYXBwbHlfbnRo KGkpOworCQkJaWd0X2RldmljZXNfcHJpbnQocHJpbnR0eXBlKTsKKwkJfQorCQlwcmludGYoIlxu Iik7CisKKwkJcHJpbnRmKCI9PT0gVGVzdGluZyBkZXZpY2Ugb3BlbiA9PT1cbiIpOworCQlmb3Ig KGludCBpID0gMDsgaSA8IG47IGkrKykgeworCQkJc3RydWN0IGlndF9kZXZpY2VfY2FyZCBjYXJk OworCQkJY29uc3QgY2hhciAqZmlsdGVyID0gaWd0X2RldmljZV9maWx0ZXJfZ2V0KGkpOworCisJ CQlpZiAoIWlndF9kZXZpY2VfY2FyZF9tYXRjaChmaWx0ZXIsICZjYXJkKSkKKwkJCQljb250aW51 ZTsKKwkJCXByaW50X2NhcmQoJmNhcmQpOworCQkJdGVzdF9kZXZpY2Vfb3BlbigmY2FyZCk7CisJ CQlwcmludGYoIi0tLVxuIik7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9CisKKwlpZ3RfZGV2aWNl c19wcmludChwcmludHR5cGUpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90b29scy9t ZXNvbi5idWlsZCBiL3Rvb2xzL21lc29uLmJ1aWxkCmluZGV4IDZlNzJiMjYzLi45YjNhMmE2OSAx MDA2NDQKLS0tIGEvdG9vbHMvbWVzb24uYnVpbGQKKysrIGIvdG9vbHMvbWVzb24uYnVpbGQKQEAg LTM2LDYgKzM2LDcgQEAgdG9vbHNfcHJvZ3MgPSBbCiAJJ2ludGVsX2dlbV9pbmZvJywKIAknaW50 ZWxfZ3Z0Z190ZXN0JywKIAknZHBjZF9yZWcnLAorCSdsc2dwdScsCiBdCiB0b29sX2RlcHMgPSBp Z3RfZGVwcwogCi0tIAoyLjIxLjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0 LWRldg==