From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Grytsov Subject: [PATCH 4/5] xl: add vsnd CLI commands Date: Mon, 2 Oct 2017 12:49:23 +0300 Message-ID: <1506937764-30329-5-git-send-email-al1img@gmail.com> References: <1506937764-30329-1-git-send-email-al1img@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dyxM2-0005pL-4W for xen-devel@lists.xenproject.org; Mon, 02 Oct 2017 09:49:38 +0000 Received: by mail-lf0-f66.google.com with SMTP id c8so2006777lfe.2 for ; Mon, 02 Oct 2017 02:49:36 -0700 (PDT) In-Reply-To: <1506937764-30329-1-git-send-email-al1img@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: ian.jackson@eu.citrix.com, wei.liu2@citrix.com, Oleksandr Grytsov List-Id: xen-devel@lists.xenproject.org RnJvbTogT2xla3NhbmRyIEdyeXRzb3YgPG9sZWtzYW5kcl9ncnl0c292QGVwYW0uY29tPgoKQWRk IENMSSBjb21tYW5kcyB0byBhdHRhY2gsIGRldGFjaCBhbmQgbGlzdCB2aXJ0dWFsIHNvdW5kIGRl dmljZXMKClNpZ25lZC1vZmYtYnk6IE9sZWtzYW5kciBHcnl0c292IDxvbGVrc2FuZHJfZ3J5dHNv dkBlcGFtLmNvbT4KLS0tCiB0b29scy94bC9NYWtlZmlsZSAgICAgIHwgICAyICstCiB0b29scy94 bC94bC5oICAgICAgICAgIHwgICAzICsKIHRvb2xzL3hsL3hsX2NtZHRhYmxlLmMgfCAgMTUgKysr KwogdG9vbHMveGwveGxfdnNuZC5jICAgICB8IDIwMyArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDIyMiBpbnNlcnRpb25z KCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMveGwveGxfdnNuZC5j CgpkaWZmIC0tZ2l0IGEvdG9vbHMveGwvTWFrZWZpbGUgYi90b29scy94bC9NYWtlZmlsZQppbmRl eCBhNTExN2FiLi42NmJkYmRlIDEwMDY0NAotLS0gYS90b29scy94bC9NYWtlZmlsZQorKysgYi90 b29scy94bC9NYWtlZmlsZQpAQCAtMjIsNyArMjIsNyBAQCBYTF9PQkpTICs9IHhsX3Z0cG0ubyB4 bF9ibG9jay5vIHhsX25pYy5vIHhsX3VzYi5vCiBYTF9PQkpTICs9IHhsX3NjaGVkLm8geGxfcGNp Lm8geGxfdmNwdS5vIHhsX2Nkcm9tLm8geGxfbWVtLm8KIFhMX09CSlMgKz0geGxfaW5mby5vIHhs X2NvbnNvbGUubyB4bF9taXNjLm8KIFhMX09CSlMgKz0geGxfdm1jb250cm9sLm8geGxfc2F2ZXJl c3RvcmUubyB4bF9taWdyYXRlLm8KLVhMX09CSlMgKz0geGxfdmRpc3BsLm8KK1hMX09CSlMgKz0g eGxfdmRpc3BsLm8geGxfdnNuZC5vCiAKICQoWExfT0JKUyk6IENGTEFHUyArPSAkKENGTEFHU19s aWJ4ZW50b29sbG9nKQogJChYTF9PQkpTKTogQ0ZMQUdTICs9ICQoQ0ZMQUdTX1hMKQpkaWZmIC0t Z2l0IGEvdG9vbHMveGwveGwuaCBiL3Rvb2xzL3hsL3hsLmgKaW5kZXggMzFkNjYwYi4uNzAzY2Fh NiAxMDA2NDQKLS0tIGEvdG9vbHMveGwveGwuaAorKysgYi90b29scy94bC94bC5oCkBAIC0xNzAs NiArMTcwLDkgQEAgaW50IG1haW5fdnRwbWRldGFjaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwog aW50IG1haW5fdmRpc3BsYXR0YWNoKGludCBhcmdjLCBjaGFyICoqYXJndik7CiBpbnQgbWFpbl92 ZGlzcGxsaXN0KGludCBhcmdjLCBjaGFyICoqYXJndik7CiBpbnQgbWFpbl92ZGlzcGxkZXRhY2go aW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2ludCBtYWluX3ZzbmRhdHRhY2goaW50IGFyZ2MsIGNo YXIgKiphcmd2KTsKK2ludCBtYWluX3ZzbmRsaXN0KGludCBhcmdjLCBjaGFyICoqYXJndik7Citp bnQgbWFpbl92c25kZGV0YWNoKGludCBhcmdjLCBjaGFyICoqYXJndik7CiBpbnQgbWFpbl91c2Jj dHJsX2F0dGFjaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwogaW50IG1haW5fdXNiY3RybF9kZXRh Y2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKIGludCBtYWluX3VzYmRldl9hdHRhY2goaW50IGFy Z2MsIGNoYXIgKiphcmd2KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3hsL3hsX2NtZHRhYmxlLmMgYi90 b29scy94bC94bF9jbWR0YWJsZS5jCmluZGV4IGMzMDRhODUuLjhlMTYyY2UgMTAwNjQ0Ci0tLSBh L3Rvb2xzL3hsL3hsX2NtZHRhYmxlLmMKKysrIGIvdG9vbHMveGwveGxfY21kdGFibGUuYwpAQCAt Mzk3LDYgKzM5NywyMSBAQCBzdHJ1Y3QgY21kX3NwZWMgY21kX3RhYmxlW10gPSB7CiAgICAgICAi RGVzdHJveSBhIGRvbWFpbidzIHZpcnR1YWwgZGlzcGxheSBkZXZpY2UiLAogICAgICAgIjxEb21h aW4+IDxEZXZJZD4iLAogICAgIH0sCisgICAgeyAidnNuZC1hdHRhY2giLAorICAgICAgJm1haW5f dnNuZGF0dGFjaCwgMSwgMSwKKyAgICAgICJDcmVhdGUgYSBuZXcgdmlydHVhbCBzb3VuZCBkZXZp Y2UiLAorICAgICAgIjxEb21haW4+IDx2c25kLXNwZWMtY29tcG9uZW50KHMpPi4uLiIsCisgICAg fSwKKyAgICB7ICJ2c25kLWxpc3QiLAorICAgICAgJm1haW5fdnNuZGxpc3QsIDAsIDAsCisgICAg ICAiTGlzdCB2aXJ0dWFsIGRpc3BsYXkgZGV2aWNlcyBmb3IgYSBkb21haW4iLAorICAgICAgIjxE b21haW4ocyk+IiwKKyAgICB9LAorICAgIHsgInZzbmQtZGV0YWNoIiwKKyAgICAgICZtYWluX3Zz bmRkZXRhY2gsIDAsIDEsCisgICAgICAiRGVzdHJveSBhIGRvbWFpbidzIHZpcnR1YWwgc291bmQg ZGV2aWNlIiwKKyAgICAgICI8RG9tYWluPiA8RGV2SWQ+IiwKKyAgICB9LAogICAgIHsgInVwdGlt ZSIsCiAgICAgICAmbWFpbl91cHRpbWUsIDAsIDAsCiAgICAgICAiUHJpbnQgdXB0aW1lIGZvciBh bGwvc29tZSBkb21haW5zIiwKZGlmZiAtLWdpdCBhL3Rvb2xzL3hsL3hsX3ZzbmQuYyBiL3Rvb2xz L3hsL3hsX3ZzbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTI3YTVk Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMveGwveGxfdnNuZC5jCkBAIC0wLDAgKzEsMjAzIEBA CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEVQQU0gU3lzdGVtcyBJbmMuCisgKgorICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgdmVyc2lvbiAyLjEgb25seS4gd2l0aCB0aGUgc3BlY2lhbAorICogZXhjZXB0aW9u IG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIGZpbGUgTElDRU5TRS4KKyAqCisgKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlIDxs aWJ4bC5oPgorI2luY2x1ZGUgPGxpYnhsX3V0aWxzLmg+CisjaW5jbHVkZSA8bGlieGx1dGlsLmg+ CisKKyNpbmNsdWRlICJ4bC5oIgorI2luY2x1ZGUgInhsX3V0aWxzLmgiCisjaW5jbHVkZSAieGxf cGFyc2UuaCIKKworaW50IG1haW5fdnNuZGF0dGFjaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7 CisgICAgaW50IG9wdDsKKyAgICBpbnQgcmM7CisgICAgdWludDMyX3QgZG9taWQ7CisgICAgbGli eGxfZGV2aWNlX3ZzbmQgdnNuZDsKKworICAgIFNXSVRDSF9GT1JFQUNIX09QVChvcHQsICIiLCBO VUxMLCAidnNuZC1hdHRhY2giLCAyKSB7CisgICAgICAgIC8qIE5vIG9wdGlvbnMgKi8KKyAgICB9 CisKKyAgICBsaWJ4bF9kZXZpY2VfdnNuZF9pbml0KCZ2c25kKTsKKyAgICBkb21pZCA9IGZpbmRf ZG9tYWluKGFyZ3Zbb3B0aW5kKytdKTsKKworICAgIGZvciAoYXJndiArPSBvcHRpbmQsIGFyZ2Mg LT0gb3B0aW5kOyBhcmdjID4gMDsgKythcmd2LCAtLWFyZ2MpIHsKKyAgICAgICAgcmMgPSBwYXJz ZV92c25kX2l0ZW0oJnZzbmQsICphcmd2KTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKyAg ICB9CisKKyAgICBpZiAoZHJ5cnVuX29ubHkpIHsKKyAgICAgICAgY2hhciAqanNvbiA9IGxpYnhs X2RldmljZV92c25kX3RvX2pzb24oY3R4LCAmdnNuZCk7CisgICAgICAgIHByaW50ZigidnNuZDog JXNcbiIsIGpzb24pOworICAgICAgICBmcmVlKGpzb24pOworICAgICAgICBnb3RvIG91dDsKKyAg ICB9CisKKyAgICBpZiAobGlieGxfZGV2aWNlX3ZzbmRfYWRkKGN0eCwgZG9taWQsICZ2c25kLCAw KSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImxpYnhsX2RldmljZV92c25kX2FkZCBmYWls ZWQuXG4iKTsKKyAgICAgICAgcmMgPSBFUlJPUl9GQUlMOyBnb3RvIG91dDsKKyAgICB9CisKKyAg ICByYyA9IDA7CisKK291dDoKKyAgICBsaWJ4bF9kZXZpY2VfdnNuZF9kaXNwb3NlKCZ2c25kKTsK KyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3BhcmFtcyhsaWJ4bF92c25k X3BhcmFtcyAqcGFyYW1zKQoreworICAgIGludCBpOworCisgICAgaWYgKHBhcmFtcy0+Y2hhbm5l bHNfbWluKSB7CisgICAgICAgIHByaW50ZigiLCBjaGFubmVscy1taW46ICV1IiwgcGFyYW1zLT5j aGFubmVsc19taW4pOworICAgIH0KKworICAgIGlmIChwYXJhbXMtPmNoYW5uZWxzX21heCkgewor ICAgICAgICBwcmludGYoIiwgY2hhbm5lbHMtbWF4OiAldSIsIHBhcmFtcy0+Y2hhbm5lbHNfbWF4 KTsKKyAgICB9CisKKyAgICBpZiAocGFyYW1zLT5idWZmZXJfc2l6ZSkgeworICAgICAgICBwcmlu dGYoIiwgYnVmZmVyLXNpemU6ICV1IiwgcGFyYW1zLT5idWZmZXJfc2l6ZSk7CisgICAgfQorCisg ICAgaWYgKHBhcmFtcy0+bnVtX3NhbXBsZV9yYXRlcykgeworICAgICAgICBwcmludGYoIiwgc2Ft cGxlLXJhdGVzOiAiKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHBhcmFtcy0+bnVtX3NhbXBs ZV9yYXRlcyAtIDE7IGkrKykgeworICAgICAgICAgICAgcHJpbnRmKCIldTsiLCBwYXJhbXMtPnNh bXBsZV9yYXRlc1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnRmKCIldSIsIHBhcmFtcy0+ c2FtcGxlX3JhdGVzW2ldKTsKKyAgICB9CisKKyAgICBpZiAocGFyYW1zLT5udW1fc2FtcGxlX2Zv cm1hdHMpIHsKKyAgICAgICAgcHJpbnRmKCIsIHNhbXBsZS1mb3JtYXRzOiAiKTsKKyAgICAgICAg Zm9yIChpID0gMDsgaSA8IHBhcmFtcy0+bnVtX3NhbXBsZV9mb3JtYXRzIC0gMTsgaSsrKSB7Cisg ICAgICAgICAgICBwcmludGYoIiVzOyIsIGxpYnhsX3ZzbmRfcGNtX2Zvcm1hdF90b19zdHJpbmco cGFyYW1zLT5zYW1wbGVfZm9ybWF0c1tpXSkpOworICAgICAgICB9CisgICAgICAgIHByaW50Zigi JXMiLCBsaWJ4bF92c25kX3BjbV9mb3JtYXRfdG9fc3RyaW5nKHBhcmFtcy0+c2FtcGxlX2Zvcm1h dHNbaV0pKTsKKyAgICB9CisKKyAgICBwcmludGYoIlxuIik7Cit9CisKK2ludCBtYWluX3ZzbmRs aXN0KGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgIGludCBvcHQ7CisgICBpbnQgaSwgaiwg aywgbjsKKyAgIGxpYnhsX2RldmljZV92c25kICp2c25kczsKKyAgIGxpYnhsX3ZzbmRpbmZvIHZz bmRpbmZvOworCisgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAiIiwgTlVMTCwgInZzbmQtbGlz dCIsIDEpIHsKKyAgICAgICAvKiBObyBvcHRpb25zICovCisgICB9CisKKyAgIGZvciAoYXJndiAr PSBvcHRpbmQsIGFyZ2MgLT0gb3B0aW5kOyBhcmdjID4gMDsgLS1hcmdjLCArK2FyZ3YpIHsKKyAg ICAgICB1aW50MzJfdCBkb21pZDsKKworICAgICAgIGlmIChsaWJ4bF9kb21haW5fcXVhbGlmaWVy X3RvX2RvbWlkKGN0eCwgKmFyZ3YsICZkb21pZCkgPCAwKSB7CisgICAgICAgICAgIGZwcmludGYo c3RkZXJyLCAiJXMgaXMgYW4gaW52YWxpZCBkb21haW4gaWRlbnRpZmllclxuIiwgKmFyZ3YpOwor ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICB9CisKKyAgICAgICB2c25kcyA9IGxpYnhsX2Rl dmljZV92c25kX2xpc3QoY3R4LCBkb21pZCwgJm4pOworCisgICAgICAgaWYgKCF2c25kcykgY29u dGludWU7CisKKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAgICAgIGxp YnhsX3ZzbmRpbmZvX2luaXQoJnZzbmRpbmZvKTsKKyAgICAgICAgICAgaWYgKGxpYnhsX2Rldmlj ZV92c25kX2dldGluZm8oY3R4LCBkb21pZCwgJnZzbmRzW2ldLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmdnNuZGluZm8pID09IDApIHsKKyAgICAgICAgICAgICAg IHByaW50ZigiXG5kZXZpZDogJWQsIGJlLWRvbWlkOiAlZCwgaGFuZGxlOiAlZCwgc3RhdGU6ICVk LCAiCisgICAgICAgICAgICAgICAgICAgICAgImJlLXBhdGg6ICVzLCBmZS1wYXRoOiAlc1xuIiwK KyAgICAgICAgICAgICAgICAgICAgICB2c25kaW5mby5kZXZpZCwgdnNuZGluZm8uYmFja2VuZF9p ZCwKKyAgICAgICAgICAgICAgICAgICAgICB2c25kaW5mby5mcm9udGVuZF9pZCwgdnNuZGluZm8u c3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgdnNuZGluZm8uYmFja2VuZCwgdnNuZGluZm8u ZnJvbnRlbmQpOworCisgICAgICAgICAgICAgICBwcmludGYoInNob3J0LW5hbWU6IFwiJXNcIiwg bG9uZy1uYW1lOiBcIiVzXCIiLAorICAgICAgICAgICAgICAgICAgICAgIHZzbmRzW2ldLnNob3J0 X25hbWUsIHZzbmRzW2ldLmxvbmdfbmFtZSk7CisgICAgICAgICAgICAgICBwcmludF9wYXJhbXMo JnZzbmRzW2ldLnBhcmFtcyk7CisKKyAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCB2c25k aW5mby5udW1fdnNuZF9wY21zOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICBsaWJ4bF92c25k X3BjbSAqcGNtID0gJnZzbmRzW2ldLnBjbXNbal07CisKKyAgICAgICAgICAgICAgICAgICBwcmlu dGYoIlx0cGNtOiAlZCwgbmFtZTogXCIlc1wiIiwgaiwgcGNtLT5uYW1lKTsKKyAgICAgICAgICAg ICAgICAgICBwcmludF9wYXJhbXMoJnBjbS0+cGFyYW1zKTsKKworICAgICAgICAgICAgICAgICAg IGZvcihrID0gMDsgayA8IHZzbmRzW2ldLnBjbXNbal0ubnVtX3ZzbmRfc3RyZWFtczsgaysrKSB7 CisgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX3ZzbmRfc3RyZWFtICpzdHJlYW0gPSAmdnNu ZHNbaV0ucGNtc1tqXS5zdHJlYW1zW2tdOworICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9z dHJlYW1pbmZvICppbmZvID0gJnZzbmRpbmZvLnBjbXNbal0uc3RyZWFtc1trXTsKKworICAgICAg ICAgICAgICAgICAgICAgICBwcmludGYoIlx0XHRzdHJlYW06ICVkLCBpZDogJXUsIHR5cGU6ICVz IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGssIHN0cmVhbS0+aWQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF92c25kX3N0cmVhbV90eXBlX3RvX3N0cmluZyhz dHJlYW0tPnR5cGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRfcGFyYW1zKCZzdHJl YW0tPnBhcmFtcyk7CisgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXHRcdFx0ZXZlbnQt Y2hhbm5lbDogJWQsIHJpbmctcmVmOiAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGluZm8tPnJlcV9ldnRjaCwgaW5mby0+cmVxX3JyZWYpOworICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfQorICAgICAgICAgICBsaWJ4bF92c25k aW5mb19kaXNwb3NlKCZ2c25kaW5mbyk7CisgICAgICAgfQorICAgICAgIGxpYnhsX2RldmljZV92 c25kX2xpc3RfZnJlZSh2c25kcywgbik7CisgICB9CisgICByZXR1cm4gMDsKK30KKworaW50IG1h aW5fdnNuZGRldGFjaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgdWludDMyX3QgZG9t aWQsIGRldmlkOworICAgIGludCBvcHQsIHJjOworICAgIGxpYnhsX2RldmljZV92c25kIHZzbmQ7 CisKKyAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAiIiwgTlVMTCwgInZzbmQtZGV0YWNoIiwg MikgeworICAgICAgICAvKiBObyBvcHRpb25zICovCisgICAgfQorCisgICAgZG9taWQgPSBmaW5k X2RvbWFpbihhcmd2W29wdGluZCsrXSk7CisgICAgZGV2aWQgPSBhdG9pKGFyZ3Zbb3B0aW5kKytd KTsKKworICAgIGxpYnhsX2RldmljZV92c25kX2luaXQoJnZzbmQpOworCisgICAgaWYgKGxpYnhs X2RldmlkX3RvX2RldmljZV92c25kKGN0eCwgZG9taWQsIGRldmlkLCAmdnNuZCkpIHsKKyAgICAg ICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogRGV2aWNlICVkIG5vdCBjb25uZWN0ZWQuXG4iLCBk ZXZpZCk7CisgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgZ290byBvdXQ7CisgICAg fQorCisgICAgcmMgPSBsaWJ4bF9kZXZpY2VfdnNuZF9yZW1vdmUoY3R4LCBkb21pZCwgJnZzbmQs IDApOworICAgIGlmIChyYykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImxpYnhsX2Rldmlj ZV92c25kX3JlbW92ZSBmYWlsZWQuXG4iKTsKKyAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAg ICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICByYyA9IDA7CisKK291dDoKKyAgICBsaWJ4bF9k ZXZpY2VfdnNuZF9kaXNwb3NlKCZ2c25kKTsKKyAgICByZXR1cm4gcmM7Cit9CisKKworLyoKKyAq IExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiBp bmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwotLSAKMi43LjQKCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBs aXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2 ZWwK