From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr0-x22f.google.com (mail-wr0-x22f.google.com [IPv6:2a00:1450:400c:c0c::22f]) by gabe.freedesktop.org (Postfix) with ESMTPS id 136006E276 for ; Wed, 4 Apr 2018 09:48:29 +0000 (UTC) Received: by mail-wr0-x22f.google.com with SMTP id y55so21572898wry.3 for ; Wed, 04 Apr 2018 02:48:28 -0700 (PDT) From: Tvrtko Ursulin Date: Wed, 4 Apr 2018 10:48:18 +0100 Message-Id: <20180404094818.4986-1-tvrtko.ursulin@linux.intel.com> In-Reply-To: <20180328182948.27494-1-tvrtko.ursulin@linux.intel.com> References: <20180328182948.27494-1-tvrtko.ursulin@linux.intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v5] intel-gpu-top: Rewrite the tool to be safe to use List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: Tvrtko Ursulin , Eero Tamminen , Intel-gfx@lists.freedesktop.org List-ID: RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCmludGVsLWdw dS10b3AgaXMgYSBkYW5nZXJvdXMgdG9vbCB3aGljaCBjYW4gaGFuZyBtYWNoaW5lcyBkdWUgdW5z YWZlIG1taW8KcmVnaXN0ZXIgYWNjZXNzLiBUaGlzIHBhdGNoIHJld3JpdGVzIGl0IHRvIHVzZSBv bmx5IFBNVS4KCk9ubHkgb3ZlcmFsbCBjb21tYW5kIHN0cmVhbWVyIGJ1c3luZXNzIGFuZCBHUFUg Z2xvYmFsIGRhdGEgc3VjaCBhcyBwb3dlcgphbmQgZnJlcXVlbmNpZXMgYXJlIGluY2x1ZGVkIGlu IHRoaXMgbmV3IHZlcnNpb24uCgpGb3IgYWNjZXNzIHRvIG1vcmUgR1BVIGZ1bmN0aW9uYWwgdW5p dCBsZXZlbCBkYXRhLCBhbiBPQSBtZXRyaWMgYmFzZWQgdG9vbApsaWtlIGdwdS10b3Agc2hvdWxk IGJlIHVzZWQgaW5zdGVhZC4KCnYyOgogKiBTb3J0IGVuZ2luZXMgYnkgY2xhc3MgYW5kIGluc3Rh bmNlLgogKiBEbyBub3Qgd2FpdCBmb3Igb25lIHNhbXBsaW5nIHBlcmlvZCB0byBkaXNwbGF5IHNv bWV0aGluZyBvbiBzY3JlZW4uCiAqIE1vdmUgY29kZSBvdXQgb2YgdGhlIGFzc2VydHMuIChSaW5h dCBJYnJhZ2ltb3YpCiAqIENvbnRpbnVvdXNseSBhZGFwdCB0byB0ZXJtaW5hbCBzaXplLiAoUmlu YXQgSWJyYWdpbW92KQoKdjM6CiAqIENoYW5nZSBsYXlvdXQgYW5kIHByZWNpc2lvbiBvZiBzb21l IGZpZWxkLiAoQ2hyaXMgV2lsc29uKQogRWVybyBUYW1taW5lbjoKICogVXNlIG1vcmUgdXNlciBm cmllbmRseSBlbmdpbmUgbmFtZXMuCiAqIERvbid0IGVycm9yIG91dCBpZiBhIGNvdW50ZXIgaXMg bWlzc2luZy4KICogQWRkIElNQyByZWFkL3dyaXRlIGJhbmR3aWR0aC4KICogUmVwb3J0IG1pbmlt dW0gcmVxdWlyZWQga2VybmVsIHZlcnNpb24uCgp2NDoKICogUmVhbGx5IHN1cHBvcnQgNC4xNiBi eSBza2lwcGluZyBvZiBtaXNzaW5nIGVuZ2luZXMuCiAqIFNpbXBsZXIgYW5kIGxlc3MgaGFja3kg ZmxvYXQgcHJpbnRpbmcuCiAqIFByZXNlcnZlIGNvcHlyaWdodCBoZWFkZXIuIChBbnRvbmlvIEFy Z2Vuemlhbm8pCiAqIFNpbXBsaWZ5IGVuZ2luZXNfcHRyIG1hY3JvLiAoUmluYXQgSWJyYWdpbW92 KQoKdjU6CiAqIEdldCBSQVBMIHVuaXQgZnJvbSBzeXNmcy4KICogQ29uc29saWRhdGUgc3lzZnMg cGF0aHMgd2l0aCBhIG1hY3JvLgogKiBUaWR5IGVycm9yIGhhbmRsaW5nIGJ5IGNhcnJ5aW5nIG92 ZXIgYW5kIHJlcG9ydGluZyBlcnJuby4KICogQ2hlY2sgYWdhaW5zdCBjb25zb2xlIGhlaWdodCBv biBhbGwgcHJpbnRzLgogKiBNb3JlIHJlYWRhYmxlIG1pbmltdW0ga2VybmVsIHZlcnNpb24gbWVz c2FnZS4gKEVlcm8gVGFtbWluZW4pCiAqIENvbHVtbiBiYW5uZXIgZm9yIHBlciBlbmdpbmUgc3Rh dHMuIChFZXJvIFRhbW1pbmVuKQoKU2lnbmVkLW9mZi1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRr by51cnN1bGluQGludGVsLmNvbT4KQ2M6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29u LmNvLnVrPgpDYzogTGlvbmVsIExhbmR3ZXJsaW4gPGxpb25lbC5nLmxhbmR3ZXJsaW5AaW50ZWwu Y29tPgpDYzogUGV0cmkgTGF0dmFsYSA8cGV0cmkubGF0dmFsYUBpbnRlbC5jb20+CkNjOiBFZXJv IFRhbW1pbmVuIDxlZXJvLnQudGFtbWluZW5AaW50ZWwuY29tPgpDYzogUmluYXQgSWJyYWdpbW92 IDxpYnJhZ2ltb3ZyaW5hdEBtYWlsLnJ1PgpSZXZpZXdlZC1ieTogTGlvbmVsIExhbmR3ZXJsaW4g PGxpb25lbC5nLmxhbmR3ZXJsaW5AaW50ZWwuY29tPiAjIHYxClJldmlld2VkLWJ5OiBDaHJpcyBX aWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4gIyB2MC41Ci0tLQogbGliL2lndF9wZXJm LmMgICAgICAgIHwgICAgNiArCiBsaWIvaWd0X3BlcmYuaCAgICAgICAgfCAgICAxICsKIHRvb2xz L01ha2VmaWxlLmFtICAgICB8ICAgIDIgKwogdG9vbHMvaW50ZWxfZ3B1X3RvcC5jIHwgMTI1MCAr KysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB0b29scy9t ZXNvbi5idWlsZCAgICAgfCAgICA2ICstCiA1IGZpbGVzIGNoYW5nZWQsIDcwNyBpbnNlcnRpb25z KCspLCA1NTggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbGliL2lndF9wZXJmLmMgYi9saWIv aWd0X3BlcmYuYwppbmRleCA5OWQ4MmVhNTFjOWIuLmUzZGVjMmNjMjljNyAxMDA2NDQKLS0tIGEv bGliL2lndF9wZXJmLmMKKysrIGIvbGliL2lndF9wZXJmLmMKQEAgLTY5LDMgKzY5LDkgQEAgaW50 IGlndF9wZXJmX29wZW4odWludDY0X3QgdHlwZSwgdWludDY0X3QgY29uZmlnKQogCXJldHVybiBf cGVyZl9vcGVuKHR5cGUsIGNvbmZpZywgLTEsCiAJCQkgIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVf RU5BQkxFRCk7CiB9CisKK2ludCBpZ3RfcGVyZl9vcGVuX2dyb3VwKHVpbnQ2NF90IHR5cGUsIHVp bnQ2NF90IGNvbmZpZywgaW50IGdyb3VwKQoreworCXJldHVybiBfcGVyZl9vcGVuKHR5cGUsIGNv bmZpZywgZ3JvdXAsCisJCQkgIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfRU5BQkxFRCB8IFBFUkZf Rk9STUFUX0dST1VQKTsKK30KZGlmZiAtLWdpdCBhL2xpYi9pZ3RfcGVyZi5oIGIvbGliL2lndF9w ZXJmLmgKaW5kZXggNjE0ZWE1ZDIzZmE2Li5lMDA3MThmNDc2OWEgMTAwNjQ0Ci0tLSBhL2xpYi9p Z3RfcGVyZi5oCisrKyBiL2xpYi9pZ3RfcGVyZi5oCkBAIC01NSw1ICs1NSw2IEBAIHVpbnQ2NF90 IGk5MTVfdHlwZV9pZCh2b2lkKTsKIGludCBwZXJmX2k5MTVfb3Blbih1aW50NjRfdCBjb25maWcp OwogaW50IHBlcmZfaTkxNV9vcGVuX2dyb3VwKHVpbnQ2NF90IGNvbmZpZywgaW50IGdyb3VwKTsK IGludCBpZ3RfcGVyZl9vcGVuKHVpbnQ2NF90IHR5cGUsIHVpbnQ2NF90IGNvbmZpZyk7CitpbnQg aWd0X3BlcmZfb3Blbl9ncm91cCh1aW50NjRfdCB0eXBlLCB1aW50NjRfdCBjb25maWcsIGludCBn cm91cCk7CiAKICNlbmRpZiAvKiBJOTE1X1BFUkZfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvTWFr ZWZpbGUuYW0gYi90b29scy9NYWtlZmlsZS5hbQppbmRleCAwOWI2ZGJjYzNlY2UuLmEwYjAxNmRk ZDdmZiAxMDA2NDQKLS0tIGEvdG9vbHMvTWFrZWZpbGUuYW0KKysrIGIvdG9vbHMvTWFrZWZpbGUu YW0KQEAgLTI4LDYgKzI4LDggQEAgaW50ZWxfYXViZHVtcF9sYV9MREZMQUdTID0gLW1vZHVsZSAt YXZvaWQtdmVyc2lvbiAtbm8tdW5kZWZpbmVkCiBpbnRlbF9hdWJkdW1wX2xhX1NPVVJDRVMgPSBh dWJkdW1wLmMKIGludGVsX2F1YmR1bXBfbGFfTElCQUREID0gJCh0b3BfYnVpbGRkaXIpL2xpYi9s aWJpbnRlbF90b29scy5sYSAtbGRsCiAKK2ludGVsX2dwdV90b3BfTERBREQgPSAkKHRvcF9idWls ZGRpcikvbGliL2xpYmlndF9wZXJmLmxhCisKIGJpbl9TQ1JJUFRTID0gaW50ZWxfYXViZHVtcAog Q0xFQU5GSUxFUyA9ICQoYmluX1NDUklQVFMpCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2ludGVsX2dw dV90b3AuYyBiL3Rvb2xzL2ludGVsX2dwdV90b3AuYwppbmRleCAwOThlNmNlM2ZmODYuLjU3N2Fl MTI2OWIxMyAxMDA2NDQKLS0tIGEvdG9vbHMvaW50ZWxfZ3B1X3RvcC5jCisrKyBiL3Rvb2xzL2lu dGVsX2dwdV90b3AuYwpAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgwqkgMjAwNyBJ bnRlbCBDb3Jwb3JhdGlvbgotICogQ29weXJpZ2h0IMKpIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24K KyAqIENvcHlyaWdodCDCqSAyMDA3LTIwMTggSW50ZWwgQ29ycG9yYXRpb24KICAqCiAgKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv YnRhaW5pbmcgYQogICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKQEAgLTI0LDY5NSArMjMsODMyIEBACiAg KiBBdXRob3JzOgogICogICAgRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KICAqICAgIEV1 Z2VuaSBEb2Rvbm92IDxldWdlbmkuZG9kb25vdkBpbnRlbC5jb20+Ci0gKgogICovCiAKLSNpbmNs dWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jaW5jbHVkZSA8dW5pc3Rk Lmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxl cnIuaD4KLSNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2lu Y2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZGly ZW50Lmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVk ZSA8c3RyaW5nLmg+Ci0jaWZkZWYgSEFWRV9URVJNSU9TX0gKLSNpbmNsdWRlIDx0ZXJtaW9zLmg+ Ci0jZW5kaWYKLSNpbmNsdWRlICJpbnRlbF9pby5oIgotI2luY2x1ZGUgImluc3Rkb25lLmgiCi0j aW5jbHVkZSAiaW50ZWxfcmVnLmgiCi0jaW5jbHVkZSAiaW50ZWxfY2hpcHNldC5oIgotI2luY2x1 ZGUgImRybXRlc3QuaCIKLQotI2RlZmluZSAgRk9SQ0VXQUtFCSAgICAweEExOEMKLSNkZWZpbmUg IEZPUkNFV0FLRV9BQ0sJICAgIDB4MTMwMDkwCi0KLSNkZWZpbmUgU0FNUExFU19QRVJfU0VDICAg ICAgICAgICAgIDEwMDAwCi0jZGVmaW5lIFNBTVBMRVNfVE9fUEVSQ0VOVF9SQVRJTyAgICAoU0FN UExFU19QRVJfU0VDIC8gMTAwKQotCi0jZGVmaW5lIE1BWF9OVU1fVE9QX0JJVFMgICAgICAgICAg ICAxMDAKLQotI2RlZmluZSBIQVNfU1RBVFNfUkVHUyhkZXZpZCkJCUlTXzk2NShkZXZpZCkKLQot c3RydWN0IHRvcF9iaXQgewotCXN0cnVjdCBpbnN0ZG9uZV9iaXQgKmJpdDsKLQlpbnQgY291bnQ7 Ci19IHRvcF9iaXRzW01BWF9OVU1fVE9QX0JJVFNdOwotc3RydWN0IHRvcF9iaXQgKnRvcF9iaXRz X3NvcnRlZFtNQVhfTlVNX1RPUF9CSVRTXTsKLQotc3RhdGljIHVpbnQzMl90IGluc3Rkb25lLCBp bnN0ZG9uZTE7Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpiYXJzW10gPSB7Ci0JIiAiLAotCSLilo8i LAotCSLilo4iLAotCSLilo0iLAotCSLilowiLAotCSLilosiLAotCSLilooiLAotCSLilokiLAot CSLilogiCi19OworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5j bHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5o PgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVk ZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8bG9jYWxlLmg+CisKKyNp bmNsdWRlICJpZ3RfcGVyZi5oIgogCi1lbnVtIHN0YXRzX2NvdW50cyB7Ci0JSUFfVkVSVElDRVMs Ci0JSUFfUFJJTUlUSVZFUywKLQlWU19JTlZPQ0FUSU9OLAotCUdTX0lOVk9DQVRJT04sCi0JR1Nf UFJJTUlUSVZFUywKLQlDTF9JTlZPQ0FUSU9OLAotCUNMX1BSSU1JVElWRVMsCi0JUFNfSU5WT0NB VElPTiwKLQlQU19ERVBUSCwKLQlTVEFUU19DT1VOVAorc3RydWN0IHBtdV9wYWlyIHsKKwl1aW50 NjRfdCBjdXI7CisJdWludDY0X3QgcHJldjsKIH07CiAKLWNvbnN0IHVpbnQzMl90IHN0YXRzX3Jl Z3NbU1RBVFNfQ09VTlRdID0gewotCUlBX1ZFUlRJQ0VTX0NPVU5UX1FXLAotCUlBX1BSSU1JVElW RVNfQ09VTlRfUVcsCi0JVlNfSU5WT0NBVElPTl9DT1VOVF9RVywKLQlHU19JTlZPQ0FUSU9OX0NP VU5UX1FXLAotCUdTX1BSSU1JVElWRVNfQ09VTlRfUVcsCi0JQ0xfSU5WT0NBVElPTl9DT1VOVF9R VywKLQlDTF9QUklNSVRJVkVTX0NPVU5UX1FXLAotCVBTX0lOVk9DQVRJT05fQ09VTlRfUVcsCi0J UFNfREVQVEhfQ09VTlRfUVcsCitzdHJ1Y3QgcG11X2NvdW50ZXIgeworCWJvb2wgcHJlc2VudDsK Kwl1aW50NjRfdCBjb25maWc7CisJdW5zaWduZWQgaW50IGlkeDsKKwlzdHJ1Y3QgcG11X3BhaXIg dmFsOwogfTsKIAotY29uc3QgY2hhciAqc3RhdHNfcmVnX25hbWVzW1NUQVRTX0NPVU5UXSA9IHsK LQkidmVydCBmZXRjaCIsCi0JInByaW0gZmV0Y2giLAotCSJWUyBpbnZvY2F0aW9ucyIsCi0JIkdT IGludm9jYXRpb25zIiwKLQkiR1MgcHJpbXMiLAotCSJDTCBpbnZvY2F0aW9ucyIsCi0JIkNMIHBy aW1zIiwKLQkiUFMgaW52b2NhdGlvbnMiLAotCSJQUyBkZXB0aCBwYXNzIiwKK3N0cnVjdCBlbmdp bmUgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqZGlzcGxheV9uYW1lOworCisJ dW5zaWduZWQgaW50IGNsYXNzOworCXVuc2lnbmVkIGludCBpbnN0YW5jZTsKKworCXVuc2lnbmVk IGludCBudW1fY291bnRlcnM7CisKKwlzdHJ1Y3QgcG11X2NvdW50ZXIgYnVzeTsKKwlzdHJ1Y3Qg cG11X2NvdW50ZXIgd2FpdDsKKwlzdHJ1Y3QgcG11X2NvdW50ZXIgc2VtYTsKIH07CiAKLXVpbnQ2 NF90IHN0YXRzW1NUQVRTX0NPVU5UXTsKLXVpbnQ2NF90IGxhc3Rfc3RhdHNbU1RBVFNfQ09VTlRd Oworc3RydWN0IGVuZ2luZXMgeworCXVuc2lnbmVkIGludCBudW1fZW5naW5lczsKKwl1bnNpZ25l ZCBpbnQgbnVtX2NvdW50ZXJzOworCURJUiAqcm9vdDsKKwlpbnQgZmQ7CisJc3RydWN0IHBtdV9w YWlyIHRzOworCisJaW50IHJhcGxfZmQ7CisJZG91YmxlIHJhcGxfc2NhbGU7CisJY29uc3QgY2hh ciAqcmFwbF91bml0OworCisJaW50IGltY19mZDsKKwlkb3VibGUgaW1jX3JlYWRzX3NjYWxlOwor CWNvbnN0IGNoYXIgKmltY19yZWFkc191bml0OworCWRvdWJsZSBpbWNfd3JpdGVzX3NjYWxlOwor CWNvbnN0IGNoYXIgKmltY193cml0ZXNfdW5pdDsKKworCXN0cnVjdCBwbXVfY291bnRlciBmcmVx X3JlcTsKKwlzdHJ1Y3QgcG11X2NvdW50ZXIgZnJlcV9hY3Q7CisJc3RydWN0IHBtdV9jb3VudGVy IGlycTsKKwlzdHJ1Y3QgcG11X2NvdW50ZXIgcmM2OworCXN0cnVjdCBwbXVfY291bnRlciByYXBs OworCXN0cnVjdCBwbXVfY291bnRlciBpbWNfcmVhZHM7CisJc3RydWN0IHBtdV9jb3VudGVyIGlt Y193cml0ZXM7CisKKwlzdHJ1Y3QgZW5naW5lIGVuZ2luZTsKK307CiAKLXN0YXRpYyB1bnNpZ25l ZCBsb25nCi1nZXR0aW1lKHZvaWQpCitzdGF0aWMgdWludDY0X3QKK2dldF9wbXVfY29uZmlnKGlu dCBkaXJmZCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqY291bnRlcikKIHsKLSAgICBz dHJ1Y3QgdGltZXZhbCB0OwotICAgIGdldHRpbWVvZmRheSgmdCwgTlVMTCk7Ci0gICAgcmV0dXJu ICh0LnR2X3VzZWMgKyAodC50dl9zZWMgKiAxMDAwMDAwKSk7Ci19CisJY2hhciBidWZbMTI4XSwg KnA7CisJaW50IGZkLCByZXQ7CiAKLXN0YXRpYyBpbnQKLXRvcF9iaXRzX3NvcnQoY29uc3Qgdm9p ZCAqYSwgY29uc3Qgdm9pZCAqYikKLXsKLQlzdHJ1Y3QgdG9wX2JpdCAqIGNvbnN0ICpiaXRfYSA9 IGE7Ci0Jc3RydWN0IHRvcF9iaXQgKiBjb25zdCAqYml0X2IgPSBiOwotCWludCBhX2NvdW50ID0g KCpiaXRfYSktPmNvdW50OwotCWludCBiX2NvdW50ID0gKCpiaXRfYiktPmNvdW50OworCXJldCA9 IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcy0lcyIsIG5hbWUsIGNvdW50ZXIpOworCWlm IChyZXQgPCAwIHx8IHJldCA9PSBzaXplb2YoYnVmKSkKKwkJcmV0dXJuIC0xOwogCi0JaWYgKGFf Y291bnQgPCBiX2NvdW50KQotCQlyZXR1cm4gMTsKLQllbHNlIGlmIChhX2NvdW50ID09IGJfY291 bnQpCi0JCXJldHVybiAwOwotCWVsc2UKKwlmZCA9IG9wZW5hdChkaXJmZCwgYnVmLCBPX1JET05M WSk7CisJaWYgKGZkIDwgMCkKIAkJcmV0dXJuIC0xOwotfQogCi1zdGF0aWMgdm9pZAotdXBkYXRl X2lkbGVfYml0KHN0cnVjdCB0b3BfYml0ICp0b3BfYml0KQotewotCXVpbnQzMl90IHJlZ192YWw7 CisJcmV0ID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSk7CisJY2xvc2UoZmQpOworCWlmIChy ZXQgPD0gMCkKKwkJcmV0dXJuIC0xOwogCi0JaWYgKHRvcF9iaXQtPmJpdC0+cmVnID09IElOU1RE T05FXzEpCi0JCXJlZ192YWwgPSBpbnN0ZG9uZTE7Ci0JZWxzZQotCQlyZWdfdmFsID0gaW5zdGRv bmU7CisJcCA9IGluZGV4KGJ1ZiwgJzAnKTsKKwlpZiAoIXApCisJCXJldHVybiAtMTsKIAotCWlm ICgocmVnX3ZhbCAmIHRvcF9iaXQtPmJpdC0+Yml0KSA9PSAwKQotCQl0b3BfYml0LT5jb3VudCsr OworCXJldHVybiBzdHJ0b3VsKHAsIE5VTEwsIDApOwogfQogCi1zdGF0aWMgdm9pZAotcHJpbnRf Y2xvY2soY29uc3QgY2hhciAqbmFtZSwgaW50IGNsb2NrKSB7Ci0JaWYgKGNsb2NrID09IC0xKQot CQlwcmludGYoIiVzIGNsb2NrOiB1bmtub3duIiwgbmFtZSk7CisjZGVmaW5lIGVuZ2luZV9wdHIo ZW5naW5lcywgbikgKCZlbmdpbmVzLT5lbmdpbmUgKyAobikpCisKK3N0YXRpYyBjb25zdCBjaGFy ICpjbGFzc19kaXNwbGF5X25hbWUodW5zaWduZWQgaW50IGNsYXNzKQoreworCXN3aXRjaCAoY2xh c3MpIHsKKwljYXNlIEk5MTVfRU5HSU5FX0NMQVNTX1JFTkRFUjoKKwkJcmV0dXJuICJSZW5kZXIv M0QiOworCWNhc2UgSTkxNV9FTkdJTkVfQ0xBU1NfQ09QWToKKwkJcmV0dXJuICJCbGl0dGVyIjsK KwljYXNlIEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPOgorCQlyZXR1cm4gIlZpZGVvIjsKKwljYXNl IEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0U6CisJCXJldHVybiAiVmlkZW9FbmhhbmNl IjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gIlt1bmtub3duXSI7CisJfQorfQorCitzdGF0aWMgaW50 IGVuZ2luZV9jbXAoY29uc3Qgdm9pZCAqX19hLCBjb25zdCB2b2lkICpfX2IpCit7CisJY29uc3Qg c3RydWN0IGVuZ2luZSAqYSA9IChzdHJ1Y3QgZW5naW5lICopX19hOworCWNvbnN0IHN0cnVjdCBl bmdpbmUgKmIgPSAoc3RydWN0IGVuZ2luZSAqKV9fYjsKKworCWlmIChhLT5jbGFzcyAhPSBiLT5j bGFzcykKKwkJcmV0dXJuIGEtPmNsYXNzIC0gYi0+Y2xhc3M7CiAJZWxzZQotCQlwcmludGYoIiVz IGNsb2NrOiAlZCBNaHoiLCBuYW1lLCBjbG9jayk7CisJCXJldHVybiBhLT5pbnN0YW5jZSAtIGIt Pmluc3RhbmNlOwogfQogCi1zdGF0aWMgaW50Ci1wcmludF9jbG9ja19pbmZvKHN0cnVjdCBwY2lf ZGV2aWNlICpwY2lfZGV2KQorc3RhdGljIHN0cnVjdCBlbmdpbmVzICpkaXNjb3Zlcl9lbmdpbmVz KHZvaWQpCiB7Ci0JdWludDMyX3QgZGV2aWQgPSBwY2lfZGV2LT5kZXZpY2VfaWQ7Ci0JdWludDE2 X3QgZ2NmZ2M7CisJY29uc3QgY2hhciAqc3lzZnNfcm9vdCA9ICIvc3lzL2RldmljZXMvaTkxNS9l dmVudHMiOworCXN0cnVjdCBlbmdpbmVzICplbmdpbmVzOworCXN0cnVjdCBkaXJlbnQgKmRlbnQ7 CisJaW50IHJldCA9IDA7CisJRElSICpkOwogCi0JaWYgKElTX0dNNDUoZGV2aWQpKSB7Ci0JCWlu dCBjb3JlX2Nsb2NrID0gLTE7CisJZW5naW5lcyA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGVuZ2lu ZXMpKTsKKwlpZiAoIWVuZ2luZXMpCisJCXJldHVybiBOVUxMOwogCi0JCXBjaV9kZXZpY2VfY2Zn X3JlYWRfdTE2KHBjaV9kZXYsICZnY2ZnYywgSTkxNV9HQ0ZHQyk7CisJbWVtc2V0KGVuZ2luZXMs IDAsIHNpemVvZigqZW5naW5lcykpOwogCi0JCXN3aXRjaCAoZ2NmZ2MgJiAweGYpIHsKLQkJY2Fz ZSA4OgotCQkJY29yZV9jbG9jayA9IDI2NjsKLQkJCWJyZWFrOwotCQljYXNlIDk6Ci0JCQljb3Jl X2Nsb2NrID0gMzIwOwotCQkJYnJlYWs7Ci0JCWNhc2UgMTE6Ci0JCQljb3JlX2Nsb2NrID0gNDAw OwotCQkJYnJlYWs7Ci0JCWNhc2UgMTM6Ci0JCQljb3JlX2Nsb2NrID0gNTMzOwotCQkJYnJlYWs7 Ci0JCX0KLQkJcHJpbnRfY2xvY2soImNvcmUiLCBjb3JlX2Nsb2NrKTsKLQl9IGVsc2UgaWYgKElT Xzk2NShkZXZpZCkgJiYgSVNfTU9CSUxFKGRldmlkKSkgewotCQlpbnQgcmVuZGVyX2Nsb2NrID0g LTEsIHNhbXBsZXJfY2xvY2sgPSAtMTsKKwllbmdpbmVzLT5udW1fZW5naW5lcyA9IDA7CiAKLQkJ cGNpX2RldmljZV9jZmdfcmVhZF91MTYocGNpX2RldiwgJmdjZmdjLCBJOTE1X0dDRkdDKTsKKwlk ID0gb3BlbmRpcihzeXNmc19yb290KTsKKwlpZiAoIWQpCisJCXJldHVybiBOVUxMOwogCi0JCXN3 aXRjaCAoZ2NmZ2MgJiAweGYpIHsKLQkJY2FzZSAyOgotCQkJcmVuZGVyX2Nsb2NrID0gMjUwOyBz YW1wbGVyX2Nsb2NrID0gMjY3OwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJCXJlbmRlcl9jbG9j ayA9IDMyMDsgc2FtcGxlcl9jbG9jayA9IDMzMzsKLQkJCWJyZWFrOwotCQljYXNlIDQ6Ci0JCQly ZW5kZXJfY2xvY2sgPSA0MDA7IHNhbXBsZXJfY2xvY2sgPSA0NDQ7Ci0JCQlicmVhazsKLQkJY2Fz ZSA1OgotCQkJcmVuZGVyX2Nsb2NrID0gNTAwOyBzYW1wbGVyX2Nsb2NrID0gNTMzOworCXdoaWxl ICgoZGVudCA9IHJlYWRkaXIoZCkpICE9IE5VTEwpIHsKKwkJY29uc3QgY2hhciAqZW5kc3dpdGgg PSAiLWJ1c3kiOworCQljb25zdCB1bnNpZ25lZCBpbnQgZW5kbGVuID0gc3RybGVuKGVuZHN3aXRo KTsKKwkJc3RydWN0IGVuZ2luZSAqZW5naW5lID0KKwkJCQllbmdpbmVfcHRyKGVuZ2luZXMsIGVu Z2luZXMtPm51bV9lbmdpbmVzKTsKKwkJY2hhciBidWZbMjU2XTsKKworCQlpZiAoZGVudC0+ZF90 eXBlICE9IERUX1JFRykKKwkJCWNvbnRpbnVlOworCisJCWlmIChzdHJsZW4oZGVudC0+ZF9uYW1l KSA+PSBzaXplb2YoYnVmKSkgeworCQkJcmV0ID0gRU5BTUVUT09MT05HOwogCQkJYnJlYWs7CiAJ CX0KIAotCQlwcmludF9jbG9jaygicmVuZGVyIiwgcmVuZGVyX2Nsb2NrKTsKLQkJcHJpbnRmKCIg ICIpOwotCQlwcmludF9jbG9jaygic2FtcGxlciIsIHNhbXBsZXJfY2xvY2spOwotCX0gZWxzZSBp ZiAoSVNfOTQ1KGRldmlkKSAmJiBJU19NT0JJTEUoZGV2aWQpKSB7Ci0JCWludCByZW5kZXJfY2xv Y2sgPSAtMSwgZGlzcGxheV9jbG9jayA9IC0xOworCQlzdHJjcHkoYnVmLCBkZW50LT5kX25hbWUp OwogCi0JCXBjaV9kZXZpY2VfY2ZnX3JlYWRfdTE2KHBjaV9kZXYsICZnY2ZnYywgSTkxNV9HQ0ZH Qyk7CisJCS8qIHh4eE4tYnVzeSAqLworCQlpZiAoc3RybGVuKGJ1ZikgPCAoZW5kbGVuICsgNCkp CisJCQljb250aW51ZTsKKwkJaWYgKHN0cmNtcCgmYnVmW3N0cmxlbihidWYpIC0gZW5kbGVuXSwg ZW5kc3dpdGgpKQorCQkJY29udGludWU7CiAKLQkJc3dpdGNoIChnY2ZnYyAmIDB4NykgewotCQlj YXNlIDA6Ci0JCQlyZW5kZXJfY2xvY2sgPSAxNjY7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJ cmVuZGVyX2Nsb2NrID0gMjAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJCXJlbmRlcl9jbG9j ayA9IDI1MDsKLQkJCWJyZWFrOwotCQljYXNlIDU6Ci0JCQlyZW5kZXJfY2xvY2sgPSA0MDA7CisJ CW1lbXNldChlbmdpbmUsIDAsIHNpemVvZigqZW5naW5lKSk7CisKKwkJYnVmW3N0cmxlbihidWYp IC0gZW5kbGVuXSA9IDA7CisJCWVuZ2luZS0+bmFtZSA9IHN0cmR1cChidWYpOworCQlpZiAoIWVu Z2luZS0+bmFtZSkgeworCQkJcmV0ID0gZXJybm87CiAJCQlicmVhazsKIAkJfQogCi0JCXN3aXRj aCAoZ2NmZ2MgJiAweDcwKSB7Ci0JCWNhc2UgMDoKLQkJCWRpc3BsYXlfY2xvY2sgPSAyMDA7Ci0J CQlicmVhazsKLQkJY2FzZSA0OgotCQkJZGlzcGxheV9jbG9jayA9IDMyMDsKKwkJZW5naW5lLT5i dXN5LmNvbmZpZyA9IGdldF9wbXVfY29uZmlnKGRpcmZkKGQpLCBlbmdpbmUtPm5hbWUsCisJCQkJ CQkgICAgICJidXN5Iik7CisJCWlmIChlbmdpbmUtPmJ1c3kuY29uZmlnID09IC0xKSB7CisJCQly ZXQgPSBFTk9FTlQ7CiAJCQlicmVhazsKIAkJfQotCQlpZiAoZ2NmZ2MgJiAoMSA8PCA3KSkKLQkJ ICAgIGRpc3BsYXlfY2xvY2sgPSAxMzM7CiAKLQkJcHJpbnRfY2xvY2soInJlbmRlciIsIHJlbmRl cl9jbG9jayk7Ci0JCXByaW50ZigiICAiKTsKLQkJcHJpbnRfY2xvY2soImRpc3BsYXkiLCBkaXNw bGF5X2Nsb2NrKTsKLQl9IGVsc2UgaWYgKElTXzkxNShkZXZpZCkgJiYgSVNfTU9CSUxFKGRldmlk KSkgewotCQlpbnQgcmVuZGVyX2Nsb2NrID0gLTEsIGRpc3BsYXlfY2xvY2sgPSAtMTsKKwkJZW5n aW5lLT5jbGFzcyA9IChlbmdpbmUtPmJ1c3kuY29uZmlnICYKKwkJCQkgKF9fSTkxNV9QTVVfT1RI RVIoMCkgLSAxKSkgPj4KKwkJCQlJOTE1X1BNVV9DTEFTU19TSElGVDsKIAotCQlwY2lfZGV2aWNl X2NmZ19yZWFkX3UxNihwY2lfZGV2LCAmZ2NmZ2MsIEk5MTVfR0NGR0MpOworCQllbmdpbmUtPmlu c3RhbmNlID0gKGVuZ2luZS0+YnVzeS5jb25maWcgPj4KKwkJCQkgICAgSTkxNV9QTVVfU0FNUExF X0JJVFMpICYKKwkJCQkgICAgKCgxIDw8IEk5MTVfUE1VX1NBTVBMRV9JTlNUQU5DRV9CSVRTKSAt IDEpOwogCi0JCXN3aXRjaCAoZ2NmZ2MgJiAweDcpIHsKLQkJY2FzZSAwOgotCQkJcmVuZGVyX2Ns b2NrID0gMTYwOwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCXJlbmRlcl9jbG9jayA9IDE5MDsK LQkJCWJyZWFrOwotCQljYXNlIDQ6Ci0JCQlyZW5kZXJfY2xvY2sgPSAzMzM7CisJCXJldCA9IHNu cHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcy8ldSIsCisJCQkgICAgICAgY2xhc3NfZGlzcGxh eV9uYW1lKGVuZ2luZS0+Y2xhc3MpLAorCQkJICAgICAgIGVuZ2luZS0+aW5zdGFuY2UpOworCQlp ZiAocmV0IDwgMCB8fCByZXQgPT0gc2l6ZW9mKGJ1ZikpIHsKKwkJCXJldCA9IEVOT0JVRlM7CiAJ CQlicmVhazsKIAkJfQotCQlpZiAoZ2NmZ2MgJiAoMSA8PCAxMykpCi0JCSAgICByZW5kZXJfY2xv Y2sgPSAxMzM7CisJCXJldCA9IDA7CiAKLQkJc3dpdGNoIChnY2ZnYyAmIDB4NzApIHsKLQkJY2Fz ZSAwOgotCQkJZGlzcGxheV9jbG9jayA9IDE5MDsKKwkJZW5naW5lLT5kaXNwbGF5X25hbWUgPSBz dHJkdXAoYnVmKTsKKwkJaWYgKCFlbmdpbmUtPmRpc3BsYXlfbmFtZSkgeworCQkJcmV0ID0gZXJy bm87CiAJCQlicmVhazsKLQkJY2FzZSA0OgotCQkJZGlzcGxheV9jbG9jayA9IDMzMzsKKwkJfQor CisJCWVuZ2luZXMtPm51bV9lbmdpbmVzKys7CisJCWVuZ2luZXMgPSByZWFsbG9jKGVuZ2luZXMs IHNpemVvZihzdHJ1Y3QgZW5naW5lcykgKworCQkJCSAgZW5naW5lcy0+bnVtX2VuZ2luZXMgKiBz aXplb2Yoc3RydWN0IGVuZ2luZSkpOworCQlpZiAoIWVuZ2luZXMpIHsKKwkJCXJldCA9IGVycm5v OwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKGdjZmdjICYgKDEgPDwgNykpCi0JCSAgICBkaXNwbGF5 X2Nsb2NrID0gMTMzOworCX0KKworCWlmIChyZXQpIHsKKwkJZnJlZShlbmdpbmVzKTsKKwkJZXJy bm8gPSByZXQ7CiAKLQkJcHJpbnRfY2xvY2soInJlbmRlciIsIHJlbmRlcl9jbG9jayk7Ci0JCXBy aW50ZigiICAiKTsKLQkJcHJpbnRfY2xvY2soImRpc3BsYXkiLCBkaXNwbGF5X2Nsb2NrKTsKKwkJ cmV0dXJuIE5VTEw7CiAJfQogCisJcXNvcnQoZW5naW5lX3B0cihlbmdpbmVzLCAwKSwgZW5naW5l cy0+bnVtX2VuZ2luZXMsCisJICAgICAgc2l6ZW9mKHN0cnVjdCBlbmdpbmUpLCBlbmdpbmVfY21w KTsKKworCWVuZ2luZXMtPnJvb3QgPSBkOwogCi0JcHJpbnRmKCJcbiIpOwotCXJldHVybiAtMTsK KwlyZXR1cm4gZW5naW5lczsKIH0KIAotI2RlZmluZSBTVEFUU19MRU4gKDIwKQotI2RlZmluZSBQ RVJDRU5UQUdFX0JBUl9FTkQJKDc5IC0gU1RBVFNfTEVOKQorc3RhdGljIGludAorZmlsZW5hbWVf dG9fYnVmKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBidWZz aXplKQoreworCWludCBmZCwgZXJyOworCXNzaXplX3QgcmV0OwogCi1zdGF0aWMgdm9pZAotcHJp bnRfcGVyY2VudGFnZV9iYXIoZmxvYXQgcGVyY2VudCwgaW50IGN1cl9saW5lX2xlbikKKwlmZCA9 IG9wZW4oZmlsZW5hbWUsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gLTE7CisK KwlyZXQgPSByZWFkKGZkLCBidWYsIGJ1ZnNpemUgLSAxKTsKKwllcnIgPSBlcnJubzsKKwljbG9z ZShmZCk7CisJaWYgKHJldCA8IDEpIHsKKwkJZXJybm8gPSByZXQgPCAwID8gZXJyIDogRU5PTVNH OworCisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAocmV0ID4gMSAmJiBidWZbcmV0IC0gMV0gPT0g J1xuJykKKwkJYnVmW3JldCAtIDFdID0gJ1wwJzsKKwllbHNlCisJCWJ1ZltyZXRdID0gJ1wwJzsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgdWludDY0X3QgZmlsZW5hbWVfdG9fdTY0KGNvbnN0 IGNoYXIgKmZpbGVuYW1lLCBpbnQgYmFzZSkKIHsKLQlpbnQgYmFyX2F2YWlsX2xlbiA9IChQRVJD RU5UQUdFX0JBUl9FTkQgLSBjdXJfbGluZV9sZW4gLSAxKSAqIDg7Ci0JaW50IGJhcl9sZW4gPSBi YXJfYXZhaWxfbGVuICogKHBlcmNlbnQgKyAuNSkgLyAxMDAuMDsKLQlpbnQgaTsKKwljaGFyIGJ1 Zls2NF0sICpiOwogCi0JZm9yIChpID0gYmFyX2xlbjsgaSA+PSA4OyBpIC09IDgpIHsKLQkJcHJp bnRmKCIlcyIsIGJhcnNbOF0pOwotCQljdXJfbGluZV9sZW4rKzsKKwlpZiAoZmlsZW5hbWVfdG9f YnVmKGZpbGVuYW1lLCBidWYsIHNpemVvZihidWYpKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAq IEhhbmRsZSBib3RoIHNpbmdsZSBpbnRlZ2VyIGFuZCBrZXk9dmFsdWUgZm9ybWF0cyBieSBza2lw cGluZworCSAqIGxlYWRpbmcgbm9uLWRpZ2l0cy4KKwkgKi8KKwliID0gYnVmOworCXdoaWxlICgq YiAmJiAhaXNkaWdpdCgqYikpCisJCWIrKzsKKworCXJldHVybiBzdHJ0b3VsbChiLCBOVUxMLCBi YXNlKTsKK30KKworc3RhdGljIGRvdWJsZSBmaWxlbmFtZV90b19kb3VibGUoY29uc3QgY2hhciAq ZmlsZW5hbWUpCit7CisJY2hhciAqb2xkbG9jYWxlOworCWNoYXIgYnVmWzgwXTsKKwlkb3VibGUg djsKKworCWlmIChmaWxlbmFtZV90b19idWYoZmlsZW5hbWUsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKQor CQlyZXR1cm4gMDsKKworCW9sZGxvY2FsZSA9IHNldGxvY2FsZShMQ19BTEwsICJDIik7CisJdiA9 IHN0cnRvZChidWYsIE5VTEwpOworCXNldGxvY2FsZShMQ19BTEwsIG9sZGxvY2FsZSk7CisKKwly ZXR1cm4gdjsKK30KKworI2RlZmluZSBSQVBMX1JPT1QgIi9zeXMvZGV2aWNlcy9wb3dlci8iCisj ZGVmaW5lIFJBUExfRVZFTlQgIi9zeXMvZGV2aWNlcy9wb3dlci9ldmVudHMvIgorCitzdGF0aWMg dWludDY0X3QgcmFwbF90eXBlX2lkKHZvaWQpCit7CisJcmV0dXJuIGZpbGVuYW1lX3RvX3U2NChS QVBMX1JPT1QgInR5cGUiLCAxMCk7Cit9CisKK3N0YXRpYyB1aW50NjRfdCByYXBsX2dwdV9wb3dl cih2b2lkKQoreworCXJldHVybiBmaWxlbmFtZV90b191NjQoUkFQTF9FVkVOVCAiZW5lcmd5LWdw dSIsIDApOworfQorCitzdGF0aWMgZG91YmxlIHJhcGxfZ3B1X3Bvd2VyX3NjYWxlKHZvaWQpCit7 CisJcmV0dXJuIGZpbGVuYW1lX3RvX2RvdWJsZShSQVBMX0VWRU5UICJlbmVyZ3ktZ3B1LnNjYWxl Iik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpyYXBsX2dwdV9wb3dlcl91bml0KHZvaWQpCit7 CisJY2hhciBidWZbMzJdOworCisJaWYgKGZpbGVuYW1lX3RvX2J1ZihSQVBMX0VWRU5UICJlbmVy Z3ktZ3B1LnVuaXQiLAorCQkJICAgIGJ1Ziwgc2l6ZW9mKGJ1ZikpID09IDApCisJCWlmICghc3Ry Y21wKGJ1ZiwgIkpvdWxlcyIpKQorCQkJcmV0dXJuIHN0cmR1cCgiV2F0dHMiKTsKKwkJZWxzZQor CQkJcmV0dXJuIHN0cmR1cChidWYpOworCWVsc2UKKwkJcmV0dXJuIE5VTEw7Cit9CisKKyNkZWZp bmUgSU1DX1JPT1QgIi9zeXMvZGV2aWNlcy91bmNvcmVfaW1jLyIKKyNkZWZpbmUgSU1DX0VWRU5U ICIvc3lzL2RldmljZXMvdW5jb3JlX2ltYy9ldmVudHMvIgorCitzdGF0aWMgdWludDY0X3QgaW1j X3R5cGVfaWQodm9pZCkKK3sKKwlyZXR1cm4gZmlsZW5hbWVfdG9fdTY0KElNQ19ST09UICJ0eXBl IiwgMTApOworfQorCitzdGF0aWMgdWludDY0X3QgaW1jX2RhdGFfcmVhZHModm9pZCkKK3sKKwly ZXR1cm4gZmlsZW5hbWVfdG9fdTY0KElNQ19FVkVOVCAiZGF0YV9yZWFkcyIsIDApOworfQorCitz dGF0aWMgZG91YmxlIGltY19kYXRhX3JlYWRzX3NjYWxlKHZvaWQpCit7CisJcmV0dXJuIGZpbGVu YW1lX3RvX2RvdWJsZShJTUNfRVZFTlQgImRhdGFfcmVhZHMuc2NhbGUiKTsKK30KKworc3RhdGlj IGNvbnN0IGNoYXIgKmltY19kYXRhX3JlYWRzX3VuaXQodm9pZCkKK3sKKwljaGFyIGJ1ZlszMl07 CisKKwlpZiAoZmlsZW5hbWVfdG9fYnVmKElNQ19FVkVOVCAiZGF0YV9yZWFkcy51bml0IiwgYnVm LCBzaXplb2YoYnVmKSkgPT0gMCkKKwkJcmV0dXJuIHN0cmR1cChidWYpOworCWVsc2UKKwkJcmV0 dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB1aW50NjRfdCBpbWNfZGF0YV93cml0ZXModm9pZCkKK3sK KwlyZXR1cm4gZmlsZW5hbWVfdG9fdTY0KElNQ19FVkVOVCAiZGF0YV93cml0ZXMiLCAwKTsKK30K Kworc3RhdGljIGRvdWJsZSBpbWNfZGF0YV93cml0ZXNfc2NhbGUodm9pZCkKK3sKKwlyZXR1cm4g ZmlsZW5hbWVfdG9fZG91YmxlKElNQ19FVkVOVCAiZGF0YV93cml0ZXMuc2NhbGUiKTsKK30KKwor c3RhdGljIGNvbnN0IGNoYXIgKmltY19kYXRhX3dyaXRlc191bml0KHZvaWQpCit7CisJY2hhciBi dWZbMzJdOworCisJaWYgKGZpbGVuYW1lX3RvX2J1ZihJTUNfRVZFTlQgImRhdGFfd3JpdGVzLnVu aXQiLAorCQkJICAgIGJ1Ziwgc2l6ZW9mKGJ1ZikpID09IDApCisJCXJldHVybiBzdHJkdXAoYnVm KTsKKwllbHNlCisJCXJldHVybiBOVUxMOworfQorCisjZGVmaW5lIF9vcGVuX3BtdShjbnQsIHBt dSwgZmQpIFwKKyh7IFwKKwlpbnQgZmRfXzsgXAorXAorCWZkX18gPSBwZXJmX2k5MTVfb3Blbl9n cm91cCgocG11KS0+Y29uZmlnLCAoZmQpKTsgXAorCWlmIChmZF9fID49IDApIHsgXAorCQlpZiAo KGZkKSA9PSAtMSkgXAorCQkJKGZkKSA9IGZkX187IFwKKwkJKHBtdSktPnByZXNlbnQgPSB0cnVl OyBcCisJCShwbXUpLT5pZHggPSAoY250KSsrOyBcCisJfSBcCitcCisJZmRfXzsgXAorfSkKKwor I2RlZmluZSBfb3Blbl9pbWMoY250LCBwbXUsIGZkKSBcCisoeyBcCisJaW50IGZkX187IFwKK1wK KwlmZF9fID0gaWd0X3BlcmZfb3Blbl9ncm91cChpbWNfdHlwZV9pZCgpLCAocG11KS0+Y29uZmln LCAoZmQpKTsgXAorCWlmIChmZF9fID49IDApIHsgXAorCQlpZiAoKGZkKSA9PSAtMSkgXAorCQkJ KGZkKSA9IGZkX187IFwKKwkJKHBtdSktPnByZXNlbnQgPSB0cnVlOyBcCisJCShwbXUpLT5pZHgg PSAoY250KSsrOyBcCisJfSBcCitcCisJZmRfXzsgXAorfSkKKworc3RhdGljIGludCBwbXVfaW5p dChzdHJ1Y3QgZW5naW5lcyAqZW5naW5lcykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgZmQ7 CisKKwllbmdpbmVzLT5mZCA9IC0xOworCWVuZ2luZXMtPm51bV9jb3VudGVycyA9IDA7CisKKwll bmdpbmVzLT5pcnEuY29uZmlnID0gSTkxNV9QTVVfSU5URVJSVVBUUzsKKwlmZCA9IF9vcGVuX3Bt dShlbmdpbmVzLT5udW1fY291bnRlcnMsICZlbmdpbmVzLT5pcnEsIGVuZ2luZXMtPmZkKTsKKwlp ZiAoZmQgPCAwKQorCQlyZXR1cm4gLTE7CisKKwllbmdpbmVzLT5mcmVxX3JlcS5jb25maWcgPSBJ OTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZOworCV9vcGVuX3BtdShlbmdpbmVzLT5udW1fY291 bnRlcnMsICZlbmdpbmVzLT5mcmVxX3JlcSwgZW5naW5lcy0+ZmQpOworCisJZW5naW5lcy0+ZnJl cV9hY3QuY29uZmlnID0gSTkxNV9QTVVfQUNUVUFMX0ZSRVFVRU5DWTsKKwlfb3Blbl9wbXUoZW5n aW5lcy0+bnVtX2NvdW50ZXJzLCAmZW5naW5lcy0+ZnJlcV9hY3QsIGVuZ2luZXMtPmZkKTsKKwor CWVuZ2luZXMtPnJjNi5jb25maWcgPSBJOTE1X1BNVV9SQzZfUkVTSURFTkNZOworCV9vcGVuX3Bt dShlbmdpbmVzLT5udW1fY291bnRlcnMsICZlbmdpbmVzLT5yYzYsIGVuZ2luZXMtPmZkKTsKKwor CWZvciAoaSA9IDA7IGkgPCBlbmdpbmVzLT5udW1fZW5naW5lczsgaSsrKSB7CisJCXN0cnVjdCBl bmdpbmUgKmVuZ2luZSA9IGVuZ2luZV9wdHIoZW5naW5lcywgaSk7CisJCXN0cnVjdCB7CisJCQlz dHJ1Y3QgcG11X2NvdW50ZXIgKnBtdTsKKwkJCWNvbnN0IGNoYXIgKmNvdW50ZXI7CisJCX0gKmNu dCwgY291bnRlcnNbXSA9IHsKKwkJCXsgLnBtdSA9ICZlbmdpbmUtPmJ1c3ksIC5jb3VudGVyID0g ImJ1c3kiIH0sCisJCQl7IC5wbXUgPSAmZW5naW5lLT53YWl0LCAuY291bnRlciA9ICJ3YWl0IiB9 LAorCQkJeyAucG11ID0gJmVuZ2luZS0+c2VtYSwgLmNvdW50ZXIgPSAic2VtYSIgfSwKKwkJCXsg LnBtdSA9IE5VTEwsIC5jb3VudGVyID0gTlVMTCB9LAorCQl9OworCisJCWZvciAoY250ID0gY291 bnRlcnM7IGNudC0+cG11OyBjbnQrKykgeworCQkJaWYgKCFjbnQtPnBtdS0+Y29uZmlnKQorCQkJ CWNudC0+cG11LT5jb25maWcgPQorCQkJCQlnZXRfcG11X2NvbmZpZyhkaXJmZChlbmdpbmVzLT5y b290KSwKKwkJCQkJCSAgICAgICBlbmdpbmUtPm5hbWUsCisJCQkJCQkgICAgICAgY250LT5jb3Vu dGVyKTsKKwkJCWZkID0gX29wZW5fcG11KGVuZ2luZXMtPm51bV9jb3VudGVycywgY250LT5wbXUs CisJCQkJICAgICAgIGVuZ2luZXMtPmZkKTsKKwkJCWlmIChmZCA+PSAwKQorCQkJCWVuZ2luZS0+ bnVtX2NvdW50ZXJzKys7CisJCX0KIAl9Ci0JaWYgKGkpIHsKLQkJcHJpbnRmKCIlcyIsIGJhcnNb aV0pOwotCQljdXJfbGluZV9sZW4rKzsKKworCWVuZ2luZXMtPnJhcGxfZmQgPSAtMTsKKwlpZiAo cmFwbF90eXBlX2lkKCkpIHsKKwkJZW5naW5lcy0+cmFwbF9zY2FsZSA9IHJhcGxfZ3B1X3Bvd2Vy X3NjYWxlKCk7CisJCWVuZ2luZXMtPnJhcGxfdW5pdCA9IHJhcGxfZ3B1X3Bvd2VyX3VuaXQoKTsK KwkJaWYgKCFlbmdpbmVzLT5yYXBsX3VuaXQpCisJCQlyZXR1cm4gLTE7CisKKwkJZW5naW5lcy0+ cmFwbC5jb25maWcgPSByYXBsX2dwdV9wb3dlcigpOworCQlpZiAoIWVuZ2luZXMtPnJhcGwuY29u ZmlnKQorCQkJcmV0dXJuIC0xOworCisJCWVuZ2luZXMtPnJhcGxfZmQgPSBpZ3RfcGVyZl9vcGVu KHJhcGxfdHlwZV9pZCgpLAorCQkJCQkJIGVuZ2luZXMtPnJhcGwuY29uZmlnKTsKKwkJaWYgKGVu Z2luZXMtPnJhcGxfZmQgPCAwKQorCQkJcmV0dXJuIC0xOworCisJCWVuZ2luZXMtPnJhcGwucHJl c2VudCA9IHRydWU7CiAJfQogCi0JLyogTkI6IFdlIGNhbid0IHVzZSBhIGZpZWxkIHdpZHRoIHdp dGggdXRmOCBzbyB3ZSBtYW51YWxseQotCSogZ3VhcmFudGVlIGEgZmllbGQgd2l0aCBvZiA0NSBj aGFycyBmb3IgYW55IGJhci4gKi8KLQlwcmludGYoIiUqcyIsIFBFUkNFTlRBR0VfQkFSX0VORCAt IGN1cl9saW5lX2xlbiwgIiIpOwotfQorCWVuZ2luZXMtPmltY19mZCA9IC0xOworCWlmIChpbWNf dHlwZV9pZCgpKSB7CisJCXVuc2lnbmVkIGludCBudW0gPSAwOwogCi1zdHJ1Y3QgcmluZyB7Ci0J Y29uc3QgY2hhciAqbmFtZTsKLQl1aW50MzJfdCBtbWlvOwotCWludCBoZWFkLCB0YWlsLCBzaXpl OwotCXVpbnQ2NF90IGZ1bGw7Ci0JaW50IGlkbGU7Ci19OworCQllbmdpbmVzLT5pbWNfcmVhZHNf c2NhbGUgPSBpbWNfZGF0YV9yZWFkc19zY2FsZSgpOworCQllbmdpbmVzLT5pbWNfd3JpdGVzX3Nj YWxlID0gaW1jX2RhdGFfd3JpdGVzX3NjYWxlKCk7CisKKwkJZW5naW5lcy0+aW1jX3JlYWRzX3Vu aXQgPSBpbWNfZGF0YV9yZWFkc191bml0KCk7CisJCWlmICghZW5naW5lcy0+aW1jX3JlYWRzX3Vu aXQpCisJCQlyZXR1cm4gLTE7CisKKwkJZW5naW5lcy0+aW1jX3dyaXRlc191bml0ID0gaW1jX2Rh dGFfd3JpdGVzX3VuaXQoKTsKKwkJaWYgKCFlbmdpbmVzLT5pbWNfd3JpdGVzX3VuaXQpCisJCQly ZXR1cm4gLTE7CisKKwkJZW5naW5lcy0+aW1jX3JlYWRzLmNvbmZpZyA9IGltY19kYXRhX3JlYWRz KCk7CisJCWlmICghZW5naW5lcy0+aW1jX3JlYWRzLmNvbmZpZykKKwkJCXJldHVybiAtMTsKKwor CQllbmdpbmVzLT5pbWNfd3JpdGVzLmNvbmZpZyA9IGltY19kYXRhX3dyaXRlcygpOworCQlpZiAo IWVuZ2luZXMtPmltY193cml0ZXMuY29uZmlnKQorCQkJcmV0dXJuIC0xOworCisJCWZkID0gX29w ZW5faW1jKG51bSwgJmVuZ2luZXMtPmltY19yZWFkcywgZW5naW5lcy0+aW1jX2ZkKTsKKwkJaWYg KGZkIDwgMCkKKwkJCXJldHVybiAtMTsKKwkJZmQgPSBfb3Blbl9pbWMobnVtLCAmZW5naW5lcy0+ aW1jX3dyaXRlcywgZW5naW5lcy0+aW1jX2ZkKTsKKwkJaWYgKGZkIDwgMCkKKwkJCXJldHVybiAt MTsKKworCQllbmdpbmVzLT5pbWNfcmVhZHMucHJlc2VudCA9IHRydWU7CisJCWVuZ2luZXMtPmlt Y193cml0ZXMucHJlc2VudCA9IHRydWU7CisJfQorCisJcmV0dXJuIDA7Cit9CiAKLXN0YXRpYyB1 aW50MzJfdCByaW5nX3JlYWQoc3RydWN0IHJpbmcgKnJpbmcsIHVpbnQzMl90IHJlZykKK3N0YXRp YyB1aW50NjRfdCBwbXVfcmVhZF9tdWx0aShpbnQgZmQsIHVuc2lnbmVkIGludCBudW0sIHVpbnQ2 NF90ICp2YWwpCiB7Ci0JcmV0dXJuIElOUkVHKHJpbmctPm1taW8gKyByZWcpOworCXVpbnQ2NF90 IGJ1ZlsyICsgbnVtXTsKKwl1bnNpZ25lZCBpbnQgaTsKKwlzc2l6ZV90IGxlbjsKKworCW1lbXNl dChidWYsIDAsIHNpemVvZihidWYpKTsKKworCWxlbiA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1 ZikpOworCWFzc2VydChsZW4gPT0gc2l6ZW9mKGJ1ZikpOworCisJZm9yIChpID0gMDsgaSA8IG51 bTsgaSsrKQorCQl2YWxbaV0gPSBidWZbMiArIGldOworCisJcmV0dXJuIGJ1ZlsxXTsKIH0KIAot c3RhdGljIHZvaWQgcmluZ19pbml0KHN0cnVjdCByaW5nICpyaW5nKQorc3RhdGljIGRvdWJsZSBf X3BtdV9jYWxjKHN0cnVjdCBwbXVfcGFpciAqcCwgZG91YmxlIGQsIGRvdWJsZSB0LCBkb3VibGUg cykKIHsKLQlyaW5nLT5zaXplID0gKCgocmluZ19yZWFkKHJpbmcsIFJJTkdfTEVOKSAmIFJJTkdf TlJfUEFHRVMpID4+IDEyKSArIDEpICogNDA5NjsKKwlkb3VibGUgdjsKKworCXYgPSBwLT5jdXIg LSBwLT5wcmV2OworCXYgLz0gZDsKKwl2IC89IHQ7CisJdiAqPSBzOworCisJaWYgKHMgPT0gMTAw LjAgJiYgdiA+IDEwMC4wKQorCQl2ID0gMTAwLjA7CisKKwlyZXR1cm4gdjsKIH0KIAotc3RhdGlj IHZvaWQgcmluZ19yZXNldChzdHJ1Y3QgcmluZyAqcmluZykKK3N0YXRpYyB2b2lkIGZpbGxfc3Ry KGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGJ1ZnN6LCBjaGFyIGMsIHVuc2lnbmVkIGludCBudW0p CiB7Ci0JcmluZy0+aWRsZSA9IHJpbmctPmZ1bGwgPSAwOworCXVuc2lnbmVkIGludCBpOworCisJ Zm9yIChpID0gMDsgaSA8IG51bSAmJiBpIDwgKGJ1ZnN6IC0gMSk7IGkrKykKKwkJKmJ1ZisrID0g YzsKKworCSpidWYgPSAwOwogfQogCi1zdGF0aWMgdm9pZCByaW5nX3NhbXBsZShzdHJ1Y3Qgcmlu ZyAqcmluZykKK3N0YXRpYyB2b2lkIHBtdV9jYWxjKHN0cnVjdCBwbXVfY291bnRlciAqY250LAor CQkgICAgIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGJ1ZnN6LAorCQkgICAgIHVuc2lnbmVkIGlu dCB3aWR0aCwgdW5zaWduZWQgd2lkdGhfZGVjLAorCQkgICAgIGRvdWJsZSBkLCBkb3VibGUgdCwg ZG91YmxlIHMpCiB7Ci0JaW50IGZ1bGw7CisJZG91YmxlIHZhbDsKKwlpbnQgbGVuOworCisJYXNz ZXJ0KGJ1ZnN6ID49ICh3aWR0aCArIHdpZHRoX2RlYyArIDEpKTsKKworCWlmICghY250LT5wcmVz ZW50KSB7CisJCWZpbGxfc3RyKGJ1ZiwgYnVmc3osICctJywgd2lkdGggKyB3aWR0aF9kZWMpOwor CQlyZXR1cm47CisJfQogCi0JaWYgKCFyaW5nLT5zaXplKQorCXZhbCA9IF9fcG11X2NhbGMoJmNu dC0+dmFsLCBkLCB0LCBzKTsKKworCWxlbiA9IHNucHJpbnRmKGJ1ZiwgYnVmc3osICIlKi4qZiIs IHdpZHRoICsgd2lkdGhfZGVjLCB3aWR0aF9kZWMsIHZhbCk7CisJaWYgKGxlbiA8IDAgfHwgbGVu ID09IGJ1ZnN6KSB7CisJCWZpbGxfc3RyKGJ1ZiwgYnVmc3osICdYJywgd2lkdGggKyB3aWR0aF9k ZWMpOwogCQlyZXR1cm47CisJfQorfQorCitzdGF0aWMgdWludDY0X3QgX19wbXVfcmVhZF9zaW5n bGUoaW50IGZkLCB1aW50NjRfdCAqdHMpCit7CisJdWludDY0X3QgZGF0YVsyXSA9IHsgfTsKKwlz c2l6ZV90IGxlbjsKIAotCXJpbmctPmhlYWQgPSByaW5nX3JlYWQocmluZywgUklOR19IRUFEKSAm IEhFQURfQUREUjsKLQlyaW5nLT50YWlsID0gcmluZ19yZWFkKHJpbmcsIFJJTkdfVEFJTCkgJiBU QUlMX0FERFI7CisJbGVuID0gcmVhZChmZCwgZGF0YSwgc2l6ZW9mKGRhdGEpKTsKKwlhc3NlcnQo bGVuID09IHNpemVvZihkYXRhKSk7CiAKLQlpZiAocmluZy0+dGFpbCA9PSByaW5nLT5oZWFkKQot CQlyaW5nLT5pZGxlKys7CisJaWYgKHRzKQorCQkqdHMgPSBkYXRhWzFdOwogCi0JZnVsbCA9IHJp bmctPnRhaWwgLSByaW5nLT5oZWFkOwotCWlmIChmdWxsIDwgMCkKLQkJZnVsbCArPSByaW5nLT5z aXplOwotCXJpbmctPmZ1bGwgKz0gZnVsbDsKKwlyZXR1cm4gZGF0YVswXTsKIH0KIAotc3RhdGlj IHZvaWQgcmluZ19wcmludF9oZWFkZXIoRklMRSAqb3V0LCBzdHJ1Y3QgcmluZyAqcmluZykKK3N0 YXRpYyB1aW50NjRfdCBwbXVfcmVhZF9zaW5nbGUoaW50IGZkKQogewotICAgIGZwcmludGYob3V0 LCAiJS42cyUlXHRvcHNcdCIsCi0gICAgICAgICAgICByaW5nLT5uYW1lCi0gICAgICAgICAgKTsK KwlyZXR1cm4gX19wbXVfcmVhZF9zaW5nbGUoZmQsIE5VTEwpOwogfQogCi1zdGF0aWMgdm9pZCBy aW5nX3ByaW50KHN0cnVjdCByaW5nICpyaW5nLCB1bnNpZ25lZCBsb25nIHNhbXBsZXNfcGVyX3Nl YykKK3N0YXRpYyB2b2lkIF9fdXBkYXRlX3NhbXBsZShzdHJ1Y3QgcG11X2NvdW50ZXIgKmNvdW50 ZXIsIHVpbnQ2NF90IHZhbCkKIHsKLQlpbnQgcGVyY2VudF9idXN5LCBsZW47CisJY291bnRlci0+ dmFsLnByZXYgPSBjb3VudGVyLT52YWwuY3VyOworCWNvdW50ZXItPnZhbC5jdXIgPSB2YWw7Cit9 CiAKLQlpZiAoIXJpbmctPnNpemUpCi0JCXJldHVybjsKK3N0YXRpYyB2b2lkIHVwZGF0ZV9zYW1w bGUoc3RydWN0IHBtdV9jb3VudGVyICpjb3VudGVyLCB1aW50NjRfdCAqdmFsKQoreworCWlmIChj b3VudGVyLT5wcmVzZW50KQorCQlfX3VwZGF0ZV9zYW1wbGUoY291bnRlciwgdmFsW2NvdW50ZXIt PmlkeF0pOworfQorCitzdGF0aWMgdm9pZCBwbXVfc2FtcGxlKHN0cnVjdCBlbmdpbmVzICplbmdp bmVzKQoreworCWNvbnN0IGludCBudW1fdmFsID0gZW5naW5lcy0+bnVtX2NvdW50ZXJzOworCXVp bnQ2NF90IHZhbFsyICsgbnVtX3ZhbF07CisJdW5zaWduZWQgaW50IGk7CisKKwllbmdpbmVzLT50 cy5wcmV2ID0gZW5naW5lcy0+dHMuY3VyOworCisJaWYgKGVuZ2luZXMtPnJhcGxfZmQgPj0gMCkK KwkJX191cGRhdGVfc2FtcGxlKCZlbmdpbmVzLT5yYXBsLAorCQkJCXBtdV9yZWFkX3NpbmdsZShl bmdpbmVzLT5yYXBsX2ZkKSk7CisKKwlpZiAoZW5naW5lcy0+aW1jX2ZkID49IDApIHsKKwkJcG11 X3JlYWRfbXVsdGkoZW5naW5lcy0+aW1jX2ZkLCAyLCB2YWwpOworCQl1cGRhdGVfc2FtcGxlKCZl bmdpbmVzLT5pbWNfcmVhZHMsIHZhbCk7CisJCXVwZGF0ZV9zYW1wbGUoJmVuZ2luZXMtPmltY193 cml0ZXMsIHZhbCk7CisJfQogCi0JcGVyY2VudF9idXN5ID0gMTAwIC0gMTAwICogcmluZy0+aWRs ZSAvIHNhbXBsZXNfcGVyX3NlYzsKKwllbmdpbmVzLT50cy5jdXIgPSBwbXVfcmVhZF9tdWx0aShl bmdpbmVzLT5mZCwgbnVtX3ZhbCwgdmFsKTsKIAotCWxlbiA9IHByaW50ZigiJTI1cyBidXN5OiAl M2QlJTogIiwgcmluZy0+bmFtZSwgcGVyY2VudF9idXN5KTsKLQlwcmludF9wZXJjZW50YWdlX2Jh ciAocGVyY2VudF9idXN5LCBsZW4pOwotCXByaW50ZigiJTI0cyBzcGFjZTogJWQvJWRcbiIsCi0J CSAgIHJpbmctPm5hbWUsCi0JCSAgIChpbnQpKHJpbmctPmZ1bGwgLyBzYW1wbGVzX3Blcl9zZWMp LAotCQkgICByaW5nLT5zaXplKTsKKwl1cGRhdGVfc2FtcGxlKCZlbmdpbmVzLT5mcmVxX3JlcSwg dmFsKTsKKwl1cGRhdGVfc2FtcGxlKCZlbmdpbmVzLT5mcmVxX2FjdCwgdmFsKTsKKwl1cGRhdGVf c2FtcGxlKCZlbmdpbmVzLT5pcnEsIHZhbCk7CisJdXBkYXRlX3NhbXBsZSgmZW5naW5lcy0+cmM2 LCB2YWwpOworCisJZm9yIChpID0gMDsgaSA8IGVuZ2luZXMtPm51bV9lbmdpbmVzOyBpKyspIHsK KwkJc3RydWN0IGVuZ2luZSAqZW5naW5lID0gZW5naW5lX3B0cihlbmdpbmVzLCBpKTsKKworCQl1 cGRhdGVfc2FtcGxlKCZlbmdpbmUtPmJ1c3ksIHZhbCk7CisJCXVwZGF0ZV9zYW1wbGUoJmVuZ2lu ZS0+c2VtYSwgdmFsKTsKKwkJdXBkYXRlX3NhbXBsZSgmZW5naW5lLT53YWl0LCB2YWwpOworCX0K IH0KIAotc3RhdGljIHZvaWQgcmluZ19sb2coc3RydWN0IHJpbmcgKnJpbmcsIHVuc2lnbmVkIGxv bmcgc2FtcGxlc19wZXJfc2VjLAotCQlGSUxFICpvdXRwdXQpCitzdGF0aWMgY29uc3QgY2hhciAq YmFyc1tdID0geyAiICIsICLilo8iLCAi4paOIiwgIuKWjSIsICLilowiLCAi4paLIiwgIuKWiiIs ICLilokiLCAi4paIIiB9OworCitzdGF0aWMgdm9pZAorcHJpbnRfcGVyY2VudGFnZV9iYXIoZG91 YmxlIHBlcmNlbnQsIGludCBtYXhfbGVuKQogewotCWlmIChyaW5nLT5zaXplKQotCQlmcHJpbnRm KG91dHB1dCwgIiUzZFx0JWRcdCIsCi0JCQkoaW50KSgxMDAgLSAxMDAgKiByaW5nLT5pZGxlIC8g c2FtcGxlc19wZXJfc2VjKSwKLQkJCShpbnQpKHJpbmctPmZ1bGwgLyBzYW1wbGVzX3Blcl9zZWMp KTsKLQllbHNlCi0JCWZwcmludGYob3V0cHV0LCAiLTFcdC0xXHQiKTsKKwlpbnQgYmFyX2xlbiA9 IHBlcmNlbnQgKiAoOCAqIChtYXhfbGVuIC0gMikpIC8gMTAwLjA7CisJaW50IGk7CisKKwlwdXRj aGFyKCd8Jyk7CisKKwlmb3IgKGkgPSBiYXJfbGVuOyBpID49IDg7IGkgLT0gOCkKKwkJcHJpbnRm KCIlcyIsIGJhcnNbOF0pOworCWlmIChpKQorCQlwcmludGYoIiVzIiwgYmFyc1tpXSk7CisKKwlm b3IgKGkgPSAwOyBpIDwgKG1heF9sZW4gLSAyIC0gKGJhcl9sZW4gKyA3KSAvIDgpOyBpKyspCisJ CXB1dGNoYXIoJyAnKTsKKworCXB1dGNoYXIoJ3wnKTsKIH0KIAorI2RlZmluZSBERUZBVUxUX1BF UklPRF9NUyAoMTAwMCkKKwogc3RhdGljIHZvaWQKIHVzYWdlKGNvbnN0IGNoYXIgKmFwcG5hbWUp CiB7CiAJcHJpbnRmKCJpbnRlbF9ncHVfdG9wIC0gRGlzcGxheSBhIHRvcC1saWtlIHN1bW1hcnkg b2YgSW50ZWwgR1BVIHVzYWdlXG4iCi0JCQkiXG4iCi0JCQkidXNhZ2U6ICVzIFtwYXJhbWV0ZXJz XVxuIgotCQkJIlxuIgotCQkJIlRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcHBseTpcbiIKLQkJ CSJbLXMgPHNhbXBsZXM+XSAgICAgICBzYW1wbGVzIHBlciBzZWNvbmRzIChkZWZhdWx0ICVkKVxu IgotCQkJIlstZSA8Y29tbWFuZD5dICAgICAgIGNvbW1hbmQgdG8gcHJvZmlsZVxuIgotCQkJIlst byA8ZmlsZT5dICAgICAgICAgIG91dHB1dCBzdGF0aXN0aWNzIHRvIGZpbGUuIElmIGZpbGUgaXMg Jy0nLCIKLQkJCSIgICAgICAgICAgICAgICAgICAgICBydW4gaW4gYmF0Y2ggbW9kZSBhbmQgb3V0 cHV0IHN0YXRpc3RpY3MgdG8gc3RkaW8gb25seSBcbiIKLQkJCSJbLWhdICAgICAgICAgICAgICAg ICBzaG93IHRoaXMgaGVscCBzY3JlZW5cbiIKLQkJCSJcbiIsCi0JCQlhcHBuYW1lLAotCQkJU0FN UExFU19QRVJfU0VDCi0JCSAgKTsKLQlyZXR1cm47CisJCSJcbiIKKwkJIlVzYWdlOiAlcyBbcGFy YW1ldGVyc11cbiIKKwkJIlxuIgorCQkiXHRUaGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIG9w dGlvbmFsOlxuIgorCQkiXHRbLXMgPHNhbXBsZXM+XSAgICAgICByZWZyZXNoIHBlcmlvZCBpbiBt cyAoZGVmYXVsdCAldW1zKVxuIgorCQkiXHRbLWhdICAgICAgICAgICAgICAgICBzaG93IHRoaXMg aGVscCB0ZXh0XG4iCisJCSJcbiIsCisJCWFwcG5hbWUsIERFRkFVTFRfUEVSSU9EX01TKTsKIH0K IAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewotCXVpbnQzMl90IGRldmlkOwot CXN0cnVjdCBwY2lfZGV2aWNlICpwY2lfZGV2OwotCXN0cnVjdCByaW5nIHJlbmRlcl9yaW5nID0g ewotCQkubmFtZSA9ICJyZW5kZXIiLAotCQkubW1pbyA9IDB4MjAzMCwKLQl9LCBic2RfcmluZyA9 IHsKLQkJLm5hbWUgPSAiYml0c3RyZWFtIiwKLQkJLm1taW8gPSAweDQwMzAsCi0JfSwgYnNkNl9y aW5nID0gewotCQkubmFtZSA9ICJiaXRzdHJlYW0iLAotCQkubW1pbyA9IDB4MTIwMzAsCi0JfSwg Ymx0X3JpbmcgPSB7Ci0JCS5uYW1lID0gImJsaXR0ZXIiLAotCQkubW1pbyA9IDB4MjIwMzAsCi0J fTsKLQlpbnQgaSwgY2g7Ci0JaW50IHNhbXBsZXNfcGVyX3NlYyA9IFNBTVBMRVNfUEVSX1NFQzsK LQlGSUxFICpvdXRwdXQgPSBOVUxMOwotCWRvdWJsZSBlbGFwc2VkX3RpbWU9MDsKLQlpbnQgcHJp bnRfaGVhZGVycz0xOwotCXBpZF90IGNoaWxkX3BpZD0tMTsKLQlpbnQgY2hpbGRfc3RhdDsKLQlj aGFyICpjbWQ9TlVMTDsKLQlpbnQgaW50ZXJhY3RpdmU9MTsKLQotCS8qIFBhcnNlIG9wdGlvbnM/ ICovCi0Jd2hpbGUgKChjaCA9IGdldG9wdChhcmdjLCBhcmd2LCAiczpvOmU6aCIpKSAhPSAtMSkg eworCXVuc2lnbmVkIGludCBwZXJpb2RfdXMgPSBERUZBVUxUX1BFUklPRF9NUyAqIDEwMDA7CisJ aW50IGNvbl93ID0gLTEsIGNvbl9oID0gLTE7CisJc3RydWN0IGVuZ2luZXMgKmVuZ2luZXM7CisJ dW5zaWduZWQgaW50IGk7CisJaW50IHJldCwgY2g7CisKKwkvKiBQYXJzZSBvcHRpb25zICovCisJ d2hpbGUgKChjaCA9IGdldG9wdChhcmdjLCBhcmd2LCAiczpoIikpICE9IC0xKSB7CiAJCXN3aXRj aCAoY2gpIHsKLQkJY2FzZSAnZSc6IGNtZCA9IHN0cmR1cChvcHRhcmcpOwotCQkJYnJlYWs7Ci0J CWNhc2UgJ3MnOiBzYW1wbGVzX3Blcl9zZWMgPSBhdG9pKG9wdGFyZyk7Ci0JCQlpZiAoc2FtcGxl c19wZXJfc2VjIDwgMTAwKSB7Ci0JCQkJZnByaW50ZihzdGRlcnIsICJFcnJvcjogc2FtcGxlcyBw ZXIgc2Vjb25kIG11c3QgYmUgPj0gMTAwXG4iKTsKLQkJCQlleGl0KDEpOwotCQkJfQotCQkJYnJl YWs7Ci0JCWNhc2UgJ28nOgotCQkJaWYgKCFzdHJjbXAob3B0YXJnLCAiLSIpKSB7Ci0JCQkJLyog UnVubmluZyBpbiBub24taW50ZXJhY3RpdmUgbW9kZSAqLwotCQkJCWludGVyYWN0aXZlID0gMDsK LQkJCQlvdXRwdXQgPSBzdGRvdXQ7Ci0JCQl9Ci0JCQllbHNlCi0JCQkJb3V0cHV0ID0gZm9wZW4o b3B0YXJnLCAidyIpOwotCQkJaWYgKCFvdXRwdXQpCi0JCQl7Ci0JCQkJcGVycm9yKCJmb3BlbiIp OwotCQkJCWV4aXQoMSk7Ci0JCQl9CisJCWNhc2UgJ3MnOgorCQkJcGVyaW9kX3VzID0gYXRvaShv cHRhcmcpICogMTAwMDsKIAkJCWJyZWFrOwogCQljYXNlICdoJzoKIAkJCXVzYWdlKGFyZ3ZbMF0p OwogCQkJZXhpdCgwKTsKLQkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJZnByaW50ZihzdGRlcnIs ICJJbnZhbGlkIGZsYWcgJWMhXG4iLCAoY2hhcilvcHRvcHQpOworCQkJZnByaW50ZihzdGRlcnIs ICJJbnZhbGlkIG9wdGlvbiAlYyFcbiIsIChjaGFyKW9wdG9wdCk7CiAJCQl1c2FnZShhcmd2WzBd KTsKIAkJCWV4aXQoMSk7Ci0JCQlicmVhazsKIAkJfQogCX0KIAotCXBjaV9kZXYgPSBpbnRlbF9n ZXRfcGNpX2RldmljZSgpOwotCWRldmlkID0gcGNpX2Rldi0+ZGV2aWNlX2lkOwotCWludGVsX21t aW9fdXNlX3BjaV9iYXIocGNpX2Rldik7Ci0JaW5pdF9pbnN0ZG9uZV9kZWZpbml0aW9ucyhkZXZp ZCk7Ci0KLQkvKiBEbyB3ZSBoYXZlIGEgY29tbWFuZCB0byBydW4/ICovCi0JaWYgKGNtZCAhPSBO VUxMKSB7Ci0JCWlmIChvdXRwdXQpIHsKLQkJCWZwcmludGYob3V0cHV0LCAiIyBQcm9maWxpbmc6 ICVzXG4iLCBjbWQpOwotCQkJZmZsdXNoKG91dHB1dCk7Ci0JCX0KLQkJY2hpbGRfcGlkID0gZm9y aygpOwotCQlpZiAoY2hpbGRfcGlkIDwgMCkgewotCQkJcGVycm9yKCJmb3JrIik7Ci0JCQlleGl0 KDEpOwotCQl9Ci0JCWVsc2UgaWYgKGNoaWxkX3BpZCA9PSAwKSB7Ci0JCQlpbnQgcmVzOwotCQkJ cmVzID0gc3lzdGVtKGNtZCk7Ci0JCQlpZiAocmVzIDwgMCkKLQkJCQlwZXJyb3IoInJ1bm5pbmcg Y29tbWFuZCIpOwotCQkJaWYgKG91dHB1dCkgewotCQkJCWZmbHVzaChvdXRwdXQpOwotCQkJCWZw cmludGYob3V0cHV0LCAiIyAlcyBleGl0ZWQgd2l0aCBzdGF0dXMgJWRcbiIsIGNtZCwgcmVzKTsK LQkJCQlmZmx1c2gob3V0cHV0KTsKLQkJCX0KLQkJCWZyZWUoY21kKTsKLQkJCWV4aXQoMCk7Ci0J CX0gZWxzZSB7Ci0JCQlmcmVlKGNtZCk7Ci0JCX0KKwllbmdpbmVzID0gZGlzY292ZXJfZW5naW5l cygpOworCWlmICghZW5naW5lcykgeworCQlmcHJpbnRmKHN0ZGVyciwKKwkJCSJGYWlsZWQgdG8g ZGV0ZWN0IGVuZ2luZXMhICglcylcbihLZXJuZWwgNC4xNiBvciBuZXdlciBpcyByZXF1aXJlZCBm b3IgaTkxNSBQTVUgc3VwcG9ydC4pXG4iLAorCQkJc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJu IDE7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IG51bV9pbnN0ZG9uZV9iaXRzOyBpKyspIHsKLQkJ dG9wX2JpdHNbaV0uYml0ID0gJmluc3Rkb25lX2JpdHNbaV07Ci0JCXRvcF9iaXRzW2ldLmNvdW50 ID0gMDsKLQkJdG9wX2JpdHNfc29ydGVkW2ldID0gJnRvcF9iaXRzW2ldOworCXJldCA9IHBtdV9p bml0KGVuZ2luZXMpOworCWlmIChyZXQpIHsKKwkJZnByaW50ZihzdGRlcnIsCisJCQkiRmFpbGVk IHRvIGluaXRpYWxpemUgUE1VISAoJXMpXG4iLCBzdHJlcnJvcihlcnJubykpOworCQlyZXR1cm4g MTsKIAl9CiAKLQkvKiBHcmFiIGFjY2VzcyB0byB0aGUgcmVnaXN0ZXJzICovCi0JaW50ZWxfcmVn aXN0ZXJfYWNjZXNzX2luaXQocGNpX2RldiwgMCwgLTEpOworCXBtdV9zYW1wbGUoZW5naW5lcyk7 CiAKLQlyaW5nX2luaXQoJnJlbmRlcl9yaW5nKTsKLQlpZiAoSVNfR0VONChkZXZpZCkgfHwgSVNf R0VONShkZXZpZCkpCi0JCXJpbmdfaW5pdCgmYnNkX3JpbmcpOwotCWlmIChJU19HRU42KGRldmlk KSB8fCBJU19HRU43KGRldmlkKSkgewotCQlyaW5nX2luaXQoJmJzZDZfcmluZyk7Ci0JCXJpbmdf aW5pdCgmYmx0X3JpbmcpOwotCX0KKwlmb3IgKDs7KSB7CisJCWRvdWJsZSB0OworI2RlZmluZSBC VUZTWiAxNgorCQljaGFyIGZyZXFbQlVGU1pdOworCQljaGFyIGZhY3RbQlVGU1pdOworCQljaGFy IGlycVtCVUZTWl07CisJCWNoYXIgcmM2W0JVRlNaXTsKKwkJY2hhciBwb3dlcltCVUZTWl07CisJ CWNoYXIgcmVhZHNbQlVGU1pdOworCQljaGFyIHdyaXRlc1tCVUZTWl07CisJCXN0cnVjdCB3aW5z aXplIHdzOworCQlpbnQgbGluZXMgPSAwOwogCi0JLyogSW5pdGlhbGl6ZSBHUFUgc3RhdHMgKi8K LQlpZiAoSEFTX1NUQVRTX1JFR1MoZGV2aWQpKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBTVEFUU19D T1VOVDsgaSsrKSB7Ci0JCQl1aW50MzJfdCBzdGF0c19oaWdoLCBzdGF0c19sb3csIHN0YXRzX2hp Z2hfMjsKKwkJLyogVXBkYXRlIHRlcm1pbmFsIHNpemUuICovCisJCWlmIChpb2N0bCgwLCBUSU9D R1dJTlNaLCAmd3MpICE9IC0xKSB7CisJCQljb25fdyA9IHdzLndzX2NvbDsKKwkJCWNvbl9oID0g d3Mud3Nfcm93OworCQl9CiAKLQkJCWRvIHsKLQkJCQlzdGF0c19oaWdoID0gSU5SRUcoc3RhdHNf cmVnc1tpXSArIDQpOwotCQkJCXN0YXRzX2xvdyA9IElOUkVHKHN0YXRzX3JlZ3NbaV0pOwotCQkJ CXN0YXRzX2hpZ2hfMiA9IElOUkVHKHN0YXRzX3JlZ3NbaV0gKyA0KTsKLQkJCX0gd2hpbGUgKHN0 YXRzX2hpZ2ggIT0gc3RhdHNfaGlnaF8yKTsKKwkJcG11X3NhbXBsZShlbmdpbmVzKTsKKwkJdCA9 IChkb3VibGUpKGVuZ2luZXMtPnRzLmN1ciAtIGVuZ2luZXMtPnRzLnByZXYpIC8gMWU5OwogCi0J CQlsYXN0X3N0YXRzW2ldID0gKHVpbnQ2NF90KXN0YXRzX2hpZ2ggPDwgMzIgfAotCQkJCXN0YXRz X2xvdzsKLQkJfQotCX0KKwkJcHJpbnRmKCJcMDMzW0hcMDMzW0oiKTsKIAotCWZvciAoOzspIHsK LQkJaW50IGo7Ci0JCXVuc2lnbmVkIGxvbmcgbG9uZyB0MSwgdGksIHRmLCB0MjsKLQkJdW5zaWdu ZWQgbG9uZyBsb25nIGRlZl9zbGVlcCA9IDEwMDAwMDAgLyBzYW1wbGVzX3Blcl9zZWM7Ci0JCXVu c2lnbmVkIGxvbmcgbG9uZyBsYXN0X3NhbXBsZXNfcGVyX3NlYyA9IHNhbXBsZXNfcGVyX3NlYzsK LQkJdW5zaWduZWQgc2hvcnQgaW50IG1heF9saW5lczsKLQkJc3RydWN0IHdpbnNpemUgd3M7Ci0J CWNoYXIgY2xlYXJfc2NyZWVuW10gPSB7MHgxYiwgJ1snLCAnSCcsCi0JCQkJICAgICAgIDB4MWIs ICdbJywgJ0onLAotCQkJCSAgICAgICAweDB9OwotCQlpbnQgcGVyY2VudDsKLQkJaW50IGxlbjsK LQotCQl0MSA9IGdldHRpbWUoKTsKLQotCQlyaW5nX3Jlc2V0KCZyZW5kZXJfcmluZyk7Ci0JCXJp bmdfcmVzZXQoJmJzZF9yaW5nKTsKLQkJcmluZ19yZXNldCgmYnNkNl9yaW5nKTsKLQkJcmluZ19y ZXNldCgmYmx0X3JpbmcpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBzYW1wbGVzX3Blcl9zZWM7IGkr KykgewotCQkJbG9uZyBsb25nIGludGVydmFsOwotCQkJdGkgPSBnZXR0aW1lKCk7Ci0JCQlpZiAo SVNfOTY1KGRldmlkKSkgewotCQkJCWluc3Rkb25lID0gSU5SRUcoSU5TVERPTkVfSTk2NSk7Ci0J CQkJaW5zdGRvbmUxID0gSU5SRUcoSU5TVERPTkVfMSk7Ci0JCQl9IGVsc2UKLQkJCQlpbnN0ZG9u ZSA9IElOUkVHKElOU1RET05FKTsKLQotCQkJZm9yIChqID0gMDsgaiA8IG51bV9pbnN0ZG9uZV9i aXRzOyBqKyspCi0JCQkJdXBkYXRlX2lkbGVfYml0KCZ0b3BfYml0c1tqXSk7Ci0KLQkJCXJpbmdf c2FtcGxlKCZyZW5kZXJfcmluZyk7Ci0JCQlyaW5nX3NhbXBsZSgmYnNkX3JpbmcpOwotCQkJcmlu Z19zYW1wbGUoJmJzZDZfcmluZyk7Ci0JCQlyaW5nX3NhbXBsZSgmYmx0X3JpbmcpOwotCi0JCQl0 ZiA9IGdldHRpbWUoKTsKLQkJCWlmICh0ZiAtIHQxID49IDEwMDAwMDApIHsKLQkJCQkvKiBXZSBh cmUgb3V0IG9mIHN5bmMsIGJhaWwgb3V0ICovCi0JCQkJbGFzdF9zYW1wbGVzX3Blcl9zZWMgPSBp KzE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpbnRlcnZhbCA9IGRlZl9zbGVlcCAtICh0ZiAtIHRp KTsKLQkJCWlmIChpbnRlcnZhbCA+IDApCi0JCQkJdXNsZWVwKGludGVydmFsKTsKLQkJfQorCQlw bXVfY2FsYygmZW5naW5lcy0+ZnJlcV9yZXEsIGZyZXEsIEJVRlNaLCA0LCAwLCAxLjAsIHQsIDEp OworCQlwbXVfY2FsYygmZW5naW5lcy0+ZnJlcV9hY3QsIGZhY3QsIEJVRlNaLCA0LCAwLCAxLjAs IHQsIDEpOworCQlwbXVfY2FsYygmZW5naW5lcy0+aXJxLCBpcnEsIEJVRlNaLCA4LCAwLCAxLjAs IHQsIDEpOworCQlwbXVfY2FsYygmZW5naW5lcy0+cmM2LCByYzYsIEJVRlNaLCAzLCAwLCAxZTks IHQsIDEwMCk7CisJCXBtdV9jYWxjKCZlbmdpbmVzLT5yYXBsLCBwb3dlciwgQlVGU1osIDQsIDIs IDEuMCwgdCwKKwkJCSBlbmdpbmVzLT5yYXBsX3NjYWxlKTsKKwkJcG11X2NhbGMoJmVuZ2luZXMt PmltY19yZWFkcywgcmVhZHMsIEJVRlNaLCA2LCAwLCAxLjAsIHQsCisJCQkgZW5naW5lcy0+aW1j X3JlYWRzX3NjYWxlKTsKKwkJcG11X2NhbGMoJmVuZ2luZXMtPmltY193cml0ZXMsIHdyaXRlcywg QlVGU1osIDYsIDAsIDEuMCwgdCwKKwkJCSBlbmdpbmVzLT5pbWNfd3JpdGVzX3NjYWxlKTsKIAot CQlpZiAoSEFTX1NUQVRTX1JFR1MoZGV2aWQpKSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgU1RBVFNf Q09VTlQ7IGkrKykgewotCQkJCXVpbnQzMl90IHN0YXRzX2hpZ2gsIHN0YXRzX2xvdywgc3RhdHNf aGlnaF8yOworCQlpZiAobGluZXMrKyA8IGNvbl9oKQorCQkJcHJpbnRmKCJpbnRlbC1ncHUtdG9w IC0gJXMvJXMgTUh6OyAgJXMlJSBSQzY7ICVzICVzOyAlcyBpcnFzL3NcbiIsCisJCQkgICAgICAg ZmFjdCwgZnJlcSwgcmM2LCBwb3dlciwgZW5naW5lcy0+cmFwbF91bml0LCBpcnEpOwogCi0JCQkJ ZG8gewotCQkJCQlzdGF0c19oaWdoID0gSU5SRUcoc3RhdHNfcmVnc1tpXSArIDQpOwotCQkJCQlz dGF0c19sb3cgPSBJTlJFRyhzdGF0c19yZWdzW2ldKTsKLQkJCQkJc3RhdHNfaGlnaF8yID0gSU5S RUcoc3RhdHNfcmVnc1tpXSArIDQpOwotCQkJCX0gd2hpbGUgKHN0YXRzX2hpZ2ggIT0gc3RhdHNf aGlnaF8yKTsKKwkJaWYgKGxpbmVzKysgPCBjb25faCkKKwkJCXByaW50ZigiXG4iKTsKIAotCQkJ CXN0YXRzW2ldID0gKHVpbnQ2NF90KXN0YXRzX2hpZ2ggPDwgMzIgfAotCQkJCQlzdGF0c19sb3c7 Ci0JCQl9Ci0JCX0KKwkJaWYgKGVuZ2luZXMtPmltY19mZCkgeworCQkJaWYgKGxpbmVzKysgPCBj b25faCkKKwkJCQlwcmludGYoIiAgICAgIElNQyByZWFkczogICAlcyAlcy9zXG4iLAorCQkJCSAg ICAgICByZWFkcywgZW5naW5lcy0+aW1jX3JlYWRzX3VuaXQpOworCisJCQlpZiAobGluZXMrKyA8 IGNvbl9oKQorCQkJCXByaW50ZigiICAgICBJTUMgd3JpdGVzOiAgICVzICVzL3NcbiIsCisJCQkJ ICAgICAgIHdyaXRlcywgZW5naW5lcy0+aW1jX3dyaXRlc191bml0KTsKIAotCQlxc29ydCh0b3Bf Yml0c19zb3J0ZWQsIG51bV9pbnN0ZG9uZV9iaXRzLAotCQkgICAgICBzaXplb2Yoc3RydWN0IHRv cF9iaXQgKiksIHRvcF9iaXRzX3NvcnQpOwotCi0JCS8qIExpbWl0IHRoZSBudW1iZXIgb2YgbGlu ZXMgcHJpbnRlZCB0byB0aGUgdGVybWluYWwgaGVpZ2h0IHNvIHRoZQotCQkgKiBtb3N0IGltcG9y dGFudCBpbmZvIChhdCB0aGUgdG9wKSB3aWxsIHN0YXkgb24gc2NyZWVuLiAqLwotCQltYXhfbGlu ZXMgPSAtMTsKLQkJaWYgKGlvY3RsKDAsIFRJT0NHV0lOU1osICZ3cykgIT0gLTEpCi0JCQltYXhf bGluZXMgPSB3cy53c19yb3cgLSA2OyAvKiBleGNsdWRlIGhlYWRlciBsaW5lcyAqLwotCQlpZiAo bWF4X2xpbmVzID49IG51bV9pbnN0ZG9uZV9iaXRzKQotCQkJbWF4X2xpbmVzID0gbnVtX2luc3Rk b25lX2JpdHM7Ci0KLQkJdDIgPSBnZXR0aW1lKCk7Ci0JCWVsYXBzZWRfdGltZSArPSAodDIgLSB0 MSkgLyAxMDAwMDAwLjA7Ci0KLQkJaWYgKGludGVyYWN0aXZlKSB7Ci0JCQlwcmludGYoIiVzIiwg Y2xlYXJfc2NyZWVuKTsKLQkJCXByaW50X2Nsb2NrX2luZm8ocGNpX2Rldik7Ci0KLQkJCXJpbmdf cHJpbnQoJnJlbmRlcl9yaW5nLCBsYXN0X3NhbXBsZXNfcGVyX3NlYyk7Ci0JCQlyaW5nX3ByaW50 KCZic2RfcmluZywgbGFzdF9zYW1wbGVzX3Blcl9zZWMpOwotCQkJcmluZ19wcmludCgmYnNkNl9y aW5nLCBsYXN0X3NhbXBsZXNfcGVyX3NlYyk7Ci0JCQlyaW5nX3ByaW50KCZibHRfcmluZywgbGFz dF9zYW1wbGVzX3Blcl9zZWMpOwotCi0JCQlwcmludGYoIlxuJTMwcyAgJXNcbiIsICJ0YXNrIiwg InBlcmNlbnQgYnVzeSIpOwotCQkJZm9yIChpID0gMDsgaSA8IG1heF9saW5lczsgaSsrKSB7Ci0J CQkJaWYgKHRvcF9iaXRzX3NvcnRlZFtpXS0+Y291bnQgPiAwKSB7Ci0JCQkJCXBlcmNlbnQgPSAo dG9wX2JpdHNfc29ydGVkW2ldLT5jb3VudCAqIDEwMCkgLwotCQkJCQkJbGFzdF9zYW1wbGVzX3Bl cl9zZWM7Ci0JCQkJCWxlbiA9IHByaW50ZigiJTMwczogJTNkJSU6ICIsCi0JCQkJCQkJIHRvcF9i aXRzX3NvcnRlZFtpXS0+Yml0LT5uYW1lLAotCQkJCQkJCSBwZXJjZW50KTsKLQkJCQkJcHJpbnRf cGVyY2VudGFnZV9iYXIgKHBlcmNlbnQsIGxlbik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcHJpbnRm KCIlKnMiLCBQRVJDRU5UQUdFX0JBUl9FTkQsICIiKTsKLQkJCQl9Ci0KLQkJCQlpZiAoaSA8IFNU QVRTX0NPVU5UICYmIEhBU19TVEFUU19SRUdTKGRldmlkKSkgewotCQkJCQlwcmludGYoIiUxM3M6 ICVsbHUgKCVsbGQvc2VjKSIsCi0JCQkJCQkgICBzdGF0c19yZWdfbmFtZXNbaV0sCi0JCQkJCQkg ICAobG9uZyBsb25nKXN0YXRzW2ldLAotCQkJCQkJICAgKGxvbmcgbG9uZykoc3RhdHNbaV0gLSBs YXN0X3N0YXRzW2ldKSk7Ci0JCQkJCWxhc3Rfc3RhdHNbaV0gPSBzdGF0c1tpXTsKLQkJCQl9IGVs c2UgewotCQkJCQlpZiAoIXRvcF9iaXRzX3NvcnRlZFtpXS0+Y291bnQpCi0JCQkJCQlicmVhazsK LQkJCQl9CisJCQlpZiAoKytsaW5lcyA8IGNvbl9oKQogCQkJCXByaW50ZigiXG4iKTsKLQkJCX0K IAkJfQotCQlpZiAob3V0cHV0KSB7Ci0JCQkvKiBQcmludCBoZWFkZXJzIGZvciBjb2x1bW5zIGF0 IGZpcnN0IHJ1biAqLwotCQkJaWYgKHByaW50X2hlYWRlcnMpIHsKLQkJCQlmcHJpbnRmKG91dHB1 dCwgIiMgdGltZVx0Iik7Ci0JCQkJcmluZ19wcmludF9oZWFkZXIob3V0cHV0LCAmcmVuZGVyX3Jp bmcpOwotCQkJCXJpbmdfcHJpbnRfaGVhZGVyKG91dHB1dCwgJmJzZF9yaW5nKTsKLQkJCQlyaW5n X3ByaW50X2hlYWRlcihvdXRwdXQsICZic2Q2X3JpbmcpOwotCQkJCXJpbmdfcHJpbnRfaGVhZGVy KG91dHB1dCwgJmJsdF9yaW5nKTsKLQkJCQlmb3IgKGkgPSAwOyBpIDwgTUFYX05VTV9UT1BfQklU UzsgaSsrKSB7Ci0JCQkJCWlmIChpIDwgU1RBVFNfQ09VTlQgJiYgSEFTX1NUQVRTX1JFR1MoZGV2 aWQpKSB7Ci0JCQkJCQlmcHJpbnRmKG91dHB1dCwgIiUuNnNcdCIsCi0JCQkJCQkJICAgc3RhdHNf cmVnX25hbWVzW2ldCi0JCQkJCQkJICAgKTsKLQkJCQkJfQotCQkJCQlpZiAoIXRvcF9iaXRzW2ld LmNvdW50KQotCQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCWZwcmludGYob3V0cHV0LCAiXG4i KTsKLQkJCQlwcmludF9oZWFkZXJzID0gMDsKLQkJCX0KIAotCQkJLyogUHJpbnQgc3RhdGlzdGlj cyAqLwotCQkJZnByaW50ZihvdXRwdXQsICIlLjJmXHQiLCBlbGFwc2VkX3RpbWUpOwotCQkJcmlu Z19sb2coJnJlbmRlcl9yaW5nLCBsYXN0X3NhbXBsZXNfcGVyX3NlYywgb3V0cHV0KTsKLQkJCXJp bmdfbG9nKCZic2RfcmluZywgbGFzdF9zYW1wbGVzX3Blcl9zZWMsIG91dHB1dCk7Ci0JCQlyaW5n X2xvZygmYnNkNl9yaW5nLCBsYXN0X3NhbXBsZXNfcGVyX3NlYywgb3V0cHV0KTsKLQkJCXJpbmdf bG9nKCZibHRfcmluZywgbGFzdF9zYW1wbGVzX3Blcl9zZWMsIG91dHB1dCk7Ci0KLQkJCWZvciAo aSA9IDA7IGkgPCBNQVhfTlVNX1RPUF9CSVRTOyBpKyspIHsKLQkJCQlpZiAoaSA8IFNUQVRTX0NP VU5UICYmIEhBU19TVEFUU19SRUdTKGRldmlkKSkgewotCQkJCQlmcHJpbnRmKG91dHB1dCwgIiUi UFJJdTY0Ilx0IiwKLQkJCQkJCSAgIHN0YXRzW2ldIC0gbGFzdF9zdGF0c1tpXSk7Ci0JCQkJCWxh c3Rfc3RhdHNbaV0gPSBzdGF0c1tpXTsKLQkJCQl9Ci0JCQkJCWlmICghdG9wX2JpdHNbaV0uY291 bnQpCi0JCQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWZwcmludGYob3V0cHV0LCAiXG4iKTsKLQkJ CWZmbHVzaChvdXRwdXQpOwotCQl9CisJCWZvciAoaSA9IDA7IGkgPCBlbmdpbmVzLT5udW1fZW5n aW5lczsgaSsrKSB7CisJCQlzdHJ1Y3QgZW5naW5lICplbmdpbmUgPSBlbmdpbmVfcHRyKGVuZ2lu ZXMsIGkpOwogCi0JCWZvciAoaSA9IDA7IGkgPCBudW1faW5zdGRvbmVfYml0czsgaSsrKSB7Ci0J CQl0b3BfYml0c19zb3J0ZWRbaV0tPmNvdW50ID0gMDsKKwkJCWlmIChlbmdpbmUtPm51bV9jb3Vu dGVycyAmJiBsaW5lcyA8IGNvbl9oKSB7CisJCQkJY29uc3QgY2hhciAqYSA9ICIgICAgICAgICAg RU5HSU5FICAgICAgQlVTWSAiOworCQkJCWNvbnN0IGNoYXIgKmIgPSAiIE1JX1NFTUEgTUlfV0FJ VCI7CiAKLQkJCWlmIChpIDwgU1RBVFNfQ09VTlQpCi0JCQkJbGFzdF9zdGF0c1tpXSA9IHN0YXRz W2ldOworCQkJCXByaW50ZigiXDAzM1s3bSVzJSpzJXNcMDMzWzBtXG4iLAorCQkJCSAgICAgICBh LAorCQkJCSAgICAgICAoaW50KShjb25fdyAtIDEgLSBzdHJsZW4oYSkgLSBzdHJsZW4oYikpLAor CQkJCSAgICAgICAiICIsIGIpOworCQkJCWxpbmVzKys7CisJCQkJYnJlYWs7CisJCQl9CiAJCX0K IAotCQkvKiBDaGVjayBpZiBjaGlsZCBoYXMgZ29uZSAqLwotCQlpZiAoY2hpbGRfcGlkID4gMCkg ewotCQkJaW50IHJlczsKLQkJCWlmICgocmVzID0gd2FpdHBpZChjaGlsZF9waWQsICZjaGlsZF9z dGF0LCBXTk9IQU5HKSkgPT0gLTEpIHsKLQkJCQlwZXJyb3IoIndhaXRwaWQiKTsKLQkJCQlleGl0 KDEpOwotCQkJfQotCQkJaWYgKHJlcyA9PSAwKQorCQlmb3IgKGkgPSAwOyBpIDwgZW5naW5lcy0+ bnVtX2VuZ2luZXMgJiYgbGluZXMgPCBjb25faDsgaSsrKSB7CisJCQlzdHJ1Y3QgZW5naW5lICpl bmdpbmUgPSBlbmdpbmVfcHRyKGVuZ2luZXMsIGkpOworCQkJdW5zaWduZWQgaW50IG1heF93ID0g Y29uX3cgLSAxOworCQkJdW5zaWduZWQgaW50IGxlbjsKKwkJCWNoYXIgc2VtYVtCVUZTWl07CisJ CQljaGFyIHdhaXRbQlVGU1pdOworCQkJY2hhciBidXN5W0JVRlNaXTsKKwkJCWNoYXIgYnVmWzEy OF07CisJCQlkb3VibGUgdmFsOworCisJCQlpZiAoIWVuZ2luZS0+bnVtX2NvdW50ZXJzKQogCQkJ CWNvbnRpbnVlOwotCQkJaWYgKFdJRkVYSVRFRChjaGlsZF9zdGF0KSkKLQkJCQlicmVhazsKKwor CQkJcG11X2NhbGMoJmVuZ2luZS0+c2VtYSwgc2VtYSwgQlVGU1osIDMsIDAsIDFlOSwgdCwgMTAw KTsKKwkJCXBtdV9jYWxjKCZlbmdpbmUtPndhaXQsIHdhaXQsIEJVRlNaLCAzLCAwLCAxZTksIHQs IDEwMCk7CisJCQlsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiICAgICVzJSUgICAg JXMlJSIsCisJCQkJICAgICAgIHNlbWEsIHdhaXQpOworCisJCQlwbXVfY2FsYygmZW5naW5lLT5i dXN5LCBidXN5LCBCVUZTWiwgNiwgMiwgMWU5LCB0LAorCQkJCSAxMDApOworCQkJbGVuICs9IHBy aW50ZigiJTE2cyAlcyUlICIsIGVuZ2luZS0+ZGlzcGxheV9uYW1lLCBidXN5KTsKKworCQkJdmFs ID0gX19wbXVfY2FsYygmZW5naW5lLT5idXN5LnZhbCwgMWU5LCB0LCAxMDApOworCQkJcHJpbnRf cGVyY2VudGFnZV9iYXIodmFsLCBtYXhfdyAtIGxlbik7CisKKwkJCXByaW50ZigiJXNcbiIsIGJ1 Zik7CisKKwkJCWxpbmVzKys7CiAJCX0KLQl9CiAKLQlmY2xvc2Uob3V0cHV0KTsKKwkJaWYgKGxp bmVzKysgPCBjb25faCkKKwkJCXByaW50ZigiXG4iKTsKKworCQl1c2xlZXAocGVyaW9kX3VzKTsK Kwl9CiAKLQlpbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfZmluaSgpOwogCXJldHVybiAwOwogfQpkaWZm IC0tZ2l0IGEvdG9vbHMvbWVzb24uYnVpbGQgYi90b29scy9tZXNvbi5idWlsZAppbmRleCBiZDJk MzEzZDUxNTYuLmE5MThlZWIwYmVmMSAxMDA2NDQKLS0tIGEvdG9vbHMvbWVzb24uYnVpbGQKKysr IGIvdG9vbHMvbWVzb24uYnVpbGQKQEAgLTIzLDcgKzIzLDYgQEAgdG9vbHNfcHJvZ3MgPSBbCiAJ J2ludGVsX2dwdV9mcmVxdWVuY3knLAogCSdpbnRlbF9maXJtd2FyZV9kZWNvZGUnLAogCSdpbnRl bF9ncHVfdGltZScsCi0JJ2ludGVsX2dwdV90b3AnLAogCSdpbnRlbF9ndHQnLAogCSdpbnRlbF9n dWNfbG9nZ2VyJywKIAknaW50ZWxfaW5mb2ZyYW1lcycsCkBAIC0xMTcsNiArMTE2LDExIEBAIHNo YXJlZF9saWJyYXJ5KCdpbnRlbF9hdWJkdW1wJywgJ2F1YmR1bXAuYycsCiAJICAgICAgIG5hbWVf cHJlZml4IDogJycsCiAJICAgICAgIGluc3RhbGwgOiB0cnVlKQogCitleGVjdXRhYmxlKCdpbnRl bF9ncHVfdG9wJywgJ2ludGVsX2dwdV90b3AuYycsCisJICAgaW5zdGFsbCA6IHRydWUsCisJICAg aW5zdGFsbF9ycGF0aCA6IHJwYXRoZGlyLAorCSAgIGRlcGVuZGVuY2llcyA6IHRvb2xfZGVwcyAr IFsgbGliX2lndF9wZXJmIF0pCisKIGNvbmZfZGF0YSA9IGNvbmZpZ3VyYXRpb25fZGF0YSgpCiBj b25mX2RhdGEuc2V0KCdwcmVmaXgnLCBwcmVmaXgpCiBjb25mX2RhdGEuc2V0KCdleGVjX3ByZWZp eCcsICcke3ByZWZpeH0nKQotLSAKMi4xNC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2lndC1kZXYK