From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chunyan Liu Subject: [RESEND][PATCH V16 4/6] libxl: add pvusb API Date: Tue, 8 Mar 2016 09:37:39 +0800 Message-ID: <1457401061-849-5-git-send-email-cyliu@suse.com> References: <1457401061-849-1-git-send-email-cyliu@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1457401061-849-1-git-send-email-cyliu@suse.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: jgross@suse.com, wei.liu2@citrix.com, ian.campbell@citrix.com, george.dunlap@eu.citrix.com, Ian.Jackson@eu.citrix.com, Chunyan Liu , George Dunlap , jfehlig@suse.com, Simon Cao List-Id: xen-devel@lists.xenproject.org QWRkIHB2dXNiIEFQSXMsIGluY2x1ZGluZzoKIC0gYXR0YWNoL2RldGFjaCAoY3JlYXRlL2Rlc3Ry b3kpIHZpcnR1YWwgdXNiIGNvbnRyb2xsZXIuCiAtIGF0dGFjaC9kZXRhY2ggdXNiIGRldmljZQog LSBsaXN0IHVzYiBjb250cm9sbGVyIGFuZCB1c2IgZGV2aWNlcwogLSBzb21lIG90aGVyIGhlbHBl ciBmdW5jdGlvbnMKClNpZ25lZC1vZmYtYnk6IFNpbW9uIENhbyA8Y2FvYm9zaW1vbkBnbWFpbC5j b20+ClNpZ25lZC1vZmYtYnk6IEdlb3JnZSBEdW5sYXAgPGdlb3JnZS5kdW5sYXBAY2l0cml4LmNv bT4KU2lnbmVkLW9mZi1ieTogQ2h1bnlhbiBMaXUgPGN5bGl1QHN1c2UuY29tPgotLS0KQ2hhbmdl czoKICAqIEFkZHJlc3MgR2VvcmdlJ3MgY29tbWVudHMKCiB0b29scy9saWJ4bC9NYWtlZmlsZSAg ICAgICAgICAgICAgICAgfCAgICAzICstCiB0b29scy9saWJ4bC9saWJ4bC5jICAgICAgICAgICAg ICAgICAgfCAgIDE4ICsKIHRvb2xzL2xpYnhsL2xpYnhsLmggICAgICAgICAgICAgICAgICB8ICAg NzcgKysKIHRvb2xzL2xpYnhsL2xpYnhsX2RldmljZS5jICAgICAgICAgICB8ICAgIDUgKy0KIHRv b2xzL2xpYnhsL2xpYnhsX2ludGVybmFsLmggICAgICAgICB8ICAgMTggKwogdG9vbHMvbGlieGwv bGlieGxfb3NkZXBzLmggICAgICAgICAgIHwgICAxMyArCiB0b29scy9saWJ4bC9saWJ4bF9wdnVz Yi5jICAgICAgICAgICAgfCAxNjIwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IHRvb2xzL2xpYnhsL2xpYnhsX3R5cGVzLmlkbCAgICAgICAgICB8ICAgNDYgKwogdG9vbHMvbGli eGwvbGlieGxfdHlwZXNfaW50ZXJuYWwuaWRsIHwgICAgMSArCiB0b29scy9saWJ4bC9saWJ4bF91 dGlscy5jICAgICAgICAgICAgfCAgIDE4ICsKIHRvb2xzL2xpYnhsL2xpYnhsX3V0aWxzLmggICAg ICAgICAgICB8ICAgIDUgKwogMTEgZmlsZXMgY2hhbmdlZCwgMTgyMiBpbnNlcnRpb25zKCspLCAy IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2xpYnhsL2xpYnhsX3B2dXNi LmMKCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9NYWtlZmlsZSBiL3Rvb2xzL2xpYnhsL01ha2Vm aWxlCmluZGV4IDc4OWExMmUuLjhmYTdiODcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL01ha2Vm aWxlCisrKyBiL3Rvb2xzL2xpYnhsL01ha2VmaWxlCkBAIC0xMDUsNyArMTA1LDggQEAgTElCWExf T0JKUyA9IGZsZXhhcnJheS5vIGxpYnhsLm8gbGlieGxfY3JlYXRlLm8gbGlieGxfZG0ubyBsaWJ4 bF9wY2kubyBcCiAJCQlsaWJ4bF9zdHJlYW1fcmVhZC5vIGxpYnhsX3N0cmVhbV93cml0ZS5vIFwK IAkJCWxpYnhsX3NhdmVfY2FsbG91dC5vIF9saWJ4bF9zYXZlX21zZ3NfY2FsbG91dC5vIFwKIAkJ CWxpYnhsX3FtcC5vIGxpYnhsX2V2ZW50Lm8gbGlieGxfZm9yay5vIFwKLQkJCWxpYnhsX2RvbV9z dXNwZW5kLm8gbGlieGxfZG9tX3NhdmUubyAkKExJQlhMX09CSlMteSkKKwkJCWxpYnhsX2RvbV9z dXNwZW5kLm8gbGlieGxfZG9tX3NhdmUubyBsaWJ4bF9wdnVzYi5vIFwKKyAgICAgICAgICAgICAg ICAgICAgICAgICQoTElCWExfT0JKUy15KQogTElCWExfT0JKUyArPSBsaWJ4bF9nZW5pZC5vCiBM SUJYTF9PQkpTICs9IF9saWJ4bF90eXBlcy5vIGxpYnhsX2ZsYXNrLm8gX2xpYnhsX3R5cGVzX2lu dGVybmFsLm8KIApkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGwuYyBiL3Rvb2xzL2xpYnhs L2xpYnhsLmMKaW5kZXggMmFiNWFkMy4uMWU2ODY4OCAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwv bGlieGwuYworKysgYi90b29scy9saWJ4bC9saWJ4bC5jCkBAIC00MTAyLDYgKzQxMDIsOCBAQCBv dXQ6CiAgKiBsaWJ4bF9kZXZpY2VfdmtiX2Rlc3Ryb3kKICAqIGxpYnhsX2RldmljZV92ZmJfcmVt b3ZlCiAgKiBsaWJ4bF9kZXZpY2VfdmZiX2Rlc3Ryb3kKKyAqIGxpYnhsX2RldmljZV91c2JjdHJs X3JlbW92ZQorICogbGlieGxfZGV2aWNlX3VzYmN0cmxfZGVzdHJveQogICovCiAjZGVmaW5lIERF RklORV9ERVZJQ0VfUkVNT1ZFX0VYVCh0eXBlLCByZW10eXBlLCByZW1vdmVkZXN0cm95LCBmKSAg ICAgICAgXAogICAgIGludCBsaWJ4bF9kZXZpY2VfIyN0eXBlIyNfIyNyZW1vdmVkZXN0cm95KGxp YnhsX2N0eCAqY3R4LCAgICAgICAgICAgXApAQCAtNDE1OSw2ICs0MTYxLDEwIEBAIERFRklORV9E RVZJQ0VfUkVNT1ZFKHZmYiwgZGVzdHJveSwgMSkKIERFRklORV9ERVZJQ0VfUkVNT1ZFKHZ0cG0s IHJlbW92ZSwgMCkKIERFRklORV9ERVZJQ0VfUkVNT1ZFKHZ0cG0sIGRlc3Ryb3ksIDEpCiAKKy8q IHVzYmN0cmwgKi8KK0RFRklORV9ERVZJQ0VfUkVNT1ZFX0NVU1RPTSh1c2JjdHJsLCByZW1vdmUs IDApCitERUZJTkVfREVWSUNFX1JFTU9WRV9DVVNUT00odXNiY3RybCwgZGVzdHJveSwgMSkKKwog LyogY2hhbm5lbC9jb25zb2xlIGhvdHVucGx1ZyBpcyBub3QgaW1wbGVtZW50ZWQuIFRoZXJlIGFy ZSAyIHBvc3NpYmlsaXRpZXM6CiAgKiAxLiBhZGQgc3VwcG9ydCBmb3Igc2Vjb25kYXJ5IGNvbnNv bGVzIHRvIHhlbmNvbnNvbGVkCiAgKiAyLiBkeW5hbWljYWxseSBhZGQvcmVtb3ZlIHFlbXUgY2hh cmRldnMgdmlhIHFtcCBtZXNzYWdlcy4gKi8KQEAgLTQxNzQsNiArNDE4MCw4IEBAIERFRklORV9E RVZJQ0VfUkVNT1ZFKHZ0cG0sIGRlc3Ryb3ksIDEpCiAgKiBsaWJ4bF9kZXZpY2VfZGlza19hZGQK ICAqIGxpYnhsX2RldmljZV9uaWNfYWRkCiAgKiBsaWJ4bF9kZXZpY2VfdnRwbV9hZGQKKyAqIGxp YnhsX2RldmljZV91c2JjdHJsX2FkZAorICogbGlieGxfZGV2aWNlX3VzYmRldl9hZGQKICAqLwog CiAjZGVmaW5lIERFRklORV9ERVZJQ0VfQUREKHR5cGUpICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCkBAIC00MjA1LDYgKzQyMTMsMTIgQEAgREVGSU5FX0RFVklDRV9B REQobmljKQogLyogdnRwbSAqLwogREVGSU5FX0RFVklDRV9BREQodnRwbSkKIAorLyogdXNiY3Ry bCAqLworREVGSU5FX0RFVklDRV9BREQodXNiY3RybCkKKworLyogdXNiICovCitERUZJTkVfREVW SUNFX0FERCh1c2JkZXYpCisKICN1bmRlZiBERUZJTkVfREVWSUNFX0FERAogCiAvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLwpAQCAtNjc1MCw2ICs2NzY0LDEwIEBAIGludCBsaWJ4bF9yZXRyaWV2ZV9k b21haW5fY29uZmlndXJhdGlvbihsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCiAKICAg ICBNRVJHRShwY2ksIHBjaWRldnMsIENPTVBBUkVfUENJLCB7fSk7CiAKKyAgICBNRVJHRSh1c2Jj dHJsLCB1c2JjdHJscywgQ09NUEFSRV9VU0JDVFJMLCB7fSk7CisKKyAgICBNRVJHRSh1c2JkZXYs IHVzYmRldnMsIENPTVBBUkVfVVNCLCB7fSk7CisKICAgICAvKiBUYWtlIGNhcmUgb2YgcmVtb3Zh YmxlIGRldmljZS4gV2UgbWFpbnRhaW4gaW52YXJpYW50IGluIHRoZQogICAgICAqIGluc2VydCAv IHJlbW92ZSBvcGVyYXRpb24gc28gdGhhdDoKICAgICAgKiAxLiBpZiB4ZW5zdG9yZSBpcyAiZW1w dHkiIHdoaWxlIEpTT04gaXMgbm90LCB0aGUgcmVzdWx0CmRpZmYgLS1naXQgYS90b29scy9saWJ4 bC9saWJ4bC5oIGIvdG9vbHMvbGlieGwvbGlieGwuaAppbmRleCAwODU5MzgzLi41Y2MzY2UzIDEw MDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bC5oCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsLmgK QEAgLTEyMyw2ICsxMjMsMTIgQEAKICNkZWZpbmUgTElCWExfSEFWRV9ET01BSU5fTk9ERUFGRklO SVRZIDEKIAogLyoKKyAqIExJQlhMX0hBVkVfUFZVU0IgaW5kaWNhdGVzIGZ1bmN0aW9ucyBmb3Ig cGx1Z2dpbmcgaW4gVVNCIGRldmljZXMKKyAqIHRocm91Z2ggcHZ1c2IgLS0gYm90aCBob3RwbHVn IGFuZCBhdCBkb21haW4gY3JlYXRpb24gdGltZS4uCisgKi8KKyNkZWZpbmUgTElCWExfSEFWRV9Q VlVTQiAxCisKKy8qCiAgKiBMSUJYTF9IQVZFX0JVSUxESU5GT19IVk1fVkVORE9SX0RFVklDRSBp bmRpY2F0ZXMgdGhhdCB0aGUKICAqIGxpYnhsX3ZlbmRvcl9kZXZpY2UgZmllbGQgaXMgcHJlc2Vu dCBpbiB0aGUgaHZtIHNlY3Rpb25zIG9mCiAgKiBsaWJ4bF9kb21haW5fYnVpbGRfaW5mby4gVGhp cyBmaWVsZCB0ZWxscyBsaWJ4bCB3aGljaApAQCAtMTUzNiw2ICsxNTQyLDc3IEBAIGludCBsaWJ4 bF9jZHJvbV9pbnNlcnQobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLCBsaWJ4bF9kZXZp Y2VfZGlzayAqZGlzaywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlieGxfYXN5bmNv cF9ob3cgKmFvX2hvdykKICAgICAgICAgICAgICAgICAgICAgICAgTElCWExfRVhURVJOQUxfQ0FM TEVSU19PTkxZOwogCisvKgorICogVVNCCisgKgorICogRm9yIGVhY2ggZGV2aWNlIHJlbW92ZWQg b3IgYWRkZWQsIG9uZSBvZiB0aGVzZSBwcm90b2NvbHMgaXMgYXZhaWxhYmxlOgorICogLSBQViAo aS5lLiwgUFZVU0IpCisgKiAtIERFVklDRU1PREVMIChpLmUsIHFlbXUpCisgKgorICogUFYgaXMg YXZhaWxhYmxlIGZvciBlaXRoZXIgUFYgb3IgSFZNIGRvbWFpbnMuICBERVZJQ0VNT0RFTCBpcyBv bmx5CisgKiBhdmFpbGFibGUgZm9yIEhWTSBkb21haW5zLiAgVGhlIGNhbGxlciBjYW4gYWRkaXRp b25hbGx5IHNwZWNpZnkKKyAqICJBVVRPIiwgaW4gd2hpY2ggY2FzZSB0aGUgbGlicmFyeSB3aWxs IHRyeSB0byBkZXRlcm1pbmUgdGhlIGJlc3QKKyAqIHByb3RvY29sIGF1dG9tYXRpY2FsbHkuCisg KgorICogQXQgdGhlIG1vbWVudCwgdGhlIG9ubHkgcHJvdG9jb2wgaW1wbGVtZW50ZWQgaXMgUFYu CisgKgorICogT25lIGNhbiBhZGQvcmVtb3ZlIFVTQiBjb250cm9sbGVycyB0by9mcm9tIGd1ZXN0 LCBhbmQgYXR0YWNoL2RldGFjaCBVU0IKKyAqIGRldmljZXMgdG8vZnJvbSBVU0IgY29udHJvbGxl cnMuCisgKgorICogVG8gYWRkIFVTQiBjb250cm9sbGVycyBhbmQgVVNCIGRldmljZXMsIG9uZSBj YW4gYWRkaW5nIFVTQiBjb250cm9sbGVycworICogZmlyc3QgYW5kIHRoZW4gYXR0YWNoaW5nIFVT QiBkZXZpY2VzIHRvIHNvbWUgVVNCIGNvbnRyb2xsZXIsIG9yIGFkZGluZworICogVVNCIGRldmlj ZXMgdG8gZ3Vlc3QgZGlyZWN0bHksIGl0IHdpbGwgYXV0b21hdGljYWxseSBjcmVhdGUgYSBVU0IK KyAqIGNvbnRyb2xsZXIgZm9yIFVTQiBkZXZpY2VzIHRvIGF0dGFjaC4KKyAqCisgKiBUbyByZW1v dmUgVVNCIGNvbnRyb2xsZXJzIG9yIFVTQiBkZXZpY2VzLCBvbmUgY2FuIHJlbW92ZSBVU0IgZGV2 aWNlcworICogdW5kZXIgVVNCIGNvbnRyb2xsZXIgb25lIGJ5IG9uZSBhbmQgdGhlbiByZW1vdmUg VVNCIGNvbnRyb2xsZXIsIG9yCisgKiByZW1vdmUgVVNCIGNvbnRyb2xsZXIgZGlyZWN0bHksIGl0 IHdpbGwgcmVtb3ZlIGFsbCBVU0IgZGV2aWNlcyB1bmRlcgorICogaXQgYXV0b21hdGljYWxseS4K KyAqCisgKi8KKy8qIFVTQiBDb250cm9sbGVycyovCitpbnQgbGlieGxfZGV2aWNlX3VzYmN0cmxf YWRkKGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmN0cmwgKnVzYmN0cmwsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGxpYnhsX2FzeW5jb3BfaG93ICphb19ob3cpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIExJQlhMX0VYVEVSTkFMX0NBTExFUlNfT05MWTsKKworaW50IGxp YnhsX2RldmljZV91c2JjdHJsX3JlbW92ZShsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2JjdHJsICp1 c2JjdHJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4bF9hc3lu Y29wX2hvdyAqYW9faG93KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJYTF9F WFRFUk5BTF9DQUxMRVJTX09OTFk7CisKK2ludCBsaWJ4bF9kZXZpY2VfdXNiY3RybF9kZXN0cm95 KGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpYnhsX2RldmljZV91c2JjdHJsICp1c2JjdHJsLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgbGlieGxfYXN5bmNvcF9ob3cgKmFvX2hvdykKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlhMX0VYVEVSTkFMX0NBTExFUlNfT05MWTsK KworbGlieGxfZGV2aWNlX3VzYmN0cmwgKmxpYnhsX2RldmljZV91c2JjdHJsX2xpc3QobGlieGxf Y3R4ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1aW50MzJfdCBkb21pZCwgaW50ICpudW0pOworCit2b2lkIGxpYnhsX2RldmljZV91c2JjdHJs X2xpc3RfZnJlZShsaWJ4bF9kZXZpY2VfdXNiY3RybCAqbGlzdCwgaW50IG5yKTsKKworCitpbnQg bGlieGxfZGV2aWNlX3VzYmN0cmxfZ2V0aW5mbyhsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9t aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3Ry bCAqdXNiY3RybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX3VzYmN0 cmxpbmZvICp1c2JjdHJsaW5mbyk7CisKKy8qIFVTQiBEZXZpY2VzICovCisKK2ludCBsaWJ4bF9k ZXZpY2VfdXNiZGV2X2FkZChsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRldiAqdXNiZGV2LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpYnhsX2FzeW5jb3BfaG93ICphb19ob3cpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCWExfRVhURVJOQUxfQ0FMTEVSU19PTkxZOwor CitpbnQgbGlieGxfZGV2aWNlX3VzYmRldl9yZW1vdmUobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90 IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2Jk ZXYgKnVzYmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4bF9h c3luY29wX2hvdyAqYW9faG93KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlhM X0VYVEVSTkFMX0NBTExFUlNfT05MWTsKKworbGlieGxfZGV2aWNlX3VzYmRldiAqCitsaWJ4bF9k ZXZpY2VfdXNiZGV2X2xpc3QobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLCBpbnQgKm51 bSk7CisKK3ZvaWQgbGlieGxfZGV2aWNlX3VzYmRldl9saXN0X2ZyZWUobGlieGxfZGV2aWNlX3Vz YmRldiAqbGlzdCwgaW50IG5yKTsKKwogLyogTmV0d29yayBJbnRlcmZhY2VzICovCiBpbnQgbGli eGxfZGV2aWNlX25pY19hZGQobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLCBsaWJ4bF9k ZXZpY2VfbmljICpuaWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlieGxfYXN5 bmNvcF9ob3cgKmFvX2hvdykKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX2RldmljZS5j IGIvdG9vbHMvbGlieGwvbGlieGxfZGV2aWNlLmMKaW5kZXggYTM1NmUyYS4uYjdhNmExMyAxMDA2 NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfZGV2aWNlLmMKKysrIGIvdG9vbHMvbGlieGwvbGli eGxfZGV2aWNlLmMKQEAgLTY3Niw3ICs2NzYsMTAgQEAgdm9pZCBsaWJ4bF9fZGV2aWNlc19kZXN0 cm95KGxpYnhsX19lZ2MgKmVnYywgbGlieGxfX2RldmljZXNfcmVtb3ZlX3N0YXRlICpkcnMpCiAg ICAgICAgICAgICAgICAgYW9kZXYtPmFjdGlvbiA9IExJQlhMX19ERVZJQ0VfQUNUSU9OX1JFTU9W RTsKICAgICAgICAgICAgICAgICBhb2Rldi0+ZGV2ID0gZGV2OwogICAgICAgICAgICAgICAgIGFv ZGV2LT5mb3JjZSA9IGRycy0+Zm9yY2U7Ci0gICAgICAgICAgICAgICAgbGlieGxfX2luaXRpYXRl X2RldmljZV9nZW5lcmljX3JlbW92ZShlZ2MsIGFvZGV2KTsKKyAgICAgICAgICAgICAgICBpZiAo ZGV2LT5iYWNrZW5kX2tpbmQgPT0gTElCWExfX0RFVklDRV9LSU5EX1ZVU0IpCisgICAgICAgICAg ICAgICAgICAgIGxpYnhsX19pbml0aWF0ZV9kZXZpY2VfdXNiY3RybF9yZW1vdmUoZWdjLCBhb2Rl dik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBsaWJ4bF9faW5p dGlhdGVfZGV2aWNlX2dlbmVyaWNfcmVtb3ZlKGVnYywgYW9kZXYpOwogICAgICAgICAgICAgfQog ICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfaW50ZXJuYWwu aCBiL3Rvb2xzL2xpYnhsL2xpYnhsX2ludGVybmFsLmgKaW5kZXggMDgyZjY1Ni4uZjc4Y2I3MiAx MDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfaW50ZXJuYWwuaAorKysgYi90b29scy9saWJ4 bC9saWJ4bF9pbnRlcm5hbC5oCkBAIC0yNTg3LDYgKzI1ODcsMTQgQEAgX2hpZGRlbiB2b2lkIGxp YnhsX19kZXZpY2VfdnRwbV9hZGQobGlieGxfX2VnYyAqZWdjLCB1aW50MzJfdCBkb21pZCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3Z0cG0gKnZ0cG0s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19hb19kZXZpY2UgKmFv ZGV2KTsKIAorX2hpZGRlbiB2b2lkIGxpYnhsX19kZXZpY2VfdXNiY3RybF9hZGQobGlieGxfX2Vn YyAqZWdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxpYnhsX2RldmljZV91c2JjdHJsICp1c2JjdHJsLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2FvX2RldmljZSAqYW9kZXYpOworCitfaGlkZGVu IHZvaWQgbGlieGxfX2RldmljZV91c2JkZXZfYWRkKGxpYnhsX19lZ2MgKmVnYywgdWludDMyX3Qg ZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2Rldmlj ZV91c2JkZXYgKnVzYmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bGlieGxfX2FvX2RldmljZSAqYW9kZXYpOworCiAvKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBjb25u ZWN0IGEgdmtiIGRldmljZSAqLwogX2hpZGRlbiBpbnQgbGlieGxfX2RldmljZV92a2JfYWRkKGxp YnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxpYnhsX2RldmljZV92a2IgKnZrYik7CkBAIC0yNjE5LDYgKzI2MjcsMTMgQEAgX2hp ZGRlbiB2b2lkIGxpYnhsX193YWl0X2RldmljZV9jb25uZWN0aW9uKGxpYnhsX19lZ2MqLAogX2hp ZGRlbiB2b2lkIGxpYnhsX19pbml0aWF0ZV9kZXZpY2VfZ2VuZXJpY19yZW1vdmUobGlieGxfX2Vn YyAqZWdjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGlieGxfX2FvX2RldmljZSAqYW9kZXYpOwogCitfaGlkZGVuIGludCBsaWJ4bF9fZGV2aWNl X2Zyb21fdXNiY3RybChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCAqdXNiY3RybCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fZGV2aWNlICpkZXZpY2UpOworCitfaGlk ZGVuIHZvaWQgbGlieGxfX2luaXRpYXRlX2RldmljZV91c2JjdHJsX3JlbW92ZShsaWJ4bF9fZWdj ICplZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsaWJ4bF9fYW9fZGV2aWNlICphb2Rldik7CisKIC8qCiAgKiBsaWJ4bF9fZ2V0X2hvdHBsdWdf c2NyaXB0X2luZm8gcmV0dXJucyB0aGUgYXJncyBhbmQgZW52IHRoYXQgc2hvdWxkCiAgKiBiZSBw YXNzZWQgdG8gdGhlIGhvdHBsdWcgc2NyaXB0IGZvciB0aGUgcmVxdWVzdGVkIGRldmljZS4KQEAg LTQwMTQsNiArNDAyOSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBsaWJ4bF9fdXBkYXRlX2NvbmZp Z192dHBtKGxpYnhsX19nYyAqZ2MsCiAjZGVmaW5lIENPTVBBUkVfUENJKGEsIGIpICgoYSktPmZ1 bmMgPT0gKGIpLT5mdW5jICYmICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhKS0+ YnVzID09IChiKS0+YnVzICYmICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGEp LT5kZXYgPT0gKGIpLT5kZXYpCisjZGVmaW5lIENPTVBBUkVfVVNCKGEsIGIpICgoYSktPmN0cmwg PT0gKGIpLT5jdHJsICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChhKS0+cG9ydCA9 PSAoYiktPnBvcnQpCisjZGVmaW5lIENPTVBBUkVfVVNCQ1RSTChhLCBiKSAoKGEpLT5kZXZpZCA9 PSAoYiktPmRldmlkKQogCiAvKiBERVZJQ0VfQURECiAgKgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGli eGwvbGlieGxfb3NkZXBzLmggYi90b29scy9saWJ4bC9saWJ4bF9vc2RlcHMuaAppbmRleCBkOTY2 MWM5Li44MDJjNzYyIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF9vc2RlcHMuaAorKysg Yi90b29scy9saWJ4bC9saWJ4bF9vc2RlcHMuaApAQCAtMjQsNiArMjQsOCBAQAogI2RlZmluZSBf R05VX1NPVVJDRQogCiAjaWYgZGVmaW5lZChfX05ldEJTRF9fKQorI2RlZmluZSBTWVNGU19VU0Jf REVWICAgICAgICAgICIvc3lzL2J1cy91c2IvZGV2aWNlcyIKKyNkZWZpbmUgU1lTRlNfVVNCQkFD S19EUklWRVIgICAiL2tlcm4veGVuL3VzYiIKICNkZWZpbmUgU1lTRlNfUENJX0RFViAgICAgICAg ICAiL3N5cy9idXMvcGNpL2RldmljZXMiCiAjZGVmaW5lIFNZU0ZTX1BDSUJBQ0tfRFJJVkVSICAg Ii9rZXJuL3hlbi9wY2kiCiAjZGVmaW5lIE5FVEJBQ0tfTklDX05BTUUgICAgICAgInh2aWYldWkl ZCIKQEAgLTMxLDYgKzMzLDggQEAKICNlbGlmIGRlZmluZWQoX19PcGVuQlNEX18pCiAjaW5jbHVk ZSA8dXRpbC5oPgogI2VsaWYgZGVmaW5lZChfX2xpbnV4X18pCisjZGVmaW5lIFNZU0ZTX1VTQl9E RVYgICAgICAgICAgIi9zeXMvYnVzL3VzYi9kZXZpY2VzIgorI2RlZmluZSBTWVNGU19VU0JCQUNL X0RSSVZFUiAgICIvc3lzL2J1cy91c2IvZHJpdmVycy91c2JiYWNrIgogI2RlZmluZSBTWVNGU19Q Q0lfREVWICAgICAgICAgICIvc3lzL2J1cy9wY2kvZGV2aWNlcyIKICNkZWZpbmUgU1lTRlNfUENJ QkFDS19EUklWRVIgICAiL3N5cy9idXMvcGNpL2RyaXZlcnMvcGNpYmFjayIKICNkZWZpbmUgTkVU QkFDS19OSUNfTkFNRSAgICAgICAidmlmJXUuJWQiCkBAIC0zOCw2ICs0Miw4IEBACiAjZWxpZiBk ZWZpbmVkKF9fc3VuX18pCiAjaW5jbHVkZSA8c3Ryb3B0cy5oPgogI2VsaWYgZGVmaW5lZChfX0Zy ZWVCU0RfXykKKyNkZWZpbmUgU1lTRlNfVVNCX0RFViAgICAgICAgICAiL2Rldi9udWxsIgorI2Rl ZmluZSBTWVNGU19VU0JCQUNLX0RSSVZFUiAgICIvZGV2L251bGwiCiAjZGVmaW5lIFNZU0ZTX1BD SV9ERVYgICAgICAgICAgIi9kZXYvbnVsbCIKICNkZWZpbmUgU1lTRlNfUENJQkFDS19EUklWRVIg ICAiL2Rldi9udWxsIgogI2RlZmluZSBORVRCQUNLX05JQ19OQU1FICAgICAgICJ4bmIldS4lZCIK QEAgLTQ1LDYgKzUxLDEzIEBACiAjaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgogI2VuZGlmCiAKKyNp Zm5kZWYgU1lTRlNfVVNCQkFDS19EUklWRVIKKyNlcnJvciBkZWZpbmUgU1lTRlNfVVNCQkFDS19E UklWRVIgZm9yIHlvdXIgcGxhdGZvcm0KKyNlbmRpZgorI2lmbmRlZiBTWVNGU19VU0JfREVWCisj ZXJyb3IgZGVmaW5lIFNZU0ZTX1VTQl9ERVYgZm9yIHlvdXIgcGxhdGZvcm0KKyNlbmRpZgorCiAj aWZuZGVmIFNZU0ZTX1BDSUJBQ0tfRFJJVkVSCiAjZXJyb3IgZGVmaW5lIFNZU0ZTX1BDSUJBQ0tf RFJJVkVSIGZvciB5b3VyIHBsYXRmb3JtCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhs L2xpYnhsX3B2dXNiLmMgYi90b29scy9saWJ4bC9saWJ4bF9wdnVzYi5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmOTI2MjgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9s aWJ4bC9saWJ4bF9wdnVzYi5jCkBAIC0wLDAgKzEsMTYyMCBAQAorLyoKKyAqIENvcHlyaWdodCAo QykgMjAxNSBTVVNFIExJTlVYIFByb2R1Y3RzIEdtYkgsIE51ZXJuYmVyZywgR2VybWFueS4KKyAq IEF1dGhvciBDaHVueWFuIExpdSA8Y3lsaXVAc3VzZS5jb20+CisgKgorICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK KyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg dmVyc2lvbiAyLjEgb25seS4gd2l0aCB0aGUgc3BlY2lhbAorICogZXhjZXB0aW9uIG9uIGxpbmtp bmcgZGVzY3JpYmVkIGluIGZpbGUgTElDRU5TRS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKyAqLworCisjaW5jbHVkZSAibGlieGxfb3NkZXBzLmgiIC8qIG11c3QgY29tZSBiZWZv cmUgYW55IG90aGVyIGhlYWRlcnMgKi8KKworI2luY2x1ZGUgImxpYnhsX2ludGVybmFsLmgiCisj aW5jbHVkZSA8aW50dHlwZXMuaD4KKworI2RlZmluZSBVU0JCQUNLX0lORk9fUEFUSCAiL2xpYnhs L3VzYmJhY2siCisKKyNkZWZpbmUgVVNCSFVCX0NMQVNTX0NPREUgOQorCitzdGF0aWMgaW50IGxp YnhsX19kZXZpY2VfdXNiY3RybF9zZXRkZWZhdWx0KGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRv bWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9k ZXZpY2VfdXNiY3RybCAqdXNiY3RybCkKK3sKKyAgICBpbnQgcmM7CisgICAgbGlieGxfZG9tYWlu X3R5cGUgZG9tdHlwZSA9IGxpYnhsX19kb21haW5fdHlwZShnYywgZG9taWQpOworCisgICAgaWYg KCF1c2JjdHJsLT52ZXJzaW9uKQorICAgICAgICB1c2JjdHJsLT52ZXJzaW9uID0gMjsKKworICAg IGlmICghdXNiY3RybC0+cG9ydHMpCisgICAgICAgIHVzYmN0cmwtPnBvcnRzID0gODsKKworICAg IGlmICh1c2JjdHJsLT50eXBlID09IExJQlhMX1VTQkNUUkxfVFlQRV9BVVRPKSB7CisgICAgICAg IGlmIChkb210eXBlID09IExJQlhMX0RPTUFJTl9UWVBFX1BWKSB7CisgICAgICAgICAgICB1c2Jj dHJsLT50eXBlID0gTElCWExfVVNCQ1RSTF9UWVBFX1BWOworICAgICAgICB9IGVsc2UgaWYgKGRv bXR5cGUgPT0gTElCWExfRE9NQUlOX1RZUEVfSFZNKSB7CisgICAgICAgICAgICAvKiBGSVhNRTog U2VlIGlmIHdlIGNhbiBkZXRlY3QgUFYgZnJvbnRlbmQgKi8KKyAgICAgICAgICAgIHVzYmN0cmwt PnR5cGUgPSBMSUJYTF9VU0JDVFJMX1RZUEVfREVWSUNFTU9ERUw7CisgICAgICAgIH0KKyAgICB9 CisKKyAgICByYyA9IGxpYnhsX19yZXNvbHZlX2RvbWlkKGdjLCB1c2JjdHJsLT5iYWNrZW5kX2Rv bW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdXNiY3RybC0+YmFja2VuZF9k b21pZCk7CisgICAgcmV0dXJuIHJjOworfQorCitpbnQgbGlieGxfX2RldmljZV9mcm9tX3VzYmN0 cmwobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmN0cmwgKnVzYmN0cmwsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGlieGxfX2RldmljZSAqZGV2aWNlKQoreworICAgIGRldmljZS0+YmFj a2VuZF9kZXZpZCAgID0gdXNiY3RybC0+ZGV2aWQ7CisgICAgZGV2aWNlLT5iYWNrZW5kX2RvbWlk ICAgPSB1c2JjdHJsLT5iYWNrZW5kX2RvbWlkOworICAgIGRldmljZS0+YmFja2VuZF9raW5kICAg ID0gTElCWExfX0RFVklDRV9LSU5EX1ZVU0I7CisgICAgZGV2aWNlLT5kZXZpZCAgICAgICAgICAg PSB1c2JjdHJsLT5kZXZpZDsKKyAgICBkZXZpY2UtPmRvbWlkICAgICAgICAgICA9IGRvbWlkOwor ICAgIGRldmljZS0+a2luZCAgICAgICAgICAgID0gTElCWExfX0RFVklDRV9LSU5EX1ZVU0I7CisK KyAgICByZXR1cm4gMDsKK30KKworLyogQWRkIHVzYmN0cmwgaW5mb3JtYXRpb24gdG8geGVuc3Rv cmUuCisgKgorICogQWRkaW5nIGEgdXNiIGNvbnRyb2xsZXIgd2lsbCBhZGQgYSBuZXcgJ3Z1c2In IGRldmljZSBpbiB4ZW5zdG9yZSwgYW5kCisgKiBhZGQgY29ycmVzcG9uZGluZyBmcm9udGVuZCwg YmFja2VuZCBpbmZvcm1hdGlvbiB0byBpdC4gQWNjb3JkaW5nIHRvCisgKiAidXBkYXRlX2pzb24i LCBkZWNpZGUgd2V0aGVyIHRvIHVwZGF0ZSBqc29uIGNvbmZpZyBmaWxlLgorICovCitzdGF0aWMg aW50IGxpYnhsX19kZXZpY2VfdXNiY3RybF9hZGRfeGVuc3RvcmUobGlieGxfX2djICpnYywgdWlu dDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGlieGxfZGV2aWNlX3VzYmN0cmwgKnVzYmN0cmwsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1cGRhdGVfanNvbikKK3sKKyAgICBsaWJ4bF9f ZGV2aWNlICpkZXZpY2U7CisgICAgZmxleGFycmF5X3QgKmZyb250OworICAgIGZsZXhhcnJheV90 ICpiYWNrOworICAgIHhzX3RyYW5zYWN0aW9uX3QgdCA9IFhCVF9OVUxMOworICAgIGludCBpLCBy YzsKKyAgICBsaWJ4bF9kb21haW5fY29uZmlnIGRfY29uZmlnOworICAgIGxpYnhsX2RldmljZV91 c2JjdHJsIHVzYmN0cmxfc2F2ZWQ7CisgICAgbGlieGxfX2RvbWFpbl91c2VyZGF0YV9sb2NrICps b2NrID0gTlVMTDsKKworICAgIGxpYnhsX2RvbWFpbl9jb25maWdfaW5pdCgmZF9jb25maWcpOwor ICAgIGxpYnhsX2RldmljZV91c2JjdHJsX2luaXQoJnVzYmN0cmxfc2F2ZWQpOworICAgIGxpYnhs X2RldmljZV91c2JjdHJsX2NvcHkoQ1RYLCAmdXNiY3RybF9zYXZlZCwgdXNiY3RybCk7CisKKyAg ICBHQ05FVyhkZXZpY2UpOworICAgIHJjID0gbGlieGxfX2RldmljZV9mcm9tX3VzYmN0cmwoZ2Ms IGRvbWlkLCB1c2JjdHJsLCBkZXZpY2UpOworICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICBm cm9udCA9IGZsZXhhcnJheV9tYWtlKGdjLCA0LCAxKTsKKyAgICBiYWNrID0gZmxleGFycmF5X21h a2UoZ2MsIDEyLCAxKTsKKworICAgIGZsZXhhcnJheV9hcHBlbmRfcGFpcihiYWNrLCAiZnJvbnRl bmQtaWQiLCBHQ1NQUklOVEYoIiVkIiwgZG9taWQpKTsKKyAgICBmbGV4YXJyYXlfYXBwZW5kX3Bh aXIoYmFjaywgIm9ubGluZSIsICIxIik7CisgICAgZmxleGFycmF5X2FwcGVuZF9wYWlyKGJhY2ss ICJzdGF0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJWQiLCBYZW5i dXNTdGF0ZUluaXRpYWxpc2luZykpOworICAgIGZsZXhhcnJheV9hcHBlbmRfcGFpcihiYWNrLCAi dHlwZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopbGlieGxfdXNiY3RybF90 eXBlX3RvX3N0cmluZyh1c2JjdHJsLT50eXBlKSk7CisgICAgZmxleGFycmF5X2FwcGVuZF9wYWly KGJhY2ssICJ1c2ItdmVyIiwgR0NTUFJJTlRGKCIlZCIsIHVzYmN0cmwtPnZlcnNpb24pKTsKKyAg ICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIoYmFjaywgIm51bS1wb3J0cyIsIEdDU1BSSU5URigiJWQi LCB1c2JjdHJsLT5wb3J0cykpOworICAgIGZsZXhhcnJheV9hcHBlbmRfcGFpcihiYWNrLCAicG9y dCIsICIiKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgdXNiY3RybC0+cG9ydHM7IGkrKykKKyAgICAg ICAgZmxleGFycmF5X2FwcGVuZF9wYWlyKGJhY2ssIEdDU1BSSU5URigicG9ydC8lZCIsIGkgKyAx KSwgIiIpOworCisgICAgZmxleGFycmF5X2FwcGVuZF9wYWlyKGZyb250LCAiYmFja2VuZC1pZCIs CisgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJWQiLCB1c2JjdHJsLT5iYWNr ZW5kX2RvbWlkKSk7CisgICAgZmxleGFycmF5X2FwcGVuZF9wYWlyKGZyb250LCAic3RhdGUiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVkIiwgWGVuYnVzU3RhdGVJbml0 aWFsaXNpbmcpKTsKKworICAgIGlmICh1cGRhdGVfanNvbikgeworICAgICAgICBsb2NrID0gbGli eGxfX2xvY2tfZG9tYWluX3VzZXJkYXRhKGdjLCBkb21pZCk7CisgICAgICAgIGlmICghbG9jaykg eworICAgICAgICAgICAgcmMgPSBFUlJPUl9MT0NLX0ZBSUw7CisgICAgICAgICAgICBnb3RvIG91 dDsKKyAgICAgICAgfQorCisgICAgICAgIHJjID0gbGlieGxfX2dldF9kb21haW5fY29uZmlndXJh dGlvbihnYywgZG9taWQsICZkX2NvbmZpZyk7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisK KyAgICAgICAgREVWSUNFX0FERCh1c2JjdHJsLCB1c2JjdHJscywgZG9taWQsICZ1c2JjdHJsX3Nh dmVkLAorICAgICAgICAgICAgICAgICAgIENPTVBBUkVfVVNCQ1RSTCwgJmRfY29uZmlnKTsKKyAg ICB9CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHJjID0gbGlieGxfX3hzX3RyYW5zYWN0aW9u X3N0YXJ0KGdjLCAmdCk7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICAgICAgcmMg PSBsaWJ4bF9fZGV2aWNlX2V4aXN0cyhnYywgdCwgZGV2aWNlKTsKKyAgICAgICAgaWYgKHJjIDwg MCkgZ290byBvdXQ7CisgICAgICAgIGlmIChyYyA9PSAxKSB7CisgICAgICAgICAgICAvKiBhbHJl YWR5IGV4aXN0cyBpbiB4ZW5zdG9yZSAqLworICAgICAgICAgICAgTE9HKEVSUk9SLCAiZGV2aWNl IGFscmVhZHkgZXhpc3RzIGluIHhlbnN0b3JlIik7CisgICAgICAgICAgICByYyA9IEVSUk9SX0RF VklDRV9FWElTVFM7CisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAg IGlmICh1cGRhdGVfanNvbikgeworICAgICAgICAgICAgcmMgPSBsaWJ4bF9fc2V0X2RvbWFpbl9j b25maWd1cmF0aW9uKGdjLCBkb21pZCwgJmRfY29uZmlnKTsKKyAgICAgICAgICAgIGlmIChyYykg Z290byBvdXQ7CisgICAgICAgIH0KKworICAgICAgICBsaWJ4bF9fZGV2aWNlX2dlbmVyaWNfYWRk KGdjLCB0LCBkZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX194c19rdnNf b2ZfZmxleGFycmF5KGdjLCBiYWNrLCBiYWNrLT5jb3VudCksCisgICAgICAgICAgICAgICAgICAg ICAgICAgIGxpYnhsX194c19rdnNfb2ZfZmxleGFycmF5KGdjLCBmcm9udCwgZnJvbnQtPmNvdW50 KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICAgICAgcmMgPSBsaWJ4 bF9feHNfdHJhbnNhY3Rpb25fY29tbWl0KGdjLCAmdCk7CisgICAgICAgIGlmICghcmMpIGJyZWFr OworICAgICAgICBpZiAocmMgPCAwKSBnb3RvIG91dDsKKyAgICB9CisKK291dDoKKyAgICBsaWJ4 bF9feHNfdHJhbnNhY3Rpb25fYWJvcnQoZ2MsICZ0KTsKKyAgICBpZiAobG9jaykgbGlieGxfX3Vu bG9ja19kb21haW5fdXNlcmRhdGEobG9jayk7CisgICAgbGlieGxfZGV2aWNlX3VzYmN0cmxfZGlz cG9zZSgmdXNiY3RybF9zYXZlZCk7CisgICAgbGlieGxfZG9tYWluX2NvbmZpZ19kaXNwb3NlKCZk X2NvbmZpZyk7CisgICAgcmV0dXJuIHJjOworfQorCisvKiBBTyBvcGVyYXRpb24gdG8gYWRkIGEg dXNiIGNvbnRyb2xsZXIuCisgKgorICogR2VuZXJhbGx5LCBpdCBkb2VzOgorICogMSkgZmlsbCBp biBuZWNlc3NhcnkgdXNiIGNvbnRyb2xlciBpbmZvcm1hdGlvbiB3aXRoIGRlZmF1bHQgdmFsdWUK KyAqIDIpIHdyaXRlIHVzYiBjb250cm9sbGVyIGZyb250ZW5kL2JhY2tlbmQgaW5mbyB0byB4ZW5z dG9yZSwgdXBkYXRlIGpzb24KKyAqICAgIGNvbmZpZyBmaWxlIGlmIG5lY2Vzc2FyeS4KKyAqIDMp IHdhaXQgZm9yIGRldmljZSBjb25uZWN0aW9uLiBQVlVTQiBmcm9udGVuZCBhbmQgYmFja2VuZCBk cml2ZXIgd2lsbAorICogICAgcHJvYmUgeGVuc3RvcmUgcGF0aHMgYW5kIGJ1aWxkIGNvbm5lY3Rp b24gYmV0d2VlbiBmcm9udGVuZCBhbmQgYmFja2VuZC4KKyAqCisgKiBCZWZvcmUgY2FsbGluZyB0 aGlzIGZ1bmN0aW9uLCBhb2RldiBzaG91bGQgYmUgcHJvcGVybHkgZmlsbGVkOgorICogYW9kZXYt PmFvLCBhb2Rldi0+Y2FsbGJhY2ssIGFvZGV2LT51cGRhdGVfanNvbiwgLi4uCisgKi8KK3ZvaWQg bGlieGxfX2RldmljZV91c2JjdHJsX2FkZChsaWJ4bF9fZWdjICplZ2MsIHVpbnQzMl90IGRvbWlk LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2JjdHJsICp1 c2JjdHJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19hb19kZXZpY2Ug KmFvZGV2KQoreworICAgIFNUQVRFX0FPX0dDKGFvZGV2LT5hbyk7CisgICAgbGlieGxfX2Rldmlj ZSAqZGV2aWNlOworICAgIGludCByYzsKKworICAgIHJjID0gbGlieGxfX2RldmljZV91c2JjdHJs X3NldGRlZmF1bHQoZ2MsIGRvbWlkLCB1c2JjdHJsKTsKKyAgICBpZiAocmMgPCAwKSBnb3RvIG91 dDsKKworICAgIGlmICh1c2JjdHJsLT5kZXZpZCA9PSAtMSkgeworICAgICAgICB1c2JjdHJsLT5k ZXZpZCA9IGxpYnhsX19kZXZpY2VfbmV4dGlkKGdjLCBkb21pZCwgInZ1c2IiKTsKKyAgICAgICAg aWYgKHVzYmN0cmwtPmRldmlkIDwgMCkgeworICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOwor ICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodXNiY3Ry bC0+dHlwZSAhPSBMSUJYTF9VU0JDVFJMX1RZUEVfUFYpIHsKKyAgICAgICAgTE9HKEVSUk9SLCAi VW5zdXBwb3J0ZWQgVVNCIGNvbnRyb2xsZXIgdHlwZSIpOworICAgICAgICByYyA9IEVSUk9SX0ZB SUw7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIHJjID0gbGlieGxfX2RldmljZV91 c2JjdHJsX2FkZF94ZW5zdG9yZShnYywgZG9taWQsIHVzYmN0cmwsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFvZGV2LT51cGRhdGVfanNvbik7CisgICAgaWYg KHJjKSBnb3RvIG91dDsKKworICAgIEdDTkVXKGRldmljZSk7CisgICAgcmMgPSBsaWJ4bF9fZGV2 aWNlX2Zyb21fdXNiY3RybChnYywgZG9taWQsIHVzYmN0cmwsIGRldmljZSk7CisgICAgaWYgKHJj KSBnb3RvIG91dDsKKworICAgIGFvZGV2LT5kZXYgPSBkZXZpY2U7CisgICAgYW9kZXYtPmFjdGlv biA9IExJQlhMX19ERVZJQ0VfQUNUSU9OX0FERDsKKyAgICBsaWJ4bF9fd2FpdF9kZXZpY2VfY29u bmVjdGlvbihlZ2MsIGFvZGV2KTsKKyAgICByZXR1cm47CisKK291dDoKKyAgICBhb2Rldi0+cmMg PSByYzsKKyAgICBhb2Rldi0+Y2FsbGJhY2soZWdjLCBhb2Rldik7CisgICAgcmV0dXJuOworfQor CitzdGF0aWMgaW50IGxpYnhsX19kZXZpY2VfdXNiZGV2X2xpc3RfZm9yX3VzYmN0cmwobGlieGxf X2djICpnYywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWQgdXNiY3RybCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiZGV2ICoqdXNi ZGV2cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgKm51bSk7CisKK3N0YXRpYyBpbnQgbGlieGxfX2RldmljZV91c2JkZXZfcmVtb3ZlKGxpYnhs X19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRldiAqdXNiZGV2KTsKKworLyogQU8gZnVuY3Rpb24g dG8gcmVtb3ZlIGEgdXNiIGNvbnRyb2xsZXIuCisgKgorICogR2VuZXJhbGx5LCBpdCBkb2VzOgor ICogMSkgY2hlY2sgaWYgdGhlIHVzYiBjb250cm9sbGVyIGV4aXN0cyBvciBub3QKKyAqIDIpIHJl bW92ZSBhbGwgdXNiIGRldmljZXMgdW5kZXIgY29udHJvbGxlcgorICogMykgcmVtb3ZlIHVzYiBj b250cm9sbGVyIGluZm9ybWF0aW9uIGZyb20geGVuc3RvcmUKKyAqCisgKiBCZWZvcmUgY2FsbGlu ZyB0aGlzIGZ1bmN0aW9uLCBhb2RldiBzaG91bGQgYmUgcHJvcGVybHkgZmlsbGVkOgorICogYW9k ZXYtPmFvLCBhb2Rldi0+ZGV2LCBhb2Rldi0+Y2FsbGJhY2ssIC4uLgorICovCit2b2lkIGxpYnhs X19pbml0aWF0ZV9kZXZpY2VfdXNiY3RybF9yZW1vdmUobGlieGxfX2VnYyAqZWdjLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19hb19kZXZpY2UgKmFv ZGV2KQoreworICAgIFNUQVRFX0FPX0dDKGFvZGV2LT5hbyk7CisgICAgbGlieGxfZGV2aWNlX3Vz YmRldiAqdXNiZGV2cyA9IE5VTEw7CisgICAgaW50IG51bV91c2JkZXYgPSAwOworICAgIGludCBp LCByYzsKKyAgICB1aW50MzJfdCBkb21pZCA9IGFvLT5kb21pZDsKKyAgICBpbnQgdXNiY3RybF9k ZXZpZCA9IGFvZGV2LT5kZXYtPmRldmlkOworICAgIGxpYnhsX2RldmljZV91c2JjdHJsIHVzYmN0 cmw7CisgICAgbGlieGxfdXNiY3RybGluZm8gdXNiY3RybGluZm87CisKKyAgICBsaWJ4bF9kZXZp Y2VfdXNiY3RybF9pbml0KCZ1c2JjdHJsKTsKKyAgICBsaWJ4bF91c2JjdHJsaW5mb19pbml0KCZ1 c2JjdHJsaW5mbyk7CisgICAgdXNiY3RybC5kZXZpZCA9IHVzYmN0cmxfZGV2aWQ7CisKKyAgICBy YyA9IGxpYnhsX2RldmljZV91c2JjdHJsX2dldGluZm8oQ1RYLCBkb21pZCwgJnVzYmN0cmwsICZ1 c2JjdHJsaW5mbyk7CisgICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAgIGlmICh1c2JjdHJsaW5m by50eXBlICE9IExJQlhMX1VTQkNUUkxfVFlQRV9QVikgeworICAgICAgICBMT0coRVJST1IsICJV bnN1cHBvcnRlZCBVU0IgY29udHJvbGxlciB0eXBlIik7CisgICAgICAgIHJjID0gRVJST1JfRkFJ TDsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgLyogUmVtb3ZlIHVzYiBkZXZpY2Vz IGZpcnN0ICovCisgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX3VzYmRldl9saXN0X2Zvcl91c2JjdHJs KGdjLCBkb21pZCwgdXNiY3RybF9kZXZpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJnVzYmRldnMsICZudW1fdXNiZGV2KTsKKyAgICBpZiAocmMpIGdv dG8gb3V0OworCisgICAgZm9yIChpID0gMDsgaSA8IG51bV91c2JkZXY7IGkrKykgeworICAgICAg ICByYyA9IGxpYnhsX19kZXZpY2VfdXNiZGV2X3JlbW92ZShnYywgZG9taWQsICZ1c2JkZXZzW2ld KTsKKyAgICAgICAgaWYgKHJjKSB7CisgICAgICAgICAgICBMT0coRVJST1IsICJsaWJ4bF9fZGV2 aWNlX3VzYmRldl9yZW1vdmUgZmFpbGVkOiBjb250cm9sbGVyICVkLCAiCisgICAgICAgICAgICAg ICAgInBvcnQgJWQiLCB1c2JkZXZzW2ldLmN0cmwsIHVzYmRldnNbaV0ucG9ydCk7CisgICAgICAg ICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGxpYnhsX2RldmljZV91c2Jj dHJsX2Rpc3Bvc2UoJnVzYmN0cmwpOworICAgIGxpYnhsX3VzYmN0cmxpbmZvX2Rpc3Bvc2UoJnVz YmN0cmxpbmZvKTsKKworICAgIC8qIFJlbW92ZSB1c2JjdHJsICovCisgICAgbGlieGxfX2luaXRp YXRlX2RldmljZV9nZW5lcmljX3JlbW92ZShlZ2MsIGFvZGV2KTsKKyAgICByZXR1cm47CisKK291 dDoKKyAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybF9kaXNwb3NlKCZ1c2JjdHJsKTsKKyAgICBsaWJ4 bF91c2JjdHJsaW5mb19kaXNwb3NlKCZ1c2JjdHJsaW5mbyk7CisgICAgYW9kZXYtPnJjID0gcmM7 CisgICAgYW9kZXYtPmNhbGxiYWNrKGVnYywgYW9kZXYpOworICAgIHJldHVybjsKK30KKworc3Rh dGljIGNvbnN0IGNoYXIgKnZ1c2JfYmVfZnJvbV94c19mZShsaWJ4bF9fZ2MgKmdjLCBjb25zdCBj aGFyICpmZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50 MzJfdCB0Z3RfZG9taWQpCit7CisgICAgY29uc3QgY2hhciAqYmVfcGF0aDsKKyAgICBpbnQgcjsK KyAgICB1aW50MzJfdCBiZV9kb21pZCwgZmVfZG9taWQ7CisKKyAgICByID0gbGlieGxfX3hzX3Jl YWRfY2hlY2tlZChnYywgWEJUX05VTEwsIEdDU1BSSU5URigiJXMvYmFja2VuZCIsIGZlX3BhdGgp LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiZV9wYXRoKTsKKyAgICBpZiAociB8 fCAhYmVfcGF0aCkgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBDaGVjayB0byBzZWUgdGhhdCBpdCBo YXMgdGhlIHByb3BlciBmb3JtLCBhbmQgdGhhdCBmZV9kb21pZCA9PQorICAgICAqIHRhcmdldCBk b21pZCAqLworICAgIHIgPSBzc2NhbmYoYmVfcGF0aCwgIi9sb2NhbC9kb21haW4vJWQvYmFja2Vu ZC92dXNiLyVkIiwKKyAgICAgICAgICAgICAgICZiZV9kb21pZCwgJmZlX2RvbWlkKTsKKworICAg IGlmIChyICE9IDIgfHwgZmVfZG9taWQgIT0gdGd0X2RvbWlkKSB7CisgICAgICAgIExPRyhFUlJP UiwgIk1hbGZvcm1lZCBiYWNrZW5kLCByZWZ1c2luZyB0byB1c2UiKTsKKyAgICAgICAgcmV0dXJu IE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIGJlX3BhdGg7Cit9CisKK2xpYnhsX2RldmljZV91 c2JjdHJsICoKK2xpYnhsX2RldmljZV91c2JjdHJsX2xpc3QobGlieGxfY3R4ICpjdHgsIHVpbnQz Ml90IGRvbWlkLCBpbnQgKm51bSkKK3sKKyAgICBHQ19JTklUKGN0eCk7CisgICAgbGlieGxfZGV2 aWNlX3VzYmN0cmwgKnVzYmN0cmxzID0gTlVMTDsKKyAgICBjaGFyICpwYXRoID0gTlVMTDsKKyAg ICBjaGFyICoqZW50cnkgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCBuZW50cmllcyA9IDA7CisK KyAgICAqbnVtID0gMDsKKworICAgIHBhdGggPSBHQ1NQUklOVEYoIiVzL2RldmljZS92dXNiIiwK KyAgICAgICAgICAgICAgICAgICAgIGxpYnhsX194c19nZXRfZG9tcGF0aChnYywgZG9taWQpKTsK KyAgICBlbnRyeSA9IGxpYnhsX194c19kaXJlY3RvcnkoZ2MsIFhCVF9OVUxMLCBwYXRoLCAmbmVu dHJpZXMpOworCisgICAgaWYgKGVudHJ5ICYmIG5lbnRyaWVzKSB7CisgICAgICAgIHVzYmN0cmxz ID0gbGlieGxfX3phbGxvYyhOT0dDLCBzaXplb2YoKnVzYmN0cmxzKSAqIG5lbnRyaWVzKTsKKyAg ICAgICAgbGlieGxfZGV2aWNlX3VzYmN0cmwgKnVzYmN0cmw7CisgICAgICAgIGxpYnhsX2Rldmlj ZV91c2JjdHJsICplbmQgPSB1c2JjdHJscyArIG5lbnRyaWVzOworICAgICAgICBmb3IgKHVzYmN0 cmwgPSB1c2JjdHJsczsKKyAgICAgICAgICAgICB1c2JjdHJsIDwgZW5kOworICAgICAgICAgICAg IHVzYmN0cmwrKywgZW50cnkrKywgKCpudW0pKyspIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIg KnRtcCwgKmJlX3BhdGgsICpmZV9wYXRoOworICAgICAgICAgICAgaW50IHJldDsKKworICAgICAg ICAgICAgbGlieGxfZGV2aWNlX3VzYmN0cmxfaW5pdCh1c2JjdHJsKTsKKyAgICAgICAgICAgIHVz YmN0cmwtPmRldmlkID0gYXRvaSgqZW50cnkpOworCisjZGVmaW5lIFJFQURfU1VCUEFUSChwYXRo LCBzdWJwYXRoKSAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg IHJldCA9IGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2MsIFhCVF9OVUxMLCAgICAgICAgICAgICAg ICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRG KCIlcy8iIHN1YnBhdGgsIHBhdGgpLCAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJnRtcCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlm IChyZXQpIGdvdG8gb3V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgICAgIChjaGFyICopdG1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSkKKworI2RlZmluZSBSRUFEX1NVQlBBVEhf SU5UKHBhdGgsIHN1YnBhdGgpICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg ICAgICByZXQgPSBsaWJ4bF9feHNfcmVhZF9jaGVja2VkKGdjLCBYQlRfTlVMTCwgICAgICAgICAg ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BS SU5URigiJXMvIiBzdWJwYXRoLCBwYXRoKSwgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZ0bXApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg ICBpZiAocmV0KSBnb3RvIG91dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgICAgICB0bXAgPyBhdG9pKHRtcCkgOiAtMTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0pCisKKyAgICAgICAgICAgIGZlX3Bh dGggPSBHQ1NQUklOVEYoIiVzLyVzIiwgcGF0aCwgKmVudHJ5KTsKKyAgICAgICAgICAgIGJlX3Bh dGggPSB2dXNiX2JlX2Zyb21feHNfZmUoZ2MsIGZlX3BhdGgsIGRvbWlkKTsKKyAgICAgICAgICAg IGlmICghYmVfcGF0aCkgZ290byBvdXQ7CisgICAgICAgICAgICB1c2JjdHJsLT5iYWNrZW5kX2Rv bWlkID0gUkVBRF9TVUJQQVRIX0lOVChmZV9wYXRoLCAiYmFja2VuZC1pZCIpOworICAgICAgICAg ICAgdXNiY3RybC0+dmVyc2lvbiA9IFJFQURfU1VCUEFUSF9JTlQoYmVfcGF0aCwgInVzYi12ZXIi KTsKKyAgICAgICAgICAgIHVzYmN0cmwtPnBvcnRzID0gUkVBRF9TVUJQQVRIX0lOVChiZV9wYXRo LCAibnVtLXBvcnRzIik7CisgICAgICAgICAgICBsaWJ4bF91c2JjdHJsX3R5cGVfZnJvbV9zdHJp bmcoUkVBRF9TVUJQQVRIKGJlX3BhdGgsICJ0eXBlIiksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJnVzYmN0cmwtPnR5cGUpOworCisjdW5kZWYgUkVBRF9TVUJQ QVRICisjdW5kZWYgUkVBRF9TVUJQQVRIX0lOVAorICAgICAgIH0KKyAgICB9CisKKyAgICBHQ19G UkVFOworICAgIHJldHVybiB1c2JjdHJsczsKKworb3V0OgorICAgIExPRyhFUlJPUiwgIlVuYWJs ZSB0byBsaXN0IFVTQiBDb250cm9sbGVycyIpOworICAgIGxpYnhsX2RldmljZV91c2JjdHJsX2xp c3RfZnJlZSh1c2JjdHJscywgKm51bSk7CisgICAgR0NfRlJFRTsKKyAgICAqbnVtID0gMDsKKyAg ICByZXR1cm4gTlVMTDsKK30KKworaW50IGxpYnhsX2RldmljZV91c2JjdHJsX2dldGluZm8obGli eGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbGlieGxfZGV2aWNlX3VzYmN0cmwgKnVzYmN0cmwsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsaWJ4bF91c2JjdHJsaW5mbyAqdXNiY3RybGluZm8pCit7CisgICAgR0Nf SU5JVChjdHgpOworICAgIGNvbnN0IGNoYXIgKmRvbXBhdGgsICpmZV9wYXRoLCAqYmVfcGF0aCwg KnRtcDsKKyAgICBpbnQgcmM7CisKKyAgICB1c2JjdHJsaW5mby0+ZGV2aWQgPSB1c2JjdHJsLT5k ZXZpZDsKKworI2RlZmluZSBSRUFEX1NVQlBBVEgocGF0aCwgc3VicGF0aCkgKHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByYyA9IGxpYnhsX194c19yZWFkX2No ZWNrZWQoZ2MsIFhCVF9OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy8iIHN1YnBhdGgsIHBhdGgpLCAg ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAocmMpIGdvdG8gb3V0OyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoY2hhciAq KXRtcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgIH0pCisKKyNkZWZpbmUgUkVBRF9TVUJQQVRIX0lOVChwYXRoLCBzdWJwYXRoKSAoeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfcmVh ZF9jaGVja2VkKGdjLCBYQlRfTlVMTCwgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJXMvIiBzdWJwYXRoLCBwYXRo KSwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXApOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdG1w ID8gYXRvaSh0bXApIDogLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICB9KQorCisgICAgZG9tcGF0aCA9IGxpYnhsX194c19nZXRfZG9tcGF0aChnYywg ZG9taWQpOworICAgIGZlX3BhdGggPSBHQ1NQUklOVEYoIiVzL2RldmljZS92dXNiLyVkIiwgZG9t cGF0aCwgdXNiY3RybC0+ZGV2aWQpOworICAgIGJlX3BhdGggPSBSRUFEX1NVQlBBVEgoZmVfcGF0 aCwgImJhY2tlbmQiKTsKKyAgICB1c2JjdHJsaW5mby0+YmFja2VuZCA9IGxpYnhsX19zdHJkdXAo Tk9HQywgYmVfcGF0aCk7CisgICAgdXNiY3RybGluZm8tPmJhY2tlbmRfaWQgPSBSRUFEX1NVQlBB VEhfSU5UKGZlX3BhdGgsICJiYWNrZW5kLWlkIik7CisgICAgdXNiY3RybGluZm8tPnN0YXRlID0g UkVBRF9TVUJQQVRIX0lOVChmZV9wYXRoLCAic3RhdGUiKTsKKyAgICB1c2JjdHJsaW5mby0+ZXZ0 Y2ggPSBSRUFEX1NVQlBBVEhfSU5UKGZlX3BhdGgsICJldmVudC1jaGFubmVsIik7CisgICAgdXNi Y3RybGluZm8tPnJlZl91cmIgPSBSRUFEX1NVQlBBVEhfSU5UKGZlX3BhdGgsICJ1cmItcmluZy1y ZWYiKTsKKyAgICB1c2JjdHJsaW5mby0+cmVmX2Nvbm4gPSBSRUFEX1NVQlBBVEhfSU5UKGZlX3Bh dGgsICJ1cmItcmluZy1yZWYiKTsKKyAgICB0bXAgPSBSRUFEX1NVQlBBVEgoYmVfcGF0aCwgImZy b250ZW5kIik7CisgICAgdXNiY3RybGluZm8tPmZyb250ZW5kID0gbGlieGxfX3N0cmR1cChOT0dD LCB0bXApOworICAgIHVzYmN0cmxpbmZvLT5mcm9udGVuZF9pZCA9IFJFQURfU1VCUEFUSF9JTlQo YmVfcGF0aCwgImZyb250ZW5kLWlkIik7CisgICAgdXNiY3RybGluZm8tPnBvcnRzID0gUkVBRF9T VUJQQVRIX0lOVChiZV9wYXRoLCAibnVtLXBvcnRzIik7CisgICAgdXNiY3RybGluZm8tPnZlcnNp b24gPSBSRUFEX1NVQlBBVEhfSU5UKGJlX3BhdGgsICJ1c2ItdmVyIik7OworICAgIHRtcCA9IFJF QURfU1VCUEFUSChiZV9wYXRoLCAidHlwZSIpOworICAgIGxpYnhsX3VzYmN0cmxfdHlwZV9mcm9t X3N0cmluZyh0bXAsICZ1c2JjdHJsaW5mby0+dHlwZSk7CisKKyN1bmRlZiBSRUFEX1NVQlBBVEgK KyN1bmRlZiBSRUFEX1NVQlBBVEhfSU5UCisKKyAgICByYyA9IDA7CisKK291dDoKKyAgICBHQ19G UkVFOworICAgIHJldHVybiByYzsKK30KKworaW50IGxpYnhsX2RldmlkX3RvX2RldmljZV91c2Jj dHJsKGxpYnhsX2N0eCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp bnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXZp ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3Ry bCAqdXNiY3RybCkKK3sKKyAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCAqdXNiY3RybHM7CisgICAg aW50IG5iID0gMDsKKyAgICBpbnQgaSwgcmM7CisKKyAgICB1c2JjdHJscyA9IGxpYnhsX2Rldmlj ZV91c2JjdHJsX2xpc3QoY3R4LCBkb21pZCwgJm5iKTsKKyAgICBpZiAoIXVzYmN0cmxzKSByZXR1 cm4gRVJST1JfRkFJTDsKKworICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICBmb3IgKGkgPSAwOyBp IDwgbmI7IGkrKykgeworICAgICAgICBpZiAoZGV2aWQgPT0gdXNiY3RybHNbaV0uZGV2aWQpIHsK KyAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2JjdHJsX2NvcHkoY3R4LCB1c2JjdHJsLCAmdXNi Y3RybHNbaV0pOworICAgICAgICAgICAgcmMgPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIH0KKyAgICB9CisKKyAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybF9saXN0X2ZyZWUodXNiY3Ry bHMsIG5iKTsKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkICp6YWxsb2NfZGlyZW50 KGxpYnhsX19nYyAqZ2MsIGNvbnN0IGNoYXIgKmRpcnBhdGgpCit7CisgICAgc2l6ZV90IG5lZWQg PSBvZmZzZXRvZihzdHJ1Y3QgZGlyZW50LCBkX25hbWUpICsKKyAgICAgICAgICAgICAgICAgIHBh dGhjb25mKGRpcnBhdGgsIF9QQ19OQU1FX01BWCkgKyAxOworCisgICAgcmV0dXJuIGxpYnhsX196 YWxsb2MoZ2MsIG5lZWQpOworfQorCitzdGF0aWMgY2hhciAqdXNiZGV2X2J1c2FkZHJfdG9fYnVz aWQobGlieGxfX2djICpnYywgaW50IGJ1cywgaW50IGFkZHIpCit7CisgICAgRElSICpkaXI7Cisg ICAgY2hhciAqYnVzaWQgPSBOVUxMOworICAgIHN0cnVjdCBkaXJlbnQgKmRlX2J1ZjsKKyAgICBz dHJ1Y3QgZGlyZW50ICpkZTsKKworICAgIC8qIGludmFsaWQgaG9zdGJ1cyBvciBob3N0YWRkciAq LworICAgIGlmIChidXMgPCAxIHx8IGFkZHIgPCAxKQorICAgICAgICByZXR1cm4gTlVMTDsKKwor ICAgIGRpciA9IG9wZW5kaXIoU1lTRlNfVVNCX0RFVik7CisgICAgaWYgKCFkaXIpIHsKKyAgICAg ICAgTE9HRShFUlJPUiwgIm9wZW5kaXIgZmFpbGVkOiAnJXMnIiwgU1lTRlNfVVNCX0RFVik7Cisg ICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGRlX2J1ZiA9IHphbGxvY19kaXJlbnQo Z2MsIFNZU0ZTX1VTQl9ERVYpOworCisgICAgZm9yICg7OykgeworICAgICAgICBjaGFyICpmaWxl bmFtZTsKKyAgICAgICAgdm9pZCAqYnVmOworICAgICAgICBpbnQgYnVzbnVtID0gLTE7CisgICAg ICAgIGludCBkZXZudW0gPSAtMTsKKworICAgICAgICBpbnQgciA9IHJlYWRkaXJfcihkaXIsIGRl X2J1ZiwgJmRlKTsKKyAgICAgICAgaWYgKHIpIHsKKyAgICAgICAgICAgIExPR0UoRVJST1IsICJm YWlsZWQgdG8gcmVhZGRpciAlcyIsIFNZU0ZTX1VTQl9ERVYpOworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFkZSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg ICAgIGlmICghc3RyY21wKGRlLT5kX25hbWUsICIuIikgfHwKKyAgICAgICAgICAgICFzdHJjbXAo ZGUtPmRfbmFtZSwgIi4uIikpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBmaWxl bmFtZSA9IEdDU1BSSU5URihTWVNGU19VU0JfREVWICIvJXMvZGV2bnVtIiwgZGUtPmRfbmFtZSk7 CisgICAgICAgIGlmICghbGlieGxfX3JlYWRfc3lzZnNfZmlsZV9jb250ZW50cyhnYywgZmlsZW5h bWUsICZidWYsIE5VTEwpKQorICAgICAgICAgICAgZGV2bnVtID0gYXRvaShidWYpOworCisgICAg ICAgIGZpbGVuYW1lID0gR0NTUFJJTlRGKFNZU0ZTX1VTQl9ERVYgIi8lcy9idXNudW0iLCBkZS0+ ZF9uYW1lKTsKKyAgICAgICAgaWYgKCFsaWJ4bF9fcmVhZF9zeXNmc19maWxlX2NvbnRlbnRzKGdj LCBmaWxlbmFtZSwgJmJ1ZiwgTlVMTCkpCisgICAgICAgICAgICBidXNudW0gPSBhdG9pKGJ1Zik7 CisKKyAgICAgICAgaWYgKGJ1cyA9PSBidXNudW0gJiYgYWRkciA9PSBkZXZudW0pIHsKKyAgICAg ICAgICAgIGJ1c2lkID0gbGlieGxfX3N0cmR1cChnYywgZGUtPmRfbmFtZSk7CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsb3NlZGlyKGRpcik7CisgICAgcmV0 dXJuIGJ1c2lkOworfQorCitzdGF0aWMgaW50IHVzYmRldl9idXNhZGRyX2Zyb21fYnVzaWQobGli eGxfX2djICpnYywgY29uc3QgY2hhciAqYnVzaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdWludDhfdCAqYnVzLCB1aW50OF90ICphZGRyKQoreworICAgIGNoYXIgKmZp bGVuYW1lOworICAgIHZvaWQgKmJ1ZjsKKworICAgIGZpbGVuYW1lID0gR0NTUFJJTlRGKFNZU0ZT X1VTQl9ERVYgIi8lcy9idXNudW0iLCBidXNpZCk7CisgICAgaWYgKCFsaWJ4bF9fcmVhZF9zeXNm c19maWxlX2NvbnRlbnRzKGdjLCBmaWxlbmFtZSwgJmJ1ZiwgTlVMTCkpCisgICAgICAgICpidXMg PSBhdG9pKGJ1Zik7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gRVJST1JfRkFJTDsKKworICAg IGZpbGVuYW1lID0gR0NTUFJJTlRGKFNZU0ZTX1VTQl9ERVYgIi8lcy9kZXZudW0iLCBidXNpZCk7 CisgICAgaWYgKCFsaWJ4bF9fcmVhZF9zeXNmc19maWxlX2NvbnRlbnRzKGdjLCBmaWxlbmFtZSwg JmJ1ZiwgTlVMTCkpCisgICAgICAgICphZGRyID0gYXRvaShidWYpOworICAgIGVsc2UKKyAgICAg ICAgcmV0dXJuIEVSUk9SX0ZBSUw7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBn ZXRfYXNzaWduZWRfZGV2aWNlcyhsaWJ4bF9fZ2MgKmdjLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiZGV2ICoqbGlzdCwgaW50ICpudW0pCit7CisgICAg Y2hhciAqKmRvbWxpc3Q7CisgICAgdW5zaWduZWQgaW50IG5kb20gPSAwOworICAgIGludCBpLCBq LCBrOworICAgIGludCByYzsKKworICAgICpsaXN0ID0gTlVMTDsKKyAgICAqbnVtID0gMDsKKwor ICAgIGRvbWxpc3QgPSBsaWJ4bF9feHNfZGlyZWN0b3J5KGdjLCBYQlRfTlVMTCwgIi9sb2NhbC9k b21haW4iLCAmbmRvbSk7CisgICAgZm9yIChpID0gMDsgaSA8IG5kb207IGkrKykgeworICAgICAg ICBjaGFyICpwYXRoOworICAgICAgICBjaGFyICoqdXNiY3RybHM7CisgICAgICAgIHVuc2lnbmVk IGludCBuYyA9IDA7CisgICAgICAgIHVpbnQzMl90IGRvbWlkID0gYXRvaShkb21saXN0W2ldKTsK KworICAgICAgICBwYXRoID0gR0NTUFJJTlRGKCIlcy9kZXZpY2UvdnVzYiIsIGxpYnhsX194c19n ZXRfZG9tcGF0aChnYywgZG9taWQpKTsKKyAgICAgICAgdXNiY3RybHMgPSBsaWJ4bF9feHNfZGly ZWN0b3J5KGdjLCBYQlRfTlVMTCwgcGF0aCwgJm5jKTsKKworICAgICAgICBmb3IgKGogPSAwOyBq IDwgbmM7IGorKykgeworICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRldiAqdG1wID0gTlVM TDsKKyAgICAgICAgICAgIGludCBuZCA9IDA7CisKKyAgICAgICAgICAgIHJjID0gbGlieGxfX2Rl dmljZV91c2JkZXZfbGlzdF9mb3JfdXNiY3RybChnYywgZG9taWQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRvaSh1c2JjdHJsc1tqXSks CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JnRtcCwgJm5kKTsKKyAgICAgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICAgICAgICAg IGlmICghbmQpIGNvbnRpbnVlOworCisgICAgICAgICAgICBHQ1JFQUxMT0NfQVJSQVkoKmxpc3Qs ICpudW0gKyBuZCk7CisgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgbmQ7IGsrKykgeworICAg ICAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2JkZXZfY29weShDVFgsICpsaXN0ICsgKm51bSwg dG1wICsgayk7CisgICAgICAgICAgICAgICAgKCpudW0pKys7CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKKworb3V0OgorICAgIExPRyhFUlJPUiwgImZh aWwgdG8gZ2V0IGFzc2lnbmVkIGRldmljZXMiKTsKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRp YyBib29sIGlzX3VzYmRldl9pbl9hcnJheShsaWJ4bF9kZXZpY2VfdXNiZGV2ICp1c2JkZXZzLCBp bnQgbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2Jk ZXYgKnVzYmRldikKK3sKKyAgICBpbnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBudW07IGkr KykgeworICAgICAgICBpZiAodXNiZGV2c1tpXS51Lmhvc3RkZXYuaG9zdGJ1cyA9PSB1c2JkZXYt PnUuaG9zdGRldi5ob3N0YnVzICYmCisgICAgICAgICAgICB1c2JkZXZzW2ldLnUuaG9zdGRldi5o b3N0YWRkciA9PSB1c2JkZXYtPnUuaG9zdGRldi5ob3N0YWRkcikKKyAgICAgICAgICAgIHJldHVy biB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworLyogY2hlY2sgaWYgVVNC IGRldmljZSB0eXBlIGlzIGFzc2lnbmFibGUgKi8KK3N0YXRpYyBib29sIGlzX3VzYmRldl9hc3Np Z25hYmxlKGxpYnhsX19nYyAqZ2MsIGxpYnhsX2RldmljZV91c2JkZXYgKnVzYmRldikKK3sKKyAg ICBpbnQgY2xhc3Njb2RlOworICAgIGNoYXIgKmZpbGVuYW1lOworICAgIHZvaWQgKmJ1ZiA9IE5V TEw7CisgICAgY2hhciAqYnVzaWQgPSBOVUxMOworCisgICAgYnVzaWQgPSB1c2JkZXZfYnVzYWRk cl90b19idXNpZChnYywgdXNiZGV2LT51Lmhvc3RkZXYuaG9zdGJ1cywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVzYmRldi0+dS5ob3N0ZGV2Lmhvc3RhZGRyKTsKKyAgICBp ZiAoIWJ1c2lkKSByZXR1cm4gZmFsc2U7CisKKyAgICBmaWxlbmFtZSA9IEdDU1BSSU5URihTWVNG U19VU0JfREVWICIvJXMvYkRldmljZUNsYXNzIiwgYnVzaWQpOworICAgIGlmIChsaWJ4bF9fcmVh ZF9zeXNmc19maWxlX2NvbnRlbnRzKGdjLCBmaWxlbmFtZSwgJmJ1ZiwgTlVMTCkpCisgICAgICAg IHJldHVybiBmYWxzZTsKKworICAgIGNsYXNzY29kZSA9IGF0b2koYnVmKTsKKyAgICByZXR1cm4g Y2xhc3Njb2RlICE9IFVTQkhVQl9DTEFTU19DT0RFOworfQorCisvKiBnZXQgdXNiIGRldmljZXMg dW5kZXIgY2VydGFpbiB1c2IgY29udHJvbGxlciAqLworc3RhdGljIGludAorbGlieGxfX2Rldmlj ZV91c2JkZXZfbGlzdF9mb3JfdXNiY3RybChsaWJ4bF9fZ2MgKmdjLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWQgdXNiY3RybCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRldiAqKnVzYmRldnMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbnVtKQoreworICAgIGNv bnN0IGNoYXIgKmZlX3BhdGgsICpiZV9wYXRoLCAqbnVtX2RldnM7CisgICAgaW50IG4sIGksIHJj OworCisgICAgKnVzYmRldnMgPSBOVUxMOworICAgICpudW0gPSAwOworCisgICAgZmVfcGF0aCA9 IEdDU1BSSU5URigiJXMvZGV2aWNlL3Z1c2IvJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAg bGlieGxfX3hzX2dldF9kb21wYXRoKGdjLCBkb21pZCksIHVzYmN0cmwpOworCisgICAgYmVfcGF0 aCA9IHZ1c2JfYmVfZnJvbV94c19mZShnYywgZmVfcGF0aCwgZG9taWQpOworICAgIGlmICghYmVf cGF0aCkgeworICAgICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgIGdvdG8gb3V0OworICAg IH0KKworICAgIHJjID0gbGlieGxfX3hzX3JlYWRfY2hlY2tlZChnYywgWEJUX05VTEwsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJXMvbnVtLXBvcnRzIiwgYmVf cGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZudW1fZGV2cyk7CisgICAg aWYgKHJjKSBnb3RvIG91dDsKKworICAgIG4gPSBudW1fZGV2cyA/IGF0b2kobnVtX2RldnMpIDog MDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgY29uc3QgY2hhciAq YnVzaWQ7CisgICAgICAgIGxpYnhsX2RldmljZV91c2JkZXYgKnVzYmRldjsKKworICAgICAgICBy YyA9IGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2MsIFhCVF9OVUxMLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9wb3J0LyVkIiwgYmVfcGF0aCwgaSAr IDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ1c2lkKTsKKyAgICAg ICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAgICAgICBpZiAoYnVzaWQgJiYgc3RyY21wKGJ1c2lk LCAiIikpIHsKKyAgICAgICAgICAgIEdDUkVBTExPQ19BUlJBWSgqdXNiZGV2cywgKm51bSArIDEp OworICAgICAgICAgICAgdXNiZGV2ID0gKnVzYmRldnMgKyAqbnVtOworICAgICAgICAgICAgKCpu dW0pKys7CisgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiZGV2X2luaXQodXNiZGV2KTsKKyAg ICAgICAgICAgIHVzYmRldi0+Y3RybCA9IHVzYmN0cmw7CisgICAgICAgICAgICB1c2JkZXYtPnBv cnQgPSBpICsgMTsKKyAgICAgICAgICAgIHVzYmRldi0+dHlwZSA9IExJQlhMX1VTQkRFVl9UWVBF X0hPU1RERVY7CisgICAgICAgICAgICByYyA9IHVzYmRldl9idXNhZGRyX2Zyb21fYnVzaWQoZ2Ms IGJ1c2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1c2Jk ZXYtPnUuaG9zdGRldi5ob3N0YnVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZ1c2JkZXYtPnUuaG9zdGRldi5ob3N0YWRkcik7CisgICAgICAgICAgICBpZiAo cmMpIGdvdG8gb3V0OworICAgICAgICB9CisgICAgfQorCisgICAgcmMgPSAwOworCitvdXQ6Cisg ICAgcmV0dXJuIHJjOworfQorCisvKiBnZXQgYWxsIHVzYiBkZXZpY2VzIG9mIHRoZSBkb21haW4g Ki8KK2xpYnhsX2RldmljZV91c2JkZXYgKgorbGlieGxfZGV2aWNlX3VzYmRldl9saXN0KGxpYnhs X2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwgaW50ICpudW0pCit7CisgICAgR0NfSU5JVChjdHgp OworICAgIGxpYnhsX2RldmljZV91c2JkZXYgKnVzYmRldnMgPSBOVUxMOworICAgIGNvbnN0IGNo YXIgKnBhdGg7CisgICAgY2hhciAqKnVzYmN0cmxzOworICAgIHVuc2lnbmVkIGludCBuYyA9IDA7 CisgICAgaW50IGksIGo7CisKKyAgICAqbnVtID0gMDsKKworICAgIHBhdGggPSBHQ1NQUklOVEYo IiVzL2RldmljZS92dXNiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX194c19nZXRf ZG9tcGF0aChnYywgZG9taWQpKTsKKyAgICB1c2JjdHJscyA9IGxpYnhsX194c19kaXJlY3Rvcnko Z2MsIFhCVF9OVUxMLCBwYXRoLCAmbmMpOworCisgICAgZm9yIChpID0gMDsgaSA8IG5jOyBpKysp IHsKKyAgICAgICAgaW50IHIsIG5kID0gMDsKKyAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRldiAq dG1wID0gTlVMTDsKKworICAgICAgICByID0gbGlieGxfX2RldmljZV91c2JkZXZfbGlzdF9mb3Jf dXNiY3RybChnYywgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGF0b2kodXNiY3RybHNbaV0pLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wLCAmbmQpOworICAgICAgICBpZiAoIXIgfHwg IW5kKSBjb250aW51ZTsKKworICAgICAgICB1c2JkZXZzID0gbGlieGxfX3JlYWxsb2MoTk9HQywg dXNiZGV2cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigqdXNiZGV2 cykgKiAoKm51bSArIG5kKSk7CisgICAgICAgIGZvciAoaiA9IDA7IGogPCBuZDsgaisrKSB7Cisg ICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiZGV2X2NvcHkoY3R4LCB1c2JkZXZzICsgKm51bSwg dG1wICsgaik7CisgICAgICAgICAgICAoKm51bSkrKzsKKyAgICAgICAgfQorICAgIH0KKworICAg IEdDX0ZSRUU7CisgICAgcmV0dXJuIHVzYmRldnM7Cit9CisKKy8qIGZpbmQgZmlyc3QgdW51c2Vk IGNvbnRyb2xsZXI6cG9ydCBhbmQgZ2l2ZSB0aGF0IHRvIHVzYiBkZXZpY2UgKi8KK3N0YXRpYyBp bnQKK2xpYnhsX19kZXZpY2VfdXNiZGV2X3NldF9kZWZhdWx0X3VzYmN0cmwobGlieGxfX2djICpn YywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxpYnhsX2RldmljZV91c2JkZXYgKnVzYmRldikKK3sKKyAgICBsaWJ4bF9kZXZpY2VfdXNi Y3RybCAqdXNiY3RybHMgPSBOVUxMOworICAgIGludCBudW1jdHJsID0gMDsKKyAgICBpbnQgaSwg aiwgcmM7CisKKyAgICB1c2JjdHJscyA9IGxpYnhsX2RldmljZV91c2JjdHJsX2xpc3QoQ1RYLCBk b21pZCwgJm51bWN0cmwpOworICAgIGlmICghbnVtY3RybCB8fCAhdXNiY3RybHMpIHsKKyAgICAg ICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBmb3Ig KGkgPSAwOyBpIDwgbnVtY3RybDsgaSsrKSB7CisgICAgICAgIGZvciAoaiA9IDA7IGogPCB1c2Jj dHJsc1tpXS5wb3J0czsgaisrKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLCAqdG1w OworCisgICAgICAgICAgICBwYXRoID0gR0NTUFJJTlRGKCIlcy9iYWNrZW5kL3Z1c2IvJWQvJWQv cG9ydC8lZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX194c19nZXRfZG9t cGF0aChnYywgTElCWExfVE9PTFNUQUNLX0RPTUlEKSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZG9taWQsIHVzYmN0cmxzW2ldLmRldmlkLCBqICsgMSk7CisgICAgICAgICAgICByYyA9 IGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2MsIFhCVF9OVUxMLCBwYXRoLCAmdG1wKTsKKyAgICAg ICAgICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICAgICAgICAgIGlmICh0bXAgJiYgIXN0cmNt cCh0bXAsICIiKSkgeworICAgICAgICAgICAgICAgIHVzYmRldi0+Y3RybCA9IHVzYmN0cmxzW2ld LmRldmlkOworICAgICAgICAgICAgICAgIHVzYmRldi0+cG9ydCA9IGogKyAxOworICAgICAgICAg ICAgICAgIHJjID0gMDsKKyAgICAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgIH0KKworICAgIC8qIG5vIGF2YWlsYWJsZSBjb250cm9sbGVyOnBvcnQg Ki8KKyAgICByYyA9IEVSUk9SX0ZBSUw7CisKK291dDoKKyAgICBsaWJ4bF9kZXZpY2VfdXNiY3Ry bF9saXN0X2ZyZWUodXNiY3RybHMsIG51bWN0cmwpOworICAgIHJldHVybiByYzsKK30KKworLyog RmlsbCBpbiB1c2IgaW5mb3JtYXRpb24gd2l0aCBkZWZhdWx0IHZhbHVlLgorICoKKyAqIEdlbmVy YWxseSwgaXQgZG9lczoKKyAqIDEpIGlmICJjb250cm9sbGVyIiBpcyBub3Qgc3BlY2lmaWVkOgor ICogICAgLSBpZiAicG9ydCIgaXMgbm90IHNwZWNpZmllZCwgdHJ5IHRvIGZpbmQgYW4gYXZhaWxh YmxlIGNvbnRyb2xsZXI6cG9ydCwKKyAqICAgICAgaWYgZm91bmQsIHVzZSB0aGF0OyBvdGhlcndp c2UsIGNyZWF0ZSBhIG5ldyBjb250cm9sbGVyLCB1c2UgdGhpcworICogICAgICBjb250cm9sbGVy IGFuZCBpdHMgZmlyc3QgcG9ydAorICogICAgLSBpZiAicG9ydCIgaXMgc3BlY2lmaWVkLCByZXBv cnQgZXJyb3IuCisgKiAyKSBpZiAiY29udHJvbGxlciIgaXMgc3BlY2lmaWVkLCBidXQgcG9ydCBp cyBub3Qgc3BlY2lmaWVkOgorICogICAgdHJ5IHRvIGZpbmQgYW4gYXZhaWxhYmxlIHBvcnQgdW5k ZXIgdGhpcyBjb250cm9sbGVyLCBpZiBmb3VuZCwgdXNlCisgKiAgICB0aGF0LCBvdGhlcndpc2Us IHJlcG9ydCBlcnJvci4KKyAqIDMpIGlmIGJvdGggImNvbnRyb2xsZXIiIGFuZCAicG9ydCIgYXJl IHNwZWNpZmllZDoKKyAqICAgIGNoZWNrIHRoZSBjb250cm9sbGVyOnBvcnQgaXMgYXZhaWxhYmxl LCBpZiBub3QsIHJlcG9ydCBlcnJvci4KKyAqLworc3RhdGljIGludCBsaWJ4bF9fZGV2aWNlX3Vz YmRldl9zZXRkZWZhdWx0KGxpYnhsX19nYyAqZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRldiAqdXNiZGV2LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXBkYXRlX2pzb24pCit7 CisgICAgaW50IHJjOworCisgICAgaWYgKCF1c2JkZXYtPnR5cGUpCisgICAgICAgIHVzYmRldi0+ dHlwZSA9IExJQlhMX1VTQkRFVl9UWVBFX0hPU1RERVY7CisKKyAgICBpZiAodXNiZGV2LT5jdHJs ID09IC0xKSB7CisgICAgICAgIGlmICh1c2JkZXYtPnBvcnQpIHsKKyAgICAgICAgICAgIExPRyhF UlJPUiwgIlVTQiBjb250cm9sbGVyIG11c3QgYmUgc3BlY2lmaWVkIGlmIHlvdSBzcGVjaWZ5IHBv cnQiKTsKKyAgICAgICAgICAgIHJldHVybiBFUlJPUl9JTlZBTDsKKyAgICAgICAgfQorCisgICAg ICAgIHJjID0gbGlieGxfX2RldmljZV91c2JkZXZfc2V0X2RlZmF1bHRfdXNiY3RybChnYywgZG9t aWQsIHVzYmRldik7CisgICAgICAgIC8qIElmIG5vIGV4aXN0aW5nIGNvbnRyb2xsZXIgdG8gaG9z dCB0aGlzIHVzYiBkZXZpY2UsIGFkZCBhIG5ldyBvbmUgKi8KKyAgICAgICAgaWYgKHJjKSB7Cisg ICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCAqdXNiY3RybDsKKworICAgICAgICAgICAg R0NORVcodXNiY3RybCk7CisgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybF9pbml0KHVz YmN0cmwpOworICAgICAgICAgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX3VzYmN0cmxfc2V0ZGVmYXVs dChnYywgZG9taWQsIHVzYmN0cmwpOworICAgICAgICAgICAgaWYgKHJjIDwgMCkgZ290byBvdXQ7 CisKKyAgICAgICAgICAgIGlmICh1c2JjdHJsLT5kZXZpZCA9PSAtMSkgeworICAgICAgICAgICAg ICAgIHVzYmN0cmwtPmRldmlkID0gbGlieGxfX2RldmljZV9uZXh0aWQoZ2MsIGRvbWlkLCAidnVz YiIpOworICAgICAgICAgICAgICAgIGlmICh1c2JjdHJsLT5kZXZpZCA8IDApIHsKKyAgICAgICAg ICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICAgICAgICAgICAgICBnb3RvIG91 dDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJjID0g bGlieGxfX2RldmljZV91c2JjdHJsX2FkZF94ZW5zdG9yZShnYywgZG9taWQsIHVzYmN0cmwsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRl X2pzb24pOworICAgICAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAgICAgICAgICAgdXNi ZGV2LT5jdHJsID0gdXNiY3RybC0+ZGV2aWQ7CisgICAgICAgICAgICB1c2JkZXYtPnBvcnQgPSAx OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogQSBjb250cm9sbGVyIHdhcyBz cGVjaWZpZWQ7IGxvb2sgaXQgdXAgKi8KKyAgICAgICAgY29uc3QgY2hhciAqZmVfcGF0aCwgKmJl X3BhdGgsICp0bXA7CisKKyAgICAgICAgZmVfcGF0aCA9IEdDU1BSSU5URigiJXMvZGV2aWNlL3Z1 c2IvJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX194c19nZXRfZG9tcGF0 aChnYywgZG9taWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYmRldi0+Y3RybCk7 CisKKyAgICAgICAgYmVfcGF0aCA9IHZ1c2JfYmVfZnJvbV94c19mZShnYywgZmVfcGF0aCwgZG9t aWQpOworICAgICAgICBpZiAoIWJlX3BhdGgpIHsKKyAgICAgICAgICAgIHJjID0gRVJST1JfRkFJ TDsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzYmRl di0+cG9ydCkgeworICAgICAgICAgICAgLyogQSBzcGVjaWZpYyBwb3J0IHdhcyByZXF1ZXN0ZWQ7 IHNlZSBpZiBpdCdzIGF2YWlsYWJsZSAqLworICAgICAgICAgICAgcmMgPSBsaWJ4bF9feHNfcmVh ZF9jaGVja2VkKGdjLCBYQlRfTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBHQ1NQUklOVEYoIiVzL3BvcnQvJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBiZV9wYXRoLCB1c2JkZXYtPnBvcnQpLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXApOworICAgICAgICAgICAgaWYg KHJjKSBnb3RvIG91dDsKKworICAgICAgICAgICAgaWYgKHRtcCAmJiBzdHJjbXAodG1wLCAiIikp IHsKKyAgICAgICAgICAgICAgICBMT0coRVJST1IsICJUaGUgY29udHJvbGxlciBwb3J0IGlzbid0 IGF2YWlsYWJsZSIpOworICAgICAgICAgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAg ICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgIC8qIE5vIHBvcnQgd2FzIHJlcXVlc3RlZC4gQ2hvb3NlIGZyZWUgcG9ydC4gKi8KKyAg ICAgICAgICAgIGludCBpLCBwb3J0czsKKworICAgICAgICAgICAgcmMgPSBsaWJ4bF9feHNfcmVh ZF9jaGVja2VkKGdjLCBYQlRfTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBHQ1NQUklOVEYoIiVzL251bS1wb3J0cyIsIGJlX3BhdGgpLCAmdG1wKTsKKyAgICAg ICAgICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICAgICAgICAgIHBvcnRzID0gdG1wID8gYXRv aSh0bXApIDogMDsKKworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBvcnRzOyBpKyspIHsK KyAgICAgICAgICAgICAgICByYyA9IGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2MsIFhCVF9OVUxM LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYo IiVzL3BvcnQvJWQiLCBiZV9wYXRoLCBpICsgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZ0bXApOworICAgICAgICAgICAgICAgIGlmIChyYykgZ290byBv dXQ7CisKKyAgICAgICAgICAgICAgICBpZiAodG1wICYmICFzdHJjbXAodG1wLCAiIikpIHsKKyAg ICAgICAgICAgICAgICAgICAgdXNiZGV2LT5wb3J0ID0gaSArIDE7CisgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg ICAgaWYgKCF1c2JkZXYtPnBvcnQpIHsKKyAgICAgICAgICAgICAgICBMT0coRVJST1IsICJObyBh dmFpbGFibGUgcG9ydCB1bmRlciBzcGVjaWZpZWQgY29udHJvbGxlciIpOworICAgICAgICAgICAg ICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJjID0gMDsKKworb3V0OgorICAgIHJldHVy biByYzsKK30KKworLyogQWRkIHVzYiBpbmZvcm1hdGlvbiB0byB4ZW5zdG9yZQorICoKKyAqIEFk ZGluZyBhIHVzYiBkZXZpY2Ugd29uJ3QgY3JlYXRlIG5ldyAndnVzYicgZGV2aWNlLCBidXQgb25s eSB3cml0ZQorICogdGhlIGRldmljZSBidXNpZCB0byB0aGUgY29udHJvbGxlcjpwb3J0IGluIHhl bnN0b3JlLgorICovCitzdGF0aWMgaW50IGxpYnhsX19kZXZpY2VfdXNiZGV2X2FkZF94ZW5zdG9y ZShsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2JkZXYgKnVzYmRldiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXBkYXRlX2pzb24p Cit7CisgICAgY2hhciAqYmVfcGF0aCwgKmJ1c2lkOworICAgIGludCByYzsKKyAgICB4c190cmFu c2FjdGlvbl90IHQgPSBYQlRfTlVMTDsKKyAgICBsaWJ4bF9kb21haW5fY29uZmlnIGRfY29uZmln OworICAgIGxpYnhsX2RldmljZV91c2JkZXYgdXNiZGV2X3NhdmVkOworICAgIGxpYnhsX19kb21h aW5fdXNlcmRhdGFfbG9jayAqbG9jayA9IE5VTEw7CisKKyAgICBsaWJ4bF9kb21haW5fY29uZmln X2luaXQoJmRfY29uZmlnKTsKKyAgICBsaWJ4bF9kZXZpY2VfdXNiZGV2X2luaXQoJnVzYmRldl9z YXZlZCk7CisgICAgbGlieGxfZGV2aWNlX3VzYmRldl9jb3B5KENUWCwgJnVzYmRldl9zYXZlZCwg dXNiZGV2KTsKKworICAgIGJ1c2lkID0gdXNiZGV2X2J1c2FkZHJfdG9fYnVzaWQoZ2MsIHVzYmRl di0+dS5ob3N0ZGV2Lmhvc3RidXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1c2JkZXYtPnUuaG9zdGRldi5ob3N0YWRkcik7CisgICAgaWYgKCFidXNpZCkgeworICAgICAg ICBMT0coREVCVUcsICJGYWlsIHRvIGdldCBidXNpZCBvZiB1c2IgZGV2aWNlIik7CisgICAgICAg IGdvdG8gb3V0OworICAgIH0KKworICAgIGlmICh1cGRhdGVfanNvbikgeworICAgICAgICBsb2Nr ID0gbGlieGxfX2xvY2tfZG9tYWluX3VzZXJkYXRhKGdjLCBkb21pZCk7CisgICAgICAgIGlmICgh bG9jaykgeworICAgICAgICAgICAgcmMgPSBFUlJPUl9MT0NLX0ZBSUw7CisgICAgICAgICAgICBn b3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAgIHJjID0gbGlieGxfX2dldF9kb21haW5fY29u ZmlndXJhdGlvbihnYywgZG9taWQsICZkX2NvbmZpZyk7CisgICAgICAgIGlmIChyYykgZ290byBv dXQ7CisKKyAgICAgICAgREVWSUNFX0FERCh1c2JkZXYsIHVzYmRldnMsIGRvbWlkLCAmdXNiZGV2 X3NhdmVkLAorICAgICAgICAgICAgICAgICAgIENPTVBBUkVfVVNCLCAmZF9jb25maWcpOworICAg IH0KKworICAgIGZvciAoOzspIHsKKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfdHJhbnNhY3Rpb25f c3RhcnQoZ2MsICZ0KTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAgICAgICBpZiAo dXBkYXRlX2pzb24pIHsKKyAgICAgICAgICAgIHJjID0gbGlieGxfX3NldF9kb21haW5fY29uZmln dXJhdGlvbihnYywgZG9taWQsICZkX2NvbmZpZyk7CisgICAgICAgICAgICBpZiAocmMpIGdvdG8g b3V0OworICAgICAgICB9CisKKyAgICAgICAgYmVfcGF0aCA9IEdDU1BSSU5URigiJXMvYmFja2Vu ZC92dXNiLyVkLyVkL3BvcnQvJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhs X194c19nZXRfZG9tcGF0aChnYywgTElCWExfVE9PTFNUQUNLX0RPTUlEKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkb21pZCwgdXNiZGV2LT5jdHJsLCB1c2JkZXYtPnBvcnQpOworCisg ICAgICAgIExPRyhERUJVRywgIkFkZGluZyB1c2IgZGV2aWNlICVzIHRvIHhlbnN0b3JlOiBjb250 cm9sbGVyICVkLCBwb3J0ICVkIiwKKyAgICAgICAgICAgIGJ1c2lkLCB1c2JkZXYtPmN0cmwsIHVz YmRldi0+cG9ydCk7CisKKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfd3JpdGVfY2hlY2tlZChnYywg dCwgYmVfcGF0aCwgYnVzaWQpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgICAg IHJjID0gbGlieGxfX3hzX3RyYW5zYWN0aW9uX2NvbW1pdChnYywgJnQpOworICAgICAgICBpZiAo IXJjKSBicmVhazsKKyAgICAgICAgaWYgKHJjIDwgMCkgZ290byBvdXQ7CisgICAgfQorCisgICAg cmMgPSAwOworCitvdXQ6CisgICAgaWYgKGxvY2spIGxpYnhsX191bmxvY2tfZG9tYWluX3VzZXJk YXRhKGxvY2spOworICAgIGxpYnhsX2RldmljZV91c2JkZXZfZGlzcG9zZSgmdXNiZGV2X3NhdmVk KTsKKyAgICBsaWJ4bF9kb21haW5fY29uZmlnX2Rpc3Bvc2UoJmRfY29uZmlnKTsKKyAgICByZXR1 cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbGlieGxfX2RldmljZV91c2JkZXZfcmVtb3ZlX3hlbnN0 b3JlKGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRldiAqdXNiZGV2KQor eworICAgIGNoYXIgKmJlX3BhdGg7CisKKyAgICBiZV9wYXRoID0gR0NTUFJJTlRGKCIlcy9iYWNr ZW5kL3Z1c2IvJWQvJWQvcG9ydC8lZCIsCisgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9f eHNfZ2V0X2RvbXBhdGgoZ2MsIExJQlhMX1RPT0xTVEFDS19ET01JRCksCisgICAgICAgICAgICAg ICAgICAgICAgICBkb21pZCwgdXNiZGV2LT5jdHJsLCB1c2JkZXYtPnBvcnQpOworCisgICAgTE9H KERFQlVHLCAiUmVtb3ZpbmcgdXNiIGRldmljZSBmcm9tIHhlbnN0b3JlOiBjb250cm9sbGVyICVk LCBwb3J0ICVkIiwKKyAgICAgICAgdXNiZGV2LT5jdHJsLCB1c2JkZXYtPnBvcnQpOworCisgICAg cmV0dXJuIGxpYnhsX194c193cml0ZV9jaGVja2VkKGdjLCBYQlRfTlVMTCwgYmVfcGF0aCwgIiIp OworfQorCitzdGF0aWMgY2hhciAqdXNiZGV2X2J1c2lkX2Zyb21fY3RybHBvcnQobGlieGxfX2dj ICpnYywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbGlieGxfZGV2aWNlX3VzYmRldiAqdXNiZGV2KQoreworICAgIHJldHVybiBsaWJ4bF9f eHNfcmVhZChnYywgWEJUX05VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5U RigiJXMvYmFja2VuZC92dXNiLyVkLyVkL3BvcnQvJWQiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfX3hzX2dldF9kb21wYXRoKGdjLCBMSUJYTF9UT09MU1RBQ0tfRE9NSUQp LAorICAgICAgICAgICAgICAgICAgICAgICAgICBkb21pZCwgdXNiZGV2LT5jdHJsLCB1c2JkZXYt PnBvcnQpKTsKK30KKworLyogZ2V0IG9yaWdpbmFsIGRyaXZlciBwYXRoIG9mIHVzYiBpbnRlcmZh Y2UsIHN0b3JlZCBpbiBAZHJ2cGF0aCAqLworc3RhdGljIGludCB1c2JpbnRmX2dldF9kcnZwYXRo KGxpYnhsX19nYyAqZ2MsIGNvbnN0IGNoYXIgKmludGYsIGNoYXIgKipkcnZwYXRoKQoreworICAg IGNoYXIgKnNwYXRoLCAqZHAgPSBOVUxMOworICAgIHN0cnVjdCBzdGF0IHN0OworICAgIGludCBy OworCisgICAgc3BhdGggPSBHQ1NQUklOVEYoU1lTRlNfVVNCX0RFViAiLyVzL2RyaXZlciIsIGlu dGYpOworCisgICAgciA9IGxzdGF0KHNwYXRoLCAmc3QpOworICAgIGlmIChyID09IDApIHsKKyAg ICAgICAgLyogRmluZCB0aGUgY2Fub25pY2FsIHBhdGggdG8gdGhlIGRyaXZlci4gKi8KKyAgICAg ICAgZHAgPSBsaWJ4bF9femFsbG9jKGdjLCBQQVRIX01BWCk7CisgICAgICAgIGRwID0gcmVhbHBh dGgoc3BhdGgsIGRwKTsKKyAgICAgICAgaWYgKCFkcCkgeworICAgICAgICAgICAgTE9HRShFUlJP UiwgImdldCByZWFscGF0aCBmYWlsZWQ6ICclcyciLCBzcGF0aCk7CisgICAgICAgICAgICByZXR1 cm4gRVJST1JfRkFJTDsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZXJybm8gPT0gRU5PRU5U KSB7CisgICAgICAgIC8qIGRyaXZlciBwYXRoIGRvZXNuJ3QgZXhpc3QgKi8KKyAgICAgICAgZHAg PSBOVUxMOworICAgIH0gZWxzZSB7CisgICAgICAgIExPR0UoRVJST1IsICJsc3RhdCBmYWlsZWQ6 ICclcyciLCBzcGF0aCk7CisgICAgICAgIHJldHVybiBFUlJPUl9GQUlMOworICAgIH0KKworICAg ICpkcnZwYXRoID0gZHA7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1bmJpbmRf dXNiaW50ZihsaWJ4bF9fZ2MgKmdjLCBjb25zdCBjaGFyICppbnRmKQoreworICAgIGNoYXIgKnBh dGg7CisgICAgaW50IGZkID0gLTE7CisgICAgaW50IHJjOworCisgICAgcGF0aCA9IEdDU1BSSU5U RihTWVNGU19VU0JfREVWICIvJXMvZHJpdmVyL3VuYmluZCIsIGludGYpOworCisgICAgZmQgPSBv cGVuKHBhdGgsIE9fV1JPTkxZKTsKKyAgICBpZiAoZmQgPCAwKSB7CisgICAgICAgIExPR0UoRVJS T1IsICJvcGVuIGZpbGUgZmFpbGVkOiAnJXMnIiwgcGF0aCk7CisgICAgICAgIHJjID0gRVJST1Jf RkFJTDsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgaWYgKGxpYnhsX3dyaXRlX2V4 YWN0bHkoQ1RYLCBmZCwgaW50Ziwgc2l6ZW9mKGludGYpLCBwYXRoLCBpbnRmKSkgeworICAgICAg ICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIHJjID0g MDsKKworb3V0OgorICAgIGlmIChmZCA+PSAwKSBjbG9zZShmZCk7CisgICAgcmV0dXJuIHJjOwor fQorCitzdGF0aWMgaW50IGJpbmRfdXNiaW50ZihsaWJ4bF9fZ2MgKmdjLCBjb25zdCBjaGFyICpp bnRmLCBjb25zdCBjaGFyICpkcnZwYXRoKQoreworICAgIGNoYXIgKnBhdGg7CisgICAgc3RydWN0 IHN0YXQgc3Q7CisgICAgaW50IGZkID0gLTE7CisgICAgaW50IHJjLCByOworCisgICAgcGF0aCA9 IEdDU1BSSU5URigiJXMvJXMiLCBkcnZwYXRoLCBpbnRmKTsKKworICAgIC8qIGNoZWNrIHRocm91 Z2ggbHN0YXQsIGlmIGludGYgYWxyZWFkeSBleGlzdHMgdW5kZXIgZHJ2cGF0aCwKKyAgICAgKiBp dCdzIGFscmVhZHkgYm91bmQsIHJldHVybiBkaXJlY3RseTsgaWYgaXQgZG9lc24ndCBleGlzdCwK KyAgICAgKiBjb250aW51ZSB0byBkbyBiaW5kIHdvcms7IG90aGVyd2lzZSwgcmV0dXJuIGVycm9y LgorICAgICAqLworICAgIHIgPSBsc3RhdChwYXRoLCAmc3QpOworICAgIGlmIChyID09IDApCisg ICAgICAgIHJldHVybiAwOworICAgIGlmIChyIDwgMCAmJiBlcnJubyAhPSBFTk9FTlQpCisgICAg ICAgIHJldHVybiBFUlJPUl9GQUlMOworCisgICAgcGF0aCA9IEdDU1BSSU5URigiJXMvYmluZCIs IGRydnBhdGgpOworCisgICAgZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTsKKyAgICBpZiAoZmQg PCAwKSB7CisgICAgICAgIExPR0UoRVJST1IsICJvcGVuIGZpbGUgZmFpbGVkOiAnJXMnIiwgcGF0 aCk7CisgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQor CisgICAgaWYgKGxpYnhsX3dyaXRlX2V4YWN0bHkoQ1RYLCBmZCwgaW50Ziwgc2l6ZW9mKGludGYp LCBwYXRoLCBpbnRmKSkgeworICAgICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgIGdvdG8g b3V0OworICAgIH0KKworICAgIHJjID0gMDsKKworb3V0OgorICAgIGlmIChmZCA+PSAwKSBjbG9z ZShmZCk7CisgICAgcmV0dXJuIHJjOworfQorCisvKiBJcyB1c2IgaW50ZXJmYWNlIGJvdW5kIHRv IHVzYmJhY2s/ICovCitzdGF0aWMgaW50IHVzYmludGZfaXNfYXNzaWduZWQobGlieGxfX2djICpn YywgY2hhciAqaW50ZikKK3sKKyAgICBjaGFyICpzcGF0aDsKKyAgICBpbnQgcjsKKyAgICBzdHJ1 Y3Qgc3RhdCBzdDsKKworICAgIHNwYXRoID0gR0NTUFJJTlRGKFNZU0ZTX1VTQkJBQ0tfRFJJVkVS ICIvJXMiLCBpbnRmKTsKKyAgICByID0gbHN0YXQoc3BhdGgsICZzdCk7CisKKyAgICBpZiAociA9 PSAwKQorICAgICAgICByZXR1cm4gMTsKKyAgICBpZiAociA8IDAgJiYgZXJybm8gPT0gRU5PRU5U KQorICAgICAgICByZXR1cm4gMDsKKyAgICBMT0dFKEVSUk9SLCAiQWNjZXNzaW5nICVzIiwgc3Bh dGgpOworICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIGludCB1c2JkZXZfZ2V0X2FsbF9pbnRl cmZhY2VzKGxpYnhsX19nYyAqZ2MsIGNvbnN0IGNoYXIgKmJ1c2lkLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKioqaW50ZnMsIGludCAqbnVtKQoreworICAgIERJ UiAqZGlyOworICAgIGNoYXIgKmJ1ZjsKKyAgICBzdHJ1Y3QgZGlyZW50ICpkZV9idWY7CisgICAg c3RydWN0IGRpcmVudCAqZGU7CisgICAgaW50IHJjOworCisgICAgKmludGZzID0gTlVMTDsKKyAg ICAqbnVtID0gMDsKKworICAgIGJ1ZiA9IEdDU1BSSU5URigiJXM6IiwgYnVzaWQpOworCisgICAg ZGlyID0gb3BlbmRpcihTWVNGU19VU0JfREVWKTsKKyAgICBpZiAoIWRpcikgeworICAgICAgICBM T0dFKEVSUk9SLCAib3BlbmRpciBmYWlsZWQ6ICclcyciLCBTWVNGU19VU0JfREVWKTsKKyAgICAg ICAgcmV0dXJuIEVSUk9SX0ZBSUw7CisgICAgfQorCisgICAgZGVfYnVmID0gemFsbG9jX2RpcmVu dChnYywgU1lTRlNfVVNCX0RFVik7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGludCByID0g cmVhZGRpcl9yKGRpciwgZGVfYnVmLCAmZGUpOworCisgICAgICAgIGlmIChyKSB7CisgICAgICAg ICAgICBMT0dFKEVSUk9SLCAiZmFpbGVkIHRvIHJlYWRkaXIgJXMiLCBTWVNGU19VU0JfREVWKTsK KyAgICAgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAg ICAgICB9CisgICAgICAgIGlmICghZGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBp ZiAoIXN0cmNtcChkZS0+ZF9uYW1lLCAiLiIpIHx8CisgICAgICAgICAgICAhc3RyY21wKGRlLT5k X25hbWUsICIuLiIpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCFzdHJu Y21wKGRlLT5kX25hbWUsIGJ1Ziwgc3RybGVuKGJ1ZikpKSB7CisgICAgICAgICAgICBHQ1JFQUxM T0NfQVJSQVkoKmludGZzLCAqbnVtICsgMSk7CisgICAgICAgICAgICAoKmludGZzKVsqbnVtXSA9 IGxpYnhsX19zdHJkdXAoZ2MsIGRlLT5kX25hbWUpOworICAgICAgICAgICAgKCpudW0pKys7Cisg ICAgICAgIH0KKyAgICB9CisKKyAgICByYyA9IDA7CisKK291dDoKKyAgICBjbG9zZWRpcihkaXIp OworICAgIHJldHVybiByYzsKK30KKworLyogRW5jb2RlIHVzYiBpbnRlcmZhY2Ugc28gdGhhdCBp dCBjb3VsZCBiZSB3cml0dGVuIHRvIHhlbnN0b3JlIGFzIGEga2V5LgorICoKKyAqIFNpbmNlIHhl bnN0b3JlIGtleSBjYW5ub3QgaW5jbHVkZSAnLicgb3IgJzonLCB3ZSdsbCBjaGFuZ2UgJy4nIHRv ICdfJywKKyAqIGNoYW5nZSAnOicgdG8gJ0AnLiBGb3IgZXhhbXBsZSwgMy0xOjIuMSB3aWxsIGJl IGVuY29kZWQgdG8gMy0xQDJfMS4KKyAqIFRoaXMgd2lsbCBiZSB1c2VkIHRvIHNhdmUgb3JpZ2lu YWwgZHJpdmVyIG9mIFVTQiBkZXZpY2UgdG8geGVuc3RvcmUuCisgKi8KK3N0YXRpYyBjaGFyICp1 c2JfaW50ZXJmYWNlX3hlbnN0b3JlX2VuY29kZShsaWJ4bF9fZ2MgKmdjLCBjb25zdCBjaGFyICpi dXNpZCkKK3sKKyAgICBjaGFyICpzdHIgPSBsaWJ4bF9fc3RyZHVwKGdjLCBidXNpZCk7CisgICAg aW50IGksIGxlbiA9IHN0cmxlbihzdHIpOworCisgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsr KSB7CisgICAgICAgIGlmIChzdHJbaV0gPT0gJy4nKSBzdHJbaV0gPSAnXyc7CisgICAgICAgIGlm IChzdHJbaV0gPT0gJzonKSBzdHJbaV0gPSAnQCc7CisgICAgfQorICAgIHJldHVybiBzdHI7Cit9 CisKKy8qIFVuYmluZCBVU0IgZGV2aWNlIGZyb20gInVzYmJhY2siIGRyaXZlci4KKyAqCisgKiBJ ZiB0aGVyZSBhcmUgbWFueSBpbnRlcmZhY2VzIHVuZGVyIFVTQiBkZXZpY2UsIGNoZWNrIGVhY2gg aW50ZXJmYWNlLAorICogdW5iaW5kIGZyb20gInVzYmJhY2siIGRyaXZlci4KKyAqLworc3RhdGlj IGludCB1c2JiYWNrX2Rldl91bmFzc2lnbihsaWJ4bF9fZ2MgKmdjLCBjb25zdCBjaGFyICpidXNp ZCkKK3sKKyAgICBjaGFyICoqaW50ZnMgPSBOVUxMOworICAgIGludCBpLCBudW0gPSAwOworICAg IGludCByYzsKKworICAgIHJjID0gdXNiZGV2X2dldF9hbGxfaW50ZXJmYWNlcyhnYywgYnVzaWQs ICZpbnRmcywgJm51bSk7CisgICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAgIGZvciAoaSA9IDA7 IGkgPCBudW07IGkrKykgeworICAgICAgICBjaGFyICppbnRmID0gaW50ZnNbaV07CisKKyAgICAg ICAgLyogY2hlY2sgaWYgdGhlIFVTQiBpbnRlcmZhY2UgaXMgYWxyZWFkeSBib3VuZCB0byAidXNi YmFjayIgKi8KKyAgICAgICAgaWYgKHVzYmludGZfaXNfYXNzaWduZWQoZ2MsIGludGYpID4gMCkg eworICAgICAgICAgICAgLyogdW5iaW5kIGludGVyZmFjZSBmcm9tIHVzYmJhY2sgZHJpdmVyICov CisgICAgICAgICAgICByYyA9IHVuYmluZF91c2JpbnRmKGdjLCBpbnRmKTsKKyAgICAgICAgICAg IGlmIChyYykgeworICAgICAgICAgICAgICAgIExPR0UoRVJST1IsICJDb3VsZG4ndCB1bmJpbmQg JXMgZnJvbSB1c2JiYWNrIiwgaW50Zik7CisgICAgICAgICAgICAgICAgZ290byBvdXQ7CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByYyA9IDA7CisKK291dDoKKyAgICBy ZXR1cm4gcmM7Cit9CisKKy8qIHJlYmluZCBVU0IgZGV2aWNlIHRvIG9yaWdpbmFsIGRyaXZlci4K KyAqCisgKiBJZiB0aGVyZSBhcmUgbWFueSBpbnRlcmZhY2VzIHVuZGVyIFVTQiBkZXZpY2UsIGZv ciByZWFjaCBpbnRlcmZhY2UsCisgKiByZWFkIGRyaXZlcl9wYXRoIGZyb20geGVuc3RvcmUgKGlm IHRoZXJlIGlzKSBhbmQgcmViaW5kIHRvIGl0cworICogb3JpZ2luYWwgZHJpdmVyLCB0aGVuIHJl bW92ZSBkcml2ZXJfcGF0aCBpbmZvcm1hdGlvbiBmcm9tIHhlbnN0b3JlLgorICovCitzdGF0aWMg aW50IHVzYmRldl9yZWJpbmQobGlieGxfX2djICpnYywgY29uc3QgY2hhciAqYnVzaWQpCit7Cisg ICAgY2hhciAqKmludGZzID0gTlVMTDsKKyAgICBjaGFyICp1c2JkZXZfZW5jb2RlID0gTlVMTDsK KyAgICBjaGFyICpwYXRoID0gTlVMTDsKKyAgICBpbnQgaSwgbnVtID0gMDsKKyAgICBpbnQgcmM7 CisKKyAgICByYyA9IHVzYmRldl9nZXRfYWxsX2ludGVyZmFjZXMoZ2MsIGJ1c2lkLCAmaW50ZnMs ICZudW0pOworICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICB1c2JkZXZfZW5jb2RlID0gdXNi X2ludGVyZmFjZV94ZW5zdG9yZV9lbmNvZGUoZ2MsIGJ1c2lkKTsKKworICAgIGZvciAoaSA9IDA7 IGkgPCBudW07IGkrKykgeworICAgICAgICBjaGFyICppbnRmID0gaW50ZnNbaV07CisgICAgICAg IGNoYXIgKnVzYmludGZfZW5jb2RlID0gTlVMTDsKKyAgICAgICAgY29uc3QgY2hhciAqZHJ2cGF0 aDsKKworICAgICAgICAvKiByZWJpbmQgVVNCIGludGVyZmFjZSB0byBpdHMgb3JpZ2luaWFsIGRy aXZlciAqLworICAgICAgICB1c2JpbnRmX2VuY29kZSA9IHVzYl9pbnRlcmZhY2VfeGVuc3RvcmVf ZW5jb2RlKGdjLCBpbnRmKTsKKyAgICAgICAgcGF0aCA9IEdDU1BSSU5URihVU0JCQUNLX0lORk9f UEFUSCAiLyVzLyVzL2RyaXZlcl9wYXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1c2Jk ZXZfZW5jb2RlLCB1c2JpbnRmX2VuY29kZSk7CisgICAgICAgIHJjID0gbGlieGxfX3hzX3JlYWRf Y2hlY2tlZChnYywgWEJUX05VTEwsIHBhdGgsICZkcnZwYXRoKTsKKyAgICAgICAgaWYgKHJjKSBn b3RvIG91dDsKKworICAgICAgICBpZiAoZHJ2cGF0aCkgeworICAgICAgICAgICAgcmMgPSBiaW5k X3VzYmludGYoZ2MsIGludGYsIGRydnBhdGgpOworICAgICAgICAgICAgaWYgKHJjKSB7CisgICAg ICAgICAgICAgICAgTE9HRShFUlJPUiwgIkNvdWxkbid0IHJlYmluZCAlcyB0byAlcyIsIGludGYs IGRydnBhdGgpOworICAgICAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICAgICAgfQorICAg ICAgICB9CisgICAgfQorCitvdXQ6CisgICAgcGF0aCA9IEdDU1BSSU5URihVU0JCQUNLX0lORk9f UEFUSCAiLyVzIiwgdXNiZGV2X2VuY29kZSk7CisgICAgbGlieGxfX3hzX3JtX2NoZWNrZWQoZ2Ms IFhCVF9OVUxMLCBwYXRoKTsKKyAgICByZXR1cm4gcmM7Cit9CisKKworLyogQmluZCBVU0IgZGV2 aWNlIHRvICJ1c2JiYWNrIiBkcml2ZXIuCisgKgorICogSWYgdGhlcmUgYXJlIG1hbnkgaW50ZXJm YWNlcyB1bmRlciBVU0IgZGV2aWNlLCBjaGVjayBlYWNoIGludGVyZmFjZSwKKyAqIHVuYmluZCBm cm9tIG9yaWdpbmFsIGRyaXZlciBhbmQgYmluZCB0byAidXNiYmFjayIgZHJpdmVyLgorICovCitz dGF0aWMgaW50IHVzYmJhY2tfZGV2X2Fzc2lnbihsaWJ4bF9fZ2MgKmdjLCBjb25zdCBjaGFyICpi dXNpZCkKK3sKKyAgICBjaGFyICoqaW50ZnMgPSBOVUxMOworICAgIGludCBudW0gPSAwLCBpOwor ICAgIGludCByYzsKKyAgICBjaGFyICp1c2JkZXZfZW5jb2RlID0gTlVMTDsKKworICAgIHJjID0g dXNiZGV2X2dldF9hbGxfaW50ZXJmYWNlcyhnYywgYnVzaWQsICZpbnRmcywgJm51bSk7CisgICAg aWYgKHJjKSByZXR1cm4gcmM7CisKKyAgICB1c2JkZXZfZW5jb2RlID0gdXNiX2ludGVyZmFjZV94 ZW5zdG9yZV9lbmNvZGUoZ2MsIGJ1c2lkKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBudW07IGkr KykgeworICAgICAgICBjaGFyICppbnRmID0gaW50ZnNbaV07CisgICAgICAgIGNoYXIgKmRydnBh dGggPSBOVUxMOworCisgICAgICAgIC8qIGFscmVhZHkgYXNzaWduZWQgdG8gdXNiYmFjayAqLwor ICAgICAgICBpZiAodXNiaW50Zl9pc19hc3NpZ25lZChnYywgaW50ZikgPiAwKQorICAgICAgICAg ICAgY29udGludWU7CisKKyAgICAgICAgcmMgPSB1c2JpbnRmX2dldF9kcnZwYXRoKGdjLCBpbnRm LCAmZHJ2cGF0aCk7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICAgICAgaWYgKGRy dnBhdGgpIHsKKyAgICAgICAgICAgIC8qIHdyaXRlIGRyaXZlciBwYXRoIHRvIHhlbnN0b3JlIGZv ciBsYXRlciByZWJpbmRpbmcgKi8KKyAgICAgICAgICAgIGNoYXIgKnVzYmludGZfZW5jb2RlID0g TlVMTDsKKyAgICAgICAgICAgIGNoYXIgKnBhdGg7CisKKyAgICAgICAgICAgIHVzYmludGZfZW5j b2RlID0gdXNiX2ludGVyZmFjZV94ZW5zdG9yZV9lbmNvZGUoZ2MsIGludGYpOworICAgICAgICAg ICAgcGF0aCA9IEdDU1BSSU5URihVU0JCQUNLX0lORk9fUEFUSCAiLyVzLyVzL2RyaXZlcl9wYXRo IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiZGV2X2VuY29kZSwgdXNiaW50Zl9l bmNvZGUpOworICAgICAgICAgICAgcmMgPSBsaWJ4bF9feHNfd3JpdGVfY2hlY2tlZChnYywgWEJU X05VTEwsIHBhdGgsIGRydnBhdGgpOworICAgICAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKwor ICAgICAgICAgICAgLyogdW5iaW5kIGludGVyZmFjZSBmcm9tIG9yaWdpbmFsIGRyaXZlciAqLwor ICAgICAgICAgICAgcmMgPSB1bmJpbmRfdXNiaW50ZihnYywgaW50Zik7CisgICAgICAgICAgICBp ZiAocmMpIGdvdG8gb3V0OworICAgICAgICB9CisKKyAgICAgICAgLyogYmluZCBpbnRlcmZhY2Ug dG8gdXNiYmFjayAqLworICAgICAgICByYyA9IGJpbmRfdXNiaW50ZihnYywgaW50ZiwgU1lTRlNf VVNCQkFDS19EUklWRVIpOworICAgICAgICBpZiAocmMpIHsKKyAgICAgICAgICAgIExPRyhFUlJP UiwgIkNvdWxkbid0IGJpbmQgJXMgdG8gJXMiLCBpbnRmLCBTWVNGU19VU0JCQUNLX0RSSVZFUik7 CisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAw OworCitvdXQ6CisgICAgLyogc29tZSBpbnRlcmZhY2VzIG1pZ2h0IGJlIGJvdW5kIHRvIHVzYmJh Y2ssIHVuYmluZCBpdCBhbmQKKyAgICAgKiByZWJpbmQgaXQgdG8gaXRzIG9yaWdpbmFsIGRyaXZl cgorICAgICAqLworICAgIHVzYmJhY2tfZGV2X3VuYXNzaWduKGdjLCBidXNpZCk7CisgICAgdXNi ZGV2X3JlYmluZChnYywgYnVzaWQpOworICAgIHJldHVybiByYzsKK30KKworc3RhdGljIGludCBk b191c2JkZXZfYWRkKGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAg ICAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2JkZXYgKnVzYmRldiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICBib29sIHVwZGF0ZV9qc29uKQoreworICAgIGludCByYzsKKyAgICBjaGFyICpi dXNpZDsKKyAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCB1c2JjdHJsOworICAgIGxpYnhsX3VzYmN0 cmxpbmZvIHVzYmN0cmxpbmZvOworCisgICAgbGlieGxfZGV2aWNlX3VzYmN0cmxfaW5pdCgmdXNi Y3RybCk7CisgICAgbGlieGxfdXNiY3RybGluZm9faW5pdCgmdXNiY3RybGluZm8pOworICAgIHVz YmN0cmwuZGV2aWQgPSB1c2JkZXYtPmN0cmw7CisKKyAgICByYyA9IGxpYnhsX2RldmljZV91c2Jj dHJsX2dldGluZm8oQ1RYLCBkb21pZCwgJnVzYmN0cmwsICZ1c2JjdHJsaW5mbyk7CisgICAgaWYg KHJjKSBnb3RvIG91dDsKKworICAgIHN3aXRjaCAodXNiY3RybGluZm8udHlwZSkgeworICAgIGNh c2UgTElCWExfVVNCQ1RSTF9UWVBFX1BWOgorICAgICAgICBidXNpZCA9IHVzYmRldl9idXNhZGRy X3RvX2J1c2lkKGdjLCB1c2JkZXYtPnUuaG9zdGRldi5ob3N0YnVzLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVzYmRldi0+dS5ob3N0ZGV2Lmhvc3RhZGRyKTsKKyAg ICAgICAgaWYgKCFidXNpZCkgeworICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAg ICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKworICAgICAgICByYyA9IGxpYnhsX19kZXZpY2Vf dXNiZGV2X2FkZF94ZW5zdG9yZShnYywgZG9taWQsIHVzYmRldiwgdXBkYXRlX2pzb24pOworICAg ICAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgICAgIHJjID0gdXNiYmFja19kZXZfYXNzaWdu KGdjLCBidXNpZCk7CisgICAgICAgIGlmIChyYykgeworICAgICAgICAgICAgbGlieGxfX2Rldmlj ZV91c2JkZXZfcmVtb3ZlX3hlbnN0b3JlKGdjLCBkb21pZCwgdXNiZGV2KTsKKyAgICAgICAgICAg IGdvdG8gb3V0OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTElCWExfVVNC Q1RSTF9UWVBFX0RFVklDRU1PREVMOgorICAgIGRlZmF1bHQ6CisgICAgICAgIExPRyhFUlJPUiwg IlVuc3VwcG9ydGVkIHVzYiBjb250cm9sbGVyIHR5cGUiKTsKKyAgICAgICAgcmMgPSBFUlJPUl9G QUlMOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICByYyA9IDA7CisKK291dDoKKyAg ICBsaWJ4bF9kZXZpY2VfdXNiY3RybF9kaXNwb3NlKCZ1c2JjdHJsKTsKKyAgICBsaWJ4bF91c2Jj dHJsaW5mb19kaXNwb3NlKCZ1c2JjdHJsaW5mbyk7CisgICAgcmV0dXJuIHJjOworfQorCisvKiBB TyBvcGVyYXRpb24gdG8gYWRkIGEgdXNiIGRldmljZS4KKyAqCisgKiBHZW5lcmFsbHksIGl0IGRv ZXM6CisgKiAxKSBjaGVjayBpZiB0aGUgdXNiIGRldmljZSB0eXBlIGlzIGFzc2lnbmFibGUKKyAq IDIpIGNoZWNrIGlmIHRoZSB1c2IgZGV2aWNlIGlzIGFscmVhZHkgYXNzaWduZWQgdG8gYSBkb21h aW4KKyAqIDMpIGFkZCAnYnVzaWQnIG9mIHRoZSB1c2IgZGV2aWNlIHRvIHhlbnN0b3JlIGNvbnRv bGxlci9wb3J0Ly4KKyAqICAgIChQVlVTQiBkcml2ZXIgd2F0Y2hlcyB0aGUgeGVuc3RvcmUgY2hh bmdlcyBhbmQgd2lsbCBkZXRlY3QgdGhhdC4pCisgKiA0KSB1bmJpbmQgdXNiIGRldmljZSBmcm9t IG9yaWdpbmFsIGRyaXZlciBhbmQgYmluZCB0byB1c2JiYWNrLgorICogICAgSWYgdXNiIGRldmlj ZSBoYXMgbWFueSBpbnRlcmZhY2VzLCB0aGVuOgorICogICAgLSB1bmJpbmQgZWFjaCBpbnRlcmZh Y2UgZnJvbSBpdHMgb3JpZ2luYWwgZHJpdmVyIGFuZCBiaW5kIHRvIHVzYmJhY2suCisgKiAgICAt IHN0b3JlIHRoZSBvcmlnaW5hbCBkcml2ZXIgdG8geGVuc3RvcmUgZm9yIGxhdGVyIHJlYmluZGlu ZyB3aGVuCisgKiAgICAgIGRldGFjaGluZyB0aGUgZGV2aWNlLgorICoKKyAqIEJlZm9yZSBjYWxs aW5nIHRoaXMgZnVuY3Rpb24sIGFvZGV2IHNob3VsZCBiZSBwcm9wZXJseSBmaWxsZWQ6CisgKiBh b2Rldi0+YW8sIGFvZGV2LT5jYWxsYmFjaywgYW9kZXYtPnVwZGF0ZV9qc29uLCAuLi4KKyAqLwor dm9pZCBsaWJ4bF9fZGV2aWNlX3VzYmRldl9hZGQobGlieGxfX2VnYyAqZWdjLCB1aW50MzJfdCBk b21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2JkZXYg KnVzYmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19hb19kZXZpY2Ug KmFvZGV2KQoreworICAgIFNUQVRFX0FPX0dDKGFvZGV2LT5hbyk7CisgICAgaW50IHJjOworICAg IGxpYnhsX2RldmljZV91c2JkZXYgKmFzc2lnbmVkOworICAgIGludCBudW1fYXNzaWduZWQ7Cisg ICAgbGlieGxfZGV2aWNlX3VzYmN0cmwgdXNiY3RybDsKKyAgICBsaWJ4bF91c2JjdHJsaW5mbyB1 c2JjdHJsaW5mbzsKKworICAgIGxpYnhsX2RldmljZV91c2JjdHJsX2luaXQoJnVzYmN0cmwpOwor ICAgIGxpYnhsX3VzYmN0cmxpbmZvX2luaXQoJnVzYmN0cmxpbmZvKTsKKworICAgIC8qIEN1cnJl bnRseSBvbmx5IHN1cHBvcnQgYWRkaW5nIFVTQiBkZXZpY2UgZnJvbSBEb20wIGJhY2tlbmQuCisg ICAgICogU28sIGlmIFVTQiBjb250cm9sbGVyIGlzIHNwZWNpZmllZCwgY2hlY2sgaXRzIGJhY2tl bmQgZG9tYWluLAorICAgICAqIGlmIGl0J3Mgbm90IERvbTAsIHJlcG9ydCBlcnJvci4KKyAgICAg Ki8KKyAgICBpZiAodXNiZGV2LT5jdHJsICE9IC0xKSB7CisgICAgICAgIHVzYmN0cmwuZGV2aWQg PSB1c2JkZXYtPmN0cmw7CisgICAgICAgIHJjID0gbGlieGxfZGV2aWNlX3VzYmN0cmxfZ2V0aW5m byhDVFgsIGRvbWlkLCAmdXNiY3RybCwgJnVzYmN0cmxpbmZvKTsKKyAgICAgICAgaWYgKHJjKSBn b3RvIG91dDsKKworICAgICAgICBpZiAodXNiY3RybGluZm8uYmFja2VuZF9pZCAhPSBMSUJYTF9U T09MU1RBQ0tfRE9NSUQpIHsKKyAgICAgICAgICAgIExPRyhFUlJPUiwgIkRvbid0IHN1cHBvcnQg YWRkaW5nIFVTQiBkZXZpY2UgZnJvbSBub24tRG9tMCBiYWNrZW5kIik7CisgICAgICAgICAgICBy YyA9IEVSUk9SX0lOVkFMOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICB9 CisKKyAgICAvKiBjaGVjayB1c2IgZGV2aWNlIGlzIGFzc2lnbmFibGUgdHlwZSAqLworICAgIGlm ICghaXNfdXNiZGV2X2Fzc2lnbmFibGUoZ2MsIHVzYmRldikpIHsKKyAgICAgICAgTE9HKEVSUk9S LCAiVVNCIGRldmljZSBpcyBub3QgYXNzaWduYWJsZS4iKTsKKyAgICAgICAgcmMgPSBFUlJPUl9G QUlMOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICAvKiBjaGVjayB1c2IgZGV2aWNl IGlzIGFscmVhZHkgYXNzaWduZWQgKi8KKyAgICByYyA9IGdldF9hc3NpZ25lZF9kZXZpY2VzKGdj LCAmYXNzaWduZWQsICZudW1fYXNzaWduZWQpOworICAgIGlmIChyYykgeworICAgICAgICBMT0co RVJST1IsICJjYW5ub3QgZGV0ZXJtaW5lIGlmIGRldmljZSBpcyBhc3NpZ25lZCwiCisgICAgICAg ICAgICAgICAgICAgIiByZWZ1c2luZyB0byBjb250aW51ZSIpOworICAgICAgICBnb3RvIG91dDsK KyAgICB9CisKKyAgICBpZiAoaXNfdXNiZGV2X2luX2FycmF5KGFzc2lnbmVkLCBudW1fYXNzaWdu ZWQsIHVzYmRldikpIHsKKyAgICAgICAgTE9HKEVSUk9SLCAiVVNCIGRldmljZSBhbHJlYWR5IGF0 dGFjaGVkIHRvIGEgZG9tYWluIik7CisgICAgICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgICAg IGdvdG8gb3V0OworICAgIH0KKworICAgIC8qIGZpbGwgZGVmYXVsdCB2YWx1ZXMsIGUuZywgaWYg dXNiZGV2LT5jdHJsIGFuZCB1c2JkZXYtPnBvcnQKKyAgICAgKiBub3Qgc3BlY2lmaWVkLCBjaG9v c2UgYXZhaWxhYmxlIGNvbnRyb2xsZXI6cG9ydCBhbmQgZmlsbCBpbi4gKi8KKyAgICByYyA9IGxp YnhsX19kZXZpY2VfdXNiZGV2X3NldGRlZmF1bHQoZ2MsIGRvbWlkLCB1c2JkZXYsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFvZGV2LT51cGRhdGVfanNvbik7Cisg ICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAgIC8qIGRvIGFjdHVhbCBhZGRpbmcgdXNiIGRldmlj ZSBvcGVyYXRpb24gKi8KKyAgICByYyA9IGRvX3VzYmRldl9hZGQoZ2MsIGRvbWlkLCB1c2JkZXYs IGFvZGV2LT51cGRhdGVfanNvbik7CisKK291dDoKKyAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybF9k aXNwb3NlKCZ1c2JjdHJsKTsKKyAgICBsaWJ4bF91c2JjdHJsaW5mb19kaXNwb3NlKCZ1c2JjdHJs aW5mbyk7CisgICAgYW9kZXYtPnJjID0gcmM7CisgICAgYW9kZXYtPmNhbGxiYWNrKGVnYywgYW9k ZXYpOworICAgIHJldHVybjsKK30KKworc3RhdGljIGludCBkb191c2JkZXZfcmVtb3ZlKGxpYnhs X19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp YnhsX2RldmljZV91c2JkZXYgKnVzYmRldikKK3sKKyAgICBpbnQgcmM7CisgICAgY2hhciAqYnVz aWQ7CisgICAgbGlieGxfZGV2aWNlX3VzYmN0cmwgdXNiY3RybDsKKyAgICBsaWJ4bF91c2JjdHJs aW5mbyB1c2JjdHJsaW5mbzsKKworICAgIGxpYnhsX2RldmljZV91c2JjdHJsX2luaXQoJnVzYmN0 cmwpOworICAgIGxpYnhsX3VzYmN0cmxpbmZvX2luaXQoJnVzYmN0cmxpbmZvKTsKKyAgICB1c2Jj dHJsLmRldmlkID0gdXNiZGV2LT5jdHJsOworCisgICAgcmMgPSBsaWJ4bF9kZXZpY2VfdXNiY3Ry bF9nZXRpbmZvKENUWCwgZG9taWQsICZ1c2JjdHJsLCAmdXNiY3RybGluZm8pOworICAgIGlmIChy YykgZ290byBvdXQ7CisKKyAgICBzd2l0Y2ggKHVzYmN0cmxpbmZvLnR5cGUpIHsKKyAgICBjYXNl IExJQlhMX1VTQkNUUkxfVFlQRV9QVjoKKyAgICAgICAgYnVzaWQgPSB1c2JkZXZfYnVzaWRfZnJv bV9jdHJscG9ydChnYywgZG9taWQsIHVzYmRldik7CisgICAgICAgIGlmICghYnVzaWQpIHsKKyAg ICAgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAg ICB9CisKKyAgICAgICAgLyogVGhpbmdzIGFyZSBkb25lIGluIG9yZGVyIG9mOgorICAgICAgICAg KiAgIHVuYmluZCBVU0IgZGV2aWNlIGZyb20gdXNiYmFjaywKKyAgICAgICAgICogICByZW1vdmUg VVNCIGRldmljZSBmcm9tIHhlbnN0b3JlLAorICAgICAgICAgKiAgIHJlYmluZCBVU0IgZGV2aWNl IHRvIG9yaWdpbmFsIGRyaXZlci4KKyAgICAgICAgICogSXQgaXMgdG8gYmFsYW5jZSBzaW1wbGlj aXR5IHdpdGggcm9idXN0bmVzcyBpbiBjYXNlIG9mIGZhaWx1cmU6CisgICAgICAgICAqIC0gV2Ug dW5iaW5kIGFsbCBpbnRlcmZhY2VzIGJlZm9yZSByZWJpbmRpbmcgYW55IGludGVyZmFjZXMsIHNv CisgICAgICAgICAqICAgdGhhdCB3ZSBuZXZlciBnZXQgaW50byBhIHNpdHVhdGlvbiB3aGVyZSBz b21lIGludGVyZmFjZXMgYXJlCisgICAgICAgICAqICAgYXNzaWduZWQgdG8gdXNiYmFjayBhbmQg c29tZSBhcmUgYXNzaWduZWQgdG8gdGhlIG9yaWdpbmFsIGRyaXZlcnMuCisgICAgICAgICAqIC0g V2UgYWxzbyB1bmJpbmQgdGhlIGludGVyZmFjZXMgYmVmb3JlIHJlbW92aW5nIHRoZSBwdnVzYiB4 ZW5zdG9yZQorICAgICAgICAgKiAgIG5vZGVzLCBzbyB0aGF0IGlmIHRoZSB1bmJpbmQgZmFpbHMg aW4gdGhlIG1pZGRsZSwgdGhlIGRldmljZSBzdGlsbAorICAgICAgICAgKiAgIHNob3dzIHVwIGlu IHhsIHVzYi1saXN0LCBhbmQgdGhlIHVzZXIgY2FuIHJlLXRyeSByZW1vdmluZyBpdC4KKyAgICAg ICAgICovCisgICAgICAgIHJjID0gdXNiYmFja19kZXZfdW5hc3NpZ24oZ2MsIGJ1c2lkKTsKKyAg ICAgICAgaWYgKHJjKSB7CisgICAgICAgICAgICBMT0coRVJST1IsICJFcnJvciByZW1vdmluZyBk ZXZpY2UgZnJvbSBndWVzdC4iCisgICAgICAgICAgICAgICAgIiBUcnkgcnVubmluZyB1c2JkZXYt ZGV0YWNoIGFnYWluLiIpOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKworICAg ICAgICByYyA9IGxpYnhsX19kZXZpY2VfdXNiZGV2X3JlbW92ZV94ZW5zdG9yZShnYywgZG9taWQs IHVzYmRldik7CisgICAgICAgIGlmIChyYykgeworICAgICAgICAgICAgTE9HKEVSUk9SLCAiRXJy b3IgcmVtb3ZpbmcgZGV2aWNlIGZyb20gZ3Vlc3QuIgorICAgICAgICAgICAgICAgICIgVHJ5IHJ1 bm5pbmcgdXNiZGV2LWRldGFjaCBhZ2Fpbi4iKTsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAg ICAgICB9CisKKyAgICAgICAgcmMgPSB1c2JkZXZfcmViaW5kKGdjLCBidXNpZCk7CisgICAgICAg IGlmIChyYykgeworICAgICAgICAgICAgTE9HKEVSUk9SLCAiVVNCIGRldmljZSByZW1vdmVkIGZy b20gZ3Vlc3QsIGJ1dCBjb3VsZG4ndCIKKyAgICAgICAgICAgICAgICAiIHJlLWJpbmQgdG8gZG9t YWluIDAuIFRyeSByZW1vdmluZyBhbmQgcmUtaW5zZXJ0aW5nIgorICAgICAgICAgICAgICAgICIg dGhlIFVTQiBkZXZpY2Ugb3IgcmVsb2FkaW5nIHRoZSBkcml2ZXIgbW9kdWxlcy4iKTsKKyAgICAg ICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBM SUJYTF9VU0JDVFJMX1RZUEVfREVWSUNFTU9ERUw6CisgICAgZGVmYXVsdDoKKyAgICAgICAgTE9H KEVSUk9SLCAiVW5zdXBwb3J0ZWQgdXNiIGNvbnRyb2xsZXIgdHlwZSIpOworICAgICAgICByYyA9 IEVSUk9SX0ZBSUw7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIHJjID0gMDsKKwor b3V0OgorICAgIGxpYnhsX2RldmljZV91c2JjdHJsX2Rpc3Bvc2UoJnVzYmN0cmwpOworICAgIGxp YnhsX3VzYmN0cmxpbmZvX2Rpc3Bvc2UoJnVzYmN0cmxpbmZvKTsKKyAgICByZXR1cm4gcmM7Cit9 CisKKy8qIE9wZXJhdGlvbiB0byByZW1vdmUgdXNiIGRldmljZS4KKyAqCisgKiBHZW5lcmFsbHks IGl0IGRvZXM6CisgKiAxKSBjaGVjayBpZiB0aGUgdXNiIGRldmljZSBpcyBhc3NpZ25lZCB0byB0 aGUgZG9tYWluCisgKiAyKSByZW1vdmUgdGhlIHVzYiBkZXZpY2UgZnJvbSB4ZW5zdG9yZSBjb250 cm9sbGVyL3BvcnQuCisgKiAzKSB1bmJpbmQgdXNiIGRldmljZSBmcm9tIHVzYmJhY2sgYW5kIHJl YmluZCB0byBpdHMgb3JpZ2luYWwgZHJpdmVyLgorICogICAgSWYgdXNiIGRldmljZSBoYXMgbWFu eSBpbnRlcmZhY2VzLCBkbyBpdCB0byBlYWNoIGludGVyZmFjZS4KKyAqLworc3RhdGljIGludCBs aWJ4bF9fZGV2aWNlX3VzYmRldl9yZW1vdmUobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNi ZGV2ICp1c2JkZXYpCit7CisgICAgbGlieGxfdXNiY3RybGluZm8gdXNiY3RybGluZm87CisgICAg bGlieGxfZGV2aWNlX3VzYmN0cmwgdXNiY3RybDsKKyAgICBpbnQgcmM7CisKKyAgICBpZiAodXNi ZGV2LT5jdHJsIDwgMCB8fCB1c2JkZXYtPnBvcnQgPCAxKSB7CisgICAgICAgIExPRyhFUlJPUiwg IkludmFsaWQgVVNCIGRldmljZSIpOworICAgICAgICByZXR1cm4gRVJST1JfRkFJTDsKKyAgICB9 CisKKyAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybF9pbml0KCZ1c2JjdHJsKTsKKyAgICBsaWJ4bF91 c2JjdHJsaW5mb19pbml0KCZ1c2JjdHJsaW5mbyk7CisgICAgdXNiY3RybC5kZXZpZCA9IHVzYmRl di0+Y3RybDsKKworICAgIHJjID0gbGlieGxfZGV2aWNlX3VzYmN0cmxfZ2V0aW5mbyhDVFgsIGRv bWlkLCAmdXNiY3RybCwgJnVzYmN0cmxpbmZvKTsKKyAgICBpZiAocmMpIGdvdG8gb3V0OworCisg ICAgaWYgKHVzYmN0cmxpbmZvLmJhY2tlbmRfaWQgIT0gTElCWExfVE9PTFNUQUNLX0RPTUlEKSB7 CisgICAgICAgIExPRyhFUlJPUiwgIkRvbid0IHN1cHBvcnQgcmVtb3ZpbmcgVVNCIGRldmljZSBm cm9tIG5vbi1Eb20wIGJhY2tlbmQiKTsKKyAgICAgICAgcmMgPSBFUlJPUl9JTlZBTDsKKyAgICAg ICAgZ290byBvdXQ7CisgICAgfQorCisgICAgLyogZG8gYWN0dWFsIHJlbW92aW5nIHVzYiBkZXZp Y2Ugb3BlcmF0aW9uICovCisgICAgcmMgPSBkb191c2JkZXZfcmVtb3ZlKGdjLCBkb21pZCwgdXNi ZGV2KTsKKworb3V0OgorICAgIGxpYnhsX2RldmljZV91c2JjdHJsX2Rpc3Bvc2UoJnVzYmN0cmwp OworICAgIGxpYnhsX3VzYmN0cmxpbmZvX2Rpc3Bvc2UoJnVzYmN0cmxpbmZvKTsKKyAgICByZXR1 cm4gcmM7Cit9CisKK2ludCBsaWJ4bF9kZXZpY2VfdXNiZGV2X3JlbW92ZShsaWJ4bF9jdHggKmN0 eCwgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxf ZGV2aWNlX3VzYmRldiAqdXNiZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGxpYnhsX2FzeW5jb3BfaG93ICphb19ob3cpCisKK3sKKyAgICBBT19DUkVBVEUoY3R4LCBk b21pZCwgYW9faG93KTsKKyAgICBpbnQgcmM7CisKKyAgICByYyA9IGxpYnhsX19kZXZpY2VfdXNi ZGV2X3JlbW92ZShnYywgZG9taWQsIHVzYmRldik7CisKKyAgICBsaWJ4bF9fYW9fY29tcGxldGUo ZWdjLCBhbywgcmMpOworICAgIHJldHVybiBBT19JTlBST0dSRVNTOworfQorCitpbnQgbGlieGxf Y3RybHBvcnRfdG9fZGV2aWNlX3VzYmRldihsaWJ4bF9jdHggKmN0eCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IGN0cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp YnhsX2RldmljZV91c2JkZXYgKnVzYmRldikKK3sKKyAgICBHQ19JTklUKGN0eCk7CisgICAgY29u c3QgY2hhciAqZG9tcGF0aCwgKmZlX3BhdGgsICpiZV9wYXRoLCAqYnVzaWQ7CisgICAgaW50IHJj OworCisgICAgZG9tcGF0aCA9IGxpYnhsX194c19nZXRfZG9tcGF0aChnYywgZG9taWQpOworCisg ICAgZmVfcGF0aCA9IEdDU1BSSU5URigiJXMvZGV2aWNlL3Z1c2IvJWQiLCBkb21wYXRoLCBjdHJs KTsKKworICAgIGJlX3BhdGggPSB2dXNiX2JlX2Zyb21feHNfZmUoZ2MsIGZlX3BhdGgsIGRvbWlk KTsKKyAgICBpZiAoIWJlX3BhdGgpIHsKKyAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAg ICBnb3RvIG91dDsKKyAgICB9CisKKyAgICByYyA9IGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2Ms IFhCVF9OVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9wb3J0 LyVkIiwgYmVfcGF0aCwgcG9ydCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnVzaWQp OworICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICBpZiAoIWJ1c2lkIHx8ICFzdHJjbXAoYnVz aWQsICIiKSkgeworICAgICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgIGdvdG8gb3V0Owor ICAgIH0KKworICAgIHVzYmRldi0+Y3RybCA9IGN0cmw7CisgICAgdXNiZGV2LT5wb3J0ID0gcG9y dDsKKyAgICB1c2JkZXYtPnR5cGUgPSBMSUJYTF9VU0JERVZfVFlQRV9IT1NUREVWOworICAgIHJj ID0gdXNiZGV2X2J1c2FkZHJfZnJvbV9idXNpZChnYywgYnVzaWQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZ1c2JkZXYtPnUuaG9zdGRldi5ob3N0YnVzLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmdXNiZGV2LT51Lmhvc3RkZXYuaG9zdGFkZHIpOwor CitvdXQ6CisgICAgR0NfRlJFRTsKKyAgICByZXR1cm4gcmM7Cit9CisvKgorICogTG9jYWwgdmFy aWFibGVzOgorICogbW9kZTogQworICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIGluZGVudC10YWJz LW1vZGU6IG5pbAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF90 eXBlcy5pZGwgYi90b29scy9saWJ4bC9saWJ4bF90eXBlcy5pZGwKaW5kZXggNjMyYzAwOS4uMmE5 OWVlYiAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfdHlwZXMuaWRsCisrKyBiL3Rvb2xz L2xpYnhsL2xpYnhsX3R5cGVzLmlkbApAQCAtNjEzLDYgKzYxMywzNSBAQCBsaWJ4bF9kZXZpY2Vf cmRtID0gU3RydWN0KCJkZXZpY2VfcmRtIiwgWwogICAgICgicG9saWN5IiwgbGlieGxfcmRtX3Jl c2VydmVfcG9saWN5KSwKICAgICBdKQogCitsaWJ4bF91c2JjdHJsX3R5cGUgPSBFbnVtZXJhdGlv bigidXNiY3RybF90eXBlIiwgWworICAgICgwLCAiQVVUTyIpLAorICAgICgxLCAiUFYiKSwKKyAg ICAoMiwgIkRFVklDRU1PREVMIiksCisgICAgXSkKKworbGlieGxfdXNiZGV2X3R5cGUgPSBFbnVt ZXJhdGlvbigidXNiZGV2X3R5cGUiLCBbCisgICAgKDEsICJob3N0ZGV2IiksCisgICAgXSkKKwor bGlieGxfZGV2aWNlX3VzYmN0cmwgPSBTdHJ1Y3QoImRldmljZV91c2JjdHJsIiwgWworICAgICgi dHlwZSIsIGxpYnhsX3VzYmN0cmxfdHlwZSksCisgICAgKCJkZXZpZCIsIGxpYnhsX2RldmlkKSwK KyAgICAoInZlcnNpb24iLCBpbnRlZ2VyKSwKKyAgICAoInBvcnRzIiwgaW50ZWdlciksCisgICAg KCJiYWNrZW5kX2RvbWlkIiwgbGlieGxfZG9taWQpLAorICAgICgiYmFja2VuZF9kb21uYW1lIiwg c3RyaW5nKSwKKyAgIF0pCisKK2xpYnhsX2RldmljZV91c2JkZXYgPSBTdHJ1Y3QoImRldmljZV91 c2JkZXYiLCBbCisgICAgKCJjdHJsIiwgbGlieGxfZGV2aWQpLAorICAgICgicG9ydCIsIGludGVn ZXIpLAorICAgICgidSIsIEtleWVkVW5pb24oTm9uZSwgbGlieGxfdXNiZGV2X3R5cGUsICJ0eXBl IiwKKyAgICAgICAgICAgWygiaG9zdGRldiIsIFN0cnVjdChOb25lLCBbCisgICAgICAgICAgICAg ICAgICgiaG9zdGJ1cyIsICAgdWludDgpLAorICAgICAgICAgICAgICAgICAoImhvc3RhZGRyIiwg IHVpbnQ4KV0pKSwKKyAgICAgICAgICAgXSkpLAorICAgIF0pCisKIGxpYnhsX2RldmljZV9kdGRl diA9IFN0cnVjdCgiZGV2aWNlX2R0ZGV2IiwgWwogICAgICgicGF0aCIsIHN0cmluZyksCiAgICAg XSkKQEAgLTY1MSw2ICs2ODAsOCBAQCBsaWJ4bF9kb21haW5fY29uZmlnID0gU3RydWN0KCJkb21h aW5fY29uZmlnIiwgWwogICAgICMgYSBjaGFubmVsIG1hbmlmZXN0cyBhcyBhIGNvbnNvbGUgd2l0 aCBhIG5hbWUsCiAgICAgIyBzZWUgZG9jcy9taXNjL2NoYW5uZWxzLnR4dAogICAgICgiY2hhbm5l bHMiLCBBcnJheShsaWJ4bF9kZXZpY2VfY2hhbm5lbCwgIm51bV9jaGFubmVscyIpKSwKKyAgICAo InVzYmN0cmxzIiwgQXJyYXkobGlieGxfZGV2aWNlX3VzYmN0cmwsICJudW1fdXNiY3RybHMiKSks CisgICAgKCJ1c2JkZXZzIiwgQXJyYXkobGlieGxfZGV2aWNlX3VzYmRldiwgIm51bV91c2JkZXZz IikpLAogCiAgICAgKCJvbl9wb3dlcm9mZiIsIGxpYnhsX2FjdGlvbl9vbl9zaHV0ZG93biksCiAg ICAgKCJvbl9yZWJvb3QiLCBsaWJ4bF9hY3Rpb25fb25fc2h1dGRvd24pLApAQCAtNjk0LDYgKzcy NSwyMSBAQCBsaWJ4bF92dHBtaW5mbyA9IFN0cnVjdCgidnRwbWluZm8iLCBbCiAgICAgKCJ1dWlk IiwgbGlieGxfdXVpZCksCiAgICAgXSwgZGlyPURJUl9PVVQpCiAKK2xpYnhsX3VzYmN0cmxpbmZv ID0gU3RydWN0KCJ1c2JjdHJsaW5mbyIsIFsKKyAgICAoInR5cGUiLCBsaWJ4bF91c2JjdHJsX3R5 cGUpLAorICAgICgiZGV2aWQiLCBsaWJ4bF9kZXZpZCksCisgICAgKCJ2ZXJzaW9uIiwgaW50ZWdl ciksCisgICAgKCJwb3J0cyIsIGludGVnZXIpLAorICAgICgiYmFja2VuZCIsIHN0cmluZyksCisg ICAgKCJiYWNrZW5kX2lkIiwgdWludDMyKSwKKyAgICAoImZyb250ZW5kIiwgc3RyaW5nKSwKKyAg ICAoImZyb250ZW5kX2lkIiwgdWludDMyKSwKKyAgICAoInN0YXRlIiwgaW50ZWdlciksCisgICAg KCJldnRjaCIsIGludGVnZXIpLAorICAgICgicmVmX3VyYiIsIGludGVnZXIpLAorICAgICgicmVm X2Nvbm4iLCBpbnRlZ2VyKSwKKyAgICBdLCBkaXI9RElSX09VVCkKKwogbGlieGxfdmNwdWluZm8g PSBTdHJ1Y3QoInZjcHVpbmZvIiwgWwogICAgICgidmNwdWlkIiwgdWludDMyKSwKICAgICAoImNw dSIsIHVpbnQzMiksCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF90eXBlc19pbnRlcm5h bC5pZGwgYi90b29scy9saWJ4bC9saWJ4bF90eXBlc19pbnRlcm5hbC5pZGwKaW5kZXggNWU1NTY4 NS4uNjk2ZjVmOCAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfdHlwZXNfaW50ZXJuYWwu aWRsCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3R5cGVzX2ludGVybmFsLmlkbApAQCAtMjIsNiAr MjIsNyBAQCBsaWJ4bF9fZGV2aWNlX2tpbmQgPSBFbnVtZXJhdGlvbigiZGV2aWNlX2tpbmQiLCBb CiAgICAgKDYsICJWS0JEIiksCiAgICAgKDcsICJDT05TT0xFIiksCiAgICAgKDgsICJWVFBNIiks CisgICAgKDksICJWVVNCIiksCiAgICAgXSkKIAogbGlieGxfX2NvbnNvbGVfYmFja2VuZCA9IEVu dW1lcmF0aW9uKCJjb25zb2xlX2JhY2tlbmQiLCBbCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9s aWJ4bF91dGlscy5jIGIvdG9vbHMvbGlieGwvbGlieGxfdXRpbHMuYwppbmRleCBiMGNiOWUxLi5j ZWI4ODI1IDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF91dGlscy5jCisrKyBiL3Rvb2xz L2xpYnhsL2xpYnhsX3V0aWxzLmMKQEAgLTEzMTEsNiArMTMxMSwyNCBAQCBpbnQgbGlieGxfX3Jh bmRvbV9ieXRlcyhsaWJ4bF9fZ2MgKmdjLCB1aW50OF90ICpidWYsIHNpemVfdCBsZW4pCiAgICAg cmV0dXJuIHJldDsKIH0KIAordm9pZCBsaWJ4bF9kZXZpY2VfdXNiY3RybF9saXN0X2ZyZWUobGli eGxfZGV2aWNlX3VzYmN0cmwgKmxpc3QsIGludCBucikKK3sKKyAgIGludCBpOworCisgICBmb3Ig KGkgPSAwOyBpIDwgbnI7IGkrKykKKyAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybF9kaXNwb3Nl KCZsaXN0W2ldKTsKKyAgIGZyZWUobGlzdCk7Cit9CisKK3ZvaWQgbGlieGxfZGV2aWNlX3VzYmRl dl9saXN0X2ZyZWUobGlieGxfZGV2aWNlX3VzYmRldiAqbGlzdCwgaW50IG5yKQoreworICAgaW50 IGk7CisKKyAgIGZvciAoaSA9IDA7IGkgPCBucjsgaSsrKQorICAgICAgIGxpYnhsX2RldmljZV91 c2JkZXZfZGlzcG9zZSgmbGlzdFtpXSk7CisgICBmcmVlKGxpc3QpOworfQorCiAvKgogICogTG9j YWwgdmFyaWFibGVzOgogICogbW9kZTogQwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxf dXRpbHMuaCBiL3Rvb2xzL2xpYnhsL2xpYnhsX3V0aWxzLmgKaW5kZXggMzM5ZWJkZi4uNDQ5NTQx NyAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfdXRpbHMuaAorKysgYi90b29scy9saWJ4 bC9saWJ4bF91dGlscy5oCkBAIC03Niw2ICs3NiwxMSBAQCBpbnQgbGlieGxfdXVpZF90b19kZXZp Y2VfdnRwbShsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGlieGxfdXVpZCAqdXVpZCwgbGlieGxfZGV2aWNlX3Z0cG0gKnZ0cG0p OwogaW50IGxpYnhsX2RldmlkX3RvX2RldmljZV92dHBtKGxpYnhsX2N0eCAqY3R4LCB1aW50MzJf dCBkb21pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV2aWQsIGxpYnhs X2RldmljZV92dHBtICp2dHBtKTsKK2ludCBsaWJ4bF9kZXZpZF90b19kZXZpY2VfdXNiY3RybChs aWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IGRldmlkLCBsaWJ4bF9kZXZpY2VfdXNiY3RybCAqdXNiY3RybCk7CitpbnQg bGlieGxfY3RybHBvcnRfdG9fZGV2aWNlX3VzYmRldihsaWJ4bF9jdHggKmN0eCwgdWludDMyX3Qg ZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY3RybCwgaW50 IHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2Vf dXNiZGV2ICp1c2JkZXYpOwogCiBpbnQgbGlieGxfYml0bWFwX2FsbG9jKGxpYnhsX2N0eCAqY3R4 LCBsaWJ4bF9iaXRtYXAgKmJpdG1hcCwgaW50IG5fYml0cyk7CiAgICAgLyogQWxsb2NhdGVkIGJp bWFwIGlzIGZyb20gbWFsbG9jLCBsaWJ4bF9iaXRtYXBfZGlzcG9zZSgpIHRvIGJlCi0tIAoyLjEu NAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1k ZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cDovL2xpc3RzLnhl bi5vcmcveGVuLWRldmVsCg==