From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Grytsov Subject: [PATCH 5/6] xl: add vkb config parser and CLI Date: Thu, 5 Oct 2017 12:07:10 +0300 Message-ID: <1507194431-17588-6-git-send-email-al1img@gmail.com> References: <1507194431-17588-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.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1e027s-00024y-SV for xen-devel@lists.xenproject.org; Thu, 05 Oct 2017 09:07:29 +0000 Received: by mail-lf0-f67.google.com with SMTP id q132so5525883lfe.4 for ; Thu, 05 Oct 2017 02:07:24 -0700 (PDT) In-Reply-To: <1507194431-17588-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 RnJvbTogT2xla3NhbmRyIEdyeXRzb3YgPG9sZWtzYW5kcl9ncnl0c292QGVwYW0uY29tPgoKU2ln bmVkLW9mZi1ieTogT2xla3NhbmRyIEdyeXRzb3YgPG9sZWtzYW5kcl9ncnl0c292QGVwYW0uY29t PgotLS0KIHRvb2xzL3hsL01ha2VmaWxlICAgICAgfCAgIDIgKy0KIHRvb2xzL3hsL3hsLmggICAg ICAgICAgfCAgIDMgKysKIHRvb2xzL3hsL3hsX2NtZHRhYmxlLmMgfCAgMTUgKysrKysrCiB0b29s cy94bC94bF9wYXJzZS5jICAgIHwgIDc3ICsrKysrKysrKysrKysrKysrKysrKysrKystLQogdG9v bHMveGwveGxfcGFyc2UuaCAgICB8ICAgMiArLQogdG9vbHMveGwveGxfdmtiLmMgICAgICB8IDE0 MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA2IGZp bGVzIGNoYW5nZWQsIDIzNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IHRvb2xzL3hsL3hsX3ZrYi5jCgpkaWZmIC0tZ2l0IGEvdG9vbHMveGwvTWFrZWZp bGUgYi90b29scy94bC9NYWtlZmlsZQppbmRleCA2NmJkYmRlLi4yNzY5Mjk1IDEwMDY0NAotLS0g YS90b29scy94bC9NYWtlZmlsZQorKysgYi90b29scy94bC9NYWtlZmlsZQpAQCAtMjIsNyArMjIs NyBAQCBYTF9PQkpTICs9IHhsX3Z0cG0ubyB4bF9ibG9jay5vIHhsX25pYy5vIHhsX3VzYi5vCiBY TF9PQkpTICs9IHhsX3NjaGVkLm8geGxfcGNpLm8geGxfdmNwdS5vIHhsX2Nkcm9tLm8geGxfbWVt Lm8KIFhMX09CSlMgKz0geGxfaW5mby5vIHhsX2NvbnNvbGUubyB4bF9taXNjLm8KIFhMX09CSlMg Kz0geGxfdm1jb250cm9sLm8geGxfc2F2ZXJlc3RvcmUubyB4bF9taWdyYXRlLm8KLVhMX09CSlMg Kz0geGxfdmRpc3BsLm8geGxfdnNuZC5vCitYTF9PQkpTICs9IHhsX3ZkaXNwbC5vIHhsX3ZzbmQu byB4bF92a2IubwogCiAkKFhMX09CSlMpOiBDRkxBR1MgKz0gJChDRkxBR1NfbGlieGVudG9vbGxv ZykKICQoWExfT0JKUyk6IENGTEFHUyArPSAkKENGTEFHU19YTCkKZGlmZiAtLWdpdCBhL3Rvb2xz L3hsL3hsLmggYi90b29scy94bC94bC5oCmluZGV4IDcwM2NhYTYuLjgyNmU5YzEgMTAwNjQ0Ci0t LSBhL3Rvb2xzL3hsL3hsLmgKKysrIGIvdG9vbHMveGwveGwuaApAQCAtMTcwLDYgKzE3MCw5IEBA IGludCBtYWluX3Z0cG1kZXRhY2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKIGludCBtYWluX3Zk aXNwbGF0dGFjaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwogaW50IG1haW5fdmRpc3BsbGlzdChp bnQgYXJnYywgY2hhciAqKmFyZ3YpOwogaW50IG1haW5fdmRpc3BsZGV0YWNoKGludCBhcmdjLCBj aGFyICoqYXJndik7CitpbnQgbWFpbl92a2JhdHRhY2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsK K2ludCBtYWluX3ZrYmxpc3QoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2ludCBtYWluX3ZrYmRl dGFjaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwogaW50IG1haW5fdnNuZGF0dGFjaChpbnQgYXJn YywgY2hhciAqKmFyZ3YpOwogaW50IG1haW5fdnNuZGxpc3QoaW50IGFyZ2MsIGNoYXIgKiphcmd2 KTsKIGludCBtYWluX3ZzbmRkZXRhY2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKZGlmZiAtLWdp dCBhL3Rvb2xzL3hsL3hsX2NtZHRhYmxlLmMgYi90b29scy94bC94bF9jbWR0YWJsZS5jCmluZGV4 IDhlMTYyY2UuLmY0OTVlNTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3hsL3hsX2NtZHRhYmxlLmMKKysr IGIvdG9vbHMveGwveGxfY21kdGFibGUuYwpAQCAtMzc4LDYgKzM3OCwyMSBAQCBzdHJ1Y3QgY21k X3NwZWMgY21kX3RhYmxlW10gPSB7CiAgICAgICAiRGVzdHJveSBhIGRvbWFpbidzIHZpcnR1YWwg VFBNIGRldmljZSIsCiAgICAgICAiPERvbWFpbj4gPERldklkfHV1aWQ+IiwKICAgICB9LAorICAg IHsgInZrYi1hdHRhY2giLAorICAgICAgJm1haW5fdmtiYXR0YWNoLCAxLCAxLAorICAgICAgIkNy ZWF0ZSBhIG5ldyB2aXJ0dWFsIGtleWJvYXJkIGRldmljZSIsCisgICAgICAiPERvbWFpbj4gW2Jh Y2tlbmQtdHlwZT08QmFja2VuZFR5cGU+XSBbYmFja2VuZD08QmFja0RvbWFpbj5dIiwKKyAgICB9 LAorICAgIHsgInZrYi1saXN0IiwKKyAgICAgICZtYWluX3ZrYmxpc3QsIDAsIDAsCisgICAgICAi TGlzdCB2aXJ0dWFsIGtleWJvYXJkIGRldmljZXMgZm9yIGEgZG9tYWluIiwKKyAgICAgICI8RG9t YWluKHMpPiIsCisgICAgfSwKKyAgICB7ICJ2a2ItZGV0YWNoIiwKKyAgICAgICZtYWluX3ZrYmRl dGFjaCwgMCwgMSwKKyAgICAgICJEZXN0cm95IGEgZG9tYWluJ3MgdmlydHVhbCBrZXlib2FyZCBk ZXZpY2UiLAorICAgICAgIjxEb21haW4+IDxEZXZJZD4iLAorICAgIH0sCiAgICAgeyAidmRpc3Bs LWF0dGFjaCIsCiAgICAgICAmbWFpbl92ZGlzcGxhdHRhY2gsIDEsIDEsCiAgICAgICAiQ3JlYXRl IGEgbmV3IHZpcnR1YWwgZGlzcGxheSBkZXZpY2UiLApkaWZmIC0tZ2l0IGEvdG9vbHMveGwveGxf cGFyc2UuYyBiL3Rvb2xzL3hsL3hsX3BhcnNlLmMKaW5kZXggN2NmZDdmZC4uNWY5MDYzNCAxMDA2 NDQKLS0tIGEvdG9vbHMveGwveGxfcGFyc2UuYworKysgYi90b29scy94bC94bF9wYXJzZS5jCkBA IC0xMDk5LDYgKzEwOTksNzUgQEAgc3RhdGljIHZvaWQgcGFyc2VfdnNuZF9jb25maWcoY29uc3Qg WExVX0NvbmZpZyAqY29uZmlnLAogICAgIH0KIH0KIAoraW50IHBhcnNlX3ZrYl9jb25maWcobGli eGxfZGV2aWNlX3ZrYiAqdmtiLCBjaGFyICp0b2tlbikKK3sKKyAgICBjaGFyICpvcGFyZzsKKwor ICAgIGlmIChNQVRDSF9PUFRJT04oImJhY2tlbmQiLCB0b2tlbiwgb3BhcmcpKSB7CisgICAgICAg IHZrYi0+YmFja2VuZF9kb21uYW1lID0gc3RyZHVwKG9wYXJnKTsKKyAgICB9IGVsc2UgaWYgKE1B VENIX09QVElPTigiYmFja2VuZC10eXBlIiwgdG9rZW4sIG9wYXJnKSkgeworICAgICAgICBsaWJ4 bF92a2JfYmFja2VuZCBiYWNrZW5kX3R5cGU7CisgICAgICAgIGlmIChsaWJ4bF92a2JfYmFja2Vu ZF9mcm9tX3N0cmluZyhvcGFyZywgJmJhY2tlbmRfdHlwZSkpIHsKKyAgICAgICAgICAgIGZwcmlu dGYoc3RkZXJyLCAiVW5rbm93biBiYWNrZW5kX3R5cGUgXCIlc1wiIGluIHZrYiBzcGVjXG4iLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wYXJnKTsKKyAgICAgICAgICAgIHJldHVybiAt MTsKKyAgICAgICAgfQorICAgICAgICB2a2ItPmJhY2tlbmRfdHlwZSA9IGJhY2tlbmRfdHlwZTsK KyAgICB9IGVsc2UgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gc3RyaW5nIFwi JXNcIiBpbiB2a2Igc3BlY1xuIiwgdG9rZW4pOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQor CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX3ZrYl9saXN0KGNvbnN0IFhM VV9Db25maWcgKmNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RvbWFp bl9jb25maWcgKmRfY29uZmlnKQoreworICAgIFhMVV9Db25maWdMaXN0ICp2a2JzOworICAgIGNv bnN0IGNoYXIgKml0ZW07CisgICAgY2hhciAqYnVmID0gTlVMTDsKKyAgICBpbnQgcmM7CisKKyAg ICBpZiAoIXhsdV9jZmdfZ2V0X2xpc3QgKGNvbmZpZywgInZrYiIsICZ2a2JzLCAwLCAwKSkgewor ICAgICAgICBpbnQgZW50cnkgPSAwOworICAgICAgICB3aGlsZSAoKGl0ZW0gPSB4bHVfY2ZnX2dl dF9saXN0aXRlbSh2a2JzLCBlbnRyeSkpICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGxpYnhsX2Rl dmljZV92a2IgKnZrYjsKKyAgICAgICAgICAgIGNoYXIgKnA7CisKKyAgICAgICAgICAgIHZrYiA9 IEFSUkFZX0VYVEVORF9JTklUKGRfY29uZmlnLT52a2JzLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZF9jb25maWctPm51bV92a2JzLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZrYl9pbml0KTsKKworICAgICAgICAgICAgYnVm ID0gc3RyZHVwKGl0ZW0pOworCisgICAgICAgICAgICBwID0gc3RydG9rIChidWYsICIsIik7Cisg ICAgICAgICAgICB3aGlsZSAocCAhPSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgIHdoaWxlICgqcCA9PSAnICcpIHArKzsKKworICAgICAgICAgICAgICAgIHJjID0gcGFyc2Vf dmtiX2NvbmZpZyh2a2IsIHApOworICAgICAgICAgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisK KyAgICAgICAgICAgICAgICBwID0gc3RydG9rIChOVUxMLCAiLCIpOworICAgICAgICAgICAgfQor CisgICAgICAgICAgICBpZiAodmtiLT5iYWNrZW5kX3R5cGUgPT0gTElCWExfVktCX0JBQ0tFTkRf VU5LTk9XTikgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiYmFja2VuZC10eXBl IHNob3VsZCBiZSBzZXQgaW4gdmtiIHNwZWNcbiIpOworICAgICAgICAgICAgICAgIHJjID0gLTE7 IGdvdG8gb3V0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbnRyeSsrOworICAgICAg ICB9CisgICAgfQorCisgICAgcmMgPSAwOworCitvdXQ6CisgICAgZnJlZShidWYpOworICAgIGlm IChyYykgZXhpdChFWElUX0ZBSUxVUkUpOworfQorCiB2b2lkIHBhcnNlX2NvbmZpZ19kYXRhKGNv bnN0IGNoYXIgKmNvbmZpZ19zb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIgKmNvbmZpZ19kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29uZmlnX2xlbiwK QEAgLTE5NDEsNyArMjAxMCw3IEBAIHNraXBfbmljOgogICAgICAgICAgICAgdmtiID0gQVJSQVlf RVhURU5EX0lOSVQoZF9jb25maWctPnZrYnMsIGRfY29uZmlnLT5udW1fdmticywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92a2JfaW5pdCk7CiAKLSAg ICAgICAgICAgIHZrYi0+YmFja2VuZF90eXBlID0gTElCWExfVktCRF9CQUNLRU5EX1FFTVU7Cisg ICAgICAgICAgICB2a2ItPmJhY2tlbmRfdHlwZSA9IExJQlhMX1ZLQl9CQUNLRU5EX1FFTVU7CiAK ICAgICAgICAgICAgIHAgPSBzdHJ0b2soYnVmMiwgIiwiKTsKICAgICAgICAgICAgIGlmICghcCkK QEAgLTIyNzQsNyArMjM0Myw3IEBAIHNraXBfdXNiZGV2OgogICAgICAgICAgICAgdmtiID0gQVJS QVlfRVhURU5EX0lOSVQoZF9jb25maWctPnZrYnMsIGRfY29uZmlnLT5udW1fdmticywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92a2JfaW5pdCk7CiAK LSAgICAgICAgICAgIHZrYi0+YmFja2VuZF90eXBlID0gTElCWExfVktCRF9CQUNLRU5EX1FFTVU7 CisgICAgICAgICAgICB2a2ItPmJhY2tlbmRfdHlwZSA9IExJQlhMX1ZLQl9CQUNLRU5EX1FFTVU7 CiAKICAgICAgICAgICAgIHBhcnNlX3RvcF9sZXZlbF92bmNfb3B0aW9ucyhjb25maWcsICZ2ZmIt PnZuYyk7CiAgICAgICAgICAgICBwYXJzZV90b3BfbGV2ZWxfc2RsX29wdGlvbnMoY29uZmlnLCAm dmZiLT5zZGwpOwpAQCAtMjQyMyw3ICsyNDkyLDkgQEAgc2tpcF91c2JkZXY6CiAgICAgICAgICAg ICAgICAgICAgICJVbmtub3duIGdpY192ZXJzaW9uIFwiJXNcIiBzcGVjaWZpZWRcbiIsIGJ1Zik7 CiAgICAgICAgICAgICBleGl0KC1FUlJPUl9GQUlMKTsKICAgICAgICAgfQotICAgICB9CisgICAg fQorCisgICAgcGFyc2VfdmtiX2xpc3QoY29uZmlnLCBkX2NvbmZpZyk7CiAKICAgICB4bHVfY2Zn X2Rlc3Ryb3koY29uZmlnKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3hsL3hsX3BhcnNlLmggYi90 b29scy94bC94bF9wYXJzZS5oCmluZGV4IDlhOTQ4ZWEuLjE5ZjQ1M2EgMTAwNjQ0Ci0tLSBhL3Rv b2xzL3hsL3hsX3BhcnNlLmgKKysrIGIvdG9vbHMveGwveGxfcGFyc2UuaApAQCAtMzUsNyArMzUs NyBAQCBpbnQgcGFyc2VfY3B1cmFuZ2UoY29uc3QgY2hhciAqY3B1LCBsaWJ4bF9iaXRtYXAgKmNw dW1hcCk7CiBpbnQgcGFyc2VfbmljX2NvbmZpZyhsaWJ4bF9kZXZpY2VfbmljICpuaWMsIFhMVV9D b25maWcgKipjb25maWcsIGNoYXIgKnRva2VuKTsKIGludCBwYXJzZV92ZGlzcGxfY29uZmlnKGxp YnhsX2RldmljZV92ZGlzcGwgKnZkaXNwbCwgY2hhciAqdG9rZW4pOwogaW50IHBhcnNlX3ZzbmRf aXRlbShsaWJ4bF9kZXZpY2VfdnNuZCAqdnNuZCwgY29uc3QgY2hhciAqc3BlYyk7Ci0KK2ludCBw YXJzZV92a2JfY29uZmlnKGxpYnhsX2RldmljZV92a2IgKnZrYiwgY2hhciAqdG9rZW4pOwogaW50 IG1hdGNoX29wdGlvbl9zaXplKGNvbnN0IGNoYXIgKnByZWZpeCwgc2l6ZV90IGxlbiwKICAgICAg ICAgICAgICAgICAgICAgICBjaGFyICphcmcsIGNoYXIgKiphcmdvcHQpOwogI2RlZmluZSBNQVRD SF9PUFRJT04ocHJlZml4LCBhcmcsIG9wYXJnKSBcCmRpZmYgLS1naXQgYS90b29scy94bC94bF92 a2IuYyBiL3Rvb2xzL3hsL3hsX3ZrYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjZlYzRiMjgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy94bC94bF92a2IuYwpAQCAtMCww ICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBFUEFNIFN5c3RlbXMgSW5jLgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMi4xIG9ubHkuIHdpdGggdGhlIHNwZWNpYWwKKyAq IGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiBmaWxlIExJQ0VOU0UuCisgKgorICog VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisj aW5jbHVkZSA8bGlieGwuaD4KKyNpbmNsdWRlIDxsaWJ4bF91dGlscy5oPgorI2luY2x1ZGUgPGxp YnhsdXRpbC5oPgorCisjaW5jbHVkZSAieGwuaCIKKyNpbmNsdWRlICJ4bF91dGlscy5oIgorI2lu Y2x1ZGUgInhsX3BhcnNlLmgiCisKK2ludCBtYWluX3ZrYmF0dGFjaChpbnQgYXJnYywgY2hhciAq KmFyZ3YpCit7CisgICAgaW50IG9wdDsKKyAgICBpbnQgcmM7CisgICAgdWludDMyX3QgZG9taWQ7 CisgICAgbGlieGxfZGV2aWNlX3ZrYiB2a2I7CisKKyAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0 LCAiIiwgTlVMTCwgInZrYi1hdHRhY2giLCAyKSB7CisgICAgICAgIC8qIE5vIG9wdGlvbnMgKi8K KyAgICB9CisKKyAgICBsaWJ4bF9kZXZpY2VfdmtiX2luaXQoJnZrYik7CisgICAgZG9taWQgPSBm aW5kX2RvbWFpbihhcmd2W29wdGluZCsrXSk7CisKKyAgICBmb3IgKGFyZ3YgKz0gb3B0aW5kLCBh cmdjIC09IG9wdGluZDsgYXJnYyA+IDA7ICsrYXJndiwgLS1hcmdjKSB7CisgICAgICAgIHJjID0g cGFyc2VfdmtiX2NvbmZpZygmdmtiLCAqYXJndik7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7 CisgICAgfQorCisgICAgaWYgKGRyeXJ1bl9vbmx5KSB7CisgICAgICAgIGNoYXIgKmpzb24gPSBs aWJ4bF9kZXZpY2VfdmtiX3RvX2pzb24oY3R4LCAmdmtiKTsKKyAgICAgICAgcHJpbnRmKCJ2a2I6 ICVzXG4iLCBqc29uKTsKKyAgICAgICAgZnJlZShqc29uKTsKKyAgICAgICAgZ290byBvdXQ7Cisg ICAgfQorCisgICAgaWYgKGxpYnhsX2RldmljZV92a2JfYWRkKGN0eCwgZG9taWQsICZ2a2IsIDAp KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAibGlieGxfZGV2aWNlX3ZrYl9hZGQgZmFpbGVk LlxuIik7CisgICAgICAgIHJjID0gRVJST1JfRkFJTDsgZ290byBvdXQ7CisgICAgfQorCisgICAg cmMgPSAwOworCitvdXQ6CisgICAgbGlieGxfZGV2aWNlX3ZrYl9kaXNwb3NlKCZ2a2IpOworICAg IHJldHVybiByYzsKK30KKworaW50IG1haW5fdmtibGlzdChpbnQgYXJnYywgY2hhciAqKmFyZ3Yp Cit7CisgICAgaW50IG9wdDsKKyAgICBsaWJ4bF9kZXZpY2VfdmtiICp2a2JzOworICAgIGxpYnhs X3ZrYmluZm8gdmtiaW5mbzsKKyAgICBpbnQgbmIsIGk7CisKKyAgICBTV0lUQ0hfRk9SRUFDSF9P UFQob3B0LCAiIiwgTlVMTCwgInZrYi1saXN0IiwgMSkgeworICAgICAgICAvKiBObyBvcHRpb25z ICovCisgICAgfQorCisgICAgLyogICAgICBJZHggIEJFICAgSGRsICBTdGEgIGV2Y2ggcmVmICBC RS1wYXRoICovCisgICAgcHJpbnRmKCIlLTNzICUtMnMgJS02cyAlLTVzICUtNnMgJTZzICUtMzBz XG4iLAorICAgICAgICAgICAiSWR4IiwgIkJFIiwgImhhbmRsZSIsICJzdGF0ZSIsICJldnQtY2gi LCAicmVmIiwgIkJFLXBhdGgiKTsKKyAgICBmb3IgKGFyZ3YgKz0gb3B0aW5kLCBhcmdjIC09IG9w dGluZDsgYXJnYyA+IDA7IC0tYXJnYywgKythcmd2KSB7CisgICAgICAgIHVpbnQzMl90IGRvbWlk ID0gZmluZF9kb21haW4oKmFyZ3YpOworICAgICAgICB2a2JzID0gbGlieGxfZGV2aWNlX3ZrYl9s aXN0KGN0eCwgZG9taWQsICZuYik7CisgICAgICAgIGlmICghdmticykgeworICAgICAgICAgICAg Y29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5iOyArK2kpIHsK KyAgICAgICAgICAgIGlmICghbGlieGxfZGV2aWNlX3ZrYl9nZXRpbmZvKGN0eCwgZG9taWQsICZ2 a2JzW2ldLCAmdmtiaW5mbykpIHsKKyAgICAgICAgICAgICAgICAvKiBJZHggQkUgKi8KKyAgICAg ICAgICAgICAgICBwcmludGYoIiUtM2QgJS0yZCAiLCB2a2JpbmZvLmRldmlkLCB2a2JpbmZvLmJh Y2tlbmRfaWQpOworICAgICAgICAgICAgICAgIC8qIEhkbCAgU3RhICBldmNoIHJlZiAgQkUtcGF0 aCAqLworICAgICAgICAgICAgICAgIHByaW50ZigiJTZkICU1ZCAlNmQgJTZkICUtMzBzXG4iLAor ICAgICAgICAgICAgICAgICAgICAgICAgdmtiaW5mby5kZXZpZCwgdmtiaW5mby5zdGF0ZSwgdmti aW5mby5ldnRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZrYmluZm8ucnJlZiwgdmtiaW5m by5iYWNrZW5kKTsKKyAgICAgICAgICAgICAgICBsaWJ4bF92a2JpbmZvX2Rpc3Bvc2UoJnZrYmlu Zm8pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGxpYnhsX2RldmljZV92a2Jf bGlzdF9mcmVlKHZrYnMsIG5iKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBtYWlu X3ZrYmRldGFjaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgdWludDMyX3QgZG9taWQs IGRldmlkOworICAgIGludCBvcHQsIHJjOworICAgIGxpYnhsX2RldmljZV92a2IgdmtiOworCisg ICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgIiIsIE5VTEwsICJ2a2ItZGV0YWNoIiwgMikgewor ICAgICAgICAvKiBObyBvcHRpb25zICovCisgICAgfQorCisgICAgZG9taWQgPSBmaW5kX2RvbWFp bihhcmd2W29wdGluZCsrXSk7CisgICAgZGV2aWQgPSBhdG9pKGFyZ3Zbb3B0aW5kKytdKTsKKwor ICAgIGxpYnhsX2RldmljZV92a2JfaW5pdCgmdmtiKTsKKworICAgIGlmIChsaWJ4bF9kZXZpZF90 b19kZXZpY2VfdmtiKGN0eCwgZG9taWQsIGRldmlkLCAmdmtiKSkgeworICAgICAgICBmcHJpbnRm KHN0ZGVyciwgIkVycm9yOiBEZXZpY2UgJWQgbm90IGNvbm5lY3RlZC5cbiIsIGRldmlkKTsKKyAg ICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBy YyA9IGxpYnhsX2RldmljZV92a2JfcmVtb3ZlKGN0eCwgZG9taWQsICZ2a2IsIDApOworICAgIGlm IChyYykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImxpYnhsX2RldmljZV92a2JfcmVtb3Zl IGZhaWxlZC5cbiIpOworICAgICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgIGdvdG8gb3V0 OworICAgIH0KKworICAgIHJjID0gMDsKKworb3V0OgorICAgIGxpYnhsX2RldmljZV92a2JfZGlz cG9zZSgmdmtiKTsKKyAgICByZXR1cm4gcmM7Cit9CisKKworLyoKKyAqIExvY2FsIHZhcmlhYmxl czoKKyAqIG1vZGU6IEMKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiBpbmRlbnQtdGFicy1tb2Rl OiBuaWwKKyAqIEVuZDoKKyAqLwotLSAKMi43LjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBs aXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK