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=-12.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,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 4963CC433E1 for ; Tue, 18 Aug 2020 15:58:12 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (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 0435B20897 for ; Tue, 18 Aug 2020 15:58:12 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=quicinc.com header.i=@quicinc.com header.b="Imt1ZMCZ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0435B20897 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=quicinc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:58618 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k8403-0002om-67 for qemu-devel@archiver.kernel.org; Tue, 18 Aug 2020 11:58:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60798) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k83tM-0006ld-RM for qemu-devel@nongnu.org; Tue, 18 Aug 2020 11:51:16 -0400 Received: from alexa-out-sd-01.qualcomm.com ([199.106.114.38]:55154) by eggs.gnu.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1k83tI-0005rj-5t for qemu-devel@nongnu.org; Tue, 18 Aug 2020 11:51:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1597765872; x=1629301872; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=PiMcCm0yiTCrWb7VhQw9rgLokQuuA5r1uFiA94G21MQ=; b=Imt1ZMCZ/NUlo7Y66dt9OWePKhvpxy2dp6N1A/b+FhAc9Csj9G1uyzvo vpK+zkZXFE8g4plqEO8nnshyQiuvOQXFKdGoe69+7kNb85pImAha6sJKl jYe6UsParMc0Z+VqHVOK95PaAz31hfjUwQLriepSvkjUZ3Z++lQuBsNiv w=; Received: from unknown (HELO ironmsg-SD-alpha.qualcomm.com) ([10.53.140.30]) by alexa-out-sd-01.qualcomm.com with ESMTP; 18 Aug 2020 08:50:58 -0700 Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg-SD-alpha.qualcomm.com with ESMTP; 18 Aug 2020 08:50:58 -0700 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id 0CFDBEB5; Tue, 18 Aug 2020 10:50:58 -0500 (CDT) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [RFC PATCH v3 23/34] Hexagon (target/hexagon) generater phase 4 - decode tree Date: Tue, 18 Aug 2020 10:50:36 -0500 Message-Id: <1597765847-16637-24-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1597765847-16637-1-git-send-email-tsimpson@quicinc.com> References: <1597765847-16637-1-git-send-email-tsimpson@quicinc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Received-SPF: pass client-ip=199.106.114.38; envelope-from=tsimpson@qualcomm.com; helo=alexa-out-sd-01.qualcomm.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/08/18 11:48:34 X-ACL-Warn: Detected OS = FreeBSD 9.x or newer [fuzzy] X-Spam_score_int: -32 X-Spam_score: -3.3 X-Spam_bar: --- X-Spam_report: (-3.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: ale@rev.ng, riku.voipio@iki.fi, richard.henderson@linaro.org, laurent@vivier.eu, tsimpson@quicinc.com, philmd@redhat.com, aleksandar.m.mail@gmail.com Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" UHl0aG9uIHNjcmlwdCB0aGF0IGVtaXRzIHRoZSBkZWNvZGUgdHJlZSBpbiBkZWN0cmVlX2dlbmVy YXRlZC5oLgoKU2lnbmVkLW9mZi1ieTogVGF5bG9yIFNpbXBzb24gPHRzaW1wc29uQHF1aWNpbmMu Y29tPgotLS0KIHRhcmdldC9oZXhhZ29uL2RlY3RyZWUucHkgfCAzNTIgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDM1MiBpbnNl cnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA3NTUgdGFyZ2V0L2hleGFnb24vZGVjdHJlZS5weQoK ZGlmZiAtLWdpdCBhL3RhcmdldC9oZXhhZ29uL2RlY3RyZWUucHkgYi90YXJnZXQvaGV4YWdvbi9k ZWN0cmVlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ3YTA1YTMKLS0t IC9kZXYvbnVsbAorKysgYi90YXJnZXQvaGV4YWdvbi9kZWN0cmVlLnB5CkBAIC0wLDAgKzEsMzUy IEBACisjIS91c3IvYmluL2VudiBweXRob24zCisKKyMjCisjIyAgQ29weXJpZ2h0KGMpIDIwMTkt MjAyMCBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk LgorIyMKKyMjICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyMgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIyAgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMj ICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIyMKKyMjICBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMj ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorIyMgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyMjICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorIyMKKyMjICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyMgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt OyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisjIworCitpbXBv cnQgaW8KK2ltcG9ydCByZQorCitpbXBvcnQgc3lzCitpbXBvcnQgaXNldAorCitlbmNzID0ge3Rh ZyA6ICcnLmpvaW4ocmV2ZXJzZWQoaXNldC5pc2V0W3RhZ11bJ2VuYyddLnJlcGxhY2UoJyAnLCAn JykpKQorICAgIGZvciB0YWcgaW4gaXNldC50YWdzIGlmIGlzZXQuaXNldFt0YWddWydlbmMnXSAh PSAnTUlTU0lORyBFTkNPRElORyd9CisKK2VuY19jbGFzc2VzID0gc2V0KFtpc2V0LmlzZXRbdGFn XVsnZW5jX2NsYXNzJ10gZm9yIHRhZyBpbiBlbmNzLmtleXMoKV0pCitzdWJpbnNuX2VuY19jbGFz c2VzID0gXAorICAgIHNldChbZW5jX2NsYXNzIGZvciBlbmNfY2xhc3MgaW4gZW5jX2NsYXNzZXMg XAorICAgICAgICBpZiBlbmNfY2xhc3Muc3RhcnRzd2l0aCgnU1VCSU5TTl8nKV0pCitleHRfZW5j X2NsYXNzZXMgPSBcCisgICAgc2V0KFtlbmNfY2xhc3MgZm9yIGVuY19jbGFzcyBpbiBlbmNfY2xh c3NlcyBcCisgICAgICAgIGlmIGVuY19jbGFzcyBub3QgaW4gKCdOT1JNQUwnLCAnMTZCSVQnKSBh bmQgXAorICAgICAgICAgICBub3QgZW5jX2NsYXNzLnN0YXJ0c3dpdGgoJ1NVQklOU05fJyldKQor Cit0cnk6CisgICAgc3ViaW5zbl9ncm91cGluZ3MgPSBpc2V0LnN1Ymluc25fZ3JvdXBpbmdzCitl eGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgc3ViaW5zbl9ncm91cGluZ3MgPSB7fQorCitmb3Ig KHRhZywgc3ViaW5zbl9ncm91cGluZykgaW4gc3ViaW5zbl9ncm91cGluZ3MuaXRlbXMoKToKKyAg ICBlbmNzW3RhZ10gPSAnJy5qb2luKHJldmVyc2VkKHN1Ymluc25fZ3JvdXBpbmdbJ2VuYyddLnJl cGxhY2UoJyAnLCAnJykpKQorCitkZWN0cmVlX25vcm1hbCA9IHsnbGVhdmVzJyA6IHNldCgpfQor ZGVjdHJlZV8xNmJpdCA9IHsnbGVhdmVzJyA6IHNldCgpfQorZGVjdHJlZV9zdWJpbnNuX2dyb3Vw aW5ncyA9IHsnbGVhdmVzJyA6IHNldCgpfQorZGVjdHJlZV9zdWJpbnNucyA9IHtuYW1lIDogeyds ZWF2ZXMnIDogc2V0KCl9IGZvciBuYW1lIGluIHN1Ymluc25fZW5jX2NsYXNzZXN9CitkZWN0cmVl X2V4dGVuc2lvbnMgPSB7bmFtZSA6IHsnbGVhdmVzJyA6IHNldCgpfSBmb3IgbmFtZSBpbiBleHRf ZW5jX2NsYXNzZXN9CisKK2ZvciB0YWcgaW4gZW5jcy5rZXlzKCk6CisgICAgaWYgdGFnIGluIHN1 Ymluc25fZ3JvdXBpbmdzOgorICAgICAgICBkZWN0cmVlX3N1Ymluc25fZ3JvdXBpbmdzWydsZWF2 ZXMnXS5hZGQodGFnKQorICAgICAgICBjb250aW51ZQorICAgIGVuY19jbGFzcyA9IGlzZXQuaXNl dFt0YWddWydlbmNfY2xhc3MnXQorICAgIGlmIGVuY19jbGFzcy5zdGFydHN3aXRoKCdTVUJJTlNO XycpOgorICAgICAgICBpZiBsZW4oZW5jc1t0YWddKSAhPSAzMjoKKyAgICAgICAgICAgIGVuY3Nb dGFnXSA9IGVuY3NbdGFnXSArICcwJyAqICgzMiAtIGxlbihlbmNzW3RhZ10pKQorICAgICAgICBk ZWN0cmVlX3N1Ymluc25zW2VuY19jbGFzc11bJ2xlYXZlcyddLmFkZCh0YWcpCisgICAgZWxpZiAg ZW5jX2NsYXNzID09ICcxNkJJVCc6CisgICAgICAgIGlmIGxlbihlbmNzW3RhZ10pICE9IDE2Ogor ICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdUYWcgInt9IiBoYXMgZW5jX2NsYXNzICJ7fSIg YW5kIG5vdCBhbiBlbmNvZGluZyAnICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lk dGggb2YgMTYgYml0cyEnLmZvcm1hdCh0YWcsIGVuY19jbGFzcykpCisgICAgICAgIGRlY3RyZWVf MTZiaXRbJ2xlYXZlcyddLmFkZCh0YWcpCisgICAgZWxzZToKKyAgICAgICAgaWYgbGVuKGVuY3Nb dGFnXSkgIT0gMzI6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1RhZyAie30iIGhhcyBl bmNfY2xhc3MgInt9IiBhbmQgbm90IGFuIGVuY29kaW5nICcgKworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICd3aWR0aCBvZiAzMiBiaXRzIScuZm9ybWF0KHRhZywgZW5jX2NsYXNzKSkKKyAg ICAgICAgaWYgZW5jX2NsYXNzID09ICdOT1JNQUwnOgorICAgICAgICAgICAgZGVjdHJlZV9ub3Jt YWxbJ2xlYXZlcyddLmFkZCh0YWcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZWN0cmVl X2V4dGVuc2lvbnNbZW5jX2NsYXNzXVsnbGVhdmVzJ10uYWRkKHRhZykKKworZmFrZXRhZ3MgPSBz ZXQoKQorZm9yICh0YWcsIGVuYykgaW4gaXNldC5lbmNfZXh0X3NwYWNlcy5pdGVtcygpOgorICAg IGZha2V0YWdzLmFkZCh0YWcpCisgICAgZW5jc1t0YWddID0gJycuam9pbihyZXZlcnNlZChlbmMu cmVwbGFjZSgnICcsICcnKSkpCisgICAgZGVjdHJlZV9ub3JtYWxbJ2xlYXZlcyddLmFkZCh0YWcp CisKK2Zha2V0YWdzIHw9IHNldChzdWJpbnNuX2dyb3VwaW5ncy5rZXlzKCkpCisKK2RlZiBldmVy eV9iaXRfY291bnRzKGJpdHNldCk6CisgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKG5leHQoaXRl cihiaXRzZXQpKSkpOgorICAgICAgICBpZiBsZW4oc2V0KFtiaXRzWzppXSArIGJpdHNbaSsxOl0g Zm9yIGJpdHMgaW4gYml0c2V0XSkpID09IGxlbihiaXRzZXQpOgorICAgICAgICAgICAgcmV0dXJu IEZhbHNlCisgICAgcmV0dXJuIFRydWUKKworZGVmIGF1dG9fc2VwYXJhdGUobm9kZSk6CisgICAg dGFncyA9IG5vZGVbJ2xlYXZlcyddCisgICAgaWYgbGVuKHRhZ3MpIDw9IDE6CisgICAgICAgIHJl dHVybgorICAgIGVuY193aWR0aCA9IGxlbihlbmNzW25leHQoaXRlcih0YWdzKSldKQorICAgIG9w Y29kZV9iaXRfZm9yX2FsbCA9IFwKKyAgICAgICAgW2FsbChbZW5jc1t0YWddW2ldIGluICcwMScg XAorICAgICAgICAgICAgZm9yIHRhZyBpbiB0YWdzXSkgZm9yIGkgaW4gcmFuZ2UoZW5jX3dpZHRo KV0KKyAgICBvcGNvZGVfYml0X2lzXzBfZm9yX2FsbCA9IFwKKyAgICAgICAgW29wY29kZV9iaXRf Zm9yX2FsbFtpXSBhbmQgYWxsKFtlbmNzW3RhZ11baV0gPT0gJzAnIFwKKyAgICAgICAgICAgIGZv ciB0YWcgaW4gdGFnc10pIGZvciBpIGluIHJhbmdlKGVuY193aWR0aCldCisgICAgb3Bjb2RlX2Jp dF9pc18xX2Zvcl9hbGwgPSBcCisgICAgICAgIFtvcGNvZGVfYml0X2Zvcl9hbGxbaV0gYW5kIGFs bChbZW5jc1t0YWddW2ldID09ICcxJyBcCisgICAgICAgICAgICBmb3IgdGFnIGluIHRhZ3NdKSBm b3IgaSBpbiByYW5nZShlbmNfd2lkdGgpXQorICAgIGRpZmZlcmVudGlhdG9yX29wY29kZV9iaXQg PSBcCisgICAgICAgIFtvcGNvZGVfYml0X2Zvcl9hbGxbaV0gYW5kIFwKKyAgICAgICAgIG5vdCAo b3Bjb2RlX2JpdF9pc18wX2Zvcl9hbGxbaV0gb3IgXAorICAgICAgICAgb3Bjb2RlX2JpdF9pc18x X2Zvcl9hbGxbaV0pIFwKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGVuY193aWR0aCldCisg ICAgYmVzdF93aWR0aCA9IDAKKyAgICBmb3Igd2lkdGggaW4gcmFuZ2UoNCwgMCwgLTEpOgorICAg ICAgICBmb3IgbHNiIGluIHJhbmdlKGVuY193aWR0aCAtIHdpZHRoLCAtMSwgLTEpOgorICAgICAg ICAgICAgYml0c2V0ID0gc2V0KFtlbmNzW3RhZ11bbHNiOmxzYit3aWR0aF0gZm9yIHRhZyBpbiB0 YWdzXSkKKyAgICAgICAgICAgIGlmIGFsbChkaWZmZXJlbnRpYXRvcl9vcGNvZGVfYml0W2xzYjps c2Ird2lkdGhdKSBhbmQgXAorICAgICAgICAgICAgICAgIChsZW4oYml0c2V0KSA9PSBsZW4odGFn cykgb3IgZXZlcnlfYml0X2NvdW50cyhiaXRzZXQpKToKKyAgICAgICAgICAgICAgICBiZXN0X3dp ZHRoID0gd2lkdGgKKyAgICAgICAgICAgICAgICBiZXN0X2xzYiA9IGxzYgorICAgICAgICAgICAg ICAgIGNhdWdodF9hbGxfdGFncyA9IGxlbihiaXRzZXQpID09IGxlbih0YWdzKQorICAgICAgICAg ICAgICAgIGJyZWFrCisgICAgICAgIGlmIGJlc3Rfd2lkdGggIT0gMDoKKyAgICAgICAgICAgIGJy ZWFrCisgICAgaWYgYmVzdF93aWR0aCA9PSAwOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0Nv dWxkIG5vdCBmaW5kIGEgd2F5IHRvIGRpZmZlcmVudGlhdGUgdGhlIGVuY29kaW5ncyAnICsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAnb2YgdGhlIGZvbGxvd2luZyB0YWdzOlxue30nLmZvcm1h dCgnXG4nLmpvaW4odGFncykpKQorICAgIGlmIGNhdWdodF9hbGxfdGFnczoKKyAgICAgICAgZm9y IHdpZHRoIGluIHJhbmdlKDEsIGJlc3Rfd2lkdGgpOgorICAgICAgICAgICAgZm9yIGxzYiBpbiBy YW5nZShlbmNfd2lkdGggLSB3aWR0aCwgLTEsIC0xKToKKyAgICAgICAgICAgICAgICBiaXRzZXQg PSBzZXQoW2VuY3NbdGFnXVtsc2I6bHNiK3dpZHRoXSBmb3IgdGFnIGluIHRhZ3NdKQorICAgICAg ICAgICAgICAgIGlmIGFsbChkaWZmZXJlbnRpYXRvcl9vcGNvZGVfYml0W2xzYjpsc2Ird2lkdGhd KSBhbmQgXAorICAgICAgICAgICAgICAgICAgICBsZW4oYml0c2V0KSA9PSBsZW4odGFncyk6Cisg ICAgICAgICAgICAgICAgICAgIGJlc3Rfd2lkdGggPSB3aWR0aAorICAgICAgICAgICAgICAgICAg ICBiZXN0X2xzYiA9IGxzYgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAg ZWxzZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgYnJlYWsKKyAgICBu b2RlWydzZXBhcmF0b3JfbHNiJ10gPSBiZXN0X2xzYgorICAgIG5vZGVbJ3NlcGFyYXRvcl93aWR0 aCddID0gYmVzdF93aWR0aAorICAgIG5vZGVbJ2NoaWxkcmVuJ10gPSBbXQorICAgIGZvciB2YWx1 ZSBpbiByYW5nZSgyICoqIGJlc3Rfd2lkdGgpOgorICAgICAgICBjaGlsZCA9IHt9CisgICAgICAg IGJpdHMgPSAnJy5qb2luKHJldmVyc2VkKCd7OjB7fWJ9Jy5mb3JtYXQodmFsdWUsIGJlc3Rfd2lk dGgpKSkKKyAgICAgICAgY2hpbGRbJ2xlYXZlcyddID0gXAorICAgICAgICAgICAgc2V0KFt0YWcg Zm9yIHRhZyBpbiB0YWdzIFwKKyAgICAgICAgICAgICAgICBpZiBlbmNzW3RhZ11bYmVzdF9sc2I6 YmVzdF9sc2IrYmVzdF93aWR0aF0gPT0gYml0c10pCisgICAgICAgIG5vZGVbJ2NoaWxkcmVuJ10u YXBwZW5kKGNoaWxkKQorICAgIGZvciBjaGlsZCBpbiBub2RlWydjaGlsZHJlbiddOgorICAgICAg ICBhdXRvX3NlcGFyYXRlKGNoaWxkKQorCithdXRvX3NlcGFyYXRlKGRlY3RyZWVfbm9ybWFsKQor YXV0b19zZXBhcmF0ZShkZWN0cmVlXzE2Yml0KQoraWYgc3ViaW5zbl9ncm91cGluZ3M6CisgICAg YXV0b19zZXBhcmF0ZShkZWN0cmVlX3N1Ymluc25fZ3JvdXBpbmdzKQorZm9yIGRlY3RyZWVfc3Vi aW5zbiBpbiBkZWN0cmVlX3N1Ymluc25zLnZhbHVlcygpOgorICAgIGF1dG9fc2VwYXJhdGUoZGVj dHJlZV9zdWJpbnNuKQorZm9yIGRlY3RyZWVfZXh0IGluIGRlY3RyZWVfZXh0ZW5zaW9ucy52YWx1 ZXMoKToKKyAgICBhdXRvX3NlcGFyYXRlKGRlY3RyZWVfZXh0KQorCitmb3IgdGFnIGluIGZha2V0 YWdzOgorICAgIGRlbCBlbmNzW3RhZ10KKworZGVmIHRhYmxlX25hbWUocGFyZW50cywgbm9kZSk6 CisgICAgcGF0aCA9IHBhcmVudHMgKyBbbm9kZV0KKyAgICByb290ID0gcGF0aFswXQorICAgIHRh ZyA9IG5leHQoaXRlcihub2RlWydsZWF2ZXMnXSkpCisgICAgaWYgdGFnIGluIHN1Ymluc25fZ3Jv dXBpbmdzOgorICAgICAgICBlbmNfd2lkdGggPSBsZW4oc3ViaW5zbl9ncm91cGluZ3NbdGFnXVsn ZW5jJ10ucmVwbGFjZSgnICcsICcnKSkKKyAgICBlbHNlOgorICAgICAgICB0YWcgPSBuZXh0KGl0 ZXIobm9kZVsnbGVhdmVzJ10gLSBmYWtldGFncykpCisgICAgICAgIGVuY193aWR0aCA9IGxlbihl bmNzW3RhZ10pCisgICAgZGV0ZXJtaW5pbmdfYml0cyA9IFsnXyddICogZW5jX3dpZHRoCisgICAg Zm9yIChwYXJlbnQsIGNoaWxkKSBpbiB6aXAocGF0aFs6LTFdLCBwYXRoWzE6XSk6CisgICAgICAg IGxzYiA9IHBhcmVudFsnc2VwYXJhdG9yX2xzYiddCisgICAgICAgIHdpZHRoID0gcGFyZW50Wydz ZXBhcmF0b3Jfd2lkdGgnXQorICAgICAgICB2YWx1ZSA9IHBhcmVudFsnY2hpbGRyZW4nXS5pbmRl eChjaGlsZCkKKyAgICAgICAgZGV0ZXJtaW5pbmdfYml0c1tsc2I6bHNiK3dpZHRoXSA9IFwKKyAg ICAgICAgICAgIGxpc3QocmV2ZXJzZWQoJ3s6MHt9Yn0nLmZvcm1hdCh2YWx1ZSwgd2lkdGgpKSkK KyAgICBpZiB0YWcgaW4gc3ViaW5zbl9ncm91cGluZ3M6CisgICAgICAgIG5hbWUgPSAnREVDT0RF X1JPT1RfRUUnCisgICAgZWxzZToKKyAgICAgICAgZW5jX2NsYXNzID0gaXNldC5pc2V0W3RhZ11b J2VuY19jbGFzcyddCisgICAgICAgIGlmIGVuY19jbGFzcyBpbiBleHRfZW5jX2NsYXNzZXM6Cisg ICAgICAgICAgICBuYW1lID0gJ0RFQ09ERV9FWFRfe30nLmZvcm1hdChlbmNfY2xhc3MpCisgICAg ICAgIGVsaWYgZW5jX2NsYXNzIGluIHN1Ymluc25fZW5jX2NsYXNzZXM6CisgICAgICAgICAgICBu YW1lID0gJ0RFQ09ERV9TVUJJTlNOX3t9Jy5mb3JtYXQoZW5jX2NsYXNzKQorICAgICAgICBlbHNl OgorICAgICAgICAgICAgbmFtZSA9ICdERUNPREVfUk9PVF97fScuZm9ybWF0KGVuY193aWR0aCkK KyAgICBpZiBub2RlICE9IHJvb3Q6CisgICAgICAgIG5hbWUgKz0gJ18nICsgJycuam9pbihyZXZl cnNlZChkZXRlcm1pbmluZ19iaXRzKSkKKyAgICByZXR1cm4gbmFtZQorCitkZWYgcHJpbnRfbm9k ZShmLCBub2RlLCBwYXJlbnRzKToKKyAgICBpZiBsZW4obm9kZVsnbGVhdmVzJ10pIDw9IDE6Cisg ICAgICAgIHJldHVybgorICAgIG5hbWUgPSB0YWJsZV9uYW1lKHBhcmVudHMsIG5vZGUpCisgICAg bHNiID0gbm9kZVsnc2VwYXJhdG9yX2xzYiddCisgICAgd2lkdGggPSBub2RlWydzZXBhcmF0b3Jf d2lkdGgnXQorICAgIHByaW50KCdERUNPREVfTkVXX1RBQkxFKHt9LHt9LERFQ09ERV9TRVBBUkFU T1JfQklUUyh7fSx7fSkpJy5cCisgICAgICAgIGZvcm1hdChuYW1lLCAyICoqIHdpZHRoLCBsc2Is IHdpZHRoKSwgZmlsZT1mKQorICAgIGZvciBjaGlsZCBpbiBub2RlWydjaGlsZHJlbiddOgorICAg ICAgICBpZiBsZW4oY2hpbGRbJ2xlYXZlcyddKSA9PSAwOgorICAgICAgICAgICAgcHJpbnQoJ0lO VkFMSUQoKScsIGZpbGU9ZikKKyAgICAgICAgZWxpZiBsZW4oY2hpbGRbJ2xlYXZlcyddKSA9PSAx OgorICAgICAgICAgICAgKHRhZywpID0gY2hpbGRbJ2xlYXZlcyddCisgICAgICAgICAgICBpZiB0 YWcgaW4gc3ViaW5zbl9ncm91cGluZ3M6CisgICAgICAgICAgICAgICAgY2xhc3NfYSA9IHN1Ymlu c25fZ3JvdXBpbmdzW3RhZ11bJ2NsYXNzX2EnXQorICAgICAgICAgICAgICAgIGNsYXNzX2IgPSBz dWJpbnNuX2dyb3VwaW5nc1t0YWddWydjbGFzc19iJ10KKyAgICAgICAgICAgICAgICBlbmMgPSBz dWJpbnNuX2dyb3VwaW5nc1t0YWddWydlbmMnXS5yZXBsYWNlKCcgJywgJycpCisgICAgICAgICAg ICAgICAgaWYgJ1JFU0VSVkVEJyBpbiB0YWc6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCdJ TlZBTElEKCknLCBmaWxlPWYpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg ICAgICAgcHJpbnQoJ1NVQklOU05TKHt9LHt9LHt9LCJ7fSIpJy5cCisgICAgICAgICAgICAgICAg ICAgICAgICBmb3JtYXQodGFnLCBjbGFzc19hLCBjbGFzc19iLCBlbmMpLCBmaWxlPWYpCisgICAg ICAgICAgICBlbGlmIHRhZyBpbiBpc2V0LmVuY19leHRfc3BhY2VzOgorICAgICAgICAgICAgICAg IGVuYyA9IGlzZXQuZW5jX2V4dF9zcGFjZXNbdGFnXS5yZXBsYWNlKCcgJywgJycpCisgICAgICAg ICAgICAgICAgcHJpbnQoJ0VYVFNQQUNFKHt9LCJ7fSIpJy5mb3JtYXQodGFnLCBlbmMpLCBmaWxl PWYpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGVuYyA9ICcnLmpvaW4ocmV2 ZXJzZWQoZW5jc1t0YWddKSkKKyAgICAgICAgICAgICAgICBwcmludCgnVEVSTUlOQUwoe30sInt9 IiknLmZvcm1hdCh0YWcsIGVuYyksIGZpbGU9ZikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg IHByaW50KCdUQUJMRV9MSU5LKHt9KScuZm9ybWF0KHRhYmxlX25hbWUocGFyZW50cyArIFtub2Rl XSwgY2hpbGQpKSwKKyAgICAgICAgICAgICAgICAgIGZpbGU9ZikKKyAgICBwcmludCgnREVDT0RF X0VORF9UQUJMRSh7fSx7fSxERUNPREVfU0VQQVJBVE9SX0JJVFMoe30se30pKScuXAorICAgICAg ICBmb3JtYXQobmFtZSwgMiAqKiB3aWR0aCwgbHNiLCB3aWR0aCksIGZpbGU9ZikKKyAgICBwcmlu dChmaWxlPWYpCisgICAgcGFyZW50cy5hcHBlbmQobm9kZSkKKyAgICBmb3IgY2hpbGQgaW4gbm9k ZVsnY2hpbGRyZW4nXToKKyAgICAgICAgcHJpbnRfbm9kZShmLCBjaGlsZCwgcGFyZW50cykKKyAg ICBwYXJlbnRzLnBvcCgpCisKK2RlZiBwcmludF90cmVlKGYsIHRyZWUpOgorICAgIHByaW50X25v ZGUoZiwgdHJlZSwgW10pCisKK2RlZiBwcmludF9tYXRjaF9pbmZvKGYpOgorICAgIGZvciB0YWcg aW4gc29ydGVkKGVuY3Mua2V5cygpLCBrZXk9aXNldC50YWdzLmluZGV4KToKKyAgICAgICAgZW5j ID0gJycuam9pbihyZXZlcnNlZChlbmNzW3RhZ10pKQorICAgICAgICBtYXNrID0gaW50KHJlLnN1 YihyJ1teMV0nLCByJzAnLCBlbmMucmVwbGFjZSgnMCcsICcxJykpLCAyKQorICAgICAgICBtYXRj aCA9IGludChyZS5zdWIocidbXjAxXScsIHInMCcsIGVuYyksIDIpCisgICAgICAgIHN1ZmZpeCA9 ICcnCisgICAgICAgIHByaW50KCdERUNPREV7fV9NQVRDSF9JTkZPKHt9LDB4ezp4fVUsMHh7Onh9 VSknLlwKKyAgICAgICAgICAgIGZvcm1hdChzdWZmaXgsIHRhZywgbWFzaywgbWF0Y2gpLCBmaWxl PWYpCisKK3JlZ3JlID0gcmUuY29tcGlsZSgKKyAgICByJygoPzwhRFVQKVtNTk9SQ1BRWFNHVlpB XSkoW3N0dXZ3eHl6ZGVmZ10rKShbLl0/W0xsSGhdPykoXGQrUz8pJykKK2ltbXJlID0gcmUuY29t cGlsZShyJ1sjXShbclJzU3VVbV0pKFxkKykoPzpbOl0oXGQrKSk/JykKKworZGVmIG9yZGVyZWRf dW5pcXVlKGwpOgorICAgIHJldHVybiBzb3J0ZWQoc2V0KGwpLCBrZXk9bC5pbmRleCkKKworaW1w bGljaXRfcmVnaXN0ZXJzID0geworICAgICdTUCcgOiAyOSwKKyAgICAnRlAnIDogMzAsCisgICAg J0xSJyA6IDMxCit9CisKK251bV9yZWdpc3RlcnMgPSB7CisgICAgJ1InIDogMzIsCisgICAgJ1Yn IDogMzIKK30KKworZGVmIHByaW50X29wX2luZm8oZik6CisgICAgZm9yIHRhZyBpbiBzb3J0ZWQo ZW5jcy5rZXlzKCksIGtleT1pc2V0LnRhZ3MuaW5kZXgpOgorICAgICAgICBlbmMgPSBlbmNzW3Rh Z10KKyAgICAgICAgcHJpbnQoZmlsZT1mKQorICAgICAgICBwcmludCgnREVDT0RFX09QSU5GTyh7 fSwnLmZvcm1hdCh0YWcpLCBmaWxlPWYpCisgICAgICAgIHJlZ3MgPSBvcmRlcmVkX3VuaXF1ZShy ZWdyZS5maW5kYWxsKGlzZXQuaXNldFt0YWddWydzeW50YXgnXSkpCisgICAgICAgIGltbXMgPSBv cmRlcmVkX3VuaXF1ZShpbW1yZS5maW5kYWxsKGlzZXQuaXNldFt0YWddWydzeW50YXgnXSkpCisg ICAgICAgIHJlZ25vID0gMAorICAgICAgICBmb3IgcmVnIGluIHJlZ3M6CisgICAgICAgICAgICBy ZWdfdHlwZSA9IHJlZ1swXQorICAgICAgICAgICAgcmVnX2xldHRlciA9IHJlZ1sxXVswXQorICAg ICAgICAgICAgcmVnX251bV9jaG9pY2VzID0gaW50KHJlZ1szXS5yc3RyaXAoJ1MnKSkKKyAgICAg ICAgICAgIHJlZ19tYXBwaW5nID0gcmVnWzBdICsgJycuam9pbihbJ18nIGZvciBsZXR0ZXIgaW4g cmVnWzFdXSkgKyByZWdbM10KKyAgICAgICAgICAgIHJlZ19lbmNfZmllbGRzID0gcmUuZmluZGFs bChyZWdfbGV0dGVyICsgJysnLCBlbmMpCisgICAgICAgICAgICBpZiBsZW4ocmVnX2VuY19maWVs ZHMpID09IDA6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdUYWcgInt9IiBtaXNz aW5nIHJlZ2lzdGVyIGZpZWxkIScuZm9ybWF0KHRhZykpCisgICAgICAgICAgICBpZiBsZW4ocmVn X2VuY19maWVsZHMpID4gMToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1RhZyAi e30iIGhhcyBzcGxpdCByZWdpc3RlciBmaWVsZCEnLlwKKyAgICAgICAgICAgICAgICAgICAgZm9y bWF0KHRhZykpCisgICAgICAgICAgICByZWdfZW5jX2ZpZWxkID0gcmVnX2VuY19maWVsZHNbMF0K KyAgICAgICAgICAgIGlmIDIgKiogbGVuKHJlZ19lbmNfZmllbGQpICE9IHJlZ19udW1fY2hvaWNl czoKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1RhZyAie30iIGhhcyBpbmNvcnJl Y3QgcmVnaXN0ZXIgZmllbGQgd2lkdGghJy5cCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdCh0 YWcpKQorICAgICAgICAgICAgcHJpbnQoJyAgICAgICAgREVDT0RFX1JFRyh7fSx7fSx7fSknLlwK KyAgICAgICAgICAgICAgICBmb3JtYXQocmVnbm8sIGxlbihyZWdfZW5jX2ZpZWxkKSwgZW5jLmlu ZGV4KHJlZ19lbmNfZmllbGQpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgZmlsZT1mKQorICAg ICAgICAgICAgaWYgcmVnX3R5cGUgaW4gbnVtX3JlZ2lzdGVycyBhbmQgXAorICAgICAgICAgICAg ICAgIHJlZ19udW1fY2hvaWNlcyAhPSBudW1fcmVnaXN0ZXJzW3JlZ190eXBlXToKKyAgICAgICAg ICAgICAgICBwcmludCgnICAgICAgICBERUNPREVfTUFQUEVEX1JFRyh7fSx7fSknLlwKKyAgICAg ICAgICAgICAgICAgICAgZm9ybWF0KHJlZ25vLCByZWdfbWFwcGluZyksIGZpbGU9ZikKKyAgICAg ICAgICAgIHJlZ25vICs9IDEKKyAgICAgICAgZGVmIGltcGxpY2l0X3JlZ2lzdGVyX2tleShyZWcp OgorICAgICAgICAgICAgcmV0dXJuIGltcGxpY2l0X3JlZ2lzdGVyc1tyZWddCisgICAgICAgIGZv ciByZWcgaW4gc29ydGVkKAorICAgICAgICAgICAgc2V0KFtyIGZvciByIGluIChpc2V0LmlzZXRb dGFnXVsncnJlZ3MnXS5zcGxpdCgnLCcpICsgXAorICAgICAgICAgICAgICAgIGlzZXQuaXNldFt0 YWddWyd3cmVncyddLnNwbGl0KCcsJykpIFwKKyAgICAgICAgICAgICAgICAgICAgaWYgciBpbiBp bXBsaWNpdF9yZWdpc3RlcnNdKSwga2V5PWltcGxpY2l0X3JlZ2lzdGVyX2tleSk6CisgICAgICAg ICAgICBwcmludCgnICAgICAgICBERUNPREVfSU1QTF9SRUcoe30se30pJy5cCisgICAgICAgICAg ICAgICAgZm9ybWF0KHJlZ25vLCBpbXBsaWNpdF9yZWdpc3RlcnNbcmVnXSksIGZpbGU9ZikKKyAg ICAgICAgICAgIHJlZ25vICs9IDEKKyAgICAgICAgaWYgaW1tcyBhbmQgaW1tc1swXVswXS5pc3Vw cGVyKCk6CisgICAgICAgICAgICBpbW1zID0gcmV2ZXJzZWQoaW1tcykKKyAgICAgICAgZm9yIGlt bSBpbiBpbW1zOgorICAgICAgICAgICAgaWYgaW1tWzBdLmlzdXBwZXIoKToKKyAgICAgICAgICAg ICAgICBpbW1ubyA9IDEKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaW1tbm8g PSAwCisgICAgICAgICAgICBpbW1fdHlwZSA9IGltbVswXQorICAgICAgICAgICAgaW1tX3dpZHRo ID0gaW50KGltbVsxXSkKKyAgICAgICAgICAgIGltbV9zaGlmdCA9IGltbVsyXQorICAgICAgICAg ICAgaWYgaW1tX3NoaWZ0OgorICAgICAgICAgICAgICAgIGltbV9zaGlmdCA9IGludChpbW1fc2hp ZnQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGltbV9zaGlmdCA9IDAKKyAg ICAgICAgICAgIGlmIGltbV90eXBlLmlzbG93ZXIoKToKKyAgICAgICAgICAgICAgICBpbW1fbGV0 dGVyID0gJ2knCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGltbV9sZXR0ZXIg PSAnSScKKyAgICAgICAgICAgIHJlbWFpbmRlciA9IGltbV93aWR0aAorICAgICAgICAgICAgZm9y IG0gaW4gcmV2ZXJzZWQobGlzdChyZS5maW5kaXRlcihpbW1fbGV0dGVyICsgJysnLCBlbmMpKSk6 CisgICAgICAgICAgICAgICAgcmVtYWluZGVyIC09IG0uZW5kKCkgLSBtLnN0YXJ0KCkKKyAgICAg ICAgICAgICAgICBwcmludCgnICAgICAgICBERUNPREVfSU1NKHt9LHt9LHt9LHt9KScuXAorICAg ICAgICAgICAgICAgICAgICBmb3JtYXQoaW1tbm8sIG0uZW5kKCkgLSBtLnN0YXJ0KCksIG0uc3Rh cnQoKSwgcmVtYWluZGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU9ZikKKyAgICAg ICAgICAgIGlmIHJlbWFpbmRlciAhPSAwOgorICAgICAgICAgICAgICAgIGlmIGltbVsyXToKKyAg ICAgICAgICAgICAgICAgICAgaW1tWzJdID0gJzonICsgaW1tWzJdCisgICAgICAgICAgICAgICAg cmFpc2UgRXhjZXB0aW9uKCdUYWcgInt9IiBoYXMgYW4gaW5jb3JyZWN0IG51bWJlciBvZiAnICsg XAorICAgICAgICAgICAgICAgICAgICAnZW5jb2RpbmcgYml0cyBmb3IgaW1tZWRpYXRlICJ7fSIn LlwKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0KHRhZywgJycuam9pbihpbW0pKSkKKyAgICAg ICAgICAgIGlmIGltbV90eXBlLmxvd2VyKCkgaW4gJ3NyJzoKKyAgICAgICAgICAgICAgICBwcmlu dCgnICAgICAgICBERUNPREVfSU1NX1NYVCh7fSx7fSknLlwKKyAgICAgICAgICAgICAgICAgICAg Zm9ybWF0KGltbW5vLCBpbW1fd2lkdGgpLCBmaWxlPWYpCisgICAgICAgICAgICBpZiBpbW1fdHlw ZS5sb3dlcigpID09ICduJzoKKyAgICAgICAgICAgICAgICBwcmludCgnICAgICAgICBERUNPREVf SU1NX05FRyh7fSx7fSknLlwKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0KGltbW5vLCBpbW1f d2lkdGgpLCBmaWxlPWYpCisgICAgICAgICAgICBpZiBpbW1fc2hpZnQ6CisgICAgICAgICAgICAg ICAgcHJpbnQoJyAgICAgICAgREVDT0RFX0lNTV9TSElGVCh7fSx7fSknLlwKKyAgICAgICAgICAg ICAgICAgICAgZm9ybWF0KGltbW5vLCBpbW1fc2hpZnQpLCBmaWxlPWYpCisgICAgICAgIHByaW50 KCcpJywgZmlsZT1mKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGYgPSBpby5T dHJpbmdJTygpCisgICAgcHJpbnRfdHJlZShmLCBkZWN0cmVlX25vcm1hbCkKKyAgICBwcmludF90 cmVlKGYsIGRlY3RyZWVfMTZiaXQpCisgICAgaWYgc3ViaW5zbl9ncm91cGluZ3M6CisgICAgICAg IHByaW50X3RyZWUoZiwgZGVjdHJlZV9zdWJpbnNuX2dyb3VwaW5ncykKKyAgICBmb3IgKG5hbWUs IGRlY3RyZWVfc3ViaW5zbikgaW4gc29ydGVkKGRlY3RyZWVfc3ViaW5zbnMuaXRlbXMoKSk6Cisg ICAgICAgIHByaW50X3RyZWUoZiwgZGVjdHJlZV9zdWJpbnNuKQorICAgIGZvciAobmFtZSwgZGVj dHJlZV9leHQpIGluIHNvcnRlZChkZWN0cmVlX2V4dGVuc2lvbnMuaXRlbXMoKSk6CisgICAgICAg IHByaW50X3RyZWUoZiwgZGVjdHJlZV9leHQpCisgICAgcHJpbnRfbWF0Y2hfaW5mbyhmKQorICAg IHByaW50X29wX2luZm8oZikKKyAgICBvcGVuKCdkZWN0cmVlX2dlbmVyYXRlZC5oJywgJ3cnKS53 cml0ZShmLmdldHZhbHVlKCkpCi0tIAoyLjcuNAoK