From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp2 ([2001:41d0:8:6d80::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms0.migadu.com with LMTPS id oDKKKjTIqGFwfgEAgWs5BA (envelope-from ) for ; Thu, 02 Dec 2021 14:20:52 +0100 Received: from aspmx1.migadu.com ([2001:41d0:8:6d80::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp2 with LMTPS id CDJFJjTIqGEARAAAB5/wlQ (envelope-from ) for ; Thu, 02 Dec 2021 13:20:52 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id E42BC1EDCD for ; Thu, 2 Dec 2021 14:20:45 +0100 (CET) Received: from localhost ([::1]:56200 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1msm0y-0002Ud-Mi for larch@yhetil.org; Thu, 02 Dec 2021 08:20:44 -0500 Received: from eggs.gnu.org ([209.51.188.92]:52112) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mslyM-0001qp-VP for emacs-orgmode@gnu.org; Thu, 02 Dec 2021 08:18:02 -0500 Received: from mail-4317.proton.ch ([185.70.43.17]:42412) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mslyF-0007fH-Qh for emacs-orgmode@gnu.org; Thu, 02 Dec 2021 08:18:02 -0500 Date: Thu, 02 Dec 2021 13:17:27 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vidal-rosset.net; s=protonmail3; t=1638451054; bh=KwDUPWn0GbgxUq0I1fNOGZRz/UhgHQ4BG+wWV/WI0tE=; h=Date:To:From:Cc:Reply-To:Subject:In-Reply-To:References:From; b=pwqUNe5GR/YhyIFI/P2/WydTJd9XDMTlMlOUQ2XqqsEidwLNK2TpJWJLZCnG6T7ae JI5uYKxVT2kWoXV223tKz727gHXZvkYMxOZXHoie7FHfJXC8AZYBcyrqKujGMhZ2Ee alS4KbJ/4meBgnSSUpkRKoScj+jO/6CDHjRdP5yE8sd4R0US2kLGv+zNnQCIskYTs8 Ls5z0Jc0OhVm5j7audWcYN+4Z/EJMCdMmyDGw7WwK9OyeMN5z/an2P2D51X60a1McO mTdpmdNTyZo+b2Ua5ZyrYqmAlrXlIYHEJUVDRhwrf9oHM926A7wEkMWeY6t2iHTGkZ rI8sNB6Ad9ZWA== To: John Kitchin From: Joseph Vidal-Rosset Subject: Re: citeproc-org and org-ref 3 Message-ID: <61af3132-888f-1200-2e52-dec66c26551b@vidal-rosset.net> In-Reply-To: References: <56442351-6f41-3490-01f2-0ca5aa930c6a@vidal-rosset.net> <573b6fad-e445-3f53-9cd5-43d5b7f86904@vidal-rosset.net> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_Qv8Ph9OBo84M3cBLuVu25aUbV7EV504DS3rSto4" Received-SPF: pass client-ip=185.70.43.17; envelope-from=joseph@vidal-rosset.net; helo=mail-4317.proton.ch X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-orgmode@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Joseph Vidal-Rosset Cc: org-mode-email , Ivan Tadeu Ferreira Antunes Filho Errors-To: emacs-orgmode-bounces+larch=yhetil.org@gnu.org Sender: "Emacs-orgmode" X-Migadu-Flow: FLOW_IN X-Migadu-Country: US ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1638451246; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:in-reply-to:in-reply-to: references:references:list-id:list-help:list-unsubscribe: list-subscribe:list-post:dkim-signature; bh=KwDUPWn0GbgxUq0I1fNOGZRz/UhgHQ4BG+wWV/WI0tE=; b=NVPRvGOe1rl0PVvg4E0nU1R4hcqII/wafSj1p2iyoV2KTfF5TgYm0DGrcmPBcYzkp38Low UFpk8HbMMl0k94DfRmSmsvd2tlN6SGhdPvf//qxFq1q+3ESlJFp1pkA2OI8HsCsNTfMO4m YZl8jVKb4felw3xJWn8xLnNUY3waZRWnioFIkmvVeNebu+0ef3ZOCX8rS/qEElY7EKcML3 bnwoXkvhwgX3lcIHCRxagU8N3Hpwe3Hh2WziXUzVDPNg1kEh3zHpPnx+JPZT3tBPXkhmak ihhdgbgbMbll514flq4i2oq80qB32gMUjvKDA85y9hF1IFF1sHfNQSKXzfwXaA== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1638451246; a=rsa-sha256; cv=none; b=Rvi/haU4LMh2cZ2PV92rO0PBNV0wDFB1vTAX6H58L4lcv+ukbtnCKuMwjX50DMU92eZ96t lsj8PO/WnpgXokBqIx+LHiQz692c6kX5n46iD8qes/CP6wWR6DHMvKk3VzxRUFNksPo7Ck ncvbI93hRfZ50kJwpqNTGNQKoxZajdP05m2WjGzjlRDH9V9cpXpK6Wr4JaCjMy7a7Q91+8 Z85AGxfvxnfiNV8szhhqf2Ege9xQEF6aiA5DDSDaGYq1/BStGHLzQy3ePHfwim+U2IiXNo 24fNtuNZ0/nN4N8zQMCbb+DAC8OIza0+gAy3tQ7LtueUWQbTildNGMEGKFJnZg== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=pass header.d=vidal-rosset.net header.s=protonmail3 header.b=pwqUNe5G; dmarc=pass (policy=none) header.from=vidal-rosset.net; spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org" X-Migadu-Spam-Score: -3.02 Authentication-Results: aspmx1.migadu.com; dkim=pass header.d=vidal-rosset.net header.s=protonmail3 header.b=pwqUNe5G; dmarc=pass (policy=none) header.from=vidal-rosset.net; spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org" X-Migadu-Queue-Id: E42BC1EDCD X-Spam-Score: -3.02 X-Migadu-Scanner: scn0.migadu.com X-TUID: CbzoZdFU2Yvw This is a multi-part message in MIME format. --b1_Qv8Ph9OBo84M3cBLuVu25aUbV7EV504DS3rSto4 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Dear John (cc. Ivan), First, thanks for your help and for your patience, that's very kind of you. The good news is that indeed, org-ref 3 exports nicely the html bibliography with my CSL file, it works well with your org file and your bibliography. My error was simple: I did not use the specific org-ref keys but the ordinary h-o keys.. A stupid mistake. The bad news is that this new function for exporting with org-ref 3 is not included in org-export-head, a nice org mode to blog exporter, made by Ivan Tadeu Ferreira Antunes Filho, which converts each header to a different file, I find this exporter very convenient. I had no problem with this org-ref 2 to use this blog-exporter, but it org-ref 3 is unfortunately not still adapted to its use. Nevertheless, I believe that it should be possible to find the lines to include this function (let ((org-export-before-parsing-hook '(org-ref-csl-preprocess-buffer))) (org-open-file (org-html-export-to-html))) in org-export-head. I tried, but without success, because I am simply not expert enough. I see the best, that is to export both with org-ref 3 (i.e. "r h") and org-export-head, but I am unable to code it. No doubt that it should be for you and Ivan a piece of cake, but please do it only if you think that it is interesting and if you find the time to do it. Best wishes, Jo. PS in attachment, myblogexporter.el in my ~/.emacs.d/personal (usual path with Prelude Emacs). Le 01/12/2021 =C3=A0 23:16, John Kitchin a =C3=A9crit=C2=A0: > > Joseph Vidal-Rosset writes: > >> Dear Andras, >> >> You are very probably right. I will have a look on this entry in my >> default bibliography file. >> >> The code >> >> (let ((org-export-before-parsing-hook '(org-ref-csl-preprocess-buffer))= ) >> (org-open-file (org-html-export-to-html))) >> >> put in .emacs.d/personal/preload/myorgexport.el >> > This code should not go in your init file. It is executed each time, and > not what you want. I usually put it a src block at the end in a section > tagged noexport and run it from there. > > Alternatively, if this is the only preprocessing you do, I think you can > do C-c C-e rh to export to html (this runs the org-ref html exporter. > > Finally, if you really want something in your init file it should be > like this: > > (defun my-html () > (interactive) > (let ((org-export-before-parsing-hook '(org-ref-csl-preprocess-buffer= ))) > (org-open-file (org-html-export-to-html)))) > > and then later you run it with M-x my-html > > >> provokes the request of opening a html file, when emacs --daemon is >> started; therefore I conclude that it should not be used as I did... >> >> Anyway, every tentative to export in a bibliography in html fails at >> the moment, even with a new bibliography file... :( > > See of the one at > https://github.com/jkitchin/org-ref/blob/master/examples/basic-csl.org > works. The bib file is in > https://github.com/jkitchin/org-ref/blob/master/org-ref.bib. > > > >> >> Best wishes, >> >> Le 01/12/2021 =C3=A0 17:33, Andr=C3=A1s Simonyi a =C3=A9crit=C2=A0: >>> Dear Joseph, >>> >>> based on the error message there seems to be a problem with the >>> 'curley-nil-on-bennet-spinoz' bibliography entry, is it possible that >>> it contains a 'year =3D nil' row? If yes then I don't think that is >>> well-formed, at least citeproc-el cannot currently parse it. Anyhow, >>> apparently I need to improve/add citeproc-el error messages about >>> bib(la)tex parsing, because several parsing problems have surfaced >>> lately and the current error messages aren't helpful at all. >>> >>> best wishes, >>> Andr=C3=A1s >>> >>> On Wed, 1 Dec 2021 at 16:50, Joseph Vidal-Rosset >>> wrote: >>>> >>>> Dear John, >>>> >>>> I must say that to export references in html with org-ref 3, I meet a >>>> lot of problems (with LaTeX, it's fine). >>>> >>>> I am using prelude emacs and GNU Emacs 29.0.50 . >>>> >>>> Starting emacs --daemon, the code >>>> >>>> (let ((org-export-before-parsing-hook '(org-ref-csl-preprocess-buffer= ))) >>>> (org-open-file (org-html-export-to-html))) >>>> >>>> in my setup provokes this unwanting effect: >>>> >>>> [Prelude] Loading personal configuration files in >>>> /home/joseph/.emacs.d/personal/preload... >>>> Loading /home/joseph/.emacs.d/personal/preload/myorgexport.el (source)= ... >>>> Output file: >>>> >>>> and with Enter : >>>> >>>> [Prelude] Loading personal configuration files in >>>> /home/joseph/.emacs.d/personal/preload... >>>> Loading /home/joseph/.emacs.d/personal/preload/myorgexport.el (source)= ... >>>> Output file: >>>> Warning (initialization): An error occurred while loading >>>> =E2=80=98/home/joseph/.emacs.d/init.el=E2=80=99: >>>> >>>> Wrong type argument: stringp, nil >>>> >>>> To ensure normal operation, you should investigate and remove the >>>> cause of the error in your initialization file. Start Emacs with >>>> the =E2=80=98--debug-init=E2=80=99 option to view a complete error bac= ktrace. Disable >>>> showing Disable logging >>>> Starting Emacs daemon. >>>> >>>> With --debug-init, I get: >>>> >>>> Debugger entered--Lisp error: (wrong-type-argument stringp nil) >>>> string-to-number(nil) >>>> citeproc-bt--to-csl-date("nil" nil) >>>> citeproc-blt-entry-to-csl((("Url" . >>>> "http://dx.doi.org/10.1163/9789004246638_005") ("Doi" . >>>> "10.1163/9789004246638_005") ("Date_added" . "Mon May 16 19:09:37 2016= ") >>>> ("Booktitle" . "Spinoza: Issues and Directions") ("Series" . "Spinoza: >>>> Issues and Directions") ("Year" . "nil") ("Publisher" . "Brill Academi= c >>>> Publishers") ("Pages" . "39-52") ("Author" . "Edwin Curley") ("Title" = . >>>> "ON BENNETTS SPINOZA: THE ISSUE OF TELEOLOGY") ("=3Dtype=3D" . "InBook= ") >>>> ("=3Dkey=3D" . "curley-nil-on-bennet-spinoz")) nil nil) >>>> #f(compiled-function (key entry) #>>> -0x7fcb46b5c8e80b3>)("curley-nil-on-bennet-spinoz" (("Url" . >>>> "http://dx.doi.org/10.1163/9789004246638_005") ("Doi" . >>>> "10.1163/9789004246638_005") ("Date_added" . "Mon May 16 19:09:37 2016= ") >>>> ("Booktitle" . "Spinoza: Issues and Directions") ("Series" . "Spinoza: >>>> Issues and Directions") ("Year" . "nil") ("Publisher" . "Brill Academi= c >>>> Publishers") ("Pages" . "39-52") ("Author" . "Edwin Curley") ("Title" = . >>>> "ON BENNETTS SPINOZA: THE ISSUE OF TELEOLOGY") ("=3Dtype=3D" . "InBook= ") >>>> ("=3Dkey=3D" . "curley-nil-on-bennet-spinoz"))) >>>> maphash(#f(compiled-function (key entry) #>>> -0x7fcb46b5c8e80b3>) #) >>>> citeproc-hash-itemgetter-from-any(("~/Dropbox/Orgzly/reforg.bib")= ) >>>> org-ref-process-buffer(html) >>>> org-ref-csl-preprocess-buffer(html) >>>> run-hook-with-args(org-ref-csl-preprocess-buffer html) >>>> org-export-as(html nil nil nil (:output-file "~/test.html")) >>>> org-export-to-file(html "~/test.html" nil nil nil nil nil) >>>> org-html-export-to-html() >>>> (org-open-file (org-html-export-to-html)) >>>> (let ((org-export-before-parsing-hook >>>> '(org-ref-csl-preprocess-buffer))) (org-open-file >>>> (org-html-export-to-html))) >>>> eval-buffer(# nil >>>> "/home/joseph/.emacs.d/personal/preload/myorgexport..." nil t) ; >>>> Reading at buffer position 3196 >>>> >>>> load-with-code-conversion("/home/joseph/.emacs.d/personal/preload/myor= gexport..." >>>> "/home/joseph/.emacs.d/personal/preload/myorgexport..." nil nil) >>>> load("/home/joseph/.emacs.d/personal/preload/myorgexport...") >>>> mapc(load ("/home/joseph/.emacs.d/personal/preload/myorgexport...= ")) >>>> (progn (message "[Prelude] Loading personal configuration files i= n >>>> ..." prelude-personal-preload-dir) (mapc 'load (directory-files >>>> prelude-personal-preload-dir 't "^[^#.].*el$"))) >>>> (if (file-exists-p prelude-personal-preload-dir) (progn (message >>>> "[Prelude] Loading personal configuration files in ..." >>>> prelude-personal-preload-dir) (mapc 'load (directory-files >>>> prelude-personal-preload-dir 't "^[^#.].*el$")))) >>>> eval-buffer(# nil "/home/joseph/.emacs.d/init.el"= nil >>>> t) ; Reading at buffer position 4489 >>>> load-with-code-conversion("/home/joseph/.emacs.d/init.el" >>>> "/home/joseph/.emacs.d/init.el" t t) >>>> load("/home/joseph/.emacs.d/init" noerror nomessage) >>>> startup--load-user-init-file(#f(compiled-function () #>>> 0xec639179d6199fa>) #f(compiled-function () #>>> -0x1f3c686ddc0dc635>) t) >>>> command-line() >>>> normal-top-level() >>>> >>>> It's too complicated for me. >>>> org-ref version 2 with citeproc-org by Andras worked well, but now I a= m >>>> afraid that to downgrade to org-ref 2 is not necessarily the best >>>> solution. I am lost. >>>> >>>> Best wishes, and thanks for your help. >>>> >>>> Jo. >>>> >>>> >>>> Le 30/11/2021 =C3=A0 18:31, John Kitchin a =C3=A9crit : >>>>> See https://www.youtube.com/watch?v=3DrRR-5NSpKyE >>>>> for an overview of wh= at to >>>>> do. basically you need a csl file that provides the style you want, a= nd >>>>> you specify it like this in the org file or in default settings. You = may >>>>> also need a locale file if you are not blogging in english. >>>>> >>>>> #+csl-style: apa-5th-edition.csl >>>>> >>>>> #+csl-locale: en-US >>>>> >>>>> >>>>> You can find a basic example org file for html export with CSL at >>>>> https://github.com/jkitchin/org-ref/blob/master/examples/basic-csl.or= g >>>>> >>>>> >>>>> Here is a minimal way to export your blog file I suppose. >>>>> >>>>> (let ((org-export-before-parsing-hook '(org-ref-csl-preprocess-buffe= r))) >>>>> (org-open-file (org-html-export-to-html))) >>>>> >>>>> >>>>> John >>>>> >>>>> ----------------------------------- >>>>> Professor John Kitchin (he/him/his) >>>>> Doherty Hall A207F >>>>> Department of Chemical Engineering >>>>> Carnegie Mellon University >>>>> Pittsburgh, PA 15213 >>>>> 412-268-7803 >>>>> @johnkitchin >>>>> http://kitchingroup.cheme.cmu.edu >>>>> >>>>> >>>>> >>>>> On Tue, Nov 30, 2021 at 12:16 PM Andr=C3=A1s Simonyi >>>>> > wrote: >>>>> >>>>> Dear Joseph, >>>>> >>>>> unfortunately, my note on the `citeproc-org` page has become ki= nd of >>>>> misleading and has to be updated because org-ref didn't switch = to the >>>>> new org-cite citation syntax after all, although this was the p= lan for >>>>> a while. I think if you wish to use org-ref 3 then you should s= imply >>>>> remove citeproc-org entirely -- if I understand correctly the l= atest >>>>> version of org-ref supports the old syntax as well and is capab= le of >>>>> CSL-based export (among others) on its own. >>>>> >>>>> best regards, >>>>> Andr=C3=A1s >>>>> >>>>> On Tue, 30 Nov 2021 at 18:00, Joseph Vidal-Rosset >>>>> > wrot= e: >>>>> > >>>>> > >>>>> > Dear John, and dear Andras, >>>>> > >>>>> > Having updated my org-ref to the last version, I see that th= e html >>>>> > export of bibliography does not work any longer for my blog. >>>>> > >>>>> > Reading Andras's note here >>>>> > https://github.com/andras-simonyi/citeproc-org >>>>> >>>>> > I confess that I am lost. >>>>> > >>>>> > What have I to do to not waste too much time with this probl= em? >>>>> > >>>>> > Best wishes, >>>>> > >>>>> > Jo. >>>>> > >>>>> >>>> > > > -- > Professor John Kitchin > Doherty Hall A207F > Department of Chemical Engineering > Carnegie Mellon University > Pittsburgh, PA 15213 > 412-268-7803 > @johnkitchin > http://kitchingroup.cheme.cmu.edu > Pronouns: he/him/his > --b1_Qv8Ph9OBo84M3cBLuVu25aUbV7EV504DS3rSto4 Content-Type: text/x-emacs-lisp; name=myblogexporter.el Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=myblogexporter.el IyEgL2Jpbi9zaA0KIjoiOyBleGVjIGVtYWNzIC0tbm8tc2l0ZS1maWxlIC0tc2NyaXB0ICIkMCIg IiRAIiAjIC0qLWVtYWNzLWxpc3AtKi0NCjs7IFRoZSBhYm92ZSBsaW5lIGlzIGJhc2ggdHJpY2tl cnkgIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzYyMzgzMzEvZW1hY3Mtc2hl bGwtc2NyaXB0cy1ob3ctdG8tcHV0LWluaXRpYWwtb3B0aW9ucy1pbnRvLXRoZS1zY3JpcHQjNjI1 OTMzMA0KDQoNCg0KDQoNCjs7IGJhc2VkIG9uIGh0dHA6Ly9wcmFnbWF0aWNlbWFjcy5jb20vZW1h Y3MvZXhwb3J0LW9yZy1tb2RlLWhlYWRsaW5lcy10by1zZXBhcmF0ZS1maWxlcy8NCjs7IGV4cG9y dCBoZWFkbGluZXMgdG8gc2VwYXJhdGUgZmlsZXMNCjs7IGh0dHA6Ly9lbWFjcy5zdGFja2V4Y2hh bmdlLmNvbS9xdWVzdGlvbnMvMjI1OS9ob3ctdG8tZXhwb3J0LXRvcC1sZXZlbC1oZWFkaW5ncy1v Zi1vcmctbW9kZS1idWZmZXItdG8tc2VwYXJhdGUtZmlsZXMNCg0KOzs7IEJlZ2luIGNvbmZpZw0K KHNldHEgb3JnLWV4cG9ydC1oZWFkLS1odG1sLXBvc3RhbWJsZQ0KIjwhIC0tQmVnaW4gb2YgIGlz c28gc2NyaXB0IC0tPg0KPHNjcmlwdCBkYXRhLWlzc289XCIvaXNzby9cIg0KICAgICAgIGRhdGEt aXNzby1jc3M9XCJmYWxzZVwiDQogICAgICAgZGF0YS1pc3NvLWxhbmc9XCJlblwiDQogICAgICAg ZGF0YS1pc3NvLXJlcGx5LXRvLXNlbGY9XCJmYWxzZVwiDQogICAgICAgZGF0YS1pc3NvLXJlcXVp cmUtYXV0aG9yPVwiZmFsc2VcIg0KICAgICAgIGRhdGEtaXNzby1yZXF1aXJlLWVtYWlsPVwiZmFs c2VcIg0KICAgICAgIGRhdGEtaXNzby1hdmF0YXI9XCJ0cnVlXCINCiAgICAgICBkYXRhLWlzc28t YXZhdGFyLWJnPVwiI2YwZjBmMFwiDQogICAgICAgZGF0YS1pc3NvLW1heC1jb21tZW50cy10b3A9 XCIxMFwiDQogICAgICAgZGF0YS1pc3NvLW1heC1jb21tZW50cy1uZXN0ZWQ9XCI1XCINCiAgICAg ICBkYXRhLWlzc28tcmV2ZWFsLW9uLWNsaWNrPVwiNVwiDQogICAgICAgZGF0YS1pc3NvLXZvdGU9 XCJ0cnVlXCINCiAgICAgICBkYXRhLWlzc28tZmVlZD1cImZhbHNlXCINCiAgICAgICBzcmM9XCIv aXNzby9qcy9lbWJlZC5taW4uanNcIj48L3NjcmlwdD4NCjxzZWN0aW9uIGlkPVwiaXNzby10aHJl YWRcIiBkYXRhLXRpdGxlPVwie3sgLlRpdGxlIH19XCI+PC9zZWN0aW9uPg0KPGRpdiBpZD1cImlz c29cIj48L2Rpdj4NCjwhIC0tIEVuZCBvZiBpc3NvIHNjcmlwdCAtLT4NCjwhLS0gQmVnaW4gb2Yg Y29kZSBXZWItU3RhdCB2IDYuMyAtLT4NCjxzcGFuIGlkPVwid3RzMTkzMTk0M1wiPiZuYnNwOzwv c3Bhbj48c2NyaXB0Pg0KdmFyIHd0cz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTt3 dHMudHlwZT0ndGV4dC9qYXZhc2NyaXB0JzsNCnd0cy5hc3luYz10cnVlO3d0cy5zcmM9J2h0dHBz Oi8vd3RzLm9uZS8xLzE5MzE5NDMvbG9nNl8yLmpzJzsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlk KCd3dHMxOTMxOTQzJykuYXBwZW5kQ2hpbGQod3RzKTsNCjwvc2NyaXB0Pjxub3NjcmlwdD48YSBo cmVmPVwiaHR0cHM6Ly93d3cud2ViLXN0YXQuZnJcIj4NCjxpbWcgc3JjPVwiaHR0cHM6Ly93dHMu b25lLzYvMS8xOTMxOTQzLmdpZlwiICBhbHQ9XCJzdGF0aXN0aXF1ZXMgd2ViIFdlYi1TdGF0XCI+ PC9hPjwvbm9zY3JpcHQ+DQo8IS0tIEVuZCBvZiAgY29kZSBXZWItU3RhdCB2IDYuMyAtLT4NCjxw IGNsYXNzPVwiY3JlYXRvclwiPk1hZGUgd2l0aCAlYw0KYW5kIHdpdGggPGEgaHJlZj1cImh0dHBz Oi8vZ2l0aHViLmNvbS9pdGYvb3JnLWV4cG9ydC1oZWFkXCI+DQpvcmctZXhwb3J0LWhlYWQsIGEg YmxvZyBleHBvcnRlcjwvYT4uPC9wPg0KPHAgY2xhc3M9XCJjcmVhdG9yXCI+DQo8YSBocmVmPVwi aHR0cHM6Ly93d3cudmlkYWwtcm9zc2V0Lm5ldC9jc3Mvb3JnLmNzc1wiPg0KVGhlIGNzcyBmaWxl IG9mIHRoaXMgYmxvZyA8L2E+IGlzIG1haW5seSB0aGUgcmVzdWx0IG9mDQo8YSBocmVmPVwiaHR0 cHM6Ly9naXRodWIuY29tL2dvbmd6aGl0YWFvL29yZ2Nzc1wiPlpoaXRhbyBHb25nJ3Mgd29yay48 L2E+DQo8L3A+DQo8cCBjbGFzcz1cImNyZWF0b3JcIj4NCjxhIGhyZWY9XCJodHRwczovL3d3dy5v cmdtb2RlLm9yZ1wiPg0KPGltZyBib3JkZXI9XCIwXCIgYWx0PVwib3JnbW9kZVwiIHNyYz1cIm9y Z21vZGUtbG9nby5qcGdcIiAgd2lkdGg9XCI2OVwiIGhlaWdodD1cIjY5XCIgY2xhc3M9XCJjZW50 ZXJcIj4NCjwvYT4NCjxhIGhyZWY9XCJodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2VtYWNz L1wiPg0KPGltZyBib3JkZXI9XCIwXCIgYWx0PVwiZW1hY3NcIiBzcmM9XCJlbWFjcy1sb2dvLmpw Z1wiICB3aWR0aD1cIjY5XCIgaGVpZ2h0PVwiNjlcIiBjbGFzcz1cImNlbnRlclwiPg0KPC9hPg0K PGEgaHJlZj1cImh0dHBzOi8vcG9zYXRpdi5vcmcvaXNzby9cIj4NCjxpbWcgYm9yZGVyPVwiMFwi IGFsdD1cImlzc29cIiBzcmM9XCJpc3NvLWxvZ28uanBnXCIgIHdpZHRoPVwiNjlcIiBoZWlnaHQ9 XCI2OVwiIGNsYXNzPVwiY2VudGVyXCI+DQo8L2E+DQo8L2E+DQo8YSBocmVmPVwiaHR0cHM6Ly93 d3cuZGViaWFuLm9yZ1wiPg0KPGltZyBib3JkZXI9XCIwXCIgYWx0PVwiZGViaWFuXCIgc3JjPVwi ZGViaWFuLWxvZ28uanBnXCIgIHdpZHRoPVwiNjlcIiBoZWlnaHQ9XCI2OVwiIGNsYXNzPVwiY2Vu dGVyXCI+DQo8L2E+DQo8YSBocmVmPVwiaHR0cHM6Ly9teGxpbnV4Lm9yZy9cIj4NCjxpbWcgYm9y ZGVyPVwiMFwiIGFsdD1cIm14bGludXhcIiBzcmM9XCJteC1sb2dvLmpwZ1wiICB3aWR0aD1cIjY5 XCIgaGVpZ2h0PVwiNjlcIiBjbGFzcz1cImNlbnRlclwiPg0KPC9hPg0KPC9wPiINCikNCg0KKHNl dHEgb3JnLWV4cG9ydC1oZWFkLXRhZ3MtcGFnZSAiVGFncyIpIDsgdXNlZCBmb3IgdGhlIHRhZ3Mg dG8gbGluayB0byBhIHBhZ2UNCg0KKHNldHEgb3JnLWV4cG9ydC1oZWFkLWxpbmstZmlsZXMtdG8t ZXhwb3J0IChsaXN0ICJmaWxlIiAidmlkZW8iKSkgOztMaW5rIHR5cGVzIHdob3NlIHBhdGhzIGFy ZSBnb25uYSBiZSBjb3BpZWQgd2l0aCBoYXJkIGxpbmtzDQo7dXNlZnVsIGlmIHVzaW5nIGN1c3Rv bSBsaW5rcw0KDQooc2V0cSBvcmctZXhwb3J0LWhlYWQtdXNpbmctdmlkZW8tbGlua3MgdCkNCg0K KHNldHEgb3JnLWV4cG9ydC1oZWFkLWNsaWNrLXRvYy1oMiB0KSA7OyBNYWtlIHRoZSBoZWFkZXIg b2YgVE9DIGNsaWNrYWJsZSwgc28geW91IGNhbiB3cml0ZSBDU1MgZm9yIGNsaWNrIHRvIGRpc3Bs YXkNCg0KOztFbmQgY29uZmlnDQoNCihkZWZ1biBvcmctZXhwb3J0LWhlYWQtLXJ1bi1vbi10ZW1w LWNvcHktYnVmZmVyIChmdW5jdGlvbi10by1ydW4gJnJlc3QgYXJncykNCiAgIlJ1bnMgZnVuY3Rp b24gb24gYSB0ZW1wIGJ1ZmZlciB3aXRoIHRoZSBjb250ZW50cyBvZiB0aGUgb3JpZ2luYWwgYnVm ZmVyIg0KICAoc2F2ZS1leGN1cnNpb24NCiAgICAobGV0ICgodGVtcC1idWZmZXIgKGdlbmVyYXRl LW5ldy1idWZmZXIgInRtcCIpKSkNCiAgICAgIChjb3B5LXRvLWJ1ZmZlciB0ZW1wLWJ1ZmZlciAo cG9pbnQtbWluKSAocG9pbnQtbWF4KSkNCiAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIHRlbXAt YnVmZmVyDQogICAgICAgIChvcmctbW9kZSkNCiAgICAgICAgKG91dGxpbmUtc2hvdy1hbGwpDQog ICAgICAgIChhcHBseSBmdW5jdGlvbi10by1ydW4gYXJncykpDQogICAgICAoa2lsbC1idWZmZXIg dGVtcC1idWZmZXIpKSkpDQoNCihkZWZ1biBvcmctZXhwb3J0LWhlYWQgKCZvcHRpb25hbCBkaXJl Y3RvcnktbmFtZSBiYWNrZW5kIHJlZXhwb3J0KQ0KICAiVXBkYXRlcyB0aGUgaGFzaGVzIGFuZCBy ZWV4cG9ydCBhbGwgY2hhbmdlZCBoZWFkaW5ncyBpZiByZWV4cG9ydCBpcyBuaWwuDQpSZWV4cG9y dHMgYWxsIGhlYWRpbmdzIGlmIHJlZXhwb3J0IGlzIG5vbi1uaWwiDQogIChpbnRlcmFjdGl2ZSkN CiAgKGxldCAoKGRpcmVjdG9yeS1uYW1lIChvciBkaXJlY3RvcnktbmFtZSAocmVhZC1kaXJlY3Rv cnktbmFtZSAiRGlyZWN0b3J5OiIpKSkNCiAgICAgICAgKGJhY2tlbmQgKG9yIGJhY2tlbmQgImh0 bWwiKSkpDQogICAgKG1ha2UtZGlyZWN0b3J5IGRpcmVjdG9yeS1uYW1lIHQpDQogICAgKG9yZy1l eHBvcnQtaGVhZC0tcnVuLW9uLXRlbXAtY29weS1idWZmZXIgIydvcmctZXhwb3J0LWhlYWQtLW1v ZGlmeS1idWZmZXItYXN0IGRpcmVjdG9yeS1uYW1lIGJhY2tlbmQgcmVleHBvcnQpDQogICAgKG9y Zy1leHBvcnQtaGVhZC0tdXBkYXRlLWhhc2hlcykpKQ0KDQoNCihkZWZ1biBvcmctZXhwb3J0LWhl YWQtcmVleHBvcnQgKCZvcHRpb25hbCBkaXJlY3RvcnktbmFtZSBiYWNrZW5kKQ0KICAiUmVleHBv cnRzIGFsbCB0aGUgaGVhZGluZ3MiDQogIChpbnRlcmFjdGl2ZSkNCiAgKG9yZy1leHBvcnQtaGVh ZCBkaXJlY3RvcnktbmFtZSBiYWNrZW5kIHQpKQ0KDQoNCjs7VE9ETyB0aGlzIGZ1bmN0aW9uIHNo b3VsZCByZXR1cm4gYSBsaXN0IG9mIGhhc2hlcyB0byB1cGRhdGUgdGhlIG9yaWdpbmFsIGJ1ZmZl cg0KKGRlZnVuIG9yZy1leHBvcnQtaGVhZC0tbW9kaWZ5LWJ1ZmZlci1hc3QgKGRpcmVjdG9yeS1w YXRoIGJhY2tlbmQgcmVleHBvcnQpDQogICJFeHBvcnQgYWxsIHN1YnRyZWVzIHRoYXQgYXJlICpu b3QqIHRhZ2dlZCB3aXRoIDpub2V4cG9ydDogdG8NCnNlcGFyYXRlIGZpbGVzLg0KDQpTdWJ0cmVl cyB0aGF0IGRvIG5vdCBoYXZlIHRoZSA6RVhQT1JUX0ZJTEVfTkFNRTogcHJvcGVydHkgc2V0DQph cmUgZXhwb3J0ZWQgdG8gYSBmaWxlbmFtZSBkZXJpdmVkIGZyb20gdGhlIGhlYWRsaW5lIHRleHQu Ig0KICAob3JnLWV4cG9ydC1oZWFkLS11cGRhdGUtaGFzaGVzKQ0KICAob3JnLWV4cG9ydC1leHBh bmQtaW5jbHVkZS1rZXl3b3JkKQ0KDQogIDs7IENyZWF0ZSBzdW1tYXJpZXMgYmVmb3JlIGRlbGV0 aW5nIHRoZSBwb3N0cw0KICAob3JnLWV4cG9ydC1oZWFkLS1jcmVhdGUtc3VtbWFyaWVzKQ0KICAo b3JnLWV4cG9ydC1oZWFkLS1jcmVhdGUtZW50cnktdGFncykgOzsgY3JlYXRlcyB0YWcgbGlzdHMN CiAgOzsgRGVsZXRlIGNvbnRlbnQgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGV4cG9ydGVkIGFuZCBz ZXQgaXQgdG8gbm9yZWV4cG9ydA0KICAoaWYgKG5vdCByZWV4cG9ydCkNCiAgICAgIChvcmctZXhw b3J0LWhlYWQtLWRlbGV0ZS1ub3JlZXhwb3J0KSkNCg0KDQoNCiAgOztHZXQgaGVhZGxpbmVzLCBh bmQgZ2VuZXJhdGUgbWFjcm9zIChwcmV2aW91cyBwb3N0LCBldGMpDQogIChsZXQqICgoaGVhZGxp bmVzLWhhc2gtbGlzdCAob3JnLWV4cG9ydC1oZWFkLS1nZXQtaGVhZGxpbmVzKSkNCiAgICAgICAg IChoZWFkbGluZXMtaGFzaCAoY2FyIGhlYWRsaW5lcy1oYXNoLWxpc3QpKQ0KICAgICAgICAgKGhl YWRsaW5lcy1saXN0IChjZHIgaGVhZGxpbmVzLWhhc2gtbGlzdCkpDQogICAgICAgICA7O0luc2Vy dCBleHRyYSB0aGluZ3MgaW4gdGhlIGhlYWRsaW5lcy1oYXNoIHRvIGJlIHVzZWQgZm9yIGZpeGlu ZyB0aGUgbWFjcm9zDQogICAgICAgICA7O1RvIGRlZmluZSBuZXcgaGVhZGxpbmUtbGV2ZWwgbWFj cm9zLCBhZGQgZXh0cmEgZnVuY3Rpb25zIGhlcmUNCiAgICAgICAgIChoZWFkbGluZXMtaGFzaCAo b3JnLWV4cG9ydC1oZWFkLS1pbnNlcnQtbmV4dC1wcmV2aW91cy1oZWFkbGluZSBoZWFkbGluZXMt aGFzaCBoZWFkbGluZXMtbGlzdCkpDQogICAgICAgICAoaGVhZGxpbmVzLWhhc2ggKG9yZy1leHBv cnQtaGVhZC0tYWRkLXRpdGxlLW1hY3JvIGhlYWRsaW5lcy1oYXNoIGhlYWRsaW5lcy1saXN0KSkN CiAgICAgICAgIDs7Tm93IHdlIGdldCBnbG9iYWwgbWFjcm9zIHN1Y2ggYXMgdGhlIGluZGV4IGFu ZCB0aGUgcmV2ZXJzZWQgaW5kZXgNCiAgICAgICAgIChnbG9iYWwtbWFjcm9zIChvcmctZXhwb3J0 LWhlYWQtLWdlbmVyYXRlLWluZGV4LWFsaXN0IGhlYWRsaW5lcy1saXN0IGhlYWRsaW5lcy1oYXNo KSkNCg0KDQogICAgICAgICA7O05vdyB3ZSBnZXQgdGhlIHRlbXBsYXRlcy4gQXQgdGhlIG1vbWVu dCBpdCBpcyBvbmx5IHRoZSBoZWFkZXINCiAgICAgICAgIChoZWFkZXIgKG9yZy1leHBvcnQtaGVh ZC0tZ2V0LWNvbnRlbnQtc3VidHJlZS1tYXRjaCAiaGVhZGVyIikpDQogICAgICAgICA7O0FuZCBu b3cgdGhlIGZvb3RlciwgZm9yIGV4YW1wbGUsIGZvciBjb21tZW50cw0KICAgICAgICAgKGZvb3Rl ciAob3JnLWV4cG9ydC1oZWFkLS1nZXQtY29udGVudC1zdWJ0cmVlLW1hdGNoICJmb290ZXIiKSkp DQoNCg0KICAgIDs7Rm9yIGVhY2ggbm90IG5vZXhwb3J0L25vcmVleHBvcnQgaGVhZGxpbmUgYXBw bHkgdGhlIHRlbXBsYXRlLCBpLmUuIGNvcHkgY29udGVudHMNCiAgICAob3JnLWV4cG9ydC1oZWFk LS1ydW4tb24tZWFjaC1oZWFkaW5nDQogICAgICMnKGxhbWJkYSAoKQ0KICAgICAgICAgKG9yZy1l eHBvcnQtaGVhZC0taW5zZXJ0LW9uLWhlYWRlciBoZWFkZXIpDQogICAgICAgICAob3JnLWV4cG9y dC1oZWFkLS1pbnNlcnQtb24tZm9vdGVyIGZvb3RlcikpDQogICAgICItbm9leHBvcnQtbm9yZWV4 cG9ydCIpDQoNCiAgICA7O0FmdGVyIGFwcGx5aW5nIHRoZSB0ZW1wbGF0ZSB3ZSByZXBsYWNlIHRo ZSBtYWNyb3Mgb24gYWxsIHBsYWNlcw0KICAgIChvcmctZXhwb3J0LWhlYWQtLXJ1bi1vbi1lYWNo LWhlYWRpbmcNCiAgICAgIycobGFtYmRhICgpDQogICAgICAgICAobGV0KiAoKGhlYWRsaW5lLW5h bWUgKG9yZy1leHBvcnQtaGVhZC0taGVhZGxpbmUpKQ0KICAgICAgICAgICAgICAgIChoZWFkbGlu ZS1hbGlzdCAoZ2V0aGFzaCBoZWFkbGluZS1uYW1lIGhlYWRsaW5lcy1oYXNoIG5pbCkpDQogICAg ICAgICAgICAgICAgKG1hY3JvLWFsaXN0IChhcHBlbmQgaGVhZGxpbmUtYWxpc3QgZ2xvYmFsLW1h Y3JvcykpKSA7O2luIHJldmVyc2Ugb3JkZXIgc28gdGhhdCBoZWFkbGluZSBwcm9wZXJ0aWVzIGNh biBvdmVyc2hhZG93IHRoZXNlDQogICAgICAgICAgIChvcmctZXhwb3J0LWhlYWQtLXJlcGxhY2Ut aGVhZGxpbmUtbWFjcm9zIG1hY3JvLWFsaXN0KSkpDQogICAgICItbm9leHBvcnQtbm9yZWV4cG9y dCIpDQoNCg0KICAgIDs7R2V0IHRoZSBwYXJzZXIgdHJlZSBhbmQgdGhlIGhlYWRsaW5lcyB0aGF0 IHdpbGwgYmVjb21lIGZpbGVzDQogICAgKGxldCogICgoYXN0IChvcmctZWxlbWVudC1wYXJzZS1i dWZmZXIpKSkNCg0KDQogICAgICAgIDs7Rml4IGxpbmtzIC0tIG9yZGVyIGlzIGltcG9ydGFudC4g Rmlyc3QgZXh0ZXJuYWwgdGhhbiBmdXp6eSBsaW5rcw0KICAgICAgICAob3JnLWVsZW1lbnQtbWFw IGFzdCAnbGluaw0KICAgICAgICAgIChsYW1iZGEgKGxpbmspDQogICAgICAgICAgICAobGV0KiAo KGxpbmsgKG9yIChvcmctZXhwb3J0LWhlYWQtLWZpeC1maWxlLWV4dGVybmFsLWxpbmstYXN0IGRp cmVjdG9yeS1wYXRoIGxpbmspIGxpbmspKQ0KICAgICAgICAgICAgICAgICAgIChsaW5rIChvciAo b3JnLWV4cG9ydC1oZWFkLS1maXgtbG9jYWwtbGluay1hc3QgaGVhZGxpbmVzLWhhc2ggbGluaykg bGluaykpKSkpKQ0KDQogICAgICA7O0NvbnZlcnQgdGhlIGJ1ZmZlciB0byBjb250YWluIHRoZSBu ZXcgQVNULA0KICAgICAgOzt0aGlzIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBleHBvcnRlciBleHBl Y3RzIHRoZSBjb250ZW50IHRvIGJlIGluIGEgYnVmZmVyDQogICAgICAoZXJhc2UtYnVmZmVyKQ0K ICAgICAgKGluc2VydCAob3JnLWVsZW1lbnQtaW50ZXJwcmV0LWRhdGEgYXN0KSkNCg0KDQogICAg ICAob3V0bGluZS1zaG93LWFsbCkNCg0KICAgICAgOztGaW5hbGx5IGV4cG9ydCBhbGwgdGhlIGhl YWRlcnMNCg0KICAgICAgKG9yZy1leHBvcnQtaGVhZC1leHBvcnQtaGVhZGVycyBkaXJlY3Rvcnkt cGF0aCBiYWNrZW5kKSkpKQ0KDQoNCg0KOztOb3QgZXZlcnl0aGluZyBjYW4gYmUgZG9uZSB1c2lu ZyB0aGUgQVNULCBzYWRseS4NCjs7T3JnIGVsZW1lbnQgaGFzIG5vIHN1cHBvcnQgZm9yIGFkZGlu ZyBjdXN0b20gcHJvcGVydGllcyB0byBoZWFkbGluZXMNCjs7Tm9yIGRvZXMgaXQgaGF2ZSBhIG5p Y2UgaW50ZXJmYWNlIHRvIGdyYWIgdGhlIGNvbnRlbnRzIHdpdGhvdXQgdGhlIHByb3BlcnR5IGRy YXdlcg0KOztJZGVhbGx5IGV2ZXJ5dGhpbmcgd291bGQgYmUgZG9uZSB1c2luZyB0aGUgQVNUIGFu ZCBvcmctZWxlbWVudCwgc2luY2UgaXQgaXMNCjs7TGVzcyBwcm9uZSB0byB3cml0dGluZyBidWdz IHdoZW4gdXNpbmcgaXQuDQo7O1NvIHJpZ2h0IG5vdyBpdCBpcyBvbmx5IHVzZWQgZm9yIGZpeGlu ZyBsaW5rcw0KDQo7O1NUQVJUIE9GIE5PTiBBU1QgKG5vbiBvcmctZWxlbWVudCkgU0VTU0lPTg0K KGRlZnVuIG9yZy1leHBvcnQtaGVhZC0tcnVuLW9uLWVhY2gtaGVhZGluZyhmbiBtYXRjaCAgJnJl c3QgYXJncykNCiAgIlB1dHMgdGhlIHBvaW50IG9uIGVhY2ggaGVhZGluZyBhbmQgcnVucyB0aGUg ZnVuY3Rpb24uIE5lZWRlZCBmb3IgZXhwb3J0aW5nIGFsbCBoZWFkaW5ncw0KICAgZnJvbSAgaHR0 cDovL3ByYWdtYXRpY2VtYWNzLmNvbS9lbWFjcy9leHBvcnQtb3JnLW1vZGUtaGVhZGxpbmVzLXRv LXNlcGFyYXRlLWZpbGVzLyINCiAgKHNhdmUtZXhjdXJzaW9uDQogICAgKGdvdG8tY2hhciAocG9p bnQtbWluKSkNCiAgICAoZ290by1jaGFyIChyZS1zZWFyY2gtZm9yd2FyZCAiXioiKSkNCiAgICAo c2V0LW1hcmsgKGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9uKSkNCiAgICAoZ290by1jaGFyIChwb2lu dC1tYXgpKQ0KICAgIChvcmctbWFwLWVudHJpZXMNCiAgICAgKGxhbWJkYSAoKQ0KICAgICAgIChh cHBseSBmbiBhcmdzKSkNCiAgICAgbWF0Y2ggJ3JlZ2lvbi1zdGFydC1sZXZlbCkNCiAgICAoZGVh Y3RpdmF0ZS1tYXJrKSkpDQoNCg0KKGRlZnVuIG9yZy1leHBvcnQtaGVhZC1leHBvcnQtaGVhZGVy cyAoZGlyZWN0b3J5LW5hbWUgYmFja2VuZCkNCiAgIkV4cG9ydHMgZWFjaCBoZWFkaW5nIHRvIGRp cmVjdG9yeS1uYW1lIHVzaW5nIGJhY2tlbmQiDQogIChpZiAoZXF1YWwgYmFja2VuZCAiaHRtbCIp DQogICAgICAob3JnLWV4cG9ydC1oZWFkLS1ydW4tb24tZWFjaC1oZWFkaW5nDQogICAgICAgIyco bGFtYmRhICgpDQogICAgICAgICAgIChvcmctc2V0LXByb3BlcnR5DQogICAgICAgICAgICAiRVhQ T1JUX0ZJTEVfTkFNRSINCiAgICAgICAgICAgIChjb25jYXQgZGlyZWN0b3J5LW5hbWUgKG9yZy1l eHBvcnQtaGVhZC0tZXNjYXBlZC1oZWFkbGluZSkpKQ0KICAgICAgICAgICAoZGVhY3RpdmF0ZS1t YXJrKQ0KICAgICAgICAgICAobGV0ICgob3JnLWh0bWwtcG9zdGFtYmxlIG9yZy1leHBvcnQtaGVh ZC0taHRtbC1wb3N0YW1ibGUpKQ0KICAgICAgICAgICAgICAgIChjbC1sZXRmICgoKHN5bWJvbC1m dW5jdGlvbiAnb3JnLWV4cG9ydC1nZXQtcmVmZXJlbmNlKSAoc3ltYm9sLWZ1bmN0aW9uICdvcmct ZXhwb3J0LWdldC1yZWZlcmVuY2UtY3VzdG9tKSkpDQogICAgICAgICAgICAgICAgICAoaWYgb3Jn LWV4cG9ydC1oZWFkLWNsaWNrLXRvYy1oMg0KICAgICAgICAgICAgICAgICAgICAgIChjbC1sZXRm ICgoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7KHN5bWJvbC1mdW5jdGlvbiAn b3JnLWh0bWwtdG9jKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN5bWJvbC1m dW5jdGlvbiAnb3JnLWV4cG9ydC1oZWFkLS1jdXN0b20tdG9jKSkpDQogICAgICAgICAgICAgICAg ICAgICAgICAob3JnLWh0bWwtZXhwb3J0LXRvLWh0bWwgbmlsIHQpKSkpKQ0KICAgICAgICAgICAo c2V0LWJ1ZmZlci1tb2RpZmllZC1wIHQpKSAiLW5vZXhwb3J0LW5vcmVleHBvcnQiKSkNCiAgKGlm IChlcXVhbCBiYWNrZW5kICJwZGYiKQ0KICAgICAgKG9yZy1leHBvcnQtaGVhZC0tcnVuLW9uLWVh Y2gtaGVhZGluZw0KICAgICAgICMnKGxhbWJkYSAoKQ0KICAgICAgICAgICAob3JnLXNldC1wcm9w ZXJ0eQ0KICAgICAgICAgICAgIkVYUE9SVF9GSUxFX05BTUUiDQogICAgICAgICAgICAoY29uY2F0 IGRpcmVjdG9yeS1uYW1lIChvcmctZXhwb3J0LWhlYWQtLWVzY2FwZWQtaGVhZGxpbmUpKSkNCiAg ICAgICAgICAgKGRlYWN0aXZhdGUtbWFyaykNCiAgICAgICAgICAgKG9yZy1sYXRleC1leHBvcnQt dG8tcGRmIG5pbCB0KQ0KICAgICAgICAgICAoc2V0LWJ1ZmZlci1tb2RpZmllZC1wIHQpKSAiLW5v ZXhwb3J0LW5vcmVleHBvcnQiKSkpDQoNCihkZWZ1biBvcmctZXhwb3J0LWhlYWQtLWdvdG8taGVh ZGVyKCZvcHRpb25hbCBuby1uZXctbGluZSkNCiAgIlB1dHMgcG9pbnQgYWZ0ZXIgcHJvcGVydHkt YmxvY2sgaWYgaXQgZXhpc3RzLCBpbiBhbiBlbXB0eSBsaW5lDQogIGJ5IGNyZWF0aW5nIGEgbmV3 IGxpbmUsIHVubGVzcyBuby1uZXctbGluZSBpcyBub24gbmlsIGFuZCByZXR1cm5zIHBvaW50Ig0K ICAoaW50ZXJhY3RpdmUpDQogIChvcmctYmFjay10by1oZWFkaW5nIHQpDQogIChsZXQqICgoYmVn LWVuZCAob3JnLWdldC1wcm9wZXJ0eS1ibG9jaykpDQogICAgICAgICAoZW5kIChjZHIgYmVnLWVu ZCkpKQ0KICAgIChnb3RvLWNoYXIgKG9yIGVuZCAocG9pbnQpKSkpDQogIChnb3RvLWNoYXIgKHBv aW50LWF0LWJvbCAyKSkgOztBZHZhbmNlIG9uZSBsaW5lDQogIChpZiAobm90IG5vLW5ldy1saW5l KQ0KICAgICAgKHByb2duDQogICAgICAgIChuZXdsaW5lKQ0KICAgICAgICAoZ290by1jaGFyIChw b2ludC1hdC1ib2wgMCkpKSkgOztHbyBiYWNrIG9uZSBsaW5lDQogIChwb2ludCkpDQoNCihkZWZ1 biBvcmctZXhwb3J0LWhlYWQtLWdvdG8tZm9vdGVyKCZvcHRpb25hbCBuby1uZXctbGluZSkNCiAg IlB1dHMgcG9pbnQgYXQgZW5kIG9mIHVidHJlZSBhbmQgcmV0dXJucyBwb2ludCINCiAgKGludGVy YWN0aXZlKQ0KICAob3JnLWVuZC1vZi1zdWJ0cmVlKQ0KICAoaWYgKG5vdCBuby1uZXctbGluZSkN CiAgICAgIChwcm9nbg0KICAgICAgICAobmV3bGluZSkpKQ0KICAocG9pbnQpKQ0KDQoNCihkZWZ1 biBvcmctZXhwb3J0LWhlYWQtLWdldC1jb250ZW50LXN1YnRyZWUtYXQtcG9pbnQoKQ0KICAoaW50 ZXJhY3RpdmUpDQogICJHZXRzIHRoZSBjb250ZW50IG9mIHRoZSBzdWJ0cmVlIGF0IHBvaW50LCBw ZXJmb3JtaW5nIHRoZSBuZWNlc3NhcnkgaW5jbHVkZXMNCnRvIGNoZWNrIGlmIHRoZSBoYXNoIGhh cyBjaGFuZ2VkIg0KICAoc2F2ZS1leGN1cnNpb24NCiAgICAoZGVhY3RpdmF0ZS1tYXJrIHQpDQog ICAgKGxldCogKChzdGFydCAob3JnLWV4cG9ydC1oZWFkLS1nb3RvLWhlYWRlciB0KSkNCiAgICAg ICAgICAoZW5kIChvcmctZW5kLW9mLXN1YnRyZWUgdCkpDQogICAgICAgICAgKGJ1ZmZlciAoY3Vy cmVudC1idWZmZXIpKQ0KICAgICAgICAgIChjb250ZW50IChidWZmZXItc3Vic3RyaW5nIHN0YXJ0 IGVuZCkpDQogICAgICAgICAgKGluY2x1ZGUtcmUgIl5bIFx0XSojXFwrSU5DTFVERToiKSkNCiAg ICAgIChpZiAoc3RyaW5nLW1hdGNoIGluY2x1ZGUtcmUgY29udGVudCkNCiAgICAgICAgICAod2l0 aC10ZW1wLWJ1ZmZlcg0KICAgICAgICAgICAgKGluc2VydCBjb250ZW50KQ0KICAgICAgICAgICAg KG9yZy1tb2RlKQ0KICAgICAgICAgICAgKG9yZy1leHBvcnQtZXhwYW5kLWluY2x1ZGUta2V5d29y ZCkNCiAgICAgICAgICAgIChidWZmZXItc3RyaW5nKSkNCiAgICAgIGNvbnRlbnQpKSkpDQoNCg0K KGRlZnVuIG9yZy1leHBvcnQtaGVhZC0tZ2V0LXN1bW1hcnktYXQtcG9pbnQoJm9wdGlvbmFsIG4t cGFyYWdyYXBocyBuLWNoYXJzKQ0KICAiR2V0cyB0aGUgc3VtbWFyeSBvZiB0aGUgc3VidHJlZSBh dCBwb2ludCINCiAgKGludGVyYWN0aXZlKQ0KICAoc2F2ZS1leGN1cnNpb24NCiAgICAoZGVhY3Rp dmF0ZS1tYXJrIHQpDQogICAgKGxldCogKChuLXBhcmFncmFwaHMgKG9yIG4tcGFyYWdyYXBocyAx KSkNCiAgICAgICAgICAgKG4tY2hhcnMgKG9yIG4tY2hhcnMgMjAwKSkNCiAgICAgICAgICAoc3Rh cnQgKG9yZy1leHBvcnQtaGVhZC0tZ290by1oZWFkZXIgdCkpDQogICAgICAgICAgKGVuZG1heCAo c2F2ZS1leGN1cnNpb24gKG9yZy1lbmQtb2Ytc3VidHJlZSB0KSkpDQogICAgICAgICAgKGVuZHBh cmFncmFwaA0KICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24NCiAgICAgICAgICAgICAoZG90aW1l cyAoaSBuLXBhcmFncmFwaHMpDQogICAgICAgICAgICAgICAob3JnLWZvcndhcmQtcGFyYWdyYXBo KSkNCiAgICAgICAgICAgICAoLSAocG9pbnQpIDEpKSkNCiAgICAgICAgICAoZW5kIChtaW4gZW5k bWF4IGVuZHBhcmFncmFwaCAoKyBzdGFydCBuLWNoYXJzKSkpKQ0KICAgICAgKGJ1ZmZlci1zdWJz dHJpbmcgc3RhcnQgZW5kKSkpKQ0KDQoNCihkZWZ1biBvcmctZXhwb3J0LWhlYWQtLWNyZWF0ZS1z dW1tYXJpZXMoKQ0KICAiQ3JlYXRlcyBzdW1tYXJ5IGZvciBhbGwgdGhlIGhlYWRpbmdzIg0KICAo b3JnLWV4cG9ydC1oZWFkLS1ydW4tb24tZWFjaC1oZWFkaW5nDQogICAjJyhsYW1iZGEoKQ0KICAg ICAgIChsZXQqICgoc3VtbWFyeSAob3JnLWVudHJ5LWdldC13aXRoLWluaGVyaXRhbmNlICJTVU1N QVJZIikpDQogICAgICAgICAgICAgIChzdW1tYXJ5IChvciBzdW1tYXJ5IChvcmctZXhwb3J0LWhl YWQtLWdldC1zdW1tYXJ5LWF0LXBvaW50KSkpDQogICAgICAgICAgICAgIChzdW1tYXJ5IChyZXBs YWNlLXJlZ2V4cC1pbi1zdHJpbmcgIlxuIiAiICIgc3VtbWFyeSkpKQ0KICAgICAgICAgKGlmIHN1 bW1hcnkNCiAgICAgICAgICAgICAob3JnLXNldC1wcm9wZXJ0eSAiU1VNTUFSWSIgc3VtbWFyeSkp KSkNCiAgICItbm9leHBvcnQiKSkNCg0KKGRlZnVuIG9yZy1leHBvcnQtaGVhZC0tY3JlYXRlLWVu dHJ5LXRhZ3MoKQ0KICAiQ3JlYXRlcyBsaXN0IG9mIHRhZ3Mgd2l0aCBsaW4iDQogIChvcmctZXhw b3J0LWhlYWQtLXJ1bi1vbi1lYWNoLWhlYWRpbmcNCiAgICMnKGxhbWJkYSgpDQogICAgICAgKGxl dCogKChlbnRyeS10YWdzIChhc3NvYyAiQUxMVEFHUyIgKG9yZy1lbnRyeS1wcm9wZXJ0aWVzKSkp DQogICAgICAgICAgICAgKGVudHJ5LXRhZ3MgKHdoZW4gZW50cnktdGFncyAoZGVsZXRlICIiIChz cGxpdC1zdHJpbmcgKGNkciBlbnRyeS10YWdzKSAiOiIpKSkpDQogICAgICAgICAgICAgKHVybCBv cmctZXhwb3J0LWhlYWQtdGFncy1wYWdlKQ0KICAgICAgICAgICAgICh0YWdzLXRleHQtdXJsICIi KQ0KICAgICAgICAgICAgICh0YWdzLXRleHQgIiIpKQ0KICAgICAgICAgKGRvbGlzdCAodGFnIGVu dHJ5LXRhZ3MpDQogICAgICAgICAgICh1bmxlc3MgKG9yIChzdHJpbmc9IHRhZyAicmVleHBvcnQi KSAoc3RyaW5nPSB0YWcgIm5vZXhwb3J0IikgKHN0cmluZz0gdGFnICJub3JlZXhwb3J0IikpDQog ICAgICAgICAgICAgKHNldHEgIHRhZ3MtdGV4dC11cmwgKGNvbmNhdCB0YWdzLXRleHQtdXJsICJb W2ZpbGU6IiAob3JnLWV4cG9ydC1oZWFkLS1lc2NhcGUgdXJsKSAiLm9yZzo6IyIgdGFnICJdWyMi dGFnIl1dICIpKQ0KICAgICAgICAgICAgIChzZXRxICB0YWdzLXRleHQgKGNvbmNhdCB0YWdzLXRl eHQgdGFnICIgIikpKSkNCiAgICAgICAgIChvcmctc2V0LXByb3BlcnR5ICJUQUdTVVJMIiB0YWdz LXRleHQtdXJsKQ0KICAgICAgICAgKG9yZy1zZXQtcHJvcGVydHkgIlRBR1NURVhUIiB0YWdzLXRl eHQpKSkNCiAgICItbm9leHBvcnQiKSkNCg0KDQoNCjs7OyBIQVNIIGNvZGUNCjs7SWRlYSBmcm9t IGh0dHBzOi8vZW1hY3Muc3RhY2tleGNoYW5nZS5jb20vYS8zOTM3Ni8yMDE2NQ0KKGRlZnVuIG9y Zy1leHBvcnQtaGVhZC0tdXBkYXRlLWhhc2hlcygpDQogICJVcGRhdGVzIHRoZSBoYXNoZXMgb2Yg YWxsIHRoZSBoZWFkaW5ncyINCiAgKG9yZy1leHBvcnQtaGVhZC0tcnVuLW9uLWVhY2gtaGVhZGlu Zw0KICAgIycobGFtYmRhKCkNCiAgICAgICAobGV0ICgobmV3LWhhc2ggIChmb3JtYXQgIiVzIiAo b3JnLWV4cG9ydC1oZWFkLWdldC1oYXNoLXZhbHVlLWNvbnRlbnQpKSkNCiAgICAgICAgICAgICAo b2xkLWhhc2ggKG9yZy1lbnRyeS1nZXQtd2l0aC1pbmhlcml0YW5jZSAiSEFTSCIpKQ0KICAgICAg ICAgICAgIChvbGRlci1oYXNoIChvcmctZW50cnktZ2V0LXdpdGgtaW5oZXJpdGFuY2UgIlBSRVZJ T1VTLUhBU0giKSkpDQogICAgICAgICAoaWYgKG5vdCBvbGQtaGFzaCkNCiAgICAgICAgICAgICAo cHJvZ24NCiAgICAgICAgICAgICAgIChvcmctc2V0LXByb3BlcnR5ICJDUkVBVElPTi1EQVRFIiAo Zm9ybWF0LXRpbWUtc3RyaW5nICIlWS0lbS0lZCIpKSkpDQogICAgICAgICA7O0lmIHRoZXJlIHdh cyBhIGNoYW5nZSBtYWRlDQogICAgICAgICAoaWYgKG5vdCAoZXF1YWwgbmV3LWhhc2ggb2xkLWhh c2gpKQ0KICAgICAgICAgICAgIChwcm9nbg0KICAgICAgICAgICAgICAgKG9yZy1zZXQtcHJvcGVy dHkgIk1PRElGSUNBVElPTi1EQVRFIiAoZm9ybWF0LXRpbWUtc3RyaW5nICIlWS0lbS0lZCIpKQ0K ICAgICAgICAgICAgICAgKG9yZy1zZXQtcHJvcGVydHkgIkhBU0giIG5ldy1oYXNoKSkpDQogICAg ICAgICA7O1NldHRpbmcgcHJvcGVydHkgaXMgZXhwZW5zaXZlDQogICAgICAgICAoaWYgKG5vdCAo ZXF1YWwgb2xkLWhhc2ggb2xkZXItaGFzaCkpDQogICAgICAgICAgICAgICAob3JnLXNldC1wcm9w ZXJ0eSAiUFJFVklPVVMtSEFTSCIgKG9yIG9sZC1oYXNoICIiKSkpKSkNCiAgICItbm9leHBvcnQi KSkNCg0KDQooZGVmdW4gb3JnLWV4cG9ydC1oZWFkLWdldC1oYXNoLXZhbHVlLWNvbnRlbnQoKQ0K ICAiR2V0cyB0aGUgaGFzaCBvZiB0aGUgc3VidHJlZSBhdCBwb2ludCINCiAgKG9yZy1leHBvcnQt aGVhZC1oYXNoLWZ1bmN0aW9uIChvcmctZXhwb3J0LWhlYWQtLWdldC1jb250ZW50LXN1YnRyZWUt YXQtcG9pbnQpKSkNCg0KKGRlZnVuIG9yZy1leHBvcnQtaGVhZC1oYXNoLWZ1bmN0aW9uKHRleHQp DQogICJGdW5jdGlvbiB0byBjYWxjdWxhdGUgdGhlIGhhc2ggb2YgdGV4dC4NCkNhbiBiZSBjaGFu Z2VkIHRvIHNvbWV0aGluZyBzdWNoIGFzIChsZW5ndGggdGV4dCkgdG8gcnVuIGV2ZW4gZmFzdGVy Lg0KU2hvdWxkbid0IHJhbGx5IGFmZmVjdCB0aGUgdGltZSB0byBleHBvcnQgdW5sZXNzIHlvdXIg ZmlsZSBjb250YWlucyBvdmVyIDEwMCB0aG91c2FuZCBsaW5lcyBvZiB0ZXh0Ig0KICAobWQ1IHRl eHQpKQ0KDQo7OztFTkQgSEFTSCBDT0RFDQoNCihkZWZ1biBvcmctZXhwb3J0LWhlYWQtLWRlbGV0 ZS1ub3JlZXhwb3J0KCkNCiAgIkZhc3RlciBleHBvcnQgYnkgZGVsZXRpbmcgdGhpbmdzIHRoYXQg d29uJ3QgYmUgZXhwb3J0ZWQgc28gd2UgZG9uJ3QgcHJvY2VzcyB0aGVtIGFuZCB0aGVpciBsaW5r cyINCiAgKG9yZy1leHBvcnQtaGVhZC0tcnVuLW9uLWVhY2gtaGVhZGluZw0KICAgIycobGFtYmRh KCkNCiAgICAgICAobGV0ICgob2xkLWhhc2ggKG9yZy1lbnRyeS1nZXQtd2l0aC1pbmhlcml0YW5j ZSAiUFJFVklPVVMtSEFTSCIpKQ0KICAgICAgICAgICAgIChuZXctaGFzaCAob3JnLWVudHJ5LWdl dC13aXRoLWluaGVyaXRhbmNlICJIQVNIIikpKQ0KICAgICAgICAgOztJZiB0aGVyZSB3YXMgYSBj aGFuZ2UgbWFkZQ0KICAgICAgICAgKGlmIChlcXVhbCBuZXctaGFzaCBvbGQtaGFzaCkNCiAgICAg ICAgICAgICAocHJvZ24NCiAgICAgICAgICAgICAgIChvcmctdG9nZ2xlLXRhZyAibm9yZWV4cG9y dCIgJ29uKQ0KICAgICAgICAgICAgICAgOztmYXN0ZXIgZXhwb3J0IGJ5IGRlbGV0aW5nIG5vZXhw b3J0IHRoaW5ncyBiZWZvcmUgcHJvY2Vzc2luZw0KICAgICAgICAgICAgICAgKG9yZy1leHBvcnQt aGVhZC0tZXJhc2UtY29udGVudC1zdWJ0cmVlKSkpKSkNCiAgICItbm9leHBvcnQtcmVleHBvcnQi KSkNCg0KKGRlZnVuIG9yZy1leHBvcnQtaGVhZC0tZXJhc2UtY29udGVudC1zdWJ0cmVlKCkNCiAg KHNhdmUtZXhjdXJzaW9uDQogICAgKGxldCAoKHN0YXJ0IChvcmctZXhwb3J0LWhlYWQtLWdvdG8t aGVhZGVyIHQpKQ0KICAgICAgICAgIChlbmQgKG9yZy1lbmQtb2Ytc3VidHJlZSkpKQ0KICAgICAg KGRlbGV0ZS1yZWdpb24gc3RhcnQgZW5kKSkpKQ0KDQoNCg0KKGRlZnVuIG9yZy1leHBvcnQtaGVh ZC0tZ2V0LWhlYWRsaW5lcyAoKQ0KICAiUmV0dXJucyBhIHR1cGxlIHRoYXQgY29udGFpbnMgYSBo YXNodGFibGUgb2YgaGVhZGxpbmUgbmFtZSB0byBBbGlzdCBvZiBoZWFkbGluZSBwcm9wZXJ0aWVz DQpBcyB3ZWxsIGFzIGEgbGlzdCBvZiB0aGUgaGVhZGxpbmUgbmFtZXMiDQogIChtZXNzYWdlICIx IikNCiAgKGNsLWZsZXQgKChtYWtlLWhhc2ggKCkNCiAgICAgICAgICAgICAgICAgICAobWFrZS1o YXNoLXRhYmxlIDp0ZXN0ICdlcXVhbCkpDQogICAgICAgICAoYWRkLXRvLWhhc2ggKGhhc2h0YWJs ZSkNCiAgICAgICAgICAgICAgICAgICAgICAocHV0aGFzaCAob3JnLWV4cG9ydC1oZWFkLS1oZWFk bGluZSkgKG9yZy1lbnRyeS1wcm9wZXJ0aWVzKSBoYXNodGFibGUpKSkNCiAgICAobGV0ICgoaGVh ZGxpbmVzLWhhc2ggKG1ha2UtaGFzaCkpDQogICAgICAgICAgKGhlYWRsaW5lcy1saXN0ICgpKSkN CiAgICAgIChvcmctZXhwb3J0LWhlYWQtLXJ1bi1vbi1lYWNoLWhlYWRpbmcNCiAgICAgICAjJyhs YW1iZGEoKQ0KDQogICAgICAgICAgIChhZGQtdG8taGFzaCBoZWFkbGluZXMtaGFzaCkNCiAgICAg ICAgICAgKHNldHEgaGVhZGxpbmVzLWxpc3QgKGNvbnMgKG9yZy1leHBvcnQtaGVhZC0taGVhZGxp bmUpIGhlYWRsaW5lcy1saXN0KSkpDQogICAgICAgIi1ub2V4cG9ydCIpDQogICAgICAoY29ucyBo ZWFkbGluZXMtaGFzaCBoZWFkbGluZXMtbGlzdCkpKSkNCg0KDQooZGVmdW4gb3JnLWV4cG9ydC1o ZWFkLS1oZWFkbGluZSAoKQ0KICAiR2V0cyB0aGUgaGVhZGxpbmUgdGl0bGUgaWYgcG9pbnQgaXMg YXQgdGhlIGhlYWRsaW5lIg0KICAobnRoIDQgKG9yZy1oZWFkaW5nLWNvbXBvbmVudHMpKSkNCg0K KGRlZnVuIG9yZy1leHBvcnQtaGVhZC0tZXNjYXBlZC1oZWFkbGluZSAoKQ0KICAob3JnLWV4cG9y dC1oZWFkLS1lc2NhcGUgKG9yZy1leHBvcnQtaGVhZC0taGVhZGxpbmUpKSkNCg0KDQooZGVmdW4g b3JnLWV4cG9ydC1oZWFkLS1yZXBsYWNlLWhlYWRsaW5lLW1hY3JvcyhtYWNyby1hbGlzdCkNCiAg IlJlcGxhY2UgbWFjcm9zIG9mIHRoZSB0eXBlICMjI1RFWFQjIyMgVGhleSBjYW4gY29udGFpbiBp bmZvcm1hdGlvbiBzdWNoIGFzIGRhdGUNCm9yIHByZXZpb3VzIGFuZCBuZXh0IHBvc3QuDQpBbnkg aGVhZGxpbmUgcHJvcGVydHkgY2FuIGJlIHVzZWQgYXMgYSBtYWNybyBvZiB0aGlzIHR5cGUuIg0K ICAoc2F2ZS1leGN1cnNpb24NCiAgICA7O0xldCdzIGZpbmQgdGhlIGVuZCBvZiB0aGUgaGVhZGxp bmUgYXMgYSBtYXJrZXIsIHNpbmNlIGl0IGNhbiBtb3ZlDQogICAgKGxldCAoKHN1YnRyZWUtZW5k LW1hcmtlciAgKHNhdmUtZXhjdXJzaW9uIChvcmctZW5kLW9mLXN1YnRyZWUpIChwb2ludC1tYXJr ZXIpKSkpDQogICAgICA7OyBFbmQgb2Ygc3VidHJlZSBtaWdodCBjaGFuZ2UgYmVjYXVzZSBvZiBt YWNybyBleHBhbnNpb24sIHNvIGl0IGlzIHJlY2FsY3VsYXRlZC4NCiAgICAgIDs7IE1hY3JvcyBt aWdodCBiZSBzdWJzdGl0dXRlZCBmb3Igc29tZXRoaW5nIHNtYWxsZXIsIHNvIHdlIG1vdmUgdGhl IHBvaW50IG9uIHRvIHRoZSBsZWZ0IGF0IHRoZSBlbmQuDQogICAgICAod2hpbGUgKHJlLXNlYXJj aC1mb3J3YXJkICJcXCNcXCNcXCNcXChbLUEtWmEtel9dK1xcKVxcI1xcI1xcIyIgKG1hcmtlci1w b3NpdGlvbiBzdWJ0cmVlLWVuZC1tYXJrZXIpIHQpDQogICAgICAgICh1bmxlc3MgKG9yZy1pbi1z cmMtYmxvY2stcCkNCiAgICAgICAgICAobGV0KiAoKG1hY3JvIChtYXRjaC1zdHJpbmctbm8tcHJv cGVydGllcyAxKSkNCiAgICAgICAgICAgICAgICAgKG1hY3JvLXN1YnMgKGNkciAoYXNzb2MgbWFj cm8gbWFjcm8tYWxpc3QpKSkpDQogICAgICAgICAgICAoaWYgbWFjcm8tc3Vicw0KICAgICAgICAg ICAgICAgIChyZXBsYWNlLW1hdGNoICBtYWNyby1zdWJzIHQgdCkNCiAgICAgICAgICAgICAgKHJl cGxhY2UtbWF0Y2ggIiIpKQ0KICAgICAgICAgICAgKGJhY2t3YXJkLWNoYXIpKSkpKSkpDQoNCg0K KGRlZnVuIG9yZy1leHBvcnQtaGVhZC0tZ2V0LWNvbnRlbnQtc3VidHJlZS1tYXRjaChtYXRjaCkN CiAgIkdldCBjb250ZW50IG9mIHRoZSBzdWJ0cmVlIHRoYXQgbWF0Y2hlcyBcIm1hdGNoXCINCldo ZXJlIG1hdGNoIGlzIGEgdGFnIG9yIC10YWcgb3IgY29tYmluYXRpb24gb2YgdGhlbS4iDQogIChz YXZlLWV4Y3Vyc2lvbg0KICAobGV0ICgoY29udGVudCAiIikpDQogICAgKG9yZy1leHBvcnQtaGVh ZC0tcnVuLW9uLWVhY2gtaGVhZGluZw0KICAgICAjJyhsYW1iZGEoKQ0KICAgICAgICAgKHNldHEg Y29udGVudCAoY29uY2F0IGNvbnRlbnQgKG9yZy1leHBvcnQtaGVhZC0tZ2V0LWNvbnRlbnQtc3Vi dHJlZS1hdC1wb2ludCkpKSkNCiAgICAgbWF0Y2gpDQogICAgY29udGVudCkpKQ0KDQooZGVmdW4g b3JnLWV4cG9ydC1oZWFkLS1pbnNlcnQtb24taGVhZGVyICh0ZXh0KQ0KICAiSW5zZXJ0IHRleHQg b24gdGhlIGhlYWRlciBvZiB0aGUgc3VidHJlZSwgYnV0IGFmdGVyIHRoZSBwcm9wZXJ0eSBib3gi DQogIChzYXZlLWV4Y3Vyc2lvbg0KICAgIChvcmctZXhwb3J0LWhlYWQtLWdvdG8taGVhZGVyKQ0K ICAgIChpbnNlcnQgdGV4dCkpKQ0KDQooZGVmdW4gb3JnLWV4cG9ydC1oZWFkLS1pbnNlcnQtb24t Zm9vdGVyICh0ZXh0KQ0KICAiSW5zZXJ0IHRleHQgb24gdGhlIGZvb3RlciAoZW5kKSBvZiB0aGUg c3VidHJlZSINCiAgKHNhdmUtZXhjdXJzaW9uDQogICAgKG9yZy1leHBvcnQtaGVhZC0tZ290by1m b290ZXIpDQogICAgKGluc2VydCB0ZXh0KSkpDQoNCihkZWZ1biBvcmctZXhwb3J0LWhlYWQtLWdl bmVyYXRlLWluZGV4LWFsaXN0IChoZWFkbGluZXMtbGlzdCBoZWFkbGluZXMtaGFzaCkNCiAgIkdl bmVhdGVzIGFuIG9yZyBsaXN0IHdpdGggdGhlIGluZGV4IG9mIHRoZSB3ZWJzaXRlIGFuZCBpbnNl cnRzIGl0IGluIGFuIGFsaXN0Ig0KICAobGV0ICgoaW5kZXggIiIpDQogICAgICAgIChyZXZlcnNl LWluZGV4ICIiKQ0KICAgICAgICAoaW5kZXgtd2l0aC1kYXRlcyAiIikNCiAgICAgICAgKGluZGV4 LXdpdGgtc3VtbWFyaWVzICIiKQ0KICAgICAgICAoYWxsLXRhZ3MgIlxuIikNCiAgICAgICAgKGFs bC10YWdzLXJldmVyc2UgIlxuIikNCiAgICAgICAgKGFsbC10YWdzLXdpdGgtZGF0ZXMgIlxuIikN CiAgICAgICAgKGFsbC10YWdzLXdpdGgtc3VtbWFyaWVzICJcbiIpDQogICAgICAgICh0YWdzICgp KQ0KICAgICAgICAodGFncy1pbmRleGVzICgpKSkNCiAgICAoZG9saXN0IChoZWFkbGluZS1uYW1l IGhlYWRsaW5lcy1saXN0KQ0KICAgICAgKGxldCogKChoZWFkbGluZS1hbGlzdCAoZ2V0aGFzaCBo ZWFkbGluZS1uYW1lIGhlYWRsaW5lcy1oYXNoIG5pbCkpDQogICAgICAgICAgICAgKGVudHJ5LXRh Z3MgKGFzc29jICJBTExUQUdTIiBoZWFkbGluZS1hbGlzdCkpDQogICAgICAgICAgICAgKGVudHJ5 LXRhZ3MgKHdoZW4gZW50cnktdGFncyAoZGVsZXRlICIiIChzcGxpdC1zdHJpbmcgKGNkciBlbnRy eS10YWdzKSAiOiIpKSkpDQogICAgICAgICAgICAgKGNyZWF0aW9uLWRhdGUgKGNkciAoYXNzb2Mg IkNSRUFUSU9OLURBVEUiIGhlYWRsaW5lLWFsaXN0KSkpDQogICAgICAgICAgICAgKG1vZGlmaWNh dGlvbi1kYXRlIChjZHIgKGFzc29jICJNT0RJRklDQVRJT04tREFURSIgaGVhZGxpbmUtYWxpc3Qp KSkNCiAgICAgICAgICAgICAoc3VtbWFyeSAoc3RyaW5nLXRyaW0gKGNkciAoYXNzb2MgIlNVTU1B UlkiIGhlYWRsaW5lLWFsaXN0KSkpKQ0KICAgICAgICAgICAgIChpbmRleC1lbnRyeSAoY29uY2F0 ICItIFtbImhlYWRsaW5lLW5hbWUiXVsiaGVhZGxpbmUtbmFtZSJdXVxuIikpDQogICAgICAgICAg ICAgKGluZGV4LWVudHJ5LXdpdGgtZGF0ZSAoY29uY2F0ICItIEBAaHRtbDo8Yj5AQFtbImhlYWRs aW5lLW5hbWUiXVsiaGVhZGxpbmUtbmFtZSJdXUBAaHRtbDo8L2I+QEAiDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiQEBodG1sOjxzcGFuIGNsYXNzPVwicGFnZS1kYXRl XCI+QEAiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICgiIGNyZWF0 aW9uLWRhdGUiLCB1cGRhdGVkICIgbW9kaWZpY2F0aW9uLWRhdGUgIikiDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiQEBodG1sOjwvc3Bhbj5AQCIgIlxuIiApKQ0KICAg ICAgICAgICAgIChpbmRleC1lbnRyeS13aXRoLXN1bW1hcnkNCiAgICAgICAgICAgICAgKGNvbmNh dCAgaW5kZXgtZW50cnktd2l0aC1kYXRlDQogICAgICAgICAgICAgICAgICAgICAgICh1bmxlc3Mg KD0gKGxlbmd0aCBzdW1tYXJ5KSAwKQ0KICAgICAgICAgICAgICAgICAgICAgICAgIChjb25jYXQg IiAgIEBAaHRtbDo8YnI+QEAiIHN1bW1hcnkgIlxuIikpKSkpDQoNCiAgICAgICAgKHNldHEgaW5k ZXggKGNvbmNhdCBpbmRleCBpbmRleC1lbnRyeSkpDQogICAgICAgIChzZXRxIHJldmVyc2UtaW5k ZXggKGNvbmNhdCBpbmRleC1lbnRyeSByZXZlcnNlLWluZGV4KSkNCiAgICAgICAgKHNldHEgaW5k ZXgtd2l0aC1kYXRlcyAoY29uY2F0ICBpbmRleC13aXRoLWRhdGVzIGluZGV4LWVudHJ5LXdpdGgt ZGF0ZSkpDQogICAgICAgIChzZXRxIGluZGV4LXdpdGgtc3VtbWFyaWVzIChjb25jYXQgIGluZGV4 LXdpdGgtc3VtbWFyaWVzIGluZGV4LWVudHJ5LXdpdGgtc3VtbWFyeSkpDQoNCiAgICAgICAgKGRv bGlzdCAodGFnIGVudHJ5LXRhZ3MpDQogICAgICAgICAgKGlmIChub3QgKG1lbWJlciB0YWcgdGFn cykpDQogICAgICAgICAgICAgIChzZXRxIHRhZ3MgKGNvbnMgdGFnIHRhZ3MpKSkNCiAgICAgICAg ICAoZG9saXN0IChzdWZmaXggJygiIiAiLXJldmVyc2UiICItd2l0aC1kYXRlcyIgIi13aXRoLXN1 bW1hcmllcyIpKQ0KICAgICAgICAgICAgOzsgSW5pdGlhbGl6ZSB0YWdzIGxpc3RzDQogICAgICAg ICAgICAobGV0ICgodGFnLWluZGV4LW5hbWUgKHVwY2FzZSAoY29uY2F0IHRhZyBzdWZmaXgpKSkp DQogICAgICAgICAgICAgICh1bmxlc3MgKGFzc29jIHRhZy1pbmRleC1uYW1lIHRhZ3MtaW5kZXhl cykNCiAgICAgICAgICAgICAgICAoc2V0cSB0YWdzLWluZGV4ZXMgKGNvbnMgYCgsdGFnLWluZGV4 LW5hbWUgLiAiIikgIHRhZ3MtaW5kZXhlcykpKSkpDQoNCiAgICAgICAgICA7O0FkZCB0YWcgaW5k ZXhlcyB0byBsaXN0DQogICAgICAgICAgKGxldCogKCh0YWcgKHVwY2FzZSB0YWcpKQ0KICAgICAg ICAgICAgICAgICh0YWctcmV2ZXJzZSAodXBjYXNlIChjb25jYXQgdGFnICItcmV2ZXJzZSIpKSkN CiAgICAgICAgICAgICAgICAodGFnLXdpdGgtZGF0ZXMgKHVwY2FzZSAoY29uY2F0IHRhZyAiLXdp dGgtZGF0ZXMiKSkpDQogICAgICAgICAgICAgICAgKHRhZy13aXRoLXN1bW1hcmllcyAodXBjYXNl IChjb25jYXQgdGFnICItd2l0aC1zdW1tYXJpZXMiKSkpDQogICAgICAgICAgICAgICAgKHRhZy1h c3NvYyAoYXNzb2MgdGFnIHRhZ3MtaW5kZXhlcykpDQogICAgICAgICAgICAgICAgKHRhZy1hc3Nv Yy1yZXZlcnNlIChhc3NvYyB0YWctcmV2ZXJzZSB0YWdzLWluZGV4ZXMpKQ0KICAgICAgICAgICAg ICAgICh0YWctYXNzb2Mtd2l0aC1kYXRlcyAoYXNzb2MgdGFnLXdpdGgtZGF0ZXMgdGFncy1pbmRl eGVzKSkNCiAgICAgICAgICAgICAgICAodGFnLWFzc29jLXdpdGgtc3VtbWFyaWVzIChhc3NvYyB0 YWctd2l0aC1zdW1tYXJpZXMgdGFncy1pbmRleGVzKSkNCiAgICAgICAgICAgICAgICAodGFnLWlu ZGV4IChjZHIgdGFnLWFzc29jKSkNCiAgICAgICAgICAgICAgICAodGFnLWluZGV4LXJldmVyc2Ug KGNkciB0YWctYXNzb2MtcmV2ZXJzZSkpDQogICAgICAgICAgICAgICAgKHRhZy1pbmRleC13aXRo LWRhdGVzIChjZHIgdGFnLWFzc29jLXdpdGgtZGF0ZXMpKQ0KICAgICAgICAgICAgICAgICh0YWct aW5kZXgtd2l0aC1zdW1tYXJpZXMgKGNkciB0YWctYXNzb2Mtd2l0aC1zdW1tYXJpZXMpKSkNCg0K ICAgICAgICAgICAgKHNldGYgKGNkciB0YWctYXNzb2MpIChjb25jYXQgdGFnLWluZGV4IGluZGV4 LWVudHJ5KSkNCiAgICAgICAgICAgIChzZXRmIChjZHIgdGFnLWFzc29jLXJldmVyc2UpIChjb25j YXQgaW5kZXgtZW50cnkgdGFnLWluZGV4LXJldmVyc2UgKSkNCiAgICAgICAgICAgIChzZXRmIChj ZHIgdGFnLWFzc29jLXdpdGgtZGF0ZXMpIChjb25jYXQgdGFnLWluZGV4LXdpdGgtZGF0ZXMgaW5k ZXgtZW50cnktd2l0aC1kYXRlKSkNCiAgICAgICAgICAgIChzZXRmIChjZHIgdGFnLWFzc29jLXdp dGgtc3VtbWFyaWVzKSAoY29uY2F0IHRhZy1pbmRleC13aXRoLXN1bW1hcmllcyBpbmRleC1lbnRy eS13aXRoLXN1bW1hcnkpKSkpKSkNCg0KICAgIDs7IE5vdyB3ZSBjcmVhdGUgYW4gaW5kZXggZm9y IGFsbCB0YWdzLCB0byBiZSBhYmxlIHRvIGhhdmUgdGFnIHBhZ2VzDQogICAgKHNvcnQgdGFncyAo bGFtYmRhIChhIGIpIChzdHJpbmc8ICBhICBiKSkpIDsgU29ydCB0aGUgdGFncyBmb3IgdGhlIGlu ZGV4IG9mIGFsbCB0YWdzDQogICAgKGRvbGlzdCAodGFnIHRhZ3MpDQogICAgICAodW5sZXNzIChv ciAoc3RyaW5nPSB0YWcgInJlZXhwb3J0IikgKHN0cmluZz0gdGFnICJub2V4cG9ydCIpIChzdHJp bmc9IHRhZyAibm9yZWV4cG9ydCIpKQ0KICAgICAgKGxldCogKCh0YWctcmV2ZXJzZSAodXBjYXNl IChjb25jYXQgdGFnICItcmV2ZXJzZSIpKSkNCiAgICAgICAgICAgICh0YWctd2l0aC1kYXRlcyAo dXBjYXNlIChjb25jYXQgdGFnICItd2l0aC1kYXRlcyIpKSkNCiAgICAgICAgICAgICh0YWctd2l0 aC1zdW1tYXJpZXMgKHVwY2FzZSAoY29uY2F0IHRhZyAiLXdpdGgtc3VtbWFyaWVzIikpKQ0KICAg ICAgICAgICAgKHRhZy13aXRoLXN1bW1hcmllcy1saXN0IChjZHIgKGFzc29jIHRhZy13aXRoLXN1 bW1hcmllcyB0YWdzLWluZGV4ZXMpKSkNCiAgICAgICAgICAgICh0YWctbGlzdCAoY2RyIChhc3Nv YyB0YWcgdGFncy1pbmRleGVzKSkpDQogICAgICAgICAgICAodGFnLXJldmVyc2UtbGlzdCAoY2Ry IChhc3NvYyB0YWctcmV2ZXJzZSB0YWdzLWluZGV4ZXMpKSkNCiAgICAgICAgICAgICh0YWctd2l0 aC1kYXRlcy1saXN0IChjZHIgKGFzc29jIHRhZy13aXRoLWRhdGVzIHRhZ3MtaW5kZXhlcykpKSkN CiAgICAgICAgKHNldHEgYWxsLXRhZ3MgKGNvbmNhdCBhbGwtdGFncyAiKiogIiB0YWcgIlxuIiB0 YWctbGlzdCkpDQogICAgICAgIChzZXRxIGFsbC10YWdzLXJldmVyc2UgKGNvbmNhdCBhbGwtdGFn cy1yZXZlcnNlICIqKiAiIHRhZyAiXG4iIHRhZy1yZXZlcnNlLWxpc3QpKQ0KICAgICAgICAoc2V0 cSBhbGwtdGFncy13aXRoLWRhdGVzIChjb25jYXQgYWxsLXRhZ3Mtd2l0aC1kYXRlcyAiKiogIiB0 YWcgIlxuIiB0YWctd2l0aC1kYXRlcy1saXN0KSkNCiAgICAgICAgKHNldHEgYWxsLXRhZ3Mtd2l0 aC1zdW1tYXJpZXMgKGNvbmNhdCBhbGwtdGFncy13aXRoLXN1bW1hcmllcyAiKiogIiB0YWcgIlxu IiB0YWctd2l0aC1zdW1tYXJpZXMtbGlzdCkpKSkpDQoNCg0KICAgIChhcHBlbmQNCiAgICAgKGxp c3QgKGNvbnMgIklOREVYIiBpbmRleCkgKGNvbnMgIklOREVYLVJFVkVSU0UiIHJldmVyc2UtaW5k ZXgpICAoY29ucyAiSU5ERVgtV0lUSC1EQVRFUyIgaW5kZXgtd2l0aC1kYXRlcykgKGNvbnMgIklO REVYLVdJVEgtU1VNTUFSSUVTIiBpbmRleC13aXRoLXN1bW1hcmllcykNCiAgICAgICAgICAgKGNv bnMgIkFMTC1UQUdTIiBhbGwtdGFncykgKGNvbnMgIkFMTC1UQUdTLVJFVkVSU0UiIGFsbC10YWdz LXJldmVyc2UpICAoY29ucyAiQUxMLVRBR1MtV0lUSC1EQVRFUyIgYWxsLXRhZ3Mtd2l0aC1kYXRl cykgKGNvbnMgIkFMTC1UQUdTLVdJVEgtU1VNTUFSSUVTIiBhbGwtdGFncy13aXRoLXN1bW1hcmll cykpDQogICAgIHRhZ3MtaW5kZXhlcykpKQ0KDQo7O0VORCBPRiBOT04gQVNUIChub24gb3JnLWVs ZW1lbnQpIFNFU1NJT04NCg0KDQooZGVmdW4gb3JnLWV4cG9ydC1oZWFkLS1maXgtbG9jYWwtbGlu ay1hc3QgKGhlYWRsaW5lcyBsaW5rKQ0KICAiRml4ZXMgZnV6enkgbGlua3MgdG8gaGVhZGxpbmVz LCBzbyB0aGUgdGhleSBwb2ludCB0byBuZXcgZmlsZXMiDQogIChjbC1mbGV0ICgoZ2V0LWhhc2gg KGVsZW1lbnQgc2V0KQ0KICAgICAgICAgICAgICAgICAgIChnZXRoYXNoIGVsZW1lbnQgc2V0IG5p bCkpKQ0KICAgICh3aGVuIChzdHJpbmc9IChvcmctZWxlbWVudC1wcm9wZXJ0eSA6dHlwZSBsaW5r KSAiZnV6enkiKQ0KICAgICAgKGxldCogKChwYXRoICAob3JnLWVsZW1lbnQtcHJvcGVydHkgOnBh dGggbGluaykpDQogICAgICAgICAgICAgKG5ldy1wYXRoIChnZXQtaGFzaCBwYXRoIGhlYWRsaW5l cykpKQ0KICAgICAgICAoaWYgbmV3LXBhdGgNCiAgICAgICAgICAobGV0ICgobGluay1jb3B5IChv cmctZWxlbWVudC1jb3B5IGxpbmspKSkNCiAgICAgICAgICAgIChhcHBseSAjJ29yZy1lbGVtZW50 LWFkb3B0LWVsZW1lbnRzIGxpbmstY29weSAob3JnLWVsZW1lbnQtY29udGVudHMgbGluaykpDQog ICAgICAgICAgICAob3JnLWVsZW1lbnQtcHV0LXByb3BlcnR5IGxpbmstY29weSA6dHlwZSAiZmls ZSIpDQogICAgICAgICAgICAob3JnLWVsZW1lbnQtcHV0LXByb3BlcnR5IGxpbmstY29weSA6cGF0 aCAoY29uY2F0IChvcmctZXhwb3J0LWhlYWQtLWVzY2FwZSBwYXRoKSAiLm9yZyIpKQ0KICAgICAg ICAgICAgKG9yZy1lbGVtZW50LXNldC1lbGVtZW50IGxpbmsgbGluay1jb3B5KSkNCiAgICAgICAg ICA7OyBlbHNlOiBuZWVkIHRvIGNoZWNrIGlmIHRoZSBsaW5rIGlzIGxpbmtpbmcgdG8gYSBzdWJo ZWFkbGluZQ0KICAgICAgICAgKHNhdmUtZXhjdXJzaW9uDQogICAgICAgICAgIChvcmctbGluay1z ZWFyY2ggcGF0aCkNCiAgICAgICAgICAgOzsgSWYgdGhlIHNhbWUgaGVhZGluZyBjb250YWlucyBt dWx0aXBsZSBzdWJoZWFkaW5ncywgZWFjaCB3aXRoIHRoZSBzYW1lIG5hbWU7IGl0IHdpbGwgc2lt cGx5IGxpbmsgdG8gdGhlIGZpcnN0IG9uZQ0KICAgICAgICAgICAobGV0ICgobGluay1jb3B5IChv cmctZWxlbWVudC1jb3B5IGxpbmspKSkNCiAgICAgICAgICAgIChhcHBseSAjJ29yZy1lbGVtZW50 LWFkb3B0LWVsZW1lbnRzIGxpbmstY29weSAob3JnLWVsZW1lbnQtY29udGVudHMgbGluaykpDQog ICAgICAgICAgICAob3JnLWVsZW1lbnQtcHV0LXByb3BlcnR5IGxpbmstY29weSA6dHlwZSAiZmls ZSIpDQogICAgICAgICAgICAob3JnLWVsZW1lbnQtcHV0LXByb3BlcnR5IGxpbmstY29weSA6cGF0 aCAoY29uY2F0IChvcmctZXhwb3J0LWhlYWQtLWVzY2FwZSAob3JnLWZpbmQtdG9wLWhlYWRsaW5l KSkgIi5vcmciKSkNCiAgICAgICAgICAgIChvcmctZWxlbWVudC1wdXQtcHJvcGVydHkgbGluay1j b3B5IDpzZWFyY2gtb3B0aW9uIChjb25jYXQgIiMiIChvcmctZXhwb3J0LWhlYWQtLWVzY2FwZSBw YXRoKSkpDQogICAgICAgICAgICAob3JnLWVsZW1lbnQtc2V0LWVsZW1lbnQgbGluayBsaW5rLWNv cHkpKQ0KICAgICAgICAgICApKSkpKSkNCg0KDQooZGVmdW4gb3JnLWV4cG9ydC1oZWFkLS1maXgt ZmlsZS1leHRlcm5hbC1saW5rLWFzdCAoZGlyZWN0b3J5LXBhdGggbGluaykNCiAgIkNyZWF0ZXMg aGFyZCBsaW5rcyB0byB0aGUgZXh0ZXJuYWwgZmlsZXMgaW4gdGhlIG91dHB1dCBkaXJlY3RvcnkN Ck9ubHkgbW9kaWZpZXMgbGlua3MgaWYgZmlsZSBleGlzdHMiDQogICh3aGVuIChhbmQgKG1lbWJl ciAob3JnLWVsZW1lbnQtcHJvcGVydHkgOnR5cGUgbGluaykgb3JnLWV4cG9ydC1oZWFkLWxpbmst ZmlsZXMtdG8tZXhwb3J0KSAgKGZpbGUtZXhpc3RzLXAgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpw YXRoIGxpbmspKSkNCiAgICAobGV0KiAoKHBhdGggKG9yZy1lbGVtZW50LXByb3BlcnR5IDpwYXRo IGxpbmspKQ0KICAgICAgICAgICAobGluay1jb3B5IChvcmctZWxlbWVudC1jb3B5IGxpbmspKQ0K ICAgICAgICAgICAoZXh0ZW5zaW9uIChmaWxlLW5hbWUtZXh0ZW5zaW9uIHBhdGgpKQ0KICAgICAg ICAgICAoaW1nLWV4dGVuc2lvbnMgJygianBnIiAidGlmZiIgInBuZyIgImJtcCIpKQ0KICAgICAg ICAgICAobGluay1kZXNjcmlwdGlvbiAob3JnLWVsZW1lbnQtY29udGVudHMgbGluaykpDQogICAg ICAgICAgIDs7UmVtb3ZlcyAuLi8gZnJvbSB0aGUgcmVsZWF0aXZlIHBhdGggb2YgdGhlIGZpbGUg dG8gZm9yY2UgaXQgdG8gYmUgbW92ZWQgdG8gYSBzdWJmb2xkZXINCiAgICAgICAgICAgOztvZiB0 aGUgY3VycmVudCBkaXIuIFRoaXMgY2F1c2VzIHNvbWUgZmlsZSBjb25mbGl0cyBpbiBlZGdlIGNh c2VzDQogICAgICAgICAgIDs7ZS5nOiAuLi9pbWFnZXMgYW5kIC4uLy4uL2ltYWdlcyB3aWxsIG1h cCB0byB0aGUgc2FtZSBwbGFjZS4gVGhpcyBzaG91bGQgYmUgcmFyZSBpbiBub3JtYWwgdXNhZ2UN CiAgICAgICAgICAgKG5ldy1yZWxhdGl2ZS1wYXRoDQogICAgICAgICAgICAoY29uY2F0ICIuLyIg KGZpbGUtbmFtZS1leHRlbnNpb24gcGF0aCkgIi8iIChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5IHBh dGgpKSkNCiAgICAgICAgICAgKG5ldy1oYXJkLWxpbmstcGF0aCAoY29uY2F0IGRpcmVjdG9yeS1w YXRoIG5ldy1yZWxhdGl2ZS1wYXRoKSkNCiAgICAgICAgICAgKG5ldy1oYXJkLWxpbmstZGlyZWN0 b3J5IChmaWxlLW5hbWUtZGlyZWN0b3J5IG5ldy1oYXJkLWxpbmstcGF0aCkpKQ0KDQogICAgICA7 O0ZpeCB0aGUgQVNUDQogICAgICA7O0lmIGltYWdlLCByZW1vdmUgZGVzY3JpcHRpb24gc28gaXQg d2lsbCBiZWNvbWUgYSByZWFsIGltYWdlIGluc3RlYWQgb2YgYSBsaW5rDQogICAgICAodW5sZXNz IChvciAobWVtYmVyIGV4dGVuc2lvbiBpbWctZXh0ZW5zaW9ucykpDQogICAgICAgIChhcHBseSAj J29yZy1lbGVtZW50LWFkb3B0LWVsZW1lbnRzIGxpbmstY29weSBsaW5rLWRlc2NyaXB0aW9uKSkN CiAgICAgIChvcmctZWxlbWVudC1wdXQtcHJvcGVydHkgbGluay1jb3B5IDpwYXRoIG5ldy1yZWxh dGl2ZS1wYXRoKQ0KICAgICAgKG9yZy1lbGVtZW50LXNldC1lbGVtZW50IGxpbmsgIGxpbmstY29w eSkNCg0KICAgICAgOztDcmVhdGUgaGFyZCBsaW5rIGZvbGRlcg0KICAgICAgKG1ha2UtZGlyZWN0 b3J5IG5ldy1oYXJkLWxpbmstZGlyZWN0b3J5IHQpDQogICAgICA7O0NyZWF0ZSBoYXJkIGxpbmss IG5vdCByZXBsYWNpbmcgaWYgaXQgYWxyZWFkeSBleGlzdHMsIGNhdGNoaW5nIGVycm9yIGlmIGZp bGUgZG9lcyBub3QgZXhpc3QNCiAgICAgIChjb25kaXRpb24tY2FzZSBuaWwNCiAgICAgICAgICAo YWRkLW5hbWUtdG8tZmlsZSBwYXRoIG5ldy1oYXJkLWxpbmstcGF0aCBuaWwpDQogICAgICAgIChl cnJvciBuaWwpKSkpKQ0KDQoNCihkZWZ1biBvcmctZXhwb3J0LWhlYWQtLWluc2VydC1uZXh0LXBy ZXZpb3VzLWhlYWRsaW5lKGhlYWRsaW5lcy1oYXNoIGhlYWRsaW5lcy1saXN0KQ0KICAiRGVjaWRl cyB3aGF0IGlzIHRoZSBuZXh0IGFuZCB0aGUgcHJldmlvdXMgcG9zdCBhbmQgY3JlYXRlIG1hY3Jv Ig0KICAobGV0KiAoKHRlbXAtbGlzdCAoY29ucyBuaWwgaGVhZGxpbmVzLWxpc3QpKQ0KICAgICAg ICAgKGxlbiAobGVuZ3RoIGhlYWRsaW5lcy1saXN0KSkpDQogICAgKGRvdGltZXMgKGkgbGVuKQ0K ICAgICAgKGxldCogKChwcmV2aW91cyAobnRoIDAgdGVtcC1saXN0KSkNCiAgICAgICAgICAgICAo aGVhZGxpbmUtbmFtZSAobnRoIDEgdGVtcC1saXN0KSkNCiAgICAgICAgICAgIChuZXh0IChudGgg MiB0ZW1wLWxpc3QpKQ0KICAgICAgICAgICAgKGhlYWRsaW5lIChnZXRoYXNoIGhlYWRsaW5lLW5h bWUgaGVhZGxpbmVzLWhhc2ggbmlsKSkNCiAgICAgICAgICAgIChuZXctcHJvcGVydGllcw0KICAg ICAgICAgICAgIChsaXN0IChjb25zICJQUkVWSU9VUyIgKG9yIG5leHQgImluZGV4IikpDQogICAg ICAgICAgICAgICAgICAgKGNvbnMgIk5FWFQiIChvciBwcmV2aW91cyAiaW5kZXgiKSkpKQ0KICAg ICAgICAgICAgKGhlYWRsaW5lIChhcHBlbmQgaGVhZGxpbmUgbmV3LXByb3BlcnRpZXMpKSkgOzsg SW4gcmV2ZXJzZSBvcmRlciwgdG8gYWxsb3cgaGVhZGxpbmUgcHJvcGVydGllcyB0byBzaGFkb3cg dGhpcy4NCiAgICAgICAgKHB1dGhhc2ggaGVhZGxpbmUtbmFtZSBoZWFkbGluZSBoZWFkbGluZXMt aGFzaCkpDQogICAgICAgIChzZXRxIHRlbXAtbGlzdCAoY2RyIHRlbXAtbGlzdCkpKSkNCiAgaGVh ZGxpbmVzLWhhc2gpDQoNCihkZWZ1biBvcmctZXhwb3J0LWhlYWQtLWFkZC10aXRsZS1tYWNybyho ZWFkbGluZXMtaGFzaCBoZWFkbGluZXMtbGlzdCkNCiAgIkNyZWF0ZXMgdGl0bGUgbWFjcm8iDQog IChsZXQqICgodGVtcC1saXN0IChjb25zIG5pbCBoZWFkbGluZXMtbGlzdCkpDQogICAgICAgIChs ZW4gKGxlbmd0aCBoZWFkbGluZXMtbGlzdCkpKQ0KICAgIChkb3RpbWVzIChpIGxlbikNCiAgICAg IChsZXQqICgoaGVhZGxpbmUtbmFtZSAobnRoIDEgdGVtcC1saXN0KSkNCiAgICAgICAgICAgICho ZWFkbGluZSAoZ2V0aGFzaCBoZWFkbGluZS1uYW1lIGhlYWRsaW5lcy1oYXNoIG5pbCkpDQogICAg ICAgICAgICAobmV3LXByb3BlcnRpZXMNCiAgICAgICAgICAgICAobGlzdCAoY29ucyAiVElUTEUi IGhlYWRsaW5lLW5hbWUpKSkNCiAgICAgICAgICAgIChoZWFkbGluZSAoYXBwZW5kIGhlYWRsaW5l IG5ldy1wcm9wZXJ0aWVzKSkpIDs7IEluIHJldmVyc2Ugb3JkZXIsIHRvIGFsbG93IGhlYWRsaW5l IHByb3BlcnRpZXMgdG8gc2hhZG93IHRoaXMuDQogICAgICAgIChwdXRoYXNoIGhlYWRsaW5lLW5h bWUgaGVhZGxpbmUgaGVhZGxpbmVzLWhhc2gpKQ0KICAgICAgICAoc2V0cSB0ZW1wLWxpc3QgKGNk ciB0ZW1wLWxpc3QpKSkpDQogIGhlYWRsaW5lcy1oYXNoKQ0KDQoNCihkZWZ1biBvcmctZXhwb3J0 LWhlYWQtLWhlYWRsaW5lLXRvLWZpbGUoaGVhZGxpbmUtbmFtZSkNCiAgIkdlbmVyYXRlIHRoZSBm aWxlIG5hbWUgb2YgdGhlIGhlYWRsaW5lIg0KICAoY29uY2F0IChvcmctZXhwb3J0LWhlYWQtLWVz Y2FwZSBoZWFkbGluZS1uYW1lKSAiLm9yZyIpKQ0KDQoNCihkZWZ1biBvcmctZXhwb3J0LWhlYWQt LWVzY2FwZSh0ZXh0KQ0KICAod2hlbiB0ZXh0DQogICAgKGxldCogKCh0ZXh0IChyZXBsYWNlLXJl Z2V4cC1pbi1zdHJpbmcgIiAiICJfIiB0ZXh0KSkNCiAgICAgICAgICAgKHRleHQgKHJlcGxhY2Ut cmVnZXhwLWluLXN0cmluZyAiLyIgIi0iIHRleHQpKQ0KICAgICAgICAgICAodGV4dCAgKHJlcGxh Y2UtcmVnZXhwLWluLXN0cmluZyAiW15bOmFsbnVtOl0tX10iICIiIChkb3duY2FzZSB0ZXh0KSkp KQ0KICAgICAgdGV4dCkpKQ0KDQoNCjs7TmljZSBleHBvcnQgaGVhZGluZ3MgaHR0cDovL2l2YW5t YWxpc29uLmdpdGh1Yi5pby9kb3RmaWxlcy8jdXNlbXlvd25kZWZhdWx0bmFtaW5nc2NoZW1lZm9y b3JnaGVhZGluZ3MNCihkZWZ1biBpbWFsaXNvbjpvcmctZ2V0LXJhdy12YWx1ZSAoaXRlbSkNCiAg KHdoZW4gKGxpc3RwIGl0ZW0pDQogICAgKGxldCogKChwcm9wZXJ0eS1saXN0IChjYWRyIGl0ZW0p KSkNCiAgICAgICh3aGVuIHByb3BlcnR5LWxpc3QgKHBsaXN0LWdldCBwcm9wZXJ0eS1saXN0IDpy YXctdmFsdWUpKSkpKQ0KDQooZGVmdW4gaW1hbGlzb246Z2VuZXJhdGUtbmFtZSAoZGF0dW0gY2Fj aGUpDQogIChsZXQgKChyYXctdmFsdWUgKGltYWxpc29uOm9yZy1nZXQtcmF3LXZhbHVlIGRhdHVt KSkpDQogICAgKGlmIHJhdy12YWx1ZQ0KICAgICAgICAob3JnLWV4cG9ydC1oZWFkLS1lc2NhcGUg cmF3LXZhbHVlKQ0KICAgICAgOzsgVGhpcyBpcyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBm cm9tIG9yZw0KICAgICAgKGxldCAoKHR5cGUgKG9yZy1lbGVtZW50LXR5cGUgZGF0dW0pKSkNCiAg ICAgICAgKGZvcm1hdCAib3JnJXMlZCINCiAgICAgICAgICAgICAgICAoaWYgdHlwZQ0KICAgICAg ICAgICAgICAgICAgICAocmVwbGFjZS1yZWdleHAtaW4tc3RyaW5nICItIiAiIiAoc3ltYm9sLW5h bWUgdHlwZSkpDQogICAgICAgICAgICAgICAgICAgICJzZWNvbmRhcnlzdHJpbmciKQ0KICAgICAg ICAgICAgICAgIChjbC1pbmNmIChnZXRoYXNoIHR5cGUgY2FjaGUgMCkpKSkpKSkNCg0KDQo7KHVz ZS1wYWNrYWdlIG94KQ0KOyAgOmRlZmVyIHQNCjsgIDpjb25maWcNCiAgKGRlZnVuIG9yZy1leHBv cnQtZ2V0LXJlZmVyZW5jZS1jdXN0b20gKGRhdHVtIGluZm8pDQogICAgIlJldHVybiBhIHVuaXF1 ZSByZWZlcmVuY2UgZm9yIERBVFVNLCBhcyBhIHN0cmluZy4NCkRBVFVNIGlzIGVpdGhlciBhbiBl bGVtZW50IG9yIGFuIG9iamVjdC4gIElORk8gaXMgdGhlIGN1cnJlbnQNCmV4cG9ydCBzdGF0ZSwg YXMgYSBwbGlzdC4gIFJldHVybmVkIHJlZmVyZW5jZSBjb25zaXN0cyBvZg0KYWxwaGFudW1lcmlj IGNoYXJhY3RlcnMgb25seS4iDQogICAgKGxldCAoKHR5cGUgKG9yZy1lbGVtZW50LXR5cGUgZGF0 dW0pKQ0KICAgICAgICAgIChjYWNoZSAob3IgKHBsaXN0LWdldCBpbmZvIDppbnRlcm5hbC1yZWZl cmVuY2VzKQ0KICAgICAgICAgICAgICAgICAgICAgKGxldCAoKGggKG1ha2UtaGFzaC10YWJsZSA6 dGVzdCAjJ2VxKSkpDQogICAgICAgICAgICAgICAgICAgICAgIChwbGlzdC1wdXQgaW5mbyA6aW50 ZXJuYWwtcmVmZXJlbmNlcyBoKQ0KICAgICAgICAgICAgICAgICAgICAgICBoKSkpDQogICAgICAg ICAgKHJldmVyc2UtY2FjaGUgKG9yIChwbGlzdC1nZXQgaW5mbyA6dGFrZW4taW50ZXJuYWwtcmVm ZXJlbmNlcykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxldCAoKGggKG1ha2UtaGFz aC10YWJsZSA6dGVzdCAnZXF1YWwpKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo cGxpc3QtcHV0IGluZm8gOnRha2VuLWludGVybmFsLXJlZmVyZW5jZXMgaCkNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBoKSkpKQ0KICAgICAgKG9yIChnZXRoYXNoIGRhdHVtIGNhY2hl KQ0KICAgICAgICAgIChsZXQqICgobmFtZSAoaW1hbGlzb246Z2VuZXJhdGUtbmFtZSBkYXR1bSBj YWNoZSkpDQogICAgICAgICAgICAgICAgIChudW1iZXIgKCsgMSAoZ2V0aGFzaCBuYW1lIHJldmVy c2UtY2FjaGUgLTEpKSkNCiAgICAgICAgICAgICAgICAgKG5ldy1uYW1lIChmb3JtYXQgIiVzJXMi IG5hbWUgKGlmICg8IDAgbnVtYmVyKSAoZm9ybWF0ICIlcyVzIiAiLiIgbnVtYmVyKSAiIikpKSkN CiAgICAgICAgICAgIChwdXRoYXNoIG5hbWUgbnVtYmVyIHJldmVyc2UtY2FjaGUpDQogICAgICAg ICAgICAocHV0aGFzaCBkYXR1bSBuZXctbmFtZSBjYWNoZSkNCiAgICAgICAgICAgIG5ldy1uYW1l KSkpKQ0KDQoNCg0KKGRlZnVuIG9yZy1leHBvcnQtaGVhZC1vdGhlci1maWxlIChmaWxlIGRpcmVj dG9yeS1uYW1lICZvcHRpb25hbCByZWV4cG9ydCkNCiAgIk1haW4gZnVuY3Rpb24gb2YgdGhpcyBz Y3JpcHQiDQogIChmaW5kLWZpbGUgZmlsZSkNCiAgKG1ha2UtZGlyZWN0b3J5ICIuLi8uZW1hY3Mt c2F2ZXMiIHQpDQogIChsZXQgKChiYWNrdXAtZGlyZWN0b3J5LWFsaXN0IGAoKCIuIiAuICAiLi4v LmVtYWNzLXNhdmVzLyIpKSkNCiAgICAgICAgKGF1dG8tc2F2ZS1maWxlLW5hbWUtdHJhbnNmb3Jt cyBgKCgiLioiICIuLi8uZW1hY3Mtc2F2ZXMvIiB0KSkpKQ0KDQoNCg0KICAocmVxdWlyZSAnb3gp DQogIChyZXF1aXJlICdjbCkNCiAgKHJlcXVpcmUgJ3N1YnIteCkNCiAgKHJlcXVpcmUgJ29yZy1y ZWYpDQogIChvcmctbW9kZSkNCiAgKHRyYW5zaWVudC1tYXJrLW1vZGUpIDtuZWNlc3NhcnkgZm9y IHVzaW5nIG9yZy1tYXAtZW50cmllcw0KICAob3V0bGluZS1zaG93LWFsbCkNCiAgKG9yZy1leHBv cnQtaGVhZCAoY29uY2F0IGRpcmVjdG9yeS1uYW1lICIvIikgbmlsIHJlZXhwb3J0KQ0KICAoc2F2 ZS1idWZmZXIpKSkNCg0KDQoNCjs7OyBTVEFSVCB1dGlscw0KOztBZGQgdmlkZW8gbGlua3MNCihp ZiBvcmctZXhwb3J0LWhlYWQtdXNpbmctdmlkZW8tbGlua3MNCiAgICAocHJvZ24NCiAgICAgIChk ZWZ1biBvcmctZXhwb3J0LWhlYWQtZXhwb3J0LXZpZGVvIChwYXRoIGRlc2MgZm9ybWF0KQ0KICAg ICAgICAiRm9ybWF0IHZpZGVvIGxpbmtzIGZvciBleHBvcnQuIg0KICAgICAgICAoY2wtY2FzZSBm b3JtYXQNCiAgICAgICAgICAoaHRtbCAoY29uY2F0ICI8dmlkZW8gY29udHJvbHM+DQogICAgPHNv dXJjZSBzcmM9XCIicGF0aCJcIj4NCiAgICBTb3JyeSwgeW91ciBicm93c2VyIGRvZXNuJ3Qgc3Vw cG9ydCBlbWJlZGRlZCB2aWRlb3MuDQo8L3ZpZGVvPiIgKSkNCiAgICAgICAgICAobGF0ZXggKGZv cm1hdCAiXFxocmVmeyVzfXslc30iIHBhdGggKG9yIGRlc2MgcGF0aCkpKQ0KICAgICAgICAgIChv dGhlcndpc2UgcGF0aCkpKQ0KICAgICAgOyhvcmctbGluay1zZXQtcGFyYW1ldGVycyAidmlkZW8i IDpleHBvcnQgJ29yZy1leHBvcnQtaGVhZC1leHBvcnQtdmlkZW8pDQogICAgICApKQ0KDQoobGV0 ICgoZmlsZSAgKGVsdCBhcmd2IDApKQ0KICAgICAgKGRpciAgKGVsdCBhcmd2IDEpKQ0KICAgICAg KHJlZXhwb3J0ICAoZWx0IGFyZ3YgMikpKQ0KICAoaWYgKG9yIChub3QgZmlsZSkgKG5vdCBkaXIp KQ0KICAgICAgKG1lc3NhZ2UgInVzYWdlICBGSUxFIERJUiBbZXhwb3J0XSIpDQogICAgKG1lc3Nh Z2UgIkV4cG9ydGluZiAlcyB0byAlcyIgZmlsZSBkaXIpDQogICAgKG9yZy1leHBvcnQtaGVhZC1v dGhlci1maWxlIGZpbGUgZGlyIHJlZXhwb3J0KSkpDQoNCjs7SW5waXJlZCBieSBodHRwczovL2Vt YWNzLnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy81MTI1MS9vcmctbW9kZS1odG1sLWV4cG9y dC10YWJsZS1vZi1jb250ZW50cy13aXRob3V0LWgyDQo7O2Zyb20gb3gtaHRtbC5lbA0KKGRlZnVu IG9yZy1leHBvcnQtaGVhZC0tY3VzdG9tLXRvYyhkZXB0aCBpbmZvICZvcHRpb25hbCBzY29wZSkN CiAgKGxldCAoKHRvYy1lbnRyaWVzDQoJIChtYXBjYXIgKGxhbWJkYSAoaGVhZGxpbmUpDQoJCSAg IChjb25zIChvcmctaHRtbC0tZm9ybWF0LXRvYy1oZWFkbGluZSBoZWFkbGluZSBpbmZvKQ0KCQkJ IChvcmctZXhwb3J0LWdldC1yZWxhdGl2ZS1sZXZlbCBoZWFkbGluZSBpbmZvKSkpDQoJCSAob3Jn LWV4cG9ydC1jb2xsZWN0LWhlYWRsaW5lcyBpbmZvIGRlcHRoIHNjb3BlKSkpKQ0KICAgICh3aGVu IHRvYy1lbnRyaWVzDQogICAgICAobGV0ICgodG9jIChjb25jYXQgIjxuYXYgaWQ9XCJ0YWJsZS1v Zi1jb250ZW50c1wiPlxuIg0KICAgICAgICAgICAgICAgICAgIjxpbnB1dCBpZD1cInRvZ2dsZS10 b2NcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7IHZpc2liaWxpdHk6IGhpZGRlbjtcIiB0eXBlPVwi Y2hlY2tib3hcIj5cbiINCiAgICAgICAgICAgICAgICAgICI8bGFiZWwgZm9yPVwidG9nZ2xlLXRv Y1wiPlxuIDxoMj4gPGI+IFRhYmxlIG9mIENvbnRlbnRzIDwvYj4gPC9oMj5cbiA8L2xhYmVsPlxu Ig0KICAgICAgICAgICAgICAgICAgIjxkaXYgaWQ9XCJ0ZXh0LXRhYmxlLW9mLWNvbnRlbnRzXCI+ Ig0KCQkJIChvcmctaHRtbC0tdG9jLXRleHQgdG9jLWVudHJpZXMpDQoJCQkgIjwvZGl2PlxuIg0K ICAgICAgICAgICAgICAgICAgICAgICAgICI8L25hdj4gXG4iKSkpDQogICAgICAgIHRvYykpKSkN Cg0KKHNldGYgb3JnLWh0bWwtbWF0aGpheC10ZW1wbGF0ZQ0KICAgICAgIjxzY3JpcHQ+DQogTWF0 aEpheCA9IHsNCiAgbG9hZGVyOiB7DQogICAgbG9hZDogWydbdGV4XS9idXNzcHJvb2ZzJ10NCiAg fSwNCiAgdGV4OiB7DQogICAgcGFja2FnZXM6IHsnWytdJzogWydidXNzcHJvb2ZzJ119LA0KICAg IHRhZ3M6ICdhbXMnDQogIH0NCn07DQo8L3NjcmlwdD4NCjxzY3JpcHQgaWQ9XCJNYXRoSmF4LXNj cmlwdCBcIiBhc3luYw0KICBzcmM9XCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL21hdGhq YXhAMy9lczUvdGV4LW1tbC1jaHRtbC5qc1wiPg0KPC9zY3JpcHQ+IiApDQo= --b1_Qv8Ph9OBo84M3cBLuVu25aUbV7EV504DS3rSto4--