From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7D3C9C33CB1 for ; Fri, 17 Jan 2020 15:58:31 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 415A92064C for ; Fri, 17 Jan 2020 15:58:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=citrix.com header.i=@citrix.com header.b="aopqZ255" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 415A92064C Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=citrix.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1isU0m-0002fw-4H; Fri, 17 Jan 2020 15:58:16 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1isU0l-0002fV-BS for xen-devel@lists.xenproject.org; Fri, 17 Jan 2020 15:58:15 +0000 X-Inumbo-ID: 1e6a4566-3942-11ea-b833-bc764e2007e4 Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 1e6a4566-3942-11ea-b833-bc764e2007e4; Fri, 17 Jan 2020 15:57:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1579276672; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=uXFfchwDKdeHifUh7fNkbcVxcXpXnJ9DhhwXwM9KJYM=; b=aopqZ255ylCYejAxE+0As/rRHNgwaRttRVlwAlhVG5a+sz1LMo0ZLGnF tSZ0FEEmqbrVddeyTvn76oudCHXSs0mB4YlqSSmzpqHR9TAQdeHSL4FpE Yv35ANphkXGTjQm7r2SS5p8INGGKQ0ZyGZa0C6PlfLdBJH1gshqTM818Q A=; Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none; spf=None smtp.pra=george.dunlap@citrix.com; spf=Pass smtp.mailfrom=George.Dunlap@citrix.com; spf=None smtp.helo=postmaster@mail.citrix.com Received-SPF: None (esa4.hc3370-68.iphmx.com: no sender authenticity information available from domain of george.dunlap@citrix.com) identity=pra; client-ip=162.221.158.21; receiver=esa4.hc3370-68.iphmx.com; envelope-from="George.Dunlap@citrix.com"; x-sender="george.dunlap@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa4.hc3370-68.iphmx.com: domain of George.Dunlap@citrix.com designates 162.221.158.21 as permitted sender) identity=mailfrom; client-ip=162.221.158.21; receiver=esa4.hc3370-68.iphmx.com; envelope-from="George.Dunlap@citrix.com"; x-sender="George.Dunlap@citrix.com"; x-conformance=sidf_compatible; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ip4:168.245.78.127 ~all" Received-SPF: None (esa4.hc3370-68.iphmx.com: no sender authenticity information available from domain of postmaster@mail.citrix.com) identity=helo; client-ip=162.221.158.21; receiver=esa4.hc3370-68.iphmx.com; envelope-from="George.Dunlap@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: itp8s+tDMuAVROX6M9HA4d+yo7zZWWbNndqu7pQbfz8SRvDyd8eLdJQoYiqlRL6GFH0sV6Irxq 3bAjwh4pwQzXwguGr6eFYjWhZm8b9VqP00Uvhtk6hyFjTacrcWMLuT9VWjB7uCSZmwTNYZz4+Y pGUPHF8sqIvqgBddHJKgPJ+ntgUpNC99aJhE58Z0ugil/QWwXcXf4MTjHZFsq8rOrQq2wj8jO8 eG7A6Ph7VskoZajj+8Xx9iu5NHvgMIPDzL9DyT8cX6+GIeig7ywsw/iFrtkPRS2TrgaGPxpvA3 Ih0= X-SBRS: 2.7 X-MesageID: 11674367 X-Ironport-Server: esa4.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.70,330,1574139600"; d="scan'208";a="11674367" From: George Dunlap To: Date: Fri, 17 Jan 2020 15:57:27 +0000 Message-ID: <20200117155734.1067550-1-george.dunlap@citrix.com> X-Mailer: git-send-email 2.24.1 MIME-Version: 1.0 Subject: [Xen-devel] [PATCH v3 1/8] golang/xenlight: Don't try to marshall zero-length arrays in fromC X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Nick Rosbrook , George Dunlap Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" VGhlIGN1cnJlbnQgZnJvbUMgYXJyYXkgY29kZSB3aWxsIGRvIHRoZSAibWFnaWMiIGNhc3Rpbmcg YW5kCm1hcnRpYWxsaW5nIGV2ZW4gd2hlbiBudW1fZm9vIHZhcmlhYmxlIGlzIDAuICBHbyBjcmFz aGVzIHdoZW4gZG9pbmcKdGhlIGNhc3QuCgpPbmx5IGRvIGFycmF5IG1hcnNoYWxsaW5nIGlmIHRo ZSBudW1iZXIgb2YgZWxlbWVudHMgaXMgbm9uLXplcm87Cm90aGVyd2lzZSwgbGVhdmUgdGhlIHRh cmdldCBwb2ludGVyIGVtcHR5IChuaWwgZm9yIEdvIHNsaWNlcywgTlVMTCBmb3IKQyBhcnJheXMp LgoKU2lnbmVkLW9mZi1ieTogR2VvcmdlIER1bmxhcCA8Z2VvcmdlLmR1bmxhcEBjaXRyaXguY29t PgotLS0KdjI6Ci0gUmVtb3ZlIHRvQyBwYXJ0IG9mIHRoaXMsIHdoaWNoIGhhcyBiZWVuIGZvbGRl ZCBpbnRvIE5pY2sncyBwYXRjaAogIHNlcmllcy4KCkNDOiBOaWNrIFJvc2Jyb29rIDxyb3Nicm9v a25AYWluZm9zZWMuY29tPgotLS0KIHRvb2xzL2dvbGFuZy94ZW5saWdodC9nZW5nb3R5cGVzLnB5 ICB8ICAgNSArLQogdG9vbHMvZ29sYW5nL3hlbmxpZ2h0L2hlbHBlcnMuZ2VuLmdvIHwgNDUyICsr KysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAyNjEgaW5zZXJ0aW9u cygrKSwgMTk2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Rvb2xzL2dvbGFuZy94ZW5saWdo dC9nZW5nb3R5cGVzLnB5IGIvdG9vbHMvZ29sYW5nL3hlbmxpZ2h0L2dlbmdvdHlwZXMucHkKaW5k ZXggMjdlZGY2NjI0MS4uYWQyYzU3M2RhOSAxMDA2NDQKLS0tIGEvdG9vbHMvZ29sYW5nL3hlbmxp Z2h0L2dlbmdvdHlwZXMucHkKKysrIGIvdG9vbHMvZ29sYW5nL3hlbmxpZ2h0L2dlbmdvdHlwZXMu cHkKQEAgLTQxOSw3ICs0MTksOCBAQCBkZWYgeGVubGlnaHRfZ29sYW5nX2FycmF5X2Zyb21fQyh0 eSA9IE5vbmUpOgogICAgIGNsZW52YXIgICAgPSB0eS50eXBlLmxlbnZhci5uYW1lCiAgICAgZ29s ZW52YXIgICA9IHhlbmxpZ2h0X2dvbGFuZ19mbXRfbmFtZShjbGVudmFyLGV4cG9ydGVkPUZhbHNl KQogCi0gICAgcyArPSAne30gOj0gaW50KHhjLnt9KVxuJy5mb3JtYXQoZ29sZW52YXIsIGNsZW52 YXIpCisgICAgcyArPSAneC57fSA9IG5pbFxuJy5mb3JtYXQoZ29uYW1lKQorICAgIHMgKz0gJ2lm IHt9IDo9IGludCh4Yy57fSk7IHt9ID4gMCB7e1xuJy5mb3JtYXQoZ29sZW52YXIsIGNsZW52YXIs IGdvbGVudmFyKQogICAgIHMgKz0gJ3t9IDo9ICcuZm9ybWF0KGNzbGljZSkKICAgICBzICs9Jygq WzE8PDI4XUMue30pKHVuc2FmZS5Qb2ludGVyKHhjLnt9KSlbOnt9Ont9XVxuJy5mb3JtYXQoY3R5 cGVuYW1lLCBjbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBnb2xlbnZhciwgZ29sZW52YXIpCkBAIC00MzMsNyArNDM0 LDcgQEAgZGVmIHhlbmxpZ2h0X2dvbGFuZ19hcnJheV9mcm9tX0ModHkgPSBOb25lKToKICAgICAg ICAgcyArPSAnaWYgZXJyIDo9IHgue31baV0uZnJvbUMoJnYpOyBlcnIgIT0gbmlsIHt7XG4nLmZv cm1hdChnb25hbWUpCiAgICAgICAgIHMgKz0gJ3JldHVybiBlcnIgfVxuJwogCi0gICAgcyArPSAn fVxuJworICAgIHMgKz0gJ31cbn1cbicKIAogICAgIHJldHVybiBzCiAKZGlmZiAtLWdpdCBhL3Rv b2xzL2dvbGFuZy94ZW5saWdodC9oZWxwZXJzLmdlbi5nbyBiL3Rvb2xzL2dvbGFuZy94ZW5saWdo dC9oZWxwZXJzLmdlbi5nbwppbmRleCBiOWE3ZTgyOGEwLi44ODk4MDdkOTI4IDEwMDY0NAotLS0g YS90b29scy9nb2xhbmcveGVubGlnaHQvaGVscGVycy5nZW4uZ28KKysrIGIvdG9vbHMvZ29sYW5n L3hlbmxpZ2h0L2hlbHBlcnMuZ2VuLmdvCkBAIC02MjMsMTIgKzYyMywxNCBAQCBmdW5jICh4ICpT Y2hlZFBhcmFtcykgdG9DKHhjICpDLmxpYnhsX3NjaGVkX3BhcmFtcykgKGVyciBlcnJvcikgewog CiBmdW5jICh4ICpWY3B1U2NoZWRQYXJhbXMpIGZyb21DKHhjICpDLmxpYnhsX3ZjcHVfc2NoZWRf cGFyYW1zKSBlcnJvciB7CiAJeC5TY2hlZCA9IFNjaGVkdWxlcih4Yy5zY2hlZCkKLQludW1WY3B1 cyA6PSBpbnQoeGMubnVtX3ZjcHVzKQotCWNWY3B1cyA6PSAoKlsxIDw8IDI4XUMubGlieGxfc2No ZWRfcGFyYW1zKSh1bnNhZmUuUG9pbnRlcih4Yy52Y3B1cykpWzpudW1WY3B1czpudW1WY3B1c10K LQl4LlZjcHVzID0gbWFrZShbXVNjaGVkUGFyYW1zLCBudW1WY3B1cykKLQlmb3IgaSwgdiA6PSBy YW5nZSBjVmNwdXMgewotCQlpZiBlcnIgOj0geC5WY3B1c1tpXS5mcm9tQygmdik7IGVyciAhPSBu aWwgewotCQkJcmV0dXJuIGVycgorCXguVmNwdXMgPSBuaWwKKwlpZiBudW1WY3B1cyA6PSBpbnQo eGMubnVtX3ZjcHVzKTsgbnVtVmNwdXMgPiAwIHsKKwkJY1ZjcHVzIDo9ICgqWzEgPDwgMjhdQy5s aWJ4bF9zY2hlZF9wYXJhbXMpKHVuc2FmZS5Qb2ludGVyKHhjLnZjcHVzKSlbOm51bVZjcHVzOm51 bVZjcHVzXQorCQl4LlZjcHVzID0gbWFrZShbXVNjaGVkUGFyYW1zLCBudW1WY3B1cykKKwkJZm9y IGksIHYgOj0gcmFuZ2UgY1ZjcHVzIHsKKwkJCWlmIGVyciA6PSB4LlZjcHVzW2ldLmZyb21DKCZ2 KTsgZXJyICE9IG5pbCB7CisJCQkJcmV0dXJuIGVycgorCQkJfQogCQl9CiAJfQogCkBAIC02OTEs MTEgKzY5MywxMyBAQCBmdW5jICh4ICpEb21haW5TY2hlZFBhcmFtcykgdG9DKHhjICpDLmxpYnhs X2RvbWFpbl9zY2hlZF9wYXJhbXMpIChlcnIgZXJyb3IpIHsKIAogZnVuYyAoeCAqVm5vZGVJbmZv KSBmcm9tQyh4YyAqQy5saWJ4bF92bm9kZV9pbmZvKSBlcnJvciB7CiAJeC5NZW1rYiA9IHVpbnQ2 NCh4Yy5tZW1rYikKLQludW1EaXN0YW5jZXMgOj0gaW50KHhjLm51bV9kaXN0YW5jZXMpCi0JY0Rp c3RhbmNlcyA6PSAoKlsxIDw8IDI4XUMudWludDMyX3QpKHVuc2FmZS5Qb2ludGVyKHhjLmRpc3Rh bmNlcykpWzpudW1EaXN0YW5jZXM6bnVtRGlzdGFuY2VzXQotCXguRGlzdGFuY2VzID0gbWFrZShb XXVpbnQzMiwgbnVtRGlzdGFuY2VzKQotCWZvciBpLCB2IDo9IHJhbmdlIGNEaXN0YW5jZXMgewot CQl4LkRpc3RhbmNlc1tpXSA9IHVpbnQzMih2KQorCXguRGlzdGFuY2VzID0gbmlsCisJaWYgbnVt RGlzdGFuY2VzIDo9IGludCh4Yy5udW1fZGlzdGFuY2VzKTsgbnVtRGlzdGFuY2VzID4gMCB7CisJ CWNEaXN0YW5jZXMgOj0gKCpbMSA8PCAyOF1DLnVpbnQzMl90KSh1bnNhZmUuUG9pbnRlcih4Yy5k aXN0YW5jZXMpKVs6bnVtRGlzdGFuY2VzOm51bURpc3RhbmNlc10KKwkJeC5EaXN0YW5jZXMgPSBt YWtlKFtddWludDMyLCBudW1EaXN0YW5jZXMpCisJCWZvciBpLCB2IDo9IHJhbmdlIGNEaXN0YW5j ZXMgeworCQkJeC5EaXN0YW5jZXNbaV0gPSB1aW50MzIodikKKwkJfQogCX0KIAl4LlBub2RlID0g dWludDMyKHhjLnBub2RlKQogCWlmIGVyciA6PSB4LlZjcHVzLmZyb21DKCZ4Yy52Y3B1cyk7IGVy ciAhPSBuaWwgewpAQCAtNzYwLDIwICs3NjQsMjQgQEAgZnVuYyAoeCAqRG9tYWluQnVpbGRJbmZv KSBmcm9tQyh4YyAqQy5saWJ4bF9kb21haW5fYnVpbGRfaW5mbykgZXJyb3IgewogCWlmIGVyciA6 PSB4Lk5vZGVtYXAuZnJvbUMoJnhjLm5vZGVtYXApOyBlcnIgIT0gbmlsIHsKIAkJcmV0dXJuIGVy cgogCX0KLQludW1WY3B1SGFyZEFmZmluaXR5IDo9IGludCh4Yy5udW1fdmNwdV9oYXJkX2FmZmlu aXR5KQotCWNWY3B1SGFyZEFmZmluaXR5IDo9ICgqWzEgPDwgMjhdQy5saWJ4bF9iaXRtYXApKHVu c2FmZS5Qb2ludGVyKHhjLnZjcHVfaGFyZF9hZmZpbml0eSkpWzpudW1WY3B1SGFyZEFmZmluaXR5 Om51bVZjcHVIYXJkQWZmaW5pdHldCi0JeC5WY3B1SGFyZEFmZmluaXR5ID0gbWFrZShbXUJpdG1h cCwgbnVtVmNwdUhhcmRBZmZpbml0eSkKLQlmb3IgaSwgdiA6PSByYW5nZSBjVmNwdUhhcmRBZmZp bml0eSB7Ci0JCWlmIGVyciA6PSB4LlZjcHVIYXJkQWZmaW5pdHlbaV0uZnJvbUMoJnYpOyBlcnIg IT0gbmlsIHsKLQkJCXJldHVybiBlcnIKKwl4LlZjcHVIYXJkQWZmaW5pdHkgPSBuaWwKKwlpZiBu dW1WY3B1SGFyZEFmZmluaXR5IDo9IGludCh4Yy5udW1fdmNwdV9oYXJkX2FmZmluaXR5KTsgbnVt VmNwdUhhcmRBZmZpbml0eSA+IDAgeworCQljVmNwdUhhcmRBZmZpbml0eSA6PSAoKlsxIDw8IDI4 XUMubGlieGxfYml0bWFwKSh1bnNhZmUuUG9pbnRlcih4Yy52Y3B1X2hhcmRfYWZmaW5pdHkpKVs6 bnVtVmNwdUhhcmRBZmZpbml0eTpudW1WY3B1SGFyZEFmZmluaXR5XQorCQl4LlZjcHVIYXJkQWZm aW5pdHkgPSBtYWtlKFtdQml0bWFwLCBudW1WY3B1SGFyZEFmZmluaXR5KQorCQlmb3IgaSwgdiA6 PSByYW5nZSBjVmNwdUhhcmRBZmZpbml0eSB7CisJCQlpZiBlcnIgOj0geC5WY3B1SGFyZEFmZmlu aXR5W2ldLmZyb21DKCZ2KTsgZXJyICE9IG5pbCB7CisJCQkJcmV0dXJuIGVycgorCQkJfQogCQl9 CiAJfQotCW51bVZjcHVTb2Z0QWZmaW5pdHkgOj0gaW50KHhjLm51bV92Y3B1X3NvZnRfYWZmaW5p dHkpCi0JY1ZjcHVTb2Z0QWZmaW5pdHkgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2JpdG1hcCkodW5z YWZlLlBvaW50ZXIoeGMudmNwdV9zb2Z0X2FmZmluaXR5KSlbOm51bVZjcHVTb2Z0QWZmaW5pdHk6 bnVtVmNwdVNvZnRBZmZpbml0eV0KLQl4LlZjcHVTb2Z0QWZmaW5pdHkgPSBtYWtlKFtdQml0bWFw LCBudW1WY3B1U29mdEFmZmluaXR5KQotCWZvciBpLCB2IDo9IHJhbmdlIGNWY3B1U29mdEFmZmlu aXR5IHsKLQkJaWYgZXJyIDo9IHguVmNwdVNvZnRBZmZpbml0eVtpXS5mcm9tQygmdik7IGVyciAh PSBuaWwgewotCQkJcmV0dXJuIGVycgorCXguVmNwdVNvZnRBZmZpbml0eSA9IG5pbAorCWlmIG51 bVZjcHVTb2Z0QWZmaW5pdHkgOj0gaW50KHhjLm51bV92Y3B1X3NvZnRfYWZmaW5pdHkpOyBudW1W Y3B1U29mdEFmZmluaXR5ID4gMCB7CisJCWNWY3B1U29mdEFmZmluaXR5IDo9ICgqWzEgPDwgMjhd Qy5saWJ4bF9iaXRtYXApKHVuc2FmZS5Qb2ludGVyKHhjLnZjcHVfc29mdF9hZmZpbml0eSkpWzpu dW1WY3B1U29mdEFmZmluaXR5Om51bVZjcHVTb2Z0QWZmaW5pdHldCisJCXguVmNwdVNvZnRBZmZp bml0eSA9IG1ha2UoW11CaXRtYXAsIG51bVZjcHVTb2Z0QWZmaW5pdHkpCisJCWZvciBpLCB2IDo9 IHJhbmdlIGNWY3B1U29mdEFmZmluaXR5IHsKKwkJCWlmIGVyciA6PSB4LlZjcHVTb2Z0QWZmaW5p dHlbaV0uZnJvbUMoJnYpOyBlcnIgIT0gbmlsIHsKKwkJCQlyZXR1cm4gZXJyCisJCQl9CiAJCX0K IAl9CiAJaWYgZXJyIDo9IHguTnVtYVBsYWNlbWVudC5mcm9tQygmeGMubnVtYV9wbGFjZW1lbnQp OyBlcnIgIT0gbmlsIHsKQEAgLTc5OCwxMiArODA2LDE0IEBAIGZ1bmMgKHggKkRvbWFpbkJ1aWxk SW5mbykgZnJvbUMoeGMgKkMubGlieGxfZG9tYWluX2J1aWxkX2luZm8pIGVycm9yIHsKIAkJcmV0 dXJuIGVycgogCX0KIAl4LkJsa2RldlN0YXJ0ID0gQy5Hb1N0cmluZyh4Yy5ibGtkZXZfc3RhcnQp Ci0JbnVtVm51bWFOb2RlcyA6PSBpbnQoeGMubnVtX3ZudW1hX25vZGVzKQotCWNWbnVtYU5vZGVz IDo9ICgqWzEgPDwgMjhdQy5saWJ4bF92bm9kZV9pbmZvKSh1bnNhZmUuUG9pbnRlcih4Yy52bnVt YV9ub2RlcykpWzpudW1WbnVtYU5vZGVzOm51bVZudW1hTm9kZXNdCi0JeC5WbnVtYU5vZGVzID0g bWFrZShbXVZub2RlSW5mbywgbnVtVm51bWFOb2RlcykKLQlmb3IgaSwgdiA6PSByYW5nZSBjVm51 bWFOb2RlcyB7Ci0JCWlmIGVyciA6PSB4LlZudW1hTm9kZXNbaV0uZnJvbUMoJnYpOyBlcnIgIT0g bmlsIHsKLQkJCXJldHVybiBlcnIKKwl4LlZudW1hTm9kZXMgPSBuaWwKKwlpZiBudW1WbnVtYU5v ZGVzIDo9IGludCh4Yy5udW1fdm51bWFfbm9kZXMpOyBudW1WbnVtYU5vZGVzID4gMCB7CisJCWNW bnVtYU5vZGVzIDo9ICgqWzEgPDwgMjhdQy5saWJ4bF92bm9kZV9pbmZvKSh1bnNhZmUuUG9pbnRl cih4Yy52bnVtYV9ub2RlcykpWzpudW1WbnVtYU5vZGVzOm51bVZudW1hTm9kZXNdCisJCXguVm51 bWFOb2RlcyA9IG1ha2UoW11Wbm9kZUluZm8sIG51bVZudW1hTm9kZXMpCisJCWZvciBpLCB2IDo9 IHJhbmdlIGNWbnVtYU5vZGVzIHsKKwkJCWlmIGVyciA6PSB4LlZudW1hTm9kZXNbaV0uZnJvbUMo JnYpOyBlcnIgIT0gbmlsIHsKKwkJCQlyZXR1cm4gZXJyCisJCQl9CiAJCX0KIAl9CiAJeC5NYXhH cmFudEZyYW1lcyA9IHVpbnQzMih4Yy5tYXhfZ3JhbnRfZnJhbWVzKQpAQCAtODI4LDI2ICs4Mzgs MzIgQEAgZnVuYyAoeCAqRG9tYWluQnVpbGRJbmZvKSBmcm9tQyh4YyAqQy5saWJ4bF9kb21haW5f YnVpbGRfaW5mbykgZXJyb3IgewogCWlmIGVyciA6PSB4LlNjaGVkUGFyYW1zLmZyb21DKCZ4Yy5z Y2hlZF9wYXJhbXMpOyBlcnIgIT0gbmlsIHsKIAkJcmV0dXJuIGVycgogCX0KLQludW1Jb3BvcnRz IDo9IGludCh4Yy5udW1faW9wb3J0cykKLQljSW9wb3J0cyA6PSAoKlsxIDw8IDI4XUMubGlieGxf aW9wb3J0X3JhbmdlKSh1bnNhZmUuUG9pbnRlcih4Yy5pb3BvcnRzKSlbOm51bUlvcG9ydHM6bnVt SW9wb3J0c10KLQl4LklvcG9ydHMgPSBtYWtlKFtdSW9wb3J0UmFuZ2UsIG51bUlvcG9ydHMpCi0J Zm9yIGksIHYgOj0gcmFuZ2UgY0lvcG9ydHMgewotCQlpZiBlcnIgOj0geC5Jb3BvcnRzW2ldLmZy b21DKCZ2KTsgZXJyICE9IG5pbCB7Ci0JCQlyZXR1cm4gZXJyCisJeC5Jb3BvcnRzID0gbmlsCisJ aWYgbnVtSW9wb3J0cyA6PSBpbnQoeGMubnVtX2lvcG9ydHMpOyBudW1Jb3BvcnRzID4gMCB7CisJ CWNJb3BvcnRzIDo9ICgqWzEgPDwgMjhdQy5saWJ4bF9pb3BvcnRfcmFuZ2UpKHVuc2FmZS5Qb2lu dGVyKHhjLmlvcG9ydHMpKVs6bnVtSW9wb3J0czpudW1Jb3BvcnRzXQorCQl4LklvcG9ydHMgPSBt YWtlKFtdSW9wb3J0UmFuZ2UsIG51bUlvcG9ydHMpCisJCWZvciBpLCB2IDo9IHJhbmdlIGNJb3Bv cnRzIHsKKwkJCWlmIGVyciA6PSB4LklvcG9ydHNbaV0uZnJvbUMoJnYpOyBlcnIgIT0gbmlsIHsK KwkJCQlyZXR1cm4gZXJyCisJCQl9CiAJCX0KIAl9Ci0JbnVtSXJxcyA6PSBpbnQoeGMubnVtX2ly cXMpCi0JY0lycXMgOj0gKCpbMSA8PCAyOF1DLnVpbnQzMl90KSh1bnNhZmUuUG9pbnRlcih4Yy5p cnFzKSlbOm51bUlycXM6bnVtSXJxc10KLQl4LklycXMgPSBtYWtlKFtddWludDMyLCBudW1JcnFz KQotCWZvciBpLCB2IDo9IHJhbmdlIGNJcnFzIHsKLQkJeC5JcnFzW2ldID0gdWludDMyKHYpCisJ eC5JcnFzID0gbmlsCisJaWYgbnVtSXJxcyA6PSBpbnQoeGMubnVtX2lycXMpOyBudW1JcnFzID4g MCB7CisJCWNJcnFzIDo9ICgqWzEgPDwgMjhdQy51aW50MzJfdCkodW5zYWZlLlBvaW50ZXIoeGMu aXJxcykpWzpudW1JcnFzOm51bUlycXNdCisJCXguSXJxcyA9IG1ha2UoW111aW50MzIsIG51bUly cXMpCisJCWZvciBpLCB2IDo9IHJhbmdlIGNJcnFzIHsKKwkJCXguSXJxc1tpXSA9IHVpbnQzMih2 KQorCQl9CiAJfQotCW51bUlvbWVtIDo9IGludCh4Yy5udW1faW9tZW0pCi0JY0lvbWVtIDo9ICgq WzEgPDwgMjhdQy5saWJ4bF9pb21lbV9yYW5nZSkodW5zYWZlLlBvaW50ZXIoeGMuaW9tZW0pKVs6 bnVtSW9tZW06bnVtSW9tZW1dCi0JeC5Jb21lbSA9IG1ha2UoW11Jb21lbVJhbmdlLCBudW1Jb21l bSkKLQlmb3IgaSwgdiA6PSByYW5nZSBjSW9tZW0gewotCQlpZiBlcnIgOj0geC5Jb21lbVtpXS5m cm9tQygmdik7IGVyciAhPSBuaWwgewotCQkJcmV0dXJuIGVycgorCXguSW9tZW0gPSBuaWwKKwlp ZiBudW1Jb21lbSA6PSBpbnQoeGMubnVtX2lvbWVtKTsgbnVtSW9tZW0gPiAwIHsKKwkJY0lvbWVt IDo9ICgqWzEgPDwgMjhdQy5saWJ4bF9pb21lbV9yYW5nZSkodW5zYWZlLlBvaW50ZXIoeGMuaW9t ZW0pKVs6bnVtSW9tZW06bnVtSW9tZW1dCisJCXguSW9tZW0gPSBtYWtlKFtdSW9tZW1SYW5nZSwg bnVtSW9tZW0pCisJCWZvciBpLCB2IDo9IHJhbmdlIGNJb21lbSB7CisJCQlpZiBlcnIgOj0geC5J b21lbVtpXS5mcm9tQygmdik7IGVyciAhPSBuaWwgeworCQkJCXJldHVybiBlcnIKKwkJCX0KIAkJ fQogCX0KIAlpZiBlcnIgOj0geC5DbGFpbU1vZGUuZnJvbUMoJnhjLmNsYWltX21vZGUpOyBlcnIg IT0gbmlsIHsKQEAgLTg3OCwxOCArODk0LDE4IEBAIGZ1bmMgKHggKkRvbWFpbkJ1aWxkSW5mbykg ZnJvbUMoeGMgKkMubGlieGxfZG9tYWluX2J1aWxkX2luZm8pIGVycm9yIHsKIAl4LlRlZSA9IFRl ZVR5cGUoeGMudGVlKQogCXguVHlwZSA9IERvbWFpblR5cGUoeGMuX3R5cGUpCiAJc3dpdGNoIHgu VHlwZSB7Ci0JY2FzZSBEb21haW5UeXBlUHY6Ci0JCXZhciB0eXBlUHYgRG9tYWluQnVpbGRJbmZv VHlwZVVuaW9uUHYKLQkJaWYgZXJyIDo9IHR5cGVQdi5mcm9tQyh4Yyk7IGVyciAhPSBuaWwgewot CQkJcmV0dXJuIGVycgotCQl9Ci0JCXguVHlwZVVuaW9uID0gdHlwZVB2CiAJY2FzZSBEb21haW5U eXBlSHZtOgogCQl2YXIgdHlwZUh2bSBEb21haW5CdWlsZEluZm9UeXBlVW5pb25Idm0KIAkJaWYg ZXJyIDo9IHR5cGVIdm0uZnJvbUMoeGMpOyBlcnIgIT0gbmlsIHsKIAkJCXJldHVybiBlcnIKIAkJ fQogCQl4LlR5cGVVbmlvbiA9IHR5cGVIdm0KKwljYXNlIERvbWFpblR5cGVQdjoKKwkJdmFyIHR5 cGVQdiBEb21haW5CdWlsZEluZm9UeXBlVW5pb25QdgorCQlpZiBlcnIgOj0gdHlwZVB2LmZyb21D KHhjKTsgZXJyICE9IG5pbCB7CisJCQlyZXR1cm4gZXJyCisJCX0KKwkJeC5UeXBlVW5pb24gPSB0 eXBlUHYKIAljYXNlIERvbWFpblR5cGVQdmg6CiAJCXZhciB0eXBlUHZoIERvbWFpbkJ1aWxkSW5m b1R5cGVVbmlvblB2aAogCQlpZiBlcnIgOj0gdHlwZVB2aC5mcm9tQyh4Yyk7IGVyciAhPSBuaWwg ewpAQCAtMjE4NywxMiArMjIwMywxNCBAQCBmdW5jICh4ICpEZXZpY2VWZGlzcGwpIGZyb21DKHhj ICpDLmxpYnhsX2RldmljZV92ZGlzcGwpIGVycm9yIHsKIAl4LkJhY2tlbmREb21uYW1lID0gQy5H b1N0cmluZyh4Yy5iYWNrZW5kX2RvbW5hbWUpCiAJeC5EZXZpZCA9IERldmlkKHhjLmRldmlkKQog CXguQmVBbGxvYyA9IGJvb2woeGMuYmVfYWxsb2MpCi0JbnVtQ29ubmVjdG9ycyA6PSBpbnQoeGMu bnVtX2Nvbm5lY3RvcnMpCi0JY0Nvbm5lY3RvcnMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2Nvbm5l Y3Rvcl9wYXJhbSkodW5zYWZlLlBvaW50ZXIoeGMuY29ubmVjdG9ycykpWzpudW1Db25uZWN0b3Jz Om51bUNvbm5lY3RvcnNdCi0JeC5Db25uZWN0b3JzID0gbWFrZShbXUNvbm5lY3RvclBhcmFtLCBu dW1Db25uZWN0b3JzKQotCWZvciBpLCB2IDo9IHJhbmdlIGNDb25uZWN0b3JzIHsKLQkJaWYgZXJy IDo9IHguQ29ubmVjdG9yc1tpXS5mcm9tQygmdik7IGVyciAhPSBuaWwgewotCQkJcmV0dXJuIGVy cgorCXguQ29ubmVjdG9ycyA9IG5pbAorCWlmIG51bUNvbm5lY3RvcnMgOj0gaW50KHhjLm51bV9j b25uZWN0b3JzKTsgbnVtQ29ubmVjdG9ycyA+IDAgeworCQljQ29ubmVjdG9ycyA6PSAoKlsxIDw8 IDI4XUMubGlieGxfY29ubmVjdG9yX3BhcmFtKSh1bnNhZmUuUG9pbnRlcih4Yy5jb25uZWN0b3Jz KSlbOm51bUNvbm5lY3RvcnM6bnVtQ29ubmVjdG9yc10KKwkJeC5Db25uZWN0b3JzID0gbWFrZShb XUNvbm5lY3RvclBhcmFtLCBudW1Db25uZWN0b3JzKQorCQlmb3IgaSwgdiA6PSByYW5nZSBjQ29u bmVjdG9ycyB7CisJCQlpZiBlcnIgOj0geC5Db25uZWN0b3JzW2ldLmZyb21DKCZ2KTsgZXJyICE9 IG5pbCB7CisJCQkJcmV0dXJuIGVycgorCQkJfQogCQl9CiAJfQogCkBAIC0yMjI3LDE3ICsyMjQ1 LDIxIEBAIGZ1bmMgKHggKkRldmljZVZkaXNwbCkgdG9DKHhjICpDLmxpYnhsX2RldmljZV92ZGlz cGwpIChlcnIgZXJyb3IpIHsKIH0KIAogZnVuYyAoeCAqVnNuZFBhcmFtcykgZnJvbUMoeGMgKkMu bGlieGxfdnNuZF9wYXJhbXMpIGVycm9yIHsKLQludW1TYW1wbGVSYXRlcyA6PSBpbnQoeGMubnVt X3NhbXBsZV9yYXRlcykKLQljU2FtcGxlUmF0ZXMgOj0gKCpbMSA8PCAyOF1DLnVpbnQzMl90KSh1 bnNhZmUuUG9pbnRlcih4Yy5zYW1wbGVfcmF0ZXMpKVs6bnVtU2FtcGxlUmF0ZXM6bnVtU2FtcGxl UmF0ZXNdCi0JeC5TYW1wbGVSYXRlcyA9IG1ha2UoW111aW50MzIsIG51bVNhbXBsZVJhdGVzKQot CWZvciBpLCB2IDo9IHJhbmdlIGNTYW1wbGVSYXRlcyB7Ci0JCXguU2FtcGxlUmF0ZXNbaV0gPSB1 aW50MzIodikKLQl9Ci0JbnVtU2FtcGxlRm9ybWF0cyA6PSBpbnQoeGMubnVtX3NhbXBsZV9mb3Jt YXRzKQotCWNTYW1wbGVGb3JtYXRzIDo9ICgqWzEgPDwgMjhdQy5saWJ4bF92c25kX3BjbV9mb3Jt YXQpKHVuc2FmZS5Qb2ludGVyKHhjLnNhbXBsZV9mb3JtYXRzKSlbOm51bVNhbXBsZUZvcm1hdHM6 bnVtU2FtcGxlRm9ybWF0c10KLQl4LlNhbXBsZUZvcm1hdHMgPSBtYWtlKFtdVnNuZFBjbUZvcm1h dCwgbnVtU2FtcGxlRm9ybWF0cykKLQlmb3IgaSwgdiA6PSByYW5nZSBjU2FtcGxlRm9ybWF0cyB7 Ci0JCXguU2FtcGxlRm9ybWF0c1tpXSA9IFZzbmRQY21Gb3JtYXQodikKKwl4LlNhbXBsZVJhdGVz ID0gbmlsCisJaWYgbnVtU2FtcGxlUmF0ZXMgOj0gaW50KHhjLm51bV9zYW1wbGVfcmF0ZXMpOyBu dW1TYW1wbGVSYXRlcyA+IDAgeworCQljU2FtcGxlUmF0ZXMgOj0gKCpbMSA8PCAyOF1DLnVpbnQz Ml90KSh1bnNhZmUuUG9pbnRlcih4Yy5zYW1wbGVfcmF0ZXMpKVs6bnVtU2FtcGxlUmF0ZXM6bnVt U2FtcGxlUmF0ZXNdCisJCXguU2FtcGxlUmF0ZXMgPSBtYWtlKFtddWludDMyLCBudW1TYW1wbGVS YXRlcykKKwkJZm9yIGksIHYgOj0gcmFuZ2UgY1NhbXBsZVJhdGVzIHsKKwkJCXguU2FtcGxlUmF0 ZXNbaV0gPSB1aW50MzIodikKKwkJfQorCX0KKwl4LlNhbXBsZUZvcm1hdHMgPSBuaWwKKwlpZiBu dW1TYW1wbGVGb3JtYXRzIDo9IGludCh4Yy5udW1fc2FtcGxlX2Zvcm1hdHMpOyBudW1TYW1wbGVG b3JtYXRzID4gMCB7CisJCWNTYW1wbGVGb3JtYXRzIDo9ICgqWzEgPDwgMjhdQy5saWJ4bF92c25k X3BjbV9mb3JtYXQpKHVuc2FmZS5Qb2ludGVyKHhjLnNhbXBsZV9mb3JtYXRzKSlbOm51bVNhbXBs ZUZvcm1hdHM6bnVtU2FtcGxlRm9ybWF0c10KKwkJeC5TYW1wbGVGb3JtYXRzID0gbWFrZShbXVZz bmRQY21Gb3JtYXQsIG51bVNhbXBsZUZvcm1hdHMpCisJCWZvciBpLCB2IDo9IHJhbmdlIGNTYW1w bGVGb3JtYXRzIHsKKwkJCXguU2FtcGxlRm9ybWF0c1tpXSA9IFZzbmRQY21Gb3JtYXQodikKKwkJ fQogCX0KIAl4LkNoYW5uZWxzTWluID0gdWludDMyKHhjLmNoYW5uZWxzX21pbikKIAl4LkNoYW5u ZWxzTWF4ID0gdWludDMyKHhjLmNoYW5uZWxzX21heCkKQEAgLTIzMDksMTIgKzIzMzEsMTQgQEAg ZnVuYyAoeCAqVnNuZFBjbSkgZnJvbUMoeGMgKkMubGlieGxfdnNuZF9wY20pIGVycm9yIHsKIAlp ZiBlcnIgOj0geC5QYXJhbXMuZnJvbUMoJnhjLnBhcmFtcyk7IGVyciAhPSBuaWwgewogCQlyZXR1 cm4gZXJyCiAJfQotCW51bVZzbmRTdHJlYW1zIDo9IGludCh4Yy5udW1fdnNuZF9zdHJlYW1zKQot CWNTdHJlYW1zIDo9ICgqWzEgPDwgMjhdQy5saWJ4bF92c25kX3N0cmVhbSkodW5zYWZlLlBvaW50 ZXIoeGMuc3RyZWFtcykpWzpudW1Wc25kU3RyZWFtczpudW1Wc25kU3RyZWFtc10KLQl4LlN0cmVh bXMgPSBtYWtlKFtdVnNuZFN0cmVhbSwgbnVtVnNuZFN0cmVhbXMpCi0JZm9yIGksIHYgOj0gcmFu Z2UgY1N0cmVhbXMgewotCQlpZiBlcnIgOj0geC5TdHJlYW1zW2ldLmZyb21DKCZ2KTsgZXJyICE9 IG5pbCB7Ci0JCQlyZXR1cm4gZXJyCisJeC5TdHJlYW1zID0gbmlsCisJaWYgbnVtVnNuZFN0cmVh bXMgOj0gaW50KHhjLm51bV92c25kX3N0cmVhbXMpOyBudW1Wc25kU3RyZWFtcyA+IDAgeworCQlj U3RyZWFtcyA6PSAoKlsxIDw8IDI4XUMubGlieGxfdnNuZF9zdHJlYW0pKHVuc2FmZS5Qb2ludGVy KHhjLnN0cmVhbXMpKVs6bnVtVnNuZFN0cmVhbXM6bnVtVnNuZFN0cmVhbXNdCisJCXguU3RyZWFt cyA9IG1ha2UoW11Wc25kU3RyZWFtLCBudW1Wc25kU3RyZWFtcykKKwkJZm9yIGksIHYgOj0gcmFu Z2UgY1N0cmVhbXMgeworCQkJaWYgZXJyIDo9IHguU3RyZWFtc1tpXS5mcm9tQygmdik7IGVyciAh PSBuaWwgeworCQkJCXJldHVybiBlcnIKKwkJCX0KIAkJfQogCX0KIApAQCAtMjM1NywxMiArMjM4 MSwxNCBAQCBmdW5jICh4ICpEZXZpY2VWc25kKSBmcm9tQyh4YyAqQy5saWJ4bF9kZXZpY2VfdnNu ZCkgZXJyb3IgewogCWlmIGVyciA6PSB4LlBhcmFtcy5mcm9tQygmeGMucGFyYW1zKTsgZXJyICE9 IG5pbCB7CiAJCXJldHVybiBlcnIKIAl9Ci0JbnVtVnNuZFBjbXMgOj0gaW50KHhjLm51bV92c25k X3BjbXMpCi0JY1BjbXMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX3ZzbmRfcGNtKSh1bnNhZmUuUG9p bnRlcih4Yy5wY21zKSlbOm51bVZzbmRQY21zOm51bVZzbmRQY21zXQotCXguUGNtcyA9IG1ha2Uo W11Wc25kUGNtLCBudW1Wc25kUGNtcykKLQlmb3IgaSwgdiA6PSByYW5nZSBjUGNtcyB7Ci0JCWlm IGVyciA6PSB4LlBjbXNbaV0uZnJvbUMoJnYpOyBlcnIgIT0gbmlsIHsKLQkJCXJldHVybiBlcnIK Kwl4LlBjbXMgPSBuaWwKKwlpZiBudW1Wc25kUGNtcyA6PSBpbnQoeGMubnVtX3ZzbmRfcGNtcyk7 IG51bVZzbmRQY21zID4gMCB7CisJCWNQY21zIDo9ICgqWzEgPDwgMjhdQy5saWJ4bF92c25kX3Bj bSkodW5zYWZlLlBvaW50ZXIoeGMucGNtcykpWzpudW1Wc25kUGNtczpudW1Wc25kUGNtc10KKwkJ eC5QY21zID0gbWFrZShbXVZzbmRQY20sIG51bVZzbmRQY21zKQorCQlmb3IgaSwgdiA6PSByYW5n ZSBjUGNtcyB7CisJCQlpZiBlcnIgOj0geC5QY21zW2ldLmZyb21DKCZ2KTsgZXJyICE9IG5pbCB7 CisJCQkJcmV0dXJuIGVycgorCQkJfQogCQl9CiAJfQogCkBAIC0yNDExLDEyNCArMjQzNywxNTQg QEAgZnVuYyAoeCAqRG9tYWluQ29uZmlnKSBmcm9tQyh4YyAqQy5saWJ4bF9kb21haW5fY29uZmln KSBlcnJvciB7CiAJaWYgZXJyIDo9IHguQkluZm8uZnJvbUMoJnhjLmJfaW5mbyk7IGVyciAhPSBu aWwgewogCQlyZXR1cm4gZXJyCiAJfQotCW51bURpc2tzIDo9IGludCh4Yy5udW1fZGlza3MpCi0J Y0Rpc2tzIDo9ICgqWzEgPDwgMjhdQy5saWJ4bF9kZXZpY2VfZGlzaykodW5zYWZlLlBvaW50ZXIo eGMuZGlza3MpKVs6bnVtRGlza3M6bnVtRGlza3NdCi0JeC5EaXNrcyA9IG1ha2UoW11EZXZpY2VE aXNrLCBudW1EaXNrcykKLQlmb3IgaSwgdiA6PSByYW5nZSBjRGlza3MgewotCQlpZiBlcnIgOj0g eC5EaXNrc1tpXS5mcm9tQygmdik7IGVyciAhPSBuaWwgewotCQkJcmV0dXJuIGVycgorCXguRGlz a3MgPSBuaWwKKwlpZiBudW1EaXNrcyA6PSBpbnQoeGMubnVtX2Rpc2tzKTsgbnVtRGlza3MgPiAw IHsKKwkJY0Rpc2tzIDo9ICgqWzEgPDwgMjhdQy5saWJ4bF9kZXZpY2VfZGlzaykodW5zYWZlLlBv aW50ZXIoeGMuZGlza3MpKVs6bnVtRGlza3M6bnVtRGlza3NdCisJCXguRGlza3MgPSBtYWtlKFtd RGV2aWNlRGlzaywgbnVtRGlza3MpCisJCWZvciBpLCB2IDo9IHJhbmdlIGNEaXNrcyB7CisJCQlp ZiBlcnIgOj0geC5EaXNrc1tpXS5mcm9tQygmdik7IGVyciAhPSBuaWwgeworCQkJCXJldHVybiBl cnIKKwkJCX0KIAkJfQogCX0KLQludW1OaWNzIDo9IGludCh4Yy5udW1fbmljcykKLQljTmljcyA6 PSAoKlsxIDw8IDI4XUMubGlieGxfZGV2aWNlX25pYykodW5zYWZlLlBvaW50ZXIoeGMubmljcykp WzpudW1OaWNzOm51bU5pY3NdCi0JeC5OaWNzID0gbWFrZShbXURldmljZU5pYywgbnVtTmljcykK LQlmb3IgaSwgdiA6PSByYW5nZSBjTmljcyB7Ci0JCWlmIGVyciA6PSB4Lk5pY3NbaV0uZnJvbUMo JnYpOyBlcnIgIT0gbmlsIHsKLQkJCXJldHVybiBlcnIKKwl4Lk5pY3MgPSBuaWwKKwlpZiBudW1O aWNzIDo9IGludCh4Yy5udW1fbmljcyk7IG51bU5pY3MgPiAwIHsKKwkJY05pY3MgOj0gKCpbMSA8 PCAyOF1DLmxpYnhsX2RldmljZV9uaWMpKHVuc2FmZS5Qb2ludGVyKHhjLm5pY3MpKVs6bnVtTmlj czpudW1OaWNzXQorCQl4Lk5pY3MgPSBtYWtlKFtdRGV2aWNlTmljLCBudW1OaWNzKQorCQlmb3Ig aSwgdiA6PSByYW5nZSBjTmljcyB7CisJCQlpZiBlcnIgOj0geC5OaWNzW2ldLmZyb21DKCZ2KTsg ZXJyICE9IG5pbCB7CisJCQkJcmV0dXJuIGVycgorCQkJfQogCQl9CiAJfQotCW51bVBjaWRldnMg Oj0gaW50KHhjLm51bV9wY2lkZXZzKQotCWNQY2lkZXZzIDo9ICgqWzEgPDwgMjhdQy5saWJ4bF9k ZXZpY2VfcGNpKSh1bnNhZmUuUG9pbnRlcih4Yy5wY2lkZXZzKSlbOm51bVBjaWRldnM6bnVtUGNp ZGV2c10KLQl4LlBjaWRldnMgPSBtYWtlKFtdRGV2aWNlUGNpLCBudW1QY2lkZXZzKQotCWZvciBp LCB2IDo9IHJhbmdlIGNQY2lkZXZzIHsKLQkJaWYgZXJyIDo9IHguUGNpZGV2c1tpXS5mcm9tQygm dik7IGVyciAhPSBuaWwgewotCQkJcmV0dXJuIGVycgorCXguUGNpZGV2cyA9IG5pbAorCWlmIG51 bVBjaWRldnMgOj0gaW50KHhjLm51bV9wY2lkZXZzKTsgbnVtUGNpZGV2cyA+IDAgeworCQljUGNp ZGV2cyA6PSAoKlsxIDw8IDI4XUMubGlieGxfZGV2aWNlX3BjaSkodW5zYWZlLlBvaW50ZXIoeGMu cGNpZGV2cykpWzpudW1QY2lkZXZzOm51bVBjaWRldnNdCisJCXguUGNpZGV2cyA9IG1ha2UoW11E ZXZpY2VQY2ksIG51bVBjaWRldnMpCisJCWZvciBpLCB2IDo9IHJhbmdlIGNQY2lkZXZzIHsKKwkJ CWlmIGVyciA6PSB4LlBjaWRldnNbaV0uZnJvbUMoJnYpOyBlcnIgIT0gbmlsIHsKKwkJCQlyZXR1 cm4gZXJyCisJCQl9CiAJCX0KIAl9Ci0JbnVtUmRtcyA6PSBpbnQoeGMubnVtX3JkbXMpCi0JY1Jk bXMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2RldmljZV9yZG0pKHVuc2FmZS5Qb2ludGVyKHhjLnJk bXMpKVs6bnVtUmRtczpudW1SZG1zXQotCXguUmRtcyA9IG1ha2UoW11EZXZpY2VSZG0sIG51bVJk bXMpCi0JZm9yIGksIHYgOj0gcmFuZ2UgY1JkbXMgewotCQlpZiBlcnIgOj0geC5SZG1zW2ldLmZy b21DKCZ2KTsgZXJyICE9IG5pbCB7Ci0JCQlyZXR1cm4gZXJyCisJeC5SZG1zID0gbmlsCisJaWYg bnVtUmRtcyA6PSBpbnQoeGMubnVtX3JkbXMpOyBudW1SZG1zID4gMCB7CisJCWNSZG1zIDo9ICgq WzEgPDwgMjhdQy5saWJ4bF9kZXZpY2VfcmRtKSh1bnNhZmUuUG9pbnRlcih4Yy5yZG1zKSlbOm51 bVJkbXM6bnVtUmRtc10KKwkJeC5SZG1zID0gbWFrZShbXURldmljZVJkbSwgbnVtUmRtcykKKwkJ Zm9yIGksIHYgOj0gcmFuZ2UgY1JkbXMgeworCQkJaWYgZXJyIDo9IHguUmRtc1tpXS5mcm9tQygm dik7IGVyciAhPSBuaWwgeworCQkJCXJldHVybiBlcnIKKwkJCX0KIAkJfQogCX0KLQludW1EdGRl dnMgOj0gaW50KHhjLm51bV9kdGRldnMpCi0JY0R0ZGV2cyA6PSAoKlsxIDw8IDI4XUMubGlieGxf ZGV2aWNlX2R0ZGV2KSh1bnNhZmUuUG9pbnRlcih4Yy5kdGRldnMpKVs6bnVtRHRkZXZzOm51bUR0 ZGV2c10KLQl4LkR0ZGV2cyA9IG1ha2UoW11EZXZpY2VEdGRldiwgbnVtRHRkZXZzKQotCWZvciBp LCB2IDo9IHJhbmdlIGNEdGRldnMgewotCQlpZiBlcnIgOj0geC5EdGRldnNbaV0uZnJvbUMoJnYp OyBlcnIgIT0gbmlsIHsKLQkJCXJldHVybiBlcnIKKwl4LkR0ZGV2cyA9IG5pbAorCWlmIG51bUR0 ZGV2cyA6PSBpbnQoeGMubnVtX2R0ZGV2cyk7IG51bUR0ZGV2cyA+IDAgeworCQljRHRkZXZzIDo9 ICgqWzEgPDwgMjhdQy5saWJ4bF9kZXZpY2VfZHRkZXYpKHVuc2FmZS5Qb2ludGVyKHhjLmR0ZGV2 cykpWzpudW1EdGRldnM6bnVtRHRkZXZzXQorCQl4LkR0ZGV2cyA9IG1ha2UoW11EZXZpY2VEdGRl diwgbnVtRHRkZXZzKQorCQlmb3IgaSwgdiA6PSByYW5nZSBjRHRkZXZzIHsKKwkJCWlmIGVyciA6 PSB4LkR0ZGV2c1tpXS5mcm9tQygmdik7IGVyciAhPSBuaWwgeworCQkJCXJldHVybiBlcnIKKwkJ CX0KIAkJfQogCX0KLQludW1WZmJzIDo9IGludCh4Yy5udW1fdmZicykKLQljVmZicyA6PSAoKlsx IDw8IDI4XUMubGlieGxfZGV2aWNlX3ZmYikodW5zYWZlLlBvaW50ZXIoeGMudmZicykpWzpudW1W ZmJzOm51bVZmYnNdCi0JeC5WZmJzID0gbWFrZShbXURldmljZVZmYiwgbnVtVmZicykKLQlmb3Ig aSwgdiA6PSByYW5nZSBjVmZicyB7Ci0JCWlmIGVyciA6PSB4LlZmYnNbaV0uZnJvbUMoJnYpOyBl cnIgIT0gbmlsIHsKLQkJCXJldHVybiBlcnIKKwl4LlZmYnMgPSBuaWwKKwlpZiBudW1WZmJzIDo9 IGludCh4Yy5udW1fdmZicyk7IG51bVZmYnMgPiAwIHsKKwkJY1ZmYnMgOj0gKCpbMSA8PCAyOF1D LmxpYnhsX2RldmljZV92ZmIpKHVuc2FmZS5Qb2ludGVyKHhjLnZmYnMpKVs6bnVtVmZiczpudW1W ZmJzXQorCQl4LlZmYnMgPSBtYWtlKFtdRGV2aWNlVmZiLCBudW1WZmJzKQorCQlmb3IgaSwgdiA6 PSByYW5nZSBjVmZicyB7CisJCQlpZiBlcnIgOj0geC5WZmJzW2ldLmZyb21DKCZ2KTsgZXJyICE9 IG5pbCB7CisJCQkJcmV0dXJuIGVycgorCQkJfQogCQl9CiAJfQotCW51bVZrYnMgOj0gaW50KHhj Lm51bV92a2JzKQotCWNWa2JzIDo9ICgqWzEgPDwgMjhdQy5saWJ4bF9kZXZpY2VfdmtiKSh1bnNh ZmUuUG9pbnRlcih4Yy52a2JzKSlbOm51bVZrYnM6bnVtVmtic10KLQl4LlZrYnMgPSBtYWtlKFtd RGV2aWNlVmtiLCBudW1Wa2JzKQotCWZvciBpLCB2IDo9IHJhbmdlIGNWa2JzIHsKLQkJaWYgZXJy IDo9IHguVmtic1tpXS5mcm9tQygmdik7IGVyciAhPSBuaWwgewotCQkJcmV0dXJuIGVycgorCXgu VmticyA9IG5pbAorCWlmIG51bVZrYnMgOj0gaW50KHhjLm51bV92a2JzKTsgbnVtVmticyA+IDAg eworCQljVmticyA6PSAoKlsxIDw8IDI4XUMubGlieGxfZGV2aWNlX3ZrYikodW5zYWZlLlBvaW50 ZXIoeGMudmticykpWzpudW1Wa2JzOm51bVZrYnNdCisJCXguVmticyA9IG1ha2UoW11EZXZpY2VW a2IsIG51bVZrYnMpCisJCWZvciBpLCB2IDo9IHJhbmdlIGNWa2JzIHsKKwkJCWlmIGVyciA6PSB4 LlZrYnNbaV0uZnJvbUMoJnYpOyBlcnIgIT0gbmlsIHsKKwkJCQlyZXR1cm4gZXJyCisJCQl9CiAJ CX0KIAl9Ci0JbnVtVnRwbXMgOj0gaW50KHhjLm51bV92dHBtcykKLQljVnRwbXMgOj0gKCpbMSA8 PCAyOF1DLmxpYnhsX2RldmljZV92dHBtKSh1bnNhZmUuUG9pbnRlcih4Yy52dHBtcykpWzpudW1W dHBtczpudW1WdHBtc10KLQl4LlZ0cG1zID0gbWFrZShbXURldmljZVZ0cG0sIG51bVZ0cG1zKQot CWZvciBpLCB2IDo9IHJhbmdlIGNWdHBtcyB7Ci0JCWlmIGVyciA6PSB4LlZ0cG1zW2ldLmZyb21D KCZ2KTsgZXJyICE9IG5pbCB7Ci0JCQlyZXR1cm4gZXJyCisJeC5WdHBtcyA9IG5pbAorCWlmIG51 bVZ0cG1zIDo9IGludCh4Yy5udW1fdnRwbXMpOyBudW1WdHBtcyA+IDAgeworCQljVnRwbXMgOj0g KCpbMSA8PCAyOF1DLmxpYnhsX2RldmljZV92dHBtKSh1bnNhZmUuUG9pbnRlcih4Yy52dHBtcykp WzpudW1WdHBtczpudW1WdHBtc10KKwkJeC5WdHBtcyA9IG1ha2UoW11EZXZpY2VWdHBtLCBudW1W dHBtcykKKwkJZm9yIGksIHYgOj0gcmFuZ2UgY1Z0cG1zIHsKKwkJCWlmIGVyciA6PSB4LlZ0cG1z W2ldLmZyb21DKCZ2KTsgZXJyICE9IG5pbCB7CisJCQkJcmV0dXJuIGVycgorCQkJfQogCQl9CiAJ fQotCW51bVA5UyA6PSBpbnQoeGMubnVtX3A5cykKLQljUDlTIDo9ICgqWzEgPDwgMjhdQy5saWJ4 bF9kZXZpY2VfcDkpKHVuc2FmZS5Qb2ludGVyKHhjLnA5cykpWzpudW1QOVM6bnVtUDlTXQotCXgu UDlTID0gbWFrZShbXURldmljZVA5LCBudW1QOVMpCi0JZm9yIGksIHYgOj0gcmFuZ2UgY1A5UyB7 Ci0JCWlmIGVyciA6PSB4LlA5U1tpXS5mcm9tQygmdik7IGVyciAhPSBuaWwgewotCQkJcmV0dXJu IGVycgorCXguUDlTID0gbmlsCisJaWYgbnVtUDlTIDo9IGludCh4Yy5udW1fcDlzKTsgbnVtUDlT ID4gMCB7CisJCWNQOVMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2RldmljZV9wOSkodW5zYWZlLlBv aW50ZXIoeGMucDlzKSlbOm51bVA5UzpudW1QOVNdCisJCXguUDlTID0gbWFrZShbXURldmljZVA5 LCBudW1QOVMpCisJCWZvciBpLCB2IDo9IHJhbmdlIGNQOVMgeworCQkJaWYgZXJyIDo9IHguUDlT W2ldLmZyb21DKCZ2KTsgZXJyICE9IG5pbCB7CisJCQkJcmV0dXJuIGVycgorCQkJfQogCQl9CiAJ fQotCW51bVB2Y2FsbHNpZnMgOj0gaW50KHhjLm51bV9wdmNhbGxzaWZzKQotCWNQdmNhbGxzaWZz IDo9ICgqWzEgPDwgMjhdQy5saWJ4bF9kZXZpY2VfcHZjYWxsc2lmKSh1bnNhZmUuUG9pbnRlcih4 Yy5wdmNhbGxzaWZzKSlbOm51bVB2Y2FsbHNpZnM6bnVtUHZjYWxsc2lmc10KLQl4LlB2Y2FsbHNp ZnMgPSBtYWtlKFtdRGV2aWNlUHZjYWxsc2lmLCBudW1QdmNhbGxzaWZzKQotCWZvciBpLCB2IDo9 IHJhbmdlIGNQdmNhbGxzaWZzIHsKLQkJaWYgZXJyIDo9IHguUHZjYWxsc2lmc1tpXS5mcm9tQygm dik7IGVyciAhPSBuaWwgewotCQkJcmV0dXJuIGVycgorCXguUHZjYWxsc2lmcyA9IG5pbAorCWlm IG51bVB2Y2FsbHNpZnMgOj0gaW50KHhjLm51bV9wdmNhbGxzaWZzKTsgbnVtUHZjYWxsc2lmcyA+ IDAgeworCQljUHZjYWxsc2lmcyA6PSAoKlsxIDw8IDI4XUMubGlieGxfZGV2aWNlX3B2Y2FsbHNp ZikodW5zYWZlLlBvaW50ZXIoeGMucHZjYWxsc2lmcykpWzpudW1QdmNhbGxzaWZzOm51bVB2Y2Fs bHNpZnNdCisJCXguUHZjYWxsc2lmcyA9IG1ha2UoW11EZXZpY2VQdmNhbGxzaWYsIG51bVB2Y2Fs bHNpZnMpCisJCWZvciBpLCB2IDo9IHJhbmdlIGNQdmNhbGxzaWZzIHsKKwkJCWlmIGVyciA6PSB4 LlB2Y2FsbHNpZnNbaV0uZnJvbUMoJnYpOyBlcnIgIT0gbmlsIHsKKwkJCQlyZXR1cm4gZXJyCisJ CQl9CiAJCX0KIAl9Ci0JbnVtVmRpc3BscyA6PSBpbnQoeGMubnVtX3ZkaXNwbHMpCi0JY1ZkaXNw bHMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2RldmljZV92ZGlzcGwpKHVuc2FmZS5Qb2ludGVyKHhj LnZkaXNwbHMpKVs6bnVtVmRpc3BsczpudW1WZGlzcGxzXQotCXguVmRpc3BscyA9IG1ha2UoW11E ZXZpY2VWZGlzcGwsIG51bVZkaXNwbHMpCi0JZm9yIGksIHYgOj0gcmFuZ2UgY1ZkaXNwbHMgewot CQlpZiBlcnIgOj0geC5WZGlzcGxzW2ldLmZyb21DKCZ2KTsgZXJyICE9IG5pbCB7Ci0JCQlyZXR1 cm4gZXJyCisJeC5WZGlzcGxzID0gbmlsCisJaWYgbnVtVmRpc3BscyA6PSBpbnQoeGMubnVtX3Zk aXNwbHMpOyBudW1WZGlzcGxzID4gMCB7CisJCWNWZGlzcGxzIDo9ICgqWzEgPDwgMjhdQy5saWJ4 bF9kZXZpY2VfdmRpc3BsKSh1bnNhZmUuUG9pbnRlcih4Yy52ZGlzcGxzKSlbOm51bVZkaXNwbHM6 bnVtVmRpc3Bsc10KKwkJeC5WZGlzcGxzID0gbWFrZShbXURldmljZVZkaXNwbCwgbnVtVmRpc3Bs cykKKwkJZm9yIGksIHYgOj0gcmFuZ2UgY1ZkaXNwbHMgeworCQkJaWYgZXJyIDo9IHguVmRpc3Bs c1tpXS5mcm9tQygmdik7IGVyciAhPSBuaWwgeworCQkJCXJldHVybiBlcnIKKwkJCX0KIAkJfQog CX0KLQludW1Wc25kcyA6PSBpbnQoeGMubnVtX3ZzbmRzKQotCWNWc25kcyA6PSAoKlsxIDw8IDI4 XUMubGlieGxfZGV2aWNlX3ZzbmQpKHVuc2FmZS5Qb2ludGVyKHhjLnZzbmRzKSlbOm51bVZzbmRz Om51bVZzbmRzXQotCXguVnNuZHMgPSBtYWtlKFtdRGV2aWNlVnNuZCwgbnVtVnNuZHMpCi0JZm9y IGksIHYgOj0gcmFuZ2UgY1ZzbmRzIHsKLQkJaWYgZXJyIDo9IHguVnNuZHNbaV0uZnJvbUMoJnYp OyBlcnIgIT0gbmlsIHsKLQkJCXJldHVybiBlcnIKKwl4LlZzbmRzID0gbmlsCisJaWYgbnVtVnNu ZHMgOj0gaW50KHhjLm51bV92c25kcyk7IG51bVZzbmRzID4gMCB7CisJCWNWc25kcyA6PSAoKlsx IDw8IDI4XUMubGlieGxfZGV2aWNlX3ZzbmQpKHVuc2FmZS5Qb2ludGVyKHhjLnZzbmRzKSlbOm51 bVZzbmRzOm51bVZzbmRzXQorCQl4LlZzbmRzID0gbWFrZShbXURldmljZVZzbmQsIG51bVZzbmRz KQorCQlmb3IgaSwgdiA6PSByYW5nZSBjVnNuZHMgeworCQkJaWYgZXJyIDo9IHguVnNuZHNbaV0u ZnJvbUMoJnYpOyBlcnIgIT0gbmlsIHsKKwkJCQlyZXR1cm4gZXJyCisJCQl9CiAJCX0KIAl9Ci0J bnVtQ2hhbm5lbHMgOj0gaW50KHhjLm51bV9jaGFubmVscykKLQljQ2hhbm5lbHMgOj0gKCpbMSA8 PCAyOF1DLmxpYnhsX2RldmljZV9jaGFubmVsKSh1bnNhZmUuUG9pbnRlcih4Yy5jaGFubmVscykp WzpudW1DaGFubmVsczpudW1DaGFubmVsc10KLQl4LkNoYW5uZWxzID0gbWFrZShbXURldmljZUNo YW5uZWwsIG51bUNoYW5uZWxzKQotCWZvciBpLCB2IDo9IHJhbmdlIGNDaGFubmVscyB7Ci0JCWlm IGVyciA6PSB4LkNoYW5uZWxzW2ldLmZyb21DKCZ2KTsgZXJyICE9IG5pbCB7Ci0JCQlyZXR1cm4g ZXJyCisJeC5DaGFubmVscyA9IG5pbAorCWlmIG51bUNoYW5uZWxzIDo9IGludCh4Yy5udW1fY2hh bm5lbHMpOyBudW1DaGFubmVscyA+IDAgeworCQljQ2hhbm5lbHMgOj0gKCpbMSA8PCAyOF1DLmxp YnhsX2RldmljZV9jaGFubmVsKSh1bnNhZmUuUG9pbnRlcih4Yy5jaGFubmVscykpWzpudW1DaGFu bmVsczpudW1DaGFubmVsc10KKwkJeC5DaGFubmVscyA9IG1ha2UoW11EZXZpY2VDaGFubmVsLCBu dW1DaGFubmVscykKKwkJZm9yIGksIHYgOj0gcmFuZ2UgY0NoYW5uZWxzIHsKKwkJCWlmIGVyciA6 PSB4LkNoYW5uZWxzW2ldLmZyb21DKCZ2KTsgZXJyICE9IG5pbCB7CisJCQkJcmV0dXJuIGVycgor CQkJfQogCQl9CiAJfQotCW51bVVzYmN0cmxzIDo9IGludCh4Yy5udW1fdXNiY3RybHMpCi0JY1Vz YmN0cmxzIDo9ICgqWzEgPDwgMjhdQy5saWJ4bF9kZXZpY2VfdXNiY3RybCkodW5zYWZlLlBvaW50 ZXIoeGMudXNiY3RybHMpKVs6bnVtVXNiY3RybHM6bnVtVXNiY3RybHNdCi0JeC5Vc2JjdHJscyA9 IG1ha2UoW11EZXZpY2VVc2JjdHJsLCBudW1Vc2JjdHJscykKLQlmb3IgaSwgdiA6PSByYW5nZSBj VXNiY3RybHMgewotCQlpZiBlcnIgOj0geC5Vc2JjdHJsc1tpXS5mcm9tQygmdik7IGVyciAhPSBu aWwgewotCQkJcmV0dXJuIGVycgorCXguVXNiY3RybHMgPSBuaWwKKwlpZiBudW1Vc2JjdHJscyA6 PSBpbnQoeGMubnVtX3VzYmN0cmxzKTsgbnVtVXNiY3RybHMgPiAwIHsKKwkJY1VzYmN0cmxzIDo9 ICgqWzEgPDwgMjhdQy5saWJ4bF9kZXZpY2VfdXNiY3RybCkodW5zYWZlLlBvaW50ZXIoeGMudXNi Y3RybHMpKVs6bnVtVXNiY3RybHM6bnVtVXNiY3RybHNdCisJCXguVXNiY3RybHMgPSBtYWtlKFtd RGV2aWNlVXNiY3RybCwgbnVtVXNiY3RybHMpCisJCWZvciBpLCB2IDo9IHJhbmdlIGNVc2JjdHJs cyB7CisJCQlpZiBlcnIgOj0geC5Vc2JjdHJsc1tpXS5mcm9tQygmdik7IGVyciAhPSBuaWwgewor CQkJCXJldHVybiBlcnIKKwkJCX0KIAkJfQogCX0KLQludW1Vc2JkZXZzIDo9IGludCh4Yy5udW1f dXNiZGV2cykKLQljVXNiZGV2cyA6PSAoKlsxIDw8IDI4XUMubGlieGxfZGV2aWNlX3VzYmRldiko dW5zYWZlLlBvaW50ZXIoeGMudXNiZGV2cykpWzpudW1Vc2JkZXZzOm51bVVzYmRldnNdCi0JeC5V c2JkZXZzID0gbWFrZShbXURldmljZVVzYmRldiwgbnVtVXNiZGV2cykKLQlmb3IgaSwgdiA6PSBy YW5nZSBjVXNiZGV2cyB7Ci0JCWlmIGVyciA6PSB4LlVzYmRldnNbaV0uZnJvbUMoJnYpOyBlcnIg IT0gbmlsIHsKLQkJCXJldHVybiBlcnIKKwl4LlVzYmRldnMgPSBuaWwKKwlpZiBudW1Vc2JkZXZz IDo9IGludCh4Yy5udW1fdXNiZGV2cyk7IG51bVVzYmRldnMgPiAwIHsKKwkJY1VzYmRldnMgOj0g KCpbMSA8PCAyOF1DLmxpYnhsX2RldmljZV91c2JkZXYpKHVuc2FmZS5Qb2ludGVyKHhjLnVzYmRl dnMpKVs6bnVtVXNiZGV2czpudW1Vc2JkZXZzXQorCQl4LlVzYmRldnMgPSBtYWtlKFtdRGV2aWNl VXNiZGV2LCBudW1Vc2JkZXZzKQorCQlmb3IgaSwgdiA6PSByYW5nZSBjVXNiZGV2cyB7CisJCQlp ZiBlcnIgOj0geC5Vc2JkZXZzW2ldLmZyb21DKCZ2KTsgZXJyICE9IG5pbCB7CisJCQkJcmV0dXJu IGVycgorCQkJfQogCQl9CiAJfQogCXguT25Qb3dlcm9mZiA9IEFjdGlvbk9uU2h1dGRvd24oeGMu b25fcG93ZXJvZmYpCkBAIC0zMDEyLDEyICszMDY4LDE0IEBAIGZ1bmMgKHggKlZkaXNwbGluZm8p IGZyb21DKHhjICpDLmxpYnhsX3ZkaXNwbGluZm8pIGVycm9yIHsKIAl4LkRldmlkID0gRGV2aWQo eGMuZGV2aWQpCiAJeC5TdGF0ZSA9IGludCh4Yy5zdGF0ZSkKIAl4LkJlQWxsb2MgPSBib29sKHhj LmJlX2FsbG9jKQotCW51bUNvbm5lY3RvcnMgOj0gaW50KHhjLm51bV9jb25uZWN0b3JzKQotCWND b25uZWN0b3JzIDo9ICgqWzEgPDwgMjhdQy5saWJ4bF9jb25uZWN0b3JpbmZvKSh1bnNhZmUuUG9p bnRlcih4Yy5jb25uZWN0b3JzKSlbOm51bUNvbm5lY3RvcnM6bnVtQ29ubmVjdG9yc10KLQl4LkNv bm5lY3RvcnMgPSBtYWtlKFtdQ29ubmVjdG9yaW5mbywgbnVtQ29ubmVjdG9ycykKLQlmb3IgaSwg diA6PSByYW5nZSBjQ29ubmVjdG9ycyB7Ci0JCWlmIGVyciA6PSB4LkNvbm5lY3RvcnNbaV0uZnJv bUMoJnYpOyBlcnIgIT0gbmlsIHsKLQkJCXJldHVybiBlcnIKKwl4LkNvbm5lY3RvcnMgPSBuaWwK KwlpZiBudW1Db25uZWN0b3JzIDo9IGludCh4Yy5udW1fY29ubmVjdG9ycyk7IG51bUNvbm5lY3Rv cnMgPiAwIHsKKwkJY0Nvbm5lY3RvcnMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX2Nvbm5lY3Rvcmlu Zm8pKHVuc2FmZS5Qb2ludGVyKHhjLmNvbm5lY3RvcnMpKVs6bnVtQ29ubmVjdG9yczpudW1Db25u ZWN0b3JzXQorCQl4LkNvbm5lY3RvcnMgPSBtYWtlKFtdQ29ubmVjdG9yaW5mbywgbnVtQ29ubmVj dG9ycykKKwkJZm9yIGksIHYgOj0gcmFuZ2UgY0Nvbm5lY3RvcnMgeworCQkJaWYgZXJyIDo9IHgu Q29ubmVjdG9yc1tpXS5mcm9tQygmdik7IGVyciAhPSBuaWwgeworCQkJCXJldHVybiBlcnIKKwkJ CX0KIAkJfQogCX0KIApAQCAtMzA3NywxMiArMzEzNSwxNCBAQCBmdW5jICh4ICpTdHJlYW1pbmZv KSB0b0MoeGMgKkMubGlieGxfc3RyZWFtaW5mbykgKGVyciBlcnJvcikgewogfQogCiBmdW5jICh4 ICpQY21pbmZvKSBmcm9tQyh4YyAqQy5saWJ4bF9wY21pbmZvKSBlcnJvciB7Ci0JbnVtVnNuZFN0 cmVhbXMgOj0gaW50KHhjLm51bV92c25kX3N0cmVhbXMpCi0JY1N0cmVhbXMgOj0gKCpbMSA8PCAy OF1DLmxpYnhsX3N0cmVhbWluZm8pKHVuc2FmZS5Qb2ludGVyKHhjLnN0cmVhbXMpKVs6bnVtVnNu ZFN0cmVhbXM6bnVtVnNuZFN0cmVhbXNdCi0JeC5TdHJlYW1zID0gbWFrZShbXVN0cmVhbWluZm8s IG51bVZzbmRTdHJlYW1zKQotCWZvciBpLCB2IDo9IHJhbmdlIGNTdHJlYW1zIHsKLQkJaWYgZXJy IDo9IHguU3RyZWFtc1tpXS5mcm9tQygmdik7IGVyciAhPSBuaWwgewotCQkJcmV0dXJuIGVycgor CXguU3RyZWFtcyA9IG5pbAorCWlmIG51bVZzbmRTdHJlYW1zIDo9IGludCh4Yy5udW1fdnNuZF9z dHJlYW1zKTsgbnVtVnNuZFN0cmVhbXMgPiAwIHsKKwkJY1N0cmVhbXMgOj0gKCpbMSA8PCAyOF1D LmxpYnhsX3N0cmVhbWluZm8pKHVuc2FmZS5Qb2ludGVyKHhjLnN0cmVhbXMpKVs6bnVtVnNuZFN0 cmVhbXM6bnVtVnNuZFN0cmVhbXNdCisJCXguU3RyZWFtcyA9IG1ha2UoW11TdHJlYW1pbmZvLCBu dW1Wc25kU3RyZWFtcykKKwkJZm9yIGksIHYgOj0gcmFuZ2UgY1N0cmVhbXMgeworCQkJaWYgZXJy IDo9IHguU3RyZWFtc1tpXS5mcm9tQygmdik7IGVyciAhPSBuaWwgeworCQkJCXJldHVybiBlcnIK KwkJCX0KIAkJfQogCX0KIApAQCAtMzExNywxMiArMzE3NywxNCBAQCBmdW5jICh4ICpWc25kaW5m bykgZnJvbUMoeGMgKkMubGlieGxfdnNuZGluZm8pIGVycm9yIHsKIAl4LkZyb250ZW5kSWQgPSB1 aW50MzIoeGMuZnJvbnRlbmRfaWQpCiAJeC5EZXZpZCA9IERldmlkKHhjLmRldmlkKQogCXguU3Rh dGUgPSBpbnQoeGMuc3RhdGUpCi0JbnVtVnNuZFBjbXMgOj0gaW50KHhjLm51bV92c25kX3BjbXMp Ci0JY1BjbXMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX3BjbWluZm8pKHVuc2FmZS5Qb2ludGVyKHhj LnBjbXMpKVs6bnVtVnNuZFBjbXM6bnVtVnNuZFBjbXNdCi0JeC5QY21zID0gbWFrZShbXVBjbWlu Zm8sIG51bVZzbmRQY21zKQotCWZvciBpLCB2IDo9IHJhbmdlIGNQY21zIHsKLQkJaWYgZXJyIDo9 IHguUGNtc1tpXS5mcm9tQygmdik7IGVyciAhPSBuaWwgewotCQkJcmV0dXJuIGVycgorCXguUGNt cyA9IG5pbAorCWlmIG51bVZzbmRQY21zIDo9IGludCh4Yy5udW1fdnNuZF9wY21zKTsgbnVtVnNu ZFBjbXMgPiAwIHsKKwkJY1BjbXMgOj0gKCpbMSA8PCAyOF1DLmxpYnhsX3BjbWluZm8pKHVuc2Fm ZS5Qb2ludGVyKHhjLnBjbXMpKVs6bnVtVnNuZFBjbXM6bnVtVnNuZFBjbXNdCisJCXguUGNtcyA9 IG1ha2UoW11QY21pbmZvLCBudW1Wc25kUGNtcykKKwkJZm9yIGksIHYgOj0gcmFuZ2UgY1BjbXMg eworCQkJaWYgZXJyIDo9IHguUGNtc1tpXS5mcm9tQygmdik7IGVyciAhPSBuaWwgeworCQkJCXJl dHVybiBlcnIKKwkJCX0KIAkJfQogCX0KIApAQCAtMzE5OSwxMSArMzI2MSwxMyBAQCBmdW5jICh4 ICpWa2JpbmZvKSB0b0MoeGMgKkMubGlieGxfdmtiaW5mbykgKGVyciBlcnJvcikgewogZnVuYyAo eCAqTnVtYWluZm8pIGZyb21DKHhjICpDLmxpYnhsX251bWFpbmZvKSBlcnJvciB7CiAJeC5TaXpl ID0gdWludDY0KHhjLnNpemUpCiAJeC5GcmVlID0gdWludDY0KHhjLmZyZWUpCi0JbnVtRGlzdHMg Oj0gaW50KHhjLm51bV9kaXN0cykKLQljRGlzdHMgOj0gKCpbMSA8PCAyOF1DLnVpbnQzMl90KSh1 bnNhZmUuUG9pbnRlcih4Yy5kaXN0cykpWzpudW1EaXN0czpudW1EaXN0c10KLQl4LkRpc3RzID0g bWFrZShbXXVpbnQzMiwgbnVtRGlzdHMpCi0JZm9yIGksIHYgOj0gcmFuZ2UgY0Rpc3RzIHsKLQkJ eC5EaXN0c1tpXSA9IHVpbnQzMih2KQorCXguRGlzdHMgPSBuaWwKKwlpZiBudW1EaXN0cyA6PSBp bnQoeGMubnVtX2Rpc3RzKTsgbnVtRGlzdHMgPiAwIHsKKwkJY0Rpc3RzIDo9ICgqWzEgPDwgMjhd Qy51aW50MzJfdCkodW5zYWZlLlBvaW50ZXIoeGMuZGlzdHMpKVs6bnVtRGlzdHM6bnVtRGlzdHNd CisJCXguRGlzdHMgPSBtYWtlKFtddWludDMyLCBudW1EaXN0cykKKwkJZm9yIGksIHYgOj0gcmFu Z2UgY0Rpc3RzIHsKKwkJCXguRGlzdHNbaV0gPSB1aW50MzIodikKKwkJfQogCX0KIAogCXJldHVy biBuaWwKLS0gCjIuMjQuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2pl Y3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4t ZGV2ZWw=