Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1b02Uv-0007cX-Kf for pgadmin-hackers@arkaria.postgresql.org; Tue, 10 May 2016 07:54:30 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1b02Uu-0007kj-Pg for pgadmin-hackers@arkaria.postgresql.org; Tue, 10 May 2016 07:54:28 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1azptR-0003J5-1O for pgadmin-hackers@postgresql.org; Mon, 09 May 2016 18:26:57 +0000 Received: from mail-vk0-x233.google.com ([2607:f8b0:400c:c05::233]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1azpt9-0007qV-05 for pgadmin-hackers@postgresql.org; Mon, 09 May 2016 18:26:55 +0000 Received: by mail-vk0-x233.google.com with SMTP id s184so76655951vkb.3 for ; Mon, 09 May 2016 11:26:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc; bh=TApvfNvHD2u3aEGVXTpgCcP9DIz7xsHv+I3jGRpUITk=; b=vhIHfafaSsFa59z+ZX54JsVJylbyke3QeCwW/L5Sx5uI8/zGQECy9Wzs4XWTdswa0e m7OXBB1WK8tOwILGbhbYI/JfcYMRtHsAxSPUiRKDU/Ux7Be4tkkr3iv1NSJMIuu0Wbmz OC/jD7t8Eee1waAhK5ZCbm3cD9Yvs3tV1/TX1x9dv0b/FuW/QKwCipr0VbiOhIlfqbe9 CflWbTSfzG1lqWNvbPhtjeDNbSX5118Vj9f6856sW7txq82pN+mEXXrnRmjRR9abkvjp LxoiCXODwrg5Gn786yrLKv2SN7yadeallwIxhav2MDjMLo+ZW8yDcv09qE+RTcLLNHs6 ymUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc; bh=TApvfNvHD2u3aEGVXTpgCcP9DIz7xsHv+I3jGRpUITk=; b=Du5jD8HWrOT+8eAl+1nfpQqpY9pB/l8XdjsPGe31zR6tZ2fkORNsKjrJ48pGC0kxJr vaaWniuYPHCCiNjJesTRlyuPFj8wpF5thLaF0HqA8gVdP/4+ddKnzlk6Oo6yA5QerzPp 5mSUDe0nVPPQxidDQzYb717/fga1UK/3vD7zJfq2gxgn3H6efdQbyn/jXzYdK3rYilya yfNzxYV5VHo+byPfa7t+X42wYg6YYKMqjDpwcBoWBtTA48VlYq1wrDvghmCc7/1jdIaw +91QDZI02CYacYzYRaWgRIV2ooKJVYUlNa5Wq6WL6P3atacgYimeXmrsBXsVu3/QIuKe vv3w== X-Gm-Message-State: AOPr4FWP/RMcmspEc9/ZXu66jHB7qxZx61jP8Cmqtc7HaOe1qfgsq/71BlfmCCr8tc3X3OMxFHgAV8vmMhUx30Kv MIME-Version: 1.0 X-Received: by 10.31.140.202 with SMTP id o193mr7673454vkd.86.1462818397503; Mon, 09 May 2016 11:26:37 -0700 (PDT) Received: by 10.31.189.70 with HTTP; Mon, 9 May 2016 11:26:37 -0700 (PDT) In-Reply-To: References: Date: Mon, 9 May 2016 23:56:37 +0530 Message-ID: Subject: Re: PATCH: Graphincal explain integrated in sql editor From: Sanket Mehta To: Ashesh Vashi Cc: pgadmin-hackers Content-Type: multipart/mixed; boundary=001a11425abaf6b25005326cf28d X-Pg-Spam-Score: -1.9 (-) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgadmin-hackers Precedence: bulk Sender: pgadmin-hackers-owner@postgresql.org --001a11425abaf6b25005326cf28d Content-Type: multipart/alternative; boundary=001a11425abaf6b24a05326cf28b --001a11425abaf6b24a05326cf28b Content-Type: text/plain; charset=UTF-8 Hi, Please ignore previous patch as there was an error in it. Error: Tooltip was not getting disappear when user moves cursor out of image. I have attached a proper patch with this mail. Please consider it for testing. Regards, Sanket Mehta Sr Software engineer Enterprisedb On Mon, May 9, 2016 at 8:49 PM, Sanket Mehta wrote: > Hi, > > PFA revised patch according to Ashesh's comments. > Please find my response inline. > > I am currently adding minimap feature in graphical explain. > I will send a new patch for the same. > > Regards, > Sanket Mehta > Sr Software engineer > Enterprisedb > > On Mon, Apr 25, 2016 at 4:36 PM, Ashesh Vashi < > ashesh.vashi@enterprisedb.com> wrote: > >> Hi Sanket, >> >> Please find the review comments. >> - Please add the missing 'explain.css'. >> > Done > >> - The application should be smart enough to handle conflict in options. >> i.e. >> Buffer is not a valid options without EXPLAIN ANALYZE. >> > Done > >> - A statement having EXPLAIN keywords with different format should at >> least render the output in the data-grid. >> i.e. EXPLAIN (FORMAT xml) SELECT * FROM xyz; >> > Done > >> - Please use the keywords used in the EXPLAIN statement in capital. >> > Done > >> - Explain should not work with empty string. >> > Done > >> - Font size in the tooltip is very small. >> > Done > >> >> > - Smoothing the zoom functionality. >> > Minimap will be added and zoom functionality will be removed. So it is > ignored. > > - Arrow marker is hardly visible. >> > Done. > >> >> >> -- >> >> Thanks & Regards, >> >> Ashesh Vashi >> EnterpriseDB INDIA: Enterprise PostgreSQL Company >> >> >> >> *http://www.linkedin.com/in/asheshvashi* >> >> >> On Mon, Apr 25, 2016 at 3:06 PM, Sanket Mehta < >> sanket.mehta@enterprisedb.com> wrote: >> >>> Hi, >>> >>> This patch includes the patch sent earlier for stand alone graphical >>> explain. >>> >>> And also "horizontal lines are not proper" bug is fixed in the same >>> which was reported by Dave in previous patch. >>> >>> Regards, >>> Sanket Mehta >>> Sr Software engineer >>> Enterprisedb >>> >>> On Thu, Apr 21, 2016 at 8:38 PM, Sanket Mehta < >>> sanket.mehta@enterprisedb.com> wrote: >>> >>>> Hi Team, >>>> >>>> PFA the first patch for graphical explain integrated in sql editor. >>>> >>>> Below are the few things which are different from previous patch which >>>> was sent for stand alone graphical explain. >>>> >>>> - Now user can select Explain/Explain Analyze with four optional >>>> properties (Verbose, costs, timing and buffers) >>>> >>>> - Initially graph will be scale (according to only its width not >>>> height) to fit to screen so no blank space will be there in case of very >>>> large graph. >>>> >>>> - Along with zoom in/out button, "zoom to original" button is also >>>> provided, by clicking on which graph will be scale to its original size >>>> (not same as initial one which is according to screen size). >>>> >>>> Please do review this patch and let me know in case you have any >>>> comments. >>>> >>>> >>>> Regards, >>>> Sanket Mehta >>>> Sr Software engineer >>>> Enterprisedb >>>> >>> >>> >> > --001a11425abaf6b24a05326cf28b Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi,

Please ignore previous patch as the= re was an error in it.

Error:
Tooltip wa= s not getting disappear when user moves cursor out of image.

=
I have attached a proper patch with this mail.
Please conside= r it for testing.

<= div>
Regards,
Sanket Meh= ta
Sr Software engineer
Enterprisedb
<= /div>
On Mon, May 9, 2016 at 8:49 PM, Sanket Mehta= <sanket.mehta@enterprisedb.com> wrote:
Hi,

PFA revis= ed patch according to Ashesh's comments.
Please find my respo= nse inline.

I am currently adding minimap feature = in graphical explain.
I will send a new patch for the same.
=

Regards,
Sanket Mehta
Sr Software engineer
Enterprisedb

On Mon, Apr 25, 2016= at 4:36 PM, Ashesh Vashi <ashesh.vashi@enterprisedb.com&g= t; wrote:
Hi Sank= et,

Please find the review comments.
- Please = add the missing 'explain.css'.
= Done=C2=A0
- The application should be smart enough to handle conflict in o= ptions.
=C2=A0 =C2=A0i.e.
=C2=A0 =C2=A0Buffer is not a = valid options without EXPLAIN ANALYZE.
= Done=C2=A0
- A statement having EXPLAIN keywords with different format shou= ld at least render the output in the data-grid.
=C2=A0 i.e. EXPLA= IN (FORMAT xml) SELECT * FROM xyz;
Done= =C2=A0
- Please use the keywords used in the EXPLAIN statement in capital.<= /div>
Done=C2=A0
- Explain should not work wi= th empty string.
Done=C2=A0
- Font size= in the tooltip is very small.
Done=C2= =A0
<= div>=C2=A0
- Smoothing the zoom functionality.
<= /span>
Minimap will be added and zoom functionality will be removed. So= it is ignored.

- Arrow marker is hardly visible.
Done.=C2=A0


--

Thanks & Regards,<= /span>

Ashesh Vashi

EnterpriseDB INDIA: Enterprise PostgreSQL Co= mpany

<= br>

<= a href=3D"http://www.linkedin.com/in/asheshvashi" target=3D"_blank">http= ://www.linkedin.com/in/asheshvashi

<= div>

On Mon, Apr 25, 2016 at 3:06 PM, Sanket Meht= a <sanket.mehta@enterprisedb.com> wrote:
Hi,

This pat= ch includes the patch sent earlier for stand alone graphical explain.
=

And also "horizontal lines are not proper" bu= g is fixed in the same which was reported by Dave in previous patch.
<= /div>

Regards,
Sanket Mehta
Sr Software engineer
Enterprisedb

On Thu, Apr 21, 2016 at 8:3= 8 PM, Sanket Mehta <sanket.mehta@enterprisedb.com> wrote:
Hi Team,
<= br>
PFA the first patch for graphical explain integrated in sql e= ditor.

Below are the few things which are differen= t from previous patch which was sent for stand alone graphical explain.

=C2=A0- =C2=A0Now user can select Explain/Explain Ana= lyze with four optional properties (Verbose, costs, timing and buffers)

=C2=A0- Initially graph will be scale (according to o= nly its width not height) to fit to screen so no blank space will be there = in case of very large graph.

- Along with zoom in/= out button, "zoom to original" button is also provided, by clicki= ng on which graph will be scale to its original size (not same as initial o= ne which is according to screen size).

Please do r= eview this patch and let me know in case you have any comments.
<= br>

Regards,
San= ket Mehta
Sr Software engineer
Enterprisedb
=




--001a11425abaf6b24a05326cf28b-- --001a11425abaf6b25005326cf28d Content-Type: text/x-patch; charset=UTF-8; name="integrated_graphical_explainV4.patch" Content-Disposition: attachment; filename="integrated_graphical_explainV4.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_io0ca6kn1 ZGlmZiAtLWdpdCBhL2xpYnJhcmllcy50eHQgYi9saWJyYXJpZXMudHh0Cmlu ZGV4IDlmY2Y3NTUuLmFkMWMwMDQgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy50 eHQKKysrIGIvbGlicmFyaWVzLnR4dApAQCAtMjcsMyArMjcsNCBAQCBiYWNr Z3JpZC1maWx0ZXIgICAgIDAxYjJiMjEgICAgIE1JVCAgICAgICAgICBodHRw czovL2dpdGh1Yi5jb20vd3l1ZW5oby9iYWNrZ3JpZAogYmFja2JvbmUucGFn aW5hdG9yICAyLjAuMyAgICAgICBNSVQgICAgICAgICAgaHR0cDovL2dpdGh1 Yi5jb20vYmFja2JvbmUtcGFnaW5hdG9yL2JhY2tib25lLnBhZ2luYXRvcgog YmFja2dyaWQtcGFnaW5hdG9yICAwMzYzMmRmICAgICBNSVQgICAgICAgICAg aHR0cHM6Ly9naXRodWIuY29tL3d5dWVuaG8vYmFja2dyaWQtcGFnaW5hdG9y CiBiYWNrZ3JpZC1zZWxlY3QtYWxsIDFhMDAwNTMgICAgIE1JVCAgICAgICAg ICBodHRwczovL2dpdGh1Yi5jb20vd3l1ZW5oby9iYWNrZ3JpZC1zZWxlY3Qt YWxsCitTbmFwLnN2ZyAgICAgICAgICAgIDAuNC4xICAgICAgIEFQQUNIRSAg ICAgICBodHRwOi8vc25hcHN2Zy5pby8KZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL21pc2MvX19pbml0X18ucHkgYi93ZWIvcGdhZG1pbi9taXNjL19faW5p dF9fLnB5CmluZGV4IGY0NjFjYmUuLjMzYzY5M2UgMTAwNjQ0Ci0tLSBhL3dl Yi9wZ2FkbWluL21pc2MvX19pbml0X18ucHkKKysrIGIvd2ViL3BnYWRtaW4v bWlzYy9fX2luaXRfXy5weQpAQCAtNiwyOCArNiw1OSBAQAogIyBUaGlzIHNv ZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2Vu Y2UKICMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KICIiIkEg Ymx1ZXByaW50IG1vZHVsZSBwcm92aWRpbmcgdXRpbGl0eSBmdW5jdGlvbnMg Zm9yIHRoZSBhcHBsaWNhdGlvbi4iIiIKIAotaW1wb3J0IGRhdGV0aW1lCi1m cm9tIGZsYXNrIGltcG9ydCBzZXNzaW9uLCBjdXJyZW50X2FwcAorZnJvbSBm bGFzayBpbXBvcnQgdXJsX2ZvciwgcmVuZGVyX3RlbXBsYXRlCiBmcm9tIHBn YWRtaW4udXRpbHMgaW1wb3J0IFBnQWRtaW5Nb2R1bGUKIGltcG9ydCBwZ2Fk bWluLnV0aWxzLmRyaXZlciBhcyBkcml2ZXIKK2ltcG9ydCBjb25maWcKIAog TU9EVUxFX05BTUUgPSAnbWlzYycKIAotIyBJbml0aWFsaXNlIHRoZSBtb2R1 bGUKLWJsdWVwcmludCA9IFBnQWRtaW5Nb2R1bGUoTU9EVUxFX05BTUUsIF9f bmFtZV9fLAotICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxfcHJlZml4 PScnKQorY2xhc3MgTWlzY01vZHVsZShQZ0FkbWluTW9kdWxlKToKIAotIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQSBzcGVjaWFsIFVSTCB1 c2VkIHRvICJwaW5nIiB0aGUgc2VydmVyCi0jIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIworICAgIGRlZiBnZXRfb3duX2phdmFzY3JpcHRzKHNlbGYp OgorICAgICAgICBzY3JpcHRzID0gW3sKKyAgICAgICAgICAgICAgICAnbmFt ZSc6ICdwZ2FkbWluLm1pc2MuZXhwbGFpbicsCisgICAgICAgICAgICAgICAg J3BhdGgnOiB1cmxfZm9yKCdtaXNjLmluZGV4JykgKyAnZXhwbGFpbi9leHBs YWluJywKKyAgICAgICAgICAgICAgICAncHJlbG9hZGVkJzogRmFsc2UKKyAg ICAgICAgICAgICAgICB9LHsKKyAgICAgICAgICAgICAgICAnbmFtZSc6ICdz bmFwLnN2ZycsCisgICAgICAgICAgICAgICAgJ3BhdGgnOiB1cmxfZm9yKAor ICAgICAgICAgICAgICAgICAgICAnbWlzYy5zdGF0aWMnLCBmaWxlbmFtZT0n ZXhwbGFpbi9qcy8nICsgKAorICAgICAgICAgICAgICAgICAgICAgICAgJ3Nu YXAuc3ZnJyBpZiAgY29uZmlnLkRFQlVHIGVsc2UgJ3NuYXAuc3ZnLW1pbicK KyAgICAgICAgICAgICAgICAgICAgICAgICkpLAorICAgICAgICAgICAgICAg ICdwcmVsb2FkZWQnOiBGYWxzZQorICAgICAgICAgICAgICAgICB9XQorICAg ICAgICByZXR1cm4gc2NyaXB0cworCisgICAgZGVmIGdldF9vd25fc3R5bGVz aGVldHMoc2VsZik6CisgICAgICAgIHN0eWxlc2hlZXRzID0gW10KKyAgICAg ICAgc3R5bGVzaGVldHMuYXBwZW5kKHVybF9mb3IoJ21pc2Muc3RhdGljJywg ZmlsZW5hbWU9J2V4cGxhaW4vY3NzL2V4cGxhaW4uY3NzJykpCisgICAgICAg IHJldHVybiBzdHlsZXNoZWV0cwogCisgIyBJbml0aWFsaXNlIHRoZSBtb2R1 bGUKK2JsdWVwcmludCA9IE1pc2NNb2R1bGUoTU9EVUxFX05BTUUsIF9fbmFt ZV9fLCBzdGF0aWNfdXJsX3BhdGg9Ii9zdGF0aWMiKQorCisgIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAjIEEgc3BlY2lhbCBVUkwgdXNlZCB0 byAicGluZyIgdGhlIHNlcnZlcgorICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCisKK0BibHVlcHJpbnQucm91dGUoIi8iKQorZGVmIGluZGV4KCk6 CisgICAgcmV0dXJuICcnCiAKIEBibHVlcHJpbnQucm91dGUoIi9waW5nIiwg bWV0aG9kcz0oJ2dldCcsICdwb3N0JykpCiBkZWYgcGluZygpOgotICAgICIi IkdlbmVyYXRlIGEgIlBJTkciIHJlc3BvbnNlIHRvIGluZGljYXRlIHRoYXQg dGhlIHNlcnZlciBpcyBhbGl2ZS4iIiIKLSAgICBkcml2ZXIucGluZygpCisg ICAgIGRyaXZlci5waW5nKCkKKworZGVmIGRlbW8oKToKKyAgICByZXR1cm4g cmVuZGVyX3RlbXBsYXRlKCdkZW1vX2V4cGxhaW4uaHRtbCcpCisKK0BibHVl cHJpbnQucm91dGUoIi9leHBsYWluL2V4cGxhaW4uanMiKQorZGVmIGV4cGxh aW5fanMoKToKKyAgICByZXR1cm4gcmVuZGVyX3RlbXBsYXRlKCJleHBsYWlu L2pzL2V4cGxhaW4uanMiKQogCi0gICAgcmV0dXJuICJQSU5HIgorQGJsdWVw cmludC5yb3V0ZSgiL3NhbXBsZSIpCitkZWYgc2FtcGxlKCk6CisgICAgcmV0 dXJuIHJlbmRlcl90ZW1wbGF0ZSgnc2FtcGxlLmh0bWwnKQpkaWZmIC0tZ2l0 IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9jc3MvZXhwbGFp bi5jc3MgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2Nzcy9l eHBsYWluLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li40OWE0YmM0Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vbWlz Yy9zdGF0aWMvZXhwbGFpbi9jc3MvZXhwbGFpbi5jc3MKQEAgLTAsMCArMSw1 NiBAQAorLnBnLWV4cGxhaW4tem9vbS1hcmVhIHsKKyAgICBwb3NpdGlvbjog YWJzb2x1dGU7CisgICAgdG9wOiA1cHg7CisgICAgbGVmdDogNXB4OworICAg IG9wYWNpdHk6IDAuNTsKKyAgICBjdXJzb3I6IHBvaW50ZXI7Cit9CisKKy5w Zy1leHBsYWluLXpvb20tYnRuIHsKKyAgICB0b3A6IDVweDsKKyAgICBtaW4t d2lkdGg6IDI1cHg7CisgICAgY3Vyc29yOiBwb2ludGVyOworICAgIGJvcmRl cjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OworfQorCisucGctZXhwbGFpbi16 b29tLWFyZWE6aG92ZXIgeworICAgb3BhY2l0eTogMTsKK30KKworLmV4cGxh aW4tdG9vbHRpcCB7CisgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CisgIHRleHQt YWxpZ246IGxlZnQ7CisgIHdoaXRlLXNwYWNlOiBub3dyYXA7CisgIGxpbmUt aGVpZ2h0OiAxMHB4ICFpbXBvcnRhbnQ7CisgIHBhZGRpbmc6IDJweCAhaW1w b3J0YW50OworICBmb250LXNpemU6IHNtYWxsOworfQorCit0ZC5leHBsYWlu LXRvb2x0aXAtdmFsIHsKKyAgZGlzcGxheTogdGFibGUtY2VsbDsKKyAgdGV4 dC1hbGlnbjogbGVmdDsKKyAgd2hpdGUtc3BhY2U6IHByZS13cmFwOworICBm b250LXNpemU6IHNtYWxsZXI7Cit9CisKKy5wZ2FkbWluLWV4cGxhaW4tdG9v bHRpcCB7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgcGFkZGluZzo1cHg7 CisgIGJvcmRlcjogMXB4IHNvbGlkIHdoaXRlOworICBvcGFjaXR5OjA7Cisg IGNvbG9yOiBjb3Juc2lsazsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzAxMDEy NTsKK30KKworLnBnYWRtaW4tdG9vbHRpcC10YWJsZSB7CisgIGJvcmRlci1j b2xsYXBzZTogY29sbGFwc2U7CisgIGJvcmRlci1zcGFjaW5nOiAxcHg7Cisg IHRvcDogYXV0bzsKKyAgbGVmdDogYXV0bzsKK30KKworLnBnYWRtaW4tZXhw bGFpbi1jb250YWluZXIgeworICBoZWlnaHQ6IDEwMCU7CisgIHdpZHRoOiAx MDAlOworICBvdmVyZmxvdzogYXV0bzsKK30KXCBObyBuZXdsaW5lIGF0IGVu ZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRp Yy9leHBsYWluL2ltZy9leF9hZ2dyZWdhdGUucG5nIGIvd2ViL3BnYWRtaW4v bWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfYWdncmVnYXRlLnBuZwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwLi42YmZlNzVkOTA5ZjUwOTJjNGQzYmE4OTc4 Yzc1ZmJjNTdkN2Y2MDZkCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCA1NzQK emNtVi1FMD5TLT5QKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcxXkBz Njl6VGUmMDAwMDRiMyNjfTJuWXhXCnpkPGJOUzAwMDA5YTdiQm0wMDBmdzAw MGZ3MFlXSTdjbU16WjhGV1FoYlc/OTtiYSFFTFdkTF9+Y1A/cGVZamF+Xgp6 YUFodVVhJVk/RkpRQEgxMGxQXj1LfiFqZz9VX3cjISFRcz1wTnJSNzZuY2BK QWlFeWZ5UFV1JEY/NWxnITlgdEUKenJWZG9yakk2TyMqQj1OMVE0fkdUazd1 T0RJbVokN1FoRWNxYmJ7MlQhK15Bc05sbnZxen0wdiFPWkNwVmNnK3UpCnpT bDAzb0gteWxjR3khKUZqMDl1PVVOPiRtTUlYKyZIfGI8YWpQIWd6cHtmPE4y dDM4ZTEofU9ZeihYKV5aOVNEbQp6YUwkUGImO2NYeDg1dHdjM0QrOX1ZWXdX dFgobjYxdGdMQVpWaEEmQTBaRG94YG19Zl9vJjtMcD0zXnxUWkFtND8KekI4 RC11dzJIayY3N3hMfkdEK0g4WWh7TCstRH5vblJVNjROJG1De3o5WmBaPDQk JXV5RG4odFV1QkJxaVRFPkAqCnpuZTY+WURWVklUXnxZfHUmMiUrWUt4UTRI IVpLTjgrVWswa3dKS1BqVyY8KD5AJFBqQWU0UkNPblNuJU5yMCg9UAp6WWl8 ZkowNFZfaG5MJGNIMEszJiU7c3pfVj1CZ1FEKWNtJCkydnZoczZAKl9pc2Ry QmZjOGtEe3lnPTdna3RJVEYKeitQR0Z1MiEwT2VMV2d1PjVMRnAzRDl4b3Vy TCFiUXUlYT93ZHtyUnFGSXZpKyt7PVEhJj5hYVYlS1Rhe2RTOzJjCnokNW8z SWhFT1R5VDM3eDYxcEszMC1KWDRLYkFTN1BrPDU7Ul9TUnVzPmpiR3lDckVB ajAhI1g/UFd1ck95OHIrSApNMDcqcW9NNk48JGY+VlUtJF5aWlcKCmxpdGVy YWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21p c2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2FwcGVuZC5wbmcgYi93ZWIvcGdh ZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9hcHBlbmQucG5nCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAxN2EyMDY4YjczNWYxM2NiODlhM2Jj YjI4MzJlNTg4MGQxN2RmNTYKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDEx NjIKemNtVjs1MWE8cH5QKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcw e3tSM0RkQmo3MDAwNGlQKXQtczAwMDFXCnpycEdwaiFFZXAoTGNRcm56VWco Jj98SVBnUmxAMHApYk03PT59dHZFWl80WUkrM3xiTT9TaiRtcnJ6PzcpYjVo agp6QDJ9elcxKmhSbiFSWl5XPDZGaCtWI24oXng4K2QyPVdFQzRhK2FhTmsy ZHUxJG5mbTlAOU1TaD45cTNnI3FIJj4Kej9jfWlSPEZON1MhfD4/Qj4pKTtH LW1MMX50TUJCJD4qaztEPiRkNk9uJnt0fD8maD1TK21gMG9sPGVXSTxJPDFm CnooMmVRWnNwe2pMPS1ycyope14xT2l8Tl4/PGtnWW4ofiNvTWpPZj48QDk0 QWI7az9KSGJAMWxFPWhVUjspMSZPJgp6eCF9ciktbz1JOSEtVTx6ZzY3ZW8t XmhwTSYhT2hncVRJaUw8aiRZKD1EX0NDcXdDcVc8anRQciUlMD1ScDQre0QK eitQWnkpc2JvQCg4S3VpKXNMKkp1KW9pWlhha0FpY3dkSHp9bUM8SHYoYVgm N3l1UiRkendPUz5eM2w9cSFOVHN0CnojUDhHOF5WUVkjJGpJPT8kPz9qfEAh OHQtLXJvMXUqWSlBeV9xQElBcj5XK3NzXmBEST95YXhzdWQoVUgjcVk8Kwp6 QDNwcTt4NDclTHgkTS1gXnZCMldpSSg+ezAwMDAxYlclPUowNl55MFcmaSpI MzI7YlJhe3ZHVU5Ce3I7TkJ+QzMKellkIXp+MHpwWWNLfnpZYD9VM3RKNT5Y aCY/U3pHZXFKJExMRD1mR08lU0IqZWsoKD5ZTylpMlczdk9rI0NTWWk0Cnpu UmZTSVorOW1mdXlaSUpYWmxkamhqLT9rZDRLMFEmb2VVZVUjZX4oTVp9M2km YHBoSV5jSzNVKW9SRGsqcXl0Jgp6YVdwPW0qSDVDIURUQ28yIVhnQEAoS3cy eE8oeFRRXnVUTzM+KEluUXR5WWh3V0BkQi1He3xOOCZzYHA9ZTxuXkcKejA8 I3YyVyVnb1BEYXI7bWB5QjBuZDhkblUwfldEKEpSWFpXeStIWVYzeDJRJWY8 WUZYcC1gOWBqNkA8PDhDaDdnCnoxMDlTO294cF57dkdeZHc4O0x8SEBHa31l R19jVmBrXnljaDdVU3tBan0jUU90ZlpqVDZwV24wOXEwS0o3SV9TYwp6aCFn TVBeOyYxYT1KKHFqOzl5emozYjs4Z29gT181b3lwPXFDYTNUJVUhK0pSTHZv NShFWFBBU3pnajViay1sUCsKek8wbkA9dTlTdyVZTjFkakEoeEJnT1FuMVUp KFZ3TTZfNDJiX0JwdkYqNkNXOFFeZUkyblQ7JUQlaGhWXys4VDR2CnpFSVNW PzQ4eXIwI3EoK1R7azNBYjJEUXopZk9pMnA4Y24kNTZpYUd+ZTB+RnBsfWUp dV49N2p2OzFNPkZ4S3dQcAp6KHI5ZGdLdF9Ib3clVGFPI3stYWNoVTRVeF9f VUl1U1hOVGhsQHY4VzVVI0RVdDd9VyNCNW93Jk56WWFQTWtKbS0KemArMyNC NXYxSH5LTnFuWihNOC1BZHQ3PXF2UU9XdTtfcDF2cVpjQV5CWXRoemw4NGV1 TmZCfTQ1TllTdD9ydXdKCnpjbFAjUE9XcG0wSDsyKzt0S0J9NWo9SjZCdy1P ZTRjWElPblJPKzBhZWZUSlNgdXllVmo/X0JzYmxURmxeWmtTNAp6emxqVz08 cUQxY2xsbChSLXtiMmc7JCg2RjAwMVIpTU9idVhWUlU2V1Z7JkMtYlklY0NG ZmxNS0YpfVNNRjtwQHoKekl5NXNuRyZDelBIOTlhYklHSDZMMDAwMGJiVlhR bldNT249SSZFKWNYPVpyPEdCN2JQRWlnR1BGZm1qekdkZVVoCmNJeHNkWEZm fT9iRnZeIXp0TjtLMjA3KnFvTTZOPCRnMSNBYlVqUDZBCgpsaXRlcmFsIDAK SGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0 YXRpYy9leHBsYWluL2ltZy9leF9ibXBfYW5kLnBuZyBiL3dlYi9wZ2FkbWlu L21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2JtcF9hbmQucG5nCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAuLjY0ZDU4NjlkY2ZjZjlkOTRkMDMxZmEwNjhj ZmY5M2VhOTI5MTgwYjIKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDEwMDYK emNtVjxLMH09ZCpQKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tS M0RkQmo3MDAwNClQKXQtc21EMmtGCnowMDNyZChSNmZsYiMtLWljNk43bmNZ MW55SGkqR3tkd1lDKmUxM2pAZlBqRjRmYFdzQ2dNQF5IaGxodVZoPV99ZQp6 aTthenFqKmdDR21DJW9ta0MyZCVrJiUmJmo9eiRVbEVJSFFtNmVyYGxIR2Nx c2hPRlhvU2RBVm99UWJXI0dqdl4KenJseksrcj5EODZhO1RgTlBRSz41cyZs S1d0R2xkcHlSQ011dCp1KFk9ZFB9PHlzJnEjdWRsdGFkOEA0R3pPczZXCnp4 IWJhYHZTaHtSeDN7O213Q1p1bz9BcDcyZGR9P0l5QH1rdWZWe296eXVJeish R2VSKT9aZDt2LU5KKnchUzJTIQp6Iyo1Vk0tXlBhRCRjS3tFQDVhYVA7TDNe MCVGMn0zQFoteSM8SUpBcSY3UmBXanBXWHMlKzJ4NSZocThacTJ8JHwKeik2 PihZLXR5KHZsamhXPCl6I0pLKXVwWjleVkhQeT0rfnlgKlFlXih3Jn5pYT5E c0I8K1M9KmRzX05YVD4pV3s4CnorfXojVy1Sc2AwP0FeS0Utcm5yc3Q/Yn5n P2NjbEotdUNSYHVpQGUwP0JsVEY7Xk9iKnp2Ym9TQGFEa3E9ZlVVYQp6PWpy TGBAJDFDdT5ndz9EQGJVNVNeNzhXWV5ZaXVmXzRmQW1gMXR0d2BUNzAqe3J+ Xn1DOSYlTjAwMDAxYlclPUoKejA2XnkwVyZpKkgzMjtiUmF7dkdmNjk1MVU2 OUU5NG9FUUtBMHE7cGZLfnpZYD9VWSRsNkcwUyhiOH0tRGkza2NQCnorT28p XmgkNGJ3bHRvcXZMP0REe01qZl9uQnFEfk8yP0F+eW1peER6byo5YSpHbX0p TUM/N1p2e2NgSzhHdns+UQp6dkRxJGtvfm85KHM/UUYod0whTjRrKjUyR0px d2F4QFdKRXRpVXV+UnJ9ZVNoRD8mVk9jYUsqcGohVnVnYj1zZyMKemZZeyVA ZSlEZUtlcztpcXJxayZ5Q1BEX0Qhci1DXk5rNDxHV01SbHhfejBFPT1geFZE RV9mbkZqPE9KQz5Qd3VKCnpRIyE9OWxGODRUQkJhKk5SalZPaTlMUDFJQV5u VzItQEBmS3cqMUw8OzhvcGFHYWlwYGhfbD4rTWxCMUc2U0c5Uwp6PSt1JDtC WH00VUJrJlJvPE89PkVgaCsoTzFaRSo+PDxmQER2e0hzRUk8b3UjP25TSGBg fFpOKFNVUlYtJXI+SHQKek5Yb28xcVArJmhZZGdsPjxrSntzdE1IQmtyem9v eUtzSl5OZ19jcWxTPSNZQWpwM3pPM0BiUGludUgwKHZAeFBHCnotdGh+KFQh bjJNUyg8PXgjbmdwZyVQJSM+ZWY5cG90NkE5bWNyTjVIMygteGkkP1J7cEFl UWZRQiY4X0lzJWN8SAp6RzV2e1FEYyhKeHsySFRnTylpSjQ7ci10Vj57UFI/ JUNlbFcqY1VuYF5+MjsqN3okYyRyTGtieiFRPiUkNiliRiMKemdETWhXMV5y PFghOVhCa3Y2VXk0KkgpZigzSGJlQ15FWS1IQCVLWFNqUUxpSTVNTjt+R2RZ bypTOzlWX0ZJPVI/CmNGN3pNaUEwP0BxSWp1PjlXJmkqSDA3KnFvTTZOPCRm PHFmTE84QGA+CgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQg YS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9ibXBf aGVhcC5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2lt Zy9leF9ibXBfaGVhcC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjY1 N2Q4YzM5MzI4YmZjODA3NTFjNjBkYjlkM2FiNDM0MWMwZGUzNQpHSVQgYmlu YXJ5IHBhdGNoCmxpdGVyYWwgMTEwNgp6Y21WLVkxZy1tdFApPGg7M0t8TGsw MDBlMU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcwMDA0aVApdC1zMDAwMDAK ejAwM3JkKE5je1dIaSpHb2xfRllAV25gOCkzOH5AfHRLd3ZwJn5jKFVXfHE7 N2o9I1o9SGghVVNrQ05TYm9+YlJnCno8ZVF3dEk9SlBHdTVefk5IYlRBV041 QVAjelVFODY9fXk3dlRFWFg7eW0rZ3U9dn5DPmlNaVdrI3BxKGo+WT5ENQp6 WXNjdGwkbjJ1VlY2KEw5WnAtWCglanxFPj94eElUY0ZwWGkhUV5fKj9BeUpH eXVJdnUoZUghTj9TIz9wemBeYz4Keik5fGQ7Wkh2X0lrPTU+ISkkZ3ZfYW1M NSpsLVRmPiszflhBY0NGVXclKzJ3ait3dGV4RTlseFAmQ2NAYitiWm5hCnpE KD40VkA3eVohKyQhP2lEKWloY3ghZGZ3PVkwMHZEeWByMWBRMGh7LTZfPTZe UkQzWWBgIykxLVlOZHhEWmJ3QQp6eCRBJHgtfG9XVD96YEBTP2MtcVk8NnAo JEA5XllieXpxcWI8WGBqVFUmckl7JG04KHk8ek12V1UmYGF+XzJwbXAKejx6 TSphVSg0azItcm5+Mz0zbn5lVShNejZ7TmBXJj0zbWswXjMmK15eNkgxdz5H UmEtXnpgZTgqNkg7Mj54Y08zCnpodTctJGBzfDFPPzF1akFoVC1xYG1FY1FR MDAwMDFiVyU9SjA2XnkwVyZpKkgzMjtiUmF7dkdmNjk1MVU2OUU5NAp6b0VR S0EwJjdWYEt+ellgP1VkX04oP0FyKE5mUStAdUJac1VRUipBKDNrN151aUFf eGx3Yjc8WFgkVDJXbDQ2encKejNaPG9tZjFUWmdnZH1ZO0dSYD1EO0MkSDM/ Qj0mOyZiQGNHcntfZmZNMTIlaVUmc0MoWXV+cHpON1JSQnVPX316Cno5U0hT Zz08NDtDKVNIcH1rM0xkZyN3STN6eThscCp1aWQ9K3doSj1VK2s1cn5IR0ZB YzszK2pXSmFUVzZgVXt0Xgp6RUVsYlAtfDhJMktFSG5kXj5eJigtdm11MyY8 RTdZPCNHK3dMe1k0UngrRjw7OzM2OzE2UEpIQDVQRS1+I3o9VzsKemlZV3Q7 Vk53IzFTZUJKTjI9UzJjQS1sVWEhWjNebyM4aiNhNV9IK3dAZ1AhKVdpMkdf TDRzS3YjRzlmbiVXfWctCnpgZVJ0OSR5KSpCSWwlSSpLOT8oR29PRkB4WlFJ NFpVeV4wQ0RsMyh5QyhDVygwdlY1IWpfQSF6OGgtfX5tVCokNgp6YTIlKWw1 SlhALTcjJHNkX2xlJXZwY2oheW1PI1BmYlVMa28zZGQjQzJwNURuRTsyXkdS ZTtLNkc4emNhZilKZD0KelBTSD4qQ2BENyV2fVR9VVhVS0NkdmNDUSY3NCFB UU1zUDJiMkQpRVdrJkM4UFRNXndxTTckfXFZJVpycSUtR3RSCnpnKHp1VVNU JSFAWUElPDk1aVlCJTdHbjI4JjFBRHhwITw9SUVYJklsOyFWK2w1VmomX1kt I0QoR3EkakI9ekBGRQp6KU9GbzxYQF8/STZoX0VeMV9fPXBMVDc5b0JRckM8 PUkwbFdNRGokemg/dWNic2YkYSY+KFlAMEF5eVYkaGZhI04KelZIb1gqOEpu OXNfS2V3eGIzY1J6Yn1gTXB1PG9PV1orYVIoZWdOazRjP2NrMUsqM0V4RDRK bjJNc0xqfmxlMWcyCnpoNDJzPDF3bFlhdkZKa3JFflI5JFdWYFVaMFNyTTkl cGVsVGxFNT5EOSVXeU9KPTJAVHUyX0deR2FnWn42YTlaVwpZME16LXtCNiNg Q3J+bSl9MDcqcW9NNk48JGYpe3tKR3luaHEKCmxpdGVyYWwgMApIY21WP2Qw MDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4 cGxhaW4vaW1nL2V4X2JtcF9pbmRleC5wbmcgYi93ZWIvcGdhZG1pbi9taXNj L3N0YXRpYy9leHBsYWluL2ltZy9leF9ibXBfaW5kZXgucG5nCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAuLjIzYjk3MzNiNTY3OTI1MzNlNGRiMjVjYTk4OTBh MGEwMTQwYzZmZjkKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDExNzIKemNt VjtGMVooPz1QKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0Rk Qmo3MDAwNEBQKXQtczAwMHtSCnowMDNyZChOY3tXSGkqR29sX0ZZQFduYDgp NDV7TERsYV4kYSZ+YyhVV3xxOzdqPSNaPUhoIVVTa0NOU2JvfmJSZwp6PGVR d3RJPUpQUHV7TW1aYmp6WXhMJWlyb3p2KWlDPTEjJXNURVhYO3ltK2d1PXZ+ Qz5pTWlXayNwcShqPlk+RDUKellzY3RsJG4ydVZWNihMOVpwLVgoJWp8RT4/ eHhJVGNGcFhpIVF8ViNldE9SQStyNWR+ekpSPkY/MGVEZy1OQXhgCnooZH5y TT8lbChLemBeYz4pOXxkO1pRakwmaWA0R2wkQV4qQz8lPkZYbEdYMzcrSHVD bUA4SFVibC1UZyQlIS0lVQp6QCM0O208SUpBMjtDOExuPkNEYVg8PDZrdihU P1paRTZ2WEc9Rnk+fS1TWHRyaz49QiteNHUhdClURnVGPzY+RTkKenQ+NSQx KWJwPDNeWEEhPT0rfnpJLVlNeldyQHIzcHgkQSVEKz9ULUw/JjtkNyFyPD1j LWs5cyF4OVolZz9jLXFZCno8NnAoJEA5TiNHeXpxcWM8WGBGR285eH1YJEsm d0c8TTdKa0BhKjhOJWpFSWktdUMoQ1UoTXo2P0JsVGk9M25tTwp6ejN0Xygo ZFk4Kz1DYWYxXlk3KXFeNkgxdz5HUmEtXncjUDBAYU10cj45cDdDXzNgUCR7 X0tZRz9aKUJuX2c+TW8KemJwUVlXMGQhSk1Rdmc4YiprJTkjMDEwcU5TI3Rt WTNsamhVM2xqa1ZudyVIXzAwTjlqTF90KFkkTCpCc1F4WmBhCnpoaDI2bnZo Ql52TzFvTG8tSm1GdjV8TjVYQkF8X25SeEI4RDdYY01SN0ZAdiMweyskUVZL MV9hP0JxMWxedWhQVAp6Kl9wSFoleHw3XmV6T0F1Qy1ZQmNrVSVyb3Z3eD92 RkkmWXwjRHswRXJvUnpBMj1RY09ibzM/aFg4aXU2a0hwdT4Kej42c3RXSF5r JVhIfUFlWjB2WFkyd0tzXmRPVCl1WWlPSTM/ZG8jcGVyMVd6Kyt1NyZXaX5L NlModExqWHs+dn1UCno7a1NCeylOPkUwcl88Pj12PlN+XjhgPjwod24wSyhv WDBNST8/VDlmMH0+JT11aCpNfk1uMGMhMEdtaWV0NmQyOAp6NVIpUE1gd0R+ d0hYNG5WUlpAMCRXa0AyeUxOeXUrYnM8VUA1Zk5ORTdSXz9HeWVBPDs4WkBX elRNRmJGcHlBaSYKenszPVZpaXRCSSorMVpoJFJJNSNCN0tfRWJFfD1UYjF6 ZX1ZI1VaITBOYzZtZGQ5ayEkUVN8d0lTc0I2K1hkWDtWCnpPdWhSPVpmPXN4 K344aH0pMzFnP3EyZHZVSmNVRVZsbmomdyNOJGFwZS17cW5UezQtdlV7VEFh UVo+YmlveCNzWgp6JGl+Sz5vUzV1aGNtKFJYVCZAbSMjY1p8KXdOeHh0UU1y OHEkcHIjfG9MfmBpSTJeUH0kSlc7K3F5JCtIa0ojPEIKek8zSz1yZ2ZOaXUl K0FJalZ6PTlaRGppIzA/STVqRXNubWo2M3xVbFlubDdreFktUSF4OWF+eHdR VyZOTWx9TG9ICnpLcGAwUDd5OTEqRFRNSTFBSTJFWSFwMnp5RWZ6RD93X3tU WG5WPGk7akVBdT4xR0xSJTRUOWZuUnZffEAjcDdLbQp6d0FFQHNoezs1JGJj e25mRSh+KHZFZWFHeEJ+PzFNeE9uVzJAcmFuPnI+RnVYLUVNY1gtfGNmaHpQ VU57XjgrUnYKej1KYV9CeDZ4cDVfVWpuQXoySV4hWT9DNUZuTUBgKHhEOWVk a3JIPmc7KWZ9ZSQhUDNCNmZTenlGfT51JVRPXiVNCm1yfUQmeGRWYj83Q3c0 T2ItfjB3Jmd5WCRDUntqP04wMDAwPE1OVU1uTFNUWWRlflZCNgoKbGl0ZXJh bCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlz Yy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfYm1wX29yLnBuZyBiL3dlYi9wZ2Fk bWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2JtcF9vci5wbmcKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMC4uYzIyZmMzMWVlZTMyZTUzYWJmNjM0Mjc4 ZjlkNTc3NTExODFmMTVjMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgNjg1 CnpjbVY7ZTAjZn5uUCk8aDszS3xMazAwMGUxTkpMVHEwMDElbzAwMSV3MHt7 UjNEZEJqNzAwMDMwUCl0LXMwMDAwMAp6MDAzQjZTWX5Ve0hpKkd3bUMlaWp6 cmx8LWtDTlNib35mRmVud3ktJnh1PGVZelVJNUNiR3hpYHlSQ0x3IVJOZk4K emNmR05CdEV9azB2VS1XUitob1ApdiRYMkV5MUhAOD9BcDcyZGR9P0l5QH1r dWZWe296eXVJeishR2VSKT9jS3RJCnp6YF5jfCliOEtMaFRxN0NsR1gzViRN NHxFaUltdno8SUE0byUlMEBVcDVvQXI8aiRZVyZHRjY3XjNsPUo8PE96Iwp6 KFcwaV9eNXhjKD1HM0k7KXVwWjleVkhQeT0rfnlgKlFlXih3Jn5pYT5Ec0Mz K15YdV9zX1dhaD4peCNGLU1RQEcKenQ/Yn5nP2NjbEotdUNSYHVrN1FuQDhy TWE8bUIrPyEwX2s2QCQxQ3c/Q2tJRkBBVU5hfE5zQXF4QUZHPzAwMDRXCnpR Y2hDPEs8M3pIMDAwMDlhN2JCbTAwMFhVMDAwWFUwUldudTd5dGtQTUBkOU1S N2w2fClOTjBLVT0jKm1qJG8rMAp6WEd2O1NSd3h3YDYlPl5TS0B4Pjh6NVZ+ K2xDVzQwXkk+JGhZPD0rbCNDQ1M9P0EhX3JHdFhacCZ4T2ZQND1UfjEKekxM dURnJlZoSyNRM2g5e0IrJio4UzZmfmVCcE1MfnAoYiZedm42QFUkMFQybSNi ezhaNWNkNCZffk1FRTdPfi05CnpmKj1fNEdfdG58YCokJlVFMHU7WjNBVWlA V3Nfa3BjTnZwc3hDU0o3RVctdyFCeUooZSp6K0RuRypWIzA2c0Fkbwp6NTdS KHg4OTl6S3B4PzNwaV99fTNIQ1ZPajFoIz1yOzAkY3NtaXJaMHZUJShKWXxI WHotazVLaVRfMU9nYz4tKyUKeipJMmc9RWQjZ1pyajx0MFohcnZgS2w4QD14 fnt2cF9lRFIxcmlMVTwqaExhO0xSNEkxdUJOSlBjNFAwPT5NTzE+CnpeMyV0 PXMtcEJWZkJuJEpQck9veGRNRVFnTWtYVGk1NEk0YmxTJmV8a2ZiTmVheGIk bkdVPClZXk47Y2dATzRxaQpURjg4dW8wMDAwME5rdlhYdTBtamZMYkd3WQoK bGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRt aW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfYnJvYWRjYXN0X21vdGlv bi5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9l eF9icm9hZGNhc3RfbW90aW9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw Li5lOTlmNTc0Nzg4NDJmNjFjZjA1ODI0MzNiNjU5ZDM3ZjBjNTMyZDVjCkdJ VCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAzMzQKemNtZUFTQE4/KG9sSHlgdVZC cSFpYTB2cF5NaipfQDM/ITJTNk9AMXlYTWooTEUwNntQWElIbiFlNjQkY0VY SS1gCnp6aEROM1hFKU0tOUxAcmQkWUxQdjBtZzE4dithUDQ4YyFGOzVSTE8m Q3RDOXpQfmRTK0phTW59Y0w1OFYmZXduSAp6blMjMW83bmlKPl4+KlRYKmBR emdNZEQ3UE96UGFUbyt3PDl1d3BMTCkxRiVXIyFJcWRob01TeGh3cH4wQGNm MDIKemhrTWptUk9mWmNgRVopd2BTO3xpPCplQFFyOGdRXkA5UjExfDZSYzh8 QVE5SVJMalNtVU9GZVd0TSklJVpvelBoCnpScGwkJiEqZz9oP29jZ3BqVk1W O0VKP0xXRT1tUGIzYFBjcTJEKmt1eCgwP0pNZ34/VSMjU2FLKzZKYXAxX2w7 MApyUnBuNEw8bVJWanJkMntUNys4V2VmSyohPG1fYW4wbmpYM2FzRFopTCl6 NCp9USRpQn1ANDBCIQoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhf Y3RlX3NjYW4ucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFp bi9pbWcvZXhfY3RlX3NjYW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu LjdlMWQ3NzkzNzJmN2ZkMjEyZDIwOTZlNzcwMWIwZjFhZjA1YTUyOTcKR0lU IGJpbmFyeSBwYXRjaApsaXRlcmFsIDE5NTUKemNtVjtVMlZENHhQKTxoOzNL fExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3MDAwOTNQKXQtczAw MDFxCnp4IVgyfiFFZXAoTEF+aWt6VWcoJj98SVBnUU5ycH0hcz1KVT5Wd25w aVBpOUMkbjB2Iz5+Nn5KbC1UaV4rVk9uTwp6P1NSbmpnVkY3ei1TTWQyQHta SyprPTU+Iyo2KiszXjh9fmkyJm0jbnp2KWZFPUArZno5azFoQyNwYDBuPm9j fEcKeklKZjBKeGFEIW4/MEMtWFBgPjk/en5APVA9WjRZa1lzY3RzJG14flc/ XnZwPHJOUUs4bWVEckJKPWdUZiVKOD96CnpAVjNiQnckJF47I196VnBAM3p3 TyRrT3UxIXRTLWY/elBiSSRJa0pgelU7S1U/NmtiPnYmYHx2O3FVamo+en1w aQp6cDJ6UkR2Z3dfJT43QiN4d1hOdSF0TEwxbT1iT0xudzVIfm9yUkpLWDwo aihldilBaE53Q2JMLT5ZY0NZb3YtTWUKenNwcCVjPChpYDluWXJ3PCo2SC1i QDN5WSFvVCVvVHJ7PGZ4PzZhV2NuWVpoKyhlbFRAP1h9R0MjPigpO3hhK2dY CnpANVBEUmpud0olIXx0YGQ/WD1ERCRJMC07dyg3RkE+YXcpenZjPlBqKTlD WlZAM3lEcm53O2E5biZYKDY7K0x9Tgp6dkNgLUJwNSZPQzsrTDE9bSQyIXZ1 aiFuUHNEKThvUEM3YXxSOTtkemF5dmFsSiNLPyt0bHo0WjtnK3hJdStabDYK emUwK1NeKngzTDd8Q1d9UF43OFZkcW9hZUdnc3x6YiFSXkQmPUpHZHxKYTJE ciVGND1OVlBSVClUc0ZFciZnSnJBCnpZaFpxdmQjbCFAZXZmLU5nRkxMdnNh OVRBSUMocTY/IT5MPXUmbjU/ITBwNCM8PyheNmRZO0llUWU5RygjaDgpYwp6 bTV8PytrS2RLNT1kYTc7QHU9c1VVMT9mem0ySCZJamRoSzNveVZHdS07fUI1 dWdjQF9rK0YtVS1sfms9bCNBWSEKenJ7PUg3PE03TXkjKSpsRTw+bHFQPzgz KzZASHRGNklhTkRxb05QRmFKYiVaNiNeVWRAPjlOR18jSUVTRHNeX3IxCno/ OENoNSE9fm8wclJKYHI9Qn5UISFvfWg1dkZXanI7RmdIcGxaTUBzaDFgOyg8 Km1jdT91cCkkaDFgPmIrPilaQAp6dC18MiV3KEdLIztnK1EzdCVCVD1xMiNU PztPPyZKdSk2RVF4YSt+ZC18bnBFdSZkez16VTslTj1CfVhSdClKd3IKenco N3lUK3c2ZWJrJCYyZHA1dnw1PkdRdGM/WEF9N2pvKzF3LTt7bVlrO3Zvaz03 QnlhMDAwMDFiVyU9SjA2XnkwCnpXJmkqSDBiKXg+TTI+PDV2dV4rWjAxMHFO UyN0bVkwN3c3OzA3dzh2JCFrNlUwMFlmUUxfdChZJEwtVy1SOHdhZAp6MlhN VTMrUGJVT3MmKCZ+MkxlUWNMWF5ZXjIxUVhJcTdXQm9zfCs+OXQ9RmhRTld8 ZDRqVShXU0wwZDswaTMyd1UKeiVhRE1lcTU+KzQzX30hKXpWYChAJHZ4cU49 WGlTaCFSTiE5RlpyRSt7P0MxTFpFVXtKZT85ZEdZVShfIzV1JCNCCnpoN0I3 TGpocDw/XmhlXlNYM2JsKUJ3RHBAXkspQ0dVSGV9O3s3UDZRNExXeDApUzM5 TE9WX1U1aTAoYWxfVWNYYQp6PkQjYVcwSFhjQ2ZyQURVLXphNFd7Pl5vczdU K0RwVTxeZWNVfjZZKlhBOERXcm85Nj1JST52N1VedHVZR3krQ0MKenlLcUs8 MSEwVUgmN2c+I3RFKCMkbXxRTkcyZHB1Q3sjYW5VeHNNWm9pXnVwMG8te0lY cThZTDBQViNhRDdKdT4tCnpIYU5NRF5MN1QjMVJxfV5qWkI/ZE9TdHlIbzgm Y3kxJTZZZXhqQktyZCU4YWQwKF5XJEdwckxecnV+LXxHdWNrRgp6UHp4NmhY RXd8VTQ0ZV5VbUNPWmQ+TzN2VXltPmdxZnlaLTFEU3A0UlhUa2A5O0UodypE IUB9WDJObmN9Z29lPmwKejdCMGt1PVM4KHhHXzl0XlZoKHV2aWNwSlNAZTt7 VzhkPGdzNkd5YUlLZVNqa2NMNnkyZHlFZU5wLThrbTcoIVBfCnpSPDUjNlNi WTkhSG1xNG9sSXhALUhTMEd9cip4eDRDSlUjTE9gOStvTXp4U2VNOVNybjNP T35LcW9gQXtXdEIySwp6bm50IzZ7aiN4Yit2UGgqR0Q8PGwkUm8tMVFFfi1J PyVaVyVXNG18YjZ6VzsqKiYkYyMtTTJzWDAzcnR1VkluPU8KelFwTHM3UWpR JEtndHtLPEJJT1pCZVN+bGZrPmlLKDR+c2RXS0ItQmRreUVFSTVxT3tXe31a TUJiPj9qQnhmKCpICnojQSE2PXdLUV8hTE4lR2IqeUNiRWIoZyhuPGtJPWVJ ejVlQ3hxYGBqNGt6SE1eeEFjX3Y2JEt9Y3c8X3ZLOU5SbAp6KyVVVWl1e1RO YilAX2lJeDk7NDxrSF9sOT8lbCZGdnB0MUAzbV87WUckez1KUikhfT5Md3Jo dF9DRVpSbndGa0gKek9MXzFCNkxkWDlfPEJlKEE+M2U0JDNZNWlrKCFuTEZv I0JSYjE/fU5FZjxHQ2w0UFkhM0NVYDtDSXolUS1KP2BVCnpmQmYpQzkqc1BH aXBldnZTZXlpekdUSE5GUEBVQUVYUTYrVG02Wm5oUFlNYk9ZMj9LVk9vQnBf YUVxNiErN15rWgp6I1ZhVnZEPWFMY2s9TClrYGQ/WDFBWiUlLUAtUmZKLVcx MmZUZGxxJTVpO15+QGB8OVN3NnZfO0pPI2JALW8ydzwKemV6PTdTczs+dnRB e315WWkmQ1NwIWVtWXU/PnwmbGV0NkhZMHApWHBLP1RKaHxIWF5WJUZjKHBm JnliSGx2UHd6CnpuSmlPc0Q9VHhVbHdeWmlUP2A0QWItRUhyJVlLWCZUV0I7 SSVmTTdzV2w1MHZeb2U+WUx2Jm5tTjw3QHhtIXhMRQp6dEN8Kk5zNzFOU1dH YzdaU2p9dHZZY30/TXskS01NQEowN0g4bG57NTAwMDBiYlZYUW5XTU9uPUkl OUhXVlJVNXgKekdCN2JQRWlwMUpGZm1qekZnaTNkSXk1dlpGZn0/YkZnVGVk OXNtRlVDM0hudGJZeCs0V2pid2RXTkJ1MzA1VUshCnBGZkF9U0VpZkB1R0JZ fGZHJihSZ0Q9Oy1XRmZodU9SamRGMjAwMm92UERITGtWMWliP0M1WnE0Cgps aXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1p bi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9kZWxldGUucG5nIGIvd2Vi L3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfZGVsZXRlLnBu ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYTA1MWNkNWQwMWVlMmYzYWMx Nzc3OWIzNjI5OTlkODJhOTI4NWI1CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJh bCAxMTI5CnpjbVYtdjFlV2BXUCk8aDszS3xMazAwMGUxTkpMVHEwMDElbzAw MSV3MHt7UjNEZEJqNzAwMDNeUCl0LXNLTERePgp6VFUrUXMybGg9OEhpKkk1 YjBeTXlFRDVSTigxOTs8bVo2ZjhsRUlIUSpOO2d1d2RIbEQkTGYkLUxBPmI4 cUZDYWUKelgtZEg5JEV0UFhxaSRXcT5TTTwwWXNjdGwkbjAqKj5+K29UK1Bp Kyt5P0ApaWlRSytgK2BvVygoZUs+QmZgcmxUCnotTlM9fik5fktKZ3g8eDQt b31RRSliOEtNaHVfR0VrPTU/dCQlKjAyaWtJMig8SUE0biZXeipDcDUpRCo7 P1J4Ywp6Jll6JiRAI0U1dTw8T3p6KH4jIVRxMnwkfDxrWFNvKHhUK21sSUdL Kzw8XnR0KVRIT3RyTE4lZj1HbTAhKlFWJiMKenJ7PnowPkRaXn4qe0o4LW0r OUs2PmU7c0crcDZvQHg5SHhQPmZOZ0IrXz5yQm4oTi1JP0FeTlMtPnZONHk2 b1ZzCno+ZkBhNC1ARU1MdUk9RXY+ZzFqNTs7LSVEeXpKdyE/ZDdyVzxpNzNa dmhMPXlAOCFWbz1EX2Rodit3RChAYVYkdQp6PkI4e3J3KDt4NF42a2EqP1op JSkkWXkoYy1+YSNzMGQhSk1Rdmc4YiprJTkjMDEwcU5TI3RtWTNsamhVM2xq a1YKem53JUhfMDBPbTFMX3QoWSRMKjhiZGxedl8jZjhiRy1QTEwlbmhNY35x I2BtUTJxQkQ3KUZvbVBnYzYyTVFNZGc2CnprM0RuRkZlWE50aGtqckNrb35a cHtPMFZuX00qfGUlcy1nN2xzSFJPNFdZfmlnSkZsLStjY1JEc0RuPnReQ0Ar QAp6eDQoWipvZ2NaflVueTBAdSllLS1wZi1gM3NFPk5SLWMwUXZlNGplbi1a czBiengydjB5el4zM0wqUVhKOTZuNjcKei18dnJNRUN8OH5NbSowQ2ZjeXIp SUZBaFA/YHdUWWA/dDVaSnJJaHlUcFJkZ0dGfUJqT253PVMzWiNhUzhiT0t6 CnoyKVNJMmhoe1E5TVpRbGEtMy1WYHpsTUt8d08xQDZxQERZZzxlP3NxI1ZR aCMkciE1PmtpRnBqWEQpdFY3dEh8LQp6cytDZSNAP3RmOXBAJWMoSiYzYn5i JDN5dj9ePGkwV2Q/Tk9ZPmF6P0Zvc2RQJjV2TUV1VTVPejx2Nlowe2poPW8K em9tUSpXWk9BVH5xS25IQ2E2IUw2RllpQ2NOUWg3QGwzPGZ7c0t6Y1lJTjx6 I1orPFEmJXdUZzwxUDlDR1VASTVGCnpBT3s3bm0oR0dsJHJ4RmZkMEJNUCQh RGBJbV9Jc0wjaU40ZSY0eElDTk5tYT0zZlZ6ZFh4MGFrYn1KPXhpJXViKgp6 Pz81WV5QQmxRO01AVk8wdVZ8JEdsYGQlSEI3Smh+ViZQR1QwYWclRmtIPTls aDtxVDh6V3tsZnJxaHIqYn56cy0KejUtM0ptbDlVOVNyQjY7JGtaP01rajU+ biQ9WUMybXhAYUw2c1lDLUJFVz95bDV6P15fYjR9WT9tWURucyN9enRqCnpf JlRmUE12VmxeLWEkRFUzRSF3TWhXQjU/OWF0cXpLclJqJGgmYiVfa1VEfmtw K0gjWXAoNkBteVdPP34hSTNIdQp6PUZzNT9MJiRFazE9TnZGSGspb0t5cCR1 NkBISmVBMClndSU2NUdOfWQkLXMoKW1LYG4xaUF2ekpCRXB0O1UqTGMKenA7 clB2LTxBNGVxIT5nUTJYPGktVUhCeyglYjdab2FFWmtyOHBYbE5oKHtlXihH e1lTTShpUkl1LVBtPUk5cmF+CnZGO1RRWChSbWtGOSpeaGhpTnRvRl5SSWxG fDdtXiRIMCNGdXM/a0ZVMDAwMDBOa3ZYWHUwbWpmaHdXNjMKCmxpdGVyYWwg MApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mv c3RhdGljL2V4cGxhaW4vaW1nL2V4X2ZvcmVpZ25fc2Nhbi5wbmcgYi93ZWIv cGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9mb3JlaWduX3Nj YW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFjYmE0OWM0ZmJmZDli ODcxNDQ0YzllOGQ1MjhkZWRhM2EzN2RkYTQKR0lUIGJpbmFyeSBwYXRjaAps aXRlcmFsIDE2MDcKemNtVi1OMkR0ZiZQKTxoOzNLfExrMDAwZTFOSkxUcTAw MSVvMDAxJXcwe3tSM0RkQmo3MDAwOG5QKXQtc0cqTUo5CnpHY19fakp1NSYm RyhKQnlLUl8tK00/WFZGSXo+ZjBNbipxTU9FRkdTR0VoPU5PLUBLbVBCbF9o TmxpfmdQZnRacQp6UClrb3lNcDA1dFFkQiF3VFQ1MH5QRlkkfFRVJFkyVk5o SUxMU1NOMVUwcWFRVWBKJFVSJCpkU1ZxO2lpV0p6YWcKelMhODhlV29CRHVY SXk3IVZyT1l5WD0rYnhhOT9VYE5ebyprWkU8RjZaRCh0NFZRcD94YWRjdkNa JSVZfVZ7ZFJ8CnphQipkRWEkc3xFV14hfEZhZGNDOGR2MD1kWG1vWE5iOVFO VWIhJkhiYmE7RHJkM0pBbWRufH4tVjFJJmtkd3k3aAp6aWhYfjRiJUI5KmdN KGcqa2EmY0lkV01GM2hsaE5LaDxKO05ldXwyT2lIcmNLPDlDamQwSUI3R2pF I2Joa0JFKHMKejBJdVZTaioqMHJrcFFzZWdeYGtkbCRlSztseD4jSmtDVD4o bTZuUUBteDdze2dQTlhmcHs5aEpwTkVeOGorJmNTCnpzO2lRb3BOeWNORn0z QktvfH14THM1SDBkamlqa0l4YXBScnRlS3shcHJ4cHFyPjlFMT1TO29tb354 YCl6VWlvewp6ciRFQiZURU9OfSF0SH4meTw1VE90KkArSCFzeEVCdCsyQUxw U0hWO3ghR1VFPmFueDBWYU0hWiRuSXB4QDNwdEkKellzbHpxJD8ydU4hRU1V d1pwLVZjenJMdXojYzw4LXFyPTg+JmhEa2I9NSl+VWVhYFRPKENvcCh6bFBF NiFvPE9jCnooKGJeOyRnSXJJaXEhRE0kSGFAKEB5NXUta2sjejImKGc9cSMq eDxUI21kYysqWTI+PClSZnJvdih3Zz0rVlFtMQp6KlJ8RXlzQExueig5RXto KzBXNj14N1hVeCgkQmNxK3JybkByYF88PClYfUtrQHcoZ0kpNzg/dCt2fmdC LUBNKTYKenRLc3kkLXI+YUQ7bDx0SnpUV1FHK1NiM3tANWJOYnp+SiU2O04t I0teMnApbCNeVVlDO14pV1g/I2tvbiRtSCtPCno8bTFXWkBYaDd3LXtJY1M8 PmItazw8YUh3KCZ5JlY9Sk1nPjtNM15tKTkzV3M9allWdV8xb3lfPG1UaG0+ R3NefAp6PmdESTstUmtTcz4tWE80P0JERnw7Typ8PT8oZ2RDPkVIMTdAQTI7 T15ZSFpkXll7N29gdXpGKXxOSCpgYH5xaEgKelBYR1ZfMGQhSk1Rdmc4Yipr JTkjMDEwcU5TI3RtWTNsamhVM2xqa1ZudyVIXzAwUmR9TF90KFkkTCpCYVBa TG9UCnojJk8/SjZyJHA7RERIfjhxRVhabDY8NUgtNFlsSUZpeU1mX2J5cEhg bSU1O1dPSSZLRGcpfikrR2A1M0doWSpIUgp6WElPYFhTU1d9bkllJnEoKVk9 KV4yTkdqXjs1P2pweHhmM31ANjAqSiVjfnsrYnpIPndAUjsycCp6TVQzeE1i e1oKekxjLVpjKndlKHM+dTwyUF93Sns+JDNDUHpmQjZZPmleTjdvTSNmXyYq RzVITSFWPm8jSmFodn5qejR1ZTF4cmd4Cnp5ODBVWE9EZW1DSCsjJkl2cjJf UiQkZH5BJWQmTXN1MF4lWlkpNXZobTlgQFpxTnVNfEBDYStNU1hqaThCPFkk Tgp6V0YtZ19Fa21sU0p0S3FfKEkhKDlxXmp5U0xQYDthQVA4RE9FYmJBUml4 Uz1pUDFoaEJPPl5xKmthV2F7JDFGdUUKekQrUUhXN1pwM2hGcXtmYSg+NyRJ Q2B6djRLLWdYM25eeUUrZTBYKHFjOzZ7Z0ZZRkIqZGg8WndxfnFJPD9Ua15B CnpHTmh0SE0weGBrazMrY0JARmFCVTdDMTMmSUtZX0VtdGxPV0MhYHl8aEMl YTMwbjhvdTRBI3RPRURIJCppMEpqRAp6djh6Z3NsJE1IS2B+ZGNoNEdSRFdV JF99USZ2XndzJm99JXkqQktyVGNfO1QkVHI1X3M0Z2F1PUUmd3l7T29YNF8K ej5tY35zbkplRkMhPWxNZURrZFU9TntJSkplfUUlUEF8UyZ6MnRHcGFKamVw U1RWJU9Scktte3MoZ1BxRyhFfGFOCnpGTChqN01zKWxOKDRqaigrNE5NTSsp SDdoZkdgNjkpKzFWfCpuXjt6Rn1fRDMhQG99IT9CQXgtNWkrRXBLdCQlVwp6 WTgheSk5cW4zb1lDbUQpSFFoM3dldUtCSjhzLXowbndqWVZzcDA7JDEraVJx SFlZKmc0QS0xRSFNSGA1KW5vYmoKelA4QXpzRGF6VVc8PW5pSzJxUGRAJDsl VEVlbDkzUD5HZ1VOayRPRT5CfnIoYEFUKmtFVCF4czw0I2E0bl9gXkorCnoo e1R1cURJbj9UbylDK3tVPzYzUE1uZlJuR3MwNCZUTmhSdyRFYDlYSEBEZHA2 QV9uMVFJMU40YHgpVldQRFEjZAp6eFckKjklYFpPfTdsZ3pHdTIhcHpOSFdH YlQ1UyREJTZ8fkN1b3wzNClIcEohUjhtQiNGbCk3RFFIOEcoREhjfWEKenhM PDhUTW1mU1VUKkR8R1VnUiRMckRyaTNqazQ5fVNtVnY5U1dFbjBAZTQ7aD1u SFZoVEFjc0AwMDJvdlBESExrCkZWMW0qKk9OUmdlCgpsaXRlcmFsIDAKSGNt Vj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRp Yy9leHBsYWluL2ltZy9leF9nYXRoZXJfbW90aW9uLnBuZyBiL3dlYi9wZ2Fk bWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2dhdGhlcl9tb3Rpb24u cG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA2YjcyODI2ODYyMDk4OTY2 NDEyYTllZDkzMjBlZDQ1MTRmZTNlNWEKR0lUIGJpbmFyeSBwYXRjaApsaXRl cmFsIDIxOAp6Y21lQVNATj8ob2xIeWB1VkJxIWlhMHZwXk1qKkB4QnBBJEd3 I29vMHJqajdQVTxRVj0kITlHPHlkLWFUN1k0Pz0KelVCWEwlSmtBMS0kWUxQ djBtZzE4dithTmtLMkkwTjVRKXBsMkA8VCRvRDIrJTZCcm5lJmM1dmxsdTwy bGpWTVY7CnpFSj9MV0U9bVBiM2BQY3EyRCprdXgoMD9KTWd+P1UjI1NhSys2 SmFwMV9sOzBScG40TDxtUlZqcmQye1Q3KzhXZQpiZksqITxtX2FuMG5qWDNh c0RaKUwpejQqfVEkaUJ9YVY5Y0kKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoK ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4v aW1nL2V4X2dyb3VwLnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4 cGxhaW4vaW1nL2V4X2dyb3VwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw Li44ZDVkZTMxYmMxMjlhOWFiY2Y0YTczZTE5YTQ4NzM5MTM5ZjY2MjcxCkdJ VCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMjI4CnpjbVY7LTFUKmBJUCk8aDsz S3xMazAwMGUxTkpMVHEwMDElbzAwMSV3MHt7UjNEZEJqNzAwMDRpUCl0LXMw MDAxVwp6cnBHcGohRVZhek03YDtEJmhDNTk/b1l0elJsQDBwKWJNNz0/M1VU X2czO30hLXR2eXI/dm1FO3VpXjZycntOb30Kejw2RmgrViNuKF54OC1aYz0o RUE1ZjJDVmVqVHdmaVdPQTBGZ3QxMVUjOXFPVkh1VWh3QGEodG0+OXo5aCNx SCY+Cno/Y31pUjxGTjdTIXw+P0I/QksySS1tTDF+dE1CQiRiRUchdz1BWUB7 biZ7cWA/Jmg9UipfR3Rla21Bc2U+RHNDNAp6PERCSHhsSHRzWT5EaX5eJld6 flNybFFBU0A5NEFiO2s+NUlXeWgqQEBhRGtoKVRITHFxd0wrZWNCd2ped1RJ eCEKemlRZEo5LW91MzUhR2grfHEySWBkPDxGcTMpQHxJcmZhSn1kaUBzM3I9 RF9ST3d6Y0paPElKQXAlYnZVTWdXOWAmCnpkJGRFOSVVcEchT2xPIWxqKWtq Y1l0aFdqQHd+cTV6UTY2eSYrXmdIXjF7T0khXlE4QClicktWXnZLQlkkO3Q3 YAp6JWtrT1RfMUBuMSpWcHlvO3JHMH4/NUM7YnNIKjNgendXQG8/eWF4c3Vk KFVII3FZPCtAM3BxO3g0NyVMeCRNaSMKekB5XmNqemBeZCspYnoqNEBSRjYk eUdMb1gwMDAwMWJXJT1KMDZeeTBXJmkqSDMyO2JSYXt2R1VOQntyO05CfkMz CnpZZCF6fjApdDZKS356WWA/VVpSKCtDVVZCKCpkYE5RZlhhNl5+eiF9MU95 XnNGXlYtdlE2UG5pQjZnV3B1fm48Swp6KjRsbWo+enhUcE5yWkZFPXtZXzk7 QyM0ejtvOzhuPF8hI1VlZzVeaWYjflR2SjBad293T1ZebloobzFeMDI7VnkK enU/KFdZVVlsKFE0R3I3dndAXnBLSXg7ZTFNU1R2MzwySmY4SXkhMVdKcHtM KjtqdUFgOXNUdXxAZD1pN0dJekIqCnpjYnhgZWElemZZVkF8eiFPKmcwOD9l PjdqSkh6PjRtaUckKiY+QDVma31jcXhvMTFlcnJhS2YwTjVDdEpBYGt4Zwp6 WGpJWjg+e1FUNkszWWdEPHxhcnU+OytEWSROZUJncWx1JnVWVk8yME12K0sz RU9ObGQ8TVJTWTN5RmttS287dnIKeiVWTFJJYU1aI3Q1UXspa21Rd35+U3dy cHRKelp4ejtTNWVYbl9Kd3w7RTY9TUtKZjg4elhBYkNOflIjQ0RDdCR1Cno1 ekNxVGIoZEh5dl92ZEthZlZwVFE7UzMqRH0lRE9wMzgmb1N7WkUjTHhUPEpn SDJ8JDFxSVVVeHR5eG9sNmxiQgp6QCtWbG41dipKJnRmZThKJU4wdkhlUGB4 ai1OaDV9JmRfSmdgIXxTMVFuTkBDaSZhJUVsP3tuKW5vWD5VZlJFJCYKelN5 Jk1TREY3KjFSPjwkP15KKkUmckxCcl8lWFNeJTtgTXFnWGNsWGxNVWh4K1Jq YnZDNSF1bD8pfkg4WXV4aGJiCnpFa1dmbkdWeTQ4aGNAfGd1JSNtWGF0Q0Ni Rnl3QnFBeElLUU5tZXVxbTBFMDNpKmx1NmJReW9sdmd7TSlEVzwzRQp6R2B3 UHElY1BuMys0SjRxSnpVJTBmQUpDQDkzSChvIz5hY0wrNmd7Nkk1PlRjNGRv QmdjT1Nud0o5flNNLSg2aDEKenxBMFMhYHV5Yzl7JnhPLXpsTU1PSlVsdXpC M2ZmaUFrRmUkOWNoKlM+TXBKRnxJKDdfSXk7ciRMfUpiSW5AVmhSCnokN0Vz QEc1Y0ktI2tTMm9lZnF+d3dwPX4yPitgPnotKHVlK0oybyQ7TEkzfiZDM0hu dGJZeCs0V2piU1dXbnB3Pgp6MDVVSyFGZkIxTUVpZkB1R0I3JGNHZGVVaEQ9 Oy1XRmZjZm9CXzAzKDAzfiFxU2FmN3piWShoaVopOW1eYz5wcG4KcUYpJUdL SVZ+X1RSNUNMPEcmRExlSFkrZVNJeHNOR21zUDkpMDAwMDxNTlVNbkxTVFhA YEdvKWcKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dl Yi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2hhc2gucG5n IGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaGFz aC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWYzNWM3NjUzOGMzYTQx OTIwYTdiOTNiOTRiZGY5NzQ0M2RmN2FhNwpHSVQgYmluYXJ5IHBhdGNoCmxp dGVyYWwgMTE2OQp6Y21WO0MxYUE5QFApPGg7M0t8TGswMDBlMU5KTFRxMDAx JW8wMDEldzB7e1IzRGRCajcwMDA0aVApdC1zMDAwMW4KenNib0AoOEZpK3xI aSpIWSM5blhCP29ZdyNWI2V4cyZoNGgmQDxGfW4zOH5eTnYqYnk8PTg0bnBZ PXE1Yll0aFdqCnpAeGEwRSM+ZWw/JmhwO2dfTV52UHl1SXpLdG13MH0+ZVNU cHJwI3FWenYrSV8/eTFwZmlgRFJ2KllJLTg/MG5BYwp6cHhnMHwpYjVrakAy fXdWT1RYIT8pQF4wVD5xRVFkUGA+QUUkTFgleGFndnFNYSthYTg7QzhgfUh1 VWt5QGEocz0KejxhelYlJE01S34/JmgtYj4le0VpdTxZVGs/QksyTj1mVWdk cDEwX0lAOURNWi1JKFJvbEh9OG4+Zk5sbT9TYmFuCnptRihpTDxJI0BrK15X M3JneVBTUT5Eczk0O0h+ZkYhMHpGX3BHI3peN1o9Qj5iJTJmfmIjXjRSUSRG S2tXOTM2Ygp6LTliVVE+d3U0WklQY2BZPSt+I2ApfWAjO3lNfGpBKD5fMW8k Y1cjQGhVVjB5dS0kWFg1RTBCZ0ptSmlXLW8lOUYKeih4U2MmNCNoaD07S18q SCEtVTx6ZzY3ZW8ldzFqUil+NCo7eCNyUUw8PE96KStxZHhPIXNnU1k8aiRi Iyp8eXVnCnpmNy1mejxJSkFpemslZTxwNXgxJi1pJEBLMDAwMDFiVyU9SjA2 XnkwVyZpKkgzMjtiUmF7dkdVTkJ7cjtOQn5DMwp6WWQhen4wIVQ/akt+ellg P1VVPFU1PHdXbkBwVjhFUXQ1XmpOO2ZTa1ohWl50eFplYT4jM2NpWE1HXnVl NWxiKmAKekJMQkwoQm5DQE1fe2x6YUtGbCpTYH4wM1c9Z2gxfmJmPz9aNz5v Jmk4ei1FYDJNRG4rTG5JVEUoa1VgUGg9bXk8CnpsaSE9MztVT0hzR0I8TiE0 PF9nYHRLYy10LXYmVnNrd3xnPiFOVyg3NiQ2Tkoycn5FTj5EO3F4PGY9ZGRE aj9sQwp6emZ2QVRCKG5LPURPbXRESlNRKCtOPypNdVE7VW1CWl4jZnRDWVFf S2tfcGhqSjBme017YjdPM09mRH1rXiYkT1AKelNRbEJ4V2t1TCF3YlImWWNl Jk8lYDVKK0JBbC1ScTZtfihhUE4mbk43VzgwMSEtbW1sTFgtS1UjZnJqTlAt bkIqCnpiZl5QNklNQz5IST9aVHl4IWooQUJNJEp3Mjg7TjduYG0qbntlZS1D RWlqX2w9V3wpbTxNIyhDOUc9QyZyZUZ+Xgp6I2lrYD4jcTl0Xmc/b2A1biR1 MnE4OX5IUHV1SFFEe1RWcSRldmRyfTlnVzVJcVYlPGshUXBeN2R8e0MmWlN7 QnAKejJARXEjYT0rSndqLWBPRnhFRlJJXl9CTWNnS1BAc0FmMytpQk9xMlBs YDU1NXQ8a0p9VGk1SURfUEJRb3ZlX0lSCnoyPEd6KUNldyQ5Zys2NU91UCYr Vl9hbUNoPVppX3E5M0djV2BqQldZY2w2Xj03TChiYFckQTImblYpUW0pQUM4 Pgp6WT1wKSoye3AjUW10VTVVWEIhZ34jZXtKYFEhU2swUyo9Izk1NC0pNCtz ezReRHFsUUVWKWVMR3MkaXxyWHIyIzQKenU4SiprI2c8RjBSdCt5MiYxUVFU KHB6ayQpb1JyNnl2YXYrU3JRYihyS2xGbG9mSD4hdGhkfGt6QVVgSUdTYmA5 CnpYcE1+YFVZN3B8eHBAe3xWfFRpQlQ+Pik0cHpjUWhCY31pVzAzfiFxU2Fm N3piWShoWWElRXczV2RKZlRGKSVHTAp6R0ElR01SNUNDK0cmNEZoRyVHTVFJ eHNMZW5JIz9vMDAxUilNT2J1WFZSVTZXWkVzfDBXX2JXSUZmbE1LRmdZelMK akY7cEAkSXk1dm9GZzdiTkg5OWFiJTltQkYwMDAwME5rdlhYdTBtamZyKn45 VwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3Bn YWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaGFzaF9hbnRpX2pv aW4ucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcv ZXhfaGFzaF9hbnRpX2pvaW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu LmEyYTRlOTM2OWZhNzhjNmZhMTliZjVjNzgxNGY4YTU4NmFlZDU1NjUKR0lU IGJpbmFyeSBwYXRjaApsaXRlcmFsIDE1NzEKemNtVis7MkhnM0hQKTxoOzNL fExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3MDAwOG5QKXQtczAw MDEpCnp5bShUTDhIdV51SGkqSFkjOW5YQj9vR2h5VmFEcnImRnJTJEA8Nj1s NjA3MVl2KmJ2Oz04NG5wYmNAd3lZdGhXagp6QHhhMEUjPmVsPyZocDtnX01e dlB5dUl3SnRtdzB9PmIkK30pWVM4KCVWYiFiJVJ7fkNONUFQeXp2Kzk/P31Y RnYKenNMKkphKzN9IztAcktnd2pNVk9zKSRYcH5eOH1+aTM4fkBfc15VPD4+ UmlSXnRKUTNFJkZxMkQ/T3d5Xld5Uj1nCnokTE4mU0AyPVckcktzZTNvfmcz bmM0Q1U3IUgraWRAeVlQKXhBZ0dIXllGO0U8JENrJiNgNWdOP2RHeFY8Z28x SAp6dTxgMXs+Kms7OTwofXtCdyhzZSt4YW9mRz1Da2VQdkZGO0I9R20zeipw JSR5dUpHKSg+ZzFqMzxES3Y3d2VSVikKenk2dTdHKk9UU2VsSSEyQz5mQGEw OysqZDF2JUsoeDxrZ1luKH4jPWp0R3xYWnd9Z1BPVU91dSk2U1FHSiNFXnQ9 CnpYMU1lMyRNNUt+XjZrYSg+QkkybiFScDxyPWdfSVFVPm5JejhyTS1HO1oh Rz1SOHNabTtpcHE8c1RVWDl5QGBPMQp6QzRZRDx5PDB9UVkkRD1SREY2VGUr Tk8lYFdAaExfTUMzdzQtJDZwKlZxQDsrdmJwUGtsNl5WdjxpRnxMc19FTFAK ej5EajJpWUJhLWVMKzMrOGkoRDlLY15RUlQ3U2xkSTttd1FUJVpsTDJpTCot KXZgaUc/TFBEYShVIT0pbXJfRS1uCnooclReT1o/TjVTdipMS1I9WHxeR2dV JThYI31FK0FKVXI+eXJ7S3dtLV5obylYRHsxOEshalFyI1Nhal40aTNnVQp6 Skx1UEAtXllnRCNmOG19VGlqdGAmcGtjTEpVcW9hSklxfk9AYVYkcTtIflQ2 dCY0aiU/Y2NsUilUSExxcX5fQTIKejw7dFZBazhxMXhhLW1OLXV0Klo4b1hQ TyEhME96cD8mSDRnO2tAVjhyUlVZOD9CMlRVLU1Rd2BxVUYoezw8RnQoCnor UEM3KmpwRUxYO21uS2EqciheI3JyKmJoLW99UkIjRChWM3ExP2NNK2BvWF56 SlRQO3BYYiExLW91MzUhaF90dAp6ZlpNJSkrcXsweyY3UzdkcXVzLVUtTkoo MHo9R1BsZWRFaVg9aGRhPCg0cG5lcHpHUFQ8SUpBdyp0V0hxZXFiO3AKekl7 Kkx4MGQhSk1Rdmc4YiprJTkjMDBDbDRNP2AtfXpqNVVOMDAwU2FOTGgwTDAw Mms7MDAyaztNIypiRjAwMDdYCnpOa2w8Wk5YS0pmN3pHMGc3P35KeCR9ektt MDVnVVRSQHsxNip3e0haeG1ZbEN1O1NMayFwKzBXJEIoODNxeXdtagp6RytU ZlUhKWMzdkFQNU1jM3AzJWdnTW1SJU5MV052T2J8bmhJMzZ0JGwyWHojYTRw YVBXTVB0SlZ1NyZiRm9HMEsKejNrI2RQZn0jP09HTHM2RUR2TyVCaE5jIyNY VkpCQVl3UElodkZJfXlGZDRFSzhKbjF6VkZvRmhVKk5XdzxGPl5ECno5QVh3 UXR8aSN6bU1sekdPZV8kI0hBYXg0Kjx4ZEJYSj08YDxHfCN8PFllUlE7X0J2 WmdBdEA/ZXpDRmhAYnZWdQp6QG4tVTJeMG8ydjQrc3BoS347YzdPUiM1MVhx WmhuUXZ7UXJqYXkpM1I1VzJOVUxpNUQ7V2x3aEBsMCt1S35We2IKek55I2F4 WTNVaTZjPkkjKDlpRStJO3wkYzJZbSpuOWx3VkwtUjlzU0FSOWM0NlFlRlc5 PHVHb2dqZzN0ZVEqe01VCnpPR09Ra1pCdHVSUzY1JE9TSlomZVFxa0RkK3xw VkJ4NVgqMGpqNWZmMUV7NjdxTyteSnI/PEVjcV5HektObFg2KAp6Q1VucHEh OERPKygmVVFuRE8wQ1NGUjJJVkRWYyQhV2hOOHJFYi1hMGI1IU9VJXJsPkZ3 WkwocVBrWTI3cm9+SF4KelJ4RiNnZTh0TSpkWE9GelRVTT5jWDNPZHxZdThu KlUkSjUxclhyQTZRMm54YiVocWslNXF7YVJhfklHcnlUTzhjCnpfVV93JWZh bmtkMGRSPWY5NldVUiRsKmdyQHg7cnFxfmwjRFkpLUJ9Yl40NlcqPm1TRlRx Szt2aiRnV2I8KkxvSwp6Pm87IWh4NEN1dSZmUjsyNkFVT3wqVzI5Ul9+Nzkh bit1Tn5LWTI9NjNuKmFrK2RPO3o7XmhVS2R5aypJZFd9VTMKem5xTip7ZCRT a2xpKDdCc1U5QEBzO2x0flhuMGBVYW02aE83TE1BXzxEcXo0X2peUDc+Nyl+ ODVUMWZZYzF4QTMzCnpmJm01cVAyJWdtRkluT0gwMDAwYmJWWFFuV01Pbj1J JTlIV1ZSVTV4R0I3YlBFaXAxSkZmbWp6RmdpM2RJeTV2Wgp6RmZ9P2JGZ1Rl ZDlzbUZVQzNIbnRiWXgrNFdqYndkV05CdTMwNVVLIUZmQX1TRWlmQHVHQll8 ZkcmKFJnRD07LVcKVkZmaHVPUmpkRjIwMDJvdlBESExrVjFrZ3hRKHBpOAoK bGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRt aW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaGFzaF9zZW1pX2pvaW4u cG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhf aGFzaF9zZW1pX2pvaW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAw NTFmOTk2NzgzODczYTRhMjdkYjRiOTcxMTM1ZTk1Y2FjOGQ3NDQKR0lUIGJp bmFyeSBwYXRjaApsaXRlcmFsIDE0NTIKemNtWStDU3h9UCk2b24mPGlsQzl3 RFdZfWoxRVc9PVZHJnNeTXlNYz5WRV9kSVdzZjIlT09RPlZQXjNhPiNlemJp CnpRJFdmcE4tO29XMl5iJj1rXmwqV0I/SmlCX3dgVHlLVlk/T3ZgP0ttPWJu M0s/KVBAZWYmd3E+dmZPNzBnVFokQgp6YH1xVyQoKCQ3JCV1VnhhVVVvNElX PnlufjQpcnlpd1M/XjhwWkFzeHRoa2hwSnxrVUVuTzB2UyUzPipzJXhQc1MK ejJrPDd5WSYhV1RkVzMhaWFUIXljUU5EbWxvfUhUMzVsN1hPM0M7OGp6fk1s RE92RG1+bTdPbzdKLXU/bXV4ZnJACnpwVzRaKzh8U3ZyNT1nNzYqSjd4aGFk VEt8OUYtWm4xej9XPSNFVT9oYSlZa2c3P1ZPfDg4amg+N0IhbTxZbGhCKwp6 K2loSUtPRm1lPXRnQi1LXntjPzM3JGkhZEV9a0M4KllecVpsWDdEaEpGVFQl bXxOZUd7PE5NdVFIU0daJk5CIV4Kejt2JWszSSFLbX1SPTV+K2xVbjhMJT8p OW5EMGtCKypufFd8e1c0P3t6fWYoTEJKc3ZMN3ZjK3lWKTJHcntaMWluCnpG b051VVMlSn44dFhFSXopaWt8fDJJLWQ4SU4tdjlldEZyaiMoYHdBT3wyNGRH X1ZJJU1TMncjUCpPcWRsMHNCMwp6N3lobzFeJUFyWDBPY2cwbTteUDg4VTxi PkA2JCtvMDN+QDc7JV52dU1tQEpKPGFXb05KdUFheWdeJXA+R21uc3kKenVH MSpYYjQ7QllnT1UzOTJ2TyhQJiFLcDZAcD1fU0V5ayZZLTI7bGslNnZDYXk8 amomSEUtMGRPVjBiME43KklpCno+QEE2fld1RTs7QyM3ZzU2cz8kU1AlP1Fh UjErbi1jYH5rVDh1TlZhKjJ8QG8/bG8pPUtOfk59OGAyY2Qqd3s+MQp6VFRn ajxZREZaeWcxT0BEe1VFfVl5eFYjTjR5U2x7Nz9rcmA1bV9UNVhAdWk/YFBe ITNFWnhoQz5naEBMQFIrKUcKek8oUGhRdmYzbnpFIz4jbUt3MXV7U3lPVGIj antOISN4dm5lZ0pLeUVZMWJnbDhYJWhtcXpxOEt4O2okMExNVUpsCno8cUsl XzhYLXZ8NyszUX4pbSlRXmZQfSN3RHFzKWhZeHJaVGJzYHw5dDQjfiVqWlJG THYrJHNMNFVvPSlzdWk3aAp6Iy1MO355SGl5aCgkVGw1UWQyZHpXQ1JDPnpg VnNRak9vfnM+VVJ9dU8yMUczYn41Pl9zbDtmMXBMM3lwNlkoKjIKelRnfFFQ WVZGZGY0bjJpMXJ5dC1+UiYmRXlFSH5HSWFBWmF8ZXtwPGxkWW0+PChZbSRT eSMxa2JXRmRTIXNsNCM4CnpnKy0mNDZSKT9wPXY8SXJ4S0FrQmBoMjxUTDQt fFpAU0l+Ujt4WCpXKUEtNjhsXzhKS3c7VX50dzM8KTs1cSVMJgp6TytXVmht Vjk0JlQ/RV5HRmc/NTErYnBRVXpoVG1RaFZobX4zWjBvKzloPFpDd1IjQFMj Zko7PDxaYilvVCMjSnwKeil+UVNnNE0jKGRwdT0zQFBQM0UhY2hjQCp2JEM/ VlU8e0F8O0VhJEMpTXZwaGMzUSZJRDVeYlNNZ303JllZRXchCnorRz1yc3tj WEZ7UFF2UW5jO0pKSXNFbiRyNGdOSnhgSnBMPElhZkFZYEFoQkFgTzBiR2pZ Q3p7UmxoeS13SGt+RAp6dFNybDslOE1mMnN7LWNxeih0MS0hQl5tQmlPOVBw b3Q/P3tBKCEyUDAmLTVmbDVQPmR4PkRaVUxnKlRLX05ydDUKei0yaU9CQHNL WT1KYzBzM2EqezZHMnNfaD81UDEhd3JIelBeaio1PSZQJnBFa2VecHp8eU96 OVRwRFVib0dRakJ4CnpNbyExb3RCQDFleVY7UmMmKD0qVit2PT1LXkBOKWF3 dXBmMHhTbThBUElSMGEpKWdefkxEKFZgaXolJUI5bFY8OQp6Tlc5cXgrXiFT LWA4c3g9TT05TEZuKXBTV1JFTlZac2xEIUI4d3Z9Jk59dzB+USlJcTxfaCo2 ZUwlUj5UPHhidEIKekhWS1hfdkpiaUQkUEloUGMzfGtzU2puUy1saD84UV9n bnJkWmFXcCM/LXgjY2cqfVcmcmJvTnlGI2V0QHExRjZwCno5VCo+MGFsaipV MGJ+fmB3eF9WeGBfbn5ZMW99Oyo9d2VYbXojd1BhIS1XSFUpSzdNVzsra3tL Ql5oclRPSVN6awp6UWVtKn03dXY/bCozRWdRZzR0KkloRyEoaVcrYn1Ecnpl Xk09N0BBYUF7LW5NTlFZMklxYFJ8fHlSLTlnPFl7KiMKdCh6Vnc5O1F4Ui1E RzVvS29je28lK2I3YFR3PiM0MUtZJl91YEdwQzlgVEdYP2JmSUZ0e30pRShM XiVLZQoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2Vi L3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaGFzaF9zZXRv cF9leGNlcHQucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFp bi9pbWcvZXhfaGFzaF9zZXRvcF9leGNlcHQucG5nCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAuLjc2YzU0NmE0ZGFkZDdmZGFlMzEwZGFmY2VjMmVjZGVmOTY0 OWQ0YzUKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDEzNzcKemNtVi1uMSls bmVQKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3MDAw Nj5QKXQtczAwMDFxCnp4IVgyfiFFZXAoT35DMTQjX00qPz81NXVHSyltU150 S3V4UDxWZHtjaVBQPzZtQyRCdShhZz45emBeZHUkTTRPfgp6XjR7THx5dUl3 SnRtdzB9PmIkK30pWVM4KHNOX1l5PX1mQHNRXk0rbiliTnpwQE9zWWRnVkY3 YSliNmR7Xk8/TU8KelFqSG1xd3J0cXQlTGwwOTVVYilFdUgjK0I+djdCTVBR SzxeIVJLVmY9I3RnJXB+UE48dXRqcENIRn08QFlMQk1ECnprMmR1MiQ/KXZB QGEocWw+JGRhbiREK3F6PmcxajM8REJXPm4ocFNhcXs/SU8+YkJ8T285TiR9 PWlRZz08RktkQQp6WDdBezs9LSF5OyttYDBvbDxlVEdtJURYX3duPXVYSk1y dHA/Qks1Si1tTEhCenEtKyp1Ryg+VXUwR3FuaU01JTIKendCdmQzPURfTFBz X0VMTz0rfiQxLUBBSVRMRndBNTtMRDJOJGNOcz1oMzMoc2psb21zKlFWZGJo VGctMy1OQXo4CnomIUQjRmVDRWBvLU5KKzF6PTdNbmY4QD1jeCRBJUgrcW1W PHB5U00qPmUjbHI/dCotQEwlaV5XbWRzdTI9QVl+Mwp6cDZ9X2peNjF2ISRD fVdxWHZMUkEkRiF4YXNubT4rKztNZih2YkVebztyOCQ5d2VzeDY9Rithd3Ra SnlkRlBQYVkKempxV0c2dkM0Jmt6bXx1aiFuTF5hXlpWNCpAfk4hbGoqO0VM IXxjK25ZP3tfOWkxc0ZXekg1KD8tTyRuVD9BKmNnCno/WilvcnZoQyFzP0Jj S1I9ZlEjNk4kdXNhPUdtM3kpfDJHWmttfXMzY2QmZml6PmUoVnVIQEJgPEk8 MWYmVyEyVQp6cnxzWHk7P1J4WiY1UGo1aVJhYSZgdTZWYzxHJCRGcnt+dEM/ QV5LUy1uIStgcTIkaD0+KUUjNHpKU31qZSVpWnoKejxJQTRmeU1FZmJlUVJL ejl7Pk9WMGQhSk1Rdmc4YiprJTkjMDEwcU5TI3RtWTA3dzc7MDd3OHYkIWs2 VTAwS2AqCnpMX3QoWSQ3NWgxOCEkM34wMyNfe24zITJ1KzFReSMoISM7WCNt eiZTN1NlNnUxXmIxVTZmSiFHMClqJXFkP2FaUgp6NWZ1fWM3PnJzLV9scVBT MnVLYjxoKFhnR3VHRUszM2xwPUh3MlVtMW9WPGRmNSkoY3gkfEA/Vlk3aXxQ PktkOV8Kek94aWxTZGl2UDMhMlAwUFV8PE4qTCU8ZTloJCpXVzByaH55aktS SnohSWs9dUxybUdvS218bWJud2VXelRBQVZzCnpPQkM7YFNWT2QhK3R9TEtv OG4zcnM5R0UjU3skOTZVMGpMTztzKCo7PyYwYT5qYXYoe2krejBrbHRFaGpU Pn1EeAp6YVFYISRqUnBJS2dhWS0xblN3dyNhajghXkd5Pj19KTV4Z2ttez9Q eVFlU1hyTD4kbC0pQSlxTXEtMzBhS31tYyoKekRSRSVHcV42fjNXYTg5PFFZ ZmlwS3woQSRDcFJ4MnctKTUwUG8pNSZyTFpXIXhDRXpQUDtEcyVZYXRMfmtS KWdmCnozOXF0cDYrJlVrMDhXREQ9NFBmSzRKdXtqNnteSCZGfFZ3d0cmY3Bp M2FDU2tTUz1QMVRVM2JCMG4kPXNRKkRZUQp6UWQzKTNVdGliSSp3b3pJKVk2 TDhGUDNmWT9NUFpXST1pfWlkVjJmJUNycTM7WTRWaCptfDdxSzhpdnBAWlRn SEUKekdpSmAzSiFlYDZrVU0pOHJYSkl8Xlg0eUQyKUN1QzZRcEMmbC1VZG5i MkA4NGRadTh3JjI7Z1NyT1RHWHdiWFYyCnpiPDl7WDhOXjskM25DfUNVfSN5 amRkPUUoYTRtSitBVDNSa0s8eEUoQWFZVUBoTCpxJDgjaXIrWXBMJTZYPSRE YQp6VnNFSmprclNJU3Z+MW5CSiRuYTlURl5wX0QyTUcjLW5EeFZZMk0kcGNp O1g0cXlfVHNnTkZfd3Y9OX1RMk0oY1YKekF0SiQ7bUstPjZwb0ZBa2lKciEm M2ptfn0tQFgwSTkodz0pMDN+IXFTYWY3emJZKGhZYSVFdzNXZEpmVEYpJUdM CnpHQSVHTVI1Q0MrRyY0RmhHJUdNUUl4c0xlbkkjP28wMDFSKU1PYnVYVlJV NldaRXN8MFdfYldJRmZsTUtGZ1l6UwpqRjtwQCRJeTV2b0ZnN2JOSDk5YWIl OW1CRjAwMDAwTmt2WFh1MG1qZmgjQlhRCgpsaXRlcmFsIDAKSGNtVj9kMDAw MDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBs YWluL2ltZy9leF9oYXNoX3NldG9wX2V4Y2VwdF9hbGwucG5nIGIvd2ViL3Bn YWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaGFzaF9zZXRvcF9l eGNlcHRfYWxsLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYTI0ZWQx NmFlYjBkOTNiZDEzMzkwMmIwYjIyMThlNjc0Zjg0NTI4CkdJVCBiaW5hcnkg cGF0Y2gKbGl0ZXJhbCAxNDAyCnpjbVYtPTElPipGUCk8aDszS3xMazAwMGUx TkpMVHEwMDElbzAwMSV3MHt7UjNEZEJqNzAwMDZeUCl0LXMwMDAxcQp6eCFY Mn4hRWVwKE9+QzE0I19NKj8/NTV1R0spbVNedEt1eFA8VmR7Y2lQUD82bUMk QnUoYWc+OXpgXmR1JE00T34Kel40e0x8eXVJd0p0bXcwfT5iJCt9KVlTNjsw MDU8XjxWQyplT3UqPz0hcz48OEBSWm9fZGR9PkYoZH49Vz95Y1lSCnpuWT8m WGpUdy0oWX1uPD8yZExyQHRLdTUyPDZYdDthbSh5WnpVRXJOPVZabWBsR1gy XyM5b0IzTVJLRHhkWS05agp6a0VYJG9IdVVreUBhKHRuPzYmWGd3KTV9RHFR X3dCPGVsb3tvYXh9Mj8maDxrJTQ2Xjl3Jn4lVT0tLSo9LUl3ZysKenUmMiN0 QDk0QVctazlneG1nZC0kP0JLMUp5TEU9UE5wYDlgQCQxQ3c7SThaNXRuY0sl eTN3UHErSHJXVUtISSZDCnp3Vjhnajw5WURyITBGdG8+RHM5MSpRZjJAeUx6 IWY+RHNCXyVabEh+aHUrMTc9RnleISFCZ25ocnIqWWYtb3UzNQp6IUdoKF9w dGszSD1HM0khIWhfdHZmIW49KjxqdFBCPndvTHB4YUgyRTxJSkF3KnRXWHZm XyRfP3l6cXBVJXc2bHwKenBYPXFHQDlESmk9K0B4Sm4kVzlnI2d8MEt3NTY9 NilRcGhhYWRwKFB3ZG1tQ19WNFBvXjZiVXQoeXIwMFlOKSZ+CnpuQXQwaD9r QmdnJTd1WnltV1FPbXdZYyowYF8kRilzalRJV2s9Pzw9PzkjMWxuJHwwYl85 bEExWW1idU0oOSFZaQp6K2A7cWgjX3J+Xz9jfWlSOzstPU0hR1lSST9kN3JO Kl9Hd2lsalBIbz5mRVkjdXpjTFdqX2wmRDxrZ1ltKHZSWksKempPb34/P2Nj YFkoMmUyRWl7USRNPWhkYjlfVWBaRnpVYkplPWhtZ3stTVFARXk1LVFKPGok WSMqfHl4aWZaTSEmCnorUGkoQCVid2MxZSVpV3lIa2N+bjAwMDAxYlclPUow Nl55MFcmaSpIMzI7YlJhe3ZHVU5Ce3I7TkJ+QzNZZCF6fgp6MCViYD1LfnpZ YFZfK1p+RmZ4R3ZCUG0qI218MGxhKnFLUHUhb2tWSyV8bl9OKHJ3YGRgLVBW akVxd2R9ZjxuVDQKekJ4dzs1NiUmXmpqOU9yUmsoODhWa1lvVE1MT19aUzFm KVB9aVBiYGVFcFdlcFoyPT0jeTJGK0Z1ejg8fVN6MU9gCnpqITlsWVFBd0V6 cEI1RVdSVylecDc3aChmRW9+K3BUfElwUlkrQiY0dVdEIyQxa3BwbDdJPXNP Wjd+TXcwZzBKXwp6ZVBOMCNeJnpKKjY9T3FINU4mMnxWUUZQO2hBWmA8Y3dm fjlxUSUxMiZmZFdjU0dxdmU7dDB7PTxtfT89TXgrKloKemghemh8RksteypU OTk0cj4qdWNtKGh9ZW43IS1gdEZOaEVXZilNfUVGcmMxckdaMlZDbWNiMkYh WGtsQUdtRENqCnppSCRRT0QhK3o9TWFCYmRGLXU1SE4+MEopN25IPjNuO0gt SE9JbXRIVylAQkBEMjAtMEhZQ0p5YWBXO0ZhQkQjPgp6YGN3LWNUOGZHYk49 a0ExMT1XQF51b2VPIzIxJFlAa25rJDZQJGQrbTRCI1lhVlBTM3QoeDYmaVFL PzNaN0teSD8KekRobzVQdEFJTXhpUGQ1V3V8PF9BOVV2eyR3bCF1KkJESG4o NEdyfjtQMGNNVyY4PS0le2JKU2IoU2Y5O3YjWXpPCnp4M3tsPCFvKjNGQ1Fx Mzw0TzBzd0sqSkZfcnE3cjtiTE9uc2JMTEwoMWFqeGgjPylnclp+bFVYaXtR NEBjN2IjKAp6bztydHRWUXlDfk5ZN0xaeDB4K2p4QGBGaHhSJHpacHBLYTxy LTBiMj5Pa2FfUnR6bngqUXtOKTk8SFVuMmMpSFcKekdLanNROXo7JVYjP1RW OWFudDU0YTRpa0pBVDJHRUs8dXB6QWFZVSpoTCZ5SGNqVzlPTmVmenQ1I19M NURaQlVWCnpDQyZUMF93N0cka2hEUEZiTGpBNGdjaFFyXjU5XzxFa3E8M3Yo a2VINTA7WFlFWVpeI2JwWmV0OHtAb30zMnIzLQp6MDAxUilNT2J1WFZSVTZX VnsmQy1iWSVjQ0ZmbE1LRil9U01GO3BAekl5NXNuRyZDelBIOTlhYklHSDZM MDAwMGIKemJWWFFuV01Pbj1JJkUpY1g9WnI8R0I3YlBFaWdHUEZmbWp6R2Rl VWhJeHNkWEZmfT9iRnZeIXp0TjtLMjA3KnFvCklNNk48JGY8RCpsV0I+cEYK CmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2hhc2hfc2V0b3BfaW50 ZXJzZWN0LnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4v aW1nL2V4X2hhc2hfc2V0b3BfaW50ZXJzZWN0LnBuZwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwLi5mYjUzNmIxMWI2OGZjYTZjMmZlZGExNGE4MDExMDAzNjc4 MjA0ZDYyCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMzg5CnpjbVYtejEo TiFTUCk8aDszS3xMazAwMGUxTkpMVHEwMDElbzAwMSV3MHt7UjNEZEJqNzAw MDZ+UCl0LXMwMDAxcQp6eCFYMn4hRWVwKE9+QzE0I19NKj8/NTV1R0spbVNe dEt1eFA8VmR7Y2lQUD82bUMkQnUoYWc+OXpgXmR1JE00T34Kel40e0x8eXVJ d0p0bXcwfT5iJCt9KVlTOChzTl9ZeT19ZkBzUV5NK24pYk56cEBPc1lkZ1ZG N2EpYjZke15PP01PCnpRakhtcXdydHF0JUxsMDk1VWIpRXVIIytCPnY3Qk1Q UUs8XiFSS1ZmPSN0ZyVwflBOPHV0anBDSEZ9PEBZTEJNRAp6azJkdTIkPyl2 QUBhKHFsPiRkYW4kRCtxej5nMWozPERCVz5uKHBTYXF7P0lPPmJCfE9vOU4k fT1pUWc9PEZLZEEKelg3QXs7PS0heTsrbWAwb2w8ZVRHbSVEWF93bj11WEpN cnRwP0JLNUotbUxIQnpxLSsqdUcoPlV1MEdxbmlNNSUyCnp3QnZkMz1EX0xQ c19FTE89K34kMS1AQUlUTEZ3QTU7TEQyTiRjTnM9aDMzKHNqbG9tcypRVmRi aFRnLTMtTkF6OAp6JiFEI0ZlQ0Vgby1OSisxej03TW5mOEA9Y3gkQSVIK3Ft VjxweVNNKj5lI2xyP3QqLUBMJWleV21kc3UyPUFZfjMKenA2fV9qXjYxdiEk Q31XcVh2TFJBJEYheGFzbm0+Kys7TWYodmJFXm87cjgkOXdlc3g2PUYrYXd0 WkxsQWpfdSNaCnpgdTZVKHZDNE9Wci16NCYhbkxeYV5aVjQqQH5OIWxqKjtF TCF8YytuWjB5e0BrQ05TZSVVaGIoRTZ+eUxeWDxtJgp6PUNiWU51PFlXbUBh TXNaXzlwRyt2RjYjODw8XnRyKH4jPWlzJiVNX3NKdClpOzshVj9rPms+ajs/ OWllKnIkSGEKelIrIWw8Oz9SeFomNVBqNWlSYWEmaDNobnA/a0RmI3pVYkpl PWhtZ3stTVFARXk1LVFKPGokWSMqfHl4aWZaTSEmCnorUGkoQCVid2MxZSVp V3lnQE0xOGhvc1RxNGdMVEMwMERHVFBFIUN0PUdiTmMwMDBTYU5MaDBMMDAy azswMDJrOwp6TSMqYkYwMDA2fk5rbDxaTlhLSmZBUjkwO2ZkQ15aVDl9d3dT bFFUX05ZY1c9JDtIaD5uaWtTKztSWEFKbWxRMzAKemB+cmVQIWg5clk1Zksj PW1sJXYlTmNXMio5fCVZZUshYCFwOWo/QGVPJCFzVmwoZFgybGJwUFFxN29C NkV5Xms/CnpzJWo3fDlPQGRIVDE/dEh4X2JLOXc3fnRNVnFqbmgoTD14JU0y SVA/N3k8UXcjRWlrZEZ1fDRqa1Y4el8kVXBAfAp6bzBeJGhTWCFDbDNRSDk0 dDVgI3tuQV9PZSpfK31AN3BQaHNBWColcW9MeVhyKVp6eHc7X2woOzwmOWVs dld0Q3UKentnZ3BrezlPWUFnSyt1PEM1Ozk5Z0BnazJncWVhc0lCfV5ASVd6 KzNHfUZrYT0kS2VqcUVjVVFYaGE7KTdTczVJCnojSDNgTGVuQ2xtSn1HZnZ6 b2UkNlhKcTJrZj5KMXtXSTtrS0owfnxVQUdhM2RxRURwJnFOVDdYenFrYWFV cj1vKwp6MSMyTT9WdnI8ZzM8PEJZYXVxXmgkXmNHKz1IX09tQVBwKkk8clMq TFhmZHk+dFRaPFR5OSVnN2phViVmNUw7QTsKeihnRCZeV205ZDZCdk1tYlM2 XlMoKEFkPTYrfDwmRilpMEs5PyhJbGdJeSQ/JGR3UDJOYFhAfUJJQkR7ZnNo QzxJCnowVUN6VEY+Tn1Lb0h9Rlh0WjV4VSNfU29HZFE5aWNvaX4zMCs/Slk3 a2REP1ZHWiF3TCltYTE1R1g9d0tyaSZJWQp6Uy1LM2FyTTMlMXdrJSU9MVNA Sm0/OHore1QyYClGeT1FPDNPSTxnSlkrNDc+dmMzKylwNDViKUMyKyZXT2BH OWIKej5VJShCXkE/Ym50QFItRyNBWGFGK3FVbj4tYnM9Y3Y9QWY4VllgeGRA N1lWNV9qbTh4ZjhaYyNmeFBGPztsbF9tCnpMYENKbiF6Znh7M0ZnUkFvQyhJ WDxsdz1CQl90KEZeZlgzWTAwN04qKztsZnFYKkI9PDAzfiFxU2FmN3piWSho WQp6YSVFdzNXZEpmVEYpJUdMR0ElR01SNUNDK0cmNEZoRyVHTVFJeHNMZW5J Iz9vMDAxUilNT2J1WFZSVTZXWkVzfDAKdldfYldJRmZsTUtGZ1l6U0Y7cEAk SXk1dm9GZzdiTkg5OWFiJTltQkYwMDAwME5rdlhYdTBtamZ1STJKTgoKbGl0 ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4v bWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaGFzaF9zZXRvcF9pbnRlcnNl Y3RfYWxsLnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4v aW1nL2V4X2hhc2hfc2V0b3BfaW50ZXJzZWN0X2FsbC5wbmcKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMC4uMDAxODE1N2Y2NGE1YWU2MDFhMmRiMDhmYjFlNGE1 NTMzODVjMzNiOQpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTQxNwp6Y21W OzQxJE8kMFApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7e1IzRGRC ajcwMDA3MlApdC1zMDAwMXEKenghWDJ+IUVlcChPfkMxNCNfTSo/PzU1dUdL KW1TXnRLdXhQPFZke2NpUFA/Nm1DJEJ1KGFnPjl6YF5kdSRNNE9+CnpeNHtM fHl1SXdKdG13MH0+YiQrfSlZUzY7MDA1PF48VkMqZU91Kj89IXM+PDhAUlpv X2RkfT5GKGR+PVc/eWNZUgp6blk/JlhqVHctKFl9bjw/MmRMckB0S3U1Mjw2 WHQ7YW0oeVp6VUVyTj1WWm1gbEdYMl8jOW9CM01SS0R4ZFktOWoKemtFWCRv SHVVa3lAYSh0bj82Jlhndyk1fURxUV93QjxlbG97b2F4fTI/Jmg8ayU0Nl45 dyZ+JVU9LS0qPS1Jd2crCnp1JjIjdEA5NEFXLWs5Z3htZ2QtJD9CSzFKeUxF PVBOcGA5YEAkMUN3O0k4WjV0bmNLJXkzd1BxK0hyV1VLSEkmQwp6d1Y4Z2o8 OVlEciEwRnRvPkRzOTEqUWYyQHlMeiFmPkRzQl8lWmxIfmh1KzE3PUZ5XiEh QmduaHJyKllmLW91MzUKeiFHaChfcHRrM0g9RzNJISFoX3R2ZiFuPSo8anRQ Qj53b0xweGFIMkU8SUpBdyp0V1h2Zl8kXz95enFwVSV3Nmx8CnpwWD1xR0A5 REppPStAeEpuJFc5ZyNnfDBLdzU2PTYpUXBoYWFkcChQd2RtbUNfVjRQb142 YlV0KHlyMDBZVFVxJQp6P2NjYHdfVV5aXyU2RVhMaGxoKjh3WWMqMGBfJEYp c2pUSVdrPT88PT85IzFsP0EqYlJsSEdtRlRia0FAKDkhWXAKej9aKW9ydmhD IXM/QmNLUj1mUX5mQ2hnXzE9R20zeSl8Mkdaa219czNiKlA0QHlmNXRIdUhA QmA8STwxZiZXITJVCnpyKyZ7P25BdDFoKDJlMkVpe1EkTT1oZFohPm9rcS1D LTM5Rj0tOCp7KX1gIy14JE5HJDw8T3p6JlkkYnF3JW9wZQp6K3F7MC15TTUh IXA0eio5K1BaeShmeG5pQXF5dUUwYDJZWF8wZCFKTVF2ZzhiKmslOSMwMTBx TlMjdG1ZMDd3NzsKejA3dzh2JCFrNlUwMExgQ0xfdChZJDc1aDE4ISQzfjAz I197bjMhMnUrMVF5IyghIztYI216JlM3U2U2dTFeYjFVCno2ZkohRzApaiVx ZD9hWlI1ZnV9Yzc+cnRBZXZ5PXZXUlBTNEF3b2NrNCtOd0BZS2hmQ2hBbld2 Zk5jUklTaH5aTgp6YG1sTVFpQ0oxa1IqcCR0S35ZSlczNy19ZlJhR14waCF6 ZUZPKVlJRTliRytyMThpRjB2OURAcVhhdnppeiFyRmoKejBjfGtgPkgmJEZm UEc8I0VBPTYjRiVARyZSUzwxdlplZUw8Wkg2b0xwP0ZgXzJCTzhuKjNSQysz fEcyOSkjMz16Cno7XmdlJj5QRG0lY1plMWJQY0xzRCsqKiliP0NhO1IwQDQh VDc4biRhKD1VaCsxQS05JCZAaUIkYTVFNXlLJGdKYAp6UktnO0dQQlYqJmop eyNrQlB6ZCFnaGo+IVo4MXdvT2lFNns9QCpwNT1iSVcyX0Rmb05NcklhSEVo dlNPWUJuVXEKemEmcShYM3ZnPmVGOFdqcEF6RiV4M3JiM0hgVVRhTkdPIWlg QXFHaTtDWG56ZHVUVWl2clZRWERYa2xTKTJHWEVmCnpVUXd3PWoyNFRrc3d4 WEp1JmFQTilRUXolMzkmXyRDPjxheil3VlRlTkZ1ZCReJGlYNmpaTXVoRXpQ Wk1TcDh6dgp6PyRMcHlyTChLTXI/PERTZjVPQmBsT3w3QEl0XjBgQnRYTHZJ O1BKNmxHQTMrbm14U30kZTEkfFE7KnIpZEdpLTYKemd4Z1p2MT03KHJiPUlP cXYlNnxSZFp1RXkmMX5fS3JPVEdYd2JYVGska3I4JGZNOGBFaCZgbmhMKDho d1l1MnVWCnpZcEwlNms8SUh0U35rPiEqcHIodnY7PU0zdzBSMyRPRzdWK1l9 cEZadmFKRWNwNDVWJlcmNGh1SWxEO0dmKS0qIwp6SWMjXnpwMXUzOWRjUFom X3hKMlNhUFNhbWZ4UCRka3N9QiNMYENKSEJQZCM2M0ZoY0FvQyhJUF53NlAw cjZlVXcKel5mWDNZMDAwVXs7NyF+M0x0Nmo8MDN+IXFTYWY3emJZKGhZYSVF dzNXZEpmVEYpJUdMR0ElR01SNUNDK0cmNEZoCnpHJUdNUUl4c0xlbkkjP28w MDFSKU1PYnVYVlJVNldaRXN8MFdfYldJRmZsTUtGZ1l6U0Y7cEAkSXk1dm9G ZzdiTgpYSDk5YWIlOW1CRjAwMDAwTmt2WFh1MG1qZkNaelVsCgpsaXRlcmFs IDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNj L3N0YXRpYy9leHBsYWluL2ltZy9leF9oYXNoX3NldG9wX3Vua25vd24ucG5n IGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaGFz aF9zZXRvcF91bmtub3duLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z YTc4ZmE2YTFkMzVkOGIyNjY2ZWUzZmZhNTU4M2RiOTY2MmE2N2U0CkdJVCBi aW5hcnkgcGF0Y2gKbGl0ZXJhbCAxNDkwCnpjbVY7QDF1Z29DUCk8aDszS3xM azAwMGUxTkpMVHEwMDElbzAwMSV3MHt7UjNEZEJqNzAwMDdmUCl0LXMwMDAx cQp6eCFYMn4hRWVwKE9+QzE0I19NKj8/NTV1R0spbVNedEt1eFA8VmR7Y2lQ UD82bUMkQnUoYWc+OXpgXmR1JE00T34Kel40e0x8eXVJd0p0bXcwfT5iJCt9 KVlTOChzTl9ZeT19ZkBzUV5NK24pYk56cEBPc1lkZ1ZGN2EpYjZke15PP01P CnpRakhtcXdydHF0JUxsMDk1VWIpRXVIIytCPnY3Qk1QUUs8XiFSS1ZmPSN0 ZyVwflBOPHV0anBDSEZ9PEBZTEJNRAp6azJkdTIkPyl2QUBhKHFsPiRkYW4k RCtxej5nMWozPERCVz5uKHBTYXF7P0lPPmJCfE9vOU4kfT1pUWc9PEZLZEEK elg3QXs7PS0heTsrbWAwb2w8ZVRHbSVEWF93bj11WEpNcnRwP0JLNUotbUxI QnpxLSsqdUcoPlV1MEdxbmlNNSUyCnp3QnZkMz1EX0xQc19FTE89K34kMS1A QUlUTEZ3QTU7TEQyTiRjTnM9aDMzKHNqbG9tcypRVmRiaFRnLTMtTkF6OAp6 JiFEI0ZlQ0Vgby1OSisxej03TW5mOEA9Y3gkQSVIK3FtVjxweVNNKj5lI2xy P3QqLUBMJWleV21kc3UyPUFZfjMKenA2fV9qX1VfPjUpd0E1ZGpudUpvKXlL VFN6dSYyPTwmPkQ7I21EYUc9PWtzSXdlc3g2P0FebEwhSD96OHRNY2Q2Cnpg fXAkOXYlUnJ+b1Z0cFEoelVWbV9XYS1BXn1vVUZzOyVZRygoJkVHa0A0bHdf dD8oWFAlNzZ2NEJjaXR7UE9TSQp6LVNuJWo9SlZ+dz8maC1YPGdvMUd1a2gh PTxHUSltUVkrJGNQMTtFdS0pbHdmPCswfTNtRjNveDxrT0pxK15XZDYKeig4 aXZ5KypUfj87OyFWP2s+az5qOz85aWUqcihyUEo9YTdQOz9SeFomNVBqNWlS YWEmQDNFZk1kUERFeXpVYkplCno9aG1ney1NUkczelVyV2Q/NCp3Ujw9XmJ5 eTUtUUo8aiRZIyp8eXhpZlpNISYrUGkoQCVid2MxZSVpV3klVWVkPAp6b144 fSZMZXJ2YHZaRURNMDAwMDFiVyU9SjA2XnkwVyZpKkgzMjtiUmF7dkdVTkJ7 cjtOQn5DM1lkIXp+MCp5JlQKekt+ellgVl8rWn5GZnhHdkJQbSojbXwwbGEq cUtQdSFva1ZLJXxuX04ocndgZGAtUFZqRXF3ZH1mPG5UNEJ4dzs1Cno2JSZe amo5TihkaXpGV2lORGVAVkxETDxzKVEzJEE2U0lgR2o0WUYheW4+PDw2Rngx PERrYGRLNUdAPyk4ayQ7Ngp6K0ImKj1gcTtGPHtpMCVFVTxsRGV6IXBTXkRY U08oXj88flQhTS1yVG1ITG9GT3hlZ2wxd0A7Z25PaiZ8bmNAbWQKejZ6ezg4 TCRzTE4qeEsyZjt6fTImU3t4dSs5RyNxOVQjM307MkdRY347cHlkI1RNTSNf ZVNIMHRMMGJHPjB8SjleCnpgVU5HODFeYjFCMGAtS01mPFFRTnNaVGpIMF9a ZjskZilSO1NXfWA+VXZPd2Q5TUJmaV89TG95V1NvOU1OcWp5agp6YWJVbHNy bG5fTzs/I210RDUrI1lMTSVIY0ghbU56N1VaSCZyMndMKHVxZU57MWdCcTZa N0J0N0FyTkFhQnhubz8KenVkO0YjTFNmMVBQSi1zPFd+THd3RHJNeXJzPkVu OXVkSip6SHdDKjJzNiZsZEVmeEA0UkVXfDYobyR0cFpIZ3BQCnpRKElTR1Up UnZzKVpFPEUodSZuRG1UbTZzTkxvNU55U2pVTmRpKGsoT3FAN3JAfDNCVlN8 OS0kaFJgdT5Jcz9PdQp6blhgYWtfOGJPPXgkYGpmbjlnNllhTTVEOEVqNjck OVNsb21FblQqSil+cHBrPUctWTVaWmxvRVlXMTQ2YTRvZjYKekFhZFAkMjhL QnNYM1lZekMlMGZ8Knw9JSptYVQ5dGI9QEdjWCVkandIZnVZR0oqZiNwT1c9 OzN5TFE5MSljMWhNCno9N3xncGR1R2tyM3R+QGYjP1oyRnxBRmotNytNWihu PkZpakokNVo8QXFJMlVreSoyamNHdXg+KnM8aX1DcitZeQp6emh5RXwzcXd+ ZTQofWc3Yl42UiV2X05qMUdNOW0yZFM/eGVLdDZIcXtDUntITktgVVJ5KWJM bSNTUjc+UUYtPH0KemlXWD5zeGlvOW1XbjJseXdCK3BCdm4zPVlPWX01R1Q+ dDxsZSVpajNDQWczUDAwMVIpTU9idVhWUlU2V1Z7JkMtCnpiWSVjQ0ZmbE1L Ril9U01GO3BAekl5NXNuRyZDelBIOTlhYklHSDZMMDAwMGJiVlhRbldNT249 SSZFKWNYPVpyPApzR0I3YlBFaWdHUEZmbWp6R2RlVWhJeHNkWEZmfT9iRnZe IXp0TjtLMjA3KnFvTTZOPCRmXi1gei0yZWFwCgpsaXRlcmFsIDAKSGNtVj9k MDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9l eHBsYWluL2ltZy9leF9pbmRleF9vbmx5X3NjYW4ucG5nIGIvd2ViL3BnYWRt aW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaW5kZXhfb25seV9zY2Fu LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NzY0Yjc0ZjVlNWU1YWYx YTIwNWIyZWNlZTllZDE4NDcyN2UxZmUwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0 ZXJhbCA0OTgKemNtVjxPMFMqMyVQKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVv MDAxJXcwe3tSM0RkQmo3MDAwMU5QKXQtc3xOc0FWCnpiYVhhfCFEZzF4IUgr aDJvfmNkMT40fn05VmFEcmsmRiomMT83aDljck5RTGV5QHs+WD44OVREXlZ9 LUQtUj1NMAp6RFp0PEUhcjw9MztxUy1lQFd8dXYlSCMwTTxuajZEVShNejZ8 Sz94Tz1rbjkmXlZJM3wqNkg+Mz54Y2dBaFQtcWAKeiFOQGQ7MDAwMDFiVyU9 SjA2XnkwVyZpKkgzMjtiUmF7dkdmNjk1MVU2OUU5NG9FUUtBMFV0PzNLfnpZ YD9iTz4yCnpmLW5wUTs3TztWMD9OYl8mSig9PEozNUxeVURxanpDZFN5U1d5 dSM8YClALTA+KnM0MlZHVFF3WGYlbDlAaWNsTAp6TmRPWGV1aXlTeXBDTTQh O09AeSZYe3dTT0lVWHF+WFFzLX02UXZZUzRoS3JBQEw0PTBsfl5mOV9JcEFe Wno5QmAKeiRCaGtrSk1mOHNAc0wqVmhMV3BiNFEjaS0yK3JJUSs5LWVQP25v UTBsWUJOSCpsZDghaTdaVkRseT1FXy1JPVViCnowaXdOUnhkaXNsV3U7QSN2 biY+IUo5WjxAT3gjSihva3YyYD0qPWUtMStaIUs9a3JFcjhrdX47ZD1CPVlY PmoyWAp6M2BeNVo+fnk9aF53JSF6ITxYbUg8QS1CeHJpY1RfZ316TURGME1C fSYkOFV5ZXRjOWMoRSpZYGshMXliTVpITGoKb0YmUnNPTXt2JCFwWWJqb2Bg NVNDOFMhNXBpNForOyZqMGBiMDcqcW9NNk48JGc1I0k9XzVjNj8KCmxpdGVy YWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21p c2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2luZGV4X3NjYW4ucG5nIGIvd2Vi L3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaW5kZXhfc2Nh bi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDQ0ZWZmNDI5ZmE5YTM0 MDk3NzZlYTg4YTExNDIxNTgyZjZmNDU5OApHSVQgYmluYXJ5IHBhdGNoCmxp dGVyYWwgMTI5OAp6Y21WK3QxP35FWVApPGg7M0t8TGswMDBlMU5KTFRxMDAx JW8wMDEldzB7e1IzRGRCajcwMDA0aVApdC1zMDAwMXEKenghWDJ+IUVlcChN N2A7QyZoTDU5P15WTC1oU2N6OCRuMHYjPn5HNUptZjcpcCZoM0tIP1dXJUhq QDBndyo2KiszCnpeOTg1ak9+TDZLdUgjJDk+dGVfMklKZjBjelVPUGw9eWEy b2RZLUFKIVFeSV4oWlA+NEAjPUB8PDYhZ2YkbmZtOAp6QDlETWo/WnhpcXYr P1cxP0JsVFQ+QjhhZl92aEx4PmcxajM8REJXPm4oeWVkPS0hIzwrP1ZhO3ZG NiM3PDxedHoKejtIfW9fXzNZeFc9R3ZDKjtqWk0+bEkhMkM/ZEchVS1tTEtF enxgc1YlYzVBQHlAfjRHc18qMiEpOUNaJClSRSlUCnprSylqYz5Ec0IkPWtu eSFrbUFtYUA4ZShUK3A2S3Jpc3sqP19VbmkzO2s/YnxeN0dfaD0rfiN7KlFW e0B5WUFhNgp6XlZ9LW4kJSlee2h+TE1EPUczSWk8bmo2RFUqNSlzJUgjMG8p dXJhc3FzWmcle19LWUQ8LXFMU3kycz0yI29fUCYKej0zbmdJeTVgY049Rnlf JihWXl96eGN9Wk0tbyU5NiEtTCR4ZzV9Vm0rYGZScTtPXndrcFg9SlV6fkFv ViY3U0puCnp3IUdjIytQaSteJSR9eyo+RXB8dTVCZGFBMDAwMDFiVyU9SjA2 XnkwVyZpKkgzMjtiUmF7dkdVTkJ7cjtOQn5DMwp6WWQhen4wP0EyNEt+ellg P1VkUEQ1PlhoM1pLQU47UV9DIypLd3ViTFN0VFR9MV9mTElrd3M3aDhBKE16 V21OPj4KelUtIShDIWcxbj5vMVFOR0UpRi1tJnlWLV85WnB+MCVsendrTVg+ WTdRdyQrcU9DKnZ2IzlPSVUrRTRWcWRwfEhwCnozPVJ6c2p9UmxIVmBDbyhR QTlGNkswWk5BT2lvVUlCdEFffE8kYHUzcFFYfWFWc3ZfWFYydFJOR1YlOCpV JTIxUQp6cElASiE5cDlhaSQhNT84JFEyNU85QT1lRDx0KXNxUjRPJjdOc2Bv bmhOMzdmYlJlPzFJVD8jNj1JN0BYcGo9cDMKelJEbyh+WD14Y3FvbkNKTSU0 anMxRj1TPD4xNmt3fDlTTmpmdWN5RmJHPDhRKmkhOEZOKDs+djV8N043WFlG Yl5qCnppNmVyYFo7UzdvZysmV212KDRfbmtoTGB5YDJwPGs9ZztTLTckVCZv bXF9NiQ4aVJxLWZZeGRASkhTRUh2PWQ4Tgp6VXZHMUh2YXFsZzgrTT53Wm5w PFJIYUZXNFFtNW1LSENuO0V5MEp3QT9SSVo+TDNWXjxEWHYpQ21kaXpoY1lF OUMKejdmMGxab3Q8M34zI1o1TDRgOWdOVWVBczMyKmB1TUFXRVN1UnhMUGVj Qy10cCpXKzxRQVFURW1Me2xLUnphSUBeCno3Q3ZNVmlYOXhyRzM0ay1LJSZ0 RUQlT09xMmttbVh6Mk5jcmQ/NSVROTQydyhfP1NuY0VXI0ZSN21EQCFWekRy IQp6bEYxfjRBdHhzc3ZZU1hHKHlSc2ppP2F3SWkqUENla3ZQTWdWI3dLOSZ5 QWcqYjFDVVdDWDs0JjtZR1hmYCRHWVUKenF+aEBsSUwrcXJtbXJFe3VDQV4h eFd6UkN4azltNj5XMSp3Qk5VNHJxIyZOV0VAVUJKRVM3UGtRZldnVGkkJUwm Cnp0X3lgY2wjMW5ZUlVBb1lTZUZpcVRyUGhESD5HT3oyMTlPZGR2MShKZ3BA IXlnPzRlbEZ4Z1lNRVJ7K3FyQ09gcQp6d1dwd211VT07I0tmIzUrOSEhQz1E Njx4fE14JH14aj55KlAmMU4wX2B2b0wqJFg8XnVTTF9xZz5QKUZMbzBYQE8K eklOQylQYXp6JVltZGxNQSt+V3ZoJj5mcTNiaCUpJW44alZJKXc9NiFPbkFu N1kzeWJHdVh6QnI2YjMzeD13Nn0jCnowMDFSKU1PYnVYVlJVNldWeyZDLWJZ JWNDRmZsTUtGKX1TTUY7cEB6SXk1c25HJkN6UEg5OWFiSUdINkwwMDAwYgp6 YlZYUW5XTU9uPUkmRSljWD1acjxHQjdiUEVpZ0dQRmZtanpHZGVVaEl4c2RY RmZ9P2JGdl4henROO0syMDcqcW8KSU02TjwkZkBqPktTcFdiNAoKbGl0ZXJh bCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlz Yy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaW5zZXJ0LnBuZyBiL3dlYi9wZ2Fk bWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2luc2VydC5wbmcKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMC4uODYyZDgzNzI3N2M5OWUxN2QyYjY2MjMy ZGU3OWZjZTAxMDc1MmU3YwpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTA2 NQp6Y21WK14xbEllQlApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7 e1IzRGRCajcwMDAzeVApdC1zQm1nS3wKelRVJDFXITNuQTJhK2Faemw5SXVY SG1hRjhvdTRAfXdkSGxEJDNlWDQlYzU4azt9UXp0TW9QZngkRXROKiNPaDxs Cno+VEFkN1h2cGxUI2QmVmE+X19ZJXZjIUE5IUdMd20/QXlKNityNWUwekpU MW5mUDJ5SitgKW9gKGVCO0RnTWAhWQp6LW8lOTcjZjlGK2hLJHRpLV5ZakYk Y1R+RT8lPklaO21uR2MrNDE3ZWpOO0laPGokWDwrd3RTbGtMQSN6PGtPSm0K eihWXnppcVU2Kyg9RiswJSlzcDdacXZoNjw9RzNJOyl1cGNCXlhBITw9K355 YCpRZSYlbWcoNTE+RGoyfis/Vk92CnpzcDtGUT4pTjtJLWtJdiVzX2Zqaj5F TjJ7LW1MODF5NmZNcT9CMlRVO0h+UThvYkJKYz9CVEJNO0pmUE5vJFRWVAp6 P2N1IWE8Rk1gSnZHMyUqP2RHIVg9Q2trUiEwX2g0QDk0QWQ+OXozYSF0bStC QGEocW4+JXtXeSNxO2dQXllGK00KeiFMbnJsMDAwNFdRY2hDPEs8M3pIMDAw MDlhN2JCbTAwMFhVMDAwWFUwUldudTd5dGtRaGU8PzFSN2w2fG0wTlN0CnpQ IXZYSyZgbEJCMkNKYU9UQSlhfHEoR3JpMnRrTzFUald2QDNJUVZeeEJtWk07 N1FLbTUpMzJHSUhNMlU1OUApKwp6Tzd7MWlHbFJrS0gyK3s7UHxFRDJvPGk5 eTdSd29SYWJtU3pRa1NvN3dybEc4IXNXVzVabXQ0PlBuNTE9RiZkMikKej5J QmhCeSl2ODRIdEchTkY2ISNeKUUxIXIocFIzVEpNV35QMCp9K19ebHsxWWNz eiU+RVh5O1BOcz1ASHswc29TCnpzWjFYcFQ0VGEtd09TcDRUcXpYI0FaNEBa Q1NZVW5nUWhofk9JMkR9c21MR34zSXokZSs0TkhSeD55WUp1dlckYAp6Xjxr QnhOKEN3WCFzbzA2P1F8O0RBV0ErQEh5NXpacVZCJitAbDgkOW94cjVvczB+ UkwybU8obXVBRztrJT09dj0Kej97JjAzdFIwdy1XTytfRj4tVkpAT3huJW41 UWReQzR3ZigwSUFzNUlpbXNDNHRfRVQ+OTRAWistKjhaKzY7dnJFCnpEbUw0 T1g2byklMVRoPkE2KnA+OTlXQC1PNmpNQCpaUU1xcUI5dVpRTWdXNz5wKmkj bSs1Z3VSZ1E2aHhWRHIkeQp6cCZUbWcqVnhpUTdLKCNUcTEmRGk0alZPZTdL Mmk7SURqNns9UV5PaGtIRmBqOX5qOH4rN3R7KiEzWF81NHp9KHYKenp5VlUp PWBefCttfGA+PEU8dXJENyM/emRwTGJnIXFFY3klNUVtO2ohQygkRFVheXpj U0ozfEFjUzBwYTUyZVV1CnpJPyYtKnd5dnhFTDFYSyRoKz02I0kxbUtCMmJ+ UFotOXRUQGg9MCp2NERZe3shb3h6cz9SM1dVNj9gITtgQyFuVwp6MG5ZMWpD bjReMXA2XmdfcktAN21TK0V8ckl9UzFEYEZUV04hVFcxY0JvZ3M1bHcqLWRg TH5VfEdieTg/P3BKIWIKejNfMW1zclh5dHprQ2g/UlJxKH03WCojbW8/TU9q OUNlJjNqS0lMTWwrKmpleURJX3VYUnFva2p2V35mRG1kKGNBCmo5NGhtNmxU VXkxfExnbiZ4Z0BgRW1eQTkxMDAwMDBOa3ZYWHUwbWpmUyQ7ZUIKCmxpdGVy YWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21p c2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2pvaW4ucG5nIGIvd2ViL3BnYWRt aW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfam9pbi5wbmcKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMC4uYzM5MTIzM2M0NDliZGM1YTBkNTJkNTBmNTIy YmQzZTM1YzY0OWMzNgpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTA5MAp6 Y21WLUkxaWt4LVApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7e1Iz RGRCajcwMDA0aVApdC1zMDAwMVcKenJwR3BqIUVlcChNWlcxdyEwQSlNPlY/ JHNsLVRmayZnX0hIP1RnZ3p0PjUhTnl5KncxO3Q7Rmk4bXtBQSNwYGopCno+ YHVQc1RFWFhKI3BzZ04/Xzc8QFdeMipSJkdFZ3o/WjNoOCFvdSM7KWJyVGNe dj0pbihiNGtNKWIheHNfaX5uQAp6VFpnIzN6M2l1ez1jPXNkdUNNOUUjXyE5 X0B4SCg5I200Wn4qN1UpVEh1VWt5QGEodDEhUzJTI0A2RkVnLXJufT4Kej1B V3lxPShEdXl5dUl6eilibzsrKFQxc0hRakhtWnJDWVBYcmxHYE1nfGJHK3Mm JFRxdDgkfD9xUV93SD82IylOCnpXJFdkaD5nMWo4PjlwX2J3KHNiKF42YlRn c0E2YGlKRCM8TnVHKD5VdTBIZWIjX3J+Xz9kN3JUOzstPU0hTHtVaQp6PUd2 QyEqT1RQYWttfXMzZCRVNjEpc2ZAVWtLKWdiPkRaQEAhQmd3cnRtNHApO213 UVMlOEJSSHIwKExxPSt+eX4Kei1NUDh6ZjRjNjE8PFgoISZZJFlvdyhSNHV5 enFxRnpKU31qZSVpV3k8SUE0djxEQlc/bzBpTzc9LS0qXztIfk19CnpzcXBF LUA4LWJYI2Y5QyRnNT1HZndMfFhhMDAwMDFiVyU9SjA2XnkwVyZpKkgzMjti UmF7dkdVTkJ7cjtOQn5DMwp6WWQhen4wcl5RcEt+ellgP1VVSkMoP0FyKFZe QmJwUm1ETTJsLTJiJUU+JCQ2MStncTtESj9BcHg+Xyk4SEVGMzAKejFxdjx5 SSFRWTY1aTxoPUpuK0pPbjNzSU5kdmVacXR7X35gTWRwVFI0dGU8eXZFaztl I3dNfShjRlVjK0JIdUV4Cnp3WE1DUVF8IThUfDNTQ053flZkQVQ9dmlzQ05H fX4+VXFATF9aVTZ0ZkJJfHkqXm9oTiY1Jn4kOFhnJmF7c08meAp6KSVXXzE5 UlpnbE5pTmokX1RCcHJoIWNfQVpudVBuS1lra2ZkfSlOfmdeN0dZPTgjdHFX UUBPbEpJamsqMSQjVz4KemdxWit5elctYXNeZGpSKWdFP25uQH12aSFIIT1M PDFtZmpOM3tNPisoPSlTWUN3M0JYYEZ3TnA2ZmUkTTcrO2k2CnpQMFRzfCNp ZkFCS3lXen1VZzEmXjxVcXZ5SDMrUyl0dyQrZG9hZ0VmTH1IZG9JRyN3UkQy VmZyN0pnY1UwT15nKgp6VWtWTHpvR1hyeSM0QFJAbEIwTldzXkgpRl5wNGZm bUFyTjI0XmhkZnMrT215ODBHVyZmLW9Oe2dqY31JRTREPXQKendmTUtCUUBu dDhYMWhGUjF7ek87KzJxKlA0ciNKaEQkeDwmYzZvT2gzVHlGMTZ3SlJlaTJB Kk4mTyZDKHlRPkEqCnpUVGRoX1Y4Njx8dUlwNFVNbEF+YWExZ0RlR0dIcUtH cUwmeV40YnUjJTZAbitlRV54UHFVN3U8WSVmTldIWSQqKwp6UiU8RlJsMT9O eXYhR09LSEh7YUVDWE1vZVN9UFYwfDNqRXd0bnh1bCgrPX5PUFY5UUZXe3Y+ PFdWZ0JzbzBXazgKejAwMVIpTU9idVhWUlU2V1Z7JkMtYlklY0NGZmxNS0Yp fVNNRjtwQHpJeTVzbkcmQ3pQSDk5YWJJR0g2TDAwMDBiCnpiVlhRbldNT249 SSZFKWNYPVpyPEdCN2JQRWlnR1BGZm1qekdkZVVoSXhzZFhGZn0/YkZ2XiF6 dE47SzIwNypxbwpJTTZOPCRmP2V4REd5bmhxCgpsaXRlcmFsIDAKSGNtVj9k MDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9l eHBsYWluL2ltZy9leF9saW1pdC5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0 YXRpYy9leHBsYWluL2ltZy9leF9saW1pdC5wbmcKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMC4uY2MzZWZkNTlkNzA0MzYzNDllNTQxM2Y4YzVkMjY3MzIwMGNk NzRmMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTIzNwp6Y21WO2AxUzxR OVApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcwMDA0 aVApdC1zMDAwMVcKenJwR3BqIUVlcChNN2A7QyZoTDU5P15NRi1oU2N6OCRu MHYjPn5HNUptZjcpcCZoM0tIP1dXJUhqQDBndyo2KiszCnpeOTg1ak9+TDZL dUgjJDk+dGVfMklKZjBjelVOaUk9VUt0JFlzY3VoVmBIZm83d35kJj9Rd0RH YUIkfnVhT0gxcgp6O2NqbC1aRWV8WFl9MEZOaE4peXlqVHltQEh1VWt4QGEo dG0+JGRhbiRNNU8xXlg8bSs/OFdacHYrZEB4P2Q3clkKej4le0VodWs3S2o/ QksyTj0pJDdMVkMmX2M+ZkBhNj5iMj9NbiY7ZT89aThSLTxGTXR8bGpZVHQ+ KSktVyV3XzFfCnpuZGFHKjxrWFNtKH4jPWpzXypFdD0tcnMrKnAlYmFrRSt2 YUA4LWJvPGlEPWphTDF+M3ZFRnM8PGdufUJ0bSlnVAp6PkRzOTc7a35ydWRB OD8jeGF4bzYmV3ojQWl8Tj4+eCRBKUEoMm41QmlSam0rPWhtakApdXJ2PHlV bDU3P0FeTk4Keih4Y3xscVVfd2ItXmhwRyMpanQ5cX17QFUtTkF6OCg0cFNN aDF8ZV8tTlNfMnpKVFA7cFlQP3M+KU47RykxJjZtCnpxMiRlOzxJSkF3Knx5 cmRlZEVpWDM3d0pYMDAwMDFiVyU9SjA2XnkwVyZpKkgzMjtiUmF7dkdVTkJ7 cjtOQn5DMwp6WWQhen4wKnB5U0t+ellgP1VVX081PlhWIVhgYEBFKVIzfU5m fE8qQiRtKXVgQnlTNEB4UUl6OUZQYWRiQ1d5I18KejVReElSLWQodDA7OV5l cHA9TndPK31XS3V6ZDgzZyYkJU1lZ1peempCNnRsdmclSU1nU1MpQCpKZTVj IUwmVlV0Cno9aDkoZmN0aj19Qn1UYF8kNnBZRmgqJk97aS1gJF5MaCtKI0g5 MHZjQn1RSnFuVVdEPik2PiMlOzxoZG1sQnFqJQp6bk5pK05HdU1kblpKJCZz bTBHMSV6bmgoJW90dkF9WGYqR1U9STUzNz5ZXnBKQWB2WDtiaC11cFQtMVl9 cU5wV1UKenJkSkhCdXhkMSFFcjY+IUIwckRfKFhGa20+Q2tEbCtKTGcjP0tJ RjFyO2BEciVrQjA2dUllSG11YVFObylrLTE2Cno+IXJjcV4hYmNuY0tnPl56 KlJ6c3QlVUA8LVZGbVZLM351VFg4LSE7UDI+flZfUkA5ezs5VkhIRjFBPmY0 RlJzfAp6QkE/T0U3dk1HVSM4c1Zuaz1yRHgxXnVGcCghKX1Lcms3IUxoaFoj V0Y/KyZXNVE7PmpGfkMpdzleMVFuVXJGQUQKem9kTyFXMilmTUpNUHhyN1BY TW0hYmxLaGVoUHFIenlGQ0UoaFFxbDdPd2k+dkx3R1pwajZnSVZQbyk3QGIj S09oCnpeSTQkNXR+aWBOMjIzdXVLTVpWZ2U/Sk98UjRSMTx4VC1nTz8xSmZj NWxiSCY5YCZkSEMhMmg4WF8zQykoRVQ+Swp6Q0VrVG0kaTtDY2xSV3tVaG01 b0V0WnliK2V6NVUwOU9PPDxeTj18ITZnWGtUPXlJVllYS0B4T2wqUXBgdjZ6 OHUKenA7UWB4bkF8O0M8UElUVUVTX2g5RTB4TD5WWmBESXZwKm1ke25iU2x4 dXxsTE4+dmN+P0lzSSFMR0wwR2Y+PEoqCnpLN3lsc3pJRl5KN2FVaUdZTmRY OEM0OH03N3cyNlVeK3UhNzZoXylocDNkZGFVfkFgUmckdi15V3JTUH5NJXFo YAp6dk1BUjBFWU0mcDwjTUJiOGA5JX5ZcV9aTkYwUHUqPUdFVnQqbnxGYXtS R2E4MTdIUmoqUGozWTAzfiFxU2FmN3oKemJZKGhZYSVFdzNXZEpmVEYpJUdM R0ElR01SNUNDK0cmNEZoRyVHTVFJeHNMZW5JIz9vMDAxUilNT2J1WFZSVTZX CnpaRXN8MFdfYldJRmZsTUtGZ1l6U0Y7cEAkSXk1dm9GZzdiTkg5OWFiJTlt QkYwMDAwME5rdlhYdTBtamYtK0dIQwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAx CgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFp bi9pbWcvZXhfbG9ja19yb3dzLnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3Rh dGljL2V4cGxhaW4vaW1nL2V4X2xvY2tfcm93cy5wbmcKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMC4uNDFjMTE0OGJiMTg1Yzg3ODk4YjNmZGRhYTc2YmUzNmEx NTcwMzMzNgpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTUyMAp6Y21WPE0x clBkKFApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcw MDA3OFApdC1zMXByS0wKellpbjw5WkU8ZEhiI2lqSVdLbzIzVCkxVVh4TXh3 Z1g7Rks0YylEcyl4QCVFM2h7M3ZVUUdSQFV4XllvfWV0eGBqCnpRRzxZaHlt ZTg5ZmBZd3hRSFh8eXpJOylOaD17KntRSCtYOzM4fmAwZj5EaShqRTs8cXo9 VG5iaipmRGNwXiVTewp6ej0lPThoKjZTfmw5UThAIUgraFltMytkRVFJKGFJ bTZuIzRtelM1QW44Y0QlI0YkWXN3ZEk8Z298flNZYio5SWgKenBgcFRfUU8y SDhvfTs2bHFAPjVBUTktPXUlYzVBeHIlfW5NUUEpdCslQnhZPXM3fWhRUU9C PVMlJiQ/V3Y5Wmp1CnpRbUNgRFVCdjRCdHBUZEZ3V193Wlc1KCp1d3BEQSM9 eEU2NyZibkJ3eTFMR35TK0JnalpwLVlqelBAJE0/QXA3Mgp6dzhGeU15QH0o IWJLSmd3fEdoQUsoZUpqeiNONUd4Z3dnS1ohLUlzPUBaUTlQLW99UUUpYjhL TWh1X0dFaz01P3QKeiQlKjAyaWtJMig8SUE0biZXeipDcDUpRCo7P1J4YyZZ eiYkQCNFNXU8PE96eih+IyFUcTJ8JHw8a1hTbyh4VCttCnpsSUdLKzw8XnR0 KVRIT3RyTE4lZj1HbTAhKlFWJiNyez56MD5EajJ+Kz9WT3ZzcHtGYj5EI0w3 K1BDUTVuZDtyRAp6P0EqQk47Rnt+K3RuJUhhP0FeTlMtPnZmQXJ8ak9rXnht b0w7SH5ROG9iPXpSP0JUQk07SmZQTm8kVFZUP2N1IWkKejtpfk44dT1MfXQ/ ZDdyYjxnZjRLelV9Nis/Jmg9YTwtcXBrdmhlMT5gUUA/aT0oRzBjdi1hbi1A OURNcT1kPHdYCnohdWFVNkBhKHFzPmJtJnF4YmZANntwejsoPzdIJnAjcmZe TmBSPjJAPyMxKSkkcDchWmBTSE57QHhsQT8hfmdOVgp6fE1BbE9edihiQylj XkYrfE10aUtfUjBWRCtXKz8zfE08PFN5VXs4RDAwMDRXUWNoQzxLPDN6SDAw MDA5YTdiQm0KejAwMFhVMDAwWFUwUldudTd5dGtSRT1mY3xSN2w2fGxqJkN5 UTVlUnhlSCtfTiVXU3VzKjwhbT0qYEJ1OEI4aUhJCnpDfm1sY3BvandtMWdN Tl9oTjA0QUdeSGt5TXA7X2Z6V2lDO3hweCNpai1Ka2BiTHhaZGhpN0thbmNz UWU9ZWgzPAp6M1l3e1pQek1PTXJjXiRKNURFbD5SM2EtT0YpQGU4eGdyITY2 VUFCQyolZEBaVVNaKWFmKV4xKUxfYFJQMWdNRmAKenJQJGI1QSgwQzRZJDdp P1N5KUs/TDZfWS1xcWFuYjxNKypJPHwmbVVjQVpiVm5SZX5TTzdzQ24xX2xP MyM/PDVTCno0MXBuclZTSzx4KTNnXzBBfH5aUiUpMFEleFZTfEs4UitiNl9p KlpJWTs1Y1VqTk5NTzJESChyYjh5Sm5peVBSLQp6KHRYPUdxI1lzYzdfbD5l djBBTSg9clpjWWtmQFh4ajR0MGxuPyplQj14M3lUYn57QTZ0KyRPZGFPIUdt U34wVGUKejI0e1RFIUM+U0MlfEd0cTVwdlB4MXp0eU1ReDhJfT9edl8/XnFD WEs7dCRPVm8pO1l5YlB9K1lmaSEpeHZkR288CnpxbzJOZntQRiRzQEwrJWNS QGZ6ekVpbHhfRmhqdUMtQSgmfCpYZU5kZkY2cFgrXkVhdGNjYTU+NEcjQTlL M1VIcQp6Tmw4aFcwV1B7Jjd1OExHUVlqUVJncShZV2tXbShTNyZlWURifl9I JT1tZF9NPlBpWXczUG1ZS1BRQ1VjND9fSjIKejNZSkV9d3BPWkM2c1JqTG0w SipVe0ZOV016aGQwV1dFWENtI298SXB7MGwjRkh7YGJ4Sk4lcVFNaUZ2bkcz P0BfCnp5UFJINWRzPl58Uy05KExIYUJwWSY4ODAyVyQpOHhGRiQ8IWBSIzQq ejJAY3g1Vyh8TGJSbVo+JXRaekhkVzd0Vwp6LW5NYVZTbT4le0F4anB7cDk+ TUVQNnJuUUUyVUI/PlZRb3lteiNtOUFZWX5qZHsrIWIrUWNhaSkqPiR8RzY5 MjMKekNMe1J+STZ3ODZRYFV0R3gtYzAhSyE9X3JUWD5QOTBmfVd5UExJQ31N Yil7dik0fCRkKENnYmtpJmooQnome3dDCnpBTVhIRz1wdlR7OG1VQzA9MTFe aTFSe0RfdTJjKUVCb2dyeTIjeiFtQSM8aEREeGo4IyNZJXB9Wkx5ZUw2VEd4 Jgp6RyokSldVYWVIdHxGeShpQ0lkVkx0WmdLeloyPTh4d0hrSSZtWTNKXjR+ Nz41RD05QFQjSEA+UWt3e2Q9an5NZFYKeiNsV2dYIVRPT0JlbmJ5WExDZEt8 IVhpcXNTWDIobXJiZ09HRXUwQH5wb2BqKWw5SmtLNT0pPSVSP2dKX1NpYjt9 Cld1aWN5eW1YJVFlMDAwMDxNTlVNbkxTVFlHckFiMm8KCmxpdGVyYWwgMApI Y21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3Rh dGljL2V4cGxhaW4vaW1nL2V4X21hdGVyaWFsaXplLnBuZyBiL3dlYi9wZ2Fk bWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X21hdGVyaWFsaXplLnBu ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jM2JkMGJiOTBkZDJlZjFjYzFi YWY3ZjkzMjgxN2QxYjZiZGY0NjNiCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJh bCAxMjIxCnpjbVY7JDFVbWJQUCk8aDszS3xMazAwMGUxTkpMVHEwMDElbzAw MSV3MHt7UjNEZEJqNzAwMDRpUCl0LXMwMDAxXgp6eVVjXkUkYVNYMkhpKkhW JkVBYTEtSUt9UHM/eS1IKVpuR2gtbVRLI3pTIWIkJTxWKEg9fW9gclFeTStu KWJOenAKekBPc1lkaHR1d0AtfTdzeyo+az95NVViKjMjcHFuYT41fHAmcFJL SGFvMSRgLXB+JGE7O141MlItb3dGPEh1VWh3CnpAYSh0VitxZDE/dyYyfnU+ Kms7ODxldTs4d2QmKVktUHlKMjtoWFIxdio2c3BeNmthVXlgI3NmYj5Hezs7 b1p2YQp6PUNia1gjTjV9ayt8eyQqK1E4QEJtKiZ9Jj9CbFRBKnRPZiN2RllI Tj0tLSpfO0h9PSt6VTAtQjtNPlRDc2JvQCgKejhTdik3dEpHfVcqMWgxYCRG SkxSdipDQn09KSZzVnRMZmFUPyY3YEwoWFpMaHVHIUE1cVF6Z08lVmU8SmJH UFN3Cnp4YSl1OChVMFFKak9wMl4rUzBKeClWc1J1ZiNKLUc9K34jJSUmZ3Fn eTVQISo9aG1qKip2MEpLeTQldmErdElrQAp6KVRITHFxdTByKS1eaHBGI2Y5 QyRnNjdlbyp2elpnJWQ2Sk1zTV5vQjxqJGJuekpUNzwhfFUwJCtSbkd5Jjl+ JnUKenA1eDQoPElBNGEjaXJXMmVjUWMlJj1nYyUwMDAwMWJXJT1KMDZeeTBX JmkqSDMyO2JSYXt2R1VOQntyO05CfkMzCnpZZCF6fjAoP25DS356WWA/YjZw KjhiSzVYVV93dyNqR0FJMXJWWHQwQXw/eVVOPlBnNzhiZ3M3TGtxcFBDfHlB UQp6Xn59aGM7fHlAfXomU2EyQElLc14qPkNSdD9rPG5fUTIoZU5AbGtPZEo5 I1dYI3I2OUt7RHM5dTtTJkdKKTF+RVMKemUyZlRJUkBhYHQ1V0lZfnpXIVEo aztPTH44JHQrJDMoRXZxNl5UVGZmfGEkbW85X2czUEk+PFU3MXVISEBpcW41 Cno/O2lsTUw/UkokOVY2NzFSNFUhI0l6fVdpbk17SlpUdE5gMlFtS0BwdTJO NFdhYGBOeFFmWCFvdCMkXntYbXJ+Kwp6O2okPGNgV2FjJj5nXnFqZDsrTXJq Ki10NER5fGIjNmJkKitQdCU1cERRZmk9d1BRM0ljWm49OGcmeHAqQ0tFJHUK eihkYnxiPE5tKGNmKWo8LVlOWXtmR1RCST8pKlQhZ0F1KmZuMWhIRThYdXow a0hVfikjNGs1OWElfSM9ZFhfVWdpCnpJMl43IWFeeVpqV1NuQnhabnR+Pngt c2BMR1A1XmtVPkw+KVRyQTY7MENAanhlTDAxTytPPTNMVW4hNSo+K3xDOwp6 I0BKOF9IZ0ZiWDBuaCNJe1FVVSVge342R0g7K3I8NFRaeElsMD41e1Y5JGNW KnE8cEVLaFlHcyk5TGg1ekhtSUEKeno9PE9vMnRYMXtDUjJDdS1BRXUzM2kr cj1KZXwocVdTay0hT1Fve0ojeW5taE95TiZ0R1AkfGB1QGpiIVdrRUtkCnpG SnleTj40YClWZWt4WmltR0NLQ2loUXxURSlXRSFzQVE7T3dOfFUrQiRvVmpu Rm9iKGBLbSNYTTdtTmZRdVNKYAp6KjJHRWJAKUYpKHhWb0Frbk0kPTxmfjNf VjJ1amZnP005PX5DSjBQWCZyekxidilQJEBXNyRGaC1ydyRhZGxPVVkKemIk RWEweDxBMERhNEVYTztqbC1MZEpDb0stYHZ+YGFNRk9KM3dsI1h2byN1QlEt aTRsSzBLOS1NKTJWJldTcFlpCno+ckdfb15paGg9VUAofF9WLU5NZSlvK2p0 KGVQdTVBSz9IMTAzfiFxU2FmN3piWShoWWElRXczV2RKZlRGKSVHTAp6R0El R01SNUNDK0cmNEZoRyVHTVFJeHNMZW5JIz9vMDAxUilNT2J1WFZSVTZXWkVz fDBXX2JXSUZmbE1LRmdZelMKakY7cEAkSXk1dm9GZzdiTkg5OWFiJTltQkYw MDAwME5rdlhYdTBtamZWSjN0KgoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9p bWcvZXhfbWVyZ2UucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhw bGFpbi9pbWcvZXhfbWVyZ2UucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu LjNmZDgyOTlmZGNiNzI2MDRkMGM5NzgxNmQzOGVlMjVlYzUxNjk5ZmYKR0lU IGJpbmFyeSBwYXRjaApsaXRlcmFsIDExMjcKemNtVi10MWVwN1lQKTxoOzNL fExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3MDAwNGlQKXQtczAw MDF6CnptQzxIdihhcH5DeXVJd2QhMHBrfF4zJkF3JEg/ITskbmVVX0AhUSs9 KjRPcG47ckZKZj1CY2FhIU5Uc3YjcVlKWQp6PiQkcUAhXkgyISNfKSF6V0t4 WThwflBOd3JwR3BqIUVlcChMQT5abiEwQ0lAP31YRnZXNSgpZSRuMCoqPzNk WmAKenB4ZzA7KGU4fVk/dmQ1KnVIZj90c3A0SjQ+TjIoRWI8T04rJExPUVNW UkR3QyFIK2ljQFd9QSZ3KHNlKl5YPG0mCno9Q2JZT3ZHTUR+PmcxajI7Rns7 JG0qP0EtP0JsU2Uld184MW9hbyt9PUdtMyg7Oy1vNG5DOTcoPD0yeiE7SHs/ Ngp6WFlBbXZAYVYkRnMmJVc/WjBwfng+ZkVhRDwtcF84a0tAcGU+RHNBYmxg bWVIQ0Jld0w8a2dhSm9rZzA7VTNqaU8KenAwJFUlP1NiVWVrbTFkWWk+cXZp eWlKfFpWfHVWYXl6cXFZPGlGfElyfCNtdHpzSSskLWZfNj1mQUhxTz0rfiNg CnopfWAmPXlXen09O0srI0kkQXsrQnF+NjdhPUZfOSMkJSk+P2gyNnUwPUZ5 XzstTVokfHFVX3diPUZ5PyQmIU93dQp6eDdAI2crcjU5fSZZPDFGZzUlN2RJ PztvXzAwMDAxYlclPUowNl55MFcmaSpIMzI7YlJhe3ZHVU5Ce3I7TkJ+QzMK ellkIXp+MHY8XzNLfnpZYD9iR1g1KHJfM0RhR0RufkV6UWMrZi09aHQ/ZWY0 Rl9aVDF1d0YlUihMYl49V1dmS04wCnpGcUAkSz47MS1vYjY5N2AtXyRwfkBP a21QYDwmPFp7cURAK3hFI2s3IVdoJVc1bl5uN1ZxJWhUVVkpdSZPLXd0VAp6 R3VIXyQ4TlY/Kko0Zjd7cFQ5TG1PeTBnVEhTQG9hdnU4TytWOzdoT2FeYjlt eWh+bikrQHAqIVo1Kk5ReVdIKnYKeilXZ0xgT09MNTElVEhJSFFDUTtnY3N5 PXViIzJZe29MWEw4ZTZmTmpfTzg0ZkErUCVISCpGak51Z35aNmZ8c1VnCnpL bG05WTVDa21vZytkYDM9eHtqOTAyN0h1VzB2SWdLT31BdG1TckZpTyhjPndO SVpAUiE/TExXIzFpWjJqM3dESAp6V2ZgT2hwY0tKbUhqfjRXSCgtb3VUYW1Z O1NOdEA/XyNxZ0pDM0JHRElEUWtiZ2tlKD1sd3YpTlFnSGN2TDlpbFEKejh7 NiszISshdm5SMEl7OU9zOSgrQFAmZGsqP0lyckJRaiprRnNScmxEbUdnej8o JkZ+JWEtS1I9UHpIa05zPXN5CnokYyZgZWdGUWowTkxKKDxHVChvY059PyF8 SFhCMWBYQTR+c2AmVis9NEVHWkBjfG5qc2w0V0p6PmRMUzx2N2FUPQp6UGEl fWMpZTZXcFJqcj53Mjkwc01gR1BeSlJUJmh1KFAqQVIySCVDeDhec0QkTztl IVdffDxDVCR1TmIyUVhEalkKenctMiR6V0BEeCtsMkROKSpzc0B7MlhPZEQq Tl5aSXQ3dXdubV9xTSN5MnA0VFljKjdDdigtQSQ1JFNlJmMlckIoCnpEekBE Xj5GOTlXd003T2diUiklNHVoK3c4SVkob2NWPnkyVFduclpBQ21hREIwMDAw YmJWWFFuV01Pbj1JJTlIVwp6VlJVNXhHQjdiUEVpcDFKRmZtanpGZ2kzZEl5 NXZaRmZ9P2JGZ1RlZDlzbUZVQzNIbnRiWXgrNFdqYndkV05CdTMKdDA1VUsh RmZBfVNFaWZAdUdCWXxmRyYoUmdEPTstV0ZmaHVPUmpkRjIwMDJvdlBESExr VjFuJk9QeVlZXwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0 IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfbWVy Z2VfYW50aV9qb2luLnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4 cGxhaW4vaW1nL2V4X21lcmdlX2FudGlfam9pbi5wbmcKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMC4uN2E5YWE1MWZjZTlkNzc1ZjE2OWY3MGQxMTU3NjFlOTgx NzU0MWM0OApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTU5OQp6Y21WLUYy RWg0PVApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcw MDA5M1ApdC1zMDAwMWAKenNOYG1BKGFnPjl5dVIkZHp3TilsP2E8TmspNzEw RiRuVkk+QFhPMmIrMW1Cby0xWEFhXlZIUHopejxYaztyRzB+Cno/NTMjWnNI KjN4dG1uYlA/IzBGTHc2KkhDeDlocE8/OUk7ZChiNGs1I1A3dyVAVztzVCpW cHgjeW0oVEw4S0p+cAp6aU1pVzBoezBIIyVXdXVATVpXMXchMEEpTT5WPyRz bC1UZmsmZ19ISD9UZ2d6dD41IWEhMEJQZT52cWxUcnJ6PkUKenl5KncxO3Q7 Rmk4bXtBQSNwYGopPmB1UHNURVhYSiNwc2dOPy1IeHhFVkpaRHl5bDcxP3hN ekRkWS05YmlsY09rCnopdVlFQCFIK2lkQHlZUCl4QWdHSF5ZRjs7PmJDRmN3 ZVJWKV5YfHNMIVMyUyNAN35fX3F7KDlJPUFZfjNwNn4wbgp6QDlNU2I7K3lI PW85Vz0xPyZxX3N0bXcwfT5iJCt9KVlTOCglVmdeMG8jQH0wPS0hI2A9Q1k+ RVg3S0VgPmZAZDIKejsrKmczdipfS0o9aUhhPTxnbHBFWCFHc0heNmJVIT1D YllPdkYrb3FAI0AyPShyVmtpaU01JTJ0SlE0dD8jSj0jCnojTyZqKj9CY0hN O0h+aUkhTX16dnpsPyptVm40Sj82UyFxUyQoNHExWDFKfV9afEw1Yj9CY0tH Kk9UU2RsSH1CcAp6PGphYDFVPm5JejhyTS1HO1ohRz1SOHNabTtiKXNRcXRS d3dtP2k0KjxMQkYhPUd2OXkofiNyUmtJJDd9OyM0VUEKenxOcSppaWhIT35u I3heeHUwRmNhcXEqI1c9R3ZDIypfR3drbDxWS0U8STw0aChUP0tLamxPNnch KkR+T3o9NE9sCnpPcXxZUGRheXZjP3Q7N1RnWTRuMUA4LWJqK15YckBzX0VM UHZgaUd8QDg1e01QTSo8WnRLTTxBPndtaUpmeFBnOQp6d08xREUtS15AfXRN QkIkPyZIMWIqe0E1JnJ8OCRGKFV4Y0gtbUshIWpwXjhAO0xDfk4kY1cjXmh2 MzRJPmZOZzEKeiZXeiNCak5pekktXlBhQyNmOWU2cXFsXkJ1d0ZqME4peUQ4 Z3lHREs9aGRhJiNmSUwqaDI2dTE9RnlfKSl+NDs+Cnp5WEBZJj1GeT8rK3Ft dUV5eW4hVD1GX0M/LU1afUR4YUg4SDw8RnR6Jlk8aHN4OThOUC1vJTk1ekpT fWtmOEA9ZAp6LU5KKzIhR2gkQHB4ZUJEK1BpK14lJTByOWYheDE9K1Baej8l YncpVXBYJUFSc0dPYyQwMDAwMWJXJT1KMDZeeTAKelcmaSpIMGIpeD5NNGJr Xl4wNUVfMDEwcU5TI3RtWTA3dzc7MDd3OHYkIWs2VTAwTD1BTF90KFkkNzVn XjEmbUF9CnpmSTw/fCFvPHdOJUVyI2IhTzZ3ViFeRiRTRkNmVDdQPlliVGhe UUVveFArdlhHP1I/MW9WPnpkKEwlYWskT3RoQwp6ZlRFSGpzYWxramxfPTdw cTZ6e0tRVnFmO3EoeE8tTHNMc3pSWXpBKC0jfUh9KDgkPENtN28/PUdqal98 UlYhOzcKelRSVC0jZGswNCshZGkmNCNUaU05Myl1WS0oaUkkOFpySFRBQldk eVFeeiFvWl9WRHJiXkFHU340aCloRyMrRD9NCnpMWGZxMWdAJVRPZHFoTT1N YU9zdSNtMj1hVkFZYXtxOXJVV0RaO30pSXlvZzNrQ3JyS0UkSy1hbmZATUck PU54JQp6YyhtanBZdz9Oal5Vd0R2Q0BkOzIhUSs9d0JyUm5nQU9Jb0RhVkJy MjNTP1U8dnRtLUtKVzhyLVlVfUQ3OGs/RzEKelRDcihxTClIQDBvfUUrZChi M3R9LVA3Q0dLY1Q7Rzt2YEhobGMhOWIjc0pGJDk7ckZnWExOWWZjRm1rTXlL bH4lCnp4cFV8QSZCTjMoZjVFfjxLc2AhfUwzJXVMbW4+YVk+Iz07ciUybGlU PVlhSXx1ZmYhXmNIUjA3UTxhcElIZntweQp6QGhJdW9Ud0NYe1ckVSk+TyV2 dlZeaTBAK3NiJU5kVUF5PH0tTTRZbXt7MmVHQSRGakRFPVVoSFRZITR6UFhe aW8KeilCJmBtWnUhQU9oZHF1UUokQyM9QUlLfE17UT9XUHtiMFlHb1ZEdUlj OH05JSZZbkF1SkgoJj44ZSRodFVBJVBLCno8TWB6KFNGaER5emozcWlSeDFN bTtJWnd9P0s4KGM/JWNoMXt7aWthaE58VnI+MD1LY2N8NS1NO0tAX21YJCVE cgp6bSZRPFNkM05YZGk8Y2crVWNZKCFqITBXUC1lM0syfEIxKCZrRG9xJENl fDw0P3RsNkUrVCtgJj8+fk1MdEw0R2gKelUlJWdhZUUkQzkmdEdELUpibS1f LSNkXjBLbVkjeVByREVzMT1zLXFDZ1QtUiF8PXE/MDAwMGJiVlhRbldNT249 CnpJJTlIV1ZSVTV4R0I3YlBFaXAxSkZmbWp6RmdpM2RJeTV2WkZmfT9iRmdU ZWQ5c21GVUMzSG50Yll4KzRXamJ3ZAp4V05CdTMwNVVLIUZmQX1TRWlmQHVH Qll8ZkcmKFJnRD07LVdGZmh1T1JqZEYyMDAyb3ZQREhMa1YxbjV2ckZ7U1oK CmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X21lcmdlX2FwcGVuZC5w bmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9t ZXJnZV9hcHBlbmQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEyZmM1 NWQ3NmY1MDQxNDA5MzVkNWZhNDIyZjlhNTA3NTQzMWJiYzMKR0lUIGJpbmFy eSBwYXRjaApsaXRlcmFsIDk4MAp6Y21WO18xMXRRQVApPGg7M0t8TGswMDBl MU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcwMDA1SlApdC1zMDAwMDAKejAw M3JkKE5je1dIaSpGb3NOeFctOyQpVDNhLSVnR3VIKFV2SGc+OHpkWS05eHUw Rk15ZXROTSVncz8/P3ZfcG9yCnpOa0Z7bU1aVzJmd3Jvem09MWpvcHJLc2Vt c3BuSXw+UlEzKWpsb2x3eUxGa29jJmU9RGlNaVdkI3BgNm49JnJCbgp6cH5Q T0kkNiVKc1UyKTZvcXs/RyYmRi1ob1dfciUtK3JFRj55QHxaTj9BKlZCK2B4 Z296d04laT9jS3FHZ1ZGOFgKeiFoXnJUP2NUKE0hb3UhXyliUVRMZ35HJHtp YDRHbCRBKiZDQDVSUk55M3dQPiNfK0QlYWdeQmI7bW5IUyZ5Q0I+CnpAI017 KDxqJFlXJkdGXlZweVNidzw8RnF3KHZReTFeMGVjNTxrT0psKFZedGprPj04 KTxrZ2JWKGVtY2hyMDNNNgp6dyYjNTEqT1RZZnJMRXVkKTcxMFMpYiF9cnJz JnRGPUd2OSUqcihSa150dFBRPkRqMn4rP1ZPdnNwe0ZiKnhCXkQKej90PHl1 c19OWFQ9LS0qXitxbWlBbiFOQ1k+KXgjQztoWEg7eTZmTXE/QjJUUzsrKldA dD9jMmg+ZzFpKzw7KDJpCnp1a0dReT9CbFFPPEZNYEh1O0FlTD8mN2BlPGd4 REt6VX0zKT8maC1aPC1oT2QhMCtnQEA5REpnPSl2JmwhdGQmfgp6QDlWYmw+ Y2pCdHcoI3Q/XjZiVSk/WiklKCRNb15aMVZxPTIwMDAwMWJXJT1KMDZeeTBX JmkqSDMyO2JSYXt2R2YKejY5NTFVNjlFOTRvRVFLQTBrS0kkS356WWA/VVBr ZyEkMV47dilLVVVMVUVVMSNvZ1dBb3VWITc/eWtpaHt4Q18lCnowOFA4dXp6 bzkrPWkkRVdkfkAjRXYmJTY1YGpOc3BRUyNKPWFQZEM9TEhTJXxWcGg9cnJ4 RWRYYUNEQn5WKlA/Ngp6T1NvVGlhZ3RLVlEoSCozSzBUKiFrZXpQbjl5KCZS KnxSQnVENXtqTCQ7Y31vV3duSlFCajB4K2hFIShaRzR8YjIKejU2Snx1cVU2 YWkqa0pIQFhOZE47RTtAbXNBU295ZWVMZGxJMkstSGchTz5WZml5YjZSTGZr LTxKU3B3dDFQT3VICnokQXtZJmNzZWBXeSN9PSM2Qk8jQCFpJmhtSGQ/dWF2 KkV0M1d1UUZOR001VXl6YCklR256ejd5VXF8eVM0UGtoRgp6dEZSaGVFdXg3 NypsY1U4OTtkcUtUaXIjTVhVb2FLNFA0QWtqX2QqRD99dnRuZ3Z5UUNLM0xw Sz5CYVYyOzR5NSEKekZjcF4+M2dSbElrZihIQ289WCUmUThKR2BtdHVVP3Zu V2MmR1hrKz18NTx6PikrSy1iTzFSKE1UdDBfbWJBUWpPCnpidVl3e1ZHQXsq TmlZPWBXVmI2MlFwdkR9cyp4RnR4IUd3QSk9MDhjdVJOYGdJYUchRXApKWZ6 c2FEfWFTe1k3OQp6T3ZaSXNYc1dCN1FYcigyaVN7Wmg2R2RLYGoxWDVRaW9F aV97elB4aHpuIUglNHc+JSYwMDAwPE1OVU1uTFNUWVAKQ2dFZ3hGCgpsaXRl cmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9t aXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9tZXJnZV9zZW1pX2pvaW4ucG5n IGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfbWVy Z2Vfc2VtaV9qb2luLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42Y2U0 ODM5ZTAyZmQzZjE3YjVmZDhlMzU4ZmYyMDQwNDZjMzhkMjZmCkdJVCBiaW5h cnkgcGF0Y2gKbGl0ZXJhbCAxMzQ0CnpjbVkrQ1N4ezM0Nz09VHFFbjsxWWIp a3pSd3ZPNXM4eFRTMT1wZHBFQlFTX3M2ezspKFI/I0JKU2o0SnEzUkpCWAp6 UURrWVBoIV9AQVIwSXJ4a2RURUM1PWNUNHZXRn59RUh9QVg/b0J8JE9ydCph O3J3VUwlPXc9RlE8YSRUPDZ7NU0Kens4MT4+OyNoMTxsR2o3dSVGb3coSCUl OW9wLXx7TWlFIyhfYztqUWRFPDEtZSM8N3pJITlsV3hPdERQeDlEKyRGCnph fDlZOysxUEJtTTJnN2UydyZpd29QPm9VY3pXN1I4VVMxSTBLUj51eT5vXl93 YkpRT19lKWJ4dWxXQGI8WnZCNAp6b0AxQj4oSFM9OGgpcGE7PlBVcjJ3KnZw NjlqfCZOMyRMVns+ayFscnQ3JnBlRjJAPV9XSzN0NkZMMXpDcksxO2MKekg3 bnVBRCE1R3pRO2x3eCotWml2aW9yIVV4PHRAaTZ2LUlTcTUxQkc0b2Q+NjFs RVROeEorUUg1Wloydj47dyhjCnpyJDspfiZTeDZ1aHtAZnxORy15KDw9P31w bmVgS2x7XnVfWk03cnFfR281bGY5SmFHO1ZESD9sJlcqX1F6XnFFYAp6KHJE Y1BGbCk4R1plZUFaZnJwND1UJWttU0xaP0ltRTBpdnlhcWNsWXZ6MyNMQU9F RnxlX0EkQkNGblhROVY3RHYKel83MzQwOGB1TXhkej11e2pZI0wqK05hYE5s a1JWbXckWjRydypvSTxJflRUZFV9KChja2VxRFRgaVBmKHRvQ2JACnpUPz82 ZGpNRUpVUm8jckQ3U3dqUlZKVTNtSUg1NzhtNXRjTm0rKj04cXNJeWZKQmhx VXVmU3IrQFdQO2NGZUFHVQp6T3gxd3VyKjVhalgmSDV4U3FMTyo4WS16RSN4 LSkmaUBLdFlLVWh6K21pOXdzYn42b0I2VUBwXk5KcE1VclYqPnEKelpDQX1l cz4qPWA5NTFzJm5iJjgmTig0KHR3c0lSVldSJGxYckZldCppQUJ9I2NCbyo+ Qm4lM2lXYFBTKjdeUTckCnpfOCtRfDNNS3Mtei14eFZOa350Rnc4S15uKW5T LTBoKzk+Uj4mb0dCMSpLRiEtc0NqJUFxfnwhT3xoem45NWRzPAp6V1EmNFlD TGIhMTRQNGM2YTFKQlNzLXs+fUxsITAzNHNnd35LMFVXZEpCQmsmXiZsM1Iw fm9qS3h2KktQVyNncDgKeiViPEpeOFpNPUhOOWp8TGx5Q3FRMXgjZ28hQF9n ZXF2eVNqZVckJndvU29oUjVGNH1XQWVNT3xaU3toV1peb0BICnpqdDx+Y1g9 QnQ7MkE0KSooSyo5M0h1TCtuQlFjM0x7XzNqNHVmRSQ/LWNsMkdfaHg0IWlK SGNYQ1o+K35oND5kWQp6U0ZkWUp1Qm99Vms+QXx4azNNWiQrdkYzcEBZSF9j Qnd4ZmtCb3N0byFqZEF3TCQrPT95YTcrQUA8Kms2Zyg5dyEKenZSQEdebWVC OFl0PDs+IStzKVQzYW93b2M7OCVGRHRheGQ3QEV8dFg8TUJuS0pAZT9ZKG8q en12ZmFfYylQWk5HCnpzLWk+eiVLYCVmKXZHPlR2MHtaVEBYT18mdWV5Q2BB S0k4NDVHJF5aQSpOUX0+MjhAVmlUWSs2alh4QjB8SWhlKwp6QUdRYkE5aEYz LTxtY3p4cj5aTTd3VnFQeUkmemJ5bmpiMl52Z3UhWlhHWEUhaGlzfnM1e3Q7 IThMaHhkZDIrSCQKemBhXk0xUDJ7ZDM1MFFBTz0jQSVmIS1seFZAKVdqaSh9 NUBQaG0oQChMemQmMnhqKVQ9K3QxR2ZGWFFVVHNOVTMtCnozQ0Z0JlNeVFVt Kl8lQGRGYDFQPE5jVmw7dnB5ITJebSZIOVU2fHQkNW1Mek1VO1Vicj1GfEhI U1IzRWFkcXg1RAp6VVNAS1NfMjwxPTtOS0x+YX1wWXl8SCFqc1AyfSZvamt8 JjszYiRZSSZ7emtxSlE7Nz9AZis/KUBUJCE/VnUxdTIKejYqfFIpPD94fnBt SVk+UD9EPV54UHNfKzZvNWg0ciZmWlluWUtYe0grV0llO01OZX5SdWRuUykj PH57OzI4SGB+CnpwOzd5MGVWNipfKiU5OD91UEBraHEjIWZCQVM/MWpld05v enBfbVglYTdidHtDZ2ZsIUNOZ1lHV0xWZ0BuNX5mKgp0JShsQXFZeUpuRSZD TldPZWVwZWorNVFmQSttNko5elh3S1o0fFJHMFJQM0lGNygjU2Y+MzxvcERT LWUwCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIv cGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9uZXN0ZWQucG5n IGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfbmVz dGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNWM0NzMxNmQ1ZDQx NjNkOTdiOTVjZGE5OWIyZTNhMjA0OTM0MWM1CkdJVCBiaW5hcnkgcGF0Y2gK bGl0ZXJhbCAxMTA4CnpjbVYtYTFncmFyUCk8aDszS3xMazAwMGUxTkpMVHEw MDElbzAwMSV3MHt7UjNEZEJqNzAwMDRpUCl0LXMwMDAyTgp6IXFBcVAoU0wp e2I5ZDJaWXRmPm08aDhmenlUMHRoI1A3aHQ/WkNuQSFOVHNzIXx1ZXpANVJS TiM+ZWwrJG5WST4KekBXeyZXJUZGU34lPDtfNF4zQmZqJmQlfTkmK15kRl4z djF1KVlTOVUpJTRmYl57Y010dUNlSCtzXi03ST9ZWDxfCnp2OXN4dG1FVXhF KXxpeyYhTlRwUHNMO2QyKDdlOXYrMWQ1SXp3RjF3eDJ2VVdvcz5uRGkhWTZW OE48U0spIUM4WAp6PUE3cDlye3dYVzxNNSM0QFNmdUNwNXBERDtxMDhAPzM+ YH5vOFJifS1zaE8kPSRfZiFtQ0AzVHpyMWtMKm8pMjYKemViVTs4K1R4U2Mr S1J9XmNGb1UlJkNjPCZ1dzBtcUVVfk92JmQtRiQkYUJ4bmlJU0Rrd1hsY0Mj PTY8eGpOUmd5CnorVFc3ZS1qVWhla0x2VGMkalJAaXFHWnxKa0ZCb2cqeFFm Mnp3T3VCakpMUyF4VmhgcypvQGB3dG1Fc1cqeU1vTAp6Kk5mfSZ6M0swfCl6 XnlNPWFKUmNpUGhETC1zUDZtKVFGZGpFNztxVSUqfW5UczghTD1pTzlyeCFv Rj9HJGJ7MD4KemhTJURUeXRackg7Z3tGZWpASCluTCFLKDYwMDAwMWJXJT1K MDZeeTBXJmkqSDMyO2JSYXt2R1VOQntyO05CfkMzCnpZZCF6fjB0LW4qS356 WWA/YllqMytDVUhoYTBFXlNtMEMtIWZgVVREMmJGe2NBODlSTU1kfWsmIzQ1 XzhYYEA2RAp6TURjQ3d6cG1tcSF6RmhvXjBuUEJuY1UyOF9JQj1XU0VLbks1 N0RJNj1AQiNaSSZCaiFuaGg7UlEpXnBXeVV9Y1oKeilBNj9Sb3lHRkw+cUI+ cylvUWliZFZCbHEtRFVAN3c5V2tre1JTNTRiaD1DcVo0Sj5HMjBqa0RTXklK aTRaRjtgCno4bHJiTzIxaUMmI2cyeyluUkBnITMmYG5sR3NTfihUUngjJDtf KUVPM3hWdGtHV1BXQTwjLTxgIXBDI29EelRHQAp6bS03ZTRDbmwhXkxIUFYt YGZEJjQ0MjVVRCV8OyMjZz5lNDQ9PVhVe2djcVdWT0EkXkBtWTF1KWQ+fWZ2 NjJ0Y3UKemk/NlAmXkQyQCtERG43KDMxTVg7aUk8KCtoO1JNPzY/cVByNms8 dWBWbHVZNSNVd3lqLURaJn5HRCFpd21ZcDNFCnpOdlROIT9lMTFoOFghI344 NmA9ZV9INVNwbCFwfE0kdGVsNGQ5dkFgZWJpZTlJWj5TantyWmc8U3dzPTI3 bHUtYwp6Q3thbG9fVngke0Jxflk2ZW09amlIWHo5fjB0ZGwtSzZJISQ4SVRM fkVPMnkwczBJb31kaWY5dmxUTj1fVnZ6N0wKemlJbUY+R0paX0J7M202WlBK RX04eGNaNW1gT2tlKyFwfDxRI3VYM3c8bX0/fGlsP2BXJGtKTm5kVFRxQyQ9 ISZPCnpCK0c/anNwN3g5eGFBbTREWTcyO2dOZjRMXlEmNyVRK2llRnRFMGkq O2lSNTZldXdxc3hgdUBsOHh7P1dxeWAzRwp6MUxMKVVBXnh3JUojQyRsRy1j UnFFQzJ1aUMzSG50Yll4KzRXamJTV1ducHc+MDVVSyFGZkIxTUVpZkB1R0I3 JGMKekdkZVVoRD07LVdGZmNmb0JfMDMoMDN+IXFTYWY3emJZKGhpWik5bV5j PnBwbkYpJUdLSVZ+X1RSNUNMPEcmRExlCmFIWStlU0l4c05HbXNQOSkwMDAw PE1OVU1uTFNUWSkhYzFAZwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZm IC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcv ZXhfbmVzdGVkX2xvb3BfYW50aV9qb2luLnBuZyBiL3dlYi9wZ2FkbWluL21p c2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X25lc3RlZF9sb29wX2FudGlfam9p bi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzFjMDc2MzMzNzYxN2Y5 ZmZlOGNmMTNiYTBmNDdmNGNiYzIyOGM1ZQpHSVQgYmluYXJ5IHBhdGNoCmxp dGVyYWwgMTc0MQp6Y21WOzsxflUxSFApPGg7M0t8TGswMDBlMU5KTFRxMDAx JW8wMDEldzB7e1IzRGRCajcwMDA5M1ApdC1zMDAwMiQKej4tbnAkPThLTnBk NDFQcll0Zj5tPGhRdSR5fSNfbSNfeisjQDVJSUwkSD8hPCQ/KGR7QFhPNWMl KzIhNyZocFJECnpeM2w9cSk2P19TKjdWS0lAeCNSS3RGN2oqdmdvTCk9REU0 K3pRNjZieCRNOGQ/VE5ZREhpKkhzeDlZT0E+NWBWOwp6YmE+VHVkRGZWbDts UlB8eFZyMWEjcU12LT9uUz1vT3UqPz0hcz48OEBSWm9fZGR9PkYoZH49Vz95 Y1lSeTFlVkcKenVJSXdVP2Q8TE9LKW1TKHNOeFctO3VAfndVQiZCaCVqezBS PTMycSRXWDAlYCkkaFE7PyFDWTViOW1LdGRlK0l4CnpAWSZoKio0RmdiKlkm Qk9kY2x1MnBea1RTaWBEUCQtQHYrb3NHbUBxa1RzMmc4VDllVkBhKHREJkdF Kl5ANkZFZwp6LXJufVkhZ2tmJGwtfW8+PUpjbExecl9YXms7MWBzPiprLWx6 M2kqMz0oRHV5eXVJenopYnJFWGlfWD02KTcqeVIKekB9MSlGbiN8TEIoYmtF PHo7dztkQHleZmomRERJPStLc2ZaVCUoKm4lRiVoIylzM2E3PG1CXzUoYW9k Zjs+KXdJCnpUaUAhSDtfOUwxXnJNLU5FJUVUPDtPVXYkeUB8RCVlJnpGYDxu Zl4yPSRQZDRxMjErez4tNHdYPENYQzJ3IWVsawp6d31nUE9VT3V4KzZTWlBM I0VedD1YMUtoeWMtIUhWLXM7cXN5TEd6SnF3RDNLPmcxajApdHxSdThfNyk/ KkhJJGoKelI0MTJJUXVYTkohbyUqWnVqJDNiQDdtdnpmdiFTeHI4aytwYzw8 fUJAOTRBQm9OVkckREY2VGUrTk8lVXpVPGxFCnprZithUWNCP3pKUn5FeD9M KWhHcHUtJFowalQhVXAjX3J+Xz9kN3JUOzsrfSpqazRmJmRhKiZ+Kl9Hd2ls SH04bgp6emkyU3o+WiNZKmpFdWxpPEk8MWYmV3o1SVVEZSl2KVpCWEI8ZWIq bWl0RkMyOz9SeFomNVBqNWlRdlBNPkY+SkkKeitJWiZhd2JqKiRAOGlEYypy KF4hclI/Nml6bD8qcFdrQVc1aFM9WVYqVzhISSlRaTs5aHZtP3I8aiRZIyp8 eWwqCnpqbm1TRytgZlJAeW5mb2RlJmZyWSsxLTx2alYjKV9lYUZVaHUmR3dC ciZZem1hTH48JiZDNz93ejs0T0xleFIyLQp6JGk7Zlh6SEgwTGd6REl+eXRp ITcmd3RPKGU4MFBCJEhSRW0pc0QpPmZZc0lYQ2k3OUIwMDAwMWJXJT1KMDZe eTAKelcmaSpIMGIpeD5NNjFhR1hEOSN3MDEwcU5TI3RtWTA3dzc7MDd3OHYk IWs2VTAwUT8oTF90KFkkNzVnXkBxbSR1CnpuU35WdnVyTTwqO0A4MigmY1Zz VyZCPz5kJDFmbCNCckdCLUNONjxqNC09Y0RsJXpEVzc5SlR7SVNENFgwKGtg eAp6ZlJiUGxXPEBDX1dmZiQxc2o4YEtYZm5nS0N9P1R4PTt8cng4eUZmSER9 WTU8T2lZIXslI3JPaUgmY0BuV0k8QEwKenUoWXphUUx3ZU1jV3tKZ1ZSZHFM Ri1MVyl4dlFIeUQ7YEB8b3Q7QDMmO1lCNENxbTUyOHc3bTdadVcoMGtwV0Js CnpgM0QzQjFxSnh+cD08RkQ0aGFiZl82fklsM3kpdyQqNWM8TTg1SkU5OHk2 NEtnUV9KWUF0NTJlSjI1RmFCXjU9Qgp6ZWBII0VNckt4YVBPZCo7RXFWRE1N bkdJYVZOcjJXUER5RDFLYG12aHRZdHRkRDdMKClxT3ppQHgrYUxBVSFXa1UK ekhuWG10cH13eFYwYk5UWUlLLU8zQXkkVD5yTVY+dE03MmZ9WiVaM1FPTFRo PihTR1VaMEJkUlEjSHl2TXlRakNXCnpmNUpxRjRxaThxbz1ISkxsUiNRSkMm UlQmbkt9KXNXJWBWbnZ1NGtrSjdATzFgNSt3JjdBezxiQEsoXnwjYyhaQwp6 bW4+WmRfUkkzK0RefHs0d1FCWTFSa1BPc0J9TFhRVHFxfEJjU2d8U2IjTmB5 bWFnQmgzPnNuXj1kMSRoblg/SigKejZJbChVenpiVHA4UjNeQDhANmwoK09s bz9qLTdwVFNBK0QtP0wkZzFGdSFjeGd8S0RBP21hK1R5bSMhfnhCdE1MCnop Z1YwfVRWUHJ5MXN5eUgoaTYxbjVXKzhxX2tqSmZiS2pBcCQ3WH1QMGA/MTMl Y1AqMTwwbm82XiNtT3tnJU0oPgp6Jnp3RFg5dVo8dEVrUElCUGg0RGxEVHBF SClNYm8jeHBNV3x3ZD50Q2B1bEYpbiNoMTtPVkk1KkFtMFJDekRxY2IKekxB PyhOVTUyMiRfYl9hXmUqZ1oxaGdmb0QoN0ghcEVzcX4jWHUxRjc+OWdscGEl SXFxTG9iMWV8SygjMGhqfkFFCnpfVWFXakVyRiU0LXZHMU4ranM4KyhYfjgo ZzxWVSlobVc3JGV0IUdxPm88Jnl7UWRkIT1pam1UI3M5fmJ1a1V7VAp6YHUq cEpLZH5YXj1sfG98YEA0VnR7bEZ9Z2FNXjtWPSk+WHtFQ3VYO3s5M1JUPE53 fDlYfjl9cSRSSmV+bjBfSHgKekMxSGpiIUhOJFBrV3N5b1FIaFVhMDA4PDJp LSVHYVl8UWB3MDN+IXFTYWY3emJZKGhZYSVFdzNXZEpmVEYpJUdMCnpHQSVH TVI1Q0MrRyY0RmhHJUdNUUl4c0xlbkkjP28wMDFSKU1PYnVYVlJVNldaRXN8 MFdfYldJRmZsTUtGZ1l6UwpqRjtwQCRJeTV2b0ZnN2JOSDk5YWIlOW1CRjAw MDAwTmt2WFh1MG1qZl9gJGBQCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRp ZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2lt Zy9leF9uZXN0ZWRfbG9vcF9zZW1pX2pvaW4ucG5nIGIvd2ViL3BnYWRtaW4v bWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfbmVzdGVkX2xvb3Bfc2VtaV9q b2luLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMGU4YTE3ZDQwOTM0 M2VhOTM3ZTQzZWJiNzZlOGViY2UzY2JlZTQ5CkdJVCBiaW5hcnkgcGF0Y2gK bGl0ZXJhbCAxNjc5CnpjbVY7QTI1fFhfUCk8aDszS3xMazAwMGUxTkpMVHEw MDElbzAwMSV3MHt7UjNEZEJqNzAwMDkzUCl0LXMwMDAyJAp6Pi1ucCQ9OEtO cGQ0MVByWXRmPm08aFF1JHl9I19tI196KyNANUlJTCRIPyE8JD8oZHtAWE81 YyUrMiE3JmhwUkQKel4zbD1xKTY/X1MqN1ZLSUB4I1JLdEY3aip2Z29MKT1E RTQqelE2NmJ4JEQyYz8xe1BDSGkqRyt0SjlqcDtLYmJSCnp3WVRjQndDUiRU LSprQUBiJFFtOW84aUYwP1lPJEAjS3JEISZGKVJXPjAhcH1jRnBYai10eEVS X05MJFR1O1RUKQp6PUpuRjxfYDFDN3RnaCQ2I08+X3VgTTwjSkspbVNedEt1 eFA8VmR7Y2lQUD8lLVNtam5AUml4fHF1dWh2PkdyX0UKej8hQ1k1YjltS3Rk ZStJeEBZJmgqKjRGZ2IqWSZCT2RjbHUyb3xBVTZ3ZGtuMzxuUWpeemBCOGBw SFEyU0hJMEU4CnpeenE1Pz82PjlTX319MzY7XlgoYD1KQFhKYG9oOT8pIVVU Yj1iaCZDcnN3cGopWXk+MSFGQjhBcFdXV3wpeiRPYQp6KzRTQXNfVVk7USk3 Z3Y4KXF2QzdoVTQ7YDtfI1p4KHxYYT9pTlV+aCZDYz04JisqbVRrPEhiNylZ XkAtdXcwe0AKektnIVgwKTc2Y29zTzA0SG9ZQnByPD5KZTt1VXBeaWw7WjI1 PUpjYlBrMWdAPTxLTzkoO09VdiR5QHwtSGdWTkxTCno8QDJLQ0B1MSk2bkJN MUA8bnAyMjwoQkw4eDgzOEZAYShwe3dScWQlbGl1cG9tJURZayhXQzMtcDZj WUNAOURJewp6IXx0dUc+Qll0RytUVzZhdTBuSUFIPGBTNkA5VmJqPmIzOWF2 LTlvN3l1UiQmLUhAbHhYTGhTUXhWaH11Kz5meGAKemJXKThPPyZoLVg8KzFH SXVraCE9KlY+Sjs7QzZia0xGVTwmPDxedHIofiM9aXNec2diPExSaV4qbz0o OFFzbVc8Cno8STwxZiZXITJVcntVP0spIXV5Nis8TTtSb1l2UWg+KXgjNSgy ZTJFaXtRJE09aG1nXkA0Q3wzYztATX4penlqYgp6PEckdzlyMG18aCp4IW9S Kz0kZkZpUFkxRj1GeV8lKDRwa2NwWD1HUyp4UVpNKHVVbD1mWk0hJitQaShA JWJ3WlkKemxiRFN4bXlJamIpUWo0P2UlaVd5JEhzSzlzYUNKMlJtSCteKDlN WD0lWkowalpwcEBlcHFEJHkjZF5XTFlzPClsCno+ZSNsdXdge197WlAzcXUm KDNfbXlKKk01YylZZjIqNDIqNiMoPnE7XndgKy0rPGUofTAwMDAxYlclPUow Nl55MAp6VyZpKkgzMjtiUmF7dkdVTkJ7cjtOQn5DM1lkIXp+MD4oKjFLfnpZ YFZfK0JzajctY2R0U0VxbW5UWmo8NG1OZlUKelBBK2F2OSRyM3YwWU0+UTVt N081M0F9b2sqZChQU3JJRUdwJGpIaGBGdUBoYkR9YUVhNShwQFJNVk04alJN cGd4CnotS0MrYXJMRHNaKlBAYFNyKkJ9V1V9UzchWU5pQWhWS0tLKnYkUjZD KlVEMVVUOTVeeSNtM2dvLWEqMDkkPVNzZgp6cUpgRFgtTk9waXR5WjMxLW1H fFJWUmQoQldrM1YwS0U0UHNLWXRKaTJuMnkzczFfTnBiWnwmJFNhXjc3TkhE cTwKenxBQCVRJE8hK2E9JFAySkt4OGUhQUBLPWBOeSNheEFVJnZCQkdifitC S159ZEdQQU4jdzFtWHg8bVRsVTZjIWJTCno1WXwjczNYJT5qRTNjQG1zd31G bTJfPmtkbVgpO0BOUUVjWVJufEF1SCNSa2c2Wjh1ZGd0ejNrd2xURHx3cylY dwp6PT4mJlo3ZFhWYVFNQn4qaEomY1NlJlRKSjBNWEp2RmBRXz5PcXZBTkdJ MjZpRW1NJVIpVXh0PWYlSHJiNTEkSXMKekdJPChZJWsmdkRwO342bW9gY1gq JVF8PTd5IWx7ekFudSNDMElwQG0hYk9ZMGVwI3x+Kj5aJG1TVmRPTW5gYlF3 CnpjU2lWdm0yZlJIN3ArPm83JkY5eEszU3Y5aWUkXm13RnRpflVjR0tUKDNh JkpIZzRMQ0M1XiVTdlVVcj9tZXBJZwp6MGQ0VyR4UDhhWVU2XlRYWVdWSXdB VSl3Kl85RmJVWnlWU3pvQXdfI2NuQ3d3KWJQVmNqdmZRKjNFejdoQmc5VWUK ekphemdFaEwtVE42T1chLWE2WChOe1ArY29jKTU3ISUlI2cxZWdYUkElMmtr VyFZXkRTb1dgS3VobERPZV9fZ2E4Cnp3cF9rKF5WViVGQXJgKiE0cF9fR3lC SnotLW47K2NBKG1WanslRyVHVkImdnJfYkc7IVRoRT85JEVHRSQ9RVh+Mwp6 N0pLI2pPJkdlQ2h0SUtWMzRRelN7aV9lSks3UlUpayYoWVZlRTlHUzdRY2pp e3JLKG1fYThyaHtTRn5FI0RZVjwKemV0ekB4Jik/c2VnJVUxWEBEelBte0RQ JWB7ZkEhKndxcEY+ZXwlYzdSdShjeWw/QTM+MnYkaiRBeDV5YCF2dGhoCnp1 VmhyPkJOell4YEtPSnAod0J9YTAwMDBiYlZYUW5XTU9uPUklOUhXVlJVNXhH QjdiUEVpcDFKRmZtanpGZ2kzZAp6SXk1dlpGZn0/YkZnVGVkOXNtRlVDM0hu dGJZeCs0V2pid2RXTkJ1MzA1VUshRmZBfVNFaWZAdUdCWXxmRyYoUmcKWkQ9 Oy1XRmZodU9SamRGMjAwMm92UERITGtWMWcrRShHJm14CgpsaXRlcmFsIDAK SGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0 YXRpYy9leHBsYWluL2ltZy9leF9yZWN1cnNpdmVfdW5pb24ucG5nIGIvd2Vi L3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfcmVjdXJzaXZl X3VuaW9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42Njk1MmVhNDU0 ZTM3MDNkY2IwODI1MWJkMjI3MzE5M2FhY2FlYjI4CkdJVCBiaW5hcnkgcGF0 Y2gKbGl0ZXJhbCAxMjI0CnpjbVY7KDFVTEpNUCk8aDszS3xMazAwMGUxTkpM VHEwMDElbzAwMSV3MHt7UjNEZEJqNzAwMDU/UCl0LXMwMDAxcQp6eCFYMn4h RWVwKE1aVzF3ITBBKU0+Vj8kc2wtVGZrJmdfSEg/VGdnenQ+NSFOeXkqdzE7 dDtGaThte0FBI3BgaikKej5gdVBzVEVYWEojcHNnTj9fYHpHLXM7cXN5TEd6 SnFoQFEtJSsydz16d04pbD9aVShGKTcxMFcrNFJvT14zbD1xCnopWVNDZztQ LSo5TFVOQHhuWT8oc3ozaXV7PWM9c2R1Q005RSNfITlfQHhIKDkhb3UjdyNf LW5HXm1DOypyX1gxMAp6c3ljUzdKRndrIVFqSG1SdDMweWNjNnpadWpLRVRR dXxjSiU8ZEMqKCp5WVFpIzlvQjNNUktEeHFRX3ZRJTQ0VV4KeldgPyMmY0Io dEIrSHJXVUtENlVgd1Y4Z3drMmEwTFF9cHI0QGEodG4/NiZYZncpNX1EXjZi VSE8KzFKS3U8WVdtCnpAYVZ5fD1Yfm5xbyRCTTk+RVdDMj0oRmI5bUYzcnk8 a2didi1tSk9uZkE4ekk+ZilUfS08al5fdmgzcnA8a1hTbAp6KHZSdWZzKFBO T3k2JUdTPjlwektuJntxez1pSGE8PEZNQER0Pm57PzxJI0BkJnlESFhzQz18 VHl6cXFjP1opbG8KenZHQ31eQDgtYmorXlhyP3NwOzZLP2N1eloldzV+UGlT Zz5nQDghU2w7PVNuQ3J7fnFCPUczSUAtTVp9SXVIQEJgCno7P1IhaCpRVmRj aFRnQDYtTkorQShWXj8jdD5lKjs7bXdRWilUR3xUZ3h0Vl48PDZrdSZXeiNB aXJ+cUs9RiszeAp6IUdoZXNmIW5AKzxqdFAkPEckP1B5NmZBeDw8RnF4Jlkk WXB3cGNjKzFwb2o1MGQhSk1Rdmc4YiprJTkjMDEwcU4KelMjdG1ZMDd3Nzsw N3c4diQhazZVMDBJaDBMX3QoWSQ3NWdeMT5eeG5DSj15PCNBI3QtVz9eTXhY WDQ9RztedHVACnpRVlRDMXprbmM8a2ckbFQ3X25NTnc/IVE2M24pcCppeFFH akt2RyZwUiEmfClUMlY8Xk1PQilSPCZ0WFo4YkI/WQp6VEd+M2codDcjXmhE T0wqdXpGRi0qdSshPXJ4eHM5KUcjeCp6QC1KZDdve3cldFRrfT8xLXIxTWpW O2hHY0c0Z0sKekJeZmo8RWJKWT9UQ2lHPEV5T0d3OWk2fj5hSlpLTig+TShh WFBfUkV2O2YxeiswZz1iYllhIVBWQnJHTmc2YyZ5CnpFJEdIc3hNSkRAQGlx KSM3LSEqVGZuaGwkcTJMNlA/ajlLRjIkRTI2MHgxdHFGTnx+cVBBSXM2aExe Vm1ucU1GWgp6MSF1O1BeNzAwejNManEoZlJmT0pmLX1pVmBobGM8e1IwQW5m XyswbSFAP3RjKEx4TChWXn5DalQ8c2VlNiYofW4Kejh5WGola20hciVhdHZF NmxFN00kUSh7dW5lQURBSUdQQlVOV1BeUEhDQmEmOXoqPShpQChUKW1pOzdF MSVoMHU7CnpJdk47VzxyUUVwbTEkTGwpeEleZ2JAZEdoRWY3RFVJJEZiYHly TDE1bEFGTGAxdGsmRDN7Q344ajwoMUY+SHleegp6LXskYjUjMWBNeXcpVCFy Z2V7TyVmYSsqP3VKckJkJmdgbDQ/ZHxLSUZjSFp3OzhjTCEoRzAkbUNZTWZX XlBNX3YKeiF0QHpQd3QhT3NjMUpWIyozTyhZeVdNeHIrPEVnQ0FoYllJMGRf fC1fJTV2UG93fj8oQHNnenJtU0tiI2MxUG98Cno5Rkw+JTBfPXspdUxZfjRA ZEE4fjl0SEZWMDdGPlk5Yl9OQGM+bithQzNIbnRiWXgrNFdqYlNXV25wdz4w NVVLIQp6RmZCMU1FaWZAdUdCNyRjR2RlVWhEPTstV0ZmY2ZvQl8wMygwM34h cVNhZjd6YlkoaGlaKTltXmM+cHBuRiklR0sKbUlWfl9UUjVDTDxHJkRMZUhZ K2VTSXhzTkdtc1A5KTAwMDA8TU5VTW5MU1RZdHJIeDdlCgpsaXRlcmFsIDAK SGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0 YXRpYy9leHBsYWluL2ltZy9leF9yZWRpc3RyaWJ1dGVfbW90aW9uLnBuZyBi L3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X3JlZGlz dHJpYnV0ZV9tb3Rpb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA2 YjcyODI2ODYyMDk4OTY2NDEyYTllZDkzMjBlZDQ1MTRmZTNlNWEKR0lUIGJp bmFyeSBwYXRjaApsaXRlcmFsIDIxOAp6Y21lQVNATj8ob2xIeWB1VkJxIWlh MHZwXk1qKkB4QnBBJEd3I29vMHJqajdQVTxRVj0kITlHPHlkLWFUN1k0Pz0K elVCWEwlSmtBMS0kWUxQdjBtZzE4dithTmtLMkkwTjVRKXBsMkA8VCRvRDIr JTZCcm5lJmM1dmxsdTwybGpWTVY7CnpFSj9MV0U9bVBiM2BQY3EyRCprdXgo MD9KTWd+P1UjI1NhSys2SmFwMV9sOzBScG40TDxtUlZqcmQye1Q3KzhXZQpi ZksqITxtX2FuMG5qWDNhc0RaKUwpejQqfVEkaUJ9YVY5Y0kKCmxpdGVyYWwg MApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mv c3RhdGljL2V4cGxhaW4vaW1nL2V4X3Jlc3VsdC5wbmcgYi93ZWIvcGdhZG1p bi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9yZXN1bHQucG5nCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAuLmJmZDdiNTkwNGY5YjMwNDcwOWFjNmFhYjM3 ZTI0ZGNjMDZkMjMzYzcKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDEzMjAK emNtVitAMT1zcUNQKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tS M0RkQmo3MDAwNGlQKXQtczAwMDJMCnokPFVVIyg2N1NLZVhofjQhX2JBWChP c3EwWm5AeCh3YjgtSyZ9Z3BPam1xZWQlSUlYTyp2UVMkWVA4O2wpYk1lPgp6 PGJ1IWFWWDRAKyM/WVI7Jn1ec0NmNTc5QiZGRW1KKX1HWXVmeGg4JXRJPz55 JnxScTRZUmNfeXoycyVjPn5weF8KelNmU0lBKGQ+bzg8eXhaQ20odUs2cVNK MXs9MjV9d2prVkVyeXlLMTM/cSNqb2o/TCt+Iz9ZVklATEh3U1RjRldgCnoj XiFVaC1JZHR5a2ptJDh5VyU7eT1VdjM8Y0RtcW8mRnlgezxkTjB4V1RlcXYh UlJ1Iz01QDtJWnAtWCN1LWNOLQp6P1AwOWlLKW1SQnp+cCskPlZ3ZWppcEok KnoyemdhPFVHM1BSbCg/ZyZnXyljP3E7JnhWWmk0Y3VqRG5qPVZpQ3gKelRF cHBoI3ByZCM9dj0oekVWYm9EeVhKcSQ9enolUldYOWA9KGR8Q0Q8IXM2OFE9 UVJxJD8yeFEmfTZYT2FKSnJqCnp4IS1sZj1TalpsZCZURVN6Mnw8LT55Knl3 Ui13fk8hMExJLT5TQDJgWXEjS0t6dmUtXj14ZWd2YisrRFYkbT9qagp6PEJa N1dnM2FyQ3lXeXFVQEsza25FbytMdzAwMDAxYlclPUowNl55MFcmaSpIMzI7 YlJhe3ZHVU5Ce3I7TkJ+QzMKellkIXp+MF5kblFLfnpZYD9OI1loK0NVVCFB JXNMTXNhR2gtTE1fT1psITgjYXBkd0tMbUJSeXk3RndrVVJ6PTA1Cnpee0RO Py1mI3FWTHYqSEpJe28wQVZUUU42enhVcW5VQlIkdGBTK3MyYVRUUGgyQFIk WmVAX1VocjY/XmVYIz0hdwp6a2lkdStkWXBNMkBwNmI3OXZLfkxZcG1ndyhJ azQma0RHeno1cm9EMWRWKEImVzVlNEJgPXExd2x5IzF+K15qTUwKemNzTCNa Kjg1Sn5SNVcmPCYrVHU2LUJUezdBfFh8UDt7cXheKnk2JHY/fXprflgqeDdM TG4hZyNYWG9hRmwwdF9nCnpBSVA0NjxBUngxZko3SCM5Pzwjayo5dUVJYiZ1 dDtjZzV1SUNtJkREUU1pPTU8b3MkQkhhRUdwUFJhbCpYLUs2cgp6YWxCbXVt M0FxY2dyQVY+OD1FRS1pcjU8N2peKituRGF6aSZAWDJoITJJbXp3a0JwZGMx T2okO0tOV0smJip2e0sKekhjX0ZwMlQ+Nl9YTCg8Nk1HPVN2MERDNSMwLSNt QXZDK05xKjl2XmtJSzJsOHZkRk0lRXQ4a252eG5KbzFjNnxjCnomNGN9S3ZL SFd9VnkwSEBMfmkzc00qejh3UDZ+MXxtfDs3ODlPIXJrQy13UlgzSVQoez1e MSomb0h1ZmQ1PGhUTQp6PlZ4PCRFe3kxck5Ge3dxezFwVmhEI3A2QzJSbjVv aCU3TDBvbGVCMU58NEZwYGpNUT0jcHcpejk5MEBRdUE1ZG8KeiV6WVB2JGky WlEmekwlJSR6NkJ0Uih9LUFPWnwxWnNpSVYzI2FYX2FLS3BJP1J0d2o8UyQk YndAXns2I1RGOzFLCnpyezNSVlg5a3BBRCVZXzBNd0xBKjZ2QS1pVmtmVzNp ZUc3QHc7Pn5wVUMxV2t7MUVwV25AKGk8JEU9eSs2Pk5rSwp6JnFwQXlTYTQt dUh2SF5YelQwM09IPjxhe297ZWhBeU1qOHckaC1XdHRRJk5acFY5NmtWNE15 P0wwQUJiTUdNRHEKeiokeVNjWVkpPSYpMWZIYHY8V29VLTdWSjJVN305SiZg OEkkejh5WW1gZ0tuWkspTFdGUXBEdyt3UW9gVCQlbT1kCnp6UWolQTRpYThz PFY1MGtEcEZJfWckJTg4LUxOOXtVbTw8fkY/SyVUcCNuPFZ2JF5+cWFJdVBS KiNMX0gwQTdWRAp6M25Pa3E9N3xyfHYtfiZtMlA5MjxKT0FzbjYjeEpMQzNI bnRiWXgrNFdqYlNXV25wdz4wNVVLIUZmQjFNRWlmQHUKekdCNyRjR2RlVWhE PTstV0ZmY2ZvQl8wMygwM34hcVNhZjd6YlkoaGlaKTltXmM+cHBuRiklR0tJ Vn5fVFI1Q0w8CmVHJkRMZUhZK2VTSXhzTkdtc1A5KTAwMDA8TU5VTW5MU1RY dE9ydD5uCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93 ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9zY2FuLnBu ZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X3Nj YW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM5NmRmYjRmZWFiZGQ4 NWUwODFiZjgzMzYzMDQxMjkwNTg2MzNjNWMKR0lUIGJpbmFyeSBwYXRjaAps aXRlcmFsIDEzMjAKemNtWStDWDs0IUs2b3IjRTQzVSgmT2lYN0cwVG10ZDVE WFltZ1ImRkBhY1daeGl2Jnd3TD4zaGdyQm9xfmxyQGl0CnpMSl5kdUFaV3E1 ZncmWmtDPWhgWDc3PkkzVyZzbmpGSnZkSSh4fF5XYkkmPCpANyhYI3owNHFU cHNrSWE0R2FkZQp6SnchVDR2ODJhR0EtfVhaUio7JHZnVFhVYDR1PXBlRXdo RXxuYTRfY0o+Jk9NUEhkQ15HTj8lIyhnZUx5Z21vJmkKek4zX2c7d0p+aGY+ MFZWKnBRPmErU0kqSTA5OF9sd3Q4NGtYeU9hOFkoVjEmd25ud2JJKXQ+QFZ5 TD5+I15zI1FgCnotZXolN24+NGdUTkBZbkkhfE0xUlNyU2AqZU95RG9kOVJL b2lvRyQrRClpSlRBb1ZuRFd9Mm9+S240WSpuRmNpPwp6KDRkNWpOPVBkTGJ0 MkhEZyFDZUNSdFg2LVcrfSUtX09TcDM3Zl5BNTg3YHBWMHRQV1N0fXd8dGZS WVFTRWZYR34KejxwRC05STNfbjVFVnZqbkUxQHxoI0NeI2VsXmJXcDtFMnFp O3trZGVWQmk1fUYqcSNNOCtwSy03JktYMjA/c1I7Cnoxcjs8WChHUUNDXkFk MVQjVFhGbE9ua3UxMmo9K0wxcXMrTSgjYFVMTUc0cTl0KTFzJSolbnRwT0Rh YXN3RHVwTgp6Vz1SNHJzfkZ0XiZFaDA+WCVmM0UwbkhZUWtOcUc0VSVqN01w MlU3b0YqPkdaVERZbllsaF9wckk0VT1eT3soazEKejxSSDgoejtYazQzV1hk RF5PYTEqVEFFZDdOenxWJE4mMkxLLWdze3E/MkQ7RzJtTH13Sj9hdX1Gdmt9 U0NFbC1aCnpuIVF+PTdJRT0keX1lKHlHaCprRFhkSX5+VXtqVksoRipZeHVx bnh+PjEmX2w9WSZzV1RFYE5xeWkqLStlQTlNZAp6SzN6STZZdXJFRC1WbGd4 RDJWZ1FxNFQpbzx7VWM1MmRCTTRfbnM0cVRAPER2dCMqUyMmNmRmJD96X0pB XjdOZCYKenNjPnwzVD1CSWZBM3BxfG1mQFlndSN7XzhVYihiemI+WHxud2cq IUBVQmJNa2dvVnBacipUZj0kJHlNUVM3Y0h2CnpKbHx5STl1RyVfPzw7dWZo bChuei1iM3M5eVJuZ203IWVCQioqQGMraU9WPioqV1VndHhpcjRxSCFRNThz QlleWAp6K3RebHFDcnFpT3VONmohRkNtXlotUHd9QTRjRWR5diNhY1khKWpG SnhLaDtkI18oZHVxMTwhI3V8X2luVWhSYjcKelp1V3M0P1JtUE0zTGI0OENf NzJWTkN2KC0wWX4rcDN1fk0meSN6LWh2cTxPUE8jfkhQTHxIZVQtSkJuRGF8 LVE/CnolPFd2NG5VSHU3c2N6IUY/bnIkYHQ4KCsxb0JLV3xQZTV8IXo+bWJT Mj09RU44JHVuQ3p1KT18TnBYSlMrOGsoeQp6c2YtbzBIcz12eihqZWRTN2gx XilOazZFZ2ojSX1qI3xmR1JpXkRzelphYTY9MHQ8U35PZ0MkNTtQeFhaZjkx c0UKek9XVSg2TnpURUQ8ZG9WPzlRczN7WCg7UEApOU1rQXVIeFFraEhwVihE OGZvUG4hV3kmQVA8cERzTEp5UCUzb2gmCnpfY0FZcz9gIXZ8SVl5IXc8MnJA LTtALS0yPzAzfDBXPnhpciRPUH18SDVvTmRtKS1NdlEhIXJtKDljKSEjcj1f TQp6QkhlYXwpfXxlPiElITI3YGxZRHVTPilINE8kdkdxP2JrWXxWJU9feURC SUVLRlItUCVvelhWPV51fF44MzNveU8KemFaVUw0NVEzQjZrJj19QjwhJCpX OyprY1ZYeUxpQzN5K0FSZ2FrYXo+an4hVTcrVVUqKCVDZXktREhCKzdGSHFI CnpQanx9Uy0qbmRyUlRvaHxSPFg4STlyLWYtTGNFTnt4Pz9pMk9aNC1iKEpx TmFTcFN4dmMyMnRgNk4qUno+VSl+Twp6M1hpSXopQnswVileXm93XmVeLXti eFZkaGBkN3FOKG5IO3EzJmopdSViO2xrP2NHTUhzUCpsWDw+JEFpNVdgY1YK emtFZ15DUDkoPXowX0s1cCRHTihEeFo+UEhKYTdkM0UmPzkhZzQ8Mk47cjVu cWJAKDVVbT10e35IdGpRait4SDNoCmF4SnwlJGVnXnRWTG15ZkkqZFplTVY4 Z2V4dHA1UTB5UmokJAoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhf c2Vlay5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2lt Zy9leF9zZWVrLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMzBmYmQ4 ZjUzZmY1YzJjNzU3YzgxNzNlYjYyYTFiNjA0NTU1ZjM0CkdJVCBiaW5hcnkg cGF0Y2gKbGl0ZXJhbCAxMzI2CnpjbVYrfTE9MEc2UCk8aDszS3xMazAwMGUx TkpMVHEwMDElbzAwMSV3MHt7UjNEZEJqNzAwMDRpUCl0LXMwMDAxVwp6cnBH cGohRVZhek03YDtEJmhDNTk/b1l0elJsQDBwKWJNNz0/M1VUX2czO30hLXR2 eXI/dm1FO3VpXjZycntOb30Kejw2RmgrViNuKF54OC1aYz15SH4haE4peXlq VHltQEh1VWh3QGEodG0+JGRhbiRNNU8xXjZrYSQ9Q2txWSNPJmorCnpwflBQ NjwofSV9b2JUJGo+RU4zMD0oRmhGbmRqVj4/ZDdyTipwJSR4dD9jNWo8a2di dztqWmk3dD9sTnJAYVYkdAp6PUReM1FiQDFsRT5mRWFEPEckbjRrSylqYz5E ajJ7KH4jb01qTiMwUz0tOCsyO2s7ZyNCKkRuSyNGfGowJXclK0AKeklHKGtL dUd3KyU+V0EmKVZEOTV4XlhQLWA7OTJ3TWZiaWZ9QFpWSlE9NiNSQVE/Y0gz MDAwMnorQThTVERDeVdHCno+ZWVGYilFc0BYTCN4em12KkxIXilnU0VCODFt Z3dhR2diQWxgcis9ZGcjfXQ9aFVSXitffm5fcVR0RGktXllnRAp6I0QoVjVx fXtgVytgeGswJGNXcyhmYUsxZ3NvSEx5KFBYXnZnITBgXl5WPn1LPDk3N2dO UTxqJXB3KHlZJj1sXl4KejVidz9vXlYmLUElP3JRQngxIWYrekJ4dVYwMDAw MWJXJT1KMDZeeTBXJmkqSDMyO2JSYXt2R1VOQntyO05CfkMzCnpZZCF6fjBf OTBXS356WWA/YjZ2KCtFNWUrVT5rNiZUZWExaTFCaWhOJFI8KigkUmNYMU1L RlJHSyRKeFZmKyRLVwp6aHl9RiU+JUYtd2lCOTUtR280TiF5YnQjJi0jeilB YjkjRFMmJVp4ITI8fU1VVnVYOyU8Pz4jbHVZWGAqa1FqVWAKemxNTjk9ZVoj e2UjS2BFXypnSGEkJGo4VVc8d1hDKSNLZTJ6IXtwP29qT2F5dG0+OFghbDhx NjZzbWUkRSZ5c2loCnp0NyZxWUMha08mbD92YHdEUFRzZVI/b3NMTU50fmlY dGkxbXc3KCloa3BpTmVvMTBVRFFtNTFETDJXUD89N0JQcgp6T2xIdHBFRWVs P00xX2MmQlNzMStsZ1hybzEmaFZAM3tpbXxsWDteTjV3cG87KFpadDVYMHdZ RWc7SiVPO1p1Q1oKekRIYV55dS1mZlFxVH55M05BZWMwcVN2Y1ltM2ZMblJt Xjc4Q0MjR00+VlJkWik0M3g0Vjw/NHpQaHNoJWFKdC1YCnprMnEyNVQ4JVpm OEBtV3JvNllNNHJgeD9NTWJJb2RqY3Zgcz9zZDVrU0Byb08kU2g4dyE2X1Zx NmV9TGorQiMxKgp6eklPTks4fTV3Yy02NU0+LTtwOHhvUHE1P0FoNnhOZ1RX b3hwPW8qdGMwLX0/VWJvNi1XTlUqWU4maH1GNU1aS0EKejAwUGx5R3l1VV5F Rkp7PDtOWENVUCRIMkNeVy1xSGRGMSErQ3pCKjFRNmBFPkVDfDdQSldlQiRO YClZdE5UKU1BCnpBJipaYDYoc203dX4+X3NfdnVzJHkmcH5zJHIwYHRuR3xM VEsyNVFnJHopRVNrUWE1I0ZQd3xSWVBCIUpRaE9GXwp6Kj56YVk8I0t0KnZu LW5qUTZnTHFrRlFZM0xoaF9zSk99b29SQVJlaVVyNmo7Rko2eVR2Pnc/KTtX N3VnVikyM24KendwNisqT0F3ZEs/TF9iVWR+MS1zSlVoJDVkR1B8MUQqO0ln aUJ5Vnd4bUBtTUlyO0o4OVh0TWNoPEVINyZ4TT1DCnpGNkBUR3R5eHF+O2p+ KDwtb1E8KlI9ZXBgeHNDaWY8YVg/dUdlOSNiQ2Upc0ZyZTNkQ3B4UzZRQDFT O25lXyFqNgp6LT94IzY8VFhCTSRMSksoVTVgcT0tbClQfHYpUWFZQ2RsOSZZ Z0d2YDJfXzdnYmlJeTlxayMkY0BuaDAlVHF7Y18Kek1XdlBFdTlNPFhtaUJv YCQ2bjk+Y200bmYwcnd2emIxTDJkMDAxUilNT2J1WFZSVTZXVnsmQy1iWSVj Q0ZmbE1LCnpGKX1TTUY7cEB6SXk1c25HJkN6UEg5OWFiSUdINkwwMDAwYmJW WFFuV01Pbj1JJkUpY1g9WnI8R0I3YlBFaWdHUAprRmZtanpHZGVVaEl4c2RY RmZ9P2JGdl4henROO0syMDcqcW9NNk48JGZfa1F7ZkIqbWgKCmxpdGVyYWwg MApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mv c3RhdGljL2V4cGxhaW4vaW1nL2V4X3NldG9wLnBuZyBiL3dlYi9wZ2FkbWlu L21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X3NldG9wLnBuZwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwLi5mM2E5YjE5ODNiNWI0N2M5NmFlOTEwZTczYWI0 MjYwYWU5YzI4YjczCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMTQzCnpj bVYtLTFjPntJUCk8aDszS3xMazAwMGUxTkpMVHEwMDElbzAwMSV3MHt7UjNE ZEJqNzAwMDRpUCl0LXMwMDAyRQp6eHpMYFYoMT9yQ2M2IWxqWl8mLWN0O3c+ QiMtd00lbk5HcnpKZD41dGV9bWJZbyNDO3c+YjxgMCRqST0pIXRTKVMKej5Z ayRGZnJaKH1zJj5xeVNKfUxNPGs2YnktS2cjNnYqWFFgcU5MRUxzcHFAQT9Z T3o/eDQ3JUJ1PDc4KWpfbD5ECno+KkomODtoVzZNJWFvVmp3enVvQnZneHcz PmJrcV56UU9Lb25iVDtDdyVGNkU9LSF5Oys/VlJ6clJMUDUqU0MxQgp6dWpx UUUqSlEyTldzfD89K0xxfHNueXMkcnM7dWFRc29Ha3EpP2RXd1gyJDd1bjc4 S0htRkMhIzw9Mnp0KXtAcT4KemIpVTIyTnRWaH16Mi1IeT0xUlRoYjsjJmJv ejE0T3J7dlg9PGtYU28pfGpOSDxmeTlXVGVSTE92KmJGczwjbzUqCnpVeWkt eCh+I3JSa0tNd0VBaDZfdCZGYlVPajxkQXQ3X0g7dCZXeiNBaT5qXldWVlRi IXU7aGZwOyE9dmg7bWVCTwp6Iypla08+V3QwbEshKEVMJThCTEFwZ01gZTUz QSNsKTltMk1ofkxQRy1eWWpFI2Y5Ul9uJT1+UC1vbFJFIWhfcXIKemd4dFZf O0shNUd1eTR9RHBXZWxhQ3FUcVEwMDAwMWJXJT1KMDZeeTBXJmkqSDMyO2JS YXt2R1VOQntyO05CfkMzCnpZZCF6fjB4bjVKS356WWA/YkteaStDVVRyVkQ3 aHdUcDl1fjNLJjRlZlExNTVEcGptNGZ+YylrJmBMeyUtbjE+KQp6OFZtJW17 JmhEJWt8bWZLciEoeSomTnBVdz1EZlEoZGxaVUVQM2t8RVFsLXt0d0htY2JJ cnkjOTg7bUJDKFYqQUsKejBjNlROWkx3TnlfRDNpSmtqe1pRVUhIcmxQQjx+ Z3k9V0dsdiQjRTh1ZzdBdVRJYlBPSngyT2BldCNla0BjVkVRCnoofnA0I1dP MnptOWJDM0FjXz1xUHE0M0lNQU5UKTJCb2N7NnAyWHNnMXFuZ1NSNF81bWxU Y19pblM5RUZYZiYwMgp6aEMzYVNSRXlNRmRRQndIKkVjZkJPJTRFJmRhP0VM KWZTIXwkKS1mQGk4TXNFYk5RWFo/JXd7TzF0KHM9SWRFYXsKejlVeU8pNGBD OE0rOXtTWSQwcmQxeWdOTlRDX35ZZFE9VCtUd3NWRXwjWnZ5bS1hWV9CUUs/ ajdQI2N4YDt+WSNACnoqTmJQeFFlcFJhR2JNbSh3ZFJWOHIlYGBPakY4VnFV cFNLYWBmWnFyMUdSSkYhWE9hTV93KSRLPDxJKSQkNHt8RQp6P1l2JVY3ekx0 ckFIc3lYRWQxaWcjX3ZuOU1nNUFWVjx0SmA3RCpwZWA9SHJ1TFBRZGIkYCR4 dmU1TlledTQlXmoKemZhQ0wtMEp2X0VaTm1kRFMhfmZfU3BwZ3ZgQT1DTndy QnktViZJOTkzYH5lMG1eejx7MXgwcT9TKFkyaTx7JVIlCnp5NS0pO1NqcjRQ RXd0ISVTPntJYUZlT2pTMkE8ZG5lezJBe1doTl9tVnEqezQ1Pz1YMyg4RWsh X00mJClfSytwKAp6QkVoWVRQSjx3QyFBOyV2bjllPXhxUThfLWI4dkppI29K N3khTCtrN09HKXQ7dDhZQDFgWF9ZPGRFbmlacCFWN2EKejAwMDBiYlZYUW5X TU9uPUklOUhXVlJVNXhHQjdiUEVpcDFKRmZtanpGZ2kzZEl5NXZaRmZ9P2JG Z1RlZDlzbUZVCnpDM0hudGJZeCs0V2pid2RXTkJ1MzA1VUshRmZBfVNFaWZA dUdCWXxmRyYoUmdEPTstV0ZmaHVPUmpkRjIwMDJvdgpKUERITGtWMWpecU5g TD9XCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIv cGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9zb3J0LnBuZyBi L3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X3NvcnQu cG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFkNDZmZDM0YmVlZTA5OGY5 OTc1MjliZjBiNzcxNGM1MjIzMmEyZGYKR0lUIGJpbmFyeSBwYXRjaApsaXRl cmFsIDExNTcKemNtWStDZT5sPyM5TEtrR0QwSkdiITx8Yk9RK01lYFBJQnNA WDEzMXVibSp4JG12WGFhYjsqeUFDYjVKXjx5VUNVCno9P0c2Zm5meiF1PGl9 KmhrWXk3eFczfG5YamlPUl9Ad3NwSFNBVHB5QDh8dF9LQ2pSN2N8T2w0ZUlM IW9aMXAjKgp6UTdEdWRnLXJCQSljSGRnOHo2Yn1MPncxfExaOTJgOHttIURR e3xubVhgPUFuKiojNUR6TzdVS1pQVU10WFA2SWwKejVmV1d8cE49Y2xYVUp2 KyRfMW1GcyYjXkFqKDYydzRRZzdtQ1F6aGhoJG5POGJDTFBReishPGAzdTl5 Q0xHJWJiCno/MTVVNCQma3EpbUJRI342QklUQXVPOUxxTElzU0IpSWtwUF82 aXtyUkkxMCYycz9MRHdkaDdaOGZKQE5DSm07IQp6RmQ0dDNJVGZEP1Eray10 ZkttKyM2e3gySG8qalZrVXFERiYmOU9sUiRleDA5ODJTYzVCNzxRaWZXaSZi alAzIXIKemFFc3gwJD84Y0JgbksjaUlUVHN0VmlseXtjXlgrZTVlcj5pPHEl ZzRrJWhvNmZSSjFXNSYqWUU5OSQtMFJFPFd9CnpYKnU8fWIwOEsmUXhud0pn SFUpMHtCT1pvNVElc1lZQVN9LTdmP1AwTVV6bWRnP3FEKnFKcVM2OzN5JHg0 RHZNKQp6c2VxQ3gkVz1xZDM+ZFhUTT9iWHBMUiR9ckJ2OGUzKVhCcjk5eTh4 NHFwRiloJjtUUDM0bElzR09CLW17VEZ6JTgKem1xSkpUKGZtPUtuanQxKVIt R2klcVl4IzMze3V5elRgMUhGNCtfeU1mWlZBY21ecHkpdlRVOG0pMTglYHNL bmhqCnoqPHVrc1lVaTFlVk9mSktQcz5ffEFIdVV6dlc+fSY+WHRGbkQjMTI9 NWpTRC1sfU8yWHk2QUVBc3Zfd348LWF+PQp6UjxhOSplOUtDKztGZ0dtTEgq Q01iQmdUKjFGR3FSRkcoYmxrSWs8NV9zPShienJyVjBPTkxUe0p2dk5YaiZ3 UikKej43WFpESSNCb0tsOUdMfF9NV3JvcTtDcVREUVJVM1UmYzdMKntiXk9U I0k3YT00Klp8X19gV0I3ZnQoaDwjbG1MCnp3VlU8anV1SFc9KUVKcW03bjNm ZUMtKyMlSEN4dz11RHxte3lZT3lsYEUofEtMKCk7dlZkSGdjUVl9YGplQSRL egp6ZF5HVXxhVERmWk1+SGM5U3l7VT9nX0gwQ2xZP0MpNHZGeF5CPDhIfCQz PzglUCtmenVQZEVBdGhvUnRlR2pecXYKenAyeS0lQ2I1IzZFRWkoZHs8O3gx QFVsOVhqKF5gSC1Dd2ZlWT5kK2VGdXpOdnkzKChnOCM/Um00KSt1WFJaezBT CnplayZMajImfHZxVFg+aDh6NHArWXU1PSpXYiolWC0lZlg7NlpDZUI5N0Z7 VkpkdkhlWUlMIWdlTyhxelkjZmR+NAp6Z1B8TCV1MWdZek5UbVZZLSNeKml4 Kn1WIyl3N2gwSWZKaH52PGNnLXVBdGdCWlNRZEotK1dTeF5EJFRPT0I0VFYK eiZvdWdIWjwqZ3RFSDRTSzYwTmxzSWxNSXVXQER4TmFqISl1PnRwNzw+MkhO I2QzZ3FAcV4wSnVnQEwhXykzM3UzCnpTRDQwaj08Jj87eWVubERtUnU5S01G aktTeXI8dXhZMHZPQ217RD4oNGU5eTZWUnZ3Q21nS2Z3eDlxd0tAYmpVUgp6 aXM5cTBPQ0hWRi1YSW92RlNjfFIqMigqTHgwaiF0TVhOXiNVJGUmZjJhJCll a009JG8le1VTcj5pJFAkQz9ZNmwKemYpbH5mJD1RK002eVF2N2NpSENkO18/ SUdDd0J0RGpjMzM5R3ZMb35NaX0kLUN4RWN5QmstWnlvIzZUaj1xfWhfClBm ZEQ5cUg7cWBpYCo4Q0FiQDV8RgoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9p bWcvZXhfc3VicGxhbi5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9l eHBsYWluL2ltZy9leF9zdWJwbGFuLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwLi5lMTNkNzc5NGU5MWZjMDg0MjcwMmIwYjM0YzFhOWI2MTYwN2RjZjky CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMjgzCnpjbVYrZTFeb0puUCk8 aDszS3xMazAwMGUxTkpMVHEwMDElbzAwMSV3MHt7UjNEZEJqNzAwMDRpUCl0 LXMwMDAyTwp6IV9ielEoU0wpe2JhPk5kWXRmPm08aEhvI3l9I19sI3FZd3o/ IzlVUCRqST0/JUo5cH5AeSpXaSYoUU1HKGVsJk4Kel5WaXEpdGdoJjx2Rk5G Kj1ENH0qelE2NmohUkBsTj41YFY7bjQ5NmN5ejhjQChBbkRjJEhsaityRUh5 KU1WRX4oCnpqZSF9R21DP247Yj1CQ0IrdUBidj95MkpKcHlCR0EoYjA+Knk+ WV84WnEoT2AmQ3p8KipvVzVIam1nVikmQ1BfcQp6eWx9Q3NTbkJlKXdYbGND Iz02K3VqO1ckIyp5RGxNO2VZN3V4WFF8WChiSSp6d3JxeH1XS3hZOGIqOUhR aHszNE8KelhsPXt2TCVyIXV6dnglUD5WPyRzbC1UZmsmZ19UTj95Y1lSNVVi Km4pJGdqKFlJMnNMdGstVkFrMmR1MiQ/KXY5CnpAOURKaj9aKWxvdkZ6Y2xA YWUrcDsrKkgobWdMb3Y+KXghdiRodXZaQihCPFY9LS0qKyhUP2llcy1Dcm5j JiRDUwp6PjMtP2pzaFlgTW96N3lxP3Q8XjshMEZoaD8mN19OeUc/SkxMJnZJ aGk+cXdFJEc3TyNyc21WNT4pZzVDI2Y5QyUKemdXPTRKK2B4aDUmWTtgQWY4 QD1jNFBWMTQwMDAwMWJXJT1KMDZeeTBXJmkqSDMyO2JSYXt2R1VOQntyO05C fkMzCnpZZCF6fjA9aHs9S356WWAmNk1kPStDVWhfSVQ4aGBRWHpgZXFYdzJr THk7bilnNFhKbWRiRzhhdlRCM0twKHY8JAp6KXB9ZTFfM3AtPzVadTdubk5G ViVvMClmPy1ATTF9TXgqKVgoKDNkS3N9IVR4WDtwfXBSKWYpR0c4JGpCd1Jk IXcKeiVgWkRVRW1wSU1xY2dnZXVJP19JMCVffjkqKlA1eihZSlFMPlF6Pzhe eDE3REpxPTt7eCF3VX40Y2RWfCVXSVp+Cnp1JF5YeDVRRHRLMzVjOHllbyYp akVMSk13VnAqMyZ4SU55WDtiQjRXYHJjck13YkJ0O3luaUl7KSstMT9GZmJZ Iwp6PDVkd2tpXkNIYjM2c2o0O2dDRHpQKHhnN1RSVU9FXztgMz81KGckSCFW eGJ9TDBxaGY8QlhWejB1YTNxTyokaEgKekhINVZvSUw9PFgzKUIoWmlPdDU9 V1doKWZzSjcxPGRobEtwMz1MSG41TnJtQ2c1anhZTDF2bW16Xz42cT9SXkxD CnorYUdCejN5NiR7cjdVPkpabEFNPlVOakVoWGg9VEY4TmQyYlJ1RnpIO0dU SU8yP2olTXprOE4lZkVkVyRBVjIydwp6TEA/czxnPVFPRU9WLX09PG1JPjAt d1ctRCswNl9NcCpgZSZCbFJJYTw5RzNscFZCamFlU2ZKckk3aT83NUY/VjsK emhiYTZBPjVrYV4hczYxVyp5a19IJVVAJHBCNldffkxPZFF7aXA/KUImM34m eDU+PCVPTENLTygkP3sjUVFDPVVCCno8UmVuJktyNUBPWWIpcjdENWxvWWxT cktkdCl8b0lINig2aUdGZW1eWiFXKT8mczlkUGJWenxNNXM4XmhWSCooXwp6 bz5nd0FtQE13KEdfWFYlZyMhb0h3emY3emwrNj9oeU5EMTgyPW0zZ3tyekdk IWNyTUN3R00qZDhwVTtWdSlUWUQKemd6JE1KNjNPSnwtdG8hdGV5TE97bSY7 SiQhMXtAWjxQflIwQnE0KytyQHV+NUBWODh8KUgrQyheOzlaKmZSNGAyCnom TSV+MXMlOGJ0UVpLYSo5N3N0dTkkc0V2b2oqKmg9NWlfPjhrOCoqdUZ1Zjw8 PC1zWTxHRUM7JlZqYkN1U3d3UQp6PUp5PjFROTk3a0EqdTE9X1YoX0FmKyF0 el5RY299JE4hLX1uYnIxRTlfVTJvMDAwMGJiVlhRbldNT249SSU5SFcKelZS VTV4R0I3YlBFaXAxSkZmbWp6RmdpM2RJeTV2WkZmfT9iRmdUZWQ5c21GVUMz SG50Yll4KzRXamJ3ZFdOQnUzCnQwNVVLIUZmQX1TRWlmQHVHQll8ZkcmKFJn RD07LVdGZmh1T1JqZEYyMDAyb3ZQREhMa1Yxb0E+b29vT0EKCmxpdGVyYWwg MApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mv c3RhdGljL2V4cGxhaW4vaW1nL2V4X3RpZF9zY2FuLnBuZyBiL3dlYi9wZ2Fk bWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X3RpZF9zY2FuLnBuZwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYTYwNjNhMWFmMDMxYzYyNjgwMjkx MWZkY2E1OTg5ODNhZmY3ZDUyCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAx MDc0CnpjbVYtMjFrTC0yUCk8aDszS3xMazAwMGUxTkpMVHEwMDElbzAwMSV3 MHt7UjNEZEJqNzAwMDRpUCl0LXMwMDAyZAp6O1BJMlQtQE1mOHt7SHtMKjZv P1E7aWJhbD5oYnlUXiFuTjVedkJybCszV1NJI14jSyUtT0FoVjxMdmledD1u fj4Keil+M2JlJWpFSVI8Pys0UD9ReCNlKSNMTjckPilFayswZj9sKjZRQGQ7 cWJ4VkA1JHJ2WW5qcmMhe294Kz90Ny0jCnp3YjFGWCU7PSVQPEhnfGEjb3E0 dGB1KEhEPGF3bW0+RXpxaCRGOWg7a2lNakt4fCgzUGt4UnN0SkIqNW1mcXtY Qwp6aGxoQGlqK1R+fHByRHx2dGdPN2V5dkB6Yyt9enlvQGJLWmA7bGFQVnRE bE89b0l9cDFQdVI2dy1vYT8kJTR6RDsKellWRm9+O0xeSjU+RSEwLT1Hb2NW KCRkbiUkakhGSnpfaGZxczthNyluVkYtYnFuP3xXPil3VSY+MztYO1k0UEch CnpfMkVZSy1aO3NvWHk0ITgqNEViMCg5cGB0JUVpVVM/ZHxSMSl4Z3hiaU9I Wj8pMm1ZWj0zM0NhbjlrMTUjPlUzTwp6IV42Nnx4eztCUT5nd3Y8JmE9PFF4 eFQpPnhWWDV0eDN9S2cqVVlrbiVlJGJ4eX1qaCo8ZVokRz07LUwxbzEzdCgK enUlRGx3dWRsREFyS04/MWdfTSsoO157VCgwMDAwMWJXJT1KMDZeeTBXJmkq SDMyO2JSYXt2R1VOQntyO05CfkMzCnpZZCF6fjBxSUZaS356WWA/VVkkbCtF NXNWbTFxIVowcyZkMDVFWEgkT0p6dyZmPjlKdlYtfjx4dHpwciZtSikzIwp6 dF40fWRKO0N3SDVhM1F7Y3JQPk9uZko7MEB9O016bnxHNjU2ViVyc1YoTiNA MUR5YUM+aiU+eWc0KV9WWnRwaV4KejQkUn5uYT1BVDc+KklaMUFMQHNGWmhV d2M5fDs1cGlCYFk+THx+JjNqXmtyYWJsZWpQNDJgI0Z2NGs5TyRtSSQ7CnpG JU47Kj49V1QyWSZJcnI5QHJoNkxAKXlKVEQwcitWcEQkT1lxcGBHNXFIPVR3 b2JvMWYmN3FoMnxOKilgUk1DdAp6NT5eNT0rZEJiM3JyVnVjbGchU3xGTUx7 RGo2YEZ4U2UmRjFHe1l2QjQ5O2BRRTItN0JebS08PDUhdX0weG90c3wKejxa Tz0yT1BvSHklUjc8UF55ZT9UZDs0R2FHWTNrdFAkKEFKa3w+R3tQMDczdHAt fDwrdClwKz5CUnxyYTxLeH02CnpwOVBeKGBjOyh9UmFLPzNlNEBOWXZoM2xo bWY3RDhZJE5yRDcwWGdoe2FjcjF4aF5yOz1FeTB9Yk59WjRBRG41Iwp6YDdf WjM1ckxRbkBmViEzVEBjdTNzWVhSWk93PyhxKFUrPWwxcllHIUxJcVRTNHdi MSUpdmApYypFamxOI3JpRkkKek9STHBWTUclQ2RDZFNuNz9zSE17SSVePTdX WTYjTnhzJkp2ODBBQWVOPFFXaV9jdlghX2EmeVo1WXplaSFIT0EoCno+OD08 RUMqXmc7bmw1cjlPRyVjWTZCSFM1XkxOcUIrc0c0VW1oRz0lQkolP1AwMDFS KU1PYnVYVlJVNldWeyZDLQp6YlklY0NGZmxNS0YpfVNNRjtwQHpJeTVzbkcm Q3pQSDk5YWJJR0g2TDAwMDBiYlZYUW5XTU9uPUkmRSljWD1acjwKc0dCN2JQ RWlnR1BGZm1qekdkZVVoSXhzZFhGZn0/YkZ2XiF6dE47SzIwNypxb002Tjwk Zzhtc29xeVBXXwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0 IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfdW5p cXVlLnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1n L2V4X3VuaXF1ZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2I3MDQ4 MGJlOGE0ZjQ5MzY5ZDlhOTc0Y2U5NDYxMjg0ZDFhNDY1NApHSVQgYmluYXJ5 IHBhdGNoCmxpdGVyYWwgMTIzOAp6Y21WO3sxUyRLOFApPGg7M0t8TGswMDBl MU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcwMDA0aVApdC1zMDAwMloKeiNL Z1VLY2dJM1BzflFAfnUmfW8mRGRjNWwoOVhgc3MmJkRTSG52cUsldGw3ZE49 bWF5QiE7UEVRakhtWnJDWVBYCnpydTZhMkBhKHRtPmIwfnVGNTx0UnB+WVQ+ dlBTRldwNmNTOT5FV0Iod3QlKVNFQThhNWEtJWlxLUkmTEFSUDVsYgp6LURQ Rig8LWV4UFclQkY5dkx6K3B6P0pJVXMmPVk3PkRaXzIrX35vMWwtOHFvKUxk TlImeUFrN2hweVVqYyY8TD0KeilSRXhIaH5MTUM9RnlfUlR0bVY/S2pGLVo9 K355VDxhKnR+ZzUlN2R1T1Q2T3ZxSXoxa0s0VX14R14hZk1MM1BZCnpRfEh2 QTxqJGJJSjNHXjZYMVZLcygzNVMrUmFMdzFnVF91eW1kc3RhSDhydDRBLUd+ SCV3dUdfTUB6YjhXcztUQQp6V14yKWlMMzR+ZVh3QTs/eX0jfGghUl5Bcj8j MElOJGpSYF8lPC0tPEhxXkRxeXVJdEVzcHFQIT1kUTJtdjlzIzcKeng5aHh9 enBOfVcpeiRSMFdfIVM9JUM5Iyk7TmJWZyNPJXFwKjNyQE93VHJFfnlYP05k P1c8OHt2dlpFUXRrfHpWCnpOfEg1TGdHUFg9ZXk2OVQ7RDFZdGxGRVRSMDAw MDFiVyU9SjA2XnkwVyZpKkgzMjtiUmF7dkdVTkJ7cjtOQn5DMwp6WWQhen4w KnkmVEt+ellgJjZOOUYob2gpM2hzK1UheHNeYURtJnZVWmFleyVNej50NmQ2 TnBOZ1Z3Z29ZRkloKDMKenk3O2Vtd3NULVdQb0Q4WiYqUz9lWFA+P0Fge25G STVRQyl+KC05LXFuNFRQdzhLKF43OWNfO3FYOz55UkdocmtNCnptZ0RaOyF5 eHBlI1ZWSzBLOzVTYWcwdEpGYTEzcGtifnYwKTdpRG5zd0FeSXxGY2AhdDZD U1ZHP0RmJnw1QTJNYwp6IXl5M2hjLSglPDFyYWJDNHc+WXdKbnkzWEhlVWND ND1ATiFZPVk2N1h4aUExYmZjOFpJTjBTTyYrfFVnS1JYdmgKelVEJkM0N0Rq MllmQn01TCY7bVYoQFBaJkx5Mkd8ZUJtX15FPHt3Ml9DQ1hgc01+RnExPEIx YH1DJlhlYSUmSXE7CnpPcmFBdG4mdVM1c1N1KT04QWY4VTI8Y3lRQzZeSmg2 aXNKWUJ9JEwqSTJqa2srJU9VZDF7ZD87TE1vTClCZVBHawp6RUw7Ky1RQjBJ Rm5XMF5iTj92Nz84VnJ9bEJeQyVLJG5+fGtWbGpiVSN5IVJUbTcoTkR6RVRp RHA8dVd3NG9Tc1YKellHdHBDbDs5bzk7dGBRdEN0WUdMbW4kaFpJYV9eKHlV N2IxXi0zWDhEd1VMQXhHRXFwLTswcmNVYVA8ODEqN0d3CnpCeXtBPGt2JWNI eGl1T0FuNX1XOCtiIzIwTHhReiFXX0I5ZDV8ZiZ7dVVkUHJfdW0rKHd+e3VH TiRxIzxLWWFYagp6S3A3NT9CeUFvOyRnJGFjRUYpU3hoTEElKV4lKXt+a0hL OUlERjRhUDdsaHpFMXsyJDFeeEtsdT10c0l5JUdMUDAKeiVVOXNCKHsyfiF2 Mksqalp7MzR8VHtgYVlOb3g9N2Y7QChue0M/SXU3KG1YTSllSDNtZEpLYUFr Nm8lPXB2UGBOCnpuIUJ3fEs3NkgpajZDLTVVRjJZWClYRzJBVjM1YWRPNjty K0phKCRTNENeczRAfj9kNXMmOGJoI3toQyhEX15KeAp6LWVYZXhIfUtlSDd0 IUp8WH1ePU5aMSNmRDs7e3pFdEE1PUo8YCNQRnxJe0JNI0pYTHRFfl52KDAw MVIpTU9idVgKelZSVTZXVnsmQy1iWSVjQ0ZmbE1LRil9U01GO3BAekl5NXNu RyZDelBIOTlhYklHSDZMMDAwMGJiVlhRbldNT249CnpJJkUpY1g9WnI8R0I3 YlBFaWdHUEZmbWp6R2RlVWhJeHNkWEZmfT9iRnZeIXp0TjtLMjA3KnFvTTZO PCRmKEFAbgpBQEJqYisKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAt LWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4 X3Vua25vd24ucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFp bi9pbWcvZXhfdW5rbm93bi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u ZDVkNTRmNWM3YjI1Mzk3OGI5Njk5M2VhMjYwODI4YTE0NDM5NTA5NQpHSVQg YmluYXJ5IHBhdGNoCmxpdGVyYWwgMTA4OAp6Y21WLUcxaSQtPFApPGg7M0t8 TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcwMDA0ZlApdC1zMDAw MjUKeiFxQXF1KDJsanliZ1IqWXZDKmMjKDgkZnV4Vz4+Xm96WXtnK0gkJHph Sn1QcSNwcmQhPVhrfkVlYTdjfiFzTDBuCno7QlR8c1MpdFJ4JUZ0UyopbyNB IVRnQl4yelVWQHs9cz4mWUtmMn5heVhRdXw9dVc9cFM7RmFMI180VXo+Vj9x bAp6Z1RteCN1RyppeCZ9XnNDWm4pcjAhMDlpdzx7K0AtQUZ0eWl2RShWVTxT KEAzR2A4aEJ4YUJ+KDx3ZCpaT1RGZSQKenpVT1BsPX48JUZTRTE4ciF7ezJX O314dnFSbHcoMyFSTDkqPnlwbXVUQjZmdnl5R2dnPGBKdm5VJkg4PyhDY0ti CnorNn03V1c1bm95JitMaUE8WWM3TFI+MF45c3AyeFY8VkwqYVhVNkRvJD9C SFo/YEUqdkZ0X0dsI19NcHg9M2QzPgp6UU5aWWZ6VHRoWShQNiNpMSpxWCRw d1Z9fDsocEhTZENCVSgkPFM1OD1eZTEtNjBHQjRzQFNsQCZ9cD5aVVomUEAK eiVqfG97PjVTOXViKytEaiU8NTtXKm1sNj1pcHVEMSF8MTVNJnx0O3NkZH1e Mnk1Sz4oPXhFNjZZUVd9eiRMTX5ACno9d2lwflhVT2JwJUl0ajQ/S1Yze3t7 UjMwMGQhSk1Rdmc4YiprJTkjMDEwcU5TI3RtWTA3dzc7MDd3OHYkIWs2VQp6 MDBIXypMX3QoWSRMLVZvU0pGQHoyaz4jWm0kJiY2Nkh5U3lIZWZKSmd3JHoo ZlJkSTE4Nm1QJU9lak9jKUdVMC0Kej5UaHAmY1RVR25XQV9MQmpxaV47X2pD NSM9WG93Z180NUVSMFcoeUNmVz1DNS1pR1dCZFNHeTlfPSVHbGFVcWktCno3 KTk9fWFnVFN4SF83QHJVSSt3M1h0Y0t3IXgxU3VePmpLbTZIaCN3b3R4KzZL eVgzcVM9OGU1WGZsPWpPVlVleAp6Q1kkU0ooREYoP2Yxa1lJR3BqbE0rUTM+ T3xNRmsqTj96WVV4fTtEe2x7RTYmdz5oaGtIfDRpRXk9SUcqdHI4fSYKemlS JClIeHUjJHUyaV5mNHZhXzRxeUNjKT1mRDZMPEtDZlclVWJuS2tSS2dAYXdx c0xBUjUmUE5sRjdwVmkteD1UCnpBQCNBX0cwKStyP2d1IWA4SXNvV1pjJD5y LWc1byFZRGRSdU94OEVkSSl5YT1mKDg0Y3F0ZmMwMEl0cyp6UGB7dAp6dkdt Ki10STUpeHcpeWFZXkpEVTVIQjFARGlYeVVxNlZGOXhwTmh1OWhVblUpSGhz Q3htYFRLMEdvZFl2OUFKPksKenB3TzhWJDIrenB3QChURnApUVVSI2NQPXMm S0Yxbzc1KkI+bj47VEI7UlQ2TXc7K2JlSHolQEAyK0M0bkBxM3hlCnp4WDEo ckIwZngtUExmXz5RazllQFNMNDRrZlJIcllqeHt4KlEwUztaTkdLNiNBPW5k NXY/NFQzY1JDJkJndygpNgp6Jm40P29aKno0SE55K3NMP3dFNFpDdUhRdT9S ZlJ9PWRhYDZTeUZOVj9PTW5sT0Z4ZzBLUz13MjAjPlorXlopPD0KekMzSG50 Yll4KzRXamJTV1ducHc+MDVVSyFGZkIxTUVpZkB1R0I3JGNHZGVVaEQ9Oy1X RmZjZm9CXzAzKDAzfiFxCnpTYWY3emJZKGhpWik5bV5jPnBwbkYpJUdLSVZ+ X1RSNUNMPEcmRExlSFkrZVNJeHNOR21zUDkpMDAwMDxNTlVNbgpHTFNUWTFu SkBiUQoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2Vi L3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfdXBkYXRlLnBu ZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X3Vw ZGF0ZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTQ1YzUzZjgzYTA1 OTM3MDQ4NTViYjg0ODg4NzFlOGU4YzliZTcwMQpHSVQgYmluYXJ5IHBhdGNo CmxpdGVyYWwgMTA5MAp6Y21WLUkxaWt4LVApPGg7M0t8TGswMDBlMU5KTFRx MDAxJW8wMDEldzB7e1IzRGRCajcwMDAzI1ApdC1zMDAwMTYKelRVJDFXITNu QTJhK2Faemw5SXVYSFpyeTRiKjlIYnl5KGxLU1czWEAqUWlkJXMmIXEmPml3 KyZXNSgpaCRMTUl0Cno+fjcyS2I8T1BCeU1FaWZmN2B1QDxHcGotekpUMW5m ZDlRUGQoclJRIUdlVSo/JWwoS2d3eWNlI0R3MChoMkYtNwp6ak1WUG0kQXtt QGg+X0xxO0tfO00lIS0lVUAjRCokOz85aVklJTBAVXA1b0FyPGokWDwrd3RT bGtMQSN6PGtPSm0KeihWXnppcVU2Kyg9RiswJSlzcDdacXZoNjw9RzNJOyl1 cGNCXlhBITw9K355YCpRZSYlbWcoNTE+RGoyfis/Vk92CnpzcHtGYj5EI0w3 K1BDUTVuZDtyRD9BKkJOO0Z7fit0bkEmbz4pKTtILW4jN0l0P0p7UD9jY2xY O2pab0F5WHhlZgp6P0JjS087a0BrUXU8aGxzQDhySmk9Q2JiUXYrdzE9QGFE a3A9KEYkWHdlYVl8QGFlK3Y/NiZkaSNQYVJNXlg8bS0KekBXfE07cWpkbFAw MERHVFBFIUN0PUdiTmMwMDBTYU5MaDBMMDFGY1UwMUZjVjBHZ1pfMDAwNz1O a2w8Wk5YUEF5CnotQiNMQTVRUTxlTCNhaDs1dFM7VU1id0FfNTx2KXxmSXhz bTBZZ0N1RykybXZAQmFjbElwK1hETHpmcT4pbX1Jawp6YHpsfHVfbndLeEA7 M2lxSn1+KyRSNU9IZSpsZX45V19NK0ViKVZWKTsmN1pZckBNUTU3dEY9c0Ak cS1ZNnRPS1kKekZXWjxFcV5yemx0SlVnWUhXMHFZOUltZkJqK3N+YiR+KXxO cF8oRF5JMmE1YkMpKEB2TWxqTWVaM3NoRVJyXjRtCnowazlqOSFUbykkTjQw bCpkOzAqSWwrVSs4T3tFZUY1TXVuPlpsNlBIN154OU4obT4xU15Dfm5gaTMj IyFKbm0qOwp6aFYqTHFWWFAwNWdwaFhySTtCRUE1c3owWGxGaXpjRzBkYEh8 SS12ZGFmKVVpYGJ4RmpyQ0IhWi1gSyZGYDJfbEcKelc4SGVMXnUzJDR1UUxY QV5udVpYcmoyME9abVVEKypBPUE7VTBJZXBsTlpsMXUoUChkd3FyPXEpS2dy UUtASkNsCno7Pl5FK3BAPTMpcX1XcylsPSMpOTQwMTRkQ0tfdE8zPVRJemFJ cT5id3Q1KjMlVFBRIVZ7PjRjWFkyd0B2cGk0SAp6NXAlZn43PyUjNGBjbU8j alpHTHRwKlV5QCYzZDB8d15+Tks9b0NlPDFGY0xaLUdLUmZnaVFBUmw3OyU4 UHI7JVQKem5VZj0qMDhlZmhVPG8xaEw7QFdLUThecUE3Q35mTEhVc0crcFo2 KDNMQX15NFJaP3RASnZtODMoKENvfDxfUGpICnp8RHZqPVhyVUQ4V0NJIWsm c1IqNWtBfXYhcFNOZko2PElFSj15ciVVbDdlc3Rsfl49I1Z7Vk4yQ3BTUDhy OHdYcgp6PlQkYXtiQSVqKjVmUXV4byl8PmpacjF7WVJCQS17MUNKKkhvWklD Sm5Jb05DRjRMT0pRaSg8KkJgOSZCUTBkaGcKellvKEtEM3E8ZERLMzBKbmpe b2YqTFYtWlIrISMzd3FQeiNFYU9vKW1QTih6Uzk3KzIwIXlwPk4jbSo0RklV PUFmCnojSGRFeUl1ZGZab0I9cHJqTklgdDxlI1c5TVp4ZCk3eWk9Tik9VTEl eEF+dnU0YH1KUUFPdyRMeCZRekcwNypxbwpJTTZOPCRnNHpeQzFPTmE0Cgps aXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1p bi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF92YWx1ZXNfc2Nhbi5wbmcg Yi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF92YWx1 ZXNfc2Nhbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTViNWFiNDA3 OWNiOGUyYzAxNWI0ZjVmMTBhM2RiZjhhYTY0MTBkMwpHSVQgYmluYXJ5IHBh dGNoCmxpdGVyYWwgOTEzCnpjbVY7QzE4KTNAUCk8aDszS3xMazAwMGUxTkpM VHEwMDElbzAwMSV3MHt7UjNEZEJqNzAwMDRmUCl0LXNpTWlXMAp6aHsxMm8/ bUBsak1aVzJFJmhMNTk/QCs/KFI+U0lwKTl7SmFATVh5Q1lSVCt4JUl1V2JA dE5CM2QoUTJHKGUwJCYKekB1PVNOakAwZ3cqNiorM145ODVqTldiWUR1SCMk OT5vflhOUGA+OT96fkA9UD1aNFlrWXNjdHMkbXh+Vz98UG84CnpyTlFLOG1l SWtGSHUzNio/Yy1xWDw2IWRZaHg2KShAOGUoWjxYYGphaHhGQCpAWj98ZDxY YHBjaHd8aUtfVW5oPwp6QEF2MjBFOWx4UT0tTWprK2JabmFEKD40VkA3cFQj PHpMdDhfMzdGdz4pUl5yK2Jad2VEKThKWV55T2RIPkdicEQKelUtamkqX3Y/ ckY+eGJMRGlQWSl6X1Redkc9PTFVMUQpUVZhXlZ9LTs8ekxhfl43UHkpX35s PnErJCM5eVUtfDJZCnpgc3wwIT1KTCt2XjctYXBgfE82eTw/OzMxRCktJGdf fXdZYD0zbVI/QCVHJitge3JORDxNOD8yRGFobVNgUnNATQp6PzFzblZAVyRm cntOYFclPzFzaFJAQjd7PHtONUAzPTNuPlNEZi08aHtebm84O09fbjJEZ053 K3p+QW48K3dBX3sKekRnV2tRKWFtb1MtdERjez1gPmFwMHNzSTIwZCFKTVF2 ZzhiKmslOSMwMTBxTlMjdG1ZM2xqaFUzbGprVm53JUhfCnowMEZIQExfdChZ JEwtYjBhKUxrKjI0RWs/bkZvbVJXX2dHVUt+WF56N2hGSVFxb1BQeVR1T1FO VX1nezsjWWp+dQp6aG0/SnElaHl3TXwxfjVNJi0kLWJmflA5UUFAQylZRCEj JjRCJGRoSl42LUhSbEs+PFVEWmJAJClIaXxlNmgrYUkKejdsTCNlQWQ9NWp0 QyYjTFQ4KVhrNU07Qk0xZyMtZVZfNk96WEA9dWttbHVMVTBnd31lNndDNk1h Q356aE0zQz8jCnpYcFU9cVZBMzNuQTBYaWloNEZZTzV+TiVQX2VTM3FNNnBN Wk4oSUVzMWdPX1IlKXAhcHEkITRKIUJ+VzBkQXsqVAp6VV9odGk2UHxDUGFs KTEkMjxfOz1iaTBAWTh3Z0dJPUk4aE9tO3xrJUZkVGwkPS04SEpXa3c4bkdg YkZxSUZ1dj4KejVte0FMZyY+cDNienBrdSk9KkpSbE8pc1ctTX1jT1g9KChT JitpNmlyZkF4ZEFkNXhwel5xb1cxTEc2ZTdEYylECnpQKyk4dTZIKVJmYCVf QGZNMygjd2M7Qm9qJWptI3R3PzB1LXluKWtYYnVCdERYQS1wYmheYHl4eEhK cjcxMX0lRwp6LTN+b3w7cihnKWRYMCYoYntzMkF6flNoKyN7O3BNUSlfRjNp OT9WaXV3Qj4yUHdkVVdTazhXYkt8SkdTRU97cHwKbjhfVGpiQGIpd1FZayE/ KntjKEsod1NKaW1TZEo2KDAwMDAwTmt2WFh1MG1qZmloJWt5CgpsaXRlcmFs IDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNj L3N0YXRpYy9leHBsYWluL2ltZy9leF93aW5kb3dfYWdncmVnYXRlLnBuZyBi L3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X3dpbmRv d19hZ2dyZWdhdGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFmODU4 YmUxY2VlM2Y1ZDhmMmI2N2Y1NWQ3MzBlNmQzZjQzZTliNDIKR0lUIGJpbmFy eSBwYXRjaApsaXRlcmFsIDIwMjEKemNtWStFWDtqbF43UkNjODNXfW84SUhO KlVxLVpzNExSQ2JJNHojOU5MQEVXTUFQKFJWdFdfSlI3UFZHTlJSa1FoCnpu bjxaJis0bCY5b2cjdlBnYWlebzJubTQlTGRjJX5tVmQkKT5aSStiSXA/fGVJ cnA2QmNmWSpueTs8UjVwRX1yWQp6dyNRJkY0KjI4MjVmPUNUdnNUKyFgdEly TEtWbVI4bkQ3JilMbzgheWl+S183QFcyZWpvYHJ7SVZYZ3c8c3xfM18KeiFr Ql5qPFkyRUg9I2xBcldJKHF9fDM8RVZHWWotNl50fiM1dU50NmhmUE85NXJ2 di0tQU9pcklBVChlUjFoRjcrCno1UWdZZGtVa0J2PFBjQWQzQEtveTlPX2o3 e2QjfjJmQ0NtbTtPanwhdyo9XnMwPS1pfXA5fmFlUF9gd2VmRWNyMgp6cEF3 YGlmd3ZsZjM0Kk82WlRxO2tVOTlWeiZ+WXVSUjRfe2s0WDdaZDNTXzlEZWxe JVFybEFRbmU2NHx9S3t5KGkKenQkfjxZPW9NZEdGSGtwJkdfTks0RilobH5C MTJrdVB6TWRASyEheWkkYmBVWm9+bXw0TWRobzZJI2klRGpPcTxNCno5V3R6 a0llTkhpU1Y8aktIO2lmS21YX3p1JU0wZFpyVmdzKUQobT1heT1qcmpWbSpI Ul99M1JOM0pNRXYrYE80Zwp6Qm9ZWE8kakhkMz07JXxZQjkwekMlRjtzPlR4 STMzdlgteFVCfmFIbCgoWXRycUB8QCVVKTlxWTQwPURxLWB+SFMKenFwYWQ3 JiEwYVpja2JOOWkoaEh5NzhhSjV4eEE1cGZQamdxREtUT2sxbUpSeHFKcGJ2 OW9JczBPVDV1aEpSVXl8CnpxRkxHNUojWG5zKUJGJHNtdkkjM1R0IXQpTz49 QTg7X0BIazVJUFBTTUchaGBvUyFycCojSn5NcU4qRUo+cCUjYwp6VXp8Y3NC T3Q9RFAoekIhVlp7dEc3YWtyaU1UfGxTNituaFQwMiU8R3g+MSNCJHQ7RzlW I19LUjwkXzR6JWFAKj4Kem8qb19eTEt0Tk1RMGI3T1lmPik7am9ZX3hoWm1P a0FUcCptSmJDKWA/S0NKd09kPVFzNFFON1FxN0RFbmg4MTt1CnpSZTVFbFZi TUhpSHM4S3xkamN8NkBsPjUlVHx4a3JEXis5KVdwUjAjSTt0ODNBPipSaSNs P2pTIVltTX48U0JVJgp6IVVpRDtZI2Y3OEs0Y2h6O2pTc1kjOS1uPUZiOUZU MjszcGo0WFItUWZRbihgRnBMWiUkT3dXbzItUTVqZnNZc2oKejFfUmFkYHMz UXhOditVOzNKbkdraXFnaDQlQGJPUShLdndgZCpsRjk0TXxOVil9Y0pxQCZ+ TF5CZmBHRzFTeTBVCnpFUTgmWjwxcitRQU9FWDlWT342ZiFLflBkND9jU09j ejs2dEtVT0FNZWUlSCRqTjFlMzJOJC0qcEhFOG9rMX5FKgp6RT5sZDsmZGV3 YElYWElUIzl9d1I9UnxxKl5hPVRLKHlgR1U5JHNEP1c9KGZyVH04PURIbDZO Wm9zc2UzSHIkU1gKeiVjQGN8NXUxSUozNFo/bU98LVBzX1lSPVcmcnBaODRp MFRPSVhTdHhBKEB+NUtzWClnJk9oTnBkIUNubkNPUmNXCnorcHRUc24tSEB7 Qm9xcUEkM0B+cF93UXB8PyM1O3A3Wj9BV19melJkPHJfTis4bmNVQEokcUpO b3U4bEkoTlZGPgp6NlgpdmNUSlNKVkF3bGRQcSNxZHludiUpMVRDTVZaNEJ1 KGpJe3JySW5tYzlnSk5eOUZCVFJQMHlgTyhQOTJqVzUKemRXVn1eYVp5byV3 WUJ4dDxTWWp9eVdIJEs+LU4zZGVlQTNASXl1PXF4dGZnNiU1fWdTUXlhS3Bw JlNOI2ZIQX16CnpXTmApdWFsMjBCPzJkNHZiZUVPM21oM0V7djRAWF4/KkE+ WXFwMEQtLWBtVUQrWEpkIVZKa3trY2FZbTx2UEpISgp6TjcleCp5MVJYNEJe TWwlaUkqO2RzPVgxdFJpKUooMlB+b2ZHbkNSNj5nIWlISD1efXcrS0ZITnpP eFV7LWkqYjQKelFKeksjWVB6eUJqOU9kISFpVXNUQk8pbzluPnFRdT1WQmM/ JFZCJXdTbkRRNjxDV0goVS1BVzVQZVJ+RFFfVnBWCnpXcEF1NGVAOWpiMyNs WFNpNj1ObWNAam5pPGI1Um5hTW13UHBfSk0pfDJATzllU31AUEU8fkFJZCNS fUBae1BrKQp6NV5IYCNsVCEpWmA1eUxVMV5Jci1yNiV6O1Q5fH5FPForemtT d3J+dFVybzlAJClmenx3dUV5Ri0jO1NUMWc5SykKej9uampWbVkyVWUjbTxV JmFJSyk+XzZGfEtyI30hTFptZHE0dClFJSZfK3xlRjl4dSZUezxNNWtibSg9 UytUNjctCnp6bmg+YWghd1lteHxFWTZVU2VJNi0wNSNvbDBXX2lyKkt0RC1i N3Apd3JIaFdSMGkhVkNkRXFPdnolJGwkO01OKgp6NWVVdHRDa3cza01HciQq cnlyM0ljKk1JTkF9dEl3bXQrUWV3fmtBczRiQ01ZX0FTXm9BVDhtYSZxblVO R3xOaXgKem83Tmt0REkpdDVsISVDaz1xNWZUai0pI15hb3Y7WmAyMXsmY3Ju VkBHV3p4OXVWVF9+e28lUGdvfHFMR3M7YXpCCnotUXNpeXBDbGQzVW96PjFS ej5TeSNITVEoXzJMJHZITngyLVAjU3wtb0Fod1k3TjtPcntBVmV8Smk4Uypt dXJffQp6VXRhP1lhYHR8VURAX1ZKT3p1MnVgYE1TQ0wjdzwjN3BDNGVjSC04 JWUqT0ZSdjhNSktvbSZtejc/cGtfQ2VUKD4KelU7ajxrZ0I2O1g8JnAmRGMq bmBZQms4RDBMfUgoezwyQWUpc1pfM3Y9N2RUczcqUzRmQUxvdDFRYDN8Q0ZI MVVhCnpFdj5zcFprVVM7SXZoQjAqVlpmYyoya1IkOCRxTVYmR0ZgOT1CYmBr WVE7SW5iUGNJPGdoS1VsSEMhYyQjTyhfcQp6RjN9X1BpRTtmY3B0Tmd3OT0y KVJ4fkMwOG48YmYtM1NTNE0mJHMzM0NkQF9heDg3PXkmJU4oR3BCdlhyZSMt YVMKemdfe2h3OWslOGhxVWZyXkdpK1h5T0ROZkZvQUtgNXlXKjdYI3B5MDln S2FSYXJ9bkwpe1p6S2lheG1PZUwhd2c/CnomITs4QEJ6JSkoRl5zUmJrMmxX ODd3N0dCK1NmYjRaKG8zKS15VSFPMEJgUkRkRzQ8TjJWQTxHTldBZGYtKz1l UQpjemtvbH0wcDFffDRHZDVzWWIqYzs5fSpUXmNQdXtSZjdzeG9feTdPXgoK bGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRt aW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfd29ya3RhYmxlX3NjYW4u cG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhf d29ya3RhYmxlX3NjYW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1 MWUwYjNmNGM2MWJhMTY2YjY5YmQ3ZjMyY2IyM2RjODQyODQyOWUKR0lUIGJp bmFyeSBwYXRjaApsaXRlcmFsIDE5NjUKemNtVjtlMlU3VG5QKTxoOzNLfExr MDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3MDAwOTNQKXQtczAwMDFx Cnp4IVgyfiFFZXAoTEF+aWt6VWcoJj98SVBnUU5ycH0hcz1KVT5Wd25waVBp OUMkbjB2Iz5+Nn5KbC1UaV4rVk9uTwp6P1NSbmpnVkY3ei1TTWQyQHtaSypr PTU+Iyo2KiszXjh9fmkyJm0jbnp2KWZFPUArZno5azFoQyNwYDBuPm9jfEcK eklKZjBKeGFEIW4/MEMtWFBgPjk/en5APVA9WjRZa1lzY3RzJG14flc/fHFC NHJOUUs4bWVKNWVXJVM5fUBWQ3RHCnp3IylPISpZMn4oP3l8QDYjTUpEdCNx NilkPzVATWAhT2AhKShDVndlPjhpaSh6UnV6QV92QGQjPlljamtvVm4/bgp6 eGJMKmQ9JFc8V242JjRZdipuYnA8ZFV4SXQtfDd0c297Kkw9JX5FYz5oPFpJ eGFwZD09OWFTS2sqd3A4dEtmPkkKeio2SC1gdzk0cTJ3KFlVVD05UkpLbCg2 NTRxfkQwNj1CMnJkS1QlVW5QZXd5VGx5cldEWkZWfDNJKEkleSNHPFp0CnpX TkwoS2JjQXR1TF8wbFFRQnxqYmopR2Ajej9gVVRKeEdDT1pmUlUjcGd+dHFN b0ghNjw/ezBLaUhWOC18TnBTQwp6dSlWIyNSOCY7aCp3fHJWVlYwSmJaKk9u UCVGMVVeU0pkaEJxb2Jvb01AUTQ+Xk9ablVlMCtTUWV2M3N3S35ZRmMKeigm ektNTHRuM2psVXoodGI2c1JsTHIyYiVxKXx5c2VgMEZUPUpMK3deNWM9RFZt KEVHS1RnaSZAQFpPTXdVKGdCCnptOEZBamIpJFFTJnk9Umo8Pys7PHVZRngr Vz1+aENMMFZ7NlR5dER3ZHt8QEhlM3NkbXM+fGZAakJhPGhaaUFDPAp6YyhP dVYlSCMwSjxNN0kpdkE+M3VtVUBEV2EoVHomQFFHcTwjXlVjekozeihaQDVQ YSEjZFZDcjtPPWx6VGUqanAKemlEYDEjZVYxYHNVfWpUVD83R1MxcHwkRl4j cDBmXjsrP1NKb1VpRCMhfDFaWC08WWY0bSNYSGx6dml5SS1JYkBeCnpsJjlV M3JzUz09PGcyPmRrKSsjQHFTfXc1PEV5eTktfHArVSRLIyl+PERSbk1vMzd4 UnQ+QnJnPWQhQHdtWnsjQQp6c045bUkrSy17eWotYXtRP0JTZlMpXzlXRGNh WVV+a0pFQ0Qocn01O1pIQ1dtZ3dKYigmMWl3bVhNZnBAcDQ5MnsKenpUV012 KjZHLUxtRGhUZClPMyF+Wi1+eG5nM00tcSZTYD9xWEBTfn5xMmo1d2VCa1Nq MDAwMDFiVyU9SjA2XnkwCnpXJmkqSDBiKXg+TTB1Z3kpWClGYDAxMHFOUyN0 bVkwN3c3OzA3dzh2JCFrNlUwMFktYUxfdChZJEwqQVBSOD5fSgp6I182VV9I Y3g2YypnUlNCSGFyPWBBVGNVSihIdDtzYU8lN2lHJEZlOD9sO2BgdUhHanZI SzlOKVAxSD0ydGs2blIKemdPVW18cXJkP3RMP2wyPkFta3x1WVQtRjJERExn aVRDVX00XkBzYjllYyF3NXtNTlU+e29Rcl57TGFeWlReOShmCnpJXyRtPjts ZlV4SjZ8TVJlOTVKa2JyQ01WOz54Uzg3T3VKV3k2Yk5jWnRVOHZgJVF2UnEq SVJgSHtULU1kUnh6KQp6dytuYU5kRHE/ZDI+MEgxe3tzJlNVMz5MPD13YWE7 c1hXNEc/eSYzNWBrUEd0XlpAflpmcT8tS1VeYmgzTCtfeFYKejsxQ0UyP0d4 NCk5dTFGKGNub3hpc2I0PTZMam9mc0JoNnMkfDlJM0I1Y0szeihWQGBpPjZu LVM1SSEoQWM4fiFYCnpKaChtYk93XkRkMiMkXig4VlhAQyEtamBMTH5MQX41 ZzlSfTRlNCkmWFFQSVU0MkRyZHBMOyRHMWBIY01GYWlkfQp6ejN9Ml9wVTla ODxIbzs0RUg2KFc2WE8jSW5LVV9gKDBYTWBCMXVYanVPfENLVUs2RFI4TGYj bnZ8QS1haG9UQFkKekM7aEx1UEBTcXJyY0dtciNmbysocyQpZV9NdmQ0fVJw PilSSCRAengrbl9SaUl6dilxXnIkR2dDOTR6VipKbnIpCnpONXEqblI4Ynlw QEdAJV9MKkI1WFEmaUR8dldBfTdzU2IkXkNNc3oqK1RWUTNDaiNqZGE3aWl+ dVQ0Y21uSWJtUwp6RzdRTF5JVUk/JU80MngwNjRPMEBkNl9BUyt6WXg9XnZL K340NEZzR3NCYiZiWU8lQyFPbmIrSkRuJTRAcjBTOVIKel5TTWdNTTYlI3Iz clNrSUZxN3I3RDNmRl4mTDlnQ05rI15sV0tkYk1nZkUjVE09Yjl4Q0dYRSht UFVVclB5VD9jCnokb2kxS0grb3NRa3xMNnVDNVBIYThtaH1fZW5fWEpHa3lH dGxmNzI1Xn5rREtmMnReR0JiSWNMWDJULTRxTl4yZwp6eyE/WjNZVlBHemlj RERNViN6VXRlbUp5JF9CbGdsdFQ3O0sqWWJeSlF6WT5WNGVnUlRsQEdARG4+ fmdOQ01DPyUKekJrUmB2dCtITlpDKXw5cSl7YSMrWX5hWTM2aUlXQDEyVzM9 dSFrY2dtM3Z3R0ZObVZxYktJS0QyZVkmOEBWVCt2CnpUI2slaExCOUdyZHQq KnMmYz44KVhjcGZsdiEyUnhGey1wOC17dDQkN2VLLUhufHt+fktOYzRMXmZN RntaYHJ5SAp6d3dMVkt4eXlqOy1wd30jdFVCeno1WkZeJXkwLXV9bStkUng1 Qm4+QURLM0pkJUYyQE11JmIpN1RCa3hVejVAcj8KejxwLXNDZDA3WGM/OWlg PTMhJFE+d3N0RjIqOE50JDZSTTZKWTRFbTNPaD1EM0hYYmBfQGBKcnUkNGBf JmBRZklmCnozTWo1XlpteHVxYHVkWXFQfkZnUSVCeHEmWkVWYkNEd35kPEk4 K1hXTypKKmV1JSlAS3Ree19SSnBGcSRNTmE3dgp6JUZ1N2pwTCVLVVZxMj89 S2RNYHgjcTBJOT1yYDdTamkxZk4mZSM4fCZIeGdRMmF2eGJVaXR0NDAzfiFx U2FmN3oKemJZKGhZYSVFdzNXZEpmVEYpJUdMR0ElR01SNUNDK0cmNEZoRyVH TVFJeHNMZW5JIz9vMDAxUilNT2J1WFZSVTZXCnpaRXN8MFdfYldJRmZsTUtG Z1l6U0Y7cEAkSXk1dm9GZzdiTkg5OWFiJTltQkYwMDAwME5rdlhYdTBtamZv bXZjYwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2Vi L3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhjbHVkZS5wbmcg Yi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leGNsdWRl LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZDYyZWVmNjQxMGQ5MzE1 ODU3ZDJlNmQyNDY3NzBlOGI2NWI4ZjQ3CkdJVCBiaW5hcnkgcGF0Y2gKbGl0 ZXJhbCA3MjUKemNtZUFTQE4/KG9sSHlgdVZCcSFpYTB2cF4wd0IhNjM/d3ls YEdYbDQ3eXwtKUxSXjh8d2l9PHltVHZWd19RclkxCnpMQzM/ZF4qVURoRldM QTF8OWApd01gS1JFYnZYUTVBLT0oNiU5ZlI5WmhVXzZeNF5wd1MyOGxMV013 Xj1IUzU+PQp6X2lzTFpQMTxAJXdRYFFqaz1LJSpuTmdHMDlKcUFuWSt+Wm0o JGQkZHNaVDJeRX5LUX5lKT9Mc2Q2e0oxTGBrbyMKejhRWUheWHpoQVpTb3JW UHVQKy1tZHx0QlQtYH5IRllpZj42bmtKUHVOdXFwP1lJT0Q1NkliXjhgclY2 K2ReSzwwCnp6a21QVXRYUSFwR0ZxWiFoR2czc3dlKmc0WEshd0lhejVxZV9I ZkZTcndiUXVeQUNgMFN8S0BRazdVay0qfmhQTQp6RWhzcTw4Mkk9MT87Qkk2 VWhWMW1fdmc+U0BiSW0qamdrfDBORz8yT2Y5UiFUXkA3Q3ByJXpuRXdjNX5W bSVzbHkKelVFUTVOS0M1bCpjM3JxRng4UXsybnJuN0A5P0E0PHclPjUmJmNg M2Bae0ZPT29WOzlIZHhmczwhSk00T3g5PzZtCnplbldmQlckQTRYWT9oellV VUhePGBCdjU0UFhoV0RxQEhfY3dlZ3gtYW82RjdBMDVDaldoQEV1M3ViVjVi fFZlTQp6TiVENGc7Yl4tendGPTFMRWJ4ZGQyR1NtMj5+PUVTNCMtJlY+RWFr N2FYQzVSMDdIKlkyR2JkeDQ1bD9YWitMaVEKeldNbVl+KVdzKH1jPXF0PVZ7 cml5QXUmTnc7cHEmVjkkdWNPUG48ZT1RZD5oeXYkJlpoQjtASzlRPEpTKk49 dj9lCnpJbXBEOz01fGJOKnxNfV8mJX54QkZsdUtATV9VSTZTNFhxRXQ4Wng3 K2BXNEM/KUslPXhBKDc/X2MmbSRWNHp7NAp6VnEmNldxaCFSVEF8TlgpRWsx dzNqNDUqXyY2PnQxYm1Cd2BpKi0tNHFQRFdNJTduPz48dDJWez1Dak57VTFW KXcKelYzLWp0VUhVYWl7eHMwKHN3Sil3QmBKdnxzYURCRnNYJlVzJGlVRTAq OHFyMkxrdW1mM0BvalRqa0ZFU3RQQml9CmhjYkspSVh2b2JeJHhOJW50enB+ TUp9YU9HMjJXUSVtdnY0Rk8jcTg5SnYjc1oKCmxpdGVyYWwgMApIY21WP2Qw MDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4 cGxhaW4vaW1nL2V4dGVuc2lvbi1zbS5wbmcgYi93ZWIvcGdhZG1pbi9taXNj L3N0YXRpYy9leHBsYWluL2ltZy9leHRlbnNpb24tc20ucG5nCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAuLjQzMmQyZjQ0MjMxYzFmODhlNzg3MDkxMDYwZWZj NTEyNWQ4MGVmNjQKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDQyMwp6Y21l QVNATj8ob2xIeWB1VkJxIWlhMHZwXjB3QiE2Mz93eWxgR2JLfVFHaWN+RTBC SkR2K2NwNSRRdjZxenJWazcKelczJjlAdnpCaWtgRzVIb3xLLSl1VGljYzIt MUdrTkd5VTB4JW9vPzNmQmVkUGFrMWduSGxyYF47KHp8aXpPfktiCnolbG18 MXpqSSQrYk5+SDJ8TW17bWNNcFI5ezMqSipTPmYzXmA7U2l9ZXxecFFgPXtq RVREZEUkI1F5eSlkdj48JAp6fEtBR3N3eW9jUXdsYkNrYDJ7bUxKaUN6dzxa dT52TD4yPlM0PXtFK25RYUdUPGFvTGBoRGNvUT9mMndzUCFNMm8Kejdse2VE USt+KGN8OUBCRTg0XjFLeDM2MWJZfEJ1YHFRYi1KNjJEQnhaXzxwNUJFYHB3 bmF9Nnd4cGExJT5lIVZ6CnphaGRVPSpYJkVTRk9wSkUqJjtlKWBxZDMqRHBh VDV1OUpETFMlM1AoKGspQDxaYmFMelYraCFPZjQ9P2BLSzkycQp6PTNmRUBs NF4tLUxgaDB3TnZjKEhRN1Z2UEZmdVNTJl4wdkRIODJiQEdPI2krd2xYbypI WlpqXkZxcnBGWnh4RCQKby0yOVp4dmBVQnUxNTI8NXBsVEI8MTJjJCpRYDFB JjA1dmRweTg1fVNiNHE5ZTAxfWsyITJrZE4KCmxpdGVyYWwgMApIY21WP2Qw MDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4 cGxhaW4vaW1nL2V4dGVuc2lvbi5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0 YXRpYy9leHBsYWluL2ltZy9leHRlbnNpb24ucG5nCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAuLmUzYzUzMzM0Nzg4M2ZjMWRlYzczYmNiMjFiMzJmYzU0ZTNj MzE3MzIKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDk5Ngp6Y21WPEEwfmBF X1ApPGg7M0t8TGswMDBlMU5KTFRxMDAwbUcwMDBtTzB7e1IzQ0BsfEQwMDAw MWI1Y2hfMEl0cCkKej0+UHglYGNPPCVNUTJ6TGZfNkk2Jjl8emRkOTk+LUBh KjJtIUp1bmg3Til8YlJmfC1ieHx6VmJvU0toYV93KGxHCno7bWMtTDRYVlZj UWpiKVIhSW9OPlVUbTZjZFRsUCspNDhhZVlfRigrIXF2aClmSXEkSSRha0BR TTFEZW1iMnAteQp6Wk5JcGclKlU/Wit8MGVVbVI/USlAI0B5THRBM3U5WEZo djhtZHYwdGJ+QyFPayk0eGNrYzNXc2E0PyphVUQ/cEgKekBhZlgtPDtzfGdQ LTxIZWN4V0xJVE1uK3t5ZSlEcXtRTEwmYDExTW8/RGc+QV5YJUV7O2xrK015 NWB4azxKR0MpCnooVj9KXlBhMHFyOSVVUlVaWVhKfWFIYHxFWHNkNz1WO01r dktIYmNpc0Z6bllZOSplQHFzaV5rcTBwK2M7a34hIwp6IT81TVBxdjVsaS0+ IzY/cD8xTkFhbGUzbikwTnVEa2difG5NUSR2RXd1cjspJlgoUCVrbExlKCpx d3NibjAoWmUKeiYlbHFCZysqM1MxWlk/ZG51dFRJbXJ7R05mcHlaMmV0a005 WENOcVRDdHI5d2loVk9BVjtpTl91NkQoVEsjeGNmCnpUbmB2ITcoYk90dzRg Yj1YQ1E+TGh0PWBpdDx8KCNtdFNGP1c8UVFjbSQ7VD5tMUJaO0cwKlNVeDgl V0d0NyY0Qgp6VjNEK3RiOFJJd2dGM0x1dSNiTl43RzR2PT0qeVZScC1fQGtq bWVvU2RvYUchelN6V3YhS2BVSFVLQyFNVnVaU2oKemFJQUpWZHBBeUY5dnh5 Q2xoJmcralk4R0dlJHU7a2xZdW91VEAqaVZEP3cpPlk7N0VzZWtWQz9EUlIx Z1pfdFFaCnp5S3Y5OVpPeVl+ekB9ODRoQkt7X0pIbighbDZmTFZiVG5oRlpm TVNmViQ2THVsMHFoR0MyKlo/TlA8VHZoQkx+cQp6VUJ8MGMjaXZjY3BnKVJv OThHI1dUKmBQPiRhNn0oVzsyPmFJO2x9V3ordHxmSWVsamxTY0ZTZnJlYVhX WiVmMiMKek1aI3R+emc/a15PT0FVcGhJMSo0Y3IzVn1RbnM4JmlnWTFAWSNE QFk3SD9iJFQ4VUN0c2JuXzJTJWkyIXJrISloCnohPkVhTUNjdmFteVI/KFch S0s4JHFGPDMrOUJDYUFVSik4PDlYNkxtRXNzMURWLT5aVEwzZTI9OEVQOSlo ZmF1bQp6THk+d1hFUnNFZHNERW8oM3ptRSRleGBqc3lJbUcmNz1MT09mb2x+ VGNPKiVJTkVtSiU3aX1CfFlSbjElMDAwNFcKelFjaEM8SzwzekgwMDAwMVZv T0l2MEVoKTBOQntyOzMyO2JSYXt2R2Y2OTUxVTY5RTk0b0VRS0EwMChxUU8r XlJXCnowfi14RzQhJkhCRjh9fWxSIUt4YlIyYjdeVT8zajJ4UztWdkxYYnR3 VHp+PjBXPVFoVkEpeUhfRmtMe30xO2h1awp6cGFLQ1FLekA9N3Nge2k5N2kw QHZsMlRTOHcxQzc/UiZHN3k7KTFObTw8T1prQ3tBLWg8Nn1BPENqYkRhUDhx RGUKU1JfNGU2MDAwMDxNTlVNbkxTVGFYLV5MMzcKCmxpdGVyYWwgMApIY21W P2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGlj L2V4cGxhaW4vaW1nL2V4dGVuc2lvbnMucG5nIGIvd2ViL3BnYWRtaW4vbWlz Yy9zdGF0aWMvZXhwbGFpbi9pbWcvZXh0ZW5zaW9ucy5wbmcKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMC4uZWVkN2NhOTdhMzNlZjU5NWY0NDhiODYyMTE2OGQ1 MzFmODZkNTFkNQpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTAxNwp6Y21W PFYwfHh3d1ApPGg7M0t8TGswMDBlMU5KTFRxMDAwbUcwMDBtTzB7e1IzQ0Bs fEQwMDAwMWI1Y2hfMEl0cCkKej0+UHglX2ZTayFNU154WigjXk4zcD9SJk9k K19ZdSRpYmolVF42Um9yQiNibW4hMV81eH0ySmlVSDl8bT1pJHB7CnpSdD43 ZXNaeChya0hNQiZtfGtwfVlrRi1pK1M5cUhvTlRZQ2Z4XnxvSzdjPkg+Qng3 bmVNRWpqZk85dlpuUWd6Zwp6bmFzem8tYHZjLXd3N0tfMHJCZUF3eVM9Z20x alBDSmVKSSRHaj1uJnZ5cSpYVn5+VlNlUSs/R2t6THUpdisoS0MKej8mWnB1 aSVARD81X283SzVMKnRlPEdkfCRFJlRpVWB9cCR0X1UhZlc7UGRSKz4qMiFh LU1aJTR2ZzZnTTtMKUw9CnprNTN3NDc5TTNCRFErbGZzQm8mfHhvRTMhOClG JGpkX0xYR241ZFVtSEVKY0UkKW1+Yih4SzMqdipFcUI9ZmtrJgp6ek42dUBv IV9wSSpQKFg3Zz5rPXRmNzZ4UCRkSWo/U1ZlOXVnU0xwbj4mfStsc0YyI0Rp UClXail8aDxNbGg0NDkKem00IXVDUHl9ZEw0VnM4VXRDdiFIdjRNNWNqZWRQ UEN9JHVqWjZ7eE5KQm9jWEJ4NCg7KXZrOE1oZF9APTVuSy0jCnpXZih0fE8w PVlFRj1ycnp2eG45MyteeUJMVCRmKkFvQFBJZU4wKyNrV1IrdXJjUU1jSipT Ri1zVCZybmZsVkZqdwp6a2FLTSVHPW47QCQqXy1xSVRsX00hc3lHRyY3bnx8 UkVeMSpEfDt9JCk0dGZtaHJ6NkFJYklaQW5xcXt5aSpUJVYKekhoVld0Vjsm dTE4SSN0ZElFX05wemticlljOVZmTUx0UFg8Wll4MSZCNVo5T20zfThWWjdG aVBlczlvLVREeCUxCnp3ezZYe1d4JUZYb3JXezVrfl9rck12ezNWTXN6ZXx0 IWArfWdKUjVtSGorWG5ZOSgtO1piKlZoQ3gkYzF1VSpIaAp6Um1HPUd6QFJe aGF2VioxSlkzM25SPipUb3lrO3wrTUxNWmJLKV8rWG9qSEFINW08eXZSO0ZU NSMmMWkrWURMMGsKekpISzZfazR1aHdHbHB8MWkrQykhcGk7SitNflpZSWZA flJ0WjVENF8zMGpGI1I7Z3EqeTsrMktKKkomPSRpdHxLCnpidGJeMVBySX59 Iz0paDt6TUB9fFRed20wNT8mRCtZOF5KME1KPG0hNmtgPiZuTCY0SEM+ZCVT UD1gKjRkXyQzWAp6Q29HYVpmVCh8S1NfX3RaQjdVWlFLRCU4T1hjJktMN0or TE84K1JtMGY9QyF7OVQjbUo3VURGRTAwMDAxYlclPUoKejA2XnkwVyZpKkgw Yil4Pkw7IzJkOVlfRUcwMTBxTlMjdG1ZM2xqaFUzbGprVm53JUhfMDAwTWNO bGlydStYRVhCCno2Q3AoUmJjcH19MEIlVntLfnh5aVU2OFIyeiN0MytuUyh0 dCEzfmhZXnZHZzQyRkw9YEVFTk5tMHtNITYteTE7KQp6UXhGYXp2TF9jSypi PF9va0ZnMGQ4SGMjVj1FaGApaCt5Wm1wbGVobmxOWkVkdGdRQGhYMENOZUlX RXB4dyFveU4KbmRjfnRzcDlUbGlkT3pPQyYtKSp8S0gpM3BEMm5ncjAwMDAw Tmt2WFh1MG1qZjxLTlV6CgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYg LS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9l eHR0YWJsZS1zbS5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBs YWluL2ltZy9leHR0YWJsZS1zbS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MC4uYWNkNDNjYjhhYmFiNmVmMzhkYWYzNGZmNmQ3NTQ0MTUzYTExZGFjZgpH SVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgNjEyCnpjbWVBU0BOPyhvbEh5YHVW QnEhaWEwdnBeMHdCITYzP3d5bGBHWGw0N2BYI3tMUl43ZCNpYEdgJmkkS217 XiMxTwp6cEhBSSpiP0A9PlhWMEhNZC1tKztqYn4qJFVsYDFKKFEpPSleWFkk OCRBMEdAXz9mKShUaUItMG9+dTlERWA0aF8KekAzczJPbSg4ZERkSTdtaC1m R056OEp4SiQoUnVDbD4kbVVTeUxiUW97WVFAO0olMFJuPjlUOSltS0E5ZSpC di07CnohcTlrKnk3c31jXjYzdkFKT0lrT2Q4fD5AKnFAZihjbFlreVd5X1hE TTBUcmJvXjxuQXNjVWRoUyMzc3BgXjVGQAp6KlN+dThEbHZKTnk3cHhpXntx UjA5KUoxcjw/R2s0JiE0fC1XViVzTlcjIXk/WWFebzhzQT9XN0VMIXlPPEh4 c2UKei19WDx+cy19Nj0oNzFkNHtEbmBTSzVjQVRzOyslVlU5PGJkaUw7JVo2 SSl0VkokZHJ2JjZfdDU5PXZ3PCtFclRDCnpRd3tSaDR+Pn5HYyVKSl8wMHN3 Uk5zd1BLZ1R1Mk1YK1JFVmZrJEw5a29FdiR4MEJnK0sqamA1N3NuOFolZ0c0 fQp6T2FAQWY5U3ArOCt9aElDP0NrMnw8fU1CRylCRUVjMHo0dklMez5HcV5R YjgzREpwU19QTTk9cDs/JjlFMFU8JGMKelRxezxyVEE3YFptSEUyQmZ3a284 N2hheTs5JCVsYzN6IyspNitJSzE3SXJQb0VQJkI2K1BhJEVUfEhlcWRffXxU CnotUjtZI1p7Nk8lVU93YzJ5fjJnPSEpaDg5RGs5Skw/cmtYOFY2N3o0YEI5 NihXMillfWk2MHZSZk5vUFFhZzhXUgp6TmkwZFZOLWp6VFFWZDIwaDZjS1pN IUUpdUF3fnZQQ2RPN0tDZld3M1J0NSRaR2dha0tIMDApfFdUc1VARyNGVGQK Y0hHb3VHOEpJeWRvU0dpRzJCPzktKTc4JnFvbGA7KzBMVlFIP0VuQSgKCmxp dGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWlu L21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4dHRhYmxlLnBuZyBiL3dlYi9w Z2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4dHRhYmxlLnBuZwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZDg0MDM1ZmVlYTYyZDUzZDQ1NzQ4 MTE3OGIxYmNiZTk2MjJmODU2CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCA3 OTMKemNtZUFTQE4/KG9sSHlgdVZCcSFpYTB2cF4wd0IhNjM/d3lsYEdYbDQ3 OzZLM0xSXjdkI2lgR0dGWmBjJHtgYUVHCnpVdzdTamQtNDl1YDtWVkxlZklw PnZ1QyMrSzMjTH1kR2Z7PWRiM30ycGEwKV89M217M0tjJEMlPD9RPkJ4Wl8q Ywp6cnFBQU1KfiU5WVhUSVEjP3duVUBHaFZpeWBKMjcoaHZUdyRXKChpdyZV X1l+KTFIeUZ7cUVobl93TD1oZkIqaTIKejJNLT1UZUU4X21xc05hUTh5WGlW PmlXJX16ZD4xVFZeR0wkQmpZTF57UyhXVTlvVnQrcHJYbm1TTkZaa20jPSpD Cno8akx+byVrPlRGXm9APlB5Wi12c3Q1Knt6UExmbGNVfF9RVT5hfEIjdVU9 SkY/YkoyY3ppaXBZXzNQS2FlKk9CJgp6bTglLXNFcWFFQilpa0c/bT47PXc9 bFBwQVp7RUlyYHx7PD56UDxeSERqUEprdVN9WT5fNUooekEzbDhlXnkkO1AK emNrZm9OVClCR24+TiNgZkRYUHFJYlVBRWVvM0VqQnM8Jl9KcmNJbGtLWXpZ PT8tNkNTd2NmdF9VJSE2aT8yQGdhCnpiQUgrSyREY29je2AmUm56SWBXRClI ajVMQUtrY2QpN0d0OWxUI1lpd043O1ItdW18Syt3djlMbURNKFRjeTBSbAp6 QCNENV8rdXs9blJXLUpEYzMpQUx7OFVZfEh6VnVkcSlCcm9QZyRyaUAkbXdJ TztkbW96KnJMRzd0Ry1CPl8hQHAKeiEmJUBGU3EhOC16fVczJXdqR2RoKzAo QF9NQjtMQ0xWXm47NC1aZHwmbCNPSElkNWQ8JSEjPlV2cXlvXnU4ekBCCnpG O090a3UjblNwMURCbTlxaHNjUmhNcU10RSlIPnlmdTUxQnB9dyk2JmNacWlt YWJqUUBAVnlvUzErNGNNUjw5Nwp6ZCM/S1VvSVJ0ZmJDQWh2Uz1jcVJaRHJz MWB1eHIlRmZPUFE0PnZGOF94SU0lLV9YJDItQGtQSXtDYkNrZkM3I1AKejJV OE9yOHptenhEPlhBUzR4SXklO2AxbFdjcnNfc3EqPkdXIzV6dSZJQ0Z9Ul5W Rz8rcn1ZYFFNWmBxWWtGIW1FCnpHRypHLUBDRnZHKXZOWThIK2VOKHpRbW9D YnhgWTd6I2V7dkZCWTBUZSZURTdmITxSc2FnOFdSTmkwZFZOLWp6VAp6UVZk MjBoNmNLWk0hRSl1QXd+dlBDZE83S0NmV3czUnQ1JFpHZ2FrS0gwMCl8V1Rz VUBHI0ZUZEhHb3VHOEpJeWQKVW9TR2lHMkI/OS0pNzgmcW9sYDsrMFF7PE8k XlpaVwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2Vi L3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXh0dGFibGVzLnBu ZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4dHRh Ymxlcy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzVkZmJkNDU0ZWQz MzcyN2JkMWRlZWI4N2M2MmY4NjcxZjZhNWEwMwpHSVQgYmluYXJ5IHBhdGNo CmxpdGVyYWwgNjYyCnpjbWVBU0BOPyhvbEh5YHVWQnEhaWEwdnBeMHdCITYz P3d5bGBHWGw0N15NUHlMUl43ZCNpYEdgJmkkS217XiMxTwp6cEhBSSpiP0A9 PlhWMEhNZC1tKztqYn4qJFVsYDFKKFEpPSkoMXVUJnVmRHh8X2lwcCllXnRr Uj1PNmYpeXpeVncKenJxNzxNS2lEcFBZZEcoPGBwbFIyPyVpdVh7bnJhOXZn RURkakYlY1NVKjVsZS16eypIam9xdihTRlMmTF55dTs5CnokQkNoNTRZVilT WWBwczUhR29obUZQVHx2UH1BSUFVT3dzNkBxMT52WEFIRT9ePndVJmBTUnQl aFl5ITZUTlYqRAp6VH18dD52OzlVTD9XP0FtdDdnb1l3U044alNGY2A4SVE3 fWg9QWVmNUhCSFQoPVB6Nyl7cmRJKC1QZXRFJktxZisKelRDP0o/eDk+X2R0 QERrfEozZkI9YDFiQUYrfm5RYitTZVJTSD5fQig7XzFfO1JuOz84SEZnYEJF V1VRX3pKPWJnCnpyaSRIOW87LVE7PUZPdT1Qd1g5K1l3UFc8MktueFhhPklx amdNRXZEcH5GfWI8UUw0fkBhI3Eha2klS3Y1bV5rUgp6SjsyIVFXVlJpVXZE d3FiRit9Mlc/MEh3UUxrPEcyN3hoZFc4WG1CNHpZfmpUVmtzfWJgUVBrPzha K09AaHR9bUUKenhEVVIrQFpEaXkkViRfd3UxaGFAZ0JKQXVYVW13JElRZExO V0xtKzJ3djc/RlckbC1ydmEjcUckX2VlVXQ3bDs2CnpZZnNRUFEjM0l7WFdq d0RQRzdDTEMpSjk3SSEhI2ooOFh0RyhBdWxnWFR6aT9DPHEraEk1JShvYFIl VG9kU0BJZwp6RnEhOSp7K1g1WWhFRGtGdih4VXM8IyZKU1kleTBxK0gyM2Zj bD8/aENaQjYyJUMwbDdWY194LWR1Z1d9ZWlHPD4KeillX2Y7bDlhQGZSSUI4 b1IzT0QqV01GOFpZaU9pdlU+SVUjVX1hKSNXbiFYalV9fE14VUA9b3c0bjsk NWVvQUlxCmlCfTlYUEMwR01Vd1V2UHhNOG0xK3A9KkV8Nyg4QTVULUdAeUd5 d29aSFpzdXcKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBh L3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vanMvc25hcC5zdmct bWluLmpzIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9qcy9z bmFwLnN2Zy1taW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uNjU2N2QxOQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWlu L21pc2Mvc3RhdGljL2V4cGxhaW4vanMvc25hcC5zdmctbWluLmpzCkBAIC0w LDAgKzEsMjEgQEAKKy8vIFNuYXAuc3ZnIDAuNC4xCisvLworLy8gQ29weXJp Z2h0IChjKSAyMDEzIOKAkyAyMDE1IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3Jh dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVu ZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGlj ZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQg aW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBv YnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gaHR0cDov L3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8g VW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0 byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIg dGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJ UywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFO WSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRo ZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n IHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExp Y2Vuc2UuCisvLworLy8gYnVpbGQ6IDIwMTUtMDQtMTMKKworIWZ1bmN0aW9u KGEpe3ZhciBiLGMsZD0iMC40LjIiLGU9Imhhc093blByb3BlcnR5IixmPS9b XC5cL10vLGc9L1xzKixccyovLGg9IioiLGk9ZnVuY3Rpb24oYSxiKXtyZXR1 cm4gYS1ifSxqPXtuOnt9fSxrPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPTAsYj10 aGlzLmxlbmd0aDtiPmE7YSsrKWlmKCJ1bmRlZmluZWQiIT10eXBlb2YgdGhp c1thXSlyZXR1cm4gdGhpc1thXX0sbD1mdW5jdGlvbigpe2Zvcih2YXIgYT10 aGlzLmxlbmd0aDstLWE7KWlmKCJ1bmRlZmluZWQiIT10eXBlb2YgdGhpc1th XSlyZXR1cm4gdGhpc1thXX0sbT1mdW5jdGlvbihhLGQpe2E9U3RyaW5nKGEp O3ZhciBlLGY9YyxnPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3Vt ZW50cywyKSxoPW0ubGlzdGVuZXJzKGEpLGo9MCxuPVtdLG89e30scD1bXSxx PWI7cC5maXJzdERlZmluZWQ9ayxwLmxhc3REZWZpbmVkPWwsYj1hLGM9MDtm b3IodmFyIHI9MCxzPWgubGVuZ3RoO3M+cjtyKyspInpJbmRleCJpbiBoW3Jd JiYobi5wdXNoKGhbcl0uekluZGV4KSxoW3JdLnpJbmRleDwwJiYob1toW3Jd LnpJbmRleF09aFtyXSkpO2ZvcihuLnNvcnQoaSk7bltqXTwwOylpZihlPW9b bltqKytdXSxwLnB1c2goZS5hcHBseShkLGcpKSxjKXJldHVybiBjPWYscDtm b3Iocj0wO3M+cjtyKyspaWYoZT1oW3JdLCJ6SW5kZXgiaW4gZSlpZihlLnpJ bmRleD09bltqXSl7aWYocC5wdXNoKGUuYXBwbHkoZCxnKSksYylicmVhaztk byBpZihqKyssZT1vW25bal1dLGUmJnAucHVzaChlLmFwcGx5KGQsZykpLGMp YnJlYWs7d2hpbGUoZSl9ZWxzZSBvW2UuekluZGV4XT1lO2Vsc2UgaWYocC5w dXNoKGUuYXBwbHkoZCxnKSksYylicmVhaztyZXR1cm4gYz1mLGI9cSxwfTtt Ll9ldmVudHM9aixtLmxpc3RlbmVycz1mdW5jdGlvbihhKXt2YXIgYixjLGQs ZSxnLGksayxsLG09YS5zcGxpdChmKSxuPWosbz1bbl0scD1bXTtmb3IoZT0w LGc9bS5sZW5ndGg7Zz5lO2UrKyl7Zm9yKGw9W10saT0wLGs9by5sZW5ndGg7 az5pO2krKylmb3Iobj1vW2ldLm4sYz1bblttW2VdXSxuW2hdXSxkPTI7ZC0t OyliPWNbZF0sYiYmKGwucHVzaChiKSxwPXAuY29uY2F0KGIuZnx8W10pKTtv PWx9cmV0dXJuIHB9LG0ub249ZnVuY3Rpb24oYSxiKXtpZihhPVN0cmluZyhh KSwiZnVuY3Rpb24iIT10eXBlb2YgYilyZXR1cm4gZnVuY3Rpb24oKXt9O2Zv cih2YXIgYz1hLnNwbGl0KGcpLGQ9MCxlPWMubGVuZ3RoO2U+ZDtkKyspIWZ1 bmN0aW9uKGEpe2Zvcih2YXIgYyxkPWEuc3BsaXQoZiksZT1qLGc9MCxoPWQu bGVuZ3RoO2g+ZztnKyspZT1lLm4sZT1lLmhhc093blByb3BlcnR5KGRbZ10p JiZlW2RbZ11dfHwoZVtkW2ddXT17bjp7fX0pO2ZvcihlLmY9ZS5mfHxbXSxn PTAsaD1lLmYubGVuZ3RoO2g+ZztnKyspaWYoZS5mW2ddPT1iKXtjPSEwO2Jy ZWFrfSFjJiZlLmYucHVzaChiKX0oY1tkXSk7cmV0dXJuIGZ1bmN0aW9uKGEp eythPT0rYSYmKGIuekluZGV4PSthKX19LG0uZj1mdW5jdGlvbihhKXt2YXIg Yj1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gZnVuY3Rpb24o KXttLmFwcGx5KG51bGwsW2EsbnVsbF0uY29uY2F0KGIpLmNvbmNhdChbXS5z bGljZS5jYWxsKGFyZ3VtZW50cywwKSkpfX0sbS5zdG9wPWZ1bmN0aW9uKCl7 Yz0xfSxtLm50PWZ1bmN0aW9uKGEpe3JldHVybiBhP25ldyBSZWdFeHAoIig/ OlxcLnxcXC98XikiK2ErIig/OlxcLnxcXC98JCkiKS50ZXN0KGIpOmJ9LG0u bnRzPWZ1bmN0aW9uKCl7cmV0dXJuIGIuc3BsaXQoZil9LG0ub2ZmPW0udW5i aW5kPWZ1bmN0aW9uKGEsYil7aWYoIWEpcmV0dXJuIHZvaWQobS5fZXZlbnRz PWo9e246e319KTt2YXIgYz1hLnNwbGl0KGcpO2lmKGMubGVuZ3RoPjEpZm9y KHZhciBkPTAsaT1jLmxlbmd0aDtpPmQ7ZCsrKW0ub2ZmKGNbZF0sYik7ZWxz ZXtjPWEuc3BsaXQoZik7dmFyIGssbCxuLGQsaSxvLHAscT1bal07Zm9yKGQ9 MCxpPWMubGVuZ3RoO2k+ZDtkKyspZm9yKG89MDtvPHEubGVuZ3RoO28rPW4u bGVuZ3RoLTIpe2lmKG49W28sMV0saz1xW29dLm4sY1tkXSE9aClrW2NbZF1d JiZuLnB1c2goa1tjW2RdXSk7ZWxzZSBmb3IobCBpbiBrKWtbZV0obCkmJm4u cHVzaChrW2xdKTtxLnNwbGljZS5hcHBseShxLG4pfWZvcihkPTAsaT1xLmxl bmd0aDtpPmQ7ZCsrKWZvcihrPXFbZF07ay5uOyl7aWYoYil7aWYoay5mKXtm b3Iobz0wLHA9ay5mLmxlbmd0aDtwPm87bysrKWlmKGsuZltvXT09Yil7ay5m LnNwbGljZShvLDEpO2JyZWFrfSFrLmYubGVuZ3RoJiZkZWxldGUgay5mfWZv cihsIGluIGsubilpZihrLm5bZV0obCkmJmsubltsXS5mKXt2YXIgcj1rLm5b bF0uZjtmb3Iobz0wLHA9ci5sZW5ndGg7cD5vO28rKylpZihyW29dPT1iKXty LnNwbGljZShvLDEpO2JyZWFrfSFyLmxlbmd0aCYmZGVsZXRlIGsubltsXS5m fX1lbHNle2RlbGV0ZSBrLmY7Zm9yKGwgaW4gay5uKWsubltlXShsKSYmay5u W2xdLmYmJmRlbGV0ZSBrLm5bbF0uZn1rPWsubn19fSxtLm9uY2U9ZnVuY3Rp b24oYSxiKXt2YXIgYz1mdW5jdGlvbigpe3JldHVybiBtLnVuYmluZChhLGMp LGIuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtyZXR1cm4gbS5vbihhLGMpfSxt LnZlcnNpb249ZCxtLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIllvdSBh cmUgcnVubmluZyBFdmUgIitkfSwidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVs ZSYmbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9bToiZnVuY3Rpb24i PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZSgiZXZlIixbXSxm dW5jdGlvbigpe3JldHVybiBtfSk6YS5ldmU9bX0odGhpcyksZnVuY3Rpb24o YSxiKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1k KWRlZmluZShbImV2ZSJdLGZ1bmN0aW9uKGMpe3JldHVybiBiKGEsYyl9KTtl bHNlIGlmKCJ1bmRlZmluZWQiIT10eXBlb2YgZXhwb3J0cyl7dmFyIGM9cmVx dWlyZSgiZXZlIik7bW9kdWxlLmV4cG9ydHM9YihhLGMpfWVsc2UgYihhLGEu ZXZlKX0od2luZG93fHx0aGlzLGZ1bmN0aW9uKGEsYil7dmFyIGM9ZnVuY3Rp b24oYil7dmFyIGM9e30sZD1hLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8YS53 ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fGEubW96UmVxdWVzdEFuaW1h dGlvbkZyYW1lfHxhLm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fGEubXNSZXF1 ZXN0QW5pbWF0aW9uRnJhbWV8fGZ1bmN0aW9uKGEpe3NldFRpbWVvdXQoYSwx Nil9LGU9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5z dGFuY2VvZiBBcnJheXx8IltvYmplY3QgQXJyYXldIj09T2JqZWN0LnByb3Rv dHlwZS50b1N0cmluZy5jYWxsKGEpfSxmPTAsZz0iTSIrKCtuZXcgRGF0ZSku dG9TdHJpbmcoMzYpLGg9ZnVuY3Rpb24oKXtyZXR1cm4gZysoZisrKS50b1N0 cmluZygzNil9LGk9RGF0ZS5ub3d8fGZ1bmN0aW9uKCl7cmV0dXJuK25ldyBE YXRlfSxqPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7aWYobnVsbD09YSlyZXR1 cm4gYi5zO3ZhciBjPWIucy1hO2IuYis9Yi5kdXIqYyxiLkIrPWIuZHVyKmMs Yi5zPWF9LGs9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztyZXR1cm4gbnVsbD09 YT9iLnNwZDp2b2lkKGIuc3BkPWEpfSxsPWZ1bmN0aW9uKGEpe3ZhciBiPXRo aXM7cmV0dXJuIG51bGw9PWE/Yi5kdXI6KGIucz1iLnMqYS9iLmR1cix2b2lk KGIuZHVyPWEpKX0sbT1mdW5jdGlvbigpe3ZhciBhPXRoaXM7ZGVsZXRlIGNb YS5pZF0sYS51cGRhdGUoKSxiKCJtaW5hLnN0b3AuIithLmlkLGEpfSxuPWZ1 bmN0aW9uKCl7dmFyIGE9dGhpczthLnBkaWZ8fChkZWxldGUgY1thLmlkXSxh LnVwZGF0ZSgpLGEucGRpZj1hLmdldCgpLWEuYil9LG89ZnVuY3Rpb24oKXt2 YXIgYT10aGlzO2EucGRpZiYmKGEuYj1hLmdldCgpLWEucGRpZixkZWxldGUg YS5wZGlmLGNbYS5pZF09YSl9LHA9ZnVuY3Rpb24oKXt2YXIgYSxiPXRoaXM7 aWYoZShiLnN0YXJ0KSl7YT1bXTtmb3IodmFyIGM9MCxkPWIuc3RhcnQubGVu Z3RoO2Q+YztjKyspYVtjXT0rYi5zdGFydFtjXSsoYi5lbmRbY10tYi5zdGFy dFtjXSkqYi5lYXNpbmcoYi5zKX1lbHNlIGE9K2Iuc3RhcnQrKGIuZW5kLWIu c3RhcnQpKmIuZWFzaW5nKGIucyk7Yi5zZXQoYSl9LHE9ZnVuY3Rpb24oKXt2 YXIgYT0wO2Zvcih2YXIgZSBpbiBjKWlmKGMuaGFzT3duUHJvcGVydHkoZSkp e3ZhciBmPWNbZV0sZz1mLmdldCgpO2ErKyxmLnM9KGctZi5iKS8oZi5kdXIv Zi5zcGQpLGYucz49MSYmKGRlbGV0ZSBjW2VdLGYucz0xLGEtLSxmdW5jdGlv bihhKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YigibWluYS5maW5pc2guIith LmlkLGEpfSl9KGYpKSxmLnVwZGF0ZSgpfWEmJmQocSl9LHI9ZnVuY3Rpb24o YSxiLGUsZixnLGkscyl7dmFyIHQ9e2lkOmgoKSxzdGFydDphLGVuZDpiLGI6 ZSxzOjAsZHVyOmYtZSxzcGQ6MSxnZXQ6ZyxzZXQ6aSxlYXNpbmc6c3x8ci5s aW5lYXIsc3RhdHVzOmosc3BlZWQ6ayxkdXJhdGlvbjpsLHN0b3A6bSxwYXVz ZTpuLHJlc3VtZTpvLHVwZGF0ZTpwfTtjW3QuaWRdPXQ7dmFyIHUsdj0wO2Zv cih1IGluIGMpaWYoYy5oYXNPd25Qcm9wZXJ0eSh1KSYmKHYrKywyPT12KSli cmVhaztyZXR1cm4gMT09diYmZChxKSx0fTtyZXR1cm4gci50aW1lPWksci5n ZXRCeUlkPWZ1bmN0aW9uKGEpe3JldHVybiBjW2FdfHxudWxsfSxyLmxpbmVh cj1mdW5jdGlvbihhKXtyZXR1cm4gYX0sci5lYXNlb3V0PWZ1bmN0aW9uKGEp e3JldHVybiBNYXRoLnBvdyhhLDEuNyl9LHIuZWFzZWluPWZ1bmN0aW9uKGEp e3JldHVybiBNYXRoLnBvdyhhLC40OCl9LHIuZWFzZWlub3V0PWZ1bmN0aW9u KGEpe2lmKDE9PWEpcmV0dXJuIDE7aWYoMD09YSlyZXR1cm4gMDt2YXIgYj0u NDgtYS8xLjA0LGM9TWF0aC5zcXJ0KC4xNzM0K2IqYiksZD1jLWIsZT1NYXRo LnBvdyhNYXRoLmFicyhkKSwxLzMpKigwPmQ/LTE6MSksZj0tYy1iLGc9TWF0 aC5wb3coTWF0aC5hYnMoZiksMS8zKSooMD5mPy0xOjEpLGg9ZStnKy41O3Jl dHVybiAzKigxLWgpKmgqaCtoKmgqaH0sci5iYWNraW49ZnVuY3Rpb24oYSl7 aWYoMT09YSlyZXR1cm4gMTt2YXIgYj0xLjcwMTU4O3JldHVybiBhKmEqKChi KzEpKmEtYil9LHIuYmFja291dD1mdW5jdGlvbihhKXtpZigwPT1hKXJldHVy biAwO2EtPTE7dmFyIGI9MS43MDE1ODtyZXR1cm4gYSphKigoYisxKSphK2Ip KzF9LHIuZWxhc3RpYz1mdW5jdGlvbihhKXtyZXR1cm4gYT09ISFhP2E6TWF0 aC5wb3coMiwtMTAqYSkqTWF0aC5zaW4oMiooYS0uMDc1KSpNYXRoLlBJLy4z KSsxfSxyLmJvdW5jZT1mdW5jdGlvbihhKXt2YXIgYixjPTcuNTYyNSxkPTIu NzU7cmV0dXJuIDEvZD5hP2I9YyphKmE6Mi9kPmE/KGEtPTEuNS9kLGI9Yyph KmErLjc1KToyLjUvZD5hPyhhLT0yLjI1L2QsYj1jKmEqYSsuOTM3NSk6KGEt PTIuNjI1L2QsYj1jKmEqYSsuOTg0Mzc1KSxifSxhLm1pbmE9cixyfSgidW5k ZWZpbmVkIj09dHlwZW9mIGI/ZnVuY3Rpb24oKXt9OmIpLGQ9ZnVuY3Rpb24o YSl7ZnVuY3Rpb24gYyhhLGIpe2lmKGEpe2lmKGEubm9kZVR5cGUpcmV0dXJu IHcoYSk7aWYoZShhLCJhcnJheSIpJiZjLnNldClyZXR1cm4gYy5zZXQuYXBw bHkoYyxhKTtpZihhIGluc3RhbmNlb2YgcylyZXR1cm4gYTtpZihudWxsPT1i KXJldHVybiBhPXkuZG9jLnF1ZXJ5U2VsZWN0b3IoU3RyaW5nKGEpKSx3KGEp fXJldHVybiBhPW51bGw9PWE/IjEwMCUiOmEsYj1udWxsPT1iPyIxMDAlIjpi LG5ldyB2KGEsYil9ZnVuY3Rpb24gZChhLGIpe2lmKGIpe2lmKCIjdGV4dCI9 PWEmJihhPXkuZG9jLmNyZWF0ZVRleHROb2RlKGIudGV4dHx8YlsiI3RleHQi XXx8IiIpKSwiI2NvbW1lbnQiPT1hJiYoYT15LmRvYy5jcmVhdGVDb21tZW50 KGIudGV4dHx8YlsiI3RleHQiXXx8IiIpKSwic3RyaW5nIj09dHlwZW9mIGEm JihhPWQoYSkpLCJzdHJpbmciPT10eXBlb2YgYilyZXR1cm4gMT09YS5ub2Rl VHlwZT8ieGxpbms6Ij09Yi5zdWJzdHJpbmcoMCw2KT9hLmdldEF0dHJpYnV0 ZU5TKFQsYi5zdWJzdHJpbmcoNikpOiJ4bWw6Ij09Yi5zdWJzdHJpbmcoMCw0 KT9hLmdldEF0dHJpYnV0ZU5TKFUsYi5zdWJzdHJpbmcoNCkpOmEuZ2V0QXR0 cmlidXRlKGIpOiJ0ZXh0Ij09Yj9hLm5vZGVWYWx1ZTpudWxsO2lmKDE9PWEu bm9kZVR5cGUpe2Zvcih2YXIgYyBpbiBiKWlmKGJbel0oYykpe3ZhciBlPUEo YltjXSk7ZT8ieGxpbms6Ij09Yy5zdWJzdHJpbmcoMCw2KT9hLnNldEF0dHJp YnV0ZU5TKFQsYy5zdWJzdHJpbmcoNiksZSk6InhtbDoiPT1jLnN1YnN0cmlu ZygwLDQpP2Euc2V0QXR0cmlidXRlTlMoVSxjLnN1YnN0cmluZyg0KSxlKTph LnNldEF0dHJpYnV0ZShjLGUpOmEucmVtb3ZlQXR0cmlidXRlKGMpfX1lbHNl InRleHQiaW4gYiYmKGEubm9kZVZhbHVlPWIudGV4dCl9ZWxzZSBhPXkuZG9j LmNyZWF0ZUVsZW1lbnROUyhVLGEpO3JldHVybiBhfWZ1bmN0aW9uIGUoYSxi KXtyZXR1cm4gYj1BLnByb3RvdHlwZS50b0xvd2VyQ2FzZS5jYWxsKGIpLCJm aW5pdGUiPT1iP2lzRmluaXRlKGEpOiJhcnJheSI9PWImJihhIGluc3RhbmNl b2YgQXJyYXl8fEFycmF5LmlzQXJyYXkmJkFycmF5LmlzQXJyYXkoYSkpPyEw OiJudWxsIj09YiYmbnVsbD09PWF8fGI9PXR5cGVvZiBhJiZudWxsIT09YXx8 Im9iamVjdCI9PWImJmE9PT1PYmplY3QoYSl8fEouY2FsbChhKS5zbGljZSg4 LC0xKS50b0xvd2VyQ2FzZSgpPT1ifWZ1bmN0aW9uIGYoYSl7aWYoImZ1bmN0 aW9uIj09dHlwZW9mIGF8fE9iamVjdChhKSE9PWEpcmV0dXJuIGE7dmFyIGI9 bmV3IGEuY29uc3RydWN0b3I7Zm9yKHZhciBjIGluIGEpYVt6XShjKSYmKGJb Y109ZihhW2NdKSk7cmV0dXJuIGJ9ZnVuY3Rpb24gaChhLGIpe2Zvcih2YXIg Yz0wLGQ9YS5sZW5ndGg7ZD5jO2MrKylpZihhW2NdPT09YilyZXR1cm4gYS5w dXNoKGEuc3BsaWNlKGMsMSlbMF0pfWZ1bmN0aW9uIGkoYSxiLGMpe2Z1bmN0 aW9uIGQoKXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1 bWVudHMsMCksZj1lLmpvaW4oIuKQgCIpLGc9ZC5jYWNoZT1kLmNhY2hlfHx7 fSxpPWQuY291bnQ9ZC5jb3VudHx8W107cmV0dXJuIGdbel0oZik/KGgoaSxm KSxjP2MoZ1tmXSk6Z1tmXSk6KGkubGVuZ3RoPj0xZTMmJmRlbGV0ZSBnW2ku c2hpZnQoKV0saS5wdXNoKGYpLGdbZl09YS5hcHBseShiLGUpLGM/YyhnW2Zd KTpnW2ZdKX1yZXR1cm4gZH1mdW5jdGlvbiBqKGEsYixjLGQsZSxmKXtpZihu dWxsPT1lKXt2YXIgZz1hLWMsaD1iLWQ7cmV0dXJuIGd8fGg/KDE4MCsxODAq RC5hdGFuMigtaCwtZykvSCszNjApJTM2MDowfXJldHVybiBqKGEsYixlLGYp LWooYyxkLGUsZil9ZnVuY3Rpb24gayhhKXtyZXR1cm4gYSUzNjAqSC8xODB9 ZnVuY3Rpb24gbChhKXtyZXR1cm4gMTgwKmEvSCUzNjB9ZnVuY3Rpb24gbShh KXt2YXIgYj1bXTtyZXR1cm4gYT1hLnJlcGxhY2UoLyg/Ol58XHMpKFx3Kylc KChbXildKylcKS9nLGZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gZD1kLnNwbGl0 KC9ccyosXHMqfFxzKy8pLCJyb3RhdGUiPT1jJiYxPT1kLmxlbmd0aCYmZC5w dXNoKDAsMCksInNjYWxlIj09YyYmKGQubGVuZ3RoPjI/ZD1kLnNsaWNlKDAs Mik6Mj09ZC5sZW5ndGgmJmQucHVzaCgwLDApLDE9PWQubGVuZ3RoJiZkLnB1 c2goZFswXSwwLDApKSxiLnB1c2goInNrZXdYIj09Yz9bIm0iLDEsMCxELnRh bihrKGRbMF0pKSwxLDAsMF06InNrZXdZIj09Yz9bIm0iLDEsRC50YW4oayhk WzBdKSksMCwxLDAsMF06W2MuY2hhckF0KDApXS5jb25jYXQoZCkpLGF9KSxi fWZ1bmN0aW9uIG4oYSxiKXt2YXIgZD1hYihhKSxlPW5ldyBjLk1hdHJpeDtp ZihkKWZvcih2YXIgZj0wLGc9ZC5sZW5ndGg7Zz5mO2YrKyl7dmFyIGgsaSxq LGssbCxtPWRbZl0sbj1tLmxlbmd0aCxvPUEobVswXSkudG9Mb3dlckNhc2Uo KSxwPW1bMF0hPW8scT1wP2UuaW52ZXJ0KCk6MDsidCI9PW8mJjI9PW4/ZS50 cmFuc2xhdGUobVsxXSwwKToidCI9PW8mJjM9PW4/cD8oaD1xLngoMCwwKSxp PXEueSgwLDApLGo9cS54KG1bMV0sbVsyXSksaz1xLnkobVsxXSxtWzJdKSxl LnRyYW5zbGF0ZShqLWgsay1pKSk6ZS50cmFuc2xhdGUobVsxXSxtWzJdKToi ciI9PW8/Mj09bj8obD1sfHxiLGUucm90YXRlKG1bMV0sbC54K2wud2lkdGgv MixsLnkrbC5oZWlnaHQvMikpOjQ9PW4mJihwPyhqPXEueChtWzJdLG1bM10p LGs9cS55KG1bMl0sbVszXSksZS5yb3RhdGUobVsxXSxqLGspKTplLnJvdGF0 ZShtWzFdLG1bMl0sbVszXSkpOiJzIj09bz8yPT1ufHwzPT1uPyhsPWx8fGIs ZS5zY2FsZShtWzFdLG1bbi0xXSxsLngrbC53aWR0aC8yLGwueStsLmhlaWdo dC8yKSk6ND09bj9wPyhqPXEueChtWzJdLG1bM10pLGs9cS55KG1bMl0sbVsz XSksZS5zY2FsZShtWzFdLG1bMV0saixrKSk6ZS5zY2FsZShtWzFdLG1bMV0s bVsyXSxtWzNdKTo1PT1uJiYocD8oaj1xLngobVszXSxtWzRdKSxrPXEueSht WzNdLG1bNF0pLGUuc2NhbGUobVsxXSxtWzJdLGosaykpOmUuc2NhbGUobVsx XSxtWzJdLG1bM10sbVs0XSkpOiJtIj09byYmNz09biYmZS5hZGQobVsxXSxt WzJdLG1bM10sbVs0XSxtWzVdLG1bNl0pfXJldHVybiBlfWZ1bmN0aW9uIG8o YSl7dmFyIGI9YS5ub2RlLm93bmVyU1ZHRWxlbWVudCYmdyhhLm5vZGUub3du ZXJTVkdFbGVtZW50KXx8YS5ub2RlLnBhcmVudE5vZGUmJncoYS5ub2RlLnBh cmVudE5vZGUpfHxjLnNlbGVjdCgic3ZnIil8fGMoMCwwKSxkPWIuc2VsZWN0 KCJkZWZzIiksZT1udWxsPT1kPyExOmQubm9kZTtyZXR1cm4gZXx8KGU9dSgi ZGVmcyIsYi5ub2RlKS5ub2RlKSxlfWZ1bmN0aW9uIHAoYSl7cmV0dXJuIGEu bm9kZS5vd25lclNWR0VsZW1lbnQmJncoYS5ub2RlLm93bmVyU1ZHRWxlbWVu dCl8fGMuc2VsZWN0KCJzdmciKX1mdW5jdGlvbiBxKGEsYixjKXtmdW5jdGlv biBlKGEpe2lmKG51bGw9PWEpcmV0dXJuIEk7aWYoYT09K2EpcmV0dXJuIGE7 ZChqLHt3aWR0aDphfSk7dHJ5e3JldHVybiBqLmdldEJCb3goKS53aWR0aH1j YXRjaChiKXtyZXR1cm4gMH19ZnVuY3Rpb24gZihhKXtpZihudWxsPT1hKXJl dHVybiBJO2lmKGE9PSthKXJldHVybiBhO2Qoaix7aGVpZ2h0OmF9KTt0cnl7 cmV0dXJuIGouZ2V0QkJveCgpLmhlaWdodH1jYXRjaChiKXtyZXR1cm4gMH19 ZnVuY3Rpb24gZyhkLGUpe251bGw9PWI/aVtkXT1lKGEuYXR0cihkKXx8MCk6 ZD09YiYmKGk9ZShudWxsPT1jP2EuYXR0cihkKXx8MDpjKSl9dmFyIGg9cChh KS5ub2RlLGk9e30saj1oLnF1ZXJ5U2VsZWN0b3IoIi5zdmctLS1tZ3IiKTtz d2l0Y2goanx8KGo9ZCgicmVjdCIpLGQoaix7eDotOWU5LHk6LTllOSx3aWR0 aDoxMCxoZWlnaHQ6MTAsImNsYXNzIjoic3ZnLS0tbWdyIixmaWxsOiJub25l In0pLGguYXBwZW5kQ2hpbGQoaikpLGEudHlwZSl7Y2FzZSJyZWN0IjpnKCJy eCIsZSksZygicnkiLGYpO2Nhc2UiaW1hZ2UiOmcoIndpZHRoIixlKSxnKCJo ZWlnaHQiLGYpO2Nhc2UidGV4dCI6ZygieCIsZSksZygieSIsZik7YnJlYWs7 Y2FzZSJjaXJjbGUiOmcoImN4IixlKSxnKCJjeSIsZiksZygiciIsZSk7YnJl YWs7Y2FzZSJlbGxpcHNlIjpnKCJjeCIsZSksZygiY3kiLGYpLGcoInJ4Iixl KSxnKCJyeSIsZik7YnJlYWs7Y2FzZSJsaW5lIjpnKCJ4MSIsZSksZygieDIi LGUpLGcoInkxIixmKSxnKCJ5MiIsZik7YnJlYWs7Y2FzZSJtYXJrZXIiOmco InJlZlgiLGUpLGcoIm1hcmtlcldpZHRoIixlKSxnKCJyZWZZIixmKSxnKCJt YXJrZXJIZWlnaHQiLGYpO2JyZWFrO2Nhc2UicmFkaWFsR3JhZGllbnQiOmco ImZ4IixlKSxnKCJmeSIsZik7YnJlYWs7Y2FzZSJ0c3BhbiI6ZygiZHgiLGUp LGcoImR5IixmKTticmVhaztkZWZhdWx0OmcoYixlKX1yZXR1cm4gaC5yZW1v dmVDaGlsZChqKSxpfWZ1bmN0aW9uIHIoYSl7ZShhLCJhcnJheSIpfHwoYT1B cnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCkpO2Zvcih2 YXIgYj0wLGM9MCxkPXRoaXMubm9kZTt0aGlzW2JdOylkZWxldGUgdGhpc1ti KytdO2ZvcihiPTA7YjxhLmxlbmd0aDtiKyspInNldCI9PWFbYl0udHlwZT9h W2JdLmZvckVhY2goZnVuY3Rpb24oYSl7ZC5hcHBlbmRDaGlsZChhLm5vZGUp fSk6ZC5hcHBlbmRDaGlsZChhW2JdLm5vZGUpO3ZhciBmPWQuY2hpbGROb2Rl cztmb3IoYj0wO2I8Zi5sZW5ndGg7YisrKXRoaXNbYysrXT13KGZbYl0pO3Jl dHVybiB0aGlzfWZ1bmN0aW9uIHMoYSl7aWYoYS5zbmFwIGluIFYpcmV0dXJu IFZbYS5zbmFwXTt2YXIgYjt0cnl7Yj1hLm93bmVyU1ZHRWxlbWVudH1jYXRj aChjKXt9dGhpcy5ub2RlPWEsYiYmKHRoaXMucGFwZXI9bmV3IHYoYikpLHRo aXMudHlwZT1hLnRhZ05hbWV8fGEubm9kZU5hbWU7dmFyIGQ9dGhpcy5pZD1T KHRoaXMpO2lmKHRoaXMuYW5pbXM9e30sdGhpcy5fPXt0cmFuc2Zvcm06W119 LGEuc25hcD1kLFZbZF09dGhpcywiZyI9PXRoaXMudHlwZSYmKHRoaXMuYWRk PXIpLHRoaXMudHlwZSBpbntnOjEsbWFzazoxLHBhdHRlcm46MSxzeW1ib2w6 MX0pZm9yKHZhciBlIGluIHYucHJvdG90eXBlKXYucHJvdG90eXBlW3pdKGUp JiYodGhpc1tlXT12LnByb3RvdHlwZVtlXSl9ZnVuY3Rpb24gdChhKXt0aGlz Lm5vZGU9YX1mdW5jdGlvbiB1KGEsYil7dmFyIGM9ZChhKTtiLmFwcGVuZENo aWxkKGMpO3ZhciBlPXcoYyk7cmV0dXJuIGV9ZnVuY3Rpb24gdihhLGIpe3Zh ciBjLGUsZixnPXYucHJvdG90eXBlO2lmKGEmJiJzdmciPT1hLnRhZ05hbWUp e2lmKGEuc25hcCBpbiBWKXJldHVybiBWW2Euc25hcF07dmFyIGg9YS5vd25l ckRvY3VtZW50O2M9bmV3IHMoYSksZT1hLmdldEVsZW1lbnRzQnlUYWdOYW1l KCJkZXNjIilbMF0sZj1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJkZWZzIilb MF0sZXx8KGU9ZCgiZGVzYyIpLGUuYXBwZW5kQ2hpbGQoaC5jcmVhdGVUZXh0 Tm9kZSgiQ3JlYXRlZCB3aXRoIFNuYXAiKSksYy5ub2RlLmFwcGVuZENoaWxk KGUpKSxmfHwoZj1kKCJkZWZzIiksYy5ub2RlLmFwcGVuZENoaWxkKGYpKSxj LmRlZnM9Zjtmb3IodmFyIGkgaW4gZylnW3pdKGkpJiYoY1tpXT1nW2ldKTtj LnBhcGVyPWMucm9vdD1jfWVsc2UgYz11KCJzdmciLHkuZG9jLmJvZHkpLGQo Yy5ub2RlLHtoZWlnaHQ6Yix2ZXJzaW9uOjEuMSx3aWR0aDphLHhtbG5zOlV9 KTtyZXR1cm4gY31mdW5jdGlvbiB3KGEpe3JldHVybiBhP2EgaW5zdGFuY2Vv ZiBzfHxhIGluc3RhbmNlb2YgdD9hOmEudGFnTmFtZSYmInN2ZyI9PWEudGFn TmFtZS50b0xvd2VyQ2FzZSgpP25ldyB2KGEpOmEudGFnTmFtZSYmIm9iamVj dCI9PWEudGFnTmFtZS50b0xvd2VyQ2FzZSgpJiYiaW1hZ2Uvc3ZnK3htbCI9 PWEudHlwZT9uZXcgdihhLmNvbnRlbnREb2N1bWVudC5nZXRFbGVtZW50c0J5 VGFnTmFtZSgic3ZnIilbMF0pOm5ldyBzKGEpOmF9ZnVuY3Rpb24geChhLGIp e2Zvcih2YXIgYz0wLGQ9YS5sZW5ndGg7ZD5jO2MrKyl7dmFyIGU9e3R5cGU6 YVtjXS50eXBlLGF0dHI6YVtjXS5hdHRyKCl9LGY9YVtjXS5jaGlsZHJlbigp O2IucHVzaChlKSxmLmxlbmd0aCYmeChmLGUuY2hpbGROb2Rlcz1bXSl9fWMu dmVyc2lvbj0iMC40LjAiLGMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4i U25hcCB2Iit0aGlzLnZlcnNpb259LGMuXz17fTt2YXIgeT17d2luOmEud2lu ZG93LGRvYzphLndpbmRvdy5kb2N1bWVudH07Yy5fLmdsb2I9eTt7dmFyIHo9 Imhhc093blByb3BlcnR5IixBPVN0cmluZyxCPXBhcnNlRmxvYXQsQz1wYXJz ZUludCxEPU1hdGgsRT1ELm1heCxGPUQubWluLEc9RC5hYnMsSD0oRC5wb3cs RC5QSSksST0oRC5yb3VuZCwiIiksSj1PYmplY3QucHJvdG90eXBlLnRvU3Ry aW5nLEs9L15ccyooKCNbYS1mXGRdezZ9KXwoI1thLWZcZF17M30pfHJnYmE/ XChccyooW1xkXC5dKyU/XHMqLFxzKltcZFwuXSslP1xzKixccypbXGRcLl0r JT8oPzpccyosXHMqW1xkXC5dKyU/KT8pXHMqXCl8aHNiYT9cKFxzKihbXGRc Ll0rKD86ZGVnfFx4YjB8JSk/XHMqLFxzKltcZFwuXSslP1xzKixccypbXGRc Ll0rKD86JT9ccyosXHMqW1xkXC5dKyk/JT8pXHMqXCl8aHNsYT9cKFxzKihb XGRcLl0rKD86ZGVnfFx4YjB8JSk/XHMqLFxzKltcZFwuXSslP1xzKixccypb XGRcLl0rKD86JT9ccyosXHMqW1xkXC5dKyk/JT8pXHMqXCkpXHMqJC9pLEw9 KGMuXy5zZXBhcmF0b3I9L1ssXHNdKy8sL1tcc10qLFtcc10qLyksTT17aHM6 MSxyZzoxfSxOPS8oW2Etel0pW1xzLF0qKCgtP1xkKlwuP1xkKig/OmVbXC0r XT9cZCspP1tcc10qLD9bXHNdKikrKS9naSxPPS8oW3JzdG1dKVtccyxdKigo LT9cZCpcLj9cZCooPzplW1wtK10/XGQrKT9bXHNdKiw/W1xzXSopKykvZ2ks UD0vKC0/XGQqXC4/XGQqKD86ZVtcLStdP1xcZCspPylbXHNdKiw/W1xzXSov Z2ksUT0wLFI9IlMiKygrbmV3IERhdGUpLnRvU3RyaW5nKDM2KSxTPWZ1bmN0 aW9uKGEpe3JldHVybihhJiZhLnR5cGU/YS50eXBlOkkpK1IrKFErKykudG9T dHJpbmcoMzYpfSxUPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIixV PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsVj17fTtjLnVybD1mdW5j dGlvbihhKXtyZXR1cm4idXJsKCcjIithKyInKSJ9fWMuXy4kPWQsYy5fLmlk PVMsYy5mb3JtYXQ9ZnVuY3Rpb24oKXt2YXIgYT0vXHsoW15cfV0rKVx9L2cs Yj0vKD86KD86XnxcLikoLis/KSg/PVxbfFwufCR8XCgpfFxbKCd8IikoLis/ KVwyXF0pKFwoXCkpPy9nLGM9ZnVuY3Rpb24oYSxjLGQpe3ZhciBlPWQ7cmV0 dXJuIGMucmVwbGFjZShiLGZ1bmN0aW9uKGEsYixjLGQsZil7Yj1ifHxkLGUm JihiIGluIGUmJihlPWVbYl0pLCJmdW5jdGlvbiI9PXR5cGVvZiBlJiZmJiYo ZT1lKCkpKX0pLGU9KG51bGw9PWV8fGU9PWQ/YTplKSsiIn07cmV0dXJuIGZ1 bmN0aW9uKGIsZCl7cmV0dXJuIEEoYikucmVwbGFjZShhLGZ1bmN0aW9uKGEs Yil7cmV0dXJuIGMoYSxiLGQpfSl9fSgpLGMuXy5jbG9uZT1mLGMuXy5jYWNo ZXI9aSxjLnJhZD1rLGMuZGVnPWwsYy5zaW49ZnVuY3Rpb24oYSl7cmV0dXJu IEQuc2luKGMucmFkKGEpKX0sYy50YW49ZnVuY3Rpb24oYSl7cmV0dXJuIEQu dGFuKGMucmFkKGEpKX0sYy5jb3M9ZnVuY3Rpb24oYSl7cmV0dXJuIEQuY29z KGMucmFkKGEpKX0sYy5hc2luPWZ1bmN0aW9uKGEpe3JldHVybiBjLmRlZyhE LmFzaW4oYSkpfSxjLmFjb3M9ZnVuY3Rpb24oYSl7cmV0dXJuIGMuZGVnKEQu YWNvcyhhKSl9LGMuYXRhbj1mdW5jdGlvbihhKXtyZXR1cm4gYy5kZWcoRC5h dGFuKGEpKX0sYy5hdGFuMj1mdW5jdGlvbihhKXtyZXR1cm4gYy5kZWcoRC5h dGFuMihhKSl9LGMuYW5nbGU9aixjLmxlbj1mdW5jdGlvbihhLGIsZCxlKXty ZXR1cm4gTWF0aC5zcXJ0KGMubGVuMihhLGIsZCxlKSl9LGMubGVuMj1mdW5j dGlvbihhLGIsYyxkKXtyZXR1cm4oYS1jKSooYS1jKSsoYi1kKSooYi1kKX0s Yy5jbG9zZXN0UG9pbnQ9ZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7 dmFyIGQ9YS54LWIsZT1hLnktYztyZXR1cm4gZCpkK2UqZX1mb3IodmFyIGUs ZixnLGgsaT1hLm5vZGUsaj1pLmdldFRvdGFsTGVuZ3RoKCksaz1qL2kucGF0 aFNlZ0xpc3QubnVtYmVyT2ZJdGVtcyouMTI1LGw9MS8wLG09MDtqPj1tO20r PWspKGg9ZChnPWkuZ2V0UG9pbnRBdExlbmd0aChtKSkpPGwmJihlPWcsZj1t LGw9aCk7Zm9yKGsqPS41O2s+LjU7KXt2YXIgbixvLHAscSxyLHM7KHA9Zi1r KT49MCYmKHI9ZChuPWkuZ2V0UG9pbnRBdExlbmd0aChwKSkpPGw/KGU9bixm PXAsbD1yKToocT1mK2spPD1qJiYocz1kKG89aS5nZXRQb2ludEF0TGVuZ3Ro KHEpKSk8bD8oZT1vLGY9cSxsPXMpOmsqPS41fXJldHVybiBlPXt4OmUueCx5 OmUueSxsZW5ndGg6ZixkaXN0YW5jZTpNYXRoLnNxcnQobCl9fSxjLmlzPWUs Yy5zbmFwVG89ZnVuY3Rpb24oYSxiLGMpe2lmKGM9ZShjLCJmaW5pdGUiKT9j OjEwLGUoYSwiYXJyYXkiKSl7Zm9yKHZhciBkPWEubGVuZ3RoO2QtLTspaWYo RyhhW2RdLWIpPD1jKXJldHVybiBhW2RdfWVsc2V7YT0rYTt2YXIgZj1iJWE7 aWYoYz5mKXJldHVybiBiLWY7aWYoZj5hLWMpcmV0dXJuIGItZithfXJldHVy biBifSxjLmdldFJHQj1pKGZ1bmN0aW9uKGEpe2lmKCFhfHwoYT1BKGEpKS5p bmRleE9mKCItIikrMSlyZXR1cm57cjotMSxnOi0xLGI6LTEsaGV4OiJub25l IixlcnJvcjoxLHRvU3RyaW5nOlp9O2lmKCJub25lIj09YSlyZXR1cm57cjot MSxnOi0xLGI6LTEsaGV4OiJub25lIix0b1N0cmluZzpafTtpZighKE1bel0o YS50b0xvd2VyQ2FzZSgpLnN1YnN0cmluZygwLDIpKXx8IiMiPT1hLmNoYXJB dCgpKSYmKGE9VyhhKSksIWEpcmV0dXJue3I6LTEsZzotMSxiOi0xLGhleDoi bm9uZSIsZXJyb3I6MSx0b1N0cmluZzpafTt2YXIgYixkLGYsZyxoLGksaj1h Lm1hdGNoKEspO3JldHVybiBqPyhqWzJdJiYoZj1DKGpbMl0uc3Vic3RyaW5n KDUpLDE2KSxkPUMoalsyXS5zdWJzdHJpbmcoMyw1KSwxNiksYj1DKGpbMl0u c3Vic3RyaW5nKDEsMyksMTYpKSxqWzNdJiYoZj1DKChoPWpbM10uY2hhckF0 KDMpKStoLDE2KSxkPUMoKGg9alszXS5jaGFyQXQoMikpK2gsMTYpLGI9Qygo aD1qWzNdLmNoYXJBdCgxKSkraCwxNikpLGpbNF0mJihpPWpbNF0uc3BsaXQo TCksYj1CKGlbMF0pLCIlIj09aVswXS5zbGljZSgtMSkmJihiKj0yLjU1KSxk PUIoaVsxXSksIiUiPT1pWzFdLnNsaWNlKC0xKSYmKGQqPTIuNTUpLGY9Qihp WzJdKSwiJSI9PWlbMl0uc2xpY2UoLTEpJiYoZio9Mi41NSksInJnYmEiPT1q WzFdLnRvTG93ZXJDYXNlKCkuc2xpY2UoMCw0KSYmKGc9QihpWzNdKSksaVsz XSYmIiUiPT1pWzNdLnNsaWNlKC0xKSYmKGcvPTEwMCkpLGpbNV0/KGk9als1 XS5zcGxpdChMKSxiPUIoaVswXSksIiUiPT1pWzBdLnNsaWNlKC0xKSYmKGIv PTEwMCksZD1CKGlbMV0pLCIlIj09aVsxXS5zbGljZSgtMSkmJihkLz0xMDAp LGY9QihpWzJdKSwiJSI9PWlbMl0uc2xpY2UoLTEpJiYoZi89MTAwKSwoImRl ZyI9PWlbMF0uc2xpY2UoLTMpfHwiwrAiPT1pWzBdLnNsaWNlKC0xKSkmJihi Lz0zNjApLCJoc2JhIj09alsxXS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsNCkm JihnPUIoaVszXSkpLGlbM10mJiIlIj09aVszXS5zbGljZSgtMSkmJihnLz0x MDApLGMuaHNiMnJnYihiLGQsZixnKSk6als2XT8oaT1qWzZdLnNwbGl0KEwp LGI9QihpWzBdKSwiJSI9PWlbMF0uc2xpY2UoLTEpJiYoYi89MTAwKSxkPUIo aVsxXSksIiUiPT1pWzFdLnNsaWNlKC0xKSYmKGQvPTEwMCksZj1CKGlbMl0p LCIlIj09aVsyXS5zbGljZSgtMSkmJihmLz0xMDApLCgiZGVnIj09aVswXS5z bGljZSgtMyl8fCLCsCI9PWlbMF0uc2xpY2UoLTEpKSYmKGIvPTM2MCksImhz bGEiPT1qWzFdLnRvTG93ZXJDYXNlKCkuc2xpY2UoMCw0KSYmKGc9QihpWzNd KSksaVszXSYmIiUiPT1pWzNdLnNsaWNlKC0xKSYmKGcvPTEwMCksYy5oc2wy cmdiKGIsZCxmLGcpKTooYj1GKEQucm91bmQoYiksMjU1KSxkPUYoRC5yb3Vu ZChkKSwyNTUpLGY9RihELnJvdW5kKGYpLDI1NSksZz1GKEUoZywwKSwxKSxq PXtyOmIsZzpkLGI6Zix0b1N0cmluZzpafSxqLmhleD0iIyIrKDE2Nzc3MjE2 fGZ8ZDw8OHxiPDwxNikudG9TdHJpbmcoMTYpLnNsaWNlKDEpLGoub3BhY2l0 eT1lKGcsImZpbml0ZSIpP2c6MSxqKSk6e3I6LTEsZzotMSxiOi0xLGhleDoi bm9uZSIsZXJyb3I6MSx0b1N0cmluZzpafX0sYyksYy5oc2I9aShmdW5jdGlv bihhLGIsZCl7cmV0dXJuIGMuaHNiMnJnYihhLGIsZCkuaGV4fSksYy5oc2w9 aShmdW5jdGlvbihhLGIsZCl7cmV0dXJuIGMuaHNsMnJnYihhLGIsZCkuaGV4 fSksYy5yZ2I9aShmdW5jdGlvbihhLGIsYyxkKXtpZihlKGQsImZpbml0ZSIp KXt2YXIgZj1ELnJvdW5kO3JldHVybiJyZ2JhKCIrW2YoYSksZihiKSxmKGMp LCtkLnRvRml4ZWQoMildKyIpIn1yZXR1cm4iIyIrKDE2Nzc3MjE2fGN8Yjw8 OHxhPDwxNikudG9TdHJpbmcoMTYpLnNsaWNlKDEpfSk7dmFyIFc9ZnVuY3Rp b24oYSl7dmFyIGI9eS5kb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQi KVswXXx8eS5kb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInN2ZyIpWzBdLGM9 InJnYigyNTUsIDAsIDApIjtyZXR1cm4oVz1pKGZ1bmN0aW9uKGEpe2lmKCJy ZWQiPT1hLnRvTG93ZXJDYXNlKCkpcmV0dXJuIGM7Yi5zdHlsZS5jb2xvcj1j LGIuc3R5bGUuY29sb3I9YTt2YXIgZD15LmRvYy5kZWZhdWx0Vmlldy5nZXRD b21wdXRlZFN0eWxlKGIsSSkuZ2V0UHJvcGVydHlWYWx1ZSgiY29sb3IiKTty ZXR1cm4gZD09Yz9udWxsOmR9KSkoYSl9LFg9ZnVuY3Rpb24oKXtyZXR1cm4i aHNiKCIrW3RoaXMuaCx0aGlzLnMsdGhpcy5iXSsiKSJ9LFk9ZnVuY3Rpb24o KXtyZXR1cm4iaHNsKCIrW3RoaXMuaCx0aGlzLnMsdGhpcy5sXSsiKSJ9LFo9 ZnVuY3Rpb24oKXtyZXR1cm4gMT09dGhpcy5vcGFjaXR5fHxudWxsPT10aGlz Lm9wYWNpdHk/dGhpcy5oZXg6InJnYmEoIitbdGhpcy5yLHRoaXMuZyx0aGlz LmIsdGhpcy5vcGFjaXR5XSsiKSJ9LCQ9ZnVuY3Rpb24oYSxiLGQpe2lmKG51 bGw9PWImJmUoYSwib2JqZWN0IikmJiJyImluIGEmJiJnImluIGEmJiJiImlu IGEmJihkPWEuYixiPWEuZyxhPWEuciksbnVsbD09YiYmZShhLHN0cmluZykp e3ZhciBmPWMuZ2V0UkdCKGEpO2E9Zi5yLGI9Zi5nLGQ9Zi5ifXJldHVybihh PjF8fGI+MXx8ZD4xKSYmKGEvPTI1NSxiLz0yNTUsZC89MjU1KSxbYSxiLGRd fSxfPWZ1bmN0aW9uKGEsYixkLGYpe2E9RC5yb3VuZCgyNTUqYSksYj1ELnJv dW5kKDI1NSpiKSxkPUQucm91bmQoMjU1KmQpO3ZhciBnPXtyOmEsZzpiLGI6 ZCxvcGFjaXR5OmUoZiwiZmluaXRlIik/ZjoxLGhleDpjLnJnYihhLGIsZCks dG9TdHJpbmc6Wn07cmV0dXJuIGUoZiwiZmluaXRlIikmJihnLm9wYWNpdHk9 ZiksZ307Yy5jb2xvcj1mdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4gZShhLCJv YmplY3QiKSYmImgiaW4gYSYmInMiaW4gYSYmImIiaW4gYT8oYj1jLmhzYjJy Z2IoYSksYS5yPWIucixhLmc9Yi5nLGEuYj1iLmIsYS5vcGFjaXR5PTEsYS5o ZXg9Yi5oZXgpOmUoYSwib2JqZWN0IikmJiJoImluIGEmJiJzImluIGEmJiJs ImluIGE/KGI9Yy5oc2wycmdiKGEpLGEucj1iLnIsYS5nPWIuZyxhLmI9Yi5i LGEub3BhY2l0eT0xLGEuaGV4PWIuaGV4KTooZShhLCJzdHJpbmciKSYmKGE9 Yy5nZXRSR0IoYSkpLGUoYSwib2JqZWN0IikmJiJyImluIGEmJiJnImluIGEm JiJiImluIGEmJiEoImVycm9yImluIGEpPyhiPWMucmdiMmhzbChhKSxhLmg9 Yi5oLGEucz1iLnMsYS5sPWIubCxiPWMucmdiMmhzYihhKSxhLnY9Yi5iKToo YT17aGV4OiJub25lIn0sYS5yPWEuZz1hLmI9YS5oPWEucz1hLnY9YS5sPS0x LGEuZXJyb3I9MSkpLGEudG9TdHJpbmc9WixhfSxjLmhzYjJyZ2I9ZnVuY3Rp b24oYSxiLGMsZCl7ZShhLCJvYmplY3QiKSYmImgiaW4gYSYmInMiaW4gYSYm ImIiaW4gYSYmKGM9YS5iLGI9YS5zLGQ9YS5vLGE9YS5oKSxhKj0zNjA7dmFy IGYsZyxoLGksajtyZXR1cm4gYT1hJTM2MC82MCxqPWMqYixpPWoqKDEtRyhh JTItMSkpLGY9Zz1oPWMtaixhPX5+YSxmKz1baixpLDAsMCxpLGpdW2FdLGcr PVtpLGosaixpLDAsMF1bYV0saCs9WzAsMCxpLGosaixpXVthXSxfKGYsZyxo LGQpfSxjLmhzbDJyZ2I9ZnVuY3Rpb24oYSxiLGMsZCl7ZShhLCJvYmplY3Qi KSYmImgiaW4gYSYmInMiaW4gYSYmImwiaW4gYSYmKGM9YS5sLGI9YS5zLGE9 YS5oKSwoYT4xfHxiPjF8fGM+MSkmJihhLz0zNjAsYi89MTAwLGMvPTEwMCks YSo9MzYwO3ZhciBmLGcsaCxpLGo7cmV0dXJuIGE9YSUzNjAvNjAsaj0yKmIq KC41PmM/YzoxLWMpLGk9aiooMS1HKGElMi0xKSksZj1nPWg9Yy1qLzIsYT1+ fmEsZis9W2osaSwwLDAsaSxqXVthXSxnKz1baSxqLGosaSwwLDBdW2FdLGgr PVswLDAsaSxqLGosaV1bYV0sXyhmLGcsaCxkKX0sYy5yZ2IyaHNiPWZ1bmN0 aW9uKGEsYixjKXtjPSQoYSxiLGMpLGE9Y1swXSxiPWNbMV0sYz1jWzJdO3Zh ciBkLGUsZixnO3JldHVybiBmPUUoYSxiLGMpLGc9Zi1GKGEsYixjKSxkPTA9 PWc/bnVsbDpmPT1hPyhiLWMpL2c6Zj09Yj8oYy1hKS9nKzI6KGEtYikvZys0 LGQ9KGQrMzYwKSU2KjYwLzM2MCxlPTA9PWc/MDpnL2Yse2g6ZCxzOmUsYjpm LHRvU3RyaW5nOlh9fSxjLnJnYjJoc2w9ZnVuY3Rpb24oYSxiLGMpe2M9JChh LGIsYyksYT1jWzBdLGI9Y1sxXSxjPWNbMl07dmFyIGQsZSxmLGcsaCxpO3Jl dHVybiBnPUUoYSxiLGMpLGg9RihhLGIsYyksaT1nLWgsZD0wPT1pP251bGw6 Zz09YT8oYi1jKS9pOmc9PWI/KGMtYSkvaSsyOihhLWIpL2krNCxkPShkKzM2 MCklNio2MC8zNjAsZj0oZytoKS8yLGU9MD09aT8wOi41PmY/aS8oMipmKTpp LygyLTIqZikse2g6ZCxzOmUsbDpmLHRvU3RyaW5nOll9fSxjLnBhcnNlUGF0 aFN0cmluZz1mdW5jdGlvbihhKXtpZighYSlyZXR1cm4gbnVsbDt2YXIgYj1j LnBhdGgoYSk7aWYoYi5hcnIpcmV0dXJuIGMucGF0aC5jbG9uZShiLmFycik7 dmFyIGQ9e2E6NyxjOjYsbzoyLGg6MSxsOjIsbToyLHI6NCxxOjQsczo0LHQ6 Mix2OjEsdTozLHo6MH0sZj1bXTtyZXR1cm4gZShhLCJhcnJheSIpJiZlKGFb MF0sImFycmF5IikmJihmPWMucGF0aC5jbG9uZShhKSksZi5sZW5ndGh8fEEo YSkucmVwbGFjZShOLGZ1bmN0aW9uKGEsYixjKXt2YXIgZT1bXSxnPWIudG9M b3dlckNhc2UoKTtpZihjLnJlcGxhY2UoUCxmdW5jdGlvbihhLGIpe2ImJmUu cHVzaCgrYil9KSwibSI9PWcmJmUubGVuZ3RoPjImJihmLnB1c2goW2JdLmNv bmNhdChlLnNwbGljZSgwLDIpKSksZz0ibCIsYj0ibSI9PWI/ImwiOiJMIiks Im8iPT1nJiYxPT1lLmxlbmd0aCYmZi5wdXNoKFtiLGVbMF1dKSwiciI9PWcp Zi5wdXNoKFtiXS5jb25jYXQoZSkpO2Vsc2UgZm9yKDtlLmxlbmd0aD49ZFtn XSYmKGYucHVzaChbYl0uY29uY2F0KGUuc3BsaWNlKDAsZFtnXSkpKSxkW2dd KTspO30pLGYudG9TdHJpbmc9Yy5wYXRoLnRvU3RyaW5nLGIuYXJyPWMucGF0 aC5jbG9uZShmKSxmfTt2YXIgYWI9Yy5wYXJzZVRyYW5zZm9ybVN0cmluZz1m dW5jdGlvbihhKXtpZighYSlyZXR1cm4gbnVsbDt2YXIgYj1bXTtyZXR1cm4g ZShhLCJhcnJheSIpJiZlKGFbMF0sImFycmF5IikmJihiPWMucGF0aC5jbG9u ZShhKSksYi5sZW5ndGh8fEEoYSkucmVwbGFjZShPLGZ1bmN0aW9uKGEsYyxk KXt7dmFyIGU9W107Yy50b0xvd2VyQ2FzZSgpfWQucmVwbGFjZShQLGZ1bmN0 aW9uKGEsYil7YiYmZS5wdXNoKCtiKX0pLGIucHVzaChbY10uY29uY2F0KGUp KX0pLGIudG9TdHJpbmc9Yy5wYXRoLnRvU3RyaW5nLGJ9O2MuXy5zdmdUcmFu c2Zvcm0yc3RyaW5nPW0sYy5fLnJnVHJhbnNmb3JtPS9eW2Etel1bXHNdKi0/ XC4/XGQvaSxjLl8udHJhbnNmb3JtMm1hdHJpeD1uLGMuX3VuaXQycHg9cTt5 LmRvYy5jb250YWluc3x8eS5kb2MuY29tcGFyZURvY3VtZW50UG9zaXRpb24/ ZnVuY3Rpb24oYSxiKXt2YXIgYz05PT1hLm5vZGVUeXBlP2EuZG9jdW1lbnRF bGVtZW50OmEsZD1iJiZiLnBhcmVudE5vZGU7cmV0dXJuIGE9PWR8fCEoIWR8 fDEhPWQubm9kZVR5cGV8fCEoYy5jb250YWlucz9jLmNvbnRhaW5zKGQpOmEu Y29tcGFyZURvY3VtZW50UG9zaXRpb24mJjE2JmEuY29tcGFyZURvY3VtZW50 UG9zaXRpb24oZCkpKX06ZnVuY3Rpb24oYSxiKXtpZihiKWZvcig7YjspaWYo Yj1iLnBhcmVudE5vZGUsYj09YSlyZXR1cm4hMDtyZXR1cm4hMX07Yy5fLmdl dFNvbWVEZWZzPW8sYy5fLmdldFNvbWVTVkc9cCxjLnNlbGVjdD1mdW5jdGlv bihhKXtyZXR1cm4gYT1BKGEpLnJlcGxhY2UoLyhbXlxcXSk6L2csIiQxXFw6 Iiksdyh5LmRvYy5xdWVyeVNlbGVjdG9yKGEpKX0sYy5zZWxlY3RBbGw9ZnVu Y3Rpb24oYSl7Zm9yKHZhciBiPXkuZG9jLnF1ZXJ5U2VsZWN0b3JBbGwoYSks ZD0oYy5zZXR8fEFycmF5KSgpLGU9MDtlPGIubGVuZ3RoO2UrKylkLnB1c2go dyhiW2VdKSk7cmV0dXJuIGR9LHNldEludGVydmFsKGZ1bmN0aW9uKCl7Zm9y KHZhciBhIGluIFYpaWYoVlt6XShhKSl7dmFyIGI9VlthXSxjPWIubm9kZTso InN2ZyIhPWIudHlwZSYmIWMub3duZXJTVkdFbGVtZW50fHwic3ZnIj09Yi50 eXBlJiYoIWMucGFyZW50Tm9kZXx8Im93bmVyU1ZHRWxlbWVudCJpbiBjLnBh cmVudE5vZGUmJiFjLm93bmVyU1ZHRWxlbWVudCkpJiZkZWxldGUgVlthXX19 LDFlNCkscy5wcm90b3R5cGUuYXR0cj1mdW5jdGlvbihhLGMpe3ZhciBkPXRo aXMsZj1kLm5vZGU7aWYoIWEpe2lmKDEhPWYubm9kZVR5cGUpcmV0dXJue3Rl eHQ6Zi5ub2RlVmFsdWV9O2Zvcih2YXIgZz1mLmF0dHJpYnV0ZXMsaD17fSxp PTAsaj1nLmxlbmd0aDtqPmk7aSsrKWhbZ1tpXS5ub2RlTmFtZV09Z1tpXS5u b2RlVmFsdWU7cmV0dXJuIGh9aWYoZShhLCJzdHJpbmciKSl7aWYoIShhcmd1 bWVudHMubGVuZ3RoPjEpKXJldHVybiBiKCJzbmFwLnV0aWwuZ2V0YXR0ci4i K2EsZCkuZmlyc3REZWZpbmVkKCk7dmFyIGs9e307a1thXT1jLGE9a31mb3Io dmFyIGwgaW4gYSlhW3pdKGwpJiZiKCJzbmFwLnV0aWwuYXR0ci4iK2wsZCxh W2xdKTtyZXR1cm4gZH0sYy5wYXJzZT1mdW5jdGlvbihhKXt2YXIgYj15LmRv Yy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksYz0hMCxkPXkuZG9jLmNyZWF0 ZUVsZW1lbnQoImRpdiIpO2lmKGE9QShhKSxhLm1hdGNoKC9eXHMqPFxzKnN2 Zyg/OlxzfD4pLyl8fChhPSI8c3ZnPiIrYSsiPC9zdmc+IixjPSExKSxkLmlu bmVySFRNTD1hLGE9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic3ZnIilbMF0p aWYoYyliPWE7ZWxzZSBmb3IoO2EuZmlyc3RDaGlsZDspYi5hcHBlbmRDaGls ZChhLmZpcnN0Q2hpbGQpO3JldHVybiBuZXcgdChiKX0sYy5mcmFnbWVudD1m dW5jdGlvbigpe2Zvcih2YXIgYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2Fs bChhcmd1bWVudHMsMCksYj15LmRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50 KCksZD0wLGU9YS5sZW5ndGg7ZT5kO2QrKyl7dmFyIGY9YVtkXTtmLm5vZGUm JmYubm9kZS5ub2RlVHlwZSYmYi5hcHBlbmRDaGlsZChmLm5vZGUpLGYubm9k ZVR5cGUmJmIuYXBwZW5kQ2hpbGQoZiksInN0cmluZyI9PXR5cGVvZiBmJiZi LmFwcGVuZENoaWxkKGMucGFyc2UoZikubm9kZSl9cmV0dXJuIG5ldyB0KGIp fSxjLl8ubWFrZT11LGMuXy53cmFwPXcsdi5wcm90b3R5cGUuZWw9ZnVuY3Rp b24oYSxiKXt2YXIgYz11KGEsdGhpcy5ub2RlKTtyZXR1cm4gYiYmYy5hdHRy KGIpLGN9LHMucHJvdG90eXBlLmNoaWxkcmVuPWZ1bmN0aW9uKCl7Zm9yKHZh ciBhPVtdLGI9dGhpcy5ub2RlLmNoaWxkTm9kZXMsZD0wLGU9Yi5sZW5ndGg7 ZT5kO2QrKylhW2RdPWMoYltkXSk7cmV0dXJuIGF9LHMucHJvdG90eXBlLnRv SlNPTj1mdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybiB4KFt0aGlzXSxhKSxh WzBdfSxiLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ciIsZnVuY3Rpb24oKXt2YXIg YT1iLm50KCk7YT1hLnN1YnN0cmluZyhhLmxhc3RJbmRleE9mKCIuIikrMSk7 dmFyIGM9YS5yZXBsYWNlKC9bQS1aXS9nLGZ1bmN0aW9uKGEpe3JldHVybiIt IithLnRvTG93ZXJDYXNlKCl9KTtyZXR1cm4gYmJbel0oYyk/dGhpcy5ub2Rl Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0 aGlzLm5vZGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShjKTpkKHRoaXMubm9k ZSxhKX0pO3ZhciBiYj17ImFsaWdubWVudC1iYXNlbGluZSI6MCwiYmFzZWxp bmUtc2hpZnQiOjAsY2xpcDowLCJjbGlwLXBhdGgiOjAsImNsaXAtcnVsZSI6 MCxjb2xvcjowLCJjb2xvci1pbnRlcnBvbGF0aW9uIjowLCJjb2xvci1pbnRl cnBvbGF0aW9uLWZpbHRlcnMiOjAsImNvbG9yLXByb2ZpbGUiOjAsImNvbG9y LXJlbmRlcmluZyI6MCxjdXJzb3I6MCxkaXJlY3Rpb246MCxkaXNwbGF5OjAs ImRvbWluYW50LWJhc2VsaW5lIjowLCJlbmFibGUtYmFja2dyb3VuZCI6MCxm aWxsOjAsImZpbGwtb3BhY2l0eSI6MCwiZmlsbC1ydWxlIjowLGZpbHRlcjow LCJmbG9vZC1jb2xvciI6MCwiZmxvb2Qtb3BhY2l0eSI6MCxmb250OjAsImZv bnQtZmFtaWx5IjowLCJmb250LXNpemUiOjAsImZvbnQtc2l6ZS1hZGp1c3Qi OjAsImZvbnQtc3RyZXRjaCI6MCwiZm9udC1zdHlsZSI6MCwiZm9udC12YXJp YW50IjowLCJmb250LXdlaWdodCI6MCwiZ2x5cGgtb3JpZW50YXRpb24taG9y aXpvbnRhbCI6MCwiZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwiOjAsImlt YWdlLXJlbmRlcmluZyI6MCxrZXJuaW5nOjAsImxldHRlci1zcGFjaW5nIjow LCJsaWdodGluZy1jb2xvciI6MCxtYXJrZXI6MCwibWFya2VyLWVuZCI6MCwi bWFya2VyLW1pZCI6MCwibWFya2VyLXN0YXJ0IjowLG1hc2s6MCxvcGFjaXR5 OjAsb3ZlcmZsb3c6MCwicG9pbnRlci1ldmVudHMiOjAsInNoYXBlLXJlbmRl cmluZyI6MCwic3RvcC1jb2xvciI6MCwic3RvcC1vcGFjaXR5IjowLHN0cm9r ZTowLCJzdHJva2UtZGFzaGFycmF5IjowLCJzdHJva2UtZGFzaG9mZnNldCI6 MCwic3Ryb2tlLWxpbmVjYXAiOjAsInN0cm9rZS1saW5lam9pbiI6MCwic3Ry b2tlLW1pdGVybGltaXQiOjAsInN0cm9rZS1vcGFjaXR5IjowLCJzdHJva2Ut d2lkdGgiOjAsInRleHQtYW5jaG9yIjowLCJ0ZXh0LWRlY29yYXRpb24iOjAs InRleHQtcmVuZGVyaW5nIjowLCJ1bmljb2RlLWJpZGkiOjAsdmlzaWJpbGl0 eTowLCJ3b3JkLXNwYWNpbmciOjAsIndyaXRpbmctbW9kZSI6MH07Yi5vbigi c25hcC51dGlsLmF0dHIiLGZ1bmN0aW9uKGEpe3ZhciBjPWIubnQoKSxlPXt9 O2M9Yy5zdWJzdHJpbmcoYy5sYXN0SW5kZXhPZigiLiIpKzEpLGVbY109YTt2 YXIgZj1jLnJlcGxhY2UoLy0oXHcpL2dpLGZ1bmN0aW9uKGEsYil7cmV0dXJu IGIudG9VcHBlckNhc2UoKX0pLGc9Yy5yZXBsYWNlKC9bQS1aXS9nLGZ1bmN0 aW9uKGEpe3JldHVybiItIithLnRvTG93ZXJDYXNlKCl9KTtiYlt6XShnKT90 aGlzLm5vZGUuc3R5bGVbZl09bnVsbD09YT9JOmE6ZCh0aGlzLm5vZGUsZSl9 KSxmdW5jdGlvbigpe30odi5wcm90b3R5cGUpLGMuYWpheD1mdW5jdGlvbihh LGMsZCxmKXt2YXIgZz1uZXcgWE1MSHR0cFJlcXVlc3QsaD1TKCk7aWYoZyl7 aWYoZShjLCJmdW5jdGlvbiIpKWY9ZCxkPWMsYz1udWxsO2Vsc2UgaWYoZShj LCJvYmplY3QiKSl7dmFyIGk9W107Zm9yKHZhciBqIGluIGMpYy5oYXNPd25Q cm9wZXJ0eShqKSYmaS5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChqKSsiPSIr ZW5jb2RlVVJJQ29tcG9uZW50KGNbal0pKTtjPWkuam9pbigiJiIpfXJldHVy biBnLm9wZW4oYz8iUE9TVCI6IkdFVCIsYSwhMCksYyYmKGcuc2V0UmVxdWVz dEhlYWRlcigiWC1SZXF1ZXN0ZWQtV2l0aCIsIlhNTEh0dHBSZXF1ZXN0Iiks Zy5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LXR5cGUiLCJhcHBsaWNhdGlv bi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSksZCYmKGIub25jZSgic25hcC5h amF4LiIraCsiLjAiLGQpLGIub25jZSgic25hcC5hamF4LiIraCsiLjIwMCIs ZCksYi5vbmNlKCJzbmFwLmFqYXguIitoKyIuMzA0IixkKSksZy5vbnJlYWR5 c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXs0PT1nLnJlYWR5U3RhdGUmJmIoInNu YXAuYWpheC4iK2grIi4iK2cuc3RhdHVzLGYsZyl9LDQ9PWcucmVhZHlTdGF0 ZT9nOihnLnNlbmQoYyksZyl9fSxjLmxvYWQ9ZnVuY3Rpb24oYSxiLGQpe2Mu YWpheChhLGZ1bmN0aW9uKGEpe3ZhciBlPWMucGFyc2UoYS5yZXNwb25zZVRl eHQpO2Q/Yi5jYWxsKGQsZSk6YihlKX0pfTt2YXIgY2I9ZnVuY3Rpb24oYSl7 dmFyIGI9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxjPWEub3duZXJEb2N1 bWVudCxkPWMuYm9keSxlPWMuZG9jdW1lbnRFbGVtZW50LGY9ZS5jbGllbnRU b3B8fGQuY2xpZW50VG9wfHwwLGg9ZS5jbGllbnRMZWZ0fHxkLmNsaWVudExl ZnR8fDAsaT1iLnRvcCsoZy53aW4ucGFnZVlPZmZzZXR8fGUuc2Nyb2xsVG9w fHxkLnNjcm9sbFRvcCktZixqPWIubGVmdCsoZy53aW4ucGFnZVhPZmZzZXR8 fGUuc2Nyb2xsTGVmdHx8ZC5zY3JvbGxMZWZ0KS1oO3JldHVybnt5OmkseDpq fX07cmV0dXJuIGMuZ2V0RWxlbWVudEJ5UG9pbnQ9ZnVuY3Rpb24oYSxiKXt2 YXIgYz10aGlzLGQ9KGMuY2FudmFzLHkuZG9jLmVsZW1lbnRGcm9tUG9pbnQo YSxiKSk7aWYoeS53aW4ub3BlcmEmJiJzdmciPT1kLnRhZ05hbWUpe3ZhciBl PWNiKGQpLGY9ZC5jcmVhdGVTVkdSZWN0KCk7Zi54PWEtZS54LGYueT1iLWUu eSxmLndpZHRoPWYuaGVpZ2h0PTE7dmFyIGc9ZC5nZXRJbnRlcnNlY3Rpb25M aXN0KGYsbnVsbCk7Zy5sZW5ndGgmJihkPWdbZy5sZW5ndGgtMV0pfXJldHVy biBkP3coZCk6bnVsbH0sYy5wbHVnaW49ZnVuY3Rpb24oYSl7YShjLHMsdix5 LHQpfSx5Lndpbi5TbmFwPWMsY30oYXx8dGhpcyk7cmV0dXJuIGQucGx1Z2lu KGZ1bmN0aW9uKGQsZSxmLGcsaCl7ZnVuY3Rpb24gaShhLGIpe2lmKG51bGw9 PWIpe3ZhciBjPSEwO2lmKGI9YS5ub2RlLmdldEF0dHJpYnV0ZSgibGluZWFy R3JhZGllbnQiPT1hLnR5cGV8fCJyYWRpYWxHcmFkaWVudCI9PWEudHlwZT8i Z3JhZGllbnRUcmFuc2Zvcm0iOiJwYXR0ZXJuIj09YS50eXBlPyJwYXR0ZXJu VHJhbnNmb3JtIjoidHJhbnNmb3JtIiksIWIpcmV0dXJuIG5ldyBkLk1hdHJp eDtiPWQuXy5zdmdUcmFuc2Zvcm0yc3RyaW5nKGIpfWVsc2UgYj1kLl8ucmdU cmFuc2Zvcm0udGVzdChiKT9vKGIpLnJlcGxhY2UoL1wuezN9fFx1MjAyNi9n LGEuXy50cmFuc2Zvcm18fCIiKTpkLl8uc3ZnVHJhbnNmb3JtMnN0cmluZyhi KSxuKGIsImFycmF5IikmJihiPWQucGF0aD9kLnBhdGgudG9TdHJpbmcuY2Fs bChiKTpvKGIpKSxhLl8udHJhbnNmb3JtPWI7dmFyIGU9ZC5fLnRyYW5zZm9y bTJtYXRyaXgoYixhLmdldEJCb3goMSkpO3JldHVybiBjP2U6dm9pZChhLm1h dHJpeD1lKX1mdW5jdGlvbiBqKGEpe2Z1bmN0aW9uIGIoYSxiKXt2YXIgYz1x KGEubm9kZSxiKTtjPWMmJmMubWF0Y2goZiksYz1jJiZjWzJdLGMmJiIjIj09 Yy5jaGFyQXQoKSYmKGM9Yy5zdWJzdHJpbmcoMSksYyYmKGhbY109KGhbY118 fFtdKS5jb25jYXQoZnVuY3Rpb24oYyl7dmFyIGQ9e307ZFtiXT1VUkwoYyks cShhLm5vZGUsZCl9KSkpfWZ1bmN0aW9uIGMoYSl7dmFyIGI9cShhLm5vZGUs InhsaW5rOmhyZWYiKTtiJiYiIyI9PWIuY2hhckF0KCkmJihiPWIuc3Vic3Ry aW5nKDEpLGImJihoW2JdPShoW2JdfHxbXSkuY29uY2F0KGZ1bmN0aW9uKGIp e2EuYXR0cigieGxpbms6aHJlZiIsIiMiK2IpfSkpKX1mb3IodmFyIGQsZT1h LnNlbGVjdEFsbCgiKiIpLGY9L15ccyp1cmxcKCgifCd8KSguKilcMVwpXHMq JC8sZz1bXSxoPXt9LGk9MCxqPWUubGVuZ3RoO2o+aTtpKyspe2Q9ZVtpXSxi KGQsImZpbGwiKSxiKGQsInN0cm9rZSIpLGIoZCwiZmlsdGVyIiksYihkLCJt YXNrIiksYihkLCJjbGlwLXBhdGgiKSxjKGQpO3ZhciBrPXEoZC5ub2RlLCJp ZCIpO2smJihxKGQubm9kZSx7aWQ6ZC5pZH0pLGcucHVzaCh7b2xkOmssaWQ6 ZC5pZH0pKX1mb3IoaT0wLGo9Zy5sZW5ndGg7aj5pO2krKyl7dmFyIGw9aFtn W2ldLm9sZF07aWYobClmb3IodmFyIG09MCxuPWwubGVuZ3RoO24+bTttKysp bFttXShnW2ldLmlkKX19ZnVuY3Rpb24gayhhLGIsYyl7cmV0dXJuIGZ1bmN0 aW9uKGQpe3ZhciBlPWQuc2xpY2UoYSxiKTtyZXR1cm4gMT09ZS5sZW5ndGgm JihlPWVbMF0pLGM/YyhlKTplfX1mdW5jdGlvbiBsKGEpe3JldHVybiBmdW5j dGlvbigpe3ZhciBiPWE/IjwiK3RoaXMudHlwZToiIixjPXRoaXMubm9kZS5h dHRyaWJ1dGVzLGQ9dGhpcy5ub2RlLmNoaWxkTm9kZXM7aWYoYSlmb3IodmFy IGU9MCxmPWMubGVuZ3RoO2Y+ZTtlKyspYis9IiAiK2NbZV0ubmFtZSsnPSIn K2NbZV0udmFsdWUucmVwbGFjZSgvIi9nLCdcXCInKSsnIic7aWYoZC5sZW5n dGgpe2ZvcihhJiYoYis9Ij4iKSxlPTAsZj1kLmxlbmd0aDtmPmU7ZSsrKTM9 PWRbZV0ubm9kZVR5cGU/Yis9ZFtlXS5ub2RlVmFsdWU6MT09ZFtlXS5ub2Rl VHlwZSYmKGIrPXUoZFtlXSkudG9TdHJpbmcoKSk7YSYmKGIrPSI8LyIrdGhp cy50eXBlKyI+Iil9ZWxzZSBhJiYoYis9Ii8+Iik7cmV0dXJuIGJ9fXZhciBt PWUucHJvdG90eXBlLG49ZC5pcyxvPVN0cmluZyxwPWQuX3VuaXQycHgscT1k Ll8uJCxyPWQuXy5tYWtlLHM9ZC5fLmdldFNvbWVEZWZzLHQ9Imhhc093blBy b3BlcnR5Iix1PWQuXy53cmFwO20uZ2V0QkJveD1mdW5jdGlvbihhKXtpZigh ZC5NYXRyaXh8fCFkLnBhdGgpcmV0dXJuIHRoaXMubm9kZS5nZXRCQm94KCk7 dmFyIGI9dGhpcyxjPW5ldyBkLk1hdHJpeDtpZihiLnJlbW92ZWQpcmV0dXJu IGQuXy5ib3goKTtmb3IoOyJ1c2UiPT1iLnR5cGU7KWlmKGF8fChjPWMuYWRk KGIudHJhbnNmb3JtKCkubG9jYWxNYXRyaXgudHJhbnNsYXRlKGIuYXR0cigi eCIpfHwwLGIuYXR0cigieSIpfHwwKSkpLGIub3JpZ2luYWwpYj1iLm9yaWdp bmFsO2Vsc2V7dmFyIGU9Yi5hdHRyKCJ4bGluazpocmVmIik7Yj1iLm9yaWdp bmFsPWIubm9kZS5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUuc3Vi c3RyaW5nKGUuaW5kZXhPZigiIyIpKzEpKX12YXIgZj1iLl8sZz1kLnBhdGgu Z2V0W2IudHlwZV18fGQucGF0aC5nZXQuZGVmbHQ7dHJ5e3JldHVybiBhPyhm LmJib3h3dD1nP2QucGF0aC5nZXRCQm94KGIucmVhbFBhdGg9ZyhiKSk6ZC5f LmJveChiLm5vZGUuZ2V0QkJveCgpKSxkLl8uYm94KGYuYmJveHd0KSk6KGIu cmVhbFBhdGg9ZyhiKSxiLm1hdHJpeD1iLnRyYW5zZm9ybSgpLmxvY2FsTWF0 cml4LGYuYmJveD1kLnBhdGguZ2V0QkJveChkLnBhdGgubWFwKGIucmVhbFBh dGgsYy5hZGQoYi5tYXRyaXgpKSksZC5fLmJveChmLmJib3gpKX1jYXRjaCho KXtyZXR1cm4gZC5fLmJveCgpfX07dmFyIHY9ZnVuY3Rpb24oKXtyZXR1cm4g dGhpcy5zdHJpbmd9O20udHJhbnNmb3JtPWZ1bmN0aW9uKGEpe3ZhciBiPXRo aXMuXztpZihudWxsPT1hKXtmb3IodmFyIGMsZT10aGlzLGY9bmV3IGQuTWF0 cml4KHRoaXMubm9kZS5nZXRDVE0oKSksZz1pKHRoaXMpLGg9W2ddLGo9bmV3 IGQuTWF0cml4LGs9Zy50b1RyYW5zZm9ybVN0cmluZygpLGw9byhnKT09byh0 aGlzLm1hdHJpeCk/byhiLnRyYW5zZm9ybSk6azsic3ZnIiE9ZS50eXBlJiYo ZT1lLnBhcmVudCgpKTspaC5wdXNoKGkoZSkpO2ZvcihjPWgubGVuZ3RoO2Mt LTspai5hZGQoaFtjXSk7cmV0dXJue3N0cmluZzpsLGdsb2JhbE1hdHJpeDpm LHRvdGFsTWF0cml4OmosbG9jYWxNYXRyaXg6ZyxkaWZmTWF0cml4OmYuY2xv bmUoKS5hZGQoZy5pbnZlcnQoKSksZ2xvYmFsOmYudG9UcmFuc2Zvcm1TdHJp bmcoKSx0b3RhbDpqLnRvVHJhbnNmb3JtU3RyaW5nKCksbG9jYWw6ayx0b1N0 cmluZzp2fX1yZXR1cm4gYSBpbnN0YW5jZW9mIGQuTWF0cml4Pyh0aGlzLm1h dHJpeD1hLHRoaXMuXy50cmFuc2Zvcm09YS50b1RyYW5zZm9ybVN0cmluZygp KTppKHRoaXMsYSksdGhpcy5ub2RlJiYoImxpbmVhckdyYWRpZW50Ij09dGhp cy50eXBlfHwicmFkaWFsR3JhZGllbnQiPT10aGlzLnR5cGU/cSh0aGlzLm5v ZGUse2dyYWRpZW50VHJhbnNmb3JtOnRoaXMubWF0cml4fSk6InBhdHRlcm4i PT10aGlzLnR5cGU/cSh0aGlzLm5vZGUse3BhdHRlcm5UcmFuc2Zvcm06dGhp cy5tYXRyaXh9KTpxKHRoaXMubm9kZSx7dHJhbnNmb3JtOnRoaXMubWF0cml4 fSkpLHRoaXN9LG0ucGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHUodGhpcy5u b2RlLnBhcmVudE5vZGUpfSxtLmFwcGVuZD1tLmFkZD1mdW5jdGlvbihhKXtp ZihhKXtpZigic2V0Ij09YS50eXBlKXt2YXIgYj10aGlzO3JldHVybiBhLmZv ckVhY2goZnVuY3Rpb24oYSl7Yi5hZGQoYSl9KSx0aGlzfWE9dShhKSx0aGlz Lm5vZGUuYXBwZW5kQ2hpbGQoYS5ub2RlKSxhLnBhcGVyPXRoaXMucGFwZXJ9 cmV0dXJuIHRoaXN9LG0uYXBwZW5kVG89ZnVuY3Rpb24oYSl7cmV0dXJuIGEm JihhPXUoYSksYS5hcHBlbmQodGhpcykpLHRoaXN9LG0ucHJlcGVuZD1mdW5j dGlvbihhKXtpZihhKXtpZigic2V0Ij09YS50eXBlKXt2YXIgYixjPXRoaXM7 cmV0dXJuIGEuZm9yRWFjaChmdW5jdGlvbihhKXtiP2IuYWZ0ZXIoYSk6Yy5w cmVwZW5kKGEpLGI9YX0pLHRoaXN9YT11KGEpO3ZhciBkPWEucGFyZW50KCk7 dGhpcy5ub2RlLmluc2VydEJlZm9yZShhLm5vZGUsdGhpcy5ub2RlLmZpcnN0 Q2hpbGQpLHRoaXMuYWRkJiZ0aGlzLmFkZCgpLGEucGFwZXI9dGhpcy5wYXBl cix0aGlzLnBhcmVudCgpJiZ0aGlzLnBhcmVudCgpLmFkZCgpLGQmJmQuYWRk KCl9cmV0dXJuIHRoaXN9LG0ucHJlcGVuZFRvPWZ1bmN0aW9uKGEpe3JldHVy biBhPXUoYSksYS5wcmVwZW5kKHRoaXMpLHRoaXN9LG0uYmVmb3JlPWZ1bmN0 aW9uKGEpe2lmKCJzZXQiPT1hLnR5cGUpe3ZhciBiPXRoaXM7cmV0dXJuIGEu Zm9yRWFjaChmdW5jdGlvbihhKXt2YXIgYz1hLnBhcmVudCgpO2Iubm9kZS5w YXJlbnROb2RlLmluc2VydEJlZm9yZShhLm5vZGUsYi5ub2RlKSxjJiZjLmFk ZCgpfSksdGhpcy5wYXJlbnQoKS5hZGQoKSx0aGlzfWE9dShhKTt2YXIgYz1h LnBhcmVudCgpO3JldHVybiB0aGlzLm5vZGUucGFyZW50Tm9kZS5pbnNlcnRC ZWZvcmUoYS5ub2RlLHRoaXMubm9kZSksdGhpcy5wYXJlbnQoKSYmdGhpcy5w YXJlbnQoKS5hZGQoKSxjJiZjLmFkZCgpLGEucGFwZXI9dGhpcy5wYXBlcix0 aGlzfSxtLmFmdGVyPWZ1bmN0aW9uKGEpe2E9dShhKTt2YXIgYj1hLnBhcmVu dCgpO3JldHVybiB0aGlzLm5vZGUubmV4dFNpYmxpbmc/dGhpcy5ub2RlLnBh cmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEubm9kZSx0aGlzLm5vZGUubmV4dFNp YmxpbmcpOnRoaXMubm9kZS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGEubm9k ZSksdGhpcy5wYXJlbnQoKSYmdGhpcy5wYXJlbnQoKS5hZGQoKSxiJiZiLmFk ZCgpLGEucGFwZXI9dGhpcy5wYXBlcix0aGlzfSxtLmluc2VydEJlZm9yZT1m dW5jdGlvbihhKXthPXUoYSk7dmFyIGI9dGhpcy5wYXJlbnQoKTtyZXR1cm4g YS5ub2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMubm9kZSxhLm5v ZGUpLHRoaXMucGFwZXI9YS5wYXBlcixiJiZiLmFkZCgpLGEucGFyZW50KCkm JmEucGFyZW50KCkuYWRkKCksdGhpc30sbS5pbnNlcnRBZnRlcj1mdW5jdGlv bihhKXthPXUoYSk7dmFyIGI9dGhpcy5wYXJlbnQoKTtyZXR1cm4gYS5ub2Rl LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMubm9kZSxhLm5vZGUubmV4 dFNpYmxpbmcpLHRoaXMucGFwZXI9YS5wYXBlcixiJiZiLmFkZCgpLGEucGFy ZW50KCkmJmEucGFyZW50KCkuYWRkKCksdGhpc30sbS5yZW1vdmU9ZnVuY3Rp b24oKXt2YXIgYT10aGlzLnBhcmVudCgpO3JldHVybiB0aGlzLm5vZGUucGFy ZW50Tm9kZSYmdGhpcy5ub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhp cy5ub2RlKSxkZWxldGUgdGhpcy5wYXBlcix0aGlzLnJlbW92ZWQ9ITAsYSYm YS5hZGQoKSx0aGlzfSxtLnNlbGVjdD1mdW5jdGlvbihhKXtyZXR1cm4gdSh0 aGlzLm5vZGUucXVlcnlTZWxlY3RvcihhKSl9LG0uc2VsZWN0QWxsPWZ1bmN0 aW9uKGEpe2Zvcih2YXIgYj10aGlzLm5vZGUucXVlcnlTZWxlY3RvckFsbChh KSxjPShkLnNldHx8QXJyYXkpKCksZT0wO2U8Yi5sZW5ndGg7ZSsrKWMucHVz aCh1KGJbZV0pKTtyZXR1cm4gY30sbS5hc1BYPWZ1bmN0aW9uKGEsYil7cmV0 dXJuIG51bGw9PWImJihiPXRoaXMuYXR0cihhKSksK3AodGhpcyxhLGIpfSxt LnVzZT1mdW5jdGlvbigpe3ZhciBhLGI9dGhpcy5ub2RlLmlkO3JldHVybiBi fHwoYj10aGlzLmlkLHEodGhpcy5ub2RlLHtpZDpifSkpLGE9ImxpbmVhckdy YWRpZW50Ij09dGhpcy50eXBlfHwicmFkaWFsR3JhZGllbnQiPT10aGlzLnR5 cGV8fCJwYXR0ZXJuIj09dGhpcy50eXBlP3IodGhpcy50eXBlLHRoaXMubm9k ZS5wYXJlbnROb2RlKTpyKCJ1c2UiLHRoaXMubm9kZS5wYXJlbnROb2RlKSxx KGEubm9kZSx7InhsaW5rOmhyZWYiOiIjIitifSksYS5vcmlnaW5hbD10aGlz LGF9LG0uY2xvbmU9ZnVuY3Rpb24oKXt2YXIgYT11KHRoaXMubm9kZS5jbG9u ZU5vZGUoITApKTtyZXR1cm4gcShhLm5vZGUsImlkIikmJnEoYS5ub2RlLHtp ZDphLmlkfSksaihhKSxhLmluc2VydEFmdGVyKHRoaXMpLGF9LG0udG9EZWZz PWZ1bmN0aW9uKCl7dmFyIGE9cyh0aGlzKTtyZXR1cm4gYS5hcHBlbmRDaGls ZCh0aGlzLm5vZGUpLHRoaXN9LG0ucGF0dGVybj1tLnRvUGF0dGVybj1mdW5j dGlvbihhLGIsYyxkKXt2YXIgZT1yKCJwYXR0ZXJuIixzKHRoaXMpKTtyZXR1 cm4gbnVsbD09YSYmKGE9dGhpcy5nZXRCQm94KCkpLG4oYSwib2JqZWN0Iikm JiJ4ImluIGEmJihiPWEueSxjPWEud2lkdGgsZD1hLmhlaWdodCxhPWEueCks cShlLm5vZGUse3g6YSx5OmIsd2lkdGg6YyxoZWlnaHQ6ZCxwYXR0ZXJuVW5p dHM6InVzZXJTcGFjZU9uVXNlIixpZDplLmlkLHZpZXdCb3g6W2EsYixjLGRd LmpvaW4oIiAiKX0pLGUubm9kZS5hcHBlbmRDaGlsZCh0aGlzLm5vZGUpLGV9 LG0ubWFya2VyPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz1yKCJtYXJr ZXIiLHModGhpcykpO3JldHVybiBudWxsPT1hJiYoYT10aGlzLmdldEJCb3go KSksbihhLCJvYmplY3QiKSYmIngiaW4gYSYmKGI9YS55LGM9YS53aWR0aCxk PWEuaGVpZ2h0LGU9YS5yZWZYfHxhLmN4LGY9YS5yZWZZfHxhLmN5LGE9YS54 KSxxKGcubm9kZSx7dmlld0JveDpbYSxiLGMsZF0uam9pbigiICIpLG1hcmtl cldpZHRoOmMsbWFya2VySGVpZ2h0OmQsb3JpZW50OiJhdXRvIixyZWZYOmV8 fDAscmVmWTpmfHwwLGlkOmcuaWR9KSxnLm5vZGUuYXBwZW5kQ2hpbGQodGhp cy5ub2RlKSxnfTt2YXIgdz1mdW5jdGlvbihhLGIsZCxlKXsiZnVuY3Rpb24i IT10eXBlb2YgZHx8ZC5sZW5ndGh8fChlPWQsZD1jLmxpbmVhciksdGhpcy5h dHRyPWEsdGhpcy5kdXI9YixkJiYodGhpcy5lYXNpbmc9ZCksZSYmKHRoaXMu Y2FsbGJhY2s9ZSl9O2QuXy5BbmltYXRpb249dyxkLmFuaW1hdGlvbj1mdW5j dGlvbihhLGIsYyxkKXtyZXR1cm4gbmV3IHcoYSxiLGMsZCl9LG0uaW5Bbmlt PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPVtdO2Zvcih2YXIgYyBpbiBhLmFu aW1zKWEuYW5pbXNbdF0oYykmJiFmdW5jdGlvbihhKXtiLnB1c2goe2FuaW06 bmV3IHcoYS5fYXR0cnMsYS5kdXIsYS5lYXNpbmcsYS5fY2FsbGJhY2spLG1p bmE6YSxjdXJTdGF0dXM6YS5zdGF0dXMoKSxzdGF0dXM6ZnVuY3Rpb24oYil7 cmV0dXJuIGEuc3RhdHVzKGIpfSxzdG9wOmZ1bmN0aW9uKCl7YS5zdG9wKCl9 fSl9KGEuYW5pbXNbY10pO3JldHVybiBifSxkLmFuaW1hdGU9ZnVuY3Rpb24o YSxkLGUsZixnLGgpeyJmdW5jdGlvbiIhPXR5cGVvZiBnfHxnLmxlbmd0aHx8 KGg9ZyxnPWMubGluZWFyKTt2YXIgaT1jLnRpbWUoKSxqPWMoYSxkLGksaStm LGMudGltZSxlLGcpO3JldHVybiBoJiZiLm9uY2UoIm1pbmEuZmluaXNoLiIr ai5pZCxoKSxqfSxtLnN0b3A9ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5p bkFuaW0oKSxiPTAsYz1hLmxlbmd0aDtjPmI7YisrKWFbYl0uc3RvcCgpO3Jl dHVybiB0aGlzfSxtLmFuaW1hdGU9ZnVuY3Rpb24oYSxkLGUsZil7ImZ1bmN0 aW9uIiE9dHlwZW9mIGV8fGUubGVuZ3RofHwoZj1lLGU9Yy5saW5lYXIpLGEg aW5zdGFuY2VvZiB3JiYoZj1hLmNhbGxiYWNrLGU9YS5lYXNpbmcsZD1hLmR1 cixhPWEuYXR0cik7dmFyIGcsaCxpLGosbD1bXSxtPVtdLHA9e30scT10aGlz O2Zvcih2YXIgciBpbiBhKWlmKGFbdF0ocikpe3EuZXF1YWw/KGo9cS5lcXVh bChyLG8oYVtyXSkpLGc9ai5mcm9tLGg9ai50byxpPWouZik6KGc9K3EuYXR0 cihyKSxoPSthW3JdKTt2YXIgcz1uKGcsImFycmF5Iik/Zy5sZW5ndGg6MTtw W3JdPWsobC5sZW5ndGgsbC5sZW5ndGgrcyxpKSxsPWwuY29uY2F0KGcpLG09 bS5jb25jYXQoaCl9dmFyIHU9Yy50aW1lKCksdj1jKGwsbSx1LHUrZCxjLnRp bWUsZnVuY3Rpb24oYSl7dmFyIGI9e307Zm9yKHZhciBjIGluIHApcFt0XShj KSYmKGJbY109cFtjXShhKSk7cS5hdHRyKGIpfSxlKTtyZXR1cm4gcS5hbmlt c1t2LmlkXT12LHYuX2F0dHJzPWEsdi5fY2FsbGJhY2s9ZixiKCJzbmFwLmFu aW1jcmVhdGVkLiIrcS5pZCx2KSxiLm9uY2UoIm1pbmEuZmluaXNoLiIrdi5p ZCxmdW5jdGlvbigpe2RlbGV0ZSBxLmFuaW1zW3YuaWRdLGYmJmYuY2FsbChx KX0pLGIub25jZSgibWluYS5zdG9wLiIrdi5pZCxmdW5jdGlvbigpe2RlbGV0 ZSBxLmFuaW1zW3YuaWRdfSkscX07dmFyIHg9e307bS5kYXRhPWZ1bmN0aW9u KGEsYyl7dmFyIGU9eFt0aGlzLmlkXT14W3RoaXMuaWRdfHx7fTtpZigwPT1h cmd1bWVudHMubGVuZ3RoKXJldHVybiBiKCJzbmFwLmRhdGEuZ2V0LiIrdGhp cy5pZCx0aGlzLGUsbnVsbCksZTsKK2lmKDE9PWFyZ3VtZW50cy5sZW5ndGgp e2lmKGQuaXMoYSwib2JqZWN0Iikpe2Zvcih2YXIgZiBpbiBhKWFbdF0oZikm JnRoaXMuZGF0YShmLGFbZl0pO3JldHVybiB0aGlzfXJldHVybiBiKCJzbmFw LmRhdGEuZ2V0LiIrdGhpcy5pZCx0aGlzLGVbYV0sYSksZVthXX1yZXR1cm4g ZVthXT1jLGIoInNuYXAuZGF0YS5zZXQuIit0aGlzLmlkLHRoaXMsYyxhKSx0 aGlzfSxtLnJlbW92ZURhdGE9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/ eFt0aGlzLmlkXT17fTp4W3RoaXMuaWRdJiZkZWxldGUgeFt0aGlzLmlkXVth XSx0aGlzfSxtLm91dGVyU1ZHPW0udG9TdHJpbmc9bCgxKSxtLmlubmVyU1ZH PWwoKSxtLnRvRGF0YVVSTD1mdW5jdGlvbigpe2lmKGEmJmEuYnRvYSl7dmFy IGI9dGhpcy5nZXRCQm94KCksYz1kLmZvcm1hdCgnPHN2ZyB2ZXJzaW9uPSIx LjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6 eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSJ7 d2lkdGh9IiBoZWlnaHQ9IntoZWlnaHR9IiB2aWV3Qm94PSJ7eH0ge3l9IHt3 aWR0aH0ge2hlaWdodH0iPntjb250ZW50c308L3N2Zz4nLHt4OitiLngudG9G aXhlZCgzKSx5OitiLnkudG9GaXhlZCgzKSx3aWR0aDorYi53aWR0aC50b0Zp eGVkKDMpLGhlaWdodDorYi5oZWlnaHQudG9GaXhlZCgzKSxjb250ZW50czp0 aGlzLm91dGVyU1ZHKCl9KTtyZXR1cm4iZGF0YTppbWFnZS9zdmcreG1sO2Jh c2U2NCwiK2J0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGMpKSl9 fSxoLnByb3RvdHlwZS5zZWxlY3Q9bS5zZWxlY3QsaC5wcm90b3R5cGUuc2Vs ZWN0QWxsPW0uc2VsZWN0QWxsfSksZC5wbHVnaW4oZnVuY3Rpb24oYSl7ZnVu Y3Rpb24gYihhLGIsZCxlLGYsZyl7cmV0dXJuIG51bGw9PWImJiJbb2JqZWN0 IFNWR01hdHJpeF0iPT1jLmNhbGwoYSk/KHRoaXMuYT1hLmEsdGhpcy5iPWEu Yix0aGlzLmM9YS5jLHRoaXMuZD1hLmQsdGhpcy5lPWEuZSx2b2lkKHRoaXMu Zj1hLmYpKTp2b2lkKG51bGwhPWE/KHRoaXMuYT0rYSx0aGlzLmI9K2IsdGhp cy5jPStkLHRoaXMuZD0rZSx0aGlzLmU9K2YsdGhpcy5mPStnKToodGhpcy5h PTEsdGhpcy5iPTAsdGhpcy5jPTAsdGhpcy5kPTEsdGhpcy5lPTAsdGhpcy5m PTApKX12YXIgYz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGQ9U3RyaW5n LGU9TWF0aCxmPSIiOyFmdW5jdGlvbihjKXtmdW5jdGlvbiBnKGEpe3JldHVy biBhWzBdKmFbMF0rYVsxXSphWzFdfWZ1bmN0aW9uIGgoYSl7dmFyIGI9ZS5z cXJ0KGcoYSkpO2FbMF0mJihhWzBdLz1iKSxhWzFdJiYoYVsxXS89Yil9Yy5h ZGQ9ZnVuY3Rpb24oYSxjLGQsZSxmLGcpe3ZhciBoLGksaixrLGw9W1tdLFtd LFtdXSxtPVtbdGhpcy5hLHRoaXMuYyx0aGlzLmVdLFt0aGlzLmIsdGhpcy5k LHRoaXMuZl0sWzAsMCwxXV0sbj1bW2EsZCxmXSxbYyxlLGddLFswLDAsMV1d O2ZvcihhJiZhIGluc3RhbmNlb2YgYiYmKG49W1thLmEsYS5jLGEuZV0sW2Eu YixhLmQsYS5mXSxbMCwwLDFdXSksaD0wOzM+aDtoKyspZm9yKGk9MDszPmk7 aSsrKXtmb3Ioaz0wLGo9MDszPmo7aisrKWsrPW1baF1bal0qbltqXVtpXTts W2hdW2ldPWt9cmV0dXJuIHRoaXMuYT1sWzBdWzBdLHRoaXMuYj1sWzFdWzBd LHRoaXMuYz1sWzBdWzFdLHRoaXMuZD1sWzFdWzFdLHRoaXMuZT1sWzBdWzJd LHRoaXMuZj1sWzFdWzJdLHRoaXN9LGMuaW52ZXJ0PWZ1bmN0aW9uKCl7dmFy IGE9dGhpcyxjPWEuYSphLmQtYS5iKmEuYztyZXR1cm4gbmV3IGIoYS5kL2Ms LWEuYi9jLC1hLmMvYyxhLmEvYywoYS5jKmEuZi1hLmQqYS5lKS9jLChhLmIq YS5lLWEuYSphLmYpL2MpfSxjLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5l dyBiKHRoaXMuYSx0aGlzLmIsdGhpcy5jLHRoaXMuZCx0aGlzLmUsdGhpcy5m KX0sYy50cmFuc2xhdGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5hZGQo MSwwLDAsMSxhLGIpfSxjLnNjYWxlPWZ1bmN0aW9uKGEsYixjLGQpe3JldHVy biBudWxsPT1iJiYoYj1hKSwoY3x8ZCkmJnRoaXMuYWRkKDEsMCwwLDEsYyxk KSx0aGlzLmFkZChhLDAsMCxiLDAsMCksKGN8fGQpJiZ0aGlzLmFkZCgxLDAs MCwxLC1jLC1kKSx0aGlzfSxjLnJvdGF0ZT1mdW5jdGlvbihiLGMsZCl7Yj1h LnJhZChiKSxjPWN8fDAsZD1kfHwwO3ZhciBmPStlLmNvcyhiKS50b0ZpeGVk KDkpLGc9K2Uuc2luKGIpLnRvRml4ZWQoOSk7cmV0dXJuIHRoaXMuYWRkKGYs ZywtZyxmLGMsZCksdGhpcy5hZGQoMSwwLDAsMSwtYywtZCl9LGMueD1mdW5j dGlvbihhLGIpe3JldHVybiBhKnRoaXMuYStiKnRoaXMuYyt0aGlzLmV9LGMu eT1mdW5jdGlvbihhLGIpe3JldHVybiBhKnRoaXMuYitiKnRoaXMuZCt0aGlz LmZ9LGMuZ2V0PWZ1bmN0aW9uKGEpe3JldHVybit0aGlzW2QuZnJvbUNoYXJD b2RlKDk3K2EpXS50b0ZpeGVkKDQpfSxjLnRvU3RyaW5nPWZ1bmN0aW9uKCl7 cmV0dXJuIm1hdHJpeCgiK1t0aGlzLmdldCgwKSx0aGlzLmdldCgxKSx0aGlz LmdldCgyKSx0aGlzLmdldCgzKSx0aGlzLmdldCg0KSx0aGlzLmdldCg1KV0u am9pbigpKyIpIn0sYy5vZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5l LnRvRml4ZWQoNCksdGhpcy5mLnRvRml4ZWQoNCldfSxjLmRldGVybWluYW50 PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYSp0aGlzLmQtdGhpcy5iKnRoaXMu Y30sYy5zcGxpdD1mdW5jdGlvbigpe3ZhciBiPXt9O2IuZHg9dGhpcy5lLGIu ZHk9dGhpcy5mO3ZhciBjPVtbdGhpcy5hLHRoaXMuY10sW3RoaXMuYix0aGlz LmRdXTtiLnNjYWxleD1lLnNxcnQoZyhjWzBdKSksaChjWzBdKSxiLnNoZWFy PWNbMF1bMF0qY1sxXVswXStjWzBdWzFdKmNbMV1bMV0sY1sxXT1bY1sxXVsw XS1jWzBdWzBdKmIuc2hlYXIsY1sxXVsxXS1jWzBdWzFdKmIuc2hlYXJdLGIu c2NhbGV5PWUuc3FydChnKGNbMV0pKSxoKGNbMV0pLGIuc2hlYXIvPWIuc2Nh bGV5LHRoaXMuZGV0ZXJtaW5hbnQoKTwwJiYoYi5zY2FsZXg9LWIuc2NhbGV4 KTt2YXIgZD0tY1swXVsxXSxmPWNbMV1bMV07cmV0dXJuIDA+Zj8oYi5yb3Rh dGU9YS5kZWcoZS5hY29zKGYpKSwwPmQmJihiLnJvdGF0ZT0zNjAtYi5yb3Rh dGUpKTpiLnJvdGF0ZT1hLmRlZyhlLmFzaW4oZCkpLGIuaXNTaW1wbGU9ISgr Yi5zaGVhci50b0ZpeGVkKDkpfHxiLnNjYWxleC50b0ZpeGVkKDkpIT1iLnNj YWxleS50b0ZpeGVkKDkpJiZiLnJvdGF0ZSksYi5pc1N1cGVyU2ltcGxlPSEr Yi5zaGVhci50b0ZpeGVkKDkpJiZiLnNjYWxleC50b0ZpeGVkKDkpPT1iLnNj YWxleS50b0ZpeGVkKDkpJiYhYi5yb3RhdGUsYi5ub1JvdGF0aW9uPSErYi5z aGVhci50b0ZpeGVkKDkpJiYhYi5yb3RhdGUsYn0sYy50b1RyYW5zZm9ybVN0 cmluZz1mdW5jdGlvbihhKXt2YXIgYj1hfHx0aGlzLnNwbGl0KCk7cmV0dXJu K2Iuc2hlYXIudG9GaXhlZCg5KT8ibSIrW3RoaXMuZ2V0KDApLHRoaXMuZ2V0 KDEpLHRoaXMuZ2V0KDIpLHRoaXMuZ2V0KDMpLHRoaXMuZ2V0KDQpLHRoaXMu Z2V0KDUpXTooYi5zY2FsZXg9K2Iuc2NhbGV4LnRvRml4ZWQoNCksYi5zY2Fs ZXk9K2Iuc2NhbGV5LnRvRml4ZWQoNCksYi5yb3RhdGU9K2Iucm90YXRlLnRv Rml4ZWQoNCksKGIuZHh8fGIuZHk/InQiK1srYi5keC50b0ZpeGVkKDQpLCti LmR5LnRvRml4ZWQoNCldOmYpKygxIT1iLnNjYWxleHx8MSE9Yi5zY2FsZXk/ InMiK1tiLnNjYWxleCxiLnNjYWxleSwwLDBdOmYpKyhiLnJvdGF0ZT8iciIr WytiLnJvdGF0ZS50b0ZpeGVkKDQpLDAsMF06ZikpfX0oYi5wcm90b3R5cGUp LGEuTWF0cml4PWIsYS5tYXRyaXg9ZnVuY3Rpb24oYSxjLGQsZSxmLGcpe3Jl dHVybiBuZXcgYihhLGMsZCxlLGYsZyl9fSksZC5wbHVnaW4oZnVuY3Rpb24o YSxjLGQsZSxmKXtmdW5jdGlvbiBnKGQpe3JldHVybiBmdW5jdGlvbihlKXtp ZihiLnN0b3AoKSxlIGluc3RhbmNlb2YgZiYmMT09ZS5ub2RlLmNoaWxkTm9k ZXMubGVuZ3RoJiYoInJhZGlhbEdyYWRpZW50Ij09ZS5ub2RlLmZpcnN0Q2hp bGQudGFnTmFtZXx8ImxpbmVhckdyYWRpZW50Ij09ZS5ub2RlLmZpcnN0Q2hp bGQudGFnTmFtZXx8InBhdHRlcm4iPT1lLm5vZGUuZmlyc3RDaGlsZC50YWdO YW1lKSYmKGU9ZS5ub2RlLmZpcnN0Q2hpbGQsbih0aGlzKS5hcHBlbmRDaGls ZChlKSxlPWwoZSkpLGUgaW5zdGFuY2VvZiBjKWlmKCJyYWRpYWxHcmFkaWVu dCI9PWUudHlwZXx8ImxpbmVhckdyYWRpZW50Ij09ZS50eXBlfHwicGF0dGVy biI9PWUudHlwZSl7ZS5ub2RlLmlkfHxwKGUubm9kZSx7aWQ6ZS5pZH0pO3Zh ciBnPXEoZS5ub2RlLmlkKX1lbHNlIGc9ZS5hdHRyKGQpO2Vsc2UgaWYoZz1h LmNvbG9yKGUpLGcuZXJyb3Ipe3ZhciBoPWEobih0aGlzKS5vd25lclNWR0Vs ZW1lbnQpLmdyYWRpZW50KGUpO2g/KGgubm9kZS5pZHx8cChoLm5vZGUse2lk OmguaWR9KSxnPXEoaC5ub2RlLmlkKSk6Zz1lfWVsc2UgZz1yKGcpO3ZhciBp PXt9O2lbZF09ZyxwKHRoaXMubm9kZSxpKSx0aGlzLm5vZGUuc3R5bGVbZF09 dH19ZnVuY3Rpb24gaChhKXtiLnN0b3AoKSxhPT0rYSYmKGErPSJweCIpLHRo aXMubm9kZS5zdHlsZS5mb250U2l6ZT1hfWZ1bmN0aW9uIGkoYSl7Zm9yKHZh ciBiPVtdLGM9YS5jaGlsZE5vZGVzLGQ9MCxlPWMubGVuZ3RoO2U+ZDtkKysp e3ZhciBmPWNbZF07Mz09Zi5ub2RlVHlwZSYmYi5wdXNoKGYubm9kZVZhbHVl KSwidHNwYW4iPT1mLnRhZ05hbWUmJmIucHVzaCgxPT1mLmNoaWxkTm9kZXMu bGVuZ3RoJiYzPT1mLmZpcnN0Q2hpbGQubm9kZVR5cGU/Zi5maXJzdENoaWxk Lm5vZGVWYWx1ZTppKGYpKX1yZXR1cm4gYn1mdW5jdGlvbiBqKCl7cmV0dXJu IGIuc3RvcCgpLHRoaXMubm9kZS5zdHlsZS5mb250U2l6ZX12YXIgaz1hLl8u bWFrZSxsPWEuXy53cmFwLG09YS5pcyxuPWEuXy5nZXRTb21lRGVmcyxvPS9e dXJsXCgjPyhbXildKylcKSQvLHA9YS5fLiQscT1hLnVybCxyPVN0cmluZyxz PWEuXy5zZXBhcmF0b3IsdD0iIjtiLm9uKCJzbmFwLnV0aWwuYXR0ci5tYXNr IixmdW5jdGlvbihhKXtpZihhIGluc3RhbmNlb2YgY3x8YSBpbnN0YW5jZW9m IGYpe2lmKGIuc3RvcCgpLGEgaW5zdGFuY2VvZiBmJiYxPT1hLm5vZGUuY2hp bGROb2Rlcy5sZW5ndGgmJihhPWEubm9kZS5maXJzdENoaWxkLG4odGhpcyku YXBwZW5kQ2hpbGQoYSksYT1sKGEpKSwibWFzayI9PWEudHlwZSl2YXIgZD1h O2Vsc2UgZD1rKCJtYXNrIixuKHRoaXMpKSxkLm5vZGUuYXBwZW5kQ2hpbGQo YS5ub2RlKTshZC5ub2RlLmlkJiZwKGQubm9kZSx7aWQ6ZC5pZH0pLHAodGhp cy5ub2RlLHttYXNrOnEoZC5pZCl9KX19KSxmdW5jdGlvbihhKXtiLm9uKCJz bmFwLnV0aWwuYXR0ci5jbGlwIixhKSxiLm9uKCJzbmFwLnV0aWwuYXR0ci5j bGlwLXBhdGgiLGEpLGIub24oInNuYXAudXRpbC5hdHRyLmNsaXBQYXRoIixh KX0oZnVuY3Rpb24oYSl7aWYoYSBpbnN0YW5jZW9mIGN8fGEgaW5zdGFuY2Vv ZiBmKXtpZihiLnN0b3AoKSwiY2xpcFBhdGgiPT1hLnR5cGUpdmFyIGQ9YTtl bHNlIGQ9aygiY2xpcFBhdGgiLG4odGhpcykpLGQubm9kZS5hcHBlbmRDaGls ZChhLm5vZGUpLCFkLm5vZGUuaWQmJnAoZC5ub2RlLHtpZDpkLmlkfSk7cCh0 aGlzLm5vZGUseyJjbGlwLXBhdGgiOnEoZC5ub2RlLmlkfHxkLmlkKX0pfX0p LGIub24oInNuYXAudXRpbC5hdHRyLmZpbGwiLGcoImZpbGwiKSksYi5vbigi c25hcC51dGlsLmF0dHIuc3Ryb2tlIixnKCJzdHJva2UiKSk7dmFyIHU9L14o W2xyXSkoPzpcKChbXildKilcKSk/KC4qKSQvaTtiLm9uKCJzbmFwLnV0aWwu Z3JhZC5wYXJzZSIsZnVuY3Rpb24oYSl7YT1yKGEpO3ZhciBiPWEubWF0Y2go dSk7aWYoIWIpcmV0dXJuIG51bGw7dmFyIGM9YlsxXSxkPWJbMl0sZT1iWzNd O3JldHVybiBkPWQuc3BsaXQoL1xzKixccyovKS5tYXAoZnVuY3Rpb24oYSl7 cmV0dXJuK2E9PWE/K2E6YX0pLDE9PWQubGVuZ3RoJiYwPT1kWzBdJiYoZD1b XSksZT1lLnNwbGl0KCItIiksZT1lLm1hcChmdW5jdGlvbihhKXthPWEuc3Bs aXQoIjoiKTt2YXIgYj17Y29sb3I6YVswXX07cmV0dXJuIGFbMV0mJihiLm9m ZnNldD1wYXJzZUZsb2F0KGFbMV0pKSxifSkse3R5cGU6YyxwYXJhbXM6ZCxz dG9wczplfX0pLGIub24oInNuYXAudXRpbC5hdHRyLmQiLGZ1bmN0aW9uKGMp e2Iuc3RvcCgpLG0oYywiYXJyYXkiKSYmbShjWzBdLCJhcnJheSIpJiYoYz1h LnBhdGgudG9TdHJpbmcuY2FsbChjKSksYz1yKGMpLGMubWF0Y2goL1tydW9d L2kpJiYoYz1hLnBhdGgudG9BYnNvbHV0ZShjKSkscCh0aGlzLm5vZGUse2Q6 Y30pfSkoLTEpLGIub24oInNuYXAudXRpbC5hdHRyLiN0ZXh0IixmdW5jdGlv bihhKXtiLnN0b3AoKSxhPXIoYSk7Zm9yKHZhciBjPWUuZG9jLmNyZWF0ZVRl eHROb2RlKGEpO3RoaXMubm9kZS5maXJzdENoaWxkOyl0aGlzLm5vZGUucmVt b3ZlQ2hpbGQodGhpcy5ub2RlLmZpcnN0Q2hpbGQpO3RoaXMubm9kZS5hcHBl bmRDaGlsZChjKX0pKC0xKSxiLm9uKCJzbmFwLnV0aWwuYXR0ci5wYXRoIixm dW5jdGlvbihhKXtiLnN0b3AoKSx0aGlzLmF0dHIoe2Q6YX0pfSkoLTEpLGIu b24oInNuYXAudXRpbC5hdHRyLmNsYXNzIixmdW5jdGlvbihhKXtiLnN0b3Ao KSx0aGlzLm5vZGUuY2xhc3NOYW1lLmJhc2VWYWw9YX0pKC0xKSxiLm9uKCJz bmFwLnV0aWwuYXR0ci52aWV3Qm94IixmdW5jdGlvbihhKXt2YXIgYztjPW0o YSwib2JqZWN0IikmJiJ4ImluIGE/W2EueCxhLnksYS53aWR0aCxhLmhlaWdo dF0uam9pbigiICIpOm0oYSwiYXJyYXkiKT9hLmpvaW4oIiAiKTphLHAodGhp cy5ub2RlLHt2aWV3Qm94OmN9KSxiLnN0b3AoKX0pKC0xKSxiLm9uKCJzbmFw LnV0aWwuYXR0ci50cmFuc2Zvcm0iLGZ1bmN0aW9uKGEpe3RoaXMudHJhbnNm b3JtKGEpLGIuc3RvcCgpfSkoLTEpLGIub24oInNuYXAudXRpbC5hdHRyLnIi LGZ1bmN0aW9uKGEpeyJyZWN0Ij09dGhpcy50eXBlJiYoYi5zdG9wKCkscCh0 aGlzLm5vZGUse3J4OmEscnk6YX0pKX0pKC0xKSxiLm9uKCJzbmFwLnV0aWwu YXR0ci50ZXh0cGF0aCIsZnVuY3Rpb24oYSl7aWYoYi5zdG9wKCksInRleHQi PT10aGlzLnR5cGUpe3ZhciBkLGUsZjtpZighYSYmdGhpcy50ZXh0UGF0aCl7 Zm9yKGU9dGhpcy50ZXh0UGF0aDtlLm5vZGUuZmlyc3RDaGlsZDspdGhpcy5u b2RlLmFwcGVuZENoaWxkKGUubm9kZS5maXJzdENoaWxkKTtyZXR1cm4gZS5y ZW1vdmUoKSx2b2lkIGRlbGV0ZSB0aGlzLnRleHRQYXRofWlmKG0oYSwic3Ry aW5nIikpe3ZhciBnPW4odGhpcyksaD1sKGcucGFyZW50Tm9kZSkucGF0aChh KTtnLmFwcGVuZENoaWxkKGgubm9kZSksZD1oLmlkLGguYXR0cih7aWQ6ZH0p fWVsc2UgYT1sKGEpLGEgaW5zdGFuY2VvZiBjJiYoZD1hLmF0dHIoImlkIiks ZHx8KGQ9YS5pZCxhLmF0dHIoe2lkOmR9KSkpO2lmKGQpaWYoZT10aGlzLnRl eHRQYXRoLGY9dGhpcy5ub2RlLGUpZS5hdHRyKHsieGxpbms6aHJlZiI6IiMi K2R9KTtlbHNle2ZvcihlPXAoInRleHRQYXRoIix7InhsaW5rOmhyZWYiOiIj IitkfSk7Zi5maXJzdENoaWxkOyllLmFwcGVuZENoaWxkKGYuZmlyc3RDaGls ZCk7Zi5hcHBlbmRDaGlsZChlKSx0aGlzLnRleHRQYXRoPWwoZSl9fX0pKC0x KSxiLm9uKCJzbmFwLnV0aWwuYXR0ci50ZXh0IixmdW5jdGlvbihhKXtpZigi dGV4dCI9PXRoaXMudHlwZSl7Zm9yKHZhciBjPXRoaXMubm9kZSxkPWZ1bmN0 aW9uKGEpe3ZhciBiPXAoInRzcGFuIik7aWYobShhLCJhcnJheSIpKWZvcih2 YXIgYz0wO2M8YS5sZW5ndGg7YysrKWIuYXBwZW5kQ2hpbGQoZChhW2NdKSk7 ZWxzZSBiLmFwcGVuZENoaWxkKGUuZG9jLmNyZWF0ZVRleHROb2RlKGEpKTty ZXR1cm4gYi5ub3JtYWxpemUmJmIubm9ybWFsaXplKCksYn07Yy5maXJzdENo aWxkOyljLnJlbW92ZUNoaWxkKGMuZmlyc3RDaGlsZCk7Zm9yKHZhciBmPWQo YSk7Zi5maXJzdENoaWxkOyljLmFwcGVuZENoaWxkKGYuZmlyc3RDaGlsZCl9 Yi5zdG9wKCl9KSgtMSksYi5vbigic25hcC51dGlsLmF0dHIuZm9udFNpemUi LGgpKC0xKSxiLm9uKCJzbmFwLnV0aWwuYXR0ci5mb250LXNpemUiLGgpKC0x KSxiLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci50cmFuc2Zvcm0iLGZ1bmN0aW9u KCl7cmV0dXJuIGIuc3RvcCgpLHRoaXMudHJhbnNmb3JtKCl9KSgtMSksYi5v bigic25hcC51dGlsLmdldGF0dHIudGV4dHBhdGgiLGZ1bmN0aW9uKCl7cmV0 dXJuIGIuc3RvcCgpLHRoaXMudGV4dFBhdGh9KSgtMSksZnVuY3Rpb24oKXtm dW5jdGlvbiBjKGMpe3JldHVybiBmdW5jdGlvbigpe2Iuc3RvcCgpO3ZhciBk PWUuZG9jLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUodGhpcy5ub2Rl LG51bGwpLmdldFByb3BlcnR5VmFsdWUoIm1hcmtlci0iK2MpO3JldHVybiJu b25lIj09ZD9kOmEoZS5kb2MuZ2V0RWxlbWVudEJ5SWQoZC5tYXRjaChvKVsx XSkpfX1mdW5jdGlvbiBkKGEpe3JldHVybiBmdW5jdGlvbihjKXtiLnN0b3Ao KTt2YXIgZD0ibWFya2VyIithLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Eu c3Vic3RyaW5nKDEpO2lmKCIiPT1jfHwhYylyZXR1cm4gdm9pZCh0aGlzLm5v ZGUuc3R5bGVbZF09Im5vbmUiKTtpZigibWFya2VyIj09Yy50eXBlKXt2YXIg ZT1jLm5vZGUuaWQ7cmV0dXJuIGV8fHAoYy5ub2RlLHtpZDpjLmlkfSksdm9p ZCh0aGlzLm5vZGUuc3R5bGVbZF09cShlKSl9fX1iLm9uKCJzbmFwLnV0aWwu Z2V0YXR0ci5tYXJrZXItZW5kIixjKCJlbmQiKSkoLTEpLGIub24oInNuYXAu dXRpbC5nZXRhdHRyLm1hcmtlckVuZCIsYygiZW5kIikpKC0xKSxiLm9uKCJz bmFwLnV0aWwuZ2V0YXR0ci5tYXJrZXItc3RhcnQiLGMoInN0YXJ0IikpKC0x KSxiLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci5tYXJrZXJTdGFydCIsYygic3Rh cnQiKSkoLTEpLGIub24oInNuYXAudXRpbC5nZXRhdHRyLm1hcmtlci1taWQi LGMoIm1pZCIpKSgtMSksYi5vbigic25hcC51dGlsLmdldGF0dHIubWFya2Vy TWlkIixjKCJtaWQiKSkoLTEpLGIub24oInNuYXAudXRpbC5hdHRyLm1hcmtl ci1lbmQiLGQoImVuZCIpKSgtMSksYi5vbigic25hcC51dGlsLmF0dHIubWFy a2VyRW5kIixkKCJlbmQiKSkoLTEpLGIub24oInNuYXAudXRpbC5hdHRyLm1h cmtlci1zdGFydCIsZCgic3RhcnQiKSkoLTEpLGIub24oInNuYXAudXRpbC5h dHRyLm1hcmtlclN0YXJ0IixkKCJzdGFydCIpKSgtMSksYi5vbigic25hcC51 dGlsLmF0dHIubWFya2VyLW1pZCIsZCgibWlkIikpKC0xKSxiLm9uKCJzbmFw LnV0aWwuYXR0ci5tYXJrZXJNaWQiLGQoIm1pZCIpKSgtMSl9KCksYi5vbigi c25hcC51dGlsLmdldGF0dHIuciIsZnVuY3Rpb24oKXtyZXR1cm4icmVjdCI9 PXRoaXMudHlwZSYmcCh0aGlzLm5vZGUsInJ4Iik9PXAodGhpcy5ub2RlLCJy eSIpPyhiLnN0b3AoKSxwKHRoaXMubm9kZSwicngiKSk6dm9pZCAwfSkoLTEp LGIub24oInNuYXAudXRpbC5nZXRhdHRyLnRleHQiLGZ1bmN0aW9uKCl7aWYo InRleHQiPT10aGlzLnR5cGV8fCJ0c3BhbiI9PXRoaXMudHlwZSl7Yi5zdG9w KCk7dmFyIGE9aSh0aGlzLm5vZGUpO3JldHVybiAxPT1hLmxlbmd0aD9hWzBd OmF9fSkoLTEpLGIub24oInNuYXAudXRpbC5nZXRhdHRyLiN0ZXh0IixmdW5j dGlvbigpe3JldHVybiB0aGlzLm5vZGUudGV4dENvbnRlbnR9KSgtMSksYi5v bigic25hcC51dGlsLmdldGF0dHIudmlld0JveCIsZnVuY3Rpb24oKXtiLnN0 b3AoKTt2YXIgYz1wKHRoaXMubm9kZSwidmlld0JveCIpO3JldHVybiBjPyhj PWMuc3BsaXQocyksYS5fLmJveCgrY1swXSwrY1sxXSwrY1syXSwrY1szXSkp OnZvaWQgMH0pKC0xKSxiLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci5wb2ludHMi LGZ1bmN0aW9uKCl7dmFyIGE9cCh0aGlzLm5vZGUsInBvaW50cyIpO3JldHVy biBiLnN0b3AoKSxhP2Euc3BsaXQocyk6dm9pZCAwfSkoLTEpLGIub24oInNu YXAudXRpbC5nZXRhdHRyLnBhdGgiLGZ1bmN0aW9uKCl7dmFyIGE9cCh0aGlz Lm5vZGUsImQiKTtyZXR1cm4gYi5zdG9wKCksYX0pKC0xKSxiLm9uKCJzbmFw LnV0aWwuZ2V0YXR0ci5jbGFzcyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5u b2RlLmNsYXNzTmFtZS5iYXNlVmFsfSkoLTEpLGIub24oInNuYXAudXRpbC5n ZXRhdHRyLmZvbnRTaXplIixqKSgtMSksYi5vbigic25hcC51dGlsLmdldGF0 dHIuZm9udC1zaXplIixqKSgtMSl9KSxkLnBsdWdpbihmdW5jdGlvbihhLGIp e3ZhciBjPS9cUysvZyxkPVN0cmluZyxlPWIucHJvdG90eXBlO2UuYWRkQ2xh c3M9ZnVuY3Rpb24oYSl7dmFyIGIsZSxmLGcsaD1kKGF8fCIiKS5tYXRjaChj KXx8W10saT10aGlzLm5vZGUsaj1pLmNsYXNzTmFtZS5iYXNlVmFsLGs9ai5t YXRjaChjKXx8W107aWYoaC5sZW5ndGgpe2ZvcihiPTA7Zj1oW2IrK107KWU9 ay5pbmRleE9mKGYpLH5lfHxrLnB1c2goZik7Zz1rLmpvaW4oIiAiKSxqIT1n JiYoaS5jbGFzc05hbWUuYmFzZVZhbD1nKX1yZXR1cm4gdGhpc30sZS5yZW1v dmVDbGFzcz1mdW5jdGlvbihhKXt2YXIgYixlLGYsZyxoPWQoYXx8IiIpLm1h dGNoKGMpfHxbXSxpPXRoaXMubm9kZSxqPWkuY2xhc3NOYW1lLmJhc2VWYWws az1qLm1hdGNoKGMpfHxbXTtpZihrLmxlbmd0aCl7Zm9yKGI9MDtmPWhbYisr XTspZT1rLmluZGV4T2YoZiksfmUmJmsuc3BsaWNlKGUsMSk7Zz1rLmpvaW4o IiAiKSxqIT1nJiYoaS5jbGFzc05hbWUuYmFzZVZhbD1nKX1yZXR1cm4gdGhp c30sZS5oYXNDbGFzcz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLm5vZGUsZD1i LmNsYXNzTmFtZS5iYXNlVmFsLGU9ZC5tYXRjaChjKXx8W107cmV0dXJuISF+ ZS5pbmRleE9mKGEpfSxlLnRvZ2dsZUNsYXNzPWZ1bmN0aW9uKGEsYil7aWYo bnVsbCE9YilyZXR1cm4gYj90aGlzLmFkZENsYXNzKGEpOnRoaXMucmVtb3Zl Q2xhc3MoYSk7dmFyIGQsZSxmLGcsaD0oYXx8IiIpLm1hdGNoKGMpfHxbXSxp PXRoaXMubm9kZSxqPWkuY2xhc3NOYW1lLmJhc2VWYWwsaz1qLm1hdGNoKGMp fHxbXTtmb3IoZD0wO2Y9aFtkKytdOyllPWsuaW5kZXhPZihmKSx+ZT9rLnNw bGljZShlLDEpOmsucHVzaChmKTtyZXR1cm4gZz1rLmpvaW4oIiAiKSxqIT1n JiYoaS5jbGFzc05hbWUuYmFzZVZhbD1nKSx0aGlzfX0pLGQucGx1Z2luKGZ1 bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXtyZXR1cm4gYX1mdW5jdGlvbiBjKGEp e3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4rYi50b0ZpeGVkKDMpK2F9fXZh ciBkPXsiKyI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYStifSwiLSI6ZnVuY3Rp b24oYSxiKXtyZXR1cm4gYS1ifSwiLyI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4g YS9ifSwiKiI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSpifX0sZT1TdHJpbmcs Zj0vW2Etel0rJC9pLGc9L15ccyooWytcLVwvKl0pXHMqPVxzKihbXGQuZUUr XC1dKylccyooW15cZFxzXSspP1xzKiQvO2Iub24oInNuYXAudXRpbC5hdHRy IixmdW5jdGlvbihhKXt2YXIgYz1lKGEpLm1hdGNoKGcpO2lmKGMpe3ZhciBo PWIubnQoKSxpPWguc3Vic3RyaW5nKGgubGFzdEluZGV4T2YoIi4iKSsxKSxq PXRoaXMuYXR0cihpKSxrPXt9O2Iuc3RvcCgpO3ZhciBsPWNbM118fCIiLG09 ai5tYXRjaChmKSxuPWRbY1sxXV07aWYobSYmbT09bD9hPW4ocGFyc2VGbG9h dChqKSwrY1syXSk6KGo9dGhpcy5hc1BYKGkpLGE9bih0aGlzLmFzUFgoaSks dGhpcy5hc1BYKGksY1syXStsKSkpLGlzTmFOKGopfHxpc05hTihhKSlyZXR1 cm47a1tpXT1hLHRoaXMuYXR0cihrKX19KSgtMTApLGIub24oInNuYXAudXRp bC5lcXVhbCIsZnVuY3Rpb24oaCxpKXt2YXIgaj1lKHRoaXMuYXR0cihoKXx8 IiIpLGs9ZShpKS5tYXRjaChnKTtpZihrKXtiLnN0b3AoKTt2YXIgbD1rWzNd fHwiIixtPWoubWF0Y2goZiksbj1kW2tbMV1dO3JldHVybiBtJiZtPT1sP3tm cm9tOnBhcnNlRmxvYXQoaiksdG86bihwYXJzZUZsb2F0KGopLCtrWzJdKSxm OmMobSl9OihqPXRoaXMuYXNQWChoKSx7ZnJvbTpqLHRvOm4oaix0aGlzLmFz UFgoaCxrWzJdK2wpKSxmOmF9KX19KSgtMTApfSksZC5wbHVnaW4oZnVuY3Rp b24oYyxkLGUsZil7dmFyIGc9ZS5wcm90b3R5cGUsaD1jLmlzO2cucmVjdD1m dW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc7cmV0dXJuIG51bGw9PWYmJihm PWUpLGgoYSwib2JqZWN0IikmJiJbb2JqZWN0IE9iamVjdF0iPT1hP2c9YTpu dWxsIT1hJiYoZz17eDphLHk6Yix3aWR0aDpjLGhlaWdodDpkfSxudWxsIT1l JiYoZy5yeD1lLGcucnk9ZikpLHRoaXMuZWwoInJlY3QiLGcpfSxnLmNpcmNs ZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIGgoYSwib2JqZWN0Iikm JiJbb2JqZWN0IE9iamVjdF0iPT1hP2Q9YTpudWxsIT1hJiYoZD17Y3g6YSxj eTpiLHI6Y30pLHRoaXMuZWwoImNpcmNsZSIsZCl9O3ZhciBpPWZ1bmN0aW9u KCl7ZnVuY3Rpb24gYSgpe3RoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0 aGlzKX1yZXR1cm4gZnVuY3Rpb24oYixjKXt2YXIgZD1mLmRvYy5jcmVhdGVF bGVtZW50KCJpbWciKSxlPWYuZG9jLmJvZHk7ZC5zdHlsZS5jc3NUZXh0PSJw b3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi05OTk5ZW07dG9wOi05OTk5ZW0iLGQu b25sb2FkPWZ1bmN0aW9uKCl7Yy5jYWxsKGQpLGQub25sb2FkPWQub25lcnJv cj1udWxsLGUucmVtb3ZlQ2hpbGQoZCl9LGQub25lcnJvcj1hLGUuYXBwZW5k Q2hpbGQoZCksZC5zcmM9Yn19KCk7Zy5pbWFnZT1mdW5jdGlvbihhLGIsZCxl LGYpe3ZhciBnPXRoaXMuZWwoImltYWdlIik7aWYoaChhLCJvYmplY3QiKSYm InNyYyJpbiBhKWcuYXR0cihhKTtlbHNlIGlmKG51bGwhPWEpe3ZhciBqPXsi eGxpbms6aHJlZiI6YSxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn07bnVs bCE9YiYmbnVsbCE9ZCYmKGoueD1iLGoueT1kKSxudWxsIT1lJiZudWxsIT1m PyhqLndpZHRoPWUsai5oZWlnaHQ9Zik6aShhLGZ1bmN0aW9uKCl7Yy5fLiQo Zy5ub2RlLHt3aWR0aDp0aGlzLm9mZnNldFdpZHRoLGhlaWdodDp0aGlzLm9m ZnNldEhlaWdodH0pfSksYy5fLiQoZy5ub2RlLGopfXJldHVybiBnfSxnLmVs bGlwc2U9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU7cmV0dXJuIGgoYSwib2Jq ZWN0IikmJiJbb2JqZWN0IE9iamVjdF0iPT1hP2U9YTpudWxsIT1hJiYoZT17 Y3g6YSxjeTpiLHJ4OmMscnk6ZH0pLHRoaXMuZWwoImVsbGlwc2UiLGUpfSxn LnBhdGg9ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIGgoYSwib2JqZWN0Iikm JiFoKGEsImFycmF5Iik/Yj1hOmEmJihiPXtkOmF9KSx0aGlzLmVsKCJwYXRo IixiKX0sZy5ncm91cD1nLmc9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5lbCgi ZyIpO3JldHVybiAxPT1hcmd1bWVudHMubGVuZ3RoJiZhJiYhYS50eXBlP2Iu YXR0cihhKTphcmd1bWVudHMubGVuZ3RoJiZiLmFkZChBcnJheS5wcm90b3R5 cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCkpLGJ9LGcuc3ZnPWZ1bmN0aW9u KGEsYixjLGQsZSxmLGcsaSl7dmFyIGo9e307cmV0dXJuIGgoYSwib2JqZWN0 IikmJm51bGw9PWI/aj1hOihudWxsIT1hJiYoai54PWEpLG51bGwhPWImJihq Lnk9YiksbnVsbCE9YyYmKGoud2lkdGg9YyksbnVsbCE9ZCYmKGouaGVpZ2h0 PWQpLG51bGwhPWUmJm51bGwhPWYmJm51bGwhPWcmJm51bGwhPWkmJihqLnZp ZXdCb3g9W2UsZixnLGldKSksdGhpcy5lbCgic3ZnIixqKX0sZy5tYXNrPWZ1 bmN0aW9uKGEpe3ZhciBiPXRoaXMuZWwoIm1hc2siKTtyZXR1cm4gMT09YXJn dW1lbnRzLmxlbmd0aCYmYSYmIWEudHlwZT9iLmF0dHIoYSk6YXJndW1lbnRz Lmxlbmd0aCYmYi5hZGQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJn dW1lbnRzLDApKSxifSxnLnB0cm49ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxp KXtpZihoKGEsIm9iamVjdCIpKXZhciBqPWE7ZWxzZSBqPXtwYXR0ZXJuVW5p dHM6InVzZXJTcGFjZU9uVXNlIn0sYSYmKGoueD1hKSxiJiYoai55PWIpLG51 bGwhPWMmJihqLndpZHRoPWMpLG51bGwhPWQmJihqLmhlaWdodD1kKSxqLnZp ZXdCb3g9bnVsbCE9ZSYmbnVsbCE9ZiYmbnVsbCE9ZyYmbnVsbCE9aT9bZSxm LGcsaV06W2F8fDAsYnx8MCxjfHwwLGR8fDBdO3JldHVybiB0aGlzLmVsKCJw YXR0ZXJuIixqKX0sZy51c2U9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWE/ KGEgaW5zdGFuY2VvZiBkJiYoYS5hdHRyKCJpZCIpfHxhLmF0dHIoe2lkOmMu Xy5pZChhKX0pLGE9YS5hdHRyKCJpZCIpKSwiIyI9PVN0cmluZyhhKS5jaGFy QXQoKSYmKGE9YS5zdWJzdHJpbmcoMSkpLHRoaXMuZWwoInVzZSIseyJ4bGlu azpocmVmIjoiIyIrYX0pKTpkLnByb3RvdHlwZS51c2UuY2FsbCh0aGlzKX0s Zy5zeW1ib2w9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9e307cmV0dXJuIG51 bGwhPWEmJm51bGwhPWImJm51bGwhPWMmJm51bGwhPWQmJihlLnZpZXdCb3g9 W2EsYixjLGRdKSx0aGlzLmVsKCJzeW1ib2wiLGUpfSxnLnRleHQ9ZnVuY3Rp b24oYSxiLGMpe3ZhciBkPXt9O3JldHVybiBoKGEsIm9iamVjdCIpP2Q9YTpu dWxsIT1hJiYoZD17eDphLHk6Yix0ZXh0OmN8fCIifSksdGhpcy5lbCgidGV4 dCIsZCl9LGcubGluZT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT17fTtyZXR1 cm4gaChhLCJvYmplY3QiKT9lPWE6bnVsbCE9YSYmKGU9e3gxOmEseDI6Yyx5 MTpiLHkyOmR9KSx0aGlzLmVsKCJsaW5lIixlKX0sZy5wb2x5bGluZT1mdW5j dGlvbihhKXthcmd1bWVudHMubGVuZ3RoPjEmJihhPUFycmF5LnByb3RvdHlw ZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSk7dmFyIGI9e307cmV0dXJuIGgo YSwib2JqZWN0IikmJiFoKGEsImFycmF5Iik/Yj1hOm51bGwhPWEmJihiPXtw b2ludHM6YX0pLHRoaXMuZWwoInBvbHlsaW5lIixiKX0sZy5wb2x5Z29uPWZ1 bmN0aW9uKGEpe2FyZ3VtZW50cy5sZW5ndGg+MSYmKGE9QXJyYXkucHJvdG90 eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKTt2YXIgYj17fTtyZXR1cm4g aChhLCJvYmplY3QiKSYmIWgoYSwiYXJyYXkiKT9iPWE6bnVsbCE9YSYmKGI9 e3BvaW50czphfSksdGhpcy5lbCgicG9seWdvbiIsYil9LGZ1bmN0aW9uKCl7 ZnVuY3Rpb24gZCgpe3JldHVybiB0aGlzLnNlbGVjdEFsbCgic3RvcCIpfWZ1 bmN0aW9uIGUoYSxiKXt2YXIgZD1rKCJzdG9wIiksZT17b2Zmc2V0OitiKyIl In07cmV0dXJuIGE9Yy5jb2xvcihhKSxlWyJzdG9wLWNvbG9yIl09YS5oZXgs YS5vcGFjaXR5PDEmJihlWyJzdG9wLW9wYWNpdHkiXT1hLm9wYWNpdHkpLGso ZCxlKSx0aGlzLm5vZGUuYXBwZW5kQ2hpbGQoZCksdGhpc31mdW5jdGlvbiBm KCl7aWYoImxpbmVhckdyYWRpZW50Ij09dGhpcy50eXBlKXt2YXIgYT1rKHRo aXMubm9kZSwieDEiKXx8MCxiPWsodGhpcy5ub2RlLCJ4MiIpfHwxLGQ9ayh0 aGlzLm5vZGUsInkxIil8fDAsZT1rKHRoaXMubm9kZSwieTIiKXx8MDtyZXR1 cm4gYy5fLmJveChhLGQsbWF0aC5hYnMoYi1hKSxtYXRoLmFicyhlLWQpKX12 YXIgZj10aGlzLm5vZGUuY3h8fC41LGc9dGhpcy5ub2RlLmN5fHwuNSxoPXRo aXMubm9kZS5yfHwwO3JldHVybiBjLl8uYm94KGYtaCxnLWgsMipoLDIqaCl9 ZnVuY3Rpb24gaChhLGMpe2Z1bmN0aW9uIGQoYSxiKXtmb3IodmFyIGM9KGIt bCkvKGEtbSksZD1tO2E+ZDtkKyspZ1tkXS5vZmZzZXQ9KygrbCtjKihkLW0p KS50b0ZpeGVkKDIpO209YSxsPWJ9dmFyIGUsZj1iKCJzbmFwLnV0aWwuZ3Jh ZC5wYXJzZSIsbnVsbCxjKS5maXJzdERlZmluZWQoKTtpZighZilyZXR1cm4g bnVsbDtmLnBhcmFtcy51bnNoaWZ0KGEpLGU9ImwiPT1mLnR5cGUudG9Mb3dl ckNhc2UoKT9pLmFwcGx5KDAsZi5wYXJhbXMpOmouYXBwbHkoMCxmLnBhcmFt cyksZi50eXBlIT1mLnR5cGUudG9Mb3dlckNhc2UoKSYmayhlLm5vZGUse2dy YWRpZW50VW5pdHM6InVzZXJTcGFjZU9uVXNlIn0pO3ZhciBnPWYuc3RvcHMs aD1nLmxlbmd0aCxsPTAsbT0wO2gtLTtmb3IodmFyIG49MDtoPm47bisrKSJv ZmZzZXQiaW4gZ1tuXSYmZChuLGdbbl0ub2Zmc2V0KTtmb3IoZ1toXS5vZmZz ZXQ9Z1toXS5vZmZzZXR8fDEwMCxkKGgsZ1toXS5vZmZzZXQpLG49MDtoPj1u O24rKyl7dmFyIG89Z1tuXTtlLmFkZFN0b3Aoby5jb2xvcixvLm9mZnNldCl9 cmV0dXJuIGV9ZnVuY3Rpb24gaShhLGIsZyxoLGkpe3ZhciBqPWMuXy5tYWtl KCJsaW5lYXJHcmFkaWVudCIsYSk7cmV0dXJuIGouc3RvcHM9ZCxqLmFkZFN0 b3A9ZSxqLmdldEJCb3g9ZixudWxsIT1iJiZrKGoubm9kZSx7eDE6Yix5MTpn LHgyOmgseTI6aX0pLGp9ZnVuY3Rpb24gaihhLGIsZyxoLGksail7dmFyIGw9 Yy5fLm1ha2UoInJhZGlhbEdyYWRpZW50IixhKTtyZXR1cm4gbC5zdG9wcz1k LGwuYWRkU3RvcD1lLGwuZ2V0QkJveD1mLG51bGwhPWImJmsobC5ub2RlLHtj eDpiLGN5OmcscjpofSksbnVsbCE9aSYmbnVsbCE9aiYmayhsLm5vZGUse2Z4 OmksZnk6an0pLGx9dmFyIGs9Yy5fLiQ7Zy5ncmFkaWVudD1mdW5jdGlvbihh KXtyZXR1cm4gaCh0aGlzLmRlZnMsYSl9LGcuZ3JhZGllbnRMaW5lYXI9ZnVu Y3Rpb24oYSxiLGMsZCl7cmV0dXJuIGkodGhpcy5kZWZzLGEsYixjLGQpfSxn LmdyYWRpZW50UmFkaWFsPWZ1bmN0aW9uKGEsYixjLGQsZSl7cmV0dXJuIGoo dGhpcy5kZWZzLGEsYixjLGQsZSl9LGcudG9TdHJpbmc9ZnVuY3Rpb24oKXt2 YXIgYSxiPXRoaXMubm9kZS5vd25lckRvY3VtZW50LGQ9Yi5jcmVhdGVEb2N1 bWVudEZyYWdtZW50KCksZT1iLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGY9dGhp cy5ub2RlLmNsb25lTm9kZSghMCk7cmV0dXJuIGQuYXBwZW5kQ2hpbGQoZSks ZS5hcHBlbmRDaGlsZChmKSxjLl8uJChmLHt4bWxuczoiaHR0cDovL3d3dy53 My5vcmcvMjAwMC9zdmcifSksYT1lLmlubmVySFRNTCxkLnJlbW92ZUNoaWxk KGQuZmlyc3RDaGlsZCksYX0sZy50b0RhdGFVUkw9ZnVuY3Rpb24oKXtyZXR1 cm4gYSYmYS5idG9hPyJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCIrYnRv YSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQodGhpcykpKTp2b2lkIDB9 LGcuY2xlYXI9ZnVuY3Rpb24oKXtmb3IodmFyIGEsYj10aGlzLm5vZGUuZmly c3RDaGlsZDtiOylhPWIubmV4dFNpYmxpbmcsImRlZnMiIT1iLnRhZ05hbWU/ Yi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpOmcuY2xlYXIuY2FsbCh7bm9k ZTpifSksYj1hfX0oKX0pLGQucGx1Z2luKGZ1bmN0aW9uKGEsYil7ZnVuY3Rp b24gYyhhKXt2YXIgYj1jLnBzPWMucHN8fHt9O3JldHVybiBiW2FdP2JbYV0u c2xlZXA9MTAwOmJbYV09e3NsZWVwOjEwMH0sc2V0VGltZW91dChmdW5jdGlv bigpe2Zvcih2YXIgYyBpbiBiKWJbS10oYykmJmMhPWEmJihiW2NdLnNsZWVw LS0sIWJbY10uc2xlZXAmJmRlbGV0ZSBiW2NdKX0pLGJbYV19ZnVuY3Rpb24g ZChhLGIsYyxkKXtyZXR1cm4gbnVsbD09YSYmKGE9Yj1jPWQ9MCksbnVsbD09 YiYmKGI9YS55LGM9YS53aWR0aCxkPWEuaGVpZ2h0LGE9YS54KSx7eDphLHk6 Yix3aWR0aDpjLHc6YyxoZWlnaHQ6ZCxoOmQseDI6YStjLHkyOmIrZCxjeDph K2MvMixjeTpiK2QvMixyMTpOLm1pbihjLGQpLzIscjI6Ti5tYXgoYyxkKS8y LHIwOk4uc3FydChjKmMrZCpkKS8yLHBhdGg6dyhhLGIsYyxkKSx2YjpbYSxi LGMsZF0uam9pbigiICIpfX1mdW5jdGlvbiBlKCl7cmV0dXJuIHRoaXMuam9p bigiLCIpLnJlcGxhY2UoTCwiJDEiKX1mdW5jdGlvbiBmKGEpe3ZhciBiPUoo YSk7cmV0dXJuIGIudG9TdHJpbmc9ZSxifWZ1bmN0aW9uIGcoYSxiLGMsZCxl LGYsZyxoLGope3JldHVybiBudWxsPT1qP24oYSxiLGMsZCxlLGYsZyxoKTpp KGEsYixjLGQsZSxmLGcsaCxvKGEsYixjLGQsZSxmLGcsaCxqKSl9ZnVuY3Rp b24gaChjLGQpe2Z1bmN0aW9uIGUoYSl7cmV0dXJuKygrYSkudG9GaXhlZCgz KX1yZXR1cm4gYS5fLmNhY2hlcihmdW5jdGlvbihhLGYsaCl7YSBpbnN0YW5j ZW9mIGImJihhPWEuYXR0cigiZCIpKSxhPUUoYSk7Zm9yKHZhciBqLGssbCxt LG4sbz0iIixwPXt9LHE9MCxyPTAscz1hLmxlbmd0aDtzPnI7cisrKXtpZihs PWFbcl0sIk0iPT1sWzBdKWo9K2xbMV0saz0rbFsyXTtlbHNle2lmKG09Zyhq LGssbFsxXSxsWzJdLGxbM10sbFs0XSxsWzVdLGxbNl0pLHErbT5mKXtpZihk JiYhcC5zdGFydCl7aWYobj1nKGosayxsWzFdLGxbMl0sbFszXSxsWzRdLGxb NV0sbFs2XSxmLXEpLG8rPVsiQyIrZShuLnN0YXJ0LngpLGUobi5zdGFydC55 KSxlKG4ubS54KSxlKG4ubS55KSxlKG4ueCksZShuLnkpXSxoKXJldHVybiBv O3Auc3RhcnQ9byxvPVsiTSIrZShuLngpLGUobi55KSsiQyIrZShuLm4ueCks ZShuLm4ueSksZShuLmVuZC54KSxlKG4uZW5kLnkpLGUobFs1XSksZShsWzZd KV0uam9pbigpLHErPW0saj0rbFs1XSxrPStsWzZdO2NvbnRpbnVlfWlmKCFj JiYhZClyZXR1cm4gbj1nKGosayxsWzFdLGxbMl0sbFszXSxsWzRdLGxbNV0s bFs2XSxmLXEpfXErPW0saj0rbFs1XSxrPStsWzZdfW8rPWwuc2hpZnQoKSts fXJldHVybiBwLmVuZD1vLG49Yz9xOmQ/cDppKGosayxsWzBdLGxbMV0sbFsy XSxsWzNdLGxbNF0sbFs1XSwxKX0sbnVsbCxhLl8uY2xvbmUpfWZ1bmN0aW9u IGkoYSxiLGMsZCxlLGYsZyxoLGkpe3ZhciBqPTEtaSxrPVIoaiwzKSxsPVIo aiwyKSxtPWkqaSxuPW0qaSxvPWsqYSszKmwqaSpjKzMqaippKmkqZStuKmcs cD1rKmIrMypsKmkqZCszKmoqaSppKmYrbipoLHE9YSsyKmkqKGMtYSkrbSoo ZS0yKmMrYSkscj1iKzIqaSooZC1iKSttKihmLTIqZCtiKSxzPWMrMippKihl LWMpK20qKGctMiplK2MpLHQ9ZCsyKmkqKGYtZCkrbSooaC0yKmYrZCksdT1q KmEraSpjLHY9aipiK2kqZCx3PWoqZStpKmcseD1qKmYraSpoLHk9OTAtMTgw Kk4uYXRhbjIocS1zLHItdCkvTztyZXR1cm57eDpvLHk6cCxtOnt4OnEseTpy fSxuOnt4OnMseTp0fSxzdGFydDp7eDp1LHk6dn0sZW5kOnt4OncseTp4fSxh bHBoYTp5fX1mdW5jdGlvbiBqKGIsYyxlLGYsZyxoLGksail7YS5pcyhiLCJh cnJheSIpfHwoYj1bYixjLGUsZixnLGgsaSxqXSk7dmFyIGs9RC5hcHBseShu dWxsLGIpO3JldHVybiBkKGsubWluLngsay5taW4ueSxrLm1heC54LWsubWlu Lngsay5tYXgueS1rLm1pbi55KX1mdW5jdGlvbiBrKGEsYixjKXtyZXR1cm4g Yj49YS54JiZiPD1hLngrYS53aWR0aCYmYz49YS55JiZjPD1hLnkrYS5oZWln aHR9ZnVuY3Rpb24gbChhLGIpe3JldHVybiBhPWQoYSksYj1kKGIpLGsoYixh LngsYS55KXx8ayhiLGEueDIsYS55KXx8ayhiLGEueCxhLnkyKXx8ayhiLGEu eDIsYS55Mil8fGsoYSxiLngsYi55KXx8ayhhLGIueDIsYi55KXx8ayhhLGIu eCxiLnkyKXx8ayhhLGIueDIsYi55Mil8fChhLng8Yi54MiYmYS54PmIueHx8 Yi54PGEueDImJmIueD5hLngpJiYoYS55PGIueTImJmEueT5iLnl8fGIueTxh LnkyJiZiLnk+YS55KX1mdW5jdGlvbiBtKGEsYixjLGQsZSl7dmFyIGY9LTMq Yis5KmMtOSpkKzMqZSxnPWEqZis2KmItMTIqYys2KmQ7cmV0dXJuIGEqZy0z KmIrMypjfWZ1bmN0aW9uIG4oYSxiLGMsZCxlLGYsZyxoLGkpe251bGw9PWkm JihpPTEpLGk9aT4xPzE6MD5pPzA6aTtmb3IodmFyIGo9aS8yLGs9MTIsbD1b LS4xMjUyLC4xMjUyLC0uMzY3OCwuMzY3OCwtLjU4NzMsLjU4NzMsLS43Njk5 LC43Njk5LC0uOTA0MSwuOTA0MSwtLjk4MTYsLjk4MTZdLG49Wy4yNDkxLC4y NDkxLC4yMzM1LC4yMzM1LC4yMDMyLC4yMDMyLC4xNjAxLC4xNjAxLC4xMDY5 LC4xMDY5LC4wNDcyLC4wNDcyXSxvPTAscD0wO2s+cDtwKyspe3ZhciBxPWoq bFtwXStqLHI9bShxLGEsYyxlLGcpLHM9bShxLGIsZCxmLGgpLHQ9cipyK3Mq cztvKz1uW3BdKk4uc3FydCh0KX1yZXR1cm4gaipvfWZ1bmN0aW9uIG8oYSxi LGMsZCxlLGYsZyxoLGkpe2lmKCEoMD5pfHxuKGEsYixjLGQsZSxmLGcsaCk8 aSkpe3ZhciBqLGs9MSxsPWsvMixtPWstbCxvPS4wMTtmb3Ioaj1uKGEsYixj LGQsZSxmLGcsaCxtKTtTKGotaSk+bzspbC89MixtKz0oaT5qPzE6LTEpKmws aj1uKGEsYixjLGQsZSxmLGcsaCxtKTtyZXR1cm4gbX19ZnVuY3Rpb24gcChh LGIsYyxkLGUsZixnLGgpe2lmKCEoUShhLGMpPFAoZSxnKXx8UChhLGMpPlEo ZSxnKXx8UShiLGQpPFAoZixoKXx8UChiLGQpPlEoZixoKSkpe3ZhciBpPShh KmQtYipjKSooZS1nKS0oYS1jKSooZSpoLWYqZyksaj0oYSpkLWIqYykqKGYt aCktKGItZCkqKGUqaC1mKmcpLGs9KGEtYykqKGYtaCktKGItZCkqKGUtZyk7 aWYoayl7dmFyIGw9aS9rLG09ai9rLG49K2wudG9GaXhlZCgyKSxvPSttLnRv Rml4ZWQoMik7aWYoIShuPCtQKGEsYykudG9GaXhlZCgyKXx8bj4rUShhLGMp LnRvRml4ZWQoMil8fG48K1AoZSxnKS50b0ZpeGVkKDIpfHxuPitRKGUsZyku dG9GaXhlZCgyKXx8bzwrUChiLGQpLnRvRml4ZWQoMil8fG8+K1EoYixkKS50 b0ZpeGVkKDIpfHxvPCtQKGYsaCkudG9GaXhlZCgyKXx8bz4rUShmLGgpLnRv Rml4ZWQoMikpKXJldHVybnt4OmwseTptfX19fWZ1bmN0aW9uIHEoYSxiLGMp e3ZhciBkPWooYSksZT1qKGIpO2lmKCFsKGQsZSkpcmV0dXJuIGM/MDpbXTtm b3IodmFyIGY9bi5hcHBseSgwLGEpLGc9bi5hcHBseSgwLGIpLGg9fn4oZi84 KSxrPX5+KGcvOCksbT1bXSxvPVtdLHE9e30scj1jPzA6W10scz0wO2grMT5z O3MrKyl7dmFyIHQ9aS5hcHBseSgwLGEuY29uY2F0KHMvaCkpO20ucHVzaCh7 eDp0LngseTp0LnksdDpzL2h9KX1mb3Iocz0wO2srMT5zO3MrKyl0PWkuYXBw bHkoMCxiLmNvbmNhdChzL2spKSxvLnB1c2goe3g6dC54LHk6dC55LHQ6cy9r fSk7Zm9yKHM9MDtoPnM7cysrKWZvcih2YXIgdT0wO2s+dTt1Kyspe3ZhciB2 PW1bc10sdz1tW3MrMV0seD1vW3VdLHk9b1t1KzFdLHo9Uyh3Lngtdi54KTwu MDAxPyJ5IjoieCIsQT1TKHkueC14LngpPC4wMDE/InkiOiJ4IixCPXAodi54 LHYueSx3Lngsdy55LHgueCx4LnkseS54LHkueSk7aWYoQil7aWYocVtCLngu dG9GaXhlZCg0KV09PUIueS50b0ZpeGVkKDQpKWNvbnRpbnVlO3FbQi54LnRv Rml4ZWQoNCldPUIueS50b0ZpeGVkKDQpO3ZhciBDPXYudCtTKChCW3pdLXZb el0pLyh3W3pdLXZbel0pKSoody50LXYudCksRD14LnQrUygoQltBXS14W0Fd KS8oeVtBXS14W0FdKSkqKHkudC14LnQpO0M+PTAmJjE+PUMmJkQ+PTAmJjE+ PUQmJihjP3IrKzpyLnB1c2goe3g6Qi54LHk6Qi55LHQxOkMsdDI6RH0pKX19 cmV0dXJuIHJ9ZnVuY3Rpb24gcihhLGIpe3JldHVybiB0KGEsYil9ZnVuY3Rp b24gcyhhLGIpe3JldHVybiB0KGEsYiwxKX1mdW5jdGlvbiB0KGEsYixjKXth PUUoYSksYj1FKGIpO2Zvcih2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuPWM/ MDpbXSxvPTAscD1hLmxlbmd0aDtwPm87bysrKXt2YXIgcj1hW29dO2lmKCJN Ij09clswXSlkPWg9clsxXSxlPWk9clsyXTtlbHNleyJDIj09clswXT8obD1b ZCxlXS5jb25jYXQoci5zbGljZSgxKSksZD1sWzZdLGU9bFs3XSk6KGw9W2Qs ZSxkLGUsaCxpLGgsaV0sZD1oLGU9aSk7Zm9yKHZhciBzPTAsdD1iLmxlbmd0 aDt0PnM7cysrKXt2YXIgdT1iW3NdO2lmKCJNIj09dVswXSlmPWo9dVsxXSxn PWs9dVsyXTtlbHNleyJDIj09dVswXT8obT1bZixnXS5jb25jYXQodS5zbGlj ZSgxKSksZj1tWzZdLGc9bVs3XSk6KG09W2YsZyxmLGcsaixrLGosa10sZj1q LGc9ayk7dmFyIHY9cShsLG0sYyk7aWYoYyluKz12O2Vsc2V7Zm9yKHZhciB3 PTAseD12Lmxlbmd0aDt4Pnc7dysrKXZbd10uc2VnbWVudDE9byx2W3ddLnNl Z21lbnQyPXMsdlt3XS5iZXoxPWwsdlt3XS5iZXoyPW07bj1uLmNvbmNhdCh2 KX19fX19cmV0dXJuIG59ZnVuY3Rpb24gdShhLGIsYyl7dmFyIGQ9dihhKTty ZXR1cm4gayhkLGIsYykmJnQoYSxbWyJNIixiLGNdLFsiSCIsZC54MisxMF1d LDEpJTI9PTF9ZnVuY3Rpb24gdihhKXt2YXIgYj1jKGEpO2lmKGIuYmJveCly ZXR1cm4gSihiLmJib3gpO2lmKCFhKXJldHVybiBkKCk7YT1FKGEpO2Zvcih2 YXIgZSxmPTAsZz0wLGg9W10saT1bXSxqPTAsaz1hLmxlbmd0aDtrPmo7aisr KWlmKGU9YVtqXSwiTSI9PWVbMF0pZj1lWzFdLGc9ZVsyXSxoLnB1c2goZiks aS5wdXNoKGcpO2Vsc2V7dmFyIGw9RChmLGcsZVsxXSxlWzJdLGVbM10sZVs0 XSxlWzVdLGVbNl0pO2g9aC5jb25jYXQobC5taW4ueCxsLm1heC54KSxpPWku Y29uY2F0KGwubWluLnksbC5tYXgueSksZj1lWzVdLGc9ZVs2XX12YXIgbT1Q LmFwcGx5KDAsaCksbj1QLmFwcGx5KDAsaSksbz1RLmFwcGx5KDAsaCkscD1R LmFwcGx5KDAsaSkscT1kKG0sbixvLW0scC1uKTtyZXR1cm4gYi5iYm94PUoo cSkscX1mdW5jdGlvbiB3KGEsYixjLGQsZil7aWYoZilyZXR1cm5bWyJNIiwr YSsgK2YsYl0sWyJsIixjLTIqZiwwXSxbImEiLGYsZiwwLDAsMSxmLGZdLFsi bCIsMCxkLTIqZl0sWyJhIixmLGYsMCwwLDEsLWYsZl0sWyJsIiwyKmYtYyww XSxbImEiLGYsZiwwLDAsMSwtZiwtZl0sWyJsIiwwLDIqZi1kXSxbImEiLGYs ZiwwLDAsMSxmLC1mXSxbInoiXV07dmFyIGc9W1siTSIsYSxiXSxbImwiLGMs MF0sWyJsIiwwLGRdLFsibCIsLWMsMF0sWyJ6Il1dO3JldHVybiBnLnRvU3Ry aW5nPWUsZ31mdW5jdGlvbiB4KGEsYixjLGQsZil7aWYobnVsbD09ZiYmbnVs bD09ZCYmKGQ9YyksYT0rYSxiPStiLGM9K2MsZD0rZCxudWxsIT1mKXZhciBn PU1hdGguUEkvMTgwLGg9YStjKk1hdGguY29zKC1kKmcpLGk9YStjKk1hdGgu Y29zKC1mKmcpLGo9YitjKk1hdGguc2luKC1kKmcpLGs9YitjKk1hdGguc2lu KC1mKmcpLGw9W1siTSIsaCxqXSxbIkEiLGMsYywwLCsoZi1kPjE4MCksMCxp LGtdXTtlbHNlIGw9W1siTSIsYSxiXSxbIm0iLDAsLWRdLFsiYSIsYyxkLDAs MSwxLDAsMipkXSxbImEiLGMsZCwwLDEsMSwwLC0yKmRdLFsieiJdXTtyZXR1 cm4gbC50b1N0cmluZz1lLGx9ZnVuY3Rpb24geShiKXt2YXIgZD1jKGIpLGc9 U3RyaW5nLnByb3RvdHlwZS50b0xvd2VyQ2FzZTtpZihkLnJlbClyZXR1cm4g ZihkLnJlbCk7YS5pcyhiLCJhcnJheSIpJiZhLmlzKGImJmJbMF0sImFycmF5 Iil8fChiPWEucGFyc2VQYXRoU3RyaW5nKGIpKTt2YXIgaD1bXSxpPTAsaj0w LGs9MCxsPTAsbT0wOyJNIj09YlswXVswXSYmKGk9YlswXVsxXSxqPWJbMF1b Ml0saz1pLGw9aixtKyssaC5wdXNoKFsiTSIsaSxqXSkpO2Zvcih2YXIgbj1t LG89Yi5sZW5ndGg7bz5uO24rKyl7dmFyIHA9aFtuXT1bXSxxPWJbbl07aWYo cVswXSE9Zy5jYWxsKHFbMF0pKXN3aXRjaChwWzBdPWcuY2FsbChxWzBdKSxw WzBdKXtjYXNlImEiOnBbMV09cVsxXSxwWzJdPXFbMl0scFszXT1xWzNdLHBb NF09cVs0XSxwWzVdPXFbNV0scFs2XT0rKHFbNl0taSkudG9GaXhlZCgzKSxw WzddPSsocVs3XS1qKS50b0ZpeGVkKDMpO2JyZWFrO2Nhc2UidiI6cFsxXT0r KHFbMV0taikudG9GaXhlZCgzKTticmVhaztjYXNlIm0iOms9cVsxXSxsPXFb Ml07ZGVmYXVsdDpmb3IodmFyIHI9MSxzPXEubGVuZ3RoO3M+cjtyKyspcFty XT0rKHFbcl0tKHIlMj9pOmopKS50b0ZpeGVkKDMpfWVsc2V7cD1oW25dPVtd LCJtIj09cVswXSYmKGs9cVsxXStpLGw9cVsyXStqKTtmb3IodmFyIHQ9MCx1 PXEubGVuZ3RoO3U+dDt0KyspaFtuXVt0XT1xW3RdfXZhciB2PWhbbl0ubGVu Z3RoO3N3aXRjaChoW25dWzBdKXtjYXNlInoiOmk9ayxqPWw7YnJlYWs7Y2Fz ZSJoIjppKz0raFtuXVt2LTFdO2JyZWFrO2Nhc2UidiI6ais9K2hbbl1bdi0x XTticmVhaztkZWZhdWx0OmkrPStoW25dW3YtMl0sais9K2hbbl1bdi0xXX19 cmV0dXJuIGgudG9TdHJpbmc9ZSxkLnJlbD1mKGgpLGh9ZnVuY3Rpb24geihi KXt2YXIgZD1jKGIpO2lmKGQuYWJzKXJldHVybiBmKGQuYWJzKTtpZihJKGIs ImFycmF5IikmJkkoYiYmYlswXSwiYXJyYXkiKXx8KGI9YS5wYXJzZVBhdGhT dHJpbmcoYikpLCFifHwhYi5sZW5ndGgpcmV0dXJuW1siTSIsMCwwXV07dmFy IGcsaD1bXSxpPTAsaj0wLGs9MCxsPTAsbT0wOyJNIj09YlswXVswXSYmKGk9 K2JbMF1bMV0saj0rYlswXVsyXSxrPWksbD1qLG0rKyxoWzBdPVsiTSIsaSxq XSk7Zm9yKHZhciBuLG8scD0zPT1iLmxlbmd0aCYmIk0iPT1iWzBdWzBdJiYi UiI9PWJbMV1bMF0udG9VcHBlckNhc2UoKSYmIloiPT1iWzJdWzBdLnRvVXBw ZXJDYXNlKCkscT1tLHI9Yi5sZW5ndGg7cj5xO3ErKyl7aWYoaC5wdXNoKG49 W10pLG89YltxXSxnPW9bMF0sZyE9Zy50b1VwcGVyQ2FzZSgpKXN3aXRjaChu WzBdPWcudG9VcHBlckNhc2UoKSxuWzBdKXtjYXNlIkEiOm5bMV09b1sxXSxu WzJdPW9bMl0sblszXT1vWzNdLG5bNF09b1s0XSxuWzVdPW9bNV0sbls2XT0r b1s2XStpLG5bN109K29bN10rajticmVhaztjYXNlIlYiOm5bMV09K29bMV0r ajticmVhaztjYXNlIkgiOm5bMV09K29bMV0raTticmVhaztjYXNlIlIiOmZv cih2YXIgcz1baSxqXS5jb25jYXQoby5zbGljZSgxKSksdD0yLHU9cy5sZW5n dGg7dT50O3QrKylzW3RdPStzW3RdK2ksc1srK3RdPStzW3RdK2o7aC5wb3Ao KSxoPWguY29uY2F0KEcocyxwKSk7YnJlYWs7Y2FzZSJPIjpoLnBvcCgpLHM9 eChpLGosb1sxXSxvWzJdKSxzLnB1c2goc1swXSksaD1oLmNvbmNhdChzKTti cmVhaztjYXNlIlUiOmgucG9wKCksaD1oLmNvbmNhdCh4KGksaixvWzFdLG9b Ml0sb1szXSkpLG49WyJVIl0uY29uY2F0KGhbaC5sZW5ndGgtMV0uc2xpY2Uo LTIpKTticmVhaztjYXNlIk0iOms9K29bMV0raSxsPStvWzJdK2o7ZGVmYXVs dDpmb3IodD0xLHU9by5sZW5ndGg7dT50O3QrKyluW3RdPStvW3RdKyh0JTI/ aTpqKX1lbHNlIGlmKCJSIj09ZylzPVtpLGpdLmNvbmNhdChvLnNsaWNlKDEp KSxoLnBvcCgpLGg9aC5jb25jYXQoRyhzLHApKSxuPVsiUiJdLmNvbmNhdChv LnNsaWNlKC0yKSk7ZWxzZSBpZigiTyI9PWcpaC5wb3AoKSxzPXgoaSxqLG9b MV0sb1syXSkscy5wdXNoKHNbMF0pLGg9aC5jb25jYXQocyk7ZWxzZSBpZigi VSI9PWcpaC5wb3AoKSxoPWguY29uY2F0KHgoaSxqLG9bMV0sb1syXSxvWzNd KSksbj1bIlUiXS5jb25jYXQoaFtoLmxlbmd0aC0xXS5zbGljZSgtMikpO2Vs c2UgZm9yKHZhciB2PTAsdz1vLmxlbmd0aDt3PnY7disrKW5bdl09b1t2XTtp ZihnPWcudG9VcHBlckNhc2UoKSwiTyIhPWcpc3dpdGNoKG5bMF0pe2Nhc2Ui WiI6aT0rayxqPStsO2JyZWFrO2Nhc2UiSCI6aT1uWzFdO2JyZWFrO2Nhc2Ui ViI6aj1uWzFdO2JyZWFrO2Nhc2UiTSI6az1uW24ubGVuZ3RoLTJdLGw9bltu Lmxlbmd0aC0xXTtkZWZhdWx0Omk9bltuLmxlbmd0aC0yXSxqPW5bbi5sZW5n dGgtMV19fXJldHVybiBoLnRvU3RyaW5nPWUsZC5hYnM9ZihoKSxofWZ1bmN0 aW9uIEEoYSxiLGMsZCl7cmV0dXJuW2EsYixjLGQsYyxkXX1mdW5jdGlvbiBC KGEsYixjLGQsZSxmKXt2YXIgZz0xLzMsaD0yLzM7cmV0dXJuW2cqYStoKmMs ZypiK2gqZCxnKmUraCpjLGcqZitoKmQsZSxmXX1mdW5jdGlvbiBDKGIsYyxk LGUsZixnLGgsaSxqLGspe3ZhciBsLG09MTIwKk8vMTgwLG49Ty8xODAqKCtm fHwwKSxvPVtdLHA9YS5fLmNhY2hlcihmdW5jdGlvbihhLGIsYyl7dmFyIGQ9 YSpOLmNvcyhjKS1iKk4uc2luKGMpLGU9YSpOLnNpbihjKStiKk4uY29zKGMp O3JldHVybnt4OmQseTplfX0pO2lmKGspeT1rWzBdLHo9a1sxXSx3PWtbMl0s eD1rWzNdO2Vsc2V7bD1wKGIsYywtbiksYj1sLngsYz1sLnksbD1wKGksaiwt biksaT1sLngsaj1sLnk7dmFyIHE9KE4uY29zKE8vMTgwKmYpLE4uc2luKE8v MTgwKmYpLChiLWkpLzIpLHI9KGMtaikvMixzPXEqcS8oZCpkKStyKnIvKGUq ZSk7cz4xJiYocz1OLnNxcnQocyksZD1zKmQsZT1zKmUpO3ZhciB0PWQqZCx1 PWUqZSx2PShnPT1oPy0xOjEpKk4uc3FydChTKCh0KnUtdCpyKnItdSpxKnEp Lyh0KnIqcit1KnEqcSkpKSx3PXYqZCpyL2UrKGIraSkvMix4PXYqLWUqcS9k KyhjK2opLzIseT1OLmFzaW4oKChjLXgpL2UpLnRvRml4ZWQoOSkpLHo9Ti5h c2luKCgoai14KS9lKS50b0ZpeGVkKDkpKTt5PXc+Yj9PLXk6eSx6PXc+aT9P LXo6eiwwPnkmJih5PTIqTyt5KSwwPnomJih6PTIqTyt6KSxoJiZ5PnomJih5 LT0yKk8pLCFoJiZ6PnkmJih6LT0yKk8pfXZhciBBPXoteTtpZihTKEEpPm0p e3ZhciBCPXosRD1pLEU9ajt6PXkrbSooaCYmej55PzE6LTEpLGk9dytkKk4u Y29zKHopLGo9eCtlKk4uc2luKHopLG89QyhpLGosZCxlLGYsMCxoLEQsRSxb eixCLHcseF0pfUE9ei15O3ZhciBGPU4uY29zKHkpLEc9Ti5zaW4oeSksSD1O LmNvcyh6KSxJPU4uc2luKHopLEo9Ti50YW4oQS80KSxLPTQvMypkKkosTD00 LzMqZSpKLE09W2IsY10sUD1bYitLKkcsYy1MKkZdLFE9W2krSypJLGotTCpI XSxSPVtpLGpdO2lmKFBbMF09MipNWzBdLVBbMF0sUFsxXT0yKk1bMV0tUFsx XSxrKXJldHVybltQLFEsUl0uY29uY2F0KG8pO289W1AsUSxSXS5jb25jYXQo bykuam9pbigpLnNwbGl0KCIsIik7Zm9yKHZhciBUPVtdLFU9MCxWPW8ubGVu Z3RoO1Y+VTtVKyspVFtVXT1VJTI/cChvW1UtMV0sb1tVXSxuKS55OnAob1tV XSxvW1UrMV0sbikueDtyZXR1cm4gVH1mdW5jdGlvbiBEKGEsYixjLGQsZSxm LGcsaCl7Zm9yKHZhciBpLGosayxsLG0sbixvLHAscT1bXSxyPVtbXSxbXV0s cz0wOzI+czsrK3MpaWYoMD09cz8oaj02KmEtMTIqYys2KmUsaT0tMyphKzkq Yy05KmUrMypnLGs9MypjLTMqYSk6KGo9NipiLTEyKmQrNipmLGk9LTMqYis5 KmQtOSpmKzMqaCxrPTMqZC0zKmIpLFMoaSk8MWUtMTIpe2lmKFMoaik8MWUt MTIpY29udGludWU7bD0tay9qLGw+MCYmMT5sJiZxLnB1c2gobCl9ZWxzZSBv PWoqai00KmsqaSxwPU4uc3FydChvKSwwPm98fChtPSgtaitwKS8oMippKSxt PjAmJjE+bSYmcS5wdXNoKG0pLG49KC1qLXApLygyKmkpLG4+MCYmMT5uJiZx LnB1c2gobikpO2Zvcih2YXIgdCx1PXEubGVuZ3RoLHY9dTt1LS07KWw9cVt1 XSx0PTEtbCxyWzBdW3VdPXQqdCp0KmErMyp0KnQqbCpjKzMqdCpsKmwqZSts KmwqbCpnLHJbMV1bdV09dCp0KnQqYiszKnQqdCpsKmQrMyp0KmwqbCpmK2wq bCpsKmg7cmV0dXJuIHJbMF1bdl09YSxyWzFdW3ZdPWIsclswXVt2KzFdPWcs clsxXVt2KzFdPWgsclswXS5sZW5ndGg9clsxXS5sZW5ndGg9disyLHttaW46 e3g6UC5hcHBseSgwLHJbMF0pLHk6UC5hcHBseSgwLHJbMV0pfSxtYXg6e3g6 US5hcHBseSgwLHJbMF0pLHk6US5hcHBseSgwLHJbMV0pfX19ZnVuY3Rpb24g RShhLGIpe3ZhciBkPSFiJiZjKGEpO2lmKCFiJiZkLmN1cnZlKXJldHVybiBm KGQuY3VydmUpO2Zvcih2YXIgZT16KGEpLGc9YiYmeihiKSxoPXt4OjAseTow LGJ4OjAsYnk6MCxYOjAsWTowLHF4Om51bGwscXk6bnVsbH0saT17eDowLHk6 MCxieDowLGJ5OjAsWDowLFk6MCxxeDpudWxsLHF5Om51bGx9LGo9KGZ1bmN0 aW9uKGEsYixjKXt2YXIgZCxlO2lmKCFhKXJldHVyblsiQyIsYi54LGIueSxi LngsYi55LGIueCxiLnldO3N3aXRjaCghKGFbMF1pbntUOjEsUToxfSkmJihi LnF4PWIucXk9bnVsbCksYVswXSl7Y2FzZSJNIjpiLlg9YVsxXSxiLlk9YVsy XTticmVhaztjYXNlIkEiOmE9WyJDIl0uY29uY2F0KEMuYXBwbHkoMCxbYi54 LGIueV0uY29uY2F0KGEuc2xpY2UoMSkpKSk7YnJlYWs7Y2FzZSJTIjoiQyI9 PWN8fCJTIj09Yz8oZD0yKmIueC1iLmJ4LGU9MipiLnktYi5ieSk6KGQ9Yi54 LGU9Yi55KSxhPVsiQyIsZCxlXS5jb25jYXQoYS5zbGljZSgxKSk7YnJlYWs7 Y2FzZSJUIjoiUSI9PWN8fCJUIj09Yz8oYi5xeD0yKmIueC1iLnF4LGIucXk9 MipiLnktYi5xeSk6KGIucXg9Yi54LGIucXk9Yi55KSxhPVsiQyJdLmNvbmNh dChCKGIueCxiLnksYi5xeCxiLnF5LGFbMV0sYVsyXSkpO2JyZWFrO2Nhc2Ui USI6Yi5xeD1hWzFdLGIucXk9YVsyXSxhPVsiQyJdLmNvbmNhdChCKGIueCxi LnksYVsxXSxhWzJdLGFbM10sYVs0XSkpO2JyZWFrO2Nhc2UiTCI6YT1bIkMi XS5jb25jYXQoQShiLngsYi55LGFbMV0sYVsyXSkpO2JyZWFrO2Nhc2UiSCI6 YT1bIkMiXS5jb25jYXQoQShiLngsYi55LGFbMV0sYi55KSk7YnJlYWs7Y2Fz ZSJWIjphPVsiQyJdLmNvbmNhdChBKGIueCxiLnksYi54LGFbMV0pKTticmVh aztjYXNlIloiOmE9WyJDIl0uY29uY2F0KEEoYi54LGIueSxiLlgsYi5ZKSl9 cmV0dXJuIGF9KSxrPWZ1bmN0aW9uKGEsYil7aWYoYVtiXS5sZW5ndGg+Nyl7 YVtiXS5zaGlmdCgpO2Zvcih2YXIgYz1hW2JdO2MubGVuZ3RoOyltW2JdPSJB IixnJiYobltiXT0iQSIpLGEuc3BsaWNlKGIrKywwLFsiQyJdLmNvbmNhdChj LnNwbGljZSgwLDYpKSk7YS5zcGxpY2UoYiwxKSxyPVEoZS5sZW5ndGgsZyYm Zy5sZW5ndGh8fDApfX0sbD1mdW5jdGlvbihhLGIsYyxkLGYpe2EmJmImJiJN Ij09YVtmXVswXSYmIk0iIT1iW2ZdWzBdJiYoYi5zcGxpY2UoZiwwLFsiTSIs ZC54LGQueV0pLGMuYng9MCxjLmJ5PTAsYy54PWFbZl1bMV0sYy55PWFbZl1b Ml0scj1RKGUubGVuZ3RoLGcmJmcubGVuZ3RofHwwKSl9LG09W10sbj1bXSxv PSIiLHA9IiIscT0wLHI9UShlLmxlbmd0aCxnJiZnLmxlbmd0aHx8MCk7cj5x O3ErKyl7ZVtxXSYmKG89ZVtxXVswXSksIkMiIT1vJiYobVtxXT1vLHEmJihw PW1bcS0xXSkpLGVbcV09aihlW3FdLGgscCksIkEiIT1tW3FdJiYiQyI9PW8m JihtW3FdPSJDIiksayhlLHEpLGcmJihnW3FdJiYobz1nW3FdWzBdKSwiQyIh PW8mJihuW3FdPW8scSYmKHA9bltxLTFdKSksZ1txXT1qKGdbcV0saSxwKSwi QSIhPW5bcV0mJiJDIj09byYmKG5bcV09IkMiKSxrKGcscSkpLGwoZSxnLGgs aSxxKSxsKGcsZSxpLGgscSk7dmFyIHM9ZVtxXSx0PWcmJmdbcV0sdT1zLmxl bmd0aCx2PWcmJnQubGVuZ3RoO2gueD1zW3UtMl0saC55PXNbdS0xXSxoLmJ4 PU0oc1t1LTRdKXx8aC54LGguYnk9TShzW3UtM10pfHxoLnksaS5ieD1nJiYo TSh0W3YtNF0pfHxpLngpLGkuYnk9ZyYmKE0odFt2LTNdKXx8aS55KSxpLng9 ZyYmdFt2LTJdLGkueT1nJiZ0W3YtMV19cmV0dXJuIGd8fChkLmN1cnZlPWYo ZSkpLGc/W2UsZ106ZX1mdW5jdGlvbiBGKGEsYil7aWYoIWIpcmV0dXJuIGE7 dmFyIGMsZCxlLGYsZyxoLGk7Zm9yKGE9RShhKSxlPTAsZz1hLmxlbmd0aDtn PmU7ZSsrKWZvcihpPWFbZV0sZj0xLGg9aS5sZW5ndGg7aD5mO2YrPTIpYz1i LngoaVtmXSxpW2YrMV0pLGQ9Yi55KGlbZl0saVtmKzFdKSxpW2ZdPWMsaVtm KzFdPWQ7cmV0dXJuIGF9ZnVuY3Rpb24gRyhhLGIpe2Zvcih2YXIgYz1bXSxk PTAsZT1hLmxlbmd0aDtlLTIqIWI+ZDtkKz0yKXt2YXIgZj1be3g6K2FbZC0y XSx5OithW2QtMV19LHt4OithW2RdLHk6K2FbZCsxXX0se3g6K2FbZCsyXSx5 OithW2QrM119LHt4OithW2QrNF0seTorYVtkKzVdfV07Yj9kP2UtND09ZD9m WzNdPXt4OithWzBdLHk6K2FbMV19OmUtMj09ZCYmKGZbMl09e3g6K2FbMF0s eTorYVsxXX0sZlszXT17eDorYVsyXSx5OithWzNdfSk6ZlswXT17eDorYVtl LTJdLHk6K2FbZS0xXX06ZS00PT1kP2ZbM109ZlsyXTpkfHwoZlswXT17eDor YVtkXSx5OithW2QrMV19KSxjLnB1c2goWyJDIiwoLWZbMF0ueCs2KmZbMV0u eCtmWzJdLngpLzYsKC1mWzBdLnkrNipmWzFdLnkrZlsyXS55KS82LChmWzFd LngrNipmWzJdLngtZlszXS54KS82LChmWzFdLnkrNipmWzJdLnktZlszXS55 KS82LGZbMl0ueCxmWzJdLnldKX1yZXR1cm4gY312YXIgSD1iLnByb3RvdHlw ZSxJPWEuaXMsSj1hLl8uY2xvbmUsSz0iaGFzT3duUHJvcGVydHkiLEw9Lyw/ KFthLXpdKSw/L2dpLE09cGFyc2VGbG9hdCxOPU1hdGgsTz1OLlBJLFA9Ti5t aW4sUT1OLm1heCxSPU4ucG93LFM9Ti5hYnMsVD1oKDEpLFU9aCgpLFY9aCgw LDEpLFc9YS5fdW5pdDJweCxYPXtwYXRoOmZ1bmN0aW9uKGEpe3JldHVybiBh LmF0dHIoInBhdGgiKX0sY2lyY2xlOmZ1bmN0aW9uKGEpe3ZhciBiPVcoYSk7 cmV0dXJuIHgoYi5jeCxiLmN5LGIucil9LGVsbGlwc2U6ZnVuY3Rpb24oYSl7 dmFyIGI9VyhhKTtyZXR1cm4geChiLmN4fHwwLGIuY3l8fDAsYi5yeCxiLnJ5 KX0scmVjdDpmdW5jdGlvbihhKXt2YXIgYj1XKGEpO3JldHVybiB3KGIueHx8 MCxiLnl8fDAsYi53aWR0aCxiLmhlaWdodCxiLnJ4LGIucnkpfSxpbWFnZTpm dW5jdGlvbihhKXt2YXIgYj1XKGEpO3JldHVybiB3KGIueHx8MCxiLnl8fDAs Yi53aWR0aCxiLmhlaWdodCl9LGxpbmU6ZnVuY3Rpb24oYSl7cmV0dXJuIk0i K1thLmF0dHIoIngxIil8fDAsYS5hdHRyKCJ5MSIpfHwwLGEuYXR0cigieDIi KSxhLmF0dHIoInkyIildfSxwb2x5bGluZTpmdW5jdGlvbihhKXtyZXR1cm4i TSIrYS5hdHRyKCJwb2ludHMiKX0scG9seWdvbjpmdW5jdGlvbihhKXtyZXR1 cm4iTSIrYS5hdHRyKCJwb2ludHMiKSsieiJ9LGRlZmx0OmZ1bmN0aW9uKGEp e3ZhciBiPWEubm9kZS5nZXRCQm94KCk7cmV0dXJuIHcoYi54LGIueSxiLndp ZHRoLGIuaGVpZ2h0KX19O2EucGF0aD1jLGEucGF0aC5nZXRUb3RhbExlbmd0 aD1ULGEucGF0aC5nZXRQb2ludEF0TGVuZ3RoPVUsYS5wYXRoLmdldFN1YnBh dGg9ZnVuY3Rpb24oYSxiLGMpe2lmKHRoaXMuZ2V0VG90YWxMZW5ndGgoYSkt YzwxZS02KXJldHVybiBWKGEsYikuZW5kO3ZhciBkPVYoYSxjLDEpO3JldHVy biBiP1YoZCxiKS5lbmQ6ZH0sSC5nZXRUb3RhbExlbmd0aD1mdW5jdGlvbigp e3JldHVybiB0aGlzLm5vZGUuZ2V0VG90YWxMZW5ndGg/dGhpcy5ub2RlLmdl dFRvdGFsTGVuZ3RoKCk6dm9pZCAwfSxILmdldFBvaW50QXRMZW5ndGg9ZnVu Y3Rpb24oYSl7cmV0dXJuIFUodGhpcy5hdHRyKCJkIiksYSl9LEguZ2V0U3Vi cGF0aD1mdW5jdGlvbihiLGMpe3JldHVybiBhLnBhdGguZ2V0U3VicGF0aCh0 aGlzLmF0dHIoImQiKSxiLGMpfSxhLl8uYm94PWQsYS5wYXRoLmZpbmREb3Rz QXRTZWdtZW50PWksYS5wYXRoLmJlemllckJCb3g9aixhLnBhdGguaXNQb2lu dEluc2lkZUJCb3g9ayxhLmNsb3Nlc3Q9ZnVuY3Rpb24oYixjLGUsZil7Zm9y KHZhciBnPTEwMCxoPWQoYi1nLzIsYy1nLzIsZyxnKSxpPVtdLGo9ZVswXS5o YXNPd25Qcm9wZXJ0eSgieCIpP2Z1bmN0aW9uKGEpe3JldHVybnt4OmVbYV0u eCx5OmVbYV0ueX19OmZ1bmN0aW9uKGEpe3JldHVybnt4OmVbYV0seTpmW2Fd fX0sbD0wOzFlNj49ZyYmIWw7KXtmb3IodmFyIG09MCxuPWUubGVuZ3RoO24+ bTttKyspe3ZhciBvPWoobSk7aWYoayhoLG8ueCxvLnkpKXtsKyssaS5wdXNo KG8pO2JyZWFrfX1sfHwoZyo9MixoPWQoYi1nLzIsYy1nLzIsZyxnKSl9aWYo MWU2IT1nKXt2YXIgcCxxPTEvMDtmb3IobT0wLG49aS5sZW5ndGg7bj5tO20r Kyl7dmFyIHI9YS5sZW4oYixjLGlbbV0ueCxpW21dLnkpO3E+ciYmKHE9cixp W21dLmxlbj1yLHA9aVttXSl9cmV0dXJuIHB9fSxhLnBhdGguaXNCQm94SW50 ZXJzZWN0PWwsYS5wYXRoLmludGVyc2VjdGlvbj1yLGEucGF0aC5pbnRlcnNl Y3Rpb25OdW1iZXI9cyxhLnBhdGguaXNQb2ludEluc2lkZT11LGEucGF0aC5n ZXRCQm94PXYsYS5wYXRoLmdldD1YLGEucGF0aC50b1JlbGF0aXZlPXksYS5w YXRoLnRvQWJzb2x1dGU9eixhLnBhdGgudG9DdWJpYz1FLGEucGF0aC5tYXA9 RixhLnBhdGgudG9TdHJpbmc9ZSxhLnBhdGguY2xvbmU9Zn0pLGQucGx1Z2lu KGZ1bmN0aW9uKGEpe3ZhciBkPU1hdGgubWF4LGU9TWF0aC5taW4sZj1mdW5j dGlvbihhKXtpZih0aGlzLml0ZW1zPVtdLHRoaXMuYmluZGluZ3M9e30sdGhp cy5sZW5ndGg9MCx0aGlzLnR5cGU9InNldCIsYSlmb3IodmFyIGI9MCxjPWEu bGVuZ3RoO2M+YjtiKyspYVtiXSYmKHRoaXNbdGhpcy5pdGVtcy5sZW5ndGhd PXRoaXMuaXRlbXNbdGhpcy5pdGVtcy5sZW5ndGhdPWFbYl0sdGhpcy5sZW5n dGgrKyl9LGc9Zi5wcm90b3R5cGU7Zy5wdXNoPWZ1bmN0aW9uKCl7Zm9yKHZh ciBhLGIsYz0wLGQ9YXJndW1lbnRzLmxlbmd0aDtkPmM7YysrKWE9YXJndW1l bnRzW2NdLGEmJihiPXRoaXMuaXRlbXMubGVuZ3RoLHRoaXNbYl09dGhpcy5p dGVtc1tiXT1hLHRoaXMubGVuZ3RoKyspO3JldHVybiB0aGlzfSxnLnBvcD1m dW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aCYmZGVsZXRlIHRoaXNbdGhp cy5sZW5ndGgtLV0sdGhpcy5pdGVtcy5wb3AoKX0sZy5mb3JFYWNoPWZ1bmN0 aW9uKGEsYil7Zm9yKHZhciBjPTAsZD10aGlzLml0ZW1zLmxlbmd0aDtkPmM7 YysrKWlmKGEuY2FsbChiLHRoaXMuaXRlbXNbY10sYyk9PT0hMSlyZXR1cm4g dGhpcztyZXR1cm4gdGhpc30sZy5hbmltYXRlPWZ1bmN0aW9uKGQsZSxmLGcp eyJmdW5jdGlvbiIhPXR5cGVvZiBmfHxmLmxlbmd0aHx8KGc9ZixmPWMubGlu ZWFyKSxkIGluc3RhbmNlb2YgYS5fLkFuaW1hdGlvbiYmKGc9ZC5jYWxsYmFj ayxmPWQuZWFzaW5nLGU9Zi5kdXIsZD1kLmF0dHIpO3ZhciBoPWFyZ3VtZW50 cztpZihhLmlzKGQsImFycmF5IikmJmEuaXMoaFtoLmxlbmd0aC0xXSwiYXJy YXkiKSl2YXIgaT0hMDt2YXIgaixrPWZ1bmN0aW9uKCl7aj90aGlzLmI9ajpq PXRoaXMuYn0sbD0wLG09dGhpcyxuPWcmJmZ1bmN0aW9uKCl7KytsPT1tLmxl bmd0aCYmZy5jYWxsKHRoaXMpCit9O3JldHVybiB0aGlzLmZvckVhY2goZnVu Y3Rpb24oYSxjKXtiLm9uY2UoInNuYXAuYW5pbWNyZWF0ZWQuIithLmlkLGsp LGk/aFtjXSYmYS5hbmltYXRlLmFwcGx5KGEsaFtjXSk6YS5hbmltYXRlKGQs ZSxmLG4pfSl9LGcucmVtb3ZlPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0 aDspdGhpcy5wb3AoKS5yZW1vdmUoKTtyZXR1cm4gdGhpc30sZy5iaW5kPWZ1 bmN0aW9uKGEsYixjKXt2YXIgZD17fTtpZigiZnVuY3Rpb24iPT10eXBlb2Yg Yil0aGlzLmJpbmRpbmdzW2FdPWI7ZWxzZXt2YXIgZT1jfHxhO3RoaXMuYmlu ZGluZ3NbYV09ZnVuY3Rpb24oYSl7ZFtlXT1hLGIuYXR0cihkKX19cmV0dXJu IHRoaXN9LGcuYXR0cj1mdW5jdGlvbihhKXt2YXIgYj17fTtmb3IodmFyIGMg aW4gYSl0aGlzLmJpbmRpbmdzW2NdP3RoaXMuYmluZGluZ3NbY10oYVtjXSk6 YltjXT1hW2NdO2Zvcih2YXIgZD0wLGU9dGhpcy5pdGVtcy5sZW5ndGg7ZT5k O2QrKyl0aGlzLml0ZW1zW2RdLmF0dHIoYik7cmV0dXJuIHRoaXN9LGcuY2xl YXI9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoOyl0aGlzLnBvcCgpfSxn LnNwbGljZT1mdW5jdGlvbihhLGIpe2E9MD5hP2QodGhpcy5sZW5ndGgrYSww KTphLGI9ZCgwLGUodGhpcy5sZW5ndGgtYSxiKSk7dmFyIGMsZz1bXSxoPVtd LGk9W107Zm9yKGM9MjtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKWkucHVzaChh cmd1bWVudHNbY10pO2ZvcihjPTA7Yj5jO2MrKyloLnB1c2godGhpc1thK2Nd KTtmb3IoO2M8dGhpcy5sZW5ndGgtYTtjKyspZy5wdXNoKHRoaXNbYStjXSk7 dmFyIGo9aS5sZW5ndGg7Zm9yKGM9MDtjPGorZy5sZW5ndGg7YysrKXRoaXMu aXRlbXNbYStjXT10aGlzW2ErY109aj5jP2lbY106Z1tjLWpdO2ZvcihjPXRo aXMuaXRlbXMubGVuZ3RoPXRoaXMubGVuZ3RoLT1iLWo7dGhpc1tjXTspZGVs ZXRlIHRoaXNbYysrXTtyZXR1cm4gbmV3IGYoaCl9LGcuZXhjbHVkZT1mdW5j dGlvbihhKXtmb3IodmFyIGI9MCxjPXRoaXMubGVuZ3RoO2M+YjtiKyspaWYo dGhpc1tiXT09YSlyZXR1cm4gdGhpcy5zcGxpY2UoYiwxKSwhMDtyZXR1cm4h MX0sZy5pbnNlcnRBZnRlcj1mdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5p dGVtcy5sZW5ndGg7Yi0tOyl0aGlzLml0ZW1zW2JdLmluc2VydEFmdGVyKGEp O3JldHVybiB0aGlzfSxnLmdldEJCb3g9ZnVuY3Rpb24oKXtmb3IodmFyIGE9 W10sYj1bXSxjPVtdLGY9W10sZz10aGlzLml0ZW1zLmxlbmd0aDtnLS07KWlm KCF0aGlzLml0ZW1zW2ddLnJlbW92ZWQpe3ZhciBoPXRoaXMuaXRlbXNbZ10u Z2V0QkJveCgpO2EucHVzaChoLngpLGIucHVzaChoLnkpLGMucHVzaChoLngr aC53aWR0aCksZi5wdXNoKGgueStoLmhlaWdodCl9cmV0dXJuIGE9ZS5hcHBs eSgwLGEpLGI9ZS5hcHBseSgwLGIpLGM9ZC5hcHBseSgwLGMpLGY9ZC5hcHBs eSgwLGYpLHt4OmEseTpiLHgyOmMseTI6Zix3aWR0aDpjLWEsaGVpZ2h0OmYt YixjeDphKyhjLWEpLzIsY3k6YisoZi1iKS8yfX0sZy5jbG9uZT1mdW5jdGlv bihhKXthPW5ldyBmO2Zvcih2YXIgYj0wLGM9dGhpcy5pdGVtcy5sZW5ndGg7 Yz5iO2IrKylhLnB1c2godGhpcy5pdGVtc1tiXS5jbG9uZSgpKTtyZXR1cm4g YX0sZy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJTbmFw4oCYcyBzZXQi fSxnLnR5cGU9InNldCIsYS5TZXQ9ZixhLnNldD1mdW5jdGlvbigpe3ZhciBh PW5ldyBmO3JldHVybiBhcmd1bWVudHMubGVuZ3RoJiZhLnB1c2guYXBwbHko YSxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCkpLGF9 fSksZC5wbHVnaW4oZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiBkKGEpe3ZhciBi PWFbMF07c3dpdGNoKGIudG9Mb3dlckNhc2UoKSl7Y2FzZSJ0IjpyZXR1cm5b YiwwLDBdO2Nhc2UibSI6cmV0dXJuW2IsMSwwLDAsMSwwLDBdO2Nhc2UiciI6 cmV0dXJuIDQ9PWEubGVuZ3RoP1tiLDAsYVsyXSxhWzNdXTpbYiwwXTtjYXNl InMiOnJldHVybiA1PT1hLmxlbmd0aD9bYiwxLDEsYVszXSxhWzRdXTozPT1h Lmxlbmd0aD9bYiwxLDFdOltiLDFdfX1mdW5jdGlvbiBlKGIsYyxlKXtjPXAo YykucmVwbGFjZSgvXC57M318XHUyMDI2L2csYiksYj1hLnBhcnNlVHJhbnNm b3JtU3RyaW5nKGIpfHxbXSxjPWEucGFyc2VUcmFuc2Zvcm1TdHJpbmcoYyl8 fFtdO2Zvcih2YXIgZixnLGgsaSxsPU1hdGgubWF4KGIubGVuZ3RoLGMubGVu Z3RoKSxtPVtdLG49W10sbz0wO2w+bztvKyspe2lmKGg9YltvXXx8ZChjW29d KSxpPWNbb118fGQoaCksaFswXSE9aVswXXx8InIiPT1oWzBdLnRvTG93ZXJD YXNlKCkmJihoWzJdIT1pWzJdfHxoWzNdIT1pWzNdKXx8InMiPT1oWzBdLnRv TG93ZXJDYXNlKCkmJihoWzNdIT1pWzNdfHxoWzRdIT1pWzRdKSl7Yj1hLl8u dHJhbnNmb3JtMm1hdHJpeChiLGUoKSksYz1hLl8udHJhbnNmb3JtMm1hdHJp eChjLGUoKSksbT1bWyJtIixiLmEsYi5iLGIuYyxiLmQsYi5lLGIuZl1dLG49 W1sibSIsYy5hLGMuYixjLmMsYy5kLGMuZSxjLmZdXTticmVha31mb3IobVtv XT1bXSxuW29dPVtdLGY9MCxnPU1hdGgubWF4KGgubGVuZ3RoLGkubGVuZ3Ro KTtnPmY7ZisrKWYgaW4gaCYmKG1bb11bZl09aFtmXSksZiBpbiBpJiYobltv XVtmXT1pW2ZdKX1yZXR1cm57ZnJvbTprKG0pLHRvOmsobiksZjpqKG0pfX1m dW5jdGlvbiBmKGEpe3JldHVybiBhfWZ1bmN0aW9uIGcoYSl7cmV0dXJuIGZ1 bmN0aW9uKGIpe3JldHVybitiLnRvRml4ZWQoMykrYX19ZnVuY3Rpb24gaChh KXtyZXR1cm4gYS5qb2luKCIgIil9ZnVuY3Rpb24gaShiKXtyZXR1cm4gYS5y Z2IoYlswXSxiWzFdLGJbMl0pfWZ1bmN0aW9uIGooYSl7dmFyIGIsYyxkLGUs ZixnLGg9MCxpPVtdO2ZvcihiPTAsYz1hLmxlbmd0aDtjPmI7YisrKXtmb3Io Zj0iWyIsZz1bJyInK2FbYl1bMF0rJyInXSxkPTEsZT1hW2JdLmxlbmd0aDtl PmQ7ZCsrKWdbZF09InZhbFsiK2grKyArIl0iO2YrPWcrIl0iLGlbYl09Zn1y ZXR1cm4gRnVuY3Rpb24oInZhbCIsInJldHVybiBTbmFwLnBhdGgudG9TdHJp bmcuY2FsbChbIitpKyJdKSIpfWZ1bmN0aW9uIGsoYSl7Zm9yKHZhciBiPVtd LGM9MCxkPWEubGVuZ3RoO2Q+YztjKyspZm9yKHZhciBlPTEsZj1hW2NdLmxl bmd0aDtmPmU7ZSsrKWIucHVzaChhW2NdW2VdKTtyZXR1cm4gYn1mdW5jdGlv biBsKGEpe3JldHVybiBpc0Zpbml0ZShwYXJzZUZsb2F0KGEpKX1mdW5jdGlv biBtKGIsYyl7cmV0dXJuIGEuaXMoYiwiYXJyYXkiKSYmYS5pcyhjLCJhcnJh eSIpP2IudG9TdHJpbmcoKT09Yy50b1N0cmluZygpOiExfXZhciBuPXt9LG89 L1thLXpdKyQvaSxwPVN0cmluZztuLnN0cm9rZT1uLmZpbGw9ImNvbG91ciIs Yy5wcm90b3R5cGUuZXF1YWw9ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYigic25h cC51dGlsLmVxdWFsIix0aGlzLGEsYykuZmlyc3REZWZpbmVkKCl9LGIub24o InNuYXAudXRpbC5lcXVhbCIsZnVuY3Rpb24oYixjKXt2YXIgZCxxLHI9cCh0 aGlzLmF0dHIoYil8fCIiKSxzPXRoaXM7aWYobChyKSYmbChjKSlyZXR1cm57 ZnJvbTpwYXJzZUZsb2F0KHIpLHRvOnBhcnNlRmxvYXQoYyksZjpmfTtpZigi Y29sb3VyIj09bltiXSlyZXR1cm4gZD1hLmNvbG9yKHIpLHE9YS5jb2xvcihj KSx7ZnJvbTpbZC5yLGQuZyxkLmIsZC5vcGFjaXR5XSx0bzpbcS5yLHEuZyxx LmIscS5vcGFjaXR5XSxmOml9O2lmKCJ2aWV3Qm94Ij09YilyZXR1cm4gZD10 aGlzLmF0dHIoYikudmIuc3BsaXQoIiAiKS5tYXAoTnVtYmVyKSxxPWMuc3Bs aXQoIiAiKS5tYXAoTnVtYmVyKSx7ZnJvbTpkLHRvOnEsZjpofTtpZigidHJh bnNmb3JtIj09Ynx8ImdyYWRpZW50VHJhbnNmb3JtIj09Ynx8InBhdHRlcm5U cmFuc2Zvcm0iPT1iKXJldHVybiBjIGluc3RhbmNlb2YgYS5NYXRyaXgmJihj PWMudG9UcmFuc2Zvcm1TdHJpbmcoKSksYS5fLnJnVHJhbnNmb3JtLnRlc3Qo Yyl8fChjPWEuXy5zdmdUcmFuc2Zvcm0yc3RyaW5nKGMpKSxlKHIsYyxmdW5j dGlvbigpe3JldHVybiBzLmdldEJCb3goMSl9KTtpZigiZCI9PWJ8fCJwYXRo Ij09YilyZXR1cm4gZD1hLnBhdGgudG9DdWJpYyhyLGMpLHtmcm9tOmsoZFsw XSksdG86ayhkWzFdKSxmOmooZFswXSl9O2lmKCJwb2ludHMiPT1iKXJldHVy biBkPXAocikuc3BsaXQoYS5fLnNlcGFyYXRvcikscT1wKGMpLnNwbGl0KGEu Xy5zZXBhcmF0b3IpLHtmcm9tOmQsdG86cSxmOmZ1bmN0aW9uKGEpe3JldHVy biBhfX07dmFyIHQ9ci5tYXRjaChvKSx1PXAoYykubWF0Y2gobyk7cmV0dXJu IHQmJm0odCx1KT97ZnJvbTpwYXJzZUZsb2F0KHIpLHRvOnBhcnNlRmxvYXQo YyksZjpnKHQpfTp7ZnJvbTp0aGlzLmFzUFgoYiksdG86dGhpcy5hc1BYKGIs YyksZjpmfX0pfSksZC5wbHVnaW4oZnVuY3Rpb24oYSxjLGQsZSl7Zm9yKHZh ciBmPWMucHJvdG90eXBlLGc9Imhhc093blByb3BlcnR5IixoPSgiY3JlYXRl VG91Y2giaW4gZS5kb2MpLGk9WyJjbGljayIsImRibGNsaWNrIiwibW91c2Vk b3duIiwibW91c2Vtb3ZlIiwibW91c2VvdXQiLCJtb3VzZW92ZXIiLCJtb3Vz ZXVwIiwidG91Y2hzdGFydCIsInRvdWNobW92ZSIsInRvdWNoZW5kIiwidG91 Y2hjYW5jZWwiXSxqPXttb3VzZWRvd246InRvdWNoc3RhcnQiLG1vdXNlbW92 ZToidG91Y2htb3ZlIixtb3VzZXVwOiJ0b3VjaGVuZCJ9LGs9KGZ1bmN0aW9u KGEsYil7dmFyIGM9InkiPT1hPyJzY3JvbGxUb3AiOiJzY3JvbGxMZWZ0Iixk PWImJmIubm9kZT9iLm5vZGUub3duZXJEb2N1bWVudDplLmRvYztyZXR1cm4g ZFtjIGluIGQuZG9jdW1lbnRFbGVtZW50PyJkb2N1bWVudEVsZW1lbnQiOiJi b2R5Il1bY119KSxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3JpZ2luYWxF dmVudC5wcmV2ZW50RGVmYXVsdCgpfSxtPWZ1bmN0aW9uKCl7cmV0dXJuIHRo aXMub3JpZ2luYWxFdmVudC5zdG9wUHJvcGFnYXRpb24oKX0sbj1mdW5jdGlv bihhLGIsYyxkKXt2YXIgZT1oJiZqW2JdP2pbYl06YixmPWZ1bmN0aW9uKGUp e3ZhciBmPWsoInkiLGQpLGk9aygieCIsZCk7aWYoaCYmaltnXShiKSlmb3Io dmFyIG49MCxvPWUudGFyZ2V0VG91Y2hlcyYmZS50YXJnZXRUb3VjaGVzLmxl bmd0aDtvPm47bisrKWlmKGUudGFyZ2V0VG91Y2hlc1tuXS50YXJnZXQ9PWF8 fGEuY29udGFpbnMoZS50YXJnZXRUb3VjaGVzW25dLnRhcmdldCkpe3ZhciBw PWU7ZT1lLnRhcmdldFRvdWNoZXNbbl0sZS5vcmlnaW5hbEV2ZW50PXAsZS5w cmV2ZW50RGVmYXVsdD1sLGUuc3RvcFByb3BhZ2F0aW9uPW07YnJlYWt9dmFy IHE9ZS5jbGllbnRYK2kscj1lLmNsaWVudFkrZjtyZXR1cm4gYy5jYWxsKGQs ZSxxLHIpfTtyZXR1cm4gYiE9PWUmJmEuYWRkRXZlbnRMaXN0ZW5lcihiLGYs ITEpLGEuYWRkRXZlbnRMaXN0ZW5lcihlLGYsITEpLGZ1bmN0aW9uKCl7cmV0 dXJuIGIhPT1lJiZhLnJlbW92ZUV2ZW50TGlzdGVuZXIoYixmLCExKSxhLnJl bW92ZUV2ZW50TGlzdGVuZXIoZSxmLCExKSwhMH19LG89W10scD1mdW5jdGlv bihhKXtmb3IodmFyIGMsZD1hLmNsaWVudFgsZT1hLmNsaWVudFksZj1rKCJ5 IiksZz1rKCJ4IiksaT1vLmxlbmd0aDtpLS07KXtpZihjPW9baV0saCl7Zm9y KHZhciBqLGw9YS50b3VjaGVzJiZhLnRvdWNoZXMubGVuZ3RoO2wtLTspaWYo aj1hLnRvdWNoZXNbbF0sai5pZGVudGlmaWVyPT1jLmVsLl9kcmFnLmlkfHxj LmVsLm5vZGUuY29udGFpbnMoai50YXJnZXQpKXtkPWouY2xpZW50WCxlPWou Y2xpZW50WSwoYS5vcmlnaW5hbEV2ZW50P2Eub3JpZ2luYWxFdmVudDphKS5w cmV2ZW50RGVmYXVsdCgpO2JyZWFrfX1lbHNlIGEucHJldmVudERlZmF1bHQo KTt7dmFyIG09Yy5lbC5ub2RlO20ubmV4dFNpYmxpbmcsbS5wYXJlbnROb2Rl LG0uc3R5bGUuZGlzcGxheX1kKz1nLGUrPWYsYigic25hcC5kcmFnLm1vdmUu IitjLmVsLmlkLGMubW92ZV9zY29wZXx8Yy5lbCxkLWMuZWwuX2RyYWcueCxl LWMuZWwuX2RyYWcueSxkLGUsYSl9fSxxPWZ1bmN0aW9uKGMpe2EudW5tb3Vz ZW1vdmUocCkudW5tb3VzZXVwKHEpO2Zvcih2YXIgZCxlPW8ubGVuZ3RoO2Ut LTspZD1vW2VdLGQuZWwuX2RyYWc9e30sYigic25hcC5kcmFnLmVuZC4iK2Qu ZWwuaWQsZC5lbmRfc2NvcGV8fGQuc3RhcnRfc2NvcGV8fGQubW92ZV9zY29w ZXx8ZC5lbCxjKSxiLm9mZigic25hcC5kcmFnLiouIitkLmVsLmlkKTtvPVtd fSxyPWkubGVuZ3RoO3ItLTspIWZ1bmN0aW9uKGIpe2FbYl09ZltiXT1mdW5j dGlvbihjLGQpe2lmKGEuaXMoYywiZnVuY3Rpb24iKSl0aGlzLmV2ZW50cz10 aGlzLmV2ZW50c3x8W10sdGhpcy5ldmVudHMucHVzaCh7bmFtZTpiLGY6Yyx1 bmJpbmQ6bih0aGlzLm5vZGV8fGRvY3VtZW50LGIsYyxkfHx0aGlzKX0pO2Vs c2UgZm9yKHZhciBlPTAsZj10aGlzLmV2ZW50cy5sZW5ndGg7Zj5lO2UrKylp Zih0aGlzLmV2ZW50c1tlXS5uYW1lPT1iKXRyeXt0aGlzLmV2ZW50c1tlXS5m LmNhbGwodGhpcyl9Y2F0Y2goZyl7fXJldHVybiB0aGlzfSxhWyJ1biIrYl09 ZlsidW4iK2JdPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYz10aGlzLmV2ZW50c3x8 W10sZD1jLmxlbmd0aDtkLS07KWlmKGNbZF0ubmFtZT09YiYmKGNbZF0uZj09 YXx8IWEpKXJldHVybiBjW2RdLnVuYmluZCgpLGMuc3BsaWNlKGQsMSksIWMu bGVuZ3RoJiZkZWxldGUgdGhpcy5ldmVudHMsdGhpcztyZXR1cm4gdGhpc319 KGlbcl0pO2YuaG92ZXI9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMu bW91c2VvdmVyKGEsYykubW91c2VvdXQoYixkfHxjKX0sZi51bmhvdmVyPWZ1 bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMudW5tb3VzZW92ZXIoYSkudW5tb3Vz ZW91dChiKX07dmFyIHM9W107Zi5kcmFnPWZ1bmN0aW9uKGMsZCxlLGYsZyxo KXtmdW5jdGlvbiBpKGksaixsKXsoaS5vcmlnaW5hbEV2ZW50fHxpKS5wcmV2 ZW50RGVmYXVsdCgpLGsuX2RyYWcueD1qLGsuX2RyYWcueT1sLGsuX2RyYWcu aWQ9aS5pZGVudGlmaWVyLCFvLmxlbmd0aCYmYS5tb3VzZW1vdmUocCkubW91 c2V1cChxKSxvLnB1c2goe2VsOmssbW92ZV9zY29wZTpmLHN0YXJ0X3Njb3Bl OmcsZW5kX3Njb3BlOmh9KSxkJiZiLm9uKCJzbmFwLmRyYWcuc3RhcnQuIitr LmlkLGQpLGMmJmIub24oInNuYXAuZHJhZy5tb3ZlLiIray5pZCxjKSxlJiZi Lm9uKCJzbmFwLmRyYWcuZW5kLiIray5pZCxlKSxiKCJzbmFwLmRyYWcuc3Rh cnQuIitrLmlkLGd8fGZ8fGssaixsLGkpfWZ1bmN0aW9uIGooYSxjLGQpe2Io InNuYXAuZHJhZ2luaXQuIitrLmlkLGssYSxjLGQpfXZhciBrPXRoaXM7aWYo IWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBsO3JldHVybiBrLmRyYWcoZnVuY3Rp b24oYSxiKXt0aGlzLmF0dHIoe3RyYW5zZm9ybTpsKyhsPyJUIjoidCIpK1th LGJdfSl9LGZ1bmN0aW9uKCl7bD10aGlzLnRyYW5zZm9ybSgpLmxvY2FsfSl9 cmV0dXJuIGIub24oInNuYXAuZHJhZ2luaXQuIitrLmlkLGkpLGsuX2RyYWc9 e30scy5wdXNoKHtlbDprLHN0YXJ0OmksaW5pdDpqfSksay5tb3VzZWRvd24o aiksa30sZi51bmRyYWc9ZnVuY3Rpb24oKXtmb3IodmFyIGM9cy5sZW5ndGg7 Yy0tOylzW2NdLmVsPT10aGlzJiYodGhpcy51bm1vdXNlZG93bihzW2NdLmlu aXQpLHMuc3BsaWNlKGMsMSksYi51bmJpbmQoInNuYXAuZHJhZy4qLiIrdGhp cy5pZCksYi51bmJpbmQoInNuYXAuZHJhZ2luaXQuIit0aGlzLmlkKSk7cmV0 dXJuIXMubGVuZ3RoJiZhLnVubW91c2Vtb3ZlKHApLnVubW91c2V1cChxKSx0 aGlzfX0pLGQucGx1Z2luKGZ1bmN0aW9uKGEsYyxkKXt2YXIgZT0oYy5wcm90 b3R5cGUsZC5wcm90b3R5cGUpLGY9L15ccyp1cmxcKCguKylcKS8sZz1TdHJp bmcsaD1hLl8uJDthLmZpbHRlcj17fSxlLmZpbHRlcj1mdW5jdGlvbihiKXt2 YXIgZD10aGlzOyJzdmciIT1kLnR5cGUmJihkPWQucGFwZXIpO3ZhciBlPWEu cGFyc2UoZyhiKSksZj1hLl8uaWQoKSxpPShkLm5vZGUub2Zmc2V0V2lkdGgs ZC5ub2RlLm9mZnNldEhlaWdodCxoKCJmaWx0ZXIiKSk7cmV0dXJuIGgoaSx7 aWQ6ZixmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UifSksaS5hcHBlbmRD aGlsZChlLm5vZGUpLGQuZGVmcy5hcHBlbmRDaGlsZChpKSxuZXcgYyhpKX0s Yi5vbigic25hcC51dGlsLmdldGF0dHIuZmlsdGVyIixmdW5jdGlvbigpe2Iu c3RvcCgpO3ZhciBjPWgodGhpcy5ub2RlLCJmaWx0ZXIiKTtpZihjKXt2YXIg ZD1nKGMpLm1hdGNoKGYpO3JldHVybiBkJiZhLnNlbGVjdChkWzFdKX19KSxi Lm9uKCJzbmFwLnV0aWwuYXR0ci5maWx0ZXIiLGZ1bmN0aW9uKGQpe2lmKGQg aW5zdGFuY2VvZiBjJiYiZmlsdGVyIj09ZC50eXBlKXtiLnN0b3AoKTt2YXIg ZT1kLm5vZGUuaWQ7ZXx8KGgoZC5ub2RlLHtpZDpkLmlkfSksZT1kLmlkKSxo KHRoaXMubm9kZSx7ZmlsdGVyOmEudXJsKGUpfSl9ZCYmIm5vbmUiIT1kfHwo Yi5zdG9wKCksdGhpcy5ub2RlLnJlbW92ZUF0dHJpYnV0ZSgiZmlsdGVyIikp fSksYS5maWx0ZXIuYmx1cj1mdW5jdGlvbihiLGMpe251bGw9PWImJihiPTIp O3ZhciBkPW51bGw9PWM/YjpbYixjXTtyZXR1cm4gYS5mb3JtYXQoJzxmZUdh dXNzaWFuQmx1ciBzdGREZXZpYXRpb249IntkZWZ9Ii8+Jyx7ZGVmOmR9KX0s YS5maWx0ZXIuYmx1ci50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlz KCl9LGEuZmlsdGVyLnNoYWRvdz1mdW5jdGlvbihiLGMsZCxlLGYpe3JldHVy biJzdHJpbmciPT10eXBlb2YgZCYmKGU9ZCxmPWUsZD00KSwic3RyaW5nIiE9 dHlwZW9mIGUmJihmPWUsZT0iIzAwMCIpLGU9ZXx8IiMwMDAiLG51bGw9PWQm JihkPTQpLG51bGw9PWYmJihmPTEpLG51bGw9PWImJihiPTAsYz0yKSxudWxs PT1jJiYoYz1iKSxlPWEuY29sb3IoZSksYS5mb3JtYXQoJzxmZUdhdXNzaWFu Qmx1ciBpbj0iU291cmNlQWxwaGEiIHN0ZERldmlhdGlvbj0ie2JsdXJ9Ii8+ PGZlT2Zmc2V0IGR4PSJ7ZHh9IiBkeT0ie2R5fSIgcmVzdWx0PSJvZmZzZXRi bHVyIi8+PGZlRmxvb2QgZmxvb2QtY29sb3I9Intjb2xvcn0iLz48ZmVDb21w b3NpdGUgaW4yPSJvZmZzZXRibHVyIiBvcGVyYXRvcj0iaW4iLz48ZmVDb21w b25lbnRUcmFuc2Zlcj48ZmVGdW5jQSB0eXBlPSJsaW5lYXIiIHNsb3BlPSJ7 b3BhY2l0eX0iLz48L2ZlQ29tcG9uZW50VHJhbnNmZXI+PGZlTWVyZ2U+PGZl TWVyZ2VOb2RlLz48ZmVNZXJnZU5vZGUgaW49IlNvdXJjZUdyYXBoaWMiLz48 L2ZlTWVyZ2U+Jyx7Y29sb3I6ZSxkeDpiLGR5OmMsYmx1cjpkLG9wYWNpdHk6 Zn0pfSxhLmZpbHRlci5zaGFkb3cudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1 cm4gdGhpcygpfSxhLmZpbHRlci5ncmF5c2NhbGU9ZnVuY3Rpb24oYil7cmV0 dXJuIG51bGw9PWImJihiPTEpLGEuZm9ybWF0KCc8ZmVDb2xvck1hdHJpeCB0 eXBlPSJtYXRyaXgiIHZhbHVlcz0ie2F9IHtifSB7Y30gMCAwIHtkfSB7ZX0g e2Z9IDAgMCB7Z30ge2J9IHtofSAwIDAgMCAwIDAgMSAwIi8+Jyx7YTouMjEy NisuNzg3NCooMS1iKSxiOi43MTUyLS43MTUyKigxLWIpLGM6LjA3MjItLjA3 MjIqKDEtYiksZDouMjEyNi0uMjEyNiooMS1iKSxlOi43MTUyKy4yODQ4Kigx LWIpLGY6LjA3MjItLjA3MjIqKDEtYiksZzouMjEyNi0uMjEyNiooMS1iKSxo Oi4wNzIyKy45Mjc4KigxLWIpfSl9LGEuZmlsdGVyLmdyYXlzY2FsZS50b1N0 cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzKCl9LGEuZmlsdGVyLnNlcGlh PWZ1bmN0aW9uKGIpe3JldHVybiBudWxsPT1iJiYoYj0xKSxhLmZvcm1hdCgn PGZlQ29sb3JNYXRyaXggdHlwZT0ibWF0cml4IiB2YWx1ZXM9InthfSB7Yn0g e2N9IDAgMCB7ZH0ge2V9IHtmfSAwIDAge2d9IHtofSB7aX0gMCAwIDAgMCAw IDEgMCIvPicse2E6LjM5MysuNjA3KigxLWIpLGI6Ljc2OS0uNzY5KigxLWIp LGM6LjE4OS0uMTg5KigxLWIpLGQ6LjM0OS0uMzQ5KigxLWIpLGU6LjY4Nisu MzE0KigxLWIpLGY6LjE2OC0uMTY4KigxLWIpLGc6LjI3Mi0uMjcyKigxLWIp LGg6LjUzNC0uNTM0KigxLWIpLGk6LjEzMSsuODY5KigxLWIpfSl9LGEuZmls dGVyLnNlcGlhLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMoKX0s YS5maWx0ZXIuc2F0dXJhdGU9ZnVuY3Rpb24oYil7cmV0dXJuIG51bGw9PWIm JihiPTEpLGEuZm9ybWF0KCc8ZmVDb2xvck1hdHJpeCB0eXBlPSJzYXR1cmF0 ZSIgdmFsdWVzPSJ7YW1vdW50fSIvPicse2Ftb3VudDoxLWJ9KX0sYS5maWx0 ZXIuc2F0dXJhdGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcygp fSxhLmZpbHRlci5odWVSb3RhdGU9ZnVuY3Rpb24oYil7cmV0dXJuIGI9Ynx8 MCxhLmZvcm1hdCgnPGZlQ29sb3JNYXRyaXggdHlwZT0iaHVlUm90YXRlIiB2 YWx1ZXM9InthbmdsZX0iLz4nLHthbmdsZTpifSl9LGEuZmlsdGVyLmh1ZVJv dGF0ZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzKCl9LGEuZmls dGVyLmludmVydD1mdW5jdGlvbihiKXtyZXR1cm4gbnVsbD09YiYmKGI9MSks YS5mb3JtYXQoJzxmZUNvbXBvbmVudFRyYW5zZmVyPjxmZUZ1bmNSIHR5cGU9 InRhYmxlIiB0YWJsZVZhbHVlcz0ie2Ftb3VudH0ge2Ftb3VudDJ9Ii8+PGZl RnVuY0cgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSJ7YW1vdW50fSB7YW1v dW50Mn0iLz48ZmVGdW5jQiB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9Inth bW91bnR9IHthbW91bnQyfSIvPjwvZmVDb21wb25lbnRUcmFuc2Zlcj4nLHth bW91bnQ6YixhbW91bnQyOjEtYn0pfSxhLmZpbHRlci5pbnZlcnQudG9TdHJp bmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcygpfSxhLmZpbHRlci5icmlnaHRu ZXNzPWZ1bmN0aW9uKGIpe3JldHVybiBudWxsPT1iJiYoYj0xKSxhLmZvcm1h dCgnPGZlQ29tcG9uZW50VHJhbnNmZXI+PGZlRnVuY1IgdHlwZT0ibGluZWFy IiBzbG9wZT0ie2Ftb3VudH0iLz48ZmVGdW5jRyB0eXBlPSJsaW5lYXIiIHNs b3BlPSJ7YW1vdW50fSIvPjxmZUZ1bmNCIHR5cGU9ImxpbmVhciIgc2xvcGU9 InthbW91bnR9Ii8+PC9mZUNvbXBvbmVudFRyYW5zZmVyPicse2Ftb3VudDpi fSl9LGEuZmlsdGVyLmJyaWdodG5lc3MudG9TdHJpbmc9ZnVuY3Rpb24oKXty ZXR1cm4gdGhpcygpfSxhLmZpbHRlci5jb250cmFzdD1mdW5jdGlvbihiKXty ZXR1cm4gbnVsbD09YiYmKGI9MSksYS5mb3JtYXQoJzxmZUNvbXBvbmVudFRy YW5zZmVyPjxmZUZ1bmNSIHR5cGU9ImxpbmVhciIgc2xvcGU9InthbW91bnR9 IiBpbnRlcmNlcHQ9InthbW91bnQyfSIvPjxmZUZ1bmNHIHR5cGU9ImxpbmVh ciIgc2xvcGU9InthbW91bnR9IiBpbnRlcmNlcHQ9InthbW91bnQyfSIvPjxm ZUZ1bmNCIHR5cGU9ImxpbmVhciIgc2xvcGU9InthbW91bnR9IiBpbnRlcmNl cHQ9InthbW91bnQyfSIvPjwvZmVDb21wb25lbnRUcmFuc2Zlcj4nLHthbW91 bnQ6YixhbW91bnQyOi41LWIvMn0pfSxhLmZpbHRlci5jb250cmFzdC50b1N0 cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzKCl9fSksZC5wbHVnaW4oZnVu Y3Rpb24oYSxiKXt2YXIgYz1hLl8uYm94LGQ9YS5pcyxlPS9eW15hLXpdKihb dGJtbHJjXSkvaSxmPWZ1bmN0aW9uKCl7cmV0dXJuIlQiK3RoaXMuZHgrIiwi K3RoaXMuZHl9O2IucHJvdG90eXBlLmdldEFsaWduPWZ1bmN0aW9uKGEsYil7 bnVsbD09YiYmZChhLCJzdHJpbmciKSYmKGI9YSxhPW51bGwpLGE9YXx8dGhp cy5wYXBlcjt2YXIgZz1hLmdldEJCb3g/YS5nZXRCQm94KCk6YyhhKSxoPXRo aXMuZ2V0QkJveCgpLGk9e307c3dpdGNoKGI9YiYmYi5tYXRjaChlKSxiPWI/ YlsxXS50b0xvd2VyQ2FzZSgpOiJjIil7Y2FzZSJ0IjppLmR4PTAsaS5keT1n LnktaC55O2JyZWFrO2Nhc2UiYiI6aS5keD0wLGkuZHk9Zy55Mi1oLnkyO2Jy ZWFrO2Nhc2UibSI6aS5keD0wLGkuZHk9Zy5jeS1oLmN5O2JyZWFrO2Nhc2Ui bCI6aS5keD1nLngtaC54LGkuZHk9MDticmVhaztjYXNlInIiOmkuZHg9Zy54 Mi1oLngyLGkuZHk9MDticmVhaztkZWZhdWx0OmkuZHg9Zy5jeC1oLmN4LGku ZHk9MH1yZXR1cm4gaS50b1N0cmluZz1mLGl9LGIucHJvdG90eXBlLmFsaWdu PWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMudHJhbnNmb3JtKCIuLi4iK3Ro aXMuZ2V0QWxpZ24oYSxiKSl9fSksZH0pOwpkaWZmIC0tZ2l0IGEvd2ViL3Bn YWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9qcy9zbmFwLnN2Zy5qcyBiL3dl Yi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vanMvc25hcC5zdmcuanMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYwZmI2ZAot LS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4 cGxhaW4vanMvc25hcC5zdmcuanMKQEAgLTAsMCArMSw4MTQ5IEBACisvLyBT bmFwLnN2ZyAwLjQuMQorLy8gQ29weXJpZ2h0IChjKSAyMDEzIOKAkyAyMDE1 IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBW ZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1 c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExp Y2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vu c2UgYXQKKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNF TlNFLTIuMAorLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3 IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJp YnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4g IkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05E SVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVk LgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3Vh Z2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMg dW5kZXIgdGhlIExpY2Vuc2UuCisvLyBidWlsZDogMjAxNS0wNC0xMworLy8g Q29weXJpZ2h0IChjKSAyMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVk LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gTGljZW5zZWQgdW5kZXIgdGhl IEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7 CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w bGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBh IGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyBodHRwOi8vd3d3LmFw YWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3Mg cmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdy aXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGlj ZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8g V0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQs IGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vu c2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlz c2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4K Ky8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUkCBcXAorLy8g4pSCIEV2ZSAwLjQuMiAtIEphdmFTY3JpcHQg RXZlbnRzIExpYnJhcnkgICAgICAgICAgICAgICAgICAgICAg4pSCIFxcCisv LyDilJzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilKQgXFwKKy8vIOKUgiBBdXRob3IgRG1pdHJ5IEJhcmFub3Zza2l5 IChodHRwOi8vZG1pdHJ5LmJhcmFub3Zza2l5LmNvbS8pIOKUgiBcXAorLy8g 4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSYIFxcCisoZnVuY3Rpb24gKGdsb2IpIHsKKyAgICB2YXIgdmVyc2lv biA9ICIwLjQuMiIsCisgICAgICAgIGhhcyA9ICJoYXNPd25Qcm9wZXJ0eSIs CisgICAgICAgIHNlcGFyYXRvciA9IC9bXC5cL10vLAorICAgICAgICBjb21h c2VwYXJhdG9yID0gL1xzKixccyovLAorICAgICAgICB3aWxkY2FyZCA9ICIq IiwKKyAgICAgICAgZnVuID0gZnVuY3Rpb24gKCkge30sCisgICAgICAgIG51 bXNvcnQgPSBmdW5jdGlvbiAoYSwgYikgeworICAgICAgICAgICAgcmV0dXJu IGEgLSBiOworICAgICAgICB9LAorICAgICAgICBjdXJyZW50X2V2ZW50LAor ICAgICAgICBzdG9wLAorICAgICAgICBldmVudHMgPSB7bjoge319LAorICAg ICAgICBmaXJzdERlZmluZWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg ICBmb3IgKHZhciBpID0gMCwgaWkgPSB0aGlzLmxlbmd0aDsgaSA8IGlpOyBp KyspIHsKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXNbaV0gIT0g InVuZGVmaW5lZCIpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo aXNbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg ICAgICB9LAorICAgICAgICBsYXN0RGVmaW5lZCA9IGZ1bmN0aW9uICgpIHsK KyAgICAgICAgICAgIHZhciBpID0gdGhpcy5sZW5ndGg7CisgICAgICAgICAg ICB3aGlsZSAoLS1pKSB7CisgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0 aGlzW2ldICE9ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICAgICAgICAg IHJldHVybiB0aGlzW2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0KKyAgICAgICAgfSwKKyAgICAvKlwKKyAgICAgKiBldmUKKyAgICAg WyBtZXRob2QgXQorICAgICAqIEZpcmVzIGV2ZW50IHdpdGggZ2l2ZW4gYG5h bWVgLCBnaXZlbiBzY29wZSBhbmQgb3RoZXIgcGFyYW1ldGVycy4KKyAgICAg PiBBcmd1bWVudHMKKyAgICAgLSBuYW1lIChzdHJpbmcpIG5hbWUgb2YgdGhl ICpldmVudCosIGRvdCAoYC5gKSBvciBzbGFzaCAoYC9gKSBzZXBhcmF0ZWQK KyAgICAgLSBzY29wZSAob2JqZWN0KSBjb250ZXh0IGZvciB0aGUgZXZlbnQg aGFuZGxlcnMKKyAgICAgLSB2YXJhcmdzICguLi4pIHRoZSByZXN0IG9mIGFy Z3VtZW50cyB3aWxsIGJlIHNlbnQgdG8gZXZlbnQgaGFuZGxlcnMKKyAgICAg PSAob2JqZWN0KSBhcnJheSBvZiByZXR1cm5lZCB2YWx1ZXMgZnJvbSB0aGUg bGlzdGVuZXJzLiBBcnJheSBoYXMgdHdvIG1ldGhvZHMgYC5maXJzdERlZmlu ZWQoKWAgYW5kIGAubGFzdERlZmluZWQoKWAgdG8gZ2V0IGZpcnN0IG9yIGxh c3Qgbm90IGB1bmRlZmluZWRgIHZhbHVlLgorICAgIFwqLworICAgICAgICBl dmUgPSBmdW5jdGlvbiAobmFtZSwgc2NvcGUpIHsKKyAgICAgICAgICAgIG5h bWUgPSBTdHJpbmcobmFtZSk7CisgICAgICAgICAgICB2YXIgZSA9IGV2ZW50 cywKKyAgICAgICAgICAgICAgICBvbGRzdG9wID0gc3RvcCwKKyAgICAgICAg ICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJn dW1lbnRzLCAyKSwKKyAgICAgICAgICAgICAgICBsaXN0ZW5lcnMgPSBldmUu bGlzdGVuZXJzKG5hbWUpLAorICAgICAgICAgICAgICAgIHogPSAwLAorICAg ICAgICAgICAgICAgIGYgPSBmYWxzZSwKKyAgICAgICAgICAgICAgICBsLAor ICAgICAgICAgICAgICAgIGluZGV4ZWQgPSBbXSwKKyAgICAgICAgICAgICAg ICBxdWV1ZSA9IHt9LAorICAgICAgICAgICAgICAgIG91dCA9IFtdLAorICAg ICAgICAgICAgICAgIGNlID0gY3VycmVudF9ldmVudCwKKyAgICAgICAgICAg ICAgICBlcnJvcnMgPSBbXTsKKyAgICAgICAgICAgIG91dC5maXJzdERlZmlu ZWQgPSBmaXJzdERlZmluZWQ7CisgICAgICAgICAgICBvdXQubGFzdERlZmlu ZWQgPSBsYXN0RGVmaW5lZDsKKyAgICAgICAgICAgIGN1cnJlbnRfZXZlbnQg PSBuYW1lOworICAgICAgICAgICAgc3RvcCA9IDA7CisgICAgICAgICAgICBm b3IgKHZhciBpID0gMCwgaWkgPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgaWk7 IGkrKykgaWYgKCJ6SW5kZXgiIGluIGxpc3RlbmVyc1tpXSkgeworICAgICAg ICAgICAgICAgIGluZGV4ZWQucHVzaChsaXN0ZW5lcnNbaV0uekluZGV4KTsK KyAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXJzW2ldLnpJbmRleCA8IDAp IHsKKyAgICAgICAgICAgICAgICAgICAgcXVldWVbbGlzdGVuZXJzW2ldLnpJ bmRleF0gPSBsaXN0ZW5lcnNbaV07CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgfQorICAgICAgICAgICAgaW5kZXhlZC5zb3J0KG51bXNvcnQp OworICAgICAgICAgICAgd2hpbGUgKGluZGV4ZWRbel0gPCAwKSB7CisgICAg ICAgICAgICAgICAgbCA9IHF1ZXVlW2luZGV4ZWRbeisrXV07CisgICAgICAg ICAgICAgICAgb3V0LnB1c2gobC5hcHBseShzY29wZSwgYXJncykpOworICAg ICAgICAgICAgICAgIGlmIChzdG9wKSB7CisgICAgICAgICAgICAgICAgICAg IHN0b3AgPSBvbGRzdG9wOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g b3V0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGZvciAoaSA9IDA7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAg ICAgICAgbCA9IGxpc3RlbmVyc1tpXTsKKyAgICAgICAgICAgICAgICBpZiAo InpJbmRleCIgaW4gbCkgeworICAgICAgICAgICAgICAgICAgICBpZiAobC56 SW5kZXggPT0gaW5kZXhlZFt6XSkgeworICAgICAgICAgICAgICAgICAgICAg ICAgb3V0LnB1c2gobC5hcHBseShzY29wZSwgYXJncykpOworICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKHN0b3ApIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICB6Kys7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbCA9IHF1ZXVlW2luZGV4ZWRbel1dOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGwgJiYgb3V0LnB1c2gobC5hcHBseShzY29wZSwgYXJncykp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdG9wKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg ICAgIH0gd2hpbGUgKGwpCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZVtsLnpJbmRleF0gPSBs OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0LnB1c2gobC5hcHBseShz Y29wZSwgYXJncykpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RvcCkg eworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBzdG9wID0gb2xkc3RvcDsKKyAgICAgICAgICAgIGN1 cnJlbnRfZXZlbnQgPSBjZTsKKyAgICAgICAgICAgIHJldHVybiBvdXQ7Cisg ICAgICAgIH07CisgICAgICAgIC8vIFVuZG9jdW1lbnRlZC4gRGVidWcgb25s eS4KKyAgICAgICAgZXZlLl9ldmVudHMgPSBldmVudHM7CisgICAgLypcCisg ICAgICogZXZlLmxpc3RlbmVycworICAgICBbIG1ldGhvZCBdCisgICAgICog SW50ZXJuYWwgbWV0aG9kIHdoaWNoIGdpdmVzIHlvdSBhcnJheSBvZiBhbGwg ZXZlbnQgaGFuZGxlcnMgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCBieSB0aGUg Z2l2ZW4gYG5hbWVgLgorICAgICA+IEFyZ3VtZW50cworICAgICAtIG5hbWUg KHN0cmluZykgbmFtZSBvZiB0aGUgZXZlbnQsIGRvdCAoYC5gKSBvciBzbGFz aCAoYC9gKSBzZXBhcmF0ZWQKKyAgICAgPSAoYXJyYXkpIGFycmF5IG9mIGV2 ZW50IGhhbmRsZXJzCisgICAgXCovCisgICAgZXZlLmxpc3RlbmVycyA9IGZ1 bmN0aW9uIChuYW1lKSB7CisgICAgICAgIHZhciBuYW1lcyA9IG5hbWUuc3Bs aXQoc2VwYXJhdG9yKSwKKyAgICAgICAgICAgIGUgPSBldmVudHMsCisgICAg ICAgICAgICBpdGVtLAorICAgICAgICAgICAgaXRlbXMsCisgICAgICAgICAg ICBrLAorICAgICAgICAgICAgaSwKKyAgICAgICAgICAgIGlpLAorICAgICAg ICAgICAgaiwKKyAgICAgICAgICAgIGpqLAorICAgICAgICAgICAgbmVzLAor ICAgICAgICAgICAgZXMgPSBbZV0sCisgICAgICAgICAgICBvdXQgPSBbXTsK KyAgICAgICAgZm9yIChpID0gMCwgaWkgPSBuYW1lcy5sZW5ndGg7IGkgPCBp aTsgaSsrKSB7CisgICAgICAgICAgICBuZXMgPSBbXTsKKyAgICAgICAgICAg IGZvciAoaiA9IDAsIGpqID0gZXMubGVuZ3RoOyBqIDwgamo7IGorKykgewor ICAgICAgICAgICAgICAgIGUgPSBlc1tqXS5uOworICAgICAgICAgICAgICAg IGl0ZW1zID0gW2VbbmFtZXNbaV1dLCBlW3dpbGRjYXJkXV07CisgICAgICAg ICAgICAgICAgayA9IDI7CisgICAgICAgICAgICAgICAgd2hpbGUgKGstLSkg eworICAgICAgICAgICAgICAgICAgICBpdGVtID0gaXRlbXNba107CisgICAg ICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICBuZXMucHVzaChpdGVtKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgIG91dCA9IG91dC5jb25jYXQoaXRlbS5mIHx8IFtdKTsKKyAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGVzID0gbmVzOworICAgICAgICB9CisgICAgICAg IHJldHVybiBvdXQ7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBldmUub24K KyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEJpbmRzIGdpdmVu IGV2ZW50IGhhbmRsZXIgd2l0aCBhIGdpdmVuIG5hbWUuIFlvdSBjYW4gdXNl IHdpbGRjYXJkcyDigJxgKmDigJ0gZm9yIHRoZSBuYW1lczoKKyAgICAgfCBl dmUub24oIioudW5kZXIuKiIsIGYpOworICAgICB8IGV2ZSgibW91c2UudW5k ZXIuZmxvb3IiKTsgLy8gdHJpZ2dlcnMgZgorICAgICAqIFVzZSBAZXZlIHRv IHRyaWdnZXIgdGhlIGxpc3RlbmVyLgorICAgICAqKgorICAgICA+IEFyZ3Vt ZW50cworICAgICAqKgorICAgICAtIG5hbWUgKHN0cmluZykgbmFtZSBvZiB0 aGUgZXZlbnQsIGRvdCAoYC5gKSBvciBzbGFzaCAoYC9gKSBzZXBhcmF0ZWQs IHdpdGggb3B0aW9uYWwgd2lsZGNhcmRzCisgICAgIC0gZiAoZnVuY3Rpb24p IGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24KKyAgICAgKioKKyAgICAgPSAoZnVu Y3Rpb24pIHJldHVybmVkIGZ1bmN0aW9uIGFjY2VwdHMgYSBzaW5nbGUgbnVt ZXJpYyBwYXJhbWV0ZXIgdGhhdCByZXByZXNlbnRzIHotaW5kZXggb2YgdGhl IGhhbmRsZXIuIEl0IGlzIGFuIG9wdGlvbmFsIGZlYXR1cmUgYW5kIG9ubHkg dXNlZCB3aGVuIHlvdSBuZWVkIHRvIGVuc3VyZSB0aGF0IHNvbWUgc3Vic2V0 IG9mIGhhbmRsZXJzIHdpbGwgYmUgaW52b2tlZCBpbiBhIGdpdmVuIG9yZGVy LCBkZXNwaXRlIG9mIHRoZSBvcmRlciBvZiBhc3NpZ25tZW50LgorICAgICA+ IEV4YW1wbGU6CisgICAgIHwgZXZlLm9uKCJtb3VzZSIsIGVhdEl0KSgyKTsK KyAgICAgfCBldmUub24oIm1vdXNlIiwgc2NyZWFtKTsKKyAgICAgfCBldmUu b24oIm1vdXNlIiwgY2F0Y2hJdCkoMSk7CisgICAgICogVGhpcyB3aWxsIGVu c3VyZSB0aGF0IGBjYXRjaEl0YCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBi ZWZvcmUgYGVhdEl0YC4KKyAgICAgKgorICAgICAqIElmIHlvdSB3YW50IHRv IHB1dCB5b3VyIGhhbmRsZXIgYmVmb3JlIG5vbi1pbmRleGVkIGhhbmRsZXJz LCBzcGVjaWZ5IGEgbmVnYXRpdmUgdmFsdWUuCisgICAgICogTm90ZTogSSBh c3N1bWUgbW9zdCBvZiB0aGUgdGltZSB5b3UgZG9u4oCZdCBuZWVkIHRvIHdv cnJ5IGFib3V0IHotaW5kZXgsIGJ1dCBpdOKAmXMgbmljZSB0byBoYXZlIHRo aXMgZmVhdHVyZSDigJxqdXN0IGluIGNhc2XigJ0uCisgICAgXCovCisgICAg ZXZlLm9uID0gZnVuY3Rpb24gKG5hbWUsIGYpIHsKKyAgICAgICAgbmFtZSA9 IFN0cmluZyhuYW1lKTsKKyAgICAgICAgaWYgKHR5cGVvZiBmICE9ICJmdW5j dGlvbiIpIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7fTsK KyAgICAgICAgfQorICAgICAgICB2YXIgbmFtZXMgPSBuYW1lLnNwbGl0KGNv bWFzZXBhcmF0b3IpOworICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBu YW1lcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAgICAoZnVu Y3Rpb24gKG5hbWUpIHsKKyAgICAgICAgICAgICAgICB2YXIgbmFtZXMgPSBu YW1lLnNwbGl0KHNlcGFyYXRvciksCisgICAgICAgICAgICAgICAgICAgIGUg PSBldmVudHMsCisgICAgICAgICAgICAgICAgICAgIGV4aXN0OworICAgICAg ICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IG5hbWVzLmxlbmd0aDsg aSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZSA9IGUubjsK KyAgICAgICAgICAgICAgICAgICAgZSA9IGUuaGFzT3duUHJvcGVydHkobmFt ZXNbaV0pICYmIGVbbmFtZXNbaV1dIHx8IChlW25hbWVzW2ldXSA9IHtuOiB7 fX0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlLmYg PSBlLmYgfHwgW107CisgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkg PSBlLmYubGVuZ3RoOyBpIDwgaWk7IGkrKykgaWYgKGUuZltpXSA9PSBmKSB7 CisgICAgICAgICAgICAgICAgICAgIGV4aXN0ID0gdHJ1ZTsKKyAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICFleGlzdCAmJiBlLmYucHVzaChmKTsKKyAgICAgICAgICAg IH0obmFtZXNbaV0pKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZnVu Y3Rpb24gKHpJbmRleCkgeworICAgICAgICAgICAgaWYgKCt6SW5kZXggPT0g K3pJbmRleCkgeworICAgICAgICAgICAgICAgIGYuekluZGV4ID0gK3pJbmRl eDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9OworICAgIC8q XAorICAgICAqIGV2ZS5mCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAg ICAgKiBSZXR1cm5zIGZ1bmN0aW9uIHRoYXQgd2lsbCBmaXJlIGdpdmVuIGV2 ZW50IHdpdGggb3B0aW9uYWwgYXJndW1lbnRzLgorICAgICAqIEFyZ3VtZW50 cyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSByZXN1bHQgZnVuY3Rpb24g d2lsbCBiZSBhbHNvCisgICAgICogY29uY2F0ZWQgdG8gdGhlIGxpc3Qgb2Yg ZmluYWwgYXJndW1lbnRzLgorICAgICB8IGVsLm9uY2xpY2sgPSBldmUuZigi Y2xpY2siLCAxLCAyKTsKKyAgICAgfCBldmUub24oImNsaWNrIiwgZnVuY3Rp b24gKGEsIGIsIGMpIHsKKyAgICAgfCAgICAgY29uc29sZS5sb2coYSwgYiwg Yyk7IC8vIDEsIDIsIFtldmVudCBvYmplY3RdCisgICAgIHwgfSk7CisgICAg ID4gQXJndW1lbnRzCisgICAgIC0gZXZlbnQgKHN0cmluZykgZXZlbnQgbmFt ZQorICAgICAtIHZhcmFyZ3MgKOKApikgYW5kIGFueSBvdGhlciBhcmd1bWVu dHMKKyAgICAgPSAoZnVuY3Rpb24pIHBvc3NpYmxlIGV2ZW50IGhhbmRsZXIg ZnVuY3Rpb24KKyAgICBcKi8KKyAgICBldmUuZiA9IGZ1bmN0aW9uIChldmVu dCkgeworICAgICAgICB2YXIgYXR0cnMgPSBbXS5zbGljZS5jYWxsKGFyZ3Vt ZW50cywgMSk7CisgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7CisgICAg ICAgICAgICBldmUuYXBwbHkobnVsbCwgW2V2ZW50LCBudWxsXS5jb25jYXQo YXR0cnMpLmNvbmNhdChbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCkpKTsK KyAgICAgICAgfTsKKyAgICB9OworICAgIC8qXAorICAgICAqIGV2ZS5zdG9w CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBJcyB1c2VkIGlu c2lkZSBhbiBldmVudCBoYW5kbGVyIHRvIHN0b3AgdGhlIGV2ZW50LCBwcmV2 ZW50aW5nIGFueSBzdWJzZXF1ZW50IGxpc3RlbmVycyBmcm9tIGZpcmluZy4K KyAgICBcKi8KKyAgICBldmUuc3RvcCA9IGZ1bmN0aW9uICgpIHsKKyAgICAg ICAgc3RvcCA9IDE7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBldmUubnQK KyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIENvdWxkIGJlIHVz ZWQgaW5zaWRlIGV2ZW50IGhhbmRsZXIgdG8gZmlndXJlIG91dCBhY3R1YWwg bmFtZSBvZiB0aGUgZXZlbnQuCisgICAgICoqCisgICAgID4gQXJndW1lbnRz CisgICAgICoqCisgICAgIC0gc3VibmFtZSAoc3RyaW5nKSAjb3B0aW9uYWwg c3VibmFtZSBvZiB0aGUgZXZlbnQKKyAgICAgKioKKyAgICAgPSAoc3RyaW5n KSBuYW1lIG9mIHRoZSBldmVudCwgaWYgYHN1Ym5hbWVgIGlzIG5vdCBzcGVj aWZpZWQKKyAgICAgKiBvcgorICAgICA9IChib29sZWFuKSBgdHJ1ZWAsIGlm IGN1cnJlbnQgZXZlbnTigJlzIG5hbWUgY29udGFpbnMgYHN1Ym5hbWVgCisg ICAgXCovCisgICAgZXZlLm50ID0gZnVuY3Rpb24gKHN1Ym5hbWUpIHsKKyAg ICAgICAgaWYgKHN1Ym5hbWUpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcg UmVnRXhwKCIoPzpcXC58XFwvfF4pIiArIHN1Ym5hbWUgKyAiKD86XFwufFxc L3wkKSIpLnRlc3QoY3VycmVudF9ldmVudCk7CisgICAgICAgIH0KKyAgICAg ICAgcmV0dXJuIGN1cnJlbnRfZXZlbnQ7CisgICAgfTsKKyAgICAvKlwKKyAg ICAgKiBldmUubnRzCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAg KiBDb3VsZCBiZSB1c2VkIGluc2lkZSBldmVudCBoYW5kbGVyIHRvIGZpZ3Vy ZSBvdXQgYWN0dWFsIG5hbWUgb2YgdGhlIGV2ZW50LgorICAgICAqKgorICAg ICAqKgorICAgICA9IChhcnJheSkgbmFtZXMgb2YgdGhlIGV2ZW50CisgICAg XCovCisgICAgZXZlLm50cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0 dXJuIGN1cnJlbnRfZXZlbnQuc3BsaXQoc2VwYXJhdG9yKTsKKyAgICB9Owor ICAgIC8qXAorICAgICAqIGV2ZS5vZmYKKyAgICAgWyBtZXRob2QgXQorICAg ICAqKgorICAgICAqIFJlbW92ZXMgZ2l2ZW4gZnVuY3Rpb24gZnJvbSB0aGUg bGlzdCBvZiBldmVudCBsaXN0ZW5lcnMgYXNzaWduZWQgdG8gZ2l2ZW4gbmFt ZS4KKyAgICAgKiBJZiBubyBhcmd1bWVudHMgc3BlY2lmaWVkIGFsbCB0aGUg ZXZlbnRzIHdpbGwgYmUgY2xlYXJlZC4KKyAgICAgKioKKyAgICAgPiBBcmd1 bWVudHMKKyAgICAgKioKKyAgICAgLSBuYW1lIChzdHJpbmcpIG5hbWUgb2Yg dGhlIGV2ZW50LCBkb3QgKGAuYCkgb3Igc2xhc2ggKGAvYCkgc2VwYXJhdGVk LCB3aXRoIG9wdGlvbmFsIHdpbGRjYXJkcworICAgICAtIGYgKGZ1bmN0aW9u KSBldmVudCBoYW5kbGVyIGZ1bmN0aW9uCisgICAgXCovCisgICAgLypcCisg ICAgICogZXZlLnVuYmluZAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisg ICAgICogU2VlIEBldmUub2ZmCisgICAgXCovCisgICAgZXZlLm9mZiA9IGV2 ZS51bmJpbmQgPSBmdW5jdGlvbiAobmFtZSwgZikgeworICAgICAgICBpZiAo IW5hbWUpIHsKKyAgICAgICAgICAgIGV2ZS5fZXZlbnRzID0gZXZlbnRzID0g e246IHt9fTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg ICAgICB2YXIgbmFtZXMgPSBuYW1lLnNwbGl0KGNvbWFzZXBhcmF0b3IpOwor ICAgICAgICBpZiAobmFtZXMubGVuZ3RoID4gMSkgeworICAgICAgICAgICAg Zm9yICh2YXIgaSA9IDAsIGlpID0gbmFtZXMubGVuZ3RoOyBpIDwgaWk7IGkr KykgeworICAgICAgICAgICAgICAgIGV2ZS5vZmYobmFtZXNbaV0sIGYpOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9 CisgICAgICAgIG5hbWVzID0gbmFtZS5zcGxpdChzZXBhcmF0b3IpOworICAg ICAgICB2YXIgZSwKKyAgICAgICAgICAgIGtleSwKKyAgICAgICAgICAgIHNw bGljZSwKKyAgICAgICAgICAgIGksIGlpLCBqLCBqaiwKKyAgICAgICAgICAg IGN1ciA9IFtldmVudHNdOworICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IG5h bWVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgIGZvciAo aiA9IDA7IGogPCBjdXIubGVuZ3RoOyBqICs9IHNwbGljZS5sZW5ndGggLSAy KSB7CisgICAgICAgICAgICAgICAgc3BsaWNlID0gW2osIDFdOworICAgICAg ICAgICAgICAgIGUgPSBjdXJbal0ubjsKKyAgICAgICAgICAgICAgICBpZiAo bmFtZXNbaV0gIT0gd2lsZGNhcmQpIHsKKyAgICAgICAgICAgICAgICAgICAg aWYgKGVbbmFtZXNbaV1dKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBz cGxpY2UucHVzaChlW25hbWVzW2ldXSk7CisgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg ICAgICBmb3IgKGtleSBpbiBlKSBpZiAoZVtoYXNdKGtleSkpIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHNwbGljZS5wdXNoKGVba2V5XSk7CisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgY3VyLnNwbGljZS5hcHBseShjdXIsIHNwbGljZSk7CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpID0gMCwgaWkg PSBjdXIubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAgZSA9 IGN1cltpXTsKKyAgICAgICAgICAgIHdoaWxlIChlLm4pIHsKKyAgICAgICAg ICAgICAgICBpZiAoZikgeworICAgICAgICAgICAgICAgICAgICBpZiAoZS5m KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwLCBqaiA9 IGUuZi5sZW5ndGg7IGogPCBqajsgaisrKSBpZiAoZS5mW2pdID09IGYpIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmYuc3BsaWNlKGosIDEp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg IWUuZi5sZW5ndGggJiYgZGVsZXRlIGUuZjsKKyAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICBmb3IgKGtleSBpbiBlLm4pIGlm IChlLm5baGFzXShrZXkpICYmIGUubltrZXldLmYpIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHZhciBmdW5jcyA9IGUubltrZXldLmY7CisgICAgICAg ICAgICAgICAgICAgICAgICBmb3IgKGogPSAwLCBqaiA9IGZ1bmNzLmxlbmd0 aDsgaiA8IGpqOyBqKyspIGlmIChmdW5jc1tqXSA9PSBmKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZnVuY3Muc3BsaWNlKGosIDEpOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgIWZ1bmNz Lmxlbmd0aCAmJiBkZWxldGUgZS5uW2tleV0uZjsKKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgICAgIGRlbGV0ZSBlLmY7CisgICAgICAgICAgICAgICAgICAgIGZv ciAoa2V5IGluIGUubikgaWYgKGUubltoYXNdKGtleSkgJiYgZS5uW2tleV0u ZikgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGUubltrZXld LmY7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgZSA9IGUubjsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgIH07CisgICAgLypcCisgICAgICogZXZlLm9uY2UKKyAg ICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEJpbmRzIGdpdmVuIGV2 ZW50IGhhbmRsZXIgd2l0aCBhIGdpdmVuIG5hbWUgdG8gb25seSBydW4gb25j ZSB0aGVuIHVuYmluZCBpdHNlbGYuCisgICAgIHwgZXZlLm9uY2UoImxvZ2lu IiwgZik7CisgICAgIHwgZXZlKCJsb2dpbiIpOyAvLyB0cmlnZ2VycyBmCisg ICAgIHwgZXZlKCJsb2dpbiIpOyAvLyBubyBsaXN0ZW5lcnMKKyAgICAgKiBV c2UgQGV2ZSB0byB0cmlnZ2VyIHRoZSBsaXN0ZW5lci4KKyAgICAgKioKKyAg ICAgPiBBcmd1bWVudHMKKyAgICAgKioKKyAgICAgLSBuYW1lIChzdHJpbmcp IG5hbWUgb2YgdGhlIGV2ZW50LCBkb3QgKGAuYCkgb3Igc2xhc2ggKGAvYCkg c2VwYXJhdGVkLCB3aXRoIG9wdGlvbmFsIHdpbGRjYXJkcworICAgICAtIGYg KGZ1bmN0aW9uKSBldmVudCBoYW5kbGVyIGZ1bmN0aW9uCisgICAgICoqCisg ICAgID0gKGZ1bmN0aW9uKSBzYW1lIHJldHVybiBmdW5jdGlvbiBhcyBAZXZl Lm9uCisgICAgXCovCisgICAgZXZlLm9uY2UgPSBmdW5jdGlvbiAobmFtZSwg ZikgeworICAgICAgICB2YXIgZjIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg ICAgICBldmUudW5iaW5kKG5hbWUsIGYyKTsKKyAgICAgICAgICAgIHJldHVy biBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIH07CisgICAg ICAgIHJldHVybiBldmUub24obmFtZSwgZjIpOworICAgIH07CisgICAgLypc CisgICAgICogZXZlLnZlcnNpb24KKyAgICAgWyBwcm9wZXJ0eSAoc3RyaW5n KSBdCisgICAgICoqCisgICAgICogQ3VycmVudCB2ZXJzaW9uIG9mIHRoZSBs aWJyYXJ5LgorICAgIFwqLworICAgIGV2ZS52ZXJzaW9uID0gdmVyc2lvbjsK KyAgICBldmUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl dHVybiAiWW91IGFyZSBydW5uaW5nIEV2ZSAiICsgdmVyc2lvbjsKKyAgICB9 OworICAgICh0eXBlb2YgbW9kdWxlICE9ICJ1bmRlZmluZWQiICYmIG1vZHVs ZS5leHBvcnRzKSA/IChtb2R1bGUuZXhwb3J0cyA9IGV2ZSkgOiAodHlwZW9m IGRlZmluZSA9PT0gImZ1bmN0aW9uIiAmJiBkZWZpbmUuYW1kID8gKGRlZmlu ZSgiZXZlIiwgW10sIGZ1bmN0aW9uKCkgeyByZXR1cm4gZXZlOyB9KSkgOiAo Z2xvYi5ldmUgPSBldmUpKTsKK30pKHRoaXMpOworCisoZnVuY3Rpb24gKGds b2IsIGZhY3RvcnkpIHsKKyAgICAvLyBBTUQgc3VwcG9ydAorICAgIGlmICh0 eXBlb2YgZGVmaW5lID09ICJmdW5jdGlvbiIgJiYgZGVmaW5lLmFtZCkgewor ICAgICAgICAvLyBEZWZpbmUgYXMgYW4gYW5vbnltb3VzIG1vZHVsZQorICAg ICAgICBkZWZpbmUoWyJldmUiXSwgZnVuY3Rpb24gKGV2ZSkgeworICAgICAg ICAgICAgcmV0dXJuIGZhY3RvcnkoZ2xvYiwgZXZlKTsKKyAgICAgICAgfSk7 CisgICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyAhPSAndW5kZWZpbmVk JykgeworICAgICAgICAvLyBOZXh0IGZvciBOb2RlLmpzIG9yIENvbW1vbkpT CisgICAgICAgIHZhciBldmUgPSByZXF1aXJlKCdldmUnKTsKKyAgICAgICAg bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KGdsb2IsIGV2ZSk7CisgICAgfSBl bHNlIHsKKyAgICAgICAgLy8gQnJvd3NlciBnbG9iYWxzIChnbG9iIGlzIHdp bmRvdykKKyAgICAgICAgLy8gU25hcCBhZGRzIGl0c2VsZiB0byB3aW5kb3cK KyAgICAgICAgZmFjdG9yeShnbG9iLCBnbG9iLmV2ZSk7CisgICAgfQorfSh3 aW5kb3cgfHwgdGhpcywgZnVuY3Rpb24gKHdpbmRvdywgZXZlKSB7CisvLyBD b3B5cmlnaHQgKGMpIDIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQu IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBMaWNlbnNlZCB1bmRlciB0aGUg QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsK Ky8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBs aWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEg Y29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8gaHR0cDovL3d3dy5hcGFjaGUu b3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLyBVbmxlc3MgcmVxdWlyZWQg YnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNv ZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBk aXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBX QVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBl eHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRo ZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5k CisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KK3ZhciBtaW5h ID0gKGZ1bmN0aW9uIChldmUpIHsKKyAgICB2YXIgYW5pbWF0aW9ucyA9IHt9 LAorICAgIHJlcXVlc3RBbmltRnJhbWUgPSB3aW5kb3cucmVxdWVzdEFuaW1h dGlvbkZyYW1lICAgICAgIHx8CisgICAgICAgICAgICAgICAgICAgICAgIHdp bmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwKKyAgICAgICAg ICAgICAgICAgICAgICAgd2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFt ZSAgICB8fAorICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cub1JlcXVl c3RBbmltYXRpb25GcmFtZSAgICAgIHx8CisgICAgICAgICAgICAgICAgICAg ICAgIHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSAgICAgfHwKKyAg ICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGNhbGxiYWNrKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNhbGxiYWNr LCAxNik7CisgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgaXNBcnJh eSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKGEpIHsKKyAgICAgICAg cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheSB8fAorICAgICAgICAgICAgT2Jq ZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpID09ICJbb2JqZWN0IEFy cmF5XSI7CisgICAgfSwKKyAgICBpZGdlbiA9IDAsCisgICAgaWRwcmVmaXgg PSAiTSIgKyAoK25ldyBEYXRlKS50b1N0cmluZygzNiksCisgICAgSUQgPSBm dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBpZHByZWZpeCArIChpZGdl bisrKS50b1N0cmluZygzNik7CisgICAgfSwKKyAgICBkaWZmID0gZnVuY3Rp b24gKGEsIGIsIEEsIEIpIHsKKyAgICAgICAgaWYgKGlzQXJyYXkoYSkpIHsK KyAgICAgICAgICAgIHJlcyA9IFtdOworICAgICAgICAgICAgZm9yICh2YXIg aSA9IDAsIGlpID0gYS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAg ICAgICAgICAgcmVzW2ldID0gZGlmZihhW2ldLCBiLCBBW2ldLCBCKTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAg IH0KKyAgICAgICAgdmFyIGRpZiA9IChBIC0gYSkgLyAoQiAtIGIpOworICAg ICAgICByZXR1cm4gZnVuY3Rpb24gKGJiKSB7CisgICAgICAgICAgICByZXR1 cm4gYSArIGRpZiAqIChiYiAtIGIpOworICAgICAgICB9OworICAgIH0sCisg ICAgdGltZXIgPSBEYXRlLm5vdyB8fCBmdW5jdGlvbiAoKSB7CisgICAgICAg IHJldHVybiArbmV3IERhdGU7CisgICAgfSwKKyAgICBzdGEgPSBmdW5jdGlv biAodmFsKSB7CisgICAgICAgIHZhciBhID0gdGhpczsKKyAgICAgICAgaWYg KHZhbCA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gYS5zOworICAg ICAgICB9CisgICAgICAgIHZhciBkcyA9IGEucyAtIHZhbDsKKyAgICAgICAg YS5iICs9IGEuZHVyICogZHM7CisgICAgICAgIGEuQiArPSBhLmR1ciAqIGRz OworICAgICAgICBhLnMgPSB2YWw7CisgICAgfSwKKyAgICBzcGVlZCA9IGZ1 bmN0aW9uICh2YWwpIHsKKyAgICAgICAgdmFyIGEgPSB0aGlzOworICAgICAg ICBpZiAodmFsID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBhLnNw ZDsKKyAgICAgICAgfQorICAgICAgICBhLnNwZCA9IHZhbDsKKyAgICB9LAor ICAgIGR1cmF0aW9uID0gZnVuY3Rpb24gKHZhbCkgeworICAgICAgICB2YXIg YSA9IHRoaXM7CisgICAgICAgIGlmICh2YWwgPT0gbnVsbCkgeworICAgICAg ICAgICAgcmV0dXJuIGEuZHVyOworICAgICAgICB9CisgICAgICAgIGEucyA9 IGEucyAqIHZhbCAvIGEuZHVyOworICAgICAgICBhLmR1ciA9IHZhbDsKKyAg ICB9LAorICAgIHN0b3BpdCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFy IGEgPSB0aGlzOworICAgICAgICBkZWxldGUgYW5pbWF0aW9uc1thLmlkXTsK KyAgICAgICAgYS51cGRhdGUoKTsKKyAgICAgICAgZXZlKCJtaW5hLnN0b3Au IiArIGEuaWQsIGEpOworICAgIH0sCisgICAgcGF1c2UgPSBmdW5jdGlvbiAo KSB7CisgICAgICAgIHZhciBhID0gdGhpczsKKyAgICAgICAgaWYgKGEucGRp ZikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg IGRlbGV0ZSBhbmltYXRpb25zW2EuaWRdOworICAgICAgICBhLnVwZGF0ZSgp OworICAgICAgICBhLnBkaWYgPSBhLmdldCgpIC0gYS5iOworICAgIH0sCisg ICAgcmVzdW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgYSA9IHRo aXM7CisgICAgICAgIGlmICghYS5wZGlmKSB7CisgICAgICAgICAgICByZXR1 cm47CisgICAgICAgIH0KKyAgICAgICAgYS5iID0gYS5nZXQoKSAtIGEucGRp ZjsKKyAgICAgICAgZGVsZXRlIGEucGRpZjsKKyAgICAgICAgYW5pbWF0aW9u c1thLmlkXSA9IGE7CisgICAgfSwKKyAgICB1cGRhdGUgPSBmdW5jdGlvbiAo KSB7CisgICAgICAgIHZhciBhID0gdGhpcywKKyAgICAgICAgICAgIHJlczsK KyAgICAgICAgaWYgKGlzQXJyYXkoYS5zdGFydCkpIHsKKyAgICAgICAgICAg IHJlcyA9IFtdOworICAgICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0g YS5zdGFydC5sZW5ndGg7IGogPCBqajsgaisrKSB7CisgICAgICAgICAgICAg ICAgcmVzW2pdID0gK2Euc3RhcnRbal0gKworICAgICAgICAgICAgICAgICAg ICAoYS5lbmRbal0gLSBhLnN0YXJ0W2pdKSAqIGEuZWFzaW5nKGEucyk7Cisg ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBy ZXMgPSArYS5zdGFydCArIChhLmVuZCAtIGEuc3RhcnQpICogYS5lYXNpbmco YS5zKTsKKyAgICAgICAgfQorICAgICAgICBhLnNldChyZXMpOworICAgIH0s CisgICAgZnJhbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBsZW4g PSAwOworICAgICAgICBmb3IgKHZhciBpIGluIGFuaW1hdGlvbnMpIGlmIChh bmltYXRpb25zLmhhc093blByb3BlcnR5KGkpKSB7CisgICAgICAgICAgICB2 YXIgYSA9IGFuaW1hdGlvbnNbaV0sCisgICAgICAgICAgICAgICAgYiA9IGEu Z2V0KCksCisgICAgICAgICAgICAgICAgcmVzOworICAgICAgICAgICAgbGVu Kys7CisgICAgICAgICAgICBhLnMgPSAoYiAtIGEuYikgLyAoYS5kdXIgLyBh LnNwZCk7CisgICAgICAgICAgICBpZiAoYS5zID49IDEpIHsKKyAgICAgICAg ICAgICAgICBkZWxldGUgYW5pbWF0aW9uc1tpXTsKKyAgICAgICAgICAgICAg ICBhLnMgPSAxOworICAgICAgICAgICAgICAgIGxlbi0tOworICAgICAgICAg ICAgICAgIChmdW5jdGlvbiAoYSkgeworICAgICAgICAgICAgICAgICAgICBz ZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGV2ZSgibWluYS5maW5pc2guIiArIGEuaWQsIGEpOworICAgICAgICAg ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9KGEpKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGEudXBkYXRlKCk7CisgICAgICAgIH0K KyAgICAgICAgbGVuICYmIHJlcXVlc3RBbmltRnJhbWUoZnJhbWUpOworICAg IH0sCisgICAgLypcCisgICAgICogbWluYQorICAgICBbIG1ldGhvZCBdCisg ICAgICoqCisgICAgICogR2VuZXJpYyBhbmltYXRpb24gb2YgbnVtYmVycwor ICAgICAqKgorICAgICAtIGEgKG51bWJlcikgc3RhcnQgX3NsYXZlXyBudW1i ZXIKKyAgICAgLSBBIChudW1iZXIpIGVuZCBfc2xhdmVfIG51bWJlcgorICAg ICAtIGIgKG51bWJlcikgc3RhcnQgX21hc3Rlcl8gbnVtYmVyIChzdGFydCB0 aW1lIGluIGdlbmVyYWwgY2FzZSkKKyAgICAgLSBCIChudW1iZXIpIGVuZCBf bWFzdGVyXyBudW1iZXIgKGVuZCB0aW1lIGluIGdlcmVhbCBjYXNlKQorICAg ICAtIGdldCAoZnVuY3Rpb24pIGdldHRlciBvZiBfbWFzdGVyXyBudW1iZXIg KHNlZSBAbWluYS50aW1lKQorICAgICAtIHNldCAoZnVuY3Rpb24pIHNldHRl ciBvZiBfc2xhdmVfIG51bWJlcgorICAgICAtIGVhc2luZyAoZnVuY3Rpb24p ICNvcHRpb25hbCBlYXNpbmcgZnVuY3Rpb24sIGRlZmF1bHQgaXMgQG1pbmEu bGluZWFyCisgICAgID0gKG9iamVjdCkgYW5pbWF0aW9uIGRlc2NyaXB0b3IK KyAgICAgbyB7CisgICAgIG8gICAgICAgICBpZCAoc3RyaW5nKSBhbmltYXRp b24gaWQsCisgICAgIG8gICAgICAgICBzdGFydCAobnVtYmVyKSBzdGFydCBf c2xhdmVfIG51bWJlciwKKyAgICAgbyAgICAgICAgIGVuZCAobnVtYmVyKSBl bmQgX3NsYXZlXyBudW1iZXIsCisgICAgIG8gICAgICAgICBiIChudW1iZXIp IHN0YXJ0IF9tYXN0ZXJfIG51bWJlciwKKyAgICAgbyAgICAgICAgIHMgKG51 bWJlcikgYW5pbWF0aW9uIHN0YXR1cyAoMC4uMSksCisgICAgIG8gICAgICAg ICBkdXIgKG51bWJlcikgYW5pbWF0aW9uIGR1cmF0aW9uLAorICAgICBvICAg ICAgICAgc3BkIChudW1iZXIpIGFuaW1hdGlvbiBzcGVlZCwKKyAgICAgbyAg ICAgICAgIGdldCAoZnVuY3Rpb24pIGdldHRlciBvZiBfbWFzdGVyXyBudW1i ZXIgKHNlZSBAbWluYS50aW1lKSwKKyAgICAgbyAgICAgICAgIHNldCAoZnVu Y3Rpb24pIHNldHRlciBvZiBfc2xhdmVfIG51bWJlciwKKyAgICAgbyAgICAg ICAgIGVhc2luZyAoZnVuY3Rpb24pIGVhc2luZyBmdW5jdGlvbiwgZGVmYXVs dCBpcyBAbWluYS5saW5lYXIsCisgICAgIG8gICAgICAgICBzdGF0dXMgKGZ1 bmN0aW9uKSBzdGF0dXMgZ2V0dGVyL3NldHRlciwKKyAgICAgbyAgICAgICAg IHNwZWVkIChmdW5jdGlvbikgc3BlZWQgZ2V0dGVyL3NldHRlciwKKyAgICAg byAgICAgICAgIGR1cmF0aW9uIChmdW5jdGlvbikgZHVyYXRpb24gZ2V0dGVy L3NldHRlciwKKyAgICAgbyAgICAgICAgIHN0b3AgKGZ1bmN0aW9uKSBhbmlt YXRpb24gc3RvcHBlcgorICAgICBvICAgICAgICAgcGF1c2UgKGZ1bmN0aW9u KSBwYXVzZXMgdGhlIGFuaW1hdGlvbgorICAgICBvICAgICAgICAgcmVzdW1l IChmdW5jdGlvbikgcmVzdW1lcyB0aGUgYW5pbWF0aW9uCisgICAgIG8gICAg ICAgICB1cGRhdGUgKGZ1bmN0aW9uKSBjYWxsZXMgc2V0dGVyIHdpdGggdGhl IHJpZ2h0IHZhbHVlIG9mIHRoZSBhbmltYXRpb24KKyAgICAgbyB9CisgICAg XCovCisgICAgbWluYSA9IGZ1bmN0aW9uIChhLCBBLCBiLCBCLCBnZXQsIHNl dCwgZWFzaW5nKSB7CisgICAgICAgIHZhciBhbmltID0geworICAgICAgICAg ICAgaWQ6IElEKCksCisgICAgICAgICAgICBzdGFydDogYSwKKyAgICAgICAg ICAgIGVuZDogQSwKKyAgICAgICAgICAgIGI6IGIsCisgICAgICAgICAgICBz OiAwLAorICAgICAgICAgICAgZHVyOiBCIC0gYiwKKyAgICAgICAgICAgIHNw ZDogMSwKKyAgICAgICAgICAgIGdldDogZ2V0LAorICAgICAgICAgICAgc2V0 OiBzZXQsCisgICAgICAgICAgICBlYXNpbmc6IGVhc2luZyB8fCBtaW5hLmxp bmVhciwKKyAgICAgICAgICAgIHN0YXR1czogc3RhLAorICAgICAgICAgICAg c3BlZWQ6IHNwZWVkLAorICAgICAgICAgICAgZHVyYXRpb246IGR1cmF0aW9u LAorICAgICAgICAgICAgc3RvcDogc3RvcGl0LAorICAgICAgICAgICAgcGF1 c2U6IHBhdXNlLAorICAgICAgICAgICAgcmVzdW1lOiByZXN1bWUsCisgICAg ICAgICAgICB1cGRhdGU6IHVwZGF0ZQorICAgICAgICB9OworICAgICAgICBh bmltYXRpb25zW2FuaW0uaWRdID0gYW5pbTsKKyAgICAgICAgdmFyIGxlbiA9 IDAsIGk7CisgICAgICAgIGZvciAoaSBpbiBhbmltYXRpb25zKSBpZiAoYW5p bWF0aW9ucy5oYXNPd25Qcm9wZXJ0eShpKSkgeworICAgICAgICAgICAgbGVu Kys7CisgICAgICAgICAgICBpZiAobGVuID09IDIpIHsKKyAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg ICBsZW4gPT0gMSAmJiByZXF1ZXN0QW5pbUZyYW1lKGZyYW1lKTsKKyAgICAg ICAgcmV0dXJuIGFuaW07CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBtaW5h LnRpbWUKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJldHVy bnMgdGhlIGN1cnJlbnQgdGltZS4gRXF1aXZhbGVudCB0bzoKKyAgICAgfCBm dW5jdGlvbiAoKSB7CisgICAgIHwgICAgIHJldHVybiAobmV3IERhdGUpLmdl dFRpbWUoKTsKKyAgICAgfCB9CisgICAgXCovCisgICAgbWluYS50aW1lID0g dGltZXI7CisgICAgLypcCisgICAgICogbWluYS5nZXRCeUlkCisgICAgIFsg bWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZXR1cm5zIGFuIGFuaW1hdGlv biBieSBpdHMgaWQKKyAgICAgLSBpZCAoc3RyaW5nKSBhbmltYXRpb24ncyBp ZAorICAgICA9IChvYmplY3QpIFNlZSBAbWluYQorICAgIFwqLworICAgIG1p bmEuZ2V0QnlJZCA9IGZ1bmN0aW9uIChpZCkgeworICAgICAgICByZXR1cm4g YW5pbWF0aW9uc1tpZF0gfHwgbnVsbDsKKyAgICB9OworCisgICAgLypcCisg ICAgICogbWluYS5saW5lYXIKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgor ICAgICAqIERlZmF1bHQgbGluZWFyIGVhc2luZworICAgICAtIG4gKG51bWJl cikgaW5wdXQgMC4uMQorICAgICA9IChudW1iZXIpIG91dHB1dCAwLi4xCisg ICAgXCovCisgICAgbWluYS5saW5lYXIgPSBmdW5jdGlvbiAobikgeworICAg ICAgICByZXR1cm4gbjsKKyAgICB9OworICAgIC8qXAorICAgICAqIG1pbmEu ZWFzZW91dAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogRWFz ZW91dCBlYXNpbmcKKyAgICAgLSBuIChudW1iZXIpIGlucHV0IDAuLjEKKyAg ICAgPSAobnVtYmVyKSBvdXRwdXQgMC4uMQorICAgIFwqLworICAgIG1pbmEu ZWFzZW91dCA9IGZ1bmN0aW9uIChuKSB7CisgICAgICAgIHJldHVybiBNYXRo LnBvdyhuLCAxLjcpOworICAgIH07CisgICAgLypcCisgICAgICogbWluYS5l YXNlaW4KKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEVhc2Vp biBlYXNpbmcKKyAgICAgLSBuIChudW1iZXIpIGlucHV0IDAuLjEKKyAgICAg PSAobnVtYmVyKSBvdXRwdXQgMC4uMQorICAgIFwqLworICAgIG1pbmEuZWFz ZWluID0gZnVuY3Rpb24gKG4pIHsKKyAgICAgICAgcmV0dXJuIE1hdGgucG93 KG4sIC40OCk7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBtaW5hLmVhc2Vp bm91dAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogRWFzZWlu b3V0IGVhc2luZworICAgICAtIG4gKG51bWJlcikgaW5wdXQgMC4uMQorICAg ICA9IChudW1iZXIpIG91dHB1dCAwLi4xCisgICAgXCovCisgICAgbWluYS5l YXNlaW5vdXQgPSBmdW5jdGlvbiAobikgeworICAgICAgICBpZiAobiA9PSAx KSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAg ICBpZiAobiA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg ICAgfQorICAgICAgICB2YXIgcSA9IC40OCAtIG4gLyAxLjA0LAorICAgICAg ICAgICAgUSA9IE1hdGguc3FydCguMTczNCArIHEgKiBxKSwKKyAgICAgICAg ICAgIHggPSBRIC0gcSwKKyAgICAgICAgICAgIFggPSBNYXRoLnBvdyhNYXRo LmFicyh4KSwgMSAvIDMpICogKHggPCAwID8gLTEgOiAxKSwKKyAgICAgICAg ICAgIHkgPSAtUSAtIHEsCisgICAgICAgICAgICBZID0gTWF0aC5wb3coTWF0 aC5hYnMoeSksIDEgLyAzKSAqICh5IDwgMCA/IC0xIDogMSksCisgICAgICAg ICAgICB0ID0gWCArIFkgKyAuNTsKKyAgICAgICAgcmV0dXJuICgxIC0gdCkg KiAzICogdCAqIHQgKyB0ICogdCAqIHQ7CisgICAgfTsKKyAgICAvKlwKKyAg ICAgKiBtaW5hLmJhY2tpbgorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisg ICAgICogQmFja2luIGVhc2luZworICAgICAtIG4gKG51bWJlcikgaW5wdXQg MC4uMQorICAgICA9IChudW1iZXIpIG91dHB1dCAwLi4xCisgICAgXCovCisg ICAgbWluYS5iYWNraW4gPSBmdW5jdGlvbiAobikgeworICAgICAgICBpZiAo biA9PSAxKSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQor ICAgICAgICB2YXIgcyA9IDEuNzAxNTg7CisgICAgICAgIHJldHVybiBuICog biAqICgocyArIDEpICogbiAtIHMpOworICAgIH07CisgICAgLypcCisgICAg ICogbWluYS5iYWNrb3V0CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAg ICAgKiBCYWNrb3V0IGVhc2luZworICAgICAtIG4gKG51bWJlcikgaW5wdXQg MC4uMQorICAgICA9IChudW1iZXIpIG91dHB1dCAwLi4xCisgICAgXCovCisg ICAgbWluYS5iYWNrb3V0ID0gZnVuY3Rpb24gKG4pIHsKKyAgICAgICAgaWYg KG4gPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0K KyAgICAgICAgbiA9IG4gLSAxOworICAgICAgICB2YXIgcyA9IDEuNzAxNTg7 CisgICAgICAgIHJldHVybiBuICogbiAqICgocyArIDEpICogbiArIHMpICsg MTsKKyAgICB9OworICAgIC8qXAorICAgICAqIG1pbmEuZWxhc3RpYworICAg ICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogRWxhc3RpYyBlYXNpbmcK KyAgICAgLSBuIChudW1iZXIpIGlucHV0IDAuLjEKKyAgICAgPSAobnVtYmVy KSBvdXRwdXQgMC4uMQorICAgIFwqLworICAgIG1pbmEuZWxhc3RpYyA9IGZ1 bmN0aW9uIChuKSB7CisgICAgICAgIGlmIChuID09ICEhbikgeworICAgICAg ICAgICAgcmV0dXJuIG47CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE1h dGgucG93KDIsIC0xMCAqIG4pICogTWF0aC5zaW4oKG4gLSAuMDc1KSAqCisg ICAgICAgICAgICAoMiAqIE1hdGguUEkpIC8gLjMpICsgMTsKKyAgICB9Owor ICAgIC8qXAorICAgICAqIG1pbmEuYm91bmNlCisgICAgIFsgbWV0aG9kIF0K KyAgICAgKioKKyAgICAgKiBCb3VuY2UgZWFzaW5nCisgICAgIC0gbiAobnVt YmVyKSBpbnB1dCAwLi4xCisgICAgID0gKG51bWJlcikgb3V0cHV0IDAuLjEK KyAgICBcKi8KKyAgICBtaW5hLmJvdW5jZSA9IGZ1bmN0aW9uIChuKSB7Cisg ICAgICAgIHZhciBzID0gNy41NjI1LAorICAgICAgICAgICAgcCA9IDIuNzUs CisgICAgICAgICAgICBsOworICAgICAgICBpZiAobiA8ICgxIC8gcCkpIHsK KyAgICAgICAgICAgIGwgPSBzICogbiAqIG47CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICBpZiAobiA8ICgyIC8gcCkpIHsKKyAgICAgICAgICAg ICAgICBuIC09ICgxLjUgLyBwKTsKKyAgICAgICAgICAgICAgICBsID0gcyAq IG4gKiBuICsgLjc1OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgICAgICBpZiAobiA8ICgyLjUgLyBwKSkgeworICAgICAgICAgICAgICAg ICAgICBuIC09ICgyLjI1IC8gcCk7CisgICAgICAgICAgICAgICAgICAgIGwg PSBzICogbiAqIG4gKyAuOTM3NTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICAgICAgICBuIC09ICgyLjYyNSAvIHApOworICAg ICAgICAgICAgICAgICAgICBsID0gcyAqIG4gKiBuICsgLjk4NDM3NTsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICAgICAgcmV0dXJuIGw7CisgICAgfTsKKyAgICB3aW5kb3cubWluYSA9IG1p bmE7CisgICAgcmV0dXJuIG1pbmE7Cit9KSh0eXBlb2YgZXZlID09ICJ1bmRl ZmluZWQiID8gZnVuY3Rpb24gKCkge30gOiBldmUpOworLy8gQ29weXJpZ2h0 IChjKSAyMDEzIC0gMjAxNSBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4g QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0 aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2Ui KTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNv bXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWlu IGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vIGh0dHA6Ly93d3cu YXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVz cyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4g d3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBM aWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisv LyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lO RCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGlj ZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJt aXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNl LgorCit2YXIgU25hcCA9IChmdW5jdGlvbihyb290KSB7CitTbmFwLnZlcnNp b24gPSAiMC40LjAiOworLypcCisgKiBTbmFwCisgWyBtZXRob2QgXQorICoq CisgKiBDcmVhdGVzIGEgZHJhd2luZyBzdXJmYWNlIG9yIHdyYXBzIGV4aXN0 aW5nIFNWRyBlbGVtZW50LgorICoqCisgLSB3aWR0aCAobnVtYmVyfHN0cmlu Zykgd2lkdGggb2Ygc3VyZmFjZQorIC0gaGVpZ2h0IChudW1iZXJ8c3RyaW5n KSBoZWlnaHQgb2Ygc3VyZmFjZQorICogb3IKKyAtIERPTSAoU1ZHRWxlbWVu dCkgZWxlbWVudCB0byBiZSB3cmFwcGVkIGludG8gU25hcCBzdHJ1Y3R1cmUK KyAqIG9yCisgLSBhcnJheSAoYXJyYXkpIGFycmF5IG9mIGVsZW1lbnRzICh3 aWxsIHJldHVybiBzZXQgb2YgZWxlbWVudHMpCisgKiBvcgorIC0gcXVlcnkg KHN0cmluZykgQ1NTIHF1ZXJ5IHNlbGVjdG9yCisgPSAob2JqZWN0KSBARWxl bWVudAorXCovCitmdW5jdGlvbiBTbmFwKHcsIGgpIHsKKyAgICBpZiAodykg eworICAgICAgICBpZiAody5ub2RlVHlwZSkgeworICAgICAgICAgICAgcmV0 dXJuIHdyYXAodyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzKHcsICJh cnJheSIpICYmIFNuYXAuc2V0KSB7CisgICAgICAgICAgICByZXR1cm4gU25h cC5zZXQuYXBwbHkoU25hcCwgdyk7CisgICAgICAgIH0KKyAgICAgICAgaWYg KHcgaW5zdGFuY2VvZiBFbGVtZW50KSB7CisgICAgICAgICAgICByZXR1cm4g dzsKKyAgICAgICAgfQorICAgICAgICBpZiAoaCA9PSBudWxsKSB7CisgICAg ICAgICAgICB3ID0gZ2xvYi5kb2MucXVlcnlTZWxlY3RvcihTdHJpbmcodykp OworICAgICAgICAgICAgcmV0dXJuIHdyYXAodyk7CisgICAgICAgIH0KKyAg ICB9CisgICAgdyA9IHcgPT0gbnVsbCA/ICIxMDAlIiA6IHc7CisgICAgaCA9 IGggPT0gbnVsbCA/ICIxMDAlIiA6IGg7CisgICAgcmV0dXJuIG5ldyBQYXBl cih3LCBoKTsKK30KK1NuYXAudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7Cisg ICAgcmV0dXJuICJTbmFwIHYiICsgdGhpcy52ZXJzaW9uOworfTsKK1NuYXAu XyA9IHt9OwordmFyIGdsb2IgPSB7CisgICAgd2luOiByb290LndpbmRvdywK KyAgICBkb2M6IHJvb3Qud2luZG93LmRvY3VtZW50Cit9OworU25hcC5fLmds b2IgPSBnbG9iOwordmFyIGhhcyA9ICJoYXNPd25Qcm9wZXJ0eSIsCisgICAg U3RyID0gU3RyaW5nLAorICAgIHRvRmxvYXQgPSBwYXJzZUZsb2F0LAorICAg IHRvSW50ID0gcGFyc2VJbnQsCisgICAgbWF0aCA9IE1hdGgsCisgICAgbW1h eCA9IG1hdGgubWF4LAorICAgIG1taW4gPSBtYXRoLm1pbiwKKyAgICBhYnMg PSBtYXRoLmFicywKKyAgICBwb3cgPSBtYXRoLnBvdywKKyAgICBQSSA9IG1h dGguUEksCisgICAgcm91bmQgPSBtYXRoLnJvdW5kLAorICAgIEUgPSAiIiwK KyAgICBTID0gIiAiLAorICAgIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnBy b3RvdHlwZS50b1N0cmluZywKKyAgICBJU1VSTCA9IC9edXJsXChbJyJdPyhb XlwpXSs/KVsnIl0/XCkkL2ksCisgICAgY29sb3VyUmVnRXhwID0gL15ccyoo KCNbYS1mXGRdezZ9KXwoI1thLWZcZF17M30pfHJnYmE/XChccyooW1xkXC5d KyU/XHMqLFxzKltcZFwuXSslP1xzKixccypbXGRcLl0rJT8oPzpccyosXHMq W1xkXC5dKyU/KT8pXHMqXCl8aHNiYT9cKFxzKihbXGRcLl0rKD86ZGVnfFx4 YjB8JSk/XHMqLFxzKltcZFwuXSslP1xzKixccypbXGRcLl0rKD86JT9ccyos XHMqW1xkXC5dKyk/JT8pXHMqXCl8aHNsYT9cKFxzKihbXGRcLl0rKD86ZGVn fFx4YjB8JSk/XHMqLFxzKltcZFwuXSslP1xzKixccypbXGRcLl0rKD86JT9c cyosXHMqW1xkXC5dKyk/JT8pXHMqXCkpXHMqJC9pLAorICAgIGJlemllcnJn ID0gL14oPzpjdWJpYy0pP2JlemllclwoKFteLF0rKSwoW14sXSspLChbXixd KyksKFteXCldKylcKS8sCisgICAgcmVVUkxWYWx1ZSA9IC9edXJsXCgjPyhb XildKylcKSQvLAorICAgIHNlcGFyYXRvciA9IFNuYXAuXy5zZXBhcmF0b3Ig PSAvWyxcc10rLywKKyAgICB3aGl0ZXNwYWNlID0gL1tcc10vZywKKyAgICBj b21tYVNwYWNlcyA9IC9bXHNdKixbXHNdKi8sCisgICAgaHNyZyA9IHtoczog MSwgcmc6IDF9LAorICAgIHBhdGhDb21tYW5kID0gLyhbYS16XSlbXHMsXSoo KC0/XGQqXC4/XGQqKD86ZVtcLStdP1xkKyk/W1xzXSosP1tcc10qKSspL2ln LAorICAgIHRDb21tYW5kID0gLyhbcnN0bV0pW1xzLF0qKCgtP1xkKlwuP1xk Kig/OmVbXC0rXT9cZCspP1tcc10qLD9bXHNdKikrKS9pZywKKyAgICBwYXRo VmFsdWVzID0gLygtP1xkKlwuP1xkKig/OmVbXC0rXT9cXGQrKT8pW1xzXSos P1tcc10qL2lnLAorICAgIGlkZ2VuID0gMCwKKyAgICBpZHByZWZpeCA9ICJT IiArICgrbmV3IERhdGUpLnRvU3RyaW5nKDM2KSwKKyAgICBJRCA9IGZ1bmN0 aW9uIChlbCkgeworICAgICAgICByZXR1cm4gKGVsICYmIGVsLnR5cGUgPyBl bC50eXBlIDogRSkgKyBpZHByZWZpeCArIChpZGdlbisrKS50b1N0cmluZygz Nik7CisgICAgfSwKKyAgICB4bGluayA9ICJodHRwOi8vd3d3LnczLm9yZy8x OTk5L3hsaW5rIiwKKyAgICB4bWxucyA9ICJodHRwOi8vd3d3LnczLm9yZy8y MDAwL3N2ZyIsCisgICAgaHViID0ge30sCisgICAgVVJMID0gU25hcC51cmwg PSBmdW5jdGlvbiAodXJsKSB7CisgICAgICAgIHJldHVybiAidXJsKCcjIiAr IHVybCArICInKSI7CisgICAgfTsKKworZnVuY3Rpb24gJChlbCwgYXR0cikg eworICAgIGlmIChhdHRyKSB7CisgICAgICAgIGlmIChlbCA9PSAiI3RleHQi KSB7CisgICAgICAgICAgICBlbCA9IGdsb2IuZG9jLmNyZWF0ZVRleHROb2Rl KGF0dHIudGV4dCB8fCBhdHRyWyIjdGV4dCJdIHx8ICIiKTsKKyAgICAgICAg fQorICAgICAgICBpZiAoZWwgPT0gIiNjb21tZW50IikgeworICAgICAgICAg ICAgZWwgPSBnbG9iLmRvYy5jcmVhdGVDb21tZW50KGF0dHIudGV4dCB8fCBh dHRyWyIjdGV4dCJdIHx8ICIiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo dHlwZW9mIGVsID09ICJzdHJpbmciKSB7CisgICAgICAgICAgICBlbCA9ICQo ZWwpOworICAgICAgICB9CisgICAgICAgIGlmICh0eXBlb2YgYXR0ciA9PSAi c3RyaW5nIikgeworICAgICAgICAgICAgaWYgKGVsLm5vZGVUeXBlID09IDEp IHsKKyAgICAgICAgICAgICAgICBpZiAoYXR0ci5zdWJzdHJpbmcoMCwgNikg PT0gInhsaW5rOiIpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVs LmdldEF0dHJpYnV0ZU5TKHhsaW5rLCBhdHRyLnN1YnN0cmluZyg2KSk7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChhdHRyLnN1 YnN0cmluZygwLCA0KSA9PSAieG1sOiIpIHsKKyAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZU5TKHhtbG5zLCBhdHRyLnN1YnN0 cmluZyg0KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IHJldHVybiBlbC5nZXRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgICAgICB9 IGVsc2UgaWYgKGF0dHIgPT0gInRleHQiKSB7CisgICAgICAgICAgICAgICAg cmV0dXJuIGVsLm5vZGVWYWx1ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICAgICAgaWYgKGVsLm5vZGVUeXBlID09IDEpIHsKKyAg ICAgICAgICAgIGZvciAodmFyIGtleSBpbiBhdHRyKSBpZiAoYXR0cltoYXNd KGtleSkpIHsKKyAgICAgICAgICAgICAgICB2YXIgdmFsID0gU3RyKGF0dHJb a2V5XSk7CisgICAgICAgICAgICAgICAgaWYgKHZhbCkgeworICAgICAgICAg ICAgICAgICAgICBpZiAoa2V5LnN1YnN0cmluZygwLCA2KSA9PSAieGxpbms6 IikgeworICAgICAgICAgICAgICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRl TlMoeGxpbmssIGtleS5zdWJzdHJpbmcoNiksIHZhbCk7CisgICAgICAgICAg ICAgICAgICAgIH0gZWxzZSBpZiAoa2V5LnN1YnN0cmluZygwLCA0KSA9PSAi eG1sOiIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsLnNldEF0dHJp YnV0ZU5TKHhtbG5zLCBrZXkuc3Vic3RyaW5nKDQpLCB2YWwpOworICAgICAg ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg ICAgZWwuc2V0QXR0cmlidXRlKGtleSwgdmFsKTsKKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShrZXkpOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICgi dGV4dCIgaW4gYXR0cikgeworICAgICAgICAgICAgZWwubm9kZVZhbHVlID0g YXR0ci50ZXh0OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg ZWwgPSBnbG9iLmRvYy5jcmVhdGVFbGVtZW50TlMoeG1sbnMsIGVsKTsKKyAg ICB9CisgICAgcmV0dXJuIGVsOworfQorU25hcC5fLiQgPSAkOworU25hcC5f LmlkID0gSUQ7CitmdW5jdGlvbiBnZXRBdHRycyhlbCkgeworICAgIHZhciBh dHRycyA9IGVsLmF0dHJpYnV0ZXMsCisgICAgICAgIG5hbWUsCisgICAgICAg IG91dCA9IHt9OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cnMubGVu Z3RoOyBpKyspIHsKKyAgICAgICAgaWYgKGF0dHJzW2ldLm5hbWVzcGFjZVVS SSA9PSB4bGluaykgeworICAgICAgICAgICAgbmFtZSA9ICJ4bGluazoiOwor ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbmFtZSA9ICIiOworICAg ICAgICB9CisgICAgICAgIG5hbWUgKz0gYXR0cnNbaV0ubmFtZTsKKyAgICAg ICAgb3V0W25hbWVdID0gYXR0cnNbaV0udGV4dENvbnRlbnQ7CisgICAgfQor ICAgIHJldHVybiBvdXQ7Cit9CitmdW5jdGlvbiBpcyhvLCB0eXBlKSB7Cisg ICAgdHlwZSA9IFN0ci5wcm90b3R5cGUudG9Mb3dlckNhc2UuY2FsbCh0eXBl KTsKKyAgICBpZiAodHlwZSA9PSAiZmluaXRlIikgeworICAgICAgICByZXR1 cm4gaXNGaW5pdGUobyk7CisgICAgfQorICAgIGlmICh0eXBlID09ICJhcnJh eSIgJiYKKyAgICAgICAgKG8gaW5zdGFuY2VvZiBBcnJheSB8fCBBcnJheS5p c0FycmF5ICYmIEFycmF5LmlzQXJyYXkobykpKSB7CisgICAgICAgIHJldHVy biB0cnVlOworICAgIH0KKyAgICByZXR1cm4gICh0eXBlID09ICJudWxsIiAm JiBvID09PSBudWxsKSB8fAorICAgICAgICAgICAgKHR5cGUgPT0gdHlwZW9m IG8gJiYgbyAhPT0gbnVsbCkgfHwKKyAgICAgICAgICAgICh0eXBlID09ICJv YmplY3QiICYmIG8gPT09IE9iamVjdChvKSkgfHwKKyAgICAgICAgICAgIG9i amVjdFRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNl KCkgPT0gdHlwZTsKK30KKy8qXAorICogU25hcC5mb3JtYXQKKyBbIG1ldGhv ZCBdCisgKioKKyAqIFJlcGxhY2VzIGNvbnN0cnVjdGlvbiBvZiB0eXBlIGB7 PG5hbWU+fWAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQKKyAqKgor IC0gdG9rZW4gKHN0cmluZykgc3RyaW5nIHRvIGZvcm1hdAorIC0ganNvbiAo b2JqZWN0KSBvYmplY3Qgd2hpY2ggcHJvcGVydGllcyBhcmUgdXNlZCBhcyBh IHJlcGxhY2VtZW50CisgPSAoc3RyaW5nKSBmb3JtYXR0ZWQgc3RyaW5nCisg PiBVc2FnZQorIHwgLy8gdGhpcyBkcmF3cyBhIHJlY3Rhbmd1bGFyIHNoYXBl IGVxdWl2YWxlbnQgdG8gIk0xMCwyMGg0MHY1MGgtNDB6IgorIHwgcGFwZXIu cGF0aChTbmFwLmZvcm1hdCgiTXt4fSx7eX1oe2RpbS53aWR0aH12e2RpbS5o ZWlnaHR9aHtkaW1bJ25lZ2F0aXZlIHdpZHRoJ119eiIsIHsKKyB8ICAgICB4 OiAxMCwKKyB8ICAgICB5OiAyMCwKKyB8ICAgICBkaW06IHsKKyB8ICAgICAg ICAgd2lkdGg6IDQwLAorIHwgICAgICAgICBoZWlnaHQ6IDUwLAorIHwgICAg ICAgICAibmVnYXRpdmUgd2lkdGgiOiAtNDAKKyB8ICAgICB9CisgfCB9KSk7 CitcKi8KK1NuYXAuZm9ybWF0ID0gKGZ1bmN0aW9uICgpIHsKKyAgICB2YXIg dG9rZW5SZWdleCA9IC9ceyhbXlx9XSspXH0vZywKKyAgICAgICAgb2JqTm90 YXRpb25SZWdleCA9IC8oPzooPzpefFwuKSguKz8pKD89XFt8XC58JHxcKCl8 XFsoJ3wiKSguKz8pXDJcXSkoXChcKSk/L2csIC8vIG1hdGNoZXMgLnh4eHh4 IG9yIFsieHh4eHgiXSB0byBydW4gb3ZlciBvYmplY3QgcHJvcGVydGllcwor ICAgICAgICByZXBsYWNlciA9IGZ1bmN0aW9uIChhbGwsIGtleSwgb2JqKSB7 CisgICAgICAgICAgICB2YXIgcmVzID0gb2JqOworICAgICAgICAgICAga2V5 LnJlcGxhY2Uob2JqTm90YXRpb25SZWdleCwgZnVuY3Rpb24gKGFsbCwgbmFt ZSwgcXVvdGUsIHF1b3RlZE5hbWUsIGlzRnVuYykgeworICAgICAgICAgICAg ICAgIG5hbWUgPSBuYW1lIHx8IHF1b3RlZE5hbWU7CisgICAgICAgICAgICAg ICAgaWYgKHJlcykgeworICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSBp biByZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IHJlc1tu YW1lXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgICB0eXBlb2YgcmVzID09ICJmdW5jdGlvbiIgJiYgaXNGdW5jICYmIChy ZXMgPSByZXMoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fSk7CisgICAgICAgICAgICByZXMgPSAocmVzID09IG51bGwgfHwgcmVzID09 IG9iaiA/IGFsbCA6IHJlcykgKyAiIjsKKyAgICAgICAgICAgIHJldHVybiBy ZXM7CisgICAgICAgIH07CisgICAgcmV0dXJuIGZ1bmN0aW9uIChzdHIsIG9i aikgeworICAgICAgICByZXR1cm4gU3RyKHN0cikucmVwbGFjZSh0b2tlblJl Z2V4LCBmdW5jdGlvbiAoYWxsLCBrZXkpIHsKKyAgICAgICAgICAgIHJldHVy biByZXBsYWNlcihhbGwsIGtleSwgb2JqKTsKKyAgICAgICAgfSk7CisgICAg fTsKK30pKCk7CitmdW5jdGlvbiBjbG9uZShvYmopIHsKKyAgICBpZiAodHlw ZW9mIG9iaiA9PSAiZnVuY3Rpb24iIHx8IE9iamVjdChvYmopICE9PSBvYmop IHsKKyAgICAgICAgcmV0dXJuIG9iajsKKyAgICB9CisgICAgdmFyIHJlcyA9 IG5ldyBvYmouY29uc3RydWN0b3I7CisgICAgZm9yICh2YXIga2V5IGluIG9i aikgaWYgKG9ialtoYXNdKGtleSkpIHsKKyAgICAgICAgcmVzW2tleV0gPSBj bG9uZShvYmpba2V5XSk7CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CitT bmFwLl8uY2xvbmUgPSBjbG9uZTsKK2Z1bmN0aW9uIHJlcHVzaChhcnJheSwg aXRlbSkgeworICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGFycmF5Lmxlbmd0 aDsgaSA8IGlpOyBpKyspIGlmIChhcnJheVtpXSA9PT0gaXRlbSkgeworICAg ICAgICByZXR1cm4gYXJyYXkucHVzaChhcnJheS5zcGxpY2UoaSwgMSlbMF0p OworICAgIH0KK30KK2Z1bmN0aW9uIGNhY2hlcihmLCBzY29wZSwgcG9zdHBy b2Nlc3NvcikgeworICAgIGZ1bmN0aW9uIG5ld2YoKSB7CisgICAgICAgIHZh ciBhcmcgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMs IDApLAorICAgICAgICAgICAgYXJncyA9IGFyZy5qb2luKCJcdTI0MDAiKSwK KyAgICAgICAgICAgIGNhY2hlID0gbmV3Zi5jYWNoZSA9IG5ld2YuY2FjaGUg fHwge30sCisgICAgICAgICAgICBjb3VudCA9IG5ld2YuY291bnQgPSBuZXdm LmNvdW50IHx8IFtdOworICAgICAgICBpZiAoY2FjaGVbaGFzXShhcmdzKSkg eworICAgICAgICAgICAgcmVwdXNoKGNvdW50LCBhcmdzKTsKKyAgICAgICAg ICAgIHJldHVybiBwb3N0cHJvY2Vzc29yID8gcG9zdHByb2Nlc3NvcihjYWNo ZVthcmdzXSkgOiBjYWNoZVthcmdzXTsKKyAgICAgICAgfQorICAgICAgICBj b3VudC5sZW5ndGggPj0gMWUzICYmIGRlbGV0ZSBjYWNoZVtjb3VudC5zaGlm dCgpXTsKKyAgICAgICAgY291bnQucHVzaChhcmdzKTsKKyAgICAgICAgY2Fj aGVbYXJnc10gPSBmLmFwcGx5KHNjb3BlLCBhcmcpOworICAgICAgICByZXR1 cm4gcG9zdHByb2Nlc3NvciA/IHBvc3Rwcm9jZXNzb3IoY2FjaGVbYXJnc10p IDogY2FjaGVbYXJnc107CisgICAgfQorICAgIHJldHVybiBuZXdmOworfQor U25hcC5fLmNhY2hlciA9IGNhY2hlcjsKK2Z1bmN0aW9uIGFuZ2xlKHgxLCB5 MSwgeDIsIHkyLCB4MywgeTMpIHsKKyAgICBpZiAoeDMgPT0gbnVsbCkgewor ICAgICAgICB2YXIgeCA9IHgxIC0geDIsCisgICAgICAgICAgICB5ID0geTEg LSB5MjsKKyAgICAgICAgaWYgKCF4ICYmICF5KSB7CisgICAgICAgICAgICBy ZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKDE4MCArIG1h dGguYXRhbjIoLXksIC14KSAqIDE4MCAvIFBJICsgMzYwKSAlIDM2MDsKKyAg ICB9IGVsc2UgeworICAgICAgICByZXR1cm4gYW5nbGUoeDEsIHkxLCB4Mywg eTMpIC0gYW5nbGUoeDIsIHkyLCB4MywgeTMpOworICAgIH0KK30KK2Z1bmN0 aW9uIHJhZChkZWcpIHsKKyAgICByZXR1cm4gZGVnICUgMzYwICogUEkgLyAx ODA7Cit9CitmdW5jdGlvbiBkZWcocmFkKSB7CisgICAgcmV0dXJuIHJhZCAq IDE4MCAvIFBJICUgMzYwOworfQorZnVuY3Rpb24geF95KCkgeworICAgIHJl dHVybiB0aGlzLnggKyBTICsgdGhpcy55OworfQorZnVuY3Rpb24geF95X3df aCgpIHsKKyAgICByZXR1cm4gdGhpcy54ICsgUyArIHRoaXMueSArIFMgKyB0 aGlzLndpZHRoICsgIiBceGQ3ICIgKyB0aGlzLmhlaWdodDsKK30KKworLypc CisgKiBTbmFwLnJhZAorIFsgbWV0aG9kIF0KKyAqKgorICogVHJhbnNmb3Jt IGFuZ2xlIHRvIHJhZGlhbnMKKyAtIGRlZyAobnVtYmVyKSBhbmdsZSBpbiBk ZWdyZWVzCisgPSAobnVtYmVyKSBhbmdsZSBpbiByYWRpYW5zCitcKi8KK1Nu YXAucmFkID0gcmFkOworLypcCisgKiBTbmFwLmRlZworIFsgbWV0aG9kIF0K KyAqKgorICogVHJhbnNmb3JtIGFuZ2xlIHRvIGRlZ3JlZXMKKyAtIHJhZCAo bnVtYmVyKSBhbmdsZSBpbiByYWRpYW5zCisgPSAobnVtYmVyKSBhbmdsZSBp biBkZWdyZWVzCitcKi8KK1NuYXAuZGVnID0gZGVnOworLypcCisgKiBTbmFw LnNpbgorIFsgbWV0aG9kIF0KKyAqKgorICogRXF1aXZhbGVudCB0byBgTWF0 aC5zaW4oKWAgb25seSB3b3JrcyB3aXRoIGRlZ3JlZXMsIG5vdCByYWRpYW5z LgorIC0gYW5nbGUgKG51bWJlcikgYW5nbGUgaW4gZGVncmVlcworID0gKG51 bWJlcikgc2luCitcKi8KK1NuYXAuc2luID0gZnVuY3Rpb24gKGFuZ2xlKSB7 CisgICAgcmV0dXJuIG1hdGguc2luKFNuYXAucmFkKGFuZ2xlKSk7Cit9Owor LypcCisgKiBTbmFwLnRhbgorIFsgbWV0aG9kIF0KKyAqKgorICogRXF1aXZh bGVudCB0byBgTWF0aC50YW4oKWAgb25seSB3b3JrcyB3aXRoIGRlZ3JlZXMs IG5vdCByYWRpYW5zLgorIC0gYW5nbGUgKG51bWJlcikgYW5nbGUgaW4gZGVn cmVlcworID0gKG51bWJlcikgdGFuCitcKi8KK1NuYXAudGFuID0gZnVuY3Rp b24gKGFuZ2xlKSB7CisgICAgcmV0dXJuIG1hdGgudGFuKFNuYXAucmFkKGFu Z2xlKSk7Cit9OworLypcCisgKiBTbmFwLmNvcworIFsgbWV0aG9kIF0KKyAq KgorICogRXF1aXZhbGVudCB0byBgTWF0aC5jb3MoKWAgb25seSB3b3JrcyB3 aXRoIGRlZ3JlZXMsIG5vdCByYWRpYW5zLgorIC0gYW5nbGUgKG51bWJlcikg YW5nbGUgaW4gZGVncmVlcworID0gKG51bWJlcikgY29zCitcKi8KK1NuYXAu Y29zID0gZnVuY3Rpb24gKGFuZ2xlKSB7CisgICAgcmV0dXJuIG1hdGguY29z KFNuYXAucmFkKGFuZ2xlKSk7Cit9OworLypcCisgKiBTbmFwLmFzaW4KKyBb IG1ldGhvZCBdCisgKioKKyAqIEVxdWl2YWxlbnQgdG8gYE1hdGguYXNpbigp YCBvbmx5IHdvcmtzIHdpdGggZGVncmVlcywgbm90IHJhZGlhbnMuCisgLSBu dW0gKG51bWJlcikgdmFsdWUKKyA9IChudW1iZXIpIGFzaW4gaW4gZGVncmVl cworXCovCitTbmFwLmFzaW4gPSBmdW5jdGlvbiAobnVtKSB7CisgICAgcmV0 dXJuIFNuYXAuZGVnKG1hdGguYXNpbihudW0pKTsKK307CisvKlwKKyAqIFNu YXAuYWNvcworIFsgbWV0aG9kIF0KKyAqKgorICogRXF1aXZhbGVudCB0byBg TWF0aC5hY29zKClgIG9ubHkgd29ya3Mgd2l0aCBkZWdyZWVzLCBub3QgcmFk aWFucy4KKyAtIG51bSAobnVtYmVyKSB2YWx1ZQorID0gKG51bWJlcikgYWNv cyBpbiBkZWdyZWVzCitcKi8KK1NuYXAuYWNvcyA9IGZ1bmN0aW9uIChudW0p IHsKKyAgICByZXR1cm4gU25hcC5kZWcobWF0aC5hY29zKG51bSkpOworfTsK Ky8qXAorICogU25hcC5hdGFuCisgWyBtZXRob2QgXQorICoqCisgKiBFcXVp dmFsZW50IHRvIGBNYXRoLmF0YW4oKWAgb25seSB3b3JrcyB3aXRoIGRlZ3Jl ZXMsIG5vdCByYWRpYW5zLgorIC0gbnVtIChudW1iZXIpIHZhbHVlCisgPSAo bnVtYmVyKSBhdGFuIGluIGRlZ3JlZXMKK1wqLworU25hcC5hdGFuID0gZnVu Y3Rpb24gKG51bSkgeworICAgIHJldHVybiBTbmFwLmRlZyhtYXRoLmF0YW4o bnVtKSk7Cit9OworLypcCisgKiBTbmFwLmF0YW4yCisgWyBtZXRob2QgXQor ICoqCisgKiBFcXVpdmFsZW50IHRvIGBNYXRoLmF0YW4yKClgIG9ubHkgd29y a3Mgd2l0aCBkZWdyZWVzLCBub3QgcmFkaWFucy4KKyAtIG51bSAobnVtYmVy KSB2YWx1ZQorID0gKG51bWJlcikgYXRhbjIgaW4gZGVncmVlcworXCovCitT bmFwLmF0YW4yID0gZnVuY3Rpb24gKG51bSkgeworICAgIHJldHVybiBTbmFw LmRlZyhtYXRoLmF0YW4yKG51bSkpOworfTsKKy8qXAorICogU25hcC5hbmds ZQorIFsgbWV0aG9kIF0KKyAqKgorICogUmV0dXJucyBhbiBhbmdsZSBiZXR3 ZWVuIHR3byBvciB0aHJlZSBwb2ludHMKKyA+IFBhcmFtZXRlcnMKKyAtIHgx IChudW1iZXIpIHggY29vcmQgb2YgZmlyc3QgcG9pbnQKKyAtIHkxIChudW1i ZXIpIHkgY29vcmQgb2YgZmlyc3QgcG9pbnQKKyAtIHgyIChudW1iZXIpIHgg Y29vcmQgb2Ygc2Vjb25kIHBvaW50CisgLSB5MiAobnVtYmVyKSB5IGNvb3Jk IG9mIHNlY29uZCBwb2ludAorIC0geDMgKG51bWJlcikgI29wdGlvbmFsIHgg Y29vcmQgb2YgdGhpcmQgcG9pbnQKKyAtIHkzIChudW1iZXIpICNvcHRpb25h bCB5IGNvb3JkIG9mIHRoaXJkIHBvaW50CisgPSAobnVtYmVyKSBhbmdsZSBp biBkZWdyZWVzCitcKi8KK1NuYXAuYW5nbGUgPSBhbmdsZTsKKy8qXAorICog U25hcC5sZW4KKyBbIG1ldGhvZCBdCisgKioKKyAqIFJldHVybnMgZGlzdGFu Y2UgYmV0d2VlbiB0d28gcG9pbnRzCisgPiBQYXJhbWV0ZXJzCisgLSB4MSAo bnVtYmVyKSB4IGNvb3JkIG9mIGZpcnN0IHBvaW50CisgLSB5MSAobnVtYmVy KSB5IGNvb3JkIG9mIGZpcnN0IHBvaW50CisgLSB4MiAobnVtYmVyKSB4IGNv b3JkIG9mIHNlY29uZCBwb2ludAorIC0geTIgKG51bWJlcikgeSBjb29yZCBv ZiBzZWNvbmQgcG9pbnQKKyA9IChudW1iZXIpIGRpc3RhbmNlCitcKi8KK1Nu YXAubGVuID0gZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyKSB7CisgICAgcmV0 dXJuIE1hdGguc3FydChTbmFwLmxlbjIoeDEsIHkxLCB4MiwgeTIpKTsKK307 CisvKlwKKyAqIFNuYXAubGVuMgorIFsgbWV0aG9kIF0KKyAqKgorICogUmV0 dXJucyBzcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gdHdvIHBvaW50cworID4g UGFyYW1ldGVycworIC0geDEgKG51bWJlcikgeCBjb29yZCBvZiBmaXJzdCBw b2ludAorIC0geTEgKG51bWJlcikgeSBjb29yZCBvZiBmaXJzdCBwb2ludAor IC0geDIgKG51bWJlcikgeCBjb29yZCBvZiBzZWNvbmQgcG9pbnQKKyAtIHky IChudW1iZXIpIHkgY29vcmQgb2Ygc2Vjb25kIHBvaW50CisgPSAobnVtYmVy KSBkaXN0YW5jZQorXCovCitTbmFwLmxlbjIgPSBmdW5jdGlvbiAoeDEsIHkx LCB4MiwgeTIpIHsKKyAgICByZXR1cm4gKHgxIC0geDIpICogKHgxIC0geDIp ICsgKHkxIC0geTIpICogKHkxIC0geTIpOworfTsKKy8qXAorICogU25hcC5j bG9zZXN0UG9pbnQKKyBbIG1ldGhvZCBdCisgKioKKyAqIFJldHVybnMgY2xv c2VzdCBwb2ludCB0byBhIGdpdmVuIG9uZSBvbiBhIGdpdmVuIHBhdGguCisg PiBQYXJhbWV0ZXJzCisgLSBwYXRoIChFbGVtZW50KSBwYXRoIGVsZW1lbnQK KyAtIHggKG51bWJlcikgeCBjb29yZCBvZiBhIHBvaW50CisgLSB5IChudW1i ZXIpIHkgY29vcmQgb2YgYSBwb2ludAorID0gKG9iamVjdCkgaW4gZm9ybWF0 CisgeworICAgIHggKG51bWJlcikgeCBjb29yZCBvZiB0aGUgcG9pbnQgb24g dGhlIHBhdGgKKyAgICB5IChudW1iZXIpIHkgY29vcmQgb2YgdGhlIHBvaW50 IG9uIHRoZSBwYXRoCisgICAgbGVuZ3RoIChudW1iZXIpIGxlbmd0aCBvZiB0 aGUgcGF0aCB0byB0aGUgcG9pbnQKKyAgICBkaXN0YW5jZSAobnVtYmVyKSBk aXN0YW5jZSBmcm9tIHRoZSBnaXZlbiBwb2ludCB0byB0aGUgcGF0aAorIH0K K1wqLworLy8gQ29waWVkIGZyb20gaHR0cDovL2JsLm9ja3Mub3JnL21ib3N0 b2NrLzgwMjc2MzcKK1NuYXAuY2xvc2VzdFBvaW50ID0gZnVuY3Rpb24gKHBh dGgsIHgsIHkpIHsKKyAgICBmdW5jdGlvbiBkaXN0YW5jZTIocCkgeworICAg ICAgICB2YXIgZHggPSBwLnggLSB4LAorICAgICAgICAgICAgZHkgPSBwLnkg LSB5OworICAgICAgICByZXR1cm4gZHggKiBkeCArIGR5ICogZHk7CisgICAg fQorICAgIHZhciBwYXRoTm9kZSA9IHBhdGgubm9kZSwKKyAgICAgICAgcGF0 aExlbmd0aCA9IHBhdGhOb2RlLmdldFRvdGFsTGVuZ3RoKCksCisgICAgICAg IHByZWNpc2lvbiA9IHBhdGhMZW5ndGggLyBwYXRoTm9kZS5wYXRoU2VnTGlz dC5udW1iZXJPZkl0ZW1zICogLjEyNSwKKyAgICAgICAgYmVzdCwKKyAgICAg ICAgYmVzdExlbmd0aCwKKyAgICAgICAgYmVzdERpc3RhbmNlID0gSW5maW5p dHk7CisKKyAgICAvLyBsaW5lYXIgc2NhbiBmb3IgY29hcnNlIGFwcHJveGlt YXRpb24KKyAgICBmb3IgKHZhciBzY2FuLCBzY2FuTGVuZ3RoID0gMCwgc2Nh bkRpc3RhbmNlOyBzY2FuTGVuZ3RoIDw9IHBhdGhMZW5ndGg7IHNjYW5MZW5n dGggKz0gcHJlY2lzaW9uKSB7CisgICAgICAgIGlmICgoc2NhbkRpc3RhbmNl ID0gZGlzdGFuY2UyKHNjYW4gPSBwYXRoTm9kZS5nZXRQb2ludEF0TGVuZ3Ro KHNjYW5MZW5ndGgpKSkgPCBiZXN0RGlzdGFuY2UpIHsKKyAgICAgICAgICAg IGJlc3QgPSBzY2FuLCBiZXN0TGVuZ3RoID0gc2Nhbkxlbmd0aCwgYmVzdERp c3RhbmNlID0gc2NhbkRpc3RhbmNlOworICAgICAgICB9CisgICAgfQorCisg ICAgLy8gYmluYXJ5IHNlYXJjaCBmb3IgcHJlY2lzZSBlc3RpbWF0ZQorICAg IHByZWNpc2lvbiAqPSAuNTsKKyAgICB3aGlsZSAocHJlY2lzaW9uID4gLjUp IHsKKyAgICAgICAgdmFyIGJlZm9yZSwKKyAgICAgICAgICAgIGFmdGVyLAor ICAgICAgICAgICAgYmVmb3JlTGVuZ3RoLAorICAgICAgICAgICAgYWZ0ZXJM ZW5ndGgsCisgICAgICAgICAgICBiZWZvcmVEaXN0YW5jZSwKKyAgICAgICAg ICAgIGFmdGVyRGlzdGFuY2U7CisgICAgICAgIGlmICgoYmVmb3JlTGVuZ3Ro ID0gYmVzdExlbmd0aCAtIHByZWNpc2lvbikgPj0gMCAmJiAoYmVmb3JlRGlz dGFuY2UgPSBkaXN0YW5jZTIoYmVmb3JlID0gcGF0aE5vZGUuZ2V0UG9pbnRB dExlbmd0aChiZWZvcmVMZW5ndGgpKSkgPCBiZXN0RGlzdGFuY2UpIHsKKyAg ICAgICAgICAgIGJlc3QgPSBiZWZvcmUsIGJlc3RMZW5ndGggPSBiZWZvcmVM ZW5ndGgsIGJlc3REaXN0YW5jZSA9IGJlZm9yZURpc3RhbmNlOworICAgICAg ICB9IGVsc2UgaWYgKChhZnRlckxlbmd0aCA9IGJlc3RMZW5ndGggKyBwcmVj aXNpb24pIDw9IHBhdGhMZW5ndGggJiYgKGFmdGVyRGlzdGFuY2UgPSBkaXN0 YW5jZTIoYWZ0ZXIgPSBwYXRoTm9kZS5nZXRQb2ludEF0TGVuZ3RoKGFmdGVy TGVuZ3RoKSkpIDwgYmVzdERpc3RhbmNlKSB7CisgICAgICAgICAgICBiZXN0 ID0gYWZ0ZXIsIGJlc3RMZW5ndGggPSBhZnRlckxlbmd0aCwgYmVzdERpc3Rh bmNlID0gYWZ0ZXJEaXN0YW5jZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgIHByZWNpc2lvbiAqPSAuNTsKKyAgICAgICAgfQorICAgIH0KKwor ICAgIGJlc3QgPSB7CisgICAgICAgIHg6IGJlc3QueCwKKyAgICAgICAgeTog YmVzdC55LAorICAgICAgICBsZW5ndGg6IGJlc3RMZW5ndGgsCisgICAgICAg IGRpc3RhbmNlOiBNYXRoLnNxcnQoYmVzdERpc3RhbmNlKQorICAgIH07Cisg ICAgcmV0dXJuIGJlc3Q7Cit9CisvKlwKKyAqIFNuYXAuaXMKKyBbIG1ldGhv ZCBdCisgKioKKyAqIEhhbmR5IHJlcGxhY2VtZW50IGZvciB0aGUgYHR5cGVv ZmAgb3BlcmF0b3IKKyAtIG8gKOKApikgYW55IG9iamVjdCBvciBwcmltaXRp dmUKKyAtIHR5cGUgKHN0cmluZykgbmFtZSBvZiB0aGUgdHlwZSwgZS5nLiwg YHN0cmluZ2AsIGBmdW5jdGlvbmAsIGBudW1iZXJgLCBldGMuCisgPSAoYm9v bGVhbikgYHRydWVgIGlmIGdpdmVuIHZhbHVlIGlzIG9mIGdpdmVuIHR5cGUK K1wqLworU25hcC5pcyA9IGlzOworLypcCisgKiBTbmFwLnNuYXBUbworIFsg bWV0aG9kIF0KKyAqKgorICogU25hcHMgZ2l2ZW4gdmFsdWUgdG8gZ2l2ZW4g Z3JpZAorIC0gdmFsdWVzIChhcnJheXxudW1iZXIpIGdpdmVuIGFycmF5IG9m IHZhbHVlcyBvciBzdGVwIG9mIHRoZSBncmlkCisgLSB2YWx1ZSAobnVtYmVy KSB2YWx1ZSB0byBhZGp1c3QKKyAtIHRvbGVyYW5jZSAobnVtYmVyKSAjb3B0 aW9uYWwgbWF4aW11bSBkaXN0YW5jZSB0byB0aGUgdGFyZ2V0IHZhbHVlIHRo YXQgd291bGQgdHJpZ2dlciB0aGUgc25hcC4gRGVmYXVsdCBpcyBgMTBgLgor ID0gKG51bWJlcikgYWRqdXN0ZWQgdmFsdWUKK1wqLworU25hcC5zbmFwVG8g PSBmdW5jdGlvbiAodmFsdWVzLCB2YWx1ZSwgdG9sZXJhbmNlKSB7CisgICAg dG9sZXJhbmNlID0gaXModG9sZXJhbmNlLCAiZmluaXRlIikgPyB0b2xlcmFu Y2UgOiAxMDsKKyAgICBpZiAoaXModmFsdWVzLCAiYXJyYXkiKSkgeworICAg ICAgICB2YXIgaSA9IHZhbHVlcy5sZW5ndGg7CisgICAgICAgIHdoaWxlIChp LS0pIGlmIChhYnModmFsdWVzW2ldIC0gdmFsdWUpIDw9IHRvbGVyYW5jZSkg eworICAgICAgICAgICAgcmV0dXJuIHZhbHVlc1tpXTsKKyAgICAgICAgfQor ICAgIH0gZWxzZSB7CisgICAgICAgIHZhbHVlcyA9ICt2YWx1ZXM7CisgICAg ICAgIHZhciByZW0gPSB2YWx1ZSAlIHZhbHVlczsKKyAgICAgICAgaWYgKHJl bSA8IHRvbGVyYW5jZSkgeworICAgICAgICAgICAgcmV0dXJuIHZhbHVlIC0g cmVtOworICAgICAgICB9CisgICAgICAgIGlmIChyZW0gPiB2YWx1ZXMgLSB0 b2xlcmFuY2UpIHsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZSAtIHJlbSAr IHZhbHVlczsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdmFsdWU7 Cit9OworLy8gQ29sb3VyCisvKlwKKyAqIFNuYXAuZ2V0UkdCCisgWyBtZXRo b2QgXQorICoqCisgKiBQYXJzZXMgY29sb3Igc3RyaW5nIGFzIFJHQiBvYmpl Y3QKKyAtIGNvbG9yIChzdHJpbmcpIGNvbG9yIHN0cmluZyBpbiBvbmUgb2Yg dGhlIGZvbGxvd2luZyBmb3JtYXRzOgorICMgPHVsPgorICMgICAgIDxsaT5D b2xvciBuYW1lICg8Y29kZT5yZWQ8L2NvZGU+LCA8Y29kZT5ncmVlbjwvY29k ZT4sIDxjb2RlPmNvcm5mbG93ZXJibHVlPC9jb2RlPiwgZXRjKTwvbGk+Cisg IyAgICAgPGxpPiPigKLigKLigKIg4oCUIHNob3J0ZW5lZCBIVE1MIGNvbG9y OiAoPGNvZGU+IzAwMDwvY29kZT4sIDxjb2RlPiNmYzA8L2NvZGU+LCBldGMu KTwvbGk+CisgIyAgICAgPGxpPiPigKLigKLigKLigKLigKLigKIg4oCUIGZ1 bGwgbGVuZ3RoIEhUTUwgY29sb3I6ICg8Y29kZT4jMDAwMDAwPC9jb2RlPiwg PGNvZGU+I2JkMjMwMDwvY29kZT4pPC9saT4KKyAjICAgICA8bGk+cmdiKOKA ouKAouKAoiwg4oCi4oCi4oCiLCDigKLigKLigKIpIOKAlCByZWQsIGdyZWVu IGFuZCBibHVlIGNoYW5uZWxzIHZhbHVlczogKDxjb2RlPnJnYigyMDAsJm5i c3A7MTAwLCZuYnNwOzApPC9jb2RlPik8L2xpPgorICMgICAgIDxsaT5yZ2Jh KOKAouKAouKAoiwg4oCi4oCi4oCiLCDigKLigKLigKIsIOKAouKAouKAoikg 4oCUIGFsc28gd2l0aCBvcGFjaXR5PC9saT4KKyAjICAgICA8bGk+cmdiKOKA ouKAouKAoiUsIOKAouKAouKAoiUsIOKAouKAouKAoiUpIOKAlCBzYW1lIGFz IGFib3ZlLCBidXQgaW4gJTogKDxjb2RlPnJnYigxMDAlLCZuYnNwOzE3NSUs Jm5ic3A7MCUpPC9jb2RlPik8L2xpPgorICMgICAgIDxsaT5yZ2JhKOKAouKA ouKAoiUsIOKAouKAouKAoiUsIOKAouKAouKAoiUsIOKAouKAouKAoiUpIOKA lCBhbHNvIHdpdGggb3BhY2l0eTwvbGk+CisgIyAgICAgPGxpPmhzYijigKLi gKLigKIsIOKAouKAouKAoiwg4oCi4oCi4oCiKSDigJQgaHVlLCBzYXR1cmF0 aW9uIGFuZCBicmlnaHRuZXNzIHZhbHVlczogKDxjb2RlPmhzYigwLjUsJm5i c3A7MC4yNSwmbmJzcDsxKTwvY29kZT4pPC9saT4KKyAjICAgICA8bGk+aHNi YSjigKLigKLigKIsIOKAouKAouKAoiwg4oCi4oCi4oCiLCDigKLigKLigKIp IOKAlCBhbHNvIHdpdGggb3BhY2l0eTwvbGk+CisgIyAgICAgPGxpPmhzYiji gKLigKLigKIlLCDigKLigKLigKIlLCDigKLigKLigKIlKSDigJQgc2FtZSBh cyBhYm92ZSwgYnV0IGluICU8L2xpPgorICMgICAgIDxsaT5oc2JhKOKAouKA ouKAoiUsIOKAouKAouKAoiUsIOKAouKAouKAoiUsIOKAouKAouKAoiUpIOKA lCBhbHNvIHdpdGggb3BhY2l0eTwvbGk+CisgIyAgICAgPGxpPmhzbCjigKLi gKLigKIsIOKAouKAouKAoiwg4oCi4oCi4oCiKSDigJQgaHVlLCBzYXR1cmF0 aW9uIGFuZCBsdW1pbm9zaXR5IHZhbHVlczogKDxjb2RlPmhzYigwLjUsJm5i c3A7MC4yNSwmbmJzcDswLjUpPC9jb2RlPik8L2xpPgorICMgICAgIDxsaT5o c2xhKOKAouKAouKAoiwg4oCi4oCi4oCiLCDigKLigKLigKIsIOKAouKAouKA oikg4oCUIGFsc28gd2l0aCBvcGFjaXR5PC9saT4KKyAjICAgICA8bGk+aHNs KOKAouKAouKAoiUsIOKAouKAouKAoiUsIOKAouKAouKAoiUpIOKAlCBzYW1l IGFzIGFib3ZlLCBidXQgaW4gJTwvbGk+CisgIyAgICAgPGxpPmhzbGEo4oCi 4oCi4oCiJSwg4oCi4oCi4oCiJSwg4oCi4oCi4oCiJSwg4oCi4oCi4oCiJSkg 4oCUIGFsc28gd2l0aCBvcGFjaXR5PC9saT4KKyAjIDwvdWw+CisgKiBOb3Rl IHRoYXQgYCVgIGNhbiBiZSB1c2VkIGFueSB0aW1lOiBgcmdiKDIwJSwgMjU1 LCA1MCUpYC4KKyA9IChvYmplY3QpIFJHQiBvYmplY3QgaW4gdGhlIGZvbGxv d2luZyBmb3JtYXQ6CisgbyB7CisgbyAgICAgciAobnVtYmVyKSByZWQsCisg byAgICAgZyAobnVtYmVyKSBncmVlbiwKKyBvICAgICBiIChudW1iZXIpIGJs dWUsCisgbyAgICAgaGV4IChzdHJpbmcpIGNvbG9yIGluIEhUTUwvQ1NTIGZv cm1hdDogI+KAouKAouKAouKAouKAouKAoiwKKyBvICAgICBlcnJvciAoYm9v bGVhbikgdHJ1ZSBpZiBzdHJpbmcgY2FuJ3QgYmUgcGFyc2VkCisgbyB9Citc Ki8KK1NuYXAuZ2V0UkdCID0gY2FjaGVyKGZ1bmN0aW9uIChjb2xvdXIpIHsK KyAgICBpZiAoIWNvbG91ciB8fCAhISgoY29sb3VyID0gU3RyKGNvbG91cikp LmluZGV4T2YoIi0iKSArIDEpKSB7CisgICAgICAgIHJldHVybiB7cjogLTEs IGc6IC0xLCBiOiAtMSwgaGV4OiAibm9uZSIsIGVycm9yOiAxLCB0b1N0cmlu ZzogcmdidG9TdHJpbmd9OworICAgIH0KKyAgICBpZiAoY29sb3VyID09ICJu b25lIikgeworICAgICAgICByZXR1cm4ge3I6IC0xLCBnOiAtMSwgYjogLTEs IGhleDogIm5vbmUiLCB0b1N0cmluZzogcmdidG9TdHJpbmd9OworICAgIH0K KyAgICAhKGhzcmdbaGFzXShjb2xvdXIudG9Mb3dlckNhc2UoKS5zdWJzdHJp bmcoMCwgMikpIHx8IGNvbG91ci5jaGFyQXQoKSA9PSAiIyIpICYmIChjb2xv dXIgPSB0b0hleChjb2xvdXIpKTsKKyAgICBpZiAoIWNvbG91cikgeworICAg ICAgICByZXR1cm4ge3I6IC0xLCBnOiAtMSwgYjogLTEsIGhleDogIm5vbmUi LCBlcnJvcjogMSwgdG9TdHJpbmc6IHJnYnRvU3RyaW5nfTsKKyAgICB9Cisg ICAgdmFyIHJlcywKKyAgICAgICAgcmVkLAorICAgICAgICBncmVlbiwKKyAg ICAgICAgYmx1ZSwKKyAgICAgICAgb3BhY2l0eSwKKyAgICAgICAgdCwKKyAg ICAgICAgdmFsdWVzLAorICAgICAgICByZ2IgPSBjb2xvdXIubWF0Y2goY29s b3VyUmVnRXhwKTsKKyAgICBpZiAocmdiKSB7CisgICAgICAgIGlmIChyZ2Jb Ml0pIHsKKyAgICAgICAgICAgIGJsdWUgPSB0b0ludChyZ2JbMl0uc3Vic3Ry aW5nKDUpLCAxNik7CisgICAgICAgICAgICBncmVlbiA9IHRvSW50KHJnYlsy XS5zdWJzdHJpbmcoMywgNSksIDE2KTsKKyAgICAgICAgICAgIHJlZCA9IHRv SW50KHJnYlsyXS5zdWJzdHJpbmcoMSwgMyksIDE2KTsKKyAgICAgICAgfQor ICAgICAgICBpZiAocmdiWzNdKSB7CisgICAgICAgICAgICBibHVlID0gdG9J bnQoKHQgPSByZ2JbM10uY2hhckF0KDMpKSArIHQsIDE2KTsKKyAgICAgICAg ICAgIGdyZWVuID0gdG9JbnQoKHQgPSByZ2JbM10uY2hhckF0KDIpKSArIHQs IDE2KTsKKyAgICAgICAgICAgIHJlZCA9IHRvSW50KCh0ID0gcmdiWzNdLmNo YXJBdCgxKSkgKyB0LCAxNik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJn Yls0XSkgeworICAgICAgICAgICAgdmFsdWVzID0gcmdiWzRdLnNwbGl0KGNv bW1hU3BhY2VzKTsKKyAgICAgICAgICAgIHJlZCA9IHRvRmxvYXQodmFsdWVz WzBdKTsKKyAgICAgICAgICAgIHZhbHVlc1swXS5zbGljZSgtMSkgPT0gIiUi ICYmIChyZWQgKj0gMi41NSk7CisgICAgICAgICAgICBncmVlbiA9IHRvRmxv YXQodmFsdWVzWzFdKTsKKyAgICAgICAgICAgIHZhbHVlc1sxXS5zbGljZSgt MSkgPT0gIiUiICYmIChncmVlbiAqPSAyLjU1KTsKKyAgICAgICAgICAgIGJs dWUgPSB0b0Zsb2F0KHZhbHVlc1syXSk7CisgICAgICAgICAgICB2YWx1ZXNb Ml0uc2xpY2UoLTEpID09ICIlIiAmJiAoYmx1ZSAqPSAyLjU1KTsKKyAgICAg ICAgICAgIHJnYlsxXS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsIDQpID09ICJy Z2JhIiAmJiAob3BhY2l0eSA9IHRvRmxvYXQodmFsdWVzWzNdKSk7CisgICAg ICAgICAgICB2YWx1ZXNbM10gJiYgdmFsdWVzWzNdLnNsaWNlKC0xKSA9PSAi JSIgJiYgKG9wYWNpdHkgLz0gMTAwKTsKKyAgICAgICAgfQorICAgICAgICBp ZiAocmdiWzVdKSB7CisgICAgICAgICAgICB2YWx1ZXMgPSByZ2JbNV0uc3Bs aXQoY29tbWFTcGFjZXMpOworICAgICAgICAgICAgcmVkID0gdG9GbG9hdCh2 YWx1ZXNbMF0pOworICAgICAgICAgICAgdmFsdWVzWzBdLnNsaWNlKC0xKSA9 PSAiJSIgJiYgKHJlZCAvPSAxMDApOworICAgICAgICAgICAgZ3JlZW4gPSB0 b0Zsb2F0KHZhbHVlc1sxXSk7CisgICAgICAgICAgICB2YWx1ZXNbMV0uc2xp Y2UoLTEpID09ICIlIiAmJiAoZ3JlZW4gLz0gMTAwKTsKKyAgICAgICAgICAg IGJsdWUgPSB0b0Zsb2F0KHZhbHVlc1syXSk7CisgICAgICAgICAgICB2YWx1 ZXNbMl0uc2xpY2UoLTEpID09ICIlIiAmJiAoYmx1ZSAvPSAxMDApOworICAg ICAgICAgICAgKHZhbHVlc1swXS5zbGljZSgtMykgPT0gImRlZyIgfHwgdmFs dWVzWzBdLnNsaWNlKC0xKSA9PSAiXHhiMCIpICYmIChyZWQgLz0gMzYwKTsK KyAgICAgICAgICAgIHJnYlsxXS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsIDQp ID09ICJoc2JhIiAmJiAob3BhY2l0eSA9IHRvRmxvYXQodmFsdWVzWzNdKSk7 CisgICAgICAgICAgICB2YWx1ZXNbM10gJiYgdmFsdWVzWzNdLnNsaWNlKC0x KSA9PSAiJSIgJiYgKG9wYWNpdHkgLz0gMTAwKTsKKyAgICAgICAgICAgIHJl dHVybiBTbmFwLmhzYjJyZ2IocmVkLCBncmVlbiwgYmx1ZSwgb3BhY2l0eSk7 CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJnYls2XSkgeworICAgICAgICAg ICAgdmFsdWVzID0gcmdiWzZdLnNwbGl0KGNvbW1hU3BhY2VzKTsKKyAgICAg ICAgICAgIHJlZCA9IHRvRmxvYXQodmFsdWVzWzBdKTsKKyAgICAgICAgICAg IHZhbHVlc1swXS5zbGljZSgtMSkgPT0gIiUiICYmIChyZWQgLz0gMTAwKTsK KyAgICAgICAgICAgIGdyZWVuID0gdG9GbG9hdCh2YWx1ZXNbMV0pOworICAg ICAgICAgICAgdmFsdWVzWzFdLnNsaWNlKC0xKSA9PSAiJSIgJiYgKGdyZWVu IC89IDEwMCk7CisgICAgICAgICAgICBibHVlID0gdG9GbG9hdCh2YWx1ZXNb Ml0pOworICAgICAgICAgICAgdmFsdWVzWzJdLnNsaWNlKC0xKSA9PSAiJSIg JiYgKGJsdWUgLz0gMTAwKTsKKyAgICAgICAgICAgICh2YWx1ZXNbMF0uc2xp Y2UoLTMpID09ICJkZWciIHx8IHZhbHVlc1swXS5zbGljZSgtMSkgPT0gIlx4 YjAiKSAmJiAocmVkIC89IDM2MCk7CisgICAgICAgICAgICByZ2JbMV0udG9M b3dlckNhc2UoKS5zbGljZSgwLCA0KSA9PSAiaHNsYSIgJiYgKG9wYWNpdHkg PSB0b0Zsb2F0KHZhbHVlc1szXSkpOworICAgICAgICAgICAgdmFsdWVzWzNd ICYmIHZhbHVlc1szXS5zbGljZSgtMSkgPT0gIiUiICYmIChvcGFjaXR5IC89 IDEwMCk7CisgICAgICAgICAgICByZXR1cm4gU25hcC5oc2wycmdiKHJlZCwg Z3JlZW4sIGJsdWUsIG9wYWNpdHkpOworICAgICAgICB9CisgICAgICAgIHJl ZCA9IG1taW4obWF0aC5yb3VuZChyZWQpLCAyNTUpOworICAgICAgICBncmVl biA9IG1taW4obWF0aC5yb3VuZChncmVlbiksIDI1NSk7CisgICAgICAgIGJs dWUgPSBtbWluKG1hdGgucm91bmQoYmx1ZSksIDI1NSk7CisgICAgICAgIG9w YWNpdHkgPSBtbWluKG1tYXgob3BhY2l0eSwgMCksIDEpOworICAgICAgICBy Z2IgPSB7cjogcmVkLCBnOiBncmVlbiwgYjogYmx1ZSwgdG9TdHJpbmc6IHJn YnRvU3RyaW5nfTsKKyAgICAgICAgcmdiLmhleCA9ICIjIiArICgxNjc3NzIx NiB8IGJsdWUgfCAoZ3JlZW4gPDwgOCkgfCAocmVkIDw8IDE2KSkudG9TdHJp bmcoMTYpLnNsaWNlKDEpOworICAgICAgICByZ2Iub3BhY2l0eSA9IGlzKG9w YWNpdHksICJmaW5pdGUiKSA/IG9wYWNpdHkgOiAxOworICAgICAgICByZXR1 cm4gcmdiOworICAgIH0KKyAgICByZXR1cm4ge3I6IC0xLCBnOiAtMSwgYjog LTEsIGhleDogIm5vbmUiLCBlcnJvcjogMSwgdG9TdHJpbmc6IHJnYnRvU3Ry aW5nfTsKK30sIFNuYXApOworLypcCisgKiBTbmFwLmhzYgorIFsgbWV0aG9k IF0KKyAqKgorICogQ29udmVydHMgSFNCIHZhbHVlcyB0byBhIGhleCByZXBy ZXNlbnRhdGlvbiBvZiB0aGUgY29sb3IKKyAtIGggKG51bWJlcikgaHVlCisg LSBzIChudW1iZXIpIHNhdHVyYXRpb24KKyAtIGIgKG51bWJlcikgdmFsdWUg b3IgYnJpZ2h0bmVzcworID0gKHN0cmluZykgaGV4IHJlcHJlc2VudGF0aW9u IG9mIHRoZSBjb2xvcgorXCovCitTbmFwLmhzYiA9IGNhY2hlcihmdW5jdGlv biAoaCwgcywgYikgeworICAgIHJldHVybiBTbmFwLmhzYjJyZ2IoaCwgcywg YikuaGV4OworfSk7CisvKlwKKyAqIFNuYXAuaHNsCisgWyBtZXRob2QgXQor ICoqCisgKiBDb252ZXJ0cyBIU0wgdmFsdWVzIHRvIGEgaGV4IHJlcHJlc2Vu dGF0aW9uIG9mIHRoZSBjb2xvcgorIC0gaCAobnVtYmVyKSBodWUKKyAtIHMg KG51bWJlcikgc2F0dXJhdGlvbgorIC0gbCAobnVtYmVyKSBsdW1pbm9zaXR5 CisgPSAoc3RyaW5nKSBoZXggcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbG9y CitcKi8KK1NuYXAuaHNsID0gY2FjaGVyKGZ1bmN0aW9uIChoLCBzLCBsKSB7 CisgICAgcmV0dXJuIFNuYXAuaHNsMnJnYihoLCBzLCBsKS5oZXg7Cit9KTsK Ky8qXAorICogU25hcC5yZ2IKKyBbIG1ldGhvZCBdCisgKioKKyAqIENvbnZl cnRzIFJHQiB2YWx1ZXMgdG8gYSBoZXggcmVwcmVzZW50YXRpb24gb2YgdGhl IGNvbG9yCisgLSByIChudW1iZXIpIHJlZAorIC0gZyAobnVtYmVyKSBncmVl bgorIC0gYiAobnVtYmVyKSBibHVlCisgPSAoc3RyaW5nKSBoZXggcmVwcmVz ZW50YXRpb24gb2YgdGhlIGNvbG9yCitcKi8KK1NuYXAucmdiID0gY2FjaGVy KGZ1bmN0aW9uIChyLCBnLCBiLCBvKSB7CisgICAgaWYgKGlzKG8sICJmaW5p dGUiKSkgeworICAgICAgICB2YXIgcm91bmQgPSBtYXRoLnJvdW5kOworICAg ICAgICByZXR1cm4gInJnYmEoIiArIFtyb3VuZChyKSwgcm91bmQoZyksIHJv dW5kKGIpLCArby50b0ZpeGVkKDIpXSArICIpIjsKKyAgICB9CisgICAgcmV0 dXJuICIjIiArICgxNjc3NzIxNiB8IGIgfCAoZyA8PCA4KSB8IChyIDw8IDE2 KSkudG9TdHJpbmcoMTYpLnNsaWNlKDEpOworfSk7Cit2YXIgdG9IZXggPSBm dW5jdGlvbiAoY29sb3IpIHsKKyAgICB2YXIgaSA9IGdsb2IuZG9jLmdldEVs ZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0gfHwgZ2xvYi5kb2MuZ2V0RWxl bWVudHNCeVRhZ05hbWUoInN2ZyIpWzBdLAorICAgICAgICByZWQgPSAicmdi KDI1NSwgMCwgMCkiOworICAgIHRvSGV4ID0gY2FjaGVyKGZ1bmN0aW9uIChj b2xvcikgeworICAgICAgICBpZiAoY29sb3IudG9Mb3dlckNhc2UoKSA9PSAi cmVkIikgeworICAgICAgICAgICAgcmV0dXJuIHJlZDsKKyAgICAgICAgfQor ICAgICAgICBpLnN0eWxlLmNvbG9yID0gcmVkOworICAgICAgICBpLnN0eWxl LmNvbG9yID0gY29sb3I7CisgICAgICAgIHZhciBvdXQgPSBnbG9iLmRvYy5k ZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGksIEUpLmdldFByb3BlcnR5 VmFsdWUoImNvbG9yIik7CisgICAgICAgIHJldHVybiBvdXQgPT0gcmVkID8g bnVsbCA6IG91dDsKKyAgICB9KTsKKyAgICByZXR1cm4gdG9IZXgoY29sb3Ip OworfSwKK2hzYnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVy biAiaHNiKCIgKyBbdGhpcy5oLCB0aGlzLnMsIHRoaXMuYl0gKyAiKSI7Cit9 LAoraHNsdG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuICJo c2woIiArIFt0aGlzLmgsIHRoaXMucywgdGhpcy5sXSArICIpIjsKK30sCity Z2J0b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gdGhpcy5v cGFjaXR5ID09IDEgfHwgdGhpcy5vcGFjaXR5ID09IG51bGwgPworICAgICAg ICAgICAgdGhpcy5oZXggOgorICAgICAgICAgICAgInJnYmEoIiArIFt0aGlz LnIsIHRoaXMuZywgdGhpcy5iLCB0aGlzLm9wYWNpdHldICsgIikiOworfSwK K3ByZXBhcmVSR0IgPSBmdW5jdGlvbiAociwgZywgYikgeworICAgIGlmIChn ID09IG51bGwgJiYgaXMociwgIm9iamVjdCIpICYmICJyIiBpbiByICYmICJn IiBpbiByICYmICJiIiBpbiByKSB7CisgICAgICAgIGIgPSByLmI7CisgICAg ICAgIGcgPSByLmc7CisgICAgICAgIHIgPSByLnI7CisgICAgfQorICAgIGlm IChnID09IG51bGwgJiYgaXMociwgc3RyaW5nKSkgeworICAgICAgICB2YXIg Y2xyID0gU25hcC5nZXRSR0Iocik7CisgICAgICAgIHIgPSBjbHIucjsKKyAg ICAgICAgZyA9IGNsci5nOworICAgICAgICBiID0gY2xyLmI7CisgICAgfQor ICAgIGlmIChyID4gMSB8fCBnID4gMSB8fCBiID4gMSkgeworICAgICAgICBy IC89IDI1NTsKKyAgICAgICAgZyAvPSAyNTU7CisgICAgICAgIGIgLz0gMjU1 OworICAgIH0KKworICAgIHJldHVybiBbciwgZywgYl07Cit9LAorcGFja2Fn ZVJHQiA9IGZ1bmN0aW9uIChyLCBnLCBiLCBvKSB7CisgICAgciA9IG1hdGgu cm91bmQociAqIDI1NSk7CisgICAgZyA9IG1hdGgucm91bmQoZyAqIDI1NSk7 CisgICAgYiA9IG1hdGgucm91bmQoYiAqIDI1NSk7CisgICAgdmFyIHJnYiA9 IHsKKyAgICAgICAgcjogciwKKyAgICAgICAgZzogZywKKyAgICAgICAgYjog YiwKKyAgICAgICAgb3BhY2l0eTogaXMobywgImZpbml0ZSIpID8gbyA6IDEs CisgICAgICAgIGhleDogU25hcC5yZ2IociwgZywgYiksCisgICAgICAgIHRv U3RyaW5nOiByZ2J0b1N0cmluZworICAgIH07CisgICAgaXMobywgImZpbml0 ZSIpICYmIChyZ2Iub3BhY2l0eSA9IG8pOworICAgIHJldHVybiByZ2I7Cit9 OworLypcCisgKiBTbmFwLmNvbG9yCisgWyBtZXRob2QgXQorICoqCisgKiBQ YXJzZXMgdGhlIGNvbG9yIHN0cmluZyBhbmQgcmV0dXJucyBhbiBvYmplY3Qg ZmVhdHVyaW5nIHRoZSBjb2xvcidzIGNvbXBvbmVudCB2YWx1ZXMKKyAtIGNs ciAoc3RyaW5nKSBjb2xvciBzdHJpbmcgaW4gb25lIG9mIHRoZSBzdXBwb3J0 ZWQgZm9ybWF0cyAoc2VlIEBTbmFwLmdldFJHQikKKyA9IChvYmplY3QpIENv bWJpbmVkIFJHQi9IU0Igb2JqZWN0IGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0 OgorIG8geworIG8gICAgIHIgKG51bWJlcikgcmVkLAorIG8gICAgIGcgKG51 bWJlcikgZ3JlZW4sCisgbyAgICAgYiAobnVtYmVyKSBibHVlLAorIG8gICAg IGhleCAoc3RyaW5nKSBjb2xvciBpbiBIVE1ML0NTUyBmb3JtYXQ6ICPigKLi gKLigKLigKLigKLigKIsCisgbyAgICAgZXJyb3IgKGJvb2xlYW4pIGB0cnVl YCBpZiBzdHJpbmcgY2FuJ3QgYmUgcGFyc2VkLAorIG8gICAgIGggKG51bWJl cikgaHVlLAorIG8gICAgIHMgKG51bWJlcikgc2F0dXJhdGlvbiwKKyBvICAg ICB2IChudW1iZXIpIHZhbHVlIChicmlnaHRuZXNzKSwKKyBvICAgICBsIChu dW1iZXIpIGxpZ2h0bmVzcworIG8gfQorXCovCitTbmFwLmNvbG9yID0gZnVu Y3Rpb24gKGNscikgeworICAgIHZhciByZ2I7CisgICAgaWYgKGlzKGNsciwg Im9iamVjdCIpICYmICJoIiBpbiBjbHIgJiYgInMiIGluIGNsciAmJiAiYiIg aW4gY2xyKSB7CisgICAgICAgIHJnYiA9IFNuYXAuaHNiMnJnYihjbHIpOwor ICAgICAgICBjbHIuciA9IHJnYi5yOworICAgICAgICBjbHIuZyA9IHJnYi5n OworICAgICAgICBjbHIuYiA9IHJnYi5iOworICAgICAgICBjbHIub3BhY2l0 eSA9IDE7CisgICAgICAgIGNsci5oZXggPSByZ2IuaGV4OworICAgIH0gZWxz ZSBpZiAoaXMoY2xyLCAib2JqZWN0IikgJiYgImgiIGluIGNsciAmJiAicyIg aW4gY2xyICYmICJsIiBpbiBjbHIpIHsKKyAgICAgICAgcmdiID0gU25hcC5o c2wycmdiKGNscik7CisgICAgICAgIGNsci5yID0gcmdiLnI7CisgICAgICAg IGNsci5nID0gcmdiLmc7CisgICAgICAgIGNsci5iID0gcmdiLmI7CisgICAg ICAgIGNsci5vcGFjaXR5ID0gMTsKKyAgICAgICAgY2xyLmhleCA9IHJnYi5o ZXg7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGlzKGNsciwgInN0cmlu ZyIpKSB7CisgICAgICAgICAgICBjbHIgPSBTbmFwLmdldFJHQihjbHIpOwor ICAgICAgICB9CisgICAgICAgIGlmIChpcyhjbHIsICJvYmplY3QiKSAmJiAi ciIgaW4gY2xyICYmICJnIiBpbiBjbHIgJiYgImIiIGluIGNsciAmJiAhKCJl cnJvciIgaW4gY2xyKSkgeworICAgICAgICAgICAgcmdiID0gU25hcC5yZ2Iy aHNsKGNscik7CisgICAgICAgICAgICBjbHIuaCA9IHJnYi5oOworICAgICAg ICAgICAgY2xyLnMgPSByZ2IuczsKKyAgICAgICAgICAgIGNsci5sID0gcmdi Lmw7CisgICAgICAgICAgICByZ2IgPSBTbmFwLnJnYjJoc2IoY2xyKTsKKyAg ICAgICAgICAgIGNsci52ID0gcmdiLmI7CisgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICBjbHIgPSB7aGV4OiAibm9uZSJ9OworICAgICAgICAgICAg Y2xyLnIgPSBjbHIuZyA9IGNsci5iID0gY2xyLmggPSBjbHIucyA9IGNsci52 ID0gY2xyLmwgPSAtMTsKKyAgICAgICAgICAgIGNsci5lcnJvciA9IDE7Cisg ICAgICAgIH0KKyAgICB9CisgICAgY2xyLnRvU3RyaW5nID0gcmdidG9TdHJp bmc7CisgICAgcmV0dXJuIGNscjsKK307CisvKlwKKyAqIFNuYXAuaHNiMnJn YgorIFsgbWV0aG9kIF0KKyAqKgorICogQ29udmVydHMgSFNCIHZhbHVlcyB0 byBhbiBSR0Igb2JqZWN0CisgLSBoIChudW1iZXIpIGh1ZQorIC0gcyAobnVt YmVyKSBzYXR1cmF0aW9uCisgLSB2IChudW1iZXIpIHZhbHVlIG9yIGJyaWdo dG5lc3MKKyA9IChvYmplY3QpIFJHQiBvYmplY3QgaW4gdGhlIGZvbGxvd2lu ZyBmb3JtYXQ6CisgbyB7CisgbyAgICAgciAobnVtYmVyKSByZWQsCisgbyAg ICAgZyAobnVtYmVyKSBncmVlbiwKKyBvICAgICBiIChudW1iZXIpIGJsdWUs CisgbyAgICAgaGV4IChzdHJpbmcpIGNvbG9yIGluIEhUTUwvQ1NTIGZvcm1h dDogI+KAouKAouKAouKAouKAouKAogorIG8gfQorXCovCitTbmFwLmhzYjJy Z2IgPSBmdW5jdGlvbiAoaCwgcywgdiwgbykgeworICAgIGlmIChpcyhoLCAi b2JqZWN0IikgJiYgImgiIGluIGggJiYgInMiIGluIGggJiYgImIiIGluIGgp IHsKKyAgICAgICAgdiA9IGguYjsKKyAgICAgICAgcyA9IGguczsKKyAgICAg ICAgbyA9IGgubzsKKyAgICAgICAgaCA9IGguaDsKKyAgICB9CisgICAgaCAq PSAzNjA7CisgICAgdmFyIFIsIEcsIEIsIFgsIEM7CisgICAgaCA9IChoICUg MzYwKSAvIDYwOworICAgIEMgPSB2ICogczsKKyAgICBYID0gQyAqICgxIC0g YWJzKGggJSAyIC0gMSkpOworICAgIFIgPSBHID0gQiA9IHYgLSBDOworCisg ICAgaCA9IH5+aDsKKyAgICBSICs9IFtDLCBYLCAwLCAwLCBYLCBDXVtoXTsK KyAgICBHICs9IFtYLCBDLCBDLCBYLCAwLCAwXVtoXTsKKyAgICBCICs9IFsw LCAwLCBYLCBDLCBDLCBYXVtoXTsKKyAgICByZXR1cm4gcGFja2FnZVJHQihS LCBHLCBCLCBvKTsKK307CisvKlwKKyAqIFNuYXAuaHNsMnJnYgorIFsgbWV0 aG9kIF0KKyAqKgorICogQ29udmVydHMgSFNMIHZhbHVlcyB0byBhbiBSR0Ig b2JqZWN0CisgLSBoIChudW1iZXIpIGh1ZQorIC0gcyAobnVtYmVyKSBzYXR1 cmF0aW9uCisgLSBsIChudW1iZXIpIGx1bWlub3NpdHkKKyA9IChvYmplY3Qp IFJHQiBvYmplY3QgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisgbyB7Cisg byAgICAgciAobnVtYmVyKSByZWQsCisgbyAgICAgZyAobnVtYmVyKSBncmVl biwKKyBvICAgICBiIChudW1iZXIpIGJsdWUsCisgbyAgICAgaGV4IChzdHJp bmcpIGNvbG9yIGluIEhUTUwvQ1NTIGZvcm1hdDogI+KAouKAouKAouKAouKA ouKAogorIG8gfQorXCovCitTbmFwLmhzbDJyZ2IgPSBmdW5jdGlvbiAoaCwg cywgbCwgbykgeworICAgIGlmIChpcyhoLCAib2JqZWN0IikgJiYgImgiIGlu IGggJiYgInMiIGluIGggJiYgImwiIGluIGgpIHsKKyAgICAgICAgbCA9IGgu bDsKKyAgICAgICAgcyA9IGguczsKKyAgICAgICAgaCA9IGguaDsKKyAgICB9 CisgICAgaWYgKGggPiAxIHx8IHMgPiAxIHx8IGwgPiAxKSB7CisgICAgICAg IGggLz0gMzYwOworICAgICAgICBzIC89IDEwMDsKKyAgICAgICAgbCAvPSAx MDA7CisgICAgfQorICAgIGggKj0gMzYwOworICAgIHZhciBSLCBHLCBCLCBY LCBDOworICAgIGggPSAoaCAlIDM2MCkgLyA2MDsKKyAgICBDID0gMiAqIHMg KiAobCA8IC41ID8gbCA6IDEgLSBsKTsKKyAgICBYID0gQyAqICgxIC0gYWJz KGggJSAyIC0gMSkpOworICAgIFIgPSBHID0gQiA9IGwgLSBDIC8gMjsKKwor ICAgIGggPSB+fmg7CisgICAgUiArPSBbQywgWCwgMCwgMCwgWCwgQ11baF07 CisgICAgRyArPSBbWCwgQywgQywgWCwgMCwgMF1baF07CisgICAgQiArPSBb MCwgMCwgWCwgQywgQywgWF1baF07CisgICAgcmV0dXJuIHBhY2thZ2VSR0Io UiwgRywgQiwgbyk7Cit9OworLypcCisgKiBTbmFwLnJnYjJoc2IKKyBbIG1l dGhvZCBdCisgKioKKyAqIENvbnZlcnRzIFJHQiB2YWx1ZXMgdG8gYW4gSFNC IG9iamVjdAorIC0gciAobnVtYmVyKSByZWQKKyAtIGcgKG51bWJlcikgZ3Jl ZW4KKyAtIGIgKG51bWJlcikgYmx1ZQorID0gKG9iamVjdCkgSFNCIG9iamVj dCBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKyBvIHsKKyBvICAgICBoIChu dW1iZXIpIGh1ZSwKKyBvICAgICBzIChudW1iZXIpIHNhdHVyYXRpb24sCisg byAgICAgYiAobnVtYmVyKSBicmlnaHRuZXNzCisgbyB9CitcKi8KK1NuYXAu cmdiMmhzYiA9IGZ1bmN0aW9uIChyLCBnLCBiKSB7CisgICAgYiA9IHByZXBh cmVSR0IociwgZywgYik7CisgICAgciA9IGJbMF07CisgICAgZyA9IGJbMV07 CisgICAgYiA9IGJbMl07CisKKyAgICB2YXIgSCwgUywgViwgQzsKKyAgICBW ID0gbW1heChyLCBnLCBiKTsKKyAgICBDID0gViAtIG1taW4ociwgZywgYik7 CisgICAgSCA9IChDID09IDAgPyBudWxsIDoKKyAgICAgICAgIFYgPT0gciA/ IChnIC0gYikgLyBDIDoKKyAgICAgICAgIFYgPT0gZyA/IChiIC0gcikgLyBD ICsgMiA6CisgICAgICAgICAgICAgICAgICAociAtIGcpIC8gQyArIDQKKyAg ICAgICAgKTsKKyAgICBIID0gKChIICsgMzYwKSAlIDYpICogNjAgLyAzNjA7 CisgICAgUyA9IEMgPT0gMCA/IDAgOiBDIC8gVjsKKyAgICByZXR1cm4ge2g6 IEgsIHM6IFMsIGI6IFYsIHRvU3RyaW5nOiBoc2J0b1N0cmluZ307Cit9Owor LypcCisgKiBTbmFwLnJnYjJoc2wKKyBbIG1ldGhvZCBdCisgKioKKyAqIENv bnZlcnRzIFJHQiB2YWx1ZXMgdG8gYW4gSFNMIG9iamVjdAorIC0gciAobnVt YmVyKSByZWQKKyAtIGcgKG51bWJlcikgZ3JlZW4KKyAtIGIgKG51bWJlcikg Ymx1ZQorID0gKG9iamVjdCkgSFNMIG9iamVjdCBpbiB0aGUgZm9sbG93aW5n IGZvcm1hdDoKKyBvIHsKKyBvICAgICBoIChudW1iZXIpIGh1ZSwKKyBvICAg ICBzIChudW1iZXIpIHNhdHVyYXRpb24sCisgbyAgICAgbCAobnVtYmVyKSBs dW1pbm9zaXR5CisgbyB9CitcKi8KK1NuYXAucmdiMmhzbCA9IGZ1bmN0aW9u IChyLCBnLCBiKSB7CisgICAgYiA9IHByZXBhcmVSR0IociwgZywgYik7Cisg ICAgciA9IGJbMF07CisgICAgZyA9IGJbMV07CisgICAgYiA9IGJbMl07CisK KyAgICB2YXIgSCwgUywgTCwgTSwgbSwgQzsKKyAgICBNID0gbW1heChyLCBn LCBiKTsKKyAgICBtID0gbW1pbihyLCBnLCBiKTsKKyAgICBDID0gTSAtIG07 CisgICAgSCA9IChDID09IDAgPyBudWxsIDoKKyAgICAgICAgIE0gPT0gciA/ IChnIC0gYikgLyBDIDoKKyAgICAgICAgIE0gPT0gZyA/IChiIC0gcikgLyBD ICsgMiA6CisgICAgICAgICAgICAgICAgICAociAtIGcpIC8gQyArIDQpOwor ICAgIEggPSAoKEggKyAzNjApICUgNikgKiA2MCAvIDM2MDsKKyAgICBMID0g KE0gKyBtKSAvIDI7CisgICAgUyA9IChDID09IDAgPyAwIDoKKyAgICAgICAg IEwgPCAuNSA/IEMgLyAoMiAqIEwpIDoKKyAgICAgICAgICAgICAgICAgIEMg LyAoMiAtIDIgKiBMKSk7CisgICAgcmV0dXJuIHtoOiBILCBzOiBTLCBsOiBM LCB0b1N0cmluZzogaHNsdG9TdHJpbmd9OworfTsKKworLy8gVHJhbnNmb3Jt YXRpb25zCisvKlwKKyAqIFNuYXAucGFyc2VQYXRoU3RyaW5nCisgWyBtZXRo b2QgXQorICoqCisgKiBVdGlsaXR5IG1ldGhvZAorICoqCisgKiBQYXJzZXMg Z2l2ZW4gcGF0aCBzdHJpbmcgaW50byBhbiBhcnJheSBvZiBhcnJheXMgb2Yg cGF0aCBzZWdtZW50cworIC0gcGF0aFN0cmluZyAoc3RyaW5nfGFycmF5KSBw YXRoIHN0cmluZyBvciBhcnJheSBvZiBzZWdtZW50cyAoaW4gdGhlIGxhc3Qg Y2FzZSBpdCBpcyByZXR1cm5lZCBzdHJhaWdodCBhd2F5KQorID0gKGFycmF5 KSBhcnJheSBvZiBzZWdtZW50cworXCovCitTbmFwLnBhcnNlUGF0aFN0cmlu ZyA9IGZ1bmN0aW9uIChwYXRoU3RyaW5nKSB7CisgICAgaWYgKCFwYXRoU3Ry aW5nKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICB2YXIg cHRoID0gU25hcC5wYXRoKHBhdGhTdHJpbmcpOworICAgIGlmIChwdGguYXJy KSB7CisgICAgICAgIHJldHVybiBTbmFwLnBhdGguY2xvbmUocHRoLmFycik7 CisgICAgfQorCisgICAgdmFyIHBhcmFtQ291bnRzID0ge2E6IDcsIGM6IDYs IG86IDIsIGg6IDEsIGw6IDIsIG06IDIsIHI6IDQsIHE6IDQsIHM6IDQsIHQ6 IDIsIHY6IDEsIHU6IDMsIHo6IDB9LAorICAgICAgICBkYXRhID0gW107Cisg ICAgaWYgKGlzKHBhdGhTdHJpbmcsICJhcnJheSIpICYmIGlzKHBhdGhTdHJp bmdbMF0sICJhcnJheSIpKSB7IC8vIHJvdWdoIGFzc3VtcHRpb24KKyAgICAg ICAgZGF0YSA9IFNuYXAucGF0aC5jbG9uZShwYXRoU3RyaW5nKTsKKyAgICB9 CisgICAgaWYgKCFkYXRhLmxlbmd0aCkgeworICAgICAgICBTdHIocGF0aFN0 cmluZykucmVwbGFjZShwYXRoQ29tbWFuZCwgZnVuY3Rpb24gKGEsIGIsIGMp IHsKKyAgICAgICAgICAgIHZhciBwYXJhbXMgPSBbXSwKKyAgICAgICAgICAg ICAgICBuYW1lID0gYi50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgYy5y ZXBsYWNlKHBhdGhWYWx1ZXMsIGZ1bmN0aW9uIChhLCBiKSB7CisgICAgICAg ICAgICAgICAgYiAmJiBwYXJhbXMucHVzaCgrYik7CisgICAgICAgICAgICB9 KTsKKyAgICAgICAgICAgIGlmIChuYW1lID09ICJtIiAmJiBwYXJhbXMubGVu Z3RoID4gMikgeworICAgICAgICAgICAgICAgIGRhdGEucHVzaChbYl0uY29u Y2F0KHBhcmFtcy5zcGxpY2UoMCwgMikpKTsKKyAgICAgICAgICAgICAgICBu YW1lID0gImwiOworICAgICAgICAgICAgICAgIGIgPSBiID09ICJtIiA/ICJs IiA6ICJMIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChuYW1l ID09ICJvIiAmJiBwYXJhbXMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAg ICAgICBkYXRhLnB1c2goW2IsIHBhcmFtc1swXV0pOworICAgICAgICAgICAg fQorICAgICAgICAgICAgaWYgKG5hbWUgPT0gInIiKSB7CisgICAgICAgICAg ICAgICAgZGF0YS5wdXNoKFtiXS5jb25jYXQocGFyYW1zKSk7CisgICAgICAg ICAgICB9IGVsc2Ugd2hpbGUgKHBhcmFtcy5sZW5ndGggPj0gcGFyYW1Db3Vu dHNbbmFtZV0pIHsKKyAgICAgICAgICAgICAgICBkYXRhLnB1c2goW2JdLmNv bmNhdChwYXJhbXMuc3BsaWNlKDAsIHBhcmFtQ291bnRzW25hbWVdKSkpOwor ICAgICAgICAgICAgICAgIGlmICghcGFyYW1Db3VudHNbbmFtZV0pIHsKKyAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisgICAgZGF0YS50 b1N0cmluZyA9IFNuYXAucGF0aC50b1N0cmluZzsKKyAgICBwdGguYXJyID0g U25hcC5wYXRoLmNsb25lKGRhdGEpOworICAgIHJldHVybiBkYXRhOworfTsK Ky8qXAorICogU25hcC5wYXJzZVRyYW5zZm9ybVN0cmluZworIFsgbWV0aG9k IF0KKyAqKgorICogVXRpbGl0eSBtZXRob2QKKyAqKgorICogUGFyc2VzIGdp dmVuIHRyYW5zZm9ybSBzdHJpbmcgaW50byBhbiBhcnJheSBvZiB0cmFuc2Zv cm1hdGlvbnMKKyAtIFRTdHJpbmcgKHN0cmluZ3xhcnJheSkgdHJhbnNmb3Jt IHN0cmluZyBvciBhcnJheSBvZiB0cmFuc2Zvcm1hdGlvbnMgKGluIHRoZSBs YXN0IGNhc2UgaXQgaXMgcmV0dXJuZWQgc3RyYWlnaHQgYXdheSkKKyA9IChh cnJheSkgYXJyYXkgb2YgdHJhbnNmb3JtYXRpb25zCitcKi8KK3ZhciBwYXJz ZVRyYW5zZm9ybVN0cmluZyA9IFNuYXAucGFyc2VUcmFuc2Zvcm1TdHJpbmcg PSBmdW5jdGlvbiAoVFN0cmluZykgeworICAgIGlmICghVFN0cmluZykgewor ICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgdmFyIHBhcmFtQ291 bnRzID0ge3I6IDMsIHM6IDQsIHQ6IDIsIG06IDZ9LAorICAgICAgICBkYXRh ID0gW107CisgICAgaWYgKGlzKFRTdHJpbmcsICJhcnJheSIpICYmIGlzKFRT dHJpbmdbMF0sICJhcnJheSIpKSB7IC8vIHJvdWdoIGFzc3VtcHRpb24KKyAg ICAgICAgZGF0YSA9IFNuYXAucGF0aC5jbG9uZShUU3RyaW5nKTsKKyAgICB9 CisgICAgaWYgKCFkYXRhLmxlbmd0aCkgeworICAgICAgICBTdHIoVFN0cmlu ZykucmVwbGFjZSh0Q29tbWFuZCwgZnVuY3Rpb24gKGEsIGIsIGMpIHsKKyAg ICAgICAgICAgIHZhciBwYXJhbXMgPSBbXSwKKyAgICAgICAgICAgICAgICBu YW1lID0gYi50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgYy5yZXBsYWNl KHBhdGhWYWx1ZXMsIGZ1bmN0aW9uIChhLCBiKSB7CisgICAgICAgICAgICAg ICAgYiAmJiBwYXJhbXMucHVzaCgrYik7CisgICAgICAgICAgICB9KTsKKyAg ICAgICAgICAgIGRhdGEucHVzaChbYl0uY29uY2F0KHBhcmFtcykpOworICAg ICAgICB9KTsKKyAgICB9CisgICAgZGF0YS50b1N0cmluZyA9IFNuYXAucGF0 aC50b1N0cmluZzsKKyAgICByZXR1cm4gZGF0YTsKK307CitmdW5jdGlvbiBz dmdUcmFuc2Zvcm0yc3RyaW5nKHRzdHIpIHsKKyAgICB2YXIgcmVzID0gW107 CisgICAgdHN0ciA9IHRzdHIucmVwbGFjZSgvKD86XnxccykoXHcrKVwoKFte KV0rKVwpL2csIGZ1bmN0aW9uIChhbGwsIG5hbWUsIHBhcmFtcykgeworICAg ICAgICBwYXJhbXMgPSBwYXJhbXMuc3BsaXQoL1xzKixccyp8XHMrLyk7Cisg ICAgICAgIGlmIChuYW1lID09ICJyb3RhdGUiICYmIHBhcmFtcy5sZW5ndGgg PT0gMSkgeworICAgICAgICAgICAgcGFyYW1zLnB1c2goMCwgMCk7CisgICAg ICAgIH0KKyAgICAgICAgaWYgKG5hbWUgPT0gInNjYWxlIikgeworICAgICAg ICAgICAgaWYgKHBhcmFtcy5sZW5ndGggPiAyKSB7CisgICAgICAgICAgICAg ICAgcGFyYW1zID0gcGFyYW1zLnNsaWNlKDAsIDIpOworICAgICAgICAgICAg fSBlbHNlIGlmIChwYXJhbXMubGVuZ3RoID09IDIpIHsKKyAgICAgICAgICAg ICAgICBwYXJhbXMucHVzaCgwLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGlmIChwYXJhbXMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAg ICAgICBwYXJhbXMucHVzaChwYXJhbXNbMF0sIDAsIDApOworICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChuYW1lID09ICJza2V3WCIp IHsKKyAgICAgICAgICAgIHJlcy5wdXNoKFsibSIsIDEsIDAsIG1hdGgudGFu KHJhZChwYXJhbXNbMF0pKSwgMSwgMCwgMF0pOworICAgICAgICB9IGVsc2Ug aWYgKG5hbWUgPT0gInNrZXdZIikgeworICAgICAgICAgICAgcmVzLnB1c2go WyJtIiwgMSwgbWF0aC50YW4ocmFkKHBhcmFtc1swXSkpLCAwLCAxLCAwLCAw XSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXMucHVzaChb bmFtZS5jaGFyQXQoMCldLmNvbmNhdChwYXJhbXMpKTsKKyAgICAgICAgfQor ICAgICAgICByZXR1cm4gYWxsOworICAgIH0pOworICAgIHJldHVybiByZXM7 Cit9CitTbmFwLl8uc3ZnVHJhbnNmb3JtMnN0cmluZyA9IHN2Z1RyYW5zZm9y bTJzdHJpbmc7CitTbmFwLl8ucmdUcmFuc2Zvcm0gPSAvXlthLXpdW1xzXSot P1wuP1xkL2k7CitmdW5jdGlvbiB0cmFuc2Zvcm0ybWF0cml4KHRzdHIsIGJi b3gpIHsKKyAgICB2YXIgdGRhdGEgPSBwYXJzZVRyYW5zZm9ybVN0cmluZyh0 c3RyKSwKKyAgICAgICAgbSA9IG5ldyBTbmFwLk1hdHJpeDsKKyAgICBpZiAo dGRhdGEpIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGRhdGEu bGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAgdmFyIHQgPSB0 ZGF0YVtpXSwKKyAgICAgICAgICAgICAgICB0bGVuID0gdC5sZW5ndGgsCisg ICAgICAgICAgICAgICAgY29tbWFuZCA9IFN0cih0WzBdKS50b0xvd2VyQ2Fz ZSgpLAorICAgICAgICAgICAgICAgIGFic29sdXRlID0gdFswXSAhPSBjb21t YW5kLAorICAgICAgICAgICAgICAgIGludmVyID0gYWJzb2x1dGUgPyBtLmlu dmVydCgpIDogMCwKKyAgICAgICAgICAgICAgICB4MSwKKyAgICAgICAgICAg ICAgICB5MSwKKyAgICAgICAgICAgICAgICB4MiwKKyAgICAgICAgICAgICAg ICB5MiwKKyAgICAgICAgICAgICAgICBiYjsKKyAgICAgICAgICAgIGlmIChj b21tYW5kID09ICJ0IiAmJiB0bGVuID09IDIpeworICAgICAgICAgICAgICAg IG0udHJhbnNsYXRlKHRbMV0sIDApOworICAgICAgICAgICAgfSBlbHNlIGlm IChjb21tYW5kID09ICJ0IiAmJiB0bGVuID09IDMpIHsKKyAgICAgICAgICAg ICAgICBpZiAoYWJzb2x1dGUpIHsKKyAgICAgICAgICAgICAgICAgICAgeDEg PSBpbnZlci54KDAsIDApOworICAgICAgICAgICAgICAgICAgICB5MSA9IGlu dmVyLnkoMCwgMCk7CisgICAgICAgICAgICAgICAgICAgIHgyID0gaW52ZXIu eCh0WzFdLCB0WzJdKTsKKyAgICAgICAgICAgICAgICAgICAgeTIgPSBpbnZl ci55KHRbMV0sIHRbMl0pOworICAgICAgICAgICAgICAgICAgICBtLnRyYW5z bGF0ZSh4MiAtIHgxLCB5MiAtIHkxKTsKKyAgICAgICAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICAgICAgICBtLnRyYW5zbGF0ZSh0WzFdLCB0 WzJdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ug aWYgKGNvbW1hbmQgPT0gInIiKSB7CisgICAgICAgICAgICAgICAgaWYgKHRs ZW4gPT0gMikgeworICAgICAgICAgICAgICAgICAgICBiYiA9IGJiIHx8IGJi b3g7CisgICAgICAgICAgICAgICAgICAgIG0ucm90YXRlKHRbMV0sIGJiLngg KyBiYi53aWR0aCAvIDIsIGJiLnkgKyBiYi5oZWlnaHQgLyAyKTsKKyAgICAg ICAgICAgICAgICB9IGVsc2UgaWYgKHRsZW4gPT0gNCkgeworICAgICAgICAg ICAgICAgICAgICBpZiAoYWJzb2x1dGUpIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgIHgyID0gaW52ZXIueCh0WzJdLCB0WzNdKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHkyID0gaW52ZXIueSh0WzJdLCB0WzNdKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIG0ucm90YXRlKHRbMV0sIHgyLCB5Mik7Cisg ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg ICAgICAgICBtLnJvdGF0ZSh0WzFdLCB0WzJdLCB0WzNdKTsKKyAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH0gZWxzZSBpZiAoY29tbWFuZCA9PSAicyIpIHsKKyAgICAgICAgICAgICAg ICBpZiAodGxlbiA9PSAyIHx8IHRsZW4gPT0gMykgeworICAgICAgICAgICAg ICAgICAgICBiYiA9IGJiIHx8IGJib3g7CisgICAgICAgICAgICAgICAgICAg IG0uc2NhbGUodFsxXSwgdFt0bGVuIC0gMV0sIGJiLnggKyBiYi53aWR0aCAv IDIsIGJiLnkgKyBiYi5oZWlnaHQgLyAyKTsKKyAgICAgICAgICAgICAgICB9 IGVsc2UgaWYgKHRsZW4gPT0gNCkgeworICAgICAgICAgICAgICAgICAgICBp ZiAoYWJzb2x1dGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHgyID0g aW52ZXIueCh0WzJdLCB0WzNdKTsKKyAgICAgICAgICAgICAgICAgICAgICAg IHkyID0gaW52ZXIueSh0WzJdLCB0WzNdKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIG0uc2NhbGUodFsxXSwgdFsxXSwgeDIsIHkyKTsKKyAgICAgICAg ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IG0uc2NhbGUodFsxXSwgdFsxXSwgdFsyXSwgdFszXSk7CisgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRsZW4g PT0gNSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYWJzb2x1dGUpIHsK KyAgICAgICAgICAgICAgICAgICAgICAgIHgyID0gaW52ZXIueCh0WzNdLCB0 WzRdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHkyID0gaW52ZXIueSh0 WzNdLCB0WzRdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG0uc2NhbGUo dFsxXSwgdFsyXSwgeDIsIHkyKTsKKyAgICAgICAgICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG0uc2NhbGUodFsxXSwg dFsyXSwgdFszXSwgdFs0XSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbW1h bmQgPT0gIm0iICYmIHRsZW4gPT0gNykgeworICAgICAgICAgICAgICAgIG0u YWRkKHRbMV0sIHRbMl0sIHRbM10sIHRbNF0sIHRbNV0sIHRbNl0pOworICAg ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBtOwor fQorU25hcC5fLnRyYW5zZm9ybTJtYXRyaXggPSB0cmFuc2Zvcm0ybWF0cml4 OworU25hcC5fdW5pdDJweCA9IHVuaXQycHg7Cit2YXIgY29udGFpbnMgPSBn bG9iLmRvYy5jb250YWlucyB8fCBnbG9iLmRvYy5jb21wYXJlRG9jdW1lbnRQ b3NpdGlvbiA/CisgICAgZnVuY3Rpb24gKGEsIGIpIHsKKyAgICAgICAgdmFy IGFkb3duID0gYS5ub2RlVHlwZSA9PSA5ID8gYS5kb2N1bWVudEVsZW1lbnQg OiBhLAorICAgICAgICAgICAgYnVwID0gYiAmJiBiLnBhcmVudE5vZGU7Cisg ICAgICAgICAgICByZXR1cm4gYSA9PSBidXAgfHwgISEoYnVwICYmIGJ1cC5u b2RlVHlwZSA9PSAxICYmICgKKyAgICAgICAgICAgICAgICBhZG93bi5jb250 YWlucyA/CisgICAgICAgICAgICAgICAgICAgIGFkb3duLmNvbnRhaW5zKGJ1 cCkgOgorICAgICAgICAgICAgICAgICAgICBhLmNvbXBhcmVEb2N1bWVudFBv c2l0aW9uICYmIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYnVwKSAmIDE2 CisgICAgICAgICAgICApKTsKKyAgICB9IDoKKyAgICBmdW5jdGlvbiAoYSwg YikgeworICAgICAgICBpZiAoYikgeworICAgICAgICAgICAgd2hpbGUgKGIp IHsKKyAgICAgICAgICAgICAgICBiID0gYi5wYXJlbnROb2RlOworICAgICAg ICAgICAgICAgIGlmIChiID09IGEpIHsKKyAgICAgICAgICAgICAgICAgICAg cmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Owor ZnVuY3Rpb24gZ2V0U29tZURlZnMoZWwpIHsKKyAgICB2YXIgcCA9IChlbC5u b2RlLm93bmVyU1ZHRWxlbWVudCAmJiB3cmFwKGVsLm5vZGUub3duZXJTVkdF bGVtZW50KSkgfHwKKyAgICAgICAgICAgIChlbC5ub2RlLnBhcmVudE5vZGUg JiYgd3JhcChlbC5ub2RlLnBhcmVudE5vZGUpKSB8fAorICAgICAgICAgICAg U25hcC5zZWxlY3QoInN2ZyIpIHx8CisgICAgICAgICAgICBTbmFwKDAsIDAp LAorICAgICAgICBwZGVmcyA9IHAuc2VsZWN0KCJkZWZzIiksCisgICAgICAg IGRlZnMgID0gcGRlZnMgPT0gbnVsbCA/IGZhbHNlIDogcGRlZnMubm9kZTsK KyAgICBpZiAoIWRlZnMpIHsKKyAgICAgICAgZGVmcyA9IG1ha2UoImRlZnMi LCBwLm5vZGUpLm5vZGU7CisgICAgfQorICAgIHJldHVybiBkZWZzOworfQor ZnVuY3Rpb24gZ2V0U29tZVNWRyhlbCkgeworICAgIHJldHVybiBlbC5ub2Rl Lm93bmVyU1ZHRWxlbWVudCAmJiB3cmFwKGVsLm5vZGUub3duZXJTVkdFbGVt ZW50KSB8fCBTbmFwLnNlbGVjdCgic3ZnIik7Cit9CitTbmFwLl8uZ2V0U29t ZURlZnMgPSBnZXRTb21lRGVmczsKK1NuYXAuXy5nZXRTb21lU1ZHID0gZ2V0 U29tZVNWRzsKK2Z1bmN0aW9uIHVuaXQycHgoZWwsIG5hbWUsIHZhbHVlKSB7 CisgICAgdmFyIHN2ZyA9IGdldFNvbWVTVkcoZWwpLm5vZGUsCisgICAgICAg IG91dCA9IHt9LAorICAgICAgICBtZ3IgPSBzdmcucXVlcnlTZWxlY3Rvcigi LnN2Zy0tLW1nciIpOworICAgIGlmICghbWdyKSB7CisgICAgICAgIG1nciA9 ICQoInJlY3QiKTsKKyAgICAgICAgJChtZ3IsIHt4OiAtOWU5LCB5OiAtOWU5 LCB3aWR0aDogMTAsIGhlaWdodDogMTAsICJjbGFzcyI6ICJzdmctLS1tZ3Ii LCBmaWxsOiAibm9uZSJ9KTsKKyAgICAgICAgc3ZnLmFwcGVuZENoaWxkKG1n cik7CisgICAgfQorICAgIGZ1bmN0aW9uIGdldFcodmFsKSB7CisgICAgICAg IGlmICh2YWwgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIEU7Cisg ICAgICAgIH0KKyAgICAgICAgaWYgKHZhbCA9PSArdmFsKSB7CisgICAgICAg ICAgICByZXR1cm4gdmFsOworICAgICAgICB9CisgICAgICAgICQobWdyLCB7 d2lkdGg6IHZhbH0pOworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0 dXJuIG1nci5nZXRCQm94KCkud2lkdGg7CisgICAgICAgIH0gY2F0Y2ggKGUp IHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQor ICAgIGZ1bmN0aW9uIGdldEgodmFsKSB7CisgICAgICAgIGlmICh2YWwgPT0g bnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIEU7CisgICAgICAgIH0KKyAg ICAgICAgaWYgKHZhbCA9PSArdmFsKSB7CisgICAgICAgICAgICByZXR1cm4g dmFsOworICAgICAgICB9CisgICAgICAgICQobWdyLCB7aGVpZ2h0OiB2YWx9 KTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBtZ3IuZ2V0 QkJveCgpLmhlaWdodDsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAg ICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rp b24gc2V0KG5hbSwgZikgeworICAgICAgICBpZiAobmFtZSA9PSBudWxsKSB7 CisgICAgICAgICAgICBvdXRbbmFtXSA9IGYoZWwuYXR0cihuYW0pIHx8IDAp OworICAgICAgICB9IGVsc2UgaWYgKG5hbSA9PSBuYW1lKSB7CisgICAgICAg ICAgICBvdXQgPSBmKHZhbHVlID09IG51bGwgPyBlbC5hdHRyKG5hbSkgfHwg MCA6IHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBzd2l0Y2ggKGVs LnR5cGUpIHsKKyAgICAgICAgY2FzZSAicmVjdCI6CisgICAgICAgICAgICBz ZXQoInJ4IiwgZ2V0Vyk7CisgICAgICAgICAgICBzZXQoInJ5IiwgZ2V0SCk7 CisgICAgICAgIGNhc2UgImltYWdlIjoKKyAgICAgICAgICAgIHNldCgid2lk dGgiLCBnZXRXKTsKKyAgICAgICAgICAgIHNldCgiaGVpZ2h0IiwgZ2V0SCk7 CisgICAgICAgIGNhc2UgInRleHQiOgorICAgICAgICAgICAgc2V0KCJ4Iiwg Z2V0Vyk7CisgICAgICAgICAgICBzZXQoInkiLCBnZXRIKTsKKyAgICAgICAg YnJlYWs7CisgICAgICAgIGNhc2UgImNpcmNsZSI6CisgICAgICAgICAgICBz ZXQoImN4IiwgZ2V0Vyk7CisgICAgICAgICAgICBzZXQoImN5IiwgZ2V0SCk7 CisgICAgICAgICAgICBzZXQoInIiLCBnZXRXKTsKKyAgICAgICAgYnJlYWs7 CisgICAgICAgIGNhc2UgImVsbGlwc2UiOgorICAgICAgICAgICAgc2V0KCJj eCIsIGdldFcpOworICAgICAgICAgICAgc2V0KCJjeSIsIGdldEgpOworICAg ICAgICAgICAgc2V0KCJyeCIsIGdldFcpOworICAgICAgICAgICAgc2V0KCJy eSIsIGdldEgpOworICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAibGlu ZSI6CisgICAgICAgICAgICBzZXQoIngxIiwgZ2V0Vyk7CisgICAgICAgICAg ICBzZXQoIngyIiwgZ2V0Vyk7CisgICAgICAgICAgICBzZXQoInkxIiwgZ2V0 SCk7CisgICAgICAgICAgICBzZXQoInkyIiwgZ2V0SCk7CisgICAgICAgIGJy ZWFrOworICAgICAgICBjYXNlICJtYXJrZXIiOgorICAgICAgICAgICAgc2V0 KCJyZWZYIiwgZ2V0Vyk7CisgICAgICAgICAgICBzZXQoIm1hcmtlcldpZHRo IiwgZ2V0Vyk7CisgICAgICAgICAgICBzZXQoInJlZlkiLCBnZXRIKTsKKyAg ICAgICAgICAgIHNldCgibWFya2VySGVpZ2h0IiwgZ2V0SCk7CisgICAgICAg IGJyZWFrOworICAgICAgICBjYXNlICJyYWRpYWxHcmFkaWVudCI6CisgICAg ICAgICAgICBzZXQoImZ4IiwgZ2V0Vyk7CisgICAgICAgICAgICBzZXQoImZ5 IiwgZ2V0SCk7CisgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJ0c3Bh biI6CisgICAgICAgICAgICBzZXQoImR4IiwgZ2V0Vyk7CisgICAgICAgICAg ICBzZXQoImR5IiwgZ2V0SCk7CisgICAgICAgIGJyZWFrOworICAgICAgICBk ZWZhdWx0OgorICAgICAgICAgICAgc2V0KG5hbWUsIGdldFcpOworICAgIH0K KyAgICBzdmcucmVtb3ZlQ2hpbGQobWdyKTsKKyAgICByZXR1cm4gb3V0Owor fQorLypcCisgKiBTbmFwLnNlbGVjdAorIFsgbWV0aG9kIF0KKyAqKgorICog V3JhcHMgYSBET00gZWxlbWVudCBzcGVjaWZpZWQgYnkgQ1NTIHNlbGVjdG9y IGFzIEBFbGVtZW50CisgLSBxdWVyeSAoc3RyaW5nKSBDU1Mgc2VsZWN0b3Ig b2YgdGhlIGVsZW1lbnQKKyA9IChFbGVtZW50KSB0aGUgY3VycmVudCBlbGVt ZW50CitcKi8KK1NuYXAuc2VsZWN0ID0gZnVuY3Rpb24gKHF1ZXJ5KSB7Cisg ICAgcXVlcnkgPSBTdHIocXVlcnkpLnJlcGxhY2UoLyhbXlxcXSk6L2csICIk MVxcOiIpOworICAgIHJldHVybiB3cmFwKGdsb2IuZG9jLnF1ZXJ5U2VsZWN0 b3IocXVlcnkpKTsKK307CisvKlwKKyAqIFNuYXAuc2VsZWN0QWxsCisgWyBt ZXRob2QgXQorICoqCisgKiBXcmFwcyBET00gZWxlbWVudHMgc3BlY2lmaWVk IGJ5IENTUyBzZWxlY3RvciBhcyBzZXQgb3IgYXJyYXkgb2YgQEVsZW1lbnQK KyAtIHF1ZXJ5IChzdHJpbmcpIENTUyBzZWxlY3RvciBvZiB0aGUgZWxlbWVu dAorID0gKEVsZW1lbnQpIHRoZSBjdXJyZW50IGVsZW1lbnQKK1wqLworU25h cC5zZWxlY3RBbGwgPSBmdW5jdGlvbiAocXVlcnkpIHsKKyAgICB2YXIgbm9k ZWxpc3QgPSBnbG9iLmRvYy5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5KSwKKyAg ICAgICAgc2V0ID0gKFNuYXAuc2V0IHx8IEFycmF5KSgpOworICAgIGZvciAo dmFyIGkgPSAwOyBpIDwgbm9kZWxpc3QubGVuZ3RoOyBpKyspIHsKKyAgICAg ICAgc2V0LnB1c2god3JhcChub2RlbGlzdFtpXSkpOworICAgIH0KKyAgICBy ZXR1cm4gc2V0OworfTsKKworZnVuY3Rpb24gYWRkMmdyb3VwKGxpc3QpIHsK KyAgICBpZiAoIWlzKGxpc3QsICJhcnJheSIpKSB7CisgICAgICAgIGxpc3Qg PSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApOwor ICAgIH0KKyAgICB2YXIgaSA9IDAsCisgICAgICAgIGogPSAwLAorICAgICAg ICBub2RlID0gdGhpcy5ub2RlOworICAgIHdoaWxlICh0aGlzW2ldKSBkZWxl dGUgdGhpc1tpKytdOworICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0 aDsgaSsrKSB7CisgICAgICAgIGlmIChsaXN0W2ldLnR5cGUgPT0gInNldCIp IHsKKyAgICAgICAgICAgIGxpc3RbaV0uZm9yRWFjaChmdW5jdGlvbiAoZWwp IHsKKyAgICAgICAgICAgICAgICBub2RlLmFwcGVuZENoaWxkKGVsLm5vZGUp OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICBub2RlLmFwcGVuZENoaWxkKGxpc3RbaV0ubm9kZSk7CisgICAgICAg IH0KKyAgICB9CisgICAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZE5vZGVz OworICAgIGZvciAoaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykg eworICAgICAgICB0aGlzW2orK10gPSB3cmFwKGNoaWxkcmVuW2ldKTsKKyAg ICB9CisgICAgcmV0dXJuIHRoaXM7Cit9CisvLyBIdWIgZ2FyYmFnZSBjb2xs ZWN0b3IgZXZlcnkgMTBzCitzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7Cisg ICAgZm9yICh2YXIga2V5IGluIGh1YikgaWYgKGh1YltoYXNdKGtleSkpIHsK KyAgICAgICAgdmFyIGVsID0gaHViW2tleV0sCisgICAgICAgICAgICBub2Rl ID0gZWwubm9kZTsKKyAgICAgICAgaWYgKGVsLnR5cGUgIT0gInN2ZyIgJiYg IW5vZGUub3duZXJTVkdFbGVtZW50IHx8IGVsLnR5cGUgPT0gInN2ZyIgJiYg KCFub2RlLnBhcmVudE5vZGUgfHwgIm93bmVyU1ZHRWxlbWVudCIgaW4gbm9k ZS5wYXJlbnROb2RlICYmICFub2RlLm93bmVyU1ZHRWxlbWVudCkpIHsKKyAg ICAgICAgICAgIGRlbGV0ZSBodWJba2V5XTsKKyAgICAgICAgfQorICAgIH0K K30sIDFlNCk7CitmdW5jdGlvbiBFbGVtZW50KGVsKSB7CisgICAgaWYgKGVs LnNuYXAgaW4gaHViKSB7CisgICAgICAgIHJldHVybiBodWJbZWwuc25hcF07 CisgICAgfQorICAgIHZhciBzdmc7CisgICAgdHJ5IHsKKyAgICAgICAgc3Zn ID0gZWwub3duZXJTVkdFbGVtZW50OworICAgIH0gY2F0Y2goZSkge30KKyAg ICAvKlwKKyAgICAgKiBFbGVtZW50Lm5vZGUKKyAgICAgWyBwcm9wZXJ0eSAo b2JqZWN0KSBdCisgICAgICoqCisgICAgICogR2l2ZXMgeW91IGEgcmVmZXJl bmNlIHRvIHRoZSBET00gb2JqZWN0LCBzbyB5b3UgY2FuIGFzc2lnbiBldmVu dCBoYW5kbGVycyBvciBqdXN0IG1lc3MgYXJvdW5kLgorICAgICA+IFVzYWdl CisgICAgIHwgLy8gZHJhdyBhIGNpcmNsZSBhdCBjb29yZGluYXRlIDEwLDEw IHdpdGggcmFkaXVzIG9mIDEwCisgICAgIHwgdmFyIGMgPSBwYXBlci5jaXJj bGUoMTAsIDEwLCAxMCk7CisgICAgIHwgYy5ub2RlLm9uY2xpY2sgPSBmdW5j dGlvbiAoKSB7CisgICAgIHwgICAgIGMuYXR0cigiZmlsbCIsICJyZWQiKTsK KyAgICAgfCB9OworICAgIFwqLworICAgIHRoaXMubm9kZSA9IGVsOworICAg IGlmIChzdmcpIHsKKyAgICAgICAgdGhpcy5wYXBlciA9IG5ldyBQYXBlcihz dmcpOworICAgIH0KKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LnR5cGUKKyAg ICAgWyBwcm9wZXJ0eSAoc3RyaW5nKSBdCisgICAgICoqCisgICAgICogU1ZH IHRhZyBuYW1lIG9mIHRoZSBnaXZlbiBlbGVtZW50LgorICAgIFwqLworICAg IHRoaXMudHlwZSA9IGVsLnRhZ05hbWUgfHwgZWwubm9kZU5hbWU7CisgICAg dmFyIGlkID0gdGhpcy5pZCA9IElEKHRoaXMpOworICAgIHRoaXMuYW5pbXMg PSB7fTsKKyAgICB0aGlzLl8gPSB7CisgICAgICAgIHRyYW5zZm9ybTogW10K KyAgICB9OworICAgIGVsLnNuYXAgPSBpZDsKKyAgICBodWJbaWRdID0gdGhp czsKKyAgICBpZiAodGhpcy50eXBlID09ICJnIikgeworICAgICAgICB0aGlz LmFkZCA9IGFkZDJncm91cDsKKyAgICB9CisgICAgaWYgKHRoaXMudHlwZSBp biB7ZzogMSwgbWFzazogMSwgcGF0dGVybjogMSwgc3ltYm9sOiAxfSkgewor ICAgICAgICBmb3IgKHZhciBtZXRob2QgaW4gUGFwZXIucHJvdG90eXBlKSBp ZiAoUGFwZXIucHJvdG90eXBlW2hhc10obWV0aG9kKSkgeworICAgICAgICAg ICAgdGhpc1ttZXRob2RdID0gUGFwZXIucHJvdG90eXBlW21ldGhvZF07Cisg ICAgICAgIH0KKyAgICB9Cit9CisgICAvKlwKKyAgICAgKiBFbGVtZW50LmF0 dHIKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEdldHMgb3Ig c2V0cyBnaXZlbiBhdHRyaWJ1dGVzIG9mIHRoZSBlbGVtZW50LgorICAgICAq KgorICAgICAtIHBhcmFtcyAob2JqZWN0KSBjb250YWlucyBrZXktdmFsdWUg cGFpcnMgb2YgYXR0cmlidXRlcyB5b3Ugd2FudCB0byBzZXQKKyAgICAgKiBv cgorICAgICAtIHBhcmFtIChzdHJpbmcpIG5hbWUgb2YgdGhlIGF0dHJpYnV0 ZQorICAgICA9IChFbGVtZW50KSB0aGUgY3VycmVudCBlbGVtZW50CisgICAg ICogb3IKKyAgICAgPSAoc3RyaW5nKSB2YWx1ZSBvZiBhdHRyaWJ1dGUKKyAg ICAgPiBVc2FnZQorICAgICB8IGVsLmF0dHIoeworICAgICB8ICAgICBmaWxs OiAiI2ZjMCIsCisgICAgIHwgICAgIHN0cm9rZTogIiMwMDAiLAorICAgICB8 ICAgICBzdHJva2VXaWR0aDogMiwgLy8gQ2FtZWxDYXNlLi4uCisgICAgIHwg ICAgICJmaWxsLW9wYWNpdHkiOiAwLjUsIC8vIG9yIGRhc2gtc2VwYXJhdGVk IG5hbWVzCisgICAgIHwgICAgIHdpZHRoOiAiKj0yIiAvLyBwcmVmaXhlZCB2 YWx1ZXMKKyAgICAgfCB9KTsKKyAgICAgfCBjb25zb2xlLmxvZyhlbC5hdHRy KCJmaWxsIikpOyAvLyAjZmMwCisgICAgICogUHJlZml4ZWQgdmFsdWVzIGlu IGZvcm1hdCBgIis9MTAiYCBzdXBwb3J0ZWQuIEFsbCBmb3VyIG9wZXJhdGlv bnMKKyAgICAgKiAoYCtgLCBgLWAsIGAqYCBhbmQgYC9gKSBjb3VsZCBiZSB1 c2VkLiBPcHRpb25hbGx5IHlvdSBjYW4gdXNlIHVuaXRzIGZvciBgK2AKKyAg ICAgKiBhbmQgYC1gOiBgIis9MmVtImAuCisgICAgXCovCisgICAgRWxlbWVu dC5wcm90b3R5cGUuYXR0ciA9IGZ1bmN0aW9uIChwYXJhbXMsIHZhbHVlKSB7 CisgICAgICAgIHZhciBlbCA9IHRoaXMsCisgICAgICAgICAgICBub2RlID0g ZWwubm9kZTsKKyAgICAgICAgaWYgKCFwYXJhbXMpIHsKKyAgICAgICAgICAg IGlmIChub2RlLm5vZGVUeXBlICE9IDEpIHsKKyAgICAgICAgICAgICAgICBy ZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0ZXh0OiBub2RlLm5vZGVW YWx1ZQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAg ICAgICAgICB2YXIgYXR0ciA9IG5vZGUuYXR0cmlidXRlcywKKyAgICAgICAg ICAgICAgICBvdXQgPSB7fTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAw LCBpaSA9IGF0dHIubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAg ICAgICAgIG91dFthdHRyW2ldLm5vZGVOYW1lXSA9IGF0dHJbaV0ubm9kZVZh bHVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG91dDsK KyAgICAgICAgfQorICAgICAgICBpZiAoaXMocGFyYW1zLCAic3RyaW5nIikp IHsKKyAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgewor ICAgICAgICAgICAgICAgIHZhciBqc29uID0ge307CisgICAgICAgICAgICAg ICAganNvbltwYXJhbXNdID0gdmFsdWU7CisgICAgICAgICAgICAgICAgcGFy YW1zID0ganNvbjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgcmV0dXJuIGV2ZSgic25hcC51dGlsLmdldGF0dHIuIiArIHBhcmFt cywgZWwpLmZpcnN0RGVmaW5lZCgpOworICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAgICAgIGZvciAodmFyIGF0dCBpbiBwYXJhbXMpIHsKKyAgICAg ICAgICAgIGlmIChwYXJhbXNbaGFzXShhdHQpKSB7CisgICAgICAgICAgICAg ICAgZXZlKCJzbmFwLnV0aWwuYXR0ci4iICsgYXR0LCBlbCwgcGFyYW1zW2F0 dF0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVy biBlbDsKKyAgICB9OworLypcCisgKiBTbmFwLnBhcnNlCisgWyBtZXRob2Qg XQorICoqCisgKiBQYXJzZXMgU1ZHIGZyYWdtZW50IGFuZCBjb252ZXJ0cyBp dCBpbnRvIGEgQEZyYWdtZW50CisgKioKKyAtIHN2ZyAoc3RyaW5nKSBTVkcg c3RyaW5nCisgPSAoRnJhZ21lbnQpIHRoZSBARnJhZ21lbnQKK1wqLworU25h cC5wYXJzZSA9IGZ1bmN0aW9uIChzdmcpIHsKKyAgICB2YXIgZiA9IGdsb2Iu ZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwKKyAgICAgICAgZnVsbCA9 IHRydWUsCisgICAgICAgIGRpdiA9IGdsb2IuZG9jLmNyZWF0ZUVsZW1lbnQo ImRpdiIpOworICAgIHN2ZyA9IFN0cihzdmcpOworICAgIGlmICghc3ZnLm1h dGNoKC9eXHMqPFxzKnN2Zyg/OlxzfD4pLykpIHsKKyAgICAgICAgc3ZnID0g Ijxzdmc+IiArIHN2ZyArICI8L3N2Zz4iOworICAgICAgICBmdWxsID0gZmFs c2U7CisgICAgfQorICAgIGRpdi5pbm5lckhUTUwgPSBzdmc7CisgICAgc3Zn ID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzdmciKVswXTsKKyAgICBp ZiAoc3ZnKSB7CisgICAgICAgIGlmIChmdWxsKSB7CisgICAgICAgICAgICBm ID0gc3ZnOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgd2hpbGUg KHN2Zy5maXJzdENoaWxkKSB7CisgICAgICAgICAgICAgICAgZi5hcHBlbmRD aGlsZChzdmcuZmlyc3RDaGlsZCk7CisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICB9CisgICAgcmV0dXJuIG5ldyBGcmFnbWVudChmKTsKK307Citm dW5jdGlvbiBGcmFnbWVudChmcmFnKSB7CisgICAgdGhpcy5ub2RlID0gZnJh ZzsKK30KKy8qXAorICogU25hcC5mcmFnbWVudAorIFsgbWV0aG9kIF0KKyAq KgorICogQ3JlYXRlcyBhIERPTSBmcmFnbWVudCBmcm9tIGEgZ2l2ZW4gbGlz dCBvZiBlbGVtZW50cyBvciBzdHJpbmdzCisgKioKKyAtIHZhcmFyZ3MgKOKA pikgU1ZHIHN0cmluZworID0gKEZyYWdtZW50KSB0aGUgQEZyYWdtZW50Citc Ki8KK1NuYXAuZnJhZ21lbnQgPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyIGFy Z3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDAp LAorICAgICAgICBmID0gZ2xvYi5kb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVu dCgpOworICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGFyZ3MubGVuZ3RoOyBp IDwgaWk7IGkrKykgeworICAgICAgICB2YXIgaXRlbSA9IGFyZ3NbaV07Cisg ICAgICAgIGlmIChpdGVtLm5vZGUgJiYgaXRlbS5ub2RlLm5vZGVUeXBlKSB7 CisgICAgICAgICAgICBmLmFwcGVuZENoaWxkKGl0ZW0ubm9kZSk7CisgICAg ICAgIH0KKyAgICAgICAgaWYgKGl0ZW0ubm9kZVR5cGUpIHsKKyAgICAgICAg ICAgIGYuYXBwZW5kQ2hpbGQoaXRlbSk7CisgICAgICAgIH0KKyAgICAgICAg aWYgKHR5cGVvZiBpdGVtID09ICJzdHJpbmciKSB7CisgICAgICAgICAgICBm LmFwcGVuZENoaWxkKFNuYXAucGFyc2UoaXRlbSkubm9kZSk7CisgICAgICAg IH0KKyAgICB9CisgICAgcmV0dXJuIG5ldyBGcmFnbWVudChmKTsKK307CisK K2Z1bmN0aW9uIG1ha2UobmFtZSwgcGFyZW50KSB7CisgICAgdmFyIHJlcyA9 ICQobmFtZSk7CisgICAgcGFyZW50LmFwcGVuZENoaWxkKHJlcyk7CisgICAg dmFyIGVsID0gd3JhcChyZXMpOworICAgIHJldHVybiBlbDsKK30KK2Z1bmN0 aW9uIFBhcGVyKHcsIGgpIHsKKyAgICB2YXIgcmVzLAorICAgICAgICBkZXNj LAorICAgICAgICBkZWZzLAorICAgICAgICBwcm90byA9IFBhcGVyLnByb3Rv dHlwZTsKKyAgICBpZiAodyAmJiB3LnRhZ05hbWUgPT0gInN2ZyIpIHsKKyAg ICAgICAgaWYgKHcuc25hcCBpbiBodWIpIHsKKyAgICAgICAgICAgIHJldHVy biBodWJbdy5zbmFwXTsKKyAgICAgICAgfQorICAgICAgICB2YXIgZG9jID0g dy5vd25lckRvY3VtZW50OworICAgICAgICByZXMgPSBuZXcgRWxlbWVudCh3 KTsKKyAgICAgICAgZGVzYyA9IHcuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRl c2MiKVswXTsKKyAgICAgICAgZGVmcyA9IHcuZ2V0RWxlbWVudHNCeVRhZ05h bWUoImRlZnMiKVswXTsKKyAgICAgICAgaWYgKCFkZXNjKSB7CisgICAgICAg ICAgICBkZXNjID0gJCgiZGVzYyIpOworICAgICAgICAgICAgZGVzYy5hcHBl bmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoIkNyZWF0ZWQgd2l0aCBTbmFw IikpOworICAgICAgICAgICAgcmVzLm5vZGUuYXBwZW5kQ2hpbGQoZGVzYyk7 CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFkZWZzKSB7CisgICAgICAgICAg ICBkZWZzID0gJCgiZGVmcyIpOworICAgICAgICAgICAgcmVzLm5vZGUuYXBw ZW5kQ2hpbGQoZGVmcyk7CisgICAgICAgIH0KKyAgICAgICAgcmVzLmRlZnMg PSBkZWZzOworICAgICAgICBmb3IgKHZhciBrZXkgaW4gcHJvdG8pIGlmIChw cm90b1toYXNdKGtleSkpIHsKKyAgICAgICAgICAgIHJlc1trZXldID0gcHJv dG9ba2V5XTsKKyAgICAgICAgfQorICAgICAgICByZXMucGFwZXIgPSByZXMu cm9vdCA9IHJlczsKKyAgICB9IGVsc2UgeworICAgICAgICByZXMgPSBtYWtl KCJzdmciLCBnbG9iLmRvYy5ib2R5KTsKKyAgICAgICAgJChyZXMubm9kZSwg eworICAgICAgICAgICAgaGVpZ2h0OiBoLAorICAgICAgICAgICAgdmVyc2lv bjogMS4xLAorICAgICAgICAgICAgd2lkdGg6IHcsCisgICAgICAgICAgICB4 bWxuczogeG1sbnMKKyAgICAgICAgfSk7CisgICAgfQorICAgIHJldHVybiBy ZXM7Cit9CitmdW5jdGlvbiB3cmFwKGRvbSkgeworICAgIGlmICghZG9tKSB7 CisgICAgICAgIHJldHVybiBkb207CisgICAgfQorICAgIGlmIChkb20gaW5z dGFuY2VvZiBFbGVtZW50IHx8IGRvbSBpbnN0YW5jZW9mIEZyYWdtZW50KSB7 CisgICAgICAgIHJldHVybiBkb207CisgICAgfQorICAgIGlmIChkb20udGFn TmFtZSAmJiBkb20udGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICJzdmciKSB7 CisgICAgICAgIHJldHVybiBuZXcgUGFwZXIoZG9tKTsKKyAgICB9CisgICAg aWYgKGRvbS50YWdOYW1lICYmIGRvbS50YWdOYW1lLnRvTG93ZXJDYXNlKCkg PT0gIm9iamVjdCIgJiYgZG9tLnR5cGUgPT0gImltYWdlL3N2Zyt4bWwiKSB7 CisgICAgICAgIHJldHVybiBuZXcgUGFwZXIoZG9tLmNvbnRlbnREb2N1bWVu dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic3ZnIilbMF0pOworICAgIH0KKyAg ICByZXR1cm4gbmV3IEVsZW1lbnQoZG9tKTsKK30KKworU25hcC5fLm1ha2Ug PSBtYWtlOworU25hcC5fLndyYXAgPSB3cmFwOworLypcCisgKiBQYXBlci5l bAorIFsgbWV0aG9kIF0KKyAqKgorICogQ3JlYXRlcyBhbiBlbGVtZW50IG9u IHBhcGVyIHdpdGggYSBnaXZlbiBuYW1lIGFuZCBubyBhdHRyaWJ1dGVzCisg KioKKyAtIG5hbWUgKHN0cmluZykgdGFnIG5hbWUKKyAtIGF0dHIgKG9iamVj dCkgYXR0cmlidXRlcworID0gKEVsZW1lbnQpIHRoZSBjdXJyZW50IGVsZW1l bnQKKyA+IFVzYWdlCisgfCB2YXIgYyA9IHBhcGVyLmNpcmNsZSgxMCwgMTAs IDEwKTsgLy8gaXMgdGhlIHNhbWUgYXMuLi4KKyB8IHZhciBjID0gcGFwZXIu ZWwoImNpcmNsZSIpLmF0dHIoeworIHwgICAgIGN4OiAxMCwKKyB8ICAgICBj eTogMTAsCisgfCAgICAgcjogMTAKKyB8IH0pOworIHwgLy8gYW5kIHRoZSBz YW1lIGFzCisgfCB2YXIgYyA9IHBhcGVyLmVsKCJjaXJjbGUiLCB7CisgfCAg ICAgY3g6IDEwLAorIHwgICAgIGN5OiAxMCwKKyB8ICAgICByOiAxMAorIHwg fSk7CitcKi8KK1BhcGVyLnByb3RvdHlwZS5lbCA9IGZ1bmN0aW9uIChuYW1l LCBhdHRyKSB7CisgICAgdmFyIGVsID0gbWFrZShuYW1lLCB0aGlzLm5vZGUp OworICAgIGF0dHIgJiYgZWwuYXR0cihhdHRyKTsKKyAgICByZXR1cm4gZWw7 Cit9OworLypcCisgKiBFbGVtZW50LmNoaWxkcmVuCisgWyBtZXRob2QgXQor ICoqCisgKiBSZXR1cm5zIGFycmF5IG9mIGFsbCB0aGUgY2hpbGRyZW4gb2Yg dGhlIGVsZW1lbnQuCisgPSAoYXJyYXkpIGFycmF5IG9mIEVsZW1lbnRzCitc Ki8KK0VsZW1lbnQucHJvdG90eXBlLmNoaWxkcmVuID0gZnVuY3Rpb24gKCkg eworICAgIHZhciBvdXQgPSBbXSwKKyAgICAgICAgY2ggPSB0aGlzLm5vZGUu Y2hpbGROb2RlczsKKyAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBjaC5sZW5n dGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgIG91dFtpXSA9IFNuYXAoY2hb aV0pOworICAgIH0KKyAgICByZXR1cm4gb3V0OworfTsKK2Z1bmN0aW9uIGpz b25GaWxsZXIocm9vdCwgbykgeworICAgIGZvciAodmFyIGkgPSAwLCBpaSA9 IHJvb3QubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICB2YXIgaXRl bSA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiByb290W2ldLnR5cGUsCisg ICAgICAgICAgICAgICAgYXR0cjogcm9vdFtpXS5hdHRyKCkKKyAgICAgICAg ICAgIH0sCisgICAgICAgICAgICBjaGlsZHJlbiA9IHJvb3RbaV0uY2hpbGRy ZW4oKTsKKyAgICAgICAgby5wdXNoKGl0ZW0pOworICAgICAgICBpZiAoY2hp bGRyZW4ubGVuZ3RoKSB7CisgICAgICAgICAgICBqc29uRmlsbGVyKGNoaWxk cmVuLCBpdGVtLmNoaWxkTm9kZXMgPSBbXSk7CisgICAgICAgIH0KKyAgICB9 Cit9CisvKlwKKyAqIEVsZW1lbnQudG9KU09OCisgWyBtZXRob2QgXQorICoq CisgKiBSZXR1cm5zIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2 ZW4gZWxlbWVudCBhbmQgYWxsIGl0cyBjaGlsZHJlbi4KKyA9IChvYmplY3Qp IGluIGZvcm1hdAorIG8geworIG8gICAgIHR5cGUgKHN0cmluZykgdGhpcy50 eXBlLAorIG8gICAgIGF0dHIgKG9iamVjdCkgYXR0cmlidXRlcyBtYXAsCisg byAgICAgY2hpbGROb2RlcyAoYXJyYXkpIG9wdGlvbmFsIGFycmF5IG9mIGNo aWxkcmVuIGluIHRoZSBzYW1lIGZvcm1hdAorIG8gfQorXCovCitFbGVtZW50 LnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyIG91 dCA9IFtdOworICAgIGpzb25GaWxsZXIoW3RoaXNdLCBvdXQpOworICAgIHJl dHVybiBvdXRbMF07Cit9OworLy8gZGVmYXVsdAorZXZlLm9uKCJzbmFwLnV0 aWwuZ2V0YXR0ciIsIGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgYXR0ID0gZXZl Lm50KCk7CisgICAgYXR0ID0gYXR0LnN1YnN0cmluZyhhdHQubGFzdEluZGV4 T2YoIi4iKSArIDEpOworICAgIHZhciBjc3MgPSBhdHQucmVwbGFjZSgvW0Et Wl0vZywgZnVuY3Rpb24gKGxldHRlcikgeworICAgICAgICByZXR1cm4gIi0i ICsgbGV0dGVyLnRvTG93ZXJDYXNlKCk7CisgICAgfSk7CisgICAgaWYgKGNz c0F0dHJbaGFzXShjc3MpKSB7CisgICAgICAgIHJldHVybiB0aGlzLm5vZGUu b3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHRo aXMubm9kZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShjc3MpOworICAgIH0g ZWxzZSB7CisgICAgICAgIHJldHVybiAkKHRoaXMubm9kZSwgYXR0KTsKKyAg ICB9Cit9KTsKK3ZhciBjc3NBdHRyID0geworICAgICJhbGlnbm1lbnQtYmFz ZWxpbmUiOiAwLAorICAgICJiYXNlbGluZS1zaGlmdCI6IDAsCisgICAgImNs aXAiOiAwLAorICAgICJjbGlwLXBhdGgiOiAwLAorICAgICJjbGlwLXJ1bGUi OiAwLAorICAgICJjb2xvciI6IDAsCisgICAgImNvbG9yLWludGVycG9sYXRp b24iOiAwLAorICAgICJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMiOiAw LAorICAgICJjb2xvci1wcm9maWxlIjogMCwKKyAgICAiY29sb3ItcmVuZGVy aW5nIjogMCwKKyAgICAiY3Vyc29yIjogMCwKKyAgICAiZGlyZWN0aW9uIjog MCwKKyAgICAiZGlzcGxheSI6IDAsCisgICAgImRvbWluYW50LWJhc2VsaW5l IjogMCwKKyAgICAiZW5hYmxlLWJhY2tncm91bmQiOiAwLAorICAgICJmaWxs IjogMCwKKyAgICAiZmlsbC1vcGFjaXR5IjogMCwKKyAgICAiZmlsbC1ydWxl IjogMCwKKyAgICAiZmlsdGVyIjogMCwKKyAgICAiZmxvb2QtY29sb3IiOiAw LAorICAgICJmbG9vZC1vcGFjaXR5IjogMCwKKyAgICAiZm9udCI6IDAsCisg ICAgImZvbnQtZmFtaWx5IjogMCwKKyAgICAiZm9udC1zaXplIjogMCwKKyAg ICAiZm9udC1zaXplLWFkanVzdCI6IDAsCisgICAgImZvbnQtc3RyZXRjaCI6 IDAsCisgICAgImZvbnQtc3R5bGUiOiAwLAorICAgICJmb250LXZhcmlhbnQi OiAwLAorICAgICJmb250LXdlaWdodCI6IDAsCisgICAgImdseXBoLW9yaWVu dGF0aW9uLWhvcml6b250YWwiOiAwLAorICAgICJnbHlwaC1vcmllbnRhdGlv bi12ZXJ0aWNhbCI6IDAsCisgICAgImltYWdlLXJlbmRlcmluZyI6IDAsCisg ICAgImtlcm5pbmciOiAwLAorICAgICJsZXR0ZXItc3BhY2luZyI6IDAsCisg ICAgImxpZ2h0aW5nLWNvbG9yIjogMCwKKyAgICAibWFya2VyIjogMCwKKyAg ICAibWFya2VyLWVuZCI6IDAsCisgICAgIm1hcmtlci1taWQiOiAwLAorICAg ICJtYXJrZXItc3RhcnQiOiAwLAorICAgICJtYXNrIjogMCwKKyAgICAib3Bh Y2l0eSI6IDAsCisgICAgIm92ZXJmbG93IjogMCwKKyAgICAicG9pbnRlci1l dmVudHMiOiAwLAorICAgICJzaGFwZS1yZW5kZXJpbmciOiAwLAorICAgICJz dG9wLWNvbG9yIjogMCwKKyAgICAic3RvcC1vcGFjaXR5IjogMCwKKyAgICAi c3Ryb2tlIjogMCwKKyAgICAic3Ryb2tlLWRhc2hhcnJheSI6IDAsCisgICAg InN0cm9rZS1kYXNob2Zmc2V0IjogMCwKKyAgICAic3Ryb2tlLWxpbmVjYXAi OiAwLAorICAgICJzdHJva2UtbGluZWpvaW4iOiAwLAorICAgICJzdHJva2Ut bWl0ZXJsaW1pdCI6IDAsCisgICAgInN0cm9rZS1vcGFjaXR5IjogMCwKKyAg ICAic3Ryb2tlLXdpZHRoIjogMCwKKyAgICAidGV4dC1hbmNob3IiOiAwLAor ICAgICJ0ZXh0LWRlY29yYXRpb24iOiAwLAorICAgICJ0ZXh0LXJlbmRlcmlu ZyI6IDAsCisgICAgInVuaWNvZGUtYmlkaSI6IDAsCisgICAgInZpc2liaWxp dHkiOiAwLAorICAgICJ3b3JkLXNwYWNpbmciOiAwLAorICAgICJ3cml0aW5n LW1vZGUiOiAwCit9OworCitldmUub24oInNuYXAudXRpbC5hdHRyIiwgZnVu Y3Rpb24gKHZhbHVlKSB7CisgICAgdmFyIGF0dCA9IGV2ZS5udCgpLAorICAg ICAgICBhdHRyID0ge307CisgICAgYXR0ID0gYXR0LnN1YnN0cmluZyhhdHQu bGFzdEluZGV4T2YoIi4iKSArIDEpOworICAgIGF0dHJbYXR0XSA9IHZhbHVl OworICAgIHZhciBzdHlsZSA9IGF0dC5yZXBsYWNlKC8tKFx3KS9naSwgZnVu Y3Rpb24gKGFsbCwgbGV0dGVyKSB7CisgICAgICAgICAgICByZXR1cm4gbGV0 dGVyLnRvVXBwZXJDYXNlKCk7CisgICAgICAgIH0pLAorICAgICAgICBjc3Mg PSBhdHQucmVwbGFjZSgvW0EtWl0vZywgZnVuY3Rpb24gKGxldHRlcikgewor ICAgICAgICAgICAgcmV0dXJuICItIiArIGxldHRlci50b0xvd2VyQ2FzZSgp OworICAgICAgICB9KTsKKyAgICBpZiAoY3NzQXR0cltoYXNdKGNzcykpIHsK KyAgICAgICAgdGhpcy5ub2RlLnN0eWxlW3N0eWxlXSA9IHZhbHVlID09IG51 bGwgPyBFIDogdmFsdWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgJCh0aGlz Lm5vZGUsIGF0dHIpOworICAgIH0KK30pOworKGZ1bmN0aW9uIChwcm90bykg e30oUGFwZXIucHJvdG90eXBlKSk7CisKKy8vIHNpbXBsZSBhamF4CisvKlwK KyAqIFNuYXAuYWpheAorIFsgbWV0aG9kIF0KKyAqKgorICogU2ltcGxlIGlt cGxlbWVudGF0aW9uIG9mIEFqYXgKKyAqKgorIC0gdXJsIChzdHJpbmcpIFVS TAorIC0gcG9zdERhdGEgKG9iamVjdHxzdHJpbmcpIGRhdGEgZm9yIHBvc3Qg cmVxdWVzdAorIC0gY2FsbGJhY2sgKGZ1bmN0aW9uKSBjYWxsYmFjaworIC0g c2NvcGUgKG9iamVjdCkgI29wdGlvbmFsIHNjb3BlIG9mIGNhbGxiYWNrCisg KiBvcgorIC0gdXJsIChzdHJpbmcpIFVSTAorIC0gY2FsbGJhY2sgKGZ1bmN0 aW9uKSBjYWxsYmFjaworIC0gc2NvcGUgKG9iamVjdCkgI29wdGlvbmFsIHNj b3BlIG9mIGNhbGxiYWNrCisgPSAoWE1MSHR0cFJlcXVlc3QpIHRoZSBYTUxI dHRwUmVxdWVzdCBvYmplY3QsIGp1c3QgaW4gY2FzZQorXCovCitTbmFwLmFq YXggPSBmdW5jdGlvbiAodXJsLCBwb3N0RGF0YSwgY2FsbGJhY2ssIHNjb3Bl KXsKKyAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0LAorICAgICAg ICBpZCA9IElEKCk7CisgICAgaWYgKHJlcSkgeworICAgICAgICBpZiAoaXMo cG9zdERhdGEsICJmdW5jdGlvbiIpKSB7CisgICAgICAgICAgICBzY29wZSA9 IGNhbGxiYWNrOworICAgICAgICAgICAgY2FsbGJhY2sgPSBwb3N0RGF0YTsK KyAgICAgICAgICAgIHBvc3REYXRhID0gbnVsbDsKKyAgICAgICAgfSBlbHNl IGlmIChpcyhwb3N0RGF0YSwgIm9iamVjdCIpKSB7CisgICAgICAgICAgICB2 YXIgcGQgPSBbXTsKKyAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBwb3N0 RGF0YSkgaWYgKHBvc3REYXRhLmhhc093blByb3BlcnR5KGtleSkpIHsKKyAg ICAgICAgICAgICAgICBwZC5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChrZXkp ICsgIj0iICsgZW5jb2RlVVJJQ29tcG9uZW50KHBvc3REYXRhW2tleV0pKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBvc3REYXRhID0gcGQuam9p bigiJiIpOworICAgICAgICB9CisgICAgICAgIHJlcS5vcGVuKChwb3N0RGF0 YSA/ICJQT1NUIiA6ICJHRVQiKSwgdXJsLCB0cnVlKTsKKyAgICAgICAgaWYg KHBvc3REYXRhKSB7CisgICAgICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRl cigiWC1SZXF1ZXN0ZWQtV2l0aCIsICJYTUxIdHRwUmVxdWVzdCIpOworICAg ICAgICAgICAgcmVxLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtdHlwZSIs ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKTsKKyAgICAg ICAgfQorICAgICAgICBpZiAoY2FsbGJhY2spIHsKKyAgICAgICAgICAgIGV2 ZS5vbmNlKCJzbmFwLmFqYXguIiArIGlkICsgIi4wIiwgY2FsbGJhY2spOwor ICAgICAgICAgICAgZXZlLm9uY2UoInNuYXAuYWpheC4iICsgaWQgKyAiLjIw MCIsIGNhbGxiYWNrKTsKKyAgICAgICAgICAgIGV2ZS5vbmNlKCJzbmFwLmFq YXguIiArIGlkICsgIi4zMDQiLCBjYWxsYmFjayk7CisgICAgICAgIH0KKyAg ICAgICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgewor ICAgICAgICAgICAgaWYgKHJlcS5yZWFkeVN0YXRlICE9IDQpIHJldHVybjsK KyAgICAgICAgICAgIGV2ZSgic25hcC5hamF4LiIgKyBpZCArICIuIiArIHJl cS5zdGF0dXMsIHNjb3BlLCByZXEpOworICAgICAgICB9OworICAgICAgICBp ZiAocmVxLnJlYWR5U3RhdGUgPT0gNCkgeworICAgICAgICAgICAgcmV0dXJu IHJlcTsKKyAgICAgICAgfQorICAgICAgICByZXEuc2VuZChwb3N0RGF0YSk7 CisgICAgICAgIHJldHVybiByZXE7CisgICAgfQorfTsKKy8qXAorICogU25h cC5sb2FkCisgWyBtZXRob2QgXQorICoqCisgKiBMb2FkcyBleHRlcm5hbCBT VkcgZmlsZSBhcyBhIEBGcmFnbWVudCAoc2VlIEBTbmFwLmFqYXggZm9yIG1v cmUgYWR2YW5jZWQgQUpBWCkKKyAqKgorIC0gdXJsIChzdHJpbmcpIFVSTAor IC0gY2FsbGJhY2sgKGZ1bmN0aW9uKSBjYWxsYmFjaworIC0gc2NvcGUgKG9i amVjdCkgI29wdGlvbmFsIHNjb3BlIG9mIGNhbGxiYWNrCitcKi8KK1NuYXAu bG9hZCA9IGZ1bmN0aW9uICh1cmwsIGNhbGxiYWNrLCBzY29wZSkgeworICAg IFNuYXAuYWpheCh1cmwsIGZ1bmN0aW9uIChyZXEpIHsKKyAgICAgICAgdmFy IGYgPSBTbmFwLnBhcnNlKHJlcS5yZXNwb25zZVRleHQpOworICAgICAgICBz Y29wZSA/IGNhbGxiYWNrLmNhbGwoc2NvcGUsIGYpIDogY2FsbGJhY2soZik7 CisgICAgfSk7Cit9OwordmFyIGdldE9mZnNldCA9IGZ1bmN0aW9uIChlbGVt KSB7CisgICAgdmFyIGJveCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0 KCksCisgICAgICAgIGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudCwKKyAgICAg ICAgYm9keSA9IGRvYy5ib2R5LAorICAgICAgICBkb2NFbGVtID0gZG9jLmRv Y3VtZW50RWxlbWVudCwKKyAgICAgICAgY2xpZW50VG9wID0gZG9jRWxlbS5j bGllbnRUb3AgfHwgYm9keS5jbGllbnRUb3AgfHwgMCwgY2xpZW50TGVmdCA9 IGRvY0VsZW0uY2xpZW50TGVmdCB8fCBib2R5LmNsaWVudExlZnQgfHwgMCwK KyAgICAgICAgdG9wICA9IGJveC50b3AgICsgKGcud2luLnBhZ2VZT2Zmc2V0 IHx8IGRvY0VsZW0uc2Nyb2xsVG9wIHx8IGJvZHkuc2Nyb2xsVG9wICkgLSBj bGllbnRUb3AsCisgICAgICAgIGxlZnQgPSBib3gubGVmdCArIChnLndpbi5w YWdlWE9mZnNldCB8fCBkb2NFbGVtLnNjcm9sbExlZnQgfHwgYm9keS5zY3Jv bGxMZWZ0KSAtIGNsaWVudExlZnQ7CisgICAgcmV0dXJuIHsKKyAgICAgICAg eTogdG9wLAorICAgICAgICB4OiBsZWZ0CisgICAgfTsKK307CisvKlwKKyAq IFNuYXAuZ2V0RWxlbWVudEJ5UG9pbnQKKyBbIG1ldGhvZCBdCisgKioKKyAq IFJldHVybnMgeW91IHRvcG1vc3QgZWxlbWVudCB1bmRlciBnaXZlbiBwb2lu dC4KKyAqKgorID0gKG9iamVjdCkgU25hcCBlbGVtZW50IG9iamVjdAorIC0g eCAobnVtYmVyKSB4IGNvb3JkaW5hdGUgZnJvbSB0aGUgdG9wIGxlZnQgY29y bmVyIG9mIHRoZSB3aW5kb3cKKyAtIHkgKG51bWJlcikgeSBjb29yZGluYXRl IGZyb20gdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgd2luZG93CisgPiBV c2FnZQorIHwgU25hcC5nZXRFbGVtZW50QnlQb2ludChtb3VzZVgsIG1vdXNl WSkuYXR0cih7c3Ryb2tlOiAiI2YwMCJ9KTsKK1wqLworU25hcC5nZXRFbGVt ZW50QnlQb2ludCA9IGZ1bmN0aW9uICh4LCB5KSB7CisgICAgdmFyIHBhcGVy ID0gdGhpcywKKyAgICAgICAgc3ZnID0gcGFwZXIuY2FudmFzLAorICAgICAg ICB0YXJnZXQgPSBnbG9iLmRvYy5lbGVtZW50RnJvbVBvaW50KHgsIHkpOwor ICAgIGlmIChnbG9iLndpbi5vcGVyYSAmJiB0YXJnZXQudGFnTmFtZSA9PSAi c3ZnIikgeworICAgICAgICB2YXIgc28gPSBnZXRPZmZzZXQodGFyZ2V0KSwK KyAgICAgICAgICAgIHNyID0gdGFyZ2V0LmNyZWF0ZVNWR1JlY3QoKTsKKyAg ICAgICAgc3IueCA9IHggLSBzby54OworICAgICAgICBzci55ID0geSAtIHNv Lnk7CisgICAgICAgIHNyLndpZHRoID0gc3IuaGVpZ2h0ID0gMTsKKyAgICAg ICAgdmFyIGhpdHMgPSB0YXJnZXQuZ2V0SW50ZXJzZWN0aW9uTGlzdChzciwg bnVsbCk7CisgICAgICAgIGlmIChoaXRzLmxlbmd0aCkgeworICAgICAgICAg ICAgdGFyZ2V0ID0gaGl0c1toaXRzLmxlbmd0aCAtIDFdOworICAgICAgICB9 CisgICAgfQorICAgIGlmICghdGFyZ2V0KSB7CisgICAgICAgIHJldHVybiBu dWxsOworICAgIH0KKyAgICByZXR1cm4gd3JhcCh0YXJnZXQpOworfTsKKy8q XAorICogU25hcC5wbHVnaW4KKyBbIG1ldGhvZCBdCisgKioKKyAqIExldCB5 b3Ugd3JpdGUgcGx1Z2lucy4gWW91IHBhc3MgaW4gYSBmdW5jdGlvbiB3aXRo IGZpdmUgYXJndW1lbnRzLCBsaWtlIHRoaXM6CisgfCBTbmFwLnBsdWdpbihm dW5jdGlvbiAoU25hcCwgRWxlbWVudCwgUGFwZXIsIGdsb2JhbCwgRnJhZ21l bnQpIHsKKyB8ICAgICBTbmFwLm5ld21ldGhvZCA9IGZ1bmN0aW9uICgpIHt9 OworIHwgICAgIEVsZW1lbnQucHJvdG90eXBlLm5ld21ldGhvZCA9IGZ1bmN0 aW9uICgpIHt9OworIHwgICAgIFBhcGVyLnByb3RvdHlwZS5uZXdtZXRob2Qg PSBmdW5jdGlvbiAoKSB7fTsKKyB8IH0pOworICogSW5zaWRlIHRoZSBmdW5j dGlvbiB5b3UgaGF2ZSBhY2Nlc3MgdG8gYWxsIG1haW4gb2JqZWN0cyAoYW5k IHRoZWlyCisgKiBwcm90b3R5cGVzKS4gVGhpcyBhbGxvdyB5b3UgdG8gZXh0 ZW5kIGFueXRoaW5nIHlvdSB3YW50LgorICoqCisgLSBmIChmdW5jdGlvbikg eW91ciBwbHVnaW4gYm9keQorXCovCitTbmFwLnBsdWdpbiA9IGZ1bmN0aW9u IChmKSB7CisgICAgZihTbmFwLCBFbGVtZW50LCBQYXBlciwgZ2xvYiwgRnJh Z21lbnQpOworfTsKK2dsb2Iud2luLlNuYXAgPSBTbmFwOworcmV0dXJuIFNu YXA7Cit9KHdpbmRvdyB8fCB0aGlzKSk7CisKKy8vIENvcHlyaWdodCAoYykg MjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExp Y2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBt YXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0 aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0 aGUgTGljZW5zZSBhdAorLy8KKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9s aWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBi eSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29m dHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRp c3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdB UlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4 cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhl IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQK Ky8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorU25hcC5wbHVn aW4oZnVuY3Rpb24gKFNuYXAsIEVsZW1lbnQsIFBhcGVyLCBnbG9iLCBGcmFn bWVudCkgeworICAgIHZhciBlbHByb3RvID0gRWxlbWVudC5wcm90b3R5cGUs CisgICAgICAgIGlzID0gU25hcC5pcywKKyAgICAgICAgU3RyID0gU3RyaW5n LAorICAgICAgICB1bml0MnB4ID0gU25hcC5fdW5pdDJweCwKKyAgICAgICAg JCA9IFNuYXAuXy4kLAorICAgICAgICBtYWtlID0gU25hcC5fLm1ha2UsCisg ICAgICAgIGdldFNvbWVEZWZzID0gU25hcC5fLmdldFNvbWVEZWZzLAorICAg ICAgICBoYXMgPSAiaGFzT3duUHJvcGVydHkiLAorICAgICAgICB3cmFwID0g U25hcC5fLndyYXA7CisgICAgLypcCisgICAgICogRWxlbWVudC5nZXRCQm94 CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZXR1cm5zIHRo ZSBib3VuZGluZyBib3ggZGVzY3JpcHRvciBmb3IgdGhlIGdpdmVuIGVsZW1l bnQKKyAgICAgKioKKyAgICAgPSAob2JqZWN0KSBib3VuZGluZyBib3ggZGVz Y3JpcHRvcjoKKyAgICAgbyB7CisgICAgIG8gICAgIGN4OiAobnVtYmVyKSB4 IG9mIHRoZSBjZW50ZXIsCisgICAgIG8gICAgIGN5OiAobnVtYmVyKSB4IG9m IHRoZSBjZW50ZXIsCisgICAgIG8gICAgIGg6IChudW1iZXIpIGhlaWdodCwK KyAgICAgbyAgICAgaGVpZ2h0OiAobnVtYmVyKSBoZWlnaHQsCisgICAgIG8g ICAgIHBhdGg6IChzdHJpbmcpIHBhdGggY29tbWFuZCBmb3IgdGhlIGJveCwK KyAgICAgbyAgICAgcjA6IChudW1iZXIpIHJhZGl1cyBvZiBhIGNpcmNsZSB0 aGF0IGZ1bGx5IGVuY2xvc2VzIHRoZSBib3gsCisgICAgIG8gICAgIHIxOiAo bnVtYmVyKSByYWRpdXMgb2YgdGhlIHNtYWxsZXN0IGNpcmNsZSB0aGF0IGNh biBiZSBlbmNsb3NlZCwKKyAgICAgbyAgICAgcjI6IChudW1iZXIpIHJhZGl1 cyBvZiB0aGUgbGFyZ2VzdCBjaXJjbGUgdGhhdCBjYW4gYmUgZW5jbG9zZWQs CisgICAgIG8gICAgIHZiOiAoc3RyaW5nKSBib3ggYXMgYSB2aWV3Ym94IGNv bW1hbmQsCisgICAgIG8gICAgIHc6IChudW1iZXIpIHdpZHRoLAorICAgICBv ICAgICB3aWR0aDogKG51bWJlcikgd2lkdGgsCisgICAgIG8gICAgIHgyOiAo bnVtYmVyKSB4IG9mIHRoZSByaWdodCBzaWRlLAorICAgICBvICAgICB4OiAo bnVtYmVyKSB4IG9mIHRoZSBsZWZ0IHNpZGUsCisgICAgIG8gICAgIHkyOiAo bnVtYmVyKSB5IG9mIHRoZSBib3R0b20gZWRnZSwKKyAgICAgbyAgICAgeTog KG51bWJlcikgeSBvZiB0aGUgdG9wIGVkZ2UKKyAgICAgbyB9CisgICAgXCov CisgICAgZWxwcm90by5nZXRCQm94ID0gZnVuY3Rpb24gKGlzV2l0aG91dFRy YW5zZm9ybSkgeworICAgICAgICBpZiAoIVNuYXAuTWF0cml4IHx8ICFTbmFw LnBhdGgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm5vZGUuZ2V0QkJv eCgpOworICAgICAgICB9CisgICAgICAgIHZhciBlbCA9IHRoaXMsCisgICAg ICAgICAgICBtID0gbmV3IFNuYXAuTWF0cml4OworICAgICAgICBpZiAoZWwu cmVtb3ZlZCkgeworICAgICAgICAgICAgcmV0dXJuIFNuYXAuXy5ib3goKTsK KyAgICAgICAgfQorICAgICAgICB3aGlsZSAoZWwudHlwZSA9PSAidXNlIikg eworICAgICAgICAgICAgaWYgKCFpc1dpdGhvdXRUcmFuc2Zvcm0pIHsKKyAg ICAgICAgICAgICAgICBtID0gbS5hZGQoZWwudHJhbnNmb3JtKCkubG9jYWxN YXRyaXgudHJhbnNsYXRlKGVsLmF0dHIoIngiKSB8fCAwLCBlbC5hdHRyKCJ5 IikgfHwgMCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGVs Lm9yaWdpbmFsKSB7CisgICAgICAgICAgICAgICAgZWwgPSBlbC5vcmlnaW5h bDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFy IGhyZWYgPSBlbC5hdHRyKCJ4bGluazpocmVmIik7CisgICAgICAgICAgICAg ICAgZWwgPSBlbC5vcmlnaW5hbCA9IGVsLm5vZGUub3duZXJEb2N1bWVudC5n ZXRFbGVtZW50QnlJZChocmVmLnN1YnN0cmluZyhocmVmLmluZGV4T2YoIiMi KSArIDEpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2 YXIgXyA9IGVsLl8sCisgICAgICAgICAgICBwYXRoZmluZGVyID0gU25hcC5w YXRoLmdldFtlbC50eXBlXSB8fCBTbmFwLnBhdGguZ2V0LmRlZmx0OworICAg ICAgICB0cnkgeworICAgICAgICAgICAgaWYgKGlzV2l0aG91dFRyYW5zZm9y bSkgeworICAgICAgICAgICAgICAgIF8uYmJveHd0ID0gcGF0aGZpbmRlciA/ IFNuYXAucGF0aC5nZXRCQm94KGVsLnJlYWxQYXRoID0gcGF0aGZpbmRlcihl bCkpIDogU25hcC5fLmJveChlbC5ub2RlLmdldEJCb3goKSk7CisgICAgICAg ICAgICAgICAgcmV0dXJuIFNuYXAuXy5ib3goXy5iYm94d3QpOworICAgICAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbC5yZWFsUGF0aCA9 IHBhdGhmaW5kZXIoZWwpOworICAgICAgICAgICAgICAgIGVsLm1hdHJpeCA9 IGVsLnRyYW5zZm9ybSgpLmxvY2FsTWF0cml4OworICAgICAgICAgICAgICAg IF8uYmJveCA9IFNuYXAucGF0aC5nZXRCQm94KFNuYXAucGF0aC5tYXAoZWwu cmVhbFBhdGgsIG0uYWRkKGVsLm1hdHJpeCkpKTsKKyAgICAgICAgICAgICAg ICByZXR1cm4gU25hcC5fLmJveChfLmJib3gpOworICAgICAgICAgICAgfQor ICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAvLyBGaXJlZm94 IGRvZXNu4oCZdCBnaXZlIHlvdSBiYm94IG9mIGhpZGRlbiBlbGVtZW50Cisg ICAgICAgICAgICByZXR1cm4gU25hcC5fLmJveCgpOworICAgICAgICB9Cisg ICAgfTsKKyAgICB2YXIgcHJvcFN0cmluZyA9IGZ1bmN0aW9uICgpIHsKKyAg ICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nOworICAgIH07CisgICAgZnVuY3Rp b24gZXh0cmFjdFRyYW5zZm9ybShlbCwgdHN0cikgeworICAgICAgICBpZiAo dHN0ciA9PSBudWxsKSB7CisgICAgICAgICAgICB2YXIgZG9SZXR1cm4gPSB0 cnVlOworICAgICAgICAgICAgaWYgKGVsLnR5cGUgPT0gImxpbmVhckdyYWRp ZW50IiB8fCBlbC50eXBlID09ICJyYWRpYWxHcmFkaWVudCIpIHsKKyAgICAg ICAgICAgICAgICB0c3RyID0gZWwubm9kZS5nZXRBdHRyaWJ1dGUoImdyYWRp ZW50VHJhbnNmb3JtIik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGVsLnR5 cGUgPT0gInBhdHRlcm4iKSB7CisgICAgICAgICAgICAgICAgdHN0ciA9IGVs Lm5vZGUuZ2V0QXR0cmlidXRlKCJwYXR0ZXJuVHJhbnNmb3JtIik7CisgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRzdHIgPSBlbC5u b2RlLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIik7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBpZiAoIXRzdHIpIHsKKyAgICAgICAgICAgICAgICBy ZXR1cm4gbmV3IFNuYXAuTWF0cml4OworICAgICAgICAgICAgfQorICAgICAg ICAgICAgdHN0ciA9IFNuYXAuXy5zdmdUcmFuc2Zvcm0yc3RyaW5nKHRzdHIp OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCFTbmFwLl8u cmdUcmFuc2Zvcm0udGVzdCh0c3RyKSkgeworICAgICAgICAgICAgICAgIHRz dHIgPSBTbmFwLl8uc3ZnVHJhbnNmb3JtMnN0cmluZyh0c3RyKTsKKyAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdHN0ciA9IFN0cih0 c3RyKS5yZXBsYWNlKC9cLnszfXxcdTIwMjYvZywgZWwuXy50cmFuc2Zvcm0g fHwgIiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzKHRz dHIsICJhcnJheSIpKSB7CisgICAgICAgICAgICAgICAgdHN0ciA9IFNuYXAu cGF0aCA/IFNuYXAucGF0aC50b1N0cmluZy5jYWxsKHRzdHIpIDogU3RyKHRz dHIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWwuXy50cmFuc2Zv cm0gPSB0c3RyOworICAgICAgICB9CisgICAgICAgIHZhciBtID0gU25hcC5f LnRyYW5zZm9ybTJtYXRyaXgodHN0ciwgZWwuZ2V0QkJveCgxKSk7CisgICAg ICAgIGlmIChkb1JldHVybikgeworICAgICAgICAgICAgcmV0dXJuIG07Cisg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlbC5tYXRyaXggPSBtOwor ICAgICAgICB9CisgICAgfQorICAgIC8qXAorICAgICAqIEVsZW1lbnQudHJh bnNmb3JtCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBHZXRz IG9yIHNldHMgdHJhbnNmb3JtYXRpb24gb2YgdGhlIGVsZW1lbnQKKyAgICAg KioKKyAgICAgLSB0c3RyIChzdHJpbmcpIHRyYW5zZm9ybSBzdHJpbmcgaW4g U25hcCBvciBTVkcgZm9ybWF0CisgICAgID0gKEVsZW1lbnQpIHRoZSBjdXJy ZW50IGVsZW1lbnQKKyAgICAgKiBvcgorICAgICA9IChvYmplY3QpIHRyYW5z Zm9ybWF0aW9uIGRlc2NyaXB0b3I6CisgICAgIG8geworICAgICBvICAgICBz dHJpbmcgKHN0cmluZykgdHJhbnNmb3JtIHN0cmluZywKKyAgICAgbyAgICAg Z2xvYmFsTWF0cml4IChNYXRyaXgpIG1hdHJpeCBvZiBhbGwgdHJhbnNmb3Jt YXRpb25zIGFwcGxpZWQgdG8gZWxlbWVudCBvciBpdHMgcGFyZW50cywKKyAg ICAgbyAgICAgbG9jYWxNYXRyaXggKE1hdHJpeCkgbWF0cml4IG9mIHRyYW5z Zm9ybWF0aW9ucyBhcHBsaWVkIG9ubHkgdG8gdGhlIGVsZW1lbnQsCisgICAg IG8gICAgIGRpZmZNYXRyaXggKE1hdHJpeCkgbWF0cml4IG9mIGRpZmZlcmVu Y2UgYmV0d2VlbiBnbG9iYWwgYW5kIGxvY2FsIHRyYW5zZm9ybWF0aW9ucywK KyAgICAgbyAgICAgZ2xvYmFsIChzdHJpbmcpIGdsb2JhbCB0cmFuc2Zvcm1h dGlvbiBhcyBzdHJpbmcsCisgICAgIG8gICAgIGxvY2FsIChzdHJpbmcpIGxv Y2FsIHRyYW5zZm9ybWF0aW9uIGFzIHN0cmluZywKKyAgICAgbyAgICAgdG9T dHJpbmcgKGZ1bmN0aW9uKSByZXR1cm5zIGBzdHJpbmdgIHByb3BlcnR5Cisg ICAgIG8gfQorICAgIFwqLworICAgIGVscHJvdG8udHJhbnNmb3JtID0gZnVu Y3Rpb24gKHRzdHIpIHsKKyAgICAgICAgdmFyIF8gPSB0aGlzLl87CisgICAg ICAgIGlmICh0c3RyID09IG51bGwpIHsKKyAgICAgICAgICAgIHZhciBwYXBh ID0gdGhpcywKKyAgICAgICAgICAgICAgICBnbG9iYWwgPSBuZXcgU25hcC5N YXRyaXgodGhpcy5ub2RlLmdldENUTSgpKSwKKyAgICAgICAgICAgICAgICBs b2NhbCA9IGV4dHJhY3RUcmFuc2Zvcm0odGhpcyksCisgICAgICAgICAgICAg ICAgbXMgPSBbbG9jYWxdLAorICAgICAgICAgICAgICAgIG0gPSBuZXcgU25h cC5NYXRyaXgsCisgICAgICAgICAgICAgICAgaSwKKyAgICAgICAgICAgICAg ICBsb2NhbFN0cmluZyA9IGxvY2FsLnRvVHJhbnNmb3JtU3RyaW5nKCksCisg ICAgICAgICAgICAgICAgc3RyaW5nID0gU3RyKGxvY2FsKSA9PSBTdHIodGhp cy5tYXRyaXgpID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHIo Xy50cmFuc2Zvcm0pIDogbG9jYWxTdHJpbmc7CisgICAgICAgICAgICB3aGls ZSAocGFwYS50eXBlICE9ICJzdmciICYmIChwYXBhID0gcGFwYS5wYXJlbnQo KSkpIHsKKyAgICAgICAgICAgICAgICBtcy5wdXNoKGV4dHJhY3RUcmFuc2Zv cm0ocGFwYSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaSA9IG1z Lmxlbmd0aDsKKyAgICAgICAgICAgIHdoaWxlIChpLS0pIHsKKyAgICAgICAg ICAgICAgICBtLmFkZChtc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHN0cmluZzogc3RyaW5n LAorICAgICAgICAgICAgICAgIGdsb2JhbE1hdHJpeDogZ2xvYmFsLAorICAg ICAgICAgICAgICAgIHRvdGFsTWF0cml4OiBtLAorICAgICAgICAgICAgICAg IGxvY2FsTWF0cml4OiBsb2NhbCwKKyAgICAgICAgICAgICAgICBkaWZmTWF0 cml4OiBnbG9iYWwuY2xvbmUoKS5hZGQobG9jYWwuaW52ZXJ0KCkpLAorICAg ICAgICAgICAgICAgIGdsb2JhbDogZ2xvYmFsLnRvVHJhbnNmb3JtU3RyaW5n KCksCisgICAgICAgICAgICAgICAgdG90YWw6IG0udG9UcmFuc2Zvcm1TdHJp bmcoKSwKKyAgICAgICAgICAgICAgICBsb2NhbDogbG9jYWxTdHJpbmcsCisg ICAgICAgICAgICAgICAgdG9TdHJpbmc6IHByb3BTdHJpbmcKKyAgICAgICAg ICAgIH07CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRzdHIgaW5zdGFuY2Vv ZiBTbmFwLk1hdHJpeCkgeworICAgICAgICAgICAgdGhpcy5tYXRyaXggPSB0 c3RyOworICAgICAgICAgICAgdGhpcy5fLnRyYW5zZm9ybSA9IHRzdHIudG9U cmFuc2Zvcm1TdHJpbmcoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgIGV4dHJhY3RUcmFuc2Zvcm0odGhpcywgdHN0cik7CisgICAgICAgIH0K KworICAgICAgICBpZiAodGhpcy5ub2RlKSB7CisgICAgICAgICAgICBpZiAo dGhpcy50eXBlID09ICJsaW5lYXJHcmFkaWVudCIgfHwgdGhpcy50eXBlID09 ICJyYWRpYWxHcmFkaWVudCIpIHsKKyAgICAgICAgICAgICAgICAkKHRoaXMu bm9kZSwge2dyYWRpZW50VHJhbnNmb3JtOiB0aGlzLm1hdHJpeH0pOworICAg ICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT0gInBhdHRlcm4iKSB7 CisgICAgICAgICAgICAgICAgJCh0aGlzLm5vZGUsIHtwYXR0ZXJuVHJhbnNm b3JtOiB0aGlzLm1hdHJpeH0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgICAkKHRoaXMubm9kZSwge3RyYW5zZm9ybTogdGhpcy5t YXRyaXh9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg IHJldHVybiB0aGlzOworICAgIH07CisgICAgLypcCisgICAgICogRWxlbWVu dC5wYXJlbnQKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJl dHVybnMgdGhlIGVsZW1lbnQncyBwYXJlbnQKKyAgICAgKioKKyAgICAgPSAo RWxlbWVudCkgdGhlIHBhcmVudCBlbGVtZW50CisgICAgXCovCisgICAgZWxw cm90by5wYXJlbnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB3 cmFwKHRoaXMubm9kZS5wYXJlbnROb2RlKTsKKyAgICB9OworICAgIC8qXAor ICAgICAqIEVsZW1lbnQuYXBwZW5kCisgICAgIFsgbWV0aG9kIF0KKyAgICAg KioKKyAgICAgKiBBcHBlbmRzIHRoZSBnaXZlbiBlbGVtZW50IHRvIGN1cnJl bnQgb25lCisgICAgICoqCisgICAgIC0gZWwgKEVsZW1lbnR8U2V0KSBlbGVt ZW50IHRvIGFwcGVuZAorICAgICA9IChFbGVtZW50KSB0aGUgcGFyZW50IGVs ZW1lbnQKKyAgICBcKi8KKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LmFkZAor ICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogU2VlIEBFbGVtZW50 LmFwcGVuZAorICAgIFwqLworICAgIGVscHJvdG8uYXBwZW5kID0gZWxwcm90 by5hZGQgPSBmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAgaWYgKGVsKSB7Cisg ICAgICAgICAgICBpZiAoZWwudHlwZSA9PSAic2V0IikgeworICAgICAgICAg ICAgICAgIHZhciBpdCA9IHRoaXM7CisgICAgICAgICAgICAgICAgZWwuZm9y RWFjaChmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgaXQu YWRkKGVsKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg ICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs ID0gd3JhcChlbCk7CisgICAgICAgICAgICB0aGlzLm5vZGUuYXBwZW5kQ2hp bGQoZWwubm9kZSk7CisgICAgICAgICAgICBlbC5wYXBlciA9IHRoaXMucGFw ZXI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsK KyAgICAvKlwKKyAgICAgKiBFbGVtZW50LmFwcGVuZFRvCisgICAgIFsgbWV0 aG9kIF0KKyAgICAgKioKKyAgICAgKiBBcHBlbmRzIHRoZSBjdXJyZW50IGVs ZW1lbnQgdG8gdGhlIGdpdmVuIG9uZQorICAgICAqKgorICAgICAtIGVsIChF bGVtZW50KSBwYXJlbnQgZWxlbWVudCB0byBhcHBlbmQgdG8KKyAgICAgPSAo RWxlbWVudCkgdGhlIGNoaWxkIGVsZW1lbnQKKyAgICBcKi8KKyAgICBlbHBy b3RvLmFwcGVuZFRvID0gZnVuY3Rpb24gKGVsKSB7CisgICAgICAgIGlmIChl bCkgeworICAgICAgICAgICAgZWwgPSB3cmFwKGVsKTsKKyAgICAgICAgICAg IGVsLmFwcGVuZCh0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g dGhpczsKKyAgICB9OworICAgIC8qXAorICAgICAqIEVsZW1lbnQucHJlcGVu ZAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogUHJlcGVuZHMg dGhlIGdpdmVuIGVsZW1lbnQgdG8gdGhlIGN1cnJlbnQgb25lCisgICAgICoq CisgICAgIC0gZWwgKEVsZW1lbnQpIGVsZW1lbnQgdG8gcHJlcGVuZAorICAg ICA9IChFbGVtZW50KSB0aGUgcGFyZW50IGVsZW1lbnQKKyAgICBcKi8KKyAg ICBlbHByb3RvLnByZXBlbmQgPSBmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAg aWYgKGVsKSB7CisgICAgICAgICAgICBpZiAoZWwudHlwZSA9PSAic2V0Iikg eworICAgICAgICAgICAgICAgIHZhciBpdCA9IHRoaXMsCisgICAgICAgICAg ICAgICAgICAgIGZpcnN0OworICAgICAgICAgICAgICAgIGVsLmZvckVhY2go ZnVuY3Rpb24gKGVsKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChmaXJz dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QuYWZ0ZXIoZWwp OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgICAgICAgICAgaXQucHJlcGVuZChlbCk7CisgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBlbDsKKyAgICAg ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsID0gd3JhcChlbCk7Cisg ICAgICAgICAgICB2YXIgcGFyZW50ID0gZWwucGFyZW50KCk7CisgICAgICAg ICAgICB0aGlzLm5vZGUuaW5zZXJ0QmVmb3JlKGVsLm5vZGUsIHRoaXMubm9k ZS5maXJzdENoaWxkKTsKKyAgICAgICAgICAgIHRoaXMuYWRkICYmIHRoaXMu YWRkKCk7CisgICAgICAgICAgICBlbC5wYXBlciA9IHRoaXMucGFwZXI7Cisg ICAgICAgICAgICB0aGlzLnBhcmVudCgpICYmIHRoaXMucGFyZW50KCkuYWRk KCk7CisgICAgICAgICAgICBwYXJlbnQgJiYgcGFyZW50LmFkZCgpOworICAg ICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLypc CisgICAgICogRWxlbWVudC5wcmVwZW5kVG8KKyAgICAgWyBtZXRob2QgXQor ICAgICAqKgorICAgICAqIFByZXBlbmRzIHRoZSBjdXJyZW50IGVsZW1lbnQg dG8gdGhlIGdpdmVuIG9uZQorICAgICAqKgorICAgICAtIGVsIChFbGVtZW50 KSBwYXJlbnQgZWxlbWVudCB0byBwcmVwZW5kIHRvCisgICAgID0gKEVsZW1l bnQpIHRoZSBjaGlsZCBlbGVtZW50CisgICAgXCovCisgICAgZWxwcm90by5w cmVwZW5kVG8gPSBmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAgZWwgPSB3cmFw KGVsKTsKKyAgICAgICAgZWwucHJlcGVuZCh0aGlzKTsKKyAgICAgICAgcmV0 dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LmJl Zm9yZQorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogSW5zZXJ0 cyBnaXZlbiBlbGVtZW50IGJlZm9yZSB0aGUgY3VycmVudCBvbmUKKyAgICAg KioKKyAgICAgLSBlbCAoRWxlbWVudCkgZWxlbWVudCB0byBpbnNlcnQKKyAg ICAgPSAoRWxlbWVudCkgdGhlIHBhcmVudCBlbGVtZW50CisgICAgXCovCisg ICAgZWxwcm90by5iZWZvcmUgPSBmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAg aWYgKGVsLnR5cGUgPT0gInNldCIpIHsKKyAgICAgICAgICAgIHZhciBpdCA9 IHRoaXM7CisgICAgICAgICAgICBlbC5mb3JFYWNoKGZ1bmN0aW9uIChlbCkg eworICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBlbC5wYXJlbnQoKTsK KyAgICAgICAgICAgICAgICBpdC5ub2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVm b3JlKGVsLm5vZGUsIGl0Lm5vZGUpOworICAgICAgICAgICAgICAgIHBhcmVu dCAmJiBwYXJlbnQuYWRkKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg ICAgIHRoaXMucGFyZW50KCkuYWRkKCk7CisgICAgICAgICAgICByZXR1cm4g dGhpczsKKyAgICAgICAgfQorICAgICAgICBlbCA9IHdyYXAoZWwpOworICAg ICAgICB2YXIgcGFyZW50ID0gZWwucGFyZW50KCk7CisgICAgICAgIHRoaXMu bm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlbC5ub2RlLCB0aGlzLm5v ZGUpOworICAgICAgICB0aGlzLnBhcmVudCgpICYmIHRoaXMucGFyZW50KCku YWRkKCk7CisgICAgICAgIHBhcmVudCAmJiBwYXJlbnQuYWRkKCk7CisgICAg ICAgIGVsLnBhcGVyID0gdGhpcy5wYXBlcjsKKyAgICAgICAgcmV0dXJuIHRo aXM7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LmFmdGVyCisg ICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBJbnNlcnRzIGdpdmVu IGVsZW1lbnQgYWZ0ZXIgdGhlIGN1cnJlbnQgb25lCisgICAgICoqCisgICAg IC0gZWwgKEVsZW1lbnQpIGVsZW1lbnQgdG8gaW5zZXJ0CisgICAgID0gKEVs ZW1lbnQpIHRoZSBwYXJlbnQgZWxlbWVudAorICAgIFwqLworICAgIGVscHJv dG8uYWZ0ZXIgPSBmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAgZWwgPSB3cmFw KGVsKTsKKyAgICAgICAgdmFyIHBhcmVudCA9IGVsLnBhcmVudCgpOworICAg ICAgICBpZiAodGhpcy5ub2RlLm5leHRTaWJsaW5nKSB7CisgICAgICAgICAg ICB0aGlzLm5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZWwubm9kZSwg dGhpcy5ub2RlLm5leHRTaWJsaW5nKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgIHRoaXMubm9kZS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGVs Lm5vZGUpOworICAgICAgICB9CisgICAgICAgIHRoaXMucGFyZW50KCkgJiYg dGhpcy5wYXJlbnQoKS5hZGQoKTsKKyAgICAgICAgcGFyZW50ICYmIHBhcmVu dC5hZGQoKTsKKyAgICAgICAgZWwucGFwZXIgPSB0aGlzLnBhcGVyOworICAg ICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qXAorICAgICAqIEVs ZW1lbnQuaW5zZXJ0QmVmb3JlCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioK KyAgICAgKiBJbnNlcnRzIHRoZSBlbGVtZW50IGFmdGVyIHRoZSBnaXZlbiBv bmUKKyAgICAgKioKKyAgICAgLSBlbCAoRWxlbWVudCkgZWxlbWVudCBuZXh0 IHRvIHdob20gaW5zZXJ0IHRvCisgICAgID0gKEVsZW1lbnQpIHRoZSBwYXJl bnQgZWxlbWVudAorICAgIFwqLworICAgIGVscHJvdG8uaW5zZXJ0QmVmb3Jl ID0gZnVuY3Rpb24gKGVsKSB7CisgICAgICAgIGVsID0gd3JhcChlbCk7Cisg ICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudCgpOworICAgICAgICBl bC5ub2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMubm9kZSwgZWwu bm9kZSk7CisgICAgICAgIHRoaXMucGFwZXIgPSBlbC5wYXBlcjsKKyAgICAg ICAgcGFyZW50ICYmIHBhcmVudC5hZGQoKTsKKyAgICAgICAgZWwucGFyZW50 KCkgJiYgZWwucGFyZW50KCkuYWRkKCk7CisgICAgICAgIHJldHVybiB0aGlz OworICAgIH07CisgICAgLypcCisgICAgICogRWxlbWVudC5pbnNlcnRBZnRl cgorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogSW5zZXJ0cyB0 aGUgZWxlbWVudCBhZnRlciB0aGUgZ2l2ZW4gb25lCisgICAgICoqCisgICAg IC0gZWwgKEVsZW1lbnQpIGVsZW1lbnQgbmV4dCB0byB3aG9tIGluc2VydCB0 bworICAgICA9IChFbGVtZW50KSB0aGUgcGFyZW50IGVsZW1lbnQKKyAgICBc Ki8KKyAgICBlbHByb3RvLmluc2VydEFmdGVyID0gZnVuY3Rpb24gKGVsKSB7 CisgICAgICAgIGVsID0gd3JhcChlbCk7CisgICAgICAgIHZhciBwYXJlbnQg PSB0aGlzLnBhcmVudCgpOworICAgICAgICBlbC5ub2RlLnBhcmVudE5vZGUu aW5zZXJ0QmVmb3JlKHRoaXMubm9kZSwgZWwubm9kZS5uZXh0U2libGluZyk7 CisgICAgICAgIHRoaXMucGFwZXIgPSBlbC5wYXBlcjsKKyAgICAgICAgcGFy ZW50ICYmIHBhcmVudC5hZGQoKTsKKyAgICAgICAgZWwucGFyZW50KCkgJiYg ZWwucGFyZW50KCkuYWRkKCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAg IH07CisgICAgLypcCisgICAgICogRWxlbWVudC5yZW1vdmUKKyAgICAgWyBt ZXRob2QgXQorICAgICAqKgorICAgICAqIFJlbW92ZXMgZWxlbWVudCBmcm9t IHRoZSBET00KKyAgICAgPSAoRWxlbWVudCkgdGhlIGRldGFjaGVkIGVsZW1l bnQKKyAgICBcKi8KKyAgICBlbHByb3RvLnJlbW92ZSA9IGZ1bmN0aW9uICgp IHsKKyAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50KCk7CisgICAg ICAgIHRoaXMubm9kZS5wYXJlbnROb2RlICYmIHRoaXMubm9kZS5wYXJlbnRO b2RlLnJlbW92ZUNoaWxkKHRoaXMubm9kZSk7CisgICAgICAgIGRlbGV0ZSB0 aGlzLnBhcGVyOworICAgICAgICB0aGlzLnJlbW92ZWQgPSB0cnVlOworICAg ICAgICBwYXJlbnQgJiYgcGFyZW50LmFkZCgpOworICAgICAgICByZXR1cm4g dGhpczsKKyAgICB9OworICAgIC8qXAorICAgICAqIEVsZW1lbnQuc2VsZWN0 CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBHYXRoZXJzIHRo ZSBuZXN0ZWQgQEVsZW1lbnQgbWF0Y2hpbmcgdGhlIGdpdmVuIHNldCBvZiBD U1Mgc2VsZWN0b3JzCisgICAgICoqCisgICAgIC0gcXVlcnkgKHN0cmluZykg Q1NTIHNlbGVjdG9yCisgICAgID0gKEVsZW1lbnQpIHJlc3VsdCBvZiBxdWVy eSBzZWxlY3Rpb24KKyAgICBcKi8KKyAgICBlbHByb3RvLnNlbGVjdCA9IGZ1 bmN0aW9uIChxdWVyeSkgeworICAgICAgICByZXR1cm4gd3JhcCh0aGlzLm5v ZGUucXVlcnlTZWxlY3RvcihxdWVyeSkpOworICAgIH07CisgICAgLypcCisg ICAgICogRWxlbWVudC5zZWxlY3RBbGwKKyAgICAgWyBtZXRob2QgXQorICAg ICAqKgorICAgICAqIEdhdGhlcnMgbmVzdGVkIEBFbGVtZW50IG9iamVjdHMg bWF0Y2hpbmcgdGhlIGdpdmVuIHNldCBvZiBDU1Mgc2VsZWN0b3JzCisgICAg ICoqCisgICAgIC0gcXVlcnkgKHN0cmluZykgQ1NTIHNlbGVjdG9yCisgICAg ID0gKFNldHxhcnJheSkgcmVzdWx0IG9mIHF1ZXJ5IHNlbGVjdGlvbgorICAg IFwqLworICAgIGVscHJvdG8uc2VsZWN0QWxsID0gZnVuY3Rpb24gKHF1ZXJ5 KSB7CisgICAgICAgIHZhciBub2RlbGlzdCA9IHRoaXMubm9kZS5xdWVyeVNl bGVjdG9yQWxsKHF1ZXJ5KSwKKyAgICAgICAgICAgIHNldCA9IChTbmFwLnNl dCB8fCBBcnJheSkoKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBu b2RlbGlzdC5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgc2V0LnB1c2go d3JhcChub2RlbGlzdFtpXSkpOworICAgICAgICB9CisgICAgICAgIHJldHVy biBzZXQ7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LmFzUFgK KyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJldHVybnMgZ2l2 ZW4gYXR0cmlidXRlIG9mIHRoZSBlbGVtZW50IGFzIGEgYHB4YCB2YWx1ZSAo bm90ICUsIGVtLCBldGMuKQorICAgICAqKgorICAgICAtIGF0dHIgKHN0cmlu ZykgYXR0cmlidXRlIG5hbWUKKyAgICAgLSB2YWx1ZSAoc3RyaW5nKSAjb3B0 aW9uYWwgYXR0cmlidXRlIHZhbHVlCisgICAgID0gKEVsZW1lbnQpIHJlc3Vs dCBvZiBxdWVyeSBzZWxlY3Rpb24KKyAgICBcKi8KKyAgICBlbHByb3RvLmFz UFggPSBmdW5jdGlvbiAoYXR0ciwgdmFsdWUpIHsKKyAgICAgICAgaWYgKHZh bHVlID09IG51bGwpIHsKKyAgICAgICAgICAgIHZhbHVlID0gdGhpcy5hdHRy KGF0dHIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiArdW5pdDJweCh0 aGlzLCBhdHRyLCB2YWx1ZSk7CisgICAgfTsKKyAgICAvLyBTSUVSUkEgRWxl bWVudC51c2UoKTogSSBzdWdnZXN0IGFkZGluZyBhIG5vdGUgYWJvdXQgaG93 IHRvIGFjY2VzcyB0aGUgb3JpZ2luYWwgZWxlbWVudCB0aGUgcmV0dXJuZWQg PHVzZT4gaW5zdGFudGlhdGVzLiBJdCdzIGEgcGFydCBvZiBTVkcgd2l0aCB3 aGljaCBvcmRpbmFyeSB3ZWIgZGV2ZWxvcGVycyBtYXkgYmUgbGVhc3QgZmFt aWxpYXIuCisgICAgLypcCisgICAgICogRWxlbWVudC51c2UKKyAgICAgWyBt ZXRob2QgXQorICAgICAqKgorICAgICAqIENyZWF0ZXMgYSBgPHVzZT5gIGVs ZW1lbnQgbGlua2VkIHRvIHRoZSBjdXJyZW50IGVsZW1lbnQKKyAgICAgKioK KyAgICAgPSAoRWxlbWVudCkgdGhlIGA8dXNlPmAgZWxlbWVudAorICAgIFwq LworICAgIGVscHJvdG8udXNlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2 YXIgdXNlLAorICAgICAgICAgICAgaWQgPSB0aGlzLm5vZGUuaWQ7CisgICAg ICAgIGlmICghaWQpIHsKKyAgICAgICAgICAgIGlkID0gdGhpcy5pZDsKKyAg ICAgICAgICAgICQodGhpcy5ub2RlLCB7CisgICAgICAgICAgICAgICAgaWQ6 IGlkCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBpZiAo dGhpcy50eXBlID09ICJsaW5lYXJHcmFkaWVudCIgfHwgdGhpcy50eXBlID09 ICJyYWRpYWxHcmFkaWVudCIgfHwKKyAgICAgICAgICAgIHRoaXMudHlwZSA9 PSAicGF0dGVybiIpIHsKKyAgICAgICAgICAgIHVzZSA9IG1ha2UodGhpcy50 eXBlLCB0aGlzLm5vZGUucGFyZW50Tm9kZSk7CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICB1c2UgPSBtYWtlKCJ1c2UiLCB0aGlzLm5vZGUucGFy ZW50Tm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgJCh1c2Uubm9kZSwgewor ICAgICAgICAgICAgInhsaW5rOmhyZWYiOiAiIyIgKyBpZAorICAgICAgICB9 KTsKKyAgICAgICAgdXNlLm9yaWdpbmFsID0gdGhpczsKKyAgICAgICAgcmV0 dXJuIHVzZTsKKyAgICB9OworICAgIGZ1bmN0aW9uIGZpeGlkcyhlbCkgewor ICAgICAgICB2YXIgZWxzID0gZWwuc2VsZWN0QWxsKCIqIiksCisgICAgICAg ICAgICBpdCwKKyAgICAgICAgICAgIHVybCA9IC9eXHMqdXJsXCgoInwnfCko LiopXDFcKVxzKiQvLAorICAgICAgICAgICAgaWRzID0gW10sCisgICAgICAg ICAgICB1c2VzID0ge307CisgICAgICAgIGZ1bmN0aW9uIHVybHRlc3QoaXQs IG5hbWUpIHsKKyAgICAgICAgICAgIHZhciB2YWwgPSAkKGl0Lm5vZGUsIG5h bWUpOworICAgICAgICAgICAgdmFsID0gdmFsICYmIHZhbC5tYXRjaCh1cmwp OworICAgICAgICAgICAgdmFsID0gdmFsICYmIHZhbFsyXTsKKyAgICAgICAg ICAgIGlmICh2YWwgJiYgdmFsLmNoYXJBdCgpID09ICIjIikgeworICAgICAg ICAgICAgICAgIHZhbCA9IHZhbC5zdWJzdHJpbmcoMSk7CisgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGlmICh2YWwpIHsKKyAgICAgICAgICAgICAg ICB1c2VzW3ZhbF0gPSAodXNlc1t2YWxdIHx8IFtdKS5jb25jYXQoZnVuY3Rp b24gKGlkKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBhdHRyID0ge307 CisgICAgICAgICAgICAgICAgICAgIGF0dHJbbmFtZV0gPSBVUkwoaWQpOwor ICAgICAgICAgICAgICAgICAgICAkKGl0Lm5vZGUsIGF0dHIpOworICAgICAg ICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg ICAgIGZ1bmN0aW9uIGxpbmt0ZXN0KGl0KSB7CisgICAgICAgICAgICB2YXIg dmFsID0gJChpdC5ub2RlLCAieGxpbms6aHJlZiIpOworICAgICAgICAgICAg aWYgKHZhbCAmJiB2YWwuY2hhckF0KCkgPT0gIiMiKSB7CisgICAgICAgICAg ICAgICAgdmFsID0gdmFsLnN1YnN0cmluZygxKTsKKyAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg fQorICAgICAgICAgICAgaWYgKHZhbCkgeworICAgICAgICAgICAgICAgIHVz ZXNbdmFsXSA9ICh1c2VzW3ZhbF0gfHwgW10pLmNvbmNhdChmdW5jdGlvbiAo aWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaXQuYXR0cigieGxpbms6aHJl ZiIsICIjIiArIGlkKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkg PSBlbHMubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAgaXQg PSBlbHNbaV07CisgICAgICAgICAgICB1cmx0ZXN0KGl0LCAiZmlsbCIpOwor ICAgICAgICAgICAgdXJsdGVzdChpdCwgInN0cm9rZSIpOworICAgICAgICAg ICAgdXJsdGVzdChpdCwgImZpbHRlciIpOworICAgICAgICAgICAgdXJsdGVz dChpdCwgIm1hc2siKTsKKyAgICAgICAgICAgIHVybHRlc3QoaXQsICJjbGlw LXBhdGgiKTsKKyAgICAgICAgICAgIGxpbmt0ZXN0KGl0KTsKKyAgICAgICAg ICAgIHZhciBvbGRpZCA9ICQoaXQubm9kZSwgImlkIik7CisgICAgICAgICAg ICBpZiAob2xkaWQpIHsKKyAgICAgICAgICAgICAgICAkKGl0Lm5vZGUsIHtp ZDogaXQuaWR9KTsKKyAgICAgICAgICAgICAgICBpZHMucHVzaCh7CisgICAg ICAgICAgICAgICAgICAgIG9sZDogb2xkaWQsCisgICAgICAgICAgICAgICAg ICAgIGlkOiBpdC5pZAorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAoaSA9IDAsIGlpID0gaWRz Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBmcyA9 IHVzZXNbaWRzW2ldLm9sZF07CisgICAgICAgICAgICBpZiAoZnMpIHsKKyAg ICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMCwgamogPSBmcy5sZW5ndGg7 IGogPCBqajsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIGZzW2pdKGlk c1tpXS5pZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgfQorICAgIC8qXAorICAgICAqIEVsZW1lbnQuY2xv bmUKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIENyZWF0ZXMg YSBjbG9uZSBvZiB0aGUgZWxlbWVudCBhbmQgaW5zZXJ0cyBpdCBhZnRlciB0 aGUgZWxlbWVudAorICAgICAqKgorICAgICA9IChFbGVtZW50KSB0aGUgY2xv bmUKKyAgICBcKi8KKyAgICBlbHByb3RvLmNsb25lID0gZnVuY3Rpb24gKCkg eworICAgICAgICB2YXIgY2xvbmUgPSB3cmFwKHRoaXMubm9kZS5jbG9uZU5v ZGUodHJ1ZSkpOworICAgICAgICBpZiAoJChjbG9uZS5ub2RlLCAiaWQiKSkg eworICAgICAgICAgICAgJChjbG9uZS5ub2RlLCB7aWQ6IGNsb25lLmlkfSk7 CisgICAgICAgIH0KKyAgICAgICAgZml4aWRzKGNsb25lKTsKKyAgICAgICAg Y2xvbmUuaW5zZXJ0QWZ0ZXIodGhpcyk7CisgICAgICAgIHJldHVybiBjbG9u ZTsKKyAgICB9OworICAgIC8qXAorICAgICAqIEVsZW1lbnQudG9EZWZzCisg ICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBNb3ZlcyBlbGVtZW50 IHRvIHRoZSBzaGFyZWQgYDxkZWZzPmAgYXJlYQorICAgICAqKgorICAgICA9 IChFbGVtZW50KSB0aGUgZWxlbWVudAorICAgIFwqLworICAgIGVscHJvdG8u dG9EZWZzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgZGVmcyA9IGdl dFNvbWVEZWZzKHRoaXMpOworICAgICAgICBkZWZzLmFwcGVuZENoaWxkKHRo aXMubm9kZSk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAg LypcCisgICAgICogRWxlbWVudC50b1BhdHRlcm4KKyAgICAgWyBtZXRob2Qg XQorICAgICAqKgorICAgICAqIENyZWF0ZXMgYSBgPHBhdHRlcm4+YCBlbGVt ZW50IGZyb20gdGhlIGN1cnJlbnQgZWxlbWVudAorICAgICAqKgorICAgICAq IFRvIGNyZWF0ZSBhIHBhdHRlcm4geW91IGhhdmUgdG8gc3BlY2lmeSB0aGUg cGF0dGVybiByZWN0OgorICAgICAtIHggKHN0cmluZ3xudW1iZXIpCisgICAg IC0geSAoc3RyaW5nfG51bWJlcikKKyAgICAgLSB3aWR0aCAoc3RyaW5nfG51 bWJlcikKKyAgICAgLSBoZWlnaHQgKHN0cmluZ3xudW1iZXIpCisgICAgID0g KEVsZW1lbnQpIHRoZSBgPHBhdHRlcm4+YCBlbGVtZW50CisgICAgICogWW91 IGNhbiB1c2UgcGF0dGVybiBsYXRlciBvbiBhcyBhbiBhcmd1bWVudCBmb3Ig YGZpbGxgIGF0dHJpYnV0ZToKKyAgICAgfCB2YXIgcCA9IHBhcGVyLnBhdGgo Ik0xMC01LTEwLDE1TTE1LDAsMCwxNU0wLTUtMjAsMTUiKS5hdHRyKHsKKyAg ICAgfCAgICAgICAgIGZpbGw6ICJub25lIiwKKyAgICAgfCAgICAgICAgIHN0 cm9rZTogIiNiYWRhNTUiLAorICAgICB8ICAgICAgICAgc3Ryb2tlV2lkdGg6 IDUKKyAgICAgfCAgICAgfSkucGF0dGVybigwLCAwLCAxMCwgMTApLAorICAg ICB8ICAgICBjID0gcGFwZXIuY2lyY2xlKDIwMCwgMjAwLCAxMDApOworICAg ICB8IGMuYXR0cih7CisgICAgIHwgICAgIGZpbGw6IHAKKyAgICAgfCB9KTsK KyAgICBcKi8KKyAgICBlbHByb3RvLnBhdHRlcm4gPSBlbHByb3RvLnRvUGF0 dGVybiA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KSB7CisgICAg ICAgIHZhciBwID0gbWFrZSgicGF0dGVybiIsIGdldFNvbWVEZWZzKHRoaXMp KTsKKyAgICAgICAgaWYgKHggPT0gbnVsbCkgeworICAgICAgICAgICAgeCA9 IHRoaXMuZ2V0QkJveCgpOworICAgICAgICB9CisgICAgICAgIGlmIChpcyh4 LCAib2JqZWN0IikgJiYgIngiIGluIHgpIHsKKyAgICAgICAgICAgIHkgPSB4 Lnk7CisgICAgICAgICAgICB3aWR0aCA9IHgud2lkdGg7CisgICAgICAgICAg ICBoZWlnaHQgPSB4LmhlaWdodDsKKyAgICAgICAgICAgIHggPSB4Lng7Cisg ICAgICAgIH0KKyAgICAgICAgJChwLm5vZGUsIHsKKyAgICAgICAgICAgIHg6 IHgsCisgICAgICAgICAgICB5OiB5LAorICAgICAgICAgICAgd2lkdGg6IHdp ZHRoLAorICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsCisgICAgICAgICAg ICBwYXR0ZXJuVW5pdHM6ICJ1c2VyU3BhY2VPblVzZSIsCisgICAgICAgICAg ICBpZDogcC5pZCwKKyAgICAgICAgICAgIHZpZXdCb3g6IFt4LCB5LCB3aWR0 aCwgaGVpZ2h0XS5qb2luKCIgIikKKyAgICAgICAgfSk7CisgICAgICAgIHAu bm9kZS5hcHBlbmRDaGlsZCh0aGlzLm5vZGUpOworICAgICAgICByZXR1cm4g cDsKKyAgICB9OworLy8gU0lFUlJBIEVsZW1lbnQubWFya2VyKCk6IGNsYXJp Znkgd2hhdCBhIHJlZmVyZW5jZSBwb2ludCBpcy4gRS5nLiwgaGVscHMgeW91 IG9mZnNldCB0aGUgb2JqZWN0IGZyb20gaXRzIGVkZ2Ugc3VjaCBhcyB3aGVu IGNlbnRlcmluZyBpdCBvdmVyIGEgcGF0aC4KKy8vIFNJRVJSQSBFbGVtZW50 Lm1hcmtlcigpOiBJIHN1Z2dlc3QgdGhlIG1ldGhvZCBzaG91bGQgYWNjZXB0 IGRlZmF1bHQgcmVmZXJlbmNlIHBvaW50IHZhbHVlcy4gIFBlcmhhcHMgY2Vu dGVyZWQgd2l0aCAocmVmWCA9IHdpZHRoLzIpIGFuZCAocmVmWSA9IGhlaWdo dC8yKT8gQWxzbywgY291bGRuJ3QgaXQgYXNzdW1lIHRoZSBlbGVtZW50J3Mg Y3VycmVudCBfd2lkdGhfIGFuZCBfaGVpZ2h0Xz8gQW5kIHBsZWFzZSBzcGVj aWZ5IHdoYXQgX3hfIGFuZCBfeV8gbWVhbjogb2Zmc2V0cz8gSWYgc28sIGZy b20gd2hlcmU/ICBDb3VsZG4ndCB0aGV5IGFsc28gYmUgYXNzaWduZWQgZGVm YXVsdCB2YWx1ZXM/CisgICAgLypcCisgICAgICogRWxlbWVudC5tYXJrZXIK KyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIENyZWF0ZXMgYSBg PG1hcmtlcj5gIGVsZW1lbnQgZnJvbSB0aGUgY3VycmVudCBlbGVtZW50Cisg ICAgICoqCisgICAgICogVG8gY3JlYXRlIGEgbWFya2VyIHlvdSBoYXZlIHRv IHNwZWNpZnkgdGhlIGJvdW5kaW5nIHJlY3QgYW5kIHJlZmVyZW5jZSBwb2lu dDoKKyAgICAgLSB4IChudW1iZXIpCisgICAgIC0geSAobnVtYmVyKQorICAg ICAtIHdpZHRoIChudW1iZXIpCisgICAgIC0gaGVpZ2h0IChudW1iZXIpCisg ICAgIC0gcmVmWCAobnVtYmVyKQorICAgICAtIHJlZlkgKG51bWJlcikKKyAg ICAgPSAoRWxlbWVudCkgdGhlIGA8bWFya2VyPmAgZWxlbWVudAorICAgICAq IFlvdSBjYW4gc3BlY2lmeSB0aGUgbWFya2VyIGxhdGVyIGFzIGFuIGFyZ3Vt ZW50IGZvciBgbWFya2VyLXN0YXJ0YCwgYG1hcmtlci1lbmRgLCBgbWFya2Vy LW1pZGAsIGFuZCBgbWFya2VyYCBhdHRyaWJ1dGVzLiBUaGUgYG1hcmtlcmAg YXR0cmlidXRlIHBsYWNlcyB0aGUgbWFya2VyIGF0IGV2ZXJ5IHBvaW50IGFs b25nIHRoZSBwYXRoLCBhbmQgYG1hcmtlci1taWRgIHBsYWNlcyB0aGVtIGF0 IGV2ZXJ5IHBvaW50IGV4Y2VwdCB0aGUgc3RhcnQgYW5kIGVuZC4KKyAgICBc Ki8KKyAgICAvLyBUT0RPIGFkZCB1c2FnZSBmb3IgbWFya2VycworICAgIGVs cHJvdG8ubWFya2VyID0gZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQs IHJlZlgsIHJlZlkpIHsKKyAgICAgICAgdmFyIHAgPSBtYWtlKCJtYXJrZXIi LCBnZXRTb21lRGVmcyh0aGlzKSk7CisgICAgICAgIGlmICh4ID09IG51bGwp IHsKKyAgICAgICAgICAgIHggPSB0aGlzLmdldEJCb3goKTsKKyAgICAgICAg fQorICAgICAgICBpZiAoaXMoeCwgIm9iamVjdCIpICYmICJ4IiBpbiB4KSB7 CisgICAgICAgICAgICB5ID0geC55OworICAgICAgICAgICAgd2lkdGggPSB4 LndpZHRoOworICAgICAgICAgICAgaGVpZ2h0ID0geC5oZWlnaHQ7CisgICAg ICAgICAgICByZWZYID0geC5yZWZYIHx8IHguY3g7CisgICAgICAgICAgICBy ZWZZID0geC5yZWZZIHx8IHguY3k7CisgICAgICAgICAgICB4ID0geC54Owor ICAgICAgICB9CisgICAgICAgICQocC5ub2RlLCB7CisgICAgICAgICAgICB2 aWV3Qm94OiBbeCwgeSwgd2lkdGgsIGhlaWdodF0uam9pbigiICIpLAorICAg ICAgICAgICAgbWFya2VyV2lkdGg6IHdpZHRoLAorICAgICAgICAgICAgbWFy a2VySGVpZ2h0OiBoZWlnaHQsCisgICAgICAgICAgICBvcmllbnQ6ICJhdXRv IiwKKyAgICAgICAgICAgIHJlZlg6IHJlZlggfHwgMCwKKyAgICAgICAgICAg IHJlZlk6IHJlZlkgfHwgMCwKKyAgICAgICAgICAgIGlkOiBwLmlkCisgICAg ICAgIH0pOworICAgICAgICBwLm5vZGUuYXBwZW5kQ2hpbGQodGhpcy5ub2Rl KTsKKyAgICAgICAgcmV0dXJuIHA7CisgICAgfTsKKyAgICAvLyBhbmltYXRp b24KKyAgICBmdW5jdGlvbiBzbGljZShmcm9tLCB0bywgZikgeworICAgICAg ICByZXR1cm4gZnVuY3Rpb24gKGFycikgeworICAgICAgICAgICAgdmFyIHJl cyA9IGFyci5zbGljZShmcm9tLCB0byk7CisgICAgICAgICAgICBpZiAocmVz Lmxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgICAgICAgcmVzID0gcmVzWzBd OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGYgPyBmKHJl cykgOiByZXM7CisgICAgICAgIH07CisgICAgfQorICAgIHZhciBBbmltYXRp b24gPSBmdW5jdGlvbiAoYXR0ciwgbXMsIGVhc2luZywgY2FsbGJhY2spIHsK KyAgICAgICAgaWYgKHR5cGVvZiBlYXNpbmcgPT0gImZ1bmN0aW9uIiAmJiAh ZWFzaW5nLmxlbmd0aCkgeworICAgICAgICAgICAgY2FsbGJhY2sgPSBlYXNp bmc7CisgICAgICAgICAgICBlYXNpbmcgPSBtaW5hLmxpbmVhcjsKKyAgICAg ICAgfQorICAgICAgICB0aGlzLmF0dHIgPSBhdHRyOworICAgICAgICB0aGlz LmR1ciA9IG1zOworICAgICAgICBlYXNpbmcgJiYgKHRoaXMuZWFzaW5nID0g ZWFzaW5nKTsKKyAgICAgICAgY2FsbGJhY2sgJiYgKHRoaXMuY2FsbGJhY2sg PSBjYWxsYmFjayk7CisgICAgfTsKKyAgICBTbmFwLl8uQW5pbWF0aW9uID0g QW5pbWF0aW9uOworICAgIC8qXAorICAgICAqIFNuYXAuYW5pbWF0aW9uCisg ICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBDcmVhdGVzIGFuIGFu aW1hdGlvbiBvYmplY3QKKyAgICAgKioKKyAgICAgLSBhdHRyIChvYmplY3Qp IGF0dHJpYnV0ZXMgb2YgZmluYWwgZGVzdGluYXRpb24KKyAgICAgLSBkdXJh dGlvbiAobnVtYmVyKSBkdXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uLCBpbiBt aWxsaXNlY29uZHMKKyAgICAgLSBlYXNpbmcgKGZ1bmN0aW9uKSAjb3B0aW9u YWwgb25lIG9mIGVhc2luZyBmdW5jdGlvbnMgb2YgQG1pbmEgb3IgY3VzdG9t IG9uZQorICAgICAtIGNhbGxiYWNrIChmdW5jdGlvbikgI29wdGlvbmFsIGNh bGxiYWNrIGZ1bmN0aW9uIHRoYXQgZmlyZXMgd2hlbiBhbmltYXRpb24gZW5k cworICAgICA9IChvYmplY3QpIGFuaW1hdGlvbiBvYmplY3QKKyAgICBcKi8K KyAgICBTbmFwLmFuaW1hdGlvbiA9IGZ1bmN0aW9uIChhdHRyLCBtcywgZWFz aW5nLCBjYWxsYmFjaykgeworICAgICAgICByZXR1cm4gbmV3IEFuaW1hdGlv bihhdHRyLCBtcywgZWFzaW5nLCBjYWxsYmFjayk7CisgICAgfTsKKyAgICAv KlwKKyAgICAgKiBFbGVtZW50LmluQW5pbQorICAgICBbIG1ldGhvZCBdCisg ICAgICoqCisgICAgICogUmV0dXJucyBhIHNldCBvZiBhbmltYXRpb25zIHRo YXQgbWF5IGJlIGFibGUgdG8gbWFuaXB1bGF0ZSB0aGUgY3VycmVudCBlbGVt ZW50CisgICAgICoqCisgICAgID0gKG9iamVjdCkgaW4gZm9ybWF0OgorICAg ICBvIHsKKyAgICAgbyAgICAgYW5pbSAob2JqZWN0KSBhbmltYXRpb24gb2Jq ZWN0LAorICAgICBvICAgICBtaW5hIChvYmplY3QpIEBtaW5hIG9iamVjdCwK KyAgICAgbyAgICAgY3VyU3RhdHVzIChudW1iZXIpIDAuLjEg4oCUIHN0YXR1 cyBvZiB0aGUgYW5pbWF0aW9uOiAwIOKAlCBqdXN0IHN0YXJ0ZWQsIDEg4oCU IGp1c3QgZmluaXNoZWQsCisgICAgIG8gICAgIHN0YXR1cyAoZnVuY3Rpb24p IGdldHMgb3Igc2V0cyB0aGUgc3RhdHVzIG9mIHRoZSBhbmltYXRpb24sCisg ICAgIG8gICAgIHN0b3AgKGZ1bmN0aW9uKSBzdG9wcyB0aGUgYW5pbWF0aW9u CisgICAgIG8gfQorICAgIFwqLworICAgIGVscHJvdG8uaW5BbmltID0gZnVu Y3Rpb24gKCkgeworICAgICAgICB2YXIgZWwgPSB0aGlzLAorICAgICAgICAg ICAgcmVzID0gW107CisgICAgICAgIGZvciAodmFyIGlkIGluIGVsLmFuaW1z KSBpZiAoZWwuYW5pbXNbaGFzXShpZCkpIHsKKyAgICAgICAgICAgIChmdW5j dGlvbiAoYSkgeworICAgICAgICAgICAgICAgIHJlcy5wdXNoKHsKKyAgICAg ICAgICAgICAgICAgICAgYW5pbTogbmV3IEFuaW1hdGlvbihhLl9hdHRycywg YS5kdXIsIGEuZWFzaW5nLCBhLl9jYWxsYmFjayksCisgICAgICAgICAgICAg ICAgICAgIG1pbmE6IGEsCisgICAgICAgICAgICAgICAgICAgIGN1clN0YXR1 czogYS5zdGF0dXMoKSwKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBm dW5jdGlvbiAodmFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gYS5zdGF0dXModmFsKTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAg ICAgICAgICAgICAgICAgICAgc3RvcDogZnVuY3Rpb24gKCkgeworICAgICAg ICAgICAgICAgICAgICAgICAgYS5zdG9wKCk7CisgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0oZWwu YW5pbXNbaWRdKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlczsK KyAgICB9OworICAgIC8qXAorICAgICAqIFNuYXAuYW5pbWF0ZQorICAgICBb IG1ldGhvZCBdCisgICAgICoqCisgICAgICogUnVucyBnZW5lcmljIGFuaW1h dGlvbiBvZiBvbmUgbnVtYmVyIGludG8gYW5vdGhlciB3aXRoIGEgY2FyaW5n IGZ1bmN0aW9uCisgICAgICoqCisgICAgIC0gZnJvbSAobnVtYmVyfGFycmF5 KSBudW1iZXIgb3IgYXJyYXkgb2YgbnVtYmVycworICAgICAtIHRvIChudW1i ZXJ8YXJyYXkpIG51bWJlciBvciBhcnJheSBvZiBudW1iZXJzCisgICAgIC0g c2V0dGVyIChmdW5jdGlvbikgY2FyaW5nIGZ1bmN0aW9uIHRoYXQgYWNjZXB0 cyBvbmUgbnVtYmVyIGFyZ3VtZW50CisgICAgIC0gZHVyYXRpb24gKG51bWJl cikgZHVyYXRpb24sIGluIG1pbGxpc2Vjb25kcworICAgICAtIGVhc2luZyAo ZnVuY3Rpb24pICNvcHRpb25hbCBlYXNpbmcgZnVuY3Rpb24gZnJvbSBAbWlu YSBvciBjdXN0b20KKyAgICAgLSBjYWxsYmFjayAoZnVuY3Rpb24pICNvcHRp b25hbCBjYWxsYmFjayBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gYW5pbWF0 aW9uIGVuZHMKKyAgICAgPSAob2JqZWN0KSBhbmltYXRpb24gb2JqZWN0IGlu IEBtaW5hIGZvcm1hdAorICAgICBvIHsKKyAgICAgbyAgICAgaWQgKHN0cmlu ZykgYW5pbWF0aW9uIGlkLCBjb25zaWRlciBpdCByZWFkLW9ubHksCisgICAg IG8gICAgIGR1cmF0aW9uIChmdW5jdGlvbikgZ2V0cyBvciBzZXRzIHRoZSBk dXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uLAorICAgICBvICAgICBlYXNpbmcg KGZ1bmN0aW9uKSBlYXNpbmcsCisgICAgIG8gICAgIHNwZWVkIChmdW5jdGlv bikgZ2V0cyBvciBzZXRzIHRoZSBzcGVlZCBvZiB0aGUgYW5pbWF0aW9uLAor ICAgICBvICAgICBzdGF0dXMgKGZ1bmN0aW9uKSBnZXRzIG9yIHNldHMgdGhl IHN0YXR1cyBvZiB0aGUgYW5pbWF0aW9uLAorICAgICBvICAgICBzdG9wIChm dW5jdGlvbikgc3RvcHMgdGhlIGFuaW1hdGlvbgorICAgICBvIH0KKyAgICAg fCB2YXIgcmVjdCA9IFNuYXAoKS5yZWN0KDAsIDAsIDEwLCAxMCk7CisgICAg IHwgU25hcC5hbmltYXRlKDAsIDEwLCBmdW5jdGlvbiAodmFsKSB7CisgICAg IHwgICAgIHJlY3QuYXR0cih7CisgICAgIHwgICAgICAgICB4OiB2YWwKKyAg ICAgfCAgICAgfSk7CisgICAgIHwgfSwgMTAwMCk7CisgICAgIHwgLy8gaW4g Z2l2ZW4gY29udGV4dCBpcyBlcXVpdmFsZW50IHRvCisgICAgIHwgcmVjdC5h bmltYXRlKHt4OiAxMH0sIDEwMDApOworICAgIFwqLworICAgIFNuYXAuYW5p bWF0ZSA9IGZ1bmN0aW9uIChmcm9tLCB0bywgc2V0dGVyLCBtcywgZWFzaW5n LCBjYWxsYmFjaykgeworICAgICAgICBpZiAodHlwZW9mIGVhc2luZyA9PSAi ZnVuY3Rpb24iICYmICFlYXNpbmcubGVuZ3RoKSB7CisgICAgICAgICAgICBj YWxsYmFjayA9IGVhc2luZzsKKyAgICAgICAgICAgIGVhc2luZyA9IG1pbmEu bGluZWFyOworICAgICAgICB9CisgICAgICAgIHZhciBub3cgPSBtaW5hLnRp bWUoKSwKKyAgICAgICAgICAgIGFuaW0gPSBtaW5hKGZyb20sIHRvLCBub3cs IG5vdyArIG1zLCBtaW5hLnRpbWUsIHNldHRlciwgZWFzaW5nKTsKKyAgICAg ICAgY2FsbGJhY2sgJiYgZXZlLm9uY2UoIm1pbmEuZmluaXNoLiIgKyBhbmlt LmlkLCBjYWxsYmFjayk7CisgICAgICAgIHJldHVybiBhbmltOworICAgIH07 CisgICAgLypcCisgICAgICogRWxlbWVudC5zdG9wCisgICAgIFsgbWV0aG9k IF0KKyAgICAgKioKKyAgICAgKiBTdG9wcyBhbGwgdGhlIGFuaW1hdGlvbnMg Zm9yIHRoZSBjdXJyZW50IGVsZW1lbnQKKyAgICAgKioKKyAgICAgPSAoRWxl bWVudCkgdGhlIGN1cnJlbnQgZWxlbWVudAorICAgIFwqLworICAgIGVscHJv dG8uc3RvcCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGFuaW1zID0g dGhpcy5pbkFuaW0oKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0g YW5pbXMubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAgYW5p bXNbaV0uc3RvcCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlz OworICAgIH07CisgICAgLypcCisgICAgICogRWxlbWVudC5hbmltYXRlCisg ICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBBbmltYXRlcyB0aGUg Z2l2ZW4gYXR0cmlidXRlcyBvZiB0aGUgZWxlbWVudAorICAgICAqKgorICAg ICAtIGF0dHJzIChvYmplY3QpIGtleS12YWx1ZSBwYWlycyBvZiBkZXN0aW5h dGlvbiBhdHRyaWJ1dGVzCisgICAgIC0gZHVyYXRpb24gKG51bWJlcikgZHVy YXRpb24gb2YgdGhlIGFuaW1hdGlvbiBpbiBtaWxsaXNlY29uZHMKKyAgICAg LSBlYXNpbmcgKGZ1bmN0aW9uKSAjb3B0aW9uYWwgZWFzaW5nIGZ1bmN0aW9u IGZyb20gQG1pbmEgb3IgY3VzdG9tCisgICAgIC0gY2FsbGJhY2sgKGZ1bmN0 aW9uKSAjb3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBleGVjdXRl cyB3aGVuIHRoZSBhbmltYXRpb24gZW5kcworICAgICA9IChFbGVtZW50KSB0 aGUgY3VycmVudCBlbGVtZW50CisgICAgXCovCisgICAgZWxwcm90by5hbmlt YXRlID0gZnVuY3Rpb24gKGF0dHJzLCBtcywgZWFzaW5nLCBjYWxsYmFjaykg eworICAgICAgICBpZiAodHlwZW9mIGVhc2luZyA9PSAiZnVuY3Rpb24iICYm ICFlYXNpbmcubGVuZ3RoKSB7CisgICAgICAgICAgICBjYWxsYmFjayA9IGVh c2luZzsKKyAgICAgICAgICAgIGVhc2luZyA9IG1pbmEubGluZWFyOworICAg ICAgICB9CisgICAgICAgIGlmIChhdHRycyBpbnN0YW5jZW9mIEFuaW1hdGlv bikgeworICAgICAgICAgICAgY2FsbGJhY2sgPSBhdHRycy5jYWxsYmFjazsK KyAgICAgICAgICAgIGVhc2luZyA9IGF0dHJzLmVhc2luZzsKKyAgICAgICAg ICAgIG1zID0gYXR0cnMuZHVyOworICAgICAgICAgICAgYXR0cnMgPSBhdHRy cy5hdHRyOworICAgICAgICB9CisgICAgICAgIHZhciBma2V5cyA9IFtdLCB0 a2V5cyA9IFtdLCBrZXlzID0ge30sIGZyb20sIHRvLCBmLCBlcSwKKyAgICAg ICAgICAgIGVsID0gdGhpczsKKyAgICAgICAgZm9yICh2YXIga2V5IGluIGF0 dHJzKSBpZiAoYXR0cnNbaGFzXShrZXkpKSB7CisgICAgICAgICAgICBpZiAo ZWwuZXF1YWwpIHsKKyAgICAgICAgICAgICAgICBlcSA9IGVsLmVxdWFsKGtl eSwgU3RyKGF0dHJzW2tleV0pKTsKKyAgICAgICAgICAgICAgICBmcm9tID0g ZXEuZnJvbTsKKyAgICAgICAgICAgICAgICB0byA9IGVxLnRvOworICAgICAg ICAgICAgICAgIGYgPSBlcS5mOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgICBmcm9tID0gK2VsLmF0dHIoa2V5KTsKKyAgICAgICAg ICAgICAgICB0byA9ICthdHRyc1trZXldOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgdmFyIGxlbiA9IGlzKGZyb20sICJhcnJheSIpID8gZnJvbS5s ZW5ndGggOiAxOworICAgICAgICAgICAga2V5c1trZXldID0gc2xpY2UoZmtl eXMubGVuZ3RoLCBma2V5cy5sZW5ndGggKyBsZW4sIGYpOworICAgICAgICAg ICAgZmtleXMgPSBma2V5cy5jb25jYXQoZnJvbSk7CisgICAgICAgICAgICB0 a2V5cyA9IHRrZXlzLmNvbmNhdCh0byk7CisgICAgICAgIH0KKyAgICAgICAg dmFyIG5vdyA9IG1pbmEudGltZSgpLAorICAgICAgICAgICAgYW5pbSA9IG1p bmEoZmtleXMsIHRrZXlzLCBub3csIG5vdyArIG1zLCBtaW5hLnRpbWUsIGZ1 bmN0aW9uICh2YWwpIHsKKyAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IHt9 OworICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBrZXlzKSBpZiAo a2V5c1toYXNdKGtleSkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXR0cltr ZXldID0ga2V5c1trZXldKHZhbCk7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIGVsLmF0dHIoYXR0cik7CisgICAgICAgICAgICB9LCBl YXNpbmcpOworICAgICAgICBlbC5hbmltc1thbmltLmlkXSA9IGFuaW07Cisg ICAgICAgIGFuaW0uX2F0dHJzID0gYXR0cnM7CisgICAgICAgIGFuaW0uX2Nh bGxiYWNrID0gY2FsbGJhY2s7CisgICAgICAgIGV2ZSgic25hcC5hbmltY3Jl YXRlZC4iICsgZWwuaWQsIGFuaW0pOworICAgICAgICBldmUub25jZSgibWlu YS5maW5pc2guIiArIGFuaW0uaWQsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAg ICAgIGRlbGV0ZSBlbC5hbmltc1thbmltLmlkXTsKKyAgICAgICAgICAgIGNh bGxiYWNrICYmIGNhbGxiYWNrLmNhbGwoZWwpOworICAgICAgICB9KTsKKyAg ICAgICAgZXZlLm9uY2UoIm1pbmEuc3RvcC4iICsgYW5pbS5pZCwgZnVuY3Rp b24gKCkgeworICAgICAgICAgICAgZGVsZXRlIGVsLmFuaW1zW2FuaW0uaWRd OworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGVsOworICAgIH07Cisg ICAgdmFyIGVsZGF0YSA9IHt9OworICAgIC8qXAorICAgICAqIEVsZW1lbnQu ZGF0YQorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQWRkcyBv ciByZXRyaWV2ZXMgZ2l2ZW4gdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGdpdmVu IGtleS4gKERvbuKAmXQgY29uZnVzZQorICAgICAqIHdpdGggYGRhdGEtYCBh dHRyaWJ1dGVzKQorICAgICAqCisgICAgICogU2VlIGFsc28gQEVsZW1lbnQu cmVtb3ZlRGF0YQorICAgICAtIGtleSAoc3RyaW5nKSBrZXkgdG8gc3RvcmUg ZGF0YQorICAgICAtIHZhbHVlIChhbnkpICNvcHRpb25hbCB2YWx1ZSB0byBz dG9yZQorICAgICA9IChvYmplY3QpIEBFbGVtZW50CisgICAgICogb3IsIGlm IHZhbHVlIGlzIG5vdCBzcGVjaWZpZWQ6CisgICAgID0gKGFueSkgdmFsdWUK KyAgICAgPiBVc2FnZQorICAgICB8IGZvciAodmFyIGkgPSAwLCBpIDwgNSwg aSsrKSB7CisgICAgIHwgICAgIHBhcGVyLmNpcmNsZSgxMCArIDE1ICogaSwg MTAsIDEwKQorICAgICB8ICAgICAgICAgIC5hdHRyKHtmaWxsOiAiIzAwMCJ9 KQorICAgICB8ICAgICAgICAgIC5kYXRhKCJpIiwgaSkKKyAgICAgfCAgICAg ICAgICAuY2xpY2soZnVuY3Rpb24gKCkgeworICAgICB8ICAgICAgICAgICAg IGFsZXJ0KHRoaXMuZGF0YSgiaSIpKTsKKyAgICAgfCAgICAgICAgICB9KTsK KyAgICAgfCB9CisgICAgXCovCisgICAgZWxwcm90by5kYXRhID0gZnVuY3Rp b24gKGtleSwgdmFsdWUpIHsKKyAgICAgICAgdmFyIGRhdGEgPSBlbGRhdGFb dGhpcy5pZF0gPSBlbGRhdGFbdGhpcy5pZF0gfHwge307CisgICAgICAgIGlm IChhcmd1bWVudHMubGVuZ3RoID09IDApeworICAgICAgICAgICAgZXZlKCJz bmFwLmRhdGEuZ2V0LiIgKyB0aGlzLmlkLCB0aGlzLCBkYXRhLCBudWxsKTsK KyAgICAgICAgICAgIHJldHVybiBkYXRhOworICAgICAgICB9CisgICAgICAg IGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAgIGlm IChTbmFwLmlzKGtleSwgIm9iamVjdCIpKSB7CisgICAgICAgICAgICAgICAg Zm9yICh2YXIgaSBpbiBrZXkpIGlmIChrZXlbaGFzXShpKSkgeworICAgICAg ICAgICAgICAgICAgICB0aGlzLmRhdGEoaSwga2V5W2ldKTsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBldmUoInNuYXAuZGF0YS5nZXQuIiAr IHRoaXMuaWQsIHRoaXMsIGRhdGFba2V5XSwga2V5KTsKKyAgICAgICAgICAg IHJldHVybiBkYXRhW2tleV07CisgICAgICAgIH0KKyAgICAgICAgZGF0YVtr ZXldID0gdmFsdWU7CisgICAgICAgIGV2ZSgic25hcC5kYXRhLnNldC4iICsg dGhpcy5pZCwgdGhpcywgdmFsdWUsIGtleSk7CisgICAgICAgIHJldHVybiB0 aGlzOworICAgIH07CisgICAgLypcCisgICAgICogRWxlbWVudC5yZW1vdmVE YXRhCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZW1vdmVz IHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGVtZW50IGJ5IGdpdmVuIGtl eS4KKyAgICAgKiBJZiBrZXkgaXMgbm90IHByb3ZpZGVkLCByZW1vdmVzIGFs bCB0aGUgZGF0YSBvZiB0aGUgZWxlbWVudC4KKyAgICAgLSBrZXkgKHN0cmlu ZykgI29wdGlvbmFsIGtleQorICAgICA9IChvYmplY3QpIEBFbGVtZW50Cisg ICAgXCovCisgICAgZWxwcm90by5yZW1vdmVEYXRhID0gZnVuY3Rpb24gKGtl eSkgeworICAgICAgICBpZiAoa2V5ID09IG51bGwpIHsKKyAgICAgICAgICAg IGVsZGF0YVt0aGlzLmlkXSA9IHt9OworICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgZWxkYXRhW3RoaXMuaWRdICYmIGRlbGV0ZSBlbGRhdGFbdGhp cy5pZF1ba2V5XTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsK KyAgICB9OworICAgIC8qXAorICAgICAqIEVsZW1lbnQub3V0ZXJTVkcKKyAg ICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJldHVybnMgU1ZHIGNv ZGUgZm9yIHRoZSBlbGVtZW50LCBlcXVpdmFsZW50IHRvIEhUTUwncyBgb3V0 ZXJIVE1MYC4KKyAgICAgKgorICAgICAqIFNlZSBhbHNvIEBFbGVtZW50Lmlu bmVyU1ZHCisgICAgID0gKHN0cmluZykgU1ZHIGNvZGUgZm9yIHRoZSBlbGVt ZW50CisgICAgXCovCisgICAgLypcCisgICAgICogRWxlbWVudC50b1N0cmlu ZworICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogU2VlIEBFbGVt ZW50Lm91dGVyU1ZHCisgICAgXCovCisgICAgZWxwcm90by5vdXRlclNWRyA9 IGVscHJvdG8udG9TdHJpbmcgPSB0b1N0cmluZygxKTsKKyAgICAvKlwKKyAg ICAgKiBFbGVtZW50LmlubmVyU1ZHCisgICAgIFsgbWV0aG9kIF0KKyAgICAg KioKKyAgICAgKiBSZXR1cm5zIFNWRyBjb2RlIGZvciB0aGUgZWxlbWVudCdz IGNvbnRlbnRzLCBlcXVpdmFsZW50IHRvIEhUTUwncyBgaW5uZXJIVE1MYAor ICAgICA9IChzdHJpbmcpIFNWRyBjb2RlIGZvciB0aGUgZWxlbWVudAorICAg IFwqLworICAgIGVscHJvdG8uaW5uZXJTVkcgPSB0b1N0cmluZygpOworICAg IGZ1bmN0aW9uIHRvU3RyaW5nKHR5cGUpIHsKKyAgICAgICAgcmV0dXJuIGZ1 bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciByZXMgPSB0eXBlID8gIjwi ICsgdGhpcy50eXBlIDogIiIsCisgICAgICAgICAgICAgICAgYXR0ciA9IHRo aXMubm9kZS5hdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgIGNobGQgPSB0 aGlzLm5vZGUuY2hpbGROb2RlczsKKyAgICAgICAgICAgIGlmICh0eXBlKSB7 CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gYXR0ci5s ZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHJl cyArPSAiICIgKyBhdHRyW2ldLm5hbWUgKyAnPSInICsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhdHRyW2ldLnZhbHVlLnJlcGxhY2UoLyIvZywg J1xcIicpICsgJyInOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGlmIChjaGxkLmxlbmd0aCkgeworICAgICAgICAg ICAgICAgIHR5cGUgJiYgKHJlcyArPSAiPiIpOworICAgICAgICAgICAgICAg IGZvciAoaSA9IDAsIGlpID0gY2hsZC5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7 CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGxkW2ldLm5vZGVUeXBlID09 IDMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcyArPSBjaGxkW2ld Lm5vZGVWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChj aGxkW2ldLm5vZGVUeXBlID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIHJlcyArPSB3cmFwKGNobGRbaV0pLnRvU3RyaW5nKCk7CisgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgdHlwZSAmJiAocmVzICs9ICI8LyIgKyB0aGlzLnR5cGUgKyAiPiIp OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0eXBl ICYmIChyZXMgKz0gIi8+Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICByZXR1cm4gcmVzOworICAgICAgICB9OworICAgIH0KKyAgICBlbHByb3Rv LnRvRGF0YVVSTCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHdpbmRv dyAmJiB3aW5kb3cuYnRvYSkgeworICAgICAgICAgICAgdmFyIGJiID0gdGhp cy5nZXRCQm94KCksCisgICAgICAgICAgICAgICAgc3ZnID0gU25hcC5mb3Jt YXQoJzxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5v cmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8x OTk5L3hsaW5rIiB3aWR0aD0ie3dpZHRofSIgaGVpZ2h0PSJ7aGVpZ2h0fSIg dmlld0JveD0ie3h9IHt5fSB7d2lkdGh9IHtoZWlnaHR9Ij57Y29udGVudHN9 PC9zdmc+JywgeworICAgICAgICAgICAgICAgIHg6ICtiYi54LnRvRml4ZWQo MyksCisgICAgICAgICAgICAgICAgeTogK2JiLnkudG9GaXhlZCgzKSwKKyAg ICAgICAgICAgICAgICB3aWR0aDogK2JiLndpZHRoLnRvRml4ZWQoMyksCisg ICAgICAgICAgICAgICAgaGVpZ2h0OiArYmIuaGVpZ2h0LnRvRml4ZWQoMyks CisgICAgICAgICAgICAgICAgY29udGVudHM6IHRoaXMub3V0ZXJTVkcoKQor ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm4gImRhdGE6aW1h Z2Uvc3ZnK3htbDtiYXNlNjQsIiArIGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJ Q29tcG9uZW50KHN2ZykpKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLypc CisgICAgICogRnJhZ21lbnQuc2VsZWN0CisgICAgIFsgbWV0aG9kIF0KKyAg ICAgKioKKyAgICAgKiBTZWUgQEVsZW1lbnQuc2VsZWN0CisgICAgXCovCisg ICAgRnJhZ21lbnQucHJvdG90eXBlLnNlbGVjdCA9IGVscHJvdG8uc2VsZWN0 OworICAgIC8qXAorICAgICAqIEZyYWdtZW50LnNlbGVjdEFsbAorICAgICBb IG1ldGhvZCBdCisgICAgICoqCisgICAgICogU2VlIEBFbGVtZW50LnNlbGVj dEFsbAorICAgIFwqLworICAgIEZyYWdtZW50LnByb3RvdHlwZS5zZWxlY3RB bGwgPSBlbHByb3RvLnNlbGVjdEFsbDsKK30pOworCisvLyBDb3B5cmlnaHQg KGMpIDIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNo ZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5 b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl IHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkg b2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyBodHRwOi8vd3d3LmFwYWNoZS5v cmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWly ZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcs IHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBp cyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9V VCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhl ciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9y IHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMg YW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KK1NuYXAu cGx1Z2luKGZ1bmN0aW9uIChTbmFwLCBFbGVtZW50LCBQYXBlciwgZ2xvYiwg RnJhZ21lbnQpIHsKKyAgICB2YXIgb2JqZWN0VG9TdHJpbmcgPSBPYmplY3Qu cHJvdG90eXBlLnRvU3RyaW5nLAorICAgICAgICBTdHIgPSBTdHJpbmcsCisg ICAgICAgIG1hdGggPSBNYXRoLAorICAgICAgICBFID0gIiI7CisgICAgZnVu Y3Rpb24gTWF0cml4KGEsIGIsIGMsIGQsIGUsIGYpIHsKKyAgICAgICAgaWYg KGIgPT0gbnVsbCAmJiBvYmplY3RUb1N0cmluZy5jYWxsKGEpID09ICJbb2Jq ZWN0IFNWR01hdHJpeF0iKSB7CisgICAgICAgICAgICB0aGlzLmEgPSBhLmE7 CisgICAgICAgICAgICB0aGlzLmIgPSBhLmI7CisgICAgICAgICAgICB0aGlz LmMgPSBhLmM7CisgICAgICAgICAgICB0aGlzLmQgPSBhLmQ7CisgICAgICAg ICAgICB0aGlzLmUgPSBhLmU7CisgICAgICAgICAgICB0aGlzLmYgPSBhLmY7 CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYg KGEgIT0gbnVsbCkgeworICAgICAgICAgICAgdGhpcy5hID0gK2E7CisgICAg ICAgICAgICB0aGlzLmIgPSArYjsKKyAgICAgICAgICAgIHRoaXMuYyA9ICtj OworICAgICAgICAgICAgdGhpcy5kID0gK2Q7CisgICAgICAgICAgICB0aGlz LmUgPSArZTsKKyAgICAgICAgICAgIHRoaXMuZiA9ICtmOworICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgdGhpcy5hID0gMTsKKyAgICAgICAgICAg IHRoaXMuYiA9IDA7CisgICAgICAgICAgICB0aGlzLmMgPSAwOworICAgICAg ICAgICAgdGhpcy5kID0gMTsKKyAgICAgICAgICAgIHRoaXMuZSA9IDA7Cisg ICAgICAgICAgICB0aGlzLmYgPSAwOworICAgICAgICB9CisgICAgfQorICAg IChmdW5jdGlvbiAobWF0cml4cHJvdG8pIHsKKyAgICAgICAgLypcCisgICAg ICAgICAqIE1hdHJpeC5hZGQKKyAgICAgICAgIFsgbWV0aG9kIF0KKyAgICAg ICAgICoqCisgICAgICAgICAqIEFkZHMgdGhlIGdpdmVuIG1hdHJpeCB0byBl eGlzdGluZyBvbmUKKyAgICAgICAgIC0gYSAobnVtYmVyKQorICAgICAgICAg LSBiIChudW1iZXIpCisgICAgICAgICAtIGMgKG51bWJlcikKKyAgICAgICAg IC0gZCAobnVtYmVyKQorICAgICAgICAgLSBlIChudW1iZXIpCisgICAgICAg ICAtIGYgKG51bWJlcikKKyAgICAgICAgICogb3IKKyAgICAgICAgIC0gbWF0 cml4IChvYmplY3QpIEBNYXRyaXgKKyAgICAgICAgXCovCisgICAgICAgIG1h dHJpeHByb3RvLmFkZCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCBlLCBmKSB7 CisgICAgICAgICAgICB2YXIgb3V0ID0gW1tdLCBbXSwgW11dLAorICAgICAg ICAgICAgICAgIG0gPSBbW3RoaXMuYSwgdGhpcy5jLCB0aGlzLmVdLCBbdGhp cy5iLCB0aGlzLmQsIHRoaXMuZl0sIFswLCAwLCAxXV0sCisgICAgICAgICAg ICAgICAgbWF0cml4ID0gW1thLCBjLCBlXSwgW2IsIGQsIGZdLCBbMCwgMCwg MV1dLAorICAgICAgICAgICAgICAgIHgsIHksIHosIHJlczsKKworICAgICAg ICAgICAgaWYgKGEgJiYgYSBpbnN0YW5jZW9mIE1hdHJpeCkgeworICAgICAg ICAgICAgICAgIG1hdHJpeCA9IFtbYS5hLCBhLmMsIGEuZV0sIFthLmIsIGEu ZCwgYS5mXSwgWzAsIDAsIDFdXTsKKyAgICAgICAgICAgIH0KKworICAgICAg ICAgICAgZm9yICh4ID0gMDsgeCA8IDM7IHgrKykgeworICAgICAgICAgICAg ICAgIGZvciAoeSA9IDA7IHkgPCAzOyB5KyspIHsKKyAgICAgICAgICAgICAg ICAgICAgcmVzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh6ID0g MDsgeiA8IDM7IHorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVz ICs9IG1beF1bel0gKiBtYXRyaXhbel1beV07CisgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3V0W3hdW3ldID0gcmVzOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IHRoaXMuYSA9IG91dFswXVswXTsKKyAgICAgICAgICAgIHRoaXMuYiA9IG91 dFsxXVswXTsKKyAgICAgICAgICAgIHRoaXMuYyA9IG91dFswXVsxXTsKKyAg ICAgICAgICAgIHRoaXMuZCA9IG91dFsxXVsxXTsKKyAgICAgICAgICAgIHRo aXMuZSA9IG91dFswXVsyXTsKKyAgICAgICAgICAgIHRoaXMuZiA9IG91dFsx XVsyXTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9Owor ICAgICAgICAvKlwKKyAgICAgICAgICogTWF0cml4LmludmVydAorICAgICAg ICAgWyBtZXRob2QgXQorICAgICAgICAgKioKKyAgICAgICAgICogUmV0dXJu cyBhbiBpbnZlcnRlZCB2ZXJzaW9uIG9mIHRoZSBtYXRyaXgKKyAgICAgICAg ID0gKG9iamVjdCkgQE1hdHJpeAorICAgICAgICBcKi8KKyAgICAgICAgbWF0 cml4cHJvdG8uaW52ZXJ0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg dmFyIG1lID0gdGhpcywKKyAgICAgICAgICAgICAgICB4ID0gbWUuYSAqIG1l LmQgLSBtZS5iICogbWUuYzsKKyAgICAgICAgICAgIHJldHVybiBuZXcgTWF0 cml4KG1lLmQgLyB4LCAtbWUuYiAvIHgsIC1tZS5jIC8geCwgbWUuYSAvIHgs IChtZS5jICogbWUuZiAtIG1lLmQgKiBtZS5lKSAvIHgsIChtZS5iICogbWUu ZSAtIG1lLmEgKiBtZS5mKSAvIHgpOworICAgICAgICB9OworICAgICAgICAv KlwKKyAgICAgICAgICogTWF0cml4LmNsb25lCisgICAgICAgICBbIG1ldGhv ZCBdCisgICAgICAgICAqKgorICAgICAgICAgKiBSZXR1cm5zIGEgY29weSBv ZiB0aGUgbWF0cml4CisgICAgICAgICA9IChvYmplY3QpIEBNYXRyaXgKKyAg ICAgICAgXCovCisgICAgICAgIG1hdHJpeHByb3RvLmNsb25lID0gZnVuY3Rp b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBNYXRyaXgodGhpcy5h LCB0aGlzLmIsIHRoaXMuYywgdGhpcy5kLCB0aGlzLmUsIHRoaXMuZik7Cisg ICAgICAgIH07CisgICAgICAgIC8qXAorICAgICAgICAgKiBNYXRyaXgudHJh bnNsYXRlCisgICAgICAgICBbIG1ldGhvZCBdCisgICAgICAgICAqKgorICAg ICAgICAgKiBUcmFuc2xhdGUgdGhlIG1hdHJpeAorICAgICAgICAgLSB4IChu dW1iZXIpIGhvcml6b250YWwgb2Zmc2V0IGRpc3RhbmNlCisgICAgICAgICAt IHkgKG51bWJlcikgdmVydGljYWwgb2Zmc2V0IGRpc3RhbmNlCisgICAgICAg IFwqLworICAgICAgICBtYXRyaXhwcm90by50cmFuc2xhdGUgPSBmdW5jdGlv biAoeCwgeSkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkKDEsIDAs IDAsIDEsIHgsIHkpOworICAgICAgICB9OworICAgICAgICAvKlwKKyAgICAg ICAgICogTWF0cml4LnNjYWxlCisgICAgICAgICBbIG1ldGhvZCBdCisgICAg ICAgICAqKgorICAgICAgICAgKiBTY2FsZXMgdGhlIG1hdHJpeAorICAgICAg ICAgLSB4IChudW1iZXIpIGFtb3VudCB0byBiZSBzY2FsZWQsIHdpdGggYDFg IHJlc3VsdGluZyBpbiBubyBjaGFuZ2UKKyAgICAgICAgIC0geSAobnVtYmVy KSAjb3B0aW9uYWwgYW1vdW50IHRvIHNjYWxlIGFsb25nIHRoZSB2ZXJ0aWNh bCBheGlzLiAoT3RoZXJ3aXNlIGB4YCBhcHBsaWVzIHRvIGJvdGggYXhlcy4p CisgICAgICAgICAtIGN4IChudW1iZXIpICNvcHRpb25hbCBob3Jpem9udGFs IG9yaWdpbiBwb2ludCBmcm9tIHdoaWNoIHRvIHNjYWxlCisgICAgICAgICAt IGN5IChudW1iZXIpICNvcHRpb25hbCB2ZXJ0aWNhbCBvcmlnaW4gcG9pbnQg ZnJvbSB3aGljaCB0byBzY2FsZQorICAgICAgICAgKiBEZWZhdWx0IGN4LCBj eSBpcyB0aGUgbWlkZGxlIHBvaW50IG9mIHRoZSBlbGVtZW50LgorICAgICAg ICBcKi8KKyAgICAgICAgbWF0cml4cHJvdG8uc2NhbGUgPSBmdW5jdGlvbiAo eCwgeSwgY3gsIGN5KSB7CisgICAgICAgICAgICB5ID09IG51bGwgJiYgKHkg PSB4KTsKKyAgICAgICAgICAgIChjeCB8fCBjeSkgJiYgdGhpcy5hZGQoMSwg MCwgMCwgMSwgY3gsIGN5KTsKKyAgICAgICAgICAgIHRoaXMuYWRkKHgsIDAs IDAsIHksIDAsIDApOworICAgICAgICAgICAgKGN4IHx8IGN5KSAmJiB0aGlz LmFkZCgxLCAwLCAwLCAxLCAtY3gsIC1jeSk7CisgICAgICAgICAgICByZXR1 cm4gdGhpczsKKyAgICAgICAgfTsKKyAgICAgICAgLypcCisgICAgICAgICAq IE1hdHJpeC5yb3RhdGUKKyAgICAgICAgIFsgbWV0aG9kIF0KKyAgICAgICAg ICoqCisgICAgICAgICAqIFJvdGF0ZXMgdGhlIG1hdHJpeAorICAgICAgICAg LSBhIChudW1iZXIpIGFuZ2xlIG9mIHJvdGF0aW9uLCBpbiBkZWdyZWVzCisg ICAgICAgICAtIHggKG51bWJlcikgaG9yaXpvbnRhbCBvcmlnaW4gcG9pbnQg ZnJvbSB3aGljaCB0byByb3RhdGUKKyAgICAgICAgIC0geSAobnVtYmVyKSB2 ZXJ0aWNhbCBvcmlnaW4gcG9pbnQgZnJvbSB3aGljaCB0byByb3RhdGUKKyAg ICAgICAgXCovCisgICAgICAgIG1hdHJpeHByb3RvLnJvdGF0ZSA9IGZ1bmN0 aW9uIChhLCB4LCB5KSB7CisgICAgICAgICAgICBhID0gU25hcC5yYWQoYSk7 CisgICAgICAgICAgICB4ID0geCB8fCAwOworICAgICAgICAgICAgeSA9IHkg fHwgMDsKKyAgICAgICAgICAgIHZhciBjb3MgPSArbWF0aC5jb3MoYSkudG9G aXhlZCg5KSwKKyAgICAgICAgICAgICAgICBzaW4gPSArbWF0aC5zaW4oYSku dG9GaXhlZCg5KTsKKyAgICAgICAgICAgIHRoaXMuYWRkKGNvcywgc2luLCAt c2luLCBjb3MsIHgsIHkpOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRk KDEsIDAsIDAsIDEsIC14LCAteSk7CisgICAgICAgIH07CisgICAgICAgIC8q XAorICAgICAgICAgKiBNYXRyaXgueAorICAgICAgICAgWyBtZXRob2QgXQor ICAgICAgICAgKioKKyAgICAgICAgICogUmV0dXJucyB4IGNvb3JkaW5hdGUg Zm9yIGdpdmVuIHBvaW50IGFmdGVyIHRyYW5zZm9ybWF0aW9uIGRlc2NyaWJl ZCBieSB0aGUgbWF0cml4LiBTZWUgYWxzbyBATWF0cml4LnkKKyAgICAgICAg IC0geCAobnVtYmVyKQorICAgICAgICAgLSB5IChudW1iZXIpCisgICAgICAg ICA9IChudW1iZXIpIHgKKyAgICAgICAgXCovCisgICAgICAgIG1hdHJpeHBy b3RvLnggPSBmdW5jdGlvbiAoeCwgeSkgeworICAgICAgICAgICAgcmV0dXJu IHggKiB0aGlzLmEgKyB5ICogdGhpcy5jICsgdGhpcy5lOworICAgICAgICB9 OworICAgICAgICAvKlwKKyAgICAgICAgICogTWF0cml4LnkKKyAgICAgICAg IFsgbWV0aG9kIF0KKyAgICAgICAgICoqCisgICAgICAgICAqIFJldHVybnMg eSBjb29yZGluYXRlIGZvciBnaXZlbiBwb2ludCBhZnRlciB0cmFuc2Zvcm1h dGlvbiBkZXNjcmliZWQgYnkgdGhlIG1hdHJpeC4gU2VlIGFsc28gQE1hdHJp eC54CisgICAgICAgICAtIHggKG51bWJlcikKKyAgICAgICAgIC0geSAobnVt YmVyKQorICAgICAgICAgPSAobnVtYmVyKSB5CisgICAgICAgIFwqLworICAg ICAgICBtYXRyaXhwcm90by55ID0gZnVuY3Rpb24gKHgsIHkpIHsKKyAgICAg ICAgICAgIHJldHVybiB4ICogdGhpcy5iICsgeSAqIHRoaXMuZCArIHRoaXMu ZjsKKyAgICAgICAgfTsKKyAgICAgICAgbWF0cml4cHJvdG8uZ2V0ID0gZnVu Y3Rpb24gKGkpIHsKKyAgICAgICAgICAgIHJldHVybiArdGhpc1tTdHIuZnJv bUNoYXJDb2RlKDk3ICsgaSldLnRvRml4ZWQoNCk7CisgICAgICAgIH07Cisg ICAgICAgIG1hdHJpeHByb3RvLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgewor ICAgICAgICAgICAgcmV0dXJuICJtYXRyaXgoIiArIFt0aGlzLmdldCgwKSwg dGhpcy5nZXQoMSksIHRoaXMuZ2V0KDIpLCB0aGlzLmdldCgzKSwgdGhpcy5n ZXQoNCksIHRoaXMuZ2V0KDUpXS5qb2luKCkgKyAiKSI7CisgICAgICAgIH07 CisgICAgICAgIG1hdHJpeHByb3RvLm9mZnNldCA9IGZ1bmN0aW9uICgpIHsK KyAgICAgICAgICAgIHJldHVybiBbdGhpcy5lLnRvRml4ZWQoNCksIHRoaXMu Zi50b0ZpeGVkKDQpXTsKKyAgICAgICAgfTsKKyAgICAgICAgZnVuY3Rpb24g bm9ybShhKSB7CisgICAgICAgICAgICByZXR1cm4gYVswXSAqIGFbMF0gKyBh WzFdICogYVsxXTsKKyAgICAgICAgfQorICAgICAgICBmdW5jdGlvbiBub3Jt YWxpemUoYSkgeworICAgICAgICAgICAgdmFyIG1hZyA9IG1hdGguc3FydChu b3JtKGEpKTsKKyAgICAgICAgICAgIGFbMF0gJiYgKGFbMF0gLz0gbWFnKTsK KyAgICAgICAgICAgIGFbMV0gJiYgKGFbMV0gLz0gbWFnKTsKKyAgICAgICAg fQorICAgICAgICAvKlwKKyAgICAgICAgICogTWF0cml4LmRldGVybWluYW50 CisgICAgICAgICBbIG1ldGhvZCBdCisgICAgICAgICAqKgorICAgICAgICAg KiBGaW5kcyBkZXRlcm1pbmFudCBvZiB0aGUgZ2l2ZW4gbWF0cml4LgorICAg ICAgICAgPSAobnVtYmVyKSBkZXRlcm1pbmFudAorICAgICAgICBcKi8KKyAg ICAgICAgbWF0cml4cHJvdG8uZGV0ZXJtaW5hbnQgPSBmdW5jdGlvbiAoKSB7 CisgICAgICAgICAgICByZXR1cm4gdGhpcy5hICogdGhpcy5kIC0gdGhpcy5i ICogdGhpcy5jOworICAgICAgICB9OworICAgICAgICAvKlwKKyAgICAgICAg ICogTWF0cml4LnNwbGl0CisgICAgICAgICBbIG1ldGhvZCBdCisgICAgICAg ICAqKgorICAgICAgICAgKiBTcGxpdHMgbWF0cml4IGludG8gcHJpbWl0aXZl IHRyYW5zZm9ybWF0aW9ucworICAgICAgICAgPSAob2JqZWN0KSBpbiBmb3Jt YXQ6CisgICAgICAgICBvIGR4IChudW1iZXIpIHRyYW5zbGF0aW9uIGJ5IHgK KyAgICAgICAgIG8gZHkgKG51bWJlcikgdHJhbnNsYXRpb24gYnkgeQorICAg ICAgICAgbyBzY2FsZXggKG51bWJlcikgc2NhbGUgYnkgeAorICAgICAgICAg byBzY2FsZXkgKG51bWJlcikgc2NhbGUgYnkgeQorICAgICAgICAgbyBzaGVh ciAobnVtYmVyKSBzaGVhcgorICAgICAgICAgbyByb3RhdGUgKG51bWJlcikg cm90YXRpb24gaW4gZGVnCisgICAgICAgICBvIGlzU2ltcGxlIChib29sZWFu KSBjb3VsZCBpdCBiZSByZXByZXNlbnRlZCB2aWEgc2ltcGxlIHRyYW5zZm9y bWF0aW9ucworICAgICAgICBcKi8KKyAgICAgICAgbWF0cml4cHJvdG8uc3Bs aXQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgb3V0ID0ge307 CisgICAgICAgICAgICAvLyB0cmFuc2xhdGlvbgorICAgICAgICAgICAgb3V0 LmR4ID0gdGhpcy5lOworICAgICAgICAgICAgb3V0LmR5ID0gdGhpcy5mOwor CisgICAgICAgICAgICAvLyBzY2FsZSBhbmQgc2hlYXIKKyAgICAgICAgICAg IHZhciByb3cgPSBbW3RoaXMuYSwgdGhpcy5jXSwgW3RoaXMuYiwgdGhpcy5k XV07CisgICAgICAgICAgICBvdXQuc2NhbGV4ID0gbWF0aC5zcXJ0KG5vcm0o cm93WzBdKSk7CisgICAgICAgICAgICBub3JtYWxpemUocm93WzBdKTsKKwor ICAgICAgICAgICAgb3V0LnNoZWFyID0gcm93WzBdWzBdICogcm93WzFdWzBd ICsgcm93WzBdWzFdICogcm93WzFdWzFdOworICAgICAgICAgICAgcm93WzFd ID0gW3Jvd1sxXVswXSAtIHJvd1swXVswXSAqIG91dC5zaGVhciwgcm93WzFd WzFdIC0gcm93WzBdWzFdICogb3V0LnNoZWFyXTsKKworICAgICAgICAgICAg b3V0LnNjYWxleSA9IG1hdGguc3FydChub3JtKHJvd1sxXSkpOworICAgICAg ICAgICAgbm9ybWFsaXplKHJvd1sxXSk7CisgICAgICAgICAgICBvdXQuc2hl YXIgLz0gb3V0LnNjYWxleTsKKworICAgICAgICAgICAgaWYgKHRoaXMuZGV0 ZXJtaW5hbnQoKSA8IDApIHsKKyAgICAgICAgICAgICAgICBvdXQuc2NhbGV4 ID0gLW91dC5zY2FsZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg IC8vIHJvdGF0aW9uCisgICAgICAgICAgICB2YXIgc2luID0gLXJvd1swXVsx XSwKKyAgICAgICAgICAgICAgICBjb3MgPSByb3dbMV1bMV07CisgICAgICAg ICAgICBpZiAoY29zIDwgMCkgeworICAgICAgICAgICAgICAgIG91dC5yb3Rh dGUgPSBTbmFwLmRlZyhtYXRoLmFjb3MoY29zKSk7CisgICAgICAgICAgICAg ICAgaWYgKHNpbiA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0LnJv dGF0ZSA9IDM2MCAtIG91dC5yb3RhdGU7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBvdXQucm90 YXRlID0gU25hcC5kZWcobWF0aC5hc2luKHNpbikpOworICAgICAgICAgICAg fQorCisgICAgICAgICAgICBvdXQuaXNTaW1wbGUgPSAhK291dC5zaGVhci50 b0ZpeGVkKDkpICYmIChvdXQuc2NhbGV4LnRvRml4ZWQoOSkgPT0gb3V0LnNj YWxleS50b0ZpeGVkKDkpIHx8ICFvdXQucm90YXRlKTsKKyAgICAgICAgICAg IG91dC5pc1N1cGVyU2ltcGxlID0gIStvdXQuc2hlYXIudG9GaXhlZCg5KSAm JiBvdXQuc2NhbGV4LnRvRml4ZWQoOSkgPT0gb3V0LnNjYWxleS50b0ZpeGVk KDkpICYmICFvdXQucm90YXRlOworICAgICAgICAgICAgb3V0Lm5vUm90YXRp b24gPSAhK291dC5zaGVhci50b0ZpeGVkKDkpICYmICFvdXQucm90YXRlOwor ICAgICAgICAgICAgcmV0dXJuIG91dDsKKyAgICAgICAgfTsKKyAgICAgICAg LypcCisgICAgICAgICAqIE1hdHJpeC50b1RyYW5zZm9ybVN0cmluZworICAg ICAgICAgWyBtZXRob2QgXQorICAgICAgICAgKioKKyAgICAgICAgICogUmV0 dXJucyB0cmFuc2Zvcm0gc3RyaW5nIHRoYXQgcmVwcmVzZW50cyBnaXZlbiBt YXRyaXgKKyAgICAgICAgID0gKHN0cmluZykgdHJhbnNmb3JtIHN0cmluZwor ICAgICAgICBcKi8KKyAgICAgICAgbWF0cml4cHJvdG8udG9UcmFuc2Zvcm1T dHJpbmcgPSBmdW5jdGlvbiAoc2hvcnRlcikgeworICAgICAgICAgICAgdmFy IHMgPSBzaG9ydGVyIHx8IHRoaXMuc3BsaXQoKTsKKyAgICAgICAgICAgIGlm ICghK3Muc2hlYXIudG9GaXhlZCg5KSkgeworICAgICAgICAgICAgICAgIHMu c2NhbGV4ID0gK3Muc2NhbGV4LnRvRml4ZWQoNCk7CisgICAgICAgICAgICAg ICAgcy5zY2FsZXkgPSArcy5zY2FsZXkudG9GaXhlZCg0KTsKKyAgICAgICAg ICAgICAgICBzLnJvdGF0ZSA9ICtzLnJvdGF0ZS50b0ZpeGVkKDQpOworICAg ICAgICAgICAgICAgIHJldHVybiAgKHMuZHggfHwgcy5keSA/ICJ0IiArIFsr cy5keC50b0ZpeGVkKDQpLCArcy5keS50b0ZpeGVkKDQpXSA6IEUpICsKKyAg ICAgICAgICAgICAgICAgICAgICAgIChzLnNjYWxleCAhPSAxIHx8IHMuc2Nh bGV5ICE9IDEgPyAicyIgKyBbcy5zY2FsZXgsIHMuc2NhbGV5LCAwLCAwXSA6 IEUpICsKKyAgICAgICAgICAgICAgICAgICAgICAgIChzLnJvdGF0ZSA/ICJy IiArIFsrcy5yb3RhdGUudG9GaXhlZCg0KSwgMCwgMF0gOiBFKTsKKyAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICJtIiAr IFt0aGlzLmdldCgwKSwgdGhpcy5nZXQoMSksIHRoaXMuZ2V0KDIpLCB0aGlz LmdldCgzKSwgdGhpcy5nZXQoNCksIHRoaXMuZ2V0KDUpXTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfTsKKyAgICB9KShNYXRyaXgucHJvdG90eXBlKTsK KyAgICAvKlwKKyAgICAgKiBTbmFwLk1hdHJpeAorICAgICBbIG1ldGhvZCBd CisgICAgICoqCisgICAgICogTWF0cml4IGNvbnN0cnVjdG9yLCBleHRlbmQg b24geW91ciBvd24gcmlzay4KKyAgICAgKiBUbyBjcmVhdGUgbWF0cmljZXMg dXNlIEBTbmFwLm1hdHJpeC4KKyAgICBcKi8KKyAgICBTbmFwLk1hdHJpeCA9 IE1hdHJpeDsKKyAgICAvKlwKKyAgICAgKiBTbmFwLm1hdHJpeAorICAgICBb IG1ldGhvZCBdCisgICAgICoqCisgICAgICogVXRpbGl0eSBtZXRob2QKKyAg ICAgKioKKyAgICAgKiBSZXR1cm5zIGEgbWF0cml4IGJhc2VkIG9uIHRoZSBn aXZlbiBwYXJhbWV0ZXJzCisgICAgIC0gYSAobnVtYmVyKQorICAgICAtIGIg KG51bWJlcikKKyAgICAgLSBjIChudW1iZXIpCisgICAgIC0gZCAobnVtYmVy KQorICAgICAtIGUgKG51bWJlcikKKyAgICAgLSBmIChudW1iZXIpCisgICAg ICogb3IKKyAgICAgLSBzdmdNYXRyaXggKFNWR01hdHJpeCkKKyAgICAgPSAo b2JqZWN0KSBATWF0cml4CisgICAgXCovCisgICAgU25hcC5tYXRyaXggPSBm dW5jdGlvbiAoYSwgYiwgYywgZCwgZSwgZikgeworICAgICAgICByZXR1cm4g bmV3IE1hdHJpeChhLCBiLCBjLCBkLCBlLCBmKTsKKyAgICB9OworfSk7Cisv LyBDb3B5cmlnaHQgKGMpIDIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0 ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5k ZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNl bnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBp biBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9i dGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyBodHRwOi8v d3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBV bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRv IGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0 aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lT LAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5Z IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhl IExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcg cGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGlj ZW5zZS4KK1NuYXAucGx1Z2luKGZ1bmN0aW9uIChTbmFwLCBFbGVtZW50LCBQ YXBlciwgZ2xvYiwgRnJhZ21lbnQpIHsKKyAgICB2YXIgaGFzID0gImhhc093 blByb3BlcnR5IiwKKyAgICAgICAgbWFrZSA9IFNuYXAuXy5tYWtlLAorICAg ICAgICB3cmFwID0gU25hcC5fLndyYXAsCisgICAgICAgIGlzID0gU25hcC5p cywKKyAgICAgICAgZ2V0U29tZURlZnMgPSBTbmFwLl8uZ2V0U29tZURlZnMs CisgICAgICAgIHJlVVJMVmFsdWUgPSAvXnVybFwoIz8oW14pXSspXCkkLywK KyAgICAgICAgJCA9IFNuYXAuXy4kLAorICAgICAgICBVUkwgPSBTbmFwLnVy bCwKKyAgICAgICAgU3RyID0gU3RyaW5nLAorICAgICAgICBzZXBhcmF0b3Ig PSBTbmFwLl8uc2VwYXJhdG9yLAorICAgICAgICBFID0gIiI7CisgICAgLy8g QXR0cmlidXRlcyBldmVudCBoYW5kbGVycworICAgIGV2ZS5vbigic25hcC51 dGlsLmF0dHIubWFzayIsIGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICBp ZiAodmFsdWUgaW5zdGFuY2VvZiBFbGVtZW50IHx8IHZhbHVlIGluc3RhbmNl b2YgRnJhZ21lbnQpIHsKKyAgICAgICAgICAgIGV2ZS5zdG9wKCk7CisgICAg ICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBGcmFnbWVudCAmJiB2YWx1 ZS5ub2RlLmNoaWxkTm9kZXMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAg ICAgICB2YWx1ZSA9IHZhbHVlLm5vZGUuZmlyc3RDaGlsZDsKKyAgICAgICAg ICAgICAgICBnZXRTb21lRGVmcyh0aGlzKS5hcHBlbmRDaGlsZCh2YWx1ZSk7 CisgICAgICAgICAgICAgICAgdmFsdWUgPSB3cmFwKHZhbHVlKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWx1ZS50eXBlID09ICJtYXNr IikgeworICAgICAgICAgICAgICAgIHZhciBtYXNrID0gdmFsdWU7CisgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1hc2sgPSBtYWtl KCJtYXNrIiwgZ2V0U29tZURlZnModGhpcykpOworICAgICAgICAgICAgICAg IG1hc2subm9kZS5hcHBlbmRDaGlsZCh2YWx1ZS5ub2RlKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICFtYXNrLm5vZGUuaWQgJiYgJChtYXNrLm5v ZGUsIHsKKyAgICAgICAgICAgICAgICBpZDogbWFzay5pZAorICAgICAgICAg ICAgfSk7CisgICAgICAgICAgICAkKHRoaXMubm9kZSwgeworICAgICAgICAg ICAgICAgIG1hc2s6IFVSTChtYXNrLmlkKQorICAgICAgICAgICAgfSk7Cisg ICAgICAgIH0KKyAgICB9KTsKKyAgICAoZnVuY3Rpb24gKGNsaXBJdCkgewor ICAgICAgICBldmUub24oInNuYXAudXRpbC5hdHRyLmNsaXAiLCBjbGlwSXQp OworICAgICAgICBldmUub24oInNuYXAudXRpbC5hdHRyLmNsaXAtcGF0aCIs IGNsaXBJdCk7CisgICAgICAgIGV2ZS5vbigic25hcC51dGlsLmF0dHIuY2xp cFBhdGgiLCBjbGlwSXQpOworICAgIH0oZnVuY3Rpb24gKHZhbHVlKSB7Cisg ICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQgfHwgdmFsdWUg aW5zdGFuY2VvZiBGcmFnbWVudCkgeworICAgICAgICAgICAgZXZlLnN0b3Ao KTsKKyAgICAgICAgICAgIGlmICh2YWx1ZS50eXBlID09ICJjbGlwUGF0aCIp IHsKKyAgICAgICAgICAgICAgICB2YXIgY2xpcCA9IHZhbHVlOworICAgICAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjbGlwID0gbWFrZSgi Y2xpcFBhdGgiLCBnZXRTb21lRGVmcyh0aGlzKSk7CisgICAgICAgICAgICAg ICAgY2xpcC5ub2RlLmFwcGVuZENoaWxkKHZhbHVlLm5vZGUpOworICAgICAg ICAgICAgICAgICFjbGlwLm5vZGUuaWQgJiYgJChjbGlwLm5vZGUsIHsKKyAg ICAgICAgICAgICAgICAgICAgaWQ6IGNsaXAuaWQKKyAgICAgICAgICAgICAg ICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICQodGhpcy5ub2Rl LCB7CisgICAgICAgICAgICAgICAgImNsaXAtcGF0aCI6IFVSTChjbGlwLm5v ZGUuaWQgfHwgY2xpcC5pZCkKKyAgICAgICAgICAgIH0pOworICAgICAgICB9 CisgICAgfSkpOworICAgIGZ1bmN0aW9uIGZpbGxTdHJva2UobmFtZSkgewor ICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAg ICBldmUuc3RvcCgpOworICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNl b2YgRnJhZ21lbnQgJiYgdmFsdWUubm9kZS5jaGlsZE5vZGVzLmxlbmd0aCA9 PSAxICYmCisgICAgICAgICAgICAgICAgKHZhbHVlLm5vZGUuZmlyc3RDaGls ZC50YWdOYW1lID09ICJyYWRpYWxHcmFkaWVudCIgfHwKKyAgICAgICAgICAg ICAgICB2YWx1ZS5ub2RlLmZpcnN0Q2hpbGQudGFnTmFtZSA9PSAibGluZWFy R3JhZGllbnQiIHx8CisgICAgICAgICAgICAgICAgdmFsdWUubm9kZS5maXJz dENoaWxkLnRhZ05hbWUgPT0gInBhdHRlcm4iKSkgeworICAgICAgICAgICAg ICAgIHZhbHVlID0gdmFsdWUubm9kZS5maXJzdENoaWxkOworICAgICAgICAg ICAgICAgIGdldFNvbWVEZWZzKHRoaXMpLmFwcGVuZENoaWxkKHZhbHVlKTsK KyAgICAgICAgICAgICAgICB2YWx1ZSA9IHdyYXAodmFsdWUpOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRWxl bWVudCkgeworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS50eXBlID09ICJy YWRpYWxHcmFkaWVudCIgfHwgdmFsdWUudHlwZSA9PSAibGluZWFyR3JhZGll bnQiCisgICAgICAgICAgICAgICAgICAgfHwgdmFsdWUudHlwZSA9PSAicGF0 dGVybiIpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5ub2Rl LmlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAkKHZhbHVlLm5vZGUs IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogdmFsdWUuaWQK KyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgIHZhciBmaWxsID0gVVJMKHZh bHVlLm5vZGUuaWQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICAgICAgICAgIGZpbGwgPSB2YWx1ZS5hdHRyKG5hbWUpOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgZmlsbCA9IFNuYXAuY29sb3IodmFsdWUpOworICAgICAgICAg ICAgICAgIGlmIChmaWxsLmVycm9yKSB7CisgICAgICAgICAgICAgICAgICAg IHZhciBncmFkID0gU25hcChnZXRTb21lRGVmcyh0aGlzKS5vd25lclNWR0Vs ZW1lbnQpLmdyYWRpZW50KHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg aWYgKGdyYWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZ3Jh ZC5ub2RlLmlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChn cmFkLm5vZGUsIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aWQ6IGdyYWQuaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsK KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg ICAgICAgIGZpbGwgPSBVUkwoZ3JhZC5ub2RlLmlkKTsKKyAgICAgICAgICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZp bGwgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZpbGwgPSBT dHIoZmlsbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor ICAgICAgICAgICAgdmFyIGF0dHJzID0ge307CisgICAgICAgICAgICBhdHRy c1tuYW1lXSA9IGZpbGw7CisgICAgICAgICAgICAkKHRoaXMubm9kZSwgYXR0 cnMpOworICAgICAgICAgICAgdGhpcy5ub2RlLnN0eWxlW25hbWVdID0gRTsK KyAgICAgICAgfTsKKyAgICB9CisgICAgZXZlLm9uKCJzbmFwLnV0aWwuYXR0 ci5maWxsIiwgZmlsbFN0cm9rZSgiZmlsbCIpKTsKKyAgICBldmUub24oInNu YXAudXRpbC5hdHRyLnN0cm9rZSIsIGZpbGxTdHJva2UoInN0cm9rZSIpKTsK KyAgICB2YXIgZ3JhZHJnID0gL14oW2xyXSkoPzpcKChbXildKilcKSk/KC4q KSQvaTsKKyAgICBldmUub24oInNuYXAudXRpbC5ncmFkLnBhcnNlIiwgZnVu Y3Rpb24gcGFyc2VHcmFkKHN0cmluZykgeworICAgICAgICBzdHJpbmcgPSBT dHIoc3RyaW5nKTsKKyAgICAgICAgdmFyIHRva2VucyA9IHN0cmluZy5tYXRj aChncmFkcmcpOworICAgICAgICBpZiAoIXRva2VucykgeworICAgICAgICAg ICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHR5cGUg PSB0b2tlbnNbMV0sCisgICAgICAgICAgICBwYXJhbXMgPSB0b2tlbnNbMl0s CisgICAgICAgICAgICBzdG9wcyA9IHRva2Vuc1szXTsKKyAgICAgICAgcGFy YW1zID0gcGFyYW1zLnNwbGl0KC9ccyosXHMqLykubWFwKGZ1bmN0aW9uIChl bCkgeworICAgICAgICAgICAgcmV0dXJuICtlbCA9PSBlbCA/ICtlbCA6IGVs OworICAgICAgICB9KTsKKyAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggPT0g MSAmJiBwYXJhbXNbMF0gPT0gMCkgeworICAgICAgICAgICAgcGFyYW1zID0g W107CisgICAgICAgIH0KKyAgICAgICAgc3RvcHMgPSBzdG9wcy5zcGxpdCgi LSIpOworICAgICAgICBzdG9wcyA9IHN0b3BzLm1hcChmdW5jdGlvbiAoZWwp IHsKKyAgICAgICAgICAgIGVsID0gZWwuc3BsaXQoIjoiKTsKKyAgICAgICAg ICAgIHZhciBvdXQgPSB7CisgICAgICAgICAgICAgICAgY29sb3I6IGVsWzBd CisgICAgICAgICAgICB9OworICAgICAgICAgICAgaWYgKGVsWzFdKSB7Cisg ICAgICAgICAgICAgICAgb3V0Lm9mZnNldCA9IHBhcnNlRmxvYXQoZWxbMV0p OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG91dDsKKyAg ICAgICAgfSk7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICB0eXBl OiB0eXBlLAorICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsCisgICAgICAg ICAgICBzdG9wczogc3RvcHMKKyAgICAgICAgfTsKKyAgICB9KTsKKworICAg IGV2ZS5vbigic25hcC51dGlsLmF0dHIuZCIsIGZ1bmN0aW9uICh2YWx1ZSkg eworICAgICAgICBldmUuc3RvcCgpOworICAgICAgICBpZiAoaXModmFsdWUs ICJhcnJheSIpICYmIGlzKHZhbHVlWzBdLCAiYXJyYXkiKSkgeworICAgICAg ICAgICAgdmFsdWUgPSBTbmFwLnBhdGgudG9TdHJpbmcuY2FsbCh2YWx1ZSk7 CisgICAgICAgIH0KKyAgICAgICAgdmFsdWUgPSBTdHIodmFsdWUpOworICAg ICAgICBpZiAodmFsdWUubWF0Y2goL1tydW9dL2kpKSB7CisgICAgICAgICAg ICB2YWx1ZSA9IFNuYXAucGF0aC50b0Fic29sdXRlKHZhbHVlKTsKKyAgICAg ICAgfQorICAgICAgICAkKHRoaXMubm9kZSwge2Q6IHZhbHVlfSk7CisgICAg fSkoLTEpOworICAgIGV2ZS5vbigic25hcC51dGlsLmF0dHIuI3RleHQiLCBm dW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgZXZlLnN0b3AoKTsKKyAgICAg ICAgdmFsdWUgPSBTdHIodmFsdWUpOworICAgICAgICB2YXIgdHh0ID0gZ2xv Yi5kb2MuY3JlYXRlVGV4dE5vZGUodmFsdWUpOworICAgICAgICB3aGlsZSAo dGhpcy5ub2RlLmZpcnN0Q2hpbGQpIHsKKyAgICAgICAgICAgIHRoaXMubm9k ZS5yZW1vdmVDaGlsZCh0aGlzLm5vZGUuZmlyc3RDaGlsZCk7CisgICAgICAg IH0KKyAgICAgICAgdGhpcy5ub2RlLmFwcGVuZENoaWxkKHR4dCk7CisgICAg fSkoLTEpOworICAgIGV2ZS5vbigic25hcC51dGlsLmF0dHIucGF0aCIsIGZ1 bmN0aW9uICh2YWx1ZSkgeworICAgICAgICBldmUuc3RvcCgpOworICAgICAg ICB0aGlzLmF0dHIoe2Q6IHZhbHVlfSk7CisgICAgfSkoLTEpOworICAgIGV2 ZS5vbigic25hcC51dGlsLmF0dHIuY2xhc3MiLCBmdW5jdGlvbiAodmFsdWUp IHsKKyAgICAgICAgZXZlLnN0b3AoKTsKKyAgICAgICAgdGhpcy5ub2RlLmNs YXNzTmFtZS5iYXNlVmFsID0gdmFsdWU7CisgICAgfSkoLTEpOworICAgIGV2 ZS5vbigic25hcC51dGlsLmF0dHIudmlld0JveCIsIGZ1bmN0aW9uICh2YWx1 ZSkgeworICAgICAgICB2YXIgdmI7CisgICAgICAgIGlmIChpcyh2YWx1ZSwg Im9iamVjdCIpICYmICJ4IiBpbiB2YWx1ZSkgeworICAgICAgICAgICAgdmIg PSBbdmFsdWUueCwgdmFsdWUueSwgdmFsdWUud2lkdGgsIHZhbHVlLmhlaWdo dF0uam9pbigiICIpOworICAgICAgICB9IGVsc2UgaWYgKGlzKHZhbHVlLCAi YXJyYXkiKSkgeworICAgICAgICAgICAgdmIgPSB2YWx1ZS5qb2luKCIgIik7 CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YiA9IHZhbHVlOwor ICAgICAgICB9CisgICAgICAgICQodGhpcy5ub2RlLCB7CisgICAgICAgICAg ICB2aWV3Qm94OiB2YgorICAgICAgICB9KTsKKyAgICAgICAgZXZlLnN0b3Ao KTsKKyAgICB9KSgtMSk7CisgICAgZXZlLm9uKCJzbmFwLnV0aWwuYXR0ci50 cmFuc2Zvcm0iLCBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgdGhpcy50 cmFuc2Zvcm0odmFsdWUpOworICAgICAgICBldmUuc3RvcCgpOworICAgIH0p KC0xKTsKKyAgICBldmUub24oInNuYXAudXRpbC5hdHRyLnIiLCBmdW5jdGlv biAodmFsdWUpIHsKKyAgICAgICAgaWYgKHRoaXMudHlwZSA9PSAicmVjdCIp IHsKKyAgICAgICAgICAgIGV2ZS5zdG9wKCk7CisgICAgICAgICAgICAkKHRo aXMubm9kZSwgeworICAgICAgICAgICAgICAgIHJ4OiB2YWx1ZSwKKyAgICAg ICAgICAgICAgICByeTogdmFsdWUKKyAgICAgICAgICAgIH0pOworICAgICAg ICB9CisgICAgfSkoLTEpOworICAgIGV2ZS5vbigic25hcC51dGlsLmF0dHIu dGV4dHBhdGgiLCBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgZXZlLnN0 b3AoKTsKKyAgICAgICAgaWYgKHRoaXMudHlwZSA9PSAidGV4dCIpIHsKKyAg ICAgICAgICAgIHZhciBpZCwgdHAsIG5vZGU7CisgICAgICAgICAgICBpZiAo IXZhbHVlICYmIHRoaXMudGV4dFBhdGgpIHsKKyAgICAgICAgICAgICAgICB0 cCA9IHRoaXMudGV4dFBhdGg7CisgICAgICAgICAgICAgICAgd2hpbGUgKHRw Lm5vZGUuZmlyc3RDaGlsZCkgeworICAgICAgICAgICAgICAgICAgICB0aGlz Lm5vZGUuYXBwZW5kQ2hpbGQodHAubm9kZS5maXJzdENoaWxkKTsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdHAucmVtb3ZlKCk7Cisg ICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMudGV4dFBhdGg7CisgICAgICAg ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAg aWYgKGlzKHZhbHVlLCAic3RyaW5nIikpIHsKKyAgICAgICAgICAgICAgICB2 YXIgZGVmcyA9IGdldFNvbWVEZWZzKHRoaXMpLAorICAgICAgICAgICAgICAg ICAgICBwYXRoID0gd3JhcChkZWZzLnBhcmVudE5vZGUpLnBhdGgodmFsdWUp OworICAgICAgICAgICAgICAgIGRlZnMuYXBwZW5kQ2hpbGQocGF0aC5ub2Rl KTsKKyAgICAgICAgICAgICAgICBpZCA9IHBhdGguaWQ7CisgICAgICAgICAg ICAgICAgcGF0aC5hdHRyKHtpZDogaWR9KTsKKyAgICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSB3cmFwKHZhbHVlKTsKKyAg ICAgICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBFbGVtZW50KSB7 CisgICAgICAgICAgICAgICAgICAgIGlkID0gdmFsdWUuYXR0cigiaWQiKTsK KyAgICAgICAgICAgICAgICAgICAgaWYgKCFpZCkgeworICAgICAgICAgICAg ICAgICAgICAgICAgaWQgPSB2YWx1ZS5pZDsKKyAgICAgICAgICAgICAgICAg ICAgICAgIHZhbHVlLmF0dHIoe2lkOiBpZH0pOworICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg ICAgICAgICAgaWYgKGlkKSB7CisgICAgICAgICAgICAgICAgdHAgPSB0aGlz LnRleHRQYXRoOworICAgICAgICAgICAgICAgIG5vZGUgPSB0aGlzLm5vZGU7 CisgICAgICAgICAgICAgICAgaWYgKHRwKSB7CisgICAgICAgICAgICAgICAg ICAgIHRwLmF0dHIoeyJ4bGluazpocmVmIjogIiMiICsgaWR9KTsKKyAgICAg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0cCA9 ICQoInRleHRQYXRoIiwgeworICAgICAgICAgICAgICAgICAgICAgICAgInhs aW5rOmhyZWYiOiAiIyIgKyBpZAorICAgICAgICAgICAgICAgICAgICB9KTsK KyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5vZGUuZmlyc3RDaGlsZCkg eworICAgICAgICAgICAgICAgICAgICAgICAgdHAuYXBwZW5kQ2hpbGQobm9k ZS5maXJzdENoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgICBub2RlLmFwcGVuZENoaWxkKHRwKTsKKyAgICAgICAg ICAgICAgICAgICAgdGhpcy50ZXh0UGF0aCA9IHdyYXAodHApOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0p KC0xKTsKKyAgICBldmUub24oInNuYXAudXRpbC5hdHRyLnRleHQiLCBmdW5j dGlvbiAodmFsdWUpIHsKKyAgICAgICAgaWYgKHRoaXMudHlwZSA9PSAidGV4 dCIpIHsKKyAgICAgICAgICAgIHZhciBpID0gMCwKKyAgICAgICAgICAgICAg ICBub2RlID0gdGhpcy5ub2RlLAorICAgICAgICAgICAgICAgIHR1bmVyID0g ZnVuY3Rpb24gKGNodW5rKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBv dXQgPSAkKCJ0c3BhbiIpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXMo Y2h1bmssICJhcnJheSIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBm b3IgKHZhciBpID0gMDsgaSA8IGNodW5rLmxlbmd0aDsgaSsrKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgb3V0LmFwcGVuZENoaWxkKHR1bmVy KGNodW5rW2ldKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg ICAgICBvdXQuYXBwZW5kQ2hpbGQoZ2xvYi5kb2MuY3JlYXRlVGV4dE5vZGUo Y2h1bmspKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICBvdXQubm9ybWFsaXplICYmIG91dC5ub3JtYWxpemUoKTsKKyAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dDsKKyAgICAgICAgICAgICAg ICB9OworICAgICAgICAgICAgd2hpbGUgKG5vZGUuZmlyc3RDaGlsZCkgewor ICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlQ2hpbGQobm9kZS5maXJzdENo aWxkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciB0dW5lZCA9 IHR1bmVyKHZhbHVlKTsKKyAgICAgICAgICAgIHdoaWxlICh0dW5lZC5maXJz dENoaWxkKSB7CisgICAgICAgICAgICAgICAgbm9kZS5hcHBlbmRDaGlsZCh0 dW5lZC5maXJzdENoaWxkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgICAgICBldmUuc3RvcCgpOworICAgIH0pKC0xKTsKKyAgICBmdW5jdGlv biBzZXRGb250U2l6ZSh2YWx1ZSkgeworICAgICAgICBldmUuc3RvcCgpOwor ICAgICAgICBpZiAodmFsdWUgPT0gK3ZhbHVlKSB7CisgICAgICAgICAgICB2 YWx1ZSArPSAicHgiOworICAgICAgICB9CisgICAgICAgIHRoaXMubm9kZS5z dHlsZS5mb250U2l6ZSA9IHZhbHVlOworICAgIH0KKyAgICBldmUub24oInNu YXAudXRpbC5hdHRyLmZvbnRTaXplIiwgc2V0Rm9udFNpemUpKC0xKTsKKyAg ICBldmUub24oInNuYXAudXRpbC5hdHRyLmZvbnQtc2l6ZSIsIHNldEZvbnRT aXplKSgtMSk7CisKKworICAgIGV2ZS5vbigic25hcC51dGlsLmdldGF0dHIu dHJhbnNmb3JtIiwgZnVuY3Rpb24gKCkgeworICAgICAgICBldmUuc3RvcCgp OworICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0oKTsKKyAgICB9KSgt MSk7CisgICAgZXZlLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci50ZXh0cGF0aCIs IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZXZlLnN0b3AoKTsKKyAgICAgICAg cmV0dXJuIHRoaXMudGV4dFBhdGg7CisgICAgfSkoLTEpOworICAgIC8vIE1h cmtlcnMKKyAgICAoZnVuY3Rpb24gKCkgeworICAgICAgICBmdW5jdGlvbiBn ZXR0ZXIoZW5kKSB7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkg eworICAgICAgICAgICAgICAgIGV2ZS5zdG9wKCk7CisgICAgICAgICAgICAg ICAgdmFyIHN0eWxlID0gZ2xvYi5kb2MuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0 ZWRTdHlsZSh0aGlzLm5vZGUsIG51bGwpLmdldFByb3BlcnR5VmFsdWUoIm1h cmtlci0iICsgZW5kKTsKKyAgICAgICAgICAgICAgICBpZiAoc3R5bGUgPT0g Im5vbmUiKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHlsZTsK KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg ICByZXR1cm4gU25hcChnbG9iLmRvYy5nZXRFbGVtZW50QnlJZChzdHlsZS5t YXRjaChyZVVSTFZhbHVlKVsxXSkpOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAgZnVuY3Rpb24gc2V0 dGVyKGVuZCkgeworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1 ZSkgeworICAgICAgICAgICAgICAgIGV2ZS5zdG9wKCk7CisgICAgICAgICAg ICAgICAgdmFyIG5hbWUgPSAibWFya2VyIiArIGVuZC5jaGFyQXQoMCkudG9V cHBlckNhc2UoKSArIGVuZC5zdWJzdHJpbmcoMSk7CisgICAgICAgICAgICAg ICAgaWYgKHZhbHVlID09ICIiIHx8ICF2YWx1ZSkgeworICAgICAgICAgICAg ICAgICAgICB0aGlzLm5vZGUuc3R5bGVbbmFtZV0gPSAibm9uZSI7CisgICAg ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgaWYgKHZhbHVlLnR5cGUgPT0gIm1hcmtlciIpIHsK KyAgICAgICAgICAgICAgICAgICAgdmFyIGlkID0gdmFsdWUubm9kZS5pZDsK KyAgICAgICAgICAgICAgICAgICAgaWYgKCFpZCkgeworICAgICAgICAgICAg ICAgICAgICAgICAgJCh2YWx1ZS5ub2RlLCB7aWQ6IHZhbHVlLmlkfSk7Cisg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdGhp cy5ub2RlLnN0eWxlW25hbWVdID0gVVJMKGlkKTsKKyAgICAgICAgICAgICAg ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH07CisgICAgICAgIH0KKyAgICAgICAgZXZlLm9uKCJzbmFwLnV0aWwuZ2V0 YXR0ci5tYXJrZXItZW5kIiwgZ2V0dGVyKCJlbmQiKSkoLTEpOworICAgICAg ICBldmUub24oInNuYXAudXRpbC5nZXRhdHRyLm1hcmtlckVuZCIsIGdldHRl cigiZW5kIikpKC0xKTsKKyAgICAgICAgZXZlLm9uKCJzbmFwLnV0aWwuZ2V0 YXR0ci5tYXJrZXItc3RhcnQiLCBnZXR0ZXIoInN0YXJ0IikpKC0xKTsKKyAg ICAgICAgZXZlLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci5tYXJrZXJTdGFydCIs IGdldHRlcigic3RhcnQiKSkoLTEpOworICAgICAgICBldmUub24oInNuYXAu dXRpbC5nZXRhdHRyLm1hcmtlci1taWQiLCBnZXR0ZXIoIm1pZCIpKSgtMSk7 CisgICAgICAgIGV2ZS5vbigic25hcC51dGlsLmdldGF0dHIubWFya2VyTWlk IiwgZ2V0dGVyKCJtaWQiKSkoLTEpOworICAgICAgICBldmUub24oInNuYXAu dXRpbC5hdHRyLm1hcmtlci1lbmQiLCBzZXR0ZXIoImVuZCIpKSgtMSk7Cisg ICAgICAgIGV2ZS5vbigic25hcC51dGlsLmF0dHIubWFya2VyRW5kIiwgc2V0 dGVyKCJlbmQiKSkoLTEpOworICAgICAgICBldmUub24oInNuYXAudXRpbC5h dHRyLm1hcmtlci1zdGFydCIsIHNldHRlcigic3RhcnQiKSkoLTEpOworICAg ICAgICBldmUub24oInNuYXAudXRpbC5hdHRyLm1hcmtlclN0YXJ0Iiwgc2V0 dGVyKCJzdGFydCIpKSgtMSk7CisgICAgICAgIGV2ZS5vbigic25hcC51dGls LmF0dHIubWFya2VyLW1pZCIsIHNldHRlcigibWlkIikpKC0xKTsKKyAgICAg ICAgZXZlLm9uKCJzbmFwLnV0aWwuYXR0ci5tYXJrZXJNaWQiLCBzZXR0ZXIo Im1pZCIpKSgtMSk7CisgICAgfSgpKTsKKyAgICBldmUub24oInNuYXAudXRp bC5nZXRhdHRyLnIiLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlz LnR5cGUgPT0gInJlY3QiICYmICQodGhpcy5ub2RlLCAicngiKSA9PSAkKHRo aXMubm9kZSwgInJ5IikpIHsKKyAgICAgICAgICAgIGV2ZS5zdG9wKCk7Cisg ICAgICAgICAgICByZXR1cm4gJCh0aGlzLm5vZGUsICJyeCIpOworICAgICAg ICB9CisgICAgfSkoLTEpOworICAgIGZ1bmN0aW9uIHRleHRFeHRyYWN0KG5v ZGUpIHsKKyAgICAgICAgdmFyIG91dCA9IFtdOworICAgICAgICB2YXIgY2hp bGRyZW4gPSBub2RlLmNoaWxkTm9kZXM7CisgICAgICAgIGZvciAodmFyIGkg PSAwLCBpaSA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAg ICAgICAgICAgIHZhciBjaGkgPSBjaGlsZHJlbltpXTsKKyAgICAgICAgICAg IGlmIChjaGkubm9kZVR5cGUgPT0gMykgeworICAgICAgICAgICAgICAgIG91 dC5wdXNoKGNoaS5ub2RlVmFsdWUpOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgaWYgKGNoaS50YWdOYW1lID09ICJ0c3BhbiIpIHsKKyAgICAgICAg ICAgICAgICBpZiAoY2hpLmNoaWxkTm9kZXMubGVuZ3RoID09IDEgJiYgY2hp LmZpcnN0Q2hpbGQubm9kZVR5cGUgPT0gMykgeworICAgICAgICAgICAgICAg ICAgICBvdXQucHVzaChjaGkuZmlyc3RDaGlsZC5ub2RlVmFsdWUpOworICAg ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG91 dC5wdXNoKHRleHRFeHRyYWN0KGNoaSkpOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gb3V0 OworICAgIH0KKyAgICBldmUub24oInNuYXAudXRpbC5nZXRhdHRyLnRleHQi LCBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLnR5cGUgPT0gInRl eHQiIHx8IHRoaXMudHlwZSA9PSAidHNwYW4iKSB7CisgICAgICAgICAgICBl dmUuc3RvcCgpOworICAgICAgICAgICAgdmFyIG91dCA9IHRleHRFeHRyYWN0 KHRoaXMubm9kZSk7CisgICAgICAgICAgICByZXR1cm4gb3V0Lmxlbmd0aCA9 PSAxID8gb3V0WzBdIDogb3V0OworICAgICAgICB9CisgICAgfSkoLTEpOwor ICAgIGV2ZS5vbigic25hcC51dGlsLmdldGF0dHIuI3RleHQiLCBmdW5jdGlv biAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLm5vZGUudGV4dENvbnRlbnQ7 CisgICAgfSkoLTEpOworICAgIGV2ZS5vbigic25hcC51dGlsLmdldGF0dHIu dmlld0JveCIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZXZlLnN0b3AoKTsK KyAgICAgICAgdmFyIHZiID0gJCh0aGlzLm5vZGUsICJ2aWV3Qm94Iik7Cisg ICAgICAgIGlmICh2YikgeworICAgICAgICAgICAgdmIgPSB2Yi5zcGxpdChz ZXBhcmF0b3IpOworICAgICAgICAgICAgcmV0dXJuIFNuYXAuXy5ib3goK3Zi WzBdLCArdmJbMV0sICt2YlsyXSwgK3ZiWzNdKTsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0pKC0x KTsKKyAgICBldmUub24oInNuYXAudXRpbC5nZXRhdHRyLnBvaW50cyIsIGZ1 bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHAgPSAkKHRoaXMubm9kZSwgInBv aW50cyIpOworICAgICAgICBldmUuc3RvcCgpOworICAgICAgICBpZiAocCkg eworICAgICAgICAgICAgcmV0dXJuIHAuc3BsaXQoc2VwYXJhdG9yKTsKKyAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg fQorICAgIH0pKC0xKTsKKyAgICBldmUub24oInNuYXAudXRpbC5nZXRhdHRy LnBhdGgiLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBwID0gJCh0aGlz Lm5vZGUsICJkIik7CisgICAgICAgIGV2ZS5zdG9wKCk7CisgICAgICAgIHJl dHVybiBwOworICAgIH0pKC0xKTsKKyAgICBldmUub24oInNuYXAudXRpbC5n ZXRhdHRyLmNsYXNzIiwgZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4g dGhpcy5ub2RlLmNsYXNzTmFtZS5iYXNlVmFsOworICAgIH0pKC0xKTsKKyAg ICBmdW5jdGlvbiBnZXRGb250U2l6ZSgpIHsKKyAgICAgICAgZXZlLnN0b3Ao KTsKKyAgICAgICAgcmV0dXJuIHRoaXMubm9kZS5zdHlsZS5mb250U2l6ZTsK KyAgICB9CisgICAgZXZlLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci5mb250U2l6 ZSIsIGdldEZvbnRTaXplKSgtMSk7CisgICAgZXZlLm9uKCJzbmFwLnV0aWwu Z2V0YXR0ci5mb250LXNpemUiLCBnZXRGb250U2l6ZSkoLTEpOworfSk7CisK Ky8vIENvcHlyaWdodCAoYykgMjAxNCBBZG9iZSBTeXN0ZW1zIEluY29ycG9y YXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1 bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxp Y2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0 IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkg b2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vIGh0dHA6 Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8v IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQg dG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVy IHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFT SVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBB TlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0 aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmlu ZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBM aWNlbnNlLgorU25hcC5wbHVnaW4oZnVuY3Rpb24gKFNuYXAsIEVsZW1lbnQs IFBhcGVyLCBnbG9iLCBGcmFnbWVudCkgeworICAgIHZhciByZ05vdFNwYWNl ID0gL1xTKy9nLAorICAgICAgICByZ0JhZFNwYWNlID0gL1tcdFxyXG5cZl0v ZywKKyAgICAgICAgcmdUcmltID0gLyheXHMrfFxzKyQpL2csCisgICAgICAg IFN0ciA9IFN0cmluZywKKyAgICAgICAgZWxwcm90byA9IEVsZW1lbnQucHJv dG90eXBlOworICAgIC8qXAorICAgICAqIEVsZW1lbnQuYWRkQ2xhc3MKKyAg ICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEFkZHMgZ2l2ZW4gY2xh c3MgbmFtZSBvciBsaXN0IG9mIGNsYXNzIG5hbWVzIHRvIHRoZSBlbGVtZW50 LgorICAgICAtIHZhbHVlIChzdHJpbmcpIGNsYXNzIG5hbWUgb3Igc3BhY2Ug c2VwYXJhdGVkIGxpc3Qgb2YgY2xhc3MgbmFtZXMKKyAgICAgKioKKyAgICAg PSAoRWxlbWVudCkgb3JpZ2luYWwgZWxlbWVudC4KKyAgICBcKi8KKyAgICBl bHByb3RvLmFkZENsYXNzID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg IHZhciBjbGFzc2VzID0gU3RyKHZhbHVlIHx8ICIiKS5tYXRjaChyZ05vdFNw YWNlKSB8fCBbXSwKKyAgICAgICAgICAgIGVsZW0gPSB0aGlzLm5vZGUsCisg ICAgICAgICAgICBjbGFzc05hbWUgPSBlbGVtLmNsYXNzTmFtZS5iYXNlVmFs LAorICAgICAgICAgICAgY3VyQ2xhc3NlcyA9IGNsYXNzTmFtZS5tYXRjaChy Z05vdFNwYWNlKSB8fCBbXSwKKyAgICAgICAgICAgIGosCisgICAgICAgICAg ICBwb3MsCisgICAgICAgICAgICBjbGF6eiwKKyAgICAgICAgICAgIGZpbmFs VmFsdWU7CisKKyAgICAgICAgaWYgKGNsYXNzZXMubGVuZ3RoKSB7CisgICAg ICAgICAgICBqID0gMDsKKyAgICAgICAgICAgIHdoaWxlICgoY2xhenogPSBj bGFzc2VzW2orK10pKSB7CisgICAgICAgICAgICAgICAgcG9zID0gY3VyQ2xh c3Nlcy5pbmRleE9mKGNsYXp6KTsKKyAgICAgICAgICAgICAgICBpZiAoIX5w b3MpIHsKKyAgICAgICAgICAgICAgICAgICAgY3VyQ2xhc3Nlcy5wdXNoKGNs YXp6KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg ICAgICAgICAgIGZpbmFsVmFsdWUgPSBjdXJDbGFzc2VzLmpvaW4oIiAiKTsK KyAgICAgICAgICAgIGlmIChjbGFzc05hbWUgIT0gZmluYWxWYWx1ZSkgewor ICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lLmJhc2VWYWwgPSBmaW5h bFZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJl dHVybiB0aGlzOworICAgIH07CisgICAgLypcCisgICAgICogRWxlbWVudC5y ZW1vdmVDbGFzcworICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICog UmVtb3ZlcyBnaXZlbiBjbGFzcyBuYW1lIG9yIGxpc3Qgb2YgY2xhc3MgbmFt ZXMgZnJvbSB0aGUgZWxlbWVudC4KKyAgICAgLSB2YWx1ZSAoc3RyaW5nKSBj bGFzcyBuYW1lIG9yIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGNsYXNzIG5h bWVzCisgICAgICoqCisgICAgID0gKEVsZW1lbnQpIG9yaWdpbmFsIGVsZW1l bnQuCisgICAgXCovCisgICAgZWxwcm90by5yZW1vdmVDbGFzcyA9IGZ1bmN0 aW9uICh2YWx1ZSkgeworICAgICAgICB2YXIgY2xhc3NlcyA9IFN0cih2YWx1 ZSB8fCAiIikubWF0Y2gocmdOb3RTcGFjZSkgfHwgW10sCisgICAgICAgICAg ICBlbGVtID0gdGhpcy5ub2RlLAorICAgICAgICAgICAgY2xhc3NOYW1lID0g ZWxlbS5jbGFzc05hbWUuYmFzZVZhbCwKKyAgICAgICAgICAgIGN1ckNsYXNz ZXMgPSBjbGFzc05hbWUubWF0Y2gocmdOb3RTcGFjZSkgfHwgW10sCisgICAg ICAgICAgICBqLAorICAgICAgICAgICAgcG9zLAorICAgICAgICAgICAgY2xh enosCisgICAgICAgICAgICBmaW5hbFZhbHVlOworICAgICAgICBpZiAoY3Vy Q2xhc3Nlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGogPSAwOworICAgICAg ICAgICAgd2hpbGUgKChjbGF6eiA9IGNsYXNzZXNbaisrXSkpIHsKKyAgICAg ICAgICAgICAgICBwb3MgPSBjdXJDbGFzc2VzLmluZGV4T2YoY2xhenopOwor ICAgICAgICAgICAgICAgIGlmICh+cG9zKSB7CisgICAgICAgICAgICAgICAg ICAgIGN1ckNsYXNzZXMuc3BsaWNlKHBvcywgMSk7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmaW5hbFZhbHVl ID0gY3VyQ2xhc3Nlcy5qb2luKCIgIik7CisgICAgICAgICAgICBpZiAoY2xh c3NOYW1lICE9IGZpbmFsVmFsdWUpIHsKKyAgICAgICAgICAgICAgICBlbGVt LmNsYXNzTmFtZS5iYXNlVmFsID0gZmluYWxWYWx1ZTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Owor ICAgIC8qXAorICAgICAqIEVsZW1lbnQuaGFzQ2xhc3MKKyAgICAgWyBtZXRo b2QgXQorICAgICAqKgorICAgICAqIENoZWNrcyBpZiB0aGUgZWxlbWVudCBo YXMgYSBnaXZlbiBjbGFzcyBuYW1lIGluIHRoZSBsaXN0IG9mIGNsYXNzIG5h bWVzIGFwcGxpZWQgdG8gaXQuCisgICAgIC0gdmFsdWUgKHN0cmluZykgY2xh c3MgbmFtZQorICAgICAqKgorICAgICA9IChib29sZWFuKSBgdHJ1ZWAgaWYg dGhlIGVsZW1lbnQgaGFzIGdpdmVuIGNsYXNzCisgICAgXCovCisgICAgZWxw cm90by5oYXNDbGFzcyA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICB2 YXIgZWxlbSA9IHRoaXMubm9kZSwKKyAgICAgICAgICAgIGNsYXNzTmFtZSA9 IGVsZW0uY2xhc3NOYW1lLmJhc2VWYWwsCisgICAgICAgICAgICBjdXJDbGFz c2VzID0gY2xhc3NOYW1lLm1hdGNoKHJnTm90U3BhY2UpIHx8IFtdOworICAg ICAgICByZXR1cm4gISF+Y3VyQ2xhc3Nlcy5pbmRleE9mKHZhbHVlKTsKKyAg ICB9OworICAgIC8qXAorICAgICAqIEVsZW1lbnQudG9nZ2xlQ2xhc3MKKyAg ICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEFkZCBvciByZW1vdmUg b25lIG9yIG1vcmUgY2xhc3NlcyBmcm9tIHRoZSBlbGVtZW50LCBkZXBlbmRp bmcgb24gZWl0aGVyCisgICAgICogdGhlIGNsYXNz4oCZcyBwcmVzZW5jZSBv ciB0aGUgdmFsdWUgb2YgdGhlIGBmbGFnYCBhcmd1bWVudC4KKyAgICAgLSB2 YWx1ZSAoc3RyaW5nKSBjbGFzcyBuYW1lIG9yIHNwYWNlIHNlcGFyYXRlZCBs aXN0IG9mIGNsYXNzIG5hbWVzCisgICAgIC0gZmxhZyAoYm9vbGVhbikgdmFs dWUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGNsYXNzIHNob3VsZCBiZSBh ZGRlZCBvciByZW1vdmVkCisgICAgICoqCisgICAgID0gKEVsZW1lbnQpIG9y aWdpbmFsIGVsZW1lbnQuCisgICAgXCovCisgICAgZWxwcm90by50b2dnbGVD bGFzcyA9IGZ1bmN0aW9uICh2YWx1ZSwgZmxhZykgeworICAgICAgICBpZiAo ZmxhZyAhPSBudWxsKSB7CisgICAgICAgICAgICBpZiAoZmxhZykgeworICAg ICAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZENsYXNzKHZhbHVlKTsKKyAg ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRo aXMucmVtb3ZlQ2xhc3ModmFsdWUpOworICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAgICAgIHZhciBjbGFzc2VzID0gKHZhbHVlIHx8ICIiKS5tYXRj aChyZ05vdFNwYWNlKSB8fCBbXSwKKyAgICAgICAgICAgIGVsZW0gPSB0aGlz Lm5vZGUsCisgICAgICAgICAgICBjbGFzc05hbWUgPSBlbGVtLmNsYXNzTmFt ZS5iYXNlVmFsLAorICAgICAgICAgICAgY3VyQ2xhc3NlcyA9IGNsYXNzTmFt ZS5tYXRjaChyZ05vdFNwYWNlKSB8fCBbXSwKKyAgICAgICAgICAgIGosCisg ICAgICAgICAgICBwb3MsCisgICAgICAgICAgICBjbGF6eiwKKyAgICAgICAg ICAgIGZpbmFsVmFsdWU7CisgICAgICAgIGogPSAwOworICAgICAgICB3aGls ZSAoKGNsYXp6ID0gY2xhc3Nlc1tqKytdKSkgeworICAgICAgICAgICAgcG9z ID0gY3VyQ2xhc3Nlcy5pbmRleE9mKGNsYXp6KTsKKyAgICAgICAgICAgIGlm ICh+cG9zKSB7CisgICAgICAgICAgICAgICAgY3VyQ2xhc3Nlcy5zcGxpY2Uo cG9zLCAxKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgY3VyQ2xhc3Nlcy5wdXNoKGNsYXp6KTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorCisgICAgICAgIGZpbmFsVmFsdWUgPSBjdXJDbGFzc2VzLmpv aW4oIiAiKTsKKyAgICAgICAgaWYgKGNsYXNzTmFtZSAhPSBmaW5hbFZhbHVl KSB7CisgICAgICAgICAgICBlbGVtLmNsYXNzTmFtZS5iYXNlVmFsID0gZmlu YWxWYWx1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAg ICB9OworfSk7CisKKy8vIENvcHlyaWdodCAoYykgMjAxMyBBZG9iZSBTeXN0 ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisv LyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24g Mi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlz IGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4K Ky8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAor Ly8KKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNF LTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxh dyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3Ry aWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFu ICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09O RElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGll ZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1 YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25z IHVuZGVyIHRoZSBMaWNlbnNlLgorU25hcC5wbHVnaW4oZnVuY3Rpb24gKFNu YXAsIEVsZW1lbnQsIFBhcGVyLCBnbG9iLCBGcmFnbWVudCkgeworICAgIHZh ciBvcGVyYXRvcnMgPSB7CisgICAgICAgICAgICAiKyI6IGZ1bmN0aW9uICh4 LCB5KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB4ICsgeTsKKyAg ICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgIi0iOiBmdW5jdGlvbiAo eCwgeSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4geCAtIHk7Cisg ICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICIvIjogZnVuY3Rpb24g KHgsIHkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHggLyB5Owor ICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAiKiI6IGZ1bmN0aW9u ICh4LCB5KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB4ICogeTsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIFN0ciA9 IFN0cmluZywKKyAgICAgICAgcmVVbml0ID0gL1thLXpdKyQvaSwKKyAgICAg ICAgcmVBZGRvbiA9IC9eXHMqKFsrXC1cLypdKVxzKj1ccyooW1xkLmVFK1wt XSspXHMqKFteXGRcc10rKT9ccyokLzsKKyAgICBmdW5jdGlvbiBnZXROdW1i ZXIodmFsKSB7CisgICAgICAgIHJldHVybiB2YWw7CisgICAgfQorICAgIGZ1 bmN0aW9uIGdldFVuaXQodW5pdCkgeworICAgICAgICByZXR1cm4gZnVuY3Rp b24gKHZhbCkgeworICAgICAgICAgICAgcmV0dXJuICt2YWwudG9GaXhlZCgz KSArIHVuaXQ7CisgICAgICAgIH07CisgICAgfQorICAgIGV2ZS5vbigic25h cC51dGlsLmF0dHIiLCBmdW5jdGlvbiAodmFsKSB7CisgICAgICAgIHZhciBw bHVzID0gU3RyKHZhbCkubWF0Y2gocmVBZGRvbik7CisgICAgICAgIGlmIChw bHVzKSB7CisgICAgICAgICAgICB2YXIgZXZudCA9IGV2ZS5udCgpLAorICAg ICAgICAgICAgICAgIG5hbWUgPSBldm50LnN1YnN0cmluZyhldm50Lmxhc3RJ bmRleE9mKCIuIikgKyAxKSwKKyAgICAgICAgICAgICAgICBhID0gdGhpcy5h dHRyKG5hbWUpLAorICAgICAgICAgICAgICAgIGF0ciA9IHt9OworICAgICAg ICAgICAgZXZlLnN0b3AoKTsKKyAgICAgICAgICAgIHZhciB1bml0ID0gcGx1 c1szXSB8fCAiIiwKKyAgICAgICAgICAgICAgICBhVW5pdCA9IGEubWF0Y2go cmVVbml0KSwKKyAgICAgICAgICAgICAgICBvcCA9IG9wZXJhdG9yc1twbHVz WzFdXTsKKyAgICAgICAgICAgIGlmIChhVW5pdCAmJiBhVW5pdCA9PSB1bml0 KSB7CisgICAgICAgICAgICAgICAgdmFsID0gb3AocGFyc2VGbG9hdChhKSwg K3BsdXNbMl0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICBhID0gdGhpcy5hc1BYKG5hbWUpOworICAgICAgICAgICAgICAgIHZh bCA9IG9wKHRoaXMuYXNQWChuYW1lKSwgdGhpcy5hc1BYKG5hbWUsIHBsdXNb Ml0gKyB1bml0KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo aXNOYU4oYSkgfHwgaXNOYU4odmFsKSkgeworICAgICAgICAgICAgICAgIHJl dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF0cltuYW1lXSA9 IHZhbDsKKyAgICAgICAgICAgIHRoaXMuYXR0cihhdHIpOworICAgICAgICB9 CisgICAgfSkoLTEwKTsKKyAgICBldmUub24oInNuYXAudXRpbC5lcXVhbCIs IGZ1bmN0aW9uIChuYW1lLCBiKSB7CisgICAgICAgIHZhciBBLCBCLCBhID0g U3RyKHRoaXMuYXR0cihuYW1lKSB8fCAiIiksCisgICAgICAgICAgICBlbCA9 IHRoaXMsCisgICAgICAgICAgICBicGx1cyA9IFN0cihiKS5tYXRjaChyZUFk ZG9uKTsKKyAgICAgICAgaWYgKGJwbHVzKSB7CisgICAgICAgICAgICBldmUu c3RvcCgpOworICAgICAgICAgICAgdmFyIHVuaXQgPSBicGx1c1szXSB8fCAi IiwKKyAgICAgICAgICAgICAgICBhVW5pdCA9IGEubWF0Y2gocmVVbml0KSwK KyAgICAgICAgICAgICAgICBvcCA9IG9wZXJhdG9yc1ticGx1c1sxXV07Cisg ICAgICAgICAgICBpZiAoYVVuaXQgJiYgYVVuaXQgPT0gdW5pdCkgeworICAg ICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIGZy b206IHBhcnNlRmxvYXQoYSksCisgICAgICAgICAgICAgICAgICAgIHRvOiBv cChwYXJzZUZsb2F0KGEpLCArYnBsdXNbMl0pLAorICAgICAgICAgICAgICAg ICAgICBmOiBnZXRVbml0KGFVbml0KQorICAgICAgICAgICAgICAgIH07Cisg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGEgPSB0aGlz LmFzUFgobmFtZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAg ICAgICAgICAgICAgICAgZnJvbTogYSwKKyAgICAgICAgICAgICAgICAgICAg dG86IG9wKGEsIHRoaXMuYXNQWChuYW1lLCBicGx1c1syXSArIHVuaXQpKSwK KyAgICAgICAgICAgICAgICAgICAgZjogZ2V0TnVtYmVyCisgICAgICAgICAg ICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pKC0x MCk7Cit9KTsKKy8vIENvcHlyaWdodCAoYykgMjAxMyBBZG9iZSBTeXN0ZW1z IEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBM aWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4w ICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZp bGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8v IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8K Ky8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIu MAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBv ciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1 dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJB UyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElU SU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4K Ky8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdl IGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVu ZGVyIHRoZSBMaWNlbnNlLgorU25hcC5wbHVnaW4oZnVuY3Rpb24gKFNuYXAs IEVsZW1lbnQsIFBhcGVyLCBnbG9iLCBGcmFnbWVudCkgeworICAgIHZhciBw cm90byA9IFBhcGVyLnByb3RvdHlwZSwKKyAgICAgICAgaXMgPSBTbmFwLmlz OworICAgIC8qXAorICAgICAqIFBhcGVyLnJlY3QKKyAgICAgWyBtZXRob2Qg XQorICAgICAqCisgICAgICogRHJhd3MgYSByZWN0YW5nbGUKKyAgICAgKioK KyAgICAgLSB4IChudW1iZXIpIHggY29vcmRpbmF0ZSBvZiB0aGUgdG9wIGxl ZnQgY29ybmVyCisgICAgIC0geSAobnVtYmVyKSB5IGNvb3JkaW5hdGUgb2Yg dGhlIHRvcCBsZWZ0IGNvcm5lcgorICAgICAtIHdpZHRoIChudW1iZXIpIHdp ZHRoCisgICAgIC0gaGVpZ2h0IChudW1iZXIpIGhlaWdodAorICAgICAtIHJ4 IChudW1iZXIpICNvcHRpb25hbCBob3Jpem9udGFsIHJhZGl1cyBmb3Igcm91 bmRlZCBjb3JuZXJzLCBkZWZhdWx0IGlzIDAKKyAgICAgLSByeSAobnVtYmVy KSAjb3B0aW9uYWwgdmVydGljYWwgcmFkaXVzIGZvciByb3VuZGVkIGNvcm5l cnMsIGRlZmF1bHQgaXMgcnggb3IgMAorICAgICA9IChvYmplY3QpIHRoZSBg cmVjdGAgZWxlbWVudAorICAgICAqKgorICAgICA+IFVzYWdlCisgICAgIHwg Ly8gcmVndWxhciByZWN0YW5nbGUKKyAgICAgfCB2YXIgYyA9IHBhcGVyLnJl Y3QoMTAsIDEwLCA1MCwgNTApOworICAgICB8IC8vIHJlY3RhbmdsZSB3aXRo IHJvdW5kZWQgY29ybmVycworICAgICB8IHZhciBjID0gcGFwZXIucmVjdCg0 MCwgNDAsIDUwLCA1MCwgMTApOworICAgIFwqLworICAgIHByb3RvLnJlY3Qg PSBmdW5jdGlvbiAoeCwgeSwgdywgaCwgcngsIHJ5KSB7CisgICAgICAgIHZh ciBhdHRyOworICAgICAgICBpZiAocnkgPT0gbnVsbCkgeworICAgICAgICAg ICAgcnkgPSByeDsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXMoeCwgIm9i amVjdCIpICYmIHggPT0gIltvYmplY3QgT2JqZWN0XSIpIHsKKyAgICAgICAg ICAgIGF0dHIgPSB4OworICAgICAgICB9IGVsc2UgaWYgKHggIT0gbnVsbCkg eworICAgICAgICAgICAgYXR0ciA9IHsKKyAgICAgICAgICAgICAgICB4OiB4 LAorICAgICAgICAgICAgICAgIHk6IHksCisgICAgICAgICAgICAgICAgd2lk dGg6IHcsCisgICAgICAgICAgICAgICAgaGVpZ2h0OiBoCisgICAgICAgICAg ICB9OworICAgICAgICAgICAgaWYgKHJ4ICE9IG51bGwpIHsKKyAgICAgICAg ICAgICAgICBhdHRyLnJ4ID0gcng7CisgICAgICAgICAgICAgICAgYXR0ci5y eSA9IHJ5OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJl dHVybiB0aGlzLmVsKCJyZWN0IiwgYXR0cik7CisgICAgfTsKKyAgICAvKlwK KyAgICAgKiBQYXBlci5jaXJjbGUKKyAgICAgWyBtZXRob2QgXQorICAgICAq KgorICAgICAqIERyYXdzIGEgY2lyY2xlCisgICAgICoqCisgICAgIC0geCAo bnVtYmVyKSB4IGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRyZQorICAgICAtIHkg KG51bWJlcikgeSBjb29yZGluYXRlIG9mIHRoZSBjZW50cmUKKyAgICAgLSBy IChudW1iZXIpIHJhZGl1cworICAgICA9IChvYmplY3QpIHRoZSBgY2lyY2xl YCBlbGVtZW50CisgICAgICoqCisgICAgID4gVXNhZ2UKKyAgICAgfCB2YXIg YyA9IHBhcGVyLmNpcmNsZSg1MCwgNTAsIDQwKTsKKyAgICBcKi8KKyAgICBw cm90by5jaXJjbGUgPSBmdW5jdGlvbiAoY3gsIGN5LCByKSB7CisgICAgICAg IHZhciBhdHRyOworICAgICAgICBpZiAoaXMoY3gsICJvYmplY3QiKSAmJiBj eCA9PSAiW29iamVjdCBPYmplY3RdIikgeworICAgICAgICAgICAgYXR0ciA9 IGN4OworICAgICAgICB9IGVsc2UgaWYgKGN4ICE9IG51bGwpIHsKKyAgICAg ICAgICAgIGF0dHIgPSB7CisgICAgICAgICAgICAgICAgY3g6IGN4LAorICAg ICAgICAgICAgICAgIGN5OiBjeSwKKyAgICAgICAgICAgICAgICByOiByCisg ICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlz LmVsKCJjaXJjbGUiLCBhdHRyKTsKKyAgICB9OworCisgICAgdmFyIHByZWxv YWQgPSAoZnVuY3Rpb24gKCkgeworICAgICAgICBmdW5jdGlvbiBvbmVycm9y KCkgeworICAgICAgICAgICAgdGhpcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxk KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmdW5jdGlvbiAo c3JjLCBmKSB7CisgICAgICAgICAgICB2YXIgaW1nID0gZ2xvYi5kb2MuY3Jl YXRlRWxlbWVudCgiaW1nIiksCisgICAgICAgICAgICAgICAgYm9keSA9IGds b2IuZG9jLmJvZHk7CisgICAgICAgICAgICBpbWcuc3R5bGUuY3NzVGV4dCA9 ICJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi05OTk5ZW07dG9wOi05OTk5ZW0i OworICAgICAgICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKKyAg ICAgICAgICAgICAgICBmLmNhbGwoaW1nKTsKKyAgICAgICAgICAgICAgICBp bWcub25sb2FkID0gaW1nLm9uZXJyb3IgPSBudWxsOworICAgICAgICAgICAg ICAgIGJvZHkucmVtb3ZlQ2hpbGQoaW1nKTsKKyAgICAgICAgICAgIH07Cisg ICAgICAgICAgICBpbWcub25lcnJvciA9IG9uZXJyb3I7CisgICAgICAgICAg ICBib2R5LmFwcGVuZENoaWxkKGltZyk7CisgICAgICAgICAgICBpbWcuc3Jj ID0gc3JjOworICAgICAgICB9OworICAgIH0oKSk7CisKKyAgICAvKlwKKyAg ICAgKiBQYXBlci5pbWFnZQorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisg ICAgICogUGxhY2VzIGFuIGltYWdlIG9uIHRoZSBzdXJmYWNlCisgICAgICoq CisgICAgIC0gc3JjIChzdHJpbmcpIFVSSSBvZiB0aGUgc291cmNlIGltYWdl CisgICAgIC0geCAobnVtYmVyKSB4IG9mZnNldCBwb3NpdGlvbgorICAgICAt IHkgKG51bWJlcikgeSBvZmZzZXQgcG9zaXRpb24KKyAgICAgLSB3aWR0aCAo bnVtYmVyKSB3aWR0aCBvZiB0aGUgaW1hZ2UKKyAgICAgLSBoZWlnaHQgKG51 bWJlcikgaGVpZ2h0IG9mIHRoZSBpbWFnZQorICAgICA9IChvYmplY3QpIHRo ZSBgaW1hZ2VgIGVsZW1lbnQKKyAgICAgKiBvcgorICAgICA9IChvYmplY3Qp IFNuYXAgZWxlbWVudCBvYmplY3Qgd2l0aCB0eXBlIGBpbWFnZWAKKyAgICAg KioKKyAgICAgPiBVc2FnZQorICAgICB8IHZhciBjID0gcGFwZXIuaW1hZ2Uo ImFwcGxlLnBuZyIsIDEwLCAxMCwgODAsIDgwKTsKKyAgICBcKi8KKyAgICBw cm90by5pbWFnZSA9IGZ1bmN0aW9uIChzcmMsIHgsIHksIHdpZHRoLCBoZWln aHQpIHsKKyAgICAgICAgdmFyIGVsID0gdGhpcy5lbCgiaW1hZ2UiKTsKKyAg ICAgICAgaWYgKGlzKHNyYywgIm9iamVjdCIpICYmICJzcmMiIGluIHNyYykg eworICAgICAgICAgICAgZWwuYXR0cihzcmMpOworICAgICAgICB9IGVsc2Ug aWYgKHNyYyAhPSBudWxsKSB7CisgICAgICAgICAgICB2YXIgc2V0ID0gewor ICAgICAgICAgICAgICAgICJ4bGluazpocmVmIjogc3JjLAorICAgICAgICAg ICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW86ICJub25lIgorICAgICAgICAg ICAgfTsKKyAgICAgICAgICAgIGlmICh4ICE9IG51bGwgJiYgeSAhPSBudWxs KSB7CisgICAgICAgICAgICAgICAgc2V0LnggPSB4OworICAgICAgICAgICAg ICAgIHNldC55ID0geTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm ICh3aWR0aCAhPSBudWxsICYmIGhlaWdodCAhPSBudWxsKSB7CisgICAgICAg ICAgICAgICAgc2V0LndpZHRoID0gd2lkdGg7CisgICAgICAgICAgICAgICAg c2V0LmhlaWdodCA9IGhlaWdodDsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgcHJlbG9hZChzcmMsIGZ1bmN0aW9uICgpIHsKKyAg ICAgICAgICAgICAgICAgICAgU25hcC5fLiQoZWwubm9kZSwgeworICAgICAg ICAgICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMub2Zmc2V0V2lkdGgsCisg ICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHRoaXMub2Zmc2V0SGVp Z2h0CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg IH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU25hcC5fLiQoZWwu bm9kZSwgc2V0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZWw7Cisg ICAgfTsKKyAgICAvKlwKKyAgICAgKiBQYXBlci5lbGxpcHNlCisgICAgIFsg bWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBEcmF3cyBhbiBlbGxpcHNlCisg ICAgICoqCisgICAgIC0geCAobnVtYmVyKSB4IGNvb3JkaW5hdGUgb2YgdGhl IGNlbnRyZQorICAgICAtIHkgKG51bWJlcikgeSBjb29yZGluYXRlIG9mIHRo ZSBjZW50cmUKKyAgICAgLSByeCAobnVtYmVyKSBob3Jpem9udGFsIHJhZGl1 cworICAgICAtIHJ5IChudW1iZXIpIHZlcnRpY2FsIHJhZGl1cworICAgICA9 IChvYmplY3QpIHRoZSBgZWxsaXBzZWAgZWxlbWVudAorICAgICAqKgorICAg ICA+IFVzYWdlCisgICAgIHwgdmFyIGMgPSBwYXBlci5lbGxpcHNlKDUwLCA1 MCwgNDAsIDIwKTsKKyAgICBcKi8KKyAgICBwcm90by5lbGxpcHNlID0gZnVu Y3Rpb24gKGN4LCBjeSwgcngsIHJ5KSB7CisgICAgICAgIHZhciBhdHRyOwor ICAgICAgICBpZiAoaXMoY3gsICJvYmplY3QiKSAmJiBjeCA9PSAiW29iamVj dCBPYmplY3RdIikgeworICAgICAgICAgICAgYXR0ciA9IGN4OworICAgICAg ICB9IGVsc2UgaWYgKGN4ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGF0dHIg PXsKKyAgICAgICAgICAgICAgICBjeDogY3gsCisgICAgICAgICAgICAgICAg Y3k6IGN5LAorICAgICAgICAgICAgICAgIHJ4OiByeCwKKyAgICAgICAgICAg ICAgICByeTogcnkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAg ICAgcmV0dXJuIHRoaXMuZWwoImVsbGlwc2UiLCBhdHRyKTsKKyAgICB9Owor ICAgIC8vIFNJRVJSQSBQYXBlci5wYXRoKCk6IFVuY2xlYXIgZnJvbSB0aGUg bGluayB3aGF0IGEgQ2F0bXVsbC1Sb20gY3VydmV0byBpcywgYW5kIHdoeSBp dCB3b3VsZCBtYWtlIGxpZmUgYW55IGVhc2llci4KKyAgICAvKlwKKyAgICAg KiBQYXBlci5wYXRoCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAg KiBDcmVhdGVzIGEgYDxwYXRoPmAgZWxlbWVudCB1c2luZyB0aGUgZ2l2ZW4g c3RyaW5nIGFzIHRoZSBwYXRoJ3MgZGVmaW5pdGlvbgorICAgICAtIHBhdGhT dHJpbmcgKHN0cmluZykgI29wdGlvbmFsIHBhdGggc3RyaW5nIGluIFNWRyBm b3JtYXQKKyAgICAgKiBQYXRoIHN0cmluZyBjb25zaXN0cyBvZiBvbmUtbGV0 dGVyIGNvbW1hbmRzLCBmb2xsb3dlZCBieSBjb21tYSBzZXByYXJhdGVkIGFy Z3VtZW50cyBpbiBudW1lcmljYWwgZm9ybS4gRXhhbXBsZToKKyAgICAgfCAi TTEwLDIwTDMwLDQwIgorICAgICAqIFRoaXMgZXhhbXBsZSBmZWF0dXJlcyB0 d28gY29tbWFuZHM6IGBNYCwgd2l0aCBhcmd1bWVudHMgYCgxMCwgMjApYCBh bmQgYExgIHdpdGggYXJndW1lbnRzIGAoMzAsIDQwKWAuIFVwcGVyY2FzZSBs ZXR0ZXIgY29tbWFuZHMgZXhwcmVzcyBjb29yZGluYXRlcyBpbiBhYnNvbHV0 ZSB0ZXJtcywgd2hpbGUgbG93ZXJjYXNlIGNvbW1hbmRzIGV4cHJlc3MgdGhl bSBpbiByZWxhdGl2ZSB0ZXJtcyBmcm9tIHRoZSBtb3N0IHJlY2VudGx5IGRl Y2xhcmVkIGNvb3JkaW5hdGVzLgorICAgICAqCisgICAgICMgPHA+SGVyZSBp cyBzaG9ydCBsaXN0IG9mIGNvbW1hbmRzIGF2YWlsYWJsZSwgZm9yIG1vcmUg ZGV0YWlscyBzZWUgPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvU1ZH L3BhdGhzLmh0bWwjUGF0aERhdGEiIHRpdGxlPSJEZXRhaWxzIG9mIGEgcGF0 aCdzIGRhdGEgYXR0cmlidXRlJ3MgZm9ybWF0IGFyZSBkZXNjcmliZWQgaW4g dGhlIFNWRyBzcGVjaWZpY2F0aW9uLiI+U1ZHIHBhdGggc3RyaW5nIGZvcm1h dDwvYT4gb3IgPGEgaHJlZj0iaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5v cmcvZW4vU1ZHL1R1dG9yaWFsL1BhdGhzIj5hcnRpY2xlIGFib3V0IHBhdGgg c3RyaW5ncyBhdCBNRE48L2E+LjwvcD4KKyAgICAgIyA8dGFibGU+PHRoZWFk Pjx0cj48dGg+Q29tbWFuZDwvdGg+PHRoPk5hbWU8L3RoPjx0aD5QYXJhbWV0 ZXJzPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5PgorICAgICAjIDx0cj48dGQ+ TTwvdGQ+PHRkPm1vdmV0bzwvdGQ+PHRkPih4IHkpKzwvdGQ+PC90cj4KKyAg ICAgIyA8dHI+PHRkPlo8L3RkPjx0ZD5jbG9zZXBhdGg8L3RkPjx0ZD4obm9u ZSk8L3RkPjwvdHI+CisgICAgICMgPHRyPjx0ZD5MPC90ZD48dGQ+bGluZXRv PC90ZD48dGQ+KHggeSkrPC90ZD48L3RyPgorICAgICAjIDx0cj48dGQ+SDwv dGQ+PHRkPmhvcml6b250YWwgbGluZXRvPC90ZD48dGQ+eCs8L3RkPjwvdHI+ CisgICAgICMgPHRyPjx0ZD5WPC90ZD48dGQ+dmVydGljYWwgbGluZXRvPC90 ZD48dGQ+eSs8L3RkPjwvdHI+CisgICAgICMgPHRyPjx0ZD5DPC90ZD48dGQ+ Y3VydmV0bzwvdGQ+PHRkPih4MSB5MSB4MiB5MiB4IHkpKzwvdGQ+PC90cj4K KyAgICAgIyA8dHI+PHRkPlM8L3RkPjx0ZD5zbW9vdGggY3VydmV0bzwvdGQ+ PHRkPih4MiB5MiB4IHkpKzwvdGQ+PC90cj4KKyAgICAgIyA8dHI+PHRkPlE8 L3RkPjx0ZD5xdWFkcmF0aWMgQsOpemllciBjdXJ2ZXRvPC90ZD48dGQ+KHgx IHkxIHggeSkrPC90ZD48L3RyPgorICAgICAjIDx0cj48dGQ+VDwvdGQ+PHRk PnNtb290aCBxdWFkcmF0aWMgQsOpemllciBjdXJ2ZXRvPC90ZD48dGQ+KHgg eSkrPC90ZD48L3RyPgorICAgICAjIDx0cj48dGQ+QTwvdGQ+PHRkPmVsbGlw dGljYWwgYXJjPC90ZD48dGQ+KHJ4IHJ5IHgtYXhpcy1yb3RhdGlvbiBsYXJn ZS1hcmMtZmxhZyBzd2VlcC1mbGFnIHggeSkrPC90ZD48L3RyPgorICAgICAj IDx0cj48dGQ+UjwvdGQ+PHRkPjxhIGhyZWY9Imh0dHA6Ly9lbi53aWtpcGVk aWEub3JnL3dpa2kvQ2F0bXVsbOKAk1JvbV9zcGxpbmUjQ2F0bXVsbC5FMi44 MC45M1JvbV9zcGxpbmUiPkNhdG11bGwtUm9tIGN1cnZldG88L2E+KjwvdGQ+ PHRkPngxIHkxICh4IHkpKzwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+Cisg ICAgICogKiBfQ2F0bXVsbC1Sb20gY3VydmV0b18gaXMgYSBub3Qgc3RhbmRh cmQgU1ZHIGNvbW1hbmQgYW5kIGFkZGVkIHRvIG1ha2UgbGlmZSBlYXNpZXIu CisgICAgICogTm90ZTogdGhlcmUgaXMgYSBzcGVjaWFsIGNhc2Ugd2hlbiBh IHBhdGggY29uc2lzdHMgb2Ygb25seSB0aHJlZSBjb21tYW5kczogYE0xMCwx MFLigKZ6YC4gSW4gdGhpcyBjYXNlIHRoZSBwYXRoIGNvbm5lY3RzIGJhY2sg dG8gaXRzIHN0YXJ0aW5nIHBvaW50LgorICAgICA+IFVzYWdlCisgICAgIHwg dmFyIGMgPSBwYXBlci5wYXRoKCJNMTAgMTBMOTAgOTAiKTsKKyAgICAgfCAv LyBkcmF3IGEgZGlhZ29uYWwgbGluZToKKyAgICAgfCAvLyBtb3ZlIHRvIDEw LDEwLCBsaW5lIHRvIDkwLDkwCisgICAgXCovCisgICAgcHJvdG8ucGF0aCA9 IGZ1bmN0aW9uIChkKSB7CisgICAgICAgIHZhciBhdHRyOworICAgICAgICBp ZiAoaXMoZCwgIm9iamVjdCIpICYmICFpcyhkLCAiYXJyYXkiKSkgeworICAg ICAgICAgICAgYXR0ciA9IGQ7CisgICAgICAgIH0gZWxzZSBpZiAoZCkgewor ICAgICAgICAgICAgYXR0ciA9IHtkOiBkfTsKKyAgICAgICAgfQorICAgICAg ICByZXR1cm4gdGhpcy5lbCgicGF0aCIsIGF0dHIpOworICAgIH07CisgICAg LypcCisgICAgICogUGFwZXIuZworICAgICBbIG1ldGhvZCBdCisgICAgICoq CisgICAgICogQ3JlYXRlcyBhIGdyb3VwIGVsZW1lbnQKKyAgICAgKioKKyAg ICAgLSB2YXJhcmdzICjigKYpICNvcHRpb25hbCBlbGVtZW50cyB0byBuZXN0 IHdpdGhpbiB0aGUgZ3JvdXAKKyAgICAgPSAob2JqZWN0KSB0aGUgYGdgIGVs ZW1lbnQKKyAgICAgKioKKyAgICAgPiBVc2FnZQorICAgICB8IHZhciBjMSA9 IHBhcGVyLmNpcmNsZSgpLAorICAgICB8ICAgICBjMiA9IHBhcGVyLnJlY3Qo KSwKKyAgICAgfCAgICAgZyA9IHBhcGVyLmcoYzIsIGMxKTsgLy8gbm90ZSB0 aGF0IHRoZSBvcmRlciBvZiBlbGVtZW50cyBpcyBkaWZmZXJlbnQKKyAgICAg KiBvcgorICAgICB8IHZhciBjMSA9IHBhcGVyLmNpcmNsZSgpLAorICAgICB8 ICAgICBjMiA9IHBhcGVyLnJlY3QoKSwKKyAgICAgfCAgICAgZyA9IHBhcGVy LmcoKTsKKyAgICAgfCBnLmFkZChjMiwgYzEpOworICAgIFwqLworICAgIC8q XAorICAgICAqIFBhcGVyLmdyb3VwCisgICAgIFsgbWV0aG9kIF0KKyAgICAg KioKKyAgICAgKiBTZWUgQFBhcGVyLmcKKyAgICBcKi8KKyAgICBwcm90by5n cm91cCA9IHByb3RvLmcgPSBmdW5jdGlvbiAoZmlyc3QpIHsKKyAgICAgICAg dmFyIGF0dHIsCisgICAgICAgICAgICBlbCA9IHRoaXMuZWwoImciKTsKKyAg ICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSAmJiBmaXJzdCAmJiAh Zmlyc3QudHlwZSkgeworICAgICAgICAgICAgZWwuYXR0cihmaXJzdCk7Cisg ICAgICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCkgeworICAgICAg ICAgICAgZWwuYWRkKEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3Vt ZW50cywgMCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBlbDsKKyAg ICB9OworICAgIC8qXAorICAgICAqIFBhcGVyLnN2ZworICAgICBbIG1ldGhv ZCBdCisgICAgICoqCisgICAgICogQ3JlYXRlcyBhIG5lc3RlZCBTVkcgZWxl bWVudC4KKyAgICAgLSB4IChudW1iZXIpIEBvcHRpb25hbCBYIG9mIHRoZSBl bGVtZW50CisgICAgIC0geSAobnVtYmVyKSBAb3B0aW9uYWwgWSBvZiB0aGUg ZWxlbWVudAorICAgICAtIHdpZHRoIChudW1iZXIpIEBvcHRpb25hbCB3aWR0 aCBvZiB0aGUgZWxlbWVudAorICAgICAtIGhlaWdodCAobnVtYmVyKSBAb3B0 aW9uYWwgaGVpZ2h0IG9mIHRoZSBlbGVtZW50CisgICAgIC0gdmJ4IChudW1i ZXIpIEBvcHRpb25hbCB2aWV3Ym94IFgKKyAgICAgLSB2YnkgKG51bWJlcikg QG9wdGlvbmFsIHZpZXdib3ggWQorICAgICAtIHZidyAobnVtYmVyKSBAb3B0 aW9uYWwgdmlld2JveCB3aWR0aAorICAgICAtIHZiaCAobnVtYmVyKSBAb3B0 aW9uYWwgdmlld2JveCBoZWlnaHQKKyAgICAgKioKKyAgICAgPSAob2JqZWN0 KSB0aGUgYHN2Z2AgZWxlbWVudAorICAgICAqKgorICAgIFwqLworICAgIHBy b3RvLnN2ZyA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCB2Yngs IHZieSwgdmJ3LCB2YmgpIHsKKyAgICAgICAgdmFyIGF0dHJzID0ge307Cisg ICAgICAgIGlmIChpcyh4LCAib2JqZWN0IikgJiYgeSA9PSBudWxsKSB7Cisg ICAgICAgICAgICBhdHRycyA9IHg7CisgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICBpZiAoeCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgYXR0 cnMueCA9IHg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoeSAh PSBudWxsKSB7CisgICAgICAgICAgICAgICAgYXR0cnMueSA9IHk7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBpZiAod2lkdGggIT0gbnVsbCkgewor ICAgICAgICAgICAgICAgIGF0dHJzLndpZHRoID0gd2lkdGg7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBpZiAoaGVpZ2h0ICE9IG51bGwpIHsKKyAg ICAgICAgICAgICAgICBhdHRycy5oZWlnaHQgPSBoZWlnaHQ7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBpZiAodmJ4ICE9IG51bGwgJiYgdmJ5ICE9 IG51bGwgJiYgdmJ3ICE9IG51bGwgJiYgdmJoICE9IG51bGwpIHsKKyAgICAg ICAgICAgICAgICBhdHRycy52aWV3Qm94ID0gW3ZieCwgdmJ5LCB2YncsIHZi aF07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu IHRoaXMuZWwoInN2ZyIsIGF0dHJzKTsKKyAgICB9OworICAgIC8qXAorICAg ICAqIFBhcGVyLm1hc2sKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAg ICAqIEVxdWl2YWxlbnQgaW4gYmVoYXZpb3VyIHRvIEBQYXBlci5nLCBleGNl cHQgaXTigJlzIGEgbWFzay4KKyAgICAgKioKKyAgICAgPSAob2JqZWN0KSB0 aGUgYG1hc2tgIGVsZW1lbnQKKyAgICAgKioKKyAgICBcKi8KKyAgICBwcm90 by5tYXNrID0gZnVuY3Rpb24gKGZpcnN0KSB7CisgICAgICAgIHZhciBhdHRy LAorICAgICAgICAgICAgZWwgPSB0aGlzLmVsKCJtYXNrIik7CisgICAgICAg IGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEgJiYgZmlyc3QgJiYgIWZpcnN0 LnR5cGUpIHsKKyAgICAgICAgICAgIGVsLmF0dHIoZmlyc3QpOworICAgICAg ICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHsKKyAgICAgICAgICAg IGVsLmFkZChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMs IDApKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZWw7CisgICAgfTsK KyAgICAvKlwKKyAgICAgKiBQYXBlci5wdHJuCisgICAgIFsgbWV0aG9kIF0K KyAgICAgKioKKyAgICAgKiBFcXVpdmFsZW50IGluIGJlaGF2aW91ciB0byBA UGFwZXIuZywgZXhjZXB0IGl04oCZcyBhIHBhdHRlcm4uCisgICAgIC0geCAo bnVtYmVyKSBAb3B0aW9uYWwgWCBvZiB0aGUgZWxlbWVudAorICAgICAtIHkg KG51bWJlcikgQG9wdGlvbmFsIFkgb2YgdGhlIGVsZW1lbnQKKyAgICAgLSB3 aWR0aCAobnVtYmVyKSBAb3B0aW9uYWwgd2lkdGggb2YgdGhlIGVsZW1lbnQK KyAgICAgLSBoZWlnaHQgKG51bWJlcikgQG9wdGlvbmFsIGhlaWdodCBvZiB0 aGUgZWxlbWVudAorICAgICAtIHZieCAobnVtYmVyKSBAb3B0aW9uYWwgdmll d2JveCBYCisgICAgIC0gdmJ5IChudW1iZXIpIEBvcHRpb25hbCB2aWV3Ym94 IFkKKyAgICAgLSB2YncgKG51bWJlcikgQG9wdGlvbmFsIHZpZXdib3ggd2lk dGgKKyAgICAgLSB2YmggKG51bWJlcikgQG9wdGlvbmFsIHZpZXdib3ggaGVp Z2h0CisgICAgICoqCisgICAgID0gKG9iamVjdCkgdGhlIGBwYXR0ZXJuYCBl bGVtZW50CisgICAgICoqCisgICAgXCovCisgICAgcHJvdG8ucHRybiA9IGZ1 bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCB2eCwgdnksIHZ3LCB2aCkg eworICAgICAgICBpZiAoaXMoeCwgIm9iamVjdCIpKSB7CisgICAgICAgICAg ICB2YXIgYXR0ciA9IHg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICBhdHRyID0ge3BhdHRlcm5Vbml0czogInVzZXJTcGFjZU9uVXNlIn07Cisg ICAgICAgICAgICBpZiAoeCkgeworICAgICAgICAgICAgICAgIGF0dHIueCA9 IHg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoeSkgeworICAg ICAgICAgICAgICAgIGF0dHIueSA9IHk7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBpZiAod2lkdGggIT0gbnVsbCkgeworICAgICAgICAgICAgICAg IGF0dHIud2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGlmIChoZWlnaHQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGF0 dHIuaGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICAgICAgfQorICAgICAgICAg ICAgaWYgKHZ4ICE9IG51bGwgJiYgdnkgIT0gbnVsbCAmJiB2dyAhPSBudWxs ICYmIHZoICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBhdHRyLnZpZXdC b3ggPSBbdngsIHZ5LCB2dywgdmhdOworICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICBhdHRyLnZpZXdCb3ggPSBbeCB8fCAwLCB5IHx8 IDAsIHdpZHRoIHx8IDAsIGhlaWdodCB8fCAwXTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5lbCgicGF0dGVybiIs IGF0dHIpOworICAgIH07CisgICAgLypcCisgICAgICogUGFwZXIudXNlCisg ICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBDcmVhdGVzIGEgPHVz ZT4gZWxlbWVudC4KKyAgICAgLSBpZCAoc3RyaW5nKSBAb3B0aW9uYWwgaWQg b2YgZWxlbWVudCB0byBsaW5rCisgICAgICogb3IKKyAgICAgLSBpZCAoRWxl bWVudCkgQG9wdGlvbmFsIGVsZW1lbnQgdG8gbGluaworICAgICAqKgorICAg ICA9IChvYmplY3QpIHRoZSBgdXNlYCBlbGVtZW50CisgICAgICoqCisgICAg XCovCisgICAgcHJvdG8udXNlID0gZnVuY3Rpb24gKGlkKSB7CisgICAgICAg IGlmIChpZCAhPSBudWxsKSB7CisgICAgICAgICAgICBpZiAoaWQgaW5zdGFu Y2VvZiBFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKCFpZC5hdHRy KCJpZCIpKSB7CisgICAgICAgICAgICAgICAgICAgIGlkLmF0dHIoe2lkOiBT bmFwLl8uaWQoaWQpfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIGlkID0gaWQuYXR0cigiaWQiKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGlmIChTdHJpbmcoaWQpLmNoYXJBdCgpID09ICIjIikgewor ICAgICAgICAgICAgICAgIGlkID0gaWQuc3Vic3RyaW5nKDEpOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWwoInVzZSIsIHsi eGxpbms6aHJlZiI6ICIjIiArIGlkfSk7CisgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICByZXR1cm4gRWxlbWVudC5wcm90b3R5cGUudXNlLmNhbGwo dGhpcyk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qXAorICAgICAqIFBh cGVyLnN5bWJvbAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICog Q3JlYXRlcyBhIDxzeW1ib2w+IGVsZW1lbnQuCisgICAgIC0gdmJ4IChudW1i ZXIpIEBvcHRpb25hbCB2aWV3Ym94IFgKKyAgICAgLSB2YnkgKG51bWJlcikg QG9wdGlvbmFsIHZpZXdib3ggWQorICAgICAtIHZidyAobnVtYmVyKSBAb3B0 aW9uYWwgdmlld2JveCB3aWR0aAorICAgICAtIHZiaCAobnVtYmVyKSBAb3B0 aW9uYWwgdmlld2JveCBoZWlnaHQKKyAgICAgPSAob2JqZWN0KSB0aGUgYHN5 bWJvbGAgZWxlbWVudAorICAgICAqKgorICAgIFwqLworICAgIHByb3RvLnN5 bWJvbCA9IGZ1bmN0aW9uICh2eCwgdnksIHZ3LCB2aCkgeworICAgICAgICB2 YXIgYXR0ciA9IHt9OworICAgICAgICBpZiAodnggIT0gbnVsbCAmJiB2eSAh PSBudWxsICYmIHZ3ICE9IG51bGwgJiYgdmggIT0gbnVsbCkgeworICAgICAg ICAgICAgYXR0ci52aWV3Qm94ID0gW3Z4LCB2eSwgdncsIHZoXTsKKyAgICAg ICAgfQorCisgICAgICAgIHJldHVybiB0aGlzLmVsKCJzeW1ib2wiLCBhdHRy KTsKKyAgICB9OworICAgIC8qXAorICAgICAqIFBhcGVyLnRleHQKKyAgICAg WyBtZXRob2QgXQorICAgICAqKgorICAgICAqIERyYXdzIGEgdGV4dCBzdHJp bmcKKyAgICAgKioKKyAgICAgLSB4IChudW1iZXIpIHggY29vcmRpbmF0ZSBw b3NpdGlvbgorICAgICAtIHkgKG51bWJlcikgeSBjb29yZGluYXRlIHBvc2l0 aW9uCisgICAgIC0gdGV4dCAoc3RyaW5nfGFycmF5KSBUaGUgdGV4dCBzdHJp bmcgdG8gZHJhdyBvciBhcnJheSBvZiBzdHJpbmdzIHRvIG5lc3Qgd2l0aGlu IHNlcGFyYXRlIGA8dHNwYW4+YCBlbGVtZW50cworICAgICA9IChvYmplY3Qp IHRoZSBgdGV4dGAgZWxlbWVudAorICAgICAqKgorICAgICA+IFVzYWdlCisg ICAgIHwgdmFyIHQxID0gcGFwZXIudGV4dCg1MCwgNTAsICJTbmFwIik7Cisg ICAgIHwgdmFyIHQyID0gcGFwZXIudGV4dCg1MCwgNTAsIFsiUyIsIm4iLCJh IiwicCJdKTsKKyAgICAgfCAvLyBUZXh0IHBhdGggdXNhZ2UKKyAgICAgfCB0 MS5hdHRyKHt0ZXh0cGF0aDogIk0xMCwxMEwxMDAsMTAwIn0pOworICAgICB8 IC8vIG9yCisgICAgIHwgdmFyIHB0aCA9IHBhcGVyLnBhdGgoIk0xMCwxMEwx MDAsMTAwIik7CisgICAgIHwgdDEuYXR0cih7dGV4dHBhdGg6IHB0aH0pOwor ICAgIFwqLworICAgIHByb3RvLnRleHQgPSBmdW5jdGlvbiAoeCwgeSwgdGV4 dCkgeworICAgICAgICB2YXIgYXR0ciA9IHt9OworICAgICAgICBpZiAoaXMo eCwgIm9iamVjdCIpKSB7CisgICAgICAgICAgICBhdHRyID0geDsKKyAgICAg ICAgfSBlbHNlIGlmICh4ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGF0dHIg PSB7CisgICAgICAgICAgICAgICAgeDogeCwKKyAgICAgICAgICAgICAgICB5 OiB5LAorICAgICAgICAgICAgICAgIHRleHQ6IHRleHQgfHwgIiIKKyAgICAg ICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuZWwo InRleHQiLCBhdHRyKTsKKyAgICB9OworICAgIC8qXAorICAgICAqIFBhcGVy LmxpbmUKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIERyYXdz IGEgbGluZQorICAgICAqKgorICAgICAtIHgxIChudW1iZXIpIHggY29vcmRp bmF0ZSBwb3NpdGlvbiBvZiB0aGUgc3RhcnQKKyAgICAgLSB5MSAobnVtYmVy KSB5IGNvb3JkaW5hdGUgcG9zaXRpb24gb2YgdGhlIHN0YXJ0CisgICAgIC0g eDIgKG51bWJlcikgeCBjb29yZGluYXRlIHBvc2l0aW9uIG9mIHRoZSBlbmQK KyAgICAgLSB5MiAobnVtYmVyKSB5IGNvb3JkaW5hdGUgcG9zaXRpb24gb2Yg dGhlIGVuZAorICAgICA9IChvYmplY3QpIHRoZSBgbGluZWAgZWxlbWVudAor ICAgICAqKgorICAgICA+IFVzYWdlCisgICAgIHwgdmFyIHQxID0gcGFwZXIu bGluZSg1MCwgNTAsIDEwMCwgMTAwKTsKKyAgICBcKi8KKyAgICBwcm90by5s aW5lID0gZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyKSB7CisgICAgICAgIHZh ciBhdHRyID0ge307CisgICAgICAgIGlmIChpcyh4MSwgIm9iamVjdCIpKSB7 CisgICAgICAgICAgICBhdHRyID0geDE7CisgICAgICAgIH0gZWxzZSBpZiAo eDEgIT0gbnVsbCkgeworICAgICAgICAgICAgYXR0ciA9IHsKKyAgICAgICAg ICAgICAgICB4MTogeDEsCisgICAgICAgICAgICAgICAgeDI6IHgyLAorICAg ICAgICAgICAgICAgIHkxOiB5MSwKKyAgICAgICAgICAgICAgICB5MjogeTIK KyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRo aXMuZWwoImxpbmUiLCBhdHRyKTsKKyAgICB9OworICAgIC8qXAorICAgICAq IFBhcGVyLnBvbHlsaW5lCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAg ICAgKiBEcmF3cyBhIHBvbHlsaW5lCisgICAgICoqCisgICAgIC0gcG9pbnRz IChhcnJheSkgYXJyYXkgb2YgcG9pbnRzCisgICAgICogb3IKKyAgICAgLSB2 YXJhcmdzICjigKYpIHBvaW50cworICAgICA9IChvYmplY3QpIHRoZSBgcG9s eWxpbmVgIGVsZW1lbnQKKyAgICAgKioKKyAgICAgPiBVc2FnZQorICAgICB8 IHZhciBwMSA9IHBhcGVyLnBvbHlsaW5lKFsxMCwgMTAsIDEwMCwgMTAwXSk7 CisgICAgIHwgdmFyIHAyID0gcGFwZXIucG9seWxpbmUoMTAsIDEwLCAxMDAs IDEwMCk7CisgICAgXCovCisgICAgcHJvdG8ucG9seWxpbmUgPSBmdW5jdGlv biAocG9pbnRzKSB7CisgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4g MSkgeworICAgICAgICAgICAgcG9pbnRzID0gQXJyYXkucHJvdG90eXBlLnNs aWNlLmNhbGwoYXJndW1lbnRzLCAwKTsKKyAgICAgICAgfQorICAgICAgICB2 YXIgYXR0ciA9IHt9OworICAgICAgICBpZiAoaXMocG9pbnRzLCAib2JqZWN0 IikgJiYgIWlzKHBvaW50cywgImFycmF5IikpIHsKKyAgICAgICAgICAgIGF0 dHIgPSBwb2ludHM7CisgICAgICAgIH0gZWxzZSBpZiAocG9pbnRzICE9IG51 bGwpIHsKKyAgICAgICAgICAgIGF0dHIgPSB7cG9pbnRzOiBwb2ludHN9Owor ICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLmVsKCJwb2x5bGluZSIs IGF0dHIpOworICAgIH07CisgICAgLypcCisgICAgICogUGFwZXIucG9seWdv bgorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogRHJhd3MgYSBw b2x5Z29uLiBTZWUgQFBhcGVyLnBvbHlsaW5lCisgICAgXCovCisgICAgcHJv dG8ucG9seWdvbiA9IGZ1bmN0aW9uIChwb2ludHMpIHsKKyAgICAgICAgaWYg KGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7CisgICAgICAgICAgICBwb2ludHMg PSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApOwor ICAgICAgICB9CisgICAgICAgIHZhciBhdHRyID0ge307CisgICAgICAgIGlm IChpcyhwb2ludHMsICJvYmplY3QiKSAmJiAhaXMocG9pbnRzLCAiYXJyYXki KSkgeworICAgICAgICAgICAgYXR0ciA9IHBvaW50czsKKyAgICAgICAgfSBl bHNlIGlmIChwb2ludHMgIT0gbnVsbCkgeworICAgICAgICAgICAgYXR0ciA9 IHtwb2ludHM6IHBvaW50c307CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu IHRoaXMuZWwoInBvbHlnb24iLCBhdHRyKTsKKyAgICB9OworICAgIC8vIGdy YWRpZW50cworICAgIChmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciAkID0g U25hcC5fLiQ7CisgICAgICAgIC8vIGdyYWRpZW50cycgaGVscGVycworICAg ICAgICBmdW5jdGlvbiBHc3RvcHMoKSB7CisgICAgICAgICAgICByZXR1cm4g dGhpcy5zZWxlY3RBbGwoInN0b3AiKTsKKyAgICAgICAgfQorICAgICAgICBm dW5jdGlvbiBHYWRkU3RvcChjb2xvciwgb2Zmc2V0KSB7CisgICAgICAgICAg ICB2YXIgc3RvcCA9ICQoInN0b3AiKSwKKyAgICAgICAgICAgICAgICBhdHRy ID0geworICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6ICtvZmZzZXQgKyAi JSIKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgY29sb3IgPSBT bmFwLmNvbG9yKGNvbG9yKTsKKyAgICAgICAgICAgIGF0dHJbInN0b3AtY29s b3IiXSA9IGNvbG9yLmhleDsKKyAgICAgICAgICAgIGlmIChjb2xvci5vcGFj aXR5IDwgMSkgeworICAgICAgICAgICAgICAgIGF0dHJbInN0b3Atb3BhY2l0 eSJdID0gY29sb3Iub3BhY2l0eTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICQoc3RvcCwgYXR0cik7CisgICAgICAgICAgICB0aGlzLm5vZGUuYXBw ZW5kQ2hpbGQoc3RvcCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg ICAgICAgfQorICAgICAgICBmdW5jdGlvbiBHZ2V0QkJveCgpIHsKKyAgICAg ICAgICAgIGlmICh0aGlzLnR5cGUgPT0gImxpbmVhckdyYWRpZW50Iikgewor ICAgICAgICAgICAgICAgIHZhciB4MSA9ICQodGhpcy5ub2RlLCAieDEiKSB8 fCAwLAorICAgICAgICAgICAgICAgICAgICB4MiA9ICQodGhpcy5ub2RlLCAi eDIiKSB8fCAxLAorICAgICAgICAgICAgICAgICAgICB5MSA9ICQodGhpcy5u b2RlLCAieTEiKSB8fCAwLAorICAgICAgICAgICAgICAgICAgICB5MiA9ICQo dGhpcy5ub2RlLCAieTIiKSB8fCAwOworICAgICAgICAgICAgICAgIHJldHVy biBTbmFwLl8uYm94KHgxLCB5MSwgbWF0aC5hYnMoeDIgLSB4MSksIG1hdGgu YWJzKHkyIC0geTEpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgdmFyIGN4ID0gdGhpcy5ub2RlLmN4IHx8IC41LAorICAgICAg ICAgICAgICAgICAgICBjeSA9IHRoaXMubm9kZS5jeSB8fCAuNSwKKyAgICAg ICAgICAgICAgICAgICAgciA9IHRoaXMubm9kZS5yIHx8IDA7CisgICAgICAg ICAgICAgICAgcmV0dXJuIFNuYXAuXy5ib3goY3ggLSByLCBjeSAtIHIsIHIg KiAyLCByICogMik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg ICAgZnVuY3Rpb24gZ3JhZGllbnQoZGVmcywgc3RyKSB7CisgICAgICAgICAg ICB2YXIgZ3JhZCA9IGV2ZSgic25hcC51dGlsLmdyYWQucGFyc2UiLCBudWxs LCBzdHIpLmZpcnN0RGVmaW5lZCgpLAorICAgICAgICAgICAgICAgIGVsOwor ICAgICAgICAgICAgaWYgKCFncmFkKSB7CisgICAgICAgICAgICAgICAgcmV0 dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBncmFkLnBh cmFtcy51bnNoaWZ0KGRlZnMpOworICAgICAgICAgICAgaWYgKGdyYWQudHlw ZS50b0xvd2VyQ2FzZSgpID09ICJsIikgeworICAgICAgICAgICAgICAgIGVs ID0gZ3JhZGllbnRMaW5lYXIuYXBwbHkoMCwgZ3JhZC5wYXJhbXMpOworICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbCA9IGdyYWRp ZW50UmFkaWFsLmFwcGx5KDAsIGdyYWQucGFyYW1zKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGlmIChncmFkLnR5cGUgIT0gZ3JhZC50eXBlLnRv TG93ZXJDYXNlKCkpIHsKKyAgICAgICAgICAgICAgICAkKGVsLm5vZGUsIHsK KyAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnRVbml0czogInVzZXJTcGFj ZU9uVXNlIgorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgdmFyIHN0b3BzID0gZ3JhZC5zdG9wcywKKyAgICAgICAg ICAgICAgICBsZW4gPSBzdG9wcy5sZW5ndGgsCisgICAgICAgICAgICAgICAg c3RhcnQgPSAwLAorICAgICAgICAgICAgICAgIGogPSAwOworICAgICAgICAg ICAgZnVuY3Rpb24gc2VlZChpLCBlbmQpIHsKKyAgICAgICAgICAgICAgICB2 YXIgc3RlcCA9IChlbmQgLSBzdGFydCkgLyAoaSAtIGopOworICAgICAgICAg ICAgICAgIGZvciAodmFyIGsgPSBqOyBrIDwgaTsgaysrKSB7CisgICAgICAg ICAgICAgICAgICAgIHN0b3BzW2tdLm9mZnNldCA9ICsoK3N0YXJ0ICsgc3Rl cCAqIChrIC0gaikpLnRvRml4ZWQoMik7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIGogPSBpOworICAgICAgICAgICAgICAgIHN0YXJ0 ID0gZW5kOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGVuLS07Cisg ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBpZiAo Im9mZnNldCIgaW4gc3RvcHNbaV0pIHsKKyAgICAgICAgICAgICAgICBzZWVk KGksIHN0b3BzW2ldLm9mZnNldCk7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBzdG9wc1tsZW5dLm9mZnNldCA9IHN0b3BzW2xlbl0ub2Zmc2V0IHx8 IDEwMDsKKyAgICAgICAgICAgIHNlZWQobGVuLCBzdG9wc1tsZW5dLm9mZnNl dCk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IGxlbjsgaSsrKSB7 CisgICAgICAgICAgICAgICAgdmFyIHN0b3AgPSBzdG9wc1tpXTsKKyAgICAg ICAgICAgICAgICBlbC5hZGRTdG9wKHN0b3AuY29sb3IsIHN0b3Aub2Zmc2V0 KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBlbDsKKyAg ICAgICAgfQorICAgICAgICBmdW5jdGlvbiBncmFkaWVudExpbmVhcihkZWZz LCB4MSwgeTEsIHgyLCB5MikgeworICAgICAgICAgICAgdmFyIGVsID0gU25h cC5fLm1ha2UoImxpbmVhckdyYWRpZW50IiwgZGVmcyk7CisgICAgICAgICAg ICBlbC5zdG9wcyA9IEdzdG9wczsKKyAgICAgICAgICAgIGVsLmFkZFN0b3Ag PSBHYWRkU3RvcDsKKyAgICAgICAgICAgIGVsLmdldEJCb3ggPSBHZ2V0QkJv eDsKKyAgICAgICAgICAgIGlmICh4MSAhPSBudWxsKSB7CisgICAgICAgICAg ICAgICAgJChlbC5ub2RlLCB7CisgICAgICAgICAgICAgICAgICAgIHgxOiB4 MSwKKyAgICAgICAgICAgICAgICAgICAgeTE6IHkxLAorICAgICAgICAgICAg ICAgICAgICB4MjogeDIsCisgICAgICAgICAgICAgICAgICAgIHkyOiB5Mgor ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgcmV0dXJuIGVsOworICAgICAgICB9CisgICAgICAgIGZ1bmN0aW9uIGdy YWRpZW50UmFkaWFsKGRlZnMsIGN4LCBjeSwgciwgZngsIGZ5KSB7CisgICAg ICAgICAgICB2YXIgZWwgPSBTbmFwLl8ubWFrZSgicmFkaWFsR3JhZGllbnQi LCBkZWZzKTsKKyAgICAgICAgICAgIGVsLnN0b3BzID0gR3N0b3BzOworICAg ICAgICAgICAgZWwuYWRkU3RvcCA9IEdhZGRTdG9wOworICAgICAgICAgICAg ZWwuZ2V0QkJveCA9IEdnZXRCQm94OworICAgICAgICAgICAgaWYgKGN4ICE9 IG51bGwpIHsKKyAgICAgICAgICAgICAgICAkKGVsLm5vZGUsIHsKKyAgICAg ICAgICAgICAgICAgICAgY3g6IGN4LAorICAgICAgICAgICAgICAgICAgICBj eTogY3ksCisgICAgICAgICAgICAgICAgICAgIHI6IHIKKyAgICAgICAgICAg ICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmeCAh PSBudWxsICYmIGZ5ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAkKGVs Lm5vZGUsIHsKKyAgICAgICAgICAgICAgICAgICAgZng6IGZ4LAorICAgICAg ICAgICAgICAgICAgICBmeTogZnkKKyAgICAgICAgICAgICAgICB9KTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBlbDsKKyAgICAgICAg fQorICAgICAgICAvKlwKKyAgICAgICAgICogUGFwZXIuZ3JhZGllbnQKKyAg ICAgICAgIFsgbWV0aG9kIF0KKyAgICAgICAgICoqCisgICAgICAgICAqIENy ZWF0ZXMgYSBncmFkaWVudCBlbGVtZW50CisgICAgICAgICAqKgorICAgICAg ICAgLSBncmFkaWVudCAoc3RyaW5nKSBncmFkaWVudCBkZXNjcmlwdG9yCisg ICAgICAgICA+IEdyYWRpZW50IERlc2NyaXB0b3IKKyAgICAgICAgICogVGhl IGdyYWRpZW50IGRlc2NyaXB0b3IgaXMgYW4gZXhwcmVzc2lvbiBmb3JtYXR0 ZWQgYXMKKyAgICAgICAgICogZm9sbG93czogYDx0eXBlPig8Y29vcmRzPik8 Y29sb3JzPmAuICBUaGUgYDx0eXBlPmAgY2FuIGJlCisgICAgICAgICAqIGVp dGhlciBsaW5lYXIgb3IgcmFkaWFsLiAgVGhlIHVwcGVyY2FzZSBgTGAgb3Ig YFJgIGxldHRlcnMKKyAgICAgICAgICogaW5kaWNhdGUgYWJzb2x1dGUgY29v cmRpbmF0ZXMgb2Zmc2V0IGZyb20gdGhlIFNWRyBzdXJmYWNlLgorICAgICAg ICAgKiBMb3dlcmNhc2UgYGxgIG9yIGByYCBsZXR0ZXJzIGluZGljYXRlIGNv b3JkaW5hdGVzCisgICAgICAgICAqIGNhbGN1bGF0ZWQgcmVsYXRpdmUgdG8g dGhlIGVsZW1lbnQgdG8gd2hpY2ggdGhlIGdyYWRpZW50IGlzCisgICAgICAg ICAqIGFwcGxpZWQuICBDb29yZGluYXRlcyBzcGVjaWZ5IGEgbGluZWFyIGdy YWRpZW50IHZlY3RvciBhcworICAgICAgICAgKiBgeDFgLCBgeTFgLCBgeDJg LCBgeTJgLCBvciBhIHJhZGlhbCBncmFkaWVudCBhcyBgY3hgLCBgY3lgLAor ICAgICAgICAgKiBgcmAgYW5kIG9wdGlvbmFsIGBmeGAsIGBmeWAgc3BlY2lm eWluZyBhIGZvY2FsIHBvaW50IGF3YXkKKyAgICAgICAgICogZnJvbSB0aGUg Y2VudGVyIG9mIHRoZSBjaXJjbGUuIFNwZWNpZnkgYDxjb2xvcnM+YCBhcyBh IGxpc3QKKyAgICAgICAgICogb2YgZGFzaC1zZXBhcmF0ZWQgQ1NTIGNvbG9y IHZhbHVlcy4gIEVhY2ggY29sb3IgbWF5IGJlCisgICAgICAgICAqIGZvbGxv d2VkIGJ5IGEgY3VzdG9tIG9mZnNldCB2YWx1ZSwgc2VwYXJhdGVkIHdpdGgg YSBjb2xvbgorICAgICAgICAgKiBjaGFyYWN0ZXIuCisgICAgICAgICA+IEV4 YW1wbGVzCisgICAgICAgICAqIExpbmVhciBncmFkaWVudCwgcmVsYXRpdmUg ZnJvbSB0b3AtbGVmdCBjb3JuZXIgdG8gYm90dG9tLXJpZ2h0CisgICAgICAg ICAqIGNvcm5lciwgZnJvbSBibGFjayB0aHJvdWdoIHJlZCB0byB3aGl0ZToK KyAgICAgICAgIHwgdmFyIGcgPSBwYXBlci5ncmFkaWVudCgibCgwLCAwLCAx LCAxKSMwMDAtI2YwMC0jZmZmIik7CisgICAgICAgICAqIExpbmVhciBncmFk aWVudCwgYWJzb2x1dGUgZnJvbSAoMCwgMCkgdG8gKDEwMCwgMTAwKSwgZnJv bSBibGFjaworICAgICAgICAgKiB0aHJvdWdoIHJlZCBhdCAyNSUgdG8gd2hp dGU6CisgICAgICAgICB8IHZhciBnID0gcGFwZXIuZ3JhZGllbnQoIkwoMCwg MCwgMTAwLCAxMDApIzAwMC0jZjAwOjI1LSNmZmYiKTsKKyAgICAgICAgICog UmFkaWFsIGdyYWRpZW50LCByZWxhdGl2ZSBmcm9tIHRoZSBjZW50ZXIgb2Yg dGhlIGVsZW1lbnQgd2l0aCByYWRpdXMKKyAgICAgICAgICogaGFsZiB0aGUg d2lkdGgsIGZyb20gYmxhY2sgdG8gd2hpdGU6CisgICAgICAgICB8IHZhciBn ID0gcGFwZXIuZ3JhZGllbnQoInIoMC41LCAwLjUsIDAuNSkjMDAwLSNmZmYi KTsKKyAgICAgICAgICogVG8gYXBwbHkgdGhlIGdyYWRpZW50OgorICAgICAg ICAgfCBwYXBlci5jaXJjbGUoNTAsIDUwLCA0MCkuYXR0cih7CisgICAgICAg ICB8ICAgICBmaWxsOiBnCisgICAgICAgICB8IH0pOworICAgICAgICAgPSAo b2JqZWN0KSB0aGUgYGdyYWRpZW50YCBlbGVtZW50CisgICAgICAgIFwqLwor ICAgICAgICBwcm90by5ncmFkaWVudCA9IGZ1bmN0aW9uIChzdHIpIHsKKyAg ICAgICAgICAgIHJldHVybiBncmFkaWVudCh0aGlzLmRlZnMsIHN0cik7Cisg ICAgICAgIH07CisgICAgICAgIHByb3RvLmdyYWRpZW50TGluZWFyID0gZnVu Y3Rpb24gKHgxLCB5MSwgeDIsIHkyKSB7CisgICAgICAgICAgICByZXR1cm4g Z3JhZGllbnRMaW5lYXIodGhpcy5kZWZzLCB4MSwgeTEsIHgyLCB5Mik7Cisg ICAgICAgIH07CisgICAgICAgIHByb3RvLmdyYWRpZW50UmFkaWFsID0gZnVu Y3Rpb24gKGN4LCBjeSwgciwgZngsIGZ5KSB7CisgICAgICAgICAgICByZXR1 cm4gZ3JhZGllbnRSYWRpYWwodGhpcy5kZWZzLCBjeCwgY3ksIHIsIGZ4LCBm eSk7CisgICAgICAgIH07CisgICAgICAgIC8qXAorICAgICAgICAgKiBQYXBl ci50b1N0cmluZworICAgICAgICAgWyBtZXRob2QgXQorICAgICAgICAgKioK KyAgICAgICAgICogUmV0dXJucyBTVkcgY29kZSBmb3IgdGhlIEBQYXBlcgor ICAgICAgICAgPSAoc3RyaW5nKSBTVkcgY29kZSBmb3IgdGhlIEBQYXBlcgor ICAgICAgICBcKi8KKyAgICAgICAgcHJvdG8udG9TdHJpbmcgPSBmdW5jdGlv biAoKSB7CisgICAgICAgICAgICB2YXIgZG9jID0gdGhpcy5ub2RlLm93bmVy RG9jdW1lbnQsCisgICAgICAgICAgICAgICAgZiA9IGRvYy5jcmVhdGVEb2N1 bWVudEZyYWdtZW50KCksCisgICAgICAgICAgICAgICAgZCA9IGRvYy5jcmVh dGVFbGVtZW50KCJkaXYiKSwKKyAgICAgICAgICAgICAgICBzdmcgPSB0aGlz Lm5vZGUuY2xvbmVOb2RlKHRydWUpLAorICAgICAgICAgICAgICAgIHJlczsK KyAgICAgICAgICAgIGYuYXBwZW5kQ2hpbGQoZCk7CisgICAgICAgICAgICBk LmFwcGVuZENoaWxkKHN2Zyk7CisgICAgICAgICAgICBTbmFwLl8uJChzdmcs IHt4bWxuczogImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIn0pOworICAg ICAgICAgICAgcmVzID0gZC5pbm5lckhUTUw7CisgICAgICAgICAgICBmLnJl bW92ZUNoaWxkKGYuZmlyc3RDaGlsZCk7CisgICAgICAgICAgICByZXR1cm4g cmVzOworICAgICAgICB9OworICAgICAgICAvKlwKKyAgICAgICAgICogUGFw ZXIudG9EYXRhVVJMCisgICAgICAgICBbIG1ldGhvZCBdCisgICAgICAgICAq KgorICAgICAgICAgKiBSZXR1cm5zIFNWRyBjb2RlIGZvciB0aGUgQFBhcGVy IGFzIERhdGEgVVJJIHN0cmluZy4KKyAgICAgICAgID0gKHN0cmluZykgRGF0 YSBVUkkgc3RyaW5nCisgICAgICAgIFwqLworICAgICAgICBwcm90by50b0Rh dGFVUkwgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAod2luZG93 ICYmIHdpbmRvdy5idG9hKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICJk YXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCIgKyBidG9hKHVuZXNjYXBlKGVu Y29kZVVSSUNvbXBvbmVudCh0aGlzKSkpOworICAgICAgICAgICAgfQorICAg ICAgICB9OworICAgICAgICAvKlwKKyAgICAgICAgICogUGFwZXIuY2xlYXIK KyAgICAgICAgIFsgbWV0aG9kIF0KKyAgICAgICAgICoqCisgICAgICAgICAq IFJlbW92ZXMgYWxsIGNoaWxkIG5vZGVzIG9mIHRoZSBwYXBlciwgZXhjZXB0 IDxkZWZzPi4KKyAgICAgICAgXCovCisgICAgICAgIHByb3RvLmNsZWFyID0g ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLm5v ZGUuZmlyc3RDaGlsZCwKKyAgICAgICAgICAgICAgICBuZXh0OworICAgICAg ICAgICAgd2hpbGUgKG5vZGUpIHsKKyAgICAgICAgICAgICAgICBuZXh0ID0g bm9kZS5uZXh0U2libGluZzsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS50 YWdOYW1lICE9ICJkZWZzIikgeworICAgICAgICAgICAgICAgICAgICBub2Rl LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7CisgICAgICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHJvdG8uY2xlYXIu Y2FsbCh7bm9kZTogbm9kZX0pOworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICBub2RlID0gbmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfTsKKyAgICB9KCkpOworfSk7CisKKy8vIENvcHlyaWdodCAoYykgMjAx MyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNl cnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vu c2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkg bm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0 aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUg TGljZW5zZSBhdAorLy8KKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNl bnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBh cHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdh cmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3Ry aWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJB TlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJl c3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNw ZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8v IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorU25hcC5wbHVnaW4o ZnVuY3Rpb24gKFNuYXAsIEVsZW1lbnQsIFBhcGVyLCBnbG9iKSB7CisgICAg dmFyIGVscHJvdG8gPSBFbGVtZW50LnByb3RvdHlwZSwKKyAgICAgICAgaXMg PSBTbmFwLmlzLAorICAgICAgICBjbG9uZSA9IFNuYXAuXy5jbG9uZSwKKyAg ICAgICAgaGFzID0gImhhc093blByb3BlcnR5IiwKKyAgICAgICAgcDJzID0g Lyw/KFthLXpdKSw/L2dpLAorICAgICAgICB0b0Zsb2F0ID0gcGFyc2VGbG9h dCwKKyAgICAgICAgbWF0aCA9IE1hdGgsCisgICAgICAgIFBJID0gbWF0aC5Q SSwKKyAgICAgICAgbW1pbiA9IG1hdGgubWluLAorICAgICAgICBtbWF4ID0g bWF0aC5tYXgsCisgICAgICAgIHBvdyA9IG1hdGgucG93LAorICAgICAgICBh YnMgPSBtYXRoLmFiczsKKyAgICBmdW5jdGlvbiBwYXRocyhwcykgeworICAg ICAgICB2YXIgcCA9IHBhdGhzLnBzID0gcGF0aHMucHMgfHwge307CisgICAg ICAgIGlmIChwW3BzXSkgeworICAgICAgICAgICAgcFtwc10uc2xlZXAgPSAx MDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwW3BzXSA9IHsK KyAgICAgICAgICAgICAgICBzbGVlcDogMTAwCisgICAgICAgICAgICB9Owor ICAgICAgICB9CisgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewor ICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHApIGlmIChwW2hhc10oa2V5 KSAmJiBrZXkgIT0gcHMpIHsKKyAgICAgICAgICAgICAgICBwW2tleV0uc2xl ZXAtLTsKKyAgICAgICAgICAgICAgICAhcFtrZXldLnNsZWVwICYmIGRlbGV0 ZSBwW2tleV07CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAg ICByZXR1cm4gcFtwc107CisgICAgfQorICAgIGZ1bmN0aW9uIGJveCh4LCB5 LCB3aWR0aCwgaGVpZ2h0KSB7CisgICAgICAgIGlmICh4ID09IG51bGwpIHsK KyAgICAgICAgICAgIHggPSB5ID0gd2lkdGggPSBoZWlnaHQgPSAwOworICAg ICAgICB9CisgICAgICAgIGlmICh5ID09IG51bGwpIHsKKyAgICAgICAgICAg IHkgPSB4Lnk7CisgICAgICAgICAgICB3aWR0aCA9IHgud2lkdGg7CisgICAg ICAgICAgICBoZWlnaHQgPSB4LmhlaWdodDsKKyAgICAgICAgICAgIHggPSB4 Lng7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg IHg6IHgsCisgICAgICAgICAgICB5OiB5LAorICAgICAgICAgICAgd2lkdGg6 IHdpZHRoLAorICAgICAgICAgICAgdzogd2lkdGgsCisgICAgICAgICAgICBo ZWlnaHQ6IGhlaWdodCwKKyAgICAgICAgICAgIGg6IGhlaWdodCwKKyAgICAg ICAgICAgIHgyOiB4ICsgd2lkdGgsCisgICAgICAgICAgICB5MjogeSArIGhl aWdodCwKKyAgICAgICAgICAgIGN4OiB4ICsgd2lkdGggLyAyLAorICAgICAg ICAgICAgY3k6IHkgKyBoZWlnaHQgLyAyLAorICAgICAgICAgICAgcjE6IG1h dGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiwKKyAgICAgICAgICAgIHIyOiBt YXRoLm1heCh3aWR0aCwgaGVpZ2h0KSAvIDIsCisgICAgICAgICAgICByMDog bWF0aC5zcXJ0KHdpZHRoICogd2lkdGggKyBoZWlnaHQgKiBoZWlnaHQpIC8g MiwKKyAgICAgICAgICAgIHBhdGg6IHJlY3RQYXRoKHgsIHksIHdpZHRoLCBo ZWlnaHQpLAorICAgICAgICAgICAgdmI6IFt4LCB5LCB3aWR0aCwgaGVpZ2h0 XS5qb2luKCIgIikKKyAgICAgICAgfTsKKyAgICB9CisgICAgZnVuY3Rpb24g dG9TdHJpbmcoKSB7CisgICAgICAgIHJldHVybiB0aGlzLmpvaW4oIiwiKS5y ZXBsYWNlKHAycywgIiQxIik7CisgICAgfQorICAgIGZ1bmN0aW9uIHBhdGhD bG9uZShwYXRoQXJyYXkpIHsKKyAgICAgICAgdmFyIHJlcyA9IGNsb25lKHBh dGhBcnJheSk7CisgICAgICAgIHJlcy50b1N0cmluZyA9IHRvU3RyaW5nOwor ICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICBmdW5jdGlvbiBnZXRQ b2ludEF0U2VnbWVudExlbmd0aChwMXgsIHAxeSwgYzF4LCBjMXksIGMyeCwg YzJ5LCBwMngsIHAyeSwgbGVuZ3RoKSB7CisgICAgICAgIGlmIChsZW5ndGgg PT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGJlemxlbihwMXgsIHAx eSwgYzF4LCBjMXksIGMyeCwgYzJ5LCBwMngsIHAyeSk7CisgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gZmluZERvdHNBdFNlZ21lbnQo cDF4LCBwMXksIGMxeCwgYzF5LCBjMngsIGMyeSwgcDJ4LCBwMnksCisgICAg ICAgICAgICAgICAgZ2V0VG90TGVuKHAxeCwgcDF5LCBjMXgsIGMxeSwgYzJ4 LCBjMnksIHAyeCwgcDJ5LCBsZW5ndGgpKTsKKyAgICAgICAgfQorICAgIH0K KyAgICBmdW5jdGlvbiBnZXRMZW5ndGhGYWN0b3J5KGlzdG90YWwsIHN1YnBh dGgpIHsKKyAgICAgICAgZnVuY3Rpb24gTyh2YWwpIHsKKyAgICAgICAgICAg IHJldHVybiArKCt2YWwpLnRvRml4ZWQoMyk7CisgICAgICAgIH0KKyAgICAg ICAgcmV0dXJuIFNuYXAuXy5jYWNoZXIoZnVuY3Rpb24gKHBhdGgsIGxlbmd0 aCwgb25seXN0YXJ0KSB7CisgICAgICAgICAgICBpZiAocGF0aCBpbnN0YW5j ZW9mIEVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICBwYXRoID0gcGF0aC5h dHRyKCJkIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYXRoID0g cGF0aDJjdXJ2ZShwYXRoKTsKKyAgICAgICAgICAgIHZhciB4LCB5LCBwLCBs LCBzcCA9ICIiLCBzdWJwYXRocyA9IHt9LCBwb2ludCwKKyAgICAgICAgICAg ICAgICBsZW4gPSAwOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlp ID0gcGF0aC5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAgICAg ICAgcCA9IHBhdGhbaV07CisgICAgICAgICAgICAgICAgaWYgKHBbMF0gPT0g Ik0iKSB7CisgICAgICAgICAgICAgICAgICAgIHggPSArcFsxXTsKKyAgICAg ICAgICAgICAgICAgICAgeSA9ICtwWzJdOworICAgICAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGwgPSBnZXRQb2ludEF0U2Vn bWVudExlbmd0aCh4LCB5LCBwWzFdLCBwWzJdLCBwWzNdLCBwWzRdLCBwWzVd LCBwWzZdKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxlbiArIGwgPiBs ZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJwYXRo ICYmICFzdWJwYXRocy5zdGFydCkgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBvaW50ID0gZ2V0UG9pbnRBdFNlZ21lbnRMZW5ndGgoeCwgeSwg cFsxXSwgcFsyXSwgcFszXSwgcFs0XSwgcFs1XSwgcFs2XSwgbGVuZ3RoIC0g bGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcCArPSBbCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDIiArIE8ocG9pbnQu c3RhcnQueCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE8o cG9pbnQuc3RhcnQueSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE8ocG9pbnQubS54KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTyhwb2ludC5tLnkpLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPKHBvaW50LngpLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPKHBvaW50LnkpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob25seXN0 YXJ0KSB7cmV0dXJuIHNwO30KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdWJwYXRocy5zdGFydCA9IHNwOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNwID0gWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiTSIgKyBPKHBvaW50LngpLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPKHBvaW50LnkpICsgIkMiICsgTyhwb2ludC5uLngpLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPKHBvaW50Lm4ueSksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE8ocG9pbnQuZW5kLngp LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPKHBvaW50LmVu ZC55KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTyhwWzVd KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTyhwWzZdKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0uam9pbigpOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxlbiArPSBsOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHggPSArcFs1XTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICB5ID0gK3BbNl07CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzdG90YWwgJiYgIXN1YnBh dGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludCA9IGdl dFBvaW50QXRTZWdtZW50TGVuZ3RoKHgsIHksIHBbMV0sIHBbMl0sIHBbM10s IHBbNF0sIHBbNV0sIHBbNl0sIGxlbmd0aCAtIGxlbik7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvaW50OworICAgICAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgIGxlbiArPSBsOworICAgICAgICAgICAgICAgICAgICB4 ID0gK3BbNV07CisgICAgICAgICAgICAgICAgICAgIHkgPSArcFs2XTsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3AgKz0gcC5zaGlm dCgpICsgcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN1YnBhdGhz LmVuZCA9IHNwOworICAgICAgICAgICAgcG9pbnQgPSBpc3RvdGFsID8gbGVu IDogc3VicGF0aCA/IHN1YnBhdGhzIDogZmluZERvdHNBdFNlZ21lbnQoeCwg eSwgcFswXSwgcFsxXSwgcFsyXSwgcFszXSwgcFs0XSwgcFs1XSwgMSk7Cisg ICAgICAgICAgICByZXR1cm4gcG9pbnQ7CisgICAgICAgIH0sIG51bGwsIFNu YXAuXy5jbG9uZSk7CisgICAgfQorICAgIHZhciBnZXRUb3RhbExlbmd0aCA9 IGdldExlbmd0aEZhY3RvcnkoMSksCisgICAgICAgIGdldFBvaW50QXRMZW5n dGggPSBnZXRMZW5ndGhGYWN0b3J5KCksCisgICAgICAgIGdldFN1YnBhdGhz QXRMZW5ndGggPSBnZXRMZW5ndGhGYWN0b3J5KDAsIDEpOworICAgIGZ1bmN0 aW9uIGZpbmREb3RzQXRTZWdtZW50KHAxeCwgcDF5LCBjMXgsIGMxeSwgYzJ4 LCBjMnksIHAyeCwgcDJ5LCB0KSB7CisgICAgICAgIHZhciB0MSA9IDEgLSB0 LAorICAgICAgICAgICAgdDEzID0gcG93KHQxLCAzKSwKKyAgICAgICAgICAg IHQxMiA9IHBvdyh0MSwgMiksCisgICAgICAgICAgICB0MiA9IHQgKiB0LAor ICAgICAgICAgICAgdDMgPSB0MiAqIHQsCisgICAgICAgICAgICB4ID0gdDEz ICogcDF4ICsgdDEyICogMyAqIHQgKiBjMXggKyB0MSAqIDMgKiB0ICogdCAq IGMyeCArIHQzICogcDJ4LAorICAgICAgICAgICAgeSA9IHQxMyAqIHAxeSAr IHQxMiAqIDMgKiB0ICogYzF5ICsgdDEgKiAzICogdCAqIHQgKiBjMnkgKyB0 MyAqIHAyeSwKKyAgICAgICAgICAgIG14ID0gcDF4ICsgMiAqIHQgKiAoYzF4 IC0gcDF4KSArIHQyICogKGMyeCAtIDIgKiBjMXggKyBwMXgpLAorICAgICAg ICAgICAgbXkgPSBwMXkgKyAyICogdCAqIChjMXkgLSBwMXkpICsgdDIgKiAo YzJ5IC0gMiAqIGMxeSArIHAxeSksCisgICAgICAgICAgICBueCA9IGMxeCAr IDIgKiB0ICogKGMyeCAtIGMxeCkgKyB0MiAqIChwMnggLSAyICogYzJ4ICsg YzF4KSwKKyAgICAgICAgICAgIG55ID0gYzF5ICsgMiAqIHQgKiAoYzJ5IC0g YzF5KSArIHQyICogKHAyeSAtIDIgKiBjMnkgKyBjMXkpLAorICAgICAgICAg ICAgYXggPSB0MSAqIHAxeCArIHQgKiBjMXgsCisgICAgICAgICAgICBheSA9 IHQxICogcDF5ICsgdCAqIGMxeSwKKyAgICAgICAgICAgIGN4ID0gdDEgKiBj MnggKyB0ICogcDJ4LAorICAgICAgICAgICAgY3kgPSB0MSAqIGMyeSArIHQg KiBwMnksCisgICAgICAgICAgICBhbHBoYSA9ICg5MCAtIG1hdGguYXRhbjIo bXggLSBueCwgbXkgLSBueSkgKiAxODAgLyBQSSk7CisgICAgICAgIC8vICht eCA+IG54IHx8IG15IDwgbnkpICYmIChhbHBoYSArPSAxODApOworICAgICAg ICByZXR1cm4geworICAgICAgICAgICAgeDogeCwKKyAgICAgICAgICAgIHk6 IHksCisgICAgICAgICAgICBtOiB7eDogbXgsIHk6IG15fSwKKyAgICAgICAg ICAgIG46IHt4OiBueCwgeTogbnl9LAorICAgICAgICAgICAgc3RhcnQ6IHt4 OiBheCwgeTogYXl9LAorICAgICAgICAgICAgZW5kOiB7eDogY3gsIHk6IGN5 fSwKKyAgICAgICAgICAgIGFscGhhOiBhbHBoYQorICAgICAgICB9OworICAg IH0KKyAgICBmdW5jdGlvbiBiZXppZXJCQm94KHAxeCwgcDF5LCBjMXgsIGMx eSwgYzJ4LCBjMnksIHAyeCwgcDJ5KSB7CisgICAgICAgIGlmICghU25hcC5p cyhwMXgsICJhcnJheSIpKSB7CisgICAgICAgICAgICBwMXggPSBbcDF4LCBw MXksIGMxeCwgYzF5LCBjMngsIGMyeSwgcDJ4LCBwMnldOworICAgICAgICB9 CisgICAgICAgIHZhciBiYm94ID0gY3VydmVEaW0uYXBwbHkobnVsbCwgcDF4 KTsKKyAgICAgICAgcmV0dXJuIGJveCgKKyAgICAgICAgICAgIGJib3gubWlu LngsCisgICAgICAgICAgICBiYm94Lm1pbi55LAorICAgICAgICAgICAgYmJv eC5tYXgueCAtIGJib3gubWluLngsCisgICAgICAgICAgICBiYm94Lm1heC55 IC0gYmJveC5taW4ueQorICAgICAgICApOworICAgIH0KKyAgICBmdW5jdGlv biBpc1BvaW50SW5zaWRlQkJveChiYm94LCB4LCB5KSB7CisgICAgICAgIHJl dHVybiAgeCA+PSBiYm94LnggJiYKKyAgICAgICAgICAgICAgICB4IDw9IGJi b3gueCArIGJib3gud2lkdGggJiYKKyAgICAgICAgICAgICAgICB5ID49IGJi b3gueSAmJgorICAgICAgICAgICAgICAgIHkgPD0gYmJveC55ICsgYmJveC5o ZWlnaHQ7CisgICAgfQorICAgIGZ1bmN0aW9uIGlzQkJveEludGVyc2VjdChi Ym94MSwgYmJveDIpIHsKKyAgICAgICAgYmJveDEgPSBib3goYmJveDEpOwor ICAgICAgICBiYm94MiA9IGJveChiYm94Mik7CisgICAgICAgIHJldHVybiBp c1BvaW50SW5zaWRlQkJveChiYm94MiwgYmJveDEueCwgYmJveDEueSkKKyAg ICAgICAgICAgIHx8IGlzUG9pbnRJbnNpZGVCQm94KGJib3gyLCBiYm94MS54 MiwgYmJveDEueSkKKyAgICAgICAgICAgIHx8IGlzUG9pbnRJbnNpZGVCQm94 KGJib3gyLCBiYm94MS54LCBiYm94MS55MikKKyAgICAgICAgICAgIHx8IGlz UG9pbnRJbnNpZGVCQm94KGJib3gyLCBiYm94MS54MiwgYmJveDEueTIpCisg ICAgICAgICAgICB8fCBpc1BvaW50SW5zaWRlQkJveChiYm94MSwgYmJveDIu eCwgYmJveDIueSkKKyAgICAgICAgICAgIHx8IGlzUG9pbnRJbnNpZGVCQm94 KGJib3gxLCBiYm94Mi54MiwgYmJveDIueSkKKyAgICAgICAgICAgIHx8IGlz UG9pbnRJbnNpZGVCQm94KGJib3gxLCBiYm94Mi54LCBiYm94Mi55MikKKyAg ICAgICAgICAgIHx8IGlzUG9pbnRJbnNpZGVCQm94KGJib3gxLCBiYm94Mi54 MiwgYmJveDIueTIpCisgICAgICAgICAgICB8fCAoYmJveDEueCA8IGJib3gy LngyICYmIGJib3gxLnggPiBiYm94Mi54CisgICAgICAgICAgICAgICAgfHwg YmJveDIueCA8IGJib3gxLngyICYmIGJib3gyLnggPiBiYm94MS54KQorICAg ICAgICAgICAgJiYgKGJib3gxLnkgPCBiYm94Mi55MiAmJiBiYm94MS55ID4g YmJveDIueQorICAgICAgICAgICAgICAgIHx8IGJib3gyLnkgPCBiYm94MS55 MiAmJiBiYm94Mi55ID4gYmJveDEueSk7CisgICAgfQorICAgIGZ1bmN0aW9u IGJhc2UzKHQsIHAxLCBwMiwgcDMsIHA0KSB7CisgICAgICAgIHZhciB0MSA9 IC0zICogcDEgKyA5ICogcDIgLSA5ICogcDMgKyAzICogcDQsCisgICAgICAg ICAgICB0MiA9IHQgKiB0MSArIDYgKiBwMSAtIDEyICogcDIgKyA2ICogcDM7 CisgICAgICAgIHJldHVybiB0ICogdDIgLSAzICogcDEgKyAzICogcDI7Cisg ICAgfQorICAgIGZ1bmN0aW9uIGJlemxlbih4MSwgeTEsIHgyLCB5MiwgeDMs IHkzLCB4NCwgeTQsIHopIHsKKyAgICAgICAgaWYgKHogPT0gbnVsbCkgewor ICAgICAgICAgICAgeiA9IDE7CisgICAgICAgIH0KKyAgICAgICAgeiA9IHog PiAxID8gMSA6IHogPCAwID8gMCA6IHo7CisgICAgICAgIHZhciB6MiA9IHog LyAyLAorICAgICAgICAgICAgbiA9IDEyLAorICAgICAgICAgICAgVHZhbHVl cyA9IFstLjEyNTIsLjEyNTIsLS4zNjc4LC4zNjc4LC0uNTg3MywuNTg3Mywt Ljc2OTksLjc2OTksLS45MDQxLC45MDQxLC0uOTgxNiwuOTgxNl0sCisgICAg ICAgICAgICBDdmFsdWVzID0gWzAuMjQ5MSwwLjI0OTEsMC4yMzM1LDAuMjMz NSwwLjIwMzIsMC4yMDMyLDAuMTYwMSwwLjE2MDEsMC4xMDY5LDAuMTA2OSww LjA0NzIsMC4wNDcyXSwKKyAgICAgICAgICAgIHN1bSA9IDA7CisgICAgICAg IGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAgICAgICB2 YXIgY3QgPSB6MiAqIFR2YWx1ZXNbaV0gKyB6MiwKKyAgICAgICAgICAgICAg ICB4YmFzZSA9IGJhc2UzKGN0LCB4MSwgeDIsIHgzLCB4NCksCisgICAgICAg ICAgICAgICAgeWJhc2UgPSBiYXNlMyhjdCwgeTEsIHkyLCB5MywgeTQpLAor ICAgICAgICAgICAgICAgIGNvbWIgPSB4YmFzZSAqIHhiYXNlICsgeWJhc2Ug KiB5YmFzZTsKKyAgICAgICAgICAgIHN1bSArPSBDdmFsdWVzW2ldICogbWF0 aC5zcXJ0KGNvbWIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB6MiAq IHN1bTsKKyAgICB9CisgICAgZnVuY3Rpb24gZ2V0VG90TGVuKHgxLCB5MSwg eDIsIHkyLCB4MywgeTMsIHg0LCB5NCwgbGwpIHsKKyAgICAgICAgaWYgKGxs IDwgMCB8fCBiZXpsZW4oeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgeDQsIHk0 KSA8IGxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg ICAgICAgdmFyIHQgPSAxLAorICAgICAgICAgICAgc3RlcCA9IHQgLyAyLAor ICAgICAgICAgICAgdDIgPSB0IC0gc3RlcCwKKyAgICAgICAgICAgIGwsCisg ICAgICAgICAgICBlID0gLjAxOworICAgICAgICBsID0gYmV6bGVuKHgxLCB5 MSwgeDIsIHkyLCB4MywgeTMsIHg0LCB5NCwgdDIpOworICAgICAgICB3aGls ZSAoYWJzKGwgLSBsbCkgPiBlKSB7CisgICAgICAgICAgICBzdGVwIC89IDI7 CisgICAgICAgICAgICB0MiArPSAobCA8IGxsID8gMSA6IC0xKSAqIHN0ZXA7 CisgICAgICAgICAgICBsID0gYmV6bGVuKHgxLCB5MSwgeDIsIHkyLCB4Mywg eTMsIHg0LCB5NCwgdDIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0 MjsKKyAgICB9CisgICAgZnVuY3Rpb24gaW50ZXJzZWN0KHgxLCB5MSwgeDIs IHkyLCB4MywgeTMsIHg0LCB5NCkgeworICAgICAgICBpZiAoCisgICAgICAg ICAgICBtbWF4KHgxLCB4MikgPCBtbWluKHgzLCB4NCkgfHwKKyAgICAgICAg ICAgIG1taW4oeDEsIHgyKSA+IG1tYXgoeDMsIHg0KSB8fAorICAgICAgICAg ICAgbW1heCh5MSwgeTIpIDwgbW1pbih5MywgeTQpIHx8CisgICAgICAgICAg ICBtbWluKHkxLCB5MikgPiBtbWF4KHkzLCB5NCkKKyAgICAgICAgKSB7Cisg ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIG54 ID0gKHgxICogeTIgLSB5MSAqIHgyKSAqICh4MyAtIHg0KSAtICh4MSAtIHgy KSAqICh4MyAqIHk0IC0geTMgKiB4NCksCisgICAgICAgICAgICBueSA9ICh4 MSAqIHkyIC0geTEgKiB4MikgKiAoeTMgLSB5NCkgLSAoeTEgLSB5MikgKiAo eDMgKiB5NCAtIHkzICogeDQpLAorICAgICAgICAgICAgZGVub21pbmF0b3Ig PSAoeDEgLSB4MikgKiAoeTMgLSB5NCkgLSAoeTEgLSB5MikgKiAoeDMgLSB4 NCk7CisKKyAgICAgICAgaWYgKCFkZW5vbWluYXRvcikgeworICAgICAgICAg ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBweCA9IG54IC8g ZGVub21pbmF0b3IsCisgICAgICAgICAgICBweSA9IG55IC8gZGVub21pbmF0 b3IsCisgICAgICAgICAgICBweDIgPSArcHgudG9GaXhlZCgyKSwKKyAgICAg ICAgICAgIHB5MiA9ICtweS50b0ZpeGVkKDIpOworICAgICAgICBpZiAoCisg ICAgICAgICAgICBweDIgPCArbW1pbih4MSwgeDIpLnRvRml4ZWQoMikgfHwK KyAgICAgICAgICAgIHB4MiA+ICttbWF4KHgxLCB4MikudG9GaXhlZCgyKSB8 fAorICAgICAgICAgICAgcHgyIDwgK21taW4oeDMsIHg0KS50b0ZpeGVkKDIp IHx8CisgICAgICAgICAgICBweDIgPiArbW1heCh4MywgeDQpLnRvRml4ZWQo MikgfHwKKyAgICAgICAgICAgIHB5MiA8ICttbWluKHkxLCB5MikudG9GaXhl ZCgyKSB8fAorICAgICAgICAgICAgcHkyID4gK21tYXgoeTEsIHkyKS50b0Zp eGVkKDIpIHx8CisgICAgICAgICAgICBweTIgPCArbW1pbih5MywgeTQpLnRv Rml4ZWQoMikgfHwKKyAgICAgICAgICAgIHB5MiA+ICttbWF4KHkzLCB5NCku dG9GaXhlZCgyKQorICAgICAgICApIHsKKyAgICAgICAgICAgIHJldHVybjsK KyAgICAgICAgfQorICAgICAgICByZXR1cm4ge3g6IHB4LCB5OiBweX07Cisg ICAgfQorICAgIGZ1bmN0aW9uIGludGVyKGJlejEsIGJlejIpIHsKKyAgICAg ICAgcmV0dXJuIGludGVySGVscGVyKGJlejEsIGJlejIpOworICAgIH0KKyAg ICBmdW5jdGlvbiBpbnRlckNvdW50KGJlejEsIGJlejIpIHsKKyAgICAgICAg cmV0dXJuIGludGVySGVscGVyKGJlejEsIGJlejIsIDEpOworICAgIH0KKyAg ICBmdW5jdGlvbiBpbnRlckhlbHBlcihiZXoxLCBiZXoyLCBqdXN0Q291bnQp IHsKKyAgICAgICAgdmFyIGJib3gxID0gYmV6aWVyQkJveChiZXoxKSwKKyAg ICAgICAgICAgIGJib3gyID0gYmV6aWVyQkJveChiZXoyKTsKKyAgICAgICAg aWYgKCFpc0JCb3hJbnRlcnNlY3QoYmJveDEsIGJib3gyKSkgeworICAgICAg ICAgICAgcmV0dXJuIGp1c3RDb3VudCA/IDAgOiBbXTsKKyAgICAgICAgfQor ICAgICAgICB2YXIgbDEgPSBiZXpsZW4uYXBwbHkoMCwgYmV6MSksCisgICAg ICAgICAgICBsMiA9IGJlemxlbi5hcHBseSgwLCBiZXoyKSwKKyAgICAgICAg ICAgIG4xID0gfn4obDEgLyA4KSwKKyAgICAgICAgICAgIG4yID0gfn4obDIg LyA4KSwKKyAgICAgICAgICAgIGRvdHMxID0gW10sCisgICAgICAgICAgICBk b3RzMiA9IFtdLAorICAgICAgICAgICAgeHkgPSB7fSwKKyAgICAgICAgICAg IHJlcyA9IGp1c3RDb3VudCA/IDAgOiBbXTsKKyAgICAgICAgZm9yICh2YXIg aSA9IDA7IGkgPCBuMSArIDE7IGkrKykgeworICAgICAgICAgICAgdmFyIHAg PSBmaW5kRG90c0F0U2VnbWVudC5hcHBseSgwLCBiZXoxLmNvbmNhdChpIC8g bjEpKTsKKyAgICAgICAgICAgIGRvdHMxLnB1c2goe3g6IHAueCwgeTogcC55 LCB0OiBpIC8gbjF9KTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGkgPSAw OyBpIDwgbjIgKyAxOyBpKyspIHsKKyAgICAgICAgICAgIHAgPSBmaW5kRG90 c0F0U2VnbWVudC5hcHBseSgwLCBiZXoyLmNvbmNhdChpIC8gbjIpKTsKKyAg ICAgICAgICAgIGRvdHMyLnB1c2goe3g6IHAueCwgeTogcC55LCB0OiBpIC8g bjJ9KTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjE7 IGkrKykgeworICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuMjsg aisrKSB7CisgICAgICAgICAgICAgICAgdmFyIGRpID0gZG90czFbaV0sCisg ICAgICAgICAgICAgICAgICAgIGRpMSA9IGRvdHMxW2kgKyAxXSwKKyAgICAg ICAgICAgICAgICAgICAgZGogPSBkb3RzMltqXSwKKyAgICAgICAgICAgICAg ICAgICAgZGoxID0gZG90czJbaiArIDFdLAorICAgICAgICAgICAgICAgICAg ICBjaSA9IGFicyhkaTEueCAtIGRpLngpIDwgLjAwMSA/ICJ5IiA6ICJ4IiwK KyAgICAgICAgICAgICAgICAgICAgY2ogPSBhYnMoZGoxLnggLSBkai54KSA8 IC4wMDEgPyAieSIgOiAieCIsCisgICAgICAgICAgICAgICAgICAgIGlzID0g aW50ZXJzZWN0KGRpLngsIGRpLnksIGRpMS54LCBkaTEueSwgZGoueCwgZGou eSwgZGoxLngsIGRqMS55KTsKKyAgICAgICAgICAgICAgICBpZiAoaXMpIHsK KyAgICAgICAgICAgICAgICAgICAgaWYgKHh5W2lzLngudG9GaXhlZCg0KV0g PT0gaXMueS50b0ZpeGVkKDQpKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICB4eVtpcy54LnRvRml4ZWQoNCldID0gaXMueS50b0ZpeGVk KDQpOworICAgICAgICAgICAgICAgICAgICB2YXIgdDEgPSBkaS50ICsgYWJz KChpc1tjaV0gLSBkaVtjaV0pIC8gKGRpMVtjaV0gLSBkaVtjaV0pKSAqIChk aTEudCAtIGRpLnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgdDIgPSBk ai50ICsgYWJzKChpc1tjal0gLSBkaltjal0pIC8gKGRqMVtjal0gLSBkaltj al0pKSAqIChkajEudCAtIGRqLnQpOworICAgICAgICAgICAgICAgICAgICBp ZiAodDEgPj0gMCAmJiB0MSA8PSAxICYmIHQyID49IDAgJiYgdDIgPD0gMSkg eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGp1c3RDb3VudCkgewor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcysrOworICAgICAgICAg ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZXMucHVzaCh7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHg6IGlzLngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHk6IGlzLnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHQxOiB0MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDI6 IHQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgICAgZnVuY3Rpb24gcGF0aElu dGVyc2VjdGlvbihwYXRoMSwgcGF0aDIpIHsKKyAgICAgICAgcmV0dXJuIGlu dGVyUGF0aEhlbHBlcihwYXRoMSwgcGF0aDIpOworICAgIH0KKyAgICBmdW5j dGlvbiBwYXRoSW50ZXJzZWN0aW9uTnVtYmVyKHBhdGgxLCBwYXRoMikgewor ICAgICAgICByZXR1cm4gaW50ZXJQYXRoSGVscGVyKHBhdGgxLCBwYXRoMiwg MSk7CisgICAgfQorICAgIGZ1bmN0aW9uIGludGVyUGF0aEhlbHBlcihwYXRo MSwgcGF0aDIsIGp1c3RDb3VudCkgeworICAgICAgICBwYXRoMSA9IHBhdGgy Y3VydmUocGF0aDEpOworICAgICAgICBwYXRoMiA9IHBhdGgyY3VydmUocGF0 aDIpOworICAgICAgICB2YXIgeDEsIHkxLCB4MiwgeTIsIHgxbSwgeTFtLCB4 Mm0sIHkybSwgYmV6MSwgYmV6MiwKKyAgICAgICAgICAgIHJlcyA9IGp1c3RD b3VudCA/IDAgOiBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0g cGF0aDEubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAgdmFy IHBpID0gcGF0aDFbaV07CisgICAgICAgICAgICBpZiAocGlbMF0gPT0gIk0i KSB7CisgICAgICAgICAgICAgICAgeDEgPSB4MW0gPSBwaVsxXTsKKyAgICAg ICAgICAgICAgICB5MSA9IHkxbSA9IHBpWzJdOworICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICBpZiAocGlbMF0gPT0gIkMiKSB7Cisg ICAgICAgICAgICAgICAgICAgIGJlejEgPSBbeDEsIHkxXS5jb25jYXQocGku c2xpY2UoMSkpOworICAgICAgICAgICAgICAgICAgICB4MSA9IGJlejFbNl07 CisgICAgICAgICAgICAgICAgICAgIHkxID0gYmV6MVs3XTsKKyAgICAgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBiZXoxID0g W3gxLCB5MSwgeDEsIHkxLCB4MW0sIHkxbSwgeDFtLCB5MW1dOworICAgICAg ICAgICAgICAgICAgICB4MSA9IHgxbTsKKyAgICAgICAgICAgICAgICAgICAg eTEgPSB5MW07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IGZvciAodmFyIGogPSAwLCBqaiA9IHBhdGgyLmxlbmd0aDsgaiA8IGpqOyBq KyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHBqID0gcGF0aDJbal07 CisgICAgICAgICAgICAgICAgICAgIGlmIChwalswXSA9PSAiTSIpIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIHgyID0geDJtID0gcGpbMV07CisgICAg ICAgICAgICAgICAgICAgICAgICB5MiA9IHkybSA9IHBqWzJdOworICAgICAg ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKHBqWzBdID09ICJDIikgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJlejIgPSBbeDIsIHkyXS5jb25jYXQocGouc2xpY2UoMSkpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyID0gYmV6Mls2XTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICB5MiA9IGJlejJbN107CisgICAg ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJlejIgPSBbeDIsIHkyLCB4MiwgeTIsIHgybSwgeTJt LCB4Mm0sIHkybV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIg PSB4Mm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTIgPSB5Mm07 CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICAgICAgICB2YXIgaW50ciA9IGludGVySGVscGVyKGJlejEsIGJlejIsIGp1 c3RDb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoanVzdENv dW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzICs9IGlu dHI7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwLCBrayA9IGlu dHIubGVuZ3RoOyBrIDwga2s7IGsrKykgeworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnRyW2tdLnNlZ21lbnQxID0gaTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50cltrXS5zZWdtZW50MiA9IGo7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludHJba10uYmV6 MSA9IGJlejE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dHJba10uYmV6MiA9IGJlejI7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IHJlcy5j b25jYXQoaW50cik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9 CisgICAgZnVuY3Rpb24gaXNQb2ludEluc2lkZVBhdGgocGF0aCwgeCwgeSkg eworICAgICAgICB2YXIgYmJveCA9IHBhdGhCQm94KHBhdGgpOworICAgICAg ICByZXR1cm4gaXNQb2ludEluc2lkZUJCb3goYmJveCwgeCwgeSkgJiYKKyAg ICAgICAgICAgICAgIGludGVyUGF0aEhlbHBlcihwYXRoLCBbWyJNIiwgeCwg eV0sIFsiSCIsIGJib3gueDIgKyAxMF1dLCAxKSAlIDIgPT0gMTsKKyAgICB9 CisgICAgZnVuY3Rpb24gcGF0aEJCb3gocGF0aCkgeworICAgICAgICB2YXIg cHRoID0gcGF0aHMocGF0aCk7CisgICAgICAgIGlmIChwdGguYmJveCkgewor ICAgICAgICAgICAgcmV0dXJuIGNsb25lKHB0aC5iYm94KTsKKyAgICAgICAg fQorICAgICAgICBpZiAoIXBhdGgpIHsKKyAgICAgICAgICAgIHJldHVybiBi b3goKTsKKyAgICAgICAgfQorICAgICAgICBwYXRoID0gcGF0aDJjdXJ2ZShw YXRoKTsKKyAgICAgICAgdmFyIHggPSAwLAorICAgICAgICAgICAgeSA9IDAs CisgICAgICAgICAgICBYID0gW10sCisgICAgICAgICAgICBZID0gW10sCisg ICAgICAgICAgICBwOworICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBw YXRoLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgIHAgPSBw YXRoW2ldOworICAgICAgICAgICAgaWYgKHBbMF0gPT0gIk0iKSB7CisgICAg ICAgICAgICAgICAgeCA9IHBbMV07CisgICAgICAgICAgICAgICAgeSA9IHBb Ml07CisgICAgICAgICAgICAgICAgWC5wdXNoKHgpOworICAgICAgICAgICAg ICAgIFkucHVzaCh5KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgdmFyIGRpbSA9IGN1cnZlRGltKHgsIHksIHBbMV0sIHBbMl0s IHBbM10sIHBbNF0sIHBbNV0sIHBbNl0pOworICAgICAgICAgICAgICAgIFgg PSBYLmNvbmNhdChkaW0ubWluLngsIGRpbS5tYXgueCk7CisgICAgICAgICAg ICAgICAgWSA9IFkuY29uY2F0KGRpbS5taW4ueSwgZGltLm1heC55KTsKKyAg ICAgICAgICAgICAgICB4ID0gcFs1XTsKKyAgICAgICAgICAgICAgICB5ID0g cFs2XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIg eG1pbiA9IG1taW4uYXBwbHkoMCwgWCksCisgICAgICAgICAgICB5bWluID0g bW1pbi5hcHBseSgwLCBZKSwKKyAgICAgICAgICAgIHhtYXggPSBtbWF4LmFw cGx5KDAsIFgpLAorICAgICAgICAgICAgeW1heCA9IG1tYXguYXBwbHkoMCwg WSksCisgICAgICAgICAgICBiYiA9IGJveCh4bWluLCB5bWluLCB4bWF4IC0g eG1pbiwgeW1heCAtIHltaW4pOworICAgICAgICBwdGguYmJveCA9IGNsb25l KGJiKTsKKyAgICAgICAgcmV0dXJuIGJiOworICAgIH0KKyAgICBmdW5jdGlv biByZWN0UGF0aCh4LCB5LCB3LCBoLCByKSB7CisgICAgICAgIGlmIChyKSB7 CisgICAgICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgICAgIFsiTSIs ICt4ICsgKCtyKSwgeV0sCisgICAgICAgICAgICAgICAgWyJsIiwgdyAtIHIg KiAyLCAwXSwKKyAgICAgICAgICAgICAgICBbImEiLCByLCByLCAwLCAwLCAx LCByLCByXSwKKyAgICAgICAgICAgICAgICBbImwiLCAwLCBoIC0gciAqIDJd LAorICAgICAgICAgICAgICAgIFsiYSIsIHIsIHIsIDAsIDAsIDEsIC1yLCBy XSwKKyAgICAgICAgICAgICAgICBbImwiLCByICogMiAtIHcsIDBdLAorICAg ICAgICAgICAgICAgIFsiYSIsIHIsIHIsIDAsIDAsIDEsIC1yLCAtcl0sCisg ICAgICAgICAgICAgICAgWyJsIiwgMCwgciAqIDIgLSBoXSwKKyAgICAgICAg ICAgICAgICBbImEiLCByLCByLCAwLCAwLCAxLCByLCAtcl0sCisgICAgICAg ICAgICAgICAgWyJ6Il0KKyAgICAgICAgICAgIF07CisgICAgICAgIH0KKyAg ICAgICAgdmFyIHJlcyA9IFtbIk0iLCB4LCB5XSwgWyJsIiwgdywgMF0sIFsi bCIsIDAsIGhdLCBbImwiLCAtdywgMF0sIFsieiJdXTsKKyAgICAgICAgcmVz LnRvU3RyaW5nID0gdG9TdHJpbmc7CisgICAgICAgIHJldHVybiByZXM7Cisg ICAgfQorICAgIGZ1bmN0aW9uIGVsbGlwc2VQYXRoKHgsIHksIHJ4LCByeSwg YSkgeworICAgICAgICBpZiAoYSA9PSBudWxsICYmIHJ5ID09IG51bGwpIHsK KyAgICAgICAgICAgIHJ5ID0gcng7CisgICAgICAgIH0KKyAgICAgICAgeCA9 ICt4OworICAgICAgICB5ID0gK3k7CisgICAgICAgIHJ4ID0gK3J4OworICAg ICAgICByeSA9ICtyeTsKKyAgICAgICAgaWYgKGEgIT0gbnVsbCkgeworICAg ICAgICAgICAgdmFyIHJhZCA9IE1hdGguUEkgLyAxODAsCisgICAgICAgICAg ICAgICAgeDEgPSB4ICsgcnggKiBNYXRoLmNvcygtcnkgKiByYWQpLAorICAg ICAgICAgICAgICAgIHgyID0geCArIHJ4ICogTWF0aC5jb3MoLWEgKiByYWQp LAorICAgICAgICAgICAgICAgIHkxID0geSArIHJ4ICogTWF0aC5zaW4oLXJ5 ICogcmFkKSwKKyAgICAgICAgICAgICAgICB5MiA9IHkgKyByeCAqIE1hdGgu c2luKC1hICogcmFkKSwKKyAgICAgICAgICAgICAgICByZXMgPSBbWyJNIiwg eDEsIHkxXSwgWyJBIiwgcngsIHJ4LCAwLCArKGEgLSByeSA+IDE4MCksIDAs IHgyLCB5Ml1dOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmVz ID0gWworICAgICAgICAgICAgICAgIFsiTSIsIHgsIHldLAorICAgICAgICAg ICAgICAgIFsibSIsIDAsIC1yeV0sCisgICAgICAgICAgICAgICAgWyJhIiwg cngsIHJ5LCAwLCAxLCAxLCAwLCAyICogcnldLAorICAgICAgICAgICAgICAg IFsiYSIsIHJ4LCByeSwgMCwgMSwgMSwgMCwgLTIgKiByeV0sCisgICAgICAg ICAgICAgICAgWyJ6Il0KKyAgICAgICAgICAgIF07CisgICAgICAgIH0KKyAg ICAgICAgcmVzLnRvU3RyaW5nID0gdG9TdHJpbmc7CisgICAgICAgIHJldHVy biByZXM7CisgICAgfQorICAgIHZhciB1bml0MnB4ID0gU25hcC5fdW5pdDJw eCwKKyAgICAgICAgZ2V0UGF0aCA9IHsKKyAgICAgICAgcGF0aDogZnVuY3Rp b24gKGVsKSB7CisgICAgICAgICAgICByZXR1cm4gZWwuYXR0cigicGF0aCIp OworICAgICAgICB9LAorICAgICAgICBjaXJjbGU6IGZ1bmN0aW9uIChlbCkg eworICAgICAgICAgICAgdmFyIGF0dHIgPSB1bml0MnB4KGVsKTsKKyAgICAg ICAgICAgIHJldHVybiBlbGxpcHNlUGF0aChhdHRyLmN4LCBhdHRyLmN5LCBh dHRyLnIpOworICAgICAgICB9LAorICAgICAgICBlbGxpcHNlOiBmdW5jdGlv biAoZWwpIHsKKyAgICAgICAgICAgIHZhciBhdHRyID0gdW5pdDJweChlbCk7 CisgICAgICAgICAgICByZXR1cm4gZWxsaXBzZVBhdGgoYXR0ci5jeCB8fCAw LCBhdHRyLmN5IHx8IDAsIGF0dHIucngsIGF0dHIucnkpOworICAgICAgICB9 LAorICAgICAgICByZWN0OiBmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAgICAg IHZhciBhdHRyID0gdW5pdDJweChlbCk7CisgICAgICAgICAgICByZXR1cm4g cmVjdFBhdGgoYXR0ci54IHx8IDAsIGF0dHIueSB8fCAwLCBhdHRyLndpZHRo LCBhdHRyLmhlaWdodCwgYXR0ci5yeCwgYXR0ci5yeSk7CisgICAgICAgIH0s CisgICAgICAgIGltYWdlOiBmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAgICAg IHZhciBhdHRyID0gdW5pdDJweChlbCk7CisgICAgICAgICAgICByZXR1cm4g cmVjdFBhdGgoYXR0ci54IHx8IDAsIGF0dHIueSB8fCAwLCBhdHRyLndpZHRo LCBhdHRyLmhlaWdodCk7CisgICAgICAgIH0sCisgICAgICAgIGxpbmU6IGZ1 bmN0aW9uIChlbCkgeworICAgICAgICAgICAgcmV0dXJuICJNIiArIFtlbC5h dHRyKCJ4MSIpIHx8IDAsIGVsLmF0dHIoInkxIikgfHwgMCwgZWwuYXR0cigi eDIiKSwgZWwuYXR0cigieTIiKV07CisgICAgICAgIH0sCisgICAgICAgIHBv bHlsaW5lOiBmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAgICAgIHJldHVybiAi TSIgKyBlbC5hdHRyKCJwb2ludHMiKTsKKyAgICAgICAgfSwKKyAgICAgICAg cG9seWdvbjogZnVuY3Rpb24gKGVsKSB7CisgICAgICAgICAgICByZXR1cm4g Ik0iICsgZWwuYXR0cigicG9pbnRzIikgKyAieiI7CisgICAgICAgIH0sCisg ICAgICAgIGRlZmx0OiBmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAgICAgIHZh ciBiYm94ID0gZWwubm9kZS5nZXRCQm94KCk7CisgICAgICAgICAgICByZXR1 cm4gcmVjdFBhdGgoYmJveC54LCBiYm94LnksIGJib3gud2lkdGgsIGJib3gu aGVpZ2h0KTsKKyAgICAgICAgfQorICAgIH07CisgICAgZnVuY3Rpb24gcGF0 aFRvUmVsYXRpdmUocGF0aEFycmF5KSB7CisgICAgICAgIHZhciBwdGggPSBw YXRocyhwYXRoQXJyYXkpLAorICAgICAgICAgICAgbG93ZXJDYXNlID0gU3Ry aW5nLnByb3RvdHlwZS50b0xvd2VyQ2FzZTsKKyAgICAgICAgaWYgKHB0aC5y ZWwpIHsKKyAgICAgICAgICAgIHJldHVybiBwYXRoQ2xvbmUocHRoLnJlbCk7 CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFTbmFwLmlzKHBhdGhBcnJheSwg ImFycmF5IikgfHwgIVNuYXAuaXMocGF0aEFycmF5ICYmIHBhdGhBcnJheVsw XSwgImFycmF5IikpIHsKKyAgICAgICAgICAgIHBhdGhBcnJheSA9IFNuYXAu cGFyc2VQYXRoU3RyaW5nKHBhdGhBcnJheSk7CisgICAgICAgIH0KKyAgICAg ICAgdmFyIHJlcyA9IFtdLAorICAgICAgICAgICAgeCA9IDAsCisgICAgICAg ICAgICB5ID0gMCwKKyAgICAgICAgICAgIG14ID0gMCwKKyAgICAgICAgICAg IG15ID0gMCwKKyAgICAgICAgICAgIHN0YXJ0ID0gMDsKKyAgICAgICAgaWYg KHBhdGhBcnJheVswXVswXSA9PSAiTSIpIHsKKyAgICAgICAgICAgIHggPSBw YXRoQXJyYXlbMF1bMV07CisgICAgICAgICAgICB5ID0gcGF0aEFycmF5WzBd WzJdOworICAgICAgICAgICAgbXggPSB4OworICAgICAgICAgICAgbXkgPSB5 OworICAgICAgICAgICAgc3RhcnQrKzsKKyAgICAgICAgICAgIHJlcy5wdXNo KFsiTSIsIHgsIHldKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBp ID0gc3RhcnQsIGlpID0gcGF0aEFycmF5Lmxlbmd0aDsgaSA8IGlpOyBpKysp IHsKKyAgICAgICAgICAgIHZhciByID0gcmVzW2ldID0gW10sCisgICAgICAg ICAgICAgICAgcGEgPSBwYXRoQXJyYXlbaV07CisgICAgICAgICAgICBpZiAo cGFbMF0gIT0gbG93ZXJDYXNlLmNhbGwocGFbMF0pKSB7CisgICAgICAgICAg ICAgICAgclswXSA9IGxvd2VyQ2FzZS5jYWxsKHBhWzBdKTsKKyAgICAgICAg ICAgICAgICBzd2l0Y2ggKHJbMF0pIHsKKyAgICAgICAgICAgICAgICAgICAg Y2FzZSAiYSI6CisgICAgICAgICAgICAgICAgICAgICAgICByWzFdID0gcGFb MV07CisgICAgICAgICAgICAgICAgICAgICAgICByWzJdID0gcGFbMl07Cisg ICAgICAgICAgICAgICAgICAgICAgICByWzNdID0gcGFbM107CisgICAgICAg ICAgICAgICAgICAgICAgICByWzRdID0gcGFbNF07CisgICAgICAgICAgICAg ICAgICAgICAgICByWzVdID0gcGFbNV07CisgICAgICAgICAgICAgICAgICAg ICAgICByWzZdID0gKyhwYVs2XSAtIHgpLnRvRml4ZWQoMyk7CisgICAgICAg ICAgICAgICAgICAgICAgICByWzddID0gKyhwYVs3XSAtIHkpLnRvRml4ZWQo Myk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgICAgICAgY2FzZSAidiI6CisgICAgICAgICAgICAgICAgICAgICAg ICByWzFdID0gKyhwYVsxXSAtIHkpLnRvRml4ZWQoMyk7CisgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2Fz ZSAibSI6CisgICAgICAgICAgICAgICAgICAgICAgICBteCA9IHBhWzFdOwor ICAgICAgICAgICAgICAgICAgICAgICAgbXkgPSBwYVsyXTsKKyAgICAgICAg ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAg IGZvciAodmFyIGogPSAxLCBqaiA9IHBhLmxlbmd0aDsgaiA8IGpqOyBqKysp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByW2pdID0gKyhwYVtq XSAtICgoaiAlIDIpID8geCA6IHkpKS50b0ZpeGVkKDMpOworICAgICAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgciA9IHJlc1tpXSA9IFtd OworICAgICAgICAgICAgICAgIGlmIChwYVswXSA9PSAibSIpIHsKKyAgICAg ICAgICAgICAgICAgICAgbXggPSBwYVsxXSArIHg7CisgICAgICAgICAgICAg ICAgICAgIG15ID0gcGFbMl0gKyB5OworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMCwga2sgPSBwYS5sZW5ndGg7 IGsgPCBrazsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc1tpXVtr XSA9IHBhW2tdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIHZhciBsZW4gPSByZXNbaV0ubGVuZ3RoOworICAgICAg ICAgICAgc3dpdGNoIChyZXNbaV1bMF0pIHsKKyAgICAgICAgICAgICAgICBj YXNlICJ6IjoKKyAgICAgICAgICAgICAgICAgICAgeCA9IG14OworICAgICAg ICAgICAgICAgICAgICB5ID0gbXk7CisgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgIGNhc2UgImgiOgorICAgICAgICAgICAg ICAgICAgICB4ICs9ICtyZXNbaV1bbGVuIC0gMV07CisgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgInYiOgorICAg ICAgICAgICAgICAgICAgICB5ICs9ICtyZXNbaV1bbGVuIC0gMV07CisgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1 bHQ6CisgICAgICAgICAgICAgICAgICAgIHggKz0gK3Jlc1tpXVtsZW4gLSAy XTsKKyAgICAgICAgICAgICAgICAgICAgeSArPSArcmVzW2ldW2xlbiAtIDFd OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJlcy50b1N0 cmluZyA9IHRvU3RyaW5nOworICAgICAgICBwdGgucmVsID0gcGF0aENsb25l KHJlcyk7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorICAgIGZ1bmN0 aW9uIHBhdGhUb0Fic29sdXRlKHBhdGhBcnJheSkgeworICAgICAgICB2YXIg cHRoID0gcGF0aHMocGF0aEFycmF5KTsKKyAgICAgICAgaWYgKHB0aC5hYnMp IHsKKyAgICAgICAgICAgIHJldHVybiBwYXRoQ2xvbmUocHRoLmFicyk7Cisg ICAgICAgIH0KKyAgICAgICAgaWYgKCFpcyhwYXRoQXJyYXksICJhcnJheSIp IHx8ICFpcyhwYXRoQXJyYXkgJiYgcGF0aEFycmF5WzBdLCAiYXJyYXkiKSkg eyAvLyByb3VnaCBhc3N1bXB0aW9uCisgICAgICAgICAgICBwYXRoQXJyYXkg PSBTbmFwLnBhcnNlUGF0aFN0cmluZyhwYXRoQXJyYXkpOworICAgICAgICB9 CisgICAgICAgIGlmICghcGF0aEFycmF5IHx8ICFwYXRoQXJyYXkubGVuZ3Ro KSB7CisgICAgICAgICAgICByZXR1cm4gW1siTSIsIDAsIDBdXTsKKyAgICAg ICAgfQorICAgICAgICB2YXIgcmVzID0gW10sCisgICAgICAgICAgICB4ID0g MCwKKyAgICAgICAgICAgIHkgPSAwLAorICAgICAgICAgICAgbXggPSAwLAor ICAgICAgICAgICAgbXkgPSAwLAorICAgICAgICAgICAgc3RhcnQgPSAwLAor ICAgICAgICAgICAgcGEwOworICAgICAgICBpZiAocGF0aEFycmF5WzBdWzBd ID09ICJNIikgeworICAgICAgICAgICAgeCA9ICtwYXRoQXJyYXlbMF1bMV07 CisgICAgICAgICAgICB5ID0gK3BhdGhBcnJheVswXVsyXTsKKyAgICAgICAg ICAgIG14ID0geDsKKyAgICAgICAgICAgIG15ID0geTsKKyAgICAgICAgICAg IHN0YXJ0Kys7CisgICAgICAgICAgICByZXNbMF0gPSBbIk0iLCB4LCB5XTsK KyAgICAgICAgfQorICAgICAgICB2YXIgY3J6ID0gcGF0aEFycmF5Lmxlbmd0 aCA9PSAzICYmCisgICAgICAgICAgICBwYXRoQXJyYXlbMF1bMF0gPT0gIk0i ICYmCisgICAgICAgICAgICBwYXRoQXJyYXlbMV1bMF0udG9VcHBlckNhc2Uo KSA9PSAiUiIgJiYKKyAgICAgICAgICAgIHBhdGhBcnJheVsyXVswXS50b1Vw cGVyQ2FzZSgpID09ICJaIjsKKyAgICAgICAgZm9yICh2YXIgciwgcGEsIGkg PSBzdGFydCwgaWkgPSBwYXRoQXJyYXkubGVuZ3RoOyBpIDwgaWk7IGkrKykg eworICAgICAgICAgICAgcmVzLnB1c2gociA9IFtdKTsKKyAgICAgICAgICAg IHBhID0gcGF0aEFycmF5W2ldOworICAgICAgICAgICAgcGEwID0gcGFbMF07 CisgICAgICAgICAgICBpZiAocGEwICE9IHBhMC50b1VwcGVyQ2FzZSgpKSB7 CisgICAgICAgICAgICAgICAgclswXSA9IHBhMC50b1VwcGVyQ2FzZSgpOwor ICAgICAgICAgICAgICAgIHN3aXRjaCAoclswXSkgeworICAgICAgICAgICAg ICAgICAgICBjYXNlICJBIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJb MV0gPSBwYVsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJbMl0gPSBw YVsyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJbM10gPSBwYVszXTsK KyAgICAgICAgICAgICAgICAgICAgICAgIHJbNF0gPSBwYVs0XTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHJbNV0gPSBwYVs1XTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHJbNl0gPSArcGFbNl0gKyB4OworICAgICAgICAgICAg ICAgICAgICAgICAgcls3XSA9ICtwYVs3XSArIHk7CisgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAi ViI6CisgICAgICAgICAgICAgICAgICAgICAgICByWzFdID0gK3BhWzFdICsg eTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgICAgICAgICBjYXNlICJIIjoKKyAgICAgICAgICAgICAgICAgICAgICAg IHJbMV0gPSArcGFbMV0gKyB4OworICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIlIiOgorICAgICAg ICAgICAgICAgICAgICAgICAgdmFyIGRvdHMgPSBbeCwgeV0uY29uY2F0KHBh LnNsaWNlKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFy IGogPSAyLCBqaiA9IGRvdHMubGVuZ3RoOyBqIDwgamo7IGorKykgeworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRvdHNbal0gPSArZG90c1tqXSAr IHg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90c1srK2pdID0g K2RvdHNbal0gKyB5OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICAgICAgcmVzLnBvcCgpOworICAgICAgICAgICAg ICAgICAgICAgICAgcmVzID0gcmVzLmNvbmNhdChjYXRtdWxsUm9tMmJlemll cihkb3RzLCBjcnopKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICAgICAgICBjYXNlICJPIjoKKyAgICAgICAgICAg ICAgICAgICAgICAgIHJlcy5wb3AoKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGRvdHMgPSBlbGxpcHNlUGF0aCh4LCB5LCBwYVsxXSwgcGFbMl0pOwor ICAgICAgICAgICAgICAgICAgICAgICAgZG90cy5wdXNoKGRvdHNbMF0pOwor ICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gcmVzLmNvbmNhdChkb3Rz KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgICAgICAgICBjYXNlICJVIjoKKyAgICAgICAgICAgICAgICAgICAgICAg IHJlcy5wb3AoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IHJl cy5jb25jYXQoZWxsaXBzZVBhdGgoeCwgeSwgcGFbMV0sIHBhWzJdLCBwYVsz XSkpOworICAgICAgICAgICAgICAgICAgICAgICAgciA9IFsiVSJdLmNvbmNh dChyZXNbcmVzLmxlbmd0aCAtIDFdLnNsaWNlKC0yKSk7CisgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2Fz ZSAiTSI6CisgICAgICAgICAgICAgICAgICAgICAgICBteCA9ICtwYVsxXSAr IHg7CisgICAgICAgICAgICAgICAgICAgICAgICBteSA9ICtwYVsyXSArIHk7 CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg ICAgICAgICAgICBmb3IgKGogPSAxLCBqaiA9IHBhLmxlbmd0aDsgaiA8IGpq OyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByW2pdID0g K3BhW2pdICsgKChqICUgMikgPyB4IDogeSk7CisgICAgICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl bHNlIGlmIChwYTAgPT0gIlIiKSB7CisgICAgICAgICAgICAgICAgZG90cyA9 IFt4LCB5XS5jb25jYXQocGEuc2xpY2UoMSkpOworICAgICAgICAgICAgICAg IHJlcy5wb3AoKTsKKyAgICAgICAgICAgICAgICByZXMgPSByZXMuY29uY2F0 KGNhdG11bGxSb20yYmV6aWVyKGRvdHMsIGNyeikpOworICAgICAgICAgICAg ICAgIHIgPSBbIlIiXS5jb25jYXQocGEuc2xpY2UoLTIpKTsKKyAgICAgICAg ICAgIH0gZWxzZSBpZiAocGEwID09ICJPIikgeworICAgICAgICAgICAgICAg IHJlcy5wb3AoKTsKKyAgICAgICAgICAgICAgICBkb3RzID0gZWxsaXBzZVBh dGgoeCwgeSwgcGFbMV0sIHBhWzJdKTsKKyAgICAgICAgICAgICAgICBkb3Rz LnB1c2goZG90c1swXSk7CisgICAgICAgICAgICAgICAgcmVzID0gcmVzLmNv bmNhdChkb3RzKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocGEwID09ICJV IikgeworICAgICAgICAgICAgICAgIHJlcy5wb3AoKTsKKyAgICAgICAgICAg ICAgICByZXMgPSByZXMuY29uY2F0KGVsbGlwc2VQYXRoKHgsIHksIHBhWzFd LCBwYVsyXSwgcGFbM10pKTsKKyAgICAgICAgICAgICAgICByID0gWyJVIl0u Y29uY2F0KHJlc1tyZXMubGVuZ3RoIC0gMV0uc2xpY2UoLTIpKTsKKyAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9 IDAsIGtrID0gcGEubGVuZ3RoOyBrIDwga2s7IGsrKykgeworICAgICAgICAg ICAgICAgICAgICByW2tdID0gcGFba107CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfQorICAgICAgICAgICAgcGEwID0gcGEwLnRvVXBwZXJD YXNlKCk7CisgICAgICAgICAgICBpZiAocGEwICE9ICJPIikgeworICAgICAg ICAgICAgICAgIHN3aXRjaCAoclswXSkgeworICAgICAgICAgICAgICAgICAg ICBjYXNlICJaIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHggPSArbXg7 CisgICAgICAgICAgICAgICAgICAgICAgICB5ID0gK215OworICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNh c2UgIkgiOgorICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHJbMV07Cisg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgICAgY2FzZSAiViI6CisgICAgICAgICAgICAgICAgICAgICAgICB5ID0g clsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgICAgICBjYXNlICJNIjoKKyAgICAgICAgICAgICAgICAgICAg ICAgIG14ID0gcltyLmxlbmd0aCAtIDJdOworICAgICAgICAgICAgICAgICAg ICAgICAgbXkgPSByW3IubGVuZ3RoIC0gMV07CisgICAgICAgICAgICAgICAg ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICB4ID0gclty Lmxlbmd0aCAtIDJdOworICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHJb ci5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9CisgICAgICAgIH0KKyAgICAgICAgcmVzLnRvU3RyaW5nID0gdG9TdHJp bmc7CisgICAgICAgIHB0aC5hYnMgPSBwYXRoQ2xvbmUocmVzKTsKKyAgICAg ICAgcmV0dXJuIHJlczsKKyAgICB9CisgICAgZnVuY3Rpb24gbDJjKHgxLCB5 MSwgeDIsIHkyKSB7CisgICAgICAgIHJldHVybiBbeDEsIHkxLCB4MiwgeTIs IHgyLCB5Ml07CisgICAgfQorICAgIGZ1bmN0aW9uIHEyYyh4MSwgeTEsIGF4 LCBheSwgeDIsIHkyKSB7CisgICAgICAgIHZhciBfMTMgPSAxIC8gMywKKyAg ICAgICAgICAgIF8yMyA9IDIgLyAzOworICAgICAgICByZXR1cm4gWworICAg ICAgICAgICAgICAgIF8xMyAqIHgxICsgXzIzICogYXgsCisgICAgICAgICAg ICAgICAgXzEzICogeTEgKyBfMjMgKiBheSwKKyAgICAgICAgICAgICAgICBf MTMgKiB4MiArIF8yMyAqIGF4LAorICAgICAgICAgICAgICAgIF8xMyAqIHky ICsgXzIzICogYXksCisgICAgICAgICAgICAgICAgeDIsCisgICAgICAgICAg ICAgICAgeTIKKyAgICAgICAgICAgIF07CisgICAgfQorICAgIGZ1bmN0aW9u IGEyYyh4MSwgeTEsIHJ4LCByeSwgYW5nbGUsIGxhcmdlX2FyY19mbGFnLCBz d2VlcF9mbGFnLCB4MiwgeTIsIHJlY3Vyc2l2ZSkgeworICAgICAgICAvLyBm b3IgbW9yZSBpbmZvcm1hdGlvbiBvZiB3aGVyZSB0aGlzIG1hdGggY2FtZSBm cm9tIHZpc2l0OgorICAgICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9T VkcxMS9pbXBsbm90ZS5odG1sI0FyY0ltcGxlbWVudGF0aW9uTm90ZXMKKyAg ICAgICAgdmFyIF8xMjAgPSBQSSAqIDEyMCAvIDE4MCwKKyAgICAgICAgICAg IHJhZCA9IFBJIC8gMTgwICogKCthbmdsZSB8fCAwKSwKKyAgICAgICAgICAg IHJlcyA9IFtdLAorICAgICAgICAgICAgeHksCisgICAgICAgICAgICByb3Rh dGUgPSBTbmFwLl8uY2FjaGVyKGZ1bmN0aW9uICh4LCB5LCByYWQpIHsKKyAg ICAgICAgICAgICAgICB2YXIgWCA9IHggKiBtYXRoLmNvcyhyYWQpIC0geSAq IG1hdGguc2luKHJhZCksCisgICAgICAgICAgICAgICAgICAgIFkgPSB4ICog bWF0aC5zaW4ocmFkKSArIHkgKiBtYXRoLmNvcyhyYWQpOworICAgICAgICAg ICAgICAgIHJldHVybiB7eDogWCwgeTogWX07CisgICAgICAgICAgICB9KTsK KyAgICAgICAgaWYgKCFyZWN1cnNpdmUpIHsKKyAgICAgICAgICAgIHh5ID0g cm90YXRlKHgxLCB5MSwgLXJhZCk7CisgICAgICAgICAgICB4MSA9IHh5Lng7 CisgICAgICAgICAgICB5MSA9IHh5Lnk7CisgICAgICAgICAgICB4eSA9IHJv dGF0ZSh4MiwgeTIsIC1yYWQpOworICAgICAgICAgICAgeDIgPSB4eS54Owor ICAgICAgICAgICAgeTIgPSB4eS55OworICAgICAgICAgICAgdmFyIGNvcyA9 IG1hdGguY29zKFBJIC8gMTgwICogYW5nbGUpLAorICAgICAgICAgICAgICAg IHNpbiA9IG1hdGguc2luKFBJIC8gMTgwICogYW5nbGUpLAorICAgICAgICAg ICAgICAgIHggPSAoeDEgLSB4MikgLyAyLAorICAgICAgICAgICAgICAgIHkg PSAoeTEgLSB5MikgLyAyOworICAgICAgICAgICAgdmFyIGggPSAoeCAqIHgp IC8gKHJ4ICogcngpICsgKHkgKiB5KSAvIChyeSAqIHJ5KTsKKyAgICAgICAg ICAgIGlmIChoID4gMSkgeworICAgICAgICAgICAgICAgIGggPSBtYXRoLnNx cnQoaCk7CisgICAgICAgICAgICAgICAgcnggPSBoICogcng7CisgICAgICAg ICAgICAgICAgcnkgPSBoICogcnk7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICB2YXIgcngyID0gcnggKiByeCwKKyAgICAgICAgICAgICAgICByeTIg PSByeSAqIHJ5LAorICAgICAgICAgICAgICAgIGsgPSAobGFyZ2VfYXJjX2Zs YWcgPT0gc3dlZXBfZmxhZyA/IC0xIDogMSkgKgorICAgICAgICAgICAgICAg ICAgICBtYXRoLnNxcnQoYWJzKChyeDIgKiByeTIgLSByeDIgKiB5ICogeSAt IHJ5MiAqIHggKiB4KSAvIChyeDIgKiB5ICogeSArIHJ5MiAqIHggKiB4KSkp LAorICAgICAgICAgICAgICAgIGN4ID0gayAqIHJ4ICogeSAvIHJ5ICsgKHgx ICsgeDIpIC8gMiwKKyAgICAgICAgICAgICAgICBjeSA9IGsgKiAtcnkgKiB4 IC8gcnggKyAoeTEgKyB5MikgLyAyLAorICAgICAgICAgICAgICAgIGYxID0g bWF0aC5hc2luKCgoeTEgLSBjeSkgLyByeSkudG9GaXhlZCg5KSksCisgICAg ICAgICAgICAgICAgZjIgPSBtYXRoLmFzaW4oKCh5MiAtIGN5KSAvIHJ5KS50 b0ZpeGVkKDkpKTsKKworICAgICAgICAgICAgZjEgPSB4MSA8IGN4ID8gUEkg LSBmMSA6IGYxOworICAgICAgICAgICAgZjIgPSB4MiA8IGN4ID8gUEkgLSBm MiA6IGYyOworICAgICAgICAgICAgZjEgPCAwICYmIChmMSA9IFBJICogMiAr IGYxKTsKKyAgICAgICAgICAgIGYyIDwgMCAmJiAoZjIgPSBQSSAqIDIgKyBm Mik7CisgICAgICAgICAgICBpZiAoc3dlZXBfZmxhZyAmJiBmMSA+IGYyKSB7 CisgICAgICAgICAgICAgICAgZjEgPSBmMSAtIFBJICogMjsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGlmICghc3dlZXBfZmxhZyAmJiBmMiA+IGYx KSB7CisgICAgICAgICAgICAgICAgZjIgPSBmMiAtIFBJICogMjsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGYxID0g cmVjdXJzaXZlWzBdOworICAgICAgICAgICAgZjIgPSByZWN1cnNpdmVbMV07 CisgICAgICAgICAgICBjeCA9IHJlY3Vyc2l2ZVsyXTsKKyAgICAgICAgICAg IGN5ID0gcmVjdXJzaXZlWzNdOworICAgICAgICB9CisgICAgICAgIHZhciBk ZiA9IGYyIC0gZjE7CisgICAgICAgIGlmIChhYnMoZGYpID4gXzEyMCkgewor ICAgICAgICAgICAgdmFyIGYyb2xkID0gZjIsCisgICAgICAgICAgICAgICAg eDJvbGQgPSB4MiwKKyAgICAgICAgICAgICAgICB5Mm9sZCA9IHkyOworICAg ICAgICAgICAgZjIgPSBmMSArIF8xMjAgKiAoc3dlZXBfZmxhZyAmJiBmMiA+ IGYxID8gMSA6IC0xKTsKKyAgICAgICAgICAgIHgyID0gY3ggKyByeCAqIG1h dGguY29zKGYyKTsKKyAgICAgICAgICAgIHkyID0gY3kgKyByeSAqIG1hdGgu c2luKGYyKTsKKyAgICAgICAgICAgIHJlcyA9IGEyYyh4MiwgeTIsIHJ4LCBy eSwgYW5nbGUsIDAsIHN3ZWVwX2ZsYWcsIHgyb2xkLCB5Mm9sZCwgW2YyLCBm Mm9sZCwgY3gsIGN5XSk7CisgICAgICAgIH0KKyAgICAgICAgZGYgPSBmMiAt IGYxOworICAgICAgICB2YXIgYzEgPSBtYXRoLmNvcyhmMSksCisgICAgICAg ICAgICBzMSA9IG1hdGguc2luKGYxKSwKKyAgICAgICAgICAgIGMyID0gbWF0 aC5jb3MoZjIpLAorICAgICAgICAgICAgczIgPSBtYXRoLnNpbihmMiksCisg ICAgICAgICAgICB0ID0gbWF0aC50YW4oZGYgLyA0KSwKKyAgICAgICAgICAg IGh4ID0gNCAvIDMgKiByeCAqIHQsCisgICAgICAgICAgICBoeSA9IDQgLyAz ICogcnkgKiB0LAorICAgICAgICAgICAgbTEgPSBbeDEsIHkxXSwKKyAgICAg ICAgICAgIG0yID0gW3gxICsgaHggKiBzMSwgeTEgLSBoeSAqIGMxXSwKKyAg ICAgICAgICAgIG0zID0gW3gyICsgaHggKiBzMiwgeTIgLSBoeSAqIGMyXSwK KyAgICAgICAgICAgIG00ID0gW3gyLCB5Ml07CisgICAgICAgIG0yWzBdID0g MiAqIG0xWzBdIC0gbTJbMF07CisgICAgICAgIG0yWzFdID0gMiAqIG0xWzFd IC0gbTJbMV07CisgICAgICAgIGlmIChyZWN1cnNpdmUpIHsKKyAgICAgICAg ICAgIHJldHVybiBbbTIsIG0zLCBtNF0uY29uY2F0KHJlcyk7CisgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICByZXMgPSBbbTIsIG0zLCBtNF0uY29u Y2F0KHJlcykuam9pbigpLnNwbGl0KCIsIik7CisgICAgICAgICAgICB2YXIg bmV3cmVzID0gW107CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkg PSByZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAgICAg IG5ld3Jlc1tpXSA9IGkgJSAyID8gcm90YXRlKHJlc1tpIC0gMV0sIHJlc1tp XSwgcmFkKS55IDogcm90YXRlKHJlc1tpXSwgcmVzW2kgKyAxXSwgcmFkKS54 OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG5ld3JlczsK KyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiBmaW5kRG90QXRTZWdt ZW50KHAxeCwgcDF5LCBjMXgsIGMxeSwgYzJ4LCBjMnksIHAyeCwgcDJ5LCB0 KSB7CisgICAgICAgIHZhciB0MSA9IDEgLSB0OworICAgICAgICByZXR1cm4g eworICAgICAgICAgICAgeDogcG93KHQxLCAzKSAqIHAxeCArIHBvdyh0MSwg MikgKiAzICogdCAqIGMxeCArIHQxICogMyAqIHQgKiB0ICogYzJ4ICsgcG93 KHQsIDMpICogcDJ4LAorICAgICAgICAgICAgeTogcG93KHQxLCAzKSAqIHAx eSArIHBvdyh0MSwgMikgKiAzICogdCAqIGMxeSArIHQxICogMyAqIHQgKiB0 ICogYzJ5ICsgcG93KHQsIDMpICogcDJ5CisgICAgICAgIH07CisgICAgfQor CisgICAgLy8gUmV0dXJucyBib3VuZGluZyBib3ggb2YgY3ViaWMgYmV6aWVy IGN1cnZlLgorICAgIC8vIFNvdXJjZTogaHR0cDovL2Jsb2cuaGFja2Vycy1j YWZlLm5ldC8yMDA5LzA2L2hvdy10by1jYWxjdWxhdGUtYmV6aWVyLWN1cnZl cy1ib3VuZGluZy5odG1sCisgICAgLy8gT3JpZ2luYWwgdmVyc2lvbjogTklT SElPIEhpcm9rYXp1CisgICAgLy8gTW9kaWZpY2F0aW9uczogaHR0cHM6Ly9n aXRodWIuY29tL3RpbW8yMjM0NQorICAgIGZ1bmN0aW9uIGN1cnZlRGltKHgw LCB5MCwgeDEsIHkxLCB4MiwgeTIsIHgzLCB5MykgeworICAgICAgICB2YXIg dHZhbHVlcyA9IFtdLAorICAgICAgICAgICAgYm91bmRzID0gW1tdLCBbXV0s CisgICAgICAgICAgICBhLCBiLCBjLCB0LCB0MSwgdDIsIGIyYWMsIHNxcnRi MmFjOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI7ICsraSkgewor ICAgICAgICAgICAgaWYgKGkgPT0gMCkgeworICAgICAgICAgICAgICAgIGIg PSA2ICogeDAgLSAxMiAqIHgxICsgNiAqIHgyOworICAgICAgICAgICAgICAg IGEgPSAtMyAqIHgwICsgOSAqIHgxIC0gOSAqIHgyICsgMyAqIHgzOworICAg ICAgICAgICAgICAgIGMgPSAzICogeDEgLSAzICogeDA7CisgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGIgPSA2ICogeTAgLSAxMiAq IHkxICsgNiAqIHkyOworICAgICAgICAgICAgICAgIGEgPSAtMyAqIHkwICsg OSAqIHkxIC0gOSAqIHkyICsgMyAqIHkzOworICAgICAgICAgICAgICAgIGMg PSAzICogeTEgLSAzICogeTA7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBpZiAoYWJzKGEpIDwgMWUtMTIpIHsKKyAgICAgICAgICAgICAgICBpZiAo YWJzKGIpIDwgMWUtMTIpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGlu dWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHQgPSAt YyAvIGI7CisgICAgICAgICAgICAgICAgaWYgKDAgPCB0ICYmIHQgPCAxKSB7 CisgICAgICAgICAgICAgICAgICAgIHR2YWx1ZXMucHVzaCh0KTsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBiMmFjID0gYiAqIGIgLSA0ICogYyAq IGE7CisgICAgICAgICAgICBzcXJ0YjJhYyA9IG1hdGguc3FydChiMmFjKTsK KyAgICAgICAgICAgIGlmIChiMmFjIDwgMCkgeworICAgICAgICAgICAgICAg IGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdDEgPSAo LWIgKyBzcXJ0YjJhYykgLyAoMiAqIGEpOworICAgICAgICAgICAgaWYgKDAg PCB0MSAmJiB0MSA8IDEpIHsKKyAgICAgICAgICAgICAgICB0dmFsdWVzLnB1 c2godDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdDIgPSAoLWIg LSBzcXJ0YjJhYykgLyAoMiAqIGEpOworICAgICAgICAgICAgaWYgKDAgPCB0 MiAmJiB0MiA8IDEpIHsKKyAgICAgICAgICAgICAgICB0dmFsdWVzLnB1c2go dDIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdmFy IHgsIHksIGogPSB0dmFsdWVzLmxlbmd0aCwKKyAgICAgICAgICAgIGpsZW4g PSBqLAorICAgICAgICAgICAgbXQ7CisgICAgICAgIHdoaWxlIChqLS0pIHsK KyAgICAgICAgICAgIHQgPSB0dmFsdWVzW2pdOworICAgICAgICAgICAgbXQg PSAxIC0gdDsKKyAgICAgICAgICAgIGJvdW5kc1swXVtqXSA9IChtdCAqIG10 ICogbXQgKiB4MCkgKyAoMyAqIG10ICogbXQgKiB0ICogeDEpICsgKDMgKiBt dCAqIHQgKiB0ICogeDIpICsgKHQgKiB0ICogdCAqIHgzKTsKKyAgICAgICAg ICAgIGJvdW5kc1sxXVtqXSA9IChtdCAqIG10ICogbXQgKiB5MCkgKyAoMyAq IG10ICogbXQgKiB0ICogeTEpICsgKDMgKiBtdCAqIHQgKiB0ICogeTIpICsg KHQgKiB0ICogdCAqIHkzKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvdW5k c1swXVtqbGVuXSA9IHgwOworICAgICAgICBib3VuZHNbMV1bamxlbl0gPSB5 MDsKKyAgICAgICAgYm91bmRzWzBdW2psZW4gKyAxXSA9IHgzOworICAgICAg ICBib3VuZHNbMV1bamxlbiArIDFdID0geTM7CisgICAgICAgIGJvdW5kc1sw XS5sZW5ndGggPSBib3VuZHNbMV0ubGVuZ3RoID0gamxlbiArIDI7CisKKwor ICAgICAgICByZXR1cm4geworICAgICAgICAgIG1pbjoge3g6IG1taW4uYXBw bHkoMCwgYm91bmRzWzBdKSwgeTogbW1pbi5hcHBseSgwLCBib3VuZHNbMV0p fSwKKyAgICAgICAgICBtYXg6IHt4OiBtbWF4LmFwcGx5KDAsIGJvdW5kc1sw XSksIHk6IG1tYXguYXBwbHkoMCwgYm91bmRzWzFdKX0KKyAgICAgICAgfTsK KyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXRoMmN1cnZlKHBhdGgsIHBhdGgy KSB7CisgICAgICAgIHZhciBwdGggPSAhcGF0aDIgJiYgcGF0aHMocGF0aCk7 CisgICAgICAgIGlmICghcGF0aDIgJiYgcHRoLmN1cnZlKSB7CisgICAgICAg ICAgICByZXR1cm4gcGF0aENsb25lKHB0aC5jdXJ2ZSk7CisgICAgICAgIH0K KyAgICAgICAgdmFyIHAgPSBwYXRoVG9BYnNvbHV0ZShwYXRoKSwKKyAgICAg ICAgICAgIHAyID0gcGF0aDIgJiYgcGF0aFRvQWJzb2x1dGUocGF0aDIpLAor ICAgICAgICAgICAgYXR0cnMgPSB7eDogMCwgeTogMCwgYng6IDAsIGJ5OiAw LCBYOiAwLCBZOiAwLCBxeDogbnVsbCwgcXk6IG51bGx9LAorICAgICAgICAg ICAgYXR0cnMyID0ge3g6IDAsIHk6IDAsIGJ4OiAwLCBieTogMCwgWDogMCwg WTogMCwgcXg6IG51bGwsIHF5OiBudWxsfSwKKyAgICAgICAgICAgIHByb2Nl c3NQYXRoID0gZnVuY3Rpb24gKHBhdGgsIGQsIHBjb20pIHsKKyAgICAgICAg ICAgICAgICB2YXIgbngsIG55OworICAgICAgICAgICAgICAgIGlmICghcGF0 aCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyJDIiwgZC54LCBk LnksIGQueCwgZC55LCBkLngsIGQueV07CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICEocGF0aFswXSBpbiB7VDogMSwgUTogMX0pICYm IChkLnF4ID0gZC5xeSA9IG51bGwpOworICAgICAgICAgICAgICAgIHN3aXRj aCAocGF0aFswXSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlICJNIjoK KyAgICAgICAgICAgICAgICAgICAgICAgIGQuWCA9IHBhdGhbMV07CisgICAg ICAgICAgICAgICAgICAgICAgICBkLlkgPSBwYXRoWzJdOworICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNh c2UgIkEiOgorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IFsiQyJd LmNvbmNhdChhMmMuYXBwbHkoMCwgW2QueCwgZC55XS5jb25jYXQocGF0aC5z bGljZSgxKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgICAgICBjYXNlICJTIjoKKyAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChwY29tID09ICJDIiB8fCBwY29tID09ICJTIikgeyAv LyBJbiAiUyIgY2FzZSB3ZSBoYXZlIHRvIHRha2UgaW50byBhY2NvdW50LCBp ZiB0aGUgcHJldmlvdXMgY29tbWFuZCBpcyBDL1MuCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbnggPSBkLnggKiAyIC0gZC5ieDsgICAgICAgICAg Ly8gQW5kIHJlZmxlY3QgdGhlIHByZXZpb3VzCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnkgPSBkLnkgKiAyIC0gZC5ieTsgICAgICAgICAgLy8g Y29tbWFuZCdzIGNvbnRyb2wgcG9pbnQgcmVsYXRpdmUgdG8gdGhlIGN1cnJl bnQgcG9pbnQuCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLy8gb3Igc29tZSBlbHNlIG9yIG5vdGhpbmcKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBueCA9IGQueDsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBueSA9IGQueTsKKyAgICAgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSBbIkMiLCBueCwg bnldLmNvbmNhdChwYXRoLnNsaWNlKDEpKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICJUIjoK KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwY29tID09ICJRIiB8fCBw Y29tID09ICJUIikgeyAvLyBJbiAiVCIgY2FzZSB3ZSBoYXZlIHRvIHRha2Ug aW50byBhY2NvdW50LCBpZiB0aGUgcHJldmlvdXMgY29tbWFuZCBpcyBRL1Qu CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5xeCA9IGQueCAqIDIg LSBkLnF4OyAgICAgICAgLy8gQW5kIG1ha2UgYSByZWZsZWN0aW9uIHNpbWls YXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnF5ID0gZC55ICog MiAtIGQucXk7ICAgICAgICAvLyB0byBjYXNlICJTIi4KKyAgICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvciBzb21ldGhpbmcg ZWxzZSBvciBub3RoaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZC5xeCA9IGQueDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnF5 ID0gZC55OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICAgICAgcGF0aCA9IFsiQyJdLmNvbmNhdChxMmMoZC54LCBk LnksIGQucXgsIGQucXksIHBhdGhbMV0sIHBhdGhbMl0pKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBj YXNlICJRIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGQucXggPSBwYXRo WzFdOworICAgICAgICAgICAgICAgICAgICAgICAgZC5xeSA9IHBhdGhbMl07 CisgICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gWyJDIl0uY29uY2F0 KHEyYyhkLngsIGQueSwgcGF0aFsxXSwgcGF0aFsyXSwgcGF0aFszXSwgcGF0 aFs0XSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgICAgIGNhc2UgIkwiOgorICAgICAgICAgICAgICAgICAg ICAgICAgcGF0aCA9IFsiQyJdLmNvbmNhdChsMmMoZC54LCBkLnksIHBhdGhb MV0sIHBhdGhbMl0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICAgICAgICBjYXNlICJIIjoKKyAgICAgICAgICAg ICAgICAgICAgICAgIHBhdGggPSBbIkMiXS5jb25jYXQobDJjKGQueCwgZC55 LCBwYXRoWzFdLCBkLnkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICJWIjoKKyAgICAgICAg ICAgICAgICAgICAgICAgIHBhdGggPSBbIkMiXS5jb25jYXQobDJjKGQueCwg ZC55LCBkLngsIHBhdGhbMV0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICJaIjoKKyAgICAg ICAgICAgICAgICAgICAgICAgIHBhdGggPSBbIkMiXS5jb25jYXQobDJjKGQu eCwgZC55LCBkLlgsIGQuWSkpOworICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJl dHVybiBwYXRoOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGZpeEFy YyA9IGZ1bmN0aW9uIChwcCwgaSkgeworICAgICAgICAgICAgICAgIGlmIChw cFtpXS5sZW5ndGggPiA3KSB7CisgICAgICAgICAgICAgICAgICAgIHBwW2ld LnNoaWZ0KCk7CisgICAgICAgICAgICAgICAgICAgIHZhciBwaSA9IHBwW2ld OworICAgICAgICAgICAgICAgICAgICB3aGlsZSAocGkubGVuZ3RoKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICBwY29tczFbaV0gPSAiQSI7IC8vIGlm IGNyZWF0ZWQgbXVsdGlwbGUgQzpzLCB0aGVpciBvcmlnaW5hbCBzZWcgaXMg c2F2ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHAyICYmIChwY29tczJb aV0gPSAiQSIpOyAvLyB0aGUgc2FtZSBhcyBhYm92ZQorICAgICAgICAgICAg ICAgICAgICAgICAgcHAuc3BsaWNlKGkrKywgMCwgWyJDIl0uY29uY2F0KHBp LnNwbGljZSgwLCA2KSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICAgIHBwLnNwbGljZShpLCAxKTsKKyAgICAgICAgICAg ICAgICAgICAgaWkgPSBtbWF4KHAubGVuZ3RoLCBwMiAmJiBwMi5sZW5ndGgg fHwgMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAg ICAgICAgICAgIGZpeE0gPSBmdW5jdGlvbiAocGF0aDEsIHBhdGgyLCBhMSwg YTIsIGkpIHsKKyAgICAgICAgICAgICAgICBpZiAocGF0aDEgJiYgcGF0aDIg JiYgcGF0aDFbaV1bMF0gPT0gIk0iICYmIHBhdGgyW2ldWzBdICE9ICJNIikg eworICAgICAgICAgICAgICAgICAgICBwYXRoMi5zcGxpY2UoaSwgMCwgWyJN IiwgYTIueCwgYTIueV0pOworICAgICAgICAgICAgICAgICAgICBhMS5ieCA9 IDA7CisgICAgICAgICAgICAgICAgICAgIGExLmJ5ID0gMDsKKyAgICAgICAg ICAgICAgICAgICAgYTEueCA9IHBhdGgxW2ldWzFdOworICAgICAgICAgICAg ICAgICAgICBhMS55ID0gcGF0aDFbaV1bMl07CisgICAgICAgICAgICAgICAg ICAgIGlpID0gbW1heChwLmxlbmd0aCwgcDIgJiYgcDIubGVuZ3RoIHx8IDAp OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAg ICAgICBwY29tczEgPSBbXSwgLy8gcGF0aCBjb21tYW5kcyBvZiBvcmlnaW5h bCBwYXRoIHAKKyAgICAgICAgICAgIHBjb21zMiA9IFtdLCAvLyBwYXRoIGNv bW1hbmRzIG9mIG9yaWdpbmFsIHBhdGggcDIKKyAgICAgICAgICAgIHBmaXJz dCA9ICIiLCAvLyB0ZW1wb3JhcnkgaG9sZGVyIGZvciBvcmlnaW5hbCBwYXRo IGNvbW1hbmQKKyAgICAgICAgICAgIHBjb20gPSAiIjsgLy8gaG9sZGVyIGZv ciBwcmV2aW91cyBwYXRoIGNvbW1hbmQgb2Ygb3JpZ2luYWwgcGF0aAorICAg ICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBtbWF4KHAubGVuZ3RoLCBwMiAm JiBwMi5sZW5ndGggfHwgMCk7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAg ICBwW2ldICYmIChwZmlyc3QgPSBwW2ldWzBdKTsgLy8gc2F2ZSBjdXJyZW50 IHBhdGggY29tbWFuZAorCisgICAgICAgICAgICBpZiAocGZpcnN0ICE9ICJD IikgLy8gQyBpcyBub3Qgc2F2ZWQgeWV0LCBiZWNhdXNlIGl0IG1heSBiZSBy ZXN1bHQgb2YgY29udmVyc2lvbgorICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgIHBjb21zMVtpXSA9IHBmaXJzdDsgLy8gU2F2ZSBjdXJyZW50IHBh dGggY29tbWFuZAorICAgICAgICAgICAgICAgIGkgJiYgKCBwY29tID0gcGNv bXMxW2kgLSAxXSk7IC8vIEdldCBwcmV2aW91cyBwYXRoIGNvbW1hbmQgcGNv bQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcFtpXSA9IHByb2Nlc3NQ YXRoKHBbaV0sIGF0dHJzLCBwY29tKTsgLy8gUHJldmlvdXMgcGF0aCBjb21t YW5kIGlzIGlucHV0dGVkIHRvIHByb2Nlc3NQYXRoCisKKyAgICAgICAgICAg IGlmIChwY29tczFbaV0gIT0gIkEiICYmIHBmaXJzdCA9PSAiQyIpIHBjb21z MVtpXSA9ICJDIjsgLy8gQSBpcyB0aGUgb25seSBjb21tYW5kCisgICAgICAg ICAgICAvLyB3aGljaCBtYXkgcHJvZHVjZSBtdWx0aXBsZSBDOnMKKyAgICAg ICAgICAgIC8vIHNvIHdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgQyBpcyBh bHNvIEMgaW4gb3JpZ2luYWwgcGF0aAorCisgICAgICAgICAgICBmaXhBcmMo cCwgaSk7IC8vIGZpeEFyYyBhZGRzIGFsc28gdGhlIHJpZ2h0IGFtb3VudCBv ZiBBOnMgdG8gcGNvbXMxCisKKyAgICAgICAgICAgIGlmIChwMikgeyAvLyB0 aGUgc2FtZSBwcm9jZWR1cmVzIGlzIGRvbmUgdG8gcDIKKyAgICAgICAgICAg ICAgICBwMltpXSAmJiAocGZpcnN0ID0gcDJbaV1bMF0pOworICAgICAgICAg ICAgICAgIGlmIChwZmlyc3QgIT0gIkMiKSB7CisgICAgICAgICAgICAgICAg ICAgIHBjb21zMltpXSA9IHBmaXJzdDsKKyAgICAgICAgICAgICAgICAgICAg aSAmJiAocGNvbSA9IHBjb21zMltpIC0gMV0pOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICBwMltpXSA9IHByb2Nlc3NQYXRoKHAyW2ld LCBhdHRyczIsIHBjb20pOworCisgICAgICAgICAgICAgICAgaWYgKHBjb21z MltpXSAhPSAiQSIgJiYgcGZpcnN0ID09ICJDIikgeworICAgICAgICAgICAg ICAgICAgICBwY29tczJbaV0gPSAiQyI7CisgICAgICAgICAgICAgICAgfQor CisgICAgICAgICAgICAgICAgZml4QXJjKHAyLCBpKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGZpeE0ocCwgcDIsIGF0dHJzLCBhdHRyczIsIGkp OworICAgICAgICAgICAgZml4TShwMiwgcCwgYXR0cnMyLCBhdHRycywgaSk7 CisgICAgICAgICAgICB2YXIgc2VnID0gcFtpXSwKKyAgICAgICAgICAgICAg ICBzZWcyID0gcDIgJiYgcDJbaV0sCisgICAgICAgICAgICAgICAgc2VnbGVu ID0gc2VnLmxlbmd0aCwKKyAgICAgICAgICAgICAgICBzZWcybGVuID0gcDIg JiYgc2VnMi5sZW5ndGg7CisgICAgICAgICAgICBhdHRycy54ID0gc2VnW3Nl Z2xlbiAtIDJdOworICAgICAgICAgICAgYXR0cnMueSA9IHNlZ1tzZWdsZW4g LSAxXTsKKyAgICAgICAgICAgIGF0dHJzLmJ4ID0gdG9GbG9hdChzZWdbc2Vn bGVuIC0gNF0pIHx8IGF0dHJzLng7CisgICAgICAgICAgICBhdHRycy5ieSA9 IHRvRmxvYXQoc2VnW3NlZ2xlbiAtIDNdKSB8fCBhdHRycy55OworICAgICAg ICAgICAgYXR0cnMyLmJ4ID0gcDIgJiYgKHRvRmxvYXQoc2VnMltzZWcybGVu IC0gNF0pIHx8IGF0dHJzMi54KTsKKyAgICAgICAgICAgIGF0dHJzMi5ieSA9 IHAyICYmICh0b0Zsb2F0KHNlZzJbc2VnMmxlbiAtIDNdKSB8fCBhdHRyczIu eSk7CisgICAgICAgICAgICBhdHRyczIueCA9IHAyICYmIHNlZzJbc2VnMmxl biAtIDJdOworICAgICAgICAgICAgYXR0cnMyLnkgPSBwMiAmJiBzZWcyW3Nl ZzJsZW4gLSAxXTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXAyKSB7Cisg ICAgICAgICAgICBwdGguY3VydmUgPSBwYXRoQ2xvbmUocCk7CisgICAgICAg IH0KKyAgICAgICAgcmV0dXJuIHAyID8gW3AsIHAyXSA6IHA7CisgICAgfQor ICAgIGZ1bmN0aW9uIG1hcFBhdGgocGF0aCwgbWF0cml4KSB7CisgICAgICAg IGlmICghbWF0cml4KSB7CisgICAgICAgICAgICByZXR1cm4gcGF0aDsKKyAg ICAgICAgfQorICAgICAgICB2YXIgeCwgeSwgaSwgaiwgaWksIGpqLCBwYXRo aTsKKyAgICAgICAgcGF0aCA9IHBhdGgyY3VydmUocGF0aCk7CisgICAgICAg IGZvciAoaSA9IDAsIGlpID0gcGF0aC5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7 CisgICAgICAgICAgICBwYXRoaSA9IHBhdGhbaV07CisgICAgICAgICAgICBm b3IgKGogPSAxLCBqaiA9IHBhdGhpLmxlbmd0aDsgaiA8IGpqOyBqICs9IDIp IHsKKyAgICAgICAgICAgICAgICB4ID0gbWF0cml4LngocGF0aGlbal0sIHBh dGhpW2ogKyAxXSk7CisgICAgICAgICAgICAgICAgeSA9IG1hdHJpeC55KHBh dGhpW2pdLCBwYXRoaVtqICsgMV0pOworICAgICAgICAgICAgICAgIHBhdGhp W2pdID0geDsKKyAgICAgICAgICAgICAgICBwYXRoaVtqICsgMV0gPSB5Owor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBwYXRo OworICAgIH0KKworICAgIC8vIGh0dHA6Ly9zY2hlcGVycy5jYy9nZXR0aW5n LXRvLXRoZS1wb2ludAorICAgIGZ1bmN0aW9uIGNhdG11bGxSb20yYmV6aWVy KGNycCwgeikgeworICAgICAgICB2YXIgZCA9IFtdOworICAgICAgICBmb3Ig KHZhciBpID0gMCwgaUxlbiA9IGNycC5sZW5ndGg7IGlMZW4gLSAyICogIXog PiBpOyBpICs9IDIpIHsKKyAgICAgICAgICAgIHZhciBwID0gWworICAgICAg ICAgICAgICAgICAgICAgICAge3g6ICtjcnBbaSAtIDJdLCB5OiArY3JwW2kg LSAxXX0sCisgICAgICAgICAgICAgICAgICAgICAgICB7eDogK2NycFtpXSwg ICAgIHk6ICtjcnBbaSArIDFdfSwKKyAgICAgICAgICAgICAgICAgICAgICAg IHt4OiArY3JwW2kgKyAyXSwgeTogK2NycFtpICsgM119LAorICAgICAgICAg ICAgICAgICAgICAgICAge3g6ICtjcnBbaSArIDRdLCB5OiArY3JwW2kgKyA1 XX0KKyAgICAgICAgICAgICAgICAgICAgXTsKKyAgICAgICAgICAgIGlmICh6 KSB7CisgICAgICAgICAgICAgICAgaWYgKCFpKSB7CisgICAgICAgICAgICAg ICAgICAgIHBbMF0gPSB7eDogK2NycFtpTGVuIC0gMl0sIHk6ICtjcnBbaUxl biAtIDFdfTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlMZW4gLSA0 ID09IGkpIHsKKyAgICAgICAgICAgICAgICAgICAgcFszXSA9IHt4OiArY3Jw WzBdLCB5OiArY3JwWzFdfTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg KGlMZW4gLSAyID09IGkpIHsKKyAgICAgICAgICAgICAgICAgICAgcFsyXSA9 IHt4OiArY3JwWzBdLCB5OiArY3JwWzFdfTsKKyAgICAgICAgICAgICAgICAg ICAgcFszXSA9IHt4OiArY3JwWzJdLCB5OiArY3JwWzNdfTsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgIGlmIChpTGVuIC0gNCA9PSBpKSB7CisgICAgICAgICAgICAgICAgICAg IHBbM10gPSBwWzJdOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWkp IHsKKyAgICAgICAgICAgICAgICAgICAgcFswXSA9IHt4OiArY3JwW2ldLCB5 OiArY3JwW2kgKyAxXX07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgfQorICAgICAgICAgICAgZC5wdXNoKFsiQyIsCisgICAgICAgICAgICAg ICAgICAoLXBbMF0ueCArIDYgKiBwWzFdLnggKyBwWzJdLngpIC8gNiwKKyAg ICAgICAgICAgICAgICAgICgtcFswXS55ICsgNiAqIHBbMV0ueSArIHBbMl0u eSkgLyA2LAorICAgICAgICAgICAgICAgICAgKHBbMV0ueCArIDYgKiBwWzJd LnggLSBwWzNdLngpIC8gNiwKKyAgICAgICAgICAgICAgICAgIChwWzFdLnkg KyA2KnBbMl0ueSAtIHBbM10ueSkgLyA2LAorICAgICAgICAgICAgICAgICAg cFsyXS54LAorICAgICAgICAgICAgICAgICAgcFsyXS55CisgICAgICAgICAg ICBdKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkOworICAgIH0K KworICAgIC8vIGV4cG9ydAorICAgIFNuYXAucGF0aCA9IHBhdGhzOworCisg ICAgLypcCisgICAgICogU25hcC5wYXRoLmdldFRvdGFsTGVuZ3RoCisgICAg IFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZXR1cm5zIHRoZSBsZW5n dGggb2YgdGhlIGdpdmVuIHBhdGggaW4gcGl4ZWxzCisgICAgICoqCisgICAg IC0gcGF0aCAoc3RyaW5nKSBTVkcgcGF0aCBzdHJpbmcKKyAgICAgKioKKyAg ICAgPSAobnVtYmVyKSBsZW5ndGgKKyAgICBcKi8KKyAgICBTbmFwLnBhdGgu Z2V0VG90YWxMZW5ndGggPSBnZXRUb3RhbExlbmd0aDsKKyAgICAvKlwKKyAg ICAgKiBTbmFwLnBhdGguZ2V0UG9pbnRBdExlbmd0aAorICAgICBbIG1ldGhv ZCBdCisgICAgICoqCisgICAgICogUmV0dXJucyB0aGUgY29vcmRpbmF0ZXMg b2YgdGhlIHBvaW50IGxvY2F0ZWQgYXQgdGhlIGdpdmVuIGxlbmd0aCBhbG9u ZyB0aGUgZ2l2ZW4gcGF0aAorICAgICAqKgorICAgICAtIHBhdGggKHN0cmlu ZykgU1ZHIHBhdGggc3RyaW5nCisgICAgIC0gbGVuZ3RoIChudW1iZXIpIGxl bmd0aCwgaW4gcGl4ZWxzLCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGF0aCwg ZXhjbHVkaW5nIG5vbi1yZW5kZXJpbmcganVtcHMKKyAgICAgKioKKyAgICAg PSAob2JqZWN0KSByZXByZXNlbnRhdGlvbiBvZiB0aGUgcG9pbnQ6CisgICAg IG8geworICAgICBvICAgICB4OiAobnVtYmVyKSB4IGNvb3JkaW5hdGUsCisg ICAgIG8gICAgIHk6IChudW1iZXIpIHkgY29vcmRpbmF0ZSwKKyAgICAgbyAg ICAgYWxwaGE6IChudW1iZXIpIGFuZ2xlIG9mIGRlcml2YXRpdmUKKyAgICAg byB9CisgICAgXCovCisgICAgU25hcC5wYXRoLmdldFBvaW50QXRMZW5ndGgg PSBnZXRQb2ludEF0TGVuZ3RoOworICAgIC8qXAorICAgICAqIFNuYXAucGF0 aC5nZXRTdWJwYXRoCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAg KiBSZXR1cm5zIHRoZSBzdWJwYXRoIG9mIGEgZ2l2ZW4gcGF0aCBiZXR3ZWVu IGdpdmVuIHN0YXJ0IGFuZCBlbmQgbGVuZ3RocworICAgICAqKgorICAgICAt IHBhdGggKHN0cmluZykgU1ZHIHBhdGggc3RyaW5nCisgICAgIC0gZnJvbSAo bnVtYmVyKSBsZW5ndGgsIGluIHBpeGVscywgZnJvbSB0aGUgc3RhcnQgb2Yg dGhlIHBhdGggdG8gdGhlIHN0YXJ0IG9mIHRoZSBzZWdtZW50CisgICAgIC0g dG8gKG51bWJlcikgbGVuZ3RoLCBpbiBwaXhlbHMsIGZyb20gdGhlIHN0YXJ0 IG9mIHRoZSBwYXRoIHRvIHRoZSBlbmQgb2YgdGhlIHNlZ21lbnQKKyAgICAg KioKKyAgICAgPSAoc3RyaW5nKSBwYXRoIHN0cmluZyBkZWZpbml0aW9uIGZv ciB0aGUgc2VnbWVudAorICAgIFwqLworICAgIFNuYXAucGF0aC5nZXRTdWJw YXRoID0gZnVuY3Rpb24gKHBhdGgsIGZyb20sIHRvKSB7CisgICAgICAgIGlm ICh0aGlzLmdldFRvdGFsTGVuZ3RoKHBhdGgpIC0gdG8gPCAxZS02KSB7Cisg ICAgICAgICAgICByZXR1cm4gZ2V0U3VicGF0aHNBdExlbmd0aChwYXRoLCBm cm9tKS5lbmQ7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGEgPSBnZXRTdWJw YXRoc0F0TGVuZ3RoKHBhdGgsIHRvLCAxKTsKKyAgICAgICAgcmV0dXJuIGZy b20gPyBnZXRTdWJwYXRoc0F0TGVuZ3RoKGEsIGZyb20pLmVuZCA6IGE7Cisg ICAgfTsKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LmdldFRvdGFsTGVuZ3Ro CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZXR1cm5zIHRo ZSBsZW5ndGggb2YgdGhlIHBhdGggaW4gcGl4ZWxzIChvbmx5IHdvcmtzIGZv ciBgcGF0aGAgZWxlbWVudHMpCisgICAgID0gKG51bWJlcikgbGVuZ3RoCisg ICAgXCovCisgICAgZWxwcm90by5nZXRUb3RhbExlbmd0aCA9IGZ1bmN0aW9u ICgpIHsKKyAgICAgICAgaWYgKHRoaXMubm9kZS5nZXRUb3RhbExlbmd0aCkg eworICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9kZS5nZXRUb3RhbExlbmd0 aCgpOworICAgICAgICB9CisgICAgfTsKKyAgICAvLyBTSUVSUkEgRWxlbWVu dC5nZXRQb2ludEF0TGVuZ3RoKCkvRWxlbWVudC5nZXRUb3RhbExlbmd0aCgp OiBJZiBhIDxwYXRoPiBpcyBicm9rZW4gaW50byBkaWZmZXJlbnQgc2VnbWVu dHMsIGlzIHRoZSBqdW1wIGRpc3RhbmNlIHRvIHRoZSBuZXcgY29vcmRpbmF0 ZXMgc2V0IGJ5IHRoZSBfTV8gb3IgX21fIGNvbW1hbmRzIGNhbGN1bGF0ZWQg YXMgcGFydCBvZiB0aGUgcGF0aCdzIHRvdGFsIGxlbmd0aD8KKyAgICAvKlwK KyAgICAgKiBFbGVtZW50LmdldFBvaW50QXRMZW5ndGgKKyAgICAgWyBtZXRo b2QgXQorICAgICAqKgorICAgICAqIFJldHVybnMgY29vcmRpbmF0ZXMgb2Yg dGhlIHBvaW50IGxvY2F0ZWQgYXQgdGhlIGdpdmVuIGxlbmd0aCBvbiB0aGUg Z2l2ZW4gcGF0aCAob25seSB3b3JrcyBmb3IgYHBhdGhgIGVsZW1lbnRzKQor ICAgICAqKgorICAgICAtIGxlbmd0aCAobnVtYmVyKSBsZW5ndGgsIGluIHBp eGVscywgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhdGgsIGV4Y2x1ZGluZyBu b24tcmVuZGVyaW5nIGp1bXBzCisgICAgICoqCisgICAgID0gKG9iamVjdCkg cmVwcmVzZW50YXRpb24gb2YgdGhlIHBvaW50OgorICAgICBvIHsKKyAgICAg byAgICAgeDogKG51bWJlcikgeCBjb29yZGluYXRlLAorICAgICBvICAgICB5 OiAobnVtYmVyKSB5IGNvb3JkaW5hdGUsCisgICAgIG8gICAgIGFscGhhOiAo bnVtYmVyKSBhbmdsZSBvZiBkZXJpdmF0aXZlCisgICAgIG8gfQorICAgIFwq LworICAgIGVscHJvdG8uZ2V0UG9pbnRBdExlbmd0aCA9IGZ1bmN0aW9uIChs ZW5ndGgpIHsKKyAgICAgICAgcmV0dXJuIGdldFBvaW50QXRMZW5ndGgodGhp cy5hdHRyKCJkIiksIGxlbmd0aCk7CisgICAgfTsKKyAgICAvLyBTSUVSUkEg RWxlbWVudC5nZXRTdWJwYXRoKCk6IFNpbWlsYXIgdG8gdGhlIHByb2JsZW0g Zm9yIEVsZW1lbnQuZ2V0UG9pbnRBdExlbmd0aCgpLiBVbmNsZWFyIGhvdyB0 aGlzIHdvdWxkIHdvcmsgZm9yIGEgc2VnbWVudGVkIHBhdGguIE92ZXJhbGws IHRoZSBjb25jZXB0IG9mIF9zdWJwYXRoXyBhbmQgd2hhdCBJJ20gY2FsbGlu ZyBhIF9zZWdtZW50XyAoc2VyaWVzIG9mIG5vbi1fTV8gb3IgX1pfIGNvbW1h bmRzKSBpcyB1bmNsZWFyLgorICAgIC8qXAorICAgICAqIEVsZW1lbnQuZ2V0 U3VicGF0aAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogUmV0 dXJucyBzdWJwYXRoIG9mIGEgZ2l2ZW4gZWxlbWVudCBmcm9tIGdpdmVuIHN0 YXJ0IGFuZCBlbmQgbGVuZ3RocyAob25seSB3b3JrcyBmb3IgYHBhdGhgIGVs ZW1lbnRzKQorICAgICAqKgorICAgICAtIGZyb20gKG51bWJlcikgbGVuZ3Ro LCBpbiBwaXhlbHMsIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXRoIHRvIHRo ZSBzdGFydCBvZiB0aGUgc2VnbWVudAorICAgICAtIHRvIChudW1iZXIpIGxl bmd0aCwgaW4gcGl4ZWxzLCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGF0aCB0 byB0aGUgZW5kIG9mIHRoZSBzZWdtZW50CisgICAgICoqCisgICAgID0gKHN0 cmluZykgcGF0aCBzdHJpbmcgZGVmaW5pdGlvbiBmb3IgdGhlIHNlZ21lbnQK KyAgICBcKi8KKyAgICBlbHByb3RvLmdldFN1YnBhdGggPSBmdW5jdGlvbiAo ZnJvbSwgdG8pIHsKKyAgICAgICAgcmV0dXJuIFNuYXAucGF0aC5nZXRTdWJw YXRoKHRoaXMuYXR0cigiZCIpLCBmcm9tLCB0byk7CisgICAgfTsKKyAgICBT bmFwLl8uYm94ID0gYm94OworICAgIC8qXAorICAgICAqIFNuYXAucGF0aC5m aW5kRG90c0F0U2VnbWVudAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisg ICAgICogVXRpbGl0eSBtZXRob2QKKyAgICAgKioKKyAgICAgKiBGaW5kcyBk b3QgY29vcmRpbmF0ZXMgb24gdGhlIGdpdmVuIGN1YmljIGJlemnDqXIgY3Vy dmUgYXQgdGhlIGdpdmVuIHQKKyAgICAgLSBwMXggKG51bWJlcikgeCBvZiB0 aGUgZmlyc3QgcG9pbnQgb2YgdGhlIGN1cnZlCisgICAgIC0gcDF5IChudW1i ZXIpIHkgb2YgdGhlIGZpcnN0IHBvaW50IG9mIHRoZSBjdXJ2ZQorICAgICAt IGMxeCAobnVtYmVyKSB4IG9mIHRoZSBmaXJzdCBhbmNob3Igb2YgdGhlIGN1 cnZlCisgICAgIC0gYzF5IChudW1iZXIpIHkgb2YgdGhlIGZpcnN0IGFuY2hv ciBvZiB0aGUgY3VydmUKKyAgICAgLSBjMnggKG51bWJlcikgeCBvZiB0aGUg c2Vjb25kIGFuY2hvciBvZiB0aGUgY3VydmUKKyAgICAgLSBjMnkgKG51bWJl cikgeSBvZiB0aGUgc2Vjb25kIGFuY2hvciBvZiB0aGUgY3VydmUKKyAgICAg LSBwMnggKG51bWJlcikgeCBvZiB0aGUgc2Vjb25kIHBvaW50IG9mIHRoZSBj dXJ2ZQorICAgICAtIHAyeSAobnVtYmVyKSB5IG9mIHRoZSBzZWNvbmQgcG9p bnQgb2YgdGhlIGN1cnZlCisgICAgIC0gdCAobnVtYmVyKSBwb3NpdGlvbiBv biB0aGUgY3VydmUgKDAuLjEpCisgICAgID0gKG9iamVjdCkgcG9pbnQgaW5m b3JtYXRpb24gaW4gZm9ybWF0OgorICAgICBvIHsKKyAgICAgbyAgICAgeDog KG51bWJlcikgeCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCwKKyAgICAgbyAg ICAgeTogKG51bWJlcikgeSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCwKKyAg ICAgbyAgICAgbTogeworICAgICBvICAgICAgICAgeDogKG51bWJlcikgeCBj b29yZGluYXRlIG9mIHRoZSBsZWZ0IGFuY2hvciwKKyAgICAgbyAgICAgICAg IHk6IChudW1iZXIpIHkgY29vcmRpbmF0ZSBvZiB0aGUgbGVmdCBhbmNob3IK KyAgICAgbyAgICAgfSwKKyAgICAgbyAgICAgbjogeworICAgICBvICAgICAg ICAgeDogKG51bWJlcikgeCBjb29yZGluYXRlIG9mIHRoZSByaWdodCBhbmNo b3IsCisgICAgIG8gICAgICAgICB5OiAobnVtYmVyKSB5IGNvb3JkaW5hdGUg b2YgdGhlIHJpZ2h0IGFuY2hvcgorICAgICBvICAgICB9LAorICAgICBvICAg ICBzdGFydDogeworICAgICBvICAgICAgICAgeDogKG51bWJlcikgeCBjb29y ZGluYXRlIG9mIHRoZSBzdGFydCBvZiB0aGUgY3VydmUsCisgICAgIG8gICAg ICAgICB5OiAobnVtYmVyKSB5IGNvb3JkaW5hdGUgb2YgdGhlIHN0YXJ0IG9m IHRoZSBjdXJ2ZQorICAgICBvICAgICB9LAorICAgICBvICAgICBlbmQ6IHsK KyAgICAgbyAgICAgICAgIHg6IChudW1iZXIpIHggY29vcmRpbmF0ZSBvZiB0 aGUgZW5kIG9mIHRoZSBjdXJ2ZSwKKyAgICAgbyAgICAgICAgIHk6IChudW1i ZXIpIHkgY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBjdXJ2ZQorICAg ICBvICAgICB9LAorICAgICBvICAgICBhbHBoYTogKG51bWJlcikgYW5nbGUg b2YgdGhlIGN1cnZlIGRlcml2YXRpdmUgYXQgdGhlIHBvaW50CisgICAgIG8g fQorICAgIFwqLworICAgIFNuYXAucGF0aC5maW5kRG90c0F0U2VnbWVudCA9 IGZpbmREb3RzQXRTZWdtZW50OworICAgIC8qXAorICAgICAqIFNuYXAucGF0 aC5iZXppZXJCQm94CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAg KiBVdGlsaXR5IG1ldGhvZAorICAgICAqKgorICAgICAqIFJldHVybnMgdGhl IGJvdW5kaW5nIGJveCBvZiBhIGdpdmVuIGN1YmljIGJlemnDqXIgY3VydmUK KyAgICAgLSBwMXggKG51bWJlcikgeCBvZiB0aGUgZmlyc3QgcG9pbnQgb2Yg dGhlIGN1cnZlCisgICAgIC0gcDF5IChudW1iZXIpIHkgb2YgdGhlIGZpcnN0 IHBvaW50IG9mIHRoZSBjdXJ2ZQorICAgICAtIGMxeCAobnVtYmVyKSB4IG9m IHRoZSBmaXJzdCBhbmNob3Igb2YgdGhlIGN1cnZlCisgICAgIC0gYzF5IChu dW1iZXIpIHkgb2YgdGhlIGZpcnN0IGFuY2hvciBvZiB0aGUgY3VydmUKKyAg ICAgLSBjMnggKG51bWJlcikgeCBvZiB0aGUgc2Vjb25kIGFuY2hvciBvZiB0 aGUgY3VydmUKKyAgICAgLSBjMnkgKG51bWJlcikgeSBvZiB0aGUgc2Vjb25k IGFuY2hvciBvZiB0aGUgY3VydmUKKyAgICAgLSBwMnggKG51bWJlcikgeCBv ZiB0aGUgc2Vjb25kIHBvaW50IG9mIHRoZSBjdXJ2ZQorICAgICAtIHAyeSAo bnVtYmVyKSB5IG9mIHRoZSBzZWNvbmQgcG9pbnQgb2YgdGhlIGN1cnZlCisg ICAgICogb3IKKyAgICAgLSBiZXogKGFycmF5KSBhcnJheSBvZiBzaXggcG9p bnRzIGZvciBiZXppw6lyIGN1cnZlCisgICAgID0gKG9iamVjdCkgYm91bmRp bmcgYm94CisgICAgIG8geworICAgICBvICAgICB4OiAobnVtYmVyKSB4IGNv b3JkaW5hdGUgb2YgdGhlIGxlZnQgdG9wIHBvaW50IG9mIHRoZSBib3gsCisg ICAgIG8gICAgIHk6IChudW1iZXIpIHkgY29vcmRpbmF0ZSBvZiB0aGUgbGVm dCB0b3AgcG9pbnQgb2YgdGhlIGJveCwKKyAgICAgbyAgICAgeDI6IChudW1i ZXIpIHggY29vcmRpbmF0ZSBvZiB0aGUgcmlnaHQgYm90dG9tIHBvaW50IG9m IHRoZSBib3gsCisgICAgIG8gICAgIHkyOiAobnVtYmVyKSB5IGNvb3JkaW5h dGUgb2YgdGhlIHJpZ2h0IGJvdHRvbSBwb2ludCBvZiB0aGUgYm94LAorICAg ICBvICAgICB3aWR0aDogKG51bWJlcikgd2lkdGggb2YgdGhlIGJveCwKKyAg ICAgbyAgICAgaGVpZ2h0OiAobnVtYmVyKSBoZWlnaHQgb2YgdGhlIGJveAor ICAgICBvIH0KKyAgICBcKi8KKyAgICBTbmFwLnBhdGguYmV6aWVyQkJveCA9 IGJlemllckJCb3g7CisgICAgLypcCisgICAgICogU25hcC5wYXRoLmlzUG9p bnRJbnNpZGVCQm94CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAg KiBVdGlsaXR5IG1ldGhvZAorICAgICAqKgorICAgICAqIFJldHVybnMgYHRy dWVgIGlmIGdpdmVuIHBvaW50IGlzIGluc2lkZSBib3VuZGluZyBib3gKKyAg ICAgLSBiYm94IChzdHJpbmcpIGJvdW5kaW5nIGJveAorICAgICAtIHggKHN0 cmluZykgeCBjb29yZGluYXRlIG9mIHRoZSBwb2ludAorICAgICAtIHkgKHN0 cmluZykgeSBjb29yZGluYXRlIG9mIHRoZSBwb2ludAorICAgICA9IChib29s ZWFuKSBgdHJ1ZWAgaWYgcG9pbnQgaXMgaW5zaWRlCisgICAgXCovCisgICAg U25hcC5wYXRoLmlzUG9pbnRJbnNpZGVCQm94ID0gaXNQb2ludEluc2lkZUJC b3g7CisgICAgU25hcC5jbG9zZXN0ID0gZnVuY3Rpb24gKHgsIHksIFgsIFkp IHsKKyAgICAgICAgdmFyIHIgPSAxMDAsCisgICAgICAgICAgICBiID0gYm94 KHggLSByIC8gMiwgeSAtIHIgLyAyLCByLCByKSwKKyAgICAgICAgICAgIGlu c2lkZSA9IFtdLAorICAgICAgICAgICAgZ2V0dGVyID0gWFswXS5oYXNPd25Q cm9wZXJ0eSgieCIpID8gZnVuY3Rpb24gKGkpIHsKKyAgICAgICAgICAgICAg ICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB4OiBYW2ldLngsCisg ICAgICAgICAgICAgICAgICAgIHk6IFhbaV0ueQorICAgICAgICAgICAgICAg IH07CisgICAgICAgICAgICB9IDogZnVuY3Rpb24gKGkpIHsKKyAgICAgICAg ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB4OiBYW2ld LAorICAgICAgICAgICAgICAgICAgICB5OiBZW2ldCisgICAgICAgICAgICAg ICAgfTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBmb3VuZCA9IDA7 CisgICAgICAgIHdoaWxlIChyIDw9IDFlNiAmJiAhZm91bmQpIHsKKyAgICAg ICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IFgubGVuZ3RoOyBpIDwgaWk7 IGkrKykgeworICAgICAgICAgICAgICAgIHZhciB4eSA9IGdldHRlcihpKTsK KyAgICAgICAgICAgICAgICBpZiAoaXNQb2ludEluc2lkZUJCb3goYiwgeHku eCwgeHkueSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZm91bmQrKzsKKyAg ICAgICAgICAgICAgICAgICAgaW5zaWRlLnB1c2goeHkpOworICAgICAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAg ICAgICAgciAqPSAyOworICAgICAgICAgICAgICAgIGIgPSBib3goeCAtIHIg LyAyLCB5IC0gciAvIDIsIHIsIHIpCisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICAgICAgaWYgKHIgPT0gMWU2KSB7CisgICAgICAgICAgICByZXR1 cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIGxlbiA9IEluZmluaXR5LAor ICAgICAgICAgICAgcmVzOworICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGlu c2lkZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAgICB2YXIg bCA9IFNuYXAubGVuKHgsIHksIGluc2lkZVtpXS54LCBpbnNpZGVbaV0ueSk7 CisgICAgICAgICAgICBpZiAobGVuID4gbCkgeworICAgICAgICAgICAgICAg IGxlbiA9IGw7CisgICAgICAgICAgICAgICAgaW5zaWRlW2ldLmxlbiA9IGw7 CisgICAgICAgICAgICAgICAgcmVzID0gaW5zaWRlW2ldOworICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXM7CisgICAgfTsK KyAgICAvKlwKKyAgICAgKiBTbmFwLnBhdGguaXNCQm94SW50ZXJzZWN0Cisg ICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBVdGlsaXR5IG1ldGhv ZAorICAgICAqKgorICAgICAqIFJldHVybnMgYHRydWVgIGlmIHR3byBib3Vu ZGluZyBib3hlcyBpbnRlcnNlY3QKKyAgICAgLSBiYm94MSAoc3RyaW5nKSBm aXJzdCBib3VuZGluZyBib3gKKyAgICAgLSBiYm94MiAoc3RyaW5nKSBzZWNv bmQgYm91bmRpbmcgYm94CisgICAgID0gKGJvb2xlYW4pIGB0cnVlYCBpZiBi b3VuZGluZyBib3hlcyBpbnRlcnNlY3QKKyAgICBcKi8KKyAgICBTbmFwLnBh dGguaXNCQm94SW50ZXJzZWN0ID0gaXNCQm94SW50ZXJzZWN0OworICAgIC8q XAorICAgICAqIFNuYXAucGF0aC5pbnRlcnNlY3Rpb24KKyAgICAgWyBtZXRo b2QgXQorICAgICAqKgorICAgICAqIFV0aWxpdHkgbWV0aG9kCisgICAgICoq CisgICAgICogRmluZHMgaW50ZXJzZWN0aW9ucyBvZiB0d28gcGF0aHMKKyAg ICAgLSBwYXRoMSAoc3RyaW5nKSBwYXRoIHN0cmluZworICAgICAtIHBhdGgy IChzdHJpbmcpIHBhdGggc3RyaW5nCisgICAgID0gKGFycmF5KSBkb3RzIG9m IGludGVyc2VjdGlvbgorICAgICBvIFsKKyAgICAgbyAgICAgeworICAgICBv ICAgICAgICAgeDogKG51bWJlcikgeCBjb29yZGluYXRlIG9mIHRoZSBwb2lu dCwKKyAgICAgbyAgICAgICAgIHk6IChudW1iZXIpIHkgY29vcmRpbmF0ZSBv ZiB0aGUgcG9pbnQsCisgICAgIG8gICAgICAgICB0MTogKG51bWJlcikgdCB2 YWx1ZSBmb3Igc2VnbWVudCBvZiBwYXRoMSwKKyAgICAgbyAgICAgICAgIHQy OiAobnVtYmVyKSB0IHZhbHVlIGZvciBzZWdtZW50IG9mIHBhdGgyLAorICAg ICBvICAgICAgICAgc2VnbWVudDE6IChudW1iZXIpIG9yZGVyIG51bWJlciBm b3Igc2VnbWVudCBvZiBwYXRoMSwKKyAgICAgbyAgICAgICAgIHNlZ21lbnQy OiAobnVtYmVyKSBvcmRlciBudW1iZXIgZm9yIHNlZ21lbnQgb2YgcGF0aDIs CisgICAgIG8gICAgICAgICBiZXoxOiAoYXJyYXkpIGVpZ2h0IGNvb3JkaW5h dGVzIHJlcHJlc2VudGluZyBiZXppw6lyIGN1cnZlIGZvciB0aGUgc2VnbWVu dCBvZiBwYXRoMSwKKyAgICAgbyAgICAgICAgIGJlejI6IChhcnJheSkgZWln aHQgY29vcmRpbmF0ZXMgcmVwcmVzZW50aW5nIGJlemnDqXIgY3VydmUgZm9y IHRoZSBzZWdtZW50IG9mIHBhdGgyCisgICAgIG8gICAgIH0KKyAgICAgbyBd CisgICAgXCovCisgICAgU25hcC5wYXRoLmludGVyc2VjdGlvbiA9IHBhdGhJ bnRlcnNlY3Rpb247CisgICAgU25hcC5wYXRoLmludGVyc2VjdGlvbk51bWJl ciA9IHBhdGhJbnRlcnNlY3Rpb25OdW1iZXI7CisgICAgLypcCisgICAgICog U25hcC5wYXRoLmlzUG9pbnRJbnNpZGUKKyAgICAgWyBtZXRob2QgXQorICAg ICAqKgorICAgICAqIFV0aWxpdHkgbWV0aG9kCisgICAgICoqCisgICAgICog UmV0dXJucyBgdHJ1ZWAgaWYgZ2l2ZW4gcG9pbnQgaXMgaW5zaWRlIGEgZ2l2 ZW4gY2xvc2VkIHBhdGguCisgICAgICoKKyAgICAgKiBOb3RlOiBmaWxsIG1v ZGUgZG9lc27igJl0IGFmZmVjdCB0aGUgcmVzdWx0IG9mIHRoaXMgbWV0aG9k LgorICAgICAtIHBhdGggKHN0cmluZykgcGF0aCBzdHJpbmcKKyAgICAgLSB4 IChudW1iZXIpIHggb2YgdGhlIHBvaW50CisgICAgIC0geSAobnVtYmVyKSB5 IG9mIHRoZSBwb2ludAorICAgICA9IChib29sZWFuKSBgdHJ1ZWAgaWYgcG9p bnQgaXMgaW5zaWRlIHRoZSBwYXRoCisgICAgXCovCisgICAgU25hcC5wYXRo LmlzUG9pbnRJbnNpZGUgPSBpc1BvaW50SW5zaWRlUGF0aDsKKyAgICAvKlwK KyAgICAgKiBTbmFwLnBhdGguZ2V0QkJveAorICAgICBbIG1ldGhvZCBdCisg ICAgICoqCisgICAgICogVXRpbGl0eSBtZXRob2QKKyAgICAgKioKKyAgICAg KiBSZXR1cm5zIHRoZSBib3VuZGluZyBib3ggb2YgYSBnaXZlbiBwYXRoCisg ICAgIC0gcGF0aCAoc3RyaW5nKSBwYXRoIHN0cmluZworICAgICA9IChvYmpl Y3QpIGJvdW5kaW5nIGJveAorICAgICBvIHsKKyAgICAgbyAgICAgeDogKG51 bWJlcikgeCBjb29yZGluYXRlIG9mIHRoZSBsZWZ0IHRvcCBwb2ludCBvZiB0 aGUgYm94LAorICAgICBvICAgICB5OiAobnVtYmVyKSB5IGNvb3JkaW5hdGUg b2YgdGhlIGxlZnQgdG9wIHBvaW50IG9mIHRoZSBib3gsCisgICAgIG8gICAg IHgyOiAobnVtYmVyKSB4IGNvb3JkaW5hdGUgb2YgdGhlIHJpZ2h0IGJvdHRv bSBwb2ludCBvZiB0aGUgYm94LAorICAgICBvICAgICB5MjogKG51bWJlcikg eSBjb29yZGluYXRlIG9mIHRoZSByaWdodCBib3R0b20gcG9pbnQgb2YgdGhl IGJveCwKKyAgICAgbyAgICAgd2lkdGg6IChudW1iZXIpIHdpZHRoIG9mIHRo ZSBib3gsCisgICAgIG8gICAgIGhlaWdodDogKG51bWJlcikgaGVpZ2h0IG9m IHRoZSBib3gKKyAgICAgbyB9CisgICAgXCovCisgICAgU25hcC5wYXRoLmdl dEJCb3ggPSBwYXRoQkJveDsKKyAgICBTbmFwLnBhdGguZ2V0ID0gZ2V0UGF0 aDsKKyAgICAvKlwKKyAgICAgKiBTbmFwLnBhdGgudG9SZWxhdGl2ZQorICAg ICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogVXRpbGl0eSBtZXRob2QK KyAgICAgKioKKyAgICAgKiBDb252ZXJ0cyBwYXRoIGNvb3JkaW5hdGVzIGlu dG8gcmVsYXRpdmUgdmFsdWVzCisgICAgIC0gcGF0aCAoc3RyaW5nKSBwYXRo IHN0cmluZworICAgICA9IChhcnJheSkgcGF0aCBzdHJpbmcKKyAgICBcKi8K KyAgICBTbmFwLnBhdGgudG9SZWxhdGl2ZSA9IHBhdGhUb1JlbGF0aXZlOwor ICAgIC8qXAorICAgICAqIFNuYXAucGF0aC50b0Fic29sdXRlCisgICAgIFsg bWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBVdGlsaXR5IG1ldGhvZAorICAg ICAqKgorICAgICAqIENvbnZlcnRzIHBhdGggY29vcmRpbmF0ZXMgaW50byBh YnNvbHV0ZSB2YWx1ZXMKKyAgICAgLSBwYXRoIChzdHJpbmcpIHBhdGggc3Ry aW5nCisgICAgID0gKGFycmF5KSBwYXRoIHN0cmluZworICAgIFwqLworICAg IFNuYXAucGF0aC50b0Fic29sdXRlID0gcGF0aFRvQWJzb2x1dGU7CisgICAg LypcCisgICAgICogU25hcC5wYXRoLnRvQ3ViaWMKKyAgICAgWyBtZXRob2Qg XQorICAgICAqKgorICAgICAqIFV0aWxpdHkgbWV0aG9kCisgICAgICoqCisg ICAgICogQ29udmVydHMgcGF0aCB0byBhIG5ldyBwYXRoIHdoZXJlIGFsbCBz ZWdtZW50cyBhcmUgY3ViaWMgYmV6acOpciBjdXJ2ZXMKKyAgICAgLSBwYXRo U3RyaW5nIChzdHJpbmd8YXJyYXkpIHBhdGggc3RyaW5nIG9yIGFycmF5IG9m IHNlZ21lbnRzCisgICAgID0gKGFycmF5KSBhcnJheSBvZiBzZWdtZW50cwor ICAgIFwqLworICAgIFNuYXAucGF0aC50b0N1YmljID0gcGF0aDJjdXJ2ZTsK KyAgICAvKlwKKyAgICAgKiBTbmFwLnBhdGgubWFwCisgICAgIFsgbWV0aG9k IF0KKyAgICAgKioKKyAgICAgKiBUcmFuc2Zvcm0gdGhlIHBhdGggc3RyaW5n IHdpdGggdGhlIGdpdmVuIG1hdHJpeAorICAgICAtIHBhdGggKHN0cmluZykg cGF0aCBzdHJpbmcKKyAgICAgLSBtYXRyaXggKG9iamVjdCkgc2VlIEBNYXRy aXgKKyAgICAgPSAoc3RyaW5nKSB0cmFuc2Zvcm1lZCBwYXRoIHN0cmluZwor ICAgIFwqLworICAgIFNuYXAucGF0aC5tYXAgPSBtYXBQYXRoOworICAgIFNu YXAucGF0aC50b1N0cmluZyA9IHRvU3RyaW5nOworICAgIFNuYXAucGF0aC5j bG9uZSA9IHBhdGhDbG9uZTsKK30pOworCisvLyBDb3B5cmlnaHQgKGMpIDIw MTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNl bnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5 IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgg dGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhl IExpY2Vuc2UgYXQKKy8vCisvLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGlj ZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkg YXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3 YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0 cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJS QU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHBy ZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBz cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisv LyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KK1NuYXAucGx1Z2lu KGZ1bmN0aW9uIChTbmFwLCBFbGVtZW50LCBQYXBlciwgZ2xvYikgeworICAg IHZhciBtbWF4ID0gTWF0aC5tYXgsCisgICAgICAgIG1taW4gPSBNYXRoLm1p bjsKKworICAgIC8vIFNldAorICAgIHZhciBTZXQgPSBmdW5jdGlvbiAoaXRl bXMpIHsKKyAgICAgICAgdGhpcy5pdGVtcyA9IFtdOworCXRoaXMuYmluZGlu Z3MgPSB7fTsKKyAgICAgICAgdGhpcy5sZW5ndGggPSAwOworICAgICAgICB0 aGlzLnR5cGUgPSAic2V0IjsKKyAgICAgICAgaWYgKGl0ZW1zKSB7CisgICAg ICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBpdGVtcy5sZW5ndGg7IGkg PCBpaTsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGl0ZW1zW2ldKSB7 CisgICAgICAgICAgICAgICAgICAgIHRoaXNbdGhpcy5pdGVtcy5sZW5ndGhd ID0gdGhpcy5pdGVtc1t0aGlzLml0ZW1zLmxlbmd0aF0gPSBpdGVtc1tpXTsK KyAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGgrKzsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9LAor ICAgIHNldHByb3RvID0gU2V0LnByb3RvdHlwZTsKKyAgICAvKlwKKyAgICAg KiBTZXQucHVzaAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICog QWRkcyBlYWNoIGFyZ3VtZW50IHRvIHRoZSBjdXJyZW50IHNldAorICAgICA9 IChvYmplY3QpIG9yaWdpbmFsIGVsZW1lbnQKKyAgICBcKi8KKyAgICBzZXRw cm90by5wdXNoID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgaXRlbSwK KyAgICAgICAgICAgIGxlbjsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlp ID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAg ICAgIGl0ZW0gPSBhcmd1bWVudHNbaV07CisgICAgICAgICAgICBpZiAoaXRl bSkgeworICAgICAgICAgICAgICAgIGxlbiA9IHRoaXMuaXRlbXMubGVuZ3Ro OworICAgICAgICAgICAgICAgIHRoaXNbbGVuXSA9IHRoaXMuaXRlbXNbbGVu XSA9IGl0ZW07CisgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGgrKzsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsK KyAgICB9OworICAgIC8qXAorICAgICAqIFNldC5wb3AKKyAgICAgWyBtZXRo b2QgXQorICAgICAqKgorICAgICAqIFJlbW92ZXMgbGFzdCBlbGVtZW50IGFu ZCByZXR1cm5zIGl0CisgICAgID0gKG9iamVjdCkgZWxlbWVudAorICAgIFwq LworICAgIHNldHByb3RvLnBvcCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg dGhpcy5sZW5ndGggJiYgZGVsZXRlIHRoaXNbdGhpcy5sZW5ndGgtLV07Cisg ICAgICAgIHJldHVybiB0aGlzLml0ZW1zLnBvcCgpOworICAgIH07CisgICAg LypcCisgICAgICogU2V0LmZvckVhY2gKKyAgICAgWyBtZXRob2QgXQorICAg ICAqKgorICAgICAqIEV4ZWN1dGVzIGdpdmVuIGZ1bmN0aW9uIGZvciBlYWNo IGVsZW1lbnQgaW4gdGhlIHNldAorICAgICAqCisgICAgICogSWYgdGhlIGZ1 bmN0aW9uIHJldHVybnMgYGZhbHNlYCwgdGhlIGxvb3Agc3RvcHMgcnVubmlu Zy4KKyAgICAgKioKKyAgICAgLSBjYWxsYmFjayAoZnVuY3Rpb24pIGZ1bmN0 aW9uIHRvIHJ1bgorICAgICAtIHRoaXNBcmcgKG9iamVjdCkgY29udGV4dCBv YmplY3QgZm9yIHRoZSBjYWxsYmFjaworICAgICA9IChvYmplY3QpIFNldCBv YmplY3QKKyAgICBcKi8KKyAgICBzZXRwcm90by5mb3JFYWNoID0gZnVuY3Rp b24gKGNhbGxiYWNrLCB0aGlzQXJnKSB7CisgICAgICAgIGZvciAodmFyIGkg PSAwLCBpaSA9IHRoaXMuaXRlbXMubGVuZ3RoOyBpIDwgaWk7IGkrKykgewor ICAgICAgICAgICAgaWYgKGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdGhpcy5p dGVtc1tpXSwgaSkgPT09IGZhbHNlKSB7CisgICAgICAgICAgICAgICAgcmV0 dXJuIHRoaXM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg cmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBTZXQuYW5p bWF0ZQorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQW5pbWF0 ZXMgZWFjaCBlbGVtZW50IGluIHNldCBpbiBzeW5jLgorICAgICAqCisgICAg ICoqCisgICAgIC0gYXR0cnMgKG9iamVjdCkga2V5LXZhbHVlIHBhaXJzIG9m IGRlc3RpbmF0aW9uIGF0dHJpYnV0ZXMKKyAgICAgLSBkdXJhdGlvbiAobnVt YmVyKSBkdXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uIGluIG1pbGxpc2Vjb25k cworICAgICAtIGVhc2luZyAoZnVuY3Rpb24pICNvcHRpb25hbCBlYXNpbmcg ZnVuY3Rpb24gZnJvbSBAbWluYSBvciBjdXN0b20KKyAgICAgLSBjYWxsYmFj ayAoZnVuY3Rpb24pICNvcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0aGF0 IGV4ZWN1dGVzIHdoZW4gdGhlIGFuaW1hdGlvbiBlbmRzCisgICAgICogb3IK KyAgICAgLSBhbmltYXRpb24gKGFycmF5KSBhcnJheSBvZiBhbmltYXRpb24g cGFyYW1ldGVyIGZvciBlYWNoIGVsZW1lbnQgaW4gc2V0IGluIGZvcm1hdCBg W2F0dHJzLCBkdXJhdGlvbiwgZWFzaW5nLCBjYWxsYmFja11gCisgICAgID4g VXNhZ2UKKyAgICAgfCAvLyBhbmltYXRlIGFsbCBlbGVtZW50cyBpbiBzZXQg dG8gcmFkaXVzIDEwCisgICAgIHwgc2V0LmFuaW1hdGUoe3I6IDEwfSwgNTAw LCBtaW5hLmVhc2Vpbik7CisgICAgIHwgLy8gb3IKKyAgICAgfCAvLyBhbmlt YXRlIGZpcnN0IGVsZW1lbnQgdG8gcmFkaXVzIDEwLCBidXQgc2Vjb25kIHRv IHJhZGl1cyAyMCBhbmQgaW4gZGlmZmVyZW50IHRpbWUKKyAgICAgfCBzZXQu YW5pbWF0ZShbe3I6IDEwfSwgNTAwLCBtaW5hLmVhc2Vpbl0sIFt7cjogMjB9 LCAxNTAwLCBtaW5hLmVhc2Vpbl0pOworICAgICA9IChFbGVtZW50KSB0aGUg Y3VycmVudCBlbGVtZW50CisgICAgXCovCisgICAgc2V0cHJvdG8uYW5pbWF0 ZSA9IGZ1bmN0aW9uIChhdHRycywgbXMsIGVhc2luZywgY2FsbGJhY2spIHsK KyAgICAgICAgaWYgKHR5cGVvZiBlYXNpbmcgPT0gImZ1bmN0aW9uIiAmJiAh ZWFzaW5nLmxlbmd0aCkgeworICAgICAgICAgICAgY2FsbGJhY2sgPSBlYXNp bmc7CisgICAgICAgICAgICBlYXNpbmcgPSBtaW5hLmxpbmVhcjsKKyAgICAg ICAgfQorICAgICAgICBpZiAoYXR0cnMgaW5zdGFuY2VvZiBTbmFwLl8uQW5p bWF0aW9uKSB7CisgICAgICAgICAgICBjYWxsYmFjayA9IGF0dHJzLmNhbGxi YWNrOworICAgICAgICAgICAgZWFzaW5nID0gYXR0cnMuZWFzaW5nOworICAg ICAgICAgICAgbXMgPSBlYXNpbmcuZHVyOworICAgICAgICAgICAgYXR0cnMg PSBhdHRycy5hdHRyOworICAgICAgICB9CisgICAgICAgIHZhciBhcmdzID0g YXJndW1lbnRzOworICAgICAgICBpZiAoU25hcC5pcyhhdHRycywgImFycmF5 IikgJiYgU25hcC5pcyhhcmdzW2FyZ3MubGVuZ3RoIC0gMV0sICJhcnJheSIp KSB7CisgICAgICAgICAgICB2YXIgZWFjaCA9IHRydWU7CisgICAgICAgIH0K KyAgICAgICAgdmFyIGJlZ2luLAorICAgICAgICAgICAgaGFuZGxlciA9IGZ1 bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBpZiAoYmVnaW4pIHsKKyAg ICAgICAgICAgICAgICAgICAgdGhpcy5iID0gYmVnaW47CisgICAgICAgICAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4gPSB0 aGlzLmI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAg ICAgICAgICAgIGNiID0gMCwKKyAgICAgICAgICAgIHNldCA9IHRoaXMsCisg ICAgICAgICAgICBjYWxsYmFja2VyID0gY2FsbGJhY2sgJiYgZnVuY3Rpb24g KCkgeworICAgICAgICAgICAgICAgIGlmICgrK2NiID09IHNldC5sZW5ndGgp IHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzKTsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICBy ZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uIChlbCwgaSkgeworICAgICAg ICAgICAgZXZlLm9uY2UoInNuYXAuYW5pbWNyZWF0ZWQuIiArIGVsLmlkLCBo YW5kbGVyKTsKKyAgICAgICAgICAgIGlmIChlYWNoKSB7CisgICAgICAgICAg ICAgICAgYXJnc1tpXSAmJiBlbC5hbmltYXRlLmFwcGx5KGVsLCBhcmdzW2ld KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZWwu YW5pbWF0ZShhdHRycywgbXMsIGVhc2luZywgY2FsbGJhY2tlcik7CisgICAg ICAgICAgICB9CisgICAgICAgIH0pOworICAgIH07CisgICAgc2V0cHJvdG8u cmVtb3ZlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB3aGlsZSAodGhpcy5s ZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMucG9wKCkucmVtb3ZlKCk7Cisg ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAv KlwKKyAgICAgKiBTZXQuYmluZAorICAgICBbIG1ldGhvZCBdCisgICAgICoq CisgICAgICogU3BlY2lmaWVzIGhvdyB0byBoYW5kbGUgYSBzcGVjaWZpYyBh dHRyaWJ1dGUgd2hlbiBhcHBsaWVkCisgICAgICogdG8gYSBzZXQuCisgICAg ICoKKyAgICAgKioKKyAgICAgLSBhdHRyIChzdHJpbmcpIGF0dHJpYnV0ZSBu YW1lCisgICAgIC0gY2FsbGJhY2sgKGZ1bmN0aW9uKSBmdW5jdGlvbiB0byBy dW4KKyAgICAgKiBvcgorICAgICAtIGF0dHIgKHN0cmluZykgYXR0cmlidXRl IG5hbWUKKyAgICAgLSBlbGVtZW50IChFbGVtZW50KSBzcGVjaWZpYyBlbGVt ZW50IGluIHRoZSBzZXQgdG8gYXBwbHkgdGhlIGF0dHJpYnV0ZSB0bworICAg ICAqIG9yCisgICAgIC0gYXR0ciAoc3RyaW5nKSBhdHRyaWJ1dGUgbmFtZQor ICAgICAtIGVsZW1lbnQgKEVsZW1lbnQpIHNwZWNpZmljIGVsZW1lbnQgaW4g dGhlIHNldCB0byBhcHBseSB0aGUgYXR0cmlidXRlIHRvCisgICAgIC0gZWF0 dHIgKHN0cmluZykgYXR0cmlidXRlIG9uIHRoZSBlbGVtZW50IHRvIGJpbmQg dGhlIGF0dHJpYnV0ZSB0bworICAgICA9IChvYmplY3QpIFNldCBvYmplY3QK KyAgICBcKi8KKyAgICBzZXRwcm90by5iaW5kID0gZnVuY3Rpb24gKGF0dHIs IGEsIGIpIHsKKyAgICAgICAgdmFyIGRhdGEgPSB7fTsKKyAgICAgICAgaWYg KHR5cGVvZiBhID09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgICAgIHRoaXMu YmluZGluZ3NbYXR0cl0gPSBhOworICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgdmFyIGFuYW1lID0gYiB8fCBhdHRyOworICAgICAgICAgICAgdGhp cy5iaW5kaW5nc1thdHRyXSA9IGZ1bmN0aW9uICh2KSB7CisgICAgICAgICAg ICAgICAgZGF0YVthbmFtZV0gPSB2OworICAgICAgICAgICAgICAgIGEuYXR0 cihkYXRhKTsKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAg cmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICBzZXRwcm90by5hdHRyID0gZnVu Y3Rpb24gKHZhbHVlKSB7CisgICAgICAgIHZhciB1bmJvdW5kID0ge307Cisg ICAgICAgIGZvciAodmFyIGsgaW4gdmFsdWUpIHsKKyAgICAgICAgICAgIGlm ICh0aGlzLmJpbmRpbmdzW2tdKSB7CisgICAgICAgICAgICAgICAgdGhpcy5i aW5kaW5nc1trXSh2YWx1ZVtrXSk7CisgICAgICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICAgIHVuYm91bmRba10gPSB2YWx1ZVtrXTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBpID0gMCwg aWkgPSB0aGlzLml0ZW1zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAg ICAgICAgIHRoaXMuaXRlbXNbaV0uYXR0cih1bmJvdW5kKTsKKyAgICAgICAg fQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qXAorICAg ICAqIFNldC5jbGVhcgorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAg ICogUmVtb3ZlcyBhbGwgZWxlbWVudHMgZnJvbSB0aGUgc2V0CisgICAgXCov CisgICAgc2V0cHJvdG8uY2xlYXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg IHdoaWxlICh0aGlzLmxlbmd0aCkgeworICAgICAgICAgICAgdGhpcy5wb3Ao KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLypcCisgICAgICogU2V0LnNw bGljZQorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogUmVtb3Zl cyByYW5nZSBvZiBlbGVtZW50cyBmcm9tIHRoZSBzZXQKKyAgICAgKioKKyAg ICAgLSBpbmRleCAobnVtYmVyKSBwb3NpdGlvbiBvZiB0aGUgZGVsZXRpb24K KyAgICAgLSBjb3VudCAobnVtYmVyKSBudW1iZXIgb2YgZWxlbWVudCB0byBy ZW1vdmUKKyAgICAgLSBpbnNlcnRpb27igKYgKG9iamVjdCkgI29wdGlvbmFs IGVsZW1lbnRzIHRvIGluc2VydAorICAgICA9IChvYmplY3QpIHNldCBlbGVt ZW50cyB0aGF0IHdlcmUgZGVsZXRlZAorICAgIFwqLworICAgIHNldHByb3Rv LnNwbGljZSA9IGZ1bmN0aW9uIChpbmRleCwgY291bnQsIGluc2VydGlvbikg eworICAgICAgICBpbmRleCA9IGluZGV4IDwgMCA/IG1tYXgodGhpcy5sZW5n dGggKyBpbmRleCwgMCkgOiBpbmRleDsKKyAgICAgICAgY291bnQgPSBtbWF4 KDAsIG1taW4odGhpcy5sZW5ndGggLSBpbmRleCwgY291bnQpKTsKKyAgICAg ICAgdmFyIHRhaWwgPSBbXSwKKyAgICAgICAgICAgIHRvZGVsID0gW10sCisg ICAgICAgICAgICBhcmdzID0gW10sCisgICAgICAgICAgICBpOworICAgICAg ICBmb3IgKGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7Cisg ICAgICAgICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTsKKyAgICAgICAg fQorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAg ICAgICAgICAgdG9kZWwucHVzaCh0aGlzW2luZGV4ICsgaV0pOworICAgICAg ICB9CisgICAgICAgIGZvciAoOyBpIDwgdGhpcy5sZW5ndGggLSBpbmRleDsg aSsrKSB7CisgICAgICAgICAgICB0YWlsLnB1c2godGhpc1tpbmRleCArIGld KTsKKyAgICAgICAgfQorICAgICAgICB2YXIgYXJnbGVuID0gYXJncy5sZW5n dGg7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmdsZW4gKyB0YWlsLmxl bmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0aGlzLml0ZW1zW2luZGV4ICsg aV0gPSB0aGlzW2luZGV4ICsgaV0gPSBpIDwgYXJnbGVuID8gYXJnc1tpXSA6 IHRhaWxbaSAtIGFyZ2xlbl07CisgICAgICAgIH0KKyAgICAgICAgaSA9IHRo aXMuaXRlbXMubGVuZ3RoID0gdGhpcy5sZW5ndGggLT0gY291bnQgLSBhcmds ZW47CisgICAgICAgIHdoaWxlICh0aGlzW2ldKSB7CisgICAgICAgICAgICBk ZWxldGUgdGhpc1tpKytdOworICAgICAgICB9CisgICAgICAgIHJldHVybiBu ZXcgU2V0KHRvZGVsKTsKKyAgICB9OworICAgIC8qXAorICAgICAqIFNldC5l eGNsdWRlCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZW1v dmVzIGdpdmVuIGVsZW1lbnQgZnJvbSB0aGUgc2V0CisgICAgICoqCisgICAg IC0gZWxlbWVudCAob2JqZWN0KSBlbGVtZW50IHRvIHJlbW92ZQorICAgICA9 IChib29sZWFuKSBgdHJ1ZWAgaWYgb2JqZWN0IHdhcyBmb3VuZCBhbmQgcmVt b3ZlZCBmcm9tIHRoZSBzZXQKKyAgICBcKi8KKyAgICBzZXRwcm90by5leGNs dWRlID0gZnVuY3Rpb24gKGVsKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAw LCBpaSA9IHRoaXMubGVuZ3RoOyBpIDwgaWk7IGkrKykgaWYgKHRoaXNbaV0g PT0gZWwpIHsKKyAgICAgICAgICAgIHRoaXMuc3BsaWNlKGksIDEpOworICAg ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0 dXJuIGZhbHNlOworICAgIH07CisgICAgc2V0cHJvdG8uaW5zZXJ0QWZ0ZXIg PSBmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAgdmFyIGkgPSB0aGlzLml0ZW1z Lmxlbmd0aDsKKyAgICAgICAgd2hpbGUgKGktLSkgeworICAgICAgICAgICAg dGhpcy5pdGVtc1tpXS5pbnNlcnRBZnRlcihlbCk7CisgICAgICAgIH0KKyAg ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICBzZXRwcm90by5nZXRC Qm94ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgeCA9IFtdLAorICAg ICAgICAgICAgeSA9IFtdLAorICAgICAgICAgICAgeDIgPSBbXSwKKyAgICAg ICAgICAgIHkyID0gW107CisgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLml0 ZW1zLmxlbmd0aDsgaS0tOykgaWYgKCF0aGlzLml0ZW1zW2ldLnJlbW92ZWQp IHsKKyAgICAgICAgICAgIHZhciBib3ggPSB0aGlzLml0ZW1zW2ldLmdldEJC b3goKTsKKyAgICAgICAgICAgIHgucHVzaChib3gueCk7CisgICAgICAgICAg ICB5LnB1c2goYm94LnkpOworICAgICAgICAgICAgeDIucHVzaChib3gueCAr IGJveC53aWR0aCk7CisgICAgICAgICAgICB5Mi5wdXNoKGJveC55ICsgYm94 LmhlaWdodCk7CisgICAgICAgIH0KKyAgICAgICAgeCA9IG1taW4uYXBwbHko MCwgeCk7CisgICAgICAgIHkgPSBtbWluLmFwcGx5KDAsIHkpOworICAgICAg ICB4MiA9IG1tYXguYXBwbHkoMCwgeDIpOworICAgICAgICB5MiA9IG1tYXgu YXBwbHkoMCwgeTIpOworICAgICAgICByZXR1cm4geworICAgICAgICAgICAg eDogeCwKKyAgICAgICAgICAgIHk6IHksCisgICAgICAgICAgICB4MjogeDIs CisgICAgICAgICAgICB5MjogeTIsCisgICAgICAgICAgICB3aWR0aDogeDIg LSB4LAorICAgICAgICAgICAgaGVpZ2h0OiB5MiAtIHksCisgICAgICAgICAg ICBjeDogeCArICh4MiAtIHgpIC8gMiwKKyAgICAgICAgICAgIGN5OiB5ICsg KHkyIC0geSkgLyAyCisgICAgICAgIH07CisgICAgfTsKKyAgICBzZXRwcm90 by5jbG9uZSA9IGZ1bmN0aW9uIChzKSB7CisgICAgICAgIHMgPSBuZXcgU2V0 OworICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSB0aGlzLml0ZW1zLmxl bmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgIHMucHVzaCh0aGlz Lml0ZW1zW2ldLmNsb25lKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVy biBzOworICAgIH07CisgICAgc2V0cHJvdG8udG9TdHJpbmcgPSBmdW5jdGlv biAoKSB7CisgICAgICAgIHJldHVybiAiU25hcFx1MjAxOHMgc2V0IjsKKyAg ICB9OworICAgIHNldHByb3RvLnR5cGUgPSAic2V0IjsKKyAgICAvLyBleHBv cnQKKyAgICBTbmFwLlNldCA9IFNldDsKKyAgICBTbmFwLnNldCA9IGZ1bmN0 aW9uICgpIHsKKyAgICAgICAgdmFyIHNldCA9IG5ldyBTZXQ7CisgICAgICAg IGlmIChhcmd1bWVudHMubGVuZ3RoKSB7CisgICAgICAgICAgICBzZXQucHVz aC5hcHBseShzZXQsIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3Vt ZW50cywgMCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzZXQ7Cisg ICAgfTsKK30pOworCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgQWRvYmUgU3lz dGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLwor Ly8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9u IDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhp cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2Uu CisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQK Ky8vCisvLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5T RS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBs YXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0 cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBh biAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENP TkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxp ZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5n dWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9u cyB1bmRlciB0aGUgTGljZW5zZS4KK1NuYXAucGx1Z2luKGZ1bmN0aW9uIChT bmFwLCBFbGVtZW50LCBQYXBlciwgZ2xvYikgeworICAgIHZhciBuYW1lcyA9 IHt9LAorICAgICAgICByZVVuaXQgPSAvW2Etel0rJC9pLAorICAgICAgICBT dHIgPSBTdHJpbmc7CisgICAgbmFtZXMuc3Ryb2tlID0gbmFtZXMuZmlsbCA9 ICJjb2xvdXIiOworICAgIGZ1bmN0aW9uIGdldEVtcHR5KGl0ZW0pIHsKKyAg ICAgICAgdmFyIGwgPSBpdGVtWzBdOworICAgICAgICBzd2l0Y2ggKGwudG9M b3dlckNhc2UoKSkgeworICAgICAgICAgICAgY2FzZSAidCI6IHJldHVybiBb bCwgMCwgMF07CisgICAgICAgICAgICBjYXNlICJtIjogcmV0dXJuIFtsLCAx LCAwLCAwLCAxLCAwLCAwXTsKKyAgICAgICAgICAgIGNhc2UgInIiOiBpZiAo aXRlbS5sZW5ndGggPT0gNCkgeworICAgICAgICAgICAgICAgIHJldHVybiBb bCwgMCwgaXRlbVsyXSwgaXRlbVszXV07CisgICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICAgIHJldHVybiBbbCwgMF07CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBjYXNlICJzIjogaWYgKGl0ZW0ubGVuZ3RoID09 IDUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gW2wsIDEsIDEsIGl0ZW1b M10sIGl0ZW1bNF1dOworICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLmxl bmd0aCA9PSAzKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFtsLCAxLCAx XTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0 dXJuIFtsLCAxXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K KyAgICBmdW5jdGlvbiBlcXVhbGlzZVRyYW5zZm9ybSh0MSwgdDIsIGdldEJC b3gpIHsKKyAgICAgICAgdDIgPSBTdHIodDIpLnJlcGxhY2UoL1wuezN9fFx1 MjAyNi9nLCB0MSk7CisgICAgICAgIHQxID0gU25hcC5wYXJzZVRyYW5zZm9y bVN0cmluZyh0MSkgfHwgW107CisgICAgICAgIHQyID0gU25hcC5wYXJzZVRy YW5zZm9ybVN0cmluZyh0MikgfHwgW107CisgICAgICAgIHZhciBtYXhsZW5n dGggPSBNYXRoLm1heCh0MS5sZW5ndGgsIHQyLmxlbmd0aCksCisgICAgICAg ICAgICBmcm9tID0gW10sCisgICAgICAgICAgICB0byA9IFtdLAorICAgICAg ICAgICAgaSA9IDAsIGosIGpqLAorICAgICAgICAgICAgdHQxLCB0dDI7Cisg ICAgICAgIGZvciAoOyBpIDwgbWF4bGVuZ3RoOyBpKyspIHsKKyAgICAgICAg ICAgIHR0MSA9IHQxW2ldIHx8IGdldEVtcHR5KHQyW2ldKTsKKyAgICAgICAg ICAgIHR0MiA9IHQyW2ldIHx8IGdldEVtcHR5KHR0MSk7CisgICAgICAgICAg ICBpZiAoKHR0MVswXSAhPSB0dDJbMF0pIHx8CisgICAgICAgICAgICAgICAg KHR0MVswXS50b0xvd2VyQ2FzZSgpID09ICJyIiAmJiAodHQxWzJdICE9IHR0 MlsyXSB8fCB0dDFbM10gIT0gdHQyWzNdKSkgfHwKKyAgICAgICAgICAgICAg ICAodHQxWzBdLnRvTG93ZXJDYXNlKCkgPT0gInMiICYmICh0dDFbM10gIT0g dHQyWzNdIHx8IHR0MVs0XSAhPSB0dDJbNF0pKQorICAgICAgICAgICAgICAg ICkgeworICAgICAgICAgICAgICAgICAgICB0MSA9IFNuYXAuXy50cmFuc2Zv cm0ybWF0cml4KHQxLCBnZXRCQm94KCkpOworICAgICAgICAgICAgICAgICAg ICB0MiA9IFNuYXAuXy50cmFuc2Zvcm0ybWF0cml4KHQyLCBnZXRCQm94KCkp OworICAgICAgICAgICAgICAgICAgICBmcm9tID0gW1sibSIsIHQxLmEsIHQx LmIsIHQxLmMsIHQxLmQsIHQxLmUsIHQxLmZdXTsKKyAgICAgICAgICAgICAg ICAgICAgdG8gPSBbWyJtIiwgdDIuYSwgdDIuYiwgdDIuYywgdDIuZCwgdDIu ZSwgdDIuZl1dOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGZyb21baV0gPSBbXTsKKyAgICAgICAg ICAgIHRvW2ldID0gW107CisgICAgICAgICAgICBmb3IgKGogPSAwLCBqaiA9 IE1hdGgubWF4KHR0MS5sZW5ndGgsIHR0Mi5sZW5ndGgpOyBqIDwgamo7IGor KykgeworICAgICAgICAgICAgICAgIGogaW4gdHQxICYmIChmcm9tW2ldW2pd ID0gdHQxW2pdKTsKKyAgICAgICAgICAgICAgICBqIGluIHR0MiAmJiAodG9b aV1bal0gPSB0dDJbal0pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBmcm9tOiBwYXRoMmFycmF5 KGZyb20pLAorICAgICAgICAgICAgdG86IHBhdGgyYXJyYXkodG8pLAorICAg ICAgICAgICAgZjogZ2V0UGF0aChmcm9tKQorICAgICAgICB9OworICAgIH0K KyAgICBmdW5jdGlvbiBnZXROdW1iZXIodmFsKSB7CisgICAgICAgIHJldHVy biB2YWw7CisgICAgfQorICAgIGZ1bmN0aW9uIGdldFVuaXQodW5pdCkgewor ICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbCkgeworICAgICAgICAgICAg cmV0dXJuICt2YWwudG9GaXhlZCgzKSArIHVuaXQ7CisgICAgICAgIH07Cisg ICAgfQorICAgIGZ1bmN0aW9uIGdldFZpZXdCb3godmFsKSB7CisgICAgICAg IHJldHVybiB2YWwuam9pbigiICIpOworICAgIH0KKyAgICBmdW5jdGlvbiBn ZXRDb2xvdXIoY2xyKSB7CisgICAgICAgIHJldHVybiBTbmFwLnJnYihjbHJb MF0sIGNsclsxXSwgY2xyWzJdKTsKKyAgICB9CisgICAgZnVuY3Rpb24gZ2V0 UGF0aChwYXRoKSB7CisgICAgICAgIHZhciBrID0gMCwgaSwgaWksIGosIGpq LCBvdXQsIGEsIGIgPSBbXTsKKyAgICAgICAgZm9yIChpID0gMCwgaWkgPSBw YXRoLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgIG91dCA9 ICJbIjsKKyAgICAgICAgICAgIGEgPSBbJyInICsgcGF0aFtpXVswXSArICci J107CisgICAgICAgICAgICBmb3IgKGogPSAxLCBqaiA9IHBhdGhbaV0ubGVu Z3RoOyBqIDwgamo7IGorKykgeworICAgICAgICAgICAgICAgIGFbal0gPSAi dmFsWyIgKyAoaysrKSArICJdIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIG91dCArPSBhICsgIl0iOworICAgICAgICAgICAgYltpXSA9IG91dDsK KyAgICAgICAgfQorICAgICAgICByZXR1cm4gRnVuY3Rpb24oInZhbCIsICJy ZXR1cm4gU25hcC5wYXRoLnRvU3RyaW5nLmNhbGwoWyIgKyBiICsgIl0pIik7 CisgICAgfQorICAgIGZ1bmN0aW9uIHBhdGgyYXJyYXkocGF0aCkgeworICAg ICAgICB2YXIgb3V0ID0gW107CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBp aSA9IHBhdGgubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAg Zm9yICh2YXIgaiA9IDEsIGpqID0gcGF0aFtpXS5sZW5ndGg7IGogPCBqajsg aisrKSB7CisgICAgICAgICAgICAgICAgb3V0LnB1c2gocGF0aFtpXVtqXSk7 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG91 dDsKKyAgICB9CisgICAgZnVuY3Rpb24gaXNOdW1lcmljKG9iaikgeworICAg ICAgICByZXR1cm4gaXNGaW5pdGUocGFyc2VGbG9hdChvYmopKTsKKyAgICB9 CisgICAgZnVuY3Rpb24gYXJyYXlFcXVhbChhcnIxLCBhcnIyKSB7CisgICAg ICAgIGlmICghU25hcC5pcyhhcnIxLCAiYXJyYXkiKSB8fCAhU25hcC5pcyhh cnIyLCAiYXJyYXkiKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor ICAgICAgICB9CisgICAgICAgIHJldHVybiBhcnIxLnRvU3RyaW5nKCkgPT0g YXJyMi50b1N0cmluZygpOworICAgIH0KKyAgICBFbGVtZW50LnByb3RvdHlw ZS5lcXVhbCA9IGZ1bmN0aW9uIChuYW1lLCBiKSB7CisgICAgICAgIHJldHVy biBldmUoInNuYXAudXRpbC5lcXVhbCIsIHRoaXMsIG5hbWUsIGIpLmZpcnN0 RGVmaW5lZCgpOworICAgIH07CisgICAgZXZlLm9uKCJzbmFwLnV0aWwuZXF1 YWwiLCBmdW5jdGlvbiAobmFtZSwgYikgeworICAgICAgICB2YXIgQSwgQiwg YSA9IFN0cih0aGlzLmF0dHIobmFtZSkgfHwgIiIpLAorICAgICAgICAgICAg ZWwgPSB0aGlzOworICAgICAgICBpZiAoaXNOdW1lcmljKGEpICYmIGlzTnVt ZXJpYyhiKSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg ICAgICBmcm9tOiBwYXJzZUZsb2F0KGEpLAorICAgICAgICAgICAgICAgIHRv OiBwYXJzZUZsb2F0KGIpLAorICAgICAgICAgICAgICAgIGY6IGdldE51bWJl cgorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICBpZiAobmFt ZXNbbmFtZV0gPT0gImNvbG91ciIpIHsKKyAgICAgICAgICAgIEEgPSBTbmFw LmNvbG9yKGEpOworICAgICAgICAgICAgQiA9IFNuYXAuY29sb3IoYik7Cisg ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIGZyb206IFtB LnIsIEEuZywgQS5iLCBBLm9wYWNpdHldLAorICAgICAgICAgICAgICAgIHRv OiBbQi5yLCBCLmcsIEIuYiwgQi5vcGFjaXR5XSwKKyAgICAgICAgICAgICAg ICBmOiBnZXRDb2xvdXIKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAg ICAgICAgaWYgKG5hbWUgPT0gInZpZXdCb3giKSB7CisgICAgICAgICAgICBB ID0gdGhpcy5hdHRyKG5hbWUpLnZiLnNwbGl0KCIgIikubWFwKE51bWJlcik7 CisgICAgICAgICAgICBCID0gYi5zcGxpdCgiICIpLm1hcChOdW1iZXIpOwor ICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICBmcm9tOiBB LAorICAgICAgICAgICAgICAgIHRvOiBCLAorICAgICAgICAgICAgICAgIGY6 IGdldFZpZXdCb3gKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAg ICAgaWYgKG5hbWUgPT0gInRyYW5zZm9ybSIgfHwgbmFtZSA9PSAiZ3JhZGll bnRUcmFuc2Zvcm0iIHx8IG5hbWUgPT0gInBhdHRlcm5UcmFuc2Zvcm0iKSB7 CisgICAgICAgICAgICBpZiAoYiBpbnN0YW5jZW9mIFNuYXAuTWF0cml4KSB7 CisgICAgICAgICAgICAgICAgYiA9IGIudG9UcmFuc2Zvcm1TdHJpbmcoKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghU25hcC5fLnJnVHJh bnNmb3JtLnRlc3QoYikpIHsKKyAgICAgICAgICAgICAgICBiID0gU25hcC5f LnN2Z1RyYW5zZm9ybTJzdHJpbmcoYik7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICByZXR1cm4gZXF1YWxpc2VUcmFuc2Zvcm0oYSwgYiwgZnVuY3Rp b24gKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBlbC5nZXRCQm94KDEp OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5h bWUgPT0gImQiIHx8IG5hbWUgPT0gInBhdGgiKSB7CisgICAgICAgICAgICBB ID0gU25hcC5wYXRoLnRvQ3ViaWMoYSwgYik7CisgICAgICAgICAgICByZXR1 cm4geworICAgICAgICAgICAgICAgIGZyb206IHBhdGgyYXJyYXkoQVswXSks CisgICAgICAgICAgICAgICAgdG86IHBhdGgyYXJyYXkoQVsxXSksCisgICAg ICAgICAgICAgICAgZjogZ2V0UGF0aChBWzBdKQorICAgICAgICAgICAgfTsK KyAgICAgICAgfQorICAgICAgICBpZiAobmFtZSA9PSAicG9pbnRzIikgewor ICAgICAgICAgICAgQSA9IFN0cihhKS5zcGxpdChTbmFwLl8uc2VwYXJhdG9y KTsKKyAgICAgICAgICAgIEIgPSBTdHIoYikuc3BsaXQoU25hcC5fLnNlcGFy YXRvcik7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAg IGZyb206IEEsCisgICAgICAgICAgICAgICAgdG86IEIsCisgICAgICAgICAg ICAgICAgZjogZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gdmFsOyB9CisgICAg ICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIHZhciBhVW5pdCA9IGEu bWF0Y2gocmVVbml0KSwKKyAgICAgICAgICAgIGJVbml0ID0gU3RyKGIpLm1h dGNoKHJlVW5pdCk7CisgICAgICAgIGlmIChhVW5pdCAmJiBhcnJheUVxdWFs KGFVbml0LCBiVW5pdCkpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAg ICAgICAgICAgICAgZnJvbTogcGFyc2VGbG9hdChhKSwKKyAgICAgICAgICAg ICAgICB0bzogcGFyc2VGbG9hdChiKSwKKyAgICAgICAgICAgICAgICBmOiBn ZXRVbml0KGFVbml0KQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgZnJv bTogdGhpcy5hc1BYKG5hbWUpLAorICAgICAgICAgICAgICAgIHRvOiB0aGlz LmFzUFgobmFtZSwgYiksCisgICAgICAgICAgICAgICAgZjogZ2V0TnVtYmVy CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgfSk7Cit9KTsKKwor Ly8gQ29weXJpZ2h0IChjKSAyMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3Jh dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVu ZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGlj ZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQg aW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBv YnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gaHR0cDov L3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8g VW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0 byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIg dGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJ UywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFO WSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRo ZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n IHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExp Y2Vuc2UuCitTbmFwLnBsdWdpbihmdW5jdGlvbiAoU25hcCwgRWxlbWVudCwg UGFwZXIsIGdsb2IpIHsKKyAgICB2YXIgZWxwcm90byA9IEVsZW1lbnQucHJv dG90eXBlLAorICAgIGhhcyA9ICJoYXNPd25Qcm9wZXJ0eSIsCisgICAgc3Vw cG9ydHNUb3VjaCA9ICJjcmVhdGVUb3VjaCIgaW4gZ2xvYi5kb2MsCisgICAg ZXZlbnRzID0gWworICAgICAgICAiY2xpY2siLCAiZGJsY2xpY2siLCAibW91 c2Vkb3duIiwgIm1vdXNlbW92ZSIsICJtb3VzZW91dCIsCisgICAgICAgICJt b3VzZW92ZXIiLCAibW91c2V1cCIsICJ0b3VjaHN0YXJ0IiwgInRvdWNobW92 ZSIsICJ0b3VjaGVuZCIsCisgICAgICAgICJ0b3VjaGNhbmNlbCIKKyAgICBd LAorICAgIHRvdWNoTWFwID0geworICAgICAgICBtb3VzZWRvd246ICJ0b3Vj aHN0YXJ0IiwKKyAgICAgICAgbW91c2Vtb3ZlOiAidG91Y2htb3ZlIiwKKyAg ICAgICAgbW91c2V1cDogInRvdWNoZW5kIgorICAgIH0sCisgICAgZ2V0U2Ny b2xsID0gZnVuY3Rpb24gKHh5LCBlbCkgeworICAgICAgICB2YXIgbmFtZSA9 IHh5ID09ICJ5IiA/ICJzY3JvbGxUb3AiIDogInNjcm9sbExlZnQiLAorICAg ICAgICAgICAgZG9jID0gZWwgJiYgZWwubm9kZSA/IGVsLm5vZGUub3duZXJE b2N1bWVudCA6IGdsb2IuZG9jOworICAgICAgICByZXR1cm4gZG9jW25hbWUg aW4gZG9jLmRvY3VtZW50RWxlbWVudCA/ICJkb2N1bWVudEVsZW1lbnQiIDog ImJvZHkiXVtuYW1lXTsKKyAgICB9LAorICAgIHByZXZlbnREZWZhdWx0ID0g ZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLnJldHVyblZhbHVlID0gZmFs c2U7CisgICAgfSwKKyAgICBwcmV2ZW50VG91Y2ggPSBmdW5jdGlvbiAoKSB7 CisgICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsRXZlbnQucHJldmVudERl ZmF1bHQoKTsKKyAgICB9LAorICAgIHN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0 aW9uICgpIHsKKyAgICAgICAgdGhpcy5jYW5jZWxCdWJibGUgPSB0cnVlOwor ICAgIH0sCisgICAgc3RvcFRvdWNoID0gZnVuY3Rpb24gKCkgeworICAgICAg ICByZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50LnN0b3BQcm9wYWdhdGlvbigp OworICAgIH0sCisgICAgYWRkRXZlbnQgPSBmdW5jdGlvbiAob2JqLCB0eXBl LCBmbiwgZWxlbWVudCkgeworICAgICAgICB2YXIgcmVhbE5hbWUgPSBzdXBw b3J0c1RvdWNoICYmIHRvdWNoTWFwW3R5cGVdID8gdG91Y2hNYXBbdHlwZV0g OiB0eXBlLAorICAgICAgICAgICAgZiA9IGZ1bmN0aW9uIChlKSB7CisgICAg ICAgICAgICAgICAgdmFyIHNjcm9sbFkgPSBnZXRTY3JvbGwoInkiLCBlbGVt ZW50KSwKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsWCA9IGdldFNjcm9s bCgieCIsIGVsZW1lbnQpOworICAgICAgICAgICAgICAgIGlmIChzdXBwb3J0 c1RvdWNoICYmIHRvdWNoTWFwW2hhc10odHlwZSkpIHsKKyAgICAgICAgICAg ICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZS50YXJnZXRUb3VjaGVz ICYmIGUudGFyZ2V0VG91Y2hlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXRUb3VjaGVzW2ld LnRhcmdldCA9PSBvYmogfHwgb2JqLmNvbnRhaW5zKGUudGFyZ2V0VG91Y2hl c1tpXS50YXJnZXQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg dmFyIG9sZGUgPSBlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUg PSBlLnRhcmdldFRvdWNoZXNbaV07CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZS5vcmlnaW5hbEV2ZW50ID0gb2xkZTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0ID0gcHJldmVudFRvdWNo OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0 aW9uID0gc3RvcFRvdWNoOworICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIHZhciB4ID0gZS5jbGllbnRYICsgc2Nyb2xsWCwKKyAgICAgICAgICAg ICAgICAgICAgeSA9IGUuY2xpZW50WSArIHNjcm9sbFk7CisgICAgICAgICAg ICAgICAgcmV0dXJuIGZuLmNhbGwoZWxlbWVudCwgZSwgeCwgeSk7CisgICAg ICAgICAgICB9OworCisgICAgICAgIGlmICh0eXBlICE9PSByZWFsTmFtZSkg eworICAgICAgICAgICAgb2JqLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZiwg ZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgb2JqLmFkZEV2ZW50TGlz dGVuZXIocmVhbE5hbWUsIGYsIGZhbHNlKTsKKworICAgICAgICByZXR1cm4g ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKHR5cGUgIT09IHJlYWxO YW1lKSB7CisgICAgICAgICAgICAgICAgb2JqLnJlbW92ZUV2ZW50TGlzdGVu ZXIodHlwZSwgZiwgZmFsc2UpOworICAgICAgICAgICAgfQorCisgICAgICAg ICAgICBvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcihyZWFsTmFtZSwgZiwgZmFs c2UpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH07Cisg ICAgfSwKKyAgICBkcmFnID0gW10sCisgICAgZHJhZ01vdmUgPSBmdW5jdGlv biAoZSkgeworICAgICAgICB2YXIgeCA9IGUuY2xpZW50WCwKKyAgICAgICAg ICAgIHkgPSBlLmNsaWVudFksCisgICAgICAgICAgICBzY3JvbGxZID0gZ2V0 U2Nyb2xsKCJ5IiksCisgICAgICAgICAgICBzY3JvbGxYID0gZ2V0U2Nyb2xs KCJ4IiksCisgICAgICAgICAgICBkcmFnaSwKKyAgICAgICAgICAgIGogPSBk cmFnLmxlbmd0aDsKKyAgICAgICAgd2hpbGUgKGotLSkgeworICAgICAgICAg ICAgZHJhZ2kgPSBkcmFnW2pdOworICAgICAgICAgICAgaWYgKHN1cHBvcnRz VG91Y2gpIHsKKyAgICAgICAgICAgICAgICB2YXIgaSA9IGUudG91Y2hlcyAm JiBlLnRvdWNoZXMubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICB0b3Vj aDsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaS0tKSB7CisgICAgICAgICAg ICAgICAgICAgIHRvdWNoID0gZS50b3VjaGVzW2ldOworICAgICAgICAgICAg ICAgICAgICBpZiAodG91Y2guaWRlbnRpZmllciA9PSBkcmFnaS5lbC5fZHJh Zy5pZCB8fCBkcmFnaS5lbC5ub2RlLmNvbnRhaW5zKHRvdWNoLnRhcmdldCkp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHggPSB0b3VjaC5jbGllbnRY OworICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHRvdWNoLmNsaWVudFk7 CisgICAgICAgICAgICAgICAgICAgICAgICAoZS5vcmlnaW5hbEV2ZW50ID8g ZS5vcmlnaW5hbEV2ZW50IDogZSkucHJldmVudERlZmF1bHQoKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICB2YXIgbm9kZSA9IGRyYWdpLmVsLm5vZGUs CisgICAgICAgICAgICAgICAgbywKKyAgICAgICAgICAgICAgICBuZXh0ID0g bm9kZS5uZXh0U2libGluZywKKyAgICAgICAgICAgICAgICBwYXJlbnQgPSBu b2RlLnBhcmVudE5vZGUsCisgICAgICAgICAgICAgICAgZGlzcGxheSA9IG5v ZGUuc3R5bGUuZGlzcGxheTsKKyAgICAgICAgICAgIC8vIGdsb2Iud2luLm9w ZXJhICYmIHBhcmVudC5yZW1vdmVDaGlsZChub2RlKTsKKyAgICAgICAgICAg IC8vIG5vZGUuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgICAgICAgICAg IC8vIG8gPSBkcmFnaS5lbC5wYXBlci5nZXRFbGVtZW50QnlQb2ludCh4LCB5 KTsKKyAgICAgICAgICAgIC8vIG5vZGUuc3R5bGUuZGlzcGxheSA9IGRpc3Bs YXk7CisgICAgICAgICAgICAvLyBnbG9iLndpbi5vcGVyYSAmJiAobmV4dCA/ IHBhcmVudC5pbnNlcnRCZWZvcmUobm9kZSwgbmV4dCkgOiBwYXJlbnQuYXBw ZW5kQ2hpbGQobm9kZSkpOworICAgICAgICAgICAgLy8gbyAmJiBldmUoInNu YXAuZHJhZy5vdmVyLiIgKyBkcmFnaS5lbC5pZCwgZHJhZ2kuZWwsIG8pOwor ICAgICAgICAgICAgeCArPSBzY3JvbGxYOworICAgICAgICAgICAgeSArPSBz Y3JvbGxZOworICAgICAgICAgICAgZXZlKCJzbmFwLmRyYWcubW92ZS4iICsg ZHJhZ2kuZWwuaWQsIGRyYWdpLm1vdmVfc2NvcGUgfHwgZHJhZ2kuZWwsIHgg LSBkcmFnaS5lbC5fZHJhZy54LCB5IC0gZHJhZ2kuZWwuX2RyYWcueSwgeCwg eSwgZSk7CisgICAgICAgIH0KKyAgICB9LAorICAgIGRyYWdVcCA9IGZ1bmN0 aW9uIChlKSB7CisgICAgICAgIFNuYXAudW5tb3VzZW1vdmUoZHJhZ01vdmUp LnVubW91c2V1cChkcmFnVXApOworICAgICAgICB2YXIgaSA9IGRyYWcubGVu Z3RoLAorICAgICAgICAgICAgZHJhZ2k7CisgICAgICAgIHdoaWxlIChpLS0p IHsKKyAgICAgICAgICAgIGRyYWdpID0gZHJhZ1tpXTsKKyAgICAgICAgICAg IGRyYWdpLmVsLl9kcmFnID0ge307CisgICAgICAgICAgICBldmUoInNuYXAu ZHJhZy5lbmQuIiArIGRyYWdpLmVsLmlkLCBkcmFnaS5lbmRfc2NvcGUgfHwg ZHJhZ2kuc3RhcnRfc2NvcGUgfHwgZHJhZ2kubW92ZV9zY29wZSB8fCBkcmFn aS5lbCwgZSk7CisgICAgICAgICAgICBldmUub2ZmKCJzbmFwLmRyYWcuKi4i ICsgZHJhZ2kuZWwuaWQpOworICAgICAgICB9CisgICAgICAgIGRyYWcgPSBb XTsKKyAgICB9OworICAgIC8qXAorICAgICAqIEVsZW1lbnQuY2xpY2sKKyAg ICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEFkZHMgYSBjbGljayBl dmVudCBoYW5kbGVyIHRvIHRoZSBlbGVtZW50CisgICAgIC0gaGFuZGxlciAo ZnVuY3Rpb24pIGhhbmRsZXIgZm9yIHRoZSBldmVudAorICAgICA9IChvYmpl Y3QpIEBFbGVtZW50CisgICAgXCovCisgICAgLypcCisgICAgICogRWxlbWVu dC51bmNsaWNrCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBS ZW1vdmVzIGEgY2xpY2sgZXZlbnQgaGFuZGxlciBmcm9tIHRoZSBlbGVtZW50 CisgICAgIC0gaGFuZGxlciAoZnVuY3Rpb24pIGhhbmRsZXIgZm9yIHRoZSBl dmVudAorICAgICA9IChvYmplY3QpIEBFbGVtZW50CisgICAgXCovCisKKyAg ICAvKlwKKyAgICAgKiBFbGVtZW50LmRibGNsaWNrCisgICAgIFsgbWV0aG9k IF0KKyAgICAgKioKKyAgICAgKiBBZGRzIGEgZG91YmxlIGNsaWNrIGV2ZW50 IGhhbmRsZXIgdG8gdGhlIGVsZW1lbnQKKyAgICAgLSBoYW5kbGVyIChmdW5j dGlvbikgaGFuZGxlciBmb3IgdGhlIGV2ZW50CisgICAgID0gKG9iamVjdCkg QEVsZW1lbnQKKyAgICBcKi8KKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LnVu ZGJsY2xpY2sKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJl bW92ZXMgYSBkb3VibGUgY2xpY2sgZXZlbnQgaGFuZGxlciBmcm9tIHRoZSBl bGVtZW50CisgICAgIC0gaGFuZGxlciAoZnVuY3Rpb24pIGhhbmRsZXIgZm9y IHRoZSBldmVudAorICAgICA9IChvYmplY3QpIEBFbGVtZW50CisgICAgXCov CisKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50Lm1vdXNlZG93bgorICAgICBb IG1ldGhvZCBdCisgICAgICoqCisgICAgICogQWRkcyBhIG1vdXNlZG93biBl dmVudCBoYW5kbGVyIHRvIHRoZSBlbGVtZW50CisgICAgIC0gaGFuZGxlciAo ZnVuY3Rpb24pIGhhbmRsZXIgZm9yIHRoZSBldmVudAorICAgICA9IChvYmpl Y3QpIEBFbGVtZW50CisgICAgXCovCisgICAgLypcCisgICAgICogRWxlbWVu dC51bm1vdXNlZG93bgorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAg ICogUmVtb3ZlcyBhIG1vdXNlZG93biBldmVudCBoYW5kbGVyIGZyb20gdGhl IGVsZW1lbnQKKyAgICAgLSBoYW5kbGVyIChmdW5jdGlvbikgaGFuZGxlciBm b3IgdGhlIGV2ZW50CisgICAgID0gKG9iamVjdCkgQEVsZW1lbnQKKyAgICBc Ki8KKworICAgIC8qXAorICAgICAqIEVsZW1lbnQubW91c2Vtb3ZlCisgICAg IFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBBZGRzIGEgbW91c2Vtb3Zl IGV2ZW50IGhhbmRsZXIgdG8gdGhlIGVsZW1lbnQKKyAgICAgLSBoYW5kbGVy IChmdW5jdGlvbikgaGFuZGxlciBmb3IgdGhlIGV2ZW50CisgICAgID0gKG9i amVjdCkgQEVsZW1lbnQKKyAgICBcKi8KKyAgICAvKlwKKyAgICAgKiBFbGVt ZW50LnVubW91c2Vtb3ZlCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAg ICAgKiBSZW1vdmVzIGEgbW91c2Vtb3ZlIGV2ZW50IGhhbmRsZXIgZnJvbSB0 aGUgZWxlbWVudAorICAgICAtIGhhbmRsZXIgKGZ1bmN0aW9uKSBoYW5kbGVy IGZvciB0aGUgZXZlbnQKKyAgICAgPSAob2JqZWN0KSBARWxlbWVudAorICAg IFwqLworCisgICAgLypcCisgICAgICogRWxlbWVudC5tb3VzZW91dAorICAg ICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQWRkcyBhIG1vdXNlb3V0 IGV2ZW50IGhhbmRsZXIgdG8gdGhlIGVsZW1lbnQKKyAgICAgLSBoYW5kbGVy IChmdW5jdGlvbikgaGFuZGxlciBmb3IgdGhlIGV2ZW50CisgICAgID0gKG9i amVjdCkgQEVsZW1lbnQKKyAgICBcKi8KKyAgICAvKlwKKyAgICAgKiBFbGVt ZW50LnVubW91c2VvdXQKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAg ICAqIFJlbW92ZXMgYSBtb3VzZW91dCBldmVudCBoYW5kbGVyIGZyb20gdGhl IGVsZW1lbnQKKyAgICAgLSBoYW5kbGVyIChmdW5jdGlvbikgaGFuZGxlciBm b3IgdGhlIGV2ZW50CisgICAgID0gKG9iamVjdCkgQEVsZW1lbnQKKyAgICBc Ki8KKworICAgIC8qXAorICAgICAqIEVsZW1lbnQubW91c2VvdmVyCisgICAg IFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBBZGRzIGEgbW91c2VvdmVy IGV2ZW50IGhhbmRsZXIgdG8gdGhlIGVsZW1lbnQKKyAgICAgLSBoYW5kbGVy IChmdW5jdGlvbikgaGFuZGxlciBmb3IgdGhlIGV2ZW50CisgICAgID0gKG9i amVjdCkgQEVsZW1lbnQKKyAgICBcKi8KKyAgICAvKlwKKyAgICAgKiBFbGVt ZW50LnVubW91c2VvdmVyCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAg ICAgKiBSZW1vdmVzIGEgbW91c2VvdmVyIGV2ZW50IGhhbmRsZXIgZnJvbSB0 aGUgZWxlbWVudAorICAgICAtIGhhbmRsZXIgKGZ1bmN0aW9uKSBoYW5kbGVy IGZvciB0aGUgZXZlbnQKKyAgICAgPSAob2JqZWN0KSBARWxlbWVudAorICAg IFwqLworCisgICAgLypcCisgICAgICogRWxlbWVudC5tb3VzZXVwCisgICAg IFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBBZGRzIGEgbW91c2V1cCBl dmVudCBoYW5kbGVyIHRvIHRoZSBlbGVtZW50CisgICAgIC0gaGFuZGxlciAo ZnVuY3Rpb24pIGhhbmRsZXIgZm9yIHRoZSBldmVudAorICAgICA9IChvYmpl Y3QpIEBFbGVtZW50CisgICAgXCovCisgICAgLypcCisgICAgICogRWxlbWVu dC51bm1vdXNldXAKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAq IFJlbW92ZXMgYSBtb3VzZXVwIGV2ZW50IGhhbmRsZXIgZnJvbSB0aGUgZWxl bWVudAorICAgICAtIGhhbmRsZXIgKGZ1bmN0aW9uKSBoYW5kbGVyIGZvciB0 aGUgZXZlbnQKKyAgICAgPSAob2JqZWN0KSBARWxlbWVudAorICAgIFwqLwor CisgICAgLypcCisgICAgICogRWxlbWVudC50b3VjaHN0YXJ0CisgICAgIFsg bWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBBZGRzIGEgdG91Y2hzdGFydCBl dmVudCBoYW5kbGVyIHRvIHRoZSBlbGVtZW50CisgICAgIC0gaGFuZGxlciAo ZnVuY3Rpb24pIGhhbmRsZXIgZm9yIHRoZSBldmVudAorICAgICA9IChvYmpl Y3QpIEBFbGVtZW50CisgICAgXCovCisgICAgLypcCisgICAgICogRWxlbWVu dC51bnRvdWNoc3RhcnQKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAg ICAqIFJlbW92ZXMgYSB0b3VjaHN0YXJ0IGV2ZW50IGhhbmRsZXIgZnJvbSB0 aGUgZWxlbWVudAorICAgICAtIGhhbmRsZXIgKGZ1bmN0aW9uKSBoYW5kbGVy IGZvciB0aGUgZXZlbnQKKyAgICAgPSAob2JqZWN0KSBARWxlbWVudAorICAg IFwqLworCisgICAgLypcCisgICAgICogRWxlbWVudC50b3VjaG1vdmUKKyAg ICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEFkZHMgYSB0b3VjaG1v dmUgZXZlbnQgaGFuZGxlciB0byB0aGUgZWxlbWVudAorICAgICAtIGhhbmRs ZXIgKGZ1bmN0aW9uKSBoYW5kbGVyIGZvciB0aGUgZXZlbnQKKyAgICAgPSAo b2JqZWN0KSBARWxlbWVudAorICAgIFwqLworICAgIC8qXAorICAgICAqIEVs ZW1lbnQudW50b3VjaG1vdmUKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgor ICAgICAqIFJlbW92ZXMgYSB0b3VjaG1vdmUgZXZlbnQgaGFuZGxlciBmcm9t IHRoZSBlbGVtZW50CisgICAgIC0gaGFuZGxlciAoZnVuY3Rpb24pIGhhbmRs ZXIgZm9yIHRoZSBldmVudAorICAgICA9IChvYmplY3QpIEBFbGVtZW50Cisg ICAgXCovCisKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LnRvdWNoZW5kCisg ICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBBZGRzIGEgdG91Y2hl bmQgZXZlbnQgaGFuZGxlciB0byB0aGUgZWxlbWVudAorICAgICAtIGhhbmRs ZXIgKGZ1bmN0aW9uKSBoYW5kbGVyIGZvciB0aGUgZXZlbnQKKyAgICAgPSAo b2JqZWN0KSBARWxlbWVudAorICAgIFwqLworICAgIC8qXAorICAgICAqIEVs ZW1lbnQudW50b3VjaGVuZAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisg ICAgICogUmVtb3ZlcyBhIHRvdWNoZW5kIGV2ZW50IGhhbmRsZXIgZnJvbSB0 aGUgZWxlbWVudAorICAgICAtIGhhbmRsZXIgKGZ1bmN0aW9uKSBoYW5kbGVy IGZvciB0aGUgZXZlbnQKKyAgICAgPSAob2JqZWN0KSBARWxlbWVudAorICAg IFwqLworCisgICAgLypcCisgICAgICogRWxlbWVudC50b3VjaGNhbmNlbAor ICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQWRkcyBhIHRvdWNo Y2FuY2VsIGV2ZW50IGhhbmRsZXIgdG8gdGhlIGVsZW1lbnQKKyAgICAgLSBo YW5kbGVyIChmdW5jdGlvbikgaGFuZGxlciBmb3IgdGhlIGV2ZW50CisgICAg ID0gKG9iamVjdCkgQEVsZW1lbnQKKyAgICBcKi8KKyAgICAvKlwKKyAgICAg KiBFbGVtZW50LnVudG91Y2hjYW5jZWwKKyAgICAgWyBtZXRob2QgXQorICAg ICAqKgorICAgICAqIFJlbW92ZXMgYSB0b3VjaGNhbmNlbCBldmVudCBoYW5k bGVyIGZyb20gdGhlIGVsZW1lbnQKKyAgICAgLSBoYW5kbGVyIChmdW5jdGlv bikgaGFuZGxlciBmb3IgdGhlIGV2ZW50CisgICAgID0gKG9iamVjdCkgQEVs ZW1lbnQKKyAgICBcKi8KKyAgICBmb3IgKHZhciBpID0gZXZlbnRzLmxlbmd0 aDsgaS0tOykgeworICAgICAgICAoZnVuY3Rpb24gKGV2ZW50TmFtZSkgewor ICAgICAgICAgICAgU25hcFtldmVudE5hbWVdID0gZWxwcm90b1tldmVudE5h bWVdID0gZnVuY3Rpb24gKGZuLCBzY29wZSkgeworICAgICAgICAgICAgICAg IGlmIChTbmFwLmlzKGZuLCAiZnVuY3Rpb24iKSkgeworICAgICAgICAgICAg ICAgICAgICB0aGlzLmV2ZW50cyA9IHRoaXMuZXZlbnRzIHx8IFtdOworICAg ICAgICAgICAgICAgICAgICB0aGlzLmV2ZW50cy5wdXNoKHsKKyAgICAgICAg ICAgICAgICAgICAgICAgIG5hbWU6IGV2ZW50TmFtZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgIGY6IGZuLAorICAgICAgICAgICAgICAgICAgICAgICAg dW5iaW5kOiBhZGRFdmVudCh0aGlzLm5vZGUgfHwgZG9jdW1lbnQsIGV2ZW50 TmFtZSwgZm4sIHNjb3BlIHx8IHRoaXMpCisgICAgICAgICAgICAgICAgICAg IH0pOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHRoaXMuZXZlbnRzLmxlbmd0 aDsgaSA8IGlpOyBpKyspIGlmICh0aGlzLmV2ZW50c1tpXS5uYW1lID09IGV2 ZW50TmFtZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV2ZW50c1tpXS5mLmNh bGwodGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChl KSB7fQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAg fTsKKyAgICAgICAgICAgIFNuYXBbInVuIiArIGV2ZW50TmFtZV0gPQorICAg ICAgICAgICAgZWxwcm90b1sidW4iICsgZXZlbnROYW1lXSA9IGZ1bmN0aW9u IChmbikgeworICAgICAgICAgICAgICAgIHZhciBldmVudHMgPSB0aGlzLmV2 ZW50cyB8fCBbXSwKKyAgICAgICAgICAgICAgICAgICAgbCA9IGV2ZW50cy5s ZW5ndGg7CisgICAgICAgICAgICAgICAgd2hpbGUgKGwtLSkgaWYgKGV2ZW50 c1tsXS5uYW1lID09IGV2ZW50TmFtZSAmJgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChldmVudHNbbF0uZiA9PSBmbiB8fCAhZm4pKSB7Cisg ICAgICAgICAgICAgICAgICAgIGV2ZW50c1tsXS51bmJpbmQoKTsKKyAgICAg ICAgICAgICAgICAgICAgZXZlbnRzLnNwbGljZShsLCAxKTsKKyAgICAgICAg ICAgICAgICAgICAgIWV2ZW50cy5sZW5ndGggJiYgZGVsZXRlIHRoaXMuZXZl bnRzOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg ICAgICAgICAgICB9OworICAgICAgICB9KShldmVudHNbaV0pOworICAgIH0K KyAgICAvKlwKKyAgICAgKiBFbGVtZW50LmhvdmVyCisgICAgIFsgbWV0aG9k IF0KKyAgICAgKioKKyAgICAgKiBBZGRzIGhvdmVyIGV2ZW50IGhhbmRsZXJz IHRvIHRoZSBlbGVtZW50CisgICAgIC0gZl9pbiAoZnVuY3Rpb24pIGhhbmRs ZXIgZm9yIGhvdmVyIGluCisgICAgIC0gZl9vdXQgKGZ1bmN0aW9uKSBoYW5k bGVyIGZvciBob3ZlciBvdXQKKyAgICAgLSBpY29udGV4dCAob2JqZWN0KSAj b3B0aW9uYWwgY29udGV4dCBmb3IgaG92ZXIgaW4gaGFuZGxlcgorICAgICAt IG9jb250ZXh0IChvYmplY3QpICNvcHRpb25hbCBjb250ZXh0IGZvciBob3Zl ciBvdXQgaGFuZGxlcgorICAgICA9IChvYmplY3QpIEBFbGVtZW50CisgICAg XCovCisgICAgZWxwcm90by5ob3ZlciA9IGZ1bmN0aW9uIChmX2luLCBmX291 dCwgc2NvcGVfaW4sIHNjb3BlX291dCkgeworICAgICAgICByZXR1cm4gdGhp cy5tb3VzZW92ZXIoZl9pbiwgc2NvcGVfaW4pLm1vdXNlb3V0KGZfb3V0LCBz Y29wZV9vdXQgfHwgc2NvcGVfaW4pOworICAgIH07CisgICAgLypcCisgICAg ICogRWxlbWVudC51bmhvdmVyCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioK KyAgICAgKiBSZW1vdmVzIGhvdmVyIGV2ZW50IGhhbmRsZXJzIGZyb20gdGhl IGVsZW1lbnQKKyAgICAgLSBmX2luIChmdW5jdGlvbikgaGFuZGxlciBmb3Ig aG92ZXIgaW4KKyAgICAgLSBmX291dCAoZnVuY3Rpb24pIGhhbmRsZXIgZm9y IGhvdmVyIG91dAorICAgICA9IChvYmplY3QpIEBFbGVtZW50CisgICAgXCov CisgICAgZWxwcm90by51bmhvdmVyID0gZnVuY3Rpb24gKGZfaW4sIGZfb3V0 KSB7CisgICAgICAgIHJldHVybiB0aGlzLnVubW91c2VvdmVyKGZfaW4pLnVu bW91c2VvdXQoZl9vdXQpOworICAgIH07CisgICAgdmFyIGRyYWdnYWJsZSA9 IFtdOworICAgIC8vIFNJRVJSQSB1bmNsZWFyIHdoYXQgX2NvbnRleHRfIHJl ZmVycyB0byBmb3Igc3RhcnRpbmcsIGVuZGluZywgbW92aW5nIHRoZSBkcmFn IGdlc3R1cmUuCisgICAgLy8gU0lFUlJBIEVsZW1lbnQuZHJhZygpOiBfeCBw b3NpdGlvbiBvZiB0aGUgbW91c2VfOiBXaGVyZSBhcmUgdGhlIHgveSB2YWx1 ZXMgb2Zmc2V0IGZyb20/CisgICAgLy8gU0lFUlJBIEVsZW1lbnQuZHJhZygp OiBtdWNoIG9mIHRoaXMgbWVtYmVyJ3MgZG9jIGFwcGVhcnMgdG8gYmUgZHVw bGljYXRlZCBmb3Igc29tZSByZWFzb24uCisgICAgLy8gU0lFUlJBIFVuY2xl YXIgYWJvdXQgdGhpcyBzZW50ZW5jZTogX0FkZGl0aW9uYWxseSBmb2xsb3dp bmcgZHJhZyBldmVudHMgd2lsbCBiZSB0cmlnZ2VyZWQ6IGRyYWcuc3RhcnQu PGlkPiBvbiBzdGFydCwgZHJhZy5lbmQuPGlkPiBvbiBlbmQgYW5kIGRyYWcu bW92ZS48aWQ+IG9uIGV2ZXJ5IG1vdmUuXyBJcyB0aGVyZSBhIGdsb2JhbCBf ZHJhZ18gb2JqZWN0IHRvIHdoaWNoIHlvdSBjYW4gYXNzaWduIGhhbmRsZXJz IGtleWVkIGJ5IGFuIGVsZW1lbnQncyBJRD8KKyAgICAvKlwKKyAgICAgKiBF bGVtZW50LmRyYWcKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAq IEFkZHMgZXZlbnQgaGFuZGxlcnMgZm9yIGFuIGVsZW1lbnQncyBkcmFnIGdl c3R1cmUKKyAgICAgKioKKyAgICAgLSBvbm1vdmUgKGZ1bmN0aW9uKSBoYW5k bGVyIGZvciBtb3ZpbmcKKyAgICAgLSBvbnN0YXJ0IChmdW5jdGlvbikgaGFu ZGxlciBmb3IgZHJhZyBzdGFydAorICAgICAtIG9uZW5kIChmdW5jdGlvbikg aGFuZGxlciBmb3IgZHJhZyBlbmQKKyAgICAgLSBtY29udGV4dCAob2JqZWN0 KSAjb3B0aW9uYWwgY29udGV4dCBmb3IgbW92aW5nIGhhbmRsZXIKKyAgICAg LSBzY29udGV4dCAob2JqZWN0KSAjb3B0aW9uYWwgY29udGV4dCBmb3IgZHJh ZyBzdGFydCBoYW5kbGVyCisgICAgIC0gZWNvbnRleHQgKG9iamVjdCkgI29w dGlvbmFsIGNvbnRleHQgZm9yIGRyYWcgZW5kIGhhbmRsZXIKKyAgICAgKiBB ZGRpdGlvbmFseSBmb2xsb3dpbmcgYGRyYWdgIGV2ZW50cyBhcmUgdHJpZ2dl cmVkOiBgZHJhZy5zdGFydC48aWQ+YCBvbiBzdGFydCwKKyAgICAgKiBgZHJh Zy5lbmQuPGlkPmAgb24gZW5kIGFuZCBgZHJhZy5tb3ZlLjxpZD5gIG9uIGV2 ZXJ5IG1vdmUuIFdoZW4gZWxlbWVudCBpcyBkcmFnZ2VkIG92ZXIgYW5vdGhl ciBlbGVtZW50CisgICAgICogYGRyYWcub3Zlci48aWQ+YCBmaXJlcyBhcyB3 ZWxsLgorICAgICAqCisgICAgICogU3RhcnQgZXZlbnQgYW5kIHN0YXJ0IGhh bmRsZXIgYXJlIGNhbGxlZCBpbiBzcGVjaWZpZWQgY29udGV4dCBvciBpbiBj b250ZXh0IG9mIHRoZSBlbGVtZW50IHdpdGggZm9sbG93aW5nIHBhcmFtZXRl cnM6CisgICAgIG8geCAobnVtYmVyKSB4IHBvc2l0aW9uIG9mIHRoZSBtb3Vz ZQorICAgICBvIHkgKG51bWJlcikgeSBwb3NpdGlvbiBvZiB0aGUgbW91c2UK KyAgICAgbyBldmVudCAob2JqZWN0KSBET00gZXZlbnQgb2JqZWN0CisgICAg ICogTW92ZSBldmVudCBhbmQgbW92ZSBoYW5kbGVyIGFyZSBjYWxsZWQgaW4g c3BlY2lmaWVkIGNvbnRleHQgb3IgaW4gY29udGV4dCBvZiB0aGUgZWxlbWVu dCB3aXRoIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgorICAgICBvIGR4IChudW1i ZXIpIHNoaWZ0IGJ5IHggZnJvbSB0aGUgc3RhcnQgcG9pbnQKKyAgICAgbyBk eSAobnVtYmVyKSBzaGlmdCBieSB5IGZyb20gdGhlIHN0YXJ0IHBvaW50Cisg ICAgIG8geCAobnVtYmVyKSB4IHBvc2l0aW9uIG9mIHRoZSBtb3VzZQorICAg ICBvIHkgKG51bWJlcikgeSBwb3NpdGlvbiBvZiB0aGUgbW91c2UKKyAgICAg byBldmVudCAob2JqZWN0KSBET00gZXZlbnQgb2JqZWN0CisgICAgICogRW5k IGV2ZW50IGFuZCBlbmQgaGFuZGxlciBhcmUgY2FsbGVkIGluIHNwZWNpZmll ZCBjb250ZXh0IG9yIGluIGNvbnRleHQgb2YgdGhlIGVsZW1lbnQgd2l0aCBm b2xsb3dpbmcgcGFyYW1ldGVyczoKKyAgICAgbyBldmVudCAob2JqZWN0KSBE T00gZXZlbnQgb2JqZWN0CisgICAgID0gKG9iamVjdCkgQEVsZW1lbnQKKyAg ICBcKi8KKyAgICBlbHByb3RvLmRyYWcgPSBmdW5jdGlvbiAob25tb3ZlLCBv bnN0YXJ0LCBvbmVuZCwgbW92ZV9zY29wZSwgc3RhcnRfc2NvcGUsIGVuZF9z Y29wZSkgeworICAgICAgICB2YXIgZWwgPSB0aGlzOworICAgICAgICBpZiAo IWFyZ3VtZW50cy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHZhciBvcmlnVHJh bnNmb3JtOworICAgICAgICAgICAgcmV0dXJuIGVsLmRyYWcoZnVuY3Rpb24g KGR4LCBkeSkgeworICAgICAgICAgICAgICAgIHRoaXMuYXR0cih7CisgICAg ICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogb3JpZ1RyYW5zZm9ybSArIChv cmlnVHJhbnNmb3JtID8gIlQiIDogInQiKSArIFtkeCwgZHldCisgICAgICAg ICAgICAgICAgfSk7CisgICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7Cisg ICAgICAgICAgICAgICAgb3JpZ1RyYW5zZm9ybSA9IHRoaXMudHJhbnNmb3Jt KCkubG9jYWw7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAg ICBmdW5jdGlvbiBzdGFydChlLCB4LCB5KSB7CisgICAgICAgICAgICAoZS5v cmlnaW5hbEV2ZW50IHx8IGUpLnByZXZlbnREZWZhdWx0KCk7CisgICAgICAg ICAgICBlbC5fZHJhZy54ID0geDsKKyAgICAgICAgICAgIGVsLl9kcmFnLnkg PSB5OworICAgICAgICAgICAgZWwuX2RyYWcuaWQgPSBlLmlkZW50aWZpZXI7 CisgICAgICAgICAgICAhZHJhZy5sZW5ndGggJiYgU25hcC5tb3VzZW1vdmUo ZHJhZ01vdmUpLm1vdXNldXAoZHJhZ1VwKTsKKyAgICAgICAgICAgIGRyYWcu cHVzaCh7ZWw6IGVsLCBtb3ZlX3Njb3BlOiBtb3ZlX3Njb3BlLCBzdGFydF9z Y29wZTogc3RhcnRfc2NvcGUsIGVuZF9zY29wZTogZW5kX3Njb3BlfSk7Cisg ICAgICAgICAgICBvbnN0YXJ0ICYmIGV2ZS5vbigic25hcC5kcmFnLnN0YXJ0 LiIgKyBlbC5pZCwgb25zdGFydCk7CisgICAgICAgICAgICBvbm1vdmUgJiYg ZXZlLm9uKCJzbmFwLmRyYWcubW92ZS4iICsgZWwuaWQsIG9ubW92ZSk7Cisg ICAgICAgICAgICBvbmVuZCAmJiBldmUub24oInNuYXAuZHJhZy5lbmQuIiAr IGVsLmlkLCBvbmVuZCk7CisgICAgICAgICAgICBldmUoInNuYXAuZHJhZy5z dGFydC4iICsgZWwuaWQsIHN0YXJ0X3Njb3BlIHx8IG1vdmVfc2NvcGUgfHwg ZWwsIHgsIHksIGUpOworICAgICAgICB9CisgICAgICAgIGZ1bmN0aW9uIGlu aXQoZSwgeCwgeSkgeworICAgICAgICAgICAgZXZlKCJzbmFwLmRyYWdpbml0 LiIgKyBlbC5pZCwgZWwsIGUsIHgsIHkpOworICAgICAgICB9CisgICAgICAg IGV2ZS5vbigic25hcC5kcmFnaW5pdC4iICsgZWwuaWQsIHN0YXJ0KTsKKyAg ICAgICAgZWwuX2RyYWcgPSB7fTsKKyAgICAgICAgZHJhZ2dhYmxlLnB1c2go e2VsOiBlbCwgc3RhcnQ6IHN0YXJ0LCBpbml0OiBpbml0fSk7CisgICAgICAg IGVsLm1vdXNlZG93bihpbml0KTsKKyAgICAgICAgcmV0dXJuIGVsOworICAg IH07CisgICAgLyoKKyAgICAgKiBFbGVtZW50Lm9uRHJhZ092ZXIKKyAgICAg WyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFNob3J0Y3V0IHRvIGFzc2ln biBldmVudCBoYW5kbGVyIGZvciBgZHJhZy5vdmVyLjxpZD5gIGV2ZW50LCB3 aGVyZSBgaWRgIGlzIHRoZSBlbGVtZW50J3MgYGlkYCAoc2VlIEBFbGVtZW50 LmlkKQorICAgICAtIGYgKGZ1bmN0aW9uKSBoYW5kbGVyIGZvciBldmVudCwg Zmlyc3QgYXJndW1lbnQgd291bGQgYmUgdGhlIGVsZW1lbnQgeW91IGFyZSBk cmFnZ2luZyBvdmVyCisgICAgXCovCisgICAgLy8gZWxwcm90by5vbkRyYWdP dmVyID0gZnVuY3Rpb24gKGYpIHsKKyAgICAvLyAgICAgZiA/IGV2ZS5vbigi c25hcC5kcmFnLm92ZXIuIiArIHRoaXMuaWQsIGYpIDogZXZlLnVuYmluZCgi c25hcC5kcmFnLm92ZXIuIiArIHRoaXMuaWQpOworICAgIC8vIH07CisgICAg LypcCisgICAgICogRWxlbWVudC51bmRyYWcKKyAgICAgWyBtZXRob2QgXQor ICAgICAqKgorICAgICAqIFJlbW92ZXMgYWxsIGRyYWcgZXZlbnQgaGFuZGxl cnMgZnJvbSB0aGUgZ2l2ZW4gZWxlbWVudAorICAgIFwqLworICAgIGVscHJv dG8udW5kcmFnID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgaSA9IGRy YWdnYWJsZS5sZW5ndGg7CisgICAgICAgIHdoaWxlIChpLS0pIGlmIChkcmFn Z2FibGVbaV0uZWwgPT0gdGhpcykgeworICAgICAgICAgICAgdGhpcy51bm1v dXNlZG93bihkcmFnZ2FibGVbaV0uaW5pdCk7CisgICAgICAgICAgICBkcmFn Z2FibGUuc3BsaWNlKGksIDEpOworICAgICAgICAgICAgZXZlLnVuYmluZCgi c25hcC5kcmFnLiouIiArIHRoaXMuaWQpOworICAgICAgICAgICAgZXZlLnVu YmluZCgic25hcC5kcmFnaW5pdC4iICsgdGhpcy5pZCk7CisgICAgICAgIH0K KyAgICAgICAgIWRyYWdnYWJsZS5sZW5ndGggJiYgU25hcC51bm1vdXNlbW92 ZShkcmFnTW92ZSkudW5tb3VzZXVwKGRyYWdVcCk7CisgICAgICAgIHJldHVy biB0aGlzOworICAgIH07Cit9KTsKKworLy8gQ29weXJpZ2h0IChjKSAyMDEz IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5z ZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBu b3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRo ZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBM aWNlbnNlIGF0CisvLworLy8gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vu c2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFw cGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2Fy ZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJp YnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFO VElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVz cyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3Bl Y2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8g bGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCitTbmFwLnBsdWdpbihm dW5jdGlvbiAoU25hcCwgRWxlbWVudCwgUGFwZXIsIGdsb2IpIHsKKyAgICB2 YXIgZWxwcm90byA9IEVsZW1lbnQucHJvdG90eXBlLAorICAgICAgICBwcHJv dG8gPSBQYXBlci5wcm90b3R5cGUsCisgICAgICAgIHJndXJsID0gL15ccyp1 cmxcKCguKylcKS8sCisgICAgICAgIFN0ciA9IFN0cmluZywKKyAgICAgICAg JCA9IFNuYXAuXy4kOworICAgIFNuYXAuZmlsdGVyID0ge307CisgICAgLypc CisgICAgICogUGFwZXIuZmlsdGVyCisgICAgIFsgbWV0aG9kIF0KKyAgICAg KioKKyAgICAgKiBDcmVhdGVzIGEgYDxmaWx0ZXI+YCBlbGVtZW50CisgICAg ICoqCisgICAgIC0gZmlsc3RyIChzdHJpbmcpIFNWRyBmcmFnbWVudCBvZiBm aWx0ZXIgcHJvdmlkZWQgYXMgYSBzdHJpbmcKKyAgICAgPSAob2JqZWN0KSBA RWxlbWVudAorICAgICAqIE5vdGU6IEl0IGlzIHJlY29tbWVuZGVkIHRvIHVz ZSBmaWx0ZXJzIGVtYmVkZGVkIGludG8gdGhlIHBhZ2UgaW5zaWRlIGFuIGVt cHR5IFNWRyBlbGVtZW50LgorICAgICA+IFVzYWdlCisgICAgIHwgdmFyIGYg PSBwYXBlci5maWx0ZXIoJzxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249 IjIiLz4nKSwKKyAgICAgfCAgICAgYyA9IHBhcGVyLmNpcmNsZSgxMCwgMTAs IDEwKS5hdHRyKHsKKyAgICAgfCAgICAgICAgIGZpbHRlcjogZgorICAgICB8 ICAgICB9KTsKKyAgICBcKi8KKyAgICBwcHJvdG8uZmlsdGVyID0gZnVuY3Rp b24gKGZpbHN0cikgeworICAgICAgICB2YXIgcGFwZXIgPSB0aGlzOworICAg ICAgICBpZiAocGFwZXIudHlwZSAhPSAic3ZnIikgeworICAgICAgICAgICAg cGFwZXIgPSBwYXBlci5wYXBlcjsKKyAgICAgICAgfQorICAgICAgICB2YXIg ZiA9IFNuYXAucGFyc2UoU3RyKGZpbHN0cikpLAorICAgICAgICAgICAgaWQg PSBTbmFwLl8uaWQoKSwKKyAgICAgICAgICAgIHdpZHRoID0gcGFwZXIubm9k ZS5vZmZzZXRXaWR0aCwKKyAgICAgICAgICAgIGhlaWdodCA9IHBhcGVyLm5v ZGUub2Zmc2V0SGVpZ2h0LAorICAgICAgICAgICAgZmlsdGVyID0gJCgiZmls dGVyIik7CisgICAgICAgICQoZmlsdGVyLCB7CisgICAgICAgICAgICBpZDog aWQsCisgICAgICAgICAgICBmaWx0ZXJVbml0czogInVzZXJTcGFjZU9uVXNl IgorICAgICAgICB9KTsKKyAgICAgICAgZmlsdGVyLmFwcGVuZENoaWxkKGYu bm9kZSk7CisgICAgICAgIHBhcGVyLmRlZnMuYXBwZW5kQ2hpbGQoZmlsdGVy KTsKKyAgICAgICAgcmV0dXJuIG5ldyBFbGVtZW50KGZpbHRlcik7CisgICAg fTsKKworICAgIGV2ZS5vbigic25hcC51dGlsLmdldGF0dHIuZmlsdGVyIiwg ZnVuY3Rpb24gKCkgeworICAgICAgICBldmUuc3RvcCgpOworICAgICAgICB2 YXIgcCA9ICQodGhpcy5ub2RlLCAiZmlsdGVyIik7CisgICAgICAgIGlmIChw KSB7CisgICAgICAgICAgICB2YXIgbWF0Y2ggPSBTdHIocCkubWF0Y2gocmd1 cmwpOworICAgICAgICAgICAgcmV0dXJuIG1hdGNoICYmIFNuYXAuc2VsZWN0 KG1hdGNoWzFdKTsKKyAgICAgICAgfQorICAgIH0pOworICAgIGV2ZS5vbigi c25hcC51dGlsLmF0dHIuZmlsdGVyIiwgZnVuY3Rpb24gKHZhbHVlKSB7Cisg ICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgdmFsdWUu dHlwZSA9PSAiZmlsdGVyIikgeworICAgICAgICAgICAgZXZlLnN0b3AoKTsK KyAgICAgICAgICAgIHZhciBpZCA9IHZhbHVlLm5vZGUuaWQ7CisgICAgICAg ICAgICBpZiAoIWlkKSB7CisgICAgICAgICAgICAgICAgJCh2YWx1ZS5ub2Rl LCB7aWQ6IHZhbHVlLmlkfSk7CisgICAgICAgICAgICAgICAgaWQgPSB2YWx1 ZS5pZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICQodGhpcy5ub2Rl LCB7CisgICAgICAgICAgICAgICAgZmlsdGVyOiBTbmFwLnVybChpZCkKKyAg ICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIGlmICghdmFsdWUg fHwgdmFsdWUgPT0gIm5vbmUiKSB7CisgICAgICAgICAgICBldmUuc3RvcCgp OworICAgICAgICAgICAgdGhpcy5ub2RlLnJlbW92ZUF0dHJpYnV0ZSgiZmls dGVyIik7CisgICAgICAgIH0KKyAgICB9KTsKKyAgICAvKlwKKyAgICAgKiBT bmFwLmZpbHRlci5ibHVyCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAg ICAgKiBSZXR1cm5zIGFuIFNWRyBtYXJrdXAgc3RyaW5nIGZvciB0aGUgYmx1 ciBmaWx0ZXIKKyAgICAgKioKKyAgICAgLSB4IChudW1iZXIpIGFtb3VudCBv ZiBob3Jpem9udGFsIGJsdXIsIGluIHBpeGVscworICAgICAtIHkgKG51bWJl cikgI29wdGlvbmFsIGFtb3VudCBvZiB2ZXJ0aWNhbCBibHVyLCBpbiBwaXhl bHMKKyAgICAgPSAoc3RyaW5nKSBmaWx0ZXIgcmVwcmVzZW50YXRpb24KKyAg ICAgPiBVc2FnZQorICAgICB8IHZhciBmID0gcGFwZXIuZmlsdGVyKFNuYXAu ZmlsdGVyLmJsdXIoNSwgMTApKSwKKyAgICAgfCAgICAgYyA9IHBhcGVyLmNp cmNsZSgxMCwgMTAsIDEwKS5hdHRyKHsKKyAgICAgfCAgICAgICAgIGZpbHRl cjogZgorICAgICB8ICAgICB9KTsKKyAgICBcKi8KKyAgICBTbmFwLmZpbHRl ci5ibHVyID0gZnVuY3Rpb24gKHgsIHkpIHsKKyAgICAgICAgaWYgKHggPT0g bnVsbCkgeworICAgICAgICAgICAgeCA9IDI7CisgICAgICAgIH0KKyAgICAg ICAgdmFyIGRlZiA9IHkgPT0gbnVsbCA/IHggOiBbeCwgeV07CisgICAgICAg IHJldHVybiBTbmFwLmZvcm1hdCgnXDxmZUdhdXNzaWFuQmx1ciBzdGREZXZp YXRpb249IntkZWZ9Ii8+JywgeworICAgICAgICAgICAgZGVmOiBkZWYKKyAg ICAgICAgfSk7CisgICAgfTsKKyAgICBTbmFwLmZpbHRlci5ibHVyLnRvU3Ry aW5nID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcygpOwor ICAgIH07CisgICAgLypcCisgICAgICogU25hcC5maWx0ZXIuc2hhZG93Cisg ICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZXR1cm5zIGFuIFNW RyBtYXJrdXAgc3RyaW5nIGZvciB0aGUgc2hhZG93IGZpbHRlcgorICAgICAq KgorICAgICAtIGR4IChudW1iZXIpICNvcHRpb25hbCBob3Jpem9udGFsIHNo aWZ0IG9mIHRoZSBzaGFkb3csIGluIHBpeGVscworICAgICAtIGR5IChudW1i ZXIpICNvcHRpb25hbCB2ZXJ0aWNhbCBzaGlmdCBvZiB0aGUgc2hhZG93LCBp biBwaXhlbHMKKyAgICAgLSBibHVyIChudW1iZXIpICNvcHRpb25hbCBhbW91 bnQgb2YgYmx1cgorICAgICAtIGNvbG9yIChzdHJpbmcpICNvcHRpb25hbCBj b2xvciBvZiB0aGUgc2hhZG93CisgICAgIC0gb3BhY2l0eSAobnVtYmVyKSAj b3B0aW9uYWwgYDAuLjFgIG9wYWNpdHkgb2YgdGhlIHNoYWRvdworICAgICAq IG9yCisgICAgIC0gZHggKG51bWJlcikgI29wdGlvbmFsIGhvcml6b250YWwg c2hpZnQgb2YgdGhlIHNoYWRvdywgaW4gcGl4ZWxzCisgICAgIC0gZHkgKG51 bWJlcikgI29wdGlvbmFsIHZlcnRpY2FsIHNoaWZ0IG9mIHRoZSBzaGFkb3cs IGluIHBpeGVscworICAgICAtIGNvbG9yIChzdHJpbmcpICNvcHRpb25hbCBj b2xvciBvZiB0aGUgc2hhZG93CisgICAgIC0gb3BhY2l0eSAobnVtYmVyKSAj b3B0aW9uYWwgYDAuLjFgIG9wYWNpdHkgb2YgdGhlIHNoYWRvdworICAgICAq IHdoaWNoIG1ha2VzIGJsdXIgZGVmYXVsdCB0byBgNGAuIE9yCisgICAgIC0g ZHggKG51bWJlcikgI29wdGlvbmFsIGhvcml6b250YWwgc2hpZnQgb2YgdGhl IHNoYWRvdywgaW4gcGl4ZWxzCisgICAgIC0gZHkgKG51bWJlcikgI29wdGlv bmFsIHZlcnRpY2FsIHNoaWZ0IG9mIHRoZSBzaGFkb3csIGluIHBpeGVscwor ICAgICAtIG9wYWNpdHkgKG51bWJlcikgI29wdGlvbmFsIGAwLi4xYCBvcGFj aXR5IG9mIHRoZSBzaGFkb3cKKyAgICAgPSAoc3RyaW5nKSBmaWx0ZXIgcmVw cmVzZW50YXRpb24KKyAgICAgPiBVc2FnZQorICAgICB8IHZhciBmID0gcGFw ZXIuZmlsdGVyKFNuYXAuZmlsdGVyLnNoYWRvdygwLCAyLCAzKSksCisgICAg IHwgICAgIGMgPSBwYXBlci5jaXJjbGUoMTAsIDEwLCAxMCkuYXR0cih7Cisg ICAgIHwgICAgICAgICBmaWx0ZXI6IGYKKyAgICAgfCAgICAgfSk7CisgICAg XCovCisgICAgU25hcC5maWx0ZXIuc2hhZG93ID0gZnVuY3Rpb24gKGR4LCBk eSwgYmx1ciwgY29sb3IsIG9wYWNpdHkpIHsKKyAgICAgICAgaWYgKHR5cGVv ZiBibHVyID09ICJzdHJpbmciKSB7CisgICAgICAgICAgICBjb2xvciA9IGJs dXI7CisgICAgICAgICAgICBvcGFjaXR5ID0gY29sb3I7CisgICAgICAgICAg ICBibHVyID0gNDsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZW9mIGNv bG9yICE9ICJzdHJpbmciKSB7CisgICAgICAgICAgICBvcGFjaXR5ID0gY29s b3I7CisgICAgICAgICAgICBjb2xvciA9ICIjMDAwIjsKKyAgICAgICAgfQor ICAgICAgICBjb2xvciA9IGNvbG9yIHx8ICIjMDAwIjsKKyAgICAgICAgaWYg KGJsdXIgPT0gbnVsbCkgeworICAgICAgICAgICAgYmx1ciA9IDQ7CisgICAg ICAgIH0KKyAgICAgICAgaWYgKG9wYWNpdHkgPT0gbnVsbCkgeworICAgICAg ICAgICAgb3BhY2l0eSA9IDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGR4 ID09IG51bGwpIHsKKyAgICAgICAgICAgIGR4ID0gMDsKKyAgICAgICAgICAg IGR5ID0gMjsKKyAgICAgICAgfQorICAgICAgICBpZiAoZHkgPT0gbnVsbCkg eworICAgICAgICAgICAgZHkgPSBkeDsKKyAgICAgICAgfQorICAgICAgICBj b2xvciA9IFNuYXAuY29sb3IoY29sb3IpOworICAgICAgICByZXR1cm4gU25h cC5mb3JtYXQoJzxmZUdhdXNzaWFuQmx1ciBpbj0iU291cmNlQWxwaGEiIHN0 ZERldmlhdGlvbj0ie2JsdXJ9Ii8+PGZlT2Zmc2V0IGR4PSJ7ZHh9IiBkeT0i e2R5fSIgcmVzdWx0PSJvZmZzZXRibHVyIi8+PGZlRmxvb2QgZmxvb2QtY29s b3I9Intjb2xvcn0iLz48ZmVDb21wb3NpdGUgaW4yPSJvZmZzZXRibHVyIiBv cGVyYXRvcj0iaW4iLz48ZmVDb21wb25lbnRUcmFuc2Zlcj48ZmVGdW5jQSB0 eXBlPSJsaW5lYXIiIHNsb3BlPSJ7b3BhY2l0eX0iLz48L2ZlQ29tcG9uZW50 VHJhbnNmZXI+PGZlTWVyZ2U+PGZlTWVyZ2VOb2RlLz48ZmVNZXJnZU5vZGUg aW49IlNvdXJjZUdyYXBoaWMiLz48L2ZlTWVyZ2U+JywgeworICAgICAgICAg ICAgY29sb3I6IGNvbG9yLAorICAgICAgICAgICAgZHg6IGR4LAorICAgICAg ICAgICAgZHk6IGR5LAorICAgICAgICAgICAgYmx1cjogYmx1ciwKKyAgICAg ICAgICAgIG9wYWNpdHk6IG9wYWNpdHkKKyAgICAgICAgfSk7CisgICAgfTsK KyAgICBTbmFwLmZpbHRlci5zaGFkb3cudG9TdHJpbmcgPSBmdW5jdGlvbiAo KSB7CisgICAgICAgIHJldHVybiB0aGlzKCk7CisgICAgfTsKKyAgICAvKlwK KyAgICAgKiBTbmFwLmZpbHRlci5ncmF5c2NhbGUKKyAgICAgWyBtZXRob2Qg XQorICAgICAqKgorICAgICAqIFJldHVybnMgYW4gU1ZHIG1hcmt1cCBzdHJp bmcgZm9yIHRoZSBncmF5c2NhbGUgZmlsdGVyCisgICAgICoqCisgICAgIC0g YW1vdW50IChudW1iZXIpIGFtb3VudCBvZiBmaWx0ZXIgKGAwLi4xYCkKKyAg ICAgPSAoc3RyaW5nKSBmaWx0ZXIgcmVwcmVzZW50YXRpb24KKyAgICBcKi8K KyAgICBTbmFwLmZpbHRlci5ncmF5c2NhbGUgPSBmdW5jdGlvbiAoYW1vdW50 KSB7CisgICAgICAgIGlmIChhbW91bnQgPT0gbnVsbCkgeworICAgICAgICAg ICAgYW1vdW50ID0gMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gU25h cC5mb3JtYXQoJzxmZUNvbG9yTWF0cml4IHR5cGU9Im1hdHJpeCIgdmFsdWVz PSJ7YX0ge2J9IHtjfSAwIDAge2R9IHtlfSB7Zn0gMCAwIHtnfSB7Yn0ge2h9 IDAgMCAwIDAgMCAxIDAiLz4nLCB7CisgICAgICAgICAgICBhOiAwLjIxMjYg KyAwLjc4NzQgKiAoMSAtIGFtb3VudCksCisgICAgICAgICAgICBiOiAwLjcx NTIgLSAwLjcxNTIgKiAoMSAtIGFtb3VudCksCisgICAgICAgICAgICBjOiAw LjA3MjIgLSAwLjA3MjIgKiAoMSAtIGFtb3VudCksCisgICAgICAgICAgICBk OiAwLjIxMjYgLSAwLjIxMjYgKiAoMSAtIGFtb3VudCksCisgICAgICAgICAg ICBlOiAwLjcxNTIgKyAwLjI4NDggKiAoMSAtIGFtb3VudCksCisgICAgICAg ICAgICBmOiAwLjA3MjIgLSAwLjA3MjIgKiAoMSAtIGFtb3VudCksCisgICAg ICAgICAgICBnOiAwLjIxMjYgLSAwLjIxMjYgKiAoMSAtIGFtb3VudCksCisg ICAgICAgICAgICBoOiAwLjA3MjIgKyAwLjkyNzggKiAoMSAtIGFtb3VudCkK KyAgICAgICAgfSk7CisgICAgfTsKKyAgICBTbmFwLmZpbHRlci5ncmF5c2Nh bGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0 aGlzKCk7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBTbmFwLmZpbHRlci5z ZXBpYQorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogUmV0dXJu cyBhbiBTVkcgbWFya3VwIHN0cmluZyBmb3IgdGhlIHNlcGlhIGZpbHRlcgor ICAgICAqKgorICAgICAtIGFtb3VudCAobnVtYmVyKSBhbW91bnQgb2YgZmls dGVyIChgMC4uMWApCisgICAgID0gKHN0cmluZykgZmlsdGVyIHJlcHJlc2Vu dGF0aW9uCisgICAgXCovCisgICAgU25hcC5maWx0ZXIuc2VwaWEgPSBmdW5j dGlvbiAoYW1vdW50KSB7CisgICAgICAgIGlmIChhbW91bnQgPT0gbnVsbCkg eworICAgICAgICAgICAgYW1vdW50ID0gMTsKKyAgICAgICAgfQorICAgICAg ICByZXR1cm4gU25hcC5mb3JtYXQoJzxmZUNvbG9yTWF0cml4IHR5cGU9Im1h dHJpeCIgdmFsdWVzPSJ7YX0ge2J9IHtjfSAwIDAge2R9IHtlfSB7Zn0gMCAw IHtnfSB7aH0ge2l9IDAgMCAwIDAgMCAxIDAiLz4nLCB7CisgICAgICAgICAg ICBhOiAwLjM5MyArIDAuNjA3ICogKDEgLSBhbW91bnQpLAorICAgICAgICAg ICAgYjogMC43NjkgLSAwLjc2OSAqICgxIC0gYW1vdW50KSwKKyAgICAgICAg ICAgIGM6IDAuMTg5IC0gMC4xODkgKiAoMSAtIGFtb3VudCksCisgICAgICAg ICAgICBkOiAwLjM0OSAtIDAuMzQ5ICogKDEgLSBhbW91bnQpLAorICAgICAg ICAgICAgZTogMC42ODYgKyAwLjMxNCAqICgxIC0gYW1vdW50KSwKKyAgICAg ICAgICAgIGY6IDAuMTY4IC0gMC4xNjggKiAoMSAtIGFtb3VudCksCisgICAg ICAgICAgICBnOiAwLjI3MiAtIDAuMjcyICogKDEgLSBhbW91bnQpLAorICAg ICAgICAgICAgaDogMC41MzQgLSAwLjUzNCAqICgxIC0gYW1vdW50KSwKKyAg ICAgICAgICAgIGk6IDAuMTMxICsgMC44NjkgKiAoMSAtIGFtb3VudCkKKyAg ICAgICAgfSk7CisgICAgfTsKKyAgICBTbmFwLmZpbHRlci5zZXBpYS50b1N0 cmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMoKTsK KyAgICB9OworICAgIC8qXAorICAgICAqIFNuYXAuZmlsdGVyLnNhdHVyYXRl CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZXR1cm5zIGFu IFNWRyBtYXJrdXAgc3RyaW5nIGZvciB0aGUgc2F0dXJhdGUgZmlsdGVyCisg ICAgICoqCisgICAgIC0gYW1vdW50IChudW1iZXIpIGFtb3VudCBvZiBmaWx0 ZXIgKGAwLi4xYCkKKyAgICAgPSAoc3RyaW5nKSBmaWx0ZXIgcmVwcmVzZW50 YXRpb24KKyAgICBcKi8KKyAgICBTbmFwLmZpbHRlci5zYXR1cmF0ZSA9IGZ1 bmN0aW9uIChhbW91bnQpIHsKKyAgICAgICAgaWYgKGFtb3VudCA9PSBudWxs KSB7CisgICAgICAgICAgICBhbW91bnQgPSAxOworICAgICAgICB9CisgICAg ICAgIHJldHVybiBTbmFwLmZvcm1hdCgnPGZlQ29sb3JNYXRyaXggdHlwZT0i c2F0dXJhdGUiIHZhbHVlcz0ie2Ftb3VudH0iLz4nLCB7CisgICAgICAgICAg ICBhbW91bnQ6IDEgLSBhbW91bnQKKyAgICAgICAgfSk7CisgICAgfTsKKyAg ICBTbmFwLmZpbHRlci5zYXR1cmF0ZS50b1N0cmluZyA9IGZ1bmN0aW9uICgp IHsKKyAgICAgICAgcmV0dXJuIHRoaXMoKTsKKyAgICB9OworICAgIC8qXAor ICAgICAqIFNuYXAuZmlsdGVyLmh1ZVJvdGF0ZQorICAgICBbIG1ldGhvZCBd CisgICAgICoqCisgICAgICogUmV0dXJucyBhbiBTVkcgbWFya3VwIHN0cmlu ZyBmb3IgdGhlIGh1ZS1yb3RhdGUgZmlsdGVyCisgICAgICoqCisgICAgIC0g YW5nbGUgKG51bWJlcikgYW5nbGUgb2Ygcm90YXRpb24KKyAgICAgPSAoc3Ry aW5nKSBmaWx0ZXIgcmVwcmVzZW50YXRpb24KKyAgICBcKi8KKyAgICBTbmFw LmZpbHRlci5odWVSb3RhdGUgPSBmdW5jdGlvbiAoYW5nbGUpIHsKKyAgICAg ICAgYW5nbGUgPSBhbmdsZSB8fCAwOworICAgICAgICByZXR1cm4gU25hcC5m b3JtYXQoJzxmZUNvbG9yTWF0cml4IHR5cGU9Imh1ZVJvdGF0ZSIgdmFsdWVz PSJ7YW5nbGV9Ii8+JywgeworICAgICAgICAgICAgYW5nbGU6IGFuZ2xlCisg ICAgICAgIH0pOworICAgIH07CisgICAgU25hcC5maWx0ZXIuaHVlUm90YXRl LnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhp cygpOworICAgIH07CisgICAgLypcCisgICAgICogU25hcC5maWx0ZXIuaW52 ZXJ0CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZXR1cm5z IGFuIFNWRyBtYXJrdXAgc3RyaW5nIGZvciB0aGUgaW52ZXJ0IGZpbHRlcgor ICAgICAqKgorICAgICAtIGFtb3VudCAobnVtYmVyKSBhbW91bnQgb2YgZmls dGVyIChgMC4uMWApCisgICAgID0gKHN0cmluZykgZmlsdGVyIHJlcHJlc2Vu dGF0aW9uCisgICAgXCovCisgICAgU25hcC5maWx0ZXIuaW52ZXJ0ID0gZnVu Y3Rpb24gKGFtb3VudCkgeworICAgICAgICBpZiAoYW1vdW50ID09IG51bGwp IHsKKyAgICAgICAgICAgIGFtb3VudCA9IDE7CisgICAgICAgIH0KKy8vICAg ICAgICA8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iLTEg MCAwIDAgMSAgMCAtMSAwIDAgMSAgMCAwIC0xIDAgMSAgMCAwIDAgMSAwIiBj b2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiLz4KKyAgICAgICAg cmV0dXJuIFNuYXAuZm9ybWF0KCc8ZmVDb21wb25lbnRUcmFuc2Zlcj48ZmVG dW5jUiB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9InthbW91bnR9IHthbW91 bnQyfSIvPjxmZUZ1bmNHIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0ie2Ft b3VudH0ge2Ftb3VudDJ9Ii8+PGZlRnVuY0IgdHlwZT0idGFibGUiIHRhYmxl VmFsdWVzPSJ7YW1vdW50fSB7YW1vdW50Mn0iLz48L2ZlQ29tcG9uZW50VHJh bnNmZXI+JywgeworICAgICAgICAgICAgYW1vdW50OiBhbW91bnQsCisgICAg ICAgICAgICBhbW91bnQyOiAxIC0gYW1vdW50CisgICAgICAgIH0pOworICAg IH07CisgICAgU25hcC5maWx0ZXIuaW52ZXJ0LnRvU3RyaW5nID0gZnVuY3Rp b24gKCkgeworICAgICAgICByZXR1cm4gdGhpcygpOworICAgIH07CisgICAg LypcCisgICAgICogU25hcC5maWx0ZXIuYnJpZ2h0bmVzcworICAgICBbIG1l dGhvZCBdCisgICAgICoqCisgICAgICogUmV0dXJucyBhbiBTVkcgbWFya3Vw IHN0cmluZyBmb3IgdGhlIGJyaWdodG5lc3MgZmlsdGVyCisgICAgICoqCisg ICAgIC0gYW1vdW50IChudW1iZXIpIGFtb3VudCBvZiBmaWx0ZXIgKGAwLi4x YCkKKyAgICAgPSAoc3RyaW5nKSBmaWx0ZXIgcmVwcmVzZW50YXRpb24KKyAg ICBcKi8KKyAgICBTbmFwLmZpbHRlci5icmlnaHRuZXNzID0gZnVuY3Rpb24g KGFtb3VudCkgeworICAgICAgICBpZiAoYW1vdW50ID09IG51bGwpIHsKKyAg ICAgICAgICAgIGFtb3VudCA9IDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0 dXJuIFNuYXAuZm9ybWF0KCc8ZmVDb21wb25lbnRUcmFuc2Zlcj48ZmVGdW5j UiB0eXBlPSJsaW5lYXIiIHNsb3BlPSJ7YW1vdW50fSIvPjxmZUZ1bmNHIHR5 cGU9ImxpbmVhciIgc2xvcGU9InthbW91bnR9Ii8+PGZlRnVuY0IgdHlwZT0i bGluZWFyIiBzbG9wZT0ie2Ftb3VudH0iLz48L2ZlQ29tcG9uZW50VHJhbnNm ZXI+JywgeworICAgICAgICAgICAgYW1vdW50OiBhbW91bnQKKyAgICAgICAg fSk7CisgICAgfTsKKyAgICBTbmFwLmZpbHRlci5icmlnaHRuZXNzLnRvU3Ry aW5nID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcygpOwor ICAgIH07CisgICAgLypcCisgICAgICogU25hcC5maWx0ZXIuY29udHJhc3QK KyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJldHVybnMgYW4g U1ZHIG1hcmt1cCBzdHJpbmcgZm9yIHRoZSBjb250cmFzdCBmaWx0ZXIKKyAg ICAgKioKKyAgICAgLSBhbW91bnQgKG51bWJlcikgYW1vdW50IG9mIGZpbHRl ciAoYDAuLjFgKQorICAgICA9IChzdHJpbmcpIGZpbHRlciByZXByZXNlbnRh dGlvbgorICAgIFwqLworICAgIFNuYXAuZmlsdGVyLmNvbnRyYXN0ID0gZnVu Y3Rpb24gKGFtb3VudCkgeworICAgICAgICBpZiAoYW1vdW50ID09IG51bGwp IHsKKyAgICAgICAgICAgIGFtb3VudCA9IDE7CisgICAgICAgIH0KKyAgICAg ICAgcmV0dXJuIFNuYXAuZm9ybWF0KCc8ZmVDb21wb25lbnRUcmFuc2Zlcj48 ZmVGdW5jUiB0eXBlPSJsaW5lYXIiIHNsb3BlPSJ7YW1vdW50fSIgaW50ZXJj ZXB0PSJ7YW1vdW50Mn0iLz48ZmVGdW5jRyB0eXBlPSJsaW5lYXIiIHNsb3Bl PSJ7YW1vdW50fSIgaW50ZXJjZXB0PSJ7YW1vdW50Mn0iLz48ZmVGdW5jQiB0 eXBlPSJsaW5lYXIiIHNsb3BlPSJ7YW1vdW50fSIgaW50ZXJjZXB0PSJ7YW1v dW50Mn0iLz48L2ZlQ29tcG9uZW50VHJhbnNmZXI+JywgeworICAgICAgICAg ICAgYW1vdW50OiBhbW91bnQsCisgICAgICAgICAgICBhbW91bnQyOiAuNSAt IGFtb3VudCAvIDIKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICBTbmFwLmZp bHRlci5jb250cmFzdC50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAg ICAgcmV0dXJuIHRoaXMoKTsKKyAgICB9OworfSk7CisKKy8vIENvcHlyaWdo dCAoYykgMjAxNCBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJp Z2h0cyByZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBh Y2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8v IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFu Y2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29w eSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vIGh0dHA6Ly93d3cuYXBhY2hl Lm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1 aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGlu Zywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNl IGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRI T1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0 aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBm b3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9u cyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorU25h cC5wbHVnaW4oZnVuY3Rpb24gKFNuYXAsIEVsZW1lbnQsIFBhcGVyLCBnbG9i LCBGcmFnbWVudCkgeworICAgIHZhciBib3ggPSBTbmFwLl8uYm94LAorICAg ICAgICBpcyA9IFNuYXAuaXMsCisgICAgICAgIGZpcnN0TGV0dGVyID0gL15b XmEtel0qKFt0Ym1scmNdKS9pLAorICAgICAgICB0b1N0cmluZyA9IGZ1bmN0 aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiAiVCIgKyB0aGlzLmR4ICsg IiwiICsgdGhpcy5keTsKKyAgICAgICAgfTsKKyAgICAvKlwKKyAgICAgKiBF bGVtZW50LmdldEFsaWduCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAg ICAgKiBSZXR1cm5zIHNoaWZ0IG5lZWRlZCB0byBhbGlnbiB0aGUgZWxlbWVu dCByZWxhdGl2ZWx5IHRvIGdpdmVuIGVsZW1lbnQuCisgICAgICogSWYgbm8g ZWxlbWVudHMgc3BlY2lmaWVkLCBwYXJlbnQgYDxzdmc+YCBjb250YWluZXIg d2lsbCBiZSB1c2VkLgorICAgICAtIGVsIChvYmplY3QpIEBvcHRpb25hbCBh bGlnbm1lbnQgZWxlbWVudAorICAgICAtIHdheSAoc3RyaW5nKSBvbmUgb2Yg c2l4IHZhbHVlczogYCJ0b3AiYCwgYCJtaWRkbGUiYCwgYCJib3R0b20iYCwg YCJsZWZ0ImAsIGAiY2VudGVyImAsIGAicmlnaHQiYAorICAgICA9IChvYmpl Y3R8c3RyaW5nKSBPYmplY3QgaW4gZm9ybWF0IGB7ZHg6ICwgZHk6IH1gIGFs c28gaGFzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGFzIGEgdHJhbnNmb3Jt YXRpb24gc3RyaW5nCisgICAgID4gVXNhZ2UKKyAgICAgfCBlbC50cmFuc2Zv cm0oZWwuZ2V0QWxpZ24oZWwyLCAidG9wIikpOworICAgICAqIG9yCisgICAg IHwgdmFyIGR5ID0gZWwuZ2V0QWxpZ24oZWwyLCAidG9wIikuZHk7CisgICAg XCovCisgICAgRWxlbWVudC5wcm90b3R5cGUuZ2V0QWxpZ24gPSBmdW5jdGlv biAoZWwsIHdheSkgeworICAgICAgICBpZiAod2F5ID09IG51bGwgJiYgaXMo ZWwsICJzdHJpbmciKSkgeworICAgICAgICAgICAgd2F5ID0gZWw7CisgICAg ICAgICAgICBlbCA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgZWwgPSBl bCB8fCB0aGlzLnBhcGVyOworICAgICAgICB2YXIgYnggPSBlbC5nZXRCQm94 ID8gZWwuZ2V0QkJveCgpIDogYm94KGVsKSwKKyAgICAgICAgICAgIGJiID0g dGhpcy5nZXRCQm94KCksCisgICAgICAgICAgICBvdXQgPSB7fTsKKyAgICAg ICAgd2F5ID0gd2F5ICYmIHdheS5tYXRjaChmaXJzdExldHRlcik7CisgICAg ICAgIHdheSA9IHdheSA/IHdheVsxXS50b0xvd2VyQ2FzZSgpIDogImMiOwor ICAgICAgICBzd2l0Y2ggKHdheSkgeworICAgICAgICAgICAgY2FzZSAidCI6 CisgICAgICAgICAgICAgICAgb3V0LmR4ID0gMDsKKyAgICAgICAgICAgICAg ICBvdXQuZHkgPSBieC55IC0gYmIueTsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgY2FzZSAiYiI6CisgICAgICAgICAgICAgICAgb3V0LmR4 ID0gMDsKKyAgICAgICAgICAgICAgICBvdXQuZHkgPSBieC55MiAtIGJiLnky OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICJtIjoK KyAgICAgICAgICAgICAgICBvdXQuZHggPSAwOworICAgICAgICAgICAgICAg IG91dC5keSA9IGJ4LmN5IC0gYmIuY3k7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgIGNhc2UgImwiOgorICAgICAgICAgICAgICAgIG91dC5k eCA9IGJ4LnggLSBiYi54OworICAgICAgICAgICAgICAgIG91dC5keSA9IDA7 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgInIiOgor ICAgICAgICAgICAgICAgIG91dC5keCA9IGJ4LngyIC0gYmIueDI7CisgICAg ICAgICAgICAgICAgb3V0LmR5ID0gMDsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBvdXQuZHgg PSBieC5jeCAtIGJiLmN4OworICAgICAgICAgICAgICAgIG91dC5keSA9IDA7 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBvdXQu dG9TdHJpbmcgPSB0b1N0cmluZzsKKyAgICAgICAgcmV0dXJuIG91dDsKKyAg ICB9OworICAgIC8qXAorICAgICAqIEVsZW1lbnQuYWxpZ24KKyAgICAgWyBt ZXRob2QgXQorICAgICAqKgorICAgICAqIEFsaWducyB0aGUgZWxlbWVudCBy ZWxhdGl2ZWx5IHRvIGdpdmVuIG9uZSB2aWEgdHJhbnNmb3JtYXRpb24uCisg ICAgICogSWYgbm8gZWxlbWVudHMgc3BlY2lmaWVkLCBwYXJlbnQgYDxzdmc+ YCBjb250YWluZXIgd2lsbCBiZSB1c2VkLgorICAgICAtIGVsIChvYmplY3Qp IEBvcHRpb25hbCBhbGlnbm1lbnQgZWxlbWVudAorICAgICAtIHdheSAoc3Ry aW5nKSBvbmUgb2Ygc2l4IHZhbHVlczogYCJ0b3AiYCwgYCJtaWRkbGUiYCwg YCJib3R0b20iYCwgYCJsZWZ0ImAsIGAiY2VudGVyImAsIGAicmlnaHQiYAor ICAgICA9IChvYmplY3QpIHRoaXMgZWxlbWVudAorICAgICA+IFVzYWdlCisg ICAgIHwgZWwuYWxpZ24oZWwyLCAidG9wIik7CisgICAgICogb3IKKyAgICAg fCBlbC5hbGlnbigibWlkZGxlIik7CisgICAgXCovCisgICAgRWxlbWVudC5w cm90b3R5cGUuYWxpZ24gPSBmdW5jdGlvbiAoZWwsIHdheSkgeworICAgICAg ICByZXR1cm4gdGhpcy50cmFuc2Zvcm0oIi4uLiIgKyB0aGlzLmdldEFsaWdu KGVsLCB3YXkpKTsKKyAgICB9OworfSk7CisKK3JldHVybiBTbmFwOworfSkp OwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy90ZW1wbGF0ZXMvZXhw bGFpbi9qcy9leHBsYWluLmpzIGIvd2ViL3BnYWRtaW4vbWlzYy90ZW1wbGF0 ZXMvZXhwbGFpbi9qcy9leHBsYWluLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLmJlZGM1MWUKLS0tIC9kZXYvbnVsbAorKysgYi93 ZWIvcGdhZG1pbi9taXNjL3RlbXBsYXRlcy9leHBsYWluL2pzL2V4cGxhaW4u anMKQEAgLTAsMCArMSw2ODggQEAKK2RlZmluZSAoCisgICdwZ2FkbWluLm1p c2MuZXhwbGFpbicsCisgIFsnanF1ZXJ5JywgJ3VuZGVyc2NvcmUnLCAndW5k ZXJzY29yZS5zdHJpbmcnLCAncGdhZG1pbicsICdiYWNrYm9uZScsICdzbmFw LnN2ZyddLAorICBmdW5jdGlvbigkLCBfLCBTLCBwZ0FkbWluLCBCYWNrYm9u ZSwgU25hcCkgeworCitwZ0FkbWluID0gcGdBZG1pbiB8fCB3aW5kb3cucGdB ZG1pbiB8fCB7fTsKK3ZhciBwZ0V4cGxhaW4gPSBwZ0FkbWluLkV4cGxhaW47 CisKKy8vIFNuYXAuc3ZnIHBsdWctaW4gdG8gd3JpdGUgbXVsdGl0ZXh0IGFz IGltYWdlIG5hbWUKK1NuYXAucGx1Z2luKGZ1bmN0aW9uIChTbmFwLCBFbGVt ZW50LCBQYXBlciwgZ2xvYikgeworICBQYXBlci5wcm90b3R5cGUubXVsdGl0 ZXh0ID0gZnVuY3Rpb24gKHgsIHksIHR4dCwgbWF4X3dpZHRoLCBhdHRyaWJ1 dGVzKSB7CisgICAgdmFyIHN2ZyA9IFNuYXAoKSwKKyAgICAgICAgYWJjID0g ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFS U1RVVldYWVoiLAorICAgICAgICBpc1dvcmRCcm9rZW4gPSBmYWxzZSwKKyAg ICAgICAgdGVtcCA9IHN2Zy50ZXh0KDAsIDAsIGFiYyk7CisKKyAgICB0ZW1w LmF0dHIoYXR0cmlidXRlcyk7CisKKyAgICAvKgorICAgICAqIEZpbmQgbGV0 dGVyIHdpZHRoIGluIHBpeGVscyBhbmQKKyAgICAgKiBpbmRleCBmcm9tIHdo ZXJlIHRoZSB0ZXh0IHNob3VsZCBiZSBicm9rZW4KKyAgICAgKi8KKyAgICB2 YXIgbGV0dGVyX3dpZHRoID0gdGVtcC5nZXRCQm94KCkud2lkdGggLyBhYmMu bGVuZ3RoLAorICAgICAgICB3b3JkX2JyZWFrX2luZGV4ID0gTWF0aC5yb3Vu ZCgobWF4X3dpZHRoIC8gbGV0dGVyX3dpZHRoKSkgLSAxOworCisgICAgc3Zn LnJlbW92ZSgpOworCisgICAgdmFyIHdvcmRzID0gdHh0LnNwbGl0KCIgIiks CisgICAgICAgIHdpZHRoX3NvX2ZhciA9IDAsCisgICAgICAgIGxpbmVzPVtd LCBjdXJyX2xpbmUgPSAnJywKKyAgICAgICAgLyoKKyAgICAgICAgICogRnVu Y3Rpb24gdG8gZGl2aWRlIHN0cmluZyBpbnRvIG11bHRpcGxlIGxpbmVzCisg ICAgICAgICAqIGFuZCBzdG9yZSB0aGVtIGluIGFuIGFycmF5IGlmIGl0IHNp emUgY3Jvc3NlcworICAgICAgICAgKiB0aGUgbWF4LXdpZHRoIGJvdW5kYXJ5 LgorICAgICAgICAgKi8KKyAgICAgICAgc3BsaXRUZXh0SW5NdWx0aUxpbmUg PSBmdW5jdGlvbihsZWFkaW5nLCBzb19mYXIsIGxpbmUpIHsKKyAgICAgICAg ICB2YXIgbCA9IGxpbmUubGVuZ3RoLAorICAgICAgICAgICAgICByZXMgPSBb XTsKKworICAgICAgICAgIGlmIChsID09IDApCisgICAgICAgICAgICByZXR1 cm4gcmVzOworCisgICAgICAgICAgaWYgKHNvX2ZhciAmJiAoc29fZmFyICsg KGwgKiBsZXR0ZXJfd2lkdGgpID4gbWF4X3dpZHRoKSkgeworICAgICAgICAg ICAgcmVzLnB1c2gobGVhZGluZyk7CisgICAgICAgICAgICByZXMgPSByZXMu Y29uY2F0KHNwbGl0VGV4dEluTXVsdGlMaW5lKCcnLCAwLCBsaW5lKSk7Cisg ICAgICAgICAgfSBlbHNlIGlmIChzb19mYXIpIHsKKyAgICAgICAgICAgIHJl cy5wdXNoKGxlYWRpbmcgKyAnICcgKyBsaW5lKTsKKyAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgaWYgKGxlYWRpbmcpCisgICAgICAgICAgICAg ICAgcmVzLnB1c2gobGVhZGluZyk7CisgICAgICAgICAgICBpZiAobGluZS5s ZW5ndGggPiB3b3JkX2JyZWFrX2luZGV4ICsgMSkKKyAgICAgICAgICAgICAg ICByZXMucHVzaChsaW5lLnNsaWNlKDAsIHdvcmRfYnJlYWtfaW5kZXgpICsg Jy0nKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXMu cHVzaChsaW5lKTsKKyAgICAgICAgICAgIHJlcyA9IHJlcy5jb25jYXQoc3Bs aXRUZXh0SW5NdWx0aUxpbmUoJycsIDAsIGxpbmUuc2xpY2Uod29yZF9icmVh a19pbmRleCkpKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICByZXR1cm4g cmVzOworICAgICAgICB9OworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3 b3Jkcy5sZW5ndGg7IGkrKykgeworICAgICAgdmFyIHRtcEFyciA9IHNwbGl0 VGV4dEluTXVsdGlMaW5lKAorICAgICAgICAgICAgY3Vycl9saW5lLCB3aWR0 aF9zb19mYXIsIHdvcmRzW2ldCisgICAgICAgICAgKTsKKworICAgICAgaWYg KGN1cnJfbGluZSkgeworICAgICAgICBsaW5lcyA9IGxpbmVzLnNsaWNlKDAs IGxpbmVzLmxlbmd0aCAtIDIpOworICAgICAgfQorICAgICAgbGluZXMgPSBs aW5lcy5jb25jYXQodG1wQXJyKTsKKyAgICAgIGN1cnJfbGluZSA9IGxpbmVz W2xpbmVzLmxlbmd0aCAtIDFdOworICAgICAgd2lkdGhfc29fZmFyID0gKGN1 cnJfbGluZS5sZW5ndGggKiBsZXR0ZXJfd2lkdGgpOworICAgIH0KKworICAg IC8vIENyZWF0ZSBtdWx0aXBsZSB0c3BhbiBmb3IgZWFjaCBzdHJpbmcgaW4g YXJyYXkKKyAgICB2YXIgdCA9IHRoaXMudGV4dCh4LHksbGluZXMpLmF0dHIo YXR0cmlidXRlcyk7CisgICAgdC5zZWxlY3RBbGwoInRzcGFuOm50aC1jaGls ZChuKzIpIikuYXR0cih7CisgICAgICBkeTogIjEuMmVtIiwKKyAgICAgIHg6 IHgKKyAgICB9KTsKKyAgICByZXR1cm4gdDsKKyAgfTsKK30pOworCitpZiAo cGdBZG1pbi5FeHBsYWluKQorICAgIHJldHVybiBwZ0FkbWluLkV4cGxhaW47 CisKK3ZhciBwZ0V4cGxhaW4gPSBwZ0FkbWluLkV4cGxhaW4gPSB7CisgICAv LyBQcmVmaXggcGF0aCB3aGVyZSBpbWFnZXMgYXJlIHN0b3JlZAorICAgcHJl Zml4OiAne3sgdXJsX2ZvcignbWlzYy5zdGF0aWMnLCBmaWxlbmFtZT0nZXhw bGFpbi9pbWcnKSB9fS8nCit9OworCisvKgorICogQSBtYXAgd2hpY2ggaXMg dXNlZCB0byBmZXRjaCB0aGUgaW1hZ2UgdG8gYmUgZHJhd24gYW5kCisgKiB0 ZXh0IHdoaWNoIHdpbGwgYXBwZWFyIGJlbG93IGl0CisgKi8KK3ZhciBpbWFn ZU1hcHBlciA9IHsKKyAgICAiQWdncmVnYXRlIiA6IHsKKyAgICAgICAgImlt YWdlIjoiZXhfYWdncmVnYXRlLnBuZyIsICJpbWFnZV90ZXh0IjoiQWdncmVn YXRlIgorICAgIH0sCisgICAgJ0FwcGVuZCcgOiB7CisgICAgICAgICJpbWFn ZSI6ImV4X2FwcGVuZC5wbmciLCJpbWFnZV90ZXh0IjoiQXBwZW5kIgorICAg IH0sCisgICAgIkJpdG1hcCBJbmRleCBTY2FuIiA6IGZ1bmN0aW9uKGRhdGEp IHsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICJpbWFnZSI6ImV4 X2JtcF9pbmRleC5wbmciLCAiaW1hZ2VfdGV4dCI6ZGF0YVsnSW5kZXggTmFt ZSddCisgICAgICAgIH07CisgICAgfSwKKyAgICAiQml0bWFwIEhlYXAgU2Nh biIgOiBmdW5jdGlvbihkYXRhKSB7CisgIHJldHVybiB7ImltYWdlIjoiZXhf Ym1wX2hlYXAucG5nIiwiaW1hZ2VfdGV4dCI6ZGF0YVsnUmVsYXRpb24gTmFt ZSddfTsKK30sCisiQml0bWFwQW5kIiA6IHsiaW1hZ2UiOiJleF9ibXBfYW5k LnBuZyIsImltYWdlX3RleHQiOiJCaXRtYXAgQU5EIn0sCisiQml0bWFwT3Ii IDogeyJpbWFnZSI6ImV4X2JtcF9vci5wbmciLCJpbWFnZV90ZXh0IjoiQml0 bWFwIE9SIn0sCisiQ1RFIFNjYW4iIDogeyJpbWFnZSI6ImV4X2N0ZV9zY2Fu LnBuZyIsImltYWdlX3RleHQiOiJDVEUgU2NhbiJ9LAorIkZ1bmN0aW9uIFNj YW4iIDogeyJpbWFnZSI6ImV4X3Jlc3VsdC5wbmciLCJpbWFnZV90ZXh0Ijoi RnVuY3Rpb24gU2NhbiJ9LAorIkZvcmVpZ24gU2NhbiIgOiB7ImltYWdlIjoi ZXhfZm9yZWlnbl9zY2FuLnBuZyIsImltYWdlX3RleHQiOiJGb3JlaWduIFNj YW4ifSwKKyJHYXRoZXIiIDogeyJpbWFnZSI6ImV4X2dhdGhlcl9tb3Rpb24u cG5nIiwiaW1hZ2VfdGV4dCI6IkdhdGhlciJ9LAorIkdyb3VwIiA6IHsiaW1h Z2UiOiJleF9ncm91cC5wbmciLCJpbWFnZV90ZXh0IjoiR3JvdXAifSwKKyJH cm91cEFnZ3JlZ2F0ZSI6IHsiaW1hZ2UiOiJleF9hZ2dyZWdhdGUucG5nIiwi aW1hZ2VfdGV4dCI6Ikdyb3VwIEFnZ3JlZ2F0ZSJ9LAorIkhhc2giIDogeyJp bWFnZSI6ImV4X2hhc2gucG5nIiwiaW1hZ2VfdGV4dCI6Ikhhc2gifSwKKyJI YXNoIEpvaW4iOiBmdW5jdGlvbihkYXRhKSB7CisgIGlmICghZGF0YVsnSm9p biBUeXBlJ10pIHJldHVybiB7ImltYWdlIjoiZXhfam9pbi5wbmciLCJpbWFn ZV90ZXh0IjoiSm9pbiJ9OworICBzd2l0Y2goZGF0YVsnSm9pbiBUeXBlJ10p IHsKKyAgICBjYXNlICdBbnRpJzogcmV0dXJuIHsiaW1hZ2UiOiJleF9oYXNo X2FudGlfam9pbi5wbmciLCJpbWFnZV90ZXh0IjoiSGFzaCBBbnRpIEpvaW4i fTsKKyAgICBjYXNlICdTZW1pJzogcmV0dXJuIHsiaW1hZ2UiOiJleF9oYXNo X3NlbWlfam9pbi5wbmciLCJpbWFnZV90ZXh0IjoiSGFzaCBTZW1pIEpvaW4i fTsKKyAgICBkZWZhdWx0OiByZXR1cm4geyJpbWFnZSI6ImV4X2hhc2gucG5n IiwiaW1hZ2VfdGV4dCI6U3RyaW5nKCJIYXNoICIgKyBkYXRhWydKb2luIFR5 cGUnXSArICIgSm9pbiIgKX07CisgIH0KK30sCisiSGFzaEFnZ3JlZ2F0ZSIg OiB7ImltYWdlIjoiZXhfYWdncmVnYXRlLnBuZyIsImltYWdlX3RleHQiOiJI YXNoIEFnZ3JlZ2F0ZSJ9LAorIkluZGV4IE9ubHkgU2NhbiIgOiBmdW5jdGlv bihkYXRhKSB7CisgIHJldHVybiB7ImltYWdlIjoiZXhfaW5kZXhfb25seV9z Y2FuLnBuZyIsImltYWdlX3RleHQiOmRhdGFbJ0luZGV4IE5hbWUnXX07Cit9 LAorIkluZGV4IFNjYW4iIDogZnVuY3Rpb24oZGF0YSkgeworICByZXR1cm4g eyJpbWFnZSI6ImV4X2luZGV4X3NjYW4ucG5nIiwiaW1hZ2VfdGV4dCI6ZGF0 YVsnSW5kZXggTmFtZSddfTsKK30sCisiSW5kZXggU2NhbiBCYWNrd29yZCIg OiB7ImltYWdlIjoiZXhfaW5kZXhfc2Nhbi5wbmciLCJpbWFnZV90ZXh0Ijoi SW5kZXggQmFja3dhcmQgU2NhbiJ9LAorIkxpbWl0IiA6IHsiaW1hZ2UiOiJl eF9saW1pdC5wbmciLCJpbWFnZV90ZXh0IjoiTGltaXQifSwKKyJMb2NrUm93 cyIgOiB7ImltYWdlIjoiZXhfbG9ja19yb3dzLnBuZyIsImltYWdlX3RleHQi OiJMb2NrIFJvd3MifSwKKyJNYXRlcmlhbGl6ZSIgOiB7ImltYWdlIjoiZXhf bWF0ZXJpYWxpemUucG5nIiwiaW1hZ2VfdGV4dCI6Ik1hdGVyaWFsaXplIn0s CisiTWVyZ2UgQXBwZW5kIjogeyJpbWFnZSI6ImV4X21lcmdlX2FwcGVuZC5w bmciLCJpbWFnZV90ZXh0IjoiTWVyZ2UgQXBwZW5kIn0sCisiTWVyZ2UgSm9p biI6IGZ1bmN0aW9uKGRhdGEpIHsKKyAgc3dpdGNoKGRhdGFbJ0pvaW4gVHlw ZSddKSB7CisgICAgY2FzZSAnQW50aSc6IHJldHVybiB7ImltYWdlIjoiZXhf bWVyZ2VfYW50aV9qb2luLnBuZyIsImltYWdlX3RleHQiOiJNZXJnZSBBbnRp IEpvaW4ifTsKKyAgICBjYXNlICdTZW1pJzogcmV0dXJuIHsiaW1hZ2UiOiJl eF9tZXJnZV9zZW1pX2pvaW4ucG5nIiwiaW1hZ2VfdGV4dCI6Ik1lcmdlIFNl bWkgSm9pbiJ9OworICAgIGRlZmF1bHQ6IHJldHVybiB7ImltYWdlIjoiZXhf bWVyZ2UucG5nIiwiaW1hZ2VfdGV4dCI6U3RyaW5nKCJNZXJnZSAiICsgZGF0 YVsnSm9pbiBUeXBlJ10gKyAiIEpvaW4iICl9OworICB9Cit9LAorIk1vZGlm eVRhYmxlIiA6IGZ1bmN0aW9uKGRhdGEpIHsKKyAgc3dpdGNoIChkYXRhWydP cGVyYXRvbiddKSB7CisgICAgY2FzZSAiaW5zZXJ0IjogcmV0dXJuIHsgImlt YWdlIjoiZXhfaW5zZXJ0LnBuZyIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgImltYWdlX3RleHQiOiJJbnNlcnQiCisgICAgICAgICAgICAgICAg ICAgICAgICAgICB9OworICAgIGNhc2UgInVwZGF0ZSI6IHJldHVybiB7Imlt YWdlIjoiZXhfdXBkYXRlLnBuZyIsImltYWdlX3RleHQiOiJVcGRhdGUifTsK KyAgICBjYXNlICJEZWxldGUiOiByZXR1cm4geyJpbWFnZSI6ImV4X2RlbGV0 ZS5wbmciLCJpbWFnZV90ZXh0IjoiRGVsZXRlIn07CisgIH0KK30sCisnTmVz dGVkIExvb3AnIDogZnVuY3Rpb24oZGF0YSkgeworICBzd2l0Y2goZGF0YVsn Sm9pbiBUeXBlJ10pIHsKKyAgICBjYXNlICdBbnRpJzogcmV0dXJuIHsiaW1h Z2UiOiJleF9uZXN0ZWRfbG9vcF9hbnRpX2pvaW4ucG5nIiwiaW1hZ2VfdGV4 dCI6Ik5lc3RlZCBMb29wIEFudGkgSm9pbiJ9OworICAgIGNhc2UgJ1NlbWkn OiByZXR1cm4geyJpbWFnZSI6ImV4X25lc3RlZF9sb29wX3NlbWlfam9pbi5w bmciLCJpbWFnZV90ZXh0IjoiTmVzdGVkIExvb3AgU2VtaSBKb2luIn07Cisg ICAgZGVmYXVsdDogcmV0dXJuIHsiaW1hZ2UiOiJleF9uZXN0ZWQucG5nIiwi aW1hZ2VfdGV4dCI6Ik5lc3RlZCBMb29wICIgKyBkYXRhWydKb2luIFR5cGUn XSArICIgSm9pbiJ9OworICB9Cit9LAorIlJlY3Vyc2l2ZSBVbmlvbiIgOiB7 ImltYWdlIjoiZXhfcmVjdXJzaXZlX3VuaW9uLnBuZyIsImltYWdlX3RleHQi OiJSZWN1cnNpdmUgVW5pb24ifSwKKyJSZXN1bHQiIDogeyJpbWFnZSI6ImV4 X3Jlc3VsdC5wbmciLCJpbWFnZV90ZXh0IjoiUmVzdWx0In0sCisiU2FtcGxl IFNjYW4iIDogeyJpbWFnZSI6ImV4X3NjYW4ucG5nIiwiaW1hZ2VfdGV4dCI6 IlNhbXBsZSBTY2FuIn0sCisiU2NhbiIgOiB7ImltYWdlIjoiZXhfc2Nhbi5w bmciLCJpbWFnZV90ZXh0IjoiU2NhbiJ9LAorIlNlZWsiIDogeyJpbWFnZSI6 ImV4X3NlZWsucG5nIiwiaW1hZ2VfdGV4dCI6IlNlZWsifSwKKyJTZXRPcCIg OiBmdW5jdGlvbihkYXRhKSB7CisgIHZhciBzdHJhdGVneSA9IGRhdGFbJ1N0 cmF0ZWd5J10sCisgICAgICBjb21tYW5kID0gZGF0YVsnQ29tbWFuZCddOwor CisgIGlmKHN0cmF0ZWd5ID09ICJIYXNoZWQiKSB7CisgICAgaWYoY29tbWFu ZC5zdGFydHNXaXRoKCJJbnRlcnNlY3QiKSkgeworICAgICAgaWYoY29tbWFu ZCA9PSAiSW50ZXJzZWN0IEFsbCIpCisgICAgICAgIHJldHVybiB7ImltYWdl IjoiZXhfaGFzaF9zZXRvcF9pbnRlcnNlY3RfYWxsLnBuZyIsImltYWdlX3Rl eHQiOiJIYXNoZWQgSW50ZXJzZWN0IEFsbCJ9OworICAgICAgcmV0dXJuIHsi aW1hZ2UiOiJleF9oYXNoX3NldG9wX2ludGVyc2VjdC5wbmciLCJpbWFnZV90 ZXh0IjoiSGFzaGVkIEludGVyc2VjdCJ9OworICAgIH0KKyAgICBlbHNlIGlm IChjb21tYW5kLnN0YXJ0c1dpdGgoIkV4Y2VwdCIpKSB7CisgICAgICBpZihj b21tYW5kID09ICJFeGNlcHQgQWxsIikKKyAgICAgICAgcmV0dXJuIHsiaW1h Z2UiOiJleF9oYXNoX3NldG9wX2V4Y2VwdF9hbGwucG5nIiwiaW1hZ2VfdGV4 dCI6Ikhhc2hlZCBFeGNlcHQgQWxsIn07CisgICAgICByZXR1cm4geyJpbWFn ZSI6ImV4X2hhc2hfc2V0b3BfZXhjZXB0LnBuZyIsImltYWdlX3RleHQiOiJI YXNoIEV4Y2VwdCJ9OworICAgIH0KKyAgICByZXR1cm4geyJpbWFnZSI6ImV4 X2hhc2hfc2V0b3BfdW5rbm93bi5wbmciLCJpbWFnZV90ZXh0IjoiSGFzaGVk IFNldE9wIFVua25vd24ifTsKKyAgfQorICByZXR1cm4geyJpbWFnZSI6ImV4 X3NldG9wLnBuZyIsImltYWdlX3RleHQiOiJTZXRPcCJ9OworfSwKKyJTZXEg U2NhbiI6IGZ1bmN0aW9uKGRhdGEpIHsKKyAgcmV0dXJuIHsiaW1hZ2UiOiJl eF9zY2FuLnBuZyIsImltYWdlX3RleHQiOmRhdGFbJ1JlbGF0aW9uIE5hbWUn XX07Cit9LAorIlN1YnF1ZXJ5IFNjYW4iIDogeyJpbWFnZSI6ImV4X3N1YnBs YW4ucG5nIiwiaW1hZ2VfdGV4dCI6IlN1YlF1ZXJ5IFNjYW4ifSwKKyJTb3J0 IiA6IHsiaW1hZ2UiOiJleF9zb3J0LnBuZyIsImltYWdlX3RleHQiOiJTb3J0 In0sCisiVGlkIFNjYW4iIDogeyJpbWFnZSI6ImV4X3RpZF9zY2FuLnBuZyIs ImltYWdlX3RleHQiOiJUaWQgU2NhbiJ9LAorIlVuaXF1ZSIgOiB7ImltYWdl IjoiZXhfdW5pcXVlLnBuZyIsImltYWdlX3RleHQiOiJVbmlxdWUifSwKKyJW YWx1ZXMgU2NhbiIgOiB7ImltYWdlIjoiZXhfdmFsdWVzX3NjYW4ucG5nIiwi aW1hZ2VfdGV4dCI6IlZhbHVlcyBTY2FuIn0sCisiV2luZG93QWdnIiA6IHsi aW1hZ2UiOiJleF93aW5kb3dfYWdncmVnYXRlLnBuZyIsImltYWdlX3RleHQi OiJXaW5kb3cgQWdncmVnYXRlIn0sCisiV29ya1RhYmxlIFNjYW4iIDogeyJp bWFnZSI6ImV4X3dvcmt0YWJsZV9zY2FuLnBuZyIsImltYWdlX3RleHQiOiJX b3JrVGFibGUgU2NhbiJ9LAorIlVuZGVmaW5lZCIgOiB7ImltYWdlIjoiZXhf dW5rbm93bi5wbmciLCJpbWFnZV90ZXh0IjoiVW5kZWZpbmVkIn0sCit9CisK Ky8vIFNvbWUgcHJlZGVmaW5lZCBjb25zdGFudHMgdXNlZCB0byBjYWxjdWxh dGUgaW1hZ2UgbG9jYXRpb24gYW5kIGl0cyBib3JkZXIKK3ZhciBwV0lEVEgg PSBwSEVJR0hUID0gMTAwLgorICAgIElNQUdFX1dJRFRIID0gSU1BR0VfSEVJ R0hUID0gNTA7Cit2YXIgb2Zmc2V0WCA9IDIwMCwKKyAgICBvZmZzZXRZID0g NjA7Cit2YXIgQVJST1dfV0lEVEggPSAxMCwKKyAgICBBUlJPV19IRUlHSFQg PSAxMCwKKyAgICBERUZBVUxUX0FSUk9XX1NJWkUgPSAyOwordmFyIFRYVF9B TExJR04gPSA1LAorICAgIFRYVF9TSVpFID0gIjE1cHgiOwordmFyIFRPVEFM X1dJRFRIID0gdW5kZWZpbmVkLAorICAgIFRPVEFMX0hFSUdIVCA9IHVuZGVm aW5lZDsKK3ZhciB4TWFyZ2luID0gMjUsCisgICAgeU1hcmdpbiA9IDI1Owor dmFyIE1JTl9aT09NX0ZBQ1RPUiA9IDAuMDEsCisgICAgTUFYX1pPT01fRkFD VE9SID0gMiwKKyAgICBJTklUX1pPT01fRkFDVE9SID0gMTsKKyAgICBaT09N X1JBVElPID0gMC4wNTsKKworCisvLyBCYWNrYm9uZSBtb2RlbCBmb3IgZWFj aCBwbGFuIHByb3BlcnR5IG9mIGlucHV0IEpTT04gb2JqZWN0Cit2YXIgUGxh bk1vZGVsID0gQmFja2JvbmUuTW9kZWwuZXh0ZW5kKHsKKyAgICBkZWZhdWx0 czogeworICAgICAgICAiUGxhbnMiOiBbXSwKKyAgICAgICAgbGV2ZWw6IFtd LAorICAgICAgICAiaW1hZ2UiOiB1bmRlZmluZWQsCisgICAgICAgICJpbWFn ZV90ZXh0IjogdW5kZWZpbmVkLAorICAgICAgICB4cG9zOiB1bmRlZmluZWQs CisgICAgICAgIHlwb3M6IHVuZGVmaW5lZCwKKyAgICAgICAgd2lkdGg6IHBX SURUSCwKKyAgICAgICAgaGVpZ2h0OiBwSEVJR0hUCisgICAgfSwKKyAgICBw YXJzZTogZnVuY3Rpb24oZGF0YSkgeworICAgICAgICB2YXIgaWR4ID0gMSwK KyAgICAgICAgICAgIGx2bCA9IGRhdGEubGV2ZWwgPSBkYXRhLmxldmVsIHx8 IFtpZHhdLAorICAgICAgICAgICAgcGxhbnMgPSBbXSwKKyAgICAgICAgICAg IG5vZGVfdHlwZSA9IGRhdGFbJ05vZGUgVHlwZSddLAorICAgICAgICAgICAg Ly8gQ2FsY3VsYXRpbmcgcmVsYXRpdmUgeHBvcyBvZiBjdXJyZW50IG5vZGUg ZnJvbSB0b3Agbm9kZQorICAgICAgICAgICAgeHBvcyA9IGRhdGEueHBvcyA9 IGRhdGEueHBvcyAtIHBXSURUSCwKKyAgICAgICAgICAgIC8vIENhbGN1bGF0 aW5nIHJlbGF0aXZlIHlwb3Mgb2YgY3VycmVudCBub2RlIGZyb20gdG9wIG5v ZGUKKyAgICAgICAgICAgIHlwb3MgPSBkYXRhLnlwb3MsCisgICAgICAgICAg ICBtYXhDaGlsZFdpZHRoID0gMDsKKworICAgICAgICBkYXRhWyd3aWR0aCdd ID0gcFdJRFRIOworICAgICAgICBkYXRhWydoZWlnaHQnXSA9IHBIRUlHSFQ7 CisKKyAgICAgICAgLyoKKyAgICAgICAgICogY2FsY3VsYXRpbmcgeHBvcywg eXBvcywgd2lkdGggYW5kIGhlaWdodCBpZiBjdXJyZW50IG5vZGUgaXMgYSBz dWJwbGFuCisgICAgICAgICAqLworICAgICAgICBpZiAoZGF0YVsnUGFyZW50 IFJlbGF0aW9uc2hpcCddID09PSAiU3ViUGxhbiIpIHsKKyAgICAgICAgICAg IGRhdGFbJ3dpZHRoJ10gKz0gKHhNYXJnaW4gKiAyKSArICh4TWFyZ2luIC8g Mik7CisgICAgICAgICAgICBkYXRhWydoZWlnaHQnXSArPSAoeU1hcmdpbiAq IDIpOworICAgICAgICAgICAgZGF0YVsneXBvcyddICs9IHlNYXJnaW47Cisg ICAgICAgICAgICB4cG9zIC09IHhNYXJnaW47CisgICAgICAgICAgICB5cG9z ICs9IHlNYXJnaW47CisgICAgICAgIH0KKworICAgICAgICBpZihub2RlX3R5 cGUuc3RhcnRzV2l0aCgiKHNsaWNlIikpCisgICAgICAgICAgICBub2RlX3R5 cGUgPSBub2RlX3R5cGUuc3Vic3RyaW5nKDAsNyk7CisKKyAgICAgICAgLy8g R2V0IHRoZSBpbWFnZSBpbmZvcm1hdGlvbiBmb3IgY3VycmVudCBub2RlCisg ICAgICAgIHZhciBtYXBwZXJPYmogPSAoXy5pc0Z1bmN0aW9uKGltYWdlTWFw cGVyW25vZGVfdHlwZV0pICYmCisgICAgICAgICAgICAgICAgaW1hZ2VNYXBw ZXJbbm9kZV90eXBlXS5hcHBseSh1bmRlZmluZWQsIFtkYXRhXSkpIHx8Cisg ICAgICAgICAgICAgICAgaW1hZ2VNYXBwZXJbbm9kZV90eXBlXSB8fCAnVW5k ZWZpbmVkJzsKKworICAgICAgICBkYXRhWyJpbWFnZSJdID0gbWFwcGVyT2Jq WyJpbWFnZSJdOworICAgICAgICBkYXRhWyJpbWFnZV90ZXh0Il0gPSBtYXBw ZXJPYmpbImltYWdlX3RleHQiXTsKKworICAgICAgICAvLyBTdGFydCBjYWxj dWxhdGluZyB4cG9zLCB5cG9zLCB3aWR0aCBhbmQgaGVpZ2h0IGZvciBjaGls ZCBwbGFucyBpZiBhbnkKKyAgICAgICAgaWYgKCdQbGFucycgaW4gZGF0YSkg eworCisgICAgICAgICAgICBkYXRhWyd3aWR0aCddICs9IG9mZnNldFg7CisK KyAgICAgICAgICAgIF8uZWFjaChkYXRhWydQbGFucyddLCBmdW5jdGlvbihw KSB7CisgICAgICAgICAgICAgICAgdmFyIGxldmVsID0gXy5jbG9uZShsdmwp LAorICAgICAgICAgICAgICAgICAgICBwbGFuID0gbmV3IFBsYW5Nb2RlbCgp OworCisgICAgICAgICAgICAgICAgbGV2ZWwucHVzaChpZHgpOworICAgICAg ICAgICAgICAgIHBsYW4uc2V0KHBsYW4ucGFyc2UoXy5leHRlbmQoCisgICAg ICAgICAgICAgICAgICAgIHAsIHsKKyAgICAgICAgICAgICAgICAgICAgICAg ICJsZXZlbCI6IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgeHBv czogeHBvcyAtIG9mZnNldFgsCisgICAgICAgICAgICAgICAgICAgICAgICB5 cG9zOiB5cG9zCisgICAgICAgICAgICAgICAgICAgIH0pKSk7CisKKyAgICAg ICAgICAgICAgICBpZiAobWF4Q2hpbGRXaWR0aCA8IHBsYW4uZ2V0KCd3aWR0 aCcpKSB7CisgICAgICAgICAgICAgICAgICAgIG1heENoaWxkV2lkdGggPSBw bGFuLmdldCgnd2lkdGgnKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg ICAgICAgICAgICB2YXIgY2hpbGRIZWlnaHQgPSBwbGFuLmdldCgnaGVpZ2h0 Jyk7CisKKyAgICAgICAgICAgICAgICBpZiAoaWR4ICE9PSAxKSB7CisgICAg ICAgICAgICAgICAgICAgIGRhdGFbJ2hlaWdodCddID0gZGF0YVsnaGVpZ2h0 J10gKyBjaGlsZEhlaWdodCArIG9mZnNldFk7CisgICAgICAgICAgICAgICAg fSBlbHNlIGlmIChjaGlsZEhlaWdodCA+IGRhdGFbJ2hlaWdodCddKSB7Cisg ICAgICAgICAgICAgICAgICAgIGRhdGFbJ2hlaWdodCddID0gY2hpbGRIZWln aHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHlwb3Mg Kz0gY2hpbGRIZWlnaHQgKyBvZmZzZXRZOworCisgICAgICAgICAgICAgICAg cGxhbnMucHVzaChwbGFuKTsKKyAgICAgICAgICAgICAgICBpZHgrKzsKKyAg ICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgLy8gRmluYWwg V2lkdGggYW5kIEhlaWdodCBvZiBjdXJyZW50IG5vZGUKKyAgICAgICAgZGF0 YVsnd2lkdGgnXSArPSBtYXhDaGlsZFdpZHRoOworICAgICAgICBkYXRhWydQ bGFucyddID0gcGxhbnM7CisKKyAgICAgICAgcmV0dXJuIGRhdGE7CisgICAg fSwKKworICAgIC8qCisgICAgICogUmVxdWlyZWQgdG8gcGFyc2UgYW5kIGlu Y2x1ZGUgbm9uLWRlZmF1bHQgcGFyYW1zIG9mCisgICAgICogcGxhbiBpbnRv IGJhY2tib25lIG1vZGVsCisgICAgICovCisgICAgdG9KU09OOiBmdW5jdGlv bihub25fcmVjdXJzaXZlKSB7CisgICAgICB2YXIgcmVzID0gQmFja2JvbmUu TW9kZWwucHJvdG90eXBlLnRvSlNPTi5hcHBseSh0aGlzLCBhcmd1bWVudHMp OworCisgICAgICBpZiAobm9uX3JlY3Vyc2l2ZSkgeworICAgICAgICAgICAg ZGVsZXRlIHJlc1snUGxhbnMnXTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICB2YXIgcGxhbnMgPSBbXTsKKyAgICAgICAgICAgIF8uZWFjaChyZXNb J1BsYW5zJ10sIGZ1bmN0aW9uKHApIHsKKyAgICAgICAgICAgICAgcGxhbnMu cHVzaChwLnRvSlNPTigpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAg ICAgcmVzWydQbGFucyddID0gcGxhbnM7CisgICAgICB9CisgICAgICByZXR1 cm4gcmVzOworICAgIH0sCisKKyAgICAvLyBEcmF3IGFuIGFycm93IHRvIHBh cmVudCBub2RlCisgICAgZHJhd1BvbHlMaW5lOiBmdW5jdGlvbihnLCBzdGFy dFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSwgb3B0cywgYXJyb3dPcHRzKSB7Cisg ICAgICAvLyBDYWxjdWxhdGUgZW5kIHBvaW50IG9mIGZpcnN0IHN0YXJ0aW5n IHN0cmFpZ2h0IGxpbmUgKHN0YXJ0eDEsIHN0YXJ0eTEpCisgICAgICAvLyBD YWxjdWxhdGUgc3RhcnQgcG9pbnQgb2YgMm5kIHN0cmFpZ2h0IGxpbmUgKGVu ZHgxLCBlbmR5MSkKKyAgICAgIHZhciBtaWRYMSA9IHN0YXJ0WCArICgoZW5k WCAtIHN0YXJ0WCkgLyAzKSwKKyAgICAgICAgICBtaWRYMiA9IHN0YXJ0WCAr ICgyICogKChlbmRYIC0gc3RhcnRYKSAvIDMpKTsKKworICAgICAgLy9jcmVh dGUgYXJyb3cgaGVhZAorICAgICAgdmFyIGFycm93ID0gZy5wb2x5Z29uKAor ICAgICAgICAgICAgICAgICAgICBbMCwgQVJST1dfSEVJR0hULAorICAgICAg ICAgICAgICAgICAgICAoQVJST1dfV0lEVEggLyAyKSxBUlJPV19IRUlHSFQs CisgICAgICAgICAgICAgICAgICAgIChBUlJPV19IRUlHSFQgLyA0KSwgMCwK KyAgICAgICAgICAgICAgICAgICAgMCwgQVJST1dfV0lEVEhdCisgICAgICAg ICAgICAgICAgICAgICkudHJhbnNmb3JtKCJyOTAiKTsKKyAgICAgIHZhciBt YXJrZXIgPSBhcnJvdy5tYXJrZXIoCisgICAgICAgICAgICAgICAgICAgICAg ICAgMCwgMCwgQVJST1dfV0lEVEgsIEFSUk9XX0hFSUdIVCwgMCwgKEFSUk9X X1dJRFRIIC8gMikKKyAgICAgICAgICAgICAgICAgICAgICAgICApLmF0dHIo YXJyb3dPcHRzKTsKKworICAgICAgLy8gRmlyc3Qgc3RyYWlnaHQgbGluZQor ICAgICAgZy5saW5lKAorICAgICAgICBzdGFydFgsIHN0YXJ0WSwgbWlkWDEs IHN0YXJ0WQorICAgICAgICApLmF0dHIob3B0cyk7CisKKyAgICAgIC8vIERp YWdvbmFsIGxpbmUKKyAgICAgIGcubGluZSgKKyAgICAgICAgbWlkWDEtMSwg c3RhcnRZLCBtaWRYMiwgZW5kWQorICAgICAgICApLmF0dHIob3B0cyk7CisK KyAgICAgIC8vIExhc3Qgc3RyYWlnaHQgbGluZQorICAgICAgdmFyIGxpbmUg PSBnLmxpbmUoCisgICAgICAgICAgICAgICAgICAgbWlkWDIsIGVuZFksIGVu ZFgsIGVuZFkKKyAgICAgICAgICAgICAgICAgICApLmF0dHIob3B0cyk7Cisg ICAgICBsaW5lLmF0dHIoe21hcmtlckVuZDogbWFya2VyfSkKKyAgICB9LAor CisgICAgLy8gRHJhdyBpbWFnZSwgaXRzIG5hbWUgYW5kIGl0cyB0b29sdGlw CisgICAgZHJhdzogZnVuY3Rpb24ocywgeHBvcywgeXBvcywgcFhwb3MsIHBZ cG9zLCBncmFwaENvbnRhaW5lciwgdG9vbFRpcENvbnRhaW5lcikgeworICAg ICAgICB2YXIgZyA9IHMuZygpOworICAgICAgICB2YXIgY3VycmVudFhwb3Mg PSB4cG9zICsgdGhpcy5nZXQoJ3hwb3MnKSAsCisgICAgICAgICAgICBjdXJy ZW50WXBvcyA9IHlwb3MgKyB0aGlzLmdldCgneXBvcycpLAorICAgICAgICAg ICAgaXNTdWJQbGFuID0gKHRoaXMuZ2V0KCdQYXJlbnQgUmVsYXRpb25zaGlw JykgPT09ICJTdWJQbGFuIik7CisKKyAgICAgICAgLy8gRHJhdyB0aGUgc3Vi cGxhbiByZWN0YW5nbGUKKyAgICAgICAgaWYgKGlzU3ViUGxhbikgeworICAg ICAgICAgIGcucmVjdCgKKyAgICAgICAgICAgIGN1cnJlbnRYcG9zIC0gdGhp cy5nZXQoJ3dpZHRoJykgKyBwV0lEVEggKyB4TWFyZ2luLAorICAgICAgICAg ICAgY3VycmVudFlwb3MgLSB5TWFyZ2luLAorICAgICAgICAgICAgdGhpcy5n ZXQoJ3dpZHRoJykgLSB4TWFyZ2luLAorICAgICAgICAgICAgdGhpcy5nZXQo J2hlaWdodCcpLCA1CisgICAgICAgICAgKS5hdHRyKHsKKyAgICAgICAgICAg ICAgc3Ryb2tlOiAnIzQ0NDQ0NCcsCisgICAgICAgICAgICAgICdzdHJva2VX aWR0aCc6IDEuMiwKKyAgICAgICAgICAgICAgZmlsbDogJ2dyYXknLAorICAg ICAgICAgICAgICBmaWxsT3BhY2l0eTogMC4yCisgICAgICAgICAgfSk7CisK KyAgICAgICAgICAvL3Byb3ZpZGUgc3VicGxhbiBuYW1lCisgICAgICAgICAg dmFyIHRleHQgPSBnLnRleHQoCisgICAgICAgICAgICBjdXJyZW50WHBvcyAg KyBwV0lEVEggLSAoIHRoaXMuZ2V0KCd3aWR0aCcpIC8gMikgLSB4TWFyZ2lu LAorICAgICAgICAgICAgY3VycmVudFlwb3MgKyBwSEVJR0hUICAtICh0aGlz LmdldCgnaGVpZ2h0JykgLyAyKSAtIHlNYXJnaW4sCisgICAgICAgICAgICB0 aGlzLmdldCgnU3VicGxhbiBOYW1lJykKKyAgICAgICAgICApLmF0dHIoewor ICAgICAgICAgICAgZm9udFNpemU6IFRYVF9TSVpFLCAidGV4dC1hbmNob3Ii OiJzdGFydCIsCisgICAgICAgICAgICBmaWxsOiAncmVkJworICAgICAgICAg IH0pOworICAgICAgICB9CisKKyAgICAgICAgLy8gRHJhdyB0aGUgYWN0dWFs IGltYWdlIGZvciBjdXJyZW50IG5vZGUKKyAgICAgICAgdmFyIGltYWdlID0g Zy5pbWFnZSgKKyAgICAgICAgICAgIHBnRXhwbGFpbi5wcmVmaXggKyB0aGlz LmdldCgnaW1hZ2UnKSwKKyAgICAgICAgICAgIGN1cnJlbnRYcG9zICsgKHBX SURUSCAtIElNQUdFX1dJRFRIKSAvIDIsCisgICAgICAgICAgICBjdXJyZW50 WXBvcyArIChwSEVJR0hUIC0gSU1BR0VfSEVJR0hUKSAvIDIsCisgICAgICAg ICAgICBJTUFHRV9XSURUSCwKKyAgICAgICAgICAgIElNQUdFX0hFSUdIVAor ICAgICAgICApOworCisgICAgICAgIC8vIERyYXcgdG9vbHRpcAorICAgICAg ICB2YXIgaW1hZ2VfZGF0YSA9IHRoaXMudG9KU09OKCk7CisgICAgICAgIGlt YWdlLm1vdXNlb3ZlcihmdW5jdGlvbihldnQpeworCisgICAgICAgICAgLy8g RW1wdHkgdGhlIHRvb2x0aXAgY29udGVudCBpZiBpdCBoYXMgYW55IGFuZCBh ZGQgbmV3IGRhdGEKKyAgICAgICAgICB0b29sVGlwQ29udGFpbmVyLmVtcHR5 KCk7CisgICAgICAgICAgdmFyIHRvb2x0aXAgPSAkKCc8dGFibGU+PC90YWJs ZT4nLHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiAicGdh ZG1pbi10b29sdGlwLXRhYmxlIgorICAgICAgICAgICAgICAgICAgICAgICAg fSkuYXBwZW5kVG8odG9vbFRpcENvbnRhaW5lcik7CisgICAgICAgICAgXy5l YWNoKGltYWdlX2RhdGEsIGZ1bmN0aW9uKHZhbHVlLGtleSkgeworICAgICAg ICAgICAgaWYoa2V5ICE9PSAnaW1hZ2UnICYmIGtleSAhPT0gJ1BsYW5zJyAm JgorICAgICAgICAgICAgICAga2V5ICE9PSAnbGV2ZWwnICYmIGtleSAhPT0g J2ltYWdlJyAmJgorICAgICAgICAgICAgICAga2V5ICE9PSAnaW1hZ2VfdGV4 dCcgJiYga2V5ICE9PSAneHBvcycgJiYKKyAgICAgICAgICAgICAgIGtleSAh PT0gJ3lwb3MnICYmIGtleSAhPT0gJ3dpZHRoJyAmJgorICAgICAgICAgICAg ICAga2V5ICE9PSAnaGVpZ2h0JykgeworICAgICAgICAgICAgICB0b29sdGlw LmFwcGVuZCggJzx0cj48dGQgY2xhc3M9ImxhYmVsIGV4cGxhaW4tdG9vbHRp cCI+JyArIGtleSArICc8L3RkPjx0ZCBjbGFzcz0ibGFiZWwgZXhwbGFpbi10 b29sdGlwLXZhbCI+JyArIHZhbHVlICsgJzwvdGQ+PC90cj4nICk7CisgICAg ICAgICAgICB9OworICAgICAgICAgIH0pOworCisgICAgICAgICAgdmFyIHpv b21GYWN0b3IgPSBncmFwaENvbnRhaW5lci5kYXRhKCd6b29tLWZhY3Rvcicp OworCisgICAgICAgICAgLy8gQ2FsY3VsYXRlIGNvLW9yZGluYXRlcyBmb3Ig dG9vbHRpcAorICAgICAgICAgIHZhciB0b29sVGlwWCA9ICgoY3VycmVudFhw b3MgKyBwV0lEVEgpICogem9vbUZhY3RvciAtIGdyYXBoQ29udGFpbmVyLnNj cm9sbExlZnQoKSk7CisgICAgICAgICAgdmFyIHRvb2xUaXBZID0gKChjdXJy ZW50WXBvcyArIHBIRUlHSFQpICogem9vbUZhY3RvciAtIGdyYXBoQ29udGFp bmVyLnNjcm9sbFRvcCgpKTsKKworICAgICAgICAgIC8vIFJlY2FsY3VsYXRl IHgueSBpZiB0b29sdGlwIGlzIGdvaW5nIG91dCBvZiBzY3JlZW4KKyAgICAg ICAgICBpZihncmFwaENvbnRhaW5lci53aWR0aCgpIDwgKHRvb2xUaXBYICsg dG9vbFRpcENvbnRhaW5lclswXS5jbGllbnRXaWR0aCkpCisgICAgICAgICAg ICB0b29sVGlwWCAtPSAodG9vbFRpcENvbnRhaW5lclswXS5jbGllbnRXaWR0 aCArIChwV0lEVEgqem9vbUZhY3RvcikpOworICAgICAgICAgIC8vaWYoZG9j dW1lbnQuY2hpbGRyZW5bMF0uY2xpZW50SGVpZ2h0IDwgKHRvb2xUaXBZICsg dG9vbFRpcENvbnRhaW5lclswXS5jbGllbnRIZWlnaHQpKQorICAgICAgICAg IGlmKGdyYXBoQ29udGFpbmVyLmhlaWdodCgpIDwgKHRvb2xUaXBZICsgdG9v bFRpcENvbnRhaW5lclswXS5jbGllbnRIZWlnaHQpKQorICAgICAgICAgICAg dG9vbFRpcFkgLT0gKHRvb2xUaXBDb250YWluZXJbMF0uY2xpZW50SGVpZ2h0 ICsgKChwSEVJR0hULzIpKnpvb21GYWN0b3IpKTsKKworICAgICAgICAgIHRv b2xUaXBYID0gdG9vbFRpcFggPCAwID8gMCA6ICh0b29sVGlwWCk7CisgICAg ICAgICAgdG9vbFRpcFkgPSB0b29sVGlwWSA8IDAgPyAwIDogKHRvb2xUaXBZ KTsKKworICAgICAgICAgIC8vIFNob3cgdG9vbFRpcCBhdCByZXNwZWN0aXZl IHgseSBjb29yZGluYXRlcworICAgICAgICAgIHRvb2xUaXBDb250YWluZXIu Y3NzKHsnb3BhY2l0eSc6ICcwLjgnfSk7CisgICAgICAgICAgdG9vbFRpcENv bnRhaW5lci5jc3MoJ2xlZnQnLCB0b29sVGlwWCk7CisgICAgICAgICAgdG9v bFRpcENvbnRhaW5lci5jc3MoICd0b3AnLCB0b29sVGlwWSk7CisgICAgICAg IH0pOworCisgICAgICAgIC8vIFJlbW92ZSB0b29sdGlwIHdoZW4gbW91c2Ug aXMgb3V0IGZyb20gbm9kZSdzIGFyZWEKKyAgICAgICAgaW1hZ2UubW91c2Vv dXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgdG9vbFRpcENvbnRhaW5lci5l bXB0eSgpOworICAgICAgICAgIHRvb2xUaXBDb250YWluZXIuY3NzKHsnb3Bh Y2l0eSc6ICcwJ30pOworICAgICAgICAgIHRvb2xUaXBDb250YWluZXIuY3Nz KCdsZWZ0JywgMCk7CisgICAgICAgICAgdG9vbFRpcENvbnRhaW5lci5jc3Mo ICd0b3AnLCAwKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgLy8gRHJhdyB0 ZXh0IGJlbG93IHRoZSBub2RlCisgICAgICAgIHZhciBsYWJlbCA9IGcuZygp OworICAgICAgICBnLm11bHRpdGV4dCgKKyAgICAgICAgICBjdXJyZW50WHBv cyArIChwV0lEVEggLyAyKSwKKyAgICAgICAgICBjdXJyZW50WXBvcyArIHBI RUlHSFQgLSBUWFRfQUxMSUdOLAorICAgICAgICAgIHRoaXMuZ2V0KCdpbWFn ZV90ZXh0JyksCisgICAgICAgICAgMTUwLAorICAgICAgICAgIHsiZm9udC1z aXplIjogVFhUX1NJWkUgLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9CisgICAg ICAgICk7CisKKyAgICAgICAgLy8gRHJhdyBBcnJvdyB0byBwYXJlbnQgb25s eSBpdHMgbm90IHRoZSBmaXJzdCBub2RlCisgICAgICAgIGlmICghXy5pc1Vu ZGVmaW5lZChwWXBvcykpIHsKKyAgICAgICAgICAgIHZhciBzdGFydHggPSBj dXJyZW50WHBvcyArIHBXSURUSDsKKyAgICAgICAgICAgIHZhciBzdGFydHkg PSBjdXJyZW50WXBvcyArIChwSEVJR0hUIC8gMik7CisgICAgICAgICAgICB2 YXIgZW5keCA9IHBYcG9zIC0gQVJST1dfV0lEVEg7CisgICAgICAgICAgICB2 YXIgZW5keSA9IHBZcG9zICsgKHBIRUlHSFQgLyAyKTsKKyAgICAgICAgICAg IHZhciBzdGFydF9jb3N0ID0gdGhpcy5nZXQoIlN0YXJ0dXAgQ29zdCIpLAor ICAgICAgICAgICAgICAgIHRvdGFsX2Nvc3QgPSB0aGlzLmdldCgiVG90YWwg Q29zdCIpOworICAgICAgICAgICAgdmFyIGFycm93X3NpemUgPSBERUZBVUxU X0FSUk9XX1NJWkU7CisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgYXJyb3cg d2lkdGggYWNjb3JkaW5nIHRvIGNvc3Qgb2YgYSBwYXJ0aWN1bGFyIHBsYW4K KyAgICAgICAgICAgIGlmKHN0YXJ0X2Nvc3QgIT0gdW5kZWZpbmVkICYmIHRv dGFsX2Nvc3QgIT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgIHZhciBh cnJvd19zaXplID0gTWF0aC5yb3VuZChNYXRoLmxvZygoc3RhcnRfY29zdCt0 b3RhbF9jb3N0KS8yICsgc3RhcnRfY29zdCkpOworICAgICAgICAgICAgICBh cnJvd19zaXplID0gYXJyb3dfc2l6ZSA8IDEgPyAxIDogYXJyb3dfc2l6ZSA+ IDEwID8gMTAgOiBhcnJvd19zaXplOworICAgICAgICAgICAgfQorCisKKyAg ICAgICAgICAgIHZhciBhcnJvd192aWV3X2JveCA9IFswLCAwLCAyKkFSUk9X X1dJRFRILCAyKkFSUk9XX0hFSUdIVF07CisgICAgICAgICAgICB2YXIgb3B0 cyA9IHtzdHJva2U6ICIjMDAwMDAwIiwgc3Ryb2tlV2lkdGg6IGFycm93X3Np emUgKyAxfSwKKyAgICAgICAgICAgICAgICBzdWJwbGFuT3B0cyA9IHtzdHJv a2U6ICIjODY2NDg2Iiwgc3Ryb2tlV2lkdGg6IGFycm93X3NpemUgKyAxfSwK KyAgICAgICAgICAgICAgICBhcnJvd09wdHMgPSB7dmlld0JveDogYXJyb3df dmlld19ib3guam9pbigiICIpfTsKKworICAgICAgICAgICAgLy8gRHJhdyBh biBhcnJvdyBmcm9tIGN1cnJlbnQgbm9kZSB0byBpdHMgcGFyZW50CisgICAg ICAgICAgICB0aGlzLmRyYXdQb2x5TGluZSgKKyAgICAgICAgICAgICAgZywg c3RhcnR4LCBzdGFydHksIGVuZHgsIGVuZHksCisgICAgICAgICAgICAgIGlz U3ViUGxhbiA/IHN1YnBsYW5PcHRzIDogb3B0cywgYXJyb3dPcHRzCisgICAg ICAgICAgICApOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHBsYW5zID0g dGhpcy5nZXQoJ1BsYW5zJyk7CisKKyAgICAgICAgLy8gRHJhdyBub2RlcyBm b3IgY3VycmVudCBwbGFuJ3MgY2hpbGRyZW4KKyAgICAgICAgXy5lYWNoKHBs YW5zLCBmdW5jdGlvbihwKSB7CisgICAgICAgICAgICBwLmRyYXcocywgeHBv cywgeXBvcywgY3VycmVudFhwb3MsIGN1cnJlbnRZcG9zLCBncmFwaENvbnRh aW5lciwgdG9vbFRpcENvbnRhaW5lcik7CisgICAgICAgIH0pOworICAgIH0K K30pOworCisvLyBNYWluIGJhY2tib25lIG1vZGVsIHRvIHN0b3JlIEpTT04g b2JqZWN0Cit2YXIgTWFpblBsYW5Nb2RlbCA9IEJhY2tib25lLk1vZGVsLmV4 dGVuZCh7CisgICAgZGVmYXVsdHM6IHsKKyAgICAgICAgIlBsYW4iOiB1bmRl ZmluZWQsCisgICAgICAgIHhwb3M6IDAsCisgICAgICAgIHlwb3M6IDAsCisg ICAgfSwKKyAgICBpbml0aWFsaXplOiBmdW5jdGlvbigpIHsKKyAgICAgICAg dGhpcy5zZXQoIlBsYW4iLCBuZXcgUGxhbk1vZGVsKCkpOworICAgIH0sCisK KyAgICAvLyBQYXJzZSB0aGUgSlNPTiBkYXRhIGFuZCBmZXRjaCBpdHMgY2hp bGRyZW4gcGxhbnMKKyAgICBwYXJzZTogZnVuY3Rpb24oZGF0YSkgeworICAg ICAgICBpZiAoZGF0YSAmJiAnUGxhbicgaW4gZGF0YSkgeworICAgICAgICAg ICB2YXIgcGxhbiA9IHRoaXMuZ2V0KCJQbGFuIik7CisgICAgICAgICAgIHBs YW4uc2V0KAorICAgICAgICAgICAgIHBsYW4ucGFyc2UoCisgICAgICAgICAg ICAgICBfLmV4dGVuZCgKKyAgICAgICAgICAgICAgICAgZGF0YVsnUGxhbidd LCB7CisgICAgICAgICAgICAgICAgICAgeHBvczogMCwKKyAgICAgICAgICAg ICAgICAgICB5cG9zOiAwCisgICAgICAgICAgICAgICAgIH0pKSk7CisKKyAg ICAgICAgICAgZGF0YVsneHBvcyddID0gMDsKKyAgICAgICAgICAgZGF0YVsn eXBvcyddID0gMDsKKyAgICAgICAgICAgZGF0YVsnd2lkdGgnXSA9IHBsYW4u Z2V0KCd3aWR0aCcpICsgKHhNYXJnaW4gKiAyKTsKKyAgICAgICAgICAgZGF0 YVsnaGVpZ2h0J10gPSBwbGFuLmdldCgnaGVpZ2h0JykgKyAoeU1hcmdpbiAq IDIpOworCisgICAgICAgICAgIGRlbGV0ZSBkYXRhWydQbGFuJ107CisgICAg ICAgIH0KKworICAgICAgcmV0dXJuIGRhdGE7CisgICAgfSwKKyAgICB0b0pT T046IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIHJlcyA9IEJhY2tib25lLk1v ZGVsLnByb3RvdHlwZS50b0pTT04uYXBwbHkodGhpcywgYXJndW1lbnRzKTsK KworICAgICAgaWYgKHJlcy5QbGFuKSB7CisgICAgICAgIHJlcy5QbGFuID0g cmVzLlBsYW4udG9KU09OKCk7CisgICAgICB9CisKKyAgICAgIHJldHVybiBy ZXM7CisgICAgfSwKKyAgICBkcmF3OiBmdW5jdGlvbihzLCB4cG9zLCB5cG9z LCBncmFwaENvbnRhaW5lciwgdG9vbFRpcENvbnRhaW5lcikgeworICAgICAg ICB2YXIgZyA9IHMuZygpOworCisgICAgICAgIC8vZHJhdyB0aGUgYm9yZGVy CisgICAgICAgIGcucmVjdCgKKwkgICAgICAgIDAsIDAsIHRoaXMuZ2V0KCd3 aWR0aCcpIC0gMTAsIHRoaXMuZ2V0KCdoZWlnaHQnKSAtIDEwLCA1CisJICAg ICkuYXR0cih7CisgICAgICAgICAgICBzdHJva2U6ICcjRkZFQkNEJywgJ3N0 cm9rZVdpZHRoJzogMS4yLAorICAgICAgICAgICAgZmlsbDogJyNGRkY4REMn LCBmaWxsT3BhY2l0eTogMC41CisgICAgICAgIH0pOworCisgICAgICAgIC8v RmV0Y2ggdG90YWwgd2lkdGgsIGhlaWdodAorICAgICAgICBUT1RBTF9XSURU SCA9IHRoaXMuZ2V0KCd3aWR0aCcpOworICAgICAgICBUT1RBTF9IRUlHSFQg PSB0aGlzLmdldCgnaGVpZ2h0Jyk7CisgICAgICAgIHZhciBwbGFuID0gdGhp cy5nZXQoJ1BsYW4nKTsKKworICAgICAgICAvL0RyYXcgZXhwbGFpbiBncmFw aAorICAgICAgICBwbGFuLmRyYXcoZywgeHBvcywgeXBvcywgdW5kZWZpbmVk LCB1bmRlZmluZWQsIGdyYXBoQ29udGFpbmVyLCB0b29sVGlwQ29udGFpbmVy KTsKKyAgICB9Cit9KTsKKworLy8gUGFyc2UgYW5kIGRyYXcgZnVsbCBncmFw aGljYWwgZXhwbGFpbgorXy5leHRlbmQoCisgICAgcGdFeHBsYWluLCB7Cisg ICAgICAgIC8vIEFzc3VtcHRpb24gY29udGFpbmVyIGlzIGEgalF1ZXJ5IG9i amVjdAorICAgICAgICBEcmF3SlNPTlBsYW46IGZ1bmN0aW9uKGNvbnRhaW5l ciwgcGxhbikgeworICAgICAgICAgIHZhciBteV9wbGFucyA9IFtdOworICAg ICAgICAgIGNvbnRhaW5lci5lbXB0eSgpOworICAgICAgICAgIHZhciBjdXJy X3pvb21fZmFjdG9yID0gMS4wOworCisgICAgICAgICAgdmFyIHpvb21BcmVh ID0kKCc8ZGl2PjwvZGl2PicsIHsKKyAgICAgICAgICAgICAgICBjbGFzczog J3BnLWV4cGxhaW4tem9vbS1hcmVhIGJ0bi1ncm91cCcsCisgICAgICAgICAg ICAgICAgcm9sZTogJ2dyb3VwJworICAgICAgICAgICAgICAgIH0pLmFwcGVu ZFRvKGNvbnRhaW5lciksCisgICAgICAgICAgICAgIHpvb21JbkJ0biA9ICQo JzxidXR0b24+PC9idXR0b24+JywgeworICAgICAgICAgICAgICAgIGNsYXNz OiAnYnRuIHBnLWV4cGxhaW4tem9vbS1idG4gYmFkZ2UnLAorICAgICAgICAg ICAgICAgIHRpdGxlOiAnWm9vbSBpbicKKyAgICAgICAgICAgICAgICB9KS5h cHBlbmRUbyh6b29tQXJlYSkuYXBwZW5kKAorICAgICAgICAgICAgICAgICAg JCgnPGk+PC9pPicseworICAgICAgICAgICAgICAgICAgICBjbGFzczogJ2Zh IGZhLXNlYXJjaC1wbHVzJworICAgICAgICAgICAgICAgICAgfSkpLAorICAg ICAgICAgICAgICB6b29tVG9Ob3JtYWwgPSAkKCc8YnV0dG9uPjwvYnV0dG9u PicsIHsKKyAgICAgICAgICAgICAgICBjbGFzczogJ2J0biBwZy1leHBsYWlu LXpvb20tYnRuIGJhZGdlJywKKyAgICAgICAgICAgICAgICB0aXRsZTogJ1pv b20gdG8gb3JpZ2luYWwnCisgICAgICAgICAgICAgICAgfSkuYXBwZW5kVG8o em9vbUFyZWEpLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICQoJzxpPjwv aT4nLHsKKyAgICAgICAgICAgICAgICAgICAgY2xhc3M6ICdmYSBmYS1hcnJv d3MtYWx0JworICAgICAgICAgICAgICAgICAgfSkpCisgICAgICAgICAgICAg IHpvb21PdXRCdG4gPSAkKCc8YnV0dG9uPjwvYnV0dG9uPicsIHsKKyAgICAg ICAgICAgICAgICBjbGFzczogJ2J0biBwZy1leHBsYWluLXpvb20tYnRuIGJh ZGdlJywKKyAgICAgICAgICAgICAgICB0aXRsZTogJ1pvb20gb3V0JworICAg ICAgICAgICAgICAgIH0pLmFwcGVuZFRvKHpvb21BcmVhKS5hcHBlbmQoCisg ICAgICAgICAgICAgICAgICAkKCc8aT48L2k+JywgeworICAgICAgICAgICAg ICAgICAgICBjbGFzczogJ2ZhIGZhLXNlYXJjaC1taW51cycKKyAgICAgICAg ICAgICAgICAgIH0pKTsKKworICAgICAgICAgIC8vIE1haW4gZGl2IHRvIGJl IGRyYXduIGFsbCBpbWFnZXMgb24KKyAgICAgICAgICB2YXIgcGxhbkRpdiA9 ICQoJzxkaXY+PC9kaXY+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IHtjbGFzczogInBnYWRtaW4tZXhwbGFpbi1jb250YWluZXIifQorICAgICAg ICAgICAgICAgICAgICAgICAgICkuYXBwZW5kVG8oY29udGFpbmVyKSwKKyAg ICAgICAgICAgICAgLy8gRGl2IHRvIGRyYXcgdG9vbC10aXAgb24KKyAgICAg ICAgICAgICAgdG9vbFRpcCA9ICQoJzxkaXY+PC9kaXY+JywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIHtpZDogInRvb2xUaXAiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2xhc3M6ICJwZ2FkbWluLWV4cGxhaW4tdG9v bHRpcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgICAgICAgICApLmFwcGVuZFRvKGNvbnRhaW5lcik7CisgICAg ICAgICAgdG9vbFRpcC5lbXB0eSgpOworICAgICAgICAgIHBsYW5EaXYuZGF0 YSgnem9vbS1mYWN0b3InLCBjdXJyX3pvb21fZmFjdG9yKTsKKworICAgICAg ICAgIHZhciB3ID0gMCwgaCA9IDAsCisgICAgICAgICAgICAgIHggPSB4TWFy Z2luLCBoID0geU1hcmdpbjsKKworICAgICAgICAgIF8uZWFjaChwbGFuLCBm dW5jdGlvbihwKSB7CisgICAgICAgICAgICB2YXIgbWFpbl9wbGFuID0gbmV3 IE1haW5QbGFuTW9kZWwoKTsKKworICAgICAgICAgICAgLy8gUGFyc2UgSlNP TiBkYXRhIHRvIGJhY2tib25lIG1vZGVsCisgICAgICAgICAgICBtYWluX3Bs YW4uc2V0KG1haW5fcGxhbi5wYXJzZShwKSk7CisgICAgICAgICAgICB3ID0g bWFpbl9wbGFuLmdldCgnd2lkdGgnKTsKKyAgICAgICAgICAgIGggPSBtYWlu X3BsYW4uZ2V0KCdoZWlnaHQnKTsKKworICAgICAgICAgICAgdmFyIHMgPSBT bmFwKHcsIGgpLAorICAgICAgICAgICAgICAgICRzdmcgPSAkKHMubm9kZSku ZGV0YWNoKCk7CisgICAgICAgICAgICBwbGFuRGl2LmFwcGVuZCgkc3ZnKTsK KworICAgICAgICAgICAgbWFpbl9wbGFuLmRyYXcocywgdyAtIHhNYXJnaW4s IHlNYXJnaW4sIHBsYW5EaXYsIHRvb2xUaXApOworCisgICAgICAgICAgICB2 YXIgaW5pdFBhbmVsV2lkdGggPSBwbGFuRGl2LndpZHRoKCksCisgICAgICAg ICAgICAgICAgaW5pdFBhbmVsSGVpZ2h0ID0gcGxhbkRpdi5oZWlnaHQoKTsK KworICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICogU2NhbGUgZ3Jh cGggaW4gY2FzZSBpdHMgd2lkdGggaXMgYmlnZ2VyIHRoYW4gcGFuZWwgd2lk dGgKKyAgICAgICAgICAgICAgKiBpbiB3aGljaCB0aGUgZ3JhcGggaXMgZGlz cGxheWVkCisgICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZihpbml0 UGFuZWxXaWR0aCA8IHcpIHsKKyAgICAgICAgICAgICAgdmFyIHdpZHRoX3Jh dGlvID0gaW5pdFBhbmVsV2lkdGggLyB3OworCisgICAgICAgICAgICAgIGN1 cnJfem9vbV9mYWN0b3IgPSB3aWR0aF9yYXRpbzsKKyAgICAgICAgICAgICAg Y3Vycl96b29tX2ZhY3RvciA9IGN1cnJfem9vbV9mYWN0b3IgPCBNSU5fWk9P TV9GQUNUT1IgPyBNSU5fWk9PTV9GQUNUT1IgOiBjdXJyX3pvb21fZmFjdG9y OworICAgICAgICAgICAgICBjdXJyX3pvb21fZmFjdG9yID0gY3Vycl96b29t X2ZhY3RvciA+IElOSVRfWk9PTV9GQUNUT1IgPyBJTklUX1pPT01fRkFDVE9S IDogY3Vycl96b29tX2ZhY3RvcjsKKworICAgICAgICAgICAgICB2YXIgem9v bUluTWF0cml4ID0gbmV3IFNuYXAubWF0cml4KCk7CisgICAgICAgICAgICAg IHpvb21Jbk1hdHJpeC5zY2FsZShjdXJyX3pvb21fZmFjdG9yLCBjdXJyX3pv b21fZmFjdG9yKTsKKworICAgICAgICAgICAgICAkc3ZnLmZpbmQoJ2cnKS5m aXJzdCgpLmF0dHIoe3RyYW5zZm9ybTogem9vbUluTWF0cml4fSk7CisgICAg ICAgICAgICAgICRzdmcuYXR0cih7J3dpZHRoJzogdyAqIGN1cnJfem9vbV9m YWN0b3IsICdoZWlnaHQnOiBoICogY3Vycl96b29tX2ZhY3Rvcn0pOworICAg ICAgICAgICAgICBwbGFuRGl2LmRhdGEoJ3pvb20tZmFjdG9yJywgY3Vycl96 b29tX2ZhY3Rvcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHpv b21JbkJ0bi5vbignY2xpY2snLCBmdW5jdGlvbihlKXsKKyAgICAgICAgICAg ICAgY3Vycl96b29tX2ZhY3RvciA9ICgoY3Vycl96b29tX2ZhY3RvciArIFpP T01fUkFUSU8pID4gTUFYX1pPT01fRkFDVE9SKSA/IE1BWF9aT09NX0ZBQ1RP UiA6IChjdXJyX3pvb21fZmFjdG9yICsgWk9PTV9SQVRJTyk7CisgICAgICAg ICAgICAgIHZhciB6b29tSW5NYXRyaXggPSBuZXcgU25hcC5tYXRyaXgoKTsK KyAgICAgICAgICAgICAgem9vbUluTWF0cml4LnNjYWxlKGN1cnJfem9vbV9m YWN0b3IsIGN1cnJfem9vbV9mYWN0b3IpOworCisgICAgICAgICAgICAgICRz dmcuZmluZCgnZycpLmZpcnN0KCkuYXR0cih7dHJhbnNmb3JtOiB6b29tSW5N YXRyaXh9KTsKKyAgICAgICAgICAgICAgJHN2Zy5hdHRyKHsnd2lkdGgnOiB3 ICogY3Vycl96b29tX2ZhY3RvciwgJ2hlaWdodCc6IGggKiBjdXJyX3pvb21f ZmFjdG9yfSk7CisgICAgICAgICAgICAgIHBsYW5EaXYuZGF0YSgnem9vbS1m YWN0b3InLCBjdXJyX3pvb21fZmFjdG9yKTsKKyAgICAgICAgICAgICAgem9v bUluQnRuLmJsdXIoKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAg ICB6b29tT3V0QnRuLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKKyAgICAg ICAgICAgICAgY3Vycl96b29tX2ZhY3RvciA9ICgoY3Vycl96b29tX2ZhY3Rv ciAtIFpPT01fUkFUSU8pIDwgTUlOX1pPT01fRkFDVE9SKSA/IE1JTl9aT09N X0ZBQ1RPUiA6IChjdXJyX3pvb21fZmFjdG9yIC0gWk9PTV9SQVRJTyk7Cisg ICAgICAgICAgICAgIHZhciB6b29tSW5NYXRyaXggPSBuZXcgU25hcC5tYXRy aXgoKTsKKyAgICAgICAgICAgICAgem9vbUluTWF0cml4LnNjYWxlKGN1cnJf em9vbV9mYWN0b3IsIGN1cnJfem9vbV9mYWN0b3IpOworCisgICAgICAgICAg ICAgICRzdmcuZmluZCgnZycpLmZpcnN0KCkuYXR0cih7dHJhbnNmb3JtOiB6 b29tSW5NYXRyaXh9KTsKKyAgICAgICAgICAgICAgJHN2Zy5hdHRyKHsnd2lk dGgnOiB3ICogY3Vycl96b29tX2ZhY3RvciwgJ2hlaWdodCc6IGggKiBjdXJy X3pvb21fZmFjdG9yfSk7CisgICAgICAgICAgICAgIHBsYW5EaXYuZGF0YSgn em9vbS1mYWN0b3InLCBjdXJyX3pvb21fZmFjdG9yKTsKKyAgICAgICAgICAg ICAgem9vbU91dEJ0bi5ibHVyKCk7CisgICAgICAgICAgICB9KTsKKworICAg ICAgICAgICAgem9vbVRvTm9ybWFsLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUp IHsKKyAgICAgICAgICAgICAgY3Vycl96b29tX2ZhY3RvciA9IElOSVRfWk9P TV9GQUNUT1I7CisgICAgICAgICAgICAgIHZhciB6b29tSW5NYXRyaXggPSBu ZXcgU25hcC5tYXRyaXgoKTsKKyAgICAgICAgICAgICAgem9vbUluTWF0cml4 LnNjYWxlKGN1cnJfem9vbV9mYWN0b3IsIGN1cnJfem9vbV9mYWN0b3IpOwor CisgICAgICAgICAgICAgICRzdmcuZmluZCgnZycpLmZpcnN0KCkuYXR0cih7 dHJhbnNmb3JtOiB6b29tSW5NYXRyaXh9KTsKKyAgICAgICAgICAgICAgJHN2 Zy5hdHRyKHsnd2lkdGgnOiB3ICogY3Vycl96b29tX2ZhY3RvciwgJ2hlaWdo dCc6IGggKiBjdXJyX3pvb21fZmFjdG9yfSk7CisgICAgICAgICAgICAgIHBs YW5EaXYuZGF0YSgnem9vbS1mYWN0b3InLCBjdXJyX3pvb21fZmFjdG9yKTsK KyAgICAgICAgICAgICAgem9vbVRvTm9ybWFsLmJsdXIoKTsKKyAgICAgICAg ICAgIH0pOworICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfSk7CisK KyAgICByZXR1cm4gcGdFeHBsYWluOworfSk7CmRpZmYgLS1naXQgYS93ZWIv cGdhZG1pbi90b29scy9zcWxlZGl0b3Ivc3RhdGljL2Nzcy9zcWxlZGl0b3Iu Y3NzIGIvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3N0YXRpYy9jc3Mv c3FsZWRpdG9yLmNzcwppbmRleCA0ZTA4YmFmLi5jNzQ4OTAwIDEwMDY0NAot LS0gYS93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3Ivc3RhdGljL2Nzcy9z cWxlZGl0b3IuY3NzCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRv ci9zdGF0aWMvY3NzL3NxbGVkaXRvci5jc3MKQEAgLTIxNywzICsyMTcsOSBA QAogICBiYWNrZ3JvdW5kOiAjNUI5Q0VGOwogICBjb2xvcjogd2hpdGU7CiB9 CisKKy5zcWwtZWRpdG9yLWV4cGxhaW4geworICBoZWlnaHQ6IDEwMCU7Cisg IHdpZHRoOiAxMDAlOworICBvdmVyZmxvdzogYXV0bzsKK30KZGlmZiAtLWdp dCBhL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci90ZW1wbGF0ZXMvc3Fs ZWRpdG9yL2pzL3NxbGVkaXRvci5qcyBiL3dlYi9wZ2FkbWluL3Rvb2xzL3Nx bGVkaXRvci90ZW1wbGF0ZXMvc3FsZWRpdG9yL2pzL3NxbGVkaXRvci5qcwpp bmRleCAzZTliYzVjLi42ZDc3N2Q1IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1p bi90b29scy9zcWxlZGl0b3IvdGVtcGxhdGVzL3NxbGVkaXRvci9qcy9zcWxl ZGl0b3IuanMKKysrIGIvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3Rl bXBsYXRlcy9zcWxlZGl0b3IvanMvc3FsZWRpdG9yLmpzCkBAIC0xLDkgKzEs OSBAQAogZGVmaW5lKAotICBbJ2pxdWVyeScsICd1bmRlcnNjb3JlJywgJ2Fs ZXJ0aWZ5JywgJ3BnYWRtaW4nLCAnYmFja2JvbmUnLCAnYmFja2dyaWQnLCAn Y29kZW1pcnJvcicsCi0gICAnY29kZW1pcnJvci9tb2RlL3NxbC9zcWwnLCAn Y29kZW1pcnJvci9hZGRvbi9zZWxlY3Rpb24vbWFyay1zZWxlY3Rpb24nLCAn Y29kZW1pcnJvci9hZGRvbi9zZWxlY3Rpb24vYWN0aXZlLWxpbmUnLAotICAg J2JhY2tncmlkLnNlbGVjdC5hbGwnLCAnYmFja2JvbmUucGFnaW5hdG9yJywg J2JhY2tncmlkLnBhZ2luYXRvcicsICdiYWNrZ3JpZC5maWx0ZXInLAotICAg J2Jvb3RzdHJhcCcsICdwZ2FkbWluLmJyb3dzZXInLCAnd2Nkb2NrZXInXSwK LSAgZnVuY3Rpb24oJCwgXywgYWxlcnRpZnksIHBnQWRtaW4sIEJhY2tib25l LCBCYWNrZ3JpZCwgQ29kZU1pcnJvcikgeworICBbJ2pxdWVyeScsICd1bmRl cnNjb3JlJywgJ3VuZGVyc2NvcmUuc3RyaW5nJywgJ2FsZXJ0aWZ5JywgJ3Bn YWRtaW4nLCAncGdhZG1pbi5taXNjLmV4cGxhaW4nLAorICAgJ2JhY2tib25l JywgJ2JhY2tncmlkJywgJ2NvZGVtaXJyb3InLCAnY29kZW1pcnJvci9tb2Rl L3NxbC9zcWwnLCAnY29kZW1pcnJvci9hZGRvbi9zZWxlY3Rpb24vbWFyay1z ZWxlY3Rpb24nLAorICAgJ2NvZGVtaXJyb3IvYWRkb24vc2VsZWN0aW9uL2Fj dGl2ZS1saW5lJywgJ2JhY2tncmlkLnNlbGVjdC5hbGwnLCAnYmFja2JvbmUu cGFnaW5hdG9yJywgJ2JhY2tncmlkLnBhZ2luYXRvcicsCisgICAnYmFja2dy aWQuZmlsdGVyJywgJ2Jvb3RzdHJhcCcsICdwZ2FkbWluLmJyb3dzZXInLCAn d2Nkb2NrZXInXSwKKyAgZnVuY3Rpb24oJCwgXywgUywgYWxlcnRpZnksIHBn QWRtaW4sIHBnRXhwbGFpbiwgQmFja2JvbmUsIEJhY2tncmlkLCBDb2RlTWly cm9yKSB7CiAKICAgICAvLyBTb21lIHNjcmlwdHMgZG8gZXhwb3J0IHRoZWly IG9iamVjdCBpbiB0aGUgd2luZG93IG9ubHkuCiAgICAgLy8gR2VuZXJhbGx5 IHRoZSBvbmUsIHdoaWNoIGRvIG5vIGhhdmUgQU1EIHN1cHBvcnQuCkBAIC0x NjAsNiArMTYwLDEyIEBAIGRlZmluZSgKICAgICAgICAgImNsaWNrICNidG4t YXV0by1yb2xsYmFjayI6ICJvbl9hdXRvX3JvbGxiYWNrIiwKICAgICAgICAg ImNsaWNrICNidG4tY2xlYXItaGlzdG9yeSI6ICJvbl9jbGVhcl9oaXN0b3J5 IiwKICAgICAgICAgImNsaWNrIC5ub2Nsb3NlIjogJ2RvX25vdF9jbG9zZV9t ZW51JywKKyAgICAgICAgImNsaWNrICNidG4tZXhwbGFpbiI6ICJvbl9leHBs YWluIiwKKyAgICAgICAgImNsaWNrICNidG4tZXhwbGFpbi1hbmFseXplIjog Im9uX2V4cGxhaW5fYW5hbHl6ZSIsCisgICAgICAgICJjbGljayAjYnRuLWV4 cGxhaW4tdmVyYm9zZSI6ICJvbl9leHBsYWluX3ZlcmJvc2UiLAorICAgICAg ICAiY2xpY2sgI2J0bi1leHBsYWluLWNvc3RzIjogIm9uX2V4cGxhaW5fY29z dHMiLAorICAgICAgICAiY2xpY2sgI2J0bi1leHBsYWluLWJ1ZmZlcnMiOiAi b25fZXhwbGFpbl9idWZmZXJzIiwKKyAgICAgICAgImNsaWNrICNidG4tZXhw bGFpbi10aW1pbmciOiAib25fZXhwbGFpbl90aW1pbmciLAogICAgICAgICAi Y2hhbmdlIC5saW1pdCI6ICJvbl9saW1pdF9jaGFuZ2UiCiAgICAgICB9LAog CkBAIC0yMTgsMTAgKzIyNCw1MyBAQCBkZWZpbmUoCiAgICAgICAgICAgICAn PC9idXR0b24+JywKICAgICAgICAgICAgICc8dWwgY2xhc3M9ImRyb3Bkb3du LW1lbnUgZHJvcGRvd24tbWVudSI+JywKICAgICAgICAgICAgICAgJzxsaT4n LAorICAgICAgICAgICAgICAgICc8YSBpZD0iYnRuLWV4cGxhaW4iIGhyZWY9 IiMiPicsCisgICAgICAgICAgICAgICAgICAnPHNwYW4+e3sgXygnRXhwbGFp bicpIH19PC9zcGFuPicsCisgICAgICAgICAgICAgICAgJzwvYT4nLAorICAg ICAgICAgICAgICAnPC9saT4nLAorICAgICAgICAgICAgICAnPGxpPicsCisg ICAgICAgICAgICAgICAgJzxhIGlkPSJidG4tZXhwbGFpbi1hbmFseXplIiBo cmVmPSIjIj4nLAorICAgICAgICAgICAgICAgICAgICAnPHNwYW4+e3sgXygn RXhwbGFpbiBhbmFseXplJykgfX08L3NwYW4+JywKKyAgICAgICAgICAgICAg ICAnPC9hPicsCisgICAgICAgICAgICAgICc8L2xpPicsCisgICAgICAgICAg ICAgICc8bGkgY2xhc3M9ImRpdmlkZXIiPjwvbGk+JywKKyAgICAgICAgICAg ICAgJzxsaSBjbGFzcz0iZHJvcGRvd24tc3VibWVudSBkcm9wZG93bi1zdWJt ZW51Ij4nLAorICAgICAgICAgICAgICAgICc8YSBocmVmPSIjIj57eyBfKCdF eHBsYWluIE9wdGlvbnMnKSB9fTwvYT4nLAorICAgICAgICAgICAgICAgICc8 dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPicsCisgICAgICAgICAgICAgICAg ICAnPGxpPicsCisgICAgICAgICAgICAgICAgICAgICc8YSBpZD0iYnRuLWV4 cGxhaW4tdmVyYm9zZSIgaHJlZj0iIyIgY2xhc3M9Im5vY2xvc2UiPicsCisg ICAgICAgICAgICAgICAgICAgICAgJzxpIGNsYXNzPSJleHBsYWluLXZlcmJv c2UgZmEgZmEtY2hlY2sgdmlzaWJpbGl0eS1oaWRkZW4iIGFyaWEtaGlkZGVu PSJ0cnVlIj48L2k+JywKKyAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4+ IHt7IF8oJ1ZlcmJvc2UnKSB9fSA8L3NwYW4+JywKKyAgICAgICAgICAgICAg ICAgICAgJzwvYT4nLAorICAgICAgICAgICAgICAgICAgJzwvbGk+JywKKyAg ICAgICAgICAgICAgICAgICc8bGk+JywKKyAgICAgICAgICAgICAgICAgICAg JzxhIGlkPSJidG4tZXhwbGFpbi1jb3N0cyIgaHJlZj0iIyIgY2xhc3M9Im5v Y2xvc2UiPicsCisgICAgICAgICAgICAgICAgICAgICAgJzxpIGNsYXNzPSJl eHBsYWluLWNvc3RzIGZhIGZhLWNoZWNrIHZpc2liaWxpdHktaGlkZGVuIiBh cmlhLWhpZGRlbj0idHJ1ZSI+PC9pPicsCisgICAgICAgICAgICAgICAgICAg ICAgJzxzcGFuPiB7eyBfKCdDb3N0cycpIH19IDwvc3Bhbj4nLAorICAgICAg ICAgICAgICAgICAgICAnPC9hPicsCisgICAgICAgICAgICAgICAgICAnPC9s aT4nLAorICAgICAgICAgICAgICAgICAgJzxsaT4nLAorICAgICAgICAgICAg ICAgICAgICAnPGEgaWQ9ImJ0bi1leHBsYWluLWJ1ZmZlcnMiIGhyZWY9IiMi IGNsYXNzPSJub2Nsb3NlIj4nLAorICAgICAgICAgICAgICAgICAgICAgICc8 aSBjbGFzcz0iZXhwbGFpbi1idWZmZXJzIGZhIGZhLWNoZWNrIHZpc2liaWxp dHktaGlkZGVuIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9pPicsCisgICAgICAg ICAgICAgICAgICAgICAgJzxzcGFuPiB7eyBfKCdCdWZmZXJzJykgfX0gPC9z cGFuPicsCisgICAgICAgICAgICAgICAgICAgICc8L2E+JywKKyAgICAgICAg ICAgICAgICAgICc8L2xpPicsCisgICAgICAgICAgICAgICAgICAnPGxpPics CisgICAgICAgICAgICAgICAgICAgICc8YSBpZD0iYnRuLWV4cGxhaW4tdGlt aW5nIiBocmVmPSIjIiBjbGFzcz0ibm9jbG9zZSI+JywKKyAgICAgICAgICAg ICAgICAgICAgICAnPGkgY2xhc3M9ImV4cGxhaW4tdGltaW5nIGZhIGZhLWNo ZWNrIHZpc2liaWxpdHktaGlkZGVuIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9p PicsCisgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuPiB7eyBfKCdUaW1p bmcnKSB9fSA8L3NwYW4+JywKKyAgICAgICAgICAgICAgICAgICAgJzwvYT4n LAorICAgICAgICAgICAgICAgICAgJzwvbGk+JywKKyAgICAgICAgICAgICAg ICAnPC91bD4nLAorICAgICAgICAgICAgICAnPC9saT4nLAorICAgICAgICAg ICAgICAnPGxpIGNsYXNzPSJkaXZpZGVyIj48L2xpPicsCisgICAgICAgICAg ICAgICc8bGk+JywKICAgICAgICAgICAgICAgICAnPGEgaWQ9ImJ0bi1hdXRv LWNvbW1pdCIgaHJlZj0iIyIgY2xhc3M9Im5vY2xvc2UiPicsCiAgICAgICAg ICAgICAgICAgICAgICc8aSBjbGFzcz0iYXV0by1jb21taXQgZmEgZmEtY2hl Y2siIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+JywKICAgICAgICAgICAgICAg ICAgICAgJzxzcGFuPiB7eyBfKCdBdXRvIENvbW1pdCcpIH19IDwvc3Bhbj4n LAogICAgICAgICAgICAgICAgICc8L2E+JywKKyAgICAgICAgICAgICAgJzwv bGk+JywKKyAgICAgICAgICAgICAgJzxsaT4nLAogICAgICAgICAgICAgICAg ICc8YSBpZD0iYnRuLWF1dG8tcm9sbGJhY2siIGhyZWY9IiMiIGNsYXNzPSJu b2Nsb3NlIj4nLAogICAgICAgICAgICAgICAgICAgICAnPGkgY2xhc3M9ImF1 dG8tcm9sbGJhY2sgZmEgZmEtY2hlY2sgdmlzaWJpbGl0eS1oaWRkZW4iIGFy aWEtaGlkZGVuPSJ0cnVlIj48L2k+JywKICAgICAgICAgICAgICAgICAgICAg JzxzcGFuPiB7eyBfKCdBdXRvIFJvbGxiYWNrJykgfX0gPC9zcGFuPicsCkBA IC0zNzgsNyArNDI3LDcgQEAgZGVmaW5lKAogICAgICAgICAgIGhlaWdodDon MTAwJScsCiAgICAgICAgICAgaXNDbG9zZWFibGU6IGZhbHNlLAogICAgICAg ICAgIGlzUHJpdmF0ZTogdHJ1ZSwKLSAgICAgICAgICBjb250ZW50OiAnPGRp diBjbGFzcz0ic3FsLWVkaXRvci1leHBsaWFuIj48L2Rpdj4nCisgICAgICAg ICAgY29udGVudDogJzxkaXYgY2xhc3M9InNxbC1lZGl0b3ItZXhwbGFpbiI+ PC9kaXY+JwogICAgICAgICB9KQogCiAgICAgICAgIHZhciBtZXNzYWdlcyA9 IG5ldyBwZ0FkbWluLkJyb3dzZXIuUGFuZWwoewpAQCAtNzcwLDYgKzgxOSw3 OSBAQCBkZWZpbmUoCiAgICAgICAgICAgICBzZWxmLmhhbmRsZXIKICAgICAg ICAgKTsKICAgICAgIH0sCisKKyAgICAgIC8vIENhbGxiYWNrIGZ1bmN0aW9u IGZvciBleHBsYWluIGJ1dHRvbiBjbGljay4KKyAgICAgIG9uX2V4cGxhaW46 IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAg ICAgICAgLy8gVHJpZ2dlciB0aGUgZXhwbGFpbiBzaWduYWwgdG8gdGhlIFNx bEVkaXRvckNvbnRyb2xsZXIgY2xhc3MKKyAgICAgICAgc2VsZi5oYW5kbGVy LnRyaWdnZXIoCisgICAgICAgICAgICAncGdhZG1pbi1zcWxlZGl0b3I6YnV0 dG9uOmV4cGxhaW4nLAorICAgICAgICAgICAgc2VsZiwKKyAgICAgICAgICAg IHNlbGYuaGFuZGxlcgorICAgICAgICApOworICAgICAgfSwKKworICAgICAg Ly8gQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGV4cGxhaW4gYW5hbHl6ZSBidXR0 b24gY2xpY2suCisgICAgICBvbl9leHBsYWluX2FuYWx5emU6IGZ1bmN0aW9u KCkgeworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICAgICAgLy8g VHJpZ2dlciB0aGUgZXhwbGFpbiBhbmFseXplIHNpZ25hbCB0byB0aGUgU3Fs RWRpdG9yQ29udHJvbGxlciBjbGFzcworICAgICAgICBzZWxmLmhhbmRsZXIu dHJpZ2dlcigKKyAgICAgICAgICAgICdwZ2FkbWluLXNxbGVkaXRvcjpidXR0 b246ZXhwbGFpbi1hbmFseXplJywKKyAgICAgICAgICAgIHNlbGYsCisgICAg ICAgICAgICBzZWxmLmhhbmRsZXIKKyAgICAgICAgKTsKKyAgICAgIH0sCisK KyAgICAgIC8vIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBleHBsYWluIG9wdGlv biAidmVyYm9zZSIgYnV0dG9uIGNsaWNrCisgICAgICBvbl9leHBsYWluX3Zl cmJvc2U6IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7 CisKKyAgICAgICAgLy8gVHJpZ2dlciB0aGUgZXhwbGFpbiAidmVyYm9zZSIg c2lnbmFsIHRvIHRoZSBTcWxFZGl0b3JDb250cm9sbGVyIGNsYXNzCisgICAg ICAgIHNlbGYuaGFuZGxlci50cmlnZ2VyKAorICAgICAgICAgICAgJ3BnYWRt aW4tc3FsZWRpdG9yOmJ1dHRvbjpleHBsYWluLXZlcmJvc2UnLAorICAgICAg ICAgICAgc2VsZiwKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlcgorICAgICAg ICApOworICAgICAgfSwKKworICAgICAgLy8gQ2FsbGJhY2sgZnVuY3Rpb24g Zm9yIGV4cGxhaW4gb3B0aW9uICJjb3N0cyIgYnV0dG9uIGNsaWNrCisgICAg ICBvbl9leHBsYWluX2Nvc3RzOiBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFy IHNlbGYgPSB0aGlzOworCisgICAgICAgIC8vIFRyaWdnZXIgdGhlIGV4cGxh aW4gImNvc3RzIiBzaWduYWwgdG8gdGhlIFNxbEVkaXRvckNvbnRyb2xsZXIg Y2xhc3MKKyAgICAgICAgc2VsZi5oYW5kbGVyLnRyaWdnZXIoCisgICAgICAg ICAgICAncGdhZG1pbi1zcWxlZGl0b3I6YnV0dG9uOmV4cGxhaW4tY29zdHMn LAorICAgICAgICAgICAgc2VsZiwKKyAgICAgICAgICAgIHNlbGYuaGFuZGxl cgorICAgICAgICApOworICAgICAgfSwKKworICAgICAgLy8gQ2FsbGJhY2sg ZnVuY3Rpb24gZm9yIGV4cGxhaW4gb3B0aW9uICJidWZmZXJzIiBidXR0b24g Y2xpY2sKKyAgICAgIG9uX2V4cGxhaW5fYnVmZmVyczogZnVuY3Rpb24oKSB7 CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKworICAgICAgICAvLyBUcmln Z2VyIHRoZSBleHBsYWluICJidWZmZXJzIiBzaWduYWwgdG8gdGhlIFNxbEVk aXRvckNvbnRyb2xsZXIgY2xhc3MKKyAgICAgICAgc2VsZi5oYW5kbGVyLnRy aWdnZXIoCisgICAgICAgICAgICAncGdhZG1pbi1zcWxlZGl0b3I6YnV0dG9u OmV4cGxhaW4tYnVmZmVycycsCisgICAgICAgICAgICBzZWxmLAorICAgICAg ICAgICAgc2VsZi5oYW5kbGVyCisgICAgICAgICk7CisgICAgICB9LAorCisg ICAgICAvLyBDYWxsYmFjayBmdW5jdGlvbiBmb3IgZXhwbGFpbiBvcHRpb24g InRpbWluZyIgYnV0dG9uIGNsaWNrCisgICAgICBvbl9leHBsYWluX3RpbWlu ZzogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKwor ICAgICAgICAvLyBUcmlnZ2VyIHRoZSBleHBsYWluICJ0aW1pbmciIHNpZ25h bCB0byB0aGUgU3FsRWRpdG9yQ29udHJvbGxlciBjbGFzcworICAgICAgICBz ZWxmLmhhbmRsZXIudHJpZ2dlcigKKyAgICAgICAgICAgICdwZ2FkbWluLXNx bGVkaXRvcjpidXR0b246ZXhwbGFpbi10aW1pbmcnLAorICAgICAgICAgICAg c2VsZiwKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlcgorICAgICAgICApOwor ICAgICAgfSwKKwogICAgICAgZG9fbm90X2Nsb3NlX21lbnU6IGZ1bmN0aW9u KGV2KSB7CiAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAg fQpAQCAtODM0LDYgKzk1NiwxMiBAQCBkZWZpbmUoCiAgICAgICAgICAgc2Vs Zi5vbigncGdhZG1pbi1zcWxlZGl0b3I6YnV0dG9uOmRvd25sb2FkJywgc2Vs Zi5fZG93bmxvYWQsIHNlbGYpOwogICAgICAgICAgIHNlbGYub24oJ3BnYWRt aW4tc3FsZWRpdG9yOmJ1dHRvbjphdXRvX3JvbGxiYWNrJywgc2VsZi5fYXV0 b19yb2xsYmFjaywgc2VsZik7CiAgICAgICAgICAgc2VsZi5vbigncGdhZG1p bi1zcWxlZGl0b3I6YnV0dG9uOmF1dG9fY29tbWl0Jywgc2VsZi5fYXV0b19j b21taXQsIHNlbGYpOworICAgICAgICAgIHNlbGYub24oJ3BnYWRtaW4tc3Fs ZWRpdG9yOmJ1dHRvbjpleHBsYWluJywgc2VsZi5fZXhwbGFpbiwgc2VsZik7 CisgICAgICAgICAgc2VsZi5vbigncGdhZG1pbi1zcWxlZGl0b3I6YnV0dG9u OmV4cGxhaW4tYW5hbHl6ZScsIHNlbGYuX2V4cGxhaW5fYW5hbHl6ZSwgc2Vs Zik7CisgICAgICAgICAgc2VsZi5vbigncGdhZG1pbi1zcWxlZGl0b3I6YnV0 dG9uOmV4cGxhaW4tdmVyYm9zZScsIHNlbGYuX2V4cGxhaW5fdmVyYm9zZSwg c2VsZik7CisgICAgICAgICAgc2VsZi5vbigncGdhZG1pbi1zcWxlZGl0b3I6 YnV0dG9uOmV4cGxhaW4tY29zdHMnLCBzZWxmLl9leHBsYWluX2Nvc3RzLCBz ZWxmKTsKKyAgICAgICAgICBzZWxmLm9uKCdwZ2FkbWluLXNxbGVkaXRvcjpi dXR0b246ZXhwbGFpbi1idWZmZXJzJywgc2VsZi5fZXhwbGFpbl9idWZmZXJz LCBzZWxmKTsKKyAgICAgICAgICBzZWxmLm9uKCdwZ2FkbWluLXNxbGVkaXRv cjpidXR0b246ZXhwbGFpbi10aW1pbmcnLCBzZWxmLl9leHBsYWluX3RpbWlu Zywgc2VsZik7CiAKICAgICAgICAgICBpZiAoc2VsZi5pc19xdWVyeV90b29s KSB7CiAgICAgICAgICAgICBzZWxmLmdyaWRWaWV3LnF1ZXJ5X3Rvb2xfb2Jq LnJlZnJlc2goKTsKQEAgLTEwODMsMTQgKzEyMTEsMjggQEAgZGVmaW5lKAog CiAgICAgICAgICAgLy8gU2hvdyBtZXNzYWdlIGluIG1lc3NhZ2UgYW5kIGhp c3RvcnkgdGFiIGluIGNhc2Ugb2YgcXVlcnkgdG9vbAogICAgICAgICAgIHNl bGYudG90YWxfdGltZSA9IHNlbGYuZ2V0X3F1ZXJ5X3J1bl90aW1lKHNlbGYu cXVlcnlfc3RhcnRfdGltZSwgc2VsZi5xdWVyeV9lbmRfdGltZSk7Ci0gICAg ICAgICAgc2VsZi51cGRhdGVfbXNnX2hpc3RvcnkodHJ1ZSwgIiIsIGZhbHNl KTsKKyAgICAgICAgICAvL3NlbGYudXBkYXRlX21zZ19oaXN0b3J5KHRydWUs ICIiLCBmYWxzZSk7CiAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSAnVG90YWwg cXVlcnkgcnVudGltZTogJyArIHNlbGYudG90YWxfdGltZSArICdcbicgKyBz ZWxmLnJvd3NfYWZmZWN0ZWQgKyAnIHJvd3MgcmV0cmlldmVkLic7CiAgICAg ICAgICAgJCgnLnNxbC1lZGl0b3ItbWVzc2FnZScpLnRleHQobWVzc2FnZSk7 CiAKLSAgICAgICAgICAvLyBBZGQgdGhlIGRhdGEgdG8gdGhlIGNvbGxlY3Rp b24gYW5kIHJlbmRlciB0aGUgZ3JpZC4KLSAgICAgICAgICBzZWxmLmNvbGxl Y3Rpb24uYWRkKGRhdGEucmVzdWx0LCB7cGFyc2U6IHRydWV9KTsKLSAgICAg ICAgICBzZWxmLmdyaWRWaWV3LnJlbmRlcl9ncmlkKHNlbGYuY29sbGVjdGlv biwgc2VsZi5jb2x1bW5zKTsKLSAgICAgICAgICBzZWxmLmdyaWRWaWV3LmRh dGFfb3V0cHV0X3BhbmVsLmZvY3VzKCk7CisgICAgICAgICAgLyogQWRkIHRo ZSBkYXRhIHRvIHRoZSBjb2xsZWN0aW9uIGFuZCByZW5kZXIgdGhlIGdyaWQu CisgICAgICAgICAgICogSW4gY2FzZSBvZiBFeHBsYWluIGRyYXcgdGhlIGdy YXBoIG9uIGV4cGxhaW4gcGFuZWwKKyAgICAgICAgICAgKiBhbmQgYWRkIGpz b24gZm9ybWF0dGVkIGRhdGEgdG8gY29sbGVjdGlvbiBhbmQgcmVuZGVyLgor ICAgICAgICAgICAqLworICAgICAgICAgIHZhciBleHBsYWluX2RhdGFfYXJy YXkgPSBbXTsKKyAgICAgICAgICBpZignUVVFUlkgUExBTicgaW4gZGF0YS5y ZXN1bHRbMF0gJiYgXy5pc09iamVjdChkYXRhLnJlc3VsdFswXVsnUVVFUlkg UExBTiddKSkgeworICAgICAgICAgICAgICB2YXIgZXhwbGFpbl9kYXRhID0g eydRVUVSWSBQTEFOJyA6IEpTT04uc3RyaW5naWZ5KGRhdGEucmVzdWx0WzBd WydRVUVSWSBQTEFOJ10sIG51bGwsIDIpfTsKKyAgICAgICAgICAgICAgZXhw bGFpbl9kYXRhX2FycmF5LnB1c2goZXhwbGFpbl9kYXRhKTsKKyAgICAgICAg ICAgICAgc2VsZi5ncmlkVmlldy5leHBsYWluX3BhbmVsLmZvY3VzKCk7Cisg ICAgICAgICAgICAgIHBnRXhwbGFpbi5EcmF3SlNPTlBsYW4oJCgnLnNxbC1l ZGl0b3ItZXhwbGFpbicpLCBkYXRhLnJlc3VsdFswXVsnUVVFUlkgUExBTidd KTsKKyAgICAgICAgICAgICAgc2VsZi5jb2xsZWN0aW9uLmFkZChleHBsYWlu X2RhdGFfYXJyYXksIHtwYXJzZTogdHJ1ZX0pOworICAgICAgICAgICAgICBz ZWxmLmdyaWRWaWV3LnJlbmRlcl9ncmlkKHNlbGYuY29sbGVjdGlvbiwgc2Vs Zi5jb2x1bW5zKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7Cisg ICAgICAgICAgICBzZWxmLmNvbGxlY3Rpb24uYWRkKGRhdGEucmVzdWx0LCB7 cGFyc2U6IHRydWV9KTsKKyAgICAgICAgICAgIHNlbGYuZ3JpZFZpZXcucmVu ZGVyX2dyaWQoc2VsZi5jb2xsZWN0aW9uLCBzZWxmLmNvbHVtbnMpOworICAg ICAgICAgICAgc2VsZi5ncmlkVmlldy5kYXRhX291dHB1dF9wYW5lbC5mb2N1 cygpOworICAgICAgICAgIH0KIAogICAgICAgICAgIC8vIEhpZGUgdGhlIGxv YWRpbmcgaWNvbgogICAgICAgICAgIHNlbGYudHJpZ2dlcigncGdhZG1pbi1z cWxlZGl0b3I6bG9hZGluZy1pY29uOmhpZGUnKTsKQEAgLTE4MTYsMTYgKzE5 NTgsMTEgQEAgZGVmaW5lKAogCiAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24g d2lsbCBmZXRjaCB0aGUgc3FsIHF1ZXJ5IGZyb20gdGhlIHRleHQgYm94CiAg ICAgICAgIC8vIGFuZCBleGVjdXRlIHRoZSBxdWVyeS4KLSAgICAgICAgX2V4 ZWN1dGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgX2V4ZWN1dGU6IGZ1bmN0 aW9uIChleHBsYWluX3ByZWZpeCkgewogICAgICAgICAgIHZhciBzZWxmID0g dGhpcywKICAgICAgICAgICAgICAgc3FsID0gJycsCiAgICAgICAgICAgICAg IGhpc3RvcnlfbXNnID0gJyc7CiAKLSAgICAgICAgICBzZWxmLnRyaWdnZXIo Ci0gICAgICAgICAgICAncGdhZG1pbi1zcWxlZGl0b3I6bG9hZGluZy1pY29u OnNob3cnLAotICAgICAgICAgICAgJ3t7IF8oJ0luaXRpYWxpemluZyB0aGUg cXVlcnkgZXhlY3V0aW9uIScpIH19JwotICAgICAgICAgICk7Ci0KICAgICAg ICAgICAvKiBJZiBjb2RlIGlzIHNlbGVjdGVkIGluIHRoZSBjb2RlIG1pcnJv ciB0aGVuIGV4ZWN1dGUKICAgICAgICAgICAgKiB0aGUgc2VsZWN0ZWQgcGFy dCBlbHNlIGV4ZWN1dGUgdGhlIGNvbXBsZXRlIGNvZGUuCiAgICAgICAgICAg ICovCkBAIC0xODM1LDYgKzE5NzIsMTcgQEAgZGVmaW5lKAogICAgICAgICAg IGVsc2UKICAgICAgICAgICAgIHNxbCA9IHNlbGYuZ3JpZFZpZXcucXVlcnlf dG9vbF9vYmouZ2V0VmFsdWUoKTsKIAorICAgICAgICAgIC8vIElmIGl0IGlz IGFuIGVtcHR5IHF1ZXJ5LCBkbyBub3RoaW5nLgorICAgICAgICAgIGlmIChz cWwubGVuZ3RoIDw9IDApIHJldHVybjsKKworICAgICAgICAgIHNlbGYudHJp Z2dlcigKKyAgICAgICAgICAgICdwZ2FkbWluLXNxbGVkaXRvcjpsb2FkaW5n LWljb246c2hvdycsCisgICAgICAgICAgICAne3sgXygnSW5pdGlhbGl6aW5n IHRoZSBxdWVyeSBleGVjdXRpb24hJykgfX0nCisgICAgICAgICAgKTsKKwor ICAgICAgICAgIGlmIChleHBsYWluX3ByZWZpeCAhPSB1bmRlZmluZWQpCisg ICAgICAgICAgICBzcWwgPSBleHBsYWluX3ByZWZpeCArICcgJyArIHNxbDsK KwogICAgICAgICAgIHNlbGYucXVlcnlfc3RhcnRfdGltZSA9IG5ldyBEYXRl KCk7CiAgICAgICAgICAgc2VsZi5xdWVyeSA9IHNxbDsKICAgICAgICAgICBz ZWxmLnJvd3NfYWZmZWN0ZWQgPSAwOwpAQCAtMjE1Myw2ICsyMzAxLDY2IEBA IGRlZmluZSgKICAgICAgICAgICAgICAgYWxlcnRpZnkuYWxlcnQoJ0F1dG8g Q29tbWl0IEVycm9yJywgbXNnKTsKICAgICAgICAgICAgIH0KICAgICAgICAg ICB9KTsKKyAgICAgICAgfSwKKworICAgICAgICAvLyBUaGlzIGZ1bmN0aW9u IHdpbGwKKyAgICAgICAgX2V4cGxhaW46IGZ1bmN0aW9uKCkgeworICAgICAg ICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgICB2YXIgdmVyYm9zZSA9 ICQoJy5leHBsYWluLXZlcmJvc2UnKS5oYXNDbGFzcygndmlzaWJpbGl0eS1o aWRkZW4nKSA/ICdPRkYnIDogJ09OJzsKKyAgICAgICAgICB2YXIgY29zdHMg PSAkKCcuZXhwbGFpbi1jb3N0cycpLmhhc0NsYXNzKCd2aXNpYmlsaXR5LWhp ZGRlbicpID8gJ09GRicgOiAnT04nOworCisgICAgICAgICAgLy8gTm8gbmVl ZCB0byBjaGVjayBmb3IgYnVmZmVycyBhbmQgdGltaW5nIG9wdGlvbiB2YWx1 ZSBpbiBleHBsYWluCisgICAgICAgICAgdmFyIGV4cGxhaW5fcXVlcnkgPSAn RVhQTEFJTiAoRk9STUFUIEpTT04sIEFOQUxZWkUgT0ZGLCBWRVJCT1NFICVz LCBDT1NUUyAlcywgQlVGRkVSUyBPRkYsIFRJTUlORyBPRkYpICc7CisgICAg ICAgICAgZXhwbGFpbl9xdWVyeSA9IFMoZXhwbGFpbl9xdWVyeSkuc3ByaW50 Zih2ZXJib3NlLCBjb3N0cykudmFsdWUoKTsKKyAgICAgICAgICBzZWxmLl9l eGVjdXRlKGV4cGxhaW5fcXVlcnkpOworICAgICAgICB9LAorCisgICAgICAg IC8vIFRoaXMgZnVuY3Rpb24gd2lsbAorICAgICAgICBfZXhwbGFpbl9hbmFs eXplOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7 dmFyIHZlcmJvc2UgPSAkKCcuZXhwbGFpbi12ZXJib3NlJykuaGFzQ2xhc3Mo J3Zpc2liaWxpdHktaGlkZGVuJykgPyAnT0ZGJyA6ICdPTic7CisgICAgICAg ICAgdmFyIGNvc3RzID0gJCgnLmV4cGxhaW4tY29zdHMnKS5oYXNDbGFzcygn dmlzaWJpbGl0eS1oaWRkZW4nKSA/ICdPRkYnIDogJ09OJzsKKyAgICAgICAg ICB2YXIgYnVmZmVycyA9ICQoJy5leHBsYWluLWJ1ZmZlcnMnKS5oYXNDbGFz cygndmlzaWJpbGl0eS1oaWRkZW4nKSA/ICdPRkYnIDogJ09OJzsKKyAgICAg ICAgICB2YXIgdGltaW5nID0gJCgnLmV4cGxhaW4tdGltaW5nJykuaGFzQ2xh c3MoJ3Zpc2liaWxpdHktaGlkZGVuJykgPyAnT0ZGJyA6ICdPTic7CisKKyAg ICAgICAgICB2YXIgZXhwbGFpbl9xdWVyeSA9ICdFeHBsYWluIChGT1JNQVQg SlNPTiwgQU5BTFlaRSBPTiwgVkVSQk9TRSAlcywgQ09TVFMgJXMsIEJVRkZF UlMgJXMsIFRJTUlORyAlcykgJzsKKyAgICAgICAgICBleHBsYWluX3F1ZXJ5 ID0gUyhleHBsYWluX3F1ZXJ5KS5zcHJpbnRmKHZlcmJvc2UsIGNvc3RzLCBi dWZmZXJzLCB0aW1pbmcpLnZhbHVlKCk7CisgICAgICAgICAgc2VsZi5fZXhl Y3V0ZShleHBsYWluX3F1ZXJ5KTsKKyAgICAgICAgfSwKKworICAgICAgICAv LyBUaGlzIGZ1bmN0aW9uIHdpbGwgdG9nZ2xlICJ2ZXJib3NlIiBvcHRpb24g aW4gZXhwbGFpbgorICAgICAgICBfZXhwbGFpbl92ZXJib3NlOiBmdW5jdGlv bigpIHsKKyAgICAgICAgICBpZiAoJCgnLmV4cGxhaW4tdmVyYm9zZScpLmhh c0NsYXNzKCd2aXNpYmlsaXR5LWhpZGRlbicpID09PSB0cnVlKQorICAgICAg ICAgICAgJCgnLmV4cGxhaW4tdmVyYm9zZScpLnJlbW92ZUNsYXNzKCd2aXNp YmlsaXR5LWhpZGRlbicpOworICAgICAgICAgIGVsc2UgeworICAgICAgICAg ICAgJCgnLmV4cGxhaW4tdmVyYm9zZScpLmFkZENsYXNzKCd2aXNpYmlsaXR5 LWhpZGRlbicpOworICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAg ICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgdG9nZ2xlICJjb3N0cyIgb3B0aW9u IGluIGV4cGxhaW4KKyAgICAgICAgX2V4cGxhaW5fY29zdHM6IGZ1bmN0aW9u KCkgeworICAgICAgICAgIGlmICgkKCcuZXhwbGFpbi1jb3N0cycpLmhhc0Ns YXNzKCd2aXNpYmlsaXR5LWhpZGRlbicpID09PSB0cnVlKQorICAgICAgICAg ICAgJCgnLmV4cGxhaW4tY29zdHMnKS5yZW1vdmVDbGFzcygndmlzaWJpbGl0 eS1oaWRkZW4nKTsKKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICQo Jy5leHBsYWluLWNvc3RzJykuYWRkQ2xhc3MoJ3Zpc2liaWxpdHktaGlkZGVu Jyk7CisgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgIC8vIFRo aXMgZnVuY3Rpb24gd2lsbCB0b2dnbGUgImJ1ZmZlcnMiIG9wdGlvbiBpbiBl eHBsYWluCisgICAgICAgIF9leHBsYWluX2J1ZmZlcnM6IGZ1bmN0aW9uKCkg eworICAgICAgICAgIGlmICgkKCcuZXhwbGFpbi1idWZmZXJzJykuaGFzQ2xh c3MoJ3Zpc2liaWxpdHktaGlkZGVuJykgPT09IHRydWUpCisgICAgICAgICAg ICAkKCcuZXhwbGFpbi1idWZmZXJzJykucmVtb3ZlQ2xhc3MoJ3Zpc2liaWxp dHktaGlkZGVuJyk7CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAk KCcuZXhwbGFpbi1idWZmZXJzJykuYWRkQ2xhc3MoJ3Zpc2liaWxpdHktaGlk ZGVuJyk7CisgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgIC8v IFRoaXMgZnVuY3Rpb24gd2lsbCB0b2dnbGUgInRpbWluZyIgb3B0aW9uIGlu IGV4cGxhaW4KKyAgICAgICAgX2V4cGxhaW5fdGltaW5nOiBmdW5jdGlvbigp IHsKKyAgICAgICAgICBpZiAoJCgnLmV4cGxhaW4tdGltaW5nJykuaGFzQ2xh c3MoJ3Zpc2liaWxpdHktaGlkZGVuJykgPT09IHRydWUpCisgICAgICAgICAg ICAkKCcuZXhwbGFpbi10aW1pbmcnKS5yZW1vdmVDbGFzcygndmlzaWJpbGl0 eS1oaWRkZW4nKTsKKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICQo Jy5leHBsYWluLXRpbWluZycpLmFkZENsYXNzKCd2aXNpYmlsaXR5LWhpZGRl bicpOworICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQogICAgICk7 Cg== --001a11425abaf6b25005326cf28d Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgadmin-hackers --001a11425abaf6b25005326cf28d--