From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE,URIBL_SBL_A autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 817 invoked from network); 12 Apr 2023 22:12:54 -0000 Received: from zapf.ntg.nl (5.39.185.232) by inbox.vuxu.org with ESMTPUTF8; 12 Apr 2023 22:12:54 -0000 Received: from localhost (localhost [127.0.0.1]) by zapf.ntg.nl (Postfix) with ESMTP id 118FEBE0; Thu, 13 Apr 2023 00:12:31 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at zapf.ntg.nl Received: from zapf.ntg.nl ([127.0.0.1]) by localhost (zapf.ntg.nl [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id iKyFm3LHvvVX; Thu, 13 Apr 2023 00:12:28 +0200 (CEST) Received: from zapf.ntg.nl (localhost [127.0.0.1]) by zapf.ntg.nl (Postfix) with ESMTP id A7C3ABE1; Thu, 13 Apr 2023 00:12:28 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by zapf.ntg.nl (Postfix) with ESMTP id C7B2BBE1 for ; Thu, 13 Apr 2023 00:12:26 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at zapf.ntg.nl Received: from zapf.ntg.nl ([127.0.0.1]) by localhost (zapf.ntg.nl [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id S_9sRwfBHjwF for ; Thu, 13 Apr 2023 00:12:24 +0200 (CEST) Received-SPF: Softfail (mailfrom) identity=mailfrom; client-ip=132.206.73.2; helo=orford.cim.mcgill.ca; envelope-from=adityam@umich.edu; receiver= Received: from orford.cim.mcgill.ca (orford.cim.mcgill.ca [132.206.73.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by zapf.ntg.nl (Postfix) with ESMTPS id E8AB5BE0 for ; Thu, 13 Apr 2023 00:12:22 +0200 (CEST) Received: from adi-thinkpad (unknown [108.175.235.192]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: adityam) by orford.cim.mcgill.ca (Postfix) with ESMTPSA id 3370B19F5B2; Wed, 12 Apr 2023 18:12:21 -0400 (EDT) Date: Wed, 12 Apr 2023 18:12:18 -0400 (EDT) To: Gavin via ntg-context In-Reply-To: Message-ID: <2473s750-5532-4667-o81n-2o4r0263n0op@hzvpu.rqh> References: <9E517741-28B2-4678-92E8-322B9C57B446@comcast.net> <1pno1qn2-518s-0n03-7799-52on321nns77@hzvpu.rqh> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="8323329-1719691949-1681337541=:79580" Subject: Re: [NTG-context] Feynman Diagrams X-BeenThere: ntg-context@ntg.nl X-Mailman-Version: 2.1.38 Precedence: list List-Id: mailing list for ConTeXt users List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Aditya Mahajan via ntg-context Reply-To: mailing list for ConTeXt users Cc: Aditya Mahajan Errors-To: ntg-context-bounces@ntg.nl Sender: "ntg-context" This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --8323329-1719691949-1681337541=:79580 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: QUOTED-PRINTABLE On Wed, 12 Apr 2023, Gavin via ntg-context wrote: > Hi Aditya, >=20 > > Have you tried using feynmp (the metapost macros) directly instead of t= he LaTeX wrapper? Can you create an example that works with metapost but fa= ils in ConTeXt? >=20 > No, I=E2=80=99m not sure how to do that. I looked at the manual, and it h= as some examples where new styles are written in MetaPost, but every diagra= m is drawn with the LaTeX wrapper. I looked in the source files, and maybe = feynmf.dtx has everything to produce documentation for the MetaPost macros,= but if so, I=E2=80=99m not sure how to generate that documentation. >=20 > Can you point me to an example that works with metapost macros directly? I have never used feynMP, so I am just copy-pasting an example from=20 https://osksn2.hep.sci.osaka-u.ac.jp/~taku/osx/feynmp/fmfsamples.pdf \documentclass{article} \usepackage{feynmp} \begin{document} \unitlength =3D 1mm \begin{fmffile}{simple} \begin{fmfgraph}(40,25) \fmfleft{i1,i2} \fmfright{o1,o2} \fmf{fermion}{i1,v1,o1} \fmf{fermion}{i2,v2,o2} \fmf{photon}{v1,v2} \end{fmfgraph} \end{fmffile} \end{document} This creates a file simple.mp in the same directory (kind of like the old m= kii way of including MP in context): % simple.mp -- do not edit, generated automatically by test1.tex input feynmp require_RCS_revision "1.30"; beginchar(1, 40*2.84526pt#, 25*2.84526pt#, 0); "feynmf: 1"; LaTeX_unitlength:=3D2.84526pt; subgraph (0, 0, w, h); vinit; pickup pencircle scaled thin; vleft (__i1, __i2); vright (__o1, __o2); vconnect ("fermion", __i1, __v1, __o1); vconnect ("fermion", __i2, __v2, __o2); vconnect ("photon", __v1, __v2); vfreeze; vdraw; endsubgraph; endchar; % the end. end. endinput; So, I created a context file: \startMPinclusions input feynmp; require_RCS_revision "1.30"; \stopMPinclusions \starttext \startMPpage beginchar(1, 40*2.84526pt#, 25*2.84526pt#, 0); "feynmf: 1"; LaTeX_unitlength:=3D2.84526pt; subgraph (0, 0, w, h); vinit; pickup pencircle scaled thin; vleft (__i1, __i2); vright (__o1, __o2); vconnect ("fermion", __i1, __v1, __o1); vconnect ("fermion", __i2, __v2, __o2); vconnect ("photon", __v1, __v2); vfreeze; vdraw; endsubgraph; endchar; \stopMPpage \stoptext but compiling that fails with=20 metapost > trace > metapost > trace > loading metafun for lmtx, including the plain 1.0= 04 base definitions metapost > trace > metafun > log > metafun > log > error: Isolated expression metafun > log > metapost > trace > 1 metapost > trace > # metafun > log > metafun > log > I couldn't find an '=3D' or ':=3D' after the expres= sion that is shown above this error message, so I guess I'll just ignore it and carry on. metafun > log > metapost > trace > bp# :=3D bp; metapost > trace > My guess is that it could be something to do with bp# being used as a varia= ble, but I am not 100% sure on that.=20 In principle, it should be easier to adapt the feynmp.mp (attached) code to= make it work with LMTX. The feynmp.sty package, simply provide a high leve= l macro wrapper around this mp code, and it is relatively simply to do some= thing similar in context; but the MP file isn't that different from the lat= ex code anyways. Aditya --8323329-1719691949-1681337541=:79580 Content-Type: text/plain; charset=US-ASCII; name=feynmp.mp Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=feynmp.mp JSUNCiUlIFRoaXMgaXMgZmlsZSBgZmV5bm1wLm1wJywNCiUlIGdlbmVyYXRl ZCB3aXRoIHRoZSBkb2NzdHJpcCB1dGlsaXR5Lg0KJSUNCiUlIFRoZSBvcmln aW5hbCBzb3VyY2UgZmlsZXMgd2VyZToNCiUlDQolJSBmZXlubWYuZHR4ICAo d2l0aCBvcHRpb25zOiBgYmFzZSxtcCcpDQolJSANCiUlIENvcHlyaWdodCAo QykgMTk4OSwgMTk5MCwgMTk5Mi0xOTk1IGJ5IFRob3JzdGVuLk9obEBQaHlz aWsuVEgtRGFybXN0YWR0LmRlDQolJSANCiUlIFRoaXMgZmlsZSBpcyBOT1Qg dGhlIHNvdXJjZSBmb3IgZmV5bm1mLCBiZWNhdXNlIGFsbW9zdCBhbGwgY29t bWVudHMNCiUlIGhhdmUgYmVlbiBzdHJpcHBlZCBmcm9tIGl0LiAgSXQgaXMg Tk9UIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiBmZXlubWYNCiUlIGZvciBtYWtp bmcgbW9kaWZpY2F0aW9ucyB0byBpdC4NCiUlIA0KJSUgVGhlcmVmb3JlIHlv dSBjYW4gTk9UIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IFRISVMgZmls ZS4gIFlvdSBjYW4NCiUlIGhvd2V2ZXIgcmVkaXN0cmlidXRlIHRoZSBjb21w bGV0ZSBzb3VyY2UgKGZleW5tZi5kdHggYW5kIGZleW5tZi5pbnMpDQolJSBh bmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMNCiUlIHB1Ymxpc2hlZCBieSAgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwg b3IgKGF0DQolJSB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQol JSANCiUlIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBjYW4gcmVkaXN0 cmlidXRlIHBhcnRzIG9mIHRoaXMgZmlsZSBmb3INCiUlIHRoZSBlbGVjdHJv bmljIGRpc3RyaWJ1dGlvbiBvZiBzY2llbnRpZmljIHBhcGVycywgcHJvdmlk ZWQgdGhhdCB5b3UNCiUlIGluY2x1ZGUgYSBzaG9ydCBub3RlIHBvaW50aW5n IHRvIHRoZSBjb21wbGV0ZSBzb3VyY2UuDQolJSANCiUlIEZleW5tZiBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LCBidXQNCiUlIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YNCiUlIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUN CiUlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuDQolJSANCiUlIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQolJSBhbG9uZyB3 aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT b2Z0d2FyZQ0KJSUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBD YW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuDQolJSANCiUlJSUlJSUlJSUlJSUl JSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUl JSUlJSUlJSUlJSUlJQ0KJSUgXENoZWNrU3VtezkyNH0NCiUlIFxDaGFyYWN0 ZXJUYWJsZQ0KJSUgIHtVcHBlci1jYXNlICAgIFxBXEJcQ1xEXEVcRlxHXEhc SVxKXEtcTFxNXE5cT1xQXFFcUlxTXFRcVVxWXFdcWFxZXFoNCiUlICAgTG93 ZXItY2FzZSAgICBcYVxiXGNcZFxlXGZcZ1xoXGlcalxrXGxcbVxuXG9ccFxx XHJcc1x0XHVcdlx3XHhceVx6DQolJSAgIERpZ2l0cyAgICAgICAgXDBcMVwy XDNcNFw1XDZcN1w4XDkNCiUlICAgRXhjbGFtYXRpb24gICBcISAgICAgRG91 YmxlIHF1b3RlICBcIiAgICAgSGFzaCAobnVtYmVyKSBcIw0KJSUgICBEb2xs YXIgICAgICAgIFwkICAgICBQZXJjZW50ICAgICAgIFwlICAgICBBbXBlcnNh bmQgICAgIFwmDQolJSAgIEFjdXRlIGFjY2VudCAgXCcgICAgIExlZnQgcGFy ZW4gICAgXCggICAgIFJpZ2h0IHBhcmVuICAgXCkNCiUlICAgQXN0ZXJpc2sg ICAgICBcKiAgICAgUGx1cyAgICAgICAgICBcKyAgICAgQ29tbWEgICAgICAg ICBcLA0KJSUgICBNaW51cyAgICAgICAgIFwtICAgICBQb2ludCAgICAgICAg IFwuICAgICBTb2xpZHVzICAgICAgIFwvDQolJSAgIENvbG9uICAgICAgICAg XDogICAgIFNlbWljb2xvbiAgICAgXDsgICAgIExlc3MgdGhhbiAgICAgXDwN CiUlICAgRXF1YWxzICAgICAgICBcPSAgICAgR3JlYXRlciB0aGFuICBcPiAg ICAgUXVlc3Rpb24gbWFyayBcPw0KJSUgICBDb21tZXJjaWFsIGF0IFxAICAg ICBMZWZ0IGJyYWNrZXQgIFxbICAgICBCYWNrc2xhc2ggICAgIFxcDQolJSAg IFJpZ2h0IGJyYWNrZXQgXF0gICAgIENpcmN1bWZsZXggICAgXF4gICAgIFVu ZGVyc2NvcmUgICAgXF8NCiUlICAgR3JhdmUgYWNjZW50ICBcYCAgICAgTGVm dCBicmFjZSAgICBceyAgICAgVmVydGljYWwgYmFyICBcfA0KJSUgICBSaWdo dCBicmFjZSAgIFx9ICAgICBUaWxkZSAgICAgICAgIFx+fQ0KJSUNCiUlJSUl JSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUl JSUlJSUlJSUlJSUlJSUlJSUlJSUlJQ0KZGVmIHN1YmdyYXBoIChleHByIHgs IHksIHdkLCBodCkgPQ0KICBiZWdpbmdyb3VwDQogICAgc2F2ZSBjLCBuZSwg bncsIHN3LCBzZTsNCiAgICBwYWlyIGMsIG5lLCBudywgc3csIHNlOw0KICAg IHN3ID0gKHgseSk7DQogICAgc2UgPSBzdyArICh3ZCwwKTsNCiAgICBudyA9 IHN3ICsgKDAsaHQpOw0KICAgIG5lID0gc3cgKyAod2QsaHQpOw0KICAgIGMg PSAuNVtzdyxuZV07DQplbmRkZWY7DQpkZWYgZW5kc3ViZ3JhcGggPQ0KICBl bmRncm91cA0KZW5kZGVmOw0KaWYga25vd24gY21iYXNlOg0KICBlcnJoZWxw DQogICAgImZleW5tZiB3aWxsIG9ubHkgd29yayB3aXRoIHBsYWluIE1ldGFm b250LCBhcyBkZXNjcmliZWQgaW4gdGhlIGJvb2suIjsNCiAgZXJybWVzc2Fn ZSAiZmV5bm1mOiBDTUJBU0UgZGV0ZWN0ZWQuICBQbGVhc2UgdXNlIHRoZSBQ TEFJTiBiYXNlLiI7DQogIGZvcmV2ZXI6DQogICAgZXJybWVzc2FnZSAiTm8g dXNlIGluIHRyeWluZyEgIFlvdSdkIGJldHRlciBlWGl0IG5vdyAuLi4iOw0K ICAgIGVycm9yc3RvcG1vZGU7DQogIGVuZGZvcg0KZmkNCnZhcmRlZiBwYXJz ZV9SQ1MgKHN1ZmZpeCBSQ1MpIChleHByIHMpID0NCiAgc2F2ZSBuLCBjOw0K ICBudW1lcmljIG4sIFJDU1tdOw0KICBzdHJpbmcgYzsNCiAgUkNTWzBdIDo9 IDA7DQogIGZvciBuID0gMSB1cHRvIGxlbmd0aCAocyk6DQogICAgYyA6PSBz dWJzdHJpbmcgKG4tMSxuKSBvZiBzOw0KICAgIGV4aXRpZiAoKFJDU1swXSA+ IDApIGFuZCAoYyA9ICIgIikpOw0KICAgIGlmICgoYyA9ICIwIikgb3IgKGMg PSAiMSIpIG9yIChjID0gIjIiKQ0KICAgICAgICBvciAoYyA9ICIzIikgb3Ig KGMgPSAiNCIpIG9yIChjID0gIjUiKQ0KICAgICAgICBvciAoYyA9ICI2Iikg b3IgKGMgPSAiNyIpIG9yIChjID0gIjgiKQ0KICAgICAgICBvciAoYyA9ICI5 IikpOg0KICAgICAgaWYgUkNTWzBdID0gMDoNCiAgICAgICAgUkNTWzBdIDo9 IDE7DQogICAgICAgIFJDU1tSQ1NbMF1dIDo9IDA7DQogICAgICBmaQ0KICAg ICAgUkNTW1JDU1swXV0gOj0gMTAgKiBSQ1NbUkNTWzBdXSArIHNjYW50b2tl bnMgKGMpOw0KICAgIGVsc2VpZiBjID0gIi4iOg0KICAgICAgUkNTWzBdIDo9 IFJDU1swXSArIDE7DQogICAgICBSQ1NbUkNTWzBdXSA6PSAwOw0KICAgIGVs c2U6DQogICAgZmkNCiAgZW5kZm9yDQplbmRkZWY7DQp2YXJkZWYgcmVxdWly ZV9SQ1NfcmV2aXNpb24gZXhwciBzID0NCiAgc2F2ZSBuLCBUZVhfcmV2LCBt Zl9yZXY7DQogIG51bWVyaWMgbjsNCiAgcGFyc2VfUkNTIChUZVhfcmV2LCBz KTsNCiAgcGFyc2VfUkNTIChtZl9yZXYsICIkUmV2aXNpb246IDEuMzAgJCIp Ow0KICBmb3IgbiA9IDEgdXB0byBtaW4gKDIsIFRlWF9yZXZbMF0sIG1mX3Jl dlswXSk6DQogICAgaWYgVGVYX3JldltuXSA+IG1mX3JldltuXToNCiAgICAg IGVycmhlbHANCiAgICAgICAgIllvdXIgdmVyc2lvbiBvZiBgZmV5bm1mLnN0 eScgaXMgaGlnaGVyIHRoYXQgb2YgeW91ciBgZmV5bm1mLm1mJy4iOw0KICAg ICAgZXJybWVzc2FnZSAiZmV5bm1mOiBNZXRhZm9udCBtYWNyb3Mgb3V0IG9m IGRhdGUiOw0KICAgIGVsc2VpZiBUZVhfcmV2W25dIDwgbWZfcmV2W25dOg0K ICAgICAgZXJyaGVscA0KICAgICAgICAiWW91ciB2ZXJzaW9uIG9mIGBmZXlu bWYubWYnIGlzIGhpZ2hlciB0aGF0IG9mIHlvdXIgYGZleW5tZi5zdHknLiI7 DQogICAgICBlcnJtZXNzYWdlICJmZXlubWY6IExhVGVYIHN0eWxlIG91dCBv ZiBkYXRlIjsNCiAgICBmaQ0KICAgIGV4aXRpZiAoVGVYX3JldltuXSA8PiBt Zl9yZXZbbl0pOw0KICBlbmRmb3INCmVuZGRlZjsNCnZhcmRlZiBjdWxsaXQg PSBcIGVuZGRlZjsNCmNvbG9yIGZvcmVncm91bmQ7DQpmb3JlZ3JvdW5kID0g YmxhY2s7DQp2YXJkZWYgYmVnaW5jaGFyIChleHByIGMsIHdkLCBodCwgZHAp ID0NCiAgTGFUZVhfZmlsZSA6PSAiIjsNCiAgYmVnaW5maWcoYyk7DQogICAg dzo9d2Q7DQogICAgaDo9aHQ7DQplbmRkZWY7DQpzdHJpbmcgTGFUZVhfZmls ZTsNCnZhcmRlZiBlbmRjaGFyID0NCiAgc2V0Ym91bmRzIGN1cnJlbnRwaWN0 dXJlIHRvICgwLDApLS0odywwKS0tKHcsaCktLSgwLGgpLS1jeWNsZTsNCiAg aWYgTGFUZVhfZmlsZSA8PiAiIjoNCiAgICB3cml0ZSBFT0YgdG8gTGFUZVhf ZmlsZTsNCiAgICBMYVRlWF9maWxlIDo9ICIiOw0KICBmaQ0KICBlbmRmaWcN CmVuZGRlZjsNCmJwIyA6PSBicDsNCmNjIyA6PSBjYzsNCmNtIyA6PSBjbTsN CmRkIyA6PSBkZDsNCmluIyA6PSBpbjsNCm1tIyA6PSBtbTsNCnBjIyA6PSBw YzsNCnB0IyA6PSBwdDsNCnZhcmRlZiBkZWZpbmVfYmxhY2tlcl9waXhlbHMo dGV4dCB0KSA9DQogIGZvcnN1ZmZpeGVzICQ9dDoNCiAgICAkOj0kLiM7DQog IGVuZGZvcg0KZW5kZGVmOw0KcGljdHVyZSB1bml0cGl4ZWw7DQp1bml0cGl4 ZWwgPSBudWxscGljdHVyZTsNCmFkZHRvIHVuaXRwaXhlbCBjb250b3VyIHVu aXRzcXVhcmU7DQpkZWYgdF8gPSBcIGVuZGRlZjsNCmJvb2xlYW4gZmV5bm1m d2l6YXJkOw0KZmV5bm1md2l6YXJkIDo9IGZhbHNlOw0KdGhpbiMgOj0gMXB0 IzsgJSBkaW1lbnNpb24gb2YgdGhlIGxpbmVzDQp0aGljayMgOj0gMnRoaW4j Ow0KYXJyb3dfbGVuIyA6PSA0bW0jOw0KYXJyb3dfYW5nIDo9IDE1Ow0KY3Vy bHlfbGVuIyA6PSAzbW0jOw0KZGFzaF9sZW4jIDo9IDNtbSM7ICUgJ3Bob3Rv bicgbGluZXMNCmRvdF9sZW4jIDo9IDJtbSM7ICUgJ3Bob3RvbicgbGluZXMN CndpZ2dseV9sZW4jIDo9IDRtbSM7ICUgJ3Bob3RvbicgbGluZXMNCndpZ2ds eV9zbG9wZSA6PSA2MDsNCnppZ3phZ19sZW4jIDo9IDJtbSM7DQp6aWd6YWdf d2lkdGgjIDo9IDJ0aGljayM7DQpkZWNvcl9zaXplIyA6PSA1bW0jOw0KZG90 X3NpemUjIDo9IDJ0aGljayM7DQpkZWZpbmVfYmxhY2tlcl9waXhlbHMgKHRo aWNrLCB0aGluLA0KICBkYXNoX2xlbiwgZG90X2xlbiwgd2lnZ2x5X2xlbiwg Y3VybHlfbGVuLA0KICB6aWd6YWdfbGVuLCB6aWd6YWdfd2lkdGgsIGFycm93 X2xlbiwgZGVjb3Jfc2l6ZSwgZG90X3NpemUpOw0KZGVmIHNocmluayBleHBy IHMgPQ0KICBiZWdpbmdyb3VwDQogIGlmIHNocmlua2FibGVzIDw+ICIiOg0K ICAgIHNhdmUgdG1wXzsNCiAgICBmb3JzdWZmaXhlcyAkID0gc2NhbnRva2Vu cyBzaHJpbmthYmxlczoNCiAgICAgIGlmIGtub3duICQuIzoNCiAgICAgICAg dG1wXyA6PSAkLiM7DQogICAgICAgIHNhdmUgJDsNCiAgICAgICAgJC4jIDo9 IHMgKiB0bXBfOw0KICAgICAgICBkZWZpbmVfYmxhY2tlcl9waXhlbHMgKCQp Ow0KICAgICAgZWxzZToNCiAgICAgICAgdG1wXyA6PSAkOw0KICAgICAgICBz YXZlICQ7DQogICAgICAgICQgOj0gcyAqIHRtcF87DQogICAgICBmaQ0KICAg IGVuZGZvcg0KICBmaQ0KZW5kZGVmOw0KZGVmIGVuZHNocmluayA9DQogIGVu ZGdyb3VwDQplbmRkZWY7DQpzdHJpbmcgc2hyaW5rYWJsZXM7DQpzaHJpbmth YmxlcyA6PSAiIjsNCnZhcmRlZiBhZGR0b19zaHJpbmthYmxlcyAodGV4dCBs KSA9DQogIGZvcnN1ZmZpeGVzICQgPSBsOg0KICAgIHNocmlua2FibGVzIDo9 IHNocmlua2FibGVzICYgIiwiICYgc3RyICQ7DQogIGVuZGZvcg0KZW5kZGVm Ow0Kc2hyaW5rYWJsZXMgOj0gInRoaWNrLHRoaW4iOw0KYWRkdG9fc2hyaW5r YWJsZXMgKGRhc2hfbGVuLCBkb3RfbGVuKTsNCmFkZHRvX3Nocmlua2FibGVz ICh3aWdnbHlfbGVuLCBjdXJseV9sZW4pOw0KYWRkdG9fc2hyaW5rYWJsZXMg KHppZ3phZ19sZW4sIHppZ3phZ193aWR0aCk7DQphZGR0b19zaHJpbmthYmxl cyAoYXJyb3dfbGVuKTsNCmFkZHRvX3Nocmlua2FibGVzIChkZWNvcl9zaXpl LCBkb3Rfc2l6ZSk7DQpMYVRlWF91bml0bGVuZ3RoIDo9IG1tOw0KdmFyZGVm IGNvdW50ICh0ZXh0IGxpc3QpID0NCiAgZm9yc3VmZml4ZXMgJCA9IGxpc3Q6 ICsgMSBlbmRmb3INCmVuZGRlZjsNCnZhcmRlZiBnZXRvcHQgKHN1ZmZpeCBv cHQpIChleHByIHMpID0NCiAgc2F2ZSBuLCBhcmdwLCBlc2NhcGUsIGFuY2hv ciwgc2tpcDsNCiAgbnVtZXJpYyBvcHQuZmlyc3QsIG9wdC5sYXN0LCBuLCBh bmNob3I7DQogIHN0cmluZyBvcHRbXSwgb3B0W11hcmc7DQogIGJvb2xlYW4g b3B0W110YWludGVkLCBhcmdwLCBlc2NhcGUsIHNraXA7DQogIG9wdC5maXJz dCA6PSAwOw0KICBvcHQubGFzdCA6PSAwOw0KICBvcHRbb3B0Lmxhc3RdIDo9 ICIiOw0KICBhcmdwIDo9IGZhbHNlOw0KICBlc2NhcGUgOj0gZmFsc2U7DQog IGFuY2hvciA6PSAwOw0KICBza2lwIDo9IHRydWU7DQogIGZvciBuID0gMSB1 cHRvIGxlbmd0aCAocyk6DQogICAgaWYgc2tpcCBhbmQgKHN1YnN0cmluZyAo bi0xLCBuKSBvZiBzID0gIiAiKToNCiAgICAgIGFuY2hvciA6PSBhbmNob3Ig KyAxOw0KICAgIGVsc2U6DQogICAgICBza2lwIDo9IGZhbHNlOw0KICAgICAg aWYgbm90IGVzY2FwZSBhbmQgKHN1YnN0cmluZyAobi0xLCBuKSBvZiBzID0g IiwiKToNCiAgICAgICAgaWYgc3Vic3RyaW5nIChuLCBuKzEpIG9mIHMgPSAi LCI6DQogICAgICAgICAgZXNjYXBlIDo9IHRydWU7DQogICAgICAgICAgb3B0 W29wdC5sYXN0XXRhaW50ZWQgOj0gdHJ1ZTsNCiAgICAgICAgZWxzZToNCiAg ICAgICAgICBpZiBhcmdwOg0KICAgICAgICAgICAgb3B0W29wdC5sYXN0XWFy ZyA6PSBzdWJzdHJpbmcgKGFuY2hvciwgbi0xKSBvZiBzOw0KICAgICAgICAg IGVsc2U6DQogICAgICAgICAgICBvcHRbb3B0Lmxhc3RdIDo9IHN1YnN0cmlu ZyAoYW5jaG9yLCBuLTEpIG9mIHM7DQogICAgICAgICAgZmkNCiAgICAgICAg ICBhbmNob3IgOj0gbjsNCiAgICAgICAgICBhcmdwIDo9IGZhbHNlOw0KICAg ICAgICAgIHNraXAgOj0gdHJ1ZTsNCiAgICAgICAgICBvcHQubGFzdCA6PSBv cHQubGFzdCArIDE7DQogICAgICAgIGZpDQogICAgICBlbHNlaWYgbm90IGFy Z3AgYW5kIChzdWJzdHJpbmcgKG4tMSwgbikgb2YgcyA9ICI9Iik6DQogICAg ICAgIG9wdFtvcHQubGFzdF0gOj0gc3Vic3RyaW5nIChhbmNob3IsIG4tMSkg b2YgczsNCiAgICAgICAgYW5jaG9yIDo9IG47DQogICAgICAgIGFyZ3AgOj0g dHJ1ZTsNCiAgICAgICAgc2tpcCA6PSB0cnVlOw0KICAgICAgZWxzZWlmIGFy Z3Agb3IgKHN1YnN0cmluZyAobi0xLCBuKSBvZiBzIDw+ICIgIik6DQogICAg ICAgIGVzY2FwZSA6PSBmYWxzZTsNCiAgICAgIGZpDQogICAgZmkNCiAgZW5k Zm9yDQogIGlmIGFyZ3A6DQogICAgb3B0W29wdC5sYXN0XWFyZyA6PSBzdWJz dHJpbmcgKGFuY2hvciwgbGVuZ3RoIHMpIG9mIHM7DQogIGVsc2U6DQogICAg b3B0W29wdC5sYXN0XSA6PSBzdWJzdHJpbmcgKGFuY2hvciwgbGVuZ3RoIHMp IG9mIHM7DQogIGZpDQogIGZvciBuID0gb3B0LmZpcnN0IHVwdG8gb3B0Lmxh c3Q6DQogICAgaWYga25vd24gb3B0W25ddGFpbnRlZDoNCiAgICAgIGlmIG9w dFtuXXRhaW50ZWQ6DQogICAgICAgIG9wdFtuXWFyZyA6PSB1bnRhaW50X3N0 cmluZyBvcHRbbl1hcmc7DQogICAgICBmaQ0KICAgIGZpDQogIGVuZGZvcg0K ZW5kZGVmOw0KdmFyZGVmIHVudGFpbnRfc3RyaW5nIHN1ZmZpeCBzID0NCiAg c2F2ZSBuLCBhbmNob3I7DQogIG51bWVyaWMgbiwgYW5jaG9yOw0KICBhbmNo b3IgOj0gMDsNCiAgZm9yIG4gPSAxIHVwdG8gbGVuZ3RoIChzKSAtIDE6DQog ICAgaWYgc3Vic3RyaW5nIChuLTEsbisxKSBvZiBzID0gIiwsIjoNCiAgICAg IHN1YnN0cmluZyAoYW5jaG9yLCBuLTEpIG9mIHMgJg0KICAgICAgaGlkZSAo YW5jaG9yIDo9IG4pDQogICAgZmkNCiAgZW5kZm9yDQogIHN1YnN0cmluZyAo YW5jaG9yLCBsZW5ndGggcykgb2Ygcw0KZW5kZGVmOw0KdmFyZGVmIHNwbGl0 X3N0cmluZyAoc3VmZml4IGNvbXApIChleHByIHMpID0NCiAgc2F2ZSBuLCBh bmNob3I7DQogIG51bWVyaWMgY29tcC5maXJzdCwgY29tcC5sYXN0LCBuLCBh bmNob3I7DQogIHN0cmluZyBjb21wW107DQogIGNvbXAuZmlyc3QgOj0gMDsN CiAgY29tcC5sYXN0IDo9IDA7DQogIGNvbXBbY29tcC5sYXN0XSA6PSAiIjsN CiAgYW5jaG9yIDo9IDA7DQogIGZvciBuID0gMSB1cHRvIGxlbmd0aCAocyk6 DQogICAgaWYgc3Vic3RyaW5nIChuLTEsbikgb2YgcyA9ICIuIjoNCiAgICAg IGNvbXBbY29tcC5sYXN0XSA6PSBzdWJzdHJpbmcgKGFuY2hvciwgbi0xKSBv ZiBzOw0KICAgICAgY29tcC5sYXN0IDo9IGNvbXAubGFzdCArIDE7DQogICAg ICBhbmNob3IgOj0gbjsNCiAgICBmaQ0KICBlbmRmb3INCiAgY29tcFtjb21w Lmxhc3RdIDo9IHN1YnN0cmluZyAoYW5jaG9yLCBsZW5ndGggcykgb2YgczsN CmVuZGRlZjsNCnZhcmRlZiBtYXRjaF9wcmVmaXggKGV4cHIgcHJlZml4LCBz KSA9DQogIChwcmVmaXggPSBzdWJzdHJpbmcgKDAsIGxlbmd0aCBwcmVmaXgp IG9mIHMpDQplbmRkZWY7DQp2YXJkZWYgbWF0Y2hfb3B0aW9uIChleHByIHMs IG9wdGlvbikgPQ0KICBzYXZlIHNjLCBvcHRpb25jLCBuLCBpOw0KICBudW1l cmljIHNjLmZpcnN0LCBzYy5sYXN0LCBvcHRpb25jLmZpcnN0LCBvcHRpb25j Lmxhc3Q7DQogIHN0cmluZyBzY1tdLCBvcHRpb25jW107DQogIG51bWVyaWMg biwgaTsNCiAgc3BsaXRfc3RyaW5nIChzYywgcyk7DQogIHNwbGl0X3N0cmlu ZyAob3B0aW9uYywgb3B0aW9uKTsNCiAgbiA6PSBzYy5sYXN0IC0gc2MuZmly c3Q7DQogIGlmIG4gPD4gKG9wdGlvbmMubGFzdCAtIG9wdGlvbmMuZmlyc3Qp Og0KICAgIGZhbHNlDQogIGVsc2U6DQogICAgdHJ1ZQ0KICAgIGZvciBpID0g MCB1cHRvIG46DQogICAgICBhbmQgbWF0Y2hfcHJlZml4IChzY1tzYy5maXJz dCtpXSwNCiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmNbb3B0aW9u Yy5maXJzdCtpXSkNCiAgICBlbmRmb3INCiAgZmkNCmVuZGRlZjsNCmRlZiBz YXZlX3BpY3R1cmUgdGV4dCB0ID0NCiBzYXZlIHQ7IHBpY3R1cmUgdDsgZm9y c3VmZml4ZXMgcD10OiBwOj1udWxscGljdHVyZTsgZW5kZm9yDQplbmRkZWY7 DQpkZWYgYmVnaW5fc2tldGNoID0NCiBiZWdpbmdyb3VwIHNhdmVfcGljdHVy ZSBjdXJyZW50cGljdHVyZTsNCiBza2V0Y2hsZXZlbCA6PSBza2V0Y2hsZXZl bCsxOw0KZW5kZGVmOw0KZGVmIGVuZF9za2V0Y2ggPQ0KIHNrZXRjaGxldmVs IDo9IHNrZXRjaGxldmVsLTE7DQogc2tldGNocGFkW3NrZXRjaGxldmVsXSA6 PSBjdXJyZW50cGljdHVyZTsNCiBlbmRncm91cA0KZW5kZGVmOw0KcGljdHVy ZSBza2V0Y2hwYWRbXTsNCnNrZXRjaGxldmVsIDo9IDE7DQp2YXJkZWYgdXNl X3NrZXRjaCB0ZXh0IHQgPQ0KIGFkZHRvIGN1cnJlbnRwaWN0dXJlIGFsc28g KHNrZXRjaHBhZFtza2V0Y2hsZXZlbF0gdCkNCmVuZGRlZjsNCnZhcmRlZiBj ZHJhdyBleHByIHAgPQ0KICBkcmF3IHAgd2l0aGNvbG9yIGZvcmVncm91bmQN CmVuZGRlZjsNCnZhcmRlZiBjZmlsbCBleHByIHAgPQ0KICBmaWxsIHAgd2l0 aGNvbG9yIGZvcmVncm91bmQNCmVuZGRlZjsNCnZhcmRlZiBjZmlsbGRyYXcg ZXhwciBwID0NCiAgZmlsbGRyYXcgcCB3aXRoY29sb3IgZm9yZWdyb3VuZA0K ZW5kZGVmOw0KdmFyZGVmIGNjdXRkcmF3IGV4cHIgcCA9DQogIGN1dGRyYXcg cCB3aXRoY29sb3IgZm9yZWdyb3VuZA0KZW5kZGVmOw0KdmFyZGVmIGNkcmF3 ZG90IGV4cHIgcCA9DQogIGRyYXdkb3QgcCB3aXRoY29sb3IgZm9yZWdyb3Vu ZA0KZW5kZGVmOw0KdmFyZGVmIGlzZGlnaXQgZXhwciBzID0NCiAgc2F2ZSBu Ow0KICAocyA9ICIwIikNCiAgZm9yIG4gPSAxIHVwdG8gOToNCiAgICBvciAo cyA9IGRlY2ltYWwgbikNCiAgZW5kZm9yDQplbmRkZWY7DQp2YXJkZWYgZGln aXRzX2luZGV4IChleHByIHMsIHN0YXJ0KSA9DQogIHNhdmUgbiwgbSwgZnJv bSwgdG87DQogIGZvciBuID0gc3RhcnQgdXB0byAobGVuZ3RoIHMpLTE6DQog ICAgaWYgaXNkaWdpdCAoc3Vic3RyaW5nIChuLG4rMSkgb2Ygcyk6DQogICAg ICBmcm9tIDo9IG47DQogICAgICBmb3IgbSA9IG4gdXB0byBsZW5ndGggczoN CiAgICAgICAgaWYgbm90IGlzZGlnaXQgKHN1YnN0cmluZyAobSxtKzEpIG9m IHMpOg0KICAgICAgICAgIHRvIDo9IG07DQogICAgICAgIGZpDQogICAgICAg IGV4aXRpZiBrbm93biB0bzsNCiAgICAgIGVuZGZvcg0KICAgIGZpDQogICAg ZXhpdGlmIGtub3duIGZyb207DQogIGVuZGZvcg0KICAoZnJvbSwgaWYga25v d24gdG86IHRvIGVsc2U6IGluZmluaXR5IGZpKQ0KZW5kZGVmOw0KdmFyZGVm IGRpZ2l0c190b19icmFja2V0cyBzdWZmaXggc3VmID0NCiAgc2F2ZSBzLCBp ZHg7DQogIHN0cmluZyBzOw0KICBwYWlyIGlkeDsNCiAgcyA9IHN0ciBzdWY7 DQogIGlkeCA9ICgwLDApOw0KICBmb3JldmVyOg0KICAgIGlkeCA6PSBkaWdp dHNfaW5kZXggKHMsIHhwYXJ0IGlkeCk7DQogICAgZXhpdGlmIHVua25vd24g eHBhcnQgaWR4Ow0KICAgIHMgOj0gc3Vic3RyaW5nICgwLHhwYXJ0IGlkeCkg b2Ygcw0KICAgICAgJiAiW10iICYgc3Vic3RyaW5nICh5cGFydCBpZHgsaW5m aW5pdHkpIG9mIHM7DQogIGVuZGZvcg0KICBzDQplbmRkZWY7DQp0aWxlX2dy YWluIDo9IDFpbi8zMDA7DQp2YXJkZWYgZGVmX3RpbGUgKHN1ZmZpeCB0KSAo ZXhwciB3ZCwgaHQpID0NCiAgaWYgbm90IHBpY3R1cmUgdGxpc3QudDoNCiAg ICBwaWN0dXJlIHRsaXN0LnNjYW50b2tlbnMgKGRpZ2l0c190b19icmFja2V0 cyB0KTsNCiAgZmkNCiAgdGxpc3QudCA6PSBudWxscGljdHVyZTsNCiAgdGxp c3QudC5keCA6PSBtYXggKGZsb29yIHdkLCAxKTsNCiAgdGxpc3QudC5keSA6 PSBtYXggKGZsb29yIGh0LCAxKTsNCmVuZGRlZjsNCnZhcmRlZiB1c2VfdGls ZSAoc3VmZml4IHQpIChleHByIHgsIHksIHdkLCBodCkgPQ0KICBmaWxsIHVu aXRzcXVhcmUgeHNjYWxlZCB3ZCB5c2NhbGVkIGh0IHNoaWZ0ZWQgKHgseSkN CiAgICB3aXRoY29sb3IgYmFja2dyb3VuZDsNCiAgaWYgc3RyIHQgPSAic2hh ZGVkIjoNCiAgICBzaGFkZV9yZWN0YW5nbGUgKDR0aGluLCB4LCB5LCB3ZCwg aHQpOw0KICBlbHNlaWYgc3RyIHQgPSAiaGF0Y2hlZCI6DQogICAgc2hhZGVf cmVjdGFuZ2xlICg1dGhpbiwgeCwgeSwgd2QsIGh0KTsNCiAgICBzaGFkZV9y ZWN0YW5nbGUgKC01dGhpbiwgeCwgeSwgd2QsIGh0KTsNCiAgZWxzZToNCiAg ICBpZiAocGljdHVyZSB0bGlzdC50KToNCiAgICAgIGZvciBueCA9IDAgdXB0 byB3ZC90bGlzdC50LmR4Og0KICAgICAgICBmb3IgbnkgPSAwIHVwdG8gaHQv dGxpc3QudC5keToNCiAgICAgICAgICBhZGR0byBjdXJyZW50cGljdHVyZQ0K ICAgICAgICAgICAgYWxzbyAodGxpc3QudCBzaGlmdGVkDQogICAgICAgICAg ICAgICAgICAoKHgseSkgKyAobngqdGxpc3QudC5keCwgbnkqdGxpc3QudC5k eSkpIHRfKTsNCiAgICAgICAgZW5kZm9yDQogICAgICBlbmRmb3INCiAgICBl bHNlOg0KICAgICAgZXJyaGVscCAiZmV5bm1mOiB5b3VyIHRpbGluZyBoYXMg bm90IGJlZW4gZGVmaW5lZCwgIg0KICAgICAgICAgICAgJiAiY2hlY2sgc3Bl bGxpbmcgYW5kIHJlcHJvY2VzcyEiOw0KICAgICAgZXJybWVzc2FnZSAiZmV5 bm1mOiB0aWxpbmcgYCIgJiBzdHIgdCAmICInIG5vdCBrbm93biwgIg0KICAg ICAgICAgICAgICAgJiAicmVwbGFjZWQgYnkgYHNoYWRlZCciOw0KICAgICAg dXNlX3RpbGUgKHNoYWRlZCwgeCwgeSwgd2QsIGh0KTsNCiAgICBmaQ0KICBm aQ0KZW5kZGVmOw0KdmFyZGVmIHNoYWRlX3JlY3RhbmdsZSAoZXhwciBkZCwg eCwgeSwgd2QsIGh0KSA9DQogIHNhdmUgZCwgdSwgZHgsIGR5LCBjdXJyZW50 cGVuOw0KICBwZW4gY3VycmVudHBlbjsNCiAgcGlja3VwIHBlbmNpcmNsZSBz Y2FsZWQgdGhpbjsNCiAgZCA6PSBtYXggKGZsb29yIChhYnMgZGQpLCAxKTsN CiAgZHggOj0gbWF4ICh3ZCwgaHQpOw0KICBkeSA6PSBtYXggKHdkLCBodCk7 DQogIGZvciB1ID0gMCBzdGVwIGQvZHggdW50aWwgMToNCiAgICBpZiBkZCA+ IDA6DQogICAgICBjZHJhdyAoeC1kLHkrdSpkeS1kKS0tKHgrKDEtdSkqZHgr ZCx5K2R5K2QpOw0KICAgICAgY2RyYXcgKHgrdSpkeC1kLHktZCktLSh4K2R4 K2QseSsoMS11KSpkeStkKTsNCiAgICBlbHNlOg0KICAgICAgY2RyYXcgKHgt ZCx5K3UqZHkrZCktLSh4K3UqZHgrZCx5LWQpOw0KICAgICAgY2RyYXcgKHgr KDEtdSkqZHgtZCx5K2R5K2QpLS0oeCtkeCtkLHkrKDEtdSkqZHktZCk7DQog ICAgZmkNCiAgZW5kZm9yDQplbmRkZWY7DQpkZWYgYWRkdG9fdGlsZSAoc3Vm Zml4IHQpID0NCiAgYWRkdG8gdGxpc3QudA0KZW5kZGVmOw0KdmFyZGVmIHRp bGVfZnJvbV9zdHJpbmcgKHN1ZmZpeCB0KSAoZXhwciBzdHIpID0NCiAgdGls ZV9ncmFpbiA6PSBtYXggKGZsb29yIHRpbGVfZ3JhaW4sIDEpOw0KICBzYXZl IGdyYWluLCBteCwgeCwgeSwgbiwgYywgcGljOw0KICBzdHJpbmcgYzsNCiAg cGljdHVyZSBwaWM7DQogIHBpYyA6PSBudWxscGljdHVyZTsNCiAgZ3JhaW4g Oj0gdGlsZV9ncmFpbjsNCiAgbXggOj0gMDsNCiAgeCA6PSAwOw0KICB5IDo9 IDA7DQogIGZvciBuIDo9IDEgdXB0byBsZW5ndGggc3RyOg0KICAgIGMgOj0g c3Vic3RyaW5nIChuLTEsbikgb2Ygc3RyOw0KICAgIGlmIGMgPSAiLyI6DQog ICAgICBteCA6PSBtYXggKG14LCB4KTsNCiAgICAgIHkgOj0geSsxOw0KICAg ICAgeCA6PSAwOw0KICAgIGVsc2VpZiBjID0gIioiOg0KICAgICAgYWRkdG8g cGljIGFsc28gKHVuaXRwaXhlbCBzaGlmdGVkICh4LC15KSB0Xyk7DQogICAg ICB4IDo9IHgrMTsNCiAgICBlbHNlaWYgYyA9ICIuIjoNCiAgICAgIHggOj0g eCsxOw0KICAgIGZpDQogIGVuZGZvcg0KICBkZWZfdGlsZSAodCwgZ3JhaW4q bXgsIGdyYWluKih5KzEpKTsNCiAgYWRkdG9fdGlsZSAodCkgYWxzbyAocGlj IHNoaWZ0ZWQgKDAseSkgc2NhbGVkIGdyYWluIHRfKTsNCiAgcGljIDo9IG51 bGxwaWN0dXJlOw0KZW5kZGVmOw0KdGlsZV9mcm9tX3N0cmluZyAoZ3JheTEw LA0KICAiICAuLi4gIC8iJg0KICAiICAuKi4gIC8iJg0KICAiICAuLi4gICIp Ow0KdGlsZV9mcm9tX3N0cmluZyAoZ3JheTI1LA0KICAiICAuLiAgLyImDQog ICIgICouICAiKTsNCnRpbGVfZnJvbV9zdHJpbmcgKGdyYXk1MCwNCiAgIiAg LiogIC8iJg0KICAiICAqLiAgIik7DQp0aWxlX2Zyb21fc3RyaW5nIChncmF5 NzUsDQogICIgICoqICAvIiYNCiAgIiAgLiogICIpOw0KdGlsZV9mcm9tX3N0 cmluZyAoZ3JheTkwLA0KICAiICAqKiogIC8iJg0KICAiICAqLiogIC8iJg0K ICAiICAqKiogICIpOw0KdmFyZGVmIG1ha2VfaGFsZnRvbmUgKHN1ZmZpeCB0 KSAoZXhwciBnLCB3ZCwgaHQpID0NCiAgZGVmX3RpbGUgKHQsIHdkLCBodCk7 DQogIGFkZHRvIHRsaXN0LnQgY29udG91ciB1bml0c3F1YXJlDQogICAgeHNj YWxlZCB3ZCB5c2NhbGVkIGh0IHdpdGhjb2xvciAoKDEtZykqZm9yZWdyb3Vu ZCArIGcqYmFja2dyb3VuZCkNCmVuZGRlZjsNCnZhcmRlZiB0aWxlIChzdWZm aXggdCkgKGV4cHIgcCkgPQ0KICBzYXZlIHUsIHgsIHksIG1heF94LCBtaW5f eCwgbWF4X3ksIG1pbl95LCB4eCwgeXk7DQogIC1tYXhfeCA9IC1tYXhfeSA9 IG1pbl94ID0gbWluX3kgPSBpbmZpbml0eTsNCiAgZm9yIHUgPSAwIHN0ZXAg MC4xIHVudGlsIGxlbmd0aCBwOg0KICAgIHggOj0geHBhcnQgKHBvaW50IHUg b2YgcCk7DQogICAgeSA6PSB5cGFydCAocG9pbnQgdSBvZiBwKTsNCiAgICBt YXhfeCA6PSBtYXgobWF4X3gsIHgpOw0KICAgIG1heF95IDo9IG1heChtYXhf eSwgeSk7DQogICAgbWluX3ggOj0gbWluKG1pbl94LCB4KTsNCiAgICBtaW5f eSA6PSBtaW4obWluX3ksIHkpOw0KICBlbmRmb3INCiAgYmVnaW5fc2tldGNo DQogICAgdXNlX3RpbGUgKHQsIG1pbl94LCBtaW5feSwgbWF4X3gtbWluX3gs IG1heF95LW1pbl95KTsNCiAgICBjbGlwIGN1cnJlbnRwaWN0dXJlIHRvIHA7 DQogIGVuZF9za2V0Y2g7DQogIHVzZV9za2V0Y2g7DQplbmRkZWY7DQp2YXJk ZWYgZHJhd3RpbGUgKHN1ZmZpeCB0KSAoZXhwciBwKSA9DQogIHRpbGUgKHQs IHApOw0KICBjZHJhdyBwDQplbmRkZWY7DQp2YXJkZWYgdXNlX2hhbGZ0b25l IChleHByIGcsIHgsIHksIHdkLCBodCkgPQ0KICBmaWxsIHVuaXRzcXVhcmUg eHNjYWxlZCB3ZCB5c2NhbGVkIGh0DQogICAgc2hpZnRlZCAoeCx5KSB3aXRo Y29sb3IgKCgxLWcpKmZvcmVncm91bmQgKyBnKmJhY2tncm91bmQpDQplbmRk ZWY7DQp2YXJkZWYgaGFsZnRvbmUgKGV4cHIgZywgcCkgPQ0KICBmaWxsIHAg d2l0aGNvbG9yICgoMS1nKSpmb3JlZ3JvdW5kICsgZypiYWNrZ3JvdW5kKQ0K ZW5kZGVmOw0KdmFyZGVmIGRyYXdoYWxmdG9uZSAoZXhwciBnLCBwKSA9DQog IGZpbGwgcCB3aXRoY29sb3IgKCgxLWcpKmZvcmVncm91bmQgKyBnKmJhY2tn cm91bmQpOw0KICBjZHJhdyBwDQplbmRkZWY7DQp2YXJkZWYgc2hhZGUgZXhw ciBwID0NCiAgdGlsZSAoc2hhZGVkLCBwKQ0KZW5kZGVmOw0KdmFyZGVmIGhh dGNoIGV4cHIgcCA9DQogIHRpbGUgKGhhdGNoZWQsIHApDQplbmRkZWY7DQp2 YXJkZWYgZW1wdHlkcmF3IGV4cHIgcCA9DQogIGN1bGxpdDsNCiAgdW5maWxs IHA7DQogIGN1bGxpdDsNCiAgY2RyYXcgcDsNCmVuZGRlZjsNCnZhcmRlZiBz aGFkZWRyYXcgZXhwciBwID0NCiAgY3VsbGl0Ow0KICB1bmZpbGwgcDsNCiAg Y3VsbGl0Ow0KICBzaGFkZSBwOw0KICBjZHJhdyBwOw0KZW5kZGVmOw0KdmFy ZGVmIGhhdGNoZHJhdyBleHByIHAgPQ0KICBjdWxsaXQ7DQogIHVuZmlsbCBw Ow0KICBjdWxsaXQ7DQogIGhhdGNoIHA7DQogIGNkcmF3IHA7DQplbmRkZWY7 DQp2YXJkZWYgbWFycm93IChleHByIHAsIGZyYWMpID0NCiAgc2F2ZSBhLCB0 LCB6Ow0KICBwYWlyIHo7DQogIGEgPSBhbmdsZSBkaXJlY3Rpb24gZnJhYyps ZW5ndGgocCkgb2YgcDsNCiAgeiA9IHBvaW50IGZyYWMqbGVuZ3RoKHApIG9m IHA7DQogICh0MSx3aGF0ZXZlcikgPSBwIGludGVyc2VjdGlvbnRpbWVzDQog ICAgKGhhbGZjaXJjbGUgc2NhbGVkIDIvM2Fycm93X2xlbiByb3RhdGVkIChh KzkwKSBzaGlmdGVkIHopOw0KICAodDIsd2hhdGV2ZXIpID0gcCBpbnRlcnNl Y3Rpb250aW1lcw0KICAgIChoYWxmY2lyY2xlIHNjYWxlZCA0LzNhcnJvd19s ZW4gcm90YXRlZCAoYS05MCkgc2hpZnRlZCB6KTsNCiAgYXJyb3dfaGVhZCAo cCwgdDEsIHQyLCBhcnJvd19hbmcpDQplbmRkZWY7DQp2YXJkZWYgdGFycm93 IChleHByIHAsIGZyYWMpID0NCiAgc2F2ZSBhLCB0LCB6Ow0KICBwYWlyIHo7 DQogIHQxID0gZnJhYypsZW5ndGggcDsNCiAgYSA9IGFuZ2xlIGRpcmVjdGlv biB0MSBvZiBwOw0KICB6ID0gcG9pbnQgdDEgb2YgcDsNCiAgKHQyLHdoYXRl dmVyKSA9IHAgaW50ZXJzZWN0aW9udGltZXMNCiAgICAoaGFsZmNpcmNsZSBz Y2FsZWQgMmFycm93X2xlbiByb3RhdGVkIChhLTkwKSBzaGlmdGVkIHopOw0K ICBhcnJvd19oZWFkIChwLCB0MSwgdDIsIGFycm93X2FuZykNCmVuZGRlZjsN CnZhcmRlZiBoYXJyb3cgKGV4cHIgcCwgZnJhYykgPQ0KICBzYXZlIGEsIHQs IHo7DQogIHBhaXIgejsNCiAgdDIgPSBmcmFjKmxlbmd0aCBwOw0KICBhID0g YW5nbGUgZGlyZWN0aW9uIHQyIG9mIHA7DQogIHogPSBwb2ludCB0MiBvZiBw Ow0KICAodDEsd2hhdGV2ZXIpID0gcCBpbnRlcnNlY3Rpb250aW1lcw0KICAg ICAoaGFsZmNpcmNsZSBzY2FsZWQgMmFycm93X2xlbiByb3RhdGVkIChhKzkw KSBzaGlmdGVkIHopOw0KICBhcnJvd19oZWFkIChwLCB0MSwgdDIsIGFycm93 X2FuZykNCmVuZGRlZjsNCnZhcmRlZiBhcnJvd19oZWFkIChleHByIHAsIGZy b20sIHRvLCBhbmcpID0NCiAgc2F2ZSB0aXAsIGFwLCB0Ow0KICBwYWlyIHRp cDsNCiAgcGF0aCBhcDsNCiAgdDEgOj0gZnJvbTsNCiAgdDIgOj0gdG87DQog IGlmIHQxID0gLTE6IHQxIDo9IDA7IGZpDQogIGlmIHQyID0gLTE6IHQyIDo9 IGluZmluaXR5OyBmaQ0KICB0aXAgPSBwb2ludCB0MiBvZiBwOw0KICBhcCA9 IHN1YnBhdGggKHQxLHQyKSBvZiBwIHNoaWZ0ZWQgLXRpcDsNCiAgKGFwIHJv dGF0ZWQgYW5nDQogICAgZm9yY2VkX2pvaW4gcmV2ZXJzZSBhcCByb3RhdGVk IC1hbmcNCiAgICAtLSBjeWNsZSkgc2hpZnRlZCB0aXANCmVuZGRlZjsNCnZh cmRlZiBhcnJvdyBleHByIHAgPQ0KICBtYXJyb3cgKHAsIC41KQ0KZW5kZGVm Ow0KdGVydGlhcnlkZWYgcCBmb3JjZWRfam9pbiBxID0NCiAgc3VicGF0aCAo MCwgbGVuZ3RoIHAgLSAxKSBvZiBwDQogICYgcG9pbnQgKGxlbmd0aCBwIC0g MSkgb2YgcA0KICAgIC4uIGNvbnRyb2xzIHBvc3Rjb250cm9sIChsZW5ndGgg cCAtIDEpIG9mIHANCiAgICAgICAgICAgICAgICBhbmQgcHJlY29udHJvbCBp bmZpbml0eSBvZiBwDQogIC4uIC41W3BvaW50IGluZmluaXR5IG9mIHAsIHBv aW50IDAgb2YgcV0NCiAgICAuLiBjb250cm9scyBwb3N0Y29udHJvbCAwIG9m IHEgYW5kIHByZWNvbnRyb2wgMSBvZiBxDQogICAgLi4gcG9pbnQgMSBvZiBx DQogICYgc3VicGF0aCAoMSwgaW5maW5pdHkpIG9mIHENCmVuZGRlZjsNCnZh cmRlZiBjdXRfZGVjb3JzIChzdWZmaXggZnJvbSkgKGV4cHIgcCkgKHN1ZmZp eCB0bykgPQ0KIHN1YnBhdGggKGlmIGtub3duIGZyb20uZGVjb3Iuc2hhcGU6 DQogICAgICAgICAgICB4cGFydCAocCBpbnRlcnNlY3Rpb250aW1lcw0KICAg ICAgICAgICAgICAgICAgICAgKGZyb20uZGVjb3Iuc2hhcGUgc2NhbGVkIGZy b20uZGVjb3Iuc2l6ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2hpZnRlZCBmcm9tLmxvYykpDQogICAgICAgICAgZWxzZToN CiAgICAgICAgICAgIDANCiAgICAgICAgICBmaSwNCiAgICAgICAgICBpZiBr bm93biB0by5kZWNvci5zaGFwZToNCiAgICAgICAgICAgIGxlbmd0aCBwDQog ICAgICAgICAgICAgIC0geHBhcnQgKHJldmVyc2UgcCBpbnRlcnNlY3Rpb250 aW1lcw0KICAgICAgICAgICAgICAgICAgICAgICAgKHRvLmRlY29yLnNoYXBl IHNjYWxlZCB0by5kZWNvci5zaXplDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2hpZnRlZCB0by5sb2MpKQ0KICAgICAgICAg IGVsc2U6DQogICAgICAgICAgICAgaW5maW5pdHkNCiAgICAgICAgICBmaSkg b2YgcA0KZW5kZGVmOw0KdmFyZGVmIG1ha2VfYmxvYiAoZXhwciB6X2FyZywg ZGlhbWV0ZXIpID0NCiBzYXZlIHAsY3VycmVudHBlbjsgcGF0aCBwOyBwZW4g Y3VycmVudHBlbjsNCiBwaWNrdXAgcGVuY2lyY2xlIHNjYWxlZCB0aGljazsN CiBwID0gZnVsbGNpcmNsZSBzY2FsZWQgZGlhbWV0ZXIgc2hpZnRlZCB6X2Fy ZzsNCiBzaGFkZWRyYXcgcDsNCmVuZGRlZjsNCnZhcmRlZiBkcmF3X2Jsb2Ig KGV4cHIgel9hcmcsIGRpYW1ldGVyKSA9DQogaWYgc2tldGNoZWRfYmxvYl9k aWFtZXRlciA8PiBkaWFtZXRlcjogJSBkcmF3biBsYXRlbHk/DQogIGJlZ2lu X3NrZXRjaCBtYWtlX2Jsb2IgKG9yaWdpbiwgZGlhbWV0ZXIpOyBlbmRfc2tl dGNoOyAlIHJlZG8gaGFyZCB3b3JrIQ0KICBza2V0Y2hlZF9ibG9iX2RpYW1l dGVyOj0gZGlhbWV0ZXI7ICAlIHJlY29yZCBpdA0KIGZpDQogdXNlX3NrZXRj aCBzaGlmdGVkIHpfYXJnOyAlIHRoZSBlYXN5IHdheSAuLi4NCmVuZGRlZjsN CmRlZiBmb3JjZV9uZXdfYmxvYiA9IHNrZXRjaGVkX2Jsb2JfZGlhbWV0ZXIg Oj0gLTE7IGVuZGRlZjsNCmZvcmNlX25ld19ibG9iOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICUgaW5pdGlhbGl6ZSBpdC4NCnZhcmRlZiBw aXhsZW4gKGV4cHIgcCwgbikgPQ0KICBmb3Igaz0xIHVwdG8gbGVuZ3RoKHAp OiArIHNlZ21lbnRfcGl4bGVuIChzdWJwYXRoIChrLTEsaykgb2YgcCwgbikg ZW5kZm9yDQplbmRkZWY7DQp2YXJkZWYgc2VnbWVudF9waXhsZW4gKGV4cHIg cCwgbikgPQ0KICBmb3Igaz0xIHVwdG8gbjogKyBhYnMgKHBvaW50IGsvbiBv ZiBwIC0gcG9pbnQgKGstMSkvbiBvZiBwKSBlbmRmb3INCmVuZGRlZjsNCnZh cmRlZiB3aWdnbHkgZXhwciBwX2FyZyA9DQogc2F2ZSB3cHA7DQogbnVtZXJp YyB3cHA7DQogd3BwID0gY2VpbGluZyAocGl4bGVuIChwX2FyZywgMTApIC8g d2lnZ2x5X2xlbikgLyBsZW5ndGggcF9hcmc7DQogZm9yIGs9MCB1cHRvIHdw cCpsZW5ndGgocF9hcmcpIC0gMToNCiAgcG9pbnQgay93cHAgb2YgcF9hcmcN CiAgICAgICB7ZGlyZWN0aW9uIGsvd3BwIG9mIHBfYXJnIHJvdGF0ZWQgd2ln Z2x5X3Nsb3BlfSAuLg0KICBwb2ludCAoaysuNSkvd3BwIG9mIHBfYXJnDQog ICAgICAge2RpcmVjdGlvbiAoaysuNSkvd3BwIG9mIHBfYXJnIHJvdGF0ZWQg LSB3aWdnbHlfc2xvcGV9IC4uDQogZW5kZm9yDQogaWYgY3ljbGUgcF9hcmc6 IGN5Y2xlIGVsc2U6IHBvaW50IGluZmluaXR5IG9mIHBfYXJnIGZpDQplbmRk ZWY7DQp2YXJkZWYgY3VybHkgZXhwciBwID0NCiBzYXZlIGNwcDsNCiBudW1l cmljIGNwcDsNCiBjcHAgOj0gY2VpbGluZyAocGl4bGVuIChwLCAxMCkgLyBj dXJseV9sZW4pIC8gbGVuZ3RoIHA7DQogaWYgY3ljbGUgcDoNCiAgIGZvciBr PTAgdXB0byBjcHAqbGVuZ3RoKHApIC0gMToNCiAgICAgcG9pbnQgKGsrLjMz KS9jcHAgb2YgcA0KICAgICAgICAgICB7ZGlyZWN0aW9uIChrKy4zMykvY3Bw IG9mIHAgcm90YXRlZCA5MH0gLi4NCiAgICAgcG9pbnQgKGstLjMzKS9jcHAg b2YgcA0KICAgICAgICAgICB7ZGlyZWN0aW9uIChrLS4zMykvY3BwIG9mIHAg cm90YXRlZCAtOTB9IC4uDQogICBlbmRmb3INCiAgIGN5Y2xlDQogZWxzZToN CiAgIHBvaW50IDAgb2YgcA0KICAgICAgICAge2RpcmVjdGlvbiAwIG9mIHAg cm90YXRlZCAtOTB9IC4uDQogICBmb3Igaz0xIHVwdG8gY3BwKmxlbmd0aChw KSAtIDE6DQogICAgIHBvaW50IChrKy4zMykvY3BwIG9mIHANCiAgICAgICAg ICAge2RpcmVjdGlvbiAoaysuMzMpL2NwcCBvZiBwIHJvdGF0ZWQgOTB9IC4u DQogICAgIHBvaW50IChrLS4zMykvY3BwIG9mIHANCiAgICAgICAgICAge2Rp cmVjdGlvbiAoay0uMzMpL2NwcCBvZiBwIHJvdGF0ZWQgLTkwfSAuLg0KICAg ZW5kZm9yDQogICBwb2ludCBpbmZpbml0eSBvZiBwDQogICAgICAgICB7ZGly ZWN0aW9uIGluZmluaXR5IG9mIHAgcm90YXRlZCA5MH0NCiBmaQ0KZW5kZGVm Ow0KdmFyZGVmIHppZ3phZyBleHByIHAgPQ0KIHNhdmUgenBwOw0KIG51bWVy aWMgenBwOw0KIHpwcCA9IGNlaWxpbmcgKHBpeGxlbiAocCwgMTApIC8gemln emFnX2xlbikgLyBsZW5ndGggcDsNCiBpZiBub3QgY3ljbGUgcDoNCiAgIHBv aW50IDAgb2YgcCAtLQ0KIGZpDQogZm9yIGsgPSAwIHVwdG8genBwKmxlbmd0 aChwKSAtIDE6DQogICBwb2ludCAoaysxLzMpL3pwcCBvZiBwIHNoaWZ0ZWQN CiAgICAgKHppZ3phZ193aWR0aA0KICAgICAgKiBkaXIgYW5nbGUgKGRpcmVj dGlvbiAoaysxLzMpL3pwcCBvZiBwIHJvdGF0ZWQgOTApKSAtLQ0KICAgcG9p bnQgKGsrMi8zKS96cHAgb2YgcCBzaGlmdGVkDQogICAgICh6aWd6YWdfd2lk dGgNCiAgICAgICogZGlyIGFuZ2xlIChkaXJlY3Rpb24gKGsrMi8zKS96cHAg b2YgcCByb3RhdGVkIC05MCkpIC0tDQogZW5kZm9yDQogaWYgY3ljbGUgcDoN CiAgIGN5Y2xlDQogZWxzZToNCiAgIHBvaW50IGluZmluaXR5IG9mIHANCiBm aQ0KZW5kZGVmOw0Kc2F2ZSB2c3R5X2hhc2g7DQpkZWYgc3R5bGVfZGVmIHN1 ZmZpeCBzID0NCiAgdnN0eV9oYXNoLnMgOj0gMTsNCiAgZXhwYW5kYWZ0ZXIg cXVvdGUgdmFyZGVmIHNjYW50b2tlbnMgKCJkcmF3XyIgJiBzdHIgcykNCmVu ZGRlZjsNCnZhcmRlZiB2c3R5X2V4aXN0cyBzdWZmaXggcyA9DQogIGtub3du IHZzdHlfaGFzaC5zDQplbmRkZWY7DQp2YXJkZWYgdmFsaWRfc3R5bGUgZXhw ciBzID0NCiAgZXhwYW5kYWZ0ZXIgdnN0eV9leGlzdHMgc2NhbnRva2VucyAo cykNCmVuZGRlZjsNCnN0eWxlX2RlZiBwaGFudG9tIGV4cHIgcCA9DQogIFwN CmVuZGRlZjsNCnN0eWxlX2RlZiBwaGFudG9tX2Fycm93IGV4cHIgcCA9DQog IGNmaWxsIChhcnJvdyBwKTsNCmVuZGRlZjsNCnN0eWxlX2RlZiBwbGFpbiBl eHByIHAgPQ0KICBjZHJhdyBwOw0KZW5kZGVmOw0Kc3R5bGVfZGVmIHBsYWlu X2Fycm93IGV4cHIgcCA9DQogIGNkcmF3IHA7DQogIGNmaWxsIChhcnJvdyBw KTsNCmVuZGRlZjsNCnN0eWxlX2RlZiBkYmxfcGxhaW4gZXhwciBwID0NCiAg ZHJhd19kb3VibGUgcDsNCmVuZGRlZjsNCnN0eWxlX2RlZiBkYmxfcGxhaW5f YXJyb3cgZXhwciBwID0NCiAgZHJhd19kb3VibGVfYXJyb3cgcDsNCmVuZGRl ZjsNCnN0eWxlX2RlZiB3aWdnbHkgZXhwciBwID0NCiAgY2RyYXcgKHdpZ2ds eSBwKTsNCmVuZGRlZjsNCnN0eWxlX2RlZiBkYmxfd2lnZ2x5IGV4cHIgcCA9 DQogIGRyYXdfZG91YmxlICh3aWdnbHkgcCk7DQplbmRkZWY7DQpzdHlsZV9k ZWYgY3VybHkgZXhwciBwID0NCiAgY2RyYXcgKGN1cmx5IHApOw0KZW5kZGVm Ow0Kc3R5bGVfZGVmIGRibF9jdXJseSBleHByIHAgPQ0KICBkcmF3X2RvdWJs ZSAoY3VybHkgcCk7DQplbmRkZWY7DQpzdHlsZV9kZWYgemlnemFnIGV4cHIg cCA9DQogIGNkcmF3ICh6aWd6YWcgcCk7DQplbmRkZWY7DQpzdHlsZV9kZWYg ZGJsX3ppZ3phZyBleHByIHAgPQ0KICBkcmF3X2RvdWJsZSAoemlnemFnIHAp Ow0KZW5kZGVmOw0Kc3R5bGVfZGVmIGRhc2hlcyBleHByIHAgPQ0KIHNhdmUg ZHBwOw0KIG51bWVyaWMgZHBwOw0KIGRwcCA9IGNlaWxpbmcgKHBpeGxlbiAo cCwgMTApIC8gZGFzaF9sZW4pIC8gbGVuZ3RoIHA7DQogZm9yIGs9MCB1cHRv IGRwcCpsZW5ndGgocCkgLSAxOg0KICBjZHJhdyBwb2ludCBrL2RwcCBvZiBw IC4uDQogICBwb2ludCAoaysuNSkvZHBwIG9mIHA7DQogZW5kZm9yDQplbmRk ZWY7DQpzdHlsZV9kZWYgZGJsX2Rhc2hlcyBleHByIHAgPQ0KIHNhdmUgZHBw Ow0KIG51bWVyaWMgZHBwOw0KIGRwcCA9IGNlaWxpbmcgKHBpeGxlbiAocCwg MTApIC8gZGFzaF9sZW4pIC8gbGVuZ3RoIHA7DQogZm9yIGs9MCB1cHRvIGRw cCpsZW5ndGgocCkgLSAxOg0KICBkcmF3X2RvdWJsZSBwb2ludCBrL2RwcCBv ZiBwIC4uDQogICBwb2ludCAoaysuNSkvZHBwIG9mIHA7DQogZW5kZm9yDQpl bmRkZWY7DQpzdHlsZV9kZWYgZGJsX2Rhc2hlc19hcnJvdyBleHByIHAgPQ0K ICBkcmF3X2RibF9kYXNoZXMgcDsNCiAgc2hyaW5rICgxLjUpOw0KICAgIGNm aWxsIChhcnJvdyBwKTsNCiAgZW5kc2hyaW5rOw0KZW5kZGVmOw0Kc3R5bGVf ZGVmIGRhc2hlc19hcnJvdyBleHByIHAgPQ0KICBkcmF3X2Rhc2hlcyBwOw0K ICBjZmlsbCAoYXJyb3cgcCk7DQplbmRkZWY7DQpzdHlsZV9kZWYgZG90cyBl eHByIHAgPQ0KIHNhdmUgZHBwOw0KIG51bWVyaWMgZHBwOw0KIGRwcCA9IGNl aWxpbmcgKHBpeGxlbiAocCwgMTApIC8gZG90X2xlbikgLyBsZW5ndGggcDsN CiBmb3Igaz0wIHVwdG8gZHBwKmxlbmd0aChwKToNCiAgIGNkcmF3ZG90IHBv aW50IGsvZHBwIG9mIHA7DQogZW5kZm9yDQplbmRkZWY7DQpzdHlsZV9kZWYg ZGJsX2RvdHMgZXhwciBwID0NCiAgc2F2ZSBkcHA7DQogIG51bWVyaWMgZHBw Ow0KICBkcHAgPSBjZWlsaW5nIChwaXhsZW4gKHAsIDEwKSAvIGRvdF9sZW4p IC8gbGVuZ3RoIHA7DQogIGJlZ2luZ3JvdXANCiAgICBzYXZlIG9sZHBlbjsN CiAgICBwZW4gb2xkcGVuOw0KICAgIG9sZHBlbiA6PSBjdXJyZW50cGVuOw0K ICAgIHBpY2t1cCBvbGRwZW4gc2NhbGVkIDM7ICUgZHJhdyBhIHRoaWNrIGxp bm4NCiAgICBmb3Igaz0wIHVwdG8gZHBwKmxlbmd0aChwKToNCiAgICAgIGNk cmF3ZG90IHBvaW50IGsvZHBwIG9mIHA7DQogICAgZW5kZm9yDQogICAgcGlj a3VwIG9sZHBlbjsNCiAgICBjdWxsaXQ7DQogICAgZm9yIGs9MCB1cHRvIGRw cCpsZW5ndGgocCk6DQogICAgICB1bmRyYXdkb3QgcG9pbnQgay9kcHAgb2Yg cDsNCiAgICBlbmRmb3INCiAgICBjdWxsaXQ7ICUgYW5kIHJlbW92ZSB0aGUg c3R1ZmZpbmcNCiAgZW5kZ3JvdXA7DQplbmRkZWY7DQpzdHlsZV9kZWYgZGJs X2RvdHNfYXJyb3cgZXhwciBwID0NCiAgZHJhd19kYmxfZG90cyBwOw0KICBz aHJpbmsgKDEuNSk7DQogICAgY2ZpbGwgKGFycm93IHApOw0KICBlbmRzaHJp bms7DQplbmRkZWY7DQpzdHlsZV9kZWYgZG90c19hcnJvdyBleHByIHAgPQ0K ICBkcmF3X2RvdHMgcDsNCiAgY2ZpbGwgKGFycm93IHApOw0KZW5kZGVmOw0K c3R5bGVfZGVmIGRvdWJsZSBleHByIHAgPQ0KICBzYXZlIG9sZHBlbjsNCiAg cGVuIG9sZHBlbjsNCiAgb2xkcGVuIDo9IGN1cnJlbnRwZW47DQogIHBpY2t1 cCBvbGRwZW4gc2NhbGVkIDM7DQogIGNjdXRkcmF3IHA7DQogIHBpY2t1cCBv bGRwZW47DQogIGN1bGxpdDsgdW5kcmF3IHA7IGN1bGxpdDsNCmVuZGRlZjsN CnN0eWxlX2RlZiBkb3VibGVfYXJyb3cgZXhwciBwID0NCiAgZHJhd19kb3Vi bGUgcDsNCiAgc2hyaW5rICgxLjUpOw0KICAgIGNmaWxsIChhcnJvdyBwKTsN CiAgZW5kc2hyaW5rOw0KZW5kZGVmOw0Kc3R5bGVfZGVmIHZhbmlsbGEgZXhw ciBwID0gZHJhd19wbGFpbiBwIGVuZGRlZjsNCnN0eWxlX2RlZiBmZXJtaW9u IGV4cHIgcCA9IGRyYXdfcGxhaW5fYXJyb3cgcCBlbmRkZWY7DQpzdHlsZV9k ZWYgcXVhcmsgZXhwciBwID0gZHJhd19wbGFpbl9hcnJvdyBwIGVuZGRlZjsN CnN0eWxlX2RlZiBlbGVjdHJvbiBleHByIHAgPSBkcmF3X3BsYWluX2Fycm93 IHAgZW5kZGVmOw0Kc3R5bGVfZGVmIHBob3RvbiBleHByIHAgPSBkcmF3X3dp Z2dseSBwIGVuZGRlZjsNCnN0eWxlX2RlZiBib3NvbiBleHByIHAgPSBkcmF3 X3dpZ2dseSBwIGVuZGRlZjsNCnN0eWxlX2RlZiBnbHVvbiBleHByIHAgPSBk cmF3X2N1cmx5IHAgZW5kZGVmOw0Kc3R5bGVfZGVmIGhlYXZ5IGV4cHIgcCA9 IGRyYXdfZGJsX3BsYWluX2Fycm93IHAgZW5kZGVmOw0Kc3R5bGVfZGVmIGdo b3N0IGV4cHIgcCA9IGRyYXdfZG90c19hcnJvdyBwIGVuZGRlZjsNCnN0eWxl X2RlZiBzY2FsYXIgZXhwciBwID0gZHJhd19kYXNoZXNfYXJyb3cgcCBlbmRk ZWY7DQp2YXJkZWYgZmVybWlvbiBleHByIHBhdGhfYXJnID0NCiAgY2ZpbGwg KGFycm93IChwYXRoX2FyZykpOw0KICBwYXRoX2FyZw0KZW5kZGVmOw0KdmFy ZGVmIHBob3RvbiBleHByIHBhdGhfYXJnID0NCiAgd2lnZ2x5IHBhdGhfYXJn DQplbmRkZWY7DQp2YXJkZWYgZ2x1b24gZXhwciBwYXRoX2FyZyA9DQogIGN1 cmx5IHBhdGhfYXJnDQplbmRkZWY7DQp0cmFjaW5nc3RhdHM6PTE7DQpib29s ZWFuIHZ0cmFjaW5nOw0KdnRyYWNpbmcgOj0gZmFsc2U7ICUgdHJ1ZQ0KZGVm IHZpbml0ID0NCiAgc2F2ZSB2aGFzaDsNCiAgbnVtZXJpYyB2bGlzdC5maXJz dCwgdmxpc3QubGFzdDsNCiAgdmxpc3QuZmlyc3QgOj0gMTsNCiAgdmxpc3Qu bGFzdCA6PSAwOw0KICBwYWlyIHZsaXN0W11sb2M7DQogIG51bWVyaWMgdmxp c3RbXWRlY29yLnNpemUsIHZsaXN0W11kZWNvci5hbmcsDQogICAgdmxpc3Rb XWFyYy5maXJzdCwgdmxpc3RbXWFyYy5sYXN0LA0KICAgIHZsaXN0W11hcmNb XSwgdmxpc3RbXWFyY1tdbHNyLA0KICAgIHZsaXN0W11hcmNbXXRucywgdmxp c3RbXWFyY1tdbGJsLmRpc3QsDQogICAgdmxpc3RbXWFyY1tddGFnLCB2bGlz dFtdYXJjW113ZCwgdmxpc3RbXWFyY1tdcnViLA0KICAgIHZsaXN0W11jb25z dHIuZmlyc3QsIHZsaXN0W11jb25zdHIubGFzdCwNCiAgICB2bGlzdFtdY29u c3RyW10sIGxhbWJkYXhbXVtdLCBsYW1iZGF5W11bXTsNCiAgc3RyaW5nIHZs aXN0W11uYW1lLCB2bGlzdFtdbGJsLCB2bGlzdFtdZGVjb3Iuc3R5LA0KICAg IHZsaXN0W11hcmNbXXN0eSwgdmxpc3RbXWFyY1tdbGJsLCB2bGlzdFtdYXJj W11sYmwuc2lkZTsNCiAgbnVtZXJpYyB2bGlzdFtdbGJsLmFuZzsNCiAgcGF0 aCB2bGlzdFtdZGVjb3Iuc2hhcGU7DQogIGNvbG9yIHZsaXN0W11mb3JlLCB2 bGlzdFtdYmFjaywNCiAgICB2bGlzdFtdYXJjW11mb3JlLCB2bGlzdFtdYXJj W11iYWNrOw0KICBudW1lcmljIHBsaXN0LmZpcnN0LCBwbGlzdC5sYXN0LCBw bGlzdFtdY250LCBwbGlzdFtddnR4W10sDQogICBwbGlzdFtdcHVsbCwgcGxp c3RbXWxibC5hbmcsIHBsaXN0W11sYmwuZGlzdDsNCiAgc3RyaW5nIHBsaXN0 W11sYmwsIHBsaXN0W11zdHksIHBsaXN0W11jb25hLCBwbGlzdFtdY29uYjsN CiAgcGxpc3QuZmlyc3QgOj0gMTsNCiAgcGxpc3QubGFzdCA6PSAwOw0KICBu dW1lcmljIHZsaXN0W11wb2x5LmZpcnN0LCB2bGlzdFtdcG9seS5sYXN0LA0K ICAgIHZsaXN0W11wb2x5W10sIHZsaXN0W11wb2x5W11pZHg7DQogIHBhaXIg bGFtYmRhcFtdW107DQogY29sb3IgcGxpc3RbXWZvcmUsIHBsaXN0W11iYWNr Ow0KZW5kZGVmOw0KZGVmIHZlcnRpY2VzID0NCiAgdmxpc3QuZmlyc3QgdXB0 byB2bGlzdC5sYXN0DQplbmRkZWY7DQpkZWYgdmFyY3MgKHRleHQgaSkgPQ0K ICB2bGlzdFtpXWFyYy5maXJzdCB1cHRvIHZsaXN0W2ldYXJjLmxhc3QNCmVu ZGRlZjsNCmRlZiB2Y29uc3RyICh0ZXh0IGkpID0NCiAgdmxpc3RbaV1jb25z dHIuZmlyc3QgdXB0byB2bGlzdFtpXWNvbnN0ci5sYXN0DQplbmRkZWY7DQpk ZWYgcG9seWdvbnMgPQ0KICBwbGlzdC5maXJzdCB1cHRvIHBsaXN0Lmxhc3QN CmVuZGRlZjsNCmRlZiB2cG9seSAodGV4dCBpKSA9DQogIHZsaXN0W2ldcG9s eS5maXJzdCB1cHRvIHZsaXN0W2ldcG9seS5sYXN0DQplbmRkZWY7DQp2YXJk ZWYgdmVudGVyIHN1ZmZpeCB2ID0NCiAgaWYgbm90IHZleGlzdHMgdjoNCiAg ICB2bGlzdC5sYXN0IDo9IHZsaXN0Lmxhc3QgKyAxOw0KICAgIHZoYXNoLnYg Oj0gdmxpc3QubGFzdDsNCiAgICB2bGlzdFt2aGFzaC52XW5hbWUgOj0gc3Ry IHY7DQogICAgdmxpc3Rbdmhhc2gudl1sb2MgOj0gKHdoYXRldmVyLHdoYXRl dmVyKTsNCiAgICB2bGlzdFt2aGFzaC52XWFyYy5maXJzdCA6PSAxOw0KICAg IHZsaXN0W3ZoYXNoLnZdYXJjLmxhc3QgOj0gMDsNCiAgICB2bGlzdFt2aGFz aC52XWNvbnN0ci5maXJzdCA6PSAxOw0KICAgIHZsaXN0W3ZoYXNoLnZdY29u c3RyLmxhc3QgOj0gMDsNCiAgICB2bGlzdFt2aGFzaC52XWxibCA6PSAiIjsN CiAgICB2bGlzdFt2aGFzaC52XWxibC5hbmcgOj0gd2hhdGV2ZXI7DQogICAg dmxpc3Rbdmhhc2gudl1sYmwuZGlzdCA6PSAzdGhpY2s7DQogICAgdmxpc3Rb dmhhc2gudl1mb3JlIDo9ICh3aGF0ZXZlciwgd2hhdGV2ZXIsIHdoYXRldmVy KTsNCiAgICB2bGlzdFt2aGFzaC52XWJhY2sgOj0gKHdoYXRldmVyLCB3aGF0 ZXZlciwgd2hhdGV2ZXIpOw0KICAgIHZsaXN0W3ZoYXNoLnZdcG9seS5maXJz dCA6PSAxOw0KICAgIHZsaXN0W3ZoYXNoLnZdcG9seS5sYXN0IDo9IDA7DQog IGZpDQplbmRkZWY7DQp2YXJkZWYgdmV4aXN0cyBzdWZmaXggdiA9DQogIGlm IGtub3duIHZoYXNoLnY6IHRydWUgZWxzZTogZmFsc2UgZmkNCmVuZGRlZjsN CnZhcmRlZiB2bG9va3VwIHN1ZmZpeCB2ID0NCiAgaWYgdmV4aXN0cyB2OiB2 aGFzaC52IGVsc2U6IDAgZmkNCmVuZGRlZjsNCnZhcmRlZiB2bG9jIHN1ZmZp eCB2ID0NCiAgdmxpc3Rbdmxvb2t1cCB2XWxvYw0KZW5kZGVmOw0KdmFyZGVm IHZjb25uZWN0IChleHByIGxpbmVzdHkpICh0ZXh0IHZsKSA9DQogIHNhdmUg ZnJvbSwgbmZyb20sIG50bywgbm9wdCwgc3R5Ow0KICBudW1lcmljIGZyb20s IG5mcm9tLCBudG8sIG5vcHQ7DQogIHN0cmluZyBzdHk7DQogIGdldG9wdCAo b3B0LCBsaW5lc3R5KTsNCiAgc3R5IDo9IG9wdFtvcHQuZmlyc3RdOw0KICBp ZiBrbm93biBvcHRbb3B0LmZpcnN0XWFyZzoNCiAgICBtZXNzYWdlICJmZXlu bWY6IGxpbmUgc3R5bGVzIGRvbid0IHRha2UgYXJndW1lbnRzLiAgIg0KICAg ICAgICAgICAgICYgIkFyZ3VtZW50IGAiICYgb3B0W29wdC5maXJzdF1hcmcg JiAiJyBpZ25vcmVkLiI7DQogIGZpDQogIG9wdC5maXJzdCA6PSBvcHQuZmly c3QgKyAxOw0KICBmb3JzdWZmaXhlcyB0byA9IHZsOg0KICAgIHZlbnRlciB0 bzsNCiAgICBudG8gOj0gdmxvb2t1cCB0bzsNCiAgICBpZiBrbm93biBuZnJv bToNCiAgICAgIHZsaXN0W25mcm9tXWFyYy5sYXN0IDo9IHZsaXN0W25mcm9t XWFyYy5sYXN0ICsgMTsNCiAgICAgIHZsaXN0W25mcm9tXWFyY1t2bGlzdFtu ZnJvbV1hcmMubGFzdF0gOj0gbnRvOw0KICAgICAgdmxpc3RbbmZyb21dYXJj W3ZsaXN0W25mcm9tXWFyYy5sYXN0XXRucyA6PSAxOw0KICAgICAgaWYgbmZy b20gPD4gbnRvOg0KICAgICAgICB2bGlzdFtudG9dYXJjLmxhc3QgOj0gdmxp c3RbbnRvXWFyYy5sYXN0ICsgMTsNCiAgICAgICAgdmxpc3RbbnRvXWFyY1t2 bGlzdFtudG9dYXJjLmxhc3RdIDo9IG5mcm9tOw0KICAgICAgICB2bGlzdFtu dG9dYXJjW3ZsaXN0W250b11hcmMubGFzdF10bnMgOj0gMTsNCiAgICAgIGZp DQogICAgICB2bGlzdFtuZnJvbV1hcmNbdmxpc3RbbmZyb21dYXJjLmxhc3Rd bGJsIDo9ICIiOw0KICAgICAgdmxpc3RbbmZyb21dYXJjW3ZsaXN0W25mcm9t XWFyYy5sYXN0XWxibC5zaWRlIDo9ICIiOw0KICAgICAgdmxpc3RbbmZyb21d YXJjW3ZsaXN0W25mcm9tXWFyYy5sYXN0XWxibC5kaXN0IDo9IDN0aGljazsN CiAgICAgIGZvciBub3B0ID0gb3B0LmZpcnN0IHVwdG8gb3B0Lmxhc3Q6DQog ICAgICAgIGlmIG1hdGNoX29wdGlvbiAob3B0W25vcHRdLCAidGVuc2lvbiIp Og0KICAgICAgICAgIGdldF9hcmd1bWVudCAob3B0W25vcHRdLCBzY2FudG9r ZW5zIChvcHRbbm9wdF1hcmcpLA0KICAgICAgICAgICAgICAgICAgICAgICAg dmxpc3RbbmZyb21dYXJjW3ZsaXN0W25mcm9tXWFyYy5sYXN0XXRucyk7DQog ICAgICAgICAgZ2V0X2FyZ3VtZW50IChvcHRbbm9wdF0sIHNjYW50b2tlbnMg KG9wdFtub3B0XWFyZyksDQogICAgICAgICAgICAgICAgICAgICAgICB2bGlz dFtudG9dYXJjW3ZsaXN0W250b11hcmMubGFzdF10bnMpOw0KICAgICAgICBl bHNlaWYgbWF0Y2hfb3B0aW9uIChvcHRbbm9wdF0sICJsZWZ0Iik6DQogICAg ICAgICAgaWYga25vd24gb3B0W25vcHRdYXJnOg0KICAgICAgICAgICAgdmxp c3RbbmZyb21dYXJjW3ZsaXN0W25mcm9tXWFyYy5sYXN0XWxzcg0KICAgICAg ICAgICAgICA6PSAtIHNjYW50b2tlbnMgKG9wdFtub3B0XWFyZyk7DQogICAg ICAgICAgZWxzZToNCiAgICAgICAgICAgIHZsaXN0W25mcm9tXWFyY1t2bGlz dFtuZnJvbV1hcmMubGFzdF1sc3IgOj0gLTE7DQogICAgICAgICAgZmkNCiAg ICAgICAgZWxzZWlmIG1hdGNoX29wdGlvbiAob3B0W25vcHRdLCAic3RyYWln aHQiKToNCiAgICAgICAgICB2bGlzdFtuZnJvbV1hcmNbdmxpc3RbbmZyb21d YXJjLmxhc3RdbHNyIDo9IDA7DQogICAgICAgICAgaWdub3JlX2FyZ3VtZW50 IChvcHRbbm9wdF0sIG9wdFtub3B0XWFyZyk7DQogICAgICAgIGVsc2VpZiBt YXRjaF9vcHRpb24gKG9wdFtub3B0XSwgInJpZ2h0Iik6DQogICAgICAgICAg aWYga25vd24gb3B0W25vcHRdYXJnOg0KICAgICAgICAgICAgdmxpc3RbbmZy b21dYXJjW3ZsaXN0W25mcm9tXWFyYy5sYXN0XWxzcg0KICAgICAgICAgICAg ICA6PSBzY2FudG9rZW5zIChvcHRbbm9wdF1hcmcpOw0KICAgICAgICAgIGVs c2U6DQogICAgICAgICAgICB2bGlzdFtuZnJvbV1hcmNbdmxpc3RbbmZyb21d YXJjLmxhc3RdbHNyIDo9IDE7DQogICAgICAgICAgZmkNCiAgICAgICAgZWxz ZWlmIG1hdGNoX29wdGlvbiAob3B0W25vcHRdLCAibGFiZWwiKToNCiAgICAg ICAgICBnZXRfYXJndW1lbnQgKG9wdFtub3B0XSwgb3B0W25vcHRdYXJnLA0K ICAgICAgICAgICAgICAgICAgICAgICAgdmxpc3RbbmZyb21dYXJjW3ZsaXN0 W25mcm9tXWFyYy5sYXN0XWxibCk7DQogICAgICAgIGVsc2VpZiBtYXRjaF9v cHRpb24gKG9wdFtub3B0XSwgImxhYmVsLnNpZGUiKToNCiAgICAgICAgICBn ZXRfYXJndW1lbnQgKG9wdFtub3B0XSwgb3B0W25vcHRdYXJnLA0KICAgICAg ICAgICAgICAgICAgICAgICAgdmxpc3RbbmZyb21dYXJjW3ZsaXN0W25mcm9t XWFyYy5sYXN0XWxibC5zaWRlKTsNCiAgICAgICAgZWxzZWlmIG1hdGNoX29w dGlvbiAob3B0W25vcHRdLCAibGFiZWwuZGlzdCIpOg0KICAgICAgICAgIGdl dF9hcmd1bWVudCAob3B0W25vcHRdLCBzY2FudG9rZW5zIChvcHRbbm9wdF1h cmcpLA0KICAgICAgICAgICAgICAgICAgICAgICAgdmxpc3RbbmZyb21dYXJj W3ZsaXN0W25mcm9tXWFyYy5sYXN0XWxibC5kaXN0KTsNCiAgICAgICAgZWxz ZWlmIG1hdGNoX29wdGlvbiAob3B0W25vcHRdLCAidGFnIik6DQogICAgICAg ICAgaWYga25vd24gb3B0W25vcHRdYXJnOg0KICAgICAgICAgICAgdmxpc3Rb bmZyb21dYXJjW3ZsaXN0W25mcm9tXWFyYy5sYXN0XXRhZw0KICAgICAgICAg ICAgICA6PSBzY2FudG9rZW5zIChvcHRbbm9wdF1hcmcpOw0KICAgICAgICAg IGVsc2U6DQogICAgICAgICAgICB2bGlzdFtuZnJvbV1hcmNbdmxpc3RbbmZy b21dYXJjLmxhc3RddGFnIDo9IDA7DQogICAgICAgICAgZmkNCiAgICAgICAg ZWxzZWlmIG1hdGNoX29wdGlvbiAob3B0W25vcHRdLCAid2lkdGgiKToNCiAg ICAgICAgICBnZXRfYXJndW1lbnQgKG9wdFtub3B0XSwgc2NhbnRva2VucyAo b3B0W25vcHRdYXJnKSwNCiAgICAgICAgICAgICAgICAgICAgICAgIHZsaXN0 W25mcm9tXWFyY1t2bGlzdFtuZnJvbV1hcmMubGFzdF13ZCk7DQogICAgICAg IGVsc2VpZiBtYXRjaF9vcHRpb24gKG9wdFtub3B0XSwgImZvcmVncm91bmQi KToNCiAgICAgICAgICBnZXRfYXJndW1lbnQgKG9wdFtub3B0XSwgc2NhbnRv a2VucyAob3B0W25vcHRdYXJnKSwNCiAgICAgICAgICAgICAgICAgICAgICAg IHZsaXN0W25mcm9tXWFyY1t2bGlzdFtuZnJvbV1hcmMubGFzdF1mb3JlKTsN CiAgICAgICAgZWxzZWlmIG1hdGNoX29wdGlvbiAob3B0W25vcHRdLCAiYmFj a2dyb3VuZCIpOg0KICAgICAgICAgIGdldF9hcmd1bWVudCAob3B0W25vcHRd LCBzY2FudG9rZW5zIChvcHRbbm9wdF1hcmcpLA0KICAgICAgICAgICAgICAg ICAgICAgICAgdmxpc3RbbmZyb21dYXJjW3ZsaXN0W25mcm9tXWFyYy5sYXN0 XWJhY2spOw0KICAgICAgICBlbHNlaWYgbWF0Y2hfb3B0aW9uIChvcHRbbm9w dF0sICJydWJvdXQiKToNCiAgICAgICAgICBpZiBrbm93biBvcHRbbm9wdF1h cmc6DQogICAgICAgICAgICAgdmxpc3RbbmZyb21dYXJjW3ZsaXN0W25mcm9t XWFyYy5sYXN0XXJ1Yg0KICAgICAgICAgICAgICAgOj0gc2NhbnRva2VucyAo b3B0W25vcHRdYXJnKTsNCiAgICAgICAgICBlbHNlOg0KICAgICAgICAgICAg IHZsaXN0W25mcm9tXWFyY1t2bGlzdFtuZnJvbV1hcmMubGFzdF1ydWIgOj0g MjsNCiAgICAgICAgICBmaQ0KICAgICAgICBlbHNlOg0KICAgICAgICAgIGln bm9yZV9vcHRpb24gKG9wdFtub3B0XSwgb3B0W25vcHRdYXJnKTsNCiAgICAg ICAgZmkNCiAgICAgIGVuZGZvcg0KICAgICAgaGFuZGxlX2xpbmVfc3R5bGUg KHZsaXN0W25mcm9tXWFyY1t2bGlzdFtuZnJvbV1hcmMubGFzdF1zdHksIHN0 eSk7DQogICAgICB2bGlzdFtudG9dYXJjW3ZsaXN0W250b11hcmMubGFzdF1s c3INCiAgICAgICAgOj0gdmxpc3RbbmZyb21dYXJjW3ZsaXN0W25mcm9tXWFy Yy5sYXN0XWxzcjsNCiAgICBmaQ0KICAgIG5mcm9tIDo9IG50bzsNCiAgZW5k Zm9yDQplbmRkZWY7DQp2YXJkZWYgaGFuZGxlX2xpbmVfc3R5bGUgKHN1ZmZp eCBzdHkpIChleHByIG5hbWUpID0NCiAgaWYgdmFsaWRfc3R5bGUgbmFtZToN CiAgICBzdHkgOj0gbmFtZTsNCiAgZWxzZToNCiAgICBlcnJoZWxwICJmZXlu bWY6IHlvdXIgbGluZXN0eWxlIGlzIG5vdCByZWNvZ25pemFibGUsICINCiAg ICAgICAgICAmICJjaGVjayBzcGVsbGluZyBhbmQgcmVwcm9jZXNzISI7DQog ICAgZXJybWVzc2FnZSAiZmV5bm1mOiBsaW5lIHN0eWxlIGAiICYgbmFtZSAm ICInIG5vdCBrbm93biwgIg0KICAgICAgICAgICAgICYgInJlcGxhY2VkIGJ5 IGB2YW5pbGxhJyI7DQogICAgc3R5IDo9ICJ2YW5pbGxhIjsNCiAgZmkNCmVu ZGRlZjsNCnZhcmRlZiBnZXRfYXJndW1lbnQgKGV4cHIgb3B0LCBhcmcpIChz dWZmaXggdmFyaWFibGUpID0NCiAgaWYga25vd24gYXJnOg0KICAgIHZhcmlh YmxlIDo9IGFyZzsNCiAgZWxzZToNCiAgICBtZXNzYWdlICJmZXlubWY6IG9w dGlvbiBgIiAmIG9wdCAmICInIG5lZWRzIGFuIGFyZ3VtZW50LiAgSWdub3Jl ZC4iOw0KICBmaQ0KZW5kZGVmOw0KdmFyZGVmIGlnbm9yZV9hcmd1bWVudCAo ZXhwciBvcHQsIGFyZykgPQ0KICBpZiBrbm93biBhcmc6DQogICAgbWVzc2Fn ZSAiZmV5bm1mOiBvcHRpb24gYCIgJiBvcHQgJiAiJyBkb2Vzbid0IHRha2Ug YW4gYXJndW1lbnQuICAiDQogICAgICAgICAgJiAiQXJndW1lbnQgYCIgJiBh cmcgJiAiJyBpZ25vcmVkLiI7DQogIGZpDQplbmRkZWY7DQp2YXJkZWYgaWdu b3JlX29wdGlvbiAoZXhwciBvcHQsIGFyZyk9DQogIGlmIGtub3duIGFyZzoN CiAgICBtZXNzYWdlICJmZXlubWY6IGlnbm9yaW5nIG9wdGlvbiAiICYgb3B0 ICYgIj0iICYgYXJnICYgIi4iOw0KICBlbHNlOg0KICAgIG1lc3NhZ2UgImZl eW5tZjogaWdub3Jpbmcgb3B0aW9uICIgJiBvcHQgJiAiLiI7DQogIGZpDQpl bmRkZWY7DQp2YXJkZWYgdmNvbm5lY3RuIChleHByIGxpbmVzdHkpIChzdWZm aXggdikgKGV4cHIgbikgPQ0KICB2Y29ubmVjdCAobGluZXN0eSwgdm1rbGlz dCAodiwgbikpOw0KZW5kZGVmOw0KdmFyZGVmIHZwYXRoQCMgKHN1ZmZpeCBm cm9tLCB0bykgPQ0KICBzYXZlIG5mcm9tLCBudG8sIG9yaWdpbiwgaW5kZXgs IHVua25vd25fcGF0aDsNCiAgbnVtZXJpYyBuZnJvbSwgbnRvLCBvcmlnaW4s IGluZGV4Ow0KICBwYXRoIHVua25vd25fcGF0aDsNCiAgaWYgKGtub3duIHZs b2MgZnJvbSkgYW5kIChrbm93biB2bG9jIHRvKToNCiAgICBuZnJvbSA6PSB2 bG9va3VwIGZyb207DQogICAgbnRvIDo9IHZsb29rdXAgdG87DQogICAgdm1h dGNoX3BhdGggKG5mcm9tLCBudG8sIG1heWJlX2VtcHR5QCMpOw0KICAgIGlm ICh1bmtub3duIG9yaWdpbikgb3IgKHVua25vd24gaW5kZXgpOg0KICAgICAg dm1hdGNoX3BhdGggKG50bywgbmZyb20sIG1heWJlX2VtcHR5QCMpOw0KICAg IGZpDQogIGZpDQogIGlmIChrbm93biBvcmlnaW4pIGFuZCAoa25vd24gaW5k ZXgpOg0KICAgIHZidWlsZF9jdXRfYXJjIChvcmlnaW4sIGluZGV4KQ0KICBl bHNlOg0KICAgIHVua25vd25fcGF0aA0KICBmaQ0KZW5kZGVmOw0KdmFyZGVm IG1heWJlX2VtcHR5QCMgPQ0KICBzYXZlIF9wcmVmaXg7DQogIF9wcmVmaXg9 MTM3Ow0KICBpZiBrbm93biBfcHJlZml4QCM6DQogICAgd2hhdGV2ZXINCiAg ZWxzZToNCiAgICBAIw0KICBmaQ0KZW5kZGVmOw0KdmFyZGVmIHZtYXRjaF9w YXRoIChleHByIG5mcm9tLCBudG8sIHQpID0NCiAgc2F2ZSBpOw0KICBmb3Ig aSA9IHZhcmNzIChuZnJvbSk6DQogICAgaWYgKHZsaXN0W25mcm9tXWFyY1tp XSA9IG50bykgYW5kIChrbm93biB2bGlzdFtuZnJvbV1hcmNbaV1zdHkpOg0K ICAgICAgaWYgdW5rbm93biB0Og0KICAgICAgICBvcmlnaW4gOj0gbmZyb207 DQogICAgICAgIGluZGV4IDo9IGk7DQogICAgICBlbHNlOg0KICAgICAgICBp ZiBrbm93biB2bGlzdFtuZnJvbV1hcmNbaV10YWc6DQogICAgICAgICAgaWYg dmxpc3RbbmZyb21dYXJjW2lddGFnID0gdDoNCiAgICAgICAgICAgIG9yaWdp biA6PSBuZnJvbTsNCiAgICAgICAgICAgIGluZGV4IDo9IGk7DQogICAgICAg ICAgZmkNCiAgICAgICAgZmkNCiAgICAgIGZpDQogICAgZmkNCiAgZW5kZm9y DQplbmRkZWY7DQp2YXJkZWYgdmN5Y2xlbiAoZXhwciBzdHkpIChzdWZmaXgg dikgKGV4cHIgbikgPQ0KICBmb3IgJCA9IDEgdXB0byBuIC0gMToNCiAgICB2 Y29ubmVjdCAoc3R5LCB2WyRdLCB2WyQrMV0pOw0KICBlbmRmb3INCiAgdmNv bm5lY3QgKHN0eSwgdltuXSwgdlsxXSk7DQplbmRkZWY7DQp2YXJkZWYgdnJj eWNsZW4gKGV4cHIgc3R5KSAoc3VmZml4IHYpIChleHByIG4pID0NCiAgdmNv bm5lY3QgKHN0eSwgdlsxXSwgdltuXSk7DQogIGZvciAkID0gbiBkb3dudG8g MjoNCiAgICB2Y29ubmVjdCAoc3R5LCB2WyRdLCB2WyQtMV0pOw0KICBlbmRm b3INCmVuZGRlZjsNCnZhcmRlZiB2Zm9yY2UgKGV4cHIgeikgKHN1ZmZpeCB2 KSA9DQogIHZlbnRlciB2Ow0KICB2bGlzdFt2bG9va3VwIHZdbG9jIDo9IHo7 DQplbmRkZWY7DQp2YXJkZWYgdnNoaWZ0IChleHByIHopICh0ZXh0IHZsKSA9 DQogIGZvcnN1ZmZpeGVzICQ9dmw6DQogICAgaWYgdmV4aXN0cyAkOg0KICAg ICAgdmxpc3Rbdmxvb2t1cCAkXWxvYyA6PSB2bGlzdFt2bG9va3VwICRdbG9j ICsgejsNCiAgICBmaQ0KICBlbmRmb3INCmVuZGRlZjsNCnZhcmRlZiB2Y29u c3RyYWludCAoZXhwciB6KSAodGV4dCB2bCkgPQ0KICBzYXZlIG5mcm9tLCBu dG87DQogIG51bWVyaWMgbmZyb20sIG50bzsNCiAgZm9yc3VmZml4ZXMgdG8g PSB2bDoNCiAgICB2ZW50ZXIgdG87DQogICAgbnRvIDo9IHZsb29rdXAgdG87 DQogICAgaWYga25vd24gbmZyb206DQogICAgICB2bGlzdFtuZnJvbV1jb25z dHIubGFzdCA6PSB2bGlzdFtuZnJvbV1jb25zdHIubGFzdCArIDE7DQogICAg ICB2bGlzdFtudG9dY29uc3RyLmxhc3QgOj0gdmxpc3RbbnRvXWNvbnN0ci5s YXN0ICsgMTsNCiAgICAgIHZsaXN0W25mcm9tXWNvbnN0clt2bGlzdFtuZnJv bV1jb25zdHIubGFzdF0gOj0gbnRvOw0KICAgICAgdmxpc3RbbnRvXWNvbnN0 clt2bGlzdFtudG9dY29uc3RyLmxhc3RdIDo9IG5mcm9tOw0KICAgICAgdmxp c3RbbnRvXWxvYyA9IHZsaXN0W25mcm9tXWxvYyArIHo7DQogICAgZmkNCiAg ICBuZnJvbSA6PSBudG87DQogIGVuZGZvcg0KZW5kZGVmOw0KdmFyZGVmIHZw b2x5Z29uIChleHByIHBzdHkpIChzdWZmaXggdikgKHRleHQgdmwpID0NCiAg c2F2ZSBub3B0LCBjc3R5LCBuZnJvbSwgbmZyb21fLCBudG8sIGksIG4sIGo7 DQogIG51bWVyaWMgbm9wdCwgbmZyb20sIG5mcm9tXywgbnRvLCBpLCBuLCBq Ow0KICBzdHJpbmcgY3N0eTsNCiAgbiA6PSBjb3VudCAodmwpICsgMTsNCiAg cGxpc3QubGFzdCA6PSBwbGlzdC5sYXN0ICsgMTsNCiAgcGxpc3RbcGxpc3Qu bGFzdF1jbnQgOj0gbjsNCiAgcGxpc3RbcGxpc3QubGFzdF1sYmwgOj0gIiI7 DQogIHBsaXN0W3BsaXN0Lmxhc3RdbGJsLmFuZyA6PSB3aGF0ZXZlcjsNCiAg cGxpc3RbcGxpc3QubGFzdF1sYmwuZGlzdCA6PSAwOw0KICBjc3R5IDo9ICJw aGFudG9tIjsNCiAgZ2V0b3B0IChvcHQsIHBzdHkpOw0KICBmb3Igbm9wdCA9 IG9wdC5maXJzdCB1cHRvIG9wdC5sYXN0Og0KICAgIGlmIG1hdGNoX29wdGlv biAob3B0W25vcHRdLCAiZmlsbGVkIik6DQogICAgICBnZXRfYXJndW1lbnQg KG9wdFtub3B0XSwgb3B0W25vcHRdYXJnLCBwbGlzdFtwbGlzdC5sYXN0XXN0 eSk7DQogICAgZWxzZWlmIG1hdGNoX29wdGlvbiAob3B0W25vcHRdLCAidGVu c2lvbiIpOg0KICAgICAgaWYga25vd24gb3B0W25vcHRdYXJnOg0KICAgICAg ICBjc3R5IDo9IGNzdHkgJiAiLHRlbnNpb249IiAmIG9wdFtub3B0XWFyZzsN CiAgICAgIGVsc2U6DQogICAgICAgIG1lc3NhZ2UgImZleW5tZjogb3B0aW9u IGB0ZW5zaW9uJyBuZWVkcyBhbiBhcmd1bWVudC4gIElnbm9yZWQuIjsNCiAg ICAgIGZpDQogICAgZWxzZWlmIG1hdGNoX29wdGlvbiAob3B0W25vcHRdLCAi bGFiZWwiKToNCiAgICAgIGdldF9hcmd1bWVudCAob3B0W25vcHRdLCBvcHRb bm9wdF1hcmcsIHBsaXN0W3BsaXN0Lmxhc3RdbGJsKTsNCiAgICBlbHNlaWYg bWF0Y2hfb3B0aW9uIChvcHRbbm9wdF0sICJsYWJlbC5hbmdsZSIpOg0KICAg ICAgZ2V0X2FyZ3VtZW50IChvcHRbbm9wdF0sIHNjYW50b2tlbnMgKG9wdFtu b3B0XWFyZyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxp c3RbcGxpc3QubGFzdF1sYmwuYW5nKTsNCiAgICBlbHNlaWYgbWF0Y2hfb3B0 aW9uIChvcHRbbm9wdF0sICJsYWJlbC5kaXN0Iik6DQogICAgICBnZXRfYXJn dW1lbnQgKG9wdFtub3B0XSwgc2NhbnRva2VucyAob3B0W25vcHRdYXJnKSwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGlzdFtwbGlzdC5s YXN0XWxibC5kaXN0KTsNCiAgICBlbHNlaWYgbWF0Y2hfb3B0aW9uIChvcHRb bm9wdF0sICJwdWxsIik6DQogICAgICBnZXRfYXJndW1lbnQgKG9wdFtub3B0 XSwgc2NhbnRva2VucyAob3B0W25vcHRdYXJnKSwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwbGlzdFtwbGlzdC5sYXN0XXB1bGwpOw0KICAg IGVsc2VpZiBtYXRjaF9vcHRpb24gKG9wdFtub3B0XSwgImNvbmEiKToNCiAg ICAgIGdldF9hcmd1bWVudCAob3B0W25vcHRdLCBvcHRbbm9wdF1hcmcsIHBs aXN0W3BsaXN0Lmxhc3RdY29uYSk7DQogICAgZWxzZWlmIG1hdGNoX29wdGlv biAob3B0W25vcHRdLCAiY29uYiIpOg0KICAgICAgZ2V0X2FyZ3VtZW50IChv cHRbbm9wdF0sIG9wdFtub3B0XWFyZywgcGxpc3RbcGxpc3QubGFzdF1jb25i KTsNCiAgICBlbHNlaWYgbWF0Y2hfb3B0aW9uIChvcHRbbm9wdF0sICJzbW9v dGgiKToNCiAgICAgIHBsaXN0W3BsaXN0Lmxhc3RdY29uYSA6PSAiLi4iOw0K ICAgICAgcGxpc3RbcGxpc3QubGFzdF1jb25iIDo9ICIuLiI7DQogICAgICBp Z25vcmVfYXJndW1lbnQgKG9wdFtub3B0XSwgb3B0W25vcHRdYXJnKTsNCiAg ICBlbHNlaWYgbWF0Y2hfb3B0aW9uIChvcHRbbm9wdF0sICJmb3JlZ3JvdW5k Iik6DQogICAgICBnZXRfYXJndW1lbnQgKG9wdFtub3B0XSwgc2NhbnRva2Vu cyAob3B0W25vcHRdYXJnKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwbGlzdFtwbGlzdC5sYXN0XWZvcmUpOw0KICAgIGVsc2VpZiBtYXRj aF9vcHRpb24gKG9wdFtub3B0XSwgImJhY2tncm91bmQiKToNCiAgICAgIGdl dF9hcmd1bWVudCAob3B0W25vcHRdLCBzY2FudG9rZW5zIChvcHRbbm9wdF1h cmcpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsaXN0W3Bs aXN0Lmxhc3RdYmFjayk7DQogICAgZWxzZWlmIG1hdGNoX29wdGlvbiAob3B0 W25vcHRdLCAicGhhbnRvbSIpOg0KICAgICAgcGxpc3RbcGxpc3QubGFzdF1z dHkgOj0gInBoYW50b20iOw0KICAgIGVsc2VpZiBtYXRjaF9vcHRpb24gKG9w dFtub3B0XSwgImVtcHR5Iik6DQogICAgICBwbGlzdFtwbGlzdC5sYXN0XXN0 eSA6PSAiZW1wdHkiOw0KICAgIGVsc2VpZiBtYXRjaF9vcHRpb24gKG9wdFtu b3B0XSwgImZ1bGwiKToNCiAgICAgIHBsaXN0W3BsaXN0Lmxhc3Rdc3R5IDo9 ICJmdWxsIjsNCiAgICBlbHNlaWYgbWF0Y2hfb3B0aW9uIChvcHRbbm9wdF0s ICJoYXRjaGVkIik6DQogICAgICBwbGlzdFtwbGlzdC5sYXN0XXN0eSA6PSAi aGF0Y2hlZCI7DQogICAgZWxzZWlmIG1hdGNoX29wdGlvbiAob3B0W25vcHRd LCAic2hhZGVkIik6DQogICAgICBwbGlzdFtwbGlzdC5sYXN0XXN0eSA6PSAi c2hhZGVkIjsNCiAgICBlbHNlOg0KICAgICAgaWdub3JlX29wdGlvbiAob3B0 W25vcHRdLCBvcHRbbm9wdF1hcmcpOw0KICBmaQ0KICBlbmRmb3INCiAgY2Fu b25pY2FsaXplX2ZpbGxpbmcgcGxpc3RbcGxpc3QubGFzdF1zdHk7DQogIHZj b25uZWN0IChjc3R5LCB2LCB2bCwgdik7DQogIGkgOj0gMTsNCiAgZm9yc3Vm Zml4ZXMgdG8gPSB2LCB2bCwgdjoNCiAgICBudG8gOj0gdmxvb2t1cCB0bzsN CiAgICBpZiBrbm93biBuZnJvbToNCiAgICAgIGlmIGtub3duIG5mcm9tXzoN CiAgICAgICAgdmxpc3RbbnRvXWxvYyA9IHZsaXN0W25mcm9tXWxvYw0KICAg ICAgICAgICsgKHZsaXN0W25mcm9tXWxvYyAtIHZsaXN0W25mcm9tX11sb2Mp IHJvdGF0ZWQgKDM2MC9uKTsNCiAgICAgIGZpDQogICAgICB2bGlzdFtudG9d cG9seS5sYXN0IDo9IHZsaXN0W250b11wb2x5Lmxhc3QgKyAxOw0KICAgICAg dmxpc3RbbnRvXXBvbHlbdmxpc3RbbnRvXXBvbHkubGFzdF0gOj0gcGxpc3Qu bGFzdDsNCiAgICAgIHZsaXN0W250b11wb2x5W3ZsaXN0W250b11wb2x5Lmxh c3RdaWR4IDo9IGk7DQogICAgICBwbGlzdFtwbGlzdC5sYXN0XXZ0eFtpXSA6 PSBudG87DQogICAgICBpIDo9IGkgKyAxOw0KICAgICAgbmZyb21fIDo9IG5m cm9tOw0KICAgIGZpDQogICAgbmZyb20gOj0gbnRvOw0KICBlbmRmb3INCmVu ZGRlZjsNCnZhcmRlZiBjYW5vbmljYWxpemVfZmlsbGluZyBzdWZmaXggZiA9 DQogIGlmIGtub3duIGY6DQogICAgaWYgaXNfYV9udW1iZXIgKGYpOg0KICAg ICAgaWYgc2NhbnRva2VucyBmIDw9IDE6DQogICAgICAgIGYgOj0NCiAgICAg ICAgaWYgc2NhbnRva2VucyBmID0gMToNCiAgICAgICAgICAiZnVsbCINCiAg ICAgICAgZWxzZWlmIHNjYW50b2tlbnMgZiA+IDA6DQogICAgICAgICAgInNo YWRlZCINCiAgICAgICAgZWxzZWlmIHNjYW50b2tlbnMgZiA9IDA6DQogICAg ICAgICAgImVtcHR5Ig0KICAgICAgICBlbHNlOg0KICAgICAgICAgICJoYXRj aGVkIg0KICAgICAgICBmaTsNCiAgICAgIGZpDQogICAgZmkNCiAgZmkNCmVu ZGRlZjsNCnZhcmRlZiB2cG9seWdvbm4gKGV4cHIgc3R5KSAoc3VmZml4IHYp IChleHByIG4pID0NCiAgdnBvbHlnb24gKHN0eSwgdlsxXSwgZm9yICQ9MiB1 cHRvIG4tMTogdlskXSwgZW5kZm9yIHZbbl0pOw0KZW5kZGVmOw0KdmFyZGVm IHZycG9seWdvbm4gKGV4cHIgc3R5KSAoc3VmZml4IHYpIChleHByIG4pID0N CiAgdnBvbHlnb24gKHN0eSwgdltuXSwgZm9yICQ9bi0xIGRvd250byAyOiB2 WyRdLCBlbmRmb3IgdlsxXSk7DQplbmRkZWY7DQp2YXJkZWYgdmxhYmVsIChl eHByIHMpIChzdWZmaXggdikgPQ0KICB2ZW50ZXIgdjsNCiAgdmxpc3Rbdmxv b2t1cCB2XWxibCA6PSBzOw0KZW5kZGVmOw0KdmFyZGVmIHZ2ZXJ0ZXggKGV4 cHIgdnR4c3R5KSAodGV4dCB2bCkgPQ0KICBzYXZlIG5vcHQsIHN0eSwgYXJn Ow0KICBudW1lcmljIG5vcHQsIGFyZzsNCiAgc3RyaW5nIHN0eTsNCiAgZ2V0 b3B0IChvcHQsIHZ0eHN0eSk7DQogIGZvcnN1ZmZpeGVzIHYgPSB2bDoNCiAg ICB2ZW50ZXIgdjsNCiAgICBuIDo9IHZsb29rdXAgdjsNCiAgICBmb3Igbm9w dCA9IG9wdC5maXJzdCB1cHRvIG9wdC5sYXN0Og0KICAgICAgaGFuZGxlX3Zl cnRleF9vcHRpb24gKHZsaXN0W25dLCBvcHRbbm9wdF0sIG9wdFtub3B0XWFy Zyk7DQogICAgZW5kZm9yDQogIGVuZGZvcg0KZW5kZGVmOw0KdmFyZGVmIGhh bmRsZV92ZXJ0ZXhfb3B0aW9uIChzdWZmaXggdikgKGV4cHIgb3B0LCBhcmcp ID0NCiAgaWYgbWF0Y2hfb3B0aW9uIChvcHQsICJsYWJlbCIpOg0KICAgIGdl dF9hcmd1bWVudCAob3B0LCBhcmcsIHYubGJsKTsNCiAgZWxzZWlmIG1hdGNo X29wdGlvbiAob3B0LCAibGFiZWwuYW5nbGUiKToNCiAgICBnZXRfYXJndW1l bnQgKG9wdCwgc2NhbnRva2VucyAoYXJnKSwgdi5sYmwuYW5nKTsNCiAgZWxz ZWlmIG1hdGNoX29wdGlvbiAob3B0LCAibGFiZWwuZGlzdCIpOg0KICAgIGdl dF9hcmd1bWVudCAob3B0LCBzY2FudG9rZW5zIChhcmcpLCB2LmxibC5kaXN0 KTsNCiAgZWxzZWlmIG1hdGNoX29wdGlvbiAob3B0LCAiZGVjb3JhdGlvbi5z aGFwZSIpOg0KICAgIGlmIGtub3duIGFyZzoNCiAgICAgIG1ha2VfZGVjb3Jf c2hhcGUgKHYuZGVjb3Iuc2hhcGUsIGFyZyk7DQogICAgZWxzZToNCiAgICAg IG1lc3NhZ2UgImZleW5tZjogb3B0aW9uIGBkZWNvci5zaGFwZScgbmVlZHMg YW4gYXJndW1lbnQuICBJZ25vcmVkLiI7DQogICAgZmkNCiAgZWxzZWlmIG1h dGNoX29wdGlvbiAob3B0LCAiZGVjb3JhdGlvbi5maWxsZWQiKToNCiAgICBn ZXRfYXJndW1lbnQgKG9wdCwgYXJnLCB2LmRlY29yLnN0eSk7DQogICAgY2Fu b25pY2FsaXplX2ZpbGxpbmcgdi5kZWNvci5zdHk7DQogIGVsc2VpZiBtYXRj aF9vcHRpb24gKG9wdCwgImRlY29yYXRpb24uc2l6ZSIpOg0KICAgIGdldF9h cmd1bWVudCAob3B0LCBzY2FudG9rZW5zIChhcmcpLCB2LmRlY29yLnNpemUp Ow0KICBlbHNlaWYgbWF0Y2hfb3B0aW9uIChvcHQsICJkZWNvcmF0aW9uLmFu Z2xlIik6DQogICAgZ2V0X2FyZ3VtZW50IChvcHQsIHNjYW50b2tlbnMgKGFy ZyksIHYuZGVjb3IuYW5nKTsNCiAgZWxzZWlmIG1hdGNoX29wdGlvbiAob3B0 LCAiZm9yZWdyb3VuZCIpOg0KICAgIGdldF9hcmd1bWVudCAob3B0LCBzY2Fu dG9rZW5zIChhcmcpLCB2LmZvcmUpOw0KICBlbHNlaWYgbWF0Y2hfb3B0aW9u IChvcHQsICJiYWNrZ3JvdW5kIik6DQogICAgZ2V0X2FyZ3VtZW50IChvcHQs IHNjYW50b2tlbnMgKGFyZyksIHYuYmFjayk7DQogIGVsc2U6DQogICAgaWdu b3JlX29wdGlvbiAob3B0LCBhcmcpOw0KICBmaQ0KZW5kZGVmOw0KdmFyZGVm IG1ha2VfZGVjb3Jfc2hhcGUgKHN1ZmZpeCBwKSAoZXhwciBuKSA9DQogIGlm IG1hdGNoX3ByZWZpeCAobiwgImNpcmNsZSIpOiBwIDo9IGZ1bGxjaXJjbGU7 DQogIGVsc2VpZiBtYXRjaF9wcmVmaXggKG4sICJzcXVhcmUiKToNCiAgICBw IDo9IHVuaXRzcXVhcmUgc2hpZnRlZCAtKC41LC41KTsNCiAgZWxzZWlmIG1h dGNoX3ByZWZpeCAobiwgImNyb3NzIik6IHAgOj0gcG9seWNyb3NzIDQ7DQog IGVsc2VpZiBtYXRjaF9wcmVmaXggKG4sICJ0cmlhbmdsZSIpOiBwIDo9IHBv bHlnb24gMzsNCiAgZWxzZWlmIG1hdGNoX3ByZWZpeCAobiwgInRyaWFnb24i KTogcCA6PSBwb2x5Z29uIDM7DQogIGVsc2VpZiBtYXRjaF9wcmVmaXggKG4s ICJkaWFtb25kIik6IHAgOj0gcG9seWdvbiA0Ow0KICBlbHNlaWYgbWF0Y2hf cHJlZml4IChuLCAidGV0cmFnb24iKTogcCA6PSBwb2x5Z29uIDQ7DQogIGVs c2VpZiBtYXRjaF9wcmVmaXggKG4sICJwZW50YWdvbiIpOiBwIDo9IHBvbHln b24gNTsNCiAgZWxzZWlmIG1hdGNoX3ByZWZpeCAobiwgImhleGFnb24iKTog cCA6PSBwb2x5Z29uIDY7DQogIGVsc2VpZiBtYXRjaF9wcmVmaXggKG4sICJ0 cmlhZ3JhbSIpOiBwIDo9IHBvbHlncmFtIDM7DQogIGVsc2VpZiBtYXRjaF9w cmVmaXggKG4sICJ0ZXRyYWdyYW0iKTogcCA6PSBwb2x5Z3JhbSA0Ow0KICBl bHNlaWYgbWF0Y2hfcHJlZml4IChuLCAicGVudGFncmFtIik6IHAgOj0gcG9s eWdyYW0gNTsNCiAgZWxzZWlmIG1hdGNoX3ByZWZpeCAobiwgImhleGFncmFt Iik6IHAgOj0gcG9seWdyYW0gNjsNCiAgZWxzZWlmIG1hdGNoX3ByZWZpeCAo biwgInRyaWFjcm9zcyIpOiBwIDo9IHBvbHljcm9zcyAzOw0KICBlbHNlaWYg bWF0Y2hfcHJlZml4IChuLCAidGV0cmFjcm9zcyIpOiBwIDo9IHBvbHljcm9z cyA0Ow0KICBlbHNlaWYgbWF0Y2hfcHJlZml4IChuLCAicGVudGFjcm9zcyIp OiBwIDo9IHBvbHljcm9zcyA1Ow0KICBlbHNlaWYgbWF0Y2hfcHJlZml4IChu LCAiaGV4YWNyb3NzIik6IHAgOj0gcG9seWNyb3NzIDY7DQogIGVsc2U6DQog ICAgaWYgZmV5bm1md2l6YXJkOg0KICAgICAgcCA6PSBzY2FudG9rZW5zKG4p Ow0KICAgIGVsc2U6DQogICAgICBtZXNzYWdlICJmZXlubWY6IGludmFsaWQg YXJndW1lbnQgYCIgJiBuDQogICAgICAgICAgICAmICInIHRvIG9wdGlvbiBg ZGVjb3Iuc2hhcGUnLiAgSWdub3JlZC4iOw0KICAgIGZpDQogIGZpDQplbmRk ZWY7DQp2YXJkZWYgaXNfYV9udW1iZXIgZXhwciBzID0NCiAgc2F2ZSBuOw0K ICBpZiBrbm93biBzOg0KICAgICh0cnVlDQogICAgIGZvciBuID0gMSB1cHRv IGxlbmd0aCBzOg0KICAgICAgIGFuZCAoKHN1YnN0cmluZyAobi0xLG4pIG9m IHMgPSAiLiIpDQogICAgICAgICAgICBvciAoc3Vic3RyaW5nIChuLTEsbikg b2YgcyA9ICItIikNCiAgICAgICAgICAgIG9yIGlzZGlnaXQgc3Vic3RyaW5n IChuLTEsbikgb2YgcykNCiAgICAgIGVuZGZvcikNCiAgZWxzZToNCiAgICBm YWxzZQ0KICBmaQ0KZW5kZGVmOw0KdmFyZGVmIHZ2ZXJ0ZXhuIChleHByIHZ0 eHN0eSkgKHN1ZmZpeCB2KSAoZXhwciBuKSA9DQogIHZ2ZXJ0ZXggKHZ0eHN0 eSwgdm1rbGlzdCAodiwgbikpOw0KZW5kZGVmOw0KdmFyZGVmIHZibG9iIChl eHByIGJkKSAodGV4dCB2bCk9DQogIGZvcnN1ZmZpeGVzICQ9dmw6DQogICAg aWYgbm90IHZleGlzdHMgJDogdmVudGVyICQ7IGZpDQogICAgdmxpc3Rbdmxv b2t1cCAkXWRlY29yLnNoYXBlIDo9IGZ1bGxjaXJjbGU7DQogICAgdmxpc3Rb dmxvb2t1cCAkXWRlY29yLnNpemUgOj0gYmQ7DQogICAgdmxpc3Rbdmxvb2t1 cCAkXWRlY29yLnN0eSA6PSAic2hhZGVkIjsNCiBlbmRmb3INCmVuZGRlZjsN CnZhcmRlZiB2ZG90ICh0ZXh0IHZsKT0NCiAgZm9yc3VmZml4ZXMgJD12bDoN CiAgICBpZiBub3QgdmV4aXN0cyAkOiB2ZW50ZXIgJDsgZmkNCiAgICB2bGlz dFt2bG9va3VwICRdZGVjb3Iuc2hhcGUgOj0gZnVsbGNpcmNsZTsNCiAgICB2 bGlzdFt2bG9va3VwICRdZGVjb3Iuc2l6ZSA6PSBkb3Rfc2l6ZTsNCiAgICB2 bGlzdFt2bG9va3VwICRdZGVjb3Iuc3R5IDo9ICJmdWxsIjsNCiBlbmRmb3IN CmVuZGRlZjsNCnZhcmRlZiB2ZG90biAoc3VmZml4IHYpIChleHByIG4pID0N CiAgdmRvdCAodm1rbGlzdCAodiwgbikpOw0KZW5kZGVmOw0KdmFyZGVmIHZi bG9ibiAoc3VmZml4IHYpIChleHByIG4pID0NCiAgdmJsb2IgKHZta2xpc3Qg KHYsIG4pKTsNCmVuZGRlZjsNCnZhcmRlZiBjdXJ2ZWRfbGVmdF9nYWxsZXJ5 ID0gLjlbc2Usc3ddIC4uIC41W3N3LG53XSAuLiAuMVtudyxuZV0gZW5kZGVm Ow0KdmFyZGVmIGN1cnZlZF9yaWdodF9nYWxsZXJ5ID0gLjlbc3csc2VdIC4u IC41W3NlLG5lXSAuLiAuMVtuZSxud10gZW5kZGVmOw0KdmFyZGVmIGN1cnZl ZF9ib3R0b21fZ2FsbGVyeSA9IC45W253LHN3XSAuLiAuNVtzdyxzZV0gLi4g LjFbc2UsbmVdIGVuZGRlZjsNCnZhcmRlZiBjdXJ2ZWRfdG9wX2dhbGxlcnkg PSAuOVtzdyxud10gLi4gLjVbbncsbmVdIC4uIC4xW25lLHNlXSBlbmRkZWY7 DQp2YXJkZWYgY3VydmVkX3N1cnJvdW5kX2dhbGxlcnkgPQ0KICBzdXBlcmVs bGlwc2UgKC41W3NlLG5lXSwgLjVbbmUsbnddLCAuNVtudyxzd10sIC41W3N3 LHNlXSwgLjc1KQ0KZW5kZGVmOw0KdmFyZGVmIHN0cmFpZ2h0X2xlZnRfZ2Fs bGVyeSA9IHN3IC0tIG53IGVuZGRlZjsNCnZhcmRlZiBzdHJhaWdodF9yaWdo dF9nYWxsZXJ5ID0gc2UgLS0gbmUgZW5kZGVmOw0KdmFyZGVmIHN0cmFpZ2h0 X2JvdHRvbV9nYWxsZXJ5ID0gc3cgLS0gc2UgZW5kZGVmOw0KdmFyZGVmIHN0 cmFpZ2h0X3RvcF9nYWxsZXJ5ID0gbncgLS0gbmUgZW5kZGVmOw0KdmFyZGVm IHN0cmFpZ2h0X3N1cnJvdW5kX2dhbGxlcnkgPQ0KICAgLjVbc2UsbmVdIC0t IG5lIC0tIC41W25lLG53XSAtLSBudw0KICAgICAtLSAuNVtudyxzd10gLS0g c3cgLS0gLjVbc3csc2VdIC0tIHNlIC0tIGN5Y2xlDQplbmRkZWY7DQp2YXJk ZWYgY3VydmVkX2dhbGxlcmllcyA9DQogIHZhcmRlZiBsZWZ0X2dhbGxlcnkg PSBjdXJ2ZWRfbGVmdF9nYWxsZXJ5IGVuZGRlZjsNCiAgdmFyZGVmIHJpZ2h0 X2dhbGxlcnkgPSBjdXJ2ZWRfcmlnaHRfZ2FsbGVyeSBlbmRkZWY7DQogIHZh cmRlZiBib3R0b21fZ2FsbGVyeSA9IGN1cnZlZF9ib3R0b21fZ2FsbGVyeSBl bmRkZWY7DQogIHZhcmRlZiB0b3BfZ2FsbGVyeSA9IGN1cnZlZF90b3BfZ2Fs bGVyeSBlbmRkZWY7DQogIHZhcmRlZiBzdXJyb3VuZF9nYWxsZXJ5ID0gY3Vy dmVkX3N1cnJvdW5kX2dhbGxlcnkgZW5kZGVmOw0KZW5kZGVmOw0KdmFyZGVm IHN0cmFpZ2h0X2dhbGxlcmllcyA9DQogIHZhcmRlZiBsZWZ0X2dhbGxlcnkg PSBzdHJhaWdodF9sZWZ0X2dhbGxlcnkgZW5kZGVmOw0KICB2YXJkZWYgcmln aHRfZ2FsbGVyeSA9IHN0cmFpZ2h0X3JpZ2h0X2dhbGxlcnkgZW5kZGVmOw0K ICB2YXJkZWYgYm90dG9tX2dhbGxlcnkgPSBzdHJhaWdodF9ib3R0b21fZ2Fs bGVyeSBlbmRkZWY7DQogIHZhcmRlZiB0b3BfZ2FsbGVyeSA9IHN0cmFpZ2h0 X3RvcF9nYWxsZXJ5IGVuZGRlZjsNCiAgdmFyZGVmIHN1cnJvdW5kX2dhbGxl cnkgPSBzdHJhaWdodF9zdXJyb3VuZF9nYWxsZXJ5IGVuZGRlZjsNCmVuZGRl ZjsNCnZhcmRlZiB2bGVmdCAodGV4dCB2bCkgPSB2ZGlzdHJpYnV0ZSAobGVm dF9nYWxsZXJ5LCB2bCkgZW5kZGVmOw0KdmFyZGVmIHZyaWdodCAodGV4dCB2 bCkgPSB2ZGlzdHJpYnV0ZSAocmlnaHRfZ2FsbGVyeSwgdmwpIGVuZGRlZjsN CnZhcmRlZiB2Ym90dG9tICh0ZXh0IHZsKSA9IHZkaXN0cmlidXRlIChib3R0 b21fZ2FsbGVyeSwgdmwpIGVuZGRlZjsNCnZhcmRlZiB2dG9wICh0ZXh0IHZs KSA9IHZkaXN0cmlidXRlICh0b3BfZ2FsbGVyeSwgdmwpIGVuZGRlZjsNCnZh cmRlZiB2c3Vycm91bmQgKHRleHQgdmwpID0gdmRpc3RyaWJ1dGUgKHN1cnJv dW5kX2dhbGxlcnksIHZsKSBlbmRkZWY7DQpjdXJ2ZWRfZ2FsbGVyaWVzOw0K dmFyZGVmIHZkaXN0cmlidXRlIChleHByIHApICh0ZXh0IHZsKSA9DQogIHNh dmUgbnVtdiwgbGVuLCBvZmY7DQogIG51bWVyaWMgbnVtdiwgbGVuLCBvZmY7 DQogIG51bXYgPSBjb3VudCAodmwpOw0KICBpZiBjeWNsZSBwOiBudW12IDo9 IG51bXYgKyAxOyBmaQ0KICBsZW4gOj0gbGVuZ3RoIChwKTsNCiAgaWYgbnVt diA9IDE6DQogICAgdmZvcmNlIChwb2ludCBsZW4vMiBvZiBwLCB2bCk7DQog IGVsc2U6DQogICAgb2ZmIDo9IDA7DQogICAgZm9yc3VmZml4ZXMgJCA9IHZs Og0KICAgICAgdmZvcmNlIChwb2ludCBvZmYgb2YgcCwgJCk7DQogICAgICBv ZmYgOj0gb2ZmICsgbGVuLyhudW12LTEpOw0KICAgIGVuZGZvcg0KICBmaQ0K ZW5kZGVmOw0KZGVmIHZta2xpc3QgKHN1ZmZpeCB2KSAoZXhwciBuKSA9DQog IGZvciAkID0gMSB1cHRvIG4tMTogdlskXSwgZW5kZm9yIHZbbl0NCmVuZGRl ZjsNCnZhcmRlZiB2bGVmdG4gKHN1ZmZpeCB2KSAoZXhwciBuKSA9DQogIHZs ZWZ0ICh2bWtsaXN0ICh2LCBuKSk7DQplbmRkZWY7DQp2YXJkZWYgdnJpZ2h0 biAoc3VmZml4IHYpIChleHByIG4pID0NCiAgdnJpZ2h0ICh2bWtsaXN0ICh2 LCBuKSk7DQplbmRkZWY7DQp2YXJkZWYgdmJvdHRvbW4gKHN1ZmZpeCB2KSAo ZXhwciBuKSA9DQogIHZib3R0b20gKHZta2xpc3QgKHYsIG4pKTsNCmVuZGRl ZjsNCnZhcmRlZiB2dG9wbiAoc3VmZml4IHYpIChleHByIG4pID0NCiAgdnRv cCAodm1rbGlzdCAodiwgbikpOw0KZW5kZGVmOw0KdmFyZGVmIHZzdXJyb3Vu ZG4gKHN1ZmZpeCB2KSAoZXhwciBuKSA9DQogIHZzdXJyb3VuZCAodm1rbGlz dCAodiwgbikpOw0KZW5kZGVmOw0KdmFyZGVmIHZmcmVlemUgPQ0KICBmb3Ig aSA9IHZlcnRpY2VzOg0KICAgIGlmIHVua25vd24gdmxpc3RbaV1sb2M6DQog ICAgICBvcmlnaW4gPSBvcmlnaW4NCiAgICAgIGZvciBqID0gdmFyY3MgKGkp Og0KICAgICAgICArIHZsaXN0W2ldYXJjW2pddG5zICogKHZsaXN0W2ldbG9j IC0gdmxpc3Rbdmxpc3RbaV1hcmNbal1dbG9jKQ0KICAgICAgZW5kZm9yDQog ICAgICBmb3IgaiA9IHZjb25zdHIgKGkpOg0KICAgICAgICBpZiBpIDwgdmxp c3RbaV1jb25zdHJbal06DQogICAgICAgICAgKyBsYW1iZGEgKGksIHZsaXN0 W2ldY29uc3RyW2pdKQ0KICAgICAgICBlbHNlaWYgaSA+IHZsaXN0W2ldY29u c3RyW2pdOg0KICAgICAgICAgIC0gbGFtYmRhICh2bGlzdFtpXWNvbnN0cltq XSwgaSkNCiAgICAgICAgZmkNCiAgICAgIGVuZGZvcg0KICAgICAgZm9yIGog PSB2cG9seSAoaSk6DQogICAgICAgICsgbGFtYmRhcG9seSAodmxpc3RbaV1w b2x5W2pdLCBwbGlzdFt2bGlzdFtpXXBvbHlbal1dY250LA0KICAgICAgICAg ICAgICAgICAgICAgIHZsaXN0W2ldcG9seVtqXWlkeCkNCiAgICAgIGVuZGZv cjsNCiAgICBmaQ0KICBlbmRmb3INCiAgaWYgdnRyYWNpbmc6IHZkdW1wOyBm aQ0KZW5kZGVmOw0KdmFyZGVmIGxhbWJkYSAoZXhwciBpLCBqKSA9DQogIChp ZiBrbm93biAoeHBhcnQodmxpc3RbaV1sb2MgLSB2bGlzdFtqXWxvYykpOg0K ICAgICBsYW1iZGF4W2ldW2pdDQogICBlbHNlOg0KICAgICAwDQogICBmaSwN CiAgIGlmIGtub3duICh5cGFydCh2bGlzdFtpXWxvYyAtIHZsaXN0W2pdbG9j KSk6DQogICAgIGxhbWJkYXlbaV1bal0NCiAgIGVsc2U6DQogICAgIDANCiAg IGZpKQ0KZW5kZGVmOw0KdmFyZGVmIGxhbWJkYXBvbHkgKGV4cHIgcCwgbiwg aSkgPQ0KICBvcmlnaW4NCiAgaWYgaSA9IDE6DQogICAgKyBsYW1iZGFwW3Bd WzJdIHJvdGF0ZWQgKC0zNjAvbikNCiAgZWxzZWlmIGkgPSAyOg0KICAgIC0g bGFtYmRhcFtwXVsxXQ0KICBmaQ0KICBpZiBpID0gbiAtIDE6DQogICAgLSBs YW1iZGFwW3BdW25dIHJvdGF0ZWQgKC0zNjAvbikNCiAgZWxzZWlmIGkgPSBu Og0KICAgICsgbGFtYmRhcFtwXVtuLTFdDQogIGZpDQogIGlmIChpID4gMSkg YW5kIChpIDwgbik6DQogICAgKyBsYW1iZGFwW3BdW2ktMV0gKyBsYW1iZGFw W3BdW2krMV0gcm90YXRlZCAoLTM2MC9uKQ0KICAgIC0gbGFtYmRhcFtwXVtp XSAtIGxhbWJkYXBbcF1baV0gcm90YXRlZCAoLTM2MC9uKQ0KICBmaQ0KZW5k ZGVmOw0KdmFyZGVmIGlkcmF3IChleHByIGxpbmVzdHksIHApID0NCiAgc2F2 ZSBub3B0LCBzdHksIGxibCwgd2QsIHJ1YjsNCiAgbnVtZXJpYyBub3B0LCBs YmwuZGlzdCwgd2QsIHJ1YjsNCiAgc2F2ZSAgZm9yZSwgYmFjazsNCiAgY29s b3IgZm9yZSwgYmFjazsNCiAgc3RyaW5nIHN0eSwgbGJsLCBsYmwuc2lkZTsN CiAgZ2V0b3B0IChvcHQsIGxpbmVzdHkpOw0KICBzdHkgOj0gb3B0W29wdC5m aXJzdF07DQogIGlmIGtub3duIG9wdFtvcHQuZmlyc3RdYXJnOg0KICAgIG1l c3NhZ2UgImZleW5tZjogbGluZSBzdHlsZXMgZG9uJ3QgdGFrZSBhcmd1bWVu dHMuICAiDQogICAgICAgICAgICAgJiAiQXJndW1lbnQgYCIgJiBvcHRbb3B0 LmZpcnN0XWFyZyAmICInIGlnbm9yZWQuIjsNCiAgZmkNCiAgb3B0LmZpcnN0 IDo9IG9wdC5maXJzdCArIDE7DQogIGxibCA6PSAiIjsNCiAgbGJsLnNpZGUg Oj0gIiI7DQogIGxibC5kaXN0IDo9IDN0aGljazsNCiAgZm9yIG5vcHQgPSBv cHQuZmlyc3QgdXB0byBvcHQubGFzdDoNCiAgICBpZiBtYXRjaF9vcHRpb24g KG9wdFtub3B0XSwgImxhYmVsIik6DQogICAgICBnZXRfYXJndW1lbnQgKG9w dFtub3B0XSwgb3B0W25vcHRdYXJnLCBsYmwpOw0KICAgIGVsc2VpZiBtYXRj aF9vcHRpb24gKG9wdFtub3B0XSwgImxhYmVsLnNpZGUiKToNCiAgICAgIGdl dF9hcmd1bWVudCAob3B0W25vcHRdLCBvcHRbbm9wdF1hcmcsIGxibC5zaWRl KTsNCiAgICBlbHNlaWYgbWF0Y2hfb3B0aW9uIChvcHRbbm9wdF0sICJsYWJl bC5kaXN0Iik6DQogICAgICBnZXRfYXJndW1lbnQgKG9wdFtub3B0XSwgc2Nh bnRva2VucyAob3B0W25vcHRdYXJnKSwgbGJsLmRpc3QpOw0KICAgIGVsc2Vp ZiBtYXRjaF9vcHRpb24gKG9wdFtub3B0XSwgIndpZHRoIik6DQogICAgICBn ZXRfYXJndW1lbnQgKG9wdFtub3B0XSwgc2NhbnRva2VucyAob3B0W25vcHRd YXJnKSwgd2QpOw0KICAgIGVsc2VpZiBtYXRjaF9vcHRpb24gKG9wdFtub3B0 XSwgImZvcmVncm91bmQiKToNCiAgICAgIGdldF9hcmd1bWVudCAob3B0W25v cHRdLCBzY2FudG9rZW5zIChvcHRbbm9wdF1hcmcpLCBmb3JlKTsNCiAgICBl bHNlaWYgbWF0Y2hfb3B0aW9uIChvcHRbbm9wdF0sICJiYWNrZ3JvdW5kIik6 DQogICAgICBnZXRfYXJndW1lbnQgKG9wdFtub3B0XSwgc2NhbnRva2VucyAo b3B0W25vcHRdYXJnKSwgYmFjayk7DQogICAgZWxzZWlmIG1hdGNoX29wdGlv biAob3B0W25vcHRdLCAicnVib3V0Iik6DQogICAgICBpZiBrbm93biBvcHRb bm9wdF1hcmc6DQogICAgICAgICBydWIgOj0gc2NhbnRva2VucyAob3B0W25v cHRdYXJnKTsNCiAgICAgIGVsc2U6DQogICAgICAgICBydWIgOj0gMjsNCiAg ICAgIGZpDQogICAgZWxzZToNCiAgICAgIGlnbm9yZV9vcHRpb24gKG9wdFtu b3B0XSwgb3B0W25vcHRdYXJnKTsNCiAgICBmaQ0KICBlbmRmb3INCiAgaGFu ZGxlX2xpbmVfc3R5bGUgKHN0eSwgc3R5KTsNCiAgYmVnaW5ncm91cA0KICAg IGlmIGtub3duIGZvcmU6DQogICAgICBzYXZlIGZvcmVncm91bmQ7DQogICAg ICBjb2xvciBmb3JlZ3JvdW5kOw0KICAgICAgZm9yZWdyb3VuZCA9IGZvcmU7 DQogICAgZmkNCiAgICBpZiBrbm93biBiYWNrOg0KICAgICAgc2F2ZSBiYWNr Z3JvdW5kOw0KICAgICAgY29sb3IgYmFja2dyb3VuZDsNCiAgICAgIGZvcmVn cm91bmQgPSBiYWNrOw0KICAgIGZpDQogICAgdmRyYXdfYXJjX3J1Ym91dCAo cnViLCBzdHksIHdkLCBwLCBsYmwpOw0KICBlbmRncm91cDsNCmVuZGRlZjsN CnZhcmRlZiBpdmVydGV4IChleHByIHZ0eHN0eSwgcG9zKSA9DQogIHNhdmUg bm9wdCwgdjsNCiAgbnVtZXJpYyBub3B0LCB2LmxibC5hbmcsIHYubGJsLmRp c3QsDQogICAgdi5kZWNvci5zaXplLCB2LmRlY29yLmFuZzsNCiAgcGFpciB2 LmxvYzsNCiAgc3RyaW5nIHYubGJsLCB2LmRlY29yLnN0eTsNCiAgcGF0aCB2 LmRlY29yLnNoYXBlOw0KICB2LmxvYyA6PSBwb3M7DQogIHYubGJsIDo9ICIi Ow0KICB2LmxibC5hbmcgOj0gd2hhdGV2ZXI7DQogIHYubGJsLmRpc3QgOj0g M3RoaWNrOw0KICB2LmRlY29yLnNpemUgOj0gZGVjb3Jfc2l6ZTsNCiAgZ2V0 b3B0IChvcHQsIHZ0eHN0eSk7DQogIGZvciBub3B0ID0gb3B0LmZpcnN0IHVw dG8gb3B0Lmxhc3Q6DQogICAgaGFuZGxlX3ZlcnRleF9vcHRpb24gKHYsIG9w dFtub3B0XSwgb3B0W25vcHRdYXJnKTsNCiAgZW5kZm9yDQogIHZkcmF3X2xh YmVsICh2LmxvYywgdi5sYmwpOw0KICB2ZHJhd192ZXJ0ZXggdjsNCmVuZGRl ZjsNCnZhcmRlZiB2ZHJhdyA9DQogIGlmIG5vdCBmZXlubWZ3aXphcmQ6DQog ICAgdmNoZWNrX3R5cG9zOw0KICBmaQ0KICBmb3IgaSA9IHZlcnRpY2VzOg0K ICAgIGlmIG5vdCBrbm93biB2bGlzdFtpXWxvYzoNCiAgICAgIGVycmhlbHAg IllvdXIgZ3JhcGggc3BlY2lmaWNhdGlvbiB3YXMgbm90IGNvbXBsZXRlIChw cm9iYWJseSBhICINCiAgICAgICAgICAgICYgImxvbmUgdmVydGV4KS4gICAg ICAgICAgICBDaGVjayBsb2dpYyBhbmQgcmVwcm9jZXNzISI7DQogICAgICBl cnJtZXNzYWdlICJmZXlubWY6IHZlcnRleCBgIiAmIHZsaXN0W2ldbmFtZSAm ICInIG5vdCBkZXRlcm1pbmVkLCAiDQogICAgICAgICAgICAgICAmICJyZXBs YWNlZCBieSBgKDAsMCknLiI7DQogICAgICB2bGlzdFtpXWxvYyA6PSBvcmln aW47DQogICAgZmkNCiAgICBpZiB1bmtub3duIHZsaXN0W2ldZGVjb3Iuc2l6 ZToNCiAgICAgIHZsaXN0W2ldZGVjb3Iuc2l6ZSA9IGRlY29yX3NpemU7DQog ICAgZmkNCiAgZW5kZm9yDQogIGZvciBpID0gdmVydGljZXM6DQogICAgZm9y IGogPSB2YXJjcyAoaSk6DQogICAgICBpZiBrbm93biB2bGlzdFtpXWFyY1tq XXN0eToNCiAgICAgICAgaWYgdmxpc3RbaV1hcmNbal1zdHkgPD4gIiI6DQog ICAgICAgICAgaWYgdW5rbm93biB2bGlzdFtpXWFyY1tqXXJ1YjoNCiAgICAg ICAgICAgIGJlZ2luZ3JvdXANCiAgICAgICAgICAgICAgaWYga25vd24gdmxp c3RbaV1hcmNbal1mb3JlOg0KICAgICAgICAgICAgICAgIHNhdmUgZm9yZWdy b3VuZDsgY29sb3IgZm9yZWdyb3VuZDsNCiAgICAgICAgICAgICAgICBmb3Jl Z3JvdW5kID0gdmxpc3RbaV1hcmNbal1mb3JlOw0KICAgICAgICAgICAgICBm aQ0KICAgICAgICAgICAgICBpZiBrbm93biB2bGlzdFtpXWFyY1tqXWJhY2s6 DQogICAgICAgICAgICAgICAgc2F2ZSBiYWNrZ3JvdW5kOyBjb2xvciBiYWNr Z3JvdW5kOw0KICAgICAgICAgICAgICAgIGJhY2tncm91bmQgPSB2bGlzdFtp XWFyY1tqXWJhY2s7DQogICAgICAgICAgICAgIGZpDQogICAgICAgICAgICAg IHZkcmF3X2FyYyAodmxpc3RbaV1hcmNbal1zdHksIHZsaXN0W2ldYXJjW2pd d2QsDQogICAgICAgICAgICAgICAgICAgICAgICAgdmJ1aWxkX2N1dF9hcmMg KGksIGopLCB2bGlzdFtpXWFyY1tqXWxibCk7DQogICAgICAgICAgICAgIHZs aXN0W2ldYXJjW2pdc3R5IDo9ICIiOw0KICAgICAgICAgICAgZW5kZ3JvdXA7 DQogICAgICAgICAgZmkNCiAgICAgICAgZmkNCiAgICAgIGZpDQogICAgZW5k Zm9yOw0KICBlbmRmb3INCiAgZm9yIGkgPSBwb2x5Z29uczoNCiAgICB2ZHJh d19sYWJlbCAocGNlbnRlciBwbGlzdFtpXSwgcGxpc3RbaV1sYmwpOw0KICAg IHZkcmF3X3BvbHlnb24gcGxpc3RbaV07DQogIGVuZGZvcg0KICBmb3IgaSA9 IHZlcnRpY2VzOg0KICAgIHZkcmF3X2xhYmVsICh2bGlzdFtpXWxvYywgdmxp c3RbaV1sYmwpOw0KICAgIHZkcmF3X3ZlcnRleCB2bGlzdFtpXTsNCiAgZW5k Zm9yDQogIGZvciBpID0gdmVydGljZXM6DQogICAgZm9yIGogPSB2YXJjcyAo aSk6DQogICAgICBpZiBrbm93biB2bGlzdFtpXWFyY1tqXXN0eToNCiAgICAg ICAgaWYgdmxpc3RbaV1hcmNbal1zdHkgPD4gIiI6DQogICAgICAgICAgaWYg a25vd24gdmxpc3RbaV1hcmNbal1ydWI6DQogICAgICAgICAgICBiZWdpbmdy b3VwDQogICAgICAgICAgICAgIGlmIGtub3duIHZsaXN0W2ldYXJjW2pdZm9y ZToNCiAgICAgICAgICAgICAgICBzYXZlIGZvcmVncm91bmQ7IGNvbG9yIGZv cmVncm91bmQ7DQogICAgICAgICAgICAgICAgZm9yZWdyb3VuZCA9IHZsaXN0 W2ldYXJjW2pdZm9yZTsNCiAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAg ICAgaWYga25vd24gdmxpc3RbaV1hcmNbal1iYWNrOg0KICAgICAgICAgICAg ICAgIHNhdmUgYmFja2dyb3VuZDsgY29sb3IgYmFja2dyb3VuZDsNCiAgICAg ICAgICAgICAgICBiYWNrZ3JvdW5kID0gdmxpc3RbaV1hcmNbal1iYWNrOw0K ICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAgICB2ZHJhd19hcmNfcnVi b3V0ICh2bGlzdFtpXWFyY1tqXXJ1YiwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdmxpc3RbaV1hcmNbal1zdHksDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZsaXN0W2ldYXJjW2pdd2QsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZidWlsZF9jdXRfYXJjIChpLCBq KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmxpc3RbaV1h cmNbal1sYmwpOw0KICAgICAgICAgICAgICB2bGlzdFtpXWFyY1tqXXN0eSA6 PSAiIjsNCiAgICAgICAgICAgIGVuZGdyb3VwOw0KICAgICAgICAgIGZpDQog ICAgICAgIGZpDQogICAgICBmaQ0KICAgIGVuZGZvcjsNCiAgZW5kZm9yDQpl bmRkZWY7DQp2YXJkZWYgdmNoZWNrX3R5cG9zID0NCiAgc2F2ZSBqLCBlcnI7 DQogIGJvb2xlYW4gd3JuOw0KICB3cm4gOj0gZmFsc2U7DQogIGZvciBpID0g dmVydGljZXM6DQogICAgc2F2ZSBjb25uZWN0aW9uczsNCiAgICBjb25uZWN0 aW9ucyA9IHZsaXN0W2ldYXJjLmxhc3QgLSB2bGlzdFtpXWFyYy5maXJzdCAr IDE7DQogICAgaWYgY29ubmVjdGlvbnMgPCAxOg0KICAgICAgaWYgdW5rbm93 biB2bGlzdFtpXWxvYzoNCiAgICAgICAgbWVzc2FnZSAiZmV5bm1mOiB3YXJu aW5nOiBkaXNjb25uZWN0ZWQgYW5kIHVuc3BlY2lmaWVkIHZlcnRleCBgIg0K ICAgICAgICAgICAgICAmIHN1YnN0cmluZyAoMixpbmZpbml0eSkgb2Ygdmxp c3RbaV1uYW1lDQogICAgICAgICAgICAgICYgIicuIjsNCiAgICAgICAgd3Ju IDo9IHRydWU7DQogICAgICBmaQ0KICAgIGVsc2VpZiBjb25uZWN0aW9ucyA9 IDE6DQogICAgICBqIDo9IHZsaXN0W2ldYXJjW3ZsaXN0W2ldYXJjLmxhc3Rd Ow0KICAgICAgaWYgaiA8IGk6DQogICAgICAgIGlmIHZsaXN0W2ldbG9jID0g dmxpc3Rbal1sb2M6DQogICAgICAgICAgbWVzc2FnZSAiZmV5bm1mOiB3YXJu aW5nOiBkYW5nbGluZyB2ZXJ0ZXggYCINCiAgICAgICAgICAgICAgICAmIHN1 YnN0cmluZyAoMixpbmZpbml0eSkgb2Ygdmxpc3RbaV1uYW1lDQogICAgICAg ICAgICAgICAgJiAiJyBjb2xsaWRpbmcgd2l0aCBgIg0KICAgICAgICAgICAg ICAgICYgc3Vic3RyaW5nICgyLGluZmluaXR5KSBvZiB2bGlzdFtqXW5hbWUN CiAgICAgICAgICAgICAgICAmICInLiI7DQogICAgICAgIHdybiA6PSB0cnVl Ow0KICAgICAgICBmaQ0KICAgICAgZmkNCiAgICBmaQ0KICBlbmRmb3INCiAg aWYgd3JuOg0KICAgIG1lc3NhZ2UgImZleW5tZjogSGF2ZSB5b3Ugc2VlbiB0 aGUgd2FybmluZyBtZXNzYWdlcyBhYm92ZT8iOw0KICAgIG1lc3NhZ2UgIiAg ICAgICAgVGhleSBhcmUgdXN1YWxseSBjYXVzZWQgYnkgbWlzc3BlbGxpbmcg YSB2ZXJ0ZXgnIjsNCiAgICBtZXNzYWdlICIgICAgICAgIG5hbWUgYW5kIGNh biB0cmlnZ2VyIGVycm9ycyBmdXJ0aGVyIGJlbG93ISI7DQogICAgbWVzc2Fn ZSAiICAgICAgICBGaXggdGhlIHR5cG9zIGFuZCBydW4gTGFUZVggYW5kIE1l dGFmb250IGFnYWluLiI7DQogIGZpDQplbmRkZWY7DQp2YXJkZWYgdmJ1aWxk X2FyYyAoZXhwciBsc3IsIGZyb20sIHRvKSA9DQogIGlmIHVua25vd24gbHNy Og0KICAgIGZyb20gLS0gdG8NCiAgZWxzZToNCiAgICBpZiBsc3IgPSAwOg0K ICAgICAgZnJvbSAtLSB0bw0KICAgIGVsc2U6DQogICAgICBmcm9tDQogICAg ICAgIC4uICgxLWxzcikvMiAqKHRvIHJvdGF0ZWRhYm91dCAoLjVbZnJvbSx0 b10sIDkwKSkNCiAgICAgICAgICAgKyAoMStsc3IpLzIgKiAodG8gcm90YXRl ZGFib3V0ICguNVtmcm9tLHRvXSwgLTkwKSkNCiAgICAgICAgLi4gdG8NCiAg ICBmaQ0KICBmaQ0KZW5kZGVmOw0KdmFyZGVmIHZidWlsZF9jdXRfYXJjIChl eHByIG9yaWdpbiwgaW5kZXgpID0NCiAgY3V0X2RlY29ycyAodmxpc3Rbb3Jp Z2luXSwNCiAgICAgICAgICAgICAgaWYgdmxpc3Rbb3JpZ2luXWFyY1tpbmRl eF0gPD4gb3JpZ2luOg0KICAgICAgICAgICAgICAgIHZidWlsZF9hcmMgKHZs aXN0W29yaWdpbl1hcmNbaW5kZXhdbHNyLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZsaXN0W29yaWdpbl1sb2MsDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgdmxpc3Rbdmxpc3Rbb3JpZ2luXWFyY1tpbmRleF1dbG9j KQ0KICAgICAgICAgICAgICBlbHNlOg0KICAgICAgICAgICAgICAgIHZidWls ZF90YWRwb2xlIChvcmlnaW4sIGluZGV4KQ0KICAgICAgICAgICAgICBmaSwN CiAgICAgICAgICAgICAgdmxpc3Rbdmxpc3Rbb3JpZ2luXWFyY1tpbmRleF1d KQ0KZW5kZGVmOw0KdmFyZGVmIHZidWlsZF90YWRwb2xlIChleHByIG9yaWdp biwgaW5kZXgpID0NCiAgc2F2ZSBqLCBuLCBubiwgbm5uLCBhaWR4LCBhYW5n LCBhZ2FwLCBiZ2FwLCBuZ2FwLCBkaXN0c3VtOw0KICBuIDo9IDA7DQogIGRp c3RzdW0gOj0gMDsNCiAgZm9yIGogPSB2YXJjcyAob3JpZ2luKToNCiAgICBp ZiB2bGlzdFtvcmlnaW5dYXJjW2pdIDw+IG9yaWdpbjoNCiAgICAgIGFuZyA6 PSBhbmdsZSBkaXJlY3Rpb24gMCBvZg0KICAgICAgICB2YnVpbGRfYXJjICh2 bGlzdFtvcmlnaW5dYXJjW2pdbHNyLA0KICAgICAgICAgICAgICAgICAgICB2 bGlzdFtvcmlnaW5dbG9jLA0KICAgICAgICAgICAgICAgICAgICB2bGlzdFt2 bGlzdFtvcmlnaW5dYXJjW2pdXWxvYyk7DQogICAgICBuIDo9IG4gKyAxOw0K ICAgICAgZGlzdHN1bSA6PSBkaXN0c3VtDQogICAgICAgICsgYWJzICh2bGlz dFt2bGlzdFtvcmlnaW5dYXJjW2pdXWxvYyAtIHZsaXN0W29yaWdpbl1sb2Mp Ow0KICAgICAgYWFuZ1tuXSA6PSAzNjA7DQogICAgICBmb3Igbm4gPSAxIHVw dG8gbjoNCiAgICAgICAgaWYgYW5nIDwgYWFuZ1tubl06DQogICAgICAgICAg Zm9yIG5ubiA9IG4gLSAxIGRvd250byBubjoNCiAgICAgICAgICAgIGFhbmdb bm5uKzFdIDo9IGFhbmdbbm5uXTsNCiAgICAgICAgICAgIGFpZHhbbm5uKzFd IDo9IGFpZHhbbm5uXTsNCiAgICAgICAgICBlbmRmb3INCiAgICAgICAgICBh YW5nW25uXSA6PSBhbmc7DQogICAgICAgICAgYWlkeFtubl0gOj0gbjsNCiAg ICAgICAgZmkNCiAgICAgICAgZXhpdGlmIGtub3duIGFpZHhbbl07DQogICAg ICBlbmRmb3INCiAgICBmaQ0KICBlbmRmb3INCiAgYWlkeFtuKzFdIDo9IGFp ZHhbMV07DQogIGFhbmdbbisxXSA6PSBhYW5nWzFdICsgMzYwOw0KICBmb3Ig bm4gPSAxIHVwdG8gbjoNCiAgICBhZ2FwW25uXSA9IGFhbmdbbm4rMV0gLSBh YW5nW25uXTsNCiAgZW5kZm9yDQogIGlmIGtub3duIHZsaXN0W29yaWdpbl1h cmNbaW5kZXhdbHNyOg0KICAgIG5nYXAgOj0gbjsNCiAgICBmb3Igbm4gPSAx IHVwdG8gbjoNCiAgICAgIGlmIChhYW5nW25uXSA8IHZsaXN0W29yaWdpbl1h cmNbaW5kZXhdbHNyKQ0KICAgICAgICAgYW5kICh2bGlzdFtvcmlnaW5dYXJj W2luZGV4XWxzciA8IGFhbmdbbm4rMV0pOg0KICAgICAgICBuZ2FwIDo9IG5u Ow0KICAgICAgZmkNCiAgICBlbmRmb3INCiAgZWxzZToNCiAgICBiZ2FwIDo9 IDA7DQogICAgZm9yIG5uID0gMSB1cHRvIG46DQogICAgICBpZiBhZ2FwW25u XSA+IGJnYXA6DQogICAgICAgIGJnYXAgOj0gIGFnYXBbbm5dOw0KICAgICAg ICBuZ2FwIDo9IG5uOw0KICAgICAgZmkNCiAgICBlbmRmb3INCiAgZmkNCiAg aWYgdnRyYWNpbmc6IGFkdW1wIChuICsgMSk7IGZpDQogIHZsaXN0W29yaWdp bl1sb2N7ZGlyKGFhbmdbbmdhcF0rYWdhcFtuZ2FwXS80KX0NCiAgICAuLi4g dmxpc3Rbb3JpZ2luXWxvYyArIDIvMyAqIGRpc3RzdW0vbg0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8gdmxpc3Rbb3JpZ2luXWFyY1tpbmRleF10 bnMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGRpcihhYW5nW25n YXBdK2FnYXBbbmdhcF0vMikNCiAgICAuLi4gey1kaXIoYWFuZ1tuZ2FwKzFd LWFnYXBbbmdhcF0vNCl9dmxpc3Rbb3JpZ2luXWxvYw0KZW5kZGVmOw0KdmFy ZGVmIGFkdW1wIGV4cHIgbiA9DQogIHNhdmUgaTsNCiAgZm9yIGkgPSAxIHVw dG8gbjoNCiAgICBtZXNzYWdlICJhaWR4WyIgJiBkZWNpbWFsXyAoaSkgJiAi XT0iICYgZGVjaW1hbF8gKGFpZHhbaV0pDQogICAgICAgICAgICAmICIsIGFh bmdbIiAmIGRlY2ltYWxfIChpKSAmICJdPSIgJiBkZWNpbWFsXyAoYWFuZ1tp XSkNCiAgICAgICAgICAgICYgIiwgYWdhcFsiICYgZGVjaW1hbF8gKGkpICYg Il09IiAmIGRlY2ltYWxfIChhZ2FwW2ldKTsNCiAgZW5kZm9yDQplbmRkZWY7 DQp2YXJkZWYgdmRyYXdfYXJjIChleHByIHN0eSwgd2QsIGFyYykgKHN1ZmZp eCBsYmwpID0NCiAgaWYga25vd24gd2Q6DQogICAgc2F2ZSBjdXJyZW50cGVu Ow0KICAgIHBlbiBjdXJyZW50cGVuOw0KICAgIHBpY2t1cCBwZW5jaXJjbGUg c2NhbGVkIHdkOw0KICBmaQ0KICBzY2FudG9rZW5zICgiZHJhd18iICYgc3R5 KSAoYXJjKTsNCiAgdmRyYXdfYXJjX2xhYmVsIChhcmMsIGxibCk7DQplbmRk ZWY7DQpsZXQgcGxhaW5fZHJhdyA9IGRyYXc7DQp2YXJkZWYgdmRyYXdfYXJj X3J1Ym91dCAoZXhwciBydWIsIHN0eSwgd2QsIGFyYykgKHN1ZmZpeCBsYmwp ID0NCiAgaWYga25vd24gcnViOg0KICAgIGJlZ2luZ3JvdXANCiAgICAgIGRl ZiBkcmF3IGV4cHIgcCA9DQogICAgICAgIHNhdmUgb2xkcGVuOyBwZW4gb2xk cGVuOw0KICAgICAgICBvbGRwZW4gOj0gY3VycmVudHBlbjsNCiAgICAgICAg c2F2ZSBjdXJyZW50cGVuOyBwZW4gY3VycmVudHBlbjsNCiAgICAgICAgcGlj a3VwIG9sZHBlbiBzY2FsZWQgcnViOw0KICAgICAgICBlcmFzZSBwbGFpbl9k cmF3IChzdWJwYXRoICguMSwuOSkqbGVuZ3RoKHApIG9mIHApDQogICAgICBl bmRkZWY7DQogICAgICB2ZHJhd19hcmMgKHN0eSwgd2QsIGFyYywgbGJsKTsN CiAgICAgIGxldCBkcmF3ID0gcGxhaW5fZHJhdzsNCiAgICBlbmRncm91cDsN CiAgZmkNCiAgdmRyYXdfYXJjIChzdHksIHdkLCBhcmMsIGxibCk7DQplbmRk ZWY7DQp2YXJkZWYgdmJ1aWxkX3BvbHlnb24gc3VmZml4IHAgPQ0KICBpZiBr bm93biBwLnB1bGw6DQogICAgc2F2ZSBjOyBwYWlyIGM7DQogICAgYyA6PSBw Y2VudGVyIHA7DQogICAgZm9yIGkgPSAxIHVwdG8gKHAuY250IC0gMSk6DQog ICAgICB2YnVpbGRfcG9seWdvbl9zZWN0aW9uIChwLCBpLCBpKzEpDQogICAg ZW5kZm9yDQogICAgdmJ1aWxkX3BvbHlnb25fc2VjdGlvbiAocCwgcC5jbnQs IDEpDQogIGVsc2U6DQogICAgZm9yIGkgPSAxIHVwdG8gcC5jbnQ6DQogICAg ICB2bGlzdFtwLnZ0eFtpXV1sb2MNCiAgICAgICAgaWYga25vd24gcC5jb25h OiBzY2FudG9rZW5zIChwLmNvbmEpIGVsc2U6IC0tIGZpDQogICAgZW5kZm9y DQogIGZpDQogIGN5Y2xlDQplbmRkZWY7DQpkZWYgdmJ1aWxkX3BvbHlnb25f c2VjdGlvbiAoc3VmZml4IHApIChleHByIGZyb20sIHRvKSA9DQogIHZsaXN0 W3AudnR4W2Zyb21dXWxvYw0KICAgIGlmIGtub3duIHAuY29uYTogc2NhbnRv a2VucyAocC5jb25hKSBlbHNlOiAtLSBmaQ0KICBwLnB1bGxbYywuNVt2bGlz dFtwLnZ0eFtmcm9tXV1sb2Msdmxpc3RbcC52dHhbdG9dXWxvY11dDQogICAg aWYga25vd24gcC5jb25iOiBzY2FudG9rZW5zIChwLmNvbmIpIGVsc2U6IC0t IGZpDQplbmRkZWY7DQp2YXJkZWYgcGNlbnRlciBzdWZmaXggcCA9DQogKG9y aWdpbiBmb3IgaSA9IDEgdXB0byBwLmNudDoNCiAgICAgICAgICAgKyB2bGlz dFtwLnZ0eFtpXV1sb2MNCiAgICAgICAgIGVuZGZvcikgLyBwLmNudA0KZW5k ZGVmOw0KdmFyZGVmIHZkcmF3X2FyY19sYWJlbCAoZXhwciBhcmMpIChzdWZm aXggbGJsKSA9DQogIGlmIGxibCA8PiAiIjoNCiAgICBzYXZlIF9hLCBfeiwg X3p6LCBfcjsNCiAgICBudW1lcmljIF9hOw0KICAgIHBhaXIgX3osIF96eiwg X3I7DQogICAgX3ogOj0gcG9pbnQgLjUgbGVuZ3RoIChhcmMpIG9mIGFyYzsN CiAgICBpZiBsYmwuZGlzdCA9IDA6DQogICAgICBMYVRlWF90ZXh0IChfeiwg d2hhdGV2ZXIsIGxibCk7DQogICAgZWxzZToNCiAgICAgIF9yIDo9IGRpcmVj dGlvbiAuNSBsZW5ndGggKGFyYykgb2YgYXJjIHJvdGF0ZWQgLSA5MDsNCiAg ICAgIGlmIGxibC5zaWRlID0gImxlZnQiOg0KICAgICAgICBfYSA6PSBhbmds ZSAoLV9yKTsNCiAgICAgIGVsc2VpZiBsYmwuc2lkZSA9ICJyaWdodCI6DQog ICAgICAgIF9hIDo9IGFuZ2xlIChfcik7DQogICAgICBlbHNlOg0KICAgICAg ICBfenogPSBfeiAtIC41W3BvaW50IDAgb2YgYXJjLCBwb2ludCBpbmZpbml0 eSBvZiBhcmNdOw0KICAgICAgICBpZiAoKF96eiBpZiBsZW5ndGggKF96eikg PiAgMDogLyBsZW5ndGggKF96eikgZmkpDQogICAgICAgICAgICBkb3Rwcm9k IF9yKSA+PSAwOg0KICAgICAgICAgIF9hIDo9IGFuZ2xlIChfcik7DQogICAg ICAgIGVsc2U6DQogICAgICAgICAgX2EgOj0gYW5nbGUgKC1fcik7DQogICAg ICAgIGZpDQogICAgICBmaQ0KICAgICAgTGFUZVhfdGV4dCAoX3ogKyBsYmwu ZGlzdCAqIGRpciBfYSwgX2EsIGxibCk7DQogICAgZmkNCiAgZmkNCmVuZGRl ZjsNCnZhcmRlZiB2ZHJhd19sYWJlbCAoZXhwciBsb2MpIChzdWZmaXggbGJs KSA9DQogIGlmIGxibCA8PiAiIjoNCiAgICBzYXZlIGE7DQogICAgbnVtZXJp YyBhOw0KICAgIGlmIGxibC5kaXN0ID0gMDoNCiAgICAgIExhVGVYX3RleHQg KGxvYywgd2hhdGV2ZXIsIGxibCk7DQogICAgZWxzZToNCiAgICAgIGlmIHVu a25vd24gbGJsLmFuZzoNCiAgICAgICAgaWYgbG9jID0gKC41dywuNWgpOg0K ICAgICAgICAgIGEgOj0gMDsNCiAgICAgICAgZWxzZToNCiAgICAgICAgICBh IDo9IGFuZ2xlIChsb2MgLSAoLjV3LC41aCkpOw0KICAgICAgICBmaQ0KICAg ICAgZWxzZToNCiAgICAgICAgYSA6PSBsYmwuYW5nOw0KICAgICAgZmkNCiAg ICAgIExhVGVYX3RleHQgKGxvYyArIGxibC5kaXN0ICogZGlyIGEsIGEsIGxi bCk7DQogICAgZmkNCiAgZmkNCmVuZGRlZjsNCnZhcmRlZiB2ZHJhd192ZXJ0 ZXggc3VmZml4IHYgPQ0KICBpZiBrbm93biB2LmRlY29yLnNoYXBlOg0KICAg IGlmIGtub3duIHYuZm9yZToNCiAgICAgIHNhdmUgZm9yZWdyb3VuZDsNCiAg ICAgIGNvbG9yIGZvcmVncm91bmQ7DQogICAgICBmb3JlZ3JvdW5kID0gdi5m b3JlOw0KICAgIGZpDQogICAgaWYga25vd24gdi5iYWNrOg0KICAgICAgc2F2 ZSBiYWNrZ3JvdW5kOw0KICAgICAgY29sb3IgYmFja2dyb3VuZDsNCiAgICAg IGJhY2tncm91bmQgPSB2LmJhY2s7DQogICAgZmkNCiAgICBpZiBrbm93biB2 LmRlY29yLnN0eToNCiAgICAgIGlmIHYuZGVjb3Iuc3R5ID0gImVtcHR5IjoN CiAgICAgICAgZW1wdHlkcmF3ICgNCiAgICAgIGVsc2VpZiB2LmRlY29yLnN0 eSA9ICJmdWxsIjoNCiAgICAgICAgY2ZpbGxkcmF3ICgNCiAgICAgIGVsc2Vp ZiBpc19hX251bWJlciB2LmRlY29yLnN0eToNCiAgICAgICAgZHJhd2hhbGZ0 b25lICgxIC0gc2NhbnRva2VucyB2LmRlY29yLnN0eSAvIDEwMCwNCiAgICAg IGVsc2U6DQogICAgICAgIGRyYXd0aWxlIChzY2FudG9rZW5zIHYuZGVjb3Iu c3R5LA0KICAgICAgZmkNCiAgICBlbHNlOg0KICAgICAgY2ZpbGxkcmF3ICgN CiAgICBmaQ0KICAgICAgICB2LmRlY29yLnNoYXBlDQogICAgICAgICAgaWYg a25vd24gdi5kZWNvci5hbmc6IHJvdGF0ZWQgdi5kZWNvci5hbmcgZmkNCiAg ICAgICAgICBzY2FsZWQgdi5kZWNvci5zaXplIHNoaWZ0ZWQgdi5sb2MpOw0K ICBmaQ0KZW5kZGVmOw0KdmFyZGVmIHBvbHlnb24gZXhwciBuID0NCiAgaWYg biA+IDI6DQogICAgZm9yIGkgPSAxIHVwdG8gbjoNCiAgICAgICguNXVwIHJv dGF0ZWQgKDM2MGkvbikpIC0tDQogICAgZW5kZm9yDQogICAgY3ljbGUNCiAg ZWxzZToNCiAgICBmdWxsY2lyY2xlDQogIGZpDQplbmRkZWY7DQp2YXJkZWYg cG9seWdyYW0gZXhwciBuID0NCiAgaWYgbiA+IDI6DQogICAgZm9yIGkgPSAx IHVwdG8gbjoNCiAgICAgICguNXVwIHJvdGF0ZWQgKDM2MGkvbikpIC0tDQog ICAgICAoLjJ1cCByb3RhdGVkICgzNjAoaSsuNSkvbikpIC0tDQogICAgZW5k Zm9yDQogICAgY3ljbGUNCiAgZWxzZToNCiAgICBmdWxsY2lyY2xlDQogIGZp DQplbmRkZWY7DQp2YXJkZWYgcG9seWNyb3NzIGV4cHIgbiA9DQogIHNhdmUg aTsNCiAgZm9yIGkgPSAxIHVwdG8gbjoNCiAgICBvcmlnaW4gLS0gLjUgZGly ICgzNjAoaS0uNSkvbikgLS0NCiAgZW5kZm9yDQogIGN5Y2xlDQplbmRkZWY7 DQp2YXJkZWYgdmRyYXdfcG9seWdvbiBzdWZmaXggcCA9DQogIGlmIGtub3du IHAuZm9yZToNCiAgICBzYXZlIGZvcmVncm91bmQ7DQogICAgY29sb3IgZm9y ZWdyb3VuZDsNCiAgICBmb3JlZ3JvdW5kID0gcC5mb3JlOw0KICBmaQ0KICBp ZiBrbm93biBwLmJhY2s6DQogICAgc2F2ZSBiYWNrZ3JvdW5kOw0KICAgIGNv bG9yIGJhY2tncm91bmQ7DQogICAgYmFja2dyb3VuZCA9IHAuYmFjazsNCiAg ZmkNCiAgaWYga25vd24gcC5zdHk6DQogICAgaWYgcC5zdHkgPSAicGhhbnRv bSI6DQogICAgZWxzZWlmIHAuc3R5ID0gImVtcHR5IjoNCiAgICAgIGVtcHR5 ZHJhdyAodmJ1aWxkX3BvbHlnb24gcCk7DQogICAgZWxzZWlmIHAuc3R5ID0g ImZ1bGwiOg0KICAgICAgY2ZpbGxkcmF3ICh2YnVpbGRfcG9seWdvbiBwKTsN CiAgICBlbHNlaWYgaXNfYV9udW1iZXIgcC5zdHk6DQogICAgICBkcmF3aGFs ZnRvbmUgKDEgLSBzY2FudG9rZW5zIHAuc3R5IC8gMTAwLCB2YnVpbGRfcG9s eWdvbiBwKTsNCiAgICBlbHNlOg0KICAgICAgZHJhd3RpbGUgKHNjYW50b2tl bnMgcC5zdHksIHZidWlsZF9wb2x5Z29uIHApOw0KICAgIGZpDQogIGVsc2U6 DQogICAgY2RyYXcgKHZidWlsZF9wb2x5Z29uIHApOw0KICBmaQ0KZW5kZGVm Ow0KdmFyZGVmIExhVGVYIGV4cHIgdGV4dCA9DQogIGlmIExhVGVYX2ZpbGUg PSAiIjoNCiAgICBMYVRlWF9maWxlIDo9IGpvYm5hbWUgJiAiLnQiICYgZGVj aW1hbCBjaGFyY29kZTsNCiAgICB3cml0ZSAoIiUgIiAmIExhVGVYX2ZpbGUg JiAiIC0tIGdlbmVyYXRlZCBmcm9tICIgJiBqb2JuYW1lICYgIi5tcCIpDQog ICAgICB0byBMYVRlWF9maWxlOw0KICBmaQ0KICB3cml0ZSAodGV4dCAmICIl IikgdG8gTGFUZVhfZmlsZQ0KZW5kZGVmOw0KdmFyZGVmIExhVGVYX3RleHQg KGV4cHIgeiwgYSwgdHh0KSA9DQogIExhVGVYICJcZm1mTCgiICYgKGRlY2lt YWwgKHhwYXJ0IHovTGFUZVhfdW5pdGxlbmd0aCkpICYgIiwiDQogICAgICAm IChkZWNpbWFsICh5cGFydCB6L0xhVGVYX3VuaXRsZW5ndGgpKSAmICIsIg0K ICAgICAgJiAodm9jdGFudCBhKSAmICIpeyIgJiB0eHQgJiAifSI7DQplbmRk ZWY7DQp2YXJkZWYgdm9jdGFudCBleHByIGEgPQ0KICBpZiBrbm93biBhOg0K ICAgIHZvY3RhbnRfbGlzdFtmbG9vciAoYS80NSArIC41KV0NCiAgZWxzZToN CiAgICAiYyINCiAgZmkNCmVuZGRlZjsNCnN0cmluZyB2b2N0YW50X2xpc3Rb XTsNCnZvY3RhbnRfbGlzdFstNF0gOj0gInIiOw0Kdm9jdGFudF9saXN0Wy0z XSA6PSAicnQiOw0Kdm9jdGFudF9saXN0Wy0yXSA6PSAidCI7DQp2b2N0YW50 X2xpc3RbLTFdIDo9ICJsdCI7DQp2b2N0YW50X2xpc3RbMF0gOj0gImwiOw0K dm9jdGFudF9saXN0WzFdIDo9ICJsYiI7DQp2b2N0YW50X2xpc3RbMl0gOj0g ImIiOw0Kdm9jdGFudF9saXN0WzNdIDo9ICJyYiI7DQp2b2N0YW50X2xpc3Rb NF0gOj0gInIiOw0KdmFyZGVmIHZkdW1wID0NCiAgbWVzc2FnZSAiPj4+Pj4g VmVydGljZXMgYW5kIGFyY3MgZm9yIGRpYWdyYW0gIyIgJiBkZWNpbWFsIGNo YXJjb2RlDQogICAgICAgICYgIiBvZiAiICYgam9ibmFtZSAmICIubWY6IjsN CiAgZm9yIGkgPSB2ZXJ0aWNlczoNCiAgICBtZXNzYWdlICI+ICIgJiB2bGlz dFtpXW5hbWUgJiAiPSIgJiBkZWNpbWFsX3BhaXIgKHZsaXN0W2ldbG9jKQ0K ICAgICAgICAgICYgIjogI2xpbmVzPSINCiAgICAgICAgICAmIGRlY2ltYWwg KHZsaXN0W2ldYXJjLmxhc3QgLSB2bGlzdFtpXWFyYy5maXJzdCArIDEpDQog ICAgICAgICAgaWYgdmxpc3RbaV1sYmwgPD4gIiI6DQogICAgICAgICAgICAm ICIsIGxibD0iICYgdmxpc3RbaV1sYmwNCiAgICAgICAgICAgICYgIiwgbC5h bmdsZT0iICYgZGVjaW1hbF8gKHZsaXN0W2ldbGJsLmFuZykNCiAgICAgICAg ICAgICYgIiwgbC5kaXN0PSIgJiBkZWNpbWFsXyAodmxpc3RbaV1sYmwuZGlz dCkNCiAgICAgICAgICBmaQ0KICAgICAgICAgICYgIi4iOw0KICBlbmRmb3IN CiAgZm9yIGkgPSB2ZXJ0aWNlczoNCiAgICBmb3IgaiA9IHZhcmNzIChpKToN CiAgICAgIGlmIGtub3duIHZsaXN0W2ldYXJjW2pdc3R5Og0KICAgICAgICBt ZXNzYWdlICI+ICIgJiB2bGlzdFtpXW5hbWUgJiAiKiIgJiB2bGlzdFt2bGlz dFtpXWFyY1tqXV1uYW1lDQogICAgICAgICAgICAgICAgJiAiOiAiICYgdmxp c3RbaV1hcmNbal1zdHkNCiAgICAgICAgICAgICAgICAmICIsIHRucz0iICYg ZGVjaW1hbF8gKHZsaXN0W2ldYXJjW2pddG5zKQ0KICAgICAgICAgICAgICAg ICYgIiwgbHNyPSIgJiBkZWNpbWFsXyAodmxpc3RbaV1hcmNbal1sc3IpDQog ICAgICAgICAgICAgICAgJiAiLCB3ZD0iICYgZGVjaW1hbF8gKHZsaXN0W2ld YXJjW2pdd2QpDQogICAgICAgICAgICAgICAgJiAiLCBydWI9IiAmIGRlY2lt YWxfICh2bGlzdFtpXWFyY1tqXXJ1YikNCiAgICAgICAgICAgICAgICBpZiB2 bGlzdFtpXWFyY1tqXWxibCA8PiAiIjoNCiAgICAgICAgICAgICAgICAgICYg IiwgbGJsPSIgJiB2bGlzdFtpXWFyY1tqXWxibA0KICAgICAgICAgICAgICAg ICAgJiAiLCBsLnNpZGU9IiAmIHZsaXN0W2ldYXJjW2pdbGJsLnNpZGUNCiAg ICAgICAgICAgICAgICAgICYgIiwgbC5kaXN0PSIgJiBkZWNpbWFsXyAodmxp c3RbaV1hcmNbal1sYmwuZGlzdCkNCiAgICAgICAgICAgICAgICBmaQ0KICAg ICAgICAgICAgICAgICYgIi4iOw0KICAgICAgZmkNCiAgICBlbmRmb3INCiAg ICBmb3IgaiA9IHZjb25zdHIgKGkpOg0KICAgICAgaWYgaSA8IHZsaXN0W2ld Y29uc3RyW2pdOg0KICAgICAgICBzYXZlIHo7DQogICAgICAgIHBhaXIgejsN CiAgICAgICAgeiA9IHZsaXN0W3ZsaXN0W2ldY29uc3RyW2pdXWxvYyAtIHZs aXN0W2ldbG9jOw0KICAgICAgICBtZXNzYWdlICI+ICIgJiB2bGlzdFtpXW5h bWUgJiAiJiINCiAgICAgICAgICAgICAgICAmIHZsaXN0W3ZsaXN0W2ldY29u c3RyW2pdXW5hbWUNCiAgICAgICAgICAgICAgICAmICI6ICIgJiBkZWNpbWFs X3BhaXIgKHopOw0KICAgICAgZmkNCiAgICBlbmRmb3I7DQogIGVuZGZvcg0K ZW5kZGVmOw0KdmFyZGVmIGRlY2ltYWxfICh0ZXh0IG4pID0NCiAgaWYga25v d24gbjogZGVjaW1hbCBuIGVsc2U6ICI/IiBmaQ0KZW5kZGVmOw0KdmFyZGVm IGRlY2ltYWxfcGFpciAodGV4dCB6KSA9DQogICIoIiAmIGRlY2ltYWxfICh4 cGFydCB6KSAmICIsIiAmIGRlY2ltYWxfICh5cGFydCB6KSAmICIpIg0KZW5k ZGVmOw0KZGVmIHNob3dfZGlhZ3JhbV8gZXhwciBmcmFtZSA9DQogIGlmIChz Y3JlZW5fY29scyA8IHcgKyAyIHhwYXJ0IGZyYW1lKSBvciAoc2NyZWVuX3Jv d3MgPCBoICsgMiB5cGFydCBmcmFtZSk6DQogICAgc2NyZWVuX2NvbHMgOj0g dyArIDIgeHBhcnQgZnJhbWU7DQogICAgc2NyZWVuX3Jvd3MgOj0gaCArIDIg eXBhcnQgZnJhbWU7DQogICAgb3BlbndpbmRvdyBjdXJyZW50d2luZG93DQog ICAgICBmcm9tIG9yaWdpbiB0byAoc2NyZWVuX3Jvd3MsIHNjcmVlbl9jb2xz KQ0KICAgICAgYXQgKC0geHBhcnQgZnJhbWUsIGggKyB5cGFydCBmcmFtZSk7 DQogIGZpDQogIHNob3dpdF87DQogIGlmIHNob3dzdG9wcGluZyA+IDA6DQog ICAgc3RvcCAiVGhpcyBpcyBkaWFncmFtICMiICYgZGVjaW1hbCBjaGFyY29k ZQ0KICAgICAgICYgIi4gIEhpdCByZXR1cm4gdG8gY29udGludWUuLi4iOw0K ICBmaQ0KZW5kZGVmOw0KZGVmIHNob3dfZGlhZ3JhbSA9DQogIGRlZiBzaG93 X2RpYWdyYW0gPQ0KICAgIGRpc3BsYXkgYmxhbmtwaWN0dXJlIGlud2luZG93 IGN1cnJlbnR3aW5kb3c7DQogICAgc2hvd19kaWFncmFtXw0KICBlbmRkZWY7 DQogIHNob3dfZGlhZ3JhbV8NCmVuZGRlZjsNCmRlZiBzaG93X2FsbF9kaWFn cmFtcyBleHByIGZyYW1lID0NCiAgZGVmIHNob3dpdCA9IHNob3dfZGlhZ3Jh bSBmcmFtZSBlbmRkZWY7DQogIGRpc3BsYXlpbmc6PTE7DQplbmRkZWY7DQpl bmRpbnB1dDsNClxlbmRpbnB1dA0KJSUNCiUlIEVuZCBvZiBmaWxlIGBmZXlu bXAubXAnLg0K --8323329-1719691949-1681337541=:79580 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki! maillist : ntg-context@ntg.nl / https://www.ntg.nl/mailman/listinfo/ntg-context webpage : https://www.pragma-ade.nl / http://context.aanhet.net archive : https://bitbucket.org/phg/context-mirror/commits/ wiki : https://contextgarden.net ___________________________________________________________________________________ --8323329-1719691949-1681337541=:79580--