From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mailout09.t-online.de (mailout09.t-online.de [194.25.134.84]) by sourceware.org (Postfix) with ESMTPS id 577563858CDA for ; Sun, 5 Nov 2023 15:45:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 577563858CDA Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=t-online.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=t-online.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 577563858CDA Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=194.25.134.84 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699199125; cv=none; b=q3Sr9oScuDpJDaXethh49miB1//2ahGl8ogm4nbnOFqnU1YmlLT2wRAy89hApHWdg7AyAFF+OkuUjZPIkr/eBlEl5jVJlCMuTOAa50yZTAjOXw8tO0447m5ZfMzs+NVyQAmJuGmhnBNSfAO0GXBK4FxM0lV1BImtrgG4h2KDtao= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699199125; c=relaxed/simple; bh=mwqGisFUHF6avMEmNkzAciTZwKbr1/FfF2NWiMZr9xg=; h=From:Subject:To:Message-ID:Date:MIME-Version; b=msTGXDb6zllioxHYmyRn+cDHvO/LQ8rxl9UiWe5g8C97Bl1TW/64aFlUvsOgGJbSQ4OJ78oDY1It95Bc2HMcps1ZMrInUU3R2WqYzSGUQpAqWS8opI3SGBuktVL9egRGbtonxqG55S9fQmWCYdGgmVPSzZR3seoLcIYNNtxkKCs= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from fwd83.aul.t-online.de (fwd83.aul.t-online.de [10.223.144.109]) by mailout09.t-online.de (Postfix) with SMTP id EFD3E1065B for ; Sun, 5 Nov 2023 16:45:19 +0100 (CET) Received: from [192.168.2.101] ([91.57.240.134]) by fwd83.t-online.de with (TLSv1.3:TLS_AES_256_GCM_SHA384 encrypted) esmtp id 1qzfJO-47vJ6O0; Sun, 5 Nov 2023 16:45:18 +0100 From: Christian Franke Subject: Re: [PATCH] Cygwin: Add /dev/disk/by-id symlinks To: cygwin-patches@cygwin.com References: <8ceefddf-6f66-ab44-f2fc-48072a5c7207@t-online.de> <1133d1d3-e6d9-4a52-a595-89ee338f8d2f@t-online.de> Message-ID: Date: Sun, 5 Nov 2023 16:45:18 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 SeaMonkey/2.53.16 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------F950A062CC98BF6751F22B22" X-TOI-EXPURGATEID: 150726::1699199118-DE7FBDE8-28D7789C/0/0 CLEAN NORMAL X-TOI-MSGID: 33bdf2fb-2c07-41bb-b0c5-9aab77d4ce29 X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,KAM_DMARC_STATUS,NICE_REPLY_A,RCVD_IN_BARRACUDACENTRAL,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------F950A062CC98BF6751F22B22 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi Corinna, Corinna Vinschen wrote: > Hi Christian, > > patch looks pretty good to me. Just two minor points: > >> + /* Traverse \Device directory ... */ >> + bool errno_set = false; >> + HANDLE devhdl = INVALID_HANDLE_VALUE; > INVALID_HANDLE_VALUE is a Win32 API concept and is only returned by > CreateFile and friends. The native NT API doesn't know > INVALID_HANDLE_VALUE and, fortunately, only uses NULL. I think it's > puzzeling to use INVALID_HANDLE_VALUE in a native NT context. So, would > you mind to just use NULL (or nullptr) instead? As in... > >> + if (devhdl != INVALID_HANDLE_VALUE) > if (devhdl) > > Sounds easier to me :) Yes...done. >> + /* Fetch drive layout info to get size of all partitions on disk. */ >> + DWORD part_cnt = 0; >> + PARTITION_INFORMATION_EX *pix = nullptr; >> + PARTITION_INFORMATION *pi = nullptr; >> + DWORD bytes_read; >> + if (DeviceIoControl (devhdl, IOCTL_DISK_GET_DRIVE_LAYOUT_EX, nullptr, 0, >> + ioctl_buf, NT_MAX_PATH, &bytes_read, nullptr)) >> + { >> + DRIVE_LAYOUT_INFORMATION_EX *pdlix = >> + reinterpret_cast(ioctl_buf); >> + part_cnt = pdlix->PartitionCount; >> + pix = pdlix->PartitionEntry; >> + } >> + else if (DeviceIoControl (devhdl, IOCTL_DISK_GET_DRIVE_LAYOUT, nullptr, > Do we really still need IOCTL_DISK_GET_DRIVE_LAYOUT w/o _EX? Possibly not. I borrowed this code from code behind /proc/partitions. > fhandler_proc still uses it, too, but the EX variation is available > since XP. I can't imagine that a fallback to the non-EX-version is still > necessary. If you like you could drop it immediately, or we can drop > both usages as a followup patch. Old IOCTL dropped and code simplified. > Last, but not least, do you see a chance to add any other /dev/disk > subdir? by-partuuid, perhaps? Possibly, but not very soon. I'm not yet sure which API functions could be used. Some early draft ideas: /dev/disk/by-partuid (Partition UUID -> device)   GPT_PART_UUID -> ../../sdXN (GPT partition UUID)   MBR_SERIAL-partN -> ../../sdYM (Fake UUID for MBR) /dev/disk/by-uuid (Windows Volume UUID -> device)   Vol_UUID1 -> ../../sdXN  (disk volume)   Vol_UUID2 -> ../../scd0  (CD/DVD drive volume)   Vol_UUID3 -> /proc/sys/GLOBAL??/Volume{UUID}  (others, e.g. VeraCrypt volume) /dev/disk/by-drive (Cygwin specific: drive letter -> volume)   c -> ../by-uuid/UUID (if UUID available)   x -> /proc/sys/DosDevices/X: (others, e.g. Network, "mounted" Volume Shadow Copy) Christian --------------F950A062CC98BF6751F22B22 Content-Type: text/plain; charset=UTF-8; name="0001-Cygwin-Add-dev-disk-by-id-symlinks.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-Cygwin-Add-dev-disk-by-id-symlinks.patch" RnJvbSBhYThjMzVlMDQxZmZlNWE0YjA2MTA0YzEyMmQ5YmExZmRjNDkyNjgzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBDaHJpc3RpYW4gRnJhbmtlIDxjaHJpc3RpYW4uZnJh bmtlQHQtb25saW5lLmRlPgpEYXRlOiBTdW4sIDUgTm92IDIwMjMgMTU6NTQ6MjMgKzAxMDAK U3ViamVjdDogW1BBVENIXSBDeWd3aW46IEFkZCAvZGV2L2Rpc2svYnktaWQgc3ltbGlua3MK ClRoZSBuZXcgZGlyZWN0b3J5ICcvZGV2L2Rpc2svYnktaWQnIHByb3ZpZGVzIHN5bWxpbmtz IGZvciBlYWNoCmRpc2sgYW5kIGl0cyBwYXJ0aXRpb25zOgonQlVTVFlQRS1bVkVORE9SX11Q Uk9EVUNUX1NFUklBTFstcGFydE5dJyAtPiAnLi4vLi4vc2RYW05dJy4KVGhpcyBpcyBiYXNl ZCBvbiBzdHJpbmdzIHByb3ZpZGVkIGJ5IFNUT1JBR0VfREVWSUNFX0RFU0NSSVBUT1IuCklm IHRoaXMgaW5mb3JtYXRpb24gaXMgdG9vIHNob3J0LCBhIDEyOC1iaXQgaGFzaCBvZiB0aGUK U1RPUkFHRV9ERVZJQ0VfVU5JUVVFX0lERU5USUZJRVIgcmF3IGRhdGEgaXMgYWRkZWQuCkFk bWluaXN0cmF0b3IgcHJpdmlsZWdlcyBhcmUgbm90IHJlcXVpcmVkLgoKU2lnbmVkLW9mZi1i eTogQ2hyaXN0aWFuIEZyYW5rZSA8Y2hyaXN0aWFuLmZyYW5rZUB0LW9ubGluZS5kZT4KLS0t CiB3aW5zdXAvY3lnd2luL01ha2VmaWxlLmFtICAgICAgICAgICAgICAgfCAgIDEgKwogd2lu c3VwL2N5Z3dpbi9kZXZpY2VzLmluICAgICAgICAgICAgICAgIHwgICA0ICsKIHdpbnN1cC9j eWd3aW4vZHRhYmxlLmNjICAgICAgICAgICAgICAgICB8ICAgMyArCiB3aW5zdXAvY3lnd2lu L2ZoYW5kbGVyL2Rldl9kaXNrLmNjICAgICAgfCA2MjEgKysrKysrKysrKysrKysrKysrKysr KysrCiB3aW5zdXAvY3lnd2luL2xvY2FsX2luY2x1ZGVzL2RldmljZXMuaCAgfCAgIDYgKy0K IHdpbnN1cC9jeWd3aW4vbG9jYWxfaW5jbHVkZXMvZmhhbmRsZXIuaCB8ICA0NyArKwogd2lu c3VwL2N5Z3dpbi9tb3VudC5jYyAgICAgICAgICAgICAgICAgIHwgIDEwICsKIDcgZmlsZXMg Y2hhbmdlZCwgNjkxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2Rl IDEwMDY0NCB3aW5zdXAvY3lnd2luL2ZoYW5kbGVyL2Rldl9kaXNrLmNjCgpkaWZmIC0tZ2l0 IGEvd2luc3VwL2N5Z3dpbi9NYWtlZmlsZS5hbSBiL3dpbnN1cC9jeWd3aW4vTWFrZWZpbGUu YW0KaW5kZXggNjRiMjUyYTIyLi4zNzZjNzlmYzMgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3 aW4vTWFrZWZpbGUuYW0KKysrIGIvd2luc3VwL2N5Z3dpbi9NYWtlZmlsZS5hbQpAQCAtODQs NiArODQsNyBAQCBGSEFORExFUl9GSUxFUz0gXAogCWZoYW5kbGVyL2NvbnNvbGUuY2MgXAog CWZoYW5kbGVyL2N5Z2RyaXZlLmNjIFwKIAlmaGFuZGxlci9kZXYuY2MgXAorCWZoYW5kbGVy L2Rldl9kaXNrLmNjIFwKIAlmaGFuZGxlci9kZXZfZmQuY2MgXAogCWZoYW5kbGVyL2Rpc2tf ZmlsZS5jYyBcCiAJZmhhbmRsZXIvZHNwLmNjIFwKZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3 aW4vZGV2aWNlcy5pbiBiL3dpbnN1cC9jeWd3aW4vZGV2aWNlcy5pbgppbmRleCAyNTQ1ZGQ4 NWUuLjQ4ZDM4NDNmZSAxMDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi9kZXZpY2VzLmluCisr KyBiL3dpbnN1cC9jeWd3aW4vZGV2aWNlcy5pbgpAQCAtMTE1LDYgKzExNSw5IEBAIGNvbnN0 IF9kZXZpY2UgZGV2X2N5Z2RyaXZlX3N0b3JhZ2UgPQogY29uc3QgX2RldmljZSBkZXZfZnNf c3RvcmFnZSA9CiAgIHsiIiwge0ZIX0ZTfSwgIiIsIGV4aXN0c307CiAKK2NvbnN0IF9kZXZp Y2UgZGV2X2Rldl9kaXNrX3N0b3JhZ2UgPQorICB7IiIsIHtGSF9ERVZfRElTS30sICIiLCBl eGlzdHN9OworCiBjb25zdCBfZGV2aWNlIGRldl9wcm9jX3N0b3JhZ2UgPQogICB7IiIsIHtG SF9QUk9DfSwgIiIsIGV4aXN0c307CiAKQEAgLTE3Myw2ICsxNzYsNyBAQCBjb25zdCBfZGV2 aWNlIGRldl9lcnJvcl9zdG9yYWdlID0KICAgIHRoZSBQT1NJWCBuYW1lc3BhY2UuICAqLwog JSUKICIvZGV2IiwgQlJBQ0soRkhfREVWKSwgIiIsIGV4aXN0cywgU19JRkRJUgorIi9kZXYv ZGlzayIsIEJSQUNLKEZIX0RFVl9ESVNLKSwgIiIsIGV4aXN0cywgU19JRkRJUgogIi9kZXYv dHR5IiwgQlJBQ0soRkhfVFRZKSwgIi9kZXYvdHR5IiwgZXhpc3RzLCBTX0lGQ0hSCiAiL2Rl di9wdHklKDAtMTI3KWQiLCBCUkFDSyhGSERFVihERVZfUFRZU19NQUpPUiwgeyQxfSkpLCAi L2Rldi9wdHl7JDF9IiwgZXhpc3RzX3B0eSwgU19JRkNIUiwgPXB0eXNfZGV2CiAiOnB0eW0l KDAtMTI3KWQiLCBCUkFDSyhGSERFVihERVZfUFRZTV9NQUpPUiwgeyQxfSkpLCAiL2Rldi9w dHlteyQxfSIsIGV4aXN0c19pbnRlcm5hbCwgU19JRkNIUiwgPXB0eW1fZGV2CmRpZmYgLS1n aXQgYS93aW5zdXAvY3lnd2luL2R0YWJsZS5jYyBiL3dpbnN1cC9jeWd3aW4vZHRhYmxlLmNj CmluZGV4IDIxZDUyNTM4OS4uOTUwOGYzZTBiIDEwMDY0NAotLS0gYS93aW5zdXAvY3lnd2lu L2R0YWJsZS5jYworKysgYi93aW5zdXAvY3lnd2luL2R0YWJsZS5jYwpAQCAtNTg1LDYgKzU4 NSw5IEBAIGZoX2FsbG9jIChwYXRoX2NvbnYmIHBjKQogCWNhc2UgRkhfREVWOgogCSAgZmgg PSBjbmV3IChmaGFuZGxlcl9kZXYpOwogCSAgYnJlYWs7CisJY2FzZSBGSF9ERVZfRElTSzoK KwkgIGZoID0gY25ldyAoZmhhbmRsZXJfZGV2X2Rpc2spOworCSAgYnJlYWs7CiAJY2FzZSBG SF9ERVZfRkQ6CiAJICBmaCA9IGNuZXcgKGZoYW5kbGVyX2Rldl9mZCk7CiAJICBicmVhazsK ZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXIvZGV2X2Rpc2suY2MgYi93aW5z dXAvY3lnd2luL2ZoYW5kbGVyL2Rldl9kaXNrLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMC4uOWExY2FlNWViCi0tLSAvZGV2L251bGwKKysrIGIvd2luc3VwL2N5 Z3dpbi9maGFuZGxlci9kZXZfZGlzay5jYwpAQCAtMCwwICsxLDYyMSBAQAorLyogZmhhbmRs ZXIvZGV2X2Rpc2suY2M6IGZoYW5kbGVyIGZvciB0aGUgL2Rldi9kaXNrL2J5LWlkLy4uLiBz eW1saW5rcy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ3lnd2luLgorCitUaGlzIHNvZnR3 YXJlIGlzIGEgY29weXJpZ2h0ZWQgd29yayBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlCitDeWd3aW4gbGljZW5zZS4gIFBsZWFzZSBjb25zdWx0IHRoZSBmaWxlICJDWUdXSU5f TElDRU5TRSIgZm9yCitkZXRhaWxzLiAqLworCisjaW5jbHVkZSAid2luc3VwLmgiCisjaW5j bHVkZSAicGF0aC5oIgorI2luY2x1ZGUgImZoYW5kbGVyLmgiCisjaW5jbHVkZSAidGxzX3Bi dWYuaCIKKyNpbmNsdWRlIDxzdG9yZHVpZC5oPgorI2luY2x1ZGUgPHdjdHlwZS5oPgorI2lu Y2x1ZGUgPHdpbmlvY3RsLmg+CisKKy8qIFJlcGxhY2Ugbm9uLXByaW50aW5nIGFuZCB1bmV4 cGVjdGVkIGNoYXJhY3RlcnMsIHJlbW92ZSB0cmFpbGluZyBzcGFjZXMsCisgICByZXR1cm4g cmVtYWluaW5nIHN0cmluZyBsZW5ndGguICovCitzdGF0aWMgaW50CitzYW5pdGl6ZV9pZF9z dHJpbmcgKGNoYXIgKnMpCit7CisgIGludCBsYXN0c3BhY2UgPSAtMSwgaTsKKyAgZm9yIChp ID0gMDsgc1tpXTsgaSsrKQorICAgIHsKKyAgICAgIGNoYXIgYyA9IHNbaV07CisgICAgICBp ZiAoYyAhPSAnICcpCisJbGFzdHNwYWNlID0gLTE7CisgICAgICBlbHNlIGlmIChsYXN0c3Bh Y2UgPCAwKQorCWxhc3RzcGFjZSA9IGk7CisgICAgICBpZiAoKCcwJyA8PSBjICYmIGMgPD0g JzknKSB8fCBjID09ICcuJyB8fCBjID09ICctJworCSAgfHwgKCdBJyA8PSBjICYmIGMgPD0g J1onKSB8fCAoJ2EnIDw9IGMgJiYgYyA8PSAneicpKQorCWNvbnRpbnVlOworICAgICAgc1tp XSA9ICdfJzsKKyAgICB9CisgIGlmIChsYXN0c3BhY2UgPj0gMCkKKyAgICBzWyhpID0gbGFz dHNwYWNlKV0gPSAnXDAnOworICByZXR1cm4gaTsKK30KKworLyogRmV0Y2ggc3RvcmFnZSBw cm9wZXJ0aWVzIGFuZCBjcmVhdGUgdGhlIElEIHN0cmluZy4KKyAgIHJldHVybnM6IDE6IHN1 Y2Nlc3MsIDA6IGRldmljZSBpZ25vcmVkLCAtMTogSW9Db250cm9sIGVycm9yLiAqLworc3Rh dGljIGludAorc3RvcnByb3BfdG9faWRfbmFtZSAoSEFORExFIGRldmhkbCwgY29uc3QgVU5J Q09ERV9TVFJJTkcgKnVwYXRoLAorCQkgICAgIGNoYXIgKmlvY3RsX2J1ZiwgY2hhciAoJiBu YW1lKVtOQU1FX01BWCArIDFdKQoreworICBEV09SRCBieXRlc19yZWFkOworICBTVE9SQUdF X1BST1BFUlRZX1FVRVJZIGRlc2NxdWVyeSA9CisgICAgeyBTdG9yYWdlRGV2aWNlUHJvcGVy dHksIFByb3BlcnR5U3RhbmRhcmRRdWVyeSwgeyAwIH0gfTsKKyAgaWYgKCFEZXZpY2VJb0Nv bnRyb2wgKGRldmhkbCwgSU9DVExfU1RPUkFHRV9RVUVSWV9QUk9QRVJUWSwKKwkJCSZkZXNj cXVlcnksIHNpemVvZiAoZGVzY3F1ZXJ5KSwKKwkJCWlvY3RsX2J1ZiwgTlRfTUFYX1BBVEgs CisJCQkmYnl0ZXNfcmVhZCwgbnVsbHB0cikpCisgICAgeworICAgICAgX19zZXRlcnJub19m cm9tX3dpbl9lcnJvciAoR2V0TGFzdEVycm9yICgpKTsKKyAgICAgIGRlYnVnX3ByaW50ZiAo IkRldmljZUlvQ29udHJvbCAoJVMsIElPQ1RMX1NUT1JBR0VfUVVFUllfUFJPUEVSVFksIgor CQkgICAgIiB7U3RvcmFnZURldmljZVByb3BlcnR5fSk6ICVFIiwgdXBhdGgpOworICAgICAg cmV0dXJuIC0xOworICAgIH0KKworICBjb25zdCBTVE9SQUdFX0RFVklDRV9ERVNDUklQVE9S ICpkZXNjID0KKyAgICByZWludGVycHJldF9jYXN0PGNvbnN0IFNUT1JBR0VfREVWSUNFX0RF U0NSSVBUT1IgKj4oaW9jdGxfYnVmKTsKKyAgaW50IHZlbmRvcl9sZW4gPSAwLCBwcm9kdWN0 X2xlbiA9IDAsIHNlcmlhbF9sZW4gPSAwOworICBpZiAoZGVzYy0+VmVuZG9ySWRPZmZzZXQp CisgICAgdmVuZG9yX2xlbiA9IHNhbml0aXplX2lkX3N0cmluZyAoaW9jdGxfYnVmICsgZGVz Yy0+VmVuZG9ySWRPZmZzZXQpOworICBpZiAoZGVzYy0+UHJvZHVjdElkT2Zmc2V0KQorICAg IHByb2R1Y3RfbGVuID0gc2FuaXRpemVfaWRfc3RyaW5nIChpb2N0bF9idWYgKyBkZXNjLT5Q cm9kdWN0SWRPZmZzZXQpOworICBpZiAoZGVzYy0+U2VyaWFsTnVtYmVyT2Zmc2V0KQorICAg IHNlcmlhbF9sZW4gPSBzYW5pdGl6ZV9pZF9zdHJpbmcgKGlvY3RsX2J1ZiArIGRlc2MtPlNl cmlhbE51bWJlck9mZnNldCk7CisKKyAgLyogSWdub3JlIGRyaXZlIGlmIGluZm9ybWF0aW9u IGlzIGVtcHR5IG9yIHRvbyBsb25nIChzaG91bGQgbm90IGhhcHBlbikuICovCisgIGlmICgh KCh2ZW5kb3JfbGVuIHx8IHByb2R1Y3RfbGVuKSAmJiAoMjAvKmJ1c3R5cGUqLyArIHZlbmRv cl9sZW4gKyAxICsKKyAgICAgIHByb2R1Y3RfbGVuICsgMSArIHNlcmlhbF9sZW4gKyAxICsg MzQvKmhhc2gqLyArIDEgKyAxMC8qcGFydE4qLworICAgICAgPCAoaW50KSBzaXplb2YgKG5h bWUpKSkpCisgICAgcmV0dXJuIDA7CisKKyAgLyogVHJhbnNsYXRlIGJ1cyB0eXBlcy4gKi8K KyAgY29uc3QgY2hhciAqYnVzOworICBzd2l0Y2ggKGRlc2MtPkJ1c1R5cGUpCisgICAgewor ICAgICAgY2FzZSBCdXNUeXBlQXRhOiAgICAgYnVzID0gImF0YS0iOyBicmVhazsKKyAgICAg IGNhc2UgQnVzVHlwZUZpYnJlOiAgIGJ1cyA9ICJmaWJyZS0iOyBicmVhazsKKyAgICAgIGNh c2UgQnVzVHlwZU52bWU6ICAgIGJ1cyA9ICJudm1lLSI7IGJyZWFrOworICAgICAgY2FzZSBC dXNUeXBlUkFJRDogICAgYnVzID0gInJhaWQtIjsgYnJlYWs7CisgICAgICBjYXNlIEJ1c1R5 cGVTYXM6ICAgICBidXMgPSAic2FzLSI7IGJyZWFrOworICAgICAgY2FzZSBCdXNUeXBlU2F0 YTogICAgYnVzID0gInNhdGEtIjsgYnJlYWs7CisgICAgICBjYXNlIEJ1c1R5cGVTY3NpOiAg ICBidXMgPSAic2NzaS0iOyBicmVhazsKKyAgICAgIGNhc2UgQnVzVHlwZVVzYjogICAgIGJ1 cyA9ICJ1c2ItIjsgYnJlYWs7CisgICAgICBjYXNlIEJ1c1R5cGVWaXJ0dWFsOiBidXMgPSAi dmlydHVhbC0iOyBicmVhazsKKyAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgIGJ1cyA9IG51 bGxwdHI7IGJyZWFrOworICAgIH0KKworICAvKiBDcmVhdGUgIkJVU1RZUEUtW1ZFTkRPUl9d UFJPRFVDVFtfU0VSSUFMXSIgc3RyaW5nLiAqLworICBjaGFyICogY3AgPSBuYW1lOworICBp ZiAoYnVzKQorICAgIGNwID0gc3RwY3B5IChjcCwgYnVzKTsKKyAgZWxzZQorICAgIGNwICs9 IF9fc21hbGxfc3ByaW50ZiAoY3AsICJidXN0eXBlJTAyX3ktIiwgZGVzYy0+QnVzVHlwZSk7 CisKKyAgaWYgKHZlbmRvcl9sZW4pCisgICAgY3AgPSBzdHBjcHkgKGNwLCBpb2N0bF9idWYg KyBkZXNjLT5WZW5kb3JJZE9mZnNldCk7CisgIGlmIChwcm9kdWN0X2xlbikKKyAgICB7Cisg ICAgICBpZiAodmVuZG9yX2xlbikKKwljcCA9IHN0cGNweSAoY3AsICJfIik7CisgICAgICBj cCA9IHN0cGNweSAoY3AsIGlvY3RsX2J1ZiArIGRlc2MtPlByb2R1Y3RJZE9mZnNldCk7Cisg ICAgfQorICBpZiAoc2VyaWFsX2xlbikKKyAgICB7CisgICAgICBjcCA9IHN0cGNweSAoY3As ICJfIik7CisgICAgICBjcCA9IHN0cGNweSAoY3AsIGlvY3RsX2J1ZiArIGRlc2MtPlNlcmlh bE51bWJlck9mZnNldCk7CisgICAgfQorCisgIC8qIEFkZCBoYXNoIGlmIGluZm9ybWF0aW9u IGlzIHRvbyBzaG9ydCAoZS5nLiBtaXNzaW5nIHNlcmlhbCBudW1iZXIpLiAqLworICBib29s IGFkZF9oYXNoID0gISg0IDw9IHZlbmRvcl9sZW4gKyBwcm9kdWN0X2xlbiAmJiA0IDw9IHNl cmlhbF9sZW4pOworICBkZWJ1Z19wcmludGYgKCIlUzogYnVzdHlwZTogJTAyX3ksIGFkZF9o YXNoOiAlZCwgaWQ6ICclcycgJyVzJyAnJXMnICIsCisJCXVwYXRoLCAodW5zaWduZWQpIGRl c2MtPkJ1c1R5cGUsIChpbnQpIGFkZF9oYXNoLAorCQkodmVuZG9yX2xlbiA/IGlvY3RsX2J1 ZiArIGRlc2MtPlZlbmRvcklkT2Zmc2V0IDogIiIpLAorCQkocHJvZHVjdF9sZW4gPyBpb2N0 bF9idWYgKyBkZXNjLT5Qcm9kdWN0SWRPZmZzZXQgOiAiIiksCisJCShzZXJpYWxfbGVuID8g aW9jdGxfYnVmICsgZGVzYy0+U2VyaWFsTnVtYmVyT2Zmc2V0IDogIiIpKTsKKyAgaWYgKCFh ZGRfaGFzaCkKKyAgICByZXR1cm4gMTsKKworICAvKiBUaGUgY2FsbCBiZWxvdyBhbHNvIHJl dHVybnMgdGhlIFNUT1JBR0VfREVWSUNFX0RFU0NSSVBUT1IgdXNlZCBhYm92ZS4KKyAgICAg TVNETiBkb2N1bWVudGF0aW9uIGZvciBTVE9SQUdFX0RFVklDRV9VTklRVUVfSURFTlRJRklF UiBzYXlzOgorICAgICAiVGhlIGRldmljZSBkZXNjcmlwdG9yIGNvbnRhaW5zIElEcyB0aGF0 IGFyZSBleHRyYWN0ZWQgZnJvbSBub24tVlBECisgICAgIGlucXVpcnkgZGF0YS4iICBUaGlz IG1heSBtZWFuIHRoYXQgdGhlIHNlcmlhbCBudW1iZXIgKHBhcnQgb2YKKyAgICAgU0NTSS9T QVMgVlBEIGRhdGEpIG1heSBub3QgYWx3YXlzIGJlIHByb3ZpZGVkLiAgVGhlcmVmb3JlIGEg c2VwYXJhdGUKKyAgICAgY2FsbCB0byByZXRyaWV2ZSBTVE9SQUdFX0RFVklDRV9ERVNDUklQ VE9SIG9ubHkgaXMgZG9uZSBhYm92ZS4gKi8KKyAgU1RPUkFHRV9QUk9QRVJUWV9RVUVSWSBp ZHF1ZXJ5ID0KKyAgICB7IFN0b3JhZ2VEZXZpY2VVbmlxdWVJZFByb3BlcnR5LCBQcm9wZXJ0 eVN0YW5kYXJkUXVlcnksIHsgMCB9IH07CisgIGlmICghRGV2aWNlSW9Db250cm9sIChkZXZo ZGwsIElPQ1RMX1NUT1JBR0VfUVVFUllfUFJPUEVSVFksCisJCQkmaWRxdWVyeSwgc2l6ZW9m IChpZHF1ZXJ5KSwKKwkJCWlvY3RsX2J1ZiwgTlRfTUFYX1BBVEgsCisJCQkmYnl0ZXNfcmVh ZCwgbnVsbHB0cikpCisgICAgeworICAgICAgX19zZXRlcnJub19mcm9tX3dpbl9lcnJvciAo R2V0TGFzdEVycm9yICgpKTsKKyAgICAgIGRlYnVnX3ByaW50ZiAoIkRldmljZUlvQ29udHJv bCAoJVMsIElPQ1RMX1NUT1JBR0VfUVVFUllfUFJPUEVSVFksIgorCQkgICAgIiB7U3RvcmFn ZURldmljZVVuaXF1ZUlkUHJvcGVydHl9KTogJUUiLCB1cGF0aCk7CisgICAgICByZXR1cm4g LTE7CisgICAgfQorCisgIC8qIFV0aWxpemUgdGhlIERVSUQgYXMgZGVmaW5lZCBieSBNU0RO IHRvIGdlbmVyYXRlIGEgaGFzaC4gKi8KKyAgY29uc3QgU1RPUkFHRV9ERVZJQ0VfVU5JUVVF X0lERU5USUZJRVIgKmlkID0KKyAgICByZWludGVycHJldF9jYXN0PGNvbnN0IFNUT1JBR0Vf REVWSUNFX1VOSVFVRV9JREVOVElGSUVSICo+KGlvY3RsX2J1Zik7CisgIGRlYnVnX3ByaW50 ZiAoIlNUT1JBR0VfREVWSUNFX1VOSVFVRV9JREVOVElGSUVSLlNpemU6ICV1IiwgaWQtPlNp emUpOworCisgICBfX2ludDEyOCBoYXNoID0gMDsKKyAgIGZvciAoVUxPTkcgaSA9IDA7IGkg PCBpZC0+U2l6ZTsgaSsrKQorICAgICAgaGFzaCA9IGlvY3RsX2J1ZltpXSArIChoYXNoIDw8 IDYpICsgKGhhc2ggPDwgMTYpIC0gaGFzaDsKKyAgX19zbWFsbF9zcHJpbnRmIChjcCwgIl8l MDE2X1klMDE2X1giLCAodW5zaWduZWQgbG9uZyBsb25nKSAoaGFzaCA+PiA2NCksCisJCSAg ICh1bnNpZ25lZCBsb25nIGxvbmcpIGhhc2gpOworICByZXR1cm4gMTsKK30KKworc3RydWN0 IGJ5X2lkX2VudHJ5Cit7CisgIGNoYXIgbmFtZVtOQU1FX01BWCArIDFdOworICB1X2ludDhf dCBkcml2ZTsKKyAgdV9pbnQ4X3QgcGFydDsKK307CisKK3N0YXRpYyBpbnQKK2J5X2lkX2Nv bXBhcmVfbmFtZSAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKyAgY29uc3Qg YnlfaWRfZW50cnkgKmFwID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBieV9pZF9lbnRyeSAq PihhKTsKKyAgY29uc3QgYnlfaWRfZW50cnkgKmJwID0gcmVpbnRlcnByZXRfY2FzdDxjb25z dCBieV9pZF9lbnRyeSAqPihiKTsKKyAgcmV0dXJuIHN0cmNtcCAoYXAtPm5hbWUsIGJwLT5u YW1lKTsKK30KKworc3RhdGljIGJ5X2lkX2VudHJ5ICoKK2J5X2lkX3JlYWxsb2MgKGJ5X2lk X2VudHJ5ICpwLCBzaXplX3QgbikKK3sKKyAgdm9pZCAqcDIgPSByZWFsbG9jIChwLCBuICog c2l6ZW9mICgqcCkpOworICBpZiAoIXAyKQorICAgIGZyZWUgKHApOworICByZXR1cm4gcmVp bnRlcnByZXRfY2FzdDxieV9pZF9lbnRyeSAqPihwMik7Cit9CisKKy8qIENyZWF0ZSBzb3J0 ZWQgbmFtZSAtPiBkcml2ZSBtYXBwaW5nIHRhYmxlLiBNdXN0IGJlIGZyZWVkIGJ5IGNhbGxl ci4gKi8KK3N0YXRpYyBpbnQKK2dldF9ieV9pZF90YWJsZSAoYnlfaWRfZW50cnkgKiAmdGFi bGUpCit7CisgIHRhYmxlID0gbnVsbHB0cjsKKworICAvKiBPcGVuIFxEZXZpY2Ugb2JqZWN0 IGRpcmVjdG9yeS4gKi8KKyAgd2NoYXJfdCB3cGF0aFtNQVhfUEFUSF0gPSBMIlxcRGV2aWNl IjsKKyAgVU5JQ09ERV9TVFJJTkcgdXBhdGggPSB7MTQsIDE2LCB3cGF0aH07CisgIE9CSkVD VF9BVFRSSUJVVEVTIGF0dHI7CisgIEluaXRpYWxpemVPYmplY3RBdHRyaWJ1dGVzICgmYXR0 ciwgJnVwYXRoLCBPQkpfQ0FTRV9JTlNFTlNJVElWRSwgbnVsbHB0ciwgbnVsbHB0cik7Cisg IEhBTkRMRSBkaXJoZGw7CisgIE5UU1RBVFVTIHN0YXR1cyA9IE50T3BlbkRpcmVjdG9yeU9i amVjdCAoJmRpcmhkbCwgRElSRUNUT1JZX1FVRVJZLCAmYXR0cik7CisgIGlmICghTlRfU1VD Q0VTUyAoc3RhdHVzKSkKKyAgICB7CisgICAgICBkZWJ1Z19wcmludGYgKCJOdE9wZW5EaXJl Y3RvcnlPYmplY3QsIHN0YXR1cyAleSIsIHN0YXR1cyk7CisgICAgICBfX3NldGVycm5vX2Zy b21fbnRfc3RhdHVzIChzdGF0dXMpOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAv KiBMaW1pdCBkaXNrIGFuZCBwYXJ0aXRpb24gbnVtYmVycyBsaWtlIGZoYW5kbGVyX2Rldjo6 cmVhZGRpciAoKS4gKi8KKyAgY29uc3QgdW5zaWduZWQgbWF4X2RyaXZlX251bSA9IDEyNywg bWF4X3BhcnRfbnVtID0gNjM7CisKKyAgdW5zaWduZWQgYWxsb2Nfc2l6ZSA9IDAsIHRhYmxl X3NpemUgPSAwOworICB0bXBfcGF0aGJ1ZiB0cDsKKyAgY2hhciAqaW9jdGxfYnVmID0gdHAu Y19nZXQgKCk7CisgIERJUkVDVE9SWV9CQVNJQ19JTkZPUk1BVElPTiAqZGJpX2J1ZiA9Cisg ICAgcmVpbnRlcnByZXRfY2FzdDxESVJFQ1RPUllfQkFTSUNfSU5GT1JNQVRJT04gKj4odHAu d19nZXQgKCkpOworCisgIC8qIFRyYXZlcnNlIFxEZXZpY2UgZGlyZWN0b3J5IC4uLiAqLwor ICBib29sIGVycm5vX3NldCA9IGZhbHNlOworICBIQU5ETEUgZGV2aGRsID0gbnVsbHB0cjsK KyAgQk9PTEVBTiByZXN0YXJ0ID0gVFJVRTsKKyAgYm9vbCBsYXN0X3J1biA9IGZhbHNlOwor ICBVTE9ORyBjb250ZXh0ID0gMDsKKyAgd2hpbGUgKCFsYXN0X3J1bikKKyAgICB7CisgICAg ICBpZiAoZGV2aGRsKQorCXsKKwkgIC8qIENsb3NlIGhhbmRsZSBmcm9tIHByZXZpb3VzIHJ1 bi4gKi8KKwkgIE50Q2xvc2UoZGV2aGRsKTsKKwkgIGRldmhkbCA9IG51bGxwdHI7CisJfQor CisgICAgICBzdGF0dXMgPSBOdFF1ZXJ5RGlyZWN0b3J5T2JqZWN0IChkaXJoZGwsIGRiaV9i dWYsIDY1NTM2LCBGQUxTRSwgcmVzdGFydCwKKwkJCQkgICAgICAgJmNvbnRleHQsIG51bGxw dHIpOworICAgICAgaWYgKCFOVF9TVUNDRVNTIChzdGF0dXMpKQorCXsKKwkgIF9fc2V0ZXJy bm9fZnJvbV9udF9zdGF0dXMgKHN0YXR1cyk7CisJICBlcnJub19zZXQgPSB0cnVlOworCSAg ZGVidWdfcHJpbnRmICgiTnRRdWVyeURpcmVjdG9yeU9iamVjdCwgc3RhdHVzICV5Iiwgc3Rh dHVzKTsKKwkgIGJyZWFrOworCX0KKyAgICAgIGlmIChzdGF0dXMgIT0gU1RBVFVTX01PUkVf RU5UUklFUykKKwlsYXN0X3J1biA9IHRydWU7CisgICAgICByZXN0YXJ0ID0gRkFMU0U7Cisg ICAgICBmb3IgKGNvbnN0IERJUkVDVE9SWV9CQVNJQ19JTkZPUk1BVElPTiAqZGJpID0gZGJp X2J1ZjsKKwkgICBkYmktPk9iamVjdE5hbWUuTGVuZ3RoID4gMDsKKwkgICBkYmkrKykKKwl7 CisJICAvKiAuLi4gYW5kIGNoZWNrIGZvciBhICJIYXJkZGlza1swLTldKiIgZW50cnkuICov CisJICBpZiAoZGJpLT5PYmplY3ROYW1lLkxlbmd0aCA8IDkgKiBzaXplb2YgKFdDSEFSKQor CSAgICAgIHx8IHdjc25jYXNlY21wIChkYmktPk9iamVjdE5hbWUuQnVmZmVyLCBMIkhhcmRk aXNrIiwgOCkgIT0gMAorCSAgICAgIHx8ICFpc3dkaWdpdCAoZGJpLT5PYmplY3ROYW1lLkJ1 ZmZlcls4XSkpCisJICAgIGNvbnRpbnVlOworCSAgLyogR290IGl0LiAgTm93IGNvbnN0cnVj dCB0aGUgcGF0aCB0byB0aGUgZW50aXJlIGRpc2ssIHdoaWNoIGlzCisJICAgICAiXFxEZXZp Y2VcXEhhcmRkaXNrWFxcUGFydGl0aW9uMCIsIGFuZCBvcGVuIHRoZSBkaXNrIHdpdGgKKwkg ICAgIG1pbmltdW0gcGVybWlzc2lvbnMuICovCisJICB1bnNpZ25lZCBsb25nIGRyaXZlX251 bSA9IHdjc3RvdWwgKGRiaS0+T2JqZWN0TmFtZS5CdWZmZXIgKyA4LAorCQkJCQkgICAgIG51 bGxwdHIsIDEwKTsKKwkgIGlmIChkcml2ZV9udW0gPiBtYXhfZHJpdmVfbnVtKQorCSAgICBj b250aW51ZTsKKwkgIHdjc2NweSAod3BhdGgsIGRiaS0+T2JqZWN0TmFtZS5CdWZmZXIpOwor CSAgUFdDSEFSIHdwYXJ0ID0gd3BhdGggKyBkYmktPk9iamVjdE5hbWUuTGVuZ3RoIC8gc2l6 ZW9mIChXQ0hBUik7CisJICB3Y3BjcHkgKHdwYXJ0LCBMIlxcUGFydGl0aW9uMCIpOworCSAg dXBhdGguTGVuZ3RoID0gZGJpLT5PYmplY3ROYW1lLkxlbmd0aCArIDIyOworCSAgdXBhdGgu TWF4aW11bUxlbmd0aCA9IHVwYXRoLkxlbmd0aCArIHNpemVvZiAoV0NIQVIpOworCSAgSW5p dGlhbGl6ZU9iamVjdEF0dHJpYnV0ZXMgKCZhdHRyLCAmdXBhdGgsIE9CSl9DQVNFX0lOU0VO U0lUSVZFLAorCQkJCSAgICAgIGRpcmhkbCwgbnVsbHB0cik7CisJICAvKiBTWU5DSFJPTkla RSBhY2Nlc3MgaXMgcmVxdWlyZWQgZm9yIElPQ1RMX1NUT1JBR0VfUVVFUllfUFJPUEVSVFkK KwkgICAgIGZvciBkcml2ZXMgYmVoaW5kIHNvbWUgZHJpdmVycyAobnZtZXN0b3Iuc3lzKS4g Ki8KKwkgIElPX1NUQVRVU19CTE9DSyBpbzsKKwkgIHN0YXR1cyA9IE50T3BlbkZpbGUgKCZk ZXZoZGwsIFJFQURfQ09OVFJPTCB8IFNZTkNIUk9OSVpFLCAmYXR0ciwgJmlvLAorCQkJICAg ICAgIEZJTEVfU0hBUkVfVkFMSURfRkxBR1MsIDApOworCSAgaWYgKCFOVF9TVUNDRVNTIChz dGF0dXMpKQorCSAgICB7CisJICAgICAgZGV2aGRsID0gbnVsbHB0cjsKKwkgICAgICBfX3Nl dGVycm5vX2Zyb21fbnRfc3RhdHVzIChzdGF0dXMpOworCSAgICAgIGVycm5vX3NldCA9IHRy dWU7CisJICAgICAgZGVidWdfcHJpbnRmICgiTnRPcGVuRmlsZSglUyksIHN0YXR1cyAleSIs ICZ1cGF0aCwgc3RhdHVzKTsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCisJICAvKiBB ZGQgdGFibGUgc3BhY2UgZm9yIGRyaXZlLCBwYXJ0aXRpb25zIGFuZCBlbmQgbWFya2VyLiAq LworCSAgaWYgKGFsbG9jX3NpemUgPD0gdGFibGVfc2l6ZSArIG1heF9wYXJ0X251bSkKKwkg ICAgeworCSAgICAgIGFsbG9jX3NpemUgPSB0YWJsZV9zaXplICsgbWF4X3BhcnRfbnVtICsg ODsKKwkgICAgICB0YWJsZSA9IGJ5X2lkX3JlYWxsb2MgKHRhYmxlLCBhbGxvY19zaXplKTsK KwkgICAgICBpZiAoIXRhYmxlKQorCQl7CisJCSAgTnRDbG9zZSAoZGV2aGRsKTsKKwkJICBO dENsb3NlIChkaXJoZGwpOworCQkgIHJldHVybiAtMTsKKwkJfQorCSAgICB9CisKKwkgIC8q IEZldGNoIHN0b3JhZ2UgcHJvcGVydGllcyBhbmQgY3JlYXRlIHRoZSBJRCBzdHJpbmcuICov CisJICBpbnQgcmMgPSBzdG9ycHJvcF90b19pZF9uYW1lIChkZXZoZGwsICZ1cGF0aCwgaW9j dGxfYnVmLAorCQkJCQl0YWJsZVt0YWJsZV9zaXplXS5uYW1lKTsKKwkgIGlmIChyYyA8PSAw KQorCSAgICB7CisJICAgICAgaWYgKHJjIDwgMCkKKwkJZXJybm9fc2V0ID0gdHJ1ZTsKKwkg ICAgICBjb250aW51ZTsKKwkgICAgfQorCSAgaW50IGRyaXZlX2luZGV4ID0gdGFibGVfc2l6 ZSsrOworCSAgc2l6ZV90IGRyaXZlX2xlbiA9IHN0cmxlbih0YWJsZVtkcml2ZV9pbmRleF0u bmFtZSk7CisJICB0YWJsZVtkcml2ZV9pbmRleF0uZHJpdmUgPSBkcml2ZV9udW07CisJICB0 YWJsZVtkcml2ZV9pbmRleF0ucGFydCA9IDA7CisKKwkgIC8qIEZldGNoIGRyaXZlIGxheW91 dCBpbmZvIHRvIGdldCBzaXplIG9mIGFsbCBwYXJ0aXRpb25zIG9uIGRpc2suICovCisJICBE V09SRCBieXRlc19yZWFkOworCSAgaWYgKCFEZXZpY2VJb0NvbnRyb2wgKGRldmhkbCwgSU9D VExfRElTS19HRVRfRFJJVkVfTEFZT1VUX0VYLCBudWxscHRyLCAwLAorCQkJICAgICAgIGlv Y3RsX2J1ZiwgTlRfTUFYX1BBVEgsICZieXRlc19yZWFkLCBudWxscHRyKSkKKwkgICAgewor CSAgICAgIGRlYnVnX3ByaW50ZiAoIkRldmljZUlvQ29udHJvbCglUywgIgorCQkJICAgICJJ T0NUTF9ESVNLX0dFVF9EUklWRV9MQVlPVVRfRVgpOiAlRSIsICZ1cGF0aCk7CisJICAgICAg Y29udGludWU7CisJICAgIH0KKworCSAgLyogTG9vcCBvdmVyIHBhcnRpdGlvbnMuICovCisJ ICBjb25zdCBEUklWRV9MQVlPVVRfSU5GT1JNQVRJT05fRVggKmRsaXggPQorCSAgICByZWlu dGVycHJldF9jYXN0PGNvbnN0IERSSVZFX0xBWU9VVF9JTkZPUk1BVElPTl9FWCAqPihpb2N0 bF9idWYpOworCSAgZm9yIChEV09SRCBpID0gMDsgaSA8IGRsaXgtPlBhcnRpdGlvbkNvdW50 OyBpKyspCisJICAgIHsKKwkgICAgICBEV09SRCBwYXJ0X251bSA9IGRsaXgtPlBhcnRpdGlv bkVudHJ5W2ldLlBhcnRpdGlvbk51bWJlcjsKKwkgICAgICAvKiBBIHBhcnRpdGlvbiBudW1i ZXIgb2YgMCBkZW5vdGVzIGFuIGV4dGVuZGVkIHBhcnRpdGlvbiBvciBhCisJCSBmaWxsZXIg ZW50cnkgYXMgZGVzY3JpYmVkIGluCisJCSBmaGFuZGxlcl9kZXZfZmxvcHB5Ojpsb2NrX3Bh cnRpdGlvbi4gIEp1c3Qgc2tpcC4gKi8KKwkgICAgICBpZiAocGFydF9udW0gPT0gMCkKKwkJ Y29udGludWU7CisJICAgICAgaWYgKHBhcnRfbnVtID4gbWF4X3BhcnRfbnVtKQorCQlicmVh azsKKwkgICAgICB0YWJsZVt0YWJsZV9zaXplXSA9IHRhYmxlW2RyaXZlX2luZGV4XTsKKwkg ICAgICBfX3NtYWxsX3NwcmludGYodGFibGVbdGFibGVfc2l6ZV0ubmFtZSArIGRyaXZlX2xl biwgIi1wYXJ0JXUiLAorCQkJICAgICAgcGFydF9udW0pOworCSAgICAgIHRhYmxlW3RhYmxl X3NpemVdLnBhcnQgPSBwYXJ0X251bTsKKwkgICAgICB0YWJsZV9zaXplKys7CisJICAgIH0K Kwl9CisgICAgfQorICBpZiAoZGV2aGRsKQorICAgIE50Q2xvc2UoZGV2aGRsKTsKKyAgTnRD bG9zZSAoZGlyaGRsKTsKKworICBpZiAoIXRhYmxlX3NpemUgJiYgdGFibGUpCisgICAgewor ICAgICAgZnJlZSAodGFibGUpOworICAgICAgdGFibGUgPSBudWxscHRyOworICAgIH0KKyAg aWYgKCF0YWJsZSkKKyAgICByZXR1cm4gKGVycm5vX3NldCA/IC0xIDogMCk7CisKKyAgLyog U29ydCBieSBuYW1lIGFuZCByZW1vdmUgZHVwbGljYXRlcy4gKi8KKyAgcXNvcnQgKHRhYmxl LCB0YWJsZV9zaXplLCBzaXplb2YgKCp0YWJsZSksIGJ5X2lkX2NvbXBhcmVfbmFtZSk7Cisg IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YWJsZV9zaXplOyBpKyspCisgICAgeworICAg ICAgdW5zaWduZWQgaiA9IGkgKyAxOworICAgICAgd2hpbGUgKGogPCB0YWJsZV9zaXplICYm ICFzdHJjbXAgKHRhYmxlW2ldLm5hbWUsIHRhYmxlW2pdLm5hbWUpKQorCWorKzsKKyAgICAg IGlmIChqID09IGkgKyAxKQorCWNvbnRpbnVlOworICAgICAgLyogRHVwbGljYXRlKHMpIGZv dW5kLCByZW1vdmUgYWxsIGVudHJpZXMgd2l0aCB0aGlzIG5hbWUuICovCisgICAgICBkZWJ1 Z19wcmludGYgKCJyZW1vdmluZyBkdXBsaWNhdGVzICVkLSVkOiAnJXMnIiwgaSwgaiAtIDEs IHRhYmxlW2ldLm5hbWUpOworICAgICAgaWYgKGogPCB0YWJsZV9zaXplKQorCW1lbW1vdmUg KHRhYmxlICsgaSwgdGFibGUgKyBqLCAodGFibGVfc2l6ZSAtIGopICogc2l6ZW9mICgqdGFi bGUpKTsKKyAgICAgIHRhYmxlX3NpemUgLT0gaiAtIGk7CisgICAgICBpLS07CisgICAgfQor CisgIGRlYnVnX3ByaW50ZiAoInRhYmxlX3NpemU6ICVkIiwgdGFibGVfc2l6ZSk7CisgIHJl dHVybiB0YWJsZV9zaXplOworfQorCitjb25zdCBjaGFyIGRldl9kaXNrW10gPSAiL2Rldi9k aXNrIjsKK2NvbnN0IHNpemVfdCBkZXZfZGlza19sZW4gPSBzaXplb2YgKGRldl9kaXNrKSAt IDE7CisKK2ZoYW5kbGVyX2Rldl9kaXNrOjpmaGFuZGxlcl9kZXZfZGlzayAoKToKKyAgZmhh bmRsZXJfdmlydHVhbCAoKSwKKyAgbG9jICh1bmtub3duX2xvYyksCisgIGRyaXZlX2Zyb21f aWQgKC0xKSwKKyAgcGFydF9mcm9tX2lkICgwKQoreworfQorCit2b2lkCitmaGFuZGxlcl9k ZXZfZGlzazo6aW5pdF9kZXZfZGlzayAoKQoreworICBpZiAobG9jICE9IHVua25vd25fbG9j KQorICAgIHJldHVybjsKKworICBzdGF0aWMgY29uc3QgY2hhciBieV9pZFtdID0gIi9ieS1p ZCI7CisgIGNvbnN0IHNpemVfdCBieV9pZF9sZW4gPSBzaXplb2YoYnlfaWQpIC0gMTsKKwor ICAvKiBEZXRlcm1pbmUgbG9jYXRpb24uICovCisgIGNvbnN0IGNoYXIgKnBhdGggPSBnZXRf bmFtZSAoKTsKKyAgaWYgKCFwYXRoX3ByZWZpeF9wIChkZXZfZGlzaywgcGF0aCwgZGV2X2Rp c2tfbGVuLCBmYWxzZSkpCisgICAgbG9jID0gaW52YWxpZF9sb2M7IC8vIHNob3VsZCBub3Qg aGFwcGVuCisgIGVsc2UgaWYgKCFwYXRoW2Rldl9kaXNrX2xlbl0pCisgICAgbG9jID0gZGlz a19kaXI7IC8vICIvZGV2L2Rpc2siCisgIGVsc2UgaWYgKCFwYXRoX3ByZWZpeF9wIChieV9p ZCwgcGF0aCArIGRldl9kaXNrX2xlbiwgYnlfaWRfbGVuLCBmYWxzZSkpCisgICAgbG9jID0g aW52YWxpZF9sb2M7IC8vICIvZGV2L2Rpc2svaW52YWxpZCIKKyAgZWxzZSBpZiAoIXBhdGhb ZGV2X2Rpc2tfbGVuICsgYnlfaWRfbGVuXSkKKyAgICBsb2MgPSBieV9pZF9kaXI7IC8vICIv ZGV2L2Rpc2svYnktaWQiCisgIGVsc2UgaWYgKHN0cmNociAocGF0aCArIGRldl9kaXNrX2xl biArIGJ5X2lkX2xlbiArIDEsICcvJykpCisgICAgbG9jID0gaW52YWxpZF9sb2M7IC8vICIv ZGV2L2Rpc2svYnktaWQvZGlyL2ludmFsaWQiCisgIGVsc2UKKyAgICBsb2MgPSBieV9pZF9s aW5rOyAvLyBwb3NzaWJsZSAiL2Rldi9kaXNrL2J5LWlkL0xJTksiCisgIGRlYnVnX3ByaW50 ZiAoIiclcyc6IGxvYyAlZCIsIHBhdGgsIChpbnQpbG9jKTsKKworICAvKiBEb25lIGlmICIv ZGV2L2Rpc2siLCAiL2Rldi9kaXNrL2J5X2lkIiBvciBpbnZhbGlkLiAqLworICBpZiAobG9j ICE9IGJ5X2lkX2xpbmspCisgICAgcmV0dXJuOworCisgIC8qIENoZWNrIHdoZXRoZXIgIi9k ZXYvZGlzay9ieV9pZC9MSU5LIiBleGlzdHMuICovCisgIGJ5X2lkX2VudHJ5ICp0YWJsZTsK KyAgaW50IHRhYmxlX3NpemUgPSBnZXRfYnlfaWRfdGFibGUgKHRhYmxlKTsKKyAgaWYgKCF0 YWJsZSkKKyAgICB7CisgICAgICBsb2MgPSBpbnZhbGlkX2xvYzsKKyAgICAgIHJldHVybjsK KyAgICB9CisKKyAgYnlfaWRfZW50cnkga2V5OworICBzdHJjcHkgKGtleS5uYW1lLCBwYXRo ICsgZGV2X2Rpc2tfbGVuICsgYnlfaWRfbGVuICsgMSk7CisgIGNvbnN0IHZvaWQgKmZvdW5k ID0gYnNlYXJjaCAoJmtleSwgdGFibGUsIHRhYmxlX3NpemUsIHNpemVvZiAoKnRhYmxlKSwK KwkJCSAgICAgICBieV9pZF9jb21wYXJlX25hbWUpOworICBpZiAoZm91bmQpCisgICAgewor ICAgICAgLyogUHJlc2VydmUgZHJpdmUgYW5kIHBhcnRpdGlvbiBudW1iZXJzIGZvciBmaWxs YnVmICgpLiAqLworICAgICAgY29uc3QgYnlfaWRfZW50cnkgKmUgPSByZWludGVycHJldF9j YXN0PGNvbnN0IGJ5X2lkX2VudHJ5ICo+KGZvdW5kKTsKKyAgICAgIGRyaXZlX2Zyb21faWQg PSBlLT5kcml2ZTsKKyAgICAgIHBhcnRfZnJvbV9pZCA9IGUtPnBhcnQ7CisgICAgfQorICBl bHNlCisgICAgbG9jID0gaW52YWxpZF9sb2M7CisgIGZyZWUgKHRhYmxlKTsKK30KKwordmly dHVhbF9mdHlwZV90CitmaGFuZGxlcl9kZXZfZGlzazo6ZXhpc3RzICgpCit7CisgIGRlYnVn X3ByaW50ZiAoImV4aXN0cyAoJXMpIiwgZ2V0X25hbWUgKCkpOworICBlbnN1cmVfaW5pdGVk ICgpOworICBzd2l0Y2ggKGxvYykKKyAgICB7CisgICAgICBjYXNlIGRpc2tfZGlyOgorICAg ICAgY2FzZSBieV9pZF9kaXI6CisJcmV0dXJuIHZpcnRfZGlyZWN0b3J5OworICAgICAgY2Fz ZSBieV9pZF9saW5rOgorCXJldHVybiB2aXJ0X3N5bWxpbms7CisgICAgICBkZWZhdWx0Ogor CXJldHVybiB2aXJ0X25vbmU7CisgICAgfQorfQorCitpbnQKK2ZoYW5kbGVyX2Rldl9kaXNr Ojpmc3RhdCAoc3RydWN0IHN0YXQgKmJ1ZikKK3sKKyAgZGVidWdfcHJpbnRmICgiZnN0YXQg KCVzKSIsIGdldF9uYW1lICgpKTsKKyAgZW5zdXJlX2luaXRlZCAoKTsKKyAgaWYgKGxvYyA9 PSBpbnZhbGlkX2xvYykKKyAgICB7CisgICAgICBzZXRfZXJybm8gKEVOT0VOVCk7CisgICAg ICByZXR1cm4gLTE7CisgICAgfQorCisgIGZoYW5kbGVyX2Jhc2U6OmZzdGF0IChidWYpOwor ICBidWYtPnN0X21vZGUgPSAobG9jID09IGJ5X2lkX2xpbmsgPyBTX0lGTE5LIHwgU19JV1VT UiB8IFNfSVdHUlAgfCBTX0lXT1RICisJCSAgOiBTX0lGRElSKSB8IFNURF9SQklUUyB8IFNU RF9YQklUUzsKKyAgYnVmLT5zdF9pbm8gPSBnZXRfaW5vICgpOworICByZXR1cm4gMDsKK30K Kworc3RhdGljIGlubGluZSBieV9pZF9lbnRyeSAqKgorZGlyX2lkX3RhYmxlIChESVIgKmRp cikKK3sKKyAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8YnlfaWRfZW50cnkgKio+KCZkaXIt Pl9fZF9pbnRlcm5hbCk7Cit9CisKK0RJUiAqCitmaGFuZGxlcl9kZXZfZGlzazo6b3BlbmRp ciAoaW50IGZkKQoreworICBlbnN1cmVfaW5pdGVkICgpOworICBpZiAoIShsb2MgPT0gZGlz a19kaXIgfHwgbG9jID09IGJ5X2lkX2RpcikpCisgICAgeworICAgICAgc2V0X2Vycm5vIChF Tk9URElSKTsKKyAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICBieV9pZF9lbnRy eSAqdGFibGUgPSBudWxscHRyOworICBpZiAobG9jID09IGJ5X2lkX2RpcikKKyAgICB7Cisg ICAgICBpbnQgdGFibGVfc2l6ZSA9IGdldF9ieV9pZF90YWJsZSAodGFibGUpOworICAgICAg aWYgKHRhYmxlX3NpemUgPCAwKQorCXJldHVybiBudWxscHRyOyAvKiBlcnJubyBpcyBzZXQu ICovCisgICAgICBpZiAodGFibGUpCisJeworCSAgLyogU2hyaW5rIHRvIHJlcXVpcmVkIHRh YmxlX3NpemUuICovCisJICB0YWJsZSA9IGJ5X2lkX3JlYWxsb2MgKHRhYmxlLCB0YWJsZV9z aXplICsgMSk7CisJICBpZiAoIXRhYmxlKQorCSAgICByZXR1cm4gbnVsbHB0cjsgLyogU2hv dWxkIG5vdCBoYXBwZW4uICovCisJICAvKiBNYXJrIGVuZCBvZiB0YWJsZSBmb3IgcmVhZGRp ciAoKS4gKi8KKwkgIHRhYmxlW3RhYmxlX3NpemVdLm5hbWVbMF0gPSAnXDAnOworCX0KKyAg ICB9CisKKyAgRElSICpkaXIgPSBmaGFuZGxlcl92aXJ0dWFsOjpvcGVuZGlyIChmZCk7Cisg IGlmICghZGlyKQorICAgIHsKKyAgICAgIGZyZWUgKHRhYmxlKTsKKyAgICAgIHJldHVybiBu dWxscHRyOworICAgIH0KKyAgZGlyLT5fX2ZsYWdzID0gZGlyZW50X3Nhd19kb3QgfCBkaXJl bnRfc2F3X2RvdF9kb3Q7CisgICpkaXJfaWRfdGFibGUgKGRpcikgPSB0YWJsZTsKKyAgcmV0 dXJuIGRpcjsKK30KKworaW50CitmaGFuZGxlcl9kZXZfZGlzazo6Y2xvc2VkaXIgKERJUiAq ZGlyKQoreworICBmcmVlICgqZGlyX2lkX3RhYmxlIChkaXIpKTsKKyAgcmV0dXJuIGZoYW5k bGVyX3ZpcnR1YWw6OmNsb3NlZGlyIChkaXIpOworfQorCitpbnQKK2ZoYW5kbGVyX2Rldl9k aXNrOjpyZWFkZGlyIChESVIgKmRpciwgZGlyZW50ICpkZSkKK3sKKyAgaW50IHJlczsKKyAg aWYgKGRpci0+X19kX3Bvc2l0aW9uIDwgMikKKyAgICB7CisgICAgICBkZS0+ZF9uYW1lWzBd ID0gJy4nOworICAgICAgZGUtPmRfbmFtZVsxXSA9IChkaXItPl9fZF9wb3NpdGlvbiA/ICcu JyA6ICdcMCcpOworICAgICAgZGUtPmRfbmFtZVsyXSA9ICdcMCc7CisgICAgICBkZS0+ZF90 eXBlID0gRFRfRElSOworICAgICAgZGlyLT5fX2RfcG9zaXRpb24rKzsKKyAgICAgIHJlcyA9 IDA7CisgICAgfQorICBlbHNlIGlmIChsb2MgPT0gZGlza19kaXIgJiYgZGlyLT5fX2RfcG9z aXRpb24gPT0gMikKKyAgICB7CisgICAgICBzdHJjcHkgKGRlLT5kX25hbWUsICJieS1pZCIp OworICAgICAgZGUtPmRfdHlwZSA9IERUX0RJUjsKKyAgICAgIGRpci0+X19kX3Bvc2l0aW9u Kys7CisgICAgICByZXMgPSAwOworICAgIH0KKyAgZWxzZSBpZiAobG9jID09IGJ5X2lkX2Rp ciAmJiAqZGlyX2lkX3RhYmxlIChkaXIpKQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKm5h bWUgPSAoKmRpcl9pZF90YWJsZSAoZGlyKSlbZGlyLT5fX2RfcG9zaXRpb24gLSAyXS5uYW1l OworICAgICAgaWYgKG5hbWVbMF0pCisJeworCSAgc3RyY3B5IChkZS0+ZF9uYW1lLCBuYW1l KTsKKwkgIGRlLT5kX3R5cGUgPSBEVF9MTks7CisJICBkaXItPl9fZF9wb3NpdGlvbisrOwor CSAgcmVzID0gMDsKKwl9CisgICAgICBlbHNlCisJcmVzID0gRU5NRklMRTsKKyAgICB9Cisg IGVsc2UKKyAgICByZXMgPSBFTk1GSUxFOworCisgIHN5c2NhbGxfcHJpbnRmICgiJWQgPSBy ZWFkZGlyKCVwLCAlcCkgKCVzKSIsIHJlcywgZGlyLCBkZSwKKwkJICAoIXJlcyA/IGRlLT5k X25hbWUgOiAiIikpOworICByZXR1cm4gcmVzOworfQorCitpbnQKK2ZoYW5kbGVyX2Rldl9k aXNrOjpvcGVuIChpbnQgZmxhZ3MsIG1vZGVfdCBtb2RlKQoreworICBlbnN1cmVfaW5pdGVk ICgpOworICBpbnQgZXJyID0gMDsKKyAgaWYgKCFmaGFuZGxlcl92aXJ0dWFsOjpvcGVuIChm bGFncywgbW9kZSkpCisgICAgZXJyID0gLTE7CisgIGVsc2UgaWYgKGxvYyA9PSBkaXNrX2Rp ciB8fCBsb2MgPT0gYnlfaWRfZGlyKQorICAgIHsKKyAgICAgIGlmICgoZmxhZ3MgJiAoT19D UkVBVCB8IE9fRVhDTCkpID09IChPX0NSRUFUIHwgT19FWENMKSkKKwllcnIgPSBFRVhJU1Q7 CisgICAgICBlbHNlIGlmIChmbGFncyAmIE9fV1JPTkxZKQorCWVyciA9IEVJU0RJUjsKKyAg ICAgIGVsc2UKKwlkaXJvcGVuID0gdHJ1ZTsKKyAgICB9CisgIC8qIGVsc2UgaWYgKGxvYyA9 PSBieV9pZF9saW5rKSB7IH0gKi8gLyogc2hvdWxkIG5vdCBoYXBwZW4gKi8KKyAgZWxzZSAv KiAobG9jID09IGludmFsaWRfbG9jKSAqLworICAgIHsKKyAgICAgIGlmIChmbGFncyAmIE9f Q1JFQVQpCisJZXJyID0gRVJPRlM7CisgICAgICBlbHNlCisJZXJyID0gRU5PRU5UOworICAg IH0KKworICBpbnQgcmVzOworICBpZiAoIWVycikKKyAgICB7CisgICAgICBub2hhbmRsZSAo dHJ1ZSk7CisgICAgICBzZXRfb3Blbl9zdGF0dXMgKCk7CisgICAgICByZXMgPSAxOworICAg IH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChlcnIgPiAwKQorCXNldF9lcnJubyAoZXJy KTsKKyAgICAgIHJlcyA9IDA7CisgICAgfQorCisgIHN5c2NhbGxfcHJpbnRmICgiJWQgPSBm aGFuZGxlcl9kZXZfZGlzazo6b3BlbigleSwgMCVvKSIsIHJlcywgZmxhZ3MsIG1vZGUpOwor ICByZXR1cm4gcmVzOworfQorCitib29sCitmaGFuZGxlcl9kZXZfZGlzazo6ZmlsbF9maWxl YnVmICgpCit7CisgIGRlYnVnX3ByaW50ZiAoImZpbGxfZmlsZWJ1ZiAoJXMpIiwgZ2V0X25h bWUgKCkpOworICBlbnN1cmVfaW5pdGVkICgpOworICBpZiAoIShsb2MgPT0gYnlfaWRfbGlu ayAmJiBkcml2ZV9mcm9tX2lkID49IDApKQorICAgIHJldHVybiBmYWxzZTsKKworICBjaGFy IGJ1ZlszMl07CisgIGludCBsZW47CisgIGlmIChkcml2ZV9mcm9tX2lkICsgJ2EnIDw9ICd6 JykKKyAgICBsZW4gPSBfX3NtYWxsX3NwcmludGYgKGJ1ZiwgIi4uLy4uL3NkJWMiLCBkcml2 ZV9mcm9tX2lkICsgJ2EnKTsKKyAgZWxzZQorICAgIGxlbiA9IF9fc21hbGxfc3ByaW50ZiAo YnVmLCAiLi4vLi4vc2QlYyVjIiwKKwkJCSAgIGRyaXZlX2Zyb21faWQgLyAoJ3onIC0gJ2En ICsgMSkgLSAxICsgJ2EnLAorCQkJICAgZHJpdmVfZnJvbV9pZCAlICgneicgLSAnYScgKyAx KSArICdhJyk7CisgIGlmIChwYXJ0X2Zyb21faWQpCisgICAgX19zbWFsbF9zcHJpbnRmIChi dWYgKyBsZW4sICIlZCIsIHBhcnRfZnJvbV9pZCk7CisKKyAgaWYgKGZpbGVidWYpCisgICAg Y2ZyZWUgKGZpbGVidWYpOworICBmaWxlYnVmID0gY3N0cmR1cCAoYnVmKTsKKyAgcmV0dXJu IHRydWU7Cit9CmRpZmYgLS1naXQgYS93aW5zdXAvY3lnd2luL2xvY2FsX2luY2x1ZGVzL2Rl dmljZXMuaCBiL3dpbnN1cC9jeWd3aW4vbG9jYWxfaW5jbHVkZXMvZGV2aWNlcy5oCmluZGV4 IDEwMDM1MjYzZC4uMWUwMzVmOWQ2IDEwMDY0NAotLS0gYS93aW5zdXAvY3lnd2luL2xvY2Fs X2luY2x1ZGVzL2RldmljZXMuaAorKysgYi93aW5zdXAvY3lnd2luL2xvY2FsX2luY2x1ZGVz L2RldmljZXMuaApAQCAtNzEsNiArNzEsNyBAQCBlbnVtIGZoX2RldmljZXMKICAgRkhfREVW ICAgICA9IEZIREVWIChERVZfVklSVEZTX01BSk9SLCAxOTMpLAogICBGSF9DWUdEUklWRT0g RkhERVYgKERFVl9WSVJURlNfTUFKT1IsIDE5MiksCiAgIEZIX0RFVl9GRCAgPSBGSERFViAo REVWX1ZJUlRGU19NQUpPUiwgMTkxKSwKKyAgRkhfREVWX0RJU0s9IEZIREVWIChERVZfVklS VEZTX01BSk9SLCAxOTApLAogCiAgIEZIX1NJR05BTEZEPSBGSERFViAoREVWX1ZJUlRGU19N QUpPUiwgMTMpLAogICBGSF9USU1FUkZEID0gRkhERVYgKERFVl9WSVJURlNfTUFKT1IsIDE0 KSwKQEAgLTQxNSw2ICs0MTYsOCBAQCBleHRlcm4gY29uc3QgX2RldmljZSBkZXZfcGlwZXJf c3RvcmFnZTsKICNkZWZpbmUgcGlwZXJfZGV2ICgoZGV2aWNlICopICZkZXZfcGlwZXJfc3Rv cmFnZSkKIGV4dGVybiBjb25zdCBfZGV2aWNlIGRldl9waXBld19zdG9yYWdlOwogI2RlZmlu ZSBwaXBld19kZXYgKChkZXZpY2UgKikgJmRldl9waXBld19zdG9yYWdlKQorZXh0ZXJuIGNv bnN0IF9kZXZpY2UgZGV2X2Rldl9kaXNrX3N0b3JhZ2U7CisjZGVmaW5lIGRldl9kaXNrX2Rl diAoKGRldmljZSAqKSAmZGV2X2Rldl9kaXNrX3N0b3JhZ2UpCiBleHRlcm4gY29uc3QgX2Rl dmljZSBkZXZfcHJvY19zdG9yYWdlOwogI2RlZmluZSBwcm9jX2RldiAoKGRldmljZSAqKSAm ZGV2X3Byb2Nfc3RvcmFnZSkKIGV4dGVybiBjb25zdCBfZGV2aWNlIGRldl9kZXZfc3RvcmFn ZTsKQEAgLTQzOSw3ICs0NDIsOCBAQCBleHRlcm4gY29uc3QgX2RldmljZSBkZXZfZnNfc3Rv cmFnZTsKICNkZWZpbmUgaXNwcm9jc3lzX2RldihkZXZuKSAoZGV2biA9PSBGSF9QUk9DU1lT KQogCiAjZGVmaW5lIGlzdmlydHVhbF9kZXYoZGV2bikgXAotICAoaXNwcm9jX2RldiAoZGV2 bikgfHwgZGV2biA9PSBGSF9DWUdEUklWRSB8fCBkZXZuID09IEZIX05FVERSSVZFIHx8IGRl dm4gPT0gRkhfREVWX0ZEKQorICAoaXNwcm9jX2RldiAoZGV2bikgfHwgZGV2biA9PSBGSF9D WUdEUklWRSB8fCBkZXZuID09IEZIX05FVERSSVZFIFwKKyAgIHx8IGRldm4gPT0gRkhfREVW X0ZEIHx8IGRldm4gPT0gRkhfREVWX0RJU0spCiAKICNkZWZpbmUgaXNjb25zX2RldihuKSBc CiAgICgoZGV2aWNlOjptYWpvciAoKGRldl90KSAobikpID09IERFVl9DT05TX01BSk9SKSBc CmRpZmYgLS1naXQgYS93aW5zdXAvY3lnd2luL2xvY2FsX2luY2x1ZGVzL2ZoYW5kbGVyLmgg Yi93aW5zdXAvY3lnd2luL2xvY2FsX2luY2x1ZGVzL2ZoYW5kbGVyLmgKaW5kZXggMjEyYzIy MzQ0Li5jZDYxYWFkZjggMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4vbG9jYWxfaW5jbHVk ZXMvZmhhbmRsZXIuaAorKysgYi93aW5zdXAvY3lnd2luL2xvY2FsX2luY2x1ZGVzL2ZoYW5k bGVyLmgKQEAgLTQwLDYgKzQwLDggQEAgZGV0YWlscy4gKi8KIGV4dGVybiBjb25zdCBjaGFy ICp3aW5kb3dzX2RldmljZV9uYW1lc1tdOwogZXh0ZXJuIHN0cnVjdCBfX2N5Z3dpbl9wZXJm aWxlICpwZXJmaWxlX3RhYmxlOwogI2RlZmluZSBfX2Ztb2RlICgqKHVzZXJfZGF0YS0+Zm1v ZGVfcHRyKSkKK2V4dGVybiBjb25zdCBjaGFyIGRldl9kaXNrW107CitleHRlcm4gY29uc3Qg c2l6ZV90IGRldl9kaXNrX2xlbjsKIGV4dGVybiBjb25zdCBjaGFyIHByb2NbXTsKIGV4dGVy biBjb25zdCBzaXplX3QgcHJvY19sZW47CiBleHRlcm4gY29uc3QgY2hhciBwcm9jc3lzW107 CkBAIC0zMTkwLDYgKzMxOTIsNTAgQEAgY2xhc3MgZmhhbmRsZXJfcHJvY25ldDogcHVibGlj IGZoYW5kbGVyX3Byb2MKICAgfQogfTsKIAorY2xhc3MgZmhhbmRsZXJfZGV2X2Rpc2s6IHB1 YmxpYyBmaGFuZGxlcl92aXJ0dWFsCit7CisgIGVudW0gZGV2X2Rpc2tfbG9jYXRpb24gewor ICAgIHVua25vd25fbG9jLCBpbnZhbGlkX2xvYywgZGlza19kaXIsIGJ5X2lkX2RpciwgYnlf aWRfbGluaworICB9OworICBkZXZfZGlza19sb2NhdGlvbiBsb2M7CisKKyAgdm9pZCBpbml0 X2Rldl9kaXNrICgpOworICB2b2lkIGVuc3VyZV9pbml0ZWQgKCkKKyAgeworICAgIGlmIChs b2MgPT0gdW5rbm93bl9sb2MpCisgICAgICBpbml0X2Rldl9kaXNrICgpOworICB9CisKKyAg aW50IGRyaXZlX2Zyb21faWQ7CisgIGludCBwYXJ0X2Zyb21faWQ7CisKKyBwdWJsaWM6Cisg IGZoYW5kbGVyX2Rldl9kaXNrICgpOworICBmaGFuZGxlcl9kZXZfZGlzayAodm9pZCAqKSB7 fQorICB2aXJ0dWFsX2Z0eXBlX3QgZXhpc3RzKCk7CisgIERJUiAqb3BlbmRpciAoaW50IGZk KTsKKyAgaW50IGNsb3NlZGlyIChESVIgKik7CisgIGludCByZWFkZGlyIChESVIgKiwgZGly ZW50ICopOworICBpbnQgb3BlbiAoaW50IGZsYWdzLCBtb2RlX3QgbW9kZSA9IDApOworICBp bnQgZnN0YXQgKHN0cnVjdCBzdGF0ICpidWYpOworICBib29sIGZpbGxfZmlsZWJ1ZiAoKTsK KworICB2b2lkIGNvcHlfZnJvbSAoZmhhbmRsZXJfYmFzZSAqeCkKKyAgeworICAgIHBjLmZy ZWVfc3RyaW5ncyAoKTsKKyAgICAqdGhpcyA9ICpyZWludGVycHJldF9jYXN0PGZoYW5kbGVy X2Rldl9kaXNrICo+ICh4KTsKKyAgICBfY29weV9mcm9tX3Jlc2V0X2hlbHBlciAoKTsKKyAg fQorCisgIGZoYW5kbGVyX2Rldl9kaXNrICpjbG9uZSAoY3lnaGVhcF90eXBlcyBtYWxsb2Nf dHlwZSA9IEhFQVBfRkhBTkRMRVIpCisgIHsKKyAgICB2b2lkICpwdHIgPSAodm9pZCAqKSBj Y2FsbG9jIChtYWxsb2NfdHlwZSwgMSwgc2l6ZW9mIChmaGFuZGxlcl9kZXZfZGlzaykpOwor ICAgIGZoYW5kbGVyX2Rldl9kaXNrICpmaCA9IG5ldyAocHRyKSBmaGFuZGxlcl9kZXZfZGlz ayAocHRyKTsKKyAgICBmaC0+Y29weV9mcm9tICh0aGlzKTsKKyAgICByZXR1cm4gZmg7Cisg IH0KK307CisKIGNsYXNzIGZoYW5kbGVyX2Rldl9mZDogcHVibGljIGZoYW5kbGVyX3ZpcnR1 YWwKIHsKICBwdWJsaWM6CkBAIC0zNDE2LDYgKzM0NjIsNyBAQCB0eXBlZGVmIHVuaW9uCiAg IGNoYXIgX19kZXZfcmF3W3NpemVvZiAoZmhhbmRsZXJfZGV2X3JhdyldOwogICBjaGFyIF9f ZGV2X3RhcGVbc2l6ZW9mIChmaGFuZGxlcl9kZXZfdGFwZSldOwogICBjaGFyIF9fZGV2X3pl cm9bc2l6ZW9mIChmaGFuZGxlcl9kZXZfemVybyldOworICBjaGFyIF9fZGV2X2Rpc2tbc2l6 ZW9mIChmaGFuZGxlcl9kZXZfZGlzayldOwogICBjaGFyIF9fZGV2X2ZkW3NpemVvZiAoZmhh bmRsZXJfZGV2X2ZkKV07CiAgIGNoYXIgX19kaXNrX2ZpbGVbc2l6ZW9mIChmaGFuZGxlcl9k aXNrX2ZpbGUpXTsKICAgY2hhciBfX2ZpZm9bc2l6ZW9mIChmaGFuZGxlcl9maWZvKV07CmRp ZmYgLS1naXQgYS93aW5zdXAvY3lnd2luL21vdW50LmNjIGIvd2luc3VwL2N5Z3dpbi9tb3Vu dC5jYwppbmRleCAzNmFiMDQyYTcuLjEzYWNlNjI1MCAxMDA2NDQKLS0tIGEvd2luc3VwL2N5 Z3dpbi9tb3VudC5jYworKysgYi93aW5zdXAvY3lnd2luL21vdW50LmNjCkBAIC0zNSw2ICsz NSw5IEBAIGRldGFpbHMuICovCiAgICAocGF0aFttb3VudF90YWJsZS0+Y3lnZHJpdmVfbGVu ICsgMV0gPT0gJy8nIHx8IFwKICAgICAhcGF0aFttb3VudF90YWJsZS0+Y3lnZHJpdmVfbGVu ICsgMV0pKQogCisjZGVmaW5lIGlzZGV2X2Rpc2socGF0aCkgXAorICAocGF0aF9wcmVmaXhf cCAoZGV2X2Rpc2ssIChwYXRoKSwgZGV2X2Rpc2tfbGVuLCBmYWxzZSkpCisKICNkZWZpbmUg aXNwcm9jKHBhdGgpIFwKICAgKHBhdGhfcHJlZml4X3AgKHByb2MsIChwYXRoKSwgcHJvY19s ZW4sIGZhbHNlKSkKIApAQCAtNjg1LDYgKzY4OCwxMyBAQCBtb3VudF9pbmZvOjpjb252X3Rv X3dpbjMyX3BhdGggKGNvbnN0IGNoYXIgKnNyY19wYXRoLCBjaGFyICpkc3QsIGRldmljZSYg ZGV2LAogICAgICAgLyogR28gdGhyb3VnaCBjaHJvb3QgY2hlY2sgKi8KICAgICAgIGdvdG8g b3V0OwogICAgIH0KKyAgaWYgKGlzZGV2X2Rpc2sgKHNyY19wYXRoKSkKKyAgICB7CisgICAg ICBkZXYgPSAqZGV2X2Rpc2tfZGV2OworICAgICAgKmZsYWdzID0gMDsKKyAgICAgIHN0cmNw eSAoZHN0LCBzcmNfcGF0aCk7CisgICAgICBnb3RvIG91dDsKKyAgICB9CiAgIGlmIChpc3By b2MgKHNyY19wYXRoKSkKICAgICB7CiAgICAgICBkZXYgPSAqcHJvY19kZXY7Ci0tIAoyLjQy LjEKCg== --------------F950A062CC98BF6751F22B22--