From mboxrd@z Thu Jan 1 00:00:00 1970 From: ludo@gnu.org (Ludovic =?utf-8?Q?Court=C3=A8s?=) Subject: Re: Web site news to move to Haunt Date: Fri, 28 Oct 2016 01:33:38 +0200 Message-ID: <87funh9xkd.fsf@gnu.org> References: <87oa27y1iw.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:38533) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bzuB8-0000yq-OR for guix-devel@gnu.org; Thu, 27 Oct 2016 19:33:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bzuB4-0005zI-PM for guix-devel@gnu.org; Thu, 27 Oct 2016 19:33:46 -0400 Received: from fencepost.gnu.org ([2001:4830:134:3::e]:40333) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bzuB4-0005zA-Jc for guix-devel@gnu.org; Thu, 27 Oct 2016 19:33:42 -0400 Received: from reverse-83.fdn.fr ([80.67.176.83]:57348 helo=pluto) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1bzuB2-0004rS-R9 for guix-devel@gnu.org; Thu, 27 Oct 2016 19:33:42 -0400 In-Reply-To: <87oa27y1iw.fsf@gnu.org> ("Ludovic \=\?utf-8\?Q\?Court\=C3\=A8s\=22'\?\= \=\?utf-8\?Q\?s\?\= message of "Wed, 26 Oct 2016 10:09:43 +0200") 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: guix-devel --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hello Guix! ludo@gnu.org (Ludovic Court=C3=A8s) skribis: > The goal is to manage news using Haunt, and to have a page to display > them on the web site, something nicer and more flexible than this: > > https://savannah.gnu.org/news/?group=3Dguix > > And I already enjoy Haunt! :-) I=E2=80=99m done! Please visit the news pages and report anything wrong! Also, please test the feed.xml file; currently IceCat reports that it =E2=80=9Cdoes not appear to have any style information associated with it=E2=80=9D, and thus doesn=E2=80=99t display it nicely. Maybe Haunt omits to emit (ah ha!) the doctype thingie? Because Savannah=E2=80=99s feeds only include the 20 newest entries=C2=B9, = Assaf Gordon, who works on Savannah, kindly exported the raw Guix news database for me (54 entries). The database contains the input markup, not the XML that appears in the feed. Of course the markup is nothing like Markdown, CommonMark, etc. So I considered writing a parser in Scheme, but that turned out to be trickier than I thought, so I turned back to running Savane=E2=80=99s own p= arser (PHP!). Since I don=E2=80=99t have PHP on Guix, I ran it on another machine where it=E2=80=99s installed: PHP as a service. And since I couldn=E2=80= =99t run all of Savane, I just hacked together =E2=80=98markup.php=E2=80=99 (attached). Hi= gh-quality work. And then I reused the atom-parsing code that used to be in our (www) module to get the damn entries and emit them as SXML for Haunt (file attached). Phewww. I think we should do the same for Guile real soon. Anyway, big thanks to Assaf! Ludo=E2=80=99. =C2=B9 https://lists.gnu.org/archive/html/savannah-hackers-public/2016-10/m= sg00017.html --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=markup.php Content-Transfer-Encoding: base64 PD9waHAKIyA8b25lIGxpbmUgdG8gZ2l2ZSBhIGJyaWVmIGlkZWEgb2Ygd2hhdCB0aGlzIGRvZXMu PgojIAojICBDb3B5cmlnaHQgMjAwNS0yMDA2IChjKSBUb2JpYXMgVG9lZHRlciA8dC50b2VkdGVy LS1nbXgubmV0PgojICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoaWV1IFJveSA8eWV1cG91 LS1nbnUub3JnPgojIAojIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFNhdmFuZS4KIyAKIyBTYXZhbmUg aXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoj IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzCiMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhl ciB2ZXJzaW9uIDMgb2YgdGhlCiMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KIyAKIyBTYXZhbmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgQWZmZXJvIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyAKIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4KCiMjIFByb3ZpZGVzIGZ1bmN0aW9ucyB0byBhbGxvdyB1c2VycyB0byBmb3JtYXQg dGhlIHRleHQgaW4gYSBzZWN1cmUgd2F5OgojIyAgICBtYXJrdXBfYmFzaWMoKSBmb3IgdmVyeSBs aWdodCBmb3JtYXR0aW5nCiMjICAgIG1hcmt1cF9yaWNoKCkgZm9yIGZvcm1hdHRpbmcgZXhjZXB0 aW5nIGhlYWRlcnMKIyMgICAgbWFya3VwX2Z1bGwoKSBmb3IgZnVsbCBmb3JtYXR0aW5nLCBpbmNs dWRpbmcgaGVhZGVycwoKcmVxdWlyZV9vbmNlKCd1dGlscy5waHAnKTsKCgojIyBXaWxsIHRlbGwg dGhlIHVzZXIgd2hhdCBpcyB0aGUgbGV2ZWwgb2YgbWFya3VwIGF2YWlsYWJsZSBpbiBhIHVuaWZv cm1pemVkCiMgd2F5LiAKIyBUYWtlcyBhcyBhcmd1bWVudCB0aGUgbGV2ZWwsIGJlaW5nIGZ1bGwg LyByaWNoIC8gYmFzaWMgLyBub25lCiMgVG8gYXZvaWQgbWFraW5nIHBhZ2UgbG9va2luZyBzdHJh bmdlLCB3ZSB3aWxsIHB1dCB0aGF0IG9ubHkgb24gdGV4dGFyZWEKIyB3aGVyZSBpdCBpcyBzdXBw b3NlZCB0byBiZSB0aGUgbW9zdCB1c2VmdWwKZnVuY3Rpb24gbWFya3VwX2luZm8oJGxldmVsLCAk YWRkaXRpb25uYWxfc3RyaW5nPWZhbHNlKQp7CiAgaWYgKCRsZXZlbCA9PSAnYmFzaWMnKQogICAg ewogICAgICAkc3RyaW5nID0gXygiQmFzaWMgTWFya3VwIik7CiAgICAgICR0ZXh0ID0gXygiT25s eSBiYXNpYyB0ZXh0IHRhZ3MgYXJlIGF2YWlsYWJsZSBpbiB0aGlzIGlucHV0IGZpZWxkLiIpOwog ICAgfQogIGVsc2VpZiAoJGxldmVsID09ICdyaWNoJykKICAgIHsKICAgICAgJHN0cmluZyA9IF8o IlJpY2ggTWFya3VwIik7CiAgICAgICR0ZXh0ID0gXygiUmljaCBhbmQgYmFzaWMgdGV4dCB0YWdz IGFyZSBhdmFpbGFibGUgaW4gdGhpcyBpbnB1dCBmaWVsZC4iKTsgICAgICAKICAgIH0KICBlbHNl aWYgKCRsZXZlbCA9PSAnZnVsbCcpIAogICAgewogICAgICAkc3RyaW5nID0gXygiRnVsbCBNYXJr dXAiKTsKICAgICAgJHRleHQgPSBfKCJFdmVyeSB0YWdzIGFyZSBhdmFpbGFibGUgaW4gdGhpcyBp bnB1dCBmaWVsZC4iKTsgICAgICAKICAgIH0KICBlbHNlaWYgKCRsZXZlbCA9PSAnbm9uZScpCiAg ICB7CiAgICAgICRzdHJpbmcgPSBfKCJObyBNYXJrdXAiKTsKICAgICAgJHRleHQgPSBfKCJObyB0 YWdzIGFyZSBhdmFpbGFibGUgaW4gdGhpcyBpbnB1dCBmaWVsZC4iKTsgICAgCiAgICB9CgogIGlm ICgkbGV2ZWwgIT0gJ25vbmUnKQogICAgewogICAgICAkdGV4dCAuPSAiICIuXygiQ2hlY2sgdGhl IE1hcmt1cCBSZW1pbmRlciBpbiBSZWxhdGVkIFJlY2lwZXMgZm9yIGEgZGVzY3JpcHRpb24gb2Yg dGhlc2UgdGFncy4iKTsKICAgIH0KCiAgcmV0dXJuICc8c3BhbiBjbGFzcz0ic21hbGxlciI+KCcu dXRpbHNfaGVscCgnPGltZyBzcmM9IicuJEdMT0JBTFNbJ3N5c19ob21lJ10uJ2ltYWdlcy8nLlNW X1RIRU1FLicudGhlbWUvbWlzYy9lZGl0LnBuZyIgYm9yZGVyPSIwIiBjbGFzcz0iaWNvbiIgYWx0 PSInLiRzdHJpbmcuJyIgLz4nLiRzdHJpbmcsIAoJCSAgICAkdGV4dCwKCQkgICAgdHJ1ZSkuJGFk ZGl0aW9ubmFsX3N0cmluZy4nKTwvc3Bhbj4nOwp9CgoKIyMKIyBDb252ZXJ0cyBzcGVjaWFsIG1h cmt1cCBjaGFyYWN0ZXJzIGluIHRoZSBpbnB1dCB0ZXh0IHRvIHJlYWwgSFRNTAojCiMgVGhlIGZv bGxvd2luZyBzeW50YXggaXMgc3VwcG9ydGVkOgojICogKndvcmQqIC0+IDxzdHJvbmc+d29yZDwv c3Ryb25nPgojICogX3dvcmRfIC0+IDxlbT53b3JkPC9lbT4KIyAqIFtodHRwOi8vZ25hLm9yZy9d IC0+IDxhIGhyZWY9Imh0dHA6Ly9nbmEub3JnLyI+aHR0cDovL2duYS5vcmcvPC9hPgojICogW2h0 dHA6Ly9nbmEub3JnLyB0ZXh0XSAtPiA8YSBocmVmPSJodHRwOi8vZ25hLm9yZy8iPnRleHQ8L2E+ CiMgKiAoYnVnfHRhc2t8Li4uKSAjMTIzNCAtPiBMaW5rIHRvIGNvcnJlc3BvbmRpbmcgcGFnZQoj CmZ1bmN0aW9uIG1hcmt1cF9iYXNpYygkdGV4dCkKewogICRsaW5lcyA9IGV4cGxvZGUoIlxuIiwg JHRleHQpOwogICRyZXN1bHQgPSBhcnJheSgpOwoKICBmb3JlYWNoICgkbGluZXMgYXMgJGxpbmUp CiAgICB7CiAgICAgICRyZXN1bHRbXSA9IF9tYXJrdXBfaW5saW5lKCRsaW5lKTsKICAgIH0KCiAg cmV0dXJuIGpvaW4oIlxuIiwgJHJlc3VsdCk7Cn0KCgoKIyMKIyBDb252ZXJ0cyBzcGVjaWFsIG1h cmt1cCBjaGFyYWN0ZXJzIGluIHRoZSBpbnB1dCB0ZXh0IHRvIHJlYWwgSFRNTAojCiMgVGhpcyBm dW5jdGlvbiBkb2VzIHRoZSBzYW1lIG1hcmt1cCBhcyB1dGlsc19iYXNpY19tYXJrdXAoKSwgcGx1 cwojIGl0IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmc6CiMgKiBwYXJhZ3JhcGhzCiMgKiBsaXN0cyAo PHVsPiBhbmQgPG9sPikKIyAqIG5lc3RlZCBsaXN0cwojICogaG9yaXpvbnRhbCBydWxlcnMKIwpm dW5jdGlvbiBtYXJrdXBfcmljaCgkdGV4dCkKewogIHJldHVybiBtYXJrdXBfZnVsbCgkdGV4dCwg ZmFsc2UpOwp9CgoKCiMjCiMgQ29udmVydHMgc3BlY2lhbCBtYXJrdXAgY2hhcmFjdGVycyBpbiB0 aGUgaW5wdXQgdGV4dCB0byByZWFsIEhUTUwKIwojIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgc2Ft ZSBtYXJrdXAgYXMgdXRpbHNfcmljaF9tYXJrdXAoKSwgcGx1cwojIGl0IGNvbnZlcnRzIGhlYWRp bmdzIHRvIDxoMz4gLi4uIDxoNj4KIwpmdW5jdGlvbiBtYXJrdXBfZnVsbCgkdGV4dCwgJGFsbG93 X2hlYWRpbmdzPXRydWUpCnsKICAkbGluZXMgPSBleHBsb2RlKCJcbiIsICR0ZXh0KTsKICAkcmVz dWx0ID0gYXJyYXkoKTsKCiAgIyB3ZSB1c2UgYSBzdGFjayAobGFzdCBpbiwgZmlyc3Qgb3V0KSB0 byB0cmFjayB0aGUgY3VycmVudAogICMgY29udGV4dCAocGFyYWdyYXBoLCBsaXN0cykgc28gd2Ug Y2FuIGNvcnJlY3RseSBjbG9zZSB0YWdzCiAgJGNvbnRleHRfc3RhY2sgPSBhcnJheSgpOwoKICAk cXVvdGVkX3RleHQgPSBmYWxzZTsKICAkdmVyYmF0aW0gPSBmYWxzZTsKICAjICRwcmludGVyID0g YXJyYXkoMSwgMik7CiAgZm9yZWFjaCAoJGxpbmVzIGFzICRpbmRleCA9PiAkbGluZSkKICAgIHsK CiAgICAgICMgdGhlIHZlcmJhdGltIHRhZ3MgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIG5lc3RlZCwg YmVjYXVzZQogICAgICAjIHRoZXkgYXJlIHRyYW5zbGF0ZWQgdG8gSFRNTCA8dGV4dGFyZWE+ICg8 cHJlPiBpbiBwcmludGVyIG1vZGUpLAogICAgICAjIHdoaWNoIGluIHR1cm4gaXMgYWxzbwogICAg ICAjIG5vdCBhbGxvd2VkIHRvIGJlIG5lc3RlZC4KICAgICAgIyB0aGVyZWZvcmUsIHdlIGRvbnQg bmVlZCBhIGNvdW50ZXIgb2YgdGhlIGxldmVsLCBidXQKICAgICAgIyBhIHNpbXBsZSBib29sIGZs YWcKICAgICAgIyBXZSBhbHNvIG5lZWQgdG8gYnVmZmVyaXplIHRoZSB2ZXJiYXRpbSBjb250ZW50 LCBhcyB3ZSB3YW50IHRvIG5vdwogICAgICAjIGl0cyBleGFjdCBudW1iZXIgb2YgbGluZXMKICAg ICAgIwogICAgICAjIHlldXBvdSwgMjAwNi0xMC0zMTogd2UgbmVlZCBhIHZlcmJhdGltIGNvdW50 LCBiZWNhdXNlIGFjdHVhbGx5IAogICAgICAjIHdlIG1heSB3YW50IHRvIHB1dCBhdCBsZWFzdCBv bmUgdmVyYmF0aW0gYmxvY2sgaW50byBhbm90aGVyLCBmb3IKICAgICAgIyBpbnN0YW5jZSBpbiB0 aGUgcmVjaXBlIHRoYXQgZXhwbGFpbiB0aGUgdmVyYmF0aW0gdGFnCiAgICAgIGlmIChwcmVnX21h dGNoKCcvKFsrXXZlcmJhdGltWytdKS8nLCAkbGluZSkgYW5kICEkdmVyYmF0aW0pCiAgICAgICAg ewogICAgICAgICAgJHZlcmJhdGltID0gMTsgIAoJICAkdmVyYmF0aW1fYnVmZmVyID0gJyc7Cgkg ICR2ZXJiYXRpbV9idWZmZXJfbGluZWNvdW50ID0gMDsKCgkgICRsaW5lID0gam9pbigiXG4iLCAk Y29udGV4dF9zdGFjayk7CgoJICBpZiAoZW1wdHkoJHByaW50ZXIpKQoJICAgIHsgYXJyYXlfdW5z aGlmdCgkY29udGV4dF9zdGFjaywgJzwvdGV4dGFyZWE+Jyk7IH0KCSAgZWxzZQoJICAgIHsgYXJy YXlfdW5zaGlmdCgkY29udGV4dF9zdGFjaywgJzwvcHJlPicpOyB9CgkgIAoJICAjIEp1bXAgdG8g dGhlIG5leHQgbGluZSwgYXNzdW1pbmcgdGhhdCB3ZSBjYW4gaWdub3JlIHRoZSByZXN0IG9mIHRo ZQoJICAjIGxpbmUKCSAgY29udGludWU7CiAgICAgICAgfQoKICAgICAgIyBJbmNyZW1lbnQgdGhl IHZlcmJhdGltIGNvdW50IGlmIHdlIGZpbmQgYSB2ZXJiYXRpbSBjbG9zaW5nIGluIGEgCiAgICAg ICMgdmVyYmF0aW0gZW52aXJvbm1lbnQKICAgICAgaWYgKHByZWdfbWF0Y2goJy8oWytddmVyYmF0 aW1bK10pLycsICRsaW5lKSBhbmQgJHZlcmJhdGltKQogICAgICAgIHsgJHZlcmJhdGltKys7IH0K CiAgICAgIGlmIChwcmVnX21hdGNoKCcvKFstXXZlcmJhdGltWy1dKS8nLCAkbGluZSkgYW5kICR2 ZXJiYXRpbSA9PSAxKQogICAgICAgIHsKICAgICAgICAgICR2ZXJiYXRpbSA9IGZhbHNlOwoKICAg ICAgICAgICRsaW5lID0gam9pbigiXG4iLCAkY29udGV4dF9zdGFjayk7CiAgICAgICAgICBhcnJh eV9zaGlmdCgkY29udGV4dF9zdGFjayk7CgogICAgICAgICAgI2FycmF5X3BvcCgkcmVzdWx0KTsg IyBubyBsb25nZXIgdXNlZnVsIHNpbmNlIHdlIGJ1ZmZlcml6ZSB2ZXJiYXRpbQoJICBpZiAoZW1w dHkoJHByaW50ZXIpKQoJICAgIHsKCSAgICAgICMgTGltaXQgdGhlIHRleHRhcmVhIHRvIDIwIGxp bmVzCgkgICAgICBpZiAoJHZlcmJhdGltX2J1ZmZlcl9saW5lY291bnQgPiAyMCkKCQl7ICR2ZXJi YXRpbV9idWZmZXJfbGluZWNvdW50ID0gMjA7IH0KCgkgICAgICAjIFVzZSBhIHRleHQgaW5wdXQg aWYgaXQgaXMgbm90IG11bHRpbGluZQoJICAgICAgaWYgKCR2ZXJiYXRpbV9idWZmZXJfbGluZWNv dW50IDwgMikKCQl7CgkJICAkcmVzdWx0W10gPSAnPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJ2 ZXJiYXRpbSIgcmVhZG9ubHk9InJlYWRvbmx5IiBzaXplPSI2MCIgdmFsdWU9IicuJHZlcmJhdGlt X2J1ZmZlci4nIiAvPic7CgkJfQoJICAgICAgZWxzZQoJCXsJCSAgCgkJICAkcmVzdWx0W10gPSAn PHRleHRhcmVhIGNsYXNzPSJ2ZXJiYXRpbSIgcmVhZG9ubHk9InJlYWRvbmx5IiByb3dzPSInLiR2 ZXJiYXRpbV9idWZmZXJfbGluZWNvdW50LiciIGNvbHM9IjgwIj4nLiR2ZXJiYXRpbV9idWZmZXIu JzwvdGV4dGFyZWE+JzsKCQl9CgkgICAgfQoJICBlbHNlCgkgICAgewoJICAgICAgJHJlc3VsdFtd ID0gJzxwcmUgY2xhc3M9InZlcmJhdGltIj4nLiR2ZXJiYXRpbV9idWZmZXIuJzwvcHJlPic7Cgkg ICAgfQoJICAkdmVyYmF0aW1fYnVmZmVyID0gJyc7CgkgICR2ZXJiYXRpbV9idWZmZXJfbGluZWNv dW50ID0gMDsKCSAgCgkgICMgSnVtcCB0byB0aGUgbmV4dCBsaW5lLCBhc3N1bWluZyB0aGF0IHdl IGNhbiBpZ25vcmUgdGhlIHJlc3Qgb2YgdGhlCgkgICMgbGluZQoJICBjb250aW51ZTsKICAgICAg ICB9CgogICAgICAjIERlY3JlbWVudCB0aGUgdmVyYmF0aW0gY291bnQgaWYgd2UgZmluZCBhIHZl cmJhdGltIGNsb3NpbmcgaW4gYSAKICAgICAgIyB2ZXJiYXRpbSBlbnZpcm9ubWVudAogICAgICBp ZiAocHJlZ19tYXRjaCgnLyhbLV12ZXJiYXRpbVstXSkvJywgJGxpbmUpIGFuZCAkdmVyYmF0aW0g PiAxKQoJICB7ICR2ZXJiYXRpbS0tOyB9CgogICAgICAjIGlmIHdlJ3JlIGluIHRoZSB2ZXJiYXRp bSBtYXJrdXAsIGRvbid0IGFwcGx5IHRoZSBtYXJrdXAKICAgICAgaWYgKCR2ZXJiYXRpbSkKICAg ICAgICB7CiAgICAgICAgICAjIGRpc2FibGUgdGhlICtub21hcmt1cCsgdGFncyBieSBpbnNlcnRp bmcgYSB1bmlxdWUgc3RyaW5nLgogICAgICAgICAgIyB0aGlzIGhhcyB0byBiZSBkb25lIGluIHRo ZSBvcmlnaW5hbCBzdHJpbmcsIGJlY2F1c2UgdGhhdAogICAgICAgICAgIyBpcyB0aGUgb25lIHdo aWNoIHdpbGwgYmUgc3BsaXQgdXBvbiB0aGUgK25vbWFya3VwKyB0YWdzLAogICAgICAgICAgIyBz ZWUgYmVsb3cKICAgICAgICAgICRlc2NhcGVkX2xpbmUgPSBzdHJfcmVwbGFjZSgnbm9tYXJrdXAn LAogICAgICAgICAgICAnbm8tMWE0ZjY3YTctNGVhZS00YWExLWEyZWYtZWVjZDhhZjZhOTk3LW1h cmt1cCcsICRsaW5lKTsKICAgICAgICAgICRsaW5lc1skaW5kZXhdID0gJGVzY2FwZWRfbGluZTsK ICAgICAgICAgICR2ZXJiYXRpbV9idWZmZXIgLj0gJGVzY2FwZWRfbGluZSAuICJcciI7CgkgICR2 ZXJiYXRpbV9idWZmZXJfbGluZWNvdW50Kys7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAg ewoJICAjIE90aGVyd2lzZSwgbm9ybWFsIHJ1biwgZG8gdGhlIG1hcmt1cAogICAgICAgICAgJHJl c3VsdFtdID0gX2Z1bGxfbWFya3VwKCRsaW5lLCAkYWxsb3dfaGVhZGluZ3MsICRjb250ZXh0X3N0 YWNrLCAkcXVvdGVkX3RleHQpOwkgIAoJfQoKICAgIH0KCiAgIyBtYWtlIHN1cmUgdGhhdCBhbGwg cHJldmlvdXNseSB1c2VkIGNvbnRleHRzIGdldCB0aGVpcgogICMgcHJvcGVyIGNsb3NpbmcgdGFn IGJ5IG1lcmdpbmcgaW4gdGhlIGxhc3QgY2xvc2luZyB0YWdzCiAgJG1hcmt1cF90ZXh0ID0gam9p bigiXG4iLCBhcnJheV9tZXJnZSgkcmVzdWx0LCAkY29udGV4dF9zdGFjaykpOwoKICAjIGl0cyBl YXNpZXN0IHRvIG1hcmt1cCBldmVyeXRoaW5nLCB3aXRob3V0IHN1cHBvcnRpbmcgdGhlIG5vbWFy a3VwCiAgIyB0YWcuIGFmdGVyd2FyZHMsIHdlIHJlcGxhY2UgZXZlcnkgbm9tYXJrdXAgdGFnIHBh aXIgd2l0aCB0aGUgY29udGVudAogICMgYmV0d2VlbiB0aG9zZSB0YWdzIGluIHRoZSBvcmlnaW5h bCBzdHJpbmcKICAkb3JpZ2luYWwgPSBwcmVnX3NwbGl0KCcvKFsrLV1ub21hcmt1cFsrLV0pLycs IGpvaW4oIlxuIiwgJGxpbmVzKSwgLTEsCiAgICBQUkVHX1NQTElUX0RFTElNX0NBUFRVUkUpOwog ICRtYXJrdXAgPSBwcmVnX3NwbGl0KCcvKFsrLV1ub21hcmt1cFsrLV0pLycsICRtYXJrdXBfdGV4 dCwgLTEsCiAgICBQUkVHX1NQTElUX0RFTElNX0NBUFRVUkUpOwogICMgc2F2ZSB0aGUgSFRNTCB0 YWdzIGZyb20gdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgbWFya3VwIGFycmF5LCBzZWUgYmVsb3cK ICAkbGFzdF90YWdzID0gJG1hcmt1cFtjb3VudCgkbWFya3VwKS0xXTsKICAkbm9tYXJrdXBfbGV2 ZWwgPSAwOwoKICBmb3JlYWNoICgkb3JpZ2luYWwgYXMgJGluZGV4ID0+ICRvcmlnaW5hbF90ZXh0 KQogICAgewogICAgICAjIGtlZXAgdHJhY2sgb2Ygbm9tYXJrdXAgdGFncwogICAgICBpZiAoJG9y aWdpbmFsX3RleHQgPT0gJytub21hcmt1cCsnKSAkbm9tYXJrdXBfbGV2ZWwrKzsKICAgICAgaWYg KCRvcmlnaW5hbF90ZXh0ID09ICctbm9tYXJrdXAtJykgJG5vbWFya3VwX2xldmVsLS07CgogICAg ICAjIGlmIHRoZSBjdXJyZW50IG1hdGNoIGlzIHRoZSBub21hcmt1cCB0YWcsIHdlIGRvbid0IHdh bnQgaXQgdG8KICAgICAgIyBzaG93IHVwIGluIHRoZSBtYXJrdXAgdGV4dCAtPiBzZXQgaXQgdG8g YW4gZW1wdHkgc3RyaW5nCiAgICAgIGlmIChwcmVnX21hdGNoKCcvKFsrLV1ub21hcmt1cFsrLV0p LycsICRvcmlnaW5hbF90ZXh0KSkKICAgICAgICB7CiAgICAgICAgICAkbWFya3VwWyRpbmRleF0g PSAnJzsKICAgICAgICAgICRvcmlnaW5hbF90ZXh0ID0gJyc7CiAgICAgICAgfQogICAgICAjIHdo aWxlIHdlJ3JlIGluIGEgbm9tYXJrdXAgZW52aXJvbm1lbnQsIHRoZSBhbHJlYWR5IG1hcmtlZCB1 cCB0ZXh0CiAgICAgICMgbmVlZHMgdG8gYmUgcmVwbGFjZWQgd2l0aCB0aGUgb3JpZ2luYWwgY29u dGVudC4gQWxzbywgd2UgbmVlZAogICAgICAjIHRvIGFkZCA8YnIgLz4gIHRhZ3MgZm9yIG5ld2xp bmVzLgogICAgICBpZiAoJG5vbWFya3VwX2xldmVsID4gMCkKICAgICAgICB7CiAgICAgICAgICAk bWFya3VwWyRpbmRleF0gPSBubDJicigkb3JpZ2luYWxfdGV4dCk7CiAgICAgICAgfQogICAgfQoK ICAjIG5vcm1hbGx5LCAkbm9tYXJrdXBfbGV2ZWwgbXVzdCBiZSB6ZXJvIGF0IHRoaXMgcG9pbnQu IGhvd2V2ZXIsIGlmCiAgIyB0aGUgdXNlciBzdWJtaXRzIHdyb25nIG1hcmt1cCBhbmQgZm9yZ2V0 cyB0byBjbG9zZSB0aGUgLW5vbWFya3VwLQogICMgdGFnLCB3ZSBuZWVkIHRvIHRha2UgY2FyZSBv ZiB0aGF0LgogICMgVG8gZG8gdGhpcywgd2UgbmVlZCB0byBsb29rIGZvciBjbG9zaW5nIHRhZ3Mg d2hpY2ggaGF2ZSBiZWVuIGRlbGV0ZWQuCiAgaWYgKCRub21hcmt1cF9sZXZlbCA+IDApCiAgICB7 CiAgICAgICR0cmFpbGluZ19tYXJrdXAgPSBhcnJheV9yZXZlcnNlKHNwbGl0KCJcbiIsICRsYXN0 X3RhZ3MpKTsKICAgICAgJHJlc3RvcmVkX3RhZ3MgPSAnJzsKICAgICAgZm9yZWFjaCAoJHRyYWls aW5nX21hcmt1cCBhcyAkdGFnKQogICAgICAgIHsKICAgICAgICAgIGlmIChwcmVnX21hdGNoKCcv XlxzKjxcL1thLXpdKz4kLycsICR0YWcpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgJHJl c3RvcmVkX3RhZ3MgPSAiXG4kdGFnJHJlc3RvcmVkX3RhZ3MiOwogICAgICAgICAgICB9CiAgICAg ICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAkbWFya3VwW10gPSAkcmVzdG9y ZWRfdGFnczsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg IH0KCiAgIyBsYXN0bHksIHJldmVydCB0aGUgZXNjYXBpbmcgb2YgK25vbWFya3VwKyB0YWdzIGRv bmUgYWJvdmUKICAjIGZvciB2ZXJiYXRpbSBlbnZpcm9ubWVudHMKICByZXR1cm4gc3RyX3JlcGxh Y2UoJ25vLTFhNGY2N2E3LTRlYWUtNGFhMS1hMmVmLWVlY2Q4YWY2YTk5Ny1tYXJrdXAnLAogICAg J25vbWFya3VwJywgam9pbignJywgJG1hcmt1cCkpOwp9CgoKIyBDb252ZXJ0IHdoYXRldmVyIGNv bnRlbnQgdGhhdCBjYW4gY29udGFpbiBtYXJrdXAgdG8gYSB2YWxpZCB0ZXh0IG91dHB1dAojIEl0 IHdvbnQgdG91Y2ggd2hhdCBzZWVtcyB0byBiZSB2YWxpZCBpbiB0ZXh0IGFscmVhZHksIG9yIHdo YXQgY2Fubm90CiMgYmUgY29udmVydGVkIGluIGEgdmVyeSBzYXRpc2ZhY3Rvcnkgd2F5LgojIFRo aXMgZnVuY3Rpb24gc2hvdWxkIGJlIG1pbmltYWwsIGp1c3QgdG8gYXZvaWQgd2VpcmQgdGhpbmdz LCBub3QgdG8gZG8KIyB2ZXJ5IGZhbmN5IHRoaW5ncy4KZnVuY3Rpb24gbWFya3VwX3RleHRvdXRw dXQgKCR0ZXh0KQp7CiAgJGxpbmVzID0gZXhwbG9kZSgiXG4iLCAkdGV4dCk7CiAgJHJlc3VsdCA9 IGFycmF5KCk7CgogICRwcm90b2NvbHMgPSAiaHR0cHM/fGZ0cHxzZnRwfGZpbGV8YWZzfG5mcyI7 CiAgJHNhdmFuZV90YWdzID0gInZlcmJhdGltfG5vbWFya3VwIjsKCiAgZm9yZWFjaCAoJGxpbmVz IGFzICRsaW5lKQogICAgewogICAgICAjIEhhbmRsZSBuYW1lZCBoeXBlcmxpbmsuCiAgICAgICRs aW5lID0gCglwcmVnX3JlcGxhY2UoCiAgICAgICAgICAgICAgIyBmaW5kIHRoZSBvcGVuaW5nIGJy YWNlICdbJwoJCSAgICAgJy9cWycKICAgICAgICAgICAgICAjIGZvbGxvd2VkIGJ5IHRoZSBwcm90 b2NvbCwgZWl0aGVyIGh0dHA6Ly8gb3IgaHR0cHM6Ly8KCQkgICAgIC4nKCgnLiRwcm90b2NvbHMu Jyk6XC9cLycKICAgICAgICAgICAgICAjIG1hdGNoIGFueSBjaGFyYWN0ZXIgZXhjZXB0IHdoaXRl c3BhY2Ugb3IgdGhlIGNsb3NpbmcKICAgICAgICAgICAgICAjIGJyYWNlICddJyBmb3IgdGhlIGFj dHVhbCBsaW5rCgkJICAgICAuJ1teXHNcXV0rKScKICAgICAgICAgICAgICAjIGZvbGxvd2VkIGJ5 IGF0IGxlYXN0IG9uZSB3aGl0ZXNwYWNlCgkJICAgICAuJ1xzKycKICAgICAgICAgICAgICAjIGZv bGxvd2VkIGJ5IGFueSBjaGFyYWN0ZXIgKG5vbi1ncmVlZHkpIGFuZCB0aGUKICAgICAgICAgICAg ICAjIG5leHQgY2xvc2luZyBicmFjZSAnXScKCQkgICAgIC4nKC4rPylcXS8nLCAnJDMgPCQxPics ICRsaW5lKTsKICAgICAgCiAgICAgICMgUmVtb3ZlIHNhdmFuZS1zcGVjaWZpYyB0YWdzCiAgICAg ICRsaW5lID0gcHJlZ19yZXBsYWNlKCcvXCsoJy4kc2F2YW5lX3RhZ3MuJylcKy8nLCAnJywgJGxp bmUpOwogICAgICAkbGluZSA9IHByZWdfcmVwbGFjZSgnL1wtKCcuJHNhdmFuZV90YWdzLicpXC0v JywgJycsICRsaW5lKTsKICAgICAgJHJlc3VsdFtdID0gJGxpbmU7CiAgICAgIAogICAgfQoKICBy ZXR1cm4gam9pbigiXG4iLCAkcmVzdWx0KTsKfQoKCiMjCiMgSW50ZXJuYWwgZnVuY3Rpb24gZm9y IHJlY29nbml6aW5nIGFuZCBmb3JtYXR0aW5nIHNwZWNpYWwgbWFya3VwCiMgY2hhcmFjdGVycyBp biB0aGUgaW5wdXQgbGluZSB0byByZWFsIEhUTUwKIwojIFRoaXMgZnVuY3Rpb24gaXMgYSBoZWxw ZXIgZm9yIHV0aWxzX2Z1bGxfbWFya3VwKCkgYW5kIHNob3VsZAojIG5vdCBiZSB1c2VkIG90aGVy d2lzZS4KIwpmdW5jdGlvbiBfZnVsbF9tYXJrdXAoJGxpbmUsICRhbGxvd19oZWFkaW5ncywgJiRj b250ZXh0X3N0YWNrLCAmJHF1b3RlZF90ZXh0KQp7CiAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICMgY29udGV4dCBmb3JtYXR0 aW5nCiAgIwogICMgdGhlIGNvZGUgYmVsb3cgbWFya3MgdXAgcmVjb2duaXplZCBzcGVjaWFsIGNo YXJhY3RlcnMsCiAgIyBieSBzdGFydGluZyBhIG5ldyBjb250ZXh0IChlLmcuIGhlYWRpbmdzIGFu ZCBsaXN0cykKICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCgogICMgZ2VuZXJhbGx5LCB3ZSB3YW50IHRvIHN0YXJ0IGEgbmV3IHBh cmFncmFwaC4gdGhpcyB3aWxsIGJlIHNldAogICMgdG8gZmFsc2UsIGlmIGEgbmV3IHBhcmFncmFw aCBpcyBubyBsb25nZXIgYXBwcm9wcmlhdGUsIGxpa2UKICAjIGZvciBoZWFkaW5ncyBvciBsaXN0 cwogICRzdGFydF9wYXJhZ3JhcGggPSB0cnVlOwoKICAjIE1hdGNoIHRoZSBoZWFkaW5ncywgZS5n LiA9PT0gaGVhZGluZyA9PT0KICBpZiAoJGFsbG93X2hlYWRpbmdzKQogICAgewogICAgICAkbGlu ZSA9IF9tYXJrdXBfaGVhZGluZ3MoJGxpbmUsICRjb250ZXh0X3N0YWNrLCAkc3RhcnRfcGFyYWdy YXBoKTsKICAgIH0KCiAgIyBNYXRjaCBsaXN0IGl0ZW1zCiAgJGxpbmUgPSBfbWFya3VwX2xpc3Rz KCRsaW5lLCAkY29udGV4dF9zdGFjaywgJHN0YXJ0X3BhcmFncmFwaCk7CgogICMgcmVwbGFjZSBm b3VyICctJyBzaWduIHdpdGggYSBob3Jpem9udGFsIHJ1bGVyCiAgaWYgKHByZWdfbWF0Y2goJy9e LS0tLVxzKiQvJywgJGxpbmUpKQogICAgewogICAgICAkbGluZSA9IGpvaW4oIlxuIiwgJGNvbnRl eHRfc3RhY2spLic8aHIgLz4nOwogICAgICAkY29udGV4dF9zdGFjayA9IGFycmF5KCk7CiAgICAg ICRzdGFydF9wYXJhZ3JhcGggPSBmYWxzZTsKICAgIH0KCiAgIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICMgaW5saW5lIGZvcm1h dHRpbmcKICAjCiAgIyB0aGUgY29kZSBiZWxvdyBtYXJrcyB1cCByZWNvZ25pemVkIHNwZWNpYWwg Y2hhcmFjdGVycywKICAjIHdpdGhvdXQgc3RhcnRpbmcgYSBuZXcgY29udGV4dCAoZS5nLiA8c3Ry b25nPiBhbmQgPGVtPikKICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCgogICRsaW5lID0gX21hcmt1cF9pbmxpbmUoJGxpbmUpOwoK ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCiAgIyBwYXJhZ3JhcGggZm9ybWF0dGluZwogICMKICAjIHRoZSBjb2RlIGJlbG93IGlz IHJlc3BvbnNpYmxlIGZvciBkb2luZyB0aGUgUmlnaHQgVGhpbmcodG0pCiAgIyBieSBlaXRoZXIg c3RhcnRpbmcgYSBuZXcgcGFyYWdyYXBoIGFuZCBjbG9zaW5nIGFueSBwcmV2aW91cwogICMgY29u dGV4dCBvciBjb250aW51aW5nIGFuIGV4aXN0aW5nIHBhcmFncmFwaAogICMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiAgIyBjaGFu Z2UgdGhlIHF1b3RlaW5nIG1vZGUgd2hlbiB0aGUgbGluZSBzdGFydCB3aXRoICc+JwogIGlmIChz dWJzdHIoJGxpbmUsIDAsIDQpID09ICcmZ3Q7JykKICAgIHsKICAgICAgIyBpZiB0aGUgcHJldmlv dXMgbGluZSB3YXMgbm90IHF1b3RlZCwgc3RhcnQgYSBuZXcgcXVvdGUgcGFyYWdyYXBoCiAgICAg IGlmICghJHF1b3RlZF90ZXh0KQogICAgICAgIHsKICAgICAgICAgICRsaW5lID0gam9pbigiXG4i LCAkY29udGV4dF9zdGFjaykuIjxwIGNsYXNzPVwicXVvdGVcIj4kbGluZSI7CiAgICAgICAgICAj IGVtcHR5IHRoZSBzdGFjawogICAgICAgICAgJGNvbnRleHRfc3RhY2sgPSBhcnJheSgnPC9wPicp OwogICAgICAgICAgJHN0YXJ0X3BhcmFncmFwaCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgJHF1 b3RlZF90ZXh0ID0gdHJ1ZTsKICAgIH0KICBlbHNlCiAgICB7CiAgICAgICMgaWYgdGhlIHByZXZp b3VzIGxpbmUgd2FzIHF1b3RlZCwgZW5kIHRoZSBxdW90ZSBwYXJhZ3JhcGgKICAgICAgaWYgKCRx dW90ZWRfdGV4dCBhbmQgJHN0YXJ0X3BhcmFncmFwaCBhbmQgJGxpbmUgIT0gJycpCiAgICAgICAg ewogICAgICAgICAgJGxpbmUgPSBqb2luKCJcbiIsICRjb250ZXh0X3N0YWNrKS4iXG48cD4kbGlu ZSI7CiAgICAgICAgICAjIGVtcHR5IHRoZSBzdGFjawogICAgICAgICAgJGNvbnRleHRfc3RhY2sg PSBhcnJheSgnPC9wPicpOwogICAgICAgIH0KICAgICAgJHF1b3RlZF90ZXh0ID0gZmFsc2U7CiAg ICB9CgogICMgZG9uJ3Qgc3RhcnQgYSBuZXcgcGFyYWdyYXBoIGFnYWluLCBpZiB3ZSBhbHJlYWR5 IGRpZCB0aGF0CiAgaWYgKGlzc2V0KCRjb250ZXh0X3N0YWNrWzBdKSAmJiAkY29udGV4dF9zdGFj a1swXSA9PSAnPC9wPicpCiAgICB7CiAgICAgICRzdGFydF9wYXJhZ3JhcGggPSBmYWxzZTsKICAg IH0KCiAgIyBhZGQgcHJvcGVyIGNsb3NpbmcgdGFncyB3aGVuIHdlIGVuY291bnRlciBhbiBlbXB0 eSBsaW5lLgogICMgbm90ZSB0aGF0IHRoZXJlIG1pZ2h0IGJlIG5vIGNsb3NpbmcgdGFncywgaW4g dGhpcyBjYXNlCiAgIyB0aGUgbGluZSB3aWxsIHJlbWFpbiBlbXRweS4KICBpZiAocHJlZ19tYXRj aCgnL14ofFxzKikkLycsICRsaW5lKSkKICAgIHsKICAgICAgJGxpbmUgPSBqb2luKCJcbiIsICRj b250ZXh0X3N0YWNrKS4iJGxpbmUiOwogICAgICAjIGVtcHR5IHRoZSBzdGFjawogICAgICAkY29u dGV4dF9zdGFjayA9IGFycmF5KCk7CiAgICAgICRzdGFydF9wYXJhZ3JhcGggPSBmYWxzZTsKICAg IH0KCiAgIyBGaW5hbGx5IHN0YXJ0IGEgbmV3IHBhcmFncmFwaCBpZiBhcHByb3ByaWF0ZQogIGlm ICgkc3RhcnRfcGFyYWdyYXBoKQogICAgewogICAgICAjIG1ha2Ugc3VyZSB0aGF0IGFsbCBwcmV2 aW91c2x5IHVzZWQgY29udGV4dHMgZ2V0IHRoZWlyCiAgICAgICMgcHJvcGVyIGNsb3NpbmcgdGFn CiAgICAgICRsaW5lID0gam9pbigiXG4iLCAkY29udGV4dF9zdGFjaykuIjxwPiRsaW5lIjsKICAg ICAgIyBlbXB0eSB0aGUgc3RhY2sKICAgICAgJGNvbnRleHRfc3RhY2sgPSBhcnJheSgnPC9wPicp OwogICAgfQoKICAjIGFwcGVuZCBhIGxpbmVicmVhayB3aGlsZSBpbiBwYXJhZ3JhcGggbW9kZQog IGlmIChpc3NldCgkY29udGV4dF9zdGFja1swXSkgJiYgJGNvbnRleHRfc3RhY2tbMF0gPT0gJzwv cD4nKQogICAgewogICAgICAkbGluZSAuPSAnPGJyIC8+JzsKICAgIH0KCiAgcmV0dXJuICRsaW5l Owp9CgoKCiMjCiMgSW50ZXJuYWwgZnVuY3Rpb24gZm9yIHJlY29nbml6aW5nIGFuZCBmb3JtYXR0 aW5nIGhlYWRpbmdzCiMKIyBUaGlzIGZ1bmN0aW9uIGlzIGEgaGVscGVyIGZvciBfZnVsbF9tYXJr dXAoKSBhbmQgc2hvdWxkCiMgbm90IGJlIHVzZWQgb3RoZXJ3aXNlLgojCmZ1bmN0aW9uIF9tYXJr dXBfaGVhZGluZ3MoJGxpbmUsICYkY29udGV4dF9zdGFjaywgJiRzdGFydF9wYXJhZ3JhcGgpCnsK ICBpZiAocHJlZ19tYXRjaCgKICAgICMgZmluZCBvbmUgdG8gZm91ciAnPScgc2lnbnMgYXQgdGhl IHN0YXJ0IG9mIGEgbGluZQogICAgJy9eKD17MSw0fSknCiAgICAjIGZvbGxvd2VkIGJ5IGV4YWN0 bHkgb25lIHNwYWNlCiAgICAuJyAnCiAgICAjIGZvbGxvd2VkIGJ5IGFueSBjaGFyYWN0ZXIKICAg IC4nKC4rKScKICAgICMgZm9sbG93ZWQgYnkgZXhhY3RseSBvbmUgc3BhY2UKICAgIC4nICcKICAg ICMgZm9sbG93ZWQgYnkgb25lIHRvIGZvdXIgJz0nIHNpZ25zIGF0IHRoZSBlbmQgb2YgYSBsaW5l ICh3aGl0ZXNwYWNlIGFsbG93ZWQpCiAgICAuJyg9ezEsNH0pXHMqJC8nLCAkbGluZSwgJG1hdGNo ZXMpKQogICAgewogICAgICAkaGVhZGVyX2xldmVsX3N0YXJ0ID0gbWF4KG1pbihzdHJsZW4oJG1h dGNoZXNbMV0pLCA0KSwgMSk7CiAgICAgICRoZWFkZXJfbGV2ZWxfZW5kID0gc3RybGVuKCRtYXRj aGVzWzNdKTsKICAgICAgaWYgKCRoZWFkZXJfbGV2ZWxfc3RhcnQgPT0gJGhlYWRlcl9sZXZlbF9l bmQpCiAgICAgICAgewogICAgICAgICAgIyBpZiB0aGUgdXNlciB0eXBlcyAnPSBoZWFkaW5nID0n IChvbmUgJz0nIHNpZ24pLCBpdCB3aWxsCiAgICAgICAgICAjIGFjdHVhbGx5IGJlIHJlbmRlcmVk IGFzIGEgbGV2ZWwgMyBoZWFkaW5nIDxoMz4KICAgICAgICAgICRoZWFkZXJfbGV2ZWxfc3RhcnQg Kz0gMjsKICAgICAgICAgICRoZWFkZXJfbGV2ZWxfZW5kICs9IDI7CgogICAgICAgICAgJGxpbmUg PSAiPGgkaGVhZGVyX2xldmVsX3N0YXJ0PiRtYXRjaGVzWzJdPC9oJGhlYWRlcl9sZXZlbF9lbmQ+ IjsKICAgICAgICAgICMgbWFrZSBzdXJlIHRoYXQgYWxsIHByZXZpb3VzbHkgdXNlZCBjb250ZXh0 cyBnZXQgdGhlaXIKICAgICAgICAgICMgcHJvcGVyIGNsb3NpbmcgdGFnCiAgICAgICAgICAkbGlu ZSA9IGpvaW4oIlxuIiwgJGNvbnRleHRfc3RhY2spLiRsaW5lOwogICAgICAgICAgIyBlbXB0eSB0 aGUgc3RhY2sKICAgICAgICAgICRjb250ZXh0X3N0YWNrID0gYXJyYXkoKTsKICAgICAgICAgICRz dGFydF9wYXJhZ3JhcGggPSBmYWxzZTsKICAgICAgICB9CiAgICB9CiAgcmV0dXJuICRsaW5lOwp9 CgoKCiMjCiMgSW50ZXJuYWwgZnVuY3Rpb24gZm9yIHJlY29nbml6aW5nIGFuZCBmb3JtYXR0aW5n IGxpc3RzCiMKIyBUaGlzIGZ1bmN0aW9uIGlzIGEgaGVscGVyIGZvciBfZnVsbF9tYXJrdXAoKSBh bmQgc2hvdWxkCiMgbm90IGJlIHVzZWQgb3RoZXJ3aXNlLgojCmZ1bmN0aW9uIF9tYXJrdXBfbGlz dHMoJGxpbmUsICYkY29udGV4dF9zdGFjaywgJiRzdGFydF9wYXJhZ3JhcGgpCnsKICBpZiAocHJl Z19tYXRjaCgnL15ccz8oWyowXSspICguKykkLycsICRsaW5lLCAkbWF0Y2hlcykpCiAgICB7CiAg ICAgICMgZGV0ZXJtaW5lIHRoZSBsaXN0IGxldmVsIGN1cnJlbnRseSBpbiB1c2UKICAgICAgJGN1 cnJlbnRfbGlzdF9sZXZlbCA9IDA7CiAgICAgIGZvcmVhY2ggKCRjb250ZXh0X3N0YWNrIGFzICRj b250ZXh0KQogICAgICAgIHsKICAgICAgICAgIGlmICgkY29udGV4dCA9PSAnPC91bD4nIG9yICRj b250ZXh0ID09ICc8L29sPicpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAkY3VycmVudF9s aXN0X2xldmVsKys7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAjIGRldGVybWluZSB3 aGV0aGVyIHRoZSB1c2VyIGxpc3QgbGV2ZWxzIG1hdGNoIHRoZSBsaXN0CiAgICAgICMgbGV2ZWwg d2UgaGF2ZSBpbiBvdXIgY29udGV4dCBzdGFjawogICAgICAjCiAgICAgICMgdGhpcyB3aWxsIGNh dGNoIChwb3RlbnRpYWwpIGVycm9ycyBvZiB0aGUgZm9sbG93aW5nIGZvcm06CiAgICAgICMgKiBs aXN0IHN0YXJ0CiAgICAgICMgMCBtYXliZSB3cm9uZyBsaXN0IGNoYXJhY3RlcgogICAgICAjICog bGlzdCBlbmQKICAgICAgJG1hcmt1cF9wb3NpdGlvbiA9IDA7CiAgICAgIGZvcmVhY2ggKGFycmF5 X3JldmVyc2UoJGNvbnRleHRfc3RhY2spIGFzICRjb250ZXh0KQogICAgICAgIHsKICAgICAgICAg ICMgd2Ugb25seSBjYXJlIGZvciB0aGUgbGlzdCB0eXBlcwogICAgICAgICAgaWYgKCRjb250ZXh0 ICE9ICc8L3VsPicgYW5kICRjb250ZXh0ICE9ICc8L29sPicpCiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICRtYXJrdXBfY2hhcmFj dGVyID0gc3Vic3RyKCRtYXRjaGVzWzFdLCAkbWFya3VwX3Bvc2l0aW9uLCAxKTsKCiAgICAgICAg ICBpZiAoKCRtYXJrdXBfY2hhcmFjdGVyID09PSAnKicgYW5kICRjb250ZXh0ICE9ICc8L3VsPicp CiAgICAgICAgICAgIG9yICgkbWFya3VwX2NoYXJhY3RlciA9PT0gJzAnIGFuZCAkY29udGV4dCAh PSAnPC9vbD4nKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICMgZm9yY2UgYSBuZXcgYW5k IGNsZWFuIGxpc3Qgc3RhcnQKICAgICAgICAgICAgICAkY3VycmVudF9saXN0X2xldmVsID0gMDsK ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgJG1hcmt1cF9wb3NpdGlvbisrOwogICAgICAgICAgICB9CiAg ICAgICAgfQoKICAgICAgIyBpZiB3ZSBhcmUgbm90IGluIGEgbGlzdCwgY2xvc2UgdGhlIHByZXZp b3VzIGNvbnRleHQKICAgICAgJGxpbmUgPSAnJzsKICAgICAgaWYgKCRjdXJyZW50X2xpc3RfbGV2 ZWwgPT0gMCkKICAgICAgICB7CiAgICAgICAgICAkbGluZSA9IGpvaW4oIlxuIiwgJGNvbnRleHRf c3RhY2spOwogICAgICAgICAgJGNvbnRleHRfc3RhY2sgPSBhcnJheSgpOwogICAgICAgIH0KCiAg ICAgICMgZGV0ZXJtaW5lIHRoZSBsaXN0IGxldmVsIHRoZSB1c2VyIHdhbnRlZAogICAgICAkd2Fu dGVkX2xpc3RfbGV2ZWwgPSBzdHJsZW4oJG1hdGNoZXNbMV0pOwoKICAgICAgIyBoZXJlIHdlIHN0 YXJ0IGEgbmV3IGxpc3QgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoZSBtYXJrdXAKICAgICAgIyBpcyB2 YWxpZCwgZXZlbiBpZiB0aGUgdXNlciBkaWQgc2tpcCBvbmUgb3IgbW9yZSBsaXN0IGxldmVscwog ICAgICAkbGlzdF9sZXZlbF9jb3VudGVyID0gJGN1cnJlbnRfbGlzdF9sZXZlbDsKICAgICAgd2hp bGUgKCRsaXN0X2xldmVsX2NvdW50ZXIgPCAkd2FudGVkX2xpc3RfbGV2ZWwpCiAgICAgICAgewog ICAgICAgICAgc3dpdGNoIChzdWJzdHIoJG1hdGNoZXNbMV0sICRsaXN0X2xldmVsX2NvdW50ZXIs IDEpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2FzZSAnKic6CiAgICAgICAgICAgICAg ICAkdGFnID0gJ3VsJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2Ug JzAnOgogICAgICAgICAgICAgICAgJHRhZyA9ICdvbCc7CiAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgfQogICAgICAgICAgJGxpbmUgLj0gIjwkdGFnPlxuPGxpPiI7CiAgICAgICAg ICBhcnJheV91bnNoaWZ0KCRjb250ZXh0X3N0YWNrLCAiPC8kdGFnPiIpOwogICAgICAgICAgYXJy YXlfdW5zaGlmdCgkY29udGV4dF9zdGFjaywgIjwvbGk+Iik7CiAgICAgICAgICAkbGlzdF9sZXZl bF9jb3VudGVyKys7CiAgICAgICAgfQoKICAgICAgIyBoZXJlIHdlIGVuZCBhIHByZXZpb3VzIGxp c3QgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoZSBtYXJrdXAKICAgICAgIyBpcyB2YWxpZCwgZXZlbiBp ZiB0aGUgdXNlciBkaWQgc2tpcCBvbmUgb3IgbW9yZSBsaXN0IGxldmVscwogICAgICAkbGlzdF9s ZXZlbF9jb3VudGVyID0gJGN1cnJlbnRfbGlzdF9sZXZlbDsKICAgICAgd2hpbGUgKCRsaXN0X2xl dmVsX2NvdW50ZXIgPiAkd2FudGVkX2xpc3RfbGV2ZWwpCiAgICAgICAgewogICAgICAgICAgJGxp bmUgLj0gYXJyYXlfc2hpZnQoJGNvbnRleHRfc3RhY2spLiJcbiIKICAgICAgICAgICAgLmFycmF5 X3NoaWZ0KCRjb250ZXh0X3N0YWNrKS4iXG4iOwogICAgICAgICAgJGxpc3RfbGV2ZWxfY291bnRl ci0tOwogICAgICAgIH0KCiAgICAgICMgcHJlcGFyZSB0aGUgbmV4dCBpdGVtIG9mIHRoZSBzYW1l IGxpc3QgbGV2ZWwKICAgICAgaWYgKCRjdXJyZW50X2xpc3RfbGV2ZWwgPj0gJHdhbnRlZF9saXN0 X2xldmVsKQogICAgICAgIHsKICAgICAgICAgICRsaW5lIC49ICI8L2xpPlxuPGxpPiI7CiAgICAg ICAgfQoKICAgICAgIyBmaW5hbGx5LCBhcHBlbmQgdGhlIGxpc3QgaXRlbQogICAgICAkbGluZSAu PSAkbWF0Y2hlc1syXTsKICAgICAgJHN0YXJ0X3BhcmFncmFwaCA9IGZhbHNlOwogICAgfQogIHJl dHVybiAkbGluZTsKfQoKCgojIwojIEludGVybmFsIGZ1bmN0aW9uIGZvciByZWNvZ25pemluZyBh bmQgZm9ybWF0dGluZyBpbmxpbmUgdGFncyBhbmQgbGlua3MKIwojIFRoaXMgZnVuY3Rpb24gaXMg YSBoZWxwZXIgZm9yIF9mdWxsX21hcmt1cCgpIGFuZCBzaG91bGQKIyBub3QgYmUgdXNlZCBvdGhl cndpc2UuCiMKZnVuY3Rpb24gX21hcmt1cF9pbmxpbmUoJGxpbmUpCnsKICAjIEdyb3VwX2lkIG1h eSBiZSBuZWNlc3NhcnkgZm9yIHJlY2lwZSAjbm5uIGxpbmtzCiAgZ2xvYmFsICRncm91cF9pZDsK CiAgJGNvbWluZ2Zyb20gPSAnJzsKICBpZiAoJGdyb3VwX2lkKQogICAgewogICAgICAkY29taW5n ZnJvbSA9ICImYW1wO2NvbWluZ2Zyb209JGdyb3VwX2lkIjsKICAgIH0KCiAgaWYgKHN0cmxlbigk bGluZSkgPT0gMCkKICAgIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAjIFJlZ2V4cCBvZiBwcm90 b2NvbHMgc3VwcG9ydGVkIGluIGh5cGVybGlua3MgKHNob3VsZCBiZSBwcm90b2NvbHMgdGhhdAog ICMgd2UgY2FuIGV4cGVjdCB3ZWIgYnJvd3NlcnMgdG8gc3VwcG9ydCkKICAkcHJvdG9jb2xzID0g Imh0dHBzP3xmdHB8c2Z0cHxmaWxlfGFmc3xuZnMiOwoKICAjIFByZXBhcmUgdXN1YWwgbGlua3M6 IHByZWZpeCAid3d3LiIgd2l0aCAiaHR0cDovLyIKICAjIGlmIGl0IGlzIHByZWNlZGVkIGJ5IFsg b3Igd2hpdGVzcGFjZSBvciBhdCB0aGUgYmVnaW5uaW5nIG9mIGxpbmUuCiAgIyAoZG9uJ3Qgd2Fu dCB0byBwcmVmaXggaW4gY2FzZXMgbGlrZSAiLy93d3cuLiIgb3IgIm5nd3d3Li4uIikKICAkbGlu ZSA9IHByZWdfcmVwbGFjZSgnLyhefFxzfFxbKSh3d3dcLikvaScsICckMWh0dHA6Ly8kMicsICRs aW5lKTsgCgogICMgcmVwbGFjZSB0aGUgQCBzaWduIHdpdGggYW4gSFRNTCBlbnRpdHksIGlmIGl0 IGlzIHVzZWQgd2l0aGluCiAgIyBhbiB1cmwgKGUuZy4gZm9yIHBvaW50ZXJzIHRvIG1haWxpbmcg bGlzdHMpLiBUaGlzIHdheSwgdGhlCiAgIyBAIHNpZ24gZG9lc24ndCBnZXQgbWFuZ2xlZCBpbiB0 aGUgZS1tYWlsIG1hcmt1cCBjb2RlCiAgIyBiZWxvdy4gU2VlIGJ1ZyAjMjY4OSBvbiBodHRwOi8v Z25hLm9yZy8gZm9yIHJlZmVyZW5jZS4KICAkbGluZSA9IGVyZWdpX3JlcGxhY2UoIihbYS16XSs6 Ly9bXjw+WzpzcGFjZTpdXSspQCIsICJcXDEmIzY0OyIsICRsaW5lKTsKCiAgIyBQcmVwYXJlIHRo ZSBtYXJrdXAgZm9yIG5vcm1hbCBsaW5rcywgZS5nLiBodHRwOi8vdGVzdC5vcmcsIGJ5CiAgIyBz dXJyb3VuZGluZyB0aGVtIHdpdGggYnJhY2VzIFtdCiAgIyAoJiA9IGJlZ2luIG9mIGh0bWwgZW50 aXRpZXMsIGl0IG1lYW5zIGEgZW5kIG9mIHN0cmluZyB1bmxlc3MKICAjIGl0IGlzICZhbXA7IHdo aWNoIGl0c2VsZiBpcyB0aGUgZW50aXR5IGZvciAmKQogICRsaW5lID0gcHJlZ19yZXBsYWNlKCcv KF58XHN8W15cW10pKCgnLiRwcm90b2NvbHMuJyk6XC9cLygmYW1wO3xbXlxzJl0rW2EtejAtOVwv Xl0pKykvaScsCiAgICAnJDFbJDJdJywgJGxpbmUpOwoKICAjIGRvIGEgbWFya3VwIGZvciBtYWls IGxpbmtzLCBlLmcuIGluZm9Ac3VwcG9ydC5vcmcKICAjIChkbyBub3QgdXNlIHV0aWxzX2VtYWls cywgdGhpcyBkb2VzIGV4dGVuc2l2ZSBkYXRhYmFzZQogICMgc2VhcmNoIG9uIHRoZSBzdHJpbmcK ICAjIGFuZCByZXBsYWNlIGFkZHJlc3NlcyBpbiBzZXZlcmFsIGZhc2hpb24uIEhlcmUgd2UganVz dCB3YW50IHRvIG1ha2UKICAjIGEgbGluaykuIE1ha2Ugc3VyZSB0aGF0ICdjdnMgLWQ6cHNlcnZl cjphbm9ueW1vdXNAY3ZzLnN2LmdudS5vcmc6Ly4uLicKICAjIGlzIE5PVCByZXBsYWNlZC4KICAk bGluZSA9IHByZWdfcmVwbGFjZSgiLyhefFxzKShbYS16MC05XystLl0rQChbYS16MC05XystXStc LikrW2Etel0rKShcc3wkKS9pIiwKCQkgICAgICAgJ1wxJyAuIHV0aWxzX2VtYWlsX2Jhc2ljKCdc MicpIC4gJ1w0JywgJGxpbmUpOwoKICAjIExpbmtzIGJldHdlZW4gaXRlbXMKICAjIEZJWE1FOiBp dCBzaG91bGQgYmUgaTE4biwgYnV0IGluIGEgY2xldmVyIHdheSwgbWVhbmluZyB0aGF0IGV2ZXJ5 dGltZQogICMgYSBmb3JtIGlzIHN1Ym1pdHRlZCB3aXRoIHN1Y2ggc3RyaW5nLCB0aGUgc3RyaW5n IGdldCBjb252ZXJ0ZWQgaW4KICAjIGVuZ2xpc2ggc28gd2UgYWx3YXlzIGdldCB0aGUgbGlua3Mg Zm91bmQgd2l0aG91dCBoYXZpbmcgYSByZWdleHAKICAjIGluY2x1ZGluZyBldmVyeSBwb3NzaWJs ZSBsYW5ndWFnZS4KICAkdHJhY2tlcnMgPSBhcnJheSAoCiAgICAgICJidWdzPyIgPT4gImJ1Z3Mv PyIsCiAgICAgICJzdXBwb3J0fHNyIiA9PiAic3VwcG9ydC8/IiwKICAgICAgInRhc2tzPyIgPT4g InRhc2svPyIsCiAgICAgICJyZWNpcGVzP3xyY3AiID0+ICJjb29rYm9vay8/ZnVuYz1kZXRhaWxp dGVtJGNvbWluZ2Zyb20mYW1wO2l0ZW1faWQ9IiwKICAgICAgInBhdGNoIiA9PiAicGF0Y2gvPyIs CiAgICAgICMgSW4gdGhpcyBjYXNlLCB3ZSBtYWtlIHRoZSBsaW5rIHBvaW50aW5nIHRvIHN1cHBv cnQsIGl0IHdvbnQgbWF0dGVyLAogICAgICAjIHRoZSBkb3dubG9hZCBwYWdlIGlzIGluIGV2ZXJ5 IHRyYWNrZXIgYW5kIGRvZXMgbm90IGNoZWNrIGlmIHRoZSB0cmFja2VyCiAgICAgICMgaXMgYWN0 dWFsbHkgdXNlZAogICAgICAiZmlsZXM/IiA9PiAic3VwcG9ydC9kb3dubG9hZC5waHA/ZmlsZV9p ZD0iLAogICk7CiAgZm9yZWFjaCAoJHRyYWNrZXJzIGFzICRyZWdleHAgPT4gJGxpbmspCiAgICB7 CiAgICAgICMgQWxsb3dzIG9ubHkgdHdvIHdoaXRlIHNwYWNlIGJldHdlZW4gdGhlIHN0cmluZyBh bmQgdGhlIG51bWVyaWMgaWQKICAgICAgIyB0byBhdm9pZCBoYXZpbmcgdG9vIHRpbWUgY29uc3Vt aW5nIHJlZ2V4cC4gUGVvcGxlIGp1c3QgaGF2ZSB0byBwYXkKICAgICAgIyBhdHRlbnRpb24uCiAg ICAgICRsaW5lID0gcHJlZ19yZXBsYWNlKCIvKF58XHN8XFcpKCRyZWdleHApXHN7MCwyfSMoWzAt OV0rKS9pIiwKICAgICAgICAnJDE8ZW0+PGEgaHJlZj0iJy4kR0xPQkFMU1snc3lzX2hvbWUnXQog ICAgICAgIC4kbGluay4nJDMiPiQyJm5ic3A7IyQzPC9hPjwvZW0+JywgJGxpbmUpOwogICAgfQoK ICAjIGFkZCBhbiBpbnRlcm5hbCBsaW5rIGZvciBjb21tZW50cwogICRsaW5lID0gcHJlZ19yZXBs YWNlKCcvKGNvbW1lbnRzPylcc3swLDJ9IyhbMC05XSspL2knLAogICAgJzxlbT48YSBocmVmPSIj Y29tbWVudCQyIj4kMSZuYnNwOyMkMjwvYT48L2VtPicsICRsaW5lKTsKCiAgIyBBZGQgc3VwcG9y dCBmb3IgbmFtZWQgaHlwZXJsaW5rcywgZS5nLgogICMgW2h0dHA6Ly9nbmEub3JnLyBUZXh0XSAt PiA8YSBocmVmPSJodHRwOi8vZ25hLm9yZy8iPlRleHQ8L2E+CiAgJGxpbmUgPSBwcmVnX3JlcGxh Y2UoCiAgICAjIGZpbmQgdGhlIG9wZW5pbmcgYnJhY2UgJ1snCiAgICAnL1xbJwogICAgIyBmb2xs b3dlZCBieSB0aGUgcHJvdG9jb2wsIGVpdGhlciBodHRwOi8vIG9yIGh0dHBzOi8vCiAgICAuJygo Jy4kcHJvdG9jb2xzLicpOlwvXC8nCiAgICAjIG1hdGNoIGFueSBjaGFyYWN0ZXIgZXhjZXB0IHdo aXRlc3BhY2Ugb3IgdGhlIGNsb3NpbmcKICAgICMgYnJhY2UgJ10nIGZvciB0aGUgYWN0dWFsIGxp bmsKICAgIC4nW15cc1xdXSspJwogICAgIyBmb2xsb3dlZCBieSBhdCBsZWFzdCBvbmUgd2hpdGVz cGFjZQogICAgLidccysnCiAgICAjIGZvbGxvd2VkIGJ5IGFueSBjaGFyYWN0ZXIgKG5vbi1ncmVl ZHkpIGFuZCB0aGUKICAgICMgbmV4dCBjbG9zaW5nIGJyYWNlICddJwogICAgLicoLis/KVxdLycs ICc8YSBocmVmPSIkMSI+JDM8L2E+JywgJGxpbmUpOwogCiAgIyBBZGQgc3VwcG9ydCBmb3IgdW5u YW1lZCBoeXBlcmxpbmtzLCBlLmcuCiAgIyBbaHR0cDovL2duYS5vcmcvXSAtPiA8YSBocmVmPSJo dHRwOi8vZ25hLm9yZy8iPmh0dHA6Ly9nbmEub3JnLzwvYT4gCiAgIyBXZSBtYWtlIHN1cmUgdGhl IGxlbmdodCBvZiB0aGUgc3RyaW5nIGlzIG5vdCB0b28gbG9uZywgb3RoZXJ3aXNlIHdlIGN1dAog ICMgaXQuCiAgIyAoU3VwcG9zZWRseSwgcHJlZ19yZXBsYWNlX2NhbGxiYWNrIGlzIGZhc3RlciB0 aGFuIHByZWdfcmVwbGFjZSAvL2UgYnV0CiAgIyBpdCBzZWVtcyBsZXNzIHJlbGlhYmxlKQogICRs aW5lID0gcHJlZ19yZXBsYWNlKAogICAgIyBmaW5kIHRoZSBvcGVuaW5nIGJyYWNlICdbJwogICAg Jy9cWycKICAgICMgZm9sbG93ZWQgYnkgdGhlIHByb3RvY29sLCBlaXRoZXIgaHR0cDovLyBvciBo dHRwczovLwogICAgIyAoRklYTUU6IHdoaWNoIHByb3RvY29sIGRvZXMgaXQgbWFrZXMgc2Vuc2Ug dG8gc3VwcG9ydCwgd2hpY2ggb25lCiAgICAjIHNob3VsZCB3ZSBpZ25vcmU/KQogICAgLicoKCcu JHByb3RvY29scy4nKTpcL1wvJwogICAgIyBtYXRjaCBhbnkgY2hhcmFjdGVyIGV4Y2VwdCB3aGl0 ZXNwYWNlIChub24tZ3JlZWR5KSBmb3IKICAgICMgdGhlIGFjdHVhbCBsaW5rLCBmb2xsb3dlZCBi eSB0aGUgY2xvc2luZyBicmFjZSAnXScKICAgIC4nW15cc10rPylcXS9lJywgInV0aWxzX2N1dGxp bmsoJyQxJykiLCAkbGluZSk7CgogICMgKndvcmQqIC0+IDxzdHJvbmc+d29yZDwvc3Ryb25nPgog ICRsaW5lID0gcHJlZ19yZXBsYWNlKAogICAgIyBmaW5kIGFuIGFzdGVyaXNrCiAgICAnL1wqJwog ICAgIyB0aGVuIG9uZSBjaGFyYWN0ZXIgKGV4Y2VwdCBhIHNwYWNlIG9yIGFzdGVyaXNrKQogICAg LicoW14qIF0nCiAgICAjIHRoZW4gKG9wdGlvbmFsbHkpIGFueSBjaGFyYWN0ZXIgZXhjZXB0IGFz dGVyaXNrCiAgICAuJ1teKl0qPyknCiAgICAjIHRoZW4gYW4gYXN0ZXJpc2sKICAgIC4nXCovJywg JzxzdHJvbmc+JDE8L3N0cm9uZz4nLCAkbGluZSk7CgogICMgX3dvcmRfIC0+IDxlbT53b3JkPC9l bT4KICAkbGluZSA9IHByZWdfcmVwbGFjZSgKICAgICMgYWxsb3cgZm9yIHRoZSBwYXR0ZXJuIHRv IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLgogICAgIyBpZiBpdCBkb2Vzbid0IHN0 YXJ0IHRoZXJlLCB0aGUgY2hhcmFjdGVyIGJlZm9yZSB0aGUgc2xhc2gKICAgICMgbXVzdCBiZSBl aXRoZXIgd2hpdGVzcGFjZSBvciB0aGUgY2xvc2luZyBicmFjZSAnPicsIHRvCiAgICAjIGFsbG93 IGZvciBuZXN0ZWQgaHRtbCB0YWdzIChlLmcuIDxwPl9tYXJrdXBfPC9wPikuCiAgICAjIEFkZGl0 aW9uYWxseSwgdGhlIG9wZW5pbmcgYnJhY2UgbWF5IGFwcGVhci4KICAgICMgU2VlIGJ1ZyAjMTA1 NzEgb24gaHR0cDovL2duYS5vcmcvIGZvciByZWZlcmVuY2UuCiAgICAnLyhefFxzK3w+fFwoKScK ICAgICMgbWF0Y2ggdGhlIHVuZGVyc2NvcmUKICAgIC4nXycKICAgICMgbWF0Y2ggYW55IGNoYXJh Y3RlciAobm9uLWdyZWVkeSkKICAgIC4nKC4rPyknCiAgICAjIG1hdGNoIHRoZSBlbmRpbmcgdW5k ZXJzY29yZSBhbmQgZWl0aGVyIGVuZCBvZiBsaW5lIG9yCiAgICAjIGEgbm9uLXdvcmQgY2hhcmFj dGVyCiAgICAuJ18oXFd8JCkvJywgJyQxPGVtPiQyPC9lbT4kMycsICRsaW5lKTsKCiAgcmV0dXJu ICRsaW5lOwp9CgpwcmludCAnPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4K PGZlZWQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvQXRvbSI+CiAgPGlkPicuJGlkLic8 L2lkPgogIDxsaW5rIHJlbD0ic2VsZiIgaHJlZj0iJy4kbXlzZWxmLiciLz4KICA8dGl0bGU+Jy4k dGl0bGUuJzwvdGl0bGU+CiAgPHVwZGF0ZWQ+Jy4kbGFzdF91cGRhdGVkLic8L3VwZGF0ZWQ+Cgon OwoKJHN0ZGluID0gZm9wZW4oInBocDovL3N0ZGluIiwiciIpOyAKd2hpbGUgKCRyb3cgPSBmZ2V0 Y3N2KCRzdGRpbiwgMTAwMDAwMDAsICJcdCIpKQp7CiAgJGlkID0gImh0dHA6Ly8kc3lzX2RlZmF1 bHRfZG9tYWlueyRzeXNfaG9tZX1mb3J1bS9mb3J1bS5waHA/Zm9ydW1faWQ9eyRyb3dbMF19IjsK ICAkdGl0bGUgPSAkcm93WzRdOwogICR1cGRhdGVkID0gZGF0ZSgnYycsICRyb3dbMl0pOwogICRh dXRob3IgPSAkcm93WzFdOwogICRjb250ZW50ID0gbWFya3VwX2Z1bGwodHJpbShzdHJfcmVwbGFj ZShhcnJheSgiXFxuIiwiXFx0IiksIGFycmF5KCJcbiIsIlx0IiksICRyb3dbNV0pKSk7CgogIHBy aW50ICIKICA8ZW50cnk+CiAgICA8aWQ+JGlkPC9pZD4KICAgIDxsaW5rIHJlbD0nYWx0ZXJuYXRl JyBocmVmPSckaWQnLz4KICAgIDx0aXRsZT4kdGl0bGU8L3RpdGxlPgogICAgPHVwZGF0ZWQ+JHVw ZGF0ZWQ8L3VwZGF0ZWQ+CiAgICA8YXV0aG9yPgogICAgICA8bmFtZT4kYXV0aG9yPC9uYW1lPgog ICAgPC9hdXRob3I+CiAgICA8Y29udGVudCB0eXBlPSd4aHRtbCcgeG1sOmJhc2U9JyRpZCc+CiAg ICAgIDxkaXYgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnPiRjb250ZW50PC9k aXY+CiAgICA8L2NvbnRlbnQ+CiAgPC9lbnRyeT4KIjsKfQoKLy8gRmVlZCBmb290ZXIKcHJpbnQg IjwvZmVlZD4iOwo= --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=oldnews.scm Content-Transfer-Encoding: base64 KGRlZmluZS1tb2R1bGUgKG9sZG5ld3MpCiAgIzp1c2UtbW9kdWxlIChpY2UtOSBtYXRjaCkKICAj OnVzZS1tb2R1bGUgKGljZS05IHByZXR0eS1wcmludCkKICAjOnVzZS1tb2R1bGUgKHNyZmkgc3Jm aS0xKQogICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTkpCiAgIzp1c2UtbW9kdWxlIChzcmZpIHNy ZmktMTEpCiAgIzp1c2UtbW9kdWxlIChzcmZpIHNyZmktMTkpCiAgIzp1c2UtbW9kdWxlIChzcmZp IHNyZmktMjYpCiAgIzp1c2UtbW9kdWxlICh3ZWIgY2xpZW50KQogICM6dXNlLW1vZHVsZSAoc3ht bCBtYXRjaCkKICAjOnVzZS1tb2R1bGUgKHN4bWwgc2ltcGxlKSkKCihkZWZpbmUgJWF0b20tdXJs CiAgOzsgVGhlIHdlYiBzaXRlJ3MgbmV3cyBmZWVkLgogICJodHRwOi8vc2F2YW5uYWguZ251Lm9y Zy9uZXdzL2F0b20ucGhwP2dyb3VwPWd1aXgiKQoKKGRlZmluZSAoYXRvbS0+c3htbCBwb3J0KQog ICh4bWwtPnN4bWwgcG9ydAogICAgICAgICAgICAgIzpuYW1lc3BhY2VzICcoKGF0b20gLiAiaHR0 cDovL3d3dy53My5vcmcvMjAwNS9BdG9tIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICh4 aHRtbCAuICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIikpCiAgICAgICAgICAgICAjOnRy aW0td2hpdGVzcGFjZT8gI3QpKQoKKGRlZmluZSAoZmV0Y2gtbmV3cykKICAiUmV0dXJuIHRoZSBT WE1MIHRyZWUgb2YgdGhlIEF0b20gbmV3cyBmZWVkLiIKICAoY2FsbC13aXRoLXZhbHVlcwogICAg ICAobGFtYmRhICgpCiAgICAgICAgKGh0dHAtZ2V0ICVhdG9tLXVybCkpCiAgICAobGFtYmRhIChy ZXNwb25zZSBjb250ZW50cykKICAgICAgKGNhbGwtd2l0aC1pbnB1dC1zdHJpbmcgY29udGVudHMg YXRvbS0+c3htbCkpKSkKCihkZWZpbmUtcmVjb3JkLXR5cGUgPG5ld3MtZW50cnk+CiAgKG5ld3Mt ZW50cnkgdXJsIHRpdGxlIGRhdGUgYXV0aG9yIGNvbnRlbnQpCiAgbmV3cy1lbnRyeT8KICAodXJs ICAgICAgbmV3cy1lbnRyeS11cmwpICAgICAgICAgICAgICAgICAgICAgICA7c3RyaW5nCiAgKHRp dGxlICAgIG5ld3MtZW50cnktdGl0bGUpICAgICAgICAgICAgICAgICAgICAgO3N0cmluZwogIChk YXRlICAgICBuZXdzLWVudHJ5LWRhdGUpICAgICAgICAgICAgICAgICAgICAgIDtTUkZJLTE5IGRh dGUKICAoYXV0aG9yICAgbmV3cy1lbnRyeS1hdXRob3IpICAgICAgICAgICAgICAgICAgICA7c3ht bAogIChjb250ZW50ICBuZXdzLWVudHJ5LWNvbnRlbnQpKSAgICAgICAgICAgICAgICAgIDtzeG1s CgooZGVmaW5lKiAobmV3cy1pdGVtcyAjOm9wdGlvbmFsIChhdG9tIChmZXRjaC1uZXdzKSkpCiAg IlJldHVybiB0aGUgbGlzdCBvZiA8bmV3cy1lbnRyeT4gdGFrZW4gZnJvbSB0aGUgd2ViIHNpdGUn cyBSU1MgZmVlZC4iCiAgKHN4bWwtbWF0Y2ggYXRvbQogICAgKCgqVE9QKiAoKlBJKiAscGkgLi4u KQogICAgICAgICAgICAoYXRvbTpmZWVkCiAgICAgICAgICAgICAoYXRvbTppZCAsZmVlZC1pZCkK ICAgICAgICAgICAgIChhdG9tOmxpbmspCiAgICAgICAgICAgICAoYXRvbTp0aXRsZSAsZmVlZC10 aXRsZSkKICAgICAgICAgICAgIChhdG9tOnVwZGF0ZWQgLGZlZWQtdXBkYXRlZCkKICAgICAgICAg ICAgIChhdG9tOmVudHJ5CiAgICAgICAgICAgICAgKGF0b206aWQgLGlkKQogICAgICAgICAgICAg IChhdG9tOmxpbmsgKEAgKGhyZWYgLGxpbmspKSkKICAgICAgICAgICAgICAoYXRvbTp0aXRsZSAs dGl0bGUpCiAgICAgICAgICAgICAgKGF0b206dXBkYXRlZCAsdXBkYXRlZCkKICAgICAgICAgICAg ICAoYXRvbTphdXRob3IgKGF0b206bmFtZSAsYXV0aG9yKSkKICAgICAgICAgICAgICAoYXRvbTpj b250ZW50ICxjb250ZW50KQogICAgICAgICAgICAgICxyZXN0IC4uLikKICAgICAgICAgICAgIC4u LgogICAgICAgICAgICAgKSkKICAgICAocGsgJ2ZlZWQgZmVlZC1pZCBmZWVkLXRpdGxlIGZlZWQt dXBkYXRlZCkKICAgICAobWFwIG5ld3MtZW50cnkKICAgICAgICAgIGxpbmsgdGl0bGUKICAgICAg ICAgIChtYXAgKGN1dCBzdHJpbmctPmRhdGUgPD4gIn5ZLX5tLX5kIikgdXBkYXRlZCkKICAgICAg ICAgIGF1dGhvciBjb250ZW50KSkpKQoKKGRlZmluZSAoc3RyaXAteGh0bWwtbmFtZXNwYWNlIHRy ZWUpCiAgKGRlZmluZSAoeGh0bWwtcHJlZml4ZWQtc3ltYm9sPyBvYmopCiAgICAoYW5kIChzeW1i b2w/IG9iaikKICAgICAgICAgKHN0cmluZy1wcmVmaXg/ICJ4aHRtbDoiIChzeW1ib2wtPnN0cmlu ZyBvYmopKSkpCgogIChtYXRjaCB0cmVlCiAgICAoKChvciAneGh0bWw6aW5wdXQgJ3hodG1sOnRl eHRhcmVhKSAoJ0AgYXR0cmlidXRlcyAuLi4pIGJvZHkgLi4uKQogICAgIDs7IFhYWDogU2F2YW5u YWgncyBuZXdzIHRoaW5nIHVzZWQgJ3RleHRhcmVhJyBhbmQgJ2lucHV0JyB0YWdzIGZvcgogICAg IDs7IHZlcmJhdGltIHRleHQ7IGNvbnZlcnQgaXQuICBTb21ldGltZXMgdGhlIGNvbnRlbnQgaXMg aW4gdGhlICd2YWx1ZScKICAgICA7OyBhdHRyaWJ1dGUgcmF0aGVyIHRoYW4gaW4gdGhlIGJvZHku CiAgICAgKG1hdGNoIChhc3NvYyAndmFsdWUgYXR0cmlidXRlcykKICAgICAgICgoJ3ZhbHVlIHZh bHVlKQogICAgICAgIGAoZGl2IChAIChjbGFzcyAiZXhhbXBsZSIpKSAocHJlICx2YWx1ZSkpKQog ICAgICAgKF8KICAgICAgICBgKGRpdiAoQCAoY2xhc3MgImV4YW1wbGUiKSkgKHByZSAsQGJvZHkp KSkpKQoKICAgICgoKD8geGh0bWwtcHJlZml4ZWQtc3ltYm9sPyB0YWcpIHJlc3QgLi4uKQogICAg IChsZXQgKCh0YWcgKHN0cmluZy0+c3ltYm9sIChzdHJpbmctZHJvcCAoc3ltYm9sLT5zdHJpbmcg dGFnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5n LWxlbmd0aCAieGh0bWw6IikpKSkpCiAgICAgICBgKCx0YWcgLEAobWFwIHN0cmlwLXhodG1sLW5h bWVzcGFjZSByZXN0KSkpKQogICAgKHgKICAgICB4KSkpCgooZGVmaW5lIChuZXdzLWVudHJ5LT5w b3N0LWZpbGUtbmFtZSBlbnRyeSkKICAoZGVmaW5lIHdoaXRlc3BhY2U/CiAgICAoY3V0IGNoYXIt c2V0LWNvbnRhaW5zPyBjaGFyLXNldDp3aGl0ZXNwYWNlIDw+KSkKCiAgKGRlZmluZSAobWFwLWNo YXJhY3RlciBjaHIgcmVzdWx0KQogICAgKG1hdGNoIGNocgogICAgICAoKD8gd2hpdGVzcGFjZT8p CiAgICAgICAoY29ucyAjXC0gcmVzdWx0KSkKICAgICAgKChvciAjXCYgI1whICNcOiAjXCwpCiAg ICAgICByZXN1bHQpCiAgICAgICgob3IgI1wqICNcPykKICAgICAgIChjb25zICNcLSByZXN1bHQp KQogICAgICAoXwogICAgICAgKGNvbnMgY2hyIHJlc3VsdCkpKSkKCiAgKHN0cmluZy1kb3duY2Fz ZQogICAobGlzdC0+c3RyaW5nIChzdHJpbmctZm9sZC1yaWdodCBtYXAtY2hhcmFjdGVyCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAobmV3cy1lbnRyeS10aXRsZSBlbnRyeSkpKSkpCgooZGVmaW5lIChuZXdz LWVudHJ5LT5wb3N0LXNleHAgZW50cnkpCiAgKGxldCAoKGRhdGUgKG5ld3MtZW50cnktZGF0ZSBl bnRyeSkpKQogICAgKGRlZmluZSBzZXhwCiAgICAgIGAoKHRpdGxlIC4gLChuZXdzLWVudHJ5LXRp dGxlIGVudHJ5KSkKICAgICAgICAoYXV0aG9yIC4gLChuZXdzLWVudHJ5LWF1dGhvciBlbnRyeSkp CiAgICAgICAgKGRhdGUgLiAsKGxpc3QgJ3VucXVvdGUKICAgICAgICAgICAgICAgICAgICAgICBg KG1ha2UtZGF0ZSAsKGRhdGUtbmFub3NlY29uZCBkYXRlKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICwoZGF0ZS1zZWNvbmQgZGF0ZSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAsKGRhdGUtbWludXRlIGRhdGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLChkYXRlLWhvdXIgZGF0ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAsKGRhdGUtZGF5IGRhdGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LChkYXRlLW1vbnRoIGRhdGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLChk YXRlLXllYXIgZGF0ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsKGRhdGUt em9uZS1vZmZzZXQgZGF0ZSkpKSkKICAgICAgICAoY29udGVudCAuICwoc3RyaXAteGh0bWwtbmFt ZXNwYWNlIChuZXdzLWVudHJ5LWNvbnRlbnQgZW50cnkpKSkpKQoKICAgIGAoYmVnaW4KICAgICAg ICh1c2UtbW9kdWxlcyAoc3JmaSBzcmZpLTE5KSkKICAgICAgICwobGlzdCAncXVhc2lxdW90ZSBz ZXhwKSkpKQoKKGRlZmluZSAod3JpdGUtbmV3cy1lbnRyeS1hcy1wb3N0IGVudHJ5KQogIChsZXQg KChmaWxlIChuZXdzLWVudHJ5LT5wb3N0LWZpbGUtbmFtZSBlbnRyeSkpKQogICAgKGNhbGwtd2l0 aC1vdXRwdXQtZmlsZSAoc3RyaW5nLWFwcGVuZCBmaWxlICIuc3htbCIpCiAgICAgIChsYW1iZGEg KHBvcnQpCiAgICAgICAgKHByZXR0eS1wcmludCAobmV3cy1lbnRyeS0+cG9zdC1zZXhwIGVudHJ5 KQogICAgICAgICAgICAgICAgICAgICAgcG9ydCkpKSkpCgoKOzsgTG9jYWwgVmFyaWFibGVzOgo7 OyBldmFsOiAocHV0ICdzeG1sLW1hdGNoICdzY2hlbWUtaW5kZW50LWZ1bmN0aW9uIDEpCjs7IEVu ZDoK --=-=-=--