From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Ekaitz Zarraga Newsgroups: gmane.lisp.guile.bugs Subject: bug#73188: PEG parser does not support full PEG grammar Date: Thu, 12 Sep 2024 00:03:57 +0200 Message-ID: <78a81bc5-cd0d-0506-185b-c733c66e96ae@elenq.tech> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------K7qhRUZlD0lobVe4Y71Rz1L9" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="26557"; mail-complaints-to="usenet@ciao.gmane.io" To: 73188@debbugs.gnu.org Original-X-From: bug-guile-bounces+guile-bugs=m.gmane-mx.org@gnu.org Thu Sep 12 00:05:33 2024 Return-path: Envelope-to: guile-bugs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1soVSu-0006jS-42 for guile-bugs@m.gmane-mx.org; Thu, 12 Sep 2024 00:05:32 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1soVSR-0006MN-Vw; Wed, 11 Sep 2024 18:05:04 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1soVSJ-0006La-Ut for bug-guile@gnu.org; Wed, 11 Sep 2024 18:04:58 -0400 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1soVSJ-00042u-Hk for bug-guile@gnu.org; Wed, 11 Sep 2024 18:04:55 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debbugs.gnu.org; s=debbugs-gnu-org; h=From:MIME-Version:Date:To:Subject; bh=6NtQXEiLN6nbmeSS06wOioIuv7PCZnr+8pFN553dKFQ=; b=DlAx7H5QVHlO0IQTYXJcELo0H93MjVcgNQZzwDng11cqwhXBpcL+YBHQgyRaTfqGD/rsX0gEofOv5D3ofoCoRodemFEiQqrnRWEi8fZpGMPxql1VjaUY7kAIcBNk/JL/UdTfy5Rm8nLoMsrDaoDNvHzrc4zmMqJttxS2PPt4w/ZeaKtHlHYfiI1YFs26Wy8uf7TpIf5OYG7FyBvJA/gcpapwKzKNdKABl0grBbdlKDyAKpjb2N4b00VOLIh8/5oJDNL+wZQTP+GQ7273RIZRbCcF93F5O+P9levglKCyJZstODS1KXSjP6j+MD744KS++5HnRni/jfDyChWixcf4SQ==; Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1soVSQ-0003uL-6X for bug-guile@gnu.org; Wed, 11 Sep 2024 18:05:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Ekaitz Zarraga Original-Sender: "Debbugs-submit" Resent-CC: bug-guile@gnu.org Resent-Date: Wed, 11 Sep 2024 22:05:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 73188 X-GNU-PR-Package: guile X-Debbugs-Original-To: "bug-guile@gnu.org" Original-Received: via spool by submit@debbugs.gnu.org id=B.172609226014954 (code B ref -1); Wed, 11 Sep 2024 22:05:01 +0000 Original-Received: (at submit) by debbugs.gnu.org; 11 Sep 2024 22:04:20 +0000 Original-Received: from localhost ([127.0.0.1]:39692 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1soVRi-0003t6-Uf for submit@debbugs.gnu.org; Wed, 11 Sep 2024 18:04:20 -0400 Original-Received: from lists.gnu.org ([209.51.188.17]:39790) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1soVRf-0003sx-79 for submit@debbugs.gnu.org; Wed, 11 Sep 2024 18:04:17 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1soVRX-0006FI-GA for bug-guile@gnu.org; Wed, 11 Sep 2024 18:04:07 -0400 Original-Received: from dane.soverin.net ([185.233.34.25]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1soVRT-00041M-GH for bug-guile@gnu.org; Wed, 11 Sep 2024 18:04:07 -0400 Original-Received: from smtp.soverin.net (unknown [10.10.4.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by dane.soverin.net (Postfix) with ESMTPS id 4X3vjV3H65z10Vj for ; Wed, 11 Sep 2024 22:03:58 +0000 (UTC) Original-Received: from smtp.soverin.net (smtp.soverin.net [10.10.4.99]) by soverin.net (Postfix) with ESMTPSA id 4X3vjT5YSlz5C for ; Wed, 11 Sep 2024 22:03:57 +0000 (UTC) Authentication-Results: smtp.soverin.net; dkim=pass (2048-bit key; unprotected) header.d=elenq.tech header.i=@elenq.tech header.a=rsa-sha256 header.s=soverin1 header.b=jy77OQLO; dkim-atps=neutral DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=elenq.tech; s=soverin1; t=1726092237; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type:autocrypt:autocrypt; bh=6NtQXEiLN6nbmeSS06wOioIuv7PCZnr+8pFN553dKFQ=; b=jy77OQLOnqxAiaGXDmJkx7HaA+I/qGVV7HiTFIxEexQO693kyh/e4K4PdMUnbms2A8RW69 IHZDxHhdteejoFIyhPQTsSn9S4r3RAXLwqybxsYOC3HpqTM4Qu5Fr6uZgv1M/XZREU4HWz G1xpIxmnVcv/hjqejLuAoC3msLJdkQHQYz38hbfNCHjYEgCIfOuzqTkYDzkfuql1EHN5Hj 0Vu3ggMrkapKCo6YiqU7T+Dlt0msF8qotz12R2WpVtAJjJSeXrXr74s+ZCZuCub+iLj0r8 WAj29i+3fAAG7aqBRdxHaz1dyA3DA7j4U9pzHuyaeGZV01Mn0m+qqwPntUYMrw== Content-Language: en-US, es-ES, eu Autocrypt: addr=ekaitz@elenq.tech; keydata= xsFNBGViSyIBEADY3g71uW/0CVaVm5/ObqTicQXXJRuh1uafIFiUUZoAp1V3V89b3LZ/m0cL 8YNHxTxsx8sKIMYTGlOvARAMiSpDvkmpf5pLn5T7+VvK90FOv/Pkp1tNNT+tvd0m/7C58+39 s7tN+XppbjVRtFuSXY0aFe8rpivZsKxv+tPUHUnQQszXvwgx0GQl8AX99IE+j75NJmBHFVg2 0geKa7QVymu669ix2+zU8vGoOKf5nIS0qG1m/vrtwR3ZuuyWX9/E/uP95ahX5ETWtjhTDbEm MEaRperwbczBewkdERJ34vRrverqKQA1xHXoPsx4NkLMocORFSSCJsveXcgWlU+pUIOYcKUA ARJjHhoWoUH4LZt5EOb7U17AaYMmATUXPCqq8G3jEXq6i0O1J1obCJGIRG02R9GiGp4zrVuv 2hmyoAmed4xYZAtf9WjcbwiunDkMGIxscdSlfEH/9dt7PGdEvkZ0dNSCTbp4ctMI4jAfobAL LReMSGx1CgPi01J61a/n/SgR66AiRJZCyC1u2V7AK1rBOAYzOU4UoePz+yF1I7crjZWAQVo6 DlmmXW+29l/lh2oK5jOuNEcvI6qi+tPCYxpDhUhZeYgqFU+/xgGlMj/XGvwuIFlpVg9ovFMg 6mxskOCVP9xNEp/qHiHqByYu5NRcITo/z/3BUimdXTT4KSq2cQARAQABzSJFa2FpdHogWmFy cmFnYSA8ZWthaXR6QGVsZW5xLnRlY2g+wsGOBBMBCAA4FiEEg/pnRVjAUpRlfkwZt5lM+Jly CyYFAmViSyICGwMFCwkIBwIGFQoJCAsCBBYCAwECH X-Spampanel-Class: ham Received-SPF: pass client-ip=185.233.34.25; envelope-from=ekaitz@elenq.tech; helo=dane.soverin.net X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-guile@gnu.org List-Id: "Bug reports for GUILE, GNU's Ubiquitous Extension Language" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-guile-bounces+guile-bugs=m.gmane-mx.org@gnu.org Original-Sender: bug-guile-bounces+guile-bugs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.lisp.guile.bugs:10969 Archived-At: This is a multi-part message in MIME format. --------------K7qhRUZlD0lobVe4Y71Rz1L9 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, I noticed the PEG parser does not support the full PEG grammar, this includes comments, double quotes, escaping and underscores. The attached patch adds support for those (I sent it to guile-devel but I guess it's better to do it here). I'm trying to test it with Zig's grammar but I'm having some issues and the way this is generated it's really hard to test. As is, this patch passes all the current tests in Guile which includes being able to parse peg-as-peg, which now has comments and features that were not implemented before. Thank you, Ekaitz --------------K7qhRUZlD0lobVe4Y71Rz1L9 Content-Type: text/x-patch; charset=UTF-8; name="0001-PEG-Add-full-support-for-PEG-some-extensions.patch" Content-Disposition: attachment; filename="0001-PEG-Add-full-support-for-PEG-some-extensions.patch" Content-Transfer-Encoding: base64 RnJvbSAyZWVmNjZmZmRmYzA3MjhhODRmYTFlOGEzN2IyYTc0OGJmNDY0MzI0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBFa2FpdHogWmFycmFnYSA8ZWthaXR6QGVsZW5xLnRl Y2g+CkRhdGU6IFdlZCwgMTEgU2VwIDIwMjQgMjE6MTk6MjYgKzAyMDAKU3ViamVjdDogW1BB VENIXSBQRUc6IEFkZCBmdWxsIHN1cHBvcnQgZm9yIFBFRyArIHNvbWUgZXh0ZW5zaW9ucwoK VGhpcyBjb21taXQgYWRkcyBzdXBwb3J0IGZvciBQRUcgYXMgZGVzY3JpYmVkIGluOgoKICAg IDxodHRwczovL2Jmb3JkLmluZm8vcHViL2xhbmcvcGVnLnBkZj4KCkl0IGFkZHMgc3VwcG9y dCBmb3IgdGhlIG1pc3NpbmcgZmVhdHVyZXMgKGNvbW1lbnRzLCB1bmRlcnNjb3JlcyBpbgpp ZGVudGlmaWVycyBhbmQgZXNjYXBpbmcpIHdoaWxlIGtlZXBpbmcgdGhlIGV4dGVuc2lvbnMg KGRhc2hlcyBpbgppZGVudGlmaWVycywgPCBhbmQgPC0tKS4KClRoZSBuYW1pbmcgc3lzdGVt IHRyaWVzIHRvIGJlIGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIHRoZSBvbmUgcHJvcG9zZWQK aW4gdGhlIHBhcGVyLgoKKiBtb2R1bGUvaWNlLTkvcGVnL3N0cmluZy1wZWcuc2NtOiBSZXdy aXRlIFBFRyBwYXJzZXIuCiogdGVzdC1zdWl0ZS90ZXN0cy9wZWcudGVzdDogRml4IGltcG9y dAotLS0KIG1vZHVsZS9pY2UtOS9wZWcvc3RyaW5nLXBlZy5zY20gfCA0MTAgKysrKysrKysr KysrKysrKysrKy0tLS0tLS0tLS0tLS0KIHRlc3Qtc3VpdGUvdGVzdHMvcGVnLnRlc3QgICAg ICAgfCAgMzIgKystCiAyIGZpbGVzIGNoYW5nZWQsIDI2MyBpbnNlcnRpb25zKCspLCAxNzkg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbW9kdWxlL2ljZS05L3BlZy9zdHJpbmctcGVn LnNjbSBiL21vZHVsZS9pY2UtOS9wZWcvc3RyaW5nLXBlZy5zY20KaW5kZXggNDVlZDE0YmIx Li40NzIwMjA2NGIgMTAwNjQ0Ci0tLSBhL21vZHVsZS9pY2UtOS9wZWcvc3RyaW5nLXBlZy5z Y20KKysrIGIvbW9kdWxlL2ljZS05L3BlZy9zdHJpbmctcGVnLnNjbQpAQCAtMSw2ICsxLDYg QEAKIDs7Ozsgc3RyaW5nLXBlZy5zY20gLS0tIHJlcHJlc2VudGluZyBQRUcgZ3JhbW1hcnMg YXMgc3RyaW5ncwogOzs7OwotOzs7OyAJQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorOzs7OyAJQ29weXJpZ2h0IChDKSAyMDEwLCAy MDExLCAyMDIzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogOzs7OwogOzs7OyBU aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yCiA7Ozs7IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDYgKzIyLDcgQEAKICAgICAgICAgICAgIGRlZmlu ZS1wZWctc3RyaW5nLXBhdHRlcm5zCiAgICAgICAgICAgICBwZWctZ3JhbW1hcikKICAgIzp1 c2UtbW9kdWxlIChpY2UtOSBwZWcgdXNpbmctcGFyc2VycykKKyAgIzp1c2UtbW9kdWxlIChz cmZpIHNyZmktMSkKICAgIzp1c2UtbW9kdWxlIChpY2UtOSBwZWcgY29kZWdlbikKICAgIzp1 c2UtbW9kdWxlIChpY2UtOSBwZWcgc2ltcGxpZnktdHJlZSkpCiAKQEAgLTM4LDIxICszOSw1 NSBAQAogCiA7OyBHcmFtbWFyIGZvciBQRUdzIGluIFBFRyBncmFtbWFyLgogKGRlZmluZSBw ZWctYXMtcGVnCi0iZ3JhbW1hciA8LS0gKG5vbnRlcm1pbmFsICgnPC0tJyAvICc8LScgLyAn PCcpIHNwIHBhdHRlcm4pKwotcGF0dGVybiA8LS0gYWx0ZXJuYXRpdmUgKFNMQVNIIHNwIGFs dGVybmF0aXZlKSoKLWFsdGVybmF0aXZlIDwtLSAoWyEmXT8gc3Agc3VmZml4KSsKLXN1ZmZp eCA8LS0gcHJpbWFyeSAoWyorP10gc3ApKgotcHJpbWFyeSA8LS0gJygnIHNwIHBhdHRlcm4g JyknIHNwIC8gJy4nIHNwIC8gbGl0ZXJhbCAvIGNoYXJjbGFzcyAvIG5vbnRlcm1pbmFsICEn PCcKLWxpdGVyYWwgPC0tIFsnXSAoIVsnXSAuKSogWyddIHNwCi1jaGFyY2xhc3MgPC0tIExC ICghJ10nIChDQ3JhbmdlIC8gQ0NzaW5nbGUpKSogUkIgc3AKLUNDcmFuZ2UgPC0tIC4gJy0n IC4KLUNDc2luZ2xlIDwtLSAuCi1ub250ZXJtaW5hbCA8LS0gW2EtekEtWjAtOS1dKyBzcAot c3AgPCBbIFx0XG5dKgotU0xBU0ggPCAnLycKLUxCIDwgJ1snCi1SQiA8ICddJwotIikKKyIj IEhpZXJhcmNoaWNhbCBzeW50YXgKK0dyYW1tYXIgPC0tIFNwYWNpbmcgRGVmaW5pdGlvbisg RW5kT2ZGaWxlCitEZWZpbml0aW9uIDwtLSBJZGVudGlmaWVyIExFRlRBUlJPVyBFeHByZXNz aW9uCisKK0V4cHJlc3Npb24gPC0tIFNlcXVlbmNlIChTTEFTSCBTZXF1ZW5jZSkqCitTZXF1 ZW5jZSA8LS0gUHJlZml4KgorUHJlZml4IDwtLSAoQU5EIC8gTk9UKT8gU3VmZml4CitTdWZm aXggPC0tIFByaW1hcnkgKFFVRVNUSU9OIC8gU1RBUiAvIFBMVVMpPworUHJpbWFyeSA8LS0g SWRlbnRpZmllciAhTEVGVEFSUk9XCisgICAgICAgICAgIC8gT1BFTiBFeHByZXNzaW9uIENM T1NFCisgICAgICAgICAgIC8gTGl0ZXJhbCAvIENsYXNzIC8gRE9UCisKKyMgTGV4aWNhbCBz eW50YXgKK0lkZW50aWZpZXIgPC0tIElkZW50U3RhcnQgSWRlbnRDb250KiBTcGFjaW5nCisj IE5PVEU6IGAtYCBpcyBhbiBleHRlbnNpb24KK0lkZW50U3RhcnQgPC0gW2EtekEtWl8tXQor SWRlbnRDb250IDwtIElkZW50U3RhcnQgLyBbMC05XQorCitMaXRlcmFsIDwtLSBTUVVPVEUg KCFTUVVPVEUgQ2hhcikqIFNRVU9URSBTcGFjaW5nCisgICAgICAgIC8gRFFVT1RFICghRFFV T1RFIENoYXIpKiBEUVVPVEUgU3BhY2luZworQ2xhc3MgPC0tICdbJyAoISddJyBSYW5nZSkq ICddJyBTcGFjaW5nCitSYW5nZSA8LS0gQ2hhciAnLScgQ2hhciAvIENoYXIKK0NoYXIgPC0t ICdcXFxcJyBbbnJ0J1wiXFxbXFxdXFxcXF0KKyAgICAgICAvICdcXFxcJyBbMC0yXVswLTdd WzAtN10KKyAgICAgICAvICdcXFxcJyBbMC03XVswLTddPworICAgICAgIC8gISdcXFxcJyAu CisKKyMgTk9URTogYDwtLWAgYW5kIGA8YCBhcmUgZXh0ZW5zaW9ucworTEVGVEFSUk9XIDwt ICgnPC0tJyAvICc8LScgLyAnPCcpIFNwYWNpbmcKK1NRVU9URSA8LS0gWyddCitEUVVPVEUg PC0tIFtcIl0KK09QRU5CUkFDS0VUIDwgJ1snCitDTE9TRUJSQUNLRVQgPCAnXScKK1NMQVNI IDwgJy8nIFNwYWNpbmcKK0FORCA8LS0gJyYnIFNwYWNpbmcKK05PVCA8LS0gJyEnIFNwYWNp bmcKK1FVRVNUSU9OIDwtLSAnPycgU3BhY2luZworU1RBUiA8LS0gJyonIFNwYWNpbmcKK1BM VVMgPC0tICcrJyBTcGFjaW5nCitPUEVOIDwgJygnIFNwYWNpbmcKK0NMT1NFIDwgJyknIFNw YWNpbmcKK0RPVCA8LS0gJy4nIFNwYWNpbmcKKworU3BhY2luZyA8IChTcGFjZSAvIENvbW1l bnQpKgorQ29tbWVudCA8ICcjJyAoIUVuZE9mTGluZSAuKSogRW5kT2ZMaW5lCitTcGFjZSA8 ICcgJyAvICdcdCcgLyBFbmRPZkxpbmUKK0VuZE9mTGluZSA8ICdcclxuJyAvICdcbicgLyAn XHInCitFbmRPZkZpbGUgPCAhLiIpCisKIAogKGRlZmluZS1zeW50YXggZGVmaW5lLXNleHAt cGFyc2VyCiAgIChsYW1iZGEgKHgpCkBAIC02MywzNSArOTgsNzggQEAgUkIgPCAnXScKICAg ICAgICAgICAgICAgKHN5biAod3JhcC1wYXJzZXItZm9yLXVzZXJzIHggbWF0Y2hmIGFjY3Vt c3ltICMnc3ltKSkpCiAgICAgICAgICAgICNgKGRlZmluZSBzeW0gIyxzeW4pKSkpKSkKIAot KGRlZmluZS1zZXhwLXBhcnNlciBwZWctZ3JhbW1hciBhbGwKLSAgKCsgKGFuZCBwZWctbm9u dGVybWluYWwgKG9yICI8LS0iICI8LSIgIjwiKSBwZWctc3AgcGVnLXBhdHRlcm4pKSkKLShk ZWZpbmUtc2V4cC1wYXJzZXIgcGVnLXBhdHRlcm4gYWxsCi0gIChhbmQgcGVnLWFsdGVybmF0 aXZlCi0gICAgICAgKCogKGFuZCAoaWdub3JlICIvIikgcGVnLXNwIHBlZy1hbHRlcm5hdGl2 ZSkpKSkKLShkZWZpbmUtc2V4cC1wYXJzZXIgcGVnLWFsdGVybmF0aXZlIGFsbAotICAoKyAo YW5kICg/IChvciAiISIgIiYiKSkgcGVnLXNwIHBlZy1zdWZmaXgpKSkKLShkZWZpbmUtc2V4 cC1wYXJzZXIgcGVnLXN1ZmZpeCBhbGwKLSAgKGFuZCBwZWctcHJpbWFyeSAoKiAoYW5kIChv ciAiKiIgIisiICI/IikgcGVnLXNwKSkpKQotKGRlZmluZS1zZXhwLXBhcnNlciBwZWctcHJp bWFyeSBhbGwKLSAgKG9yIChhbmQgIigiIHBlZy1zcCBwZWctcGF0dGVybiAiKSIgcGVnLXNw KQotICAgICAgKGFuZCAiLiIgcGVnLXNwKQotICAgICAgcGVnLWxpdGVyYWwKLSAgICAgIHBl Zy1jaGFyY2xhc3MKLSAgICAgIChhbmQgcGVnLW5vbnRlcm1pbmFsIChub3QtZm9sbG93ZWQt YnkgIjwiKSkpKQotKGRlZmluZS1zZXhwLXBhcnNlciBwZWctbGl0ZXJhbCBhbGwKLSAgKGFu ZCAiJyIgKCogKGFuZCAobm90LWZvbGxvd2VkLWJ5ICInIikgcGVnLWFueSkpICInIiBwZWct c3ApKQotKGRlZmluZS1zZXhwLXBhcnNlciBwZWctY2hhcmNsYXNzIGFsbAotICAoYW5kIChp Z25vcmUgIlsiKQotICAgICAgICgqIChhbmQgKG5vdC1mb2xsb3dlZC1ieSAiXSIpCi0gICAg ICAgICAgICAgICAob3IgY2hhcmNsYXNzLXJhbmdlIGNoYXJjbGFzcy1zaW5nbGUpKSkKLSAg ICAgICAoaWdub3JlICJdIikKLSAgICAgICBwZWctc3ApKQotKGRlZmluZS1zZXhwLXBhcnNl ciBjaGFyY2xhc3MtcmFuZ2UgYWxsIChhbmQgcGVnLWFueSAiLSIgcGVnLWFueSkpCi0oZGVm aW5lLXNleHAtcGFyc2VyIGNoYXJjbGFzcy1zaW5nbGUgYWxsIHBlZy1hbnkpCi0oZGVmaW5l LXNleHAtcGFyc2VyIHBlZy1ub250ZXJtaW5hbCBhbGwKLSAgKGFuZCAoKyAob3IgKHJhbmdl ICNcYSAjXHopIChyYW5nZSAjXEEgI1xaKSAocmFuZ2UgI1wwICNcOSkgIi0iKSkgcGVnLXNw KSkKLShkZWZpbmUtc2V4cC1wYXJzZXIgcGVnLXNwIG5vbmUKLSAgKCogKG9yICIgIiAiXHQi ICJcbiIpKSkKKyhkZWZpbmUtc2V4cC1wYXJzZXIgR3JhbW1hciBhbGwKKyAgKGFuZCBTcGFj aW5nICgrIERlZmluaXRpb24pIEVuZE9mRmlsZSkpCisoZGVmaW5lLXNleHAtcGFyc2VyIERl ZmluaXRpb24gYWxsCisgIChhbmQgSWRlbnRpZmllciBMRUZUQVJST1cgRXhwcmVzc2lvbikp CisoZGVmaW5lLXNleHAtcGFyc2VyIEV4cHJlc3Npb24gYWxsCisgIChhbmQgU2VxdWVuY2Ug KCogKGFuZCBTTEFTSCBTZXF1ZW5jZSkpKSkKKyhkZWZpbmUtc2V4cC1wYXJzZXIgU2VxdWVu Y2UgYWxsCisgICgqIFByZWZpeCkpCisoZGVmaW5lLXNleHAtcGFyc2VyIFByZWZpeCBhbGwK KyAgKGFuZCAoPyAob3IgQU5EIE5PVCkpIFN1ZmZpeCkpCisoZGVmaW5lLXNleHAtcGFyc2Vy IFN1ZmZpeCBhbGwKKyAgKGFuZCBQcmltYXJ5ICg/IChvciBRVUVTVElPTiBTVEFSIFBMVVMp KSkpCisoZGVmaW5lLXNleHAtcGFyc2VyIFByaW1hcnkgYWxsCisgIChvciAoYW5kIElkZW50 aWZpZXIgKG5vdC1mb2xsb3dlZC1ieSBMRUZUQVJST1cpKQorICAgICAgKGFuZCBPUEVOIEV4 cHJlc3Npb24gQ0xPU0UpCisgICAgICBMaXRlcmFsCisgICAgICBDbGFzcworICAgICAgRE9U KSkKKyhkZWZpbmUtc2V4cC1wYXJzZXIgSWRlbnRpZmllciBhbGwKKyAgKGFuZCBJZGVudFN0 YXJ0ICgqIElkZW50Q29udCkgU3BhY2luZykpCisoZGVmaW5lLXNleHAtcGFyc2VyIElkZW50 U3RhcnQgYm9keQorICAob3IgKHJhbmdlICNcYSAjXHopIChyYW5nZSAjXEEgI1xaKSAiXyIg Ii0iKSkKKyhkZWZpbmUtc2V4cC1wYXJzZXIgSWRlbnRDb250IGJvZHkKKyAgKG9yIElkZW50 U3RhcnQgKHJhbmdlICNcMCAjXDkpKSkKKyhkZWZpbmUtc2V4cC1wYXJzZXIgTGl0ZXJhbCBh bGwKKyAgKG9yIChhbmQgU1FVT1RFICgqIChhbmQgKG5vdC1mb2xsb3dlZC1ieSBTUVVPVEUp IENoYXIpKSBTUVVPVEUgU3BhY2luZykKKyAgICAgIChhbmQgRFFVT1RFICgqIChhbmQgKG5v dC1mb2xsb3dlZC1ieSBEUVVPVEUpIENoYXIpKSBEUVVPVEUgU3BhY2luZykpKQorKGRlZmlu ZS1zZXhwLXBhcnNlciBDbGFzcyBhbGwKKyAgKGFuZCBPUEVOQlJBQ0tFVCAoKiAoYW5kIChu b3QtZm9sbG93ZWQtYnkgQ0xPU0VCUkFDS0VUKSBSYW5nZSkpIENMT1NFQlJBQ0tFVCBTcGFj aW5nKSkKKyhkZWZpbmUtc2V4cC1wYXJzZXIgUmFuZ2UgYWxsCisgIChvciAoYW5kIENoYXIg REFTSCBDaGFyKSBDaGFyKSkKKyhkZWZpbmUtc2V4cC1wYXJzZXIgQ2hhciBhbGwKKyAgKG9y IChhbmQgIlxcIiAob3IgIm4iICJyIiAidCIgIiciICJbIiAiXSIgIlxcIikpCisgICAgICAo YW5kICJcXCIgKHJhbmdlICNcMCAjXDIpIChyYW5nZSAjXDAgI1w3KSAocmFuZ2UgI1wwICNc NykpCisgICAgICAoYW5kICJcXCIgKHJhbmdlICNcMCAjXDcpICg/IChyYW5nZSAjXDAgI1w3 KSkpCisgICAgICAoYW5kIChub3QtZm9sbG93ZWQtYnkgIlxcIikgcGVnLWFueSkpKQorKGRl ZmluZS1zZXhwLXBhcnNlciBMRUZUQVJST1cgYm9keQorICAoYW5kIChvciAiPC0tIiAiPC0i ICI8IikgU3BhY2luZykpIDsgTk9URTogPC0tIGFuZCA8IGFyZSBleHRlbnNpb25zCisoZGVm aW5lLXNleHAtcGFyc2VyIFNMQVNIIG5vbmUKKyAgKGFuZCAiLyIgU3BhY2luZykpCisoZGVm aW5lLXNleHAtcGFyc2VyIEFORCBhbGwKKyAgKGFuZCAiJiIgU3BhY2luZykpCisoZGVmaW5l LXNleHAtcGFyc2VyIE5PVCBhbGwKKyAgKGFuZCAiISIgU3BhY2luZykpCisoZGVmaW5lLXNl eHAtcGFyc2VyIFFVRVNUSU9OIGFsbAorICAoYW5kICI/IiBTcGFjaW5nKSkKKyhkZWZpbmUt c2V4cC1wYXJzZXIgU1RBUiBhbGwKKyAgKGFuZCAiKiIgU3BhY2luZykpCisoZGVmaW5lLXNl eHAtcGFyc2VyIFBMVVMgYWxsCisgIChhbmQgIisiIFNwYWNpbmcpKQorKGRlZmluZS1zZXhw LXBhcnNlciBPUEVOIG5vbmUKKyAgKGFuZCAiKCIgU3BhY2luZykpCisoZGVmaW5lLXNleHAt cGFyc2VyIENMT1NFIG5vbmUKKyAgKGFuZCAiKSIgU3BhY2luZykpCisoZGVmaW5lLXNleHAt cGFyc2VyIERPVCBhbGwKKyAgKGFuZCAiLiIgU3BhY2luZykpCisoZGVmaW5lLXNleHAtcGFy c2VyIFNRVU9URSBub25lICInIikKKyhkZWZpbmUtc2V4cC1wYXJzZXIgRFFVT1RFIG5vbmUg IlwiIikKKyhkZWZpbmUtc2V4cC1wYXJzZXIgT1BFTkJSQUNLRVQgbm9uZSAiWyIpCisoZGVm aW5lLXNleHAtcGFyc2VyIENMT1NFQlJBQ0tFVCBub25lICJdIikKKyhkZWZpbmUtc2V4cC1w YXJzZXIgREFTSCBub25lICItIikKKyhkZWZpbmUtc2V4cC1wYXJzZXIgU3BhY2luZyBub25l CisgICgqIChvciBTcGFjZSBDb21tZW50KSkpCisoZGVmaW5lLXNleHAtcGFyc2VyIENvbW1l bnQgbm9uZQorICAoYW5kICIjIiAoKiAoYW5kIChub3QtZm9sbG93ZWQtYnkgRW5kT2ZMaW5l KSBwZWctYW55KSkgRW5kT2ZMaW5lKSkKKyhkZWZpbmUtc2V4cC1wYXJzZXIgU3BhY2Ugbm9u ZQorICAob3IgIiAiICJcdCIgRW5kT2ZMaW5lKSkKKyhkZWZpbmUtc2V4cC1wYXJzZXIgRW5k T2ZMaW5lIG5vbmUKKyAgKG9yICJcclxuIiAiXG4iICJcciIpKQorKGRlZmluZS1zZXhwLXBh cnNlciBFbmRPZkZpbGUgbm9uZQorICAobm90LWZvbGxvd2VkLWJ5IHBlZy1hbnkpKQorCiAK IDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7CiA7Ozs7OyBQQVJTRSBTVFJJTkcgUEVHUwpA QCAtMTAxLDcgKzE3OSw3IEBAIFJCIDwgJ10nCiA7OyB3aWxsIGRlZmluZSBhbGwgb2YgdGhl IG5vbnRlcm1pbmFscyBpbiB0aGUgZ3JhbW1hciB3aXRoIGVxdWl2YWxlbnQKIDs7IFBFRyBz LWV4cHJlc3Npb25zLgogKGRlZmluZSAocGVnLXBhcnNlciBzdHIgZm9yLXN5bnRheCkKLSAg KGxldCAoKHBhcnNlZCAobWF0Y2gtcGF0dGVybiBwZWctZ3JhbW1hciBzdHIpKSkKKyAgKGxl dCAoKHBhcnNlZCAobWF0Y2gtcGF0dGVybiBHcmFtbWFyIHN0cikpKQogICAgIChpZiAobm90 IHBhcnNlZCkKICAgICAgICAgKGJlZ2luCiAgICAgICAgICAgOzsgKGRpc3BsYXkgIkludmFs aWQgUEVHIGdyYW1tYXIhXG4iKQpAQCAtMTEwLDExICsxODgsMTIzIEBAIFJCIDwgJ10nCiAg ICAgICAgICAgKGNvbmQKICAgICAgICAgICAgKChvciAobm90IChsaXN0PyBsc3QpKSAobnVs bD8gbHN0KSkKICAgICAgICAgICAgIGxzdCkKLSAgICAgICAgICAgKChlcT8gKGNhciBsc3Qp ICdwZWctZ3JhbW1hcikKLSAgICAgICAgICAgICNgKGJlZ2luCi0gICAgICAgICAgICAgICAg IyxAKG1hcCAobGFtYmRhICh4KSAocGVnLW5vbnRlcm0tPmRlZm4geCBmb3Itc3ludGF4KSkK LSAgICAgICAgICAgICAgICAgICAgICAgIChjb250ZXh0LWZsYXR0ZW4gKGxhbWJkYSAobHN0 KSAoPD0gKGRlcHRoIGxzdCkgMikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChjZHIgbHN0KSkpKSkpKSkpKQorICAgICAgICAgICAoKGVxPyAoY2FyIGxz dCkgJ0dyYW1tYXIpCisgICAgICAgICAgICAoR3JhbW1hci0+ZGVmbiBsc3QgZm9yLXN5bnRh eCkpKSkpKSkKKworOzsgKEdyYW1tYXIgKERlZmluaXRpb24gLi4uKSAoRGVmaW5pdGlvbiAu Li4pKQorKGRlZmluZSAoR3JhbW1hci0+ZGVmbiBsc3QgZm9yLXN5bnRheCkKKyAgI2AoYmVn aW4KKyAgICAgICMsQChtYXAgKGxhbWJkYSAoeCkgKERlZmluaXRpb24tPmRlZm4geCBmb3It c3ludGF4KSkKKyAgICAgICAgICAgICAgKGNvbnRleHQtZmxhdHRlbiAobGFtYmRhIChsc3Qp ICg8PSAoZGVwdGggbHN0KSAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo Y2RyIGxzdCkpKSkpCisKKzs7IChEZWZpbml0aW9uIChJZGVudGlmaWVyICJTb21ldGhpbmci KSAiPC0iIChFeHByZXNzaW9uIC4uLikpCis7OyAgYC0+IChkZWZpbmUtcGVnLXBhdHRlcm4g U29tZXRoaW5nICdhbGwgLi4uKQorKGRlZmluZSAoRGVmaW5pdGlvbi0+ZGVmbiBsc3QgZm9y LXN5bnRheCkKKyAgKGxldCAoKGlkZW50aWZpZXIgKHNlY29uZCAoc2Vjb25kIGxzdCkpKQor ICAgICAgICAoZ3JhYmJlciAgICAodGhpcmQgIGxzdCkpCisgICAgICAgIChleHByZXNzaW9u IChmb3VydGggbHN0KSkpCisgICAgI2AoZGVmaW5lLXBlZy1wYXR0ZXJuICMsKGRhdHVtLT5z eW50YXggZm9yLXN5bnRheAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChzdHJpbmctPnN5bWJvbCBpZGVudGlmaWVyKSkKKyAgICAgICAjLChjb25kCisg ICAgICAgICAgKChzdHJpbmc9PyBncmFiYmVyICI8LS0iKSAoZGF0dW0tPnN5bnRheCBmb3It c3ludGF4ICdhbGwpKQorICAgICAgICAgICgoc3RyaW5nPT8gZ3JhYmJlciAiPC0iKSAoZGF0 dW0tPnN5bnRheCBmb3Itc3ludGF4ICdib2R5KSkKKyAgICAgICAgICAoZWxzZSAoZGF0dW0t PnN5bnRheCBmb3Itc3ludGF4ICdub25lKSkpCisgICAgICAgIywoY29tcHJlc3NvciAoRXhw cmVzc2lvbi0+ZGVmbiBleHByZXNzaW9uIGZvci1zeW50YXgpIGZvci1zeW50YXgpKSkpCisK Kzs7IChFeHByZXNzaW9uIChTZXF1ZW5jZSBYKSkKKzs7ICBgLT4gKFgpCis7OyAoRXhwcmVz c2lvbiAoU2VxdWVuY2UgWCkgKFNlcXVlbmNlIFkpKQorOzsgIGAtPiAob3IgWCBZKQorOzsg KEV4cHJlc3Npb24gKFNlcXVlbmNlIFgpICgoU2VxdWVuY2UgWSkgKFNlcXVlbmNlIFopIC4u LikpCis7OyAgYC0+IChvciBYIFkgWiAuLi4pCisoZGVmaW5lIChFeHByZXNzaW9uLT5kZWZu IGxzdCBmb3Itc3ludGF4KQorICAobGV0ICgoZmlyc3Qtc2VxdWVuY2UgKHNlY29uZCBsc3Qp KQorICAgICAgICAocmVzdCAgICAgICAgICAgKGNkZHIgIGxzdCkpKQorICAgICNgKG9yICMs KFNlcXVlbmNlLT5kZWZuIGZpcnN0LXNlcXVlbmNlIGZvci1zeW50YXgpCisgICAgICAgICAg IyxAKG1hcCAobGFtYmRhICh4KQorICAgICAgICAgICAgICAgICAgICAoU2VxdWVuY2UtPmRl Zm4geCBmb3Itc3ludGF4KSkKKyAgICAgICAgICAgICAgICAgIChrZXl3b3JkLWZsYXR0ZW4g JyhTZXF1ZW5jZSkgcmVzdCkpKSkpCisKKworKGRlZmluZSAoU2VxdWVuY2UtPmRlZm4gbHN0 IGZvci1zeW50YXgpCisgICNgKGFuZCAjLEAobWFwIChsYW1iZGEgKHgpIChQcmVmaXgtPmRl Zm4geCBmb3Itc3ludGF4KSkgKGNkciBsc3QpKSkpCisKKworOzsgKFByZWZpeCAoU3VmZml4 IC4uLikpCis7OyAgYC0+ICguLi4pCis7OyAoUHJlZml4IChOT1QgIiEiKSAoU3VmZml4IC4u LikpCis7OyAgYC0+IChub3QtZm9sbG93ZWQtYnkgLi4uKQorOzsgKFByZWZpeCAoQU5EICIm IikgKFN1ZmZpeCAuLi4pKQorOzsgIGAtPiAoZm9sbG93ZWQtYnkgLi4uKQorKGRlZmluZSAo UHJlZml4LT5kZWZuIGxzdCBmb3Itc3ludGF4KQorICAobGV0ICgoc3VmZml4IChzZWNvbmQg bHN0KSkpCisgICAgKGNhc2UgKGNhciBzdWZmaXgpCisgICAgICAoJ0FORCAjYChmb2xsb3dl ZC1ieSAjLChTdWZmaXgtPmRlZm4gKHRoaXJkIGxzdCkgZm9yLXN5bnRheCkpKQorICAgICAg KCdOT1QgI2Aobm90LWZvbGxvd2VkLWJ5ICMsKFN1ZmZpeC0+ZGVmbiAodGhpcmQgbHN0KSBm b3Itc3ludGF4KSkpCisgICAgICAoZWxzZSAoU3VmZml4LT5kZWZuIHN1ZmZpeCBmb3Itc3lu dGF4KSkpKSkKKworOzsgKFN1ZmZpeCAoUHJpbWFyeSAuLi4pKQorOzsgIGAtPiAoLi4uKQor OzsgKFN1ZmZpeCAoUHJpbWFyeSAuLi4pIChTVEFSICIqIikpCis7OyAgYC0+ICgqIC4uLikK Kzs7IChTdWZmaXggKFByaW1hcnkgLi4uKSAoUVVFU1RJT04gIj8iKSkKKzs7ICBgLT4gKD8g Li4uKQorOzsgKFN1ZmZpeCAoUHJpbWFyeSAuLi4pIChQTFVTICIrIikpCis7OyAgYC0+ICgr IC4uLikKKyhkZWZpbmUgKFN1ZmZpeC0+ZGVmbiBsc3QgZm9yLXN5bnRheCkKKyAgKGxldCog KChwcmltYXJ5IChzZWNvbmQgbHN0KSkKKyAgICAgICAgIChvdXQgICAgIChQcmltYXJ5LT5k ZWZuIHByaW1hcnkgZm9yLXN5bnRheCkpCisgICAgICAgICAoZXh0cmEgICAoY2RkciBsc3Qp KSkKKyAgICAoaWYgKG51bGw/IGV4dHJhKQorICAgICAgb3V0CisgICAgICAoY2FzZSAoY2Fh ciBleHRyYSkKKyAgICAgICAgKCdRVUVTVElPTiAjYCg/ICMsb3V0KSkKKyAgICAgICAgKCdT VEFSICAgICAjYCgqICMsb3V0KSkKKyAgICAgICAgKCdQTFVTICAgICAjYCgrICMsb3V0KSkp KSkpCisKKyhkZWZpbmUgKFByaW1hcnktPmRlZm4gbHN0IGZvci1zeW50YXgpCisgIChsZXQg KCh2YWx1ZSAoc2Vjb25kIGxzdCkpKQorICAgIChjYXNlIChjYXIgdmFsdWUpCisgICAgICAo J0RPVCAgICAgICAgIydwZWctYW55KQorICAgICAgKCdJZGVudGlmaWVyIChJZGVudGlmaWVy LT5kZWZuIHZhbHVlIGZvci1zeW50YXgpKQorICAgICAgKCdFeHByZXNzaW9uIChFeHByZXNz aW9uLT5kZWZuIHZhbHVlIGZvci1zeW50YXgpKQorICAgICAgKCdMaXRlcmFsICAgIChMaXRl cmFsLT5kZWZuIHZhbHVlIGZvci1zeW50YXgpKQorICAgICAgKCdDbGFzcyAgICAgIChDbGFz cy0+ZGVmbiB2YWx1ZSBmb3Itc3ludGF4KSkpKSkKKworOzsgKElkZW50aWZpZXIgImhlbGxv IikKKzs7ICBgLT4gaGVsbG8KKyhkZWZpbmUgKElkZW50aWZpZXItPmRlZm4gbHN0IGZvci1z eW50YXgpCisgIChkYXR1bS0+c3ludGF4IGZvci1zeW50YXggKHN0cmluZy0+c3ltYm9sIChz ZWNvbmQgbHN0KSkpKQorCis7OyAoTGl0ZXJhbCAoQ2hhciAiYSIpIChDaGFyICJiIikgKENo YXIgImMiKSkKKzs7ICBgLT4gImFiYyIKKyhkZWZpbmUgKExpdGVyYWwtPmRlZm4gbHN0IGZv ci1zeW50YXgpCisgIChhcHBseSBzdHJpbmctYXBwZW5kIChtYXAgc2Vjb25kIChjZHIgbHN0 KSkpKQorCis7OyBUT0RPOiBlbXB0eSBDbGFzcyBjYW4gaGFwcGVuOiBgW11gLCBidXQgd2hh dCBkb2VzIGl0IHJlcHJlc2VudD8KKzs7IChDbGFzcyAuLi4pCis7OyAgYC0+IChvciAuLi4p CisoZGVmaW5lIChDbGFzcy0+ZGVmbiBsc3QgZm9yLXN5bnRheCkKKyAgI2Aob3IgIyxAKG1h cCAobGFtYmRhICh4KQorICAgICAgICAgICAgICAgICAgKFJhbmdlLT5kZWZuIHggZm9yLXN5 bnRheCkpCisgICAgICAgICAgICAgICAgKGNkciBsc3QpKSkpCisKKzs7IEZvciBvbmUgY2hh cmFjdGVyOgorOzsgKFJhbmdlIChDaGFyICJhIikpCis7OyAgYC0+ICJhIgorOzsgT3IgZm9y IGEgcmFuZ2U6Cis7OyAoUmFuZ2UgKENoYXIgImEiKSAoQ2hhciAiYiIpKQorOzsgIGAtPiAo cmFuZ2UgI1xhICNcYikKKyhkZWZpbmUgKFJhbmdlLT5kZWZuIGxzdCBmb3Itc3ludGF4KQor ICAoY29uZAorICAgICgoPSAyIChsZW5ndGggbHN0KSkKKyAgICAgKHNlY29uZCAoc2Vjb25k IGxzdCkpKQorICAgICgoPSAzIChsZW5ndGggbHN0KSkKKyAgICAgI2AocmFuZ2UgIywoc3Ry aW5nLXJlZiAoc2Vjb25kIChzZWNvbmQgbHN0KSkgMCkKKyAgICAgICAgICAgICAgIywoc3Ry aW5nLXJlZiAoc2Vjb25kICh0aGlyZCBsc3QpKSAwKSkpKSkKKworKGRlZmluZSBwZWctZ3Jh bW1hciBHcmFtbWFyKQogCiA7OyBNYWNybyB3cmFwcGVyIGZvciBQRUctUEFSU0VSLiAgUGFy c2VzIFBFRyBncmFtbWFycyBleHByZXNzZWQgYXMgc3RyaW5ncyBhbmQKIDs7IGRlZmluZXMg YWxsIHRoZSBhcHByb3ByaWF0ZSBub250ZXJtaW5hbHMuCkBAIC0xMjQsMTE5ICszMTQsNiBA QCBSQiA8ICddJwogICAgICAgKChfIHN0cikKICAgICAgICAocGVnLXBhcnNlciAoc3ludGF4 LT5kYXR1bSAjJ3N0cikgeCkpKSkpCiAKLTs7IGxzdCBoYXMgZm9ybWF0IChub250ZXJtIGdy YWJiZXIgcGF0dGVybiksIHdoZXJlCi07OyAgIG5vbnRlcm0gaXMgYSBzeW1ib2wgKHRoZSBu YW1lIG9mIHRoZSBub250ZXJtaW5hbCksCi07OyAgIGdyYWJiZXIgaXMgYSBzdHJpbmcgKGVp dGhlciAiPCIsICI8LSIgb3IgIjwtLSIpLCBhbmQKLTs7ICAgcGF0dGVybiBpcyB0aGUgcGFy c2Ugb2YgYSBQRUcgcGF0dGVybiBleHByZXNzZWQgYXMgYXMgc3RyaW5nLgotKGRlZmluZSAo cGVnLW5vbnRlcm0tPmRlZm4gbHN0IGZvci1zeW50YXgpCi0gIChsZXQqICgobm9udGVybSAo Y2FyIGxzdCkpCi0gICAgICAgICAoZ3JhYmJlciAoY2FkciBsc3QpKQotICAgICAgICAgKHBh dHRlcm4gKGNhZGRyIGxzdCkpCi0gICAgICAgICAobm9udGVybS1uYW1lIChkYXR1bS0+c3lu dGF4IGZvci1zeW50YXgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KHN0cmluZy0+c3ltYm9sIChjYWRyIG5vbnRlcm0pKSkpKQotICAgICNgKGRlZmluZS1wZWct cGF0dGVybiAjLG5vbnRlcm0tbmFtZQotICAgICAgICMsKGNvbmQKLSAgICAgICAgICAoKHN0 cmluZz0/IGdyYWJiZXIgIjwtLSIpIChkYXR1bS0+c3ludGF4IGZvci1zeW50YXggJ2FsbCkp Ci0gICAgICAgICAgKChzdHJpbmc9PyBncmFiYmVyICI8LSIpIChkYXR1bS0+c3ludGF4IGZv ci1zeW50YXggJ2JvZHkpKQotICAgICAgICAgIChlbHNlIChkYXR1bS0+c3ludGF4IGZvci1z eW50YXggJ25vbmUpKSkKLSAgICAgICAjLChjb21wcmVzc29yIChwZWctcGF0dGVybi0+ZGVm biBwYXR0ZXJuIGZvci1zeW50YXgpIGZvci1zeW50YXgpKSkpCi0KLTs7IGxzdCBoYXMgZm9y bWF0ICgncGVnLXBhdHRlcm4gLi4uKS4KLTs7IEFmdGVyIHRoZSBjb250ZXh0LWZsYXR0ZW4s IChjZHIgbHN0KSBoYXMgZm9ybWF0Ci07OyAgICgoJ3BlZy1hbHRlcm5hdGl2ZSAuLi4pIC4u LiksIHdoZXJlIHRoZSBvdXRlciBsaXN0IGlzIGEgY29sbGVjdGlvbgotOzsgICBvZiBlbGVt ZW50cyBmcm9tIGEgJy8nIGFsdGVybmF0aXZlLgotKGRlZmluZSAocGVnLXBhdHRlcm4tPmRl Zm4gbHN0IGZvci1zeW50YXgpCi0gICNgKG9yICMsQChtYXAgKGxhbWJkYSAoeCkgKHBlZy1h bHRlcm5hdGl2ZS0+ZGVmbiB4IGZvci1zeW50YXgpKQotICAgICAgICAgICAgICAgIChjb250 ZXh0LWZsYXR0ZW4gKGxhbWJkYSAoeCkgKGVxPyAoY2FyIHgpICdwZWctYWx0ZXJuYXRpdmUp KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNkciBsc3QpKSkpKQotCi07 OyBsc3QgaGFzIGZvcm1hdCAoJ3BlZy1hbHRlcm5hdGl2ZSAuLi4pLgotOzsgQWZ0ZXIgdGhl IGNvbnRleHQtZmxhdHRlbiwgKGNkciBsc3QpIGhhcyB0aGUgZm9ybWF0Ci07OyAgIChpdGVt IC4uLiksIHdoZXJlIGVhY2ggaXRlbSBoYXMgZm9ybWF0IGVpdGhlciAoIiEiIC4uLiksICgi JiIgLi4uKSwKLTs7ICAgb3IgKCdwZWctc3VmZml4IC4uLikuCi0oZGVmaW5lIChwZWctYWx0 ZXJuYXRpdmUtPmRlZm4gbHN0IGZvci1zeW50YXgpCi0gICNgKGFuZCAjLEAobWFwIChsYW1i ZGEgKHgpIChwZWctYm9keS0+ZGVmbiB4IGZvci1zeW50YXgpKQotICAgICAgICAgICAgICAg ICAoY29udGV4dC1mbGF0dGVuIChsYW1iZGEgKHgpIChvciAoc3RyaW5nPyAoY2FyIHgpKQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVxPyAoY2Fy IHgpICdwZWctc3VmZml4KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGNkciBsc3QpKSkpKQotCi07OyBsc3QgaGFzIHRoZSBmb3JtYXQgZWl0aGVyCi07OyAgICgi ISIgKCdwZWctc3VmZml4IC4uLikpLCAoIiYiICgncGVnLXN1ZmZpeCAuLi4pKSwgb3IKLTs7 ICAgICAoJ3BlZy1zdWZmaXggLi4uKS4KLShkZWZpbmUgKHBlZy1ib2R5LT5kZWZuIGxzdCBm b3Itc3ludGF4KQotICAgIChjb25kCi0gICAgICAoKGVxdWFsPyAoY2FyIGxzdCkgIiYiKQot ICAgICAgICNgKGZvbGxvd2VkLWJ5ICMsKHBlZy1zdWZmaXgtPmRlZm4gKGNhZHIgbHN0KSBm b3Itc3ludGF4KSkpCi0gICAgICAoKGVxdWFsPyAoY2FyIGxzdCkgIiEiKQotICAgICAgICNg KG5vdC1mb2xsb3dlZC1ieSAjLChwZWctc3VmZml4LT5kZWZuIChjYWRyIGxzdCkgZm9yLXN5 bnRheCkpKQotICAgICAgKChlcT8gKGNhciBsc3QpICdwZWctc3VmZml4KQotICAgICAgIChw ZWctc3VmZml4LT5kZWZuIGxzdCBmb3Itc3ludGF4KSkKLSAgICAgIChlbHNlIGAocGVnLXBh cnNlLWJvZHktZmFpbCAsbHN0KSkpKQotCi07OyBsc3QgaGFzIGZvcm1hdCAoJ3BlZy1zdWZm aXggPHBlZy1wcmltYXJ5PiAoPyAoLyAiKiIgIj8iICIrIikpKQotKGRlZmluZSAocGVnLXN1 ZmZpeC0+ZGVmbiBsc3QgZm9yLXN5bnRheCkKLSAgKGxldCAoKGlubmVyLWRlZm4gKHBlZy1w cmltYXJ5LT5kZWZuIChjYWRyIGxzdCkgZm9yLXN5bnRheCkpKQotICAgIChjb25kCi0gICAg ICAoKG51bGw/IChjZGRyIGxzdCkpCi0gICAgICAgaW5uZXItZGVmbikKLSAgICAgICgoZXF1 YWw/IChjYWRkciBsc3QpICIqIikKLSAgICAgICAjYCgqICMsaW5uZXItZGVmbikpCi0gICAg ICAoKGVxdWFsPyAoY2FkZHIgbHN0KSAiPyIpCi0gICAgICAgI2AoPyAjLGlubmVyLWRlZm4p KQotICAgICAgKChlcXVhbD8gKGNhZGRyIGxzdCkgIisiKQotICAgICAgICNgKCsgIyxpbm5l ci1kZWZuKSkpKSkKLQotOzsgUGFyc2UgYSBwcmltYXJ5LgotKGRlZmluZSAocGVnLXByaW1h cnktPmRlZm4gbHN0IGZvci1zeW50YXgpCi0gIChsZXQgKChlbCAoY2FkciBsc3QpKSkKLSAg KGNvbmQKLSAgICgobGlzdD8gZWwpCi0gICAgKGNvbmQKLSAgICAgKChlcT8gKGNhciBlbCkg J3BlZy1saXRlcmFsKQotICAgICAgKHBlZy1saXRlcmFsLT5kZWZuIGVsIGZvci1zeW50YXgp KQotICAgICAoKGVxPyAoY2FyIGVsKSAncGVnLWNoYXJjbGFzcykKLSAgICAgIChwZWctY2hh cmNsYXNzLT5kZWZuIGVsIGZvci1zeW50YXgpKQotICAgICAoKGVxPyAoY2FyIGVsKSAncGVn LW5vbnRlcm1pbmFsKQotICAgICAgKGRhdHVtLT5zeW50YXggZm9yLXN5bnRheCAoc3RyaW5n LT5zeW1ib2wgKGNhZHIgZWwpKSkpKSkKLSAgICgoc3RyaW5nPyBlbCkKLSAgICAoY29uZAot ICAgICAoKGVxdWFsPyBlbCAiKCIpCi0gICAgICAocGVnLXBhdHRlcm4tPmRlZm4gKGNhZGRy IGxzdCkgZm9yLXN5bnRheCkpCi0gICAgICgoZXF1YWw/IGVsICIuIikKLSAgICAgIChkYXR1 bS0+c3ludGF4IGZvci1zeW50YXggJ3BlZy1hbnkpKQotICAgICAoZWxzZSAoZGF0dW0tPnN5 bnRheCBmb3Itc3ludGF4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGAocGVnLXBhcnNl LWFueSB1bmtub3duLXN0cmluZyAsbHN0KSkpKSkKLSAgIChlbHNlIChkYXR1bS0+c3ludGF4 IGZvci1zeW50YXgKLSAgICAgICAgICAgICAgICAgICAgICAgIGAocGVnLXBhcnNlLWFueSB1 bmtub3duLWVsICxsc3QpKSkpKSkKLQotOzsgVHJpbXMgY2hhcmFjdGVycyBvZmYgdGhlIGZy b250IGFuZCBlbmQgb2YgU1RSLgotOzsgKHRyaW0tMWNoYXJzICInYWInIikgLT4gImFiIgot KGRlZmluZSAodHJpbS0xY2hhcnMgc3RyKSAoc3Vic3RyaW5nIHN0ciAxICgtIChzdHJpbmct bGVuZ3RoIHN0cikgMSkpKQotCi07OyBQYXJzZXMgYSBsaXRlcmFsLgotKGRlZmluZSAocGVn LWxpdGVyYWwtPmRlZm4gbHN0IGZvci1zeW50YXgpCi0gIChkYXR1bS0+c3ludGF4IGZvci1z eW50YXggKHRyaW0tMWNoYXJzIChjYWRyIGxzdCkpKSkKLQotOzsgUGFyc2VzIGEgY2hhcmNs YXNzLgotKGRlZmluZSAocGVnLWNoYXJjbGFzcy0+ZGVmbiBsc3QgZm9yLXN5bnRheCkKLSAg I2Aob3IKLSAgICAgIyxAKG1hcAotICAgICAgICAgKGxhbWJkYSAoY2MpCi0gICAgICAgICAg IChjb25kCi0gICAgICAgICAgICAoKGVxPyAoY2FyIGNjKSAnY2hhcmNsYXNzLXJhbmdlKQot ICAgICAgICAgICAgICNgKHJhbmdlICMsKGRhdHVtLT5zeW50YXgKLSAgICAgICAgICAgICAg ICAgICAgICAgICBmb3Itc3ludGF4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmlu Zy1yZWYgKGNhZHIgY2MpIDApKQotICAgICAgICAgICAgICAgICAgICAgICMsKGRhdHVtLT5z eW50YXgKLSAgICAgICAgICAgICAgICAgICAgICAgICBmb3Itc3ludGF4Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgKHN0cmluZy1yZWYgKGNhZHIgY2MpIDIpKSkpCi0gICAgICAgICAg ICAoKGVxPyAoY2FyIGNjKSAnY2hhcmNsYXNzLXNpbmdsZSkKLSAgICAgICAgICAgICAoZGF0 dW0tPnN5bnRheCBmb3Itc3ludGF4IChjYWRyIGNjKSkpKSkKLSAgICAgICAgIChjb250ZXh0 LWZsYXR0ZW4KLSAgICAgICAgICAobGFtYmRhICh4KSAob3IgKGVxPyAoY2FyIHgpICdjaGFy Y2xhc3MtcmFuZ2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChlcT8gKGNhciB4KSAn Y2hhcmNsYXNzLXNpbmdsZSkpKQotICAgICAgICAgIChjZHIgbHN0KSkpKSkKLQogOzsgQ29t cHJlc3NlcyBhIGxpc3QgdG8gc2F2ZSB0aGUgb3B0aW1pemVyIHdvcmsuCiA7OyBlLmcuIChv ciAoYW5kIGEpKSAtPiBhCiAoZGVmaW5lIChjb21wcmVzc29yLWNvcmUgbHN0KQpAQCAtMjYz LDExICszNDAsMTAgQEAgUkIgPCAnXScKICAgICAgKGxldCAoKHN0cmluZyAoc3ludGF4LT5k YXR1bSAjJ3N0ci1zdHgpKSkKICAgICAgICAoY29tcGlsZS1wZWctcGF0dGVybgogICAgICAg ICAoY29tcHJlc3NvcgotICAgICAgICAgKHBlZy1wYXR0ZXJuLT5kZWZuCi0gICAgICAgICAg KHBlZzp0cmVlIChtYXRjaC1wYXR0ZXJuIHBlZy1wYXR0ZXJuIHN0cmluZykpICMnc3RyLXN0 eCkKKyAgICAgICAgIChFeHByZXNzaW9uLT5kZWZuCisgICAgICAgICAgKHBlZzp0cmVlICht YXRjaC1wYXR0ZXJuIEV4cHJlc3Npb24gc3RyaW5nKSkgIydzdHItc3R4KQogICAgICAgICAg IydzdHItc3R4KQogICAgICAgICAoaWYgKGVxPyBhY2N1bSAnYWxsKSAnYm9keSBhY2N1bSkp KSkKICAgICAgKGVsc2UgKGVycm9yICJCYWQgZW1iZWRkZWQgUEVHIHN0cmluZyIgYXJncykp KSkKIAogKGFkZC1wZWctY29tcGlsZXIhICdwZWcgcGVnLXN0cmluZy1jb21waWxlKQotCmRp ZmYgLS1naXQgYS90ZXN0LXN1aXRlL3Rlc3RzL3BlZy50ZXN0IGIvdGVzdC1zdWl0ZS90ZXN0 cy9wZWcudGVzdAppbmRleCBmNTE2NTcxZTguLjU1NjE0NWU3MiAxMDA2NDQKLS0tIGEvdGVz dC1zdWl0ZS90ZXN0cy9wZWcudGVzdAorKysgYi90ZXN0LXN1aXRlL3Rlc3RzL3BlZy50ZXN0 CkBAIC0yOCwxNyArMjgsMjUgQEAKIDs7IHRoZSBub250ZXJtaW5hbHMgZGVmaW5lZCBpbiB0 aGUgUEVHIHBhcnNlciB3cml0dGVuIHdpdGgKIDs7IFMtZXhwcmVzc2lvbnMuCiAoZGVmaW5l IGdyYW1tYXItbWFwcGluZwotICAnKChncmFtbWFyIHBlZy1ncmFtbWFyKQotICAgIChwYXR0 ZXJuIHBlZy1wYXR0ZXJuKQotICAgIChhbHRlcm5hdGl2ZSBwZWctYWx0ZXJuYXRpdmUpCi0g ICAgKHN1ZmZpeCBwZWctc3VmZml4KQotICAgIChwcmltYXJ5IHBlZy1wcmltYXJ5KQotICAg IChsaXRlcmFsIHBlZy1saXRlcmFsKQotICAgIChjaGFyY2xhc3MgcGVnLWNoYXJjbGFzcykK LSAgICAoQ0NyYW5nZSBjaGFyY2xhc3MtcmFuZ2UpCi0gICAgKENDc2luZ2xlIGNoYXJjbGFz cy1zaW5nbGUpCi0gICAgKG5vbnRlcm1pbmFsIHBlZy1ub250ZXJtaW5hbCkKLSAgICAoc3Ag cGVnLXNwKSkpCisgICcoKEdyYW1tYXIgR3JhbW1hcikKKyAgICAoRGVmaW5pdGlvbiBEZWZp bml0aW9uKQorICAgIChFeHByZXNzaW9uIEV4cHJlc3Npb24pCisgICAgKFNlcXVlbmNlIFNl cXVlbmNlKQorICAgIChQcmVmaXggUHJlZml4KQorICAgIChTdWZmaXggU3VmZml4KQorICAg IChQcmltYXJ5IFByaW1hcnkpCisgICAgKElkZW50aWZpZXIgSWRlbnRpZmllcikKKyAgICAo TGl0ZXJhbCBMaXRlcmFsKQorICAgIChDbGFzcyBDbGFzcykKKyAgICAoUmFuZ2UgUmFuZ2Up CisgICAgKENoYXIgQ2hhcikKKyAgICAoTEVGVEFSUk9XIExFRlRBUlJPVykKKyAgICAoQU5E IEFORCkKKyAgICAoTk9UIE5PVCkKKyAgICAoUVVFU1RJT04gUVVFU1RJT04pCisgICAgKFNU QVIgU1RBUikKKyAgICAoUExVUyBQTFVTKQorICAgIChET1QgRE9UKSkpCiAKIDs7IFRyYW5z Zm9ybXMgdGhlIG5vbnRlcm1pbmFscyBkZWZpbmVkIGluIHRoZSBQRUcgcGFyc2VyIHdyaXR0 ZW4gYXMgYSBQRUcgdG8gdGhlIG5vbnRlcm1pbmFscyBkZWZpbmVkIGluIHRoZSBQRUcgcGFy c2VyIHdyaXR0ZW4gd2l0aCBTLWV4cHJlc3Npb25zLgogKGRlZmluZSAoZ3JhbW1hci10cmFu c2Zvcm0geCkKQEAgLTY5LDcgKzc3LDcgQEAKICAgICAocGVnOnRyZWUgKG1hdGNoLXBhdHRl cm4gKEBAIChpY2UtOSBwZWcpIHBlZy1ncmFtbWFyKSAoQEAgKGljZS05IHBlZykgcGVnLWFz LXBlZykpKQogICAgICh0cmVlLW1hcAogICAgICBncmFtbWFyLXRyYW5zZm9ybQotICAgICAo cGVnOnRyZWUgKG1hdGNoLXBhdHRlcm4gZ3JhbW1hciAoQEAgKGljZS05IHBlZykgcGVnLWFz LXBlZykpKSkpKSkKKyAgICAgKHBlZzp0cmVlIChtYXRjaC1wYXR0ZXJuIChAQCAoaWNlLTkg cGVnKSBwZWctZ3JhbW1hcikgKEBAIChpY2UtOSBwZWcpIHBlZy1hcy1wZWcpKSkpKSkpCiAK IDs7IEEgZ3JhbW1hciBmb3IgcGFzY2FsLXN0eWxlIGNvbW1lbnRzIGZyb20gV2lraXBlZGlh LgogKGRlZmluZSBjb21tZW50LWdyYW1tYXIKLS0gCjIuNDUuMgoK --------------K7qhRUZlD0lobVe4Y71Rz1L9--