From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: David Fussner via "Bug reports for GNU Emacs, the Swiss army knife of text editors" Newsgroups: gmane.emacs.bugs Subject: bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers Date: Thu, 16 May 2024 13:56:56 +0100 Message-ID: References: <1de34060-e93b-0a42-fff5-20e283abe0dc@yandex.ru> <87o7vq0zir.fsf@gnus.org> <8735d20yvd.fsf@gnus.org> <2c5c8afa-b57e-3156-d21c-5523cacb4d87@yandex.ru> <831qf1mgjl.fsf@gnu.org> <87cyyj9rpp.fsf@gnu.org> <65793.1694843596@localhost> Reply-To: David Fussner Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="00000000000071180b061891c40c" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="11023"; mail-complaints-to="usenet@ciao.gmane.io" Cc: 53749@debbugs.gnu.org, Ikumi Keita , Dmitry Gutov , Stefan Monnier , Tassilo Horn , Eli Zaretskii , stefankangas@gmail.com To: Arash Esbati Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Thu May 16 14:58:19 2024 Return-path: Envelope-to: geb-bug-gnu-emacs@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 1s7agc-0002b4-MC for geb-bug-gnu-emacs@m.gmane-mx.org; Thu, 16 May 2024 14:58:18 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1s7agN-0004lo-Nh; Thu, 16 May 2024 08:58:03 -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 1s7agL-0004lD-OD for bug-gnu-emacs@gnu.org; Thu, 16 May 2024 08:58:01 -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 1s7agK-00055I-CU for bug-gnu-emacs@gnu.org; Thu, 16 May 2024 08:58:01 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1s7agM-0005vm-8y for bug-gnu-emacs@gnu.org; Thu, 16 May 2024 08:58:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: David Fussner Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 16 May 2024 12:58:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 53749 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: pending patch Original-Received: via spool by 53749-submit@debbugs.gnu.org id=B53749.171586428122792 (code B ref 53749); Thu, 16 May 2024 12:58:02 +0000 Original-Received: (at 53749) by debbugs.gnu.org; 16 May 2024 12:58:01 +0000 Original-Received: from localhost ([127.0.0.1]:48630 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1s7agJ-0005vW-Hm for submit@debbugs.gnu.org; Thu, 16 May 2024 08:58:01 -0400 Original-Received: from mail-pg1-f171.google.com ([209.85.215.171]:49208) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1s7agD-0005vK-PS for 53749@debbugs.gnu.org; Thu, 16 May 2024 08:57:57 -0400 Original-Received: by mail-pg1-f171.google.com with SMTP id 41be03b00d2f7-5e4f79007ffso112862a12.2 for <53749@debbugs.gnu.org>; Thu, 16 May 2024 05:57:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=20230601; t=1715864205; x=1716469005; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=1J+/msAhJaP0ARxmPxGBOl1H1iGmOhUcxwtRZhtcTwM=; b=PWhcVNK/GReNRxqsd0Ak/7/e5MVWnwwuTEd8ARX+gNCWhNpbPiPA2uAsODwxa+FJFD wYy273+bdo2MNTA70IB7tH/oeRzMurYMnT1SA7Hjer0Bd65EyHsKWyZpb3FdBFAcA+8k KBxy/m0LToOqhWm1qgJtw9V3NbatyHutpwusmVhSFM/YCp9nWah4ZpHU0zJF84GJCwjl +No8u3d0DdHd1+vAHTPkwdE5LrmqZPqaLPxbc4pVvS+1WQGT+1aPhmLop/QTUiNrr0rP KdMazW9nDFIMilAYOZkm2goXV8YaMkb9Z4UqsgkBqH8g/MmeYByvTBgajLF6MrSXv9nJ jSxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1715864205; x=1716469005; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=1J+/msAhJaP0ARxmPxGBOl1H1iGmOhUcxwtRZhtcTwM=; b=FNs2gPWFmK8re8Q+15wo4YYjvjhEIY0WF9EOkhBbLq9In6mZ/aqSjQd2rPiY83SQQC GpViKL1gSYnO1zBWYRSZVgbP1OfrZrfAddIuRif0vh7Xis9sOXvYeK+XqjAdmufSu/h7 uA6SBk4QuWTxXws4xIjL0jON8o31FaOaJ/rzAc9DQYplb81RM7Z/Fl6x/vhBGdNl0cYs spe65ZBZOQfqUX78yViYmTqaYMHwBngblLp6Q+ajazOrosEWLfMAl33EbGAa5ooLKp77 N1ovzExnDhZAwNjLw9lp4xasMDvcZGuAnA0RE2AgO+somOxRrNvPKgGEksPmu3UzhpEI e10g== X-Forwarded-Encrypted: i=1; AJvYcCVOQHpv7ZhttdRELVuLc/Aa126r+NVbKa5jsiIC1/uSLGz7/lAj4Zr8WKd5oruw2q+MUwrI58uJM1jzkWDP/Sd9JofTEHg= X-Gm-Message-State: AOJu0Yz1mqKy8GK+rbw1WPBTEc6lc9jQfNYGUpOi2KQgKS9ZsuzXUZEw ZFyth+c6qWDP2yXEFNYHgSZYLjbok/IiogzjfK6yBYlK8s6zMAC1Fs9R3VWMS9TH/3AqDr+a2Kq 6RgmXjxtkhtVrBNGGZ+ZrEZb24IE= X-Google-Smtp-Source: AGHT+IGi8hW8+E7rJj/a/QeBXqimx1uBG8ETfzuhQ7o17VmCM3o8aAaoG0EHOTiCoaBY40A89pV4NECIHoGkWSK8BUI= X-Received: by 2002:a17:90a:d251:b0:2ae:72a3:2ed4 with SMTP id 98e67ed59e1d1-2b6cc453391mr17311889a91.15.1715864205325; Thu, 16 May 2024 05:56:45 -0700 (PDT) In-Reply-To: X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:285153 Archived-At: --00000000000071180b061891c40c Content-Type: text/plain; charset="UTF-8" Thanks, Arash. Agreed, on all counts. Revised patch attached. Best, David. On Thu, 16 May 2024 at 08:54, Arash Esbati wrote: > > David Fussner writes: > > > +(defun tex-expl-buffer-parse () > > + "Identify buffers where expl3 syntax is always active." > > + (save-excursion > > + (goto-char (point-min)) > > + (when (tex-search-noncomment > > + (re-search-forward > > + "\\(?:\\\\\\(?:ExplFile\\|ProvidesExpl\\|__xparse_file\\)\\)" > > Is the outer grouping necessary? Why not just: > > "\\\\\\(?:ExplFile\\|ProvidesExpl\\|__xparse_file\\)" > > > + nil t)) > > + (setq tex-expl-buffer-p t)))) > > + > > +(defun tex-expl-region-set (_beg _end) > > + "Create a list of regions where expl3 syntax is active. > > +This function updates the list whenever `syntax-propertize' runs, and > > +stores it in the buffer-local variable `tex-expl-region-list'. The > > +list will always be nil when the buffer visits an expl3 file, e.g., an > > +expl3 class or package, where expl3 syntax is always active." > > + (unless syntax-ppss--updated-cache;; Stop forward search running twice. > > + (setq tex-expl-region-list nil) > > + ;; Leaving this test here allows users to set `tex-expl-buffer-p' > > + ;; independently of the mode's automatic detection of an expl3 file. > > + (unless tex-expl-buffer-p > > + (goto-char (point-min)) > > + (while (tex-search-noncomment > > + (re-search-forward "\\ExplSyntaxOn" nil t)) > > This looks wrong, I think you want `search-forward'. > > > + (let ((new-beg (point)) > > + (new-end (or (tex-search-noncomment > > + (re-search-forward "\\ExplSyntaxOff" nil t)) > > Same here. > > > + (point-max)))) > > + (push (cons new-beg new-end) tex-expl-region-list)))))) > > Best, Arash --00000000000071180b061891c40c Content-Type: text/x-patch; charset="US-ASCII"; name="0003-Provide-a-modified-xref-backend-for-TeX-buffers.patch" Content-Disposition: attachment; filename="0003-Provide-a-modified-xref-backend-for-TeX-buffers.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lw998l1b0 RnJvbSAyODM5Y2JlMTVmOTFhMTI5MmQyNmU5MjA4ZDIxY2U0NzI3MGZkNzJlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBGdXNzbmVyIDxkZnVzc25lckBnb29nbGVtYWlsLmNv bT4KRGF0ZTogVGh1LCAxNiBNYXkgMjAyNCAxMzo1MToxMiArMDEwMApTdWJqZWN0OiBbUEFUQ0hd IFByb3ZpZGUgYSBtb2RpZmllZCB4cmVmIGJhY2tlbmQgZm9yIFRlWCBidWZmZXJzCgoqIGxpYi1z cmMvZXRhZ3MuYyAoVGVYX2NvbW1hbmRzKTogSW1wcm92ZSBwYXJzaW5nIG9mIGNvbW1hbmRzIGlu IFRlWApidWZmZXJzLgooVEVYX2RlZmVudik6IEV4cGFuZCBsaXN0IG9mIGNvbW1hbmRzIHRvIHRh ZyBieSBkZWZhdWx0IGluIFRlWApidWZmZXJzLgooVGVYX2hlbHApOgoqIGRvYy9lbWFjcy9tYWlu dGFpbmluZy50ZXhpIChUYWcgU3ludGF4KTogRG9jdW1lbnQgbmV3IHRhZ2dlZApjb21tYW5kcy4K KElkZW50aWZpZXIgU2VhcmNoKTogQWRkIG5vdGUgYWJvdXQgc2VtYW50aWMtc3ltcmVmLWZpbGVw YXR0ZXJuLWFsaXN0LAphdXRvLW1vZGUtYWxpc3QsIGFuZCB4cmVmLWZpbmQtcmVmZXJlbmNlcy4K CiogbGlzcC90ZXh0bW9kZXMvdGV4LW1vZGUuZWwgKHRleC1mb250LWxvY2stc3VzY3JpcHQpOiBU ZXN0IGZvcgp1bmRlcnNjb3JlIGluIGV4cGwzIGZpbGVzIGFuZCByZWdpb25zLCBkaXNhYmxlIHN1 YnNjcmlwdCBmYWNlIHRoZXJlLgoodGV4LWNvbW1vbi1pbml0aWFsaXphdGlvbik6IFNldCB1cCB4 cmVmIGJhY2tlbmQgZm9yIGluLXRyZWUgVGVYCm1vZGVzLiBEZXRlY3QgZXhwbDMgZmlsZXMsIGFu ZCBpbiBvdGhlcnMgc2V0IHVwIGEgbGlzdCBvZiBleHBsMwpyZWdpb25zLgoodGV4LWV4cGwtYnVm ZmVyLXBhcnNlKTogTmV3IGZ1bmN0aW9uIGNhbGxlZCBpbiBwcmV2aW91cy4KKHRleC1leHBsLWJ1 ZmZlci1wKTogTmV3IHZhciB0byBob2xkIHRoZSByZXN1bHQgb2YgcHJldmlvdXMuCih0ZXgtZXhw bC1yZWdpb24tc2V0KTogTmV3IGZ1bmN0aW9uIGFkZGVkIHRvCidzeW50YXgtcHJvcGVydGl6ZS1l eHRlbmQtcmVnaW9uLWZ1bmN0aW9ucycgaG9vay4KKHRleC1leHBsLXJlZ2lvbi1saXN0KTogTmV3 IHZhciB0byBob2xkIHRoZSByZXN1bHQgb2YgcHJldmlvdXMuCih0ZXgtLXRoaW5nLWF0LXBvaW50 LCB0ZXgtdGhpbmdhdHB0LS1iZWdpbm5pbmctb2Ytc3ltYm9sKQoodGV4LXRoaW5nYXRwdC0tZW5k LW9mLXN5bWJvbCwgdGV4LS1ib3VuZHMtb2Ytc3ltYm9sLWF0LXBvaW50KToKTmV3IGZ1bmN0aW9u cyB0byByZXR1cm4gJ3RoaW5nLWF0LXBvaW50JyBmb3IgeHJlZiBiYWNrZW5kLgoodGV4LXRoaW5n YXRwdC1leGNsdWRlLWNoYXJzKTogTmV3IHZhciB0byBkbyB0aGUgc2FtZS4KKHhyZWYtYmFja2Vu ZC1pZGVudGlmaWVyLWF0LXBvaW50KTogTmV3IFRlWCBiYWNrZW5kIG1ldGhvZCB0byBwcm92aWRl CnN5bWJvbHMgZm9yIHByb2Nlc3NpbmcgYnkgeHJlZi4KKHhyZWYtYmFja2VuZC1pZGVudGlmaWVy LWNvbXBsZXRpb24tdGFibGUpCih4cmVmLWJhY2tlbmQtaWRlbnRpZmllci1jb21wbGV0aW9uLWln bm9yZS1jYXNlKQooeHJlZi1iYWNrZW5kLWRlZmluaXRpb25zLCB4cmVmLWJhY2tlbmQtYXByb3Bv cyk6IFBsYWNlaG9sZGVycyB0bwpjYWxsIHRoZSBzdGFuZGFyZCAnZXRhZ3MnIHhyZWYgYmFja2Vu ZCBtZXRob2RzLgooeHJlZi1iYWNrZW5kLXJlZmVyZW5jZXMpOiBXcmFwcGVyIHRvIGNhbGwgdGhl IGRlZmF1bHQgeHJlZiBiYWNrZW5kCm1ldGhvZCwgZmluZGluZyBhcyBtYW55IHJlbGV2YW50IGZp bGVzIGFzIHBvc3NpYmxlIGFuZCB1c2luZyBhIGJlc3Bva2UKc3ludGF4LXByb3BlcnRpemUtZnVu Y3Rpb24gd2hlbiByZXF1aXJlZC4KKHRleC0tY29sbGVjdC1maWxlLWV4dGVuc2lvbnMsIHRleC14 cmVmLXN5bnRheC1mdW5jdGlvbik6IEhlbHBlcgpmdW5jdGlvbnMgZm9yIHByZXZpb3VzLgoodGV4 LWZpbmQtcmVmZXJlbmNlcy1zeW50YXgtdGFibGUsIHRleC0tYnVmZmVycy1saXN0KQoodGV4LS14 cmVmLXN5bnRheC1mdW4sIHRleC0tb2xkLXN5bnRheC1mdW5jdGlvbik6IE5ldyB2YXJzIGZvciBz YW1lLgotLS0KIGRvYy9lbWFjcy9tYWludGFpbmluZy50ZXhpIHwgIDM5ICsrKy0KIGxpYi1zcmMv ZXRhZ3MuYyAgICAgICAgICAgIHwgMTg5ICsrKysrKysrKysrKysrKysrLS0KIGxpc3AvdGV4dG1v ZGVzL3RleC1tb2RlLmVsIHwgMzczICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0KIDMgZmlsZXMgY2hhbmdlZCwgNTgwIGluc2VydGlvbnMoKyksIDIxIGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL2RvYy9lbWFjcy9tYWludGFpbmluZy50ZXhpIGIvZG9jL2VtYWNzL21haW50 YWluaW5nLnRleGkKaW5kZXggNTc5MDk4YzgxYjEuLmEwNjQxMDNhYTI1IDEwMDY0NAotLS0gYS9k b2MvZW1hY3MvbWFpbnRhaW5pbmcudGV4aQorKysgYi9kb2MvZW1hY3MvbWFpbnRhaW5pbmcudGV4 aQpAQCAtMjUyOSw2ICsyNTI5LDE1IEBAIElkZW50aWZpZXIgU2VhcmNoCiByZWZlcmVuY2VkLiAg VGhlIFhSRUYgbW9kZSBjb21tYW5kcyBhcmUgYXZhaWxhYmxlIGluIHRoaXMgYnVmZmVyLCBzZWUK IEByZWZ7WHJlZiBDb21tYW5kc30uCiAKK1doZW4gaW52b2tlZCBpbiBhIGJ1ZmZlciB3aG9zZSBt YWpvciBtb2RlIHVzZXMgdGhlIEBjb2Rle2V0YWdzfSBiYWNrZW5kLAorQGtiZHtNLT99IHNlYXJj aGVzIGZpbGVzIGFuZCBidWZmZXJzIHdob3NlIG1ham9yIG1vZGUgbWF0Y2hlcyB0aGF0IG9mCit0 aGUgb3JpZ2luYWwgYnVmZmVyLiAgSXQgZ3Vlc3NlcyB0aGF0IG1vZGUgZnJvbSBmaWxlIGV4dGVu c2lvbnMsIHNvIGlmCitAa2Jke00tP30gc2VlbXMgdG8gYmUgc2tpcHBpbmcgcmVsZXZhbnQgYnVm ZmVycyBvciBmaWxlcywgdHJ5CitjdXN0b21pemluZyBlaXRoZXIgdGhlIHZhcmlhYmxlIEBjb2Rl e3NlbWFudGljLXN5bXJlZi1maWxlcGF0dGVybi1hbGlzdH0KKyhpZiB5b3VyIGJ1ZmZlcidzIG1h am9yIG1vZGUgYWxyZWFkeSBoYXMgYW4gZW50cnkgaW4gaXQpLCBvcgorQGNvZGV7YXV0by1tb2Rl LWFsaXN0fSAoaWYgbm90KSwgdGhlcmVieSBpbmZvcm1pbmcgQGNvZGV7eHJlZn0gb2YgdGhlCitt aXNzaW5nIGV4dGVuc2lvbnMgKEBweHJlZntDaG9vc2luZyBNb2Rlc30pLgorCiBAdmluZGV4IHhy ZWYtYXV0by1qdW1wLXRvLWZpcnN0LXhyZWYKICAgSWYgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJs ZSBAY29kZXt4cmVmLWF1dG8tanVtcC10by1maXJzdC14cmVmfSBpcwogQGNvZGV7dH0sIEBjb2Rl e3hyZWYtZmluZC1yZWZlcmVuY2VzfSBhdXRvbWF0aWNhbGx5IGp1bXBzIHRvIHRoZSBmaXJzdApA QCAtMjc0NywxMCArMjc1NiwzMiBAQCBUYWcgU3ludGF4CiBAaXRlbQogSW4gQExhVGVYe30gZG9j dW1lbnRzLCB0aGUgYXJndW1lbnRzIGZvciBAY29kZXtcY2hhcHRlcn0sCiBAY29kZXtcc2VjdGlv bn0sIEBjb2Rle1xzdWJzZWN0aW9ufSwgQGNvZGV7XHN1YnN1YnNlY3Rpb259LAotQGNvZGV7XGVx bm99LCBAY29kZXtcbGFiZWx9LCBAY29kZXtccmVmfSwgQGNvZGV7XGNpdGV9LAotQGNvZGV7XGJp Yml0ZW19LCBAY29kZXtccGFydH0sIEBjb2Rle1xhcHBlbmRpeH0sIEBjb2Rle1xlbnRyeX0sCi1A Y29kZXtcaW5kZXh9LCBAY29kZXtcZGVmfSwgQGNvZGV7XG5ld2NvbW1hbmR9LCBAY29kZXtccmVu ZXdjb21tYW5kfSwKLUBjb2Rle1xuZXdlbnZpcm9ubWVudH0gYW5kIEBjb2Rle1xyZW5ld2Vudmly b25tZW50fSBhcmUgdGFncy4KK0Bjb2Rle1xlcW5vfSwgQGNvZGV7XGxhYmVsfSwgQGNvZGV7XHJl Zn0sIEBjb2Rle1xSZWZ9LCBAY29kZXtcZm9vdHJlZn0sCitAY29kZXtcY2l0ZX0sIEBjb2Rle1xi aWJpdGVtfSwgQGNvZGV7XHBhcnR9LCBAY29kZXtcYXBwZW5kaXh9LAorQGNvZGV7XGVudHJ5fSwg QGNvZGV7XGluZGV4fSwgQGNvZGV7XGRlZn0sIEBjb2Rle1xlZGVmfSwgQGNvZGV7XGdkZWZ9LAor QGNvZGV7XHhkZWZ9LCBAY29kZXtcbmV3Y29tbWFuZH0sIEBjb2Rle1xyZW5ld2NvbW1hbmR9LAor QGNvZGV7XG5ld2Vudmlyb25tZW50fSwgQGNvZGV7XHJlbmV3ZW52aXJvbm1lbnR9LAorQGNvZGV7 XERlY2xhcmVSb2J1c3RDb21tYW5kfSwgQGNvZGV7XG5ld3JvYnVzdGNtZH0sCitAY29kZXtccmVu ZXdyb2J1c3RjbWR9LCBAY29kZXtccHJvdmlkZWNvbW1hbmR9LAorQGNvZGV7XHByb3ZpZGVyb2J1 c3RjbWR9LCBAY29kZXtcTmV3RG9jdW1lbnRDb21tYW5kfSwKK0Bjb2Rle1xSZW5ld0RvY3VtZW50 Q29tbWFuZH0sIEBjb2Rle1xQcm92aWRlRG9jdW1lbnRDb21tYW5kfSwKK0Bjb2Rle1xEZWNsYXJl RG9jdW1lbnRDb21tYW5kfSwgQGNvZGV7XE5ld0V4cGFuZGFibGVEb2N1bWVudENvbW1hbmR9LAor QGNvZGV7XFJlbmV3RXhwYW5kYWJsZURvY3VtZW50Q29tbWFuZH0sCitAY29kZXtcUHJvdmlkZUV4 cGFuZGFibGVEb2N1bWVudENvbW1hbmR9LAorQGNvZGV7XERlY2xhcmVFeHBhbmRhYmxlRG9jdW1l bnRDb21tYW5kfSwKK0Bjb2Rle1xOZXdEb2N1bWVudEVudmlyb25tZW50fSwgQGNvZGV7XFJlbmV3 RG9jdW1lbnRFbnZpcm9ubWVudH0sCitAY29kZXtcUHJvdmlkZURvY3VtZW50RW52aXJvbm1lbnR9 LCBAY29kZXtcRGVjbGFyZURvY3VtZW50RW52aXJvbm1lbnR9LAorQGNvZGV7XGNzZGVmfSwgQGNv ZGV7XGNzZWRlZn0sIEBjb2Rle1xjc2dkZWZ9LCBAY29kZXtcY3N4ZGVmfSwKK0Bjb2Rle1xjc2xl dGNzfSwgQGNvZGV7XGNzbGV0fSwgQGNvZGV7XGxldGNzfSwgQGNvZGV7XGxldH0sCitAY29kZXtc Y3NfbmV3X3Byb3RlY3RlZF9ub3Bhcn0sIEBjb2Rle1xjc19uZXdfcHJvdGVjdGVkfSwKK0Bjb2Rl e1xjc19uZXdfbm9wYXJ9LCBAY29kZXtcY3NfbmV3X2VxfSwgQGNvZGV7XGNzX25ld30sCitAY29k ZXtcY3Nfc2V0X3Byb3RlY3RlZF9ub3Bhcn0sIEBjb2Rle1xjc19zZXRfcHJvdGVjdGVkfSwKK0Bj b2Rle1xjc19zZXRfbm9wYXJ9LCBAY29kZXtcY3Nfc2V0X2VxfSwgQGNvZGV7XGNzX3NldH0sCitA Y29kZXtcY3NfZ3NldF9wcm90ZWN0ZWRfbm9wYXJ9LCBAY29kZXtcY3NfZ3NldF9wcm90ZWN0ZWR9 LAorQGNvZGV7XGNzX2dzZXRfbm9wYXJ9LCBAY29kZXtcY3NfZ3NldF9lcX0sIEBjb2Rle1xjc19n c2V0fSwKK0Bjb2Rle1xjc19nZW5lcmF0ZV9mcm9tX2FyZ19jb3VudH0sIGFuZCBAY29kZXtcY3Nf Z2VuZXJhdGVfdmFyaWFudH0gYXJlCit0YWdzLiAgU28gdG9vIGFyZSB0aGUgYXJndW1lbnRzIG9m IGFueSBzdGFycmVkIHZhcmlhbnRzIG9mIHRoZXNlCitjb21tYW5kcy4KIAogT3RoZXIgY29tbWFu ZHMgY2FuIG1ha2UgdGFncyBhcyB3ZWxsLCBpZiB5b3Ugc3BlY2lmeSB0aGVtIGluIHRoZQogZW52 aXJvbm1lbnQgdmFyaWFibGUgQGVudntURVhUQUdTfSBiZWZvcmUgaW52b2tpbmcgQGNvbW1hbmR7 ZXRhZ3N9LiAgVGhlCmRpZmYgLS1naXQgYS9saWItc3JjL2V0YWdzLmMgYi9saWItc3JjL2V0YWdz LmMKaW5kZXggMDNiYzU1ZGUwM2QuLjExZmRkYzE4N2MyIDEwMDY0NAotLS0gYS9saWItc3JjL2V0 YWdzLmMKKysrIGIvbGliLXNyYy9ldGFncy5jCkBAIC03OTMsMTEgKzc5MywyNyBAQCAjZGVmaW5l IFNURElOIDB4MTAwMQkJLyogcmV0dXJuZWQgYnkgZ2V0b3B0X2xvbmcgb24gLS1wYXJzZS1zdGRp biAqLwogc3RhdGljIGNvbnN0IGNoYXIgKlRlWF9zdWZmaXhlcyBbXSA9CiAgIHsgImJpYiIsICJj bG8iLCAiY2xzIiwgImx0eCIsICJzdHkiLCAiVGVYIiwgInRleCIsIE5VTEwgfTsKIHN0YXRpYyBj b25zdCBjaGFyIFRlWF9oZWxwIFtdID0KLSJJbiBMYVRlWCB0ZXh0LCB0aGUgYXJndW1lbnQgb2Yg YW55IG9mIHRoZSBjb21tYW5kcyAnXFxjaGFwdGVyJyxcblwKLSdcXHNlY3Rpb24nLCAnXFxzdWJz ZWN0aW9uJywgJ1xcc3Vic3Vic2VjdGlvbicsICdcXGVxbm8nLCAnXFxsYWJlbCcsXG5cCi0nXFxy ZWYnLCAnXFxjaXRlJywgJ1xcYmliaXRlbScsICdcXHBhcnQnLCAnXFxhcHBlbmRpeCcsICdcXGVu dHJ5JyxcblwKLSdcXGluZGV4JywgJ1xcZGVmJywgJ1xcbmV3Y29tbWFuZCcsICdcXHJlbmV3Y29t bWFuZCcsXG5cCi0nXFxuZXdlbnZpcm9ubWVudCcgb3IgJ1xccmVuZXdlbnZpcm9ubWVudCcgaXMg YSB0YWcuXG5cCisiSW4gTGFUZVggdGV4dCwgdGhlIGFyZ3VtZW50IG9mIHRoZSBjb21tYW5kcyAn XFxjaGFwdGVyJywgJ1xcc2VjdGlvbicsXG5cCisnXFxzdWJzZWN0aW9uJywgJ1xcc3Vic3Vic2Vj dGlvbicsICdcXGVxbm8nLCAnXFxsYWJlbCcsICdcXHJlZicsXG5cCisnXFxSZWYnLCAnXFxmb290 cmVmJywgJ1xcY2l0ZScsICdcXGJpYml0ZW0nLCAnXFxwYXJ0JywgJ1xcYXBwZW5kaXgnLFxuXAor J1xcZW50cnknLCAnXFxpbmRleCcsICdcXGRlZicsICdcXGVkZWYnLCAnXFxnZGVmJywgJ1xceGRl ZicsXG5cCisnXFxuZXdjb21tYW5kJywgJ1xccmVuZXdjb21tYW5kJywgJ1xcbmV3cm9idXN0Y21k JywgJ1xccmVuZXdyb2J1c3RjbWQnLFxuXAorJ1xcbmV3ZW52aXJvbm1lbnQnLCAnXFxyZW5ld2Vu dmlyb25tZW50JywgJ1xcRGVjbGFyZVJvYnVzdENvbW1hbmQnLFxuXAorJ1xccHJvdmlkZWNvbW1h bmQnLCAnXFxwcm92aWRlcm9idXN0Y21kJywgJ1xcTmV3RG9jdW1lbnRDb21tYW5kJyxcblwKKydc XFJlbmV3RG9jdW1lbnRDb21tYW5kJywgJ1xcUHJvdmlkZURvY3VtZW50Q29tbWFuZCcsXG5cCisn XFxEZWNsYXJlRG9jdW1lbnRDb21tYW5kJywgJ1xcTmV3RXhwYW5kYWJsZURvY3VtZW50Q29tbWFu ZCcsXG5cCisnXFxSZW5ld0V4cGFuZGFibGVEb2N1bWVudENvbW1hbmQnLCAnXFxQcm92aWRlRXhw YW5kYWJsZURvY3VtZW50Q29tbWFuZCcsXG5cCisnXFxEZWNsYXJlRXhwYW5kYWJsZURvY3VtZW50 Q29tbWFuZCcsICdcXE5ld0RvY3VtZW50RW52aXJvbm1lbnQnLFxuXAorJ1xcUmVuZXdEb2N1bWVu dEVudmlyb25tZW50JywgJ1xcUHJvdmlkZURvY3VtZW50RW52aXJvbm1lbnQnLFxuXAorJ1xcRGVj bGFyZURvY3VtZW50RW52aXJvbm1lbnQnLCdcXGNzZGVmJywgJ1xcY3NlZGVmJywgJ1xcY3NnZGVm JyxcblwKKydcXGNzeGRlZicsICdcXGNzbGV0Y3MnLCAnXFxjc2xldCcsICdcXGxldGNzJywgJ1xc bGV0JyxcblwKKydcXGNzX25ld19wcm90ZWN0ZWRfbm9wYXInLCAnXFxjc19uZXdfcHJvdGVjdGVk JywgJ1xcY3NfbmV3X25vcGFyJyxcblwKKydcXGNzX25ld19lcScsICdcXGNzX25ldycsICdcXGNz X3NldF9wcm90ZWN0ZWRfbm9wYXInLFxuXAorJ1xcY3Nfc2V0X3Byb3RlY3RlZCcsICdcXGNzX3Nl dF9ub3BhcicsICdcXGNzX3NldF9lcScsICdcXGNzX3NldCcsXG5cCisnXFxjc19nc2V0X3Byb3Rl Y3RlZF9ub3BhcicsICdcXGNzX2dzZXRfcHJvdGVjdGVkJywgJ1xcY3NfZ3NldF9ub3BhcicsXG5c CisnXFxjc19nc2V0X2VxJywgJ1xcY3NfZ3NldCcsICdcXGNzX2dlbmVyYXRlX2Zyb21fYXJnX2Nv dW50Jywgb3JcblwKKydcXGNzX2dlbmVyYXRlX3ZhcmlhbnQnIGlzIGEgdGFnLiAgU28gaXMgdGhl IGFyZ3VtZW50IG9mIGFueSBzdGFycmVkXG5cCit2YXJpYW50IG9mIHRoZXNlIGNvbW1hbmRzLlxu XAogXG5cCiBPdGhlciBjb21tYW5kcyBjYW4gYmUgc3BlY2lmaWVkIGJ5IHNldHRpbmcgdGhlIGVu dmlyb25tZW50IHZhcmlhYmxlXG5cCiAnVEVYVEFHUycgdG8gYSBjb2xvbi1zZXBhcmF0ZWQgbGlz dCBsaWtlLCBmb3IgZXhhbXBsZSxcblwKQEAgLTU3NDAsMTEgKzU3NTYsMjUgQEAgU2NoZW1lX2Z1 bmN0aW9ucyAoRklMRSAqaW5mKQogc3RhdGljIGxpbmVidWZmZXIgKlRFWF90b2t0YWIgPSBOVUxM OyAvKiBUYWJsZSB3aXRoIHRhZyB0b2tlbnMgKi8KIAogLyogRGVmYXVsdCBzZXQgb2YgY29udHJv bCBzZXF1ZW5jZXMgdG8gcHV0IGludG8gVEVYX3Rva3RhYi4KLSAgIFRoZSB2YWx1ZSBvZiBlbnZp cm9ubWVudCB2YXIgVEVYVEFHUyBpcyBwcmVwZW5kZWQgdG8gdGhpcy4gICovCisgICBUaGUgdmFs dWUgb2YgZW52aXJvbm1lbnQgdmFyIFRFWFRBR1MgaXMgcHJlcGVuZGVkIHRvIHRoaXMuCisgICAo MjAyNCkgQWRkIHZhcmlhbnRzIG9mICdcZGVmJywgc29tZSBhZGRpdGlvbmFsIExhVGVYIChhbmQK KyAgIGZvcm1lciB4cGFyc2UpIGNvbW1hbmRzLCBjb21tb24gdmFyaWFudHMgZnJvbSB0aGUKKyAg ICdldG9vbGJveCcgcGFja2FnZSwgYW5kIHRoZSBtYWluIGV4cGwzIGNvbW1hbmRzLiAqLwogc3Rh dGljIGNvbnN0IGNoYXIgKlRFWF9kZWZlbnYgPSAiXAotOmNoYXB0ZXI6c2VjdGlvbjpzdWJzZWN0 aW9uOnN1YnN1YnNlY3Rpb246ZXFubzpsYWJlbDpyZWY6Y2l0ZTpiaWJpdGVtXAotOnBhcnQ6YXBw ZW5kaXg6ZW50cnk6aW5kZXg6ZGVmXAotOm5ld2NvbW1hbmQ6cmVuZXdjb21tYW5kOm5ld2Vudmly b25tZW50OnJlbmV3ZW52aXJvbm1lbnQiOworOmxhYmVsOnJlZjpSZWY6Zm9vdHJlZjpjaGFwdGVy OnNlY3Rpb246c3Vic2VjdGlvbjpzdWJzdWJzZWN0aW9uOmVxbm86Y2l0ZVwKKzpiaWJpdGVtOnBh cnQ6YXBwZW5kaXg6ZW50cnk6aW5kZXg6ZGVmOmVkZWY6Z2RlZjp4ZGVmOm5ld2NvbW1hbmQ6cmVu ZXdjb21tYW5kXAorOm5ld2Vudmlyb25tZW50OnJlbmV3ZW52aXJvbm1lbnQ6RGVjbGFyZVJvYnVz dENvbW1hbmQ6cmVuZXdyb2J1c3RjbWRcCis6bmV3cm9idXN0Y21kOnByb3ZpZGVjb21tYW5kOnBy b3ZpZGVyb2J1c3RjbWQ6TmV3RG9jdW1lbnRDb21tYW5kXAorOlJlbmV3RG9jdW1lbnRDb21tYW5k OlByb3ZpZGVEb2N1bWVudENvbW1hbmQ6RGVjbGFyZURvY3VtZW50Q29tbWFuZFwKKzpOZXdFeHBh bmRhYmxlRG9jdW1lbnRDb21tYW5kOlJlbmV3RXhwYW5kYWJsZURvY3VtZW50Q29tbWFuZFwKKzpQ cm92aWRlRXhwYW5kYWJsZURvY3VtZW50Q29tbWFuZDpEZWNsYXJlRXhwYW5kYWJsZURvY3VtZW50 Q29tbWFuZFwKKzpOZXdEb2N1bWVudEVudmlyb25tZW50OlJlbmV3RG9jdW1lbnRFbnZpcm9ubWVu dFwKKzpQcm92aWRlRG9jdW1lbnRFbnZpcm9ubWVudDpEZWNsYXJlRG9jdW1lbnRFbnZpcm9ubWVu dDpjc2RlZlwKKzpjc2VkZWY6Y3NnZGVmOmNzeGRlZjpjc2xldGNzOmNzbGV0OmxldGNzOmxldDpj c19uZXdfcHJvdGVjdGVkX25vcGFyXAorOmNzX25ld19wcm90ZWN0ZWQ6Y3NfbmV3X25vcGFyOmNz X25ld19lcTpjc19uZXc6Y3Nfc2V0X3Byb3RlY3RlZF9ub3BhclwKKzpjc19zZXRfcHJvdGVjdGVk OmNzX3NldF9ub3Bhcjpjc19zZXRfZXE6Y3Nfc2V0OmNzX2dzZXRfcHJvdGVjdGVkX25vcGFyXAor OmNzX2dzZXRfcHJvdGVjdGVkOmNzX2dzZXRfbm9wYXI6Y3NfZ3NldF9lcTpjc19nc2V0XAorOmNz X2dlbmVyYXRlX2Zyb21fYXJnX2NvdW50OmNzX2dlbmVyYXRlX3ZhcmlhbnQiOwogCiBzdGF0aWMg dm9pZCBURVhfZGVjb2RlX2VudiAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogCkBAIC01 ODAzLDE5ICs1ODMzLDEzNyBAQCBUZVhfY29tbWFuZHMgKEZJTEUgKmluZikKIAkgICAgICB7CiAJ CWNoYXIgKnA7CiAJCXB0cmRpZmZfdCBuYW1lbGVuLCBsaW5lbGVuOwotCQlib29sIG9wZ3JwID0g ZmFsc2U7CisJCWJvb2wgb3BncnAgPSBmYWxzZSwgb25lX2VzYyA9IGZhbHNlLCBpc19leHBsdGhy ZWUgPSBmYWxzZTsKIAogCQljcCA9IHNraXBfc3BhY2VzIChjcCArIGtleS0+bGVuKTsKKworCQkv KiAxLiBUaGUgY2Fub25pY2FsIGV4cGwzIHN5bnRheCBsb29rcyBzb21ldGhpbmcgbGlrZSB0aGlz OgorCQkgICBcY3NfbmV3Ok5wbiBcX19ob29rX3RsX2dwdXQ6Tm4geyBcRVJST1IgfS4gIEZpcnN0 LCBpZiB3ZQorCQkgICB3YW50IHRvIHRhZyBhbnkgc3VjaCBjb21tYW5kcywgd2UgaW5jbHVkZSBv bmx5IHRoZSBwYXJ0CisJCSAgIGJlZm9yZSB0aGUgY29sb24gKGNzX25ldykgaW4gVEVYX2RlZmVu diBvciBURVhUQUdTLiAgU2Vjb25kLAorCQkgICBldGFncyBza2lwcyB0aGUgYXJndW1lbnQgc3Bl Y2lmaWVyIChpbmNsdWRpbmcgdGhlIGNvbG9uKQorCQkgICBhZnRlciB0aGUgdGFnIHRva2VuLCBz byB0aGF0IGl0IGRvZXNuJ3QgYmVjb21lIHRoZSB0YWcgbmFtZS4KKwkJICAgVGhpcmQsIHdlIHNl dCB0aGUgYm9vbGVhbiAnaXNfZXhwbHRocmVlJyB0byB0cnVlIHNvIHRoYXQgd2UKKwkJICAgY2Fu IHJlbW92ZSB0aGUgYXJndW1lbnQgc3BlY2lmaWVyIGZyb20gdGhlIGFjdHVhbCB0YWcgbmFtZQor CQkgICAoX19ob29rX3RsX2dwdXQpLiAgVGhpcyBhbGwgYWxsb3dzIHVzIHRvIGluY2x1ZGUgZXhw bDMKKwkJICAgY29uc3RydWN0cyBpbiBURVhfZGVmZW52IG9yIGluIHRoZSBlbnZpcm9ubWVudCB2 YXJpYWJsZQorCQkgICBURVhUQUdTIHdpdGhvdXQgcmVxdWlyaW5nIGEgY2hhbmdlIG9mIHNlcGFy YXRvciwgYW5kIGl0IGFsc28KKwkJICAgYWxsb3dzIHVzIHRvIGZpbmQgdGhlIGRlZmluaXRpb24g b2YgdmFyaWFudCBjb21tYW5kcyAod2l0aAorCQkgICBkaWZmZXJlbnQgYXJndW1lbnQgc3BlY2lm aWVycykgZGVmaW5lZCB1c2luZywgZm9yIGV4YW1wbGUsCisJCSAgIFxjc19nZW5lcmF0ZV92YXJp YW50Ok5uLiAgUGxlYXNlIG5vdGUgdGhhdCB0aGUgZXhwbDMgc3BlYworCQkgICByZXF1aXJlcyBl dGFncyB0byBwYXkgbW9yZSBhdHRlbnRpb24gdG8gd2hpdGVzcGFjZSBpbiB0aGUKKwkJICAgY29k ZS4KKworCQkgICAyLiBXZSBhbHNvIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIHRoZSBhc3RlcmlzayBm cm9tIHN0YXJyZWQKKwkJICAgdmFyaWFudHMgb2YgYWxsIGNvbW1hbmRzLCB3aXRob3V0IHRoZSBu ZWVkIHRvIGluY2x1ZGUgdGhlCisJCSAgIHN0YXJyZWQgY29tbWFuZHMgZXhwbGljaXRseSBpbiBU RVhfZGVmZW52IG9yIFRFWFRBR1MuICovCisJCWlmICgqY3AgPT0gJzonKQorCQkgIHsKKwkJICAg IHdoaWxlICghY19pc3NwYWNlICgqY3ApICYmICpjcCAhPSBURVhfb3BncnApCisJCSAgICAgIGNw Kys7CisJCSAgICBjcCA9IHNraXBfc3BhY2VzIChjcCk7CisJCSAgICBpc19leHBsdGhyZWUgPSB0 cnVlOworCQkgIH0KKwkJZWxzZSBpZiAoKmNwID09ICcqJykKKwkJICBjcCsrOworCisJCS8qIFNr aXAgdGhlIG9wdGlvbmFsIGFyZ3VtZW50cyB0byBjb21tYW5kcyBpbiB0aGUgdGFncyBsaXN0IHNv CisJCSAgIHRoYXQgdGhlc2UgYXJndW1lbnRzIGRvbid0IGVuZCB1cCBhcyB0aGUgbmFtZSBvZiB0 aGUgdGFnLgorCQkgICBUaGUgbmFtZSB3aWxsIGluc3RlYWQgY29tZSBmcm9tIHRoZSBhcmd1bWVu dCBpbiBjdXJseSBicmFjZXMKKwkJICAgdGhhdCBmb2xsb3dzIHRoZSBvcHRpb25hbCBvbmVzLiAq LworCQl3aGlsZSAoKmNwICE9ICdcMCcgJiYgKmNwICE9ICclJykKKwkJICB7CisJCSAgICBpZiAo KmNwID09ICdbJykKKwkJICAgICAgeworCQkJd2hpbGUgKCpjcCAhPSAnXScgJiYgKmNwICE9ICdc MCcgJiYgKmNwICE9ICclJykKKwkJCSAgY3ArKzsKKwkJICAgICAgfQorCQkgICAgZWxzZSBpZiAo KmNwID09ICcoJykKKwkJICAgICAgeworCQkJd2hpbGUgKCpjcCAhPSAnKScgJiYgKmNwICE9ICdc MCcgJiYgKmNwICE9ICclJykKKwkJCSAgY3ArKzsKKwkJICAgICAgfQorCQkgICAgZWxzZSBpZiAo KmNwID09ICddJyB8fCAqY3AgPT0gJyknKQorCQkgICAgICBjcCsrOworCQkgICAgZWxzZQorCQkg ICAgICBicmVhazsKKwkJICB9CiAJCWlmICgqY3AgPT0gVEVYX29wZ3JwKQogCQkgIHsKIAkJICAg IG9wZ3JwID0gdHJ1ZTsKIAkJICAgIGNwKys7CisJCSAgICBjcCA9IHNraXBfc3BhY2VzIChjcCk7 IC8qIEZvciBleHBsMyBjb2RlLiAqLwogCQkgIH0KKworCQkvKiBSZW1vdmluZyB0aGUgVGVYIGVz Y2FwZSBjaGFyYWN0ZXIgZnJvbSB0YWcgbmFtZXMgc2ltcGxpZmllcworCQkgICB0aGluZ3MgZm9y IGVkaXRvcnMgZmluZGluZyB0YWdnZWQgY29tbWFuZHMgaW4gVGVYIGJ1ZmZlcnMuCisJCSAgIFRo aXMgYXBwbGllcyB0byBFbWFjcyBidXQgYWxzbyB0byB0aGUgdGFnLWZpbmRpbmcgYmVoYXZpb3IK KwkJICAgb2YgYXQgbGVhc3Qgc29tZSBvZiB0aGUgZWRpdG9ycyB0aGF0IHVzZSBjdGFncywgdGhv dWdoIGluCisJCSAgIHRoZSBsYXR0ZXIgY2FzZSB0aGlzIHdpbGwgcmVtYWluIHN1Ym9wdGltYWwu ICBUaGUKKwkJICAgdW5kb2N1bWVudGVkIGN0YWdzIG9wdGlvbiAnLS1uby1kdXBsaWNhdGVzJyBt YXkgaGVscC4gKi8KKwkJaWYgKCpjcCA9PSBURVhfZXNjKQorCQkgIHsKKwkJICAgIGNwKys7CisJ CSAgICBvbmVfZXNjID0gdHJ1ZTsKKwkJICB9CisKKwkJLyogVGVzdGluZyAhY19pc3NwYWNlICYm ICFjX2lzcHVuY3QgaXMgc2ltcGxlciwgYnV0IGhhbHRzCisJCSAgIHByb2Nlc3NpbmcgYXQgdG9v IG1hbnkgcGxhY2VzLiAgVGhlIGxpc3QgYXMgaXQgc3RhbmRzIHRyaWVzCisJCSAgIGJvdGggdG8g ZW5zdXJlIHRoYXQgdGFnIG5hbWVzIHdpbGwgZGVyaXZlIGZyb20gbWFjcm8gbmFtZXMKKwkJICAg cmF0aGVyIHRoYW4gZnJvbSBvcHRpb25hbCBwYXJhbWV0ZXJzIHRvIHRob3NlIG1hY3JvcywgYW5k CisJCSAgIGFsc28gdG8gcmV0dXJuIGZpbmRhYmxlIG5hbWVzIHdoaWxlIHN0aWxsIGFsbG93aW5n IGZvcgorCQkgICB1bm9ydGhvZG94IGNvbnN0cnVjdHMuICovCiAJCWZvciAocCA9IGNwOwotCQkg ICAgICghY19pc3NwYWNlICgqcCkgJiYgKnAgIT0gJyMnICYmCi0JCSAgICAgICpwICE9IFRFWF9v cGdycCAmJiAqcCAhPSBURVhfY2xncnApOworCQkgICAgICghY19pc3NwYWNlICgqcCkgJiYgKnAg IT0gJyMnICYmICpwICE9ICc9JyAmJgorCQkgICAgICAqcCAhPSAnWycgJiYgKnAgIT0gJygnICYm ICpwICE9IFRFWF9vcGdycCAmJgorCQkgICAgICAqcCAhPSBURVhfY2xncnAgJiYgKnAgIT0gJyIn ICYmICpwICE9ICdcJycgJiYKKwkJICAgICAgKnAgIT0gJyUnICYmICpwICE9ICcsJyAmJiAqcCAh PSAnfCcgJiYgKnAgIT0gJyQnKTsKIAkJICAgICBwKyspCi0JCSAgY29udGludWU7CisJCSAgLyog SW4gZXhwbDMgY29kZSB3ZSByZW1vdmUgdGhlIGFyZ3VtZW50IHNwZWNpZmljYXRpb24gZnJvbQor CQkgICAgIHRoZSB0YWcgbmFtZS4gIE1vcmUgZ2VuZXJhbGx5IHdlIGFsbG93IG9ubHkgb25lIChk ZWxldGVkKQorCQkgICAgIGVzY2FwZSBjaGFyIGluIGEgdGFnIG5hbWUsIHdoaWNoIChwcmltYXJp bHkpIGVuYWJsZXMKKwkJICAgICB0YWdnaW5nIGEgVGVYIGNvbW1hbmQncyBkaWZmZXJlbnQsIHBv c3NpYmx5IHRlbXBvcmFyeSwKKwkJICAgICAnXGxldCcgYmluZGluZ3MuICovCisJCSAgaWYgKGlz X2V4cGx0aHJlZSAmJiAqcCA9PSAnOicpCisJCSAgICBicmVhazsKKwkJICBlbHNlIGlmICgqcCA9 PSBURVhfZXNjKQorCQkgICAgeyAvKiBTZWNvbmQgcGFydCBvZiB0ZXN0IGlzIGZvciwgZS5nLiwg XGNzbGV0LiAqLworCQkgICAgICBpZiAoIW9uZV9lc2MgJiYgIW9wZ3JwKQorCQkJeworCQkJICBv bmVfZXNjID0gdHJ1ZTsKKwkJCSAgY29udGludWU7CisJCQl9CisJCSAgICAgIGVsc2UKKwkJCWJy ZWFrOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIGNvbnRpbnVlOworCQkvKiBGb3IgVGVYIGZp bGVzLCB0YWdzIHdpdGhvdXQgYSBuYW1lIGFyZSBiYXNpY2FsbHkgY3J1ZnQsIGFuZAorCQkgICBp biBzb21lIHNpdHVhdGlvbnMgdGhleSBjYW4gcHJvZHVjZSBzcHVyaW91cyBhbmQgY29uZnVzaW5n CisJCSAgIG1hdGNoZXMuICBUcnkgdG8gY2F0Y2ggYXMgbWFueSBjYXNlcyBhcyBwb3NzaWJsZSB3 aGVyZSBhCisJCSAgIGNvbW1hbmQgbmFtZSBpcyBvZiB0aGUgZm9ybSAnXCgnLCBidXQgYXZvaWQs IGFzIGZhciBhcworCQkgICBwb3NzaWJsZSwgdGhlIHNwdXJpb3VzIG1hdGNoZXMuICovCisJCWlm IChwID09IGNwKQorCQkgIHsKKwkJICAgIHN3aXRjaCAoKnApCisJCSAgICAgIHsgLyogSW5jbHVk ZSA9PyAqLworCQkgICAgICBjYXNlICcoJzogY2FzZSAnWyc6IGNhc2UgJyInOiBjYXNlICdcJyc6 CisJCSAgICAgIGNhc2UgJ1xcJzogY2FzZSAnISc6IGNhc2UgJz0nOiBjYXNlICcsJzoKKwkJICAg ICAgY2FzZSAnfCc6IGNhc2UgJyQnOgorCQkJcCsrOworCQkJYnJlYWs7CisJCSAgICAgIGNhc2Ug J3snOiBjYXNlICd9JzogY2FzZSAnPCc6IGNhc2UgJz4nOgorCQkJaWYgKCFvcGdycCkKKwkJCSAg eworCQkJICAgICAgcCsrOworCQkJICAgICAgaWYgKCpwID09ICdcMCcgfHwgKnAgPT0gJyUnKQor CQkJCWdvdG8gdGV4X25leHRfbGluZTsKKwkJCSAgfQorCQkJYnJlYWs7CisJCSAgICAgIGRlZmF1 bHQ6CisJCQlicmVhazsKKwkJICAgICAgfQorCQkgIH0KIAkJbmFtZWxlbiA9IHAgLSBjcDsKIAkJ bGluZWxlbiA9IGxiLmxlbjsKIAkJaWYgKCFvcGdycCB8fCAqcCA9PSBURVhfY2xncnApCkBAIC01 ODI0LDkgKzU5NzIsMTggQEAgVGVYX2NvbW1hbmRzIChGSUxFICppbmYpCiAJCSAgICAgIHArKzsK IAkJICAgIGxpbmVsZW4gPSBwIC0gbGIuYnVmZmVyICsgMTsKIAkJICB9Ci0JCW1ha2VfdGFnIChj cCwgbmFtZWxlbiwgdHJ1ZSwKLQkJCSAgbGIuYnVmZmVyLCBsaW5lbGVuLCBsaW5lbm8sIGxpbmVj aGFybm8pOwotCQlnb3RvIHRleF9uZXh0X2xpbmU7IC8qIFdlIG9ubHkgdGFnIGEgbGluZSBvbmNl ICovCisJCWlmIChuYW1lbGVuKQorCQkgIG1ha2VfdGFnIChjcCwgbmFtZWxlbiwgdHJ1ZSwKKwkJ CSAgICBsYi5idWZmZXIsIGxpbmVsZW4sIGxpbmVubywgbGluZWNoYXJubyk7CisJCS8qIExpbmVz IHdpdGggbW9yZSB0aGFuIG9uZSBcZGVmIG9yIFxsZXQgYXJlIHN1cnByaXNpbmdseQorCQkgICBj b21tb24gaW4gVGVYIGZpbGVzLCBlc3BlY2lhbGx5IGluIHRoZSBzeXN0ZW0gZmlsZXMgdGhhdAor CQkgICBmb3JtIHRoZSBiYXNpcyBvZiB0aGUgdmFyaW91cyBUZVggZm9ybWF0cy4gIFRoaXMgdGFn cyB0aGVtCisJCSAgIGFsbC4gKi8KKwkJLyogZ290byB0ZXhfbmV4dF9saW5lOyAvXCogV2Ugb25s eSB0YWcgYSBsaW5lIG9uY2UgKlwvICovCisJCXdoaWxlICgqY3AgIT0gJ1wwJyAmJiAqY3AgIT0g JyUnICYmICpjcCAhPSBURVhfZXNjKQorCQkgIGNwKys7CisJCWlmICgqY3AgIT0gVEVYX2VzYykK KwkJICBnb3RvIHRleF9uZXh0X2xpbmU7CiAJICAgICAgfQogCX0KICAgICB0ZXhfbmV4dF9saW5l OgpkaWZmIC0tZ2l0IGEvbGlzcC90ZXh0bW9kZXMvdGV4LW1vZGUuZWwgYi9saXNwL3RleHRtb2Rl cy90ZXgtbW9kZS5lbAppbmRleCA5N2M5NTAyNjdjNi4uNGE1OTVhYTFlYTUgMTAwNjQ0Ci0tLSBh L2xpc3AvdGV4dG1vZGVzL3RleC1tb2RlLmVsCisrKyBiL2xpc3AvdGV4dG1vZGVzL3RleC1tb2Rl LmVsCkBAIC02MzYsNiArNjM2LDE0IEBAIHRleC1mb250LWxvY2sta2V5d29yZHMtMgogCSAgICAg IDMgJyh0ZXgtZm9udC1sb2NrLWFwcGVuZC1wcm9wICdib2xkKSAnYXBwZW5kKSkpKSkKICAgICJH YXVkeSBleHByZXNzaW9ucyB0byBoaWdobGlnaHQgaW4gVGVYIG1vZGVzLiIpCiAKKyhkZWZ2YXIt bG9jYWwgdGV4LWV4cGwtcmVnaW9uLWxpc3QgbmlsCisgICJMaXN0IG9mIHJlZ2lvbiBib3VuZGFy aWVzIHdoZXJlIGV4cGwzIHN5bnRheCBpcyBhY3RpdmUuCitJdCB3aWxsIGJlIG5pbCBpbiBidWZm ZXJzIHdoZXJlIGV4cGwzIHN5bnRheCBpcyBhbHdheXMgYWN0aXZlLCBlLmcuLAorZXhwbDMgY2xh c3NlcyBvciBwYWNrYWdlcy4iKQorCisoZGVmdmFyLWxvY2FsIHRleC1leHBsLWJ1ZmZlci1wIG5p bAorICAiTm9uLW5pbCBpbiBidWZmZXJzIHdoZXJlIGV4cGwzIHN5bnRheCBpcyBhbHdheXMgYWN0 aXZlLiIpCisKIChkZWZ1biB0ZXgtZm9udC1sb2NrLXN1c2NyaXB0IChwb3MpCiAgICh1bmxlc3Mg KG9yIChtZW1xIChnZXQtdGV4dC1wcm9wZXJ0eSBwb3MgJ2ZhY2UpCiAJCSAgICAnKGZvbnQtbG9j ay1jb25zdGFudC1mYWNlIGZvbnQtbG9jay1idWlsdGluLWZhY2UKQEAgLTY0NSw3ICs2NTMsMTcg QEAgdGV4LWZvbnQtbG9jay1zdXNjcmlwdAogCQkgICAgKHBvcyBwb3MpKQogCQkod2hpbGUgKGVx IChjaGFyLWJlZm9yZSBwb3MpID9cXCkKIAkJICAoc2V0cSBwb3MgKDEtIHBvcykgb2RkIChub3Qg b2RkKSkpCi0JCW9kZCkpCisJCW9kZCkKKyAgICAgICAgICAgICAgOzsgQ2hlY2sgaWYgUE9TIGlz IGluIGFuIGV4cGwzIHN5bnRheCByZWdpb24gb3IgYW4gZXhwbDMgYnVmZmVyCisgICAgICAgICAg ICAgICh3aGVuIChlcSAoY2hhci1hZnRlciBwb3MpID9fKQorICAgICAgICAgICAgICAgIChvciB0 ZXgtZXhwbC1idWZmZXItcAorICAgICAgICAgICAgICAgICAgICAoYW5kCisgICAgICAgICAgICAg ICAgICAgICB0ZXgtZXhwbC1yZWdpb24tbGlzdAorICAgICAgICAgICAgICAgICAgICAgKGNhdGNo ICdyZXN1bHQKKwkgICAgICAgICAgICAgICAoZG9saXN0IChyYW5nZSB0ZXgtZXhwbC1yZWdpb24t bGlzdCkKKwkgICAgICAgICAgICAgICAgIChhbmQgKD4gcG9zIChjYXIgcmFuZ2UpKQorCSAgICAg ICAgICAgICAgICAgICAgICAoPCBwb3MgKGNkciByYW5nZSkpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAodGhyb3cgJ3Jlc3VsdCB0KSkpKSkpKSkKICAgICAoaWYgKGVxIChjaGFyLWFm dGVyIHBvcykgP18pCiAJYChmYWNlIHN1YnNjcmlwdCBkaXNwbGF5IChyYWlzZSAsKGNhciB0ZXgt Zm9udC1zY3JpcHQtZGlzcGxheSkpKQogICAgICAgYChmYWNlIHN1cGVyc2NyaXB0IGRpc3BsYXkg KHJhaXNlICwoY2FkciB0ZXgtZm9udC1zY3JpcHQtZGlzcGxheSkpKSkpKQpAQCAtMTI4OSw4ICsx MzA3LDE2IEBAIHRleC1jb21tb24taW5pdGlhbGl6YXRpb24KICAgICAgICAgICAgICAgICAjJ3Rl eC0tcHJldHRpZnktc3ltYm9scy1jb21wb3NlLXApCiAgIChzZXRxLWxvY2FsIHN5bnRheC1wcm9w ZXJ0aXplLWZ1bmN0aW9uCiAJICAgICAgKHN5bnRheC1wcm9wZXJ0aXplLXJ1bGVzIGxhdGV4LXN5 bnRheC1wcm9wZXJ0aXplLXJ1bGVzKSkKKyAgOzsgRG9uJ3QgYWRkIGV4dHJhIHByb2Nlc3Npbmcg dG8gYHN5bnRheC1wcm9wZXJ0aXplJyBpbiBmaWxlcyB3aGVyZQorICA7OyBleHBsMyBzeW50YXgg aXMgYWx3YXlzIGFjdGl2ZS4KKyAgOmFmdGVyLWhvb2sgKHByb2duICh0ZXgtZXhwbC1idWZmZXIt cGFyc2UpCisgICAgICAgICAgICAgICAgICAgICAodW5sZXNzIHRleC1leHBsLWJ1ZmZlci1wCisg ICAgICAgICAgICAgICAgICAgICAgIChhZGQtaG9vayAnc3ludGF4LXByb3BlcnRpemUtZXh0ZW5k LXJlZ2lvbi1mdW5jdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMndGV4 LWV4cGwtcmVnaW9uLXNldCBuaWwgdCkpKQogICA7OyBUQUJzIGluIHZlcmJhdGltIGVudmlyb25t ZW50cyBkb24ndCBkbyB3aGF0IHlvdSB0aGluay4KICAgKHNldHEtbG9jYWwgaW5kZW50LXRhYnMt bW9kZSBuaWwpCisgIDs7IFNldCB1cCB4cmVmIGJhY2tlbmQgaW4gVGVYIGJ1ZmZlcnMuCisgIChh ZGQtaG9vayAneHJlZi1iYWNrZW5kLWZ1bmN0aW9ucyAjJ3RleC0teHJlZi1iYWNrZW5kIG5pbCB0 KQogICA7OyBPdGhlciB2YXJzIHRoYXQgc2hvdWxkIGJlIGJ1ZmZlci1sb2NhbC4KICAgKG1ha2Ut bG9jYWwtdmFyaWFibGUgJ3RleC1jb21tYW5kKQogICAobWFrZS1sb2NhbC12YXJpYWJsZSAndGV4 LXN0YXJ0LW9mLWhlYWRlcikKQEAgLTE5MzYsNiArMTk2MiwzNiBAQCB0ZXgtY291bnQtd29yZHMK IAkJKGZvcndhcmQtc2V4cCAxKSkpKSkpCiAgICAgICAobWVzc2FnZSAiJXMgd29yZHMiIGNvdW50 KSkpKQogCisoZGVmdW4gdGV4LWV4cGwtYnVmZmVyLXBhcnNlICgpCisgICJJZGVudGlmeSBidWZm ZXJzIHdoZXJlIGV4cGwzIHN5bnRheCBpcyBhbHdheXMgYWN0aXZlLiIKKyAgKHNhdmUtZXhjdXJz aW9uCisgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKKyAgICAod2hlbiAodGV4LXNlYXJjaC1u b25jb21tZW50CisJICAgKHJlLXNlYXJjaC1mb3J3YXJkCisJICAgICJcXFxcXFwoPzpFeHBsRmls ZVxcfFByb3ZpZGVzRXhwbFxcfF9feHBhcnNlX2ZpbGVcXCkiCisJICAgIG5pbCB0KSkKKyAgICAg IChzZXRxIHRleC1leHBsLWJ1ZmZlci1wIHQpKSkpCisKKyhkZWZ1biB0ZXgtZXhwbC1yZWdpb24t c2V0IChfYmVnIF9lbmQpCisgICJDcmVhdGUgYSBsaXN0IG9mIHJlZ2lvbnMgd2hlcmUgZXhwbDMg c3ludGF4IGlzIGFjdGl2ZS4KK1RoaXMgZnVuY3Rpb24gdXBkYXRlcyB0aGUgbGlzdCB3aGVuZXZl ciBgc3ludGF4LXByb3BlcnRpemUnIHJ1bnMsIGFuZAorc3RvcmVzIGl0IGluIHRoZSBidWZmZXIt bG9jYWwgdmFyaWFibGUgYHRleC1leHBsLXJlZ2lvbi1saXN0Jy4gIFRoZQorbGlzdCB3aWxsIGFs d2F5cyBiZSBuaWwgd2hlbiB0aGUgYnVmZmVyIHZpc2l0cyBhbiBleHBsMyBmaWxlLCBlLmcuLCBh bgorZXhwbDMgY2xhc3Mgb3IgcGFja2FnZSwgd2hlcmUgZXhwbDMgc3ludGF4IGlzIGFsd2F5cyBh Y3RpdmUuIgorICAodW5sZXNzIHN5bnRheC1wcHNzLS11cGRhdGVkLWNhY2hlOzsgU3RvcCBmb3J3 YXJkIHNlYXJjaCBydW5uaW5nIHR3aWNlLgorICAgIChzZXRxIHRleC1leHBsLXJlZ2lvbi1saXN0 IG5pbCkKKyAgICA7OyBMZWF2aW5nIHRoaXMgdGVzdCBoZXJlIGFsbG93cyB1c2VycyB0byBzZXQg YHRleC1leHBsLWJ1ZmZlci1wJworICAgIDs7IGluZGVwZW5kZW50bHkgb2YgdGhlIG1vZGUncyBh dXRvbWF0aWMgZGV0ZWN0aW9uIG9mIGFuIGV4cGwzIGZpbGUuCisgICAgKHVubGVzcyB0ZXgtZXhw bC1idWZmZXItcAorICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKKyAgICAgIChsZXQgKChj YXNlLWZvbGQtc2VhcmNoIG5pbCkpCisgICAgICAgICh3aGlsZSAodGV4LXNlYXJjaC1ub25jb21t ZW50CisgICAgICAgICAgICAgICAgKHNlYXJjaC1mb3J3YXJkICJcXEV4cGxTeW50YXhPbiIgbmls IHQpKQorICAgICAgICAgIChsZXQgKChuZXctYmVnIChwb2ludCkpCisgICAgICAgICAgICAgICAg KG5ldy1lbmQgKG9yICh0ZXgtc2VhcmNoLW5vbmNvbW1lbnQKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChzZWFyY2gtZm9yd2FyZCAiXFxFeHBsU3ludGF4T2ZmIiBuaWwgdCkpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChwb2ludC1tYXgpKSkpCisgICAgICAgICAgICAocHVz aCAoY29ucyBuZXctYmVnIG5ldy1lbmQpIHRleC1leHBsLXJlZ2lvbi1saXN0KSkpKSkpKQogCiAM CiA7OzsgSW52b2tpbmcgVGVYIGluIGFuIGluZmVyaW9yIHNoZWxsLgpAQCAtMzc0Miw2ICszNzk4 LDMyMSBAQCB0ZXgtY2hrdGV4CiAgICAgICAocHJvY2Vzcy1zZW5kLXJlZ2lvbiB0ZXgtY2hrdGV4 LS1wcm9jZXNzIChwb2ludC1taW4pIChwb2ludC1tYXgpKQogICAgICAgKHByb2Nlc3Mtc2VuZC1l b2YgdGV4LWNoa3RleC0tcHJvY2VzcykpKSkKIAorDAorOzs7IFhyZWYgYmFja2VuZAorCis7OyBI ZXJlIHdlIGxpZ2h0bHkgYWRhcHQgdGhlIGRlZmF1bHQgZXRhZ3MgYmFja2VuZCBmb3IgeHJlZiBz byB0aGF0Cis7OyB0aGUgbWFpbiB4cmVmIHVzZXIgY29tbWFuZHMgKGluY2x1ZGluZyBgeHJlZi1m aW5kLWRlZmluaXRpb25zJywKKzs7IGB4cmVmLWZpbmQtYXByb3BvcycsIGFuZCBgeHJlZi1maW5k LXJlZmVyZW5jZXMnIFtvbiBNLS4sIEMtTS0uLCBhbmQKKzs7IE0tPywgcmVzcGVjdGl2ZWx5XSkg d29yayBpbiBUZVggYnVmZmVycy4gIFRoZSBvbmx5IG1ldGhvZHMgd2UKKzs7IGFjdHVhbGx5IG1v ZGlmeSBhcmUgYHhyZWYtYmFja2VuZC1pZGVudGlmaWVyLWF0LXBvaW50JyBhbmQKKzs7IGB4cmVm LWJhY2tlbmQtcmVmZXJlbmNlcycuICBNYW55IG9mIHRoZSBjb21wbGljYXRpb25zIGhlcmUsIGFu ZCBpbgorOzsgYGV0YWdzJyBpdHNlbGYsIGFyZSBkdWUgdG8gdGhlIG5lY2Vzc2l0eSBvZiBwYXJz aW5nIGJvdGggdGhlIG9sZAorOzsgVGVYIHN5bnRheCBhbmQgdGhlIG5ldyBleHBsMyBzeW50YXgs IHdoaWNoIHdpbGwgY29udGludWUgdG8gYXBwZWFyCis7OyB0b2dldGhlciBpbiBkb2N1bWVudHMg Zm9yIHRoZSBmb3Jlc2VlYWJsZSBmdXR1cmUuICBTeW5jaHJvbml6aW5nCis7OyBFbWFjcyBhbmQg YGV0YWdzJyB0aGlzIHdheSBhaW1zIHRvIGltcHJvdmUgdGhlIHVzZXIgZXhwZXJpZW5jZSAib3V0 Cis7OyBvZiB0aGUgYm94LiIKKworKGRlZnZhciB0ZXgtdGhpbmdhdHB0LWV4Y2x1ZGUtY2hhcnMg Jyg/XFwgP1x7ID9cfSkKKyAgIkV4Y2x1ZGUgdGhlc2UgY2hhcnMgYnkgZGVmYXVsdCBmcm9tIFRl WCB0aGluZy1hdC1wb2ludC4KKworVGhlIFRlWCBgeHJlZi1iYWNrZW5kLWlkZW50aWZpZXItYXQt cG9pbnQnIG1ldGhvZCB1c2VzIHRoZSBjaGFyYWN0ZXJzCitsaXN0ZWQgaW4gdGhpcyB2YXJpYWJs ZSB0byBkZWNpZGUgb24gdGhlIGRlZmF1bHQgc2VhcmNoIHN0cmluZyB0bworcHJlc2VudCB0byB0 aGUgdXNlciB3aG8gY2FsbHMgYW4gYHhyZWYnIGNvbW1hbmQuICBUaGVzZSBjaGFyYWN0ZXJzCiti ZWNvbWUgcGFydCBvZiBhIHJlZ2V4cCB3aGljaCBhbHdheXMgZXhjbHVkZXMgdGhlbSBmcm9tIHRo YXQgZGVmYXVsdAorc3RyaW5nLiAgRm9yIHRoZSBgeHJlZicgY29tbWFuZHMgdG8gZnVuY3Rpb24g cHJvcGVybHkgaW4gVGVYIGJ1ZmZlcnMsIGF0CitsZWFzdCB0aGUgVGVYIGVzY2FwZSBhbmQgdGhl IHR3byBUZVggZ3JvdXBpbmcgY2hhcmFjdGVycyBzaG91bGQgYmUKK2xpc3RlZCBoZXJlLiAgU2hv dWxkIHlvdXIgVGVYIGRvY3VtZW50cyBjb250YWluIG90aGVyIGNoYXJhY3RlcnMgd2hpY2gKK3lv dSB3YW50IHRvIGV4Y2x1ZGUgYnkgZGVmYXVsdCwgdGhlbiB5b3UgY2FuIGFkZCB0aGVtIHRvIHRo ZSBsaXN0LAordGhvdWdoIHlvdSBtYXkgd2lzaCB0byBjb25zdWx0IHRoZSBmdW5jdGlvbnMKK2B0 ZXgtdGhpbmdhdHB0LS1iZWdpbm5pbmctb2Ytc3ltYm9sJyBhbmQgYHRleC10aGluZ2F0cHQtLWVu ZC1vZi1zeW1ib2wnCit0byBzZWUgd2hhdCB0aGUgcmVnZXhwIGFscmVhZHkgY29udGFpbnMuICBJ ZiB5b3VyIGRvY3VtZW50cyBjb250YWluCitub24tc3RhbmRhcmQgZXNjYXBlIGFuZCBncm91cGlu ZyBjaGFyYWN0ZXJzLCB0aGVuIHlvdSBjYW4gcmVwbGFjZSB0aGUKK3RocmVlIGxpc3RlZCBoZXJl IHdpdGggeW91ciBvd24sIHRoZXJlYnkgYWxsb3dpbmcgdGhlIHRocmVlIHN0YW5kYXJkCitjaGFy YWN0ZXJzIHRvIGFwcGVhciBieSBkZWZhdWx0IGluIHNlYXJjaCBzdHJpbmdzLiAgUGxlYXNlIGJl IGF3YXJlLAoraG93ZXZlciwgdGhhdCB0aGUgYGV0YWdzJyBwcm9ncmFtIG9ubHkgcmVjb2duaXpl cyBgXFwnICg5MikgYW5kIGAhJyAoMzMpCithcyBlc2NhcGUgY2hhcmFjdGVycyBpbiBUZVggZG9j dW1lbnRzLCBhbmQgaWYgaXQgZGV0ZWN0cyB0aGUgbGF0dGVyIGl0CithbHNvIHVzZXMgYDw+JyBh cyB0aGUgVGVYIGdyb3VwaW5nIGNvbnN0cnVjdCByYXRoZXIgdGhhbiBge30nLiAgU2V0dGluZwor dGhlIGVzY2FwZSBhbmQgZ3JvdXBpbmcgY2hhcnMgdG8gYW55dGhpbmcgb3RoZXIgdGhhbiBgXFw9 XFx7fScgb3IgYCE8PicKK3dpbGwgbm90IGJlIHVzZWZ1bCB3aXRob3V0IGNoYW5nZXMgdG8gYGV0 YWdzJywgYXQgbGVhc3QgZm9yIGNvbW1hbmRzCit0aGF0IHNlYXJjaCB0YWdzIHRhYmxlcywgc3Vj aCBhcyBcXFt4cmVmLWZpbmQtZGVmaW5pdGlvbnNdIGFuZCBcCitcXFt4cmVmLWZpbmQtYXByb3Bv c10uCisKK1Nob3VsZCB5b3Ugd2lzaCB0byBjaGFuZ2UgdGhlIGRlZmF1bHRzLCBwbGVhc2UgYWxz byBiZSBhd2FyZSB0aGF0LAord2l0aG91dCBmdXJ0aGVyIG1vZGlmaWNhdGlvbnMgdG8gdGV4LW1v ZGUuZWwsIHRoZSB1c3VhbCB0ZXh0LXBhcnNpbmcKK3JvdXRpbmVzIGZvciBgZm9udC1sb2NrJyBh bmQgdGhlIGxpa2Ugd29uJ3Qgd29yayBjb3JyZWN0bHksIGFzIHRoZQorZGVmYXVsdCBlc2NhcGUg YW5kIGdyb3VwaW5nIGNoYXJhY3RlcnMgYXJlIGN1cnJlbnRseSBoYXJkIGNvZGVkIGluIG1hbnkK K3BsYWNlcy4iKQorCis7OyBQb3B1bGF0ZSBgc2VtYW50aWMtc3ltcmVmLWZpbGVwYXR0ZXJuLWFs aXN0JyBmb3IgdGhlIGluLXRyZWUgbW9kZXM7Cis7OyBBVUNUZVggaXMgZG9pbmcgdGhlIHNhbWUg Zm9yIGl0cyBtb2Rlcy4KKyh3aXRoLWV2YWwtYWZ0ZXItbG9hZCAnc2VtYW50aWMvc3ltcmVmL2dy ZXAKKyAgKGRlZnZhciBzZW1hbnRpYy1zeW1yZWYtZmlsZXBhdHRlcm4tYWxpc3QpCisgIChwdXNo ICcobGF0ZXgtbW9kZSAiKi5bdFRdZVt4WF0iICIqLmx0eCIgIiouc3R5IiAiKi5jbFtzb10iCisg ICAgICAgICAgICAgICAgICAgICAiKi5iYmwiICIqLmRydiIgIiouaHZhIikKKyAgICAgICAgc2Vt YW50aWMtc3ltcmVmLWZpbGVwYXR0ZXJuLWFsaXN0KQorICAocHVzaCAnKHBsYWluLXRleC1tb2Rl ICIqLlt0VF1lW3hYXSIgIiouaW5zIikKKyAgICAgICAgc2VtYW50aWMtc3ltcmVmLWZpbGVwYXR0 ZXJuLWFsaXN0KQorICAocHVzaCAnKGRvY3RleC1tb2RlICIqLmR0eCIpIHNlbWFudGljLXN5bXJl Zi1maWxlcGF0dGVybi1hbGlzdCkpCisKKyhkZWZ1biB0ZXgtLXhyZWYtYmFja2VuZCAoKSAndGV4 LWV0YWdzKQorCis7OyBTZXR1cCBBVUNUZVggbW9kZXMgKGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9u bHkpLgorCisoYWRkLWhvb2sgJ1RlWC1tb2RlLWhvb2sgIyd0ZXgtc2V0LWF1Y3RleC14cmVmLWJh Y2tlbmQpCisKKyhkZWZ1biB0ZXgtc2V0LWF1Y3RleC14cmVmLWJhY2tlbmQgKCkKKyAgKGFkZC1o b29rICd4cmVmLWJhY2tlbmQtZnVuY3Rpb25zICMndGV4LS14cmVmLWJhY2tlbmQgbmlsIHQpKQor Cis7OyBgeHJlZi1maW5kLXJlZmVyZW5jZXMnIGN1cnJlbnRseSBtYXkgbmVlZCB0aGlzIHdoZW4g Y2FsbGVkIGZyb20gYQorOzsgbGF0ZXgtbW9kZSBidWZmZXIgaW4gb3JkZXIgdG8gc2VhcmNoIGZp bGVzIG9yIGJ1ZmZlcnMgd2l0aCBhIC50ZXgKKzs7IHN1ZmZpeCAoaW5jbHVkaW5nIHRoZSBidWZm ZXIgZnJvbSB3aGljaCBpdCBoYXMgYmVlbiBjYWxsZWQpLiAgV2UKKzs7IGFwcGVuZCBpdCB0byBg YXV0by1tb2RlLWFsaXN0JyBzbyBhcyBub3QgdG8gaW50ZXJmZXJlIHdpdGggdGhlIHVzdWFsCis7 OyBtb2RlLXNldHRpbmcgYXBwYXJhdHVzLiAgQ2hhbmdlcyBoZXJlIGFuZCBpbiBBVUNUZVggc2hv dWxkIHNvb24KKzs7IHJlbmRlciBpdCB1bm5lY2Vzc2FyeS4KKyhhZGQtdG8tbGlzdCAnYXV0by1t b2RlLWFsaXN0ICcoIlxcLlt0VF1lW3hYXVxcJyIgLiBsYXRleC1tb2RlKSB0KQorCisoY2wtZGVm bWV0aG9kIHhyZWYtYmFja2VuZC1pZGVudGlmaWVyLWF0LXBvaW50ICgoX2JhY2tlbmQgKGVxbCAn dGV4LWV0YWdzKSkpCisgIChyZXF1aXJlICdldGFncykKKyAgKHRleC0tdGhpbmctYXQtcG9pbnQp KQorCis7OyBUaGUgZGV0ZWN0aW9uIG9mIGBfJyBhbmQgYDonIGlzIGEgcHJpbWl0aXZlIG1ldGhv ZCBmb3IgZGV0ZXJtaW5pbmcKKzs7IHdoZXRoZXIgcG9pbnQgaXMgb24gYW4gZXhwbDMgY29uc3Ry dWN0LiAgSXQgbWF5IGZhaWwgaW4gc29tZQorOzsgaW5zdGFuY2VzLgorKGRlZnVuIHRleC0tdGhp bmctYXQtcG9pbnQgKCkKKyAgIkRlbWFyY2F0ZSBgdGhpbmctYXQtcG9pbnQnIGZvciB0aGUgVGVY IGB4cmVmJyBiYWNrZW5kLiIKKyAgKGxldCAoKGJvdW5kcyAodGV4LS1ib3VuZHMtb2Ytc3ltYm9s LWF0LXBvaW50KSkpCisgICAgKHdoZW4gYm91bmRzCisgICAgICAobGV0ICgodGV4c3ltIChidWZm ZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMgKGNhciBib3VuZHMpIChjZHIgYm91bmRzKSkpKQor ICAgICAgICAoaWYgKGFuZCAobm90IChzdHJpbmctbWF0Y2gtcCAicmVmZXJlbmNlIiAoc3ltYm9s LW5hbWUgdGhpcy1jb21tYW5kKSkpCisgICAgICAgICAgICAgICAgIChzZXEtY29udGFpbnMtcCB0 ZXhzeW0gP18pCisgICAgICAgICAgICAgICAgIChzZXEtY29udGFpbnMtcCB0ZXhzeW0gPzopKQor ICAgICAgICAgICAgKHNlcS10YWtlIHRleHN5bSAoc2VxLXBvc2l0aW9uIHRleHN5bSA/OikpCisg ICAgICAgICAgdGV4c3ltKSkpKSkKKworKGRlZnVuIHRleC10aGluZ2F0cHQtLWJlZ2lubmluZy1v Zi1zeW1ib2wgKCkKKyAgKGFuZAorICAgKHJlLXNlYXJjaC1iYWNrd2FyZCAoY29uY2F0ICJbXVsi CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hcGNvbmNhdCAjJ3JlZ2V4cC1xdW90 ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hcGNhciAjJ2No YXItdG8tc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRleC10aGluZ2F0cHQtZXhjbHVkZS1jaGFycykpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlwiKmAnIz0mKCklLHwkWzpjbnRybDpdWzpibGFuazpdXSIpKQorICAgKGZv cndhcmQtY2hhcikpKQorCisoZGVmdW4gdGV4LXRoaW5nYXRwdC0tZW5kLW9mLXN5bWJvbCAoKQor ICAoYW5kCisgICAocmUtc2VhcmNoLWZvcndhcmQgKGNvbmNhdCAiW11bIgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKG1hcGNvbmNhdCAjJ3JlZ2V4cC1xdW90ZQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hcGNhciAjJ2NoYXItdG8tc3RyaW5nCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleC10aGlu Z2F0cHQtZXhjbHVkZS1jaGFycykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIq YCcjPSYoKSUsfCRbOmNudHJsOl1bOmJsYW5rOl1dIikpCisgICAoYmFja3dhcmQtY2hhcikpKQor CisoZGVmdW4gdGV4LS1ib3VuZHMtb2Ytc3ltYm9sLWF0LXBvaW50ICgpCisgICJTaW1wbGlmeSBg Ym91bmRzLW9mLXRoaW5nLWF0LXBvaW50JyBmb3IgVGVYIGB4cmVmJyBiYWNrZW5kLiIKKyAgKGxl dCAoKG9yaWcgKHBvaW50KSkpCisgICAgKGlnbm9yZS1lcnJvcnMKKyAgICAgIChzYXZlLWV4Y3Vy c2lvbgorCSh0ZXgtdGhpbmdhdHB0LS1lbmQtb2Ytc3ltYm9sKQorCSh0ZXgtdGhpbmdhdHB0LS1i ZWdpbm5pbmctb2Ytc3ltYm9sKQorCShsZXQgKChiZWcgKHBvaW50KSkpCisJICAoaWYgKDw9IGJl ZyBvcmlnKQorCSAgICAgIChsZXQgKChyZWFsLWVuZAorCQkgICAgIChwcm9nbgorCQkgICAgICAg KHRleC10aGluZ2F0cHQtLWVuZC1vZi1zeW1ib2wpCisJCSAgICAgICAocG9pbnQpKSkpCisJCShj b25kICgoYW5kICg8PSBvcmlnIHJlYWwtZW5kKSAoPCBiZWcgcmVhbC1lbmQpKQorCQkgICAgICAg KGNvbnMgYmVnIHJlYWwtZW5kKSkKKyAgICAgICAgICAgICAgICAgICAgICAoKGFuZCAoPSBvcmln IHJlYWwtZW5kKSAoPSBiZWcgcmVhbC1lbmQpKQorCQkgICAgICAgKGNvbnMgYmVnICgxKyBiZWcp KSkpKSkpKSkpKTs7IEZvciAxLWNoYXIgVGVYIGNvbW1hbmRzLgorCisoY2wtZGVmbWV0aG9kIHhy ZWYtYmFja2VuZC1pZGVudGlmaWVyLWNvbXBsZXRpb24tdGFibGUgKChfYmFja2VuZAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVxbCAn dGV4LWV0YWdzKSkpCisgICh4cmVmLWJhY2tlbmQtaWRlbnRpZmllci1jb21wbGV0aW9uLXRhYmxl ICdldGFncykpCisKKyhjbC1kZWZtZXRob2QgeHJlZi1iYWNrZW5kLWlkZW50aWZpZXItY29tcGxl dGlvbi1pZ25vcmUtY2FzZSAoKF9iYWNrZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXFsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RleC1ldGFn cykpKQorICAoeHJlZi1iYWNrZW5kLWlkZW50aWZpZXItY29tcGxldGlvbi1pZ25vcmUtY2FzZSAn ZXRhZ3MpKQorCisoY2wtZGVmbWV0aG9kIHhyZWYtYmFja2VuZC1kZWZpbml0aW9ucyAoKF9iYWNr ZW5kIChlcWwgJ3RleC1ldGFncykpIHN5bWJvbCkKKyAgKHhyZWYtYmFja2VuZC1kZWZpbml0aW9u cyAnZXRhZ3Mgc3ltYm9sKSkKKworKGNsLWRlZm1ldGhvZCB4cmVmLWJhY2tlbmQtYXByb3BvcyAo KF9iYWNrZW5kIChlcWwgJ3RleC1ldGFncykpIHBhdHRlcm4pCisgICh4cmVmLWJhY2tlbmQtYXBy b3BvcyAnZXRhZ3MgcGF0dGVybikpCisKKzs7IFRoZSBgeHJlZi1iYWNrZW5kLXJlZmVyZW5jZXMn IG1ldGhvZCByZXF1aXJlcyBtb3JlIGNvZGUgdGhhbiB0aGUKKzs7IG90aGVycyBmb3IgYXQgbGVh c3QgdHdvIG1haW4gcmVhc29uczogVGVYIGF1dGhvcnMgaGF2ZSB0eXBpY2FsbHkgYmVlbgorOzsg ZnJlZSBpbiB0aGVpciBpbnZlbnRpb24gb2YgbmV3IGZpbGUgdHlwZXMgd2l0aCBuZXcgc3VmZml4 ZXMsIGFuZCB0aGV5Cis7OyBoYXZlIGFsc28gdGVuZGVkIHNvbWV0aW1lcyB0byBpbmNsdWRlIG5v bi1zeW1ib2wgY2hhcmFjdGVycyBpbgorOzsgY29tbWFuZCBuYW1lcy4gIFdoZW4gY29tYmluZWQg d2l0aCB0aGUgZGVmYXVsdCBTZW1hbnRpYyBTeW1ib2wKKzs7IFJlZmVyZW5jZSBBUEksIHRoZXNl IHR3byBjaGFyYWN0ZXJpc3RpY3Mgb2YgVGVYIGNvZGUgbWVhbiB0aGF0IGEKKzs7IGNvbW1hbmQg bGlrZSBgeHJlZi1maW5kLXJlZmVyZW5jZXMnIHdvdWxkIG9mdGVuIGZhaWwgdG8gZmluZCBhbnkg aGl0cworOzsgZm9yIGEgc3ltYm9sIGF0IHBvaW50LCBpbmNsdWRpbmcgdGhlIG9uZSB1bmRlciBw b2ludCBpbiB0aGUgY3VycmVudAorOzsgYnVmZmVyLCBvciBpdCB3b3VsZCBmaW5kIG9ubHkgc29t ZSBpbnN0YW5jZXMgYW5kIHNraXAgb3RoZXJzLgorCisoZGVmdW4gdGV4LWZpbmQtcmVmZXJlbmNl cy1zeW50YXgtdGFibGUgKCkKKyAgKGxldCAoKHN0IChpZiAoYm91bmRwICdUZVgtbW9kZS1zeW50 YXgtdGFibGUpCisgICAgICAgICAgICAgICAgIChtYWtlLXN5bnRheC10YWJsZSBUZVgtbW9kZS1z eW50YXgtdGFibGUpCisgICAgICAgICAgICAgICAobWFrZS1zeW50YXgtdGFibGUgdGV4LW1vZGUt c3ludGF4LXRhYmxlKSkpKQorICAgIHN0KSkKKworKGRlZnZhciB0ZXgtLXhyZWYtc3ludGF4LWZ1 biBuaWwpCisKKyhkZWZ1biB0ZXgteHJlZi1zeW50YXgtZnVuY3Rpb24gKHN0ciBiZWcgZW5kKQor ICAiUHJvdmlkZSBhIGJlc3Bva2UgYHN5bnRheC1wcm9wZXJ0aXplLWZ1bmN0aW9uJyBmb3IgXFxb eHJlZi1maW5kLXJlZmVyZW5jZXNdLiIKKyAgKGxldCogKGdycGIgdGVtcHN0cgorICAgICAgICAg ICAgICAoc2hydHN0ciAoaWYgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvZ24K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNldHEgdGVtcHN0ciAoc2VxLXRha2Ugc3Ry ICgxLSAobGVuZ3RoIHN0cikpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIGJl ZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNldHEgdGVtcHN0ciAoc2VxLWRy b3AgdGVtcHN0ciAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wc3RyKSkK KyAgICAgICAgICAgICAgICAgICAgICAgICAoc2VxLWRyb3Agc3RyIDEpKSkKKyAgICAgICAgICAg ICAgKGdycGEgKGlmIChhbmQgYmVnIGVuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIChwcm9n MQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0IDEgIl8iKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAoc2V0cSBncnBiIChsaXN0IDIgIl8iKSkpCisgICAgICAgICAgICAgICAg ICAgICAgKGxpc3QgMSAiXyIpKSkKKyAgICAgICAgICAgICAgKHJlIChjb25jYXQgYmVnIChyZWdl eHAtcXVvdGUgc2hydHN0cikgZW5kKSkKKyAgICAgICAgICAgICAgKHRlbXAtcnVsZSAoaWYgZ3Jw YgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCByZSBncnBhIGdycGIpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAobGlzdCByZSBncnBhKSkpKQorICAgIDs7IFNpbXBsZSBi ZW5jaG1hcmtzIHN1Z2dlc3RlZCB0aGF0IHRoZSBzcGVlZC11cCBmcm9tIGNvbXBpbGluZyB0aGlz CisgICAgOzsgZnVuY3Rpb24gd2FzIG5lYXJseSBuaWwsIHNvIGBldmFsJyBhbmQgaXRzIG5vbi1i eXRlLWNvbXBpbGVkCisgICAgOzsgZnVuY3Rpb24gcmVtYWluLgorICAgIChzZXRxIHRleC0teHJl Zi1zeW50YXgtZnVuIChldmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAoc3lu dGF4LXByb3BlcnRpemUtcnVsZXMgLHRlbXAtcnVsZSkpKSkpCisKKyhkZWZ1biB0ZXgtLWNvbGxl Y3QtZmlsZS1leHRlbnNpb25zICgpCisgICJHYXRoZXIgVGVYIGZpbGUgZXh0ZW5zaW9ucyBmcm9t IGBhdXRvLW1vZGUtYWxpc3QnLiIKKyAgKGxldCogKChtbGlzdCAod2hlbiAocmFzc3EgbWFqb3It bW9kZSBhdXRvLW1vZGUtYWxpc3QpCisJCSAgKHNlcS1maWx0ZXIKKwkJICAgKGxhbWJkYSAoZWx0 KQorCQkgICAgIChlcSAoY2RyIGVsdCkgbWFqb3ItbW9kZSkpCisJCSAgIGF1dG8tbW9kZS1hbGlz dCkpKQorCSAobGNzeW0gKGludGVybi1zb2Z0IChkb3duY2FzZSAoc3ltYm9sLW5hbWUgbWFqb3It bW9kZSkpKSkKKwkgKGxjbGlzdCAoYW5kIGxjc3ltCisJCSAgICAgIChub3QgKGVxIGxjc3ltIG1h am9yLW1vZGUpKQorCQkgICAgICAocmFzc3EgbGNzeW0gYXV0by1tb2RlLWFsaXN0KQorCQkgICAg ICAoc2VxLWZpbHRlcgorCQkgICAgICAgKGxhbWJkYSAoZWx0KQorCQkJIChlcSAoY2RyIGVsdCkg bGNzeW0pKQorCQkgICAgICAgYXV0by1tb2RlLWFsaXN0KSkpCisJIChzaG9ydHN5bSAod2hlbiAo c3RyaW5ncCBtb2RlLW5hbWUpCisJCSAgICAgKGludGVybi1zb2Z0IChjb25jYXQgKHN0cmluZy10 cmltLXJpZ2h0IG1vZGUtbmFtZSAiLy4qIikKKwkJCQkJICAiLW1vZGUiKSkpKQorCSAobGNzaG9y dHN5bSAod2hlbiAoc3RyaW5ncCBtb2RlLW5hbWUpCisJCSAgICAgICAoaW50ZXJuLXNvZnQgKGRv d25jYXNlCisJCQkJICAgICAoY29uY2F0CisJCQkJICAgICAgKHN0cmluZy10cmltLXJpZ2h0IG1v ZGUtbmFtZSAiLy4qIikKKwkJCQkgICAgICAiLW1vZGUiKSkpKSkKKwkgKHNobGlzdCAoYW5kIHNo b3J0c3ltCisJCSAgICAgIChub3QgKGVxIHNob3J0c3ltIG1ham9yLW1vZGUpKQorCQkgICAgICAo bm90IChlcSBzaG9ydHN5bSBsY3N5bSkpCisJCSAgICAgIChyYXNzcSBzaG9ydHN5bSBhdXRvLW1v ZGUtYWxpc3QpCisJCSAgICAgIChzZXEtZmlsdGVyCisJCSAgICAgICAobGFtYmRhIChlbHQpCisJ CQkgKGVxIChjZHIgZWx0KSBzaG9ydHN5bSkpCisJCSAgICAgICBhdXRvLW1vZGUtYWxpc3QpKSkK KwkgKGxjc2hsaXN0IChhbmQgbGNzaG9ydHN5bQorCQkJKG5vdCAoZXEgbGNzaG9ydHN5bSBtYWpv ci1tb2RlKSkKKwkJCShub3QgKGVxIGxjc2hvcnRzeW0gbGNzeW0pKQorCQkJKHJhc3NxIGxjc2hv cnRzeW0gYXV0by1tb2RlLWFsaXN0KQorCQkJKHNlcS1maWx0ZXIKKwkJCSAobGFtYmRhIChlbHQp CisJCQkgICAoZXEgKGNkciBlbHQpIGxjc2hvcnRzeW0pKQorCQkJIGF1dG8tbW9kZS1hbGlzdCkp KQorCSAoZXh0cyAod2hlbiAob3IgbWxpc3QgbGNsaXN0IHNobGlzdCBsY3NobGlzdCkKKwkJIChz ZXEtdW5pb24gKHNlcS1tYXAgIydjYXIgbGNsaXN0KQorCQkJICAgIChzZXEtdW5pb24gKHNlcS1t YXAgIydjYXIgbWxpc3QpCisJCQkJICAgICAgIChzZXEtdW5pb24gKHNlcS1tYXAgIydjYXIgbGNz aGxpc3QpCisJCQkJCQkgIChzZXEtbWFwICMnY2FyIHNobGlzdCkpKSkpKQorCSAoZWQtZXh0cyAo d2hlbiBleHRzCisJCSAgICAoc2VxLW1hcAorCQkgICAgIChsYW1iZGEgKGVsdCkKKwkJICAgICAg IChjb25jYXQgIioiIChzdHJpbmctdHJpbSAgZWx0ICJcXFxcIiAiXFxcXCciKSkpCisJCSAgICAg ZXh0cykpKSkKKyAgICBlZC1leHRzKSkKKworKGRlZnZhciB0ZXgtLWJ1ZmZlcnMtbGlzdCBuaWwp CisoZGVmdmFyLWxvY2FsIHRleC0tb2xkLXN5bnRheC1mdW5jdGlvbiBuaWwpCisKKyhjbC1kZWZt ZXRob2QgeHJlZi1iYWNrZW5kLXJlZmVyZW5jZXMgKChfYmFja2VuZCAoZXFsICd0ZXgtZXRhZ3Mp KSBpZGVudGlmaWVyKQorICAiRmluZCByZWZlcmVuY2VzIG9mIElERU5USUZJRVIgaW4gVGVYIGJ1 ZmZlcnMgYW5kIGZpbGVzLiIKKyAgKHJlcXVpcmUgJ3NlbWFudGljL3N5bXJlZi9ncmVwKQorICAo ZGVmdmFyIHNlbWFudGljLXN5bXJlZi1maWxlcGF0dGVybi1hbGlzdCkKKyAgKGxldCAoYnVmcyB0 ZXhidWZzCisgICAgICAgICAgICAgKG1vZGUgbWFqb3ItbW9kZSkpCisgICAgKGRvbGlzdCAoYnVm IChidWZmZXItbGlzdCkpCisgICAgICAoaWYgKGVxIChidWZmZXItbG9jYWwtdmFsdWUgJ21ham9y LW1vZGUgYnVmKSBtb2RlKQorICAgICAgICAgIChwdXNoIGJ1ZiBidWZzKQorICAgICAgICAod2hl biAoc3RyaW5nLW1hdGNoLXAgIi4qXFwuW3RUXWVbeFhdIiAoYnVmZmVyLW5hbWUgYnVmKSkKKyAg ICAgICAgICAocHVzaCBidWYgdGV4YnVmcykpKSkKKyAgICAodW5sZXNzIChzZXEtc2V0LWVxdWFs LXAgdGV4LS1idWZmZXJzLWxpc3QgYnVmcykKKyAgICAgIChsZXQqICgoYW1hbGlzdCAodGV4LS1j b2xsZWN0LWZpbGUtZXh0ZW5zaW9ucykpCisJICAgICAoZXh0bGlzdCAoYWxpc3QtZ2V0IG1vZGUg c2VtYW50aWMtc3ltcmVmLWZpbGVwYXR0ZXJuLWFsaXN0KSkKKwkgICAgIChleHRsaXN0LW5ldyAo c2VxLXVuaXEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXEtdW5pb24gYW1hbGlzdCBl eHRsaXN0ICMnc3RyaW5nLW1hdGNoLXApKSkpCisJKHNldHEgdGV4LS1idWZmZXJzLWxpc3QgYnVm cykKKwkoZG9saXN0IChidWYgYnVmcykKKwkgICh3aGVuLWxldCAoKGZidWYgKGJ1ZmZlci1maWxl LW5hbWUgYnVmKSkKKwkJICAgICAoZXh0IChmaWxlLW5hbWUtZXh0ZW5zaW9uIGZidWYpKQorCQkg ICAgIChmaW5leHQgKGNvbmNhdCAiKi4iIGV4dCkpCisJCSAgICAgKChub3QgKHNlcS1maW5kIChs YW1iZGEgKGVsdCkgKHN0cmluZy1tYXRjaC1wIGVsdCBmaW5leHQpKQorCQkJCSAgICAgZXh0bGlz dC1uZXcpKSkKKwkJICAgICAoKHB1c2ggZmluZXh0IGV4dGxpc3QtbmV3KSkpKSkKKwkodW5sZXNz IChzZXEtc2V0LWVxdWFsLXAgZXh0bGlzdC1uZXcgZXh0bGlzdCkKKwkgIChzZXRmIChhbGlzdC1n ZXQgbW9kZSBzZW1hbnRpYy1zeW1yZWYtZmlsZXBhdHRlcm4tYWxpc3QpCisgICAgICAgICAgICAg ICAgZXh0bGlzdC1uZXcpKSkpCisgICAgKGxldCogKHNldHN5bnRheAorICAgICAgICAgICAocHVu Y3QgKHdpdGgtc3ludGF4LXRhYmxlICh0ZXgtZmluZC1yZWZlcmVuY2VzLXN5bnRheC10YWJsZSkK KyAgICAgICAgICAgICAgICAgICAgKHNlcS1wb3NpdGlvbnMgaWRlbnRpZmllciAobGlzdCA/dyA/ XykKKwkJCSAgICAgICAgICAgKGxhbWJkYSAoZWx0IHN5Y29kZSkKKwkJCSAgICAgICAgICAgICAo bm90IChtZW1xIChjaGFyLXN5bnRheCBlbHQpIHN5Y29kZSkpKSkpKQorICAgICAgICAgICAoZW5k IChhbmQgcHVuY3QKKyAgICAgICAgICAgICAgICAgICAgIChtZW1xICgxLSAobGVuZ3RoIGlkZW50 aWZpZXIpKSBwdW5jdCkKKyAgICAgICAgICAgICAgICAgICAgICg+IChsZW5ndGggaWRlbnRpZmll cikgMSkKKyAgICAgICAgICAgICAgICAgICAgIChjb25jYXQgIlxcKCIKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHJlZ2V4cC1xdW90ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKHN0cmluZyAoZWx0IGlkZW50aWZpZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoMS0gKGxlbmd0aCBpZGVudGlmaWVyKSkpKSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlxcKSIpKSkKKyAgICAgICAgICAgKGJlZyAoYW5kIHB1bmN0CisgICAg ICAgICAgICAgICAgICAgICAobWVtcSAwIHB1bmN0KQorICAgICAgICAgICAgICAgICAgICAgKGNv bmNhdCAiXFwoIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVnZXhwLXF1b3RlIChz dHJpbmcgKGVsdCBpZGVudGlmaWVyIDApKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IlxcKSIpKSkKKyAgICAgICAgICAgKHRleHQtbW9kZS1ob29rCisgICAgICAgICAgICAoaWYgKG9y IGVuZCBiZWcpCisgICAgICAgICAgICAgICAgKHByb2duCisgICAgICAgICAgICAgICAgICAodGV4 LXhyZWYtc3ludGF4LWZ1bmN0aW9uIGlkZW50aWZpZXIgYmVnIGVuZCkKKyAgICAgICAgICAgICAg ICAgIChzZXRxIHNldHN5bnRheCAobGFtYmRhICgpCisJCSAgICAgICAgICAgICAgICAgICAgKHNl dHEtbG9jYWwgc3ludGF4LXByb3BlcnRpemUtZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleC0teHJlZi1zeW50YXgtZnVuKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNldHEtbG9jYWwgVGVYLXN0eWxlLWhvb2st YXBwbGllZC1wIHQpKSkKKyAgICAgICAgICAgICAgICAgIChjb25zIHNldHN5bnRheCB0ZXh0LW1v ZGUtaG9vaykpCisgICAgICAgICAgICAgIHRleHQtbW9kZS1ob29rKSkpCisgICAgICAodW5sZXNz IChtZW1xICdkb2N0ZXgtbW9kZSAoZGVyaXZlZC1tb2RlLWFsbC1wYXJlbnRzIG1vZGUpKQorICAg ICAgICAoc2V0cSBidWZzIChhcHBlbmQgdGV4YnVmcyBidWZzKSkpCisgICAgICAod2hlbiAob3Ig ZW5kIGJlZykKKyAgICAgICAgKGRvbGlzdCAoYnVmIGJ1ZnMpCisgICAgICAgICAgKHdpdGgtY3Vy cmVudC1idWZmZXIgYnVmCisgICAgICAgICAgICAodW5sZXNzIChsb2NhbC12YXJpYWJsZS1wICd0 ZXgtLW9sZC1zeW50YXgtZnVuY3Rpb24pCisgICAgICAgICAgICAgIChzZXRxIHRleC0tb2xkLXN5 bnRheC1mdW5jdGlvbiBzeW50YXgtcHJvcGVydGl6ZS1mdW5jdGlvbikpCisgICAgICAgICAgICAo c2V0cS1sb2NhbCBzeW50YXgtcHJvcGVydGl6ZS1mdW5jdGlvbgorICAgICAgICAgICAgICAgICAg ICAgICAgdGV4LS14cmVmLXN5bnRheC1mdW4pCisgICAgICAgICAgICAoc3ludGF4LXBwc3MtZmx1 c2gtY2FjaGUgKHBvaW50LW1pbikpKSkpCisgICAgICAodW53aW5kLXByb3RlY3QKKyAgICAgICAg ICAoeHJlZi1iYWNrZW5kLXJlZmVyZW5jZXMgbmlsIGlkZW50aWZpZXIpCisgICAgICAgICh3aGVu IChvciBlbmQgYmVnKQorICAgICAgICAgIChkb2xpc3QgKGJ1ZiBidWZzKQorICAgICAgICAgICAg KHdpdGgtY3VycmVudC1idWZmZXIgYnVmCisgICAgICAgICAgICAgICh3aGVuIGJ1ZmZlci1maWxl LXRydWVuYW1lCisgICAgICAgICAgICAgICAgKHNldHEtbG9jYWwgc3ludGF4LXByb3BlcnRpemUt ZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXgtLW9sZC1zeW50YXgtZnVu Y3Rpb24pCisgICAgICAgICAgICAgICAgKHN5bnRheC1wcHNzLWZsdXNoLWNhY2hlIChwb2ludC1t aW4pKSkpKSkpKSkpCisKIChtYWtlLW9ic29sZXRlLXZhcmlhYmxlICd0ZXgtbW9kZS1sb2FkLWhv b2sKICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2UgYHdpdGgtZXZhbC1hZnRlci1sb2FkJyBp bnN0ZWFkLiIgIjI4LjEiKQogKHJ1bi1ob29rcyAndGV4LW1vZGUtbG9hZC1ob29rKQotLSAKMi4z OS40Cgo= --00000000000071180b061891c40c--