From owner-freebsd-cvsweb@FreeBSD.ORG Tue Oct 20 06:52:17 2009 Return-Path: Delivered-To: freebsd-cvsweb@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0C5C4106566B for ; Tue, 20 Oct 2009 06:52:17 +0000 (UTC) (envelope-from nikunjbadjatya@gmail.com) Received: from mail-qy0-f192.google.com (mail-qy0-f192.google.com [209.85.221.192]) by mx1.freebsd.org (Postfix) with ESMTP id 4C1468FC12 for ; Tue, 20 Oct 2009 06:52:16 +0000 (UTC) Received: by qyk30 with SMTP id 30so4192826qyk.7 for ; Mon, 19 Oct 2009 23:52:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:from:date:message-id :subject:to:content-type; bh=Grm2DLx2JLUeQzYU6i+g9ltnLHu29JwgkaxIJL4t5uU=; b=BsFHW0q0hiDzgYXQ+qp+t/8ZAYw6XYCdDymJhkSrZ34pj8BqYcRTsLPnu+PGn5JTko hV0+SYBtvDPeUbDH+Wuer51q4/j9BWljMNFnayew/2U4RTAHZQuT+alsILshj+Z1g631 fml/kMwic/X3qJ1UM55uuT7lsju3BqRlKl334= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:from:date:message-id:subject:to:content-type; b=tMot7e8C6kDwoZjEf/+hvznNolDCW/LoGzGqZdz6qWoJdCq9xLnpXWMb+XCYExk3ii vY3AvrFzetlj2txqqgFJk3GuI/mxcIribxj6sCgAFLOfz3KY5k2NxLkbhNjjH4ZkYTR2 NynVcxyAVYdaE3xMhlr1D9+BuTwERuyDJzVhk= MIME-Version: 1.0 Received: by 10.229.1.200 with SMTP id 8mr897793qcg.64.1256020180196; Mon, 19 Oct 2009 23:29:40 -0700 (PDT) From: nikunj badjatya Date: Tue, 20 Oct 2009 11:59:20 +0530 Message-ID: To: freebsd-cvsweb@freebsd.org Content-Type: multipart/mixed; boundary=001485394218abdf37047657fc8a X-Mailman-Approved-At: Tue, 20 Oct 2009 11:27:45 +0000 X-Content-Filtered-By: Mailman/MimeDel 2.1.5 Subject: Regarding CVSWEB setup... kindly help..!! X-BeenThere: freebsd-cvsweb@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: CVS Web maintenance mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 20 Oct 2009 06:52:17 -0000 --001485394218abdf37047657fc8a Content-Type: text/plain; charset=ISO-8859-1 Hi, I am a Software engineer. I am using CVS as my version control system. I am using CentOS 5.3. CVS and apache (httpd) are installed. I want to setup a web interface for my CVS repositories. I searched alot on net, but unable to get the working interface. I have performed the following things on my system as part of setup: 1. Downloaded latest version of cvsweb - cvsweb-3.0.6 I have kept the file " cvsweb.conf " in /etc/httpd/conf.d/ directory i have kept the file " cvsweb.css " in /etc/httpd/ directory i have kept the file " cvsweb.cgi " in ~/cbin/cgi-bin/ directory 2. followed the steps mentioned in the INSTALL file. my local repository is in ~/repo I edited cvsweb.conf file (a) Path to the local repository (b) path to the cssurl i edited cvsweb.cgi file , mentioned about the path to cvsweb.conf file.( in the 'for' loop ) 3. I then tried in the browser as : http://localhost/cgi-bin/cvsweb.cgi But no response , error 404, the requested url was not found on this server. Please help..!! I have to meet the deadline for the work done. I have attached all 3 files, kindly check them. Thanks, Nikunj Badjatya BTech Trainee Software Engineer --001485394218abdf37047657fc8a Content-Type: application/octet-stream; name="cvsweb.conf" Content-Disposition: attachment; filename="cvsweb.conf" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g109rfol1 IyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0qLSBwZXJsIC0qLQojIENvbmZpZ3VyYXRpb24gb2YgY3Zzd2ViLmNnaSwgYSB3 ZWIgaW50ZXJmYWNlIHRvIENWUyByZXBvc2l0b3JpZXMuCiMKIyAoYykgMTk5OC0xOTk5IEguIFpl bGxlciAgICA8emVsbGVyQHRoaW5rLmRlPgojICAgICAxOTk5ICAgICAgSC4gTm9yZHN0cm9tIDxo bm9AaGVtLnBhc3NhZ2VuLnNlPgojICAgICAyMDAwLTIwMDIgQS4gTVVTSEEgICAgIDxrbnVARnJl ZUJTRC5vcmc+CiMgICAgIDIwMDItMjAwNSBWLiBTa3l0dO+/vSAgICA8c2NvcEBGcmVlQlNELm9y Zz4KIyAgICAgICAgICBiYXNlZCBvbiB3b3JrIGJ5IEJpbGwgRmVubmVyICA8ZmVubmVyQEZyZWVC U0Qub3JnPgojCiMgJEZyZWVCU0Q6IHByb2plY3RzL2N2c3dlYi9jdnN3ZWIuY29uZix2IDEuOTcg MjAwNS8wNi8xOSAwOToxMzo1MCBzY29wIEV4cCAkCiMgJElkOiBjdnN3ZWIuY29uZix2IDEuMjkg MjAwMS8wNy8yMyAwOToxNDo1MiBoemVsbGVyIEV4cCAkCiMgJElkYWVtb25zOiAvaG9tZS9jdnMv Y3Zzd2ViL2N2c3dlYi5jb25mLHYgMS4yNyAyMDAxLzA4LzAxIDA5OjQ4OjM5IGtudSBFeHAgJAoj CgojCiMgVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIGJvb2xlYW4gcGFyYW1ldGVycyBoZXJl IGRlZmF1bHQgdG8gb2ZmCiMgd2hlbiBubyB2YWx1ZSBmb3IgdGhlbSBoYXMgYmVlbiBleHBsaWNp dGx5IHNldC4KIwoKIyBTZXQgdGhlIHBhdGggZm9yIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CiMg ICBjdnMsIHJsb2csIHJjc2RpZmYKIyAgIGd6aXAgKGlmIHlvdSBlbmFibGUgJGFsbG93X2NvbXBy ZXNzKQojICAgKGcpdGFyLCB6aXAgKGlmIHlvdSBlbmFibGUgJGFsbG93X3RhcikKIyAgIGN2c2dy YXBoIChpZiB5b3UgZW5hYmxlICRhbGxvd19ncmFwaCkKIyAgIGVuc2NyaXB0IChpZiB5b3UgZW5h YmxlICRhbGxvd19lbnNjcmlwdCkKIwpAY29tbWFuZF9wYXRoID0gcXcoL2JpbiAvdXNyL2JpbiAv dXNyL2xvY2FsL2Jpbik7CgojIFNlYXJjaCB0aGUgYWJvdmUgZGlyZWN0b3JpZXMgZm9yIGVhY2gg Y29tbWFuZCAocHJlZmVyIGd0YXIgb3ZlciB0YXIpLgojCmZvciAocXcoY3ZzIHJsb2cgcmNzZGlm ZiBnemlwIGd0YXIgemlwIGN2c2dyYXBoIGVuc2NyaXB0KSkgewoJJENNRHskX30gPSBzZWFyY2hf cGF0aCgkXyk7Cn0KJENNRHt0YXJ9ICAgPSBkZWxldGUoJENNRHtndGFyfSkgaWYgJENNRHtndGFy fTsKJENNRHt0YXJ9IHx8PSBzZWFyY2hfcGF0aCgndGFyJyk7CgojIENWUyByb290cwojCiMgQ1ZT d2ViIGNhbiBoYW5kbGUgc2V2ZXJhbCBDVlMgcmVwb3NpdG9yaWVzIGF0IG9uY2UuICBFbnRlciBz aG9ydCAoaW50ZXJuYWwpCiMgc3ltYm9saWMgcmVwb3NpdG9yeSBuYW1lcywgdGhlaXIgbmFtZXMg aW4gdGhlIFVJIGFuZCB0aGUgYWN0dWFsIGxvY2F0aW9ucwojIGhlcmUuICBUaGUgcmVwb3NpdG9y aWVzIHdpbGwgYmUgbGlzdGVkIGluIHRoZSBvcmRlciB0aGV5J3JlIHNwZWNpZmllZCBoZXJlLgoj CiMgT2J2aW91c2x5LCBDVlN3ZWIgd2lsbCBuZWVkIHJlYWQgYWNjZXNzIHRvIHRoZXNlIHJlcG9z aXRvcnkgZGlycy4gIElmIHlvdQojIHJlY2VpdmUgYW4gZXJyb3IgdGhhdCBubyB2YWxpZCBDVlMg cm9vdHMgd2VyZSBmb3VuZCwgZG91YmxlLWNoZWNrIHRoZSBmaWxlCiMgcGVybWlzc2lvbnMgYW5k IGFueSBvdGhlciBhdHRyaWJ1dGVzIHlvdXIgc3lzdGVtIG1heSBoYXZlIGZvciB0aGUgcmVwb3Np dG9yeQojIGRpcmVjdG9yaWVzLCBzdWNoIGFzIFNFTGludXggZmlsZSBjb250ZXh0cy4KIwojIENW U3dlYiB3aWxsIGFsc28gbG9hZCBwZXItY3Zzcm9vdCBjb25maWd1cmF0aW9uIGZpbGVzIGlmIHRo ZXkgZXhpc3QuCiMgVGhlIHN5bWJvbGljX25hbWUgKHNlZSBiZWxvdykgb2YgdGhlIENWUyByb290 IHdpbGwgYmUgY29uY2F0ZW5hdGVkIGludG8gdGhlCiMgbmFtZSBvZiB0aGUgbWFpbiAodGhpcykg Y29uZmlndXJhdGlvbiBmaWxlIGFsb25nIHdpdGggYSBoeXBoZW4sIGFuZCB0aGF0CiMgZmlsZSB3 aWxsIGJlIGxvYWRlZCBmb3IgdGhhdCBwYXJ0aWN1bGFyIENWUyByb290LiAgRm9yIGV4YW1wbGVz LCBzZWUKIyBjdnN3ZWIuY29uZi0qIGluIHRoZSBDVlN3ZWIgZGlzdHJpYnV0aW9uLgojCiMgTm90 ZSB0aGF0IG9ubHkgbG9jYWwgcmVwb3NpdG9yaWVzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLiAg VGhpbmdzIGxpa2UKIyA6cHNlcnZlcjpzb21lb25lQHh5ei5jb206L2RhdGEvY3Zzcm9vdCB3b24n dCB3b3JrLgojCiMgJ3N5bWJvbGljX25hbWUnID0+IFsnTmFtZSB0byBkaXNwbGF5JywgICcvcGF0 aC90by9jdnNyb290J10KIwpAQ1ZTcmVwb3NpdG9yaWVzID0gKAogICAgICAgICdsb2NhbCcgICA9 PiBbJ0xvY2FsIFJlcG9zaXRvcnknLCAnL2hvbWUvbmlrdW5qL3JlcG8nXSwgICAgCiMvdmFyL2N2 cwojICAgICAgICdmcmVlYnNkJyA9PiBbJ0ZyZWVCU0QnLCAgICAgICAgICAnL3Zhci9uY3ZzJ10s CiMgICAgICAgJ29wZW5ic2QnID0+IFsnT3BlbkJTRCcsICAgICAgICAgICcvdmFyL25jdnMnXSwK IyAgICAgICAnbmV0YnNkJyAgPT4gWydOZXRCU0QnLCAgICAgICAgICAgJy92YXIvbmN2cyddLAoj ICAgICAgICdydWJ5JyAgICA9PiBbJ1J1YnknLCAgICAgICAgICAgICAnL3Zhci9hbm9uY3ZzL3J1 YnknXSwKKTsKCiMgVGhlIGRlZmF1bHQgQ1ZTIHJvb3QuICBOb3RlIHRoYXQgQENWU3JlcG9zaXRv cmllcyBpcyBsaXN0LCBub3QgYSBoYXNoLAojIHNvIHlvdSdsbCB3YW50IHRvIHVzZSAyICogMC1i YXNlZC1pbmRleC1udW1iZXIgaGVyZTsgb3Igc2V0IHRoaXMgZGlyZWN0bHkKIyB0byB0aGUgZGVm YXVsdCdzIHN5bWJvbGljIG5hbWUuIFVubGVzcyBzcGVjaWZpZWQsIHRoZSBmaXJzdCB2YWxpZCBv bmUgaW4KIyBAQ1ZTcmVwb3NpdG9yaWVzIGlzIHVzZWQgYXMgdGhlIGRlZmF1bHQuCiMKIyBGb3Ig ZXhhbXBsZToKIwojJGN2c3RyZWVkZWZhdWx0ID0gJENWU3JlcG9zaXRvcmllc1syICogMF07CiMk Y3ZzdHJlZWRlZmF1bHQgPSAnbG9jYWwnOwoKIyBNaXJyb3Igc2l0ZXMuICBUaGUga2V5cyB3aWxs IGJlIHVzZWQgYXMgbGluayB0ZXh0cywgYW5kIHRoZSB2YWx1ZXMgYXJlCiMgVVJMcyBwb2ludGlu ZyB0byB0aGUgY29ycmVzcG9uZGluZyBtaXJyb3JzLgojCiMlTUlSUk9SUyA9ICgKIyAgICAgJ090 aGVyIGxvY2F0aW9uJyAgPT4gJ2h0dHA6Ly8xOTIuMTY4LjAuMS9jZ2ktYmluL2N2c3dlYi5jZ2kv JywKIyAgICAgJ1lldCBhbm90aGVyIG9uZScgPT4gJ2h0dHA6Ly8xOTIuMTY4LjAuMi9jZ2ktYmlu L2N2c3dlYi5jZ2kvJywKIyk7CgojIEJ1ZyB0cmFja2luZyBzeXN0ZW0gbGlua2luZyBvcHRpb25z ICgiUFIiIG1lYW5zIFByb2JsZW0gUmVwb3J0LCBhcyBpbiBHTkFUUykKIyBUaGlzIHdpbGwgYmUg ZG9uZSBvbmx5IGZvciB2aWV3cyBmb3Igd2hpY2ggJGFsbG93XypfZXh0cmEgYmVsb3cgaXMgdHJ1 ZS4KIwojQHByY2F0ZWdvcmllcyA9IHF3KAojICAgIGFkdm9jYWN5CiMgICAgYWxwaGEKIyAgICBi aW4KIyAgICBjb25mCiMgICAgZG9jcwojICAgIGdudQojICAgIGkzODYKIyAgICBrZXJuCiMgICAg bWlzYwojICAgIHBlbmRpbmcKIyAgICBwb3J0cwojICAgIHNwYXJjCiMpOwojJHByY2dpID0gImh0 dHA6Ly93d3cuRnJlZUJTRC5vcmcvY2dpL3F1ZXJ5LXByLmNnaT9wcj0lcyI7CiMkcHJrZXl3b3Jk ID0gIlBSIjsKCiMgTWFudWFsIGdhdGV3YXkgbGlua2luZy4gIFRoaXMgd2lsbCBiZSBkb25lIG9u bHkgZm9yIHZpZXdzIGZvciB3aGljaAojICRhbGxvd18qX2V4dHJhIGJlbG93IGlzIHRydWUuCiMK JG1hbmNnaSA9CiAgICAiaHR0cDovL3d3dy5GcmVlQlNELm9yZy9jZ2kvbWFuLmNnaT9hcHJvcG9z PTAmc2VrdGlvbj0lcyZxdWVyeT0lcyZtYW5wYXRoPUZyZWVCU0QrNS4wLWN1cnJlbnQmZm9ybWF0 PWh0bWwiOwoKIyBEZWZhdWx0cyBmb3IgdXNlciBkZWZpbmFibGUgb3B0aW9ucy4KIwolREVGQVVM VFZBTFVFID0gKAoKICAgICMgc29ydGJ5OiBGaWxlIHNvcnQgb3JkZXIKICAgICMgICBmaWxlICAg U29ydCBieSBmaWxlbmFtZQogICAgIyAgIHJldiAgICBTb3J0IGJ5IHJldmlzaW9uIG51bWJlcgog ICAgIyAgIGRhdGUgICBTb3J0IGJ5IGNvbW1pdCBkYXRlCiAgICAjICAgYXV0aG9yIFNvcnQgYnkg YXV0aG9yCiAgICAjICAgbG9nICAgIFNvcnQgYnkgbG9nIG1lc3NhZ2UKICAgICJzb3J0YnkiID0+ ICJmaWxlIiwKCiAgICAjIGlnbm9yZWNhc2U6IElnbm9yZSBjYXNlIGluIHNvcnRzIChmaWxlbmFt ZXMsIGF1dGhvcnMsIGxvZyBtZXNzYWdlcykKICAgICMgICAwICAgICAgSG9ub3IgY2FzZQogICAg IyAgIDEgICAgICBJZ25vcmUgY2FzZQogICAgImlnbm9yZWNhc2UiID0+ICIwIiwKCiAgICAjIGhp ZGVhdHRpYzogSGlkZSBvciBzaG93IGZpbGVzIGluIEF0dGljCiAgICAjICAgMSAgICAgIEhpZGUg ZmlsZXMgaW4gQXR0aWMKICAgICMgICAwICAgICAgU2hvdyBmaWxlcyBpbiBBdHRpYwogICAgImhp ZGVhdHRpYyIgPT4gIjEiLAoKICAgICMgbG9nc29ydDogU29ydCBvcmRlciBmb3IgQ1ZTIGxvZ3MK ICAgICMgICBkYXRlICAgU29ydCByZXZpc2lvbnMgYnkgZGF0ZQogICAgIyAgIHJldiAgICBTb3J0 IHJldmlzaW9uIGJ5IHJldmlzaW9uIG51bWJlcgogICAgIyAgIGN2cyAgICBEb24ndCBzb3J0IHRo ZW0uIFNhbWUgb3JkZXIgYXMgQ1ZTL1JDUyBzaG93cyB0aGVtLgogICAgImxvZ3NvcnQiID0+ICJk YXRlIiwKCiAgICAjIGY6IERlZmF1bHQgZGlmZiBmb3JtYXQKICAgICMgICBoICAgICAgSHVtYW4g cmVhZGFibGUKICAgICMgICB1ICAgICAgVW5pZmllZCBkaWZmCiAgICAjICAgYyAgICAgIENvbnRl eHQgZGlmZgogICAgIyAgIHMgICAgICBTaWRlIGJ5IHNpZGUKICAgICMgICB1YyAgICAgVW5pZmll ZCBkaWZmLCBlbnNjcmlwdCBjb2xvcmVkIChmYWxscyBiYWNrIHRvICJ1IiB3L28gZW5zY3JpcHQp CiAgICAjICAgY2MgICAgIENvbnRleHQgZGlmZiwgZW5zY3JpcHQgY29sb3JlZCAoZmFsbHMgYmFj ayB0byAiYyIgdy9vIGVuc2NyaXB0KQogICAgIyAgIHNjICAgICBTaWRlIGJ5IHNpZGUsIGVuc2Ny aXB0IGNvbG9yZWQgKGZhbGxzIGJhY2sgdG8gInMiIHcvbyBlbnNjcmlwdCkKICAgICJmIiA9PiAi dSIsCgogICAgIyBoaWRlY3Zzcm9vdDogRG9uJ3Qgc2hvdyB0aGUgQ1ZTUk9PVCBkaXJlY3Rvcnku ICBOb3RlIHRoYXQgdGhpcyBpcwogICAgIyBqdXN0IHRoZSBkZWZhdWx0IGZvciBhIHVzZXIgc2V0 dGFibGUgb3B0aW9uIChsaWtlIG90aGVycyBpbiB0aGlzCiAgICAjICVERUZBVUxUVkFMVUUgaGFz aCk7IGl0IHdvbid0IHJlYWxseSBwcmV2ZW50IGFjY2VzcyB0byBDVlNST09ULgogICAgIyBTZWUg QEZvcmJpZGRlbkZpbGVzIGZvciB0aGF0LgogICAgIyAgIDEgICAgICBEbyBub3QgaW5jbHVkZSB0 aGUgdG9wLWxldmVsIENWU1JPT1QgZGlyZWN0b3J5IGluIGRpciBsaXN0aW5ncwogICAgIyAgIDAg ICAgICBUcmVhdCB0aGUgdG9wLWxldmVsIENWU1JPT1QgZGlyZWN0b3J5IGp1c3QgbGlrZSBhbGwg b3RoZXIgZGlycwogICAgImhpZGVjdnNyb290IiA9PiAiMCIsCgogICAgIyBoaWRlbm9ucmVhZGFi bGU6IERvbid0IHNob3cgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRoYXQgY2Fubm90IGJlIHJlYWQK ICAgICMgaW4gZGlyZWN0b3J5IGxpc3RpbmdzLgogICAgIyAgIDEgICAgICBIaWRlIG5vbi1yZWFk YWJsZSBlbnRyaWVzCiAgICAjICAgMCAgICAgIFNob3cgbm9uLXJlYWRhYmxlIGVudHJpZXMKICAg ICJoaWRlbm9ucmVhZGFibGUiID0+ICIxIiwKCiAgICAjIGxuOiBTaG93IGxpbmUgbnVtYmVycyBp biBIVE1MaXplZCB2aWV3cwogICAgIyAgIDEgICAgICBTaG93IGxpbmUgbnVtYmVycwogICAgIyAg IDAgICAgICBEb24ndCBzaG93IGxpbmUgbnVtYmVycwogICAgImxuIiA9PiAiMCIsCik7CgojCiMg TGF5b3V0IG9wdGlvbnMgKHNlZSBhbHNvIHRoZSBpbmNsdWRlZCBDU1MgZmlsZSkKIwoKIyBXYW5u YSBoYXZlIGEgbG9nbyBvbiB0aGUgcGFnZSA/CiMKIyRsb2dvID0gJzxwPjxpbWcgc3JjPSIvaWNv bnMvYXBhY2hlX3BiLmdpZiIgYWx0PSJQb3dlcmVkIGJ5IEFwYWNoZSIgLz48L3A+JzsKCiMgVGhl IHRpdGxlIG9mIHRoZSBQYWdlIG9uIHN0YXJ0dXAuICBUaGlzIHdpbGwgYmUgcHV0IGluc2lkZSA8 aDE+IGFuZCA8dGl0bGU+CiMgdGFncywgYW5kIEhUTUwgZXNjYXBlZC4KIwokZGVmYXVsdHRpdGxl ID0gIkNWUyBSZXBvc2l0b3J5IjsKCiMgVGhlIGFkZHJlc3MgaXMgc2hvd24gb24gdGhlIGZvb3Rl ci4gIFRoaXMgd2lsbCBiZSBwdXQgaW5zaWRlIGEgPGFkZHJlc3M+IHRhZy4KIwokYWRkcmVzcyA9 ICc8c3BhbiBzdHlsZT0iZm9udC1zaXplOiBzbWFsbGVyIj5GcmVlQlNELUNWU3dlYiAmbHQ7PGEg aHJlZj0ibWFpbHRvOmZyZWVic2QtY3Zzd2ViQEZyZWVCU0Qub3JnIj5mcmVlYnNkLWN2c3dlYkBG cmVlQlNELm9yZzwvYT4mZ3Q7PC9zcGFuPic7CgokbG9uZ19pbnRybyA9IDw8RU9UOwo8cD4KVGhp cyBpcyBhIFdXVyBpbnRlcmZhY2UgZm9yIENWUyByZXBvc2l0b3JpZXMuCllvdSBjYW4gYnJvd3Nl IHRoZSBmaWxlIGhpZXJhcmNoeSBieSBmb2xsb3dpbmcgZGlyZWN0b3J5IGxpbmtzICh3aGljaApo YXZlIHNsYXNoZXMgYWZ0ZXIgdGhlbSwgZS5nLiA8Y29kZT5zcmMvPC9jb2RlPikuCklmIHlvdSBm b2xsb3cgYSBsaW5rIHRvIGEgZmlsZSwgeW91IHdpbGwgc2VlIGl0cyByZXZpc2lvbiBoaXN0b3J5 LgpGb2xsb3dpbmcgYSBsaW5rIGxhYmVsZWQgd2l0aCBhIHJldmlzaW9uIG51bWJlciB3aWxsIGRp c3BsYXkgdGhhdApyZXZpc2lvbiBvZiB0aGUgZmlsZS4gIEluIHRoZSByZXZpc2lvbiBoaXN0b3J5 IHZpZXcsIHRoZXJlIGlzIGEgbGluawpuZWFyIGVhY2ggcmV2aXNpb24gdG8gZGlzcGxheSBkaWZm cyBiZXR3ZWVuIHRoYXQgcmV2aXNpb24gYW5kIHRoZQpwcmV2aW91cyBvbmUsIGFuZCBhIGZvcm0g YXQgdGhlIGJvdHRvbSBvZiB0aGUgcGFnZSB0aGF0IGFsbG93cyB5b3UgdG8KZGlzcGxheSBkaWZm cyBiZXR3ZWVuIGFyYml0cmFyeSByZXZpc2lvbnMuCjwvcD48cD4KVGhpcyBzY3JpcHQgaGFzIGJl ZW4gd3JpdHRlbiBieSBCaWxsIEZlbm5lciBhbmQgaW1wcm92ZWQgYnkgSGVubmVyIFplbGxlciwK SGVucmlrIE5vcmRzdHImb3VtbDttLCBhbmQgS2VuIENvYXIsIHRoZW4gQWtpbm9yaSBNVVNIQSBi cm91Z2h0IGl0CmJhY2sgdG8gRnJlZUJTRCBjb21tdW5pdHkgYW5kIG1hZGUgZnVydGhlciBpbXBy b3ZlbWVudHM7IGl0IGlzIGNvdmVyZWQKYnkgPGEKaHJlZj0iaHR0cDovL3d3dy5vcGVuc291cmNl Lm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5odG1sIj5UaGUgQlNEIExpY2Vuc2U8L2E+Lgo8L3A+ PHA+CklmIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSB0aGlzIENHSSBzY3JpcHQgb24geW91ciBvd24g d2ViIHNlcnZlciBhbmQKQ1ZTIHRyZWUsIGRvd25sb2FkIHRoZSBsYXRlc3QgdmVyc2lvbiBmcm9t ICZsdDs8YQpocmVmPSJodHRwOi8vd3d3LkZyZWVCU0Qub3JnL3Byb2plY3RzL2N2c3dlYi5odG1s Ij5odHRwOi8vd3d3LkZyZWVCU0Qub3JnL3Byb2plY3RzL2N2c3dlYi5odG1sPC9hPiZndDsuCjwv cD48cD4KRmVlbCBmcmVlIHRvIHNlbmQgYW55IHBhdGNoZXMsIHN1Z2dlc3Rpb25zIGFuZCBjb21t ZW50cyB0byB0aGUgRnJlZUJTRC1DVlN3ZWIKbWFpbGluZyBsaXN0IGF0CiZsdDs8YQpocmVmPSJt YWlsdG86ZnJlZWJzZC1jdnN3ZWJcQEZyZWVCU0Qub3JnIj5mcmVlYnNkLWN2c3dlYlxARnJlZUJT RC5vcmc8L2E+Jmd0Oy4KPC9wPgpFT1QKCiRzaG9ydF9pbnN0cnVjdGlvbiA9IDw8RU9UOwo8cD4K Q2xpY2sgb24gYSBkaXJlY3RvcnkgdG8gZW50ZXIgdGhhdCBkaXJlY3RvcnkuIENsaWNrIG9uIGEg ZmlsZSB0byBkaXNwbGF5Cml0cyByZXZpc2lvbiBoaXN0b3J5IGFuZCB0byBnZXQgYSBjaGFuY2Ug dG8gZGlzcGxheSBkaWZmcyBiZXR3ZWVuIHJldmlzaW9ucy4KPC9wPgpFT1QKCiMgSWNvbnMgZm9y IHRoZSB3ZWIgVUkuICBJZiBJQ09OLVVSTCBpcyBlbXB0eSwgdGhlIFRFWFQgcmVwcmVzZW50YXRp b24gaXMKIyB1c2VkLiAgSWYgeW91IGRvIG5vdCB3YW50IHRvIGhhdmUgYSB0b29sIHRpcCBmb3Ig YW4gaWNvbiwgc2V0IFRFWFQgZW1wdHkuCiMgVGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGlj b24gYWxsb3cgdGhlIGJyb3dzZXIgdG8gY29ycmVjdGx5IGRpc3BsYXkKIyB0aGUgdGFibGUgd2hp bGUgc3RpbGwgbG9hZGluZyB0aGUgaWNvbnMuICBJZiB0aGVzZSBpY29ucyBhcmUgdG9vIGxhcmdl LAojIGNoZWNrIG91dCB0aGUgIm1pbmkiIHZlcnNpb25zIGluIHRoZSBpY29ucy8gZGlyZWN0b3J5 OyB0aGV5IGhhdmUgYQojIHdpZHRoL2hlaWdodCBvZiAxNi8xNi4KIwpteSAkaWNvbnNkaXIgPSAn L2ljb25zJzsKCiMgZm9ybWF0OiAgICAgICAgICBURVhUICAgICAgIElDT04tVVJMICAgICAgICAg ICAgICAgICAgd2lkdGggaGVpZ2h0CiVJQ09OUyA9ICgKICAgICBiYWNrICAgID0+IFsoJ1tCQUNL XScsICAgIiRpY29uc2Rpci9iYWNrLmdpZiIsICAgICAgMjAsICAgMjIpXSwKICAgICBkaXIgICAg ID0+IFsoJ1tESVJdJywgICAgIiRpY29uc2Rpci9kaXIuZ2lmIiwgICAgICAgMjAsICAgMjIpXSwK ICAgICBmaWxlICAgID0+IFsoJ1tUWFRdJywgICAgIiRpY29uc2Rpci90ZXh0LmdpZiIsICAgICAg MjAsICAgMjIpXSwKICAgICBiaW5maWxlID0+IFsoJ1tCSU5dJywgICAgIiRpY29uc2Rpci9iaW5h cnkuZ2lmIiwgICAgMjAsICAgMjIpXSwKICAgICBncmFwaCAgID0+IFsoJ1tHUkFQSF0nLCAgIiRp Y29uc2Rpci9taW5pZ3JhcGgucG5nIiwgMTYsICAgMTYpXSwKKTsKdW5kZWYgJGljb25zZGlyOwoK IyBBbiBVUkwgd2hlcmUgdG8gZmluZCB0aGUgQ1NTLgojCiRjc3N1cmwgPSAnL2V0Yy9odHRwZC9j dnN3ZWIuY3NzJzsKCiMgVGhlIGxlbmd0aCB0byB3aGljaCB0aGUgbGFzdCBsb2cgZW50cnkgc2hv dWxkIGJlIHRydW5jYXRlZCB3aGVuIHNob3duCiMgaW4gdGhlIGRpcmVjdG9yeSB2aWV3LgojCiRz aG9ydExvZ0xlbiA9IDgwOwoKIyBTaG93IGF1dGhvciBvZiBsYXN0IGNoYW5nZT8KIwokc2hvd19h dXRob3IgPSAxOwoKIyBDZWxsIHBhZGRpbmcgZm9yIGRpcmVjdG9yeSB0YWJsZS4KIwokdGFibGVw YWRkaW5nID0gMjsKCiMgUmVndWxhciBleHByZXNzaW9ucyBmb3IgZmlsZXMgYW5kIGRpcmVjdG9y aWVzIHdoaWNoIHNob3VsZCBiZSBoaWRkZW4uCiMgRWFjaCByZWdleHAgaXMgY29tcGFyZWQgYWdh aW5zdCBhIHBhdGggcmVsYXRpdmUgdG8gYSBDVlMgcm9vdCwgYWZ0ZXIKIyBzdHJpcHBpbmcgdGhl IHRyYWlsaW5nICIsdiIgaWYgcHJlc2VudC4gIE1hdGNoaW5nIGZpbGVzIGFuZCBkaXJlY3Rvcmll cwojIGFyZSBub3QgZGlzcGxheWVkLgojCkBGb3JiaWRkZW5GaWxlcyA9ICgKICAgIHFyfF5DVlNS T09ULytwYXNzd2QkfG8sICMgQ1ZTUk9PVC9wYXNzd2Qgc2hvdWxkIG5vdCBiZSAnY3ZzIGFkZCdl ZCB0aG91Z2guCiAgICBxcnwvXC5jdnNwYXNzJHxvLCAgICAgICAjIERpdHRvLiAgSnVzdCBpbiBj YXNlLgogICAjcXJ8Xm15LytzZWNyZXQvK2RpcnxvLAopOwoKIyBVc2UgQ1ZTUk9PVC9kZXNjcmlw dGlvbnMgZm9yIGRlc2NyaWJpbmcgdGhlIGRpcmVjdG9yaWVzL21vZHVsZXM/CiMgU2VlIElOU1RB TEwsIHNlY3Rpb24gOS4KIwokdXNlX2Rlc2NyaXB0aW9ucyA9IDA7CgojCiMgSHVtYW4gcmVhZGFi bGUgZGlmZi4KIwojIChjKSAxOTk4IEguIFplbGxlciA8emVsbGVyQHRoaW5rLmRlPgojCiMgR2Vu ZXJhdGVzIHR3byBjb2x1bW5zIG9mIGNvbG9yIGVuY29kZWQgZGlmZjsgbXVjaCBsaWtlIHhkaWZm IG9yIEdOVSBFbWFjcycKIyBlZGlmZi1tb2RlLgojCiMgVGhlIGRpZmYtc3R1ZmYgaXMgYSBwaWVj ZSBvZiBjb2RlIEkgb25jZSBtYWRlIGZvciBjdnMyaHRtbCB3aGljaCBpcyB1bmRlcgojIEdQTCwg c2VlIGh0dHA6Ly93d3cuc3NsdWcuZGsvY3ZzMmh0bWwKIyAoYykgMTk5Ny85OCBQZXRlciBUb2Z0 IDxwdG9Ac3NsdWcuaW1tLmR0dS5kaz4KCiMgTWFrZSBsaW5lcyBicmVha2FibGUgc28gdGhhdCB0 aGUgY29sdW1ucyBkbyBub3QgZXhjZWVkIHRoZSB3aWR0aCBvZiB0aGUKIyBicm93c2VyPwojCiRo cl9icmVha2FibGUgPSAxOwoKIyBQcmludCBmdW5jdGlvbiBuYW1lcyBpbiBkaWZmcyAodW5pZmll ZCBhbmQgY29udGV4dCBvbmx5KS4KIyBTZWUgdGhlIC1wIG9wdGlvbiBpbiB0aGUgZGlmZigxKSBt YW4gcGFnZS4KIwokc2hvd2Z1bmMgPSAxOwoKIyBGb3IgZWFjaCBwYWlyIG9mIHJlZ2V4cHMsIGZp bGVzIHRoYXQgbWF0Y2ggdGhlIGZpcnN0IHJlZ2V4cCB3aWxsIGJlIGRpZmYnZWQKIyB3aXRoIGFu IC1GIG9wdGlvbiB1c2luZyB0aGUgc2Vjb25kIHJlZ2V4cCAodW5pZmllZCBhbmQgY29udGV4dCBv bmx5KS4KIyBTZWUgdGhlIC1GIG9wdGlvbiBpbiB0aGUgZGlmZigxKSBtYW4gcGFnZS4KIwolZnVu Y2xpbmVfcmVnZXhwID0gKAogICAgcXIvXC4oPzo0dGh8ZnIpJC9vID0+ICJcXCheXFx8WyBcdF1c XCk6ICIsCiAgICBxci9cLnJiJC9vICAgICAgICAgPT4gIl5bXHQgXSpcXChjbGFzc1xcfG1vZHVs ZVxcfGRlZlxcKSAiLAopOwoKIyBJZ25vcmUgd2hpdGVzcGFjZSBpbiBodW1hbiByZWFkYWJsZSBk aWZmcz8gKCctdycgb3B0aW9uIHRvIGRpZmYpCiMKJGhyX2lnbndoaXRlID0gMDsKCiMgSWdub3Jl IGRpZmZzIHdoaWNoIGFyZSBjYXVzZWQgYnkga2V5d29yZCBzdWJzdGl0dXRpb24sICRJZCBhbmQg ZnJpZW5kcz8KIyAoJy1raycgb3B0aW9uIHRvIHJjc2RpZmYpCiMKJGhyX2lnbmtleXN1YnN0ID0g MTsKCiMgVGhlIHdpZHRoIG9mIHRoZSB0ZXh0aW5wdXQgb2YgdGhlICJyZXF1ZXN0IGRpZmYiIGZv cm0uCiMKJGlucHV0VGV4dFNpemUgPSAxMjsKCiMgQ3VzdG9tIHBlciBNSU1FIHR5cGUgZGlmZiB0 b29scywgdXNlZCBmb3IgY29tcGFyaW5nIGJpbmFyeSBmaWxlcyBzdWNoIGFzCiMgc3ByZWFkc2hl ZXRzLCBpbWFnZXMgZXRjLiAgRWFjaCBrZXkgaXMgYSBNSU1FIHR5cGUgaW4gbG93ZXJjYXNlLgoj IEVhY2ggdmFsdWUgaXMgYW4gYXJyYXkgcmVmIG9mIGF2YWlsYWJsZSBkaWZmIHRvb2xzIGZvciB0 aGF0IHR5cGUsIGVhY2ggb2YKIyB3aGljaCBpcyBhIGhhc2ggcmVmIHdpdGggdmFsdWVzIChtYW5k YXRvcnkgd2hlcmUgZGVmYXVsdCBub3QgbGlzdGVkKToKIyAgIG5hbWU6IHRoZSBuYW1lIHRvIHNo b3cgaW4gdGhlIFVJIGZvciB0aGlzIGRpZmYgdHlwZQojICAgY21kOiAgZnVsbCBwYXRoIHRvIGV4 ZWN1dGFibGUKIyAgIGFyZ3M6IGFyZ3VtZW50cyBhcyBhbiBhcnJheSByZWYgKG5vdCBzdHJpbmch LCBkZWZhdWx0cyB0byBubyBhcmd1bWVudHMpCiMgICB0eXBlOiBvdXRwdXQgTUlNRSB0eXBlIChk ZWZhdWx0cyB0byB0ZXh0L3BsYWluKQojCiVESUZGX0NPTU1BTkRTID0gKAogICMndGV4dC94bWwn ID0+IFsKICAjICB7IG5hbWUgPT4gJ1hNTGRpZmYnLAogICMgICAgY21kICA9PiAkQ01Ee3htbGRp ZmZ9LAogICMgIH0sCiAgIyAgeyBuYW1lID0+ICdYTUxkaWZmIChYVXBkYXRlKScsCiAgIyAgICBj bWQgID0+ICRDTUR7eG1sZGlmZn0sCiAgIyAgICBhcmdzID0+IFsgcXcoLXgpIF0sCiAgIyAgICB0 eXBlID0+ICd0ZXh0L3htbCcsCiAgIyAgfSwKICAjXSwKKTsKCiMKIyBNaW1lIHR5cGVzCiMKCiMg VGhlIE1JTUUgdHlwZSBsb29rdXAgd29ya3MgbGlrZSB0aGlzOgojIDEpIExvb2sgdXAgZnJvbSAl TVRZUEVTIGJlbG93IHdpdGggdGhlIGZpbGUgbmFtZSBleHRlbnNpb24gKHN1ZmZpeCkuCiMgMikg SWYgbm90IGZvdW5kLCB1c2UgdGhlIE1JTUU6OlR5cGVzKDMpIG1vZHVsZSBpZiBpdCdzIGF2YWls YWJsZS4KIyAzKSBJZiBub3QgZm91bmQsIGxvb2t1cCBmcm9tIHRoZSAkbWltZV90eXBlcyBmaWxl IChzZWUgYmVsb3cpLgojIDQpIElmIG5vdCBmb3VuZCwgdHJ5ICVNVFlQRVN7JyonfS4KIyA1KSBJ ZiBub3QgZm91bmQsIHVzZSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyBpZiB0aGUgZmlsZSdz IGtleXdvcmQKIyAgICBzdWJzdGl0dXRpb24gbW9kZSBpcyBiIChpZS4gdGhlIGZpbGUgd2FzIGNo ZWNrZWQgaW4gYXMgYmluYXJ5IHRvIENWUyksCiMgICAgJ3RleHQvcGxhaW4nIG90aGVyd2lzZS4K CiMgUXVpY2sgTUlNRSB0eXBlIGxvb2t1cDsgbWFwcyBmaWxlbmFtZSBleHRlbnNpb25zIHRvIE1J TUUgdHlwZXMuCiMgQWRkIGNvbW1vbiBtYXBwaW5ncyBoZXJlIGZvciBmYXN0IGxvb2t1cC4gIFlv dSBjYW4gYWxzbyB1c2UgdGhpcwojIHRvIG92ZXJyaWRlIE1JTUU6OlR5cGVzKDMpIG9yIHRoZSAk bWltZV90eXBlcyBmaWxlIChzZWUgYmVsb3cpLgojCiVNVFlQRVMgPSAoCgkiaHRtbCIgID0+ICJ0 ZXh0L2h0bWwiLAoJInNodG1sIiA9PiAidGV4dC9odG1sIiwKCSJnaWYiICAgPT4gImltYWdlL2dp ZiIsCgkianBlZyIgID0+ICJpbWFnZS9qcGVnIiwKCSJqcGciICAgPT4gImltYWdlL2pwZWciLAoJ InBuZyIgICA9PiAiaW1hZ2UvcG5nIiwKCSJ4cG0iICAgPT4gImltYWdlL3hwbSIsCiMJIioiICAg ICA9PiAidGV4dC9wbGFpbiIsCik7CgojIFRoZSB0cmFkaXRpb25hbCBtaW1lLnR5cGVzIGZpbGUs IGVnLiB0aGUgb25lIGZyb20gQXBhY2hlIGlzIGZpbmUuCiMgU2VlIGFib3ZlIHdoZXJlIHRoaXMg Z2V0cyB1c2VkLgojCiRtaW1lX3R5cGVzID0gJy91c3IvbG9jYWwvZXRjL2FwYWNoZS9taW1lLnR5 cGVzJzsKCiMgQ2hhcnNldCBhcHBlbmRlZCB0byB0aGUgQ29udGVudC1UeXBlIEhUVFAgaGVhZGVy IGZvciB0ZXh0LyogTUlNRSB0eXBlcy4KIyBOb3RlIHRoYXQgdGhlIHdlYiBzZXJ2ZXIgbWF5IGRl ZmF1bHQgdG8gc29tZSBjaGFyc2V0IHdoaWNoIG1heSB0YWtlIGVmZmVjdAojIGlmIHlvdSBsZWF2 ZSB0aGlzIHBhcmFtZXRlciBlbXB0eSBvciB1bnNldC4KIyBGb3IgQXBhY2hlLCBzZWUgYWxzbyB0 aGUgQWRkRGVmYXVsdENoYXJzZXQgZGlyZWN0aXZlLgojCiRjaGFyc2V0ID0gJyc7CgojIGUuZy4K IyRjaGFyc2V0ID0gJHdoZXJlID1+IG0sL3J1Wy9fLV0sID8gJ2tvaTgtcicKIyAgOiAkd2hlcmUg PX4gbSwvemhbL18tXSwgPyAnYmlnNScKIyAgOiAkd2hlcmUgPX4gbSwvamFbL18tXSwgPyAneC1l dWMtanAnCiMgIDogJHdoZXJlID1+IG0sL2tvWy9fLV0sID8gJ3gtZXVjLWtyJwojICA6ICdpc28t ODg1OS0xJzsKCiMgT3V0cHV0IGZpbHRlcgojCiRvdXRwdXRfZmlsdGVyID0gJyc7CgojIGUuZy4K IyMgdW5pZnkvY29udmVydCBKYXBhbmVzZSBjb2RlIGludG8gRVVDLUpQCiMkb3V0cHV0X2ZpbHRl cj0gJy91c3IvbG9jYWwvYmluL25rZiAtZSc7CgojIyMjIyMjIyMjIyMjIwojIE1pc2MKIyMjIyMj IyMjIyMjIyMKCiMgQWxsb3cgYW5ub3RhdGlvbiBvZiBmaWxlcz8gIFNlZSBhbHNvIEBhbm5vdGF0 ZV9vcHRpb25zIGJlbG93LgojCiRhbGxvd19hbm5vdGF0ZSA9IDE7CgojIEFsbG93IEhUTUxpemVk IHZlcnNpb25zIG9mIGZpbGVzPwojCiRhbGxvd19tYXJrdXAgPSAxOwoKIyBBbGxvdyBDVlN3ZWIg dG8gY3JlYXRlIG1haWx0bzogbGlua3MgZnJvbSBlbWFpbCBhZGRyZXNzZXMgaW4gdmFyaW91cwoj IEhUTUxpemVkIHZpZXdzPyAgRGVmYXVsdDogeWVzLgojCiMkYWxsb3dfbWFpbHRvcyA9IDA7Cgoj IyBFeHRyYSBoeXBlcmxpbmtpbmcgbWVhbnMgaHlwZXJsaW5rcyB0byBidWcgdHJhY2tpbmcgc3lz dGVtcyBhbmQgbWFudWFsIHBhZ2UKIyMgZ2F0ZXdheXMsIHNlZSAkcHJjZ2kgYW5kICRtYW5jZ2kg YW5kIHJlbGF0ZWQgb3B0aW9ucyBhYm92ZS4KCiMgQWxsb3cgZXh0cmEgaHlwZXJsaW5raW5nIChz dWNoIGFzIFBSIGNyb3NzLXJlZmVyZW5jZXMpIGluIGxvZ3M/CiMgRGVmYXVsdDogeWVzLgojCiMk YWxsb3dfbG9nX2V4dHJhID0gMDsKCiMgQWxsb3cgZXh0cmEgaHlwZXJsaW5raW5nIGluIGRpcmVj dG9yeSB2aWV3cz8KIwokYWxsb3dfZGlyX2V4dHJhID0gMTsKCiMgQWxsb3cgZXh0cmEgaHlwZXJs aW5raW5nIGluIHNvdXJjZSBjb2RlL2Zvcm1hdHRlZCBkaWZmIHZpZXdzPwojCiRhbGxvd19zb3Vy Y2VfZXh0cmEgPSAxOwoKIyBBbGxvdyBjb21wcmVzc2lvbiB3aXRoIGd6aXAgaW4gZ2VuZXJhbD8g IE5vdGUgdGhhdCB0aGlzIGFsc28gcmVxdWlyZXMKIyB0aGF0IHRoZSBicm93c2VyIHN1cHBvcnRz IGl0LCBhbmQgd2lsbCBiZSBkaXNhYmxlZCBvbiB0aGUgZmx5IHdoZW4gbmVjZXNzYXJ5LgojCiMk YWxsb3dfY29tcHJlc3MgPSAxOwoKIyBVc2UgSmF2YVNjcmlwdCBpbiB0aGUgVUk/CiMKJHVzZV9q YXZhX3NjcmlwdCA9IDE7CgojIFNob3cgYSBmb3JtIGZvciBzZXR0aW5nIG9wdGlvbnMgaW4gdGhl IGRpcmVjdG9yeSB2aWV3PwojCiRlZGl0X29wdGlvbl9mb3JtID0gMTsKCiMgU2hvdyBsYXN0IGNo YW5nZWxvZyBtZXNzYWdlIGZvciBzdWJkaXJlY3Rvcmllcz8KIyBUaGUgY3VycmVudCBpbXBsZW1l bnRhdGlvbiBtYWtlcyBtYW55IGFzc3VtcHRpb25zIGFuZCBtYXkgc2hvdyB0aGUKIyBpbmNvcnJl Y3QgZmlsZSBhdCBzb21lIHRpbWVzLiBUaGUgbWFpbiBhc3N1bXB0aW9uIGlzIHRoYXQgdGhlIGxh c3QKIyBtb2RpZmllZCBmaWxlIGhhcyB0aGUgbmV3ZXN0IGZpbGVkYXRlLiBCdXQgc29tZSBDVlMg b3BlcmF0aW9ucwojIHRvdWNoIHRoZSBmaWxlIGV2ZW4gd2hlbiBhIG5ldyB2ZXJzaW9uIGlzbid0 IGNoZWNrZWQgaW4sIGFuZCBUQUcKIyBiYXNlZCBicm93c2luZyBlc3NlbnRpYWxseSBwdXRzIHRo aXMgb3V0IG9mIG9yZGVyIHVubGVzcyB0aGUgbGFzdAojIGNoZWNraW4gd2FzIG9uIHRoZSBzYW1l IHRhZyBhcyB5b3UgYXJlIHZpZXdpbmcuCiMgRW5hYmxlIHRoaXMgaWYgeW91IGxpa2UgdGhlIGZl YXR1cmUsIGJ1dCBkb24ndCByZWx5IG9uIGNvcnJlY3QgcmVzdWx0cy4KIwojJHNob3dfc3ViZGly X2xhc3Rtb2QgPSAxOwoKIyBTaG93IENWUyBsb2cgd2hlbiB2aWV3aW5nIGZpbGUgY29udGVudHM/ CiMKJHNob3dfbG9nX2luX21hcmt1cCA9IDE7CgojIFByZWZvcm1hdCB3aGVuIHZpZXdpbmcgZmls ZSBjb250ZW50cz8gIFRoaXMgc2hvdWxkIGJlIHR1cm5lZCBvZmYKIyB3aGVuIHlvdSBoYXZlIGZp bGVzIGluIHRoZSByZXBvc2l0b3J5IHRoYXQgYXJlIGluIGEgbXVsdGlieXRlCiMgZW5jb2Rpbmcg d2hpY2ggdXNlcyBIVE1MIHNwZWNpYWwgY2hhcmFjdGVycyAoWzw+JiJdKSBhcyBwYXJ0IG9mIGEK IyBtdWx0aWJ5dGUgY2hhcmFjdGVyLiAoc3VjaCBhcyBpc28tMjAyMi1qcCwgU2hpZnRKSVMsIGV0 Yy4pCiMgT3RoZXJ3aXNlIHRob3NlIGZpbGVzIHdpbGwgZ2V0IHNjcmV3ZWQgdXAgaW4gbWFya3Vw LgojCiMgTm90ZTogZW5zY3JpcHQoMSkgaGlnaGxpZ2h0aW5nIGlzIHByZWZlcnJlZCBvdmVyIHRo ZSBidWlsdC1pbiBwcmVmb3JtYXR0aW5nLAojIGllLiB0aGlzIGhhcyBubyBlZmZlY3QgaWYgJGFs bG93X2Vuc2NyaXB0IGlzIHRydWUgYW5kIGVuc2NyaXB0IGNhbiBoaWdobGlnaHQKIyB0aGUgZmls ZS4KIwojJHByZWZvcm1hdF9pbl9tYXJrdXAgPSAxOwoKIyBEZWZhdWx0IHRhYiB3aWR0aCB1c2Vk IHRvIGV4cGFuZCB0YWJzIHRvIHNwYWNlcyBpbiB2YXJpb3VzIEhUTUxpemVkIHZpZXdzLgojIE5v dGUgdGhhdCBDVlN3ZWIgc2NhbnMgdGhlIGZpcnN0IGZldyBsaW5lcyBvZiBzb3VyY2VzIGZvciBz b21lIGNvbW1vbiBlZGl0b3IKIyBkaXJlY3RpdmVzIGNvbnRyb2xsaW5nIHRoZSB0YWIgd2lkdGgu ICBJdCB1c2VzIHRoZSB2YWx1ZSBmcm9tIHRoZW0gaWYgZm91bmQsCiMgZmFsbGluZyBiYWNrIHRv IHRoZSB2YWx1ZSBvZiAkdGFic3RvcCBpZiBub3QuICBEZWZhdWx0OiA4LgojCiMkdGFic3RvcCA9 IDQ7CgojIElmIHlvdSB3aXNoIHRvIGRpc3BsYXkgYWJzb2x1dGUgdGltZXMgaW4geW91ciBsb2Nh bCB0aW1lem9uZSwKIyB0aGVuIGRlZmluZSBAbXl0eiBhbmQgZmlsbCBpbiB0aGUgc3RyaW5ncyBm b3IgeW91ciBzdGFuZGFyZCBhbmQKIyBkYXlsaWdodCB0aW1lLiBOb3RlIHRoYXQgeW91IG11c3Qg YWxzbyBtYWtlIHN1cmUgdGhlIHN5c3RlbQojIHRpbWV6b25lIGlzIGNvcnJlY3RseSBzZXQuCiMK I0BteXR6PSgiRVNUIiwgIkVEVCIpOwoKIyBDVlN3ZWIgaXMgZnJpZW5kbHkgdG8gY2FjaGVzIGJ5 IHNlbmRpbmcgdGhlIEhUVFAgTGFzdC1Nb2RpZmllZAojIGhlYWRlciBjb3JyZXNwb25kaW5nIHRv IHRoZSBzZW50IGNvbnRlbnQuICBJbiB0aGUgY2FzZSBvZiBhCiMgY2hlY2tvdXQsIHRoaXMgbWF5 IHJlcXVpcmUgcnVubmluZyByY3Nsb2cgb24gdGhlIGZpbGUgc29sZWx5IGZvciB0aGUKIyBwdXJw b3NlIG9mIHJldHJpZXZpbmcgdGhlIHRpbWVzdGFtcCB0byBiZSBzZW50LiAgSWYgeW91IGhhdmUg YSBzbG93CiMgc2VydmVyLCB5b3UgbWF5IHdhbnQgdG8gdHVybiB0aGlzIG9mZiBmb3IgYSBzbWFs bCBwZXJmb3JtYW5jZSBnYWluLgojCiR1c2VfbW9kZGF0ZSA9IDE7CgojIE1heGltdW0gbnVtYmVy IG9mIGZpbGVuYW1lcyB0byBwYXNzIHRvIHJsb2coMSkgaW4gb25lIGNvbW1hbmQuCiMgSWYgeW91 IHNlZSAiRmFpbGVkIHRvIHNwYXduIEdOVSBybG9nIiBlcnJvcnMgd2l0aCBkaXJlY3RvcmllcyBj b250YWluaW5nCiMgbG90cyBvZiBmaWxlcywgZXhwZXJpbWVudCBieSBzZXR0aW5nIHRoaXMgdG8g ZGlmZmVyZW50IHZhbHVlcyBhbmQgc2VlIGlmCiMgdGhlIGVycm9yIHN0aWxsIG9jY3Vycy4gIEEg Z29vZCB2YWx1ZSB0byBzdGFydCBmcm9tIHdvdWxkIGJlIGVnLiAyMDAuCiMgSnVzdCBjb21tZW50 IHRoaXMgb3V0IGlmIHlvdSdyZSBub3QgYml0dGVuIGJ5IHRoZSBwcm9ibGVtLgojCiMkZmlsZV9s aXN0X2xlbiA9IDIwMDsKCiMgQWxsb3cgZ3JhcGhpY2FsIHJlcHJlc2VudGF0aW9ucyBvZiBmaWxl IHJldmlzaW9ucyBhbmQgYnJhbmNoZXMgd2l0aCBDdnNHcmFwaD8KIwokYWxsb3dfY3ZzZ3JhcGgg PSAkQ01Ee2N2c2dyYXBofSA/IDEgOiAwOwoKIyBQYXRoIHRvIHRoZSBDdnNHcmFwaCBjb25maWd1 cmF0aW9uIGZpbGUuICBPbmx5IHVzZWQgaWYgJGFsbG93X2N2c2dyYXBoCiMgaXMgdHJ1ZS4gIExl YXZlIHRoaXMgZW1wdHkgb3IgY29tbWVudCBpdCBvdXQgdG8gbWFrZSBjdnNncmFwaCgxKSB1c2Ug aXRzCiMgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZpbGUuICBOb3RlIHRoYXQgQ1ZTd2ViIHdpbGwg b3ZlcnJpZGUgc29tZSBvZiB0aGUKIyBzZXR0aW5ncyBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxl IHdpdGggY29tbWFuZCBsaW5lIG9wdGlvbnMsIHNlZQojIGRvR3JhcGgoKSBhbmQgZG9HcmFwaFZp ZXcoKSBpbiBjdnN3ZWIuY2dpIGZvciBkZXRhaWxzLgojCiMkY3ZzZ3JhcGhfY29uZmlnID0gIi9l dGMvY3ZzZ3JhcGguY29uZiI7CgojIFVSTCB0byB0aGUgQ1ZTSGlzdG9yeSBzY3JpcHQuICBUaGlz IHNob3VsZCBiZSBhYnNvbHV0ZSAoYnV0IGRvZXMgbm90IG5lZWQKIyB0byBpbmNsdWRlIHRoZSBo b3N0IGFuZCBwb3J0IGlmIHRoZSBzY3JpcHQgaXMgb24gdGhlIHNhbWUgc2VydmVyIGFzCiMgQ1ZT d2ViKS4KIyRjdnNoaXN0b3J5X3VybCA9ICIvY2dpLWJpbi9jdnNoaXN0b3J5LmNnaSI7CgojIFdo ZXRoZXIgdG8gYWxsb3cgZG93bmxvYWRpbmcgYSB0YXJiYWxsIG9yIGEgemlwIG9mIHRoZSBjdXJy ZW50IGRpcmVjdG9yeS4KIyBXaGlsZSBkb3dubG9hZGluZyBvZiB0aGUgZW50aXJlIHJlcG9zaXRv cnkgaXMgZGlzYWxsb3dlZCwgZGVwZW5kaW5nIG9uCiMgdGhlIGRpcmVjdG9yeSB0aGlzIG1heSB0 YWtlIGEgbG90IG9mIHRpbWUgYW5kIGRpc2sgc3BhY2UuICBGb3Igc29tZSBDVlMKIyB2ZXJzaW9u cywgdGhlIHVzZXIgYWNjb3VudCBydW5uaW5nIENWU3dlYiBuZWVkcyB3cml0ZSBhY2Nlc3MgdG8K IyBDVlNST09UL3ZhbC10YWdzLiAgU2VlIGFsc28gdGhlIHRhciwgZ3ppcCBhbmQgemlwIG9wdGlv bnMgYmVsb3cuCiMKIyRhbGxvd190YXIgPSAoKCRDTUR7dGFyfSAmJiAkQ01Ee2d6aXB9KSB8fCAk Q01Ee3ppcH0pID8gMSA6IDA7CgojIE9wdGlvbnMgdG8gcGFzcyB0byB0YXIoMSkuCiMgRm9yIGV4 YW1wbGU6IEB0YXJfb3B0aW9ucyA9IHF3KC0taWdub3JlLWZhaWxlZC1yZWFkKTsKIyBHTlUgdGFy IGhhcyBzb21lIHVzZWZ1bCBvcHRpb25zIGFnYWluc3QgdW5leHBlY3RlZCBlcnJvcnMuCiMgT3Ro ZXIgdXNlZnVsIG9wdGlvbnMgaW5jbHVkZSAiLS1vd25lcj0wIiBhbmQgIi0tZ3JvdXA9MCIsIHNl ZQojIHRoZSB0YXIoMSkgKG9yIGd0YXIoMSkpIG1hbnBhZ2UgZm9yIGRldGFpbHMuCiMKQHRhcl9v cHRpb25zID0gcXcoKTsKCiMgT3B0aW9ucyB0byBwYXNzIHRvIGd6aXAoMSkgd2hlbiBjb21wcmVz c2luZyBhIHRhcmJhbGwgdG8gZG93bmxvYWQuCiMgRm9yIGV4YW1wbGU6IEBnemlwX29wdGlvbnMg PSBxdygtMyk7CiMgVHJ5IGxvd2VyIGNvbXByZXNzaW9uIGxldmVsIHRoYW4gNiAoZGVmYXVsdCkg aWYgeW91IHdhbnQgZmFzdGVyCiMgY29tcHJlc3Npb24sIG9yIGhpZ2hlciBmb3IgYmV0dGVyIGNv bXByZXNzaW9uLgojCkBnemlwX29wdGlvbnMgPSBxdygpOwoKIyBPcHRpb25zIHRvIHBhc3MgdG8g emlwKDEpIHdoZW4gY29tcHJlc3NpbmcgYSB6aXAgYXJjaGl2ZSB0byBkb3dubG9hZC4KIyBGb3Ig ZXhhbXBsZTogQHppcF9vcHRpb25zID0gcXcoLTMpOwojIFRyeSBsb3dlciBjb21wcmVzc2lvbiBs ZXZlbCB0aGFuIDYgKGRlZmF1bHQpIGlmIHlvdSB3YW50IGZhc3RlcgojIGNvbXByZXNzaW9uLCBv ciBoaWdoZXIgZm9yIGJldHRlciBjb21wcmVzc2lvbi4KIwpAemlwX29wdGlvbnMgPSBxdygtcSk7 CgojIE9wdGlvbnMgdG8gcGFzcyB0byBjdnMoMSkuCiMgRm9yIGN2cyB2ZXJzaW9ucyAxLjExIHRv IDEuMTEuNiAoYnJva2VuIGluIDwgMS4xMSwgcmVtb3ZlZCBpbiAxLjExLjcpLCB5b3UKIyBjYW4g dXNlIHRoZSAnLWwnIG9wdGlvbiB0byBwcmV2ZW50IGN2cyBmcm9tIHdyaXRpbmcgdG8gdGhlIGhp c3RvcnkgZmlsZS4KIyBGb3Igb3RoZXIgY3ZzIHZlcnNpb25zLCBlaXRoZXIgc3VwcHJlc3MgaGlz dG9yeSBsb2dnaW5nIGJ5IHVzaW5nIHRoZQojIExvZ0hpc3RvcnkgcGFyYW1ldGVyIGluIENWU1JP T1QvY29uZmlnIG9yIG1ha2Ugc3VyZSB0aGF0IHRoZSBDVlN3ZWIgdXNlcgojIGNhbiByZWFkIGFu ZCB3cml0ZSB0byBDVlNST09UL2hpc3RvcnkuCiMgRnJlZUJTRCdzIGFuZCBPcGVuQlNEJ3MgY3Zz KDEpIGhhcyBsb25nIHNpbmNlIHN1cHBvcnRlZCAtUiAocmVhZCBvbmx5IGFjY2VzcwojIG1vZGUp IG9wdGlvbiwgd2hpY2ggY29uc2lkZXJhYmx5IHNwZWVkcyB1cCBjaGVja291dHMgb3ZlciBORlMu ICBGb3Igb3RoZXIKIyBwbGF0Zm9ybXMsIHRoZSAtUiBvcHRpb24gYW5kIHRoZSBDVlNSRUFET05M WUZTIGVudmlyb25tZW50IHZhcmlhYmxlIGFyZQojIGF2YWlsYWJsZSBpbiBjdnMgPj0gMS4xMi4x LiAgQSBzaW1pbGFyIGVmZmVjdCBpcyBwcm92aWRlZCBieSAtdSBvbiBOZXRCU0QuCiMKQGN2c19v cHRpb25zID0gcXcoLWYpOwpwdXNoIEBjdnNfb3B0aW9ucywgJy1SJyBpZiAoJF5PIGVxICdmcmVl YnNkJyB8fCAkXk8gZXEgJ29wZW5ic2QnKTsKcHVzaCBAY3ZzX29wdGlvbnMsICctdScgaWYgKCRe TyBlcSAnbmV0YnNkJyk7CiMgT25seSBhZmZlY3RzIGN2cyA+PSAxLjEyLjEsIGJ1dCBkb2Vzbid0 IGh1cnQgb2xkZXIgb25lcy4KJEVOVntDVlNSRUFET05MWUZTfSA9IDEgdW5sZXNzIGV4aXN0cygk RU5We0NWU1JFQURPTkxZRlN9KTsKCiMgT3B0aW9ucyB0byBwYXNzIHRvIHRoZSAnY3ZzIGFubm90 YXRlJyBjb21tYW5kLCB1c3VhbGx5IHRoZSBub3JtYWwKIyBAY3ZzX29wdGlvbnMgYXJlIGdvb2Qg ZW5vdWdoIGhlcmUuCiMgVG8gbWFrZSBhbm5vdGF0ZSB3b3JrIGFnYWluc3QgYSByZWFkIG9ubHkg cmVwb3NpdG9yeSwgYWRkIC1uLCBpZS46CiMgQGFubm90YXRlX29wdGlvbnMgPSAoQGN2c19vcHRp b25zLCAnLW4nKTsKIwpAYW5ub3RhdGVfb3B0aW9ucyA9IEBjdnNfb3B0aW9uczsKCiMgT3B0aW9u cyB0byBwYXNzIHRvIHJjc2RpZmYoMSkuCiMgUHJvYmFibHkgdGhlIG9ubHkgdXNlZnVsIG9uZSBo ZXJlIGlzIC1xIChzdXBwcmVzcyBkaWFnbm9zdGljIG91dHB1dCkuCiMKQHJjc2RpZmZfb3B0aW9u cyA9IHF3KC1xKTsKCiMgRW5hYmxlcyBzeW50YXggaGlnaGxpZ2h0aW5nIHVzaW5nIEdOVSBFbnNj cmlwdCBpZiBzZXQuCiMgWW91IHdpbGwgbmVlZCBHTlUgRW5zY3JpcHQgdmVyc2lvbiAxLjYuMyBv ciBuZXdlciBmb3IgdGhpcyB0byB3b3JrLgojCiMkYWxsb3dfZW5zY3JpcHQgPSAkQ01Ee2Vuc2Ny aXB0fSA/IDEgOiAwOwoKIyBPcHRpb25zIHRvIHBhc3MgdG8gZW5zY3JpcHQoMSkuCiMgRG8gbm90 IHNldCB0aGUgLXEsIC0tbGFuZ3VhZ2UsIC1vIG9yIC0taGlnaGxpZ2h0IG9wdGlvbnMgaGVyZS4K IyBNb3N0IHVzZWZ1bCBzdHlsZXMgYXJlIHByb2JhYmx5IGVtYWNzLCBlbWFjc192ZXJib3NlIGFu ZCBtc3ZjLgojCkBlbnNjcmlwdF9vcHRpb25zID0gcXcoLS1zdHlsZT1lbWFjcyAtLWNvbG9yPTEp OwoKIyBFbnNjcmlwdCBoaWdobGlnaHQgcnVsZSB0byBmaWxlbmFtZSByZWdleCBtYXBwaW5ncy4g IFRoZSBzZXQgb2YgdXNlZnVsCiMgbWFwcGluZ3MgZGVwZW5kcyBvbiB3aGF0IGhpZ2hsaWdodCBy dWxlcyB0aGUgc3lzdGVtIGhhcyBpbnN0YWxsZWQuCiMKJWVuc2NyaXB0X3R5cGVzID0KICAoCiAg ICdhZGEnICAgICAgICAgID0+IHFyL1wuYWQoc3xifGEpJC9vLAogICAnYXNtJyAgICAgICAgICA9 PiBxci9cLltTc10kL28sCiAgICdhd2snICAgICAgICAgID0+IHFyL1wuYXdrJC9vLAogICAnYmFz aCcgICAgICAgICA9PiBxci9cLihiYXNoKF9wcm9maWxlfHJjKXxpbnB1dHJjKSQvbywKICAgJ2Mn ICAgICAgICAgICAgPT4gcXIvXC4oY3xoKSQvbywKICAgJ2NoYW5nZWxvZycgICAgPT4gcXIvXmNo YW5nZWxvZyQvaW8sCiAgICdjcHAnICAgICAgICAgID0+IHFyL1wuKGNcK1wrfEN8SHxjcHB8Y2N8 Y3h4KSQvbywKICAgJ2NzaCcgICAgICAgICAgPT4gcXIvXC4oY3NoKHJjKT98bG9nKGlufG91dCl8 aGlzdG9yeSkkL28sCiAgICdlbGlzcCcgICAgICAgID0+IHFyL1wuZShsfG1hY3MpJC9vLAogICAn Zm9ydHJhbicgICAgICA9PiBxci9cLltmRl0kL28sCiAgICdoYXNrZWxsJyAgICAgID0+IHFyL1wu KGw/aHxsP2cpcyQvbywKICAgJ2h0bWwnICAgICAgICAgPT4gcXIvXC54P2h0bWw/JC9vLAogICAn aWRsJyAgICAgICAgICA9PiBxci9cLmlkbCQvbywKICAgJ2luZicgICAgICAgICAgPT4gcXIvXC5p bmYkL2lvLAogICAnamF2YScgICAgICAgICA9PiBxci9cLmphdmEkL28sCiAgICdqYXZhc2NyaXB0 JyAgID0+IHFyL1wuKGpzfHBhYykkL28sCiAgICdrc2gnICAgICAgICAgID0+IHFyL1wua3NoJC9v LAogICAnbTQnICAgICAgICAgICA9PiBxci9cLm00JC9vLAogICAnbWFrZWZpbGUnICAgICA9PiBx ci8oR05VKT9bTW1dYWtlZmlsZSg/IVwuUExcYil8XC4obWE/a2U/fGFtKSQvbywKICAgJ21hdGxh YicgICAgICAgPT4gcXIvXC5tJC9vLAogICAnbnJvZmYnICAgICAgICA9PiBxci9cLm1hbiQvbywK ICAgJ3Bhc2NhbCcgICAgICAgPT4gcXIvXC5wKGFzfHApPyQvaW8sCiAgICdwZXJsJyAgICAgICAg ID0+IHFyL1wucChtfChlcik/bCkkL2lvLAogICAncG9zdHNjcmlwdCcgICA9PiBxci9cLmU/cHMk L2lvLAogICAncHl0aG9uJyAgICAgICA9PiBxci9cLnB5JC9vLAogICAncmZjJyAgICAgICAgICA9 PiBxci9cYigocmZjfGRyYWZ0KVwuLipcLnR4dCkkL28sCiAgICdzY2hlbWUnICAgICAgID0+IHFy L1wuKHNjbXxzY2hlbWUpJC9vLAogICAnc2gnICAgICAgICAgICA9PiBxci9cLnNoJC9vLAogICAn c2tpbGwnICAgICAgICA9PiBxci9cLmlsJC9vLAogICAnc3FsJyAgICAgICAgICA9PiBxci9cLnNx bCQvbywKICAgJ3N0YXRlcycgICAgICAgPT4gcXIvXC5zdCQvbywKICAgJ3N5bm9wc3lzJyAgICAg PT4gcXIvXC5zKGNyfHluKHRoKT8pJC9vLAogICAndGNsJyAgICAgICAgICA9PiBxci9cLnRjbCQv bywKICAgJ3Rjc2gnICAgICAgICAgPT4gcXIvXC50Y3NocmMkL28sCiAgICd0ZXgnICAgICAgICAg ID0+IHFyL1wudGV4JC9vLAogICAndmJhJyAgICAgICAgICA9PiBxci9cLnZiYSQvbywKICAgJ3Zl cmlsb2cnICAgICAgPT4gcXIvXC4odnx2aCkkL28sCiAgICd2aGRsJyAgICAgICAgID0+IHFyL1wu dmhkbD8kL28sCiAgICd2cm1sJyAgICAgICAgID0+IHFyL1wud3JsJC9vLAogICAnd21sc2NyaXB0 JyAgICA9PiBxci9cLndtbHMoY3JpcHQpPyQvbywKICAgJ3pzaCcgICAgICAgICAgPT4gcXIvXC4o enNoKGVudnxyYyl8eihwcm9maWxlfGxvZyhpbnxvdXQpKSkkL28sCiAgKTsKCiMgVHJvdWJsZXNo b290aW5nOiBpbiBjYXNlIG9mIHByb2JsZW1zLCBzZXR0aW5nIHRoaXMgdG8gMSB3aWxsIGNhdXNl IG1vcmUKIyBlcnJvciBvdXRwdXQgaW50byB5b3VyIHdlYiBzZXJ2ZXIgZXJyb3IgbG9nLiAgVW5k ZXIgbm9ybWFsIG9wZXJhdGlvbiwKIyB0aGlzIHNob3VsZCBiZSBzZXQgdG8gMCBvciBjb21tZW50 ZWQgb3V0LgojCiMkREVCVUcgPSAxOwoKIyBFbmFibGUgdGhpcyB0byBsZXQgQ1ZTd2ViIGxvYWQg ZXh0cmEgY29uZmlndXJhdGlvbiBmaWxlcyBmcm9tIHRoZSAiY29uZi5kIgojIHN1YmRpcmVjdG9y eSBvZiB0aGUgZGlyZWN0b3J5IHRoaXMgZmlsZSBpcyBsb2NhdGVkIGluLiAgVGhpcyBlbmFibGVz IHNpdGUKIyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHdpdGhvdXQgaGF2aW5nIHRvIG1vZGlmeSB0 aGlzICJtYXN0ZXIiIGNvbmZpZ3VyYXRpb24KIyBmaWxlIChleGNlcHQgZm9yIGVuYWJsaW5nIHRo aXMgZnVuY3Rpb25hbGl0eSBiZWxvdyA6KQojCmlmICgwKSB7CiAgbXkgJGNvbmZkaXIgPSBjYXRk aXIoZGlybmFtZShfX0ZJTEVfXyksICdjb25mLmQnKTsKICBpZiAob3BlbmRpcihDT05GRCwgJGNv bmZkaXIpKSB7CiAgICBteSBAZmlsZXMgPSBzb3J0KG1hcChjYXRmaWxlKCRjb25mZGlyLCAkXyks IHJlYWRkaXIoQ09ORkQpKSk7CiAgICBjbG9zZShDT05GRCk7CiAgICBmb3IgbXkgJGNvbmZmaWxl IChncmVwKC1mICYmIC1yIF8sIEBmaWxlcykpIHsKICAgICAgKCRjb25mZmlsZSkgPSAoJGNvbmZm aWxlID1+IC8oLitcLmNvbmYpJC8pIG9yIG5leHQ7CiAgICAgIGRvICIkY29uZmZpbGUiIG9yIGNv bmZpZ19lcnJvcigkY29uZmZpbGUsICRAKTsKICAgIH0KICB9Cn0KCjE7CgojIEVPRgo= --001485394218abdf37047657fc8a Content-Type: application/octet-stream; name="cvsweb.cgi" Content-Disposition: attachment; filename="cvsweb.cgi" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g109rmdi2 IyEvdXNyL2Jpbi9wZXJsIC1UCiMKIyBjdnN3ZWIgLSBhIENHSSBpbnRlcmZhY2UgdG8gQ1ZTIHRy ZWVzLgojCiMgV3JpdHRlbiBpbiB0aGVpciBzcGFyZSB0aW1lIGJ5CiMgICAgICAgICAgICAgQmls bCBGZW5uZXIgICAgICAgICAgPGZlbm5lckBGcmVlQlNELm9yZz4gICAob3JpZ2luYWwgd29yaykK IyBleHRlbmRlZCBieSBIZW5uZXIgWmVsbGVyICAgICAgICA8emVsbGVyQHRoaW5rLmRlPiwKIyAg ICAgICAgICAgICBIZW5yaWsgTm9yZHN0cm9tICAgICA8aG5vQGhlbS5wYXNzYWdlbi5zZT4KIyAg ICAgICAgICAgICBLZW4gQ29hciAgICAgICAgICAgICA8Y29hckBBcGFjaGUuT3JnPgojICAgICAg ICAgICAgIERpY2sgQmFsYXNrYSAgICAgICAgIDxkaWNrQGJ1Y2tvc29mdC5jb20+CiMgICAgICAg ICAgICAgQWtpbm9yaSBNVVNIQSAgICAgICAgPGtudUBGcmVlQlNELm9yZz4KIyAgICAgICAgICAg ICBKZW5zLVV3ZSBNYWdlciAgICAgICA8anVtQGhlbGlvcy5kZT4KIyAgICAgICAgICAgICBWaWxs ZSBTa3l0dO+/vSAgICAgICAgIDxzY29wQEZyZWVCU0Qub3JnPgojICAgICAgICAgICAgIFZhc3Np bGlpIEtoYWNoYXR1cm92IDx2YXNzaWxpaUB0YXJ1bnoub3JnPgojCiMgQmFzZWQgb246CiMgKiBC aWxsIEZlbm5lcnMgY3Zzd2ViLmNnaSByZXZpc2lvbiAxLjI4IGF2YWlsYWJsZSBmcm9tOgojICAg aHR0cDovL3d3dy5GcmVlQlNELm9yZy9jZ2kvY3Zzd2ViLmNnaS93d3cvZW4vY2dpL2N2c3dlYi5j Z2kKIwojIENvcHlyaWdodCAoYykgMTk5Ni0xOTk4IEJpbGwgRmVubmVyCiMgICAgICAgICAgIChj KSAxOTk4LTE5OTkgSGVubmVyIFplbGxlcgojICAgICAgICAgICAoYykgMTk5OSAgICAgIEhlbnJp ayBOb3Jkc3Ryb20KIyAgICAgICAgICAgKGMpIDIwMDAtMjAwMiBBa2lub3JpIE1VU0hBCiMgICAg ICAgICAgIChjKSAyMDAyLTIwMDUgVmlsbGUgU2t5dHTvv70KIyBBbGwgcmlnaHRzIHJlc2VydmVk LgojCiMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0CiMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiMgYXJlIG1ldDoKIyAxLiBSZWRpc3RyaWJ1dGlv bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAojICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4KIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlIGNvcHlyaWdodAojICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgojCiMgVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBB UyBJUycnIEFORAojIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQojIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCiMgQVJFIERJU0NM QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBM SUFCTEUKIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAojIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCiMgT1IgU0VSVklDRVM7 IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p CiMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS IElOIENPTlRSQUNULCBTVFJJQ1QKIyBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCiMgT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgoj IFNVQ0ggREFNQUdFLgojCiMgJEZyZWVCU0Q6IHByb2plY3RzL2N2c3dlYi9jdnN3ZWIuY2dpLHYg MS4yOTUgMjAwNS8wOS8yNSAyMDoyODo1MSBzY29wIEV4cCAkCiMgJElkOiBjdnN3ZWIuY2dpLHYg MS4xMTIgMjAwMS8wNy8yNCAxMzowMzoxNiBoemVsbGVyIEV4cCAkCiMgJElkYWVtb25zOiAvaG9t ZS9jdnMvY3Zzd2ViL2N2c3dlYi5jZ2ksdiAxLjg0IDIwMDEvMTAvMDcgMjA6NTA6MTAga251IEV4 cCAkCiMKIyMjCgpyZXF1aXJlIDUuMDA2OwoKdXNlIHN0cmljdDsKCnVzZSB3YXJuaW5nczsKdXNl IGZpbGV0ZXN0IHF3KGFjY2Vzcyk7Cgp1c2UgdmFycyBxdyAoCiAgJFZFUlNJT04gJENoZWNrb3V0 TWFnaWMgJE1pbWVUeXBlcyAkREVCVUcKICAkY29uZmlnICRhbGxvd192ZXJzaW9uX3NlbGVjdAog IEBDVlNyZXBvc2l0b3JpZXMgQENWU1JPT1QgJUNWU1JPT1QgJUNWU1JPT1RkZXNjcgogICVNSVJS T1JTICVERUZBVUxUVkFMVUUgJUlDT05TICVNVFlQRVMKICAlRElGRl9DT01NQU5EUyBARElGRlRZ UEVTICVESUZGVFlQRVMgQExPR1NPUlRLRVlTICVMT0dTT1JUS0VZUwogICVhbGx0YWdzICVmaWxl aW5mbyAldGFncyBAYnJhbmNobmFtZXMgJW5hbWVwcmludGVkCiAgJXN5bXJldiAlcmV2c3ltIEBh bGxyZXZpc2lvbnMgJWRhdGUgJWF1dGhvciBAcmV2ZGlzcGxheW9yZGVyCiAgQHJldmlzaW9ucyAl c3RhdGUgJWRpZmZsaW5lcyAlbG9nICVicmFuY2hwb2ludCBAcmV2b3JkZXIgJGtleXdvcmRzdWJz dGl0dXRpb24KICAkcHJjZ2kgQHByY2F0ZWdvcmllcyAkcmVfcHJjYXRlZ29yaWVzICRwcmtleXdv cmQgJHJlX3Bya2V5d29yZCAkbWFuY2dpCiAgJGRvQ2hlY2tvdXQgJHNjcmlwdG5hbWUgJHNjcmlw dHdoZXJlCiAgJHdoZXJlICRCcm93c2VyICRub2ZpbGVsaW5rcyAkbWF5Y29tcHJlc3MgQHN0aWNr eXZhcnMgJWZ1bmNsaW5lX3JlZ2V4cAogICRpc19saW5rcyAkaXNfbHlueCAkaXNfdzNtICRpc19t c2llICRpc19tb3ppbGxhMyAkaXNfdGV4dGJhc2VkCiAgJWlucHV0ICRxdWVyeSAkYmFyZXF1ZXJ5 ICRzb3J0YnkgJGJ5ZGF0ZSAkYnlyZXYgJGJ5YXV0aG9yCiAgJGJ5bG9nICRieWZpbGUgJGRlZmF1 bHREaWZmVHlwZSAkbG9nc29ydCAkY3ZzdHJlZSAkY3Zzcm9vdAogICRjaGFyc2V0ICRvdXRwdXRf ZmlsdGVyCiAgQGNvbW1hbmRfcGF0aCAlQ01EICRhbGxvd19jb21wcmVzcyAkYmFja2ljb24gJGRp cmljb24gJGZpbGVpY29uICRncmFwaGljb24KICAkZnVsbG5hbWUgJGN2c3RyZWVkZWZhdWx0ICRs b2dvICRkZWZhdWx0dGl0bGUgJGFkZHJlc3MgJGJpbmZpbGVpY29uCiAgJGxvbmdfaW50cm8gJHNo b3J0X2luc3RydWN0aW9uICRzaG9ydExvZ0xlbiAkc2hvd19hdXRob3IKICAkdGFibGVwYWRkaW5n ICRocl9icmVha2FibGUgJHNob3dmdW5jICRocl9pZ253aGl0ZSAkaHJfaWdua2V5c3Vic3QKICAk aW5wdXRUZXh0U2l6ZSAkbWltZV90eXBlcyAkYWxsb3dfYW5ub3RhdGUgJGFsbG93X21hcmt1cCAk YWxsb3dfbWFpbHRvcwogICRhbGxvd19sb2dfZXh0cmEgJGFsbG93X2Rpcl9leHRyYSAkYWxsb3df c291cmNlX2V4dHJhCiAgJGFsbG93X2N2c2dyYXBoICRjdnNncmFwaF9jb25maWcgJHVzZV9qYXZh X3NjcmlwdCAkZWRpdF9vcHRpb25fZm9ybQogICRzaG93X3N1YmRpcl9sYXN0bW9kICRzaG93X2xv Z19pbl9tYXJrdXAgJHByZWZvcm1hdF9pbl9tYXJrdXAKICAkdGFic3RvcCAkc3RhdGUgJGFublRh YmxlICRzZWwgQEZvcmJpZGRlbkZpbGVzCiAgJHVzZV9kZXNjcmlwdGlvbnMgJWRlc2NyaXB0aW9u cyBAbXl0eiAkZHdoZXJlCiAgJHVzZV9tb2RkYXRlICRnemlwX29wZW4gJGZpbGVfbGlzdF9sZW4K ICAkYWxsb3dfdGFyIEB0YXJfb3B0aW9ucyBAZ3ppcF9vcHRpb25zIEB6aXBfb3B0aW9ucyBAY3Zz X29wdGlvbnMKICBAYW5ub3RhdGVfb3B0aW9ucyBAcmNzZGlmZl9vcHRpb25zCiAgJEhUTUxfRE9D VFlQRSAkSFRNTF9NRVRBICRjc3N1cmwgJENTUyAkY3ZzaGlzdG9yeV91cmwKICAkYWxsb3dfZW5z Y3JpcHQgQGVuc2NyaXB0X29wdGlvbnMgJWVuc2NyaXB0X3R5cGVzCik7Cgp1c2UgQ3dkICAgICAg ICAgICAgICAgICAgIHF3KGFic19wYXRoKTsKdXNlIEZpbGU6OkJhc2VuYW1lICAgICAgICBxdyhk aXJuYW1lKTsKdXNlIEZpbGU6OlBhdGggICAgICAgICAgICBxdyhybXRyZWUpOwp1c2UgRmlsZTo6 U3BlYzo6RnVuY3Rpb25zIHF3KGNhbm9ucGF0aCBjYXRkaXIgY2F0ZmlsZSBjdXJkaXIgZGV2bnVs bCByb290ZGlyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wZGlyIHVwZGlyKTsKdXNl IEZpbGU6OlRlbXAgICAgICAgICAgICBxdyh0ZW1wZGlyIHRlbXBmaWxlKTsKdXNlIElQQzo6UnVu ICAgICAgICAgICAgICBxdygpOwp1c2UgVGltZTo6TG9jYWwgICAgICAgICAgIHF3KHRpbWVnbSk7 CnVzZSBVUkk6OkVzY2FwZSAgICAgICAgICAgcXcodXJpX2VzY2FwZSB1cmlfdW5lc2NhcGUpOwoK dXNlIGNvbnN0YW50IFZBTElEX1BBVEggICA9PiBxci9eKFtbOl5jbnRybDpdXSspJC9vOwp1c2Ug Y29uc3RhbnQgVkFMSURfVEFHMSAgID0+IHFyL14oW2EtekEtWl1bWzpncmFwaDpdXSopJC9vOwp1 c2UgY29uc3RhbnQgVkFMSURfVEFHMiAgID0+IHFyL14oW15cJCwuOjtAXSspJC9vOwp1c2UgY29u c3RhbnQgQ1ZTV0VCTUFSS1VQID0+IHFye150ZXh0Lyh4LWN2c3dlYnx2bmRcLnZpZXdjdnMpLW1h cmt1cCR9aW87CnVzZSBjb25zdGFudCBMT0dfRklMRVNFUFIgPT4gcXIvXj17Nzd9JC9vOwp1c2Ug Y29uc3RhbnQgTE9HX1JFVlNFUFIgID0+IHFyL14tezI4fSQvbzsKCnVzZSBjb25zdGFudCBIQVNf WkxJQiAgICAgPT4gZXZhbCB7IHJlcXVpcmUgQ29tcHJlc3M6OlpsaWI7IH07CnVzZSBjb25zdGFu dCBIQVNfRURJRkYgICAgPT4gZXZhbCB7IHJlcXVpcmUgU3RyaW5nOjpFZGlmZjsgIH07CgojIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCgojIEFsbCBnbG9iYWwgaW5pdGlhbGl6YXRpb24gdGhhdCBjYW4g YmUgZG9uZSBpbiBjb21waWxlIHRpbWUgc2hvdWxkIGdvIHRvCiMgdGhlIEJFR0lOIGJsb2NrLiAg UGVyc2lzdGVudCBlbnZpcm9ubWVudHMsIHN1Y2ggYXMgbW9kX3BlcmwsIHdpbGwgYmVuZWZpdAoj IGZyb20gdGhpcy4KCkJFR0lOCnsKICAkVkVSU0lPTiA9ICczLjAuNic7CgogICRIVE1MX0RPQ1RZ UEUgPQogICAgJzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRy YW5zaXRpb25hbC8vRU4iICcgLgogICAgJyJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFRE L3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4nOwoKICAkSFRNTF9NRVRBID0gPDxFT007CjxtZXRh IG5hbWU9InJvYm90cyIgY29udGVudD0ibm9mb2xsb3ciIC8+CjxtZXRhIG5hbWU9ImdlbmVyYXRv ciIgY29udGVudD0iRnJlZUJTRC1DVlN3ZWIgJFZFUlNJT04iIC8+CjxtZXRhIGh0dHAtZXF1aXY9 IkNvbnRlbnQtU2NyaXB0LVR5cGUiIGNvbnRlbnQ9InRleHQvamF2YXNjcmlwdCIgLz4KPG1ldGEg aHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4KRU9N CgogICMgVXNlIE1JTUU6OlR5cGVzIGZvciBNSU1FIHR5cGUgbG9va3VwcyBpZiBpdCdzIGF2YWls YWJsZS4KICBldmFsIHsKICAgIHJlcXVpcmUgTUlNRTo6VHlwZXM7CiAgICAkTWltZVR5cGVzID0g TUlNRTo6VHlwZXMtPm5ldyhvbmx5X2NvbXBsZXRlID0+IDEpOwogIH07CiAgJE1pbWVUeXBlcyA9 IHVuZGVmIGlmICRAOwoKICAkQ2hlY2tvdXRNYWdpYyA9ICd+Y2hlY2tvdXR+JzsKfQoKIyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQoKc3ViIHByaW50RGlmZlNlbGVjdCgkKTsKc3ViIHByaW50RGlmZlNl bGVjdFN0aWNreVZhcnMoKTsKc3ViIGdldERpZmZMaW5rcygkJCQpOwpzdWIgcHJpbnRMb2dTb3J0 U2VsZWN0KCQpOwpzdWIgZmluZExhc3RNb2RpZmllZFN1YmRpcnMoQCk7CnN1YiBodG1saWZ5X3N1 YigmJCk7CnN1YiBodG1saWZ5KCQ7JCk7CnN1YiBzcGFjZWRIdG1sVGV4dCgkOyQpOwpzdWIgbGlu aygkJCk7CnN1YiByZXZjbXAoJCQpOwpzdWIgZmF0YWwoJCRAKTsKc3ViIGNvbmZpZ19lcnJvcigk JCk7CnN1YiByZWRpcmVjdCgkOyQpOwpzdWIgc2FmZWdsb2IoJCk7CnN1YiBzZWFyY2hfcGF0aCgk KTsKc3ViIGdldEVuc2NyaXB0SEwoJCk7CnN1YiBnZXRNaW1lVHlwZSgkOyQpOwpzdWIgaGVhZCgk OyQpOwpzdWIgc2Nhbl9kaXJlY3RpdmVzKEApOwpzdWIgb3Blbk91dHB1dEZpbHRlcigpOwpzdWIg ZG9Bbm5vdGF0ZSgkJCk7CnN1YiBkb0NoZWNrb3V0KCQkJCk7CnN1YiBkb0Vuc2NyaXB0KCQkJDsk KTsKc3ViIGRvR3JhcGgoKTsKc3ViIGRvR3JhcGhWaWV3KCk7CnN1YiBjdnN3ZWJNYXJrdXAoJCQk JCQkOyQpOwpzdWIgdmlld2FibGUoJCk7CnN1YiBkb0RpZmYoJCQkJCQkKTsKc3ViIGdldERpckxv Z3MoJCRAKTsKc3ViIHJlYWRMb2coJDskKTsKc3ViIHByaW50TG9nKCQkJDskJCk7CnN1YiBkb0xv ZygkKTsKc3ViIGZsdXNoX2RpZmZfcm93cygkJCQkKTsKc3ViIGh1bWFuX3JlYWRhYmxlX2RpZmYo JCQpOwpzdWIgbmF2aWdhdGVIZWFkZXIoJCQkJCQ7JCk7CnN1YiBwbHVyYWxfd3JpdGUoJCQpOwpz dWIgcmVhZGFibGVUaW1lKCQkKTsKc3ViIGNsaWNrYWJsZVBhdGgoJCQpOwpzdWIgY2hvb3NlQ1ZT Um9vdCgpOwpzdWIgY2hvb3NlTWlycm9yKCk7CnN1YiBmaWxlU29ydENtcCgpOwpzdWIgZG93bmxv YWRfdXJsKCQkOyQpOwpzdWIgZG93bmxvYWRfbGluaygkJCQ7JCk7CnN1YiBkaXNwbGF5X3VybCgk JDskKTsKc3ViIGRpc3BsYXlfbGluaygkJDskJCk7CnN1YiBncmFwaF9saW5rKCQ7JCk7CnN1YiBo aXN0b3J5X2xpbmsoJCQ7JCk7CnN1YiB0b2dnbGVRdWVyeSgkOyQpOwpzdWIgaHRtbHF1b3RlKCQp OwpzdWIgaHRtbHVucXVvdGUoJCk7CnN1YiB1cmlfZXNjYXBlX3BhdGgoJCk7CnN1YiBodHRwX2hl YWRlcig7JCQpOwpzdWIgaHRtbF9oZWFkZXIoJDskKTsKc3ViIGh0bWxfZm9vdGVyKCk7CnN1YiBs aW5rX3RhZ3MoJCk7CnN1YiBmb3JiaWRkZW4oJCk7CnN1YiBzdGFydHByb2MoQCk7CnN1YiBydW5w cm9jKEApOwpzdWIgY2hlY2tvdXRfdG9fdGVtcCgkJCQpOwoKIyBHZXQgcmlkIG9mIHVuc2FmZSBl bnZpcm9ubWVudCB2YXJzLiAgRG9uJ3QgZG8gdGhpcyBpbiB0aGUgQkVHSU4gYmxvY2sKIyAodGhp bmsgbW9kX3BlcmwpLi4uCmRlbGV0ZShARU5We3F3KFBBVEggSUZTIENEUEFUSCBFTlYgQkFTSF9F TlYpfSk7CgpteSAoJG15ZGlyKSA9IChkaXJuYW1lKCQwKSA9fiAvKC4qKS8pOyAgICAjIHVudGFp bnQKCiMjIyMjIFN0YXJ0IG9mIENvbmZpZ3VyYXRpb24gQXJlYSAjIyMjIyMjIwoKIyA9PSBFRElU IHRoaXMgPT0KIyBMb2NhdGlvbnMgdG8gc2VhcmNoIGZvciB1c2VyIGNvbmZpZ3VyYXRpb24sIGlu IG9yZGVyOgpmb3IgKGNhdGZpbGUoJG15ZGlyLCAnY3Zzd2ViLmNvbmYnKSwgJy9ldGMvaHR0cGQv Y29uZi9jdnN3ZWIuY29uZicpICAgIy91c3IvbG9jYWwvZXRjL2N2c3dlYgp7CiAgaWYgKC1yICRf KSB7CiAgICAkY29uZmlnID0gJF87CiAgICBsYXN0OwogIH0KfQoKIyMjIyMgRW5kIG9mIENvbmZp Z3VyYXRpb24gQXJlYSAgICMjIyMjIyMjCgp1bmRlZiAkbXlkaXI7CgojIyMjIyMjIyBDb25maWd1 cmF0aW9uIHBhcmFtZXRlcnMgIyMjIyMjIyMjCgpAQ1ZTcmVwb3NpdG9yaWVzID0gQENWU1JPT1Qg PSAlQ1ZTUk9PVCA9ICVNSVJST1JTID0gJURFRkFVTFRWQUxVRSA9ICVJQ09OUyA9CiAgJU1UWVBF UyA9ICV0YWdzID0gJWFsbHRhZ3MgPSAlZmlsZWluZm8gPSAlRElGRl9DT01NQU5EUyA9ICgpOwoK JGN2c3RyZWVkZWZhdWx0ID0gJGxvZ28gPSAkZGVmYXVsdHRpdGxlID0KICAkYWRkcmVzcyA9ICRs b25nX2ludHJvID0gJHNob3J0X2luc3RydWN0aW9uID0gJHNob3J0TG9nTGVuID0gJHNob3dfYXV0 aG9yID0KICAkdGFibGVwYWRkaW5nID0gJGhyX2JyZWFrYWJsZSA9ICRzaG93ZnVuYyA9ICRocl9p Z253aGl0ZSA9CiAgJGhyX2lnbmtleXN1YnN0ID0gJGlucHV0VGV4dFNpemUgPSAkbWltZV90eXBl cyA9ICRhbGxvd19hbm5vdGF0ZSA9CiAgJGFsbG93X21hcmt1cCA9ICRhbGxvd19jb21wcmVzcyA9 ICR1c2VfamF2YV9zY3JpcHQgPSAkZWRpdF9vcHRpb25fZm9ybSA9CiAgJHNob3dfc3ViZGlyX2xh c3Rtb2QgPSAkc2hvd19sb2dfaW5fbWFya3VwID0gJHByZWZvcm1hdF9pbl9tYXJrdXAgPQogICR0 YWJzdG9wID0gJHVzZV9tb2RkYXRlID0gJGd6aXBfb3BlbiA9ICRERUJVRyA9ICRhbGxvd19jdnNn cmFwaCA9CiAgJGN2c2dyYXBoX2NvbmZpZyA9ICRjdnNoaXN0b3J5X3VybCA9ICRhbGxvd190YXIg PSB1bmRlZjsKCiRhbGxvd192ZXJzaW9uX3NlbGVjdCA9ICRhbGxvd19tYWlsdG9zID0gJGFsbG93 X2xvZ19leHRyYSA9IDE7CgpARElGRlRZUEVTID0gcXcoaCBIIHUgYyBzKTsKQERJRkZUWVBFU3tA RElGRlRZUEVTfSA9ICgKICB7CiAgICAnZGVzY3InICAgPT4gJ2NvbG9yZWQnLAogICAgJ29wdHMn ICAgID0+IFsnLXUnXSwKICAgICdjb2xvcmVkJyA9PiAxLAogIH0sCiAgewogICAgJ2Rlc2NyJyAg ID0+ICdsb25nIGNvbG9yZWQnLAogICAgJ29wdHMnICAgID0+IFsnLS11bmlmaWVkPTE1J10sCiAg ICAnY29sb3JlZCcgPT4gMSwKICB9LAogIHsKICAgICdkZXNjcicgICA9PiAndW5pZmllZCcsCiAg ICAnb3B0cycgICAgPT4gWyctdSddLAogICAgJ2NvbG9yZWQnID0+IDAsCiAgfSwKICB7CiAgICAn ZGVzY3InICAgPT4gJ2NvbnRleHQnLAogICAgJ29wdHMnICAgID0+IFsnLWMnXSwKICAgICdjb2xv cmVkJyA9PiAwLAogIH0sCiAgewogICAgJ2Rlc2NyJyAgID0+ICdzaWRlIGJ5IHNpZGUnLAogICAg IyB3aWR0aD0xNjggc2hvdWxkIGJlIGVub3VnaCB0byBzdXBwb3J0IDgwIGNoYXJhY3RlciBsaW5l IGxlbmd0aHMKICAgICdvcHRzJyAgICA9PiBbJy0tc2lkZS1ieS1zaWRlJywgJy0td2lkdGg9MTY4 J10sCiAgICAnY29sb3JlZCcgPT4gMCwKICB9LAopOwoKQExPR1NPUlRLRVlTID0gcXcoY3ZzIGRh dGUgcmV2KTsKQExPR1NPUlRLRVlTe0BMT0dTT1JUS0VZU30gPSAoCiAgeyBkZXNjciA9PiAnTm90 IHNvcnRlZCcsICB9LAogIHsgZGVzY3IgPT4gJ0NvbW1pdCBkYXRlJywgfSwKICB7IGRlc2NyID0+ ICdSZXZpc2lvbicsICAgIH0sCik7CgojIyMjIyBFbmQgb2YgY29uZmlndXJhdGlvbiBwYXJhbWV0 ZXJzICMjIyMjCgpteSAkcGF0aGluZm8gPSAnJzsKaWYgKGRlZmluZWQoJEVOVntQQVRIX0lORk99 KSAmJiAkRU5We1BBVEhfSU5GT30gbmUgJycpIHsKICAoJHBhdGhpbmZvKSA9ICgkRU5We1BBVEhf SU5GT30gPX4gVkFMSURfUEFUSCkKICAgIG9yIGZhdGFsKCc1MDAgSW50ZXJuYWwgRXJyb3InLAog ICAgICAgICAgICAgJ0lsbGVnYWwgUEFUSF9JTkZPIGluIGVudmlyb25tZW50OiA8Y29kZT4lczwv Y29kZT4nLAogICAgICAgICAgICAgJEVOVntQQVRIX0lORk99KTsKfQppZiAoJEVOVntTQ1JJUFRf TkFNRX0pIHsKICAoJHNjcmlwdG5hbWUpID0gKCRFTlZ7U0NSSVBUX05BTUV9ID1+IFZBTElEX1BB VEgpCiAgICBvciBmYXRhbCgnNTAwIEludGVybmFsIEVycm9yJywKICAgICAgICAgICAgICdJbGxl Z2FsIFNDUklQVF9OQU1FIGluIGVudmlyb25tZW50OiA8Y29kZT4lczwvY29kZT4nLAogICAgICAg ICAgICAgJEVOVntTQ1JJUFRfTkFNRX0pOwp9Cgokc2NyaXB0bmFtZSAgICA9ICcnIHVubGVzcyBk ZWZpbmVkKCRzY3JpcHRuYW1lKTsKCiR3aGVyZSAgICAgICAgID0gICRwYXRoaW5mbzsKJGRvQ2hl Y2tvdXQgICAgPSAgJHdoZXJlID1+IHN8Xi8kQ2hlY2tvdXRNYWdpYy98L3xvOwokd2hlcmUgICAg ICAgICA9fiBzfF4vfHw7CiRzY3JpcHRuYW1lICAgID1+IHN8Xi8qfC98OwoKIyBMZXQncyB3b3Jr YXJvdW5kIHRodHRwZCdzIHN0dXBpZGl0eS4uCmlmICgkc2NyaXB0bmFtZSA9fiBtfC8kfCkgewog ICRwYXRoaW5mbyAuPSAnLyc7CiAgbXkgJHJlID0gcXVvdGVtZXRhICRwYXRoaW5mbzsKICAkc2Ny aXB0bmFtZSA9fiBzLyRyZSQvLzsKfQoKIyAkc2NyaXB0bmFtZSA6IHRoZSBVUkkgZXNjYXBlZCBw YXRoIHRvIHRoaXMgc2NyaXB0CiMgJHdoZXJlICAgICAgOiB0aGUgcGF0aCBpbiB0aGUgQ1ZTIHJl cG9zaXRvcnkgKHdpdGhvdXQgbGVhZGluZyAvLCBvciBvbmx5IC8pCiMgJHNjcmlwdHdoZXJlOiB0 aGUgVVJJIGVzY2FwZWQgJHNjcmlwdG5hbWUgKyAnLycgKyAkd2hlcmUKJHNjcmlwdG5hbWUgICA9 IHVyaV9lc2NhcGVfcGF0aCgkc2NyaXB0bmFtZSk7CiRzY3JpcHR3aGVyZSAgPSBqb2luKCcvJywg JHNjcmlwdG5hbWUsIHVyaV9lc2NhcGVfcGF0aCgkd2hlcmUpKTsKJHdoZXJlICAgICAgICA9ICcv JyBpZiAoJHdoZXJlIGVxICcnKTsKCiMgSW4gdGV4dC1iYXNlZCBicm93c2VycywgaXQncyB2ZXJ5 IGFubm95aW5nIHRvIGhhdmUgdHdvIGxpbmtzIHBlciBmaWxlOwojIHNraXAgbGlua2luZyB0aGUg aW1hZ2UgZm9yIHRoZW0uCgokQnJvd3NlciAgICAgPSAkRU5We0hUVFBfVVNFUl9BR0VOVH0gfHwg Jyc7CiRpc19saW5rcyAgICA9ICgkQnJvd3NlciA9fiBtYF5FP0xpbmtzIGApOwokaXNfbHlueCAg ICAgPSAoJEJyb3dzZXIgPX4gbWBeTHlueC9gaSk7CiRpc193M20gICAgICA9ICgkQnJvd3NlciA9 fiBtYF53M20vYGkpOwokaXNfbXNpZSAgICAgPSAoJEJyb3dzZXIgPX4gbWBNU0lFYCk7CiRpc19t b3ppbGxhMyA9ICgkQnJvd3NlciA9fiBtYF5Nb3ppbGxhL1szLTldYCk7CgokaXNfdGV4dGJhc2Vk ID0gKCRpc19saW5rcyB8fCAkaXNfbHlueCB8fCAkaXNfdzNtKTsKCiRub2ZpbGVsaW5rcyA9ICRp c190ZXh0YmFzZWQ7CgojIG5ld2VyIGJyb3dzZXJzIGFjY2VwdCBnemlwIGNvbnRlbnQgZW5jb2Rp bmcKIyBhbmQgc3RhdGUgdGhpcyBpbiBhIGhlYWRlcgojIChuZXRzY2FwZSBkaWQgYWx3YXlzIGJ1 dCBkaWRuJ3Qgc3RhdGUgaXQpCiMgSXQgaGFzIGJlZW4gcmVwb3J0ZWQgdGhhdCB0aGVzZQojICBi cmFpbmRhbWFnZWQgTVMtSW50ZXJuZXQgRXhwbG9kZXJzIGNsYWltIHRoYXQgdGhleQojIGFjY2Vw dCBnemlwIC4uIGJ1dCBkb24ndCBpbiBmYWN0IGFuZAojIGRpc3BsYXkgZ2FyYmFnZSB0aGVuIDot LwojIFR1cm4gb2ZmIGd6aXAgaWYgcnVubmluZyB1bmRlciBtb2RfcGVybCBhbmQgbm8gemxpYiBp cyBhdmFpbGFibGUsCiMgcGlwaW5nIGRvZXMgbm90IHdvcmsgYXMgZXhwZWN0ZWQgaW5zaWRlIHRo ZSBzZXJ2ZXIuCiRtYXljb21wcmVzcyA9ICgKICAoKGRlZmluZWQoJEVOVntIVFRQX0FDQ0VQVF9F TkNPRElOR30pCiAgICAmJiAkRU5We0hUVFBfQUNDRVBUX0VOQ09ESU5HfSA9fiAvZ3ppcC8pCiAg IHx8ICRpc19tb3ppbGxhMykKICAmJiAhJGlzX21zaWUKICAmJiAhKGRlZmluZWQoJEVOVntNT0Rf UEVSTH0pICYmICFIQVNfWkxJQikKKTsKCiMgUGFyYW1ldGVycyB0aGF0IHdpbGwgYmUgc3RpY2t5 IGluIGFsbCBjb25zdHJ1Y3RlZCBsaW5rcy9xdWVyeSBzdHJpbmdzLgpAc3RpY2t5dmFycyA9CiAg cXcoY3Zzcm9vdCBoaWRlYXR0aWMgaWdub3JlY2FzZSBzb3J0YnkgbG9nc29ydCBmIG9ubHlfd2l0 aF90YWcgbG4KICAgICBoaWRlY3Zzcm9vdCBoaWRlbm9ucmVhZGFibGUpOwoKIwojIExvYWQgY29u ZmlndXJhdGlvbi4KIwppZiAoLWYgJGNvbmZpZykgewogIGRvICIkY29uZmlnIiBvciBjb25maWdf ZXJyb3IoJGNvbmZpZywgJEApOwp9IGVsc2UgewogIGZhdGFsKCI1MDAgSW50ZXJuYWwgRXJyb3Ii LAogICAgICAgICdDb25maWd1cmF0aW9uIG5vdCBmb3VuZC4gIFNldCB0aGUgcGFyYW1ldGVyIDxj b2RlPiRjb25maWc8L2NvZGU+IGluIGN2c3dlYi5jZ2kgdG8geW91ciA8Yj5jdnN3ZWIuY29uZjwv Yj4gY29uZmlndXJhdGlvbiBmaWxlIGZpcnN0LicpOwp9CgojIFRyeSB0byBmaW5kIGEgcmVhZGFi bGUgZGlyIHdoZXJlIHdlIGNhbiBjZCBpbnRvLiAgU29tZSBhYnNfcGF0aCgpCiMgaW1wbGVtZW50 YXRpb25zIGFzIHdlbGwgYXMgdmFyaW91cyBjdnMgb3BlcmF0aW9ucyByZXF1aXJlIHN1Y2ggYSBk aXIgdG8KIyB3b3JrIHByb3Blcmx5Lgp7CiAgbG9jYWwgJF5XID0gMDsKICBmb3IgbXkgJGRpciAo dG1wZGlyKCksIHJvb3RkaXIoKSkgewogICAgbGFzdCBpZiAoLXIgJGRpciAmJiBjaGRpcigkZGly KSk7CiAgfQp9CgokQ1NTID0gJGNzc3VybCA/CiAgc3ByaW50ZigiPGxpbmsgcmVsPVwic3R5bGVz aGVldFwiIHR5cGU9XCJ0ZXh0L2Nzc1wiIGhyZWY9XCIlc1wiIC8+XG4iLAogICAgICAgICAgaHRt bHF1b3RlKCRjc3N1cmwpKSA6ICcnOwoKIyAtLS0gaW5wdXQgcGFyYW1ldGVycwoKbXkgJXF1ZXJ5 ID0gKCk7CmlmIChkZWZpbmVkKCRFTlZ7UVVFUllfU1RSSU5HfSkpIHsKICBmb3IgbXkgJHAgKHNw bGl0KC9bOyZdKy8sICRFTlZ7UVVFUllfU1RSSU5HfSkpIHsKICAgIG5leHQgdW5sZXNzICRwOwog ICAgJHAgPX4geS8rLyAvOwogICAgbXkgKCRrZXksICR2YWwpID0gc3BsaXQoLz0vLCAkcCwgMik7 CiAgICBuZXh0IHVubGVzcyBkZWZpbmVkKCRrZXkpOwogICAgJHZhbCA9IDEgdW5sZXNzIGRlZmlu ZWQoJHZhbCk7CiAgICAoJGtleSA9IHVyaV91bmVzY2FwZSgka2V5KSkgPX4gL1tbOmdyYXBoOl1d LyBvciBuZXh0OwogICAgKCR2YWwgPSB1cmlfdW5lc2NhcGUoJHZhbCkpID1+IC9bWzpncmFwaDpd XS8gb3IgbmV4dDsKICAgICRxdWVyeXska2V5fSA9ICR2YWw7CiAgfQp9Cgp1bmRlZiAlaW5wdXQ7 CgpteSAkdDsKZm9yIG15ICRwIChxdyhncmFwaCBoaWRlYXR0aWMgaGlkZWN2c3Jvb3QgaGlkZW5v bnJlYWRhYmxlIGlnbm9yZWNhc2UgbG4gY29wdAogICAgICAgICAgICAgIG1ha2VpbWFnZSBvcHRp b25zIHRhcmJhbGwpKSB7CiAgJHQgPSAkcXVlcnl7JHB9OwogIGlmIChkZWZpbmVkKCR0KSkgewog ICAgKCRpbnB1dHskcH0pID0gKCR0ID1+IC9eKFswMV18b24pJC8pCiAgICAgIG9yIGZhdGFsKCc1 MDAgSW50ZXJuYWwgRXJyb3InLAogICAgICAgICAgICAgICAnSW52YWxpZCBib29sZWFuIHZhbHVl OiA8Y29kZT4lcz0lczwvY29kZT4nLCAkcCwgJHQpOwogIH0KfQpmb3IgbXkgJHAgKHF3KGFubm90 YXRlIHIxIHIyIHJldiB0cjEgdHIyKSkgewogICR0ID0gJHF1ZXJ5eyRwfTsKICBpZiAoZGVmaW5l ZCgkdCkpIHsKICAgIGlmICgoJHAgZXEgJ3IxJyB8fCAkcCBlcSAncjInKSAmJiAkdCBlcSAndGV4 dCcpIHsKICAgICAgIyBTcGVjaWFsIGNhc2UgZm9yIHRoZSAiVXNlIHRleHQgZmllbGQiIG9wdGlv biBpbiB0aGUgbG9nIHZpZXcgZGlmZiBmb3JtLgogICAgICAkaW5wdXR7JHB9ID0gJHQ7CiAgICAg IG5leHQ7CiAgICB9IGVsc2lmICgoJHAgZXEgJ3JldicgfHwgJHAgZXEgJ2Fubm90YXRlJykgJiYg KCR0IGVxICcuJyB8fCAkdCBlcSAnSEVBRCcpKXsKICAgICAgIyBBbm90aGVyIHNwZWNpYWwgY2Fz ZSwgYWxsb3cgbGlua2luZyB0byBsYXRlc3QgcmV2aXNpb24gdXNpbmcgdGhlc2UuCiAgICAgICRp bnB1dHskcH0gPSAnLic7CiAgICAgIG5leHQ7CiAgICB9CiAgICBteSAoJHJldiwgJHRhZykgPSBz cGxpdCgvOi8sICR0LCAyKTsKICAgICgkaW5wdXR7JHB9KSA9ICgkcmV2ID1+IC9eKFxkKyg/Olwu XGQrKSopJC8pCiAgICAgIG9yIGZhdGFsKCc1MDAgSW50ZXJuYWwgRXJyb3InLAogICAgICAgICAg ICAgICAnSW52YWxpZCByZXZpc2lvbjogPGNvZGU+JXM9JXM8L2NvZGU+JywgJHAsICR0KTsKICAg IGlmIChkZWZpbmVkKCR0YWcpKSB7CiAgICAgICgkdGFnKSA9ICgkdGFnID1+IFZBTElEX1RBRzEp CiAgICAgICAgb3IgZmF0YWwoJzUwMCBJbnRlcm5hbCBFcnJvcicsCiAgICAgICAgICAgICAgICAg J0ludmFsaWQgdGFnL2JyYW5jaCBuYW1lIGluIHJldmlzaW9uOiA8Y29kZT4lcz0lczwvY29kZT4n LAogICAgICAgICAgICAgICAgICRwLCAkdCk7CiAgICAgICgkdGFnKSA9ICgkdGFnID1+IFZBTElE X1RBRzIpCiAgICAgICAgb3IgZmF0YWwoJzUwMCBJbnRlcm5hbCBFcnJvcicsCiAgICAgICAgICAg ICAgICAgJ0ludmFsaWQgdGFnL2JyYW5jaCBuYW1lIGluIHJldmlzaW9uOiA8Y29kZT4lcz0lczwv Y29kZT4nLAogICAgICAgICAgICAgICAgICRwLCAkdCk7CiAgICAgICRpbnB1dHskcH0gLj0gJzon IC4gJHRhZzsKICAgIH0KICB9Cn0KJHQgPSBkZWZpbmVkKCRxdWVyeXtvbmx5X3dpdGhfdGFnfSkg PwogICRxdWVyeXtvbmx5X3dpdGhfdGFnfSA6ICRxdWVyeXtvbmx5X29uX2JyYW5jaH07ICMgQmFj a3dhcmRzIGNvbXBhdGliaWxpdHkuCmlmIChkZWZpbmVkKCR0KSkgewogICgkaW5wdXR7b25seV93 aXRoX3RhZ30pID0gKCR0ID1+IFZBTElEX1RBRzEpCiAgICBvciBmYXRhbCgnNTAwIEludGVybmFs IEVycm9yJywKICAgICAgICAgICAgICdJbnZhbGlkIHRhZy9icmFuY2ggbmFtZTogPGNvZGU+JXM8 L2NvZGU+JywgJHQpOwogICgkaW5wdXR7b25seV93aXRoX3RhZ30pID0gKCR0ID1+IFZBTElEX1RB RzIpCiAgICBvciBmYXRhbCgnNTAwIEludGVybmFsIEVycm9yJywKICAgICAgICAgICAgICdJbnZh bGlkIHRhZy9icmFuY2ggbmFtZTogPGNvZGU+JXM8L2NvZGU+JywgJHQpOwp9CiR0ID0gJHF1ZXJ5 e2xvZ3NvcnR9OwppZiAoZGVmaW5lZCgkdCkpIHsKICAoJGlucHV0e2xvZ3NvcnR9KSA9ICgkdCA9 fiAvXihjdnN8ZGF0ZXxyZXYpJC8pCiAgICBvciBmYXRhbCgnNTAwIEludGVybmFsIEVycm9yJywK ICAgICAgICAgICAgICdVbnN1cHBvcnRlZCBsb2cgc29ydCBrZXk6IDxjb2RlPiVzPC9jb2RlPics ICR0KTsKfQokdCA9ICRxdWVyeXtmfTsKaWYgKGRlZmluZWQoJHQpKSB7CiAgKCRpbnB1dHtmfSkg PSAoJHQgPX4gL14oKFtoSF18W3Vjc11jPyl8ZXh0XGQqKSQvKQogICAgb3IgZmF0YWwoJzUwMCBJ bnRlcm5hbCBFcnJvcicsCiAgICAgICAgICAgICAnVW5zdXBwb3J0ZWQgZGlmZiBmb3JtYXQ6IDxj b2RlPiVzPC9jb2RlPicsICR0KTsKfQokdCA9ICRxdWVyeXtzb3J0Ynl9OwppZiAoZGVmaW5lZCgk dCkpIHsKICAoJGlucHV0e3NvcnRieX0pID0gKCR0ID1+IC9eKGZpbGV8ZGF0ZXxyZXZ8YXV0aG9y fGxvZykkLykKICAgIG9yIGZhdGFsKCc1MDAgSW50ZXJuYWwgRXJyb3InLAogICAgICAgICAgICAg J1Vuc3VwcG9ydGVkIGRpciBzb3J0IGtleTogPGNvZGU+JXM8L2NvZGU+JywgJHQpOwp9CiR0ID0g JHF1ZXJ5eydjb250ZW50LXR5cGUnfTsKaWYgKGRlZmluZWQoJHQpKSB7CiAgKCRpbnB1dHsnY29u dGVudC10eXBlJ30pID0gKCR0ID1+IG18XihbLTAtOUEtWmEtel0rL1stMC05QS1aYS16XC5cK10r KSR8KQogICAgb3IgZmF0YWwoJzUwMCBJbnRlcm5hbCBFcnJvcicsCiAgICAgICAgICAgICAnVW5z dXBwb3J0ZWQgY29udGVudCB0eXBlOiA8Y29kZT4lczwvY29kZT4nLCAkdCk7Cn0KJHQgPSAkcXVl cnl7Y3Zzcm9vdH07CmlmIChkZWZpbmVkKCR0KSkgewogICgkaW5wdXR7Y3Zzcm9vdH0pID0gKCR0 ID1+IC9eKFtbOnByaW50Ol1dKykkLykKICAgIG9yIGZhdGFsKCc1MDAgSW50ZXJuYWwgRXJyb3In LAogICAgICAgICAgICAgJ0ludmFsaWQgc3ltYm9saWMgQ1ZTIHJvb3QgbmFtZTogPGNvZGU+JXM8 L2NvZGU+JywgJHQpOwp9CiR0ID0gJHF1ZXJ5e3BhdGh9OwppZiAoZGVmaW5lZCgkdCkpIHsKICAo JGlucHV0e3BhdGh9KSA9ICgkdCA9fiBWQUxJRF9QQVRIKQogICAgb3IgZmF0YWwoJzUwMCBJbnRl cm5hbCBFcnJvcicsCiAgICAgICAgICAgICAnSW52YWxpZCBwYXRoOiA8Y29kZT4lczwvY29kZT4n LCAkdCk7Cn0KdW5kZWYoJHQpOwp1bmRlZiglcXVlcnkpOwoKIyAtLS0gZW5kIGlucHV0IHBhcmFt ZXRlcnMKCiMKIyBDVlMgcm9vdHMKIwpteSAkcm9vdGZvdW5kID0gMDsKZm9yIChteSAkaSA9IDA7 ICRpIDwgc2NhbGFyKEBDVlNyZXBvc2l0b3JpZXMpOyAkaSArPSAyKSB7CiAgbXkgJGtleSA9ICRD VlNyZXBvc2l0b3JpZXNbJGldOwogIG15ICgkZGVzY3IsICRyb290KSA9IEB7JENWU3JlcG9zaXRv cmllc1skaSsxXX07CiAgJHJvb3QgPSBjYW5vbnBhdGgoJHJvb3QpOwogIHVubGVzcyAoLWQgJHJv b3QpIHsKICAgIHdhcm4oIlJvb3QgJyRyb290JyBkZWZpbmVkIGluIFxAQ1ZTcmVwb3NpdG9yaWVz IGlzIG5vdCBhIGRpcmVjdG9yeSwgIiAuCiAgICAgICAgICdlbnRyeSBpZ25vcmVkJyk7CiAgICBu ZXh0OwogIH0KICAkcm9vdGZvdW5kIHx8PSAxOwogICRjdnN0cmVlZGVmYXVsdCA9ICRrZXkgdW5s ZXNzIGRlZmluZWQoJGN2c3RyZWVkZWZhdWx0KTsKICAkQ1ZTUk9PVGRlc2NyeyRrZXl9ID0gJGRl c2NyOwogICRDVlNST09UeyRrZXl9ID0gJHJvb3Q7CiAgcHVzaChAQ1ZTUk9PVCwgJGtleSk7Cn0K dW5sZXNzICgkcm9vdGZvdW5kKSB7CiAgZmF0YWwoJzUwMCBJbnRlcm5hbCBFcnJvcicsCiAgICAg ICAgJ05vIHZhbGlkIENWUyByb290cyBmb3VuZCEgIFNlZSA8Y29kZT5AQ1ZTcmVwb3NpdG9yaWVz PC9jb2RlPiBpbiAnIC4KICAgICAgICAndGhlIGNvbmZpZ3VyYXRpb24gZmlsZSAoPGNvZGU+JXM8 L2NvZGU+KS4nLAogICAgICAgICRjb25maWcpOwp9CnVuZGVmICRyb290Zm91bmQ7CgojCiMgRGVm YXVsdCBDVlMgcm9vdAojCmlmICghZGVmaW5lZCgkQ1ZTUk9PVHskY3ZzdHJlZWRlZmF1bHR9KSkg ewogIGZhdGFsKCI1MDAgSW50ZXJuYWwgRXJyb3IiLAogICAgICAgICc8Y29kZT4kY3ZzdHJlZWRl ZmF1bHQ8L2NvZGU+IHBvaW50cyB0byBhIHJlcG9zaXRvcnkgKCVzKSBub3QgJyAuCiAgICAgICAg J2RlZmluZWQgaW4gPGNvZGU+QENWU3JlcG9zaXRvcmllczwvY29kZT4gaW4geW91ciBjb25maWd1 cmF0aW9uICcgLgogICAgICAgICdmaWxlICg8Y29kZT4lczwvY29kZT4pLicsCiAgICAgICAgJGN2 c3RyZWVkZWZhdWx0LAogICAgICAgICRjb25maWcpOwp9CgokREVGQVVMVFZBTFVFe2N2c3Jvb3R9 ID0gJGN2c3RyZWVkZWZhdWx0OwoKd2hpbGUgKG15ICgka2V5LCAkZGVmdmFsKSA9IGVhY2ggJURF RkFVTFRWQUxVRSkgewoKICAjIFJlcGxhY2Ugbm90IGdpdmVuIHBhcmFtZXRlcnMgd2l0aCBkZWZh dWx0cy4KICBuZXh0IHVubGVzcyAoZGVmaW5lZCgkZGVmdmFsKSAmJiAkZGVmdmFsID1+IC9cUy8g JiYgIWRlZmluZWQoJGlucHV0eyRrZXl9KSk7CgogICMgRW1wdHkgY2hlY2tib3hlcyBpbiBmb3Jt cyByZXR1cm4gbm90aGluZywgc28gd2UgZGVmaW5lIGEgaGVscGVyIHBhcmFtZXRlcgogICMgaW4g dGhlc2UgZm9ybXMgKGNvcHQpIHdoaWNoIGluZGljYXRlcyB0aGF0IHdlIGp1c3Qgc2V0IHBhcmFt ZXRlcnMgd2l0aCBhCiAgIyBjaGVja2JveC4KICBpZiAoJGlucHV0e2NvcHR9KSB7CgogICAgIyAn Y29wdCcgaXMgc2V0IC0+IHRoZSByZXN1bHQgb2YgZW1wdHkgaW5wdXQgY2hlY2tib3gKICAgICMg LT4gc2V0IHRvIHplcm8gKGRpc2FibGUpIGlmIGRlZmF1bHQgaXMgYSBib29sZWFuICgwfDEpLgog ICAgJGlucHV0eyRrZXl9ID0gMCBpZiAoJGRlZnZhbCBlcSAnMCcgfHwgJGRlZnZhbCBlcSAnMScp OwoKICB9IGVsc2UgewoKICAgICMgJ2NvcHQnIGlzbid0IHNldCAtLT4gZW1wdHkgaW5wdXQgaXMg bm90IHRoZSByZXN1bHQKICAgICMgb2YgZW1wdHkgaW5wdXQgY2hlY2tib3ggLS0+IHNldCBkZWZh dWx0LgogICAgJGlucHV0eyRrZXl9ID0gJGRlZnZhbDsKICB9Cn0KCiRiYXJlcXVlcnkgPSAiIjsK bXkgQGJhcmVxdWVyeTsKZm9yZWFjaCAoQHN0aWNreXZhcnMpIHsKCiAgIyBjb25zdHJ1Y3QgYSBx dWVyeSBzdHJpbmcgd2l0aCB0aGUgc3RpY2t5IG5vbiBkZWZhdWx0IHBhcmFtZXRlcnMgc2V0CiAg aWYgKGRlZmluZWQoJGlucHV0eyRffSkKICAgICAgJiYgIShkZWZpbmVkKCRERUZBVUxUVkFMVUV7 JF99KSAmJiAkaW5wdXR7JF99IGVxICRERUZBVUxUVkFMVUV7JF99KSkKICB7CiAgICBwdXNoKEBi YXJlcXVlcnksIGpvaW4oJz0nLCB1cmlfZXNjYXBlKCRfKSwgdXJpX2VzY2FwZSgkaW5wdXR7JF99 KSkpOwogIH0KfQoKaWYgKCRhbGxvd19lbnNjcmlwdCkgewogIHB1c2goQERJRkZUWVBFUywgcXco dWMgY2Mgc2MpKTsKICBARElGRlRZUEVTe3F3KHVjIGNjIHNjKX0gPSAoCiAgICB7CiAgICAgJ2Rl c2NyJyAgID0+ICd1bmlmaWVkLCBjb2xvcmVkJywKICAgICAnb3B0cycgICAgPT4gWyctdSddLAog ICAgICdjb2xvcmVkJyA9PiAwLAogICAgfSwKICAgIHsKICAgICAnZGVzY3InICAgPT4gJ2NvbnRl eHQsIGNvbG9yZWQnLAogICAgICdvcHRzJyAgICA9PiBbJy1jJ10sCiAgICAgJ2NvbG9yZWQnID0+ IDAsCiAgICB9LAogICAgewogICAgICdkZXNjcicgICA9PiAnc2lkZSBieSBzaWRlLCBjb2xvcmVk JywKICAgICAjIHdpZHRoPTE2OCBzaG91bGQgYmUgZW5vdWdoIHRvIHN1cHBvcnQgODAgY2hhcmFj dGVyIGxpbmUgbGVuZ3RocwogICAgICdvcHRzJyAgICA9PiBbJy0tc2lkZS1ieS1zaWRlJywgJy0t d2lkdGg9MTY4J10sCiAgICAgJ2NvbG9yZWQnID0+IDAsCiAgICB9LAogICk7Cn0gZWxzZSB7CiAg IyBObyBFbnNjcmlwdCAtPiByZXNwZWN0IGRpZmZ0eXBlLCBidXQgZG9uJ3Qgb2ZmZXIgY29sb3Jp emF0aW9uLgogIGlmICgkaW5wdXR7Zn0gJiYgJGlucHV0e2Z9ID1+IC9eKFt1Y3NdKWMkLykgewog ICAgJGlucHV0e2Z9ID0gJDE7CiAgfQp9CgojIGlzIHRoZXJlIGFueSBxdWVyeSA/CmlmIChAYmFy ZXF1ZXJ5KSB7CiAgJGJhcmVxdWVyeSA9IGpvaW4gKCc7JywgQGJhcmVxdWVyeSk7CiAgJHF1ZXJ5 ICAgICA9ICI/JGJhcmVxdWVyeSI7CiAgJGJhcmVxdWVyeSA9ICI7JGJhcmVxdWVyeSI7Cn0gZWxz ZSB7CiAgJHF1ZXJ5ID0gIiI7Cn0KdW5kZWYgQGJhcmVxdWVyeTsKCmlmIChkZWZpbmVkKCRpbnB1 dHtwYXRofSkpIHsKICByZWRpcmVjdCgiJHNjcmlwdG5hbWUvJGlucHV0e3BhdGh9JHF1ZXJ5Iik7 Cn0KCiMgZ2V0IGFjdHVhbCBwYXJhbWV0ZXJzCnsKICBteSAkc29ydGJ5ID0gJGlucHV0e3NvcnRi eX0gfHwgJ2ZpbGUnOwogICRieWRhdGUgICAgPSAwOwogICRieXJldiAgICAgPSAwOwogICRieWF1 dGhvciAgPSAwOwogICRieWxvZyAgICAgPSAwOwogICRieWZpbGUgICAgPSAwOwogIGlmICgkc29y dGJ5IGVxICdkYXRlJykgewogICAgJGJ5ZGF0ZSA9IDE7CiAgfSBlbHNpZiAoJHNvcnRieSBlcSAn cmV2JykgewogICAgJGJ5cmV2ID0gMTsKICB9IGVsc2lmICgkc29ydGJ5IGVxICdhdXRob3InKSB7 CiAgICAkYnlhdXRob3IgPSAxOwogIH0gZWxzaWYgKCRzb3J0YnkgZXEgJ2xvZycpIHsKICAgICRi eWxvZyA9IDE7CiAgfSBlbHNlIHsKICAgICRieWZpbGUgPSAxOwogIH0KfQoKJGRlZmF1bHREaWZm VHlwZSA9ICRpbnB1dHtmfTsKCiRsb2dzb3J0ID0gJGlucHV0e2xvZ3NvcnR9OwoKIyBhbHRlcm5h dGUgQ1ZTLVRyZWUsIGNvbmZpZ3VyZWQgaW4gY3Zzd2ViLmNvbmYKaWYgKCRpbnB1dHtjdnNyb290 fSAmJiAkQ1ZTUk9PVHskaW5wdXR7Y3Zzcm9vdH19KSB7CiAgJGN2c3RyZWUgPSAkaW5wdXR7Y3Zz cm9vdH07Cn0gZWxzZSB7CiAgJGN2c3RyZWUgPSAkY3ZzdHJlZWRlZmF1bHQ7Cn0KCiRjdnNyb290 ID0gJENWU1JPT1R7JGN2c3RyZWV9OwoKIyBjcmVhdGUgaWNvbnMgb3V0IG9mIGRlc2NyaXB0aW9u CmZvcmVhY2ggbXkgJGsgKGtleXMgJUlDT05TKSB7CiAgbXkgKCRpdHh0LCAkaXBhdGgsICRpd2lk dGgsICRpaGVpZ2h0KSA9IEB7JElDT05TeyRrfX07CiAgbm8gc3RyaWN0ICdyZWZzJzsKICBpZiAo JGlwYXRoKSB7CiAgICAkeyIke2t9aWNvbiJ9ID0KICAgICAgc3ByaW50ZignPGltZyBzcmM9IiVz IiBhbHQ9IiVzIiBib3JkZXI9IjAiIHdpZHRoPSIlZCIgaGVpZ2h0PSIlZCIgLz4nLAogICAgICAg ICAgICAgIGh0bWxxdW90ZSgkaXBhdGgpLCBodG1scXVvdGUoJGl0eHQpLCAkaXdpZHRoLCAkaWhl aWdodCk7CiAgfSBlbHNlIHsKICAgICR7IiR7a31pY29uIn0gPSAkaXR4dDsKICB9Cn0KCm15ICRj b25maWdfY3ZzdHJlZSA9ICIkY29uZmlnLSRjdnN0cmVlIjsKCiMgRG8gc29tZSBzcGVjaWFsIGNv bmZpZ3VyYXRpb24gZm9yIGN2c3RyZWVzCmlmICgtZiAkY29uZmlnX2N2c3RyZWUpIHsKICBkbyAi JGNvbmZpZ19jdnN0cmVlIgogICAgb3IgZmF0YWwoIjUwMCBJbnRlcm5hbCBFcnJvciIsCiAgICAg ICAgICAgICAnRXJyb3IgaW4gbG9hZGluZyBjb25maWd1cmF0aW9uIGZpbGU6ICVzPGJyIC8+PGJy IC8+JXM8YnIgLz4nLAogICAgICAgICAgICAgJGNvbmZpZ19jdnN0cmVlLCAkQCk7Cn0KdW5kZWYg JGNvbmZpZ19jdnN0cmVlOwoKJHJlX3ByY2F0ZWdvcmllcyAgPSAnKD86JyAuIGpvaW4gKCd8Jywg QHByY2F0ZWdvcmllcykgLiAnKScgaWYgQHByY2F0ZWdvcmllczsKJHJlX3Bya2V5d29yZCAgICAg PSBxdW90ZW1ldGEoJHBya2V5d29yZCkgaWYgZGVmaW5lZCgkcHJrZXl3b3JkKTsKJHByY2dpICAg ICAgICAgICAuPSAnJXMnIGlmIGRlZmluZWQoJHByY2dpKSAmJiAkcHJjZ2kgIX4gLyVzLzsKCiRm dWxsbmFtZSAgICAgICAgID0gY2F0ZmlsZSgkY3Zzcm9vdCwgJHdoZXJlKTsKCm15ICRyZXdyaXRl ID0gMDsKaWYgKCRwYXRoaW5mbyA9fiBtfC8vfCkgewogICRwYXRoaW5mbyA9fiB5fC98L3xzOwog ICRyZXdyaXRlID0gMTsKfQppZiAoLWQgJGZ1bGxuYW1lKSB7CiAgaWYgKCRwYXRoaW5mbyAhfiBt fC8kfCkgewogICAgJHBhdGhpbmZvIC49ICcvJzsKICAgICRyZXdyaXRlICAgPSAxOwogIH0KfSBl bHNpZiAoJHBhdGhpbmZvID1+IG18LyR8KSB7CiAgY2hvcCAkcGF0aGluZm87CiAgJHJld3JpdGUg PSAxOwp9CmlmICgkcmV3cml0ZSkgewogIHJlZGlyZWN0KCRzY3JpcHRuYW1lIC4gdXJpX2VzY2Fw ZV9wYXRoKCRwYXRoaW5mbykgLiAkcXVlcnksIDEpOwp9CnVuZGVmICRyZXdyaXRlOwoKdW5kZWYg JHBhdGhpbmZvOwoKaWYgKCEtZCAkY3Zzcm9vdCkgewogIGZhdGFsKCI1MDAgSW50ZXJuYWwgRXJy b3IiLAogICAgICAgICckQ1ZTUk9PVCBub3QgZm91bmQhPHA+VGhlIHNlcnZlciBvbiB3aGljaCB0 aGUgQ1ZTIHRyZWUgbGl2ZXMgaXMgcHJvYmFibHkgZG93bi4gIFBsZWFzZSB0cnkgYWdhaW4gaW4g YSBmZXcgbWludXRlcy4nKTsKfQoKIwojIFNob3J0LWNpcmN1aXQgZm9yYmlkZGVuIHRoaW5ncy4g IE5vdGUgdGhhdCAkZnVsbG5hbWUgc2hvdWxkIG5vdCBjaGFuZ2UKIyBhZnRlciB0aGlzLCBiZWNh dXNlIHRoZSByZXN0IG9mIHRoZSBjb2RlIGFzc3VtZXMgdGhpcyBjaGVjayBoYXMgYWxyZWFkeQoj IGJlZW4gZG9uZS4KIwpmYXRhbCgnNDAzIEZvcmJpZGRlbicsICdBY2Nlc3MgdG8gJXMgZm9yYmlk ZGVuLicsICR3aGVyZSkKICBpZiBmb3JiaWRkZW4oJGZ1bGxuYW1lKTsKCiMKIyBIYW5kbGUgdGFy YmFsbCBkb3dubG9hZHMgYmVmb3JlIGFueSBoZWFkZXJzIGFyZSBvdXRwdXQuCiMKaWYgKCRpbnB1 dHt0YXJiYWxsfSkgewogIGZhdGFsKCc0MDMgRm9yYmlkZGVuJywgJ0Rvd25sb2FkaW5nIHRhcmJh bGxzIGlzIHByb2hpYml0ZWQuJykKICAgIHVubGVzcyAkYWxsb3dfdGFyOwoKICBteSAoJG1vZHVs ZSkgID0gICgkd2hlcmUgPX4gbSxeLz8oLiopLCk7ICAgICMgdW50YWludAogICRtb2R1bGUgICAg ICAgPX4gcywvKFteL10qKSQsLDsKICBteSAoJGV4dCkgICAgID0gICgkMSA9fiAvKFwudCg/OmFy XC4pP2d6fFwuemlwKSQvKTsKICBteSAoJGJhc2VkaXIpID0gICgkbW9kdWxlID1+IG0sKFteL10r KSQsKTsKCiAgaWYgKCRiYXNlZGlyIGVxICcnIHx8ICRtb2R1bGUgZXEgJycpIHsKICAgIGZhdGFs KCc1MDAgSW50ZXJuYWwgRXJyb3InLAogICAgICAgICAgJ1lvdSBjYW5ub3QgZG93bmxvYWQgdGhl IHRvcCBsZXZlbCBkaXJlY3RvcnkuJyk7CiAgfQoKICBteSAkaXN0YXIgPSAoJGV4dCBlcSAnLnRh ci5neicgfHwgJGV4dCBlcSAnLnRneicpOwogIGlmICgkaXN0YXIpIHsKICAgIGZhdGFsKCc1MDAg SW50ZXJuYWwgRXJyb3InLCAndGFyIGNvbW1hbmQgbm90IGZvdW5kLicpIHVubGVzcyAkQ01Ee3Rh cn07CiAgICBmYXRhbCgnNTAwIEludGVybmFsIEVycm9yJywgJ2d6aXAgY29tbWFuZCBub3QgZm91 bmQuJykgdW5sZXNzICRDTUR7Z3ppcH07CiAgfQogIG15ICRpc3ppcCA9ICgkZXh0IGVxICcuemlw Jyk7CiAgaWYgKCRpc3ppcCAmJiAhJENNRHt6aXB9KSB7CiAgICBmYXRhbCgnNTAwIEludGVybmFs IEVycm9yJywgJ3ppcCBjb21tYW5kIG5vdCBmb3VuZC4nKTsKICB9CiAgaWYgKCEkaXN0YXIgJiYg ISRpc3ppcCkgewogICAgZmF0YWwoJzUwMCBJbnRlcm5hbCBFcnJvcicsICdVbnN1cHBvcnRlZCBh cmNoaXZlIHR5cGUuJyk7CiAgfQoKICBteSAkdG1wZXhwb3J0ZGlyOwogIGV2YWwgewogICAgbG9j YWwgJFNJR3tfX0RJRV9ffTsKICAgICMgRG9uJ3QgdXNlIHRoZSBDTEVBTlVQIGFyZ3VtZW50IHRv IHRlbXBkaXIoKSBoZXJlLCBzaW5jZSB3ZSBtaWdodCBiZSB1bmRlcgogICAgIyBtb2RfcGVybCAo dGhlIHByb2Nlc3MgcnVucyBmb3IgYSBsb25nIHRpbWUpLCB1bmxpbmsgZXhwbGljaXRseSBsYXRl ci4KICAgICR0bXBleHBvcnRkaXIgPSB0ZW1wZGlyKCcuY3Zzd2ViLlhYWFhYWFhYJywgVE1QRElS ID0+IDEpOwogIH07CiAgaWYgKCRAKSB7CiAgICBmYXRhbCgnNTAwIEludGVybmFsIEVycm9yJywg J1VuYWJsZSB0byBtYWtlIHRlbXBvcmFyeSBkaXJlY3Rvcnk6ICVzJywgJEApOwogIH0KICBpZiAo IWNoZGlyKCR0bXBleHBvcnRkaXIpKSB7CiAgICBmYXRhbCgnNTAwIEludGVybmFsIEVycm9yJywK ICAgICAgICAgICJDYW4ndCBjZCB0byB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzOiAlcyIsICR0bXBl eHBvcnRkaXIsICQhKTsKICB9CgogIG15IEBmYXRhbDsKICBteSAkdGFnID0gJGlucHV0e29ubHlf d2l0aF90YWd9IHx8ICdIRUFEJzsKICAkdGFnID0gJ0hFQUQnIGlmICgkdGFnIGVxICdNQUlOJyk7 CgogIG15IEBjbWQgPQogICAgKCRDTUR7Y3ZzfSwgQGN2c19vcHRpb25zLCAnLVFkJywgJGN2c3Jv b3QsICdleHBvcnQnLCAnLXInLCAkdGFnLAogICAgICctZCcsICRiYXNlZGlyLCAkbW9kdWxlKTsK ICBteSAkZXhwb3J0X2VycjsKICBteSAoJGVycmNvZGUsICRlcnIpID0gcnVucHJvYyhcQGNtZCwg JzI+JywgXCRleHBvcnRfZXJyKTsKICBpZiAoJGVycmNvZGUpIHsKICAgIEBmYXRhbCA9CiAgICAg ICgnNTAwIEludGVybmFsIEVycm9yJywKICAgICAgICdFeHBvcnQgZmFpbHVyZSAoZXhpdCBzdGF0 dXMgJXMpLCBvdXRwdXQ6IDxwcmU+JXM8L3ByZT4nLAogICAgICAgJGVycmNvZGUsICRlcnIgfHwg JGV4cG9ydF9lcnIpOwoKICB9IGVsc2UgewoKICAgICR8ID0gMTsgICAgIyBFc3NlbnRpYWwgdG8g Z2V0IHRoZSBidWZmZXJpbmcgcmlnaHQuCiAgICBsb2NhbCAoKlRBUl9PVVQpOwoKICAgIG15IChA Y21kLCAkY3R5cGUpOwogICAgaWYgKCRpc3RhcikgewogICAgICBteSBAdGFyID0gKCRDTUR7dGFy fSwgQHRhcl9vcHRpb25zLCAnLWNmJywgJy0nLCAkYmFzZWRpcik7CiAgICAgIG15IEBnemlwID0g KCRDTUR7Z3ppcH0sIEBnemlwX29wdGlvbnMsICctYycpOwogICAgICBwdXNoKEBjbWQsIFxAdGFy LCAnfCcsIFxAZ3ppcCk7CiAgICAgICRjdHlwZSA9ICdhcHBsaWNhdGlvbi94LWd6aXAnOwogICAg fSBlbHNpZiAoJGlzemlwKSB7CiAgICAgIG15IEB6aXAgPSAoJENNRHt6aXB9LCBAemlwX29wdGlv bnMsICctcicsICctJywgJGJhc2VkaXIpOwogICAgICBwdXNoKEBjbWQsIFxAemlwLCBcJycpOwog ICAgICAkY3R5cGUgPSAnYXBwbGljYXRpb24vemlwJzsKICAgIH0KICAgIHB1c2goQGNtZCwgJz5w aXBlJywgXCpUQVJfT1VUKTsKCiAgICBteSAoJGgsICRlcnIpID0gc3RhcnRwcm9jKEBjbWQpOwog ICAgaWYgKCRoKSB7CiAgICAgIHByaW50ICJDb250ZW50LVR5cGU6ICRjdHlwZVxyXG5cclxuIjsK ICAgICAgbG9jYWwgJC8gPSB1bmRlZjsKICAgICAgcHJpbnQgPFRBUl9PVVQ+OwogICAgICAkaC0+ ZmluaXNoKCk7CiAgICB9IGVsc2UgewogICAgICBAZmF0YWwgPSAoJzUwMCBJbnRlcm5hbCBFcnJv cicsCiAgICAgICAgICAgICAgICAnJXMgZmFpbHVyZSAoZXhpdCBzdGF0dXMgJXMpLCBvdXRwdXQ6 IDxwcmU+JXM8L3ByZT4nLAogICAgICAgICAgICAgICAgJGlzdGFyID8gJ1RhcicgOiAnWmlwJywg JD8gPj4gOCB8fCAtMSwgJGVycik7CiAgICB9CiAgfQoKICAjIENsZWFuIHVwLgogIHJtdHJlZSgk dG1wZXhwb3J0ZGlyKTsKCiAgJmZhdGFsKEBmYXRhbCkgaWYgQGZhdGFsOwoKICBleGl0Owp9Cgoj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBWaWV3IGEgZGlyZWN0b3J5CiMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKaWYgKC1kICRmdWxsbmFtZSkgewoKICBteSAkZGggPSBk byB7IGxvY2FsICgqREgpOyB9OwogIG9wZW5kaXIoJGRoLCAkZnVsbG5hbWUpIG9yIGZhdGFsKCI0 MDQgTm90IEZvdW5kIiwgJyVzOiAlcycsICR3aGVyZSwgJCEpOwogIG15IEBkaXIgPSBncmVwKCFm b3JiaWRkZW4oY2F0ZmlsZSgkZnVsbG5hbWUsICRfKSksIHJlYWRkaXIoJGRoKSk7CiAgY2xvc2Vk aXIoJGRoKTsKICBteSBAc3ViTGV2ZWxGaWxlcyA9IGZpbmRMYXN0TW9kaWZpZWRTdWJkaXJzKEBk aXIpIGlmICRzaG93X3N1YmRpcl9sYXN0bW9kOwogIG15IEB1bnJlYWRhYmxlID0gZ2V0RGlyTG9n cygkY3Zzcm9vdCwgJHdoZXJlLCBAc3ViTGV2ZWxGaWxlcyk7CgogIGlmICgkd2hlcmUgZXEgJy8n KSB7CiAgICBodG1sX2hlYWRlcigkZGVmYXVsdHRpdGxlKTsKICAgICRsb25nX2ludHJvID1+IHMv ISFDVlNST09UZGVzY3IhIS8kQ1ZTUk9PVGRlc2NyeyRjdnN0cmVlfS9nOwogICAgcHJpbnQgJGxv bmdfaW50cm87CiAgfSBlbHNlIHsKICAgIGh0bWxfaGVhZGVyKCR3aGVyZSk7CiAgICBteSAkaHRt bCA9ICgtZiBjYXRmaWxlKCRmdWxsbmFtZSwgJ1JFQURNRS5jdnMuaHRtbCx2JykgfHwKICAgICAg ICAgICAgICAgIC1mIGNhdGZpbGUoJGZ1bGxuYW1lLCAnQXR0aWMnLCAnUkVBRE1FLmN2cy5odG1s LHYnKSk7CiAgICBteSAkdGV4dCA9ICghJGh0bWwgJiYKICAgICAgICAgICAgICAgICgtZiBjYXRm aWxlKCRmdWxsbmFtZSwgJ1JFQURNRS5jdnMsdicpIHx8CiAgICAgICAgICAgICAgICAgLWYgY2F0 ZmlsZSgkZnVsbG5hbWUsICdBdHRpYycsICdSRUFETUUuY3ZzLHYnKSkpOwogICAgaWYgKCRodG1s IHx8ICR0ZXh0KSB7CiAgICAgIG15ICRyZXYgPSAkaW5wdXR7b25seV93aXRoX3RhZ30gfHwgJ0hF QUQnOwogICAgICBteSAkY3IgPSBhYnNfcGF0aCgkY3Zzcm9vdCkgfHwgJGN2c3Jvb3Q7CiAgICAg IG15ICRjbyA9ICIkd2hlcmUvUkVBRE1FLmN2cy5odG1sIiBpZiAkaHRtbDsKICAgICAgJGNvIHx8 PSAiJHdoZXJlL1JFQURNRS5jdnMiIGlmICR0ZXh0OwogICAgICAjIGFic19wYXRoKCkgdGFpbnRz IHdoZW4gcnVuIGFzIGEgQ0dJLi4uCiAgICAgIGlmICgkY3IgPX4gVkFMSURfUEFUSCkgewogICAg ICAgICRjciA9ICQxOwogICAgICB9IGVsc2UgewogICAgICAgIGZhdGFsKCc1MDAgSW50ZXJuYWwg RXJyb3InLCAnSWxsZWdhbCBDVlMgcm9vdDogPGNvZGU+JXM8L2NvZGU+JywgJGNyKTsKICAgICAg fQogICAgICBteSBAY21kID0gKCRDTUR7Y3ZzfSwgQGN2c19vcHRpb25zLCAnLWQnLCAkY3IsICdj bycsICctcCcsICItciRyZXYiLCRjbyk7CiAgICAgIGxvY2FsICgqQ1ZTX09VVCwgKkNWU19FUlIp OwogICAgICBteSAoJGgsICRlcnIpID0gc3RhcnRwcm9jKFxAY21kLCBcIiIsICc+cGlwZScsIFwq Q1ZTX09VVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMj5waXBlJywgXCpDVlNf RVJSKTsKICAgICAgZmF0YWwoJzUwMCBJbnRlcm5hbCBFcnJvcicsICRlcnIpIHVubGVzcyAkaDsK ICAgICAgaWYgKCRodG1sKSB7CiAgICAgICAgbG9jYWwgJC8gPSB1bmRlZjsKICAgICAgICBwcmlu dCA8Q1ZTX09VVD47CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcHJpbnQgIjxwPlxuIjsKICAgICAg ICB3aGlsZSAoPENWU19PVVQ+KSB7CiAgICAgICAgICBjaG9tcDsKICAgICAgICAgIHByaW50IGh0 bWxxdW90ZSgkXyksICc8YnIgLz4nOwogICAgICAgIH0KICAgICAgICBwcmludCAiPC9wPiI7CiAg ICAgIH0KICAgICAgJGgtPmZpbmlzaCgpOwogICAgfQogICAgcHJpbnQgJHNob3J0X2luc3RydWN0 aW9uOwogIH0KCiAgaWYgKCR1c2VfZGVzY3JpcHRpb25zICYmCiAgICAgIG9wZW4oREVTQywgY2F0 ZmlsZSgkY3Zzcm9vdCwgJ0NWU1JPT1QnLCAnZGVzY3JpcHRpb25zJykpKSB7CiAgICB3aGlsZSAo PERFU0M+KSB7CiAgICAgIGNob21wOwogICAgICBteSAoJGRpciwgJGRlc2NyaXB0aW9uKSA9IC8o XFMrKVxzKyguKikvOwogICAgICAkZGVzY3JpcHRpb25zeyRkaXJ9ID0gJGRlc2NyaXB0aW9uOwog ICAgfQogICAgY2xvc2UoREVTQyk7CiAgfQoKICBwcmludCAiPHA+PGEgbmFtZT1cImRpcmxpc3Rc Ij48L2E+PC9wPlxuIjsKCiAgIyBnaXZlIGRpcmVjdCBhY2Nlc3MgdG8gZGlycwogIGlmICgkd2hl cmUgZXEgJy8nKSB7CiAgICBjaG9vc2VNaXJyb3IoKTsKICAgIGNob29zZUNWU1Jvb3QoKTsKCiAg fSBlbHNlIHsKICAgIHByaW50ICc8cD5DdXJyZW50IGRpcmVjdG9yeTogPGI+JywgY2xpY2thYmxl UGF0aCgkd2hlcmUsIDApLCAnPC9iPic7CiAgICBpZiAoJGN2c2hpc3RvcnlfdXJsKSB7CiAgICAg IChteSAkZCA9ICR3aGVyZSkgPX4gc3xeLyooLio/KS8qJHwkMXw7CiAgICAgIHByaW50ICcgLSAn LCBoaXN0b3J5X2xpbmsoJGQsICcnKTsKICAgIH0KICAgIHByaW50ICI8L3A+XG4iOwogICAgcHJp bnQgIjxwPkN1cnJlbnQgdGFnOiA8Yj4iLCBodG1scXVvdGUoJGlucHV0e29ubHlfd2l0aF90YWd9 KSwgIjwvYj48L3A+XG4iCiAgICAgIGlmICRpbnB1dHtvbmx5X3dpdGhfdGFnfTsKICB9CgogIHBy aW50ICI8aHIgLz5cbiI7CgogIG15ICRpbmZvY29scyA9IDE7CgogIHByaW50Zig8PEVPRiwgJ0Rp cmVjdG9yeSBpbmRleCBvZiAnIC4gaHRtbHF1b3RlKCR3aGVyZSkpOwo8dGFibGUgY2xhc3M9ImRp ciIgd2lkdGg9IjEwMCUlIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IiR0YWJsZXBhZGRp bmciIHN1bW1hcnk9IiVzIj4KPHRyPgpFT0YKICBwcmludGYoJzx0aCBjb2xzcGFuPSIyIiVzPics ICgkYnlmaWxlID8gJyBjbGFzcz0ic29ydGVkIicgOiAnJykpOwoKICBpZiAoJGJ5ZmlsZSkgewog ICAgcHJpbnQgJ0ZpbGUnOwogIH0gZWxzZSB7CiAgICBwcmludCAmbGluaygnRmlsZScsCiAgICAg ICAgICAgICAgICBzcHJpbnRmKCcuLyVzI2Rpcmxpc3QnLCB0b2dnbGVRdWVyeSgnc29ydGJ5Jywg J2ZpbGUnKSkpOwogIH0KICBwcmludCAiPC90aD5cbiI7CgogICMgRG8gbm90IGRpc3BsYXkgdGhl IG90aGVyIGNvbHVtbiBoZWFkZXJzIGlmIHdlIGRvIG5vdCBoYXZlIGFueSBmaWxlcwogICMgd2l0 aCByZXZpc2lvbiBpbmZvcm1hdGlvbi4KICBpZiAoc2NhbGFyKCVmaWxlaW5mbykpIHsKICAgICRp bmZvY29scysrOwogICAgcHJpbnRmKCc8dGglcz4nLCAoJGJ5cmV2ID8gJyBjbGFzcz0ic29ydGVk IicgOiAnJykpOwoKICAgIGlmICgkYnlyZXYpIHsKICAgICAgcHJpbnQgJ1Jldi4nOwogICAgfSBl bHNlIHsKICAgICAgcHJpbnQgJmxpbmsoJ1Jldi4nLAogICAgICAgICAgICAgICAgICBzcHJpbnRm KCcuLyVzI2Rpcmxpc3QnLCB0b2dnbGVRdWVyeSgnc29ydGJ5JywgJ3JldicpKSk7CiAgICB9CiAg ICBwcmludCAiPC90aD5cbiI7CiAgICAkaW5mb2NvbHMrKzsKICAgIHByaW50ZignPHRoJXM+Jywg KCRieWRhdGUgPyAnIGNsYXNzPSJzb3J0ZWQiJyA6ICcnKSk7CgogICAgaWYgKCRieWRhdGUpIHsK ICAgICAgcHJpbnQgJ0FnZSc7CiAgICB9IGVsc2UgewogICAgICBwcmludCAmbGluaygnQWdlJywK ICAgICAgICAgICAgICAgICAgc3ByaW50ZignLi8lcyNkaXJsaXN0JywgdG9nZ2xlUXVlcnkoJ3Nv cnRieScsICdkYXRlJykpKTsKICAgIH0KICAgIHByaW50ICI8L3RoPlxuIjsKCiAgICBpZiAoJHNo b3dfYXV0aG9yKSB7CiAgICAgICRpbmZvY29scysrOwogICAgICBwcmludGYoJzx0aCVzPicsICgk YnlhdXRob3IgPyAnIGNsYXNzPSJzb3J0ZWQiJyA6ICcnKSk7CgogICAgICBpZiAoJGJ5YXV0aG9y KSB7CiAgICAgICAgcHJpbnQgJ0F1dGhvcic7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcHJpbnQK ICAgICAgICAgICZsaW5rKCdBdXRob3InLAogICAgICAgICAgICAgICAgc3ByaW50ZignLi8lcyNk aXJsaXN0JywgdG9nZ2xlUXVlcnkoJ3NvcnRieScsICdhdXRob3InKSkpOwogICAgICB9CiAgICAg IHByaW50ICI8L3RoPlxuIjsKICAgIH0KICAgICRpbmZvY29scysrOwogICAgcHJpbnRmKCc8dGgl cz4nLCAoJGJ5bG9nID8gJyBjbGFzcz0ic29ydGVkIicgOiAnJykpOwoKICAgIGlmICgkYnlsb2cp IHsKICAgICAgcHJpbnQgJ0xhc3QgbG9nIGVudHJ5JzsKICAgIH0gZWxzZSB7CiAgICAgIHByaW50 ICZsaW5rKCdMYXN0IGxvZyBlbnRyeScsCiAgICAgICAgICAgICAgICAgIHNwcmludGYoJy4vJXMj ZGlybGlzdCcsIHRvZ2dsZVF1ZXJ5KCdzb3J0YnknLCAnbG9nJykpKTsKICAgIH0KICAgIHByaW50 ICI8L3RoPlxuIjsKICB9IGVsc2lmICgkdXNlX2Rlc2NyaXB0aW9ucykgewogICAgcHJpbnQgIjx0 aD5EZXNjcmlwdGlvbjwvdGg+XG4iOwogICAgJGluZm9jb2xzKys7CiAgfQogIHByaW50ICI8L3Ry PlxuIjsKCiAgbXkgJGRpcnJvdyA9IDA7CgogIG15ICRpOwogIGxvb2tpbmdmb3JhdHRpYzoKICBm b3IgKCRpID0gMDsgJGkgPD0gJCNkaXI7ICRpKyspIHsKICAgIGlmICgkZGlyWyRpXSBlcSAiQXR0 aWMiKSB7CiAgICAgIGxhc3QgbG9va2luZ2ZvcmF0dGljOwogICAgfQogIH0KCiAgaWYgKCEkaW5w dXR7aGlkZWF0dGljfQogICAgICAmJiAoJGkgPD0gJCNkaXIpCiAgICAgICYmIG9wZW5kaXIoJGRo LCAkZnVsbG5hbWUgLiAnL0F0dGljJykpCiAgewogICAgc3BsaWNlKEBkaXIsICRpLCAxLCBncmVw KChzfF58QXR0aWMvfCwgIW18L1wufCksIHJlYWRkaXIoJGRoKSkpOwogICAgY2xvc2VkaXIoJGRo KTsKICB9CgogIG15ICRoaWRlQXR0aWNUb2dnbGVMaW5rID0KICAgICRpbnB1dHtoaWRlYXR0aWN9 CiAgICA/ICcnCiAgICA6ICZsaW5rKCdbaGlkZV0nLCBzcHJpbnRmKCcuLyVzI2Rpcmxpc3QnLCAm dG9nZ2xlUXVlcnkoJ2hpZGVhdHRpYycpKSk7CgogICMgU29ydCB3aXRob3V0IHRoZSBBdHRpYy8g cGF0aG5hbWUuCiAgIyBwbGFjZSBkaXJlY3RvcmllcyBmaXJzdAoKICBteSAkZmlsZXNleGlzdHM7 CiAgbXkgJGZpbGVzZm91bmQ7CgogIGZvcmVhY2ggbXkgJGZpbGUgKHNvcnQgeyAmZmlsZVNvcnRD bXAgfSBAZGlyKSB7CgogICAgbmV4dCBpZiAoJGZpbGUgZXEgY3VyZGlyKCkpOwoKICAgICMgaWdu b3JlIENWUyBsb2NrIGFuZCBzdGFsZSBORlMgZmlsZXMKICAgIG5leHQgaWYgKCRmaWxlID1+IC9e XCNjdnNcLnxeLHxeXC5uZnMvKTsgIyBcIyBmb3IgWEVtYWNzIGNwZXJsLW1vZGUuLi4KCiAgICAj IENoZWNrIHdoZXRoZXIgdG8gc2hvdyB0aGUgQ1ZTUk9PVCBwYXRoCiAgICBuZXh0IGlmICgkaW5w dXR7aGlkZWN2c3Jvb3R9ICYmICR3aGVyZSBlcSAnLycgJiYgJGZpbGUgZXEgJ0NWU1JPT1QnKTsK CiAgICAjIElzIGl0IGEgZGlyZWN0b3J5PwogICAgbXkgJGlzZGlyID0gLWQgY2F0ZGlyKCRmdWxs bmFtZSwgJGZpbGUpOwoKICAgICMgSWdub3JlIG5vbi1yZWFkYWJsZSBmaWxlcyBhbmQgZGlyZWN0 b3JpZXM/CiAgICBuZXh0IGlmICgkaW5wdXR7aGlkZW5vbnJlYWRhYmxlfSAmJiAoISAtciBfIHx8 ICgkaXNkaXIgJiYgISAteCBfKSkpOwoKICAgIG15ICRhdHRpYyA9ICcnOwogICAgaWYgKCRmaWxl ID1+IHN8XkF0dGljL3x8KSB7CiAgICAgICRhdHRpYyA9ICcgPHNwYW4gY2xhc3M9ImF0dGljIj4o aW4gdGhlIEF0dGljKSAnIC4KICAgICAgICAkaGlkZUF0dGljVG9nZ2xlTGluayAuICc8L3NwYW4+ JzsKICAgIH0KCiAgICBpZiAoJGZpbGUgZXEgdXBkaXIoKSB8fCAkaXNkaXIpIHsKICAgICAgbmV4 dCBpZiAoJGZpbGUgZXEgdXBkaXIoKSAmJiAkd2hlcmUgZXEgJy8nKTsKICAgICAgbXkgKCRyZXYs ICRkYXRlLCAkbG9nLCAkYXV0aG9yLCAkZmlsZW5hbWUsICRrZXl3b3Jkc3Vic3QpID0KICAgICAg ICBAeyRmaWxlaW5mb3skZmlsZX19IGlmIChkZWZpbmVkKCRmaWxlaW5mb3skZmlsZX0pKTsKICAg ICAgcHJpbnRmICI8dHIgY2xhc3M9XCIlc1wiPlxuPHRkIGNsYXNzPVwiZGlyXCIgY29sc3Bhbj1c IjJcIj4iLAogICAgICAgICgkZGlycm93ICUgMikgPyAnZXZlbicgOiAnb2RkJzsKCiAgICAgIGlm ICgkZmlsZSBlcSB1cGRpcigpKSB7CiAgICAgICAgbXkgJHVybCA9ICIuLi8kcXVlcnkiOwogICAg ICAgIHByaW50ICRub2ZpbGVsaW5rcyA/ICRiYWNraWNvbiA6ICZsaW5rKCRiYWNraWNvbiwgJHVy bCk7CiAgICAgICAgcHJpbnQgJyZuYnNwOycsICZsaW5rKCJQYXJlbnQgRGlyZWN0b3J5IiwgJHVy bCk7CgogICAgICB9IGVsc2UgewogICAgICAgIG15ICR1cmwgPSAnLi8nIC4gdXJpX2VzY2FwZV9w YXRoKCRmaWxlKSAuICIvJHF1ZXJ5IjsKICAgICAgICBwcmludCAnPGEgbmFtZT0iJywgaHRtbHF1 b3RlKCRmaWxlKSwgJyI+PC9hPic7CiAgICAgICAgcHJpbnQgJG5vZmlsZWxpbmtzID8gJGRpcmlj b24gOiAmbGluaygkZGlyaWNvbiwgJHVybCk7CiAgICAgICAgcHJpbnQgJyZuYnNwOycsICZsaW5r KGh0bWxxdW90ZSgiJGZpbGUvIiksICR1cmwpLCAkYXR0aWM7CiAgICAgICAgaWYgKCRmaWxlIGVx ICJBdHRpYyIpIHsKICAgICAgICAgIHByaW50ICcgPHNwYW4gY2xhc3M9ImF0dGljIj4nLAogICAg ICAgICAgICAmbGluaygnW3Nob3ddJywKICAgICAgICAgICAgICAgICAgc3ByaW50ZignLi8lcyNk aXJsaXN0JywgJnRvZ2dsZVF1ZXJ5KCdoaWRlYXR0aWMnKSkpLAogICAgICAgICAgICAgICAgICAg ICc8L3NwYW4+JzsKICAgICAgICB9CiAgICAgIH0KCiAgICAgICMgU2hvdyBsYXN0IGNoYW5nZSBp biBkaXIKICAgICAgaWYgKCRmaWxlbmFtZSkgewogICAgICAgIHByaW50ICI8L3RkPlxuPHRkPiZu YnNwOzwvdGQ+XG48dGQgY2xhc3M9XCJhZ2VcIj4iOwogICAgICAgIHByaW50IHJlYWRhYmxlVGlt ZSh0aW1lKCkgLSAkZGF0ZSwgMCkgaWYgJGRhdGU7CiAgICAgICAgcHJpbnQgIjwvdGQ+XG48dGQg Y2xhc3M9XCJhdXRob3JcIj4iLCBodG1scXVvdGUoJGF1dGhvcikKICAgICAgICAgIGlmICRzaG93 X2F1dGhvcjsKICAgICAgICBwcmludCAiPC90ZD5cbjx0ZCBjbGFzcz1cImxvZ1wiPiI7CiAgICAg ICAgJGZpbGVuYW1lID1+IHMlXlteL10rLyUlOwogICAgICAgIHByaW50ICZsaW5rKGh0bWxxdW90 ZSgiJGZpbGVuYW1lLyRyZXYiKSwKICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKCclcy8lcyVz I3JldiVzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaV9lc2NhcGUoJGZpbGUpLCB1 cmlfZXNjYXBlKCRmaWxlbmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcXVlcnks ICRyZXYpKSwgJzxiciAvPic7CiAgICAgICAgaWYgKCRsb2cpIHsKICAgICAgICAgIHByaW50IGh0 bWxpZnkoc3Vic3RyKCRsb2csIDAsICRzaG9ydExvZ0xlbiksICRhbGxvd19kaXJfZXh0cmEpOwog ICAgICAgICAgcHJpbnQgJy4uLicgaWYgKGxlbmd0aCgkbG9nKSA+IDgwKTsKICAgICAgICB9Cgog ICAgICB9IGVsc2UgewogICAgICAgIG15ICRkd2hlcmUgPSAoJHdoZXJlIG5lICcvJyA/ICR3aGVy ZSA6ICcnKSAuICRmaWxlOwoKICAgICAgICBpZiAoJHVzZV9kZXNjcmlwdGlvbnMgJiYgZGVmaW5l ZCAkZGVzY3JpcHRpb25zeyRkd2hlcmV9KSB7CiAgICAgICAgICBwcmludCAnPHRkIGNvbHNwYW49 IicsICgkaW5mb2NvbHMgLSAxKSwgJyI+JzsKICAgICAgICAgIHByaW50ICRkZXNjcmlwdGlvbnN7 JGR3aGVyZX07CgogICAgICAgIH0gZWxzaWYgKCRpbmZvY29scyA+IDEpIHsKCiAgICAgICAgICAj IGNsb3NlIHRoZSByb3cgd2l0aCB0aGUgYXBwcm9wcmlhdGUgbnVtYmVyIG9mCiAgICAgICAgICAj IGNvbHVtbnMsIHNvIHRoYXQgdGhlIHZlcnRpY2FsIHNlcGVyYXRvcnMgYXJlIHZpc2libGUKICAg ICAgICAgIG15ICgkY29scykgPSAkaW5mb2NvbHM7CiAgICAgICAgICB3aGlsZSAoJGNvbHMgPiAx KSB7CiAgICAgICAgICAgIHByaW50ICI8L3RkPlxuPHRkPiZuYnNwOyI7CiAgICAgICAgICAgICRj b2xzLS07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICBwcmludCAiPC90ZD5c bjwvdHI+XG4iOwogICAgICAkZGlycm93Kys7CgogICAgfSBlbHNpZiAoJGZpbGUgPX4gcy8sdiQv LykgewoKICAgICAgbXkgJGZpbGV1cmwgPSAoJGF0dGljID8gJ0F0dGljLycgOiAnJykgLiB1cmlf ZXNjYXBlX3BhdGgoJGZpbGUpOwogICAgICBteSAkdXJsICAgICA9ICcuLycgLiAkZmlsZXVybCAu ICRxdWVyeTsKICAgICAgJGZpbGVzZXhpc3RzKys7CiAgICAgIG5leHQgaWYgKCFkZWZpbmVkKCRm aWxlaW5mb3skZmlsZX0pKTsKICAgICAgbXkgKCRyZXYsICRkYXRlLCAkbG9nLCAkYXV0aG9yLCAk ZmlsZW5hbWUsICRrZXl3b3Jkc3Vic3QpID0KICAgICAgICBAeyRmaWxlaW5mb3skZmlsZX19Owog ICAgICBteSAkaXNiaW5hcnkgPSAka2V5d29yZHN1YnN0IGVxICdiJyA/IDEgOiAwOwogICAgICAk ZmlsZXNmb3VuZCsrOwoKICAgICAgcHJpbnRmICI8dHIgY2xhc3M9XCIlc1wiPlxuIiwgKCRkaXJy b3cgJSAyKSA/ICdldmVuJyA6ICdvZGQnOwogICAgICBwcmludGYgJzx0ZCBjbGFzcz0iZmlsZSIl cz4nLCAkYWxsb3dfY3ZzZ3JhcGggPyAnJyA6ICcgY29sc3Bhbj0iMiInOwoKICAgICAgbXkgJGlj b24gPSAkaXNiaW5hcnkgPyAkYmluZmlsZWljb24gOiAkZmlsZWljb247CiAgICAgIHByaW50ICRu b2ZpbGVsaW5rcyA/ICRpY29uIDogJmxpbmsoJGljb24sICR1cmwpOwogICAgICBwcmludCAnJm5i c3A7JywgJmxpbmsoaHRtbHF1b3RlKCRmaWxlKSwgJHVybCksICRhdHRpYzsKICAgICAgcHJpbnQg JzwvdGQ+PHRkIGNsYXNzPSJncmFwaCI+JywgZ3JhcGhfbGluaygkZmlsZXVybCkgaWYgJGFsbG93 X2N2c2dyYXBoOwogICAgICBwcmludCAiPC90ZD5cbjx0ZCB3aWR0aD1cIjMwXCI+IiwgZGlzcGxh eV9saW5rKCRmaWxldXJsLCAkcmV2KTsKICAgICAgcHJpbnQgIjwvdGQ+XG48dGQgY2xhc3M9XCJh Z2VcIj4iOwogICAgICBwcmludCByZWFkYWJsZVRpbWUodGltZSgpIC0gJGRhdGUsIDApIGlmICRk YXRlOwogICAgICBwcmludCAiPC90ZD5cbjx0ZCBjbGFzcz1cImF1dGhvclwiPiIsIGh0bWxxdW90 ZSgkYXV0aG9yKSBpZiAkc2hvd19hdXRob3I7CiAgICAgIHByaW50ICI8L3RkPlxuPHRkIGNsYXNz PVwibG9nXCI+IjsKCiAgICAgIGlmICgkbG9nKSB7CiAgICAgICAgcHJpbnQgaHRtbGlmeShzdWJz dHIoJGxvZywgMCwgJHNob3J0TG9nTGVuKSwgJGFsbG93X2Rpcl9leHRyYSk7CiAgICAgICAgcHJp bnQgJy4uLicgaWYgKGxlbmd0aCAkbG9nID4gODApOwogICAgICB9CiAgICAgIHByaW50ICI8L3Rk PlxuPC90cj4iOwogICAgICAkZGlycm93Kys7CiAgICB9CiAgICBwcmludCAiXG4iOwogIH0KCiAg cHJpbnQgIjwvdGFibGU+XG4iOwoKICBpZiAoKG15ICRudW0gPSBzY2FsYXIoQHVucmVhZGFibGUp KSAmJiAhICRpbnB1dHtoaWRlbm9ucmVhZGFibGV9KSB7CiAgICBwcmludGYoPDxFT0YsICRudW0s IGh0bWxxdW90ZShqb2luKCcsICcsIEB1bnJlYWRhYmxlKSkpOwo8cD4KIDxiPk5PVEU6PC9iPiBU aGUgZm9sbG93aW5nICVkIHVucmVhZGFibGUgZmlsZXMgd2VyZSBpZ25vcmVkOjxiciAvPgogPGVt PiVzPC9lbT4KPC9wPgpFT0YKICB9CgogIGlmICgkZmlsZXNleGlzdHMgJiYgISRmaWxlc2ZvdW5k KSB7CiAgICBteSAkY3VycnRhZyA9IGRlZmluZWQoJGlucHV0e29ubHlfd2l0aF90YWd9KSA/CiAg ICAgIHNwcmludGYoJyAoJXMpJywgaHRtbHF1b3RlKCRpbnB1dHtvbmx5X3dpdGhfdGFnfSkpIDog Jyc7CiAgICBwcmludGYoPDxFT0YsICRmaWxlc2V4aXN0cywgJGN1cnJ0YWcpOwo8cD4KIDxiPk5P VEU6PC9iPiBUaGVyZSBhcmUgJWQgZmlsZXMsIGJ1dCBub25lIG1hdGNoZXMgdGhlIGN1cnJlbnQg dGFnJXMuCjwvcD4KRU9GCiAgfQoKICBpZiAoJGlucHV0e29ubHlfd2l0aF90YWd9ICYmICghJXRh Z3MgfHwgISR0YWdzeyRpbnB1dHtvbmx5X3dpdGhfdGFnfX0pKSB7CiAgICAldGFncyA9ICVhbGx0 YWdzOwogIH0KCiAgaWYgKHNjYWxhciAldGFncwogICAgICB8fCAkaW5wdXR7b25seV93aXRoX3Rh Z30KICAgICAgfHwgJGVkaXRfb3B0aW9uX2Zvcm0KICAgICAgfHwgZGVmaW5lZCgkaW5wdXR7b3B0 aW9uc30pKQogIHsKICAgIHByaW50ICI8aHIgLz5cbiI7CiAgfQoKICBpZiAoc2NhbGFyICV0YWdz IHx8ICRpbnB1dHtvbmx5X3dpdGhfdGFnfSkgewogICAgcHJpbnQgIjxmb3JtIG1ldGhvZD1cImdl dFwiIGFjdGlvbj1cIi4vXCI+XG48cD5cbiI7CiAgICBmb3JlYWNoIG15ICR2YXIgKEBzdGlja3l2 YXJzKSB7CiAgICAgIHByaW50ZigiPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiJHZhclwi IHZhbHVlPVwiJXNcIiAvPlxuIiwKICAgICAgICAgICAgIGh0bWxxdW90ZSgkaW5wdXR7JHZhcn0p KQogICAgICAgIGlmIChkZWZpbmVkKCRpbnB1dHskdmFyfSkKICAgICAgICAgICAgJiYgKCFkZWZp bmVkKCRERUZBVUxUVkFMVUV7JHZhcn0pCiAgICAgICAgICAgICAgICB8fCAkaW5wdXR7JHZhcn0g bmUgJERFRkFVTFRWQUxVRXskdmFyfSkKICAgICAgICAgICAgJiYgJHZhciBuZSAnb25seV93aXRo X3RhZycpOwogICAgfQogICAgcHJpbnRmKDw8RU9GLCAoJHVzZV9qYXZhX3NjcmlwdCA/ICcgb25j aGFuZ2U9InRoaXMuZm9ybS5zdWJtaXQoKSInIDogJycpKTsKPHNwYW4gY2xhc3M9Im5vd3JhcCI+ CjxsYWJlbCBmb3I9Im9ubHlfd2l0aF90YWciIGFjY2Vzc2tleT0iVCI+U2hvdyBvbmx5IGZpbGVz IHdpdGggdGFnOgo8c2VsZWN0IGlkPSJvbmx5X3dpdGhfdGFnIiBuYW1lPSJvbmx5X3dpdGhfdGFn IiVzPgo8b3B0aW9uIHZhbHVlPSIiPkFsbCB0YWdzIC8gZGVmYXVsdCBicmFuY2g8L29wdGlvbj4K RU9GCiAgICBmb3JlYWNoIG15ICR0YWcgKHJldmVyc2Ugc29ydCB7IGxjICRhIGNtcCBsYyAkYiB9 IGtleXMgJXRhZ3MpIHsKICAgICAgbXkgJHNlbGVjdGVkID0KICAgICAgICBkZWZpbmVkKCRpbnB1 dHtvbmx5X3dpdGhfdGFnfSkgJiYgJGlucHV0e29ubHlfd2l0aF90YWd9IGVxICR0YWc7CiAgICAg IHByaW50ZigiPG9wdGlvbiVzPiVzPC9vcHRpb24+XG4iLAogICAgICAgICAgICAgJHNlbGVjdGVk ID8gJyBzZWxlY3RlZD0ic2VsZWN0ZWQiJyA6ICcnLAogICAgICAgICAgICAgaHRtbHF1b3RlKCR0 YWcpKTsKICAgIH0KICAgIHByaW50Zig8PEVPRiwgaHRtbHF1b3RlKCR3aGVyZSkpOwo8L3NlbGVj dD4KPC9sYWJlbD48L3NwYW4+IDxzcGFuIGNsYXNzPSJub3dyYXAiPgo8bGFiZWwgZm9yPSJwYXRo IiBhY2Nlc3NrZXk9IlAiPk1vZHVsZSBwYXRoIG9yIGFsaWFzOgo8aW5wdXQgdHlwZT0idGV4dCIg aWQ9InBhdGgiIG5hbWU9InBhdGgiIHZhbHVlPSIlcyIgc2l6ZT0iMTUiIC8+PC9sYWJlbD4KPC9z cGFuPgo8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iR28iIGFjY2Vzc2tleT0iRyIgLz4KPC9w Pgo8L2Zvcm0+CkVPRgogIH0KCiAgaWYgKCRhbGxvd190YXIgJiYgJGZpbGVzZm91bmQpIHsKICAg IG15ICgkYmFzZWZpbGUpID0gKCR3aGVyZSA9fiBtLCg/Oi4qLyk/KFteL10rKSwpOwogICAgbXkg JGhhdmV0YXIgPSAkQ01Ee3Rhcn0gJiYgJENNRHtnemlwfTsKICAgIG15ICRoYXZlemlwID0gJENN RHt6aXB9OwogICAgaWYgKGRlZmluZWQoJGJhc2VmaWxlKSAmJiAkYmFzZWZpbGUgbmUgJycgJiYg KCRoYXZldGFyIHx8ICRoYXZlemlwKSkgewogICAgICBteSAkcSA9ICgkcXVlcnkgPyAiJHF1ZXJ5 OyIgOiAnPycpIC4gJ3RhcmJhbGw9MSc7CiAgICAgIHByaW50ICI8aHIgLz5cbiIsCiAgICAgICAg JzxkaXYgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlciI+RG93bmxvYWQgdGhpcyBkaXJlY3Rvcnkg aW4gJzsKICAgICAgIyBNYW5nbGUgdGhlIGZpbGVuYW1lIHNvIGJyb3dzZXJzIHNob3cgYSByZWFz b25hYmxlIGZpbGVuYW1lIHRvIGRvd25sb2FkLgogICAgICBteSBAdHlwZXMgPSAoKTsKICAgICAg JGJhc2VmaWxlID0gdXJpX2VzY2FwZSgkYmFzZWZpbGUpOwogICAgICBwdXNoKEB0eXBlcywgJmxp bmsoJ3RhcmJhbGwnLCAiJGJhc2VmaWxlLnRhci5neiRxIikpIGlmICRoYXZldGFyOwogICAgICBw dXNoKEB0eXBlcywgJmxpbmsoJ3ppcCBhcmNoaXZlJywgIiRiYXNlZmlsZS56aXAkcSIpKSBpZiAk aGF2ZXppcDsKICAgICAgcHJpbnQgam9pbignIG9yICcsIEB0eXBlcyksICI8L2Rpdj5cbiI7CiAg ICB9CiAgfQoKICBpZiAoJGVkaXRfb3B0aW9uX2Zvcm0gfHwgZGVmaW5lZCgkaW5wdXR7b3B0aW9u c30pKSB7CgogICAgcHJpbnQgPDxFT0Y7Cjxmb3JtIG1ldGhvZD0iZ2V0IiBhY3Rpb249Ii4vIj4K PGZpZWxkc2V0Pgo8bGVnZW5kPkdlbmVyYWwgb3B0aW9uczwvbGVnZW5kPgo8aW5wdXQgdHlwZT0i aGlkZGVuIiBuYW1lPSJjb3B0IiB2YWx1ZT0iMSIgLz4KRU9GCiAgICBmb3IgbXkgJHYgcXcoaGlk ZWN2c3Jvb3QgaGlkZW5vbnJlYWRhYmxlKSB7CiAgICAgIHByaW50ZihxcXs8aW5wdXQgdHlwZT0i aGlkZGVuIiBuYW1lPSIlcyIgdmFsdWU9IiVzIiAvPlxufSwKICAgICAgICAgICAgICR2LCAkaW5w dXR7JHZ9IHx8IDApOwogICAgfQogICAgaWYgKCRjdnN0cmVlIG5lICRjdnN0cmVlZGVmYXVsdCkg ewogICAgICBwcmludCAiPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiY3Zzcm9vdFwiIHZh bHVlPVwiJGN2c3RyZWVcIiAvPlxuIjsKICAgIH0KICAgIHByaW50IDw8RU9GOwo8dGFibGUgc3Vt bWFyeT0iR2VuZXJhbCBvcHRpb25zIj4KPHRyPgo8dGQgY2xhc3M9Im9wdC1sYWJlbCI+CjxsYWJl bCBmb3I9InNvcnRieSIgYWNjZXNza2V5PSJGIj5Tb3J0IGZpbGVzIGJ5OjwvbGFiZWw+CjwvdGQ+ Cjx0ZCBjbGFzcz0ib3B0LXZhbHVlIj4KPHNlbGVjdCBpZD0ic29ydGJ5IiBuYW1lPSJzb3J0Ynki Pgo8b3B0aW9uIHZhbHVlPSIiPkZpbGU8L29wdGlvbj4KRU9GCiAgICBwcmludCAiPG9wdGlvbiIs ICRieWRhdGUgPyAnIHNlbGVjdGVkPSJzZWxlY3RlZCInIDogJycsCiAgICAgICIgdmFsdWU9XCJk YXRlXCI+QWdlPC9vcHRpb24+XG4iOwogICAgcHJpbnQgIjxvcHRpb24iLCAkYnlhdXRob3IgPyAn IHNlbGVjdGVkPSJzZWxlY3RlZCInIDogJycsCiAgICAgICIgdmFsdWU9XCJhdXRob3JcIj5BdXRo b3I8L29wdGlvbj5cbiIKICAgICAgICBpZiAkc2hvd19hdXRob3I7CiAgICBwcmludCAiPG9wdGlv biIsICRieXJldiA/ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIicgOiAnJywKICAgICAgIiB2YWx1ZT1c InJldlwiPlJldmlzaW9uPC9vcHRpb24+XG4iOwogICAgcHJpbnQgIjxvcHRpb24iLCAkYnlsb2cg PyAnIHNlbGVjdGVkPSJzZWxlY3RlZCInIDogJycsCiAgICAgICIgdmFsdWU9XCJsb2dcIj5Mb2cg bWVzc2FnZTwvb3B0aW9uPlxuIjsKICAgIHByaW50IDw8RU9GOwo8L3NlbGVjdD4sCjxsYWJlbCBm b3I9Imlnbm9yZWNhc2UiIGFjY2Vzc2tleT0iSSI+Y2FzZS1pbnNlbnNpdGl2ZToKRU9GCiAgICBw cmludCAnPGlucHV0IGlkPSJpZ25vcmVjYXNlIiBuYW1lPSJpZ25vcmVjYXNlIiB0eXBlPSJjaGVj a2JveCInLAogICAgICAkaW5wdXR7aWdub3JlY2FzZX0gPyAnIGNoZWNrZWQ9ImNoZWNrZWQiJyA6 ICcnLAogICAgICAgICIgdmFsdWU9XCIxXCIgLz48L2xhYmVsPlxuIjsKICAgIHByaW50IDw8RU9G Owo8L3RkPgo8dGQgY2xhc3M9Im9wdC1sYWJlbCI+CjxsYWJlbCBmb3I9ImhpZGVhdHRpYyIgYWNj ZXNza2V5PSJBIj5IaWRlIGZpbGVzIGluIEF0dGljOjwvbGFiZWw+CjwvdGQ+Cjx0ZCBjbGFzcz0i b3B0LXZhbHVlIj4KRU9GCiAgICBwcmludCAnPGlucHV0IGlkPSJoaWRlYXR0aWMiIG5hbWU9Imhp ZGVhdHRpYyIgdHlwZT0iY2hlY2tib3giJywKICAgICAgJGlucHV0e2hpZGVhdHRpY30gPyAnIGNo ZWNrZWQ9ImNoZWNrZWQiJyA6ICcnLCAnIHZhbHVlPSIxIiAvPic7CiAgICBwcmludCA8PEVPRjsK PC90ZD4KPC90cj4KPHRyPgo8dGQgY2xhc3M9Im9wdC1sYWJlbCI+CjxsYWJlbCBmb3I9ImxvZ3Nv cnQiIGFjY2Vzc2tleT0iTCI+U29ydCBsb2cgYnk6PC9sYWJlbD4KPC90ZD4KPHRkIGNsYXNzPSJv cHQtdmFsdWUiPgpFT0YKICAgIHByaW50TG9nU29ydFNlbGVjdCgwKTsKICAgIHByaW50IDw8RU9G Owo8L3RkPgo8dGQgY2xhc3M9Im9wdC1sYWJlbCI+CjxsYWJlbCBmb3I9ImxuIiBhY2Nlc3NrZXk9 Ik4iPlNob3cgbGluZSBudW1iZXJzOjwvbGFiZWw+CjwvdGQ+Cjx0ZCBjbGFzcz0ib3B0LXZhbHVl Ij4KRU9GCiAgICBwcmludCAnPGlucHV0IGlkPSJsbiIgbmFtZT0ibG4iIHR5cGU9ImNoZWNrYm94 IicsCiAgICAgICRpbnB1dHtsbn0gPyAnIGNoZWNrZWQ9ImNoZWNrZWQiJyA6ICcnLCAiIHZhbHVl PVwiMVwiIC8+XG4iOwogICAgcHJpbnQgPDxFT0Y7CjwvdGQ+CjwvdHI+Cjx0cj4KPHRkIGNsYXNz PSJvcHQtbGFiZWwiPgo8bGFiZWwgZm9yPSJmIiBhY2Nlc3NrZXk9IkQiPkRpZmYgZm9ybWF0Ojwv bGFiZWw+CjwvdGQ+Cjx0ZD4KRU9GCiAgICBwcmludERpZmZTZWxlY3QoMCk7CiAgICBwcmludCA8 PEVPRjsKPC90ZD4KPHRkIGNvbHNwYW49IjIiIGNsYXNzPSJvcHQtbGFiZWwiPgo8aW5wdXQgdHlw ZT0ic3VibWl0IiB2YWx1ZT0iQ2hhbmdlIE9wdGlvbnMiIGFjY2Vzc2tleT0iQyIgLz4KPC90ZD4K PC90cj4KPC90YWJsZT4KPC9maWVsZHNldD4KPC9mb3JtPgpFT0YKICB9CiAgaHRtbF9mb290ZXIo KTsKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFZpZXcgRmlsZXMKIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwplbHNpZiAoLWYgJGZ1bGxuYW1lIC4gJyx2JykgewoK ICBpZiAoZGVmaW5lZCgkaW5wdXR7cmV2fSkgfHwgJGRvQ2hlY2tvdXQpIHsKICAgICZkb0NoZWNr b3V0KCRmdWxsbmFtZSwgJGlucHV0e3Jldn0sICRpbnB1dHtvbmx5X3dpdGhfdGFnfSk7CiAgICBn emlwY2xvc2UoKTsKICAgIGV4aXQ7CiAgfQoKICBpZiAoZGVmaW5lZCgkaW5wdXR7YW5ub3RhdGV9 KSAmJiAkYWxsb3dfYW5ub3RhdGUpIHsKICAgICZkb0Fubm90YXRlKCRpbnB1dHthbm5vdGF0ZX0s ICRpbnB1dHtvbmx5X3dpdGhfdGFnfSk7CiAgICBnemlwY2xvc2UoKTsKICAgIGV4aXQ7CiAgfQoK ICBpZiAoZGVmaW5lZCgkaW5wdXR7cjF9KSAmJiBkZWZpbmVkKCRpbnB1dHtyMn0pKSB7CiAgICAm ZG9EaWZmKCRmdWxsbmFtZSwgICRpbnB1dHtyMX0sICAkaW5wdXR7dHIxfSwKICAgICAgICAgICAg JGlucHV0e3IyfSwgJGlucHV0e3RyMn0sICRpbnB1dHtmfSk7CiAgICBnemlwY2xvc2UoKTsKICAg IGV4aXQ7CiAgfQoKICBpZiAoJGFsbG93X2N2c2dyYXBoICYmICRpbnB1dHtncmFwaH0pIHsKICAg IGlmICgkaW5wdXR7bWFrZWltYWdlfSkgewogICAgICBkb0dyYXBoKCk7CiAgICB9IGVsc2Ugewog ICAgICBkb0dyYXBoVmlldygpOwogICAgfQogICAgZ3ppcGNsb3NlKCk7CiAgICBleGl0OwogIH0K CiAgJmRvTG9nKCRmdWxsbmFtZSk7Cn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoj IFZpZXcgRGlmZgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZWxzaWYgKCRmdWxsbmFt ZSA9fiBzL1wuZGlmZiQvLwogICAgICAgJiYgLWYgJGZ1bGxuYW1lIC4gJyx2JyAmJiAkaW5wdXR7 cjF9ICYmICRpbnB1dHtyMn0pCnsKCiAgIyAkd2hlcmUtZGlmZi1yZW1vdmFsIGlmICdjdnMgcmRp ZmYnIGlzIHVzZWQKICAjIC4uIGJ1dCAnY3ZzIHJkaWZmJ2RvZXNuJ3Qgc3VwcG9ydCBzb21lIG9w dGlvbnMKICAjIHJjc2RpZmYgZG9lcyAoLXcgYW5kIC1wKSwgc28gaXQgaXMgZGlzYWJsZWQKICAj ICR3aGVyZSA9fiBzL1wuZGlmZiQvLzsKCiAgIyBBbGxvdyBkaWZmcyB1c2luZyB0aGUgIi5kaWZm IiBleHRlbnNpb24gc28gdGhhdCBicm93c2VycyB0aGF0IGRlZmF1bHQKICAjIHRvIHRoZSBmaWxl bmFtZSBpbiB0aGUgVVJMIHdoZW4gc2F2aW5nIGRvbid0IHNhdmUgZGlmZnMgYXMgZWcuIGZvby5j LgogICZkb0RpZmYoJGZ1bGxuYW1lLCAgJGlucHV0e3IxfSwgICRpbnB1dHt0cjF9LAogICAgICAg ICAgJGlucHV0e3IyfSwgJGlucHV0e3RyMn0sICRpbnB1dHtmfSk7CiAgZ3ppcGNsb3NlKCk7CiAg ZXhpdDsKCn0KCmVsc2lmIChkbyB7IChteSAkdG1wID0gJGZ1bGxuYW1lKSA9fiBzfC8oW14vXSsp JHwvQXR0aWMvJDF8OyAtZiAiJHRtcCx2IiB9KSB7CiAgIyBUaGUgZmlsZSBoYXMgYmVlbiByZW1v dmVkIGFuZCBpcyBpbiB0aGUgQXR0aWMuCiAgIyBTZW5kIGEgcmVkaXJlY3QgcG9pbnRpbmcgdG8g dGhlIGZpbGUgaW4gdGhlIEF0dGljLgogIChteSAkbmV3cGxhY2UgPSAkc2NyaXB0d2hlcmUpID1+ IHN8LyhbXi9dKykkfC9BdHRpYy8kMXw7CiAgaWYgKCRFTlZ7UVVFUllfU1RSSU5HfSBuZSAiIikg ewogICAgcmVkaXJlY3QoIiRuZXdwbGFjZT8kRU5We1FVRVJZX1NUUklOR30iKTsKICB9IGVsc2Ug ewogICAgcmVkaXJlY3QoJG5ld3BsYWNlKTsKICB9CiAgZXhpdDsKCn0KCmVsc2lmICgwICYmICht eSBAZmlsZXMgPSAmc2FmZWdsb2IoJGZ1bGxuYW1lIC4gIix2IikpKSB7CiAgaHR0cF9oZWFkZXIo InRleHQvcGxhaW4iKTsKICBwcmludCAiWW91IG1hdGNoZWQgdGhlIGZvbGxvd2luZyBmaWxlczpc biI7CiAgcHJpbnQgam9pbiAoIlxuIiwgQGZpbGVzKTsKCiAgIyBUT0RPOgogICMgRmluZCB0aGUg dGFncyBmcm9tIGVhY2ggZmlsZQogICMgRGlzcGxheSBhIGZvcm0gb2ZmZXJpbmcgZGlmZnMgYmV0 d2VlbiBzYWlkIHRhZ3MKfQoKZWxzZSB7CiAgIyBBc3N1bWUgaXQncyBhIG1vZHVsZSBuYW1lIHdp dGggYSBwb3RlbnRpYWwgcGF0aCBmb2xsb3dpbmcgaXQuCiAgbXkgJG1vZHVsZTsKICBteSAkeHRy YSA9ICgoJG1vZHVsZSA9ICR3aGVyZSkgPX4gc3woLy4qKXx8KSA/ICQxIDogJyc7CgogICMgSXMg dGhlcmUgYW4gaW5kZXhlZCB2ZXJzaW9uIG9mIG1vZHVsZXM/CiAgbXkgJGZoID0gZG8geyBsb2Nh bCAoKkZIKTsgfTsKICBpZiAob3BlbigkZmgsIGNhdGZpbGUoJGN2c3Jvb3QsICdDVlNST09UJywg J21vZHVsZXMnKSkpIHsKICAgIHdoaWxlICg8JGZoPikgewogICAgICBpZiAoL14oXFMrKVxzKyhc UyspL28KICAgICAgICAgICYmICRtb2R1bGUgZXEgJDEKICAgICAgICAgICYmICRtb2R1bGUgbmUg JDIKICAgICAgICAgICYmIC1kICIkY3Zzcm9vdC8kMiIpCiAgICAgIHsKICAgICAgICBjbG9zZSgk ZmgpOwogICAgICAgIHJlZGlyZWN0KCIkc2NyaXB0bmFtZS8kMiR4dHJhJHF1ZXJ5Iik7CiAgICAg IH0KICAgIH0KICAgIGNsb3NlKCRmaCk7CiAgfQogIGZhdGFsKCI0MDQgTm90IEZvdW5kIiwgJyVz OiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5JywgJHdoZXJlKTsKfQoKZ3ppcGNsb3NlKCk7Cgoj IyBFbmQgTUFJTgoKCnN1YiBwcmludERpZmZTZWxlY3QoJCkKewogIG15ICgkdXNlX2phdmFfc2Ny aXB0KSA9IEBfOwoKICBwcmludCAnPHNlbGVjdCBpZD0iZiIgbmFtZT0iZiInOwogIHByaW50ICcg b25jaGFuZ2U9InRoaXMuZm9ybS5zdWJtaXQoKSInIGlmICR1c2VfamF2YV9zY3JpcHQ7CiAgcHJp bnQgIj5cbiI7CgogIGZvciBteSAkZGlmZnR5cGUgKEBESUZGVFlQRVMpIHsKICAgIHByaW50Zigi PG9wdGlvbiB2YWx1ZT1cIiVzXCIlcz4lczwvb3B0aW9uPlxuIiwKICAgICAgICAgICAkZGlmZnR5 cGUsICRpbnB1dHtmfSBlcSAkZGlmZnR5cGUgPyAnIHNlbGVjdGVkPSJzZWxlY3RlZCInIDogJycs CiAgICAgICAgICAgIlx1JERJRkZUWVBFU3skZGlmZnR5cGV9e2Rlc2NyfSIpOwogIH0KCiAgcHJp bnQgIjwvc2VsZWN0PiI7Cn0KCgpzdWIgcHJpbnREaWZmU2VsZWN0U3RpY2t5VmFycygpCnsKICB3 aGlsZSAobXkgKCRrZXksICR2YWwpID0gZWFjaCAlaW5wdXQpIHsKICAgIG5leHQgaWYgKCRrZXkg ZXEgJ2YnKTsKICAgIG5leHQgaWYgKGRlZmluZWQoJERFRkFVTFRWQUxVRXska2V5fSkgJiYgJERF RkFVTFRWQUxVRXska2V5fSBlcSAkdmFsKTsKICAgIHByaW50ICI8aW5wdXQgdHlwZT1cImhpZGRl blwiIG5hbWU9XCIiLCBodG1scXVvdGUoJGtleSksICJcIiB2YWx1ZT1cIiIsCiAgICAgIGh0bWxx dW90ZSgkdmFsKSwgIlwiIC8+XG4iOwogIH0KfQoKCnN1YiBwcmludExvZ1NvcnRTZWxlY3QoJCkK ewogIG15ICgkdXNlX2phdmFfc2NyaXB0KSA9IEBfOwoKICBwcmludCAnPHNlbGVjdCBpZD0ibG9n c29ydCIgbmFtZT0ibG9nc29ydCInOwogIHByaW50ICcgb25jaGFuZ2U9InRoaXMuZm9ybS5zdWJt aXQoKSInIGlmICR1c2VfamF2YV9zY3JpcHQ7CiAgcHJpbnQgIj5cbiI7CgogIGZvciBteSAkc29y dGtleSAoQExPR1NPUlRLRVlTKSB7CiAgICBwcmludGYoIjxvcHRpb24gdmFsdWU9XCIlc1wiJXM+ JXM8L29wdGlvbj5cbiIsCiAgICAgICAgICAgJHNvcnRrZXksICRsb2dzb3J0IGVxICRzb3J0a2V5 ID8gJyBzZWxlY3RlZD0ic2VsZWN0ZWQiJyA6ICcnLAogICAgICAgICAgICJcdSRMT0dTT1JUS0VZ U3skc29ydGtleX17ZGVzY3J9Iik7CiAgfQoKICBwcmludCAiPC9zZWxlY3Q+IjsKfQoKCiMKIyBG aW5kIHRoZSBsYXN0IG1vZGlmaWVkLCB2ZXJzaW9uIGNvbnRyb2xsZWQgZmlsZXMgaW4gdGhlIGdp dmVuIGRpcmVjdG9yaWVzLgojIENvbXBhcmVzIHNvbGVseSBiYXNlZCBvbiBtb2RpZmljYXRpb24g dGltZXN0YW1wcy4gIEZpbGVzIGluIHRoZSByZXR1cm5lZCBsaXN0CiMgYXJlIHdpdGhvdXQgdGhl ICx2IHN1ZmZpeCwgYW5kIHVucmVhZGFibGUgZmlsZXMgaGF2ZSBiZWVuIGZpbHRlcmVkIG91dC4K IwpzdWIgZmluZExhc3RNb2RpZmllZFN1YmRpcnMoQCkKewogIG15IChAZGlycykgPSBAXzsKCiAg bXkgQGZpbGVzOwogIGZvcmVhY2ggbXkgJGRpcm5hbWUgKEBkaXJzKSB7CiAgICBuZXh0IGlmICgk ZGlybmFtZSBlcSBjdXJkaXIoKSB8fCAkZGlybmFtZSBlcSB1cGRpcigpKTsKICAgIG15ICRkaXIg PSBjYXRkaXIoJGZ1bGxuYW1lLCAkZGlybmFtZSk7CiAgICBuZXh0IGlmICghLWQgJGRpcik7Cgog ICAgbXkgJGRoID0gZG8geyBsb2NhbCAoKkRIKTsgfTsKICAgIG9wZW5kaXIoJGRoLCAkZGlyKSBv ciBuZXh0OwogICAgbXkgKEBmaWxlbmFtZXMpID0gZ3JlcCghZm9yYmlkZGVuKGNhdGZpbGUoJGRp ciwgJF8pKSwgcmVhZGRpcigkZGgpKTsKICAgIGNsb3NlZGlyKCRkaCk7CgogICAgbXkgJGxhc3Rt b2QgICAgID0gdW5kZWY7CiAgICBteSAkbGFzdG1vZHRpbWUgPSB1bmRlZjsKICAgIGZvcmVhY2gg bXkgJGZpbGVuYW1lIChAZmlsZW5hbWVzKSB7CiAgICAgICgkZmlsZW5hbWUpID0KICAgICAgICAo Y2F0ZmlsZSgkZGlybmFtZSwgJGZpbGVuYW1lKSA9fiBWQUxJRF9QQVRIKSBvciBuZXh0OyAjIHVu dGFpbnQKICAgICAgbXkgKCRmaWxlKSA9IGNhdGZpbGUoJGZ1bGxuYW1lLCAkZmlsZW5hbWUpOwog ICAgICBuZXh0IGlmICgkZmlsZW5hbWUgIX4gLyx2JC9vIHx8ICEtZiAkZmlsZSB8fCAhLXIgXyk7 CiAgICAgIG15ICRtb2R0aW1lID0gLU0gXzsKICAgICAgaWYgKCFkZWZpbmVkKCRsYXN0bW9kKSB8 fCAkbW9kdGltZSA8ICRsYXN0bW9kdGltZSkgewogICAgICAgICgkbGFzdG1vZCAgICA9ICRmaWxl bmFtZSkgPX4gcy8sdiQvLzsKICAgICAgICAkbGFzdG1vZHRpbWUgPSAkbW9kdGltZTsKICAgICAg fQogICAgfQogICAgcHVzaChAZmlsZXMsICRsYXN0bW9kKSBpZiAoZGVmaW5lZCgkbGFzdG1vZCkp OwogIH0KICByZXR1cm4gQGZpbGVzOwp9CgoKc3ViIGh0bWxpZnlfc3ViKCYkKQp7CiAgKG15ICRw cm9jLCBsb2NhbCAkXykgPSBAXzsKICBteSBAYSA9IHNwbGl0KG18KDxhIFtePl0rPltePF0qPC9h Pil8aSk7CiAgbXkgJGxpbmtlZDsKICBteSAkcmVzdWx0ID0gJyc7CgogIHdoaWxlICgoJF8sICRs aW5rZWQpID0gc3BsaWNlKEBhLCAwLCAyKSkgewogICAgJiRwcm9jKCk7CiAgICAkcmVzdWx0IC49 ICRfICAgICAgaWYgZGVmaW5lZCgkXyk7CiAgICAkcmVzdWx0IC49ICRsaW5rZWQgaWYgZGVmaW5l ZCgkbGlua2VkKTsKICB9CgogIHJldHVybiAkcmVzdWx0Owp9CgoKc3ViIGh0bWxpZnkoJDskKQp7 CiAgKGxvY2FsICRfLCBteSAkZXh0cmEpID0gQF87CgogICRfID0gaHRtbHF1b3RlKCRfKTsKCiAg IyBnZXQgVVJMJ3MgYXMgbGluawogIHN7CiAgICAoKGh0dHBzP3xmdHApOi8vLis/KShbXHNcJ118 JihxdW90fFtsZ110KTspCiAgIH17CiAgICAgJmxpbmsoJDEsIGh0bWx1bnF1b3RlKCQxKSkgLiAk MwogICB9ZWd4OwoKICBpZiAoJGFsbG93X21haWx0b3MpIHsKICAgICMgTWFrZSBtYWlsdG86IGxp bmtzIGZyb20gZW1haWwgYWRkcmVzc2VzLgogICAgJF8gPSBodG1saWZ5X3N1YiB7CiAgICAgIHM8 CiAgICAgICAgKFtcdys9XC0uIV0rQFtcd1wtXSsoPzpcLltcd1wtXSspKykKICAgICAgID48CiAg ICAgICAgICZsaW5rKCQxLCAibWFpbHRvOiQxIikKICAgICAgID5lZ2l4OwogICAgfSAkXzsKICB9 CgogIGlmICgkZXh0cmEpIHsKCiAgICAjIGdldCBQUiAjJ3MgYXMgbGluazogIlBSI25ubm4iICJQ Ujogbm5ubiwgLi4uIiAiUFIgbm5ubiwgLi4uIiAiYmluL25ubm4iCiAgICBpZiAoZGVmaW5lZCgk cHJjZ2kpICYmIGRlZmluZWQoJHJlX3Bya2V5d29yZCkpIHsKICAgICAgbXkgJHByZXY7CgogICAg ICBkbyB7CiAgICAgICAgJHByZXYgPSAkXzsKCiAgICAgICAgJF8gPSBodG1saWZ5X3N1YiB7CiAg ICAgICAgICBzewogICAgICAgICAgICAoXGIkcmVfcHJrZXl3b3JkWzpcI10/XHMqCiAgICAgICAg ICAgICAoPzoKICAgICAgICAgICAgICBcIz8KICAgICAgICAgICAgICBcZCtbLFxzXVxzKgogICAg ICAgICAgICAgKSoKICAgICAgICAgICAgIFwjPykKICAgICAgICAgICAgKFxkKylcYgogICAgICAg ICAgIH17CiAgICAgICAgICAgICAkMSAuICZsaW5rKCQyLCBzcHJpbnRmKCRwcmNnaSwgJDIpKQog ICAgICAgICAgIH1lZ2l4OwogICAgICAgIH0gJF87CiAgICAgIH0gd2hpbGUgKCRfIG5lICRwcmV2 KTsKCiAgICAgIGlmIChkZWZpbmVkKCRyZV9wcmNhdGVnb3JpZXMpKSB7CiAgICAgICAgJF8gPSBo dG1saWZ5X3N1YiB7CiAgICAgICAgICBzewogICAgICAgICAgICAoXGIkcmVfcHJjYXRlZ29yaWVz LyhcZCspXGIpCiAgICAgICAgICAgfXsKICAgICAgICAgICAgICZsaW5rKCQxLCBzcHJpbnRmKCRw cmNnaSwgJDIpKQogICAgICAgICAgIH1lZ294OwogICAgICAgIH0gJF87CiAgICAgIH0KICAgIH0K CiAgICAjIGdldCBtYW5wYWdlIHNwZWNzIGFzIGxpbms6ICJmb28uMSIgImZvbygxKSIKICAgIGlm IChkZWZpbmVkKCRtYW5jZ2kpKSB7CiAgICAgICRfID0gaHRtbGlmeV9zdWIgewogICAgICAgIHN7 CiAgICAgICAgICAoCiAgICAgICAgICAgXGIgKCBcd1tcdytcLS5dKiAoPzogOjpcd1tcdytcLS5d KikqICkKICAgICAgICAgICAoPzoKICAgICAgICAgICAgXCggKFswLTluXSkgXCkgXEIKICAgICAg ICAgICAgfAogICAgICAgICAgICBcLiAoWzAtOW5dKSBcYgogICAgICAgICAgICkKICAgICAgICAg ICkKICAgICAgICAgfXsKICAgICAgICAgICAgbXkoJHRleHQsICRuYW1lLCAkc2VjdGlvbikgPSAo JDEsICQyLCBkZWZpbmVkKCQzKSA/ICQzIDogJDQpOwogICAgICAgICAgICAoJG5hbWUgPX4gL1tB LVphLXpdLyAmJiAkbmFtZSAhfiAvXC4oOnwkKS8pCiAgICAgICAgICAgICA/ICZsaW5rKCR0ZXh0 LCBzcHJpbnRmKCRtYW5jZ2ksICRzZWN0aW9uLCB1cmlfZXNjYXBlKCRuYW1lKSkpCiAgICAgICAg ICAgICAgOiAkdGV4dDsKICAgICAgICAgfWVneDsKICAgICAgfSAkXzsKICAgIH0KICB9CgogIHJl dHVybiAkXzsKfQoKCnN1YiBzcGFjZWRIdG1sVGV4dCgkOyQpCnsKICAobG9jYWwgJF8sIG15ICR0 cykgPSBAXzsKICByZXR1cm4gJycgdW5sZXNzIGRlZmluZWQoJF8pOwogICR0cyB8fD0gJHRhYnN0 b3AgfHwgODsKCiAgIyBFeHBhbmQgdGFicwogIDEgd2hpbGUgcy8oLio/KShcdCspLyQxIC4gJyAn IHggKGxlbmd0aCgkMikgKiAkdHMgLSBsZW5ndGgoJDEpICUgJHRzKS9lOwoKICBpZiAoJGhyX2Jy ZWFrYWJsZSkgewogICAgcy9eIC9cMDAxbmJzcDsvOyAgICAgICMgcHJvdGVjdCBsZWFkaW5nIGFu ZC4uLgogICAgcy8gJC9cMDAxbmJzcDsvOyAgICAgICMgLi4udHJhaWxpbmcgd2hpdGVzcGFjZSAo bW9zdGx5IGZvciBTdHJpbmc6OkVkaWZmKSwKICAgIHMvICAvIFwwMDFuYnNwOy9nOyAgICAjIC4u LmFuZCBsZWF2ZSBldmVyeSBvdGhlciBzcGFjZSAnYnJlYWthYmxlJwogIH0gZWxzZSB7CiAgICBz LyAvXDAwMW5ic3A7L2c7CiAgfQoKICAkXyA9IGh0bWxpZnkoJF8sICRhbGxvd19zb3VyY2VfZXh0 cmEpOwoKICAjIHVuZXNjYXBlCiAgeS9cMDAxLyYvOwoKICByZXR1cm4gJF87Cn0KCgojIE5vdGUg dGhhdCB0aGlzIGRvZXNuJ3QgaHRtbHF1b3RlIHRoZSBmaXJzdCBhcmd1bWVudC4uLgpzdWIgbGlu aygkJCkKewogIG15ICgkbmFtZSwgJHVybCkgPSBAXzsKICByZXR1cm4gc3ByaW50ZignPGEgaHJl Zj0iJXMiPiVzPC9hPicsIGh0bWxxdW90ZSgkdXJsKSwgJG5hbWUpOwp9CgoKc3ViIHJldmNtcCgk JCkKewogIG15ICgkcmV2MSwgJHJldjIpID0gQF87CgogICMgbWFrZSBubyBjb21wYXJpc29uIGZv ciBhIHRhZyBvciBhIGJyYW5jaAogIHJldHVybiAwIGlmICRyZXYxID1+IC9bXlxkLl0vIHx8ICRy ZXYyID1+IC9bXlxkLl0vOwoKICBteSAoQHIxKSA9IHNwbGl0KC9cLi8sICRyZXYxKTsKICBteSAo QHIyKSA9IHNwbGl0KC9cLi8sICRyZXYyKTsKICBteSAoJGEsICRiKTsKCiAgd2hpbGUgKCgkYSA9 IHNoaWZ0KEByMSkpICYmICgkYiA9IHNoaWZ0KEByMikpKSB7CiAgICByZXR1cm4gJGEgPD0+ICRi IHVubGVzcyAoJGEgPT0gJGIpOwogIH0KICBpZiAoQHIxKSB7IHJldHVybiAgMTsgfQogIGlmIChA cjIpIHsgcmV0dXJuIC0xOyB9CiAgcmV0dXJuIDA7Cn0KCgojCiMgU2lnbmFsIGEgZmF0YWwgZXJy b3IuCiMKc3ViIGZhdGFsKCQkQCkKewogIG15ICgkZXJyY29kZSwgJGZvcm1hdCwgQGFyZ3MpID0g QF87CiAgcHJpbnQgIlN0YXR1czogJGVycmNvZGVcclxuIjsKICBodG1sX2hlYWRlcignRXJyb3In KTsKICBwcmludCAnPGRpdiBpZD0iZXJyb3IiPkVycm9yOiAnLAogICAgc3ByaW50ZigkZm9ybWF0 LCBtYXAoaHRtbHF1b3RlKCRfKSwgQGFyZ3MpKSwgIjwvZGl2PlxuIjsKICBodG1sX2Zvb3Rlcigp OwogIGV4aXQoMSk7Cn0KCgojCiMgU2lnbmFsIGEgKGZhdGFsKSBjb25maWd1cmF0aW9uIGVycm9y LgojCnN1YiBjb25maWdfZXJyb3IoJCQpCnsKICBmYXRhbCgnNTAwIEludGVybmFsIEVycm9yJywK ICAgICAgICAnRXJyb3IgbG9hZGluZyBjb25maWd1cmF0aW9uIGZpbGUgIjxjb2RlPiVzPC9jb2Rl PiI6PGJyIC8+PGJyIC8+JyAuCiAgICAgICAgJyVzPGJyIC8+JywgQF8pOwp9CgoKIwojIFNlbmRz IGEgcmVkaXJlY3QgdG8gdGhlIGdpdmVuIFVSTC4KIwpzdWIgcmVkaXJlY3QoJDskKQp7CiAgbXkg KCR1cmwsICRwZXJtYW5lbnQpID0gQF87CiAgbXkgKCRzdGF0dXMsICR0ZXh0KTsKICBpZiAoJHBl cm1hbmVudCkgewogICAgJHN0YXR1cyA9ICczMDEnOwogICAgJHRleHQgICA9ICdNb3ZlZCBQZXJt YW5lbnRseSc7CiAgfSBlbHNlIHsKICAgICRzdGF0dXMgPSAnMzAyJzsKICAgICR0ZXh0ICAgPSAn Rm91bmQnOwogIH0KICBwcmludCAiU3RhdHVzOiAkc3RhdHVzICR0ZXh0XHJcbiIsICJMb2NhdGlv bjogJHVybFxyXG4iOwogIGh0bWxfaGVhZGVyKCR0ZXh0KTsKICBwcmludCAiPHA+VGhpcyBkb2N1 bWVudCBoYXMgbW92ZWQgIiwgJmxpbmsoJ2hlcmUnLCAkdXJsKSwgIi48L3A+XG4iOwogIGh0bWxf Zm9vdGVyKCk7CiAgZXhpdCgxKTsKfQoKCnN1YiBzYWZlZ2xvYigkKQp7CiAgbXkgKCRmaWxlbmFt ZSkgPSBAXzsKCiAgKG15ICRkaXJuYW1lID0gJGZpbGVuYW1lKSA9fiBzfC9bXi9dKyR8fDsKICAk ZmlsZW5hbWUgPX4gc3wuKi98fDsKCiAgbXkgQHJlc3VsdHM7CiAgbXkgJGRoID0gZG8geyBsb2Nh bCAoKkRIKTsgfTsKICBpZiAob3BlbmRpcigkZGgsICRkaXJuYW1lKSkgewogICAgbXkgJGdsb2Ig PSAkZmlsZW5hbWU7CiAgICBteSAkdDsKCiAgICAjICAgdHJhbnNmb3JtIGZpbGVuYW1lIGZyb20g Z2xvYiB0byByZWdleC4gIERlYWwgd2l0aDoKICAgICMgICBbLCB7LCA/LCAqIGFzIGdsb2IgY2hh cnMKICAgICMgICBtYWtlIHN1cmUgdG8gZXNjYXBlIGFsbCBvdGhlciByZWdleCBjaGFycwogICAg JGdsb2IgPX4gcy8oW1wuXChcKVx8XCtdKS9cXCQxL2c7CiAgICAkZ2xvYiA9fiBzL1wqLy4qL2c7 CiAgICAkZ2xvYiA9fiBzL1w/Ly4vZzsKICAgICRnbG9iID1+IHMveyhbXn1dKyl9LygkdCA9ICQx KSA9fiBzLSwtfC1nOyAiKCR0KSIvZWc7CiAgICAkZ2xvYiA9IHFyL14kZ2xvYiQvOwoKICAgIGZv cmVhY2ggKHJlYWRkaXIoJGRoKSkgewogICAgICBpZiAoJF8gPX4gJGdsb2IgJiYgJF8gPX4gVkFM SURfUEFUSCkgewogICAgICAgIHB1c2goQHJlc3VsdHMsIGNhdGZpbGUoJGRpcm5hbWUsICQxKSk7 ICMgdW50YWludAogICAgICB9CiAgICB9CiAgICBjbG9zZWRpcigkZGgpOwogIH0KCiAgcmV0dXJu IEByZXN1bHRzOwp9CgoKIwojIFNlYXJjaGVzIEBjb21tYW5kX3BhdGggZm9yIHRoZSBnaXZlbiBl eGVjdXRhYmxlIGZpbGUuCiMKc3ViIHNlYXJjaF9wYXRoKCQpCnsKICBteSAoJGNvbW1hbmQpID0g QF87CiAgZm9yIG15ICRkIChAY29tbWFuZF9wYXRoKSB7CiAgICBteSAkY21kID0gY2F0ZmlsZSgk ZCwgJGNvbW1hbmQpOwogICAgcmV0dXJuICRjbWQgaWYgKC14ICRjbWQgJiYgIS1kIF8pOwogIH0K ICByZXR1cm4gJyc7Cn0KCgojCiMgR2V0cyB0aGUgZW5zY3JpcHQoMSkgaGlnaGxpZ2h0IG1vZGUg Y29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gZmlsZW5hbWUsCiMgb3IgdW5kZWYgaWYgdW5zdXBw b3J0ZWQuCiMKc3ViIGdldEVuc2NyaXB0SEwoJCkKewogIHJldHVybiB1bmRlZiB1bmxlc3MgJGFs bG93X2Vuc2NyaXB0OwogIG15ICgkZmlsZW5hbWUpID0gQF87CiAgd2hpbGUgKG15ICgkaGwsICRy ZWdleCkgPSBlYWNoICVlbnNjcmlwdF90eXBlcykgewogICAgcmV0dXJuICRobCBpZiAoJGZpbGVu YW1lID1+ICRyZWdleCk7CiAgfQogIHJldHVybiB1bmRlZjsKfQoKCiMKIyBHZXRzIHRoZSBNSU1F IHR5cGUgZm9yIHRoZSBnaXZlbiBmaWxlIG5hbWUuCiMKc3ViIGdldE1pbWVUeXBlKCQ7JCkKewog IG15ICgkZnVsbG5hbWUsICRiaW5hcnkpID0gQF87CiAgJGJpbmFyeSA9ICgka2V5d29yZHN1YnN0 aXR1dGlvbiAmJiAka2V5d29yZHN1YnN0aXR1dGlvbiA9fiAvYi8pCiAgICB1bmxlc3MgZGVmaW5l ZCgkYmluYXJ5KTsKCiAgKG15ICRzdWZmaXggPSAkZnVsbG5hbWUpID1+IHMvXi4qXC4oW14uXSop JC8kMS87CgogIG15ICRtaW1ldHlwZSA9ICRNVFlQRVN7JHN1ZmZpeH07CiAgJG1pbWV0eXBlICB8 fD0gJE1pbWVUeXBlcy0+bWltZVR5cGVPZigkZnVsbG5hbWUpIGlmIGRlZmluZWQoJE1pbWVUeXBl cyk7CgogIGlmICghJG1pbWV0eXBlICYmICRzdWZmaXggbmUgJyonICYmIC1mICRtaW1lX3R5cGVz ICYmIC1yIF8pIHsKICAgIG15ICRmaCA9IGRvIHsgbG9jYWwgKCpGSCk7IH07CiAgICBpZiAob3Bl bigkZmgsICRtaW1lX3R5cGVzKSkgewogICAgICBteSAkcmUgPSBzcHJpbnRmKCdeXHMqKFxTK1wv XFMrKVxzLitcYiVzXGInLCBxdW90ZW1ldGEoJHN1ZmZpeCkpOwogICAgICAkcmUgPSBxci8kcmUv OwogICAgICB3aGlsZSAobXkgJGxpbmUgPSA8JGZoPikgewogICAgICAgIGlmICgkbGluZSA9fiAk cmUpIHsKICAgICAgICAgICRtaW1ldHlwZSA9ICQxOwogICAgICAgICAgJE1UWVBFU3skc3VmZml4 fSA9ICRtaW1ldHlwZTsKICAgICAgICAgIGxhc3Q7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNs b3NlKCRmaCk7CiAgICB9IGVsc2UgewogICAgICB3YXJuKCJDYW4ndCBvcGVuIE1JTUUgdHlwZXMg ZmlsZSAkbWltZV90eXBlcyBmb3IgcmVhZGluZzogJCEiKTsKICAgIH0KICB9CgogICRtaW1ldHlw ZSB8fD0gJE1UWVBFU3snKid9OwogICRtaW1ldHlwZSB8fD0gJGJpbmFyeSA/ICdhcHBsaWNhdGlv bi9vY3RldC1zdHJlYW0nIDogJ3RleHQvcGxhaW4nOwogIHJldHVybiAkbWltZXR5cGU7Cn0KCgoj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgcmVhZCBmaXJzdCBsaW5lcyBsaWtlIGhl YWQoMSkKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpzdWIgaGVhZCgkOyQpCnsKICBt eSAoJGZoLCAkbGluZWNvdW50KSA9IEBfOwogICRsaW5lY291bnQgfHw9IDEwOwoKICBteSBAYnVm OwogIGlmICgkbGluZWNvdW50ID4gMCkgewogICAgZm9yIChteSAkaSA9IDA7ICFlb2YoJGZoKSAm JiAkaSA8ICRsaW5lY291bnQ7ICRpKyspIHsKICAgICAgcHVzaCBAYnVmLCBzY2FsYXIgPCRmaD47 CiAgICB9CiAgfSBlbHNlIHsKICAgIEBidWYgPSA8JGZoPjsKICB9CiAgcmV0dXJuIEBidWY7Cn0K CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgc2NhbiB2aW0gYW5kIEVtYWNzIGRp cmVjdGl2ZXMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpzdWIgc2Nhbl9kaXJlY3Rp dmVzKEApCnsKICBteSAkdHMgPSB1bmRlZjsKCiAgZm9yIChAXykgewogICAgJHRzID0gJDEgaWYg L1xiKD86dHN8dGFic3RvcHx0YWItd2lkdGgpWzo9XVxzKihbMS05XVxkKilcYi87CiAgfQoKICAo J3RhYnN0b3AnID0+ICR0cyk7Cn0KCgpzdWIgb3Blbk91dHB1dEZpbHRlcigpCnsKICByZXR1cm4g dW5sZXNzICRvdXRwdXRfZmlsdGVyOwoKICBvcGVuKFNURE9VVCwgInwtIikgYW5kIHJldHVybjsK CiAgIyBjaGlsZCBvZiBjaGlsZAogIG9wZW4oU1RERVJSLCAnPicsIGRldm51bGwoKSkgdW5sZXNz ICRERUJVRzsKICBleGVjKCRvdXRwdXRfZmlsdGVyKSBvciBleGl0IC0xOwp9CgoKIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIHNob3cgQW5ub3RhdGlvbgojIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCnN1YiBkb0Fubm90YXRlKCQkKQp7CiAgbXkgKCRyZXYsICR0YWcpID0g QF87CiAgJHJldiA9ICR0YWcgfHwgJ0hFQUQnIGlmICgkcmV2IGVxICcuJyk7CiAgKG15ICRwYXRo bmFtZSA9ICR3aGVyZSkgPX4gc3woKD88PS8pQXR0aWMvKT9bXi9dKiR8fDsKICAobXkgJGZpbGVu YW1lID0gJHdoZXJlKSA9fiBzfF4uKi98fDsKCiAgIyBUaGlzIGFubm90YXRlIHZlcnNpb24gaXMg YmFzZWQgb24gdGhlIGN2cyBhbm5vdGF0ZS1kZW1vIFBlcmwgc2NyaXB0IGJ5CiAgIyBDeWNsaWMg U29mdHdhcmUuICBJdCB3YXMgd3JpdHRlbiBieSBDeWNsaWMgU29mdHdhcmUsCiAgIyBodHRwOi8v d3d3LmN5Y2xpYy5jb20vLCBhbmQgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCiAgIyBXZSBjb3Vs ZCBhYmFuZG9uIHRoZSB1c2Ugb2YgcmxvZywgcmNzZGlmZiBhbmQgY28gdXNpbmcKICAjIHRoZSBj dnMgc2VydmVyIGluIGEgc2ltaWxpYXIgd2F5IG9uZSBkYXkgKC4uYWZ0ZXIgcmV3cml0ZSkuCgog IGxvY2FsICgqQ1ZTX0lOLCAqQ1ZTX09VVCk7CiAgbXkgJGFubm90YXRlX2VycjsKICBteSAoJGgs ICRlcnIpID0KICAgIHN0YXJ0cHJvYyhbICRDTUR7Y3ZzfSwgQGFubm90YXRlX29wdGlvbnMsICdz ZXJ2ZXInIF0sCiAgICAgICAgICAgICAgJzxwaXBlJywgXCpDVlNfSU4sICc+cGlwZScsIFwqQ1ZT X09VVCwKICAgICAgICAgICAgICAnMj4nLCBcJGFubm90YXRlX2Vycik7CiAgZmF0YWwoJzUwMCBJ bnRlcm5hbCBFcnJvcicsCiAgICAgICAgJ0Fubm90YXRlIGZhaWx1cmUgKGV4aXQgc3RhdHVzICVz KSwgb3V0cHV0OiA8cHJlPiVzPC9wcmU+JywKICAgICAgICAkPyA+PiA4IHx8IC0xLCAkZXJyKQog ICAgdW5sZXNzICRoOwoKICAjIE9LLCBmaXJzdCBzZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBzZXJ2 ZXIuICBBIHNpbXBsaWZpZWQgZXhhbXBsZSBpczoKICAjICAgICBSb290IC9ob21lL2tpbmdkb24v endvcmsvY3Zzcm9vdAogICMgICAgIEFyZ3VtZW50IGZvby94eAogICMgICAgIERpcmVjdG9yeSBm b28KICAjICAgICAvaG9tZS9raW5nZG9uL3p3b3JrL2N2c3Jvb3QvZm9vCiAgIyAgICAgRGlyZWN0 b3J5IC4KICAjICAgICAvaG9tZS9raW5nZG9uL3p3b3JrL2N2c3Jvb3QKICAjICAgICBhbm5vdGF0 ZQogICMgYWx0aG91Z2ggYXMgeW91IGNhbiBzZWUgdGhlcmUgYXJlIGEgZmV3IG1vcmUgZGV0YWls cy4KCiAgcHJpbnQgQ1ZTX0lOICJSb290ICRjdnNyb290XG4iOwogIHByaW50IENWU19JTgogICAg IlZhbGlkLXJlc3BvbnNlcyBvayBlcnJvciBWYWxpZC1yZXF1ZXN0cyBDaGVja2VkLWluIFVwZGF0 ZWQgTWVyZ2VkIFJlbW92ZWQgTSBFXG4iOwoKICAjIERvbid0IHdvcnJ5IGFib3V0IHNlbmRpbmcg dmFsaWQtcmVxdWVzdHMsIHRoZSBzZXJ2ZXIganVzdCBuZWVkcyB0bwogICMgc3VwcG9ydCAiYW5u b3RhdGUiIGFuZCBpZiBpdCBkb2Vzbid0LCB0aGVyZSBpc24ndCBhbnl0aGluZyB0byBiZSBkb25l LgogIHByaW50IENWU19JTiAiVXNlVW5jaGFuZ2VkXG4iOwogIHByaW50IENWU19JTiAiQXJndW1l bnQgLXJcbiI7CiAgcHJpbnQgQ1ZTX0lOICJBcmd1bWVudCAkcmV2XG4iOwogIHByaW50IENWU19J TiAiQXJndW1lbnQgJHdoZXJlXG4iOwoKICAjIFRoZSBwcm90b2NvbCByZXF1aXJlcyB1cyB0byBm dWxseSBmYWtlIGEgd29ya2luZyBkaXJlY3RvcnkgKGF0CiAgIyBsZWFzdCB0byB0aGUgcG9pbnQg b2YgaW5jbHVkaW5nIHRoZSBkaXJlY3RvcmllcyBkb3duIHRvIHRoZSBvbmUKICAjIGNvbnRhaW5p bmcgdGhlIGZpbGUgaW4gcXVlc3Rpb24pLgogICMgU28gaWYgJHdoZXJlIGlzICJkaXIvc2Rpci9m aWxlIiwgdGhlbiBkaXJzIHdpbGwgYmUgKCJkaXIiLCJzZGlyIiwiZmlsZSIpCiAgbXkgJHBhdGgg PSAnJzsKICBmb3JlYWNoIG15ICRkaXIgKHNwbGl0KCcvJywgJHdoZXJlKSkgewoKICAgIGlmICgk cGF0aCBlcSAiIikgewogICAgICAjIEluIG91ciBleGFtcGxlLCAkZGlyIGlzICJkaXIiLgogICAg ICAkcGF0aCA9ICRkaXI7CiAgICB9IGVsc2UgewogICAgICBwcmludCBDVlNfSU4gIkRpcmVjdG9y eSAkcGF0aFxuIjsKICAgICAgcHJpbnQgQ1ZTX0lOICIkY3Zzcm9vdC8kcGF0aFxuIjsKCiAgICAg ICMgSW4gb3VyIGV4YW1wbGUsICRfIGlzICJzZGlyIiBhbmQgJHBhdGggYmVjb21lcyAiZGlyL3Nk aXIiCiAgICAgICMgQW5kIHRoZSBuZXh0IHRpbWUsICJmaWxlIiBhbmQgImRpci9zZGlyL2ZpbGUi ICh3aGljaCB0aGVuIGdldHMKICAgICAgIyBpZ25vcmVkLCBiZWNhdXNlIHdlIGRvbid0IG5lZWQg dG8gc2VuZCBEaXJlY3RvcnkgZm9yIHRoZSBmaWxlKS4KICAgICAgJHBhdGggLj0gIi8kZGlyIjsK ICAgIH0KICB9CiAgdW5kZWYgJHBhdGg7CgogICMgQW5kIHRoZSBsYXN0ICJEaXJlY3RvcnkiIGJl Zm9yZSAiYW5ub3RhdGUiIGlzIHRoZSB0b3AgbGV2ZWwuCiAgcHJpbnQgQ1ZTX0lOICJEaXJlY3Rv cnkgLlxuIjsKICBwcmludCBDVlNfSU4gIiRjdnNyb290XG4iOwoKICBwcmludCBDVlNfSU4gImFu bm90YXRlXG4iOwoKICAjIE9LLCB3ZSd2ZSBzZW50IG91ciBjb21tYW5kIHRvIHRoZSBzZXJ2ZXIu ICBUaGluZyB0byBkbyBpcyB0bwogICMgY2xvc2UgdGhlIHdyaXRlciBzaWRlIGFuZCBnZXQgYWxs IHRoZSByZXNwb25zZXMuCiAgaWYgKCFjbG9zZShDVlNfSU4pKSB7CiAgICAkaC0+ZmluaXNoKCk7 CiAgICBmYXRhbCgnNTAwIEludGVybmFsIEVycm9yJywKICAgICAgICAgICdBbm5vdGF0ZSBmYWls dXJlIChleGl0IHN0YXR1cyAlcyk6IDxjb2RlPiVzPC9jb2RlPiwgb3V0cHV0OiAnIC4KICAgICAg ICAgICc8cHJlPiVzPC9wcmU+JywgJD8gPj4gOCwgJCEsICRhbm5vdGF0ZV9lcnIpOwogIH0KCiAg bmF2aWdhdGVIZWFkZXIoJHNjcmlwdHdoZXJlLCAkcGF0aG5hbWUsICRmaWxlbmFtZSwgJHJldiwg J2Fubm90YXRlJyk7CgogIG15ICRyZXZ0eXBlID0gKCRyZXYgPX4gL1wuLykgPyAncmV2aXNpb24n IDogJ3RhZyc7ICMgVE9ETzogdGFnIC0+IGJyYW5jaC90YWc/CiAgcHJpbnQgJzxoMyBzdHlsZT0i dGV4dC1hbGlnbjogY2VudGVyIj5Bbm5vdGF0aW9uIG9mICcsCiAgICBodG1scXVvdGUoIiRwYXRo bmFtZSRmaWxlbmFtZSIpLCAiLCAkcmV2dHlwZSAkcmV2PC9oMz5cbiI7CgogICMgUmVhZHkgdG8g Z2V0IHRoZSByZXNwb25zZXMgZnJvbSB0aGUgc2VydmVyLgogICMgRm9yIGV4YW1wbGU6CiAgIyAg ICAgRSBBbm5vdGF0aW9ucyBmb3IgZm9vL3h4CiAgIyAgICAgRSAqKioqKioqKioqKioqKioKICAj ICAgICBNIDEuMyAgICAgICAgICAoa2luZ2RvbiAgMDYtU2VwLTk3KTogaGVsbG8KICAjICAgICBv awogIG15ICgkbGluZU5yKSA9IDA7CiAgbXkgKCRvbGRMcmV2LCAkb2xkTHVzcikgPSAoIiIsICIi KTsKICBteSAoJHJldnByaW50LCAkdXNycHJpbnQpOwoKICBpZiAoJGFublRhYmxlKSB7CiAgICBw cmludCA8PEVPRjsKPHRhYmxlIHN0eWxlPSJib3JkZXI6IG5vbmUiIGNlbGxzcGFjaW5nPSIwIiBj ZWxscGFkZGluZz0iMCIgc3VtbWFyeT0iQW5ub3RhdGlvbiI+CkVPRgogIH0gZWxzZSB7CiAgICBw cmludCAiPHByZT4iOwogIH0KCiAgIyBwcmVmZXRjaCBzZXZlcmFsIGxpbmVzCiAgbXkgQGJ1ZiA9 IGhlYWQoKkNWU19PVVQpOwoKICBteSAlZCA9IHNjYW5fZGlyZWN0aXZlcyhAYnVmKTsKCiAgd2hp bGUgKEBidWYgfHwgIWVvZigqQ1ZTX09VVCkpIHsKCiAgICAkXyA9IEBidWYgPyBzaGlmdCBAYnVm IDogPENWU19PVVQ+OwogICAgbXkgQHdvcmRzID0gc3BsaXQ7CgogICAgIyBBZGRpbmcgb25lIGlz IGZvciB0aGUgKHNpbmdsZSkgc3BhY2Ugd2hpY2ggZm9sbG93cyAkd29yZHNbMF0uCiAgICBteSAk cmVzdCA9IHN1YnN0cigkXywgbGVuZ3RoKCR3b3Jkc1swXSkgKyAxKTsKICAgIGlmICgkd29yZHNb MF0gZXEgIkUiKSB7CiAgICAgIG5leHQ7CiAgICB9IGVsc2lmICgkd29yZHNbMF0gZXEgIk0iKSB7 CiAgICAgICRsaW5lTnIrKzsKICAgICAgKG15ICRscmV2ID0gc3Vic3RyKCRfLCAyLCAgMTMpKSA9 fiB5LyAvL2Q7CiAgICAgIChteSAkbHVzciA9IHN1YnN0cigkXywgMTYsIDkpKSAgPX4geS8gLy9k OwogICAgICBteSAkbGluZSA9IHN1YnN0cigkXywgMzYpOwogICAgICAjIFRPRE86IHRoaXMgZG9l cyBub3Qgd29yayBmb3IgYnJhbmNoL3RhZyByZXZpc2lvbnMuCiAgICAgIG15ICRpc0N1cnJlbnRS ZXYgPSAoJHJldiBlcSAkbHJldik7CgogICAgICAjIHdlIHNob3VsZCBwYXJzZSB0aGUgZGF0ZSBo ZXJlIC4uCiAgICAgIGlmICgkbHJldiBlcSAkb2xkTHJldikgewogICAgICAgICRyZXZwcmludCA9 IHNwcmludGYoJyUtOHMnLCAnJyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgJHJldnByaW50ID0g c3ByaW50ZignJS04cycsICRscmV2KTsKICAgICAgICAkcmV2cHJpbnQgPX4gc3woXFMrKXwmbGlu aygkMSwgdXJpX2VzY2FwZSgkZmlsZW5hbWUpLiIkcXVlcnkjcmV2JDEiKXxlOwogICAgICAgICRv bGRMdXNyID0gJyc7CiAgICAgIH0KCiAgICAgICR1c3JwcmludCA9ICgkbHVzciBlcSAkb2xkTHVz cikgPyAnJyA6ICRsdXNyOwogICAgICAkb2xkTHJldiA9ICRscmV2OwogICAgICAkb2xkTHVzciA9 ICRsdXNyOwoKICAgICAgcHJpbnQgJGlzX3RleHRiYXNlZCA/ICc8Yj4nIDogJzxzcGFuIGNsYXNz PSJjdXJyZW50LXJldiI+JwogICAgICAgIGlmICRpc0N1cnJlbnRSZXY7CgogICAgICAkdXNycHJp bnQgPSBzcHJpbnRmKCclLThzJywgJHVzcnByaW50KTsKICAgICAgcHJpbnRmICclcyVzICVzICU0 ZDonLCAkcmV2cHJpbnQsICRpc0N1cnJlbnRSZXYgPyAnIScgOiAnICcsCiAgICAgICAgaHRtbHF1 b3RlKCR1c3JwcmludCksICRsaW5lTnI7CiAgICAgIHByaW50IHNwYWNlZEh0bWxUZXh0KCRsaW5l LCAkZHt0YWJzdG9wfSk7CgogICAgICBwcmludCAkaXNfdGV4dGJhc2VkID8gJzwvYj4nIDogJzwv c3Bhbj4nIGlmICRpc0N1cnJlbnRSZXY7CgogICAgfSBlbHNpZiAoJHdvcmRzWzBdIGVxICJvayIp IHsKICAgICAgIyBXZSBjb3VsZCBjb21wbGFpbiBhYm91dCBhbnkgdGV4dCByZWNlaXZlZCBhZnRl ciB0aGlzLCBsaWtlIHRoZQogICAgICAjIENWUyBjb21tYW5kIGxpbmUgY2xpZW50LiAgQnV0IGZv ciBzaW1wbGljaXR5LCB3ZSBkb24ndC4KCiAgICB9IGVsc2lmICgkd29yZHNbMF0gZXEgImVycm9y IikgewogICAgICBmYXRhbCgiNTAwIEludGVybmFsIEVycm9yIiwKICAgICAgICAgICAgJ0Vycm9y IG9jY3VyZWQgZHVyaW5nIGFubm90YXRlOiA8Yj4lczwvYj4nLCAkXyk7CiAgICB9CiAgfQogICRo LT5maW5pc2goKTsKCiAgaWYgKCRhbm5UYWJsZSkgewogICAgcHJpbnQgIjwvdGFibGU+IjsKICB9 IGVsc2UgewogICAgcHJpbnQgIjwvcHJlPiI7CiAgfQogIGh0bWxfZm9vdGVyKCk7Cn0KCiMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBtYWtlIENoZWNrb3V0CiMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMKc3ViIGRvQ2hlY2tvdXQoJCQkKQp7CiAgbXkgKCRmdWxsbmFtZSwg JHJldiwgJHRhZykgPSBAXzsKICAkcmV2ID0gJHRhZyB8fCB1bmRlZiBpZiAoISRyZXYgfHwgJHJl diBlcSAnLicpOwoKICAjIFN0YXJ0IHJlc29sdmluZyB3aGV0aGVyIHdlIHdpbGwgZG8gYSBtYXJr dXAgdmlldyBvciBub3QuCiAgbXkgJGRvX21hcmt1cCA9IHVuZGVmOwogIG15ICR3YW50X3R5cGUg PSAkaW5wdXR7J2NvbnRlbnQtdHlwZSd9OwoKICAjIE5vIG1hcmt1cCBpZiBtYXJrdXAgZGlzYWxs b3dlZC4KICAkZG9fbWFya3VwID0gMCB1bmxlc3MgJGFsbG93X21hcmt1cDsKCiAgIyBObyBtYXJr dXAgaWYgY2hlY2tvdXQgbWFnaWMgY29va2llIGluIFVSTC4KICAkZG9fbWFya3VwID0gMCBpZiAo IWRlZmluZWQoJGRvX21hcmt1cCkgJiYgJGRvQ2hlY2tvdXQpOwoKICAjIERvIG1hcmt1cCBpZiBl eHBsaWNpdGx5IGFza2VkIHVzaW5nIGN2c3dlYi1tYXJrdXAgY29udGVudCB0eXBlLiAgSWYgdGhl CiAgIyBhc2tlZCBjb250ZW50IHR5cGUgaXMgYW55dGhpbmcgZWxzZSwgbm8gbWFya3VwLgogIGlm ICghZGVmaW5lZCgkZG9fbWFya3VwKSAmJiAkd2FudF90eXBlKSB7CiAgICBpZiAoJHdhbnRfdHlw ZSA9fiBDVlNXRUJNQVJLVVApIHsKICAgICAgJHdhbnRfdHlwZSA9IHVuZGVmOwogICAgICAkZG9f bWFya3VwID0gMTsKICAgIH0gZWxzZSB7CiAgICAgICRkb19tYXJrdXAgPSAwOwogICAgfQogIH0K CiAgIyBPaywgaWYgJGRvX21hcmt1cCBpcyBzdGlsbCB1bmRlZmluZWQsIHdlIGtub3cgdGhhdCBh IGRvd25sb2FkIGhhcyBub3QgYmVlbgogICMgZXhwbGljaXRseSBhc2tlZC4gIEZvciB0aGUgbGFz dCBjaGVjayBmdXJ0aGVyIGRvd24gYmVsb3cgd2UnbGwgbmVlZCB0bwogICMga25vdyBpZiB0aGUg ZmlsZSBpcyBiaW5hcnksIGFuZCBwb3NzaWJseSBydW4gYSBsb2cgb24gaXQuCiAgbXkgJG5lZWRs b2cgPSAkZG9fbWFya3VwIHx8ICR1c2VfbW9kZGF0ZTsKCiAgbXkgJG1vZGRhdGUgPSB1bmRlZjsK ICBteSAkcmV2b3B0OwogIGlmIChkZWZpbmVkKCRyZXYpKSB7CiAgICAkcmV2b3B0ID0gIi1yJHJl diI7CiAgICBpZiAoJG5lZWRsb2cpIHsKICAgICAgcmVhZExvZygkZnVsbG5hbWUsICRyZXYpOwog ICAgICAkbW9kZGF0ZSAgID0gJGRhdGV7JHJldn07CiAgICAgICMgVE9ETzogZXZlbiB0aGlzIGRv ZXMgbm90IHdvcmsgZm9yIGJyYW5jaCB0YWdzLCBidXQgb25seSBub3JtYWwgdGFncyA6KAogICAg ICAkbW9kZGF0ZSB8fD0gJGRhdGV7JHN5bXJldnskcmV2fX0gaWYgZGVmaW5lZCgkc3ltcmV2eyRy ZXZ9KTsKICAgIH0KICB9IGVsc2UgewogICAgJHJldm9wdCA9ICItckhFQUQiOwogICAgaWYgKCRu ZWVkbG9nKSB7CiAgICAgIHJlYWRMb2coJGZ1bGxuYW1lKTsKICAgICAgJG1vZGRhdGUgPSAkZGF0 ZXskc3ltcmV2e0hFQUR9fTsKICAgIH0KICB9CgogIG15ICRjciA9IGFic19wYXRoKCRjdnNyb290 KSB8fCAkY3Zzcm9vdDsKICAjIGFic19wYXRoKCkgdGFpbnRzIHdoZW4gcnVuIGFzIGEgQ0dJLi4u CiAgaWYgKCRjciA9fiBWQUxJRF9QQVRIKSB7CiAgICAkY3IgPSAkMTsKICB9IGVsc2UgewogICAg ZmF0YWwoJzUwMCBJbnRlcm5hbCBFcnJvcicsICdJbGxlZ2FsIENWUyByb290OiA8Y29kZT4lczwv Y29kZT4nLCAkY3IpOwogIH0KICAjIFVzZSBhYnNfcGF0aCgpIHRvIHdvcmsgYXJvdW5kIGEgYnVn IG9mIGN2cyAtcDsgZXhwYW5kIHN5bWxpbmtzIGlmIHdlIGNhbi4KICBteSBAY21kID0gKCRDTUR7 Y3ZzfSwgQGN2c19vcHRpb25zLCAnLWQnLCAkY3IsICdjbycsICctcCcsICRyZXZvcHQsICR3aGVy ZSk7CgogIGxvY2FsICgqQ1ZTX09VVCwgKkNWU19FUlIpOwogIG15ICgkaCwgJGVycikgPQogICAg c3RhcnRwcm9jKFxAY21kLCBcIiIsICc+cGlwZScsIFwqQ1ZTX09VVCwgJzI+cGlwZScsIFwqQ1ZT X0VSUik7CiAgZmF0YWwoJzUwMCBJbnRlcm5hbCBFcnJvcicsCiAgICAgICAgJ0NoZWNrb3V0IGZh aWx1cmUgKGV4aXQgc3RhdHVzICVzKSwgb3V0cHV0OiA8cHJlPiVzPC9wcmU+JywKICAgICAgICAk PyA+PiA4IHx8IC0xLCAkZXJyKQogICAgdW5sZXNzICRoOwoKICBpZiAoZW9mKENWU19FUlIpKSB7 CiAgICAkaC0+ZmluaXNoKCk7CiAgICBmYXRhbCgiNDA0IE5vdCBGb3VuZCIsICclcyBpcyBub3Qg KGFueSBsb25nZXIpIHBlcnRpbmVudCcsICR3aGVyZSk7CiAgfQoKICAjPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICND aGVja2luZyBvdXQgc3F1aWQvc3JjL2Z0cC5jCiAgI1JDUzogIC91c3Ivc3JjL0NWUy9zcXVpZC9z cmMvZnRwLmMsdgogICNWRVJTOiAxLjEuMS4yOC42LjIKICAjKioqKioqKioqKioqKioqCgogICMg UGFyc2UgQ1ZTIGhlYWRlcgogIG15ICgkcmV2aXNpb24sICRmaWxlbmFtZSwgJGN2c2hlYWRlcik7 CiAgJGZpbGVuYW1lID0gIiI7CiAgd2hpbGUgKDxDVlNfRVJSPikgewogICAgbGFzdCBpZiAoL15c KlwqXCpcKi8pOwogICAgJHJldmlzaW9uID0gJDEgaWYgKC9eVkVSUzogKC4qKSQvKTsKCiAgICBp ZiAoL15DaGVja2luZyBvdXQgKC4qKSQvKSB7CiAgICAgICgkZmlsZW5hbWUgPSAkMSkgPX4gc3xe XC4vK3x8OwogICAgfQogICAgJGN2c2hlYWRlciAuPSAkXzsKICB9CiAgY2xvc2UoQ1ZTX0VSUik7 CgogIGlmICgkZmlsZW5hbWUgbmUgJHdoZXJlKSB7CiAgICAkaC0+ZmluaXNoKCk7CiAgICBmYXRh bCgiNTAwIEludGVybmFsIEVycm9yIiwKICAgICAgICAgICdVbmV4cGVjdGVkIG91dHB1dCBmcm9t IGN2cyBjbzogPHByZT4lczwvcHJlPiAnIC4KICAgICAgICAgICcoZXhwZWN0ZWQgIjxjb2RlPiVz PC9jb2RlPiIgYnV0IGdvdCAiPGNvZGU+JXM8L2NvZGU+IiknLAogICAgICAgICAgJGN2c2hlYWRl ciwgJHdoZXJlLCAkZmlsZW5hbWUpOwogIH0KCiAgIyBMYXN0IGNoZWNrcyB3aGV0aGVyIHdlJ2xs IGRvIG1hcmt1cCBvciBub3QuCiAgbXkgJGlzYmluID0gJGtleXdvcmRzdWJzdGl0dXRpb24gJiYg JGtleXdvcmRzdWJzdGl0dXRpb24gPX4gL2IvOwogIG15ICRtaW1ldHlwZSA9IGdldE1pbWVUeXBl KCRmdWxsbmFtZSwgJGlzYmluKTsKCiAgIyBJZiB3ZSBzdGlsbCBhcmUgbm90IHN1cmUgd2hldGhl ciB0byBkbyBtYXJrdXAgb3Igbm90OgogICMgaWYgdGhlIE1JTUUgdHlwZSBpcyAidmlld2FibGUi IG9yIHRoaXMgaXMgbm90IGEgYmluYXJ5IGZpbGUsIGRvLgogICRkb19tYXJrdXAgPSAhJGlzYmlu IHx8IHZpZXdhYmxlKCRtaW1ldHlwZSkgdW5sZXNzIGRlZmluZWQoJGRvX21hcmt1cCk7CgogIGlm ICgkZG9fbWFya3VwKSB7CgogICAgIyBJZiB0aGlzIGlzIHNvbWV0aGluZyB3ZSdsbCBiZSBsaW5r aW5nIHRvIGluIHRoZSBtYXJrdXAgdmlldywgd2UgYXJlCiAgICAjIGRvbmUgd2l0aCB0aGlzIHBh cnRpY3VsYXIgb3V0cHV0IGZyb20gImN2cyBjbyIgYW5kIG11c3QgZGlzY2FyZCBpdC4KICAgIG15 ICRsaW5rZWQgPSAkbWltZXR5cGUgPX4gbXteaW1hZ2UvfGFwcGxpY2F0aW9uL3BkZiR9aTsKICAg IGlmICgkbGlua2VkKSB7CiAgICAgIGNsb3NlKENWU19PVVQpOwogICAgICAkaC0+ZmluaXNoKCk7 CiAgICB9CgogICAgIyBIZXJlIHdlIGtub3cgdGhlIGxhc3QgbW9kaWZpZWQgZGF0ZSwgYnV0IGRv bid0IGtub3cgaWYgdGFncyBoYXZlIGJlZW4KICAgICMgYWRkZWQgYWZ0ZXJ3YXJkcyAodGhvc2Ug YXJlIHNob3duIGluIHRoZSBtYXJrdXAgdmlldyk6IG5vIGxhc3QtbW9kaWZpZWQuCiAgICBjdnN3 ZWJNYXJrdXAoXCpDVlNfT1VULCAkZnVsbG5hbWUsICRyZXZpc2lvbiwgJGlzYmluLCAkbWltZXR5 cGUsICRuZWVkbG9nKTsKCiAgICAkaC0+ZmluaXNoKCkgdW5sZXNzICRsaW5rZWQ7CgogIH0gZWxz ZSB7CiAgICBodHRwX2hlYWRlcigkd2FudF90eXBlIHx8ICRtaW1ldHlwZSwgJG1vZGRhdGUpOwog ICAgbG9jYWwgJC8gPSB1bmRlZjsKICAgIHByaW50IDxDVlNfT1VUPjsKICAgICRoLT5maW5pc2go KTsKICB9Cn0KCgpzdWIgY3Zzd2ViTWFya3VwKCQkJCQkJDskKQp7CiAgbXkgKCRmaWxlaGFuZGxl LCAkZnVsbG5hbWUsICRyZXYsICRpc2JpbiwgJG1pbWV0eXBlLCAkbG9nZ2VkLCAkbW9kKSA9IEBf OwoKICAobXkgJHBhdGhuYW1lID0gJHdoZXJlKSA9fiBzfCgoPzw9LylBdHRpYy8pP1teL10qJHx8 OwogIChteSAkZmlsZW5hbWUgPSAkd2hlcmUpID1+IHN8Xi4qL3x8OwoKICBuYXZpZ2F0ZUhlYWRl cigkc2NyaXB0d2hlcmUsICRwYXRobmFtZSwgJGZpbGVuYW1lLCAkcmV2LCAndmlldycsICRtb2Qp OwoKICBwcmludCA8PEVPRjsKPGhyIC8+CjxkaXYgY2xhc3M9ImxvZy1tYXJrdXAiPgpGaWxlOiZu YnNwOwpFT0YKICBwcmludCAmY2xpY2thYmxlUGF0aCgkd2hlcmUsIDEpLCAiPGJyIC8+XG4iOwoK ICBpZiAoJHNob3dfbG9nX2luX21hcmt1cCkgewogICAgcmVhZExvZygkZnVsbG5hbWUpIHVubGVz cyAkbG9nZ2VkOyAjLCRyZXYpOwogICAgcHJpbnRMb2coJHJldiwgJG1pbWV0eXBlLCAkaXNiaW4p OwogIH0gZWxzZSB7CiAgICBwcmludCAiUmV2aXNpb246IDxiPiRyZXY8L2I+PGJyIC8+XG4iOwog ICAgcHJpbnQgJ1RhZzogJywgaHRtbHF1b3RlKCRpbnB1dHtvbmx5X3dpdGhfdGFnfSksICI8YnIg Lz5cbiIKICAgICAgaWYgJGlucHV0e29ubHlfd2l0aF90YWd9OwogIH0KICBwcmludCAiPC9kaXY+ XG48aHIgLz4iOwogIG15ICR1cmwgPSBkb3dubG9hZF91cmwodXJpX2VzY2FwZSgkZmlsZW5hbWUp LCAkcmV2LCAkbWltZXR5cGUpOwoKICBpZiAoJG1pbWV0eXBlID1+IG18XmltYWdlL3xpKSB7CiAg ICBwcmludGYgJzxpbWcgc3JjPSIlcyIgYWx0PSIlcyIgLz48YnIgLz4nLAogICAgICAkdXJsIC4g JGJhcmVxdWVyeSwgaHRtbHF1b3RlKCRmaWxlbmFtZSk7CiAgfSBlbHNpZiAobGMoJG1pbWV0eXBl KSBlcSAnYXBwbGljYXRpb24vcGRmJykgewogICAgcHJpbnRmICc8ZW1iZWQgc3JjPSIlcyIgd2lk dGg9IjEwMCUlIiBoZWlnaHQ9IjEwMCUlIiAvPjxiciAvPicsCiAgICAgICR1cmwgLiAkYmFyZXF1 ZXJ5OwogIH0gZWxzZSB7CgogICAgcHJpbnQgIjxwcmU+XG4iOwogICAgbXkgJGxpbmVudW1iZXJz ID0gJGlucHV0e2xufSB8fCAwOwoKICAgIGlmIChteSAkZW5zY3JpcHRfaGwgPSBnZXRFbnNjcmlw dEhMKCRmaWxlbmFtZSkpIHsKICAgICAgZG9FbnNjcmlwdCgkZmlsZWhhbmRsZSwgJGVuc2NyaXB0 X2hsLCAkbGluZW51bWJlcnMpOwoKICAgIH0gZWxzZSB7CiAgICAgIG15ICRsbiAgPSAwOwogICAg ICBteSBAYnVmID0gKCk7CiAgICAgIG15ICR0cyAgPSB1bmRlZjsKCiAgICAgIGlmICgkcHJlZm9y bWF0X2luX21hcmt1cCkgewogICAgICAgICMgcHJlZmV0Y2ggc2V2ZXJhbCBsaW5lcwogICAgICAg IEBidWYgPSBoZWFkKCRmaWxlaGFuZGxlKTsKICAgICAgICBteSAlZCA9IHNjYW5fZGlyZWN0aXZl cyhAYnVmKTsKICAgICAgICAkdHMgPSAkZHt0YWJzdG9wfTsKICAgICAgfQoKICAgICAgd2hpbGUg KEBidWYgfHwgIWVvZigkZmlsZWhhbmRsZSkpIHsKICAgICAgICAkXyA9IEBidWYgPyBzaGlmdCBA YnVmIDogPCRmaWxlaGFuZGxlPjsKICAgICAgICBpZiAoJGxpbmVudW1iZXJzKSB7CiAgICAgICAg ICAkbG4rKzsKICAgICAgICAgIHByaW50ZiAnPGEgaWQ9ImwlZCIgY2xhc3M9InNyYyI+JTVkOiA8 L2E+JywgKCRsbikgeCAyOwogICAgICAgIH0KICAgICAgICBwcmludCAkcHJlZm9ybWF0X2luX21h cmt1cCA/IHNwYWNlZEh0bWxUZXh0KCRfLCAkdHMpIDogaHRtbHF1b3RlKCRfKTsKICAgICAgfQog ICAgfQoKICAgIHByaW50ICI8L3ByZT5cbiI7CiAgfQogIGh0bWxfZm9vdGVyKCk7Cn0KCgpzdWIg dmlld2FibGUoJCkKewogIHJldHVybiBzaGlmdCA9fiBte14oKHRleHR8aW1hZ2UpL3xhcHBsaWNh dGlvbi9wZGYpfWk7Cn0KCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgU2hvdyBD b2xvcmVkIERpZmYKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpzdWIgZG9EaWZmKCQk JCQkJCkKewogIG15ICgkZnVsbG5hbWUsICRyMSwgJHRyMSwgJHIyLCAkdHIyLCAkZikgPSBAXzsK CiAgaWYgKGZvcmJpZGRlbigkZnVsbG5hbWUpKSB7CiAgICBmYXRhbCgnNDAzIEZvcmJpZGRlbics ICdBY2Nlc3MgdG8gJXMgZm9yYmlkZGVuLicsICR3aGVyZSk7CiAgfQoKICBteSAoJHJldjEsICRz eW0xKTsKICBpZiAoJHIxID1+IC8oW146XSspKDooLispKT8vKSB7CiAgICAkcmV2MSA9ICQxOwog ICAgJHN5bTEgPSAkMzsKICB9CiAgaWYgKCRyMSBlcSAndGV4dCcpIHsKICAgICRyZXYxID0gJHRy MTsKICAgICRzeW0xID0gIiI7CiAgfQoKICBteSAoJHJldjIsICRzeW0yKTsKICBpZiAoJHIyID1+ IC8oW146XSspKDooLispKT8vKSB7CiAgICAkcmV2MiA9ICQxOwogICAgJHN5bTIgPSAkMzsKICB9 CiAgaWYgKCRyMiBlcSAndGV4dCcpIHsKICAgICRyZXYyID0gJHRyMjsKICAgICRzeW0yID0gIiI7 CiAgfQoKICAjCiAgIyByZXYxIGFuZCByZXYyIGFyZSBub3cgYm90aCBudW1lcmljIHJldmlzaW9u cy4KICAjIFRodXMgd2UgZG8gYSBEV0lNIGhlcmUgYW5kIHN3YXAgdGhlbSBpZiByZXYxIGlzIGFm dGVyIHJldjIuCiAgIyBYWFggc2hvdWxkIHdlIHdhcm4gYWJvdXQgdGhlIGZhY3QgdGhhdCB3ZSBk byB0aGlzPwogIGlmICgmcmV2Y21wKCRyZXYxLCAkcmV2MikgPiAwKSB7CiAgICBteSAoJHRtcDEs ICR0bXAyKSA9ICgkcmV2MSwgJHN5bTEpOwogICAgKCRyZXYxLCAkc3ltMSkgPSAoJHJldjIsICRz eW0yKTsKICAgICgkcmV2MiwgJHN5bTIpID0gKCR0bXAxLCAkdG1wMik7CiAgfQoKICBteSAkbWlt ZXR5cGUgPSBnZXRNaW1lVHlwZSgkZnVsbG5hbWUpOwoKICAjCiAgIyAgQ2hlY2sgZm9yIHBlci1N SU1FIHR5cGUgZGlmZiBjb21tYW5kcy4KICAjCiAgbXkgJGRpZmZjbWQgPSB1bmRlZjsKICBpZiAo bXkgJGRpZmZjbWRzID0gJERJRkZfQ09NTUFORFN7bGMoJG1pbWV0eXBlKX0pIHsKICAgIGlmICgk ZiA9fiAvXmV4dChcZCopJC8pIHsKICAgICAgbXkgJG4gPSAkMSB8fCAwOwogICAgICAkZGlmZmNt ZCA9ICRkaWZmY21kcy0+WyRuXTsKICAgIH0KICB9CiAgaWYgKCRkaWZmY21kICYmICRkaWZmY21k LT57Y21kfSAmJiAkZGlmZmNtZC0+e25hbWV9KSB7CgogICAgaWYgKCRkaWZmY21kLT57YXJnc30g JiYgcmVmKCRkaWZmY21kLT57YXJnc30pIG5lICdBUlJBWScpIHsKICAgICAgZmF0YWwoJzUwMCBJ bnRlcm5hbCBFcnJvcicsCiAgICAgICAgICAgICdDb25maWd1cmF0aW9uIGVycm9yOiBhcmd1bWVu dHMgdG8gZXh0ZXJuYWwgZGlmZiB0b29scyBtdXN0ICcgLgogICAgICAgICAgICAnYmUgZ2l2ZW4g YXMgYXJyYXkgcmVmcy4gIFNlZSAiPGNvZGU+JXM8L2NvZGU+IiBpbiAnIC4KICAgICAgICAgICAg Jzxjb2RlPiUlRElGRl9DT01NQU5EUzwvY29kZT4uJywKICAgICAgICAgICAgJGRpZmZjbWQtPntu YW1lfSk7CiAgICB9CgogICAgKG15ICRjdnNuYW1lID0gJHdoZXJlKSA9fiBzL1wuZGlmZiQvLzsK CiAgICAjIENyZWF0ZSB0d28gdGVtcG9yYXJ5IGZpbGVzIHdpdGggdGhlIHR3byByZXZpc2lvbnMK ICAgIG15ICR0ZW1wX2ZuMSA9IGNoZWNrb3V0X3RvX3RlbXAoJGN2c3Jvb3QsICRjdnNuYW1lLCAk cmV2MSk7CiAgICBteSAkdGVtcF9mbjIgPSBjaGVja291dF90b190ZW1wKCRjdnNyb290LCAkY3Zz bmFtZSwgJHJldjIpOwoKICAgICMgRXhlY3V0ZSBjaG9zZW4gZGlmZiBiaW5hcnkuCiAgICBsb2Nh bCAoKkRJRkZfT1VUKTsKICAgIG15IEBjbWQgPSAoJGRpZmZjbWQtPntjbWR9KTsKICAgIHB1c2go QGNtZCwgQHskZGlmZmNtZC0+e2FyZ3N9fSkgaWYgJGRpZmZjbWQtPnthcmdzfTsKICAgIHB1c2go QGNtZCwgJHRlbXBfZm4xLCAkdGVtcF9mbjIpOwogICAgbXkgKCRoLCAkZXJyKSA9IHN0YXJ0cHJv YyhcQGNtZCwgXCIiLCAnPnBpcGUnLCBcKkRJRkZfT1VUKTsKICAgIGlmICghJGgpIHsKICAgICAg dW5saW5rKCR0ZW1wX2ZuMSk7CiAgICAgIHVubGluaygkdGVtcF9mbjIpOwogICAgICBmYXRhbCgn NTAwIEludGVybmFsIEVycm9yJywKICAgICAgICAgICAgJ0RpZmYgZmFpbHVyZSAoZXhpdCBzdGF0 dXMgJXMpLCBvdXRwdXQ6IDxwcmU+JXM8L3ByZT4nLAogICAgICAgICAgICAkPyA+PiA4IHx8IC0x LCAkZXJyKTsKICAgIH0KCiAgICBodHRwX2hlYWRlcigkZGlmZmNtZC0+e3R5cGV9IHx8ICd0ZXh0 L3BsYWluJyk7CiAgICBsb2NhbCAkLyA9IHVuZGVmOwogICAgcHJpbnQgPERJRkZfT1VUPjsKICAg ICRoLT5maW5pc2goKTsKICAgIHVubGluaygkdGVtcF9mbjEpOwogICAgdW5saW5rKCR0ZW1wX2Zu Mik7CgogICAgZXhpdDsKICB9CgogICMKICAjIE5vcm1hbCBDVlMgZGlmZi4KICAjCgogICRmID0g JERFRkFVTFRWQUxVRXtmfSB8fCAndScgaWYgKCRmID1+IC9eZXh0XGQqJC8pOwogIG15ICRkaWZm dHlwZSA9ICRESUZGVFlQRVN7JGZ9OwogIGlmICghJGRpZmZ0eXBlKSB7CiAgICBmYXRhbCgiNDAw IEJhZCBhcmd1bWVudHMiLCAnRGlmZiBmb3JtYXQgJXMgbm90IHVuZGVyc3Rvb2QnLCAkZik7CiAg fQoKICBteSBAZGlmZnR5cGUgICAgICAgPSBAeyRkaWZmdHlwZS0+e29wdHN9fTsKICBteSAkaHVt YW5fcmVhZGFibGUgPSAkZGlmZnR5cGUtPntjb2xvcmVkfTsKCiAgIyBBcHBseSBzcGVjaWFsIGRp ZmYgb3B0aW9ucy4gIC1wIGFuZCAtRiBhcmUgbm90IGF2YWlsYWJsZSB3aXRoIHNpZGUgYnkgc2lk ZQogICMgZGlmZnMgYW5kIG1heSBjYXVzZSBwcm9ibGVtcyB3aXRoIG9sZGVyICg8IDIuOCkgdmVy c2lvbnMgb2YgZGlmZnV0aWxzIGlmCiAgIyB1c2VkIHdpdGggLS1zaWRlLWJ5LXNpZGUuCiAgaWYg KCRzaG93ZnVuYyAmJiAkZiAhfiAvXnMvKSB7CiAgICBwdXNoKEBkaWZmdHlwZSwgJy1wJyk7CiAg ICB3aGlsZSAobXkgKCRyZTEsICRyZTIpID0gZWFjaCAlZnVuY2xpbmVfcmVnZXhwKSB7CiAgICAg IGlmICgkZnVsbG5hbWUgPX4gJHJlMSkgewogICAgICAgIHB1c2goQGRpZmZ0eXBlLCAnLUYnLCAk cmUyKTsKICAgICAgICBsYXN0OwogICAgICB9CiAgICB9CiAgfQoKICBpZiAoJGh1bWFuX3JlYWRh YmxlKSB7CiAgICBwdXNoKEBkaWZmdHlwZSwgJy13JykgIGlmICRocl9pZ253aGl0ZTsKICAgIHB1 c2goQGRpZmZ0eXBlLCAnLWtrJykgaWYgJGhyX2lnbmtleXN1YnN0OwogIH0KCiAgbXkgJGZoID0g ZG8geyBsb2NhbCAoKkZIKTsgfTsKICBpZiAoIW9wZW4oJGZoLCAiLXwiKSkgeyAgICAjIGNoaWxk CiAgICBvcGVuKFNUREVSUiwgIj4mU1RET1VUIik7ICAgICMgUmVkaXJlY3Qgc3RkZXJyIHRvIHN0 ZG91dAogICAgb3Blbk91dHB1dEZpbHRlcigpOwogICAgZXhlYygkQ01Ee3Jjc2RpZmZ9LCBAcmNz ZGlmZl9vcHRpb25zLCBAZGlmZnR5cGUsICItciRyZXYxIiwgIi1yJHJldjIiLAogICAgICAgICAk ZnVsbG5hbWUpIG9yIGV4aXQgLTE7CiAgfQoKICBpZiAoJGh1bWFuX3JlYWRhYmxlKSB7CiAgICAj CiAgICAjIEh1bWFuIHJlYWRhYmxlIGRpZmYuCiAgICAjCiAgICBodW1hbl9yZWFkYWJsZV9kaWZm KCRmaCwgJHJldjIpOwogICAgaHRtbF9mb290ZXIoKTsKICAgIGd6aXBjbG9zZSgpOwogICAgZXhp dDsKCiAgfSBlbHNpZiAoJGYgPX4gL14oW3Vjc10pYyQvKSB7CiAgICAjCiAgICAjIEVuc2NyaXB0 IGNvbG9yZWQgZGlmZi4KICAgICMKICAgIG15ICRobCA9ICdkaWZmJzsKICAgICRobCAuPSAkMSBp ZiAoJDEgZXEgJ3UnIHx8ICQxIGVxICdzJyk7CiAgICAobXkgJHdoZXJlX25kID0gJHdoZXJlKSAg ICAgICA9fiBzL1wuZGlmZiQvLzsKICAgIChteSAkcGF0aG5hbWUgPSAkd2hlcmVfbmQpICAgID1+ IHN8KCg/PD0vKUF0dGljLyk/W14vXSokfHw7CiAgICAobXkgJGZpbGVuYW1lID0gJHdoZXJlX25k KSAgICA9fiBzfF4uKi98fDsKICAgIChteSAkc3doZXJlICAgPSAkc2NyaXB0d2hlcmUpID1+IHN8 XC5kaWZmJHx8OwogICAgbmF2aWdhdGVIZWFkZXIoJHN3aGVyZSwgJHBhdGhuYW1lLCAkZmlsZW5h bWUsICRyZXYyLCAnZGlmZicpOwogICAgcHJpbnRmKDw8RU9GLCAkd2hlcmVfbmQsICRyZXYxLCAk cmV2Mik7CjxoMyBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyIj5EaWZmIGZvciAvJXMgYmV0d2Vl biB2ZXJzaW9ucyAlcyBhbmQgJXM8L2gzPgo8cHJlPgpFT0YKICAgIGRvRW5zY3JpcHQoXCRmaCwg JGhsLCAwLCAnY3Zzd2ViX2RpZmYnKTsKICAgIHByaW50IDw8RU9GOwo8L3ByZT4KPGhyIHN0eWxl PSJ3aWR0aDogMTAwJSIgLz4KPGZvcm0gbWV0aG9kPSJnZXQiIGFjdGlvbj0iJHNjcmlwdHdoZXJl Ij4KRU9GCiAgICBwcmludERpZmZTZWxlY3RTdGlja3lWYXJzKCk7CiAgICBwcmludCAnRGlmZiBm b3JtYXQ6ICc7CiAgICBwcmludERpZmZTZWxlY3QoJHVzZV9qYXZhX3NjcmlwdCk7CiAgICBwcmlu dCAiPGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIlNob3dcIiAvPlxuPC9mb3JtPlxuIjsK ICAgIGh0bWxfZm9vdGVyKCk7CiAgICBnemlwY2xvc2UoKTsKICAgIGV4aXQ7CgogIH0gZWxzZSB7 CiAgICAjCiAgICAjIFBsYWluIGRpZmYuCiAgICAjCiAgICBodHRwX2hlYWRlcigidGV4dC9wbGFp biIpOwogIH0KCiAgIwogICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgI1JDUyBmaWxlOiAvaG9tZS9uY3ZzL3NyYy9z eXMvbmV0aW5ldC90Y3Bfb3V0cHV0LmMsdgogICNyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTYKICAj cmV0cmlldmluZyByZXZpc2lvbiAxLjE3CiAgI2RpZmYgLWMgLXIxLjE2IC1yMS4xNwogICMqKiog L2hvbWUvbmN2cy9zcmMvc3lzL25ldGluZXQvdGNwX291dHB1dC5jICAgICAxOTk1LzExLzAzIDIy OjA4OjA4ICAgICAxLjE2CiAgIy0tLSAvaG9tZS9uY3ZzL3NyYy9zeXMvbmV0aW5ldC90Y3Bfb3V0 cHV0LmMgICAgIDE5OTUvMTIvMDUgMTc6NDY6MzUgICAgIDEuMTcKICAjCiAgIyBJZGVhczoKICAj IC0gbnVrZSB0aGUgc3RkZXJyIG91dHB1dCBpZiBpdCdzIHdoYXQgd2UgZXhwZWN0IGl0IHRvIGJl CiAgIyAtIEFkZCAibm8gZGlmZmVyZW5jZXMgZm91bmQiIGlmIHRoZSBkaWZmIGNvbW1hbmQgc3Vw cGxpZWQgbm8gb3V0cHV0LgogICMKICAjKioqIHNyYy9zeXMvbmV0aW5ldC90Y3Bfb3V0cHV0LmMg ICAgIDE5OTUvMTEvMDMgMjI6MDg6MDggICAgIDEuMTYKICAjLS0tIHNyYy9zeXMvbmV0aW5ldC90 Y3Bfb3V0cHV0LmMgICAgIDE5OTUvMTIvMDUgMTc6NDY6MzUgICAgIDEuMTcgUkVMRU5HXzJfMV8w CiAgIyAoYm9ndXMgZXhhbXBsZSwgYnV0Li4uKQogICMKICBteSAoJGYxLCAkZjIpOwogIGlmIChn cmVwIHsgJF8gZXEgJy11JyB9IEBkaWZmdHlwZSkgewogICAgJGYxID0gJy0tLSc7CiAgICAkZjIg PSAnXCtcK1wrJzsKICB9IGVsc2UgewogICAgJGYxID0gJ1wqXCpcKic7CiAgICAkZjIgPSAnLS0t JzsKICB9CgogIHdoaWxlICg8JGZoPikgewogICAgaWYgKG18XiRmMSAkY3Zzcm9vdHxvKSB7CiAg ICAgIHN8JGN2c3Jvb3QvfHxvOwogICAgICBpZiAoJHN5bTEpIHsKICAgICAgICBjaG9wOwogICAg ICAgICRfIC49ICIgJHN5bTFcbiI7CiAgICAgIH0KICAgIH0gZWxzaWYgKG18XiRmMiAkY3Zzcm9v dHxvKSB7CiAgICAgIHN8JGN2c3Jvb3QvfHxvOwoKICAgICAgaWYgKCRzeW0yKSB7CiAgICAgICAg Y2hvcDsKICAgICAgICAkXyAuPSAiICRzeW0yXG4iOwogICAgICB9CiAgICB9CiAgICBwcmludCAk XzsKICB9CiAgY2xvc2UoJGZoKTsKfQoKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK IyBTaG93IExvZ3MgLi4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpzdWIgZ2V0RGly TG9ncygkJEApCnsKICBteSAoJGN2c3Jvb3QsICRkaXJuYW1lLCBAb3RoZXJGaWxlcykgPSBAXzsK ICBteSAkdGFnID0gJGlucHV0e29ubHlfd2l0aF90YWd9OwogIG15ICREaXJOYW1lID0gY2F0ZGly KCRjdnNyb290LCAkd2hlcmUpOwoKICBteSBAZmlsZXMgPSAmc2FmZWdsb2IoIiREaXJOYW1lLyos diIpOwogIHB1c2ggKEBmaWxlcywgJnNhZmVnbG9iKCIkRGlyTmFtZS9BdHRpYy8qLHYiKSkgdW5s ZXNzICRpbnB1dHtoaWRlYXR0aWN9OwogIGZvcmVhY2ggbXkgJGZpbGUgKEBvdGhlckZpbGVzKSB7 CiAgICBwdXNoKEBmaWxlcywgY2F0ZmlsZSgkRGlyTmFtZSwgJGZpbGUpKTsKICB9CgogICMgV2Vl ZCBvdXQgdW5yZWFkYWJsZSBmaWxlcy4KICBteSAkaSA9IDA7CiAgbXkgQHVucmVhZGFibGUgPSAo KTsKICB3aGlsZSAoJGkgPCBzY2FsYXIoQGZpbGVzKSkgewogICAgIyBOb3RlOiBsYXN0IG1vZGlm aWVkIGZpbGVzIGZyb20gc3ViZGlycyByZXR1cm5lZCBieQogICAgIyBmaW5kTGFzdE1vZGlmaWVk U3ViZGlycygpIGNvbWUgd2l0aG91dCB0aGUgLHYgc3VmZml4IHNvIHRoZXkncmUgbm90CiAgICAj IGZvdW5kIGhlcmUsIGJ1dCBoYXZlIGFscmVhZHkgYmVlbiBjaGVja2VkIGZvciByZWFkYWJpbGl0 eS4gICpjb3VnaCoKICAgIGlmICgtciAkZmlsZXNbJGldIHx8ICEtZSBfKSB7CiAgICAgICRpKys7 CiAgICB9IGVsc2UgewogICAgICBwdXNoKEB1bnJlYWRhYmxlLCBzcGxpY2UoQGZpbGVzLCAkaSwg MSkpOwogICAgfQogIH0KCiAgIyBJZiB0aGVyZSBhcmUgbm8gZmlsZXMsIHdlJ3JlIGRvbmUuCiAg cmV0dXJuIEB1bnJlYWRhYmxlIHVubGVzcyBAZmlsZXM7CgogIG15IEBjbWQgPSAoJENNRHtybG9n fSk7CiAgIyBDYW4ndCB1c2UgLXI8dGFnPiBhcyAnLScgaXMgYWxsb3dlZCBpbiB0YWduYW1lcywK ICAjIGJ1dCBtaXNpbnRlcnByZXRlZCBieSBybG9nLgogIHB1c2goQGNtZCwgJy1yJykgdW5sZXNz IGRlZmluZWQoJHRhZyk7CgogIG15ICRmaCA9IGRvIHsgbG9jYWwgKCpGSCk7IH07CiAgaWYgKCFv cGVuKCRmaCwgJy18JykpIHsgICAgICAgICAgICAgICAgICAgICAgICMgQ2hpbGQKICAgIG9wZW4o U1RERVJSLCAnPicsIGRldm51bGwoKSkgdW5sZXNzICRERUJVRzsgIyBJZ25vcmUgcmxvZydzIGNv bXBsYWludHMuCiAgICBvcGVuT3V0cHV0RmlsdGVyKCk7CiAgICBpZiAoJGZpbGVfbGlzdF9sZW4g JiYgJGZpbGVfbGlzdF9sZW4gPiAxKSB7CiAgICAgIHdoaWxlIChzY2FsYXIoQGZpbGVzKSA+ICRm aWxlX2xpc3RfbGVuKSB7ICAjIFByb2Nlc3MgZmlsZXMgaW4gY2h1bmtzLgogICAgICAgIHN5c3Rl bShAY21kLCBzcGxpY2UoQGZpbGVzLCAwLCAkZmlsZV9saXN0X2xlbikpID09IDAgb3IgZXhpdCAt MTsKICAgICAgfQogICAgfQogICAgZXhlYyhAY21kLCBAZmlsZXMpIG9yIGV4aXQgLTE7CiAgfQog IHVuZGVmIEBjbWQ7CgogIG15ICRzdGF0ZSA9ICdzdGFydCc7CiAgbXkgKCRkYXRlLCAkYnJhbmNo cG9pbnQsICRicmFuY2gsICRsb2csIEBmaWxldGFncyk7CiAgbXkgKCRyZXYsICRyZXZpc2lvbiwg JHJldndhbnRlZCwgJGZpbGVuYW1lLCAkaGVhZCwgJGF1dGhvciwgJGtleXdvcmRzdWJzdCk7Cgog IHdoaWxlICg8JGZoPikgewogICAgaWYgKCRzdGF0ZSBlcSAic3RhcnQiKSB7CgogICAgICAjTmV4 dCBmaWxlLiBJbml0aWFsaXplIGZpbGUgdmFyaWFibGVzCiAgICAgICRyZXYgICAgICAgICA9ICcn OwogICAgICAkcmV2d2FudGVkICAgPSAnJzsKICAgICAgJGJyYW5jaCAgICAgID0gJyc7CiAgICAg ICRicmFuY2hwb2ludCA9ICcnOwogICAgICAkZmlsZW5hbWUgICAgPSAnJzsKICAgICAgJGxvZyAg ICAgICAgID0gJyc7CiAgICAgICRyZXZpc2lvbiAgICA9ICcnOwogICAgICAlc3ltcmV2ICAgICAg PSAoKTsKICAgICAgQGZpbGV0YWdzICAgID0gKCk7CiAgICAgICRrZXl3b3Jkc3Vic3Q9ICcnOwoK ICAgICAgI2p1bXAgdG8gaGVhZCBzdGF0ZQogICAgICAkc3RhdGUgPSAiaGVhZCI7CiAgICB9Cgog ICAgYWdhaW46CgogICAgaWYgKCRzdGF0ZSBlcSAiaGVhZCIpIHsKCiAgICAgICMkcmNzZmlsZSA9 ICQxIGlmICgvXlJDUyBmaWxlOiAoLispJC8pOyAjbm90IHVzZWQgKHlldCkKCiAgICAgIGlmICgv XldvcmtpbmcgZmlsZTogKC4rKSQvKSB7CiAgICAgICAgJGZpbGVuYW1lID0gJDE7CiAgICAgIH0g ZWxzaWYgKC9eaGVhZDogKC4rKSQvKSB7CiAgICAgICAgJGhlYWQgPSAkMTsKICAgICAgfSBlbHNp ZiAoL15icmFuY2g6ICguKykkLykgewogICAgICAgICRicmFuY2ggPSAkMTsKICAgICAgfSBlbHNp ZiAoL15rZXl3b3JkIHN1YnN0aXR1dGlvbjogKC4rKSQvKSB7CiAgICAgICAgJGtleXdvcmRzdWJz dCA9ICQxOwogICAgICB9IGVsc2lmICgvXnN5bWJvbGljIG5hbWVzOi8pIHsKICAgICAgICAkc3Rh dGUgPSAidGFncyI7CiAgICAgICAgKCRicmFuY2ggPSAkaGVhZCkgPX4gcy9cLlxkKyQvLwogICAg ICAgICAgaWYgJGJyYW5jaCBlcSAnJzsKICAgICAgICAkYnJhbmNoID1+IHMvKFxkKykkLzAuJDEv OwogICAgICAgICRzeW1yZXZ7TUFJTn0gID0gJGJyYW5jaDsKICAgICAgICAkc3ltcmV2e0hFQUR9 ICA9ICRicmFuY2g7CiAgICAgICAgJGFsbHRhZ3N7TUFJTn0gPSAxOwogICAgICAgICRhbGx0YWdz e0hFQUR9ID0gMTsKICAgICAgICBwdXNoIChAZmlsZXRhZ3MsICJNQUlOIiwgIkhFQUQiKTsKICAg ICAgfSBlbHNpZiAoJF8gPX4gTE9HX1JFVlNFUFIpIHsKICAgICAgICAkc3RhdGUgPSAibG9nIjsK ICAgICAgICAkcmV2ICAgPSAnJzsKICAgICAgICAkZGF0ZSAgPSAnJzsKICAgICAgICAkbG9nICAg PSAnJzsKCiAgICAgICAgIyBUcnkgdG8gcmVjb25zdHJ1Y3QgdGhlIHJlbGF0aXZlIGZpbGVuYW1l IGlmIFJDUyBzcGl0cyBvdXQgYSBmdWxsIHBhdGgKICAgICAgICAkZmlsZW5hbWUgPX4gcyVeXFEk RGlyTmFtZVxFLyUlOwogICAgICB9CiAgICAgIG5leHQ7CiAgICB9CgogICAgaWYgKCRzdGF0ZSBl cSAidGFncyIpIHsKICAgICAgaWYgKC9eXHMrKFteOl0rKTpccysoW1xkXC5dKylccyokLykgewog ICAgICAgIHB1c2ggKEBmaWxldGFncywgJDEpOwogICAgICAgICRzeW1yZXZ7JDF9ICA9ICQyOwog ICAgICAgICRhbGx0YWdzeyQxfSA9IDE7CiAgICAgICAgbmV4dDsKICAgICAgfSBlbHNpZiAoL15c Uy8pIHsKCiAgICAgICAgaWYgKGRlZmluZWQoJHRhZykpIHsKICAgICAgICAgIGlmIChkZWZpbmVk KCRzeW1yZXZ7JHRhZ30pIHx8ICR0YWcgZXEgIkhFQUQiKSB7CiAgICAgICAgICAgICRyZXZ3YW50 ZWQgICAgPSAkc3ltcmV2eyR0YWcgZXEgIkhFQUQiID8gIk1BSU4iIDogJHRhZ307CiAgICAgICAg ICAgICgkYnJhbmNoICAgICAgPSAkcmV2d2FudGVkKSA9fiBzL1xiMFwuLy87CiAgICAgICAgICAg ICgkYnJhbmNocG9pbnQgPSAkYnJhbmNoKSAgICA9fiBzL1wuP1xkKyQvLzsKICAgICAgICAgICAg JHJldndhbnRlZCAgICA9ICcnIGlmICgkcmV2d2FudGVkIG5lICRicmFuY2gpOwogICAgICAgICAg fSBlbHNpZiAoJHRhZyBuZSAiSEVBRCIpIHsKICAgICAgICAgICAgJHN0YXRlID0gInNraXAiOwog ICAgICAgICAgICBuZXh0OwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCBt eSAkdGFnZm91bmQgKEBmaWxldGFncykgewogICAgICAgICAgJHRhZ3N7JHRhZ2ZvdW5kfSA9IDE7 CiAgICAgICAgfQogICAgICAgICRzdGF0ZSA9ICJoZWFkIjsKICAgICAgICBnb3RvIGFnYWluOwog ICAgICB9CiAgICB9CgogICAgaWYgKCRzdGF0ZSBlcSAibG9nIikgewogICAgICBpZiAoJF8gPX4g TE9HX1JFVlNFUFIgfHwgJF8gPX4gTE9HX0ZJTEVTRVBSKSB7CgogICAgICAgICMgRW5kIG9mIGEg bG9nIGVudHJ5LgogICAgICAgIG15ICRyZXZicmFuY2ggPSAkcmV2OwogICAgICAgICRyZXZicmFu Y2ggPX4gcy9cLlxkKyQvLzsKCiAgICAgICAgaWYgKCRyZXZ3YW50ZWQgZXEgJycgJiYgJGJyYW5j aCBuZSAnJyAmJiAkYnJhbmNoIGVxICRyZXZicmFuY2gKICAgICAgICAgICAgfHwgIWRlZmluZWQo JHRhZykpCiAgICAgICAgewogICAgICAgICAgJHJldndhbnRlZCA9ICRyZXY7CiAgICAgICAgfQoK ICAgICAgICBpZiAoJHJldndhbnRlZCBuZSAnJwogICAgICAgICAgICA/ICRyZXYgZXEgJHJldndh bnRlZAogICAgICAgICAgICA6ICRicmFuY2hwb2ludCBuZSAnJwogICAgICAgICAgICAgID8gJHJl diBlcSAkYnJhbmNocG9pbnQKICAgICAgICAgICAgICA6IDAKICAgICAgICAgICAgJiYgKCRyZXYg ZXEgJGhlYWQpKQogICAgICAgIHsgICAgIyBEb24ndCB0aGluayBoZWFkIGlzIG5lZWRlZCBoZXJl Li4KICAgICAgICAgIG15IEBmaW5mbyA9ICgkcmV2LCAkZGF0ZSwgJGxvZywgJGF1dGhvciwgJGZp bGVuYW1lLCAka2V5d29yZHN1YnN0KTsKICAgICAgICAgIChteSAkbmFtZSA9ICRmaWxlbmFtZSkg PX4gcyUvLiolJTsKICAgICAgICAgICRmaWxlaW5mb3skbmFtZX0gPSBbQGZpbmZvXTsKICAgICAg ICAgICRzdGF0ZSA9ICJkb25lIiBpZiAoJHJldiBlcSAkcmV2d2FudGVkKTsKICAgICAgICB9CiAg ICAgICAgJHJldiAgPSAnJzsKICAgICAgICAkZGF0ZSA9ICcnOwogICAgICAgICRsb2cgID0gJyc7 CiAgICAgIH0gZWxzaWYgKCRkYXRlIGVxICcnCiAgICAgICAgICAgICAgICYmIG18XmRhdGU6XHMr KFxkKykvKFxkKykvKFxkKylccysoXGQrKTooXGQrKTooXGQrKTt8KQogICAgICB7CiAgICAgICAg bXkgJHlyICAgID0gJDE7CiAgICAgICAgJHlyICAgICAgLT0gMTkwMCBpZiAoJHlyID4gMTAwKTsg IyBEYW1uIDItZGlnaXQgeWVhciByb3V0aW5lcyA6LSkKICAgICAgICAkZGF0ZSAgICAgPSB0aW1l Z20oJDYsICQ1LCAkNCwgJDMsICQyIC0gMSwgJHlyKTsKICAgICAgICAoJGF1dGhvcikgPSAvYXV0 aG9yOiAoW147XSspLzsKICAgICAgICAkc3RhdGUgICAgPSAnbG9nJzsKICAgICAgICAkbG9nICAg ICAgPSAnJzsKICAgICAgICBuZXh0OwogICAgICB9IGVsc2lmICgkcmV2IGVxICcnICYmIC9ecmV2 aXNpb24gKFxkKyg/OlwuXGQrKSspLiokLykgewogICAgICAgICRyZXYgPSAkMTsgICAgIyAuKiQg ZWF0cyB1cCB0aGUgbG9ja2VyKGxvY2tlcnM/KSBpbmZvLCBpZiBhbnkKICAgICAgICBuZXh0Owog ICAgICB9IGVsc2UgewogICAgICAgICRsb2cgLj0gJF87CiAgICAgIH0KICAgIH0KCiAgICBpZiAo JF8gPX4gTE9HX0ZJTEVTRVBSKSB7CiAgICAgICRzdGF0ZSA9ICJzdGFydCI7CiAgICAgIG5leHQ7 CiAgICB9CiAgfQoKICBteSAkbGluZXNyZWFkID0gJC4gfHwgMDsKICBjbG9zZSgkZmgpOwoKICBp ZiAoJGxpbmVzcmVhZCA9PSAwKSB7CiAgICBmYXRhbCgnNTAwIEludGVybmFsIEVycm9yJywKICAg ICAgICAgICdGYWlsZWQgdG8gc3Bhd24gR05VIHJsb2cgb24gPGVtPiIlcyI8L2VtPi48YnIgLz48 YnIgLz5EaWQgeW91IHNldCB0aGUgPGI+PGNvZGU+QGNvbW1hbmRfcGF0aDwvY29kZT48L2I+IGlu IHlvdXIgY29uZmlndXJhdGlvbiBmaWxlIGNvcnJlY3RseT8gKEN1cnJlbnRseTogIjxjb2RlPiVz PC9jb2RlPiIpJywKICAgICAgICAgIGh0bWxxdW90ZShqb2luKCcsICcsIEBmaWxlcykpLCBqb2lu KCc6JywgQGNvbW1hbmRfcGF0aCkpOwogIH0KCiAgcmV0dXJuIEB1bnJlYWRhYmxlOwp9CgoKc3Vi IHJlYWRMb2coJDskKQp7CiAgbXkgKCRmdWxsbmFtZSwgJHJldmlzaW9uKSA9IEBfOwogIG15ICgk c3ltbmFtZXMsICRoZWFkLCAkcmV2LCAkYnIsICRicnAsICRicmFuY2gsICRicmFuY2hyZXYpOwoK ICB1bmRlZiAlc3ltcmV2OwogIHVuZGVmICVyZXZzeW07CiAgdW5kZWYgQGFsbHJldmlzaW9uczsK ICB1bmRlZiAlZGF0ZTsKICB1bmRlZiAlYXV0aG9yOwogIHVuZGVmICVzdGF0ZTsKICB1bmRlZiAl ZGlmZmxpbmVzOwogIHVuZGVmICVsb2c7CiAgJGtleXdvcmRzdWJzdGl0dXRpb24gPSAnJzsKCiAg bXkgJGZoID0gZG8geyBsb2NhbCAoKkZIKTsgfTsKICBpZiAoIW9wZW4oJGZoLCAiLXwiKSkgeyAg ICAjIGNoaWxkCiAgICBvcGVuT3V0cHV0RmlsdGVyKCk7CiAgICAkcmV2aXNpb24gPSBkZWZpbmVk KCRyZXZpc2lvbikgPyAiLXIkcmV2aXNpb24iIDogJyc7CiAgICBpZiAoJHJldmlzaW9uID1+IC9c Li8pIHsKICAgICAgIyBOb3JtYWwgcmV2aXNpb24sIG5vdCBhIGJyYW5jaC90YWcgbmFtZS4KICAg ICAgZXhlYygkQ01Ee3Jsb2d9LCAkcmV2aXNpb24sICRmdWxsbmFtZSkgb3IgZXhpdCAtMTsKICAg IH0gZWxzZSB7CiAgICAgIGV4ZWMoJENNRHtybG9nfSwgJGZ1bGxuYW1lKSBvciBleGl0IC0xOwog ICAgfQogIH0KCiAgbXkgJGN1cmJyYW5jaCA9IHVuZGVmOwogIHdoaWxlICg8JGZoPikgewogICAg aWYgKCRzeW1uYW1lcykgewogICAgICBpZiAoL15ccysoW146XSspOlxzKyhbXGRcLl0rKS8pIHsK ICAgICAgICAkc3ltcmV2eyQxfSA9ICQyOwogICAgICAgIG5leHQ7CiAgICAgIH0gZWxzZSB7CiAg ICAgICAgJHN5bW5hbWVzID0gMDsKICAgICAgfQogICAgfQogICAgaWYgKC9eaGVhZDpccysoW1xk XC5dKykvKSB7CiAgICAgICRoZWFkID0gJDE7CiAgICB9IGVsc2lmICgvXmJyYW5jaDpccysoW1xk XC5dKykvKSB7CiAgICAgICRjdXJicmFuY2ggPSAkMTsKICAgIH0gZWxzaWYgKC9ec3ltYm9saWMg bmFtZXMvKSB7CiAgICAgICRzeW1uYW1lcyA9IDE7CiAgICB9IGVsc2lmICgvXmtleXdvcmQgc3Vi c3RpdHV0aW9uOiAoLispJC8pIHsKICAgICAgJGtleXdvcmRzdWJzdGl0dXRpb24gPSAkMTsKICAg IH0gZWxzaWYgKC9eLS0tLS0vKSB7CiAgICAgIGxhc3Q7CiAgICB9CiAgfQogICgkY3VyYnJhbmNo ID0gJGhlYWQpID1+IHMvXC5cZCskLy8gaWYgKCFkZWZpbmVkKCRjdXJicmFuY2gpKTsKCiAgIyBl YWNoIGxvZyBlbnRyeSBpcyBvZiB0aGUgZm9ybToKICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KICAjIHJldmlzaW9uIDMuNy4xLjEKICAjIGRhdGU6IDE5OTUvMTEvMjkgMjI6MTU6NTI7 ICBhdXRob3I6IGZlbm5lcjsgIHN0YXRlOiBFeHA7ICBsaW5lczogKzUgLTMKICAjIGxvZyBpbmZv CiAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICMgRm9yIGEgbG9ja2VkIHJldmlz aW9uLCB0aGUgZmlyc3QgbGluZSBhZnRlciB0aGUgc2VwYXJhdG9yIAogICMgYmVjb21lcyBzbXRo IGxpa2UKICAjIHJldmlzaW9uIDkuMTkgICAgICAgbG9ja2VkIGJ5OiB2YXNzaWxpaTsKCiAgbG9n ZW50cnk6CgogIHdoaWxlICgkXyAhfiBMT0dfRklMRVNFUFIpIHsKICAgICRfID0gPCRmaD47CiAg ICBsYXN0IGxvZ2VudHJ5IGlmICghZGVmaW5lZCgkXykpOyAgICAjIEVPRgogICAgaWYgKC9ecmV2 aXNpb24gKFxkKyg/OlwuXGQrKSspLykgewogICAgICAkcmV2ID0gJDE7CiAgICAgIHVuc2hpZnQo QGFsbHJldmlzaW9ucywgJHJldik7CiAgICB9IGVsc2lmICgkXyA9fiBMT0dfRklMRVNFUFIgfHwg JF8gPX4gTE9HX1JFVlNFUFIpIHsKICAgICAgbmV4dCBsb2dlbnRyeTsKICAgIH0gZWxzZSB7Cgog ICAgICAjIFRoZSBybG9nIG91dHB1dCBpcyBzeW50YWN0aWNhbGx5IGFtYmlndW91cy4gIFdlIG11 c3QKICAgICAgIyBoYXZlIGd1ZXNzZWQgd3JvbmcgYWJvdXQgd2hlcmUgdGhlIGVuZCBvZiB0aGUg bGFzdCBsb2cKICAgICAgIyBtZXNzYWdlIHdhcy4KICAgICAgIyBTaW5jZSB0aGlzIGlzIGxpa2Vs eSB0byBoYXBwZW4gd2hlbiBwZW9wbGUgcHV0IHJsb2cgb3V0cHV0CiAgICAgICMgaW4gdGhlaXIg Y29tbWl0IG1lc3NhZ2VzLCBkb24ndCBldmVuIGJvdGhlciBrZWVwaW5nCiAgICAgICMgdGhlc2Ug bGluZXMgc2luY2Ugd2UgZG9uJ3Qga25vdyB3aGF0IHJldmlzaW9uIHRoZXkgZ28gd2l0aAogICAg ICAjIGFueSBtb3JlLgogICAgICBuZXh0IGxvZ2VudHJ5OwogICAgfQogICAgJF8gPSA8JGZoPjsK ICAgIGlmICgKICAgICAgbXxeZGF0ZTpccysoXGQrKS8oXGQrKS8oXGQrKVxzKyhcZCspOihcZCsp OihcZCspO1xzK2F1dGhvcjpccysoXFMrKTtccytzdGF0ZTpccysoXFMrKTtccysobGluZXM6XHMr KFswLTlccystXSspKT98CiAgICAgICkKICAgIHsKICAgICAgbXkgJHlyICAgICAgICAgICA9ICQx OwogICAgICAkeXIgICAgICAgICAgICAgLT0gMTkwMCBpZiAoJHlyID4gMTAwKTsgIyBEYW1uIDIt ZGlnaXQgeWVhciByb3V0aW5lcyA6LSkKICAgICAgJGRhdGV7JHJldn0gICAgICA9IHRpbWVnbSgk NiwgJDUsICQ0LCAkMywgJDIgLSAxLCAkeXIpOwogICAgICAkYXV0aG9yeyRyZXZ9ICAgID0gJDc7 CiAgICAgICRzdGF0ZXskcmV2fSAgICAgPSAkODsKICAgICAgJGRpZmZsaW5lc3skcmV2fSA9ICQx MDsKICAgIH0gZWxzZSB7CiAgICAgIGZhdGFsKCI1MDAgSW50ZXJuYWwgRXJyb3IiLCAnRXJyb3Ig cGFyc2luZyBSQ1Mgb3V0cHV0OiAlcycsICRfKTsKICAgIH0KCiAgbGluZToKICAgIHdoaWxlICg8 JGZoPikgewogICAgICBuZXh0IGxpbmUgaWYgKC9eYnJhbmNoZXM6XHMvKTsKICAgICAgbGFzdCBs aW5lIGlmICgkXyA9fiBMT0dfRklMRVNFUFIgfHwgJF8gPX4gTE9HX1JFVlNFUFIpOwogICAgICAk bG9neyRyZXZ9IC49ICRfOwogICAgfQogIH0KICBjbG9zZSgkZmgpOwoKICBAcmV2b3JkZXIgPSBy ZXZlcnNlIHNvcnQgeyByZXZjbXAoJGEsICRiKSB9IEBhbGxyZXZpc2lvbnM7CgogICMKICAjIEhF QUQgaXMgYW4gYXJ0aWZpY2lhbCB0YWcgd2hpY2ggaXMgc2ltcGx5IHRoZSBoaWdoZXN0IHRhZyBu dW1iZXIgb24gdGhlIG1haW4KICAjIGJyYW5jaCwgdW5sZXNzIHRoZXJlIGlzIGEgYnJhbmNoIHRh ZyBpbiB0aGUgUkNTIGZpbGUgaW4gd2hpY2ggY2FzZSBpdCdzIHRoZQogICMgaGlnaGVzdCByZXZp c2lvbiBvbiB0aGF0IGJyYW5jaC4gIEZpbmQgaXQgYnkgbG9va2luZyB0aHJvdWdoIEByZXZvcmRl cjsgaXQKICAjIGlzIHRoZSBmaXJzdCBjb21taXQgbGlzdGVkIG9uIHRoZSBhcHByb3ByaWF0ZSBi cmFuY2guCiAgIyBUaGlzIGlzIG5vdCBuZWNjZXNhcnkgdGhlIHNhbWUgcmV2aXNpb24gYXMgbWFy a2VkIGFzIGhlYWQgaW4gdGhlIFJDUyBmaWxlLgogIG15ICRoZWFkcmV2ID0gJGN1cmJyYW5jaCB8 fCAiMSI7CiAgKCRzeW1yZXZ7TUFJTn0gPSAkaGVhZHJldikgPX4gcy8oXGQrKSQvMC4kMS87Cgog IGZvcmVhY2ggJHJldiAoQHJldm9yZGVyKSB7CiAgICBpZiAoJHJldiA9fiAvXihcUyopXC5cZCsk LyAmJiAkaGVhZHJldiBlcSAkMSkgewogICAgICAkc3ltcmV2e0hFQUR9ID0gJHJldjsKICAgICAg bGFzdDsKICAgIH0KICB9CiAgKCRzeW1yZXZ7SEVBRH0gPSAkaGVhZHJldikgPX4gcy9cLlxkKyQv LyB1bmxlc3MgZGVmaW5lZCgkc3ltcmV2e0hFQUR9KTsKCiAgIwogICMgTm93IHRoYXQgd2Uga25v dyBhbGwgb2YgdGhlIHJldmlzaW9uIG51bWJlcnMsIHdlIGNhbiBhc3NvY2lhdGUKICAjIGFic29s dXRlIHJldmlzaW9uIG51bWJlcnMgd2l0aCBhbGwgb2YgdGhlIHN5bWJvbGljIG5hbWVzLCBhbmQK ICAjIHBhc3MgdGhlbSB0byB0aGUgZm9ybSBzbyB0aGF0IHRoZSBzYW1lIGFzc29jaWF0aW9uIGRv ZXNuJ3QgaGF2ZQogICMgdG8gYmUgYnVpbHQgdGhlbi4KICAjCiAgdW5kZWYgQGJyYW5jaG5hbWVz OwogIHVuZGVmICVicmFuY2hwb2ludDsKICB1bmRlZiAkc2VsOwoKICBmb3JlYWNoIChyZXZlcnNl IHNvcnQga2V5cyAlc3ltcmV2KSB7CiAgICAkcmV2ID0gJHN5bXJldnskX307CiAgICBpZiAoJHJl diA9fiAvXigoLiopXC4pP1xiMFwuKFxkKykkLykgewogICAgICBwdXNoIChAYnJhbmNobmFtZXMs ICRfKTsKCiAgICAgICMKICAgICAgIyBBIHJldmlzaW9uIG51bWJlciBvZiBBLkIuMC5EIHJlYWxs eSB0cmFuc2xhdGVzIGludG8KICAgICAgIyAidGhlIGhpZ2hlc3QgY3VycmVudCByZXZpc2lvbiBv biBicmFuY2ggQS5CLkQiLgogICAgICAjCiAgICAgICMgSWYgdGhlcmUgaXMgbm8gYnJhbmNoIEEu Qi5ELCB0aGVuIGl0IHRyYW5zbGF0ZXMgaW50bwogICAgICAjIHRoZSBoZWFkIEEuQiAuCiAgICAg ICMKICAgICAgIyBUaGlzIHJlYXNvbmluZyBhbHNvIGFwcGxpZXMgdG8gdGhlIG1haW4gYnJhbmNo IEEuQiwKICAgICAgIyB3aXRoIHRoZSBicmFuY2ggbnVtYmVyIDAuQSwgd2l0aCB0aGUgZXhjZXB0 aW9uIHRoYXQKICAgICAgIyBpdCBoYXMgbm8gaGVhZCB0byB0cmFuc2xhdGUgdG8gaWYgdGhlcmUg aXMgbm90aGluZyBvbgogICAgICAjIHRoZSBicmFuY2gsIGJ1dCBJIGd1ZXNzIHRoaXMgY2FuIG5l dmVyIGhhcHBlbj8KICAgICAgIwogICAgICAjICh0aGUgY29kZSBiZWxvdyBncmFjZWZ1bGx5IGZv cmdldHMgYWJvdXQgdGhlIGJyYW5jaAogICAgICAjIGlmIGl0IHNob3VsZCBoYXBwZW4pCiAgICAg ICMKICAgICAgJGhlYWQgPSBkZWZpbmVkKCQyKSA/ICQyIDogIiI7CiAgICAgICRicmFuY2ggPSAk MzsKICAgICAgJGJyYW5jaHJldiA9ICRoZWFkIC4gKCRoZWFkIG5lICIiID8gIi4iIDogIiIpIC4g JGJyYW5jaDsKICAgICAgJHJldiA9ICRoZWFkOwoKICAgICAgbXkgJHJlZ2V4ID0gJ14nIC4gcXVv dGVtZXRhKCRicmFuY2hyZXYpIC4gJ1xiJzsKICAgICAgJHJlZ2V4ID0gcXIvJHJlZ2V4LzsKCiAg ICAgIGZvcmVhY2ggbXkgJHIgKEByZXZvcmRlcikgewogICAgICAgIGlmICgkciA9fiAkcmVnZXgp IHsKICAgICAgICAgICRyZXYgPSAkYnJhbmNocmV2OwogICAgICAgICAgbGFzdDsKICAgICAgICB9 CiAgICAgIH0KICAgICAgbmV4dCBpZiAoJHJldiBlcSAiIik7CgogICAgICBpZiAoJHJldiBuZSAk aGVhZCAmJiAkaGVhZCBuZSAiIikgewogICAgICAgICRicmFuY2hwb2ludHskaGVhZH0gLj0gJywg JyBpZiAoJGJyYW5jaHBvaW50eyRoZWFkfSk7CiAgICAgICAgJGJyYW5jaHBvaW50eyRoZWFkfSAu PSAkXzsKICAgICAgfQogICAgfQogICAgJHJldnN5bXskcmV2fSAuPSAiLCAiIGlmICgkcmV2c3lt eyRyZXZ9KTsKICAgICRyZXZzeW17JHJldn0gLj0gJF87CiAgICAkc2VsIC49IHNwcmludGYoIjxv cHRpb24gdmFsdWU9XCIlczolc1wiPiVzPC9vcHRpb24+XG4iLAogICAgICAgICAgICAgICAgICAg IGh0bWxxdW90ZSgkcmV2KSwgKGh0bWxxdW90ZSgkXykpIHggMik7CiAgfQoKICBteSAoJG9ubHlv bmJyYW5jaCwgJG9ubHlicmFuY2hwb2ludCk7CiAgaWYgKCRvbmx5b25icmFuY2ggPSAkaW5wdXR7 b25seV93aXRoX3RhZ30pIHsKICAgICRvbmx5b25icmFuY2ggPSAkc3ltcmV2eyRvbmx5b25icmFu Y2h9OwogICAgaWYgKCRvbmx5b25icmFuY2ggJiYgJG9ubHlvbmJyYW5jaCA9fiBzL1xiMFwuLy8p IHsKICAgICAgKCRvbmx5YnJhbmNocG9pbnQgPSAkb25seW9uYnJhbmNoKSA9fiBzL1wuXGQrJC8v OwogICAgfSBlbHNlIHsKICAgICAgJG9ubHlicmFuY2hwb2ludCA9ICRvbmx5b25icmFuY2g7CiAg ICB9CgogICAgaWYgKCFkZWZpbmVkKCRvbmx5b25icmFuY2gpIHx8ICRvbmx5YnJhbmNocG9pbnQg ZXEgIiIpIHsKICAgICAgZmF0YWwoIjQwNCBUYWcgbm90IGZvdW5kIiwgJ1RhZyAiPGNvZGU+JXM8 L2NvZGU+IiBpcyBub3QgZGVmaW5lZC4nLAogICAgICAgICAgICAkaW5wdXR7b25seV93aXRoX3Rh Z30pOwogICAgfQogIH0KCiAgdW5kZWYgQHJldmlzaW9uczsKCiAgZm9yZWFjaCAoQGFsbHJldmlz aW9ucykgewogICAgKCRiciAgPSAkXykgID1+IHMvXC5cZCskLy87CiAgICAoJGJycCA9ICRicikg PX4gcy9cLlxkKyQvLzsKICAgIG5leHQgaWYgKCRvbmx5b25icmFuY2gKICAgICAgICAgICAgICYm ICRiciBuZSAkb25seW9uYnJhbmNoCiAgICAgICAgICAgICAmJiAkXyAgbmUgJG9ubHlicmFuY2hw b2ludCk7CiAgICB1bnNoaWZ0KEByZXZpc2lvbnMsICRfKTsKICB9CgogIGlmICgkbG9nc29ydCBl cSAiZGF0ZSIpIHsKCiAgICAjIFNvcnQgdGhlIHJldmlzaW9ucyBpbiBjb21taXQgb3JkZXIgYW4g c2Vjb25kYXJ5IHNvcnQgb24gcmV2aXNpb24KICAgICMgKHNlY29uZGFyeSBzb3J0IG5lZWRlZCBm b3IgaW1wb3J0ZWQgc291cmNlcywgb3IgdGhlIGZpcnN0IG1haW4KICAgICMgcmV2aXNpb24gZ2V0 cyBiZWZvcmUgdGhlIHNhbWUgcmV2aXNpb24gb24gdGhlIDEuMS4xIGJyYW5jaCkKICAgIEByZXZk aXNwbGF5b3JkZXIgPQogICAgICBzb3J0IHsgJGRhdGV7JGJ9IDw9PiAkZGF0ZXskYX0gfHwgLXJl dmNtcCgkYSwgJGIpIH0gQHJldmlzaW9uczsKICB9IGVsc2lmICgkbG9nc29ydCBlcSAicmV2Iikg ewoKICAgICMgU29ydCB0aGUgcmV2aXNpb25zIGluIHJldmlzaW9uIG9yZGVyLCBoaWdoZXN0IGZp cnN0CiAgICBAcmV2ZGlzcGxheW9yZGVyID0gcmV2ZXJzZSBzb3J0IHsgcmV2Y21wKCRhLCAkYikg fSBAcmV2aXNpb25zOwogIH0gZWxzZSB7CgogICAgIyBObyBzb3J0aW5nLiBQcmVzZW50IGluIHRo ZSBzYW1lIG9yZGVyIGFzIHJsb2cgLyBjdnMgbG9nCiAgICBAcmV2ZGlzcGxheW9yZGVyID0gQHJl dmlzaW9uczsKICB9CgogIHJldHVybiAkY3VyYnJhbmNoOwp9CgoKc3ViIGdldERpZmZMaW5rcygk JCQpCnsKICBteSAoJHVybCwgJG1pbWV0eXBlLCAkaXNiaW4pID0gQF87CgogIG15IEBsaW5rcyA9 ICgpOwogIGlmICghJGlzYmluKSB7ICMgT2ZmZXIgb3JkaW5hcnkgZGlmZiBvbmx5IGZvciBub24t YmluYXJ5IGZpbGVzLgogICAgcHVzaChAbGlua3MsICZsaW5rKCdwcmVmZXJyZWQnLCAkdXJsKSk7 CiAgICBmb3IgbXkgJGRpZmZ0eXBlICgkRElGRlRZUEVTeyRkZWZhdWx0RGlmZlR5cGV9e2NvbG9y ZWR9ID8gcXcodSkgOiBxdyhoKSkgewogICAgICBteSAkZiA9ICRkaWZmdHlwZSBlcSAkZGVmYXVs dERpZmZUeXBlID8gJycgOiAkZGlmZnR5cGU7CiAgICAgIHB1c2goQGxpbmtzLAogICAgICAgICAg ICZsaW5rKGh0bWxxdW90ZShsYygkRElGRlRZUEVTeyRkaWZmdHlwZX17ZGVzY3J9KSksICIkdXJs O2Y9JGYiKSk7CiAgICB9CiAgfQogIGlmIChteSAkZXh0ZGlmZnMgPSAkRElGRl9DT01NQU5EU3ts YygkbWltZXR5cGUpfSkgewogICAgZm9yIG15ICRpICgwIC4uIHNjYWxhcihAJGV4dGRpZmZzKS0x KSB7CiAgICAgIG15ICRleHRkaWZmID0gJGV4dGRpZmZzLT5bJGldOwogICAgICBwdXNoKEBsaW5r cywgJmxpbmsoaHRtbHF1b3RlKCRleHRkaWZmLT57bmFtZX0pLCAiJHVybDtmPWV4dCRpIikpCiAg ICAgICAgaWYgKCRleHRkaWZmLT57Y21kfSAmJiAkZXh0ZGlmZi0+e25hbWV9KTsKICAgIH0KICB9 CiAgcmV0dXJuIEBsaW5rczsKfQoKCnN1YiBwcmludExvZygkJCQ7JCQpCnsKICAjIGlubG9ndmll dzogMSBpZiBpbiBsb2cgdmlldywgb3RoZXJ3aXNlIGluIG1hcmt1cCB2aWV3LgogICgkXywgbXkg JG1pbWV0eXBlLCBteSAkaXNiaW4sIG15ICRpbmxvZ3ZpZXcsIG15ICRpc1NlbGVjdGVkKSA9IEBf OwogIChteSAkYnIgID0gJF8pICA9fiBzL1wuXGQrJC8vOwogIChteSAkYnJwID0gJGJyKSA9fiBz L1wuP1xkKyQvLzsKCiAgcHJpbnQgIjxhIG5hbWU9XCJyZXYkX1wiPjwvYT4iOwogIGlmIChkZWZp bmVkKCRyZXZzeW17JF99KSkgewogICAgZm9yZWFjaCBteSAkc3ltIChzcGxpdCgiLCAiLCAkcmV2 c3lteyRffSkpIHsKICAgICAgcHJpbnQgJzxhIG5hbWU9IicsIGh0bWxxdW90ZSgkc3ltKSwgJyI+ PC9hPic7CiAgICB9CiAgfQogIGlmICgkcmV2c3lteyRicn0gJiYgIWRlZmluZWQoJG5hbWVwcmlu dGVkeyRicn0pKSB7CiAgICBmb3JlYWNoIG15ICRzeW0gKHNwbGl0KCIsICIsICRyZXZzeW17JGJy fSkpIHsKICAgICAgcHJpbnQgJzxhIG5hbWU9IicsIGh0bWxxdW90ZSgkc3ltKSwgJyI+PC9hPic7 CiAgICB9CiAgICAkbmFtZXByaW50ZWR7JGJyfSA9IDE7CiAgfQoKICBwcmludCAiXG4gUmV2aXNp b24gPGI+JF88L2I+IjsKICBpZiAoL14xXC4xXC4xXC5cZCskLykgewogICAgcHJpbnQgIiA8aT4o dmVuZG9yIGJyYW5jaCk8L2k+IjsKICB9CgogIChteSAkZmlsZW5hbWUgPSAkd2hlcmUpID1+IHN8 Xi4qL3x8OwogIG15ICRmaWxldXJsICAgPSB1cmlfZXNjYXBlKCRmaWxlbmFtZSk7CiAgdW5kZWYg JGZpbGVuYW1lOwoKICBteSAkaXNEZWFkID0gKCRzdGF0ZXskX30gZXEgJ2RlYWQnKTsKICBpZiAo ISRpc0RlYWQpIHsKCiAgICBwcmludCAnOiAnLCBkb3dubG9hZF9saW5rKCRmaWxldXJsLCAkXywg J2Rvd25sb2FkJywgJG1pbWV0eXBlKTsKCiAgICBteSBAdmxpbmtzID0gKCk7CiAgICBwdXNoKEB2 bGlua3MsIGRpc3BsYXlfbGluaygkZmlsZXVybCwgJF8sICd0ZXh0JywgJ3RleHQvcGxhaW4nKSkK ICAgICAgdW5sZXNzICRpc2JpbjsKICAgIHB1c2goQHZsaW5rcywgZGlzcGxheV9saW5rKCRmaWxl dXJsLCAkXywgJ21hcmt1cCcsICd0ZXh0L3gtY3Zzd2ViLW1hcmt1cCcpKQogICAgICBpZiAoJGFs bG93X21hcmt1cCAmJiAkaW5sb2d2aWV3ICYmICghJGlzYmluIHx8IHZpZXdhYmxlKCRtaW1ldHlw ZSkpKTsKICAgIGlmICghJGlzYmluICYmICRhbGxvd19hbm5vdGF0ZSkgewogICAgICBwdXNoKEB2 bGlua3MsCiAgICAgICAgICAgJmxpbmsoJ2Fubm90YXRlZCcsCiAgICAgICAgICAgICAgICAgc3By aW50ZignJXM/YW5ub3RhdGU9JXMlcycsICRmaWxldXJsLCAkXywgJGJhcmVxdWVyeSkpKTsKICAg IH0KICAgIHByaW50ICcgLSB2aWV3OiAnLCBqb2luKCcsICcsIEB2bGlua3MpIGlmIEB2bGlua3M7 CiAgICB1bmRlZiBAdmxpbmtzOwoKICAgIGlmICghJGlzYmluICYmICRhbGxvd192ZXJzaW9uX3Nl bGVjdCkgewogICAgICBwcmludCAnIC0gJzsKICAgICAgaWYgKCRpc1NlbGVjdGVkKSB7CiAgICAg ICAgcHJpbnQgJzxiPltzZWxlY3RlZCZuYnNwO2ZvciZuYnNwO2RpZmZzXTwvYj4nOwogICAgICB9 IGVsc2UgewogICAgICAgIHByaW50ICZsaW5rKCdzZWxlY3QmbmJzcDtmb3ImbmJzcDtkaWZmcycs CiAgICAgICAgICAgICAgICAgICAgc3ByaW50ZignJXM/cjE9JXMlcyNyZXYlcycsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAkZmlsZXVybCwgJF8sICRiYXJlcXVlcnksICRfKSk7CiAgICAg IH0KICAgIH0KICAgIHByaW50ICcgLSAnLCBncmFwaF9saW5rKCcnLCAncmV2aXNpb24gZ3JhcGgn KQogICAgICBpZiAoISRpbmxvZ3ZpZXcgJiYgJGFsbG93X2N2c2dyYXBoKTsKICB9CiAgcHJpbnQg IjxiciAvPlxuIjsKCiAgcHJpbnQgJzxpPic7CiAgaWYgKGRlZmluZWQgQG15dHopIHsKICAgIG15 ICgkZXN0KSA9ICRteXR6Wyhsb2NhbHRpbWUoJGRhdGV7JF99KSlbOF1dOwogICAgcHJpbnQgc2Nh bGFyIGxvY2FsdGltZSgkZGF0ZXskX30pLCAiICRlc3Q8L2k+ICgiOwogIH0gZWxzZSB7CiAgICBw cmludCBzY2FsYXIgZ210aW1lKCRkYXRleyRffSksICIgVVRDPC9pPiAoIjsKICB9CiAgcHJpbnQg cmVhZGFibGVUaW1lKHRpbWUoKSAtICRkYXRleyRffSwgMSksICcgYWdvKSc7CiAgcHJpbnQgJyBi eSA8aT4nLCBodG1scXVvdGUoJGF1dGhvcnskX30pLCAiPC9pPjxiciAvPlxuIjsKCiAgcHJpbnRm KCJCcmFuY2hlczogJXM8YnIgLz5cbiIsIGxpbmtfdGFncygkcmV2c3lteyRicn0pKSBpZiAkcmV2 c3lteyRicn07CiAgcHJpbnRmKCJDVlMgdGFnczogJXM8YnIgLz5cbiIsIGxpbmtfdGFncygkcmV2 c3lteyRffSkpICBpZiAkcmV2c3lteyRffTsKICBwcmludGYoIkJyYW5jaCBwb2ludCBmb3I6ICVz PGJyIC8+XG4iLCBsaW5rX3RhZ3MoJGJyYW5jaHBvaW50eyRffSkpCiAgICBpZiAkYnJhbmNocG9p bnR7JF99OwoKICAjIEZpbmQgdGhlIHByZXZpb3VzIHJldmlzaW9uCiAgbXkgJHByZXY7CiAgbXkg QHByZXZyZXYgPSBzcGxpdCgvXC4vLCAkXyk7CiAgZG8gewogICAgaWYgKC0tJHByZXZyZXZbJCNw cmV2cmV2XSA8PSAwKSB7CgogICAgICAjIElmIGl0IHdhcyBYLlkuWi4xLCBqdXN0IG1ha2UgaXQg WC5ZCiAgICAgIHBvcCAoQHByZXZyZXYpOwogICAgICBwb3AgKEBwcmV2cmV2KTsKICAgIH0KICAg ICRwcmV2ID0gam9pbiAoIi4iLCBAcHJldnJldik7CiAgfSB1bnRpbCAoZGVmaW5lZCgkZGF0ZXsk cHJldn0pIHx8ICRwcmV2IGVxICIiKTsKCiAgaWYgKCRpc0RlYWQpIHsKICAgIHByaW50ICI8Yj48 aT5GSUxFIFJFTU9WRUQ8L2k+PC9iPjxiciAvPlxuIjsKICB9IGVsc2UgewogICAgbXkgJWRpZmZy ZXYgPSAoKTsKICAgICRkaWZmcmV2eyRffSA9IDE7CiAgICAkZGlmZnJldnsiIn0gPSAxOwogICAg bXkgJGRpZmYgPSAnRGlmZiB0bzonOwogICAgbXkgJHByaW50ZWQgPSAwOwoKICAgICMKICAgICMg T2ZmZXIgZGlmZiB0byBwcmV2aW91cyByZXZpc2lvbgogICAgaWYgKCRwcmV2KSB7CiAgICAgICRk aWZmcmV2eyRwcmV2fSA9IDE7CiAgICAgIG15ICR1cmwgPQogICAgICAgIHNwcmludGYoJyVzLmRp ZmY/cjE9JXM7cjI9JXMlcycsICRmaWxldXJsLCAkcHJldiwgJF8sICRiYXJlcXVlcnkpOwogICAg ICBpZiAobXkgQGRsaW5rcyA9IGdldERpZmZMaW5rcygkdXJsLCAkbWltZXR5cGUsICRpc2Jpbikp IHsKICAgICAgICBwcmludCAkZGlmZiwgJyBwcmV2aW91cyAnLCAkcHJldiwgJzogJywgam9pbign LCAnLCBAZGxpbmtzKTsKICAgICAgICAkZGlmZiA9ICc7JzsgJHByaW50ZWQgPSAxOwogICAgICB9 CiAgICB9CgogICAgIwogICAgIyBQbHVzLCBpZiBpdCdzIG9uIGEgYnJhbmNoLCBhbmQgaXQncyBu b3QgYSB2ZW5kb3IgYnJhbmNoLAogICAgIyBvZmZlciBhIGRpZmYgd2l0aCB0aGUgYnJhbmNoIHBv aW50LgogICAgaWYgKCRyZXZzeW17JGJycH0KICAgICAgJiYgIS9eMVwuMVwuMVwuXGQrJC8KICAg ICAgJiYgIWRlZmluZWQoJGRpZmZyZXZ7JGJycH0pKQogICAgewogICAgICBteSAkdXJsID0KICAg ICAgICBzcHJpbnRmKCclcy5kaWZmP3IxPSVzO3IyPSVzJXMnLCAkZmlsZXVybCwgJGJycCwgJF8s ICRiYXJlcXVlcnkpOwogICAgICBpZiAobXkgQGRsaW5rcyA9IGdldERpZmZMaW5rcygkdXJsLCAk bWltZXR5cGUsICRpc2JpbikpIHsKICAgICAgICBwcmludCAkZGlmZiwgJyBicmFuY2hwb2ludCAn LCAkYnJwLCAnOiAnLCBqb2luKCcsICcsIEBkbGlua3MpOwogICAgICAgICRkaWZmID0gJzsnOyAk cHJpbnRlZCA9IDE7CiAgICAgIH0KICAgIH0KCiAgICAjCiAgICAjIFBsdXMsIGlmIGl0J3Mgb24g YSBicmFuY2gsIGFuZCBpdCdzIG5vdCBhIHZlbmRvciBicmFuY2gsCiAgICAjIG9mZmVyIHRvIGRp ZmYgd2l0aCB0aGUgbmV4dCByZXZpc2lvbiBvZiB0aGUgaGlnaGVyIGJyYW5jaC4KICAgICMgKGUu Zy4gY2hhbmdlIGdldHMgY29tbWl0dGVkIGFuZCB0aGVuIGJyb3VnaHQKICAgICMgb3ZlciB0byAt c3RhYmxlKQogICAgaWYgKC9eXGQrXC5cZCtcLlxkKy8gJiYgIS9eMVwuMVwuMVwuXGQrJC8pIHsK ICAgICAgbXkgKCRpLCAkbmV4dG1haW4pOwoKICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJCNyZXZv cmRlciAmJiAkcmV2b3JkZXJbJGldIG5lICRfOyAkaSsrKSB7CiAgICAgIH0KICAgICAgbXkgQHRt cDIgPSBzcGxpdCgvXC4vLCAkXyk7CiAgICAgIGZvciAoJG5leHRtYWluID0gIiI7ICRpID4gMDsg JGktLSkgewogICAgICAgIG15ICRuZXh0ID0gJHJldm9yZGVyWyRpIC0gMV07CiAgICAgICAgbXkg QHRtcDEgPSBzcGxpdCgvXC4vLCAkbmV4dCk7CgogICAgICAgIGlmIChAdG1wMSA8IEB0bXAyKSB7 CiAgICAgICAgICAkbmV4dG1haW4gPSAkbmV4dDsKICAgICAgICAgIGxhc3Q7CiAgICAgICAgfQoK ICAgICAgICAjIE9ubHkgdGhlIGhpZ2hlc3QgdmVyc2lvbiBvbiBhIGJyYW5jaCBzaG91bGQgaGF2 ZQogICAgICAgICMgYSBkaWZmIGZvciB0aGUgIm5leHQgTUFJTiIuCiAgICAgICAgbGFzdAogICAg ICAgICAgaWYgKEB0bXAxIC0gMSA8PSBAdG1wMgogICAgICAgICAgJiYgam9pbiAoIi4iLCBAdG1w MVswIC4uICQjdG1wMSAtIDFdKSBlcQogICAgICAgICAgam9pbiAoIi4iLCBAdG1wMlswIC4uICQj dG1wMSAtIDFdKSk7CiAgICAgIH0KCiAgICAgIGlmICghZGVmaW5lZCgkZGlmZnJldnskbmV4dG1h aW59KSkgewogICAgICAgICRkaWZmcmV2eyRuZXh0bWFpbn0gPSAxOwogICAgICAgIG15ICR1cmwg PSBzcHJpbnRmKCclcy5kaWZmP3IxPSVzO3IyPSVzJXMnLAogICAgICAgICAgJGZpbGV1cmwsICRu ZXh0bWFpbiwgJF8sICRiYXJlcXVlcnkpOwogICAgICAgIGlmIChteSBAZGxpbmtzID0gZ2V0RGlm ZkxpbmtzKCR1cmwsICRtaW1ldHlwZSwgJGlzYmluKSkgewogICAgICAgICAgcHJpbnQgJGRpZmYs ICcgbmV4dCBNQUlOICcsICRuZXh0bWFpbiwgJzogJywgam9pbignLCAnLCBAZGxpbmtzKTsKICAg ICAgICAgICRkaWZmID0gJzsnOyAkcHJpbnRlZCA9IDE7CiAgICAgICAgfQogICAgICB9CiAgICB9 CgogICAgIyBQbHVzIGlmIHVzZXIgaGFzIHNlbGVjdGVkIG9ubHkgcjEsIHRoZW4gcHJlc2VudCBh IGxpbmsKICAgICMgdG8gbWFrZSBhIGRpZmYgdG8gdGhhdCByZXZpc2lvbgogICAgaWYgKGRlZmlu ZWQoJGlucHV0e3IxfSkgJiYgIWRlZmluZWQoJGRpZmZyZXZ7JGlucHV0e3IxfX0pKSB7CiAgICAg ICRkaWZmcmV2eyRpbnB1dHtyMX19ID0gMTsKICAgICAgbXkgJHVybCA9IHNwcmludGYoJyVzLmRp ZmY/cjE9JXM7cjI9JXMlcycsCiAgICAgICAgJGZpbGV1cmwsICRpbnB1dHtyMX0sICRfLCAkYmFy ZXF1ZXJ5KTsKICAgICAgaWYgKG15IEBkbGlua3MgPSBnZXREaWZmTGlua3MoJHVybCwgJG1pbWV0 eXBlLCAkaXNiaW4pKSB7CiAgICAgICAgcHJpbnQgJGRpZmYsICcgc2VsZWN0ZWQgJywgJGlucHV0 e3IxfSwgJzogJywgam9pbignLCAnLCBAZGxpbmtzKTsKICAgICAgICAkZGlmZiA9ICc7JzsgJHBy aW50ZWQgPSAxOwogICAgICB9CiAgICB9CgogICAgcHJpbnQgIjxiciAvPlxuIiBpZiAkcHJpbnRl ZDsKICB9CgogIGlmICgkcHJldiBuZSAiIiAmJiAkZGlmZmxpbmVzeyRffSkgewogICAgcHJpbnRm ICJDaGFuZ2VzIHNpbmNlIHJldmlzaW9uICVzOiAlcyBsaW5lczxiciAvPlxuIiwKICAgICAgaHRt bHF1b3RlKCRwcmV2KSwgaHRtbHF1b3RlKCRkaWZmbGluZXN7JF99KTsKICB9CgogIHByaW50ICI8 cHJlIGNsYXNzPVwibG9nXCI+XG4iOwogIHByaW50ICZodG1saWZ5KCRsb2d7JF99LCAkYWxsb3df bG9nX2V4dHJhKTsKICBwcmludCAiPC9wcmU+XG4iOwp9CgoKIwojIEdlbmVyYXRlcyB0aGUgSFRN TCB2aWV3IGZvciBDdnNHcmFwaC4KIwpzdWIgZG9HcmFwaFZpZXcoKQp7CiAgKG15ICRwYXRobmFt ZSA9ICR3aGVyZSkgPX4gc3xbXi9dKiR8fDsKICAobXkgJGZpbGVuYW1lID0gJHdoZXJlKSA9fiBz fF4uKi98fDsKCiAgbmF2aWdhdGVIZWFkZXIoJHNjcmlwdHdoZXJlLCAkcGF0aG5hbWUsICRmaWxl bmFtZSwgdW5kZWYsICdncmFwaCcpOwoKICBteSAkdGl0bGUgPSAnUmV2aXNpb24gZ3JhcGggb2Yg JyAuIGh0bWxxdW90ZSgkcGF0aG5hbWUgLiAkZmlsZW5hbWUpOwogIG15ICRtYXBuYW1lID0gJ0N2 c0dyYXBoTWFwJzsKCiAgcHJpbnRmKDw8RU9GLCAkdGl0bGUsICRtYXBuYW1lLCAkY3ZzdHJlZSwg JHRpdGxlKTsKPGgzIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXIiPiVzPC9oMz4KPGRpdiBzdHls ZT0idGV4dC1hbGlnbjogY2VudGVyIj48aW1nIGJvcmRlcj0iMCIgdXNlbWFwPSIjJXMiIHNyYz0i P2N2c3Jvb3Q9JXM7Z3JhcGg9MTttYWtlaW1hZ2U9MSIgYWx0PSIlcyIgLz4KRU9GCgogICMgUmVt b3ZlIGFueSBwcmUtZXhpc3RpbmcgdGFnL2JyYW5jaCBuYW1lcyBmcm9tIGJyYW5jaCBsaW5rcy4K ICAobXkgJG5vdGFnX3F1ZXJ5ID0gJGJhcmVxdWVyeSkgPX4gcy87K29ubHlfd2l0aF90YWc9Lio/ KD89O3wkKS8vZzsKCiAgbXkgQGdyYXBoX2NtZCA9CiAgICAoJENNRHtjdnNncmFwaH0sCiAgICAg Jy1yJywgJGN2c3Jvb3QsCiAgICAgJy1tJywgJHBhdGhuYW1lLAogICAgICctaScsCiAgICAgJy1N JywgJG1hcG5hbWUsCiAgICAgJy14JywgJ3gnLAogICAgICItT21hcF9icmFuY2hfaHJlZj1cImhy ZWY9XFxcIi4vP29ubHlfd2l0aF90YWc9JSgldCUpJG5vdGFnX3F1ZXJ5XFxcIlwiIiwKICAgICAi LU9tYXBfcmV2X2hyZWY9XCJocmVmPVxcXCI/cmV2PSUoJVIlKSRiYXJlcXVlcnlcXFwiXCIiLAog ICAgICItT21hcF9kaWZmX2hyZWY9XCJocmVmPVxcXCIlKCVGJSkuZGlmZiIgLgogICAgICI/cjE9 JSglUCUpO3IyPSUoJVIlKSRiYXJlcXVlcnlcXFwiXCIiLAogICAgICk7CiAgcHVzaChAZ3JhcGhf Y21kLCAnLWMnLCAkY3ZzZ3JhcGhfY29uZmlnKSBpZiAkY3ZzZ3JhcGhfY29uZmlnOwogIHB1c2go QGdyYXBoX2NtZCwgJGZpbGVuYW1lIC4gJyx2Jyk7CgogIGxvY2FsICpDVlNHUkFQSF9PVVQ7CiAg bXkgKCRoLCAkZXJyKSA9CiAgICBzdGFydHByb2MoXEBncmFwaF9jbWQsIFwiIiwgJz5waXBlJywg XCpDVlNHUkFQSF9PVVQpOwogIGZhdGFsKCc1MDAgSW50ZXJuYWwgRXJyb3InLCAkZXJyKSB1bmxl c3MgJGg7CgogICMgQnJvd3NlciBjb21wYXRpYmlsaXR5IGtsdWRnZTogbWFueSBicm93c2VycyBk byBub3Qgc3VwcG9ydCBjbGllbnQgc2lkZQogICMgaW1hZ2UgbWFwcyB3aGVyZSB0aGUgPG1hcD4g ZWxlbWVudCBjb250YWlucyBvbmx5IHRoZSBpZCBhdHRyaWJ1dGUuICBMZXQncwogICMgYWRkIHRo ZSBjb3JyZXNwb25kaW5nIG5hbWUgYXR0cmlidXRlIHRvIGl0IG9uIHRoZSBmbHkuCiAgd2hpbGUg KDxDVlNHUkFQSF9PVVQ+KSB7CiAgICBzLyg8bWFwXHMraWQ9IihbXiJdKykiKVxzKj4vJDEgbmFt ZT0iJDIiPi87CiAgICBwcmludDsKICB9CgogICRoLT5maW5pc2goKTsKICBwcmludCAiPC9kaXY+ XG4iOwoKICBodG1sX2Zvb3RlcigpOwp9CgoKIwojIEdlbmVyYXRlcyBhIGdyYXBoIHVzaW5nIEN2 c0dyYXBoLgojCnN1YiBkb0dyYXBoKCkKewogIChteSAkcGF0aG5hbWUgPSAkd2hlcmUpID1+IHN8 W14vXSokfHw7CiAgKG15ICRmaWxlbmFtZSA9ICR3aGVyZSkgPX4gc3xeLiovfHw7CgogIGh0dHBf aGVhZGVyKCdpbWFnZS9wbmcnKTsKCiAgbXkgQGdyYXBoX2NtZCA9ICgkQ01Ee2N2c2dyYXBofSwg Jy1yJywgJGN2c3Jvb3QsICctbScsICRwYXRobmFtZSk7CiAgcHVzaChAZ3JhcGhfY21kLCAnLWMn LCAkY3ZzZ3JhcGhfY29uZmlnKSBpZiAkY3ZzZ3JhcGhfY29uZmlnOwogIHB1c2goQGdyYXBoX2Nt ZCwgJGZpbGVuYW1lIC4gJyx2Jyk7CgogIGxvY2FsICpDVlNHUkFQSF9PVVQ7CiAgbXkgKCRoLCAk ZXJyKSA9CiAgICBzdGFydHByb2MoXEBncmFwaF9jbWQsIFwiIiwgJz5waXBlJywgXCpDVlNHUkFQ SF9PVVQpOwogIGZhdGFsKCc1MDAgSW50ZXJuYWwgRXJyb3InLCAkZXJyKSB1bmxlc3MgJGg7CiAg ewogICAgbG9jYWwgJC8gPSB1bmRlZjsKICAgIGJpbm1vZGUoXCpTVERPVVQpOwogICAgcHJpbnQg PENWU0dSQVBIX09VVD47CiAgfQogICRoLT5maW5pc2goKTsKfQoKCnN1YiBkb0xvZygkKQp7CiAg bXkgKCRmdWxsbmFtZSkgPSBAXzsKCiAgbXkgJGN1cmJyYW5jaCA9IHJlYWRMb2coJGZ1bGxuYW1l KTsKCiAgaHRtbF9oZWFkZXIoIkNWUyBsb2cgZm9yICR3aGVyZSIpOwoKICBteSAkdXB3aGVyZSA9 ICR3aGVyZTsKICAobXkgJGZpbGVuYW1lID0gJHdoZXJlKSA9fiBzfF4uKi98fDsKICBteSAkYmFj a3VybCA9ICIuLyRxdWVyeSMiIC4gdXJpX2VzY2FwZSgkZmlsZW5hbWUpOwogIGlmICgkd2hlcmUg PX4gbXxeKC4qPykoKD88PS8pQXR0aWMvKT9bXi9dKyR8KSB7CiAgICAkdXB3aGVyZSA9ICQxOwog ICAgJGJhY2t1cmwgPSAiLiRiYWNrdXJsIiBpZiAkMjsgIyBza2lwIG92ZXIgQXR0aWMKICB9Cgog IG15ICRpc2JpbiA9ICRrZXl3b3Jkc3Vic3RpdHV0aW9uID1+IC9iLzsKICBteSAkbWltZXR5cGUg PSBnZXRNaW1lVHlwZSgkZmlsZW5hbWUsICRpc2Jpbik7CgogIHByaW50ICI8cD5cbiAiOwogIHBy aW50ICZsaW5rKCRiYWNraWNvbiwgJGJhY2t1cmwpLCAiIDxiPlVwIHRvICIsCiAgICAmY2xpY2th YmxlUGF0aCgkdXB3aGVyZSwgMSksICI8L2I+XG48L3A+XG4iOwogIHByaW50ICI8cD5cbiAiOwog IHByaW50ICZsaW5rKCdSZXF1ZXN0IGRpZmYgYmV0d2VlbiBhcmJpdHJhcnkgcmV2aXNpb25zJywg JyNkaWZmJyk7CiAgcHJpbnQgJyAtICcsICZncmFwaF9saW5rKCcnLCAnRGlzcGxheSByZXZpc2lv bnMgZ3JhcGhpY2FsbHknKQogICAgaWYgJGFsbG93X2N2c2dyYXBoOwogIGlmICgkY3ZzaGlzdG9y eV91cmwpIHsKICAgIChteSAkZCA9ICR1cHdoZXJlKSA9fiBzfC8rJHx8OwogICAgcHJpbnQgJyAt ICcsIGhpc3RvcnlfbGluaygkZCwgJGZpbGVuYW1lKTsKICB9CiAgcHJpbnQgIlxuPC9wPlxuPGhy IC8+XG4iOwoKICBwcmludCAiPHA+XG4iOwoKICBteSAkZXhwbGFpbiA9ICRpc2JpbiA/ICcgKGku ZS46IENWUyBjb25zaWRlcnMgdGhpcyBhIGJpbmFyeSBmaWxlKScgOiAnJzsKICBwcmludCAiS2V5 d29yZCBzdWJzdGl0dXRpb246ICRrZXl3b3Jkc3Vic3RpdHV0aW9uJGV4cGxhaW48YnIgLz5cbiI7 CiAgaWYgKCRjdXJicmFuY2gpIHsKICAgIHByaW50ICJEZWZhdWx0IGJyYW5jaDogIiwgKCRyZXZz eW17JGN1cmJyYW5jaH0gfHwgJGN1cmJyYW5jaCk7CiAgfSBlbHNlIHsKICAgIHByaW50ICJObyBk ZWZhdWx0IGJyYW5jaCI7CiAgfQogIHByaW50ICI8YnIgLz5cbiI7CgogIHByaW50ICdDdXJyZW50 IHRhZzogJywgaHRtbHF1b3RlKCRpbnB1dHtvbmx5X3dpdGhfdGFnfSksICI8YnIgLz5cbiIKICAg IGlmICRpbnB1dHtvbmx5X3dpdGhfdGFnfTsKICBwcmludCAiPC9wPlxuIjsKCiAgdW5kZWYgJW5h bWVwcmludGVkOwoKICBmb3IgbXkgJHIgKEByZXZkaXNwbGF5b3JkZXIpIHsKICAgIHByaW50ICI8 aHIgLz5cbiI7CiAgICBteSAkc2VsID0gKGRlZmluZWQoJGlucHV0e3IxfSkgJiYgJGlucHV0e3Ix fSBlcSAkcik7CiAgICBwcmludCAiPGRpdiBjbGFzcz1cImRpZmYtc2VsZWN0ZWRcIj5cbiIgaWYg JHNlbDsKICAgIHByaW50TG9nKCRyLCAkbWltZXR5cGUsICRpc2JpbiwgMSwgJHNlbCk7CiAgICBw cmludCAiPC9kaXY+XG4iIGlmICRzZWw7CiAgfQoKICBwcmludGYoPDxFT0YsICRzY3JpcHR3aGVy ZSk7CjxociAvPgo8Zm9ybSBtZXRob2Q9ImdldCIgYWN0aW9uPSIlcy5kaWZmIiBpZD0iZGlmZl9z ZWxlY3QiPgo8ZmllbGRzZXQ+CjxsZWdlbmQ+RGlmZiByZXF1ZXN0PC9sZWdlbmQ+CjxwPgogPGEg bmFtZT0iZGlmZiI+CiAgVGhpcyBmb3JtIGFsbG93cyB5b3UgdG8gcmVxdWVzdCBkaWZmcyBiZXR3 ZWVuIGFueSB0d28gcmV2aXNpb25zIG9mIGEgZmlsZS4KICBZb3UgbWF5IHNlbGVjdCBhIHN5bWJv bGljIHJldmlzaW9uIG5hbWUgdXNpbmcgdGhlIHNlbGVjdGlvbiBib3ggb3IgeW91IG1heQogIHR5 cGUgaW4gYSBudW1lcmljIG5hbWUgdXNpbmcgdGhlIHR5cGUtaW4gdGV4dCBib3guCiA8L2E+Cjwv cD4KRU9GCgogIGZvcmVhY2ggKEBzdGlja3l2YXJzKSB7CiAgICBwcmludGYoIjxpbnB1dCB0eXBl PVwiaGlkZGVuXCIgbmFtZT1cIiVzXCIgdmFsdWU9XCIlc1wiIC8+XG4iLAogICAgICAgICAgICRf LCBodG1scXVvdGUoJGlucHV0eyRffSkpCiAgICAgIGlmIChkZWZpbmVkKCRpbnB1dHskX30pICYm CiAgICAgICAgICAoIWRlZmluZWQoJERFRkFVTFRWQUxVRXskX30pIHx8ICRpbnB1dHskX30gbmUg JERFRkFVTFRWQUxVRXskX30pKTsKICB9CgogIHByaW50IDw8RU9GOwo8dGFibGUgc3VtbWFyeT0i RGlmZiBiZXR3ZWVuIGFyYml0cmFyeSByZXZpc2lvbnMiPgo8dHI+Cjx0ZCBjbGFzcz0ib3B0LWxh YmVsIj4KPGxhYmVsIGZvcj0icjEiIGFjY2Vzc2tleT0iMSI+RGlmZnMgYmV0d2VlbjwvbGFiZWw+ CjwvdGQ+Cjx0ZCBjbGFzcz0ib3B0LXZhbHVlIj4KPHNlbGVjdCBpZD0icjEiIG5hbWU9InIxIj4K PG9wdGlvbiB2YWx1ZT0idGV4dCIgc2VsZWN0ZWQ9InNlbGVjdGVkIj5Vc2UgVGV4dCBGaWVsZDwv b3B0aW9uPgpFT0YKICBwcmludCAkc2VsLCAiPC9zZWxlY3Q+XG4iOwoKICBteSAkZGlmZnJldiA9 IGRlZmluZWQoJGlucHV0e3IxfSkgPwogICAgJGlucHV0e3IxfSA6ICRyZXZkaXNwbGF5b3JkZXJb JCNyZXZkaXNwbGF5b3JkZXJdOwoKICBwcmludGYoPDxFT0YsICRpbnB1dFRleHRTaXplLCAkZGlm ZnJldik7CjxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSIlcyIgbmFtZT0idHIxIiB2YWx1ZT0iJXMi IG9uY2hhbmdlPSJ0aGlzLmZvcm0ucjEuc2VsZWN0ZWRJbmRleD0wIiAvPgo8L3RkPgo8dGQ+PC90 ZD4KPC90cj4KPHRyPgo8dGQgY2xhc3M9Im9wdC1sYWJlbCI+CjxsYWJlbCBmb3I9InIyIiBhY2Nl c3NrZXk9IjIiPmFuZDwvbGFiZWw+CjwvdGQ+Cjx0ZCBjbGFzcz0ib3B0LXZhbHVlIj4KPHNlbGVj dCBpZD0icjIiIG5hbWU9InIyIj4KPG9wdGlvbiB2YWx1ZT0idGV4dCIgc2VsZWN0ZWQ9InNlbGVj dGVkIj5Vc2UgVGV4dCBGaWVsZDwvb3B0aW9uPgpFT0YKICBwcmludCAkc2VsLCAiPC9zZWxlY3Q+ XG4iOwoKICAkZGlmZnJldiA9IGRlZmluZWQoJGlucHV0e3IyfSkgPyAkaW5wdXR7cjJ9IDogJHJl dmRpc3BsYXlvcmRlclswXTsKCiAgcHJpbnRmKDw8RU9GLCAkaW5wdXRUZXh0U2l6ZSwgJGRpZmZy ZXYsICRzY3JpcHR3aGVyZSk7CjxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSIlcyIgbmFtZT0idHIy IiB2YWx1ZT0iJXMiIG9uY2hhbmdlPSJ0aGlzLmZvcm0ucjIuc2VsZWN0ZWRJbmRleD0wIiAvPgo8 L3RkPgo8dGQ+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkdldCBEaWZmcyIgYWNjZXNza2V5 PSJHIiAvPjwvdGQ+CjwvdHI+CjwvdGFibGU+CjwvZmllbGRzZXQ+CjwvZm9ybT4KPGZvcm0gbWV0 aG9kPSJnZXQiIGFjdGlvbj0iJXMiPgo8ZmllbGRzZXQ+CjxsZWdlbmQ+TG9nIHZpZXcgb3B0aW9u czwvbGVnZW5kPgo8dGFibGUgc3VtbWFyeT0iTG9nIHZpZXcgb3B0aW9ucyI+Cjx0cj4KPHRkIGNs YXNzPSJvcHQtbGFiZWwiPgo8bGFiZWwgZm9yPSJmIiBhY2Nlc3NrZXk9IkQiPlByZWZlcnJlZCBk aWZmIHR5cGU6PC9sYWJlbD4KPC90ZD4KPHRkIGNsYXNzPSJvcHQtdmFsdWUiPgpFT0YKICBwcmlu dERpZmZTZWxlY3QoJHVzZV9qYXZhX3NjcmlwdCk7CiAgcHJpbnQgPDxFT0Y7CjwvdGQ+Cjx0ZD48 L3RkPgo8L3RyPgpFT0YKCiAgaWYgKEBicmFuY2huYW1lcykgewoKICAgIHByaW50Zig8PEVPRiwg JHVzZV9qYXZhX3NjcmlwdCA/ICcgb25jaGFuZ2U9InRoaXMuZm9ybS5zdWJtaXQoKSInIDogJycp Owo8dHI+Cjx0ZCBjbGFzcz0ib3B0LWxhYmVsIj4KPGxhYmVsIGZvcj0ib25seV93aXRoX3RhZyIg YWNjZXNza2V5PSJCIj5WaWV3IG9ubHkgYnJhbmNoOjwvbGFiZWw+CjwvdGQ+Cjx0ZCBjbGFzcz0i b3B0LXZhbHVlIj4KPGEgbmFtZT0iYnJhbmNoIj4KPHNlbGVjdCBpZD0ib25seV93aXRoX3RhZyIg bmFtZT0ib25seV93aXRoX3RhZyIlcz4KRU9GCgogICAgbXkgQHRtcCA9ICgpOwogICAgbXkgJHNl bGZvdW5kID0gMDsKICAgIGZvcmVhY2ggKHJldmVyc2Ugc29ydCBAYnJhbmNobmFtZXMpIHsKICAg ICAgbXkgJHNlbGVjdGVkID0KICAgICAgICAoZGVmaW5lZCgkaW5wdXR7b25seV93aXRoX3RhZ30p ICYmICRpbnB1dHtvbmx5X3dpdGhfdGFnfSBlcSAkXyk7CiAgICAgICRzZWxmb3VuZCB8fD0gJHNl bGVjdGVkOwogICAgICBwdXNoKEB0bXAsIHNwcmludGYoJzxvcHRpb24lcz4lczwvb3B0aW9uPics CiAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZWN0ZWQgPyAnIHNlbGVjdGVkPSJzZWxlY3Rl ZCInIDogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICBodG1scXVvdGUoJF8pKSk7CiAgICB9 CiAgICBwcmludGYoIjxvcHRpb24gdmFsdWU9XCJcIiVzPlNob3cgYWxsIGJyYW5jaGVzPC9vcHRp b24+XG4iLAogICAgICAgICAgICRzZWxmb3VuZCA/ICcnIDogJyBzZWxlY3RlZD0ic2VsZWN0ZWQi Jyk7CiAgICBwcmludCBqb2luKCJcbiIsIEB0bXApOwoKICAgIHByaW50IDw8RU9GCjwvc2VsZWN0 Pgo8L2E+CjwvdGQ+Cjx0ZD48L3RkPgo8L3RyPgpFT0YKICB9CgogIHByaW50IDw8RU9GOwo8dHI+ Cjx0ZCBjbGFzcz0ib3B0LWxhYmVsIj4KPGxhYmVsIGZvcj0ibG9nc29ydCIgYWNjZXNza2V5PSJM Ij5Tb3J0IGxvZyBieTo8L2xhYmVsPgo8L3RkPgo8dGQ+CkVPRgogIHByaW50TG9nU29ydFNlbGVj dCgkdXNlX2phdmFfc2NyaXB0KTsKICBwcmludCA8PEVPRjsKPC90ZD4KPHRkPjxpbnB1dCB0eXBl PSJzdWJtaXQiIHZhbHVlPSJTZXQiIGFjY2Vzc2tleT0iUyIgLz48L3RkPgo8L3RyPgo8L3RhYmxl PgpFT0YKICBmb3JlYWNoIChAc3RpY2t5dmFycykgewogICAgbmV4dCBpZiAoJF8gZXEgImYiKTsK ICAgIG5leHQgaWYgKCRfIGVxICJvbmx5X3dpdGhfdGFnIik7CiAgICBuZXh0IGlmICgkXyBlcSAi bG9nc29ydCIpOwogICAgcHJpbnRmKCI8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCIkX1wi IHZhbHVlPVwiJXNcIiAvPlxuIiwKICAgICAgICAgICBodG1scXVvdGUoJGlucHV0eyRffSkpCiAg ICAgIGlmIChkZWZpbmVkKCRpbnB1dHskX30pCiAgICAgICAgICAmJiAoIWRlZmluZWQoJERFRkFV TFRWQUxVRXskX30pIHx8ICRpbnB1dHskX30gbmUgJERFRkFVTFRWQUxVRXskX30pKTsKICB9CiAg cHJpbnQgIjwvZmllbGRzZXQ+XG48L2Zvcm0+XG4iOwogIGh0bWxfZm9vdGVyKCk7Cn0KCgpzdWIg Zmx1c2hfZGlmZl9yb3dzKCQkJCQpCnsKICBteSAoJGxlZnRDb2xSZWYsICRyaWdodENvbFJlZiwg JGxlZnRSb3csICRyaWdodFJvdykgPSBAXzsKCiAgcmV0dXJuIHVubGVzcyBkZWZpbmVkKCRzdGF0 ZSk7CgogIGlmICgkc3RhdGUgZXEgIlByZUNoYW5nZVJlbW92ZSIpIHsgICAgIyB3ZSBqdXN0IGdv dCByZW1vdmUtbGluZXMgYmVmb3JlCiAgICBmb3IgKG15ICRqID0gMDsgJGogPCAkbGVmdFJvdzsg JGorKykgewogICAgICBwcmludGYoPDxFT0YsIHNwYWNlZEh0bWxUZXh0KEAkbGVmdENvbFJlZlsk al0pKTsKPHRyPgogPHRkIGNsYXNzPSJkaWZmIGRpZmYtcmVtb3ZlZCI+Jm5ic3A7JXM8L3RkPgog PHRkIGNsYXNzPSJkaWZmIGRpZmYtZW1wdHkiPiZuYnNwOzwvdGQ+CjwvdHI+CkVPRgogICAgfQog IH0gZWxzaWYgKCRzdGF0ZSBlcSAiUHJlQ2hhbmdlIikgeyAgICAgIyBzdGF0ZSBlcSAiUHJlQ2hh bmdlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB3ZSBnb3QgcmVt b3ZlcyB3aXRoIHN1YnNlcXVlbnQgYWRkcwogICAgaWYgKEhBU19FRElGRikgewogICAgICAjIGNv bnN0cnVjdCB0aGUgc3VmZml4IHRyZWUKICAgICAgbXkgJGxlZnRfZGlmZiA9IGpvaW4oIlxuIiwg QCRsZWZ0Q29sUmVmWzAuLiRsZWZ0Um93LTFdKTsKICAgICAgbXkgJHJpZ2h0X2RpZmYgPSBqb2lu KCJcbiIsIEAkcmlnaHRDb2xSZWZbMC4uJHJpZ2h0Um93LTFdKTsKICAgICAgbXkgJGRpZmZfc3Ry ID0gU3RyaW5nOjpFZGlmZjo6ZWRpZmYoJGxlZnRfZGlmZiwgJHJpZ2h0X2RpZmYpOwoKICAgICAg bXkgQGRpZmZfc3RyID0gc3BsaXQoLyAvLCAkZGlmZl9zdHIpOwogICAgICBteSAkSU5GSU5JVFkg PSAxMDAwMDAwMDsKICAgICAgcHVzaChAZGlmZl9zdHIsICgkSU5GSU5JVFkpIHggOCk7CiAgICAg IG15ICgkaWR4LCAkYjEsICRlMSwgJGxiMSwgJGxlMSwgJGIyLCAkZTIsICRsYjIsICRsZTIpID0K ICAgICAgICAoMCwgQGRpZmZfc3RyWzAuLjddKTsKICAgICAgbXkgKCRsX2N1bCwgJHJfY3VsKSA9 ICgwLCAwKTsKICAgICAgbXkgKCRsZHgsICRyZHgpID0gKDAsIDApOwogICAgICBteSAoQGxlZnRf aHRtbCwgQHJpZ2h0X2h0bWwpOwogICAgICBmb3IgKG15ICRqID0gMDsgJGogPCAkbGVmdFJvdzsg JGorKykgewogICAgICAgIG15ICRsaW5lX2xlbiA9IGxlbmd0aChAJGxlZnRDb2xSZWZbJGpdKTsK ICAgICAgICBteSAkbGluZSA9IEAkbGVmdENvbFJlZlskal07CiAgICAgICAgJGxfY3VsICs9IGxl bmd0aCgkbGluZSkgKyAxOyAjIGluY2x1ZGVzICJcbiIKICAgICAgICBteSAkbF9jdWx4ID0gJGxf Y3VsIC0gMTsgIyBub3QgaW5jbHVkZXMgIlxuIgogICAgICAgIGlmICgkaiA8ICRsYjEpIHsKICAg ICAgICAgICRsaW5lID0gc3BhY2VkSHRtbFRleHQoJGxpbmUpOwogICAgICAgICAgcHVzaChAbGVm dF9odG1sLCAiPHRkIGNsYXNzPVwiZGlmZiBkaWZmLWNoYW5nZWRcIj4kbGluZTwvdGQ+Iik7CiAg ICAgICAgfSBlbHNpZiAoJGxiMSA9PSAkaikgewogICAgICAgICAgbXkgJGh0bWxfbGluZTsKICAg ICAgICAgIHdoaWxlICgkbGIxID09ICRqKSB7CiAgICAgICAgICAgIG15ICRiZWdpbl9jaGFyID0g JGxfY3VseCAtICRiMTsKCiAgICAgICAgICAgICRsaW5lID1+IC9eKC4qKSgueyRiZWdpbl9jaGFy fSkkLzsKICAgICAgICAgICAgJGh0bWxfbGluZSAuPSBzcGFjZWRIdG1sVGV4dCgkMSkgLgogICAg ICAgICAgICAgICc8L3NwYW4+PHNwYW4gY2xhc3M9ImRpZmYgZGlmZi11bmNoYW5nZWQiPic7CiAg ICAgICAgICAgICRsaW5lID0gJDI7CiAgICAgICAgICAgIGxhc3QgaWYgKCRqICE9ICRsZTEpOwoK ICAgICAgICAgICAgbXkgJGVuZF9jaGFyID0gJGxfY3VseCAtICRlMTsKICAgICAgICAgICAgJGxp bmUgPX4gL14oLiopKC57JGVuZF9jaGFyfSkkLzsKICAgICAgICAgICAgJGh0bWxfbGluZSAuPSBz cGFjZWRIdG1sVGV4dCgkMSkgLgogICAgICAgICAgICAgICc8L3NwYW4+PHNwYW4gY2xhc3M9ImRp ZmYgZGlmZi1jaGFuZ2VkIj4nOwogICAgICAgICAgICAkbGluZSA9ICQyOwoKICAgICAgICAgICAg JGlkeCsrOwogICAgICAgICAgICBteSAoJHRiMSwgJHRlMSwgJHRsYjEsICR0bGUxLCAkdGIyLCAk dGUyLCAkdGxiMiwgJHRsZTIpID0KICAgICAgICAgICAgICAoJGIxLCAkZTEsICRsYjEsICRsZTEs ICRiMiwgJGUyLCAkbGIyLCAkbGUyKTsKICAgICAgICAgICAgKCRiMSwgJGUxLCAkbGIxLCAkbGUx LCAkYjIsICRlMiwgJGxiMiwgJGxlMikgPQogICAgICAgICAgICAgIEBkaWZmX3N0clskaWR4Kjgu LigkaWR4KzEpKjgtMV07CiAgICAgICAgICAgICRsYjEgPSAkSU5GSU5JVFkgaWYgKCRsYjEgPCAw KTsKICAgICAgICAgICAgJGxiMiA9ICRJTkZJTklUWSBpZiAoJGxiMiA8IDApOwogICAgICAgICAg ICAkbGUxID0gJElORklOSVRZIGlmICgkbGUxIDwgMCk7CiAgICAgICAgICAgICRsZTIgPSAkSU5G SU5JVFkgaWYgKCRsZTIgPCAwKTsKICAgICAgICAgICAgaWYgKCR0ZTEgPiAkYjEpIHsKICAgICAg ICAgICAgICAoJGIxLCAkbGIxKSA9ICgkdGUxLCAkdGxlMSk7CiAgICAgICAgICAgIH0KICAgICAg ICAgICAgaWYgKCR0ZTIgPiAkYjIpIHsKICAgICAgICAgICAgICAoJGIyLCAkbGIyKSA9ICgkdGUy LCAkdGxlMik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHB1c2goQGxlZnRf aHRtbCwKICAgICAgICAgICAgICAgc3ByaW50ZignPHRkPjxzcGFuIGNsYXNzPSJkaWZmIGRpZmYt Y2hhbmdlZCI+JXMlczwvc3Bhbj48L3RkPicsCiAgICAgICAgICAgICAgICAgICAgICAgJGh0bWxf bGluZSwgc3BhY2VkSHRtbFRleHQoJGxpbmUpKSk7CiAgICAgICAgfSBlbHNpZiAoJGxlMSA9PSAk aikgewogICAgICAgICAgbXkgJGh0bWxfbGluZTsKICAgICAgICAgIHdoaWxlICgkbGUxID09ICRq KSB7CiAgICAgICAgICAgIG15ICRlbmRfY2hhciA9ICRsX2N1bHggLSAkZTE7CiAgICAgICAgICAg ICRsaW5lID1+IC9eKC4qKSgueyRlbmRfY2hhcn0pJC87CiAgICAgICAgICAgICRodG1sX2xpbmUg Lj0gc3BhY2VkSHRtbFRleHQoJDEpIC4KICAgICAgICAgICAgICAnPC9zcGFuPjxzcGFuIGNsYXNz PSJkaWZmIGRpZmYtY2hhbmdlZCI+JzsKICAgICAgICAgICAgJGxpbmUgPSAkMjsKCiAgICAgICAg ICAgICRpZHgrKzsKICAgICAgICAgICAgbXkgKCR0YjEsICR0ZTEsICR0bGIxLCAkdGxlMSwgJHRi MiwgJHRlMiwgJHRsYjIsICR0bGUyKSA9CiAgICAgICAgICAgICAgKCRiMSwgJGUxLCAkbGIxLCAk bGUxLCAkYjIsICRlMiwgJGxiMiwgJGxlMik7CiAgICAgICAgICAgICgkYjEsICRlMSwgJGxiMSwg JGxlMSwgJGIyLCAkZTIsICRsYjIsICRsZTIpID0KICAgICAgICAgICAgICBAZGlmZl9zdHJbJGlk eCo4Li4oJGlkeCsxKSo4LTFdOwogICAgICAgICAgICAkbGIxID0gJElORklOSVRZIGlmICgkbGIx IDwgMCk7CiAgICAgICAgICAgICRsYjIgPSAkSU5GSU5JVFkgaWYgKCRsYjIgPCAwKTsKICAgICAg ICAgICAgJGxlMSA9ICRJTkZJTklUWSBpZiAoJGxlMSA8IDApOwogICAgICAgICAgICAkbGUyID0g JElORklOSVRZIGlmICgkbGUyIDwgMCk7CiAgICAgICAgICAgIGlmICgkdGUxID4gJGIxKSB7CiAg ICAgICAgICAgICAgKCRiMSwgJGxiMSkgPSAoJHRlMSwgJHRsZTEpOwogICAgICAgICAgICB9CiAg ICAgICAgICAgIGlmICgkdGUyID4gJGIyKSB7CiAgICAgICAgICAgICAgKCRiMiwgJGxiMikgPSAo JHRlMiwgJHRsZTIpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsYXN0IGlmICgkbGIxICE9 ICRqKTsKCiAgICAgICAgICAgIG15ICRiZWdpbl9jaGFyID0gJGxfY3VseCAtICRiMTsKCiAgICAg ICAgICAgICRsaW5lID1+IC9eKC4qKSgueyRiZWdpbl9jaGFyfSkkLzsKICAgICAgICAgICAgJGh0 bWxfbGluZSAuPSBzcGFjZWRIdG1sVGV4dCgkMSkgLgogICAgICAgICAgICAgICc8L3NwYW4+PHNw YW4gY2xhc3M9ImRpZmYgZGlmZi11bmNoYW5nZWQiPic7CiAgICAgICAgICAgICRsaW5lID0gJDI7 CiAgICAgICAgICB9CiAgICAgICAgICBwdXNoKEBsZWZ0X2h0bWwsCiAgICAgICAgICAgICAgc3By aW50ZignPHRkPjxzcGFuIGNsYXNzPSJkaWZmIGRpZmYtdW5jaGFuZ2VkIj4lcyVzPC9zcGFuPjwv dGQ+JywKICAgICAgICAgICAgICAgICAgICAgICRodG1sX2xpbmUsIHNwYWNlZEh0bWxUZXh0KCRs aW5lKSkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAkbGluZSA9IHNwYWNlZEh0bWxUZXh0 KCRsaW5lKTsKICAgICAgICAgIHB1c2goQGxlZnRfaHRtbCwgIjx0ZCBjbGFzcz1cImRpZmYgZGlm Zi11bmNoYW5nZWRcIj4kbGluZTwvdGQ+Iik7CiAgICAgICAgfQogICAgICB9CiAgICAgICgkaWR4 LCAkYjEsICRlMSwgJGxiMSwgJGxlMSwgJGIyLCAkZTIsICRsYjIsICRsZTIpID0KICAgICAgICAo MCwgQGRpZmZfc3RyWzAuLjddKTsKICAgICAgJGxiMSA9ICRJTkZJTklUWSBpZiAoJGxiMSA8IDAp OwogICAgICAkbGIyID0gJElORklOSVRZIGlmICgkbGIyIDwgMCk7CiAgICAgICRsZTEgPSAkSU5G SU5JVFkgaWYgKCRsZTEgPCAwKTsKICAgICAgJGxlMiA9ICRJTkZJTklUWSBpZiAoJGxlMiA8IDAp OwogICAgICBmb3IgKG15ICRqID0gMDsgJGogPCAkcmlnaHRSb3c7ICRqKyspIHsKICAgICAgICBt eSAkbGluZV9sZW4gPSBsZW5ndGgoQCRyaWdodENvbFJlZlskal0pOwogICAgICAgIG15ICRsaW5l ID0gQCRyaWdodENvbFJlZlskal07CiAgICAgICAgJHJfY3VsICs9IGxlbmd0aCgkbGluZSkgKyAx OyAjIGluY2x1ZGVzICJcbiIKICAgICAgICBteSAkcl9jdWx4ID0gJHJfY3VsIC0gMTsgIyBub3Qg aW5jbHVkZXMgIlxuIgogICAgICAgIGlmICgkaiA8ICRsYjIpIHsKICAgICAgICAgICRsaW5lID0g c3BhY2VkSHRtbFRleHQoJGxpbmUpOwogICAgICAgICAgcHVzaChAcmlnaHRfaHRtbCwgIjx0ZCBj bGFzcz1cImRpZmYgZGlmZi1jaGFuZ2VkXCI+JGxpbmU8L3RkPiIpOwogICAgICAgIH0gZWxzaWYg KCRsYjIgPT0gJGopIHsKICAgICAgICAgIG15ICRodG1sX2xpbmU7CiAgICAgICAgICB3aGlsZSAo JGxiMiA9PSAkaikgewogICAgICAgICAgICBteSAkYmVnaW5fY2hhciA9ICRyX2N1bHggLSAkYjI7 CgogICAgICAgICAgICAkbGluZSA9fiAvXiguKikoLnskYmVnaW5fY2hhcn0pJC87CiAgICAgICAg ICAgICRodG1sX2xpbmUgLj0gc3BhY2VkSHRtbFRleHQoJDEpIC4KICAgICAgICAgICAgICAnPC9z cGFuPjxzcGFuIGNsYXNzPSJkaWZmIGRpZmYtdW5jaGFuZ2VkIj4nOwogICAgICAgICAgICAkbGlu ZSA9ICQyOwoKICAgICAgICAgICAgbGFzdCBpZiAoJGogIT0gJGxlMik7CgogICAgICAgICAgICBt eSAkZW5kX2NoYXIgPSAkcl9jdWx4IC0gJGUyOwogICAgICAgICAgICAkbGluZSA9fiAvXiguKiko LnskZW5kX2NoYXJ9KSQvOwogICAgICAgICAgICAkaHRtbF9saW5lIC49IHNwYWNlZEh0bWxUZXh0 KCQxKSAuCiAgICAgICAgICAgICAgJzwvc3Bhbj48c3BhbiBjbGFzcz0iZGlmZiBkaWZmLWNoYW5n ZWQiPic7CiAgICAgICAgICAgICRsaW5lID0gJDI7CgogICAgICAgICAgICAkaWR4Kys7CiAgICAg ICAgICAgIG15ICgkdGIxLCAkdGUxLCAkdGxiMSwgJHRsZTEsICR0YjIsICR0ZTIsICR0bGIyLCAk dGxlMikgPQogICAgICAgICAgICAgICgkYjEsICRlMSwgJGxiMSwgJGxlMSwgJGIyLCAkZTIsICRs YjIsICRsZTIpOwogICAgICAgICAgICAoJGIxLCAkZTEsICRsYjEsICRsZTEsICRiMiwgJGUyLCAk bGIyLCAkbGUyKSA9CiAgICAgICAgICAgICAgQGRpZmZfc3RyWyRpZHgqOC4uKCRpZHgrMSkqOC0x XTsKICAgICAgICAgICAgJGxiMSA9ICRJTkZJTklUWSBpZiAoJGxiMSA8IDApOwogICAgICAgICAg ICAkbGIyID0gJElORklOSVRZIGlmICgkbGIyIDwgMCk7CiAgICAgICAgICAgICRsZTEgPSAkSU5G SU5JVFkgaWYgKCRsZTEgPCAwKTsKICAgICAgICAgICAgJGxlMiA9ICRJTkZJTklUWSBpZiAoJGxl MiA8IDApOwogICAgICAgICAgICBpZiAoJHRlMSA+ICRiMSkgewogICAgICAgICAgICAgICgkYjEs ICRsYjEpID0gKCR0ZTEsICR0bGUxKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJHRl MiA+ICRiMikgewogICAgICAgICAgICAgICgkYjIsICRsYjIpID0gKCR0ZTIsICR0bGUyKTsKICAg ICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcHVzaChAcmlnaHRfaHRtbCwKICAgICAg ICAgICAgICAgc3ByaW50ZignPHRkPjxzcGFuIGNsYXNzPSJkaWZmIGRpZmYtY2hhbmdlZCI+JXMl czwvc3Bhbj48L3RkPicsCiAgICAgICAgICAgICAgICAgICAgICAgJGh0bWxfbGluZSwgc3BhY2Vk SHRtbFRleHQoJGxpbmUpKSk7CiAgICAgICAgfSBlbHNpZiAoJGxlMiA9PSAkaikgewogICAgICAg ICAgbXkgJGh0bWxfbGluZTsKICAgICAgICAgIHdoaWxlICgkbGUyID09ICRqKSB7CiAgICAgICAg ICAgIG15ICRlbmRfY2hhciA9ICRyX2N1bHggLSAkZTI7CiAgICAgICAgICAgICRsaW5lID1+IC9e KC4qKSgueyRlbmRfY2hhcn0pJC87CiAgICAgICAgICAgICRodG1sX2xpbmUgLj0gc3BhY2VkSHRt bFRleHQoJDEpIC4KICAgICAgICAgICAgICAnPC9zcGFuPjxzcGFuIGNsYXNzPSJkaWZmIGRpZmYt Y2hhbmdlZCI+JzsKICAgICAgICAgICAgJGxpbmUgPSAkMjsKCiAgICAgICAgICAgICRpZHgrKzsK ICAgICAgICAgICAgbXkgKCR0YjEsICR0ZTEsICR0bGIxLCAkdGxlMSwgJHRiMiwgJHRlMiwgJHRs YjIsICR0bGUyKSA9CiAgICAgICAgICAgICAgKCRiMSwgJGUxLCAkbGIxLCAkbGUxLCAkYjIsICRl MiwgJGxiMiwgJGxlMik7CiAgICAgICAgICAgICgkYjEsICRlMSwgJGxiMSwgJGxlMSwgJGIyLCAk ZTIsICRsYjIsICRsZTIpID0KICAgICAgICAgICAgICBAZGlmZl9zdHJbJGlkeCo4Li4oJGlkeCsx KSo4LTFdOwogICAgICAgICAgICAkbGIxID0gJElORklOSVRZIGlmICgkbGIxIDwgMCk7CiAgICAg ICAgICAgICRsYjIgPSAkSU5GSU5JVFkgaWYgKCRsYjIgPCAwKTsKICAgICAgICAgICAgJGxlMSA9 ICRJTkZJTklUWSBpZiAoJGxlMSA8IDApOwogICAgICAgICAgICAkbGUyID0gJElORklOSVRZIGlm ICgkbGUyIDwgMCk7CiAgICAgICAgICAgIGlmICgkdGUxID4gJGIxKSB7CiAgICAgICAgICAgICAg KCRiMSwgJGxiMSkgPSAoJHRlMSwgJHRsZTEpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlm ICgkdGUyID4gJGIyKSB7CiAgICAgICAgICAgICAgKCRiMiwgJGxiMikgPSAoJHRlMiwgJHRsZTIp OwogICAgICAgICAgICB9CgogICAgICAgICAgICBsYXN0IGlmICgkbGIyICE9ICRqKTsKCiAgICAg ICAgICAgIG15ICRiZWdpbl9jaGFyID0gJHJfY3VseCAtICRiMjsKICAgICAgICAgICAgJGxpbmUg PX4gL14oLiopKC57JGJlZ2luX2NoYXJ9KSQvOwogICAgICAgICAgICAkaHRtbF9saW5lIC49IHNw YWNlZEh0bWxUZXh0KCQxKSAuCiAgICAgICAgICAgICAgJzwvc3Bhbj48c3BhbiBjbGFzcz0iZGlm ZiBkaWZmLXVuY2hhbmdlZCI+JzsKICAgICAgICAgICAgJGxpbmUgPSAkMjsKICAgICAgICAgIH0K ICAgICAgICAgIHB1c2goQHJpZ2h0X2h0bWwsCiAgICAgICAgICAgICAgIHNwcmludGYoJzx0ZCBu b3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmYgZGlmZi11bmNoYW5nZWQiJy4KICAgICAg ICAgICAgICAgICAgICAgICAnPiVzJXM8L3NwYW4+PC90ZD4nLAogICAgICAgICAgICAgICAgICAg ICAgICRodG1sX2xpbmUsIHNwYWNlZEh0bWxUZXh0KCRsaW5lKSkpOwogICAgICAgIH0gZWxzZSB7 CiAgICAgICAgICAkbGluZSA9IHNwYWNlZEh0bWxUZXh0ICgkbGluZSk7CiAgICAgICAgICBwdXNo IEByaWdodF9odG1sLCAiPHRkIGNsYXNzPVwiZGlmZiBkaWZmLXVuY2hhbmdlZFwiPiRsaW5lPC90 ZD4iOwogICAgICAgIH0KICAgICAgfQogICAgICBmb3IgKG15ICRqID0gMDsgJGogPCAkbGVmdFJv dyB8fCAkaiA8ICRyaWdodFJvdyA7ICRqKyspIHsgIyBkdW1wIG91dCBib3RoIGNvbHMKICAgICAg ICBwcmludCAgJzx0cj4nOwogICAgICAgIGlmICgkaiA8ICRsZWZ0Um93KSB7CiAgICAgICAgICBw cmludCAkbGVmdF9odG1sWyRqXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcHJpbnQgJzx0 ZCBjbGFzcz0iZGlmZiBkaWZmLWNoYW5nZWQtbWlzc2luZyI+Jm5ic3A7PC90ZD4nOwogICAgICAg IH0KICAgICAgICBpZiAoJGogPCAkcmlnaHRSb3cpIHsKICAgICAgICAgIHByaW50ICRyaWdodF9o dG1sWyRqXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcHJpbnQgJzx0ZCBjbGFzcz0iZGlm ZiBkaWZmLWNoYW5nZWQtbWlzc2luZyI+Jm5ic3A7PC90ZD4nOwogICAgICAgIH0KICAgICAgICBw cmludCAiPC90cj5cbiI7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGZvciAobXkgJGogPSAw OyAkaiA8ICRsZWZ0Um93IHx8ICRqIDwgJHJpZ2h0Um93OyAkaisrKSB7ICMgZHVtcCBib3RoIGNv bHMKICAgICAgICBwcmludCAiPHRyPlxuIjsKICAgICAgICBpZiAoJGogPCAkbGVmdFJvdykgewog ICAgICAgICAgcHJpbnQgJzx0ZCBjbGFzcz0iZGlmZiBkaWZmLWNoYW5nZWQiPiZuYnNwOycgLgog ICAgICAgICAgICBzcGFjZWRIdG1sVGV4dChAJGxlZnRDb2xSZWZbJGpdKSAuICc8L3RkPic7CiAg ICAgICAgfSBlbHNlIHsKICAgICAgICAgIHByaW50ICc8dGQgY2xhc3M9ImRpZmYgZGlmZi1jaGFu Z2VkLW1pc3NpbmciPiZuYnNwOzwvdGQ+JzsKICAgICAgICB9CiAgICAgICAgcHJpbnQgIlxuIjsK CiAgICAgICAgaWYgKCRqIDwgJHJpZ2h0Um93KSB7CiAgICAgICAgICBwcmludCAnPHRkIGNsYXNz PSJkaWZmIGRpZmYtY2hhbmdlZCI+Jm5ic3A7JyAuCiAgICAgICAgICAgIHNwYWNlZEh0bWxUZXh0 KEAkcmlnaHRDb2xSZWZbJGpdKSAuICc8L3RkPic7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAg IHByaW50ICc8dGQgY2xhc3M9ImRpZmYgZGlmZi1jaGFuZ2VkLW1pc3NpbmciPiZuYnNwOzwvdGQ+ JzsKICAgICAgICB9CiAgICAgICAgcHJpbnQgIlxuPC90cj5cbiI7CiAgICAgIH0KICAgIH0KICB9 Cn0KCgojCiMgR2VuZXJhdGVzICJodW1hbiByZWFkYWJsZSIsIEhUTUxpZmllZCBkaWZmcy4KIwpz dWIgaHVtYW5fcmVhZGFibGVfZGlmZigkJCkKewogIG15ICgkZmgsICRyZXYpID0gQF87CgogICht eSAkd2hlcmVfbmQgICAgICAgPSAkd2hlcmUpICAgICAgID1+IHN8XC5kaWZmJHx8OwogIChteSAk ZmlsZW5hbWUgICAgICAgPSAkd2hlcmVfbmQpICAgID1+IHN8Xi4qL3x8OwogIChteSAkcGF0aG5h bWUgICAgICAgPSAkd2hlcmVfbmQpICAgID1+IHN8KCg/PD0vKUF0dGljLyk/W14vXSokfHw7CiAg KG15ICRzY3JpcHR3aGVyZV9uZCA9ICRzY3JpcHR3aGVyZSkgPX4gc3xcLmRpZmYkfHw7CgogIG5h dmlnYXRlSGVhZGVyKCRzY3JpcHR3aGVyZV9uZCwgJHBhdGhuYW1lLCAkZmlsZW5hbWUsICRyZXYs ICdkaWZmJyk7CgogICMgUmVhZCBoZWFkZXIgdG8gcGljayB1cCByZWFkIHJldmlzaW9uIGFuZCBk YXRlLCBpZiBwb3NzaWJsZS4KCiAgbXkgKCRyMWQsICRyMXIsICRyMmQsICRyMnIpOwogIHdoaWxl ICg8JGZoPikgewogICAgKCRyMWQsICRyMXIpID0gL1x0KC4qKVx0KC4qKSQvIGlmICgvXi0tLSAv KTsKICAgICgkcjJkLCAkcjJyKSA9IC9cdCguKilcdCguKikkLyBpZiAoL15cK1wrXCsgLyk7CiAg ICBsYXN0IGlmICgvXlwrXCtcKyAvKTsKICB9CgogIG15ICgkcmV2MSwgJGRhdGUxKTsKICBpZiAo ZGVmaW5lZCgkcjFyKSAmJiAkcjFyID1+IC9eKFxkK1wuKStcZCskLykgewogICAgJHJldjEgID0g JHIxcjsKICAgICRkYXRlMSA9ICRyMWQ7CiAgfQogIG15ICgkcmV2MiwgJGRhdGUyKTsKICBpZiAo ZGVmaW5lZCgkcjJyKSAmJiAkcjJyID1+IC9eKFxkK1wuKStcZCskLykgewogICAgJHJldjIgID0g JHIycjsKICAgICRkYXRlMiA9ICRyMmQ7CiAgfQogICRyZXYxICA9ICRpbnB1dHtyMX0gICAgICB1 bmxlc3MgZGVmaW5lZCgkcmV2MSk7CiAgJHJldjEgID0gJGlucHV0e3RyMX0gICAgIGlmIChkZWZp bmVkKCRyZXYxKSAmJiAkcmV2MSBlcSAndGV4dCcpOwogICRyZXYxICA9ICd1bmtub3duLWxlZnQn ICB1bmxlc3MgZGVmaW5lZCgkcmV2MSk7CiAgJHJldjIgID0gJGlucHV0e3IyfSAgICAgIHVubGVz cyBkZWZpbmVkKCRyZXYyKTsKICAkcmV2MiAgPSAkaW5wdXR7dHIyfSAgICAgaWYgKGRlZmluZWQo JHJldjIpICYmICRyZXYyIGVxICd0ZXh0Jyk7CiAgJHJldjIgID0gJ3Vua25vd24tcmlnaHQnIHVu bGVzcyBkZWZpbmVkKCRyZXYyKTsKICAkZGF0ZTEgPSBkZWZpbmVkKCRkYXRlMSkgPyAnLCAnIC4g aHRtbHF1b3RlKCRkYXRlMSkgOiAnJzsKICAkZGF0ZTIgPSBkZWZpbmVkKCRkYXRlMikgPyAnLCAn IC4gaHRtbHF1b3RlKCRkYXRlMikgOiAnJzsKCiAgbXkgJGxpbmsgPSB1cmlfZXNjYXBlKCRmaWxl bmFtZSkgLiAoJHF1ZXJ5ID8gIiRxdWVyeTsiIDogJz8nKTsKCiAgIyBVc2luZyA8dGFibGUgc3R5 bGU9XCJib3JkZXI6IG5vbmVcIiBoZXJlIGJyZWFrcyBOUyA0LnggYmFkbHkuLi4KICBwcmludCA8 PEVPRjsKPGgzIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXIiPkRpZmYgZm9yIC8kd2hlcmVfbmQg YmV0d2VlbiB2ZXJzaW9ucyAkcmV2MSBhbmQgJHJldjI8L2gzPgo8dGFibGUgYm9yZGVyPSIwIiBj ZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJEaWZm IG91dHB1dCI+Cjx0ciBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZiI+Cjx0aCBzdHls ZT0idGV4dC1hbGlnbjogY2VudGVyOyB2ZXJ0aWNhbC1hbGlnbjogdG9wIiB3aWR0aD0iNTAlIj4K PGEgaHJlZj0iJHtsaW5rfXJldj0kcmV2MSI+dmVyc2lvbiAkcmV2MTwvYT4kZGF0ZTEKPC90aD4K PHRoIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IHZlcnRpY2FsLWFsaWduOiB0b3AiIHdpZHRo PSI1MCUiPgo8YSBocmVmPSIke2xpbmt9cmV2PSRyZXYyIj52ZXJzaW9uICRyZXYyPC9hPiRkYXRl Mgo8L3RoPgo8L3RyPgpFT0YKCiAgIyBQcm9jZXNzIGRpZmYgdGV4dAogICMgcHJlZmV0Y2ggc2V2 ZXJhbCBsaW5lcwogIG15IEBidWYgPSBoZWFkKCRmaCk7CiAgbXkgJWQgPSBzY2FuX2RpcmVjdGl2 ZXMoQGJ1Zik7CgogIG15ICRsZWZ0Um93ICA9IDA7CiAgbXkgJHJpZ2h0Um93ID0gMDsKICBteSAo JGRpZmZ0eHQsIEByaWdodENvbCwgQGxlZnRDb2wsICRvbGRsaW5lLCAkbmV3bGluZSwgJGZ1bm5h bWUpOwoKICAkbGluayAuPSAnY29udGVudC10eXBlPXRleHQlMkZ4LWN2c3dlYi1tYXJrdXA7JzsK ICAkbGluayAuPSAnbG49MTsnIHVubGVzcyAoJGxpbmsgPX4gL1w/LipcYmxuPTFcYi8pOwoKICB3 aGlsZSAoQGJ1ZiB8fCAhZW9mKCRmaCkpIHsKICAgICRkaWZmdHh0ID0gQGJ1ZiA/IHNoaWZ0IEBi dWYgOiA8JGZoPjsKCiAgICBpZiAoJGRpZmZ0eHQgPX4gL15AQC8pIHsKICAgICAgKCRvbGRsaW5l LCAkbmV3bGluZSwgJGZ1bm5hbWUpID0KICAgICAgICAkZGlmZnR4dCA9fiAvQEAgXC0oWzAtOV0r KS4qXCsoWzAtOV0rKS4qQEAoLiopLzsKICAgICAgJGZ1bm5hbWUgPSBodG1scXVvdGUoJGZ1bm5h bWUpOwogICAgICAkZnVubmFtZSA9fiBzL1xzLyZuYnNwOy9nbzsKICAgICAgJGZ1bm5hbWUgJiY9 ICImbmJzcDs8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTogc21hbGxlclwiPiRmdW5uYW1lPC9zcGFu PiI7CiAgICAgIG15ICRvbCA9ICRvbGRsaW5lIHx8IDE7CiAgICAgIG15ICRubCA9ICRuZXdsaW5l IHx8IDE7CgogICAgICBwcmludCA8PEVPRjsKPHRyPgo8dGQgd2lkdGg9IjUwJSIgY2xhc3M9ImRp ZmYtaGVhZGluZyI+CiA8Yj48YSBocmVmPSIke2xpbmt9cmV2PSRyZXYxI2wkb2wiPkxpbmUmbmJz cDskb2xkbGluZTwvYT48L2I+JGZ1bm5hbWUKPC90ZD4KPHRkIHdpZHRoPSI1MCUiIGNsYXNzPSJk aWZmLWhlYWRpbmciPgogPGI+PGEgaHJlZj0iJHtsaW5rfXJldj0kcmV2MiNsJG5sIj5MaW5lJm5i c3A7JG5ld2xpbmU8L2E+PC9iPiRmdW5uYW1lCjwvdGQ+CjwvdHI+CkVPRgoKICAgICAgJHN0YXRl ICAgID0gImR1bXAiOwogICAgICAkbGVmdFJvdyAgPSAwOwogICAgICAkcmlnaHRSb3cgPSAwOwog ICAgfSBlbHNlIHsKICAgICAgbXkgKCRkaWZmY29kZSwgJHJlc3QpID0gJGRpZmZ0eHQgPX4gL14o Wy0rIF0pKC4qKS87CiAgICAgICRkaWZmY29kZSA9ICcnIHVubGVzcyBkZWZpbmVkKCRkaWZmY29k ZSk7CiAgICAgICRfID0gJHJlc3Q7CgogICAgICAjIyMjIyMjIyMKICAgICAgIyBsaXR0bGUgc3Rh dGUgbWFjaGluZSB0byBwYXJzZSB1bmlmaWVkLWRpZmYgb3V0cHV0IChIZW4sIHplbGxlckB0aGlu ay5kZSkKICAgICAgIyBpbiBvcmRlciB0byBnZXQgc29tZSBuaWNlICdlZGlmZictbW9kZSBvdXRw dXQKICAgICAgIyBzdGF0ZXM6CiAgICAgICMgICJkdW1wIiAgICAgICAgICAgICAtIGp1c3QgZHVt cCB0aGUgdmFsdWUKICAgICAgIyAgIlByZUNoYW5nZVJlbW92ZSIgIC0gd2UgYmVnYW4gd2l0aCAn LScgLi4gc28gdGhpcyBjb3VsZCBiZSB0aGUgc3RhcnQgb2YgYSAnY2hhbmdlJyBhcmVhIG9yIGp1 c3QgcmVtb3ZlCiAgICAgICMgICJQcmVDaGFuZ2UiICAgICAgICAtIG9rZXksIHdlIGdvdCBzZXZl cmFsICctJyBsaW5lcyBhbmQgbW92ZWQgdG8gJysnIGxpbmVzIC0+IHRoaXMgaXMgYSBjaGFuZ2Ug YmxvY2sKICAgICAgIyMjIyMjIyMjIwoKICAgICAgaWYgKCRkaWZmY29kZSBlcSAnKycpIHsKICAg ICAgICBpZiAoJHN0YXRlIGVxICJkdW1wIikKICAgICAgICB7ICAgICMgJ2NoYW5nZScgbmV2ZXIg YmVnaW5zIHdpdGggJysnOiBqdXN0IGR1bXAgb3V0IHZhbHVlCiAgICAgICAgICAkXyA9IHNwYWNl ZEh0bWxUZXh0KCRyZXN0LCAkZHt0YWJzdG9wfSk7CiAgICAgICAgICBwcmludGYoPDxFT0YsICRf KTsKPHRyPgogPHRkIGNsYXNzPSJkaWZmIGRpZmYtZW1wdHkiPiZuYnNwOzwvdGQ+CiA8dGQgY2xh c3M9ImRpZmYgZGlmZi1hZGRlZCI+Jm5ic3A7JXM8L3RkPgo8L3RyPgpFT0YKICAgICAgICB9IGVs c2UgeyAgICAjIHdlIGdvdCBtaW51cyBiZWZvcmUKICAgICAgICAgICRzdGF0ZSA9ICJQcmVDaGFu Z2UiOwogICAgICAgICAgJHJpZ2h0Q29sWyRyaWdodFJvdysrXSA9ICRfOwogICAgICAgIH0KICAg ICAgfSBlbHNpZiAoJGRpZmZjb2RlIGVxICctJykgewogICAgICAgICRzdGF0ZSA9ICJQcmVDaGFu Z2VSZW1vdmUiOwogICAgICAgICRsZWZ0Q29sWyRsZWZ0Um93KytdID0gJF87CiAgICAgIH0gZWxz ZSB7ICAgICMgZW1wdHkgZGlmZmNvZGUKICAgICAgICBmbHVzaF9kaWZmX3Jvd3MgXEBsZWZ0Q29s LCBcQHJpZ2h0Q29sLCAkbGVmdFJvdywgJHJpZ2h0Um93OwogICAgICAgICRfID0gc3BhY2VkSHRt bFRleHQoJHJlc3QsICRke3RhYnN0b3B9KTsKICAgICAgICBwcmludGYoPDxFT0YsICRfLCAkXyk7 Cjx0cj4KIDx0ZCBjbGFzcz0iZGlmZiBkaWZmLXNhbWUiPiZuYnNwOyVzPC90ZD4KIDx0ZCBjbGFz cz0iZGlmZiBkaWZmLXNhbWUiPiZuYnNwOyVzPC90ZD4KPC90cj4KRU9GCiAgICAgICAgJHN0YXRl ICAgID0gImR1bXAiOwogICAgICAgICRsZWZ0Um93ICA9IDA7CiAgICAgICAgJHJpZ2h0Um93ID0g MDsKICAgICAgfQogICAgfQogIH0KICBjbG9zZSgkZmgpOwoKICBmbHVzaF9kaWZmX3Jvd3MgXEBs ZWZ0Q29sLCBcQHJpZ2h0Q29sLCAkbGVmdFJvdywgJHJpZ2h0Um93OwoKICAjIHN0YXRlIGlzIGVt cHR5IGlmIHdlIGRpZG4ndCBoYXZlIGFueSBjaGFuZ2UKICBpZiAoISRzdGF0ZSkgewogICAgcHJp bnQgPDxFT0Y7Cjx0cj4KIDx0ZCBjb2xzcGFuPSIyIj4mbmJzcDs8L3RkPgo8L3RyPgo8dHIgY2xh c3M9ImRpZmYgZGlmZi1lbXB0eSI+CiA8dGQgY29sc3Bhbj0iMiIgYWxpZ249ImNlbnRlciI+PGI+ LSBObyB2aWV3YWJsZSBjaGFuZ2UgLTwvYj48L3RkPgo8L3RyPgpFT0YKICB9CgogIHByaW50Zig8 PEVPRiwgJHNjcmlwdHdoZXJlKTsKPC90YWJsZT4KPGhyIHN0eWxlPSJ3aWR0aDogMTAwJSUiIC8+ Cjxmb3JtIG1ldGhvZD0iZ2V0IiBhY3Rpb249IiVzIj4KPGRpdiBzdHlsZT0iZmxvYXQ6IGxlZnQi Pgo8bGFiZWwgZm9yPSJmIj5EaWZmIGZvcm1hdDo8YnIgLz4KRU9GCiAgcHJpbnREaWZmU2VsZWN0 U3RpY2t5VmFycygpOwogIHByaW50RGlmZlNlbGVjdCgkdXNlX2phdmFfc2NyaXB0KTsKICBwcmlu dGYoPDxFT0YsICRyZXYxLCAkcmV2Mik7CjwvbGFiZWw+CjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZh bHVlPSJTaG93IiAvPgo8L2Rpdj4KPHRhYmxlIHN0eWxlPSJmbG9hdDogcmlnaHQ7IGJvcmRlcjog dGhpbiBvdXRzZXQiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMSIgdGl0bGU9IkxlZ2Vu ZCIgc3VtbWFyeT0iTGVnZW5kIj4KIDx0cj4KICA8dGQgYWxpZ249ImNlbnRlciIgY2xhc3M9ImRp ZmYgZGlmZi1yZW1vdmVkIj5SZW1vdmVkIGZyb20gdi4lczwvdGQ+CiAgPHRkIGNsYXNzPSJkaWZm IGRpZmYtZW1wdHkiPiZuYnNwOzwvdGQ+CiA8L3RyPjx0ciBjbGFzcz0iZGlmZiBkaWZmLWNoYW5n ZWQiPgogIDx0ZCBhbGlnbj0iY2VudGVyIiBjb2xzcGFuPSIyIj5jaGFuZ2VkIGxpbmVzPC90ZD4K IDwvdHI+PHRyPgogIDx0ZCBjbGFzcz0iZGlmZiBkaWZmLWVtcHR5Ij4mbmJzcDs8L3RkPgogIDx0 ZCBhbGlnbj0iY2VudGVyIiBjbGFzcz0iZGlmZiBkaWZmLWFkZGVkIj5BZGRlZCBpbiB2LiVzPC90 ZD4KIDwvdHI+CjwvdGFibGU+CjwvZm9ybT4KPGJyIGNsZWFyPSJhbGwiIC8+CkVPRgp9CgoKc3Vi IGRvRW5zY3JpcHQoJCQkOyQpCnsKICBteSAoJGZpbGVoYW5kbGUsICRoaWdobGlnaHQsICRsaW5l bnVtYmVycywgJGxhbmcpID0gQF87CiAgJGxhbmcgfHw9ICdjdnN3ZWInOwoKICBteSBAY21kID0g KCRDTUR7ZW5zY3JpcHR9LAogICAgICAgICAgICAgQGVuc2NyaXB0X29wdGlvbnMsCiAgICAgICAg ICAgICAnLXEnLCAiLS1sYW5ndWFnZT0kbGFuZyIsICctbycsICctJywgIi0taGlnaGxpZ2h0PSRo aWdobGlnaHQiKTsKCiAgbG9jYWwgKkVOU0NSSVBUX09VVDsKICBteSAoJGgsICRlcnIpID0KICAg IHN0YXJ0cHJvYyhcQGNtZCwgJGZpbGVoYW5kbGUsICc+cGlwZScsIFwqRU5TQ1JJUFRfT1VUKTsK ICBmYXRhbCgnNTAwIEludGVybmFsIEVycm9yJywgJGVycikgdW5sZXNzICRoOwoKICAjIFdlIGNv dWxkIHNob3J0LWNpcmN1aXQgYW5kIGhhdmUgZW5zY3JpcHQgb3V0cHV0IGRpcmVjdGx5IHRvIFNU RE9VVCBhYm92ZSwKICAjIGJ1dCB0aGF0IGRvZXNuJ3Qgd29yayB3aXRoIG1vZF9wZXJsIChhdCBs ZWFzdCBzb21lIDEuOTkgdmVyc2lvbnMpLgogIGlmICgkbGluZW51bWJlcnMpIHsKICAgIG15ICRs biA9IDA7CiAgICB3aGlsZSAoPEVOU0NSSVBUX09VVD4pIHsKICAgICAgcHJpbnRmICc8YSBpZD0i bCVkIiBjbGFzcz0ic3JjIj4lNWQ6IDwvYT4nLCAoKyskbG4pIHggMjsKICAgICAgcHJpbnQgJF87 CiAgICB9CiAgfSBlbHNlIHsKICAgIGxvY2FsICQvID0gdW5kZWY7CiAgICBwcmludCA8RU5TQ1JJ UFRfT1VUPjsKICB9CiAgJGgtPmZpbmlzaCgpOwp9CgoKIwojIFRoZSBwYXNzZWQgaW4gJHBhdGgg YW5kICRmaWxlbmFtZSBzaG91bGQgbm90IGJlIFVSSSBlc2NhcGVkLCBhbmQgJHN3aGVyZQojICpz aG91bGQqIGJlLgojCnN1YiBuYXZpZ2F0ZUhlYWRlcigkJCQkJDskKQp7CiAgbXkgKCRzd2hlcmUs ICRwYXRoLCAkZmlsZW5hbWUsICRyZXYsICR0aXRsZSwgJG1vZGRhdGUpID0gQF87CiAgJHN3aGVy ZSA9ICIiIGlmICgkc3doZXJlIGVxICRzY3JpcHR3aGVyZSk7CiAgJHN3aGVyZSA9ICcuLycgLiB1 cmlfZXNjYXBlKCRmaWxlbmFtZSkgaWYgKCRzd2hlcmUgZXEgIiIpOwoKICBteSAkcWZpbGUgPSBo dG1scXVvdGUoJGZpbGVuYW1lKTsKICBteSAkcXBhdGggPSBodG1scXVvdGUoJHBhdGgpOwogIG15 ICR0cmV2ICA9ICRyZXYgPyAiIC0gIiAuIGh0bWxxdW90ZSgkcmV2KSA6ICcnOwoKICBodHRwX2hl YWRlcignJywgJG1vZGRhdGUpOwoKICBwcmludCA8PEVPRjsKJEhUTUxfRE9DVFlQRQo8aHRtbD4K PGhlYWQ+Cjx0aXRsZT4kcXBhdGgkcWZpbGUgLSAkdGl0bGUkdHJldjwvdGl0bGU+CiRIVE1MX01F VEEkQ1NTPC9oZWFkPgo8Ym9keSBjbGFzcz0ic3JjIj4KPHRhYmxlIGNsYXNzPSJuYXZpZ2F0ZS1o ZWFkZXIiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIj4KIDx0cj4KICA8dGQ+CkVP RgoKICBteSAkZnJhZyA9ICcnOwogIGlmICgkcmV2KSB7CiAgICAkZnJhZyAgPSAnIyc7CiAgICAk ZnJhZyAuPSAncmV2JyBpZiAoJHJldiA9fiAvXC4vKTsgICMgTm9ybWFsIHJldmlzaW9uOiBwcmVm aXggd2l0aCAicmV2Ii4KICAgICRmcmFnIC49ICRyZXY7ICAgICAgICAgICAgICAgICAgICAgIyBB cHBlbmQgcmV2aXNpb24vYnJhbmNoL3RhZy4KICB9CiAgbXkgJGJhY2t1cmwgPSAiJHN3aGVyZSRx dWVyeSRmcmFnIjsKCiAgcHJpbnQgJmxpbmsoJGJhY2tpY29uLCAkYmFja3VybCk7CiAgcHJpbnRm ICc8Yj5SZXR1cm4gdG8gJXMgQ1ZTIGxvZycsICZsaW5rKCRxZmlsZSwgJGJhY2t1cmwpOwogIHBy aW50ICI8L2I+ICRmaWxlaWNvbjwvdGQ+IjsKCiAgcHJpbnRmKDw8RU9GLCAkZGlyaWNvbiwgJmNs aWNrYWJsZVBhdGgoJHBhdGgsIDEpKTsKICA8dGQgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0Ij4l cyA8Yj5VcCB0byAlczwvYj48L3RkPgogPC90cj4KPC90YWJsZT4KRU9GCn0KCgpzdWIgcGx1cmFs X3dyaXRlKCQkKQp7CiAgbXkgKCRudW0sICR0ZXh0KSA9IEBfOwogIGlmICgkbnVtICE9IDEpIHsK ICAgICR0ZXh0IC49ICJzIjsKICB9CgogIGlmICgkbnVtID4gMCkgewogICAgcmV0dXJuIGpvaW4g KCcgJywgJG51bSwgJHRleHQpOwogIH0gZWxzZSB7CiAgICByZXR1cm4gIiI7CiAgfQp9CgoKIyMK IyBwcmludCByZWFkYWJsZSB0aW1lc3RhbXAgaW4gdGVybXMgb2YKIyAnLi50aW1lIGFnbycKIyBI LiBaZWxsZXIgPHplbGxlckB0aGluay5kZT4KIyMKc3ViIHJlYWRhYmxlVGltZSgkJCkKewogIG15 ICgkc2VjcywgJGxvbmcpID0gQF87CgogICMgVGhpcyBmdW5jdGlvbiB3b3JrcyBjb3JyZWN0bHkg Zm9yIHRpbWUgPj0gMiBzZWNvbmRzLgogIHJldHVybiAndmVyeSBsaXR0bGUgdGltZScgaWYgKCRz ZWNzIDwgMik7CgogIG15ICVkZXNjID0gKAogICAgICAgICAgICAgIDEgICAgICAgID0+ICdzZWNv bmQnLAogICAgICAgICAgICAgIDYwICAgICAgID0+ICdtaW51dGUnLAogICAgICAgICAgICAgIDM2 MDAgICAgID0+ICdob3VyJywKICAgICAgICAgICAgICA4NjQwMCAgICA9PiAnZGF5JywKICAgICAg ICAgICAgICA2MDQ4MDAgICA9PiAnd2VlaycsCiAgICAgICAgICAgICAgMjYyODAwMCAgPT4gJ21v bnRoJywKICAgICAgICAgICAgICAzMTUzNjAwMCA9PiAneWVhcicKICAgICAgICAgICAgICk7Cgog IG15IEBicmVha3MgPSBzb3J0IHsgJGEgPD0+ICRiIH0ga2V5cyAlZGVzYzsKICBteSAkaSA9IDA7 CgogIHdoaWxlICgkaSA8PSAkI2JyZWFrcyAmJiAkc2VjcyA+PSAyICogJGJyZWFrc1skaV0pIHsK ICAgICRpKys7CiAgfQogICRpLS07CiAgbXkgJGJyZWFrICA9ICRicmVha3NbJGldOwogIG15ICRy ZXR2YWwgPSBwbHVyYWxfd3JpdGUoaW50KCRzZWNzIC8gJGJyZWFrKSwgJGRlc2N7JGJyZWFrfSk7 CgogIGlmICgkbG9uZyA9PSAxICYmICRpID4gMCkgewogICAgbXkgJHJlc3QgPSAkc2VjcyAlICRi cmVhazsKICAgICRpLS07CiAgICAkYnJlYWsgPSAkYnJlYWtzWyRpXTsKICAgIG15ICRyZXN0dGlt ZSA9IHBsdXJhbF93cml0ZShpbnQoJHJlc3QgLyAkYnJlYWspLCAkZGVzY3skYnJlYWt9KTsKICAg IGlmICgkcmVzdHRpbWUpIHsKICAgICAgJHJldHZhbCAuPSAiLCAkcmVzdHRpbWUiOwogICAgfQog IH0KCiAgcmV0dXJuICRyZXR2YWw7Cn0KCgojCiMgUmV0dXJucyBhIGh0bWxpZmllZCBwYXRoIHdo ZXJlIGVhY2ggZGlyZWN0b3J5IGlzIGEgbGluayBmb3IgZmFzdGVyCiMgbmF2aWdhdGlvbi4gICRj bGlja0xhc3QgY29udHJvbHMgd2hldGhlciB0aGUgYmFzZW5hbWUKIyAobGFzdCBkaXJlY3Rvcnkv ZmlsZSkgaXMgYSBsaW5rIGFzIHdlbGwuICBUaGUgcGFzc2VkIGluICRwYXRobmFtZSBzaG91bGQK IyAqbm90KiBiZSBVUkkgZXNjYXBlZC4KIwpzdWIgY2xpY2thYmxlUGF0aCgkJCkKewogIG15ICgk cGF0aG5hbWUsICRjbGlja0xhc3QpID0gQF87CgogIG15ICRyb290ID0gJ1snIC4gaHRtbHF1b3Rl KCRDVlNST09UZGVzY3J7JGN2c3RyZWV9IHx8ICRjdnN0cmVlKSAuICddJzsKCiAgIyBUaGlzIHNo b3VsZCBuZXZlciBoYXBwZW4gKHNlZSBjaG9vc2VDVlNSb290KCkpLCBidXQgbGV0J3MgYmUgc3Vy ZS4uLgogIHJldHVybiAkcm9vdCBpZiAoJHBhdGhuYW1lIGVxICcvJyk7CgogIG15ICRyZXR2YWwg PQogICAgJyAnIC4gJmxpbmsoJHJvb3QsIHNwcmludGYoJyVzLyVzI2Rpcmxpc3QnLCAkc2NyaXB0 bmFtZSwgJHF1ZXJ5KSk7CiAgbXkgJHdoZXJlcGF0aCA9ICcnOwogIG15ICgkbGFzdHNsYXNoKSA9 ICRwYXRobmFtZSA9fiBtfC8kfDsKCiAgZm9yZWFjaCAoc3BsaXQobXwvfCwgJHBhdGhuYW1lKSkg ewogICAgJHJldHZhbCAuPSAnIC8gJzsKICAgICR3aGVyZXBhdGggLj0gIi8kXyI7CiAgICBteSAk bGFzdCA9ICIkd2hlcmVwYXRoLyIgZXEgIi8kcGF0aG5hbWUiIHx8ICR3aGVyZXBhdGggZXEgIi8k cGF0aG5hbWUiOwoKICAgIGlmICgkY2xpY2tMYXN0IHx8ICEkbGFzdCkgewogICAgICAkcmV0dmFs IC49ICZsaW5rKGh0bWxxdW90ZSgkXyksCiAgICAgICAgICAgICAgICAgICAgICAgam9pbiAoJycs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjcmlwdG5hbWUsIHVyaV9lc2NhcGVfcGF0 aCgkd2hlcmVwYXRoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoISRsYXN0IHx8ICRs YXN0c2xhc2ggPyAnLycgOiAnJyksICRxdWVyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoISRsYXN0IHx8ICRsYXN0c2xhc2ggPyAiI2Rpcmxpc3QiIDogIiIpKSk7CiAgICB9IGVsc2Ug eyAgICAjIGRvIG5vdCBtYWtlIGEgbGluayB0byB0aGUgY3VycmVudCBkaXIKICAgICAgJHJldHZh bCAuPSBodG1scXVvdGUoJF8pOwogICAgfQogIH0KICByZXR1cm4gJHJldHZhbDsKfQoKCnN1YiBj aG9vc2VDVlNSb290KCkKewogIHByaW50ICI8Zm9ybSBtZXRob2Q9XCJnZXRcIiBhY3Rpb249XCIk c2NyaXB0d2hlcmVcIj5cbjxwPlxuIjsKICBpZiAoMiA8PSBAQ1ZTUk9PVCkgewogICAgZm9yZWFj aCBteSAkayAoa2V5cyAlaW5wdXQpIHsKICAgICAgcHJpbnRmKCI8aW5wdXQgdHlwZT1cImhpZGRl blwiIG5hbWU9XCIlc1wiIHZhbHVlPVwiJXNcIiAvPlxuIiwKICAgICAgICAgICAgIGh0bWxxdW90 ZSgkayksIGh0bWxxdW90ZSgkaW5wdXR7JGt9KSkKICAgICAgICBpZiAoJGlucHV0eyRrfSAmJiAk ayBuZSAnY3Zzcm9vdCcpOwogICAgfQoKICAgIHByaW50Zig8PEVPRiwgJHVzZV9qYXZhX3Njcmlw dCA/ICcgb25jaGFuZ2U9InRoaXMuZm9ybS5zdWJtaXQoKSInIDogJycpOwo8bGFiZWwgZm9yPSJj dnNyb290IiBhY2Nlc3NrZXk9IkMiPkNWUyBSb290Ogo8c2VsZWN0IGlkPSJjdnNyb290IiBuYW1l PSJjdnNyb290IiVzPgpFT0YKCiAgICBmb3JlYWNoIG15ICRrIChAQ1ZTUk9PVCkgewogICAgICBw cmludGYoIjxvcHRpb24gdmFsdWU9XCIlc1wiJXM+JXM8L29wdGlvbj5cbiIsCiAgICAgICAgICAg ICBodG1scXVvdGUoJGspLAogICAgICAgICAgICAgKCRrIGVxICRjdnN0cmVlKSA/ICcgc2VsZWN0 ZWQ9InNlbGVjdGVkIicgOiAnJywKICAgICAgICAgICAgIGh0bWxxdW90ZSgkQ1ZTUk9PVGRlc2Ny eyRrfSB8fCAkaykpOwogICAgfQogICAgcHJpbnQgJzwvc2VsZWN0PjwvbGFiZWw+JzsKICB9IGVs c2UgewoKICAgICMgbm8gY2hvaWNlIC0tIGJ1dCB3ZSBuZWVkIHRoZSBmb3JtIHRvIHNlbGVjdCBt b2R1bGUvcGF0aCwKICAgICMgYXQgbGVhc3QgZm9yIE5ldHNjYXBlCiAgICBwcmludGYgIkNWUyBS b290OiA8Yj5bJXNdPC9iPiIsCiAgICAgIGh0bWxxdW90ZSgkQ1ZTUk9PVGRlc2NyeyRjdnN0cmVl fSB8fCAkY3ZzdHJlZSk7CiAgfQoKICBwcmludCA8PEVPRjsKPGxhYmVsIGZvcj0ibXBhdGgiIGFj Y2Vzc2tleT0iTSI+Ck1vZHVsZSBwYXRoIG9yIGFsaWFzOgo8aW5wdXQgdHlwZT0idGV4dCIgaWQ9 Im1wYXRoIiBuYW1lPSJwYXRoIiB2YWx1ZT0iIiBzaXplPSIxNSIgLz4KPC9sYWJlbD4KPGlucHV0 IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkdvIiBhY2Nlc3NrZXk9Ik8iIC8+CjwvcD4KPC9mb3JtPgpF T0YKfQoKCnN1YiBjaG9vc2VNaXJyb3IoKQp7CiAgIyBUaGlzIGNvZGUgY29tZXMgZnJvbSB0aGUg b3JpZ2luYWwgQlNELWN2c3dlYgogICMgYW5kIG1heSBub3QgYmUgdXNlZnVsIGZvciB5b3VyIHNp dGU7IElmIHlvdSBkb24ndAogICMgc2V0ICVNSVJST1JTIHRoaXMgd29uJ3Qgc2hvdyB1cCwgYW55 d2F5LgogIHNjYWxhciglTUlSUk9SUykgb3IgcmV0dXJuOwoKICAjIFNob3VsZCBwZXJoYXBzIGV4 Y2x1ZGUgdGhlIGN1cnJlbnQgc2l0ZSBzb21laG93Li4uCiAgcHJpbnQgIlxuPHA+XG5UaGlzIENW U3dlYiBpcyBtaXJyb3JlZCBpblxuIjsKCiAgbXkgQHRtcCA9IG1hcCgmbGluayhodG1scXVvdGUo JF8pLCAkTUlSUk9SU3skX30pLCBzb3J0IGtleXMgJU1JUlJPUlMpOwogIG15ICR0bXAgPSBwb3Ag KEB0bXApOwoKICBpZiAoc2NhbGFyKEB0bXApKSB7CiAgICBwcmludCBqb2luICgnLCAnLCBAdG1w KSwgJyBhbmQgJzsKICB9CgogIHByaW50ICIkdG1wLlxuPC9wPlxuIjsKfQoKCnN1YiBmaWxlU29y dENtcCgpCnsKICAobXkgJGFmID0gJGEpID1+IHMvLHYkLy87CiAgKG15ICRiZiA9ICRiKSA9fiBz Lyx2JC8vOwogIG15ICgkcmV2MSwgJGRhdGUxLCAkbG9nMSwgJGF1dGhvcjEsICRmaWxlbmFtZTEp ID0gQHskZmlsZWluZm97JGFmfX0KICAgIGlmIChkZWZpbmVkKCRmaWxlaW5mb3skYWZ9KSk7CiAg bXkgKCRyZXYyLCAkZGF0ZTIsICRsb2cyLCAkYXV0aG9yMiwgJGZpbGVuYW1lMikgPSBAeyRmaWxl aW5mb3skYmZ9fQogICAgaWYgKGRlZmluZWQoJGZpbGVpbmZveyRiZn0pKTsKCiAgbXkgJGNvbXAg PSAwOwogIGlmIChkZWZpbmVkKCRmaWxlbmFtZTEpICYmIGRlZmluZWQoJGZpbGVuYW1lMikgJiYK ICAgICAgJGFmIGVxICRmaWxlbmFtZTEgICAmJiAkYmYgZXEgJGZpbGVuYW1lMikKICB7CgogICAg IyBUd28gZmlsZXMKICAgICRjb21wID0gLXJldmNtcCgkcmV2MSwgJHJldjIpICAgICAgICAgICAg IGlmICgkYnlyZXYgICYmICRyZXYxICAmJiAkcmV2Mik7CiAgICAkY29tcCA9ICgkZGF0ZTIgICA8 PT4gJGRhdGUxKSAgICAgICAgICAgICBpZiAoJGJ5ZGF0ZSAmJiAkZGF0ZTEgJiYgJGRhdGUyKTsK ICAgIGlmICgkaW5wdXR7aWdub3JlY2FzZX0pIHsKICAgICAgJGNvbXAgPSAodWMoJGxvZzEpICAg IGNtcCB1YygkbG9nMikpICAgIGlmICgkYnlsb2cgJiYgJGxvZzEgJiYgJGxvZzIpOwogICAgICAk Y29tcCA9ICh1YygkYXV0aG9yMSkgY21wIHVjKCRhdXRob3IyKSkgaWYgKCRieWF1dGhvciAmJgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhdXRob3Ix ICYmICRhdXRob3IyKTsKICAgIH0gZWxzZSB7CiAgICAgICRjb21wID0gKCRsb2cxICAgIGNtcCAk bG9nMikgICAgICAgICAgICBpZiAoJGJ5bG9nICYmICRsb2cxICYmICRsb2cyKTsKICAgICAgJGNv bXAgPSAoJGF1dGhvcjEgY21wICRhdXRob3IyKSAgICAgICAgIGlmICgkYnlhdXRob3IgJiYKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXV0aG9yMSAm JiAkYXV0aG9yMik7CiAgICB9CiAgfQoKICBpZiAoJGNvbXAgPT0gMCkgewoKICAgICMgRGlyZWN0 b3JpZXMgZmlyc3QsIHRoZW4gZmlsZXMgdW5kZXIgdmVyc2lvbiBjb250cm9sLAogICAgIyB0aGVu IG90aGVyLCAicm9ndWUiIGZpbGVzLgogICAgIyBTb3J0IGJ5IGZpbGVuYW1lIGlmIG5vIG90aGVy IGNyaXRlcmlhIGF2YWlsYWJsZS4KCiAgICBteSAkYWQgPSAoCiAgICAgICgtZCAiJGZ1bGxuYW1l LyRhIikKICAgICAgPyAnRCcKICAgICAgOiAoZGVmaW5lZCgkZmlsZWluZm97JGFmfSkgPyAnRicg OiAnUicpCiAgICApOwogICAgbXkgJGJkID0gKAogICAgICAoLWQgIiRmdWxsbmFtZS8kYiIpCiAg ICAgID8gJ0QnCiAgICAgIDogKGRlZmluZWQoJGZpbGVpbmZveyRiZn0pID8gJ0YnIDogJ1InKQog ICAgKTsKICAgIChteSAkYyA9ICRhKSA9fiBzfC4qL3x8OwogICAgKG15ICRkID0gJGIpID1+IHN8 LiovfHw7CgogICAgbXkgKCRsLCAkcikgPSAoIiRhZCRjIiwgIiRiZCRkIik7CiAgICAkY29tcCA9 ICRpbnB1dHtpZ25vcmVjYXNlfSA/ICh1YygkbCkgY21wIHVjKCRyKSkgOiAoJGwgY21wICRyKTsK CiAgICAjIFBhcmVudCBkaXIgaXMgYWx3YXlzIGZpcnN0LCB0aGVuIEF0dGljLgogICAgaWYgKCRj b21wICE9IDApIHsKICAgICAgaWYgKCRsIGVxICdELi4nKSB7CiAgICAgICAgJGNvbXAgPSAtMTsK ICAgICAgfSBlbHNpZiAoJHIgZXEgJ0QuLicpIHsKICAgICAgICAkY29tcCA9IDE7CiAgICAgIH0g ZWxzaWYgKCRsIGVxICdEQXR0aWMnKSB7CiAgICAgICAgJGNvbXAgPSAtMTsKICAgICAgfSBlbHNp ZiAoJHIgZXEgJ0RBdHRpYycpIHsKICAgICAgICAkY29tcCA9IDE7CiAgICAgIH0KICAgIH0KICB9 CiAgcmV0dXJuICRjb21wOwp9CgojCiMgUmV0dXJucyBhIFVSTCB0byBkb3dubG9hZCB0aGUgc2Vs ZWN0ZWQgcmV2aXNpb24uCiMgRXhwZWN0cyB0aGUgcGFzc2VkIGluIFVSTCB0byBiZSBVUkkgZXNj YXBlZCwgcmVsYXRpdmUsIGFuZCB3aXRob3V0IGEgcXVlcnkKIyBzdHJpbmcuCiMKc3ViIGRvd25s b2FkX3VybCgkJDskKQp7CiAgbXkgKCR1cmwsICRyZXZpc2lvbiwgJG1pbWV0eXBlKSA9IEBfOwog IG15IEBkb3RzID0gJHJldmlzaW9uID1+IC9cLi9nOwogICRyZXZpc2lvbiA9fiBzL1xiMFwuKD89 XGQrJCkvLyBpZiAoc2NhbGFyKEBkb3RzKSAmIDEpOwoKICBpZiAoIWRlZmluZWQoJG1pbWV0eXBl KSB8fCAkbWltZXR5cGUgIX4gQ1ZTV0VCTUFSS1VQKSB7CiAgICBteSAkcGF0aCA9ICR3aGVyZTsK ICAgICRwYXRoID1+IHN8W14vXSskfHw7CiAgICAkdXJsID0gIiRzY3JpcHRuYW1lLyRDaGVja291 dE1hZ2ljLyRwYXRoJHVybCI7CiAgfQogICR1cmwgLj0gJz9yZXY9JyAuIHVyaV9lc2NhcGUoJHJl dmlzaW9uKTsKICAkdXJsIC49ICc7Y29udGVudC10eXBlPScgLiB1cmlfZXNjYXBlKCRtaW1ldHlw ZSkgaWYgJG1pbWV0eXBlOwoKICByZXR1cm4gJHVybDsKfQoKIwojIFJldHVybnMgYSBsaW5rIHRv IGRvd25sb2FkIHRoZSBzZWxlY3RlZCByZXZpc2lvbi4KIyBFeHBlY3RzIHRoZSBwYXNzZWQgaW4g VVJMIHRvIGJlIFVSSSBlc2NhcGVkLCByZWxhdGl2ZSwKIyBhbmQgd2l0aG91dCBhIHF1ZXJ5IHN0 cmluZy4KIwpzdWIgZG93bmxvYWRfbGluaygkJCQ7JCkKewogIG15ICgkdXJsLCAkcmV2aXNpb24s ICR0ZXh0bGluaywgJG1pbWV0eXBlKSA9IEBfOwogIHJldHVybiBzcHJpbnRmKCc8YSBocmVmPSIl cyIgY2xhc3M9ImRvd25sb2FkLWxpbmsiPiVzPC9hPicsCiAgICAgICAgICAgICAgICAgZG93bmxv YWRfdXJsKCR1cmwsICRyZXZpc2lvbiwgJG1pbWV0eXBlKSAuICRiYXJlcXVlcnksCiAgICAgICAg ICAgICAgICAgaHRtbHF1b3RlKCR0ZXh0bGluaykpOwp9CgojCiMgUmV0dXJucyBhIFVSTCB0byBk aXNwbGF5IHRoZSBzZWxlY3RlZCByZXZpc2lvbi4KIyBFeHBlY3RzIHRoZSBwYXNzZWQgaW4gVVJM IHRvIGJlIFVSSSBlc2NhcGVkLCBhbmQgd2l0aG91dCBhIHF1ZXJ5IHN0cmluZy4KIwpzdWIgZGlz cGxheV91cmwoJCQ7JCkKewogIG15ICgkdXJsLCAkcmV2aXNpb24sICRtaW1ldHlwZSkgPSBAXzsK ICAkdXJsIC49ICc/cmV2PScgLiB1cmlfZXNjYXBlKCRyZXZpc2lvbik7CiAgJHVybCAuPSAnO2Nv bnRlbnQtdHlwZT0nIC4gdXJpX2VzY2FwZSgkbWltZXR5cGUpIGlmICRtaW1ldHlwZTsKICByZXR1 cm4gJHVybDsKfQoKIwojIFJldHVybnMgYSBsaW5rIHRvIGRpc3BsYXkgdGhlIHNlbGVjdGVkIHJl dmlzaW9uLgojIEV4cGVjdHMgdGhlIHBhc3NlZCBpbiBVUkwgdG8gYmUgVVJJIGVzY2FwZWQsIGFu ZCB3aXRob3V0IGEgcXVlcnkgc3RyaW5nLgojCnN1YiBkaXNwbGF5X2xpbmsoJCQ7JCQpCnsKICBt eSAoJHVybCwgJHJldmlzaW9uLCAkdGV4dGxpbmssICRtdHlwZSkgPSBAXzsKICAkdGV4dGxpbmsg PSAkcmV2aXNpb24gdW5sZXNzIGRlZmluZWQoJHRleHRsaW5rKTsKICByZXR1cm4gc3ByaW50Zign PGEgaHJlZj0iJXMiIGNsYXNzPSJkaXNwbGF5LWxpbmsiPiVzPC9hPicsCiAgICAgICAgICAgICAg ICAgZGlzcGxheV91cmwoJHVybCwgJHJldmlzaW9uLCAkbXR5cGUpIC4gJGJhcmVxdWVyeSwKICAg ICAgICAgICAgICAgICBodG1scXVvdGUoJHRleHRsaW5rKSk7Cn0KCiMKIyBFeHBlY3RzIHRoZSBw YXNzZWQgaW4gVVJMIHRvIGJlIFVSSSBlc2NhcGVkLCBhbmQgd2l0aG91dCBhIHF1ZXJ5IHN0cmlu Zy4KIyBUaGUgcGFzc2VkIGluIGxpbmsgdGV4dCBzaG91bGQgYmUgYWxyZWFkeSBIVE1MIGVzY2Fw ZWQgYXMgYXBwcm9wcmlhdGUuCiMKc3ViIGdyYXBoX2xpbmsoJDskKQp7CiAgbXkgKCR1cmwsICR0 ZXh0KSA9IEBfOwogICR0ZXh0IHx8PSAkZ3JhcGhpY29uOwogIHJldHVybiBzcHJpbnRmKCc8YSBo cmVmPSIlcz9ncmFwaD0xJXMiPiVzPC9hPicsICR1cmwsICRiYXJlcXVlcnksICR0ZXh0KTsKfQoK IwojIFJldHVybnMgYSBsaW5rIHRvIENWU0hpc3RvcnkgZm9yIHRoZSBnaXZlbiBkaXJlY3Rvcnkg YW5kIGZpbGVuYW1lLgojCnN1YiBoaXN0b3J5X2xpbmsoJCQ7JCkKewogIG15ICgkZGlyLCAkZmls ZSwgJHRleHQpID0gQF87CiAgJGRpciAgfHw9ICcnOwogICRmaWxlIHx8PSAnJzsKICAkdGV4dCB8 fD0gJ0hpc3RvcnknOwogIHJldHVybiAmbGluaygkdGV4dCwKICAgICAgICAgICAgICAgc3ByaW50 ZignJXM/Y3Zzcm9vdD0lcztkc2VhcmNoPSVzO2ZzZWFyY2g9JXM7bGltaXQ9MScsCiAgICAgICAg ICAgICAgICAgICAgICAgJGN2c2hpc3RvcnlfdXJsLCB1cmlfZXNjYXBlKCRpbnB1dHtjdnNyb290 fSB8fCAnJyksCiAgICAgICAgICAgICAgICAgICAgICAgdXJpX2VzY2FwZSgkZGlyKSwgdXJpX2Vz Y2FwZSgkZmlsZSkpKTsKfQoKIyBSZXR1cm5zIGEgUXVlcnkgc3RyaW5nIHdpdGggdGhlCiMgc3Bl Y2lmaWVkIHBhcmFtZXRlciB0b2dnbGVkCnN1YiB0b2dnbGVRdWVyeSgkOyQpCnsKICBteSAoJHRv Z2dsZSwgJHZhbHVlKSA9IEBfOwoKICBteSAldmFycyA9ICVpbnB1dDsKCiAgaWYgKGRlZmluZWQo JHZhbHVlKSkgewogICAgJHZhcnN7JHRvZ2dsZX0gPSAkdmFsdWU7CiAgfSBlbHNlIHsKICAgICR2 YXJzeyR0b2dnbGV9ID0gJHZhcnN7JHRvZ2dsZX0gPyAwIDogMTsKICB9CgogICMgQnVpbGQgYSBu ZXcgcXVlcnkgb2Ygbm9uLWRlZmF1bHQgcGFyYW1lbnRlcnMKICBteSAkbmV3cXVlcnkgPSAiIjsK ICBmb3JlYWNoIG15ICR2YXIgKEBzdGlja3l2YXJzKSB7CiAgICBteSAoJHZhbHVlKSAgID0gZGVm aW5lZCgkdmFyc3skdmFyfSkgICAgICAgICA/ICR2YXJzeyR2YXJ9ICAgICAgICAgOiAiIjsKICAg IG15ICgkZGVmYXVsdCkgPSBkZWZpbmVkKCRERUZBVUxUVkFMVUV7JHZhcn0pID8gJERFRkFVTFRW QUxVRXskdmFyfSA6ICIiOwoKICAgIGlmICgkdmFsdWUgbmUgJGRlZmF1bHQpIHsKICAgICAgJG5l d3F1ZXJ5IC49ICc7JyBpZiAoJG5ld3F1ZXJ5IG5lICIiKTsKICAgICAgJG5ld3F1ZXJ5IC49IHVy aV9lc2NhcGUoJHZhcikgLiAnPScgLiB1cmlfZXNjYXBlKCR2YWx1ZSk7CiAgICB9CiAgfQoKICBp ZiAoJG5ld3F1ZXJ5KSB7CiAgICByZXR1cm4gJz8nIC4gJG5ld3F1ZXJ5OwogIH0KICByZXR1cm4g IiI7Cn0KCnN1YiBodG1scXVvdGUoJCkKewogIGxvY2FsICgkXykgPSBAXzsKICAjIFNwZWNpYWwg Q2hhcmFjdGVyczsgUkZDIDE4NjYKICBzLyYvJmFtcDsvZzsKICBzL1wiLyZxdW90Oy9nOwogIHMv PC8mbHQ7L2c7CiAgcy8+LyZndDsvZzsKICByZXR1cm4gJF87Cn0KCnN1YiBodG1sdW5xdW90ZSgk KQp7CiAgbG9jYWwgKCRfKSA9IEBfOwogICMgU3BlY2lhbCBDaGFyYWN0ZXJzOyBSRkMgMTg2Ngog IHMvJnF1b3Q7L1wiL2c7CiAgcy8mbHQ7LzwvZzsKICBzLyZndDsvPi9nOwogIHMvJmFtcDsvJi9n OwogIHJldHVybiAkXzsKfQoKc3ViIHVyaV9lc2NhcGVfcGF0aCgkKQp7CiAgcmV0dXJuIGpvaW4o Jy8nLCBtYXAodXJpX2VzY2FwZSgkXyksIHNwbGl0KG18Lyt8LCBzaGlmdCwgLTEpKSk7Cn0KCnN1 YiBodHRwX2hlYWRlcig7JCQpCnsKICBteSAoJGNvbnRlbnRfdHlwZSwgJG1vZGRhdGUpID0gQF87 CiAgJGNvbnRlbnRfdHlwZSB8fD0gJ3RleHQvaHRtbCc7CgogICRjb250ZW50X3R5cGUgLj0gIjsg Y2hhcnNldD0kY2hhcnNldCIKICAgIGlmICgkY2hhcnNldCAmJiAkY29udGVudF90eXBlID1+IG0s XnRleHQvLCk7CgogICMgTm90ZSB0aGF0IGluIHRoZSBmb2xsb3dpbmcsIHdlIGV4cGxpY2l0bHkg am9pbigpIGFuZCBjb25jYXRlbmF0ZSB0aGUKICAjIGhlYWRlcnMgaW5zdGVhZCBvZiBwcmludGlu ZyB0aGVtIGFzIGFuIGFycmF5LiAgVGhpcyBpcyBiZWNhdXNlIHNvbWUKICAjIHN5c3RlbXMsIGVn LiBlYXJseSB2ZXJzaW9ucyBvZiBtb2RfcGVybCAyIGRvbid0IHF1aXRlIGdldCBpdCBpZiB0aGUK ICAjIGxhc3QgXHJcblxyXG4gaXNuJ3QgaW5jbHVkZWQgaW4gdGhlIGxhc3QgInBheWxvYWQiIGhl YWRlciBwcmludCgpLgoKICBteSBAaGVhZGVycyA9ICgpOwogICMgVE9ETzogY3RpbWUoMykgZnJv bSBzY2FsYXIgZ210aW1lKCkgaXNuJ3QgSFRUUCBjb21wbGlhbnQsIHNlZSBIVFRQOjpEYXRlLgog IHB1c2goQGhlYWRlcnMsICdMYXN0LU1vZGlmaWVkOiAnIC4gc2NhbGFyIGdtdGltZSgkbW9kZGF0 ZSkgLiAnIEdNVCcpCiAgICBpZiAkbW9kZGF0ZTsKICBwdXNoKEBoZWFkZXJzLCAnQ29udGVudC1U eXBlOiAnIC4gJGNvbnRlbnRfdHlwZSk7CgogIGlmICgkYWxsb3dfY29tcHJlc3MgJiYgJG1heWNv bXByZXNzKSB7CiAgICBpZiAoSEFTX1pMSUIKICAgICAgICB8fCAoZGVmaW5lZCgkQ01Ee2d6aXB9 KSAmJiBvcGVuKEdaSVAsICJ8ICRDTUR7Z3ppcH0gLTEgLWMiKSkpCiAgICB7CgogICAgICBwdXNo KEBoZWFkZXJzLCAnQ29udGVudC1FbmNvZGluZzogeC1nemlwJyk7CiAgICAgIHB1c2goQGhlYWRl cnMsICdWYXJ5OiBBY2NlcHQtRW5jb2RpbmcnKTsgICAgICMgUkZDIDI2MTYsIDE0LjQ0CiAgICAg IHByaW50IGpvaW4oIlxyXG4iLCBAaGVhZGVycykgLiAiXHJcblxyXG4iOwoKICAgICAgJHwgPSAx OwogICAgICAkfCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEZs dXNoIGhlYWRlciBvdXRwdXQuCgogICAgICB0aWUoKkdaSVAsIF9fUEFDS0FHRV9fLCBcKlNURE9V VCkgaWYgSEFTX1pMSUI7CiAgICAgIHNlbGVjdChHWklQKTsKICAgICAgJGd6aXBfb3BlbiA9IDE7 CgogICAgfSBlbHNlIHsKCiAgICAgIHByaW50IGpvaW4oIlxyXG4iLCBAaGVhZGVycykgLiAiXHJc blxyXG4iOwogICAgICBwcmludGYKICAgICAgICAnPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogc21h bGxlciI+VW5hYmxlIHRvIGZpbmQgZ3ppcCBiaW5hcnkgaW4gdGhlIDxiPiRjb21tYW5kX3BhdGg8 L2I+ICg8Y29kZT4lczwvY29kZT4pIHRvIGNvbXByZXNzIG91dHB1dDwvc3Bhbj48YnIgLz4nLAog ICAgICAgICAgaHRtbHF1b3RlKGpvaW4oJzonLCBAY29tbWFuZF9wYXRoKSk7CiAgICB9CgogIH0g ZWxzZSB7CiAgICBwcmludCBqb2luKCJcclxuIiwgQGhlYWRlcnMpIC4gIlxyXG5cclxuIjsKICB9 Cn0KCgpzdWIgaHRtbF9oZWFkZXIoJDskKQp7CiAgbXkgKCR0aXRsZSwgJG1vZGRhdGUpID0gQF87 CiAgJHRpdGxlICA9IGh0bWxxdW90ZSgkdGl0bGUpOwogIG15ICRsICAgPSAkbG9nbyB8fCAnJzsK ICBteSAkY3NzID0gJENTUyB8fCAnJzsKICBodHRwX2hlYWRlcigndGV4dC9odG1sJywgJG1vZGRh dGUpOwogIHByaW50IDw8RU9IOwokSFRNTF9ET0NUWVBFCjxodG1sPgo8aGVhZD4KPHRpdGxlPiR0 aXRsZTwvdGl0bGU+CiRIVE1MX01FVEEkY3NzPC9oZWFkPgo8Ym9keT4KJGwgPGgxPiR0aXRsZTwv aDE+CkVPSAp9CgpzdWIgaHRtbF9mb290ZXIoKQp7CiAgcHJpbnQgIjxociAvPlxuPGFkZHJlc3M+ JGFkZHJlc3M8L2FkZHJlc3M+XG4iIGlmICRhZGRyZXNzOwogIHByaW50ICI8L2JvZHk+XG48L2h0 bWw+XG4iOwp9CgpzdWIgbGlua190YWdzKCQpCnsKICBteSAoJHRhZ3MpID0gQF87CgogIChteSAk ZmlsZW5hbWUgPSAkd2hlcmUpID1+IHN8Xi4qL3x8OwogIG15ICRmaWxldXJsID0gJy4vJyAuIHVy aV9lc2NhcGUoJGZpbGVuYW1lKTsKCiAgbXkgJHJldCA9ICIiOwogIGZvcmVhY2ggbXkgJHN5bSAo c3BsaXQoIiwgIiwgJHRhZ3MpKSB7CiAgICAkcmV0IC49ICIsXG4iIGlmICgkcmV0IG5lICIiKTsK ICAgICRyZXQgLj0gJmxpbmsoaHRtbHF1b3RlKCRzeW0pLAogICAgICAgICAgICAgICAgICAkZmls ZXVybCAuIHRvZ2dsZVF1ZXJ5KCdvbmx5X3dpdGhfdGFnJywgJHN5bSkpOwogIH0KICByZXR1cm4g JHJldDsKfQoKCiMKIyBTZWUgaWYgYSBmaWxlL2RpciBpcyBsaXN0ZWQgaW4gdGhlIGNvbmZpZyBm aWxlJ3MgQEZvcmJpZGRlbkZpbGVzIGxpc3QuCiMgVGFrZXMgYSBmdWxsIGZpbGUgc3lzdGVtIHBh dGggb3Igb25lIHJlbGF0aXZlIHRvICRjdnNyb290LCBhbmQgc3RyaXBzIHRoZQojIHRyYWlsaW5n ICIsdiIgaWYgcHJlc2VudCwgdGhlbiBjb21wYXJlcy4gIFJldHVybnMgMSBpZiBmb3JiaWRkZW4s IGVsc2UgMC4KIwpzdWIgZm9yYmlkZGVuKCQpCnsKICAobXkgJHBhdGggPSBjYW5vbnBhdGgoc2hp ZnQpKSA9fiBzLyx2JC8vOwogICRwYXRoID1+IHN8XiRjdnNyb290Lyt8fDsKICBmb3IgbXkgJGZv cmJpZGRlbl9yZSAoQEZvcmJpZGRlbkZpbGVzKSB7CiAgICByZXR1cm4gMSBpZiAoJHBhdGggPX4g JGZvcmJpZGRlbl9yZSk7CiAgfQogIHJldHVybiAwOwp9CgoKIwojIFN0YXJ0cyBhIHByb2Nlc3Mg dXNpbmcgSVBDOjpSdW4uICBBbGwgYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8KIyBJUEM6OlJ1bjo6 c3RhcnQoKSBhcy1pcy4gIFJldHVybnMgYW4gYXJyYXkgKCRoYXJuZXNzLCAkZXJyb3IpIHdoZXJl CiMgJGhhcm5lc3MgaXMgZnJvbSBJUEM6OlJ1biBpZiBzdGFydCgpIHN1Y2NlZWRzLCB1bmRlZiBv dGhlcndpc2UuICBJbiBjYXNlCiMgb2YgYW4gZXJyb3IsICRlcnJvciBjb250YWlucyB0aGUgZXJy b3IgbWVzc2FnZS4KIwpzdWIgc3RhcnRwcm9jKEApCnsKICBteSAkaCA9IG15ICRlcnIgPSB1bmRl ZjsKICBldmFsIHsKICAgIGxvY2FsICRTSUd7X19ESUVfX307CiAgICAkaCA9IElQQzo6UnVuOjpz dGFydChAXykgb3IgZGllKCJyZXR1cm4gY29kZTogJD8iKTsKICB9OwogIGlmICgkQCkgewogICAg JGgtPmZpbmlzaCgpIGlmICRoOwogICAgJGggPSB1bmRlZjsKICAgICRlcnIgPSAiJ0B7JF9bMF19 JyBmYWlsZWQ6ICRAIjsKICB9CiAgcmV0dXJuICgkaCwgJGVycik7Cn0KCiMKIyBSdW5zIGEgcHJv Y2VzcyB1c2luZyBJUEM6OlJ1bi4gIEFsbCBhcmd1bWVudHMgYXJlIHBhc3NlZCB0bwojIElQQzo6 UnVuOjpydW4oKSBhcy1pcy4gIFJldHVybnMgYW4gYXJyYXkgKCRleGl0Y29kZSwgJGVycm9ybXNn KS4KIwpzdWIgcnVucHJvYyhAKQp7CiAgZXZhbCB7CiAgICBsb2NhbCAkU0lHe19fRElFX199Owog ICAgSVBDOjpSdW46OnJ1bihAXyk7CiAgfTsKICBteSAkZXhpdGNvZGUgPSAkPyA+PiA4OwogIG15 ICRlcnJvcm1zZyAgPSB1bmRlZjsKICBpZiAoJEApIHsKICAgICRleGl0Y29kZSB8fD0gLTE7CiAg ICAkZXJyb3Jtc2cgPSAiJ0B7JF9bMF19JyBmYWlsZWQ6ICRAIjsKICB9CiAgcmV0dXJuICgkZXhp dGNvZGUsICRlcnJvcm1zZyk7Cn0KCiMKIyBDaGVjayBvdXQgYSBmaWxlIHRvIGEgdGVtcG9yYXJ5 IGZpbGUuCiMKc3ViIGNoZWNrb3V0X3RvX3RlbXAoJCQkKQp7CiAgbXkgKCRjdnNyb290LCAkY3Zz bmFtZSwgJHJldikgPSBAXzsKCiAgIyBQaXBlIGdpdmVuIGN2cyBmaWxlIGludG8gYSB0ZW1wb3Jh cnkgcGxhY2UuCiAgbXkgKCR0ZW1wX2ZoLCAkdGVtcF9mbikgPSB0ZW1wZmlsZSgnLmN2c3dlYi5Y WFhYWFhYWCcsIERJUiA9PiB0bXBkaXIoKSk7CgogIG15IEBjbWQgPSAoJENNRHtjdnN9LCBAY3Zz X29wdGlvbnMsICctUWQnLCAkY3Zzcm9vdCwKICAgICAgICAgICAgICdjbycsICctcCcsICItciRy ZXYiLCAkY3ZzbmFtZSk7CgogIGxvY2FsICgqRElGRl9PVVQpOwogIG15ICgkaCwgJGVycikgPSBz dGFydHByb2MoXEBjbWQsIFwiIiwgJz5waXBlJywgXCpESUZGX09VVCk7CiAgaWYgKCRoKSB7CiAg ICBsb2NhbCAkLyA9IHVuZGVmOwogICAgcHJpbnQgJHRlbXBfZmggPERJRkZfT1VUPjsKICAgICRo LT5maW5pc2goKTsKICAgIGNsb3NlKCR0ZW1wX2ZoKTsKICB9IGVsc2UgewogICAgY2xvc2UoJHRl bXBfZmgpOwogICAgdW5saW5rKCR0ZW1wX2ZuKTsKICAgIGZhdGFsKCc1MDAgSW50ZXJuYWwgRXJy b3InLAogICAgICAgICAgJ0NoZWNrb3V0IGZhaWx1cmUgKGV4aXQgc3RhdHVzICVzKSwgb3V0cHV0 OiA8cHJlPiVzPC9wcmU+JywKICAgICAgICAgICQ/ID4+IDggfHwgLTEsICRlcnIpOwogIH0KCiAg cmV0dXJuICR0ZW1wX2ZuOwp9CgojCiMgQ2xvc2UgdGhlIEdaSVAgaGFuZGxlLCBhbmQgcmVtb3Zl IHRoZSB0aWUuCiMKc3ViIGd6aXBjbG9zZQp7CiAgaWYgKCRnemlwX29wZW4pIHsKICAgIHNlbGVj dChTVERPVVQpOwogICAgY2xvc2UoR1pJUCk7CiAgICB1bnRpZSAqR1pJUDsKICAgICRnemlwX29w ZW4gPSAwOwogIH0KfQoKIyBpbXBsZW1lbnQgYSBnemlwcGVkIGZpbGUgaGFuZGxlIHZpYSB0aGUg Q29tcHJlc3M6WmxpYiBjb21wcmVzc2lvbgojIGxpYnJhcnkuCgpzdWIgTUFHSUMxKCkgeyAweDFm IH0Kc3ViIE1BR0lDMigpIHsgMHg4YiB9CnN1YiBPU0NPREUoKSB7IDMgfQoKc3ViIFRJRUhBTkRM RQp7CiAgbXkgKCRjbGFzcywgJG91dCkgPSBAXzsKICBteSAoJGQpID0gQ29tcHJlc3M6OlpsaWI6 OmRlZmxhdGVJbml0KAogICAgLUxldmVsICAgICAgPT4gQ29tcHJlc3M6OlpsaWI6OlpfQkVTVF9D T01QUkVTU0lPTigpLAogICAgLVdpbmRvd0JpdHMgPT4gLUNvbXByZXNzOjpabGliOjpNQVhfV0JJ VFMoKQogICAgKQogICAgb3IgcmV0dXJuIHVuZGVmOwogIG15ICgkbykgPSB7IGhhbmRsZSA9PiAk b3V0LAogICAgICAgICAgICAgIGRoICAgICA9PiAkZCwKICAgICAgICAgICAgICBjcmMgICAgPT4g MCwKICAgICAgICAgICAgICBsZW4gICAgPT4gMCwKICAgICAgICAgICAgfTsKICBteSAoJGhlYWRl cikgPSBwYWNrKCJjMTAiLAogICAgICAgICAgICAgICAgICAgICAgTUFHSUMxLCBNQUdJQzIsIENv bXByZXNzOjpabGliOjpaX0RFRkxBVEVEKCksCiAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAw LCAwLCAwLCAwLCBPU0NPREUpOwogIHByaW50IHskby0+e2hhbmRsZX19ICRoZWFkZXI7CiAgcmV0 dXJuIGJsZXNzKCRvLCAkY2xhc3MpOwp9CgpzdWIgUFJJTlQKewogIG15ICgkbykgICA9IHNoaWZ0 OwogIG15ICgkYnVmKSA9IGpvaW4gKGRlZmluZWQoJCwpID8gJCwgOiAiIiwgQF8pOwogIG15ICgk bGVuKSA9IGxlbmd0aCgkYnVmKTsKICBteSAoJGNvbXByZXNzZWQsICRzdGF0dXMpID0gJG8tPntk aH0tPmRlZmxhdGUoJGJ1Zik7CiAgcHJpbnQgeyRvLT57aGFuZGxlfX0gJGNvbXByZXNzZWQgaWYg ZGVmaW5lZCgkY29tcHJlc3NlZCk7CiAgJG8tPntjcmN9ID0gQ29tcHJlc3M6OlpsaWI6OmNyYzMy KCRidWYsICRvLT57Y3JjfSk7CiAgJG8tPntsZW59ICs9ICRsZW47CiAgcmV0dXJuICRsZW47Cn0K CnN1YiBQUklOVEYKewogIG15ICgkbykgICA9IHNoaWZ0OwogIG15ICgkZm10KSA9IHNoaWZ0Owog IG15ICgkYnVmKSA9IHNwcmludGYoJGZtdCwgQF8pOwogIG15ICgkbGVuKSA9IGxlbmd0aCgkYnVm KTsKICBteSAoJGNvbXByZXNzZWQsICRzdGF0dXMpID0gJG8tPntkaH0tPmRlZmxhdGUoJGJ1Zik7 CiAgcHJpbnQgeyRvLT57aGFuZGxlfX0gJGNvbXByZXNzZWQgaWYgZGVmaW5lZCgkY29tcHJlc3Nl ZCk7CiAgJG8tPntjcmN9ID0gQ29tcHJlc3M6OlpsaWI6OmNyYzMyKCRidWYsICRvLT57Y3JjfSk7 CiAgJG8tPntsZW59ICs9ICRsZW47CiAgcmV0dXJuICRsZW47Cn0KCnN1YiBXUklURQp7CiAgbXkg KCRvLCAkYnVmLCAkbGVuLCAkb2ZmKSA9IEBfOwogIG15ICgkY29tcHJlc3NlZCwgJHN0YXR1cykg PSAkby0+e2RofS0+ZGVmbGF0ZShzdWJzdHIoJGJ1ZiwgMCwgJGxlbikpOwogIHByaW50IHskby0+ e2hhbmRsZX19ICRjb21wcmVzc2VkIGlmIGRlZmluZWQoJGNvbXByZXNzZWQpOwogICRvLT57Y3Jj fSA9IENvbXByZXNzOjpabGliOjpjcmMzMihzdWJzdHIoJGJ1ZiwgMCwgJGxlbiksICRvLT57Y3Jj fSk7CiAgJG8tPntsZW59ICs9ICRsZW47CiAgcmV0dXJuICRsZW47Cn0KCnN1YiBDTE9TRQp7CiAg bXkgKCRvKSA9IEBfOwogIHJldHVybiBpZiAhZGVmaW5lZCgkby0+e2RofSk7CiAgbXkgKCRidWYp ID0gJG8tPntkaH0tPmZsdXNoKCk7CiAgJGJ1ZiAuPSBwYWNrKCJWIFYiLCAkby0+e2NyY30sICRv LT57bGVufSk7CiAgcHJpbnQgeyRvLT57aGFuZGxlfX0gJGJ1ZjsKICB1bmRlZiAkby0+e2RofTsK fQoKc3ViIERFU1RST1kKewogIG15ICgkbykgPSBAXzsKICBDTE9TRSgkbyk7Cn0KCiMgTG9jYWwg dmFyaWFibGVzOgojIGluZGVudC10YWJzLW1vZGU6IG5pbAojIGNwZXJsLWluZGVudC1sZXZlbDog MgojIEVuZDoK --001485394218abdf37047657fc8a--