From mboxrd@z Thu Jan 1 00:00:00 1970 From: Olaf Hering Subject: [PATCH v4 3/5] libxl: add support for vscsi Date: Fri, 17 Apr 2015 08:30:58 +0000 Message-ID: <1429259460-30491-4-git-send-email-olaf@aepfle.de> References: <1429259460-30491-1-git-send-email-olaf@aepfle.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1429259460-30491-1-git-send-email-olaf@aepfle.de> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xen.org Cc: Wei Liu , Olaf Hering , Ian Jackson , Ian Campbell , Stefano Stabellini List-Id: xen-devel@lists.xenproject.org UG9ydCBwdnNjc2kgc3VwcG9ydCBmcm9tIHhlbmQgdG8gbGlieGw6CgogdnNjc2k9WydwZGV2LHZk ZXZ7LG9wdGlvbnN9J10KIHhsIHNjc2ktYXR0YWNoCiB4bCBzY3NpLWRldGFjaAogeGwgc2NzaS1s aXN0CgpTaWduZWQtb2ZmLWJ5OiBPbGFmIEhlcmluZyA8b2xhZkBhZXBmbGUuZGU+CkNjOiBJYW4g SmFja3NvbiA8aWFuLmphY2tzb25AZXUuY2l0cml4LmNvbT4KQ2M6IFN0ZWZhbm8gU3RhYmVsbGlu aSA8c3RlZmFuby5zdGFiZWxsaW5pQGV1LmNpdHJpeC5jb20+CkNjOiBJYW4gQ2FtcGJlbGwgPGlh bi5jYW1wYmVsbEBjaXRyaXguY29tPgpDYzogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4K LS0tCiBkb2NzL21hbi94bC5jZmcucG9kLjUgICAgICAgICAgICAgICAgfCAgNTUgKysrCiBkb2Nz L21hbi94bC5wb2QuMSAgICAgICAgICAgICAgICAgICAgfCAgMTggKwogdG9vbHMvbGlieGwvTWFr ZWZpbGUgICAgICAgICAgICAgICAgIHwgICAyICsKIHRvb2xzL2xpYnhsL2xpYnhsLmMgICAgICAg ICAgICAgICAgICB8IDQ0MSArKysrKysrKysrKysrKysrKysrKwogdG9vbHMvbGlieGwvbGlieGwu aCAgICAgICAgICAgICAgICAgIHwgIDI3ICsrCiB0b29scy9saWJ4bC9saWJ4bF9jcmVhdGUuYyAg ICAgICAgICAgfCAgIDEgKwogdG9vbHMvbGlieGwvbGlieGxfZGV2aWNlLmMgICAgICAgICAgIHwg ICAyICsKIHRvb2xzL2xpYnhsL2xpYnhsX2ludGVybmFsLmggICAgICAgICB8ICAxNiArCiB0b29s cy9saWJ4bC9saWJ4bF90eXBlcy5pZGwgICAgICAgICAgfCAgNTYgKysrCiB0b29scy9saWJ4bC9s aWJ4bF90eXBlc19pbnRlcm5hbC5pZGwgfCAgIDEgKwogdG9vbHMvbGlieGwvbGlieGxfdnNjc2ku YyAgICAgICAgICAgIHwgMjcxICsrKysrKysrKysrKysKIHRvb2xzL2xpYnhsL2xpYnhsdV92c2Nz aS5jICAgICAgICAgICB8IDc1MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog dG9vbHMvbGlieGwvbGlieGx1dGlsLmggICAgICAgICAgICAgIHwgIDIxICsKIHRvb2xzL2xpYnhs L3hsLmggICAgICAgICAgICAgICAgICAgICB8ICAgMyArCiB0b29scy9saWJ4bC94bF9jbWRpbXBs LmMgICAgICAgICAgICAgfCAxODQgKysrKysrKystCiB0b29scy9saWJ4bC94bF9jbWR0YWJsZS5j ICAgICAgICAgICAgfCAgMTUgKwogMTYgZmlsZXMgY2hhbmdlZCwgMTg2MiBpbnNlcnRpb25zKCsp LCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW4veGwuY2ZnLnBvZC41IGIvZG9j cy9tYW4veGwuY2ZnLnBvZC41CmluZGV4IGY5MzZkZmMuLmQzOTVlNTYgMTAwNjQ0Ci0tLSBhL2Rv Y3MvbWFuL3hsLmNmZy5wb2QuNQorKysgYi9kb2NzL21hbi94bC5jZmcucG9kLjUKQEAgLTUxMCw2 ICs1MTAsNjEgQEAgdmFsdWUgaXMgb3B0aW9uYWwgaWYgdGhpcyBpcyBhIGd1ZXN0IGRvbWFpbi4K IAogPWJhY2sKIAorPWl0ZW0gQjx2c2NzaT1bICJWU0NTSV9TUEVDX1NUUklORyIsICJWU0NTSV9T UEVDX1NUUklORyIsIC4uLl0+CisKK1NwZWNpZmllcyB0aGUgUFZTQ1NJIGRldmljZXMgdG8gYmUg cHJvdmlkZWQgdG8gdGhlIGd1ZXN0LiBQVlNDU0kgcGFzc2VzCitkb20wIFNDU0kgZGV2aWNlcyBh cy1pcyB0byB0aGUgZ3Vlc3QuCisKK0VhY2ggVlNDU0lfU1BFQ19TVFJJTkcgY29uc2lzdHMgb2Yg InBkZXYsdmRldlssb3B0aW9uc10iLgorJ3BkZXYnIGRlc2NyaWJlcyB0aGUgcGh5c2ljYWwgZGV2 aWNlLCBwcmVmZXJhYmxlIGluIGEgcGVyc2lzdGFudCBmb3JtYXQuCisndmRldicgaXMgdGhlIGRv bVUgZGV2aWNlIGluIHZIT1NUOkNIQU5ORUw6VEFSR0VUOkxVTiBub3RhdGlvbiwgYWxsIGludGVn ZXJzLgorJ29wdGlvbicgbGlzdHMgYWRkaXRpb25hbCBmbGFncyB3aGljaCBhIGJhY2tlbmQgbWF5 IHJlY29nbml6ZS4KKworVGhlIHN1cHBvcnRlZCB2YWx1ZXMgZm9yICJwZGV2IiBhbmQgIm9wdGlv biIgZGVwZW5kcyBvbiB0aGUgdXNlZCBiYWNrZW5kIGRyaXZlcjoKKworPW92ZXIgNAorCis9aXRl bSBCPExpbnV4IHB2b3BzPgorCis9b3ZlciA0CisKKz1pdGVtIEM8cGRldj4KKworVGhlIGJhY2tl bmQgZHJpdmVyIGluIHRoZSBwdm9wcyBrZXJuZWwgaXMgcGFydCBvZiB0aGUgTGludXgtSU8gVGFy Z2V0IGZyYW1ld29yaworKExJTykuIEFzIHN1Y2ggdGhlIFNDU0kgZGV2aWNlcyBoYXZlIHRvIGJl IGNvbmZpZ3VyZWQgZmlyc3Qgd2l0aCB0aGUgdG9vbHMKK3Byb3ZpZGVkIGJ5IHRoaXMgZnJhbWV3 b3JrLCBzdWNoIGFzIGEgeGVuLXNjc2liYWNrIGF3YXJlIHRhcmdldGNsaS4gVGhlICJwZGV2Igor aW4gZG9tVS5jZmcgaGFzIHRvIHJlZmVyIHRvIGEgY29uZmlnIGl0ZW0gaW4gdGhhdCBmcmFtZXdv cmsgaW5zdGVhZCBvZiB0aGUgcmF3CitkZXZpY2UuIFVzdXNhbGx5IHRoaXMgaXMgYSBXV04gaW4g dGhlIGZvcm0gb2YgIm5hLldXTjpMVU4iLgorCis9aXRlbSBDPG9wdGlvbj4KKworTm8gb3B0aW9u cyByZWNvZ25pemVkLgorCis9YmFjaworCis9aXRlbSBCPExpbnV4IHhlbmxpbnV4PgorCis9b3Zl ciA0CisKKz1pdGVtIEM8cGRldj4KKworVGhlIGRvbTAgZGV2aWNlIGluIGVpdGhlciAvZGV2L3Nj c2lkZXYgb3IgcEhPU1Q6Q0hBTk5FTDpUQVJHRVQ6TFVOIG5vdGF0aW9uLgorCitJdHMgcmVjb21t ZW5kZWQgdG8gdXNlIHBlcnNpc3RhbnQgbmFtZXMgIi9kZXYvZGlzay9ieS0qLyoiIHRvIHJlZmVy IHRvIGEgInBkZXYiLgorVGhlIHRvb2xzdGFjayB3aWxsIHRyYW5zbGF0ZSB0aGlzIGludGVybmFs bHkgdG8gImg6Yzp0OmwiIG5vdGF0aW9uLCB3aGljaCBpcyBob3cKK3RoZSBiYWNrZW5kIGRyaXZl ciB3aWxsIGFjY2VzcyB0aGUgZGV2aWNlLiBVc2luZyB0aGUgImg6Yzp0OmwiIG5vdGF0aW9uIGZv cgorInBkZXYiIGluIGRvbVUuY2ZnIGlzIGRpc2NvdXJhZ2VkIGJlY2F1c2UgdGhpcyB2YWx1ZSB3 aWxsIGNoYW5nZSBhY3Jvc3MgcmVib290cywKK2RlcGVuZGluZyBvbiB0aGUgZGV0ZWN0aW9uIG9y ZGVyIGluIHRoZSBPUy4KKworPWl0ZW0gQzxvcHRpb24+CisKK0N1cnJlbnRseSBvbmx5IHRoZSBv cHRpb24gdmFsdWUgImZlYXR1cmUtaG9zdCIgaXMgcmVjb2duaXplZC4gU0NTSSBjb21tYW5kCitl bXVsYXRpb24gaW4gYmFja2VuZCBkcml2ZXIgaXMgYnlwYXNzZWQgd2hlbiAiZmVhdHVyZS1ob3N0 IiBpcyBzcGVjaWZpZWQuCisKKz1iYWNrCisKKz1iYWNrCisKID1pdGVtIEI8dmZiPVsgIlZGQl9T UEVDX1NUUklORyIsICJWRkJfU1BFQ19TVFJJTkciLCAuLi5dPgogCiBTcGVjaWZpZXMgdGhlIHBh cmF2aXJ0dWFsIGZyYW1lYnVmZmVyIGRldmljZXMgd2hpY2ggc2hvdWxkIGJlIHN1cHBsaWVkCmRp ZmYgLS1naXQgYS9kb2NzL21hbi94bC5wb2QuMSBiL2RvY3MvbWFuL3hsLnBvZC4xCmluZGV4IDE2 NzgzYzguLjE5YmRiZmEgMTAwNjQ0Ci0tLSBhL2RvY3MvbWFuL3hsLnBvZC4xCisrKyBiL2RvY3Mv bWFuL3hsLnBvZC4xCkBAIC0xMzI4LDYgKzEzMjgsMjQgQEAgTGlzdCB2aXJ0dWFsIHRydXN0ZWQg cGxhdGZvcm0gbW9kdWxlcyBmb3IgYSBkb21haW4uCiAKID1iYWNrCiAKKz1oZWFkMiBQVlNDU0kg REVWSUNFUworCis9b3ZlciA0CisKKz1pdGVtIEI8c2NzaS1hdHRhY2g+IEk8ZG9tYWluLWlkPiBJ PHBkZXY+IEk8dmRldj4sSTxbZmVhdHVyZS1ob3N0XT4KKworQ3JlYXRlcyBhIG5ldyB2c2NzaSBk ZXZpY2UgaW4gdGhlIGRvbWFpbiBzcGVjaWZpZWQgYnkgSTxkb21haW4taWQ+LgorCis9aXRlbSBC PHNjc2ktZGV0YWNoPiBJPGRvbWFpbi1pZD4gSTx2ZGV2PgorCitSZW1vdmVzIHRoZSB2c2NzaSBk ZXZpY2UgZnJvbSBkb21haW4gc3BlY2lmaWVkIGJ5IEk8ZG9tYWluLWlkPi4KKworPWl0ZW0gQjxz Y3NpLWxpc3Q+IEk8ZG9tYWluLWlkPiBJPFtkb21haW4taWRdIC4uLj4KKworTGlzdCB2c2NzaSBk ZXZpY2VzIGZvciB0aGUgZG9tYWluIHNwZWNpZmllZCBieSBJPGRvbWFpbi1pZD4uCisKKz1iYWNr CisKID1oZWFkMSBQQ0kgUEFTUy1USFJPVUdICiAKID1vdmVyIDQKZGlmZiAtLWdpdCBhL3Rvb2xz L2xpYnhsL01ha2VmaWxlIGIvdG9vbHMvbGlieGwvTWFrZWZpbGUKaW5kZXggMWIxNjU5OC4uNzli Mzg2NyAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvTWFrZWZpbGUKKysrIGIvdG9vbHMvbGlieGwv TWFrZWZpbGUKQEAgLTkxLDYgKzkxLDcgQEAgZW5kaWYKIExJQlhMX0xJQlMgKz0gLWx5YWpsCiAK IExJQlhMX09CSlMgPSBmbGV4YXJyYXkubyBsaWJ4bC5vIGxpYnhsX2NyZWF0ZS5vIGxpYnhsX2Rt Lm8gbGlieGxfcGNpLm8gXAorCQkJbGlieGxfdnNjc2kubyBcCiAJCQlsaWJ4bF9kb20ubyBsaWJ4 bF9leGVjLm8gbGlieGxfeHNoZWxwLm8gbGlieGxfZGV2aWNlLm8gXAogCQkJbGlieGxfaW50ZXJu YWwubyBsaWJ4bF91dGlscy5vIGxpYnhsX3V1aWQubyBcCiAJCQlsaWJ4bF9qc29uLm8gbGlieGxf YW91dGlscy5vIGxpYnhsX251bWEubyBsaWJ4bF92bnVtYS5vIFwKQEAgLTEyMiw2ICsxMjMsNyBA QCBBVVRPSU5DUz0gbGlieGx1X2NmZ195LmggbGlieGx1X2NmZ19sLmggX2xpYnhsX2xpc3QuaCBf cGF0aHMuaCBcCiBBVVRPU1JDUz0gbGlieGx1X2NmZ195LmMgbGlieGx1X2NmZ19sLmMKIEFVVE9T UkNTICs9IF9saWJ4bF9zYXZlX21zZ3NfY2FsbG91dC5jIF9saWJ4bF9zYXZlX21zZ3NfaGVscGVy LmMKIExJQlhMVV9PQkpTID0gbGlieGx1X2NmZ195Lm8gbGlieGx1X2NmZ19sLm8gbGlieGx1X2Nm Zy5vIFwKKwlsaWJ4bHVfdnNjc2kubyBcCiAJbGlieGx1X2Rpc2tfbC5vIGxpYnhsdV9kaXNrLm8g bGlieGx1X3ZpZi5vIGxpYnhsdV9wY2kubwogJChMSUJYTFVfT0JKUyk6IENGTEFHUyArPSAkKENG TEFHU19saWJ4ZW5jdHJsKSAjIEZvciB4ZW50b29sbG9nLmgKIApkaWZmIC0tZ2l0IGEvdG9vbHMv bGlieGwvbGlieGwuYyBiL3Rvb2xzL2xpYnhsL2xpYnhsLmMKaW5kZXggNTExZWVmMS4uYWJlN2Q3 NSAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGwuYworKysgYi90b29scy9saWJ4bC9saWJ4 bC5jCkBAIC0yMDE0LDYgKzIwMTQsNDM3IEBAIHN0YXRpYyBpbnQgbGlieGxfX3Jlc29sdmVfZG9t aWQobGlieGxfX2djICpnYywgY29uc3QgY2hhciAqbmFtZSwKIH0KIAogLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KKworc3RhdGljIHZvaWQgbGlieGxfX2RldmljZV92c2NzaV9kZXZfYmFja2VuZF9y bShsaWJ4bF9fZ2MgKmdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxpYnhsX3ZzY3NpX2RldiAqdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB4c190cmFuc2FjdGlvbl90IHQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmVfcGF0aCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV2X3dhaXQpCit7CisgICAgY2hh ciAqcGF0aCwgKnZhbDsKKyAgICBsaWJ4bF9jdHggKmN0eCA9IGxpYnhsX19nY19vd25lcihnYyk7 CisKKyAgICBwYXRoID0gR0NTUFJJTlRGKCIlcy92c2NzaS1kZXZzL2Rldi0ldS9zdGF0ZSIsIGJl X3BhdGgsIHYtPnZzY3NpX2Rldl9pZCk7CisgICAgdmFsID0gbGlieGxfX3hzX3JlYWQoZ2MsIHQs IHBhdGgpOworICAgIExPRyhERUJVRywgIiVzIGlzICVzIiwgcGF0aCwgdmFsKTsKKyAgICBpZiAo dmFsICYmIHN0cmNtcCh2YWwsIEdDU1BSSU5URigiJWQiLCBkZXZfd2FpdCkpID09IDApIHsKKyAg ICAgICAgcGF0aCA9IEdDU1BSSU5URigiJXMvdnNjc2ktZGV2cy9kZXYtJXUvc3RhdGUiLCBiZV9w YXRoLCB2LT52c2NzaV9kZXZfaWQpOworICAgICAgICB4c19ybShjdHgtPnhzaCwgdCwgcGF0aCk7 CisgICAgICAgIHBhdGggPSBHQ1NQUklOVEYoIiVzL3ZzY3NpLWRldnMvZGV2LSV1L3AtZGV2bmFt ZSIsIGJlX3BhdGgsIHYtPnZzY3NpX2Rldl9pZCk7CisgICAgICAgIHhzX3JtKGN0eC0+eHNoLCB0 LCBwYXRoKTsKKyAgICAgICAgcGF0aCA9IEdDU1BSSU5URigiJXMvdnNjc2ktZGV2cy9kZXYtJXUv cC1kZXYiLCBiZV9wYXRoLCB2LT52c2NzaV9kZXZfaWQpOworICAgICAgICB4c19ybShjdHgtPnhz aCwgdCwgcGF0aCk7CisgICAgICAgIHBhdGggPSBHQ1NQUklOVEYoIiVzL3ZzY3NpLWRldnMvZGV2 LSV1L3YtZGV2IiwgYmVfcGF0aCwgdi0+dnNjc2lfZGV2X2lkKTsKKyAgICAgICAgeHNfcm0oY3R4 LT54c2gsIHQsIHBhdGgpOworICAgICAgICBwYXRoID0gR0NTUFJJTlRGKCIlcy92c2NzaS1kZXZz L2Rldi0ldSIsIGJlX3BhdGgsIHYtPnZzY3NpX2Rldl9pZCk7CisgICAgICAgIHhzX3JtKGN0eC0+ eHNoLCB0LCBwYXRoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBMT0coRVJST1IsICIlcyBoYXMg JXMsIGV4cGVjdGVkICVkIiwgcGF0aCwgdmFsLCBkZXZfd2FpdCk7CisgICAgfQorfQorCitzdGF0 aWMgaW50IGxpYnhsX19kZXZpY2VfdnNjc2lfZGV2X2JhY2tlbmRfc2V0KGxpYnhsX19nYyAqZ2Ms CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX3Zz Y3NpX2RldiAqdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZmxleGFycmF5X3QgKmJhY2spCit7CisgICAgaW50IHJjOworICAgIGxpYnhsX3ZzY3NpX2hj dGwgKmhjdGw7CisKKyAgICBzd2l0Y2ggKHYtPnBkZXYudHlwZSkgeworICAgICAgICBjYXNlIExJ QlhMX1ZTQ1NJX1BERVZfVFlQRV9XV046CisgICAgICAgICAgICBmbGV4YXJyYXlfYXBwZW5kX3Bh aXIoYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoInZz Y3NpLWRldnMvZGV2LSV1L3AtZGV2Iiwgdi0+dnNjc2lfZGV2X2lkKSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2LT5wZGV2LnUud3duLm0pOworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgIGNhc2UgTElCWExfVlNDU0lfUERFVl9UWVBFX0hDVEw6CisgICAgICAgICAgICBo Y3RsID0gJnYtPnBkZXYudS5oY3RsLm07CisgICAgICAgICAgICBmbGV4YXJyYXlfYXBwZW5kX3Bh aXIoYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoInZz Y3NpLWRldnMvZGV2LSV1L3AtZGV2Iiwgdi0+dnNjc2lfZGV2X2lkKSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiV1OiV1OiV1OiV1IiwgaGN0bC0+aHN0LCBo Y3RsLT5jaG4sIGhjdGwtPnRndCwgaGN0bC0+bHVuKSk7CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgY2FzZSBMSUJYTF9WU0NTSV9QREVWX1RZUEVfSU5WQUxJRDoKKyAgICAgICAgZGVmYXVs dDoKKyAgICAgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgICAgIGdvdG8gb3V0Owor ICAgIH0KKyAgICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIoYmFjaywgR0NTUFJJTlRGKCJ2c2NzaS1k ZXZzL2Rldi0ldS9wLWRldm5hbWUiLCB2LT52c2NzaV9kZXZfaWQpLAorICAgICAgICAgICAgICAg ICAgICAgICAgICB2LT5wZGV2LnBfZGV2bmFtZSk7CisgICAgZmxleGFycmF5X2FwcGVuZF9wYWly KGJhY2ssIEdDU1BSSU5URigidnNjc2ktZGV2cy9kZXYtJXUvdi1kZXYiLCB2LT52c2NzaV9kZXZf aWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiV1OiV1OiV1OiV1Iiwg di0+dmRldi5oc3QsIHYtPnZkZXYuY2huLCB2LT52ZGV2LnRndCwgdi0+dmRldi5sdW4pKTsKKyAg ICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIoYmFjaywgR0NTUFJJTlRGKCJ2c2NzaS1kZXZzL2Rldi0l dS9zdGF0ZSIsIHYtPnZzY3NpX2Rldl9pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdD U1BSSU5URigiJWQiLCBYZW5idXNTdGF0ZUluaXRpYWxpc2luZykpOworICAgIHJjID0gMDsKK291 dDoKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbGlieGxfX2RldmljZV92c2NzaV9u ZXdfYmFja2VuZChsaWJ4bF9fZWdjICplZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGlieGxfX2FvX2RldmljZSAqYW9kZXYsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpICp2c2NzaSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kb21haW5fY29u ZmlnICpkX2NvbmZpZykKK3sKKyAgICBTVEFURV9BT19HQyhhb2Rldi0+YW8pOworICAgIGludCBy YywgaTsKKyAgICBmbGV4YXJyYXlfdCAqYmFjazsKKyAgICBmbGV4YXJyYXlfdCAqZnJvbnQ7Cisg ICAgbGlieGxfdnNjc2lfZGV2ICp2OworICAgIHhzX3RyYW5zYWN0aW9uX3QgdCA9IFhCVF9OVUxM OworCisgICAgLyogUHJlYWxsb2Mga2V5K3ZhbHVlOiA0IHRvcGxldmVsICsgNCBwZXIgZGV2aWNl ICovCisgICAgaSA9IDIgKiAoNCArICg0ICogdnNjc2ktPm51bV92c2NzaV9kZXZzKSk7CisgICAg YmFjayA9IGZsZXhhcnJheV9tYWtlKGdjLCBpLCAxKTsKKyAgICBmcm9udCA9IGZsZXhhcnJheV9t YWtlKGdjLCAyICogMiwgMSk7CisKKyAgICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIoYmFjaywgImZy b250ZW5kLWlkIiwgR0NTUFJJTlRGKCIlZCIsIGFvZGV2LT5kZXYtPmRvbWlkKSk7CisgICAgZmxl eGFycmF5X2FwcGVuZF9wYWlyKGJhY2ssICJvbmxpbmUiLCAiMSIpOworICAgIGZsZXhhcnJheV9h cHBlbmRfcGFpcihiYWNrLCAic3RhdGUiLCBHQ1NQUklOVEYoIiVkIiwgWGVuYnVzU3RhdGVJbml0 aWFsaXNpbmcpKTsKKyAgICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIoYmFjaywgImZlYXR1cmUtaG9z dCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RlZmJvb2xfdmFsKHZzY3NpLT5m ZWF0dXJlX2hvc3QpID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiIDogIjAiKTsKKwor ICAgIGZsZXhhcnJheV9hcHBlbmRfcGFpcihmcm9udCwgImJhY2tlbmQtaWQiLCBHQ1NQUklOVEYo IiVkIiwgdnNjc2ktPmJhY2tlbmRfZG9taWQpKTsKKyAgICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIo ZnJvbnQsICJzdGF0ZSIsIEdDU1BSSU5URigiJWQiLCBYZW5idXNTdGF0ZUluaXRpYWxpc2luZykp OworCisgICAgZm9yIChpID0gMDsgaSA8IHZzY3NpLT5udW1fdnNjc2lfZGV2czsgaSsrKSB7Cisg ICAgICAgIHYgPSB2c2NzaS0+dnNjc2lfZGV2cyArIGk7CisgICAgICAgIGlmICh2LT5yZW1vdmUp CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX3ZzY3Np X2Rldl9iYWNrZW5kX3NldChnYywgdiwgYmFjayk7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7 CisgICAgfQorCisgICAgZm9yICg7OykgeworICAgICAgICByYyA9IGxpYnhsX194c190cmFuc2Fj dGlvbl9zdGFydChnYywgJnQpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgICAg IHJjID0gbGlieGxfX2RldmljZV9leGlzdHMoZ2MsIHQsIGFvZGV2LT5kZXYpOworICAgICAgICBp ZiAocmMgPCAwKSBnb3RvIG91dDsKKyAgICAgICAgaWYgKHJjID09IDEpIHsgICAgICAgICAgICAg IC8qIGFscmVhZHkgZXhpc3RzIGluIHhlbnN0b3JlICovCisgICAgICAgICAgICBMT0coRVJST1Is ICJkZXZpY2UgYWxyZWFkeSBleGlzdHMgaW4geGVuc3RvcmUiKTsKKyAgICAgICAgICAgIHJjID0g RVJST1JfREVWSUNFX0VYSVNUUzsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisK KyAgICAgICAgaWYgKGFvZGV2LT51cGRhdGVfanNvbikgeworICAgICAgICAgICAgcmMgPSBsaWJ4 bF9fc2V0X2RvbWFpbl9jb25maWd1cmF0aW9uKGdjLCBhb2Rldi0+ZGV2LT5kb21pZCwgZF9jb25m aWcpOworICAgICAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAg IGxpYnhsX19kZXZpY2VfZ2VuZXJpY19hZGQoZ2MsIHQsIGFvZGV2LT5kZXYsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX3hzX2t2c19vZl9mbGV4YXJyYXkoZ2MsIGJh Y2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYmFjay0+Y291bnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxpYnhsX194c19rdnNfb2ZfZmxleGFycmF5KGdjLCBmcm9udCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9udC0+Y291bnQp LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgICAgIHJj ID0gbGlieGxfX3hzX3RyYW5zYWN0aW9uX2NvbW1pdChnYywgJnQpOworICAgICAgICBpZiAoIXJj KSBicmVhazsKKyAgICAgICAgaWYgKHJjIDwgMCkgZ290byBvdXQ7CisgICAgfQorCisgICAgbGli eGxfX3dhaXRfZGV2aWNlX2Nvbm5lY3Rpb24oZWdjLCBhb2Rldik7CisgICAgcmMgPSAwOworCitv dXQ6CisgICAgbGlieGxfX3hzX3RyYW5zYWN0aW9uX2Fib3J0KGdjLCAmdCk7CisgICAgcmV0dXJu IHJjOworfQorCitzdGF0aWMgaW50IGxpYnhsX19kZXZpY2VfdnNjc2lfcmVjb25maWd1cmUobGli eGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxpYnhsX19hb19kZXZpY2UgKmFvZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaSAqdnNjc2ksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZG9tYWluX2NvbmZpZyAqZF9jb25maWcs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmVfcGF0 aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmRldl93 YWl0KQoreworICAgIFNUQVRFX0FPX0dDKGFvZGV2LT5hbyk7CisgICAgaW50IHJjLCBpLCBiZV9z dGF0ZSwgYmVfd2FpdDsKKyAgICBjaGFyICpkZXZfcGF0aCwgKnN0YXRlX3BhdGgsICpzdGF0ZV92 YWw7CisgICAgZmxleGFycmF5X3QgKmJhY2s7CisgICAgbGlieGxfdnNjc2lfZGV2ICp2OworICAg IHhzX3RyYW5zYWN0aW9uX3QgdCA9IFhCVF9OVUxMOworICAgIGJvb2wgZG9fcmVjb25maWd1cmUg PSBmYWxzZTsKKworICAgIC8qIFByZWFsbG9jIGtleSt2YWx1ZTogMSB0b3BsZXZlbCArIDQgcGVy IGRldmljZSAqLworICAgIGkgPSAyICogKDEgKyAoNCAqIHZzY3NpLT5udW1fdnNjc2lfZGV2cykp OworICAgIGJhY2sgPSBmbGV4YXJyYXlfbWFrZShnYywgaSwgMSk7CisKKyAgICBzdGF0ZV9wYXRo ID0gR0NTUFJJTlRGKCIlcy9zdGF0ZSIsIGJlX3BhdGgpOworCisgICAgZm9yICg7OykgeworICAg ICAgICByYyA9IGxpYnhsX194c190cmFuc2FjdGlvbl9zdGFydChnYywgJnQpOworICAgICAgICBp ZiAocmMpIGdvdG8gb3V0OworCisgICAgICAgIHN0YXRlX3ZhbCA9IGxpYnhsX194c19yZWFkKGdj LCB0LCBzdGF0ZV9wYXRoKTsKKyAgICAgICAgTE9HKERFQlVHLCAiJXMgaXMgJXMiLCBzdGF0ZV9w YXRoLCBzdGF0ZV92YWwpOworICAgICAgICBpZiAoIXN0YXRlX3ZhbCkgeworICAgICAgICAgICAg cmMgPSBFUlJPUl9GQUlMOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKworICAg ICAgICBiZV9zdGF0ZSA9IGF0b2koc3RhdGVfdmFsKTsKKyAgICAgICAgc3dpdGNoIChiZV9zdGF0 ZSkgeworICAgICAgICAgICAgY2FzZSBYZW5idXNTdGF0ZVVua25vd246CisgICAgICAgICAgICBj YXNlIFhlbmJ1c1N0YXRlSW5pdGlhbGlzaW5nOgorICAgICAgICAgICAgY2FzZSBYZW5idXNTdGF0 ZUNsb3Npbmc6CisgICAgICAgICAgICBjYXNlIFhlbmJ1c1N0YXRlQ2xvc2VkOgorICAgICAgICAg ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAvKiBUaGUgYmFja2VuZCBpcyBpbiBhIGJhZCBz dGF0ZSAqLworICAgICAgICAgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgICAgICAg ICBnb3RvIG91dDsKKyAgICAgICAgICAgIGNhc2UgWGVuYnVzU3RhdGVJbml0aWFsaXNlZDoKKyAg ICAgICAgICAgIGNhc2UgWGVuYnVzU3RhdGVSZWNvbmZpZ3VyaW5nOgorICAgICAgICAgICAgY2Fz ZSBYZW5idXNTdGF0ZVJlY29uZmlndXJlZDoKKyAgICAgICAgICAgICAgICAvKiBCYWNrZW5kIGlz IHN0aWxsIGJ1c3ksIGNhbGxlciBoYXMgdG8gcmV0cnkgKi8KKyAgICAgICAgICAgICAgICByYyA9 IEVSUk9SX05PVF9SRUFEWTsKKyAgICAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgICAg IGNhc2UgWGVuYnVzU3RhdGVJbml0V2FpdDoKKyAgICAgICAgICAgICAgICAvKiBUaGUgZnJvbnRl bmQgZGlkIG5vdCBjb25uZWN0IHlldCAqLworICAgICAgICAgICAgICAgIGJlX3dhaXQgPSBYZW5i dXNTdGF0ZUluaXRXYWl0OworICAgICAgICAgICAgICAgIGlmIChkZXZfd2FpdCkKKyAgICAgICAg ICAgICAgICAgICAgKmRldl93YWl0ID0gWGVuYnVzU3RhdGVJbml0aWFsaXNpbmc7CisgICAgICAg ICAgICAgICAgZG9fcmVjb25maWd1cmUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgIGNhc2UgWGVuYnVzU3RhdGVDb25uZWN0ZWQ6CisgICAgICAgICAgICAgICAg LyogVGhlIGJhY2tlbmQgY2FuIGhhbmRsZSByZWNvbmZpZ3VyZSAqLworICAgICAgICAgICAgICAg IGJlX3dhaXQgPSBYZW5idXNTdGF0ZUNvbm5lY3RlZDsKKyAgICAgICAgICAgICAgICBpZiAoZGV2 X3dhaXQpCisgICAgICAgICAgICAgICAgICAgICpkZXZfd2FpdCA9IFhlbmJ1c1N0YXRlQ2xvc2Vk OworICAgICAgICAgICAgICAgIGZsZXhhcnJheV9hcHBlbmRfcGFpcihiYWNrLCAic3RhdGUiLCBH Q1NQUklOVEYoIiVkIiwgWGVuYnVzU3RhdGVSZWNvbmZpZ3VyaW5nKSk7CisgICAgICAgICAgICAg ICAgZG9fcmVjb25maWd1cmUgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICB9CisKKyAgICAgICAgLyogQXBwZW5kIG5ldyBkZXZpY2Ugb3IgdHJpZ2dlciByZW1vdmFsICov CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCB2c2NzaS0+bnVtX3ZzY3NpX2RldnM7IGkrKykgewor ICAgICAgICAgICAgdiA9IHZzY3NpLT52c2NzaV9kZXZzICsgaTsKKyAgICAgICAgICAgIHVuc2ln bmVkIGludCBuYiA9IDA7CisgICAgICAgICAgICBkZXZfcGF0aCA9IEdDU1BSSU5URigiJXMvdnNj c2ktZGV2cy9kZXYtJXUiLCBiZV9wYXRoLCB2LT52c2NzaV9kZXZfaWQpOworICAgICAgICAgICAg LyogUHJlc2VydmUgZXhpc3RpbmcgZGV2aWNlICovCisgICAgICAgICAgICBpZiAobGlieGxfX3hz X2RpcmVjdG9yeShnYywgWEJUX05VTEwsIGRldl9wYXRoLCAmbmIpICYmIG5iKSB7CisgICAgICAg ICAgICAgICAgLyogVHJpZ2dlciBkZXZpY2UgcmVtb3ZhbCBieSBmb3J3YXJkaW5nIHN0YXRlIHRv IFhlbmJ1c1N0YXRlQ2xvc2luZyAqLworICAgICAgICAgICAgICAgIGlmIChkb19yZWNvbmZpZ3Vy ZSAmJiB2LT5yZW1vdmUpCisgICAgICAgICAgICAgICAgICAgIGZsZXhhcnJheV9hcHBlbmRfcGFp cihiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJ TlRGKCJ2c2NzaS1kZXZzL2Rldi0ldS9zdGF0ZSIsIHYtPnZzY3NpX2Rldl9pZCksCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVkIiwgWGVuYnVz U3RhdGVDbG9zaW5nKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICByYyA9IGxpYnhsX19kZXZpY2VfdnNjc2lfZGV2X2JhY2tlbmRfc2V0KGdj LCB2LCBiYWNrKTsKKyAgICAgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisgICAgICAgIH0KKwor ICAgICAgICBpZiAoYW9kZXYtPnVwZGF0ZV9qc29uKSB7CisgICAgICAgICAgICByYyA9IGxpYnhs X19zZXRfZG9tYWluX2NvbmZpZ3VyYXRpb24oZ2MsIGFvZGV2LT5kZXYtPmRvbWlkLCBkX2NvbmZp Zyk7CisgICAgICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworICAgICAgICB9CisKKyAgICAgICAg bGlieGxfX3hzX3dyaXRldihnYywgdCwgYmVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICBsaWJ4bF9feHNfa3ZzX29mX2ZsZXhhcnJheShnYywgYmFjaywgYmFjay0+Y291bnQpKTsKKwor ICAgICAgICByYyA9IGxpYnhsX194c190cmFuc2FjdGlvbl9jb21taXQoZ2MsICZ0KTsKKyAgICAg ICAgaWYgKCFyYykgYnJlYWs7CisgICAgICAgIGlmIChyYyA8IDApIGdvdG8gb3V0OworICAgIH0K KworICAgIGlmIChkb19yZWNvbmZpZ3VyZSkgeworICAgICAgICAvKiBQb2xsIGZvciBiYWNrZW5k IGNoYW5nZSAqLworICAgICAgICByYyA9IGxpYnhsX193YWl0X2Zvcl9iYWNrZW5kKGdjLCBiZV9w YXRoLCBHQ1NQUklOVEYoIiVkIiwgYmVfd2FpdCkpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0 OworICAgIH0KKyAgICByYyA9IDA7CisKK291dDoKKyAgICBMT0coRVJST1IsICIldTogcmMgJWQi LCBfX0xJTkVfXywgcmMpOworICAgIGxpYnhsX194c190cmFuc2FjdGlvbl9hYm9ydChnYywgJnQp OworICAgIHJldHVybiByYzsKK30KKworc3RhdGljIGludCBsaWJ4bF9fZGV2aWNlX2Zyb21fdnNj c2kobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2kgKnZzY3NpLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2RldmljZSAqZGV2aWNlKQoreworICAgIGRldmlj ZS0+YmFja2VuZF9kb21pZCA9IHZzY3NpLT5iYWNrZW5kX2RvbWlkOworICAgIGRldmljZS0+ZGV2 aWQgICAgICAgICA9IHZzY3NpLT5kZXZpZDsKKyAgICBkZXZpY2UtPmRvbWlkICAgICAgICAgPSBk b21pZDsKKyAgICBkZXZpY2UtPmJhY2tlbmRfa2luZCAgPSBMSUJYTF9fREVWSUNFX0tJTkRfVlND U0k7CisgICAgZGV2aWNlLT5raW5kICAgICAgICAgID0gTElCWExfX0RFVklDRV9LSU5EX1ZTQ1NJ OworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgbGlieGxfX2RldmljZV92c2NzaV9hZGQobGli eGxfX2VnYyAqZWdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGlieGxfZGV2aWNlX3ZzY3NpICp2c2NzaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGlieGxfX2FvX2RldmljZSAqYW9kZXYpCit7CisgICAgU1RBVEVfQU9fR0MoYW9kZXYtPmFv KTsKKyAgICBsaWJ4bF9fZGV2aWNlICpkZXZpY2U7CisgICAgY2hhciAqYmVfcGF0aDsKKyAgICB1 bnNpZ25lZCBpbnQgYmVfZGlycyA9IDA7CisgICAgaW50IHJjOworICAgIGxpYnhsX2RvbWFpbl9j b25maWcgZF9jb25maWc7CisgICAgbGlieGxfZGV2aWNlX3ZzY3NpIHZzY3NpX3NhdmVkOworICAg IGxpYnhsX19kb21haW5fdXNlcmRhdGFfbG9jayAqbG9jayA9IE5VTEw7CisKKyAgICBsaWJ4bF9k b21haW5fY29uZmlnX2luaXQoJmRfY29uZmlnKTsKKworICAgIC8qIEluIGNhc2Ugb2YgdnNjc2kg dGhlIGNvcHkgcmVtYWlucyBpZGVudGljYWwgdG8gdGhlIHByb3ZpZGVkIGlucHV0ICovCisgICAg bGlieGxfZGV2aWNlX3ZzY3NpX2luaXQoJnZzY3NpX3NhdmVkKTsKKyAgICBsaWJ4bF9kZXZpY2Vf dnNjc2lfY29weShDVFgsICZ2c2NzaV9zYXZlZCwgdnNjc2kpOworCisgICAgaWYgKHZzY3NpLT5k ZXZpZCA9PSAtMSkgeworICAgICAgICBpZiAoKHZzY3NpLT5kZXZpZCA9IGxpYnhsX19kZXZpY2Vf bmV4dGlkKGdjLCBkb21pZCwgInZzY3NpIikpIDwgMCkgeworICAgICAgICAgICAgcmMgPSBFUlJP Ul9GQUlMOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv KiBBZGp1c3QgY29weSAqLworICAgIGxpYnhsX191cGRhdGVfY29uZmlnX3ZzY3NpKGdjLCAmdnNj c2lfc2F2ZWQsIHZzY3NpKTsKKworICAgIEdDTkVXKGRldmljZSk7CisgICAgcmMgPSBsaWJ4bF9f ZGV2aWNlX2Zyb21fdnNjc2koZ2MsIGRvbWlkLCB2c2NzaSwgZGV2aWNlKTsKKyAgICBpZiAocmMp IGdvdG8gb3V0OworCisgICAgaWYgKGFvZGV2LT51cGRhdGVfanNvbikgeworICAgICAgICBsb2Nr ID0gbGlieGxfX2xvY2tfZG9tYWluX3VzZXJkYXRhKGdjLCBkb21pZCk7CisgICAgICAgIGlmICgh bG9jaykgeworICAgICAgICAgICAgcmMgPSBFUlJPUl9MT0NLX0ZBSUw7CisgICAgICAgICAgICBn b3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAgIHJjID0gbGlieGxfX2dldF9kb21haW5fY29u ZmlndXJhdGlvbihnYywgZG9taWQsICZkX2NvbmZpZyk7CisgICAgICAgIGlmIChyYykgZ290byBv dXQ7CisKKyAgICAgICAgLyogUmVwbGFjZSBvciBhcHBlbmQgdGhlIGNvcHkgdG8gdGhlIGRvbWFp biBjb25maWcgKi8KKyAgICAgICAgREVWSUNFX0FERCh2c2NzaSwgdnNjc2lzLCBkb21pZCwgJnZz Y3NpX3NhdmVkLCBDT01QQVJFX1ZTQ1NJLCAmZF9jb25maWcpOworICAgIH0KKworICAgIGFvZGV2 LT5kZXYgPSBkZXZpY2U7CisKKyAgICBiZV9wYXRoID0gbGlieGxfX2RldmljZV9iYWNrZW5kX3Bh dGgoZ2MsIGFvZGV2LT5kZXYpOworICAgIGlmIChsaWJ4bF9feHNfZGlyZWN0b3J5KGdjLCBYQlRf TlVMTCwgYmVfcGF0aCwgJmJlX2RpcnMpKSB7CisgICAgICAgIHJjID0gbGlieGxfX2RldmljZV92 c2NzaV9yZWNvbmZpZ3VyZShlZ2MsIGFvZGV2LCB2c2NzaSwgJmRfY29uZmlnLCBiZV9wYXRoLCBO VUxMKTsKKyAgICAgICAgaWYgKHJjKQorICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIC8q IE5vdGlmeSB0aGF0IHRoaXMgaXMgZG9uZSAqLworICAgICAgICBhb2Rldi0+Y2FsbGJhY2soZWdj LCBhb2Rldik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX3ZzY3Np X25ld19iYWNrZW5kKGVnYywgYW9kZXYsIHZzY3NpLCAmZF9jb25maWcpOworICAgICAgICBpZiAo cmMpCisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICByYyA9IDA7CitvdXQ6Cisg ICAgaWYgKGxvY2spIGxpYnhsX191bmxvY2tfZG9tYWluX3VzZXJkYXRhKGxvY2spOworICAgIGxp YnhsX2RldmljZV92c2NzaV9kaXNwb3NlKCZ2c2NzaV9zYXZlZCk7CisgICAgbGlieGxfZG9tYWlu X2NvbmZpZ19kaXNwb3NlKCZkX2NvbmZpZyk7CisgICAgYW9kZXYtPnJjID0gcmM7CisgICAgaWYg KHJjKSBhb2Rldi0+Y2FsbGJhY2soZWdjLCBhb2Rldik7CisgICAgcmV0dXJuOworfQorCitzdGF0 aWMgdm9pZCBsaWJ4bF9fZGV2aWNlX3ZzY3NpX2Rldl9ybShsaWJ4bF9fZWdjICplZ2MsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2kgKnZz Y3NpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2FvX2Rl dmljZSAqYW9kZXYpCit7CisgICAgU1RBVEVfQU9fR0MoYW9kZXYtPmFvKTsKKyAgICBjaGFyICpi ZV9wYXRoOworICAgIGludCByYywgaSwgZGV2X3dhaXQ7CisgICAgbGlieGxfZG9tYWluX2NvbmZp ZyBkX2NvbmZpZzsKKyAgICBsaWJ4bF9fZG9tYWluX3VzZXJkYXRhX2xvY2sgKmxvY2sgPSBOVUxM OworICAgIGxpYnhsX3ZzY3NpX2RldiAqdjsKKyAgICB4c190cmFuc2FjdGlvbl90IHQgPSBYQlRf TlVMTDsKKworICAgIGxpYnhsX2RvbWFpbl9jb25maWdfaW5pdCgmZF9jb25maWcpOworCisgICAg aWYgKHZzY3NpLT5kZXZpZCA9PSAtMSkgeworICAgICAgICByYyA9IEVSUk9SX0lOVkFMOworICAg ICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICAvKiBObyBvdGhlciBjb2RlIHdpbGwgdHJhdmVy c2UgZGV2aWNlIGxpc3QsIHVwZGF0ZSBqc29uIHdpdGggcmVtb3ZhbCBpbmZvICovCisgICAgaWYg KGFvZGV2LT51cGRhdGVfanNvbikgeworICAgICAgICBsb2NrID0gbGlieGxfX2xvY2tfZG9tYWlu X3VzZXJkYXRhKGdjLCBhb2Rldi0+ZGV2LT5kb21pZCk7CisgICAgICAgIGlmICghbG9jaykgewor ICAgICAgICAgICAgcmMgPSBFUlJPUl9MT0NLX0ZBSUw7CisgICAgICAgICAgICBnb3RvIG91dDsK KyAgICAgICAgfQorCisgICAgICAgIHJjID0gbGlieGxfX2dldF9kb21haW5fY29uZmlndXJhdGlv bihnYywgYW9kZXYtPmRldi0+ZG9taWQsICZkX2NvbmZpZyk7CisgICAgICAgIGlmIChyYykgZ290 byBvdXQ7CisKKyAgICAgICAgLyogUmVwbGFjZSB0aGUgaXRlbSBpbiB0aGUgZG9tYWluIGNvbmZp ZyAqLworICAgICAgICBERVZJQ0VfQUREKHZzY3NpLCB2c2NzaXMsIGFvZGV2LT5kZXYtPmRvbWlk LCB2c2NzaSwgQ09NUEFSRV9WU0NTSSwgJmRfY29uZmlnKTsKKyAgICB9CisKKyAgICBiZV9wYXRo ID0gbGlieGxfX2RldmljZV9iYWNrZW5kX3BhdGgoZ2MsIGFvZGV2LT5kZXYpOworICAgIHJjID0g bGlieGxfX2RldmljZV92c2NzaV9yZWNvbmZpZ3VyZShlZ2MsIGFvZGV2LCB2c2NzaSwgJmRfY29u ZmlnLCBiZV9wYXRoLCAmZGV2X3dhaXQpOworICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICBm b3IgKDs7KSB7CisgICAgICAgIHJjID0gbGlieGxfX3hzX3RyYW5zYWN0aW9uX3N0YXJ0KGdjLCAm dCk7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8 IHZzY3NpLT5udW1fdnNjc2lfZGV2czsgaSsrKSB7CisgICAgICAgICAgICB2ID0gdnNjc2ktPnZz Y3NpX2RldnMgKyBpOworICAgICAgICAgICAgaWYgKHYtPnJlbW92ZSkKKyAgICAgICAgICAgICAg ICBsaWJ4bF9fZGV2aWNlX3ZzY3NpX2Rldl9iYWNrZW5kX3JtKGdjLCB2LCB0LCBiZV9wYXRoLCBk ZXZfd2FpdCk7CisgICAgICAgIH0KKworICAgICAgICByYyA9IGxpYnhsX194c190cmFuc2FjdGlv bl9jb21taXQoZ2MsICZ0KTsKKyAgICAgICAgaWYgKCFyYykgYnJlYWs7CisgICAgICAgIGlmIChy YyA8IDApIGdvdG8gb3V0OworICAgIH0KKworICAgIHJjID0gMDsKKworb3V0OgorICAgIGlmIChs b2NrKSBsaWJ4bF9fdW5sb2NrX2RvbWFpbl91c2VyZGF0YShsb2NrKTsKKyAgICBsaWJ4bF9kb21h aW5fY29uZmlnX2Rpc3Bvc2UoJmRfY29uZmlnKTsKKyAgICBhb2Rldi0+cmMgPSByYzsKKyAgICAv KiBOb3RpZnkgdGhhdCB0aGlzIGlzIGRvbmUgKi8KKyAgICBhb2Rldi0+Y2FsbGJhY2soZWdjLCBh b2Rldik7Cit9CisKKy8qIEV4dGVuZGVkIHZhcmlhbnQgb2YgREVGSU5FX0RFVklDRV9SRU1PVkUg dG8gaGFuZGxlIHJlY29uZmlndXJlICovCitpbnQgbGlieGxfZGV2aWNlX3ZzY3NpX3JlbW92ZShs aWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsaWJ4bF9kZXZpY2VfdnNjc2kgKnZzY3NpLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgbGlieGxfYXN5bmNvcF9ob3cgKmFvX2hvdykKK3sKKyAgICBBT19DUkVBVEUo Y3R4LCBkb21pZCwgYW9faG93KTsKKyAgICBsaWJ4bF9fZGV2aWNlICpkZXZpY2U7CisgICAgbGli eGxfX2FvX2RldmljZSAqYW9kZXY7CisgICAgaW50IHJjLCBpOworICAgIHVuc2lnbmVkIGludCBy ZW1haW5pbmcgPSB2c2NzaS0+bnVtX3ZzY3NpX2RldnM7CisKKyAgICBHQ05FVyhkZXZpY2UpOwor ICAgIHJjID0gbGlieGxfX2RldmljZV9mcm9tX3ZzY3NpKGdjLCBkb21pZCwgdnNjc2ksIGRldmlj ZSk7CisgICAgaWYgKHJjICE9IDApIGdvdG8gb3V0OworCisgICAgR0NORVcoYW9kZXYpOworICAg IGxpYnhsX19wcmVwYXJlX2FvX2RldmljZShhbywgYW9kZXYpOworICAgIGFvZGV2LT5hY3Rpb24g PSBMSUJYTF9fREVWSUNFX0FDVElPTl9SRU1PVkU7CisgICAgYW9kZXYtPmRldiA9IGRldmljZTsK KyAgICBhb2Rldi0+Y2FsbGJhY2sgPSBkZXZpY2VfYWRkcm1fYW9jb21wbGV0ZTsKKyAgICBhb2Rl di0+Zm9yY2UgPSAwOworCisgICAgZm9yIChpID0gMDsgaSA8IHZzY3NpLT5udW1fdnNjc2lfZGV2 czsgaSsrKSB7CisgICAgICAgIGlmICh2c2NzaS0+dnNjc2lfZGV2c1tpXS5yZW1vdmUpCisgICAg ICAgICAgICByZW1haW5pbmctLTsKKyAgICB9CisKKyAgICBMT0coREVCVUcsICIldTogdl9oc3Qg JXUsICV1IG9mICV1IHJlbWFpbmluZyIsIGRvbWlkLCB2c2NzaS0+dl9oc3QsIHJlbWFpbmluZywg dnNjc2ktPm51bV92c2NzaV9kZXZzKTsKKyAgICBpZiAocmVtYWluaW5nKQorICAgICAgICBsaWJ4 bF9fZGV2aWNlX3ZzY3NpX2Rldl9ybShlZ2MsIHZzY3NpLCBhb2Rldik7CisgICAgZWxzZQorICAg ICAgICBsaWJ4bF9faW5pdGlhdGVfZGV2aWNlX3JlbW92ZShlZ2MsIGFvZGV2KTsKKworb3V0Ogor ICAgIGlmIChyYykgcmV0dXJuIEFPX0FCT1JUKHJjKTsKKyAgICByZXR1cm4gQU9fSU5QUk9HUkVT UzsKK30KKwogaW50IGxpYnhsX19kZXZpY2VfdnRwbV9zZXRkZWZhdWx0KGxpYnhsX19nYyAqZ2Ms IGxpYnhsX2RldmljZV92dHBtICp2dHBtKQogewogICAgIGludCByYzsKQEAgLTQxNTgsNiArNDU4 OSw3IEBAIG91dDoKICAqIGxpYnhsX2RldmljZV9kaXNrX2Rlc3Ryb3kKICAqIGxpYnhsX2Rldmlj ZV9uaWNfcmVtb3ZlCiAgKiBsaWJ4bF9kZXZpY2VfbmljX2Rlc3Ryb3kKKyAqIGxpYnhsX2Rldmlj ZV92c2NzaV9kZXN0cm95CiAgKiBsaWJ4bF9kZXZpY2VfdnRwbV9yZW1vdmUKICAqIGxpYnhsX2Rl dmljZV92dHBtX2Rlc3Ryb3kKICAqIGxpYnhsX2RldmljZV92a2JfcmVtb3ZlCkBAIC00MjAyLDYg KzQ2MzQsOSBAQCBERUZJTkVfREVWSUNFX1JFTU9WRShkaXNrLCBkZXN0cm95LCAxKQogREVGSU5F X0RFVklDRV9SRU1PVkUobmljLCByZW1vdmUsIDApCiBERUZJTkVfREVWSUNFX1JFTU9WRShuaWMs IGRlc3Ryb3ksIDEpCiAKKy8qIHZzY3NpICovCitERUZJTkVfREVWSUNFX1JFTU9WRSh2c2NzaSwg ZGVzdHJveSwgMSkKKwogLyogdmtiICovCiBERUZJTkVfREVWSUNFX1JFTU9WRSh2a2IsIHJlbW92 ZSwgMCkKIERFRklORV9ERVZJQ0VfUkVNT1ZFKHZrYiwgZGVzdHJveSwgMSkKQEAgLTQyMjcsNiAr NDY2Miw3IEBAIERFRklORV9ERVZJQ0VfUkVNT1ZFKHZ0cG0sIGRlc3Ryb3ksIDEpCiAvKiBUaGUg Zm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZDoKICAqIGxpYnhsX2RldmljZV9kaXNrX2Fk ZAogICogbGlieGxfZGV2aWNlX25pY19hZGQKKyAqIGxpYnhsX2RldmljZV92c2NzaV9hZGQKICAq IGxpYnhsX2RldmljZV92dHBtX2FkZAogICovCiAKQEAgLTQyNTYsNiArNDY5Miw5IEBAIERFRklO RV9ERVZJQ0VfQUREKGRpc2spCiAvKiBuaWMgKi8KIERFRklORV9ERVZJQ0VfQUREKG5pYykKIAor LyogdnNjc2kgKi8KK0RFRklORV9ERVZJQ0VfQUREKHZzY3NpKQorCiAvKiB2dHBtICovCiBERUZJ TkVfREVWSUNFX0FERCh2dHBtKQogCkBAIC02NzQwLDYgKzcxNzksOCBAQCBpbnQgbGlieGxfcmV0 cmlldmVfZG9tYWluX2NvbmZpZ3VyYXRpb24obGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlk LAogCiAgICAgTUVSR0UobmljLCBuaWNzLCBDT01QQVJFX0RFVklELCB7fSk7CiAKKyAgICBNRVJH RSh2c2NzaSwgdnNjc2lzLCBDT01QQVJFX1ZTQ1NJLCB7fSk7CisKICAgICBNRVJHRSh2dHBtLCB2 dHBtcywgQ09NUEFSRV9ERVZJRCwge30pOwogCiAgICAgTUVSR0UocGNpLCBwY2lkZXZzLCBDT01Q QVJFX1BDSSwge30pOwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGwuaCBiL3Rvb2xzL2xp YnhsL2xpYnhsLmgKaW5kZXggNmJjNzVjNS4uYzU5NDQwMiAxMDA2NDQKLS0tIGEvdG9vbHMvbGli eGwvbGlieGwuaAorKysgYi90b29scy9saWJ4bC9saWJ4bC5oCkBAIC03MzYsNiArNzM2LDEzIEBA IHZvaWQgbGlieGxfbWFjX2NvcHkobGlieGxfY3R4ICpjdHgsIGxpYnhsX21hYyAqZHN0LCBsaWJ4 bF9tYWMgKnNyYyk7CiAjZGVmaW5lIExJQlhMX0hBVkVfUFNSX01CTSAxCiAjZW5kaWYKIAorLyoK KyAqIExJQlhMX0hBVkVfVlNDU0kKKyAqCisgKiBJZiB0aGlzIGlzIGRlZmluZWQsIHRoZSBQViBT Q1NJIGZlYXR1cmUgaXMgc3VwcG9ydGVkLgorICovCisjZGVmaW5lIExJQlhMX0hBVkVfVlNDU0kg MQorCiB0eXBlZGVmIGNoYXIgKipsaWJ4bF9zdHJpbmdfbGlzdDsKIHZvaWQgbGlieGxfc3RyaW5n X2xpc3RfZGlzcG9zZShsaWJ4bF9zdHJpbmdfbGlzdCAqc2wpOwogaW50IGxpYnhsX3N0cmluZ19s aXN0X2xlbmd0aChjb25zdCBsaWJ4bF9zdHJpbmdfbGlzdCAqc2wpOwpAQCAtMTI1Miw2ICsxMjU5 LDI2IEBAIGludCBsaWJ4bF9kZXZpY2VfY2hhbm5lbF9nZXRpbmZvKGxpYnhsX2N0eCAqY3R4LCB1 aW50MzJfdCBkb21pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2Rl dmljZV9jaGFubmVsICpjaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bGlieGxfY2hhbm5lbGluZm8gKmNoYW5uZWxpbmZvKTsKIAorLyogVmlydHVhbCBTQ1NJICovCitp bnQgbGlieGxfZGV2aWNlX3ZzY3NpX2FkZChsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2kgKnZzY3NpLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlieGxfYXN5bmNvcF9ob3cgKmFvX2hv dykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlhMX0VYVEVSTkFMX0NBTExFUlNfT05M WTsKK2ludCBsaWJ4bF9kZXZpY2VfdnNjc2lfcmVtb3ZlKGxpYnhsX2N0eCAqY3R4LCB1aW50MzJf dCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2Nz aSAqdnNjc2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4bF9hc3lu Y29wX2hvdyAqYW9faG93KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCWExfRVhU RVJOQUxfQ0FMTEVSU19PTkxZOworaW50IGxpYnhsX2RldmljZV92c2NzaV9kZXN0cm95KGxpYnhs X2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsaWJ4bF9kZXZpY2VfdnNjc2kgKnZzY3NpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGxpYnhsX2FzeW5jb3BfaG93ICphb19ob3cpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTElCWExfRVhURVJOQUxfQ0FMTEVSU19PTkxZOworCitsaWJ4bF9kZXZpY2Vf dnNjc2kgKmxpYnhsX2RldmljZV92c2NzaV9saXN0KGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBk b21pZCwgaW50ICpudW0pOworaW50IGxpYnhsX2RldmljZV92c2NzaV9nZXRpbmZvKGxpYnhsX2N0 eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs aWJ4bF9kZXZpY2VfdnNjc2kgKnZzY3NpX2hvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbGlieGxfdnNjc2lfZGV2ICp2c2NzaV9kZXYsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfdnNjc2lpbmZvICp2c2NzaWluZm8pOworCiAvKiBWaXJ0dWFsIFRQTXMg Ki8KIGludCBsaWJ4bF9kZXZpY2VfdnRwbV9hZGQobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRv bWlkLCBsaWJ4bF9kZXZpY2VfdnRwbSAqdnRwbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgbGlieGxfYXN5bmNvcF9ob3cgKmFvX2hvdykKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhs L2xpYnhsX2NyZWF0ZS5jIGIvdG9vbHMvbGlieGwvbGlieGxfY3JlYXRlLmMKaW5kZXggZTVhMzQz Zi4uZjY3YjRjZSAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfY3JlYXRlLmMKKysrIGIv dG9vbHMvbGlieGwvbGlieGxfY3JlYXRlLmMKQEAgLTExNTcsNiArMTE1Nyw3IEBAIHN0YXRpYyB2 b2lkIGRvbWNyZWF0ZV9yZWJ1aWxkX2RvbmUobGlieGxfX2VnYyAqZWdjLAogICAgIGxpYnhsX19t dWx0aWRldl9iZWdpbihhbywgJmRjcy0+bXVsdGlkZXYpOwogICAgIGRjcy0+bXVsdGlkZXYuY2Fs bGJhY2sgPSBkb21jcmVhdGVfbGF1bmNoX2RtOwogICAgIGxpYnhsX19hZGRfZGlza3MoZWdjLCBh bywgZG9taWQsIGRfY29uZmlnLCAmZGNzLT5tdWx0aWRldik7CisgICAgbGlieGxfX2FkZF92c2Nz aXMoZWdjLCBhbywgZG9taWQsIGRfY29uZmlnLCAmZGNzLT5tdWx0aWRldik7CiAgICAgbGlieGxf X211bHRpZGV2X3ByZXBhcmVkKGVnYywgJmRjcy0+bXVsdGlkZXYsIDApOwogCiAgICAgcmV0dXJu OwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfZGV2aWNlLmMgYi90b29scy9saWJ4bC9s aWJ4bF9kZXZpY2UuYwppbmRleCAwYzA2ZGM0Li4xMTFlMzQ4IDEwMDY0NAotLS0gYS90b29scy9s aWJ4bC9saWJ4bF9kZXZpY2UuYworKysgYi90b29scy9saWJ4bC9saWJ4bF9kZXZpY2UuYwpAQCAt NTQzLDYgKzU0Myw3IEBAIHZvaWQgbGlieGxfX211bHRpZGV2X3ByZXBhcmVkKGxpYnhsX19lZ2Mg KmVnYywKICAqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBkZWZpbmVkOgogICogbGlieGxf X2FkZF9kaXNrcwogICogbGlieGxfX2FkZF9uaWNzCisgKiBsaWJ4bF9fYWRkX3ZzY3NpcwogICog bGlieGxfX2FkZF92dHBtcwogICovCiAKQEAgLTU2Miw2ICs1NjMsNyBAQCB2b2lkIGxpYnhsX19t dWx0aWRldl9wcmVwYXJlZChsaWJ4bF9fZWdjICplZ2MsCiAKIERFRklORV9ERVZJQ0VTX0FERChk aXNrKQogREVGSU5FX0RFVklDRVNfQUREKG5pYykKK0RFRklORV9ERVZJQ0VTX0FERCh2c2NzaSkK IERFRklORV9ERVZJQ0VTX0FERCh2dHBtKQogCiAjdW5kZWYgREVGSU5FX0RFVklDRVNfQURECmRp ZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF9pbnRlcm5hbC5oIGIvdG9vbHMvbGlieGwvbGli eGxfaW50ZXJuYWwuaAppbmRleCA5YzIyMzA5Li5kMjc5MzZhIDEwMDY0NAotLS0gYS90b29scy9s aWJ4bC9saWJ4bF9pbnRlcm5hbC5oCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX2ludGVybmFsLmgK QEAgLTI0MTMsNiArMjQxMywxMCBAQCBfaGlkZGVuIHZvaWQgbGlieGxfX2RldmljZV9uaWNfYWRk KGxpYnhsX19lZ2MgKmVnYywgdWludDMyX3QgZG9taWQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxpYnhsX2RldmljZV9uaWMgKm5pYywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGlieGxfX2FvX2RldmljZSAqYW9kZXYpOwogCitfaGlkZGVuIHZvaWQg bGlieGxfX2RldmljZV92c2NzaV9hZGQobGlieGxfX2VnYyAqZWdjLCB1aW50MzJfdCBkb21pZCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2kg KnZzY3NpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19hb19k ZXZpY2UgKmFvZGV2KTsKKwogX2hpZGRlbiB2b2lkIGxpYnhsX19kZXZpY2VfdnRwbV9hZGQobGli eGxfX2VnYyAqZWdjLCB1aW50MzJfdCBkb21pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfZGV2aWNlX3Z0cG0gKnZ0cG0sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxpYnhsX19hb19kZXZpY2UgKmFvZGV2KTsKQEAgLTMwMzcsNiArMzA0MSwx MCBAQCBfaGlkZGVuIHZvaWQgbGlieGxfX2FkZF9uaWNzKGxpYnhsX19lZ2MgKmVnYywgbGlieGxf X2FvICphbywgdWludDMyX3QgZG9taWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp YnhsX2RvbWFpbl9jb25maWcgKmRfY29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsaWJ4bF9fbXVsdGlkZXYgKm11bHRpZGV2KTsKIAorX2hpZGRlbiB2b2lkIGxpYnhsX19hZGRf dnNjc2lzKGxpYnhsX19lZ2MgKmVnYywgbGlieGxfX2FvICphbywgdWludDMyX3QgZG9taWQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZG9tYWluX2NvbmZpZyAqZF9jb25m aWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX211bHRpZGV2ICptdWx0 aWRldik7CisKIF9oaWRkZW4gdm9pZCBsaWJ4bF9fYWRkX3Z0cG1zKGxpYnhsX19lZ2MgKmVnYywg bGlieGxfX2FvICphbywgdWludDMyX3QgZG9taWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxpYnhsX2RvbWFpbl9jb25maWcgKmRfY29uZmlnLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsaWJ4bF9fbXVsdGlkZXYgKm11bHRpZGV2KTsKQEAgLTM2MDgsNiArMzYxNiwxMyBA QCBzdGF0aWMgaW5saW5lIHZvaWQgbGlieGxfX3VwZGF0ZV9jb25maWdfbmljKGxpYnhsX19nYyAq Z2MsCiAgICAgbGlieGxfbWFjX2NvcHkoQ1RYLCAmZHN0LT5tYWMsICZzcmMtPm1hYyk7CiB9CiAK K3N0YXRpYyBpbmxpbmUgdm9pZCBsaWJ4bF9fdXBkYXRlX2NvbmZpZ192c2NzaShsaWJ4bF9fZ2Mg KmdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxf ZGV2aWNlX3ZzY3NpICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2kgKnNyYykKK3sKKyAgICBkc3QtPmRldmlkID0gc3Jj LT5kZXZpZDsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGxpYnhsX191cGRhdGVfY29uZmlnX3Z0 cG0obGlieGxfX2djICpnYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxpYnhsX2RldmljZV92dHBtICpkc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnRwbSAqc3JjKQpAQCAtMzYyMCw2ICsz NjM1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGxpYnhsX191cGRhdGVfY29uZmlnX3Z0cG0obGli eGxfX2djICpnYywKICAqIGRldmljZXMgaGF2ZSBzYW1lIGlkZW50aWZpZXIuICovCiAjZGVmaW5l IENPTVBBUkVfREVWSUQoYSwgYikgKChhKS0+ZGV2aWQgPT0gKGIpLT5kZXZpZCkKICNkZWZpbmUg Q09NUEFSRV9ESVNLKGEsIGIpICghc3RyY21wKChhKS0+dmRldiwgKGIpLT52ZGV2KSkKKyNkZWZp bmUgQ09NUEFSRV9WU0NTSShhLCBiKSAoKGEpLT52X2hzdCA9PSAoYiktPnZfaHN0KQogI2RlZmlu ZSBDT01QQVJFX1BDSShhLCBiKSAoKGEpLT5mdW5jID09IChiKS0+ZnVuYyAmJiAgICBcCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoYSktPmJ1cyA9PSAoYiktPmJ1cyAmJiAgICAgIFwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChhKS0+ZGV2ID09IChiKS0+ZGV2KQpkaWZmIC0tZ2l0 IGEvdG9vbHMvbGlieGwvbGlieGxfdHlwZXMuaWRsIGIvdG9vbHMvbGlieGwvbGlieGxfdHlwZXMu aWRsCmluZGV4IDA4NjY0MzMuLmFhZTg5NjEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhs X3R5cGVzLmlkbAorKysgYi90b29scy9saWJ4bC9saWJ4bF90eXBlcy5pZGwKQEAgLTU1Miw2ICs1 NTIsNDUgQEAgbGlieGxfZGV2aWNlX2NoYW5uZWwgPSBTdHJ1Y3QoImRldmljZV9jaGFubmVsIiwg WwogICAgICAgICAgICBdKSksCiBdKQogCitsaWJ4bF92c2NzaV9wZGV2X3R5cGUgPSBFbnVtZXJh dGlvbigidnNjc2lfcGRldl90eXBlIiwgWworICAgICgwLCAiSU5WQUxJRCIpLAorICAgICgxLCAi SENUTCIpLAorICAgICgyLCAiV1dOIiksCisgICAgXSkKKworbGlieGxfdnNjc2lfaGN0bCA9IFN0 cnVjdCgidnNjc2lfaGN0bCIsIFsKKyAgICAoImhzdCIsIHVpbnQzMiksCisgICAgKCJjaG4iLCB1 aW50MzIpLAorICAgICgidGd0IiwgdWludDMyKSwKKyAgICAoImx1biIsIHVpbnQzMiksCisgICAg XSkKKworbGlieGxfdnNjc2lfcGRldiA9IFN0cnVjdCgidnNjc2lfcGRldiIsIFsKKyAgICAoInBf ZGV2bmFtZSIsICAgICAgICBzdHJpbmcpLAorICAgICgidSIsIEtleWVkVW5pb24oTm9uZSwgbGli eGxfdnNjc2lfcGRldl90eXBlLCAidHlwZSIsCisgICAgICAgIFsKKyAgICAgICAgICgiaW52YWxp ZCIsIE5vbmUpLAorICAgICAgICAgKCJoY3RsIiwgU3RydWN0KE5vbmUsIFsoIm0iLCBsaWJ4bF92 c2NzaV9oY3RsKV0pKSwKKyAgICAgICAgICgid3duIiwgU3RydWN0KE5vbmUsIFsoIm0iLCBzdHJp bmcpXSkpLAorICAgICAgICBdKSksCisgICAgXSkKKworbGlieGxfdnNjc2lfZGV2ID0gU3RydWN0 KCJ2c2NzaV9kZXYiLCBbCisgICAgKCJ2c2NzaV9kZXZfaWQiLCAgICAgbGlieGxfZGV2aWQpLAor ICAgICgicmVtb3ZlIiwgICAgICAgICAgIGJvb2wpLAorICAgICgicGRldiIsICAgICAgICAgICAg IGxpYnhsX3ZzY3NpX3BkZXYpLAorICAgICgidmRldiIsICAgICAgICAgICAgIGxpYnhsX3ZzY3Np X2hjdGwpLAorICAgIF0pCisKK2xpYnhsX2RldmljZV92c2NzaSA9IFN0cnVjdCgiZGV2aWNlX3Zz Y3NpIiwgWworICAgICgiYmFja2VuZF9kb21pZCIsICAgIGxpYnhsX2RvbWlkKSwKKyAgICAoImRl dmlkIiwgICAgICAgICAgICBsaWJ4bF9kZXZpZCksCisgICAgKCJ2X2hzdCIsICAgICAgICAgICAg dWludDMyKSwKKyAgICAoInZzY3NpX2RldnMiLCAgICAgICBBcnJheShsaWJ4bF92c2NzaV9kZXYs ICJudW1fdnNjc2lfZGV2cyIpKSwKKyAgICAoIm5leHRfdnNjc2lfZGV2X2lkIiwgbGlieGxfZGV2 aWQpLAorICAgICgiZmVhdHVyZV9ob3N0IiwgICAgIGxpYnhsX2RlZmJvb2wpLAorICAgIF0pCisK IGxpYnhsX2RvbWFpbl9jb25maWcgPSBTdHJ1Y3QoImRvbWFpbl9jb25maWciLCBbCiAgICAgKCJj X2luZm8iLCBsaWJ4bF9kb21haW5fY3JlYXRlX2luZm8pLAogICAgICgiYl9pbmZvIiwgbGlieGxf ZG9tYWluX2J1aWxkX2luZm8pLApAQCAtNTYxLDYgKzYwMCw3IEBAIGxpYnhsX2RvbWFpbl9jb25m aWcgPSBTdHJ1Y3QoImRvbWFpbl9jb25maWciLCBbCiAgICAgKCJwY2lkZXZzIiwgQXJyYXkobGli eGxfZGV2aWNlX3BjaSwgIm51bV9wY2lkZXZzIikpLAogICAgICgidmZicyIsIEFycmF5KGxpYnhs X2RldmljZV92ZmIsICJudW1fdmZicyIpKSwKICAgICAoInZrYnMiLCBBcnJheShsaWJ4bF9kZXZp Y2VfdmtiLCAibnVtX3ZrYnMiKSksCisgICAgKCJ2c2NzaXMiLCBBcnJheShsaWJ4bF9kZXZpY2Vf dnNjc2ksICJudW1fdnNjc2lzIikpLAogICAgICgidnRwbXMiLCBBcnJheShsaWJ4bF9kZXZpY2Vf dnRwbSwgIm51bV92dHBtcyIpKSwKICAgICAjIGEgY2hhbm5lbCBtYW5pZmVzdHMgYXMgYSBjb25z b2xlIHdpdGggYSBuYW1lLAogICAgICMgc2VlIGRvY3MvbWlzYy9jaGFubmVscy50eHQKQEAgLTU5 NSw2ICs2MzUsMjIgQEAgbGlieGxfbmljaW5mbyA9IFN0cnVjdCgibmljaW5mbyIsIFsKICAgICAo InJyZWZfcngiLCBpbnRlZ2VyKSwKICAgICBdLCBkaXI9RElSX09VVCkKIAorbGlieGxfdnNjc2lp bmZvID0gU3RydWN0KCJ2c2NzaWluZm8iLCBbCisgICAgKCJiYWNrZW5kIiwgc3RyaW5nKSwKKyAg ICAoImJhY2tlbmRfaWQiLCB1aW50MzIpLAorICAgICgiZnJvbnRlbmQiLCBzdHJpbmcpLAorICAg ICgiZnJvbnRlbmRfaWQiLCB1aW50MzIpLAorICAgICgiZGV2aWQiLCBsaWJ4bF9kZXZpZCksCisg ICAgKCJwZGV2IiwgbGlieGxfdnNjc2lfcGRldiksCisgICAgKCJ2ZGV2IiwgbGlieGxfdnNjc2lf aGN0bCksCisgICAgKCJ2c2NzaV9kZXZfaWQiLCBsaWJ4bF9kZXZpZCksCisgICAgKCJmZWF0dXJl X2hvc3QiLCBib29sKSwKKyAgICAoInZzY3NpX2hvc3Rfc3RhdGUiLCBpbnRlZ2VyKSwKKyAgICAo InZzY3NpX2Rldl9zdGF0ZSIsIGludGVnZXIpLAorICAgICgiZXZ0Y2giLCBpbnRlZ2VyKSwKKyAg ICAoInJyZWYiLCBpbnRlZ2VyKSwKKyAgICBdLCBkaXI9RElSX09VVCkKKwogbGlieGxfdnRwbWlu Zm8gPSBTdHJ1Y3QoInZ0cG1pbmZvIiwgWwogICAgICgiYmFja2VuZCIsIHN0cmluZyksCiAgICAg KCJiYWNrZW5kX2lkIiwgdWludDMyKSwKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX3R5 cGVzX2ludGVybmFsLmlkbCBiL3Rvb2xzL2xpYnhsL2xpYnhsX3R5cGVzX2ludGVybmFsLmlkbApp bmRleCA1ZTU1Njg1Li44NGM0NGY1IDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF90eXBl c19pbnRlcm5hbC5pZGwKKysrIGIvdG9vbHMvbGlieGwvbGlieGxfdHlwZXNfaW50ZXJuYWwuaWRs CkBAIC0yMiw2ICsyMiw3IEBAIGxpYnhsX19kZXZpY2Vfa2luZCA9IEVudW1lcmF0aW9uKCJkZXZp Y2Vfa2luZCIsIFsKICAgICAoNiwgIlZLQkQiKSwKICAgICAoNywgIkNPTlNPTEUiKSwKICAgICAo OCwgIlZUUE0iKSwKKyAgICAoOSwgIlZTQ1NJIiksCiAgICAgXSkKIAogbGlieGxfX2NvbnNvbGVf YmFja2VuZCA9IEVudW1lcmF0aW9uKCJjb25zb2xlX2JhY2tlbmQiLCBbCmRpZmYgLS1naXQgYS90 b29scy9saWJ4bC9saWJ4bF92c2NzaS5jIGIvdG9vbHMvbGlieGwvbGlieGxfdnNjc2kuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzAxNjg5Ci0tLSAvZGV2L251bGwKKysr IGIvdG9vbHMvbGlieGwvbGlieGxfdnNjc2kuYwpAQCAtMCwwICsxLDI3MSBAQAorLyoKKyAqIENv cHlyaWdodCAoQykgMjAxNSAgICAgIFNVU0UgTGludXggR21iSAorICogQXV0aG9yIE9sYWYgSGVy aW5nIDxvbGFmQGFlcGZsZS5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIuMSBvbmx5 LiB3aXRoIHRoZSBzcGVjaWFsCisgKiBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4g ZmlsZSBMSUNFTlNFLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5j bHVkZSAibGlieGxfb3NkZXBzLmgiIC8qIG11c3QgY29tZSBiZWZvcmUgYW55IG90aGVyIGhlYWRl cnMgKi8KKyNpbmNsdWRlICJsaWJ4bF9pbnRlcm5hbC5oIgorCitzdGF0aWMgaW50IHZzY3NpX3Bh cnNlX2hjdGwoY2hhciAqc3RyLCBsaWJ4bF92c2NzaV9oY3RsICpoY3RsKQoreworICAgIHVuc2ln bmVkIGludCBoc3QsIGNobiwgdGd0LCBsdW47CisKKyAgICBpZiAoc3NjYW5mKHN0ciwgIiV1OiV1 OiV1OiV1IiwgJmhzdCwgJmNobiwgJnRndCwgJmx1bikgIT0gNCkKKyAgICAgICAgcmV0dXJuIEVS Uk9SX0lOVkFMOworCisgICAgaGN0bC0+aHN0ID0gaHN0OworICAgIGhjdGwtPmNobiA9IGNobjsK KyAgICBoY3RsLT50Z3QgPSB0Z3Q7CisgICAgaGN0bC0+bHVuID0gbHVuOworICAgIHJldHVybiAw OworfQorCitzdGF0aWMgYm9vbCB2c2NzaV93d25fdmFsaWQoY29uc3QgY2hhciAqcCkKK3sKKyAg ICBib29sIHJldCA9IHRydWU7CisgICAgaW50IGkgPSAwOworCisgICAgZm9yIChpID0gMDsgaSA8 IDE2OyBpKyssIHArKykgeworICAgICAgICBpZiAoKnAgPj0gJzAnICYmICpwIDw9ICc5JykKKyAg ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoKnAgPj0gJ2EnICYmICpwIDw9ICdmJykK KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoKnAgPj0gJ0EnICYmICpwIDw9ICdG JykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICByZXQgPSBmYWxzZTsKKyAgICAgICAg YnJlYWs7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKKy8qIFRyYW5zbGF0ZSBwLWRldiBi YWNrIGludG8gcGRldi50eXBlICovCitzdGF0aWMgYm9vbCB2c2NzaV9wYXJzZV9wZGV2KGxpYnhs X2N0eCAqY3R4LCBsaWJ4bF92c2NzaV9kZXYgKnZfZGV2LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICpjLCBjaGFyICpwLCBjaGFyICp2KQoreworICAgIEdDX0lOSVQoY3R4KTsK KyAgICBsaWJ4bF92c2NzaV9oY3RsIGhjdGw7CisgICAgdW5zaWduZWQgaW50IGx1bjsKKyAgICBj aGFyIHd3blsxNiArIDFdOworICAgIGJvb2wgcGFyc2VkX29rID0gZmFsc2U7CisKKyAgICBsaWJ4 bF92c2NzaV9oY3RsX2luaXQoJmhjdGwpOworCisgICAgdl9kZXYtPnBkZXYucF9kZXZuYW1lID0g bGlieGxfX3N0cmR1cChOT0dDLCBjKTsKKworICAgIGlmIChzdHJuY21wKHAsICJuYWEuIiwgNCkg PT0gMCkgeworICAgICAgICAvKiBXV04gYXMgdW5kZXJzdG9vZCBieSBwdm9wcyAqLworICAgICAg ICBtZW1zZXQod3duLCAwLCBzaXplb2Yod3duKSk7CisgICAgICAgIGlmIChzc2NhbmYocCwgIm5h YS4lMTZjOiV1Iiwgd3duLCAmbHVuKSA9PSAyICYmIHZzY3NpX3d3bl92YWxpZCh3d24pKSB7Cisg ICAgICAgICAgICBsaWJ4bF92c2NzaV9wZGV2X2luaXRfdHlwZSgmdl9kZXYtPnBkZXYsIExJQlhM X1ZTQ1NJX1BERVZfVFlQRV9XV04pOworICAgICAgICAgICAgdl9kZXYtPnBkZXYudS53d24ubSA9 IGxpYnhsX19zdHJkdXAoTk9HQywgcCk7CisgICAgICAgICAgICBwYXJzZWRfb2sgPSB0cnVlOwor ICAgICAgICB9CisgICAgfSBlbHNlIGlmICh2c2NzaV9wYXJzZV9oY3RsKHAsICZoY3RsKSA9PSAw KSB7CisgICAgICAgIC8qIEVpdGhlciB4ZW5saW51eCwgb3IgcHZvcHMgd2l0aCBwcm9wZXJseSBj b25maWd1cmVkIGFsaWFzIGluIHN5c2ZzICovCisgICAgICAgIGxpYnhsX3ZzY3NpX3BkZXZfaW5p dF90eXBlKCZ2X2Rldi0+cGRldiwgTElCWExfVlNDU0lfUERFVl9UWVBFX0hDVEwpOworICAgICAg ICBsaWJ4bF92c2NzaV9oY3RsX2NvcHkoY3R4LCAmdl9kZXYtPnBkZXYudS5oY3RsLm0sICZoY3Rs KTsKKyAgICAgICAgcGFyc2VkX29rID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAocGFyc2VkX29r ICYmIHZzY3NpX3BhcnNlX2hjdGwodiwgJnZfZGV2LT52ZGV2KSAhPSAwKQorICAgICAgICBwYXJz ZWRfb2sgPSBmYWxzZTsKKworICAgIGxpYnhsX3ZzY3NpX2hjdGxfZGlzcG9zZSgmaGN0bCk7CisK KyAgICBHQ19GUkVFOworICAgIHJldHVybiBwYXJzZWRfb2s7Cit9CisKK2xpYnhsX2RldmljZV92 c2NzaSAqbGlieGxfZGV2aWNlX3ZzY3NpX2xpc3QobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRv bWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm51 bSkKK3sKKyAgICBHQ19JTklUKGN0eCk7CisgICAgbGlieGxfdnNjc2lfZGV2ICp2X2RldjsKKyAg ICBsaWJ4bF9kZXZpY2VfdnNjc2kgKnZfaHN0LCAqdnNjc2lfaG9zdHMgPSBOVUxMOworICAgIGNo YXIgKmZlX3BhdGgsICp0bXAsICpjLCAqcCwgKnYsICpzOworICAgIGNoYXIgKipkaXIsICoqZGV2 c19kaXI7CisgICAgY29uc3QgY2hhciAqZGV2c19wYXRoLCAqYmVfcGF0aDsKKyAgICBpbnQgcjsK KyAgICBib29sIHBhcnNlZF9vazsKKyAgICB1bnNpZ25lZCBpbnQgbmRpcnMgPSAwLCBuZGV2c19k aXJzID0gMCwgaTsKKyAgICB1bnNpZ25lZCBpbnQgdnNjc2lfZGV2X2lkOworCisgICAgZmVfcGF0 aCA9IGxpYnhsX19zcHJpbnRmKGdjLCAiJXMvZGV2aWNlL3ZzY3NpIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGlieGxfX3hzX2dldF9kb21wYXRoKGdjLCBkb21pZCkpOworICAgIGRp ciA9IGxpYnhsX194c19kaXJlY3RvcnkoZ2MsIFhCVF9OVUxMLCBmZV9wYXRoLCAmbmRpcnMpOwor ICAgIC8qIE5vdGhpbmcgdG8gZG8gKi8KKyAgICBpZiAoIShkaXIgJiYgbmRpcnMpKQorICAgICAg ICBnb3RvIG91dDsKKworICAgIC8qIExpc3Qgb2YgaG9zdHMgdG8gYmUgcmV0dXJuZWQgdG8gdGhl IGNhbGxlciAqLworICAgIHZzY3NpX2hvc3RzID0gbGlieGxfX21hbGxvYyhOT0dDLCBuZGlycyAq IHNpemVvZigqdnNjc2lfaG9zdHMpKTsKKworICAgIC8qIEZpbGwgZWFjaCBob3N0ICovCisgICAg Zm9yICh2X2hzdCA9IHZzY3NpX2hvc3RzOyB2X2hzdCA8IHZzY3NpX2hvc3RzICsgbmRpcnM7ICsr dl9oc3QsICsrZGlyKSB7CisgICAgICAgIGxpYnhsX2RldmljZV92c2NzaV9pbml0KHZfaHN0KTsK KworICAgICAgICB2X2hzdC0+ZGV2aWQgPSBhdG9pKCpkaXIpOworCisgICAgICAgIHRtcCA9IGxp YnhsX194c19yZWFkKGdjLCBYQlRfTlVMTCwgR0NTUFJJTlRGKCIlcy8lcy9iYWNrZW5kLWlkIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVfcGF0aCwgKmRpcikpOworICAgICAgICAv KiBGSVhNRSB3aGF0IGlmIHhlbnN0b3JlIGlzIGJyb2tlbj8gKi8KKyAgICAgICAgaWYgKHRtcCkK KyAgICAgICAgICAgIHZfaHN0LT5iYWNrZW5kX2RvbWlkID0gYXRvaSh0bXApOworCisgICAgICAg IGJlX3BhdGggPSBsaWJ4bF9feHNfcmVhZChnYywgWEJUX05VTEwsIEdDU1BSSU5URigiJXMvJXMv YmFja2VuZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZV9wYXRoLCAqZGly KSk7CisgICAgICAgIC8qIEZJWE1FIHdoYXQgaWYgeGVuc3RvcmUgaXMgYnJva2VuPyAqLworICAg ICAgICBpZiAoYmVfcGF0aCkgeworICAgICAgICAgICAgcGFyc2VkX29rID0gZmFsc2U7CisgICAg ICAgICAgICB0bXAgPSBsaWJ4bF9feHNfcmVhZChnYywgWEJUX05VTEwsIEdDU1BSSU5URigiJXMv ZmVhdHVyZS1ob3N0IiwgYmVfcGF0aCkpOworICAgICAgICAgICAgaWYgKHRtcCkKKyAgICAgICAg ICAgICAgICBwYXJzZWRfb2sgPSBhdG9pKHRtcCkgIT0gMDsKKyAgICAgICAgICAgIGxpYnhsX2Rl ZmJvb2xfc2V0KCZ2X2hzdC0+ZmVhdHVyZV9ob3N0LCBwYXJzZWRfb2spOworCisgICAgICAgICAg ICBkZXZzX3BhdGggPSBsaWJ4bF9fc3ByaW50ZihnYywgIiVzL3ZzY3NpLWRldnMiLCBiZV9wYXRo KTsKKyAgICAgICAgICAgIGRldnNfZGlyID0gbGlieGxfX3hzX2RpcmVjdG9yeShnYywgWEJUX05V TEwsIGRldnNfcGF0aCwgJm5kZXZzX2RpcnMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgZGV2c19kaXIgPSBOVUxMOworICAgICAgICAgICAgbGlieGxfZGVmYm9vbF9zZXQoJnZfaHN0 LT5mZWF0dXJlX2hvc3QsIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkZXZzX2Rp ciAmJiBuZGV2c19kaXJzKSB7CisgICAgICAgICAgICB2X2hzdC0+dnNjc2lfZGV2cyA9IGxpYnhs X19tYWxsb2MoTk9HQywgbmRldnNfZGlycyAqIHNpemVvZigqdl9kZXYpKTsKKyAgICAgICAgICAg IHZfaHN0LT5udW1fdnNjc2lfZGV2cyA9IG5kZXZzX2RpcnM7CisgICAgICAgICAgICAvKiBGaWxs IGVhY2ggZGV2aWNlIGNvbm5lY3RlZCB0byB0aGUgaG9zdCAqLworICAgICAgICAgICAgZm9yIChp ID0gMDsgaSA8IG5kZXZzX2RpcnM7IGkrKywgZGV2c19kaXIrKykgeworICAgICAgICAgICAgICAg IHZfZGV2ID0gJnZfaHN0LT52c2NzaV9kZXZzW2ldOworICAgICAgICAgICAgICAgIGxpYnhsX3Zz Y3NpX2Rldl9pbml0KHZfZGV2KTsKKyAgICAgICAgICAgICAgICBwYXJzZWRfb2sgPSBmYWxzZTsK KyAgICAgICAgICAgICAgICByID0gc3NjYW5mKCpkZXZzX2RpciwgImRldi0ldSIsICZ2c2NzaV9k ZXZfaWQpOworICAgICAgICAgICAgICAgIGlmIChyID09IDEpIHsKKyAgICAgICAgICAgICAgICAg ICAgYyA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRfTlVMTCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJXMvdnNjc2ktZGV2cy9kZXYtJXUvcC1kZXZu YW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlX3BhdGgsIHZz Y3NpX2Rldl9pZCkpOworICAgICAgICAgICAgICAgICAgICBwID0gbGlieGxfX3hzX3JlYWQoZ2Ms IFhCVF9OVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJ TlRGKCIlcy92c2NzaS1kZXZzL2Rldi0ldS9wLWRldiIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBiZV9wYXRoLCB2c2NzaV9kZXZfaWQpKTsKKyAgICAgICAgICAgICAg ICAgICAgdiA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRfTlVMTCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJXMvdnNjc2ktZGV2cy9kZXYtJXUvdi1k ZXYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVfcGF0aCwgdnNj c2lfZGV2X2lkKSk7CisgICAgICAgICAgICAgICAgICAgIHMgPSBsaWJ4bF9feHNfcmVhZChnYywg WEJUX05VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklO VEYoIiVzL3ZzY3NpLWRldnMvZGV2LSV1L3N0YXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJlX3BhdGgsIHZzY3NpX2Rldl9pZCkpOworICAgICAgICAgICAgICAg ICAgICBpZiAoYyAmJiBwICYmIHYgJiYgcykgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFy c2VkX29rID0gdnNjc2lfcGFyc2VfcGRldihjdHgsIHZfZGV2LCBjLCBwLCB2KTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIExPRyhERUJVRywgIiVzIGRldi0ldSBzdGF0ZSBpcyAlcyIsIGJlX3Bh dGgsIHZzY3NpX2Rldl9pZCwgcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGF0 b2kocykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFhlbmJ1c1N0YXRlVW5r bm93bjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFhlbmJ1c1N0YXRlSW5pdGlh bGlzaW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWGVuYnVzU3RhdGVJbml0 V2FpdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFhlbmJ1c1N0YXRlSW5pdGlh bGlzZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBYZW5idXNTdGF0ZUNvbm5l Y3RlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFhlbmJ1c1N0YXRlUmVjb25m aWd1cmluZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFhlbmJ1c1N0YXRlUmVj b25maWd1cmVkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFhlbmJ1c1N0YXRlQ2xvc2luZzoKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjYXNlIFhlbmJ1c1N0YXRlQ2xvc2VkOgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2X2Rldi0+cmVtb3ZlID0gdHJ1ZTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvKiBJbmRpY2F0aW9uIGZv ciBjYWxsZXIgdGhhdCB0aGlzIHZfZGV2IGlzIHVzYWJsZSAqLworICAgICAgICAgICAgICAgICAg ICBpZiAocGFyc2VkX29rKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2X2Rldi0+dnNjc2lf ZGV2X2lkID0gdnNjc2lfZGV2X2lkOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZzY3Np X2Rldl9pZCA+PSB2X2hzdC0+bmV4dF92c2NzaV9kZXZfaWQgfHwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2X2hzdC0+bmV4dF92c2NzaV9kZXZfaWQgPT0gLTEpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdl9oc3QtPm5leHRfdnNjc2lfZGV2X2lkID0gdnNjc2lfZGV2X2lkICsg MTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZfaHN0LT52X2hzdCA9IHZfZGV2LT52ZGV2Lmhz dDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg ICAgICAgIGlmICghcGFyc2VkX29rKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIEZJWE1FIHdo YXQgaWYgeGVuc3RvcmUgaXMgYnJva2VuPyAqLworICAgICAgICAgICAgICAgICAgICBMT0coRVJS T1IsICIlcy92c2NzaS1kZXZzLyVzIGZhaWxlZCB0byBwYXJzZSIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYmVfcGF0aCwgKmRldnNfZGlyKTsKKyAgICAgICAgICAgICAgICAgICAg Y29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgfQorCitvdXQ6CisgICAgKm51bSA9IG5kaXJzOworCisgICAgR0NfRlJFRTsKKyAgICByZXR1 cm4gdnNjc2lfaG9zdHM7Cit9CisKK2ludCBsaWJ4bF9kZXZpY2VfdnNjc2lfZ2V0aW5mbyhsaWJ4 bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGlieGxfZGV2aWNlX3ZzY3NpICp2c2NzaV9ob3N0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpYnhsX3ZzY3NpX2RldiAqdnNjc2lfZGV2LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxpYnhsX3ZzY3NpaW5mbyAqdnNjc2lpbmZvKQoreworICAgIEdDX0lOSVQo Y3R4KTsKKyAgICBjaGFyICpkb21wYXRoLCAqdnNjc2lwYXRoOworICAgIGNoYXIgKnZhbDsKKyAg ICBpbnQgcmMgPSBFUlJPUl9GQUlMOworCisgICAgbGlieGxfdnNjc2lpbmZvX2luaXQodnNjc2lp bmZvKTsKKyAgICBkb21wYXRoID0gbGlieGxfX3hzX2dldF9kb21wYXRoKGdjLCBkb21pZCk7Cisg ICAgdnNjc2lpbmZvLT5kZXZpZCA9IHZzY3NpX2hvc3QtPmRldmlkOworICAgIGxpYnhsX3ZzY3Np X3BkZXZfY29weShjdHgsICZ2c2NzaWluZm8tPnBkZXYsICZ2c2NzaV9kZXYtPnBkZXYpOworICAg IGxpYnhsX3ZzY3NpX2hjdGxfY29weShjdHgsICZ2c2NzaWluZm8tPnZkZXYsICZ2c2NzaV9kZXYt PnZkZXYpOworCisgICAgdnNjc2lwYXRoID0gR0NTUFJJTlRGKCIlcy9kZXZpY2UvdnNjc2kvJWQi LCBkb21wYXRoLCB2c2NzaWluZm8tPmRldmlkKTsKKyAgICB2c2NzaWluZm8tPmJhY2tlbmQgPSB4 c19yZWFkKGN0eC0+eHNoLCBYQlRfTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEdDU1BSSU5URigiJXMvYmFja2VuZCIsIHZzY3NpcGF0aCksIE5VTEwpOworICAgIGlmICgh dnNjc2lpbmZvLT5iYWNrZW5kKQorICAgICAgICBnb3RvIG91dDsKKyAgICBpZighbGlieGxfX3hz X3JlYWQoZ2MsIFhCVF9OVUxMLCB2c2NzaWluZm8tPmJhY2tlbmQpKQorICAgICAgICBnb3RvIG91 dDsKKworICAgIHZhbCA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRfTlVMTCwgR0NTUFJJTlRGKCIl cy9iYWNrZW5kLWlkIiwgdnNjc2lwYXRoKSk7CisgICAgdnNjc2lpbmZvLT5iYWNrZW5kX2lkID0g dmFsID8gc3RydG91bCh2YWwsIE5VTEwsIDEwKSA6IC0xOworCisgICAgdmFsID0gbGlieGxfX3hz X3JlYWQoZ2MsIFhCVF9OVUxMLCBHQ1NQUklOVEYoIiVzL3N0YXRlIiwgdnNjc2lwYXRoKSk7Cisg ICAgdnNjc2lpbmZvLT52c2NzaV9ob3N0X3N0YXRlID0gdmFsID8gc3RydG91bCh2YWwsIE5VTEws IDEwKSA6IC0xOworCisgICAgdmFsID0gbGlieGxfX3hzX3JlYWQoZ2MsIFhCVF9OVUxMLCBHQ1NQ UklOVEYoIiVzL2V2ZW50LWNoYW5uZWwiLCB2c2NzaXBhdGgpKTsKKyAgICB2c2NzaWluZm8tPmV2 dGNoID0gdmFsID8gc3RydG91bCh2YWwsIE5VTEwsIDEwKSA6IC0xOworCisgICAgdmFsID0gbGli eGxfX3hzX3JlYWQoZ2MsIFhCVF9OVUxMLCBHQ1NQUklOVEYoIiVzL3JpbmctcmVmIiwgdnNjc2lw YXRoKSk7CisgICAgdnNjc2lpbmZvLT5ycmVmID0gdmFsID8gc3RydG91bCh2YWwsIE5VTEwsIDEw KSA6IC0xOworCisgICAgdnNjc2lpbmZvLT5mcm9udGVuZCA9IHhzX3JlYWQoY3R4LT54c2gsIFhC VF9OVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJXMv ZnJvbnRlbmQiLCB2c2NzaWluZm8tPmJhY2tlbmQpLCBOVUxMKTsKKworICAgIHZhbCA9IGxpYnhs X194c19yZWFkKGdjLCBYQlRfTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklO VEYoIiVzL2Zyb250ZW5kLWlkIiwgdnNjc2lpbmZvLT5iYWNrZW5kKSk7CisgICAgdnNjc2lpbmZv LT5mcm9udGVuZF9pZCA9IHZhbCA/IHN0cnRvdWwodmFsLCBOVUxMLCAxMCkgOiAtMTsKKworICAg IHZhbCA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRfTlVMTCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICBHQ1NQUklOVEYoIiVzL3ZzY3NpLWRldnMvZGV2LSV1L3N0YXRlIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICB2c2NzaWluZm8tPmJhY2tlbmQsIHZzY3NpX2Rldi0+dnNjc2lfZGV2X2lk KSk7CisgICAgdnNjc2lpbmZvLT52c2NzaV9kZXZfc3RhdGUgPSB2YWwgPyBzdHJ0b3VsKHZhbCwg TlVMTCwgMTApIDogLTE7CisKKyAgICByYyA9IDA7CitvdXQ6CisgICAgR0NfRlJFRTsKKyAgICBy ZXR1cm4gcmM7Cit9CisKKworCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQwor ICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgor ICovCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bHVfdnNjc2kuYyBiL3Rvb2xzL2xpYnhs L2xpYnhsdV92c2NzaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NmFm M2IKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9saWJ4bC9saWJ4bHVfdnNjc2kuYwpAQCAtMCww ICsxLDc1MCBAQAorLyoKKyAqIGxpYnhsdV92c2NzaS5jIC0geGwgY29uZmlndXJhdGlvbiBmaWxl IHBhcnNpbmc6IHNldHVwIGFuZCBoZWxwZXIgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IChD KSAyMDE1ICAgICAgU1VTRSBMaW51eCBHbWJICisgKiBBdXRob3IgT2xhZiBIZXJpbmcgPG9sYWZA YWVwZmxlLmRlPgorICogQXV0aG9yIE9uZMWZZWogSG9sZcSNZWsgPGFhYW5uekBnbWFpbC5jb20+ CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyLjEgb25seS4gd2l0aCB0aGUgc3BlY2lhbAor ICogZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIGZpbGUgTElDRU5TRS4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgImxpYnhsX29zZGVwcy5o IiAvKiBtdXN0IGNvbWUgYmVmb3JlIGFueSBvdGhlciBoZWFkZXJzICovCisjaW5jbHVkZSA8dW5p c3RkLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRl IDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSAibGlieGx1X2ludGVy bmFsLmgiCisKKyNpZmRlZiBfX2xpbnV4X18KKyNkZWZpbmUgTE9HKF9jLCBfeCwgX2EuLi4pIFwK KyAgICAgICAgaWYoKF9jKSAmJiAoX2MpLT5yZXBvcnQpIGZwcmludGYoKF9jKS0+cmVwb3J0LCAi JXMoJXUpOiAiIF94ICJcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgIyNfYSkKKworI2RlZmluZSBY TFVfU1lTRlNfVEFSR0VUX1BWU0NTSSAiL3N5cy9rZXJuZWwvY29uZmlnL3RhcmdldC94ZW4tcHZz Y3NpIgorI2RlZmluZSBYTFVfV1dOX0xFTiAxNgorc3RydWN0IHhsdV9fdnNjc2lfdGFyZ2V0IHsK KyAgICBYTFVfQ29uZmlnICpjZmc7CisgICAgbGlieGxfdnNjc2lfaGN0bCAqcGRldl9oY3RsOwor ICAgIGxpYnhsX3ZzY3NpX3BkZXYgKnBkZXY7CisgICAgY2hhciBwYXRoW1BBVEhfTUFYXTsKKyAg ICBjaGFyIHVkZXZfcGF0aFtQQVRIX01BWF07CisgICAgY2hhciB3d25bWExVX1dXTl9MRU4gKyAx XTsKKyAgICB1bnNpZ25lZCBpbnQgbHVuOworfTsKKworc3RhdGljIGludCB4bHVfX3ZzY3NpX3Bh cnNlX2hjdGwoY2hhciAqc3RyLCBsaWJ4bF92c2NzaV9oY3RsICpoY3RsKQoreworICAgIHVuc2ln bmVkIGludCBoc3QsIGNobiwgdGd0LCBsdW47CisKKyAgICBpZiAoc3NjYW5mKHN0ciwgIiV1OiV1 OiV1OiV1IiwgJmhzdCwgJmNobiwgJnRndCwgJmx1bikgIT0gNCkKKyAgICAgICAgcmV0dXJuIEVS Uk9SX0lOVkFMOworCisgICAgaGN0bC0+aHN0ID0gaHN0OworICAgIGhjdGwtPmNobiA9IGNobjsK KyAgICBoY3RsLT50Z3QgPSB0Z3Q7CisgICAgaGN0bC0+bHVuID0gbHVuOworICAgIHJldHVybiAw OworfQorCitzdGF0aWMgY2hhciAqeGx1X192c2NzaV90cmltX3N0cmluZyhjaGFyICpzKQorewor ICAgIHVuc2lnbmVkIGludCBsZW47CisKKyAgICB3aGlsZSAoaXNzcGFjZSgqcykpCisgICAgICAg IHMrKzsKKyAgICBsZW4gPSBzdHJsZW4ocyk7CisgICAgd2hpbGUgKGxlbi0tID4gMSAmJiBpc3Nw YWNlKHNbbGVuXSkpCisgICAgICAgIHNbbGVuXSA9ICdcMCc7CisgICAgcmV0dXJuIHM7Cit9CisK Kworc3RhdGljIGludCB4bHVfX3ZzY3NpX3BhcnNlX2RldihYTFVfQ29uZmlnICpjZmcsIGNoYXIg KnBkZXYsIGxpYnhsX3ZzY3NpX2hjdGwgKmhjdGwpCit7CisgICAgc3RydWN0IHN0YXQgZGVudHJ5 OworICAgIGNoYXIgKnN5c2ZzID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICp0eXBlOworICAgIGlu dCByYywgZm91bmQgPSAwOworICAgIERJUiAqZGlycDsKKyAgICBzdHJ1Y3QgZGlyZW50ICpkZTsK KworICAgIC8qIHN0YXQgcGRldiB0byBnZXQgZGV2aWNlJ3Mgc3lzZnMgZW50cnkgKi8KKyAgICBp ZiAoc3RhdCAocGRldiwgJmRlbnRyeSkgPCAwKSB7CisgICAgICAgIExPRyhjZmcsICIlcywgZGV2 aWNlIG5vZGUgbm90IGZvdW5kIiwgcGRldik7CisgICAgICAgIHJjID0gRVJST1JfSU5WQUw7Cisg ICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGlmIChTX0lTQkxLIChkZW50cnkuc3RfbW9k ZSkpIHsKKyAgICAgICAgdHlwZSA9ICJibG9jayI7CisgICAgfSBlbHNlIGlmIChTX0lTQ0hSIChk ZW50cnkuc3RfbW9kZSkpIHsKKyAgICAgICAgdHlwZSA9ICJjaGFyIjsKKyAgICB9IGVsc2Ugewor ICAgICAgICBMT0coY2ZnLCAiJXMsIGRldmljZSBub2RlIG5vdCBhIGJsb2NrIG9yIGNoYXIgZGV2 aWNlIiwgcGRldik7CisgICAgICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgICAgIGdvdG8gb3V0 OworICAgIH0KKworICAgIC8qIC9zeXMvZGV2L3R5cGUvbWFqb3I6bWlub3Igc3ltbGluayBhZGRl ZCBpbiAyLjYuMjcgKi8KKyAgICBpZiAoYXNwcmludGYoJnN5c2ZzLCAiL3N5cy9kZXYvJXMvJXU6 JXUvZGV2aWNlL3Njc2lfZGV2aWNlIiwgdHlwZSwKKyAgICAgICAgICAgICAgICAgbWFqb3IoZGVu dHJ5LnN0X3JkZXYpLCBtaW5vcihkZW50cnkuc3RfcmRldikpIDwgMCkgeworICAgICAgICBzeXNm cyA9IE5VTEw7CisgICAgICAgIHJjID0gRVJST1JfTk9NRU07CisgICAgICAgIGdvdG8gb3V0Owor ICAgIH0KKworICAgIGRpcnAgPSBvcGVuZGlyKHN5c2ZzKTsKKyAgICBpZiAoIWRpcnApIHsKKyAg ICAgICAgTE9HKGNmZywgIiVzLCBubyBtYWpvcjptaW5vciBsaW5rIGluIHN5c2ZzIiwgcGRldik7 CisgICAgICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKwor ICAgIHdoaWxlICgoZGUgPSByZWFkZGlyKGRpcnApKSkgeworICAgICAgICBpZiAoIXN0cmNtcChk ZS0+ZF9uYW1lLCAiLiIpIHx8ICFzdHJjbXAoZGUtPmRfbmFtZSwgIi4uIikpCisgICAgICAgICAg ICBjb250aW51ZTsKKworICAgICAgICBpZiAoeGx1X192c2NzaV9wYXJzZV9oY3RsKGRlLT5kX25h bWUsIGhjdGwpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZm91bmQgPSAxOwor ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2xvc2VkaXIoZGlycCk7CisKKyAgICBpZiAoIWZv dW5kKSB7CisgICAgICAgIExPRyhjZmcsICIlcywgbm8gaDpjOnQ6bCBsaW5rIGluIHN5c2ZzIiwg cGRldik7CisgICAgICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgICAgIGdvdG8gb3V0OworICAg IH0KKworICAgIHJjID0gMDsKK291dDoKKyAgICBmcmVlKHN5c2ZzKTsKKyAgICByZXR1cm4gcmM7 Cit9CisKK3N0YXRpYyBib29sIHhsdV9fdnNjc2lfd3duX3ZhbGlkKGNvbnN0IGNoYXIgKnApCit7 CisgICAgYm9vbCByZXQgPSB0cnVlOworICAgIGludCBpID0gMDsKKworICAgIGZvciAoaSA9IDA7 IGkgPCBYTFVfV1dOX0xFTjsgaSsrLCBwKyspIHsKKyAgICAgICAgaWYgKCpwID49ICcwJyAmJiAq cCA8PSAnOScpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCpwID49ICdhJyAm JiAqcCA8PSAnZicpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCpwID49ICdB JyAmJiAqcCA8PSAnRicpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgcmV0ID0gZmFs c2U7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMg Ym9vbCB4bHVfX3ZzY3NpX2NvbXBhcmVfaGN0bChsaWJ4bF92c2NzaV9oY3RsICphLCBsaWJ4bF92 c2NzaV9oY3RsICpiKQoreworICAgIGlmIChhLT5oc3QgPT0gYi0+aHN0ICYmCisgICAgICAgIGEt PmNobiA9PSBiLT5jaG4gJiYKKyAgICAgICAgYS0+dGd0ID09IGItPnRndCAmJgorICAgICAgICBh LT5sdW4gPT0gYi0+bHVuKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7 Cit9CisKKy8qIEZpbmFsbHkgYXQKKyAqIC9zeXMva2VybmVsL2NvbmZpZy90YXJnZXQveGVuLXB2 c2NzaS9uYWEuPHd3bj4vdHBndF8xL2x1bi9sdW5fMC88WD4vdWRldl9wYXRoCisgKi8KK3N0YXRp YyBib29sIHhsdV9fdnNjc2lfY29tcGFyZV91ZGV2KHN0cnVjdCB4bHVfX3ZzY3NpX3RhcmdldCAq dGd0KQoreworICAgIGJvb2wgcmV0OworICAgIGludCBmZDsKKyAgICBzc2l6ZV90IHJlYWRfc3o7 CisgICAgbGlieGxfdnNjc2lfaGN0bCB1ZGV2X2hjdGw7CisKKyAgICBsaWJ4bF92c2NzaV9oY3Rs X2luaXQoJnVkZXZfaGN0bCk7CisKKyAgICBmZCA9IG9wZW4odGd0LT5wYXRoLCBPX1JET05MWSk7 CisgICAgaWYgKGZkIDwgMCl7CisgICAgICAgIHJldCA9IGZhbHNlOworICAgICAgICBnb3RvIG91 dDsKKyAgICB9CisgICAgcmVhZF9zeiA9IHJlYWQoZmQsICZ0Z3QtPnVkZXZfcGF0aCwgc2l6ZW9m KHRndC0+dWRldl9wYXRoKSAtIDEpOworICAgIGNsb3NlKGZkKTsKKworICAgIGlmIChyZWFkX3N6 IDwgMCB8fCByZWFkX3N6ID4gc2l6ZW9mKHRndC0+dWRldl9wYXRoKSAtIDEpIHsKKyAgICAgICAg cmV0ID0gZmFsc2U7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKyAgICB0Z3QtPnVkZXZfcGF0 aFtyZWFkX3N6XSA9ICdcMCc7CisgICAgcmVhZF9zei0tOworICAgIGlmICh0Z3QtPnVkZXZfcGF0 aFtyZWFkX3N6XSA9PSAnXG4nKQorICAgICAgICB0Z3QtPnVkZXZfcGF0aFtyZWFkX3N6XSA9ICdc MCc7CisKKyAgICBpZiAoeGx1X192c2NzaV9wYXJzZV9kZXYodGd0LT5jZmcsIHRndC0+dWRldl9w YXRoLCAmdWRldl9oY3RsKSkgeworICAgICAgICByZXQgPSBmYWxzZTsKKyAgICAgICAgZ290byBv dXQ7CisgICAgfQorICAgIHJldCA9IHhsdV9fdnNjc2lfY29tcGFyZV9oY3RsKHRndC0+cGRldl9o Y3RsLCAmdWRldl9oY3RsKTsKKworb3V0OgorICAgIGxpYnhsX3ZzY3NpX2hjdGxfZGlzcG9zZSgm dWRldl9oY3RsKTsKKyAgICByZXR1cm4gcmV0OworfQorCisvKiAvc3lzL2tlcm5lbC9jb25maWcv dGFyZ2V0L3hlbi1wdnNjc2kvbmFhLjx3d24+L3RwZ3RfMS9sdW4vbHVuXzAvPFg+L3VkZXZfcGF0 aCAqLworc3RhdGljIGJvb2wgeGx1X192c2NzaV93YWxrX2Rpcl9sdW4oc3RydWN0IHhsdV9fdnNj c2lfdGFyZ2V0ICp0Z3QpCit7CisgICAgYm9vbCBmb3VuZDsKKyAgICBESVIgKmRpcnA7CisgICAg c3RydWN0IGRpcmVudCAqZGU7CisgICAgc2l6ZV90IHBhdGhfbGVuID0gc3RybGVuKHRndC0+cGF0 aCk7CisgICAgY2hhciAqc3ViZGlyID0gJnRndC0+cGF0aFtwYXRoX2xlbl07CisKKyAgICBkaXJw ID0gb3BlbmRpcih0Z3QtPnBhdGgpOworICAgIGlmICghZGlycCkKKyAgICAgICAgcmV0dXJuIGZh bHNlOworCisgICAgZm91bmQgPSBmYWxzZTsKKyAgICB3aGlsZSAoKGRlID0gcmVhZGRpcihkaXJw KSkpIHsKKyAgICAgICAgaWYgKCFzdHJjbXAoZGUtPmRfbmFtZSwgIi4iKSB8fCAhc3RyY21wKGRl LT5kX25hbWUsICIuLiIpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgc25wcmlu dGYoc3ViZGlyLCBzaXplb2YodGd0LT5wYXRoKSAtIHBhdGhfbGVuLCAiLyVzL3VkZXZfcGF0aCIs IGRlLT5kX25hbWUpOworCisgICAgICAgIGZvdW5kID0geGx1X192c2NzaV9jb21wYXJlX3VkZXYo dGd0KTsKKyAgICAgICAgaWYgKGZvdW5kKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg KnN1YmRpciA9ICdcMCc7CisgICAgfQorICAgIGNsb3NlZGlyKGRpcnApOworICAgIHJldHVybiBm b3VuZDsKK30KKworLyogL3N5cy9rZXJuZWwvY29uZmlnL3RhcmdldC94ZW4tcHZzY3NpL25hYS48 d3duPi90cGd0XzEvbHVuL2x1bl8wICovCitzdGF0aWMgYm9vbCB4bHVfX3ZzY3NpX3dhbGtfZGly X2x1bnMoc3RydWN0IHhsdV9fdnNjc2lfdGFyZ2V0ICp0Z3QpCit7CisgICAgYm9vbCBmb3VuZDsK KyAgICBESVIgKmRpcnA7CisgICAgc3RydWN0IGRpcmVudCAqZGU7CisgICAgc2l6ZV90IHBhdGhf bGVuID0gc3RybGVuKHRndC0+cGF0aCk7CisgICAgY2hhciAqc3ViZGlyID0gJnRndC0+cGF0aFtw YXRoX2xlbl07CisKKyAgICBkaXJwID0gb3BlbmRpcih0Z3QtPnBhdGgpOworICAgIGlmICghZGly cCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm91bmQgPSBmYWxzZTsKKyAgICB3aGls ZSAoKGRlID0gcmVhZGRpcihkaXJwKSkpIHsKKyAgICAgICAgaWYgKCFzdHJjbXAoZGUtPmRfbmFt ZSwgIi4iKSB8fCAhc3RyY21wKGRlLT5kX25hbWUsICIuLiIpKQorICAgICAgICAgICAgY29udGlu dWU7CisKKyAgICAgICAgaWYgKHNzY2FuZihkZS0+ZF9uYW1lLCAibHVuXyV1IiwgJnRndC0+bHVu KSAhPSAxKQorICAgICAgICAgICAgY29udGludWU7CisKKworICAgICAgICBzbnByaW50ZihzdWJk aXIsIHNpemVvZih0Z3QtPnBhdGgpIC0gcGF0aF9sZW4sICIvJXMiLCBkZS0+ZF9uYW1lKTsKKwor ICAgICAgICBmb3VuZCA9IHhsdV9fdnNjc2lfd2Fsa19kaXJfbHVuKHRndCk7CisgICAgICAgIGlm IChmb3VuZCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICpzdWJkaXIgPSAnXDAnOwor ICAgIH0KKyAgICBjbG9zZWRpcihkaXJwKTsKKyAgICByZXR1cm4gZm91bmQ7Cit9CisKKy8qIC9z eXMva2VybmVsL2NvbmZpZy90YXJnZXQveGVuLXB2c2NzaS9uYWEuPHd3bj4vdHBndF8xICovCitz dGF0aWMgYm9vbCB4bHVfX3ZzY3NpX3dhbGtfZGlyX25hYShzdHJ1Y3QgeGx1X192c2NzaV90YXJn ZXQgKnRndCkKK3sKKyAgICBib29sIGZvdW5kOworICAgIERJUiAqZGlycDsKKyAgICBzdHJ1Y3Qg ZGlyZW50ICpkZTsKKyAgICBzaXplX3QgcGF0aF9sZW4gPSBzdHJsZW4odGd0LT5wYXRoKTsKKyAg ICBjaGFyICpzdWJkaXIgPSAmdGd0LT5wYXRoW3BhdGhfbGVuXTsKKyAgICB1bnNpZ25lZCBpbnQg dHBndDsKKworICAgIGRpcnAgPSBvcGVuZGlyKHRndC0+cGF0aCk7CisgICAgaWYgKCFkaXJwKQor ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3VuZCA9IGZhbHNlOworICAgIHdoaWxlICgo ZGUgPSByZWFkZGlyKGRpcnApKSkgeworICAgICAgICBpZiAoIXN0cmNtcChkZS0+ZF9uYW1lLCAi LiIpIHx8ICFzdHJjbXAoZGUtPmRfbmFtZSwgIi4uIikpCisgICAgICAgICAgICBjb250aW51ZTsK KworICAgICAgICBpZiAoc3NjYW5mKGRlLT5kX25hbWUsICJ0cGd0XyV1IiwgJnRwZ3QpICE9IDEp CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBzbnByaW50ZihzdWJkaXIsIHNpemVv Zih0Z3QtPnBhdGgpIC0gcGF0aF9sZW4sICIvJXMvbHVuIiwgZGUtPmRfbmFtZSk7CisKKyAgICAg ICAgZm91bmQgPSB4bHVfX3ZzY3NpX3dhbGtfZGlyX2x1bnModGd0KTsKKyAgICAgICAgaWYgKGZv dW5kKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgKnN1YmRpciA9ICdcMCc7CisgICAg fQorICAgIGNsb3NlZGlyKGRpcnApOworICAgIHJldHVybiBmb3VuZDsKK30KKworLyogL3N5cy9r ZXJuZWwvY29uZmlnL3RhcmdldC94ZW4tcHZzY3NpL25hYS48d3duPiAqLworc3RhdGljIGJvb2wg eGx1X192c2NzaV9maW5kX3RhcmdldF93d24oc3RydWN0IHhsdV9fdnNjc2lfdGFyZ2V0ICp0Z3Qp Cit7CisgICAgYm9vbCBmb3VuZDsKKyAgICBESVIgKmRpcnA7CisgICAgc3RydWN0IGRpcmVudCAq ZGU7CisgICAgc2l6ZV90IHBhdGhfbGVuID0gc3RybGVuKHRndC0+cGF0aCk7CisgICAgY2hhciAq c3ViZGlyID0gJnRndC0+cGF0aFtwYXRoX2xlbl07CisKKyAgICBkaXJwID0gb3BlbmRpcih0Z3Qt PnBhdGgpOworICAgIGlmICghZGlycCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm91 bmQgPSBmYWxzZTsKKyAgICB3aGlsZSAoKGRlID0gcmVhZGRpcihkaXJwKSkpIHsKKyAgICAgICAg aWYgKCFzdHJjbXAoZGUtPmRfbmFtZSwgIi4iKSB8fCAhc3RyY21wKGRlLT5kX25hbWUsICIuLiIp KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHNzY2FuZihkZS0+ZF9uYW1l LCAibmFhLiUxNmMiLCB0Z3QtPnd3bikgIT0gMSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg ICAgICBpZiAoIXhsdV9fdnNjc2lfd3duX3ZhbGlkKHRndC0+d3duKSkKKyAgICAgICAgICAgIGNv bnRpbnVlOworCisgICAgICAgIHNucHJpbnRmKHN1YmRpciwgc2l6ZW9mKHRndC0+cGF0aCkgLSBw YXRoX2xlbiwgIi8lcyIsIGRlLT5kX25hbWUpOworCisgICAgICAgIGZvdW5kID0geGx1X192c2Nz aV93YWxrX2Rpcl9uYWEodGd0KTsKKyAgICAgICAgaWYgKGZvdW5kKQorICAgICAgICAgICAgYnJl YWs7CisKKyAgICAgICAgKnN1YmRpciA9ICdcMCc7CisgICAgfQorICAgIGNsb3NlZGlyKGRpcnAp OworICAgIHJldHVybiBmb3VuZDsKK30KKworLyoKKyAqIENvbnZlcnQgcGRldiBmcm9tIGNvbmZp ZyBzdHJpbmcgaW50byBwZGV2IHByb3BlcnR5IGZvciBiYWNrZW5kLAorICogd2hpY2ggaXMgZWl0 aGVyIGg6Yzp0OmwgZm9yIHhlbmxpbnV4IG9yIG5hYS53d246bHVuIGZvciBwdm9wcworICovCitz dGF0aWMgaW50IHhsdV9fdnNjc2lfZGV2X3RvX3BkZXYoWExVX0NvbmZpZyAqY2ZnLCBsaWJ4bF9j dHggKmN0eCwgY2hhciAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp YnhsX3ZzY3NpX2hjdGwgKnBkZXZfaGN0bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsaWJ4bF92c2NzaV9wZGV2ICpwZGV2KQoreworICAgIGludCByYyA9IEVSUk9SX0lOVkFM OworICAgIHN0cnVjdCB4bHVfX3ZzY3NpX3RhcmdldCAqdGd0OworICAgIHN0YXRpYyBjb25zdCBj aGFyIHhlbl9wdnNjc2lbXSA9IFhMVV9TWVNGU19UQVJHRVRfUFZTQ1NJOworCisgICAgLyogRmly c3QgZ2V0IGhjdGwgcmVwcmVzZW50YXRpb24gb2YgY29uZmlnIGl0ZW0gKi8KKyAgICBpZiAoeGx1 X192c2NzaV9wYXJzZV9kZXYoY2ZnLCBzdHIsIHBkZXZfaGN0bCkpCisgICAgICAgIGdvdG8gb3V0 OworCisgICAgLyogQ2hlY2sgaWYgYSBTQ1NJIHRhcmdldCBpdGVtIGV4aXN0cyBmb3IgdGhlIGNv bmZpZyBpdGVtICovCisgICAgaWYgKGFjY2Vzcyh4ZW5fcHZzY3NpLCBGX09LKSA9PSAwKSB7Cisg ICAgICAgIHRndCA9IGNhbGxvYygxLCBzaXplb2YoKnRndCkpOworICAgICAgICBpZiAoIXRndCkg eworICAgICAgICAgICAgcmMgPSBFUlJPUl9OT01FTTsKKyAgICAgICAgICAgIGdvdG8gb3V0Owor ICAgICAgICB9CisgICAgICAgIHRndC0+Y2ZnID0gY2ZnOworICAgICAgICB0Z3QtPnBkZXZfaGN0 bCA9IHBkZXZfaGN0bDsKKyAgICAgICAgdGd0LT5wZGV2ID0gcGRldjsKKyAgICAgICAgc25wcmlu dGYodGd0LT5wYXRoLCBzaXplb2YodGd0LT5wYXRoKSwgIiVzIiwgeGVuX3B2c2NzaSk7CisgICAg ICAgIGlmICh4bHVfX3ZzY3NpX2ZpbmRfdGFyZ2V0X3d3bih0Z3QpID09IHRydWUpIHsKKyAgICAg ICAgICAgIExPRyhjZmcsICInJXMnIG1hcHMgdG8gJyVzKCVzKSciLCBzdHIsIHRndC0+cGF0aCwg dGd0LT51ZGV2X3BhdGgpOworICAgICAgICAgICAgbGlieGxfdnNjc2lfcGRldl9pbml0X3R5cGUo cGRldiwgTElCWExfVlNDU0lfUERFVl9UWVBFX1dXTik7CisgICAgICAgICAgICBpZiAoYXNwcmlu dGYoJnBkZXYtPnUud3duLm0sICJuYWEuJXM6JXUiLCB0Z3QtPnd3biwgdGd0LT5sdW4pIDwgMCkg eworICAgICAgICAgICAgICAgIHJjID0gRVJST1JfTk9NRU07CisgICAgICAgICAgICAgICAgZ290 byBvdXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZnJlZSh0Z3QpOworICAg IH0gZWxzZSB7CisgICAgICAgIC8qIEFzc3VtZSB4ZW5saW51eCBiYWNrZW5kICovCisgICAgICAg IGxpYnhsX3ZzY3NpX3BkZXZfaW5pdF90eXBlKHBkZXYsIExJQlhMX1ZTQ1NJX1BERVZfVFlQRV9I Q1RMKTsKKyAgICAgICAgbGlieGxfdnNjc2lfaGN0bF9jb3B5KGN0eCwgJnBkZXYtPnUuaGN0bC5t LCBwZGV2X2hjdGwpOworICAgIH0KKyAgICByYyA9IDA7CisKK291dDoKKyAgICByZXR1cm4gcmM7 Cit9CisKKy8qIFdXTiBhcyB1bmRlcnN0b29kIGJ5IHB2b3BzICovCitzdGF0aWMgaW50IHhsdV9f dnNjc2lfd3duX3RvX3BkZXYoWExVX0NvbmZpZyAqY2ZnLCBjaGFyICpzdHIsIGxpYnhsX3ZzY3Np X3BkZXYgKnBkZXYpCit7CisgICAgaW50IHJjID0gRVJST1JfSU5WQUw7CisgICAgdW5zaWduZWQg aW50IGx1bjsKKyAgICBjaGFyIHd3bltYTFVfV1dOX0xFTiArIDFdOworCisgICAgbWVtc2V0KHd3 biwgMCwgc2l6ZW9mKHd3bikpOworICAgIGlmIChzc2NhbmYoc3RyLCAibmFhLiUxNmM6JXUiLCB3 d24sICZsdW4pID09IDIgJiYgeGx1X192c2NzaV93d25fdmFsaWQod3duKSkgeworICAgICAgICBs aWJ4bF92c2NzaV9wZGV2X2luaXRfdHlwZShwZGV2LCBMSUJYTF9WU0NTSV9QREVWX1RZUEVfV1dO KTsKKyAgICAgICAgcGRldi0+dS53d24ubSA9IHN0cmR1cChzdHIpOworICAgICAgICByYyA9IHBk ZXYtPnUud3duLm0gPyAwIDogRVJST1JfTk9NRU07CisgICAgfQorICAgIHJldHVybiByYzsKK30K Kworc3RhdGljIGludCB4bHVfX3ZzY3NpX3BhcnNlX3BkZXYoWExVX0NvbmZpZyAqY2ZnLCBsaWJ4 bF9jdHggKmN0eCwgY2hhciAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bGlieGxfdnNjc2lfcGRldiAqcGRldikKK3sKKyAgICBpbnQgcmMgPSBFUlJPUl9JTlZBTDsKKyAg ICBsaWJ4bF92c2NzaV9oY3RsIHBkZXZfaGN0bDsKKworICAgIGxpYnhsX3ZzY3NpX2hjdGxfaW5p dCgmcGRldl9oY3RsKTsKKyAgICBpZiAoc3RybmNtcChzdHIsICIvZGV2LyIsIDUpID09IDApIHsK KyAgICAgICAgcmMgPSB4bHVfX3ZzY3NpX2Rldl90b19wZGV2KGNmZywgY3R4LCBzdHIsICZwZGV2 X2hjdGwsIHBkZXYpOworICAgIH0gZWxzZSBpZiAoc3RybmNtcChzdHIsICJuYWEuIiwgNCkgPT0g MCkgeworICAgICAgICByYyA9IHhsdV9fdnNjc2lfd3duX3RvX3BkZXYoY2ZnLCBzdHIsIHBkZXYp OworICAgIH0gZWxzZSBpZiAoeGx1X192c2NzaV9wYXJzZV9oY3RsKHN0ciwgJnBkZXZfaGN0bCkg PT0gMCkgeworICAgICAgICAvKiBFaXRoZXIgeGVubGludXgsIG9yIHB2b3BzIHdpdGggcHJvcGVy bHkgY29uZmlndXJlZCBhbGlhcyBpbiBzeXNmcyAqLworICAgICAgICBsaWJ4bF92c2NzaV9wZGV2 X2luaXRfdHlwZShwZGV2LCBMSUJYTF9WU0NTSV9QREVWX1RZUEVfSENUTCk7CisgICAgICAgIGxp YnhsX3ZzY3NpX2hjdGxfY29weShjdHgsICZwZGV2LT51LmhjdGwubSwgJnBkZXZfaGN0bCk7Cisg ICAgICAgIHJjID0gMDsKKyAgICB9CisKKyAgICBpZiAocmMgPT0gMCkgeworICAgICAgICAgICAg cGRldi0+cF9kZXZuYW1lID0gc3RyZHVwKHN0cik7CisgICAgICAgICAgICBpZiAoIXBkZXYtPnBf ZGV2bmFtZSkKKyAgICAgICAgICAgICAgICByYyA9IEVSUk9SX05PTUVNOworICAgIH0KKworICAg IGxpYnhsX3ZzY3NpX2hjdGxfZGlzcG9zZSgmcGRldl9oY3RsKTsKKyAgICByZXR1cm4gcmM7Cit9 CisKK2ludCB4bHVfdnNjc2lfcGFyc2UoWExVX0NvbmZpZyAqY2ZnLCBsaWJ4bF9jdHggKmN0eCwg Y29uc3QgY2hhciAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZp Y2VfdnNjc2kgKm5ld19ob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF92 c2NzaV9kZXYgKm5ld19kZXYpCit7CisgICAgaW50IHJjOworICAgIGNoYXIgKnRtcCwgKnBkZXYs ICp2ZGV2LCAqZmhvc3Q7CisKKyAgICB0bXAgPSBzdHJkdXAoc3RyKTsKKyAgICBpZiAoIXRtcCkg eworICAgICAgICByYyA9IEVSUk9SX05PTUVNOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisK KyAgICBwZGV2ID0gc3RydG9rKHRtcCwgIiwiKTsKKyAgICB2ZGV2ID0gc3RydG9rKE5VTEwsICIs Iik7CisgICAgZmhvc3QgPSBzdHJ0b2soTlVMTCwgIiwiKTsKKyAgICBpZiAoIShwZGV2ICYmIHZk ZXYpKSB7CisgICAgICAgIExPRyhjZmcsICJpbnZhbGlkIGRldnNwZWM6ICclcydcbiIsIHN0cik7 CisgICAgICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKwor ICAgIHBkZXYgPSB4bHVfX3ZzY3NpX3RyaW1fc3RyaW5nKHBkZXYpOworICAgIHZkZXYgPSB4bHVf X3ZzY3NpX3RyaW1fc3RyaW5nKHZkZXYpOworCisgICAgcmMgPSB4bHVfX3ZzY3NpX3BhcnNlX3Bk ZXYoY2ZnLCBjdHgsIHBkZXYsICZuZXdfZGV2LT5wZGV2KTsKKyAgICBpZiAocmMpIHsKKyAgICAg ICAgTE9HKGNmZywgImZhaWxlZCB0byBwYXJzZSAlcywgcmMgPT0gJWQiLCBwZGV2LCByYyk7Cisg ICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGlmICh4bHVfX3ZzY3NpX3BhcnNlX2hjdGwo dmRldiwgJm5ld19kZXYtPnZkZXYpKSB7CisgICAgICAgIExPRyhjZmcsICJpbnZhbGlkICclcycs IGV4cGVjdGluZyBoc3Q6Y2huOnRndDpsdW4iLCB2ZGV2KTsKKyAgICAgICAgcmMgPSBFUlJPUl9J TlZBTDsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgLyogUmVjb3JkIGdyb3VwIGlu ZGV4ICovCisgICAgbmV3X2hvc3QtPnZfaHN0ID0gbmV3X2Rldi0+dmRldi5oc3Q7CisKKyAgICBp ZiAoZmhvc3QpIHsKKyAgICAgICAgZmhvc3QgPSB4bHVfX3ZzY3NpX3RyaW1fc3RyaW5nKGZob3N0 KTsKKyAgICAgICAgaWYgKHN0cmNtcChmaG9zdCwgImZlYXR1cmUtaG9zdCIpID09IDApIHsKKyAg ICAgICAgICAgIGxpYnhsX2RlZmJvb2xfc2V0KCZuZXdfaG9zdC0+ZmVhdHVyZV9ob3N0LCB0cnVl KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIExPRyhjZmcsICJpbnZhbGlkIG9wdGlv biAnJXMnLCBleHBlY3RpbmcgJXMiLCBmaG9zdCwgImZlYXR1cmUtaG9zdCIpOworICAgICAgICAg ICAgcmMgPSBFUlJPUl9JTlZBTDsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9Cisg ICAgfSBlbHNlCisgICAgICAgIGxpYnhsX2RlZmJvb2xfc2V0KCZuZXdfaG9zdC0+ZmVhdHVyZV9o b3N0LCBmYWxzZSk7CisgICAgcmMgPSAwOworCitvdXQ6CisgICAgZnJlZSh0bXApOworICAgIHJl dHVybiByYzsKK30KKworCitpbnQgeGx1X3ZzY3NpX2FwcGVuZF9kZXYobGlieGxfY3R4ICpjdHgs IGxpYnhsX2RldmljZV92c2NzaSAqaHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsaWJ4bF92c2NzaV9kZXYgKmRldikKK3sKKyAgICBpbnQgcmM7CisgICAgbGlieGxfdnNj c2lfZGV2ICpkZXZzOworCisgICAgZGV2cyA9IHJlYWxsb2MoaHN0LT52c2NzaV9kZXZzLCBzaXpl b2YoKmRldikgKiAoaHN0LT5udW1fdnNjc2lfZGV2cyArIDEpKTsKKyAgICBpZiAoIWRldnMpIHsK KyAgICAgICAgcmMgPSBFUlJPUl9OT01FTTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisg ICAgaHN0LT52c2NzaV9kZXZzID0gZGV2czsKKyAgICBsaWJ4bF92c2NzaV9kZXZfaW5pdChoc3Qt PnZzY3NpX2RldnMgKyBoc3QtPm51bV92c2NzaV9kZXZzKTsKKyAgICBkZXYtPnZzY3NpX2Rldl9p ZCA9IGhzdC0+bmV4dF92c2NzaV9kZXZfaWQ7CisgICAgbGlieGxfdnNjc2lfZGV2X2NvcHkoY3R4 LCBoc3QtPnZzY3NpX2RldnMgKyBoc3QtPm51bV92c2NzaV9kZXZzLCBkZXYpOworICAgIGhzdC0+ bnVtX3ZzY3NpX2RldnMrKzsKKyAgICBoc3QtPm5leHRfdnNjc2lfZGV2X2lkKys7CisgICAgcmMg PSAwOworb3V0OgorICAgIHJldHVybiByYzsKK30KKworaW50IHhsdV92c2NzaV9nZXRfaG9zdChY TFVfQ29uZmlnICpjZmcsIGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyLCBsaWJ4bF9kZXZpY2VfdnNjc2kgKnZzY3Np X2hvc3QpCit7CisgICAgbGlieGxfdnNjc2lfZGV2ICpuZXdfZGV2ID0gTlVMTDsKKyAgICBsaWJ4 bF9kZXZpY2VfdnNjc2kgKm5ld19ob3N0LCAqdnNjc2lfaG9zdHMgPSBOVUxMLCAqdG1wOworICAg IGludCByYywgZm91bmRfaG9zdCA9IC0xLCBpOworICAgIGludCBudW1faG9zdHM7CisKKyAgICBu ZXdfaG9zdCA9IG1hbGxvYyhzaXplb2YoKm5ld19ob3N0KSk7CisgICAgbmV3X2RldiA9IG1hbGxv YyhzaXplb2YoKm5ld19kZXYpKTsKKyAgICBpZiAoIShuZXdfaG9zdCAmJiBuZXdfZGV2KSkgewor ICAgICAgICByYyA9IEVSUk9SX05PTUVNOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisgICAg bGlieGxfZGV2aWNlX3ZzY3NpX2luaXQobmV3X2hvc3QpOworICAgIGxpYnhsX3ZzY3NpX2Rldl9p bml0KG5ld19kZXYpOworCisgICAgcmMgPSB4bHVfdnNjc2lfcGFyc2UoY2ZnLCBjdHgsIHN0ciwg bmV3X2hvc3QsIG5ld19kZXYpOworICAgIGlmIChyYykKKyAgICAgICAgZ290byBvdXQ7CisKKyAg ICAvKiBMb29rIGZvciBleGlzdGluZyB2c2NzaV9ob3N0IGZvciBnaXZlbiBkb21haW4gKi8KKyAg ICB2c2NzaV9ob3N0cyA9IGxpYnhsX2RldmljZV92c2NzaV9saXN0KGN0eCwgZG9taWQsICZudW1f aG9zdHMpOworICAgIGlmICh2c2NzaV9ob3N0cykgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwg bnVtX2hvc3RzOyArK2kpIHsKKyAgICAgICAgICAgIGlmICh2c2NzaV9ob3N0c1tpXS52X2hzdCA9 PSBuZXdfaG9zdC0+dl9oc3QpIHsKKyAgICAgICAgICAgICAgICBmb3VuZF9ob3N0ID0gaTsKKyAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor ICAgIGlmIChmb3VuZF9ob3N0ID09IC0xKSB7CisgICAgICAgIC8qIE5vdCBmb3VuZCwgY3JlYXRl IG5ldyBob3N0ICovCisgICAgICAgIG5ld19ob3N0LT5uZXh0X3ZzY3NpX2Rldl9pZCA9IDA7Cisg ICAgICAgIHRtcCA9IG5ld19ob3N0OworICAgIH0gZWxzZSB7CisgICAgICAgIHRtcCA9IHZzY3Np X2hvc3RzICsgZm91bmRfaG9zdDsKKworICAgICAgICAvKiBDaGVjayBpZiB0aGUgdmRldiBhZGRy ZXNzIGlzIGFscmVhZHkgdGFrZW4gKi8KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHRtcC0+bnVt X3ZzY3NpX2RldnM7ICsraSkgeworICAgICAgICAgICAgaWYgKHRtcC0+dnNjc2lfZGV2c1tpXS52 ZGV2LmNobiA9PSBuZXdfZGV2LT52ZGV2LmNobiAmJgorICAgICAgICAgICAgICAgIHRtcC0+dnNj c2lfZGV2c1tpXS52ZGV2LnRndCA9PSBuZXdfZGV2LT52ZGV2LnRndCAmJgorICAgICAgICAgICAg ICAgIHRtcC0+dnNjc2lfZGV2c1tpXS52ZGV2Lmx1biA9PSBuZXdfZGV2LT52ZGV2Lmx1bikgewor ICAgICAgICAgICAgICAgIExPRyhjZmcsICJ2ZGV2ICcldToldToldToldScgaXMgYWxyZWFkeSB1 c2VkLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgbmV3X2Rldi0+dmRldi5oc3QsIG5ld19kZXYt PnZkZXYuY2huLCBuZXdfZGV2LT52ZGV2LnRndCwgbmV3X2Rldi0+dmRldi5sdW4pOworICAgICAg ICAgICAgICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgICAgICAgICAgICAgZ290byBvdXQ7Cisg ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobGlieGxfZGVmYm9vbF92YWwo bmV3X2hvc3QtPmZlYXR1cmVfaG9zdCkgIT0KKyAgICAgICAgICAgIGxpYnhsX2RlZmJvb2xfdmFs KHRtcC0+ZmVhdHVyZV9ob3N0KSkgeworICAgICAgICAgICAgTE9HKGNmZywgImRpZmZlcmVudCBm ZWF0dXJlLWhvc3Qgc2V0dGluZzogIgorICAgICAgICAgICAgICAgICAgICAgICJleGlzdGluZyBo b3N0IGhhcyBpdCAlcywgbmV3IGhvc3QgaGFzIGl0ICVzXG4iLAorICAgICAgICAgICAgICAgIGxp YnhsX2RlZmJvb2xfdmFsKG5ld19ob3N0LT5mZWF0dXJlX2hvc3QpID8gInNldCIgOiAidW5zZXQi LAorICAgICAgICAgICAgICAgIGxpYnhsX2RlZmJvb2xfdmFsKHRtcC0+ZmVhdHVyZV9ob3N0KSA/ ICJzZXQiIDogInVuc2V0Iik7CisgICAgICAgICAgICByYyA9IEVSUk9SX0lOVkFMOworICAgICAg ICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBsaWJ4bF9kZXZpY2VfdnNj c2lfY29weShjdHgsIHZzY3NpX2hvc3QsIHRtcCk7CisgICAgcmMgPSB4bHVfdnNjc2lfYXBwZW5k X2RldihjdHgsIHZzY3NpX2hvc3QsIG5ld19kZXYpOworICAgIGlmIChyYykKKyAgICAgICAgZ290 byBvdXQ7CisKKyAgICByYyA9IDA7CisKK291dDoKKyAgICBpZiAodnNjc2lfaG9zdHMpIHsKKyAg ICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9ob3N0czsgKytpKQorICAgICAgICAgICAgbGlieGxf ZGV2aWNlX3ZzY3NpX2Rpc3Bvc2UoJnZzY3NpX2hvc3RzW2ldKTsKKyAgICAgICAgZnJlZSh2c2Nz aV9ob3N0cyk7CisgICAgfQorICAgIGxpYnhsX3ZzY3NpX2Rldl9kaXNwb3NlKG5ld19kZXYpOwor ICAgIGxpYnhsX2RldmljZV92c2NzaV9kaXNwb3NlKG5ld19ob3N0KTsKKyAgICBmcmVlKG5ld19k ZXYpOworICAgIGZyZWUobmV3X2hvc3QpOworICAgIHJldHVybiByYzsKK30KKworaW50IHhsdV92 c2NzaV9kZXRhY2goWExVX0NvbmZpZyAqY2ZnLCBsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9t aWQsIGNoYXIgKnN0cikKK3sKKyAgICBsaWJ4bF92c2NzaV9kZXYgdl9kZXYgPSB7IH0sICp2ZDsK KyAgICBsaWJ4bF9kZXZpY2VfdnNjc2kgdl9oc3QgPSB7IH0sICp2aCwgKnZzY3NpX2hvc3RzOwor ICAgIGludCBudW1faG9zdHMsIGgsIGQsIGZvdW5kID0gMDsKKyAgICBjaGFyICp0bXAgPSBOVUxM OworCisgICAgbGlieGxfZGV2aWNlX3ZzY3NpX2luaXQoJnZfaHN0KTsKKyAgICBsaWJ4bF92c2Nz aV9kZXZfaW5pdCgmdl9kZXYpOworCisgICAgLyogQ3JlYXRlIGEgZHVtbXkgY2ZnICovCisgICAg aWYgKGFzcHJpbnRmKCZ0bXAsICIwOjA6MDowLCVzIiwgc3RyKSA8IDApIHsKKyAgICAgICAgTE9H KGNmZywgImFzcHJpbnRmIGZhaWxlZCB3aGlsZSByZW1vdmluZyAlcyBmcm9tIGRvbWlkICV1Iiwg c3RyLCBkb21pZCk7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGlmICh4bHVfdnNj c2lfcGFyc2UoY2ZnLCBjdHgsIHRtcCwgJnZfaHN0LCAmdl9kZXYpKQorICAgICAgICBnb3RvIG91 dDsKKworICAgIHZzY3NpX2hvc3RzID0gbGlieGxfZGV2aWNlX3ZzY3NpX2xpc3QoY3R4LCBkb21p ZCwgJm51bV9ob3N0cyk7CisgICAgaWYgKCF2c2NzaV9ob3N0cykKKyAgICAgICAgZ290byBvdXQ7 CisKKyAgICBmb3IgKGggPSAwOyBoIDwgbnVtX2hvc3RzOyArK2gpIHsKKyAgICAgICAgdmggPSB2 c2NzaV9ob3N0cyArIGg7CisgICAgICAgIGZvciAoZCA9IDA7IGQgPCB2aC0+bnVtX3ZzY3NpX2Rl dnM7IGQrKykgeworICAgICAgICAgICAgdmQgPSB2aC0+dnNjc2lfZGV2cyArIGQ7CisjZGVmaW5l IENNUChtZW1iZXIpICh2ZC0+dmRldi5tZW1iZXIgPT0gdl9kZXYudmRldi5tZW1iZXIpCisgICAg ICAgICAgICBpZiAoIWZvdW5kICYmIENNUChoc3QpICYmIENNUChjaG4pICYmIENNUCh0Z3QpICYm IENNUChsdW4pKSB7CisgICAgICAgICAgICAgICAgdmQtPnJlbW92ZSA9IHRydWU7CisgICAgICAg ICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpX3JlbW92ZShjdHgsIGRvbWlkLCB2aCwgTlVMTCk7 CisgICAgICAgICAgICAgICAgZm91bmQgPSAxOworICAgICAgICAgICAgfQorI3VuZGVmIENNUAor ICAgICAgICAgICAgbGlieGxfdnNjc2lfZGV2X2Rpc3Bvc2UodmQpOworICAgICAgICB9CisgICAg ICAgIGxpYnhsX2RldmljZV92c2NzaV9kaXNwb3NlKHZoKTsKKyAgICB9CisgICAgZnJlZSh2c2Nz aV9ob3N0cyk7CisKK291dDoKKyAgICBmcmVlKHRtcCk7CisgICAgbGlieGxfdnNjc2lfZGV2X2Rp c3Bvc2UoJnZfZGV2KTsKKyAgICBsaWJ4bF9kZXZpY2VfdnNjc2lfZGlzcG9zZSgmdl9oc3QpOwor ICAgIHJldHVybiBmb3VuZDsKK30KKworaW50IHhsdV92c2NzaV9jb25maWdfYWRkKFhMVV9Db25m aWcgKmNmZywKKyAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9jdHggKmN0eCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgaW50ICpudW1fdnNjc2lzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2Rl dmljZV92c2NzaSAqKnZzY3NpcykKK3sKKyAgICBpbnQgcmMsIGk7CisgICAgbGlieGxfdnNjc2lf ZGV2IHZfZGV2ID0geyB9OworICAgIGxpYnhsX2RldmljZV92c2NzaSAqdG1wLCB2X2hzdCA9IHsg fTsKKyAgICBib29sIGhzdF9mb3VuZCA9IGZhbHNlOworCisgICAgLyoKKyAgICAgKiAjMTogcGFy c2UgdGhlIGRldnNwZWMgYW5kIHBsYWNlIGl0IGluIHRlbXBvcmFyeSBob3N0K2RldiBwYXJ0Cisg ICAgICogIzI6IGZpbmQgZXhpc3RpbmcgdnNjc2lfaG9zdCB3aXRoIG51bWJlciB2X2hzdAorICAg ICAqICAgICBpZiBmb3VuZCwgYXBwZW5kIHRoZSB2c2NzaV9kZXYgdG8gdGhpcyB2c2NzaV9ob3N0 CisgICAgICogIzM6IG90aGVyd2lzZSwgY3JlYXRlIG5ldyB2c2NzaV9ob3N0IGFuZCBhcHBlbmQg dnNjc2lfZGV2CisgICAgICogTm90ZTogdl9oc3QgZG9lcyBub3QgcmVwcmVzZW50IHRoZSBpbmRl eCBuYW1lZCAibnVtX3ZzY3NpcyIsCisgICAgICogICAgICAgaXQgaXMgYSBwcml2YXRlIGluZGV4 IHVzZWQganVzdCBpbiB0aGUgY29uZmlnIGZpbGUKKyAgICAgKi8KKyAgICBsaWJ4bF9kZXZpY2Vf dnNjc2lfaW5pdCgmdl9oc3QpOworICAgIGxpYnhsX3ZzY3NpX2Rldl9pbml0KCZ2X2Rldik7CisK KyAgICByYyA9IHhsdV92c2NzaV9wYXJzZShjZmcsIGN0eCwgc3RyLCAmdl9oc3QsICZ2X2Rldik7 CisgICAgaWYgKHJjKQorICAgICAgICBnb3RvIG91dDsKKworICAgIGlmICgqbnVtX3ZzY3Npcykg eworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgKm51bV92c2NzaXM7IGkrKykgeworICAgICAgICAg ICAgdG1wID0gKnZzY3NpcyArIGk7CisgICAgICAgICAgICBpZiAodG1wLT52X2hzdCA9PSB2X2hz dC52X2hzdCkgeworICAgICAgICAgICAgICAgIHJjID0geGx1X3ZzY3NpX2FwcGVuZF9kZXYoY3R4 LCB0bXAsICZ2X2Rldik7CisgICAgICAgICAgICAgICAgaWYgKHJjKSB7CisgICAgICAgICAgICAg ICAgICAgIExPRyhjZmcsICJ4bHVfdnNjc2lfYXBwZW5kX2RldiBmYWlsZWQ6ICVkXG4iLCByYyk7 CisgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICBoc3RfZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworCSAg ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFoc3RfZm91bmQgfHwgISpu dW1fdnNjc2lzKSB7CisgICAgICAgIHRtcCA9IHJlYWxsb2MoKnZzY3Npcywgc2l6ZW9mKHZfaHN0 KSAqICgqbnVtX3ZzY3NpcyArIDEpKTsKKyAgICAgICAgaWYgKCF0bXApIHsKKyAgICAgICAgICAg IExPRyhjZmcsICJyZWFsbG9jICMlZCBmYWlsZWQiLCAqbnVtX3ZzY3NpcyArIDEpOworICAgICAg ICAgICAgcmMgPSBFUlJPUl9OT01FTTsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9 CisgICAgICAgICp2c2NzaXMgPSB0bXA7CisgICAgICAgIHRtcCA9ICp2c2NzaXMgKyAqbnVtX3Zz Y3NpczsKKyAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpX2luaXQodG1wKTsKKworICAgICAgICB2 X2hzdC5kZXZpZCA9ICpudW1fdnNjc2lzOworICAgICAgICB2X2hzdC5uZXh0X3ZzY3NpX2Rldl9p ZCA9IDA7CisgICAgICAgIGxpYnhsX2RldmljZV92c2NzaV9jb3B5KGN0eCwgdG1wLCAmdl9oc3Qp OworCisgICAgICAgIHJjID0geGx1X3ZzY3NpX2FwcGVuZF9kZXYoY3R4LCB0bXAsICZ2X2Rldik7 CisgICAgICAgIGlmIChyYykgeworICAgICAgICAgICAgTE9HKGNmZywgInhsdV92c2NzaV9hcHBl bmRfZGV2IGZhaWxlZDogJWRcbiIsIHJjKTsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAg ICB9CisKKyAgICAgICAgKCpudW1fdnNjc2lzKSsrOworICAgIH0KKworICAgIHJjID0gMDsKK291 dDoKKyAgICBsaWJ4bF92c2NzaV9kZXZfZGlzcG9zZSgmdl9kZXYpOworICAgIGxpYnhsX2Rldmlj ZV92c2NzaV9kaXNwb3NlKCZ2X2hzdCk7CisgICAgcmV0dXJuIHJjOworfQorI2Vsc2UgLyogISBf X2xpbnV4X18gKi8KK2ludCB4bHVfdnNjc2lfYXBwZW5kX2RldihsaWJ4bF9jdHggKmN0eCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2kgKmhzdCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICBsaWJ4bF92c2NzaV9kZXYgKmRldikKK3sKKyAgICByZXR1cm4gRVJS T1JfSU5WQUw7Cit9CisKK2ludCB4bHVfdnNjc2lfZ2V0X2hvc3QoWExVX0NvbmZpZyAqY29uZmln LAorICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9jdHggKmN0eCwKKyAgICAgICAgICAgICAg ICAgICAgICAgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpICp2c2Nz aV9ob3N0KQoreworICAgIHJldHVybiBFUlJPUl9JTlZBTDsKK30KKworaW50IHhsdV92c2NzaV9w YXJzZShYTFVfQ29uZmlnICpjZmcsCisgICAgICAgICAgICAgICAgICAgIGxpYnhsX2N0eCAqY3R4 LAorICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHIsCisgICAgICAgICAgICAgICAg ICAgIGxpYnhsX2RldmljZV92c2NzaSAqbmV3X2hvc3QsCisgICAgICAgICAgICAgICAgICAgIGxp YnhsX3ZzY3NpX2RldiAqbmV3X2RldikKK3sKKyAgICByZXR1cm4gRVJST1JfSU5WQUw7Cit9CisK K2ludCB4bHVfdnNjc2lfZGV0YWNoKFhMVV9Db25maWcgKmNmZywKKyAgICAgICAgICAgICAgICAg ICAgIGxpYnhsX2N0eCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZG9taWQs CisgICAgICAgICAgICAgICAgICAgICBjaGFyICpzdHIpCit7CisgICAgcmV0dXJuIEVSUk9SX0lO VkFMOworfQorCitpbnQgeGx1X3ZzY3NpX2NvbmZpZ19hZGQoWExVX0NvbmZpZyAqY2ZnLAorICAg ICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2N0eCAqY3R4LAorICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGNoYXIgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm51 bV92c2NzaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpICoq dnNjc2lzKQoreworICAgIHJldHVybiBFUlJPUl9JTlZBTDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0 IGEvdG9vbHMvbGlieGwvbGlieGx1dGlsLmggYi90b29scy9saWJ4bC9saWJ4bHV0aWwuaAppbmRl eCA5ODk2MDVhLi5mNTkyOGZiIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bHV0aWwuaAor KysgYi90b29scy9saWJ4bC9saWJ4bHV0aWwuaApAQCAtMTE0LDYgKzExNCwyNyBAQCBpbnQgeGx1 X3BjaV9wYXJzZV9iZGYoWExVX0NvbmZpZyAqY2ZnLCBsaWJ4bF9kZXZpY2VfcGNpICpwY2lkZXYs IGNvbnN0IGNoYXIgKnN0cgogaW50IHhsdV92aWZfcGFyc2VfcmF0ZShYTFVfQ29uZmlnICpjZmcs IGNvbnN0IGNoYXIgKnJhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV9u aWMgKm5pYyk7CiAKKy8qIEFwcGVuZCBhIHZzY3NpIGRldmljZSB0byBhIHZzY3NpIGhvc3QgKi8K K2ludCB4bHVfdnNjc2lfYXBwZW5kX2RldihsaWJ4bF9jdHggKmN0eCwgbGlieGxfZGV2aWNlX3Zz Y3NpICpoc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfdnNjc2lfZGV2ICpkZXYp OworLyogRmlsbCB2c2NzaV9ob3N0IHdpdGggZGV2aWNlIGRlc2NyaWJlZCBpbiBzdHIgKHBkZXYs dmRldlssb3B0aW9uc10pICovCitpbnQgeGx1X3ZzY3NpX2dldF9ob3N0KFhMVV9Db25maWcgKmNv bmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfY3R4ICpjdHgsCisgICAgICAgICAg ICAgICAgICAgICAgIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyICpzdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaSAq dnNjc2lfaG9zdCk7CisvKiBQYXJzZSBjb25maWcgc3RyaW5nIGFuZCBmaWxsIHByb3ZpZGVkIHZz Y3NpIGhvc3QgYW5kIHZzY3NpIGRldmljZSAqLworaW50IHhsdV92c2NzaV9wYXJzZShYTFVfQ29u ZmlnICpjZmcsIGxpYnhsX2N0eCAqY3R4LCBjb25zdCBjaGFyICpzdHIsCisgICAgICAgICAgICAg ICAgICAgIGxpYnhsX2RldmljZV92c2NzaSAqbmV3X2hvc3QsCisgICAgICAgICAgICAgICAgICAg IGxpYnhsX3ZzY3NpX2RldiAqbmV3X2Rldik7CisvKiBEZXRhY2ggdnNjc2kgZGV2aWNlIGRlc2Ny aWJlZCBpbiBjb25maWcgc3RyaW5nIChwZGV2LHZkZXZbLG9wdGlvbnNdKSAqLworaW50IHhsdV92 c2NzaV9kZXRhY2goWExVX0NvbmZpZyAqY2ZnLCBsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9t aWQsIGNoYXIgKnN0cik7CisvKiBBZGQgdnNjc2kgZGV2aWNlIGRlc2NyaWJlZCBpbiBjb25maWcg c3RyaW5nIChwZGV2LHZkZXZbLG9wdGlvbnNdKSB0byBkX2NvbmZpZyAqLworaW50IHhsdV92c2Nz aV9jb25maWdfYWRkKFhMVV9Db25maWcgKmNmZywKKyAgICAgICAgICAgICAgICAgICAgICAgICBs aWJ4bF9jdHggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHIs CisgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpudW1fdnNjc2lzLAorICAgICAgICAgICAg ICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaSAqKnZzY3Npcyk7CiAjZW5kaWYgLyogTElC WExVVElMX0ggKi8KIAogLyoKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL3hsLmggYi90b29scy9s aWJ4bC94bC5oCmluZGV4IDViYzEzOGMuLjVjODI2ODggMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhs L3hsLmgKKysrIGIvdG9vbHMvbGlieGwveGwuaApAQCAtODMsNiArODMsOSBAQCBpbnQgbWFpbl9j aGFubmVsbGlzdChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwogaW50IG1haW5fYmxvY2thdHRhY2go aW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKIGludCBtYWluX2Jsb2NrbGlzdChpbnQgYXJnYywgY2hh ciAqKmFyZ3YpOwogaW50IG1haW5fYmxvY2tkZXRhY2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsK K2ludCBtYWluX3ZzY3NpYXR0YWNoKGludCBhcmdjLCBjaGFyICoqYXJndik7CitpbnQgbWFpbl92 c2NzaWxpc3QoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2ludCBtYWluX3ZzY3NpZGV0YWNoKGlu dCBhcmdjLCBjaGFyICoqYXJndik7CiBpbnQgbWFpbl92dHBtYXR0YWNoKGludCBhcmdjLCBjaGFy ICoqYXJndik7CiBpbnQgbWFpbl92dHBtbGlzdChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwogaW50 IG1haW5fdnRwbWRldGFjaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwpkaWZmIC0tZ2l0IGEvdG9v bHMvbGlieGwveGxfY21kaW1wbC5jIGIvdG9vbHMvbGlieGwveGxfY21kaW1wbC5jCmluZGV4IDM5 NGI1NWQuLjQxOGVkNmMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL3hsX2NtZGltcGwuYworKysg Yi90b29scy9saWJ4bC94bF9jbWRpbXBsLmMKQEAgLTExNjgsNyArMTE2OCw3IEBAIHN0YXRpYyB2 b2lkIHBhcnNlX2NvbmZpZ19kYXRhKGNvbnN0IGNoYXIgKmNvbmZpZ19zb3VyY2UsCiAgICAgY29u c3QgY2hhciAqYnVmOwogICAgIGxvbmcgbCwgdmNwdXMgPSAwOwogICAgIFhMVV9Db25maWcgKmNv bmZpZzsKLSAgICBYTFVfQ29uZmlnTGlzdCAqY3B1cywgKnZiZHMsICpuaWNzLCAqcGNpcywgKmN2 ZmJzLCAqY3B1aWRzLCAqdnRwbXM7CisgICAgWExVX0NvbmZpZ0xpc3QgKmNwdXMsICp2YmRzLCAq bmljcywgKnBjaXMsICpjdmZicywgKmNwdWlkcywgKnZ0cG1zLCAqdnNjc2lzOwogICAgIFhMVV9D b25maWdMaXN0ICpjaGFubmVscywgKmlvcG9ydHMsICppcnFzLCAqaW9tZW0sICp2aXJpZGlhbjsK ICAgICBpbnQgbnVtX2lvcG9ydHMsIG51bV9pcnFzLCBudW1faW9tZW0sIG51bV9jcHVzLCBudW1f dmlyaWRpYW47CiAgICAgaW50IHBjaV9wb3dlcl9tZ210ID0gMDsKQEAgLTE2ODMsNiArMTY4Mywx NyBAQCBzdGF0aWMgdm9pZCBwYXJzZV9jb25maWdfZGF0YShjb25zdCBjaGFyICpjb25maWdfc291 cmNlLAogICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKCF4bHVfY2ZnX2dldF9saXN0KGNvbmZp ZywgInZzY3NpIiwgJnZzY3NpcywgMCwgMCkpIHsKKyAgICAgICAgaW50IG51bV92c2NzaV9pdGVt cyA9IDA7CisgICAgICAgIGRfY29uZmlnLT5udW1fdnNjc2lzID0gMDsKKyAgICAgICAgZF9jb25m aWctPnZzY3NpcyA9IE5VTEw7CisgICAgICAgIHdoaWxlICgoYnVmID0geGx1X2NmZ19nZXRfbGlz dGl0ZW0gKHZzY3NpcywgbnVtX3ZzY3NpX2l0ZW1zKSkgIT0gTlVMTCkgeworICAgICAgICAgICAg aWYgKHhsdV92c2NzaV9jb25maWdfYWRkKGNvbmZpZywgY3R4LCBidWYsICZkX2NvbmZpZy0+bnVt X3ZzY3NpcywgJmRfY29uZmlnLT52c2NzaXMpKQorICAgICAgICAgICAgICAgIGV4aXQoMSk7Cisg ICAgICAgICAgICBudW1fdnNjc2lfaXRlbXMrKzsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlm ICgheGx1X2NmZ19nZXRfbGlzdChjb25maWcsICJ2dHBtIiwgJnZ0cG1zLCAwLCAwKSkgewogICAg ICAgICBkX2NvbmZpZy0+bnVtX3Z0cG1zID0gMDsKICAgICAgICAgZF9jb25maWctPnZ0cG1zID0g TlVMTDsKQEAgLTY2MzAsNiArNjY0MSwxNzcgQEAgaW50IG1haW5fYmxvY2tkZXRhY2goaW50IGFy Z2MsIGNoYXIgKiphcmd2KQogICAgIHJldHVybiByYzsKIH0KIAoraW50IG1haW5fdnNjc2lhdHRh Y2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIHVpbnQzMl90IGRvbWlkOworICAgIGlu dCBvcHQsIHJjOworICAgIFhMVV9Db25maWcgKmNvbmZpZyA9IE5VTEw7CisgICAgbGlieGxfZGV2 aWNlX3ZzY3NpICp2c2NzaV9ob3N0ID0gTlVMTDsKKyAgICBjaGFyICpzdHIgPSBOVUxMLCAqZmVh dF9idWYgPSBOVUxMOworCisgICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgIiIsIE5VTEwsICJz Y3NpLWF0dGFjaCIsIDEpIHsKKyAgICAgICAgLyogTm8gb3B0aW9ucyAqLworICAgIH0KKworICAg IGlmIChhcmdjIDwgNCB8fCBhcmdjID4gNSkgeworICAgICAgICBoZWxwKCJzY3NpLWF0dGFjaCIp OworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBpZiAobGlieGxfZG9tYWluX3F1YWxp Zmllcl90b19kb21pZChjdHgsIGFyZ3Zbb3B0aW5kXSwgJmRvbWlkKSA8IDApIHsKKyAgICAgICAg ZnByaW50ZihzdGRlcnIsICIlcyBpcyBhbiBpbnZhbGlkIGRvbWFpbiBpZGVudGlmaWVyXG4iLCBh cmd2W29wdGluZF0pOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBvcHRpbmQrKzsK KworICAgIGlmIChhcmdjID09IDUpIHsKKyAgICAgICAgaWYgKGFzcHJpbnRmKCZmZWF0X2J1Ziwg IiwlcyIsIGFyZ3ZbNF0pIDwgMCkgeworICAgICAgICAgICAgcGVycm9yKCJhc3ByaW50ZiIpOwor ICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYXNwcmlu dGYoJnN0ciwgIiVzLCVzJXMiLCBhcmd2WzJdLCBhcmd2WzNdLCBmZWF0X2J1ZiA/OiAiIikgPCAw KSB7CisgICAgICAgIHBlcnJvcigiYXNwcmludGYiKTsKKyAgICAgICAgcmMgPSAxOworICAgICAg ICBnb3RvIG91dDs7CisgICAgfQorCisgICAgdnNjc2lfaG9zdCA9IHhtYWxsb2Moc2l6ZW9mKCp2 c2NzaV9ob3N0KSk7CisgICAgbGlieGxfZGV2aWNlX3ZzY3NpX2luaXQodnNjc2lfaG9zdCk7CisK KyAgICBjb25maWcgPSB4bHVfY2ZnX2luaXQoc3RkZXJyLCAiY29tbWFuZCBsaW5lIik7CisgICAg aWYgKCFjb25maWcpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gYWxsb2Nh dGUgZm9yIGNvbmZpZ3VyYXRpb25cbiIpOworICAgICAgICByYyA9IDE7CisgICAgICAgIGdvdG8g b3V0OworICAgIH0KKworICAgIC8qIFBhcnNlIGNvbmZpZyBzdHJpbmcgYW5kIHN0b3JlIHJlc3Vs dCAqLworICAgIHJjID0geGx1X3ZzY3NpX2dldF9ob3N0KGNvbmZpZywgY3R4LCBkb21pZCwgc3Ry LCB2c2NzaV9ob3N0KTsKKyAgICBpZiAocmMgPCAwKQorICAgICAgICBnb3RvIG91dDsKKworICAg IGlmIChkcnlydW5fb25seSkgeworICAgICAgICBjaGFyICpqc29uID0gbGlieGxfZGV2aWNlX3Zz Y3NpX3RvX2pzb24oY3R4LCB2c2NzaV9ob3N0KTsKKyAgICAgICAgcHJpbnRmKCJ2c2NzaTogJXNc biIsIGpzb24pOworICAgICAgICBmcmVlKGpzb24pOworICAgICAgICBpZiAoZmVycm9yKHN0ZG91 dCkgfHwgZmZsdXNoKHN0ZG91dCkpIHsgcGVycm9yKCJzdGRvdXQiKTsgZXhpdCgtMSk7IH0KKyAg ICAgICAgcmMgPSAwOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICAvKiBGaW5hbGx5 IGFkZCB0aGUgZGV2aWNlICovCisgICAgaWYgKGxpYnhsX2RldmljZV92c2NzaV9hZGQoY3R4LCBk b21pZCwgdnNjc2lfaG9zdCwgTlVMTCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJsaWJ4 bF9kZXZpY2VfdnNjc2lfYWRkIGZhaWxlZC5cbiIpOworICAgICAgICByYyA9IDE7CisgICAgICAg IGdvdG8gb3V0OworICAgIH0KKworICAgIHJjID0gMDsKK291dDoKKyAgICBpZiAoY29uZmlnKQor ICAgICAgICB4bHVfY2ZnX2Rlc3Ryb3koY29uZmlnKTsKKyAgICBsaWJ4bF9kZXZpY2VfdnNjc2lf ZGlzcG9zZSh2c2NzaV9ob3N0KTsKKyAgICBmcmVlKHZzY3NpX2hvc3QpOworICAgIGZyZWUoc3Ry KTsKKyAgICBmcmVlKGZlYXRfYnVmKTsKKyAgICByZXR1cm4gcmM7Cit9CisKK2ludCBtYWluX3Zz Y3NpbGlzdChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgaW50IG9wdDsKKyAgICB1aW50 MzJfdCBkb21pZDsKKyAgICBsaWJ4bF9kZXZpY2VfdnNjc2kgKnZzY3NpX2hvc3RzOworICAgIGxp YnhsX3ZzY3NpaW5mbyB2c2NzaWluZm87CisgICAgaW50IG51bV9ob3N0cywgaCwgZDsKKworICAg IFNXSVRDSF9GT1JFQUNIX09QVChvcHQsICIiLCBOVUxMLCAic2NzaS1saXN0IiwgMSkgeworICAg ICAgICAvKiBObyBvcHRpb25zICovCisgICAgfQorICAgIGlmIChhcmdjIDwgMikgeworICAgICAg ICBoZWxwKCJzY3NpLWxpc3QiKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgLyog ICAgICBJZHggIEJFICBzdGF0ZSBob3N0IHBfaHN0IHZfaHN0IHN0YXRlICovCisgICAgcHJpbnRm KCIlLTNzICUtM3MgJS01cyAlLTVzICUtMTBzICUtMTBzICUtNXNcbiIsCisgICAgICAgICAgICJJ ZHgiLCAiQkUiLCAic3RhdGUiLCAiaG9zdCIsICJwaHktaGN0bCIsICJ2aXItaGN0bCIsICJkZXZz dGF0ZSIpOworICAgIGZvciAoYXJndiArPSBvcHRpbmQsIGFyZ2MgLT0gb3B0aW5kOyBhcmdjID4g MDsgLS1hcmdjLCArK2FyZ3YpIHsKKyAgICAgICAgaWYgKGxpYnhsX2RvbWFpbl9xdWFsaWZpZXJf dG9fZG9taWQoY3R4LCAqYXJndiwgJmRvbWlkKSA8IDApIHsKKyAgICAgICAgICAgIGZwcmludGYo c3RkZXJyLCAiJXMgaXMgYW4gaW52YWxpZCBkb21haW4gaWRlbnRpZmllclxuIiwgKmFyZ3YpOwor ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCEodnNjc2lfaG9z dHMgPSBsaWJ4bF9kZXZpY2VfdnNjc2lfbGlzdChjdHgsIGRvbWlkLCAmbnVtX2hvc3RzKSkpIHsK KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGZvciAoaCA9IDA7IGgg PCBudW1faG9zdHM7ICsraCkgeworICAgICAgICAgICAgZm9yIChkID0gMDsgZCA8IHZzY3NpX2hv c3RzW2hdLm51bV92c2NzaV9kZXZzOyBkKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoIWxpYnhs X2RldmljZV92c2NzaV9nZXRpbmZvKGN0eCwgZG9taWQsICZ2c2NzaV9ob3N0c1toXSwgJnZzY3Np X2hvc3RzW2hdLnZzY3NpX2RldnNbZF0sICZ2c2NzaWluZm8pKSB7CisgICAgICAgICAgICAgICAg ICAgIGNoYXIgdmRldls2NF07CisgICAgICAgICAgICAgICAgICAgIHNucHJpbnRmKHZkZXYsIHNp emVvZih2ZGV2KSwgIiV1OiV1OiV1OiV1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dnNjc2lpbmZvLnZkZXYuaHN0LCB2c2NzaWluZm8udmRldi5jaG4sIHZzY3NpaW5mby52ZGV2LnRn dCwgdnNjc2lpbmZvLnZkZXYubHVuKTsKKyAgICAgICAgICAgICAgICAgICAgLyogICAgICBJZHgg IEJFICBzdGF0ZSBTdGEgKi8KKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlLTNkICUtM2Qg JS01ZCAlLTVkICUtMTBzICUtMTBzICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg dnNjc2lpbmZvLmRldmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdnNjc2lpbmZvLmJh Y2tlbmRfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2c2NzaWluZm8udnNjc2lfaG9z dF9zdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZzY3NpaW5mby5iYWNrZW5kX2lk LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdnNjc2lpbmZvLnBkZXYucF9kZXZuYW1lLCB2 ZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdnNjc2lpbmZvLnZzY3NpX2Rldl9zdGF0 ZSk7CisKKyAgICAgICAgICAgICAgICAgICAgbGlieGxfdnNjc2lpbmZvX2Rpc3Bvc2UoJnZzY3Np aW5mbyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbGli eGxfZGV2aWNlX3ZzY3NpX2Rpc3Bvc2UoJnZzY3NpX2hvc3RzW2hdKTsKKyAgICAgICAgfQorICAg ICAgICBmcmVlKHZzY3NpX2hvc3RzKTsKKworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitp bnQgbWFpbl92c2NzaWRldGFjaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgaW50IG9w dDsKKyAgICBjaGFyICpkb20gPSBhcmd2WzFdLCAqc3RyID0gYXJndlsyXTsKKyAgICB1aW50MzJf dCBkb21pZDsKKyAgICBYTFVfQ29uZmlnICpjb25maWcgPSBOVUxMOworICAgIGludCBmb3VuZCA9 IDA7CisKKyAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAiIiwgTlVMTCwgInNjc2ktZGV0YWNo IiwgMSkgeworICAgICAgICAvKiBObyBvcHRpb25zICovCisgICAgfQorCisgICAgaWYgKGFyZ2Mg PCAzKSB7CisgICAgICAgIGhlbHAoInNjc2ktZGV0YWNoIik7CisgICAgICAgIHJldHVybiAxOwor ICAgIH0KKworICAgIGlmIChsaWJ4bF9kb21haW5fcXVhbGlmaWVyX3RvX2RvbWlkKGN0eCwgZG9t LCAmZG9taWQpIDwgMCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIGlzIGFuIGludmFs aWQgZG9tYWluIGlkZW50aWZpZXJcbiIsIGRvbSk7CisgICAgICAgIHJldHVybiAxOworICAgIH0K KworICAgIGNvbmZpZyA9IHhsdV9jZmdfaW5pdChzdGRlcnIsICJjb21tYW5kIGxpbmUiKTsKKyAg ICBpZiAoIWNvbmZpZykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBhbGxv Y2F0ZSBmb3IgY29uZmlndXJhdGlvblxuIik7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKwor ICAgIGZvdW5kID0geGx1X3ZzY3NpX2RldGFjaChjb25maWcsIGN0eCwgZG9taWQsIHN0cik7Cisg ICAgaWYgKCFmb3VuZCkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcygldSkgdmRldiAlcyBk b2VzIG5vdCBleGlzdCBpbiBkb21haW4gJXNcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgc3RyLCBk b20pOworCitvdXQ6CisgICAgaWYgKGNvbmZpZykKKyAgICAgICAgeGx1X2NmZ19kZXN0cm95KGNv bmZpZyk7CisgICAgcmV0dXJuICFmb3VuZDsKK30KKwogaW50IG1haW5fdnRwbWF0dGFjaChpbnQg YXJnYywgY2hhciAqKmFyZ3YpCiB7CiAgICAgaW50IG9wdDsKZGlmZiAtLWdpdCBhL3Rvb2xzL2xp YnhsL3hsX2NtZHRhYmxlLmMgYi90b29scy9saWJ4bC94bF9jbWR0YWJsZS5jCmluZGV4IDkyODQ4 ODcuLjgwYTdmNTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL3hsX2NtZHRhYmxlLmMKKysrIGIv dG9vbHMvbGlieGwveGxfY21kdGFibGUuYwpAQCAtMzY2LDYgKzM2NiwyMSBAQCBzdHJ1Y3QgY21k X3NwZWMgY21kX3RhYmxlW10gPSB7CiAgICAgICAiRGVzdHJveSBhIGRvbWFpbidzIHZpcnR1YWwg YmxvY2sgZGV2aWNlIiwKICAgICAgICI8RG9tYWluPiA8RGV2SWQ+IiwKICAgICB9LAorICAgIHsg InNjc2ktYXR0YWNoIiwKKyAgICAgICZtYWluX3ZzY3NpYXR0YWNoLCAxLCAxLAorICAgICAgIkF0 dGFjaCBhIGRvbTAgU0NTSSBkZXZpY2UgdG8gYSBkb21haW4uIiwKKyAgICAgICI8RG9tYWluPiA8 UGh5c0RldmljZT4gPFZpcnREZXZpY2U+IiwKKyAgICB9LAorICAgIHsgInNjc2ktbGlzdCIsCisg ICAgICAmbWFpbl92c2NzaWxpc3QsIDAsIDAsCisgICAgICAiTGlzdCBhbGwgZG9tMCBTQ1NJIGRl dmljZXMgY3VycmVudGx5IGF0dGFjaGVkIHRvIGEgZG9tYWluLiIsCisgICAgICAiPERvbWFpbihz KT4iLAorICAgIH0sCisgICAgeyAic2NzaS1kZXRhY2giLAorICAgICAgJm1haW5fdnNjc2lkZXRh Y2gsIDAsIDEsCisgICAgICAiRGV0YWNoIGEgc3BlY2lmaWVkIFNDU0kgZGV2aWNlIGZyb20gYSBk b21haW4uIiwKKyAgICAgICI8RG9tYWluPiA8VmlydERldmljZT4iLAorICAgIH0sCiAgICAgeyAi dnRwbS1hdHRhY2giLAogICAgICAgJm1haW5fdnRwbWF0dGFjaCwgMSwgMSwKICAgICAgICJDcmVh dGUgYSBuZXcgdmlydHVhbCBUUE0gZGV2aWNlIiwKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxp c3RzLnhlbi5vcmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==