From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.gmx.net (mout.gmx.net [212.227.17.22]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.server123.net (Postfix) with ESMTPS for ; Thu, 5 Jan 2017 09:53:51 +0100 (CET) References: <5863DE72.30408@gmx.net> <5863FF30.7090609@gmx.net> <5865FF40.6020906@gmx.net> <5d158567-d1a9-5945-c7b6-9d9a605fad8d@gmail.com> From: Carl-Daniel Hailfinger Message-ID: Date: Thu, 5 Jan 2017 09:53:46 +0100 MIME-Version: 1.0 In-Reply-To: <5d158567-d1a9-5945-c7b6-9d9a605fad8d@gmail.com> Content-Type: multipart/mixed; boundary="------------894632D45E23B5EF56047DCB" Subject: Re: [dm-crypt] GEOM_ELI support in dm-crypt/cryptsetup List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Milan Broz , dm-crypt@saout.de This is a multi-part message in MIME format. --------------894632D45E23B5EF56047DCB Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit On 01.01.2017 23:23, Milan Broz wrote: > On 12/30/2016 07:31 AM, Carl-Daniel Hailfinger wrote: >> Followup to myself: >> >> A patch for cryptsetup follows. It does not talk to the kernel interface >> yet, but it can decode v7 of the GELI header. >> Keyfile support is next to decrypt the encrypted metadata in the header. > I think we can implement it as just another supported on-disk format but > it will need some testing images and full integration in libcryptsetup > (similar to TrueCrypt/VeraCrypt formats). I'm using the TrueCrypt/VeraCrypt code in libcryptsetup as template for the GELI code. > I can do that myself but I would like to have full documentation and/or > implementation of parsing of GELI on-disk format. That's actually a problem. The available documentation about the on-disk format is essentially just the FreeBSD code, and various bits and pieces scattered all over the net. GELI code in FreeBSD: https://svnweb.freebsd.org/base/head/sys/geom/eli/ Example GPLv3 code in GRUB (for password-based containers only): http://git.savannah.gnu.org/cgit/grub.git/tree/grub-core/disk/geli.c http://git.savannah.gnu.org/cgit/grub.git/tree/grub-core/disk/cryptodisk.c Example GPLv3 code as a NBD implementation: https://github.com/jepler/ungeli Bits and pieces of documentation (not all of them refer to the current version of GELI): https://www.freebsd.org/cgi/man.cgi?geli(8) https://www.freebsd.org/doc/handbook/disks-encrypting.html https://lists.freebsd.org/pipermail/freebsd-geom/2012-June/005284.html http://www.derkeiler.com/Newsgroups/sci.crypt/2005-07/0959.html The way keys are generated, stored and used is not entirely straightforward. The various pieces of documentation and analysis contradict each other and I have not verified which one is correct, so please take this with a large heap of salt, it might be totally bogus: For some cases, a 64-byte key file (generated from random data) is hashed with SHA512, the last 256 bits of the hash are thrown away, and the remaining 256 bits are divided into an IV key and an AES-128 key. For older versions of GELI, the IV key is used for AES encryption as well (a bug which was corrected in newer versions of GELI). The metadata has two key store slots. Each slot hosts an encrypted version of the master key (which itself is divided into IV key and encryption "data" key) and the SHA512 hash of the master key. The "data" key part of the master key is not directly used for AES-XTS encryption, but there are more derivation mechanisms in there which are relevant for storage media larger than 2^20 blocks. A quick note about the on-disk format: Ciphertext starts directly at the beginning of the container. The metadata is stored in the last 512-byte sector of the container. Soft sectors are usually 4096 bytes, optionally amended with a 512-byte authentication data sector per 4096-byte soft sector. AFAIK no third-party code supports authentication data. > And it will take some time (maybe create issue for it in project tracker). I noticed that I had forgotten to attach the current state of the implementation. I think patch 3 compiles and does something useful, patch 4 is the current state (and probably doesn't compile). The code is full of #if 0 and similar crud, and you can see it's just messing with the TCRYPT code to replace some of the code with GELI code. The code does NOT reflect my coding standards, it's just a crufty hack while I was figuring out how to add code to cryptsetup. What the code does right now is parse a container and output the encrypted keyslots as well as check the MD5 checksum of the metadata. > Anyway, thanks for working on this! You're welcome. I hope to revisit this in a few weeks when I have more time. Regards, Carl-Daniel --------------894632D45E23B5EF56047DCB Content-Type: text/plain; charset=UTF-8; name="0001-Initial-version-of-cryptsetup-with-GELI-support.patch.02" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="0001-Initial-version-of-cryptsetup-with-GELI-support.patch.0"; filename*1="2" RnJvbSA4YzAwNTczMTVmZThhYzgwMjIxMjA4ODhjNDAxYWU4NDM1MzgyODliIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBDYXJsLURhbmllbCBIYWlsZmluZ2VyIDxjLWQuaGFp bGZpbmdlci5kZXZlbC4yMDA2QGdteC5uZXQ+CkRhdGU6IEZyaSwgMzAgRGVjIDIwMTYgMDU6 NDA6NDQgKzAxMDAKU3ViamVjdDogW1BBVENIXSBJbml0aWFsIHZlcnNpb24gb2YgY3J5cHRz ZXR1cCB3aXRoIEdFTEkgc3VwcG9ydC4gT25seSBkdW1waW5nCiBpcyBzdXBwb3J0ZWQgcmln aHQgbm93LgoKLS0tCiBjb25maWd1cmUuYWMgICAgICAgICB8ICAgIDEgKwogbGliL01ha2Vm aWxlLmFtICAgICAgfCAgICA2ICstCiBsaWIvZ2VsaS9NYWtlZmlsZS5hbSB8ICAgMTQgKwog bGliL2dlbGkvZ2VsaS5jICAgICAgfCAxMDczICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiBsaWIvZ2VsaS9nZWxpLmggICAgICB8ICAgOTYg KysrKysKIGxpYi9saWJjcnlwdHNldHVwLmggIHwgICAxMyArCiBsaWIvc2V0dXAuYyAgICAg ICAgICB8ICAgNjcgKysrKwogc3JjL2NyeXB0c2V0dXAuYyAgICAgfCAgMTA2ICsrKystCiA4 IGZpbGVzIGNoYW5nZWQsIDEzNzMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBsaWIvZ2VsaS9NYWtlZmlsZS5hbQogY3JlYXRlIG1vZGUgMTAw NjQ0IGxpYi9nZWxpL2dlbGkuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9nZWxpL2dlbGku aAoKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCBkMWYw MjlhLi4xYzQ2YTdkIDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJl LmFjCkBAIC00NjcsNiArNDY3LDcgQEAgbGliL2x1a3MxL01ha2VmaWxlCiBsaWIvbG9vcGFl cy9NYWtlZmlsZQogbGliL3Zlcml0eS9NYWtlZmlsZQogbGliL3RjcnlwdC9NYWtlZmlsZQor bGliL2dlbGkvTWFrZWZpbGUKIHNyYy9NYWtlZmlsZQogcG8vTWFrZWZpbGUuaW4KIG1hbi9N YWtlZmlsZQpkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLmFtIGIvbGliL01ha2VmaWxlLmFt CmluZGV4IDY2NjI1NjguLjViOTlhN2MgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZS5hbQor KysgYi9saWIvTWFrZWZpbGUuYW0KQEAgLTEsNCArMSw0IEBACi1TVUJESVJTID0gY3J5cHRv X2JhY2tlbmQgbHVrczEgbG9vcGFlcyB2ZXJpdHkgdGNyeXB0CitTVUJESVJTID0gY3J5cHRv X2JhY2tlbmQgbHVrczEgbG9vcGFlcyB2ZXJpdHkgdGNyeXB0IGdlbGkKIAogbW9kdWxlZGly ID0gJChsaWJkaXIpL2NyeXB0c2V0dXAKIApAQCAtMTIsNiArMTIsNyBAQCBBTV9DUFBGTEFH UyA9IC1pbmNsdWRlIGNvbmZpZy5oIFwKIAktSSQodG9wX3NyY2RpcikvbGliL2xvb3BhZXMJ CVwKIAktSSQodG9wX3NyY2RpcikvbGliL3Zlcml0eQkJXAogCS1JJCh0b3Bfc3JjZGlyKS9s aWIvdGNyeXB0CQlcCisJLUkkKHRvcF9zcmNkaXIpL2xpYi9nZWxpCQlcCiAJLUREQVRBRElS PVwiIiQoZGF0YWRpcikiXCIJCVwKIAktRExJQkRJUj1cIiIkKGxpYmRpcikiXCIJCVwKIAkt RFBSRUZJWD1cIiIkKHByZWZpeCkiXCIJCVwKQEAgLTI1LDcgKzI2LDggQEAgY29tbW9uX2xk YWRkID0gXAogCWx1a3MxL2xpYmx1a3MxLmxhCQkJXAogCWxvb3BhZXMvbGlibG9vcGFlcy5s YQkJCVwKIAl2ZXJpdHkvbGlidmVyaXR5LmxhCQkJXAotCXRjcnlwdC9saWJ0Y3J5cHQubGEK Kwl0Y3J5cHQvbGlidGNyeXB0LmxhCQkJXAorCWdlbGkvbGliZ2VsaS5sYQogCiBsaWJjcnlw dHNldHVwX2xhX0RFUEVOREVOQ0lFUyA9ICQoY29tbW9uX2xkYWRkKSBsaWJjcnlwdHNldHVw LnN5bQogCmRpZmYgLS1naXQgYS9saWIvZ2VsaS9NYWtlZmlsZS5hbSBiL2xpYi9nZWxpL01h a2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YWVmNGUK LS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2VsaS9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDE0 IEBACittb2R1bGVkaXIgPSAkKGxpYmRpcikvY3J5cHRzZXR1cAorCitub2luc3RfTFRMSUJS QVJJRVMgPSBsaWJnZWxpLmxhCisKK2xpYmdlbGlfbGFfQ0ZMQUdTID0gLVdhbGwgJChBTV9D RkxBR1MpIEBDUllQVE9fQ0ZMQUdTQAorCitsaWJnZWxpX2xhX1NPVVJDRVMgPSBcCisJZ2Vs aS5jIFwKKwlnZWxpLmgKKworQU1fQ1BQRkxBR1MgPSAtaW5jbHVkZSBjb25maWcuaCBcCisg ICAgICAgIC1JJCh0b3Bfc3JjZGlyKS9saWIJCQlcCisgICAgICAgIC1JJCh0b3Bfc3JjZGly KS9saWIvY3J5cHRvX2JhY2tlbmQKKwpkaWZmIC0tZ2l0IGEvbGliL2dlbGkvZ2VsaS5jIGIv bGliL2dlbGkvZ2VsaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQz NzkwZWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2VsaS9nZWxpLmMKQEAgLTAsMCArMSwx MDczIEBACisvKgorICogVENSWVBUIChUcnVlQ3J5cHQtY29tcGF0aWJsZSkgYW5kIFZlcmFD cnlwdCB2b2x1bWUgaGFuZGxpbmcKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIFJlZCBI YXQsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0y MDE1LCBNaWxhbiBCcm96CisgKgorICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2 ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO VQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBp ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMu LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEz MDEgVVNBLgorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+ CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8 ZmNudGwuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgImxpYmNyeXB0c2V0 dXAuaCIKKyNpbmNsdWRlICJnZWxpLmgiCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworI2lm IDAKKy8qIFRDUllQVCBQQktERiB2YXJpYW50cyAqLworc3RhdGljIHN0cnVjdCB7CisJdW5z aWduZWQgaW50IGxlZ2FjeToxOworCXVuc2lnbmVkIGludCB2ZXJhY3J5cHQ6MTsKKwljb25z dCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKmhhc2g7CisJdW5zaWduZWQgaW50IGl0ZXJh dGlvbnM7Cit9IHRjcnlwdF9rZGZbXSA9IHsKKwl7IDAsIDAsICJwYmtkZjIiLCAicmlwZW1k MTYwIiwgMjAwMCB9LAorCXsgMCwgMCwgInBia2RmMiIsICJyaXBlbWQxNjAiLCAxMDAwIH0s CisJeyAwLCAwLCAicGJrZGYyIiwgInNoYTUxMiIsICAgIDEwMDAgfSwKKwl7IDAsIDAsICJw YmtkZjIiLCAid2hpcmxwb29sIiwgMTAwMCB9LAorCXsgMSwgMCwgInBia2RmMiIsICJzaGEx IiwgICAgICAyMDAwIH0sCisJeyAwLCAxLCAicGJrZGYyIiwgInNoYTUxMiIsICAgIDUwMDAw MCB9LAorCXsgMCwgMSwgInBia2RmMiIsICJyaXBlbWQxNjAiLCA2NTUzMzEgfSwKKwl7IDAs IDEsICJwYmtkZjIiLCAicmlwZW1kMTYwIiwgMzI3NjYxIH0sIC8vIGJvb3Qgb25seQorCXsg MCwgMSwgInBia2RmMiIsICJ3aGlybHBvb2wiLCA1MDAwMDAgfSwKKwl7IDAsIDEsICJwYmtk ZjIiLCAic2hhMjU2IiwgICAgNTAwMDAwIH0sIC8vIFZlcmFDcnlwdCAxLjBmCisJeyAwLCAx LCAicGJrZGYyIiwgInNoYTI1NiIsICAgIDIwMDAwMCB9LCAvLyBib290IG9ubHkKKwl7IDAs IDAsIE5VTEwsICAgICBOVUxMLCAgICAgICAgMCB9Cit9OworCitzdHJ1Y3QgdGNyeXB0X2Fs ZyB7CisJCWNvbnN0IGNoYXIgKm5hbWU7CisJCXVuc2lnbmVkIGludCBrZXlfc2l6ZTsKKwkJ dW5zaWduZWQgaW50IGl2X3NpemU7CisJCXVuc2lnbmVkIGludCBrZXlfb2Zmc2V0OworCQl1 bnNpZ25lZCBpbnQgaXZfb2Zmc2V0OyAvKiBvciB0d2VhayBrZXkgb2Zmc2V0ICovCisJCXVu c2lnbmVkIGludCBrZXlfZXh0cmFfc2l6ZTsKK307CisKK3N0cnVjdCB0Y3J5cHRfYWxncyB7 CisJdW5zaWduZWQgaW50IGxlZ2FjeToxOworCXVuc2lnbmVkIGludCBjaGFpbl9jb3VudDsK Kwl1bnNpZ25lZCBpbnQgY2hhaW5fa2V5X3NpemU7CisJY29uc3QgY2hhciAqbG9uZ19uYW1l OworCWNvbnN0IGNoYXIgKm1vZGU7CisJc3RydWN0IHRjcnlwdF9hbGcgY2lwaGVyWzNdOwor fTsKKworLyogVENSWVBUIGNpcGhlciB2YXJpYW50cyAqLworc3RhdGljIHN0cnVjdCB0Y3J5 cHRfYWxncyB0Y3J5cHRfY2lwaGVyW10gPSB7CisvKiBYVFMgbW9kZSAqLworezAsMSw2NCwi YWVzIiwieHRzLXBsYWluNjQiLAorCXt7ImFlcyIsICAgIDY0LDE2LDAsMzIsMH19fSwKK3sw LDEsNjQsInNlcnBlbnQiLCJ4dHMtcGxhaW42NCIsCisJe3sic2VycGVudCIsNjQsMTYsMCwz MiwwfX19LAorezAsMSw2NCwidHdvZmlzaCIsInh0cy1wbGFpbjY0IiwKKwl7eyJ0d29maXNo Iiw2NCwxNiwwLDMyLDB9fX0sCit7MCwyLDEyOCwidHdvZmlzaC1hZXMiLCJ4dHMtcGxhaW42 NCIsCisJe3sidHdvZmlzaCIsNjQsMTYsIDAsNjQsMH0sCisJIHsiYWVzIiwgICAgNjQsMTYs MzIsOTYsMH19fSwKK3swLDMsMTkyLCJzZXJwZW50LXR3b2Zpc2gtYWVzIiwieHRzLXBsYWlu NjQiLAorCXt7InNlcnBlbnQiLDY0LDE2LCAwLCA5NiwwfSwKKwkgeyJ0d29maXNoIiw2NCwx NiwzMiwxMjgsMH0sCisJIHsiYWVzIiwgICAgNjQsMTYsNjQsMTYwLDB9fX0sCit7MCwyLDEy OCwiYWVzLXNlcnBlbnQiLCJ4dHMtcGxhaW42NCIsCisJe3siYWVzIiwgICAgNjQsMTYsIDAs NjQsMH0sCisJIHsic2VycGVudCIsNjQsMTYsMzIsOTYsMH19fSwKK3swLDMsMTkyLCJhZXMt dHdvZmlzaC1zZXJwZW50IiwieHRzLXBsYWluNjQiLAorCXt7ImFlcyIsICAgIDY0LDE2LCAw LCA5NiwwfSwKKwkgeyJ0d29maXNoIiw2NCwxNiwzMiwxMjgsMH0sCisJIHsic2VycGVudCIs NjQsMTYsNjQsMTYwLDB9fX0sCit7MCwyLDEyOCwic2VycGVudC10d29maXNoIiwieHRzLXBs YWluNjQiLAorCXt7InNlcnBlbnQiLDY0LDE2LCAwLDY0LDB9LAorCSB7InR3b2Zpc2giLDY0 LDE2LDMyLDk2LDB9fX0sCisKKy8qIExSVyBtb2RlICovCit7MCwxLDQ4LCJhZXMiLCJscnct YmVuYmkiLAorCXt7ImFlcyIsICAgIDQ4LDE2LDMyLDAsMH19fSwKK3swLDEsNDgsInNlcnBl bnQiLCJscnctYmVuYmkiLAorCXt7InNlcnBlbnQiLDQ4LDE2LDMyLDAsMH19fSwKK3swLDEs NDgsInR3b2Zpc2giLCJscnctYmVuYmkiLAorCXt7InR3b2Zpc2giLDQ4LDE2LDMyLDAsMH19 fSwKK3swLDIsOTYsInR3b2Zpc2gtYWVzIiwibHJ3LWJlbmJpIiwKKwl7eyJ0d29maXNoIiw0 OCwxNiwzMiwwLDB9LAorCSB7ImFlcyIsICAgIDQ4LDE2LDY0LDAsMH19fSwKK3swLDMsMTQ0 LCJzZXJwZW50LXR3b2Zpc2gtYWVzIiwibHJ3LWJlbmJpIiwKKwl7eyJzZXJwZW50Iiw0OCwx NiwzMiwwLDB9LAorCSB7InR3b2Zpc2giLDQ4LDE2LDY0LDAsMH0sCisJIHsiYWVzIiwgICAg NDgsMTYsOTYsMCwwfX19LAorezAsMiw5NiwiYWVzLXNlcnBlbnQiLCJscnctYmVuYmkiLAor CXt7ImFlcyIsICAgIDQ4LDE2LDMyLDAsMH0sCisJIHsic2VycGVudCIsNDgsMTYsNjQsMCww fX19LAorezAsMywxNDQsImFlcy10d29maXNoLXNlcnBlbnQiLCJscnctYmVuYmkiLAorCXt7 ImFlcyIsICAgIDQ4LDE2LDMyLDAsMH0sCisJIHsidHdvZmlzaCIsNDgsMTYsNjQsMCwwfSwK KwkgeyJzZXJwZW50Iiw0OCwxNiw5NiwwLDB9fX0sCit7MCwyLDk2LCJzZXJwZW50LXR3b2Zp c2giLCAibHJ3LWJlbmJpIiwKKwl7eyJzZXJwZW50Iiw0OCwxNiwzMiwwLDB9LAorCSB7InR3 b2Zpc2giLDQ4LDE2LDY0LDAsMH19fSwKKworLyogS2VybmVsIExSVyBibG9jayBzaXplIGlz IGZpeGVkIHRvIDE2IGJ5dGVzIGZvciBHRigyXjEyOCkKKyAqIHRodXMgY2Fubm90IGJlIHVz ZWQgd2l0aCBibG93ZmlzaCB3aGVyZSBibG9jayBpcyA4IGJ5dGVzLgorICogVGhlcmUgYWxz byBubyBHRigyXjY0KSBzdXBwb3J0LgorezEsMSw2NCwiYmxvd2Zpc2hfbGUiLCJscnctYmVu YmkiLAorCSB7eyJibG93ZmlzaF9sZSIsNjQsOCwzMiwwLDB9fX0sCit7MSwyLDExMiwiYmxv d2Zpc2hfbGUtYWVzIiwibHJ3LWJlbmJpIiwKKwkge3siYmxvd2Zpc2hfbGUiLDY0LCA4LDMy LDAsMH0sCisJICB7ImFlcyIsICAgICAgICA0OCwxNiw4OCwwLDB9fX0sCit7MSwzLDE2MCwi c2VycGVudC1ibG93ZmlzaF9sZS1hZXMiLCJscnctYmVuYmkiLAorCSAge3sic2VycGVudCIs ICAgIDQ4LDE2LCAzMiwwLDB9LAorCSAgIHsiYmxvd2Zpc2hfbGUiLDY0LCA4LCA2NCwwLDB9 LAorCSAgIHsiYWVzIiwgICAgICAgIDQ4LDE2LDEyMCwwLDB9fX0sKi8KKworLyoKKyAqIENC QyArICJvdXRlciIgQ0JDIChib3RoIHdpdGggd2hpdGVuaW5nKQorICogY2hhaW5fa2V5X3Np emU6IGFsZ19rZXlzX2J5dGVzICsgSVZfc2VlZF9ieXRlcyArIHdoaXRlbmluZ19ieXRlcwor ICovCit7MSwxLDMyKzE2KzE2LCJhZXMiLCJjYmMtdGN3IiwKKwl7eyJhZXMiLCAgICAzMiwx NiwzMiwwLDMyfX19LAorezEsMSwzMisxNisxNiwic2VycGVudCIsImNiYy10Y3ciLAorCXt7 InNlcnBlbnQiLDMyLDE2LDMyLDAsMzJ9fX0sCit7MSwxLDMyKzE2KzE2LCJ0d29maXNoIiwi Y2JjLXRjdyIsCisJe3sidHdvZmlzaCIsMzIsMTYsMzIsMCwzMn19fSwKK3sxLDIsNjQrMTYr MTYsInR3b2Zpc2gtYWVzIiwiY2JjaS10Y3J5cHQiLAorCXt7InR3b2Zpc2giLDMyLDE2LDMy LDAsMH0sCisJIHsiYWVzIiwgICAgMzIsMTYsNjQsMCwzMn19fSwKK3sxLDMsOTYrMTYrMTYs InNlcnBlbnQtdHdvZmlzaC1hZXMiLCJjYmNpLXRjcnlwdCIsCisJe3sic2VycGVudCIsMzIs MTYsMzIsMCwwfSwKKwkgeyJ0d29maXNoIiwzMiwxNiw2NCwwLDB9LAorCSB7ImFlcyIsICAg IDMyLDE2LDk2LDAsMzJ9fX0sCit7MSwyLDY0KzE2KzE2LCJhZXMtc2VycGVudCIsImNiY2kt dGNyeXB0IiwKKwl7eyJhZXMiLCAgICAzMiwxNiwzMiwwLDB9LAorCSB7InNlcnBlbnQiLDMy LDE2LDY0LDAsMzJ9fX0sCit7MSwzLDk2KzE2KzE2LCJhZXMtdHdvZmlzaC1zZXJwZW50Iiwg ImNiY2ktdGNyeXB0IiwKKwl7eyJhZXMiLCAgICAzMiwxNiwzMiwwLDB9LAorCSB7InR3b2Zp c2giLDMyLDE2LDY0LDAsMH0sCisJIHsic2VycGVudCIsMzIsMTYsOTYsMCwzMn19fSwKK3sx LDIsNjQrMTYrMTYsInNlcnBlbnQtdHdvZmlzaCIsICJjYmNpLXRjcnlwdCIsCisJe3sic2Vy cGVudCIsMzIsMTYsMzIsMCwwfSwKKwkgeyJ0d29maXNoIiwzMiwxNiw2NCwwLDMyfX19LAor ezEsMSwxNis4KzE2LCJjYXN0NSIsImNiYy10Y3ciLAorCXt7ImNhc3Q1IiwgICAxNiw4LDMy LDAsMjR9fX0sCit7MSwxLDI0KzgrMTYsImRlczNfZWRlIiwiY2JjLXRjdyIsCisJe3siZGVz M19lZGUiLDI0LDgsMzIsMCwyNH19fSwKK3sxLDEsNTYrOCsxNiwiYmxvd2Zpc2hfbGUiLCJj YmMtdGNyeXB0IiwKKwl7eyJibG93ZmlzaF9sZSIsNTYsOCwzMiwwLDI0fX19LAorezEsMiw4 OCsxNisxNiwiYmxvd2Zpc2hfbGUtYWVzIiwiY2JjLXRjcnlwdCIsCisJe3siYmxvd2Zpc2hf bGUiLDU2LCA4LDMyLDAsMH0sCisJIHsiYWVzIiwgICAgICAgIDMyLDE2LDg4LDAsMzJ9fX0s Cit7MSwzLDEyMCsxNisxNiwic2VycGVudC1ibG93ZmlzaF9sZS1hZXMiLCJjYmMtdGNyeXB0 IiwKKwl7eyJzZXJwZW50IiwgICAgMzIsMTYsIDMyLDAsMH0sCisJIHsiYmxvd2Zpc2hfbGUi LDU2LCA4LCA2NCwwLDB9LAorCSB7ImFlcyIsICAgICAgICAzMiwxNiwxMjAsMCwzMn19fSwK K3t9Cit9OworI2VuZGlmCisKK3N0YXRpYyBpbnQgR0VMSV9oZHJfZnJvbV9kaXNrKHN0cnVj dCBnZWxpX3BoZHIgKmhkciwKKwkJCQlzdHJ1Y3QgY3J5cHRfcGFyYW1zX2dlbGkgKnBhcmFt cywKKwkJCQlpbnQgY2lwaGVyX2luZGV4KQoreworCWxvZ19kYmcoIkdFTEkgdHJhY2tpbmc6 IDEwMFxuIik7CisJLyogQ2hlY2sgc2FuaXR5IG9mIGhlYWRlciAqLworCWlmIChzdHJjbXAo R19FTElfTUFHSUMsIGhkci0+bWRfbWFnaWMpKSB7CisJCWxvZ19kYmcoIk1pc3NpbmcgR0VM SSBtYWdpYy5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBGSVhNRTogQ2hl Y2sgTUQ1ICovCisKKwkvKiBDb252ZXJ0IGhlYWRlciB0byBjcHUgZm9ybWF0ICovCisJaGRy LT5tZF92ZXJzaW9uICAgID0gbGUzMl90b19jcHUoaGRyLT5tZF92ZXJzaW9uKTsKKwloZHIt Pm1kX2ZsYWdzICAgICAgPSBsZTMyX3RvX2NwdShoZHItPm1kX2ZsYWdzKTsKKwloZHItPm1k X2VhbGdvICAgICAgPSBsZTE2X3RvX2NwdShoZHItPm1kX2VhbGdvKTsKKwloZHItPm1kX2tl eWxlbiAgICAgPSBsZTE2X3RvX2NwdShoZHItPm1kX2tleWxlbik7CisJaGRyLT5tZF9hYWxn byAgICAgID0gbGUxNl90b19jcHUoaGRyLT5tZF9hYWxnbyk7CisJaGRyLT5tZF9wcm92c2l6 ZSAgID0gbGU2NF90b19jcHUoaGRyLT5tZF9wcm92c2l6ZSk7CisJaGRyLT5tZF9zZWN0b3Jz aXplID0gbGUzMl90b19jcHUoaGRyLT5tZF9zZWN0b3JzaXplKTsKKwkvLyBtZF9rZXlzIGlz IDggYml0LCBubyBjb252ZXJzaW9uIG5lZWRlZAorCWhkci0+bWRfaXRlcmF0aW9ucyA9IGxl MzJfdG9fY3B1KGhkci0+bWRfaXRlcmF0aW9ucyk7CisKKwkvKiBTZXQgcGFyYW1zICovCisK KwlyZXR1cm4gMDsKK30KKworI2lmIDAKKy8qCisgKiBLZXJuZWwgaW1wbGVtZW50cyBqdXN0 IGJpZy1lbmRpYW4gdmVyc2lvbiBvZiBibG93ZmlzaCwgaGFjayBpdCBoZXJlCisgKi8KK3N0 YXRpYyB2b2lkIFRDUllQVF9zd2FiX2xlKGNoYXIgKmJ1ZikKK3sKKwl1aW50MzJfdCAqbCA9 ICh1aW50MzJfdCopJmJ1ZlswXTsKKwl1aW50MzJfdCAqciA9ICh1aW50MzJfdCopJmJ1Zls0 XTsKKwkqbCA9IHN3YWIzMigqbCk7CisJKnIgPSBzd2FiMzIoKnIpOworfQorCitzdGF0aWMg aW50IGRlY3J5cHRfYmxvd2Zpc2hfbGVfY2JjKHN0cnVjdCB0Y3J5cHRfYWxnICphbGcsCisJ CQkJICAgY29uc3QgY2hhciAqa2V5LCBjaGFyICpidWYpCit7CisJaW50IGJzID0gYWxnLT5p dl9zaXplOworCWNoYXIgaXZbYnNdLCBpdl9vbGRbYnNdOworCXN0cnVjdCBjcnlwdF9jaXBo ZXIgKmNpcGhlciA9IE5VTEw7CisJaW50IGksIGosIHI7CisKKwlhc3NlcnQoYnMgPT0gMipz aXplb2YodWludDMyX3QpKTsKKworCXIgPSBjcnlwdF9jaXBoZXJfaW5pdCgmY2lwaGVyLCAi Ymxvd2Zpc2giLCAiZWNiIiwKKwkJCSAgICAgICZrZXlbYWxnLT5rZXlfb2Zmc2V0XSwgYWxn LT5rZXlfc2l6ZSk7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKworCW1lbWNweShpdiwg JmtleVthbGctPml2X29mZnNldF0sIGFsZy0+aXZfc2l6ZSk7CisJZm9yIChpID0gMDsgaSA8 IFRDUllQVF9IRFJfTEVOOyBpICs9IGJzKSB7CisJCW1lbWNweShpdl9vbGQsICZidWZbaV0s IGJzKTsKKwkJVENSWVBUX3N3YWJfbGUoJmJ1ZltpXSk7CisJCXIgPSBjcnlwdF9jaXBoZXJf ZGVjcnlwdChjaXBoZXIsICZidWZbaV0sICZidWZbaV0sCisJCQkJCSAgYnMsIE5VTEwsIDAp OworCQlUQ1JZUFRfc3dhYl9sZSgmYnVmW2ldKTsKKwkJaWYgKHIgPCAwKQorCQkJYnJlYWs7 CisJCWZvciAoaiA9IDA7IGogPCBiczsgaisrKQorCQkJYnVmW2kgKyBqXSBePSBpdltqXTsK KwkJbWVtY3B5KGl2LCBpdl9vbGQsIGJzKTsKKwl9CisKKwljcnlwdF9jaXBoZXJfZGVzdHJv eShjaXBoZXIpOworCWNyeXB0X21lbXplcm8oaXYsIGJzKTsKKwljcnlwdF9tZW16ZXJvKGl2 X29sZCwgYnMpOworCXJldHVybiByOworfQorCitzdGF0aWMgdm9pZCBUQ1JZUFRfcmVtb3Zl X3doaXRlbmluZyhjaGFyICpidWYsIGNvbnN0IGNoYXIgKmtleSkKK3sKKwlpbnQgajsKKwor CWZvciAoaiA9IDA7IGogPCBUQ1JZUFRfSERSX0xFTjsgaisrKQorCQlidWZbal0gXj0ga2V5 W2ogJSA4XTsKK30KKworc3RhdGljIHZvaWQgVENSWVBUX2NvcHlfa2V5KHN0cnVjdCB0Y3J5 cHRfYWxnICphbGcsIGNvbnN0IGNoYXIgKm1vZGUsCisJCQkgICAgIGNoYXIgKm91dF9rZXks IGNvbnN0IGNoYXIgKmtleSkKK3sKKwlpbnQga3MyOworCWlmICghc3RybmNtcChtb2RlLCAi eHRzIiwgMykpIHsKKwkJa3MyID0gYWxnLT5rZXlfc2l6ZSAvIDI7CisJCW1lbWNweShvdXRf a2V5LCAma2V5W2FsZy0+a2V5X29mZnNldF0sIGtzMik7CisJCW1lbWNweSgmb3V0X2tleVtr czJdLCAma2V5W2FsZy0+aXZfb2Zmc2V0XSwga3MyKTsKKwl9IGVsc2UgaWYgKCFzdHJuY21w KG1vZGUsICJscnciLCAzKSkgeworCQlrczIgPSBhbGctPmtleV9zaXplIC0gVENSWVBUX0xS V19JS0VZX0xFTjsKKwkJbWVtY3B5KG91dF9rZXksICZrZXlbYWxnLT5rZXlfb2Zmc2V0XSwg a3MyKTsKKwkJbWVtY3B5KCZvdXRfa2V5W2tzMl0sIGtleSwgVENSWVBUX0xSV19JS0VZX0xF Tik7CisJfSBlbHNlIGlmICghc3RybmNtcChtb2RlLCAiY2JjIiwgMykpIHsKKwkJbWVtY3B5 KG91dF9rZXksICZrZXlbYWxnLT5rZXlfb2Zmc2V0XSwgYWxnLT5rZXlfc2l6ZSk7CisJCS8q IElWICsgd2hpdGVuaW5nICovCisJCW1lbWNweSgmb3V0X2tleVthbGctPmtleV9zaXplXSwg JmtleVthbGctPml2X29mZnNldF0sCisJCSAgICAgICBhbGctPmtleV9leHRyYV9zaXplKTsK Kwl9Cit9CisKK3N0YXRpYyBpbnQgVENSWVBUX2RlY3J5cHRfaGRyX29uZShzdHJ1Y3QgdGNy eXB0X2FsZyAqYWxnLCBjb25zdCBjaGFyICptb2RlLAorCQkJCSAgIGNvbnN0IGNoYXIgKmtl eSxzdHJ1Y3QgdGNyeXB0X3BoZHIgKmhkcikKK3sKKwljaGFyIGJhY2tlbmRfa2V5W1RDUllQ VF9IRFJfS0VZX0xFTl07CisJY2hhciBpdltUQ1JZUFRfSERSX0lWX0xFTl0gPSB7fTsKKwlj aGFyIG1vZGVfbmFtZVtNQVhfQ0lQSEVSX0xFTiArIDFdOworCXN0cnVjdCBjcnlwdF9jaXBo ZXIgKmNpcGhlcjsKKwljaGFyICpjLCAqYnVmID0gKGNoYXIqKSZoZHItPmU7CisJaW50IHI7 CisKKwkvKiBSZW1vdmUgSVYgaWYgcHJlc2VudCAqLworCW1vZGVfbmFtZVtNQVhfQ0lQSEVS X0xFTl0gPSAnXDAnOworCXN0cm5jcHkobW9kZV9uYW1lLCBtb2RlLCBNQVhfQ0lQSEVSX0xF Tik7CisJYyA9IHN0cmNocihtb2RlX25hbWUsICctJyk7CisJaWYgKGMpCisJCSpjID0gJ1ww JzsKKworCWlmICghc3RybmNtcChtb2RlLCAibHJ3IiwgMykpCisJCWl2W2FsZy0+aXZfc2l6 ZSAtIDFdID0gMTsKKwllbHNlIGlmICghc3RybmNtcChtb2RlLCAiY2JjIiwgMykpIHsKKwkJ VENSWVBUX3JlbW92ZV93aGl0ZW5pbmcoYnVmLCAma2V5WzhdKTsKKwkJaWYgKCFzdHJjbXAo YWxnLT5uYW1lLCAiYmxvd2Zpc2hfbGUiKSkKKwkJCXJldHVybiBkZWNyeXB0X2Jsb3dmaXNo X2xlX2NiYyhhbGcsIGtleSwgYnVmKTsKKwkJbWVtY3B5KGl2LCAma2V5W2FsZy0+aXZfb2Zm c2V0XSwgYWxnLT5pdl9zaXplKTsKKwl9CisKKwlUQ1JZUFRfY29weV9rZXkoYWxnLCBtb2Rl LCBiYWNrZW5kX2tleSwga2V5KTsKKwlyID0gY3J5cHRfY2lwaGVyX2luaXQoJmNpcGhlciwg YWxnLT5uYW1lLCBtb2RlX25hbWUsCisJCQkgICAgICBiYWNrZW5kX2tleSwgYWxnLT5rZXlf c2l6ZSk7CisJaWYgKCFyKSB7CisJCXIgPSBjcnlwdF9jaXBoZXJfZGVjcnlwdChjaXBoZXIs IGJ1ZiwgYnVmLCBUQ1JZUFRfSERSX0xFTiwKKwkJCQkJIGl2LCBhbGctPml2X3NpemUpOwor CQljcnlwdF9jaXBoZXJfZGVzdHJveShjaXBoZXIpOworCX0KKworCWNyeXB0X21lbXplcm8o YmFja2VuZF9rZXksIHNpemVvZihiYWNrZW5kX2tleSkpOworCWNyeXB0X21lbXplcm8oaXYs IFRDUllQVF9IRFJfSVZfTEVOKTsKKwlyZXR1cm4gcjsKK30KKworLyoKKyAqIEZvciBjaGFu aW5lZCBjaXBoZXJzIGFuZCBDQkMgbW9kZSB3ZSBuZWVkICJvdXRlciIgZGVjcnlwdGlvbi4K KyAqIEJhY2tlbmQgZG9lc24ndCBwcm92aWRlIHRoaXMsIHNvIGltcGxlbWVudCBpdCBoZXJl IGRpcmVjdGx5IHVzaW5nIEVDQi4KKyAqLworc3RhdGljIGludCBUQ1JZUFRfZGVjcnlwdF9j YmNpKHN0cnVjdCB0Y3J5cHRfYWxncyAqY2lwaGVycywKKwkJCQljb25zdCBjaGFyICprZXks IHN0cnVjdCB0Y3J5cHRfcGhkciAqaGRyKQoreworCXN0cnVjdCBjcnlwdF9jaXBoZXIgKmNp cGhlcltjaXBoZXJzLT5jaGFpbl9jb3VudF07CisJdW5zaWduZWQgaW50IGJzID0gY2lwaGVy cy0+Y2lwaGVyWzBdLml2X3NpemU7CisJY2hhciAqYnVmID0gKGNoYXIqKSZoZHItPmUsIGl2 W2JzXSwgaXZfb2xkW2JzXTsKKwl1bnNpZ25lZCBpbnQgaSwgajsKKwlpbnQgciA9IC1FSU5W QUw7CisKKwlUQ1JZUFRfcmVtb3ZlX3doaXRlbmluZyhidWYsICZrZXlbOF0pOworCisJbWVt Y3B5KGl2LCAma2V5W2NpcGhlcnMtPmNpcGhlclswXS5pdl9vZmZzZXRdLCBicyk7CisKKwkv KiBJbml0aWFsaXplIGFsbCBjaXBoZXJzIGluIGNoYWluIGluIEVDQiBtb2RlICovCisJZm9y IChqID0gMDsgaiA8IGNpcGhlcnMtPmNoYWluX2NvdW50OyBqKyspCisJCWNpcGhlcltqXSA9 IE5VTEw7CisJZm9yIChqID0gMDsgaiA8IGNpcGhlcnMtPmNoYWluX2NvdW50OyBqKyspIHsK KwkJciA9IGNyeXB0X2NpcGhlcl9pbml0KCZjaXBoZXJbal0sIGNpcGhlcnMtPmNpcGhlcltq XS5uYW1lLCAiZWNiIiwKKwkJCQkgICAgICAma2V5W2NpcGhlcnMtPmNpcGhlcltqXS5rZXlf b2Zmc2V0XSwKKwkJCQkgICAgICBjaXBoZXJzLT5jaXBoZXJbal0ua2V5X3NpemUpOworCQlp ZiAociA8IDApCisJCQlnb3RvIG91dDsKKwl9CisKKwkvKiBJbXBsZW1lbnRzIENCQyB3aXRo IGNoYWluZWQgY2lwaGVycyBpbiBsb29wIGluc2lkZSAqLworCWZvciAoaSA9IDA7IGkgPCBU Q1JZUFRfSERSX0xFTjsgaSArPSBicykgeworCQltZW1jcHkoaXZfb2xkLCAmYnVmW2ldLCBi cyk7CisJCWZvciAoaiA9IGNpcGhlcnMtPmNoYWluX2NvdW50OyBqID4gMDsgai0tKSB7CisJ CQlyID0gY3J5cHRfY2lwaGVyX2RlY3J5cHQoY2lwaGVyW2ogLSAxXSwgJmJ1ZltpXSwgJmJ1 ZltpXSwKKwkJCQkJCSAgYnMsIE5VTEwsIDApOworCQkJaWYgKHIgPCAwKQorCQkJCWdvdG8g b3V0OworCQl9CisJCWZvciAoaiA9IDA7IGogPCBiczsgaisrKQorCQkJYnVmW2kgKyBqXSBe PSBpdltqXTsKKwkJbWVtY3B5KGl2LCBpdl9vbGQsIGJzKTsKKwl9CitvdXQ6CisJZm9yIChq ID0gMDsgaiA8IGNpcGhlcnMtPmNoYWluX2NvdW50OyBqKyspCisJCWlmIChjaXBoZXJbal0p CisJCQljcnlwdF9jaXBoZXJfZGVzdHJveShjaXBoZXJbal0pOworCisJY3J5cHRfbWVtemVy byhpdiwgYnMpOworCWNyeXB0X21lbXplcm8oaXZfb2xkLCBicyk7CisJcmV0dXJuIHI7Cit9 CisKK3N0YXRpYyBpbnQgVENSWVBUX2RlY3J5cHRfaGRyKHN0cnVjdCBjcnlwdF9kZXZpY2Ug KmNkLCBzdHJ1Y3QgdGNyeXB0X3BoZHIgKmhkciwKKwkJCSAgICAgICBjb25zdCBjaGFyICpr ZXksIHVpbnQzMl90IGZsYWdzKQoreworCXN0cnVjdCB0Y3J5cHRfcGhkciBoZHIyOworCWlu dCBpLCBqLCByID0gLUVJTlZBTDsKKworCWZvciAoaSA9IDA7IHRjcnlwdF9jaXBoZXJbaV0u Y2hhaW5fY291bnQ7IGkrKykgeworCQlpZiAoIShmbGFncyAmIENSWVBUX1RDUllQVF9MRUdB Q1lfTU9ERVMpICYmIHRjcnlwdF9jaXBoZXJbaV0ubGVnYWN5KQorCQkJY29udGludWU7CisJ CWxvZ19kYmcoIlRDUllQVDogIHRyeWluZyBjaXBoZXIgJXMtJXMiLAorCQkJdGNyeXB0X2Np cGhlcltpXS5sb25nX25hbWUsIHRjcnlwdF9jaXBoZXJbaV0ubW9kZSk7CisKKwkJbWVtY3B5 KCZoZHIyLmUsICZoZHItPmUsIFRDUllQVF9IRFJfTEVOKTsKKworCQlpZiAoIXN0cm5jbXAo dGNyeXB0X2NpcGhlcltpXS5tb2RlLCAiY2JjaSIsIDQpKQorCQkJciA9IFRDUllQVF9kZWNy eXB0X2NiY2koJnRjcnlwdF9jaXBoZXJbaV0sIGtleSwgJmhkcjIpOworCQllbHNlIGZvciAo aiA9IHRjcnlwdF9jaXBoZXJbaV0uY2hhaW5fY291bnQgLSAxOyBqID49IDAgOyBqLS0pIHsK KwkJCWlmICghdGNyeXB0X2NpcGhlcltpXS5jaXBoZXJbal0ubmFtZSkKKwkJCQljb250aW51 ZTsKKwkJCXIgPSBUQ1JZUFRfZGVjcnlwdF9oZHJfb25lKCZ0Y3J5cHRfY2lwaGVyW2ldLmNp cGhlcltqXSwKKwkJCQkJICAgIHRjcnlwdF9jaXBoZXJbaV0ubW9kZSwga2V5LCAmaGRyMik7 CisJCQlpZiAociA8IDApCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAociA8IDApIHsKKwkJ CWxvZ19kYmcoIlRDUllQVDogICByZXR1cm5lZCBlcnJvciAlZCwgc2tpcHBlZC4iLCByKTsK KwkJCWlmIChyID09IC1FTk9UU1VQKQorCQkJCWJyZWFrOworCQkJciA9IC1FTk9FTlQ7CisJ CQljb250aW51ZTsKKwkJfQorCisJCWlmICghc3RybmNtcChoZHIyLmQubWFnaWMsIFRDUllQ VF9IRFJfTUFHSUMsIFRDUllQVF9IRFJfTUFHSUNfTEVOKSkgeworCQkJbG9nX2RiZygiVENS WVBUOiBTaWduYXR1cmUgbWFnaWMgZGV0ZWN0ZWQuIik7CisJCQltZW1jcHkoJmhkci0+ZSwg JmhkcjIuZSwgVENSWVBUX0hEUl9MRU4pOworCQkJciA9IGk7CisJCQlicmVhazsKKwkJfQor CQlpZiAoKGZsYWdzICYgQ1JZUFRfVENSWVBUX1ZFUkFfTU9ERVMpICYmCisJCSAgICAgIXN0 cm5jbXAoaGRyMi5kLm1hZ2ljLCBWQ1JZUFRfSERSX01BR0lDLCBUQ1JZUFRfSERSX01BR0lD X0xFTikpIHsKKwkJCWxvZ19kYmcoIlRDUllQVDogU2lnbmF0dXJlIG1hZ2ljIGRldGVjdGVk IChWZXJhY3J5cHQpLiIpOworCQkJbWVtY3B5KCZoZHItPmUsICZoZHIyLmUsIFRDUllQVF9I RFJfTEVOKTsKKwkJCXIgPSBpOworCQkJYnJlYWs7CisJCX0KKwkJciA9IC1FUEVSTTsKKwl9 CisKKwljcnlwdF9tZW16ZXJvKCZoZHIyLCBzaXplb2YoaGRyMikpOworCXJldHVybiByOwor fQorCitzdGF0aWMgaW50IFRDUllQVF9wb29sX2tleWZpbGUoc3RydWN0IGNyeXB0X2Rldmlj ZSAqY2QsCisJCQkJdW5zaWduZWQgY2hhciBwb29sW1RDUllQVF9LRVlfUE9PTF9MRU5dLAor CQkJCWNvbnN0IGNoYXIgKmtleWZpbGUpCit7CisJdW5zaWduZWQgY2hhciBkYXRhW1RDUllQ VF9LRVlGSUxFX0xFTl07CisJaW50IGksIGosIGZkLCBkYXRhX3NpemU7CisJdWludDMyX3Qg Y3JjOworCisJbG9nX2RiZygiVENSWVBUOiB1c2luZyBrZXlmaWxlICVzLiIsIGtleWZpbGUp OworCisJZmQgPSBvcGVuKGtleWZpbGUsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKSB7CisJ CWxvZ19lcnIoY2QsIF8oIkZhaWxlZCB0byBvcGVuIGtleSBmaWxlLlxuIikpOworCQlyZXR1 cm4gLUVJTzsKKwl9CisKKwlkYXRhX3NpemUgPSByZWFkX2J1ZmZlcihmZCwgZGF0YSwgVENS WVBUX0tFWUZJTEVfTEVOKTsKKwljbG9zZShmZCk7CisJaWYgKGRhdGFfc2l6ZSA8IDApIHsK KwkJbG9nX2VycihjZCwgXygiRXJyb3IgcmVhZGluZyBrZXlmaWxlICVzLlxuIiksIGtleWZp bGUpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlmb3IgKGkgPSAwLCBqID0gMCwgY3JjID0g fjBVOyBpIDwgZGF0YV9zaXplOyBpKyspIHsKKwkJY3JjID0gY3J5cHRfY3JjMzIoY3JjLCAm ZGF0YVtpXSwgMSk7CisJCXBvb2xbaisrXSArPSAodW5zaWduZWQgY2hhcikoY3JjID4+IDI0 KTsKKwkJcG9vbFtqKytdICs9ICh1bnNpZ25lZCBjaGFyKShjcmMgPj4gMTYpOworCQlwb29s W2orK10gKz0gKHVuc2lnbmVkIGNoYXIpKGNyYyA+PiAgOCk7CisJCXBvb2xbaisrXSArPSAo dW5zaWduZWQgY2hhcikoY3JjKTsKKwkJaiAlPSBUQ1JZUFRfS0VZX1BPT0xfTEVOOworCX0K KworCWNyeXB0X21lbXplcm8oJmNyYywgc2l6ZW9mKGNyYykpOworCWNyeXB0X21lbXplcm8o ZGF0YSwgVENSWVBUX0tFWUZJTEVfTEVOKTsKKworCXJldHVybiAwOworfQorI2VuZGlmCisK K3N0YXRpYyBpbnQgR0VMSV9pbml0X2hkcihzdHJ1Y3QgY3J5cHRfZGV2aWNlICpjZCwKKwkJ CSAgIHN0cnVjdCBnZWxpX3BoZHIgKmhkciwKKwkJCSAgIHN0cnVjdCBjcnlwdF9wYXJhbXNf Z2VsaSAqcGFyYW1zKQoreworCWludCByID0gLUVQRVJNOworI2lmIDAKKwl1bnNpZ25lZCBj aGFyIHB3ZFtUQ1JZUFRfS0VZX1BPT0xfTEVOXSA9IHt9OworCXNpemVfdCBwYXNzcGhyYXNl X3NpemU7CisJY2hhciAqa2V5OworCXVuc2lnbmVkIGludCBpLCBza2lwcGVkID0gMDsKKwor CWlmIChwb3NpeF9tZW1hbGlnbigodm9pZCopJmtleSwgY3J5cHRfZ2V0cGFnZXNpemUoKSwg VENSWVBUX0hEUl9LRVlfTEVOKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAocGFyYW1z LT5rZXlmaWxlc19jb3VudCkKKwkJcGFzc3BocmFzZV9zaXplID0gVENSWVBUX0tFWV9QT09M X0xFTjsKKwllbHNlCisJCXBhc3NwaHJhc2Vfc2l6ZSA9IHBhcmFtcy0+cGFzc3BocmFzZV9z aXplOworCisJaWYgKHBhcmFtcy0+cGFzc3BocmFzZV9zaXplID4gVENSWVBUX0tFWV9QT09M X0xFTikgeworCQlsb2dfZXJyKGNkLCBfKCJNYXhpbXVtIFRDUllQVCBwYXNzcGhyYXNlIGxl bmd0aCAoJWQpIGV4Y2VlZGVkLlxuIiksCisJCQkgICAgICBUQ1JZUFRfS0VZX1BPT0xfTEVO KTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogQ2FsY3VsYXRlIHBvb2wgY29udGVudCBmcm9t IGtleWZpbGVzICovCisJZm9yIChpID0gMDsgaSA8IHBhcmFtcy0+a2V5ZmlsZXNfY291bnQ7 IGkrKykgeworCQlyID0gVENSWVBUX3Bvb2xfa2V5ZmlsZShjZCwgcHdkLCBwYXJhbXMtPmtl eWZpbGVzW2ldKTsKKwkJaWYgKHIgPCAwKQorCQkJZ290byBvdXQ7CisJfQorCisJLyogSWYg cHJvdmlkZWQgcGFzc3dvcmQsIGNvbWJpbmUgaXQgd2l0aCBwb29sICovCisJZm9yIChpID0g MDsgaSA8IHBhcmFtcy0+cGFzc3BocmFzZV9zaXplOyBpKyspCisJCXB3ZFtpXSArPSBwYXJh bXMtPnBhc3NwaHJhc2VbaV07CisKKwlmb3IgKGkgPSAwOyB0Y3J5cHRfa2RmW2ldLm5hbWU7 IGkrKykgeworCQlpZiAoIShwYXJhbXMtPmZsYWdzICYgQ1JZUFRfVENSWVBUX0xFR0FDWV9N T0RFUykgJiYgdGNyeXB0X2tkZltpXS5sZWdhY3kpCisJCQljb250aW51ZTsKKwkJaWYgKCEo cGFyYW1zLT5mbGFncyAmIENSWVBUX1RDUllQVF9WRVJBX01PREVTKSAmJiB0Y3J5cHRfa2Rm W2ldLnZlcmFjcnlwdCkKKwkJCWNvbnRpbnVlOworCQkvKiBEZXJpdmUgaGVhZGVyIGtleSAq LworCQlsb2dfZGJnKCJUQ1JZUFQ6IHRyeWluZyBLREY6ICVzLSVzLSVkLiIsCisJCQl0Y3J5 cHRfa2RmW2ldLm5hbWUsIHRjcnlwdF9rZGZbaV0uaGFzaCwgdGNyeXB0X2tkZltpXS5pdGVy YXRpb25zKTsKKwkJciA9IGNyeXB0X3Bia2RmKHRjcnlwdF9rZGZbaV0ubmFtZSwgdGNyeXB0 X2tkZltpXS5oYXNoLAorCQkJCShjaGFyKilwd2QsIHBhc3NwaHJhc2Vfc2l6ZSwKKwkJCQlo ZHItPnNhbHQsIFRDUllQVF9IRFJfU0FMVF9MRU4sCisJCQkJa2V5LCBUQ1JZUFRfSERSX0tF WV9MRU4sCisJCQkJdGNyeXB0X2tkZltpXS5pdGVyYXRpb25zKTsKKwkJaWYgKHIgPCAwICYm IGNyeXB0X2hhc2hfc2l6ZSh0Y3J5cHRfa2RmW2ldLmhhc2gpIDwgMCkgeworCQkJbG9nX3Zl cmJvc2UoY2QsIF8oIlBCS0RGMiBoYXNoIGFsZ29yaXRobSAlcyBub3QgYXZhaWxhYmxlLCBz a2lwcGluZy5cbiIpLAorCQkJCSAgICAgIHRjcnlwdF9rZGZbaV0uaGFzaCk7CisJCQljb250 aW51ZTsKKwkJfQorCQlpZiAociA8IDApCisJCQlicmVhazsKKworCQkvKiBEZWNyeXB0IGhl YWRlciAqLworCQlyID0gVENSWVBUX2RlY3J5cHRfaGRyKGNkLCBoZHIsIGtleSwgcGFyYW1z LT5mbGFncyk7CisJCWlmIChyID09IC1FTk9FTlQpIHsKKwkJCXNraXBwZWQrKzsKKwkJCXIg PSAtRVBFUk07CisJCX0KKwkJaWYgKHIgIT0gLUVQRVJNKQorCQkJYnJlYWs7CisJfQorCisJ aWYgKChyIDwgMCAmJiByICE9IC1FUEVSTSAmJiBza2lwcGVkICYmIHNraXBwZWQgPT0gaSkg fHwgciA9PSAtRU5PVFNVUCkgeworCQlsb2dfZXJyKGNkLCBfKCJSZXF1aXJlZCBrZXJuZWwg Y3J5cHRvIGludGVyZmFjZSBub3QgYXZhaWxhYmxlLlxuIikpOworI2lmZGVmIEVOQUJMRV9B Rl9BTEcKKwkJbG9nX2VycihjZCwgXygiRW5zdXJlIHlvdSBoYXZlIGFsZ2lmX3NrY2lwaGVy IGtlcm5lbCBtb2R1bGUgbG9hZGVkLlxuIikpOworI2VuZGlmCisJfQorCWlmIChyIDwgMCkK KwkJZ290byBvdXQ7CisjZW5kaWYKKworCWxvZ19kYmcoIkdFTEkgdHJhY2tpbmc6IDEwMVxu Iik7CisJciA9IEdFTElfaGRyX2Zyb21fZGlzayhoZHIsIHBhcmFtcywgcik7CisJaWYgKCFy KSB7CisJCWxvZ19kYmcoIkdFTEkgdHJhY2tpbmc6IDEwMiBtYWdpYyBPS1xuIik7CisjaWYg MAorCQlsb2dfZGJnKCJUQ1JZUFQ6IE1hZ2ljOiAlcywgSGVhZGVyIHZlcnNpb246ICVkLCBy ZXEuICVkLCBzZWN0b3IgJWQiCisJCQkiLCBta19vZmZzZXQgJSIgUFJJdTY0ICIsIGhpZGRl bl9zaXplICUiIFBSSXU2NAorCQkJIiwgdm9sdW1lIHNpemUgJSIgUFJJdTY0LCB0Y3J5cHRf a2RmW2ldLnZlcmFjcnlwdCA/CisJCQlWQ1JZUFRfSERSX01BR0lDIDogVENSWVBUX0hEUl9N QUdJQywKKwkJCShpbnQpaGRyLT5kLnZlcnNpb24sIChpbnQpaGRyLT5kLnZlcnNpb25fdGMs IChpbnQpaGRyLT5kLnNlY3Rvcl9zaXplLAorCQkJaGRyLT5kLm1rX29mZnNldCwgaGRyLT5k LmhpZGRlbl92b2x1bWVfc2l6ZSwgaGRyLT5kLnZvbHVtZV9zaXplKTsKKwkJbG9nX2RiZygi VENSWVBUOiBIZWFkZXIgY2lwaGVyICVzLSVzLCBrZXkgc2l6ZSAlenUiLAorCQkJcGFyYW1z LT5jaXBoZXIsIHBhcmFtcy0+bW9kZSwgcGFyYW1zLT5rZXlfc2l6ZSk7CisjZW5kaWYKKwl9 CitvdXQ6CisjaWYgMAorCWNyeXB0X21lbXplcm8ocHdkLCBUQ1JZUFRfS0VZX1BPT0xfTEVO KTsKKwlpZiAoa2V5KQorCQljcnlwdF9tZW16ZXJvKGtleSwgVENSWVBUX0hEUl9LRVlfTEVO KTsKKwlmcmVlKGtleSk7CisjZW5kaWYKKwlyZXR1cm4gcjsKK30KKworaW50IEdFTElfcmVh ZF9waGRyKHN0cnVjdCBjcnlwdF9kZXZpY2UgKmNkLAorCQkgICAgIHN0cnVjdCBnZWxpX3Bo ZHIgKmhkciwKKwkJICAgICBzdHJ1Y3QgY3J5cHRfcGFyYW1zX2dlbGkgKnBhcmFtcykKK3sK KwlzdHJ1Y3QgZGV2aWNlICpkZXZpY2UgPSBjcnlwdF9tZXRhZGF0YV9kZXZpY2UoY2QpOwor CXNzaXplX3QgaGRyX3NpemUgPSBzaXplb2Yoc3RydWN0IGdlbGlfcGhkcik7CisJLy9jaGFy ICpiYXNlX2RldmljZV9wYXRoOworCWludCBkZXZmZCA9IDAsIHIsIGJzOworCisJYXNzZXJ0 KHNpemVvZihzdHJ1Y3QgZ2VsaV9waGRyKSA9PSA1MTEpOworCisJbG9nX2RiZygiUmVhZGlu ZyBHRUxJIGhlYWRlciBvZiBzaXplICV6dSBieXRlcyBmcm9tIGRldmljZSAlcy4iLAorCQlo ZHJfc2l6ZSwgZGV2aWNlX3BhdGgoZGV2aWNlKSk7CisKKwlicyA9IGRldmljZV9ibG9ja19z aXplKGRldmljZSk7CisJaWYgKGJzIDwgMCkKKwkJcmV0dXJuIGJzOworCisjaWYgMAorCWlm IChwYXJhbXMtPmZsYWdzICYgQ1JZUFRfVENSWVBUX1NZU1RFTV9IRUFERVIgJiYKKwkgICAg Y3J5cHRfZGV2X2lzX3BhcnRpdGlvbihkZXZpY2VfcGF0aChkZXZpY2UpKSkgeworCQliYXNl X2RldmljZV9wYXRoID0gY3J5cHRfZ2V0X2Jhc2VfZGV2aWNlKGRldmljZV9wYXRoKGRldmlj ZSkpOworCisJCWxvZ19kYmcoIlJlYWRpbmcgVENSWVBUIHN5c3RlbSBoZWFkZXIgZnJvbSBk ZXZpY2UgJXMuIiwgYmFzZV9kZXZpY2VfcGF0aCA/OiAiPyIpOworCQlpZiAoIWJhc2VfZGV2 aWNlX3BhdGgpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyID0gZGV2aWNlX2FsbG9jKCZi YXNlX2RldmljZSwgYmFzZV9kZXZpY2VfcGF0aCk7CisJCWZyZWUoYmFzZV9kZXZpY2VfcGF0 aCk7CisJCWlmIChyIDwgMCkKKwkJCXJldHVybiByOworCQlkZXZmZCA9IGRldmljZV9vcGVu KGJhc2VfZGV2aWNlLCBPX1JET05MWSk7CisJCWRldmljZV9mcmVlKGJhc2VfZGV2aWNlKTsK Kwl9IGVsc2UKKyNlbmRpZgorCQlkZXZmZCA9IGRldmljZV9vcGVuKGRldmljZSwgT19SRE9O TFkpOworCisJaWYgKGRldmZkIDwgMCkgeworCQlsb2dfZXJyKGNkLCBfKCJDYW5ub3Qgb3Bl biBkZXZpY2UgJXMuXG4iKSwgZGV2aWNlX3BhdGgoZGV2aWNlKSk7CisJCXJldHVybiAtRUlO VkFMOworCX0KKworCXIgPSAtRUlPOworI2RlZmluZSBHRUxJX0hEUl9PRkZTRVQgLTUxMgor CWlmIChsc2VlayhkZXZmZCwgR0VMSV9IRFJfT0ZGU0VULCBTRUVLX0VORCkgPj0gMCAmJgor CSAgICByZWFkX2Jsb2Nrd2lzZShkZXZmZCwgYnMsIGhkciwgaGRyX3NpemUpID09IGhkcl9z aXplKSB7CisJCXIgPSBHRUxJX2luaXRfaGRyKGNkLCBoZHIsIHBhcmFtcyk7CisJfQorCisJ Y2xvc2UoZGV2ZmQpOworCWlmIChyIDwgMCkKKwkJbWVtc2V0KGhkciwgMCwgc2l6ZW9mICgq aGRyKSk7CisJcmV0dXJuIHI7Cit9CisKKyNpZiAwCitzdGF0aWMgc3RydWN0IHRjcnlwdF9h bGdzICpUQ1JZUFRfZ2V0X2FsZ3MoY29uc3QgY2hhciAqY2lwaGVyLCBjb25zdCBjaGFyICpt b2RlKQoreworCWludCBpOworCisJaWYgKCFjaXBoZXIgfHwgIW1vZGUpCisJCXJldHVybiBO VUxMOworCisJZm9yIChpID0gMDsgdGNyeXB0X2NpcGhlcltpXS5jaGFpbl9jb3VudDsgaSsr KQorCQlpZiAoIXN0cmNtcCh0Y3J5cHRfY2lwaGVyW2ldLmxvbmdfbmFtZSwgY2lwaGVyKSAm JgorCQkgICAgIXN0cmNtcCh0Y3J5cHRfY2lwaGVyW2ldLm1vZGUsIG1vZGUpKQorCQkgICAg cmV0dXJuICZ0Y3J5cHRfY2lwaGVyW2ldOworCisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCBU Q1JZUFRfYWN0aXZhdGUoc3RydWN0IGNyeXB0X2RldmljZSAqY2QsCisJCSAgICAgY29uc3Qg Y2hhciAqbmFtZSwKKwkJICAgICBzdHJ1Y3QgdGNyeXB0X3BoZHIgKmhkciwKKwkJICAgICBz dHJ1Y3QgY3J5cHRfcGFyYW1zX3RjcnlwdCAqcGFyYW1zLAorCQkgICAgIHVpbnQzMl90IGZs YWdzKQoreworCWNoYXIgY2lwaGVyW01BWF9DSVBIRVJfTEVOXSwgZG1fbmFtZVtQQVRIX01B WF0sIGRtX2Rldl9uYW1lW1BBVEhfTUFYXTsKKwljaGFyICpwYXJ0X3BhdGg7CisJc3RydWN0 IGRldmljZSAqZGV2aWNlID0gTlVMTCwgKnBhcnRfZGV2aWNlID0gTlVMTDsKKwl1bnNpZ25l ZCBpbnQgaTsKKwlpbnQgcjsKKwl1aW50MzJfdCByZXFfZmxhZ3M7CisJc3RydWN0IHRjcnlw dF9hbGdzICphbGdzOworCWVudW0gZGV2Y2hlY2sgZGV2aWNlX2NoZWNrOworCXN0cnVjdCBj cnlwdF9kbV9hY3RpdmVfZGV2aWNlIGRtZCA9IHsKKwkJLnRhcmdldCA9IERNX0NSWVBULAor CQkuc2l6ZSAgID0gMCwKKwkJLmRhdGFfZGV2aWNlID0gY3J5cHRfZGF0YV9kZXZpY2UoY2Qp LAorCQkudS5jcnlwdCAgPSB7CisJCQkuY2lwaGVyID0gY2lwaGVyLAorCQkJLm9mZnNldCA9 IGNyeXB0X2dldF9kYXRhX29mZnNldChjZCksCisJCQkuaXZfb2Zmc2V0ID0gY3J5cHRfZ2V0 X2l2X29mZnNldChjZCksCisJCX0KKwl9OworCisJaWYgKCFoZHItPmQudmVyc2lvbikgewor CQlsb2dfZGJnKCJUQ1JZUFQ6IHRoaXMgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCB3aXRo b3V0IGVuY3J5cHRlZCBoZWFkZXIgbG9hZC4iKTsKKwkJcmV0dXJuIC1FTk9UU1VQOworCX0K KworCWlmIChoZHItPmQuc2VjdG9yX3NpemUgJiYgaGRyLT5kLnNlY3Rvcl9zaXplICE9IFNF Q1RPUl9TSVpFKSB7CisJCWxvZ19lcnIoY2QsIF8oIkFjdGl2YXRpb24gaXMgbm90IHN1cHBv cnRlZCBmb3IgJWQgc2VjdG9yIHNpemUuXG4iKSwKKwkJCWhkci0+ZC5zZWN0b3Jfc2l6ZSk7 CisJCXJldHVybiAtRU5PVFNVUDsKKwl9CisKKwlpZiAoc3Ryc3RyKHBhcmFtcy0+bW9kZSwg Ii10Y3J5cHQiKSkgeworCQlsb2dfZXJyKGNkLCBfKCJLZXJuZWwgZG9lc24ndCBzdXBwb3J0 IGFjdGl2YXRpb24gZm9yIHRoaXMgVENSWVBUIGxlZ2FjeSBtb2RlLlxuIikpOworCQlyZXR1 cm4gLUVOT1RTVVA7CisJfQorCisJaWYgKHN0cnN0cihwYXJhbXMtPm1vZGUsICItdGN3Iikp CisJCXJlcV9mbGFncyA9IERNX1RDV19TVVBQT1JURUQ7CisJZWxzZQorCQlyZXFfZmxhZ3Mg PSBETV9QTEFJTjY0X1NVUFBPUlRFRDsKKworCWFsZ3MgPSBUQ1JZUFRfZ2V0X2FsZ3MocGFy YW1zLT5jaXBoZXIsIHBhcmFtcy0+bW9kZSk7CisJaWYgKCFhbGdzKQorCQlyZXR1cm4gLUVJ TlZBTDsKKworCWlmIChoZHItPmQuc2VjdG9yX3NpemUgPT0gMCkKKwkJcmV0dXJuIC1FSU5W QUw7CisKKwlpZiAocGFyYW1zLT5mbGFncyAmIENSWVBUX1RDUllQVF9TWVNURU1fSEVBREVS KQorCQlkbWQuc2l6ZSA9IDA7CisJZWxzZSBpZiAocGFyYW1zLT5mbGFncyAmIENSWVBUX1RD UllQVF9ISURERU5fSEVBREVSKQorCQlkbWQuc2l6ZSA9IGhkci0+ZC5oaWRkZW5fdm9sdW1l X3NpemUgLyBoZHItPmQuc2VjdG9yX3NpemU7CisJZWxzZQorCQlkbWQuc2l6ZSA9IGhkci0+ ZC52b2x1bWVfc2l6ZSAvIGhkci0+ZC5zZWN0b3Jfc2l6ZTsKKworCWlmIChkbWQuZmxhZ3Mg JiBDUllQVF9BQ1RJVkFURV9TSEFSRUQpCisJCWRldmljZV9jaGVjayA9IERFVl9TSEFSRUQ7 CisJZWxzZQorCQlkZXZpY2VfY2hlY2sgPSBERVZfRVhDTDsKKworCWlmICgocGFyYW1zLT5m bGFncyAmIENSWVBUX1RDUllQVF9TWVNURU1fSEVBREVSKSAmJgorCSAgICAgIWNyeXB0X2Rl dl9pc19wYXJ0aXRpb24oZGV2aWNlX3BhdGgoZG1kLmRhdGFfZGV2aWNlKSkpIHsKKwkJcGFy dF9wYXRoID0gY3J5cHRfZ2V0X3BhcnRpdGlvbl9kZXZpY2UoZGV2aWNlX3BhdGgoZG1kLmRh dGFfZGV2aWNlKSwKKwkJCQkJCSAgICAgICBkbWQudS5jcnlwdC5vZmZzZXQsIGRtZC5zaXpl KTsKKwkJaWYgKHBhcnRfcGF0aCkgeworCQkJaWYgKCFkZXZpY2VfYWxsb2MoJnBhcnRfZGV2 aWNlLCBwYXJ0X3BhdGgpKSB7CisJCQkJbG9nX3ZlcmJvc2UoY2QsIF8oIkFjdGl2YXRpbmcg VENSWVBUIHN5c3RlbSBlbmNyeXB0aW9uIGZvciBwYXJ0aXRpb24gJXMuXG4iKSwKKwkJCQkJ ICAgIHBhcnRfcGF0aCk7CisJCQkJZG1kLmRhdGFfZGV2aWNlID0gcGFydF9kZXZpY2U7CisJ CQkJZG1kLnUuY3J5cHQub2Zmc2V0ID0gMDsKKwkJCX0KKwkJCWZyZWUocGFydF9wYXRoKTsK KwkJfSBlbHNlCisJCQkvKgorCQkJICogU3lzdGVtIGVuY3J5cHRpb24gdXNlIHRoZSB3aG9s ZSBkZXZpY2UgbWFwcGluZywgdGhlcmUgY2FuCisJCQkgKiBiZSBhY3RpdmUgcGFydGl0aW9u cy4KKwkJCSAqLworCQkJZGV2aWNlX2NoZWNrID0gREVWX1NIQVJFRDsKKwl9CisKKwlyID0g ZGV2aWNlX2Jsb2NrX2FkanVzdChjZCwgZG1kLmRhdGFfZGV2aWNlLCBkZXZpY2VfY2hlY2ss CisJCQkJZG1kLnUuY3J5cHQub2Zmc2V0LCAmZG1kLnNpemUsICZkbWQuZmxhZ3MpOworCWlm IChyKSB7CisJCWRldmljZV9mcmVlKHBhcnRfZGV2aWNlKTsKKwkJcmV0dXJuIHI7CisJfQor CisJLyogRnJvbWUgaGVyZSwga2V5IHNpemUgZm9yIGV2ZXJ5IGNpcGhlciBtdXN0IGJlIHRo ZSBzYW1lICovCisJZG1kLnUuY3J5cHQudmsgPSBjcnlwdF9hbGxvY192b2x1bWVfa2V5KGFs Z3MtPmNpcGhlclswXS5rZXlfc2l6ZSArCisJCQkJCQlhbGdzLT5jaXBoZXJbMF0ua2V5X2V4 dHJhX3NpemUsIE5VTEwpOworCWlmICghZG1kLnUuY3J5cHQudmspIHsKKwkJZGV2aWNlX2Zy ZWUocGFydF9kZXZpY2UpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlmb3IgKGkgPSBh bGdzLT5jaGFpbl9jb3VudDsgaSA+IDA7IGktLSkgeworCQlpZiAoaSA9PSAxKSB7CisJCQlk bV9uYW1lW3NpemVvZihkbV9uYW1lKS0xXSA9ICdcMCc7CisJCQlzdHJuY3B5KGRtX25hbWUs IG5hbWUsIHNpemVvZihkbV9uYW1lKS0xKTsKKwkJCWRtZC5mbGFncyA9IGZsYWdzOworCQl9 IGVsc2UgeworCQkJc25wcmludGYoZG1fbmFtZSwgc2l6ZW9mKGRtX25hbWUpLCAiJXNfJWQi LCBuYW1lLCBpLTEpOworCQkJZG1kLmZsYWdzID0gZmxhZ3MgfCBDUllQVF9BQ1RJVkFURV9Q UklWQVRFOworCQl9CisKKwkJc25wcmludGYoY2lwaGVyLCBzaXplb2YoY2lwaGVyKSwgIiVz LSVzIiwKKwkJCSBhbGdzLT5jaXBoZXJbaS0xXS5uYW1lLCBhbGdzLT5tb2RlKTsKKworCQlU Q1JZUFRfY29weV9rZXkoJmFsZ3MtPmNpcGhlcltpLTFdLCBhbGdzLT5tb2RlLAorCQkJCWRt ZC51LmNyeXB0LnZrLT5rZXksIGhkci0+ZC5rZXlzKTsKKworCQlpZiAoYWxncy0+Y2hhaW5f Y291bnQgIT0gaSkgeworCQkJc25wcmludGYoZG1fZGV2X25hbWUsIHNpemVvZihkbV9kZXZf bmFtZSksICIlcy8lc18lZCIsCisJCQkJIGRtX2dldF9kaXIoKSwgbmFtZSwgaSk7CisJCQly ID0gZGV2aWNlX2FsbG9jKCZkZXZpY2UsIGRtX2Rldl9uYW1lKTsKKwkJCWlmIChyKQorCQkJ CWJyZWFrOworCQkJZG1kLmRhdGFfZGV2aWNlID0gZGV2aWNlOworCQkJZG1kLnUuY3J5cHQu b2Zmc2V0ID0gMDsKKwkJfQorCisJCWxvZ19kYmcoIlRyeWluZyB0byBhY3RpdmF0ZSBUQ1JZ UFQgZGV2aWNlICVzIHVzaW5nIGNpcGhlciAlcy4iLAorCQkJZG1fbmFtZSwgZG1kLnUuY3J5 cHQuY2lwaGVyKTsKKwkJciA9IGRtX2NyZWF0ZV9kZXZpY2UoY2QsIGRtX25hbWUsIENSWVBU X1RDUllQVCwgJmRtZCwgMCk7CisKKwkJZGV2aWNlX2ZyZWUoZGV2aWNlKTsKKwkJZGV2aWNl ID0gTlVMTDsKKworCQlpZiAocikKKwkJCWJyZWFrOworCX0KKworCWlmIChyIDwgMCAmJiAh KGRtX2ZsYWdzKCkgJiByZXFfZmxhZ3MpKSB7CisJCWxvZ19lcnIoY2QsIF8oIktlcm5lbCBk b2Vzbid0IHN1cHBvcnQgVENSWVBUIGNvbXBhdGlibGUgbWFwcGluZy5cbiIpKTsKKwkJciA9 IC1FTk9UU1VQOworCX0KKworCWRldmljZV9mcmVlKHBhcnRfZGV2aWNlKTsKKwljcnlwdF9m cmVlX3ZvbHVtZV9rZXkoZG1kLnUuY3J5cHQudmspOworCXJldHVybiByOworfQorCitzdGF0 aWMgaW50IFRDUllQVF9yZW1vdmVfb25lKHN0cnVjdCBjcnlwdF9kZXZpY2UgKmNkLCBjb25z dCBjaGFyICpuYW1lLAorCQkgICAgICBjb25zdCBjaGFyICpiYXNlX3V1aWQsIGludCBpbmRl eCkKK3sKKwlzdHJ1Y3QgY3J5cHRfZG1fYWN0aXZlX2RldmljZSBkbWQgPSB7fTsKKwljaGFy IGRtX25hbWVbUEFUSF9NQVhdOworCWludCByOworCisJaWYgKHNucHJpbnRmKGRtX25hbWUs IHNpemVvZihkbV9uYW1lKSwgIiVzXyVkIiwgbmFtZSwgaW5kZXgpIDwgMCkKKwkJcmV0dXJu IC1FTk9NRU07CisKKwlyID0gZG1fc3RhdHVzX2RldmljZShjZCwgZG1fbmFtZSk7CisJaWYg KHIgPCAwKQorCQlyZXR1cm4gcjsKKworCXIgPSBkbV9xdWVyeV9kZXZpY2UoY2QsIGRtX25h bWUsIERNX0FDVElWRV9VVUlELCAmZG1kKTsKKwlpZiAoIXIgJiYgIXN0cm5jbXAoZG1kLnV1 aWQsIGJhc2VfdXVpZCwgc3RybGVuKGJhc2VfdXVpZCkpKQorCQlyID0gZG1fcmVtb3ZlX2Rl dmljZShjZCwgZG1fbmFtZSwgMCwgMCk7CisKKwlmcmVlKENPTlNUX0NBU1Qodm9pZCopZG1k LnV1aWQpOworCXJldHVybiByOworfQorCitpbnQgVENSWVBUX2RlYWN0aXZhdGUoc3RydWN0 IGNyeXB0X2RldmljZSAqY2QsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGNyeXB0 X2RtX2FjdGl2ZV9kZXZpY2UgZG1kID0ge307CisJaW50IHI7CisKKwlyID0gZG1fcXVlcnlf ZGV2aWNlKGNkLCBuYW1lLCBETV9BQ1RJVkVfVVVJRCwgJmRtZCk7CisJaWYgKHIgPCAwKQor CQlyZXR1cm4gcjsKKwlpZiAoIWRtZC51dWlkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXIg PSBkbV9yZW1vdmVfZGV2aWNlKGNkLCBuYW1lLCAwLCAwKTsKKwlpZiAociA8IDApCisJCWdv dG8gb3V0OworCisJciA9IFRDUllQVF9yZW1vdmVfb25lKGNkLCBuYW1lLCBkbWQudXVpZCwg MSk7CisJaWYgKHIgPCAwKQorCQlnb3RvIG91dDsKKworCXIgPSBUQ1JZUFRfcmVtb3ZlX29u ZShjZCwgbmFtZSwgZG1kLnV1aWQsIDIpOworCWlmIChyIDwgMCkKKwkJZ290byBvdXQ7Citv dXQ6CisJZnJlZShDT05TVF9DQVNUKHZvaWQqKWRtZC51dWlkKTsKKwlyZXR1cm4gKHIgPT0g LUVOT0RFVikgPyAwIDogcjsKK30KKworc3RhdGljIGludCBUQ1JZUFRfc3RhdHVzX29uZShz dHJ1Y3QgY3J5cHRfZGV2aWNlICpjZCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgIGNv bnN0IGNoYXIgKmJhc2VfdXVpZCwgaW50IGluZGV4LAorCQkJICAgICAgc2l6ZV90ICprZXlf c2l6ZSwgY2hhciAqY2lwaGVyLAorCQkJICAgICAgdWludDY0X3QgKmRhdGFfb2Zmc2V0LCBz dHJ1Y3QgZGV2aWNlICoqZGV2aWNlKQoreworCXN0cnVjdCBjcnlwdF9kbV9hY3RpdmVfZGV2 aWNlIGRtZCA9IHt9OworCWNoYXIgZG1fbmFtZVtQQVRIX01BWF0sICpjOworCWludCByOwor CisJaWYgKHNucHJpbnRmKGRtX25hbWUsIHNpemVvZihkbV9uYW1lKSwgIiVzXyVkIiwgbmFt ZSwgaW5kZXgpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyID0gZG1fc3RhdHVzX2Rl dmljZShjZCwgZG1fbmFtZSk7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKworCXIgPSBk bV9xdWVyeV9kZXZpY2UoY2QsIGRtX25hbWUsIERNX0FDVElWRV9ERVZJQ0UgfAorCQkJCQkg IERNX0FDVElWRV9VVUlEIHwKKwkJCQkJICBETV9BQ1RJVkVfQ1JZUFRfQ0lQSEVSIHwKKwkJ CQkJICBETV9BQ1RJVkVfQ1JZUFRfS0VZU0laRSwgJmRtZCk7CisJaWYgKHIgPiAwKQorCQly ID0gMDsKKwlpZiAoIXIgJiYgIXN0cm5jbXAoZG1kLnV1aWQsIGJhc2VfdXVpZCwgc3RybGVu KGJhc2VfdXVpZCkpKSB7CisJCWlmICgoYyA9IHN0cmNocihkbWQudS5jcnlwdC5jaXBoZXIs ICctJykpKQorCQkJKmMgPSAnXDAnOworCQlzdHJjYXQoY2lwaGVyLCAiLSIpOworCQlzdHJu Y2F0KGNpcGhlciwgZG1kLnUuY3J5cHQuY2lwaGVyLCBNQVhfQ0lQSEVSX0xFTik7CisJCSpr ZXlfc2l6ZSArPSBkbWQudS5jcnlwdC52ay0+a2V5bGVuZ3RoOworCQkqZGF0YV9vZmZzZXQg PSBkbWQudS5jcnlwdC5vZmZzZXQgKiBTRUNUT1JfU0laRTsKKwkJZGV2aWNlX2ZyZWUoKmRl dmljZSk7CisJCSpkZXZpY2UgPSBkbWQuZGF0YV9kZXZpY2U7CisJfSBlbHNlIHsKKwkJZGV2 aWNlX2ZyZWUoZG1kLmRhdGFfZGV2aWNlKTsKKwkJciA9IC1FTk9ERVY7CisJfQorCisJZnJl ZShDT05TVF9DQVNUKHZvaWQqKWRtZC51dWlkKTsKKwlmcmVlKENPTlNUX0NBU1Qodm9pZCop ZG1kLnUuY3J5cHQuY2lwaGVyKTsKKwljcnlwdF9mcmVlX3ZvbHVtZV9rZXkoZG1kLnUuY3J5 cHQudmspOworCXJldHVybiByOworfQorCitpbnQgVENSWVBUX2luaXRfYnlfbmFtZShzdHJ1 Y3QgY3J5cHRfZGV2aWNlICpjZCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCWNvbnN0IHN0cnVj dCBjcnlwdF9kbV9hY3RpdmVfZGV2aWNlICpkbWQsCisJCQlzdHJ1Y3QgZGV2aWNlICoqZGV2 aWNlLAorCQkJc3RydWN0IGNyeXB0X3BhcmFtc190Y3J5cHQgKnRjcnlwdF9wYXJhbXMsCisJ CQlzdHJ1Y3QgdGNyeXB0X3BoZHIgKnRjcnlwdF9oZHIpCit7CisJc3RydWN0IHRjcnlwdF9h bGdzICphbGdzOworCWNoYXIgY2lwaGVyW01BWF9DSVBIRVJfTEVOICogNF0sIG1vZGVbTUFY X0NJUEhFUl9MRU4rMV0sICp0bXA7CisJc2l6ZV90IGtleV9zaXplOworCWludCByOworCisJ bWVtc2V0KHRjcnlwdF9wYXJhbXMsIDAsIHNpemVvZigqdGNyeXB0X3BhcmFtcykpOworCW1l bXNldCh0Y3J5cHRfaGRyLCAwLCBzaXplb2YoKnRjcnlwdF9oZHIpKTsKKwl0Y3J5cHRfaGRy LT5kLnNlY3Rvcl9zaXplID0gU0VDVE9SX1NJWkU7CisJdGNyeXB0X2hkci0+ZC5ta19vZmZz ZXQgPSBkbWQtPnUuY3J5cHQub2Zmc2V0ICogU0VDVE9SX1NJWkU7CisKKwlzdHJuY3B5KGNp cGhlciwgZG1kLT51LmNyeXB0LmNpcGhlciwgTUFYX0NJUEhFUl9MRU4pOworCXRtcCA9IHN0 cmNocihjaXBoZXIsICctJyk7CisJaWYgKCF0bXApCisJCXJldHVybiAtRUlOVkFMOworCSp0 bXAgPSAnXDAnOworCW1vZGVbTUFYX0NJUEhFUl9MRU5dID0gJ1wwJzsKKwlzdHJuY3B5KG1v ZGUsICsrdG1wLCBNQVhfQ0lQSEVSX0xFTik7CisKKwlrZXlfc2l6ZSA9IGRtZC0+dS5jcnlw dC52ay0+a2V5bGVuZ3RoOworCXIgPSBUQ1JZUFRfc3RhdHVzX29uZShjZCwgbmFtZSwgZG1k LT51dWlkLCAxLCAma2V5X3NpemUsCisJCQkgICAgICBjaXBoZXIsICZ0Y3J5cHRfaGRyLT5k Lm1rX29mZnNldCwgZGV2aWNlKTsKKwlpZiAoIXIpCisJCXIgPSBUQ1JZUFRfc3RhdHVzX29u ZShjZCwgbmFtZSwgZG1kLT51dWlkLCAyLCAma2V5X3NpemUsCisJCQkJICAgICAgY2lwaGVy LCAmdGNyeXB0X2hkci0+ZC5ta19vZmZzZXQsIGRldmljZSk7CisKKwlpZiAociA8IDAgJiYg ciAhPSAtRU5PREVWKQorCQlyZXR1cm4gcjsKKworCWFsZ3MgPSBUQ1JZUFRfZ2V0X2FsZ3Mo Y2lwaGVyLCBtb2RlKTsKKwlpZiAoIWFsZ3MgfHwga2V5X3NpemUgIT0gYWxncy0+Y2hhaW5f a2V5X3NpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJdGNyeXB0X3BhcmFtcy0+a2V5X3Np emUgPSBhbGdzLT5jaGFpbl9rZXlfc2l6ZTsKKwl0Y3J5cHRfcGFyYW1zLT5jaXBoZXIgPSBh bGdzLT5sb25nX25hbWU7CisJdGNyeXB0X3BhcmFtcy0+bW9kZSA9IGFsZ3MtPm1vZGU7CisJ cmV0dXJuIDA7Cit9CisKK3VpbnQ2NF90IFRDUllQVF9nZXRfZGF0YV9vZmZzZXQoc3RydWN0 IGNyeXB0X2RldmljZSAqY2QsCisJCQkJIHN0cnVjdCB0Y3J5cHRfcGhkciAqaGRyLAorCQkJ CSBzdHJ1Y3QgY3J5cHRfcGFyYW1zX3RjcnlwdCAqcGFyYW1zKQoreworCXVpbnQ2NF90IHNp emU7CisKKwkvKiBObyByZWFsIGhlYWRlciBsb2FkZWQsIGluaXRpYWxpemVkIGJ5IGFjdGl2 ZSBkZXZpY2UgKi8KKwlpZiAoIWhkci0+ZC52ZXJzaW9uKQorCQlnb3RvIGhkcl9vZmZzZXQ7 CisKKwkvKiBNYXBwaW5nIHRocm91Z2ggd2hvbGUgZGV2aWNlLCBub3QgcGFydGl0aW9uISAq LworCWlmIChwYXJhbXMtPmZsYWdzICYgQ1JZUFRfVENSWVBUX1NZU1RFTV9IRUFERVIpIHsK KwkJaWYgKGNyeXB0X2Rldl9pc19wYXJ0aXRpb24oZGV2aWNlX3BhdGgoY3J5cHRfbWV0YWRh dGFfZGV2aWNlKGNkKSkpKQorCQkJcmV0dXJuIDA7CisJCWdvdG8gaGRyX29mZnNldDsKKwl9 CisKKwlpZiAocGFyYW1zLT5tb2RlICYmICFzdHJuY21wKHBhcmFtcy0+bW9kZSwgInh0cyIs IDMpKSB7CisJCWlmIChoZHItPmQudmVyc2lvbiA8IDMpCisJCQlyZXR1cm4gMTsKKworCQlp ZiAocGFyYW1zLT5mbGFncyAmIENSWVBUX1RDUllQVF9ISURERU5fSEVBREVSKSB7CisJCQlp ZiAoaGRyLT5kLnZlcnNpb24gPiAzKQorCQkJCXJldHVybiAoaGRyLT5kLm1rX29mZnNldCAv IGhkci0+ZC5zZWN0b3Jfc2l6ZSk7CisJCQlpZiAoZGV2aWNlX3NpemUoY3J5cHRfbWV0YWRh dGFfZGV2aWNlKGNkKSwgJnNpemUpIDwgMCkKKwkJCQlyZXR1cm4gMDsKKwkJCXJldHVybiAo c2l6ZSAtIGhkci0+ZC5oaWRkZW5fdm9sdW1lX3NpemUgKworCQkJCShUQ1JZUFRfSERSX0hJ RERFTl9PRkZTRVRfT0xEKSkgLyBoZHItPmQuc2VjdG9yX3NpemU7CisJCX0KKwkJZ290byBo ZHJfb2Zmc2V0OworCX0KKworCWlmIChwYXJhbXMtPmZsYWdzICYgQ1JZUFRfVENSWVBUX0hJ RERFTl9IRUFERVIpIHsKKwkJaWYgKGRldmljZV9zaXplKGNyeXB0X21ldGFkYXRhX2Rldmlj ZShjZCksICZzaXplKSA8IDApCisJCQlyZXR1cm4gMDsKKwkJcmV0dXJuIChzaXplIC0gaGRy LT5kLmhpZGRlbl92b2x1bWVfc2l6ZSArCisJCQkoVENSWVBUX0hEUl9ISURERU5fT0ZGU0VU X09MRCkpIC8gaGRyLT5kLnNlY3Rvcl9zaXplOworCX0KKworaGRyX29mZnNldDoKKwlyZXR1 cm4gaGRyLT5kLm1rX29mZnNldCAvIGhkci0+ZC5zZWN0b3Jfc2l6ZTsKK30KKwordWludDY0 X3QgVENSWVBUX2dldF9pdl9vZmZzZXQoc3RydWN0IGNyeXB0X2RldmljZSAqY2QsCisJCQkg ICAgICBzdHJ1Y3QgdGNyeXB0X3BoZHIgKmhkciwKKwkJCSAgICAgIHN0cnVjdCBjcnlwdF9w YXJhbXNfdGNyeXB0ICpwYXJhbXMpCit7CisJdWludDY0X3QgaXZfb2Zmc2V0OworCisJaWYg KHBhcmFtcy0+bW9kZSAmJiAhc3RybmNtcChwYXJhbXMtPm1vZGUsICJ4dHMiLCAzKSkKKwkJ aXZfb2Zmc2V0ID0gVENSWVBUX2dldF9kYXRhX29mZnNldChjZCwgaGRyLCBwYXJhbXMpOwor CWVsc2UgaWYgKHBhcmFtcy0+bW9kZSAmJiAhc3RybmNtcChwYXJhbXMtPm1vZGUsICJscnci LCAzKSkKKwkJaXZfb2Zmc2V0ID0gMDsKKwllbHNlCisJCWl2X29mZnNldCA9IGhkci0+ZC5t a19vZmZzZXQgLyBoZHItPmQuc2VjdG9yX3NpemU7CisKKwlpZiAocGFyYW1zLT5mbGFncyAm IENSWVBUX1RDUllQVF9TWVNURU1fSEVBREVSKQorCQlpdl9vZmZzZXQgKz0gY3J5cHRfZGV2 X3BhcnRpdGlvbl9vZmZzZXQoZGV2aWNlX3BhdGgoY3J5cHRfbWV0YWRhdGFfZGV2aWNlKGNk KSkpOworCisJcmV0dXJuIGl2X29mZnNldDsKK30KKworaW50IFRDUllQVF9nZXRfdm9sdW1l X2tleShzdHJ1Y3QgY3J5cHRfZGV2aWNlICpjZCwKKwkJCSAgc3RydWN0IHRjcnlwdF9waGRy ICpoZHIsCisJCQkgIHN0cnVjdCBjcnlwdF9wYXJhbXNfdGNyeXB0ICpwYXJhbXMsCisJCQkg IHN0cnVjdCB2b2x1bWVfa2V5ICoqdmspCit7CisJc3RydWN0IHRjcnlwdF9hbGdzICphbGdz OworCXVuc2lnbmVkIGludCBpLCBrZXlfaW5kZXg7CisKKwlpZiAoIWhkci0+ZC52ZXJzaW9u KSB7CisJCWxvZ19lcnIoY2QsIF8oIlRoaXMgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCB3 aXRob3V0IFRDUllQVCBoZWFkZXIgbG9hZC4iKSk7CisJCXJldHVybiAtRU5PVFNVUDsKKwl9 CisKKwlhbGdzID0gVENSWVBUX2dldF9hbGdzKHBhcmFtcy0+Y2lwaGVyLCBwYXJhbXMtPm1v ZGUpOworCWlmICghYWxncykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkqdmsgPSBjcnlwdF9h bGxvY192b2x1bWVfa2V5KHBhcmFtcy0+a2V5X3NpemUsIE5VTEwpOworCWlmICghKnZrKQor CQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDAsIGtleV9pbmRleCA9IDA7IGkgPCBh bGdzLT5jaGFpbl9jb3VudDsgaSsrKSB7CisJCVRDUllQVF9jb3B5X2tleSgmYWxncy0+Y2lw aGVyW2ldLCBhbGdzLT5tb2RlLAorCQkJCSYoKnZrKS0+a2V5W2tleV9pbmRleF0sIGhkci0+ ZC5rZXlzKTsKKwkJa2V5X2luZGV4ICs9IGFsZ3MtPmNpcGhlcltpXS5rZXlfc2l6ZTsKKwl9 CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGxvZ19zdGRfaGV4ZHVt cChzdHJ1Y3QgY3J5cHRfZGV2aWNlICpjZCwgdWludDhfdCAqcCwgaW50IGxlbikKK3sKKwlp bnQgaTsKKworCisJZm9yKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKGkgJiYgIShp ICUgMTYpKQorCQkJbG9nX3N0ZChjZCwgIlxuXHRcdCIpOworCQlsb2dfc3RkKGNkLCAiJTAy aGh4ICIsIChjaGFyKXBbaV0pOworCX0KKwlsb2dfc3RkKGNkLCAiXG4iKTsKKworCXJldHVy biAwOworfQorCitpbnQgR0VMSV9kdW1wKHN0cnVjdCBjcnlwdF9kZXZpY2UgKmNkLAorCQlz dHJ1Y3QgZ2VsaV9waGRyICpoZHIsCisJCXN0cnVjdCBjcnlwdF9wYXJhbXNfZ2VsaSAqcGFy YW1zKQoreworCWxvZ19zdGQoY2QsICJHRUxJIGhlYWRlciBpbmZvcm1hdGlvbiBmb3IgJXNc biIsCisJCWRldmljZV9wYXRoKGNyeXB0X21ldGFkYXRhX2RldmljZShjZCkpKTsKKworCWlm IChoZHItPm1kX3ZlcnNpb24gPT0gNykgeworCQlsb2dfc3RkKGNkLCAiTWFnaWM6XHRcdCVz XG4iLCBoZHItPm1kX21hZ2ljKTsKKwkJbG9nX3N0ZChjZCwgIlZlcnNpb246XHQlIiBQUkl1 MzIgIlxuIiwgaGRyLT5tZF92ZXJzaW9uKTsKKwkJbG9nX3N0ZChjZCwgIkZsYWdzOlx0XHQw eCUiIFBSSXgzMiAiXG4iLCBoZHItPm1kX2ZsYWdzKTsKKwkJbG9nX3N0ZChjZCwgIkVuY3J5 cHRpb24gYWxnbzpcdDB4JSIgUFJJeDE2ICJcbiIsIGhkci0+bWRfZWFsZ28pOworCQlsb2df c3RkKGNkLCAiS2V5IGxlbmd0aDpcdCUiIFBSSXUxNiAiXG4iLCBoZHItPm1kX2tleWxlbik7 CisJCWxvZ19zdGQoY2QsICJBdXRoZW50aWNhdGlvbiBhbGdvOlx0MHglIiBQUkl4MTYgIlxu IiwgaGRyLT5tZF9hYWxnbyk7CisJCWxvZ19zdGQoY2QsICJQcm92aWRlciBzaXplOlx0JSIg UFJJdTY0ICJcbiIsIGhkci0+bWRfcHJvdnNpemUpOworCQlsb2dfc3RkKGNkLCAiU2VjdG9y IHNpemU6XHQlIiBQUkl1MzIgIlxuIiwgaGRyLT5tZF9zZWN0b3JzaXplKTsKKwkJbG9nX3N0 ZChjZCwgIk51bWJlciBvZiBrZXlzOlx0JSIgUFJJdTggIlxuIiwgaGRyLT5tZF9rZXlzKTsK KwkJbG9nX3N0ZChjZCwgIk51bWJlciBvZiBpdGVyYXRpb25zOlx0JSIgUFJJdTMyICJcbiIs IGhkci0+bWRfaXRlcmF0aW9ucyk7CisJCWxvZ19zdGQoY2QsICJTYWx0Olx0XHRcdCIpOwor CQlsb2dfc3RkX2hleGR1bXAoY2QsIGhkci0+bWRfc2FsdCwgR19FTElfU0FMVExFTik7CisJ CWxvZ19zdGQoY2QsICJFbmNyeXB0ZWQgTUtleXM6XHQiKTsKKwkJbG9nX3N0ZF9oZXhkdW1w KGNkLCBoZHItPm1kX21rZXlzYnVmLCBHX0VMSV9NQVhNS0VZUyAqIEdfRUxJX01LRVlMRU4p OworCQlsb2dfc3RkKGNkLCAiRW5jci4gSVYga2V5IDA6XHRcdCIpOworCQlsb2dfc3RkX2hl eGR1bXAoY2QsIGhkci0+bWRfbWtleXNsb3RbMF0ubWRfaXZrZXksIEdfRUxJX0lWS0VZTEVO KTsKKwkJbG9nX3N0ZChjZCwgIkVuY3IuIGRhdGEga2V5IDA6XHQiKTsKKwkJbG9nX3N0ZF9o ZXhkdW1wKGNkLCBoZHItPm1kX21rZXlzbG90WzBdLm1kX2RhdGFrZXksIEdfRUxJX0RBVEFL RVlMRU4pOworCQlsb2dfc3RkKGNkLCAiRW5jci4gU0hBNTEyIEhNQUMgMDpcdCIpOworCQls b2dfc3RkX2hleGR1bXAoY2QsIGhkci0+bWRfbWtleXNsb3RbMF0ubWRfaG1hY3NoYTUxMiwg U0hBNTEyX01ETEVOKTsKKwkJbG9nX3N0ZChjZCwgIkVuY3IuIElWIGtleSAxOlx0XHQiKTsK KwkJbG9nX3N0ZF9oZXhkdW1wKGNkLCBoZHItPm1kX21rZXlzbG90WzFdLm1kX2l2a2V5LCBH X0VMSV9JVktFWUxFTik7CisJCWxvZ19zdGQoY2QsICJFbmNyLiBkYXRhIGtleSAxOlx0Iik7 CisJCWxvZ19zdGRfaGV4ZHVtcChjZCwgaGRyLT5tZF9ta2V5c2xvdFsxXS5tZF9kYXRha2V5 LCBHX0VMSV9EQVRBS0VZTEVOKTsKKwkJbG9nX3N0ZChjZCwgIkVuY3IuIFNIQTUxMiBITUFD IDE6XHQiKTsKKwkJbG9nX3N0ZF9oZXhkdW1wKGNkLCBoZHItPm1kX21rZXlzbG90WzFdLm1k X2htYWNzaGE1MTIsIFNIQTUxMl9NRExFTik7CisJCWxvZ19zdGQoY2QsICJNRDU6XHRcdFx0 Iik7CisJCWxvZ19zdGRfaGV4ZHVtcChjZCwgaGRyLT5tZF9oYXNoLCAxNik7CisJfSBlbHNl IHsKKwkJbG9nX3N0ZChjZCwgIlZlcnNpb24gJWQgbm90IHN1cHBvcnRlZFxuIiwgaGRyLT5t ZF92ZXJzaW9uKTsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWIvZ2VsaS9n ZWxpLmggYi9saWIvZ2VsaS9nZWxpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uNmQ0ZDI0OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nZWxpL2dlbGkuaApAQCAt MCwwICsxLDk2IEBACisvKgorICogRnJlZUJTRCBHRU9NOjpFTEkgR0VMSSBjb21wYXRpYmxl IHZvbHVtZSBoYW5kbGluZworICoKKyAqIENvcHlyaWdodCAoQykgMjAxNywgQ2FybC1EYW5p ZWwgSGFpbGZpbmdlcgorICoKKyAqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy c2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisgKgorICogVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK KyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl ciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYg bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwg NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAx IFVTQS4KKyAqLworCisjaWZuZGVmIF9HRUxJX0gKKyNkZWZpbmUgX0dFTElfSAorCisjaW5j bHVkZSA8dW5pc3RkLmg+CisKKy8qIFJlbGV2YW50IGhlYWRlciBwYXJ0cyBmcm9tIEZyZWVC U0Qgc3lzL2dlb20vZWxpL2dfZWxpLmgKKyAqIFRPRE86IEZpZ3VyZSBvdXQgaWYgdGhhdCBp cyBhY3R1YWxseSBPSyBmcm9tIGEgbGljZW5zaW5nIHBlcnNwZWN0aXZlLgorICovCisjZGVm aW5lCUdfRUxJX01BR0lDCQkiR0VPTTo6RUxJIgorCisjZGVmaW5lIFNIQTUxMl9NRExFTgkJ NjQKKworI2RlZmluZQlHX0VMSV9NQVhNS0VZUwkJMgorI2RlZmluZQlHX0VMSV9NQVhLRVlM RU4JCTY0CisjZGVmaW5lCUdfRUxJX1VTRVJLRVlMRU4JR19FTElfTUFYS0VZTEVOCisjZGVm aW5lCUdfRUxJX0RBVEFLRVlMRU4JR19FTElfTUFYS0VZTEVOCisjZGVmaW5lCUdfRUxJX0FV VEhLRVlMRU4JR19FTElfTUFYS0VZTEVOCisjZGVmaW5lCUdfRUxJX0lWS0VZTEVOCQlHX0VM SV9NQVhLRVlMRU4KKyNkZWZpbmUJR19FTElfU0FMVExFTgkJNjQKKyNkZWZpbmUJR19FTElf REFUQUlWS0VZTEVOCShHX0VMSV9EQVRBS0VZTEVOICsgR19FTElfSVZLRVlMRU4pCisvKiBE YXRhLUtleSwgSVYtS2V5LCBITUFDX1NIQTUxMihEZXJpdmVkLUtleSwgRGF0YS1LZXkrSVYt S2V5KSAqLworI2RlZmluZQlHX0VMSV9NS0VZTEVOCQkoR19FTElfREFUQUlWS0VZTEVOICsg U0hBNTEyX01ETEVOKQorCitzdHJ1Y3QgZ2VsaV9ta2V5c2xvdCB7CisJdWludDhfdAkJbWRf aXZrZXlbR19FTElfSVZLRVlMRU5dOworCXVpbnQ4X3QJCW1kX2RhdGFrZXlbR19FTElfREFU QUtFWUxFTl07CisJdWludDhfdAkJbWRfaG1hY3NoYTUxMltTSEE1MTJfTURMRU5dOworfTsK Kworc3RydWN0IGdlbGlfcGhkciB7CisJY2hhcgkJbWRfbWFnaWNbMTZdOwkvKiBNYWdpYyB2 YWx1ZS4gKi8KKwl1aW50MzJfdAltZF92ZXJzaW9uOwkvKiBWZXJzaW9uIG51bWJlci4gKi8K Kwl1aW50MzJfdAltZF9mbGFnczsJLyogQWRkaXRpb25hbCBmbGFncy4gKi8KKwl1aW50MTZf dAltZF9lYWxnbzsJLyogRW5jcnlwdGlvbiBhbGdvcml0aG0uICovCisJdWludDE2X3QJbWRf a2V5bGVuOwkvKiBLZXkgbGVuZ3RoLiAqLworCXVpbnQxNl90CW1kX2FhbGdvOwkvKiBBdXRo ZW50aWNhdGlvbiBhbGdvcml0aG0uICovCisJdWludDY0X3QJbWRfcHJvdnNpemU7CS8qIFBy b3ZpZGVyJ3Mgc2l6ZS4gKi8KKwl1aW50MzJfdAltZF9zZWN0b3JzaXplOwkvKiBTZWN0b3Ig c2l6ZS4gKi8KKwl1aW50OF90CQltZF9rZXlzOwkvKiBBdmFpbGFibGUga2V5cy4gKi8KKwlp bnQzMl90CQltZF9pdGVyYXRpb25zOwkvKiBOdW1iZXIgb2YgaXRlcmF0aW9ucyBmb3IgUEtD UyM1djIuICovCisJdWludDhfdAkJbWRfc2FsdFtHX0VMSV9TQUxUTEVOXTsgLyogU2FsdC4g Ki8KKwkJCS8qIEVuY3J5cHRlZCBtYXN0ZXIga2V5IChJVi1rZXksIERhdGEta2V5LCBITUFD KS4gKi8KKwl1bmlvbiB7CisJCXVpbnQ4X3QJCQltZF9ta2V5c2J1ZltHX0VMSV9NQVhNS0VZ UyAqIEdfRUxJX01LRVlMRU5dOworCQlzdHJ1Y3QgZ2VsaV9ta2V5c2xvdAltZF9ta2V5c2xv dFtHX0VMSV9NQVhNS0VZU107CisJfTsKKwl1X2NoYXIJCW1kX2hhc2hbMTZdOwkvKiBNRDUg aGFzaC4gKi8KK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworCitpbnQgR0VMSV9y ZWFkX3BoZHIoc3RydWN0IGNyeXB0X2RldmljZSAqY2QsCisJCSAgICAgc3RydWN0IGdlbGlf cGhkciAqaGRyLAorCQkgICAgIHN0cnVjdCBjcnlwdF9wYXJhbXNfZ2VsaSAqcGFyYW1zKTsK KworaW50IEdFTElfZHVtcChzdHJ1Y3QgY3J5cHRfZGV2aWNlICpjZCwKKwkJc3RydWN0IGdl bGlfcGhkciAqaGRyLAorCQlzdHJ1Y3QgY3J5cHRfcGFyYW1zX2dlbGkgKnBhcmFtcyk7CisK KyNpZiAwCitzdHJ1Y3QgY3J5cHRfZGV2aWNlOworc3RydWN0IHZvbHVtZV9rZXk7CisKK2lu dCBHRUxJX3BhcnNlX2tleWZpbGUoc3RydWN0IGNyeXB0X2RldmljZSAqY2QsCisJCQkgIHN0 cnVjdCB2b2x1bWVfa2V5ICoqdmssCisJCQkgIGNvbnN0IGNoYXIgKmhhc2gsCisJCQkgIHVu c2lnbmVkIGludCAqa2V5c19jb3VudCwKKwkJCSAgY2hhciAqYnVmZmVyLAorCQkJICBzaXpl X3QgYnVmZmVyX2xlbik7CisKK2ludCBHRUxJX2FjdGl2YXRlKHN0cnVjdCBjcnlwdF9kZXZp Y2UgKmNkLAorCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgY29uc3QgY2hhciAq YmFzZV9jaXBoZXIsCisJCSAgICAgdW5zaWduZWQgaW50IGtleXNfY291bnQsCisJCSAgICAg c3RydWN0IHZvbHVtZV9rZXkgKnZrLAorCQkgICAgIHVpbnQzMl90IGZsYWdzKTsKKyNlbmRp ZgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvbGliY3J5cHRzZXR1cC5oIGIvbGliL2xpYmNy eXB0c2V0dXAuaAppbmRleCA4MGJiZjVjLi44ZTMxNDQ0IDEwMDY0NAotLS0gYS9saWIvbGli Y3J5cHRzZXR1cC5oCisrKyBiL2xpYi9saWJjcnlwdHNldHVwLmgKQEAgLTI0Myw2ICsyNDMs OCBAQCBpbnQgY3J5cHRfbWVtb3J5X2xvY2soc3RydWN0IGNyeXB0X2RldmljZSAqY2QsIGlu dCBsb2NrKTsKICNkZWZpbmUgQ1JZUFRfVkVSSVRZICJWRVJJVFkiCiAvKiogVENSWVBUIChU cnVlQ3J5cHQtY29tcGF0aWJsZSBhbmQgVmVyYUNyeXB0LWNvbXBhdGlibGUpIG1vZGUgKi8K ICNkZWZpbmUgQ1JZUFRfVENSWVBUICJUQ1JZUFQiCisvKiogR0VMSSAoRnJlZUJTRCBHRU9N OjpFTEkpIG1vZGUgKi8KKyNkZWZpbmUgQ1JZUFRfR0VMSSAiR0VMSSIKIAogLyoqCiAgKiBH ZXQgZGV2aWNlIHR5cGUKQEAgLTM1NCw2ICszNTYsMTcgQEAgc3RydWN0IGNyeXB0X3BhcmFt c190Y3J5cHQgewogICovCiAjZGVmaW5lIENSWVBUX1RDUllQVF9WRVJBX01PREVTICAgICAg KDEgPDwgNCkKIAorLyoqCisgKgorICogU3RydWN0dXJlIHVzZWQgYXMgcGFyYW1ldGVyIGZv ciBHRUxJIGRldmljZSB0eXBlLgorICoKKyAqIEBzZWUgY3J5cHRfZm9ybWF0CisgKgorICov CitzdHJ1Y3QgY3J5cHRfcGFyYW1zX2dlbGkgeworCWludCBkdW1teTsKK307CisKIC8qKiBA fSAqLwogCiAvKioKZGlmZiAtLWdpdCBhL2xpYi9zZXR1cC5jIGIvbGliL3NldHVwLmMKaW5k ZXggMWRjYTk5Yi4uN2QzOTRhYyAxMDA2NDQKLS0tIGEvbGliL3NldHVwLmMKKysrIGIvbGli L3NldHVwLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJsb29wYWVzLmgiCiAjaW5j bHVkZSAidmVyaXR5LmgiCiAjaW5jbHVkZSAidGNyeXB0LmgiCisjaW5jbHVkZSAiZ2VsaS5o IgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKIHN0cnVjdCBjcnlwdF9kZXZpY2UgewpAQCAt NzYsNiArNzcsMTAgQEAgc3RydWN0IGNyeXB0X2RldmljZSB7CiAJCXN0cnVjdCBjcnlwdF9w YXJhbXNfdGNyeXB0IHBhcmFtczsKIAkJc3RydWN0IHRjcnlwdF9waGRyIGhkcjsKIAl9IHRj cnlwdDsKKwlzdHJ1Y3QgeyAvKiB1c2VkIGluIENSWVBUX0dFTEkgKi8KKwkJc3RydWN0IGNy eXB0X3BhcmFtc19nZWxpIHBhcmFtczsKKwkJc3RydWN0IGdlbGlfcGhkciBoZHI7CisJfSBn ZWxpOwogCXN0cnVjdCB7IC8qIHVzZWQgaWYgaW5pdGlhbGl6ZWQgd2l0aG91dCBoZWFkZXIg YnkgbmFtZSAqLwogCQljaGFyICphY3RpdmVfbmFtZTsKIAkJLyogYnVmZmVycywgbXVzdCBy ZWZyZXNoIGZyb20ga2VybmVsIG9uIGV2ZXJ5IHF1ZXJ5ICovCkBAIC0yNDUsNiArMjUwLDEx IEBAIHN0YXRpYyBpbnQgaXNUQ1JZUFQoY29uc3QgY2hhciAqdHlwZSkKIAlyZXR1cm4gKHR5 cGUgJiYgIXN0cmNtcChDUllQVF9UQ1JZUFQsIHR5cGUpKTsKIH0KIAorc3RhdGljIGludCBp c0dFTEkoY29uc3QgY2hhciAqdHlwZSkKK3sKKwlyZXR1cm4gKHR5cGUgJiYgIXN0cmNtcChD UllQVF9HRUxJLCB0eXBlKSk7Cit9CisKIHN0YXRpYyBpbnQgb25seUxVS1Moc3RydWN0IGNy eXB0X2RldmljZSAqY2QpCiB7CiAJaW50IHIgPSAwOwpAQCAtNTgxLDYgKzU5MSwzMCBAQCBz dGF0aWMgaW50IF9jcnlwdF9sb2FkX3RjcnlwdChzdHJ1Y3QgY3J5cHRfZGV2aWNlICpjZCwg c3RydWN0IGNyeXB0X3BhcmFtc190Y3J5cAogCXJldHVybiByOwogfQogCitzdGF0aWMgaW50 IF9jcnlwdF9sb2FkX2dlbGkoc3RydWN0IGNyeXB0X2RldmljZSAqY2QsIHN0cnVjdCBjcnlw dF9wYXJhbXNfZ2VsaSAqcGFyYW1zKQoreworCWludCByOworCisJaWYgKCFwYXJhbXMpCisJ CXJldHVybiAtRUlOVkFMOworCisJciA9IGluaXRfY3J5cHRvKGNkKTsKKwlpZiAociA8IDAp CisJCXJldHVybiByOworCisJbWVtY3B5KCZjZC0+dS5nZWxpLnBhcmFtcywgcGFyYW1zLCBz aXplb2YoKnBhcmFtcykpOworCisJciA9IEdFTElfcmVhZF9waGRyKGNkLCAmY2QtPnUuZ2Vs aS5oZHIsICZjZC0+dS5nZWxpLnBhcmFtcyk7CisKKwlpZiAociA8IDApCisJCXJldHVybiBy OworCisJaWYgKCFjZC0+dHlwZSAmJiAhKGNkLT50eXBlID0gc3RyZHVwKENSWVBUX0dFTEkp KSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gcjsKK30KKwogc3RhdGljIGludCBf Y3J5cHRfbG9hZF92ZXJpdHkoc3RydWN0IGNyeXB0X2RldmljZSAqY2QsIHN0cnVjdCBjcnlw dF9wYXJhbXNfdmVyaXR5ICpwYXJhbXMpCiB7CiAJaW50IHI7CkBAIC02ODMsNiArNzE3LDkg QEAgc3RhdGljIGludCBfaW5pdF9ieV9uYW1lX2NyeXB0KHN0cnVjdCBjcnlwdF9kZXZpY2Ug KmNkLCBjb25zdCBjaGFyICpuYW1lKQogCX0gZWxzZSBpZiAoaXNUQ1JZUFQoY2QtPnR5cGUp KSB7CiAJCXIgPSBUQ1JZUFRfaW5pdF9ieV9uYW1lKGNkLCBuYW1lLCAmZG1kLCAmY2QtPmRl dmljZSwKIAkJCQkJJmNkLT51LnRjcnlwdC5wYXJhbXMsICZjZC0+dS50Y3J5cHQuaGRyKTsK Kwl9IGVsc2UgaWYgKGlzR0VMSShjZC0+dHlwZSkpIHsKKwkJLy9GSVhNRSByID0gR0VMSV9p bml0X2J5X25hbWUoY2QsIG5hbWUsICZkbWQsICZjZC0+ZGV2aWNlLAorCQkvL0ZJWE1FCQkJ JmNkLT51LmdlbGkucGFyYW1zLCAmY2QtPnUuZ2VsaS5oZHIpOwogCX0KIG91dDoKIAljcnlw dF9mcmVlX3ZvbHVtZV9rZXkoZG1kLnUuY3J5cHQudmspOwpAQCAtNzkwLDYgKzgyNyw4IEBA IGludCBjcnlwdF9pbml0X2J5X25hbWVfYW5kX2hlYWRlcihzdHJ1Y3QgY3J5cHRfZGV2aWNl ICoqY2QsCiAJCQkoKmNkKS0+dHlwZSA9IHN0cmR1cChDUllQVF9WRVJJVFkpOwogCQllbHNl IGlmICghc3RybmNtcChDUllQVF9UQ1JZUFQsIGRtZC51dWlkLCBzaXplb2YoQ1JZUFRfVENS WVBUKS0xKSkKIAkJCSgqY2QpLT50eXBlID0gc3RyZHVwKENSWVBUX1RDUllQVCk7CisJCWVs c2UgaWYgKCFzdHJuY21wKENSWVBUX0dFTEksIGRtZC51dWlkLCBzaXplb2YoQ1JZUFRfR0VM SSktMSkpCisJCQkoKmNkKS0+dHlwZSA9IHN0cmR1cChDUllQVF9HRUxJKTsKIAkJZWxzZQog CQkJbG9nX2RiZygiVW5rbm93biBVVUlEIHNldCwgc29tZSBwYXJhbWV0ZXJzIGFyZSBub3Qg c2V0LiIpOwogCX0gZWxzZQpAQCAtMTE3Nyw2ICsxMjE2LDEyIEBAIGludCBjcnlwdF9sb2Fk KHN0cnVjdCBjcnlwdF9kZXZpY2UgKmNkLAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJ ciA9IF9jcnlwdF9sb2FkX3RjcnlwdChjZCwgcGFyYW1zKTsKKwl9IGVsc2UgaWYgKGlzR0VM SShyZXF1ZXN0ZWRfdHlwZSkpIHsKKwkJaWYgKGNkLT50eXBlICYmICFpc0dFTEkoY2QtPnR5 cGUpKSB7CisJCQlsb2dfZGJnKCJDb250ZXh0IGlzIGFscmVhZHkgaW5pdGlhbGlzZWQgdG8g dHlwZSAlcyIsIGNkLT50eXBlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXIgPSBf Y3J5cHRfbG9hZF9nZWxpKGNkLCBwYXJhbXMpOwogCX0gZWxzZQogCQlyZXR1cm4gLUVJTlZB TDsKIApAQCAtMjAzMiw2ICsyMDc3LDExIEBAIGludCBjcnlwdF9hY3RpdmF0ZV9ieV92b2x1 bWVfa2V5KHN0cnVjdCBjcnlwdF9kZXZpY2UgKmNkLAogCQkJcmV0dXJuIDA7CiAJCXIgPSBU Q1JZUFRfYWN0aXZhdGUoY2QsIG5hbWUsICZjZC0+dS50Y3J5cHQuaGRyLAogCQkJCSAgICAm Y2QtPnUudGNyeXB0LnBhcmFtcywgZmxhZ3MpOworCX0gZWxzZSBpZiAoaXNHRUxJKGNkLT50 eXBlKSkgeworCQlpZiAoIW5hbWUpCisJCQlyZXR1cm4gMDsKKwkJLy9GSVhNRSByID0gR0VM SV9hY3RpdmF0ZShjZCwgbmFtZSwgJmNkLT51LmdlbGkuaGRyLAorCQkvL0ZJWE1FCQkgICAg JmNkLT51LmdlbGkucGFyYW1zLCBmbGFncyk7CiAJfSBlbHNlCiAJCWxvZ19lcnIoY2QsIF8o IkRldmljZSB0eXBlIGlzIG5vdCBwcm9wZXJseSBpbml0aWFsaXNlZC5cbiIpKTsKIApAQCAt MjExNSw2ICsyMTY1LDggQEAgaW50IGNyeXB0X3ZvbHVtZV9rZXlfZ2V0KHN0cnVjdCBjcnlw dF9kZXZpY2UgKmNkLAogCQkJCQlwYXNzcGhyYXNlX3NpemUsICZjZC0+dS5sdWtzMS5oZHIs ICZ2aywgY2QpOwogCX0gZWxzZSBpZiAoaXNUQ1JZUFQoY2QtPnR5cGUpKSB7CiAJCXIgPSBU Q1JZUFRfZ2V0X3ZvbHVtZV9rZXkoY2QsICZjZC0+dS50Y3J5cHQuaGRyLCAmY2QtPnUudGNy eXB0LnBhcmFtcywgJnZrKTsKKwl9IGVsc2UgaWYgKGlzR0VMSShjZC0+dHlwZSkpIHsKKwkJ Ly9GSVhNRSByID0gR0VMSV9nZXRfdm9sdW1lX2tleShjZCwgJmNkLT51LmdlbGkuaGRyLCAm Y2QtPnUuZ2VsaS5wYXJhbXMsICZ2ayk7CiAJfSBlbHNlCiAJCWxvZ19lcnIoY2QsIF8oIlRo aXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yICVzIGNyeXB0IGRldmljZS5cbiIp LCBjZC0+dHlwZSA/OiAiKG5vbmUpIik7CiAKQEAgLTIyODksNiArMjM0MSw4IEBAIGludCBj cnlwdF9kdW1wKHN0cnVjdCBjcnlwdF9kZXZpY2UgKmNkKQogCQlyZXR1cm4gX3Zlcml0eV9k dW1wKGNkKTsKIAllbHNlIGlmIChpc1RDUllQVChjZC0+dHlwZSkpCiAJCXJldHVybiBUQ1JZ UFRfZHVtcChjZCwgJmNkLT51LnRjcnlwdC5oZHIsICZjZC0+dS50Y3J5cHQucGFyYW1zKTsK KwllbHNlIGlmIChpc0dFTEkoY2QtPnR5cGUpKQorCQlyZXR1cm4gR0VMSV9kdW1wKGNkLCAm Y2QtPnUuZ2VsaS5oZHIsICZjZC0+dS5nZWxpLnBhcmFtcyk7CiAKIAlsb2dfZXJyKGNkLCBf KCJEdW1wIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGRldmljZSB0eXBl LlxuIikpOwogCXJldHVybiAtRUlOVkFMOwpAQCAtMjMzMyw2ICsyMzg3LDEwIEBAIGNvbnN0 IGNoYXIgKmNyeXB0X2dldF9jaXBoZXIoc3RydWN0IGNyeXB0X2RldmljZSAqY2QpCiAJaWYg KGlzVENSWVBUKGNkLT50eXBlKSkKIAkJcmV0dXJuIGNkLT51LnRjcnlwdC5wYXJhbXMuY2lw aGVyOwogCisJaWYgKGlzR0VMSShjZC0+dHlwZSkpCisJCXJldHVybiAiYWVzIjsKKwkJLy9G SVhNRSByZXR1cm4gY2QtPnUuZ2VsaS5wYXJhbXMuY2lwaGVyOworCiAJaWYgKCFjZC0+dHlw ZSAmJiAhX2luaXRfYnlfbmFtZV9jcnlwdF9ub25lKGNkKSkKIAkJcmV0dXJuIGNkLT51Lm5v bmUuY2lwaGVyOwogCkBAIC0yMzUzLDYgKzI0MTEsMTAgQEAgY29uc3QgY2hhciAqY3J5cHRf Z2V0X2NpcGhlcl9tb2RlKHN0cnVjdCBjcnlwdF9kZXZpY2UgKmNkKQogCWlmIChpc1RDUllQ VChjZC0+dHlwZSkpCiAJCXJldHVybiBjZC0+dS50Y3J5cHQucGFyYW1zLm1vZGU7CiAKKwlp ZiAoaXNHRUxJKGNkLT50eXBlKSkKKwkJcmV0dXJuICJ4dHMtYnl0ZTY0IjsKKwkJLy9GSVhN RSByZXR1cm4gY2QtPnUuZ2VsaS5wYXJhbXMubW9kZTsKKwogCWlmICghY2QtPnR5cGUgJiYg IV9pbml0X2J5X25hbWVfY3J5cHRfbm9uZShjZCkpCiAJCXJldHVybiBjZC0+dS5ub25lLmNp cGhlcl9tb2RlOwogCkBAIC0yMzk3LDYgKzI0NTksMTAgQEAgaW50IGNyeXB0X2dldF92b2x1 bWVfa2V5X3NpemUoc3RydWN0IGNyeXB0X2RldmljZSAqY2QpCiAJaWYgKGlzVENSWVBUKGNk LT50eXBlKSkKIAkJcmV0dXJuIGNkLT51LnRjcnlwdC5wYXJhbXMua2V5X3NpemU7CiAKKwlp ZiAoaXNHRUxJKGNkLT50eXBlKSkKKwkJcmV0dXJuIDI1NjsKKwkJLy9GSVhNRSByZXR1cm4g Y2QtPnUuZ2VsaS5wYXJhbXMua2V5X3NpemU7CisKIAlpZiAoIWNkLT50eXBlICYmICFfaW5p dF9ieV9uYW1lX2NyeXB0X25vbmUoY2QpKQogCQlyZXR1cm4gY2QtPnUubm9uZS5rZXlfc2l6 ZTsKIApAQCAtMjQzNCw2ICsyNTAwLDcgQEAgdWludDY0X3QgY3J5cHRfZ2V0X2l2X29mZnNl dChzdHJ1Y3QgY3J5cHRfZGV2aWNlICpjZCkKIAlpZiAoaXNUQ1JZUFQoY2QtPnR5cGUpKQog CQlyZXR1cm4gVENSWVBUX2dldF9pdl9vZmZzZXQoY2QsICZjZC0+dS50Y3J5cHQuaGRyLCAm Y2QtPnUudGNyeXB0LnBhcmFtcyk7CiAKKwkvL0ZJWE1FOiBHRUxJPwogCXJldHVybiAwOwog fQogCmRpZmYgLS1naXQgYS9zcmMvY3J5cHRzZXR1cC5jIGIvc3JjL2NyeXB0c2V0dXAuYwpp bmRleCAyZDZkZGFmLi5hNjY1ZmVhIDEwMDY0NAotLS0gYS9zcmMvY3J5cHRzZXR1cC5jCisr KyBiL3NyYy9jcnlwdHNldHVwLmMKQEAgLTM4Miw2ICszODIsMTAxIEBAIG91dDoKIAlyZXR1 cm4gcjsKIH0KIAorc3RhdGljIGludCBnZWxpX2xvYWQoc3RydWN0IGNyeXB0X2RldmljZSAq Y2QsIHN0cnVjdCBjcnlwdF9wYXJhbXNfZ2VsaSAqcGFyYW1zKQoreworCWludCByLCBlcGVy bSA9IDA7CisKKwlkbyB7CisJCWxvZ19zdGQoIkdFTEkgdHJhY2tpbmc6IDVcbiIpOworCQly ID0gY3J5cHRfbG9hZChjZCwgQ1JZUFRfR0VMSSwgcGFyYW1zKTsKKwkJbG9nX3N0ZCgiR0VM SSB0cmFja2luZzogNiBjcnlwdF9sb2FkIHJldHVybmVkICVpXG4iLCByKTsKKworCQlpZiAo ciA9PSAtRVBFUk0pIHsKKwkJCWxvZ19lcnIoXygiTm8gZGV2aWNlIGhlYWRlciBkZXRlY3Rl ZCB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLlxuIikpOworCQkJZXBlcm0gPSAxOworCQl9 CisKKyNpZiAwCisJCWlmIChyIDwgMCkgeworCQkJY3J5cHRfc2FmZV9mcmVlKENPTlNUX0NB U1QoY2hhciopcGFyYW1zLT5wYXNzcGhyYXNlKTsKKwkJCXBhcmFtcy0+cGFzc3BocmFzZSA9 IE5VTEw7CisJCQlwYXJhbXMtPnBhc3NwaHJhc2Vfc2l6ZSA9IDA7CisJCX0KKyNlbmRpZgor CQljaGVja19zaWduYWwoJnIpOworCX0gd2hpbGUgKDApOworCisJLyogUmVwb3J0IHdyb25n IHBhc3NwaHJhc2UgaWYgYXQgbGVhc3Qgb25lIHRyeSBmYWlsZWQgKi8KKwlpZiAoZXBlcm0g JiYgciA9PSAtRVBJUEUpCisJCXIgPSAtRVBFUk07CisKKwlsb2dfc3RkKCJHRUxJIHRyYWNr aW5nOiA3XG4iKTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGludCBhY3Rpb25fb3Blbl9n ZWxpKHZvaWQpCit7CisJc3RydWN0IGNyeXB0X2RldmljZSAqY2QgPSBOVUxMOworCXN0cnVj dCBjcnlwdF9wYXJhbXNfZ2VsaSBwYXJhbXMgPSB7CisJCS5kdW1teSA9IDAsCisJfTsKKwlj b25zdCBjaGFyICphY3RpdmF0ZWRfbmFtZTsKKwl1aW50MzJfdCBhY3RpdmF0ZV9mbGFncyA9 IDA7CisJaW50IHI7CisKKwlhY3RpdmF0ZWRfbmFtZSA9IG9wdF90ZXN0X3Bhc3NwaHJhc2Ug PyBOVUxMIDogYWN0aW9uX2FyZ3ZbMV07CisKKwlsb2dfc3RkKCJHRUxJIHRyYWNraW5nOiA5 XG4iKTsKKwlpZiAoKHIgPSBjcnlwdF9pbml0KCZjZCwgYWN0aW9uX2FyZ3ZbMF0pKSkKKwkJ Z290byBvdXQ7CisKKwlsb2dfc3RkKCJHRUxJIHRyYWNraW5nOiAxMFxuIik7CisJciA9IGdl bGlfbG9hZChjZCwgJnBhcmFtcyk7CisJaWYgKHIgPCAwKQorCQlnb3RvIG91dDsKKworCWxv Z19zdGQoIkdFTEkgdHJhY2tpbmc6IDExXG4iKTsKKwlfc2V0X2FjdGl2YXRpb25fZmxhZ3Mo JmFjdGl2YXRlX2ZsYWdzKTsKKworCWxvZ19zdGQoIkdFTEkgdHJhY2tpbmc6IDEyXG4iKTsK KwlpZiAoYWN0aXZhdGVkX25hbWUpCisJCXIgPSBjcnlwdF9hY3RpdmF0ZV9ieV92b2x1bWVf a2V5KGNkLCBhY3RpdmF0ZWRfbmFtZSwgTlVMTCwgMCwgYWN0aXZhdGVfZmxhZ3MpOworb3V0 OgorCWxvZ19zdGQoIkdFTEkgdHJhY2tpbmc6IDEzXG4iKTsKKwljcnlwdF9mcmVlKGNkKTsK KwlyZXR1cm4gcjsKK30KKworc3RhdGljIGludCBhY3Rpb25fZ2VsaUR1bXAodm9pZCkKK3sK KwlzdHJ1Y3QgY3J5cHRfZGV2aWNlICpjZCA9IE5VTEw7CisJc3RydWN0IGNyeXB0X3BhcmFt c19nZWxpIHBhcmFtcyA9IHsKKwkJLmR1bW15ID0gMCwKKwl9OworCWludCByOworCisJbG9n X3N0ZCgiR0VMSSB0cmFja2luZzogMVxuIik7CisJaWYgKChyID0gY3J5cHRfaW5pdCgmY2Qs IGFjdGlvbl9hcmd2WzBdKSkpCisJCWdvdG8gb3V0OworCisJbG9nX3N0ZCgiR0VMSSB0cmFj a2luZzogMlxuIik7CisJciA9IGdlbGlfbG9hZChjZCwgJnBhcmFtcyk7CisJaWYgKHIgPCAw KQorCQlnb3RvIG91dDsKKworI2lmIDAKKwlpZiAob3B0X2R1bXBfbWFzdGVyX2tleSkKKwkJ ciA9IGdlbGlEdW1wX3dpdGhfdm9sdW1lX2tleShjZCk7CisJZWxzZQorI2VuZGlmCisJbG9n X3N0ZCgiR0VMSSB0cmFja2luZzogM1xuIik7CisJCXIgPSBjcnlwdF9kdW1wKGNkKTsKK291 dDoKKwljcnlwdF9mcmVlKGNkKTsKKwlsb2dfc3RkKCJHRUxJIHRyYWNraW5nOiA0XG4iKTsK KwlyZXR1cm4gcjsKK30KKwogc3RhdGljIGludCBhY3Rpb25fY2xvc2Uodm9pZCkKIHsKIAlz dHJ1Y3QgY3J5cHRfZGV2aWNlICpjZCA9IE5VTEw7CkBAIC0xMjk1LDYgKzEzOTAsNyBAQCBv dXQ6CiAKIHN0YXRpYyBpbnQgYWN0aW9uX29wZW4odm9pZCkKIHsKKwlsb2dfc3RkKCJHRUxJ IHRyYWNraW5nOiAxNFxuIik7CiAJaWYgKCFvcHRfdHlwZSkKIAkJcmV0dXJuIC1FSU5WQUw7 CiAKQEAgLTEzMTQsNiArMTQxMCwxMSBAQCBzdGF0aWMgaW50IGFjdGlvbl9vcGVuKHZvaWQp CiAJCWlmIChhY3Rpb25fYXJnYyA8IDIgJiYgIW9wdF90ZXN0X3Bhc3NwaHJhc2UpCiAJCQln b3RvIGFyZ3M7CiAJCXJldHVybiBhY3Rpb25fb3Blbl90Y3J5cHQoKTsKKwl9IGVsc2UgaWYg KCFzdHJjbXAob3B0X3R5cGUsICJnZWxpIikpIHsKKwkJbG9nX3N0ZCgiR0VMSSB0cmFja2lu ZzogOFxuIik7CisJCWlmIChhY3Rpb25fYXJnYyA8IDIpCisJCQlnb3RvIGFyZ3M7CisJCXJl dHVybiBhY3Rpb25fb3Blbl9nZWxpKCk7CiAJfQogCiAJbG9nX2VycihfKCJVbnJlY29nbml6 ZWQgbWV0YWRhdGEgZGV2aWNlIHR5cGUgJXMuXG4iKSwgb3B0X3R5cGUpOwpAQCAtMTM4OCw2 ICsxNDg5LDcgQEAgc3RhdGljIHN0cnVjdCBhY3Rpb25fdHlwZSB7CiAJeyAiaXNMdWtzIiwg ICAgICAgYWN0aW9uX2lzTHVrcywgICAgICAgMSwgMCwgTl8oIjxkZXZpY2U+IiksIE5fKCJ0 ZXN0cyA8ZGV2aWNlPiBmb3IgTFVLUyBwYXJ0aXRpb24gaGVhZGVyIikgfSwKIAl7ICJsdWtz RHVtcCIsICAgICBhY3Rpb25fbHVrc0R1bXAsICAgICAxLCAxLCBOXygiPGRldmljZT4iKSwg Tl8oImR1bXAgTFVLUyBwYXJ0aXRpb24gaW5mb3JtYXRpb24iKSB9LAogCXsgInRjcnlwdER1 bXAiLCAgIGFjdGlvbl90Y3J5cHREdW1wLCAgIDEsIDEsIE5fKCI8ZGV2aWNlPiIpLCBOXygi ZHVtcCBUQ1JZUFQgZGV2aWNlIGluZm9ybWF0aW9uIikgfSwKKwl7ICJnZWxpRHVtcCIsICAg ICBhY3Rpb25fZ2VsaUR1bXAsICAgICAxLCAxLCBOXygiPGRldmljZT4iKSwgTl8oImR1bXAg R0VMSSBkZXZpY2UgaW5mb3JtYXRpb24iKSB9LAogCXsgImx1a3NTdXNwZW5kIiwgIGFjdGlv bl9sdWtzU3VzcGVuZCwgIDEsIDEsIE5fKCI8ZGV2aWNlPiIpLCBOXygiU3VzcGVuZCBMVUtT IGRldmljZSBhbmQgd2lwZSBrZXkgKGFsbCBJT3MgYXJlIGZyb3plbikuIikgfSwKIAl7ICJs dWtzUmVzdW1lIiwgICBhY3Rpb25fbHVrc1Jlc3VtZSwgICAxLCAxLCBOXygiPGRldmljZT4i KSwgTl8oIlJlc3VtZSBzdXNwZW5kZWQgTFVLUyBkZXZpY2UuIikgfSwKIAl7ICJsdWtzSGVh ZGVyQmFja3VwIiwgYWN0aW9uX2x1a3NCYWNrdXAsMSwxLCBOXygiPGRldmljZT4iKSwgTl8o IkJhY2t1cCBMVUtTIGRldmljZSBoZWFkZXIgYW5kIGtleXNsb3RzIikgfSwKQEAgLTE1MjQs NyArMTYyNiw3IEBAIGludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIAkJ eyAidGNyeXB0LXN5c3RlbSIsICAgICAnXDAnLCBQT1BUX0FSR19OT05FLCAmb3B0X3Rjcnlw dF9zeXN0ZW0sICAgICAgICAgMCwgTl8oIkRldmljZSBpcyBzeXN0ZW0gVENSWVBUIGRyaXZl ICh3aXRoIGJvb3Rsb2FkZXIpLiIpLCBOVUxMIH0sCiAJCXsgInRjcnlwdC1iYWNrdXAiLCAg ICAgJ1wwJywgUE9QVF9BUkdfTk9ORSwgJm9wdF90Y3J5cHRfYmFja3VwLCAgICAgICAgIDAs IE5fKCJVc2UgYmFja3VwIChzZWNvbmRhcnkpIFRDUllQVCBoZWFkZXIuIiksIE5VTEwgfSwK IAkJeyAidmVyYWNyeXB0IiwgICAgICAgICAnXDAnLCBQT1BUX0FSR19OT05FLCAmb3B0X3Zl cmFjcnlwdCwgICAgICAgICAgICAgMCwgTl8oIlNjYW4gYWxzbyBmb3IgVmVyYUNyeXB0IGNv bXBhdGlibGUgZGV2aWNlLiIpLCBOVUxMIH0sCi0JCXsgInR5cGUiLCAgICAgICAgICAgICAg ICdNJywgUE9QVF9BUkdfU1RSSU5HLCAmb3B0X3R5cGUsICAgICAgICAgICAgICAgIDAsIE5f KCJUeXBlIG9mIGRldmljZSBtZXRhZGF0YTogbHVrcywgcGxhaW4sIGxvb3BhZXMsIHRjcnlw dC4iKSwgTlVMTCB9LAorCQl7ICJ0eXBlIiwgICAgICAgICAgICAgICAnTScsIFBPUFRfQVJH X1NUUklORywgJm9wdF90eXBlLCAgICAgICAgICAgICAgICAwLCBOXygiVHlwZSBvZiBkZXZp Y2UgbWV0YWRhdGE6IGx1a3MsIHBsYWluLCBsb29wYWVzLCB0Y3J5cHQsIGdlbGkuIiksIE5V TEwgfSwKIAkJeyAiZm9yY2UtcGFzc3dvcmQiLCAgICAnXDAnLCBQT1BUX0FSR19OT05FLCAm b3B0X2ZvcmNlX3Bhc3N3b3JkLCAgICAgICAgMCwgTl8oIkRpc2FibGUgcGFzc3dvcmQgcXVh bGl0eSBjaGVjayAoaWYgZW5hYmxlZCkuIiksIE5VTEwgfSwKIAkJeyAicGVyZi1zYW1lX2Nw dV9jcnlwdCIsJ1wwJywgUE9QVF9BUkdfTk9ORSwgJm9wdF9wZXJmX3NhbWVfY3B1X2NyeXB0 LCAgMCwgTl8oIlVzZSBkbS1jcnlwdCBzYW1lX2NwdV9jcnlwdCBwZXJmb3JtYW5jZSBjb21w YXRpYmlsaXR5IG9wdGlvbi4iKSwgTlVMTCB9LAogCQl7ICJwZXJmLXN1Ym1pdF9mcm9tX2Ny eXB0X2NwdXMiLCdcMCcsIFBPUFRfQVJHX05PTkUsICZvcHRfcGVyZl9zdWJtaXRfZnJvbV9j cnlwdF9jcHVzLDAsTl8oIlVzZSBkbS1jcnlwdCBzdWJtaXRfZnJvbV9jcnlwdF9jcHVzIHBl cmZvcm1hbmNlIGNvbXBhdGliaWxpdHkgb3B0aW9uLiIpLCBOVUxMIH0sCkBAIC0xNjMxLDYg KzE3MzMsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiAJCW9w dF90eXBlID0gInRjcnlwdCI7CiAJfSBlbHNlIGlmICghc3RyY21wKGFuYW1lLCAidGNyeXB0 RHVtcCIpKSB7CiAJCW9wdF90eXBlID0gInRjcnlwdCI7CisJfSBlbHNlIGlmICghc3RyY21w KGFuYW1lLCAiZ2VsaUR1bXAiKSkgeworCQlvcHRfdHlwZSA9ICJnZWxpIjsKIAl9IGVsc2Ug aWYgKCFzdHJjbXAoYW5hbWUsICJyZW1vdmUiKSB8fAogCQkgICAhc3RyY21wKGFuYW1lLCAi cGxhaW5DbG9zZSIpIHx8CiAJCSAgICFzdHJjbXAoYW5hbWUsICJsdWtzQ2xvc2UiKSB8fAot LSAKMS45LjEKCg== --------------894632D45E23B5EF56047DCB Content-Type: text/plain; charset=UTF-8; name="0001-Initial-version-of-cryptsetup-with-GELI-support.patch.03" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="0001-Initial-version-of-cryptsetup-with-GELI-support.patch.0"; filename*1="3" RnJvbSBlYWEyM2FkNDE4ZTg5OGVkOWEzOTUyMTFlNTdlMmQxZDJjYjU5OGRhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBDYXJsLURhbmllbCBIYWlsZmluZ2VyIDxjLWQuaGFp bGZpbmdlci5kZXZlbC4yMDA2QGdteC5uZXQ+CkRhdGU6IEZyaSwgMzAgRGVjIDIwMTYgMDU6 NDA6NDQgKzAxMDAKU3ViamVjdDogW1BBVENIXSBJbml0aWFsIHZlcnNpb24gb2YgY3J5cHRz ZXR1cCB3aXRoIEdFTEkgc3VwcG9ydC4gT25seSBkdW1waW5nCiBpcyBzdXBwb3J0ZWQgcmln aHQgbm93LgoKLS0tCiBjb25maWd1cmUuYWMgICAgICAgICB8ICAgIDEgKwogbGliL01ha2Vm aWxlLmFtICAgICAgfCAgICA2ICstCiBsaWIvZ2VsaS9NYWtlZmlsZS5hbSB8ICAgMTQgKwog bGliL2dlbGkvUkVBRE1FLnR4dCAgfCAgICA0ICsKIGxpYi9nZWxpL2dlbGkuYyAgICAgIHwg MTA5NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KwogbGliL2dlbGkvZ2VsaS5oICAgICAgfCAgMTAyICsrKysrCiBsaWIvbGliY3J5cHRzZXR1 cC5oICB8ICAgMTMgKwogbGliL3NldHVwLmMgICAgICAgICAgfCAgIDY3ICsrKwogc3JjL2Ny eXB0c2V0dXAuYyAgICAgfCAgMTA2ICsrKystCiA5IGZpbGVzIGNoYW5nZWQsIDE0MDcgaW5z ZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvZ2Vs aS9NYWtlZmlsZS5hbQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9nZWxpL1JFQURNRS50eHQK IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvZ2VsaS9nZWxpLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBsaWIvZ2VsaS9nZWxpLmgKCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1 cmUuYWMKaW5kZXggZDFmMDI5YS4uMWM0NmE3ZCAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFj CisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtNDY3LDYgKzQ2Nyw3IEBAIGxpYi9sdWtzMS9NYWtl ZmlsZQogbGliL2xvb3BhZXMvTWFrZWZpbGUKIGxpYi92ZXJpdHkvTWFrZWZpbGUKIGxpYi90 Y3J5cHQvTWFrZWZpbGUKK2xpYi9nZWxpL01ha2VmaWxlCiBzcmMvTWFrZWZpbGUKIHBvL01h a2VmaWxlLmluCiBtYW4vTWFrZWZpbGUKZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS5hbSBi L2xpYi9NYWtlZmlsZS5hbQppbmRleCA2NjYyNTY4Li41Yjk5YTdjIDEwMDY0NAotLS0gYS9s aWIvTWFrZWZpbGUuYW0KKysrIGIvbGliL01ha2VmaWxlLmFtCkBAIC0xLDQgKzEsNCBAQAot U1VCRElSUyA9IGNyeXB0b19iYWNrZW5kIGx1a3MxIGxvb3BhZXMgdmVyaXR5IHRjcnlwdAor U1VCRElSUyA9IGNyeXB0b19iYWNrZW5kIGx1a3MxIGxvb3BhZXMgdmVyaXR5IHRjcnlwdCBn ZWxpCiAKIG1vZHVsZWRpciA9ICQobGliZGlyKS9jcnlwdHNldHVwCiAKQEAgLTEyLDYgKzEy LDcgQEAgQU1fQ1BQRkxBR1MgPSAtaW5jbHVkZSBjb25maWcuaCBcCiAJLUkkKHRvcF9zcmNk aXIpL2xpYi9sb29wYWVzCQlcCiAJLUkkKHRvcF9zcmNkaXIpL2xpYi92ZXJpdHkJCVwKIAkt SSQodG9wX3NyY2RpcikvbGliL3RjcnlwdAkJXAorCS1JJCh0b3Bfc3JjZGlyKS9saWIvZ2Vs aQkJXAogCS1EREFUQURJUj1cIiIkKGRhdGFkaXIpIlwiCQlcCiAJLURMSUJESVI9XCIiJChs aWJkaXIpIlwiCQlcCiAJLURQUkVGSVg9XCIiJChwcmVmaXgpIlwiCQlcCkBAIC0yNSw3ICsy Niw4IEBAIGNvbW1vbl9sZGFkZCA9IFwKIAlsdWtzMS9saWJsdWtzMS5sYQkJCVwKIAlsb29w YWVzL2xpYmxvb3BhZXMubGEJCQlcCiAJdmVyaXR5L2xpYnZlcml0eS5sYQkJCVwKLQl0Y3J5 cHQvbGlidGNyeXB0LmxhCisJdGNyeXB0L2xpYnRjcnlwdC5sYQkJCVwKKwlnZWxpL2xpYmdl bGkubGEKIAogbGliY3J5cHRzZXR1cF9sYV9ERVBFTkRFTkNJRVMgPSAkKGNvbW1vbl9sZGFk ZCkgbGliY3J5cHRzZXR1cC5zeW0KIApkaWZmIC0tZ2l0IGEvbGliL2dlbGkvTWFrZWZpbGUu YW0gYi9saWIvZ2VsaS9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi45NmFlZjRlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2dlbGkvTWFrZWZpbGUu YW0KQEAgLTAsMCArMSwxNCBAQAorbW9kdWxlZGlyID0gJChsaWJkaXIpL2NyeXB0c2V0dXAK Kworbm9pbnN0X0xUTElCUkFSSUVTID0gbGliZ2VsaS5sYQorCitsaWJnZWxpX2xhX0NGTEFH UyA9IC1XYWxsICQoQU1fQ0ZMQUdTKSBAQ1JZUFRPX0NGTEFHU0AKKworbGliZ2VsaV9sYV9T T1VSQ0VTID0gXAorCWdlbGkuYyBcCisJZ2VsaS5oCisKK0FNX0NQUEZMQUdTID0gLWluY2x1 ZGUgY29uZmlnLmggXAorICAgICAgICAtSSQodG9wX3NyY2RpcikvbGliCQkJXAorICAgICAg ICAtSSQodG9wX3NyY2RpcikvbGliL2NyeXB0b19iYWNrZW5kCisKZGlmZiAtLWdpdCBhL2xp Yi9nZWxpL1JFQURNRS50eHQgYi9saWIvZ2VsaS9SRUFETUUudHh0Cm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MjA3NWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIv Z2VsaS9SRUFETUUudHh0CkBAIC0wLDAgKzEsNCBAQAorVGhlIHVzZXIga2V5IGlzIGRlcml2 ZWQgZnJvbSB0aGUga2V5ZmlsZSBhcyBmb2xsb3dzOgorb3BlbnNzbCBkZ3N0IC1zaGE1MTIg LW1hYyBobWFjIC1tYWNvcHQgaGV4a2V5OjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAgdXNlci5rZXkKKworVXNlIEFFUy1YVFMtMTI4CmRpZmYgLS1naXQgYS9s aWIvZ2VsaS9nZWxpLmMgYi9saWIvZ2VsaS9nZWxpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uMWYxMjg5ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nZWxpL2dl bGkuYwpAQCAtMCwwICsxLDEwOTcgQEAKKy8qCisgKiBUQ1JZUFQgKFRydWVDcnlwdC1jb21w YXRpYmxlKSBhbmQgVmVyYUNyeXB0IHZvbHVtZSBoYW5kbGluZworICoKKyAqIENvcHlyaWdo dCAoQykgMjAxMiwgUmVkIEhhdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w eXJpZ2h0IChDKSAyMDEyLTIwMTUsIE1pbGFuIEJyb3oKKyAqCisgKiBUaGlzIGZpbGUgaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgZmlsZSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcg d2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv c3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+Cisj aW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJp bmcuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaW5j bHVkZSAibGliY3J5cHRzZXR1cC5oIgorI2luY2x1ZGUgImdlbGkuaCIKKyNpbmNsdWRlICJp bnRlcm5hbC5oIgorCisjaWYgMAorLyogVENSWVBUIFBCS0RGIHZhcmlhbnRzICovCitzdGF0 aWMgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgbGVnYWN5OjE7CisJdW5zaWduZWQgaW50IHZl cmFjcnlwdDoxOworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqaGFzaDsKKwl1 bnNpZ25lZCBpbnQgaXRlcmF0aW9uczsKK30gdGNyeXB0X2tkZltdID0geworCXsgMCwgMCwg InBia2RmMiIsICJyaXBlbWQxNjAiLCAyMDAwIH0sCisJeyAwLCAwLCAicGJrZGYyIiwgInJp cGVtZDE2MCIsIDEwMDAgfSwKKwl7IDAsIDAsICJwYmtkZjIiLCAic2hhNTEyIiwgICAgMTAw MCB9LAorCXsgMCwgMCwgInBia2RmMiIsICJ3aGlybHBvb2wiLCAxMDAwIH0sCisJeyAxLCAw LCAicGJrZGYyIiwgInNoYTEiLCAgICAgIDIwMDAgfSwKKwl7IDAsIDEsICJwYmtkZjIiLCAi c2hhNTEyIiwgICAgNTAwMDAwIH0sCisJeyAwLCAxLCAicGJrZGYyIiwgInJpcGVtZDE2MCIs IDY1NTMzMSB9LAorCXsgMCwgMSwgInBia2RmMiIsICJyaXBlbWQxNjAiLCAzMjc2NjEgfSwg Ly8gYm9vdCBvbmx5CisJeyAwLCAxLCAicGJrZGYyIiwgIndoaXJscG9vbCIsIDUwMDAwMCB9 LAorCXsgMCwgMSwgInBia2RmMiIsICJzaGEyNTYiLCAgICA1MDAwMDAgfSwgLy8gVmVyYUNy eXB0IDEuMGYKKwl7IDAsIDEsICJwYmtkZjIiLCAic2hhMjU2IiwgICAgMjAwMDAwIH0sIC8v IGJvb3Qgb25seQorCXsgMCwgMCwgTlVMTCwgICAgIE5VTEwsICAgICAgICAwIH0KK307CisK K3N0cnVjdCB0Y3J5cHRfYWxnIHsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJdW5zaWduZWQg aW50IGtleV9zaXplOworCQl1bnNpZ25lZCBpbnQgaXZfc2l6ZTsKKwkJdW5zaWduZWQgaW50 IGtleV9vZmZzZXQ7CisJCXVuc2lnbmVkIGludCBpdl9vZmZzZXQ7IC8qIG9yIHR3ZWFrIGtl eSBvZmZzZXQgKi8KKwkJdW5zaWduZWQgaW50IGtleV9leHRyYV9zaXplOworfTsKKworc3Ry dWN0IHRjcnlwdF9hbGdzIHsKKwl1bnNpZ25lZCBpbnQgbGVnYWN5OjE7CisJdW5zaWduZWQg aW50IGNoYWluX2NvdW50OworCXVuc2lnbmVkIGludCBjaGFpbl9rZXlfc2l6ZTsKKwljb25z dCBjaGFyICpsb25nX25hbWU7CisJY29uc3QgY2hhciAqbW9kZTsKKwlzdHJ1Y3QgdGNyeXB0 X2FsZyBjaXBoZXJbM107Cit9OworCisvKiBUQ1JZUFQgY2lwaGVyIHZhcmlhbnRzICovCitz dGF0aWMgc3RydWN0IHRjcnlwdF9hbGdzIHRjcnlwdF9jaXBoZXJbXSA9IHsKKy8qIFhUUyBt b2RlICovCit7MCwxLDY0LCJhZXMiLCJ4dHMtcGxhaW42NCIsCisJe3siYWVzIiwgICAgNjQs MTYsMCwzMiwwfX19LAorezAsMSw2NCwic2VycGVudCIsInh0cy1wbGFpbjY0IiwKKwl7eyJz ZXJwZW50Iiw2NCwxNiwwLDMyLDB9fX0sCit7MCwxLDY0LCJ0d29maXNoIiwieHRzLXBsYWlu NjQiLAorCXt7InR3b2Zpc2giLDY0LDE2LDAsMzIsMH19fSwKK3swLDIsMTI4LCJ0d29maXNo LWFlcyIsInh0cy1wbGFpbjY0IiwKKwl7eyJ0d29maXNoIiw2NCwxNiwgMCw2NCwwfSwKKwkg eyJhZXMiLCAgICA2NCwxNiwzMiw5NiwwfX19LAorezAsMywxOTIsInNlcnBlbnQtdHdvZmlz aC1hZXMiLCJ4dHMtcGxhaW42NCIsCisJe3sic2VycGVudCIsNjQsMTYsIDAsIDk2LDB9LAor CSB7InR3b2Zpc2giLDY0LDE2LDMyLDEyOCwwfSwKKwkgeyJhZXMiLCAgICA2NCwxNiw2NCwx NjAsMH19fSwKK3swLDIsMTI4LCJhZXMtc2VycGVudCIsInh0cy1wbGFpbjY0IiwKKwl7eyJh ZXMiLCAgICA2NCwxNiwgMCw2NCwwfSwKKwkgeyJzZXJwZW50Iiw2NCwxNiwzMiw5NiwwfX19 LAorezAsMywxOTIsImFlcy10d29maXNoLXNlcnBlbnQiLCJ4dHMtcGxhaW42NCIsCisJe3si YWVzIiwgICAgNjQsMTYsIDAsIDk2LDB9LAorCSB7InR3b2Zpc2giLDY0LDE2LDMyLDEyOCww fSwKKwkgeyJzZXJwZW50Iiw2NCwxNiw2NCwxNjAsMH19fSwKK3swLDIsMTI4LCJzZXJwZW50 LXR3b2Zpc2giLCJ4dHMtcGxhaW42NCIsCisJe3sic2VycGVudCIsNjQsMTYsIDAsNjQsMH0s CisJIHsidHdvZmlzaCIsNjQsMTYsMzIsOTYsMH19fSwKKworLyogTFJXIG1vZGUgKi8KK3sw LDEsNDgsImFlcyIsImxydy1iZW5iaSIsCisJe3siYWVzIiwgICAgNDgsMTYsMzIsMCwwfX19 LAorezAsMSw0OCwic2VycGVudCIsImxydy1iZW5iaSIsCisJe3sic2VycGVudCIsNDgsMTYs MzIsMCwwfX19LAorezAsMSw0OCwidHdvZmlzaCIsImxydy1iZW5iaSIsCisJe3sidHdvZmlz aCIsNDgsMTYsMzIsMCwwfX19LAorezAsMiw5NiwidHdvZmlzaC1hZXMiLCJscnctYmVuYmki LAorCXt7InR3b2Zpc2giLDQ4LDE2LDMyLDAsMH0sCisJIHsiYWVzIiwgICAgNDgsMTYsNjQs MCwwfX19LAorezAsMywxNDQsInNlcnBlbnQtdHdvZmlzaC1hZXMiLCJscnctYmVuYmkiLAor CXt7InNlcnBlbnQiLDQ4LDE2LDMyLDAsMH0sCisJIHsidHdvZmlzaCIsNDgsMTYsNjQsMCww fSwKKwkgeyJhZXMiLCAgICA0OCwxNiw5NiwwLDB9fX0sCit7MCwyLDk2LCJhZXMtc2VycGVu dCIsImxydy1iZW5iaSIsCisJe3siYWVzIiwgICAgNDgsMTYsMzIsMCwwfSwKKwkgeyJzZXJw ZW50Iiw0OCwxNiw2NCwwLDB9fX0sCit7MCwzLDE0NCwiYWVzLXR3b2Zpc2gtc2VycGVudCIs Imxydy1iZW5iaSIsCisJe3siYWVzIiwgICAgNDgsMTYsMzIsMCwwfSwKKwkgeyJ0d29maXNo Iiw0OCwxNiw2NCwwLDB9LAorCSB7InNlcnBlbnQiLDQ4LDE2LDk2LDAsMH19fSwKK3swLDIs OTYsInNlcnBlbnQtdHdvZmlzaCIsICJscnctYmVuYmkiLAorCXt7InNlcnBlbnQiLDQ4LDE2 LDMyLDAsMH0sCisJIHsidHdvZmlzaCIsNDgsMTYsNjQsMCwwfX19LAorCisvKiBLZXJuZWwg TFJXIGJsb2NrIHNpemUgaXMgZml4ZWQgdG8gMTYgYnl0ZXMgZm9yIEdGKDJeMTI4KQorICog dGh1cyBjYW5ub3QgYmUgdXNlZCB3aXRoIGJsb3dmaXNoIHdoZXJlIGJsb2NrIGlzIDggYnl0 ZXMuCisgKiBUaGVyZSBhbHNvIG5vIEdGKDJeNjQpIHN1cHBvcnQuCit7MSwxLDY0LCJibG93 ZmlzaF9sZSIsImxydy1iZW5iaSIsCisJIHt7ImJsb3dmaXNoX2xlIiw2NCw4LDMyLDAsMH19 fSwKK3sxLDIsMTEyLCJibG93ZmlzaF9sZS1hZXMiLCJscnctYmVuYmkiLAorCSB7eyJibG93 ZmlzaF9sZSIsNjQsIDgsMzIsMCwwfSwKKwkgIHsiYWVzIiwgICAgICAgIDQ4LDE2LDg4LDAs MH19fSwKK3sxLDMsMTYwLCJzZXJwZW50LWJsb3dmaXNoX2xlLWFlcyIsImxydy1iZW5iaSIs CisJICB7eyJzZXJwZW50IiwgICAgNDgsMTYsIDMyLDAsMH0sCisJICAgeyJibG93ZmlzaF9s ZSIsNjQsIDgsIDY0LDAsMH0sCisJICAgeyJhZXMiLCAgICAgICAgNDgsMTYsMTIwLDAsMH19 fSwqLworCisvKgorICogQ0JDICsgIm91dGVyIiBDQkMgKGJvdGggd2l0aCB3aGl0ZW5pbmcp CisgKiBjaGFpbl9rZXlfc2l6ZTogYWxnX2tleXNfYnl0ZXMgKyBJVl9zZWVkX2J5dGVzICsg d2hpdGVuaW5nX2J5dGVzCisgKi8KK3sxLDEsMzIrMTYrMTYsImFlcyIsImNiYy10Y3ciLAor CXt7ImFlcyIsICAgIDMyLDE2LDMyLDAsMzJ9fX0sCit7MSwxLDMyKzE2KzE2LCJzZXJwZW50 IiwiY2JjLXRjdyIsCisJe3sic2VycGVudCIsMzIsMTYsMzIsMCwzMn19fSwKK3sxLDEsMzIr MTYrMTYsInR3b2Zpc2giLCJjYmMtdGN3IiwKKwl7eyJ0d29maXNoIiwzMiwxNiwzMiwwLDMy fX19LAorezEsMiw2NCsxNisxNiwidHdvZmlzaC1hZXMiLCJjYmNpLXRjcnlwdCIsCisJe3si dHdvZmlzaCIsMzIsMTYsMzIsMCwwfSwKKwkgeyJhZXMiLCAgICAzMiwxNiw2NCwwLDMyfX19 LAorezEsMyw5NisxNisxNiwic2VycGVudC10d29maXNoLWFlcyIsImNiY2ktdGNyeXB0IiwK Kwl7eyJzZXJwZW50IiwzMiwxNiwzMiwwLDB9LAorCSB7InR3b2Zpc2giLDMyLDE2LDY0LDAs MH0sCisJIHsiYWVzIiwgICAgMzIsMTYsOTYsMCwzMn19fSwKK3sxLDIsNjQrMTYrMTYsImFl cy1zZXJwZW50IiwiY2JjaS10Y3J5cHQiLAorCXt7ImFlcyIsICAgIDMyLDE2LDMyLDAsMH0s CisJIHsic2VycGVudCIsMzIsMTYsNjQsMCwzMn19fSwKK3sxLDMsOTYrMTYrMTYsImFlcy10 d29maXNoLXNlcnBlbnQiLCAiY2JjaS10Y3J5cHQiLAorCXt7ImFlcyIsICAgIDMyLDE2LDMy LDAsMH0sCisJIHsidHdvZmlzaCIsMzIsMTYsNjQsMCwwfSwKKwkgeyJzZXJwZW50IiwzMiwx Niw5NiwwLDMyfX19LAorezEsMiw2NCsxNisxNiwic2VycGVudC10d29maXNoIiwgImNiY2kt dGNyeXB0IiwKKwl7eyJzZXJwZW50IiwzMiwxNiwzMiwwLDB9LAorCSB7InR3b2Zpc2giLDMy LDE2LDY0LDAsMzJ9fX0sCit7MSwxLDE2KzgrMTYsImNhc3Q1IiwiY2JjLXRjdyIsCisJe3si Y2FzdDUiLCAgIDE2LDgsMzIsMCwyNH19fSwKK3sxLDEsMjQrOCsxNiwiZGVzM19lZGUiLCJj YmMtdGN3IiwKKwl7eyJkZXMzX2VkZSIsMjQsOCwzMiwwLDI0fX19LAorezEsMSw1Nis4KzE2 LCJibG93ZmlzaF9sZSIsImNiYy10Y3J5cHQiLAorCXt7ImJsb3dmaXNoX2xlIiw1Niw4LDMy LDAsMjR9fX0sCit7MSwyLDg4KzE2KzE2LCJibG93ZmlzaF9sZS1hZXMiLCJjYmMtdGNyeXB0 IiwKKwl7eyJibG93ZmlzaF9sZSIsNTYsIDgsMzIsMCwwfSwKKwkgeyJhZXMiLCAgICAgICAg MzIsMTYsODgsMCwzMn19fSwKK3sxLDMsMTIwKzE2KzE2LCJzZXJwZW50LWJsb3dmaXNoX2xl LWFlcyIsImNiYy10Y3J5cHQiLAorCXt7InNlcnBlbnQiLCAgICAzMiwxNiwgMzIsMCwwfSwK KwkgeyJibG93ZmlzaF9sZSIsNTYsIDgsIDY0LDAsMH0sCisJIHsiYWVzIiwgICAgICAgIDMy LDE2LDEyMCwwLDMyfX19LAore30KK307CisjZW5kaWYKKworc3RhdGljIGludCBHRUxJX2hk cl9mcm9tX2Rpc2soc3RydWN0IGdlbGlfcGhkciAqaGRyLAorCQkJCXN0cnVjdCBjcnlwdF9w YXJhbXNfZ2VsaSAqcGFyYW1zLAorCQkJCWludCBjaXBoZXJfaW5kZXgpCit7CisJc3RydWN0 IGNyeXB0X2hhc2ggKmhkID0gTlVMTDsKKwljaGFyIGNhbGN1bGF0ZWRfbWQ1W01ENV9NRExF Tl07CisJaW50IHI7CisKKwlsb2dfZGJnKCJHRUxJIHRyYWNraW5nOiAxMDBcbiIpOworCS8q IENoZWNrIHNhbml0eSBvZiBoZWFkZXIgKi8KKwlpZiAoc3RyY21wKEdfRUxJX01BR0lDLCBo ZHItPm1kX21hZ2ljKSkgeworCQlsb2dfZGJnKCJNaXNzaW5nIEdFTEkgbWFnaWMuXG4iKTsK KwkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJbG9nX2RiZygiQ29ycmVjdCBHRUxJ IG1hZ2ljLlxuIik7CisJfQorCisJLyogQ2hlY2sgTUQ1IG9mIGhlYWRlciAqLworCWNyeXB0 X21lbXplcm8oY2FsY3VsYXRlZF9tZDUsIE1ENV9NRExFTik7CisJaWYgKGNyeXB0X2hhc2hf aW5pdCgmaGQsICJtZDUiKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyID0gY3J5cHRfaGFz aF93cml0ZShoZCwgaGRyLT5ieXRlYXJyYXksIG9mZnNldG9mKHN0cnVjdCBnZWxpX3BoZHIs IG1kX2hhc2gpKTsKKwlpZiAoIXIpCisJCXIgPSBjcnlwdF9oYXNoX2ZpbmFsKGhkLCBjYWxj dWxhdGVkX21kNSwgTUQ1X01ETEVOKTsKKworCWNyeXB0X2hhc2hfZGVzdHJveShoZCk7CisJ aWYgKHIpCisJCXJldHVybiByOworCisJaWYgKG1lbWNtcChjYWxjdWxhdGVkX21kNSwgaGRy LT5tZF9oYXNoLCBzaXplb2YoY2FsY3VsYXRlZF9tZDUpKSkgeworCQlsb2dfZGJnKCJHRUxJ IGhlYWRlciBNRDUgbWlzbWF0Y2guIik7CisJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSB7 CisJCWxvZ19kYmcoIkNvcnJlY3QgR0VMSSBoZWFkZXIgTUQ1LlxuIik7CisJfQorCisJLyog Q29udmVydCBoZWFkZXIgdG8gY3B1IGZvcm1hdCAqLworCWhkci0+bWRfdmVyc2lvbiAgICA9 IGxlMzJfdG9fY3B1KGhkci0+bWRfdmVyc2lvbik7CisJaGRyLT5tZF9mbGFncyAgICAgID0g bGUzMl90b19jcHUoaGRyLT5tZF9mbGFncyk7CisJaGRyLT5tZF9lYWxnbyAgICAgID0gbGUx Nl90b19jcHUoaGRyLT5tZF9lYWxnbyk7CisJaGRyLT5tZF9rZXlsZW4gICAgID0gbGUxNl90 b19jcHUoaGRyLT5tZF9rZXlsZW4pOworCWhkci0+bWRfYWFsZ28gICAgICA9IGxlMTZfdG9f Y3B1KGhkci0+bWRfYWFsZ28pOworCWhkci0+bWRfcHJvdnNpemUgICA9IGxlNjRfdG9fY3B1 KGhkci0+bWRfcHJvdnNpemUpOworCWhkci0+bWRfc2VjdG9yc2l6ZSA9IGxlMzJfdG9fY3B1 KGhkci0+bWRfc2VjdG9yc2l6ZSk7CisJLy8gbWRfa2V5cyBpcyA4IGJpdCwgbm8gY29udmVy c2lvbiBuZWVkZWQKKwloZHItPm1kX2l0ZXJhdGlvbnMgPSBsZTMyX3RvX2NwdShoZHItPm1k X2l0ZXJhdGlvbnMpOworCisJLyogU2V0IHBhcmFtcyAqLworCisJcmV0dXJuIDA7Cit9CisK KyNpZiAwCisvKgorICogS2VybmVsIGltcGxlbWVudHMganVzdCBiaWctZW5kaWFuIHZlcnNp b24gb2YgYmxvd2Zpc2gsIGhhY2sgaXQgaGVyZQorICovCitzdGF0aWMgdm9pZCBUQ1JZUFRf c3dhYl9sZShjaGFyICpidWYpCit7CisJdWludDMyX3QgKmwgPSAodWludDMyX3QqKSZidWZb MF07CisJdWludDMyX3QgKnIgPSAodWludDMyX3QqKSZidWZbNF07CisJKmwgPSBzd2FiMzIo KmwpOworCSpyID0gc3dhYjMyKCpyKTsKK30KKworc3RhdGljIGludCBkZWNyeXB0X2Jsb3dm aXNoX2xlX2NiYyhzdHJ1Y3QgdGNyeXB0X2FsZyAqYWxnLAorCQkJCSAgIGNvbnN0IGNoYXIg KmtleSwgY2hhciAqYnVmKQoreworCWludCBicyA9IGFsZy0+aXZfc2l6ZTsKKwljaGFyIGl2 W2JzXSwgaXZfb2xkW2JzXTsKKwlzdHJ1Y3QgY3J5cHRfY2lwaGVyICpjaXBoZXIgPSBOVUxM OworCWludCBpLCBqLCByOworCisJYXNzZXJ0KGJzID09IDIqc2l6ZW9mKHVpbnQzMl90KSk7 CisKKwlyID0gY3J5cHRfY2lwaGVyX2luaXQoJmNpcGhlciwgImJsb3dmaXNoIiwgImVjYiIs CisJCQkgICAgICAma2V5W2FsZy0+a2V5X29mZnNldF0sIGFsZy0+a2V5X3NpemUpOworCWlm IChyIDwgMCkKKwkJcmV0dXJuIHI7CisKKwltZW1jcHkoaXYsICZrZXlbYWxnLT5pdl9vZmZz ZXRdLCBhbGctPml2X3NpemUpOworCWZvciAoaSA9IDA7IGkgPCBUQ1JZUFRfSERSX0xFTjsg aSArPSBicykgeworCQltZW1jcHkoaXZfb2xkLCAmYnVmW2ldLCBicyk7CisJCVRDUllQVF9z d2FiX2xlKCZidWZbaV0pOworCQlyID0gY3J5cHRfY2lwaGVyX2RlY3J5cHQoY2lwaGVyLCAm YnVmW2ldLCAmYnVmW2ldLAorCQkJCQkgIGJzLCBOVUxMLCAwKTsKKwkJVENSWVBUX3N3YWJf bGUoJmJ1ZltpXSk7CisJCWlmIChyIDwgMCkKKwkJCWJyZWFrOworCQlmb3IgKGogPSAwOyBq IDwgYnM7IGorKykKKwkJCWJ1ZltpICsgal0gXj0gaXZbal07CisJCW1lbWNweShpdiwgaXZf b2xkLCBicyk7CisJfQorCisJY3J5cHRfY2lwaGVyX2Rlc3Ryb3koY2lwaGVyKTsKKwljcnlw dF9tZW16ZXJvKGl2LCBicyk7CisJY3J5cHRfbWVtemVybyhpdl9vbGQsIGJzKTsKKwlyZXR1 cm4gcjsKK30KKworc3RhdGljIHZvaWQgVENSWVBUX3JlbW92ZV93aGl0ZW5pbmcoY2hhciAq YnVmLCBjb25zdCBjaGFyICprZXkpCit7CisJaW50IGo7CisKKwlmb3IgKGogPSAwOyBqIDwg VENSWVBUX0hEUl9MRU47IGorKykKKwkJYnVmW2pdIF49IGtleVtqICUgOF07Cit9CisKK3N0 YXRpYyB2b2lkIFRDUllQVF9jb3B5X2tleShzdHJ1Y3QgdGNyeXB0X2FsZyAqYWxnLCBjb25z dCBjaGFyICptb2RlLAorCQkJICAgICBjaGFyICpvdXRfa2V5LCBjb25zdCBjaGFyICprZXkp Cit7CisJaW50IGtzMjsKKwlpZiAoIXN0cm5jbXAobW9kZSwgInh0cyIsIDMpKSB7CisJCWtz MiA9IGFsZy0+a2V5X3NpemUgLyAyOworCQltZW1jcHkob3V0X2tleSwgJmtleVthbGctPmtl eV9vZmZzZXRdLCBrczIpOworCQltZW1jcHkoJm91dF9rZXlba3MyXSwgJmtleVthbGctPml2 X29mZnNldF0sIGtzMik7CisJfSBlbHNlIGlmICghc3RybmNtcChtb2RlLCAibHJ3IiwgMykp IHsKKwkJa3MyID0gYWxnLT5rZXlfc2l6ZSAtIFRDUllQVF9MUldfSUtFWV9MRU47CisJCW1l bWNweShvdXRfa2V5LCAma2V5W2FsZy0+a2V5X29mZnNldF0sIGtzMik7CisJCW1lbWNweSgm b3V0X2tleVtrczJdLCBrZXksIFRDUllQVF9MUldfSUtFWV9MRU4pOworCX0gZWxzZSBpZiAo IXN0cm5jbXAobW9kZSwgImNiYyIsIDMpKSB7CisJCW1lbWNweShvdXRfa2V5LCAma2V5W2Fs Zy0+a2V5X29mZnNldF0sIGFsZy0+a2V5X3NpemUpOworCQkvKiBJViArIHdoaXRlbmluZyAq LworCQltZW1jcHkoJm91dF9rZXlbYWxnLT5rZXlfc2l6ZV0sICZrZXlbYWxnLT5pdl9vZmZz ZXRdLAorCQkgICAgICAgYWxnLT5rZXlfZXh0cmFfc2l6ZSk7CisJfQorfQorCitzdGF0aWMg aW50IFRDUllQVF9kZWNyeXB0X2hkcl9vbmUoc3RydWN0IHRjcnlwdF9hbGcgKmFsZywgY29u c3QgY2hhciAqbW9kZSwKKwkJCQkgICBjb25zdCBjaGFyICprZXksc3RydWN0IHRjcnlwdF9w aGRyICpoZHIpCit7CisJY2hhciBiYWNrZW5kX2tleVtUQ1JZUFRfSERSX0tFWV9MRU5dOwor CWNoYXIgaXZbVENSWVBUX0hEUl9JVl9MRU5dID0ge307CisJY2hhciBtb2RlX25hbWVbTUFY X0NJUEhFUl9MRU4gKyAxXTsKKwlzdHJ1Y3QgY3J5cHRfY2lwaGVyICpjaXBoZXI7CisJY2hh ciAqYywgKmJ1ZiA9IChjaGFyKikmaGRyLT5lOworCWludCByOworCisJLyogUmVtb3ZlIElW IGlmIHByZXNlbnQgKi8KKwltb2RlX25hbWVbTUFYX0NJUEhFUl9MRU5dID0gJ1wwJzsKKwlz dHJuY3B5KG1vZGVfbmFtZSwgbW9kZSwgTUFYX0NJUEhFUl9MRU4pOworCWMgPSBzdHJjaHIo bW9kZV9uYW1lLCAnLScpOworCWlmIChjKQorCQkqYyA9ICdcMCc7CisKKwlpZiAoIXN0cm5j bXAobW9kZSwgImxydyIsIDMpKQorCQlpdlthbGctPml2X3NpemUgLSAxXSA9IDE7CisJZWxz ZSBpZiAoIXN0cm5jbXAobW9kZSwgImNiYyIsIDMpKSB7CisJCVRDUllQVF9yZW1vdmVfd2hp dGVuaW5nKGJ1ZiwgJmtleVs4XSk7CisJCWlmICghc3RyY21wKGFsZy0+bmFtZSwgImJsb3dm aXNoX2xlIikpCisJCQlyZXR1cm4gZGVjcnlwdF9ibG93ZmlzaF9sZV9jYmMoYWxnLCBrZXks IGJ1Zik7CisJCW1lbWNweShpdiwgJmtleVthbGctPml2X29mZnNldF0sIGFsZy0+aXZfc2l6 ZSk7CisJfQorCisJVENSWVBUX2NvcHlfa2V5KGFsZywgbW9kZSwgYmFja2VuZF9rZXksIGtl eSk7CisJciA9IGNyeXB0X2NpcGhlcl9pbml0KCZjaXBoZXIsIGFsZy0+bmFtZSwgbW9kZV9u YW1lLAorCQkJICAgICAgYmFja2VuZF9rZXksIGFsZy0+a2V5X3NpemUpOworCWlmICghcikg eworCQlyID0gY3J5cHRfY2lwaGVyX2RlY3J5cHQoY2lwaGVyLCBidWYsIGJ1ZiwgVENSWVBU X0hEUl9MRU4sCisJCQkJCSBpdiwgYWxnLT5pdl9zaXplKTsKKwkJY3J5cHRfY2lwaGVyX2Rl c3Ryb3koY2lwaGVyKTsKKwl9CisKKwljcnlwdF9tZW16ZXJvKGJhY2tlbmRfa2V5LCBzaXpl b2YoYmFja2VuZF9rZXkpKTsKKwljcnlwdF9tZW16ZXJvKGl2LCBUQ1JZUFRfSERSX0lWX0xF Tik7CisJcmV0dXJuIHI7Cit9CisKKy8qCisgKiBGb3IgY2hhbmluZWQgY2lwaGVycyBhbmQg Q0JDIG1vZGUgd2UgbmVlZCAib3V0ZXIiIGRlY3J5cHRpb24uCisgKiBCYWNrZW5kIGRvZXNu J3QgcHJvdmlkZSB0aGlzLCBzbyBpbXBsZW1lbnQgaXQgaGVyZSBkaXJlY3RseSB1c2luZyBF Q0IuCisgKi8KK3N0YXRpYyBpbnQgVENSWVBUX2RlY3J5cHRfY2JjaShzdHJ1Y3QgdGNyeXB0 X2FsZ3MgKmNpcGhlcnMsCisJCQkJY29uc3QgY2hhciAqa2V5LCBzdHJ1Y3QgdGNyeXB0X3Bo ZHIgKmhkcikKK3sKKwlzdHJ1Y3QgY3J5cHRfY2lwaGVyICpjaXBoZXJbY2lwaGVycy0+Y2hh aW5fY291bnRdOworCXVuc2lnbmVkIGludCBicyA9IGNpcGhlcnMtPmNpcGhlclswXS5pdl9z aXplOworCWNoYXIgKmJ1ZiA9IChjaGFyKikmaGRyLT5lLCBpdltic10sIGl2X29sZFtic107 CisJdW5zaWduZWQgaW50IGksIGo7CisJaW50IHIgPSAtRUlOVkFMOworCisJVENSWVBUX3Jl bW92ZV93aGl0ZW5pbmcoYnVmLCAma2V5WzhdKTsKKworCW1lbWNweShpdiwgJmtleVtjaXBo ZXJzLT5jaXBoZXJbMF0uaXZfb2Zmc2V0XSwgYnMpOworCisJLyogSW5pdGlhbGl6ZSBhbGwg Y2lwaGVycyBpbiBjaGFpbiBpbiBFQ0IgbW9kZSAqLworCWZvciAoaiA9IDA7IGogPCBjaXBo ZXJzLT5jaGFpbl9jb3VudDsgaisrKQorCQljaXBoZXJbal0gPSBOVUxMOworCWZvciAoaiA9 IDA7IGogPCBjaXBoZXJzLT5jaGFpbl9jb3VudDsgaisrKSB7CisJCXIgPSBjcnlwdF9jaXBo ZXJfaW5pdCgmY2lwaGVyW2pdLCBjaXBoZXJzLT5jaXBoZXJbal0ubmFtZSwgImVjYiIsCisJ CQkJICAgICAgJmtleVtjaXBoZXJzLT5jaXBoZXJbal0ua2V5X29mZnNldF0sCisJCQkJICAg ICAgY2lwaGVycy0+Y2lwaGVyW2pdLmtleV9zaXplKTsKKwkJaWYgKHIgPCAwKQorCQkJZ290 byBvdXQ7CisJfQorCisJLyogSW1wbGVtZW50cyBDQkMgd2l0aCBjaGFpbmVkIGNpcGhlcnMg aW4gbG9vcCBpbnNpZGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVENSWVBUX0hEUl9MRU47IGkg Kz0gYnMpIHsKKwkJbWVtY3B5KGl2X29sZCwgJmJ1ZltpXSwgYnMpOworCQlmb3IgKGogPSBj aXBoZXJzLT5jaGFpbl9jb3VudDsgaiA+IDA7IGotLSkgeworCQkJciA9IGNyeXB0X2NpcGhl cl9kZWNyeXB0KGNpcGhlcltqIC0gMV0sICZidWZbaV0sICZidWZbaV0sCisJCQkJCQkgIGJz LCBOVUxMLCAwKTsKKwkJCWlmIChyIDwgMCkKKwkJCQlnb3RvIG91dDsKKwkJfQorCQlmb3Ig KGogPSAwOyBqIDwgYnM7IGorKykKKwkJCWJ1ZltpICsgal0gXj0gaXZbal07CisJCW1lbWNw eShpdiwgaXZfb2xkLCBicyk7CisJfQorb3V0OgorCWZvciAoaiA9IDA7IGogPCBjaXBoZXJz LT5jaGFpbl9jb3VudDsgaisrKQorCQlpZiAoY2lwaGVyW2pdKQorCQkJY3J5cHRfY2lwaGVy X2Rlc3Ryb3koY2lwaGVyW2pdKTsKKworCWNyeXB0X21lbXplcm8oaXYsIGJzKTsKKwljcnlw dF9tZW16ZXJvKGl2X29sZCwgYnMpOworCXJldHVybiByOworfQorCitzdGF0aWMgaW50IFRD UllQVF9kZWNyeXB0X2hkcihzdHJ1Y3QgY3J5cHRfZGV2aWNlICpjZCwgc3RydWN0IHRjcnlw dF9waGRyICpoZHIsCisJCQkgICAgICAgY29uc3QgY2hhciAqa2V5LCB1aW50MzJfdCBmbGFn cykKK3sKKwlzdHJ1Y3QgdGNyeXB0X3BoZHIgaGRyMjsKKwlpbnQgaSwgaiwgciA9IC1FSU5W QUw7CisKKwlmb3IgKGkgPSAwOyB0Y3J5cHRfY2lwaGVyW2ldLmNoYWluX2NvdW50OyBpKysp IHsKKwkJaWYgKCEoZmxhZ3MgJiBDUllQVF9UQ1JZUFRfTEVHQUNZX01PREVTKSAmJiB0Y3J5 cHRfY2lwaGVyW2ldLmxlZ2FjeSkKKwkJCWNvbnRpbnVlOworCQlsb2dfZGJnKCJUQ1JZUFQ6 ICB0cnlpbmcgY2lwaGVyICVzLSVzIiwKKwkJCXRjcnlwdF9jaXBoZXJbaV0ubG9uZ19uYW1l LCB0Y3J5cHRfY2lwaGVyW2ldLm1vZGUpOworCisJCW1lbWNweSgmaGRyMi5lLCAmaGRyLT5l LCBUQ1JZUFRfSERSX0xFTik7CisKKwkJaWYgKCFzdHJuY21wKHRjcnlwdF9jaXBoZXJbaV0u bW9kZSwgImNiY2kiLCA0KSkKKwkJCXIgPSBUQ1JZUFRfZGVjcnlwdF9jYmNpKCZ0Y3J5cHRf Y2lwaGVyW2ldLCBrZXksICZoZHIyKTsKKwkJZWxzZSBmb3IgKGogPSB0Y3J5cHRfY2lwaGVy W2ldLmNoYWluX2NvdW50IC0gMTsgaiA+PSAwIDsgai0tKSB7CisJCQlpZiAoIXRjcnlwdF9j aXBoZXJbaV0uY2lwaGVyW2pdLm5hbWUpCisJCQkJY29udGludWU7CisJCQlyID0gVENSWVBU X2RlY3J5cHRfaGRyX29uZSgmdGNyeXB0X2NpcGhlcltpXS5jaXBoZXJbal0sCisJCQkJCSAg ICB0Y3J5cHRfY2lwaGVyW2ldLm1vZGUsIGtleSwgJmhkcjIpOworCQkJaWYgKHIgPCAwKQor CQkJCWJyZWFrOworCQl9CisKKwkJaWYgKHIgPCAwKSB7CisJCQlsb2dfZGJnKCJUQ1JZUFQ6 ICAgcmV0dXJuZWQgZXJyb3IgJWQsIHNraXBwZWQuIiwgcik7CisJCQlpZiAociA9PSAtRU5P VFNVUCkKKwkJCQlicmVhazsKKwkJCXIgPSAtRU5PRU5UOworCQkJY29udGludWU7CisJCX0K KworCQlpZiAoIXN0cm5jbXAoaGRyMi5kLm1hZ2ljLCBUQ1JZUFRfSERSX01BR0lDLCBUQ1JZ UFRfSERSX01BR0lDX0xFTikpIHsKKwkJCWxvZ19kYmcoIlRDUllQVDogU2lnbmF0dXJlIG1h Z2ljIGRldGVjdGVkLiIpOworCQkJbWVtY3B5KCZoZHItPmUsICZoZHIyLmUsIFRDUllQVF9I RFJfTEVOKTsKKwkJCXIgPSBpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKChmbGFncyAmIENS WVBUX1RDUllQVF9WRVJBX01PREVTKSAmJgorCQkgICAgICFzdHJuY21wKGhkcjIuZC5tYWdp YywgVkNSWVBUX0hEUl9NQUdJQywgVENSWVBUX0hEUl9NQUdJQ19MRU4pKSB7CisJCQlsb2df ZGJnKCJUQ1JZUFQ6IFNpZ25hdHVyZSBtYWdpYyBkZXRlY3RlZCAoVmVyYWNyeXB0KS4iKTsK KwkJCW1lbWNweSgmaGRyLT5lLCAmaGRyMi5lLCBUQ1JZUFRfSERSX0xFTik7CisJCQlyID0g aTsKKwkJCWJyZWFrOworCQl9CisJCXIgPSAtRVBFUk07CisJfQorCisJY3J5cHRfbWVtemVy bygmaGRyMiwgc2l6ZW9mKGhkcjIpKTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGludCBU Q1JZUFRfcG9vbF9rZXlmaWxlKHN0cnVjdCBjcnlwdF9kZXZpY2UgKmNkLAorCQkJCXVuc2ln bmVkIGNoYXIgcG9vbFtUQ1JZUFRfS0VZX1BPT0xfTEVOXSwKKwkJCQljb25zdCBjaGFyICpr ZXlmaWxlKQoreworCXVuc2lnbmVkIGNoYXIgZGF0YVtUQ1JZUFRfS0VZRklMRV9MRU5dOwor CWludCBpLCBqLCBmZCwgZGF0YV9zaXplOworCXVpbnQzMl90IGNyYzsKKworCWxvZ19kYmco IlRDUllQVDogdXNpbmcga2V5ZmlsZSAlcy4iLCBrZXlmaWxlKTsKKworCWZkID0gb3Blbihr ZXlmaWxlLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkgeworCQlsb2dfZXJyKGNkLCBfKCJG YWlsZWQgdG8gb3BlbiBrZXkgZmlsZS5cbiIpKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJ ZGF0YV9zaXplID0gcmVhZF9idWZmZXIoZmQsIGRhdGEsIFRDUllQVF9LRVlGSUxFX0xFTik7 CisJY2xvc2UoZmQpOworCWlmIChkYXRhX3NpemUgPCAwKSB7CisJCWxvZ19lcnIoY2QsIF8o IkVycm9yIHJlYWRpbmcga2V5ZmlsZSAlcy5cbiIpLCBrZXlmaWxlKTsKKwkJcmV0dXJuIC1F SU87CisJfQorCisJZm9yIChpID0gMCwgaiA9IDAsIGNyYyA9IH4wVTsgaSA8IGRhdGFfc2l6 ZTsgaSsrKSB7CisJCWNyYyA9IGNyeXB0X2NyYzMyKGNyYywgJmRhdGFbaV0sIDEpOworCQlw b29sW2orK10gKz0gKHVuc2lnbmVkIGNoYXIpKGNyYyA+PiAyNCk7CisJCXBvb2xbaisrXSAr PSAodW5zaWduZWQgY2hhcikoY3JjID4+IDE2KTsKKwkJcG9vbFtqKytdICs9ICh1bnNpZ25l ZCBjaGFyKShjcmMgPj4gIDgpOworCQlwb29sW2orK10gKz0gKHVuc2lnbmVkIGNoYXIpKGNy Yyk7CisJCWogJT0gVENSWVBUX0tFWV9QT09MX0xFTjsKKwl9CisKKwljcnlwdF9tZW16ZXJv KCZjcmMsIHNpemVvZihjcmMpKTsKKwljcnlwdF9tZW16ZXJvKGRhdGEsIFRDUllQVF9LRVlG SUxFX0xFTik7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IEdFTElf aW5pdF9oZHIoc3RydWN0IGNyeXB0X2RldmljZSAqY2QsCisJCQkgICBzdHJ1Y3QgZ2VsaV9w aGRyICpoZHIsCisJCQkgICBzdHJ1Y3QgY3J5cHRfcGFyYW1zX2dlbGkgKnBhcmFtcykKK3sK KwlpbnQgciA9IC1FUEVSTTsKKyNpZiAwCisJdW5zaWduZWQgY2hhciBwd2RbVENSWVBUX0tF WV9QT09MX0xFTl0gPSB7fTsKKwlzaXplX3QgcGFzc3BocmFzZV9zaXplOworCWNoYXIgKmtl eTsKKwl1bnNpZ25lZCBpbnQgaSwgc2tpcHBlZCA9IDA7CisKKwlpZiAocG9zaXhfbWVtYWxp Z24oKHZvaWQqKSZrZXksIGNyeXB0X2dldHBhZ2VzaXplKCksIFRDUllQVF9IRFJfS0VZX0xF TikpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHBhcmFtcy0+a2V5ZmlsZXNfY291bnQp CisJCXBhc3NwaHJhc2Vfc2l6ZSA9IFRDUllQVF9LRVlfUE9PTF9MRU47CisJZWxzZQorCQlw YXNzcGhyYXNlX3NpemUgPSBwYXJhbXMtPnBhc3NwaHJhc2Vfc2l6ZTsKKworCWlmIChwYXJh bXMtPnBhc3NwaHJhc2Vfc2l6ZSA+IFRDUllQVF9LRVlfUE9PTF9MRU4pIHsKKwkJbG9nX2Vy cihjZCwgXygiTWF4aW11bSBUQ1JZUFQgcGFzc3BocmFzZSBsZW5ndGggKCVkKSBleGNlZWRl ZC5cbiIpLAorCQkJICAgICAgVENSWVBUX0tFWV9QT09MX0xFTik7CisJCWdvdG8gb3V0Owor CX0KKworCS8qIENhbGN1bGF0ZSBwb29sIGNvbnRlbnQgZnJvbSBrZXlmaWxlcyAqLworCWZv ciAoaSA9IDA7IGkgPCBwYXJhbXMtPmtleWZpbGVzX2NvdW50OyBpKyspIHsKKwkJciA9IFRD UllQVF9wb29sX2tleWZpbGUoY2QsIHB3ZCwgcGFyYW1zLT5rZXlmaWxlc1tpXSk7CisJCWlm IChyIDwgMCkKKwkJCWdvdG8gb3V0OworCX0KKworCS8qIElmIHByb3ZpZGVkIHBhc3N3b3Jk LCBjb21iaW5lIGl0IHdpdGggcG9vbCAqLworCWZvciAoaSA9IDA7IGkgPCBwYXJhbXMtPnBh c3NwaHJhc2Vfc2l6ZTsgaSsrKQorCQlwd2RbaV0gKz0gcGFyYW1zLT5wYXNzcGhyYXNlW2ld OworCisJZm9yIChpID0gMDsgdGNyeXB0X2tkZltpXS5uYW1lOyBpKyspIHsKKwkJaWYgKCEo cGFyYW1zLT5mbGFncyAmIENSWVBUX1RDUllQVF9MRUdBQ1lfTU9ERVMpICYmIHRjcnlwdF9r ZGZbaV0ubGVnYWN5KQorCQkJY29udGludWU7CisJCWlmICghKHBhcmFtcy0+ZmxhZ3MgJiBD UllQVF9UQ1JZUFRfVkVSQV9NT0RFUykgJiYgdGNyeXB0X2tkZltpXS52ZXJhY3J5cHQpCisJ CQljb250aW51ZTsKKwkJLyogRGVyaXZlIGhlYWRlciBrZXkgKi8KKwkJbG9nX2RiZygiVENS WVBUOiB0cnlpbmcgS0RGOiAlcy0lcy0lZC4iLAorCQkJdGNyeXB0X2tkZltpXS5uYW1lLCB0 Y3J5cHRfa2RmW2ldLmhhc2gsIHRjcnlwdF9rZGZbaV0uaXRlcmF0aW9ucyk7CisJCXIgPSBj cnlwdF9wYmtkZih0Y3J5cHRfa2RmW2ldLm5hbWUsIHRjcnlwdF9rZGZbaV0uaGFzaCwKKwkJ CQkoY2hhciopcHdkLCBwYXNzcGhyYXNlX3NpemUsCisJCQkJaGRyLT5zYWx0LCBUQ1JZUFRf SERSX1NBTFRfTEVOLAorCQkJCWtleSwgVENSWVBUX0hEUl9LRVlfTEVOLAorCQkJCXRjcnlw dF9rZGZbaV0uaXRlcmF0aW9ucyk7CisJCWlmIChyIDwgMCAmJiBjcnlwdF9oYXNoX3NpemUo dGNyeXB0X2tkZltpXS5oYXNoKSA8IDApIHsKKwkJCWxvZ192ZXJib3NlKGNkLCBfKCJQQktE RjIgaGFzaCBhbGdvcml0aG0gJXMgbm90IGF2YWlsYWJsZSwgc2tpcHBpbmcuXG4iKSwKKwkJ CQkgICAgICB0Y3J5cHRfa2RmW2ldLmhhc2gpOworCQkJY29udGludWU7CisJCX0KKwkJaWYg KHIgPCAwKQorCQkJYnJlYWs7CisKKwkJLyogRGVjcnlwdCBoZWFkZXIgKi8KKwkJciA9IFRD UllQVF9kZWNyeXB0X2hkcihjZCwgaGRyLCBrZXksIHBhcmFtcy0+ZmxhZ3MpOworCQlpZiAo ciA9PSAtRU5PRU5UKSB7CisJCQlza2lwcGVkKys7CisJCQlyID0gLUVQRVJNOworCQl9CisJ CWlmIChyICE9IC1FUEVSTSkKKwkJCWJyZWFrOworCX0KKworCWlmICgociA8IDAgJiYgciAh PSAtRVBFUk0gJiYgc2tpcHBlZCAmJiBza2lwcGVkID09IGkpIHx8IHIgPT0gLUVOT1RTVVAp IHsKKwkJbG9nX2VycihjZCwgXygiUmVxdWlyZWQga2VybmVsIGNyeXB0byBpbnRlcmZhY2Ug bm90IGF2YWlsYWJsZS5cbiIpKTsKKyNpZmRlZiBFTkFCTEVfQUZfQUxHCisJCWxvZ19lcnIo Y2QsIF8oIkVuc3VyZSB5b3UgaGF2ZSBhbGdpZl9za2NpcGhlciBrZXJuZWwgbW9kdWxlIGxv YWRlZC5cbiIpKTsKKyNlbmRpZgorCX0KKwlpZiAociA8IDApCisJCWdvdG8gb3V0OworI2Vu ZGlmCisKKwlsb2dfZGJnKCJHRUxJIHRyYWNraW5nOiAxMDFcbiIpOworCXIgPSBHRUxJX2hk cl9mcm9tX2Rpc2soaGRyLCBwYXJhbXMsIHIpOworCWlmICghcikgeworCQlsb2dfZGJnKCJH RUxJIHRyYWNraW5nOiAxMDIgbWFnaWMgT0tcbiIpOworI2lmIDAKKwkJbG9nX2RiZygiVENS WVBUOiBNYWdpYzogJXMsIEhlYWRlciB2ZXJzaW9uOiAlZCwgcmVxLiAlZCwgc2VjdG9yICVk IgorCQkJIiwgbWtfb2Zmc2V0ICUiIFBSSXU2NCAiLCBoaWRkZW5fc2l6ZSAlIiBQUkl1NjQK KwkJCSIsIHZvbHVtZSBzaXplICUiIFBSSXU2NCwgdGNyeXB0X2tkZltpXS52ZXJhY3J5cHQg PworCQkJVkNSWVBUX0hEUl9NQUdJQyA6IFRDUllQVF9IRFJfTUFHSUMsCisJCQkoaW50KWhk ci0+ZC52ZXJzaW9uLCAoaW50KWhkci0+ZC52ZXJzaW9uX3RjLCAoaW50KWhkci0+ZC5zZWN0 b3Jfc2l6ZSwKKwkJCWhkci0+ZC5ta19vZmZzZXQsIGhkci0+ZC5oaWRkZW5fdm9sdW1lX3Np emUsIGhkci0+ZC52b2x1bWVfc2l6ZSk7CisJCWxvZ19kYmcoIlRDUllQVDogSGVhZGVyIGNp cGhlciAlcy0lcywga2V5IHNpemUgJXp1IiwKKwkJCXBhcmFtcy0+Y2lwaGVyLCBwYXJhbXMt Pm1vZGUsIHBhcmFtcy0+a2V5X3NpemUpOworI2VuZGlmCisJfQorb3V0OgorI2lmIDAKKwlj cnlwdF9tZW16ZXJvKHB3ZCwgVENSWVBUX0tFWV9QT09MX0xFTik7CisJaWYgKGtleSkKKwkJ Y3J5cHRfbWVtemVybyhrZXksIFRDUllQVF9IRFJfS0VZX0xFTik7CisJZnJlZShrZXkpOwor I2VuZGlmCisJcmV0dXJuIHI7Cit9CisKK2ludCBHRUxJX3JlYWRfcGhkcihzdHJ1Y3QgY3J5 cHRfZGV2aWNlICpjZCwKKwkJICAgICBzdHJ1Y3QgZ2VsaV9waGRyICpoZHIsCisJCSAgICAg c3RydWN0IGNyeXB0X3BhcmFtc19nZWxpICpwYXJhbXMpCit7CisJc3RydWN0IGRldmljZSAq ZGV2aWNlID0gY3J5cHRfbWV0YWRhdGFfZGV2aWNlKGNkKTsKKwlzc2l6ZV90IGhkcl9zaXpl ID0gc2l6ZW9mKHN0cnVjdCBnZWxpX3BoZHIpOworCS8vY2hhciAqYmFzZV9kZXZpY2VfcGF0 aDsKKwlpbnQgZGV2ZmQgPSAwLCByLCBiczsKKworCWFzc2VydChzaXplb2Yoc3RydWN0IGdl bGlfcGhkcikgPT0gNTExKTsKKworCWxvZ19kYmcoIlJlYWRpbmcgR0VMSSBoZWFkZXIgb2Yg c2l6ZSAlenUgYnl0ZXMgZnJvbSBkZXZpY2UgJXMuIiwKKwkJaGRyX3NpemUsIGRldmljZV9w YXRoKGRldmljZSkpOworCisJYnMgPSBkZXZpY2VfYmxvY2tfc2l6ZShkZXZpY2UpOworCWlm IChicyA8IDApCisJCXJldHVybiBiczsKKworI2lmIDAKKwlpZiAocGFyYW1zLT5mbGFncyAm IENSWVBUX1RDUllQVF9TWVNURU1fSEVBREVSICYmCisJICAgIGNyeXB0X2Rldl9pc19wYXJ0 aXRpb24oZGV2aWNlX3BhdGgoZGV2aWNlKSkpIHsKKwkJYmFzZV9kZXZpY2VfcGF0aCA9IGNy eXB0X2dldF9iYXNlX2RldmljZShkZXZpY2VfcGF0aChkZXZpY2UpKTsKKworCQlsb2dfZGJn KCJSZWFkaW5nIFRDUllQVCBzeXN0ZW0gaGVhZGVyIGZyb20gZGV2aWNlICVzLiIsIGJhc2Vf ZGV2aWNlX3BhdGggPzogIj8iKTsKKwkJaWYgKCFiYXNlX2RldmljZV9wYXRoKQorCQkJcmV0 dXJuIC1FSU5WQUw7CisKKwkJciA9IGRldmljZV9hbGxvYygmYmFzZV9kZXZpY2UsIGJhc2Vf ZGV2aWNlX3BhdGgpOworCQlmcmVlKGJhc2VfZGV2aWNlX3BhdGgpOworCQlpZiAociA8IDAp CisJCQlyZXR1cm4gcjsKKwkJZGV2ZmQgPSBkZXZpY2Vfb3BlbihiYXNlX2RldmljZSwgT19S RE9OTFkpOworCQlkZXZpY2VfZnJlZShiYXNlX2RldmljZSk7CisJfSBlbHNlCisjZW5kaWYK KwkJZGV2ZmQgPSBkZXZpY2Vfb3BlbihkZXZpY2UsIE9fUkRPTkxZKTsKKworCWlmIChkZXZm ZCA8IDApIHsKKwkJbG9nX2VycihjZCwgXygiQ2Fubm90IG9wZW4gZGV2aWNlICVzLlxuIiks IGRldmljZV9wYXRoKGRldmljZSkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyID0g LUVJTzsKKyNkZWZpbmUgR0VMSV9IRFJfT0ZGU0VUIC01MTIKKwlpZiAobHNlZWsoZGV2ZmQs IEdFTElfSERSX09GRlNFVCwgU0VFS19FTkQpID49IDAgJiYKKwkgICAgcmVhZF9ibG9ja3dp c2UoZGV2ZmQsIGJzLCBoZHIsIGhkcl9zaXplKSA9PSBoZHJfc2l6ZSkgeworCQlyID0gR0VM SV9pbml0X2hkcihjZCwgaGRyLCBwYXJhbXMpOworCX0KKworCWNsb3NlKGRldmZkKTsKKwlp ZiAociA8IDApCisJCW1lbXNldChoZHIsIDAsIHNpemVvZiAoKmhkcikpOworCXJldHVybiBy OworfQorCisjaWYgMAorc3RhdGljIHN0cnVjdCB0Y3J5cHRfYWxncyAqVENSWVBUX2dldF9h bGdzKGNvbnN0IGNoYXIgKmNpcGhlciwgY29uc3QgY2hhciAqbW9kZSkKK3sKKwlpbnQgaTsK KworCWlmICghY2lwaGVyIHx8ICFtb2RlKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAoaSA9 IDA7IHRjcnlwdF9jaXBoZXJbaV0uY2hhaW5fY291bnQ7IGkrKykKKwkJaWYgKCFzdHJjbXAo dGNyeXB0X2NpcGhlcltpXS5sb25nX25hbWUsIGNpcGhlcikgJiYKKwkJICAgICFzdHJjbXAo dGNyeXB0X2NpcGhlcltpXS5tb2RlLCBtb2RlKSkKKwkJICAgIHJldHVybiAmdGNyeXB0X2Np cGhlcltpXTsKKworCXJldHVybiBOVUxMOworfQorCitpbnQgVENSWVBUX2FjdGl2YXRlKHN0 cnVjdCBjcnlwdF9kZXZpY2UgKmNkLAorCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAg ICAgc3RydWN0IHRjcnlwdF9waGRyICpoZHIsCisJCSAgICAgc3RydWN0IGNyeXB0X3BhcmFt c190Y3J5cHQgKnBhcmFtcywKKwkJICAgICB1aW50MzJfdCBmbGFncykKK3sKKwljaGFyIGNp cGhlcltNQVhfQ0lQSEVSX0xFTl0sIGRtX25hbWVbUEFUSF9NQVhdLCBkbV9kZXZfbmFtZVtQ QVRIX01BWF07CisJY2hhciAqcGFydF9wYXRoOworCXN0cnVjdCBkZXZpY2UgKmRldmljZSA9 IE5VTEwsICpwYXJ0X2RldmljZSA9IE5VTEw7CisJdW5zaWduZWQgaW50IGk7CisJaW50IHI7 CisJdWludDMyX3QgcmVxX2ZsYWdzOworCXN0cnVjdCB0Y3J5cHRfYWxncyAqYWxnczsKKwll bnVtIGRldmNoZWNrIGRldmljZV9jaGVjazsKKwlzdHJ1Y3QgY3J5cHRfZG1fYWN0aXZlX2Rl dmljZSBkbWQgPSB7CisJCS50YXJnZXQgPSBETV9DUllQVCwKKwkJLnNpemUgICA9IDAsCisJ CS5kYXRhX2RldmljZSA9IGNyeXB0X2RhdGFfZGV2aWNlKGNkKSwKKwkJLnUuY3J5cHQgID0g eworCQkJLmNpcGhlciA9IGNpcGhlciwKKwkJCS5vZmZzZXQgPSBjcnlwdF9nZXRfZGF0YV9v ZmZzZXQoY2QpLAorCQkJLml2X29mZnNldCA9IGNyeXB0X2dldF9pdl9vZmZzZXQoY2QpLAor CQl9CisJfTsKKworCWlmICghaGRyLT5kLnZlcnNpb24pIHsKKwkJbG9nX2RiZygiVENSWVBU OiB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aG91dCBlbmNyeXB0ZWQgaGVh ZGVyIGxvYWQuIik7CisJCXJldHVybiAtRU5PVFNVUDsKKwl9CisKKwlpZiAoaGRyLT5kLnNl Y3Rvcl9zaXplICYmIGhkci0+ZC5zZWN0b3Jfc2l6ZSAhPSBTRUNUT1JfU0laRSkgeworCQls b2dfZXJyKGNkLCBfKCJBY3RpdmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yICVkIHNlY3Rv ciBzaXplLlxuIiksCisJCQloZHItPmQuc2VjdG9yX3NpemUpOworCQlyZXR1cm4gLUVOT1RT VVA7CisJfQorCisJaWYgKHN0cnN0cihwYXJhbXMtPm1vZGUsICItdGNyeXB0IikpIHsKKwkJ bG9nX2VycihjZCwgXygiS2VybmVsIGRvZXNuJ3Qgc3VwcG9ydCBhY3RpdmF0aW9uIGZvciB0 aGlzIFRDUllQVCBsZWdhY3kgbW9kZS5cbiIpKTsKKwkJcmV0dXJuIC1FTk9UU1VQOworCX0K KworCWlmIChzdHJzdHIocGFyYW1zLT5tb2RlLCAiLXRjdyIpKQorCQlyZXFfZmxhZ3MgPSBE TV9UQ1dfU1VQUE9SVEVEOworCWVsc2UKKwkJcmVxX2ZsYWdzID0gRE1fUExBSU42NF9TVVBQ T1JURUQ7CisKKwlhbGdzID0gVENSWVBUX2dldF9hbGdzKHBhcmFtcy0+Y2lwaGVyLCBwYXJh bXMtPm1vZGUpOworCWlmICghYWxncykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoaGRy LT5kLnNlY3Rvcl9zaXplID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHBhcmFt cy0+ZmxhZ3MgJiBDUllQVF9UQ1JZUFRfU1lTVEVNX0hFQURFUikKKwkJZG1kLnNpemUgPSAw OworCWVsc2UgaWYgKHBhcmFtcy0+ZmxhZ3MgJiBDUllQVF9UQ1JZUFRfSElEREVOX0hFQURF UikKKwkJZG1kLnNpemUgPSBoZHItPmQuaGlkZGVuX3ZvbHVtZV9zaXplIC8gaGRyLT5kLnNl Y3Rvcl9zaXplOworCWVsc2UKKwkJZG1kLnNpemUgPSBoZHItPmQudm9sdW1lX3NpemUgLyBo ZHItPmQuc2VjdG9yX3NpemU7CisKKwlpZiAoZG1kLmZsYWdzICYgQ1JZUFRfQUNUSVZBVEVf U0hBUkVEKQorCQlkZXZpY2VfY2hlY2sgPSBERVZfU0hBUkVEOworCWVsc2UKKwkJZGV2aWNl X2NoZWNrID0gREVWX0VYQ0w7CisKKwlpZiAoKHBhcmFtcy0+ZmxhZ3MgJiBDUllQVF9UQ1JZ UFRfU1lTVEVNX0hFQURFUikgJiYKKwkgICAgICFjcnlwdF9kZXZfaXNfcGFydGl0aW9uKGRl dmljZV9wYXRoKGRtZC5kYXRhX2RldmljZSkpKSB7CisJCXBhcnRfcGF0aCA9IGNyeXB0X2dl dF9wYXJ0aXRpb25fZGV2aWNlKGRldmljZV9wYXRoKGRtZC5kYXRhX2RldmljZSksCisJCQkJ CQkgICAgICAgZG1kLnUuY3J5cHQub2Zmc2V0LCBkbWQuc2l6ZSk7CisJCWlmIChwYXJ0X3Bh dGgpIHsKKwkJCWlmICghZGV2aWNlX2FsbG9jKCZwYXJ0X2RldmljZSwgcGFydF9wYXRoKSkg eworCQkJCWxvZ192ZXJib3NlKGNkLCBfKCJBY3RpdmF0aW5nIFRDUllQVCBzeXN0ZW0gZW5j cnlwdGlvbiBmb3IgcGFydGl0aW9uICVzLlxuIiksCisJCQkJCSAgICBwYXJ0X3BhdGgpOwor CQkJCWRtZC5kYXRhX2RldmljZSA9IHBhcnRfZGV2aWNlOworCQkJCWRtZC51LmNyeXB0Lm9m ZnNldCA9IDA7CisJCQl9CisJCQlmcmVlKHBhcnRfcGF0aCk7CisJCX0gZWxzZQorCQkJLyoK KwkJCSAqIFN5c3RlbSBlbmNyeXB0aW9uIHVzZSB0aGUgd2hvbGUgZGV2aWNlIG1hcHBpbmcs IHRoZXJlIGNhbgorCQkJICogYmUgYWN0aXZlIHBhcnRpdGlvbnMuCisJCQkgKi8KKwkJCWRl dmljZV9jaGVjayA9IERFVl9TSEFSRUQ7CisJfQorCisJciA9IGRldmljZV9ibG9ja19hZGp1 c3QoY2QsIGRtZC5kYXRhX2RldmljZSwgZGV2aWNlX2NoZWNrLAorCQkJCWRtZC51LmNyeXB0 Lm9mZnNldCwgJmRtZC5zaXplLCAmZG1kLmZsYWdzKTsKKwlpZiAocikgeworCQlkZXZpY2Vf ZnJlZShwYXJ0X2RldmljZSk7CisJCXJldHVybiByOworCX0KKworCS8qIEZyb21lIGhlcmUs IGtleSBzaXplIGZvciBldmVyeSBjaXBoZXIgbXVzdCBiZSB0aGUgc2FtZSAqLworCWRtZC51 LmNyeXB0LnZrID0gY3J5cHRfYWxsb2Nfdm9sdW1lX2tleShhbGdzLT5jaXBoZXJbMF0ua2V5 X3NpemUgKworCQkJCQkJYWxncy0+Y2lwaGVyWzBdLmtleV9leHRyYV9zaXplLCBOVUxMKTsK KwlpZiAoIWRtZC51LmNyeXB0LnZrKSB7CisJCWRldmljZV9mcmVlKHBhcnRfZGV2aWNlKTsK KwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZm9yIChpID0gYWxncy0+Y2hhaW5fY291bnQ7 IGkgPiAwOyBpLS0pIHsKKwkJaWYgKGkgPT0gMSkgeworCQkJZG1fbmFtZVtzaXplb2YoZG1f bmFtZSktMV0gPSAnXDAnOworCQkJc3RybmNweShkbV9uYW1lLCBuYW1lLCBzaXplb2YoZG1f bmFtZSktMSk7CisJCQlkbWQuZmxhZ3MgPSBmbGFnczsKKwkJfSBlbHNlIHsKKwkJCXNucHJp bnRmKGRtX25hbWUsIHNpemVvZihkbV9uYW1lKSwgIiVzXyVkIiwgbmFtZSwgaS0xKTsKKwkJ CWRtZC5mbGFncyA9IGZsYWdzIHwgQ1JZUFRfQUNUSVZBVEVfUFJJVkFURTsKKwkJfQorCisJ CXNucHJpbnRmKGNpcGhlciwgc2l6ZW9mKGNpcGhlciksICIlcy0lcyIsCisJCQkgYWxncy0+ Y2lwaGVyW2ktMV0ubmFtZSwgYWxncy0+bW9kZSk7CisKKwkJVENSWVBUX2NvcHlfa2V5KCZh bGdzLT5jaXBoZXJbaS0xXSwgYWxncy0+bW9kZSwKKwkJCQlkbWQudS5jcnlwdC52ay0+a2V5 LCBoZHItPmQua2V5cyk7CisKKwkJaWYgKGFsZ3MtPmNoYWluX2NvdW50ICE9IGkpIHsKKwkJ CXNucHJpbnRmKGRtX2Rldl9uYW1lLCBzaXplb2YoZG1fZGV2X25hbWUpLCAiJXMvJXNfJWQi LAorCQkJCSBkbV9nZXRfZGlyKCksIG5hbWUsIGkpOworCQkJciA9IGRldmljZV9hbGxvYygm ZGV2aWNlLCBkbV9kZXZfbmFtZSk7CisJCQlpZiAocikKKwkJCQlicmVhazsKKwkJCWRtZC5k YXRhX2RldmljZSA9IGRldmljZTsKKwkJCWRtZC51LmNyeXB0Lm9mZnNldCA9IDA7CisJCX0K KworCQlsb2dfZGJnKCJUcnlpbmcgdG8gYWN0aXZhdGUgVENSWVBUIGRldmljZSAlcyB1c2lu ZyBjaXBoZXIgJXMuIiwKKwkJCWRtX25hbWUsIGRtZC51LmNyeXB0LmNpcGhlcik7CisJCXIg PSBkbV9jcmVhdGVfZGV2aWNlKGNkLCBkbV9uYW1lLCBDUllQVF9UQ1JZUFQsICZkbWQsIDAp OworCisJCWRldmljZV9mcmVlKGRldmljZSk7CisJCWRldmljZSA9IE5VTEw7CisKKwkJaWYg KHIpCisJCQlicmVhazsKKwl9CisKKwlpZiAociA8IDAgJiYgIShkbV9mbGFncygpICYgcmVx X2ZsYWdzKSkgeworCQlsb2dfZXJyKGNkLCBfKCJLZXJuZWwgZG9lc24ndCBzdXBwb3J0IFRD UllQVCBjb21wYXRpYmxlIG1hcHBpbmcuXG4iKSk7CisJCXIgPSAtRU5PVFNVUDsKKwl9CisK KwlkZXZpY2VfZnJlZShwYXJ0X2RldmljZSk7CisJY3J5cHRfZnJlZV92b2x1bWVfa2V5KGRt ZC51LmNyeXB0LnZrKTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGludCBUQ1JZUFRfcmVt b3ZlX29uZShzdHJ1Y3QgY3J5cHRfZGV2aWNlICpjZCwgY29uc3QgY2hhciAqbmFtZSwKKwkJ ICAgICAgY29uc3QgY2hhciAqYmFzZV91dWlkLCBpbnQgaW5kZXgpCit7CisJc3RydWN0IGNy eXB0X2RtX2FjdGl2ZV9kZXZpY2UgZG1kID0ge307CisJY2hhciBkbV9uYW1lW1BBVEhfTUFY XTsKKwlpbnQgcjsKKworCWlmIChzbnByaW50ZihkbV9uYW1lLCBzaXplb2YoZG1fbmFtZSks ICIlc18lZCIsIG5hbWUsIGluZGV4KSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJciA9 IGRtX3N0YXR1c19kZXZpY2UoY2QsIGRtX25hbWUpOworCWlmIChyIDwgMCkKKwkJcmV0dXJu IHI7CisKKwlyID0gZG1fcXVlcnlfZGV2aWNlKGNkLCBkbV9uYW1lLCBETV9BQ1RJVkVfVVVJ RCwgJmRtZCk7CisJaWYgKCFyICYmICFzdHJuY21wKGRtZC51dWlkLCBiYXNlX3V1aWQsIHN0 cmxlbihiYXNlX3V1aWQpKSkKKwkJciA9IGRtX3JlbW92ZV9kZXZpY2UoY2QsIGRtX25hbWUs IDAsIDApOworCisJZnJlZShDT05TVF9DQVNUKHZvaWQqKWRtZC51dWlkKTsKKwlyZXR1cm4g cjsKK30KKworaW50IFRDUllQVF9kZWFjdGl2YXRlKHN0cnVjdCBjcnlwdF9kZXZpY2UgKmNk LCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBjcnlwdF9kbV9hY3RpdmVfZGV2aWNl IGRtZCA9IHt9OworCWludCByOworCisJciA9IGRtX3F1ZXJ5X2RldmljZShjZCwgbmFtZSwg RE1fQUNUSVZFX1VVSUQsICZkbWQpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisJaWYg KCFkbWQudXVpZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyID0gZG1fcmVtb3ZlX2Rldmlj ZShjZCwgbmFtZSwgMCwgMCk7CisJaWYgKHIgPCAwKQorCQlnb3RvIG91dDsKKworCXIgPSBU Q1JZUFRfcmVtb3ZlX29uZShjZCwgbmFtZSwgZG1kLnV1aWQsIDEpOworCWlmIChyIDwgMCkK KwkJZ290byBvdXQ7CisKKwlyID0gVENSWVBUX3JlbW92ZV9vbmUoY2QsIG5hbWUsIGRtZC51 dWlkLCAyKTsKKwlpZiAociA8IDApCisJCWdvdG8gb3V0Oworb3V0OgorCWZyZWUoQ09OU1Rf Q0FTVCh2b2lkKilkbWQudXVpZCk7CisJcmV0dXJuIChyID09IC1FTk9ERVYpID8gMCA6IHI7 Cit9CisKK3N0YXRpYyBpbnQgVENSWVBUX3N0YXR1c19vbmUoc3RydWN0IGNyeXB0X2Rldmlj ZSAqY2QsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgICBjb25zdCBjaGFyICpiYXNlX3V1 aWQsIGludCBpbmRleCwKKwkJCSAgICAgIHNpemVfdCAqa2V5X3NpemUsIGNoYXIgKmNpcGhl ciwKKwkJCSAgICAgIHVpbnQ2NF90ICpkYXRhX29mZnNldCwgc3RydWN0IGRldmljZSAqKmRl dmljZSkKK3sKKwlzdHJ1Y3QgY3J5cHRfZG1fYWN0aXZlX2RldmljZSBkbWQgPSB7fTsKKwlj aGFyIGRtX25hbWVbUEFUSF9NQVhdLCAqYzsKKwlpbnQgcjsKKworCWlmIChzbnByaW50Zihk bV9uYW1lLCBzaXplb2YoZG1fbmFtZSksICIlc18lZCIsIG5hbWUsIGluZGV4KSA8IDApCisJ CXJldHVybiAtRU5PTUVNOworCisJciA9IGRtX3N0YXR1c19kZXZpY2UoY2QsIGRtX25hbWUp OworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisKKwlyID0gZG1fcXVlcnlfZGV2aWNlKGNk LCBkbV9uYW1lLCBETV9BQ1RJVkVfREVWSUNFIHwKKwkJCQkJICBETV9BQ1RJVkVfVVVJRCB8 CisJCQkJCSAgRE1fQUNUSVZFX0NSWVBUX0NJUEhFUiB8CisJCQkJCSAgRE1fQUNUSVZFX0NS WVBUX0tFWVNJWkUsICZkbWQpOworCWlmIChyID4gMCkKKwkJciA9IDA7CisJaWYgKCFyICYm ICFzdHJuY21wKGRtZC51dWlkLCBiYXNlX3V1aWQsIHN0cmxlbihiYXNlX3V1aWQpKSkgewor CQlpZiAoKGMgPSBzdHJjaHIoZG1kLnUuY3J5cHQuY2lwaGVyLCAnLScpKSkKKwkJCSpjID0g J1wwJzsKKwkJc3RyY2F0KGNpcGhlciwgIi0iKTsKKwkJc3RybmNhdChjaXBoZXIsIGRtZC51 LmNyeXB0LmNpcGhlciwgTUFYX0NJUEhFUl9MRU4pOworCQkqa2V5X3NpemUgKz0gZG1kLnUu Y3J5cHQudmstPmtleWxlbmd0aDsKKwkJKmRhdGFfb2Zmc2V0ID0gZG1kLnUuY3J5cHQub2Zm c2V0ICogU0VDVE9SX1NJWkU7CisJCWRldmljZV9mcmVlKCpkZXZpY2UpOworCQkqZGV2aWNl ID0gZG1kLmRhdGFfZGV2aWNlOworCX0gZWxzZSB7CisJCWRldmljZV9mcmVlKGRtZC5kYXRh X2RldmljZSk7CisJCXIgPSAtRU5PREVWOworCX0KKworCWZyZWUoQ09OU1RfQ0FTVCh2b2lk KilkbWQudXVpZCk7CisJZnJlZShDT05TVF9DQVNUKHZvaWQqKWRtZC51LmNyeXB0LmNpcGhl cik7CisJY3J5cHRfZnJlZV92b2x1bWVfa2V5KGRtZC51LmNyeXB0LnZrKTsKKwlyZXR1cm4g cjsKK30KKworaW50IFRDUllQVF9pbml0X2J5X25hbWUoc3RydWN0IGNyeXB0X2RldmljZSAq Y2QsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQljb25zdCBzdHJ1Y3QgY3J5cHRfZG1fYWN0aXZl X2RldmljZSAqZG1kLAorCQkJc3RydWN0IGRldmljZSAqKmRldmljZSwKKwkJCXN0cnVjdCBj cnlwdF9wYXJhbXNfdGNyeXB0ICp0Y3J5cHRfcGFyYW1zLAorCQkJc3RydWN0IHRjcnlwdF9w aGRyICp0Y3J5cHRfaGRyKQoreworCXN0cnVjdCB0Y3J5cHRfYWxncyAqYWxnczsKKwljaGFy IGNpcGhlcltNQVhfQ0lQSEVSX0xFTiAqIDRdLCBtb2RlW01BWF9DSVBIRVJfTEVOKzFdLCAq dG1wOworCXNpemVfdCBrZXlfc2l6ZTsKKwlpbnQgcjsKKworCW1lbXNldCh0Y3J5cHRfcGFy YW1zLCAwLCBzaXplb2YoKnRjcnlwdF9wYXJhbXMpKTsKKwltZW1zZXQodGNyeXB0X2hkciwg MCwgc2l6ZW9mKCp0Y3J5cHRfaGRyKSk7CisJdGNyeXB0X2hkci0+ZC5zZWN0b3Jfc2l6ZSA9 IFNFQ1RPUl9TSVpFOworCXRjcnlwdF9oZHItPmQubWtfb2Zmc2V0ID0gZG1kLT51LmNyeXB0 Lm9mZnNldCAqIFNFQ1RPUl9TSVpFOworCisJc3RybmNweShjaXBoZXIsIGRtZC0+dS5jcnlw dC5jaXBoZXIsIE1BWF9DSVBIRVJfTEVOKTsKKwl0bXAgPSBzdHJjaHIoY2lwaGVyLCAnLScp OworCWlmICghdG1wKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkqdG1wID0gJ1wwJzsKKwltb2Rl W01BWF9DSVBIRVJfTEVOXSA9ICdcMCc7CisJc3RybmNweShtb2RlLCArK3RtcCwgTUFYX0NJ UEhFUl9MRU4pOworCisJa2V5X3NpemUgPSBkbWQtPnUuY3J5cHQudmstPmtleWxlbmd0aDsK KwlyID0gVENSWVBUX3N0YXR1c19vbmUoY2QsIG5hbWUsIGRtZC0+dXVpZCwgMSwgJmtleV9z aXplLAorCQkJICAgICAgY2lwaGVyLCAmdGNyeXB0X2hkci0+ZC5ta19vZmZzZXQsIGRldmlj ZSk7CisJaWYgKCFyKQorCQlyID0gVENSWVBUX3N0YXR1c19vbmUoY2QsIG5hbWUsIGRtZC0+ dXVpZCwgMiwgJmtleV9zaXplLAorCQkJCSAgICAgIGNpcGhlciwgJnRjcnlwdF9oZHItPmQu bWtfb2Zmc2V0LCBkZXZpY2UpOworCisJaWYgKHIgPCAwICYmIHIgIT0gLUVOT0RFVikKKwkJ cmV0dXJuIHI7CisKKwlhbGdzID0gVENSWVBUX2dldF9hbGdzKGNpcGhlciwgbW9kZSk7CisJ aWYgKCFhbGdzIHx8IGtleV9zaXplICE9IGFsZ3MtPmNoYWluX2tleV9zaXplKQorCQlyZXR1 cm4gLUVJTlZBTDsKKworCXRjcnlwdF9wYXJhbXMtPmtleV9zaXplID0gYWxncy0+Y2hhaW5f a2V5X3NpemU7CisJdGNyeXB0X3BhcmFtcy0+Y2lwaGVyID0gYWxncy0+bG9uZ19uYW1lOwor CXRjcnlwdF9wYXJhbXMtPm1vZGUgPSBhbGdzLT5tb2RlOworCXJldHVybiAwOworfQorCit1 aW50NjRfdCBUQ1JZUFRfZ2V0X2RhdGFfb2Zmc2V0KHN0cnVjdCBjcnlwdF9kZXZpY2UgKmNk LAorCQkJCSBzdHJ1Y3QgdGNyeXB0X3BoZHIgKmhkciwKKwkJCQkgc3RydWN0IGNyeXB0X3Bh cmFtc190Y3J5cHQgKnBhcmFtcykKK3sKKwl1aW50NjRfdCBzaXplOworCisJLyogTm8gcmVh bCBoZWFkZXIgbG9hZGVkLCBpbml0aWFsaXplZCBieSBhY3RpdmUgZGV2aWNlICovCisJaWYg KCFoZHItPmQudmVyc2lvbikKKwkJZ290byBoZHJfb2Zmc2V0OworCisJLyogTWFwcGluZyB0 aHJvdWdoIHdob2xlIGRldmljZSwgbm90IHBhcnRpdGlvbiEgKi8KKwlpZiAocGFyYW1zLT5m bGFncyAmIENSWVBUX1RDUllQVF9TWVNURU1fSEVBREVSKSB7CisJCWlmIChjcnlwdF9kZXZf aXNfcGFydGl0aW9uKGRldmljZV9wYXRoKGNyeXB0X21ldGFkYXRhX2RldmljZShjZCkpKSkK KwkJCXJldHVybiAwOworCQlnb3RvIGhkcl9vZmZzZXQ7CisJfQorCisJaWYgKHBhcmFtcy0+ bW9kZSAmJiAhc3RybmNtcChwYXJhbXMtPm1vZGUsICJ4dHMiLCAzKSkgeworCQlpZiAoaGRy LT5kLnZlcnNpb24gPCAzKQorCQkJcmV0dXJuIDE7CisKKwkJaWYgKHBhcmFtcy0+ZmxhZ3Mg JiBDUllQVF9UQ1JZUFRfSElEREVOX0hFQURFUikgeworCQkJaWYgKGhkci0+ZC52ZXJzaW9u ID4gMykKKwkJCQlyZXR1cm4gKGhkci0+ZC5ta19vZmZzZXQgLyBoZHItPmQuc2VjdG9yX3Np emUpOworCQkJaWYgKGRldmljZV9zaXplKGNyeXB0X21ldGFkYXRhX2RldmljZShjZCksICZz aXplKSA8IDApCisJCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gKHNpemUgLSBoZHItPmQuaGlk ZGVuX3ZvbHVtZV9zaXplICsKKwkJCQkoVENSWVBUX0hEUl9ISURERU5fT0ZGU0VUX09MRCkp IC8gaGRyLT5kLnNlY3Rvcl9zaXplOworCQl9CisJCWdvdG8gaGRyX29mZnNldDsKKwl9CisK KwlpZiAocGFyYW1zLT5mbGFncyAmIENSWVBUX1RDUllQVF9ISURERU5fSEVBREVSKSB7CisJ CWlmIChkZXZpY2Vfc2l6ZShjcnlwdF9tZXRhZGF0YV9kZXZpY2UoY2QpLCAmc2l6ZSkgPCAw KQorCQkJcmV0dXJuIDA7CisJCXJldHVybiAoc2l6ZSAtIGhkci0+ZC5oaWRkZW5fdm9sdW1l X3NpemUgKworCQkJKFRDUllQVF9IRFJfSElEREVOX09GRlNFVF9PTEQpKSAvIGhkci0+ZC5z ZWN0b3Jfc2l6ZTsKKwl9CisKK2hkcl9vZmZzZXQ6CisJcmV0dXJuIGhkci0+ZC5ta19vZmZz ZXQgLyBoZHItPmQuc2VjdG9yX3NpemU7Cit9CisKK3VpbnQ2NF90IFRDUllQVF9nZXRfaXZf b2Zmc2V0KHN0cnVjdCBjcnlwdF9kZXZpY2UgKmNkLAorCQkJICAgICAgc3RydWN0IHRjcnlw dF9waGRyICpoZHIsCisJCQkgICAgICBzdHJ1Y3QgY3J5cHRfcGFyYW1zX3RjcnlwdCAqcGFy YW1zKQoreworCXVpbnQ2NF90IGl2X29mZnNldDsKKworCWlmIChwYXJhbXMtPm1vZGUgJiYg IXN0cm5jbXAocGFyYW1zLT5tb2RlLCAieHRzIiwgMykpCisJCWl2X29mZnNldCA9IFRDUllQ VF9nZXRfZGF0YV9vZmZzZXQoY2QsIGhkciwgcGFyYW1zKTsKKwllbHNlIGlmIChwYXJhbXMt Pm1vZGUgJiYgIXN0cm5jbXAocGFyYW1zLT5tb2RlLCAibHJ3IiwgMykpCisJCWl2X29mZnNl dCA9IDA7CisJZWxzZQorCQlpdl9vZmZzZXQgPSBoZHItPmQubWtfb2Zmc2V0IC8gaGRyLT5k LnNlY3Rvcl9zaXplOworCisJaWYgKHBhcmFtcy0+ZmxhZ3MgJiBDUllQVF9UQ1JZUFRfU1lT VEVNX0hFQURFUikKKwkJaXZfb2Zmc2V0ICs9IGNyeXB0X2Rldl9wYXJ0aXRpb25fb2Zmc2V0 KGRldmljZV9wYXRoKGNyeXB0X21ldGFkYXRhX2RldmljZShjZCkpKTsKKworCXJldHVybiBp dl9vZmZzZXQ7Cit9CisKK2ludCBUQ1JZUFRfZ2V0X3ZvbHVtZV9rZXkoc3RydWN0IGNyeXB0 X2RldmljZSAqY2QsCisJCQkgIHN0cnVjdCB0Y3J5cHRfcGhkciAqaGRyLAorCQkJICBzdHJ1 Y3QgY3J5cHRfcGFyYW1zX3RjcnlwdCAqcGFyYW1zLAorCQkJICBzdHJ1Y3Qgdm9sdW1lX2tl eSAqKnZrKQoreworCXN0cnVjdCB0Y3J5cHRfYWxncyAqYWxnczsKKwl1bnNpZ25lZCBpbnQg aSwga2V5X2luZGV4OworCisJaWYgKCFoZHItPmQudmVyc2lvbikgeworCQlsb2dfZXJyKGNk LCBfKCJUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aG91dCBUQ1JZUFQgaGVh ZGVyIGxvYWQuIikpOworCQlyZXR1cm4gLUVOT1RTVVA7CisJfQorCisJYWxncyA9IFRDUllQ VF9nZXRfYWxncyhwYXJhbXMtPmNpcGhlciwgcGFyYW1zLT5tb2RlKTsKKwlpZiAoIWFsZ3Mp CisJCXJldHVybiAtRUlOVkFMOworCisJKnZrID0gY3J5cHRfYWxsb2Nfdm9sdW1lX2tleShw YXJhbXMtPmtleV9zaXplLCBOVUxMKTsKKwlpZiAoISp2aykKKwkJcmV0dXJuIC1FTk9NRU07 CisKKwlmb3IgKGkgPSAwLCBrZXlfaW5kZXggPSAwOyBpIDwgYWxncy0+Y2hhaW5fY291bnQ7 IGkrKykgeworCQlUQ1JZUFRfY29weV9rZXkoJmFsZ3MtPmNpcGhlcltpXSwgYWxncy0+bW9k ZSwKKwkJCQkmKCp2ayktPmtleVtrZXlfaW5kZXhdLCBoZHItPmQua2V5cyk7CisJCWtleV9p bmRleCArPSBhbGdzLT5jaXBoZXJbaV0ua2V5X3NpemU7CisJfQorCisJcmV0dXJuIDA7Cit9 CisjZW5kaWYKKworc3RhdGljIGludCBsb2dfc3RkX2hleGR1bXAoc3RydWN0IGNyeXB0X2Rl dmljZSAqY2QsIHVpbnQ4X3QgKnAsIGludCBsZW4pCit7CisJaW50IGk7CisKKworCWZvcihp ID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWlmIChpICYmICEoaSAlIDE2KSkKKwkJCWxvZ19z dGQoY2QsICJcblx0XHQiKTsKKwkJbG9nX3N0ZChjZCwgIiUwMmhoeCAiLCAoY2hhcilwW2ld KTsKKwl9CisJbG9nX3N0ZChjZCwgIlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IEdF TElfZHVtcChzdHJ1Y3QgY3J5cHRfZGV2aWNlICpjZCwKKwkJc3RydWN0IGdlbGlfcGhkciAq aGRyLAorCQlzdHJ1Y3QgY3J5cHRfcGFyYW1zX2dlbGkgKnBhcmFtcykKK3sKKwlsb2dfc3Rk KGNkLCAiR0VMSSBoZWFkZXIgaW5mb3JtYXRpb24gZm9yICVzXG4iLAorCQlkZXZpY2VfcGF0 aChjcnlwdF9tZXRhZGF0YV9kZXZpY2UoY2QpKSk7CisKKwlpZiAoaGRyLT5tZF92ZXJzaW9u ID09IDcpIHsKKwkJbG9nX3N0ZChjZCwgIk1hZ2ljOlx0XHQlc1xuIiwgaGRyLT5tZF9tYWdp Yyk7CisJCWxvZ19zdGQoY2QsICJWZXJzaW9uOlx0JSIgUFJJdTMyICJcbiIsIGhkci0+bWRf dmVyc2lvbik7CisJCWxvZ19zdGQoY2QsICJGbGFnczpcdFx0MHglIiBQUkl4MzIgIlxuIiwg aGRyLT5tZF9mbGFncyk7CisJCWxvZ19zdGQoY2QsICJFbmNyeXB0aW9uIGFsZ286XHQweCUi IFBSSXgxNiAiXG4iLCBoZHItPm1kX2VhbGdvKTsKKwkJbG9nX3N0ZChjZCwgIktleSBsZW5n dGg6XHQlIiBQUkl1MTYgIlxuIiwgaGRyLT5tZF9rZXlsZW4pOworCQlsb2dfc3RkKGNkLCAi QXV0aGVudGljYXRpb24gYWxnbzpcdDB4JSIgUFJJeDE2ICJcbiIsIGhkci0+bWRfYWFsZ28p OworCQlsb2dfc3RkKGNkLCAiUHJvdmlkZXIgc2l6ZTpcdCUiIFBSSXU2NCAiXG4iLCBoZHIt Pm1kX3Byb3ZzaXplKTsKKwkJbG9nX3N0ZChjZCwgIlNlY3RvciBzaXplOlx0JSIgUFJJdTMy ICJcbiIsIGhkci0+bWRfc2VjdG9yc2l6ZSk7CisJCWxvZ19zdGQoY2QsICJOdW1iZXIgb2Yg a2V5czpcdCUiIFBSSXU4ICJcbiIsIGhkci0+bWRfa2V5cyk7CisJCWxvZ19zdGQoY2QsICJO dW1iZXIgb2YgaXRlcmF0aW9uczpcdCUiIFBSSXUzMiAiXG4iLCBoZHItPm1kX2l0ZXJhdGlv bnMpOworCQlsb2dfc3RkKGNkLCAiU2FsdDpcdFx0XHQiKTsKKwkJbG9nX3N0ZF9oZXhkdW1w KGNkLCBoZHItPm1kX3NhbHQsIEdfRUxJX1NBTFRMRU4pOworCQlsb2dfc3RkKGNkLCAiRW5j cnlwdGVkIE1LZXlzOlx0Iik7CisJCWxvZ19zdGRfaGV4ZHVtcChjZCwgaGRyLT5tZF9ta2V5 c2J1ZiwgR19FTElfTUFYTUtFWVMgKiBHX0VMSV9NS0VZTEVOKTsKKwkJbG9nX3N0ZChjZCwg IkVuY3IuIElWIGtleSAwOlx0XHQiKTsKKwkJbG9nX3N0ZF9oZXhkdW1wKGNkLCBoZHItPm1k X21rZXlzbG90WzBdLm1kX2l2a2V5LCBHX0VMSV9JVktFWUxFTik7CisJCWxvZ19zdGQoY2Qs ICJFbmNyLiBkYXRhIGtleSAwOlx0Iik7CisJCWxvZ19zdGRfaGV4ZHVtcChjZCwgaGRyLT5t ZF9ta2V5c2xvdFswXS5tZF9kYXRha2V5LCBHX0VMSV9EQVRBS0VZTEVOKTsKKwkJbG9nX3N0 ZChjZCwgIkVuY3IuIFNIQTUxMiBITUFDIDA6XHQiKTsKKwkJbG9nX3N0ZF9oZXhkdW1wKGNk LCBoZHItPm1kX21rZXlzbG90WzBdLm1kX2htYWNzaGE1MTIsIFNIQTUxMl9NRExFTik7CisJ CWxvZ19zdGQoY2QsICJFbmNyLiBJViBrZXkgMTpcdFx0Iik7CisJCWxvZ19zdGRfaGV4ZHVt cChjZCwgaGRyLT5tZF9ta2V5c2xvdFsxXS5tZF9pdmtleSwgR19FTElfSVZLRVlMRU4pOwor CQlsb2dfc3RkKGNkLCAiRW5jci4gZGF0YSBrZXkgMTpcdCIpOworCQlsb2dfc3RkX2hleGR1 bXAoY2QsIGhkci0+bWRfbWtleXNsb3RbMV0ubWRfZGF0YWtleSwgR19FTElfREFUQUtFWUxF Tik7CisJCWxvZ19zdGQoY2QsICJFbmNyLiBTSEE1MTIgSE1BQyAxOlx0Iik7CisJCWxvZ19z dGRfaGV4ZHVtcChjZCwgaGRyLT5tZF9ta2V5c2xvdFsxXS5tZF9obWFjc2hhNTEyLCBTSEE1 MTJfTURMRU4pOworCQlsb2dfc3RkKGNkLCAiTUQ1Olx0XHRcdCIpOworCQlsb2dfc3RkX2hl eGR1bXAoY2QsIGhkci0+bWRfaGFzaCwgMTYpOworCX0gZWxzZSB7CisJCWxvZ19zdGQoY2Qs ICJWZXJzaW9uICVkIG5vdCBzdXBwb3J0ZWRcbiIsIGhkci0+bWRfdmVyc2lvbik7CisJfQor CXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliL2dlbGkvZ2VsaS5oIGIvbGliL2dlbGkv Z2VsaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlOTA3MGUKLS0t IC9kZXYvbnVsbAorKysgYi9saWIvZ2VsaS9nZWxpLmgKQEAgLTAsMCArMSwxMDIgQEAKKy8q CisgKiBGcmVlQlNEIEdFT006OkVMSSBHRUxJIGNvbXBhdGlibGUgdm9sdW1lIGhhbmRsaW5n CisgKgorICogQ29weXJpZ2h0IChDKSAyMDE3LCBDYXJsLURhbmllbCBIYWlsZmluZ2VyCisg KgorICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUg TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg KiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj CisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRo ZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNp Zm5kZWYgX0dFTElfSAorI2RlZmluZSBfR0VMSV9ICisKKyNpbmNsdWRlIDx1bmlzdGQuaD4K KworLyogUmVsZXZhbnQgaGVhZGVyIHBhcnRzIGZyb20gRnJlZUJTRCBzeXMvZ2VvbS9lbGkv Z19lbGkuaAorICogVE9ETzogRmlndXJlIG91dCBpZiB0aGF0IGlzIGFjdHVhbGx5IE9LIGZy b20gYSBsaWNlbnNpbmcgcGVyc3BlY3RpdmUuCisgKi8KKyNkZWZpbmUJR19FTElfTUFHSUMJ CSJHRU9NOjpFTEkiCisKKyNkZWZpbmUgU0hBNTEyX01ETEVOCQk2NAorCisjZGVmaW5lCUdf RUxJX01BWE1LRVlTCQkyCisjZGVmaW5lCUdfRUxJX01BWEtFWUxFTgkJNjQKKyNkZWZpbmUJ R19FTElfVVNFUktFWUxFTglHX0VMSV9NQVhLRVlMRU4KKyNkZWZpbmUJR19FTElfREFUQUtF WUxFTglHX0VMSV9NQVhLRVlMRU4KKyNkZWZpbmUJR19FTElfQVVUSEtFWUxFTglHX0VMSV9N QVhLRVlMRU4KKyNkZWZpbmUJR19FTElfSVZLRVlMRU4JCUdfRUxJX01BWEtFWUxFTgorI2Rl ZmluZQlHX0VMSV9TQUxUTEVOCQk2NAorI2RlZmluZQlHX0VMSV9EQVRBSVZLRVlMRU4JKEdf RUxJX0RBVEFLRVlMRU4gKyBHX0VMSV9JVktFWUxFTikKKy8qIERhdGEtS2V5LCBJVi1LZXks IEhNQUNfU0hBNTEyKERlcml2ZWQtS2V5LCBEYXRhLUtleStJVi1LZXkpICovCisjZGVmaW5l CUdfRUxJX01LRVlMRU4JCShHX0VMSV9EQVRBSVZLRVlMRU4gKyBTSEE1MTJfTURMRU4pCisj ZGVmaW5lIE1ENV9NRExFTgkJMTYKKworc3RydWN0IGdlbGlfbWtleXNsb3QgeworCXVpbnQ4 X3QJCW1kX2l2a2V5W0dfRUxJX0lWS0VZTEVOXTsKKwl1aW50OF90CQltZF9kYXRha2V5W0df RUxJX0RBVEFLRVlMRU5dOworCXVpbnQ4X3QJCW1kX2htYWNzaGE1MTJbU0hBNTEyX01ETEVO XTsKK307CisKK3N0cnVjdCBnZWxpX3BoZHIgeworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJ CWNoYXIJCW1kX21hZ2ljWzE2XTsJLyogTWFnaWMgdmFsdWUuICovCisJCQl1aW50MzJfdAlt ZF92ZXJzaW9uOwkvKiBWZXJzaW9uIG51bWJlci4gKi8KKwkJCXVpbnQzMl90CW1kX2ZsYWdz OwkvKiBBZGRpdGlvbmFsIGZsYWdzLiAqLworCQkJdWludDE2X3QJbWRfZWFsZ287CS8qIEVu Y3J5cHRpb24gYWxnb3JpdGhtLiAqLworCQkJdWludDE2X3QJbWRfa2V5bGVuOwkvKiBLZXkg bGVuZ3RoLiAqLworCQkJdWludDE2X3QJbWRfYWFsZ287CS8qIEF1dGhlbnRpY2F0aW9uIGFs Z29yaXRobS4gKi8KKwkJCXVpbnQ2NF90CW1kX3Byb3ZzaXplOwkvKiBQcm92aWRlcidzIHNp emUuICovCisJCQl1aW50MzJfdAltZF9zZWN0b3JzaXplOwkvKiBTZWN0b3Igc2l6ZS4gKi8K KwkJCXVpbnQ4X3QJCW1kX2tleXM7CS8qIEF2YWlsYWJsZSBrZXlzLiAqLworCQkJaW50MzJf dAkJbWRfaXRlcmF0aW9uczsJLyogTnVtYmVyIG9mIGl0ZXJhdGlvbnMgZm9yIFBLQ1MjNXYy LiAqLworCQkJdWludDhfdAkJbWRfc2FsdFtHX0VMSV9TQUxUTEVOXTsgLyogU2FsdC4gKi8K KwkJCQkJLyogRW5jcnlwdGVkIG1hc3RlciBrZXkgKElWLWtleSwgRGF0YS1rZXksIEhNQUMp LiAqLworCQkJdW5pb24geworCQkJCXVpbnQ4X3QJCQltZF9ta2V5c2J1ZltHX0VMSV9NQVhN S0VZUyAqIEdfRUxJX01LRVlMRU5dOworCQkJCXN0cnVjdCBnZWxpX21rZXlzbG90CW1kX21r ZXlzbG90W0dfRUxJX01BWE1LRVlTXTsKKwkJCX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRf XykpOworCQkJdV9jaGFyCQltZF9oYXNoW01ENV9NRExFTl07CS8qIE1ENSBoYXNoLiAqLwor CQl9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKwkJY2hhcgkJCWJ5dGVhcnJheVs1 MTFdOworCX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworfSBfX2F0dHJpYnV0ZV9f KChfX3BhY2tlZF9fKSk7CisKK2ludCBHRUxJX3JlYWRfcGhkcihzdHJ1Y3QgY3J5cHRfZGV2 aWNlICpjZCwKKwkJICAgICBzdHJ1Y3QgZ2VsaV9waGRyICpoZHIsCisJCSAgICAgc3RydWN0 IGNyeXB0X3BhcmFtc19nZWxpICpwYXJhbXMpOworCitpbnQgR0VMSV9kdW1wKHN0cnVjdCBj cnlwdF9kZXZpY2UgKmNkLAorCQlzdHJ1Y3QgZ2VsaV9waGRyICpoZHIsCisJCXN0cnVjdCBj cnlwdF9wYXJhbXNfZ2VsaSAqcGFyYW1zKTsKKworI2lmIDAKK3N0cnVjdCBjcnlwdF9kZXZp Y2U7CitzdHJ1Y3Qgdm9sdW1lX2tleTsKKworaW50IEdFTElfcGFyc2Vfa2V5ZmlsZShzdHJ1 Y3QgY3J5cHRfZGV2aWNlICpjZCwKKwkJCSAgc3RydWN0IHZvbHVtZV9rZXkgKip2aywKKwkJ CSAgY29uc3QgY2hhciAqaGFzaCwKKwkJCSAgdW5zaWduZWQgaW50ICprZXlzX2NvdW50LAor CQkJICBjaGFyICpidWZmZXIsCisJCQkgIHNpemVfdCBidWZmZXJfbGVuKTsKKworaW50IEdF TElfYWN0aXZhdGUoc3RydWN0IGNyeXB0X2RldmljZSAqY2QsCisJCSAgICAgY29uc3QgY2hh ciAqbmFtZSwKKwkJICAgICBjb25zdCBjaGFyICpiYXNlX2NpcGhlciwKKwkJICAgICB1bnNp Z25lZCBpbnQga2V5c19jb3VudCwKKwkJICAgICBzdHJ1Y3Qgdm9sdW1lX2tleSAqdmssCisJ CSAgICAgdWludDMyX3QgZmxhZ3MpOworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xp Yi9saWJjcnlwdHNldHVwLmggYi9saWIvbGliY3J5cHRzZXR1cC5oCmluZGV4IDgwYmJmNWMu LjhlMzE0NDQgMTAwNjQ0Ci0tLSBhL2xpYi9saWJjcnlwdHNldHVwLmgKKysrIGIvbGliL2xp YmNyeXB0c2V0dXAuaApAQCAtMjQzLDYgKzI0Myw4IEBAIGludCBjcnlwdF9tZW1vcnlfbG9j ayhzdHJ1Y3QgY3J5cHRfZGV2aWNlICpjZCwgaW50IGxvY2spOwogI2RlZmluZSBDUllQVF9W RVJJVFkgIlZFUklUWSIKIC8qKiBUQ1JZUFQgKFRydWVDcnlwdC1jb21wYXRpYmxlIGFuZCBW ZXJhQ3J5cHQtY29tcGF0aWJsZSkgbW9kZSAqLwogI2RlZmluZSBDUllQVF9UQ1JZUFQgIlRD UllQVCIKKy8qKiBHRUxJIChGcmVlQlNEIEdFT006OkVMSSkgbW9kZSAqLworI2RlZmluZSBD UllQVF9HRUxJICJHRUxJIgogCiAvKioKICAqIEdldCBkZXZpY2UgdHlwZQpAQCAtMzU0LDYg KzM1NiwxNyBAQCBzdHJ1Y3QgY3J5cHRfcGFyYW1zX3RjcnlwdCB7CiAgKi8KICNkZWZpbmUg Q1JZUFRfVENSWVBUX1ZFUkFfTU9ERVMgICAgICAoMSA8PCA0KQogCisvKioKKyAqCisgKiBT dHJ1Y3R1cmUgdXNlZCBhcyBwYXJhbWV0ZXIgZm9yIEdFTEkgZGV2aWNlIHR5cGUuCisgKgor ICogQHNlZSBjcnlwdF9mb3JtYXQKKyAqCisgKi8KK3N0cnVjdCBjcnlwdF9wYXJhbXNfZ2Vs aSB7CisJaW50IGR1bW15OworfTsKKwogLyoqIEB9ICovCiAKIC8qKgpkaWZmIC0tZ2l0IGEv bGliL3NldHVwLmMgYi9saWIvc2V0dXAuYwppbmRleCAxZGNhOTliLi43ZDM5NGFjIDEwMDY0 NAotLS0gYS9saWIvc2V0dXAuYworKysgYi9saWIvc2V0dXAuYwpAQCAtMzQsNiArMzQsNyBA QAogI2luY2x1ZGUgImxvb3BhZXMuaCIKICNpbmNsdWRlICJ2ZXJpdHkuaCIKICNpbmNsdWRl ICJ0Y3J5cHQuaCIKKyNpbmNsdWRlICJnZWxpLmgiCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIK IAogc3RydWN0IGNyeXB0X2RldmljZSB7CkBAIC03Niw2ICs3NywxMCBAQCBzdHJ1Y3QgY3J5 cHRfZGV2aWNlIHsKIAkJc3RydWN0IGNyeXB0X3BhcmFtc190Y3J5cHQgcGFyYW1zOwogCQlz dHJ1Y3QgdGNyeXB0X3BoZHIgaGRyOwogCX0gdGNyeXB0OworCXN0cnVjdCB7IC8qIHVzZWQg aW4gQ1JZUFRfR0VMSSAqLworCQlzdHJ1Y3QgY3J5cHRfcGFyYW1zX2dlbGkgcGFyYW1zOwor CQlzdHJ1Y3QgZ2VsaV9waGRyIGhkcjsKKwl9IGdlbGk7CiAJc3RydWN0IHsgLyogdXNlZCBp ZiBpbml0aWFsaXplZCB3aXRob3V0IGhlYWRlciBieSBuYW1lICovCiAJCWNoYXIgKmFjdGl2 ZV9uYW1lOwogCQkvKiBidWZmZXJzLCBtdXN0IHJlZnJlc2ggZnJvbSBrZXJuZWwgb24gZXZl cnkgcXVlcnkgKi8KQEAgLTI0NSw2ICsyNTAsMTEgQEAgc3RhdGljIGludCBpc1RDUllQVChj b25zdCBjaGFyICp0eXBlKQogCXJldHVybiAodHlwZSAmJiAhc3RyY21wKENSWVBUX1RDUllQ VCwgdHlwZSkpOwogfQogCitzdGF0aWMgaW50IGlzR0VMSShjb25zdCBjaGFyICp0eXBlKQor eworCXJldHVybiAodHlwZSAmJiAhc3RyY21wKENSWVBUX0dFTEksIHR5cGUpKTsKK30KKwog c3RhdGljIGludCBvbmx5TFVLUyhzdHJ1Y3QgY3J5cHRfZGV2aWNlICpjZCkKIHsKIAlpbnQg ciA9IDA7CkBAIC01ODEsNiArNTkxLDMwIEBAIHN0YXRpYyBpbnQgX2NyeXB0X2xvYWRfdGNy eXB0KHN0cnVjdCBjcnlwdF9kZXZpY2UgKmNkLCBzdHJ1Y3QgY3J5cHRfcGFyYW1zX3Rjcnlw CiAJcmV0dXJuIHI7CiB9CiAKK3N0YXRpYyBpbnQgX2NyeXB0X2xvYWRfZ2VsaShzdHJ1Y3Qg Y3J5cHRfZGV2aWNlICpjZCwgc3RydWN0IGNyeXB0X3BhcmFtc19nZWxpICpwYXJhbXMpCit7 CisJaW50IHI7CisKKwlpZiAoIXBhcmFtcykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyID0g aW5pdF9jcnlwdG8oY2QpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisKKwltZW1jcHko JmNkLT51LmdlbGkucGFyYW1zLCBwYXJhbXMsIHNpemVvZigqcGFyYW1zKSk7CisKKwlyID0g R0VMSV9yZWFkX3BoZHIoY2QsICZjZC0+dS5nZWxpLmhkciwgJmNkLT51LmdlbGkucGFyYW1z KTsKKworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisKKwlpZiAoIWNkLT50eXBlICYmICEo Y2QtPnR5cGUgPSBzdHJkdXAoQ1JZUFRfR0VMSSkpKQorCQlyZXR1cm4gLUVOT01FTTsKKwor CXJldHVybiByOworfQorCiBzdGF0aWMgaW50IF9jcnlwdF9sb2FkX3Zlcml0eShzdHJ1Y3Qg Y3J5cHRfZGV2aWNlICpjZCwgc3RydWN0IGNyeXB0X3BhcmFtc192ZXJpdHkgKnBhcmFtcykK IHsKIAlpbnQgcjsKQEAgLTY4Myw2ICs3MTcsOSBAQCBzdGF0aWMgaW50IF9pbml0X2J5X25h bWVfY3J5cHQoc3RydWN0IGNyeXB0X2RldmljZSAqY2QsIGNvbnN0IGNoYXIgKm5hbWUpCiAJ fSBlbHNlIGlmIChpc1RDUllQVChjZC0+dHlwZSkpIHsKIAkJciA9IFRDUllQVF9pbml0X2J5 X25hbWUoY2QsIG5hbWUsICZkbWQsICZjZC0+ZGV2aWNlLAogCQkJCQkmY2QtPnUudGNyeXB0 LnBhcmFtcywgJmNkLT51LnRjcnlwdC5oZHIpOworCX0gZWxzZSBpZiAoaXNHRUxJKGNkLT50 eXBlKSkgeworCQkvL0ZJWE1FIHIgPSBHRUxJX2luaXRfYnlfbmFtZShjZCwgbmFtZSwgJmRt ZCwgJmNkLT5kZXZpY2UsCisJCS8vRklYTUUJCQkmY2QtPnUuZ2VsaS5wYXJhbXMsICZjZC0+ dS5nZWxpLmhkcik7CiAJfQogb3V0OgogCWNyeXB0X2ZyZWVfdm9sdW1lX2tleShkbWQudS5j cnlwdC52ayk7CkBAIC03OTAsNiArODI3LDggQEAgaW50IGNyeXB0X2luaXRfYnlfbmFtZV9h bmRfaGVhZGVyKHN0cnVjdCBjcnlwdF9kZXZpY2UgKipjZCwKIAkJCSgqY2QpLT50eXBlID0g c3RyZHVwKENSWVBUX1ZFUklUWSk7CiAJCWVsc2UgaWYgKCFzdHJuY21wKENSWVBUX1RDUllQ VCwgZG1kLnV1aWQsIHNpemVvZihDUllQVF9UQ1JZUFQpLTEpKQogCQkJKCpjZCktPnR5cGUg PSBzdHJkdXAoQ1JZUFRfVENSWVBUKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAoQ1JZUFRfR0VM SSwgZG1kLnV1aWQsIHNpemVvZihDUllQVF9HRUxJKS0xKSkKKwkJCSgqY2QpLT50eXBlID0g c3RyZHVwKENSWVBUX0dFTEkpOwogCQllbHNlCiAJCQlsb2dfZGJnKCJVbmtub3duIFVVSUQg c2V0LCBzb21lIHBhcmFtZXRlcnMgYXJlIG5vdCBzZXQuIik7CiAJfSBlbHNlCkBAIC0xMTc3 LDYgKzEyMTYsMTIgQEAgaW50IGNyeXB0X2xvYWQoc3RydWN0IGNyeXB0X2RldmljZSAqY2Qs CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlyID0gX2NyeXB0X2xvYWRfdGNyeXB0KGNk LCBwYXJhbXMpOworCX0gZWxzZSBpZiAoaXNHRUxJKHJlcXVlc3RlZF90eXBlKSkgeworCQlp ZiAoY2QtPnR5cGUgJiYgIWlzR0VMSShjZC0+dHlwZSkpIHsKKwkJCWxvZ19kYmcoIkNvbnRl eHQgaXMgYWxyZWFkeSBpbml0aWFsaXNlZCB0byB0eXBlICVzIiwgY2QtPnR5cGUpOworCQkJ cmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJciA9IF9jcnlwdF9sb2FkX2dlbGkoY2QsIHBhcmFt cyk7CiAJfSBlbHNlCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0yMDMyLDYgKzIwNzcsMTEg QEAgaW50IGNyeXB0X2FjdGl2YXRlX2J5X3ZvbHVtZV9rZXkoc3RydWN0IGNyeXB0X2Rldmlj ZSAqY2QsCiAJCQlyZXR1cm4gMDsKIAkJciA9IFRDUllQVF9hY3RpdmF0ZShjZCwgbmFtZSwg JmNkLT51LnRjcnlwdC5oZHIsCiAJCQkJICAgICZjZC0+dS50Y3J5cHQucGFyYW1zLCBmbGFn cyk7CisJfSBlbHNlIGlmIChpc0dFTEkoY2QtPnR5cGUpKSB7CisJCWlmICghbmFtZSkKKwkJ CXJldHVybiAwOworCQkvL0ZJWE1FIHIgPSBHRUxJX2FjdGl2YXRlKGNkLCBuYW1lLCAmY2Qt PnUuZ2VsaS5oZHIsCisJCS8vRklYTUUJCSAgICAmY2QtPnUuZ2VsaS5wYXJhbXMsIGZsYWdz KTsKIAl9IGVsc2UKIAkJbG9nX2VycihjZCwgXygiRGV2aWNlIHR5cGUgaXMgbm90IHByb3Bl cmx5IGluaXRpYWxpc2VkLlxuIikpOwogCkBAIC0yMTE1LDYgKzIxNjUsOCBAQCBpbnQgY3J5 cHRfdm9sdW1lX2tleV9nZXQoc3RydWN0IGNyeXB0X2RldmljZSAqY2QsCiAJCQkJCXBhc3Nw aHJhc2Vfc2l6ZSwgJmNkLT51Lmx1a3MxLmhkciwgJnZrLCBjZCk7CiAJfSBlbHNlIGlmIChp c1RDUllQVChjZC0+dHlwZSkpIHsKIAkJciA9IFRDUllQVF9nZXRfdm9sdW1lX2tleShjZCwg JmNkLT51LnRjcnlwdC5oZHIsICZjZC0+dS50Y3J5cHQucGFyYW1zLCAmdmspOworCX0gZWxz ZSBpZiAoaXNHRUxJKGNkLT50eXBlKSkgeworCQkvL0ZJWE1FIHIgPSBHRUxJX2dldF92b2x1 bWVfa2V5KGNkLCAmY2QtPnUuZ2VsaS5oZHIsICZjZC0+dS5nZWxpLnBhcmFtcywgJnZrKTsK IAl9IGVsc2UKIAkJbG9nX2VycihjZCwgXygiVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBv cnRlZCBmb3IgJXMgY3J5cHQgZGV2aWNlLlxuIiksIGNkLT50eXBlID86ICIobm9uZSkiKTsK IApAQCAtMjI4OSw2ICsyMzQxLDggQEAgaW50IGNyeXB0X2R1bXAoc3RydWN0IGNyeXB0X2Rl dmljZSAqY2QpCiAJCXJldHVybiBfdmVyaXR5X2R1bXAoY2QpOwogCWVsc2UgaWYgKGlzVENS WVBUKGNkLT50eXBlKSkKIAkJcmV0dXJuIFRDUllQVF9kdW1wKGNkLCAmY2QtPnUudGNyeXB0 LmhkciwgJmNkLT51LnRjcnlwdC5wYXJhbXMpOworCWVsc2UgaWYgKGlzR0VMSShjZC0+dHlw ZSkpCisJCXJldHVybiBHRUxJX2R1bXAoY2QsICZjZC0+dS5nZWxpLmhkciwgJmNkLT51Lmdl bGkucGFyYW1zKTsKIAogCWxvZ19lcnIoY2QsIF8oIkR1bXAgb3BlcmF0aW9uIGlzIG5vdCBz dXBwb3J0ZWQgZm9yIHRoaXMgZGV2aWNlIHR5cGUuXG4iKSk7CiAJcmV0dXJuIC1FSU5WQUw7 CkBAIC0yMzMzLDYgKzIzODcsMTAgQEAgY29uc3QgY2hhciAqY3J5cHRfZ2V0X2NpcGhlcihz dHJ1Y3QgY3J5cHRfZGV2aWNlICpjZCkKIAlpZiAoaXNUQ1JZUFQoY2QtPnR5cGUpKQogCQly ZXR1cm4gY2QtPnUudGNyeXB0LnBhcmFtcy5jaXBoZXI7CiAKKwlpZiAoaXNHRUxJKGNkLT50 eXBlKSkKKwkJcmV0dXJuICJhZXMiOworCQkvL0ZJWE1FIHJldHVybiBjZC0+dS5nZWxpLnBh cmFtcy5jaXBoZXI7CisKIAlpZiAoIWNkLT50eXBlICYmICFfaW5pdF9ieV9uYW1lX2NyeXB0 X25vbmUoY2QpKQogCQlyZXR1cm4gY2QtPnUubm9uZS5jaXBoZXI7CiAKQEAgLTIzNTMsNiAr MjQxMSwxMCBAQCBjb25zdCBjaGFyICpjcnlwdF9nZXRfY2lwaGVyX21vZGUoc3RydWN0IGNy eXB0X2RldmljZSAqY2QpCiAJaWYgKGlzVENSWVBUKGNkLT50eXBlKSkKIAkJcmV0dXJuIGNk LT51LnRjcnlwdC5wYXJhbXMubW9kZTsKIAorCWlmIChpc0dFTEkoY2QtPnR5cGUpKQorCQly ZXR1cm4gInh0cy1ieXRlNjQiOworCQkvL0ZJWE1FIHJldHVybiBjZC0+dS5nZWxpLnBhcmFt cy5tb2RlOworCiAJaWYgKCFjZC0+dHlwZSAmJiAhX2luaXRfYnlfbmFtZV9jcnlwdF9ub25l KGNkKSkKIAkJcmV0dXJuIGNkLT51Lm5vbmUuY2lwaGVyX21vZGU7CiAKQEAgLTIzOTcsNiAr MjQ1OSwxMCBAQCBpbnQgY3J5cHRfZ2V0X3ZvbHVtZV9rZXlfc2l6ZShzdHJ1Y3QgY3J5cHRf ZGV2aWNlICpjZCkKIAlpZiAoaXNUQ1JZUFQoY2QtPnR5cGUpKQogCQlyZXR1cm4gY2QtPnUu dGNyeXB0LnBhcmFtcy5rZXlfc2l6ZTsKIAorCWlmIChpc0dFTEkoY2QtPnR5cGUpKQorCQly ZXR1cm4gMjU2OworCQkvL0ZJWE1FIHJldHVybiBjZC0+dS5nZWxpLnBhcmFtcy5rZXlfc2l6 ZTsKKwogCWlmICghY2QtPnR5cGUgJiYgIV9pbml0X2J5X25hbWVfY3J5cHRfbm9uZShjZCkp CiAJCXJldHVybiBjZC0+dS5ub25lLmtleV9zaXplOwogCkBAIC0yNDM0LDYgKzI1MDAsNyBA QCB1aW50NjRfdCBjcnlwdF9nZXRfaXZfb2Zmc2V0KHN0cnVjdCBjcnlwdF9kZXZpY2UgKmNk KQogCWlmIChpc1RDUllQVChjZC0+dHlwZSkpCiAJCXJldHVybiBUQ1JZUFRfZ2V0X2l2X29m ZnNldChjZCwgJmNkLT51LnRjcnlwdC5oZHIsICZjZC0+dS50Y3J5cHQucGFyYW1zKTsKIAor CS8vRklYTUU6IEdFTEk/CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9jcnlw dHNldHVwLmMgYi9zcmMvY3J5cHRzZXR1cC5jCmluZGV4IDJkNmRkYWYuLmE2NjVmZWEgMTAw NjQ0Ci0tLSBhL3NyYy9jcnlwdHNldHVwLmMKKysrIGIvc3JjL2NyeXB0c2V0dXAuYwpAQCAt MzgyLDYgKzM4MiwxMDEgQEAgb3V0OgogCXJldHVybiByOwogfQogCitzdGF0aWMgaW50IGdl bGlfbG9hZChzdHJ1Y3QgY3J5cHRfZGV2aWNlICpjZCwgc3RydWN0IGNyeXB0X3BhcmFtc19n ZWxpICpwYXJhbXMpCit7CisJaW50IHIsIGVwZXJtID0gMDsKKworCWRvIHsKKwkJbG9nX3N0 ZCgiR0VMSSB0cmFja2luZzogNVxuIik7CisJCXIgPSBjcnlwdF9sb2FkKGNkLCBDUllQVF9H RUxJLCBwYXJhbXMpOworCQlsb2dfc3RkKCJHRUxJIHRyYWNraW5nOiA2IGNyeXB0X2xvYWQg cmV0dXJuZWQgJWlcbiIsIHIpOworCisJCWlmIChyID09IC1FUEVSTSkgeworCQkJbG9nX2Vy cihfKCJObyBkZXZpY2UgaGVhZGVyIGRldGVjdGVkIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRl cnMuXG4iKSk7CisJCQllcGVybSA9IDE7CisJCX0KKworI2lmIDAKKwkJaWYgKHIgPCAwKSB7 CisJCQljcnlwdF9zYWZlX2ZyZWUoQ09OU1RfQ0FTVChjaGFyKilwYXJhbXMtPnBhc3NwaHJh c2UpOworCQkJcGFyYW1zLT5wYXNzcGhyYXNlID0gTlVMTDsKKwkJCXBhcmFtcy0+cGFzc3Bo cmFzZV9zaXplID0gMDsKKwkJfQorI2VuZGlmCisJCWNoZWNrX3NpZ25hbCgmcik7CisJfSB3 aGlsZSAoMCk7CisKKwkvKiBSZXBvcnQgd3JvbmcgcGFzc3BocmFzZSBpZiBhdCBsZWFzdCBv bmUgdHJ5IGZhaWxlZCAqLworCWlmIChlcGVybSAmJiByID09IC1FUElQRSkKKwkJciA9IC1F UEVSTTsKKworCWxvZ19zdGQoIkdFTEkgdHJhY2tpbmc6IDdcbiIpOworCXJldHVybiByOwor fQorCitzdGF0aWMgaW50IGFjdGlvbl9vcGVuX2dlbGkodm9pZCkKK3sKKwlzdHJ1Y3QgY3J5 cHRfZGV2aWNlICpjZCA9IE5VTEw7CisJc3RydWN0IGNyeXB0X3BhcmFtc19nZWxpIHBhcmFt cyA9IHsKKwkJLmR1bW15ID0gMCwKKwl9OworCWNvbnN0IGNoYXIgKmFjdGl2YXRlZF9uYW1l OworCXVpbnQzMl90IGFjdGl2YXRlX2ZsYWdzID0gMDsKKwlpbnQgcjsKKworCWFjdGl2YXRl ZF9uYW1lID0gb3B0X3Rlc3RfcGFzc3BocmFzZSA/IE5VTEwgOiBhY3Rpb25fYXJndlsxXTsK KworCWxvZ19zdGQoIkdFTEkgdHJhY2tpbmc6IDlcbiIpOworCWlmICgociA9IGNyeXB0X2lu aXQoJmNkLCBhY3Rpb25fYXJndlswXSkpKQorCQlnb3RvIG91dDsKKworCWxvZ19zdGQoIkdF TEkgdHJhY2tpbmc6IDEwXG4iKTsKKwlyID0gZ2VsaV9sb2FkKGNkLCAmcGFyYW1zKTsKKwlp ZiAociA8IDApCisJCWdvdG8gb3V0OworCisJbG9nX3N0ZCgiR0VMSSB0cmFja2luZzogMTFc biIpOworCV9zZXRfYWN0aXZhdGlvbl9mbGFncygmYWN0aXZhdGVfZmxhZ3MpOworCisJbG9n X3N0ZCgiR0VMSSB0cmFja2luZzogMTJcbiIpOworCWlmIChhY3RpdmF0ZWRfbmFtZSkKKwkJ ciA9IGNyeXB0X2FjdGl2YXRlX2J5X3ZvbHVtZV9rZXkoY2QsIGFjdGl2YXRlZF9uYW1lLCBO VUxMLCAwLCBhY3RpdmF0ZV9mbGFncyk7CitvdXQ6CisJbG9nX3N0ZCgiR0VMSSB0cmFja2lu ZzogMTNcbiIpOworCWNyeXB0X2ZyZWUoY2QpOworCXJldHVybiByOworfQorCitzdGF0aWMg aW50IGFjdGlvbl9nZWxpRHVtcCh2b2lkKQoreworCXN0cnVjdCBjcnlwdF9kZXZpY2UgKmNk ID0gTlVMTDsKKwlzdHJ1Y3QgY3J5cHRfcGFyYW1zX2dlbGkgcGFyYW1zID0geworCQkuZHVt bXkgPSAwLAorCX07CisJaW50IHI7CisKKwlsb2dfc3RkKCJHRUxJIHRyYWNraW5nOiAxXG4i KTsKKwlpZiAoKHIgPSBjcnlwdF9pbml0KCZjZCwgYWN0aW9uX2FyZ3ZbMF0pKSkKKwkJZ290 byBvdXQ7CisKKwlsb2dfc3RkKCJHRUxJIHRyYWNraW5nOiAyXG4iKTsKKwlyID0gZ2VsaV9s b2FkKGNkLCAmcGFyYW1zKTsKKwlpZiAociA8IDApCisJCWdvdG8gb3V0OworCisjaWYgMAor CWlmIChvcHRfZHVtcF9tYXN0ZXJfa2V5KQorCQlyID0gZ2VsaUR1bXBfd2l0aF92b2x1bWVf a2V5KGNkKTsKKwllbHNlCisjZW5kaWYKKwlsb2dfc3RkKCJHRUxJIHRyYWNraW5nOiAzXG4i KTsKKwkJciA9IGNyeXB0X2R1bXAoY2QpOworb3V0OgorCWNyeXB0X2ZyZWUoY2QpOworCWxv Z19zdGQoIkdFTEkgdHJhY2tpbmc6IDRcbiIpOworCXJldHVybiByOworfQorCiBzdGF0aWMg aW50IGFjdGlvbl9jbG9zZSh2b2lkKQogewogCXN0cnVjdCBjcnlwdF9kZXZpY2UgKmNkID0g TlVMTDsKQEAgLTEyOTUsNiArMTM5MCw3IEBAIG91dDoKIAogc3RhdGljIGludCBhY3Rpb25f b3Blbih2b2lkKQogeworCWxvZ19zdGQoIkdFTEkgdHJhY2tpbmc6IDE0XG4iKTsKIAlpZiAo IW9wdF90eXBlKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMTMxNCw2ICsxNDEwLDExIEBA IHN0YXRpYyBpbnQgYWN0aW9uX29wZW4odm9pZCkKIAkJaWYgKGFjdGlvbl9hcmdjIDwgMiAm JiAhb3B0X3Rlc3RfcGFzc3BocmFzZSkKIAkJCWdvdG8gYXJnczsKIAkJcmV0dXJuIGFjdGlv bl9vcGVuX3RjcnlwdCgpOworCX0gZWxzZSBpZiAoIXN0cmNtcChvcHRfdHlwZSwgImdlbGki KSkgeworCQlsb2dfc3RkKCJHRUxJIHRyYWNraW5nOiA4XG4iKTsKKwkJaWYgKGFjdGlvbl9h cmdjIDwgMikKKwkJCWdvdG8gYXJnczsKKwkJcmV0dXJuIGFjdGlvbl9vcGVuX2dlbGkoKTsK IAl9CiAKIAlsb2dfZXJyKF8oIlVucmVjb2duaXplZCBtZXRhZGF0YSBkZXZpY2UgdHlwZSAl cy5cbiIpLCBvcHRfdHlwZSk7CkBAIC0xMzg4LDYgKzE0ODksNyBAQCBzdGF0aWMgc3RydWN0 IGFjdGlvbl90eXBlIHsKIAl7ICJpc0x1a3MiLCAgICAgICBhY3Rpb25faXNMdWtzLCAgICAg ICAxLCAwLCBOXygiPGRldmljZT4iKSwgTl8oInRlc3RzIDxkZXZpY2U+IGZvciBMVUtTIHBh cnRpdGlvbiBoZWFkZXIiKSB9LAogCXsgImx1a3NEdW1wIiwgICAgIGFjdGlvbl9sdWtzRHVt cCwgICAgIDEsIDEsIE5fKCI8ZGV2aWNlPiIpLCBOXygiZHVtcCBMVUtTIHBhcnRpdGlvbiBp bmZvcm1hdGlvbiIpIH0sCiAJeyAidGNyeXB0RHVtcCIsICAgYWN0aW9uX3RjcnlwdER1bXAs ICAgMSwgMSwgTl8oIjxkZXZpY2U+IiksIE5fKCJkdW1wIFRDUllQVCBkZXZpY2UgaW5mb3Jt YXRpb24iKSB9LAorCXsgImdlbGlEdW1wIiwgICAgIGFjdGlvbl9nZWxpRHVtcCwgICAgIDEs IDEsIE5fKCI8ZGV2aWNlPiIpLCBOXygiZHVtcCBHRUxJIGRldmljZSBpbmZvcm1hdGlvbiIp IH0sCiAJeyAibHVrc1N1c3BlbmQiLCAgYWN0aW9uX2x1a3NTdXNwZW5kLCAgMSwgMSwgTl8o IjxkZXZpY2U+IiksIE5fKCJTdXNwZW5kIExVS1MgZGV2aWNlIGFuZCB3aXBlIGtleSAoYWxs IElPcyBhcmUgZnJvemVuKS4iKSB9LAogCXsgImx1a3NSZXN1bWUiLCAgIGFjdGlvbl9sdWtz UmVzdW1lLCAgIDEsIDEsIE5fKCI8ZGV2aWNlPiIpLCBOXygiUmVzdW1lIHN1c3BlbmRlZCBM VUtTIGRldmljZS4iKSB9LAogCXsgImx1a3NIZWFkZXJCYWNrdXAiLCBhY3Rpb25fbHVrc0Jh Y2t1cCwxLDEsIE5fKCI8ZGV2aWNlPiIpLCBOXygiQmFja3VwIExVS1MgZGV2aWNlIGhlYWRl ciBhbmQga2V5c2xvdHMiKSB9LApAQCAtMTUyNCw3ICsxNjI2LDcgQEAgaW50IG1haW4oaW50 IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogCQl7ICJ0Y3J5cHQtc3lzdGVtIiwgICAgICdc MCcsIFBPUFRfQVJHX05PTkUsICZvcHRfdGNyeXB0X3N5c3RlbSwgICAgICAgICAwLCBOXygi RGV2aWNlIGlzIHN5c3RlbSBUQ1JZUFQgZHJpdmUgKHdpdGggYm9vdGxvYWRlcikuIiksIE5V TEwgfSwKIAkJeyAidGNyeXB0LWJhY2t1cCIsICAgICAnXDAnLCBQT1BUX0FSR19OT05FLCAm b3B0X3RjcnlwdF9iYWNrdXAsICAgICAgICAgMCwgTl8oIlVzZSBiYWNrdXAgKHNlY29uZGFy eSkgVENSWVBUIGhlYWRlci4iKSwgTlVMTCB9LAogCQl7ICJ2ZXJhY3J5cHQiLCAgICAgICAg ICdcMCcsIFBPUFRfQVJHX05PTkUsICZvcHRfdmVyYWNyeXB0LCAgICAgICAgICAgICAwLCBO XygiU2NhbiBhbHNvIGZvciBWZXJhQ3J5cHQgY29tcGF0aWJsZSBkZXZpY2UuIiksIE5VTEwg fSwKLQkJeyAidHlwZSIsICAgICAgICAgICAgICAgJ00nLCBQT1BUX0FSR19TVFJJTkcsICZv cHRfdHlwZSwgICAgICAgICAgICAgICAgMCwgTl8oIlR5cGUgb2YgZGV2aWNlIG1ldGFkYXRh OiBsdWtzLCBwbGFpbiwgbG9vcGFlcywgdGNyeXB0LiIpLCBOVUxMIH0sCisJCXsgInR5cGUi LCAgICAgICAgICAgICAgICdNJywgUE9QVF9BUkdfU1RSSU5HLCAmb3B0X3R5cGUsICAgICAg ICAgICAgICAgIDAsIE5fKCJUeXBlIG9mIGRldmljZSBtZXRhZGF0YTogbHVrcywgcGxhaW4s IGxvb3BhZXMsIHRjcnlwdCwgZ2VsaS4iKSwgTlVMTCB9LAogCQl7ICJmb3JjZS1wYXNzd29y ZCIsICAgICdcMCcsIFBPUFRfQVJHX05PTkUsICZvcHRfZm9yY2VfcGFzc3dvcmQsICAgICAg ICAwLCBOXygiRGlzYWJsZSBwYXNzd29yZCBxdWFsaXR5IGNoZWNrIChpZiBlbmFibGVkKS4i KSwgTlVMTCB9LAogCQl7ICJwZXJmLXNhbWVfY3B1X2NyeXB0IiwnXDAnLCBQT1BUX0FSR19O T05FLCAmb3B0X3BlcmZfc2FtZV9jcHVfY3J5cHQsICAwLCBOXygiVXNlIGRtLWNyeXB0IHNh bWVfY3B1X2NyeXB0IHBlcmZvcm1hbmNlIGNvbXBhdGliaWxpdHkgb3B0aW9uLiIpLCBOVUxM IH0sCiAJCXsgInBlcmYtc3VibWl0X2Zyb21fY3J5cHRfY3B1cyIsJ1wwJywgUE9QVF9BUkdf Tk9ORSwgJm9wdF9wZXJmX3N1Ym1pdF9mcm9tX2NyeXB0X2NwdXMsMCxOXygiVXNlIGRtLWNy eXB0IHN1Ym1pdF9mcm9tX2NyeXB0X2NwdXMgcGVyZm9ybWFuY2UgY29tcGF0aWJpbGl0eSBv cHRpb24uIiksIE5VTEwgfSwKQEAgLTE2MzEsNiArMTczMyw4IEBAIGludCBtYWluKGludCBh cmdjLCBjb25zdCBjaGFyICoqYXJndikKIAkJb3B0X3R5cGUgPSAidGNyeXB0IjsKIAl9IGVs c2UgaWYgKCFzdHJjbXAoYW5hbWUsICJ0Y3J5cHREdW1wIikpIHsKIAkJb3B0X3R5cGUgPSAi dGNyeXB0IjsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYW5hbWUsICJnZWxpRHVtcCIpKSB7CisJ CW9wdF90eXBlID0gImdlbGkiOwogCX0gZWxzZSBpZiAoIXN0cmNtcChhbmFtZSwgInJlbW92 ZSIpIHx8CiAJCSAgICFzdHJjbXAoYW5hbWUsICJwbGFpbkNsb3NlIikgfHwKIAkJICAgIXN0 cmNtcChhbmFtZSwgImx1a3NDbG9zZSIpIHx8Ci0tIAoxLjkuMQoK --------------894632D45E23B5EF56047DCB Content-Type: text/plain; charset=UTF-8; name="0001-Initial-version-of-cryptsetup-with-GELI-support.patch.04" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="0001-Initial-version-of-cryptsetup-with-GELI-support.patch.0"; filename*1="4" RnJvbSBmNmM4NGI1YTE4MjNiYmZkNTc2Zjk5YmQzYzAzYjQwZTQ3MDYzZDdjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBDYXJsLURhbmllbCBIYWlsZmluZ2VyIDxjLWQuaGFp bGZpbmdlci5kZXZlbC4yMDA2QGdteC5uZXQ+CkRhdGU6IEZyaSwgMzAgRGVjIDIwMTYgMDU6 NDA6NDQgKzAxMDAKU3ViamVjdDogW1BBVENIXSBJbml0aWFsIHZlcnNpb24gb2YgY3J5cHRz ZXR1cCB3aXRoIEdFTEkgc3VwcG9ydC4gT25seSBkdW1waW5nCiBpcyBzdXBwb3J0ZWQgcmln aHQgbm93LgoKLS0tCiBjb25maWd1cmUuYWMgICAgICAgICB8ICAgIDEgKwogbGliL01ha2Vm aWxlLmFtICAgICAgfCAgICA2ICstCiBsaWIvZ2VsaS9NYWtlZmlsZS5hbSB8ICAgMTQgKwog bGliL2dlbGkvUkVBRE1FLnR4dCAgfCAgICA0ICsKIGxpYi9nZWxpL2dlbGkuYyAgICAgIHwg MTE1NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KwogbGliL2dlbGkvZ2VsaS5oICAgICAgfCAgMTAyICsrKysrCiBsaWIvbGliY3J5cHRzZXR1 cC5oICB8ICAgMTMgKwogbGliL3NldHVwLmMgICAgICAgICAgfCAgIDY3ICsrKwogc3JjL2Ny eXB0c2V0dXAuYyAgICAgfCAgMTA2ICsrKystCiA5IGZpbGVzIGNoYW5nZWQsIDE0NjcgaW5z ZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvZ2Vs aS9NYWtlZmlsZS5hbQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9nZWxpL1JFQURNRS50eHQK IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvZ2VsaS9nZWxpLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBsaWIvZ2VsaS9nZWxpLmgKCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1 cmUuYWMKaW5kZXggZDFmMDI5YS4uMWM0NmE3ZCAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFj CisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtNDY3LDYgKzQ2Nyw3IEBAIGxpYi9sdWtzMS9NYWtl ZmlsZQogbGliL2xvb3BhZXMvTWFrZWZpbGUKIGxpYi92ZXJpdHkvTWFrZWZpbGUKIGxpYi90 Y3J5cHQvTWFrZWZpbGUKK2xpYi9nZWxpL01ha2VmaWxlCiBzcmMvTWFrZWZpbGUKIHBvL01h a2VmaWxlLmluCiBtYW4vTWFrZWZpbGUKZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS5hbSBi L2xpYi9NYWtlZmlsZS5hbQppbmRleCA2NjYyNTY4Li41Yjk5YTdjIDEwMDY0NAotLS0gYS9s aWIvTWFrZWZpbGUuYW0KKysrIGIvbGliL01ha2VmaWxlLmFtCkBAIC0xLDQgKzEsNCBAQAot U1VCRElSUyA9IGNyeXB0b19iYWNrZW5kIGx1a3MxIGxvb3BhZXMgdmVyaXR5IHRjcnlwdAor U1VCRElSUyA9IGNyeXB0b19iYWNrZW5kIGx1a3MxIGxvb3BhZXMgdmVyaXR5IHRjcnlwdCBn ZWxpCiAKIG1vZHVsZWRpciA9ICQobGliZGlyKS9jcnlwdHNldHVwCiAKQEAgLTEyLDYgKzEy LDcgQEAgQU1fQ1BQRkxBR1MgPSAtaW5jbHVkZSBjb25maWcuaCBcCiAJLUkkKHRvcF9zcmNk aXIpL2xpYi9sb29wYWVzCQlcCiAJLUkkKHRvcF9zcmNkaXIpL2xpYi92ZXJpdHkJCVwKIAkt SSQodG9wX3NyY2RpcikvbGliL3RjcnlwdAkJXAorCS1JJCh0b3Bfc3JjZGlyKS9saWIvZ2Vs aQkJXAogCS1EREFUQURJUj1cIiIkKGRhdGFkaXIpIlwiCQlcCiAJLURMSUJESVI9XCIiJChs aWJkaXIpIlwiCQlcCiAJLURQUkVGSVg9XCIiJChwcmVmaXgpIlwiCQlcCkBAIC0yNSw3ICsy Niw4IEBAIGNvbW1vbl9sZGFkZCA9IFwKIAlsdWtzMS9saWJsdWtzMS5sYQkJCVwKIAlsb29w YWVzL2xpYmxvb3BhZXMubGEJCQlcCiAJdmVyaXR5L2xpYnZlcml0eS5sYQkJCVwKLQl0Y3J5 cHQvbGlidGNyeXB0LmxhCisJdGNyeXB0L2xpYnRjcnlwdC5sYQkJCVwKKwlnZWxpL2xpYmdl bGkubGEKIAogbGliY3J5cHRzZXR1cF9sYV9ERVBFTkRFTkNJRVMgPSAkKGNvbW1vbl9sZGFk ZCkgbGliY3J5cHRzZXR1cC5zeW0KIApkaWZmIC0tZ2l0IGEvbGliL2dlbGkvTWFrZWZpbGUu YW0gYi9saWIvZ2VsaS9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi45NmFlZjRlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2dlbGkvTWFrZWZpbGUu YW0KQEAgLTAsMCArMSwxNCBAQAorbW9kdWxlZGlyID0gJChsaWJkaXIpL2NyeXB0c2V0dXAK Kworbm9pbnN0X0xUTElCUkFSSUVTID0gbGliZ2VsaS5sYQorCitsaWJnZWxpX2xhX0NGTEFH UyA9IC1XYWxsICQoQU1fQ0ZMQUdTKSBAQ1JZUFRPX0NGTEFHU0AKKworbGliZ2VsaV9sYV9T T1VSQ0VTID0gXAorCWdlbGkuYyBcCisJZ2VsaS5oCisKK0FNX0NQUEZMQUdTID0gLWluY2x1 ZGUgY29uZmlnLmggXAorICAgICAgICAtSSQodG9wX3NyY2RpcikvbGliCQkJXAorICAgICAg ICAtSSQodG9wX3NyY2RpcikvbGliL2NyeXB0b19iYWNrZW5kCisKZGlmZiAtLWdpdCBhL2xp Yi9nZWxpL1JFQURNRS50eHQgYi9saWIvZ2VsaS9SRUFETUUudHh0Cm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MjA3NWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIv Z2VsaS9SRUFETUUudHh0CkBAIC0wLDAgKzEsNCBAQAorVGhlIHVzZXIga2V5IGlzIGRlcml2 ZWQgZnJvbSB0aGUga2V5ZmlsZSBhcyBmb2xsb3dzOgorb3BlbnNzbCBkZ3N0IC1zaGE1MTIg LW1hYyBobWFjIC1tYWNvcHQgaGV4a2V5OjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAgdXNlci5rZXkKKworVXNlIEFFUy1YVFMtMTI4CmRpZmYgLS1naXQgYS9s aWIvZ2VsaS9nZWxpLmMgYi9saWIvZ2VsaS9nZWxpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uZDZlMTk1MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nZWxpL2dl bGkuYwpAQCAtMCwwICsxLDExNTcgQEAKKy8qCisgKiBUQ1JZUFQgKFRydWVDcnlwdC1jb21w YXRpYmxlKSBhbmQgVmVyYUNyeXB0IHZvbHVtZSBoYW5kbGluZworICoKKyAqIENvcHlyaWdo dCAoQykgMjAxMiwgUmVkIEhhdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w eXJpZ2h0IChDKSAyMDEyLTIwMTUsIE1pbGFuIEJyb3oKKyAqCisgKiBUaGlzIGZpbGUgaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgZmlsZSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcg d2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv c3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+Cisj aW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJp bmcuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaW5j bHVkZSAibGliY3J5cHRzZXR1cC5oIgorI2luY2x1ZGUgImdlbGkuaCIKKyNpbmNsdWRlICJp bnRlcm5hbC5oIgorCisjaWYgMAorLyogVENSWVBUIFBCS0RGIHZhcmlhbnRzICovCitzdGF0 aWMgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgbGVnYWN5OjE7CisJdW5zaWduZWQgaW50IHZl cmFjcnlwdDoxOworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqaGFzaDsKKwl1 bnNpZ25lZCBpbnQgaXRlcmF0aW9uczsKK30gdGNyeXB0X2tkZltdID0geworCXsgMCwgMCwg InBia2RmMiIsICJyaXBlbWQxNjAiLCAyMDAwIH0sCisJeyAwLCAwLCAicGJrZGYyIiwgInJp cGVtZDE2MCIsIDEwMDAgfSwKKwl7IDAsIDAsICJwYmtkZjIiLCAic2hhNTEyIiwgICAgMTAw MCB9LAorCXsgMCwgMCwgInBia2RmMiIsICJ3aGlybHBvb2wiLCAxMDAwIH0sCisJeyAxLCAw LCAicGJrZGYyIiwgInNoYTEiLCAgICAgIDIwMDAgfSwKKwl7IDAsIDEsICJwYmtkZjIiLCAi c2hhNTEyIiwgICAgNTAwMDAwIH0sCisJeyAwLCAxLCAicGJrZGYyIiwgInJpcGVtZDE2MCIs IDY1NTMzMSB9LAorCXsgMCwgMSwgInBia2RmMiIsICJyaXBlbWQxNjAiLCAzMjc2NjEgfSwg Ly8gYm9vdCBvbmx5CisJeyAwLCAxLCAicGJrZGYyIiwgIndoaXJscG9vbCIsIDUwMDAwMCB9 LAorCXsgMCwgMSwgInBia2RmMiIsICJzaGEyNTYiLCAgICA1MDAwMDAgfSwgLy8gVmVyYUNy eXB0IDEuMGYKKwl7IDAsIDEsICJwYmtkZjIiLCAic2hhMjU2IiwgICAgMjAwMDAwIH0sIC8v IGJvb3Qgb25seQorCXsgMCwgMCwgTlVMTCwgICAgIE5VTEwsICAgICAgICAwIH0KK307CisK K3N0cnVjdCB0Y3J5cHRfYWxnIHsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJdW5zaWduZWQg aW50IGtleV9zaXplOworCQl1bnNpZ25lZCBpbnQgaXZfc2l6ZTsKKwkJdW5zaWduZWQgaW50 IGtleV9vZmZzZXQ7CisJCXVuc2lnbmVkIGludCBpdl9vZmZzZXQ7IC8qIG9yIHR3ZWFrIGtl eSBvZmZzZXQgKi8KKwkJdW5zaWduZWQgaW50IGtleV9leHRyYV9zaXplOworfTsKKworc3Ry dWN0IHRjcnlwdF9hbGdzIHsKKwl1bnNpZ25lZCBpbnQgbGVnYWN5OjE7CisJdW5zaWduZWQg aW50IGNoYWluX2NvdW50OworCXVuc2lnbmVkIGludCBjaGFpbl9rZXlfc2l6ZTsKKwljb25z dCBjaGFyICpsb25nX25hbWU7CisJY29uc3QgY2hhciAqbW9kZTsKKwlzdHJ1Y3QgdGNyeXB0 X2FsZyBjaXBoZXJbM107Cit9OworCisvKiBUQ1JZUFQgY2lwaGVyIHZhcmlhbnRzICovCitz dGF0aWMgc3RydWN0IHRjcnlwdF9hbGdzIHRjcnlwdF9jaXBoZXJbXSA9IHsKKy8qIFhUUyBt b2RlICovCit7MCwxLDY0LCJhZXMiLCJ4dHMtcGxhaW42NCIsCisJe3siYWVzIiwgICAgNjQs MTYsMCwzMiwwfX19LAorezAsMSw2NCwic2VycGVudCIsInh0cy1wbGFpbjY0IiwKKwl7eyJz ZXJwZW50Iiw2NCwxNiwwLDMyLDB9fX0sCit7MCwxLDY0LCJ0d29maXNoIiwieHRzLXBsYWlu NjQiLAorCXt7InR3b2Zpc2giLDY0LDE2LDAsMzIsMH19fSwKK3swLDIsMTI4LCJ0d29maXNo LWFlcyIsInh0cy1wbGFpbjY0IiwKKwl7eyJ0d29maXNoIiw2NCwxNiwgMCw2NCwwfSwKKwkg eyJhZXMiLCAgICA2NCwxNiwzMiw5NiwwfX19LAorezAsMywxOTIsInNlcnBlbnQtdHdvZmlz aC1hZXMiLCJ4dHMtcGxhaW42NCIsCisJe3sic2VycGVudCIsNjQsMTYsIDAsIDk2LDB9LAor CSB7InR3b2Zpc2giLDY0LDE2LDMyLDEyOCwwfSwKKwkgeyJhZXMiLCAgICA2NCwxNiw2NCwx NjAsMH19fSwKK3swLDIsMTI4LCJhZXMtc2VycGVudCIsInh0cy1wbGFpbjY0IiwKKwl7eyJh ZXMiLCAgICA2NCwxNiwgMCw2NCwwfSwKKwkgeyJzZXJwZW50Iiw2NCwxNiwzMiw5NiwwfX19 LAorezAsMywxOTIsImFlcy10d29maXNoLXNlcnBlbnQiLCJ4dHMtcGxhaW42NCIsCisJe3si YWVzIiwgICAgNjQsMTYsIDAsIDk2LDB9LAorCSB7InR3b2Zpc2giLDY0LDE2LDMyLDEyOCww fSwKKwkgeyJzZXJwZW50Iiw2NCwxNiw2NCwxNjAsMH19fSwKK3swLDIsMTI4LCJzZXJwZW50 LXR3b2Zpc2giLCJ4dHMtcGxhaW42NCIsCisJe3sic2VycGVudCIsNjQsMTYsIDAsNjQsMH0s CisJIHsidHdvZmlzaCIsNjQsMTYsMzIsOTYsMH19fSwKKworLyogTFJXIG1vZGUgKi8KK3sw LDEsNDgsImFlcyIsImxydy1iZW5iaSIsCisJe3siYWVzIiwgICAgNDgsMTYsMzIsMCwwfX19 LAorezAsMSw0OCwic2VycGVudCIsImxydy1iZW5iaSIsCisJe3sic2VycGVudCIsNDgsMTYs MzIsMCwwfX19LAorezAsMSw0OCwidHdvZmlzaCIsImxydy1iZW5iaSIsCisJe3sidHdvZmlz aCIsNDgsMTYsMzIsMCwwfX19LAorezAsMiw5NiwidHdvZmlzaC1hZXMiLCJscnctYmVuYmki LAorCXt7InR3b2Zpc2giLDQ4LDE2LDMyLDAsMH0sCisJIHsiYWVzIiwgICAgNDgsMTYsNjQs MCwwfX19LAorezAsMywxNDQsInNlcnBlbnQtdHdvZmlzaC1hZXMiLCJscnctYmVuYmkiLAor CXt7InNlcnBlbnQiLDQ4LDE2LDMyLDAsMH0sCisJIHsidHdvZmlzaCIsNDgsMTYsNjQsMCww fSwKKwkgeyJhZXMiLCAgICA0OCwxNiw5NiwwLDB9fX0sCit7MCwyLDk2LCJhZXMtc2VycGVu dCIsImxydy1iZW5iaSIsCisJe3siYWVzIiwgICAgNDgsMTYsMzIsMCwwfSwKKwkgeyJzZXJw ZW50Iiw0OCwxNiw2NCwwLDB9fX0sCit7MCwzLDE0NCwiYWVzLXR3b2Zpc2gtc2VycGVudCIs Imxydy1iZW5iaSIsCisJe3siYWVzIiwgICAgNDgsMTYsMzIsMCwwfSwKKwkgeyJ0d29maXNo Iiw0OCwxNiw2NCwwLDB9LAorCSB7InNlcnBlbnQiLDQ4LDE2LDk2LDAsMH19fSwKK3swLDIs OTYsInNlcnBlbnQtdHdvZmlzaCIsICJscnctYmVuYmkiLAorCXt7InNlcnBlbnQiLDQ4LDE2 LDMyLDAsMH0sCisJIHsidHdvZmlzaCIsNDgsMTYsNjQsMCwwfX19LAorCisvKiBLZXJuZWwg TFJXIGJsb2NrIHNpemUgaXMgZml4ZWQgdG8gMTYgYnl0ZXMgZm9yIEdGKDJeMTI4KQorICog dGh1cyBjYW5ub3QgYmUgdXNlZCB3aXRoIGJsb3dmaXNoIHdoZXJlIGJsb2NrIGlzIDggYnl0 ZXMuCisgKiBUaGVyZSBhbHNvIG5vIEdGKDJeNjQpIHN1cHBvcnQuCit7MSwxLDY0LCJibG93 ZmlzaF9sZSIsImxydy1iZW5iaSIsCisJIHt7ImJsb3dmaXNoX2xlIiw2NCw4LDMyLDAsMH19 fSwKK3sxLDIsMTEyLCJibG93ZmlzaF9sZS1hZXMiLCJscnctYmVuYmkiLAorCSB7eyJibG93 ZmlzaF9sZSIsNjQsIDgsMzIsMCwwfSwKKwkgIHsiYWVzIiwgICAgICAgIDQ4LDE2LDg4LDAs MH19fSwKK3sxLDMsMTYwLCJzZXJwZW50LWJsb3dmaXNoX2xlLWFlcyIsImxydy1iZW5iaSIs CisJICB7eyJzZXJwZW50IiwgICAgNDgsMTYsIDMyLDAsMH0sCisJICAgeyJibG93ZmlzaF9s ZSIsNjQsIDgsIDY0LDAsMH0sCisJICAgeyJhZXMiLCAgICAgICAgNDgsMTYsMTIwLDAsMH19 fSwqLworCisvKgorICogQ0JDICsgIm91dGVyIiBDQkMgKGJvdGggd2l0aCB3aGl0ZW5pbmcp CisgKiBjaGFpbl9rZXlfc2l6ZTogYWxnX2tleXNfYnl0ZXMgKyBJVl9zZWVkX2J5dGVzICsg d2hpdGVuaW5nX2J5dGVzCisgKi8KK3sxLDEsMzIrMTYrMTYsImFlcyIsImNiYy10Y3ciLAor CXt7ImFlcyIsICAgIDMyLDE2LDMyLDAsMzJ9fX0sCit7MSwxLDMyKzE2KzE2LCJzZXJwZW50 IiwiY2JjLXRjdyIsCisJe3sic2VycGVudCIsMzIsMTYsMzIsMCwzMn19fSwKK3sxLDEsMzIr MTYrMTYsInR3b2Zpc2giLCJjYmMtdGN3IiwKKwl7eyJ0d29maXNoIiwzMiwxNiwzMiwwLDMy fX19LAorezEsMiw2NCsxNisxNiwidHdvZmlzaC1hZXMiLCJjYmNpLXRjcnlwdCIsCisJe3si dHdvZmlzaCIsMzIsMTYsMzIsMCwwfSwKKwkgeyJhZXMiLCAgICAzMiwxNiw2NCwwLDMyfX19 LAorezEsMyw5NisxNisxNiwic2VycGVudC10d29maXNoLWFlcyIsImNiY2ktdGNyeXB0IiwK Kwl7eyJzZXJwZW50IiwzMiwxNiwzMiwwLDB9LAorCSB7InR3b2Zpc2giLDMyLDE2LDY0LDAs MH0sCisJIHsiYWVzIiwgICAgMzIsMTYsOTYsMCwzMn19fSwKK3sxLDIsNjQrMTYrMTYsImFl cy1zZXJwZW50IiwiY2JjaS10Y3J5cHQiLAorCXt7ImFlcyIsICAgIDMyLDE2LDMyLDAsMH0s CisJIHsic2VycGVudCIsMzIsMTYsNjQsMCwzMn19fSwKK3sxLDMsOTYrMTYrMTYsImFlcy10 d29maXNoLXNlcnBlbnQiLCAiY2JjaS10Y3J5cHQiLAorCXt7ImFlcyIsICAgIDMyLDE2LDMy LDAsMH0sCisJIHsidHdvZmlzaCIsMzIsMTYsNjQsMCwwfSwKKwkgeyJzZXJwZW50IiwzMiwx Niw5NiwwLDMyfX19LAorezEsMiw2NCsxNisxNiwic2VycGVudC10d29maXNoIiwgImNiY2kt dGNyeXB0IiwKKwl7eyJzZXJwZW50IiwzMiwxNiwzMiwwLDB9LAorCSB7InR3b2Zpc2giLDMy LDE2LDY0LDAsMzJ9fX0sCit7MSwxLDE2KzgrMTYsImNhc3Q1IiwiY2JjLXRjdyIsCisJe3si Y2FzdDUiLCAgIDE2LDgsMzIsMCwyNH19fSwKK3sxLDEsMjQrOCsxNiwiZGVzM19lZGUiLCJj YmMtdGN3IiwKKwl7eyJkZXMzX2VkZSIsMjQsOCwzMiwwLDI0fX19LAorezEsMSw1Nis4KzE2 LCJibG93ZmlzaF9sZSIsImNiYy10Y3J5cHQiLAorCXt7ImJsb3dmaXNoX2xlIiw1Niw4LDMy LDAsMjR9fX0sCit7MSwyLDg4KzE2KzE2LCJibG93ZmlzaF9sZS1hZXMiLCJjYmMtdGNyeXB0 IiwKKwl7eyJibG93ZmlzaF9sZSIsNTYsIDgsMzIsMCwwfSwKKwkgeyJhZXMiLCAgICAgICAg MzIsMTYsODgsMCwzMn19fSwKK3sxLDMsMTIwKzE2KzE2LCJzZXJwZW50LWJsb3dmaXNoX2xl LWFlcyIsImNiYy10Y3J5cHQiLAorCXt7InNlcnBlbnQiLCAgICAzMiwxNiwgMzIsMCwwfSwK KwkgeyJibG93ZmlzaF9sZSIsNTYsIDgsIDY0LDAsMH0sCisJIHsiYWVzIiwgICAgICAgIDMy LDE2LDEyMCwwLDMyfX19LAore30KK307CisjZW5kaWYKKworc3RhdGljIGludCBHRUxJX2hk cl9mcm9tX2Rpc2soc3RydWN0IGdlbGlfcGhkciAqaGRyLAorCQkJCXN0cnVjdCBjcnlwdF9w YXJhbXNfZ2VsaSAqcGFyYW1zLAorCQkJCWludCBjaXBoZXJfaW5kZXgpCit7CisJc3RydWN0 IGNyeXB0X2hhc2ggKmhkID0gTlVMTDsKKwljaGFyIGNhbGN1bGF0ZWRfbWQ1W01ENV9NRExF Tl07CisJaW50IHI7CisKKwlsb2dfZGJnKCJHRUxJIHRyYWNraW5nOiAxMDBcbiIpOworCS8q IENoZWNrIHNhbml0eSBvZiBoZWFkZXIgKi8KKwlpZiAoc3RyY21wKEdfRUxJX01BR0lDLCBo ZHItPm1kX21hZ2ljKSkgeworCQlsb2dfZGJnKCJNaXNzaW5nIEdFTEkgbWFnaWMuXG4iKTsK KwkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJbG9nX2RiZygiQ29ycmVjdCBHRUxJ IG1hZ2ljLlxuIik7CisJfQorCisJLyogQ2hlY2sgTUQ1IG9mIGhlYWRlciAqLworCWNyeXB0 X21lbXplcm8oY2FsY3VsYXRlZF9tZDUsIE1ENV9NRExFTik7CisJaWYgKGNyeXB0X2hhc2hf aW5pdCgmaGQsICJtZDUiKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyID0gY3J5cHRfaGFz aF93cml0ZShoZCwgaGRyLT5ieXRlYXJyYXksIG9mZnNldG9mKHN0cnVjdCBnZWxpX3BoZHIs IG1kX2hhc2gpKTsKKwlpZiAoIXIpCisJCXIgPSBjcnlwdF9oYXNoX2ZpbmFsKGhkLCBjYWxj dWxhdGVkX21kNSwgTUQ1X01ETEVOKTsKKworCWNyeXB0X2hhc2hfZGVzdHJveShoZCk7CisJ aWYgKHIpCisJCXJldHVybiByOworCisJaWYgKG1lbWNtcChjYWxjdWxhdGVkX21kNSwgaGRy LT5tZF9oYXNoLCBzaXplb2YoY2FsY3VsYXRlZF9tZDUpKSkgeworCQlsb2dfZGJnKCJHRUxJ IGhlYWRlciBNRDUgbWlzbWF0Y2guIik7CisJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSB7 CisJCWxvZ19kYmcoIkNvcnJlY3QgR0VMSSBoZWFkZXIgTUQ1LlxuIik7CisJfQorCisJLyog Q29udmVydCBoZWFkZXIgdG8gY3B1IGZvcm1hdCAqLworCWhkci0+bWRfdmVyc2lvbiAgICA9 IGxlMzJfdG9fY3B1KGhkci0+bWRfdmVyc2lvbik7CisJaGRyLT5tZF9mbGFncyAgICAgID0g bGUzMl90b19jcHUoaGRyLT5tZF9mbGFncyk7CisJaGRyLT5tZF9lYWxnbyAgICAgID0gbGUx Nl90b19jcHUoaGRyLT5tZF9lYWxnbyk7CisJaGRyLT5tZF9rZXlsZW4gICAgID0gbGUxNl90 b19jcHUoaGRyLT5tZF9rZXlsZW4pOworCWhkci0+bWRfYWFsZ28gICAgICA9IGxlMTZfdG9f Y3B1KGhkci0+bWRfYWFsZ28pOworCWhkci0+bWRfcHJvdnNpemUgICA9IGxlNjRfdG9fY3B1 KGhkci0+bWRfcHJvdnNpemUpOworCWhkci0+bWRfc2VjdG9yc2l6ZSA9IGxlMzJfdG9fY3B1 KGhkci0+bWRfc2VjdG9yc2l6ZSk7CisJLy8gbWRfa2V5cyBpcyA4IGJpdCwgbm8gY29udmVy c2lvbiBuZWVkZWQKKwloZHItPm1kX2l0ZXJhdGlvbnMgPSBsZTMyX3RvX2NwdShoZHItPm1k X2l0ZXJhdGlvbnMpOworCisJLyogU2V0IHBhcmFtcyAqLworCisJcmV0dXJuIDA7Cit9CisK KyNpZiAwCisvKgorICogS2VybmVsIGltcGxlbWVudHMganVzdCBiaWctZW5kaWFuIHZlcnNp b24gb2YgYmxvd2Zpc2gsIGhhY2sgaXQgaGVyZQorICovCitzdGF0aWMgdm9pZCBUQ1JZUFRf c3dhYl9sZShjaGFyICpidWYpCit7CisJdWludDMyX3QgKmwgPSAodWludDMyX3QqKSZidWZb MF07CisJdWludDMyX3QgKnIgPSAodWludDMyX3QqKSZidWZbNF07CisJKmwgPSBzd2FiMzIo KmwpOworCSpyID0gc3dhYjMyKCpyKTsKK30KKworc3RhdGljIGludCBkZWNyeXB0X2Jsb3dm aXNoX2xlX2NiYyhzdHJ1Y3QgdGNyeXB0X2FsZyAqYWxnLAorCQkJCSAgIGNvbnN0IGNoYXIg KmtleSwgY2hhciAqYnVmKQoreworCWludCBicyA9IGFsZy0+aXZfc2l6ZTsKKwljaGFyIGl2 W2JzXSwgaXZfb2xkW2JzXTsKKwlzdHJ1Y3QgY3J5cHRfY2lwaGVyICpjaXBoZXIgPSBOVUxM OworCWludCBpLCBqLCByOworCisJYXNzZXJ0KGJzID09IDIqc2l6ZW9mKHVpbnQzMl90KSk7 CisKKwlyID0gY3J5cHRfY2lwaGVyX2luaXQoJmNpcGhlciwgImJsb3dmaXNoIiwgImVjYiIs CisJCQkgICAgICAma2V5W2FsZy0+a2V5X29mZnNldF0sIGFsZy0+a2V5X3NpemUpOworCWlm IChyIDwgMCkKKwkJcmV0dXJuIHI7CisKKwltZW1jcHkoaXYsICZrZXlbYWxnLT5pdl9vZmZz ZXRdLCBhbGctPml2X3NpemUpOworCWZvciAoaSA9IDA7IGkgPCBUQ1JZUFRfSERSX0xFTjsg aSArPSBicykgeworCQltZW1jcHkoaXZfb2xkLCAmYnVmW2ldLCBicyk7CisJCVRDUllQVF9z d2FiX2xlKCZidWZbaV0pOworCQlyID0gY3J5cHRfY2lwaGVyX2RlY3J5cHQoY2lwaGVyLCAm YnVmW2ldLCAmYnVmW2ldLAorCQkJCQkgIGJzLCBOVUxMLCAwKTsKKwkJVENSWVBUX3N3YWJf bGUoJmJ1ZltpXSk7CisJCWlmIChyIDwgMCkKKwkJCWJyZWFrOworCQlmb3IgKGogPSAwOyBq IDwgYnM7IGorKykKKwkJCWJ1ZltpICsgal0gXj0gaXZbal07CisJCW1lbWNweShpdiwgaXZf b2xkLCBicyk7CisJfQorCisJY3J5cHRfY2lwaGVyX2Rlc3Ryb3koY2lwaGVyKTsKKwljcnlw dF9tZW16ZXJvKGl2LCBicyk7CisJY3J5cHRfbWVtemVybyhpdl9vbGQsIGJzKTsKKwlyZXR1 cm4gcjsKK30KKworc3RhdGljIHZvaWQgVENSWVBUX3JlbW92ZV93aGl0ZW5pbmcoY2hhciAq YnVmLCBjb25zdCBjaGFyICprZXkpCit7CisJaW50IGo7CisKKwlmb3IgKGogPSAwOyBqIDwg VENSWVBUX0hEUl9MRU47IGorKykKKwkJYnVmW2pdIF49IGtleVtqICUgOF07Cit9CisKK3N0 YXRpYyB2b2lkIFRDUllQVF9jb3B5X2tleShzdHJ1Y3QgdGNyeXB0X2FsZyAqYWxnLCBjb25z dCBjaGFyICptb2RlLAorCQkJICAgICBjaGFyICpvdXRfa2V5LCBjb25zdCBjaGFyICprZXkp Cit7CisJaW50IGtzMjsKKwlpZiAoIXN0cm5jbXAobW9kZSwgInh0cyIsIDMpKSB7CisJCWtz MiA9IGFsZy0+a2V5X3NpemUgLyAyOworCQltZW1jcHkob3V0X2tleSwgJmtleVthbGctPmtl eV9vZmZzZXRdLCBrczIpOworCQltZW1jcHkoJm91dF9rZXlba3MyXSwgJmtleVthbGctPml2 X29mZnNldF0sIGtzMik7CisJfSBlbHNlIGlmICghc3RybmNtcChtb2RlLCAibHJ3IiwgMykp IHsKKwkJa3MyID0gYWxnLT5rZXlfc2l6ZSAtIFRDUllQVF9MUldfSUtFWV9MRU47CisJCW1l bWNweShvdXRfa2V5LCAma2V5W2FsZy0+a2V5X29mZnNldF0sIGtzMik7CisJCW1lbWNweSgm b3V0X2tleVtrczJdLCBrZXksIFRDUllQVF9MUldfSUtFWV9MRU4pOworCX0gZWxzZSBpZiAo IXN0cm5jbXAobW9kZSwgImNiYyIsIDMpKSB7CisJCW1lbWNweShvdXRfa2V5LCAma2V5W2Fs Zy0+a2V5X29mZnNldF0sIGFsZy0+a2V5X3NpemUpOworCQkvKiBJViArIHdoaXRlbmluZyAq LworCQltZW1jcHkoJm91dF9rZXlbYWxnLT5rZXlfc2l6ZV0sICZrZXlbYWxnLT5pdl9vZmZz ZXRdLAorCQkgICAgICAgYWxnLT5rZXlfZXh0cmFfc2l6ZSk7CisJfQorfQorCitzdGF0aWMg aW50IFRDUllQVF9kZWNyeXB0X2hkcl9vbmUoc3RydWN0IHRjcnlwdF9hbGcgKmFsZywgY29u c3QgY2hhciAqbW9kZSwKKwkJCQkgICBjb25zdCBjaGFyICprZXksc3RydWN0IHRjcnlwdF9w aGRyICpoZHIpCit7CisJY2hhciBiYWNrZW5kX2tleVtUQ1JZUFRfSERSX0tFWV9MRU5dOwor CWNoYXIgaXZbVENSWVBUX0hEUl9JVl9MRU5dID0ge307CisJY2hhciBtb2RlX25hbWVbTUFY X0NJUEhFUl9MRU4gKyAxXTsKKwlzdHJ1Y3QgY3J5cHRfY2lwaGVyICpjaXBoZXI7CisJY2hh ciAqYywgKmJ1ZiA9IChjaGFyKikmaGRyLT5lOworCWludCByOworCisJLyogUmVtb3ZlIElW IGlmIHByZXNlbnQgKi8KKwltb2RlX25hbWVbTUFYX0NJUEhFUl9MRU5dID0gJ1wwJzsKKwlz dHJuY3B5KG1vZGVfbmFtZSwgbW9kZSwgTUFYX0NJUEhFUl9MRU4pOworCWMgPSBzdHJjaHIo bW9kZV9uYW1lLCAnLScpOworCWlmIChjKQorCQkqYyA9ICdcMCc7CisKKwlpZiAoIXN0cm5j bXAobW9kZSwgImxydyIsIDMpKQorCQlpdlthbGctPml2X3NpemUgLSAxXSA9IDE7CisJZWxz ZSBpZiAoIXN0cm5jbXAobW9kZSwgImNiYyIsIDMpKSB7CisJCVRDUllQVF9yZW1vdmVfd2hp dGVuaW5nKGJ1ZiwgJmtleVs4XSk7CisJCWlmICghc3RyY21wKGFsZy0+bmFtZSwgImJsb3dm aXNoX2xlIikpCisJCQlyZXR1cm4gZGVjcnlwdF9ibG93ZmlzaF9sZV9jYmMoYWxnLCBrZXks IGJ1Zik7CisJCW1lbWNweShpdiwgJmtleVthbGctPml2X29mZnNldF0sIGFsZy0+aXZfc2l6 ZSk7CisJfQorCisJVENSWVBUX2NvcHlfa2V5KGFsZywgbW9kZSwgYmFja2VuZF9rZXksIGtl eSk7CisJciA9IGNyeXB0X2NpcGhlcl9pbml0KCZjaXBoZXIsIGFsZy0+bmFtZSwgbW9kZV9u YW1lLAorCQkJICAgICAgYmFja2VuZF9rZXksIGFsZy0+a2V5X3NpemUpOworCWlmICghcikg eworCQlyID0gY3J5cHRfY2lwaGVyX2RlY3J5cHQoY2lwaGVyLCBidWYsIGJ1ZiwgVENSWVBU X0hEUl9MRU4sCisJCQkJCSBpdiwgYWxnLT5pdl9zaXplKTsKKwkJY3J5cHRfY2lwaGVyX2Rl c3Ryb3koY2lwaGVyKTsKKwl9CisKKwljcnlwdF9tZW16ZXJvKGJhY2tlbmRfa2V5LCBzaXpl b2YoYmFja2VuZF9rZXkpKTsKKwljcnlwdF9tZW16ZXJvKGl2LCBUQ1JZUFRfSERSX0lWX0xF Tik7CisJcmV0dXJuIHI7Cit9CisKKy8qCisgKiBGb3IgY2hhbmluZWQgY2lwaGVycyBhbmQg Q0JDIG1vZGUgd2UgbmVlZCAib3V0ZXIiIGRlY3J5cHRpb24uCisgKiBCYWNrZW5kIGRvZXNu J3QgcHJvdmlkZSB0aGlzLCBzbyBpbXBsZW1lbnQgaXQgaGVyZSBkaXJlY3RseSB1c2luZyBF Q0IuCisgKi8KK3N0YXRpYyBpbnQgVENSWVBUX2RlY3J5cHRfY2JjaShzdHJ1Y3QgdGNyeXB0 X2FsZ3MgKmNpcGhlcnMsCisJCQkJY29uc3QgY2hhciAqa2V5LCBzdHJ1Y3QgdGNyeXB0X3Bo ZHIgKmhkcikKK3sKKwlzdHJ1Y3QgY3J5cHRfY2lwaGVyICpjaXBoZXJbY2lwaGVycy0+Y2hh aW5fY291bnRdOworCXVuc2lnbmVkIGludCBicyA9IGNpcGhlcnMtPmNpcGhlclswXS5pdl9z aXplOworCWNoYXIgKmJ1ZiA9IChjaGFyKikmaGRyLT5lLCBpdltic10sIGl2X29sZFtic107 CisJdW5zaWduZWQgaW50IGksIGo7CisJaW50IHIgPSAtRUlOVkFMOworCisJVENSWVBUX3Jl bW92ZV93aGl0ZW5pbmcoYnVmLCAma2V5WzhdKTsKKworCW1lbWNweShpdiwgJmtleVtjaXBo ZXJzLT5jaXBoZXJbMF0uaXZfb2Zmc2V0XSwgYnMpOworCisJLyogSW5pdGlhbGl6ZSBhbGwg Y2lwaGVycyBpbiBjaGFpbiBpbiBFQ0IgbW9kZSAqLworCWZvciAoaiA9IDA7IGogPCBjaXBo ZXJzLT5jaGFpbl9jb3VudDsgaisrKQorCQljaXBoZXJbal0gPSBOVUxMOworCWZvciAoaiA9 IDA7IGogPCBjaXBoZXJzLT5jaGFpbl9jb3VudDsgaisrKSB7CisJCXIgPSBjcnlwdF9jaXBo ZXJfaW5pdCgmY2lwaGVyW2pdLCBjaXBoZXJzLT5jaXBoZXJbal0ubmFtZSwgImVjYiIsCisJ CQkJICAgICAgJmtleVtjaXBoZXJzLT5jaXBoZXJbal0ua2V5X29mZnNldF0sCisJCQkJICAg ICAgY2lwaGVycy0+Y2lwaGVyW2pdLmtleV9zaXplKTsKKwkJaWYgKHIgPCAwKQorCQkJZ290 byBvdXQ7CisJfQorCisJLyogSW1wbGVtZW50cyBDQkMgd2l0aCBjaGFpbmVkIGNpcGhlcnMg aW4gbG9vcCBpbnNpZGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVENSWVBUX0hEUl9MRU47IGkg Kz0gYnMpIHsKKwkJbWVtY3B5KGl2X29sZCwgJmJ1ZltpXSwgYnMpOworCQlmb3IgKGogPSBj aXBoZXJzLT5jaGFpbl9jb3VudDsgaiA+IDA7IGotLSkgeworCQkJciA9IGNyeXB0X2NpcGhl cl9kZWNyeXB0KGNpcGhlcltqIC0gMV0sICZidWZbaV0sICZidWZbaV0sCisJCQkJCQkgIGJz LCBOVUxMLCAwKTsKKwkJCWlmIChyIDwgMCkKKwkJCQlnb3RvIG91dDsKKwkJfQorCQlmb3Ig KGogPSAwOyBqIDwgYnM7IGorKykKKwkJCWJ1ZltpICsgal0gXj0gaXZbal07CisJCW1lbWNw eShpdiwgaXZfb2xkLCBicyk7CisJfQorb3V0OgorCWZvciAoaiA9IDA7IGogPCBjaXBoZXJz LT5jaGFpbl9jb3VudDsgaisrKQorCQlpZiAoY2lwaGVyW2pdKQorCQkJY3J5cHRfY2lwaGVy X2Rlc3Ryb3koY2lwaGVyW2pdKTsKKworCWNyeXB0X21lbXplcm8oaXYsIGJzKTsKKwljcnlw dF9tZW16ZXJvKGl2X29sZCwgYnMpOworCXJldHVybiByOworfQorCitzdGF0aWMgaW50IFRD UllQVF9kZWNyeXB0X2hkcihzdHJ1Y3QgY3J5cHRfZGV2aWNlICpjZCwgc3RydWN0IHRjcnlw dF9waGRyICpoZHIsCisJCQkgICAgICAgY29uc3QgY2hhciAqa2V5LCB1aW50MzJfdCBmbGFn cykKK3sKKwlzdHJ1Y3QgdGNyeXB0X3BoZHIgaGRyMjsKKwlpbnQgaSwgaiwgciA9IC1FSU5W QUw7CisKKwlmb3IgKGkgPSAwOyB0Y3J5cHRfY2lwaGVyW2ldLmNoYWluX2NvdW50OyBpKysp IHsKKwkJaWYgKCEoZmxhZ3MgJiBDUllQVF9UQ1JZUFRfTEVHQUNZX01PREVTKSAmJiB0Y3J5 cHRfY2lwaGVyW2ldLmxlZ2FjeSkKKwkJCWNvbnRpbnVlOworCQlsb2dfZGJnKCJUQ1JZUFQ6 ICB0cnlpbmcgY2lwaGVyICVzLSVzIiwKKwkJCXRjcnlwdF9jaXBoZXJbaV0ubG9uZ19uYW1l LCB0Y3J5cHRfY2lwaGVyW2ldLm1vZGUpOworCisJCW1lbWNweSgmaGRyMi5lLCAmaGRyLT5l LCBUQ1JZUFRfSERSX0xFTik7CisKKwkJaWYgKCFzdHJuY21wKHRjcnlwdF9jaXBoZXJbaV0u bW9kZSwgImNiY2kiLCA0KSkKKwkJCXIgPSBUQ1JZUFRfZGVjcnlwdF9jYmNpKCZ0Y3J5cHRf Y2lwaGVyW2ldLCBrZXksICZoZHIyKTsKKwkJZWxzZSBmb3IgKGogPSB0Y3J5cHRfY2lwaGVy W2ldLmNoYWluX2NvdW50IC0gMTsgaiA+PSAwIDsgai0tKSB7CisJCQlpZiAoIXRjcnlwdF9j aXBoZXJbaV0uY2lwaGVyW2pdLm5hbWUpCisJCQkJY29udGludWU7CisJCQlyID0gVENSWVBU X2RlY3J5cHRfaGRyX29uZSgmdGNyeXB0X2NpcGhlcltpXS5jaXBoZXJbal0sCisJCQkJCSAg ICB0Y3J5cHRfY2lwaGVyW2ldLm1vZGUsIGtleSwgJmhkcjIpOworCQkJaWYgKHIgPCAwKQor CQkJCWJyZWFrOworCQl9CisKKwkJaWYgKHIgPCAwKSB7CisJCQlsb2dfZGJnKCJUQ1JZUFQ6 ICAgcmV0dXJuZWQgZXJyb3IgJWQsIHNraXBwZWQuIiwgcik7CisJCQlpZiAociA9PSAtRU5P VFNVUCkKKwkJCQlicmVhazsKKwkJCXIgPSAtRU5PRU5UOworCQkJY29udGludWU7CisJCX0K KworCQlpZiAoIXN0cm5jbXAoaGRyMi5kLm1hZ2ljLCBUQ1JZUFRfSERSX01BR0lDLCBUQ1JZ UFRfSERSX01BR0lDX0xFTikpIHsKKwkJCWxvZ19kYmcoIlRDUllQVDogU2lnbmF0dXJlIG1h Z2ljIGRldGVjdGVkLiIpOworCQkJbWVtY3B5KCZoZHItPmUsICZoZHIyLmUsIFRDUllQVF9I RFJfTEVOKTsKKwkJCXIgPSBpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKChmbGFncyAmIENS WVBUX1RDUllQVF9WRVJBX01PREVTKSAmJgorCQkgICAgICFzdHJuY21wKGhkcjIuZC5tYWdp YywgVkNSWVBUX0hEUl9NQUdJQywgVENSWVBUX0hEUl9NQUdJQ19MRU4pKSB7CisJCQlsb2df ZGJnKCJUQ1JZUFQ6IFNpZ25hdHVyZSBtYWdpYyBkZXRlY3RlZCAoVmVyYWNyeXB0KS4iKTsK KwkJCW1lbWNweSgmaGRyLT5lLCAmaGRyMi5lLCBUQ1JZUFRfSERSX0xFTik7CisJCQlyID0g aTsKKwkJCWJyZWFrOworCQl9CisJCXIgPSAtRVBFUk07CisJfQorCisJY3J5cHRfbWVtemVy bygmaGRyMiwgc2l6ZW9mKGhkcjIpKTsKKwlyZXR1cm4gcjsKK30KKyNlbmRpZgorCisvLyBv cmlnaW5hbCBuYW1lOiBHRUxJX3Bvb2xfa2V5ZmlsZQorc3RhdGljIGludCBHRUxJX2dlbmtl eWVuY3J5cHRpb25rZXkoc3RydWN0IGNyeXB0X2RldmljZSAqY2QsCisJCQkJdW5zaWduZWQg Y2hhciBrZWtbNjRdLAorCQkJCWNvbnN0IGNoYXIgKmtleWZpbGUpCit7CisJc3RydWN0IGNy eXB0X2htYWMgKmN0eDsKKwl1bnNpZ25lZCBjaGFyIGJ1Zls2NF07CisJaW50IGksIGosIGZk LCBkYXRhX3NpemUsIHRvdGFsX3NpemUgPSAwOworCisJbG9nX2RiZygiR0VMSTogdXNpbmcg a2V5ZmlsZSAlcy4iLCBrZXlmaWxlKTsKKworCWZkID0gb3BlbihrZXlmaWxlLCBPX1JET05M WSk7CisJaWYgKGZkIDwgMCkgeworCQlsb2dfZXJyKGNkLCBfKCJGYWlsZWQgdG8gb3BlbiBr ZXkgZmlsZS5cbiIpKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogU0hBNTEyIEhNQUMg d2l0aCB6ZXJvIGtleS4gKi8KKwlyID0gY3J5cHRfaG1hY19pbml0KCZjdHgsICJzaGE1MTIi LCBOVUxMLCAwKTsKKwlpZiAocikgeworCQlsb2dfZXJyKGNkLCBfKCJFcnJvciBpbiBITUFD IGluaXQuXG4iKSk7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJ ZG8geworCQlkYXRhX3NpemUgPSByZWFkX2J1ZmZlcihmZCwgYnVmLCBzaXplb2YoYnVmKSk7 CisJCWlmIChkYXRhX3NpemUgPCAwKSB7CisJCQlsb2dfZXJyKGNkLCBfKCJFcnJvciByZWFk aW5nIGtleWZpbGUgJXMuXG4iKSwga2V5ZmlsZSk7CisJCQljcnlwdF9obWFjX2Rlc3Ryb3ko JmN0eCk7CisJCQljbG9zZShmZCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlyID0gY3J5 cHRfaG1hY193cml0ZSgmY3R4LCBidWYsIGRhdGFfc2l6ZSk7CisJCWlmIChyKSB7CisJCQls b2dfZXJyKGNkLCBfKCJFcnJvciBpbiBITUFDIHVwZGF0ZS5cbiIpKTsKKwkJCWNyeXB0X2ht YWNfZGVzdHJveSgmY3R4KTsKKwkJCWNsb3NlKGZkKTsKKwkJCXJldHVybiAtRUlOVkFMOwor CQl9CisJCXRvdGFsX3NpemUgKz0gZGF0YV9zaXplOworCX0gd2hpbGUgKGRhdGFfc2l6ZSA+ IDApOworCisJY2xvc2UoZmQpOworCXIgPSBjcnlwdF9obWFjX2ZpbmFsKCZjdHgsIGtlaywg c2l6ZW9mKGtlaykpOworCWlmIChyKSB7CisJCWNyeXB0X2htYWNfZGVzdHJveSgmY3R4KTsK KwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCQorCWNyeXB0X2htYWNfZGVzdHJveSgmY3R4KTsK KworCWNyeXB0X21lbXplcm8oYnVmLCBzaXplb2YoYnVmKSk7CisKKwlyZXR1cm4gMDsKK30K KworI2lmIDAKK2ludCBjcnlwdF9obWFjX3NpemUoY29uc3QgY2hhciAqbmFtZSk7CitpbnQg Y3J5cHRfaG1hY19pbml0KHN0cnVjdCBjcnlwdF9obWFjICoqY3R4LCBjb25zdCBjaGFyICpu YW1lLAorCQkgICAgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoKTsKK2ludCBj cnlwdF9obWFjX3dyaXRlKHN0cnVjdCBjcnlwdF9obWFjICpjdHgsIGNvbnN0IGNoYXIgKmJ1 ZmZlciwgc2l6ZV90IGxlbmd0aCk7CitpbnQgY3J5cHRfaG1hY19maW5hbChzdHJ1Y3QgY3J5 cHRfaG1hYyAqY3R4LCBjaGFyICpidWZmZXIsIHNpemVfdCBsZW5ndGgpOworaW50IGNyeXB0 X2htYWNfZGVzdHJveShzdHJ1Y3QgY3J5cHRfaG1hYyAqY3R4KTsKKworc3RhdGljIGludCBH RUxJX2dlbmtleWVuY3J5cHRpb25rZXkoKTsKKword2hpbGUgKChkb25lID0gcmVhZChmZCwg YnVmLCBzaXplb2YoYnVmKSkpID4gMCkKKwlnX2VsaV9jcnlwdG9faG1hY191cGRhdGUoY3R4 cCwgYnVmLCBkb25lKTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgKiBlbGlfZ2Vua2V5KHN0 cnVjdCBnY3RsX3JlcSAqcmVxLCBzdHJ1Y3QgZ19lbGlfbWV0YWRhdGEgKm1kLCB1bnNpZ25l ZCBjaGFyICprZXksIGJvb2wgbmV3KQoreworICAgICAgICBzdHJ1Y3QgaG1hY19jdHggY3R4 OworICAgICAgICBib29sIG5vcGFzc3BocmFzZTsKKyAgICAgICAgaW50IG5maWxlczsKKwor ICAgICAgICBub3Bhc3NwaHJhc2UgPQorICAgICAgICAgICAgZ2N0bF9nZXRfaW50KHJlcSwg bmV3ID8gIm5vbmV3cGFzc3BocmFzZSIgOiAibm9wYXNzcGhyYXNlIik7CisKKyAgICAgICAg Z19lbGlfY3J5cHRvX2htYWNfaW5pdCgmY3R4LCBOVUxMLCAwKTsKKworICAgICAgICBuZmls ZXMgPSBlbGlfZ2Vua2V5X2ZpbGVzKHJlcSwgbmV3LCAia2V5ZmlsZSIsICZjdHgsIE5VTEws IDApOworICAgICAgICBpZiAobmZpbGVzID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVy biAoTlVMTCk7CisgICAgICAgIGVsc2UgaWYgKG5maWxlcyA9PSAwICYmIG5vcGFzc3BocmFz ZSkgeworICAgICAgICAgICAgICAgIGdjdGxfZXJyb3IocmVxLCAiTm8ga2V5IGNvbXBvbmVu dHMgZ2l2ZW4uIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIChOVUxMKTsKKyAgICAgICAg fQorCisgICAgICAgIGlmIChlbGlfZ2Vua2V5X3Bhc3NwaHJhc2UocmVxLCBtZCwgbmV3LCAm Y3R4KSA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gKE5VTEwpOworCisgICAgICAg IGdfZWxpX2NyeXB0b19obWFjX2ZpbmFsKCZjdHgsIGtleSwgMCk7CisKKyAgICAgICAgcmV0 dXJuIChrZXkpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgR0VMSV9pbml0X2hkcihzdHJ1 Y3QgY3J5cHRfZGV2aWNlICpjZCwKKwkJCSAgIHN0cnVjdCBnZWxpX3BoZHIgKmhkciwKKwkJ CSAgIHN0cnVjdCBjcnlwdF9wYXJhbXNfZ2VsaSAqcGFyYW1zKQoreworCWludCByID0gLUVQ RVJNOworI2lmIDAKKwl1bnNpZ25lZCBjaGFyIHB3ZFtUQ1JZUFRfS0VZX1BPT0xfTEVOXSA9 IHt9OworCXNpemVfdCBwYXNzcGhyYXNlX3NpemU7CisJY2hhciAqa2V5OworCXVuc2lnbmVk IGludCBpLCBza2lwcGVkID0gMDsKKworCWlmIChwb3NpeF9tZW1hbGlnbigodm9pZCopJmtl eSwgY3J5cHRfZ2V0cGFnZXNpemUoKSwgVENSWVBUX0hEUl9LRVlfTEVOKSkKKwkJcmV0dXJu IC1FTk9NRU07CisKKwlpZiAocGFyYW1zLT5rZXlmaWxlc19jb3VudCkKKwkJcGFzc3BocmFz ZV9zaXplID0gVENSWVBUX0tFWV9QT09MX0xFTjsKKwllbHNlCisJCXBhc3NwaHJhc2Vfc2l6 ZSA9IHBhcmFtcy0+cGFzc3BocmFzZV9zaXplOworCisJaWYgKHBhcmFtcy0+cGFzc3BocmFz ZV9zaXplID4gVENSWVBUX0tFWV9QT09MX0xFTikgeworCQlsb2dfZXJyKGNkLCBfKCJNYXhp bXVtIFRDUllQVCBwYXNzcGhyYXNlIGxlbmd0aCAoJWQpIGV4Y2VlZGVkLlxuIiksCisJCQkg ICAgICBUQ1JZUFRfS0VZX1BPT0xfTEVOKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogQ2Fs Y3VsYXRlIHBvb2wgY29udGVudCBmcm9tIGtleWZpbGVzICovCisJZm9yIChpID0gMDsgaSA8 IHBhcmFtcy0+a2V5ZmlsZXNfY291bnQ7IGkrKykgeworCQlyID0gVENSWVBUX3Bvb2xfa2V5 ZmlsZShjZCwgcHdkLCBwYXJhbXMtPmtleWZpbGVzW2ldKTsKKwkJaWYgKHIgPCAwKQorCQkJ Z290byBvdXQ7CisJfQorCisJLyogSWYgcHJvdmlkZWQgcGFzc3dvcmQsIGNvbWJpbmUgaXQg d2l0aCBwb29sICovCisJZm9yIChpID0gMDsgaSA8IHBhcmFtcy0+cGFzc3BocmFzZV9zaXpl OyBpKyspCisJCXB3ZFtpXSArPSBwYXJhbXMtPnBhc3NwaHJhc2VbaV07CisKKwlmb3IgKGkg PSAwOyB0Y3J5cHRfa2RmW2ldLm5hbWU7IGkrKykgeworCQlpZiAoIShwYXJhbXMtPmZsYWdz ICYgQ1JZUFRfVENSWVBUX0xFR0FDWV9NT0RFUykgJiYgdGNyeXB0X2tkZltpXS5sZWdhY3kp CisJCQljb250aW51ZTsKKwkJaWYgKCEocGFyYW1zLT5mbGFncyAmIENSWVBUX1RDUllQVF9W RVJBX01PREVTKSAmJiB0Y3J5cHRfa2RmW2ldLnZlcmFjcnlwdCkKKwkJCWNvbnRpbnVlOwor CQkvKiBEZXJpdmUgaGVhZGVyIGtleSAqLworCQlsb2dfZGJnKCJUQ1JZUFQ6IHRyeWluZyBL REY6ICVzLSVzLSVkLiIsCisJCQl0Y3J5cHRfa2RmW2ldLm5hbWUsIHRjcnlwdF9rZGZbaV0u aGFzaCwgdGNyeXB0X2tkZltpXS5pdGVyYXRpb25zKTsKKwkJciA9IGNyeXB0X3Bia2RmKHRj cnlwdF9rZGZbaV0ubmFtZSwgdGNyeXB0X2tkZltpXS5oYXNoLAorCQkJCShjaGFyKilwd2Qs IHBhc3NwaHJhc2Vfc2l6ZSwKKwkJCQloZHItPnNhbHQsIFRDUllQVF9IRFJfU0FMVF9MRU4s CisJCQkJa2V5LCBUQ1JZUFRfSERSX0tFWV9MRU4sCisJCQkJdGNyeXB0X2tkZltpXS5pdGVy YXRpb25zKTsKKwkJaWYgKHIgPCAwICYmIGNyeXB0X2hhc2hfc2l6ZSh0Y3J5cHRfa2RmW2ld Lmhhc2gpIDwgMCkgeworCQkJbG9nX3ZlcmJvc2UoY2QsIF8oIlBCS0RGMiBoYXNoIGFsZ29y aXRobSAlcyBub3QgYXZhaWxhYmxlLCBza2lwcGluZy5cbiIpLAorCQkJCSAgICAgIHRjcnlw dF9rZGZbaV0uaGFzaCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAociA8IDApCisJCQli cmVhazsKKworCQkvKiBEZWNyeXB0IGhlYWRlciAqLworCQlyID0gVENSWVBUX2RlY3J5cHRf aGRyKGNkLCBoZHIsIGtleSwgcGFyYW1zLT5mbGFncyk7CisJCWlmIChyID09IC1FTk9FTlQp IHsKKwkJCXNraXBwZWQrKzsKKwkJCXIgPSAtRVBFUk07CisJCX0KKwkJaWYgKHIgIT0gLUVQ RVJNKQorCQkJYnJlYWs7CisJfQorCisJaWYgKChyIDwgMCAmJiByICE9IC1FUEVSTSAmJiBz a2lwcGVkICYmIHNraXBwZWQgPT0gaSkgfHwgciA9PSAtRU5PVFNVUCkgeworCQlsb2dfZXJy KGNkLCBfKCJSZXF1aXJlZCBrZXJuZWwgY3J5cHRvIGludGVyZmFjZSBub3QgYXZhaWxhYmxl LlxuIikpOworI2lmZGVmIEVOQUJMRV9BRl9BTEcKKwkJbG9nX2VycihjZCwgXygiRW5zdXJl IHlvdSBoYXZlIGFsZ2lmX3NrY2lwaGVyIGtlcm5lbCBtb2R1bGUgbG9hZGVkLlxuIikpOwor I2VuZGlmCisJfQorCWlmIChyIDwgMCkKKwkJZ290byBvdXQ7CisjZW5kaWYKKworCWxvZ19k YmcoIkdFTEkgdHJhY2tpbmc6IDEwMVxuIik7CisJciA9IEdFTElfaGRyX2Zyb21fZGlzayho ZHIsIHBhcmFtcywgcik7CisJaWYgKCFyKSB7CisJCWxvZ19kYmcoIkdFTEkgdHJhY2tpbmc6 IDEwMiBtYWdpYyBPS1xuIik7CisjaWYgMAorCQlsb2dfZGJnKCJUQ1JZUFQ6IE1hZ2ljOiAl cywgSGVhZGVyIHZlcnNpb246ICVkLCByZXEuICVkLCBzZWN0b3IgJWQiCisJCQkiLCBta19v ZmZzZXQgJSIgUFJJdTY0ICIsIGhpZGRlbl9zaXplICUiIFBSSXU2NAorCQkJIiwgdm9sdW1l IHNpemUgJSIgUFJJdTY0LCB0Y3J5cHRfa2RmW2ldLnZlcmFjcnlwdCA/CisJCQlWQ1JZUFRf SERSX01BR0lDIDogVENSWVBUX0hEUl9NQUdJQywKKwkJCShpbnQpaGRyLT5kLnZlcnNpb24s IChpbnQpaGRyLT5kLnZlcnNpb25fdGMsIChpbnQpaGRyLT5kLnNlY3Rvcl9zaXplLAorCQkJ aGRyLT5kLm1rX29mZnNldCwgaGRyLT5kLmhpZGRlbl92b2x1bWVfc2l6ZSwgaGRyLT5kLnZv bHVtZV9zaXplKTsKKwkJbG9nX2RiZygiVENSWVBUOiBIZWFkZXIgY2lwaGVyICVzLSVzLCBr ZXkgc2l6ZSAlenUiLAorCQkJcGFyYW1zLT5jaXBoZXIsIHBhcmFtcy0+bW9kZSwgcGFyYW1z LT5rZXlfc2l6ZSk7CisjZW5kaWYKKwl9CitvdXQ6CisjaWYgMAorCWNyeXB0X21lbXplcm8o cHdkLCBUQ1JZUFRfS0VZX1BPT0xfTEVOKTsKKwlpZiAoa2V5KQorCQljcnlwdF9tZW16ZXJv KGtleSwgVENSWVBUX0hEUl9LRVlfTEVOKTsKKwlmcmVlKGtleSk7CisjZW5kaWYKKwlyZXR1 cm4gcjsKK30KKworaW50IEdFTElfcmVhZF9waGRyKHN0cnVjdCBjcnlwdF9kZXZpY2UgKmNk LAorCQkgICAgIHN0cnVjdCBnZWxpX3BoZHIgKmhkciwKKwkJICAgICBzdHJ1Y3QgY3J5cHRf cGFyYW1zX2dlbGkgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXZpY2UgPSBjcnlw dF9tZXRhZGF0YV9kZXZpY2UoY2QpOworCXNzaXplX3QgaGRyX3NpemUgPSBzaXplb2Yoc3Ry dWN0IGdlbGlfcGhkcik7CisJLy9jaGFyICpiYXNlX2RldmljZV9wYXRoOworCWludCBkZXZm ZCA9IDAsIHIsIGJzOworCisJYXNzZXJ0KHNpemVvZihzdHJ1Y3QgZ2VsaV9waGRyKSA9PSA1 MTEpOworCisJbG9nX2RiZygiUmVhZGluZyBHRUxJIGhlYWRlciBvZiBzaXplICV6dSBieXRl cyBmcm9tIGRldmljZSAlcy4iLAorCQloZHJfc2l6ZSwgZGV2aWNlX3BhdGgoZGV2aWNlKSk7 CisKKwlicyA9IGRldmljZV9ibG9ja19zaXplKGRldmljZSk7CisJaWYgKGJzIDwgMCkKKwkJ cmV0dXJuIGJzOworCisjaWYgMAorCWlmIChwYXJhbXMtPmZsYWdzICYgQ1JZUFRfVENSWVBU X1NZU1RFTV9IRUFERVIgJiYKKwkgICAgY3J5cHRfZGV2X2lzX3BhcnRpdGlvbihkZXZpY2Vf cGF0aChkZXZpY2UpKSkgeworCQliYXNlX2RldmljZV9wYXRoID0gY3J5cHRfZ2V0X2Jhc2Vf ZGV2aWNlKGRldmljZV9wYXRoKGRldmljZSkpOworCisJCWxvZ19kYmcoIlJlYWRpbmcgVENS WVBUIHN5c3RlbSBoZWFkZXIgZnJvbSBkZXZpY2UgJXMuIiwgYmFzZV9kZXZpY2VfcGF0aCA/ OiAiPyIpOworCQlpZiAoIWJhc2VfZGV2aWNlX3BhdGgpCisJCQlyZXR1cm4gLUVJTlZBTDsK KworCQlyID0gZGV2aWNlX2FsbG9jKCZiYXNlX2RldmljZSwgYmFzZV9kZXZpY2VfcGF0aCk7 CisJCWZyZWUoYmFzZV9kZXZpY2VfcGF0aCk7CisJCWlmIChyIDwgMCkKKwkJCXJldHVybiBy OworCQlkZXZmZCA9IGRldmljZV9vcGVuKGJhc2VfZGV2aWNlLCBPX1JET05MWSk7CisJCWRl dmljZV9mcmVlKGJhc2VfZGV2aWNlKTsKKwl9IGVsc2UKKyNlbmRpZgorCQlkZXZmZCA9IGRl dmljZV9vcGVuKGRldmljZSwgT19SRE9OTFkpOworCisJaWYgKGRldmZkIDwgMCkgeworCQls b2dfZXJyKGNkLCBfKCJDYW5ub3Qgb3BlbiBkZXZpY2UgJXMuXG4iKSwgZGV2aWNlX3BhdGgo ZGV2aWNlKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXIgPSAtRUlPOworI2RlZmlu ZSBHRUxJX0hEUl9PRkZTRVQgLTUxMgorCWlmIChsc2VlayhkZXZmZCwgR0VMSV9IRFJfT0ZG U0VULCBTRUVLX0VORCkgPj0gMCAmJgorCSAgICByZWFkX2Jsb2Nrd2lzZShkZXZmZCwgYnMs IGhkciwgaGRyX3NpemUpID09IGhkcl9zaXplKSB7CisJCXIgPSBHRUxJX2luaXRfaGRyKGNk LCBoZHIsIHBhcmFtcyk7CisJfQorCisJY2xvc2UoZGV2ZmQpOworCWlmIChyIDwgMCkKKwkJ bWVtc2V0KGhkciwgMCwgc2l6ZW9mICgqaGRyKSk7CisJcmV0dXJuIHI7Cit9CisKKyNpZiAw CitzdGF0aWMgc3RydWN0IHRjcnlwdF9hbGdzICpUQ1JZUFRfZ2V0X2FsZ3MoY29uc3QgY2hh ciAqY2lwaGVyLCBjb25zdCBjaGFyICptb2RlKQoreworCWludCBpOworCisJaWYgKCFjaXBo ZXIgfHwgIW1vZGUpCisJCXJldHVybiBOVUxMOworCisJZm9yIChpID0gMDsgdGNyeXB0X2Np cGhlcltpXS5jaGFpbl9jb3VudDsgaSsrKQorCQlpZiAoIXN0cmNtcCh0Y3J5cHRfY2lwaGVy W2ldLmxvbmdfbmFtZSwgY2lwaGVyKSAmJgorCQkgICAgIXN0cmNtcCh0Y3J5cHRfY2lwaGVy W2ldLm1vZGUsIG1vZGUpKQorCQkgICAgcmV0dXJuICZ0Y3J5cHRfY2lwaGVyW2ldOworCisJ cmV0dXJuIE5VTEw7Cit9CisKK2ludCBUQ1JZUFRfYWN0aXZhdGUoc3RydWN0IGNyeXB0X2Rl dmljZSAqY2QsCisJCSAgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICBzdHJ1Y3QgdGNy eXB0X3BoZHIgKmhkciwKKwkJICAgICBzdHJ1Y3QgY3J5cHRfcGFyYW1zX3RjcnlwdCAqcGFy YW1zLAorCQkgICAgIHVpbnQzMl90IGZsYWdzKQoreworCWNoYXIgY2lwaGVyW01BWF9DSVBI RVJfTEVOXSwgZG1fbmFtZVtQQVRIX01BWF0sIGRtX2Rldl9uYW1lW1BBVEhfTUFYXTsKKwlj aGFyICpwYXJ0X3BhdGg7CisJc3RydWN0IGRldmljZSAqZGV2aWNlID0gTlVMTCwgKnBhcnRf ZGV2aWNlID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgcjsKKwl1aW50MzJfdCBy ZXFfZmxhZ3M7CisJc3RydWN0IHRjcnlwdF9hbGdzICphbGdzOworCWVudW0gZGV2Y2hlY2sg ZGV2aWNlX2NoZWNrOworCXN0cnVjdCBjcnlwdF9kbV9hY3RpdmVfZGV2aWNlIGRtZCA9IHsK KwkJLnRhcmdldCA9IERNX0NSWVBULAorCQkuc2l6ZSAgID0gMCwKKwkJLmRhdGFfZGV2aWNl ID0gY3J5cHRfZGF0YV9kZXZpY2UoY2QpLAorCQkudS5jcnlwdCAgPSB7CisJCQkuY2lwaGVy ID0gY2lwaGVyLAorCQkJLm9mZnNldCA9IGNyeXB0X2dldF9kYXRhX29mZnNldChjZCksCisJ CQkuaXZfb2Zmc2V0ID0gY3J5cHRfZ2V0X2l2X29mZnNldChjZCksCisJCX0KKwl9OworCisJ aWYgKCFoZHItPmQudmVyc2lvbikgeworCQlsb2dfZGJnKCJUQ1JZUFQ6IHRoaXMgZnVuY3Rp b24gaXMgbm90IHN1cHBvcnRlZCB3aXRob3V0IGVuY3J5cHRlZCBoZWFkZXIgbG9hZC4iKTsK KwkJcmV0dXJuIC1FTk9UU1VQOworCX0KKworCWlmIChoZHItPmQuc2VjdG9yX3NpemUgJiYg aGRyLT5kLnNlY3Rvcl9zaXplICE9IFNFQ1RPUl9TSVpFKSB7CisJCWxvZ19lcnIoY2QsIF8o IkFjdGl2YXRpb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgJWQgc2VjdG9yIHNpemUuXG4iKSwK KwkJCWhkci0+ZC5zZWN0b3Jfc2l6ZSk7CisJCXJldHVybiAtRU5PVFNVUDsKKwl9CisKKwlp ZiAoc3Ryc3RyKHBhcmFtcy0+bW9kZSwgIi10Y3J5cHQiKSkgeworCQlsb2dfZXJyKGNkLCBf KCJLZXJuZWwgZG9lc24ndCBzdXBwb3J0IGFjdGl2YXRpb24gZm9yIHRoaXMgVENSWVBUIGxl Z2FjeSBtb2RlLlxuIikpOworCQlyZXR1cm4gLUVOT1RTVVA7CisJfQorCisJaWYgKHN0cnN0 cihwYXJhbXMtPm1vZGUsICItdGN3IikpCisJCXJlcV9mbGFncyA9IERNX1RDV19TVVBQT1JU RUQ7CisJZWxzZQorCQlyZXFfZmxhZ3MgPSBETV9QTEFJTjY0X1NVUFBPUlRFRDsKKworCWFs Z3MgPSBUQ1JZUFRfZ2V0X2FsZ3MocGFyYW1zLT5jaXBoZXIsIHBhcmFtcy0+bW9kZSk7CisJ aWYgKCFhbGdzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChoZHItPmQuc2VjdG9yX3Np emUgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocGFyYW1zLT5mbGFncyAmIENS WVBUX1RDUllQVF9TWVNURU1fSEVBREVSKQorCQlkbWQuc2l6ZSA9IDA7CisJZWxzZSBpZiAo cGFyYW1zLT5mbGFncyAmIENSWVBUX1RDUllQVF9ISURERU5fSEVBREVSKQorCQlkbWQuc2l6 ZSA9IGhkci0+ZC5oaWRkZW5fdm9sdW1lX3NpemUgLyBoZHItPmQuc2VjdG9yX3NpemU7CisJ ZWxzZQorCQlkbWQuc2l6ZSA9IGhkci0+ZC52b2x1bWVfc2l6ZSAvIGhkci0+ZC5zZWN0b3Jf c2l6ZTsKKworCWlmIChkbWQuZmxhZ3MgJiBDUllQVF9BQ1RJVkFURV9TSEFSRUQpCisJCWRl dmljZV9jaGVjayA9IERFVl9TSEFSRUQ7CisJZWxzZQorCQlkZXZpY2VfY2hlY2sgPSBERVZf RVhDTDsKKworCWlmICgocGFyYW1zLT5mbGFncyAmIENSWVBUX1RDUllQVF9TWVNURU1fSEVB REVSKSAmJgorCSAgICAgIWNyeXB0X2Rldl9pc19wYXJ0aXRpb24oZGV2aWNlX3BhdGgoZG1k LmRhdGFfZGV2aWNlKSkpIHsKKwkJcGFydF9wYXRoID0gY3J5cHRfZ2V0X3BhcnRpdGlvbl9k ZXZpY2UoZGV2aWNlX3BhdGgoZG1kLmRhdGFfZGV2aWNlKSwKKwkJCQkJCSAgICAgICBkbWQu dS5jcnlwdC5vZmZzZXQsIGRtZC5zaXplKTsKKwkJaWYgKHBhcnRfcGF0aCkgeworCQkJaWYg KCFkZXZpY2VfYWxsb2MoJnBhcnRfZGV2aWNlLCBwYXJ0X3BhdGgpKSB7CisJCQkJbG9nX3Zl cmJvc2UoY2QsIF8oIkFjdGl2YXRpbmcgVENSWVBUIHN5c3RlbSBlbmNyeXB0aW9uIGZvciBw YXJ0aXRpb24gJXMuXG4iKSwKKwkJCQkJICAgIHBhcnRfcGF0aCk7CisJCQkJZG1kLmRhdGFf ZGV2aWNlID0gcGFydF9kZXZpY2U7CisJCQkJZG1kLnUuY3J5cHQub2Zmc2V0ID0gMDsKKwkJ CX0KKwkJCWZyZWUocGFydF9wYXRoKTsKKwkJfSBlbHNlCisJCQkvKgorCQkJICogU3lzdGVt IGVuY3J5cHRpb24gdXNlIHRoZSB3aG9sZSBkZXZpY2UgbWFwcGluZywgdGhlcmUgY2FuCisJ CQkgKiBiZSBhY3RpdmUgcGFydGl0aW9ucy4KKwkJCSAqLworCQkJZGV2aWNlX2NoZWNrID0g REVWX1NIQVJFRDsKKwl9CisKKwlyID0gZGV2aWNlX2Jsb2NrX2FkanVzdChjZCwgZG1kLmRh dGFfZGV2aWNlLCBkZXZpY2VfY2hlY2ssCisJCQkJZG1kLnUuY3J5cHQub2Zmc2V0LCAmZG1k LnNpemUsICZkbWQuZmxhZ3MpOworCWlmIChyKSB7CisJCWRldmljZV9mcmVlKHBhcnRfZGV2 aWNlKTsKKwkJcmV0dXJuIHI7CisJfQorCisJLyogRnJvbWUgaGVyZSwga2V5IHNpemUgZm9y IGV2ZXJ5IGNpcGhlciBtdXN0IGJlIHRoZSBzYW1lICovCisJZG1kLnUuY3J5cHQudmsgPSBj cnlwdF9hbGxvY192b2x1bWVfa2V5KGFsZ3MtPmNpcGhlclswXS5rZXlfc2l6ZSArCisJCQkJ CQlhbGdzLT5jaXBoZXJbMF0ua2V5X2V4dHJhX3NpemUsIE5VTEwpOworCWlmICghZG1kLnUu Y3J5cHQudmspIHsKKwkJZGV2aWNlX2ZyZWUocGFydF9kZXZpY2UpOworCQlyZXR1cm4gLUVO T01FTTsKKwl9CisKKwlmb3IgKGkgPSBhbGdzLT5jaGFpbl9jb3VudDsgaSA+IDA7IGktLSkg eworCQlpZiAoaSA9PSAxKSB7CisJCQlkbV9uYW1lW3NpemVvZihkbV9uYW1lKS0xXSA9ICdc MCc7CisJCQlzdHJuY3B5KGRtX25hbWUsIG5hbWUsIHNpemVvZihkbV9uYW1lKS0xKTsKKwkJ CWRtZC5mbGFncyA9IGZsYWdzOworCQl9IGVsc2UgeworCQkJc25wcmludGYoZG1fbmFtZSwg c2l6ZW9mKGRtX25hbWUpLCAiJXNfJWQiLCBuYW1lLCBpLTEpOworCQkJZG1kLmZsYWdzID0g ZmxhZ3MgfCBDUllQVF9BQ1RJVkFURV9QUklWQVRFOworCQl9CisKKwkJc25wcmludGYoY2lw aGVyLCBzaXplb2YoY2lwaGVyKSwgIiVzLSVzIiwKKwkJCSBhbGdzLT5jaXBoZXJbaS0xXS5u YW1lLCBhbGdzLT5tb2RlKTsKKworCQlUQ1JZUFRfY29weV9rZXkoJmFsZ3MtPmNpcGhlcltp LTFdLCBhbGdzLT5tb2RlLAorCQkJCWRtZC51LmNyeXB0LnZrLT5rZXksIGhkci0+ZC5rZXlz KTsKKworCQlpZiAoYWxncy0+Y2hhaW5fY291bnQgIT0gaSkgeworCQkJc25wcmludGYoZG1f ZGV2X25hbWUsIHNpemVvZihkbV9kZXZfbmFtZSksICIlcy8lc18lZCIsCisJCQkJIGRtX2dl dF9kaXIoKSwgbmFtZSwgaSk7CisJCQlyID0gZGV2aWNlX2FsbG9jKCZkZXZpY2UsIGRtX2Rl dl9uYW1lKTsKKwkJCWlmIChyKQorCQkJCWJyZWFrOworCQkJZG1kLmRhdGFfZGV2aWNlID0g ZGV2aWNlOworCQkJZG1kLnUuY3J5cHQub2Zmc2V0ID0gMDsKKwkJfQorCisJCWxvZ19kYmco IlRyeWluZyB0byBhY3RpdmF0ZSBUQ1JZUFQgZGV2aWNlICVzIHVzaW5nIGNpcGhlciAlcy4i LAorCQkJZG1fbmFtZSwgZG1kLnUuY3J5cHQuY2lwaGVyKTsKKwkJciA9IGRtX2NyZWF0ZV9k ZXZpY2UoY2QsIGRtX25hbWUsIENSWVBUX1RDUllQVCwgJmRtZCwgMCk7CisKKwkJZGV2aWNl X2ZyZWUoZGV2aWNlKTsKKwkJZGV2aWNlID0gTlVMTDsKKworCQlpZiAocikKKwkJCWJyZWFr OworCX0KKworCWlmIChyIDwgMCAmJiAhKGRtX2ZsYWdzKCkgJiByZXFfZmxhZ3MpKSB7CisJ CWxvZ19lcnIoY2QsIF8oIktlcm5lbCBkb2Vzbid0IHN1cHBvcnQgVENSWVBUIGNvbXBhdGli bGUgbWFwcGluZy5cbiIpKTsKKwkJciA9IC1FTk9UU1VQOworCX0KKworCWRldmljZV9mcmVl KHBhcnRfZGV2aWNlKTsKKwljcnlwdF9mcmVlX3ZvbHVtZV9rZXkoZG1kLnUuY3J5cHQudmsp OworCXJldHVybiByOworfQorCitzdGF0aWMgaW50IFRDUllQVF9yZW1vdmVfb25lKHN0cnVj dCBjcnlwdF9kZXZpY2UgKmNkLCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgICBjb25zdCBj aGFyICpiYXNlX3V1aWQsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgY3J5cHRfZG1fYWN0aXZl X2RldmljZSBkbWQgPSB7fTsKKwljaGFyIGRtX25hbWVbUEFUSF9NQVhdOworCWludCByOwor CisJaWYgKHNucHJpbnRmKGRtX25hbWUsIHNpemVvZihkbV9uYW1lKSwgIiVzXyVkIiwgbmFt ZSwgaW5kZXgpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyID0gZG1fc3RhdHVzX2Rl dmljZShjZCwgZG1fbmFtZSk7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKworCXIgPSBk bV9xdWVyeV9kZXZpY2UoY2QsIGRtX25hbWUsIERNX0FDVElWRV9VVUlELCAmZG1kKTsKKwlp ZiAoIXIgJiYgIXN0cm5jbXAoZG1kLnV1aWQsIGJhc2VfdXVpZCwgc3RybGVuKGJhc2VfdXVp ZCkpKQorCQlyID0gZG1fcmVtb3ZlX2RldmljZShjZCwgZG1fbmFtZSwgMCwgMCk7CisKKwlm cmVlKENPTlNUX0NBU1Qodm9pZCopZG1kLnV1aWQpOworCXJldHVybiByOworfQorCitpbnQg VENSWVBUX2RlYWN0aXZhdGUoc3RydWN0IGNyeXB0X2RldmljZSAqY2QsIGNvbnN0IGNoYXIg Km5hbWUpCit7CisJc3RydWN0IGNyeXB0X2RtX2FjdGl2ZV9kZXZpY2UgZG1kID0ge307CisJ aW50IHI7CisKKwlyID0gZG1fcXVlcnlfZGV2aWNlKGNkLCBuYW1lLCBETV9BQ1RJVkVfVVVJ RCwgJmRtZCk7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKwlpZiAoIWRtZC51dWlkKQor CQlyZXR1cm4gLUVJTlZBTDsKKworCXIgPSBkbV9yZW1vdmVfZGV2aWNlKGNkLCBuYW1lLCAw LCAwKTsKKwlpZiAociA8IDApCisJCWdvdG8gb3V0OworCisJciA9IFRDUllQVF9yZW1vdmVf b25lKGNkLCBuYW1lLCBkbWQudXVpZCwgMSk7CisJaWYgKHIgPCAwKQorCQlnb3RvIG91dDsK KworCXIgPSBUQ1JZUFRfcmVtb3ZlX29uZShjZCwgbmFtZSwgZG1kLnV1aWQsIDIpOworCWlm IChyIDwgMCkKKwkJZ290byBvdXQ7CitvdXQ6CisJZnJlZShDT05TVF9DQVNUKHZvaWQqKWRt ZC51dWlkKTsKKwlyZXR1cm4gKHIgPT0gLUVOT0RFVikgPyAwIDogcjsKK30KKworc3RhdGlj IGludCBUQ1JZUFRfc3RhdHVzX29uZShzdHJ1Y3QgY3J5cHRfZGV2aWNlICpjZCwgY29uc3Qg Y2hhciAqbmFtZSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmJhc2VfdXVpZCwgaW50IGluZGV4 LAorCQkJICAgICAgc2l6ZV90ICprZXlfc2l6ZSwgY2hhciAqY2lwaGVyLAorCQkJICAgICAg dWludDY0X3QgKmRhdGFfb2Zmc2V0LCBzdHJ1Y3QgZGV2aWNlICoqZGV2aWNlKQoreworCXN0 cnVjdCBjcnlwdF9kbV9hY3RpdmVfZGV2aWNlIGRtZCA9IHt9OworCWNoYXIgZG1fbmFtZVtQ QVRIX01BWF0sICpjOworCWludCByOworCisJaWYgKHNucHJpbnRmKGRtX25hbWUsIHNpemVv ZihkbV9uYW1lKSwgIiVzXyVkIiwgbmFtZSwgaW5kZXgpIDwgMCkKKwkJcmV0dXJuIC1FTk9N RU07CisKKwlyID0gZG1fc3RhdHVzX2RldmljZShjZCwgZG1fbmFtZSk7CisJaWYgKHIgPCAw KQorCQlyZXR1cm4gcjsKKworCXIgPSBkbV9xdWVyeV9kZXZpY2UoY2QsIGRtX25hbWUsIERN X0FDVElWRV9ERVZJQ0UgfAorCQkJCQkgIERNX0FDVElWRV9VVUlEIHwKKwkJCQkJICBETV9B Q1RJVkVfQ1JZUFRfQ0lQSEVSIHwKKwkJCQkJICBETV9BQ1RJVkVfQ1JZUFRfS0VZU0laRSwg JmRtZCk7CisJaWYgKHIgPiAwKQorCQlyID0gMDsKKwlpZiAoIXIgJiYgIXN0cm5jbXAoZG1k LnV1aWQsIGJhc2VfdXVpZCwgc3RybGVuKGJhc2VfdXVpZCkpKSB7CisJCWlmICgoYyA9IHN0 cmNocihkbWQudS5jcnlwdC5jaXBoZXIsICctJykpKQorCQkJKmMgPSAnXDAnOworCQlzdHJj YXQoY2lwaGVyLCAiLSIpOworCQlzdHJuY2F0KGNpcGhlciwgZG1kLnUuY3J5cHQuY2lwaGVy LCBNQVhfQ0lQSEVSX0xFTik7CisJCSprZXlfc2l6ZSArPSBkbWQudS5jcnlwdC52ay0+a2V5 bGVuZ3RoOworCQkqZGF0YV9vZmZzZXQgPSBkbWQudS5jcnlwdC5vZmZzZXQgKiBTRUNUT1Jf U0laRTsKKwkJZGV2aWNlX2ZyZWUoKmRldmljZSk7CisJCSpkZXZpY2UgPSBkbWQuZGF0YV9k ZXZpY2U7CisJfSBlbHNlIHsKKwkJZGV2aWNlX2ZyZWUoZG1kLmRhdGFfZGV2aWNlKTsKKwkJ ciA9IC1FTk9ERVY7CisJfQorCisJZnJlZShDT05TVF9DQVNUKHZvaWQqKWRtZC51dWlkKTsK KwlmcmVlKENPTlNUX0NBU1Qodm9pZCopZG1kLnUuY3J5cHQuY2lwaGVyKTsKKwljcnlwdF9m cmVlX3ZvbHVtZV9rZXkoZG1kLnUuY3J5cHQudmspOworCXJldHVybiByOworfQorCitpbnQg VENSWVBUX2luaXRfYnlfbmFtZShzdHJ1Y3QgY3J5cHRfZGV2aWNlICpjZCwgY29uc3QgY2hh ciAqbmFtZSwKKwkJCWNvbnN0IHN0cnVjdCBjcnlwdF9kbV9hY3RpdmVfZGV2aWNlICpkbWQs CisJCQlzdHJ1Y3QgZGV2aWNlICoqZGV2aWNlLAorCQkJc3RydWN0IGNyeXB0X3BhcmFtc190 Y3J5cHQgKnRjcnlwdF9wYXJhbXMsCisJCQlzdHJ1Y3QgdGNyeXB0X3BoZHIgKnRjcnlwdF9o ZHIpCit7CisJc3RydWN0IHRjcnlwdF9hbGdzICphbGdzOworCWNoYXIgY2lwaGVyW01BWF9D SVBIRVJfTEVOICogNF0sIG1vZGVbTUFYX0NJUEhFUl9MRU4rMV0sICp0bXA7CisJc2l6ZV90 IGtleV9zaXplOworCWludCByOworCisJbWVtc2V0KHRjcnlwdF9wYXJhbXMsIDAsIHNpemVv ZigqdGNyeXB0X3BhcmFtcykpOworCW1lbXNldCh0Y3J5cHRfaGRyLCAwLCBzaXplb2YoKnRj cnlwdF9oZHIpKTsKKwl0Y3J5cHRfaGRyLT5kLnNlY3Rvcl9zaXplID0gU0VDVE9SX1NJWkU7 CisJdGNyeXB0X2hkci0+ZC5ta19vZmZzZXQgPSBkbWQtPnUuY3J5cHQub2Zmc2V0ICogU0VD VE9SX1NJWkU7CisKKwlzdHJuY3B5KGNpcGhlciwgZG1kLT51LmNyeXB0LmNpcGhlciwgTUFY X0NJUEhFUl9MRU4pOworCXRtcCA9IHN0cmNocihjaXBoZXIsICctJyk7CisJaWYgKCF0bXAp CisJCXJldHVybiAtRUlOVkFMOworCSp0bXAgPSAnXDAnOworCW1vZGVbTUFYX0NJUEhFUl9M RU5dID0gJ1wwJzsKKwlzdHJuY3B5KG1vZGUsICsrdG1wLCBNQVhfQ0lQSEVSX0xFTik7CisK KwlrZXlfc2l6ZSA9IGRtZC0+dS5jcnlwdC52ay0+a2V5bGVuZ3RoOworCXIgPSBUQ1JZUFRf c3RhdHVzX29uZShjZCwgbmFtZSwgZG1kLT51dWlkLCAxLCAma2V5X3NpemUsCisJCQkgICAg ICBjaXBoZXIsICZ0Y3J5cHRfaGRyLT5kLm1rX29mZnNldCwgZGV2aWNlKTsKKwlpZiAoIXIp CisJCXIgPSBUQ1JZUFRfc3RhdHVzX29uZShjZCwgbmFtZSwgZG1kLT51dWlkLCAyLCAma2V5 X3NpemUsCisJCQkJICAgICAgY2lwaGVyLCAmdGNyeXB0X2hkci0+ZC5ta19vZmZzZXQsIGRl dmljZSk7CisKKwlpZiAociA8IDAgJiYgciAhPSAtRU5PREVWKQorCQlyZXR1cm4gcjsKKwor CWFsZ3MgPSBUQ1JZUFRfZ2V0X2FsZ3MoY2lwaGVyLCBtb2RlKTsKKwlpZiAoIWFsZ3MgfHwg a2V5X3NpemUgIT0gYWxncy0+Y2hhaW5fa2V5X3NpemUpCisJCXJldHVybiAtRUlOVkFMOwor CisJdGNyeXB0X3BhcmFtcy0+a2V5X3NpemUgPSBhbGdzLT5jaGFpbl9rZXlfc2l6ZTsKKwl0 Y3J5cHRfcGFyYW1zLT5jaXBoZXIgPSBhbGdzLT5sb25nX25hbWU7CisJdGNyeXB0X3BhcmFt cy0+bW9kZSA9IGFsZ3MtPm1vZGU7CisJcmV0dXJuIDA7Cit9CisKK3VpbnQ2NF90IFRDUllQ VF9nZXRfZGF0YV9vZmZzZXQoc3RydWN0IGNyeXB0X2RldmljZSAqY2QsCisJCQkJIHN0cnVj dCB0Y3J5cHRfcGhkciAqaGRyLAorCQkJCSBzdHJ1Y3QgY3J5cHRfcGFyYW1zX3RjcnlwdCAq cGFyYW1zKQoreworCXVpbnQ2NF90IHNpemU7CisKKwkvKiBObyByZWFsIGhlYWRlciBsb2Fk ZWQsIGluaXRpYWxpemVkIGJ5IGFjdGl2ZSBkZXZpY2UgKi8KKwlpZiAoIWhkci0+ZC52ZXJz aW9uKQorCQlnb3RvIGhkcl9vZmZzZXQ7CisKKwkvKiBNYXBwaW5nIHRocm91Z2ggd2hvbGUg ZGV2aWNlLCBub3QgcGFydGl0aW9uISAqLworCWlmIChwYXJhbXMtPmZsYWdzICYgQ1JZUFRf VENSWVBUX1NZU1RFTV9IRUFERVIpIHsKKwkJaWYgKGNyeXB0X2Rldl9pc19wYXJ0aXRpb24o ZGV2aWNlX3BhdGgoY3J5cHRfbWV0YWRhdGFfZGV2aWNlKGNkKSkpKQorCQkJcmV0dXJuIDA7 CisJCWdvdG8gaGRyX29mZnNldDsKKwl9CisKKwlpZiAocGFyYW1zLT5tb2RlICYmICFzdHJu Y21wKHBhcmFtcy0+bW9kZSwgInh0cyIsIDMpKSB7CisJCWlmIChoZHItPmQudmVyc2lvbiA8 IDMpCisJCQlyZXR1cm4gMTsKKworCQlpZiAocGFyYW1zLT5mbGFncyAmIENSWVBUX1RDUllQ VF9ISURERU5fSEVBREVSKSB7CisJCQlpZiAoaGRyLT5kLnZlcnNpb24gPiAzKQorCQkJCXJl dHVybiAoaGRyLT5kLm1rX29mZnNldCAvIGhkci0+ZC5zZWN0b3Jfc2l6ZSk7CisJCQlpZiAo ZGV2aWNlX3NpemUoY3J5cHRfbWV0YWRhdGFfZGV2aWNlKGNkKSwgJnNpemUpIDwgMCkKKwkJ CQlyZXR1cm4gMDsKKwkJCXJldHVybiAoc2l6ZSAtIGhkci0+ZC5oaWRkZW5fdm9sdW1lX3Np emUgKworCQkJCShUQ1JZUFRfSERSX0hJRERFTl9PRkZTRVRfT0xEKSkgLyBoZHItPmQuc2Vj dG9yX3NpemU7CisJCX0KKwkJZ290byBoZHJfb2Zmc2V0OworCX0KKworCWlmIChwYXJhbXMt PmZsYWdzICYgQ1JZUFRfVENSWVBUX0hJRERFTl9IRUFERVIpIHsKKwkJaWYgKGRldmljZV9z aXplKGNyeXB0X21ldGFkYXRhX2RldmljZShjZCksICZzaXplKSA8IDApCisJCQlyZXR1cm4g MDsKKwkJcmV0dXJuIChzaXplIC0gaGRyLT5kLmhpZGRlbl92b2x1bWVfc2l6ZSArCisJCQko VENSWVBUX0hEUl9ISURERU5fT0ZGU0VUX09MRCkpIC8gaGRyLT5kLnNlY3Rvcl9zaXplOwor CX0KKworaGRyX29mZnNldDoKKwlyZXR1cm4gaGRyLT5kLm1rX29mZnNldCAvIGhkci0+ZC5z ZWN0b3Jfc2l6ZTsKK30KKwordWludDY0X3QgVENSWVBUX2dldF9pdl9vZmZzZXQoc3RydWN0 IGNyeXB0X2RldmljZSAqY2QsCisJCQkgICAgICBzdHJ1Y3QgdGNyeXB0X3BoZHIgKmhkciwK KwkJCSAgICAgIHN0cnVjdCBjcnlwdF9wYXJhbXNfdGNyeXB0ICpwYXJhbXMpCit7CisJdWlu dDY0X3QgaXZfb2Zmc2V0OworCisJaWYgKHBhcmFtcy0+bW9kZSAmJiAhc3RybmNtcChwYXJh bXMtPm1vZGUsICJ4dHMiLCAzKSkKKwkJaXZfb2Zmc2V0ID0gVENSWVBUX2dldF9kYXRhX29m ZnNldChjZCwgaGRyLCBwYXJhbXMpOworCWVsc2UgaWYgKHBhcmFtcy0+bW9kZSAmJiAhc3Ry bmNtcChwYXJhbXMtPm1vZGUsICJscnciLCAzKSkKKwkJaXZfb2Zmc2V0ID0gMDsKKwllbHNl CisJCWl2X29mZnNldCA9IGhkci0+ZC5ta19vZmZzZXQgLyBoZHItPmQuc2VjdG9yX3NpemU7 CisKKwlpZiAocGFyYW1zLT5mbGFncyAmIENSWVBUX1RDUllQVF9TWVNURU1fSEVBREVSKQor CQlpdl9vZmZzZXQgKz0gY3J5cHRfZGV2X3BhcnRpdGlvbl9vZmZzZXQoZGV2aWNlX3BhdGgo Y3J5cHRfbWV0YWRhdGFfZGV2aWNlKGNkKSkpOworCisJcmV0dXJuIGl2X29mZnNldDsKK30K KworaW50IFRDUllQVF9nZXRfdm9sdW1lX2tleShzdHJ1Y3QgY3J5cHRfZGV2aWNlICpjZCwK KwkJCSAgc3RydWN0IHRjcnlwdF9waGRyICpoZHIsCisJCQkgIHN0cnVjdCBjcnlwdF9wYXJh bXNfdGNyeXB0ICpwYXJhbXMsCisJCQkgIHN0cnVjdCB2b2x1bWVfa2V5ICoqdmspCit7CisJ c3RydWN0IHRjcnlwdF9hbGdzICphbGdzOworCXVuc2lnbmVkIGludCBpLCBrZXlfaW5kZXg7 CisKKwlpZiAoIWhkci0+ZC52ZXJzaW9uKSB7CisJCWxvZ19lcnIoY2QsIF8oIlRoaXMgZnVu Y3Rpb24gaXMgbm90IHN1cHBvcnRlZCB3aXRob3V0IFRDUllQVCBoZWFkZXIgbG9hZC4iKSk7 CisJCXJldHVybiAtRU5PVFNVUDsKKwl9CisKKwlhbGdzID0gVENSWVBUX2dldF9hbGdzKHBh cmFtcy0+Y2lwaGVyLCBwYXJhbXMtPm1vZGUpOworCWlmICghYWxncykKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwkqdmsgPSBjcnlwdF9hbGxvY192b2x1bWVfa2V5KHBhcmFtcy0+a2V5X3Np emUsIE5VTEwpOworCWlmICghKnZrKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9 IDAsIGtleV9pbmRleCA9IDA7IGkgPCBhbGdzLT5jaGFpbl9jb3VudDsgaSsrKSB7CisJCVRD UllQVF9jb3B5X2tleSgmYWxncy0+Y2lwaGVyW2ldLCBhbGdzLT5tb2RlLAorCQkJCSYoKnZr KS0+a2V5W2tleV9pbmRleF0sIGhkci0+ZC5rZXlzKTsKKwkJa2V5X2luZGV4ICs9IGFsZ3Mt PmNpcGhlcltpXS5rZXlfc2l6ZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitz dGF0aWMgaW50IGxvZ19zdGRfaGV4ZHVtcChzdHJ1Y3QgY3J5cHRfZGV2aWNlICpjZCwgdWlu dDhfdCAqcCwgaW50IGxlbikKK3sKKwlpbnQgaTsKKworCisJZm9yKGkgPSAwOyBpIDwgbGVu OyBpKyspIHsKKwkJaWYgKGkgJiYgIShpICUgMTYpKQorCQkJbG9nX3N0ZChjZCwgIlxuXHRc dCIpOworCQlsb2dfc3RkKGNkLCAiJTAyaGh4ICIsIChjaGFyKXBbaV0pOworCX0KKwlsb2df c3RkKGNkLCAiXG4iKTsKKworCXJldHVybiAwOworfQorCitpbnQgR0VMSV9kdW1wKHN0cnVj dCBjcnlwdF9kZXZpY2UgKmNkLAorCQlzdHJ1Y3QgZ2VsaV9waGRyICpoZHIsCisJCXN0cnVj dCBjcnlwdF9wYXJhbXNfZ2VsaSAqcGFyYW1zKQoreworCWxvZ19zdGQoY2QsICJHRUxJIGhl YWRlciBpbmZvcm1hdGlvbiBmb3IgJXNcbiIsCisJCWRldmljZV9wYXRoKGNyeXB0X21ldGFk YXRhX2RldmljZShjZCkpKTsKKworCWlmIChoZHItPm1kX3ZlcnNpb24gPT0gNykgeworCQls b2dfc3RkKGNkLCAiTWFnaWM6XHRcdCVzXG4iLCBoZHItPm1kX21hZ2ljKTsKKwkJbG9nX3N0 ZChjZCwgIlZlcnNpb246XHQlIiBQUkl1MzIgIlxuIiwgaGRyLT5tZF92ZXJzaW9uKTsKKwkJ bG9nX3N0ZChjZCwgIkZsYWdzOlx0XHQweCUiIFBSSXgzMiAiXG4iLCBoZHItPm1kX2ZsYWdz KTsKKwkJbG9nX3N0ZChjZCwgIkVuY3J5cHRpb24gYWxnbzpcdDB4JSIgUFJJeDE2ICJcbiIs IGhkci0+bWRfZWFsZ28pOworCQlsb2dfc3RkKGNkLCAiS2V5IGxlbmd0aDpcdCUiIFBSSXUx NiAiXG4iLCBoZHItPm1kX2tleWxlbik7CisJCWxvZ19zdGQoY2QsICJBdXRoZW50aWNhdGlv biBhbGdvOlx0MHglIiBQUkl4MTYgIlxuIiwgaGRyLT5tZF9hYWxnbyk7CisJCWxvZ19zdGQo Y2QsICJQcm92aWRlciBzaXplOlx0JSIgUFJJdTY0ICJcbiIsIGhkci0+bWRfcHJvdnNpemUp OworCQlsb2dfc3RkKGNkLCAiU2VjdG9yIHNpemU6XHQlIiBQUkl1MzIgIlxuIiwgaGRyLT5t ZF9zZWN0b3JzaXplKTsKKwkJbG9nX3N0ZChjZCwgIk51bWJlciBvZiBrZXlzOlx0JSIgUFJJ dTggIlxuIiwgaGRyLT5tZF9rZXlzKTsKKwkJbG9nX3N0ZChjZCwgIk51bWJlciBvZiBpdGVy YXRpb25zOlx0JSIgUFJJdTMyICJcbiIsIGhkci0+bWRfaXRlcmF0aW9ucyk7CisJCWxvZ19z dGQoY2QsICJTYWx0Olx0XHRcdCIpOworCQlsb2dfc3RkX2hleGR1bXAoY2QsIGhkci0+bWRf c2FsdCwgR19FTElfU0FMVExFTik7CisJCWxvZ19zdGQoY2QsICJFbmNyeXB0ZWQgTUtleXM6 XHQiKTsKKwkJbG9nX3N0ZF9oZXhkdW1wKGNkLCBoZHItPm1kX21rZXlzYnVmLCBHX0VMSV9N QVhNS0VZUyAqIEdfRUxJX01LRVlMRU4pOworCQlsb2dfc3RkKGNkLCAiRW5jci4gSVYga2V5 IDA6XHRcdCIpOworCQlsb2dfc3RkX2hleGR1bXAoY2QsIGhkci0+bWRfbWtleXNsb3RbMF0u bWRfaXZrZXksIEdfRUxJX0lWS0VZTEVOKTsKKwkJbG9nX3N0ZChjZCwgIkVuY3IuIGRhdGEg a2V5IDA6XHQiKTsKKwkJbG9nX3N0ZF9oZXhkdW1wKGNkLCBoZHItPm1kX21rZXlzbG90WzBd Lm1kX2RhdGFrZXksIEdfRUxJX0RBVEFLRVlMRU4pOworCQlsb2dfc3RkKGNkLCAiRW5jci4g U0hBNTEyIEhNQUMgMDpcdCIpOworCQlsb2dfc3RkX2hleGR1bXAoY2QsIGhkci0+bWRfbWtl eXNsb3RbMF0ubWRfaG1hY3NoYTUxMiwgU0hBNTEyX01ETEVOKTsKKwkJbG9nX3N0ZChjZCwg IkVuY3IuIElWIGtleSAxOlx0XHQiKTsKKwkJbG9nX3N0ZF9oZXhkdW1wKGNkLCBoZHItPm1k X21rZXlzbG90WzFdLm1kX2l2a2V5LCBHX0VMSV9JVktFWUxFTik7CisJCWxvZ19zdGQoY2Qs ICJFbmNyLiBkYXRhIGtleSAxOlx0Iik7CisJCWxvZ19zdGRfaGV4ZHVtcChjZCwgaGRyLT5t ZF9ta2V5c2xvdFsxXS5tZF9kYXRha2V5LCBHX0VMSV9EQVRBS0VZTEVOKTsKKwkJbG9nX3N0 ZChjZCwgIkVuY3IuIFNIQTUxMiBITUFDIDE6XHQiKTsKKwkJbG9nX3N0ZF9oZXhkdW1wKGNk LCBoZHItPm1kX21rZXlzbG90WzFdLm1kX2htYWNzaGE1MTIsIFNIQTUxMl9NRExFTik7CisJ CWxvZ19zdGQoY2QsICJNRDU6XHRcdFx0Iik7CisJCWxvZ19zdGRfaGV4ZHVtcChjZCwgaGRy LT5tZF9oYXNoLCAxNik7CisJfSBlbHNlIHsKKwkJbG9nX3N0ZChjZCwgIlZlcnNpb24gJWQg bm90IHN1cHBvcnRlZFxuIiwgaGRyLT5tZF92ZXJzaW9uKTsKKwl9CisJcmV0dXJuIDA7Cit9 CmRpZmYgLS1naXQgYS9saWIvZ2VsaS9nZWxpLmggYi9saWIvZ2VsaS9nZWxpLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U5MDcwZQotLS0gL2Rldi9udWxsCisr KyBiL2xpYi9nZWxpL2dlbGkuaApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIEZyZWVCU0Qg R0VPTTo6RUxJIEdFTEkgY29tcGF0aWJsZSB2b2x1bWUgaGFuZGxpbmcKKyAqCisgKiBDb3B5 cmlnaHQgKEMpIDIwMTcsIENhcmwtRGFuaWVsIEhhaWxmaW5nZXIKKyAqCisgKiBUaGlzIGZp bGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgZmlsZSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug YWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv b3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2lmbmRlZiBfR0VMSV9I CisjZGVmaW5lIF9HRUxJX0gKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisvKiBSZWxldmFu dCBoZWFkZXIgcGFydHMgZnJvbSBGcmVlQlNEIHN5cy9nZW9tL2VsaS9nX2VsaS5oCisgKiBU T0RPOiBGaWd1cmUgb3V0IGlmIHRoYXQgaXMgYWN0dWFsbHkgT0sgZnJvbSBhIGxpY2Vuc2lu ZyBwZXJzcGVjdGl2ZS4KKyAqLworI2RlZmluZQlHX0VMSV9NQUdJQwkJIkdFT006OkVMSSIK KworI2RlZmluZSBTSEE1MTJfTURMRU4JCTY0CisKKyNkZWZpbmUJR19FTElfTUFYTUtFWVMJ CTIKKyNkZWZpbmUJR19FTElfTUFYS0VZTEVOCQk2NAorI2RlZmluZQlHX0VMSV9VU0VSS0VZ TEVOCUdfRUxJX01BWEtFWUxFTgorI2RlZmluZQlHX0VMSV9EQVRBS0VZTEVOCUdfRUxJX01B WEtFWUxFTgorI2RlZmluZQlHX0VMSV9BVVRIS0VZTEVOCUdfRUxJX01BWEtFWUxFTgorI2Rl ZmluZQlHX0VMSV9JVktFWUxFTgkJR19FTElfTUFYS0VZTEVOCisjZGVmaW5lCUdfRUxJX1NB TFRMRU4JCTY0CisjZGVmaW5lCUdfRUxJX0RBVEFJVktFWUxFTgkoR19FTElfREFUQUtFWUxF TiArIEdfRUxJX0lWS0VZTEVOKQorLyogRGF0YS1LZXksIElWLUtleSwgSE1BQ19TSEE1MTIo RGVyaXZlZC1LZXksIERhdGEtS2V5K0lWLUtleSkgKi8KKyNkZWZpbmUJR19FTElfTUtFWUxF TgkJKEdfRUxJX0RBVEFJVktFWUxFTiArIFNIQTUxMl9NRExFTikKKyNkZWZpbmUgTUQ1X01E TEVOCQkxNgorCitzdHJ1Y3QgZ2VsaV9ta2V5c2xvdCB7CisJdWludDhfdAkJbWRfaXZrZXlb R19FTElfSVZLRVlMRU5dOworCXVpbnQ4X3QJCW1kX2RhdGFrZXlbR19FTElfREFUQUtFWUxF Tl07CisJdWludDhfdAkJbWRfaG1hY3NoYTUxMltTSEE1MTJfTURMRU5dOworfTsKKworc3Ry dWN0IGdlbGlfcGhkciB7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJY2hhcgkJbWRfbWFn aWNbMTZdOwkvKiBNYWdpYyB2YWx1ZS4gKi8KKwkJCXVpbnQzMl90CW1kX3ZlcnNpb247CS8q IFZlcnNpb24gbnVtYmVyLiAqLworCQkJdWludDMyX3QJbWRfZmxhZ3M7CS8qIEFkZGl0aW9u YWwgZmxhZ3MuICovCisJCQl1aW50MTZfdAltZF9lYWxnbzsJLyogRW5jcnlwdGlvbiBhbGdv cml0aG0uICovCisJCQl1aW50MTZfdAltZF9rZXlsZW47CS8qIEtleSBsZW5ndGguICovCisJ CQl1aW50MTZfdAltZF9hYWxnbzsJLyogQXV0aGVudGljYXRpb24gYWxnb3JpdGhtLiAqLwor CQkJdWludDY0X3QJbWRfcHJvdnNpemU7CS8qIFByb3ZpZGVyJ3Mgc2l6ZS4gKi8KKwkJCXVp bnQzMl90CW1kX3NlY3RvcnNpemU7CS8qIFNlY3RvciBzaXplLiAqLworCQkJdWludDhfdAkJ bWRfa2V5czsJLyogQXZhaWxhYmxlIGtleXMuICovCisJCQlpbnQzMl90CQltZF9pdGVyYXRp b25zOwkvKiBOdW1iZXIgb2YgaXRlcmF0aW9ucyBmb3IgUEtDUyM1djIuICovCisJCQl1aW50 OF90CQltZF9zYWx0W0dfRUxJX1NBTFRMRU5dOyAvKiBTYWx0LiAqLworCQkJCQkvKiBFbmNy eXB0ZWQgbWFzdGVyIGtleSAoSVYta2V5LCBEYXRhLWtleSwgSE1BQykuICovCisJCQl1bmlv biB7CisJCQkJdWludDhfdAkJCW1kX21rZXlzYnVmW0dfRUxJX01BWE1LRVlTICogR19FTElf TUtFWUxFTl07CisJCQkJc3RydWN0IGdlbGlfbWtleXNsb3QJbWRfbWtleXNsb3RbR19FTElf TUFYTUtFWVNdOworCQkJfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CisJCQl1X2No YXIJCW1kX2hhc2hbTUQ1X01ETEVOXTsJLyogTUQ1IGhhc2guICovCisJCX0gX19hdHRyaWJ1 dGVfXygoX19wYWNrZWRfXykpOworCQljaGFyCQkJYnl0ZWFycmF5WzUxMV07CisJfSBfX2F0 dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Cit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18p KTsKKworaW50IEdFTElfcmVhZF9waGRyKHN0cnVjdCBjcnlwdF9kZXZpY2UgKmNkLAorCQkg ICAgIHN0cnVjdCBnZWxpX3BoZHIgKmhkciwKKwkJICAgICBzdHJ1Y3QgY3J5cHRfcGFyYW1z X2dlbGkgKnBhcmFtcyk7CisKK2ludCBHRUxJX2R1bXAoc3RydWN0IGNyeXB0X2RldmljZSAq Y2QsCisJCXN0cnVjdCBnZWxpX3BoZHIgKmhkciwKKwkJc3RydWN0IGNyeXB0X3BhcmFtc19n ZWxpICpwYXJhbXMpOworCisjaWYgMAorc3RydWN0IGNyeXB0X2RldmljZTsKK3N0cnVjdCB2 b2x1bWVfa2V5OworCitpbnQgR0VMSV9wYXJzZV9rZXlmaWxlKHN0cnVjdCBjcnlwdF9kZXZp Y2UgKmNkLAorCQkJICBzdHJ1Y3Qgdm9sdW1lX2tleSAqKnZrLAorCQkJICBjb25zdCBjaGFy ICpoYXNoLAorCQkJICB1bnNpZ25lZCBpbnQgKmtleXNfY291bnQsCisJCQkgIGNoYXIgKmJ1 ZmZlciwKKwkJCSAgc2l6ZV90IGJ1ZmZlcl9sZW4pOworCitpbnQgR0VMSV9hY3RpdmF0ZShz dHJ1Y3QgY3J5cHRfZGV2aWNlICpjZCwKKwkJICAgICBjb25zdCBjaGFyICpuYW1lLAorCQkg ICAgIGNvbnN0IGNoYXIgKmJhc2VfY2lwaGVyLAorCQkgICAgIHVuc2lnbmVkIGludCBrZXlz X2NvdW50LAorCQkgICAgIHN0cnVjdCB2b2x1bWVfa2V5ICp2aywKKwkJICAgICB1aW50MzJf dCBmbGFncyk7CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2xpYmNyeXB0c2V0 dXAuaCBiL2xpYi9saWJjcnlwdHNldHVwLmgKaW5kZXggODBiYmY1Yy4uOGUzMTQ0NCAxMDA2 NDQKLS0tIGEvbGliL2xpYmNyeXB0c2V0dXAuaAorKysgYi9saWIvbGliY3J5cHRzZXR1cC5o CkBAIC0yNDMsNiArMjQzLDggQEAgaW50IGNyeXB0X21lbW9yeV9sb2NrKHN0cnVjdCBjcnlw dF9kZXZpY2UgKmNkLCBpbnQgbG9jayk7CiAjZGVmaW5lIENSWVBUX1ZFUklUWSAiVkVSSVRZ IgogLyoqIFRDUllQVCAoVHJ1ZUNyeXB0LWNvbXBhdGlibGUgYW5kIFZlcmFDcnlwdC1jb21w YXRpYmxlKSBtb2RlICovCiAjZGVmaW5lIENSWVBUX1RDUllQVCAiVENSWVBUIgorLyoqIEdF TEkgKEZyZWVCU0QgR0VPTTo6RUxJKSBtb2RlICovCisjZGVmaW5lIENSWVBUX0dFTEkgIkdF TEkiCiAKIC8qKgogICogR2V0IGRldmljZSB0eXBlCkBAIC0zNTQsNiArMzU2LDE3IEBAIHN0 cnVjdCBjcnlwdF9wYXJhbXNfdGNyeXB0IHsKICAqLwogI2RlZmluZSBDUllQVF9UQ1JZUFRf VkVSQV9NT0RFUyAgICAgICgxIDw8IDQpCiAKKy8qKgorICoKKyAqIFN0cnVjdHVyZSB1c2Vk IGFzIHBhcmFtZXRlciBmb3IgR0VMSSBkZXZpY2UgdHlwZS4KKyAqCisgKiBAc2VlIGNyeXB0 X2Zvcm1hdAorICoKKyAqLworc3RydWN0IGNyeXB0X3BhcmFtc19nZWxpIHsKKwlpbnQgZHVt bXk7Cit9OworCiAvKiogQH0gKi8KIAogLyoqCmRpZmYgLS1naXQgYS9saWIvc2V0dXAuYyBi L2xpYi9zZXR1cC5jCmluZGV4IDFkY2E5OWIuLjdkMzk0YWMgMTAwNjQ0Ci0tLSBhL2xpYi9z ZXR1cC5jCisrKyBiL2xpYi9zZXR1cC5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAi bG9vcGFlcy5oIgogI2luY2x1ZGUgInZlcml0eS5oIgogI2luY2x1ZGUgInRjcnlwdC5oIgor I2luY2x1ZGUgImdlbGkuaCIKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCiBzdHJ1Y3QgY3J5 cHRfZGV2aWNlIHsKQEAgLTc2LDYgKzc3LDEwIEBAIHN0cnVjdCBjcnlwdF9kZXZpY2Ugewog CQlzdHJ1Y3QgY3J5cHRfcGFyYW1zX3RjcnlwdCBwYXJhbXM7CiAJCXN0cnVjdCB0Y3J5cHRf cGhkciBoZHI7CiAJfSB0Y3J5cHQ7CisJc3RydWN0IHsgLyogdXNlZCBpbiBDUllQVF9HRUxJ ICovCisJCXN0cnVjdCBjcnlwdF9wYXJhbXNfZ2VsaSBwYXJhbXM7CisJCXN0cnVjdCBnZWxp X3BoZHIgaGRyOworCX0gZ2VsaTsKIAlzdHJ1Y3QgeyAvKiB1c2VkIGlmIGluaXRpYWxpemVk IHdpdGhvdXQgaGVhZGVyIGJ5IG5hbWUgKi8KIAkJY2hhciAqYWN0aXZlX25hbWU7CiAJCS8q IGJ1ZmZlcnMsIG11c3QgcmVmcmVzaCBmcm9tIGtlcm5lbCBvbiBldmVyeSBxdWVyeSAqLwpA QCAtMjQ1LDYgKzI1MCwxMSBAQCBzdGF0aWMgaW50IGlzVENSWVBUKGNvbnN0IGNoYXIgKnR5 cGUpCiAJcmV0dXJuICh0eXBlICYmICFzdHJjbXAoQ1JZUFRfVENSWVBULCB0eXBlKSk7CiB9 CiAKK3N0YXRpYyBpbnQgaXNHRUxJKGNvbnN0IGNoYXIgKnR5cGUpCit7CisJcmV0dXJuICh0 eXBlICYmICFzdHJjbXAoQ1JZUFRfR0VMSSwgdHlwZSkpOworfQorCiBzdGF0aWMgaW50IG9u bHlMVUtTKHN0cnVjdCBjcnlwdF9kZXZpY2UgKmNkKQogewogCWludCByID0gMDsKQEAgLTU4 MSw2ICs1OTEsMzAgQEAgc3RhdGljIGludCBfY3J5cHRfbG9hZF90Y3J5cHQoc3RydWN0IGNy eXB0X2RldmljZSAqY2QsIHN0cnVjdCBjcnlwdF9wYXJhbXNfdGNyeXAKIAlyZXR1cm4gcjsK IH0KIAorc3RhdGljIGludCBfY3J5cHRfbG9hZF9nZWxpKHN0cnVjdCBjcnlwdF9kZXZpY2Ug KmNkLCBzdHJ1Y3QgY3J5cHRfcGFyYW1zX2dlbGkgKnBhcmFtcykKK3sKKwlpbnQgcjsKKwor CWlmICghcGFyYW1zKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXIgPSBpbml0X2NyeXB0byhj ZCk7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKworCW1lbWNweSgmY2QtPnUuZ2VsaS5w YXJhbXMsIHBhcmFtcywgc2l6ZW9mKCpwYXJhbXMpKTsKKworCXIgPSBHRUxJX3JlYWRfcGhk cihjZCwgJmNkLT51LmdlbGkuaGRyLCAmY2QtPnUuZ2VsaS5wYXJhbXMpOworCisJaWYgKHIg PCAwKQorCQlyZXR1cm4gcjsKKworCWlmICghY2QtPnR5cGUgJiYgIShjZC0+dHlwZSA9IHN0 cmR1cChDUllQVF9HRUxJKSkpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIHI7Cit9 CisKIHN0YXRpYyBpbnQgX2NyeXB0X2xvYWRfdmVyaXR5KHN0cnVjdCBjcnlwdF9kZXZpY2Ug KmNkLCBzdHJ1Y3QgY3J5cHRfcGFyYW1zX3Zlcml0eSAqcGFyYW1zKQogewogCWludCByOwpA QCAtNjgzLDYgKzcxNyw5IEBAIHN0YXRpYyBpbnQgX2luaXRfYnlfbmFtZV9jcnlwdChzdHJ1 Y3QgY3J5cHRfZGV2aWNlICpjZCwgY29uc3QgY2hhciAqbmFtZSkKIAl9IGVsc2UgaWYgKGlz VENSWVBUKGNkLT50eXBlKSkgewogCQlyID0gVENSWVBUX2luaXRfYnlfbmFtZShjZCwgbmFt ZSwgJmRtZCwgJmNkLT5kZXZpY2UsCiAJCQkJCSZjZC0+dS50Y3J5cHQucGFyYW1zLCAmY2Qt PnUudGNyeXB0Lmhkcik7CisJfSBlbHNlIGlmIChpc0dFTEkoY2QtPnR5cGUpKSB7CisJCS8v RklYTUUgciA9IEdFTElfaW5pdF9ieV9uYW1lKGNkLCBuYW1lLCAmZG1kLCAmY2QtPmRldmlj ZSwKKwkJLy9GSVhNRQkJCSZjZC0+dS5nZWxpLnBhcmFtcywgJmNkLT51LmdlbGkuaGRyKTsK IAl9CiBvdXQ6CiAJY3J5cHRfZnJlZV92b2x1bWVfa2V5KGRtZC51LmNyeXB0LnZrKTsKQEAg LTc5MCw2ICs4MjcsOCBAQCBpbnQgY3J5cHRfaW5pdF9ieV9uYW1lX2FuZF9oZWFkZXIoc3Ry dWN0IGNyeXB0X2RldmljZSAqKmNkLAogCQkJKCpjZCktPnR5cGUgPSBzdHJkdXAoQ1JZUFRf VkVSSVRZKTsKIAkJZWxzZSBpZiAoIXN0cm5jbXAoQ1JZUFRfVENSWVBULCBkbWQudXVpZCwg c2l6ZW9mKENSWVBUX1RDUllQVCktMSkpCiAJCQkoKmNkKS0+dHlwZSA9IHN0cmR1cChDUllQ VF9UQ1JZUFQpOworCQllbHNlIGlmICghc3RybmNtcChDUllQVF9HRUxJLCBkbWQudXVpZCwg c2l6ZW9mKENSWVBUX0dFTEkpLTEpKQorCQkJKCpjZCktPnR5cGUgPSBzdHJkdXAoQ1JZUFRf R0VMSSk7CiAJCWVsc2UKIAkJCWxvZ19kYmcoIlVua25vd24gVVVJRCBzZXQsIHNvbWUgcGFy YW1ldGVycyBhcmUgbm90IHNldC4iKTsKIAl9IGVsc2UKQEAgLTExNzcsNiArMTIxNiwxMiBA QCBpbnQgY3J5cHRfbG9hZChzdHJ1Y3QgY3J5cHRfZGV2aWNlICpjZCwKIAkJCXJldHVybiAt RUlOVkFMOwogCQl9CiAJCXIgPSBfY3J5cHRfbG9hZF90Y3J5cHQoY2QsIHBhcmFtcyk7CisJ fSBlbHNlIGlmIChpc0dFTEkocmVxdWVzdGVkX3R5cGUpKSB7CisJCWlmIChjZC0+dHlwZSAm JiAhaXNHRUxJKGNkLT50eXBlKSkgeworCQkJbG9nX2RiZygiQ29udGV4dCBpcyBhbHJlYWR5 IGluaXRpYWxpc2VkIHRvIHR5cGUgJXMiLCBjZC0+dHlwZSk7CisJCQlyZXR1cm4gLUVJTlZB TDsKKwkJfQorCQlyID0gX2NyeXB0X2xvYWRfZ2VsaShjZCwgcGFyYW1zKTsKIAl9IGVsc2UK IAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTIwMzIsNiArMjA3NywxMSBAQCBpbnQgY3J5cHRf YWN0aXZhdGVfYnlfdm9sdW1lX2tleShzdHJ1Y3QgY3J5cHRfZGV2aWNlICpjZCwKIAkJCXJl dHVybiAwOwogCQlyID0gVENSWVBUX2FjdGl2YXRlKGNkLCBuYW1lLCAmY2QtPnUudGNyeXB0 LmhkciwKIAkJCQkgICAgJmNkLT51LnRjcnlwdC5wYXJhbXMsIGZsYWdzKTsKKwl9IGVsc2Ug aWYgKGlzR0VMSShjZC0+dHlwZSkpIHsKKwkJaWYgKCFuYW1lKQorCQkJcmV0dXJuIDA7CisJ CS8vRklYTUUgciA9IEdFTElfYWN0aXZhdGUoY2QsIG5hbWUsICZjZC0+dS5nZWxpLmhkciwK KwkJLy9GSVhNRQkJICAgICZjZC0+dS5nZWxpLnBhcmFtcywgZmxhZ3MpOwogCX0gZWxzZQog CQlsb2dfZXJyKGNkLCBfKCJEZXZpY2UgdHlwZSBpcyBub3QgcHJvcGVybHkgaW5pdGlhbGlz ZWQuXG4iKSk7CiAKQEAgLTIxMTUsNiArMjE2NSw4IEBAIGludCBjcnlwdF92b2x1bWVfa2V5 X2dldChzdHJ1Y3QgY3J5cHRfZGV2aWNlICpjZCwKIAkJCQkJcGFzc3BocmFzZV9zaXplLCAm Y2QtPnUubHVrczEuaGRyLCAmdmssIGNkKTsKIAl9IGVsc2UgaWYgKGlzVENSWVBUKGNkLT50 eXBlKSkgewogCQlyID0gVENSWVBUX2dldF92b2x1bWVfa2V5KGNkLCAmY2QtPnUudGNyeXB0 LmhkciwgJmNkLT51LnRjcnlwdC5wYXJhbXMsICZ2ayk7CisJfSBlbHNlIGlmIChpc0dFTEko Y2QtPnR5cGUpKSB7CisJCS8vRklYTUUgciA9IEdFTElfZ2V0X3ZvbHVtZV9rZXkoY2QsICZj ZC0+dS5nZWxpLmhkciwgJmNkLT51LmdlbGkucGFyYW1zLCAmdmspOwogCX0gZWxzZQogCQls b2dfZXJyKGNkLCBfKCJUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciAlcyBj cnlwdCBkZXZpY2UuXG4iKSwgY2QtPnR5cGUgPzogIihub25lKSIpOwogCkBAIC0yMjg5LDYg KzIzNDEsOCBAQCBpbnQgY3J5cHRfZHVtcChzdHJ1Y3QgY3J5cHRfZGV2aWNlICpjZCkKIAkJ cmV0dXJuIF92ZXJpdHlfZHVtcChjZCk7CiAJZWxzZSBpZiAoaXNUQ1JZUFQoY2QtPnR5cGUp KQogCQlyZXR1cm4gVENSWVBUX2R1bXAoY2QsICZjZC0+dS50Y3J5cHQuaGRyLCAmY2QtPnUu dGNyeXB0LnBhcmFtcyk7CisJZWxzZSBpZiAoaXNHRUxJKGNkLT50eXBlKSkKKwkJcmV0dXJu IEdFTElfZHVtcChjZCwgJmNkLT51LmdlbGkuaGRyLCAmY2QtPnUuZ2VsaS5wYXJhbXMpOwog CiAJbG9nX2VycihjZCwgXygiRHVtcCBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBmb3Ig dGhpcyBkZXZpY2UgdHlwZS5cbiIpKTsKIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTIzMzMsNiAr MjM4NywxMCBAQCBjb25zdCBjaGFyICpjcnlwdF9nZXRfY2lwaGVyKHN0cnVjdCBjcnlwdF9k ZXZpY2UgKmNkKQogCWlmIChpc1RDUllQVChjZC0+dHlwZSkpCiAJCXJldHVybiBjZC0+dS50 Y3J5cHQucGFyYW1zLmNpcGhlcjsKIAorCWlmIChpc0dFTEkoY2QtPnR5cGUpKQorCQlyZXR1 cm4gImFlcyI7CisJCS8vRklYTUUgcmV0dXJuIGNkLT51LmdlbGkucGFyYW1zLmNpcGhlcjsK KwogCWlmICghY2QtPnR5cGUgJiYgIV9pbml0X2J5X25hbWVfY3J5cHRfbm9uZShjZCkpCiAJ CXJldHVybiBjZC0+dS5ub25lLmNpcGhlcjsKIApAQCAtMjM1Myw2ICsyNDExLDEwIEBAIGNv bnN0IGNoYXIgKmNyeXB0X2dldF9jaXBoZXJfbW9kZShzdHJ1Y3QgY3J5cHRfZGV2aWNlICpj ZCkKIAlpZiAoaXNUQ1JZUFQoY2QtPnR5cGUpKQogCQlyZXR1cm4gY2QtPnUudGNyeXB0LnBh cmFtcy5tb2RlOwogCisJaWYgKGlzR0VMSShjZC0+dHlwZSkpCisJCXJldHVybiAieHRzLWJ5 dGU2NCI7CisJCS8vRklYTUUgcmV0dXJuIGNkLT51LmdlbGkucGFyYW1zLm1vZGU7CisKIAlp ZiAoIWNkLT50eXBlICYmICFfaW5pdF9ieV9uYW1lX2NyeXB0X25vbmUoY2QpKQogCQlyZXR1 cm4gY2QtPnUubm9uZS5jaXBoZXJfbW9kZTsKIApAQCAtMjM5Nyw2ICsyNDU5LDEwIEBAIGlu dCBjcnlwdF9nZXRfdm9sdW1lX2tleV9zaXplKHN0cnVjdCBjcnlwdF9kZXZpY2UgKmNkKQog CWlmIChpc1RDUllQVChjZC0+dHlwZSkpCiAJCXJldHVybiBjZC0+dS50Y3J5cHQucGFyYW1z LmtleV9zaXplOwogCisJaWYgKGlzR0VMSShjZC0+dHlwZSkpCisJCXJldHVybiAyNTY7CisJ CS8vRklYTUUgcmV0dXJuIGNkLT51LmdlbGkucGFyYW1zLmtleV9zaXplOworCiAJaWYgKCFj ZC0+dHlwZSAmJiAhX2luaXRfYnlfbmFtZV9jcnlwdF9ub25lKGNkKSkKIAkJcmV0dXJuIGNk LT51Lm5vbmUua2V5X3NpemU7CiAKQEAgLTI0MzQsNiArMjUwMCw3IEBAIHVpbnQ2NF90IGNy eXB0X2dldF9pdl9vZmZzZXQoc3RydWN0IGNyeXB0X2RldmljZSAqY2QpCiAJaWYgKGlzVENS WVBUKGNkLT50eXBlKSkKIAkJcmV0dXJuIFRDUllQVF9nZXRfaXZfb2Zmc2V0KGNkLCAmY2Qt PnUudGNyeXB0LmhkciwgJmNkLT51LnRjcnlwdC5wYXJhbXMpOwogCisJLy9GSVhNRTogR0VM ST8KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2NyeXB0c2V0dXAuYyBiL3Ny Yy9jcnlwdHNldHVwLmMKaW5kZXggMmQ2ZGRhZi4uYTY2NWZlYSAxMDA2NDQKLS0tIGEvc3Jj L2NyeXB0c2V0dXAuYworKysgYi9zcmMvY3J5cHRzZXR1cC5jCkBAIC0zODIsNiArMzgyLDEw MSBAQCBvdXQ6CiAJcmV0dXJuIHI7CiB9CiAKK3N0YXRpYyBpbnQgZ2VsaV9sb2FkKHN0cnVj dCBjcnlwdF9kZXZpY2UgKmNkLCBzdHJ1Y3QgY3J5cHRfcGFyYW1zX2dlbGkgKnBhcmFtcykK K3sKKwlpbnQgciwgZXBlcm0gPSAwOworCisJZG8geworCQlsb2dfc3RkKCJHRUxJIHRyYWNr aW5nOiA1XG4iKTsKKwkJciA9IGNyeXB0X2xvYWQoY2QsIENSWVBUX0dFTEksIHBhcmFtcyk7 CisJCWxvZ19zdGQoIkdFTEkgdHJhY2tpbmc6IDYgY3J5cHRfbG9hZCByZXR1cm5lZCAlaVxu Iiwgcik7CisKKwkJaWYgKHIgPT0gLUVQRVJNKSB7CisJCQlsb2dfZXJyKF8oIk5vIGRldmlj ZSBoZWFkZXIgZGV0ZWN0ZWQgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy5cbiIpKTsKKwkJ CWVwZXJtID0gMTsKKwkJfQorCisjaWYgMAorCQlpZiAociA8IDApIHsKKwkJCWNyeXB0X3Nh ZmVfZnJlZShDT05TVF9DQVNUKGNoYXIqKXBhcmFtcy0+cGFzc3BocmFzZSk7CisJCQlwYXJh bXMtPnBhc3NwaHJhc2UgPSBOVUxMOworCQkJcGFyYW1zLT5wYXNzcGhyYXNlX3NpemUgPSAw OworCQl9CisjZW5kaWYKKwkJY2hlY2tfc2lnbmFsKCZyKTsKKwl9IHdoaWxlICgwKTsKKwor CS8qIFJlcG9ydCB3cm9uZyBwYXNzcGhyYXNlIGlmIGF0IGxlYXN0IG9uZSB0cnkgZmFpbGVk ICovCisJaWYgKGVwZXJtICYmIHIgPT0gLUVQSVBFKQorCQlyID0gLUVQRVJNOworCisJbG9n X3N0ZCgiR0VMSSB0cmFja2luZzogN1xuIik7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBp bnQgYWN0aW9uX29wZW5fZ2VsaSh2b2lkKQoreworCXN0cnVjdCBjcnlwdF9kZXZpY2UgKmNk ID0gTlVMTDsKKwlzdHJ1Y3QgY3J5cHRfcGFyYW1zX2dlbGkgcGFyYW1zID0geworCQkuZHVt bXkgPSAwLAorCX07CisJY29uc3QgY2hhciAqYWN0aXZhdGVkX25hbWU7CisJdWludDMyX3Qg YWN0aXZhdGVfZmxhZ3MgPSAwOworCWludCByOworCisJYWN0aXZhdGVkX25hbWUgPSBvcHRf dGVzdF9wYXNzcGhyYXNlID8gTlVMTCA6IGFjdGlvbl9hcmd2WzFdOworCisJbG9nX3N0ZCgi R0VMSSB0cmFja2luZzogOVxuIik7CisJaWYgKChyID0gY3J5cHRfaW5pdCgmY2QsIGFjdGlv bl9hcmd2WzBdKSkpCisJCWdvdG8gb3V0OworCisJbG9nX3N0ZCgiR0VMSSB0cmFja2luZzog MTBcbiIpOworCXIgPSBnZWxpX2xvYWQoY2QsICZwYXJhbXMpOworCWlmIChyIDwgMCkKKwkJ Z290byBvdXQ7CisKKwlsb2dfc3RkKCJHRUxJIHRyYWNraW5nOiAxMVxuIik7CisJX3NldF9h Y3RpdmF0aW9uX2ZsYWdzKCZhY3RpdmF0ZV9mbGFncyk7CisKKwlsb2dfc3RkKCJHRUxJIHRy YWNraW5nOiAxMlxuIik7CisJaWYgKGFjdGl2YXRlZF9uYW1lKQorCQlyID0gY3J5cHRfYWN0 aXZhdGVfYnlfdm9sdW1lX2tleShjZCwgYWN0aXZhdGVkX25hbWUsIE5VTEwsIDAsIGFjdGl2 YXRlX2ZsYWdzKTsKK291dDoKKwlsb2dfc3RkKCJHRUxJIHRyYWNraW5nOiAxM1xuIik7CisJ Y3J5cHRfZnJlZShjZCk7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQgYWN0aW9uX2dl bGlEdW1wKHZvaWQpCit7CisJc3RydWN0IGNyeXB0X2RldmljZSAqY2QgPSBOVUxMOworCXN0 cnVjdCBjcnlwdF9wYXJhbXNfZ2VsaSBwYXJhbXMgPSB7CisJCS5kdW1teSA9IDAsCisJfTsK KwlpbnQgcjsKKworCWxvZ19zdGQoIkdFTEkgdHJhY2tpbmc6IDFcbiIpOworCWlmICgociA9 IGNyeXB0X2luaXQoJmNkLCBhY3Rpb25fYXJndlswXSkpKQorCQlnb3RvIG91dDsKKworCWxv Z19zdGQoIkdFTEkgdHJhY2tpbmc6IDJcbiIpOworCXIgPSBnZWxpX2xvYWQoY2QsICZwYXJh bXMpOworCWlmIChyIDwgMCkKKwkJZ290byBvdXQ7CisKKyNpZiAwCisJaWYgKG9wdF9kdW1w X21hc3Rlcl9rZXkpCisJCXIgPSBnZWxpRHVtcF93aXRoX3ZvbHVtZV9rZXkoY2QpOworCWVs c2UKKyNlbmRpZgorCWxvZ19zdGQoIkdFTEkgdHJhY2tpbmc6IDNcbiIpOworCQlyID0gY3J5 cHRfZHVtcChjZCk7CitvdXQ6CisJY3J5cHRfZnJlZShjZCk7CisJbG9nX3N0ZCgiR0VMSSB0 cmFja2luZzogNFxuIik7CisJcmV0dXJuIHI7Cit9CisKIHN0YXRpYyBpbnQgYWN0aW9uX2Ns b3NlKHZvaWQpCiB7CiAJc3RydWN0IGNyeXB0X2RldmljZSAqY2QgPSBOVUxMOwpAQCAtMTI5 NSw2ICsxMzkwLDcgQEAgb3V0OgogCiBzdGF0aWMgaW50IGFjdGlvbl9vcGVuKHZvaWQpCiB7 CisJbG9nX3N0ZCgiR0VMSSB0cmFja2luZzogMTRcbiIpOwogCWlmICghb3B0X3R5cGUpCiAJ CXJldHVybiAtRUlOVkFMOwogCkBAIC0xMzE0LDYgKzE0MTAsMTEgQEAgc3RhdGljIGludCBh Y3Rpb25fb3Blbih2b2lkKQogCQlpZiAoYWN0aW9uX2FyZ2MgPCAyICYmICFvcHRfdGVzdF9w YXNzcGhyYXNlKQogCQkJZ290byBhcmdzOwogCQlyZXR1cm4gYWN0aW9uX29wZW5fdGNyeXB0 KCk7CisJfSBlbHNlIGlmICghc3RyY21wKG9wdF90eXBlLCAiZ2VsaSIpKSB7CisJCWxvZ19z dGQoIkdFTEkgdHJhY2tpbmc6IDhcbiIpOworCQlpZiAoYWN0aW9uX2FyZ2MgPCAyKQorCQkJ Z290byBhcmdzOworCQlyZXR1cm4gYWN0aW9uX29wZW5fZ2VsaSgpOwogCX0KIAogCWxvZ19l cnIoXygiVW5yZWNvZ25pemVkIG1ldGFkYXRhIGRldmljZSB0eXBlICVzLlxuIiksIG9wdF90 eXBlKTsKQEAgLTEzODgsNiArMTQ4OSw3IEBAIHN0YXRpYyBzdHJ1Y3QgYWN0aW9uX3R5cGUg ewogCXsgImlzTHVrcyIsICAgICAgIGFjdGlvbl9pc0x1a3MsICAgICAgIDEsIDAsIE5fKCI8 ZGV2aWNlPiIpLCBOXygidGVzdHMgPGRldmljZT4gZm9yIExVS1MgcGFydGl0aW9uIGhlYWRl ciIpIH0sCiAJeyAibHVrc0R1bXAiLCAgICAgYWN0aW9uX2x1a3NEdW1wLCAgICAgMSwgMSwg Tl8oIjxkZXZpY2U+IiksIE5fKCJkdW1wIExVS1MgcGFydGl0aW9uIGluZm9ybWF0aW9uIikg fSwKIAl7ICJ0Y3J5cHREdW1wIiwgICBhY3Rpb25fdGNyeXB0RHVtcCwgICAxLCAxLCBOXygi PGRldmljZT4iKSwgTl8oImR1bXAgVENSWVBUIGRldmljZSBpbmZvcm1hdGlvbiIpIH0sCisJ eyAiZ2VsaUR1bXAiLCAgICAgYWN0aW9uX2dlbGlEdW1wLCAgICAgMSwgMSwgTl8oIjxkZXZp Y2U+IiksIE5fKCJkdW1wIEdFTEkgZGV2aWNlIGluZm9ybWF0aW9uIikgfSwKIAl7ICJsdWtz U3VzcGVuZCIsICBhY3Rpb25fbHVrc1N1c3BlbmQsICAxLCAxLCBOXygiPGRldmljZT4iKSwg Tl8oIlN1c3BlbmQgTFVLUyBkZXZpY2UgYW5kIHdpcGUga2V5IChhbGwgSU9zIGFyZSBmcm96 ZW4pLiIpIH0sCiAJeyAibHVrc1Jlc3VtZSIsICAgYWN0aW9uX2x1a3NSZXN1bWUsICAgMSwg MSwgTl8oIjxkZXZpY2U+IiksIE5fKCJSZXN1bWUgc3VzcGVuZGVkIExVS1MgZGV2aWNlLiIp IH0sCiAJeyAibHVrc0hlYWRlckJhY2t1cCIsIGFjdGlvbl9sdWtzQmFja3VwLDEsMSwgTl8o IjxkZXZpY2U+IiksIE5fKCJCYWNrdXAgTFVLUyBkZXZpY2UgaGVhZGVyIGFuZCBrZXlzbG90 cyIpIH0sCkBAIC0xNTI0LDcgKzE2MjYsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY29uc3Qg Y2hhciAqKmFyZ3YpCiAJCXsgInRjcnlwdC1zeXN0ZW0iLCAgICAgJ1wwJywgUE9QVF9BUkdf Tk9ORSwgJm9wdF90Y3J5cHRfc3lzdGVtLCAgICAgICAgIDAsIE5fKCJEZXZpY2UgaXMgc3lz dGVtIFRDUllQVCBkcml2ZSAod2l0aCBib290bG9hZGVyKS4iKSwgTlVMTCB9LAogCQl7ICJ0 Y3J5cHQtYmFja3VwIiwgICAgICdcMCcsIFBPUFRfQVJHX05PTkUsICZvcHRfdGNyeXB0X2Jh Y2t1cCwgICAgICAgICAwLCBOXygiVXNlIGJhY2t1cCAoc2Vjb25kYXJ5KSBUQ1JZUFQgaGVh ZGVyLiIpLCBOVUxMIH0sCiAJCXsgInZlcmFjcnlwdCIsICAgICAgICAgJ1wwJywgUE9QVF9B UkdfTk9ORSwgJm9wdF92ZXJhY3J5cHQsICAgICAgICAgICAgIDAsIE5fKCJTY2FuIGFsc28g Zm9yIFZlcmFDcnlwdCBjb21wYXRpYmxlIGRldmljZS4iKSwgTlVMTCB9LAotCQl7ICJ0eXBl IiwgICAgICAgICAgICAgICAnTScsIFBPUFRfQVJHX1NUUklORywgJm9wdF90eXBlLCAgICAg ICAgICAgICAgICAwLCBOXygiVHlwZSBvZiBkZXZpY2UgbWV0YWRhdGE6IGx1a3MsIHBsYWlu LCBsb29wYWVzLCB0Y3J5cHQuIiksIE5VTEwgfSwKKwkJeyAidHlwZSIsICAgICAgICAgICAg ICAgJ00nLCBQT1BUX0FSR19TVFJJTkcsICZvcHRfdHlwZSwgICAgICAgICAgICAgICAgMCwg Tl8oIlR5cGUgb2YgZGV2aWNlIG1ldGFkYXRhOiBsdWtzLCBwbGFpbiwgbG9vcGFlcywgdGNy eXB0LCBnZWxpLiIpLCBOVUxMIH0sCiAJCXsgImZvcmNlLXBhc3N3b3JkIiwgICAgJ1wwJywg UE9QVF9BUkdfTk9ORSwgJm9wdF9mb3JjZV9wYXNzd29yZCwgICAgICAgIDAsIE5fKCJEaXNh YmxlIHBhc3N3b3JkIHF1YWxpdHkgY2hlY2sgKGlmIGVuYWJsZWQpLiIpLCBOVUxMIH0sCiAJ CXsgInBlcmYtc2FtZV9jcHVfY3J5cHQiLCdcMCcsIFBPUFRfQVJHX05PTkUsICZvcHRfcGVy Zl9zYW1lX2NwdV9jcnlwdCwgIDAsIE5fKCJVc2UgZG0tY3J5cHQgc2FtZV9jcHVfY3J5cHQg cGVyZm9ybWFuY2UgY29tcGF0aWJpbGl0eSBvcHRpb24uIiksIE5VTEwgfSwKIAkJeyAicGVy Zi1zdWJtaXRfZnJvbV9jcnlwdF9jcHVzIiwnXDAnLCBQT1BUX0FSR19OT05FLCAmb3B0X3Bl cmZfc3VibWl0X2Zyb21fY3J5cHRfY3B1cywwLE5fKCJVc2UgZG0tY3J5cHQgc3VibWl0X2Zy b21fY3J5cHRfY3B1cyBwZXJmb3JtYW5jZSBjb21wYXRpYmlsaXR5IG9wdGlvbi4iKSwgTlVM TCB9LApAQCAtMTYzMSw2ICsxNzMzLDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNo YXIgKiphcmd2KQogCQlvcHRfdHlwZSA9ICJ0Y3J5cHQiOwogCX0gZWxzZSBpZiAoIXN0cmNt cChhbmFtZSwgInRjcnlwdER1bXAiKSkgewogCQlvcHRfdHlwZSA9ICJ0Y3J5cHQiOworCX0g ZWxzZSBpZiAoIXN0cmNtcChhbmFtZSwgImdlbGlEdW1wIikpIHsKKwkJb3B0X3R5cGUgPSAi Z2VsaSI7CiAJfSBlbHNlIGlmICghc3RyY21wKGFuYW1lLCAicmVtb3ZlIikgfHwKIAkJICAg IXN0cmNtcChhbmFtZSwgInBsYWluQ2xvc2UiKSB8fAogCQkgICAhc3RyY21wKGFuYW1lLCAi bHVrc0Nsb3NlIikgfHwKLS0gCjEuOS4xCgo= --------------894632D45E23B5EF56047DCB--