From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christopher Allan Webber Subject: Re: Editing Scheme in the installation image Date: Sun, 08 Jan 2017 19:27:03 -0600 Message-ID: <8737gtf2fs.fsf@dustycloud.org> References: <878tqp3y69.fsf@gnu.org> <675307112.1056847.1483710598047@mail.yahoo.com> <87pojzf5l9.fsf@gnu.org> <87y3ym1od1.fsf@gmail.com> <87inppx1ww.fsf@gnu.org> <1002155229.590601.1483901002681@mail.yahoo.com> <87wpe5qijn.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:56749) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cQOjs-0008TI-1T for guix-devel@gnu.org; Sun, 08 Jan 2017 20:27:09 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cQOjq-0004NV-U1 for guix-devel@gnu.org; Sun, 08 Jan 2017 20:27:08 -0500 In-reply-to: <87wpe5qijn.fsf@gnu.org> List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: "Guix-devel" To: Ludovic =?utf-8?Q?Court=C3=A8s?= Cc: guix-devel , Maxim Cournoyer , Mike Gran --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Ludovic Court=C3=A8s writes: > Mike Gran skribis: > >>>On Sunday, January 8, 2017 2:48 AM, Ludovic Court=C3=A8s wrote: > > [...] > >>>I think it would take more than elisp compilation support to port Emac= s >>>packages to Zile-on-Guile. Essentially we=E2=80=99d need many APIs th= at Emacs >>>provides. >> >> I looked at the current beta of paredit, and I quickly scanned >> the code to look for *emacs* primitives. Below please find a list >> of the primitives that Zile is missing. Note that this isn't the >> missing *elisp* procedures. >> Adding the majority of these is quite straightforward, but, >> some have heretofore been out of scope for Zile. The missing >> categories of concepts are >> - lisp and scheme filling and indentation >> - blinking the cursor or a matching parenthesis >> - handling comments >> - handling what emacs calls "lists" which is moving up and down >> balanced parentheses >> Here's the list. I probably missed a few. > > Woow, thanks for investigating! > > Looks non-trivial. I wonder how much of it could be trimmed by focusin= g > just on the subset of Paredit relating to matching parens. > > Ludo=E2=80=99. I mentioned this earlier in the thread, but I think it got lost... mit-scheme's edwin includes a scheme-based paredit. I haven't tried looking at how much work it would be to port to Zile, but I'm guessing since it's also scheme, it wouldn't be much work. I've extracted it from the latest mit-scheme release and included it. The code is in the public domain. Maybe it can be of use? Note: it might also be possible to pilfer some logic from edwin to "fill in" the missing procedures to make Zile work. --=-=-= Content-Type: application/octet-stream Content-Disposition: inline; filename=paredit.scm Content-Transfer-Encoding: base64 I3wgLSotU2NoZW1lLSotCgpUaGlzIGNvZGUgaXMgd3JpdHRlbiBieSBUYXlsb3IgUi4gQ2FtcGJl bGwgYW5kIHBsYWNlZCBpbiB0aGUgUHVibGljCkRvbWFpbi4gIEFsbCB3YXJyYW50aWVzIGFyZSBk aXNjbGFpbWVkLgoKfCMKCjs7OzsgUGFyZWRpdDogUGFyZW50aGVzaXMtRWRpdGluZyBNaW5vciBN b2RlIChiYXNlZCBvbiBwYXJlZGl0LmVsKQoKKGRlY2xhcmUgKHVzdWFsLWludGVncmF0aW9ucykp CgooZGVmaW5lLWNvbW1hbmQgcGFyZWRpdC1tb2RlCiAgIlRvZ2dsZSBwc2V1ZG8tc3RydWN0dXJh bCBlZGl0aW5nIG9mIExpc3AgY29kZS4KV2l0aCBhIHByZWZpeCBhcmd1bWVudCwgZW5hYmxlIHBh cmVkaXQgbW9kZSBpZiB0aGUgYXJndW1lbnQgaXMKICBwb3NpdGl2ZSwgYW5kIGRpc2FibGUgcGFy ZWRpdCBtb2RlIGlmIG5vdC4iCiAgIlAiCiAgKGxhbWJkYSAoYXJndW1lbnQpCiAgICAobGV0ICgo bW9kZSAocmVmLW1vZGUtb2JqZWN0IHBhcmVkaXQpKSkKICAgICAgKGlmIChpZiBhcmd1bWVudAog ICAgICAgICAgICAgIChwb3NpdGl2ZT8gKGNvbW1hbmQtYXJndW1lbnQtdmFsdWUgYXJndW1lbnQp KQogICAgICAgICAgICAgIChub3QgKGN1cnJlbnQtbWlub3ItbW9kZT8gbW9kZSkpKQogICAgICAg ICAgKGVuYWJsZS1jdXJyZW50LW1pbm9yLW1vZGUhIG1vZGUpCiAgICAgICAgICAoZGlzYWJsZS1j dXJyZW50LW1pbm9yLW1vZGUhIG1vZGUpKSkpKQoKKGRlZmluZS1taW5vci1tb2RlIHBhcmVkaXQg IlBhcmVkaXQiCiAgIk1pbm9yIG1vZGUgZm9yIHBzZXVkby1zdHJ1Y3R1cmFsbHkgZWRpdGluZyBM aXNwIGNvZGUuCgpcXHtwYXJlZGl0fSIpCgooZm9yLWVhY2ggKGxhbWJkYSAoa2V5KQogICAgICAg ICAgICAoZGVmaW5lLWtleSAncGFyZWRpdCAoY2FyIGtleSkgKGNhZHIga2V5KSkpCiAgICAgICAg ICAnKAogICAgICAgICAgICA7OyBJbnNlcnRpb24gY29tbWFuZHMKICAgICAgICAgICAgKCNcKCAg ICAgIHBhcmVkaXQtb3Blbi1saXN0KQogICAgICAgICAgICAoI1wpICAgICAgcGFyZWRpdC1jbG9z ZS1saXN0LWFuZC1uZXdsaW5lKQogICAgICAgICAgICAoI1xNLVwpICAgcGFyZWRpdC1jbG9zZS1s aXN0KQogICAgICAgICAgICAoI1xNLVwiICAgcGFyZWRpdC1jbG9zZS1zdHJpbmctYW5kLW5ld2xp bmUpCiAgICAgICAgICAgICgjXCIgICAgICBwYXJlZGl0LWRvdWJsZXF1b3RlKQogICAgICAgICAg ICAoI1xcICAgICAgcGFyZWRpdC1iYWNrc2xhc2gpCiAgICAgICAgICAgICgjXHJldHVybiBwYXJl ZGl0LW5ld2xpbmUpICA7IFRoaXMgZGVmaWVzIHRoZSBjb252ZW50aW9uLAogICAgICAgICAgICAo I1xDLWogICAgbmV3bGluZSkgICAgICAgICAgOyBidXQgSSBwcmVmZXIgaXQsIGFuZCB5b3UgY2Fu CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGN1c3RvbWl6ZSBpdCB5 b3Vyc2VsZiBhbnl3YXkuCiAgICAgICAgICAgIDs7IEtpbGxpbmcgJiBkZWxldGluZwogICAgICAg ICAgICAoI1xDLWQgICAgcGFyZWRpdC1mb3J3YXJkLWRlbGV0ZSkKICAgICAgICAgICAgKCNccnVi b3V0IHBhcmVkaXQtYmFja3dhcmQtZGVsZXRlKQogICAgICAgICAgICAoI1xDLWsgICAgcGFyZWRp dC1raWxsKQoKICAgICAgICAgICAgOzsgTW92ZW1lbnQgJiBuYXZpZ2F0aW9uCiAgICAgICAgICAg ICgjXEMtTS1mICBwYXJlZGl0LWZvcndhcmQpCiAgICAgICAgICAgICgjXEMtTS1iICBwYXJlZGl0 LWJhY2t3YXJkKQo7OzsgICAgICAgICAoI1xDLU0tdSAgYmFja3dhcmQtdXAtbGlzdCkgOyBUaGVz ZSB0d28gYXJlIGJ1aWx0LWluLgo7OzsgICAgICAgICAoI1xDLU0tZCAgZG93bi1saXN0KQogICAg ICAgICAgICAoI1xDLU0tcCAgYmFja3dhcmQtZG93bi1saXN0KQogICAgICAgICAgICAoI1xDLU0t biAgdXAtbGlzdCkKICAgICAgICAgICAgKCgjXEMtYyAjXEMtTS1sKSBwYXJlZGl0LXJlY2VudHJl LW9uLXNleHApCgogICAgICAgICAgICA7OyBEZXB0aC1jaGFuZ2luZyBjb21tYW5kcwogICAgICAg ICAgICAoI1xNLVwoIHBhcmVkaXQtd3JhcC1zZXhwKQogICAgICAgICAgICAoI1xNLXIgIHBhcmVk aXQtcmFpc2Utc2V4cCkKICAgICAgICAgICAgKCNcTS1zICBwYXJlZGl0LXNwbGljZS1zZXhwKSAg IDsrKyBUaGlzIGNvbmZsaWN0cyB3aXRoIE0tcwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOysrIGZvciBTVEVQLURFRlVOLiAgSG1tbW0uCgogICAgICAgICAgICA7 OyBTcGxpdHRpbmcgYW5kIEpvaW5pbmcKICAgICAgICAgICAgKCNcTS1TIHBhcmVkaXQtc3BsaXQt c2V4cCkKICAgICAgICAgICAgKCNcTS1KIHBhcmVkaXQtam9pbi1zZXhwcykKICAgICAgICAgICAg KSkKDAo7Ozs7IEJhc2ljIEVkaXRpbmcgQ29tbWFuZHMKCihkZWZpbmUtY29tbWFuZCBwYXJlZGl0 LW9wZW4tbGlzdAogICJJbnNlcnQgYSBiYWxhbmNlZCByb3VuZCBicmFja2V0IHBhcmVudGhlc2lz IHBhaXIuCldpdGggYSBwcmVmaXggYXJndW1lbnQgTiwgcHV0IHRoZSBjbG9zaW5nIHJvdW5kIGJy YWNrZXQgYWZ0ZXIgTgogIFMtZXhwcmVzc2lvbnMgZm9yd2FyZC4KSWYgaW4gc3RyaW5nIG9yIGNv bW1lbnQsIGluc2VydHMgYSBzaW5nbGUgb3BlbmluZyByb3VuZCBicmFja2V0LgpJZiBpbiBhIGNo YXJhY3RlciBsaXRlcmFsLCBkb2VzIG5vdGhpbmcuICBUaGlzIHByZXZlbnRzIGFjY2lkZW50YWxs eQogIGNoYW5naW5nIHdoYXQgd2FzIGluIHRoZSBjaGFyYWN0ZXIgbGl0ZXJhbCB0byBhIG1lYW5p bmdmdWwgZGVsaW1pdGVyCiAgdW5pbnRlbnRpb25hbGx5LiIKICAiUCIKICAobGV0ICgob3Blbi1s aXN0CiAgICAgICAgIChsYW1iZGEgKGFyZ3VtZW50KQogICAgICAgICAgIChpbnNlcnQtc2V4cC1w YWlyICNcKCAjXCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgKGNvbW1hbmQtYXJn dW1lbnQtdmFsdWUgYXJndW1lbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAp KSkpKQogICAgKGxhbWJkYSAoYXJndW1lbnQpCiAgICAgIChpZiAoZ3JvdXAtc3RhcnQ/IChjdXJy ZW50LXBvaW50KSkKICAgICAgICAgIChvcGVuLWxpc3QgI2YpCiAgICAgICAgICAobGV0ICgoc3Rh dGUgKGN1cnJlbnQtcGFyc2Utc3RhdGUpKSkKICAgICAgICAgICAgKGNvbmQgKChvciAocGFyc2Ut c3RhdGUtaW4tc3RyaW5nPyBzdGF0ZSkKICAgICAgICAgICAgICAgICAgICAgICAocGFyc2Utc3Rh dGUtaW4tY29tbWVudD8gc3RhdGUpKQogICAgICAgICAgICAgICAgICAgKGluc2VydC1jaGFyICNc KCApKQogICAgICAgICAgICAgICAgICAoKG5vdCAobWFyay1yaWdodC1jaGFyLXF1b3RlZD8gKGN1 cnJlbnQtcG9pbnQpKSkKICAgICAgICAgICAgICAgICAgIChvcGVuLWxpc3QgYXJndW1lbnQpKSkp KSkpKQoKKGRlZmluZS1jb21tYW5kIHBhcmVkaXQtY2xvc2UtbGlzdAogICJNb3ZlIHBhc3QgdGhl IGNsb3NpbmcgZGVsaW1pdGVyIG9mIHRoZSBsaXN0IHRoZSBwb2ludCBpcyBvbi4KRGVsZXRlIGFs bCBleHRyYW5lb3VzIHNwYWNlIGJlZm9yZSB0aGUgY2xvc2luZyBkZWxpbWl0ZXIsIGJ1dCBkbyBu b3QKICBtb3ZlIGl0IHBhc3QgY29tbWVudHMgYmV0d2VlbiBpdCBhbmQgdGhlIHBvaW50LgpJZiBp biBhIHN0cmluZyBvciBjb21tZW50LCBpbnNlcnQgYSBzaW5nbGUgY2xvc2luZyByb3VuZCBicmFj a2V0LgpJZiBpbiBhIGNoYXJhY3RlciBsaXRlcmFsLCBkbyBub3RoaW5nLiAgVGhpcyBwcmV2ZW50 cyBhY2NpZGVudGFsbHkKICBjaGFuZ2luZyB3aGF0IHdhcyBpbiB0aGUgY2hhcmFjdGVyIGxpdGVy YWwgdG8gYSBtZWFuaW5nZnVsIGRlbGltaXRlcgogIHVuaW50ZW50aW9uYWxseS4iCiAgKCkKICAo bGFtYmRhICgpCiAgICAobGV0ICgocG9pbnQgKGN1cnJlbnQtcG9pbnQpKSkKICAgICAgKGlmIChn cm91cC1zdGFydD8gcG9pbnQpCiAgICAgICAgICAoZWRpdG9yLWZhaWx1cmUgIk5vIGxpc3QgdG8g Y2xvc2UgYXQgYnVmZmVyIHN0YXJ0LiIpCiAgICAgICAgICAobGV0ICgoc3RhdGUgKGN1cnJlbnQt cGFyc2Utc3RhdGUpKSkKICAgICAgICAgICAgKGNvbmQgKChvciAocGFyc2Utc3RhdGUtaW4tc3Ry aW5nPyBzdGF0ZSkKICAgICAgICAgICAgICAgICAgICAgICAocGFyc2Utc3RhdGUtaW4tY29tbWVu dD8gc3RhdGUpKQogICAgICAgICAgICAgICAgICAgKGluc2VydC1jaGFyICNcKSApKQogICAgICAg ICAgICAgICAgICAoKG5vdCAobWFyay1yaWdodC1jaGFyLXF1b3RlZD8gcG9pbnQpKQogICAgICAg ICAgICAgICAgICAgKHBhcmVkaXQtbW92ZS1wYXN0LWNsb3NlLWFuZC1yZWluZGVudCBwb2ludCBz dGF0ZSkKICAgICAgICAgICAgICAgICAgIChmbGFzaC1zZXhwLW1hdGNoKSkpKSkpKSkKCihkZWZp bmUtY29tbWFuZCBwYXJlZGl0LWNsb3NlLWxpc3QtYW5kLW5ld2xpbmUKICAiTW92ZSBwYXN0IGNs b3NlIG9mIHRoZSBjdXJyZW50IGxpc3QsIGluc2VydCBhIG5ld2xpbmUsICYgaW5kZW50LgpJZiBp biBhIHN0cmluZyBvciBjb21tZW50LCBpbnNlcnQgYSBzaW5nbGUgY2xvc2luZyByb3VuZCBicmFj a2V0LgpJZiBpbiBhIGNoYXJhY3RlciBsaXRlcmFsLCBkbyBub3RoaW5nLiAgVGhpcyBwcmV2ZW50 cyBhY2NpZGVudGFsbHkKICBjaGFuZ2luZyB3aGF0IHdhcyBpbiB0aGUgY2hhcmFjdGVyIGxpdGVy YWwgdG8gYSBtZWFuaW5nZnVsIGRlbGltaXRlcgogIHVuaW50ZW50aW9uYWxseS4iCiAgKCkKICAo bGFtYmRhICgpCiAgICAobGV0ICgocG9pbnQgKGN1cnJlbnQtcG9pbnQpKSkKICAgICAgKGlmIChn cm91cC1zdGFydD8gcG9pbnQpCiAgICAgICAgICAoZWRpdG9yLWZhaWx1cmUgIk5vIGxpc3QgdG8g Y2xvc2UgYXQgYnVmZmVyIHN0YXJ0LiIpCiAgICAgICAgICAobGV0ICgoc3RhdGUgKGN1cnJlbnQt cGFyc2Utc3RhdGUpKSkKICAgICAgICAgICAgKGNvbmQgKChvciAocGFyc2Utc3RhdGUtaW4tc3Ry aW5nPyBzdGF0ZSkKICAgICAgICAgICAgICAgICAgICAgICAocGFyc2Utc3RhdGUtaW4tY29tbWVu dD8gc3RhdGUpKQogICAgICAgICAgICAgICAgICAgKGluc2VydC1jaGFyICNcKSApKQogICAgICAg ICAgICAgICAgICAoZWxzZQogICAgICAgICAgICAgICAgICAgKHBhcmVkaXQtbW92ZS1wYXN0LWNs b3NlLWFuZC1yZWluZGVudAogICAgICAgICAgICAgICAgICAgIChpZiAobWFyay1yaWdodC1jaGFy LXF1b3RlZD8gcG9pbnQpCiAgICAgICAgICAgICAgICAgICAgICAgIChtYXJrMSsgcG9pbnQpCiAg ICAgICAgICAgICAgICAgICAgICAgIHBvaW50KQogICAgICAgICAgICAgICAgICAgIHN0YXRlKQog ICAgICAgICAgICAgICAgICAgKGluc2VydC1uZXdsaW5lLXByZXNlcnZpbmctY29tbWVudCkKICAg ICAgICAgICAgICAgICAgIChsaXNwLWluZGVudC1saW5lLWFuZC1zZXhwKQogICAgICAgICAgICAg ICAgICAgKGZsYXNoLXNleHAtbWF0Y2ggI3QpKSkpKSkpKQoMCihkZWZpbmUgKHBhcmVkaXQtbW92 ZS1wYXN0LWNsb3NlLWFuZC1yZWluZGVudCBtYXJrIHN0YXRlKQogIChjb25kICgoZm9yd2FyZC11 cC1vbmUtbGlzdCBtYXJrKQogICAgICAgICA9PiAobGFtYmRhIChhZnRlci1jbG9zZSkKICAgICAg ICAgICAgICAodW5kby1yZWNvcmQtcG9pbnQhKQogICAgICAgICAgICAgIChzZXQtY3VycmVudC1w b2ludCEgYWZ0ZXItY2xvc2UpCiAgICAgICAgICAgICAgKGxldCBsb29wICgoYmVmb3JlLWNsb3Nl IChtYXJrLTErIGFmdGVyLWNsb3NlKSkpCiAgICAgICAgICAgICAgICAoaWYgKG1hcms9IChob3Jp em9udGFsLXNwYWNlLWVuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUtc3RhcnQg YmVmb3JlLWNsb3NlIDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUtY2xvc2Up CiAgICAgICAgICAgICAgICAgICAgOzsgVGhlIGNsb3NpbmcgZGVsaW1pdGVyIGlzIHRoZSBmaXJz dCB0aGluZyBvbiB0aGUKICAgICAgICAgICAgICAgICAgICA7OyBsaW5lLiAgSWYgdGhlIHByZXZp b3VzIGxpbmUgZW5kcyBpbiBhIGNvbW1lbnQsCiAgICAgICAgICAgICAgICAgICAgOzsgd2Ugc3Rv cCBoZXJlOyBvdGhlcndpc2UsIHdlIGdvIG9uLgogICAgICAgICAgICAgICAgICAgIChsZXQgKChl bmQtb2YtcHJldiAobGluZS1lbmQgYmVmb3JlLWNsb3NlIC0xKSkKICAgICAgICAgICAgICAgICAg ICAgICAgICAobG9jYXRpb24gKHBhcnNlLXN0YXRlLWxvY2F0aW9uIHN0YXRlKSkpCiAgICAgICAg ICAgICAgICAgICAgICAoY29uZCAoKGFuZCAobm90IChtYXJrPD0gZW5kLW9mLXByZXYgbG9jYXRp b24pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcnNlLXN0YXRlLWluLWNv bW1lbnQ/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcnNlLXBhcnRpYWwt c2V4cCBsb2NhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZW5kLW9mLXByZXYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICNmICNmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSkpKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDs7IE5vdGhpbmcgbW9yZSB0byBiZSBkb25lLCBzbyBqdXN0CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOzsgaW5kZW50IHRoZSBsaW5lIHdlJ3JlIG9uICh3aGljaCBoYXMKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7OyB0aGUgY2xvc2luZyBkZWxpbWl0ZXIpLgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChsaXNwLWluZGVudC1saW5lICNmKSkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsg TW9yZSB0byBkZWxldGUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlbGV0ZS1zdHJp bmcgZW5kLW9mLXByZXYgYmVmb3JlLWNsb3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg IChsb29wIGVuZC1vZi1wcmV2KSkpKQogICAgICAgICAgICAgICAgICAgIDs7IFdlJ3ZlIHJlYWNo ZWQgb3VyIGdvYWwsIHRob3VnaCB0aGVyZSBtaWdodCBiZQogICAgICAgICAgICAgICAgICAgIDs7 IHNvbWUgaW5kZW50YXRpb24gYmV0d2VlbiB0aGUgY2xvc2luZyBkZWxpbWl0ZXIKICAgICAgICAg ICAgICAgICAgICA7OyBhbmQgd2hlcmUgd2Ugd2FudCBpdCB0byBiZS4gIFdlIG11c3QgdGFrZSBj YXJlLAogICAgICAgICAgICAgICAgICAgIDs7IHRob3VnaCwgdG8gcHJlc2VydmUgd2hpdGVzcGFj ZSBjaGFyYWN0ZXJzLgogICAgICAgICAgICAgICAgICAgIChsZXQqICgobWFyawogICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGhvcml6b250YWwtc3BhY2Utc3RhcnQgYmVmb3JlLWNsb3NlKSkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVzY2FwZWQKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChhbmQgKG1hcmstcmlnaHQtY2hhci1xdW90ZWQ/IG1hcmspCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChtYXJrLXJpZ2h0LWNoYXIgbWFyaykpKSkKICAgICAgICAgICAg ICAgICAgICAgIChkZWxldGUtaG9yaXpvbnRhbC1zcGFjZSBiZWZvcmUtY2xvc2UpCiAgICAgICAg ICAgICAgICAgICAgICAoaWYgZXNjYXBlZAogICAgICAgICAgICAgICAgICAgICAgICAgIChpbnNl cnQtY2hhciBlc2NhcGVkIG1hcmspKSkpKSkpCiAgICAgICAgKGVsc2UKICAgICAgICAgKGVkaXRv ci1lcnJvciAiTm8gY2xvc2luZyBkZWxpbWl0ZXIgdG8gbW92ZSBvdmVyLiIpKSkpCgwKKGRlZmlu ZS1jb21tYW5kIHBhcmVkaXQtY2xvc2Utc3RyaW5nLWFuZC1uZXdsaW5lCiAgIk1vdmUgdG8gdGhl IGVuZCBvZiB0aGUgc3RyaW5nLCBpbnNlcnQgYSBuZXdsaW5lLCBhbmQgaW5kZW50LgpJZiBub3Qg aW4gYSBzdHJpbmcsIGFjdCBhcyBgcGFyZWRpdC1kb3VibGVxdW90ZScuIgogICgpCiAgKGxhbWJk YSAoKQogICAgKGxldCAoKHN0YXRlIChjdXJyZW50LXBhcnNlLXN0YXRlKSkpCiAgICAgIChpZiAo bm90IChwYXJzZS1zdGF0ZS1pbi1zdHJpbmc/IHN0YXRlKSkKICAgICAgICAgICgocmVmLWNvbW1h bmQgcGFyZWRpdC1kb3VibGVxdW90ZSkpCiAgICAgICAgICAobGV0ICgoYWZ0ZXItc3RyaW5nIChw YXJzZS1zdGF0ZS1lbmQtb2Ytc2V4cCBzdGF0ZSkpKQogICAgICAgICAgICAoc2V0LWN1cnJlbnQt cG9pbnQhIGFmdGVyLXN0cmluZykKICAgICAgICAgICAgKGluc2VydC1uZXdsaW5lKQogICAgICAg ICAgICAobGlzcC1pbmRlbnQtbGluZS1hbmQtc2V4cCkKICAgICAgICAgICAgKGZsYXNoLXNleHAt bWF0Y2ggI2YgYWZ0ZXItc3RyaW5nKSkpKSkpCgooZGVmaW5lLWNvbW1hbmQgcGFyZWRpdC1kb3Vi bGVxdW90ZQogICJJbnNlcnQgYSBwYWlyIG9mIGRvdWJsZS1xdW90ZXMuCkluc2lkZSBhIGNvbW1l bnQsIGluc2VydCBhIGxpdGVyYWwgZG91YmxlLXF1b3RlLgpBdCB0aGUgZW5kIG9mIGEgc3RyaW5n LCBtb3ZlIHBhc3QgdGhlIGNsb3NpbmcgZG91YmxlLXF1b3RlLgpJbiB0aGUgbWlkZGxlIG9mIGEg c3RyaW5nLCBpbnNlcnQgYSBiYWNrc2xhc2gtZXNjYXBlZCBkb3VibGUtcXVvdGUuCklmIGluIGEg Y2hhcmFjdGVyIGxpdGVyYWwsIGRvIG5vdGhpbmcuICBUaGlzIHByZXZlbnRzIGFjY2lkZW50YWxs eQogIGNoYW5naW5nIHdoYXQgd2FzIGluIHRoZSBjaGFyYWN0ZXIgbGl0ZXJhbCB0byBhIG1lYW5p bmdmdWwgZGVsaW1pdGVyCiAgdW5pbnRlbnRpb25hbGx5LiIKICAoKQogIChsYW1iZGEgKCkKICAg IChsZXQgKChzdGF0ZSAoY3VycmVudC1wYXJzZS1zdGF0ZSkpKQogICAgICAoY29uZCAoKHBhcnNl LXN0YXRlLWluLXN0cmluZz8gc3RhdGUpCiAgICAgICAgICAgICAoaWYgKG1hcms9IChtYXJrLTEr IChwYXJzZS1zdGF0ZS1lbmQtb2Ytc2V4cCBzdGF0ZSkpCiAgICAgICAgICAgICAgICAgICAgICAg IChjdXJyZW50LXBvaW50KSkKICAgICAgICAgICAgICAgICA7OyBPbiB0aGUgY2xvc2luZyBxdW90 ZSAtLSBtb3ZlIHBhc3QgaXQgJiBmbGFzaC4KICAgICAgICAgICAgICAgICAoYmVnaW4gKHNldC1j dXJyZW50LXBvaW50ISAobWFyazErIChjdXJyZW50LXBvaW50KSkpCiAgICAgICAgICAgICAgICAg ICAgICAgIChmbGFzaC1zZXhwLW1hdGNoKSkKICAgICAgICAgICAgICAgICA7OyBFbHNld2hlcmUg aW4gYSBzdHJpbmc6IGluc2VydCBlc2NhcGVkLgogICAgICAgICAgICAgICAgIChiZWdpbiAoaW5z ZXJ0LWNoYXIgI1xcICkKICAgICAgICAgICAgICAgICAgICAgICAgKGluc2VydC1jaGFyICNcIikp KSkKICAgICAgICAgICAgKChwYXJzZS1zdGF0ZS1pbi1jb21tZW50PyBzdGF0ZSkKICAgICAgICAg ICAgIChpbnNlcnQtY2hhciAjXCIgKSkKICAgICAgICAgICAgKChub3QgKG1hcmstcmlnaHQtY2hh ci1xdW90ZWQ/IChjdXJyZW50LXBvaW50KSkpCiAgICAgICAgICAgICAoaW5zZXJ0LXNleHAtcGFp ciAjXCIgI1wiIDApKSkpKSkKCihkZWZpbmUtY29tbWFuZCBwYXJlZGl0LWJhY2tzbGFzaAogICJJ bnNlcnQgYSBiYWNrc2xhc2ggZm9sbG93ZWQgYnkgYSBjaGFyYWN0ZXIgdG8gZXNjYXBlLiIKICAo KQogIChsYW1iZGEgKCkKICAgIChsZXQgKChzdGF0ZSAoY3VycmVudC1wYXJzZS1zdGF0ZSkpKQog ICAgICAoaW5zZXJ0LWNoYXIgI1xcICkKICAgICAgKGlmIChub3QgKHBhcnNlLXN0YXRlLWluLWNv bW1lbnQ/IHN0YXRlKSkKICAgICAgICAgIChsZXQgKChjaGFyICNmKSkKICAgICAgICAgICAgKGR5 bmFtaWMtd2luZCAgICAgICAgICAgICAgIDsrKyBXaGF0IGhhcHBlbnMgaWYgdGhpcyBnZXRzCiAg ICAgICAgICAgICAgKGxhbWJkYSAoKSB1bnNwZWNpZmljKSAgICA7KysgdXNlZCBpbiBhIHJlY3Vy c2l2ZSBlZGl0PwogICAgICAgICAgICAgIChsYW1iZGEgKCkKICAgICAgICAgICAgICAgIChzZXQh IGNoYXIgKHByb21wdC1mb3ItY2hhciAiQ2hhcmFjdGVyIHRvIGVzY2FwZSIpKSkKICAgICAgICAg ICAgICAobGFtYmRhICgpCiAgICAgICAgICAgICAgICAoaWYgKGFuZCBjaGFyIChub3QgKGNoYXI9 PyBjaGFyICNccnVib3V0KSkpCiAgICAgICAgICAgICAgICAgICAgKGluc2VydC1jaGFyIGNoYXIp CiAgICAgICAgICAgICAgICAgICAgKGRlbGV0ZS1sZWZ0LWNoYXIpKSkpKSkpKSkKDAooZGVmaW5l LWNvbW1hbmQgcGFyZWRpdC1uZXdsaW5lCiAgIkluc2VydCBhIG5ld2xpbmUgYW5kIGluZGVudC4K VGhpcyBpcyBsaWtlIGBuZXdsaW5lLWFuZC1pbmRlbnQnLCBidXQgaXQgbm90IG9ubHkgaW5kZW50 cyB0aGUgbGluZQogIHRoYXQgdGhlIHBvaW50IGlzIG9uIGJ1dCBhbHNvIHRoZSBTLWV4cHJlc3Np b24gZm9sbG93aW5nIHRoZSBwb2ludCwKICBpZiB0aGVyZSBpcyBvbmUuCk1vdmUgZm9yd2FyZCBv bmUgY2hhcmFjdGVyIGZpcnN0IGlmIG9uIGFuIGVzY2FwZWQgY2hhcmFjdGVyLgpJZiBpbiBhIHN0 cmluZywganVzdCBpbnNlcnQgYSBsaXRlcmFsIG5ld2xpbmUuIgogICgpCiAgKGxhbWJkYSAoKQog ICAgKGxldCAoKHN0YXRlIChjdXJyZW50LXBhcnNlLXN0YXRlKSkpCiAgICAgIChjb25kICgocGFy c2Utc3RhdGUtaW4tc3RyaW5nPyBzdGF0ZSkKICAgICAgICAgICAgIChpbnNlcnQtbmV3bGluZSkp CiAgICAgICAgICAgIChlbHNlCiAgICAgICAgICAgICAobGV0ICgocG9pbnQgKGN1cnJlbnQtcG9p bnQpKSkKICAgICAgICAgICAgICAgKGlmIChhbmQgKG5vdCAocGFyc2Utc3RhdGUtaW4tc3RyaW5n PyBzdGF0ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIChtYXJrLXJpZ2h0LWNoYXItcXVvdGVk PyBwb2ludCkpCiAgICAgICAgICAgICAgICAgICAoc2V0LWN1cnJlbnQtcG9pbnQhIChtYXJrMSsg cG9pbnQpKSkpCiAgICAgICAgICAgICAoZGVsZXRlLWhvcml6b250YWwtc3BhY2UpCiAgICAgICAg ICAgICAoaW5zZXJ0LW5ld2xpbmUpCiAgICAgICAgICAgICAobGlzcC1pbmRlbnQtbGluZS1hbmQt c2V4cCkpKSkpKQoMCihkZWZpbmUtY29tbWFuZCBwYXJlZGl0LWZvcndhcmQtZGVsZXRlCiAgIkRl bGV0ZSBhIGNoYXJhY3RlciBmb3J3YXJkIG9yIG1vdmUgZm9yd2FyZCBvdmVyIGEgZGVsaW1pdGVy LgpJZiBvbiBhbiBvcGVuaW5nIFMtZXhwcmVzc2lvbiBkZWxpbWl0ZXIsIG1vdmUgZm9yd2FyZCBp bnRvIHRoZQogIFMtZXhwcmVzc2lvbi4KSWYgb24gYSBjbG9zaW5nIFMtZXhwcmVzc2lvbiBkZWxp bWl0ZXIsIHJlZnVzZSB0byBkZWxldGUgdW5sZXNzIHRoZQogIFMtZXhwcmVzc2lvbiBpcyBlbXB0 eSwgaW4gd2hpY2ggY2FzZSBkZWxldGUgdGhlIHdob2xlIFMtZXhwcmVzc2lvbi4KV2l0aCBhIHBy ZWZpeCBhcmd1bWVudCwgc2ltcGx5IGRlbGV0ZSBhIGNoYXJhY3RlciBmb3J3YXJkLCB3aXRob3V0 CiAgcmVnYXJkIGZvciBkZWxpbWl0ZXIgYmFsYW5jaW5nLiAgVGhpcyBpcyB1c2VmdWwgd2hlbiB0 aGUgYnVmZmVyIGhhcwogIGVudGVyZWQgYSBzdHJ1Y3R1cmFsbHkgaW5jb25zaXN0ZW50IHN0YXRl IHdoaWNoIHBhcmVkaXQgaXMgdW5hYmxlIHRvCiAgY29wZSB3aXRoLiIKICAiUCIKICAobGFtYmRh IChhcmd1bWVudCkKICAgIChsZXQgKChwb2ludCAoY3VycmVudC1wb2ludCkpKQogICAgICAoaWYg KG9yIChjb21tYW5kLWFyZ3VtZW50LXZhbHVlIGFyZ3VtZW50KQogICAgICAgICAgICAgIChncm91 cC1lbmQ/IHBvaW50KSkKICAgICAgICAgICgocmVmLWNvbW1hbmQgZGVsZXRlLWNoYXIpICNmKQog ICAgICAgICAgKGxldCAoKHN0YXRlIChjdXJyZW50LXBhcnNlLXN0YXRlKSkKICAgICAgICAgICAg ICAgIChyaWdodCAobWFyay1yaWdodC1jaGFyIHBvaW50KSkpCiAgICAgICAgICAgIChjb25kICgo cGFyc2Utc3RhdGUtaW4tc3RyaW5nPyBzdGF0ZSkKICAgICAgICAgICAgICAgICAgIChwYXJlZGl0 LWZvcndhcmQtZGVsZXRlLWluLXN0cmluZyBwb2ludCBzdGF0ZSkpCiAgICAgICAgICAgICAgICAg ICgocGFyc2Utc3RhdGUtaW4tY29tbWVudD8gc3RhdGUpCiAgICAgICAgICAgICAgICAgICAoZGVs ZXRlLXJpZ2h0LWNoYXIgcG9pbnQpKQogICAgICAgICAgICAgICAgICAoKG1hcmstcmlnaHQtY2hh ci1xdW90ZWQ/IHBvaW50KQogICAgICAgICAgICAgICAgICAgOzsgRXNjYXBlIC0tIGRlbGV0ZSBi b3RoIGNoYXJhY3RlcnMuCiAgICAgICAgICAgICAgICAgICAoZGVsZXRlLXN0cmluZyAobWFyay0x KyBwb2ludCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXJrMSsgcG9pbnQp KSkKICAgICAgICAgICAgICAgICAgKChjaGFyPT8gcmlnaHQgI1xcICkKICAgICAgICAgICAgICAg ICAgIDs7IERpdHRvLgogICAgICAgICAgICAgICAgICAgKGRlbGV0ZS1zdHJpbmcgKG1hcmsrIHBv aW50IDIpIHBvaW50KSkKICAgICAgICAgICAgICAgICAgKChsZXQgKChzeW4gKGNoYXItc3ludGF4 IHJpZ2h0KSkpCiAgICAgICAgICAgICAgICAgICAgIChvciAoY2hhcj0/IHN5biAjXCggKQogICAg ICAgICAgICAgICAgICAgICAgICAgKGNoYXI9PyBzeW4gI1wiICkpKQogICAgICAgICAgICAgICAg ICAgOzsgRW50ZXIgaW50byBhbiBTLWV4cHJlc3Npb24gZm9yd2FyZC4KICAgICAgICAgICAgICAg ICAgIChzZXQtY3VycmVudC1wb2ludCEgKG1hcmsxKyBwb2ludCkpKQogICAgICAgICAgICAgICAg ICAoKGFuZCAobm90IChncm91cC1zdGFydD8gcG9pbnQpKQoJCQkobm90IChtYXJrLXJpZ2h0LWNo YXItcXVvdGVkPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFyay0xKyBwb2ludCkp KQogICAgICAgICAgICAgICAgICAgICAgICAoY2hhcj0/IChjaGFyLXN5bnRheCByaWdodCkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjXCkgKQogICAgICAgICAgICAgICAgICAgICAg ICAoY2hhcj0/IChtYXJrLWxlZnQtY2hhciBwb2ludCkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoY2hhci1tYXRjaGluZy1wYXJlbiByaWdodCkpKQogICAgICAgICAgICAgICAgICAg OzsgRW1wdHkgbGlzdCAtLSBkZWxldGUgYm90aCBkZWxpbWl0ZXJzLgogICAgICAgICAgICAgICAg ICAgKGRlbGV0ZS1zdHJpbmcgKG1hcmstMSsgcG9pbnQpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAobWFyazErIHBvaW50KSkpCiAgICAgICAgICAgICAgICAgIDs7IEp1c3QgZGVs ZXRlIGEgc2luZ2xlIGNoYXJhY3RlciwgaWYgaXQncyBub3QgYQogICAgICAgICAgICAgICAgICA7 OyBjbG9zaW5nIHBhcmVudGhlc2lzLgogICAgICAgICAgICAgICAgICAoKG5vdCAoY2hhcj0/IChj aGFyLXN5bnRheCByaWdodCkgI1wpICkpCiAgICAgICAgICAgICAgICAgICAoZGVsZXRlLXJpZ2h0 LWNoYXIgcG9pbnQpKSkpKSkpKQoKKGRlZmluZSAocGFyZWRpdC1mb3J3YXJkLWRlbGV0ZS1pbi1z dHJpbmcgcG9pbnQgc3RhdGUpCiAgKGxldCAoKGJlZm9yZSAobWFyay0xKyBwb2ludCkpCiAgICAg ICAgKGFmdGVyIChtYXJrMSsgcG9pbnQpKSkKICAgIChjb25kICgobm90IChtYXJrPSBhZnRlciAo cGFyc2Utc3RhdGUtZW5kLW9mLXNleHAgc3RhdGUpKSkKICAgICAgICAgICA7OyBJZiBpdCdzIG5v dCB0aGUgY2xvc2UtcXVvdGUsIGl0J3Mgc2FmZSB0byBkZWxldGUuICBCdXQKICAgICAgICAgICA7 OyBmaXJzdCBoYW5kbGUgdGhlIGNhc2UgdGhhdCB3ZSdyZSBpbiBhIHN0cmluZyBlc2NhcGUuCiAg ICAgICAgICAgKGNvbmQgKChtYXJrLXdpdGhpbi1zdHJpbmctZXNjYXBlPyBwb2ludCkKICAgICAg ICAgICAgICAgICAgOzsgV2UncmUgcmlnaHQgYWZ0ZXIgdGhlIGJhY2tzbGFzaCwgc28gZGVsZXRl IG9uZQogICAgICAgICAgICAgICAgICA7OyBjaGFyYWN0ZXIgYmFja3dhcmQgKHRoZSBiYWNrc2xh c2gpIGFuZCBvbmUKICAgICAgICAgICAgICAgICAgOzsgY2hhcmFjdGVyIGZvcndhcmQgKHRoZSBl c2NhcGVkIGNoYXJhY3RlcikuCiAgICAgICAgICAgICAgICAgIChkZWxldGUtc3RyaW5nIGJlZm9y ZSBhZnRlcikpCiAgICAgICAgICAgICAgICAgKChtYXJrLXdpdGhpbi1zdHJpbmctZXNjYXBlPyBh ZnRlcikKICAgICAgICAgICAgICAgICAgOzsgQSBzdHJpbmcgZXNjYXBlIHN0YXJ0cyBoZXJlLCBz byBkZWxldGUgYm90aAogICAgICAgICAgICAgICAgICA7OyBjaGFyYWN0ZXJzIGZvcndhcmQuCiAg ICAgICAgICAgICAgICAgIChkZWxldGUtc3RyaW5nIHBvaW50IChtYXJrMSsgYWZ0ZXIpKSkKICAg ICAgICAgICAgICAgICAoZWxzZQogICAgICAgICAgICAgICAgICA7OyBPdGhlcndpc2UsIGp1c3Qg ZGVsZXRlIGEgc2luZ2xlIGNoYXJhY3Rlci4KICAgICAgICAgICAgICAgICAgKGRlbGV0ZS1yaWdo dC1jaGFyIHBvaW50KSkpKQogICAgICAgICAgKChtYXJrPSBiZWZvcmUgKHBhcnNlLXN0YXRlLXN0 YXJ0LW9mLXNleHAgc3RhdGUpKQogICAgICAgICAgIDs7IElmIGl0IGlzIHRoZSBjbG9zZS1xdW90 ZSwgZGVsZXRlIG9ubHkgaWYgd2UncmUgYWxzbwogICAgICAgICAgIDs7IHJpZ2h0IHBhc3QgdGhl IG9wZW4tcXVvdGUgKGkuZS4gaXQncyBlbXB0eSksIGFuZCB0aGVuCiAgICAgICAgICAgOzsgZGVs ZXRlIGJvdGggcXVvdGVzLiAgT3RoZXJ3aXNlIHJlZnVzZSB0byBkZWxldGUgaXQuCiAgICAgICAg ICAgKGRlbGV0ZS1zdHJpbmcgYmVmb3JlIGFmdGVyKSkpKSkKDAooZGVmaW5lLWNvbW1hbmQgcGFy ZWRpdC1iYWNrd2FyZC1kZWxldGUKICAiRGVsZXRlIGEgY2hhcmFjdGVyIGJhY2t3YXJkIG9yIG1v dmUgYmFja3dhcmQgb3ZlciBhIGRlbGltaXRlci4KSWYgb24gYSBjbG9zaW5nIFMtZXhwcmVzc2lv biBkZWxpbWl0ZXIsIG1vdmUgYmFja3dhcmQgaW50byB0aGUKICBTLWV4cHJlc3Npb24uCklmIG9u IGFuIG9wZW5pbmcgUy1leHByZXNzaW9uIGRlbGltaXRlciwgcmVmdXNlIHRvIGRlbGV0ZSB1bmxl c3MgdGhlCiAgUy1leHByZXNzaW9uIGlzIGVtcHR5LCBpbiB3aGljaCBjYXNlIGRlbGV0ZSB0aGUg d2hvbGUgUy1leHByZXNzaW9uLgpXaXRoIGEgcHJlZml4IGFyZ3VtZW50LCBzaW1wbHkgZGVsZXRl IGEgY2hhcmFjdGVyIGJhY2t3YXJkLCB3aXRob3V0CiAgcmVnYXJkIGZvciBkZWxpbWl0ZXIgYmFs YW5jaW5nLCBhbmQgcG9zc2libHkgdW50YWJpZnkuICBUaGlzIGlzCiAgdXNlZnVsIHdoZW4gdGhl IGJ1ZmZlciBoYXMgZW50ZXJlZCBhIHN0cnVjdHVyYWxseSBpbmNvbnNpc3RlbnQgc3RhdGUKICB3 aGljaCBwYXJlZGl0IGlzIHVuYWJsZSB0byBjb3BlIHdpdGguIgogICJQIgogIChsYW1iZGEgKGFy Z3VtZW50KQogICAgKGxldCAoKHBvaW50IChjdXJyZW50LXBvaW50KSkpCiAgICAgIChpZiAob3Ig KGNvbW1hbmQtYXJndW1lbnQtdmFsdWUgYXJndW1lbnQpCiAgICAgICAgICAgICAgKGdyb3VwLXN0 YXJ0PyBwb2ludCkpCiAgICAgICAgICAoKHJlZi1jb21tYW5kIGJhY2t3YXJkLWRlbGV0ZS1jaGFy LXVudGFiaWZ5KSAjZikKICAgICAgICAgIChsZXQgKChzdGF0ZSAoY3VycmVudC1wYXJzZS1zdGF0 ZSkpCiAgICAgICAgICAgICAgICAobGVmdCAobWFyay1sZWZ0LWNoYXIgcG9pbnQpKSkKICAgICAg ICAgICAgKGNvbmQgKChwYXJzZS1zdGF0ZS1pbi1zdHJpbmc/IHN0YXRlKQogICAgICAgICAgICAg ICAgICAgKHBhcmVkaXQtYmFja3dhcmQtZGVsZXRlLWluLXN0cmluZyBwb2ludCBzdGF0ZSkpCiAg ICAgICAgICAgICAgICAgICgocGFyc2Utc3RhdGUtaW4tY29tbWVudD8gc3RhdGUpCiAgICAgICAg ICAgICAgICAgICAoKHJlZi1jb21tYW5kIGJhY2t3YXJkLWRlbGV0ZS1jaGFyLXVudGFiaWZ5KSAj ZikpCiAgICAgICAgICAgICAgICAgICgobWFyay1yaWdodC1jaGFyLXF1b3RlZD8gcG9pbnQpCiAg ICAgICAgICAgICAgICAgICA7OyBFc2NhcGUgLS0gZGVsZXRlIGJvdGggY2hhcmFjdGVycy4KICAg ICAgICAgICAgICAgICAgIChkZWxldGUtc3RyaW5nIChtYXJrLTErIHBvaW50KQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKG1hcmsxKyBwb2ludCkpKQogICAgICAgICAgICAgICAg ICAoKG1hcmstbGVmdC1jaGFyLXF1b3RlZD8gcG9pbnQpCiAgICAgICAgICAgICAgICAgICA7OyBE aXR0by4KICAgICAgICAgICAgICAgICAgIChkZWxldGUtc3RyaW5nIChtYXJrLSBwb2ludCAyKSBw b2ludCkpCiAgICAgICAgICAgICAgICAgICgobGV0ICgoc3luIChjaGFyLXN5bnRheCBsZWZ0KSkp CiAgICAgICAgICAgICAgICAgICAgIChvciAoY2hhcj0/IHN5biAjXCkgKQogICAgICAgICAgICAg ICAgICAgICAgICAgKGNoYXI9PyBzeW4gI1wiICkpKQogICAgICAgICAgICAgICAgICAgOzsgRW50 ZXIgaW50byBhbiBTLWV4cHJlc3Npb24gYmFja3dhcmQuCiAgICAgICAgICAgICAgICAgICAoc2V0 LWN1cnJlbnQtcG9pbnQhIChtYXJrLTErIHBvaW50KSkpCiAgICAgICAgICAgICAgICAgICgoYW5k IChjaGFyPT8gKGNoYXItc3ludGF4IGxlZnQpICNcKCApCiAgICAgICAgICAgICAgICAgICAgICAg IChjaGFyPT8gKG1hcmstcmlnaHQtY2hhciBwb2ludCkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoY2hhci1tYXRjaGluZy1wYXJlbiBsZWZ0KSkpCiAgICAgICAgICAgICAgICAgICA7 OyBFbXB0eSBsaXN0IC0tIGRlbGV0ZSBib3RoIGRlbGltaXRlcnMuCiAgICAgICAgICAgICAgICAg ICAoZGVsZXRlLXN0cmluZyAobWFyay0xKyBwb2ludCkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChtYXJrMSsgcG9pbnQpKSkKICAgICAgICAgICAgICAgICAgOzsgRGVsZXRlIGl0 IG9ubHkgb24gdGhlIGNvbmRpdGlvbiB0aGF0IGl0J3Mgbm90IGFuCiAgICAgICAgICAgICAgICAg IDs7IG9wZW5pbmcgcGFyZW50aGVzaXMuCiAgICAgICAgICAgICAgICAgICgobm90IChjaGFyPT8g KGNoYXItc3ludGF4IGxlZnQpICNcKCApKQogICAgICAgICAgICAgICAgICAgKChyZWYtY29tbWFu ZCBiYWNrd2FyZC1kZWxldGUtY2hhci11bnRhYmlmeSkgI2YpKSkpKSkpKQoKKGRlZmluZSAocGFy ZWRpdC1iYWNrd2FyZC1kZWxldGUtaW4tc3RyaW5nIHBvaW50IHN0YXRlKQogIChsZXQgKChiZWZv cmUgKG1hcmstMSsgcG9pbnQpKQogICAgICAgIChhZnRlciAobWFyazErIHBvaW50KSkpCiAgICAo Y29uZCAoKG5vdCAobWFyaz0gYmVmb3JlIChwYXJzZS1zdGF0ZS1zdGFydC1vZi1zZXhwIHN0YXRl KSkpCiAgICAgICAgICAgOzsgSWYgaXQncyBub3QgdGhlIG9wZW4tcXVvdGUsIGl0J3Mgc2FmZSB0 byBkZWxldGUsIGJ1dCB3ZQogICAgICAgICAgIDs7IHN0aWxsIG11c3QgYmUgY2FyZWZ1bCB3aXRo IGVzY2FwZXMuCiAgICAgICAgICAgKGNvbmQgKChtYXJrLXdpdGhpbi1zdHJpbmctZXNjYXBlPyBw b2ludCkKICAgICAgICAgICAgICAgICAgKGRlbGV0ZS1zdHJpbmcgYmVmb3JlIGFmdGVyKSkKICAg ICAgICAgICAgICAgICAoKG1hcmstd2l0aGluLXN0cmluZy1lc2NhcGU/IGJlZm9yZSkKICAgICAg ICAgICAgICAgICAgKGRlbGV0ZS1zdHJpbmcgKG1hcmstMSsgYmVmb3JlKSBwb2ludCkpCiAgICAg ICAgICAgICAgICAgKGVsc2UKICAgICAgICAgICAgICAgICAgKGRlbGV0ZS1sZWZ0LWNoYXIgcG9p bnQpKSkpCiAgICAgICAgICAoKG1hcms9IGFmdGVyIChwYXJzZS1zdGF0ZS1lbmQtb2Ytc2V4cCBz dGF0ZSkpCiAgICAgICAgICAgOzsgSWYgaXQgaXMgdGhlIG9wZW4tcXVvdGUsIGRlbGV0ZSBvbmx5 IGlmIHdlJ3JlIGFsc28gcmlnaHQKICAgICAgICAgICA7OyBwYXN0IHRoZSBjbG9zZS1xdW90ZSAo aS5lLiBpdCdzIGVtcHR5KSwgYW5kIHRoZW4gZGVsZXRlCiAgICAgICAgICAgOzsgYm90aCBxdW90 ZXMuICBPdGhlcndpc2Ugd2UgcmVmdXNlIHRvIGRlbGV0ZSBpdC4KICAgICAgICAgICAoZGVsZXRl LXN0cmluZyBiZWZvcmUgYWZ0ZXIpKSkpKQoMCihkZWZpbmUtY29tbWFuZCBwYXJlZGl0LWtpbGwK ICAiS2lsbCBhIGxpbmUgYXMgaWYgd2l0aCBga2lsbC1saW5lJywgYnV0IHJlc3BlY3QgZGVsaW1p dGVycy4KSW4gYSBzdHJpbmcsIGFjdCBleGFjdGx5IGFzIGBraWxsLWxpbmUnIGJ1dCBkbyBub3Qg a2lsbCBwYXN0IHRoZQogIGNsb3Npbmcgc3RyaW5nIGRlbGltaXRlci4KT24gYSBsaW5lIHdpdGgg bm8gUy1leHByZXNzaW9ucyBvbiBpdCBzdGFydGluZyBhZnRlciB0aGUgcG9pbnQgb3IKICB3aXRo aW4gYSBjb21tZW50LCBhY3QgZXhhY3RseSBhcyBga2lsbC1saW5lJy4KT3RoZXJ3aXNlLCBraWxs IGFsbCBTLWV4cHJlc3Npb25zIHRoYXQgc3RhcnQgb24gdGhlIGxpbmUgYWZ0ZXIgdGhlCiAgcG9p bnQuIgogICJQIgogIChsYW1iZGEgKGFyZ3VtZW50KQogICAgKGlmIChjb21tYW5kLWFyZ3VtZW50 LXZhbHVlIGFyZ3VtZW50KQogICAgICAgICgocmVmLWNvbW1hbmQga2lsbC1saW5lKSAjZikKICAg ICAgICAobGV0ICgoc3RhdGUgKGN1cnJlbnQtcGFyc2Utc3RhdGUpKQogICAgICAgICAgICAgIChw b2ludCAoY3VycmVudC1wb2ludCkpKQogICAgICAgICAgKGNvbmQgKChwYXJzZS1zdGF0ZS1pbi1z dHJpbmc/IHN0YXRlKQogICAgICAgICAgICAgICAgIChwYXJlZGl0LWtpbGwtbGluZS1pbi1zdHJp bmcgcG9pbnQpKQogICAgICAgICAgICAgICAgKChvciAocGFyc2Utc3RhdGUtaW4tY29tbWVudD8g c3RhdGUpCiAgICAgICAgICAgICAgICAgICAgIChsZXQqICgoZW9sIChsaW5lLWVuZCBwb2ludCAw KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXh0CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHNraXAtd2hpdGVzcGFjZS1mb3J3YXJkIHBvaW50IGVvbCkpKQogICAgICAgICAg ICAgICAgICAgICAgIChvciAobWFyaz0gbmV4dCBlb2wpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIChjaGFyPT8gKG1hcmstcmlnaHQtY2hhciBuZXh0KQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICNcOyApKSkpCiAgICAgICAgICAgICAgICAgKChyZWYtY29tbWFuZCBraWxs LWxpbmUpICNmKSkKICAgICAgICAgICAgICAgIChlbHNlCiAgICAgICAgICAgICAgICAgKHBhcmVk aXQta2lsbC1zZXhwcy1vbi1saW5lIHBvaW50KSkpKSkpKQoKKGRlZmluZSAocGFyZWRpdC1raWxs LWxpbmUtaW4tc3RyaW5nIHBvaW50KQogIChsZXQgKChlb2wgKGxpbmUtZW5kIHBvaW50IDApKSkK ICAgIChjb25kICgobWFyaz0gKHNraXAtd2hpdGVzcGFjZS1mb3J3YXJkIHBvaW50IGVvbCkKICAg ICAgICAgICAgICAgICAgZW9sKQogICAgICAgICAgICgocmVmLWNvbW1hbmQga2lsbC1saW5lKSAj ZikpCiAgICAgICAgICAoZWxzZQogICAgICAgICAgIChsZXQgKChiZWdpbm5pbmcgKGlmIChtYXJr LXdpdGhpbi1zdHJpbmctZXNjYXBlPyBwb2ludCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAobWFyay0xKyBwb2ludCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2lu dCkpKQogICAgICAgICAgICAgKGxldCBsb29wICgobWFyayBiZWdpbm5pbmcpKQogICAgICAgICAg ICAgICAoaWYgKG9yIChtYXJrPSBtYXJrIGVvbCkKICAgICAgICAgICAgICAgICAgICAgICAoY2hh cj0/IChtYXJrLXJpZ2h0LWNoYXIgbWFyaykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICNcIiApKQogICAgICAgICAgICAgICAgICAgKGtpbGwtc3RyaW5nIGJlZ2lubmluZyBtYXJrKQog ICAgICAgICAgICAgICAgICAgKGxvb3AgKG1hcmsrIG1hcmsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoaWYgKGNoYXI9PyAobWFyay1sZWZ0LWNoYXIgbWFyaykKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjXFwgKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEp KSkpKSkpKSkpCgooZGVmaW5lIChwYXJlZGl0LWtpbGwtc2V4cHMtb24tbGluZSBwb2ludCkKICAo bGV0KiAoKGJlZ2lubmluZyAoaWYgKG1hcmstcmlnaHQtY2hhci1xdW90ZWQ/IHBvaW50KQogICAg ICAgICAgICAgICAgICAgICAgICAobWFyazErIHBvaW50KSAgOyBEb24ndCBicmVhayBhIGxpbmUg aW4gYQogICAgICAgICAgICAgICAgICAgICAgICBwb2ludCkpICAgICAgICAgOyBjaGFyYWN0ZXIg bGl0ZXJhbC4KICAgICAgICAgKGVvbCAobGluZS1lbmQgYmVnaW5uaW5nIDApKQogICAgICAgICAo a2lsbC10byAobGFtYmRhIChlbmQpCiAgICAgICAgICAgICAgICAgICAgKGtpbGwtc3RyaW5nIGJl Z2lubmluZyBlbmQpKSkpCiAgICAobGV0IGxvb3AgKChtYXJrIGJlZ2lubmluZykpCiAgICAgIChj b25kICgob3IgKGdyb3VwLWVuZD8gbWFyaykKICAgICAgICAgICAgICAgICAobm90IChtYXJrPSAo bGluZS1lbmQgbWFyayAwKSBlb2wpKSkKICAgICAgICAgICAgIChraWxsLXRvIG1hcmspKQogICAg ICAgICAgICAoKGZvcndhcmQtb25lLXNleHAgbWFyaykKICAgICAgICAgICAgID0+IChsYW1iZGEg KHNleHAtZW5kLW1hcmspCiAgICAgICAgICAgICAgICAgIChjb25kICgoYmFja3dhcmQtb25lLXNl eHAgc2V4cC1lbmQtbWFyaykKICAgICAgICAgICAgICAgICAgICAgICAgID0+IChsYW1iZGEgKHNl eHAtc3RhcnQtbWFyaykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgT25seSBpZiBp dCBzdGFydHMgb24gdGhlIHNhbWUgbGluZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 OyB3aWxsIHdlIGluY2x1ZGUgaXQgaW4gd2hhdCB3ZSBraWxsLgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoaWYgKG1hcms9IChsaW5lLWVuZCBzZXhwLXN0YXJ0LW1hcmsgMCkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlb2wpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAobG9vcCBzZXhwLWVuZC1tYXJrKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGtpbGwtdG8gbWFyaykpKSkKICAgICAgICAgICAgICAgICAgICAgICAg KGVsc2UgKGtpbGwtdG8gbWFyaykpKSkpCiAgICAgICAgICAgICgoZm9yd2FyZC11cC1vbmUtbGlz dCBtYXJrKQogICAgICAgICAgICAgPT4gKGxhbWJkYSAoYWZ0ZXItY2xvc2UpCiAgICAgICAgICAg ICAgICAgIChraWxsLXRvIChpZiAobWFyaz0gKGxpbmUtZW5kIGFmdGVyLWNsb3NlIDApCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW9sKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKG1hcmstMSsgYWZ0ZXItY2xvc2UpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBlb2wpKSkpCiAgICAgICAgICAgIChlbHNlCiAgICAgICAgICAgICAoa2lsbC10byBt YXJrKSkpKSkpCgwKOzs7OyBDdXJzb3IgYW5kIFNjcmVlbiBNb3ZlbWVudCBDb21tYW5kcyBvbiBT LWV4cHJlc3Npb25zCgooZGVmaW5lIChwYXJlZGl0LW1vdmVtZW50LWNvbW1hbmQgbW92ZS1zZXhw IG1vdmUtY2hhciBtb3ZlLXVwKQogIChsYW1iZGEgKCkKICAgIChzZXQtY3VycmVudC1wb2ludCEK ICAgICAobGV0ICgocG9pbnQgKGN1cnJlbnQtcG9pbnQpKSkKICAgICAgIChjb25kICgobW92ZS1z ZXhwIHBvaW50KSkKICAgICAgICAgICAgICgocGFyc2Utc3RhdGUtaW4tc3RyaW5nPyAoY3VycmVu dC1wYXJzZS1zdGF0ZSkpCiAgICAgICAgICAgICAgKG1vdmUtY2hhciBwb2ludCkpCiAgICAgICAg ICAgICAoKG1vdmUtdXAgcG9pbnQpKQogICAgICAgICAgICAgKGVsc2UKICAgICAgICAgICAgICAo ZWRpdG9yLWVycm9yICJVbmFibGUgdG8gbW92ZS4iKSkpKSkpKQoKKGRlZmluZS1jb21tYW5kIHBh cmVkaXQtZm9yd2FyZAogICJNb3ZlIGZvcndhcmQgYW4gUy1leHByZXNzaW9uLCBvciB1cCBhbiBT LWV4cHJlc3Npb24gZm9yd2FyZC4KSWYgdGhlcmUgYXJlIG5vIG1vcmUgUy1leHByZXNzaW9ucyBp biB0aGlzIG9uZSBiZWZvcmUgdGhlIGNsb3NpbmcKICBkZWxpbWl0ZXIsIG1vdmUgcGFzdCB0aGF0 IGNsb3NpbmcgZGVsaW1pdGVyOyBvdGhlcndpc2UsIG1vdmUgZm9yd2FyZAogIG92ZXIgdGhlIFMt ZXhwcmVzc2lvbiBmb2xsb3dpbmcgdGhlIHBvaW50LiIKICAoKQogIChwYXJlZGl0LW1vdmVtZW50 LWNvbW1hbmQgZm9yd2FyZC1vbmUtc2V4cAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFy azErCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkLXVwLW9uZS1saXN0KSkKCihk ZWZpbmUtY29tbWFuZCBwYXJlZGl0LWJhY2t3YXJkCiAgIk1vdmUgYmFja3dhcmQgYW4gUy1leHBy ZXNzaW9uLCBvciB1cCBhbiBTLWV4cHJlc3Npb24gYmFja3dhcmQuCklmIHRoZXJlIGFyZSBubyBt b3JlIFMtZXhwcmVzc2lvbnMgaW4gdGhpcyBvbmUgYWZ0ZXIgdGhlIG9wZW5pbmcKICBkZWxpbWl0 ZXIsIG1vdmUgcGFzdCB0aGF0IG9wZW5pbmcgZGVsaW1pdGVyOyBvdGhlcndpc2UsIG1vdmUKICBi YWNrd2FyZCBvdmVyIHRoZSBTLWV4cHJlc3Npb24gcHJlY2VkaW5nIHRoZSBwb2ludC4iCiAgKCkK ICAocGFyZWRpdC1tb3ZlbWVudC1jb21tYW5kIGJhY2t3YXJkLW9uZS1zZXhwCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBtYXJrLTErCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNr d2FyZC11cC1vbmUtbGlzdCkpCgooZGVmaW5lLWNvbW1hbmQgcGFyZWRpdC1yZWNlbnRyZS1vbi1z ZXhwCiAgIlJlY2VudHJlIHRoZSBzY3JlZW4gb24gdGhlIFMtZXhwcmVzc2lvbiBmb2xsb3dpbmcg dGhlIHBvaW50LgpXaXRoIGEgcHJlZml4IGFyZ3VtZW50IE4sIGVuY29tcGFzcyBhbGwgTiBTLWV4 cHJlc3Npb25zIGZvcndhcmQuIgogICJwIgogIChsYW1iZGEgKG4pCiAgICAobGV0KiAoKGVuZC1t YXJrIChmb3J3YXJkLXNleHAgKGN1cnJlbnQtcG9pbnQpIG4gJ0VSUk9SKSkKICAgICAgICAgICAo c3RhcnQtbWFyayAoYmFja3dhcmQtc2V4cCBlbmQtbWFyayBuICdFUlJPUikpCiAgICAgICAgICAg KGNlbnRyZS1vZmZzZXQgKHF1b3RpZW50IChjb3VudC1saW5lcyBzdGFydC1tYXJrIGVuZC1tYXJr KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyKSkpCiAgICAgIChzZXQtY3Vy cmVudC1wb2ludCEgKGxpbmUtc3RhcnQgc3RhcnQtbWFyayBjZW50cmUtb2Zmc2V0KSkKICAgICAg KChyZWYtY29tbWFuZCByZWNlbnRlcikgI2YpKSkpCgwKOzs7OyBXcmFwcGFnZSwgc3BsaWNhZ2Us ICYgcmFpc2FnZQoKKGRlZmluZS1jb21tYW5kIHBhcmVkaXQtd3JhcC1zZXhwCiAgIldyYXAgdGhl IGZvbGxvd2luZyBTLWV4cHJlc3Npb24gaW4gYSBsaXN0LgpJZiBhIHByZWZpeCBhcmd1bWVudCBO IGlzIGdpdmVuLCB3cmFwIE4gUy1leHByZXNzaW9ucy4KQXV0b21hdGljYWxseSBpbmRlbnQgdGhl IG5ld2x5IHdyYXBwZWQgUy1leHByZXNzaW9uLgpBcyBhIHNwZWNpYWwgY2FzZSwgaWYgdGhlIHBv aW50IGlzIGF0IHRoZSBlbmQgb2YgYSBsaXN0LCBzaW1wbHkgaW5zZXJ0CiAgYSBwYWlyIG9mIHBh cmVudGhlc2VzLiIKICAicCIKICAobGFtYmRhIChuKQogICAgKGluc2VydC1zZXhwLXBhaXIgI1wo ICNcKQogICAgICAgICAgICAgICAgICAgICAgKGlmIChmb3J3YXJkLXNleHAgKGN1cnJlbnQtcG9p bnQpIG4gI2YpCiAgICAgICAgICAgICAgICAgICAgICAgICAgbgogICAgICAgICAgICAgICAgICAg ICAgICAgIDApKQogICAgKGxpc3AtaW5kZW50LXNleHAKICAgICAob3IgKGJhY2t3YXJkLXVwLW9u ZS1saXN0IChjdXJyZW50LXBvaW50KSkKICAgICAgICAgKGVycm9yICJXcmFwcGFnZSBib2dvc2l0 eS4gIFBsZWFzZSBpbmZvcm0gVFJDLiIpKSkpKQoKKGRlZmluZS1jb21tYW5kIHBhcmVkaXQtcmFp c2Utc2V4cAogICJSYWlzZSB0aGUgZm9sbG93aW5nIFMtZXhwcmVzc2lvbiBpbiBhIHRyZWUsIGRl bGV0aW5nIGl0cyBzaWJsaW5ncy4KV2l0aCBhIHByZWZpeCBhcmd1bWVudCBOLCByYWlzZSB0aGUg Zm9sbG93aW5nIE4gUy1leHByZXNzaW9ucy4gIElmIE4KICBpcyBuZWdhdGl2ZSwgcmFpc2UgdGhl IHByZWNlZGluZyBOIFMtZXhwcmVzc2lvbnMuIgogICJwIgogIChsYW1iZGEgKG4pCiAgICA7OyBJ IGhhdmUgdmVyeSBjYXJlZnVsbHkgc2VsZWN0ZWQgd2hlcmUgdG8gdXNlIHtGT1IsQkFDS31XQVJE LVNFWFAKICAgIDs7IHdpdGggYXJndW1lbnRzIDEgJiBFUlJPUiBhbmQge0ZPUixCQUNLV0FSRH0t T05FLVNFWFAgaGVyZSwgc28KICAgIDs7IHRoYXQgdGhlIGVycm9yIGlzIHNpZ25hbGxlZCBpbml0 aWFsbHkgYW5kIHRoZW4gbm90IGNoZWNrZWQKICAgIDs7IHJlZHVuZGFudGx5IGxhdGVyLgogICAg OysrIFRoaXMgc2hvdWxkIGJlIHZlcmlmaWVkLgogICAgKGxldCogKChwb2ludCAoY3VycmVudC1w b2ludCkpCiAgICAgICAgICAgKG1hcmsgKGZvcndhcmQtc2V4cCAoY3VycmVudC1wb2ludCkgbiAn RVJST1IpKQogICAgICAgICAgIChzZXhwcyAoaWYgKG5lZ2F0aXZlPyBuKQogICAgICAgICAgICAg ICAgICAgICAgKGV4dHJhY3Qtc3RyaW5nIG1hcmsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoZm9yd2FyZC1vbmUtc2V4cAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoYmFja3dhcmQtb25lLXNleHAgcG9pbnQpKSkKICAgICAgICAgICAgICAgICAg ICAgIChleHRyYWN0LXN0cmluZyAoYmFja3dhcmQtb25lLXNleHAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGZvcndhcmQtb25lLXNleHAgcG9pbnQpKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmspKSkKICAgICAgICAgICAoYmVmb3JlLWVu Y2xvc2VyIChtYXJrLXRlbXBvcmFyeS1jb3B5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGJhY2t3YXJkLXVwLWxpc3QgcG9pbnQgMSAnRVJST1IpKSkpCiAgICAgIChkZWxldGUtc3RyaW5n IGJlZm9yZS1lbmNsb3NlcgogICAgICAgICAgICAgICAgICAgICAoZm9yd2FyZC1zZXhwIGJlZm9y ZS1lbmNsb3NlciAxICdFUlJPUikpCiAgICAgIChpbnNlcnQtc3RyaW5nIHNleHBzIGJlZm9yZS1l bmNsb3NlcikKICAgICAgKGxldCBsb29wICgobiBuKSAobWFyayBiZWZvcmUtZW5jbG9zZXIpKQog ICAgICAgIChpZiAocG9zaXRpdmU/IG4pCiAgICAgICAgICAgIChsZXQgKChhZnRlciAoZm9yd2Fy ZC1vbmUtc2V4cCBtYXJrKSkpCiAgICAgICAgICAgICAgKHNldC1jdXJyZW50LXBvaW50ISAoYmFj a3dhcmQtb25lLXNleHAgYWZ0ZXIpKQogICAgICAgICAgICAgIChsaXNwLWluZGVudC1saW5lICNm KQogICAgICAgICAgICAgIChsaXNwLWluZGVudC1zZXhwIChjdXJyZW50LXBvaW50KSkKICAgICAg ICAgICAgICAobG9vcCAoLSBuIDEpIGFmdGVyKSkpKQogICAgICAoc2V0LWN1cnJlbnQtcG9pbnQh IGJlZm9yZS1lbmNsb3NlcikpKSkKDAooZGVmaW5lLWNvbW1hbmQgcGFyZWRpdC1zcGxpY2Utc2V4 cAogICJTcGxpY2UgdGhlIGxpc3QgdGhhdCB0aGUgcG9pbnQgaXMgb24gYnkgcmVtb3ZpbmcgaXRz IGRlbGltaXRlcnMuCldpdGggYSBwcmVmaXggYXJndW1lbnQgYXMgaW4gYEMtdScsIGtpbGwgYWxs IFMtZXhwcmVzc2lvbnMgYmFja3dhcmQgaW4KICB0aGUgY3VycmVudCBsaXN0IGJlZm9yZSBzcGxp Y2luZyBhbGwgUy1leHByZXNzaW9ucyBmb3J3YXJkIGludG8gdGhlCiAgZW5jbG9zaW5nIGxpc3Qu CldpdGggdHdvIHByZWZpeCBhcmd1bWVudHMgYXMgaW4gYEMtdSBDLXUnLCBraWxsIGFsbCBTLWV4 cHJlc3Npb25zCiAgZm9yd2FyZCBpbiB0aGUgY3VycmVudCBsaXN0IGJlZm9yZSBzcGxpY2luZyBh bGwgUy1leHByZXNzaW9ucwogIGJhY2t3YXJkIGludG8gdGhlIGVuY2xvc2luZyBsaXN0LgpXaXRo IGEgbnVtZXJpY2FsIHByZWZpeCBhcmd1bWVudCBOLCBraWxsIE4gUy1leHByZXNzaW9ucyBiYWNr d2FyZCBpbgogIHRoZSBjdXJyZW50IGxpc3QgYmVmb3JlIHNwbGljaW5nIHRoZSByZW1haW5pbmcg Uy1leHByZXNzaW9ucyBpbnRvIHRoZQogIGVuY2xvc2luZyBsaXN0LiAgSWYgTiBpcyBuZWdhdGl2 ZSwga2lsbCBmb3J3YXJkLiIKICAiUCIKICAobGFtYmRhIChhcmd1bWVudCkKICAgICh1bmRvLXJl Y29yZC1wb2ludCEpCiAgICAoaWYgYXJndW1lbnQgKHBhcmVkaXQta2lsbC1zdXJyb3VuZGluZy1z ZXhwcy1mb3Itc3BsaWNlIGFyZ3VtZW50KSkKICAgIChsZXQqICgoYmVmb3JlLW9wZW4gKGJhY2t3 YXJkLXVwLWxpc3QgKGN1cnJlbnQtcG9pbnQpIDEgJ0VSUk9SKSkKICAgICAgICAgICAoYmVmb3Jl LWNsb3NlCiAgICAgICAgICAgIChtYXJrLTErIChmb3J3YXJkLXNleHAgYmVmb3JlLW9wZW4gMSAn RVJST1IpKSkpIAogICAgICAoZGVsZXRlLXJpZ2h0LWNoYXIgYmVmb3JlLWNsb3NlKQogICAgICAo ZGVsZXRlLXJpZ2h0LWNoYXIgYmVmb3JlLW9wZW4pCiAgICAgICh3aXRoLWN1cnJlbnQtcG9pbnQg YmVmb3JlLW9wZW4KICAgICAgICAobGFtYmRhICgpCiAgICAgICAgICAocGFyZWRpdC1yZWluZGVu dC1zcGxpY2FnZSBhcmd1bWVudCkpKSkpKQoKKGRlZmluZSAocGFyZWRpdC1raWxsLXN1cnJvdW5k aW5nLXNleHBzLWZvci1zcGxpY2UgYXJndW1lbnQpCiAgKGNvbmQgKChjb21tYW5kLWFyZ3VtZW50 LW11bHRpcGxpZXItb25seT8gYXJndW1lbnQpCiAgICAgICAgIChsZXQgKChsb29wIChsYW1iZGEg KG1hcmstZW5kPyBhZHZhbmNlLW9uZS1zZXhwKQogICAgICAgICAgICAgICAgICAgICAgIChsZXQg KChwb2ludC1hIChjdXJyZW50LXBvaW50KSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAobGV0 IGxvb3AgKChwb2ludC1iIHBvaW50LWEpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVm aW5lICh3aW4pIChraWxsLXN0cmluZyBwb2ludC1hIHBvaW50LWIpKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAoY29uZCAoKG1hcmstZW5kPyBwb2ludC1iKSAod2luKSkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKChhZHZhbmNlLW9uZS1zZXhwIHBvaW50LWIpID0+IGxvb3Ap CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbHNlICh3aW4pKSkpKSkpCiAgICAg ICAgICAgICAgICh2YWx1ZSAoY29tbWFuZC1hcmd1bWVudC1udW1lcmljLXZhbHVlIGFyZ3VtZW50 KSkpCiAgICAgICAgICAgKGlmICg9IHZhbHVlIDQpICAgICAgICAgICAgICA7T25lIEMtdQogICAg ICAgICAgICAgICAobG9vcCBncm91cC1zdGFydD8gYmFja3dhcmQtb25lLXNleHApCiAgICAgICAg ICAgICAgIChsb29wIGdyb3VwLWVuZD8gZm9yd2FyZC1vbmUtc2V4cCkpKSkKICAgICAgICAoKGV4 YWN0LWludGVnZXI/IGFyZ3VtZW50KQogICAgICAgICAobGV0KiAoKHBvaW50IChjdXJyZW50LXBv aW50KSkKICAgICAgICAgICAgICAgIChtYXJrIChiYWNrd2FyZC1zZXhwIHBvaW50IGFyZ3VtZW50 ICdFUlJPUikpKQogICAgICAgICAgIChraWxsLXN0cmluZyBwb2ludCBtYXJrKSkpCiAgICAgICAg KGVsc2UKICAgICAgICAgKGVycm9yICJCaXphcnJlIHByZWZpeCBhcmd1bWVudCB0byBQQVJFRElU LVNQTElDRToiCiAgICAgICAgICAgICAgICBhcmd1bWVudCkpKSkKCihkZWZpbmUgKHBhcmVkaXQt cmVpbmRlbnQtc3BsaWNhZ2UgYXJndW1lbnQpCiAgKGNvbmQgKChiYWNrd2FyZC11cC1saXN0IChj dXJyZW50LXBvaW50KSAxICNmKQogICAgICAgICA9PiBsaXNwLWluZGVudC1zZXhwKQogICAgICAg ICgobm90IChleGFjdC1pbnRlZ2VyPyBhcmd1bWVudCkpCiAgICAgICAgIHVuc3BlY2lmaWMpCiAg ICAgICAgKChwb3NpdGl2ZT8gYXJndW1lbnQpCiAgICAgICAgIChsaXNwLWluZGVudC1saW5lICNm KQogICAgICAgICAobGlzcC1pbmRlbnQtc2V4cCAoY3VycmVudC1wb2ludCkpCiAgICAgICAgIChp ZiAoPiBhcmd1bWVudCAxKQogICAgICAgICAgICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgICAgICAg ICAgKGxhbWJkYSAoKQogICAgICAgICAgICAgICAgKGxldCBsb29wICgobiBhcmd1bWVudCkpCiAg ICAgICAgICAgICAgICAgIChsaXNwLWluZGVudC1saW5lICNmKQogICAgICAgICAgICAgICAgICAo bW9kaWZ5LWN1cnJlbnQtcG9pbnQhCiAgICAgICAgICAgICAgICAgICAobGFtYmRhIChwb2ludCkK ICAgICAgICAgICAgICAgICAgICAgKGxpc3AtaW5kZW50LXNleHAgcG9pbnQpCiAgICAgICAgICAg ICAgICAgICAgIChmb3J3YXJkLW9uZS1zZXhwIHBvaW50KSkpCiAgICAgICAgICAgICAgICAgIChs ZXQgKChtICgtIG4gMSkpKQogICAgICAgICAgICAgICAgICAgIChpZiAocG9zaXRpdmU/IG0pCiAg ICAgICAgICAgICAgICAgICAgICAgIChsb29wIG0pKSkpKSkpKQogICAgICAgICgobmVnYXRpdmU/ IGFyZ3VtZW50KQogICAgICAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgICAgIChsYW1iZGEgKCkK ICAgICAgICAgICAgKGxldCBsb29wICgobiBhcmd1bWVudCkpCiAgICAgICAgICAgICAgKGNvbmQg KChub3QgKHplcm8/IG4pKQogICAgICAgICAgICAgICAgICAgICAobW9kaWZ5LWN1cnJlbnQtcG9p bnQhIGJhY2t3YXJkLW9uZS1zZXhwKQogICAgICAgICAgICAgICAgICAgICAobGlzcC1pbmRlbnQt bGluZSAjZikKICAgICAgICAgICAgICAgICAgICAgKGxpc3AtaW5kZW50LXNleHAgKGN1cnJlbnQt cG9pbnQpKQogICAgICAgICAgICAgICAgICAgICAobG9vcCAoKyBuIDEpKSkpKSkpKSkpCgwKOzs7 OyBTcGxpdHRpbmcgYW5kIEpvaW5pbmcKCihkZWZpbmUtY29tbWFuZCBwYXJlZGl0LXNwbGl0LXNl eHAKICAiU3BsaXQgdGhlIGxpc3Qgb3Igc3RyaW5nIHRoZSBwb2ludCBpcyBvbiBpbiB0d28uIgog ICgpCiAgKGxhbWJkYSAoKQogICAgKGxldCAoKHN0YXRlIChjdXJyZW50LXBhcnNlLXN0YXRlKSkp CiAgICAgIChjb25kICgocGFyc2Utc3RhdGUtaW4tc3RyaW5nPyBzdGF0ZSkKICAgICAgICAgICAg IChpbnNlcnQtY2hhciAjXCIpCiAgICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgICAg ICAgICAobGFtYmRhICgpCiAgICAgICAgICAgICAgICAoaW5zZXJ0LWNoYXIgI1xzcGFjZSkKICAg ICAgICAgICAgICAgIChpbnNlcnQtY2hhciAjXCIpKSkpCiAgICAgICAgICAgICgob3IgKHBhcnNl LXN0YXRlLWluLWNvbW1lbnQ/IHN0YXRlKQogICAgICAgICAgICAgICAgIChtYXJrLXJpZ2h0LWNo YXItcXVvdGVkPyAoY3VycmVudC1wb2ludCkpKQogICAgICAgICAgICAgKGVkaXRvci1lcnJvcgog ICAgICAgICAgICAgICJJbnZhbGlkIGNvbnRleHQgZm9yIFMtZXhwcmVzc2lvbiBzcGxpdHRpbmcu IikpCiAgICAgICAgICAgICgobGV0ICgocG9pbnQgKGN1cnJlbnQtcG9pbnQpKSkKICAgICAgICAg ICAgICAgKGFuZCAobWVtdiAoY2hhci1zeW50YXggKG1hcmstbGVmdC1jaGFyIHBvaW50KSkKICAg ICAgICAgICAgICAgICAgICAgICAgICAnKCNcdyAjXF8pKQogICAgICAgICAgICAgICAgICAgICht ZW12IChjaGFyLXN5bnRheCAobWFyay1yaWdodC1jaGFyIHBvaW50KSkKICAgICAgICAgICAgICAg ICAgICAgICAgICAnKCNcdyAjXF8pKSkpCiAgICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24gKGxh bWJkYSAoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGluc2VydC1jaGFyICNcc3Bh Y2UpKSkpCiAgICAgICAgICAgIChlbHNlCiAgICAgICAgICAgICAodW5kby1yZWNvcmQtcG9pbnQh KQogICAgICAgICAgICAgKHNwbGl0LXNleHAtYXQtcG9pbnQpKSkpKSkKCihkZWZpbmUgKHNwbGl0 LXNleHAtYXQtcG9pbnQpCiAgKGxldCAoKG9wZW4gKGJhY2t3YXJkLXVwLWxpc3QgKGN1cnJlbnQt cG9pbnQpIDEgJ0VSUk9SKSkKICAgICAgICAoY2xvc2UgKGZvcndhcmQtdXAtbGlzdCAoY3VycmVu dC1wb2ludCkgMSAnRVJST1IpKSkKICAgIChsZXQgKChvcGVuLWNoYXIgKG1hcmstcmlnaHQtY2hh ciBvcGVuKSkKICAgICAgICAgIChjbG9zZS1jaGFyIChtYXJrLWxlZnQtY2hhciBjbG9zZSkpKQog ICAgICAobGV0ICgobmV3LWNsb3NlIChjb25kICgoYmFja3dhcmQtb25lLXNleHAgKGN1cnJlbnQt cG9pbnQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiBmb3J3YXJkLW9uZS1zZXhw KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbHNlIChtYXJrMSsgb3BlbikpKSkKICAg ICAgICAgICAgKG5ldy1vcGVuIChjb25kICgoZm9yd2FyZC1vbmUtc2V4cCAoY3VycmVudC1wb2lu dCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gYmFja3dhcmQtb25lLXNleHApCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoZWxzZSAobWFyay0xKyBjbG9zZSkpKSkpCiAgICAg ICAgKGlmIChtYXJrPCBuZXctb3BlbiBuZXctY2xvc2UpICA7Q2FuJ3QgYWN0dWFsbHkgaGFwcGVu Li4uCiAgICAgICAgICAgIChlZGl0b3ItZXJyb3IgICAgICAgICAgICAgICA7SSBndWVzcyBEZW1v Y3JpdHVzIHdhcyByaWdodCEKICAgICAgICAgICAgICJTcGxpdHRpbmcgYXRvbSEgIFJVTiwgYmVm b3JlIGNyaXRpY2FsIG1hc3MhISIpKQogICAgICAgIChsZXQgKChuZXctY2xvc2UgKG1hcmstbGVm dC1pbnNlcnRpbmctY29weSBuZXctY2xvc2UpKQogICAgICAgICAgICAgIChuZXctb3BlbiAobWFy ay1sZWZ0LWluc2VydGluZy1jb3B5IG5ldy1vcGVuKSkpCiAgICAgICAgICAoaW5zZXJ0LWNoYXIg Y2xvc2UtY2hhciBuZXctY2xvc2UpCiAgICAgICAgICAobWFyay10ZW1wb3JhcnkhIG5ldy1jbG9z ZSkKICAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAgICAgIChsYW1iZGEgKCkKICAgICAg ICAgICAgIChpZiAobm90IChjaGFyPT8gKGNoYXItc3ludGF4IChtYXJrLWxlZnQtY2hhciBuZXct b3BlbikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNcc3BhY2UpKQogICAgICAgICAg ICAgICAgIChpbnNlcnQtY2hhciAjXHNwYWNlIG5ldy1vcGVuKSkKICAgICAgICAgICAgIChtYXJr LXRlbXBvcmFyeSEgbmV3LW9wZW4pCiAgICAgICAgICAgICAoaW5zZXJ0LWNoYXIgb3Blbi1jaGFy IG5ldy1vcGVuKQogICAgICAgICAgICAgKGlmIChtYXJrLz0gKGxpbmUtc3RhcnQgKGN1cnJlbnQt cG9pbnQpIDApCiAgICAgICAgICAgICAgICAgICAgICAgICAobGluZS1zdGFydCBuZXctb3BlbiAw KSkKICAgICAgICAgICAgICAgICAod2l0aC1jdXJyZW50LXBvaW50IG5ldy1vcGVuCiAgICAgICAg ICAgICAgICAgICBsaXNwLWluZGVudC1saW5lLWFuZC1zZXhwKQogICAgICAgICAgICAgICAgIChs aXNwLWluZGVudC1zZXhwIG5ldy1vcGVuKSkpKSkpKSkpCgwKKGRlZmluZS1jb21tYW5kIHBhcmVk aXQtam9pbi1zZXhwcwogICJKb2luIHRoZSBTLWV4cHJlc3Npb25zIGFkamFjZW50IG9uIGVpdGhl ciBzaWRlIG9mIHRoZSBwb2ludC4KQm90aCBtdXN0IGJlIGxpc3RzLCBzdHJpbmdzLCBvciBhdG9t czsgZXJyb3IgaWYgdGhlcmUgaXMgbWlzbWF0Y2guIgogICgpCiAgKGxhbWJkYSAoKQogICAgKGxl dCAoKHN0YXRlIChjdXJyZW50LXBhcnNlLXN0YXRlKSkpCiAgICAgIChpZiAob3IgKHBhcnNlLXN0 YXRlLWluLWNvbW1lbnQ/IHN0YXRlKQogICAgICAgICAgICAgIChwYXJzZS1zdGF0ZS1pbi1zdHJp bmc/IHN0YXRlKSA7Zm9vCiAgICAgICAgICAgICAgKG1hcmstcmlnaHQtY2hhci1xdW90ZWQ/IChj dXJyZW50LXBvaW50KSkpCiAgICAgICAgICAoZWRpdG9yLWVycm9yICJJbnZhbGlkIGNvbnRleHQg Zm9yIFMtZXhwcmVzc2lvbiBqb2luaW5nLiIpCiAgICAgICAgICAobGV0ICgobGVmdC1wb2ludCAo ZW5kLW9mLXNleHAtYmFja3dhcmQgKGN1cnJlbnQtcG9pbnQpKSkKICAgICAgICAgICAgICAgIChy aWdodC1wb2ludCAoc3RhcnQtb2Ytc2V4cC1mb3J3YXJkIChjdXJyZW50LXBvaW50KSkpKQogICAg ICAgICAgICAoY29uZCAoKG1hcms8IHJpZ2h0LXBvaW50IGxlZnQtcG9pbnQpCiAgICAgICAgICAg ICAgICAgICAoZWRpdG9yLWVycm9yICJKb2luaW5nIHNpbmdsZSBTLWV4cHJlc3Npb24uIikpCiAg ICAgICAgICAgICAgICAgICgoaW50ZXJ2ZW5pbmctdGV4dD8gbGVmdC1wb2ludCByaWdodC1wb2lu dCkKICAgICAgICAgICAgICAgICAgIChlZGl0b3ItZXJyb3IKICAgICAgICAgICAgICAgICAgICAi Uy1leHByZXNzaW9ucyB0byBqb2luIGhhdmUgaW50ZXJ2ZW5pbmluZyB0ZXh0LiIpKQogICAgICAg ICAgICAgICAgICAoZWxzZQogICAgICAgICAgICAgICAgICAgKHNhdmUtZXhjdXJzaW9uCiAgICAg ICAgICAgICAgICAgICAgKGxhbWJkYSAoKQogICAgICAgICAgICAgICAgICAgICAgKGpvaW4tc2V4 cHMgbGVmdC1wb2ludCByaWdodC1wb2ludCkpKSkpKSkpKSkKCihkZWZpbmUgKGpvaW4tc2V4cHMg bGVmdC1wb2ludCByaWdodC1wb2ludCkKICAobGV0ICgobGVmdC1zeW50YXggKGNoYXItc3ludGF4 IChtYXJrLWxlZnQtY2hhciBsZWZ0LXBvaW50KSkpCiAgICAgICAgKHJpZ2h0LXN5bnRheCAoY2hh ci1zeW50YXggKG1hcmstcmlnaHQtY2hhciByaWdodC1wb2ludCkpKSkKICAgIChjb25kICgoYW5k IChjaGFyPT8gbGVmdC1zeW50YXggI1wpKQogICAgICAgICAgICAgICAgKGNoYXI9PyByaWdodC1z eW50YXggI1woKSkKICAgICAgICAgICAobGV0ICgocmlnaHQtcG9pbnQKICAgICAgICAgICAgICAg ICAgKGlmIChtYXJrLz0gbGVmdC1wb2ludCByaWdodC1wb2ludCkKICAgICAgICAgICAgICAgICAg ICAgIHJpZ2h0LXBvaW50CiAgICAgICAgICAgICAgICAgICAgICAoYmVnaW4gKGluc2VydC1jaGFy ICNcc3BhY2UgcmlnaHQtcG9pbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hcmsx KyByaWdodC1wb2ludCkpKSkpCiAgICAgICAgICAgICAoZGVsZXRlLXJpZ2h0LWNoYXIgcmlnaHQt cG9pbnQpCiAgICAgICAgICAgICAoZGVsZXRlLWxlZnQtY2hhciBsZWZ0LXBvaW50KSkKICAgICAg ICAgICAobGlzcC1pbmRlbnQtc2V4cAogICAgICAgICAgICAoYmFja3dhcmQtdXAtbGlzdCAoY3Vy cmVudC1wb2ludCkgMSAnRVJST1IpKSkKICAgICAgICAgICgoYW5kIChjaGFyPT8gbGVmdC1zeW50 YXggI1wiKQogICAgICAgICAgICAgICAgKGNoYXI9PyByaWdodC1zeW50YXggI1wiKSkKICAgICAg ICAgICAoZGVsZXRlLXN0cmluZyAobWFyay0xKyBsZWZ0LXBvaW50KQogICAgICAgICAgICAgICAg ICAgICAgICAgIChtYXJrMSsgcmlnaHQtcG9pbnQpKSkKICAgICAgICAgICgob3IgKGFuZCAobWVt cSBsZWZ0LXN5bnRheCAgJygjXHcgI1xfKSkKICAgICAgICAgICAgICAgICAgICAobWVtcSByaWdo dC1zeW50YXggJygjXHcgI1xfKSkpKQogICAgICAgICAgIDs7IFdvcmQgb3Igc3ltYm9sCiAgICAg ICAgICAgKGRlbGV0ZS1zdHJpbmcgbGVmdC1wb2ludCByaWdodC1wb2ludCkpCiAgICAgICAgICAo ZWxzZQogICAgICAgICAgIChlZGl0b3ItZXJyb3IKICAgICAgICAgICAgIk1pc21hdGNoZWQgUy1l eHByZXNzaW9ucyB0byBqb2luLiIpKSkpKQoMCjs7OzsgTWlzY2VsbGFuZW91cyBVdGlsaXRpZXMK CihkZWZpbmUgKGN1cnJlbnQtcGFyc2Utc3RhdGUgIyFvcHRpb25hbCBwb2ludCkKICAobGV0ICgo cG9pbnQgKGlmIChkZWZhdWx0LW9iamVjdD8gcG9pbnQpCiAgICAgICAgICAgICAgICAgICAoY3Vy cmVudC1wb2ludCkKICAgICAgICAgICAgICAgICAgIHBvaW50KSkpCiAgICAocGFyc2UtcGFydGlh bC1zZXhwIChvciAodGhpcy1kZWZpbml0aW9uLXN0YXJ0IHBvaW50KQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGJ1ZmZlci1zdGFydCAoY3VycmVudC1idWZmZXIpKSkKICAgICAgICAgICAg ICAgICAgICAgICAgcG9pbnQpKSkKCihkZWZpbmUgKGluc2VydC1zZXhwLXBhaXIgb3BlbiBjbG9z ZSBzZXhwcyAjIW9wdGlvbmFsIG1hcmspCgogIChkZWZpbmUgKGluc2VydC1zcGFjZSBlbmQ/IG1h cmspCiAgICAoaWYgKGFuZCAobm90IChpZiBlbmQ/CiAgICAgICAgICAgICAgICAgICAgICAoZ3Jv dXAtZW5kPyBtYXJrKQogICAgICAgICAgICAgICAgICAgICAgKGdyb3VwLXN0YXJ0PyBtYXJrKSkp CiAgICAgICAgICAgICAobWVtdiAoY2hhci1zeW50YXggKGlmIGVuZD8KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKG1hcmstcmlnaHQtY2hhciBtYXJrKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAobWFyay1sZWZ0LWNoYXIgbWFyaykpKQogICAgICAgICAg ICAgICAgICAgKGNvbnMgKGlmIGVuZD8gI1woICNcKSApCiAgICAgICAgICAgICAgICAgICAgICAg ICAnKCNcXCAgICAgICAgICA7IGVzY2FwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAjXHcg ICAgICAgICAgOyB3b3JkIGNvbnN0aXR1ZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICNc XyAgICAgICAgICA7IHN5bWJvbCBjb25zdGl0dWVudAogICAgICAgICAgICAgICAgICAgICAgICAg ICAjXCIpKSkpICAgICAgOyBzdHJpbmcgcXVvdGUKICAgICAgICAoYmVnaW4gKGluc2VydC1jaGFy ICNcc3BhY2UgbWFyaykKICAgICAgICAgICAgICAgKG1hcmsxKyBtYXJrKSkKICAgICAgICBtYXJr KSkKCiAgKGxldCogKChzdGFydCAobWFyay10ZW1wb3JhcnktY29weSAoaWYgKGRlZmF1bHQtb2Jq ZWN0PyBtYXJrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdXJy ZW50LXBvaW50KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmsp KSkKICAgICAgICAgKGJlZm9yZSAoaW5zZXJ0LXNwYWNlICNmIHN0YXJ0KSkpCiAgICAoaW5zZXJ0 LWNoYXIgb3BlbiBiZWZvcmUpCiAgICAobGV0ICgocG9pbnQgKG1hcmsxKyBiZWZvcmUpKSkKICAg ICAgKGxldCAoKGFmdGVyIChmb3J3YXJkLXNleHAgcG9pbnQgc2V4cHMgJ0VSUk9SKSkpCiAgICAg ICAgKGluc2VydC1jaGFyIGNsb3NlIGFmdGVyKQogICAgICAgIChpbnNlcnQtc3BhY2UgI3QgKG1h cmsxKyBhZnRlcikpKQogICAgICAoc2V0LWN1cnJlbnQtcG9pbnQhIHBvaW50KSkpKQoMCihkZWZp bmUgKGluc2VydC1uZXdsaW5lLXByZXNlcnZpbmctY29tbWVudCAjIW9wdGlvbmFsIG1hcmspCiAg KGxldCAoKG1hcmsgKGlmIChkZWZhdWx0LW9iamVjdD8gbWFyaykgKGN1cnJlbnQtcG9pbnQpIG1h cmspKSkKICAgIChjb25kICgobGluZS1tYXJnaW4tY29tbWVudC1yZWdpb24gbWFyaykKICAgICAg ICAgICA9PiAobGFtYmRhIChyZWdpb24pCiAgICAgICAgICAgICAgICAobWFyay1wZXJtYW5lbnQh IG1hcmspCiAgICAgICAgICAgICAgICAobGV0KiAoKGJlZm9yZS1zZW1pIChyZWdpb24tc3RhcnQg cmVnaW9uKSkKICAgICAgICAgICAgICAgICAgICAgICAoYm9sIChsaW5lLXN0YXJ0IGJlZm9yZS1z ZW1pIDApKQogICAgICAgICAgICAgICAgICAgICAgIChjb2x1bW4gKHJlZ2lvbi1jb3VudC1jaGFy cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYWtlLXJlZ2lvbiBib2wgYmVmb3Jl LXNlbWkpKSkKICAgICAgICAgICAgICAgICAgICAgICAoY29tbWVudCAoZXh0cmFjdC1hbmQtZGVs ZXRlLXN0cmluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUtc2VtaQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVnaW9uLWVuZCByZWdpb24pKSkpCiAg ICAgICAgICAgICAgICAgIChkZWxldGUtaG9yaXpvbnRhbC1zcGFjZSBiZWZvcmUtc2VtaSkKICAg ICAgICAgICAgICAgICAgKGxldCAoKGNvcHkgKG1hcmstdGVtcG9yYXJ5LWNvcHkgbWFyaykpKQog ICAgICAgICAgICAgICAgICAgIChpbnNlcnQtbmV3bGluZSBtYXJrKQogICAgICAgICAgICAgICAg ICAgIChpbmRlbnQtdG8gY29sdW1uIDAgY29weSkKICAgICAgICAgICAgICAgICAgICAoaW5zZXJ0 LXN0cmluZyBjb21tZW50IChsaW5lLWVuZCBjb3B5IDApKSkpKSkKICAgICAgICAgIChlbHNlCiAg ICAgICAgICAgKGluc2VydC1uZXdsaW5lIG1hcmspKSkpKQoKOzs7IFRoaXMgYXNzdW1lcyB0aGF0 IFBPSU5UIGlzIGJlZm9yZSB0aGUgY29tbWVudCBvbiB0aGUgbGluZSwgaWYgdGhlcmUKOzs7IGlz IGEgY29tbWVudC4gIFRoaXMgYXNzdW1wdGlvbiBtYXkgYmUgZmxhd2VkIGZvciBnZW5lcmFsIHVz ZSwgYnV0Cjs7OyBpdCBpcyBndWFyYW50ZWVkIGJ5IHBhcmVkaXQncyB1c2Ugb2YgdGhpcyBwcm9j ZWR1cmUuCgooZGVmaW5lIChsaW5lLW1hcmdpbi1jb21tZW50LXJlZ2lvbiAjIW9wdGlvbmFsIHBv aW50KQogIChsZXQqICgocG9pbnQgKGlmIChkZWZhdWx0LW9iamVjdD8gcG9pbnQpCiAgICAgICAg ICAgICAgICAgICAgKGN1cnJlbnQtcG9pbnQpCiAgICAgICAgICAgICAgICAgICAgcG9pbnQpKQog ICAgICAgICAoZW9sIChsaW5lLWVuZCBwb2ludCAwKSkpCiAgICAobGV0IGxvb3AgKChwb2ludCBw b2ludCkKICAgICAgICAgICAgICAgKHN0YXRlIChjdXJyZW50LXBhcnNlLXN0YXRlIHBvaW50KSkp CiAgICAgIChjb25kICgoY2hhci1zZWFyY2gtZm9yd2FyZCAjXDsgcG9pbnQgZW9sKQogICAgICAg ICAgICAgPT4gKGxhbWJkYSAoYWZ0ZXItc2VtaSkKICAgICAgICAgICAgICAgICAgKGxldCAoKHN0 YXRlKiAocGFyc2UtcGFydGlhbC1zZXhwIHBvaW50IGFmdGVyLXNlbWkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNmICNmCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSkpKQogICAgICAgICAg ICAgICAgICAgIChpZiAob3IgKG1hcmstbGVmdC1jaGFyLXF1b3RlZD8gYWZ0ZXItc2VtaSkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChwYXJzZS1zdGF0ZS1pbi1zdHJpbmc/IHN0YXRlKikp CiAgICAgICAgICAgICAgICAgICAgICAgIChsb29wIGFmdGVyLXNlbWkgc3RhdGUqKQogICAgICAg ICAgICAgICAgICAgICAgICAobWFrZS1yZWdpb24gKG1hcmstMSsgYWZ0ZXItc2VtaSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVvbCkpKSkpCiAgICAgICAgICAgIChlbHNl ICNmKSkpKSkKCihkZWZpbmUgKHN0YXJ0LW9mLXNleHAtZm9yd2FyZCBtYXJrKQogIChiYWNrd2Fy ZC1zZXhwIChmb3J3YXJkLXNleHAgbWFyayAxICdFUlJPUikgMSkpCgooZGVmaW5lIChlbmQtb2Yt c2V4cC1iYWNrd2FyZCBtYXJrKQogIChmb3J3YXJkLXNleHAgKGJhY2t3YXJkLXNleHAgbWFyayAx ICdFUlJPUikgMSkpCgooZGVmaW5lIChpbnRlcnZlbmluZy10ZXh0PyBzdGFydCBlbmQpCiAgKG1h cmsvPSAoc2tpcC13aGl0ZXNwYWNlLWZvcndhcmQgc3RhcnQgZW5kKQogICAgICAgICAgZW5kKSkK DAooZGVmaW5lIChsaXNwLWluZGVudC1saW5lLWFuZC1zZXhwKQogIChsaXNwLWluZGVudC1saW5l ICNmKQogIChsZXQgKChwb2ludCAoY3VycmVudC1wb2ludCkpKQogICAgKGlmIChjb25kICgoZm9y d2FyZC1vbmUtc2V4cCBwb2ludCkKICAgICAgICAgICAgICAgPT4gKGxhbWJkYSAoZW5kKQogICAg ICAgICAgICAgICAgICAgIChtYXJrPSAobGluZS1zdGFydCAoYmFja3dhcmQtb25lLXNleHAgZW5k KSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZS1zdGFydCBwb2ludCAwKSkpKQog ICAgICAgICAgICAgIChlbHNlICNmKSkKICAgICAgICAobGlzcC1pbmRlbnQtc2V4cCBwb2ludCkp KSkKCjs7OyBJbiBwYXJlZGl0LmVsLCB0aGUgQUJTT0xVVEVMWT8gYXJndW1lbnQgZGV0ZXJtaW5l ZCB3aGV0aGVyIG9yIG5vdAo7OzsgdG8gb3ZlcnJpZGUgdGhlIEJMSU5LLU1BVENISU5HLVBBUkVO IHZhcmlhYmxlLCBiZWNhdXNlIGluIHNvbWUKOzs7IGNvbnRleHRzIFNIT1ctUEFSRU4tTU9ERSBz dWZmaWNlcyBmb3IgdGhlIHB1cnBvc2U7IGhvd2V2ZXIsIEVkd2luCjs7OyBoYXMgbm8gc3VjaCB2 YXJpYWJsZSBvciBTSE9XLVBBUkVOLU1PREUsIGJ1dCBJJ2QgbGlrZSB0byBtYWtlIGl0Cjs7OyBl YXN5IHRvIHN1cHBvcnQgdGhlbSBsYXRlciBvbi4KCihkZWZpbmUgKGZsYXNoLXNleHAtbWF0Y2gg IyFvcHRpb25hbCBhYnNvbHV0ZWx5PyBwb2ludCkKICBhYnNvbHV0ZWx5PwogIChtYXJrLWZsYXNo IChiYWNrd2FyZC1vbmUtc2V4cCAoaWYgKGRlZmF1bHQtb2JqZWN0PyBwb2ludCkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdXJyZW50LXBvaW50KQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnQpKQogICAgICAgICAgICAgICdSSUdIVCkpCgoo ZGVmaW5lIChjaGFyLW1hdGNoaW5nLXBhcmVuIGNoYXIpCiAgOysrIFRoaXMgaXMgYSBoaWRlb3Vz IGtsdWRnZS4gIFdoeSBpcyBpdCBuZWNlc3Nhcnk/ICBUaGVyZSBtdXN0IGJlCiAgOysrIHNvbWV0 aGluZyBidWlsdC1pbiB0aGF0IGRvZXMgdGhpcy4KICAoc3RyaW5nLXJlZiAoY2hhci1zeW50YXgt PnN0cmluZwogICAgICAgICAgICAgICAoZ2V0LWNoYXItc3ludGF4IChyZWYtdmFyaWFibGUgc3lu dGF4LXRhYmxlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIpKQogICAgICAg ICAgICAgIDEpKQoKOzs7IFRoaXMgYXNzdW1lcyB0aGF0IE1BUksgaXMgYWxyZWFkeSBpbiBhIHN0 cmluZy4KCihkZWZpbmUgKG1hcmstd2l0aGluLXN0cmluZy1lc2NhcGU/IG1hcmspCiAgKGxldCBs b29wICgoZmxhZyAjZikgKG1hcmsgbWFyaykpCiAgICAoaWYgKGNoYXI9PyAobWFyay1sZWZ0LWNo YXIgbWFyaykKICAgICAgICAgICAgICAgICNcXCkKICAgICAgICAobG9vcCAobm90IGZsYWcpICht YXJrLTErIG1hcmspKQogICAgICAgIGZsYWcpKSkKCihkZWZpbmUgKHNraXAtd2hpdGVzcGFjZS1m b3J3YXJkICMhb3B0aW9uYWwgc3RhcnQgZW5kKQogIChza2lwLWNoYXJzLWZvcndhcmQgKGNoYXIt c2V0LT5zdHJpbmcgY2hhci1zZXQ6d2hpdGVzcGFjZSkKICAgICAgICAgICAgICAgICAgICAgIHN0 YXJ0CiAgICAgICAgICAgICAgICAgICAgICBlbmQpKQoKKGRlZmluZSAoY2hhci1zZXQtPnN0cmlu ZyBjaGFyLXNldCkKICAobGlzdC0+c3RyaW5nIChjaGFyLXNldC1tZW1iZXJzIGNoYXItc2V0KSkp CgooZGVmaW5lICh1bmRvLXJlY29yZC1wb2ludCEgIyFvcHRpb25hbCBidWZmZXIpCiAgKGxldCAo KGdyb3VwIChidWZmZXItZ3JvdXAgKGlmIChkZWZhdWx0LW9iamVjdD8gYnVmZmVyKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoY3VycmVudC1idWZmZXIpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJ1ZmZlcikpKSkKICAgIChzZXQtZ3JvdXAtdW5kby1kYXRhISBn cm91cAogICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zIChtYXJrLWluZGV4IChncm91cC1w b2ludCBncm91cCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdyb3VwLXVuZG8t ZGF0YSBncm91cCkpKSkpCgooZGVmaW5lIChtb2RpZnktY3VycmVudC1wb2ludCEgbW9kaWZpZXIp CiAgKHNldC1jdXJyZW50LXBvaW50ISAobW9kaWZpZXIgKGN1cnJlbnQtcG9pbnQpKSkpCgwKOzs7 IEVkd2luIFZhcmlhYmxlczoKOzs7IG91dGxpbmUtcGF0dGVybjogIl4MXG47Ozs7KyIKOzs7IEVu ZDoK --=-=-=--