Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d3lfe-0005Mm-Mr for pgadmin-hackers@arkaria.postgresql.org; Thu, 27 Apr 2017 15:49:31 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1d3lfe-0001Ay-1e for pgadmin-hackers@arkaria.postgresql.org; Thu, 27 Apr 2017 15:49:30 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1d3lfS-0001AF-2b for pgadmin-hackers@postgresql.org; Thu, 27 Apr 2017 15:49:18 +0000 Received: from mail-ua0-x22d.google.com ([2607:f8b0:400c:c08::22d]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1d3lfK-0001oq-RM for pgadmin-hackers@postgresql.org; Thu, 27 Apr 2017 15:49:17 +0000 Received: by mail-ua0-x22d.google.com with SMTP id h2so22180202uaa.1 for ; Thu, 27 Apr 2017 08:49:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pivotal-io.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=lJr8UmJHgTskllI9s0Pc4JDiejWGyLDSnfe5BWPInDM=; b=GucYMwetly8hCydkjCkULR/z32/RvSU3kqGhj0cqziC9GqfWmSVNVUT2Mkhegy3j+n MXE3E/u/VSa/dlF9S6Olk84Mi+VDXMVXLAz8SpoIldNMcv/HjqpNDj4pDlYOcPRzKdJs y92t1cPRM/zoINWB3Cqc+DhEi91EVcARkm1vA5GrwLLOoLPqA90LBiP1vI//7dHLC7tA 1rR5W9RskT6NUV1NZq3UMezZ0/dW0pUXKWFerP4NPaQ3yZCw0RNUaqNpzL2c7E7+DhaV NO5GLagAjLc6Qy//fNl9pfp5RTvFmB5VMvflv7ULXYfGgPCHQ+CK8PkhcQdaLWbdBa9o hS/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=lJr8UmJHgTskllI9s0Pc4JDiejWGyLDSnfe5BWPInDM=; b=Kb36VJuEbWpQFh2UvfRZvg+xwF41ilIbpOI+ybsBFAS0B3QU7GbvzK9EAPWc67grvQ zmlrOpQXb6ldgAcLfBYB+R6VsPID7tWLLd0JPZ3+fsaMsCiSZg+CnChbWA2xEAa/81e0 JyHT80EaJjAWXfGL/aXG4xXkv0Ab0rr0R9n7BJ9xhIJNl9dVzJJjJpfKeOnXf8l3m/nh nVDyyh9rImMoSc4WlrUCbHkCDmB2uXKQbY+C6P8JHBOZQDTU2XrlZ68Uvf6psKLUGDAO uc+JP18wFeWHtvp+0eet/UG/rAMRRSYfGKOBrqia3ttVBkYbDE3I4zEZh4K7rDJFPyRZ OqoA== X-Gm-Message-State: AN3rC/4kDu6pQ67DINIMuKFYv5G7IsStywhQcvua7SJ+ymqexq7jmjzB yIvwKM9je7lfLvIEw3tVXLHzTsfKoH+h X-Received: by 10.176.22.137 with SMTP id e9mr3336561uaf.78.1493308148666; Thu, 27 Apr 2017 08:49:08 -0700 (PDT) MIME-Version: 1.0 Received: by 10.103.10.199 with HTTP; Thu, 27 Apr 2017 08:49:07 -0700 (PDT) In-Reply-To: References: From: Joao Pedro De Almeida Pereira Date: Thu, 27 Apr 2017 11:49:07 -0400 Message-ID: Subject: Re: Issue with SlickGrid To: Murtuza Zabuawala Cc: pgadmin-hackers , Matthew Kleiman Content-Type: multipart/mixed; boundary=f403045f7ed6be7dd4054e27e5ff 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 --f403045f7ed6be7dd4054e27e5ff Content-Type: multipart/alternative; boundary=f403045f7ed6be7dcf054e27e5fd --f403045f7ed6be7dcf054e27e5fd Content-Type: text/plain; charset=UTF-8 Hi Hackers, We found that the latest version of SlickGrid fixes the scrollbar issue. We have upgraded it to the latest version in our vendor directory and updated the tests accordingly in the attached patch. We didn't apply any of the custom changes that were previously added. Please validate that the memory issues that were referenced in the README file are solved with the latest version of SlickGrid. If we can avoid changing the code of the libraries that we use, it will be far easier to continue to upgrade in the future. We will need to upgrade the version of SlickGrid again soon, once they approve our pull request . Thanks, Joao & Matt On Thu, Apr 27, 2017 at 8:13 AM, Murtuza Zabuawala < murtuza.zabuawala@enterprisedb.com> wrote: > No, we didn't. > > -- > Regards, > Murtuza Zabuawala > EnterpriseDB: http://www.enterprisedb.com > The Enterprise PostgreSQL Company > > On Thu, Apr 27, 2017 at 4:42 PM, Joao Pedro De Almeida Pereira < > jdealmeidapereira@pivotal.io> wrote: > >> Hello Murtuza, >> Thanks for the explanation. Based on what you said it looks like a bug in >> the library, have you guys considered sending a PR to it? >> >> Thanks >> >> On Thu, Apr 27, 2017, 2:46 AM Murtuza Zabuawala < >> murtuza.zabuawala@enterprisedb.com> wrote: >> >>> +++ >>> Reference: https://www.postgresql.org/message-id/CAKKotZRjqb >>> KAZev81Zk78nikDVXqLKEDV5r%2BsW8Me31Gpzrm_A%40mail.gmail.com >>> >>> -- >>> Regards, >>> Murtuza Zabuawala >>> EnterpriseDB: http://www.enterprisedb.com >>> The Enterprise PostgreSQL Company >>> >>> On Thu, Apr 27, 2017 at 12:09 PM, Murtuza Zabuawala < >>> murtuza.zabuawala@enterprisedb.com> wrote: >>> >>>> Hello Joao, >>>> >>>> Yes, We made some changes in SlickGrid library when we integrated it >>>> into Query tool. >>>> >>>> *Issue:* Last row from the query result set was not displaying >>>> correctly in query tool when we have scrollbar in grid. >>>> >>>> The row hight/width pixel size calculations is done inside SlickGrid >>>> javascript code, Though we tried solve it through CSS but we had no luck, >>>> so we had no other choice but to do it in library it self. >>>> >>>> The changes were, >>>> 1) "getDataLengthIncludingAddNew()" function (slick.grid.js) to add >>>> two new rows instead of one when user add values into row (one row is dummy >>>> & not visible to user so that it displays last row correctly) >>>> 2) Other change was done into "appendRowHtml()" function to calculating >>>> the correct number of rows in SlickGrid result as we have added our own >>>> custom row as mentioned earlier. >>>> 3) Abbreviated long CSS classes as mentioed in README file. >>>> >>>> Apologies we missed to update this change in README. >>>> >>>> >>>> -- >>>> Regards, >>>> Murtuza Zabuawala >>>> EnterpriseDB: http://www.enterprisedb.com >>>> The Enterprise PostgreSQL Company >>>> >>>> On Thu, Apr 27, 2017 at 2:23 AM, Joao Pedro De Almeida Pereira < >>>> jdealmeidapereira@pivotal.io> wrote: >>>> >>>>> Hello Hackers, >>>>> >>>>> While doing some changes to the Query Results we found out that there >>>>> was a issue with Slick grid. >>>>> >>>>> The issue that we found was with the CellSelectModel, behaved >>>>> differently when pressing Ctrl and Command(Mac). We created a PR >>>>> with the change to >>>>> changes the behavior of the plugin. >>>>> >>>>> When this PR is applied to the SlickGrid library we need to apply it >>>>> to the current version of SlickGrid that we have vendorized. >>>>> According to the libraries.txt file we are in version 2.2.4 of the >>>>> library but a diff between our code and the libraries version 2.2.4 shows >>>>> differences in the code. >>>>> >>>>> Did we do any change to SlickGrid library that is vendorized? Or is >>>>> just the information in libraries.txt that is incorrect? >>>>> Does anyone know any problem if we bump the version of SlickGrid to >>>>> the newer version after the PR is applied? >>>>> >>>>> Thanks >>>>> Joao >>>>> >>>> >>>> >>> > --f403045f7ed6be7dcf054e27e5fd Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi Hackers,

We found that the latest ve= rsion of SlickGrid fixes the scrollbar issue. We have upgraded it to the la= test version in our vendor directory and updated the tests accordingly in t= he attached patch.

We didn't apply any of the = custom changes that were previously added. Please validate that the memory = issues that were referenced in the README file are solved with the latest v= ersion of SlickGrid. If we can avoid changing the code of the libraries tha= t we use, it will be far easier to continue to upgrade in the future. We wi= ll need to upgrade the version of SlickGrid again soon, once they approve o= ur pull request.=

Thanks,
Joao & Matt

<= /div>

On Thu= , Apr 27, 2017 at 8:13 AM, Murtuza Zabuawala <murtuza.za= buawala@enterprisedb.com> wrote:
No, we didn't.=C2=A0

--
Regards,
Murtuza Zabuawal= a
EnterpriseDB:=C2=A0http:/= /www.enterprisedb.com
The Enterprise PostgreSQL Company
=

On Thu, Apr 27= , 2017 at 4:42 PM, Joao Pedro De Almeida Pereira <jdealmeidaper= eira@pivotal.io> wrote:

Hello Murtuza,
Thanks for the explanation. Based on what you said it looks like a bug in t= he library, have you guys considered sending a PR to it?

Thanks



=
--
Regards,
Murtuza Zabua= wala
EnterpriseDB:=C2=A0htt= p://www.enterprisedb.com
The Enterprise PostgreSQL Company<= /font>

On Thu, Apr= 27, 2017 at 12:09 PM, Murtuza Zabuawala <murtuza.zabuawa= la@enterprisedb.com> wrote:
Hello Joao,

Yes, We made some cha= nges in SlickGrid library when we integrated it into Query tool.
=
Issue: Last row from the query result set was not dis= playing correctly in query tool when we have scrollbar in grid.

The row hight/width pixel size calculations is done = inside SlickGrid javascript code, Though we tried solve it through CSS but = we had no luck, so we had no other choice but to do it in library it self.<= /div>
=C2=A0=C2=A0
The changes were,
1) &= quot;getDataLengthIncludingAddNew()" function (slick.grid.js) to = add two new rows instead of one when user add values into row (one row is d= ummy & not visible to user so that it displays last row correctly)
2) Other change was done into "appendRowHtml()" function to= calculating the correct number of rows in SlickGrid result as we have adde= d our own custom row as mentioned earlier.
3) Abbreviated long CS= S classes as mentioed in README file.
=C2=A0
Apolo= gies we missed to update this change in README.

<= /div>

--
Regards,
Murtuza Zabuawal= a
EnterpriseDB:=C2=A0http:/= /www.enterprisedb.com
The Enterprise PostgreSQL Company
=

On Thu, Apr 27, 2017 at 2:23 AM, Joao Pedro = De Almeida Pereira <jdealmeidapereira@pivotal.io>= wrote:
Hello Hackers,
While doing some changes to the Query Results we found ou= t that there was a issue with Slick grid.=C2=A0

Th= e issue that we found was with the CellSelectModel, behaved differently whe= n pressing Ctrl and Command(Mac). We created a PR with the change to chan= ges the behavior of the plugin.

When this PR is ap= plied to the SlickGrid library we need to apply it to the current version o= f SlickGrid that we have vendorized.
According to the libraries.t= xt file we are in version 2.2.4 of the library but a diff between our code = and the libraries version 2.2.4 shows differences in the code.
Did we do any change to SlickGrid library that is vendorized? = Or is just the information in libraries.txt that is incorrect?
Do= es anyone know any problem if we bump the version of SlickGrid to the newer= version after the PR is applied?

Thanks
Joao
=




--f403045f7ed6be7dcf054e27e5fd-- --f403045f7ed6be7dd4054e27e5ff Content-Type: application/octet-stream; name="0001-Update-SlickGrid-to-latest-version.patch" Content-Disposition: attachment; filename="0001-Update-SlickGrid-to-latest-version.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j20kuj6o0 RnJvbSAwMDBmY2YwM2IyNWZhNDY1ZjRhMDM2MjBmOTE1ZTA3NDY5NTg1MDA5 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2FvIFBlcmVpcmEg YW5kIE1hdHQgS2xlaW1hbiA8cGFpcitqcGVyZWlyYStta2xlaW1hbkBwaXZv dGFsLmlvPgpEYXRlOiBUaHUsIDI3IEFwciAyMDE3IDExOjQwOjQzIC0wNDAw ClN1YmplY3Q6IFtQQVRDSF0gVXBkYXRlIFNsaWNrR3JpZCB0byBsYXRlc3Qg dmVyc2lvbgoKIHZlcnNpb24gMi4zLjQgb24gY29tbWl0IDE4NzgwNzQKCiAt IFRoaXMgbGF0ZXN0IHZlcnNpb24gZml4ZXMgdGhlIHNjcm9sbGJhciBpc3N1 ZSwgc28gbm8gbmVlZCBmb3IgY3VzdG9tIGNoYW5nZXMgdG8gU2xpY2tHcmlk IGNvZGUuCiAtIFJldmVydGVkIGNzcyBjaGFuZ2VzOiB1c2luZyBvcmlnaW5h bCAuc2xpY2stcm93IGFuZCAuc2xpY2stY2VsbCBjbGFzc2VzCi0tLQogbGli cmFyaWVzLnR4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgIDY2ICstCiAuLi4vY29weV9zZWxlY3RlZF9xdWVyeV9yZXN1bHRz X2ZlYXR1cmVfdGVzdC5weSAgICB8ICAgIDIgKy0KIHdlYi9wZ2FkbWluL3N0 YXRpYy92ZW5kb3Ivc2xpY2tncmlkL1JFQURNRSAgICAgICAgIHwgICAgOSAt CiB3ZWIvcGdhZG1pbi9zdGF0aWMvdmVuZG9yL3NsaWNrZ3JpZC9SRUFETUUu bWQgICAgICB8ICAgIDkgKwogLi4uL3NsaWNrZ3JpZC9jb250cm9scy9zbGlj ay5jb2x1bW5waWNrZXIuanMgICAgICAgfCAgICA5ICstCiAuLi4vc3RhdGlj L3ZlbmRvci9zbGlja2dyaWQvaW1hZ2VzL0NoZWNrYm94Ti5wbmcgICB8ICBC aW4gMCAtPiAyNTcgYnl0ZXMKIC4uLi9zdGF0aWMvdmVuZG9yL3NsaWNrZ3Jp ZC9pbWFnZXMvQ2hlY2tib3hZLnBuZyAgIHwgIEJpbiAwIC0+IDM2MSBieXRl cwogLi4uL3ZlbmRvci9zbGlja2dyaWQvcGx1Z2lucy9zbGljay5hdXRvdG9v bHRpcHMuanMgfCAgIDEwICstCiAuLi4vc2xpY2tncmlkL3BsdWdpbnMvc2xp Y2suY2VsbGNvcHltYW5hZ2VyLmpzICAgICB8ICAgIDYgKy0KIC4uLi9wbHVn aW5zL3NsaWNrLmNlbGxleHRlcm5hbGNvcHltYW5hZ2VyLmpzICAgICAgIHwg IDQ0OSArKwogLi4uL3NsaWNrZ3JpZC9wbHVnaW5zL3NsaWNrLmNlbGxzZWxl Y3Rpb25tb2RlbC5qcyAgfCAgIDQ0ICstCiAuLi4vc2xpY2tncmlkL3BsdWdp bnMvc2xpY2suaGVhZGVyYnV0dG9ucy5qcyAgICAgICB8ICAgIDYgKy0KIC4u Li92ZW5kb3Ivc2xpY2tncmlkL3BsdWdpbnMvc2xpY2suaGVhZGVybWVudS5q cyAgIHwgICAgOCArLQogLi4uL3NsaWNrZ3JpZC9wbHVnaW5zL3NsaWNrLnJv d3NlbGVjdGlvbm1vZGVsLmpzICAgfCAgICA4ICstCiAuLi4vdmVuZG9yL3Ns aWNrZ3JpZC9zbGljay1kZWZhdWx0LXRoZW1lLmNzcyAgICAgICB8ICAgMjIg Ky0KIHdlYi9wZ2FkbWluL3N0YXRpYy92ZW5kb3Ivc2xpY2tncmlkL3NsaWNr LmNvcmUuanMgIHwgICAxNSArLQogLi4uL3N0YXRpYy92ZW5kb3Ivc2xpY2tn cmlkL3NsaWNrLmRhdGF2aWV3LmpzICAgICAgfCAgIDQwICstCiAuLi4vc3Rh dGljL3ZlbmRvci9zbGlja2dyaWQvc2xpY2suZWRpdG9ycy5qcyAgICAgICB8 ICAgNjcgKy0KIC4uLi9zdGF0aWMvdmVuZG9yL3NsaWNrZ3JpZC9zbGljay5m b3JtYXR0ZXJzLmpzICAgIHwgICAxMiArLQogd2ViL3BnYWRtaW4vc3RhdGlj L3ZlbmRvci9zbGlja2dyaWQvc2xpY2suZ3JpZC5jc3MgfCAgIDQzICstCiB3 ZWIvcGdhZG1pbi9zdGF0aWMvdmVuZG9yL3NsaWNrZ3JpZC9zbGljay5ncmlk LmpzICB8IDczNzUgKysrKysrKysrKy0tLS0tLS0tLS0KIC4uLi9zbGlja2dy aWQvc2xpY2suZ3JvdXBpdGVtbWV0YWRhdGFwcm92aWRlci5qcyAgIHwgIDE1 OCArCiAuLi4vdmVuZG9yL3NsaWNrZ3JpZC9zbGljay5yZW1vdGVtb2RlbC15 YWhvby5qcyAgICB8ICAyMDYgKwogLi4uL3N0YXRpYy92ZW5kb3Ivc2xpY2tn cmlkL3NsaWNrLnJlbW90ZW1vZGVsLmpzICAgfCAgMTY5ICsKIC4uLi90b29s cy9zcWxlZGl0b3Ivc3RhdGljL2Nzcy9zcWxlZGl0b3IuY3NzICAgICAgIHwg ICAxNiArLQogLi4uL2phdmFzY3JpcHQvc2VsZWN0aW9uL3Jvd19zZWxlY3Rv cl9zcGVjLmpzICAgICAgfCAgIDM0ICstCiAyNiBmaWxlcyBjaGFuZ2VkLCA0 OTg5IGluc2VydGlvbnMoKyksIDM3OTQgZGVsZXRpb25zKC0pCiBkZWxldGUg bW9kZSAxMDA2NDQgd2ViL3BnYWRtaW4vc3RhdGljL3ZlbmRvci9zbGlja2dy aWQvUkVBRE1FCiBjcmVhdGUgbW9kZSAxMDA2NDQgd2ViL3BnYWRtaW4vc3Rh dGljL3ZlbmRvci9zbGlja2dyaWQvUkVBRE1FLm1kCiBjcmVhdGUgbW9kZSAx MDA2NDQgd2ViL3BnYWRtaW4vc3RhdGljL3ZlbmRvci9zbGlja2dyaWQvaW1h Z2VzL0NoZWNrYm94Ti5wbmcKIGNyZWF0ZSBtb2RlIDEwMDY0NCB3ZWIvcGdh ZG1pbi9zdGF0aWMvdmVuZG9yL3NsaWNrZ3JpZC9pbWFnZXMvQ2hlY2tib3hZ LnBuZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHdlYi9wZ2FkbWluL3N0YXRpYy92 ZW5kb3Ivc2xpY2tncmlkL3BsdWdpbnMvc2xpY2suY2VsbGV4dGVybmFsY29w eW1hbmFnZXIuanMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB3ZWIvcGdhZG1pbi9z dGF0aWMvdmVuZG9yL3NsaWNrZ3JpZC9zbGljay5ncm91cGl0ZW1tZXRhZGF0 YXByb3ZpZGVyLmpzCiBjcmVhdGUgbW9kZSAxMDA2NDQgd2ViL3BnYWRtaW4v c3RhdGljL3ZlbmRvci9zbGlja2dyaWQvc2xpY2sucmVtb3RlbW9kZWwteWFo b28uanMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB3ZWIvcGdhZG1pbi9zdGF0aWMv dmVuZG9yL3NsaWNrZ3JpZC9zbGljay5yZW1vdGVtb2RlbC5qcwoKZGlmZiAt LWdpdCBhL2xpYnJhcmllcy50eHQgYi9saWJyYXJpZXMudHh0CmluZGV4IDdl MGJkNWI3Li40MDc2YWI1OSAxMDA2NDQKLS0tIGEvbGlicmFyaWVzLnR4dAor KysgYi9saWJyYXJpZXMudHh0CkBAIC0xLDM2ICsxLDM2IEBACiBUaGlzIGlz IGEgbGlzdCBvZiB0aGUgdGhpcmQgcGFydHkgbGlicmFyaWVzL2NvZGUgdXNl ZCBpbiB0aGUgYXBwbGljYXRpb24sIG5vdAogaW5jbHVkaW5nIFB5dGhvbiBt b2R1bGVzIGluc3RhbGxlZCB2aWEgUGlwIHdoaWNoIGFyZSBsaXN0ZWQgaW4g cmVxdWlyZW1lbnRzLnR4dC4KIAotTGlicmFyeSAgICAgICAgICAgICBWZXJz aW9uICAgICBMaWNlbmNlICAgICAgVVJMCi09PT09PT09ICAgICAgICAgICAg ID09PT09PT0gICAgID09PT09PT0gICAgICA9PT0KLVFUICAgICAgICAgICAg ICAgICAgNC42LjIrICAgICAgTEdQTCB2Mi4xLzMgIGh0dHA6Ly93d3cucXQu aW8vCi1Cb290c3RyYXAgICAgICAgICAgIDMuMy40ICAgICAgIE1JVCAgICAg ICAgICBodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbS8KLWpRdWVyeSAgICAgICAg ICAgICAgMS4xMS4xICAgICAgTUlUICAgICAgICAgIGh0dHA6Ly9qcXVlcnku Y29tLwotTW9kZXJuaXpyICAgICAgICAgICAyLjYuMiAgICAgICBNSVQvQlNE ICAgICAgaHR0cDovL21vZGVybml6ci5jb20vCi1BbGVydGlmeUpTICAgICAg ICAgIDEuNy4xICAgICAgIE1JVCAgICAgICAgICBodHRwOi8vYWxlcnRpZnlq cy5jb20vICoqKiBEbyBub3QgdXBkYXRlIC0gY2hhbmdlZCB0byBHUEwzIGlu IDEuOC4wICoqKgotQ29kZU1pcnJvciAgICAgICAgICA1LjE0LjIgICAgICBN SVQgICAgICAgICAgaHR0cDovL2NvZGVtaXJyb3IubmV0LwotYWNpVHJlZSAg ICAgICAgICAgICA0LjUuMC1yYy43ICBNSVQvR1BMICAgICAgaHR0cDovL2Fj b2Rlcmluc2lnaHRzLnJvL2VuL2FjaVRyZWUtdHJlZS12aWV3LXdpdGgtalF1 ZXJ5Ci1jb250ZXh0TWVudSAgICAgICAgIDIuMS4wICAgICAgIE1JVCAgICAg ICAgICBodHRwczovL2dpdGh1Yi5jb20vc3dpc25sL2pRdWVyeS1jb250ZXh0 TWVudQotd2NEb2NrZXIgICAgICAgICAgICAwZjU2OTAzMThjICBNSVQvR1BM ICAgICAgaHR0cHM6Ly9naXRodWIuY29tL1dlYkNhYmluL3djRG9ja2VyCi1S ZXF1aXJlLmpzICAgICAgICAgIDIuMS4xOCAgICAgIEJTRC9NSVQgICAgICBo dHRwOi8vcmVxdWlyZWpzLm9yZy8KLVVuZGVyc2NvcmUuanMgICAgICAgMS44 LjMgICAgICAgTUlUICAgICAgICAgIGh0dHA6Ly91bmRlcnNjb3JlanMub3Jn LwotVW5kZXJzY29yZS5zdHJpbmcgICAzODdhYjcyZDQ5ICBNSVQgICAgICAg ICAgaHR0cDovL2VwZWxpLmdpdGh1Yi5pby91bmRlcnNjb3JlLnN0cmluZy8K LUJhY2tmb3JtLmpzICAgICAgICAgNTg1OWI0ZjlkYiAgTUlUICAgICAgICAg IGh0dHBzOi8vZ2l0aHViLmNvbS9BbWlsaWFBcHAvYmFja2Zvcm0KLUJhY2ti b25lICAgICAgICAgICAgMS4xLjIgICAgICAgTUlUICAgICAgICAgIGh0dHA6 Ly9iYWNrYm9uZWpzLm9yZwotZm9udC1Bd2Vzb21lICAgICAgICA0LjUgICAg ICAgICBTSUwgT0ZMICAgICAgaHR0cDovL2ZvcnRhd2Vzb21lLmdpdGh1Yi5p by9Gb250LUF3ZXNvbWUvCi1mb250LW1maXp6ICAgICAgICAgIDIuMyAgICAg ICAgIE1JVCAgICAgICAgICBodHRwOi8vZml6emVkLmNvbS9vc3MvZm9udC1t Zml6egotYmFja2dyaWQuanMgICAgICAgICAwLjMuNSAgICAgICBNSVQgICAg ICAgICAgaHR0cDovL2JhY2tncmlkanMuY29tLwotYmFja2JvbmUudW5kbyAg ICAgICAwLjIgICAgICAgICBNSVQgICAgICAgICAgaHR0cDovL2JhY2tib25l LnVuZG9qcy5jb20vCi1ib290c3RyYXAtc3dpdGNoICAgIDMuMy4yICAgICAg IE1JVCAgICAgICAgICBodHRwOi8vd3d3LmJvb3RzdHJhcC1zd2l0Y2gub3Jn Lwotc2VsZWN0MiAgICAgICAgICAgICA0LjAuMSAgICAgICBNSVQgICAgICAg ICAgaHR0cHM6Ly9zZWxlY3QyLmdpdGh1Yi5pby8KLWJhY2tncmlkLWZpbHRl ciAgICAgMDFiMmIyMSAgICAgTUlUICAgICAgICAgIGh0dHBzOi8vZ2l0aHVi LmNvbS93eXVlbmhvL2JhY2tncmlkLWZpbHRlcgotYmFja2JvbmUucGFnaW5h dG9yICAyLjAuMyAgICAgICBNSVQgICAgICAgICAgaHR0cDovL2dpdGh1Yi5j b20vYmFja2JvbmUtcGFnaW5hdG9yL2JhY2tib25lLnBhZ2luYXRvcgotYmFj a2dyaWQtcGFnaW5hdG9yICAwMzYzMmRmICAgICBNSVQgICAgICAgICAgaHR0 cHM6Ly9naXRodWIuY29tL3d5dWVuaG8vYmFja2dyaWQtcGFnaW5hdG9yCi1i YWNrZ3JpZC1zZWxlY3QtYWxsIDFhMDAwNTMgICAgIE1JVCAgICAgICAgICBo dHRwczovL2dpdGh1Yi5jb20vd3l1ZW5oby9iYWNrZ3JpZC1zZWxlY3QtYWxs Ci1kcm9wem9uZSAgICAgICAgICAgIDRlMjBiZDQgICAgIE1JVCAgICAgICAg ICBodHRwczovL2dpdGh1Yi5jb20vZW55by9kcm9wem9uZQotRmlsZW1hbmFn ZXIgICAgICAgICA3ZTA2MGMyICAgICBNSVQgICAgICAgICAgaHR0cHM6Ly9n aXRodWIuY29tL3NpbW9nZW8vRmlsZW1hbmFnZXIKLVVuaXQgKExlbmd0aCkg ICAgICAgZDhlNjIzNyAgICAgTUlUICAgICAgICAgIGh0dHBzOi8vZ2l0aHVi LmNvbS9oZXlncmFkeS9Vbml0cy9ibG9iL21hc3Rlci9MZW5ndGgubWluLmpz Ci1OYXR1cmFsIFNvcnQgICAgICAgIDk1NjU4MTYgICAgIE1JVCAgICAgICAg ICBodHRwczovL2dpdGh1Yi5jb20vamF2dmUvbmF0dXJhbC1zb3J0L2Jsb2Iv bWFzdGVyL2luZGV4LmpzCi1TbGlja0dyaWQgICAgICAgICAgIDIuMi40ICAg ICAgIE1JVCAgICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vNnBhYy9TbGlj a0dyaWQKLWpRdWVyeS1VSSAgICAgICAgICAgMS4xMS4zICAgICAgTUlUICAg ICAgICAgIGh0dHBzOi8vanF1ZXJ5dWkuY29tLwotQmlnTnVtYmVyICAgICAg ICAgICAzLjAuMSAgICAgICBNSVQgICAgICAgICAgaHR0cDovL21pa2VtY2wu Z2l0aHViLmlvL2JpZ251bWJlci5qcwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m IGZpbGUKK0xpYnJhcnkgICAgICAgICAgICAgVmVyc2lvbiAgICAgICBMaWNl bmNlICAgICAgVVJMCis9PT09PT09ICAgICAgICAgICAgID09PT09PT0gICAg ICAgPT09PT09PSAgICAgID09PQorUVQgICAgICAgICAgICAgICAgICA0LjYu MisgICAgICAgIExHUEwgdjIuMS8zICBodHRwOi8vd3d3LnF0LmlvLworQm9v dHN0cmFwICAgICAgICAgICAzLjMuNCAgICAgICAgIE1JVCAgICAgICAgICBo dHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbS8KK2pRdWVyeSAgICAgICAgICAgICAg MS4xMS4xICAgICAgICBNSVQgICAgICAgICAgaHR0cDovL2pxdWVyeS5jb20v CitNb2Rlcm5penIgICAgICAgICAgIDIuNi4yICAgICAgICAgTUlUL0JTRCAg ICAgIGh0dHA6Ly9tb2Rlcm5penIuY29tLworQWxlcnRpZnlKUyAgICAgICAg ICAxLjcuMSAgICAgICAgIE1JVCAgICAgICAgICBodHRwOi8vYWxlcnRpZnlq cy5jb20vICoqKiBEbyBub3QgdXBkYXRlIC0gY2hhbmdlZCB0byBHUEwzIGlu IDEuOC4wICoqKgorQ29kZU1pcnJvciAgICAgICAgICA1LjE0LjIgICAgICAg IE1JVCAgICAgICAgICBodHRwOi8vY29kZW1pcnJvci5uZXQvCithY2lUcmVl ICAgICAgICAgICAgIDQuNS4wLXJjLjcgICAgTUlUL0dQTCAgICAgIGh0dHA6 Ly9hY29kZXJpbnNpZ2h0cy5yby9lbi9hY2lUcmVlLXRyZWUtdmlldy13aXRo LWpRdWVyeQorY29udGV4dE1lbnUgICAgICAgICAyLjEuMCAgICAgICAgIE1J VCAgICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vc3dpc25sL2pRdWVyeS1j b250ZXh0TWVudQord2NEb2NrZXIgICAgICAgICAgICAwZjU2OTAzMThjICAg IE1JVC9HUEwgICAgICBodHRwczovL2dpdGh1Yi5jb20vV2ViQ2FiaW4vd2NE b2NrZXIKK1JlcXVpcmUuanMgICAgICAgICAgMi4xLjE4ICAgICAgICBCU0Qv TUlUICAgICAgaHR0cDovL3JlcXVpcmVqcy5vcmcvCitVbmRlcnNjb3JlLmpz ICAgICAgIDEuOC4zICAgICAgICAgTUlUICAgICAgICAgIGh0dHA6Ly91bmRl cnNjb3JlanMub3JnLworVW5kZXJzY29yZS5zdHJpbmcgICAzODdhYjcyZDQ5 ICAgIE1JVCAgICAgICAgICBodHRwOi8vZXBlbGkuZ2l0aHViLmlvL3VuZGVy c2NvcmUuc3RyaW5nLworQmFja2Zvcm0uanMgICAgICAgICA1ODU5YjRmOWRi ICAgIE1JVCAgICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vQW1pbGlhQXBw L2JhY2tmb3JtCitCYWNrYm9uZSAgICAgICAgICAgIDEuMS4yICAgICAgICAg TUlUICAgICAgICAgIGh0dHA6Ly9iYWNrYm9uZWpzLm9yZworZm9udC1Bd2Vz b21lICAgICAgICA0LjUgICAgICAgICAgIFNJTCBPRkwgICAgICBodHRwOi8v Zm9ydGF3ZXNvbWUuZ2l0aHViLmlvL0ZvbnQtQXdlc29tZS8KK2ZvbnQtbWZp enogICAgICAgICAgMi4zICAgICAgICAgICBNSVQgICAgICAgICAgaHR0cDov L2ZpenplZC5jb20vb3NzL2ZvbnQtbWZpenoKK2JhY2tncmlkLmpzICAgICAg ICAgMC4zLjUgICAgICAgICBNSVQgICAgICAgICAgaHR0cDovL2JhY2tncmlk anMuY29tLworYmFja2JvbmUudW5kbyAgICAgICAwLjIgICAgICAgICAgIE1J VCAgICAgICAgICBodHRwOi8vYmFja2JvbmUudW5kb2pzLmNvbS8KK2Jvb3Rz dHJhcC1zd2l0Y2ggICAgMy4zLjIgICAgICAgICBNSVQgICAgICAgICAgaHR0 cDovL3d3dy5ib290c3RyYXAtc3dpdGNoLm9yZy8KK3NlbGVjdDIgICAgICAg ICAgICAgNC4wLjEgICAgICAgICBNSVQgICAgICAgICAgaHR0cHM6Ly9zZWxl Y3QyLmdpdGh1Yi5pby8KK2JhY2tncmlkLWZpbHRlciAgICAgMDFiMmIyMSAg ICAgICBNSVQgICAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL3d5dWVuaG8v YmFja2dyaWQtZmlsdGVyCitiYWNrYm9uZS5wYWdpbmF0b3IgIDIuMC4zICAg ICAgICAgTUlUICAgICAgICAgIGh0dHA6Ly9naXRodWIuY29tL2JhY2tib25l LXBhZ2luYXRvci9iYWNrYm9uZS5wYWdpbmF0b3IKK2JhY2tncmlkLXBhZ2lu YXRvciAgMDM2MzJkZiAgICAgICBNSVQgICAgICAgICAgaHR0cHM6Ly9naXRo dWIuY29tL3d5dWVuaG8vYmFja2dyaWQtcGFnaW5hdG9yCitiYWNrZ3JpZC1z ZWxlY3QtYWxsIDFhMDAwNTMgICAgICAgTUlUICAgICAgICAgIGh0dHBzOi8v Z2l0aHViLmNvbS93eXVlbmhvL2JhY2tncmlkLXNlbGVjdC1hbGwKK2Ryb3B6 b25lICAgICAgICAgICAgNGUyMGJkNCAgICAgICBNSVQgICAgICAgICAgaHR0 cHM6Ly9naXRodWIuY29tL2VueW8vZHJvcHpvbmUKK0ZpbGVtYW5hZ2VyICAg ICAgICAgN2UwNjBjMiAgICAgICBNSVQgICAgICAgICAgaHR0cHM6Ly9naXRo dWIuY29tL3NpbW9nZW8vRmlsZW1hbmFnZXIKK1VuaXQgKExlbmd0aCkgICAg ICAgZDhlNjIzNyAgICAgICBNSVQgICAgICAgICAgaHR0cHM6Ly9naXRodWIu Y29tL2hleWdyYWR5L1VuaXRzL2Jsb2IvbWFzdGVyL0xlbmd0aC5taW4uanMK K05hdHVyYWwgU29ydCAgICAgICAgOTU2NTgxNiAgICAgICBNSVQgICAgICAg ICAgaHR0cHM6Ly9naXRodWIuY29tL2phdnZlL25hdHVyYWwtc29ydC9ibG9i L21hc3Rlci9pbmRleC5qcworU2xpY2tHcmlkICAgICAgICAgICAyLjMuNC0x ODc4MDc0IE1JVCAgICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vNnBhYy9T bGlja0dyaWQKK2pRdWVyeS1VSSAgICAgICAgICAgMS4xMS4zICAgICAgICBN SVQgICAgICAgICAgaHR0cHM6Ly9qcXVlcnl1aS5jb20vCitCaWdOdW1iZXIg ICAgICAgICAgIDMuMC4xICAgICAgICAgTUlUICAgICAgICAgIGh0dHA6Ly9t aWtlbWNsLmdpdGh1Yi5pby9iaWdudW1iZXIuanMKXCBObyBuZXdsaW5lIGF0 IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9mZWF0dXJl X3Rlc3RzL2NvcHlfc2VsZWN0ZWRfcXVlcnlfcmVzdWx0c19mZWF0dXJlX3Rl c3QucHkgYi93ZWIvcGdhZG1pbi9mZWF0dXJlX3Rlc3RzL2NvcHlfc2VsZWN0 ZWRfcXVlcnlfcmVzdWx0c19mZWF0dXJlX3Rlc3QucHkKaW5kZXggMjIzNTc5 ZWUuLmQwZTYzOTRkIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9mZWF0dXJl X3Rlc3RzL2NvcHlfc2VsZWN0ZWRfcXVlcnlfcmVzdWx0c19mZWF0dXJlX3Rl c3QucHkKKysrIGIvd2ViL3BnYWRtaW4vZmVhdHVyZV90ZXN0cy9jb3B5X3Nl bGVjdGVkX3F1ZXJ5X3Jlc3VsdHNfZmVhdHVyZV90ZXN0LnB5CkBAIC00Nyw3 ICs0Nyw3IEBAIGNsYXNzIENvcHlTZWxlY3RlZFF1ZXJ5UmVzdWx0c0ZlYXR1 cmVUZXN0KEJhc2VGZWF0dXJlVGVzdCk6CiAgICAgZGVmIF9jb3BpZXNfcm93 cyhzZWxmKToKICAgICAgICAgcHlwZXJjbGlwLmNvcHkoIm9sZCBjbGlwYm9h cmQgY29udGVudHMiKQogICAgICAgICB0aW1lLnNsZWVwKDUpCi0gICAgICAg IHNlbGYucGFnZS5maW5kX2J5X3hwYXRoKCIvLypbY29udGFpbnMoQGNsYXNz LCAnc3InKV0vKlsxXS9pbnB1dFtAdHlwZT0nY2hlY2tib3gnXSIpLmNsaWNr KCkKKyAgICAgICAgc2VsZi5wYWdlLmZpbmRfYnlfeHBhdGgoIi8vKltjb250 YWlucyhAY2xhc3MsICdzbGljay1yb3cnKV0vKlsxXS9pbnB1dFtAdHlwZT0n Y2hlY2tib3gnXSIpLmNsaWNrKCkKICAgICAgICAgc2VsZi5wYWdlLmZpbmRf YnlfeHBhdGgoIi8vKltAaWQ9J2J0bi1jb3B5LXJvdyddIikuY2xpY2soKQog CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIidTb21lLU5hbWUnLCc2JyIs CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9zdGF0aWMvdmVuZG9yL3NsaWNr Z3JpZC9SRUFETUUgYi93ZWIvcGdhZG1pbi9zdGF0aWMvdmVuZG9yL3NsaWNr Z3JpZC9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNm NTgzNTE1Li4wMDAwMDAwMAotLS0gYS93ZWIvcGdhZG1pbi9zdGF0aWMvdmVu ZG9yL3NsaWNrZ3JpZC9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSw5ICsw LDAgQEAKLVdBUk5JTkchIQotCi1UaGUgZm9sbG93aW5nIGNoYW5nZXMgaGF2 ZSBiZWVuIG1hZGUgdG8gU2xpY2tHcmlkLiBUaGVzZSBtdXN0IGJlIHJlLWFw cGxpZWQgaWYgdXBkYXRpbmcgdGhlIGNvZGUgZnJvbSB1cHN0cmVhbSEKLQot LSBUaGUgQ1NTIGNsYXNzICdzbGljay1yb3cnIGhhcyBiZWVuIHJlbmFtZWQg dG8gJ3NyJwotCi0tIFRoZSBDU1MgY2xhc3MgJ3NsaWNrLWNlbGwnIGhhcyBi ZWVuIHJlbmFtZWQgdG8gJ3NjJwotCi1UaGUgaW50ZW50IG9mIHRoZXNlIGNo YW5nZXMgaXMgdG8gbWluaW1pc2UgbWVtb3J5IHVzYWdlIGJ5IHRoZSBncmlk LCBieSBzYXZpbmcgYSBmZXcgYnl0ZXMgcGVyIHJvdy9jZWxsLgpcIE5vIG5l d2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWlu L3N0YXRpYy92ZW5kb3Ivc2xpY2tncmlkL1JFQURNRS5tZCBiL3dlYi9wZ2Fk bWluL3N0YXRpYy92ZW5kb3Ivc2xpY2tncmlkL1JFQURNRS5tZApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uZThhMWFkN2EKLS0tIC9k ZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9zdGF0aWMvdmVuZG9yL3NsaWNr Z3JpZC9SRUFETUUubWQKQEAgLTAsMCArMSw5IEBACisjIyBUaGlzIGlzIHRo ZSA2cGFjIFNsaWNrR3JpZCByZXBvCisKK1RoaXMgaXMgdGhlIGFja25vd2xl ZGdlZCBtb3N0IGFjdGl2ZSBub24tY3VzdG9taXNlZCBmb3JrIG9mIFNsaWNr R3JpZC4KKworSXQgYWltcyB0byBiZSBhIHZpYWJsZSBhbHRlcm5hdGl2ZSBt YXN0ZXIgcmVwbywgYnVpbGRpbmcgb24gdGhlIGxlZ2FjeSBvZiB0aGUgbWxl aWJtYW4vU2xpY2tHcmlkIG1hc3RlciBicmFuY2gsIGtlZXBpbmcgbGlicmFy aWVzIHVwIHRvIGRhdGUgYW5kIGFwcGx5aW5nIHNtYWxsLCBzYWZlIGNvcmUg cGF0Y2hlcyBhbmQgZW5oYW5jZW1lbnRzIHdpdGhvdXQgdHVybmluZyBpbnRv IGEgcGVyc29uYWxpc2VkIGJ1aWxkLgorCitDaGVjayBvdXQgdGhlIFtleGFt cGxlc10oaHR0cHM6Ly9naXRodWIuY29tLzZwYWMvU2xpY2tHcmlkL3dpa2kv RXhhbXBsZXMpIGZvciBleGFtcGxlcyBkZW1vbnN0cmF0aW5nIG5ldyBmZWF0 dXJlcyBhbmQgdXNlIGNhc2VzLCBzdWNoIGFzIGR5bmFtaWMgZ3JpZCBjcmVh dGlvbiBhbmQgZWRpdG9ycyB3aXRoIHRoaXJkIHBhcnR5IGNvbnRyb2xzLgor CitBbHNvIGNoZWNrIG91dCB0aGUgW3dpa2ldKGh0dHBzOi8vZ2l0aHViLmNv bS82cGFjL1NsaWNrR3JpZC93aWtpKSBmb3IgbmV3cyBhbmQgZG9jdW1lbnRh dGlvbi4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQg YS93ZWIvcGdhZG1pbi9zdGF0aWMvdmVuZG9yL3NsaWNrZ3JpZC9jb250cm9s cy9zbGljay5jb2x1bW5waWNrZXIuanMgYi93ZWIvcGdhZG1pbi9zdGF0aWMv dmVuZG9yL3NsaWNrZ3JpZC9jb250cm9scy9zbGljay5jb2x1bW5waWNrZXIu anMKaW5kZXggZGMxNjcyMDkuLjkzYTZiZTViIDEwMDY0NAotLS0gYS93ZWIv cGdhZG1pbi9zdGF0aWMvdmVuZG9yL3NsaWNrZ3JpZC9jb250cm9scy9zbGlj ay5jb2x1bW5waWNrZXIuanMKKysrIGIvd2ViL3BnYWRtaW4vc3RhdGljL3Zl bmRvci9zbGlja2dyaWQvY29udHJvbHMvc2xpY2suY29sdW1ucGlja2VyLmpz CkBAIC0xMiwxMiArMTIsMTIgQEAKICAgICAgIGdyaWQub25Db2x1bW5zUmVv cmRlcmVkLnN1YnNjcmliZSh1cGRhdGVDb2x1bW5PcmRlcik7CiAgICAgICBv cHRpb25zID0gJC5leHRlbmQoe30sIGRlZmF1bHRzLCBvcHRpb25zKTsKIAot ICAgICAgJG1lbnUgPSAkKCI8c3BhbiBjbGFzcz0nc2xpY2stY29sdW1ucGlj a2VyJyBzdHlsZT0nZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO3ot aW5kZXg6MjA7JyAvPiIpLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpOworICAg ICAgJG1lbnUgPSAkKCI8c3BhbiBjbGFzcz0nc2xpY2stY29sdW1ucGlja2Vy JyBzdHlsZT0nZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO3otaW5k ZXg6MjA7b3ZlcmZsb3cteTpzY3JvbGw7JyAvPiIpLmFwcGVuZFRvKGRvY3Vt ZW50LmJvZHkpOwogCi0gICAgICAkbWVudS5iaW5kKCJtb3VzZWxlYXZlIiwg ZnVuY3Rpb24gKGUpIHsKKyAgICAgICRtZW51Lm9uKCJtb3VzZWxlYXZlIiwg ZnVuY3Rpb24gKGUpIHsKICAgICAgICAgJCh0aGlzKS5mYWRlT3V0KG9wdGlv bnMuZmFkZVNwZWVkKQogICAgICAgfSk7Ci0gICAgICAkbWVudS5iaW5kKCJj bGljayIsIHVwZGF0ZUNvbHVtbik7CisgICAgICAkbWVudS5vbigiY2xpY2si LCB1cGRhdGVDb2x1bW4pOwogCiAgICAgfQogCkBAIC00NCw3ICs0NCw3IEBA CiAgICAgICAgIH0KIAogICAgICAgICAkKCI8bGFiZWwgLz4iKQotICAgICAg ICAgICAgLnRleHQoY29sdW1uc1tpXS5uYW1lKQorICAgICAgICAgICAgLmh0 bWwoY29sdW1uc1tpXS5uYW1lKQogICAgICAgICAgICAgLnByZXBlbmQoJGlu cHV0KQogICAgICAgICAgICAgLmFwcGVuZFRvKCRsaSk7CiAgICAgICB9CkBA IC03Myw2ICs3Myw3IEBACiAgICAgICAkbWVudQogICAgICAgICAgIC5jc3Mo InRvcCIsIGUucGFnZVkgLSAxMCkKICAgICAgICAgICAuY3NzKCJsZWZ0Iiwg ZS5wYWdlWCAtIDEwKQorICAgICAgICAgIC5jc3MoIm1heC1oZWlnaHQiLCAk KHdpbmRvdykuaGVpZ2h0KCkgLSBlLnBhZ2VZIC0xMCkKICAgICAgICAgICAu ZmFkZUluKG9wdGlvbnMuZmFkZVNwZWVkKTsKICAgICB9CiAKZGlmZiAtLWdp dCBhL3dlYi9wZ2FkbWluL3N0YXRpYy92ZW5kb3Ivc2xpY2tncmlkL2ltYWdl cy9DaGVja2JveE4ucG5nIGIvd2ViL3BnYWRtaW4vc3RhdGljL3ZlbmRvci9z bGlja2dyaWQvaW1hZ2VzL0NoZWNrYm94Ti5wbmcKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMC4uMDcyZWNiYjk2NDM1YzQ4MjIzNzRjYjMxMTZmY2E1ODE5MTk0 MzYzZQpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMjU3CnpjbWVBU0BOPyhv bEh5YHVWQnEhaWEwdnBeZD8zdWgxU0JWRD9QPiMzRWF7SEVqdG1TTmA/PiFs dkk2Oz4xczsqYgp6S3NBUnpte0M7MnN7dHF8Uz5oVHw1fWNuX1FsNDBwJTIx RyluT0NCaG1zK0E9cUd6Q0lYeW5ZMntSWEowJmVPIykKekw/aWc+Qn0yWHox cmdXNEBCOF9jMD16UVA3IVBRQDtZbCVhX0hYNXttMkpGSFcmUGlOQTthYHZK S1ZmQT9eUzJOCnp6MUYoMG42RSladWpQWSRpPn1FXiEpTkJhNEkkYUpLRmtX RFBIISRWI0NjMiZuIWBJT1hqMHVlaSs4KVdGRU1uaAp3ZEdLWnt3fFE1blNF cT5vb1peM2NoaS00SFV2TiEkK3FGT0V1ZT57YzMrTklDUGdnJmVieHNMUTA3 K0xePT5QeCMKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBh L3dlYi9wZ2FkbWluL3N0YXRpYy92ZW5kb3Ivc2xpY2tncmlkL2ltYWdlcy9D aGVja2JveFkucG5nIGIvd2ViL3BnYWRtaW4vc3RhdGljL3ZlbmRvci9zbGlj a2dyaWQvaW1hZ2VzL0NoZWNrYm94WS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMC4uNDY3ZjMwMTA4OTZmNDM4ZDBlZGU1NDc2MGJhMWFlYzdkYTMxNjFl ZApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMzYxCnpjbWVBU0BOPyhvbEh5 YHVWQnEhaWEwdnBeZD8zdWgxU0JWRD9QPiMzRWF7SEVqdG1TTmA/PiFsdkk2 Oz4xczsqYgp6S3NBUnpte0M7MnN7dHF8Uz5oVHw1fWNuX1FsNDBwJTIxRylu T0NCaG1zK0E9cUd6Q0lYeW5ZMntSWEokbld1fG0KemgoPlZsQzRLSEAyWmBl IV9panJSJCFZU09vVWtveD5vMlZvdHE4U2dzKnxPNyprKjRxbzNpbnlANE0l QjR7eTdqCnp5Q0dsVHttJVpUYG0pI2ViNHd6cD9PTkJwJGlnY3pCMjwoaWFM Mk9EY2xMKyRPZks0LSZreEdJZVFSNTxAO1N6aQp6V3RtbGkocnBJfmN3N1Ri ZHwmVjRZc2U2Qk8qY0dWXy0lfj0mcWZ4M2pRaWpCeT8tcGghZFNsVV4oSm10 dUVhPk8KelpLYmkjJnpibzA+PD9JRGQ7VCVVJTJpUipSTGZzWFViT3QmclhL JGF7YUdyVVhKPFU/e31kOzQre0lyPCVLS3lOCnpxUUAzVmpuKG8/S0RjYyhe JVZ9UmN+bSlYejVTdT5jbUZrKCktdDUwb21LblVkSSVJTzQ0JHJqRjYqMlVu Z0hONQpCanBZQ1UKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdp dCBhL3dlYi9wZ2FkbWluL3N0YXRpYy92ZW5kb3Ivc2xpY2tncmlkL3BsdWdp bnMvc2xpY2suYXV0b3Rvb2x0aXBzLmpzIGIvd2ViL3BnYWRtaW4vc3RhdGlj L3ZlbmRvci9zbGlja2dyaWQvcGx1Z2lucy9zbGljay5hdXRvdG9vbHRpcHMu anMKaW5kZXggNjYzM2JiNzAuLmZmYTkzZTBkIDEwMDY0NAotLS0gYS93ZWIv cGdhZG1pbi9zdGF0aWMvdmVuZG9yL3NsaWNrZ3JpZC9wbHVnaW5zL3NsaWNr LmF1dG90b29sdGlwcy5qcworKysgYi93ZWIvcGdhZG1pbi9zdGF0aWMvdmVu ZG9yL3NsaWNrZ3JpZC9wbHVnaW5zL3NsaWNrLmF1dG90b29sdGlwcy5qcwpA QCAtMjEsNyArMjEsNyBAQAogICAgICAgZW5hYmxlRm9ySGVhZGVyQ2VsbHM6 IGZhbHNlLAogICAgICAgbWF4VG9vbFRpcExlbmd0aDogbnVsbAogICAgIH07 Ci0KKyAgICAKICAgICAvKioKICAgICAgKiBJbml0aWFsaXplIHBsdWdpbi4K ICAgICAgKi8KQEAgLTMxLDcgKzMxLDcgQEAKICAgICAgIGlmIChvcHRpb25z LmVuYWJsZUZvckNlbGxzKSBfZ3JpZC5vbk1vdXNlRW50ZXIuc3Vic2NyaWJl KGhhbmRsZU1vdXNlRW50ZXIpOwogICAgICAgaWYgKG9wdGlvbnMuZW5hYmxl Rm9ySGVhZGVyQ2VsbHMpIF9ncmlkLm9uSGVhZGVyTW91c2VFbnRlci5zdWJz Y3JpYmUoaGFuZGxlSGVhZGVyTW91c2VFbnRlcik7CiAgICAgfQotCisgICAg CiAgICAgLyoqCiAgICAgICogRGVzdHJveSBwbHVnaW4uCiAgICAgICovCkBA IC0zOSw3ICszOSw3IEBACiAgICAgICBpZiAob3B0aW9ucy5lbmFibGVGb3JD ZWxscykgX2dyaWQub25Nb3VzZUVudGVyLnVuc3Vic2NyaWJlKGhhbmRsZU1v dXNlRW50ZXIpOwogICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlRm9ySGVhZGVy Q2VsbHMpIF9ncmlkLm9uSGVhZGVyTW91c2VFbnRlci51bnN1YnNjcmliZSho YW5kbGVIZWFkZXJNb3VzZUVudGVyKTsKICAgICB9Ci0KKyAgICAKICAgICAv KioKICAgICAgKiBIYW5kbGUgbW91c2UgZW50ZXJpbmcgZ3JpZCBjZWxsIHRv IGFkZC9yZW1vdmUgdG9vbHRpcC4KICAgICAgKiBAcGFyYW0ge2pRdWVyeS5F dmVudH0gZSAtIFRoZSBldmVudApAQCAtNjAsNyArNjAsNyBAQAogICAgICAg ICAkbm9kZS5hdHRyKCJ0aXRsZSIsIHRleHQpOwogICAgICAgfQogICAgIH0K LQorICAgIAogICAgIC8qKgogICAgICAqIEhhbmRsZSBtb3VzZSBlbnRlcmlu ZyBoZWFkZXIgY2VsbCB0byBhZGQvcmVtb3ZlIHRvb2x0aXAuCiAgICAgICog QHBhcmFtIHtqUXVlcnkuRXZlbnR9IGUgICAgIC0gVGhlIGV2ZW50CkBAIC03 Myw3ICs3Myw3IEBACiAgICAgICAgICRub2RlLmF0dHIoInRpdGxlIiwgKCRu b2RlLmlubmVyV2lkdGgoKSA8ICRub2RlWzBdLnNjcm9sbFdpZHRoKSA/IGNv bHVtbi5uYW1lIDogIiIpOwogICAgICAgfQogICAgIH0KLQorICAgIAogICAg IC8vIFB1YmxpYyBBUEkKICAgICAkLmV4dGVuZCh0aGlzLCB7CiAgICAgICAi aW5pdCI6IGluaXQsCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9zdGF0aWMv dmVuZG9yL3NsaWNrZ3JpZC9wbHVnaW5zL3NsaWNrLmNlbGxjb3B5bWFuYWdl ci5qcyBiL3dlYi9wZ2FkbWluL3N0YXRpYy92ZW5kb3Ivc2xpY2tncmlkL3Bs dWdpbnMvc2xpY2suY2VsbGNvcHltYW5hZ2VyLmpzCmluZGV4IGM3NDAxOGRl Li42NmMyMzc2YyAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vc3RhdGljL3Zl bmRvci9zbGlja2dyaWQvcGx1Z2lucy9zbGljay5jZWxsY29weW1hbmFnZXIu anMKKysrIGIvd2ViL3BnYWRtaW4vc3RhdGljL3ZlbmRvci9zbGlja2dyaWQv cGx1Z2lucy9zbGljay5jZWxsY29weW1hbmFnZXIuanMKQEAgLTQ2LDEwICs0 NiwxMiBAQAogICAgICAgICBpZiAoZS53aGljaCA9PSA4NiAmJiAoZS5jdHJs S2V5IHx8IGUubWV0YUtleSkpIHsKICAgICAgICAgICBpZiAoX2NvcGllZFJh bmdlcykgewogICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwotICAg ICAgICAgICAgY2xlYXJDb3B5U2VsZWN0aW9uKCk7CiAgICAgICAgICAgICBy YW5nZXMgPSBfZ3JpZC5nZXRTZWxlY3Rpb25Nb2RlbCgpLmdldFNlbGVjdGVk UmFuZ2VzKCk7CiAgICAgICAgICAgICBfc2VsZi5vblBhc3RlQ2VsbHMubm90 aWZ5KHtmcm9tOiBfY29waWVkUmFuZ2VzLCB0bzogcmFuZ2VzfSk7Ci0gICAg ICAgICAgICBfY29waWVkUmFuZ2VzID0gbnVsbDsKKyAgICAgICAgICAgIGlm ICghX2dyaWQuZ2V0T3B0aW9ucygpLnByZXNlcnZlQ29waWVkU2VsZWN0aW9u T25QYXN0ZSkgeworICAgICAgICAgICAgICBjbGVhckNvcHlTZWxlY3Rpb24o KTsKKyAgICAgICAgICAgICAgX2NvcGllZFJhbmdlcyA9IG51bGw7CisgICAg ICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9CmRp ZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9zdGF0aWMvdmVuZG9yL3NsaWNrZ3Jp ZC9wbHVnaW5zL3NsaWNrLmNlbGxleHRlcm5hbGNvcHltYW5hZ2VyLmpzIGIv d2ViL3BnYWRtaW4vc3RhdGljL3ZlbmRvci9zbGlja2dyaWQvcGx1Z2lucy9z bGljay5jZWxsZXh0ZXJuYWxjb3B5bWFuYWdlci5qcwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMC4uZmVjN2NiMmEKLS0tIC9kZXYvbnVs bAorKysgYi93ZWIvcGdhZG1pbi9zdGF0aWMvdmVuZG9yL3NsaWNrZ3JpZC9w bHVnaW5zL3NsaWNrLmNlbGxleHRlcm5hbGNvcHltYW5hZ2VyLmpzCkBAIC0w LDAgKzEsNDQ5IEBACisoZnVuY3Rpb24gKCQpIHsKKyAgLy8gcmVnaXN0ZXIg bmFtZXNwYWNlCisgICQuZXh0ZW5kKHRydWUsIHdpbmRvdywgeworICAgICJT bGljayI6IHsKKyAgICAgICJDZWxsRXh0ZXJuYWxDb3B5TWFuYWdlciI6IENl bGxFeHRlcm5hbENvcHlNYW5hZ2VyCisgICAgfQorICB9KTsKKworCisgIGZ1 bmN0aW9uIENlbGxFeHRlcm5hbENvcHlNYW5hZ2VyKG9wdGlvbnMpIHsKKyAg ICAvKgorICAgICAgVGhpcyBtYW5hZ2VyIGVuYWJsZXMgdXNlcnMgdG8gY29w eS9wYXN0ZSBkYXRhIGZyb20vdG8gYW4gZXh0ZXJuYWwgU3ByZWFkc2hlZXQg YXBwbGljYXRpb24KKyAgICAgIHN1Y2ggYXMgTVMtRXhjZWzCriBvciBPcGVu T2ZmaWNlLVNwcmVhZHNoZWV0LgorICAgICAgCisgICAgICBTaW5jZSBpdCBp cyBub3QgcG9zc2libGUgdG8gYWNjZXNzIGRpcmVjdGx5IHRoZSBjbGlwYm9h cmQgaW4gamF2YXNjcmlwdCwgdGhlIHBsdWdpbiB1c2VzCisgICAgICBhIHRy aWNrIHRvIGRvIGl0J3Mgam9iLiBBZnRlciBkZXRlY3RpbmcgdGhlIGtleXN0 cm9rZSwgd2UgZHluYW1pY2FsbHkgY3JlYXRlIGEgdGV4dGFyZWEKKyAgICAg IHdoZXJlIHRoZSBicm93c2VyIGNvcGllcy9wYXN0ZXMgdGhlIHNlcmlhbGl6 ZWQgZGF0YS4gCisgICAgICAKKyAgICAgIG9wdGlvbnM6CisgICAgICAgIGNv cGllZENlbGxTdHlsZSA6IHNldHMgdGhlIGNzcyBjbGFzc05hbWUgdXNlZCBm b3IgY29waWVkIGNlbGxzLiBkZWZhdWx0IDogImNvcGllZCIKKyAgICAgICAg Y29waWVkQ2VsbFN0eWxlTGF5ZXJLZXkgOiBzZXRzIHRoZSBsYXllciBrZXkg Zm9yIHNldHRpbmcgY3NzIHZhbHVlcyBvZiBjb3BpZWQgY2VsbHMuIGRlZmF1 bHQgOiAiY29weS1tYW5hZ2VyIgorICAgICAgICBkYXRhSXRlbUNvbHVtblZh bHVlRXh0cmFjdG9yIDogb3B0aW9uIHRvIHNwZWNpZnkgYSBjdXN0b20gY29s dW1uIHZhbHVlIGV4dHJhY3RvciBmdW5jdGlvbgorICAgICAgICBkYXRhSXRl bUNvbHVtblZhbHVlU2V0dGVyIDogb3B0aW9uIHRvIHNwZWNpZnkgYSBjdXN0 b20gY29sdW1uIHZhbHVlIHNldHRlciBmdW5jdGlvbgorICAgICAgICBjbGlw Ym9hcmRDb21tYW5kSGFuZGxlciA6IG9wdGlvbiB0byBzcGVjaWZ5IGEgY3Vz dG9tIGhhbmRsZXIgZm9yIHBhc3RlIGFjdGlvbnMKKyAgICAgICAgaW5jbHVk ZUhlYWRlcldoZW5Db3B5aW5nIDogc2V0IHRvIHRydWUgYW5kIHRoZSBwbHVn aW4gd2lsbCB0YWtlIHRoZSBuYW1lIHByb3BlcnR5IGZyb20gZWFjaCBjb2x1 bW4gKHdoaWNoIGlzIHVzdWFsbHkgd2hhdCBhcHBlYXJzIGluIHlvdXIgaGVh ZGVyKSBhbmQgcHV0IHRoYXQgYXMgdGhlIGZpcnN0IHJvdyBvZiB0aGUgdGV4 dCB0aGF0J3MgY29waWVkIHRvIHRoZSBjbGlwYm9hcmQKKyAgICAgICAgYm9k eUVsZW1lbnQ6IG9wdGlvbiB0byBzcGVjaWZ5IGEgY3VzdG9tIERPTSBlbGVt ZW50IHdoaWNoIHRvIHdpbGwgYmUgYWRkZWQgdGhlIGhpZGRlbiB0ZXh0Ym94 LiBJdCdzIHVzZWZ1bCBpZiB0aGUgZ3JpZCBpcyBpbnNpZGUgYSBtb2RhbCBk aWFsb2cuCisgICAgICAgIG9uQ29weUluaXQ6IG9wdGlvbmFsIGhhbmRsZXIg dG8gcnVuIHdoZW4gY29weSBhY3Rpb24gaW5pdGlhbGl6ZXMKKyAgICAgICAg b25Db3B5U3VjY2Vzczogb3B0aW9uYWwgaGFuZGxlciB0byBydW4gd2hlbiBj b3B5IGFjdGlvbiBpcyBjb21wbGV0ZQorICAgICAgICBuZXdSb3dDcmVhdG9y OiBmdW5jdGlvbiB0byBhZGQgcm93cyB0byB0YWJsZSBpZiBwYXN0ZSBvdmVy Zmxvd3MgYm90dG9tIG9mIHRhYmxlCisgICAgICAgIHJlYWRPbmx5TW9kZTog c3VwcHJlc3NlcyBwYXN0ZQorICAgICovCisgICAgdmFyIF9ncmlkOworICAg IHZhciBfc2VsZiA9IHRoaXM7CisgICAgdmFyIF9jb3BpZWRSYW5nZXM7Cisg ICAgdmFyIF9vcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKKyAgICB2YXIgX2Nv cGllZENlbGxTdHlsZUxheWVyS2V5ID0gX29wdGlvbnMuY29waWVkQ2VsbFN0 eWxlTGF5ZXJLZXkgfHwgImNvcHktbWFuYWdlciI7CisgICAgdmFyIF9jb3Bp ZWRDZWxsU3R5bGUgPSBfb3B0aW9ucy5jb3BpZWRDZWxsU3R5bGUgfHwgImNv cGllZCI7CisgICAgdmFyIF9jbGVhckNvcHlUSSA9IDA7CisgICAgdmFyIF9i b2R5RWxlbWVudCA9IF9vcHRpb25zLmJvZHlFbGVtZW50IHx8IGRvY3VtZW50 LmJvZHk7CisgICAgdmFyIF9vbkNvcHlJbml0ID0gX29wdGlvbnMub25Db3B5 SW5pdCB8fCBudWxsOworICAgIHZhciBfb25Db3B5U3VjY2VzcyA9IF9vcHRp b25zLm9uQ29weVN1Y2Nlc3MgfHwgbnVsbDsKKyAgICAKKyAgICB2YXIga2V5 Q29kZXMgPSB7CisgICAgICAnQyc6IDY3LAorICAgICAgJ1YnOiA4NiwKKyAg ICAgICdFU0MnOiAyNywKKyAgICAgICdJTlNFUlQnOiA0NQorICAgIH07CisK KyAgICBmdW5jdGlvbiBpbml0KGdyaWQpIHsKKyAgICAgIF9ncmlkID0gZ3Jp ZDsKKyAgICAgIF9ncmlkLm9uS2V5RG93bi5zdWJzY3JpYmUoaGFuZGxlS2V5 RG93bik7CisgICAgICAKKyAgICAgIC8vIHdlIG5lZWQgYSBjZWxsIHNlbGVj dGlvbiBtb2RlbAorICAgICAgdmFyIGNlbGxTZWxlY3Rpb25Nb2RlbCA9IGdy aWQuZ2V0U2VsZWN0aW9uTW9kZWwoKTsKKyAgICAgIGlmICghY2VsbFNlbGVj dGlvbk1vZGVsKXsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJTZWxlY3Rp b24gbW9kZWwgaXMgbWFuZGF0b3J5IGZvciB0aGlzIHBsdWdpbi4gUGxlYXNl IHNldCBhIHNlbGVjdGlvbiBtb2RlbCBvbiB0aGUgZ3JpZCBiZWZvcmUgYWRk aW5nIHRoaXMgcGx1Z2luOiBncmlkLnNldFNlbGVjdGlvbk1vZGVsKG5ldyBT bGljay5DZWxsU2VsZWN0aW9uTW9kZWwoKSkiKTsKKyAgICAgIH0KKyAgICAg IC8vIHdlIGdpdmUgZm9jdXMgb24gdGhlIGdyaWQgd2hlbiBhIHNlbGVjdGlv biBpcyBkb25lIG9uIGl0LgorICAgICAgLy8gd2l0aG91dCB0aGlzLCBpZiB0 aGUgdXNlciBzZWxlY3RzIGEgcmFuZ2Ugb2YgY2VsbCB3aXRob3V0IGdpdmlu ZyBmb2N1cyBvbiBhIHBhcnRpY3VsYXIgY2VsbCwgdGhlIGdyaWQgZG9lc24n dCBnZXQgdGhlIGZvY3VzIGFuZCBrZXkgc3Ryb2tlIGhhbmRsZXMgKGN0cmwr YykgZG9uJ3Qgd29yaworICAgICAgY2VsbFNlbGVjdGlvbk1vZGVsLm9uU2Vs ZWN0ZWRSYW5nZXNDaGFuZ2VkLnN1YnNjcmliZShmdW5jdGlvbihlLCBhcmdz KXsKKyAgICAgICAgX2dyaWQuZm9jdXMoKTsKKyAgICAgIH0pOworICAgIH0K KworICAgIGZ1bmN0aW9uIGRlc3Ryb3koKSB7CisgICAgICBfZ3JpZC5vbktl eURvd24udW5zdWJzY3JpYmUoaGFuZGxlS2V5RG93bik7CisgICAgfQorICAg IAorICAgIGZ1bmN0aW9uIGdldERhdGFJdGVtVmFsdWVGb3JDb2x1bW4oaXRl bSwgY29sdW1uRGVmKSB7CisgICAgICBpZiAoX29wdGlvbnMuZGF0YUl0ZW1D b2x1bW5WYWx1ZUV4dHJhY3RvcikgeworICAgICAgICB2YXIgZGF0YUl0ZW1D b2x1bW5WYWx1ZUV4dHJhY3RvclZhbHVlID0gX29wdGlvbnMuZGF0YUl0ZW1D b2x1bW5WYWx1ZUV4dHJhY3RvcihpdGVtLCBjb2x1bW5EZWYpOworCisgICAg ICAgIGlmIChkYXRhSXRlbUNvbHVtblZhbHVlRXh0cmFjdG9yVmFsdWUpCisg ICAgICAgICAgcmV0dXJuIGRhdGFJdGVtQ29sdW1uVmFsdWVFeHRyYWN0b3JW YWx1ZTsKKyAgICAgIH0KKworICAgICAgdmFyIHJldFZhbCA9ICcnOworCisg ICAgICAvLyBpZiBhIGN1c3RvbSBnZXR0ZXIgaXMgbm90IGRlZmluZWQsIHdl IGNhbGwgc2VyaWFsaXplVmFsdWUgb2YgdGhlIGVkaXRvciB0byBzZXJpYWxp emUKKyAgICAgIGlmIChjb2x1bW5EZWYuZWRpdG9yKXsKKyAgICAgICAgdmFy IGVkaXRvckFyZ3MgPSB7CisgICAgICAgICAgJ2NvbnRhaW5lcic6JCgiPHA+ IiksICAvLyBhIGR1bW15IGNvbnRhaW5lcgorICAgICAgICAgICdjb2x1bW4n OmNvbHVtbkRlZiwKKyAgICAgICAgICAncG9zaXRpb24nOnsndG9wJzowLCAn bGVmdCc6MH0sICAvLyBhIGR1bW15IHBvc2l0aW9uIHJlcXVpcmVkIGJ5IHNv bWUgZWRpdG9ycworICAgICAgICAgICdncmlkJzpfZ3JpZAorICAgICAgICB9 OworICAgICAgICB2YXIgZWRpdG9yID0gbmV3IGNvbHVtbkRlZi5lZGl0b3Io ZWRpdG9yQXJncyk7CisgICAgICAgIGVkaXRvci5sb2FkVmFsdWUoaXRlbSk7 CisgICAgICAgIHJldFZhbCA9IGVkaXRvci5zZXJpYWxpemVWYWx1ZSgpOwor ICAgICAgICBlZGl0b3IuZGVzdHJveSgpOworICAgICAgfQorICAgICAgZWxz ZSB7CisgICAgICAgIHJldFZhbCA9IGl0ZW1bY29sdW1uRGVmLmZpZWxkXTsK KyAgICAgIH0KKworICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisgICAg CisgICAgZnVuY3Rpb24gc2V0RGF0YUl0ZW1WYWx1ZUZvckNvbHVtbihpdGVt LCBjb2x1bW5EZWYsIHZhbHVlKSB7CisgICAgICBpZiAoX29wdGlvbnMuZGF0 YUl0ZW1Db2x1bW5WYWx1ZVNldHRlcikgeworICAgICAgICByZXR1cm4gX29w dGlvbnMuZGF0YUl0ZW1Db2x1bW5WYWx1ZVNldHRlcihpdGVtLCBjb2x1bW5E ZWYsIHZhbHVlKTsKKyAgICAgIH0KKworICAgICAgLy8gaWYgYSBjdXN0b20g c2V0dGVyIGlzIG5vdCBkZWZpbmVkLCB3ZSBjYWxsIGFwcGx5VmFsdWUgb2Yg dGhlIGVkaXRvciB0byB1bnNlcmlhbGl6ZQorICAgICAgaWYgKGNvbHVtbkRl Zi5lZGl0b3IpeworICAgICAgICB2YXIgZWRpdG9yQXJncyA9IHsKKyAgICAg ICAgICAnY29udGFpbmVyJzokKCJib2R5IiksICAvLyBhIGR1bW15IGNvbnRh aW5lcgorICAgICAgICAgICdjb2x1bW4nOmNvbHVtbkRlZiwKKyAgICAgICAg ICAncG9zaXRpb24nOnsndG9wJzowLCAnbGVmdCc6MH0sICAvLyBhIGR1bW15 IHBvc2l0aW9uIHJlcXVpcmVkIGJ5IHNvbWUgZWRpdG9ycworICAgICAgICAg ICdncmlkJzpfZ3JpZAorICAgICAgICB9OworICAgICAgICB2YXIgZWRpdG9y ID0gbmV3IGNvbHVtbkRlZi5lZGl0b3IoZWRpdG9yQXJncyk7CisgICAgICAg IGVkaXRvci5sb2FkVmFsdWUoaXRlbSk7CisgICAgICAgIGVkaXRvci5hcHBs eVZhbHVlKGl0ZW0sIHZhbHVlKTsKKyAgICAgICAgZWRpdG9yLmRlc3Ryb3ko KTsKKyAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgZnVuY3Rpb24g X2NyZWF0ZVRleHRCb3goaW5uZXJUZXh0KXsKKyAgICAgIHZhciB0YSA9IGRv Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7CisgICAgICB0YS5z dHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7CisgICAgICB0YS5zdHlsZS5s ZWZ0ID0gJy0xMDAwcHgnOworICAgICAgdGEuc3R5bGUudG9wID0gZG9jdW1l bnQuYm9keS5zY3JvbGxUb3AgKyAncHgnOworICAgICAgdGEudmFsdWUgPSBp bm5lclRleHQ7CisgICAgICBfYm9keUVsZW1lbnQuYXBwZW5kQ2hpbGQodGEp OworICAgICAgdGEuc2VsZWN0KCk7CisgICAgICAKKyAgICAgIHJldHVybiB0 YTsKKyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gX2RlY29kZVRhYnVsYXJE YXRhKF9ncmlkLCB0YSl7CisgICAgICB2YXIgY29sdW1ucyA9IF9ncmlkLmdl dENvbHVtbnMoKTsKKyAgICAgIHZhciBjbGlwVGV4dCA9IHRhLnZhbHVlOwor ICAgICAgdmFyIGNsaXBSb3dzID0gY2xpcFRleHQuc3BsaXQoL1tcblxmXHJd Lyk7CisgICAgICAvLyB0cmltIHRyYWlsaW5nIENSIGlmIHByZXNlbnQKKyAg ICAgIGlmIChjbGlwUm93c1tjbGlwUm93cy5sZW5ndGggLSAxXT09IiIpIHsg Y2xpcFJvd3MucG9wKCk7IH0KKyAgICAgIAorICAgICAgdmFyIGNsaXBwZWRS YW5nZSA9IFtdOworICAgICAgdmFyIGogPSAwOworICAgICAgCisgICAgICBf Ym9keUVsZW1lbnQucmVtb3ZlQ2hpbGQodGEpOworICAgICAgZm9yICh2YXIg aT0wOyBpPGNsaXBSb3dzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmIChj bGlwUm93c1tpXSE9IiIpCisgICAgICAgICAgY2xpcHBlZFJhbmdlW2orK10g PSBjbGlwUm93c1tpXS5zcGxpdCgiXHQiKTsKKyAgICAgICAgICBlbHNlCisg ICAgICAgICAgY2xpcHBlZFJhbmdlW2ldID0gWyIiXTsKKyAgICAgIH0KKyAg ICAgIHZhciBzZWxlY3RlZENlbGwgPSBfZ3JpZC5nZXRBY3RpdmVDZWxsKCk7 CisgICAgICB2YXIgcmFuZ2VzID0gX2dyaWQuZ2V0U2VsZWN0aW9uTW9kZWwo KS5nZXRTZWxlY3RlZFJhbmdlcygpOworICAgICAgdmFyIHNlbGVjdGVkUmFu Z2UgPSByYW5nZXMgJiYgcmFuZ2VzLmxlbmd0aCA/IHJhbmdlc1swXSA6IG51 bGw7ICAgLy8gcGljayBvbmx5IG9uZSBzZWxlY3Rpb24KKyAgICAgIHZhciBh Y3RpdmVSb3cgPSBudWxsOworICAgICAgdmFyIGFjdGl2ZUNlbGwgPSBudWxs OworICAgICAgCisgICAgICBpZiAoc2VsZWN0ZWRSYW5nZSl7CisgICAgICAg IGFjdGl2ZVJvdyA9IHNlbGVjdGVkUmFuZ2UuZnJvbVJvdzsKKyAgICAgICAg YWN0aXZlQ2VsbCA9IHNlbGVjdGVkUmFuZ2UuZnJvbUNlbGw7CisgICAgICB9 IGVsc2UgaWYgKHNlbGVjdGVkQ2VsbCl7CisgICAgICAgIGFjdGl2ZVJvdyA9 IHNlbGVjdGVkQ2VsbC5yb3c7CisgICAgICAgIGFjdGl2ZUNlbGwgPSBzZWxl Y3RlZENlbGwuY2VsbDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8vIHdl IGRvbid0IGtub3cgd2hlcmUgdG8gcGFzdGUKKyAgICAgICAgcmV0dXJuOwor ICAgICAgfQorICAgICAgCisgICAgICB2YXIgb25lQ2VsbFRvTXVsdGlwbGUg PSBmYWxzZTsKKyAgICAgIHZhciBkZXN0SCA9IGNsaXBwZWRSYW5nZS5sZW5n dGg7CisgICAgICB2YXIgZGVzdFcgPSBjbGlwcGVkUmFuZ2UubGVuZ3RoID8g Y2xpcHBlZFJhbmdlWzBdLmxlbmd0aCA6IDA7CisgICAgICBpZiAoY2xpcHBl ZFJhbmdlLmxlbmd0aCA9PSAxICYmIGNsaXBwZWRSYW5nZVswXS5sZW5ndGgg PT0gMSAmJiBzZWxlY3RlZFJhbmdlKXsKKyAgICAgICAgb25lQ2VsbFRvTXVs dGlwbGUgPSB0cnVlOworICAgICAgICBkZXN0SCA9IHNlbGVjdGVkUmFuZ2Uu dG9Sb3cgLSBzZWxlY3RlZFJhbmdlLmZyb21Sb3cgKzE7CisgICAgICAgIGRl c3RXID0gc2VsZWN0ZWRSYW5nZS50b0NlbGwgLSBzZWxlY3RlZFJhbmdlLmZy b21DZWxsICsxOworICAgICAgfQorICAgICAgdmFyIGF2YWlsYWJsZVJvd3Mg PSBfZ3JpZC5nZXREYXRhKCkubGVuZ3RoIC0gYWN0aXZlUm93OworICAgICAg dmFyIGFkZFJvd3MgPSAwOworICAgICAgaWYoYXZhaWxhYmxlUm93cyA8IGRl c3RIKQorICAgICAgeworICAgICAgICB2YXIgZCA9IF9ncmlkLmdldERhdGEo KTsKKyAgICAgICAgZm9yKGFkZFJvd3MgPSAxOyBhZGRSb3dzIDw9IGRlc3RI IC0gYXZhaWxhYmxlUm93czsgYWRkUm93cysrKQorICAgICAgICAgIGQucHVz aCh7fSk7CisgICAgICAgIF9ncmlkLnNldERhdGEoZCk7CisgICAgICAgIF9n cmlkLnJlbmRlcigpOworICAgICAgfQorCisgICAgICB2YXIgb3ZlcmZsb3dz Qm90dG9tT2ZHcmlkID0gYWN0aXZlUm93ICsgZGVzdEggPiBfZ3JpZC5nZXRE YXRhTGVuZ3RoKCk7CisKKyAgICAgIGlmIChfb3B0aW9ucy5uZXdSb3dDcmVh dG9yICYmIG92ZXJmbG93c0JvdHRvbU9mR3JpZCkgeworCisgICAgICAgIHZh ciBuZXdSb3dzTmVlZGVkID0gYWN0aXZlUm93ICsgZGVzdEggLSBfZ3JpZC5n ZXREYXRhTGVuZ3RoKCk7CisKKyAgICAgICAgX29wdGlvbnMubmV3Um93Q3Jl YXRvcihuZXdSb3dzTmVlZGVkKTsKKworICAgICAgfQorCisgICAgICB2YXIg Y2xpcENvbW1hbmQgPSB7CisKKyAgICAgICAgaXNDbGlwYm9hcmRDb21tYW5k OiB0cnVlLAorICAgICAgICBjbGlwcGVkUmFuZ2U6IGNsaXBwZWRSYW5nZSwK KyAgICAgICAgb2xkVmFsdWVzOiBbXSwKKyAgICAgICAgY2VsbEV4dGVybmFs Q29weU1hbmFnZXI6IF9zZWxmLAorICAgICAgICBfb3B0aW9uczogX29wdGlv bnMsCisgICAgICAgIHNldERhdGFJdGVtVmFsdWVGb3JDb2x1bW46IHNldERh dGFJdGVtVmFsdWVGb3JDb2x1bW4sCisgICAgICAgIG1hcmtDb3B5U2VsZWN0 aW9uOiBtYXJrQ29weVNlbGVjdGlvbiwKKyAgICAgICAgb25lQ2VsbFRvTXVs dGlwbGU6IG9uZUNlbGxUb011bHRpcGxlLAorICAgICAgICBhY3RpdmVSb3c6 IGFjdGl2ZVJvdywKKyAgICAgICAgYWN0aXZlQ2VsbDogYWN0aXZlQ2VsbCwK KyAgICAgICAgZGVzdEg6IGRlc3RILAorICAgICAgICBkZXN0VzogZGVzdFcs CisgICAgICAgIG1heERlc3RZOiBfZ3JpZC5nZXREYXRhTGVuZ3RoKCksCisg ICAgICAgIG1heERlc3RYOiBfZ3JpZC5nZXRDb2x1bW5zKCkubGVuZ3RoLAor ICAgICAgICBoOiAwLAorICAgICAgICB3OiAwLAorICAgICAgICAgIAorICAg ICAgICBleGVjdXRlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICB0aGlzLmg9 MDsKKyAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IHRoaXMuZGVzdEg7 IHkrKyl7CisgICAgICAgICAgICB0aGlzLm9sZFZhbHVlc1t5XSA9IFtdOwor ICAgICAgICAgICAgdGhpcy53PTA7CisgICAgICAgICAgICB0aGlzLmgrKzsK KyAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgdGhpcy5kZXN0Vzsg eCsrKXsKKyAgICAgICAgICAgICAgdGhpcy53Kys7CisgICAgICAgICAgICAg IHZhciBkZXN0eSA9IGFjdGl2ZVJvdyArIHk7CisgICAgICAgICAgICAgIHZh ciBkZXN0eCA9IGFjdGl2ZUNlbGwgKyB4OworICAgICAgICAgICAgICAKKyAg ICAgICAgICAgICAgaWYgKGRlc3R5IDwgdGhpcy5tYXhEZXN0WSAmJiBkZXN0 eCA8IHRoaXMubWF4RGVzdFggKSB7CisgICAgICAgICAgICAgICAgdmFyIG5k ID0gX2dyaWQuZ2V0Q2VsbE5vZGUoZGVzdHksIGRlc3R4KTsKKyAgICAgICAg ICAgICAgICB2YXIgZHQgPSBfZ3JpZC5nZXREYXRhSXRlbShkZXN0eSk7Cisg ICAgICAgICAgICAgICAgdGhpcy5vbGRWYWx1ZXNbeV1beF0gPSBkdFtjb2x1 bW5zW2Rlc3R4XVsnZmllbGQnXV07CisgICAgICAgICAgICAgICAgaWYgKG9u ZUNlbGxUb011bHRpcGxlKQorICAgICAgICAgICAgICAgICAgdGhpcy5zZXRE YXRhSXRlbVZhbHVlRm9yQ29sdW1uKGR0LCBjb2x1bW5zW2Rlc3R4XSwgY2xp cHBlZFJhbmdlWzBdWzBdKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg ICAgICAgICAgICAgICB0aGlzLnNldERhdGFJdGVtVmFsdWVGb3JDb2x1bW4o ZHQsIGNvbHVtbnNbZGVzdHhdLCBjbGlwcGVkUmFuZ2VbeV0gPyBjbGlwcGVk UmFuZ2VbeV1beF0gOiAnJyk7CisgICAgICAgICAgICAgICAgX2dyaWQudXBk YXRlQ2VsbChkZXN0eSwgZGVzdHgpOworICAgICAgICAgICAgICAgIF9ncmlk Lm9uQ2VsbENoYW5nZS5ub3RpZnkoeworICAgICAgICAgICAgICAgICAgICBy b3c6IGRlc3R5LAorICAgICAgICAgICAgICAgICAgICBjZWxsOiBkZXN0eCwK KyAgICAgICAgICAgICAgICAgICAgaXRlbTogZHQsCisgICAgICAgICAgICAg ICAgICAgIGdyaWQ6IF9ncmlkCisgICAgICAgICAgICAgICAgfSk7CisKKyAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAg ICAgICAgICAKKyAgICAgICAgICB2YXIgYlJhbmdlID0geworICAgICAgICAg ICAgJ2Zyb21DZWxsJzogYWN0aXZlQ2VsbCwKKyAgICAgICAgICAgICdmcm9t Um93JzogYWN0aXZlUm93LAorICAgICAgICAgICAgJ3RvQ2VsbCc6IGFjdGl2 ZUNlbGwrdGhpcy53LTEsCisgICAgICAgICAgICAndG9Sb3cnOiBhY3RpdmVS b3crdGhpcy5oLTEKKyAgICAgICAgICB9CisKKyAgICAgICAgICB0aGlzLm1h cmtDb3B5U2VsZWN0aW9uKFtiUmFuZ2VdKTsKKyAgICAgICAgICBfZ3JpZC5n ZXRTZWxlY3Rpb25Nb2RlbCgpLnNldFNlbGVjdGVkUmFuZ2VzKFtiUmFuZ2Vd KTsKKyAgICAgICAgICB0aGlzLmNlbGxFeHRlcm5hbENvcHlNYW5hZ2VyLm9u UGFzdGVDZWxscy5ub3RpZnkoe3JhbmdlczogW2JSYW5nZV19KTsKKyAgICAg ICAgfSwKKworICAgICAgICB1bmRvOiBmdW5jdGlvbigpIHsKKyAgICAgICAg ICBmb3IgKHZhciB5ID0gMDsgeSA8IHRoaXMuZGVzdEg7IHkrKyl7CisgICAg ICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHRoaXMuZGVzdFc7IHgrKyl7 CisgICAgICAgICAgICAgIHZhciBkZXN0eSA9IGFjdGl2ZVJvdyArIHk7Cisg ICAgICAgICAgICAgIHZhciBkZXN0eCA9IGFjdGl2ZUNlbGwgKyB4OworICAg ICAgICAgICAgICAKKyAgICAgICAgICAgICAgaWYgKGRlc3R5IDwgdGhpcy5t YXhEZXN0WSAmJiBkZXN0eCA8IHRoaXMubWF4RGVzdFggKSB7CisgICAgICAg ICAgICAgICAgdmFyIG5kID0gX2dyaWQuZ2V0Q2VsbE5vZGUoZGVzdHksIGRl c3R4KTsKKyAgICAgICAgICAgICAgICB2YXIgZHQgPSBfZ3JpZC5nZXREYXRh SXRlbShkZXN0eSk7CisgICAgICAgICAgICAgICAgaWYgKG9uZUNlbGxUb011 bHRpcGxlKQorICAgICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhSXRlbVZh bHVlRm9yQ29sdW1uKGR0LCBjb2x1bW5zW2Rlc3R4XSwgdGhpcy5vbGRWYWx1 ZXNbMF1bMF0pOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg ICAgICAgIHRoaXMuc2V0RGF0YUl0ZW1WYWx1ZUZvckNvbHVtbihkdCwgY29s dW1uc1tkZXN0eF0sIHRoaXMub2xkVmFsdWVzW3ldW3hdKTsKKyAgICAgICAg ICAgICAgICBfZ3JpZC51cGRhdGVDZWxsKGRlc3R5LCBkZXN0eCk7CisgICAg ICAgICAgICAgICAgX2dyaWQub25DZWxsQ2hhbmdlLm5vdGlmeSh7CisgICAg ICAgICAgICAgICAgICAgIHJvdzogZGVzdHksCisgICAgICAgICAgICAgICAg ICAgIGNlbGw6IGRlc3R4LAorICAgICAgICAgICAgICAgICAgICBpdGVtOiBk dCwKKyAgICAgICAgICAgICAgICAgICAgZ3JpZDogX2dyaWQKKyAgICAgICAg ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor ICAgICAgICAgIH0KKyAgICAgICAgICAKKyAgICAgICAgICB2YXIgYlJhbmdl ID0geworICAgICAgICAgICAgJ2Zyb21DZWxsJzogYWN0aXZlQ2VsbCwKKyAg ICAgICAgICAgICdmcm9tUm93JzogYWN0aXZlUm93LAorICAgICAgICAgICAg J3RvQ2VsbCc6IGFjdGl2ZUNlbGwrdGhpcy53LTEsCisgICAgICAgICAgICAn dG9Sb3cnOiBhY3RpdmVSb3crdGhpcy5oLTEKKyAgICAgICAgICB9CisKKyAg ICAgICAgICB0aGlzLm1hcmtDb3B5U2VsZWN0aW9uKFtiUmFuZ2VdKTsKKyAg ICAgICAgICBfZ3JpZC5nZXRTZWxlY3Rpb25Nb2RlbCgpLnNldFNlbGVjdGVk UmFuZ2VzKFtiUmFuZ2VdKTsKKyAgICAgICAgICB0aGlzLmNlbGxFeHRlcm5h bENvcHlNYW5hZ2VyLm9uUGFzdGVDZWxscy5ub3RpZnkoe3JhbmdlczogW2JS YW5nZV19KTsKKyAgICAgICAgICAKKyAgICAgICAgICBpZihhZGRSb3dzID4g MSl7ICAgICAgICAgICAgCisgICAgICAgICAgICB2YXIgZCA9IF9ncmlkLmdl dERhdGEoKTsKKyAgICAgICAgICAgIGZvcig7IGFkZFJvd3MgPiAxOyBhZGRS b3dzLS0pCisgICAgICAgICAgICAgIGQuc3BsaWNlKGQubGVuZ3RoIC0gMSwg MSk7CisgICAgICAgICAgICBfZ3JpZC5zZXREYXRhKGQpOworICAgICAgICAg ICAgX2dyaWQucmVuZGVyKCk7CisgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgICB9OworCisgICAgICBpZihfb3B0aW9ucy5jbGlwYm9hcmRDb21tYW5k SGFuZGxlcikgeworICAgICAgICBfb3B0aW9ucy5jbGlwYm9hcmRDb21tYW5k SGFuZGxlcihjbGlwQ29tbWFuZCk7CisgICAgICB9CisgICAgICBlbHNlIHsK KyAgICAgICAgY2xpcENvbW1hbmQuZXhlY3V0ZSgpOworICAgICAgfQorICAg IH0KKyAgICAKKyAgICAKKyAgICBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGUs IGFyZ3MpIHsKKyAgICAgIHZhciByYW5nZXM7CisgICAgICBpZiAoIV9ncmlk LmdldEVkaXRvckxvY2soKS5pc0FjdGl2ZSgpIHx8IF9ncmlkLmdldE9wdGlv bnMoKS5hdXRvRWRpdCkgeworICAgICAgICBpZiAoZS53aGljaCA9PSBrZXlD b2Rlcy5FU0MpIHsKKyAgICAgICAgICBpZiAoX2NvcGllZFJhbmdlcykgewor ICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAg Y2xlYXJDb3B5U2VsZWN0aW9uKCk7CisgICAgICAgICAgICBfc2VsZi5vbkNv cHlDYW5jZWxsZWQubm90aWZ5KHtyYW5nZXM6IF9jb3BpZWRSYW5nZXN9KTsK KyAgICAgICAgICAgIF9jb3BpZWRSYW5nZXMgPSBudWxsOworICAgICAgICAg IH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICgoZS53aGljaCA9PT0ga2V5 Q29kZXMuQyB8fCBlLndoaWNoID09PSBrZXlDb2Rlcy5JTlNFUlQpICYmIChl LmN0cmxLZXkgfHwgZS5tZXRhS2V5KSAmJiAhZS5zaGlmdEtleSkgeyAgICAv LyBDVFJMK0Mgb3IgQ1RSTCtJTlMKKyAgICAgICAgICBpZiAoX29uQ29weUlu aXQpIHsKKyAgICAgICAgICAgIF9vbkNvcHlJbml0LmNhbGwoKTsKKyAgICAg ICAgICB9CisgICAgICAgICAgcmFuZ2VzID0gX2dyaWQuZ2V0U2VsZWN0aW9u TW9kZWwoKS5nZXRTZWxlY3RlZFJhbmdlcygpOworICAgICAgICAgIGlmIChy YW5nZXMubGVuZ3RoICE9IDApIHsKKyAgICAgICAgICAgIF9jb3BpZWRSYW5n ZXMgPSByYW5nZXM7CisgICAgICAgICAgICBtYXJrQ29weVNlbGVjdGlvbihy YW5nZXMpOworICAgICAgICAgICAgX3NlbGYub25Db3B5Q2VsbHMubm90aWZ5 KHtyYW5nZXM6IHJhbmdlc30pOworICAgICAgICAgICAgCisgICAgICAgICAg ICB2YXIgY29sdW1ucyA9IF9ncmlkLmdldENvbHVtbnMoKTsKKyAgICAgICAg ICAgIHZhciBjbGlwVGV4dCA9ICIiOworCisgICAgICAgICAgICBmb3IgKHZh ciByZyA9IDA7IHJnIDwgcmFuZ2VzLmxlbmd0aDsgcmcrKyl7CisgICAgICAg ICAgICAgICAgdmFyIHJhbmdlID0gcmFuZ2VzW3JnXTsKKyAgICAgICAgICAg ICAgICB2YXIgY2xpcFRleHRSb3dzID0gW107CisgICAgICAgICAgICAgICAg Zm9yICh2YXIgaT1yYW5nZS5mcm9tUm93OyBpPCByYW5nZS50b1JvdysxIDsg aSsrKXsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNsaXBUZXh0Q2VsbHMg PSBbXTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGR0ID0gX2dyaWQuZ2V0 RGF0YUl0ZW0oaSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg ICAgICAgICAgICBpZiAoY2xpcFRleHRSb3dzID09ICIiICYmIF9vcHRpb25z LmluY2x1ZGVIZWFkZXJXaGVuQ29weWluZykgeworICAgICAgICAgICAgICAg ICAgICAgICAgdmFyIGNsaXBUZXh0SGVhZGVycyA9IFtdOworICAgICAgICAg ICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IHJhbmdlLmZyb21DZWxsOyBq IDwgcmFuZ2UudG9DZWxsICsgMSA7IGorKykgeworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChjb2x1bW5zW2pdLm5hbWUubGVuZ3RoID4gMCkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcFRleHRIZWFk ZXJzLnB1c2goY29sdW1uc1tqXS5uYW1lKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBUZXh0Um93 cy5wdXNoKGNsaXBUZXh0SGVhZGVycy5qb2luKCJcdCIpKTsKKyAgICAgICAg ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGZvciAodmFy IGo9cmFuZ2UuZnJvbUNlbGw7IGo8IHJhbmdlLnRvQ2VsbCsxIDsgaisrKXsK KyAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBUZXh0Q2VsbHMucHVzaChn ZXREYXRhSXRlbVZhbHVlRm9yQ29sdW1uKGR0LCBjb2x1bW5zW2pdKSk7Cisg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2xp cFRleHRSb3dzLnB1c2goY2xpcFRleHRDZWxscy5qb2luKCJcdCIpKTsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2xpcFRleHQgKz0g Y2xpcFRleHRSb3dzLmpvaW4oIlxyXG4iKSArICJcclxuIjsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYod2luZG93LmNs aXBib2FyZERhdGEpIHsKKyAgICAgICAgICAgICAgICB3aW5kb3cuY2xpcGJv YXJkRGF0YS5zZXREYXRhKCJUZXh0IiwgY2xpcFRleHQpOworICAgICAgICAg ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIGZvY3VzRWwgPSBkb2N1 bWVudC5hY3RpdmVFbGVtZW50OworCisgICAgICAgICAgICAgICAgdmFyIHRh ID0gX2NyZWF0ZVRleHRCb3goY2xpcFRleHQpOworCisgICAgICAgICAgICAg ICAgdGEuZm9jdXMoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg ICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAg ICAgICBfYm9keUVsZW1lbnQucmVtb3ZlQ2hpbGQodGEpOworICAgICAgICAg ICAgICAgICAgICAvLyByZXN0b3JlIGZvY3VzCisgICAgICAgICAgICAgICAg ICAgIGlmIChmb2N1c0VsKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9j dXNFbC5mb2N1cygpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg ICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiTm90IGVsZW1lbnQg dG8gcmVzdG9yZSBmb2N1cyB0byBhZnRlciBjb3B5PyIpOworCisgICAgICAg ICAgICAgICAgfSwgMTAwKTsKKworICAgICAgICAgICAgICAgIGlmIChfb25D b3B5U3VjY2VzcykgeworICAgICAgICAgICAgICAgICAgICB2YXIgcm93Q291 bnQgPSAwOworICAgICAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIGNlbGwg c2VsZWN0aW9uLCB1c2UgdGhlIHRvUm93L2Zyb21Sb3cgZmllbGRzCisgICAg ICAgICAgICAgICAgICAgIGlmIChyYW5nZXMubGVuZ3RoID09PSAxKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICByb3dDb3VudCA9IChyYW5nZXNbMF0u dG9Sb3cgKyAxKSAtIHJhbmdlc1swXS5mcm9tUm93OworICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAg ICAgICAgICAgICAgICAgICAgcm93Q291bnQgPSByYW5nZXMubGVuZ3RoOwor ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIF9v bkNvcHlTdWNjZXNzLmNhbGwodGhpcywgcm93Q291bnQpOworICAgICAgICAg ICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg ICBpZiAoIV9vcHRpb25zLnJlYWRPbmx5TW9kZSAmJiAoCisgICAgICAgICAo ZS53aGljaCA9PT0ga2V5Q29kZXMuViAmJiAoZS5jdHJsS2V5IHx8IGUubWV0 YUtleSkgJiYgIWUuc2hpZnRLZXkpCisgICAgICAgICAgfHwgKGUud2hpY2gg PT09IGtleUNvZGVzLklOU0VSVCAmJiBlLnNoaWZ0S2V5ICYmICFlLmN0cmxL ZXkpCisgICAgICAgICApKSB7ICAgIC8vIENUUkwrViBvciBTaGlmdCtJTlMK KyAgICAgICAgICAgIHZhciB0YSA9IF9jcmVhdGVUZXh0Qm94KCcnKTsKKyAg ICAgICAgICAgIAorICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigp eworICAgICAgICAgICAgICAgIF9kZWNvZGVUYWJ1bGFyRGF0YShfZ3JpZCwg dGEpOworICAgICAgICAgICAgfSwgMTAwKTsKKyAgICAgICAgICAgIAorICAg ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICB9Cisg ICAgfQorCisgICAgZnVuY3Rpb24gbWFya0NvcHlTZWxlY3Rpb24ocmFuZ2Vz KSB7CisgICAgICBjbGVhckNvcHlTZWxlY3Rpb24oKTsKKyAgICAgIAorICAg ICAgdmFyIGNvbHVtbnMgPSBfZ3JpZC5nZXRDb2x1bW5zKCk7CisgICAgICB2 YXIgaGFzaCA9IHt9OworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5n ZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgZm9yICh2YXIgaiA9IHJhbmdl c1tpXS5mcm9tUm93OyBqIDw9IHJhbmdlc1tpXS50b1JvdzsgaisrKSB7Cisg ICAgICAgICAgaGFzaFtqXSA9IHt9OworICAgICAgICAgIGZvciAodmFyIGsg PSByYW5nZXNbaV0uZnJvbUNlbGw7IGsgPD0gcmFuZ2VzW2ldLnRvQ2VsbCAm JiBrPGNvbHVtbnMubGVuZ3RoOyBrKyspIHsKKyAgICAgICAgICAgIGhhc2hb al1bY29sdW1uc1trXS5pZF0gPSBfY29waWVkQ2VsbFN0eWxlOworICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgX2dyaWQuc2V0Q2Vs bENzc1N0eWxlcyhfY29waWVkQ2VsbFN0eWxlTGF5ZXJLZXksIGhhc2gpOwor ICAgICAgY2xlYXJUaW1lb3V0KF9jbGVhckNvcHlUSSk7CisgICAgICBfY2xl YXJDb3B5VEkgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CisgICAgICAgIF9z ZWxmLmNsZWFyQ29weVNlbGVjdGlvbigpOworICAgICAgfSwgMjAwMCk7Cisg ICAgfQorCisgICAgZnVuY3Rpb24gY2xlYXJDb3B5U2VsZWN0aW9uKCkgewor ICAgICAgX2dyaWQucmVtb3ZlQ2VsbENzc1N0eWxlcyhfY29waWVkQ2VsbFN0 eWxlTGF5ZXJLZXkpOworICAgIH0KKworICAgICQuZXh0ZW5kKHRoaXMsIHsK KyAgICAgICJpbml0IjogaW5pdCwKKyAgICAgICJkZXN0cm95IjogZGVzdHJv eSwKKyAgICAgICJjbGVhckNvcHlTZWxlY3Rpb24iOiBjbGVhckNvcHlTZWxl Y3Rpb24sCisgICAgICAiaGFuZGxlS2V5RG93biI6aGFuZGxlS2V5RG93biwK KyAgICAgIAorICAgICAgIm9uQ29weUNlbGxzIjogbmV3IFNsaWNrLkV2ZW50 KCksCisgICAgICAib25Db3B5Q2FuY2VsbGVkIjogbmV3IFNsaWNrLkV2ZW50 KCksCisgICAgICAib25QYXN0ZUNlbGxzIjogbmV3IFNsaWNrLkV2ZW50KCkK KyAgICB9KTsKKyAgfQorfSkoalF1ZXJ5KTsKZGlmZiAtLWdpdCBhL3dlYi9w Z2FkbWluL3N0YXRpYy92ZW5kb3Ivc2xpY2tncmlkL3BsdWdpbnMvc2xpY2su Y2VsbHNlbGVjdGlvbm1vZGVsLmpzIGIvd2ViL3BnYWRtaW4vc3RhdGljL3Zl bmRvci9zbGlja2dyaWQvcGx1Z2lucy9zbGljay5jZWxsc2VsZWN0aW9ubW9k ZWwuanMKaW5kZXggMDc0NTNlZDEuLjNkOWUyYWYwIDEwMDY0NAotLS0gYS93 ZWIvcGdhZG1pbi9zdGF0aWMvdmVuZG9yL3NsaWNrZ3JpZC9wbHVnaW5zL3Ns aWNrLmNlbGxzZWxlY3Rpb25tb2RlbC5qcworKysgYi93ZWIvcGdhZG1pbi9z dGF0aWMvdmVuZG9yL3NsaWNrZ3JpZC9wbHVnaW5zL3NsaWNrLmNlbGxzZWxl Y3Rpb25tb2RlbC5qcwpAQCAtODMsNDkgKzgzLDQ5IEBACiAgICAgICAgIHNl dFNlbGVjdGVkUmFuZ2VzKFtuZXcgU2xpY2suUmFuZ2UoYXJncy5yb3csIGFy Z3MuY2VsbCldKTsKICAgICAgIH0KICAgICB9Ci0KKyAgICAKICAgICBmdW5j dGlvbiBoYW5kbGVLZXlEb3duKGUpIHsKICAgICAgIC8qKioKICAgICAgICAq INCaZXkgY29kZXMKICAgICAgICAqIDM3IGxlZnQKICAgICAgICAqIDM4IHVw CiAgICAgICAgKiAzOSByaWdodAotICAgICAgICogNDAgZG93bgotICAgICAg ICovCisgICAgICAgKiA0MCBkb3duICAgICAgICAgICAgICAgICAgICAgCisg ICAgICAgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAogICAgICAgdmFyIHJhbmdlcywgbGFzdDsKLSAgICAgIHZhciBhY3Rp dmUgPSBfZ3JpZC5nZXRBY3RpdmVDZWxsKCk7CisgICAgICB2YXIgYWN0aXZl ID0gX2dyaWQuZ2V0QWN0aXZlQ2VsbCgpOyAKIAotICAgICAgaWYgKCBhY3Rp dmUgJiYgZS5zaGlmdEtleSAmJiAhZS5jdHJsS2V5ICYmICFlLmFsdEtleSAm JgorICAgICAgaWYgKCBhY3RpdmUgJiYgZS5zaGlmdEtleSAmJiAhZS5jdHJs S2V5ICYmICFlLmFsdEtleSAmJiAKICAgICAgICAgICAoZS53aGljaCA9PSAz NyB8fCBlLndoaWNoID09IDM5IHx8IGUud2hpY2ggPT0gMzggfHwgZS53aGlj aCA9PSA0MCkgKSB7Ci0KKyAgICAgIAogICAgICAgICByYW5nZXMgPSBnZXRT ZWxlY3RlZFJhbmdlcygpOwogICAgICAgICBpZiAoIXJhbmdlcy5sZW5ndGgp CiAgICAgICAgICByYW5nZXMucHVzaChuZXcgU2xpY2suUmFuZ2UoYWN0aXZl LnJvdywgYWN0aXZlLmNlbGwpKTsKLQotICAgICAgICAvLyBrZXlib2FyZCBj YW4gd29yayB3aXRoIGxhc3QgcmFuZ2Ugb25seQorICAgICAgICAgCisgICAg ICAgIC8vIGtleWJvYXJkIGNhbiB3b3JrIHdpdGggbGFzdCByYW5nZSBvbmx5 ICAgICAgICAgIAogICAgICAgICBsYXN0ID0gcmFuZ2VzLnBvcCgpOwotCisg ICAgICAgIAogICAgICAgICAvLyBjYW4ndCBoYW5kbGUgc2VsZWN0aW9uIG91 dCBvZiBhY3RpdmUgY2VsbAogICAgICAgICBpZiAoIWxhc3QuY29udGFpbnMo YWN0aXZlLnJvdywgYWN0aXZlLmNlbGwpKQogICAgICAgICAgIGxhc3QgPSBu ZXcgU2xpY2suUmFuZ2UoYWN0aXZlLnJvdywgYWN0aXZlLmNlbGwpOwotCisg ICAgICAgIAogICAgICAgICB2YXIgZFJvdyA9IGxhc3QudG9Sb3cgLSBsYXN0 LmZyb21Sb3csCiAgICAgICAgICAgICBkQ2VsbCA9IGxhc3QudG9DZWxsIC0g bGFzdC5mcm9tQ2VsbCwKICAgICAgICAgICAgIC8vIHdhbGtpbmcgZGlyZWN0 aW9uCiAgICAgICAgICAgICBkaXJSb3cgPSBhY3RpdmUucm93ID09IGxhc3Qu ZnJvbVJvdyA/IDEgOiAtMSwKICAgICAgICAgICAgIGRpckNlbGwgPSBhY3Rp dmUuY2VsbCA9PSBsYXN0LmZyb21DZWxsID8gMSA6IC0xOwotCisgICAgICAg ICAgICAgICAgIAogICAgICAgICBpZiAoZS53aGljaCA9PSAzNykgewotICAg ICAgICAgIGRDZWxsIC09IGRpckNlbGw7CisgICAgICAgICAgZENlbGwgLT0g ZGlyQ2VsbDsgCiAgICAgICAgIH0gZWxzZSBpZiAoZS53aGljaCA9PSAzOSkg ewotICAgICAgICAgIGRDZWxsICs9IGRpckNlbGwgOworICAgICAgICAgIGRD ZWxsICs9IGRpckNlbGwgOyAKICAgICAgICAgfSBlbHNlIGlmIChlLndoaWNo ID09IDM4KSB7Ci0gICAgICAgICAgZFJvdyAtPSBkaXJSb3c7CisgICAgICAg ICAgZFJvdyAtPSBkaXJSb3c7IAogICAgICAgICB9IGVsc2UgaWYgKGUud2hp Y2ggPT0gNDApIHsKLSAgICAgICAgICBkUm93ICs9IGRpclJvdzsKKyAgICAg ICAgICBkUm93ICs9IGRpclJvdzsgCiAgICAgICAgIH0KLQotICAgICAgICAv LyBkZWZpbmUgbmV3IHNlbGVjdGlvbiByYW5nZQorICAgICAgICAKKyAgICAg ICAgLy8gZGVmaW5lIG5ldyBzZWxlY3Rpb24gcmFuZ2UgCiAgICAgICAgIHZh ciBuZXdfbGFzdCA9IG5ldyBTbGljay5SYW5nZShhY3RpdmUucm93LCBhY3Rp dmUuY2VsbCwgYWN0aXZlLnJvdyArIGRpclJvdypkUm93LCBhY3RpdmUuY2Vs bCArIGRpckNlbGwqZENlbGwpOwogICAgICAgICBpZiAocmVtb3ZlSW52YWxp ZFJhbmdlcyhbbmV3X2xhc3RdKS5sZW5ndGgpIHsKICAgICAgICAgICByYW5n ZXMucHVzaChuZXdfbGFzdCk7CkBAIC0xMzQsMTQgKzEzNCwxNCBAQAogICAg ICAgICAgX2dyaWQuc2Nyb2xsUm93SW50b1ZpZXcodmlld1Jvdyk7CiAgICAg ICAgICBfZ3JpZC5zY3JvbGxDZWxsSW50b1ZpZXcodmlld1Jvdywgdmlld0Nl bGwpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UKKyAgICAgICAgZWxzZSAK ICAgICAgICAgICByYW5nZXMucHVzaChsYXN0KTsKIAotICAgICAgICBzZXRT ZWxlY3RlZFJhbmdlcyhyYW5nZXMpOwotCisgICAgICAgIHNldFNlbGVjdGVk UmFuZ2VzKHJhbmdlcyk7ICAKKyAgICAgICAKICAgICAgICAgZS5wcmV2ZW50 RGVmYXVsdCgpOwotICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwotICAg ICAgfQorICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOyAgICAgICAgCisg ICAgICB9ICAgICAgICAgICAKICAgICB9CiAKICAgICAkLmV4dGVuZCh0aGlz LCB7CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9zdGF0aWMvdmVuZG9yL3Ns aWNrZ3JpZC9wbHVnaW5zL3NsaWNrLmhlYWRlcmJ1dHRvbnMuanMgYi93ZWIv cGdhZG1pbi9zdGF0aWMvdmVuZG9yL3NsaWNrZ3JpZC9wbHVnaW5zL3NsaWNr LmhlYWRlcmJ1dHRvbnMuanMKaW5kZXggOGU2MTI3MzUuLmQ3YzA2MTk1IDEw MDY0NAotLS0gYS93ZWIvcGdhZG1pbi9zdGF0aWMvdmVuZG9yL3NsaWNrZ3Jp ZC9wbHVnaW5zL3NsaWNrLmhlYWRlcmJ1dHRvbnMuanMKKysrIGIvd2ViL3Bn YWRtaW4vc3RhdGljL3ZlbmRvci9zbGlja2dyaWQvcGx1Z2lucy9zbGljay5o ZWFkZXJidXR0b25zLmpzCkBAIC0xMjIsMTEgKzEyMiwxMSBAQAogICAgICAg ICAgIH0KIAogICAgICAgICAgIGlmIChidXR0b24uaGFuZGxlcikgewotICAg ICAgICAgICAgYnRuLmJpbmQoImNsaWNrIiwgYnV0dG9uLmhhbmRsZXIpOwor ICAgICAgICAgICAgYnRuLm9uKCJjbGljayIsIGJ1dHRvbi5oYW5kbGVyKTsK ICAgICAgICAgICB9CiAKICAgICAgICAgICBidG4KLSAgICAgICAgICAgIC5i aW5kKCJjbGljayIsIGhhbmRsZUJ1dHRvbkNsaWNrKQorICAgICAgICAgICAg Lm9uKCJjbGljayIsIGhhbmRsZUJ1dHRvbkNsaWNrKQogICAgICAgICAgICAg LmFwcGVuZFRvKGFyZ3Mubm9kZSk7CiAgICAgICAgIH0KICAgICAgIH0KQEAg LTE3NCw0ICsxNzQsNCBAQAogICAgICAgIm9uQ29tbWFuZCI6IG5ldyBTbGlj ay5FdmVudCgpCiAgICAgfSk7CiAgIH0KLX0pKGpRdWVyeSk7ClwgTm8gbmV3 bGluZSBhdCBlbmQgb2YgZmlsZQorfSkoalF1ZXJ5KTsKZGlmZiAtLWdpdCBh L3dlYi9wZ2FkbWluL3N0YXRpYy92ZW5kb3Ivc2xpY2tncmlkL3BsdWdpbnMv c2xpY2suaGVhZGVybWVudS5qcyBiL3dlYi9wZ2FkbWluL3N0YXRpYy92ZW5k b3Ivc2xpY2tncmlkL3BsdWdpbnMvc2xpY2suaGVhZGVybWVudS5qcwppbmRl eCBlYzgyNDRkYS4uYzQwMzIzMDEgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWlu L3N0YXRpYy92ZW5kb3Ivc2xpY2tncmlkL3BsdWdpbnMvc2xpY2suaGVhZGVy bWVudS5qcworKysgYi93ZWIvcGdhZG1pbi9zdGF0aWMvdmVuZG9yL3NsaWNr Z3JpZC9wbHVnaW5zL3NsaWNrLmhlYWRlcm1lbnUuanMKQEAgLTEwMCwxMyAr MTAwLDEzIEBACiAgICAgICBfZ3JpZC5zZXRDb2x1bW5zKF9ncmlkLmdldENv bHVtbnMoKSk7CiAKICAgICAgIC8vIEhpZGUgdGhlIG1lbnUgb24gb3V0c2lk ZSBjbGljay4KLSAgICAgICQoZG9jdW1lbnQuYm9keSkuYmluZCgibW91c2Vk b3duIiwgaGFuZGxlQm9keU1vdXNlRG93bik7CisgICAgICAkKGRvY3VtZW50 LmJvZHkpLm9uKCJtb3VzZWRvd24iLCBoYW5kbGVCb2R5TW91c2VEb3duKTsK ICAgICB9CiAKIAogICAgIGZ1bmN0aW9uIGRlc3Ryb3koKSB7CiAgICAgICBf aGFuZGxlci51bnN1YnNjcmliZUFsbCgpOwotICAgICAgJChkb2N1bWVudC5i b2R5KS51bmJpbmQoIm1vdXNlZG93biIsIGhhbmRsZUJvZHlNb3VzZURvd24p OworICAgICAgJChkb2N1bWVudC5ib2R5KS5vZmYoIm1vdXNlZG93biIsIGhh bmRsZUJvZHlNb3VzZURvd24pOwogICAgIH0KIAogCkBAIC0xNDksNyArMTQ5 LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgICRlbAotICAgICAgICAgIC5i aW5kKCJjbGljayIsIHNob3dNZW51KQorICAgICAgICAgIC5vbigiY2xpY2si LCBzaG93TWVudSkKICAgICAgICAgICAuYXBwZW5kVG8oYXJncy5ub2RlKTsK ICAgICAgIH0KICAgICB9CkBAIC0xOTUsNyArMTk1LDcgQEAKICAgICAgICAg ICAuZGF0YSgiY29tbWFuZCIsIGl0ZW0uY29tbWFuZCB8fCAnJykKICAgICAg ICAgICAuZGF0YSgiY29sdW1uIiwgY29sdW1uRGVmKQogICAgICAgICAgIC5k YXRhKCJpdGVtIiwgaXRlbSkKLSAgICAgICAgICAuYmluZCgiY2xpY2siLCBo YW5kbGVNZW51SXRlbUNsaWNrKQorICAgICAgICAgIC5vbigiY2xpY2siLCBo YW5kbGVNZW51SXRlbUNsaWNrKQogICAgICAgICAgIC5hcHBlbmRUbygkbWVu dSk7CiAKICAgICAgICAgaWYgKGl0ZW0uZGlzYWJsZWQpIHsKZGlmZiAtLWdp dCBhL3dlYi9wZ2FkbWluL3N0YXRpYy92ZW5kb3Ivc2xpY2tncmlkL3BsdWdp bnMvc2xpY2sucm93c2VsZWN0aW9ubW9kZWwuanMgYi93ZWIvcGdhZG1pbi9z dGF0aWMvdmVuZG9yL3NsaWNrZ3JpZC9wbHVnaW5zL3NsaWNrLnJvd3NlbGVj dGlvbm1vZGVsLmpzCmluZGV4IDE5MGIwZjcxLi44NTUzZDA1MCAxMDA2NDQK LS0tIGEvd2ViL3BnYWRtaW4vc3RhdGljL3ZlbmRvci9zbGlja2dyaWQvcGx1 Z2lucy9zbGljay5yb3dzZWxlY3Rpb25tb2RlbC5qcworKysgYi93ZWIvcGdh ZG1pbi9zdGF0aWMvdmVuZG9yL3NsaWNrZ3JpZC9wbHVnaW5zL3NsaWNrLnJv d3NlbGVjdGlvbm1vZGVsLmpzCkBAIC0xMjEsOCArMTIxLDggQEAKIAogICAg ICAgICBpZiAoYWN0aXZlID49IDAgJiYgYWN0aXZlIDwgX2dyaWQuZ2V0RGF0 YUxlbmd0aCgpKSB7CiAgICAgICAgICAgX2dyaWQuc2Nyb2xsUm93SW50b1Zp ZXcoYWN0aXZlKTsKLSAgICAgICAgICBfcmFuZ2VzID0gcm93c1RvUmFuZ2Vz KGdldFJvd3NSYW5nZSh0b3AsIGJvdHRvbSkpOwotICAgICAgICAgIHNldFNl bGVjdGVkUmFuZ2VzKF9yYW5nZXMpOworICAgICAgICAgIHZhciB0ZW1wUmFu Z2VzID0gcm93c1RvUmFuZ2VzKGdldFJvd3NSYW5nZSh0b3AsIGJvdHRvbSkp OworICAgICAgICAgIHNldFNlbGVjdGVkUmFuZ2VzKHRlbXBSYW5nZXMpOwog ICAgICAgICB9CiAKICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwpAQCAt MTY2LDggKzE2Niw4IEBACiAgICAgICAgIF9ncmlkLnNldEFjdGl2ZUNlbGwo Y2VsbC5yb3csIGNlbGwuY2VsbCk7CiAgICAgICB9CiAKLSAgICAgIF9yYW5n ZXMgPSByb3dzVG9SYW5nZXMoc2VsZWN0aW9uKTsKLSAgICAgIHNldFNlbGVj dGVkUmFuZ2VzKF9yYW5nZXMpOworICAgICAgdmFyIHRlbXBSYW5nZXMgPSBy b3dzVG9SYW5nZXMoc2VsZWN0aW9uKTsKKyAgICAgIHNldFNlbGVjdGVkUmFu Z2VzKHRlbXBSYW5nZXMpOwogICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFn YXRpb24oKTsKIAogICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS93 ZWIvcGdhZG1pbi9zdGF0aWMvdmVuZG9yL3NsaWNrZ3JpZC9zbGljay1kZWZh dWx0LXRoZW1lLmNzcyBiL3dlYi9wZ2FkbWluL3N0YXRpYy92ZW5kb3Ivc2xp Y2tncmlkL3NsaWNrLWRlZmF1bHQtdGhlbWUuY3NzCmluZGV4IDIzMzhkNmU3 Li5lZmM3NDE1NCAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vc3RhdGljL3Zl bmRvci9zbGlja2dyaWQvc2xpY2stZGVmYXVsdC10aGVtZS5jc3MKKysrIGIv d2ViL3BnYWRtaW4vc3RhdGljL3ZlbmRvci9zbGlja2dyaWQvc2xpY2stZGVm YXVsdC10aGVtZS5jc3MKQEAgLTI5LDIzICsyOSwyMyBAQCBjbGFzc2VzIHNo b3VsZCBhbHRlciB0aG9zZSEKICAgaGVpZ2h0OiAxMDAlOwogfQogCi0uc3Iu dWktc3RhdGUtYWN0aXZlIHsKKy5zbGljay1yb3cudWktc3RhdGUtYWN0aXZl IHsKICAgYmFja2dyb3VuZDogI0Y1RjdENzsKIH0KIAotLnNyIHsKKy5zbGlj ay1yb3cgewogICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgIGJhY2tncm91bmQ6 IHdoaXRlOwogICBib3JkZXI6IDBweDsKICAgbGluZS1oZWlnaHQ6IDIwcHg7 CiB9CiAKLS5zci5zZWxlY3RlZCB7Cisuc2xpY2stcm93LnNlbGVjdGVkIHsK ICAgei1pbmRleDogMTA7CiAgIGJhY2tncm91bmQ6ICNERkU4RjY7CiB9CiAK LS5zYyB7Cisuc2xpY2stY2VsbCB7CiAgIHBhZGRpbmctbGVmdDogNHB4Owog ICBwYWRkaW5nLXJpZ2h0OiA0cHg7CiB9CkBAIC03MywxMSArNzMsMTEgQEAg Y2xhc3NlcyBzaG91bGQgYWx0ZXIgdGhvc2UhCiAgIGJhY2tncm91bmQ6IHdo aXRlOwogfQogCi0uc2Muc2VsZWN0ZWQgeworLnNsaWNrLWNlbGwuc2VsZWN0 ZWQgewogICBiYWNrZ3JvdW5kLWNvbG9yOiBiZWlnZTsKIH0KIAotLnNjLmFj dGl2ZSB7Cisuc2xpY2stY2VsbC5hY3RpdmUgewogICBib3JkZXItY29sb3I6 IGdyYXk7CiAgIGJvcmRlci1zdHlsZTogc29saWQ7CiB9CkBAIC04NiwyNSAr ODYsMjUgQEAgY2xhc3NlcyBzaG91bGQgYWx0ZXIgdGhvc2UhCiAgIGJhY2tn cm91bmQ6IHNpbHZlciAhaW1wb3J0YW50OwogfQogCi0uc3Iub2RkIHsKKy5z bGljay1yb3cub2RkIHsKICAgYmFja2dyb3VuZDogI2ZhZmFmYTsKIH0KIAot LnNyLnVpLXN0YXRlLWFjdGl2ZSB7Cisuc2xpY2stcm93LnVpLXN0YXRlLWFj dGl2ZSB7CiAgIGJhY2tncm91bmQ6ICNGNUY3RDc7CiB9CiAKLS5zci5sb2Fk aW5nIHsKKy5zbGljay1yb3cubG9hZGluZyB7CiAgIG9wYWNpdHk6IDAuNTsK ICAgZmlsdGVyOiBhbHBoYShvcGFjaXR5ID0gNTApOwogfQogCi0uc2MuaW52 YWxpZCB7Cisuc2xpY2stY2VsbC5pbnZhbGlkIHsKICAgYm9yZGVyLWNvbG9y OiByZWQ7CiAgIC1tb3otYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjJzOwogICAt d2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogMC4yczsKICAgLW1vei1hbmlt YXRpb24tbmFtZTogc2xpY2tncmlkLWludmFsaWQtaGlsaXRlOwotICAtd2Vi a2l0LWFuaW1hdGlvbi1uYW1lOiBzbGlja2dyaWQtaW52YWxpZC1oaWxpdGU7 CisgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IHNsaWNrZ3JpZC1pbnZhbGlk LWhpbGl0ZTsgIAogfQogCiBALW1vei1rZXlmcmFtZXMgc2xpY2tncmlkLWlu dmFsaWQtaGlsaXRlIHsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRp Yy92ZW5kb3Ivc2xpY2tncmlkL3NsaWNrLmNvcmUuanMgYi93ZWIvcGdhZG1p bi9zdGF0aWMvdmVuZG9yL3NsaWNrZ3JpZC9zbGljay5jb3JlLmpzCmluZGV4 IGM0ZjA0ZWM0Li4xODQ2YTUwYSAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4v c3RhdGljL3ZlbmRvci9zbGlja2dyaWQvc2xpY2suY29yZS5qcworKysgYi93 ZWIvcGdhZG1pbi9zdGF0aWMvdmVuZG9yL3NsaWNrZ3JpZC9zbGljay5jb3Jl LmpzCkBAIC00MCw3ICs0MCw4IEBACiAgICAgICAgIFJJR0hUOiAzOSwKICAg ICAgICAgVEFCOiA5LAogICAgICAgICBVUDogMzgKLSAgICAgIH0KKyAgICAg IH0sCisgICAgICAicHJlQ2xpY2tDbGFzc05hbWUiIDogInNsaWNrLWVkaXQt cHJlY2xpY2siCiAgICAgfQogICB9KTsKIApAQCAtNDIzLDcgKzQyNCw3IEBA CiAKICAgICAvKioqCiAgICAgICogU2V0cyB0aGUgc3BlY2lmaWVkIGVkaXQg Y29udHJvbGxlciBhcyB0aGUgYWN0aXZlIGVkaXQgY29udHJvbGxlciAoYWNx dWlyZSBlZGl0IGxvY2spLgotICAgICAqIElmIGFub3RoZXIgZWRpdCBjb250 cm9sbGVyIGlzIGFscmVhZHkgYWN0aXZlLCBhbmQgZXhjZXB0aW9uIHdpbGwg YmUgdGhyb3duLgorICAgICAqIElmIGFub3RoZXIgZWRpdCBjb250cm9sbGVy IGlzIGFscmVhZHkgYWN0aXZlLCBhbmQgZXhjZXB0aW9uIHdpbGwgYmUgdGhy b3cgbmV3IEVycm9yKC4KICAgICAgKiBAbWV0aG9kIGFjdGl2YXRlCiAgICAg ICogQHBhcmFtIGVkaXRDb250cm9sbGVyIHtFZGl0Q29udHJvbGxlcn0gZWRp dCBjb250cm9sbGVyIGFjcXVpcmluZyB0aGUgbG9jawogICAgICAqLwpAQCAt NDMyLDI2ICs0MzMsMjYgQEAKICAgICAgICAgcmV0dXJuOwogICAgICAgfQog ICAgICAgaWYgKGFjdGl2ZUVkaXRDb250cm9sbGVyICE9PSBudWxsKSB7Ci0g ICAgICAgIHRocm93ICJTbGlja0dyaWQuRWRpdG9yTG9jay5hY3RpdmF0ZTog YW4gZWRpdENvbnRyb2xsZXIgaXMgc3RpbGwgYWN0aXZlLCBjYW4ndCBhY3Rp dmF0ZSBhbm90aGVyIGVkaXRDb250cm9sbGVyIjsKKyAgICAgICAgdGhyb3cg bmV3IEVycm9yKCJTbGlja0dyaWQuRWRpdG9yTG9jay5hY3RpdmF0ZTogYW4g ZWRpdENvbnRyb2xsZXIgaXMgc3RpbGwgYWN0aXZlLCBjYW4ndCBhY3RpdmF0 ZSBhbm90aGVyIGVkaXRDb250cm9sbGVyIik7CiAgICAgICB9CiAgICAgICBp ZiAoIWVkaXRDb250cm9sbGVyLmNvbW1pdEN1cnJlbnRFZGl0KSB7Ci0gICAg ICAgIHRocm93ICJTbGlja0dyaWQuRWRpdG9yTG9jay5hY3RpdmF0ZTogZWRp dENvbnRyb2xsZXIgbXVzdCBpbXBsZW1lbnQgLmNvbW1pdEN1cnJlbnRFZGl0 KCkiOworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlNsaWNrR3JpZC5FZGl0 b3JMb2NrLmFjdGl2YXRlOiBlZGl0Q29udHJvbGxlciBtdXN0IGltcGxlbWVu dCAuY29tbWl0Q3VycmVudEVkaXQoKSIpOwogICAgICAgfQogICAgICAgaWYg KCFlZGl0Q29udHJvbGxlci5jYW5jZWxDdXJyZW50RWRpdCkgewotICAgICAg ICB0aHJvdyAiU2xpY2tHcmlkLkVkaXRvckxvY2suYWN0aXZhdGU6IGVkaXRD b250cm9sbGVyIG11c3QgaW1wbGVtZW50IC5jYW5jZWxDdXJyZW50RWRpdCgp IjsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJTbGlja0dyaWQuRWRpdG9y TG9jay5hY3RpdmF0ZTogZWRpdENvbnRyb2xsZXIgbXVzdCBpbXBsZW1lbnQg LmNhbmNlbEN1cnJlbnRFZGl0KCkiKTsKICAgICAgIH0KICAgICAgIGFjdGl2 ZUVkaXRDb250cm9sbGVyID0gZWRpdENvbnRyb2xsZXI7CiAgICAgfTsKIAog ICAgIC8qKioKICAgICAgKiBVbnNldHMgdGhlIHNwZWNpZmllZCBlZGl0IGNv bnRyb2xsZXIgYXMgdGhlIGFjdGl2ZSBlZGl0IGNvbnRyb2xsZXIgKHJlbGVh c2UgZWRpdCBsb2NrKS4KLSAgICAgKiBJZiB0aGUgc3BlY2lmaWVkIGVkaXQg Y29udHJvbGxlciBpcyBub3QgdGhlIGFjdGl2ZSBvbmUsIGFuIGV4Y2VwdGlv biB3aWxsIGJlIHRocm93bi4KKyAgICAgKiBJZiB0aGUgc3BlY2lmaWVkIGVk aXQgY29udHJvbGxlciBpcyBub3QgdGhlIGFjdGl2ZSBvbmUsIGFuIGV4Y2Vw dGlvbiB3aWxsIGJlIHRocm93IG5ldyBFcnJvciguCiAgICAgICogQG1ldGhv ZCBkZWFjdGl2YXRlCiAgICAgICogQHBhcmFtIGVkaXRDb250cm9sbGVyIHtF ZGl0Q29udHJvbGxlcn0gZWRpdCBjb250cm9sbGVyIHJlbGVhc2luZyB0aGUg bG9jawogICAgICAqLwogICAgIHRoaXMuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9u IChlZGl0Q29udHJvbGxlcikgewogICAgICAgaWYgKGFjdGl2ZUVkaXRDb250 cm9sbGVyICE9PSBlZGl0Q29udHJvbGxlcikgewotICAgICAgICB0aHJvdyAi U2xpY2tHcmlkLkVkaXRvckxvY2suZGVhY3RpdmF0ZTogc3BlY2lmaWVkIGVk aXRDb250cm9sbGVyIGlzIG5vdCB0aGUgY3VycmVudGx5IGFjdGl2ZSBvbmUi OworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlNsaWNrR3JpZC5FZGl0b3JM b2NrLmRlYWN0aXZhdGU6IHNwZWNpZmllZCBlZGl0Q29udHJvbGxlciBpcyBu b3QgdGhlIGN1cnJlbnRseSBhY3RpdmUgb25lIik7CiAgICAgICB9CiAgICAg ICBhY3RpdmVFZGl0Q29udHJvbGxlciA9IG51bGw7CiAgICAgfTsKZGlmZiAt LWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRpYy92ZW5kb3Ivc2xpY2tncmlkL3Ns aWNrLmRhdGF2aWV3LmpzIGIvd2ViL3BnYWRtaW4vc3RhdGljL3ZlbmRvci9z bGlja2dyaWQvc2xpY2suZGF0YXZpZXcuanMKaW5kZXggZjYyZGY2NjkuLmIw MDRiODAwIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9zdGF0aWMvdmVuZG9y L3NsaWNrZ3JpZC9zbGljay5kYXRhdmlldy5qcworKysgYi93ZWIvcGdhZG1p bi9zdGF0aWMvdmVuZG9yL3NsaWNrZ3JpZC9zbGljay5kYXRhdmlldy5qcwpA QCAtMTA3LDcgKzEwNyw3IEBACiAgICAgICBmb3IgKHZhciBpID0gc3RhcnRp bmdJbmRleCwgbCA9IGl0ZW1zLmxlbmd0aDsgaSA8IGw7IGkrKykgewogICAg ICAgICBpZCA9IGl0ZW1zW2ldW2lkUHJvcGVydHldOwogICAgICAgICBpZiAo aWQgPT09IHVuZGVmaW5lZCkgewotICAgICAgICAgIHRocm93ICJFYWNoIGRh dGEgZWxlbWVudCBtdXN0IGltcGxlbWVudCBhIHVuaXF1ZSAnaWQnIHByb3Bl cnR5IjsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkVhY2ggZGF0YSBl bGVtZW50IG11c3QgaW1wbGVtZW50IGEgdW5pcXVlICdpZCcgcHJvcGVydHki KTsKICAgICAgICAgfQogICAgICAgICBpZHhCeUlkW2lkXSA9IGk7CiAgICAg ICB9CkBAIC0xMTgsNyArMTE4LDcgQEAKICAgICAgIGZvciAodmFyIGkgPSAw LCBsID0gaXRlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgIGlk ID0gaXRlbXNbaV1baWRQcm9wZXJ0eV07CiAgICAgICAgIGlmIChpZCA9PT0g dW5kZWZpbmVkIHx8IGlkeEJ5SWRbaWRdICE9PSBpKSB7Ci0gICAgICAgICAg dGhyb3cgIkVhY2ggZGF0YSBlbGVtZW50IG11c3QgaW1wbGVtZW50IGEgdW5p cXVlICdpZCcgcHJvcGVydHkiOworICAgICAgICAgIHRocm93IG5ldyBFcnJv cigiRWFjaCBkYXRhIGVsZW1lbnQgbXVzdCBpbXBsZW1lbnQgYSB1bmlxdWUg J2lkJyBwcm9wZXJ0eSIpOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpA QCAtMjEwLDYgKzIxMCwxNSBAQAogICAgICAgfQogICAgIH0KIAorICAgIGZ1 bmN0aW9uIGdldEZpbHRlcmVkSXRlbXMoKXsKKyAgICAgIHJldHVybiBmaWx0 ZXJlZEl0ZW1zOworICAgIH0KKworCisgICAgZnVuY3Rpb24gZ2V0RmlsdGVy KCl7CisgICAgICByZXR1cm4gZmlsdGVyOworICAgIH0KKyAgICAKICAgICBm dW5jdGlvbiBzZXRGaWx0ZXIoZmlsdGVyRm4pIHsKICAgICAgIGZpbHRlciA9 IGZpbHRlckZuOwogICAgICAgaWYgKG9wdGlvbnMuaW5saW5lRmlsdGVycykg ewpAQCAtMzMwLDcgKzMzOSw3IEBACiAKICAgICBmdW5jdGlvbiB1cGRhdGVJ dGVtKGlkLCBpdGVtKSB7CiAgICAgICBpZiAoaWR4QnlJZFtpZF0gPT09IHVu ZGVmaW5lZCB8fCBpZCAhPT0gaXRlbVtpZFByb3BlcnR5XSkgewotICAgICAg ICB0aHJvdyAiSW52YWxpZCBvciBub24tbWF0Y2hpbmcgaWQiOworICAgICAg ICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgb3Igbm9uLW1hdGNoaW5nIGlk Iik7CiAgICAgICB9CiAgICAgICBpdGVtc1tpZHhCeUlkW2lkXV0gPSBpdGVt OwogICAgICAgaWYgKCF1cGRhdGVkKSB7CkBAIC0zNTUsNyArMzY0LDcgQEAK ICAgICBmdW5jdGlvbiBkZWxldGVJdGVtKGlkKSB7CiAgICAgICB2YXIgaWR4 ID0gaWR4QnlJZFtpZF07CiAgICAgICBpZiAoaWR4ID09PSB1bmRlZmluZWQp IHsKLSAgICAgICAgdGhyb3cgIkludmFsaWQgaWQiOworICAgICAgICB0aHJv dyBuZXcgRXJyb3IoIkludmFsaWQgaWQiKTsKICAgICAgIH0KICAgICAgIGRl bGV0ZSBpZHhCeUlkW2lkXTsKICAgICAgIGl0ZW1zLnNwbGljZShpZHgsIDEp OwpAQCAtNTE2LDcgKzUyNSw3IEBACiAgICAgICAgICAgZ3JvdXAgPSBncm91 cHNbaV07CiAgICAgICAgICAgZ3JvdXAuZ3JvdXBzID0gZXh0cmFjdEdyb3Vw cyhncm91cC5yb3dzLCBncm91cCk7CiAgICAgICAgIH0KLSAgICAgIH0KKyAg ICAgIH0gICAgICAKIAogICAgICAgZ3JvdXBzLnNvcnQoZ3JvdXBpbmdJbmZv c1tsZXZlbF0uY29tcGFyZXIpOwogCkBAIC01NjYsNyArNTc1LDcgQEAKICAg ICAgIGxldmVsID0gbGV2ZWwgfHwgMDsKICAgICAgIHZhciBnaSA9IGdyb3Vw aW5nSW5mb3NbbGV2ZWxdOwogICAgICAgdmFyIGdyb3VwQ29sbGFwc2VkID0g Z2kuY29sbGFwc2VkOwotICAgICAgdmFyIHRvZ2dsZWRHcm91cHMgPSB0b2dn bGVkR3JvdXBzQnlMZXZlbFtsZXZlbF07CisgICAgICB2YXIgdG9nZ2xlZEdy b3VwcyA9IHRvZ2dsZWRHcm91cHNCeUxldmVsW2xldmVsXTsgICAgICAKICAg ICAgIHZhciBpZHggPSBncm91cHMubGVuZ3RoLCBnOwogICAgICAgd2hpbGUg KGlkeC0tKSB7CiAgICAgICAgIGcgPSBncm91cHNbaWR4XTsKQEAgLTU4OCw3 ICs1OTcsNyBAQAogICAgICAgICBnLmNvbGxhcHNlZCA9IGdyb3VwQ29sbGFw c2VkIF4gdG9nZ2xlZEdyb3Vwc1tnLmdyb3VwaW5nS2V5XTsKICAgICAgICAg Zy50aXRsZSA9IGdpLmZvcm1hdHRlciA/IGdpLmZvcm1hdHRlcihnKSA6IGcu dmFsdWU7CiAgICAgICB9Ci0gICAgfQorICAgIH0gCiAKICAgICBmdW5jdGlv biBmbGF0dGVuR3JvdXBlZFJvd3MoZ3JvdXBzLCBsZXZlbCkgewogICAgICAg bGV2ZWwgPSBsZXZlbCB8fCAwOwpAQCAtNzYyLDE0ICs3NzEsMTcgQEAKICAg ICAgIC8vIGdldCB0aGUgY3VycmVudCBwYWdlCiAgICAgICB2YXIgcGFnZWQ7 CiAgICAgICBpZiAocGFnZXNpemUpIHsKLSAgICAgICAgaWYgKGZpbHRlcmVk SXRlbXMubGVuZ3RoIDwgcGFnZW51bSAqIHBhZ2VzaXplKSB7Ci0gICAgICAg ICAgcGFnZW51bSA9IE1hdGguZmxvb3IoZmlsdGVyZWRJdGVtcy5sZW5ndGgg LyBwYWdlc2l6ZSk7CisgICAgICAgIGlmIChmaWx0ZXJlZEl0ZW1zLmxlbmd0 aCA8PSBwYWdlbnVtICogcGFnZXNpemUpIHsKKyAgICAgICAgICBpZiAoZmls dGVyZWRJdGVtcy5sZW5ndGggPT09IDApIHsKKyAgICAgICAgICAgIHBhZ2Vu dW0gPSAwOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwYWdl bnVtID0gTWF0aC5mbG9vcigoZmlsdGVyZWRJdGVtcy5sZW5ndGggLSAxKSAv IHBhZ2VzaXplKTsKKyAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAg cGFnZWQgPSBmaWx0ZXJlZEl0ZW1zLnNsaWNlKHBhZ2VzaXplICogcGFnZW51 bSwgcGFnZXNpemUgKiBwYWdlbnVtICsgcGFnZXNpemUpOwogICAgICAgfSBl bHNlIHsKICAgICAgICAgcGFnZWQgPSBmaWx0ZXJlZEl0ZW1zOwogICAgICAg fQotCiAgICAgICByZXR1cm4ge3RvdGFsUm93czogZmlsdGVyZWRJdGVtcy5s ZW5ndGgsIHJvd3M6IHBhZ2VkfTsKICAgICB9CiAKQEAgLTkxNiw3ICs5Mjgs NyBAQAogICAgICAgICAgIGluSGFuZGxlciA9IHRydWU7CiAgICAgICAgICAg dmFyIHNlbGVjdGVkUm93cyA9IHNlbGYubWFwSWRzVG9Sb3dzKHNlbGVjdGVk Um93SWRzKTsKICAgICAgICAgICBpZiAoIXByZXNlcnZlSGlkZGVuKSB7Ci0g ICAgICAgICAgICBzZXRTZWxlY3RlZFJvd0lkcyhzZWxmLm1hcFJvd3NUb0lk cyhzZWxlY3RlZFJvd3MpKTsKKyAgICAgICAgICAgIHNldFNlbGVjdGVkUm93 SWRzKHNlbGYubWFwUm93c1RvSWRzKHNlbGVjdGVkUm93cykpOyAgICAgICAK ICAgICAgICAgICB9CiAgICAgICAgICAgZ3JpZC5zZXRTZWxlY3RlZFJvd3Mo c2VsZWN0ZWRSb3dzKTsKICAgICAgICAgICBpbkhhbmRsZXIgPSBmYWxzZTsK QEAgLTk4MCw2ICs5OTIsMTAgQEAKICAgICAgICAgaWYgKGtleSAhPSBhcmdz LmtleSkgeyByZXR1cm47IH0KICAgICAgICAgaWYgKGFyZ3MuaGFzaCkgewog ICAgICAgICAgIHN0b3JlQ2VsbENzc1N0eWxlcyhhcmdzLmhhc2gpOworICAg ICAgICB9IGVsc2UgeworICAgICAgICAgIGdyaWQub25DZWxsQ3NzU3R5bGVz Q2hhbmdlZC51bnN1YnNjcmliZShzdHlsZUNoYW5nZWQpOworICAgICAgICAg IHNlbGYub25Sb3dzQ2hhbmdlZC51bnN1YnNjcmliZSh1cGRhdGUpOworICAg ICAgICAgIHNlbGYub25Sb3dDb3VudENoYW5nZWQudW5zdWJzY3JpYmUodXBk YXRlKTsgICAgICAgICAgCiAgICAgICAgIH0KICAgICAgIH0pOwogCkBAIC05 OTcsNiArMTAxMyw4IEBACiAgICAgICAiZ2V0SXRlbXMiOiBnZXRJdGVtcywK ICAgICAgICJzZXRJdGVtcyI6IHNldEl0ZW1zLAogICAgICAgInNldEZpbHRl ciI6IHNldEZpbHRlciwKKyAgICAgICJnZXRGaWx0ZXIiOiBnZXRGaWx0ZXIs CisgICAgICAiZ2V0RmlsdGVyZWRJdGVtcyI6IGdldEZpbHRlcmVkSXRlbXMs CiAgICAgICAic29ydCI6IHNvcnQsCiAgICAgICAiZmFzdFNvcnQiOiBmYXN0 U29ydCwKICAgICAgICJyZVNvcnQiOiByZVNvcnQsCmRpZmYgLS1naXQgYS93 ZWIvcGdhZG1pbi9zdGF0aWMvdmVuZG9yL3NsaWNrZ3JpZC9zbGljay5lZGl0 b3JzLmpzIGIvd2ViL3BnYWRtaW4vc3RhdGljL3ZlbmRvci9zbGlja2dyaWQv c2xpY2suZWRpdG9ycy5qcwppbmRleCBlODUyNTkyYy4uMzNiNGUyNjYgMTAw NjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3N0YXRpYy92ZW5kb3Ivc2xpY2tncmlk L3NsaWNrLmVkaXRvcnMuanMKKysrIGIvd2ViL3BnYWRtaW4vc3RhdGljL3Zl bmRvci9zbGlja2dyaWQvc2xpY2suZWRpdG9ycy5qcwpAQCAtMTEsNyArMTEs NyBAQAogICAgICAgIkVkaXRvcnMiOiB7CiAgICAgICAgICJUZXh0IjogVGV4 dEVkaXRvciwKICAgICAgICAgIkludGVnZXIiOiBJbnRlZ2VyRWRpdG9yLAot CQkiRmxvYXQiOiBGbG9hdEVkaXRvciwKKyAgICAgICAgIkZsb2F0IjogRmxv YXRFZGl0b3IsCiAgICAgICAgICJEYXRlIjogRGF0ZUVkaXRvciwKICAgICAg ICAgIlllc05vU2VsZWN0IjogWWVzTm9TZWxlY3RFZGl0b3IsCiAgICAgICAg ICJDaGVja2JveCI6IENoZWNrYm94RWRpdG9yLApAQCAtMjksNyArMjksNyBA QAogICAgIHRoaXMuaW5pdCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICRpbnB1 dCA9ICQoIjxJTlBVVCB0eXBlPXRleHQgY2xhc3M9J2VkaXRvci10ZXh0JyAv PiIpCiAgICAgICAgICAgLmFwcGVuZFRvKGFyZ3MuY29udGFpbmVyKQotICAg ICAgICAgIC5iaW5kKCJrZXlkb3duLm5hdiIsIGZ1bmN0aW9uIChlKSB7Cisg ICAgICAgICAgLm9uKCJrZXlkb3duLm5hdiIsIGZ1bmN0aW9uIChlKSB7CiAg ICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAkLnVpLmtleUNvZGUuTEVG VCB8fCBlLmtleUNvZGUgPT09ICQudWkua2V5Q29kZS5SSUdIVCkgewogICAg ICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOwogICAg ICAgICAgICAgfQpAQCAtOTgsNyArOTgsNyBAQAogICAgIHRoaXMuaW5pdCA9 IGZ1bmN0aW9uICgpIHsKICAgICAgICRpbnB1dCA9ICQoIjxJTlBVVCB0eXBl PXRleHQgY2xhc3M9J2VkaXRvci10ZXh0JyAvPiIpOwogCi0gICAgICAkaW5w dXQuYmluZCgia2V5ZG93bi5uYXYiLCBmdW5jdGlvbiAoZSkgeworICAgICAg JGlucHV0Lm9uKCJrZXlkb3duLm5hdiIsIGZ1bmN0aW9uIChlKSB7CiAgICAg ICAgIGlmIChlLmtleUNvZGUgPT09ICQudWkua2V5Q29kZS5MRUZUIHx8IGUu a2V5Q29kZSA9PT0gJC51aS5rZXlDb2RlLlJJR0hUKSB7CiAgICAgICAgICAg ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTsKICAgICAgICAgfQpAQCAt MTY3LDcgKzE2Nyw3IEBACiAgICAgdGhpcy5pbml0ID0gZnVuY3Rpb24gKCkg ewogICAgICAgJGlucHV0ID0gJCgiPElOUFVUIHR5cGU9dGV4dCBjbGFzcz0n ZWRpdG9yLXRleHQnIC8+Iik7CiAKLSAgICAgICRpbnB1dC5iaW5kKCJrZXlk b3duLm5hdiIsIGZ1bmN0aW9uIChlKSB7CisgICAgICAkaW5wdXQub24oImtl eWRvd24ubmF2IiwgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgaWYgKGUua2V5 Q29kZSA9PT0gJC51aS5rZXlDb2RlLkxFRlQgfHwgZS5rZXlDb2RlID09PSAk LnVpLmtleUNvZGUuUklHSFQpIHsKICAgICAgICAgICBlLnN0b3BJbW1lZGlh dGVQcm9wYWdhdGlvbigpOwogICAgICAgICB9CkBAIC0xODUsMjQgKzE4NSwy NCBAQAogICAgICAgJGlucHV0LmZvY3VzKCk7CiAgICAgfTsKIAotCWZ1bmN0 aW9uIGdldERlY2ltYWxQbGFjZXMoKSB7Ci0JCS8vIHJldHVybnMgdGhlIG51 bWJlciBvZiBmaXhlZCBkZWNpbWFsIHBsYWNlcyBvciBudWxsCi0JCXZhciBy dG4gPSBhcmdzLmNvbHVtbi5lZGl0b3JGaXhlZERlY2ltYWxQbGFjZXM7Ci0J CWlmICh0eXBlb2YgcnRuID09ICd1bmRlZmluZWQnKSB7Ci0JCQlydG4gPSBG bG9hdEVkaXRvci5EZWZhdWx0RGVjaW1hbFBsYWNlczsKLQkJfQotCQlyZXR1 cm4gKCFydG4gJiYgcnRuIT09MCA/IG51bGwgOiBydG4pOwotCX0KKyAgICBm dW5jdGlvbiBnZXREZWNpbWFsUGxhY2VzKCkgeworICAgICAgICAvLyByZXR1 cm5zIHRoZSBudW1iZXIgb2YgZml4ZWQgZGVjaW1hbCBwbGFjZXMgb3IgbnVs bAorICAgICAgICB2YXIgcnRuID0gYXJncy5jb2x1bW4uZWRpdG9yRml4ZWRE ZWNpbWFsUGxhY2VzOworICAgICAgICBpZiAodHlwZW9mIHJ0biA9PSAndW5k ZWZpbmVkJykgeworICAgICAgICAgICAgcnRuID0gRmxvYXRFZGl0b3IuRGVm YXVsdERlY2ltYWxQbGFjZXM7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu ICghcnRuICYmIHJ0biE9PTAgPyBudWxsIDogcnRuKTsKKyAgICB9CiAKICAg ICB0aGlzLmxvYWRWYWx1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICBk ZWZhdWx0VmFsdWUgPSBpdGVtW2FyZ3MuY29sdW1uLmZpZWxkXTsKIAotCSAg dmFyIGRlY1BsYWNlcyA9IGdldERlY2ltYWxQbGFjZXMoKTsKLQkgIGlmIChk ZWNQbGFjZXMgIT09IG51bGwKLQkgICYmIChkZWZhdWx0VmFsdWUgfHwgZGVm YXVsdFZhbHVlPT09MCkKLQkgICYmIGRlZmF1bHRWYWx1ZS50b0ZpeGVkKSB7 Ci0JCWRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZS50b0ZpeGVkKGRlY1Bs YWNlcyk7Ci0JICB9CisgICAgICB2YXIgZGVjUGxhY2VzID0gZ2V0RGVjaW1h bFBsYWNlcygpOworICAgICAgaWYgKGRlY1BsYWNlcyAhPT0gbnVsbAorICAg ICAgJiYgKGRlZmF1bHRWYWx1ZSB8fCBkZWZhdWx0VmFsdWU9PT0wKQorICAg ICAgJiYgZGVmYXVsdFZhbHVlLnRvRml4ZWQpIHsKKyAgICAgICAgZGVmYXVs dFZhbHVlID0gZGVmYXVsdFZhbHVlLnRvRml4ZWQoZGVjUGxhY2VzKTsKKyAg ICAgIH0KIAogICAgICAgJGlucHV0LnZhbChkZWZhdWx0VmFsdWUpOwogICAg ICAgJGlucHV0WzBdLmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTsKQEAg LTIxMCwxNCArMjEwLDE0IEBACiAgICAgfTsKIAogICAgIHRoaXMuc2VyaWFs aXplVmFsdWUgPSBmdW5jdGlvbiAoKSB7Ci0JICB2YXIgcnRuID0gcGFyc2VG bG9hdCgkaW5wdXQudmFsKCkpIHx8IDA7CisgICAgICB2YXIgcnRuID0gcGFy c2VGbG9hdCgkaW5wdXQudmFsKCkpIHx8IDA7CiAKLQkgIHZhciBkZWNQbGFj ZXMgPSBnZXREZWNpbWFsUGxhY2VzKCk7Ci0JICBpZiAoZGVjUGxhY2VzICE9 PSBudWxsCi0JICAmJiAocnRuIHx8IHJ0bj09PTApCi0JICAmJiBydG4udG9G aXhlZCkgewotCQlydG4gPSBwYXJzZUZsb2F0KHJ0bi50b0ZpeGVkKGRlY1Bs YWNlcykpOwotCSAgfQorICAgICAgdmFyIGRlY1BsYWNlcyA9IGdldERlY2lt YWxQbGFjZXMoKTsKKyAgICAgIGlmIChkZWNQbGFjZXMgIT09IG51bGwKKyAg ICAgICYmIChydG4gfHwgcnRuPT09MCkKKyAgICAgICYmIHJ0bi50b0ZpeGVk KSB7CisgICAgICAgIHJ0biA9IHBhcnNlRmxvYXQocnRuLnRvRml4ZWQoZGVj UGxhY2VzKSk7CisgICAgICB9CiAKICAgICAgIHJldHVybiBydG47CiAgICAg fTsKQEAgLTI2OSw4ICsyNjksNyBAQAogICAgICAgJGlucHV0LmRhdGVwaWNr ZXIoewogICAgICAgICBzaG93T246ICJidXR0b24iLAogICAgICAgICBidXR0 b25JbWFnZU9ubHk6IHRydWUsCi0gICAgICAgIGJ1dHRvbkltYWdlOiAiLi4v aW1hZ2VzL2NhbGVuZGFyLmdpZiIsCi0gICAgICAgIGJlZm9yZVNob3c6IGZ1 bmN0aW9uICgpIHsKKyAgICAgICAgIGJlZm9yZVNob3c6IGZ1bmN0aW9uICgp IHsKICAgICAgICAgICBjYWxlbmRhck9wZW4gPSB0cnVlCiAgICAgICAgIH0s CiAgICAgICAgIG9uQ2xvc2U6IGZ1bmN0aW9uICgpIHsKQEAgLTQyMiw2ICs0 MjEsMTAgQEAKICAgICAgIH0KICAgICB9OwogCisgICAgdGhpcy5wcmVDbGlj ayA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgJHNlbGVjdC5wcm9wKCdjaGVj a2VkJywgISRzZWxlY3QucHJvcCgnY2hlY2tlZCcpKTsKKyAgICB9OworCiAg ICAgdGhpcy5zZXJpYWxpemVWYWx1ZSA9IGZ1bmN0aW9uICgpIHsKICAgICAg IHJldHVybiAkc2VsZWN0LnByb3AoJ2NoZWNrZWQnKTsKICAgICB9OwpAQCAt NDcwLDcgKzQ3Myw3IEBACiAgICAgICAgIH0KICAgICAgIH0pOwogCi0gICAg ICAkcGlja2VyLmZpbmQoIi5lZGl0b3ItcGVyY2VudGNvbXBsZXRlLWJ1dHRv bnMgYnV0dG9uIikuYmluZCgiY2xpY2siLCBmdW5jdGlvbiAoZSkgeworICAg ICAgJHBpY2tlci5maW5kKCIuZWRpdG9yLXBlcmNlbnRjb21wbGV0ZS1idXR0 b25zIGJ1dHRvbiIpLm9uKCJjbGljayIsIGZ1bmN0aW9uIChlKSB7CiAgICAg ICAgICRpbnB1dC52YWwoJCh0aGlzKS5hdHRyKCJ2YWwiKSk7CiAgICAgICAg ICRwaWNrZXIuZmluZCgiLmVkaXRvci1wZXJjZW50Y29tcGxldGUtc2xpZGVy Iikuc2xpZGVyKCJ2YWx1ZSIsICQodGhpcykuYXR0cigidmFsIikpOwogICAg ICAgfSkKQEAgLTUzNSwxNSArNTM4LDE1IEBACiAgICAgICAkd3JhcHBlciA9 ICQoIjxESVYgc3R5bGU9J3otaW5kZXg6MTAwMDA7cG9zaXRpb246YWJzb2x1 dGU7YmFja2dyb3VuZDp3aGl0ZTtwYWRkaW5nOjVweDtib3JkZXI6M3B4IHNv bGlkIGdyYXk7IC1tb3otYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXItcmFk aXVzOjEwcHg7Jy8+IikKICAgICAgICAgICAuYXBwZW5kVG8oJGNvbnRhaW5l cik7CiAKLSAgICAgICRpbnB1dCA9ICQoIjxURVhUQVJFQSBoaWRlZm9jdXMg cm93cz01IHN0eWxlPSdiYWNrcm91bmQ6d2hpdGU7d2lkdGg6MjUwcHg7aGVp Z2h0OjgwcHg7Ym9yZGVyOjA7b3V0bGluZTowJz4iKQorICAgICAgJGlucHV0 ID0gJCgiPFRFWFRBUkVBIGhpZGVmb2N1cyByb3dzPTUgc3R5bGU9J2JhY2tn cm91bmQ6d2hpdGU7d2lkdGg6MjUwcHg7aGVpZ2h0OjgwcHg7Ym9yZGVyOjA7 b3V0bGluZTowJz4iKQogICAgICAgICAgIC5hcHBlbmRUbygkd3JhcHBlcik7 CiAKICAgICAgICQoIjxESVYgc3R5bGU9J3RleHQtYWxpZ246cmlnaHQnPjxC VVRUT04+U2F2ZTwvQlVUVE9OPjxCVVRUT04+Q2FuY2VsPC9CVVRUT04+PC9E SVY+IikKICAgICAgICAgICAuYXBwZW5kVG8oJHdyYXBwZXIpOwogCi0gICAg ICAkd3JhcHBlci5maW5kKCJidXR0b246Zmlyc3QiKS5iaW5kKCJjbGljayIs IHRoaXMuc2F2ZSk7Ci0gICAgICAkd3JhcHBlci5maW5kKCJidXR0b246bGFz dCIpLmJpbmQoImNsaWNrIiwgdGhpcy5jYW5jZWwpOwotICAgICAgJGlucHV0 LmJpbmQoImtleWRvd24iLCB0aGlzLmhhbmRsZUtleURvd24pOworICAgICAg JHdyYXBwZXIuZmluZCgiYnV0dG9uOmZpcnN0Iikub24oImNsaWNrIiwgdGhp cy5zYXZlKTsKKyAgICAgICR3cmFwcGVyLmZpbmQoImJ1dHRvbjpsYXN0Iiku b24oImNsaWNrIiwgdGhpcy5jYW5jZWwpOworICAgICAgJGlucHV0Lm9uKCJr ZXlkb3duIiwgdGhpcy5oYW5kbGVLZXlEb3duKTsKIAogICAgICAgc2NvcGUu cG9zaXRpb24oYXJncy5wb3NpdGlvbik7CiAgICAgICAkaW5wdXQuZm9jdXMo KS5zZWxlY3QoKTsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRpYy92 ZW5kb3Ivc2xpY2tncmlkL3NsaWNrLmZvcm1hdHRlcnMuanMgYi93ZWIvcGdh ZG1pbi9zdGF0aWMvdmVuZG9yL3NsaWNrZ3JpZC9zbGljay5mb3JtYXR0ZXJz LmpzCmluZGV4IDMwMmI2ZjMxLi42MmJiODg3MCAxMDA2NDQKLS0tIGEvd2Vi L3BnYWRtaW4vc3RhdGljL3ZlbmRvci9zbGlja2dyaWQvc2xpY2suZm9ybWF0 dGVycy5qcworKysgYi93ZWIvcGdhZG1pbi9zdGF0aWMvdmVuZG9yL3NsaWNr Z3JpZC9zbGljay5mb3JtYXR0ZXJzLmpzCkBAIC0xLDkgKzEsOSBAQAogLyoq KgogICogQ29udGFpbnMgYmFzaWMgU2xpY2tHcmlkIGZvcm1hdHRlcnMuCi0g KgorICogCiAgKiBOT1RFOiAgVGhlc2UgYXJlIG1lcmVseSBleGFtcGxlcy4g IFlvdSB3aWxsIG1vc3QgbGlrZWx5IG5lZWQgdG8gaW1wbGVtZW50IHNvbWV0 aGluZyBtb3JlCiAgKiAgICAgICAgcm9idXN0L2V4dGVuc2libGUvbG9jYWxp emFibGUvZXRjLiBmb3IgeW91ciB1c2UhCi0gKgorICogCiAgKiBAbW9kdWxl IEZvcm1hdHRlcnMKICAqIEBuYW1lc3BhY2UgU2xpY2sKICAqLwpAQCAtMTYs NyArMTYsOSBAQAogICAgICAgICAiUGVyY2VudENvbXBsZXRlIjogUGVyY2Vu dENvbXBsZXRlRm9ybWF0dGVyLAogICAgICAgICAiUGVyY2VudENvbXBsZXRl QmFyIjogUGVyY2VudENvbXBsZXRlQmFyRm9ybWF0dGVyLAogICAgICAgICAi WWVzTm8iOiBZZXNOb0Zvcm1hdHRlciwKLSAgICAgICAgIkNoZWNrbWFyayI6 IENoZWNrbWFya0Zvcm1hdHRlcgorICAgICAgICAiQ2hlY2ttYXJrIjogQ2hl Y2ttYXJrRm9ybWF0dGVyLAorICAgICAgICAiQ2hlY2tib3giOiBDaGVja2Jv eEZvcm1hdHRlcgorCiAgICAgICB9CiAgICAgfQogICB9KTsKQEAgLTUzLDYg KzU1LDEwIEBACiAgICAgcmV0dXJuIHZhbHVlID8gIlllcyIgOiAiTm8iOwog ICB9CiAKKyAgZnVuY3Rpb24gQ2hlY2tib3hGb3JtYXR0ZXIocm93LCBjZWxs LCB2YWx1ZSwgY29sdW1uRGVmLCBkYXRhQ29udGV4dCkgeworICAgIHJldHVy biAnPGltZyBjbGFzcz0ic2xpY2stZWRpdC1wcmVjbGljayIgc3JjPSIuLi9p bWFnZXMvJyArICh2YWx1ZSA/ICJDaGVja2JveFkiIDogIkNoZWNrYm94TiIp ICsgJy5wbmciPic7CisgIH0KKwogICBmdW5jdGlvbiBDaGVja21hcmtGb3Jt YXR0ZXIocm93LCBjZWxsLCB2YWx1ZSwgY29sdW1uRGVmLCBkYXRhQ29udGV4 dCkgewogICAgIHJldHVybiB2YWx1ZSA/ICI8aW1nIHNyYz0nLi4vaW1hZ2Vz L3RpY2sucG5nJz4iIDogIiI7CiAgIH0KZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL3N0YXRpYy92ZW5kb3Ivc2xpY2tncmlkL3NsaWNrLmdyaWQuY3NzIGIv d2ViL3BnYWRtaW4vc3RhdGljL3ZlbmRvci9zbGlja2dyaWQvc2xpY2suZ3Jp ZC5jc3MKaW5kZXggYTYyOGMwMjkuLmNlMDg1ZWZmIDEwMDY0NAotLS0gYS93 ZWIvcGdhZG1pbi9zdGF0aWMvdmVuZG9yL3NsaWNrZ3JpZC9zbGljay5ncmlk LmNzcworKysgYi93ZWIvcGdhZG1pbi9zdGF0aWMvdmVuZG9yL3NsaWNrZ3Jp ZC9zbGljay5ncmlkLmNzcwpAQCAtNSwxMyArNSwxMyBAQCBObyBidWlsdC1p biAoc2VsZWN0ZWQsIGVkaXRhYmxlLCBoaWdobGlnaHQsIGZsYXNoaW5nLCBp bnZhbGlkLCBsb2FkaW5nLCA6Zm9jdXMpCiBjbGFzc2VzIHNob3VsZCBhbHRl ciB0aG9zZSEKICovCiAKLS5zbGljay1oZWFkZXIudWktc3RhdGUtZGVmYXVs dCwgLnNsaWNrLWhlYWRlcnJvdy51aS1zdGF0ZS1kZWZhdWx0IHsKKy5zbGlj ay1oZWFkZXIudWktc3RhdGUtZGVmYXVsdCwgLnNsaWNrLWhlYWRlcnJvdy51 aS1zdGF0ZS1kZWZhdWx0LCAuc2xpY2stZm9vdGVycm93LnVpLXN0YXRlLWRl ZmF1bHQgIHsKICAgd2lkdGg6IDEwMCU7CiAgIG92ZXJmbG93OiBoaWRkZW47 CiAgIGJvcmRlci1sZWZ0OiAwcHggIWltcG9ydGFudDsKIH0KIAotLnNsaWNr LWhlYWRlci1jb2x1bW5zLCAuc2xpY2staGVhZGVycm93LWNvbHVtbnMgewor LnNsaWNrLWhlYWRlci1jb2x1bW5zLCAuc2xpY2staGVhZGVycm93LWNvbHVt bnMsIC5zbGljay1mb290ZXJyb3ctY29sdW1ucyB7CiAgIHBvc2l0aW9uOiBy ZWxhdGl2ZTsKICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgY3Vyc29yOiBk ZWZhdWx0OwpAQCAtMjEsNyArMjEsNyBAQCBjbGFzc2VzIHNob3VsZCBhbHRl ciB0aG9zZSEKIC5zbGljay1oZWFkZXItY29sdW1uLnVpLXN0YXRlLWRlZmF1 bHQgewogICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgIGRpc3BsYXk6IGlubGlu ZS1ibG9jazsKLSAgLypib3gtc2l6aW5nOiBjb250ZW50LWJveCAhaW1wb3J0 YW50OyAqLworIC8qYm94LXNpemluZzogY29udGVudC1ib3ggIWltcG9ydGFu dDsgdXNlIHRoaXMgZm9yIEZpcmVmb3ghICovIAogICBvdmVyZmxvdzogaGlk ZGVuOwogICAtby10ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgdGV4dC1v dmVyZmxvdzogZWxsaXBzaXM7CkBAIC0zNiw3ICszNiw3IEBAIGNsYXNzZXMg c2hvdWxkIGFsdGVyIHRob3NlIQogICBmbG9hdDogbGVmdDsKIH0KIAotLnNs aWNrLWhlYWRlcnJvdy1jb2x1bW4udWktc3RhdGUtZGVmYXVsdCB7Cisuc2xp Y2staGVhZGVycm93LWNvbHVtbi51aS1zdGF0ZS1kZWZhdWx0LCAuc2xpY2st Zm9vdGVycm93LWNvbHVtbi51aS1zdGF0ZS1kZWZhdWx0IHsKICAgcGFkZGlu ZzogNHB4OwogfQogCkBAIC01Myw2ICs1MywyMSBAQCBjbGFzc2VzIHNob3Vs ZCBhbHRlciB0aG9zZSEKICAgZmxvYXQ6IGxlZnQ7CiB9CiAKKy5zbGljay1z b3J0LWluZGljYXRvci1udW1iZXJlZCB7CisgIGRpc3BsYXk6IGlubGluZS1i bG9jazsKKyAgd2lkdGg6IDhweDsKKyAgaGVpZ2h0OiA1cHg7CisgIG1hcmdp bi1sZWZ0OiA0cHg7CisgIG1hcmdpbi10b3A6IDA7CisgIHBhZGRpbmctbGVm dDogMXB4OworICBsaW5lLWhlaWdodDogMjBweDsKKyAgZmxvYXQ6IGxlZnQ7 CisgIGZvbnQtZmFtaWx5OiBBcmlhbDsKKyAgZm9udC1zdHlsZTogbm9ybWFs OworICBmb250LXdlaWdodDogYm9sZDsKKyAgY29sb3I6ICM2MTkwQ0Q7Cit9 CisKIC5zbGljay1zb3J0LWluZGljYXRvci1kZXNjIHsKICAgYmFja2dyb3Vu ZDogdXJsKGltYWdlcy9zb3J0LWRlc2MuZ2lmKTsKIH0KQEAgLTgxLDEzICs5 NiwxMyBAQCBjbGFzc2VzIHNob3VsZCBhbHRlciB0aG9zZSEKICAgb3V0bGlu ZTogMDsKIH0KIAotLnNyLnVpLXdpZGdldC1jb250ZW50LCAuc3IudWktc3Rh dGUtYWN0aXZlIHsKKy5zbGljay1yb3cudWktd2lkZ2V0LWNvbnRlbnQsIC5z bGljay1yb3cudWktc3RhdGUtYWN0aXZlIHsKICAgcG9zaXRpb246IGFic29s dXRlOwogICBib3JkZXI6IDBweDsKICAgd2lkdGg6IDEwMCU7CiB9CiAKLS5z YywgLnNsaWNrLWhlYWRlcnJvdy1jb2x1bW4geworLnNsaWNrLWNlbGwsIC5z bGljay1oZWFkZXJyb3ctY29sdW1uICwgLnNsaWNrLWZvb3RlcnJvdy1jb2x1 bW57CiAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgYm9yZGVyOiAxcHggc29s aWQgdHJhbnNwYXJlbnQ7CiAgIGJvcmRlci1yaWdodDogMXB4IGRvdHRlZCBz aWx2ZXI7CkBAIC0xMDIsNyArMTE3LDEzIEBAIGNsYXNzZXMgc2hvdWxkIGFs dGVyIHRob3NlIQogICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICBjdXJzb3I6 IGRlZmF1bHQ7CiB9Ci0KKy5zbGljay1jZWxsLCAuc2xpY2staGVhZGVycm93 LWNvbHVtbnsKKyAgYm9yZGVyLWJvdHRvbS1jb2xvcjogc2lsdmVyOworfQor LnNsaWNrLWZvb3RlcnJvdy1jb2x1bW4geworICBib3JkZXItdG9wLWNvbG9y OiBzaWx2ZXI7Cit9CisgCiAuc2xpY2stZ3JvdXAgewogfQogCkBAIC0xMTAs NyArMTMxLDcgQEAgY2xhc3NlcyBzaG91bGQgYWx0ZXIgdGhvc2UhCiAgIGRp c3BsYXk6IGlubGluZS1ibG9jazsKIH0KIAotLnNjLmhpZ2hsaWdodGVkIHsK Ky5zbGljay1jZWxsLmhpZ2hsaWdodGVkIHsKICAgYmFja2dyb3VuZDogbGln aHRza3libHVlOwogICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDI1NSwgMC4y KTsKICAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMC41czsKQEAgLTExOSwx MSArMTQwLDExIEBAIGNsYXNzZXMgc2hvdWxkIGFsdGVyIHRob3NlIQogICB0 cmFuc2l0aW9uOiBhbGwgMC41czsKIH0KIAotLnNjLmZsYXNoaW5nIHsKKy5z bGljay1jZWxsLmZsYXNoaW5nIHsKICAgYm9yZGVyOiAxcHggc29saWQgcmVk ICFpbXBvcnRhbnQ7CiB9CiAKLS5zYy5lZGl0YWJsZSB7Cisuc2xpY2stY2Vs bC5lZGl0YWJsZSB7CiAgIHotaW5kZXg6IDExOwogICBvdmVyZmxvdzogdmlz aWJsZTsKICAgYmFja2dyb3VuZDogd2hpdGU7CkBAIC0xMzEsNyArMTUyLDcg QEAgY2xhc3NlcyBzaG91bGQgYWx0ZXIgdGhvc2UhCiAgIGJvcmRlci1zdHls ZTogc29saWQ7CiB9CiAKLS5zYzpmb2N1cyB7Cisuc2xpY2stY2VsbDpmb2N1 cyB7CiAgIG91dGxpbmU6IG5vbmU7CiB9CiAKZGlmZiAtLWdpdCBhL3dlYi9w Z2FkbWluL3N0YXRpYy92ZW5kb3Ivc2xpY2tncmlkL3NsaWNrLmdyaWQuanMg Yi93ZWIvcGdhZG1pbi9zdGF0aWMvdmVuZG9yL3NsaWNrZ3JpZC9zbGljay5n cmlkLmpzCmluZGV4IDI5ZDA3ZTRmLi45ZmVlNTgxNiAxMDA2NDQKLS0tIGEv d2ViL3BnYWRtaW4vc3RhdGljL3ZlbmRvci9zbGlja2dyaWQvc2xpY2suZ3Jp ZC5qcworKysgYi93ZWIvcGdhZG1pbi9zdGF0aWMvdmVuZG9yL3NsaWNrZ3Jp ZC9zbGljay5ncmlkLmpzCkBAIC0xLDM2MDcgKzEsMzc2OCBAQAotLyoqCi0g KiBAbGljZW5zZQotICogKGMpIDIwMDktMjAxMyBNaWNoYWVsIExlaWJtYW4K LSAqIG1pY2hhZWx7ZG90fWxlaWJtYW57YXR9Z21haWx7ZG90fWNvbQotICog aHR0cDovL2dpdGh1Yi5jb20vbWxlaWJtYW4vc2xpY2tncmlkCi0gKgotICog RGlzdHJpYnV0ZWQgdW5kZXIgTUlUIGxpY2Vuc2UuCi0gKiBBbGwgcmlnaHRz IHJlc2VydmVkLgotICoKLSAqIFNsaWNrR3JpZCB2Mi4yCi0gKgotICogTk9U RVM6Ci0gKiAgICAgQ2VsbC9yb3cgRE9NIG1hbmlwdWxhdGlvbnMgYXJlIGRv bmUgZGlyZWN0bHkgYnlwYXNzaW5nIGpRdWVyeSdzIERPTSBtYW5pcHVsYXRp b24gbWV0aG9kcy4KLSAqICAgICBUaGlzIGluY3JlYXNlcyB0aGUgc3BlZWQg ZHJhbWF0aWNhbGx5LCBidXQgY2FuIG9ubHkgYmUgZG9uZSBzYWZlbHkgYmVj YXVzZSB0aGVyZSBhcmUgbm8gZXZlbnQgaGFuZGxlcnMKLSAqICAgICBvciBk YXRhIGFzc29jaWF0ZWQgd2l0aCBhbnkgY2VsbC9yb3cgRE9NIG5vZGVzLiAg Q2VsbCBlZGl0b3JzIG11c3QgbWFrZSBzdXJlIHRoZXkgaW1wbGVtZW50IC5k ZXN0cm95KCkKLSAqICAgICBhbmQgZG8gcHJvcGVyIGNsZWFudXAuCi0gKi8K LQotLy8gbWFrZSBzdXJlIHJlcXVpcmVkIEphdmFTY3JpcHQgbW9kdWxlcyBh cmUgbG9hZGVkCi1pZiAodHlwZW9mIGpRdWVyeSA9PT0gInVuZGVmaW5lZCIp IHsKLSAgdGhyb3cgIlNsaWNrR3JpZCByZXF1aXJlcyBqcXVlcnkgbW9kdWxl IHRvIGJlIGxvYWRlZCI7Ci19Ci1pZiAoIWpRdWVyeS5mbi5kcmFnKSB7Ci0g IHRocm93ICJTbGlja0dyaWQgcmVxdWlyZXMganF1ZXJ5LmV2ZW50LmRyYWcg bW9kdWxlIHRvIGJlIGxvYWRlZCI7Ci19Ci1pZiAodHlwZW9mIFNsaWNrID09 PSAidW5kZWZpbmVkIikgewotICB0aHJvdyAic2xpY2suY29yZS5qcyBub3Qg bG9hZGVkIjsKLX0KLQotCi0oZnVuY3Rpb24gKCQpIHsKLSAgLy8gU2xpY2su R3JpZAotICAkLmV4dGVuZCh0cnVlLCB3aW5kb3csIHsKLSAgICBTbGljazog ewotICAgICAgR3JpZDogU2xpY2tHcmlkCi0gICAgfQotICB9KTsKLQotICAv LyBzaGFyZWQgYWNyb3NzIGFsbCBncmlkcyBvbiB0aGUgcGFnZQotICB2YXIg c2Nyb2xsYmFyRGltZW5zaW9uczsKLSAgdmFyIG1heFN1cHBvcnRlZENzc0hl aWdodDsgIC8vIGJyb3dzZXIncyBicmVha2luZyBwb2ludAotCi0gIC8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K LSAgLy8gU2xpY2tHcmlkIGNsYXNzIGltcGxlbWVudGF0aW9uIChhdmFpbGFi bGUgYXMgU2xpY2suR3JpZCkKLQotICAvKioKLSAgICogQ3JlYXRlcyBhIG5l dyBpbnN0YW5jZSBvZiB0aGUgZ3JpZC4KLSAgICogQGNsYXNzIFNsaWNrR3Jp ZAotICAgKiBAY29uc3RydWN0b3IKLSAgICogQHBhcmFtIHtOb2RlfSAgICAg ICAgICAgICAgY29udGFpbmVyICAgQ29udGFpbmVyIG5vZGUgdG8gY3JlYXRl IHRoZSBncmlkIGluLgotICAgKiBAcGFyYW0ge0FycmF5LE9iamVjdH0gICAg ICBkYXRhICAgICAgICBBbiBhcnJheSBvZiBvYmplY3RzIGZvciBkYXRhYmlu ZGluZy4KLSAgICogQHBhcmFtIHtBcnJheX0gICAgICAgICAgICAgY29sdW1u cyAgICAgQW4gYXJyYXkgb2YgY29sdW1uIGRlZmluaXRpb25zLgotICAgKiBA cGFyYW0ge09iamVjdH0gICAgICAgICAgICBvcHRpb25zICAgICBHcmlkIG9w dGlvbnMuCi0gICAqKi8KLSAgZnVuY3Rpb24gU2xpY2tHcmlkKGNvbnRhaW5l ciwgZGF0YSwgY29sdW1ucywgb3B0aW9ucykgewotICAgIC8vIHNldHRpbmdz Ci0gICAgdmFyIGRlZmF1bHRzID0gewotICAgICAgZXhwbGljaXRJbml0aWFs aXphdGlvbjogZmFsc2UsCi0gICAgICByb3dIZWlnaHQ6IDI1LAotICAgICAg ZGVmYXVsdENvbHVtbldpZHRoOiA4MCwKLSAgICAgIGVuYWJsZUFkZFJvdzog ZmFsc2UsCi0gICAgICBsZWF2ZVNwYWNlRm9yTmV3Um93czogZmFsc2UsCi0g ICAgICBlZGl0YWJsZTogZmFsc2UsCi0gICAgICBhdXRvRWRpdDogdHJ1ZSwK LSAgICAgIGVuYWJsZUNlbGxOYXZpZ2F0aW9uOiB0cnVlLAotICAgICAgZW5h YmxlQ29sdW1uUmVvcmRlcjogdHJ1ZSwKLSAgICAgIGFzeW5jRWRpdG9yTG9h ZGluZzogZmFsc2UsCi0gICAgICBhc3luY0VkaXRvckxvYWREZWxheTogMTAw LAotICAgICAgZm9yY2VGaXRDb2x1bW5zOiBmYWxzZSwKLSAgICAgIGVuYWJs ZUFzeW5jUG9zdFJlbmRlcjogZmFsc2UsCi0gICAgICBhc3luY1Bvc3RSZW5k ZXJEZWxheTogNTAsCi0gICAgICBlbmFibGVBc3luY1Bvc3RSZW5kZXJDbGVh bnVwOiBmYWxzZSwKLSAgICAgIGFzeW5jUG9zdFJlbmRlckNsZWFudXBEZWxh eTogNDAsCi0gICAgICBhdXRvSGVpZ2h0OiBmYWxzZSwKLSAgICAgIGVkaXRv ckxvY2s6IFNsaWNrLkdsb2JhbEVkaXRvckxvY2ssCi0gICAgICBzaG93SGVh ZGVyUm93OiBmYWxzZSwKLSAgICAgIGhlYWRlclJvd0hlaWdodDogMjUsCi0g ICAgICBzaG93VG9wUGFuZWw6IGZhbHNlLAotICAgICAgdG9wUGFuZWxIZWln aHQ6IDI1LAotICAgICAgZm9ybWF0dGVyRmFjdG9yeTogbnVsbCwKLSAgICAg IGVkaXRvckZhY3Rvcnk6IG51bGwsCi0gICAgICBjZWxsRmxhc2hpbmdDc3ND bGFzczogImZsYXNoaW5nIiwKLSAgICAgIHNlbGVjdGVkQ2VsbENzc0NsYXNz OiAic2VsZWN0ZWQiLAotICAgICAgbXVsdGlTZWxlY3Q6IHRydWUsCi0gICAg ICBlbmFibGVUZXh0U2VsZWN0aW9uT25DZWxsczogZmFsc2UsCi0gICAgICBk YXRhSXRlbUNvbHVtblZhbHVlRXh0cmFjdG9yOiBudWxsLAotICAgICAgZnVs bFdpZHRoUm93czogZmFsc2UsCi0gICAgICBtdWx0aUNvbHVtblNvcnQ6IGZh bHNlLAotICAgICAgZGVmYXVsdEZvcm1hdHRlcjogZGVmYXVsdEZvcm1hdHRl ciwKLSAgICAgIGZvcmNlU3luY1Njcm9sbGluZzogZmFsc2UsCi0gICAgICBh ZGROZXdSb3dDc3NDbGFzczogIm5ldy1yb3ciCi0gICAgfTsKLQotICAgIHZh ciBjb2x1bW5EZWZhdWx0cyA9IHsKLSAgICAgIG5hbWU6ICIiLAotICAgICAg cmVzaXphYmxlOiB0cnVlLAotICAgICAgc29ydGFibGU6IGZhbHNlLAotICAg ICAgbWluV2lkdGg6IDMwLAotICAgICAgcmVyZW5kZXJPblJlc2l6ZTogZmFs c2UsCi0gICAgICBoZWFkZXJDc3NDbGFzczogbnVsbCwKLSAgICAgIGRlZmF1 bHRTb3J0QXNjOiB0cnVlLAotICAgICAgZm9jdXNhYmxlOiB0cnVlLAotICAg ICAgc2VsZWN0YWJsZTogdHJ1ZQotICAgIH07Ci0KLSAgICAvLyBzY3JvbGxl cgotICAgIHZhciB0aDsgICAvLyB2aXJ0dWFsIGhlaWdodAotICAgIHZhciBo OyAgICAvLyByZWFsIHNjcm9sbGFibGUgaGVpZ2h0Ci0gICAgdmFyIHBoOyAg IC8vIHBhZ2UgaGVpZ2h0Ci0gICAgdmFyIG47ICAgIC8vIG51bWJlciBvZiBw YWdlcwotICAgIHZhciBjajsgICAvLyAianVtcGluZXNzIiBjb2VmZmljaWVu dAotCi0gICAgdmFyIHBhZ2UgPSAwOyAgICAgICAvLyBjdXJyZW50IHBhZ2UK LSAgICB2YXIgb2Zmc2V0ID0gMDsgICAgIC8vIGN1cnJlbnQgcGFnZSBvZmZz ZXQKLSAgICB2YXIgdlNjcm9sbERpciA9IDE7Ci0KLSAgICAvLyBwcml2YXRl Ci0gICAgdmFyIGluaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgdmFyICRjb250 YWluZXI7Ci0gICAgdmFyIHVpZCA9ICJzbGlja2dyaWRfIiArIE1hdGgucm91 bmQoMTAwMDAwMCAqIE1hdGgucmFuZG9tKCkpOwotICAgIHZhciBzZWxmID0g dGhpczsKLSAgICB2YXIgJGZvY3VzU2luaywgJGZvY3VzU2luazI7Ci0gICAg dmFyICRoZWFkZXJTY3JvbGxlcjsKLSAgICB2YXIgJGhlYWRlcnM7Ci0gICAg dmFyICRoZWFkZXJSb3csICRoZWFkZXJSb3dTY3JvbGxlciwgJGhlYWRlclJv d1NwYWNlcjsKLSAgICB2YXIgJHRvcFBhbmVsU2Nyb2xsZXI7Ci0gICAgdmFy ICR0b3BQYW5lbDsKLSAgICB2YXIgJHZpZXdwb3J0OwotICAgIHZhciAkY2Fu dmFzOwotICAgIHZhciAkc3R5bGU7Ci0gICAgdmFyICRib3VuZEFuY2VzdG9y czsKLSAgICB2YXIgc3R5bGVzaGVldCwgY29sdW1uQ3NzUnVsZXNMLCBjb2x1 bW5Dc3NSdWxlc1I7Ci0gICAgdmFyIHZpZXdwb3J0SCwgdmlld3BvcnRXOwot ICAgIHZhciBjYW52YXNXaWR0aDsKLSAgICB2YXIgdmlld3BvcnRIYXNIU2Ny b2xsLCB2aWV3cG9ydEhhc1ZTY3JvbGw7Ci0gICAgdmFyIGhlYWRlckNvbHVt bldpZHRoRGlmZiA9IDAsIGhlYWRlckNvbHVtbkhlaWdodERpZmYgPSAwLCAv LyBib3JkZXIrcGFkZGluZwotICAgICAgICBjZWxsV2lkdGhEaWZmID0gMCwg Y2VsbEhlaWdodERpZmYgPSAwLCBqUXVlcnlOZXdXaWR0aEJlaGF2aW91ciA9 IGZhbHNlOwotICAgIHZhciBhYnNvbHV0ZUNvbHVtbk1pbldpZHRoOwotCi0g ICAgdmFyIHRhYmJpbmdEaXJlY3Rpb24gPSAxOwotICAgIHZhciBhY3RpdmVQ b3NYOwotICAgIHZhciBhY3RpdmVSb3csIGFjdGl2ZUNlbGw7Ci0gICAgdmFy IGFjdGl2ZUNlbGxOb2RlID0gbnVsbDsKLSAgICB2YXIgY3VycmVudEVkaXRv ciA9IG51bGw7Ci0gICAgdmFyIHNlcmlhbGl6ZWRFZGl0b3JWYWx1ZTsKLSAg ICB2YXIgZWRpdENvbnRyb2xsZXI7Ci0KLSAgICB2YXIgcm93c0NhY2hlID0g e307Ci0gICAgdmFyIHJlbmRlcmVkUm93cyA9IDA7Ci0gICAgdmFyIG51bVZp c2libGVSb3dzOwotICAgIHZhciBwcmV2U2Nyb2xsVG9wID0gMDsKLSAgICB2 YXIgc2Nyb2xsVG9wID0gMDsKLSAgICB2YXIgbGFzdFJlbmRlcmVkU2Nyb2xs VG9wID0gMDsKLSAgICB2YXIgbGFzdFJlbmRlcmVkU2Nyb2xsTGVmdCA9IDA7 Ci0gICAgdmFyIHByZXZTY3JvbGxMZWZ0ID0gMDsKLSAgICB2YXIgc2Nyb2xs TGVmdCA9IDA7Ci0KLSAgICB2YXIgc2VsZWN0aW9uTW9kZWw7Ci0gICAgdmFy IHNlbGVjdGVkUm93cyA9IFtdOwotCi0gICAgdmFyIHBsdWdpbnMgPSBbXTsK LSAgICB2YXIgY2VsbENzc0NsYXNzZXMgPSB7fTsKLQotICAgIHZhciBjb2x1 bW5zQnlJZCA9IHt9OwotICAgIHZhciBzb3J0Q29sdW1ucyA9IFtdOwotICAg IHZhciBjb2x1bW5Qb3NMZWZ0ID0gW107Ci0gICAgdmFyIGNvbHVtblBvc1Jp Z2h0ID0gW107Ci0KLQotICAgIC8vIGFzeW5jIGNhbGwgaGFuZGxlcwotICAg IHZhciBoX2VkaXRvckxvYWRlciA9IG51bGw7Ci0gICAgdmFyIGhfcmVuZGVy ID0gbnVsbDsKLSAgICB2YXIgaF9wb3N0cmVuZGVyID0gbnVsbDsKLSAgICB2 YXIgaF9wb3N0cmVuZGVyQ2xlYW51cCA9IG51bGw7Ci0gICAgdmFyIHBvc3RQ cm9jZXNzZWRSb3dzID0ge307Ci0gICAgdmFyIHBvc3RQcm9jZXNzVG9Sb3cg PSBudWxsOwotICAgIHZhciBwb3N0UHJvY2Vzc0Zyb21Sb3cgPSBudWxsOwot ICAgIHZhciBwb3N0UHJvY2Vzc2VkQ2xlYW51cFF1ZXVlID0gW107Ci0gICAg dmFyIHBvc3RQcm9jZXNzZ3JvdXBJZCA9IDA7Ci0KLSAgICAvLyBwZXJmIGNv dW50ZXJzCi0gICAgdmFyIGNvdW50ZXJfcm93c19yZW5kZXJlZCA9IDA7Ci0g ICAgdmFyIGNvdW50ZXJfcm93c19yZW1vdmVkID0gMDsKLQotICAgIC8vIFRo ZXNlIHR3byB2YXJpYWJsZXMgd29yayBhcm91bmQgYSBidWcgd2l0aCBpbmVy dGlhbCBzY3JvbGxpbmcgaW4gV2Via2l0L0JsaW5rIG9uIE1hYy4KLSAgICAv LyBTZWUgaHR0cDovL2NyYnVnLmNvbS8zMTI0MjcuCi0gICAgdmFyIHJvd05v ZGVGcm9tTGFzdE1vdXNlV2hlZWxFdmVudDsgIC8vIHRoaXMgbm9kZSBtdXN0 IG5vdCBiZSBkZWxldGVkIHdoaWxlIGluZXJ0aWFsIHNjcm9sbGluZwotICAg IHZhciB6b21iaWVSb3dOb2RlRnJvbUxhc3RNb3VzZVdoZWVsRXZlbnQ7ICAv LyBub2RlIHRoYXQgd2FzIGhpZGRlbiBpbnN0ZWFkIG9mIGdldHRpbmcgZGVs ZXRlZAotICAgIHZhciB6b21iaWVSb3dDYWNoZUZyb21MYXN0TW91c2VXaGVl bEV2ZW50OyAgLy8gcm93IGNhY2hlIGZvciBhYm92ZSBub2RlCi0gICAgdmFy IHpvbWJpZVJvd1Bvc3RQcm9jZXNzZWRGcm9tTGFzdE1vdXNlV2hlZWxFdmVu dDsgIC8vIHBvc3QgcHJvY2Vzc2luZyByZWZlcmVuY2VzIGZvciBhYm92ZSBu b2RlCi0KLSAgICAvLyBzdG9yZSBjc3MgYXR0cmlidXRlcyBpZiBkaXNwbGF5 Om5vbmUgaXMgYWN0aXZlIGluIGNvbnRhaW5lciBvciBwYXJlbnQKLSAgICB2 YXIgY3NzU2hvdyA9IHsgcG9zaXRpb246ICdhYnNvbHV0ZScsIHZpc2liaWxp dHk6ICdoaWRkZW4nLCBkaXNwbGF5OiAnYmxvY2snIH07Ci0gICAgdmFyICRo aWRkZW5QYXJlbnRzOwotICAgIHZhciBvbGRQcm9wcyA9IFtdOwotCi0gICAg Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLwotICAgIC8vIEluaXRpYWxpemF0aW9uCi0KLSAgICBmdW5jdGlvbiBp bml0KCkgewotICAgICAgJGNvbnRhaW5lciA9ICQoY29udGFpbmVyKTsKLSAg ICAgIGlmICgkY29udGFpbmVyLmxlbmd0aCA8IDEpIHsKLSAgICAgICAgdGhy b3cgbmV3IEVycm9yKCJTbGlja0dyaWQgcmVxdWlyZXMgYSB2YWxpZCBjb250 YWluZXIsICIgKyBjb250YWluZXIgKyAiIGRvZXMgbm90IGV4aXN0IGluIHRo ZSBET00uIik7Ci0gICAgICB9Ci0KLSAgICAgIGNhY2hlQ3NzRm9ySGlkZGVu SW5pdCgpOwotCi0gICAgICAvLyBjYWxjdWxhdGUgdGhlc2Ugb25seSBvbmNl IGFuZCBzaGFyZSBiZXR3ZWVuIGdyaWQgaW5zdGFuY2VzCi0gICAgICBtYXhT dXBwb3J0ZWRDc3NIZWlnaHQgPSBtYXhTdXBwb3J0ZWRDc3NIZWlnaHQgfHwg Z2V0TWF4U3VwcG9ydGVkQ3NzSGVpZ2h0KCk7Ci0gICAgICBzY3JvbGxiYXJE aW1lbnNpb25zID0gc2Nyb2xsYmFyRGltZW5zaW9ucyB8fCBtZWFzdXJlU2Ny b2xsYmFyKCk7Ci0KLSAgICAgIG9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgZGVm YXVsdHMsIG9wdGlvbnMpOwotICAgICAgdmFsaWRhdGVBbmRFbmZvcmNlT3B0 aW9ucygpOwotICAgICAgY29sdW1uRGVmYXVsdHMud2lkdGggPSBvcHRpb25z LmRlZmF1bHRDb2x1bW5XaWR0aDsKLQotICAgICAgY29sdW1uc0J5SWQgPSB7 fTsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7 IGkrKykgewotICAgICAgICB2YXIgbSA9IGNvbHVtbnNbaV0gPSAkLmV4dGVu ZCh7fSwgY29sdW1uRGVmYXVsdHMsIGNvbHVtbnNbaV0pOwotICAgICAgICBj b2x1bW5zQnlJZFttLmlkXSA9IGk7Ci0gICAgICAgIGlmIChtLm1pbldpZHRo ICYmIG0ud2lkdGggPCBtLm1pbldpZHRoKSB7Ci0gICAgICAgICAgbS53aWR0 aCA9IG0ubWluV2lkdGg7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG0ubWF4 V2lkdGggJiYgbS53aWR0aCA+IG0ubWF4V2lkdGgpIHsKLSAgICAgICAgICBt LndpZHRoID0gbS5tYXhXaWR0aDsKLSAgICAgICAgfQotICAgICAgfQotCi0g ICAgICAvLyB2YWxpZGF0ZSBsb2FkZWQgSmF2YVNjcmlwdCBtb2R1bGVzIGFn YWluc3QgcmVxdWVzdGVkIG9wdGlvbnMKLSAgICAgIGlmIChvcHRpb25zLmVu YWJsZUNvbHVtblJlb3JkZXIgJiYgISQuZm4uc29ydGFibGUpIHsKLSAgICAg ICAgdGhyb3cgbmV3IEVycm9yKCJTbGlja0dyaWQncyAnZW5hYmxlQ29sdW1u UmVvcmRlciA9IHRydWUnIG9wdGlvbiByZXF1aXJlcyBqcXVlcnktdWkuc29y dGFibGUgbW9kdWxlIHRvIGJlIGxvYWRlZCIpOwotICAgICAgfQotCi0gICAg ICBlZGl0Q29udHJvbGxlciA9IHsKLSAgICAgICAgImNvbW1pdEN1cnJlbnRF ZGl0IjogY29tbWl0Q3VycmVudEVkaXQsCi0gICAgICAgICJjYW5jZWxDdXJy ZW50RWRpdCI6IGNhbmNlbEN1cnJlbnRFZGl0Ci0gICAgICB9OwotCi0gICAg ICAkY29udGFpbmVyCi0gICAgICAgICAgLmVtcHR5KCkKLSAgICAgICAgICAu Y3NzKCJvdmVyZmxvdyIsICJoaWRkZW4iKQotICAgICAgICAgIC5jc3MoIm91 dGxpbmUiLCAwKQotICAgICAgICAgIC5hZGRDbGFzcyh1aWQpCi0gICAgICAg ICAgLmFkZENsYXNzKCJ1aS13aWRnZXQiKTsKLQotICAgICAgLy8gc2V0IHVw IGEgcG9zaXRpb25pbmcgY29udGFpbmVyIGlmIG5lZWRlZAotICAgICAgaWYg KCEvcmVsYXRpdmV8YWJzb2x1dGV8Zml4ZWQvLnRlc3QoJGNvbnRhaW5lci5j c3MoInBvc2l0aW9uIikpKSB7Ci0gICAgICAgICRjb250YWluZXIuY3NzKCJw b3NpdGlvbiIsICJyZWxhdGl2ZSIpOwotICAgICAgfQotCi0gICAgICAkZm9j dXNTaW5rID0gJCgiPGRpdiB0YWJJbmRleD0nMCcgaGlkZUZvY3VzIHN0eWxl PSdwb3NpdGlvbjpmaXhlZDt3aWR0aDowO2hlaWdodDowO3RvcDowO2xlZnQ6 MDtvdXRsaW5lOjA7Jz48L2Rpdj4iKS5hcHBlbmRUbygkY29udGFpbmVyKTsK LQotICAgICAgJGhlYWRlclNjcm9sbGVyID0gJCgiPGRpdiBjbGFzcz0nc2xp Y2staGVhZGVyIHVpLXN0YXRlLWRlZmF1bHQnIHN0eWxlPSdvdmVyZmxvdzpo aWRkZW47cG9zaXRpb246cmVsYXRpdmU7JyAvPiIpLmFwcGVuZFRvKCRjb250 YWluZXIpOwotICAgICAgJGhlYWRlcnMgPSAkKCI8ZGl2IGNsYXNzPSdzbGlj ay1oZWFkZXItY29sdW1ucycgc3R5bGU9J2xlZnQ6LTEwMDBweCcgLz4iKS5h cHBlbmRUbygkaGVhZGVyU2Nyb2xsZXIpOwotICAgICAgJGhlYWRlcnMud2lk dGgoZ2V0SGVhZGVyc1dpZHRoKCkpOwotCi0gICAgICAkaGVhZGVyUm93U2Ny b2xsZXIgPSAkKCI8ZGl2IGNsYXNzPSdzbGljay1oZWFkZXJyb3cgdWktc3Rh dGUtZGVmYXVsdCcgc3R5bGU9J292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpy ZWxhdGl2ZTsnIC8+IikuYXBwZW5kVG8oJGNvbnRhaW5lcik7Ci0gICAgICAk aGVhZGVyUm93ID0gJCgiPGRpdiBjbGFzcz0nc2xpY2staGVhZGVycm93LWNv bHVtbnMnIC8+IikuYXBwZW5kVG8oJGhlYWRlclJvd1Njcm9sbGVyKTsKLSAg ICAgICRoZWFkZXJSb3dTcGFjZXIgPSAkKCI8ZGl2IHN0eWxlPSdkaXNwbGF5 OmJsb2NrO2hlaWdodDoxcHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVm dDowOyc+PC9kaXY+IikKLSAgICAgICAgICAuY3NzKCJ3aWR0aCIsIGdldENh bnZhc1dpZHRoKCkgKyBzY3JvbGxiYXJEaW1lbnNpb25zLndpZHRoICsgInB4 IikKLSAgICAgICAgICAuYXBwZW5kVG8oJGhlYWRlclJvd1Njcm9sbGVyKTsK LQotICAgICAgJHRvcFBhbmVsU2Nyb2xsZXIgPSAkKCI8ZGl2IGNsYXNzPSdz bGljay10b3AtcGFuZWwtc2Nyb2xsZXIgdWktc3RhdGUtZGVmYXVsdCcgc3R5 bGU9J292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTsnIC8+Iiku YXBwZW5kVG8oJGNvbnRhaW5lcik7Ci0gICAgICAkdG9wUGFuZWwgPSAkKCI8 ZGl2IGNsYXNzPSdzbGljay10b3AtcGFuZWwnIHN0eWxlPSd3aWR0aDoxMDAw MHB4JyAvPiIpLmFwcGVuZFRvKCR0b3BQYW5lbFNjcm9sbGVyKTsKLQotICAg ICAgaWYgKCFvcHRpb25zLnNob3dUb3BQYW5lbCkgewotICAgICAgICAkdG9w UGFuZWxTY3JvbGxlci5oaWRlKCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICgh b3B0aW9ucy5zaG93SGVhZGVyUm93KSB7Ci0gICAgICAgICRoZWFkZXJSb3dT Y3JvbGxlci5oaWRlKCk7Ci0gICAgICB9Ci0KLSAgICAgICR2aWV3cG9ydCA9 ICQoIjxkaXYgY2xhc3M9J3NsaWNrLXZpZXdwb3J0JyBzdHlsZT0nd2lkdGg6 MTAwJTtvdmVyZmxvdzphdXRvO291dGxpbmU6MDtwb3NpdGlvbjpyZWxhdGl2 ZTs7Jz4iKS5hcHBlbmRUbygkY29udGFpbmVyKTsKLSAgICAgICR2aWV3cG9y dC5jc3MoIm92ZXJmbG93LXkiLCBvcHRpb25zLmF1dG9IZWlnaHQgPyAiaGlk ZGVuIiA6ICJhdXRvIik7Ci0KLSAgICAgICRjYW52YXMgPSAkKCI8ZGl2IGNs YXNzPSdncmlkLWNhbnZhcycgLz4iKS5hcHBlbmRUbygkdmlld3BvcnQpOwot Ci0gICAgICAkZm9jdXNTaW5rMiA9ICRmb2N1c1NpbmsuY2xvbmUoKS5hcHBl bmRUbygkY29udGFpbmVyKTsKLQotICAgICAgaWYgKCFvcHRpb25zLmV4cGxp Y2l0SW5pdGlhbGl6YXRpb24pIHsKLSAgICAgICAgZmluaXNoSW5pdGlhbGl6 YXRpb24oKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBmaW5p c2hJbml0aWFsaXphdGlvbigpIHsKLSAgICAgIGlmICghaW5pdGlhbGl6ZWQp IHsKLSAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgICAgIHZp ZXdwb3J0VyA9IHBhcnNlRmxvYXQoJC5jc3MoJGNvbnRhaW5lclswXSwgIndp ZHRoIiwgdHJ1ZSkpOwotCi0gICAgICAgIC8vIGhlYWRlciBjb2x1bW5zIGFu ZCBjZWxscyBtYXkgaGF2ZSBkaWZmZXJlbnQgcGFkZGluZy9ib3JkZXIgc2tl d2luZyB3aWR0aCBjYWxjdWxhdGlvbnMgKGJveC1zaXppbmcsIGhlbGxvPykK LSAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBkaWZmIHNvIHdlIGNhbiBzZXQg Y29uc2lzdGVudCBzaXplcwotICAgICAgICBtZWFzdXJlQ2VsbFBhZGRpbmdB bmRCb3JkZXIoKTsKLQotICAgICAgICAvLyBmb3IgdXNhYmlsaXR5IHJlYXNv bnMsIGFsbCB0ZXh0IHNlbGVjdGlvbiBpbiBTbGlja0dyaWQgaXMgZGlzYWJs ZWQKLSAgICAgICAgLy8gd2l0aCB0aGUgZXhjZXB0aW9uIG9mIGlucHV0IGFu ZCB0ZXh0YXJlYSBlbGVtZW50cyAoc2VsZWN0aW9uIG11c3QKLSAgICAgICAg Ly8gYmUgZW5hYmxlZCB0aGVyZSBzbyB0aGF0IGVkaXRvcnMgd29yayBhcyBl eHBlY3RlZCk7IG5vdGUgdGhhdAotICAgICAgICAvLyBzZWxlY3Rpb24gaW4g Z3JpZCBjZWxscyAoZ3JpZCBib2R5KSBpcyBhbHJlYWR5IHVuYXZhaWxhYmxl IGluCi0gICAgICAgIC8vIGFsbCBicm93c2VycyBleGNlcHQgSUUKLSAgICAg ICAgZGlzYWJsZVNlbGVjdGlvbigkaGVhZGVycyk7IC8vIGRpc2FibGUgYWxs IHRleHQgc2VsZWN0aW9uIGluIGhlYWRlciAoaW5jbHVkaW5nIGlucHV0IGFu ZCB0ZXh0YXJlYSkKLQotICAgICAgICBpZiAoIW9wdGlvbnMuZW5hYmxlVGV4 dFNlbGVjdGlvbk9uQ2VsbHMpIHsKLSAgICAgICAgICAvLyBkaXNhYmxlIHRl eHQgc2VsZWN0aW9uIGluIGdyaWQgY2VsbHMgZXhjZXB0IGluIGlucHV0IGFu ZCB0ZXh0YXJlYSBlbGVtZW50cwotICAgICAgICAgIC8vICh0aGlzIGlzIElF LXNwZWNpZmljLCBiZWNhdXNlIHNlbGVjdHN0YXJ0IGV2ZW50IHdpbGwgb25s eSBmaXJlIGluIElFKQotICAgICAgICAgICR2aWV3cG9ydC5iaW5kKCJzZWxl Y3RzdGFydC51aSIsIGZ1bmN0aW9uIChldmVudCkgewotICAgICAgICAgICAg cmV0dXJuICQoZXZlbnQudGFyZ2V0KS5pcygiaW5wdXQsdGV4dGFyZWEiKTsK LSAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIHVwZGF0ZUNv bHVtbkNhY2hlcygpOwotICAgICAgICBjcmVhdGVDb2x1bW5IZWFkZXJzKCk7 Ci0gICAgICAgIHNldHVwQ29sdW1uU29ydCgpOwotICAgICAgICBjcmVhdGVD c3NSdWxlcygpOwotICAgICAgICByZXNpemVDYW52YXMoKTsKLSAgICAgICAg YmluZEFuY2VzdG9yU2Nyb2xsRXZlbnRzKCk7Ci0KLSAgICAgICAgJGNvbnRh aW5lcgotICAgICAgICAgICAgLmJpbmQoInJlc2l6ZS5zbGlja2dyaWQiLCBy ZXNpemVDYW52YXMpOwotICAgICAgICAkdmlld3BvcnQKLSAgICAgICAgICAg IC8vLmJpbmQoImNsaWNrIiwgaGFuZGxlQ2xpY2spCi0gICAgICAgICAgICAu YmluZCgic2Nyb2xsIiwgaGFuZGxlU2Nyb2xsKTsKLSAgICAgICAgJGhlYWRl clNjcm9sbGVyCi0gICAgICAgICAgICAuYmluZCgiY29udGV4dG1lbnUiLCBo YW5kbGVIZWFkZXJDb250ZXh0TWVudSkKLSAgICAgICAgICAgIC5iaW5kKCJj bGljayIsIGhhbmRsZUhlYWRlckNsaWNrKQotICAgICAgICAgICAgLmRlbGVn YXRlKCIuc2xpY2staGVhZGVyLWNvbHVtbiIsICJtb3VzZWVudGVyIiwgaGFu ZGxlSGVhZGVyTW91c2VFbnRlcikKLSAgICAgICAgICAgIC5kZWxlZ2F0ZSgi LnNsaWNrLWhlYWRlci1jb2x1bW4iLCAibW91c2VsZWF2ZSIsIGhhbmRsZUhl YWRlck1vdXNlTGVhdmUpOwotICAgICAgICAkaGVhZGVyUm93U2Nyb2xsZXIK LSAgICAgICAgICAgIC5iaW5kKCJzY3JvbGwiLCBoYW5kbGVIZWFkZXJSb3dT Y3JvbGwpOwotICAgICAgICAkZm9jdXNTaW5rLmFkZCgkZm9jdXNTaW5rMikK LSAgICAgICAgICAgIC5iaW5kKCJrZXlkb3duIiwgaGFuZGxlS2V5RG93bik7 Ci0gICAgICAgICRjYW52YXMKLSAgICAgICAgICAgIC5iaW5kKCJrZXlkb3du IiwgaGFuZGxlS2V5RG93bikKLSAgICAgICAgICAgIC5iaW5kKCJjbGljayIs IGhhbmRsZUNsaWNrKQotICAgICAgICAgICAgLmJpbmQoImRibGNsaWNrIiwg aGFuZGxlRGJsQ2xpY2spCi0gICAgICAgICAgICAuYmluZCgiY29udGV4dG1l bnUiLCBoYW5kbGVDb250ZXh0TWVudSkKLSAgICAgICAgICAgIC5iaW5kKCJk cmFnaW5pdCIsIGhhbmRsZURyYWdJbml0KQotICAgICAgICAgICAgLmJpbmQo ImRyYWdzdGFydCIsIHtkaXN0YW5jZTogM30sIGhhbmRsZURyYWdTdGFydCkK LSAgICAgICAgICAgIC5iaW5kKCJkcmFnIiwgaGFuZGxlRHJhZykKLSAgICAg ICAgICAgIC5iaW5kKCJkcmFnZW5kIiwgaGFuZGxlRHJhZ0VuZCkKLSAgICAg ICAgICAgIC5kZWxlZ2F0ZSgiLnNjIiwgIm1vdXNlZW50ZXIiLCBoYW5kbGVN b3VzZUVudGVyKQotICAgICAgICAgICAgLmRlbGVnYXRlKCIuc2MiLCAibW91 c2VsZWF2ZSIsIGhhbmRsZU1vdXNlTGVhdmUpOwotCi0gICAgICAgIC8vIFdv cmsgYXJvdW5kIGh0dHA6Ly9jcmJ1Zy5jb20vMzEyNDI3LgotICAgICAgICBp ZiAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC93 ZWJraXQvKSAmJgotICAgICAgICAgICAgbmF2aWdhdG9yLnVzZXJBZ2VudC50 b0xvd2VyQ2FzZSgpLm1hdGNoKC9tYWNpbnRvc2gvKSkgewotICAgICAgICAg ICRjYW52YXMuYmluZCgibW91c2V3aGVlbCIsIGhhbmRsZU1vdXNlV2hlZWwp OwotICAgICAgICB9Ci0gICAgICAgIHJlc3RvcmVDc3NGcm9tSGlkZGVuSW5p dCgpOwotICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIGNhY2hlQ3Nz Rm9ySGlkZGVuSW5pdCgpIHsKLSAgICAgIC8vIGhhbmRsZSBkaXNwbGF5Om5v bmUgb24gY29udGFpbmVyIG9yIGNvbnRhaW5lciBwYXJlbnRzCi0gICAgICAk aGlkZGVuUGFyZW50cyA9ICRjb250YWluZXIucGFyZW50cygpLmFuZFNlbGYo KS5ub3QoJzp2aXNpYmxlJyk7Ci0gICAgICAkaGlkZGVuUGFyZW50cy5lYWNo KGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgb2xkID0ge307Ci0gICAgICAg IGZvciAoIHZhciBuYW1lIGluIGNzc1Nob3cgKSB7Ci0gICAgICAgICAgb2xk WyBuYW1lIF0gPSB0aGlzLnN0eWxlWyBuYW1lIF07Ci0gICAgICAgICAgdGhp cy5zdHlsZVsgbmFtZSBdID0gY3NzU2hvd1sgbmFtZSBdOwotICAgICAgICB9 Ci0gICAgICAgIG9sZFByb3BzLnB1c2gob2xkKTsKLSAgICAgIH0pOwotICAg IH0KLQotICAgIGZ1bmN0aW9uIHJlc3RvcmVDc3NGcm9tSGlkZGVuSW5pdCgp IHsKLSAgICAgIC8vIGZpbmlzaCBoYW5kbGUgZGlzcGxheTpub25lIG9uIGNv bnRhaW5lciBvciBjb250YWluZXIgcGFyZW50cwotICAgICAgLy8gLSBwdXQg dmFsdWVzIGJhY2sgdGhlIHdheSB0aGV5IHdlcmUKLSAgICAgICRoaWRkZW5Q YXJlbnRzLmVhY2goZnVuY3Rpb24oaSkgewotICAgICAgICB2YXIgb2xkID0g b2xkUHJvcHNbaV07Ci0gICAgICAgIGZvciAoIHZhciBuYW1lIGluIGNzc1No b3cgKSB7Ci0gICAgICAgICAgdGhpcy5zdHlsZVsgbmFtZSBdID0gb2xkWyBu YW1lIF07Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIH0KLQotICAgIGZ1 bmN0aW9uIHJlZ2lzdGVyUGx1Z2luKHBsdWdpbikgewotICAgICAgcGx1Z2lu cy51bnNoaWZ0KHBsdWdpbik7Ci0gICAgICBwbHVnaW4uaW5pdChzZWxmKTsK LSAgICB9Ci0KLSAgICBmdW5jdGlvbiB1bnJlZ2lzdGVyUGx1Z2luKHBsdWdp bikgewotICAgICAgZm9yICh2YXIgaSA9IHBsdWdpbnMubGVuZ3RoOyBpID49 IDA7IGktLSkgewotICAgICAgICBpZiAocGx1Z2luc1tpXSA9PT0gcGx1Z2lu KSB7Ci0gICAgICAgICAgaWYgKHBsdWdpbnNbaV0uZGVzdHJveSkgewotICAg ICAgICAgICAgcGx1Z2luc1tpXS5kZXN0cm95KCk7Ci0gICAgICAgICAgfQot ICAgICAgICAgIHBsdWdpbnMuc3BsaWNlKGksIDEpOwotICAgICAgICAgIGJy ZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rp b24gc2V0U2VsZWN0aW9uTW9kZWwobW9kZWwpIHsKLSAgICAgIGlmIChzZWxl Y3Rpb25Nb2RlbCkgewotICAgICAgICBzZWxlY3Rpb25Nb2RlbC5vblNlbGVj dGVkUmFuZ2VzQ2hhbmdlZC51bnN1YnNjcmliZShoYW5kbGVTZWxlY3RlZFJh bmdlc0NoYW5nZWQpOwotICAgICAgICBpZiAoc2VsZWN0aW9uTW9kZWwuZGVz dHJveSkgewotICAgICAgICAgIHNlbGVjdGlvbk1vZGVsLmRlc3Ryb3koKTsK LSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBzZWxlY3Rpb25Nb2RlbCA9 IG1vZGVsOwotICAgICAgaWYgKHNlbGVjdGlvbk1vZGVsKSB7Ci0gICAgICAg IHNlbGVjdGlvbk1vZGVsLmluaXQoc2VsZik7Ci0gICAgICAgIHNlbGVjdGlv bk1vZGVsLm9uU2VsZWN0ZWRSYW5nZXNDaGFuZ2VkLnN1YnNjcmliZShoYW5k bGVTZWxlY3RlZFJhbmdlc0NoYW5nZWQpOwotICAgICAgfQotICAgIH0KLQot ICAgIGZ1bmN0aW9uIGdldFNlbGVjdGlvbk1vZGVsKCkgewotICAgICAgcmV0 dXJuIHNlbGVjdGlvbk1vZGVsOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGdl dENhbnZhc05vZGUoKSB7Ci0gICAgICByZXR1cm4gJGNhbnZhc1swXTsKLSAg ICB9Ci0KLSAgICBmdW5jdGlvbiBtZWFzdXJlU2Nyb2xsYmFyKCkgewotICAg ICAgdmFyICRjID0gJCgiPGRpdiBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7 IHRvcDotMTAwMDBweDsgbGVmdDotMTAwMDBweDsgd2lkdGg6MTAwcHg7IGhl aWdodDoxMDBweDsgb3ZlcmZsb3c6c2Nyb2xsOyc+PC9kaXY+IikuYXBwZW5k VG8oImJvZHkiKTsKLSAgICAgIHZhciBkaW0gPSB7Ci0gICAgICAgIHdpZHRo OiAkYy53aWR0aCgpIC0gJGNbMF0uY2xpZW50V2lkdGgsCi0gICAgICAgIGhl aWdodDogJGMuaGVpZ2h0KCkgLSAkY1swXS5jbGllbnRIZWlnaHQKLSAgICAg IH07Ci0gICAgICAkYy5yZW1vdmUoKTsKLSAgICAgIHJldHVybiBkaW07Ci0g ICAgfQotCi0gICAgZnVuY3Rpb24gZ2V0SGVhZGVyc1dpZHRoKCkgewotICAg ICAgdmFyIGhlYWRlcnNXaWR0aCA9IDA7Ci0gICAgICBmb3IgKHZhciBpID0g MCwgaWkgPSBjb2x1bW5zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKLSAgICAg ICAgdmFyIHdpZHRoID0gY29sdW1uc1tpXS53aWR0aDsKLSAgICAgICAgaGVh ZGVyc1dpZHRoICs9IHdpZHRoOwotICAgICAgfQotICAgICAgaGVhZGVyc1dp ZHRoICs9IHNjcm9sbGJhckRpbWVuc2lvbnMud2lkdGg7Ci0gICAgICByZXR1 cm4gTWF0aC5tYXgoaGVhZGVyc1dpZHRoLCB2aWV3cG9ydFcpICsgMTAwMDsK LSAgICB9Ci0KLSAgICBmdW5jdGlvbiBnZXRDYW52YXNXaWR0aCgpIHsKLSAg ICAgIHZhciBhdmFpbGFibGVXaWR0aCA9IHZpZXdwb3J0SGFzVlNjcm9sbCA/ IHZpZXdwb3J0VyAtIHNjcm9sbGJhckRpbWVuc2lvbnMud2lkdGggOiB2aWV3 cG9ydFc7Ci0gICAgICB2YXIgcm93V2lkdGggPSAwOwotICAgICAgdmFyIGkg PSBjb2x1bW5zLmxlbmd0aDsKLSAgICAgIHdoaWxlIChpLS0pIHsKLSAgICAg ICAgcm93V2lkdGggKz0gY29sdW1uc1tpXS53aWR0aDsKLSAgICAgIH0KLSAg ICAgIHJldHVybiBvcHRpb25zLmZ1bGxXaWR0aFJvd3MgPyBNYXRoLm1heChy b3dXaWR0aCwgYXZhaWxhYmxlV2lkdGgpIDogcm93V2lkdGg7Ci0gICAgfQot Ci0gICAgZnVuY3Rpb24gdXBkYXRlQ2FudmFzV2lkdGgoZm9yY2VDb2x1bW5X aWR0aHNVcGRhdGUpIHsKLSAgICAgIHZhciBvbGRDYW52YXNXaWR0aCA9IGNh bnZhc1dpZHRoOwotICAgICAgY2FudmFzV2lkdGggPSBnZXRDYW52YXNXaWR0 aCgpOwotCi0gICAgICBpZiAoY2FudmFzV2lkdGggIT0gb2xkQ2FudmFzV2lk dGgpIHsKLSAgICAgICAgJGNhbnZhcy53aWR0aChjYW52YXNXaWR0aCk7Ci0g ICAgICAgICRoZWFkZXJSb3cud2lkdGgoY2FudmFzV2lkdGgpOwotICAgICAg ICAkaGVhZGVycy53aWR0aChnZXRIZWFkZXJzV2lkdGgoKSk7Ci0gICAgICAg IHZpZXdwb3J0SGFzSFNjcm9sbCA9IChjYW52YXNXaWR0aCA+IHZpZXdwb3J0 VyAtIHNjcm9sbGJhckRpbWVuc2lvbnMud2lkdGgpOwotICAgICAgfQotCi0g ICAgICAkaGVhZGVyUm93U3BhY2VyLndpZHRoKGNhbnZhc1dpZHRoICsgKHZp ZXdwb3J0SGFzVlNjcm9sbCA/IHNjcm9sbGJhckRpbWVuc2lvbnMud2lkdGgg OiAwKSk7Ci0KLSAgICAgIGlmIChjYW52YXNXaWR0aCAhPSBvbGRDYW52YXNX aWR0aCB8fCBmb3JjZUNvbHVtbldpZHRoc1VwZGF0ZSkgewotICAgICAgICBh cHBseUNvbHVtbldpZHRocygpOwotICAgICAgfQotICAgIH0KLQotICAgIGZ1 bmN0aW9uIGRpc2FibGVTZWxlY3Rpb24oJHRhcmdldCkgewotICAgICAgaWYg KCR0YXJnZXQgJiYgJHRhcmdldC5qcXVlcnkpIHsKLSAgICAgICAgJHRhcmdl dAotICAgICAgICAgICAgLmF0dHIoInVuc2VsZWN0YWJsZSIsICJvbiIpCi0g ICAgICAgICAgICAuY3NzKCJNb3pVc2VyU2VsZWN0IiwgIm5vbmUiKQotICAg ICAgICAgICAgLmJpbmQoInNlbGVjdHN0YXJ0LnVpIiwgZnVuY3Rpb24gKCkg ewotICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9 KTsgLy8gZnJvbSBqcXVlcnk6dWkuY29yZS5qcyAxLjcuMgotICAgICAgfQot ICAgIH0KLQotICAgIGZ1bmN0aW9uIGdldE1heFN1cHBvcnRlZENzc0hlaWdo dCgpIHsKLSAgICAgIHZhciBzdXBwb3J0ZWRIZWlnaHQgPSAxMDAwMDAwOwot ICAgICAgLy8gRkYgcmVwb3J0cyB0aGUgaGVpZ2h0IGJhY2sgYnV0IHN0aWxs IHJlbmRlcnMgYmxhbmsgYWZ0ZXIgfjZNIHB4Ci0gICAgICB2YXIgdGVzdFVw VG8gPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2go L2ZpcmVmb3gvKSA/IDYwMDAwMDAgOiAxMDAwMDAwMDAwOwotICAgICAgdmFy IGRpdiA9ICQoIjxkaXYgc3R5bGU9J2Rpc3BsYXk6bm9uZScgLz4iKS5hcHBl bmRUbyhkb2N1bWVudC5ib2R5KTsKLQotICAgICAgd2hpbGUgKHRydWUpIHsK LSAgICAgICAgdmFyIHRlc3QgPSBzdXBwb3J0ZWRIZWlnaHQgKiAyOwotICAg ICAgICBkaXYuY3NzKCJoZWlnaHQiLCB0ZXN0KTsKLSAgICAgICAgaWYgKHRl c3QgPiB0ZXN0VXBUbyB8fCBkaXYuaGVpZ2h0KCkgIT09IHRlc3QpIHsKLSAg ICAgICAgICBicmVhazsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBz dXBwb3J0ZWRIZWlnaHQgPSB0ZXN0OwotICAgICAgICB9Ci0gICAgICB9Ci0K LSAgICAgIGRpdi5yZW1vdmUoKTsKLSAgICAgIHJldHVybiBzdXBwb3J0ZWRI ZWlnaHQ7Ci0gICAgfQotCi0gICAgLy8gVE9ETzogIHRoaXMgaXMgc3RhdGlj LiAgbmVlZCB0byBoYW5kbGUgcGFnZSBtdXRhdGlvbi4KLSAgICBmdW5jdGlv biBiaW5kQW5jZXN0b3JTY3JvbGxFdmVudHMoKSB7Ci0gICAgICB2YXIgZWxl bSA9ICRjYW52YXNbMF07Ci0gICAgICB3aGlsZSAoKGVsZW0gPSBlbGVtLnBh cmVudE5vZGUpICE9IGRvY3VtZW50LmJvZHkgJiYgZWxlbSAhPSBudWxsKSB7 Ci0gICAgICAgIC8vIGJpbmQgdG8gc2Nyb2xsIGNvbnRhaW5lcnMgb25seQot ICAgICAgICBpZiAoZWxlbSA9PSAkdmlld3BvcnRbMF0gfHwgZWxlbS5zY3Jv bGxXaWR0aCAhPSBlbGVtLmNsaWVudFdpZHRoIHx8IGVsZW0uc2Nyb2xsSGVp Z2h0ICE9IGVsZW0uY2xpZW50SGVpZ2h0KSB7Ci0gICAgICAgICAgdmFyICRl bGVtID0gJChlbGVtKTsKLSAgICAgICAgICBpZiAoISRib3VuZEFuY2VzdG9y cykgewotICAgICAgICAgICAgJGJvdW5kQW5jZXN0b3JzID0gJGVsZW07Ci0g ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICRib3VuZEFuY2VzdG9y cyA9ICRib3VuZEFuY2VzdG9ycy5hZGQoJGVsZW0pOwotICAgICAgICAgIH0K LSAgICAgICAgICAkZWxlbS5iaW5kKCJzY3JvbGwuIiArIHVpZCwgaGFuZGxl QWN0aXZlQ2VsbFBvc2l0aW9uQ2hhbmdlKTsKLSAgICAgICAgfQotICAgICAg fQotICAgIH0KLQotICAgIGZ1bmN0aW9uIHVuYmluZEFuY2VzdG9yU2Nyb2xs RXZlbnRzKCkgewotICAgICAgaWYgKCEkYm91bmRBbmNlc3RvcnMpIHsKLSAg ICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgJGJvdW5kQW5jZXN0b3Jz LnVuYmluZCgic2Nyb2xsLiIgKyB1aWQpOwotICAgICAgJGJvdW5kQW5jZXN0 b3JzID0gbnVsbDsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiB1cGRhdGVDb2x1 bW5IZWFkZXIoY29sdW1uSWQsIHRpdGxlLCB0b29sVGlwKSB7Ci0gICAgICBp ZiAoIWluaXRpYWxpemVkKSB7IHJldHVybjsgfQotICAgICAgdmFyIGlkeCA9 IGdldENvbHVtbkluZGV4KGNvbHVtbklkKTsKLSAgICAgIGlmIChpZHggPT0g bnVsbCkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIHZh ciBjb2x1bW5EZWYgPSBjb2x1bW5zW2lkeF07Ci0gICAgICB2YXIgJGhlYWRl ciA9ICRoZWFkZXJzLmNoaWxkcmVuKCkuZXEoaWR4KTsKLSAgICAgIGlmICgk aGVhZGVyKSB7Ci0gICAgICAgIGlmICh0aXRsZSAhPT0gdW5kZWZpbmVkKSB7 Ci0gICAgICAgICAgY29sdW1uc1tpZHhdLm5hbWUgPSB0aXRsZTsKLSAgICAg ICAgfQotICAgICAgICBpZiAodG9vbFRpcCAhPT0gdW5kZWZpbmVkKSB7Ci0g ICAgICAgICAgY29sdW1uc1tpZHhdLnRvb2xUaXAgPSB0b29sVGlwOwotICAg ICAgICB9Ci0KLSAgICAgICAgdHJpZ2dlcihzZWxmLm9uQmVmb3JlSGVhZGVy Q2VsbERlc3Ryb3ksIHsKLSAgICAgICAgICAibm9kZSI6ICRoZWFkZXJbMF0s Ci0gICAgICAgICAgImNvbHVtbiI6IGNvbHVtbkRlZiwKLSAgICAgICAgICAi Z3JpZCI6IHNlbGYKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgJGhlYWRlcgot ICAgICAgICAgICAgLmF0dHIoInRpdGxlIiwgdG9vbFRpcCB8fCAiIikKLSAg ICAgICAgICAgIC5jaGlsZHJlbigpLmVxKDApLmh0bWwodGl0bGUpOwotCi0g ICAgICAgIHRyaWdnZXIoc2VsZi5vbkhlYWRlckNlbGxSZW5kZXJlZCwgewot ICAgICAgICAgICJub2RlIjogJGhlYWRlclswXSwKLSAgICAgICAgICAiY29s dW1uIjogY29sdW1uRGVmLAotICAgICAgICAgICJncmlkIjogc2VsZgotICAg ICAgICB9KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBnZXRI ZWFkZXJSb3coKSB7Ci0gICAgICByZXR1cm4gJGhlYWRlclJvd1swXTsKLSAg ICB9Ci0KLSAgICBmdW5jdGlvbiBnZXRIZWFkZXJSb3dDb2x1bW4oY29sdW1u SWQpIHsKLSAgICAgIHZhciBpZHggPSBnZXRDb2x1bW5JbmRleChjb2x1bW5J ZCk7Ci0gICAgICB2YXIgJGhlYWRlciA9ICRoZWFkZXJSb3cuY2hpbGRyZW4o KS5lcShpZHgpOwotICAgICAgcmV0dXJuICRoZWFkZXIgJiYgJGhlYWRlclsw XTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBjcmVhdGVDb2x1bW5IZWFkZXJz KCkgewotICAgICAgZnVuY3Rpb24gb25Nb3VzZUVudGVyKCkgewotICAgICAg ICAkKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpOwotICAgICAg fQotCi0gICAgICBmdW5jdGlvbiBvbk1vdXNlTGVhdmUoKSB7Ci0gICAgICAg ICQodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWhvdmVyIik7Ci0gICAg ICB9Ci0KLSAgICAgICRoZWFkZXJzLmZpbmQoIi5zbGljay1oZWFkZXItY29s dW1uIikKLSAgICAgICAgLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg dmFyIGNvbHVtbkRlZiA9ICQodGhpcykuZGF0YSgiY29sdW1uIik7Ci0gICAg ICAgICAgaWYgKGNvbHVtbkRlZikgewotICAgICAgICAgICAgdHJpZ2dlcihz ZWxmLm9uQmVmb3JlSGVhZGVyQ2VsbERlc3Ryb3ksIHsKLSAgICAgICAgICAg ICAgIm5vZGUiOiB0aGlzLAotICAgICAgICAgICAgICAiY29sdW1uIjogY29s dW1uRGVmLAotICAgICAgICAgICAgICAiZ3JpZCI6IHNlbGYKLSAgICAgICAg ICAgIH0pOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICAkaGVh ZGVycy5lbXB0eSgpOwotICAgICAgJGhlYWRlcnMud2lkdGgoZ2V0SGVhZGVy c1dpZHRoKCkpOwotCi0gICAgICAkaGVhZGVyUm93LmZpbmQoIi5zbGljay1o ZWFkZXJyb3ctY29sdW1uIikKLSAgICAgICAgLmVhY2goZnVuY3Rpb24oKSB7 Ci0gICAgICAgICAgdmFyIGNvbHVtbkRlZiA9ICQodGhpcykuZGF0YSgiY29s dW1uIik7Ci0gICAgICAgICAgaWYgKGNvbHVtbkRlZikgewotICAgICAgICAg ICAgdHJpZ2dlcihzZWxmLm9uQmVmb3JlSGVhZGVyUm93Q2VsbERlc3Ryb3ks IHsKLSAgICAgICAgICAgICAgIm5vZGUiOiB0aGlzLAotICAgICAgICAgICAg ICAiY29sdW1uIjogY29sdW1uRGVmLAotICAgICAgICAgICAgICAiZ3JpZCI6 IHNlbGYKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgIH0KLSAgICAgICAg fSk7Ci0gICAgICAkaGVhZGVyUm93LmVtcHR5KCk7Ci0KLSAgICAgIGZvciAo dmFyIGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkrKykgewotICAgICAg ICB2YXIgbSA9IGNvbHVtbnNbaV07Ci0KLSAgICAgICAgdmFyIGhlYWRlciA9 ICQoIjxkaXYgY2xhc3M9J3VpLXN0YXRlLWRlZmF1bHQgc2xpY2staGVhZGVy LWNvbHVtbicgLz4iKQotICAgICAgICAgICAgLmh0bWwoIjxzcGFuIGNsYXNz PSdzbGljay1jb2x1bW4tbmFtZSc+IiArIG0ubmFtZSArICI8L3NwYW4+IikK LSAgICAgICAgICAgIC53aWR0aChtLndpZHRoIC0gaGVhZGVyQ29sdW1uV2lk dGhEaWZmKQotICAgICAgICAgICAgLmF0dHIoImlkIiwgIiIgKyB1aWQgKyBt LmlkKQotICAgICAgICAgICAgLmF0dHIoInRpdGxlIiwgbS50b29sVGlwIHx8 ICIiKQotICAgICAgICAgICAgLmRhdGEoImNvbHVtbiIsIG0pCi0gICAgICAg ICAgICAuYWRkQ2xhc3MobS5oZWFkZXJDc3NDbGFzcyB8fCAiIikKLSAgICAg ICAgICAgIC5hcHBlbmRUbygkaGVhZGVycyk7Ci0KLSAgICAgICAgaWYgKG9w dGlvbnMuZW5hYmxlQ29sdW1uUmVvcmRlciB8fCBtLnNvcnRhYmxlKSB7Ci0g ICAgICAgICAgaGVhZGVyCi0gICAgICAgICAgICAub24oJ21vdXNlZW50ZXIn LCBvbk1vdXNlRW50ZXIpCi0gICAgICAgICAgICAub24oJ21vdXNlbGVhdmUn LCBvbk1vdXNlTGVhdmUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG0u c29ydGFibGUpIHsKLSAgICAgICAgICBoZWFkZXIuYWRkQ2xhc3MoInNsaWNr LWhlYWRlci1zb3J0YWJsZSIpOwotICAgICAgICAgIGhlYWRlci5hcHBlbmQo IjxzcGFuIGNsYXNzPSdzbGljay1zb3J0LWluZGljYXRvcicgLz4iKTsKLSAg ICAgICAgfQotCi0gICAgICAgIHRyaWdnZXIoc2VsZi5vbkhlYWRlckNlbGxS ZW5kZXJlZCwgewotICAgICAgICAgICJub2RlIjogaGVhZGVyWzBdLAotICAg ICAgICAgICJjb2x1bW4iOiBtLAotICAgICAgICAgICJncmlkIjogc2VsZgot ICAgICAgICB9KTsKLQotICAgICAgICBpZiAob3B0aW9ucy5zaG93SGVhZGVy Um93KSB7Ci0gICAgICAgICAgdmFyIGhlYWRlclJvd0NlbGwgPSAkKCI8ZGl2 IGNsYXNzPSd1aS1zdGF0ZS1kZWZhdWx0IHNsaWNrLWhlYWRlcnJvdy1jb2x1 bW4gbCIgKyBpICsgIiByIiArIGkgKyAiJz48L2Rpdj4iKQotICAgICAgICAg ICAgICAuZGF0YSgiY29sdW1uIiwgbSkKLSAgICAgICAgICAgICAgLmFwcGVu ZFRvKCRoZWFkZXJSb3cpOwotCi0gICAgICAgICAgdHJpZ2dlcihzZWxmLm9u SGVhZGVyUm93Q2VsbFJlbmRlcmVkLCB7Ci0gICAgICAgICAgICAibm9kZSI6 IGhlYWRlclJvd0NlbGxbMF0sCi0gICAgICAgICAgICAiY29sdW1uIjogbSwK LSAgICAgICAgICAgICJncmlkIjogc2VsZgotICAgICAgICAgIH0pOwotICAg ICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHNldFNvcnRDb2x1bW5zKHNvcnRD b2x1bW5zKTsKLSAgICAgIHNldHVwQ29sdW1uUmVzaXplKCk7Ci0gICAgICBp ZiAob3B0aW9ucy5lbmFibGVDb2x1bW5SZW9yZGVyKSB7Ci0gICAgICAgIHNl dHVwQ29sdW1uUmVvcmRlcigpOwotICAgICAgfQotICAgIH0KLQotICAgIGZ1 bmN0aW9uIHNldHVwQ29sdW1uU29ydCgpIHsKLSAgICAgICRoZWFkZXJzLmNs aWNrKGZ1bmN0aW9uIChlKSB7Ci0gICAgICAgIC8vIHRlbXBvcmFyeSB3b3Jr YXJvdW5kIGZvciBhIGJ1ZyBpbiBqUXVlcnkgMS43LjEgKGh0dHA6Ly9idWdz LmpxdWVyeS5jb20vdGlja2V0LzExMzI4KQotICAgICAgICBlLm1ldGFLZXkg PSBlLm1ldGFLZXkgfHwgZS5jdHJsS2V5OwotCi0gICAgICAgIGlmICgkKGUu dGFyZ2V0KS5oYXNDbGFzcygic2xpY2stcmVzaXphYmxlLWhhbmRsZSIpKSB7 Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFy ICRjb2wgPSAkKGUudGFyZ2V0KS5jbG9zZXN0KCIuc2xpY2staGVhZGVyLWNv bHVtbiIpOwotICAgICAgICBpZiAoISRjb2wubGVuZ3RoKSB7Ci0gICAgICAg ICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGNvbHVtbiA9 ICRjb2wuZGF0YSgiY29sdW1uIik7Ci0gICAgICAgIGlmIChjb2x1bW4uc29y dGFibGUpIHsKLSAgICAgICAgICBpZiAoIWdldEVkaXRvckxvY2soKS5jb21t aXRDdXJyZW50RWRpdCgpKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg ICAgICAgfQotCi0gICAgICAgICAgdmFyIHNvcnRPcHRzID0gbnVsbDsKLSAg ICAgICAgICB2YXIgaSA9IDA7Ci0gICAgICAgICAgZm9yICg7IGkgPCBzb3J0 Q29sdW1ucy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgaWYgKHNvcnRD b2x1bW5zW2ldLmNvbHVtbklkID09IGNvbHVtbi5pZCkgewotICAgICAgICAg ICAgICBzb3J0T3B0cyA9IHNvcnRDb2x1bW5zW2ldOwotICAgICAgICAgICAg ICBzb3J0T3B0cy5zb3J0QXNjID0gIXNvcnRPcHRzLnNvcnRBc2M7Ci0gICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0K LQotICAgICAgICAgIGlmIChlLm1ldGFLZXkgJiYgb3B0aW9ucy5tdWx0aUNv bHVtblNvcnQpIHsKLSAgICAgICAgICAgIGlmIChzb3J0T3B0cykgewotICAg ICAgICAgICAgICBzb3J0Q29sdW1ucy5zcGxpY2UoaSwgMSk7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UgewotICAgICAg ICAgICAgaWYgKCghZS5zaGlmdEtleSAmJiAhZS5tZXRhS2V5KSB8fCAhb3B0 aW9ucy5tdWx0aUNvbHVtblNvcnQpIHsKLSAgICAgICAgICAgICAgc29ydENv bHVtbnMgPSBbXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYg KCFzb3J0T3B0cykgewotICAgICAgICAgICAgICBzb3J0T3B0cyA9IHsgY29s dW1uSWQ6IGNvbHVtbi5pZCwgc29ydEFzYzogY29sdW1uLmRlZmF1bHRTb3J0 QXNjIH07Ci0gICAgICAgICAgICAgIHNvcnRDb2x1bW5zLnB1c2goc29ydE9w dHMpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzb3J0Q29sdW1ucy5sZW5n dGggPT0gMCkgewotICAgICAgICAgICAgICBzb3J0Q29sdW1ucy5wdXNoKHNv cnRPcHRzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAg ICAgICBzZXRTb3J0Q29sdW1ucyhzb3J0Q29sdW1ucyk7Ci0KLSAgICAgICAg ICBpZiAoIW9wdGlvbnMubXVsdGlDb2x1bW5Tb3J0KSB7Ci0gICAgICAgICAg ICB0cmlnZ2VyKHNlbGYub25Tb3J0LCB7Ci0gICAgICAgICAgICAgIG11bHRp Q29sdW1uU29ydDogZmFsc2UsCi0gICAgICAgICAgICAgIHNvcnRDb2w6IGNv bHVtbiwKLSAgICAgICAgICAgICAgc29ydEFzYzogc29ydE9wdHMuc29ydEFz YywKLSAgICAgICAgICAgICAgZ3JpZDogc2VsZn0sIGUpOwotICAgICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICB0cmlnZ2VyKHNlbGYub25Tb3J0LCB7 Ci0gICAgICAgICAgICAgIG11bHRpQ29sdW1uU29ydDogdHJ1ZSwKLSAgICAg ICAgICAgICAgc29ydENvbHM6ICQubWFwKHNvcnRDb2x1bW5zLCBmdW5jdGlv bihjb2wpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4ge3NvcnRDb2w6IGNv bHVtbnNbZ2V0Q29sdW1uSW5kZXgoY29sLmNvbHVtbklkKV0sIHNvcnRBc2M6 IGNvbC5zb3J0QXNjIH07Ci0gICAgICAgICAgICAgIH0pLAotICAgICAgICAg ICAgICBncmlkOiBzZWxmfSwgZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9 Ci0gICAgICB9KTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBzZXR1cENvbHVt blJlb3JkZXIoKSB7Ci0gICAgICAkaGVhZGVycy5maWx0ZXIoIjp1aS1zb3J0 YWJsZSIpLnNvcnRhYmxlKCJkZXN0cm95Iik7Ci0gICAgICAkaGVhZGVycy5z b3J0YWJsZSh7Ci0gICAgICAgIGNvbnRhaW5tZW50OiAicGFyZW50IiwKLSAg ICAgICAgZGlzdGFuY2U6IDMsCi0gICAgICAgIGF4aXM6ICJ4IiwKLSAgICAg ICAgY3Vyc29yOiAiZGVmYXVsdCIsCi0gICAgICAgIHRvbGVyYW5jZTogImlu dGVyc2VjdGlvbiIsCi0gICAgICAgIGhlbHBlcjogImNsb25lIiwKLSAgICAg ICAgcGxhY2Vob2xkZXI6ICJzbGljay1zb3J0YWJsZS1wbGFjZWhvbGRlciB1 aS1zdGF0ZS1kZWZhdWx0IHNsaWNrLWhlYWRlci1jb2x1bW4iLAotICAgICAg ICBzdGFydDogZnVuY3Rpb24gKGUsIHVpKSB7Ci0gICAgICAgICAgdWkucGxh Y2Vob2xkZXIud2lkdGgodWkuaGVscGVyLm91dGVyV2lkdGgoKSAtIGhlYWRl ckNvbHVtbldpZHRoRGlmZik7Ci0gICAgICAgICAgJCh1aS5oZWxwZXIpLmFk ZENsYXNzKCJzbGljay1oZWFkZXItY29sdW1uLWFjdGl2ZSIpOwotICAgICAg ICB9LAotICAgICAgICBiZWZvcmVTdG9wOiBmdW5jdGlvbiAoZSwgdWkpIHsK LSAgICAgICAgICAkKHVpLmhlbHBlcikucmVtb3ZlQ2xhc3MoInNsaWNrLWhl YWRlci1jb2x1bW4tYWN0aXZlIik7Ci0gICAgICAgIH0sCi0gICAgICAgIHN0 b3A6IGZ1bmN0aW9uIChlKSB7Ci0gICAgICAgICAgaWYgKCFnZXRFZGl0b3JM b2NrKCkuY29tbWl0Q3VycmVudEVkaXQoKSkgewotICAgICAgICAgICAgJCh0 aGlzKS5zb3J0YWJsZSgiY2FuY2VsIik7Ci0gICAgICAgICAgICByZXR1cm47 Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgdmFyIHJlb3JkZXJlZElkcyA9 ICRoZWFkZXJzLnNvcnRhYmxlKCJ0b0FycmF5Iik7Ci0gICAgICAgICAgdmFy IHJlb3JkZXJlZENvbHVtbnMgPSBbXTsKLSAgICAgICAgICBmb3IgKHZhciBp ID0gMDsgaSA8IHJlb3JkZXJlZElkcy5sZW5ndGg7IGkrKykgewotICAgICAg ICAgICAgcmVvcmRlcmVkQ29sdW1ucy5wdXNoKGNvbHVtbnNbZ2V0Q29sdW1u SW5kZXgocmVvcmRlcmVkSWRzW2ldLnJlcGxhY2UodWlkLCAiIikpXSk7Ci0g ICAgICAgICAgfQotICAgICAgICAgIHNldENvbHVtbnMocmVvcmRlcmVkQ29s dW1ucyk7Ci0KLSAgICAgICAgICB0cmlnZ2VyKHNlbGYub25Db2x1bW5zUmVv cmRlcmVkLCB7Z3JpZDogc2VsZn0pOwotICAgICAgICAgIGUuc3RvcFByb3Bh Z2F0aW9uKCk7Ci0gICAgICAgICAgc2V0dXBDb2x1bW5SZXNpemUoKTsKLSAg ICAgICAgfQotICAgICAgfSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2V0 dXBDb2x1bW5SZXNpemUoKSB7Ci0gICAgICB2YXIgJGNvbCwgaiwgYywgcGFn ZVgsIGNvbHVtbkVsZW1lbnRzLCBtaW5QYWdlWCwgbWF4UGFnZVgsIGZpcnN0 UmVzaXphYmxlLCBsYXN0UmVzaXphYmxlOwotICAgICAgY29sdW1uRWxlbWVu dHMgPSAkaGVhZGVycy5jaGlsZHJlbigpOwotICAgICAgY29sdW1uRWxlbWVu dHMuZmluZCgiLnNsaWNrLXJlc2l6YWJsZS1oYW5kbGUiKS5yZW1vdmUoKTsK LSAgICAgIGNvbHVtbkVsZW1lbnRzLmVhY2goZnVuY3Rpb24gKGksIGUpIHsK LSAgICAgICAgaWYgKGNvbHVtbnNbaV0ucmVzaXphYmxlKSB7Ci0gICAgICAg ICAgaWYgKGZpcnN0UmVzaXphYmxlID09PSB1bmRlZmluZWQpIHsKLSAgICAg ICAgICAgIGZpcnN0UmVzaXphYmxlID0gaTsKLSAgICAgICAgICB9Ci0gICAg ICAgICAgbGFzdFJlc2l6YWJsZSA9IGk7Ci0gICAgICAgIH0KLSAgICAgIH0p OwotICAgICAgaWYgKGZpcnN0UmVzaXphYmxlID09PSB1bmRlZmluZWQpIHsK LSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgY29sdW1uRWxlbWVu dHMuZWFjaChmdW5jdGlvbiAoaSwgZSkgewotICAgICAgICBpZiAoaSA8IGZp cnN0UmVzaXphYmxlIHx8IChvcHRpb25zLmZvcmNlRml0Q29sdW1ucyAmJiBp ID49IGxhc3RSZXNpemFibGUpKSB7Ci0gICAgICAgICAgcmV0dXJuOwotICAg ICAgICB9Ci0gICAgICAgICRjb2wgPSAkKGUpOwotICAgICAgICAkKCI8ZGl2 IGNsYXNzPSdzbGljay1yZXNpemFibGUtaGFuZGxlJyAvPiIpCi0gICAgICAg ICAgICAuYXBwZW5kVG8oZSkKLSAgICAgICAgICAgIC5iaW5kKCJkcmFnc3Rh cnQiLCBmdW5jdGlvbiAoZSwgZGQpIHsKLSAgICAgICAgICAgICAgaWYgKCFn ZXRFZGl0b3JMb2NrKCkuY29tbWl0Q3VycmVudEVkaXQoKSkgewotICAgICAg ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICBwYWdlWCA9IGUucGFnZVg7Ci0gICAgICAgICAgICAgICQo dGhpcykucGFyZW50KCkuYWRkQ2xhc3MoInNsaWNrLWhlYWRlci1jb2x1bW4t YWN0aXZlIik7Ci0gICAgICAgICAgICAgIHZhciBzaHJpbmtMZWV3YXlPblJp Z2h0ID0gbnVsbCwgc3RyZXRjaExlZXdheU9uUmlnaHQgPSBudWxsOwotICAg ICAgICAgICAgICAvLyBsb2NrIGVhY2ggY29sdW1uJ3Mgd2lkdGggb3B0aW9u IHRvIGN1cnJlbnQgd2lkdGgKLSAgICAgICAgICAgICAgY29sdW1uRWxlbWVu dHMuZWFjaChmdW5jdGlvbiAoaSwgZSkgewotICAgICAgICAgICAgICAgIGNv bHVtbnNbaV0ucHJldmlvdXNXaWR0aCA9ICQoZSkub3V0ZXJXaWR0aCgpOwot ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgaWYgKG9wdGlvbnMu Zm9yY2VGaXRDb2x1bW5zKSB7Ci0gICAgICAgICAgICAgICAgc2hyaW5rTGVl d2F5T25SaWdodCA9IDA7Ci0gICAgICAgICAgICAgICAgc3RyZXRjaExlZXdh eU9uUmlnaHQgPSAwOwotICAgICAgICAgICAgICAgIC8vIGNvbHVtcyBvbiBy aWdodCBhZmZlY3QgbWF4UGFnZVgvbWluUGFnZVgKLSAgICAgICAgICAgICAg ICBmb3IgKGogPSBpICsgMTsgaiA8IGNvbHVtbkVsZW1lbnRzLmxlbmd0aDsg aisrKSB7Ci0gICAgICAgICAgICAgICAgICBjID0gY29sdW1uc1tqXTsKLSAg ICAgICAgICAgICAgICAgIGlmIChjLnJlc2l6YWJsZSkgewotICAgICAgICAg ICAgICAgICAgICBpZiAoc3RyZXRjaExlZXdheU9uUmlnaHQgIT09IG51bGwp IHsKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoYy5tYXhXaWR0aCkgewot ICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXRjaExlZXdheU9uUmlnaHQg Kz0gYy5tYXhXaWR0aCAtIGMucHJldmlvdXNXaWR0aDsKLSAgICAgICAgICAg ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg c3RyZXRjaExlZXdheU9uUmlnaHQgPSBudWxsOwotICAgICAgICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgICAgICBzaHJpbmtMZWV3YXlPblJpZ2h0ICs9IGMucHJldmlvdXNXaWR0 aCAtIE1hdGgubWF4KGMubWluV2lkdGggfHwgMCwgYWJzb2x1dGVDb2x1bW5N aW5XaWR0aCk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIHZhciBzaHJp bmtMZWV3YXlPbkxlZnQgPSAwLCBzdHJldGNoTGVld2F5T25MZWZ0ID0gMDsK LSAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8PSBpOyBqKyspIHsKLSAg ICAgICAgICAgICAgICAvLyBjb2x1bW5zIG9uIGxlZnQgb25seSBhZmZlY3Qg bWluUGFnZVgKLSAgICAgICAgICAgICAgICBjID0gY29sdW1uc1tqXTsKLSAg ICAgICAgICAgICAgICBpZiAoYy5yZXNpemFibGUpIHsKLSAgICAgICAgICAg ICAgICAgIGlmIChzdHJldGNoTGVld2F5T25MZWZ0ICE9PSBudWxsKSB7Ci0g ICAgICAgICAgICAgICAgICAgIGlmIChjLm1heFdpZHRoKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgc3RyZXRjaExlZXdheU9uTGVmdCArPSBjLm1heFdp ZHRoIC0gYy5wcmV2aW91c1dpZHRoOwotICAgICAgICAgICAgICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgIHN0cmV0Y2hMZWV3YXlP bkxlZnQgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBzaHJpbmtMZWV3YXlP bkxlZnQgKz0gYy5wcmV2aW91c1dpZHRoIC0gTWF0aC5tYXgoYy5taW5XaWR0 aCB8fCAwLCBhYnNvbHV0ZUNvbHVtbk1pbldpZHRoKTsKLSAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgaWYgKHNo cmlua0xlZXdheU9uUmlnaHQgPT09IG51bGwpIHsKLSAgICAgICAgICAgICAg ICBzaHJpbmtMZWV3YXlPblJpZ2h0ID0gMTAwMDAwOwotICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgIGlmIChzaHJpbmtMZWV3YXlPbkxlZnQgPT09 IG51bGwpIHsKLSAgICAgICAgICAgICAgICBzaHJpbmtMZWV3YXlPbkxlZnQg PSAxMDAwMDA7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgaWYg KHN0cmV0Y2hMZWV3YXlPblJpZ2h0ID09PSBudWxsKSB7Ci0gICAgICAgICAg ICAgICAgc3RyZXRjaExlZXdheU9uUmlnaHQgPSAxMDAwMDA7Ci0gICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgaWYgKHN0cmV0Y2hMZWV3YXlPbkxl ZnQgPT09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBzdHJldGNoTGVld2F5 T25MZWZ0ID0gMTAwMDAwOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgIG1heFBhZ2VYID0gcGFnZVggKyBNYXRoLm1pbihzaHJpbmtMZWV3YXlP blJpZ2h0LCBzdHJldGNoTGVld2F5T25MZWZ0KTsKLSAgICAgICAgICAgICAg bWluUGFnZVggPSBwYWdlWCAtIE1hdGgubWluKHNocmlua0xlZXdheU9uTGVm dCwgc3RyZXRjaExlZXdheU9uUmlnaHQpOwotICAgICAgICAgICAgfSkKLSAg ICAgICAgICAgIC5iaW5kKCJkcmFnIiwgZnVuY3Rpb24gKGUsIGRkKSB7Ci0g ICAgICAgICAgICAgIHZhciBhY3R1YWxNaW5XaWR0aCwgZCA9IE1hdGgubWlu KG1heFBhZ2VYLCBNYXRoLm1heChtaW5QYWdlWCwgZS5wYWdlWCkpIC0gcGFn ZVgsIHg7Ci0gICAgICAgICAgICAgIGlmIChkIDwgMCkgeyAvLyBzaHJpbmsg Y29sdW1uCi0gICAgICAgICAgICAgICAgeCA9IGQ7Ci0gICAgICAgICAgICAg ICAgZm9yIChqID0gaTsgaiA+PSAwOyBqLS0pIHsKLSAgICAgICAgICAgICAg ICAgIGMgPSBjb2x1bW5zW2pdOwotICAgICAgICAgICAgICAgICAgaWYgKGMu cmVzaXphYmxlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFjdHVhbE1pbldp ZHRoID0gTWF0aC5tYXgoYy5taW5XaWR0aCB8fCAwLCBhYnNvbHV0ZUNvbHVt bk1pbldpZHRoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHggJiYgYy5w cmV2aW91c1dpZHRoICsgeCA8IGFjdHVhbE1pbldpZHRoKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgeCArPSBjLnByZXZpb3VzV2lkdGggLSBhY3R1YWxN aW5XaWR0aDsKLSAgICAgICAgICAgICAgICAgICAgICBjLndpZHRoID0gYWN0 dWFsTWluV2lkdGg7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgYy53aWR0aCA9IGMucHJldmlvdXNXaWR0 aCArIHg7Ci0gICAgICAgICAgICAgICAgICAgICAgeCA9IDA7Ci0gICAgICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5mb3Jj ZUZpdENvbHVtbnMpIHsKLSAgICAgICAgICAgICAgICAgIHggPSAtZDsKLSAg ICAgICAgICAgICAgICAgIGZvciAoaiA9IGkgKyAxOyBqIDwgY29sdW1uRWxl bWVudHMubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYyA9 IGNvbHVtbnNbal07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjLnJlc2l6 YWJsZSkgewotICAgICAgICAgICAgICAgICAgICAgIGlmICh4ICYmIGMubWF4 V2lkdGggJiYgKGMubWF4V2lkdGggLSBjLnByZXZpb3VzV2lkdGggPCB4KSkg ewotICAgICAgICAgICAgICAgICAgICAgICAgeCAtPSBjLm1heFdpZHRoIC0g Yy5wcmV2aW91c1dpZHRoOwotICAgICAgICAgICAgICAgICAgICAgICAgYy53 aWR0aCA9IGMubWF4V2lkdGg7Ci0gICAgICAgICAgICAgICAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGMud2lkdGggPSBjLnBy ZXZpb3VzV2lkdGggKyB4OwotICAgICAgICAgICAgICAgICAgICAgICAgeCA9 IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICB9IGVsc2UgeyAvLyBzdHJldGNoIGNvbHVtbgot ICAgICAgICAgICAgICAgIHggPSBkOwotICAgICAgICAgICAgICAgIGZvciAo aiA9IGk7IGogPj0gMDsgai0tKSB7Ci0gICAgICAgICAgICAgICAgICBjID0g Y29sdW1uc1tqXTsKLSAgICAgICAgICAgICAgICAgIGlmIChjLnJlc2l6YWJs ZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoeCAmJiBjLm1heFdpZHRo ICYmIChjLm1heFdpZHRoIC0gYy5wcmV2aW91c1dpZHRoIDwgeCkpIHsKLSAg ICAgICAgICAgICAgICAgICAgICB4IC09IGMubWF4V2lkdGggLSBjLnByZXZp b3VzV2lkdGg7Ci0gICAgICAgICAgICAgICAgICAgICAgYy53aWR0aCA9IGMu bWF4V2lkdGg7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg ICAgICAgICAgICAgICAgICAgYy53aWR0aCA9IGMucHJldmlvdXNXaWR0aCAr IHg7Ci0gICAgICAgICAgICAgICAgICAgICAgeCA9IDA7Ci0gICAgICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5mb3JjZUZp dENvbHVtbnMpIHsKLSAgICAgICAgICAgICAgICAgIHggPSAtZDsKLSAgICAg ICAgICAgICAgICAgIGZvciAoaiA9IGkgKyAxOyBqIDwgY29sdW1uRWxlbWVu dHMubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYyA9IGNv bHVtbnNbal07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjLnJlc2l6YWJs ZSkgewotICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbE1pbldpZHRoID0g TWF0aC5tYXgoYy5taW5XaWR0aCB8fCAwLCBhYnNvbHV0ZUNvbHVtbk1pbldp ZHRoKTsKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoeCAmJiBjLnByZXZp b3VzV2lkdGggKyB4IDwgYWN0dWFsTWluV2lkdGgpIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgIHggKz0gYy5wcmV2aW91c1dpZHRoIC0gYWN0dWFsTWlu V2lkdGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjLndpZHRoID0gYWN0 dWFsTWluV2lkdGg7Ci0gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgICAgICAgICAgICAgIGMud2lkdGggPSBjLnByZXZpb3Vz V2lkdGggKyB4OwotICAgICAgICAgICAgICAgICAgICAgICAgeCA9IDA7Ci0g ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGFwcGx5Q29sdW1uSGVhZGVy V2lkdGhzKCk7Ci0gICAgICAgICAgICAgIGlmIChvcHRpb25zLnN5bmNDb2x1 bW5DZWxsUmVzaXplKSB7Ci0gICAgICAgICAgICAgICAgYXBwbHlDb2x1bW5X aWR0aHMoKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSkKLSAg ICAgICAgICAgIC5iaW5kKCJkcmFnZW5kIiwgZnVuY3Rpb24gKGUsIGRkKSB7 Ci0gICAgICAgICAgICAgIHZhciBuZXdXaWR0aDsKLSAgICAgICAgICAgICAg JCh0aGlzKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygic2xpY2staGVhZGVyLWNv bHVtbi1hY3RpdmUiKTsKLSAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8 IGNvbHVtbkVsZW1lbnRzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgICAg ICAgYyA9IGNvbHVtbnNbal07Ci0gICAgICAgICAgICAgICAgbmV3V2lkdGgg PSAkKGNvbHVtbkVsZW1lbnRzW2pdKS5vdXRlcldpZHRoKCk7Ci0KLSAgICAg ICAgICAgICAgICBpZiAoYy5wcmV2aW91c1dpZHRoICE9PSBuZXdXaWR0aCAm JiBjLnJlcmVuZGVyT25SZXNpemUpIHsKLSAgICAgICAgICAgICAgICAgIGlu dmFsaWRhdGVBbGxSb3dzKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgIHVwZGF0ZUNhbnZhc1dpZHRoKHRy dWUpOwotICAgICAgICAgICAgICByZW5kZXIoKTsKLSAgICAgICAgICAgICAg dHJpZ2dlcihzZWxmLm9uQ29sdW1uc1Jlc2l6ZWQsIHtncmlkOiBzZWxmfSk7 Ci0gICAgICAgICAgICB9KTsKLSAgICAgIH0pOwotICAgIH0KLQotICAgIGZ1 bmN0aW9uIGdldFZCb3hEZWx0YSgkZWwpIHsKLSAgICAgIHZhciBwID0gWyJi b3JkZXJUb3BXaWR0aCIsICJib3JkZXJCb3R0b21XaWR0aCIsICJwYWRkaW5n VG9wIiwgInBhZGRpbmdCb3R0b20iXTsKLSAgICAgIHZhciBkZWx0YSA9IDA7 Ci0gICAgICAkLmVhY2gocCwgZnVuY3Rpb24gKG4sIHZhbCkgewotICAgICAg ICBkZWx0YSArPSBwYXJzZUZsb2F0KCRlbC5jc3ModmFsKSkgfHwgMDsKLSAg ICAgIH0pOwotICAgICAgcmV0dXJuIGRlbHRhOwotICAgIH0KLQotICAgIGZ1 bmN0aW9uIG1lYXN1cmVDZWxsUGFkZGluZ0FuZEJvcmRlcigpIHsKLSAgICAg IHZhciBlbDsKLSAgICAgIHZhciBoID0gWyJib3JkZXJMZWZ0V2lkdGgiLCAi Ym9yZGVyUmlnaHRXaWR0aCIsICJwYWRkaW5nTGVmdCIsICJwYWRkaW5nUmln aHQiXTsKLSAgICAgIHZhciB2ID0gWyJib3JkZXJUb3BXaWR0aCIsICJib3Jk ZXJCb3R0b21XaWR0aCIsICJwYWRkaW5nVG9wIiwgInBhZGRpbmdCb3R0b20i XTsKLQotCSAgLy8ganF1ZXJ5IHByaW9yIHRvIHZlcnNpb24gMS44IGhhbmRs ZXMgLndpZHRoIHNldHRlci9nZXR0ZXIgYXMgYSBkaXJlY3QgY3NzIHdyaXRl L3JlYWQKLQkgIC8vIGpxdWVyeSAxLjggY2hhbmdlZCAud2lkdGggdG8gcmVh ZCB0aGUgdHJ1ZSBpbm5lciBlbGVtZW50IHdpZHRoIGlmIGJveC1zaXppbmcg aXMgc2V0IHRvIGJvcmRlci1ib3gsIGFuZCBpbnRyb2R1Y2VkIGEgc2V0dGVy IGZvciAub3V0ZXJXaWR0aAotCSAgLy8gc28gZm9yIGVxdWl2YWxlbnQgZnVu Y3Rpb25hbGl0eSwgcHJpb3IgdG8gMS44IHVzZSAud2lkdGgsIGFuZCBhZnRl ciB1c2UgLm91dGVyV2lkdGgKLQkgIHZhciB2ZXJBcnJheSA9ICQuZm4uanF1 ZXJ5LnNwbGl0KCcuJyk7Ci0JICBqUXVlcnlOZXdXaWR0aEJlaGF2aW91ciA9 ICh2ZXJBcnJheVswXT09MSAmJiB2ZXJBcnJheVsxXT49OCkgfHwgIHZlckFy cmF5WzBdID49MjsKLQotICAgICAgZWwgPSAkKCI8ZGl2IGNsYXNzPSd1aS1z dGF0ZS1kZWZhdWx0IHNsaWNrLWhlYWRlci1jb2x1bW4nIHN0eWxlPSd2aXNp YmlsaXR5OmhpZGRlbic+LTwvZGl2PiIpLmFwcGVuZFRvKCRoZWFkZXJzKTsK LSAgICAgIGhlYWRlckNvbHVtbldpZHRoRGlmZiA9IGhlYWRlckNvbHVtbkhl aWdodERpZmYgPSAwOwotICAgICAgaWYgKGVsLmNzcygiYm94LXNpemluZyIp ICE9ICJib3JkZXItYm94IiAmJiBlbC5jc3MoIi1tb3otYm94LXNpemluZyIp ICE9ICJib3JkZXItYm94IiAmJiBlbC5jc3MoIi13ZWJraXQtYm94LXNpemlu ZyIpICE9ICJib3JkZXItYm94IikgewotICAgICAgICAkLmVhY2goaCwgZnVu Y3Rpb24gKG4sIHZhbCkgewotICAgICAgICAgIGhlYWRlckNvbHVtbldpZHRo RGlmZiArPSBwYXJzZUZsb2F0KGVsLmNzcyh2YWwpKSB8fCAwOwotICAgICAg ICB9KTsKLSAgICAgICAgJC5lYWNoKHYsIGZ1bmN0aW9uIChuLCB2YWwpIHsK LSAgICAgICAgICBoZWFkZXJDb2x1bW5IZWlnaHREaWZmICs9IHBhcnNlRmxv YXQoZWwuY3NzKHZhbCkpIHx8IDA7Ci0gICAgICAgIH0pOwotICAgICAgfQot ICAgICAgZWwucmVtb3ZlKCk7Ci0KLSAgICAgIHZhciByID0gJCgiPGRpdiBj bGFzcz0nc3InIC8+IikuYXBwZW5kVG8oJGNhbnZhcyk7Ci0gICAgICBlbCA9 ICQoIjxkaXYgY2xhc3M9J3NjJyBpZD0nJyBzdHlsZT0ndmlzaWJpbGl0eTpo aWRkZW4nPi08L2Rpdj4iKS5hcHBlbmRUbyhyKTsKLSAgICAgIGNlbGxXaWR0 aERpZmYgPSBjZWxsSGVpZ2h0RGlmZiA9IDA7Ci0gICAgICBpZiAoZWwuY3Nz KCJib3gtc2l6aW5nIikgIT0gImJvcmRlci1ib3giICYmIGVsLmNzcygiLW1v ei1ib3gtc2l6aW5nIikgIT0gImJvcmRlci1ib3giICYmIGVsLmNzcygiLXdl YmtpdC1ib3gtc2l6aW5nIikgIT0gImJvcmRlci1ib3giKSB7Ci0gICAgICAg ICQuZWFjaChoLCBmdW5jdGlvbiAobiwgdmFsKSB7Ci0gICAgICAgICAgY2Vs bFdpZHRoRGlmZiArPSBwYXJzZUZsb2F0KGVsLmNzcyh2YWwpKSB8fCAwOwot ICAgICAgICB9KTsKLSAgICAgICAgJC5lYWNoKHYsIGZ1bmN0aW9uIChuLCB2 YWwpIHsKLSAgICAgICAgICBjZWxsSGVpZ2h0RGlmZiArPSBwYXJzZUZsb2F0 KGVsLmNzcyh2YWwpKSB8fCAwOwotICAgICAgICB9KTsKLSAgICAgIH0KLSAg ICAgIHIucmVtb3ZlKCk7Ci0KLSAgICAgIGFic29sdXRlQ29sdW1uTWluV2lk dGggPSBNYXRoLm1heChoZWFkZXJDb2x1bW5XaWR0aERpZmYsIGNlbGxXaWR0 aERpZmYpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGNyZWF0ZUNzc1J1bGVz KCkgewotICAgICAgJHN0eWxlID0gJCgiPHN0eWxlIHR5cGU9J3RleHQvY3Nz JyByZWw9J3N0eWxlc2hlZXQnIC8+IikuYXBwZW5kVG8oJCgiaGVhZCIpKTsK LSAgICAgIHZhciByb3dIZWlnaHQgPSAob3B0aW9ucy5yb3dIZWlnaHQgLSBj ZWxsSGVpZ2h0RGlmZik7Ci0gICAgICB2YXIgcnVsZXMgPSBbCi0gICAgICAg ICIuIiArIHVpZCArICIgLnNsaWNrLWhlYWRlci1jb2x1bW4geyBsZWZ0OiAx MDAwcHg7IH0iLAotICAgICAgICAiLiIgKyB1aWQgKyAiIC5zbGljay10b3At cGFuZWwgeyBoZWlnaHQ6IiArIG9wdGlvbnMudG9wUGFuZWxIZWlnaHQgKyAi cHg7IH0iLAotICAgICAgICAiLiIgKyB1aWQgKyAiIC5zbGljay1oZWFkZXJy b3ctY29sdW1ucyB7IGhlaWdodDoiICsgb3B0aW9ucy5oZWFkZXJSb3dIZWln aHQgKyAicHg7IH0iLAotICAgICAgICAiLiIgKyB1aWQgKyAiIC5zYyB7IGhl aWdodDoiICsgcm93SGVpZ2h0ICsgInB4OyB9IiwKLSAgICAgICAgIi4iICsg dWlkICsgIiAuc3IgeyBoZWlnaHQ6IiArIG9wdGlvbnMucm93SGVpZ2h0ICsg InB4OyB9IgotICAgICAgXTsKLQotICAgICAgZm9yICh2YXIgaSA9IDA7IGkg PCBjb2x1bW5zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHJ1bGVzLnB1c2go Ii4iICsgdWlkICsgIiAubCIgKyBpICsgIiB7IH0iKTsKLSAgICAgICAgcnVs ZXMucHVzaCgiLiIgKyB1aWQgKyAiIC5yIiArIGkgKyAiIHsgfSIpOwotICAg ICAgfQotCi0gICAgICBpZiAoJHN0eWxlWzBdLnN0eWxlU2hlZXQpIHsgLy8g SUUKLSAgICAgICAgJHN0eWxlWzBdLnN0eWxlU2hlZXQuY3NzVGV4dCA9IHJ1 bGVzLmpvaW4oIiAiKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgICRzdHls ZVswXS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShydWxl cy5qb2luKCIgIikpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlv biBnZXRDb2x1bW5Dc3NSdWxlcyhpZHgpIHsKLSAgICAgIGlmICghc3R5bGVz aGVldCkgewotICAgICAgICB2YXIgc2hlZXRzID0gZG9jdW1lbnQuc3R5bGVT aGVldHM7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2hlZXRzLmxl bmd0aDsgaSsrKSB7Ci0gICAgICAgICAgaWYgKChzaGVldHNbaV0ub3duZXJO b2RlIHx8IHNoZWV0c1tpXS5vd25pbmdFbGVtZW50KSA9PSAkc3R5bGVbMF0p IHsKLSAgICAgICAgICAgIHN0eWxlc2hlZXQgPSBzaGVldHNbaV07Ci0gICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg ICAgICBpZiAoIXN0eWxlc2hlZXQpIHsKLSAgICAgICAgICB0aHJvdyBuZXcg RXJyb3IoIkNhbm5vdCBmaW5kIHN0eWxlc2hlZXQuIik7Ci0gICAgICAgIH0K LQotICAgICAgICAvLyBmaW5kIGFuZCBjYWNoZSBjb2x1bW4gQ1NTIHJ1bGVz Ci0gICAgICAgIGNvbHVtbkNzc1J1bGVzTCA9IFtdOwotICAgICAgICBjb2x1 bW5Dc3NSdWxlc1IgPSBbXTsKLSAgICAgICAgdmFyIGNzc1J1bGVzID0gKHN0 eWxlc2hlZXQuY3NzUnVsZXMgfHwgc3R5bGVzaGVldC5ydWxlcyk7Ci0gICAg ICAgIHZhciBtYXRjaGVzLCBjb2x1bW5JZHg7Ci0gICAgICAgIGZvciAodmFy IGkgPSAwOyBpIDwgY3NzUnVsZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAg ICB2YXIgc2VsZWN0b3IgPSBjc3NSdWxlc1tpXS5zZWxlY3RvclRleHQ7Ci0g ICAgICAgICAgaWYgKG1hdGNoZXMgPSAvXC5sXGQrLy5leGVjKHNlbGVjdG9y KSkgewotICAgICAgICAgICAgY29sdW1uSWR4ID0gcGFyc2VJbnQobWF0Y2hl c1swXS5zdWJzdHIoMiwgbWF0Y2hlc1swXS5sZW5ndGggLSAyKSwgMTApOwot ICAgICAgICAgICAgY29sdW1uQ3NzUnVsZXNMW2NvbHVtbklkeF0gPSBjc3NS dWxlc1tpXTsKLSAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoZXMgPSAvXC5y XGQrLy5leGVjKHNlbGVjdG9yKSkgewotICAgICAgICAgICAgY29sdW1uSWR4 ID0gcGFyc2VJbnQobWF0Y2hlc1swXS5zdWJzdHIoMiwgbWF0Y2hlc1swXS5s ZW5ndGggLSAyKSwgMTApOwotICAgICAgICAgICAgY29sdW1uQ3NzUnVsZXNS W2NvbHVtbklkeF0gPSBjc3NSdWxlc1tpXTsKLSAgICAgICAgICB9Ci0gICAg ICAgIH0KLSAgICAgIH0KLQotICAgICAgcmV0dXJuIHsKLSAgICAgICAgImxl ZnQiOiBjb2x1bW5Dc3NSdWxlc0xbaWR4XSwKLSAgICAgICAgInJpZ2h0Ijog Y29sdW1uQ3NzUnVsZXNSW2lkeF0KLSAgICAgIH07Ci0gICAgfQotCi0gICAg ZnVuY3Rpb24gcmVtb3ZlQ3NzUnVsZXMoKSB7Ci0gICAgICAkc3R5bGUucmVt b3ZlKCk7Ci0gICAgICBzdHlsZXNoZWV0ID0gbnVsbDsKLSAgICB9Ci0KLSAg ICBmdW5jdGlvbiBkZXN0cm95KCkgewotICAgICAgZ2V0RWRpdG9yTG9jaygp LmNhbmNlbEN1cnJlbnRFZGl0KCk7Ci0KLSAgICAgIHRyaWdnZXIoc2VsZi5v bkJlZm9yZURlc3Ryb3ksIHtncmlkOiBzZWxmfSk7Ci0KLSAgICAgIHZhciBp ID0gcGx1Z2lucy5sZW5ndGg7Ci0gICAgICB3aGlsZShpLS0pIHsKLSAgICAg ICAgdW5yZWdpc3RlclBsdWdpbihwbHVnaW5zW2ldKTsKLSAgICAgIH0KLQot ICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlQ29sdW1uUmVvcmRlcikgewotICAg ICAgICAgICRoZWFkZXJzLmZpbHRlcigiOnVpLXNvcnRhYmxlIikuc29ydGFi bGUoImRlc3Ryb3kiKTsKLSAgICAgIH0KLQotICAgICAgdW5iaW5kQW5jZXN0 b3JTY3JvbGxFdmVudHMoKTsKLSAgICAgICRjb250YWluZXIudW5iaW5kKCIu c2xpY2tncmlkIik7Ci0gICAgICByZW1vdmVDc3NSdWxlcygpOwotCi0gICAg ICAkY2FudmFzLnVuYmluZCgiZHJhZ2luaXQgZHJhZ3N0YXJ0IGRyYWdlbmQg ZHJhZyIpOwotICAgICAgJGNvbnRhaW5lci5lbXB0eSgpLnJlbW92ZUNsYXNz KHVpZCk7Ci0gICAgfQotCi0KLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgLy8gR2VuZXJhbAot Ci0gICAgZnVuY3Rpb24gdHJpZ2dlcihldnQsIGFyZ3MsIGUpIHsKLSAgICAg IGUgPSBlIHx8IG5ldyBTbGljay5FdmVudERhdGEoKTsKLSAgICAgIGFyZ3Mg PSBhcmdzIHx8IHt9OwotICAgICAgYXJncy5ncmlkID0gc2VsZjsKLSAgICAg IHJldHVybiBldnQubm90aWZ5KGFyZ3MsIGUsIHNlbGYpOwotICAgIH0KLQot ICAgIGZ1bmN0aW9uIGdldEVkaXRvckxvY2soKSB7Ci0gICAgICByZXR1cm4g b3B0aW9ucy5lZGl0b3JMb2NrOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGdl dEVkaXRDb250cm9sbGVyKCkgewotICAgICAgcmV0dXJuIGVkaXRDb250cm9s bGVyOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGdldENvbHVtbkluZGV4KGlk KSB7Ci0gICAgICByZXR1cm4gY29sdW1uc0J5SWRbaWRdOwotICAgIH0KLQot ICAgIGZ1bmN0aW9uIGF1dG9zaXplQ29sdW1ucygpIHsKLSAgICAgIHZhciBp LCBjLAotICAgICAgICAgIHdpZHRocyA9IFtdLAotICAgICAgICAgIHNocmlu a0xlZXdheSA9IDAsCi0gICAgICAgICAgdG90YWwgPSAwLAotICAgICAgICAg IHByZXZUb3RhbCwKLSAgICAgICAgICBhdmFpbFdpZHRoID0gdmlld3BvcnRI YXNWU2Nyb2xsID8gdmlld3BvcnRXIC0gc2Nyb2xsYmFyRGltZW5zaW9ucy53 aWR0aCA6IHZpZXdwb3J0VzsKLQotICAgICAgZm9yIChpID0gMDsgaSA8IGNv bHVtbnMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgYyA9IGNvbHVtbnNbaV07 Ci0gICAgICAgIHdpZHRocy5wdXNoKGMud2lkdGgpOwotICAgICAgICB0b3Rh bCArPSBjLndpZHRoOwotICAgICAgICBpZiAoYy5yZXNpemFibGUpIHsKLSAg ICAgICAgICBzaHJpbmtMZWV3YXkgKz0gYy53aWR0aCAtIE1hdGgubWF4KGMu bWluV2lkdGgsIGFic29sdXRlQ29sdW1uTWluV2lkdGgpOwotICAgICAgICB9 Ci0gICAgICB9Ci0KLSAgICAgIC8vIHNocmluawotICAgICAgcHJldlRvdGFs ID0gdG90YWw7Ci0gICAgICB3aGlsZSAodG90YWwgPiBhdmFpbFdpZHRoICYm IHNocmlua0xlZXdheSkgewotICAgICAgICB2YXIgc2hyaW5rUHJvcG9ydGlv biA9ICh0b3RhbCAtIGF2YWlsV2lkdGgpIC8gc2hyaW5rTGVld2F5OwotICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGggJiYgdG90YWwg PiBhdmFpbFdpZHRoOyBpKyspIHsKLSAgICAgICAgICBjID0gY29sdW1uc1tp XTsKLSAgICAgICAgICB2YXIgd2lkdGggPSB3aWR0aHNbaV07Ci0gICAgICAg ICAgaWYgKCFjLnJlc2l6YWJsZSB8fCB3aWR0aCA8PSBjLm1pbldpZHRoIHx8 IHdpZHRoIDw9IGFic29sdXRlQ29sdW1uTWluV2lkdGgpIHsKLSAgICAgICAg ICAgIGNvbnRpbnVlOwotICAgICAgICAgIH0KLSAgICAgICAgICB2YXIgYWJz TWluV2lkdGggPSBNYXRoLm1heChjLm1pbldpZHRoLCBhYnNvbHV0ZUNvbHVt bk1pbldpZHRoKTsKLSAgICAgICAgICB2YXIgc2hyaW5rU2l6ZSA9IE1hdGgu Zmxvb3Ioc2hyaW5rUHJvcG9ydGlvbiAqICh3aWR0aCAtIGFic01pbldpZHRo KSkgfHwgMTsKLSAgICAgICAgICBzaHJpbmtTaXplID0gTWF0aC5taW4oc2hy aW5rU2l6ZSwgd2lkdGggLSBhYnNNaW5XaWR0aCk7Ci0gICAgICAgICAgdG90 YWwgLT0gc2hyaW5rU2l6ZTsKLSAgICAgICAgICBzaHJpbmtMZWV3YXkgLT0g c2hyaW5rU2l6ZTsKLSAgICAgICAgICB3aWR0aHNbaV0gLT0gc2hyaW5rU2l6 ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAocHJldlRvdGFsIDw9IHRvdGFs KSB7ICAvLyBhdm9pZCBpbmZpbml0ZSBsb29wCi0gICAgICAgICAgYnJlYWs7 Ci0gICAgICAgIH0KLSAgICAgICAgcHJldlRvdGFsID0gdG90YWw7Ci0gICAg ICB9Ci0KLSAgICAgIC8vIGdyb3cKLSAgICAgIHByZXZUb3RhbCA9IHRvdGFs OwotICAgICAgd2hpbGUgKHRvdGFsIDwgYXZhaWxXaWR0aCkgewotICAgICAg ICB2YXIgZ3Jvd1Byb3BvcnRpb24gPSBhdmFpbFdpZHRoIC8gdG90YWw7Ci0g ICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aCAmJiB0b3Rh bCA8IGF2YWlsV2lkdGg7IGkrKykgewotICAgICAgICAgIGMgPSBjb2x1bW5z W2ldOwotICAgICAgICAgIHZhciBjdXJyZW50V2lkdGggPSB3aWR0aHNbaV07 Ci0gICAgICAgICAgdmFyIGdyb3dTaXplOwotCi0gICAgICAgICAgaWYgKCFj LnJlc2l6YWJsZSB8fCBjLm1heFdpZHRoIDw9IGN1cnJlbnRXaWR0aCkgewot ICAgICAgICAgICAgZ3Jvd1NpemUgPSAwOwotICAgICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICBncm93U2l6ZSA9IE1hdGgubWluKE1hdGguZmxvb3Io Z3Jvd1Byb3BvcnRpb24gKiBjdXJyZW50V2lkdGgpIC0gY3VycmVudFdpZHRo LCAoYy5tYXhXaWR0aCAtIGN1cnJlbnRXaWR0aCkgfHwgMTAwMDAwMCkgfHwg MTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgdG90YWwgKz0gZ3Jvd1NpemU7 Ci0gICAgICAgICAgd2lkdGhzW2ldICs9ICh0b3RhbCA8PSBhdmFpbFdpZHRo ID8gZ3Jvd1NpemUgOiAwKTsKLSAgICAgICAgfQotICAgICAgICBpZiAocHJl dlRvdGFsID49IHRvdGFsKSB7ICAvLyBhdm9pZCBpbmZpbml0ZSBsb29wCi0g ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcHJldlRvdGFs ID0gdG90YWw7Ci0gICAgICB9Ci0KLSAgICAgIHZhciByZVJlbmRlciA9IGZh bHNlOwotICAgICAgZm9yIChpID0gMDsgaSA8IGNvbHVtbnMubGVuZ3RoOyBp KyspIHsKLSAgICAgICAgaWYgKGNvbHVtbnNbaV0ucmVyZW5kZXJPblJlc2l6 ZSAmJiBjb2x1bW5zW2ldLndpZHRoICE9IHdpZHRoc1tpXSkgewotICAgICAg ICAgIHJlUmVuZGVyID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBjb2x1 bW5zW2ldLndpZHRoID0gd2lkdGhzW2ldOwotICAgICAgfQotCi0gICAgICBh cHBseUNvbHVtbkhlYWRlcldpZHRocygpOwotICAgICAgdXBkYXRlQ2FudmFz V2lkdGgodHJ1ZSk7Ci0gICAgICBpZiAocmVSZW5kZXIpIHsKLSAgICAgICAg aW52YWxpZGF0ZUFsbFJvd3MoKTsKLSAgICAgICAgcmVuZGVyKCk7Ci0gICAg ICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gYXBwbHlDb2x1bW5IZWFkZXJX aWR0aHMoKSB7Ci0gICAgICBpZiAoIWluaXRpYWxpemVkKSB7IHJldHVybjsg fQotICAgICAgdmFyIGg7Ci0gICAgICBmb3IgKHZhciBpID0gMCwgaGVhZGVy cyA9ICRoZWFkZXJzLmNoaWxkcmVuKCksIGlpID0gaGVhZGVycy5sZW5ndGg7 IGkgPCBpaTsgaSsrKSB7Ci0gICAgICAgIGggPSAkKGhlYWRlcnNbaV0pOwot CQlpZiAoalF1ZXJ5TmV3V2lkdGhCZWhhdmlvdXIpIHsKLQkJCWlmIChoLm91 dGVyV2lkdGgoKSAhPT0gY29sdW1uc1tpXS53aWR0aCkgewotCQkJICBoLm91 dGVyV2lkdGgoY29sdW1uc1tpXS53aWR0aCk7Ci0JCQl9Ci0JCX0gZWxzZSB7 Ci0JCQlpZiAoaC53aWR0aCgpICE9PSBjb2x1bW5zW2ldLndpZHRoIC0gaGVh ZGVyQ29sdW1uV2lkdGhEaWZmKSB7Ci0JCQkgIGgud2lkdGgoY29sdW1uc1tp XS53aWR0aCAtIGhlYWRlckNvbHVtbldpZHRoRGlmZik7Ci0JCQl9Ci0JCX0K LSAgICAgIH0KLQotICAgICAgdXBkYXRlQ29sdW1uQ2FjaGVzKCk7Ci0gICAg fQotCi0gICAgZnVuY3Rpb24gYXBwbHlDb2x1bW5XaWR0aHMoKSB7Ci0gICAg ICB2YXIgeCA9IDAsIHcsIHJ1bGU7Ci0gICAgICBmb3IgKHZhciBpID0gMDsg aSA8IGNvbHVtbnMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgdyA9IGNvbHVt bnNbaV0ud2lkdGg7Ci0KLSAgICAgICAgcnVsZSA9IGdldENvbHVtbkNzc1J1 bGVzKGkpOwotICAgICAgICBydWxlLmxlZnQuc3R5bGUubGVmdCA9IHggKyAi cHgiOwotICAgICAgICBydWxlLnJpZ2h0LnN0eWxlLnJpZ2h0ID0gKGNhbnZh c1dpZHRoIC0geCAtIHcpICsgInB4IjsKLQotICAgICAgICB4ICs9IGNvbHVt bnNbaV0ud2lkdGg7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24g c2V0U29ydENvbHVtbihjb2x1bW5JZCwgYXNjZW5kaW5nKSB7Ci0gICAgICBz ZXRTb3J0Q29sdW1ucyhbeyBjb2x1bW5JZDogY29sdW1uSWQsIHNvcnRBc2M6 IGFzY2VuZGluZ31dKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBzZXRTb3J0 Q29sdW1ucyhjb2xzKSB7Ci0gICAgICBzb3J0Q29sdW1ucyA9IGNvbHM7Ci0K LSAgICAgIHZhciBoZWFkZXJDb2x1bW5FbHMgPSAkaGVhZGVycy5jaGlsZHJl bigpOwotICAgICAgaGVhZGVyQ29sdW1uRWxzCi0gICAgICAgICAgLnJlbW92 ZUNsYXNzKCJzbGljay1oZWFkZXItY29sdW1uLXNvcnRlZCIpCi0gICAgICAg ICAgLmZpbmQoIi5zbGljay1zb3J0LWluZGljYXRvciIpCi0gICAgICAgICAg ICAgIC5yZW1vdmVDbGFzcygic2xpY2stc29ydC1pbmRpY2F0b3ItYXNjIHNs aWNrLXNvcnQtaW5kaWNhdG9yLWRlc2MiKTsKLQotICAgICAgJC5lYWNoKHNv cnRDb2x1bW5zLCBmdW5jdGlvbihpLCBjb2wpIHsKLSAgICAgICAgaWYgKGNv bC5zb3J0QXNjID09IG51bGwpIHsKLSAgICAgICAgICBjb2wuc29ydEFzYyA9 IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIGNvbHVtbkluZGV4ID0g Z2V0Q29sdW1uSW5kZXgoY29sLmNvbHVtbklkKTsKLSAgICAgICAgaWYgKGNv bHVtbkluZGV4ICE9IG51bGwpIHsKLSAgICAgICAgICBoZWFkZXJDb2x1bW5F bHMuZXEoY29sdW1uSW5kZXgpCi0gICAgICAgICAgICAgIC5hZGRDbGFzcygi c2xpY2staGVhZGVyLWNvbHVtbi1zb3J0ZWQiKQotICAgICAgICAgICAgICAu ZmluZCgiLnNsaWNrLXNvcnQtaW5kaWNhdG9yIikKLSAgICAgICAgICAgICAg ICAgIC5hZGRDbGFzcyhjb2wuc29ydEFzYyA/ICJzbGljay1zb3J0LWluZGlj YXRvci1hc2MiIDogInNsaWNrLXNvcnQtaW5kaWNhdG9yLWRlc2MiKTsKLSAg ICAgICAgfQotICAgICAgfSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZ2V0 U29ydENvbHVtbnMoKSB7Ci0gICAgICByZXR1cm4gc29ydENvbHVtbnM7Ci0g ICAgfQotCi0gICAgZnVuY3Rpb24gaGFuZGxlU2VsZWN0ZWRSYW5nZXNDaGFu Z2VkKGUsIHJhbmdlcykgewotICAgICAgc2VsZWN0ZWRSb3dzID0gW107Ci0g ICAgICB2YXIgaGFzaCA9IHt9OwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkg PCByYW5nZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgZm9yICh2YXIgaiA9 IHJhbmdlc1tpXS5mcm9tUm93OyBqIDw9IHJhbmdlc1tpXS50b1Jvdzsgaisr KSB7Ci0gICAgICAgICAgaWYgKCFoYXNoW2pdKSB7ICAvLyBwcmV2ZW50IGR1 cGxpY2F0ZXMKLSAgICAgICAgICAgIHNlbGVjdGVkUm93cy5wdXNoKGopOwot ICAgICAgICAgICAgaGFzaFtqXSA9IHt9OwotICAgICAgICAgIH0KLSAgICAg ICAgICBmb3IgKHZhciBrID0gcmFuZ2VzW2ldLmZyb21DZWxsOyBrIDw9IHJh bmdlc1tpXS50b0NlbGw7IGsrKykgewotICAgICAgICAgICAgaWYgKGNhbkNl bGxCZVNlbGVjdGVkKGosIGspKSB7Ci0gICAgICAgICAgICAgIGhhc2hbal1b Y29sdW1uc1trXS5pZF0gPSBvcHRpb25zLnNlbGVjdGVkQ2VsbENzc0NsYXNz OwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAg ICAgfQotCi0gICAgICBzZXRDZWxsQ3NzU3R5bGVzKG9wdGlvbnMuc2VsZWN0 ZWRDZWxsQ3NzQ2xhc3MsIGhhc2gpOwotCi0gICAgICB0cmlnZ2VyKHNlbGYu b25TZWxlY3RlZFJvd3NDaGFuZ2VkLCB7cm93czogZ2V0U2VsZWN0ZWRSb3dz KCksIGdyaWQ6IHNlbGZ9LCBlKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBn ZXRDb2x1bW5zKCkgewotICAgICAgcmV0dXJuIGNvbHVtbnM7Ci0gICAgfQot Ci0gICAgZnVuY3Rpb24gdXBkYXRlQ29sdW1uQ2FjaGVzKCkgewotICAgICAg Ly8gUHJlLWNhbGN1bGF0ZSBjZWxsIGJvdW5kYXJpZXMuCi0gICAgICBjb2x1 bW5Qb3NMZWZ0ID0gW107Ci0gICAgICBjb2x1bW5Qb3NSaWdodCA9IFtdOwot ICAgICAgdmFyIHggPSAwOwotICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0g Y29sdW1ucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7Ci0gICAgICAgIGNvbHVt blBvc0xlZnRbaV0gPSB4OwotICAgICAgICBjb2x1bW5Qb3NSaWdodFtpXSA9 IHggKyBjb2x1bW5zW2ldLndpZHRoOwotICAgICAgICB4ICs9IGNvbHVtbnNb aV0ud2lkdGg7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2V0 Q29sdW1ucyhjb2x1bW5EZWZpbml0aW9ucykgewotICAgICAgY29sdW1ucyA9 IGNvbHVtbkRlZmluaXRpb25zOwotCi0gICAgICBjb2x1bW5zQnlJZCA9IHt9 OwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aDsg aSsrKSB7Ci0gICAgICAgIHZhciBtID0gY29sdW1uc1tpXSA9ICQuZXh0ZW5k KHt9LCBjb2x1bW5EZWZhdWx0cywgY29sdW1uc1tpXSk7Ci0gICAgICAgIGNv bHVtbnNCeUlkW20uaWRdID0gaTsKLSAgICAgICAgaWYgKG0ubWluV2lkdGgg JiYgbS53aWR0aCA8IG0ubWluV2lkdGgpIHsKLSAgICAgICAgICBtLndpZHRo ID0gbS5taW5XaWR0aDsKLSAgICAgICAgfQotICAgICAgICBpZiAobS5tYXhX aWR0aCAmJiBtLndpZHRoID4gbS5tYXhXaWR0aCkgewotICAgICAgICAgIG0u d2lkdGggPSBtLm1heFdpZHRoOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAg ICAgIHVwZGF0ZUNvbHVtbkNhY2hlcygpOwotCi0gICAgICBpZiAoaW5pdGlh bGl6ZWQpIHsKLSAgICAgICAgaW52YWxpZGF0ZUFsbFJvd3MoKTsKLSAgICAg ICAgY3JlYXRlQ29sdW1uSGVhZGVycygpOwotICAgICAgICByZW1vdmVDc3NS dWxlcygpOwotICAgICAgICBjcmVhdGVDc3NSdWxlcygpOwotICAgICAgICBy ZXNpemVDYW52YXMoKTsKLSAgICAgICAgYXBwbHlDb2x1bW5XaWR0aHMoKTsK LSAgICAgICAgaGFuZGxlU2Nyb2xsKCk7Ci0gICAgICB9Ci0gICAgfQotCi0g ICAgZnVuY3Rpb24gZ2V0T3B0aW9ucygpIHsKLSAgICAgIHJldHVybiBvcHRp b25zOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHNldE9wdGlvbnMoYXJncykg ewotICAgICAgaWYgKCFnZXRFZGl0b3JMb2NrKCkuY29tbWl0Q3VycmVudEVk aXQoKSkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIG1h a2VBY3RpdmVDZWxsTm9ybWFsKCk7Ci0KLSAgICAgIGlmIChvcHRpb25zLmVu YWJsZUFkZFJvdyAhPT0gYXJncy5lbmFibGVBZGRSb3cpIHsKLSAgICAgICAg aW52YWxpZGF0ZVJvdyhnZXREYXRhTGVuZ3RoKCkpOwotICAgICAgfQotCi0g ICAgICBvcHRpb25zID0gJC5leHRlbmQob3B0aW9ucywgYXJncyk7Ci0gICAg ICB2YWxpZGF0ZUFuZEVuZm9yY2VPcHRpb25zKCk7Ci0KLSAgICAgICR2aWV3 cG9ydC5jc3MoIm92ZXJmbG93LXkiLCBvcHRpb25zLmF1dG9IZWlnaHQgPyAi aGlkZGVuIiA6ICJhdXRvIik7Ci0gICAgICByZW5kZXIoKTsKLSAgICB9Ci0K LSAgICBmdW5jdGlvbiB2YWxpZGF0ZUFuZEVuZm9yY2VPcHRpb25zKCkgewot ICAgICAgaWYgKG9wdGlvbnMuYXV0b0hlaWdodCkgewotICAgICAgICBvcHRp b25zLmxlYXZlU3BhY2VGb3JOZXdSb3dzID0gZmFsc2U7Ci0gICAgICB9Ci0g ICAgfQotCi0gICAgZnVuY3Rpb24gc2V0RGF0YShuZXdEYXRhLCBzY3JvbGxU b1RvcCkgewotICAgICAgZGF0YSA9IG5ld0RhdGE7Ci0gICAgICBpbnZhbGlk YXRlQWxsUm93cygpOwotICAgICAgdXBkYXRlUm93Q291bnQoKTsKLSAgICAg IGlmIChzY3JvbGxUb1RvcCkgewotICAgICAgICBzY3JvbGxUbygwKTsKLSAg ICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBnZXREYXRhKCkgewotICAg ICAgcmV0dXJuIGRhdGE7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZ2V0RGF0 YUxlbmd0aCgpIHsKLSAgICAgIGlmIChkYXRhLmdldExlbmd0aCkgewotICAg ICAgICByZXR1cm4gZGF0YS5nZXRMZW5ndGgoKTsKLSAgICAgIH0gZWxzZSB7 Ci0gICAgICAgIHJldHVybiBkYXRhLmxlbmd0aDsKLSAgICAgIH0KLSAgICB9 Ci0KLSAgICBmdW5jdGlvbiBnZXREYXRhTGVuZ3RoSW5jbHVkaW5nQWRkTmV3 KCkgewotICAgICAgcmV0dXJuIGdldERhdGFMZW5ndGgoKSArIChvcHRpb25z LmVuYWJsZUFkZFJvdyA/IDIgOiAxKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlv biBnZXREYXRhSXRlbShpKSB7Ci0gICAgICBpZiAoZGF0YS5nZXRJdGVtKSB7 Ci0gICAgICAgIHJldHVybiBkYXRhLmdldEl0ZW0oaSk7Ci0gICAgICB9IGVs c2UgewotICAgICAgICByZXR1cm4gZGF0YVtpXTsKLSAgICAgIH0KLSAgICB9 Ci0KLSAgICBmdW5jdGlvbiBnZXRUb3BQYW5lbCgpIHsKLSAgICAgIHJldHVy biAkdG9wUGFuZWxbMF07Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2V0VG9w UGFuZWxWaXNpYmlsaXR5KHZpc2libGUpIHsKLSAgICAgIGlmIChvcHRpb25z LnNob3dUb3BQYW5lbCAhPSB2aXNpYmxlKSB7Ci0gICAgICAgIG9wdGlvbnMu c2hvd1RvcFBhbmVsID0gdmlzaWJsZTsKLSAgICAgICAgaWYgKHZpc2libGUp IHsKLSAgICAgICAgICAkdG9wUGFuZWxTY3JvbGxlci5zbGlkZURvd24oImZh c3QiLCByZXNpemVDYW52YXMpOwotICAgICAgICB9IGVsc2UgewotICAgICAg ICAgICR0b3BQYW5lbFNjcm9sbGVyLnNsaWRlVXAoImZhc3QiLCByZXNpemVD YW52YXMpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZnVu Y3Rpb24gc2V0SGVhZGVyUm93VmlzaWJpbGl0eSh2aXNpYmxlKSB7Ci0gICAg ICBpZiAob3B0aW9ucy5zaG93SGVhZGVyUm93ICE9IHZpc2libGUpIHsKLSAg ICAgICAgb3B0aW9ucy5zaG93SGVhZGVyUm93ID0gdmlzaWJsZTsKLSAgICAg ICAgaWYgKHZpc2libGUpIHsKLSAgICAgICAgICAkaGVhZGVyUm93U2Nyb2xs ZXIuc2xpZGVEb3duKCJmYXN0IiwgcmVzaXplQ2FudmFzKTsKLSAgICAgICAg fSBlbHNlIHsKLSAgICAgICAgICAkaGVhZGVyUm93U2Nyb2xsZXIuc2xpZGVV cCgiZmFzdCIsIHJlc2l6ZUNhbnZhcyk7Ci0gICAgICAgIH0KLSAgICAgIH0K LSAgICB9Ci0KLSAgICBmdW5jdGlvbiBnZXRDb250YWluZXJOb2RlKCkgewot ICAgICAgcmV0dXJuICRjb250YWluZXIuZ2V0KDApOwotICAgIH0KLQotICAg IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8KLSAgICAvLyBSZW5kZXJpbmcgLyBTY3JvbGxpbmcKLQotICAgIGZ1 bmN0aW9uIGdldFJvd1RvcChyb3cpIHsKLSAgICAgIHJldHVybiBvcHRpb25z LnJvd0hlaWdodCAqIHJvdyAtIG9mZnNldDsKLSAgICB9Ci0KLSAgICBmdW5j dGlvbiBnZXRSb3dGcm9tUG9zaXRpb24oeSkgewotICAgICAgcmV0dXJuIE1h dGguZmxvb3IoKHkgKyBvZmZzZXQpIC8gb3B0aW9ucy5yb3dIZWlnaHQpOwot ICAgIH0KLQotICAgIGZ1bmN0aW9uIHNjcm9sbFRvKHkpIHsKLSAgICAgIHkg PSBNYXRoLm1heCh5LCAwKTsKLSAgICAgIHkgPSBNYXRoLm1pbih5LCB0aCAt IHZpZXdwb3J0SCArICh2aWV3cG9ydEhhc0hTY3JvbGwgPyBzY3JvbGxiYXJE aW1lbnNpb25zLmhlaWdodCA6IDApKTsKLQotICAgICAgdmFyIG9sZE9mZnNl dCA9IG9mZnNldDsKLQotICAgICAgcGFnZSA9IE1hdGgubWluKG4gLSAxLCBN YXRoLmZsb29yKHkgLyBwaCkpOwotICAgICAgb2Zmc2V0ID0gTWF0aC5yb3Vu ZChwYWdlICogY2opOwotICAgICAgdmFyIG5ld1Njcm9sbFRvcCA9IHkgLSBv ZmZzZXQ7Ci0KLSAgICAgIGlmIChvZmZzZXQgIT0gb2xkT2Zmc2V0KSB7Ci0g ICAgICAgIHZhciByYW5nZSA9IGdldFZpc2libGVSYW5nZShuZXdTY3JvbGxU b3ApOwotICAgICAgICBjbGVhbnVwUm93cyhyYW5nZSk7Ci0gICAgICAgIHVw ZGF0ZVJvd1Bvc2l0aW9ucygpOwotICAgICAgfQotCi0gICAgICBpZiAocHJl dlNjcm9sbFRvcCAhPSBuZXdTY3JvbGxUb3ApIHsKLSAgICAgICAgdlNjcm9s bERpciA9IChwcmV2U2Nyb2xsVG9wICsgb2xkT2Zmc2V0IDwgbmV3U2Nyb2xs VG9wICsgb2Zmc2V0KSA/IDEgOiAtMTsKLSAgICAgICAgJHZpZXdwb3J0WzBd LnNjcm9sbFRvcCA9IChsYXN0UmVuZGVyZWRTY3JvbGxUb3AgPSBzY3JvbGxU b3AgPSBwcmV2U2Nyb2xsVG9wID0gbmV3U2Nyb2xsVG9wKTsKLQotICAgICAg ICB0cmlnZ2VyKHNlbGYub25WaWV3cG9ydENoYW5nZWQsIHtncmlkOiBzZWxm fSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZGVmYXVsdEZv cm1hdHRlcihyb3csIGNlbGwsIHZhbHVlLCBjb2x1bW5EZWYsIGRhdGFDb250 ZXh0KSB7Ci0gICAgICBpZiAodmFsdWUgPT0gbnVsbCkgewotICAgICAgICBy ZXR1cm4gIiI7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gKHZh bHVlICsgIiIpLnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKC88L2cs IiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKTsKLSAgICAgIH0KLSAgICB9 Ci0KLSAgICBmdW5jdGlvbiBnZXRGb3JtYXR0ZXIocm93LCBjb2x1bW4pIHsK LSAgICAgIHZhciByb3dNZXRhZGF0YSA9IGRhdGEuZ2V0SXRlbU1ldGFkYXRh ICYmIGRhdGEuZ2V0SXRlbU1ldGFkYXRhKHJvdyk7Ci0KLSAgICAgIC8vIGxv b2sgdXAgYnkgaWQsIHRoZW4gaW5kZXgKLSAgICAgIHZhciBjb2x1bW5PdmVy cmlkZXMgPSByb3dNZXRhZGF0YSAmJgotICAgICAgICAgIHJvd01ldGFkYXRh LmNvbHVtbnMgJiYKLSAgICAgICAgICAocm93TWV0YWRhdGEuY29sdW1uc1tj b2x1bW4uaWRdIHx8IHJvd01ldGFkYXRhLmNvbHVtbnNbZ2V0Q29sdW1uSW5k ZXgoY29sdW1uLmlkKV0pOwotCi0gICAgICByZXR1cm4gKGNvbHVtbk92ZXJy aWRlcyAmJiBjb2x1bW5PdmVycmlkZXMuZm9ybWF0dGVyKSB8fAotICAgICAg ICAgIChyb3dNZXRhZGF0YSAmJiByb3dNZXRhZGF0YS5mb3JtYXR0ZXIpIHx8 Ci0gICAgICAgICAgY29sdW1uLmZvcm1hdHRlciB8fAotICAgICAgICAgIChv cHRpb25zLmZvcm1hdHRlckZhY3RvcnkgJiYgb3B0aW9ucy5mb3JtYXR0ZXJG YWN0b3J5LmdldEZvcm1hdHRlcihjb2x1bW4pKSB8fAotICAgICAgICAgIG9w dGlvbnMuZGVmYXVsdEZvcm1hdHRlcjsKLSAgICB9Ci0KLSAgICBmdW5jdGlv biBnZXRFZGl0b3Iocm93LCBjZWxsKSB7Ci0gICAgICB2YXIgY29sdW1uID0g Y29sdW1uc1tjZWxsXTsKLSAgICAgIHZhciByb3dNZXRhZGF0YSA9IGRhdGEu Z2V0SXRlbU1ldGFkYXRhICYmIGRhdGEuZ2V0SXRlbU1ldGFkYXRhKHJvdyk7 Ci0gICAgICB2YXIgY29sdW1uTWV0YWRhdGEgPSByb3dNZXRhZGF0YSAmJiBy b3dNZXRhZGF0YS5jb2x1bW5zOwotCi0gICAgICBpZiAoY29sdW1uTWV0YWRh dGEgJiYgY29sdW1uTWV0YWRhdGFbY29sdW1uLmlkXSAmJiBjb2x1bW5NZXRh ZGF0YVtjb2x1bW4uaWRdLmVkaXRvciAhPT0gdW5kZWZpbmVkKSB7Ci0gICAg ICAgIHJldHVybiBjb2x1bW5NZXRhZGF0YVtjb2x1bW4uaWRdLmVkaXRvcjsK LSAgICAgIH0KLSAgICAgIGlmIChjb2x1bW5NZXRhZGF0YSAmJiBjb2x1bW5N ZXRhZGF0YVtjZWxsXSAmJiBjb2x1bW5NZXRhZGF0YVtjZWxsXS5lZGl0b3Ig IT09IHVuZGVmaW5lZCkgewotICAgICAgICByZXR1cm4gY29sdW1uTWV0YWRh dGFbY2VsbF0uZWRpdG9yOwotICAgICAgfQotCi0gICAgICByZXR1cm4gY29s dW1uLmVkaXRvciB8fCAob3B0aW9ucy5lZGl0b3JGYWN0b3J5ICYmIG9wdGlv bnMuZWRpdG9yRmFjdG9yeS5nZXRFZGl0b3IoY29sdW1uKSk7Ci0gICAgfQot Ci0gICAgZnVuY3Rpb24gZ2V0RGF0YUl0ZW1WYWx1ZUZvckNvbHVtbihpdGVt LCBjb2x1bW5EZWYpIHsKLSAgICAgIGlmIChvcHRpb25zLmRhdGFJdGVtQ29s dW1uVmFsdWVFeHRyYWN0b3IpIHsKLSAgICAgICAgcmV0dXJuIG9wdGlvbnMu ZGF0YUl0ZW1Db2x1bW5WYWx1ZUV4dHJhY3RvcihpdGVtLCBjb2x1bW5EZWYp OwotICAgICAgfQotICAgICAgcmV0dXJuIGl0ZW1bY29sdW1uRGVmLmZpZWxk XTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBhcHBlbmRSb3dIdG1sKHN0cmlu Z0FycmF5LCByb3csIHJhbmdlLCBkYXRhTGVuZ3RoKSB7Ci0gICAgICB2YXIg ZCA9IGdldERhdGFJdGVtKHJvdyk7Ci0gICAgICB2YXIgZGF0YUxvYWRpbmcg PSByb3cgPCBkYXRhTGVuZ3RoICYmICFkOwotICAgICAgdmFyIGRpZmYgPSBk YXRhTGVuZ3RoIC0gcm93OwotICAgICAgdmFyIHJvd0NzcyA9ICJzciIgKwot ICAgICAgICAgIChkYXRhTG9hZGluZyA/ICIgbG9hZGluZyIgOiAiIikgKwot ICAgICAgICAgIChyb3cgPT09IGFjdGl2ZVJvdyA/ICIgYWN0aXZlIiA6ICIi KSArCi0gICAgICAgICAgKCgob3B0aW9ucy5lbmFibGVBZGRSb3cgJiYgZGlm ZiA8IDApIHx8IGRpZmYgPT0gMCkgPyAiIiA6IChyb3cgJSAyID09IDEgPyAi IG9kZCIgOiAiIGV2ZW4iKSk7Ci0KLSAgICAgIGlmICghZCAmJiBvcHRpb25z LmVuYWJsZUFkZFJvdyAmJiBkaWZmID09IDApIHsKLSAgICAgICAgcm93Q3Nz ICs9ICIgIiArIG9wdGlvbnMuYWRkTmV3Um93Q3NzQ2xhc3M7Ci0gICAgICB9 Ci0KLSAgICAgIHZhciBtZXRhZGF0YSA9IGRhdGEuZ2V0SXRlbU1ldGFkYXRh ICYmIGRhdGEuZ2V0SXRlbU1ldGFkYXRhKHJvdyk7Ci0KLSAgICAgIGlmICht ZXRhZGF0YSAmJiBtZXRhZGF0YS5jc3NDbGFzc2VzKSB7Ci0gICAgICAgIHJv d0NzcyArPSAiICIgKyBtZXRhZGF0YS5jc3NDbGFzc2VzOwotICAgICAgfQot Ci0gICAgICBzdHJpbmdBcnJheS5wdXNoKCI8ZGl2IGNsYXNzPSd1aS13aWRn ZXQtY29udGVudCAiICsgcm93Q3NzICsgIicgc3R5bGU9J3RvcDoiICsgZ2V0 Um93VG9wKHJvdykgKyAicHgnPiIpOwotCi0gICAgICBpZiAob3B0aW9ucy5l bmFibGVBZGRSb3cgPyBkaWZmIDwgMCA6IGRpZmYgPT0gMCkgewotICAgICAg ICBzdHJpbmdBcnJheS5wdXNoKCI8L2Rpdj4iKTsKLSAgICAgICAgcmV0dXJu OwotICAgICAgfQotCi0gICAgICB2YXIgY29sc3BhbiwgbTsKLSAgICAgIGZv ciAodmFyIGkgPSAwLCBpaSA9IGNvbHVtbnMubGVuZ3RoOyBpIDwgaWk7IGkr KykgewotICAgICAgICBtID0gY29sdW1uc1tpXTsKLSAgICAgICAgY29sc3Bh biA9IDE7Ci0gICAgICAgIGlmIChtZXRhZGF0YSAmJiBtZXRhZGF0YS5jb2x1 bW5zKSB7Ci0gICAgICAgICAgdmFyIGNvbHVtbkRhdGEgPSBtZXRhZGF0YS5j b2x1bW5zW20uaWRdIHx8IG1ldGFkYXRhLmNvbHVtbnNbaV07Ci0gICAgICAg ICAgY29sc3BhbiA9IChjb2x1bW5EYXRhICYmIGNvbHVtbkRhdGEuY29sc3Bh bikgfHwgMTsKLSAgICAgICAgICBpZiAoY29sc3BhbiA9PT0gIioiKSB7Ci0g ICAgICAgICAgICBjb2xzcGFuID0gaWkgLSBpOwotICAgICAgICAgIH0KLSAg ICAgICAgfQotCi0gICAgICAgIC8vIERvIG5vdCByZW5kZXIgY2VsbHMgb3V0 c2lkZSBvZiB0aGUgdmlld3BvcnQuCi0gICAgICAgIGlmIChjb2x1bW5Qb3NS aWdodFtNYXRoLm1pbihpaSAtIDEsIGkgKyBjb2xzcGFuIC0gMSldID4gcmFu Z2UubGVmdFB4KSB7Ci0gICAgICAgICAgaWYgKGNvbHVtblBvc0xlZnRbaV0g PiByYW5nZS5yaWdodFB4KSB7Ci0gICAgICAgICAgICAvLyBBbGwgY29sdW1u cyB0byB0aGUgcmlnaHQgYXJlIG91dHNpZGUgdGhlIHJhbmdlLgotICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgYXBwZW5k Q2VsbEh0bWwoc3RyaW5nQXJyYXksIHJvdywgaSwgY29sc3BhbiwgZCk7Ci0g ICAgICAgIH0KLQotICAgICAgICBpZiAoY29sc3BhbiA+IDEpIHsKLSAgICAg ICAgICBpICs9IChjb2xzcGFuIC0gMSk7Ci0gICAgICAgIH0KLSAgICAgIH0K LQotICAgICAgc3RyaW5nQXJyYXkucHVzaCgiPC9kaXY+Iik7Ci0gICAgfQot Ci0gICAgZnVuY3Rpb24gYXBwZW5kQ2VsbEh0bWwoc3RyaW5nQXJyYXksIHJv dywgY2VsbCwgY29sc3BhbiwgaXRlbSkgewotICAgICAgLy8gc3RyaW5nQXJy YXk6IHN0cmluZ0J1aWxkZXIgY29udGFpbmluZyB0aGUgSFRNTCBwYXJ0cwot ICAgICAgLy8gcm93LCBjZWxsOiByb3cgYW5kIGNvbHVtbiBpbmRleAotICAg ICAgLy8gY29sc3BhbjogSFRNTCBjb2xzcGFuCi0gICAgICAvLyBpdGVtOiBn cmlkIGRhdGEgZm9yIHJvdwotCi0gICAgICB2YXIgbSA9IGNvbHVtbnNbY2Vs bF07Ci0gICAgICB2YXIgY2VsbENzcyA9ICJzYyBsIiArIGNlbGwgKyAiIHIi ICsgTWF0aC5taW4oY29sdW1ucy5sZW5ndGggLSAxLCBjZWxsICsgY29sc3Bh biAtIDEpICsKLSAgICAgICAgICAobS5jc3NDbGFzcyA/ICIgIiArIG0uY3Nz Q2xhc3MgOiAiIik7Ci0gICAgICBpZiAocm93ID09PSBhY3RpdmVSb3cgJiYg Y2VsbCA9PT0gYWN0aXZlQ2VsbCkgewotICAgICAgICBjZWxsQ3NzICs9ICgi IGFjdGl2ZSIpOwotICAgICAgfQotCi0gICAgICBpZiAoIWl0ZW0pIHsKLSAg ICAgICAgICB2YXIgZGlmZiA9IGdldERhdGFMZW5ndGgoKSAtIHJvdzsKLSAg ICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVBZGRSb3cgPyBkaWZmIDwgMCA6 IGRpZmYgPT0gMCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLQot ICAgICAgLy8gVE9ETzogIG1lcmdlIHRoZW0gdG9nZXRoZXIgaW4gdGhlIHNl dHRlcgotICAgICAgZm9yICh2YXIga2V5IGluIGNlbGxDc3NDbGFzc2VzKSB7 Ci0gICAgICAgIGlmIChjZWxsQ3NzQ2xhc3Nlc1trZXldW3Jvd10gJiYgY2Vs bENzc0NsYXNzZXNba2V5XVtyb3ddW20uaWRdKSB7Ci0gICAgICAgICAgY2Vs bENzcyArPSAoIiAiICsgY2VsbENzc0NsYXNzZXNba2V5XVtyb3ddW20uaWRd KTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBzdHJpbmdBcnJheS5w dXNoKCI8ZGl2IGNsYXNzPSciICsgY2VsbENzcyArICInPiIpOwotCi0gICAg ICAvLyBpZiB0aGVyZSBpcyBhIGNvcnJlc3BvbmRpbmcgcm93IChpZiBub3Qs IHRoaXMgaXMgdGhlIEFkZCBOZXcgcm93IG9yIHRoaXMgZGF0YSBoYXNuJ3Qg YmVlbiBsb2FkZWQgeWV0KQotICAgICAgaWYgKGl0ZW0pIHsKLSAgICAgICAg dmFyIHZhbHVlID0gZ2V0RGF0YUl0ZW1WYWx1ZUZvckNvbHVtbihpdGVtLCBt KTsKLSAgICAgICAgc3RyaW5nQXJyYXkucHVzaChnZXRGb3JtYXR0ZXIocm93 LCBtKShyb3csIGNlbGwsIHZhbHVlLCBtLCBpdGVtKSk7Ci0gICAgICB9Ci0K LSAgICAgIHN0cmluZ0FycmF5LnB1c2goIjwvZGl2PiIpOwotCi0gICAgICBy b3dzQ2FjaGVbcm93XS5jZWxsUmVuZGVyUXVldWUucHVzaChjZWxsKTsKLSAg ICAgIHJvd3NDYWNoZVtyb3ddLmNlbGxDb2xTcGFuc1tjZWxsXSA9IGNvbHNw YW47Ci0gICAgfQotCi0KLSAgICBmdW5jdGlvbiBjbGVhbnVwUm93cyhyYW5n ZVRvS2VlcCkgewotICAgICAgZm9yICh2YXIgaSBpbiByb3dzQ2FjaGUpIHsK LSAgICAgICAgaWYgKCgoaSA9IHBhcnNlSW50KGksIDEwKSkgIT09IGFjdGl2 ZVJvdykgJiYgKGkgPCByYW5nZVRvS2VlcC50b3AgfHwgaSA+IHJhbmdlVG9L ZWVwLmJvdHRvbSkpIHsKLSAgICAgICAgICByZW1vdmVSb3dGcm9tQ2FjaGUo aSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChvcHRpb25zLmVu YWJsZUFzeW5jUG9zdFJlbmRlckNsZWFudXApIHsgc3RhcnRQb3N0UHJvY2Vz c2luZ0NsZWFudXAoKTsgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIGludmFs aWRhdGUoKSB7Ci0gICAgICB1cGRhdGVSb3dDb3VudCgpOwotICAgICAgaW52 YWxpZGF0ZUFsbFJvd3MoKTsKLSAgICAgIHJlbmRlcigpOwotICAgIH0KLQot ICAgIGZ1bmN0aW9uIGludmFsaWRhdGVBbGxSb3dzKCkgewotICAgICAgaWYg KGN1cnJlbnRFZGl0b3IpIHsKLSAgICAgICAgbWFrZUFjdGl2ZUNlbGxOb3Jt YWwoKTsKLSAgICAgIH0KLSAgICAgIGZvciAodmFyIHJvdyBpbiByb3dzQ2Fj aGUpIHsKLSAgICAgICAgcmVtb3ZlUm93RnJvbUNhY2hlKHJvdyk7Ci0gICAg ICB9Ci0gICAgICBpZiAob3B0aW9ucy5lbmFibGVBc3luY1Bvc3RSZW5kZXJD bGVhbnVwKSB7IHN0YXJ0UG9zdFByb2Nlc3NpbmdDbGVhbnVwKCk7IH0KLSAg ICB9Ci0KLSAgICBmdW5jdGlvbiBxdWV1ZVBvc3RQcm9jZXNzZWRSb3dGb3JD bGVhbnVwKGNhY2hlRW50cnksIHBvc3RQcm9jZXNzZWRSb3csIHJvd0lkeCkg ewotICAgICAgcG9zdFByb2Nlc3Nncm91cElkKys7Ci0KLSAgICAgIC8vIHN0 b3JlIGFuZCBkZXRhY2ggbm9kZSBmb3IgbGF0ZXIgYXN5bmMgY2xlYW51cAot ICAgICAgZm9yICh2YXIgY29sdW1uSWR4IGluIHBvc3RQcm9jZXNzZWRSb3cp IHsKLSAgICAgICAgaWYgKHBvc3RQcm9jZXNzZWRSb3cuaGFzT3duUHJvcGVy dHkoY29sdW1uSWR4KSkgewotICAgICAgICAgIHBvc3RQcm9jZXNzZWRDbGVh bnVwUXVldWUucHVzaCh7Ci0gICAgICAgICAgICBhY3Rpb25UeXBlOiAnQycs Ci0gICAgICAgICAgICBncm91cElkOiBwb3N0UHJvY2Vzc2dyb3VwSWQsCi0g ICAgICAgICAgICBub2RlOiBjYWNoZUVudHJ5LmNlbGxOb2Rlc0J5Q29sdW1u SWR4WyBjb2x1bW5JZHggfCAwXSwKLSAgICAgICAgICAgIGNvbHVtbklkeDog Y29sdW1uSWR4IHwgMCwKLSAgICAgICAgICAgIHJvd0lkeDogcm93SWR4Ci0g ICAgICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHBvc3RQ cm9jZXNzZWRDbGVhbnVwUXVldWUucHVzaCh7Ci0gICAgICAgIGFjdGlvblR5 cGU6ICdSJywKLSAgICAgICAgZ3JvdXBJZDogcG9zdFByb2Nlc3Nncm91cElk LAotICAgICAgICBub2RlOiBjYWNoZUVudHJ5LnJvd05vZGUKLSAgICAgIH0p OwotICAgICAgJChjYWNoZUVudHJ5LnJvd05vZGUpLmRldGFjaCgpOwotICAg IH0KLQotICAgIGZ1bmN0aW9uIHF1ZXVlUG9zdFByb2Nlc3NlZENlbGxGb3JD bGVhbnVwKGNlbGxub2RlLCBjb2x1bW5JZHgsIHJvd0lkeCkgewotICAgICAg cG9zdFByb2Nlc3NlZENsZWFudXBRdWV1ZS5wdXNoKHsKLSAgICAgICAgYWN0 aW9uVHlwZTogJ0MnLAotICAgICAgICBncm91cElkOiBwb3N0UHJvY2Vzc2dy b3VwSWQsCi0gICAgICAgIG5vZGU6IGNlbGxub2RlLAotICAgICAgICBjb2x1 bW5JZHg6IGNvbHVtbklkeCwKLSAgICAgICAgcm93SWR4OiByb3dJZHgKLSAg ICAgIH0pOwotICAgICAgJChjZWxsbm9kZSkuZGV0YWNoKCk7Ci0gICAgfQot Ci0gICAgZnVuY3Rpb24gcmVtb3ZlUm93RnJvbUNhY2hlKHJvdykgewotICAg ICAgdmFyIGNhY2hlRW50cnkgPSByb3dzQ2FjaGVbcm93XTsKLSAgICAgIGlm ICghY2FjaGVFbnRyeSkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0K LSAgICAgIGlmIChyb3dOb2RlRnJvbUxhc3RNb3VzZVdoZWVsRXZlbnQgPT09 IGNhY2hlRW50cnkucm93Tm9kZSkgewotICAgICAgICBjYWNoZUVudHJ5LnJv d05vZGUuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKLSAgICAgICAgem9tYmll Um93Tm9kZUZyb21MYXN0TW91c2VXaGVlbEV2ZW50ID0gcm93Tm9kZUZyb21M YXN0TW91c2VXaGVlbEV2ZW50OwotICAgICAgICB6b21iaWVSb3dDYWNoZUZy b21MYXN0TW91c2VXaGVlbEV2ZW50ID0gY2FjaGVFbnRyeTsKLSAgICAgICAg em9tYmllUm93UG9zdFByb2Nlc3NlZEZyb21MYXN0TW91c2VXaGVlbEV2ZW50 ID0gcG9zdFByb2Nlc3NlZFJvd3Nbcm93XTsKLSAgICAgICAgLy8gaWdub3Jl IHBvc3QgcHJvY2Vzc2luZyBjbGVhbnVwIGluIHRoaXMgY2FzZSAtIGl0IHdp bGwgYmUgZGVhbHQgd2l0aCBsYXRlcgotICAgICAgfSBlbHNlIHsKLSAgICAg ICAgaWYgKG9wdGlvbnMuZW5hYmxlQXN5bmNQb3N0UmVuZGVyQ2xlYW51cCAm JiBwb3N0UHJvY2Vzc2VkUm93c1tyb3ddKSB7Ci0gICAgICAgICAgcXVldWVQ b3N0UHJvY2Vzc2VkUm93Rm9yQ2xlYW51cChjYWNoZUVudHJ5LCBwb3N0UHJv Y2Vzc2VkUm93c1tyb3ddLCByb3cpOwotICAgICAgICB9IGVsc2UgewotICAg ICAgICAgICRjYW52YXNbMF0ucmVtb3ZlQ2hpbGQoY2FjaGVFbnRyeS5yb3dO b2RlKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBkZWxldGUgcm93 c0NhY2hlW3Jvd107Ci0gICAgICBkZWxldGUgcG9zdFByb2Nlc3NlZFJvd3Nb cm93XTsKLSAgICAgIHJlbmRlcmVkUm93cy0tOwotICAgICAgY291bnRlcl9y b3dzX3JlbW92ZWQrKzsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBpbnZhbGlk YXRlUm93cyhyb3dzKSB7Ci0gICAgICB2YXIgaSwgcmw7Ci0gICAgICBpZiAo IXJvd3MgfHwgIXJvd3MubGVuZ3RoKSB7Ci0gICAgICAgIHJldHVybjsKLSAg ICAgIH0KLSAgICAgIHZTY3JvbGxEaXIgPSAwOwotICAgICAgZm9yIChpID0g MCwgcmwgPSByb3dzLmxlbmd0aDsgaSA8IHJsOyBpKyspIHsKLSAgICAgICAg aWYgKGN1cnJlbnRFZGl0b3IgJiYgYWN0aXZlUm93ID09PSByb3dzW2ldKSB7 Ci0gICAgICAgICAgbWFrZUFjdGl2ZUNlbGxOb3JtYWwoKTsKLSAgICAgICAg fQotICAgICAgICBpZiAocm93c0NhY2hlW3Jvd3NbaV1dKSB7Ci0gICAgICAg ICAgcmVtb3ZlUm93RnJvbUNhY2hlKHJvd3NbaV0pOwotICAgICAgICB9Ci0g ICAgICB9Ci0gICAgICBpZiAob3B0aW9ucy5lbmFibGVBc3luY1Bvc3RSZW5k ZXJDbGVhbnVwKSB7IHN0YXJ0UG9zdFByb2Nlc3NpbmdDbGVhbnVwKCk7IH0K LQotICAgIH0KLQotICAgIGZ1bmN0aW9uIGludmFsaWRhdGVSb3cocm93KSB7 Ci0gICAgICBpbnZhbGlkYXRlUm93cyhbcm93XSk7Ci0gICAgfQotCi0gICAg ZnVuY3Rpb24gdXBkYXRlQ2VsbChyb3csIGNlbGwpIHsKLSAgICAgIHZhciBj ZWxsTm9kZSA9IGdldENlbGxOb2RlKHJvdywgY2VsbCk7Ci0gICAgICBpZiAo IWNlbGxOb2RlKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAg ICAgdmFyIG0gPSBjb2x1bW5zW2NlbGxdLCBkID0gZ2V0RGF0YUl0ZW0ocm93 KTsKLSAgICAgIGlmIChjdXJyZW50RWRpdG9yICYmIGFjdGl2ZVJvdyA9PT0g cm93ICYmIGFjdGl2ZUNlbGwgPT09IGNlbGwpIHsKLSAgICAgICAgY3VycmVu dEVkaXRvci5sb2FkVmFsdWUoZCk7Ci0gICAgICB9IGVsc2UgewotICAgICAg ICBjZWxsTm9kZS5pbm5lckhUTUwgPSBkID8gZ2V0Rm9ybWF0dGVyKHJvdywg bSkocm93LCBjZWxsLCBnZXREYXRhSXRlbVZhbHVlRm9yQ29sdW1uKGQsIG0p LCBtLCBkKSA6ICIiOwotICAgICAgICBpbnZhbGlkYXRlUG9zdFByb2Nlc3Np bmdSZXN1bHRzKHJvdyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rp b24gdXBkYXRlUm93KHJvdykgewotICAgICAgdmFyIGNhY2hlRW50cnkgPSBy b3dzQ2FjaGVbcm93XTsKLSAgICAgIGlmICghY2FjaGVFbnRyeSkgewotICAg ICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIGVuc3VyZUNlbGxOb2Rl c0luUm93c0NhY2hlKHJvdyk7Ci0KLSAgICAgIHZhciBkID0gZ2V0RGF0YUl0 ZW0ocm93KTsKLQotICAgICAgZm9yICh2YXIgY29sdW1uSWR4IGluIGNhY2hl RW50cnkuY2VsbE5vZGVzQnlDb2x1bW5JZHgpIHsKLSAgICAgICAgaWYgKCFj YWNoZUVudHJ5LmNlbGxOb2Rlc0J5Q29sdW1uSWR4Lmhhc093blByb3BlcnR5 KGNvbHVtbklkeCkpIHsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg fQotCi0gICAgICAgIGNvbHVtbklkeCA9IGNvbHVtbklkeCB8IDA7Ci0gICAg ICAgIHZhciBtID0gY29sdW1uc1tjb2x1bW5JZHhdLAotICAgICAgICAgICAg bm9kZSA9IGNhY2hlRW50cnkuY2VsbE5vZGVzQnlDb2x1bW5JZHhbY29sdW1u SWR4XTsKLQotICAgICAgICBpZiAocm93ID09PSBhY3RpdmVSb3cgJiYgY29s dW1uSWR4ID09PSBhY3RpdmVDZWxsICYmIGN1cnJlbnRFZGl0b3IpIHsKLSAg ICAgICAgICBjdXJyZW50RWRpdG9yLmxvYWRWYWx1ZShkKTsKLSAgICAgICAg fSBlbHNlIGlmIChkKSB7Ci0gICAgICAgICAgbm9kZS5pbm5lckhUTUwgPSBn ZXRGb3JtYXR0ZXIocm93LCBtKShyb3csIGNvbHVtbklkeCwgZ2V0RGF0YUl0 ZW1WYWx1ZUZvckNvbHVtbihkLCBtKSwgbSwgZCk7Ci0gICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgbm9kZS5pbm5lckhUTUwgPSAiIjsKLSAgICAgICAg fQotICAgICAgfQotCi0gICAgICBpbnZhbGlkYXRlUG9zdFByb2Nlc3NpbmdS ZXN1bHRzKHJvdyk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZ2V0Vmlld3Bv cnRIZWlnaHQoKSB7Ci0gICAgICByZXR1cm4gcGFyc2VGbG9hdCgkLmNzcygk Y29udGFpbmVyWzBdLCAiaGVpZ2h0IiwgdHJ1ZSkpIC0KLSAgICAgICAgICBw YXJzZUZsb2F0KCQuY3NzKCRjb250YWluZXJbMF0sICJwYWRkaW5nVG9wIiwg dHJ1ZSkpIC0KLSAgICAgICAgICBwYXJzZUZsb2F0KCQuY3NzKCRjb250YWlu ZXJbMF0sICJwYWRkaW5nQm90dG9tIiwgdHJ1ZSkpIC0KLSAgICAgICAgICBw YXJzZUZsb2F0KCQuY3NzKCRoZWFkZXJTY3JvbGxlclswXSwgImhlaWdodCIp KSAtIGdldFZCb3hEZWx0YSgkaGVhZGVyU2Nyb2xsZXIpIC0KLSAgICAgICAg ICAob3B0aW9ucy5zaG93VG9wUGFuZWwgPyBvcHRpb25zLnRvcFBhbmVsSGVp Z2h0ICsgZ2V0VkJveERlbHRhKCR0b3BQYW5lbFNjcm9sbGVyKSA6IDApIC0K LSAgICAgICAgICAob3B0aW9ucy5zaG93SGVhZGVyUm93ID8gb3B0aW9ucy5o ZWFkZXJSb3dIZWlnaHQgKyBnZXRWQm94RGVsdGEoJGhlYWRlclJvd1Njcm9s bGVyKSA6IDApOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHJlc2l6ZUNhbnZh cygpIHsKLSAgICAgIGlmICghaW5pdGlhbGl6ZWQpIHsgcmV0dXJuOyB9Ci0g ICAgICBpZiAob3B0aW9ucy5hdXRvSGVpZ2h0KSB7Ci0gICAgICAgIHZpZXdw b3J0SCA9IG9wdGlvbnMucm93SGVpZ2h0ICogZ2V0RGF0YUxlbmd0aEluY2x1 ZGluZ0FkZE5ldygpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdmlld3Bv cnRIID0gZ2V0Vmlld3BvcnRIZWlnaHQoKTsKLSAgICAgIH0KLQotICAgICAg bnVtVmlzaWJsZVJvd3MgPSBNYXRoLmNlaWwodmlld3BvcnRIIC8gb3B0aW9u cy5yb3dIZWlnaHQpOwotICAgICAgdmlld3BvcnRXID0gcGFyc2VGbG9hdCgk LmNzcygkY29udGFpbmVyWzBdLCAid2lkdGgiLCB0cnVlKSk7Ci0gICAgICBp ZiAoIW9wdGlvbnMuYXV0b0hlaWdodCkgewotICAgICAgICAkdmlld3BvcnQu aGVpZ2h0KHZpZXdwb3J0SCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChvcHRp b25zLmZvcmNlRml0Q29sdW1ucykgewotICAgICAgICBhdXRvc2l6ZUNvbHVt bnMoKTsKLSAgICAgIH0KLQotICAgICAgdXBkYXRlUm93Q291bnQoKTsKLSAg ICAgIGhhbmRsZVNjcm9sbCgpOwotICAgICAgLy8gU2luY2UgdGhlIHdpZHRo IGhhcyBjaGFuZ2VkLCBmb3JjZSB0aGUgcmVuZGVyKCkgdG8gcmVldmFsdWF0 ZSB2aXJ0dWFsbHkgcmVuZGVyZWQgY2VsbHMuCi0gICAgICBsYXN0UmVuZGVy ZWRTY3JvbGxMZWZ0ID0gLTE7Ci0gICAgICByZW5kZXIoKTsKLSAgICB9Ci0K LSAgICBmdW5jdGlvbiB1cGRhdGVSb3dDb3VudCgpIHsKLSAgICAgIGlmICgh aW5pdGlhbGl6ZWQpIHsgcmV0dXJuOyB9Ci0KLSAgICAgIHZhciBkYXRhTGVu Z3RoSW5jbHVkaW5nQWRkTmV3ID0gZ2V0RGF0YUxlbmd0aEluY2x1ZGluZ0Fk ZE5ldygpOwotICAgICAgdmFyIG51bWJlck9mUm93cyA9IGRhdGFMZW5ndGhJ bmNsdWRpbmdBZGROZXcgKwotICAgICAgICAgIChvcHRpb25zLmxlYXZlU3Bh Y2VGb3JOZXdSb3dzID8gbnVtVmlzaWJsZVJvd3MgLSAxIDogMCk7Ci0KLSAg ICAgIHZhciBvbGRWaWV3cG9ydEhhc1ZTY3JvbGwgPSB2aWV3cG9ydEhhc1ZT Y3JvbGw7Ci0gICAgICAvLyB3aXRoIGF1dG9IZWlnaHQsIHdlIGRvIG5vdCBu ZWVkIHRvIGFjY29tbW9kYXRlIHRoZSB2ZXJ0aWNhbCBzY3JvbGwgYmFyCi0g ICAgICB2aWV3cG9ydEhhc1ZTY3JvbGwgPSAhb3B0aW9ucy5hdXRvSGVpZ2h0 ICYmIChudW1iZXJPZlJvd3MgKiBvcHRpb25zLnJvd0hlaWdodCA+IHZpZXdw b3J0SCk7Ci0KLSAgICAgIG1ha2VBY3RpdmVDZWxsTm9ybWFsKCk7Ci0KLSAg ICAgIC8vIHJlbW92ZSB0aGUgcm93cyB0aGF0IGFyZSBub3cgb3V0c2lkZSBv ZiB0aGUgZGF0YSByYW5nZQotICAgICAgLy8gdGhpcyBoZWxwcyBhdm9pZCBy ZWR1bmRhbnQgY2FsbHMgdG8gLnJlbW92ZVJvdygpIHdoZW4gdGhlIHNpemUg b2YgdGhlIGRhdGEgZGVjcmVhc2VkIGJ5IHRob3VzYW5kcyBvZiByb3dzCi0g ICAgICB2YXIgbCA9IGRhdGFMZW5ndGhJbmNsdWRpbmdBZGROZXcgLSAxOwot ICAgICAgZm9yICh2YXIgaSBpbiByb3dzQ2FjaGUpIHsKLSAgICAgICAgaWYg KGkgPj0gbCkgewotICAgICAgICAgIHJlbW92ZVJvd0Zyb21DYWNoZShpKTsK LSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKG9wdGlvbnMuZW5hYmxl QXN5bmNQb3N0UmVuZGVyQ2xlYW51cCkgeyBzdGFydFBvc3RQcm9jZXNzaW5n Q2xlYW51cCgpOyB9Ci0KLSAgICAgIGlmIChhY3RpdmVDZWxsTm9kZSAmJiBh Y3RpdmVSb3cgPiBsKSB7Ci0gICAgICAgIHJlc2V0QWN0aXZlQ2VsbCgpOwot ICAgICAgfQotCi0gICAgICB2YXIgb2xkSCA9IGg7Ci0gICAgICB0aCA9IE1h dGgubWF4KG9wdGlvbnMucm93SGVpZ2h0ICogbnVtYmVyT2ZSb3dzLCB2aWV3 cG9ydEggLSBzY3JvbGxiYXJEaW1lbnNpb25zLmhlaWdodCk7Ci0gICAgICBp ZiAodGggPCBtYXhTdXBwb3J0ZWRDc3NIZWlnaHQpIHsKLSAgICAgICAgLy8g anVzdCBvbmUgcGFnZQotICAgICAgICBoID0gcGggPSB0aDsKLSAgICAgICAg biA9IDE7Ci0gICAgICAgIGNqID0gMDsKLSAgICAgIH0gZWxzZSB7Ci0gICAg ICAgIC8vIGJyZWFrIGludG8gcGFnZXMKLSAgICAgICAgaCA9IG1heFN1cHBv cnRlZENzc0hlaWdodDsKLSAgICAgICAgcGggPSBoIC8gMTAwOwotICAgICAg ICBuID0gTWF0aC5mbG9vcih0aCAvIHBoKTsKLSAgICAgICAgY2ogPSAodGgg LSBoKSAvIChuIC0gMSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChoICE9PSBv bGRIKSB7Ci0gICAgICAgICRjYW52YXMuY3NzKCJoZWlnaHQiLCBoKTsKLSAg ICAgICAgc2Nyb2xsVG9wID0gJHZpZXdwb3J0WzBdLnNjcm9sbFRvcDsKLSAg ICAgIH0KLQotICAgICAgdmFyIG9sZFNjcm9sbFRvcEluUmFuZ2UgPSAoc2Ny b2xsVG9wICsgb2Zmc2V0IDw9IHRoIC0gdmlld3BvcnRIKTsKLQotICAgICAg aWYgKHRoID09IDAgfHwgc2Nyb2xsVG9wID09IDApIHsKLSAgICAgICAgcGFn ZSA9IG9mZnNldCA9IDA7Ci0gICAgICB9IGVsc2UgaWYgKG9sZFNjcm9sbFRv cEluUmFuZ2UpIHsKLSAgICAgICAgLy8gbWFpbnRhaW4gdmlydHVhbCBwb3Np dGlvbgotICAgICAgICBzY3JvbGxUbyhzY3JvbGxUb3AgKyBvZmZzZXQpOwot ICAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gc2Nyb2xsIHRvIGJvdHRvbQot ICAgICAgICBzY3JvbGxUbyh0aCAtIHZpZXdwb3J0SCk7Ci0gICAgICB9Ci0K LSAgICAgIGlmIChoICE9IG9sZEggJiYgb3B0aW9ucy5hdXRvSGVpZ2h0KSB7 Ci0gICAgICAgIHJlc2l6ZUNhbnZhcygpOwotICAgICAgfQotCi0gICAgICBp ZiAob3B0aW9ucy5mb3JjZUZpdENvbHVtbnMgJiYgb2xkVmlld3BvcnRIYXNW U2Nyb2xsICE9IHZpZXdwb3J0SGFzVlNjcm9sbCkgewotICAgICAgICBhdXRv c2l6ZUNvbHVtbnMoKTsKLSAgICAgIH0KLSAgICAgIHVwZGF0ZUNhbnZhc1dp ZHRoKGZhbHNlKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBnZXRWaXNpYmxl UmFuZ2Uodmlld3BvcnRUb3AsIHZpZXdwb3J0TGVmdCkgewotICAgICAgaWYg KHZpZXdwb3J0VG9wID09IG51bGwpIHsKLSAgICAgICAgdmlld3BvcnRUb3Ag PSBzY3JvbGxUb3A7Ci0gICAgICB9Ci0gICAgICBpZiAodmlld3BvcnRMZWZ0 ID09IG51bGwpIHsKLSAgICAgICAgdmlld3BvcnRMZWZ0ID0gc2Nyb2xsTGVm dDsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIHsKLSAgICAgICAgdG9wOiBn ZXRSb3dGcm9tUG9zaXRpb24odmlld3BvcnRUb3ApLAotICAgICAgICBib3R0 b206IGdldFJvd0Zyb21Qb3NpdGlvbih2aWV3cG9ydFRvcCArIHZpZXdwb3J0 SCkgKyAxLAotICAgICAgICBsZWZ0UHg6IHZpZXdwb3J0TGVmdCwKLSAgICAg ICAgcmlnaHRQeDogdmlld3BvcnRMZWZ0ICsgdmlld3BvcnRXCi0gICAgICB9 OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGdldFJlbmRlcmVkUmFuZ2Uodmll d3BvcnRUb3AsIHZpZXdwb3J0TGVmdCkgewotICAgICAgdmFyIHJhbmdlID0g Z2V0VmlzaWJsZVJhbmdlKHZpZXdwb3J0VG9wLCB2aWV3cG9ydExlZnQpOwot ICAgICAgdmFyIGJ1ZmZlciA9IE1hdGgucm91bmQodmlld3BvcnRIIC8gb3B0 aW9ucy5yb3dIZWlnaHQpOwotICAgICAgdmFyIG1pbkJ1ZmZlciA9IDM7Ci0K LSAgICAgIGlmICh2U2Nyb2xsRGlyID09IC0xKSB7Ci0gICAgICAgIHJhbmdl LnRvcCAtPSBidWZmZXI7Ci0gICAgICAgIHJhbmdlLmJvdHRvbSArPSBtaW5C dWZmZXI7Ci0gICAgICB9IGVsc2UgaWYgKHZTY3JvbGxEaXIgPT0gMSkgewot ICAgICAgICByYW5nZS50b3AgLT0gbWluQnVmZmVyOwotICAgICAgICByYW5n ZS5ib3R0b20gKz0gYnVmZmVyOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAg cmFuZ2UudG9wIC09IG1pbkJ1ZmZlcjsKLSAgICAgICAgcmFuZ2UuYm90dG9t ICs9IG1pbkJ1ZmZlcjsKLSAgICAgIH0KLQotICAgICAgcmFuZ2UudG9wID0g TWF0aC5tYXgoMCwgcmFuZ2UudG9wKTsKLSAgICAgIHJhbmdlLmJvdHRvbSA9 IE1hdGgubWluKGdldERhdGFMZW5ndGhJbmNsdWRpbmdBZGROZXcoKSAtIDEs IHJhbmdlLmJvdHRvbSk7Ci0KLSAgICAgIHJhbmdlLmxlZnRQeCAtPSB2aWV3 cG9ydFc7Ci0gICAgICByYW5nZS5yaWdodFB4ICs9IHZpZXdwb3J0VzsKLQot ICAgICAgcmFuZ2UubGVmdFB4ID0gTWF0aC5tYXgoMCwgcmFuZ2UubGVmdFB4 KTsKLSAgICAgIHJhbmdlLnJpZ2h0UHggPSBNYXRoLm1pbihjYW52YXNXaWR0 aCwgcmFuZ2UucmlnaHRQeCk7Ci0KLSAgICAgIHJldHVybiByYW5nZTsKLSAg ICB9Ci0KLSAgICBmdW5jdGlvbiBlbnN1cmVDZWxsTm9kZXNJblJvd3NDYWNo ZShyb3cpIHsKLSAgICAgIHZhciBjYWNoZUVudHJ5ID0gcm93c0NhY2hlW3Jv d107Ci0gICAgICBpZiAoY2FjaGVFbnRyeSkgewotICAgICAgICBpZiAoY2Fj aGVFbnRyeS5jZWxsUmVuZGVyUXVldWUubGVuZ3RoKSB7Ci0gICAgICAgICAg dmFyIGxhc3RDaGlsZCA9IGNhY2hlRW50cnkucm93Tm9kZS5sYXN0Q2hpbGQ7 Ci0gICAgICAgICAgd2hpbGUgKGNhY2hlRW50cnkuY2VsbFJlbmRlclF1ZXVl Lmxlbmd0aCkgewotICAgICAgICAgICAgdmFyIGNvbHVtbklkeCA9IGNhY2hl RW50cnkuY2VsbFJlbmRlclF1ZXVlLnBvcCgpOwotICAgICAgICAgICAgY2Fj aGVFbnRyeS5jZWxsTm9kZXNCeUNvbHVtbklkeFtjb2x1bW5JZHhdID0gbGFz dENoaWxkOwotICAgICAgICAgICAgbGFzdENoaWxkID0gbGFzdENoaWxkLnBy ZXZpb3VzU2libGluZzsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg IH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBjbGVhblVwQ2VsbHMocmFuZ2Us IHJvdykgewotICAgICAgdmFyIHRvdGFsQ2VsbHNSZW1vdmVkID0gMDsKLSAg ICAgIHZhciBjYWNoZUVudHJ5ID0gcm93c0NhY2hlW3Jvd107Ci0KLSAgICAg IC8vIFJlbW92ZSBjZWxscyBvdXRzaWRlIHRoZSByYW5nZS4KLSAgICAgIHZh ciBjZWxsc1RvUmVtb3ZlID0gW107Ci0gICAgICBmb3IgKHZhciBpIGluIGNh Y2hlRW50cnkuY2VsbE5vZGVzQnlDb2x1bW5JZHgpIHsKLSAgICAgICAgLy8g SSByZWFsbHkgaGF0ZSBpdCB3aGVuIHBlb3BsZSBtZXNzIHdpdGggQXJyYXku cHJvdG90eXBlLgotICAgICAgICBpZiAoIWNhY2hlRW50cnkuY2VsbE5vZGVz QnlDb2x1bW5JZHguaGFzT3duUHJvcGVydHkoaSkpIHsKLSAgICAgICAgICBj b250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoaXMgaXMgYSBz dHJpbmcsIHNvIGl0IG5lZWRzIHRvIGJlIGNhc3QgYmFjayB0byBhIG51bWJl ci4KLSAgICAgICAgaSA9IGkgfCAwOwotCi0gICAgICAgIHZhciBjb2xzcGFu ID0gY2FjaGVFbnRyeS5jZWxsQ29sU3BhbnNbaV07Ci0gICAgICAgIGlmIChj b2x1bW5Qb3NMZWZ0W2ldID4gcmFuZ2UucmlnaHRQeCB8fAotICAgICAgICAg IGNvbHVtblBvc1JpZ2h0W01hdGgubWluKGNvbHVtbnMubGVuZ3RoIC0gMSwg aSArIGNvbHNwYW4gLSAxKV0gPCByYW5nZS5sZWZ0UHgpIHsKLSAgICAgICAg ICBpZiAoIShyb3cgPT0gYWN0aXZlUm93ICYmIGkgPT0gYWN0aXZlQ2VsbCkp IHsKLSAgICAgICAgICAgIGNlbGxzVG9SZW1vdmUucHVzaChpKTsKLSAgICAg ICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgdmFyIGNlbGxU b1JlbW92ZSwgbm9kZTsKLSAgICAgIHBvc3RQcm9jZXNzZ3JvdXBJZCsrOwot ICAgICAgd2hpbGUgKChjZWxsVG9SZW1vdmUgPSBjZWxsc1RvUmVtb3ZlLnBv cCgpKSAhPSBudWxsKSB7Ci0gICAgICAgIG5vZGUgPSBjYWNoZUVudHJ5LmNl bGxOb2Rlc0J5Q29sdW1uSWR4W2NlbGxUb1JlbW92ZV07Ci0gICAgICAgIGlm IChvcHRpb25zLmVuYWJsZUFzeW5jUG9zdFJlbmRlckNsZWFudXAgJiYgcG9z dFByb2Nlc3NlZFJvd3Nbcm93XSAmJiBwb3N0UHJvY2Vzc2VkUm93c1tyb3dd W2NlbGxUb1JlbW92ZV0pIHsKLSAgICAgICAgICBxdWV1ZVBvc3RQcm9jZXNz ZWRDZWxsRm9yQ2xlYW51cChub2RlLCBjZWxsVG9SZW1vdmUsIHJvdyk7Ci0g ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgY2FjaGVFbnRyeS5yb3dOb2Rl LnJlbW92ZUNoaWxkKG5vZGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVs ZXRlIGNhY2hlRW50cnkuY2VsbENvbFNwYW5zW2NlbGxUb1JlbW92ZV07Ci0g ICAgICAgIGRlbGV0ZSBjYWNoZUVudHJ5LmNlbGxOb2Rlc0J5Q29sdW1uSWR4 W2NlbGxUb1JlbW92ZV07Ci0gICAgICAgIGlmIChwb3N0UHJvY2Vzc2VkUm93 c1tyb3ddKSB7Ci0gICAgICAgICAgZGVsZXRlIHBvc3RQcm9jZXNzZWRSb3dz W3Jvd11bY2VsbFRvUmVtb3ZlXTsKLSAgICAgICAgfQotICAgICAgICB0b3Rh bENlbGxzUmVtb3ZlZCsrOwotICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0 aW9uIGNsZWFuVXBBbmRSZW5kZXJDZWxscyhyYW5nZSkgewotICAgICAgdmFy IGNhY2hlRW50cnk7Ci0gICAgICB2YXIgc3RyaW5nQXJyYXkgPSBbXTsKLSAg ICAgIHZhciBwcm9jZXNzZWRSb3dzID0gW107Ci0gICAgICB2YXIgY2VsbHNB ZGRlZDsKLSAgICAgIHZhciB0b3RhbENlbGxzQWRkZWQgPSAwOwotICAgICAg dmFyIGNvbHNwYW47Ci0KLSAgICAgIGZvciAodmFyIHJvdyA9IHJhbmdlLnRv cCwgYnRtID0gcmFuZ2UuYm90dG9tOyByb3cgPD0gYnRtOyByb3crKykgewot ICAgICAgICBjYWNoZUVudHJ5ID0gcm93c0NhY2hlW3Jvd107Ci0gICAgICAg IGlmICghY2FjaGVFbnRyeSkgewotICAgICAgICAgIGNvbnRpbnVlOwotICAg ICAgICB9Ci0KLSAgICAgICAgLy8gY2VsbFJlbmRlclF1ZXVlIHBvcHVsYXRl ZCBpbiByZW5kZXJSb3dzKCkgbmVlZHMgdG8gYmUgY2xlYXJlZCBmaXJzdAot ICAgICAgICBlbnN1cmVDZWxsTm9kZXNJblJvd3NDYWNoZShyb3cpOwotCi0g ICAgICAgIGNsZWFuVXBDZWxscyhyYW5nZSwgcm93KTsKLQotICAgICAgICAv LyBSZW5kZXIgbWlzc2luZyBjZWxscy4KLSAgICAgICAgY2VsbHNBZGRlZCA9 IDA7Ci0KLSAgICAgICAgdmFyIG1ldGFkYXRhID0gZGF0YS5nZXRJdGVtTWV0 YWRhdGEgJiYgZGF0YS5nZXRJdGVtTWV0YWRhdGEocm93KTsKLSAgICAgICAg bWV0YWRhdGEgPSBtZXRhZGF0YSAmJiBtZXRhZGF0YS5jb2x1bW5zOwotCi0g ICAgICAgIHZhciBkID0gZ2V0RGF0YUl0ZW0ocm93KTsKLQotICAgICAgICAv LyBUT0RPOiAgc2hvcnRlbiB0aGlzIGxvb3AgKGluZGV4PyBoZXVyaXN0aWNz PyBiaW5hcnkgc2VhcmNoPykKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlp ID0gY29sdW1ucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7Ci0gICAgICAgICAg Ly8gQ2VsbHMgdG8gdGhlIHJpZ2h0IGFyZSBvdXRzaWRlIHRoZSByYW5nZS4K LSAgICAgICAgICBpZiAoY29sdW1uUG9zTGVmdFtpXSA+IHJhbmdlLnJpZ2h0 UHgpIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLQotICAg ICAgICAgIC8vIEFscmVhZHkgcmVuZGVyZWQuCi0gICAgICAgICAgaWYgKChj b2xzcGFuID0gY2FjaGVFbnRyeS5jZWxsQ29sU3BhbnNbaV0pICE9IG51bGwp IHsKLSAgICAgICAgICAgIGkgKz0gKGNvbHNwYW4gPiAxID8gY29sc3BhbiAt IDEgOiAwKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgIH0K LQotICAgICAgICAgIGNvbHNwYW4gPSAxOwotICAgICAgICAgIGlmIChtZXRh ZGF0YSkgewotICAgICAgICAgICAgdmFyIGNvbHVtbkRhdGEgPSBtZXRhZGF0 YVtjb2x1bW5zW2ldLmlkXSB8fCBtZXRhZGF0YVtpXTsKLSAgICAgICAgICAg IGNvbHNwYW4gPSAoY29sdW1uRGF0YSAmJiBjb2x1bW5EYXRhLmNvbHNwYW4p IHx8IDE7Ci0gICAgICAgICAgICBpZiAoY29sc3BhbiA9PT0gIioiKSB7Ci0g ICAgICAgICAgICAgIGNvbHNwYW4gPSBpaSAtIGk7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgaWYgKGNvbHVtblBvc1JpZ2h0 W01hdGgubWluKGlpIC0gMSwgaSArIGNvbHNwYW4gLSAxKV0gPiByYW5nZS5s ZWZ0UHgpIHsKLSAgICAgICAgICAgIGFwcGVuZENlbGxIdG1sKHN0cmluZ0Fy cmF5LCByb3csIGksIGNvbHNwYW4sIGQpOwotICAgICAgICAgICAgY2VsbHNB ZGRlZCsrOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGkgKz0gKGNvbHNw YW4gPiAxID8gY29sc3BhbiAtIDEgOiAwKTsKLSAgICAgICAgfQotCi0gICAg ICAgIGlmIChjZWxsc0FkZGVkKSB7Ci0gICAgICAgICAgdG90YWxDZWxsc0Fk ZGVkICs9IGNlbGxzQWRkZWQ7Ci0gICAgICAgICAgcHJvY2Vzc2VkUm93cy5w dXNoKHJvdyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKCFz dHJpbmdBcnJheS5sZW5ndGgpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAg fQotCi0gICAgICB2YXIgeCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp diIpOwotICAgICAgeC5pbm5lckhUTUwgPSBzdHJpbmdBcnJheS5qb2luKCIi KTsKLQotICAgICAgdmFyIHByb2Nlc3NlZFJvdzsKLSAgICAgIHZhciBub2Rl OwotICAgICAgd2hpbGUgKChwcm9jZXNzZWRSb3cgPSBwcm9jZXNzZWRSb3dz LnBvcCgpKSAhPSBudWxsKSB7Ci0gICAgICAgIGNhY2hlRW50cnkgPSByb3dz Q2FjaGVbcHJvY2Vzc2VkUm93XTsKLSAgICAgICAgdmFyIGNvbHVtbklkeDsK LSAgICAgICAgd2hpbGUgKChjb2x1bW5JZHggPSBjYWNoZUVudHJ5LmNlbGxS ZW5kZXJRdWV1ZS5wb3AoKSkgIT0gbnVsbCkgewotICAgICAgICAgIG5vZGUg PSB4Lmxhc3RDaGlsZDsKLSAgICAgICAgICBjYWNoZUVudHJ5LnJvd05vZGUu YXBwZW5kQ2hpbGQobm9kZSk7Ci0gICAgICAgICAgY2FjaGVFbnRyeS5jZWxs Tm9kZXNCeUNvbHVtbklkeFtjb2x1bW5JZHhdID0gbm9kZTsKLSAgICAgICAg fQotICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIHJlbmRlclJvd3Mo cmFuZ2UpIHsKLSAgICAgIHZhciBwYXJlbnROb2RlID0gJGNhbnZhc1swXSwK LSAgICAgICAgICBzdHJpbmdBcnJheSA9IFtdLAotICAgICAgICAgIHJvd3Mg PSBbXSwKLSAgICAgICAgICBuZWVkVG9SZXNlbGVjdENlbGwgPSBmYWxzZSwK LSAgICAgICAgICBkYXRhTGVuZ3RoID0gZ2V0RGF0YUxlbmd0aCgpOwotCi0g ICAgICBmb3IgKHZhciBpID0gcmFuZ2UudG9wLCBpaSA9IHJhbmdlLmJvdHRv bTsgaSA8PSBpaTsgaSsrKSB7Ci0gICAgICAgIGlmIChyb3dzQ2FjaGVbaV0p IHsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBy ZW5kZXJlZFJvd3MrKzsKLSAgICAgICAgcm93cy5wdXNoKGkpOwotCi0gICAg ICAgIC8vIENyZWF0ZSBhbiBlbnRyeSByaWdodCBhd2F5IHNvIHRoYXQgYXBw ZW5kUm93SHRtbCgpIGNhbgotICAgICAgICAvLyBzdGFydCBwb3B1bGF0YXRp bmcgaXQuCi0gICAgICAgIHJvd3NDYWNoZVtpXSA9IHsKLSAgICAgICAgICAi cm93Tm9kZSI6IG51bGwsCi0KLSAgICAgICAgICAvLyBDb2xTcGFucyBvZiBy ZW5kZXJlZCBjZWxscyAoYnkgY29sdW1uIGlkeCkuCi0gICAgICAgICAgLy8g Q2FuIGFsc28gYmUgdXNlZCBmb3IgY2hlY2tpbmcgd2hldGhlciBhIGNlbGwg aGFzIGJlZW4gcmVuZGVyZWQuCi0gICAgICAgICAgImNlbGxDb2xTcGFucyI6 IFtdLAotCi0gICAgICAgICAgLy8gQ2VsbCBub2RlcyAoYnkgY29sdW1uIGlk eCkuICBMYXp5LXBvcHVsYXRlZCBieSBlbnN1cmVDZWxsTm9kZXNJblJvd3ND YWNoZSgpLgotICAgICAgICAgICJjZWxsTm9kZXNCeUNvbHVtbklkeCI6IFtd LAotCi0gICAgICAgICAgLy8gQ29sdW1uIGluZGljZXMgb2YgY2VsbCBub2Rl cyB0aGF0IGhhdmUgYmVlbiByZW5kZXJlZCwgYnV0IG5vdCB5ZXQgaW5kZXhl ZCBpbgotICAgICAgICAgIC8vIGNlbGxOb2Rlc0J5Q29sdW1uSWR4LiAgVGhl c2UgYXJlIGluIHRoZSBzYW1lIG9yZGVyIGFzIGNlbGwgbm9kZXMgYWRkZWQg YXQgdGhlCi0gICAgICAgICAgLy8gZW5kIG9mIHRoZSByb3cuCi0gICAgICAg ICAgImNlbGxSZW5kZXJRdWV1ZSI6IFtdCi0gICAgICAgIH07Ci0KLSAgICAg ICAgYXBwZW5kUm93SHRtbChzdHJpbmdBcnJheSwgaSwgcmFuZ2UsIGRhdGFM ZW5ndGgpOwotICAgICAgICBpZiAoYWN0aXZlQ2VsbE5vZGUgJiYgYWN0aXZl Um93ID09PSBpKSB7Ci0gICAgICAgICAgbmVlZFRvUmVzZWxlY3RDZWxsID0g dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBjb3VudGVyX3Jvd3NfcmVuZGVy ZWQrKzsKLSAgICAgIH0KLQotICAgICAgaWYgKCFyb3dzLmxlbmd0aCkgeyBy ZXR1cm47IH0KLQotICAgICAgdmFyIHggPSBkb2N1bWVudC5jcmVhdGVFbGVt ZW50KCJkaXYiKTsKLSAgICAgIHguaW5uZXJIVE1MID0gc3RyaW5nQXJyYXku am9pbigiIik7Ci0KLSAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHJvd3Mu bGVuZ3RoOyBpIDwgaWk7IGkrKykgewotICAgICAgICByb3dzQ2FjaGVbcm93 c1tpXV0ucm93Tm9kZSA9IHBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoeC5maXJz dENoaWxkKTsKLSAgICAgIH0KLQotICAgICAgaWYgKG5lZWRUb1Jlc2VsZWN0 Q2VsbCkgewotICAgICAgICBhY3RpdmVDZWxsTm9kZSA9IGdldENlbGxOb2Rl KGFjdGl2ZVJvdywgYWN0aXZlQ2VsbCk7Ci0gICAgICB9Ci0gICAgfQotCi0g ICAgZnVuY3Rpb24gc3RhcnRQb3N0UHJvY2Vzc2luZygpIHsKLSAgICAgIGlm ICghb3B0aW9ucy5lbmFibGVBc3luY1Bvc3RSZW5kZXIpIHsKLSAgICAgICAg cmV0dXJuOwotICAgICAgfQotICAgICAgY2xlYXJUaW1lb3V0KGhfcG9zdHJl bmRlcik7Ci0gICAgICBoX3Bvc3RyZW5kZXIgPSBzZXRUaW1lb3V0KGFzeW5j UG9zdFByb2Nlc3NSb3dzLCBvcHRpb25zLmFzeW5jUG9zdFJlbmRlckRlbGF5 KTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBzdGFydFBvc3RQcm9jZXNzaW5n Q2xlYW51cCgpIHsKLSAgICAgIGlmICghb3B0aW9ucy5lbmFibGVBc3luY1Bv c3RSZW5kZXJDbGVhbnVwKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0K LSAgICAgIGNsZWFyVGltZW91dChoX3Bvc3RyZW5kZXJDbGVhbnVwKTsKLSAg ICAgIGhfcG9zdHJlbmRlckNsZWFudXAgPSBzZXRUaW1lb3V0KGFzeW5jUG9z dFByb2Nlc3NDbGVhbnVwUm93cywgb3B0aW9ucy5hc3luY1Bvc3RSZW5kZXJD bGVhbnVwRGVsYXkpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGludmFsaWRh dGVQb3N0UHJvY2Vzc2luZ1Jlc3VsdHMocm93KSB7Ci0gICAgICAvLyBjaGFu Z2Ugc3RhdHVzIG9mIGNvbHVtbnMgdG8gYmUgcmUtcmVuZGVyZWQKLSAgICAg IGZvciAodmFyIGNvbHVtbklkeCBpbiBwb3N0UHJvY2Vzc2VkUm93c1tyb3dd KSB7Ci0gICAgICAgIGlmIChwb3N0UHJvY2Vzc2VkUm93c1tyb3ddLmhhc093 blByb3BlcnR5KGNvbHVtbklkeCkpIHsKLSAgICAgICAgICBwb3N0UHJvY2Vz c2VkUm93c1tyb3ddW2NvbHVtbklkeF0gPSAnQyc7Ci0gICAgICAgIH0KLSAg ICAgIH0KLSAgICAgIHBvc3RQcm9jZXNzRnJvbVJvdyA9IE1hdGgubWluKHBv c3RQcm9jZXNzRnJvbVJvdywgcm93KTsKLSAgICAgIHBvc3RQcm9jZXNzVG9S b3cgPSBNYXRoLm1heChwb3N0UHJvY2Vzc1RvUm93LCByb3cpOwotICAgICAg c3RhcnRQb3N0UHJvY2Vzc2luZygpOwotICAgIH0KLQotICAgIGZ1bmN0aW9u IHVwZGF0ZVJvd1Bvc2l0aW9ucygpIHsKLSAgICAgIGZvciAodmFyIHJvdyBp biByb3dzQ2FjaGUpIHsKLSAgICAgICAgcm93c0NhY2hlW3Jvd10ucm93Tm9k ZS5zdHlsZS50b3AgPSBnZXRSb3dUb3Aocm93KSArICJweCI7Ci0gICAgICB9 Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcmVuZGVyKCkgewotICAgICAgaWYg KCFpbml0aWFsaXplZCkgeyByZXR1cm47IH0KLSAgICAgIHZhciB2aXNpYmxl ID0gZ2V0VmlzaWJsZVJhbmdlKCk7Ci0gICAgICB2YXIgcmVuZGVyZWQgPSBn ZXRSZW5kZXJlZFJhbmdlKCk7Ci0KLSAgICAgIC8vIHJlbW92ZSByb3dzIG5v IGxvbmdlciBpbiB0aGUgdmlld3BvcnQKLSAgICAgIGNsZWFudXBSb3dzKHJl bmRlcmVkKTsKLQotICAgICAgLy8gYWRkIG5ldyByb3dzICYgbWlzc2luZyBj ZWxscyBpbiBleGlzdGluZyByb3dzCi0gICAgICBpZiAobGFzdFJlbmRlcmVk U2Nyb2xsTGVmdCAhPSBzY3JvbGxMZWZ0KSB7Ci0gICAgICAgIGNsZWFuVXBB bmRSZW5kZXJDZWxscyhyZW5kZXJlZCk7Ci0gICAgICB9Ci0KLSAgICAgIC8v IHJlbmRlciBtaXNzaW5nIHJvd3MKLSAgICAgIHJlbmRlclJvd3MocmVuZGVy ZWQpOwotCi0gICAgICBwb3N0UHJvY2Vzc0Zyb21Sb3cgPSB2aXNpYmxlLnRv cDsKLSAgICAgIHBvc3RQcm9jZXNzVG9Sb3cgPSBNYXRoLm1pbihnZXREYXRh TGVuZ3RoSW5jbHVkaW5nQWRkTmV3KCkgLSAxLCB2aXNpYmxlLmJvdHRvbSk7 Ci0gICAgICBzdGFydFBvc3RQcm9jZXNzaW5nKCk7Ci0KLSAgICAgIGxhc3RS ZW5kZXJlZFNjcm9sbFRvcCA9IHNjcm9sbFRvcDsKLSAgICAgIGxhc3RSZW5k ZXJlZFNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0OwotICAgICAgaF9yZW5kZXIg PSBudWxsOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGhhbmRsZUhlYWRlclJv d1Njcm9sbCgpIHsKLSAgICAgIHZhciBzY3JvbGxMZWZ0ID0gJGhlYWRlclJv d1Njcm9sbGVyWzBdLnNjcm9sbExlZnQ7Ci0gICAgICBpZiAoc2Nyb2xsTGVm dCAhPSAkdmlld3BvcnRbMF0uc2Nyb2xsTGVmdCkgewotICAgICAgICAkdmll d3BvcnRbMF0uc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7Ci0gICAgICB9Ci0g ICAgfQotCi0gICAgZnVuY3Rpb24gaGFuZGxlU2Nyb2xsKCkgewotICAgICAg c2Nyb2xsVG9wID0gJHZpZXdwb3J0WzBdLnNjcm9sbFRvcDsKLSAgICAgIHNj cm9sbExlZnQgPSAkdmlld3BvcnRbMF0uc2Nyb2xsTGVmdDsKLSAgICAgIHZh ciB2U2Nyb2xsRGlzdCA9IE1hdGguYWJzKHNjcm9sbFRvcCAtIHByZXZTY3Jv bGxUb3ApOwotICAgICAgdmFyIGhTY3JvbGxEaXN0ID0gTWF0aC5hYnMoc2Ny b2xsTGVmdCAtIHByZXZTY3JvbGxMZWZ0KTsKLQotICAgICAgaWYgKGhTY3Jv bGxEaXN0KSB7Ci0gICAgICAgIHByZXZTY3JvbGxMZWZ0ID0gc2Nyb2xsTGVm dDsKLSAgICAgICAgJGhlYWRlclNjcm9sbGVyWzBdLnNjcm9sbExlZnQgPSBz Y3JvbGxMZWZ0OwotICAgICAgICAkdG9wUGFuZWxTY3JvbGxlclswXS5zY3Jv bGxMZWZ0ID0gc2Nyb2xsTGVmdDsKLSAgICAgICAgJGhlYWRlclJvd1Njcm9s bGVyWzBdLnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0OwotICAgICAgfQotCi0g ICAgICBpZiAodlNjcm9sbERpc3QpIHsKLSAgICAgICAgdlNjcm9sbERpciA9 IHByZXZTY3JvbGxUb3AgPCBzY3JvbGxUb3AgPyAxIDogLTE7Ci0gICAgICAg IHByZXZTY3JvbGxUb3AgPSBzY3JvbGxUb3A7Ci0KLSAgICAgICAgLy8gc3dp dGNoIHZpcnR1YWwgcGFnZXMgaWYgbmVlZGVkCi0gICAgICAgIGlmICh2U2Ny b2xsRGlzdCA8IHZpZXdwb3J0SCkgewotICAgICAgICAgIHNjcm9sbFRvKHNj cm9sbFRvcCArIG9mZnNldCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg ICAgdmFyIG9sZE9mZnNldCA9IG9mZnNldDsKLSAgICAgICAgICBpZiAoaCA9 PSB2aWV3cG9ydEgpIHsKLSAgICAgICAgICAgIHBhZ2UgPSAwOwotICAgICAg ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwYWdlID0gTWF0aC5taW4obiAt IDEsIE1hdGguZmxvb3Ioc2Nyb2xsVG9wICogKCh0aCAtIHZpZXdwb3J0SCkg LyAoaCAtIHZpZXdwb3J0SCkpICogKDEgLyBwaCkpKTsKLSAgICAgICAgICB9 Ci0gICAgICAgICAgb2Zmc2V0ID0gTWF0aC5yb3VuZChwYWdlICogY2opOwot ICAgICAgICAgIGlmIChvbGRPZmZzZXQgIT0gb2Zmc2V0KSB7Ci0gICAgICAg ICAgICBpbnZhbGlkYXRlQWxsUm93cygpOwotICAgICAgICAgIH0KLSAgICAg ICAgfQotICAgICAgfQotCi0gICAgICBpZiAoaFNjcm9sbERpc3QgfHwgdlNj cm9sbERpc3QpIHsKLSAgICAgICAgaWYgKGhfcmVuZGVyKSB7Ci0gICAgICAg ICAgY2xlYXJUaW1lb3V0KGhfcmVuZGVyKTsKLSAgICAgICAgfQotCi0gICAg ICAgIGlmIChNYXRoLmFicyhsYXN0UmVuZGVyZWRTY3JvbGxUb3AgLSBzY3Jv bGxUb3ApID4gMjAgfHwKLSAgICAgICAgICAgIE1hdGguYWJzKGxhc3RSZW5k ZXJlZFNjcm9sbExlZnQgLSBzY3JvbGxMZWZ0KSA+IDIwKSB7Ci0gICAgICAg ICAgaWYgKG9wdGlvbnMuZm9yY2VTeW5jU2Nyb2xsaW5nIHx8ICgKLSAgICAg ICAgICAgICAgTWF0aC5hYnMobGFzdFJlbmRlcmVkU2Nyb2xsVG9wIC0gc2Ny b2xsVG9wKSA8IHZpZXdwb3J0SCAmJgotICAgICAgICAgICAgICBNYXRoLmFi cyhsYXN0UmVuZGVyZWRTY3JvbGxMZWZ0IC0gc2Nyb2xsTGVmdCkgPCB2aWV3 cG9ydFcpKSB7Ci0gICAgICAgICAgICByZW5kZXIoKTsKLSAgICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgaF9yZW5kZXIgPSBzZXRUaW1lb3V0KHJl bmRlciwgNTApOwotICAgICAgICAgIH0KLQotICAgICAgICAgIHRyaWdnZXIo c2VsZi5vblZpZXdwb3J0Q2hhbmdlZCwge2dyaWQ6IHNlbGZ9KTsKLSAgICAg ICAgfQotICAgICAgfQotCi0gICAgICB0cmlnZ2VyKHNlbGYub25TY3JvbGws IHtzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LCBzY3JvbGxUb3A6IHNjcm9sbFRv cCwgZ3JpZDogc2VsZn0pOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGFzeW5j UG9zdFByb2Nlc3NSb3dzKCkgewotICAgICAgdmFyIGRhdGFMZW5ndGggPSBn ZXREYXRhTGVuZ3RoKCk7Ci0gICAgICB3aGlsZSAocG9zdFByb2Nlc3NGcm9t Um93IDw9IHBvc3RQcm9jZXNzVG9Sb3cpIHsKLSAgICAgICAgdmFyIHJvdyA9 ICh2U2Nyb2xsRGlyID49IDApID8gcG9zdFByb2Nlc3NGcm9tUm93KysgOiBw b3N0UHJvY2Vzc1RvUm93LS07Ci0gICAgICAgIHZhciBjYWNoZUVudHJ5ID0g cm93c0NhY2hlW3Jvd107Ci0gICAgICAgIGlmICghY2FjaGVFbnRyeSB8fCBy b3cgPj0gZGF0YUxlbmd0aCkgewotICAgICAgICAgIGNvbnRpbnVlOwotICAg ICAgICB9Ci0KLSAgICAgICAgaWYgKCFwb3N0UHJvY2Vzc2VkUm93c1tyb3dd KSB7Ci0gICAgICAgICAgcG9zdFByb2Nlc3NlZFJvd3Nbcm93XSA9IHt9Owot ICAgICAgICB9Ci0KLSAgICAgICAgZW5zdXJlQ2VsbE5vZGVzSW5Sb3dzQ2Fj aGUocm93KTsKLSAgICAgICAgZm9yICh2YXIgY29sdW1uSWR4IGluIGNhY2hl RW50cnkuY2VsbE5vZGVzQnlDb2x1bW5JZHgpIHsKLSAgICAgICAgICBpZiAo IWNhY2hlRW50cnkuY2VsbE5vZGVzQnlDb2x1bW5JZHguaGFzT3duUHJvcGVy dHkoY29sdW1uSWR4KSkgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAg ICAgICAgfQotCi0gICAgICAgICAgY29sdW1uSWR4ID0gY29sdW1uSWR4IHwg MDsKLQotICAgICAgICAgIHZhciBtID0gY29sdW1uc1tjb2x1bW5JZHhdOwot ICAgICAgICAgIHZhciBwcm9jZXNzZWRTdGF0dXMgPSBwb3N0UHJvY2Vzc2Vk Um93c1tyb3ddW2NvbHVtbklkeF07IC8vIEM9Y2xlYW51cCBhbmQgcmUtcmVu ZGVyLCBSPXJlbmRlcmVkCi0gICAgICAgICAgaWYgKG0uYXN5bmNQb3N0UmVu ZGVyICYmIHByb2Nlc3NlZFN0YXR1cyAhPT0gJ1InKSB7Ci0gICAgICAgICAg ICB2YXIgbm9kZSA9IGNhY2hlRW50cnkuY2VsbE5vZGVzQnlDb2x1bW5JZHhb Y29sdW1uSWR4XTsKLSAgICAgICAgICAgIGlmIChub2RlKSB7Ci0gICAgICAg ICAgICAgIG0uYXN5bmNQb3N0UmVuZGVyKG5vZGUsIHJvdywgZ2V0RGF0YUl0 ZW0ocm93KSwgbSwgKHByb2Nlc3NlZFN0YXR1cyA9PT0gJ0MnKSk7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBwb3N0UHJvY2Vzc2VkUm93c1tyb3dd W2NvbHVtbklkeF0gPSAnUic7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0K LSAgICAgICAgaF9wb3N0cmVuZGVyID0gc2V0VGltZW91dChhc3luY1Bvc3RQ cm9jZXNzUm93cywgb3B0aW9ucy5hc3luY1Bvc3RSZW5kZXJEZWxheSk7Ci0g ICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlv biBhc3luY1Bvc3RQcm9jZXNzQ2xlYW51cFJvd3MoKSB7Ci0gICAgICBpZiAo cG9zdFByb2Nlc3NlZENsZWFudXBRdWV1ZS5sZW5ndGggPiAwKSB7Ci0gICAg ICAgIHZhciBncm91cElkID0gcG9zdFByb2Nlc3NlZENsZWFudXBRdWV1ZVsw XS5ncm91cElkOwotCi0gICAgICAgIC8vIGxvb3AgdGhyb3VnaCBhbGwgcXVl dWUgbWVtYmVycyB3aXRoIHRoaXMgZ3JvdXBJRAotICAgICAgICB3aGlsZSAo cG9zdFByb2Nlc3NlZENsZWFudXBRdWV1ZS5sZW5ndGggPiAwICYmIHBvc3RQ cm9jZXNzZWRDbGVhbnVwUXVldWVbMF0uZ3JvdXBJZCA9PSBncm91cElkKSB7 Ci0gICAgICAgICAgdmFyIGVudHJ5ID0gcG9zdFByb2Nlc3NlZENsZWFudXBR dWV1ZS5zaGlmdCgpOwotICAgICAgICAgIGlmIChlbnRyeS5hY3Rpb25UeXBl ID09ICdSJykgewotICAgICAgICAgICAgJChlbnRyeS5ub2RlKS5yZW1vdmUo KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGVudHJ5LmFjdGlvblR5 cGUgPT0gJ0MnKSB7Ci0gICAgICAgICAgICB2YXIgY29sdW1uID0gY29sdW1u c1tlbnRyeS5jb2x1bW5JZHhdOwotICAgICAgICAgICAgaWYgKGNvbHVtbi5h c3luY1Bvc3RSZW5kZXJDbGVhbnVwICYmIGVudHJ5Lm5vZGUpIHsKLSAgICAg ICAgICAgICAgLy8gY2xlYW51cCBtdXN0IGFsc28gcmVtb3ZlIGVsZW1lbnQK LSAgICAgICAgICAgICAgY29sdW1uLmFzeW5jUG9zdFJlbmRlckNsZWFudXAo ZW50cnkubm9kZSwgZW50cnkucm93SWR4LCBjb2x1bW4pOwotICAgICAgICAg ICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGNh bGwgdGhpcyBmdW5jdGlvbiBhZ2FpbiBhZnRlciB0aGUgc3BlY2lmaWVkIGRl bGF5Ci0gICAgICAgIGhfcG9zdHJlbmRlckNsZWFudXAgPSBzZXRUaW1lb3V0 KGFzeW5jUG9zdFByb2Nlc3NDbGVhbnVwUm93cywgb3B0aW9ucy5hc3luY1Bv c3RSZW5kZXJDbGVhbnVwRGVsYXkpOwotICAgICAgfQotICAgIH0KLQotICAg IGZ1bmN0aW9uIHVwZGF0ZUNlbGxDc3NTdHlsZXNPblJlbmRlcmVkUm93cyhh ZGRlZEhhc2gsIHJlbW92ZWRIYXNoKSB7Ci0gICAgICB2YXIgbm9kZSwgY29s dW1uSWQsIGFkZGVkUm93SGFzaCwgcmVtb3ZlZFJvd0hhc2g7Ci0gICAgICBm b3IgKHZhciByb3cgaW4gcm93c0NhY2hlKSB7Ci0gICAgICAgIHJlbW92ZWRS b3dIYXNoID0gcmVtb3ZlZEhhc2ggJiYgcmVtb3ZlZEhhc2hbcm93XTsKLSAg ICAgICAgYWRkZWRSb3dIYXNoID0gYWRkZWRIYXNoICYmIGFkZGVkSGFzaFty b3ddOwotCi0gICAgICAgIGlmIChyZW1vdmVkUm93SGFzaCkgewotICAgICAg ICAgIGZvciAoY29sdW1uSWQgaW4gcmVtb3ZlZFJvd0hhc2gpIHsKLSAgICAg ICAgICAgIGlmICghYWRkZWRSb3dIYXNoIHx8IHJlbW92ZWRSb3dIYXNoW2Nv bHVtbklkXSAhPSBhZGRlZFJvd0hhc2hbY29sdW1uSWRdKSB7Ci0gICAgICAg ICAgICAgIG5vZGUgPSBnZXRDZWxsTm9kZShyb3csIGdldENvbHVtbkluZGV4 KGNvbHVtbklkKSk7Ci0gICAgICAgICAgICAgIGlmIChub2RlKSB7Ci0gICAg ICAgICAgICAgICAgJChub2RlKS5yZW1vdmVDbGFzcyhyZW1vdmVkUm93SGFz aFtjb2x1bW5JZF0pOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9 Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFkZGVk Um93SGFzaCkgewotICAgICAgICAgIGZvciAoY29sdW1uSWQgaW4gYWRkZWRS b3dIYXNoKSB7Ci0gICAgICAgICAgICBpZiAoIXJlbW92ZWRSb3dIYXNoIHx8 IHJlbW92ZWRSb3dIYXNoW2NvbHVtbklkXSAhPSBhZGRlZFJvd0hhc2hbY29s dW1uSWRdKSB7Ci0gICAgICAgICAgICAgIG5vZGUgPSBnZXRDZWxsTm9kZShy b3csIGdldENvbHVtbkluZGV4KGNvbHVtbklkKSk7Ci0gICAgICAgICAgICAg IGlmIChub2RlKSB7Ci0gICAgICAgICAgICAgICAgJChub2RlKS5hZGRDbGFz cyhhZGRlZFJvd0hhc2hbY29sdW1uSWRdKTsKLSAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg fQotICAgIH0KLQotICAgIGZ1bmN0aW9uIGFkZENlbGxDc3NTdHlsZXMoa2V5 LCBoYXNoKSB7Ci0gICAgICBpZiAoY2VsbENzc0NsYXNzZXNba2V5XSkgewot ICAgICAgICB0aHJvdyAiYWRkQ2VsbENzc1N0eWxlczogY2VsbCBDU1MgaGFz aCB3aXRoIGtleSAnIiArIGtleSArICInIGFscmVhZHkgZXhpc3RzLiI7Ci0g ICAgICB9Ci0KLSAgICAgIGNlbGxDc3NDbGFzc2VzW2tleV0gPSBoYXNoOwot ICAgICAgdXBkYXRlQ2VsbENzc1N0eWxlc09uUmVuZGVyZWRSb3dzKGhhc2gs IG51bGwpOwotCi0gICAgICB0cmlnZ2VyKHNlbGYub25DZWxsQ3NzU3R5bGVz Q2hhbmdlZCwgeyAia2V5Ijoga2V5LCAiaGFzaCI6IGhhc2gsICJncmlkIjog c2VsZiB9KTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiByZW1vdmVDZWxsQ3Nz U3R5bGVzKGtleSkgewotICAgICAgaWYgKCFjZWxsQ3NzQ2xhc3Nlc1trZXld KSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgdXBkYXRl Q2VsbENzc1N0eWxlc09uUmVuZGVyZWRSb3dzKG51bGwsIGNlbGxDc3NDbGFz c2VzW2tleV0pOwotICAgICAgZGVsZXRlIGNlbGxDc3NDbGFzc2VzW2tleV07 Ci0KLSAgICAgIHRyaWdnZXIoc2VsZi5vbkNlbGxDc3NTdHlsZXNDaGFuZ2Vk LCB7ICJrZXkiOiBrZXksICJoYXNoIjogbnVsbCwgImdyaWQiOiBzZWxmIH0p OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHNldENlbGxDc3NTdHlsZXMoa2V5 LCBoYXNoKSB7Ci0gICAgICB2YXIgcHJldkhhc2ggPSBjZWxsQ3NzQ2xhc3Nl c1trZXldOwotCi0gICAgICBjZWxsQ3NzQ2xhc3Nlc1trZXldID0gaGFzaDsK LSAgICAgIHVwZGF0ZUNlbGxDc3NTdHlsZXNPblJlbmRlcmVkUm93cyhoYXNo LCBwcmV2SGFzaCk7Ci0KLSAgICAgIHRyaWdnZXIoc2VsZi5vbkNlbGxDc3NT dHlsZXNDaGFuZ2VkLCB7ICJrZXkiOiBrZXksICJoYXNoIjogaGFzaCwgImdy aWQiOiBzZWxmIH0pOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGdldENlbGxD c3NTdHlsZXMoa2V5KSB7Ci0gICAgICByZXR1cm4gY2VsbENzc0NsYXNzZXNb a2V5XTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBmbGFzaENlbGwocm93LCBj ZWxsLCBzcGVlZCkgewotICAgICAgc3BlZWQgPSBzcGVlZCB8fCAxMDA7Ci0g ICAgICBpZiAocm93c0NhY2hlW3Jvd10pIHsKLSAgICAgICAgdmFyICRjZWxs ID0gJChnZXRDZWxsTm9kZShyb3csIGNlbGwpKTsKLQotICAgICAgICBmdW5j dGlvbiB0b2dnbGVDZWxsQ2xhc3ModGltZXMpIHsKLSAgICAgICAgICBpZiAo IXRpbWVzKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfQot ICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewotICAgICAgICAg ICAgICAgICRjZWxsLnF1ZXVlKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAg ICAgICAgICRjZWxsLnRvZ2dsZUNsYXNzKG9wdGlvbnMuY2VsbEZsYXNoaW5n Q3NzQ2xhc3MpLmRlcXVldWUoKTsKLSAgICAgICAgICAgICAgICAgIHRvZ2ds ZUNlbGxDbGFzcyh0aW1lcyAtIDEpOwotICAgICAgICAgICAgICAgIH0pOwot ICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICBzcGVlZCk7Ci0gICAg ICAgIH0KLQotICAgICAgICB0b2dnbGVDZWxsQ2xhc3MoNCk7Ci0gICAgICB9 Ci0gICAgfQotCi0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLwotICAgIC8vIEludGVyYWN0aXZpdHkKLQot ICAgIGZ1bmN0aW9uIGhhbmRsZU1vdXNlV2hlZWwoZSkgewotICAgICAgdmFy IHJvd05vZGUgPSAkKGUudGFyZ2V0KS5jbG9zZXN0KCIuc3IiKVswXTsKLSAg ICAgIGlmIChyb3dOb2RlICE9IHJvd05vZGVGcm9tTGFzdE1vdXNlV2hlZWxF dmVudCkgewotICAgICAgICBpZiAoem9tYmllUm93Tm9kZUZyb21MYXN0TW91 c2VXaGVlbEV2ZW50ICYmIHpvbWJpZVJvd05vZGVGcm9tTGFzdE1vdXNlV2hl ZWxFdmVudCAhPSByb3dOb2RlKSB7Ci0gICAgICAgICAgaWYgKG9wdGlvbnMu ZW5hYmxlQXN5bmNQb3N0UmVuZGVyQ2xlYW51cCAmJiB6b21iaWVSb3dQb3N0 UHJvY2Vzc2VkRnJvbUxhc3RNb3VzZVdoZWVsRXZlbnQpIHsKLSAgICAgICAg ICAgIHF1ZXVlUG9zdFByb2Nlc3NlZFJvd0ZvckNsZWFudXAoem9tYmllUm93 Q2FjaGVGcm9tTGFzdE1vdXNlV2hlZWxFdmVudCwKLSAgICAgICAgICAgICAg em9tYmllUm93UG9zdFByb2Nlc3NlZEZyb21MYXN0TW91c2VXaGVlbEV2ZW50 KTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgJGNhbnZhc1sw XS5yZW1vdmVDaGlsZCh6b21iaWVSb3dOb2RlRnJvbUxhc3RNb3VzZVdoZWVs RXZlbnQpOwotICAgICAgICAgIH0KLSAgICAgICAgICB6b21iaWVSb3dOb2Rl RnJvbUxhc3RNb3VzZVdoZWVsRXZlbnQgPSBudWxsOwotICAgICAgICAgIHpv bWJpZVJvd0NhY2hlRnJvbUxhc3RNb3VzZVdoZWVsRXZlbnQgPSBudWxsOwot ICAgICAgICAgIHpvbWJpZVJvd1Bvc3RQcm9jZXNzZWRGcm9tTGFzdE1vdXNl V2hlZWxFdmVudCA9IG51bGw7Ci0KLSAgICAgICAgICBpZiAob3B0aW9ucy5l bmFibGVBc3luY1Bvc3RSZW5kZXJDbGVhbnVwKSB7IHN0YXJ0UG9zdFByb2Nl c3NpbmdDbGVhbnVwKCk7IH0KLSAgICAgICAgfQotICAgICAgICByb3dOb2Rl RnJvbUxhc3RNb3VzZVdoZWVsRXZlbnQgPSByb3dOb2RlOwotICAgICAgfQot ICAgIH0KLQotICAgIGZ1bmN0aW9uIGhhbmRsZURyYWdJbml0KGUsIGRkKSB7 Ci0gICAgICB2YXIgY2VsbCA9IGdldENlbGxGcm9tRXZlbnQoZSk7Ci0gICAg ICBpZiAoIWNlbGwgfHwgIWNlbGxFeGlzdHMoY2VsbC5yb3csIGNlbGwuY2Vs bCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotCi0gICAg ICB2YXIgcmV0dmFsID0gdHJpZ2dlcihzZWxmLm9uRHJhZ0luaXQsIGRkLCBl KTsKLSAgICAgIGlmIChlLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVk KCkpIHsKLSAgICAgICAgcmV0dXJuIHJldHZhbDsKLSAgICAgIH0KLQotICAg ICAgLy8gaWYgbm9ib2R5IGNsYWltcyB0byBiZSBoYW5kbGluZyBkcmFnJ24n ZHJvcCBieSBzdG9wcGluZyBpbW1lZGlhdGUgcHJvcGFnYXRpb24sCi0gICAg ICAvLyBjYW5jZWwgb3V0IG9mIGl0Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0g ICAgfQotCi0gICAgZnVuY3Rpb24gaGFuZGxlRHJhZ1N0YXJ0KGUsIGRkKSB7 Ci0gICAgICB2YXIgY2VsbCA9IGdldENlbGxGcm9tRXZlbnQoZSk7Ci0gICAg ICBpZiAoIWNlbGwgfHwgIWNlbGxFeGlzdHMoY2VsbC5yb3csIGNlbGwuY2Vs bCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotCi0gICAg ICB2YXIgcmV0dmFsID0gdHJpZ2dlcihzZWxmLm9uRHJhZ1N0YXJ0LCBkZCwg ZSk7Ci0gICAgICBpZiAoZS5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBl ZCgpKSB7Ci0gICAgICAgIHJldHVybiByZXR2YWw7Ci0gICAgICB9Ci0KLSAg ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBoYW5k bGVEcmFnKGUsIGRkKSB7Ci0gICAgICByZXR1cm4gdHJpZ2dlcihzZWxmLm9u RHJhZywgZGQsIGUpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGhhbmRsZURy YWdFbmQoZSwgZGQpIHsKLSAgICAgIHRyaWdnZXIoc2VsZi5vbkRyYWdFbmQs IGRkLCBlKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBoYW5kbGVLZXlEb3du KGUpIHsKLSAgICAgIHRyaWdnZXIoc2VsZi5vbktleURvd24sIHtyb3c6IGFj dGl2ZVJvdywgY2VsbDogYWN0aXZlQ2VsbCwgZ3JpZDogc2VsZn0sIGUpOwot ICAgICAgdmFyIGhhbmRsZWQgPSBlLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25T dG9wcGVkKCk7Ci0gICAgICB2YXIga2V5Q29kZSA9IFNsaWNrLmtleUNvZGU7 Ci0KLSAgICAgIGlmICghaGFuZGxlZCkgewotICAgICAgICBpZiAoIWUuc2hp ZnRLZXkgJiYgIWUuYWx0S2V5ICYmICFlLmN0cmxLZXkpIHsKLSAgICAgICAg ICBpZiAoZS53aGljaCA9PSBrZXlDb2RlLkVTQ0FQRSkgewotICAgICAgICAg ICAgaWYgKCFnZXRFZGl0b3JMb2NrKCkuaXNBY3RpdmUoKSkgewotICAgICAg ICAgICAgICByZXR1cm47IC8vIG5vIGVkaXRpbmcgbW9kZSB0byBjYW5jZWws IGFsbG93IGJ1YmJsaW5nIGFuZCBkZWZhdWx0IHByb2Nlc3NpbmcgKGV4aXQg d2l0aG91dCBjYW5jZWxsaW5nIHRoZSBldmVudCkKLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIGNhbmNlbEVkaXRBbmRTZXRGb2N1cygpOwotICAgICAg ICAgIH0gZWxzZSBpZiAoZS53aGljaCA9PSBrZXlDb2RlLlBBR0VET1dOKSB7 Ci0gICAgICAgICAgICBuYXZpZ2F0ZVBhZ2VEb3duKCk7Ci0gICAgICAgICAg ICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICB9IGVsc2UgaWYgKGUud2hp Y2ggPT0ga2V5Q29kZS5QQUdFVVApIHsKLSAgICAgICAgICAgIG5hdmlnYXRl UGFnZVVwKCk7Ci0gICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAg ICAgICB9IGVsc2UgaWYgKGUud2hpY2ggPT0ga2V5Q29kZS5MRUZUKSB7Ci0g ICAgICAgICAgICBoYW5kbGVkID0gbmF2aWdhdGVMZWZ0KCk7Ci0gICAgICAg ICAgfSBlbHNlIGlmIChlLndoaWNoID09IGtleUNvZGUuUklHSFQpIHsKLSAg ICAgICAgICAgIGhhbmRsZWQgPSBuYXZpZ2F0ZVJpZ2h0KCk7Ci0gICAgICAg ICAgfSBlbHNlIGlmIChlLndoaWNoID09IGtleUNvZGUuVVApIHsKLSAgICAg ICAgICAgIGhhbmRsZWQgPSBuYXZpZ2F0ZVVwKCk7Ci0gICAgICAgICAgfSBl bHNlIGlmIChlLndoaWNoID09IGtleUNvZGUuRE9XTikgewotICAgICAgICAg ICAgaGFuZGxlZCA9IG5hdmlnYXRlRG93bigpOwotICAgICAgICAgIH0gZWxz ZSBpZiAoZS53aGljaCA9PSBrZXlDb2RlLlRBQikgewotICAgICAgICAgICAg aGFuZGxlZCA9IG5hdmlnYXRlTmV4dCgpOwotICAgICAgICAgIH0gZWxzZSBp ZiAoZS53aGljaCA9PSBrZXlDb2RlLkVOVEVSKSB7Ci0gICAgICAgICAgICBp ZiAob3B0aW9ucy5lZGl0YWJsZSkgewotICAgICAgICAgICAgICBpZiAoY3Vy cmVudEVkaXRvcikgewotICAgICAgICAgICAgICAgIC8vIGFkZGluZyBuZXcg cm93Ci0gICAgICAgICAgICAgICAgaWYgKGFjdGl2ZVJvdyA9PT0gZ2V0RGF0 YUxlbmd0aCgpKSB7Ci0gICAgICAgICAgICAgICAgICBuYXZpZ2F0ZURvd24o KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg ICAgY29tbWl0RWRpdEFuZFNldEZvY3VzKCk7Ci0gICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlm IChnZXRFZGl0b3JMb2NrKCkuY29tbWl0Q3VycmVudEVkaXQoKSkgewotICAg ICAgICAgICAgICAgICAgbWFrZUFjdGl2ZUNlbGxFZGl0YWJsZSgpOwotICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAg fQotICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgfQot ICAgICAgICB9IGVsc2UgaWYgKGUud2hpY2ggPT0ga2V5Q29kZS5UQUIgJiYg ZS5zaGlmdEtleSAmJiAhZS5jdHJsS2V5ICYmICFlLmFsdEtleSkgewotICAg ICAgICAgIGhhbmRsZWQgPSBuYXZpZ2F0ZVByZXYoKTsKLSAgICAgICAgfQot ICAgICAgfQotCi0gICAgICBpZiAoaGFuZGxlZCkgewotICAgICAgICAvLyB0 aGUgZXZlbnQgaGFzIGJlZW4gaGFuZGxlZCBzbyBkb24ndCBsZXQgcGFyZW50 IGVsZW1lbnQgKGJ1YmJsaW5nL3Byb3BhZ2F0aW9uKSBvciBicm93c2VyIChk ZWZhdWx0KSBoYW5kbGUgaXQKLSAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24o KTsKLSAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwotICAgICAgICB0cnkg ewotICAgICAgICAgIGUub3JpZ2luYWxFdmVudC5rZXlDb2RlID0gMDsgLy8g cHJldmVudCBkZWZhdWx0IGJlaGF2aW91ciBmb3Igc3BlY2lhbCBrZXlzIGlu IElFIGJyb3dzZXJzIChGMywgRjUsIGV0Yy4pCi0gICAgICAgIH0KLSAgICAg ICAgLy8gaWdub3JlIGV4Y2VwdGlvbnMgLSBzZXR0aW5nIHRoZSBvcmlnaW5h bCBldmVudCdzIGtleWNvZGUgdGhyb3dzIGFjY2VzcyBkZW5pZWQgZXhjZXB0 aW9uIGZvciAiQ3RybCIKLSAgICAgICAgLy8gKGhpdHRpbmcgY29udHJvbCBr ZXkgb25seSwgbm90aGluZyBlbHNlKSwgIlNoaWZ0IiAobWF5YmUgb3RoZXJz KQotICAgICAgICBjYXRjaCAoZXJyb3IpIHsKLSAgICAgICAgfQotICAgICAg fQotICAgIH0KLQotICAgIGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGUpIHsKLSAg ICAgIGlmICghY3VycmVudEVkaXRvcikgewotICAgICAgICAvLyBpZiB0aGlz IGNsaWNrIHJlc3VsdGVkIGluIHNvbWUgY2VsbCBjaGlsZCBub2RlIGdldHRp bmcgZm9jdXMsCi0gICAgICAgIC8vIGRvbid0IHN0ZWFsIGl0IGJhY2sgLSBr ZXlib2FyZCBldmVudHMgd2lsbCBzdGlsbCBidWJibGUgdXAKLSAgICAgICAg Ly8gSUU5KyBzZWVtcyB0byBkZWZhdWx0IERJVnMgdG8gdGFiSW5kZXg9MCBp bnN0ZWFkIG9mIC0xLCBzbyBjaGVjayBmb3IgY2VsbCBjbGlja3MgZGlyZWN0 bHkuCi0gICAgICAgIGlmIChlLnRhcmdldCAhPSBkb2N1bWVudC5hY3RpdmVF bGVtZW50IHx8ICQoZS50YXJnZXQpLmhhc0NsYXNzKCJzYyIpKSB7Ci0gICAg ICAgICAgc2V0Rm9jdXMoKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAg ICB2YXIgY2VsbCA9IGdldENlbGxGcm9tRXZlbnQoZSk7Ci0gICAgICBpZiAo IWNlbGwgfHwgKGN1cnJlbnRFZGl0b3IgIT09IG51bGwgJiYgYWN0aXZlUm93 ID09IGNlbGwucm93ICYmIGFjdGl2ZUNlbGwgPT0gY2VsbC5jZWxsKSkgewot ICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIHRyaWdnZXIoc2Vs Zi5vbkNsaWNrLCB7cm93OiBjZWxsLnJvdywgY2VsbDogY2VsbC5jZWxsLCBn cmlkOiBzZWxmfSwgZSk7Ci0gICAgICBpZiAoZS5pc0ltbWVkaWF0ZVByb3Bh Z2F0aW9uU3RvcHBlZCgpKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0K LQotICAgICAgaWYgKChhY3RpdmVDZWxsICE9IGNlbGwuY2VsbCB8fCBhY3Rp dmVSb3cgIT0gY2VsbC5yb3cpICYmIGNhbkNlbGxCZUFjdGl2ZShjZWxsLnJv dywgY2VsbC5jZWxsKSkgewotICAgICAgICBpZiAoIWdldEVkaXRvckxvY2so KS5pc0FjdGl2ZSgpIHx8IGdldEVkaXRvckxvY2soKS5jb21taXRDdXJyZW50 RWRpdCgpKSB7Ci0gICAgICAgICAgc2Nyb2xsUm93SW50b1ZpZXcoY2VsbC5y b3csIGZhbHNlKTsKLSAgICAgICAgICBzZXRBY3RpdmVDZWxsSW50ZXJuYWwo Z2V0Q2VsbE5vZGUoY2VsbC5yb3csIGNlbGwuY2VsbCkpOwotICAgICAgICB9 Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gaGFuZGxlQ29udGV4 dE1lbnUoZSkgewotICAgICAgdmFyICRjZWxsID0gJChlLnRhcmdldCkuY2xv c2VzdCgiLnNjIiwgJGNhbnZhcyk7Ci0gICAgICBpZiAoJGNlbGwubGVuZ3Ro ID09PSAwKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAg Ly8gYXJlIHdlIGVkaXRpbmcgdGhpcyBjZWxsPwotICAgICAgaWYgKGFjdGl2 ZUNlbGxOb2RlID09PSAkY2VsbFswXSAmJiBjdXJyZW50RWRpdG9yICE9PSBu dWxsKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgdHJp Z2dlcihzZWxmLm9uQ29udGV4dE1lbnUsIHtncmlkOiBzZWxmfSwgZSk7Ci0g ICAgfQotCi0gICAgZnVuY3Rpb24gaGFuZGxlRGJsQ2xpY2soZSkgewotICAg ICAgdmFyIGNlbGwgPSBnZXRDZWxsRnJvbUV2ZW50KGUpOwotICAgICAgaWYg KCFjZWxsIHx8IChjdXJyZW50RWRpdG9yICE9PSBudWxsICYmIGFjdGl2ZVJv dyA9PSBjZWxsLnJvdyAmJiBhY3RpdmVDZWxsID09IGNlbGwuY2VsbCkpIHsK LSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICB0cmlnZ2VyKHNl bGYub25EYmxDbGljaywge3JvdzogY2VsbC5yb3csIGNlbGw6IGNlbGwuY2Vs bCwgZ3JpZDogc2VsZn0sIGUpOwotICAgICAgaWYgKGUuaXNJbW1lZGlhdGVQ cm9wYWdhdGlvblN0b3BwZWQoKSkgewotICAgICAgICByZXR1cm47Ci0gICAg ICB9Ci0KLSAgICAgIGlmIChvcHRpb25zLmVkaXRhYmxlKSB7Ci0gICAgICAg IGdvdG9DZWxsKGNlbGwucm93LCBjZWxsLmNlbGwsIHRydWUpOwotICAgICAg fQotICAgIH0KLQotICAgIGZ1bmN0aW9uIGhhbmRsZUhlYWRlck1vdXNlRW50 ZXIoZSkgewotICAgICAgdHJpZ2dlcihzZWxmLm9uSGVhZGVyTW91c2VFbnRl ciwgewotICAgICAgICAiY29sdW1uIjogJCh0aGlzKS5kYXRhKCJjb2x1bW4i KSwKLSAgICAgICAgImdyaWQiOiBzZWxmCi0gICAgICB9LCBlKTsKLSAgICB9 Ci0KLSAgICBmdW5jdGlvbiBoYW5kbGVIZWFkZXJNb3VzZUxlYXZlKGUpIHsK LSAgICAgIHRyaWdnZXIoc2VsZi5vbkhlYWRlck1vdXNlTGVhdmUsIHsKLSAg ICAgICAgImNvbHVtbiI6ICQodGhpcykuZGF0YSgiY29sdW1uIiksCi0gICAg ICAgICJncmlkIjogc2VsZgotICAgICAgfSwgZSk7Ci0gICAgfQotCi0gICAg ZnVuY3Rpb24gaGFuZGxlSGVhZGVyQ29udGV4dE1lbnUoZSkgewotICAgICAg dmFyICRoZWFkZXIgPSAkKGUudGFyZ2V0KS5jbG9zZXN0KCIuc2xpY2staGVh ZGVyLWNvbHVtbiIsICIuc2xpY2staGVhZGVyLWNvbHVtbnMiKTsKLSAgICAg IHZhciBjb2x1bW4gPSAkaGVhZGVyICYmICRoZWFkZXIuZGF0YSgiY29sdW1u Iik7Ci0gICAgICB0cmlnZ2VyKHNlbGYub25IZWFkZXJDb250ZXh0TWVudSwg e2NvbHVtbjogY29sdW1uLCBncmlkOiBzZWxmfSwgZSk7Ci0gICAgfQotCi0g ICAgZnVuY3Rpb24gaGFuZGxlSGVhZGVyQ2xpY2soZSkgewotICAgICAgdmFy ICRoZWFkZXIgPSAkKGUudGFyZ2V0KS5jbG9zZXN0KCIuc2xpY2staGVhZGVy LWNvbHVtbiIsICIuc2xpY2staGVhZGVyLWNvbHVtbnMiKTsKLSAgICAgIHZh ciBjb2x1bW4gPSAkaGVhZGVyICYmICRoZWFkZXIuZGF0YSgiY29sdW1uIik7 Ci0gICAgICBpZiAoY29sdW1uKSB7Ci0gICAgICAgIHRyaWdnZXIoc2VsZi5v bkhlYWRlckNsaWNrLCB7Y29sdW1uOiBjb2x1bW4sIGdyaWQ6IHNlbGZ9LCBl KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBoYW5kbGVNb3Vz ZUVudGVyKGUpIHsKLSAgICAgIHRyaWdnZXIoc2VsZi5vbk1vdXNlRW50ZXIs IHtncmlkOiBzZWxmfSwgZSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gaGFu ZGxlTW91c2VMZWF2ZShlKSB7Ci0gICAgICB0cmlnZ2VyKHNlbGYub25Nb3Vz ZUxlYXZlLCB7Z3JpZDogc2VsZn0sIGUpOwotICAgIH0KLQotICAgIGZ1bmN0 aW9uIGNlbGxFeGlzdHMocm93LCBjZWxsKSB7Ci0gICAgICByZXR1cm4gIShy b3cgPCAwIHx8IHJvdyA+PSBnZXREYXRhTGVuZ3RoKCkgfHwgY2VsbCA8IDAg fHwgY2VsbCA+PSBjb2x1bW5zLmxlbmd0aCk7Ci0gICAgfQotCi0gICAgZnVu Y3Rpb24gZ2V0Q2VsbEZyb21Qb2ludCh4LCB5KSB7Ci0gICAgICB2YXIgcm93 ID0gZ2V0Um93RnJvbVBvc2l0aW9uKHkpOwotICAgICAgdmFyIGNlbGwgPSAw OwotCi0gICAgICB2YXIgdyA9IDA7Ci0gICAgICBmb3IgKHZhciBpID0gMDsg aSA8IGNvbHVtbnMubGVuZ3RoICYmIHcgPCB4OyBpKyspIHsKLSAgICAgICAg dyArPSBjb2x1bW5zW2ldLndpZHRoOwotICAgICAgICBjZWxsKys7Ci0gICAg ICB9Ci0KLSAgICAgIGlmIChjZWxsIDwgMCkgewotICAgICAgICBjZWxsID0g MDsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIHtyb3c6IHJvdywgY2VsbDog Y2VsbCAtIDF9OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGdldENlbGxGcm9t Tm9kZShjZWxsTm9kZSkgewotICAgICAgLy8gcmVhZCBjb2x1bW4gbnVtYmVy IGZyb20gLmw8Y29sdW1uTnVtYmVyPiBDU1MgY2xhc3MKLSAgICAgIHZhciBj bHMgPSAvbFxkKy8uZXhlYyhjZWxsTm9kZS5jbGFzc05hbWUpOwotICAgICAg aWYgKCFjbHMpIHsKLSAgICAgICAgdGhyb3cgImdldENlbGxGcm9tTm9kZTog Y2Fubm90IGdldCBjZWxsIC0gIiArIGNlbGxOb2RlLmNsYXNzTmFtZTsKLSAg ICAgIH0KLSAgICAgIHJldHVybiBwYXJzZUludChjbHNbMF0uc3Vic3RyKDEs IGNsc1swXS5sZW5ndGggLSAxKSwgMTApOwotICAgIH0KLQotICAgIGZ1bmN0 aW9uIGdldFJvd0Zyb21Ob2RlKHJvd05vZGUpIHsKLSAgICAgIGZvciAodmFy IHJvdyBpbiByb3dzQ2FjaGUpIHsKLSAgICAgICAgaWYgKHJvd3NDYWNoZVty b3ddLnJvd05vZGUgPT09IHJvd05vZGUpIHsKLSAgICAgICAgICByZXR1cm4g cm93IHwgMDsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICByZXR1cm4g bnVsbDsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBnZXRDZWxsRnJvbUV2ZW50 KGUpIHsKLSAgICAgIHZhciAkY2VsbCA9ICQoZS50YXJnZXQpLmNsb3Nlc3Qo Ii5zYyIsICRjYW52YXMpOwotICAgICAgaWYgKCEkY2VsbC5sZW5ndGgpIHsK LSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIHZhciBy b3cgPSBnZXRSb3dGcm9tTm9kZSgkY2VsbFswXS5wYXJlbnROb2RlKTsKLSAg ICAgIHZhciBjZWxsID0gZ2V0Q2VsbEZyb21Ob2RlKCRjZWxsWzBdKTsKLQot ICAgICAgaWYgKHJvdyA9PSBudWxsIHx8IGNlbGwgPT0gbnVsbCkgewotICAg ICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJl dHVybiB7Ci0gICAgICAgICAgInJvdyI6IHJvdywKLSAgICAgICAgICAiY2Vs bCI6IGNlbGwKLSAgICAgICAgfTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBm dW5jdGlvbiBnZXRDZWxsTm9kZUJveChyb3csIGNlbGwpIHsKLSAgICAgIGlm ICghY2VsbEV4aXN0cyhyb3csIGNlbGwpKSB7Ci0gICAgICAgIHJldHVybiBu dWxsOwotICAgICAgfQotCi0gICAgICB2YXIgeTEgPSBnZXRSb3dUb3Aocm93 KTsKLSAgICAgIHZhciB5MiA9IHkxICsgb3B0aW9ucy5yb3dIZWlnaHQgLSAx OwotICAgICAgdmFyIHgxID0gMDsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBp IDwgY2VsbDsgaSsrKSB7Ci0gICAgICAgIHgxICs9IGNvbHVtbnNbaV0ud2lk dGg7Ci0gICAgICB9Ci0gICAgICB2YXIgeDIgPSB4MSArIGNvbHVtbnNbY2Vs bF0ud2lkdGg7Ci0KLSAgICAgIHJldHVybiB7Ci0gICAgICAgIHRvcDogeTEs Ci0gICAgICAgIGxlZnQ6IHgxLAotICAgICAgICBib3R0b206IHkyLAotICAg ICAgICByaWdodDogeDIKLSAgICAgIH07Ci0gICAgfQotCi0gICAgLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwot ICAgIC8vIENlbGwgc3dpdGNoaW5nCi0KLSAgICBmdW5jdGlvbiByZXNldEFj dGl2ZUNlbGwoKSB7Ci0gICAgICBzZXRBY3RpdmVDZWxsSW50ZXJuYWwobnVs bCwgZmFsc2UpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHNldEZvY3VzKCkg ewotICAgICAgaWYgKHRhYmJpbmdEaXJlY3Rpb24gPT0gLTEpIHsKLSAgICAg ICAgJGZvY3VzU2lua1swXS5mb2N1cygpOwotICAgICAgfSBlbHNlIHsKLSAg ICAgICAgJGZvY3VzU2luazJbMF0uZm9jdXMoKTsKLSAgICAgIH0KLSAgICB9 Ci0KLSAgICBmdW5jdGlvbiBzY3JvbGxDZWxsSW50b1ZpZXcocm93LCBjZWxs LCBkb1BhZ2luZykgewotICAgICAgc2Nyb2xsUm93SW50b1ZpZXcocm93LCBk b1BhZ2luZyk7Ci0KLSAgICAgIHZhciBjb2xzcGFuID0gZ2V0Q29sc3Bhbihy b3csIGNlbGwpOwotICAgICAgdmFyIGxlZnQgPSBjb2x1bW5Qb3NMZWZ0W2Nl bGxdLAotICAgICAgICByaWdodCA9IGNvbHVtblBvc1JpZ2h0W2NlbGwgKyAo Y29sc3BhbiA+IDEgPyBjb2xzcGFuIC0gMSA6IDApXSwKLSAgICAgICAgc2Ny b2xsUmlnaHQgPSBzY3JvbGxMZWZ0ICsgdmlld3BvcnRXOwotCi0gICAgICBp ZiAobGVmdCA8IHNjcm9sbExlZnQpIHsKLSAgICAgICAgJHZpZXdwb3J0LnNj cm9sbExlZnQobGVmdCk7Ci0gICAgICAgIGhhbmRsZVNjcm9sbCgpOwotICAg ICAgICByZW5kZXIoKTsKLSAgICAgIH0gZWxzZSBpZiAocmlnaHQgPiBzY3Jv bGxSaWdodCkgewotICAgICAgICAkdmlld3BvcnQuc2Nyb2xsTGVmdChNYXRo Lm1pbihsZWZ0LCByaWdodCAtICR2aWV3cG9ydFswXS5jbGllbnRXaWR0aCkp OwotICAgICAgICBoYW5kbGVTY3JvbGwoKTsKLSAgICAgICAgcmVuZGVyKCk7 Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2V0QWN0aXZlQ2Vs bEludGVybmFsKG5ld0NlbGwsIG9wdF9lZGl0TW9kZSkgewotICAgICAgaWYg KGFjdGl2ZUNlbGxOb2RlICE9PSBudWxsKSB7Ci0gICAgICAgIG1ha2VBY3Rp dmVDZWxsTm9ybWFsKCk7Ci0gICAgICAgICQoYWN0aXZlQ2VsbE5vZGUpLnJl bW92ZUNsYXNzKCJhY3RpdmUiKTsKLSAgICAgICAgaWYgKHJvd3NDYWNoZVth Y3RpdmVSb3ddKSB7Ci0gICAgICAgICAgJChyb3dzQ2FjaGVbYWN0aXZlUm93 XS5yb3dOb2RlKS5yZW1vdmVDbGFzcygiYWN0aXZlIik7Ci0gICAgICAgIH0K LSAgICAgIH0KLQotICAgICAgdmFyIGFjdGl2ZUNlbGxDaGFuZ2VkID0gKGFj dGl2ZUNlbGxOb2RlICE9PSBuZXdDZWxsKTsKLSAgICAgIGFjdGl2ZUNlbGxO b2RlID0gbmV3Q2VsbDsKLQotICAgICAgaWYgKGFjdGl2ZUNlbGxOb2RlICE9 IG51bGwpIHsKLSAgICAgICAgYWN0aXZlUm93ID0gZ2V0Um93RnJvbU5vZGUo YWN0aXZlQ2VsbE5vZGUucGFyZW50Tm9kZSk7Ci0gICAgICAgIGFjdGl2ZUNl bGwgPSBhY3RpdmVQb3NYID0gZ2V0Q2VsbEZyb21Ob2RlKGFjdGl2ZUNlbGxO b2RlKTsKLQotICAgICAgICBpZiAob3B0X2VkaXRNb2RlID09IG51bGwpIHsK LSAgICAgICAgICBvcHRfZWRpdE1vZGUgPSAoYWN0aXZlUm93ID09IGdldERh dGFMZW5ndGgoKSkgfHwgb3B0aW9ucy5hdXRvRWRpdDsKLSAgICAgICAgfQot Ci0gICAgICAgICQoYWN0aXZlQ2VsbE5vZGUpLmFkZENsYXNzKCJhY3RpdmUi KTsKLSAgICAgICAgJChyb3dzQ2FjaGVbYWN0aXZlUm93XS5yb3dOb2RlKS5h ZGRDbGFzcygiYWN0aXZlIik7Ci0KLSAgICAgICAgaWYgKG9wdGlvbnMuZWRp dGFibGUgJiYgb3B0X2VkaXRNb2RlICYmIGlzQ2VsbFBvdGVudGlhbGx5RWRp dGFibGUoYWN0aXZlUm93LCBhY3RpdmVDZWxsKSkgewotICAgICAgICAgIGNs ZWFyVGltZW91dChoX2VkaXRvckxvYWRlcik7Ci0KLSAgICAgICAgICBpZiAo b3B0aW9ucy5hc3luY0VkaXRvckxvYWRpbmcpIHsKLSAgICAgICAgICAgIGhf ZWRpdG9yTG9hZGVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7Ci0gICAg ICAgICAgICAgIG1ha2VBY3RpdmVDZWxsRWRpdGFibGUoKTsKLSAgICAgICAg ICAgIH0sIG9wdGlvbnMuYXN5bmNFZGl0b3JMb2FkRGVsYXkpOwotICAgICAg ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtYWtlQWN0aXZlQ2VsbEVkaXRh YmxlKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9IGVsc2Ug ewotICAgICAgICBhY3RpdmVSb3cgPSBhY3RpdmVDZWxsID0gbnVsbDsKLSAg ICAgIH0KLQotICAgICAgaWYgKGFjdGl2ZUNlbGxDaGFuZ2VkKSB7Ci0gICAg ICAgIHRyaWdnZXIoc2VsZi5vbkFjdGl2ZUNlbGxDaGFuZ2VkLCBnZXRBY3Rp dmVDZWxsKCkpOwotICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIGNs ZWFyVGV4dFNlbGVjdGlvbigpIHsKLSAgICAgIGlmIChkb2N1bWVudC5zZWxl Y3Rpb24gJiYgZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KSB7Ci0gICAgICAg IHRyeSB7Ci0gICAgICAgICAgLy9JRSBmYWlscyBoZXJlIGlmIHNlbGVjdGVk IGVsZW1lbnQgaXMgbm90IGluIGRvbQotICAgICAgICAgIGRvY3VtZW50LnNl bGVjdGlvbi5lbXB0eSgpOwotICAgICAgICB9IGNhdGNoIChlKSB7IH0KLSAg ICAgIH0gZWxzZSBpZiAod2luZG93LmdldFNlbGVjdGlvbikgewotICAgICAg ICB2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOwotICAgICAgICBp ZiAoc2VsICYmIHNlbC5yZW1vdmVBbGxSYW5nZXMpIHsKLSAgICAgICAgICBz ZWwucmVtb3ZlQWxsUmFuZ2VzKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg ICB9Ci0KLSAgICBmdW5jdGlvbiBpc0NlbGxQb3RlbnRpYWxseUVkaXRhYmxl KHJvdywgY2VsbCkgewotICAgICAgdmFyIGRhdGFMZW5ndGggPSBnZXREYXRh TGVuZ3RoKCk7Ci0gICAgICAvLyBpcyB0aGUgZGF0YSBmb3IgdGhpcyByb3cg bG9hZGVkPwotICAgICAgaWYgKHJvdyA8IGRhdGFMZW5ndGggJiYgIWdldERh dGFJdGVtKHJvdykpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg fQotCi0gICAgICAvLyBhcmUgd2UgaW4gdGhlIEFkZCBOZXcgcm93PyAgY2Fu IHdlIGNyZWF0ZSBuZXcgZnJvbSB0aGlzIGNlbGw/Ci0gICAgICBpZiAoY29s dW1uc1tjZWxsXS5jYW5ub3RUcmlnZ2VySW5zZXJ0ICYmIHJvdyA+PSBkYXRh TGVuZ3RoKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQot ICAgICAgLy8gZG9lcyB0aGlzIGNlbGwgaGF2ZSBhbiBlZGl0b3I/Ci0gICAg ICBpZiAoIWdldEVkaXRvcihyb3csIGNlbGwpKSB7Ci0gICAgICAgIHJldHVy biBmYWxzZTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAg fQotCi0gICAgZnVuY3Rpb24gbWFrZUFjdGl2ZUNlbGxOb3JtYWwoKSB7Ci0g ICAgICBpZiAoIWN1cnJlbnRFZGl0b3IpIHsKLSAgICAgICAgcmV0dXJuOwot ICAgICAgfQotICAgICAgdHJpZ2dlcihzZWxmLm9uQmVmb3JlQ2VsbEVkaXRv ckRlc3Ryb3ksIHtlZGl0b3I6IGN1cnJlbnRFZGl0b3IsIGdyaWQ6IHNlbGZ9 KTsKLSAgICAgIGN1cnJlbnRFZGl0b3IuZGVzdHJveSgpOwotICAgICAgY3Vy cmVudEVkaXRvciA9IG51bGw7Ci0KLSAgICAgIGlmIChhY3RpdmVDZWxsTm9k ZSkgewotICAgICAgICB2YXIgZCA9IGdldERhdGFJdGVtKGFjdGl2ZVJvdyk7 Ci0gICAgICAgICQoYWN0aXZlQ2VsbE5vZGUpLnJlbW92ZUNsYXNzKCJlZGl0 YWJsZSBpbnZhbGlkIik7Ci0gICAgICAgIGlmIChkKSB7Ci0gICAgICAgICAg dmFyIGNvbHVtbiA9IGNvbHVtbnNbYWN0aXZlQ2VsbF07Ci0gICAgICAgICAg dmFyIGZvcm1hdHRlciA9IGdldEZvcm1hdHRlcihhY3RpdmVSb3csIGNvbHVt bik7Ci0gICAgICAgICAgYWN0aXZlQ2VsbE5vZGUuaW5uZXJIVE1MID0gZm9y bWF0dGVyKGFjdGl2ZVJvdywgYWN0aXZlQ2VsbCwgZ2V0RGF0YUl0ZW1WYWx1 ZUZvckNvbHVtbihkLCBjb2x1bW4pLCBjb2x1bW4sIGQsIHNlbGYpOwotICAg ICAgICAgIGludmFsaWRhdGVQb3N0UHJvY2Vzc2luZ1Jlc3VsdHMoYWN0aXZl Um93KTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBpZiB0aGVy ZSBwcmV2aW91c2x5IHdhcyB0ZXh0IHNlbGVjdGVkIG9uIGEgcGFnZSAoc3Vj aCBhcyBzZWxlY3RlZCB0ZXh0IGluIHRoZSBlZGl0IGNlbGwganVzdCByZW1v dmVkKSwKLSAgICAgIC8vIElFIGNhbid0IHNldCBmb2N1cyB0byBhbnl0aGlu ZyBlbHNlIGNvcnJlY3RseQotICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdl bnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvbXNpZS8pKSB7Ci0gICAgICAgIGNs ZWFyVGV4dFNlbGVjdGlvbigpOwotICAgICAgfQotCi0gICAgICBnZXRFZGl0 b3JMb2NrKCkuZGVhY3RpdmF0ZShlZGl0Q29udHJvbGxlcik7Ci0gICAgfQot Ci0gICAgZnVuY3Rpb24gbWFrZUFjdGl2ZUNlbGxFZGl0YWJsZShlZGl0b3Ip IHsKLSAgICAgIGlmICghYWN0aXZlQ2VsbE5vZGUpIHsKLSAgICAgICAgcmV0 dXJuOwotICAgICAgfQotICAgICAgaWYgKCFvcHRpb25zLmVkaXRhYmxlKSB7 Ci0gICAgICAgIHRocm93ICJHcmlkIDogbWFrZUFjdGl2ZUNlbGxFZGl0YWJs ZSA6IHNob3VsZCBuZXZlciBnZXQgY2FsbGVkIHdoZW4gb3B0aW9ucy5lZGl0 YWJsZSBpcyBmYWxzZSI7Ci0gICAgICB9Ci0KLSAgICAgIC8vIGNhbmNlbCBw ZW5kaW5nIGFzeW5jIGNhbGwgaWYgdGhlcmUgaXMgb25lCi0gICAgICBjbGVh clRpbWVvdXQoaF9lZGl0b3JMb2FkZXIpOwotCi0gICAgICBpZiAoIWlzQ2Vs bFBvdGVudGlhbGx5RWRpdGFibGUoYWN0aXZlUm93LCBhY3RpdmVDZWxsKSkg ewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIHZhciBjb2x1 bW5EZWYgPSBjb2x1bW5zW2FjdGl2ZUNlbGxdOwotICAgICAgdmFyIGl0ZW0g PSBnZXREYXRhSXRlbShhY3RpdmVSb3cpOwotCi0gICAgICBpZiAodHJpZ2dl cihzZWxmLm9uQmVmb3JlRWRpdENlbGwsIHtyb3c6IGFjdGl2ZVJvdywgY2Vs bDogYWN0aXZlQ2VsbCwgaXRlbTogaXRlbSwgY29sdW1uOiBjb2x1bW5EZWYs IGdyaWQ6IHNlbGZ9KSA9PT0gZmFsc2UpIHsKLSAgICAgICAgc2V0Rm9jdXMo KTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICBnZXRFZGl0 b3JMb2NrKCkuYWN0aXZhdGUoZWRpdENvbnRyb2xsZXIpOwotICAgICAgJChh Y3RpdmVDZWxsTm9kZSkuYWRkQ2xhc3MoImVkaXRhYmxlIik7Ci0KLQkgIHZh ciB1c2VFZGl0b3IgPSBlZGl0b3IgfHwgZ2V0RWRpdG9yKGFjdGl2ZVJvdywg YWN0aXZlQ2VsbCk7Ci0KLSAgICAgIC8vIGRvbid0IGNsZWFyIHRoZSBjZWxs IGlmIGEgY3VzdG9tIGVkaXRvciBpcyBwYXNzZWQgdGhyb3VnaAotICAgICAg aWYgKCFlZGl0b3IgJiYgIXVzZUVkaXRvci5zdXBwcmVzc0NsZWFyT25FZGl0 KSB7Ci0gICAgICAgIGFjdGl2ZUNlbGxOb2RlLmlubmVySFRNTCA9ICIiOwot ICAgICAgfQotCi0gICAgICBjdXJyZW50RWRpdG9yID0gbmV3IHVzZUVkaXRv cih7Ci0gICAgICAgIGdyaWQ6IHNlbGYsCi0gICAgICAgIGdyaWRQb3NpdGlv bjogYWJzQm94KCRjb250YWluZXJbMF0pLAotICAgICAgICBwb3NpdGlvbjog YWJzQm94KGFjdGl2ZUNlbGxOb2RlKSwKLSAgICAgICAgY29udGFpbmVyOiBh Y3RpdmVDZWxsTm9kZSwKLSAgICAgICAgY29sdW1uOiBjb2x1bW5EZWYsCi0g ICAgICAgIGl0ZW06IGl0ZW0gfHwge30sCi0gICAgICAgIGNvbW1pdENoYW5n ZXM6IGNvbW1pdEVkaXRBbmRTZXRGb2N1cywKLSAgICAgICAgY2FuY2VsQ2hh bmdlczogY2FuY2VsRWRpdEFuZFNldEZvY3VzCi0gICAgICB9KTsKLQotICAg ICAgaWYgKGl0ZW0pIHsKLSAgICAgICAgY3VycmVudEVkaXRvci5sb2FkVmFs dWUoaXRlbSk7Ci0gICAgICB9Ci0KLSAgICAgIHNlcmlhbGl6ZWRFZGl0b3JW YWx1ZSA9IGN1cnJlbnRFZGl0b3Iuc2VyaWFsaXplVmFsdWUoKTsKLQotICAg ICAgaWYgKGN1cnJlbnRFZGl0b3IucG9zaXRpb24pIHsKLSAgICAgICAgaGFu ZGxlQWN0aXZlQ2VsbFBvc2l0aW9uQ2hhbmdlKCk7Ci0gICAgICB9Ci0gICAg fQotCi0gICAgZnVuY3Rpb24gY29tbWl0RWRpdEFuZFNldEZvY3VzKCkgewot ICAgICAgLy8gaWYgdGhlIGNvbW1pdCBmYWlscywgaXQgd291bGQgZG8gc28g ZHVlIHRvIGEgdmFsaWRhdGlvbiBlcnJvcgotICAgICAgLy8gaWYgc28sIGRv IG5vdCBzdGVhbCB0aGUgZm9jdXMgZnJvbSB0aGUgZWRpdG9yCi0gICAgICBp ZiAoZ2V0RWRpdG9yTG9jaygpLmNvbW1pdEN1cnJlbnRFZGl0KCkpIHsKLSAg ICAgICAgc2V0Rm9jdXMoKTsKLSAgICAgICAgaWYgKG9wdGlvbnMuYXV0b0Vk aXQpIHsKLSAgICAgICAgICBuYXZpZ2F0ZURvd24oKTsKLSAgICAgICAgfQot ICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIGNhbmNlbEVkaXRBbmRT ZXRGb2N1cygpIHsKLSAgICAgIGlmIChnZXRFZGl0b3JMb2NrKCkuY2FuY2Vs Q3VycmVudEVkaXQoKSkgewotICAgICAgICBzZXRGb2N1cygpOwotICAgICAg fQotICAgIH0KLQotICAgIGZ1bmN0aW9uIGFic0JveChlbGVtKSB7Ci0gICAg ICB2YXIgYm94ID0gewotICAgICAgICB0b3A6IGVsZW0ub2Zmc2V0VG9wLAot ICAgICAgICBsZWZ0OiBlbGVtLm9mZnNldExlZnQsCi0gICAgICAgIGJvdHRv bTogMCwKLSAgICAgICAgcmlnaHQ6IDAsCi0gICAgICAgIHdpZHRoOiAkKGVs ZW0pLm91dGVyV2lkdGgoKSwKLSAgICAgICAgaGVpZ2h0OiAkKGVsZW0pLm91 dGVySGVpZ2h0KCksCi0gICAgICAgIHZpc2libGU6IHRydWV9OwotICAgICAg Ym94LmJvdHRvbSA9IGJveC50b3AgKyBib3guaGVpZ2h0OwotICAgICAgYm94 LnJpZ2h0ID0gYm94LmxlZnQgKyBib3gud2lkdGg7Ci0KLSAgICAgIC8vIHdh bGsgdXAgdGhlIHRyZWUKLSAgICAgIHZhciBvZmZzZXRQYXJlbnQgPSBlbGVt Lm9mZnNldFBhcmVudDsKLSAgICAgIHdoaWxlICgoZWxlbSA9IGVsZW0ucGFy ZW50Tm9kZSkgIT0gZG9jdW1lbnQuYm9keSkgewotCQlpZiAoZWxlbSA9PSBu dWxsKSBicmVhazsKLQotICAgICAgICBpZiAoYm94LnZpc2libGUgJiYgZWxl bS5zY3JvbGxIZWlnaHQgIT0gZWxlbS5vZmZzZXRIZWlnaHQgJiYgJChlbGVt KS5jc3MoIm92ZXJmbG93WSIpICE9ICJ2aXNpYmxlIikgewotICAgICAgICAg IGJveC52aXNpYmxlID0gYm94LmJvdHRvbSA+IGVsZW0uc2Nyb2xsVG9wICYm IGJveC50b3AgPCBlbGVtLnNjcm9sbFRvcCArIGVsZW0uY2xpZW50SGVpZ2h0 OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGJveC52aXNpYmxlICYmIGVs ZW0uc2Nyb2xsV2lkdGggIT0gZWxlbS5vZmZzZXRXaWR0aCAmJiAkKGVsZW0p LmNzcygib3ZlcmZsb3dYIikgIT0gInZpc2libGUiKSB7Ci0gICAgICAgICAg Ym94LnZpc2libGUgPSBib3gucmlnaHQgPiBlbGVtLnNjcm9sbExlZnQgJiYg Ym94LmxlZnQgPCBlbGVtLnNjcm9sbExlZnQgKyBlbGVtLmNsaWVudFdpZHRo OwotICAgICAgICB9Ci0KLSAgICAgICAgYm94LmxlZnQgLT0gZWxlbS5zY3Jv bGxMZWZ0OwotICAgICAgICBib3gudG9wIC09IGVsZW0uc2Nyb2xsVG9wOwot Ci0gICAgICAgIGlmIChlbGVtID09PSBvZmZzZXRQYXJlbnQpIHsKLSAgICAg ICAgICBib3gubGVmdCArPSBlbGVtLm9mZnNldExlZnQ7Ci0gICAgICAgICAg Ym94LnRvcCArPSBlbGVtLm9mZnNldFRvcDsKLSAgICAgICAgICBvZmZzZXRQ YXJlbnQgPSBlbGVtLm9mZnNldFBhcmVudDsKLSAgICAgICAgfQotCi0gICAg ICAgIGJveC5ib3R0b20gPSBib3gudG9wICsgYm94LmhlaWdodDsKLSAgICAg ICAgYm94LnJpZ2h0ID0gYm94LmxlZnQgKyBib3gud2lkdGg7Ci0gICAgICB9 Ci0KLSAgICAgIHJldHVybiBib3g7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24g Z2V0QWN0aXZlQ2VsbFBvc2l0aW9uKCkgewotICAgICAgcmV0dXJuIGFic0Jv eChhY3RpdmVDZWxsTm9kZSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZ2V0 R3JpZFBvc2l0aW9uKCkgewotICAgICAgcmV0dXJuIGFic0JveCgkY29udGFp bmVyWzBdKQotICAgIH0KLQotICAgIGZ1bmN0aW9uIGhhbmRsZUFjdGl2ZUNl bGxQb3NpdGlvbkNoYW5nZSgpIHsKLSAgICAgIGlmICghYWN0aXZlQ2VsbE5v ZGUpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICB0cmln Z2VyKHNlbGYub25BY3RpdmVDZWxsUG9zaXRpb25DaGFuZ2VkLCB7Z3JpZDog c2VsZn0pOwotCi0gICAgICBpZiAoY3VycmVudEVkaXRvcikgewotICAgICAg ICB2YXIgY2VsbEJveCA9IGdldEFjdGl2ZUNlbGxQb3NpdGlvbigpOwotICAg ICAgICBpZiAoY3VycmVudEVkaXRvci5zaG93ICYmIGN1cnJlbnRFZGl0b3Iu aGlkZSkgewotICAgICAgICAgIGlmICghY2VsbEJveC52aXNpYmxlKSB7Ci0g ICAgICAgICAgICBjdXJyZW50RWRpdG9yLmhpZGUoKTsKLSAgICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgY3VycmVudEVkaXRvci5zaG93KCk7Ci0g ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGN1cnJlbnRF ZGl0b3IucG9zaXRpb24pIHsKLSAgICAgICAgICBjdXJyZW50RWRpdG9yLnBv c2l0aW9uKGNlbGxCb3gpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQot Ci0gICAgZnVuY3Rpb24gZ2V0Q2VsbEVkaXRvcigpIHsKLSAgICAgIHJldHVy biBjdXJyZW50RWRpdG9yOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGdldEFj dGl2ZUNlbGwoKSB7Ci0gICAgICBpZiAoIWFjdGl2ZUNlbGxOb2RlKSB7Ci0g ICAgICAgIHJldHVybiBudWxsOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAg cmV0dXJuIHtyb3c6IGFjdGl2ZVJvdywgY2VsbDogYWN0aXZlQ2VsbCwgZ3Jp ZDogc2VsZn07Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZ2V0 QWN0aXZlQ2VsbE5vZGUoKSB7Ci0gICAgICByZXR1cm4gYWN0aXZlQ2VsbE5v ZGU7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2Nyb2xsUm93SW50b1ZpZXco cm93LCBkb1BhZ2luZykgewotICAgICAgdmFyIHJvd0F0VG9wID0gcm93ICog b3B0aW9ucy5yb3dIZWlnaHQ7Ci0gICAgICB2YXIgcm93QXRCb3R0b20gPSAo cm93ICsgMSkgKiBvcHRpb25zLnJvd0hlaWdodCAtIHZpZXdwb3J0SCArICh2 aWV3cG9ydEhhc0hTY3JvbGwgPyBzY3JvbGxiYXJEaW1lbnNpb25zLmhlaWdo dCA6IDApOwotCi0gICAgICAvLyBuZWVkIHRvIHBhZ2UgZG93bj8KLSAgICAg IGlmICgocm93ICsgMSkgKiBvcHRpb25zLnJvd0hlaWdodCA+IHNjcm9sbFRv cCArIHZpZXdwb3J0SCArIG9mZnNldCkgewotICAgICAgICBzY3JvbGxUbyhk b1BhZ2luZyA/IHJvd0F0VG9wIDogcm93QXRCb3R0b20pOwotICAgICAgICBy ZW5kZXIoKTsKLSAgICAgIH0KLSAgICAgIC8vIG9yIHBhZ2UgdXA/Ci0gICAg ICBlbHNlIGlmIChyb3cgKiBvcHRpb25zLnJvd0hlaWdodCA8IHNjcm9sbFRv cCArIG9mZnNldCkgewotICAgICAgICBzY3JvbGxUbyhkb1BhZ2luZyA/IHJv d0F0Qm90dG9tIDogcm93QXRUb3ApOwotICAgICAgICByZW5kZXIoKTsKLSAg ICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBzY3JvbGxSb3dUb1RvcChy b3cpIHsKLSAgICAgIHNjcm9sbFRvKHJvdyAqIG9wdGlvbnMucm93SGVpZ2h0 KTsKLSAgICAgIHJlbmRlcigpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHNj cm9sbFBhZ2UoZGlyKSB7Ci0gICAgICB2YXIgZGVsdGFSb3dzID0gZGlyICog bnVtVmlzaWJsZVJvd3M7Ci0gICAgICBzY3JvbGxUbygoZ2V0Um93RnJvbVBv c2l0aW9uKHNjcm9sbFRvcCkgKyBkZWx0YVJvd3MpICogb3B0aW9ucy5yb3dI ZWlnaHQpOwotICAgICAgcmVuZGVyKCk7Ci0KLSAgICAgIGlmIChvcHRpb25z LmVuYWJsZUNlbGxOYXZpZ2F0aW9uICYmIGFjdGl2ZVJvdyAhPSBudWxsKSB7 Ci0gICAgICAgIHZhciByb3cgPSBhY3RpdmVSb3cgKyBkZWx0YVJvd3M7Ci0g ICAgICAgIHZhciBkYXRhTGVuZ3RoSW5jbHVkaW5nQWRkTmV3ID0gZ2V0RGF0 YUxlbmd0aEluY2x1ZGluZ0FkZE5ldygpOwotICAgICAgICBpZiAocm93ID49 IGRhdGFMZW5ndGhJbmNsdWRpbmdBZGROZXcpIHsKLSAgICAgICAgICByb3cg PSBkYXRhTGVuZ3RoSW5jbHVkaW5nQWRkTmV3IC0gMTsKLSAgICAgICAgfQot ICAgICAgICBpZiAocm93IDwgMCkgewotICAgICAgICAgIHJvdyA9IDA7Ci0g ICAgICAgIH0KLQotICAgICAgICB2YXIgY2VsbCA9IDAsIHByZXZDZWxsID0g bnVsbDsKLSAgICAgICAgdmFyIHByZXZBY3RpdmVQb3NYID0gYWN0aXZlUG9z WDsKLSAgICAgICAgd2hpbGUgKGNlbGwgPD0gYWN0aXZlUG9zWCkgewotICAg ICAgICAgIGlmIChjYW5DZWxsQmVBY3RpdmUocm93LCBjZWxsKSkgewotICAg ICAgICAgICAgcHJldkNlbGwgPSBjZWxsOwotICAgICAgICAgIH0KLSAgICAg ICAgICBjZWxsICs9IGdldENvbHNwYW4ocm93LCBjZWxsKTsKLSAgICAgICAg fQotCi0gICAgICAgIGlmIChwcmV2Q2VsbCAhPT0gbnVsbCkgewotICAgICAg ICAgIHNldEFjdGl2ZUNlbGxJbnRlcm5hbChnZXRDZWxsTm9kZShyb3csIHBy ZXZDZWxsKSk7Ci0gICAgICAgICAgYWN0aXZlUG9zWCA9IHByZXZBY3RpdmVQ b3NYOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHJlc2V0QWN0aXZl Q2VsbCgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZnVu Y3Rpb24gbmF2aWdhdGVQYWdlRG93bigpIHsKLSAgICAgIHNjcm9sbFBhZ2Uo MSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gbmF2aWdhdGVQYWdlVXAoKSB7 Ci0gICAgICBzY3JvbGxQYWdlKC0xKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlv biBnZXRDb2xzcGFuKHJvdywgY2VsbCkgewotICAgICAgdmFyIG1ldGFkYXRh ID0gZGF0YS5nZXRJdGVtTWV0YWRhdGEgJiYgZGF0YS5nZXRJdGVtTWV0YWRh dGEocm93KTsKLSAgICAgIGlmICghbWV0YWRhdGEgfHwgIW1ldGFkYXRhLmNv bHVtbnMpIHsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgICB9Ci0KLSAgICAg IHZhciBjb2x1bW5EYXRhID0gbWV0YWRhdGEuY29sdW1uc1tjb2x1bW5zW2Nl bGxdLmlkXSB8fCBtZXRhZGF0YS5jb2x1bW5zW2NlbGxdOwotICAgICAgdmFy IGNvbHNwYW4gPSAoY29sdW1uRGF0YSAmJiBjb2x1bW5EYXRhLmNvbHNwYW4p OwotICAgICAgaWYgKGNvbHNwYW4gPT09ICIqIikgewotICAgICAgICBjb2xz cGFuID0gY29sdW1ucy5sZW5ndGggLSBjZWxsOwotICAgICAgfSBlbHNlIHsK LSAgICAgICAgY29sc3BhbiA9IGNvbHNwYW4gfHwgMTsKLSAgICAgIH0KLQot ICAgICAgcmV0dXJuIGNvbHNwYW47Ci0gICAgfQotCi0gICAgZnVuY3Rpb24g ZmluZEZpcnN0Rm9jdXNhYmxlQ2VsbChyb3cpIHsKLSAgICAgIHZhciBjZWxs ID0gMDsKLSAgICAgIHdoaWxlIChjZWxsIDwgY29sdW1ucy5sZW5ndGgpIHsK LSAgICAgICAgaWYgKGNhbkNlbGxCZUFjdGl2ZShyb3csIGNlbGwpKSB7Ci0g ICAgICAgICAgcmV0dXJuIGNlbGw7Ci0gICAgICAgIH0KLSAgICAgICAgY2Vs bCArPSBnZXRDb2xzcGFuKHJvdywgY2VsbCk7Ci0gICAgICB9Ci0gICAgICBy ZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBmaW5kTGFzdEZv Y3VzYWJsZUNlbGwocm93KSB7Ci0gICAgICB2YXIgY2VsbCA9IDA7Ci0gICAg ICB2YXIgbGFzdEZvY3VzYWJsZUNlbGwgPSBudWxsOwotICAgICAgd2hpbGUg KGNlbGwgPCBjb2x1bW5zLmxlbmd0aCkgewotICAgICAgICBpZiAoY2FuQ2Vs bEJlQWN0aXZlKHJvdywgY2VsbCkpIHsKLSAgICAgICAgICBsYXN0Rm9jdXNh YmxlQ2VsbCA9IGNlbGw7Ci0gICAgICAgIH0KLSAgICAgICAgY2VsbCArPSBn ZXRDb2xzcGFuKHJvdywgY2VsbCk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4g bGFzdEZvY3VzYWJsZUNlbGw7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZ290 b1JpZ2h0KHJvdywgY2VsbCwgcG9zWCkgewotICAgICAgaWYgKGNlbGwgPj0g Y29sdW1ucy5sZW5ndGgpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAg ICB9Ci0KLSAgICAgIGRvIHsKLSAgICAgICAgY2VsbCArPSBnZXRDb2xzcGFu KHJvdywgY2VsbCk7Ci0gICAgICB9Ci0gICAgICB3aGlsZSAoY2VsbCA8IGNv bHVtbnMubGVuZ3RoICYmICFjYW5DZWxsQmVBY3RpdmUocm93LCBjZWxsKSk7 Ci0KLSAgICAgIGlmIChjZWxsIDwgY29sdW1ucy5sZW5ndGgpIHsKLSAgICAg ICAgcmV0dXJuIHsKLSAgICAgICAgICAicm93Ijogcm93LAotICAgICAgICAg ICJjZWxsIjogY2VsbCwKLSAgICAgICAgICAicG9zWCI6IGNlbGwKLSAgICAg ICAgfTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQot ICAgIGZ1bmN0aW9uIGdvdG9MZWZ0KHJvdywgY2VsbCwgcG9zWCkgewotICAg ICAgaWYgKGNlbGwgPD0gMCkgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAg ICAgIH0KLQotICAgICAgdmFyIGZpcnN0Rm9jdXNhYmxlQ2VsbCA9IGZpbmRG aXJzdEZvY3VzYWJsZUNlbGwocm93KTsKLSAgICAgIGlmIChmaXJzdEZvY3Vz YWJsZUNlbGwgPT09IG51bGwgfHwgZmlyc3RGb2N1c2FibGVDZWxsID49IGNl bGwpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0KLSAgICAg IHZhciBwcmV2ID0gewotICAgICAgICAicm93Ijogcm93LAotICAgICAgICAi Y2VsbCI6IGZpcnN0Rm9jdXNhYmxlQ2VsbCwKLSAgICAgICAgInBvc1giOiBm aXJzdEZvY3VzYWJsZUNlbGwKLSAgICAgIH07Ci0gICAgICB2YXIgcG9zOwot ICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgcG9zID0gZ290b1JpZ2h0 KHByZXYucm93LCBwcmV2LmNlbGwsIHByZXYucG9zWCk7Ci0gICAgICAgIGlm ICghcG9zKSB7Ci0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0K LSAgICAgICAgaWYgKHBvcy5jZWxsID49IGNlbGwpIHsKLSAgICAgICAgICBy ZXR1cm4gcHJldjsKLSAgICAgICAgfQotICAgICAgICBwcmV2ID0gcG9zOwot ICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIGdvdG9Eb3duKHJvdywg Y2VsbCwgcG9zWCkgewotICAgICAgdmFyIHByZXZDZWxsOwotICAgICAgdmFy IGRhdGFMZW5ndGhJbmNsdWRpbmdBZGROZXcgPSBnZXREYXRhTGVuZ3RoSW5j bHVkaW5nQWRkTmV3KCk7Ci0gICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAg ICBpZiAoKytyb3cgPj0gZGF0YUxlbmd0aEluY2x1ZGluZ0FkZE5ldykgewot ICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAg cHJldkNlbGwgPSBjZWxsID0gMDsKLSAgICAgICAgd2hpbGUgKGNlbGwgPD0g cG9zWCkgewotICAgICAgICAgIHByZXZDZWxsID0gY2VsbDsKLSAgICAgICAg ICBjZWxsICs9IGdldENvbHNwYW4ocm93LCBjZWxsKTsKLSAgICAgICAgfQot Ci0gICAgICAgIGlmIChjYW5DZWxsQmVBY3RpdmUocm93LCBwcmV2Q2VsbCkp IHsKLSAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgInJvdyI6IHJv dywKLSAgICAgICAgICAgICJjZWxsIjogcHJldkNlbGwsCi0gICAgICAgICAg ICAicG9zWCI6IHBvc1gKLSAgICAgICAgICB9OwotICAgICAgICB9Ci0gICAg ICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZ290b1VwKHJvdywgY2VsbCwg cG9zWCkgewotICAgICAgdmFyIHByZXZDZWxsOwotICAgICAgd2hpbGUgKHRy dWUpIHsKLSAgICAgICAgaWYgKC0tcm93IDwgMCkgewotICAgICAgICAgIHJl dHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJldkNlbGwgPSBj ZWxsID0gMDsKLSAgICAgICAgd2hpbGUgKGNlbGwgPD0gcG9zWCkgewotICAg ICAgICAgIHByZXZDZWxsID0gY2VsbDsKLSAgICAgICAgICBjZWxsICs9IGdl dENvbHNwYW4ocm93LCBjZWxsKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm IChjYW5DZWxsQmVBY3RpdmUocm93LCBwcmV2Q2VsbCkpIHsKLSAgICAgICAg ICByZXR1cm4gewotICAgICAgICAgICAgInJvdyI6IHJvdywKLSAgICAgICAg ICAgICJjZWxsIjogcHJldkNlbGwsCi0gICAgICAgICAgICAicG9zWCI6IHBv c1gKLSAgICAgICAgICB9OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQot Ci0gICAgZnVuY3Rpb24gZ290b05leHQocm93LCBjZWxsLCBwb3NYKSB7Ci0g ICAgICBpZiAocm93ID09IG51bGwgJiYgY2VsbCA9PSBudWxsKSB7Ci0gICAg ICAgIHJvdyA9IGNlbGwgPSBwb3NYID0gMDsKLSAgICAgICAgaWYgKGNhbkNl bGxCZUFjdGl2ZShyb3csIGNlbGwpKSB7Ci0gICAgICAgICAgcmV0dXJuIHsK LSAgICAgICAgICAgICJyb3ciOiByb3csCi0gICAgICAgICAgICAiY2VsbCI6 IGNlbGwsCi0gICAgICAgICAgICAicG9zWCI6IGNlbGwKLSAgICAgICAgICB9 OwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHZhciBwb3MgPSBnb3Rv UmlnaHQocm93LCBjZWxsLCBwb3NYKTsKLSAgICAgIGlmIChwb3MpIHsKLSAg ICAgICAgcmV0dXJuIHBvczsKLSAgICAgIH0KLQotICAgICAgdmFyIGZpcnN0 Rm9jdXNhYmxlQ2VsbCA9IG51bGw7Ci0gICAgICB2YXIgZGF0YUxlbmd0aElu Y2x1ZGluZ0FkZE5ldyA9IGdldERhdGFMZW5ndGhJbmNsdWRpbmdBZGROZXco KTsKLSAgICAgIHdoaWxlICgrK3JvdyA8IGRhdGFMZW5ndGhJbmNsdWRpbmdB ZGROZXcpIHsKLSAgICAgICAgZmlyc3RGb2N1c2FibGVDZWxsID0gZmluZEZp cnN0Rm9jdXNhYmxlQ2VsbChyb3cpOwotICAgICAgICBpZiAoZmlyc3RGb2N1 c2FibGVDZWxsICE9PSBudWxsKSB7Ci0gICAgICAgICAgcmV0dXJuIHsKLSAg ICAgICAgICAgICJyb3ciOiByb3csCi0gICAgICAgICAgICAiY2VsbCI6IGZp cnN0Rm9jdXNhYmxlQ2VsbCwKLSAgICAgICAgICAgICJwb3NYIjogZmlyc3RG b2N1c2FibGVDZWxsCi0gICAgICAgICAgfTsKLSAgICAgICAgfQotICAgICAg fQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24g Z290b1ByZXYocm93LCBjZWxsLCBwb3NYKSB7Ci0gICAgICBpZiAocm93ID09 IG51bGwgJiYgY2VsbCA9PSBudWxsKSB7Ci0gICAgICAgIHJvdyA9IGdldERh dGFMZW5ndGhJbmNsdWRpbmdBZGROZXcoKSAtIDE7Ci0gICAgICAgIGNlbGwg PSBwb3NYID0gY29sdW1ucy5sZW5ndGggLSAxOwotICAgICAgICBpZiAoY2Fu Q2VsbEJlQWN0aXZlKHJvdywgY2VsbCkpIHsKLSAgICAgICAgICByZXR1cm4g ewotICAgICAgICAgICAgInJvdyI6IHJvdywKLSAgICAgICAgICAgICJjZWxs IjogY2VsbCwKLSAgICAgICAgICAgICJwb3NYIjogY2VsbAotICAgICAgICAg IH07Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgdmFyIHBvczsKLSAg ICAgIHZhciBsYXN0U2VsZWN0YWJsZUNlbGw7Ci0gICAgICB3aGlsZSAoIXBv cykgewotICAgICAgICBwb3MgPSBnb3RvTGVmdChyb3csIGNlbGwsIHBvc1gp OwotICAgICAgICBpZiAocG9zKSB7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAg ICAgIH0KLSAgICAgICAgaWYgKC0tcm93IDwgMCkgewotICAgICAgICAgIHJl dHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgY2VsbCA9IDA7Ci0g ICAgICAgIGxhc3RTZWxlY3RhYmxlQ2VsbCA9IGZpbmRMYXN0Rm9jdXNhYmxl Q2VsbChyb3cpOwotICAgICAgICBpZiAobGFzdFNlbGVjdGFibGVDZWxsICE9 PSBudWxsKSB7Ci0gICAgICAgICAgcG9zID0gewotICAgICAgICAgICAgInJv dyI6IHJvdywKLSAgICAgICAgICAgICJjZWxsIjogbGFzdFNlbGVjdGFibGVD ZWxsLAotICAgICAgICAgICAgInBvc1giOiBsYXN0U2VsZWN0YWJsZUNlbGwK LSAgICAgICAgICB9OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1 cm4gcG9zOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIG5hdmlnYXRlUmlnaHQo KSB7Ci0gICAgICByZXR1cm4gbmF2aWdhdGUoInJpZ2h0Iik7Ci0gICAgfQot Ci0gICAgZnVuY3Rpb24gbmF2aWdhdGVMZWZ0KCkgewotICAgICAgcmV0dXJu IG5hdmlnYXRlKCJsZWZ0Iik7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gbmF2 aWdhdGVEb3duKCkgewotICAgICAgcmV0dXJuIG5hdmlnYXRlKCJkb3duIik7 Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gbmF2aWdhdGVVcCgpIHsKLSAgICAg IHJldHVybiBuYXZpZ2F0ZSgidXAiKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlv biBuYXZpZ2F0ZU5leHQoKSB7Ci0gICAgICByZXR1cm4gbmF2aWdhdGUoIm5l eHQiKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBuYXZpZ2F0ZVByZXYoKSB7 Ci0gICAgICByZXR1cm4gbmF2aWdhdGUoInByZXYiKTsKLSAgICB9Ci0KLSAg ICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGlyIE5hdmlnYXRpb24g ZGlyZWN0aW9uLgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIg bmF2aWdhdGlvbiByZXN1bHRlZCBpbiBhIGNoYW5nZSBvZiBhY3RpdmUgY2Vs bC4KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBuYXZpZ2F0ZShkaXIpIHsKLSAg ICAgIGlmICghb3B0aW9ucy5lbmFibGVDZWxsTmF2aWdhdGlvbikgewotICAg ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIGlmICghYWN0 aXZlQ2VsbE5vZGUgJiYgZGlyICE9ICJwcmV2IiAmJiBkaXIgIT0gIm5leHQi KSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQotICAgICAg aWYgKCFnZXRFZGl0b3JMb2NrKCkuY29tbWl0Q3VycmVudEVkaXQoKSkgewot ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIHNldEZvY3Vz KCk7Ci0KLSAgICAgIHZhciB0YWJiaW5nRGlyZWN0aW9ucyA9IHsKLSAgICAg ICAgInVwIjogLTEsCi0gICAgICAgICJkb3duIjogMSwKLSAgICAgICAgImxl ZnQiOiAtMSwKLSAgICAgICAgInJpZ2h0IjogMSwKLSAgICAgICAgInByZXYi OiAtMSwKLSAgICAgICAgIm5leHQiOiAxCi0gICAgICB9OwotICAgICAgdGFi YmluZ0RpcmVjdGlvbiA9IHRhYmJpbmdEaXJlY3Rpb25zW2Rpcl07Ci0KLSAg ICAgIHZhciBzdGVwRnVuY3Rpb25zID0gewotICAgICAgICAidXAiOiBnb3Rv VXAsCi0gICAgICAgICJkb3duIjogZ290b0Rvd24sCi0gICAgICAgICJsZWZ0 IjogZ290b0xlZnQsCi0gICAgICAgICJyaWdodCI6IGdvdG9SaWdodCwKLSAg ICAgICAgInByZXYiOiBnb3RvUHJldiwKLSAgICAgICAgIm5leHQiOiBnb3Rv TmV4dAotICAgICAgfTsKLSAgICAgIHZhciBzdGVwRm4gPSBzdGVwRnVuY3Rp b25zW2Rpcl07Ci0gICAgICB2YXIgcG9zID0gc3RlcEZuKGFjdGl2ZVJvdywg YWN0aXZlQ2VsbCwgYWN0aXZlUG9zWCk7Ci0gICAgICBpZiAocG9zKSB7Ci0g ICAgICAgIHZhciBpc0FkZE5ld1JvdyA9IChwb3Mucm93ID09IGdldERhdGFM ZW5ndGgoKSk7Ci0gICAgICAgIHNjcm9sbENlbGxJbnRvVmlldyhwb3Mucm93 LCBwb3MuY2VsbCwgIWlzQWRkTmV3Um93KTsKLSAgICAgICAgc2V0QWN0aXZl Q2VsbEludGVybmFsKGdldENlbGxOb2RlKHBvcy5yb3csIHBvcy5jZWxsKSk7 Ci0gICAgICAgIGFjdGl2ZVBvc1ggPSBwb3MucG9zWDsKLSAgICAgICAgcmV0 dXJuIHRydWU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBzZXRBY3RpdmVD ZWxsSW50ZXJuYWwoZ2V0Q2VsbE5vZGUoYWN0aXZlUm93LCBhY3RpdmVDZWxs KSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0K LSAgICBmdW5jdGlvbiBnZXRDZWxsTm9kZShyb3csIGNlbGwpIHsKLSAgICAg IGlmIChyb3dzQ2FjaGVbcm93XSkgewotICAgICAgICBlbnN1cmVDZWxsTm9k ZXNJblJvd3NDYWNoZShyb3cpOwotICAgICAgICByZXR1cm4gcm93c0NhY2hl W3Jvd10uY2VsbE5vZGVzQnlDb2x1bW5JZHhbY2VsbF07Ci0gICAgICB9Ci0g ICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBzZXRB Y3RpdmVDZWxsKHJvdywgY2VsbCkgewotICAgICAgaWYgKCFpbml0aWFsaXpl ZCkgeyByZXR1cm47IH0KLSAgICAgIGlmIChyb3cgPiBnZXREYXRhTGVuZ3Ro KCkgfHwgcm93IDwgMCB8fCBjZWxsID49IGNvbHVtbnMubGVuZ3RoIHx8IGNl bGwgPCAwKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAg aWYgKCFvcHRpb25zLmVuYWJsZUNlbGxOYXZpZ2F0aW9uKSB7Ci0gICAgICAg IHJldHVybjsKLSAgICAgIH0KLQotICAgICAgc2Nyb2xsQ2VsbEludG9WaWV3 KHJvdywgY2VsbCwgZmFsc2UpOwotICAgICAgc2V0QWN0aXZlQ2VsbEludGVy bmFsKGdldENlbGxOb2RlKHJvdywgY2VsbCksIGZhbHNlKTsKLSAgICB9Ci0K LSAgICBmdW5jdGlvbiBjYW5DZWxsQmVBY3RpdmUocm93LCBjZWxsKSB7Ci0g ICAgICBpZiAoIW9wdGlvbnMuZW5hYmxlQ2VsbE5hdmlnYXRpb24gfHwgcm93 ID49IGdldERhdGFMZW5ndGhJbmNsdWRpbmdBZGROZXcoKSB8fAotICAgICAg ICAgIHJvdyA8IDAgfHwgY2VsbCA+PSBjb2x1bW5zLmxlbmd0aCB8fCBjZWxs IDwgMCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAg ICAgIHZhciByb3dNZXRhZGF0YSA9IGRhdGEuZ2V0SXRlbU1ldGFkYXRhICYm IGRhdGEuZ2V0SXRlbU1ldGFkYXRhKHJvdyk7Ci0gICAgICBpZiAocm93TWV0 YWRhdGEgJiYgdHlwZW9mIHJvd01ldGFkYXRhLmZvY3VzYWJsZSA9PT0gImJv b2xlYW4iKSB7Ci0gICAgICAgIHJldHVybiByb3dNZXRhZGF0YS5mb2N1c2Fi bGU7Ci0gICAgICB9Ci0KLSAgICAgIHZhciBjb2x1bW5NZXRhZGF0YSA9IHJv d01ldGFkYXRhICYmIHJvd01ldGFkYXRhLmNvbHVtbnM7Ci0gICAgICBpZiAo Y29sdW1uTWV0YWRhdGEgJiYgY29sdW1uTWV0YWRhdGFbY29sdW1uc1tjZWxs XS5pZF0gJiYgdHlwZW9mIGNvbHVtbk1ldGFkYXRhW2NvbHVtbnNbY2VsbF0u aWRdLmZvY3VzYWJsZSA9PT0gImJvb2xlYW4iKSB7Ci0gICAgICAgIHJldHVy biBjb2x1bW5NZXRhZGF0YVtjb2x1bW5zW2NlbGxdLmlkXS5mb2N1c2FibGU7 Ci0gICAgICB9Ci0gICAgICBpZiAoY29sdW1uTWV0YWRhdGEgJiYgY29sdW1u TWV0YWRhdGFbY2VsbF0gJiYgdHlwZW9mIGNvbHVtbk1ldGFkYXRhW2NlbGxd LmZvY3VzYWJsZSA9PT0gImJvb2xlYW4iKSB7Ci0gICAgICAgIHJldHVybiBj b2x1bW5NZXRhZGF0YVtjZWxsXS5mb2N1c2FibGU7Ci0gICAgICB9Ci0KLSAg ICAgIHJldHVybiBjb2x1bW5zW2NlbGxdLmZvY3VzYWJsZTsKLSAgICB9Ci0K LSAgICBmdW5jdGlvbiBjYW5DZWxsQmVTZWxlY3RlZChyb3csIGNlbGwpIHsK LSAgICAgIGlmIChyb3cgPj0gZ2V0RGF0YUxlbmd0aCgpIHx8IHJvdyA8IDAg fHwgY2VsbCA+PSBjb2x1bW5zLmxlbmd0aCB8fCBjZWxsIDwgMCkgewotICAg ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIHZhciByb3dN ZXRhZGF0YSA9IGRhdGEuZ2V0SXRlbU1ldGFkYXRhICYmIGRhdGEuZ2V0SXRl bU1ldGFkYXRhKHJvdyk7Ci0gICAgICBpZiAocm93TWV0YWRhdGEgJiYgdHlw ZW9mIHJvd01ldGFkYXRhLnNlbGVjdGFibGUgPT09ICJib29sZWFuIikgewot ICAgICAgICByZXR1cm4gcm93TWV0YWRhdGEuc2VsZWN0YWJsZTsKLSAgICAg IH0KLQotICAgICAgdmFyIGNvbHVtbk1ldGFkYXRhID0gcm93TWV0YWRhdGEg JiYgcm93TWV0YWRhdGEuY29sdW1ucyAmJiAocm93TWV0YWRhdGEuY29sdW1u c1tjb2x1bW5zW2NlbGxdLmlkXSB8fCByb3dNZXRhZGF0YS5jb2x1bW5zW2Nl bGxdKTsKLSAgICAgIGlmIChjb2x1bW5NZXRhZGF0YSAmJiB0eXBlb2YgY29s dW1uTWV0YWRhdGEuc2VsZWN0YWJsZSA9PT0gImJvb2xlYW4iKSB7Ci0gICAg ICAgIHJldHVybiBjb2x1bW5NZXRhZGF0YS5zZWxlY3RhYmxlOwotICAgICAg fQotCi0gICAgICByZXR1cm4gY29sdW1uc1tjZWxsXS5zZWxlY3RhYmxlOwot ICAgIH0KLQotICAgIGZ1bmN0aW9uIGdvdG9DZWxsKHJvdywgY2VsbCwgZm9y Y2VFZGl0KSB7Ci0gICAgICBpZiAoIWluaXRpYWxpemVkKSB7IHJldHVybjsg fQotICAgICAgaWYgKCFjYW5DZWxsQmVBY3RpdmUocm93LCBjZWxsKSkgewot ICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIGlmICghZ2V0RWRp dG9yTG9jaygpLmNvbW1pdEN1cnJlbnRFZGl0KCkpIHsKLSAgICAgICAgcmV0 dXJuOwotICAgICAgfQotCi0gICAgICBzY3JvbGxDZWxsSW50b1ZpZXcocm93 LCBjZWxsLCBmYWxzZSk7Ci0KLSAgICAgIHZhciBuZXdDZWxsID0gZ2V0Q2Vs bE5vZGUocm93LCBjZWxsKTsKLQotICAgICAgLy8gaWYgc2VsZWN0aW5nIHRo ZSAnYWRkIG5ldycgcm93LCBzdGFydCBlZGl0aW5nIHJpZ2h0IGF3YXkKLSAg ICAgIHNldEFjdGl2ZUNlbGxJbnRlcm5hbChuZXdDZWxsLCBmb3JjZUVkaXQg fHwgKHJvdyA9PT0gZ2V0RGF0YUxlbmd0aCgpKSB8fCBvcHRpb25zLmF1dG9F ZGl0KTsKLQotICAgICAgLy8gaWYgbm8gZWRpdG9yIHdhcyBjcmVhdGVkLCBz ZXQgdGhlIGZvY3VzIGJhY2sgb24gdGhlIGdyaWQKLSAgICAgIGlmICghY3Vy cmVudEVkaXRvcikgewotICAgICAgICBzZXRGb2N1cygpOwotICAgICAgfQot ICAgIH0KLQotCi0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLwotICAgIC8vIElFZGl0b3IgaW1wbGVtZW50 YXRpb24gZm9yIHRoZSBlZGl0b3IgbG9jawotCi0gICAgZnVuY3Rpb24gY29t bWl0Q3VycmVudEVkaXQoKSB7Ci0gICAgICB2YXIgaXRlbSA9IGdldERhdGFJ dGVtKGFjdGl2ZVJvdyk7Ci0gICAgICB2YXIgY29sdW1uID0gY29sdW1uc1th Y3RpdmVDZWxsXTsKLQotICAgICAgaWYgKGN1cnJlbnRFZGl0b3IpIHsKLSAg ICAgICAgaWYgKGN1cnJlbnRFZGl0b3IuaXNWYWx1ZUNoYW5nZWQoKSkgewot ICAgICAgICAgIHZhciB2YWxpZGF0aW9uUmVzdWx0cyA9IGN1cnJlbnRFZGl0 b3IudmFsaWRhdGUoKTsKLQotICAgICAgICAgIGlmICh2YWxpZGF0aW9uUmVz dWx0cy52YWxpZCkgewotICAgICAgICAgICAgaWYgKGFjdGl2ZVJvdyA8IGdl dERhdGFMZW5ndGgoKSkgewotICAgICAgICAgICAgICB2YXIgZWRpdENvbW1h bmQgPSB7Ci0gICAgICAgICAgICAgICAgcm93OiBhY3RpdmVSb3csCi0gICAg ICAgICAgICAgICAgY2VsbDogYWN0aXZlQ2VsbCwKLSAgICAgICAgICAgICAg ICBlZGl0b3I6IGN1cnJlbnRFZGl0b3IsCi0gICAgICAgICAgICAgICAgc2Vy aWFsaXplZFZhbHVlOiBjdXJyZW50RWRpdG9yLnNlcmlhbGl6ZVZhbHVlKCks Ci0gICAgICAgICAgICAgICAgcHJldlNlcmlhbGl6ZWRWYWx1ZTogc2VyaWFs aXplZEVkaXRvclZhbHVlLAotICAgICAgICAgICAgICAgIGV4ZWN1dGU6IGZ1 bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLmFw cGx5VmFsdWUoaXRlbSwgdGhpcy5zZXJpYWxpemVkVmFsdWUpOwotICAgICAg ICAgICAgICAgICAgdXBkYXRlUm93KHRoaXMucm93KTsKLSAgICAgICAgICAg ICAgICAgIHRyaWdnZXIoc2VsZi5vbkNlbGxDaGFuZ2UsIHsKLSAgICAgICAg ICAgICAgICAgICAgcm93OiBhY3RpdmVSb3csCi0gICAgICAgICAgICAgICAg ICAgIGNlbGw6IGFjdGl2ZUNlbGwsCi0gICAgICAgICAgICAgICAgICAgIGl0 ZW06IGl0ZW0sCi0gICAgICAgICAgICAgICAgICAgIGdyaWQ6IHNlbGYKLSAg ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0sCi0gICAg ICAgICAgICAgICAgdW5kbzogZnVuY3Rpb24gKCkgewotICAgICAgICAgICAg ICAgICAgdGhpcy5lZGl0b3IuYXBwbHlWYWx1ZShpdGVtLCB0aGlzLnByZXZT ZXJpYWxpemVkVmFsdWUpOwotICAgICAgICAgICAgICAgICAgdXBkYXRlUm93 KHRoaXMucm93KTsKLSAgICAgICAgICAgICAgICAgIHRyaWdnZXIoc2VsZi5v bkNlbGxDaGFuZ2UsIHsKLSAgICAgICAgICAgICAgICAgICAgcm93OiBhY3Rp dmVSb3csCi0gICAgICAgICAgICAgICAgICAgIGNlbGw6IGFjdGl2ZUNlbGws Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW0sCi0gICAgICAgICAg ICAgICAgICAgIGdyaWQ6IHNlbGYKLSAgICAgICAgICAgICAgICAgIH0pOwot ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfTsKLQotICAgICAg ICAgICAgICBpZiAob3B0aW9ucy5lZGl0Q29tbWFuZEhhbmRsZXIpIHsKLSAg ICAgICAgICAgICAgICBtYWtlQWN0aXZlQ2VsbE5vcm1hbCgpOwotICAgICAg ICAgICAgICAgIG9wdGlvbnMuZWRpdENvbW1hbmRIYW5kbGVyKGl0ZW0sIGNv bHVtbiwgZWRpdENvbW1hbmQpOwotICAgICAgICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgICAgIGVkaXRDb21tYW5kLmV4ZWN1dGUoKTsKLSAgICAg ICAgICAgICAgICBtYWtlQWN0aXZlQ2VsbE5vcm1hbCgpOwotICAgICAgICAg ICAgICB9Ci0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg IHZhciBuZXdJdGVtID0ge307Ci0gICAgICAgICAgICAgIGN1cnJlbnRFZGl0 b3IuYXBwbHlWYWx1ZShuZXdJdGVtLCBjdXJyZW50RWRpdG9yLnNlcmlhbGl6 ZVZhbHVlKCkpOwotICAgICAgICAgICAgICBtYWtlQWN0aXZlQ2VsbE5vcm1h bCgpOwotICAgICAgICAgICAgICB0cmlnZ2VyKHNlbGYub25BZGROZXdSb3cs IHtpdGVtOiBuZXdJdGVtLCBjb2x1bW46IGNvbHVtbiwgZ3JpZDogc2VsZn0p OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBjaGVjayB3aGV0 aGVyIHRoZSBsb2NrIGhhcyBiZWVuIHJlLWFjcXVpcmVkIGJ5IGV2ZW50IGhh bmRsZXJzCi0gICAgICAgICAgICByZXR1cm4gIWdldEVkaXRvckxvY2soKS5p c0FjdGl2ZSgpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAv LyBSZS1hZGQgdGhlIENTUyBjbGFzcyB0byB0cmlnZ2VyIHRyYW5zaXRpb25z LCBpZiBhbnkuCi0gICAgICAgICAgICAkKGFjdGl2ZUNlbGxOb2RlKS5yZW1v dmVDbGFzcygiaW52YWxpZCIpOwotICAgICAgICAgICAgJChhY3RpdmVDZWxs Tm9kZSkud2lkdGgoKTsgIC8vIGZvcmNlIGxheW91dAotICAgICAgICAgICAg JChhY3RpdmVDZWxsTm9kZSkuYWRkQ2xhc3MoImludmFsaWQiKTsKLQotICAg ICAgICAgICAgdHJpZ2dlcihzZWxmLm9uVmFsaWRhdGlvbkVycm9yLCB7Ci0g ICAgICAgICAgICAgIGVkaXRvcjogY3VycmVudEVkaXRvciwKLSAgICAgICAg ICAgICAgY2VsbE5vZGU6IGFjdGl2ZUNlbGxOb2RlLAotICAgICAgICAgICAg ICB2YWxpZGF0aW9uUmVzdWx0czogdmFsaWRhdGlvblJlc3VsdHMsCi0gICAg ICAgICAgICAgIHJvdzogYWN0aXZlUm93LAotICAgICAgICAgICAgICBjZWxs OiBhY3RpdmVDZWxsLAotICAgICAgICAgICAgICBjb2x1bW46IGNvbHVtbiwK LSAgICAgICAgICAgICAgZ3JpZDogc2VsZgotICAgICAgICAgICAgfSk7Ci0K LSAgICAgICAgICAgIGN1cnJlbnRFZGl0b3IuZm9jdXMoKTsKLSAgICAgICAg ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQot ICAgICAgICBtYWtlQWN0aXZlQ2VsbE5vcm1hbCgpOwotICAgICAgfQotICAg ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gY2FuY2Vs Q3VycmVudEVkaXQoKSB7Ci0gICAgICBtYWtlQWN0aXZlQ2VsbE5vcm1hbCgp OwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24g cm93c1RvUmFuZ2VzKHJvd3MpIHsKLSAgICAgIHZhciByYW5nZXMgPSBbXTsK LSAgICAgIHZhciBsYXN0Q2VsbCA9IGNvbHVtbnMubGVuZ3RoIC0gMTsKLSAg ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykgewot ICAgICAgICByYW5nZXMucHVzaChuZXcgU2xpY2suUmFuZ2Uocm93c1tpXSwg MCwgcm93c1tpXSwgbGFzdENlbGwpKTsKLSAgICAgIH0KLSAgICAgIHJldHVy biByYW5nZXM7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZ2V0U2VsZWN0ZWRS b3dzKCkgewotICAgICAgaWYgKCFzZWxlY3Rpb25Nb2RlbCkgewotICAgICAg ICB0aHJvdyAiU2VsZWN0aW9uIG1vZGVsIGlzIG5vdCBzZXQiOwotICAgICAg fQotICAgICAgcmV0dXJuIHNlbGVjdGVkUm93czsKLSAgICB9Ci0KLSAgICBm dW5jdGlvbiBzZXRTZWxlY3RlZFJvd3Mocm93cykgewotICAgICAgaWYgKCFz ZWxlY3Rpb25Nb2RlbCkgewotICAgICAgICB0aHJvdyAiU2VsZWN0aW9uIG1v ZGVsIGlzIG5vdCBzZXQiOwotICAgICAgfQotICAgICAgc2VsZWN0aW9uTW9k ZWwuc2V0U2VsZWN0ZWRSYW5nZXMocm93c1RvUmFuZ2VzKHJvd3MpKTsKLSAg ICB9Ci0KLQotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8KLSAgICAvLyBEZWJ1ZwotCi0gICAgdGhpcy5k ZWJ1ZyA9IGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciBzID0gIiI7Ci0KLSAg ICAgIHMgKz0gKCJcbiIgKyAiY291bnRlcl9yb3dzX3JlbmRlcmVkOiAgIiAr IGNvdW50ZXJfcm93c19yZW5kZXJlZCk7Ci0gICAgICBzICs9ICgiXG4iICsg ImNvdW50ZXJfcm93c19yZW1vdmVkOiAgIiArIGNvdW50ZXJfcm93c19yZW1v dmVkKTsKLSAgICAgIHMgKz0gKCJcbiIgKyAicmVuZGVyZWRSb3dzOiAgIiAr IHJlbmRlcmVkUm93cyk7Ci0gICAgICBzICs9ICgiXG4iICsgIm51bVZpc2li bGVSb3dzOiAgIiArIG51bVZpc2libGVSb3dzKTsKLSAgICAgIHMgKz0gKCJc biIgKyAibWF4U3VwcG9ydGVkQ3NzSGVpZ2h0OiAgIiArIG1heFN1cHBvcnRl ZENzc0hlaWdodCk7Ci0gICAgICBzICs9ICgiXG4iICsgIm4odW1iZXIgb2Yg cGFnZXMpOiAgIiArIG4pOwotICAgICAgcyArPSAoIlxuIiArICIoY3VycmVu dCkgcGFnZTogICIgKyBwYWdlKTsKLSAgICAgIHMgKz0gKCJcbiIgKyAicGFn ZSBoZWlnaHQgKHBoKTogICIgKyBwaCk7Ci0gICAgICBzICs9ICgiXG4iICsg InZTY3JvbGxEaXI6ICAiICsgdlNjcm9sbERpcik7Ci0KLSAgICAgIGFsZXJ0 KHMpOwotICAgIH07Ci0KLSAgICAvLyBhIGRlYnVnIGhlbHBlciB0byBiZSBh YmxlIHRvIGFjY2VzcyBwcml2YXRlIG1lbWJlcnMKLSAgICB0aGlzLmV2YWwg PSBmdW5jdGlvbiAoZXhwcikgewotICAgICAgcmV0dXJuIGV2YWwoZXhwcik7 Ci0gICAgfTsKLQotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICAvLyBQdWJsaWMgQVBJCi0KLSAg ICAkLmV4dGVuZCh0aGlzLCB7Ci0gICAgICAic2xpY2tHcmlkVmVyc2lvbiI6 ICIyLjIuNCIsCi0KLSAgICAgIC8vIEV2ZW50cwotICAgICAgIm9uU2Nyb2xs IjogbmV3IFNsaWNrLkV2ZW50KCksCi0gICAgICAib25Tb3J0IjogbmV3IFNs aWNrLkV2ZW50KCksCi0gICAgICAib25IZWFkZXJNb3VzZUVudGVyIjogbmV3 IFNsaWNrLkV2ZW50KCksCi0gICAgICAib25IZWFkZXJNb3VzZUxlYXZlIjog bmV3IFNsaWNrLkV2ZW50KCksCi0gICAgICAib25IZWFkZXJDb250ZXh0TWVu dSI6IG5ldyBTbGljay5FdmVudCgpLAotICAgICAgIm9uSGVhZGVyQ2xpY2si OiBuZXcgU2xpY2suRXZlbnQoKSwKLSAgICAgICJvbkhlYWRlckNlbGxSZW5k ZXJlZCI6IG5ldyBTbGljay5FdmVudCgpLAotICAgICAgIm9uQmVmb3JlSGVh ZGVyQ2VsbERlc3Ryb3kiOiBuZXcgU2xpY2suRXZlbnQoKSwKLSAgICAgICJv bkhlYWRlclJvd0NlbGxSZW5kZXJlZCI6IG5ldyBTbGljay5FdmVudCgpLAot ICAgICAgIm9uQmVmb3JlSGVhZGVyUm93Q2VsbERlc3Ryb3kiOiBuZXcgU2xp Y2suRXZlbnQoKSwKLSAgICAgICJvbk1vdXNlRW50ZXIiOiBuZXcgU2xpY2su RXZlbnQoKSwKLSAgICAgICJvbk1vdXNlTGVhdmUiOiBuZXcgU2xpY2suRXZl bnQoKSwKLSAgICAgICJvbkNsaWNrIjogbmV3IFNsaWNrLkV2ZW50KCksCi0g ICAgICAib25EYmxDbGljayI6IG5ldyBTbGljay5FdmVudCgpLAotICAgICAg Im9uQ29udGV4dE1lbnUiOiBuZXcgU2xpY2suRXZlbnQoKSwKLSAgICAgICJv bktleURvd24iOiBuZXcgU2xpY2suRXZlbnQoKSwKLSAgICAgICJvbkFkZE5l d1JvdyI6IG5ldyBTbGljay5FdmVudCgpLAotICAgICAgIm9uVmFsaWRhdGlv bkVycm9yIjogbmV3IFNsaWNrLkV2ZW50KCksCi0gICAgICAib25WaWV3cG9y dENoYW5nZWQiOiBuZXcgU2xpY2suRXZlbnQoKSwKLSAgICAgICJvbkNvbHVt bnNSZW9yZGVyZWQiOiBuZXcgU2xpY2suRXZlbnQoKSwKLSAgICAgICJvbkNv bHVtbnNSZXNpemVkIjogbmV3IFNsaWNrLkV2ZW50KCksCi0gICAgICAib25D ZWxsQ2hhbmdlIjogbmV3IFNsaWNrLkV2ZW50KCksCi0gICAgICAib25CZWZv cmVFZGl0Q2VsbCI6IG5ldyBTbGljay5FdmVudCgpLAotICAgICAgIm9uQmVm b3JlQ2VsbEVkaXRvckRlc3Ryb3kiOiBuZXcgU2xpY2suRXZlbnQoKSwKLSAg ICAgICJvbkJlZm9yZURlc3Ryb3kiOiBuZXcgU2xpY2suRXZlbnQoKSwKLSAg ICAgICJvbkFjdGl2ZUNlbGxDaGFuZ2VkIjogbmV3IFNsaWNrLkV2ZW50KCks Ci0gICAgICAib25BY3RpdmVDZWxsUG9zaXRpb25DaGFuZ2VkIjogbmV3IFNs aWNrLkV2ZW50KCksCi0gICAgICAib25EcmFnSW5pdCI6IG5ldyBTbGljay5F dmVudCgpLAotICAgICAgIm9uRHJhZ1N0YXJ0IjogbmV3IFNsaWNrLkV2ZW50 KCksCi0gICAgICAib25EcmFnIjogbmV3IFNsaWNrLkV2ZW50KCksCi0gICAg ICAib25EcmFnRW5kIjogbmV3IFNsaWNrLkV2ZW50KCksCi0gICAgICAib25T ZWxlY3RlZFJvd3NDaGFuZ2VkIjogbmV3IFNsaWNrLkV2ZW50KCksCi0gICAg ICAib25DZWxsQ3NzU3R5bGVzQ2hhbmdlZCI6IG5ldyBTbGljay5FdmVudCgp LAotCi0gICAgICAvLyBNZXRob2RzCi0gICAgICAicmVnaXN0ZXJQbHVnaW4i OiByZWdpc3RlclBsdWdpbiwKLSAgICAgICJ1bnJlZ2lzdGVyUGx1Z2luIjog dW5yZWdpc3RlclBsdWdpbiwKLSAgICAgICJnZXRDb2x1bW5zIjogZ2V0Q29s dW1ucywKLSAgICAgICJzZXRDb2x1bW5zIjogc2V0Q29sdW1ucywKLSAgICAg ICJnZXRDb2x1bW5JbmRleCI6IGdldENvbHVtbkluZGV4LAotICAgICAgInVw ZGF0ZUNvbHVtbkhlYWRlciI6IHVwZGF0ZUNvbHVtbkhlYWRlciwKLSAgICAg ICJzZXRTb3J0Q29sdW1uIjogc2V0U29ydENvbHVtbiwKLSAgICAgICJzZXRT b3J0Q29sdW1ucyI6IHNldFNvcnRDb2x1bW5zLAotICAgICAgImdldFNvcnRD b2x1bW5zIjogZ2V0U29ydENvbHVtbnMsCi0gICAgICAiYXV0b3NpemVDb2x1 bW5zIjogYXV0b3NpemVDb2x1bW5zLAotICAgICAgImdldE9wdGlvbnMiOiBn ZXRPcHRpb25zLAotICAgICAgInNldE9wdGlvbnMiOiBzZXRPcHRpb25zLAot ICAgICAgImdldERhdGEiOiBnZXREYXRhLAotICAgICAgImdldERhdGFMZW5n dGgiOiBnZXREYXRhTGVuZ3RoLAotICAgICAgImdldERhdGFJdGVtIjogZ2V0 RGF0YUl0ZW0sCi0gICAgICAic2V0RGF0YSI6IHNldERhdGEsCi0gICAgICAi Z2V0U2VsZWN0aW9uTW9kZWwiOiBnZXRTZWxlY3Rpb25Nb2RlbCwKLSAgICAg ICJzZXRTZWxlY3Rpb25Nb2RlbCI6IHNldFNlbGVjdGlvbk1vZGVsLAotICAg ICAgImdldFNlbGVjdGVkUm93cyI6IGdldFNlbGVjdGVkUm93cywKLSAgICAg ICJzZXRTZWxlY3RlZFJvd3MiOiBzZXRTZWxlY3RlZFJvd3MsCi0gICAgICAi Z2V0Q29udGFpbmVyTm9kZSI6IGdldENvbnRhaW5lck5vZGUsCi0KLSAgICAg ICJyZW5kZXIiOiByZW5kZXIsCi0gICAgICAiaW52YWxpZGF0ZSI6IGludmFs aWRhdGUsCi0gICAgICAiaW52YWxpZGF0ZVJvdyI6IGludmFsaWRhdGVSb3cs Ci0gICAgICAiaW52YWxpZGF0ZVJvd3MiOiBpbnZhbGlkYXRlUm93cywKLSAg ICAgICJpbnZhbGlkYXRlQWxsUm93cyI6IGludmFsaWRhdGVBbGxSb3dzLAot ICAgICAgInVwZGF0ZUNlbGwiOiB1cGRhdGVDZWxsLAotICAgICAgInVwZGF0 ZVJvdyI6IHVwZGF0ZVJvdywKLSAgICAgICJnZXRWaWV3cG9ydCI6IGdldFZp c2libGVSYW5nZSwKLSAgICAgICJnZXRSZW5kZXJlZFJhbmdlIjogZ2V0UmVu ZGVyZWRSYW5nZSwKLSAgICAgICJyZXNpemVDYW52YXMiOiByZXNpemVDYW52 YXMsCi0gICAgICAidXBkYXRlUm93Q291bnQiOiB1cGRhdGVSb3dDb3VudCwK LSAgICAgICJzY3JvbGxSb3dJbnRvVmlldyI6IHNjcm9sbFJvd0ludG9WaWV3 LAotICAgICAgInNjcm9sbFJvd1RvVG9wIjogc2Nyb2xsUm93VG9Ub3AsCi0g ICAgICAic2Nyb2xsQ2VsbEludG9WaWV3Ijogc2Nyb2xsQ2VsbEludG9WaWV3 LAotICAgICAgImdldENhbnZhc05vZGUiOiBnZXRDYW52YXNOb2RlLAotICAg ICAgImZvY3VzIjogc2V0Rm9jdXMsCi0KLSAgICAgICJnZXRDZWxsRnJvbVBv aW50IjogZ2V0Q2VsbEZyb21Qb2ludCwKLSAgICAgICJnZXRDZWxsRnJvbUV2 ZW50IjogZ2V0Q2VsbEZyb21FdmVudCwKLSAgICAgICJnZXRBY3RpdmVDZWxs IjogZ2V0QWN0aXZlQ2VsbCwKLSAgICAgICJzZXRBY3RpdmVDZWxsIjogc2V0 QWN0aXZlQ2VsbCwKLSAgICAgICJnZXRBY3RpdmVDZWxsTm9kZSI6IGdldEFj dGl2ZUNlbGxOb2RlLAotICAgICAgImdldEFjdGl2ZUNlbGxQb3NpdGlvbiI6 IGdldEFjdGl2ZUNlbGxQb3NpdGlvbiwKLSAgICAgICJyZXNldEFjdGl2ZUNl bGwiOiByZXNldEFjdGl2ZUNlbGwsCi0gICAgICAiZWRpdEFjdGl2ZUNlbGwi OiBtYWtlQWN0aXZlQ2VsbEVkaXRhYmxlLAotICAgICAgImdldENlbGxFZGl0 b3IiOiBnZXRDZWxsRWRpdG9yLAotICAgICAgImdldENlbGxOb2RlIjogZ2V0 Q2VsbE5vZGUsCi0gICAgICAiZ2V0Q2VsbE5vZGVCb3giOiBnZXRDZWxsTm9k ZUJveCwKLSAgICAgICJjYW5DZWxsQmVTZWxlY3RlZCI6IGNhbkNlbGxCZVNl bGVjdGVkLAotICAgICAgImNhbkNlbGxCZUFjdGl2ZSI6IGNhbkNlbGxCZUFj dGl2ZSwKLSAgICAgICJuYXZpZ2F0ZVByZXYiOiBuYXZpZ2F0ZVByZXYsCi0g ICAgICAibmF2aWdhdGVOZXh0IjogbmF2aWdhdGVOZXh0LAotICAgICAgIm5h dmlnYXRlVXAiOiBuYXZpZ2F0ZVVwLAotICAgICAgIm5hdmlnYXRlRG93biI6 IG5hdmlnYXRlRG93biwKLSAgICAgICJuYXZpZ2F0ZUxlZnQiOiBuYXZpZ2F0 ZUxlZnQsCi0gICAgICAibmF2aWdhdGVSaWdodCI6IG5hdmlnYXRlUmlnaHQs Ci0gICAgICAibmF2aWdhdGVQYWdlVXAiOiBuYXZpZ2F0ZVBhZ2VVcCwKLSAg ICAgICJuYXZpZ2F0ZVBhZ2VEb3duIjogbmF2aWdhdGVQYWdlRG93biwKLSAg ICAgICJnb3RvQ2VsbCI6IGdvdG9DZWxsLAotICAgICAgImdldFRvcFBhbmVs IjogZ2V0VG9wUGFuZWwsCi0gICAgICAic2V0VG9wUGFuZWxWaXNpYmlsaXR5 Ijogc2V0VG9wUGFuZWxWaXNpYmlsaXR5LAotICAgICAgInNldEhlYWRlclJv d1Zpc2liaWxpdHkiOiBzZXRIZWFkZXJSb3dWaXNpYmlsaXR5LAotICAgICAg ImdldEhlYWRlclJvdyI6IGdldEhlYWRlclJvdywKLSAgICAgICJnZXRIZWFk ZXJSb3dDb2x1bW4iOiBnZXRIZWFkZXJSb3dDb2x1bW4sCi0gICAgICAiZ2V0 R3JpZFBvc2l0aW9uIjogZ2V0R3JpZFBvc2l0aW9uLAotICAgICAgImZsYXNo Q2VsbCI6IGZsYXNoQ2VsbCwKLSAgICAgICJhZGRDZWxsQ3NzU3R5bGVzIjog YWRkQ2VsbENzc1N0eWxlcywKLSAgICAgICJzZXRDZWxsQ3NzU3R5bGVzIjog c2V0Q2VsbENzc1N0eWxlcywKLSAgICAgICJyZW1vdmVDZWxsQ3NzU3R5bGVz IjogcmVtb3ZlQ2VsbENzc1N0eWxlcywKLSAgICAgICJnZXRDZWxsQ3NzU3R5 bGVzIjogZ2V0Q2VsbENzc1N0eWxlcywKLQotICAgICAgImluaXQiOiBmaW5p c2hJbml0aWFsaXphdGlvbiwKLSAgICAgICJkZXN0cm95IjogZGVzdHJveSwK LQotICAgICAgLy8gSUVkaXRvciBpbXBsZW1lbnRhdGlvbgotICAgICAgImdl dEVkaXRvckxvY2siOiBnZXRFZGl0b3JMb2NrLAotICAgICAgImdldEVkaXRD b250cm9sbGVyIjogZ2V0RWRpdENvbnRyb2xsZXIKLSAgICB9KTsKLQotICAg IGluaXQoKTsKLSAgfQotfShqUXVlcnkpKTsKKy8qKg0KKyAqIEBsaWNlbnNl DQorICogKGMpIDIwMDktMjAxNiBNaWNoYWVsIExlaWJtYW4NCisgKiBtaWNo YWVse2RvdH1sZWlibWFue2F0fWdtYWlse2RvdH1jb20NCisgKiBodHRwOi8v Z2l0aHViLmNvbS9tbGVpYm1hbi9zbGlja2dyaWQNCisgKg0KKyAqIERpc3Ry aWJ1dGVkIHVuZGVyIE1JVCBsaWNlbnNlLg0KKyAqIEFsbCByaWdodHMgcmVz ZXJ2ZWQuDQorICoNCisgKiBTbGlja0dyaWQgdjIuMw0KKyAqDQorICogTk9U RVM6DQorICogICAgIENlbGwvcm93IERPTSBtYW5pcHVsYXRpb25zIGFyZSBk b25lIGRpcmVjdGx5IGJ5cGFzc2luZyBqUXVlcnkncyBET00gbWFuaXB1bGF0 aW9uIG1ldGhvZHMuDQorICogICAgIFRoaXMgaW5jcmVhc2VzIHRoZSBzcGVl ZCBkcmFtYXRpY2FsbHksIGJ1dCBjYW4gb25seSBiZSBkb25lIHNhZmVseSBi ZWNhdXNlIHRoZXJlIGFyZSBubyBldmVudCBoYW5kbGVycw0KKyAqICAgICBv ciBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhbnkgY2VsbC9yb3cgRE9NIG5vZGVz LiAgQ2VsbCBlZGl0b3JzIG11c3QgbWFrZSBzdXJlIHRoZXkgaW1wbGVtZW50 IC5kZXN0cm95KCkNCisgKiAgICAgYW5kIGRvIHByb3BlciBjbGVhbnVwLg0K KyAqLw0KKw0KKy8vIG1ha2Ugc3VyZSByZXF1aXJlZCBKYXZhU2NyaXB0IG1v ZHVsZXMgYXJlIGxvYWRlZA0KK2lmICh0eXBlb2YgalF1ZXJ5ID09PSAidW5k ZWZpbmVkIikgew0KKyAgdGhyb3cgbmV3IEVycm9yKCJTbGlja0dyaWQgcmVx dWlyZXMganF1ZXJ5IG1vZHVsZSB0byBiZSBsb2FkZWQiKTsNCit9DQoraWYg KCFqUXVlcnkuZm4uZHJhZykgew0KKyAgdGhyb3cgbmV3IEVycm9yKCJTbGlj a0dyaWQgcmVxdWlyZXMganF1ZXJ5LmV2ZW50LmRyYWcgbW9kdWxlIHRvIGJl IGxvYWRlZCIpOw0KK30NCitpZiAodHlwZW9mIFNsaWNrID09PSAidW5kZWZp bmVkIikgew0KKyAgdGhyb3cgbmV3IEVycm9yKCJzbGljay5jb3JlLmpzIG5v dCBsb2FkZWQiKTsNCit9DQorDQorDQorKGZ1bmN0aW9uICgkKSB7DQorICAv LyBTbGljay5HcmlkDQorICAkLmV4dGVuZCh0cnVlLCB3aW5kb3csIHsNCisg ICAgU2xpY2s6IHsNCisgICAgICBHcmlkOiBTbGlja0dyaWQNCisgICAgfQ0K KyAgfSk7DQorDQorICAvLyBzaGFyZWQgYWNyb3NzIGFsbCBncmlkcyBvbiB0 aGUgcGFnZQ0KKyAgdmFyIHNjcm9sbGJhckRpbWVuc2lvbnM7DQorICB2YXIg bWF4U3VwcG9ydGVkQ3NzSGVpZ2h0OyAgLy8gYnJvd3NlcidzIGJyZWFraW5n IHBvaW50DQorDQorICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vDQorICAvLyBTbGlja0dyaWQgY2xhc3MgaW1w bGVtZW50YXRpb24gKGF2YWlsYWJsZSBhcyBTbGljay5HcmlkKQ0KKw0KKyAg LyoqDQorICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBncmlk Lg0KKyAgICogQGNsYXNzIFNsaWNrR3JpZA0KKyAgICogQGNvbnN0cnVjdG9y DQorICAgKiBAcGFyYW0ge05vZGV9ICAgICAgICAgICAgICBjb250YWluZXIg ICBDb250YWluZXIgbm9kZSB0byBjcmVhdGUgdGhlIGdyaWQgaW4uDQorICAg KiBAcGFyYW0ge0FycmF5LE9iamVjdH0gICAgICBkYXRhICAgICAgICBBbiBh cnJheSBvZiBvYmplY3RzIGZvciBkYXRhYmluZGluZy4NCisgICAqIEBwYXJh bSB7QXJyYXl9ICAgICAgICAgICAgIGNvbHVtbnMgICAgIEFuIGFycmF5IG9m IGNvbHVtbiBkZWZpbml0aW9ucy4NCisgICAqIEBwYXJhbSB7T2JqZWN0fSAg ICAgICAgICAgIG9wdGlvbnMgICAgIEdyaWQgb3B0aW9ucy4NCisgICAqKi8N CisgIGZ1bmN0aW9uIFNsaWNrR3JpZChjb250YWluZXIsIGRhdGEsIGNvbHVt bnMsIG9wdGlvbnMpIHsNCisgICAgLy8gc2V0dGluZ3MNCisgICAgdmFyIGRl ZmF1bHRzID0gew0KKyAgICAgIGV4cGxpY2l0SW5pdGlhbGl6YXRpb246IGZh bHNlLA0KKyAgICAgIHJvd0hlaWdodDogMjUsDQorICAgICAgZGVmYXVsdENv bHVtbldpZHRoOiA4MCwNCisgICAgICBlbmFibGVBZGRSb3c6IGZhbHNlLA0K KyAgICAgIGxlYXZlU3BhY2VGb3JOZXdSb3dzOiBmYWxzZSwNCisgICAgICBl ZGl0YWJsZTogZmFsc2UsDQorICAgICAgYXV0b0VkaXQ6IHRydWUsDQorICAg ICAgZW5hYmxlQ2VsbE5hdmlnYXRpb246IHRydWUsDQorICAgICAgZW5hYmxl Q29sdW1uUmVvcmRlcjogdHJ1ZSwNCisgICAgICBhc3luY0VkaXRvckxvYWRp bmc6IGZhbHNlLA0KKyAgICAgIGFzeW5jRWRpdG9yTG9hZERlbGF5OiAxMDAs DQorICAgICAgZm9yY2VGaXRDb2x1bW5zOiBmYWxzZSwNCisgICAgICBlbmFi bGVBc3luY1Bvc3RSZW5kZXI6IGZhbHNlLA0KKyAgICAgIGFzeW5jUG9zdFJl bmRlckRlbGF5OiA1MCwNCisgICAgICBlbmFibGVBc3luY1Bvc3RSZW5kZXJD bGVhbnVwOiBmYWxzZSwNCisgICAgICBhc3luY1Bvc3RSZW5kZXJDbGVhbnVw RGVsYXk6IDQwLA0KKyAgICAgIGF1dG9IZWlnaHQ6IGZhbHNlLA0KKyAgICAg IGVkaXRvckxvY2s6IFNsaWNrLkdsb2JhbEVkaXRvckxvY2ssDQorICAgICAg c2hvd0hlYWRlclJvdzogZmFsc2UsDQorICAgICAgaGVhZGVyUm93SGVpZ2h0 OiAyNSwNCisgICAgICBjcmVhdGVGb290ZXJSb3c6IGZhbHNlLA0KKyAgICAg IHNob3dGb290ZXJSb3c6IGZhbHNlLA0KKyAgICAgIGZvb3RlclJvd0hlaWdo dDogMjUsDQorICAgICAgc2hvd1RvcFBhbmVsOiBmYWxzZSwNCisgICAgICB0 b3BQYW5lbEhlaWdodDogMjUsDQorICAgICAgZm9ybWF0dGVyRmFjdG9yeTog bnVsbCwNCisgICAgICBlZGl0b3JGYWN0b3J5OiBudWxsLA0KKyAgICAgIGNl bGxGbGFzaGluZ0Nzc0NsYXNzOiAiZmxhc2hpbmciLA0KKyAgICAgIHNlbGVj dGVkQ2VsbENzc0NsYXNzOiAic2VsZWN0ZWQiLA0KKyAgICAgIG11bHRpU2Vs ZWN0OiB0cnVlLA0KKyAgICAgIGVuYWJsZVRleHRTZWxlY3Rpb25PbkNlbGxz OiBmYWxzZSwNCisgICAgICBkYXRhSXRlbUNvbHVtblZhbHVlRXh0cmFjdG9y OiBudWxsLA0KKyAgICAgIGZ1bGxXaWR0aFJvd3M6IGZhbHNlLA0KKyAgICAg IG11bHRpQ29sdW1uU29ydDogZmFsc2UsDQorICAgICAgbnVtYmVyZWRNdWx0 aUNvbHVtblNvcnQ6IGZhbHNlLA0KKyAgICAgIHRyaXN0YXRlTXVsdGlDb2x1 bW5Tb3J0OiBmYWxzZSwNCisgICAgICBkZWZhdWx0Rm9ybWF0dGVyOiBkZWZh dWx0Rm9ybWF0dGVyLA0KKyAgICAgIGZvcmNlU3luY1Njcm9sbGluZzogZmFs c2UsDQorICAgICAgYWRkTmV3Um93Q3NzQ2xhc3M6ICJuZXctcm93IiwNCisg ICAgICBwcmVzZXJ2ZUNvcGllZFNlbGVjdGlvbk9uUGFzdGU6IGZhbHNlDQor ICAgIH07DQorDQorICAgIHZhciBjb2x1bW5EZWZhdWx0cyA9IHsNCisgICAg ICBuYW1lOiAiIiwNCisgICAgICByZXNpemFibGU6IHRydWUsDQorICAgICAg c29ydGFibGU6IGZhbHNlLA0KKyAgICAgIG1pbldpZHRoOiAzMCwNCisgICAg ICByZXJlbmRlck9uUmVzaXplOiBmYWxzZSwNCisgICAgICBoZWFkZXJDc3ND bGFzczogbnVsbCwNCisgICAgICBkZWZhdWx0U29ydEFzYzogdHJ1ZSwNCisg ICAgICBmb2N1c2FibGU6IHRydWUsDQorICAgICAgc2VsZWN0YWJsZTogdHJ1 ZQ0KKyAgICB9Ow0KKw0KKyAgICAvLyBzY3JvbGxlcg0KKyAgICB2YXIgdGg7 ICAgLy8gdmlydHVhbCBoZWlnaHQNCisgICAgdmFyIGg7ICAgIC8vIHJlYWwg c2Nyb2xsYWJsZSBoZWlnaHQNCisgICAgdmFyIHBoOyAgIC8vIHBhZ2UgaGVp Z2h0DQorICAgIHZhciBuOyAgICAvLyBudW1iZXIgb2YgcGFnZXMNCisgICAg dmFyIGNqOyAgIC8vICJqdW1waW5lc3MiIGNvZWZmaWNpZW50DQorDQorICAg IHZhciBwYWdlID0gMDsgICAgICAgLy8gY3VycmVudCBwYWdlDQorICAgIHZh ciBvZmZzZXQgPSAwOyAgICAgLy8gY3VycmVudCBwYWdlIG9mZnNldA0KKyAg ICB2YXIgdlNjcm9sbERpciA9IDE7DQorDQorICAgIC8vIHByaXZhdGUNCisg ICAgdmFyIGluaXRpYWxpemVkID0gZmFsc2U7DQorICAgIHZhciAkY29udGFp bmVyOw0KKyAgICB2YXIgdWlkID0gInNsaWNrZ3JpZF8iICsgTWF0aC5yb3Vu ZCgxMDAwMDAwICogTWF0aC5yYW5kb20oKSk7DQorICAgIHZhciBzZWxmID0g dGhpczsNCisgICAgdmFyICRmb2N1c1NpbmssICRmb2N1c1NpbmsyOw0KKyAg ICB2YXIgJGhlYWRlclNjcm9sbGVyOw0KKyAgICB2YXIgJGhlYWRlcnM7DQor ICAgIHZhciAkaGVhZGVyUm93LCAkaGVhZGVyUm93U2Nyb2xsZXIsICRoZWFk ZXJSb3dTcGFjZXI7DQorICAgIHZhciAkZm9vdGVyUm93LCAkZm9vdGVyUm93 U2Nyb2xsZXIsICRmb290ZXJSb3dTcGFjZXI7DQorICAgIHZhciAkdG9wUGFu ZWxTY3JvbGxlcjsNCisgICAgdmFyICR0b3BQYW5lbDsNCisgICAgdmFyICR2 aWV3cG9ydDsNCisgICAgdmFyICRjYW52YXM7DQorICAgIHZhciAkc3R5bGU7 DQorICAgIHZhciAkYm91bmRBbmNlc3RvcnM7DQorICAgIHZhciBzdHlsZXNo ZWV0LCBjb2x1bW5Dc3NSdWxlc0wsIGNvbHVtbkNzc1J1bGVzUjsNCisgICAg dmFyIHZpZXdwb3J0SCwgdmlld3BvcnRXOw0KKyAgICB2YXIgY2FudmFzV2lk dGg7DQorICAgIHZhciB2aWV3cG9ydEhhc0hTY3JvbGwsIHZpZXdwb3J0SGFz VlNjcm9sbDsNCisgICAgdmFyIGhlYWRlckNvbHVtbldpZHRoRGlmZiA9IDAs IGhlYWRlckNvbHVtbkhlaWdodERpZmYgPSAwLCAvLyBib3JkZXIrcGFkZGlu Zw0KKyAgICAgICAgY2VsbFdpZHRoRGlmZiA9IDAsIGNlbGxIZWlnaHREaWZm ID0gMCwgalF1ZXJ5TmV3V2lkdGhCZWhhdmlvdXIgPSBmYWxzZTsNCisgICAg dmFyIGFic29sdXRlQ29sdW1uTWluV2lkdGg7DQorICAgIHZhciBzb3J0SW5k aWNhdG9yQ3NzQ2xhc3MgPSAic2xpY2stc29ydC1pbmRpY2F0b3IiOw0KKyAg ICANCisgICAgdmFyIHRhYmJpbmdEaXJlY3Rpb24gPSAxOw0KKyAgICB2YXIg YWN0aXZlUG9zWDsNCisgICAgdmFyIGFjdGl2ZVJvdywgYWN0aXZlQ2VsbDsN CisgICAgdmFyIGFjdGl2ZUNlbGxOb2RlID0gbnVsbDsNCisgICAgdmFyIGN1 cnJlbnRFZGl0b3IgPSBudWxsOw0KKyAgICB2YXIgc2VyaWFsaXplZEVkaXRv clZhbHVlOw0KKyAgICB2YXIgZWRpdENvbnRyb2xsZXI7DQorDQorICAgIHZh ciByb3dzQ2FjaGUgPSB7fTsNCisgICAgdmFyIHJlbmRlcmVkUm93cyA9IDA7 DQorICAgIHZhciBudW1WaXNpYmxlUm93czsNCisgICAgdmFyIHByZXZTY3Jv bGxUb3AgPSAwOw0KKyAgICB2YXIgc2Nyb2xsVG9wID0gMDsNCisgICAgdmFy IGxhc3RSZW5kZXJlZFNjcm9sbFRvcCA9IDA7DQorICAgIHZhciBsYXN0UmVu ZGVyZWRTY3JvbGxMZWZ0ID0gMDsNCisgICAgdmFyIHByZXZTY3JvbGxMZWZ0 ID0gMDsNCisgICAgdmFyIHNjcm9sbExlZnQgPSAwOw0KKw0KKyAgICB2YXIg c2VsZWN0aW9uTW9kZWw7DQorICAgIHZhciBzZWxlY3RlZFJvd3MgPSBbXTsN CisNCisgICAgdmFyIHBsdWdpbnMgPSBbXTsNCisgICAgdmFyIGNlbGxDc3ND bGFzc2VzID0ge307DQorDQorICAgIHZhciBjb2x1bW5zQnlJZCA9IHt9Ow0K KyAgICB2YXIgc29ydENvbHVtbnMgPSBbXTsNCisgICAgdmFyIGNvbHVtblBv c0xlZnQgPSBbXTsNCisgICAgdmFyIGNvbHVtblBvc1JpZ2h0ID0gW107DQor DQorICAgIHZhciBwYWdpbmdBY3RpdmUgPSBmYWxzZTsNCisgICAgdmFyIHBh Z2luZ0lzTGFzdFBhZ2UgPSBmYWxzZTsNCisgICAgDQorICAgIC8vIGFzeW5j IGNhbGwgaGFuZGxlcw0KKyAgICB2YXIgaF9lZGl0b3JMb2FkZXIgPSBudWxs Ow0KKyAgICB2YXIgaF9yZW5kZXIgPSBudWxsOw0KKyAgICB2YXIgaF9wb3N0 cmVuZGVyID0gbnVsbDsNCisgICAgdmFyIGhfcG9zdHJlbmRlckNsZWFudXAg PSBudWxsOw0KKyAgICB2YXIgcG9zdFByb2Nlc3NlZFJvd3MgPSB7fTsNCisg ICAgdmFyIHBvc3RQcm9jZXNzVG9Sb3cgPSBudWxsOw0KKyAgICB2YXIgcG9z dFByb2Nlc3NGcm9tUm93ID0gbnVsbDsNCisgICAgdmFyIHBvc3RQcm9jZXNz ZWRDbGVhbnVwUXVldWUgPSBbXTsNCisgICAgdmFyIHBvc3RQcm9jZXNzZ3Jv dXBJZCA9IDA7DQorDQorICAgIC8vIHBlcmYgY291bnRlcnMNCisgICAgdmFy IGNvdW50ZXJfcm93c19yZW5kZXJlZCA9IDA7DQorICAgIHZhciBjb3VudGVy X3Jvd3NfcmVtb3ZlZCA9IDA7DQorDQorICAgIC8vIFRoZXNlIHR3byB2YXJp YWJsZXMgd29yayBhcm91bmQgYSBidWcgd2l0aCBpbmVydGlhbCBzY3JvbGxp bmcgaW4gV2Via2l0L0JsaW5rIG9uIE1hYy4NCisgICAgLy8gU2VlIGh0dHA6 Ly9jcmJ1Zy5jb20vMzEyNDI3Lg0KKyAgICB2YXIgcm93Tm9kZUZyb21MYXN0 TW91c2VXaGVlbEV2ZW50OyAgLy8gdGhpcyBub2RlIG11c3Qgbm90IGJlIGRl bGV0ZWQgd2hpbGUgaW5lcnRpYWwgc2Nyb2xsaW5nDQorICAgIHZhciB6b21i aWVSb3dOb2RlRnJvbUxhc3RNb3VzZVdoZWVsRXZlbnQ7ICAvLyBub2RlIHRo YXQgd2FzIGhpZGRlbiBpbnN0ZWFkIG9mIGdldHRpbmcgZGVsZXRlZA0KKyAg ICB2YXIgem9tYmllUm93Q2FjaGVGcm9tTGFzdE1vdXNlV2hlZWxFdmVudDsg IC8vIHJvdyBjYWNoZSBmb3IgYWJvdmUgbm9kZQ0KKyAgICB2YXIgem9tYmll Um93UG9zdFByb2Nlc3NlZEZyb21MYXN0TW91c2VXaGVlbEV2ZW50OyAgLy8g cG9zdCBwcm9jZXNzaW5nIHJlZmVyZW5jZXMgZm9yIGFib3ZlIG5vZGUNCisN CisgICAgLy8gc3RvcmUgY3NzIGF0dHJpYnV0ZXMgaWYgZGlzcGxheTpub25l IGlzIGFjdGl2ZSBpbiBjb250YWluZXIgb3IgcGFyZW50DQorICAgIHZhciBj c3NTaG93ID0geyBwb3NpdGlvbjogJ2Fic29sdXRlJywgdmlzaWJpbGl0eTog J2hpZGRlbicsIGRpc3BsYXk6ICdibG9jaycgfTsNCisgICAgdmFyICRoaWRk ZW5QYXJlbnRzOw0KKyAgICB2YXIgb2xkUHJvcHMgPSBbXTsNCisNCisgICAg Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLw0KKyAgICAvLyBJbml0aWFsaXphdGlvbg0KKw0KKyAgICBmdW5jdGlv biBpbml0KCkgew0KKyAgICAgIGlmIChjb250YWluZXIgaW5zdGFuY2VvZiBq UXVlcnkpIHsgDQorICAgICAgICAkY29udGFpbmVyID0gY29udGFpbmVyOyAN CisgICAgICB9IGVsc2UgeyANCisgICAgICAgICRjb250YWluZXIgPSAkKGNv bnRhaW5lcik7IA0KKyAgICAgIH0NCisgICAgICBpZiAoJGNvbnRhaW5lci5s ZW5ndGggPCAxKSB7DQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlNsaWNr R3JpZCByZXF1aXJlcyBhIHZhbGlkIGNvbnRhaW5lciwgIiArIGNvbnRhaW5l ciArICIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIERPTS4iKTsNCisgICAgICB9 DQorDQorICAgICAgY2FjaGVDc3NGb3JIaWRkZW5Jbml0KCk7DQorDQorICAg ICAgLy8gY2FsY3VsYXRlIHRoZXNlIG9ubHkgb25jZSBhbmQgc2hhcmUgYmV0 d2VlbiBncmlkIGluc3RhbmNlcw0KKyAgICAgIG1heFN1cHBvcnRlZENzc0hl aWdodCA9IG1heFN1cHBvcnRlZENzc0hlaWdodCB8fCBnZXRNYXhTdXBwb3J0 ZWRDc3NIZWlnaHQoKTsNCisgICAgICBzY3JvbGxiYXJEaW1lbnNpb25zID0g c2Nyb2xsYmFyRGltZW5zaW9ucyB8fCBtZWFzdXJlU2Nyb2xsYmFyKCk7DQor DQorICAgICAgb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBkZWZhdWx0cywgb3B0 aW9ucyk7DQorICAgICAgdmFsaWRhdGVBbmRFbmZvcmNlT3B0aW9ucygpOw0K KyAgICAgIGNvbHVtbkRlZmF1bHRzLndpZHRoID0gb3B0aW9ucy5kZWZhdWx0 Q29sdW1uV2lkdGg7DQorDQorICAgICAgY29sdW1uc0J5SWQgPSB7fTsNCisg ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbHVtbnMubGVuZ3RoOyBpKysp IHsNCisgICAgICAgIHZhciBtID0gY29sdW1uc1tpXSA9ICQuZXh0ZW5kKHt9 LCBjb2x1bW5EZWZhdWx0cywgY29sdW1uc1tpXSk7DQorICAgICAgICBjb2x1 bW5zQnlJZFttLmlkXSA9IGk7DQorICAgICAgICBpZiAobS5taW5XaWR0aCAm JiBtLndpZHRoIDwgbS5taW5XaWR0aCkgew0KKyAgICAgICAgICBtLndpZHRo ID0gbS5taW5XaWR0aDsNCisgICAgICAgIH0NCisgICAgICAgIGlmIChtLm1h eFdpZHRoICYmIG0ud2lkdGggPiBtLm1heFdpZHRoKSB7DQorICAgICAgICAg IG0ud2lkdGggPSBtLm1heFdpZHRoOw0KKyAgICAgICAgfQ0KKyAgICAgIH0N CisNCisgICAgICAvLyB2YWxpZGF0ZSBsb2FkZWQgSmF2YVNjcmlwdCBtb2R1 bGVzIGFnYWluc3QgcmVxdWVzdGVkIG9wdGlvbnMNCisgICAgICBpZiAob3B0 aW9ucy5lbmFibGVDb2x1bW5SZW9yZGVyICYmICEkLmZuLnNvcnRhYmxlKSB7 DQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlNsaWNrR3JpZCdzICdlbmFi bGVDb2x1bW5SZW9yZGVyID0gdHJ1ZScgb3B0aW9uIHJlcXVpcmVzIGpxdWVy eS11aS5zb3J0YWJsZSBtb2R1bGUgdG8gYmUgbG9hZGVkIik7DQorICAgICAg fQ0KKw0KKyAgICAgIGVkaXRDb250cm9sbGVyID0gew0KKyAgICAgICAgImNv bW1pdEN1cnJlbnRFZGl0IjogY29tbWl0Q3VycmVudEVkaXQsDQorICAgICAg ICAiY2FuY2VsQ3VycmVudEVkaXQiOiBjYW5jZWxDdXJyZW50RWRpdA0KKyAg ICAgIH07DQorDQorICAgICAgJGNvbnRhaW5lcg0KKyAgICAgICAgICAuZW1w dHkoKQ0KKyAgICAgICAgICAuY3NzKCJvdmVyZmxvdyIsICJoaWRkZW4iKQ0K KyAgICAgICAgICAuY3NzKCJvdXRsaW5lIiwgMCkNCisgICAgICAgICAgLmFk ZENsYXNzKHVpZCkNCisgICAgICAgICAgLmFkZENsYXNzKCJ1aS13aWRnZXQi KTsNCisNCisgICAgICAvLyBzZXQgdXAgYSBwb3NpdGlvbmluZyBjb250YWlu ZXIgaWYgbmVlZGVkDQorICAgICAgaWYgKCEvcmVsYXRpdmV8YWJzb2x1dGV8 Zml4ZWQvLnRlc3QoJGNvbnRhaW5lci5jc3MoInBvc2l0aW9uIikpKSB7DQor ICAgICAgICAkY29udGFpbmVyLmNzcygicG9zaXRpb24iLCAicmVsYXRpdmUi KTsNCisgICAgICB9DQorDQorICAgICAgJGZvY3VzU2luayA9ICQoIjxkaXYg dGFiSW5kZXg9JzAnIGhpZGVGb2N1cyBzdHlsZT0ncG9zaXRpb246Zml4ZWQ7 d2lkdGg6MDtoZWlnaHQ6MDt0b3A6MDtsZWZ0OjA7b3V0bGluZTowOyc+PC9k aXY+IikuYXBwZW5kVG8oJGNvbnRhaW5lcik7DQorDQorICAgICAgJGhlYWRl clNjcm9sbGVyID0gJCgiPGRpdiBjbGFzcz0nc2xpY2staGVhZGVyIHVpLXN0 YXRlLWRlZmF1bHQnIHN0eWxlPSdvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246 cmVsYXRpdmU7JyAvPiIpLmFwcGVuZFRvKCRjb250YWluZXIpOw0KKyAgICAg ICRoZWFkZXJzID0gJCgiPGRpdiBjbGFzcz0nc2xpY2staGVhZGVyLWNvbHVt bnMnIHN0eWxlPSdsZWZ0Oi0xMDAwcHgnIC8+IikuYXBwZW5kVG8oJGhlYWRl clNjcm9sbGVyKTsNCisgICAgICAkaGVhZGVycy53aWR0aChnZXRIZWFkZXJz V2lkdGgoKSk7DQorDQorICAgICAgJGhlYWRlclJvd1Njcm9sbGVyID0gJCgi PGRpdiBjbGFzcz0nc2xpY2staGVhZGVycm93IHVpLXN0YXRlLWRlZmF1bHQn IHN0eWxlPSdvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmU7JyAv PiIpLmFwcGVuZFRvKCRjb250YWluZXIpOw0KKyAgICAgICRoZWFkZXJSb3cg PSAkKCI8ZGl2IGNsYXNzPSdzbGljay1oZWFkZXJyb3ctY29sdW1ucycgLz4i KS5hcHBlbmRUbygkaGVhZGVyUm93U2Nyb2xsZXIpOw0KKyAgICAgICRoZWFk ZXJSb3dTcGFjZXIgPSAkKCI8ZGl2IHN0eWxlPSdkaXNwbGF5OmJsb2NrO2hl aWdodDoxcHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowOyc+PC9k aXY+IikNCisgICAgICAgICAgLmNzcygid2lkdGgiLCBnZXRDYW52YXNXaWR0 aCgpICsgc2Nyb2xsYmFyRGltZW5zaW9ucy53aWR0aCArICJweCIpDQorICAg ICAgICAgIC5hcHBlbmRUbygkaGVhZGVyUm93U2Nyb2xsZXIpOw0KKw0KKyAg ICAgICR0b3BQYW5lbFNjcm9sbGVyID0gJCgiPGRpdiBjbGFzcz0nc2xpY2st dG9wLXBhbmVsLXNjcm9sbGVyIHVpLXN0YXRlLWRlZmF1bHQnIHN0eWxlPSdv dmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmU7JyAvPiIpLmFwcGVu ZFRvKCRjb250YWluZXIpOw0KKyAgICAgICR0b3BQYW5lbCA9ICQoIjxkaXYg Y2xhc3M9J3NsaWNrLXRvcC1wYW5lbCcgc3R5bGU9J3dpZHRoOjEwMDAwcHgn IC8+IikuYXBwZW5kVG8oJHRvcFBhbmVsU2Nyb2xsZXIpOw0KKw0KKyAgICAg IGlmICghb3B0aW9ucy5zaG93VG9wUGFuZWwpIHsNCisgICAgICAgICR0b3BQ YW5lbFNjcm9sbGVyLmhpZGUoKTsNCisgICAgICB9DQorDQorICAgICAgaWYg KCFvcHRpb25zLnNob3dIZWFkZXJSb3cpIHsNCisgICAgICAgICRoZWFkZXJS b3dTY3JvbGxlci5oaWRlKCk7DQorICAgICAgfQ0KKw0KKyAgICAgICR2aWV3 cG9ydCA9ICQoIjxkaXYgY2xhc3M9J3NsaWNrLXZpZXdwb3J0JyBzdHlsZT0n d2lkdGg6MTAwJTtvdmVyZmxvdzphdXRvO291dGxpbmU6MDtwb3NpdGlvbjpy ZWxhdGl2ZTs7Jz4iKS5hcHBlbmRUbygkY29udGFpbmVyKTsNCisgICAgICAk dmlld3BvcnQuY3NzKCJvdmVyZmxvdy15Iiwgb3B0aW9ucy5hdXRvSGVpZ2h0 ID8gImhpZGRlbiIgOiAiYXV0byIpOw0KKw0KKyAgICAgICRjYW52YXMgPSAk KCI8ZGl2IGNsYXNzPSdncmlkLWNhbnZhcycgLz4iKS5hcHBlbmRUbygkdmll d3BvcnQpOw0KKw0KKyAgICAgIGlmIChvcHRpb25zLmNyZWF0ZUZvb3RlclJv dykgew0KKyAgICAgICAgJGZvb3RlclJvd1Njcm9sbGVyID0gJCgiPGRpdiBj bGFzcz0nc2xpY2stZm9vdGVycm93IHVpLXN0YXRlLWRlZmF1bHQnIHN0eWxl PSdvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmU7JyAvPiIpLmFw cGVuZFRvKCRjb250YWluZXIpOw0KKyAgICAgICAgJGZvb3RlclJvdyA9ICQo IjxkaXYgY2xhc3M9J3NsaWNrLWZvb3RlcnJvdy1jb2x1bW5zJyAvPiIpLmFw cGVuZFRvKCRmb290ZXJSb3dTY3JvbGxlcik7DQorICAgICAgICAkZm9vdGVy Um93U3BhY2VyID0gJCgiPGRpdiBzdHlsZT0nZGlzcGxheTpibG9jaztoZWln aHQ6MXB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDsnPjwvZGl2 PiIpDQorICAgICAgICAgICAgLmNzcygid2lkdGgiLCBnZXRDYW52YXNXaWR0 aCgpICsgc2Nyb2xsYmFyRGltZW5zaW9ucy53aWR0aCArICJweCIpDQorICAg ICAgICAgICAgLmFwcGVuZFRvKCRmb290ZXJSb3dTY3JvbGxlcik7DQorDQor ICAgICAgICBpZiAoIW9wdGlvbnMuc2hvd0Zvb3RlclJvdykgew0KKyAgICAg ICAgICAkZm9vdGVyUm93U2Nyb2xsZXIuaGlkZSgpOw0KKyAgICAgICAgfQ0K KyAgICAgIH0NCisNCisgICAgICBpZiAob3B0aW9ucy5udW1iZXJlZE11bHRp Q29sdW1uU29ydCkgeyBzb3J0SW5kaWNhdG9yQ3NzQ2xhc3MgPSAic2xpY2st c29ydC1pbmRpY2F0b3ItbnVtYmVyZWQiOyB9DQorDQorICAgICAgJGZvY3Vz U2luazIgPSAkZm9jdXNTaW5rLmNsb25lKCkuYXBwZW5kVG8oJGNvbnRhaW5l cik7DQorDQorICAgICAgaWYgKCFvcHRpb25zLmV4cGxpY2l0SW5pdGlhbGl6 YXRpb24pIHsNCisgICAgICAgIGZpbmlzaEluaXRpYWxpemF0aW9uKCk7DQor ICAgICAgfQ0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIGZpbmlzaEluaXRp YWxpemF0aW9uKCkgew0KKyAgICAgIGlmICghaW5pdGlhbGl6ZWQpIHsNCisg ICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsNCisNCisgICAgICAgIHZpZXdw b3J0VyA9IHBhcnNlRmxvYXQoJC5jc3MoJGNvbnRhaW5lclswXSwgIndpZHRo IiwgdHJ1ZSkpOw0KKw0KKyAgICAgICAgLy8gaGVhZGVyIGNvbHVtbnMgYW5k IGNlbGxzIG1heSBoYXZlIGRpZmZlcmVudCBwYWRkaW5nL2JvcmRlciBza2V3 aW5nIHdpZHRoIGNhbGN1bGF0aW9ucyAoYm94LXNpemluZywgaGVsbG8/KQ0K KyAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBkaWZmIHNvIHdlIGNhbiBzZXQg Y29uc2lzdGVudCBzaXplcw0KKyAgICAgICAgbWVhc3VyZUNlbGxQYWRkaW5n QW5kQm9yZGVyKCk7DQorDQorICAgICAgICAvLyBmb3IgdXNhYmlsaXR5IHJl YXNvbnMsIGFsbCB0ZXh0IHNlbGVjdGlvbiBpbiBTbGlja0dyaWQgaXMgZGlz YWJsZWQNCisgICAgICAgIC8vIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBpbnB1 dCBhbmQgdGV4dGFyZWEgZWxlbWVudHMgKHNlbGVjdGlvbiBtdXN0DQorICAg ICAgICAvLyBiZSBlbmFibGVkIHRoZXJlIHNvIHRoYXQgZWRpdG9ycyB3b3Jr IGFzIGV4cGVjdGVkKTsgbm90ZSB0aGF0DQorICAgICAgICAvLyBzZWxlY3Rp b24gaW4gZ3JpZCBjZWxscyAoZ3JpZCBib2R5KSBpcyBhbHJlYWR5IHVuYXZh aWxhYmxlIGluDQorICAgICAgICAvLyBhbGwgYnJvd3NlcnMgZXhjZXB0IElF DQorICAgICAgICBkaXNhYmxlU2VsZWN0aW9uKCRoZWFkZXJzKTsgLy8gZGlz YWJsZSBhbGwgdGV4dCBzZWxlY3Rpb24gaW4gaGVhZGVyIChpbmNsdWRpbmcg aW5wdXQgYW5kIHRleHRhcmVhKQ0KKw0KKyAgICAgICAgaWYgKCFvcHRpb25z LmVuYWJsZVRleHRTZWxlY3Rpb25PbkNlbGxzKSB7DQorICAgICAgICAgIC8v IGRpc2FibGUgdGV4dCBzZWxlY3Rpb24gaW4gZ3JpZCBjZWxscyBleGNlcHQg aW4gaW5wdXQgYW5kIHRleHRhcmVhIGVsZW1lbnRzDQorICAgICAgICAgIC8v ICh0aGlzIGlzIElFLXNwZWNpZmljLCBiZWNhdXNlIHNlbGVjdHN0YXJ0IGV2 ZW50IHdpbGwgb25seSBmaXJlIGluIElFKQ0KKyAgICAgICAgICAkdmlld3Bv cnQub24oInNlbGVjdHN0YXJ0LnVpIiwgZnVuY3Rpb24gKGV2ZW50KSB7DQor ICAgICAgICAgICAgcmV0dXJuICQoZXZlbnQudGFyZ2V0KS5pcygiaW5wdXQs dGV4dGFyZWEiKTsNCisgICAgICAgICAgfSk7DQorICAgICAgICB9DQorDQor ICAgICAgICB1cGRhdGVDb2x1bW5DYWNoZXMoKTsNCisgICAgICAgIGNyZWF0 ZUNvbHVtbkhlYWRlcnMoKTsNCisgICAgICAgIHNldHVwQ29sdW1uU29ydCgp Ow0KKyAgICAgICAgY3JlYXRlQ3NzUnVsZXMoKTsNCisgICAgICAgIHJlc2l6 ZUNhbnZhcygpOw0KKyAgICAgICAgYmluZEFuY2VzdG9yU2Nyb2xsRXZlbnRz KCk7DQorDQorICAgICAgICAkY29udGFpbmVyDQorICAgICAgICAgICAgLm9u KCJyZXNpemUuc2xpY2tncmlkIiwgcmVzaXplQ2FudmFzKTsNCisgICAgICAg ICR2aWV3cG9ydA0KKyAgICAgICAgICAgIC8vLm9uKCJjbGljayIsIGhhbmRs ZUNsaWNrKQ0KKyAgICAgICAgICAgIC5vbigic2Nyb2xsIiwgaGFuZGxlU2Ny b2xsKTsNCisgICAgICAgICRoZWFkZXJTY3JvbGxlcg0KKyAgICAgICAgICAg IC5vbigiY29udGV4dG1lbnUiLCBoYW5kbGVIZWFkZXJDb250ZXh0TWVudSkN CisgICAgICAgICAgICAub24oImNsaWNrIiwgaGFuZGxlSGVhZGVyQ2xpY2sp DQorICAgICAgICAgICAgLm9uKCJtb3VzZWVudGVyIiwgIi5zbGljay1oZWFk ZXItY29sdW1uIiwgaGFuZGxlSGVhZGVyTW91c2VFbnRlcikNCisgICAgICAg ICAgICAub24oIm1vdXNlbGVhdmUiLCAiLnNsaWNrLWhlYWRlci1jb2x1bW4i LCBoYW5kbGVIZWFkZXJNb3VzZUxlYXZlKTsNCisgICAgICAgICRoZWFkZXJS b3dTY3JvbGxlcg0KKyAgICAgICAgICAgIC5vbigic2Nyb2xsIiwgaGFuZGxl SGVhZGVyUm93U2Nyb2xsKTsNCisNCisgICAgICAgIGlmIChvcHRpb25zLmNy ZWF0ZUZvb3RlclJvdykgew0KKyAgICAgICAgICAkZm9vdGVyUm93U2Nyb2xs ZXINCisgICAgICAgICAgICAgIC5vbigic2Nyb2xsIiwgaGFuZGxlRm9vdGVy Um93U2Nyb2xsKTsNCisgICAgICAgIH0NCisNCisgICAgICAgICRmb2N1c1Np bmsuYWRkKCRmb2N1c1NpbmsyKQ0KKyAgICAgICAgICAgIC5vbigia2V5ZG93 biIsIGhhbmRsZUtleURvd24pOw0KKyAgICAgICAgJGNhbnZhcw0KKyAgICAg ICAgICAgIC5vbigia2V5ZG93biIsIGhhbmRsZUtleURvd24pDQorICAgICAg ICAgICAgLm9uKCJjbGljayIsIGhhbmRsZUNsaWNrKQ0KKyAgICAgICAgICAg IC5vbigiZGJsY2xpY2siLCBoYW5kbGVEYmxDbGljaykNCisgICAgICAgICAg ICAub24oImNvbnRleHRtZW51IiwgaGFuZGxlQ29udGV4dE1lbnUpDQorICAg ICAgICAgICAgLm9uKCJkcmFnaW5pdCIsIGhhbmRsZURyYWdJbml0KQ0KKyAg ICAgICAgICAgIC5vbigiZHJhZ3N0YXJ0Iiwge2Rpc3RhbmNlOiAzfSwgaGFu ZGxlRHJhZ1N0YXJ0KQ0KKyAgICAgICAgICAgIC5vbigiZHJhZyIsIGhhbmRs ZURyYWcpDQorICAgICAgICAgICAgLm9uKCJkcmFnZW5kIiwgaGFuZGxlRHJh Z0VuZCkNCisgICAgICAgICAgICAub24oIm1vdXNlZW50ZXIiLCAiLnNsaWNr LWNlbGwiLCBoYW5kbGVNb3VzZUVudGVyKQ0KKyAgICAgICAgICAgIC5vbigi bW91c2VsZWF2ZSIsICIuc2xpY2stY2VsbCIsIGhhbmRsZU1vdXNlTGVhdmUp Ow0KKw0KKyAgICAgICAgLy8gV29yayBhcm91bmQgaHR0cDovL2NyYnVnLmNv bS8zMTI0MjcuDQorICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC50 b0xvd2VyQ2FzZSgpLm1hdGNoKC93ZWJraXQvKSAmJg0KKyAgICAgICAgICAg IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvbWFj aW50b3NoLykpIHsNCisgICAgICAgICAgJGNhbnZhcy5vbigibW91c2V3aGVl bCIsIGhhbmRsZU1vdXNlV2hlZWwpOw0KKyAgICAgICAgfQ0KKyAgICAgICAg cmVzdG9yZUNzc0Zyb21IaWRkZW5Jbml0KCk7DQorICAgICAgfQ0KKyAgICB9 DQorDQorICAgIGZ1bmN0aW9uIGNhY2hlQ3NzRm9ySGlkZGVuSW5pdCgpIHsN CisgICAgICAvLyBoYW5kbGUgZGlzcGxheTpub25lIG9uIGNvbnRhaW5lciBv ciBjb250YWluZXIgcGFyZW50cw0KKyAgICAgICRoaWRkZW5QYXJlbnRzID0g JGNvbnRhaW5lci5wYXJlbnRzKCkuYWRkQmFjaygpLm5vdCgnOnZpc2libGUn KTsNCisgICAgICAkaGlkZGVuUGFyZW50cy5lYWNoKGZ1bmN0aW9uKCkgew0K KyAgICAgICAgdmFyIG9sZCA9IHt9Ow0KKyAgICAgICAgZm9yICggdmFyIG5h bWUgaW4gY3NzU2hvdyApIHsNCisgICAgICAgICAgb2xkWyBuYW1lIF0gPSB0 aGlzLnN0eWxlWyBuYW1lIF07DQorICAgICAgICAgIHRoaXMuc3R5bGVbIG5h bWUgXSA9IGNzc1Nob3dbIG5hbWUgXTsNCisgICAgICAgIH0NCisgICAgICAg IG9sZFByb3BzLnB1c2gob2xkKTsNCisgICAgICB9KTsNCisgICAgfQ0KKw0K KyAgICBmdW5jdGlvbiByZXN0b3JlQ3NzRnJvbUhpZGRlbkluaXQoKSB7DQor ICAgICAgLy8gZmluaXNoIGhhbmRsZSBkaXNwbGF5Om5vbmUgb24gY29udGFp bmVyIG9yIGNvbnRhaW5lciBwYXJlbnRzDQorICAgICAgLy8gLSBwdXQgdmFs dWVzIGJhY2sgdGhlIHdheSB0aGV5IHdlcmUNCisgICAgICAkaGlkZGVuUGFy ZW50cy5lYWNoKGZ1bmN0aW9uKGkpIHsNCisgICAgICAgIHZhciBvbGQgPSBv bGRQcm9wc1tpXTsNCisgICAgICAgIGZvciAoIHZhciBuYW1lIGluIGNzc1No b3cgKSB7DQorICAgICAgICAgIHRoaXMuc3R5bGVbIG5hbWUgXSA9IG9sZFsg bmFtZSBdOw0KKyAgICAgICAgfQ0KKyAgICAgIH0pOw0KKyAgICB9DQorDQor ICAgIGZ1bmN0aW9uIHJlZ2lzdGVyUGx1Z2luKHBsdWdpbikgew0KKyAgICAg IHBsdWdpbnMudW5zaGlmdChwbHVnaW4pOw0KKyAgICAgIHBsdWdpbi5pbml0 KHNlbGYpOw0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIHVucmVnaXN0ZXJQ bHVnaW4ocGx1Z2luKSB7DQorICAgICAgZm9yICh2YXIgaSA9IHBsdWdpbnMu bGVuZ3RoOyBpID49IDA7IGktLSkgew0KKyAgICAgICAgaWYgKHBsdWdpbnNb aV0gPT09IHBsdWdpbikgew0KKyAgICAgICAgICBpZiAocGx1Z2luc1tpXS5k ZXN0cm95KSB7DQorICAgICAgICAgICAgcGx1Z2luc1tpXS5kZXN0cm95KCk7 DQorICAgICAgICAgIH0NCisgICAgICAgICAgcGx1Z2lucy5zcGxpY2UoaSwg MSk7DQorICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgfQ0KKyAgICAgIH0N CisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBzZXRTZWxlY3Rpb25Nb2RlbCht b2RlbCkgew0KKyAgICAgIGlmIChzZWxlY3Rpb25Nb2RlbCkgew0KKyAgICAg ICAgc2VsZWN0aW9uTW9kZWwub25TZWxlY3RlZFJhbmdlc0NoYW5nZWQudW5z dWJzY3JpYmUoaGFuZGxlU2VsZWN0ZWRSYW5nZXNDaGFuZ2VkKTsNCisgICAg ICAgIGlmIChzZWxlY3Rpb25Nb2RlbC5kZXN0cm95KSB7DQorICAgICAgICAg IHNlbGVjdGlvbk1vZGVsLmRlc3Ryb3koKTsNCisgICAgICAgIH0NCisgICAg ICB9DQorDQorICAgICAgc2VsZWN0aW9uTW9kZWwgPSBtb2RlbDsNCisgICAg ICBpZiAoc2VsZWN0aW9uTW9kZWwpIHsNCisgICAgICAgIHNlbGVjdGlvbk1v ZGVsLmluaXQoc2VsZik7DQorICAgICAgICBzZWxlY3Rpb25Nb2RlbC5vblNl bGVjdGVkUmFuZ2VzQ2hhbmdlZC5zdWJzY3JpYmUoaGFuZGxlU2VsZWN0ZWRS YW5nZXNDaGFuZ2VkKTsNCisgICAgICB9DQorICAgIH0NCisNCisgICAgZnVu Y3Rpb24gZ2V0U2VsZWN0aW9uTW9kZWwoKSB7DQorICAgICAgcmV0dXJuIHNl bGVjdGlvbk1vZGVsOw0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIGdldENh bnZhc05vZGUoKSB7DQorICAgICAgcmV0dXJuICRjYW52YXNbMF07DQorICAg IH0NCisNCisgICAgZnVuY3Rpb24gbWVhc3VyZVNjcm9sbGJhcigpIHsNCisg ICAgICB2YXIgJGMgPSAkKCI8ZGl2IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0 ZTsgdG9wOi0xMDAwMHB4OyBsZWZ0Oi0xMDAwMHB4OyB3aWR0aDoxMDBweDsg aGVpZ2h0OjEwMHB4OyBvdmVyZmxvdzpzY3JvbGw7Jz48L2Rpdj4iKS5hcHBl bmRUbygiYm9keSIpOw0KKyAgICAgIHZhciBkaW0gPSB7DQorICAgICAgICB3 aWR0aDogJGMud2lkdGgoKSAtICRjWzBdLmNsaWVudFdpZHRoLA0KKyAgICAg ICAgaGVpZ2h0OiAkYy5oZWlnaHQoKSAtICRjWzBdLmNsaWVudEhlaWdodA0K KyAgICAgIH07DQorICAgICAgJGMucmVtb3ZlKCk7DQorICAgICAgcmV0dXJu IGRpbTsNCisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBnZXRIZWFkZXJzV2lk dGgoKSB7DQorICAgICAgdmFyIGhlYWRlcnNXaWR0aCA9IDA7DQorICAgICAg Zm9yICh2YXIgaSA9IDAsIGlpID0gY29sdW1ucy5sZW5ndGg7IGkgPCBpaTsg aSsrKSB7DQorICAgICAgICB2YXIgd2lkdGggPSBjb2x1bW5zW2ldLndpZHRo Ow0KKyAgICAgICAgaGVhZGVyc1dpZHRoICs9IHdpZHRoOw0KKyAgICAgIH0N CisgICAgICBoZWFkZXJzV2lkdGggKz0gc2Nyb2xsYmFyRGltZW5zaW9ucy53 aWR0aDsNCisgICAgICByZXR1cm4gTWF0aC5tYXgoaGVhZGVyc1dpZHRoLCB2 aWV3cG9ydFcpICsgMTAwMDsNCisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBn ZXRDYW52YXNXaWR0aCgpIHsNCisgICAgICB2YXIgYXZhaWxhYmxlV2lkdGgg PSB2aWV3cG9ydEhhc1ZTY3JvbGwgPyB2aWV3cG9ydFcgLSBzY3JvbGxiYXJE aW1lbnNpb25zLndpZHRoIDogdmlld3BvcnRXOw0KKyAgICAgIHZhciByb3dX aWR0aCA9IDA7DQorICAgICAgdmFyIGkgPSBjb2x1bW5zLmxlbmd0aDsNCisg ICAgICB3aGlsZSAoaS0tKSB7DQorICAgICAgICByb3dXaWR0aCArPSBjb2x1 bW5zW2ldLndpZHRoOw0KKyAgICAgIH0NCisgICAgICByZXR1cm4gb3B0aW9u cy5mdWxsV2lkdGhSb3dzID8gTWF0aC5tYXgocm93V2lkdGgsIGF2YWlsYWJs ZVdpZHRoKSA6IHJvd1dpZHRoOw0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9u IHVwZGF0ZUNhbnZhc1dpZHRoKGZvcmNlQ29sdW1uV2lkdGhzVXBkYXRlKSB7 DQorICAgICAgdmFyIG9sZENhbnZhc1dpZHRoID0gY2FudmFzV2lkdGg7DQor ICAgICAgY2FudmFzV2lkdGggPSBnZXRDYW52YXNXaWR0aCgpOw0KKw0KKyAg ICAgIGlmIChjYW52YXNXaWR0aCAhPSBvbGRDYW52YXNXaWR0aCkgew0KKyAg ICAgICAgJGNhbnZhcy53aWR0aChjYW52YXNXaWR0aCk7DQorICAgICAgICAk aGVhZGVyUm93LndpZHRoKGNhbnZhc1dpZHRoKTsNCisgICAgICAgIGlmIChv cHRpb25zLmNyZWF0ZUZvb3RlclJvdykgeyAkZm9vdGVyUm93LndpZHRoKGNh bnZhc1dpZHRoKTsgfQ0KKyAgICAgICAgJGhlYWRlcnMud2lkdGgoZ2V0SGVh ZGVyc1dpZHRoKCkpOw0KKyAgICAgICAgdmlld3BvcnRIYXNIU2Nyb2xsID0g KGNhbnZhc1dpZHRoID4gdmlld3BvcnRXIC0gc2Nyb2xsYmFyRGltZW5zaW9u cy53aWR0aCk7DQorICAgICAgfQ0KKw0KKyAgICAgICB2YXIgdz1jYW52YXNX aWR0aCArICh2aWV3cG9ydEhhc1ZTY3JvbGwgPyBzY3JvbGxiYXJEaW1lbnNp b25zLndpZHRoIDogMCk7DQorICAgICAgICRoZWFkZXJSb3dTcGFjZXIud2lk dGgodyk7DQorICAgICAgIGlmIChvcHRpb25zLmNyZWF0ZUZvb3RlclJvdykg eyAkZm9vdGVyUm93U3BhY2VyLndpZHRoKHcpOyB9DQorDQorICAgICAgaWYg KGNhbnZhc1dpZHRoICE9IG9sZENhbnZhc1dpZHRoIHx8IGZvcmNlQ29sdW1u V2lkdGhzVXBkYXRlKSB7DQorICAgICAgICBhcHBseUNvbHVtbldpZHRocygp Ow0KKyAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBkaXNhYmxl U2VsZWN0aW9uKCR0YXJnZXQpIHsNCisgICAgICBpZiAoJHRhcmdldCAmJiAk dGFyZ2V0LmpxdWVyeSkgew0KKyAgICAgICAgJHRhcmdldA0KKyAgICAgICAg ICAgIC5hdHRyKCJ1bnNlbGVjdGFibGUiLCAib24iKQ0KKyAgICAgICAgICAg IC5jc3MoIk1velVzZXJTZWxlY3QiLCAibm9uZSIpDQorICAgICAgICAgICAg Lm9uKCJzZWxlY3RzdGFydC51aSIsIGZ1bmN0aW9uICgpIHsNCisgICAgICAg ICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgICAgICB9KTsgLy8gZnJv bSBqcXVlcnk6dWkuY29yZS5qcyAxLjcuMg0KKyAgICAgIH0NCisgICAgfQ0K Kw0KKyAgICBmdW5jdGlvbiBnZXRNYXhTdXBwb3J0ZWRDc3NIZWlnaHQoKSB7 DQorICAgICAgdmFyIHN1cHBvcnRlZEhlaWdodCA9IDEwMDAwMDA7DQorICAg ICAgLy8gRkYgcmVwb3J0cyB0aGUgaGVpZ2h0IGJhY2sgYnV0IHN0aWxsIHJl bmRlcnMgYmxhbmsgYWZ0ZXIgfjZNIHB4DQorICAgICAgdmFyIHRlc3RVcFRv ID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9m aXJlZm94LykgPyA2MDAwMDAwIDogMTAwMDAwMDAwMDsNCisgICAgICB2YXIg ZGl2ID0gJCgiPGRpdiBzdHlsZT0nZGlzcGxheTpub25lJyAvPiIpLmFwcGVu ZFRvKGRvY3VtZW50LmJvZHkpOw0KKw0KKyAgICAgIHdoaWxlICh0cnVlKSB7 DQorICAgICAgICB2YXIgdGVzdCA9IHN1cHBvcnRlZEhlaWdodCAqIDI7DQor ICAgICAgICBkaXYuY3NzKCJoZWlnaHQiLCB0ZXN0KTsNCisgICAgICAgIGlm ICh0ZXN0ID4gdGVzdFVwVG8gfHwgZGl2LmhlaWdodCgpICE9PSB0ZXN0KSB7 DQorICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgfSBlbHNlIHsNCisgICAg ICAgICAgc3VwcG9ydGVkSGVpZ2h0ID0gdGVzdDsNCisgICAgICAgIH0NCisg ICAgICB9DQorDQorICAgICAgZGl2LnJlbW92ZSgpOw0KKyAgICAgIHJldHVy biBzdXBwb3J0ZWRIZWlnaHQ7DQorICAgIH0NCisNCisgICAgLy8gVE9ETzog IHRoaXMgaXMgc3RhdGljLiAgbmVlZCB0byBoYW5kbGUgcGFnZSBtdXRhdGlv bi4NCisgICAgZnVuY3Rpb24gYmluZEFuY2VzdG9yU2Nyb2xsRXZlbnRzKCkg ew0KKyAgICAgIHZhciBlbGVtID0gJGNhbnZhc1swXTsNCisgICAgICB3aGls ZSAoKGVsZW0gPSBlbGVtLnBhcmVudE5vZGUpICE9IGRvY3VtZW50LmJvZHkg JiYgZWxlbSAhPSBudWxsKSB7DQorICAgICAgICAvLyBiaW5kIHRvIHNjcm9s bCBjb250YWluZXJzIG9ubHkNCisgICAgICAgIGlmIChlbGVtID09ICR2aWV3 cG9ydFswXSB8fCBlbGVtLnNjcm9sbFdpZHRoICE9IGVsZW0uY2xpZW50V2lk dGggfHwgZWxlbS5zY3JvbGxIZWlnaHQgIT0gZWxlbS5jbGllbnRIZWlnaHQp IHsNCisgICAgICAgICAgdmFyICRlbGVtID0gJChlbGVtKTsNCisgICAgICAg ICAgaWYgKCEkYm91bmRBbmNlc3RvcnMpIHsNCisgICAgICAgICAgICAkYm91 bmRBbmNlc3RvcnMgPSAkZWxlbTsNCisgICAgICAgICAgfSBlbHNlIHsNCisg ICAgICAgICAgICAkYm91bmRBbmNlc3RvcnMgPSAkYm91bmRBbmNlc3RvcnMu YWRkKCRlbGVtKTsNCisgICAgICAgICAgfQ0KKyAgICAgICAgICAkZWxlbS5v bigic2Nyb2xsLiIgKyB1aWQsIGhhbmRsZUFjdGl2ZUNlbGxQb3NpdGlvbkNo YW5nZSk7DQorICAgICAgICB9DQorICAgICAgfQ0KKyAgICB9DQorDQorICAg IGZ1bmN0aW9uIHVuYmluZEFuY2VzdG9yU2Nyb2xsRXZlbnRzKCkgew0KKyAg ICAgIGlmICghJGJvdW5kQW5jZXN0b3JzKSB7DQorICAgICAgICByZXR1cm47 DQorICAgICAgfQ0KKyAgICAgICRib3VuZEFuY2VzdG9ycy5vZmYoInNjcm9s bC4iICsgdWlkKTsNCisgICAgICAkYm91bmRBbmNlc3RvcnMgPSBudWxsOw0K KyAgICB9DQorDQorICAgIGZ1bmN0aW9uIHVwZGF0ZUNvbHVtbkhlYWRlcihj b2x1bW5JZCwgdGl0bGUsIHRvb2xUaXApIHsNCisgICAgICBpZiAoIWluaXRp YWxpemVkKSB7IHJldHVybjsgfQ0KKyAgICAgIHZhciBpZHggPSBnZXRDb2x1 bW5JbmRleChjb2x1bW5JZCk7DQorICAgICAgaWYgKGlkeCA9PSBudWxsKSB7 DQorICAgICAgICByZXR1cm47DQorICAgICAgfQ0KKw0KKyAgICAgIHZhciBj b2x1bW5EZWYgPSBjb2x1bW5zW2lkeF07DQorICAgICAgdmFyICRoZWFkZXIg PSAkaGVhZGVycy5jaGlsZHJlbigpLmVxKGlkeCk7DQorICAgICAgaWYgKCRo ZWFkZXIpIHsNCisgICAgICAgIGlmICh0aXRsZSAhPT0gdW5kZWZpbmVkKSB7 DQorICAgICAgICAgIGNvbHVtbnNbaWR4XS5uYW1lID0gdGl0bGU7DQorICAg ICAgICB9DQorICAgICAgICBpZiAodG9vbFRpcCAhPT0gdW5kZWZpbmVkKSB7 DQorICAgICAgICAgIGNvbHVtbnNbaWR4XS50b29sVGlwID0gdG9vbFRpcDsN CisgICAgICAgIH0NCisNCisgICAgICAgIHRyaWdnZXIoc2VsZi5vbkJlZm9y ZUhlYWRlckNlbGxEZXN0cm95LCB7DQorICAgICAgICAgICJub2RlIjogJGhl YWRlclswXSwNCisgICAgICAgICAgImNvbHVtbiI6IGNvbHVtbkRlZiwNCisg ICAgICAgICAgImdyaWQiOiBzZWxmDQorICAgICAgICB9KTsNCisNCisgICAg ICAgICRoZWFkZXINCisgICAgICAgICAgICAuYXR0cigidGl0bGUiLCB0b29s VGlwIHx8ICIiKQ0KKyAgICAgICAgICAgIC5jaGlsZHJlbigpLmVxKDApLmh0 bWwodGl0bGUpOw0KKw0KKyAgICAgICAgdHJpZ2dlcihzZWxmLm9uSGVhZGVy Q2VsbFJlbmRlcmVkLCB7DQorICAgICAgICAgICJub2RlIjogJGhlYWRlclsw XSwNCisgICAgICAgICAgImNvbHVtbiI6IGNvbHVtbkRlZiwNCisgICAgICAg ICAgImdyaWQiOiBzZWxmDQorICAgICAgICB9KTsNCisgICAgICB9DQorICAg IH0NCisNCisgICAgZnVuY3Rpb24gZ2V0SGVhZGVyUm93KCkgew0KKyAgICAg IHJldHVybiAkaGVhZGVyUm93WzBdOw0KKyAgICB9DQorDQorICAgIGZ1bmN0 aW9uIGdldEZvb3RlclJvdygpIHsNCisgICAgICByZXR1cm4gJGZvb3RlclJv d1swXTsNCisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBnZXRIZWFkZXJSb3dD b2x1bW4oY29sdW1uSWQpIHsNCisgICAgICB2YXIgaWR4ID0gZ2V0Q29sdW1u SW5kZXgoY29sdW1uSWQpOw0KKyAgICAgIHZhciAkaGVhZGVyID0gJGhlYWRl clJvdy5jaGlsZHJlbigpLmVxKGlkeCk7DQorICAgICAgcmV0dXJuICRoZWFk ZXIgJiYgJGhlYWRlclswXTsNCisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBn ZXRGb290ZXJSb3dDb2x1bW4oY29sdW1uSWQpIHsNCisgICAgICB2YXIgaWR4 ID0gZ2V0Q29sdW1uSW5kZXgoY29sdW1uSWQpOw0KKyAgICAgIHZhciAkZm9v dGVyID0gJGZvb3RlclJvdy5jaGlsZHJlbigpLmVxKGlkeCk7DQorICAgICAg cmV0dXJuICRmb290ZXIgJiYgJGZvb3RlclswXTsNCisgICAgfQ0KKw0KKyAg ICBmdW5jdGlvbiBjcmVhdGVDb2x1bW5IZWFkZXJzKCkgew0KKyAgICAgIGZ1 bmN0aW9uIG9uTW91c2VFbnRlcigpIHsNCisgICAgICAgICQodGhpcykuYWRk Q2xhc3MoInVpLXN0YXRlLWhvdmVyIik7DQorICAgICAgfQ0KKw0KKyAgICAg IGZ1bmN0aW9uIG9uTW91c2VMZWF2ZSgpIHsNCisgICAgICAgICQodGhpcyku cmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWhvdmVyIik7DQorICAgICAgfQ0KKw0K KyAgICAgICRoZWFkZXJzLmZpbmQoIi5zbGljay1oZWFkZXItY29sdW1uIikN CisgICAgICAgIC5lYWNoKGZ1bmN0aW9uKCkgew0KKyAgICAgICAgICB2YXIg Y29sdW1uRGVmID0gJCh0aGlzKS5kYXRhKCJjb2x1bW4iKTsNCisgICAgICAg ICAgaWYgKGNvbHVtbkRlZikgew0KKyAgICAgICAgICAgIHRyaWdnZXIoc2Vs Zi5vbkJlZm9yZUhlYWRlckNlbGxEZXN0cm95LCB7DQorICAgICAgICAgICAg ICAibm9kZSI6IHRoaXMsDQorICAgICAgICAgICAgICAiY29sdW1uIjogY29s dW1uRGVmLA0KKyAgICAgICAgICAgICAgImdyaWQiOiBzZWxmDQorICAgICAg ICAgICAgfSk7DQorICAgICAgICAgIH0NCisgICAgICAgIH0pOw0KKyAgICAg ICRoZWFkZXJzLmVtcHR5KCk7DQorICAgICAgJGhlYWRlcnMud2lkdGgoZ2V0 SGVhZGVyc1dpZHRoKCkpOw0KKw0KKyAgICAgICRoZWFkZXJSb3cuZmluZCgi LnNsaWNrLWhlYWRlcnJvdy1jb2x1bW4iKQ0KKyAgICAgICAgLmVhY2goZnVu Y3Rpb24oKSB7DQorICAgICAgICAgIHZhciBjb2x1bW5EZWYgPSAkKHRoaXMp LmRhdGEoImNvbHVtbiIpOw0KKyAgICAgICAgICBpZiAoY29sdW1uRGVmKSB7 DQorICAgICAgICAgICAgdHJpZ2dlcihzZWxmLm9uQmVmb3JlSGVhZGVyUm93 Q2VsbERlc3Ryb3ksIHsNCisgICAgICAgICAgICAgICJub2RlIjogdGhpcywN CisgICAgICAgICAgICAgICJjb2x1bW4iOiBjb2x1bW5EZWYsDQorICAgICAg ICAgICAgICAiZ3JpZCI6IHNlbGYNCisgICAgICAgICAgICB9KTsNCisgICAg ICAgICAgfQ0KKyAgICAgICAgfSk7DQorICAgICAgJGhlYWRlclJvdy5lbXB0 eSgpOw0KKw0KKyAgICAgIGlmIChvcHRpb25zLmNyZWF0ZUZvb3RlclJvdykg ew0KKyAgICAgICAgJGZvb3RlclJvdy5maW5kKCIuc2xpY2stZm9vdGVycm93 LWNvbHVtbiIpDQorICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uKCkgew0KKyAg ICAgICAgICAgIHZhciBjb2x1bW5EZWYgPSAkKHRoaXMpLmRhdGEoImNvbHVt biIpOw0KKyAgICAgICAgICAgIGlmIChjb2x1bW5EZWYpIHsNCisgICAgICAg ICAgICAgIHRyaWdnZXIoc2VsZi5vbkJlZm9yZUZvb3RlclJvd0NlbGxEZXN0 cm95LCB7DQorICAgICAgICAgICAgICAgICJub2RlIjogdGhpcywNCisgICAg ICAgICAgICAgICAgImNvbHVtbiI6IGNvbHVtbkRlZg0KKyAgICAgICAgICAg ICAgfSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICB9KTsNCisgICAg ICAgICRmb290ZXJSb3cuZW1wdHkoKTsNCisgICAgICB9DQorDQorICAgICAg Zm9yICh2YXIgaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aDsgaSsrKSB7DQor ICAgICAgICB2YXIgbSA9IGNvbHVtbnNbaV07DQorDQorICAgICAgICB2YXIg aGVhZGVyID0gJCgiPGRpdiBjbGFzcz0ndWktc3RhdGUtZGVmYXVsdCBzbGlj ay1oZWFkZXItY29sdW1uJyAvPiIpDQorICAgICAgICAgICAgLmh0bWwoIjxz cGFuIGNsYXNzPSdzbGljay1jb2x1bW4tbmFtZSc+IiArIG0ubmFtZSArICI8 L3NwYW4+IikNCisgICAgICAgICAgICAud2lkdGgobS53aWR0aCAtIGhlYWRl ckNvbHVtbldpZHRoRGlmZikNCisgICAgICAgICAgICAuYXR0cigiaWQiLCAi IiArIHVpZCArIG0uaWQpDQorICAgICAgICAgICAgLmF0dHIoInRpdGxlIiwg bS50b29sVGlwIHx8ICIiKQ0KKyAgICAgICAgICAgIC5kYXRhKCJjb2x1bW4i LCBtKQ0KKyAgICAgICAgICAgIC5hZGRDbGFzcyhtLmhlYWRlckNzc0NsYXNz IHx8ICIiKQ0KKyAgICAgICAgICAgIC5hcHBlbmRUbygkaGVhZGVycyk7DQor DQorICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVDb2x1bW5SZW9yZGVyIHx8 IG0uc29ydGFibGUpIHsNCisgICAgICAgICAgaGVhZGVyDQorICAgICAgICAg ICAgLm9uKCdtb3VzZWVudGVyJywgb25Nb3VzZUVudGVyKQ0KKyAgICAgICAg ICAgIC5vbignbW91c2VsZWF2ZScsIG9uTW91c2VMZWF2ZSk7DQorICAgICAg ICB9DQorDQorICAgICAgICBpZiAobS5zb3J0YWJsZSkgew0KKyAgICAgICAg ICBoZWFkZXIuYWRkQ2xhc3MoInNsaWNrLWhlYWRlci1zb3J0YWJsZSIpOw0K KyAgICAgICAgICBoZWFkZXIuYXBwZW5kKCI8c3BhbiBjbGFzcz0nIiArIHNv cnRJbmRpY2F0b3JDc3NDbGFzcyArICInIC8+Iik7DQorICAgICAgICB9DQor DQorICAgICAgICB0cmlnZ2VyKHNlbGYub25IZWFkZXJDZWxsUmVuZGVyZWQs IHsNCisgICAgICAgICAgIm5vZGUiOiBoZWFkZXJbMF0sDQorICAgICAgICAg ICJjb2x1bW4iOiBtLA0KKyAgICAgICAgICAiZ3JpZCI6IHNlbGYNCisgICAg ICAgIH0pOw0KKw0KKyAgICAgICAgaWYgKG9wdGlvbnMuc2hvd0hlYWRlclJv dykgew0KKyAgICAgICAgICB2YXIgaGVhZGVyUm93Q2VsbCA9ICQoIjxkaXYg Y2xhc3M9J3VpLXN0YXRlLWRlZmF1bHQgc2xpY2staGVhZGVycm93LWNvbHVt biBsIiArIGkgKyAiIHIiICsgaSArICInPjwvZGl2PiIpDQorICAgICAgICAg ICAgICAuZGF0YSgiY29sdW1uIiwgbSkNCisgICAgICAgICAgICAgIC5hcHBl bmRUbygkaGVhZGVyUm93KTsNCisNCisgICAgICAgICAgdHJpZ2dlcihzZWxm Lm9uSGVhZGVyUm93Q2VsbFJlbmRlcmVkLCB7DQorICAgICAgICAgICAgIm5v ZGUiOiBoZWFkZXJSb3dDZWxsWzBdLA0KKyAgICAgICAgICAgICJjb2x1bW4i OiBtLA0KKyAgICAgICAgICAgICJncmlkIjogc2VsZg0KKyAgICAgICAgICB9 KTsNCisgICAgICAgIH0NCisgICAgICAgIGlmIChvcHRpb25zLmNyZWF0ZUZv b3RlclJvdyAmJiBvcHRpb25zLnNob3dGb290ZXJSb3cpIHsNCisgICAgICAg ICAgdmFyIGZvb3RlclJvd0NlbGwgPSAkKCI8ZGl2IGNsYXNzPSd1aS1zdGF0 ZS1kZWZhdWx0IHNsaWNrLWZvb3RlcnJvdy1jb2x1bW4gbCIgKyBpICAgKyAi IHIiICsgaSArICInPjwvZGl2PiIpDQorICAgICAgICAgICAgICAuZGF0YSgi Y29sdW1uIiwgbSkNCisgICAgICAgICAgICAgIC5hcHBlbmRUbygkZm9vdGVy Um93KTsNCisNCisgICAgICAgICAgdHJpZ2dlcihzZWxmLm9uRm9vdGVyUm93 Q2VsbFJlbmRlcmVkLCB7DQorICAgICAgICAgICAgIm5vZGUiOiBmb290ZXJS b3dDZWxsWzBdLA0KKyAgICAgICAgICAgICJjb2x1bW4iOiBtDQorICAgICAg ICAgIH0pOw0KKyAgICAgICAgfQ0KKyAgICAgIH0NCisNCisgICAgICBzZXRT b3J0Q29sdW1ucyhzb3J0Q29sdW1ucyk7DQorICAgICAgc2V0dXBDb2x1bW5S ZXNpemUoKTsNCisgICAgICBpZiAob3B0aW9ucy5lbmFibGVDb2x1bW5SZW9y ZGVyKSB7DQorICAgICAgICBzZXR1cENvbHVtblJlb3JkZXIoKTsNCisgICAg ICB9DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gc2V0dXBDb2x1bW5Tb3J0 KCkgew0KKyAgICAgICRoZWFkZXJzLmNsaWNrKGZ1bmN0aW9uIChlKSB7DQor ICAgICAgICAvLyB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4g alF1ZXJ5IDEuNy4xIChodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8x MTMyOCkNCisgICAgICAgIGUubWV0YUtleSA9IGUubWV0YUtleSB8fCBlLmN0 cmxLZXk7DQorDQorICAgICAgICBpZiAoJChlLnRhcmdldCkuaGFzQ2xhc3Mo InNsaWNrLXJlc2l6YWJsZS1oYW5kbGUiKSkgew0KKyAgICAgICAgICByZXR1 cm47DQorICAgICAgICB9DQorDQorICAgICAgICB2YXIgJGNvbCA9ICQoZS50 YXJnZXQpLmNsb3Nlc3QoIi5zbGljay1oZWFkZXItY29sdW1uIik7DQorICAg ICAgICBpZiAoISRjb2wubGVuZ3RoKSB7DQorICAgICAgICAgIHJldHVybjsN CisgICAgICAgIH0NCisNCisgICAgICAgIHZhciBjb2x1bW4gPSAkY29sLmRh dGEoImNvbHVtbiIpOw0KKyAgICAgICAgaWYgKGNvbHVtbi5zb3J0YWJsZSkg ew0KKyAgICAgICAgICBpZiAoIWdldEVkaXRvckxvY2soKS5jb21taXRDdXJy ZW50RWRpdCgpKSB7DQorICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAg ICB9DQorDQorICAgICAgICAgIHZhciBzb3J0Q29sdW1uID0gbnVsbDsNCisg ICAgICAgICAgdmFyIGkgPSAwOw0KKyAgICAgICAgICBmb3IgKDsgaSA8IHNv cnRDb2x1bW5zLmxlbmd0aDsgaSsrKSB7DQorICAgICAgICAgICAgaWYgKHNv cnRDb2x1bW5zW2ldLmNvbHVtbklkID09IGNvbHVtbi5pZCkgew0KKyAgICAg ICAgICAgICAgc29ydENvbHVtbiA9IHNvcnRDb2x1bW5zW2ldOw0KKyAgICAg ICAgICAgICAgc29ydENvbHVtbi5zb3J0QXNjID0gIXNvcnRDb2x1bW4uc29y dEFzYzsNCisgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgIH0N CisgICAgICAgICAgfQ0KKyAgICAgICAgICB2YXIgaGFkU29ydENvbCA9ICEh c29ydENvbHVtbjsNCisgICAgICAgICAgDQorICAgICAgICAgIGlmIChvcHRp b25zLnRyaXN0YXRlTXVsdGlDb2x1bW5Tb3J0KSB7DQorICAgICAgICAgICAg ICBpZiAoIXNvcnRDb2x1bW4pIHsgDQorICAgICAgICAgICAgICAgIHNvcnRD b2x1bW4gPSB7IGNvbHVtbklkOiBjb2x1bW4uaWQsIHNvcnRBc2M6IGNvbHVt bi5kZWZhdWx0U29ydEFzYyB9OyANCisgICAgICAgICAgICAgIH0NCisgICAg ICAgICAgICAgIGlmIChoYWRTb3J0Q29sICYmIHNvcnRDb2x1bW4uc29ydEFz Yykgew0KKyAgICAgICAgICAgICAgICAvLyB0aHJlZSBzdGF0ZTogcmVtb3Zl IHNvcnQgcmF0aGVyIHRoYW4gZ28gYmFjayB0byBBU0MNCisgICAgICAgICAg ICAgICAgc29ydENvbHVtbnMuc3BsaWNlKGksIDEpOw0KKyAgICAgICAgICAg ICAgICBzb3J0Q29sdW1uID0gbnVsbDsNCisgICAgICAgICAgICAgIH0NCisg ICAgICAgICAgICAgIGlmICghb3B0aW9ucy5tdWx0aUNvbHVtblNvcnQpIHsg c29ydENvbHVtbnMgPSBbXTsgfQ0KKyAgICAgICAgICAgICAgaWYgKHNvcnRD b2x1bW4gJiYgKCFoYWRTb3J0Q29sIHx8ICFvcHRpb25zLm11bHRpQ29sdW1u U29ydCkpIHsgDQorICAgICAgICAgICAgICAgIHNvcnRDb2x1bW5zLnB1c2go c29ydENvbHVtbik7IA0KKyAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICB9 IGVsc2Ugew0KKyAgICAgICAgICAgICAgLy8gbGVnYWN5IGJlaGF2aW91cg0K KyAgICAgICAgICAgICAgaWYgKGUubWV0YUtleSAmJiBvcHRpb25zLm11bHRp Q29sdW1uU29ydCkgew0KKyAgICAgICAgICAgICAgICBpZiAoc29ydENvbHVt bikgew0KKyAgICAgICAgICAgICAgICAgIHNvcnRDb2x1bW5zLnNwbGljZShp LCAxKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgfQ0K KyAgICAgICAgICAgICAgZWxzZSB7DQorICAgICAgICAgICAgICAgIGlmICgo IWUuc2hpZnRLZXkgJiYgIWUubWV0YUtleSkgfHwgIW9wdGlvbnMubXVsdGlD b2x1bW5Tb3J0KSB7DQorICAgICAgICAgICAgICAgICAgc29ydENvbHVtbnMg PSBbXTsNCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAg ICBpZiAoIXNvcnRDb2x1bW4pIHsNCisgICAgICAgICAgICAgICAgICBzb3J0 Q29sdW1uID0geyBjb2x1bW5JZDogY29sdW1uLmlkLCBzb3J0QXNjOiBjb2x1 bW4uZGVmYXVsdFNvcnRBc2MgfTsNCisgICAgICAgICAgICAgICAgICBzb3J0 Q29sdW1ucy5wdXNoKHNvcnRDb2x1bW4pOw0KKyAgICAgICAgICAgICAgICB9 IGVsc2UgaWYgKHNvcnRDb2x1bW5zLmxlbmd0aCA9PSAwKSB7DQorICAgICAg ICAgICAgICAgICAgc29ydENvbHVtbnMucHVzaChzb3J0Q29sdW1uKTsNCisg ICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgfSAgICAgICAgICAg ICAgDQorICAgICAgICAgIH0NCisgICAgICAgICAgDQorICAgICAgICAgIHNl dFNvcnRDb2x1bW5zKHNvcnRDb2x1bW5zKTsNCisNCisgICAgICAgICAgaWYg KHNvcnRDb2x1bW5zLmxlbmd0aCA+IDApIHsgDQorICAgICAgICAgICAgICBp ZiAoIW9wdGlvbnMubXVsdGlDb2x1bW5Tb3J0KSB7DQorICAgICAgICAgICAg ICAgIHRyaWdnZXIoc2VsZi5vblNvcnQsIHsNCisgICAgICAgICAgICAgICAg ICBtdWx0aUNvbHVtblNvcnQ6IGZhbHNlLA0KKyAgICAgICAgICAgICAgICAg IHNvcnRDb2w6IGNvbHVtbiwNCisgICAgICAgICAgICAgICAgICBzb3J0QXNj OiBzb3J0Q29sdW1uc1swXS5zb3J0QXNjLA0KKyAgICAgICAgICAgICAgICAg IGdyaWQ6IHNlbGZ9LCBlKTsNCisgICAgICAgICAgICAgIH0gZWxzZSB7DQor ICAgICAgICAgICAgICAgIHRyaWdnZXIoc2VsZi5vblNvcnQsIHsNCisgICAg ICAgICAgICAgICAgICBtdWx0aUNvbHVtblNvcnQ6IHRydWUsDQorICAgICAg ICAgICAgICAgICAgc29ydENvbHM6ICQubWFwKHNvcnRDb2x1bW5zLCBmdW5j dGlvbihjb2wpIHsNCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7c29y dENvbDogY29sdW1uc1tnZXRDb2x1bW5JbmRleChjb2wuY29sdW1uSWQpXSwg c29ydEFzYzogY29sLnNvcnRBc2MgfTsNCisgICAgICAgICAgICAgICAgICB9 KSwNCisgICAgICAgICAgICAgICAgICBncmlkOiBzZWxmfSwgZSk7DQorICAg ICAgICAgICAgICB9DQorICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAg ICB9KTsNCisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBzZXR1cENvbHVtblJl b3JkZXIoKSB7DQorICAgICAgJGhlYWRlcnMuZmlsdGVyKCI6dWktc29ydGFi bGUiKS5zb3J0YWJsZSgiZGVzdHJveSIpOw0KKyAgICAgICRoZWFkZXJzLnNv cnRhYmxlKHsNCisgICAgICAgIGNvbnRhaW5tZW50OiAicGFyZW50IiwNCisg ICAgICAgIGRpc3RhbmNlOiAzLA0KKyAgICAgICAgYXhpczogIngiLA0KKyAg ICAgICAgY3Vyc29yOiAiZGVmYXVsdCIsDQorICAgICAgICB0b2xlcmFuY2U6 ICJpbnRlcnNlY3Rpb24iLA0KKyAgICAgICAgaGVscGVyOiAiY2xvbmUiLA0K KyAgICAgICAgcGxhY2Vob2xkZXI6ICJzbGljay1zb3J0YWJsZS1wbGFjZWhv bGRlciB1aS1zdGF0ZS1kZWZhdWx0IHNsaWNrLWhlYWRlci1jb2x1bW4iLA0K KyAgICAgICAgc3RhcnQ6IGZ1bmN0aW9uIChlLCB1aSkgew0KKyAgICAgICAg ICB1aS5wbGFjZWhvbGRlci53aWR0aCh1aS5oZWxwZXIub3V0ZXJXaWR0aCgp IC0gaGVhZGVyQ29sdW1uV2lkdGhEaWZmKTsNCisgICAgICAgICAgJCh1aS5o ZWxwZXIpLmFkZENsYXNzKCJzbGljay1oZWFkZXItY29sdW1uLWFjdGl2ZSIp Ow0KKyAgICAgICAgfSwNCisgICAgICAgIGJlZm9yZVN0b3A6IGZ1bmN0aW9u IChlLCB1aSkgew0KKyAgICAgICAgICAkKHVpLmhlbHBlcikucmVtb3ZlQ2xh c3MoInNsaWNrLWhlYWRlci1jb2x1bW4tYWN0aXZlIik7DQorICAgICAgICB9 LA0KKyAgICAgICAgc3RvcDogZnVuY3Rpb24gKGUpIHsNCisgICAgICAgICAg aWYgKCFnZXRFZGl0b3JMb2NrKCkuY29tbWl0Q3VycmVudEVkaXQoKSkgew0K KyAgICAgICAgICAgICQodGhpcykuc29ydGFibGUoImNhbmNlbCIpOw0KKyAg ICAgICAgICAgIHJldHVybjsNCisgICAgICAgICAgfQ0KKw0KKyAgICAgICAg ICB2YXIgcmVvcmRlcmVkSWRzID0gJGhlYWRlcnMuc29ydGFibGUoInRvQXJy YXkiKTsNCisgICAgICAgICAgdmFyIHJlb3JkZXJlZENvbHVtbnMgPSBbXTsN CisgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZW9yZGVyZWRJZHMu bGVuZ3RoOyBpKyspIHsNCisgICAgICAgICAgICByZW9yZGVyZWRDb2x1bW5z LnB1c2goY29sdW1uc1tnZXRDb2x1bW5JbmRleChyZW9yZGVyZWRJZHNbaV0u cmVwbGFjZSh1aWQsICIiKSldKTsNCisgICAgICAgICAgfQ0KKyAgICAgICAg ICBzZXRDb2x1bW5zKHJlb3JkZXJlZENvbHVtbnMpOw0KKw0KKyAgICAgICAg ICB0cmlnZ2VyKHNlbGYub25Db2x1bW5zUmVvcmRlcmVkLCB7Z3JpZDogc2Vs Zn0pOw0KKyAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOw0KKyAgICAg ICAgICBzZXR1cENvbHVtblJlc2l6ZSgpOw0KKyAgICAgICAgfQ0KKyAgICAg IH0pOw0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIHNldHVwQ29sdW1uUmVz aXplKCkgew0KKyAgICAgIHZhciAkY29sLCBqLCBjLCBwYWdlWCwgY29sdW1u RWxlbWVudHMsIG1pblBhZ2VYLCBtYXhQYWdlWCwgZmlyc3RSZXNpemFibGUs IGxhc3RSZXNpemFibGU7DQorICAgICAgY29sdW1uRWxlbWVudHMgPSAkaGVh ZGVycy5jaGlsZHJlbigpOw0KKyAgICAgIGNvbHVtbkVsZW1lbnRzLmZpbmQo Ii5zbGljay1yZXNpemFibGUtaGFuZGxlIikucmVtb3ZlKCk7DQorICAgICAg Y29sdW1uRWxlbWVudHMuZWFjaChmdW5jdGlvbiAoaSwgZSkgew0KKyAgICAg ICAgaWYgKGNvbHVtbnNbaV0ucmVzaXphYmxlKSB7DQorICAgICAgICAgIGlm IChmaXJzdFJlc2l6YWJsZSA9PT0gdW5kZWZpbmVkKSB7DQorICAgICAgICAg ICAgZmlyc3RSZXNpemFibGUgPSBpOw0KKyAgICAgICAgICB9DQorICAgICAg ICAgIGxhc3RSZXNpemFibGUgPSBpOw0KKyAgICAgICAgfQ0KKyAgICAgIH0p Ow0KKyAgICAgIGlmIChmaXJzdFJlc2l6YWJsZSA9PT0gdW5kZWZpbmVkKSB7 DQorICAgICAgICByZXR1cm47DQorICAgICAgfQ0KKyAgICAgIGNvbHVtbkVs ZW1lbnRzLmVhY2goZnVuY3Rpb24gKGksIGUpIHsNCisgICAgICAgIGlmIChp IDwgZmlyc3RSZXNpemFibGUgfHwgKG9wdGlvbnMuZm9yY2VGaXRDb2x1bW5z ICYmIGkgPj0gbGFzdFJlc2l6YWJsZSkpIHsNCisgICAgICAgICAgcmV0dXJu Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgJGNvbCA9ICQoZSk7DQorICAgICAg ICAkKCI8ZGl2IGNsYXNzPSdzbGljay1yZXNpemFibGUtaGFuZGxlJyAvPiIp DQorICAgICAgICAgICAgLmFwcGVuZFRvKGUpDQorICAgICAgICAgICAgLm9u KCJkcmFnc3RhcnQiLCBmdW5jdGlvbiAoZSwgZGQpIHsNCisgICAgICAgICAg ICAgIGlmICghZ2V0RWRpdG9yTG9jaygpLmNvbW1pdEN1cnJlbnRFZGl0KCkp IHsNCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAg ICAgICAgfQ0KKyAgICAgICAgICAgICAgcGFnZVggPSBlLnBhZ2VYOw0KKyAg ICAgICAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5hZGRDbGFzcygic2xpY2st aGVhZGVyLWNvbHVtbi1hY3RpdmUiKTsNCisgICAgICAgICAgICAgIHZhciBz aHJpbmtMZWV3YXlPblJpZ2h0ID0gbnVsbCwgc3RyZXRjaExlZXdheU9uUmln aHQgPSBudWxsOw0KKyAgICAgICAgICAgICAgLy8gbG9jayBlYWNoIGNvbHVt bidzIHdpZHRoIG9wdGlvbiB0byBjdXJyZW50IHdpZHRoDQorICAgICAgICAg ICAgICBjb2x1bW5FbGVtZW50cy5lYWNoKGZ1bmN0aW9uIChpLCBlKSB7DQor ICAgICAgICAgICAgICAgIGNvbHVtbnNbaV0ucHJldmlvdXNXaWR0aCA9ICQo ZSkub3V0ZXJXaWR0aCgpOw0KKyAgICAgICAgICAgICAgfSk7DQorICAgICAg ICAgICAgICBpZiAob3B0aW9ucy5mb3JjZUZpdENvbHVtbnMpIHsNCisgICAg ICAgICAgICAgICAgc2hyaW5rTGVld2F5T25SaWdodCA9IDA7DQorICAgICAg ICAgICAgICAgIHN0cmV0Y2hMZWV3YXlPblJpZ2h0ID0gMDsNCisgICAgICAg ICAgICAgICAgLy8gY29sdW1zIG9uIHJpZ2h0IGFmZmVjdCBtYXhQYWdlWC9t aW5QYWdlWA0KKyAgICAgICAgICAgICAgICBmb3IgKGogPSBpICsgMTsgaiA8 IGNvbHVtbkVsZW1lbnRzLmxlbmd0aDsgaisrKSB7DQorICAgICAgICAgICAg ICAgICAgYyA9IGNvbHVtbnNbal07DQorICAgICAgICAgICAgICAgICAgaWYg KGMucmVzaXphYmxlKSB7DQorICAgICAgICAgICAgICAgICAgICBpZiAoc3Ry ZXRjaExlZXdheU9uUmlnaHQgIT09IG51bGwpIHsNCisgICAgICAgICAgICAg ICAgICAgICAgaWYgKGMubWF4V2lkdGgpIHsNCisgICAgICAgICAgICAgICAg ICAgICAgICBzdHJldGNoTGVld2F5T25SaWdodCArPSBjLm1heFdpZHRoIC0g Yy5wcmV2aW91c1dpZHRoOw0KKyAgICAgICAgICAgICAgICAgICAgICB9IGVs c2Ugew0KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmV0Y2hMZWV3YXlP blJpZ2h0ID0gbnVsbDsNCisgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAg ICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgc2hy aW5rTGVld2F5T25SaWdodCArPSBjLnByZXZpb3VzV2lkdGggLSBNYXRoLm1h eChjLm1pbldpZHRoIHx8IDAsIGFic29sdXRlQ29sdW1uTWluV2lkdGgpOw0K KyAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgfQ0KKyAg ICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgdmFyIHNocmlua0xlZXdh eU9uTGVmdCA9IDAsIHN0cmV0Y2hMZWV3YXlPbkxlZnQgPSAwOw0KKyAgICAg ICAgICAgICAgZm9yIChqID0gMDsgaiA8PSBpOyBqKyspIHsNCisgICAgICAg ICAgICAgICAgLy8gY29sdW1ucyBvbiBsZWZ0IG9ubHkgYWZmZWN0IG1pblBh Z2VYDQorICAgICAgICAgICAgICAgIGMgPSBjb2x1bW5zW2pdOw0KKyAgICAg ICAgICAgICAgICBpZiAoYy5yZXNpemFibGUpIHsNCisgICAgICAgICAgICAg ICAgICBpZiAoc3RyZXRjaExlZXdheU9uTGVmdCAhPT0gbnVsbCkgew0KKyAg ICAgICAgICAgICAgICAgICAgaWYgKGMubWF4V2lkdGgpIHsNCisgICAgICAg ICAgICAgICAgICAgICAgc3RyZXRjaExlZXdheU9uTGVmdCArPSBjLm1heFdp ZHRoIC0gYy5wcmV2aW91c1dpZHRoOw0KKyAgICAgICAgICAgICAgICAgICAg fSBlbHNlIHsNCisgICAgICAgICAgICAgICAgICAgICAgc3RyZXRjaExlZXdh eU9uTGVmdCA9IG51bGw7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAg ICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgIHNocmlua0xl ZXdheU9uTGVmdCArPSBjLnByZXZpb3VzV2lkdGggLSBNYXRoLm1heChjLm1p bldpZHRoIHx8IDAsIGFic29sdXRlQ29sdW1uTWluV2lkdGgpOw0KKyAgICAg ICAgICAgICAgICB9DQorICAgICAgICAgICAgICB9DQorICAgICAgICAgICAg ICBpZiAoc2hyaW5rTGVld2F5T25SaWdodCA9PT0gbnVsbCkgew0KKyAgICAg ICAgICAgICAgICBzaHJpbmtMZWV3YXlPblJpZ2h0ID0gMTAwMDAwOw0KKyAg ICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgaWYgKHNocmlua0xlZXdh eU9uTGVmdCA9PT0gbnVsbCkgew0KKyAgICAgICAgICAgICAgICBzaHJpbmtM ZWV3YXlPbkxlZnQgPSAxMDAwMDA7DQorICAgICAgICAgICAgICB9DQorICAg ICAgICAgICAgICBpZiAoc3RyZXRjaExlZXdheU9uUmlnaHQgPT09IG51bGwp IHsNCisgICAgICAgICAgICAgICAgc3RyZXRjaExlZXdheU9uUmlnaHQgPSAx MDAwMDA7DQorICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICBpZiAo c3RyZXRjaExlZXdheU9uTGVmdCA9PT0gbnVsbCkgew0KKyAgICAgICAgICAg ICAgICBzdHJldGNoTGVld2F5T25MZWZ0ID0gMTAwMDAwOw0KKyAgICAgICAg ICAgICAgfQ0KKyAgICAgICAgICAgICAgbWF4UGFnZVggPSBwYWdlWCArIE1h dGgubWluKHNocmlua0xlZXdheU9uUmlnaHQsIHN0cmV0Y2hMZWV3YXlPbkxl ZnQpOw0KKyAgICAgICAgICAgICAgbWluUGFnZVggPSBwYWdlWCAtIE1hdGgu bWluKHNocmlua0xlZXdheU9uTGVmdCwgc3RyZXRjaExlZXdheU9uUmlnaHQp Ow0KKyAgICAgICAgICAgIH0pDQorICAgICAgICAgICAgLm9uKCJkcmFnIiwg ZnVuY3Rpb24gKGUsIGRkKSB7DQorICAgICAgICAgICAgICB2YXIgYWN0dWFs TWluV2lkdGgsIGQgPSBNYXRoLm1pbihtYXhQYWdlWCwgTWF0aC5tYXgobWlu UGFnZVgsIGUucGFnZVgpKSAtIHBhZ2VYLCB4Ow0KKyAgICAgICAgICAgICAg aWYgKGQgPCAwKSB7IC8vIHNocmluayBjb2x1bW4NCisgICAgICAgICAgICAg ICAgeCA9IGQ7DQorICAgICAgICAgICAgICAgIGZvciAoaiA9IGk7IGogPj0g MDsgai0tKSB7DQorICAgICAgICAgICAgICAgICAgYyA9IGNvbHVtbnNbal07 DQorICAgICAgICAgICAgICAgICAgaWYgKGMucmVzaXphYmxlKSB7DQorICAg ICAgICAgICAgICAgICAgICBhY3R1YWxNaW5XaWR0aCA9IE1hdGgubWF4KGMu bWluV2lkdGggfHwgMCwgYWJzb2x1dGVDb2x1bW5NaW5XaWR0aCk7DQorICAg ICAgICAgICAgICAgICAgICBpZiAoeCAmJiBjLnByZXZpb3VzV2lkdGggKyB4 IDwgYWN0dWFsTWluV2lkdGgpIHsNCisgICAgICAgICAgICAgICAgICAgICAg eCArPSBjLnByZXZpb3VzV2lkdGggLSBhY3R1YWxNaW5XaWR0aDsNCisgICAg ICAgICAgICAgICAgICAgICAgYy53aWR0aCA9IGFjdHVhbE1pbldpZHRoOw0K KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICAg ICAgICAgICAgYy53aWR0aCA9IGMucHJldmlvdXNXaWR0aCArIHg7DQorICAg ICAgICAgICAgICAgICAgICAgIHggPSAwOw0KKyAgICAgICAgICAgICAgICAg ICAgfQ0KKyAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAg fQ0KKw0KKyAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5mb3JjZUZpdENv bHVtbnMpIHsNCisgICAgICAgICAgICAgICAgICB4ID0gLWQ7DQorICAgICAg ICAgICAgICAgICAgZm9yIChqID0gaSArIDE7IGogPCBjb2x1bW5FbGVtZW50 cy5sZW5ndGg7IGorKykgew0KKyAgICAgICAgICAgICAgICAgICAgYyA9IGNv bHVtbnNbal07DQorICAgICAgICAgICAgICAgICAgICBpZiAoYy5yZXNpemFi bGUpIHsNCisgICAgICAgICAgICAgICAgICAgICAgaWYgKHggJiYgYy5tYXhX aWR0aCAmJiAoYy5tYXhXaWR0aCAtIGMucHJldmlvdXNXaWR0aCA8IHgpKSB7 DQorICAgICAgICAgICAgICAgICAgICAgICAgeCAtPSBjLm1heFdpZHRoIC0g Yy5wcmV2aW91c1dpZHRoOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGMu d2lkdGggPSBjLm1heFdpZHRoOw0KKyAgICAgICAgICAgICAgICAgICAgICB9 IGVsc2Ugew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGMud2lkdGggPSBj LnByZXZpb3VzV2lkdGggKyB4Ow0KKyAgICAgICAgICAgICAgICAgICAgICAg IHggPSAwOw0KKyAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAg ICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAg ICAgICAgICB9DQorICAgICAgICAgICAgICB9IGVsc2UgeyAvLyBzdHJldGNo IGNvbHVtbg0KKyAgICAgICAgICAgICAgICB4ID0gZDsNCisgICAgICAgICAg ICAgICAgZm9yIChqID0gaTsgaiA+PSAwOyBqLS0pIHsNCisgICAgICAgICAg ICAgICAgICBjID0gY29sdW1uc1tqXTsNCisgICAgICAgICAgICAgICAgICBp ZiAoYy5yZXNpemFibGUpIHsNCisgICAgICAgICAgICAgICAgICAgIGlmICh4 ICYmIGMubWF4V2lkdGggJiYgKGMubWF4V2lkdGggLSBjLnByZXZpb3VzV2lk dGggPCB4KSkgew0KKyAgICAgICAgICAgICAgICAgICAgICB4IC09IGMubWF4 V2lkdGggLSBjLnByZXZpb3VzV2lkdGg7DQorICAgICAgICAgICAgICAgICAg ICAgIGMud2lkdGggPSBjLm1heFdpZHRoOw0KKyAgICAgICAgICAgICAgICAg ICAgfSBlbHNlIHsNCisgICAgICAgICAgICAgICAgICAgICAgYy53aWR0aCA9 IGMucHJldmlvdXNXaWR0aCArIHg7DQorICAgICAgICAgICAgICAgICAgICAg IHggPSAwOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAg ICAgICAgIH0NCisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAg ICAgICBpZiAob3B0aW9ucy5mb3JjZUZpdENvbHVtbnMpIHsNCisgICAgICAg ICAgICAgICAgICB4ID0gLWQ7DQorICAgICAgICAgICAgICAgICAgZm9yIChq ID0gaSArIDE7IGogPCBjb2x1bW5FbGVtZW50cy5sZW5ndGg7IGorKykgew0K KyAgICAgICAgICAgICAgICAgICAgYyA9IGNvbHVtbnNbal07DQorICAgICAg ICAgICAgICAgICAgICBpZiAoYy5yZXNpemFibGUpIHsNCisgICAgICAgICAg ICAgICAgICAgICAgYWN0dWFsTWluV2lkdGggPSBNYXRoLm1heChjLm1pbldp ZHRoIHx8IDAsIGFic29sdXRlQ29sdW1uTWluV2lkdGgpOw0KKyAgICAgICAg ICAgICAgICAgICAgICBpZiAoeCAmJiBjLnByZXZpb3VzV2lkdGggKyB4IDwg YWN0dWFsTWluV2lkdGgpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICB4 ICs9IGMucHJldmlvdXNXaWR0aCAtIGFjdHVhbE1pbldpZHRoOw0KKyAgICAg ICAgICAgICAgICAgICAgICAgIGMud2lkdGggPSBhY3R1YWxNaW5XaWR0aDsN CisgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAg ICAgICAgICAgICAgICBjLndpZHRoID0gYy5wcmV2aW91c1dpZHRoICsgeDsN CisgICAgICAgICAgICAgICAgICAgICAgICB4ID0gMDsNCisgICAgICAgICAg ICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAg ICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAg ICAgICAgfQ0KKyAgICAgICAgICAgICAgYXBwbHlDb2x1bW5IZWFkZXJXaWR0 aHMoKTsNCisgICAgICAgICAgICAgIGlmIChvcHRpb25zLnN5bmNDb2x1bW5D ZWxsUmVzaXplKSB7DQorICAgICAgICAgICAgICAgIGFwcGx5Q29sdW1uV2lk dGhzKCk7DQorICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfSkNCisg ICAgICAgICAgICAub24oImRyYWdlbmQiLCBmdW5jdGlvbiAoZSwgZGQpIHsN CisgICAgICAgICAgICAgIHZhciBuZXdXaWR0aDsNCisgICAgICAgICAgICAg ICQodGhpcykucGFyZW50KCkucmVtb3ZlQ2xhc3MoInNsaWNrLWhlYWRlci1j b2x1bW4tYWN0aXZlIik7DQorICAgICAgICAgICAgICBmb3IgKGogPSAwOyBq IDwgY29sdW1uRWxlbWVudHMubGVuZ3RoOyBqKyspIHsNCisgICAgICAgICAg ICAgICAgYyA9IGNvbHVtbnNbal07DQorICAgICAgICAgICAgICAgIG5ld1dp ZHRoID0gJChjb2x1bW5FbGVtZW50c1tqXSkub3V0ZXJXaWR0aCgpOw0KKw0K KyAgICAgICAgICAgICAgICBpZiAoYy5wcmV2aW91c1dpZHRoICE9PSBuZXdX aWR0aCAmJiBjLnJlcmVuZGVyT25SZXNpemUpIHsNCisgICAgICAgICAgICAg ICAgICBpbnZhbGlkYXRlQWxsUm93cygpOw0KKyAgICAgICAgICAgICAgICB9 DQorICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICB1cGRhdGVDYW52 YXNXaWR0aCh0cnVlKTsNCisgICAgICAgICAgICAgIHJlbmRlcigpOw0KKyAg ICAgICAgICAgICAgdHJpZ2dlcihzZWxmLm9uQ29sdW1uc1Jlc2l6ZWQsIHtn cmlkOiBzZWxmfSk7DQorICAgICAgICAgICAgfSk7DQorICAgICAgfSk7DQor ICAgIH0NCisNCisgICAgZnVuY3Rpb24gZ2V0VkJveERlbHRhKCRlbCkgew0K KyAgICAgIHZhciBwID0gWyJib3JkZXJUb3BXaWR0aCIsICJib3JkZXJCb3R0 b21XaWR0aCIsICJwYWRkaW5nVG9wIiwgInBhZGRpbmdCb3R0b20iXTsNCisg ICAgICB2YXIgZGVsdGEgPSAwOw0KKyAgICAgICQuZWFjaChwLCBmdW5jdGlv biAobiwgdmFsKSB7DQorICAgICAgICBkZWx0YSArPSBwYXJzZUZsb2F0KCRl bC5jc3ModmFsKSkgfHwgMDsNCisgICAgICB9KTsNCisgICAgICByZXR1cm4g ZGVsdGE7DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gbWVhc3VyZUNlbGxQ YWRkaW5nQW5kQm9yZGVyKCkgew0KKyAgICAgIHZhciBlbDsNCisgICAgICB2 YXIgaCA9IFsiYm9yZGVyTGVmdFdpZHRoIiwgImJvcmRlclJpZ2h0V2lkdGgi LCAicGFkZGluZ0xlZnQiLCAicGFkZGluZ1JpZ2h0Il07DQorICAgICAgdmFy IHYgPSBbImJvcmRlclRvcFdpZHRoIiwgImJvcmRlckJvdHRvbVdpZHRoIiwg InBhZGRpbmdUb3AiLCAicGFkZGluZ0JvdHRvbSJdOw0KKw0KKyAgICAgIC8v IGpxdWVyeSBwcmlvciB0byB2ZXJzaW9uIDEuOCBoYW5kbGVzIC53aWR0aCBz ZXR0ZXIvZ2V0dGVyIGFzIGEgZGlyZWN0IGNzcyB3cml0ZS9yZWFkDQorICAg ICAgLy8ganF1ZXJ5IDEuOCBjaGFuZ2VkIC53aWR0aCB0byByZWFkIHRoZSB0 cnVlIGlubmVyIGVsZW1lbnQgd2lkdGggaWYgYm94LXNpemluZyBpcyBzZXQg dG8gYm9yZGVyLWJveCwgYW5kIGludHJvZHVjZWQgYSBzZXR0ZXIgZm9yIC5v dXRlcldpZHRoDQorICAgICAgLy8gc28gZm9yIGVxdWl2YWxlbnQgZnVuY3Rp b25hbGl0eSwgcHJpb3IgdG8gMS44IHVzZSAud2lkdGgsIGFuZCBhZnRlciB1 c2UgLm91dGVyV2lkdGgNCisgICAgICB2YXIgdmVyQXJyYXkgPSAkLmZuLmpx dWVyeS5zcGxpdCgnLicpOw0KKyAgICAgIGpRdWVyeU5ld1dpZHRoQmVoYXZp b3VyID0gKHZlckFycmF5WzBdPT0xICYmIHZlckFycmF5WzFdPj04KSB8fCAg dmVyQXJyYXlbMF0gPj0yOw0KKw0KKyAgICAgIGVsID0gJCgiPGRpdiBjbGFz cz0ndWktc3RhdGUtZGVmYXVsdCBzbGljay1oZWFkZXItY29sdW1uJyBzdHls ZT0ndmlzaWJpbGl0eTpoaWRkZW4nPi08L2Rpdj4iKS5hcHBlbmRUbygkaGVh ZGVycyk7DQorICAgICAgaGVhZGVyQ29sdW1uV2lkdGhEaWZmID0gaGVhZGVy Q29sdW1uSGVpZ2h0RGlmZiA9IDA7DQorICAgICAgaWYgKGVsLmNzcygiYm94 LXNpemluZyIpICE9ICJib3JkZXItYm94IiAmJiBlbC5jc3MoIi1tb3otYm94 LXNpemluZyIpICE9ICJib3JkZXItYm94IiAmJiBlbC5jc3MoIi13ZWJraXQt Ym94LXNpemluZyIpICE9ICJib3JkZXItYm94Iikgew0KKyAgICAgICAgJC5l YWNoKGgsIGZ1bmN0aW9uIChuLCB2YWwpIHsNCisgICAgICAgICAgaGVhZGVy Q29sdW1uV2lkdGhEaWZmICs9IHBhcnNlRmxvYXQoZWwuY3NzKHZhbCkpIHx8 IDA7DQorICAgICAgICB9KTsNCisgICAgICAgICQuZWFjaCh2LCBmdW5jdGlv biAobiwgdmFsKSB7DQorICAgICAgICAgIGhlYWRlckNvbHVtbkhlaWdodERp ZmYgKz0gcGFyc2VGbG9hdChlbC5jc3ModmFsKSkgfHwgMDsNCisgICAgICAg IH0pOw0KKyAgICAgIH0NCisgICAgICBlbC5yZW1vdmUoKTsNCisNCisgICAg ICB2YXIgciA9ICQoIjxkaXYgY2xhc3M9J3NsaWNrLXJvdycgLz4iKS5hcHBl bmRUbygkY2FudmFzKTsNCisgICAgICBlbCA9ICQoIjxkaXYgY2xhc3M9J3Ns aWNrLWNlbGwnIGlkPScnIHN0eWxlPSd2aXNpYmlsaXR5OmhpZGRlbic+LTwv ZGl2PiIpLmFwcGVuZFRvKHIpOw0KKyAgICAgIGNlbGxXaWR0aERpZmYgPSBj ZWxsSGVpZ2h0RGlmZiA9IDA7DQorICAgICAgaWYgKGVsLmNzcygiYm94LXNp emluZyIpICE9ICJib3JkZXItYm94IiAmJiBlbC5jc3MoIi1tb3otYm94LXNp emluZyIpICE9ICJib3JkZXItYm94IiAmJiBlbC5jc3MoIi13ZWJraXQtYm94 LXNpemluZyIpICE9ICJib3JkZXItYm94Iikgew0KKyAgICAgICAgJC5lYWNo KGgsIGZ1bmN0aW9uIChuLCB2YWwpIHsNCisgICAgICAgICAgY2VsbFdpZHRo RGlmZiArPSBwYXJzZUZsb2F0KGVsLmNzcyh2YWwpKSB8fCAwOw0KKyAgICAg ICAgfSk7DQorICAgICAgICAkLmVhY2godiwgZnVuY3Rpb24gKG4sIHZhbCkg ew0KKyAgICAgICAgICBjZWxsSGVpZ2h0RGlmZiArPSBwYXJzZUZsb2F0KGVs LmNzcyh2YWwpKSB8fCAwOw0KKyAgICAgICAgfSk7DQorICAgICAgfQ0KKyAg ICAgIHIucmVtb3ZlKCk7DQorDQorICAgICAgYWJzb2x1dGVDb2x1bW5NaW5X aWR0aCA9IE1hdGgubWF4KGhlYWRlckNvbHVtbldpZHRoRGlmZiwgY2VsbFdp ZHRoRGlmZik7DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gY3JlYXRlQ3Nz UnVsZXMoKSB7DQorICAgICAgJHN0eWxlID0gJCgiPHN0eWxlIHR5cGU9J3Rl eHQvY3NzJyByZWw9J3N0eWxlc2hlZXQnIC8+IikuYXBwZW5kVG8oJCgiaGVh ZCIpKTsNCisgICAgICB2YXIgcm93SGVpZ2h0ID0gKG9wdGlvbnMucm93SGVp Z2h0IC0gY2VsbEhlaWdodERpZmYpOw0KKyAgICAgIHZhciBydWxlcyA9IFsN CisgICAgICAgICIuIiArIHVpZCArICIgLnNsaWNrLWhlYWRlci1jb2x1bW4g eyBsZWZ0OiAxMDAwcHg7IH0iLA0KKyAgICAgICAgIi4iICsgdWlkICsgIiAu c2xpY2stdG9wLXBhbmVsIHsgaGVpZ2h0OiIgKyBvcHRpb25zLnRvcFBhbmVs SGVpZ2h0ICsgInB4OyB9IiwNCisgICAgICAgICIuIiArIHVpZCArICIgLnNs aWNrLWhlYWRlcnJvdy1jb2x1bW5zIHsgaGVpZ2h0OiIgKyBvcHRpb25zLmhl YWRlclJvd0hlaWdodCArICJweDsgfSIsDQorICAgICAgICAiLiIgKyB1aWQg KyAiIC5zbGljay1mb290ZXJyb3ctY29sdW1ucyB7IGhlaWdodDoiICsgb3B0 aW9ucy5mb290ZXJSb3dIZWlnaHQgKyAicHg7IH0iLA0KKyAgICAgICAgIi4i ICsgdWlkICsgIiAuc2xpY2stY2VsbCB7IGhlaWdodDoiICsgcm93SGVpZ2h0 ICsgInB4OyB9IiwNCisgICAgICAgICIuIiArIHVpZCArICIgLnNsaWNrLXJv dyB7IGhlaWdodDoiICsgb3B0aW9ucy5yb3dIZWlnaHQgKyAicHg7IH0iDQor ICAgICAgXTsNCisNCisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbHVt bnMubGVuZ3RoOyBpKyspIHsNCisgICAgICAgIHJ1bGVzLnB1c2goIi4iICsg dWlkICsgIiAubCIgKyBpICsgIiB7IH0iKTsNCisgICAgICAgIHJ1bGVzLnB1 c2goIi4iICsgdWlkICsgIiAuciIgKyBpICsgIiB7IH0iKTsNCisgICAgICB9 DQorDQorICAgICAgaWYgKCRzdHlsZVswXS5zdHlsZVNoZWV0KSB7IC8vIElF DQorICAgICAgICAkc3R5bGVbMF0uc3R5bGVTaGVldC5jc3NUZXh0ID0gcnVs ZXMuam9pbigiICIpOw0KKyAgICAgIH0gZWxzZSB7DQorICAgICAgICAkc3R5 bGVbMF0uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocnVs ZXMuam9pbigiICIpKSk7DQorICAgICAgfQ0KKyAgICB9DQorDQorICAgIGZ1 bmN0aW9uIGdldENvbHVtbkNzc1J1bGVzKGlkeCkgew0KKyAgICAgIHZhciBp Ow0KKyAgICAgIGlmICghc3R5bGVzaGVldCkgew0KKyAgICAgICAgdmFyIHNo ZWV0cyA9IGRvY3VtZW50LnN0eWxlU2hlZXRzOw0KKyAgICAgICAgZm9yIChp ID0gMDsgaSA8IHNoZWV0cy5sZW5ndGg7IGkrKykgew0KKyAgICAgICAgICBp ZiAoKHNoZWV0c1tpXS5vd25lck5vZGUgfHwgc2hlZXRzW2ldLm93bmluZ0Vs ZW1lbnQpID09ICRzdHlsZVswXSkgew0KKyAgICAgICAgICAgIHN0eWxlc2hl ZXQgPSBzaGVldHNbaV07DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAg ICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIGlmICghc3R5bGVzaGVl dCkgew0KKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5k IHN0eWxlc2hlZXQuIik7DQorICAgICAgICB9DQorDQorICAgICAgICAvLyBm aW5kIGFuZCBjYWNoZSBjb2x1bW4gQ1NTIHJ1bGVzDQorICAgICAgICBjb2x1 bW5Dc3NSdWxlc0wgPSBbXTsNCisgICAgICAgIGNvbHVtbkNzc1J1bGVzUiA9 IFtdOw0KKyAgICAgICAgdmFyIGNzc1J1bGVzID0gKHN0eWxlc2hlZXQuY3Nz UnVsZXMgfHwgc3R5bGVzaGVldC5ydWxlcyk7DQorICAgICAgICB2YXIgbWF0 Y2hlcywgY29sdW1uSWR4Ow0KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGNz c1J1bGVzLmxlbmd0aDsgaSsrKSB7DQorICAgICAgICAgIHZhciBzZWxlY3Rv ciA9IGNzc1J1bGVzW2ldLnNlbGVjdG9yVGV4dDsNCisgICAgICAgICAgaWYg KG1hdGNoZXMgPSAvXC5sXGQrLy5leGVjKHNlbGVjdG9yKSkgew0KKyAgICAg ICAgICAgIGNvbHVtbklkeCA9IHBhcnNlSW50KG1hdGNoZXNbMF0uc3Vic3Ry KDIsIG1hdGNoZXNbMF0ubGVuZ3RoIC0gMiksIDEwKTsNCisgICAgICAgICAg ICBjb2x1bW5Dc3NSdWxlc0xbY29sdW1uSWR4XSA9IGNzc1J1bGVzW2ldOw0K KyAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoZXMgPSAvXC5yXGQrLy5leGVj KHNlbGVjdG9yKSkgew0KKyAgICAgICAgICAgIGNvbHVtbklkeCA9IHBhcnNl SW50KG1hdGNoZXNbMF0uc3Vic3RyKDIsIG1hdGNoZXNbMF0ubGVuZ3RoIC0g MiksIDEwKTsNCisgICAgICAgICAgICBjb2x1bW5Dc3NSdWxlc1JbY29sdW1u SWR4XSA9IGNzc1J1bGVzW2ldOw0KKyAgICAgICAgICB9DQorICAgICAgICB9 DQorICAgICAgfQ0KKw0KKyAgICAgIHJldHVybiB7DQorICAgICAgICAibGVm dCI6IGNvbHVtbkNzc1J1bGVzTFtpZHhdLA0KKyAgICAgICAgInJpZ2h0Ijog Y29sdW1uQ3NzUnVsZXNSW2lkeF0NCisgICAgICB9Ow0KKyAgICB9DQorDQor ICAgIGZ1bmN0aW9uIHJlbW92ZUNzc1J1bGVzKCkgew0KKyAgICAgICRzdHls ZS5yZW1vdmUoKTsNCisgICAgICBzdHlsZXNoZWV0ID0gbnVsbDsNCisgICAg fQ0KKw0KKyAgICBmdW5jdGlvbiBkZXN0cm95KCkgew0KKyAgICAgIGdldEVk aXRvckxvY2soKS5jYW5jZWxDdXJyZW50RWRpdCgpOw0KKw0KKyAgICAgIHRy aWdnZXIoc2VsZi5vbkJlZm9yZURlc3Ryb3ksIHtncmlkOiBzZWxmfSk7DQor DQorICAgICAgdmFyIGkgPSBwbHVnaW5zLmxlbmd0aDsNCisgICAgICB3aGls ZShpLS0pIHsNCisgICAgICAgIHVucmVnaXN0ZXJQbHVnaW4ocGx1Z2luc1tp XSk7DQorICAgICAgfQ0KKw0KKyAgICAgIGlmIChvcHRpb25zLmVuYWJsZUNv bHVtblJlb3JkZXIpIHsNCisgICAgICAgICAgJGhlYWRlcnMuZmlsdGVyKCI6 dWktc29ydGFibGUiKS5zb3J0YWJsZSgiZGVzdHJveSIpOw0KKyAgICAgIH0N CisNCisgICAgICB1bmJpbmRBbmNlc3RvclNjcm9sbEV2ZW50cygpOw0KKyAg ICAgICRjb250YWluZXIub2ZmKCIuc2xpY2tncmlkIik7DQorICAgICAgcmVt b3ZlQ3NzUnVsZXMoKTsNCisNCisgICAgICAkY2FudmFzLm9mZigiZHJhZ2lu aXQgZHJhZ3N0YXJ0IGRyYWdlbmQgZHJhZyIpOw0KKyAgICAgICRjb250YWlu ZXIuZW1wdHkoKS5yZW1vdmVDbGFzcyh1aWQpOw0KKyAgICB9DQorDQorDQor ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8NCisgICAgLy8gR2VuZXJhbA0KKw0KKyAgICBmdW5jdGlvbiB0 cmlnZ2VyKGV2dCwgYXJncywgZSkgew0KKyAgICAgIGUgPSBlIHx8IG5ldyBT bGljay5FdmVudERhdGEoKTsNCisgICAgICBhcmdzID0gYXJncyB8fCB7fTsN CisgICAgICBhcmdzLmdyaWQgPSBzZWxmOw0KKyAgICAgIHJldHVybiBldnQu bm90aWZ5KGFyZ3MsIGUsIHNlbGYpOw0KKyAgICB9DQorDQorICAgIGZ1bmN0 aW9uIGdldEVkaXRvckxvY2soKSB7DQorICAgICAgcmV0dXJuIG9wdGlvbnMu ZWRpdG9yTG9jazsNCisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBnZXRFZGl0 Q29udHJvbGxlcigpIHsNCisgICAgICByZXR1cm4gZWRpdENvbnRyb2xsZXI7 DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gZ2V0Q29sdW1uSW5kZXgoaWQp IHsNCisgICAgICByZXR1cm4gY29sdW1uc0J5SWRbaWRdOw0KKyAgICB9DQor DQorICAgIGZ1bmN0aW9uIGF1dG9zaXplQ29sdW1ucygpIHsNCisgICAgICB2 YXIgaSwgYywNCisgICAgICAgICAgd2lkdGhzID0gW10sDQorICAgICAgICAg IHNocmlua0xlZXdheSA9IDAsDQorICAgICAgICAgIHRvdGFsID0gMCwNCisg ICAgICAgICAgcHJldlRvdGFsLA0KKyAgICAgICAgICBhdmFpbFdpZHRoID0g dmlld3BvcnRIYXNWU2Nyb2xsID8gdmlld3BvcnRXIC0gc2Nyb2xsYmFyRGlt ZW5zaW9ucy53aWR0aCA6IHZpZXdwb3J0VzsNCisNCisgICAgICBmb3IgKGkg PSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkrKykgew0KKyAgICAgICAgYyA9 IGNvbHVtbnNbaV07DQorICAgICAgICB3aWR0aHMucHVzaChjLndpZHRoKTsN CisgICAgICAgIHRvdGFsICs9IGMud2lkdGg7DQorICAgICAgICBpZiAoYy5y ZXNpemFibGUpIHsNCisgICAgICAgICAgc2hyaW5rTGVld2F5ICs9IGMud2lk dGggLSBNYXRoLm1heChjLm1pbldpZHRoLCBhYnNvbHV0ZUNvbHVtbk1pbldp ZHRoKTsNCisgICAgICAgIH0NCisgICAgICB9DQorDQorICAgICAgLy8gc2hy aW5rDQorICAgICAgcHJldlRvdGFsID0gdG90YWw7DQorICAgICAgd2hpbGUg KHRvdGFsID4gYXZhaWxXaWR0aCAmJiBzaHJpbmtMZWV3YXkpIHsNCisgICAg ICAgIHZhciBzaHJpbmtQcm9wb3J0aW9uID0gKHRvdGFsIC0gYXZhaWxXaWR0 aCkgLyBzaHJpbmtMZWV3YXk7DQorICAgICAgICBmb3IgKGkgPSAwOyBpIDwg Y29sdW1ucy5sZW5ndGggJiYgdG90YWwgPiBhdmFpbFdpZHRoOyBpKyspIHsN CisgICAgICAgICAgYyA9IGNvbHVtbnNbaV07DQorICAgICAgICAgIHZhciB3 aWR0aCA9IHdpZHRoc1tpXTsNCisgICAgICAgICAgaWYgKCFjLnJlc2l6YWJs ZSB8fCB3aWR0aCA8PSBjLm1pbldpZHRoIHx8IHdpZHRoIDw9IGFic29sdXRl Q29sdW1uTWluV2lkdGgpIHsNCisgICAgICAgICAgICBjb250aW51ZTsNCisg ICAgICAgICAgfQ0KKyAgICAgICAgICB2YXIgYWJzTWluV2lkdGggPSBNYXRo Lm1heChjLm1pbldpZHRoLCBhYnNvbHV0ZUNvbHVtbk1pbldpZHRoKTsNCisg ICAgICAgICAgdmFyIHNocmlua1NpemUgPSBNYXRoLmZsb29yKHNocmlua1By b3BvcnRpb24gKiAod2lkdGggLSBhYnNNaW5XaWR0aCkpIHx8IDE7DQorICAg ICAgICAgIHNocmlua1NpemUgPSBNYXRoLm1pbihzaHJpbmtTaXplLCB3aWR0 aCAtIGFic01pbldpZHRoKTsNCisgICAgICAgICAgdG90YWwgLT0gc2hyaW5r U2l6ZTsNCisgICAgICAgICAgc2hyaW5rTGVld2F5IC09IHNocmlua1NpemU7 DQorICAgICAgICAgIHdpZHRoc1tpXSAtPSBzaHJpbmtTaXplOw0KKyAgICAg ICAgfQ0KKyAgICAgICAgaWYgKHByZXZUb3RhbCA8PSB0b3RhbCkgeyAgLy8g YXZvaWQgaW5maW5pdGUgbG9vcA0KKyAgICAgICAgICBicmVhazsNCisgICAg ICAgIH0NCisgICAgICAgIHByZXZUb3RhbCA9IHRvdGFsOw0KKyAgICAgIH0N CisNCisgICAgICAvLyBncm93DQorICAgICAgcHJldlRvdGFsID0gdG90YWw7 DQorICAgICAgd2hpbGUgKHRvdGFsIDwgYXZhaWxXaWR0aCkgew0KKyAgICAg ICAgdmFyIGdyb3dQcm9wb3J0aW9uID0gYXZhaWxXaWR0aCAvIHRvdGFsOw0K KyAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbHVtbnMubGVuZ3RoICYmIHRv dGFsIDwgYXZhaWxXaWR0aDsgaSsrKSB7DQorICAgICAgICAgIGMgPSBjb2x1 bW5zW2ldOw0KKyAgICAgICAgICB2YXIgY3VycmVudFdpZHRoID0gd2lkdGhz W2ldOw0KKyAgICAgICAgICB2YXIgZ3Jvd1NpemU7DQorDQorICAgICAgICAg IGlmICghYy5yZXNpemFibGUgfHwgYy5tYXhXaWR0aCA8PSBjdXJyZW50V2lk dGgpIHsNCisgICAgICAgICAgICBncm93U2l6ZSA9IDA7DQorICAgICAgICAg IH0gZWxzZSB7DQorICAgICAgICAgICAgZ3Jvd1NpemUgPSBNYXRoLm1pbihN YXRoLmZsb29yKGdyb3dQcm9wb3J0aW9uICogY3VycmVudFdpZHRoKSAtIGN1 cnJlbnRXaWR0aCwgKGMubWF4V2lkdGggLSBjdXJyZW50V2lkdGgpIHx8IDEw MDAwMDApIHx8IDE7DQorICAgICAgICAgIH0NCisgICAgICAgICAgdG90YWwg Kz0gZ3Jvd1NpemU7DQorICAgICAgICAgIHdpZHRoc1tpXSArPSAodG90YWwg PD0gYXZhaWxXaWR0aCA/IGdyb3dTaXplIDogMCk7DQorICAgICAgICB9DQor ICAgICAgICBpZiAocHJldlRvdGFsID49IHRvdGFsKSB7ICAvLyBhdm9pZCBp bmZpbml0ZSBsb29wDQorICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgfQ0K KyAgICAgICAgcHJldlRvdGFsID0gdG90YWw7DQorICAgICAgfQ0KKw0KKyAg ICAgIHZhciByZVJlbmRlciA9IGZhbHNlOw0KKyAgICAgIGZvciAoaSA9IDA7 IGkgPCBjb2x1bW5zLmxlbmd0aDsgaSsrKSB7DQorICAgICAgICBpZiAoY29s dW1uc1tpXS5yZXJlbmRlck9uUmVzaXplICYmIGNvbHVtbnNbaV0ud2lkdGgg IT0gd2lkdGhzW2ldKSB7DQorICAgICAgICAgIHJlUmVuZGVyID0gdHJ1ZTsN CisgICAgICAgIH0NCisgICAgICAgIGNvbHVtbnNbaV0ud2lkdGggPSB3aWR0 aHNbaV07DQorICAgICAgfQ0KKw0KKyAgICAgIGFwcGx5Q29sdW1uSGVhZGVy V2lkdGhzKCk7DQorICAgICAgdXBkYXRlQ2FudmFzV2lkdGgodHJ1ZSk7DQor ICAgICAgaWYgKHJlUmVuZGVyKSB7DQorICAgICAgICBpbnZhbGlkYXRlQWxs Um93cygpOw0KKyAgICAgICAgcmVuZGVyKCk7DQorICAgICAgfQ0KKyAgICB9 DQorDQorICAgIGZ1bmN0aW9uIGFwcGx5Q29sdW1uSGVhZGVyV2lkdGhzKCkg ew0KKyAgICAgIGlmICghaW5pdGlhbGl6ZWQpIHsgcmV0dXJuOyB9DQorICAg ICAgdmFyIGg7DQorICAgICAgZm9yICh2YXIgaSA9IDAsIGhlYWRlcnMgPSAk aGVhZGVycy5jaGlsZHJlbigpLCBpaSA9IGhlYWRlcnMubGVuZ3RoOyBpIDwg aWk7IGkrKykgew0KKyAgICAgICAgaCA9ICQoaGVhZGVyc1tpXSk7DQorICAg ICAgICBpZiAoalF1ZXJ5TmV3V2lkdGhCZWhhdmlvdXIpIHsNCisgICAgICAg ICAgICBpZiAoaC5vdXRlcldpZHRoKCkgIT09IGNvbHVtbnNbaV0ud2lkdGgp IHsNCisgICAgICAgICAgICAgIGgub3V0ZXJXaWR0aChjb2x1bW5zW2ldLndp ZHRoKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9IGVsc2Ugew0KKyAg ICAgICAgICAgIGlmIChoLndpZHRoKCkgIT09IGNvbHVtbnNbaV0ud2lkdGgg LSBoZWFkZXJDb2x1bW5XaWR0aERpZmYpIHsNCisgICAgICAgICAgICAgIGgu d2lkdGgoY29sdW1uc1tpXS53aWR0aCAtIGhlYWRlckNvbHVtbldpZHRoRGlm Zik7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgIH0NCisN CisgICAgICB1cGRhdGVDb2x1bW5DYWNoZXMoKTsNCisgICAgfQ0KKw0KKyAg ICBmdW5jdGlvbiBhcHBseUNvbHVtbldpZHRocygpIHsNCisgICAgICB2YXIg eCA9IDAsIHcsIHJ1bGU7DQorICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBj b2x1bW5zLmxlbmd0aDsgaSsrKSB7DQorICAgICAgICB3ID0gY29sdW1uc1tp XS53aWR0aDsNCisNCisgICAgICAgIHJ1bGUgPSBnZXRDb2x1bW5Dc3NSdWxl cyhpKTsNCisgICAgICAgIHJ1bGUubGVmdC5zdHlsZS5sZWZ0ID0geCArICJw eCI7DQorICAgICAgICBydWxlLnJpZ2h0LnN0eWxlLnJpZ2h0ID0gKGNhbnZh c1dpZHRoIC0geCAtIHcpICsgInB4IjsNCisNCisgICAgICAgIHggKz0gY29s dW1uc1tpXS53aWR0aDsNCisgICAgICB9DQorICAgIH0NCisNCisgICAgZnVu Y3Rpb24gc2V0U29ydENvbHVtbihjb2x1bW5JZCwgYXNjZW5kaW5nKSB7DQor ICAgICAgc2V0U29ydENvbHVtbnMoW3sgY29sdW1uSWQ6IGNvbHVtbklkLCBz b3J0QXNjOiBhc2NlbmRpbmd9XSk7DQorICAgIH0NCisNCisgICAgZnVuY3Rp b24gc2V0U29ydENvbHVtbnMoY29scykgew0KKyAgICAgIHNvcnRDb2x1bW5z ID0gY29sczsNCisgICAgICB2YXIgbnVtYmVyQ29scyA9IG9wdGlvbnMubnVt YmVyZWRNdWx0aUNvbHVtblNvcnQgJiYgc29ydENvbHVtbnMubGVuZ3RoID4g MTsNCisgICAgICB2YXIgaGVhZGVyQ29sdW1uRWxzID0gJGhlYWRlcnMuY2hp bGRyZW4oKTsNCisgICAgICB2YXIgc29ydEluZGljYXRvckVsID0gaGVhZGVy Q29sdW1uRWxzDQorICAgICAgICAgIC5yZW1vdmVDbGFzcygic2xpY2staGVh ZGVyLWNvbHVtbi1zb3J0ZWQiKQ0KKyAgICAgICAgICAuZmluZCgiLiIgKyBz b3J0SW5kaWNhdG9yQ3NzQ2xhc3MpDQorICAgICAgICAgICAgICAucmVtb3Zl Q2xhc3MoInNsaWNrLXNvcnQtaW5kaWNhdG9yLWFzYyBzbGljay1zb3J0LWlu ZGljYXRvci1kZXNjIik7DQorICAgICAgaWYgKG51bWJlckNvbHMpIHsgc29y dEluZGljYXRvckVsLnRleHQoJycpOyB9DQorDQorICAgICAgJC5lYWNoKHNv cnRDb2x1bW5zLCBmdW5jdGlvbihpLCBjb2wpIHsNCisgICAgICAgIGlmIChj b2wuc29ydEFzYyA9PSBudWxsKSB7DQorICAgICAgICAgIGNvbC5zb3J0QXNj ID0gdHJ1ZTsNCisgICAgICAgIH0NCisgICAgICAgIHZhciBjb2x1bW5JbmRl eCA9IGdldENvbHVtbkluZGV4KGNvbC5jb2x1bW5JZCk7DQorICAgICAgICBp ZiAoY29sdW1uSW5kZXggIT0gbnVsbCkgew0KKyAgICAgICAgICBzb3J0SW5k aWNhdG9yRWwgPSBoZWFkZXJDb2x1bW5FbHMuZXEoY29sdW1uSW5kZXgpDQor ICAgICAgICAgICAgICAuYWRkQ2xhc3MoInNsaWNrLWhlYWRlci1jb2x1bW4t c29ydGVkIikNCisgICAgICAgICAgICAgIC5maW5kKCIuIiArIHNvcnRJbmRp Y2F0b3JDc3NDbGFzcykNCisgICAgICAgICAgICAgICAgICAuYWRkQ2xhc3Mo Y29sLnNvcnRBc2MgPyAic2xpY2stc29ydC1pbmRpY2F0b3ItYXNjIiA6ICJz bGljay1zb3J0LWluZGljYXRvci1kZXNjIik7DQorICAgICAgICAgIGlmIChu dW1iZXJDb2xzKSB7IHNvcnRJbmRpY2F0b3JFbC50ZXh0KGkrMSk7IH0NCisg ICAgICAgIH0NCisgICAgICB9KTsNCisgICAgfQ0KKw0KKyAgICBmdW5jdGlv biBnZXRTb3J0Q29sdW1ucygpIHsNCisgICAgICByZXR1cm4gc29ydENvbHVt bnM7DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gaGFuZGxlU2VsZWN0ZWRS YW5nZXNDaGFuZ2VkKGUsIHJhbmdlcykgew0KKyAgICAgIHNlbGVjdGVkUm93 cyA9IFtdOw0KKyAgICAgIHZhciBoYXNoID0ge307DQorICAgICAgZm9yICh2 YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHsNCisgICAgICAg IGZvciAodmFyIGogPSByYW5nZXNbaV0uZnJvbVJvdzsgaiA8PSByYW5nZXNb aV0udG9Sb3c7IGorKykgew0KKyAgICAgICAgICBpZiAoIWhhc2hbal0pIHsg IC8vIHByZXZlbnQgZHVwbGljYXRlcw0KKyAgICAgICAgICAgIHNlbGVjdGVk Um93cy5wdXNoKGopOw0KKyAgICAgICAgICAgIGhhc2hbal0gPSB7fTsNCisg ICAgICAgICAgfQ0KKyAgICAgICAgICBmb3IgKHZhciBrID0gcmFuZ2VzW2ld LmZyb21DZWxsOyBrIDw9IHJhbmdlc1tpXS50b0NlbGw7IGsrKykgew0KKyAg ICAgICAgICAgIGlmIChjYW5DZWxsQmVTZWxlY3RlZChqLCBrKSkgew0KKyAg ICAgICAgICAgICAgaGFzaFtqXVtjb2x1bW5zW2tdLmlkXSA9IG9wdGlvbnMu c2VsZWN0ZWRDZWxsQ3NzQ2xhc3M7DQorICAgICAgICAgICAgfQ0KKyAgICAg ICAgICB9DQorICAgICAgICB9DQorICAgICAgfQ0KKw0KKyAgICAgIHNldENl bGxDc3NTdHlsZXMob3B0aW9ucy5zZWxlY3RlZENlbGxDc3NDbGFzcywgaGFz aCk7DQorDQorICAgICAgdHJpZ2dlcihzZWxmLm9uU2VsZWN0ZWRSb3dzQ2hh bmdlZCwge3Jvd3M6IGdldFNlbGVjdGVkUm93cygpLCBncmlkOiBzZWxmfSwg ZSk7DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gZ2V0Q29sdW1ucygpIHsN CisgICAgICByZXR1cm4gY29sdW1uczsNCisgICAgfQ0KKw0KKyAgICBmdW5j dGlvbiB1cGRhdGVDb2x1bW5DYWNoZXMoKSB7DQorICAgICAgLy8gUHJlLWNh bGN1bGF0ZSBjZWxsIGJvdW5kYXJpZXMuDQorICAgICAgY29sdW1uUG9zTGVm dCA9IFtdOw0KKyAgICAgIGNvbHVtblBvc1JpZ2h0ID0gW107DQorICAgICAg dmFyIHggPSAwOw0KKyAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGNvbHVt bnMubGVuZ3RoOyBpIDwgaWk7IGkrKykgew0KKyAgICAgICAgY29sdW1uUG9z TGVmdFtpXSA9IHg7DQorICAgICAgICBjb2x1bW5Qb3NSaWdodFtpXSA9IHgg KyBjb2x1bW5zW2ldLndpZHRoOw0KKyAgICAgICAgeCArPSBjb2x1bW5zW2ld LndpZHRoOw0KKyAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBz ZXRDb2x1bW5zKGNvbHVtbkRlZmluaXRpb25zKSB7DQorICAgICAgY29sdW1u cyA9IGNvbHVtbkRlZmluaXRpb25zOw0KKw0KKyAgICAgIGNvbHVtbnNCeUlk ID0ge307DQorICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2x1bW5zLmxl bmd0aDsgaSsrKSB7DQorICAgICAgICB2YXIgbSA9IGNvbHVtbnNbaV0gPSAk LmV4dGVuZCh7fSwgY29sdW1uRGVmYXVsdHMsIGNvbHVtbnNbaV0pOw0KKyAg ICAgICAgY29sdW1uc0J5SWRbbS5pZF0gPSBpOw0KKyAgICAgICAgaWYgKG0u bWluV2lkdGggJiYgbS53aWR0aCA8IG0ubWluV2lkdGgpIHsNCisgICAgICAg ICAgbS53aWR0aCA9IG0ubWluV2lkdGg7DQorICAgICAgICB9DQorICAgICAg ICBpZiAobS5tYXhXaWR0aCAmJiBtLndpZHRoID4gbS5tYXhXaWR0aCkgew0K KyAgICAgICAgICBtLndpZHRoID0gbS5tYXhXaWR0aDsNCisgICAgICAgIH0N CisgICAgICB9DQorDQorICAgICAgdXBkYXRlQ29sdW1uQ2FjaGVzKCk7DQor DQorICAgICAgaWYgKGluaXRpYWxpemVkKSB7DQorICAgICAgICBpbnZhbGlk YXRlQWxsUm93cygpOw0KKyAgICAgICAgY3JlYXRlQ29sdW1uSGVhZGVycygp Ow0KKyAgICAgICAgcmVtb3ZlQ3NzUnVsZXMoKTsNCisgICAgICAgIGNyZWF0 ZUNzc1J1bGVzKCk7DQorICAgICAgICByZXNpemVDYW52YXMoKTsNCisgICAg ICAgIGFwcGx5Q29sdW1uV2lkdGhzKCk7DQorICAgICAgICBoYW5kbGVTY3Jv bGwoKTsNCisgICAgICB9DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gZ2V0 T3B0aW9ucygpIHsNCisgICAgICByZXR1cm4gb3B0aW9uczsNCisgICAgfQ0K Kw0KKyAgICBmdW5jdGlvbiBzZXRPcHRpb25zKGFyZ3MsIHN1cHByZXNzUmVu ZGVyKSB7DQorICAgICAgaWYgKCFnZXRFZGl0b3JMb2NrKCkuY29tbWl0Q3Vy cmVudEVkaXQoKSkgew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICAgIH0NCisN CisgICAgICBtYWtlQWN0aXZlQ2VsbE5vcm1hbCgpOw0KKw0KKyAgICAgIGlm IChvcHRpb25zLmVuYWJsZUFkZFJvdyAhPT0gYXJncy5lbmFibGVBZGRSb3cp IHsNCisgICAgICAgIGludmFsaWRhdGVSb3coZ2V0RGF0YUxlbmd0aCgpKTsN CisgICAgICB9DQorDQorICAgICAgb3B0aW9ucyA9ICQuZXh0ZW5kKG9wdGlv bnMsIGFyZ3MpOw0KKyAgICAgIHZhbGlkYXRlQW5kRW5mb3JjZU9wdGlvbnMo KTsNCisNCisgICAgICAkdmlld3BvcnQuY3NzKCJvdmVyZmxvdy15Iiwgb3B0 aW9ucy5hdXRvSGVpZ2h0ID8gImhpZGRlbiIgOiAiYXV0byIpOw0KKyAgICAg IGlmICghc3VwcHJlc3NSZW5kZXIpIHsgcmVuZGVyKCk7IH0NCisgICAgfQ0K Kw0KKyAgICBmdW5jdGlvbiB2YWxpZGF0ZUFuZEVuZm9yY2VPcHRpb25zKCkg ew0KKyAgICAgIGlmIChvcHRpb25zLmF1dG9IZWlnaHQpIHsNCisgICAgICAg IG9wdGlvbnMubGVhdmVTcGFjZUZvck5ld1Jvd3MgPSBmYWxzZTsNCisgICAg ICB9DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gc2V0RGF0YShuZXdEYXRh LCBzY3JvbGxUb1RvcCkgew0KKyAgICAgIGRhdGEgPSBuZXdEYXRhOw0KKyAg ICAgIGludmFsaWRhdGVBbGxSb3dzKCk7DQorICAgICAgdXBkYXRlUm93Q291 bnQoKTsNCisgICAgICBpZiAoc2Nyb2xsVG9Ub3ApIHsNCisgICAgICAgIHNj cm9sbFRvKDApOw0KKyAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBmdW5jdGlv biBnZXREYXRhKCkgew0KKyAgICAgIHJldHVybiBkYXRhOw0KKyAgICB9DQor DQorICAgIGZ1bmN0aW9uIGdldERhdGFMZW5ndGgoKSB7DQorICAgICAgaWYg KGRhdGEuZ2V0TGVuZ3RoKSB7DQorICAgICAgICByZXR1cm4gZGF0YS5nZXRM ZW5ndGgoKTsNCisgICAgICB9IGVsc2Ugew0KKyAgICAgICAgcmV0dXJuIGRh dGEubGVuZ3RoOw0KKyAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBmdW5jdGlv biBnZXREYXRhTGVuZ3RoSW5jbHVkaW5nQWRkTmV3KCkgew0KKyAgICAgIHJl dHVybiBnZXREYXRhTGVuZ3RoKCkgKyAoIW9wdGlvbnMuZW5hYmxlQWRkUm93 ID8gMA0KKyAgICAgICAgOiAoIXBhZ2luZ0FjdGl2ZSB8fCBwYWdpbmdJc0xh c3RQYWdlID8gMSA6IDApDQorICAgICAgKTsNCisgICAgfQ0KKw0KKyAgICBm dW5jdGlvbiBnZXREYXRhSXRlbShpKSB7DQorICAgICAgaWYgKGRhdGEuZ2V0 SXRlbSkgew0KKyAgICAgICAgcmV0dXJuIGRhdGEuZ2V0SXRlbShpKTsNCisg ICAgICB9IGVsc2Ugew0KKyAgICAgICAgcmV0dXJuIGRhdGFbaV07DQorICAg ICAgfQ0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIGdldFRvcFBhbmVsKCkg ew0KKyAgICAgIHJldHVybiAkdG9wUGFuZWxbMF07DQorICAgIH0NCisNCisg ICAgZnVuY3Rpb24gc2V0VG9wUGFuZWxWaXNpYmlsaXR5KHZpc2libGUpIHsN CisgICAgICBpZiAob3B0aW9ucy5zaG93VG9wUGFuZWwgIT0gdmlzaWJsZSkg ew0KKyAgICAgICAgb3B0aW9ucy5zaG93VG9wUGFuZWwgPSB2aXNpYmxlOw0K KyAgICAgICAgaWYgKHZpc2libGUpIHsNCisgICAgICAgICAgJHRvcFBhbmVs U2Nyb2xsZXIuc2xpZGVEb3duKCJmYXN0IiwgcmVzaXplQ2FudmFzKTsNCisg ICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICR0b3BQYW5lbFNjcm9sbGVy LnNsaWRlVXAoImZhc3QiLCByZXNpemVDYW52YXMpOw0KKyAgICAgICAgfQ0K KyAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBzZXRIZWFkZXJS b3dWaXNpYmlsaXR5KHZpc2libGUpIHsNCisgICAgICBpZiAob3B0aW9ucy5z aG93SGVhZGVyUm93ICE9IHZpc2libGUpIHsNCisgICAgICAgIG9wdGlvbnMu c2hvd0hlYWRlclJvdyA9IHZpc2libGU7DQorICAgICAgICBpZiAodmlzaWJs ZSkgew0KKyAgICAgICAgICAkaGVhZGVyUm93U2Nyb2xsZXIuc2xpZGVEb3du KCJmYXN0IiwgcmVzaXplQ2FudmFzKTsNCisgICAgICAgIH0gZWxzZSB7DQor ICAgICAgICAgICRoZWFkZXJSb3dTY3JvbGxlci5zbGlkZVVwKCJmYXN0Iiwg cmVzaXplQ2FudmFzKTsNCisgICAgICAgIH0NCisgICAgICB9DQorICAgIH0N CisNCisgICAgZnVuY3Rpb24gc2V0Rm9vdGVyUm93VmlzaWJpbGl0eSh2aXNp YmxlKSB7DQorICAgICAgaWYgKG9wdGlvbnMuc2hvd0Zvb3RlclJvdyAhPSB2 aXNpYmxlKSB7DQorICAgICAgICBvcHRpb25zLnNob3dGb290ZXJSb3cgPSB2 aXNpYmxlOw0KKyAgICAgICAgaWYgKHZpc2libGUpIHsNCisgICAgICAgICAg JGZvb3RlclJvd1Njcm9sbGVyLnNsaWRlRG93bigiZmFzdCIsIHJlc2l6ZUNh bnZhcyk7DQorICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAkZm9vdGVy Um93U2Nyb2xsZXIuc2xpZGVVcCgiZmFzdCIsIHJlc2l6ZUNhbnZhcyk7DQor ICAgICAgICB9DQorICAgICAgfQ0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9u IGdldENvbnRhaW5lck5vZGUoKSB7DQorICAgICAgcmV0dXJuICRjb250YWlu ZXIuZ2V0KDApOw0KKyAgICB9DQorDQorICAgIC8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisgICAgLy8gUmVu ZGVyaW5nIC8gU2Nyb2xsaW5nDQorDQorICAgIGZ1bmN0aW9uIGdldFJvd1Rv cChyb3cpIHsNCisgICAgICByZXR1cm4gb3B0aW9ucy5yb3dIZWlnaHQgKiBy b3cgLSBvZmZzZXQ7DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gZ2V0Um93 RnJvbVBvc2l0aW9uKHkpIHsNCisgICAgICByZXR1cm4gTWF0aC5mbG9vcigo eSArIG9mZnNldCkgLyBvcHRpb25zLnJvd0hlaWdodCk7DQorICAgIH0NCisN CisgICAgZnVuY3Rpb24gc2Nyb2xsVG8oeSkgew0KKyAgICAgIHkgPSBNYXRo Lm1heCh5LCAwKTsNCisgICAgICB5ID0gTWF0aC5taW4oeSwgdGggLSB2aWV3 cG9ydEggKyAodmlld3BvcnRIYXNIU2Nyb2xsID8gc2Nyb2xsYmFyRGltZW5z aW9ucy5oZWlnaHQgOiAwKSk7DQorDQorICAgICAgdmFyIG9sZE9mZnNldCA9 IG9mZnNldDsNCisNCisgICAgICBwYWdlID0gTWF0aC5taW4obiAtIDEsIE1h dGguZmxvb3IoeSAvIHBoKSk7DQorICAgICAgb2Zmc2V0ID0gTWF0aC5yb3Vu ZChwYWdlICogY2opOw0KKyAgICAgIHZhciBuZXdTY3JvbGxUb3AgPSB5IC0g b2Zmc2V0Ow0KKw0KKyAgICAgIGlmIChvZmZzZXQgIT0gb2xkT2Zmc2V0KSB7 DQorICAgICAgICB2YXIgcmFuZ2UgPSBnZXRWaXNpYmxlUmFuZ2UobmV3U2Ny b2xsVG9wKTsNCisgICAgICAgIGNsZWFudXBSb3dzKHJhbmdlKTsNCisgICAg ICAgIHVwZGF0ZVJvd1Bvc2l0aW9ucygpOw0KKyAgICAgIH0NCisNCisgICAg ICBpZiAocHJldlNjcm9sbFRvcCAhPSBuZXdTY3JvbGxUb3ApIHsNCisgICAg ICAgIHZTY3JvbGxEaXIgPSAocHJldlNjcm9sbFRvcCArIG9sZE9mZnNldCA8 IG5ld1Njcm9sbFRvcCArIG9mZnNldCkgPyAxIDogLTE7DQorICAgICAgICAk dmlld3BvcnRbMF0uc2Nyb2xsVG9wID0gKGxhc3RSZW5kZXJlZFNjcm9sbFRv cCA9IHNjcm9sbFRvcCA9IHByZXZTY3JvbGxUb3AgPSBuZXdTY3JvbGxUb3Ap Ow0KKw0KKyAgICAgICAgdHJpZ2dlcihzZWxmLm9uVmlld3BvcnRDaGFuZ2Vk LCB7Z3JpZDogc2VsZn0pOw0KKyAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBm dW5jdGlvbiBkZWZhdWx0Rm9ybWF0dGVyKHJvdywgY2VsbCwgdmFsdWUsIGNv bHVtbkRlZiwgZGF0YUNvbnRleHQpIHsNCisgICAgICBpZiAodmFsdWUgPT0g bnVsbCkgew0KKyAgICAgICAgcmV0dXJuICIiOw0KKyAgICAgIH0gZWxzZSB7 DQorICAgICAgICByZXR1cm4gKHZhbHVlICsgIiIpLnJlcGxhY2UoLyYvZywi JmFtcDsiKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZn dDsiKTsNCisgICAgICB9DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gZ2V0 Rm9ybWF0dGVyKHJvdywgY29sdW1uKSB7DQorICAgICAgdmFyIHJvd01ldGFk YXRhID0gZGF0YS5nZXRJdGVtTWV0YWRhdGEgJiYgZGF0YS5nZXRJdGVtTWV0 YWRhdGEocm93KTsNCisNCisgICAgICAvLyBsb29rIHVwIGJ5IGlkLCB0aGVu IGluZGV4DQorICAgICAgdmFyIGNvbHVtbk92ZXJyaWRlcyA9IHJvd01ldGFk YXRhICYmDQorICAgICAgICAgIHJvd01ldGFkYXRhLmNvbHVtbnMgJiYNCisg ICAgICAgICAgKHJvd01ldGFkYXRhLmNvbHVtbnNbY29sdW1uLmlkXSB8fCBy b3dNZXRhZGF0YS5jb2x1bW5zW2dldENvbHVtbkluZGV4KGNvbHVtbi5pZCld KTsNCisNCisgICAgICByZXR1cm4gKGNvbHVtbk92ZXJyaWRlcyAmJiBjb2x1 bW5PdmVycmlkZXMuZm9ybWF0dGVyKSB8fA0KKyAgICAgICAgICAocm93TWV0 YWRhdGEgJiYgcm93TWV0YWRhdGEuZm9ybWF0dGVyKSB8fA0KKyAgICAgICAg ICBjb2x1bW4uZm9ybWF0dGVyIHx8DQorICAgICAgICAgIChvcHRpb25zLmZv cm1hdHRlckZhY3RvcnkgJiYgb3B0aW9ucy5mb3JtYXR0ZXJGYWN0b3J5Lmdl dEZvcm1hdHRlcihjb2x1bW4pKSB8fA0KKyAgICAgICAgICBvcHRpb25zLmRl ZmF1bHRGb3JtYXR0ZXI7DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gZ2V0 RWRpdG9yKHJvdywgY2VsbCkgew0KKyAgICAgIHZhciBjb2x1bW4gPSBjb2x1 bW5zW2NlbGxdOw0KKyAgICAgIHZhciByb3dNZXRhZGF0YSA9IGRhdGEuZ2V0 SXRlbU1ldGFkYXRhICYmIGRhdGEuZ2V0SXRlbU1ldGFkYXRhKHJvdyk7DQor ICAgICAgdmFyIGNvbHVtbk1ldGFkYXRhID0gcm93TWV0YWRhdGEgJiYgcm93 TWV0YWRhdGEuY29sdW1uczsNCisNCisgICAgICBpZiAoY29sdW1uTWV0YWRh dGEgJiYgY29sdW1uTWV0YWRhdGFbY29sdW1uLmlkXSAmJiBjb2x1bW5NZXRh ZGF0YVtjb2x1bW4uaWRdLmVkaXRvciAhPT0gdW5kZWZpbmVkKSB7DQorICAg ICAgICByZXR1cm4gY29sdW1uTWV0YWRhdGFbY29sdW1uLmlkXS5lZGl0b3I7 DQorICAgICAgfQ0KKyAgICAgIGlmIChjb2x1bW5NZXRhZGF0YSAmJiBjb2x1 bW5NZXRhZGF0YVtjZWxsXSAmJiBjb2x1bW5NZXRhZGF0YVtjZWxsXS5lZGl0 b3IgIT09IHVuZGVmaW5lZCkgew0KKyAgICAgICAgcmV0dXJuIGNvbHVtbk1l dGFkYXRhW2NlbGxdLmVkaXRvcjsNCisgICAgICB9DQorDQorICAgICAgcmV0 dXJuIGNvbHVtbi5lZGl0b3IgfHwgKG9wdGlvbnMuZWRpdG9yRmFjdG9yeSAm JiBvcHRpb25zLmVkaXRvckZhY3RvcnkuZ2V0RWRpdG9yKGNvbHVtbikpOw0K KyAgICB9DQorDQorICAgIGZ1bmN0aW9uIGdldERhdGFJdGVtVmFsdWVGb3JD b2x1bW4oaXRlbSwgY29sdW1uRGVmKSB7DQorICAgICAgaWYgKG9wdGlvbnMu ZGF0YUl0ZW1Db2x1bW5WYWx1ZUV4dHJhY3Rvcikgew0KKyAgICAgICAgcmV0 dXJuIG9wdGlvbnMuZGF0YUl0ZW1Db2x1bW5WYWx1ZUV4dHJhY3RvcihpdGVt LCBjb2x1bW5EZWYpOw0KKyAgICAgIH0NCisgICAgICByZXR1cm4gaXRlbVtj b2x1bW5EZWYuZmllbGRdOw0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIGFw cGVuZFJvd0h0bWwoc3RyaW5nQXJyYXksIHJvdywgcmFuZ2UsIGRhdGFMZW5n dGgpIHsNCisgICAgICB2YXIgZCA9IGdldERhdGFJdGVtKHJvdyk7DQorICAg ICAgdmFyIGRhdGFMb2FkaW5nID0gcm93IDwgZGF0YUxlbmd0aCAmJiAhZDsN CisgICAgICB2YXIgcm93Q3NzID0gInNsaWNrLXJvdyIgKw0KKyAgICAgICAg ICAoZGF0YUxvYWRpbmcgPyAiIGxvYWRpbmciIDogIiIpICsNCisgICAgICAg ICAgKHJvdyA9PT0gYWN0aXZlUm93ID8gIiBhY3RpdmUiIDogIiIpICsNCisg ICAgICAgICAgKHJvdyAlIDIgPT0gMSA/ICIgb2RkIiA6ICIgZXZlbiIpOw0K Kw0KKyAgICAgIGlmICghZCkgew0KKyAgICAgICAgcm93Q3NzICs9ICIgIiAr IG9wdGlvbnMuYWRkTmV3Um93Q3NzQ2xhc3M7DQorICAgICAgfQ0KKw0KKyAg ICAgIHZhciBtZXRhZGF0YSA9IGRhdGEuZ2V0SXRlbU1ldGFkYXRhICYmIGRh dGEuZ2V0SXRlbU1ldGFkYXRhKHJvdyk7DQorDQorICAgICAgaWYgKG1ldGFk YXRhICYmIG1ldGFkYXRhLmNzc0NsYXNzZXMpIHsNCisgICAgICAgIHJvd0Nz cyArPSAiICIgKyBtZXRhZGF0YS5jc3NDbGFzc2VzOw0KKyAgICAgIH0NCisN CisgICAgICBzdHJpbmdBcnJheS5wdXNoKCI8ZGl2IGNsYXNzPSd1aS13aWRn ZXQtY29udGVudCAiICsgcm93Q3NzICsgIicgc3R5bGU9J3RvcDoiICsgZ2V0 Um93VG9wKHJvdykgKyAicHgnPiIpOw0KKw0KKyAgICAgIHZhciBjb2xzcGFu LCBtOw0KKyAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGNvbHVtbnMubGVu Z3RoOyBpIDwgaWk7IGkrKykgew0KKyAgICAgICAgbSA9IGNvbHVtbnNbaV07 DQorICAgICAgICBjb2xzcGFuID0gMTsNCisgICAgICAgIGlmIChtZXRhZGF0 YSAmJiBtZXRhZGF0YS5jb2x1bW5zKSB7DQorICAgICAgICAgIHZhciBjb2x1 bW5EYXRhID0gbWV0YWRhdGEuY29sdW1uc1ttLmlkXSB8fCBtZXRhZGF0YS5j b2x1bW5zW2ldOw0KKyAgICAgICAgICBjb2xzcGFuID0gKGNvbHVtbkRhdGEg JiYgY29sdW1uRGF0YS5jb2xzcGFuKSB8fCAxOw0KKyAgICAgICAgICBpZiAo Y29sc3BhbiA9PT0gIioiKSB7DQorICAgICAgICAgICAgY29sc3BhbiA9IGlp IC0gaTsNCisgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAg Ly8gRG8gbm90IHJlbmRlciBjZWxscyBvdXRzaWRlIG9mIHRoZSB2aWV3cG9y dC4NCisgICAgICAgIGlmIChjb2x1bW5Qb3NSaWdodFtNYXRoLm1pbihpaSAt IDEsIGkgKyBjb2xzcGFuIC0gMSldID4gcmFuZ2UubGVmdFB4KSB7DQorICAg ICAgICAgIGlmIChjb2x1bW5Qb3NMZWZ0W2ldID4gcmFuZ2UucmlnaHRQeCkg ew0KKyAgICAgICAgICAgIC8vIEFsbCBjb2x1bW5zIHRvIHRoZSByaWdodCBh cmUgb3V0c2lkZSB0aGUgcmFuZ2UuDQorICAgICAgICAgICAgYnJlYWs7DQor ICAgICAgICAgIH0NCisNCisgICAgICAgICAgYXBwZW5kQ2VsbEh0bWwoc3Ry aW5nQXJyYXksIHJvdywgaSwgY29sc3BhbiwgZCk7DQorICAgICAgICB9DQor DQorICAgICAgICBpZiAoY29sc3BhbiA+IDEpIHsNCisgICAgICAgICAgaSAr PSAoY29sc3BhbiAtIDEpOw0KKyAgICAgICAgfQ0KKyAgICAgIH0NCisNCisg ICAgICBzdHJpbmdBcnJheS5wdXNoKCI8L2Rpdj4iKTsNCisgICAgfQ0KKw0K KyAgICBmdW5jdGlvbiBhcHBlbmRDZWxsSHRtbChzdHJpbmdBcnJheSwgcm93 LCBjZWxsLCBjb2xzcGFuLCBpdGVtKSB7DQorICAgICAgLy8gc3RyaW5nQXJy YXk6IHN0cmluZ0J1aWxkZXIgY29udGFpbmluZyB0aGUgSFRNTCBwYXJ0cw0K KyAgICAgIC8vIHJvdywgY2VsbDogcm93IGFuZCBjb2x1bW4gaW5kZXgNCisg ICAgICAvLyBjb2xzcGFuOiBIVE1MIGNvbHNwYW4NCisgICAgICAvLyBpdGVt OiBncmlkIGRhdGEgZm9yIHJvdw0KKw0KKyAgICAgIHZhciBtID0gY29sdW1u c1tjZWxsXTsNCisgICAgICB2YXIgY2VsbENzcyA9ICJzbGljay1jZWxsIGwi ICsgY2VsbCArICIgciIgKyBNYXRoLm1pbihjb2x1bW5zLmxlbmd0aCAtIDEs IGNlbGwgKyBjb2xzcGFuIC0gMSkgKw0KKyAgICAgICAgICAobS5jc3NDbGFz cyA/ICIgIiArIG0uY3NzQ2xhc3MgOiAiIik7DQorICAgICAgaWYgKHJvdyA9 PT0gYWN0aXZlUm93ICYmIGNlbGwgPT09IGFjdGl2ZUNlbGwpIHsNCisgICAg ICAgIGNlbGxDc3MgKz0gKCIgYWN0aXZlIik7DQorICAgICAgfQ0KKw0KKyAg ICAgIC8vIFRPRE86ICBtZXJnZSB0aGVtIHRvZ2V0aGVyIGluIHRoZSBzZXR0 ZXINCisgICAgICBmb3IgKHZhciBrZXkgaW4gY2VsbENzc0NsYXNzZXMpIHsN CisgICAgICAgIGlmIChjZWxsQ3NzQ2xhc3Nlc1trZXldW3Jvd10gJiYgY2Vs bENzc0NsYXNzZXNba2V5XVtyb3ddW20uaWRdKSB7DQorICAgICAgICAgIGNl bGxDc3MgKz0gKCIgIiArIGNlbGxDc3NDbGFzc2VzW2tleV1bcm93XVttLmlk XSk7DQorICAgICAgICB9DQorICAgICAgfQ0KKw0KKyAgICAgIHZhciB2YWx1 ZSA9IG51bGw7DQorICAgICAgaWYgKGl0ZW0pIHsgdmFsdWUgPSBnZXREYXRh SXRlbVZhbHVlRm9yQ29sdW1uKGl0ZW0sIG0pOyB9DQorICAgICAgdmFyIGZv cm1hdHRlclJlc3VsdCA9ICBnZXRGb3JtYXR0ZXIocm93LCBtKShyb3csIGNl bGwsIHZhbHVlLCBtLCBpdGVtKTsNCisgICAgICANCisgICAgICAvLyBnZXQg YWRkbCBjc3MgY2xhc3MgbmFtZXMgZnJvbSBvYmplY3QgdHlwZSBmb3JtYXR0 ZXIgcmV0dXJuIGFuZCBmcm9tIHN0cmluZyB0eXBlIHJldHVybiBvZiBvbkJl Zm9yZUFwcGVuZENlbGwNCisgICAgICB2YXIgYWRkbENzc0NsYXNzZXMgPSB0 cmlnZ2VyKHNlbGYub25CZWZvcmVBcHBlbmRDZWxsLCB7IHJvdzogcm93LCBj ZWxsOiBjZWxsLCBncmlkOiBzZWxmLCB2YWx1ZTogdmFsdWUsIGRhdGFDb250 ZXh0OiBpdGVtIH0pIHx8ICcnOw0KKyAgICAgIGFkZGxDc3NDbGFzc2VzICs9 IChmb3JtYXR0ZXJSZXN1bHQuYWRkQ2xhc3NlcyA/IChhZGRsQ3NzQ2xhc3Nl cyA/ICcgJyA6ICcnKSArIGZvcm1hdHRlclJlc3VsdC5hZGRDbGFzc2VzIDog JycpOw0KKyAgICAgIA0KKyAgICAgIHN0cmluZ0FycmF5LnB1c2goIjxkaXYg Y2xhc3M9JyIgKyBjZWxsQ3NzICsgKGFkZGxDc3NDbGFzc2VzID8gJyAnICsg YWRkbENzc0NsYXNzZXMgOiAnJykgKyAiJz4iKTsNCisNCisgICAgICAvLyBp ZiB0aGVyZSBpcyBhIGNvcnJlc3BvbmRpbmcgcm93IChpZiBub3QsIHRoaXMg aXMgdGhlIEFkZCBOZXcgcm93IG9yIHRoaXMgZGF0YSBoYXNuJ3QgYmVlbiBs b2FkZWQgeWV0KQ0KKyAgICAgIGlmIChpdGVtKSB7DQorICAgICAgICBzdHJp bmdBcnJheS5wdXNoKHR5cGVvZiBmb3JtYXR0ZXJSZXN1bHQgPT09ICdzdHJp bmcnID8gZm9ybWF0dGVyUmVzdWx0IDogZm9ybWF0dGVyUmVzdWx0LnRleHQp Ow0KKyAgICAgIH0NCisgICAgICANCisgICAgICBzdHJpbmdBcnJheS5wdXNo KCI8L2Rpdj4iKTsNCisNCisgICAgICByb3dzQ2FjaGVbcm93XS5jZWxsUmVu ZGVyUXVldWUucHVzaChjZWxsKTsNCisgICAgICByb3dzQ2FjaGVbcm93XS5j ZWxsQ29sU3BhbnNbY2VsbF0gPSBjb2xzcGFuOw0KKyAgICB9DQorDQorDQor ICAgIGZ1bmN0aW9uIGNsZWFudXBSb3dzKHJhbmdlVG9LZWVwKSB7DQorICAg ICAgZm9yICh2YXIgaSBpbiByb3dzQ2FjaGUpIHsNCisgICAgICAgIGlmICgo KGkgPSBwYXJzZUludChpLCAxMCkpICE9PSBhY3RpdmVSb3cpICYmIChpIDwg cmFuZ2VUb0tlZXAudG9wIHx8IGkgPiByYW5nZVRvS2VlcC5ib3R0b20pKSB7 DQorICAgICAgICAgIHJlbW92ZVJvd0Zyb21DYWNoZShpKTsNCisgICAgICAg IH0NCisgICAgICB9DQorICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlQXN5bmNQ b3N0UmVuZGVyQ2xlYW51cCkgeyBzdGFydFBvc3RQcm9jZXNzaW5nQ2xlYW51 cCgpOyB9DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gaW52YWxpZGF0ZSgp IHsNCisgICAgICB1cGRhdGVSb3dDb3VudCgpOw0KKyAgICAgIGludmFsaWRh dGVBbGxSb3dzKCk7DQorICAgICAgcmVuZGVyKCk7DQorICAgIH0NCisNCisg ICAgZnVuY3Rpb24gaW52YWxpZGF0ZUFsbFJvd3MoKSB7DQorICAgICAgaWYg KGN1cnJlbnRFZGl0b3IpIHsNCisgICAgICAgIG1ha2VBY3RpdmVDZWxsTm9y bWFsKCk7DQorICAgICAgfQ0KKyAgICAgIGZvciAodmFyIHJvdyBpbiByb3dz Q2FjaGUpIHsNCisgICAgICAgIHJlbW92ZVJvd0Zyb21DYWNoZShyb3cpOw0K KyAgICAgIH0NCisgICAgICBpZiAob3B0aW9ucy5lbmFibGVBc3luY1Bvc3RS ZW5kZXJDbGVhbnVwKSB7IHN0YXJ0UG9zdFByb2Nlc3NpbmdDbGVhbnVwKCk7 IH0NCisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBxdWV1ZVBvc3RQcm9jZXNz ZWRSb3dGb3JDbGVhbnVwKGNhY2hlRW50cnksIHBvc3RQcm9jZXNzZWRSb3cs IHJvd0lkeCkgew0KKyAgICAgIHBvc3RQcm9jZXNzZ3JvdXBJZCsrOw0KKw0K KyAgICAgIC8vIHN0b3JlIGFuZCBkZXRhY2ggbm9kZSBmb3IgbGF0ZXIgYXN5 bmMgY2xlYW51cA0KKyAgICAgIGZvciAodmFyIGNvbHVtbklkeCBpbiBwb3N0 UHJvY2Vzc2VkUm93KSB7DQorICAgICAgICBpZiAocG9zdFByb2Nlc3NlZFJv dy5oYXNPd25Qcm9wZXJ0eShjb2x1bW5JZHgpKSB7DQorICAgICAgICAgIHBv c3RQcm9jZXNzZWRDbGVhbnVwUXVldWUucHVzaCh7DQorICAgICAgICAgICAg YWN0aW9uVHlwZTogJ0MnLA0KKyAgICAgICAgICAgIGdyb3VwSWQ6IHBvc3RQ cm9jZXNzZ3JvdXBJZCwNCisgICAgICAgICAgICBub2RlOiBjYWNoZUVudHJ5 LmNlbGxOb2Rlc0J5Q29sdW1uSWR4WyBjb2x1bW5JZHggfCAwXSwNCisgICAg ICAgICAgICBjb2x1bW5JZHg6IGNvbHVtbklkeCB8IDAsDQorICAgICAgICAg ICAgcm93SWR4OiByb3dJZHgNCisgICAgICAgICAgfSk7DQorICAgICAgICB9 DQorICAgICAgfQ0KKyAgICAgIHBvc3RQcm9jZXNzZWRDbGVhbnVwUXVldWUu cHVzaCh7DQorICAgICAgICBhY3Rpb25UeXBlOiAnUicsDQorICAgICAgICBn cm91cElkOiBwb3N0UHJvY2Vzc2dyb3VwSWQsDQorICAgICAgICBub2RlOiBj YWNoZUVudHJ5LnJvd05vZGUNCisgICAgICB9KTsNCisgICAgICAkKGNhY2hl RW50cnkucm93Tm9kZSkuZGV0YWNoKCk7DQorICAgIH0NCisNCisgICAgZnVu Y3Rpb24gcXVldWVQb3N0UHJvY2Vzc2VkQ2VsbEZvckNsZWFudXAoY2VsbG5v ZGUsIGNvbHVtbklkeCwgcm93SWR4KSB7DQorICAgICAgcG9zdFByb2Nlc3Nl ZENsZWFudXBRdWV1ZS5wdXNoKHsNCisgICAgICAgIGFjdGlvblR5cGU6ICdD JywNCisgICAgICAgIGdyb3VwSWQ6IHBvc3RQcm9jZXNzZ3JvdXBJZCwNCisg ICAgICAgIG5vZGU6IGNlbGxub2RlLA0KKyAgICAgICAgY29sdW1uSWR4OiBj b2x1bW5JZHgsDQorICAgICAgICByb3dJZHg6IHJvd0lkeA0KKyAgICAgIH0p Ow0KKyAgICAgICQoY2VsbG5vZGUpLmRldGFjaCgpOw0KKyAgICB9DQorDQor ICAgIGZ1bmN0aW9uIHJlbW92ZVJvd0Zyb21DYWNoZShyb3cpIHsNCisgICAg ICB2YXIgY2FjaGVFbnRyeSA9IHJvd3NDYWNoZVtyb3ddOw0KKyAgICAgIGlm ICghY2FjaGVFbnRyeSkgew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICAgIH0N CisNCisgICAgICBpZiAocm93Tm9kZUZyb21MYXN0TW91c2VXaGVlbEV2ZW50 ID09PSBjYWNoZUVudHJ5LnJvd05vZGUpIHsNCisgICAgICAgIGNhY2hlRW50 cnkucm93Tm9kZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KKyAgICAgICAg em9tYmllUm93Tm9kZUZyb21MYXN0TW91c2VXaGVlbEV2ZW50ID0gcm93Tm9k ZUZyb21MYXN0TW91c2VXaGVlbEV2ZW50Ow0KKyAgICAgICAgem9tYmllUm93 Q2FjaGVGcm9tTGFzdE1vdXNlV2hlZWxFdmVudCA9IGNhY2hlRW50cnk7DQor ICAgICAgICB6b21iaWVSb3dQb3N0UHJvY2Vzc2VkRnJvbUxhc3RNb3VzZVdo ZWVsRXZlbnQgPSBwb3N0UHJvY2Vzc2VkUm93c1tyb3ddOw0KKyAgICAgICAg Ly8gaWdub3JlIHBvc3QgcHJvY2Vzc2luZyBjbGVhbnVwIGluIHRoaXMgY2Fz ZSAtIGl0IHdpbGwgYmUgZGVhbHQgd2l0aCBsYXRlcg0KKyAgICAgIH0gZWxz ZSB7DQorICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVBc3luY1Bvc3RSZW5k ZXJDbGVhbnVwICYmIHBvc3RQcm9jZXNzZWRSb3dzW3Jvd10pIHsNCisgICAg ICAgICAgcXVldWVQb3N0UHJvY2Vzc2VkUm93Rm9yQ2xlYW51cChjYWNoZUVu dHJ5LCBwb3N0UHJvY2Vzc2VkUm93c1tyb3ddLCByb3cpOw0KKyAgICAgICAg fSBlbHNlIHsNCisgICAgICAgICAgJGNhbnZhc1swXS5yZW1vdmVDaGlsZChj YWNoZUVudHJ5LnJvd05vZGUpOw0KKyAgICAgICAgfQ0KKyAgICAgIH0NCisN CisgICAgICBkZWxldGUgcm93c0NhY2hlW3Jvd107DQorICAgICAgZGVsZXRl IHBvc3RQcm9jZXNzZWRSb3dzW3Jvd107DQorICAgICAgcmVuZGVyZWRSb3dz LS07DQorICAgICAgY291bnRlcl9yb3dzX3JlbW92ZWQrKzsNCisgICAgfQ0K Kw0KKyAgICBmdW5jdGlvbiBpbnZhbGlkYXRlUm93cyhyb3dzKSB7DQorICAg ICAgdmFyIGksIHJsOw0KKyAgICAgIGlmICghcm93cyB8fCAhcm93cy5sZW5n dGgpIHsNCisgICAgICAgIHJldHVybjsNCisgICAgICB9DQorICAgICAgdlNj cm9sbERpciA9IDA7DQorICAgICAgcmwgPSByb3dzLmxlbmd0aDsNCisgICAg ICBmb3IgKGkgPSAwOyAgaSA8IHJsOyBpKyspIHsNCisgICAgICAgIGlmIChj dXJyZW50RWRpdG9yICYmIGFjdGl2ZVJvdyA9PT0gcm93c1tpXSkgew0KKyAg ICAgICAgICBtYWtlQWN0aXZlQ2VsbE5vcm1hbCgpOw0KKyAgICAgICAgfQ0K KyAgICAgICAgaWYgKHJvd3NDYWNoZVtyb3dzW2ldXSkgew0KKyAgICAgICAg ICByZW1vdmVSb3dGcm9tQ2FjaGUocm93c1tpXSk7DQorICAgICAgICB9DQor ICAgICAgfQ0KKyAgICAgIGlmIChvcHRpb25zLmVuYWJsZUFzeW5jUG9zdFJl bmRlckNsZWFudXApIHsgc3RhcnRQb3N0UHJvY2Vzc2luZ0NsZWFudXAoKTsg fQ0KKw0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIGludmFsaWRhdGVSb3co cm93KSB7DQorICAgICAgaW52YWxpZGF0ZVJvd3MoW3Jvd10pOw0KKyAgICB9 DQorDQorICAgIGZ1bmN0aW9uIGFwcGx5Rm9ybWF0UmVzdWx0VG9DZWxsTm9k ZShmb3JtYXR0ZXJSZXN1bHQsIGNlbGxOb2RlLCBzdXBwcmVzc1JlbW92ZSkg ew0KKyAgICAgICAgaWYgKHR5cGVvZiBmb3JtYXR0ZXJSZXN1bHQgPT09ICdz dHJpbmcnKSB7IA0KKyAgICAgICAgICAgIGNlbGxOb2RlLmlubmVySFRNTCA9 IGZvcm1hdHRlclJlc3VsdDsNCisgICAgICAgICAgICByZXR1cm47DQorICAg ICAgICB9DQorICAgICAgICBjZWxsTm9kZS5pbm5lckhUTUwgPSBmb3JtYXR0 ZXJSZXN1bHQudGV4dDsNCisgICAgICAgIGlmIChmb3JtYXR0ZXJSZXN1bHQu cmVtb3ZlQ2xhc3NlcyAmJiAhc3VwcHJlc3NSZW1vdmUpIHsgDQorICAgICAg ICAgICAgY2VsbE5vZGUucmVtb3ZlQ2xhc3MoZm9ybWF0dGVyUmVzdWx0LnJl bW92ZUNsYXNzZXMpOyANCisgICAgICAgIH0NCisgICAgICAgIGlmIChmb3Jt YXR0ZXJSZXN1bHQuYWRkQ2xhc3NlcykgeyANCisgICAgICAgICAgICBjZWxs Tm9kZS5hZGRDbGFzcyhmb3JtYXR0ZXJSZXN1bHQuYWRkQ2xhc3Nlcyk7IA0K KyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIHVwZGF0ZUNl bGwocm93LCBjZWxsKSB7DQorICAgICAgdmFyIGNlbGxOb2RlID0gZ2V0Q2Vs bE5vZGUocm93LCBjZWxsKTsNCisgICAgICBpZiAoIWNlbGxOb2RlKSB7DQor ICAgICAgICByZXR1cm47DQorICAgICAgfQ0KKw0KKyAgICAgIHZhciBtID0g Y29sdW1uc1tjZWxsXSwgZCA9IGdldERhdGFJdGVtKHJvdyk7DQorICAgICAg aWYgKGN1cnJlbnRFZGl0b3IgJiYgYWN0aXZlUm93ID09PSByb3cgJiYgYWN0 aXZlQ2VsbCA9PT0gY2VsbCkgew0KKyAgICAgICAgY3VycmVudEVkaXRvci5s b2FkVmFsdWUoZCk7DQorICAgICAgfSBlbHNlIHsNCisgICAgICAgIHZhciBm b3JtYXR0ZXJSZXN1bHQgPSAgZCA/IGdldEZvcm1hdHRlcihyb3csIG0pKHJv dywgY2VsbCwgZ2V0RGF0YUl0ZW1WYWx1ZUZvckNvbHVtbihkLCBtKSwgbSwg ZCkgOiAiIjsNCisgICAgICAgIGFwcGx5Rm9ybWF0UmVzdWx0VG9DZWxsTm9k ZShmb3JtYXR0ZXJSZXN1bHQsIGNlbGxOb2RlKTsNCisgICAgICAgIGludmFs aWRhdGVQb3N0UHJvY2Vzc2luZ1Jlc3VsdHMocm93KTsNCisgICAgICB9DQor ICAgIH0NCisNCisgICAgZnVuY3Rpb24gdXBkYXRlUm93KHJvdykgew0KKyAg ICAgIHZhciBjYWNoZUVudHJ5ID0gcm93c0NhY2hlW3Jvd107DQorICAgICAg aWYgKCFjYWNoZUVudHJ5KSB7DQorICAgICAgICByZXR1cm47DQorICAgICAg fQ0KKw0KKyAgICAgIGVuc3VyZUNlbGxOb2Rlc0luUm93c0NhY2hlKHJvdyk7 DQorDQorICAgICAgdmFyIGZvcm1hdHRlclJlc3VsdCwgZCA9IGdldERhdGFJ dGVtKHJvdyk7DQorICAgIA0KKyAgICAgIGZvciAodmFyIGNvbHVtbklkeCBp biBjYWNoZUVudHJ5LmNlbGxOb2Rlc0J5Q29sdW1uSWR4KSB7DQorICAgICAg ICBpZiAoIWNhY2hlRW50cnkuY2VsbE5vZGVzQnlDb2x1bW5JZHguaGFzT3du UHJvcGVydHkoY29sdW1uSWR4KSkgew0KKyAgICAgICAgICBjb250aW51ZTsN CisgICAgICAgIH0NCisNCisgICAgICAgIGNvbHVtbklkeCA9IGNvbHVtbklk eCB8IDA7DQorICAgICAgICB2YXIgbSA9IGNvbHVtbnNbY29sdW1uSWR4XSwN CisgICAgICAgICAgICBub2RlID0gY2FjaGVFbnRyeS5jZWxsTm9kZXNCeUNv bHVtbklkeFtjb2x1bW5JZHhdOw0KKw0KKyAgICAgICAgaWYgKHJvdyA9PT0g YWN0aXZlUm93ICYmIGNvbHVtbklkeCA9PT0gYWN0aXZlQ2VsbCAmJiBjdXJy ZW50RWRpdG9yKSB7DQorICAgICAgICAgIGN1cnJlbnRFZGl0b3IubG9hZFZh bHVlKGQpOw0KKyAgICAgICAgfSBlbHNlIGlmIChkKSB7DQorICAgICAgICAg IGZvcm1hdHRlclJlc3VsdCA9ICBnZXRGb3JtYXR0ZXIocm93LCBtKShyb3cs IGNvbHVtbklkeCwgZ2V0RGF0YUl0ZW1WYWx1ZUZvckNvbHVtbihkLCBtKSwg bSwgZCk7DQorICAgICAgICAgIGFwcGx5Rm9ybWF0UmVzdWx0VG9DZWxsTm9k ZShmb3JtYXR0ZXJSZXN1bHQsIG5vZGUpOw0KKyAgICAgICAgfSBlbHNlIHsN CisgICAgICAgICAgbm9kZS5pbm5lckhUTUwgPSAiIjsNCisgICAgICAgIH0N CisgICAgICB9DQorDQorICAgICAgaW52YWxpZGF0ZVBvc3RQcm9jZXNzaW5n UmVzdWx0cyhyb3cpOw0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIGdldFZp ZXdwb3J0SGVpZ2h0KCkgew0KKyAgICAgIHJldHVybiBwYXJzZUZsb2F0KCQu Y3NzKCRjb250YWluZXJbMF0sICJoZWlnaHQiLCB0cnVlKSkgLQ0KKyAgICAg ICAgICBwYXJzZUZsb2F0KCQuY3NzKCRjb250YWluZXJbMF0sICJwYWRkaW5n VG9wIiwgdHJ1ZSkpIC0NCisgICAgICAgICAgcGFyc2VGbG9hdCgkLmNzcygk Y29udGFpbmVyWzBdLCAicGFkZGluZ0JvdHRvbSIsIHRydWUpKSAtDQorICAg ICAgICAgIHBhcnNlRmxvYXQoJC5jc3MoJGhlYWRlclNjcm9sbGVyWzBdLCAi aGVpZ2h0IikpIC0gZ2V0VkJveERlbHRhKCRoZWFkZXJTY3JvbGxlcikgLQ0K KyAgICAgICAgICAob3B0aW9ucy5zaG93VG9wUGFuZWwgPyBvcHRpb25zLnRv cFBhbmVsSGVpZ2h0ICsgZ2V0VkJveERlbHRhKCR0b3BQYW5lbFNjcm9sbGVy KSA6IDApIC0NCisgICAgICAgICAgKG9wdGlvbnMuc2hvd0hlYWRlclJvdyA/ IG9wdGlvbnMuaGVhZGVyUm93SGVpZ2h0ICsgZ2V0VkJveERlbHRhKCRoZWFk ZXJSb3dTY3JvbGxlcikgOiAwKSAtDQorICAgICAgICAgIChvcHRpb25zLmNy ZWF0ZUZvb3RlclJvdyAmJiBvcHRpb25zLnNob3dGb290ZXJSb3cgPyBvcHRp b25zLmZvb3RlclJvd0hlaWdodCArIGdldFZCb3hEZWx0YSgkZm9vdGVyUm93 U2Nyb2xsZXIpIDogMCk7DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gcmVz aXplQ2FudmFzKCkgew0KKyAgICAgIGlmICghaW5pdGlhbGl6ZWQpIHsgcmV0 dXJuOyB9DQorICAgICAgaWYgKG9wdGlvbnMuYXV0b0hlaWdodCkgew0KKyAg ICAgICAgdmlld3BvcnRIID0gb3B0aW9ucy5yb3dIZWlnaHQgKiBnZXREYXRh TGVuZ3RoSW5jbHVkaW5nQWRkTmV3KCk7DQorICAgICAgfSBlbHNlIHsNCisg ICAgICAgIHZpZXdwb3J0SCA9IGdldFZpZXdwb3J0SGVpZ2h0KCk7DQorICAg ICAgfQ0KKw0KKyAgICAgIG51bVZpc2libGVSb3dzID0gTWF0aC5jZWlsKHZp ZXdwb3J0SCAvIG9wdGlvbnMucm93SGVpZ2h0KTsNCisgICAgICB2aWV3cG9y dFcgPSBwYXJzZUZsb2F0KCQuY3NzKCRjb250YWluZXJbMF0sICJ3aWR0aCIs IHRydWUpKTsNCisgICAgICBpZiAoIW9wdGlvbnMuYXV0b0hlaWdodCkgew0K KyAgICAgICAgJHZpZXdwb3J0LmhlaWdodCh2aWV3cG9ydEgpOw0KKyAgICAg IH0NCisNCisgICAgICBpZiAob3B0aW9ucy5mb3JjZUZpdENvbHVtbnMpIHsN CisgICAgICAgIGF1dG9zaXplQ29sdW1ucygpOw0KKyAgICAgIH0NCisNCisg ICAgICB1cGRhdGVSb3dDb3VudCgpOw0KKyAgICAgIGhhbmRsZVNjcm9sbCgp Ow0KKyAgICAgIC8vIFNpbmNlIHRoZSB3aWR0aCBoYXMgY2hhbmdlZCwgZm9y Y2UgdGhlIHJlbmRlcigpIHRvIHJlZXZhbHVhdGUgdmlydHVhbGx5IHJlbmRl cmVkIGNlbGxzLg0KKyAgICAgIGxhc3RSZW5kZXJlZFNjcm9sbExlZnQgPSAt MTsNCisgICAgICByZW5kZXIoKTsNCisgICAgfQ0KKw0KKyAgICBmdW5jdGlv biB1cGRhdGVQYWdpbmdTdGF0dXNGcm9tVmlldyggcGFnaW5nSW5mbyApIHsN CisgICAgICAgIHBhZ2luZ0FjdGl2ZSA9IChwYWdpbmdJbmZvLnBhZ2VTaXpl ICE9PSAwKTsNCisgICAgICAgIHBhZ2luZ0lzTGFzdFBhZ2UgPSAocGFnaW5n SW5mby5wYWdlTnVtID09IHBhZ2luZ0luZm8udG90YWxQYWdlcyAtIDEpOw0K KyAgICB9DQorDQorICAgIGZ1bmN0aW9uIHVwZGF0ZVJvd0NvdW50KCkgew0K KyAgICAgIGlmICghaW5pdGlhbGl6ZWQpIHsgcmV0dXJuOyB9DQorDQorICAg ICAgdmFyIGRhdGFMZW5ndGggPSBnZXREYXRhTGVuZ3RoKCk7DQorICAgICAg dmFyIGRhdGFMZW5ndGhJbmNsdWRpbmdBZGROZXcgPSBnZXREYXRhTGVuZ3Ro SW5jbHVkaW5nQWRkTmV3KCk7DQorICAgICAgdmFyIG51bWJlck9mUm93cyA9 IGRhdGFMZW5ndGhJbmNsdWRpbmdBZGROZXcgKw0KKyAgICAgICAgICAob3B0 aW9ucy5sZWF2ZVNwYWNlRm9yTmV3Um93cyA/IG51bVZpc2libGVSb3dzIC0g MSA6IDApOw0KKw0KKyAgICAgIHZhciBvbGRWaWV3cG9ydEhhc1ZTY3JvbGwg PSB2aWV3cG9ydEhhc1ZTY3JvbGw7DQorICAgICAgLy8gd2l0aCBhdXRvSGVp Z2h0LCB3ZSBkbyBub3QgbmVlZCB0byBhY2NvbW1vZGF0ZSB0aGUgdmVydGlj YWwgc2Nyb2xsIGJhcg0KKyAgICAgIHZpZXdwb3J0SGFzVlNjcm9sbCA9ICFv cHRpb25zLmF1dG9IZWlnaHQgJiYgKG51bWJlck9mUm93cyAqIG9wdGlvbnMu cm93SGVpZ2h0ID4gdmlld3BvcnRIKTsNCisgICAgICB2aWV3cG9ydEhhc0hT Y3JvbGwgPSAoY2FudmFzV2lkdGggPiB2aWV3cG9ydFcgLSBzY3JvbGxiYXJE aW1lbnNpb25zLndpZHRoKTsNCisNCisgICAgICBtYWtlQWN0aXZlQ2VsbE5v cm1hbCgpOw0KKw0KKyAgICAgIC8vIHJlbW92ZSB0aGUgcm93cyB0aGF0IGFy ZSBub3cgb3V0c2lkZSBvZiB0aGUgZGF0YSByYW5nZQ0KKyAgICAgIC8vIHRo aXMgaGVscHMgYXZvaWQgcmVkdW5kYW50IGNhbGxzIHRvIC5yZW1vdmVSb3co KSB3aGVuIHRoZSBzaXplIG9mIHRoZSBkYXRhIGRlY3JlYXNlZCBieSB0aG91 c2FuZHMgb2Ygcm93cw0KKyAgICAgIHZhciByMSA9IGRhdGFMZW5ndGggLSAx Ow0KKyAgICAgIGZvciAodmFyIGkgaW4gcm93c0NhY2hlKSB7DQorICAgICAg ICBpZiAoaSA+IHIxKSB7DQorICAgICAgICAgIHJlbW92ZVJvd0Zyb21DYWNo ZShpKTsNCisgICAgICAgIH0NCisgICAgICB9DQorICAgICAgaWYgKG9wdGlv bnMuZW5hYmxlQXN5bmNQb3N0UmVuZGVyQ2xlYW51cCkgeyBzdGFydFBvc3RQ cm9jZXNzaW5nQ2xlYW51cCgpOyB9DQorDQorICAgICAgaWYgKGFjdGl2ZUNl bGxOb2RlICYmIGFjdGl2ZVJvdyA+IHIxKSB7DQorICAgICAgICByZXNldEFj dGl2ZUNlbGwoKTsNCisgICAgICB9DQorDQorICAgICAgdmFyIG9sZEggPSBo Ow0KKyAgICAgIHRoID0gTWF0aC5tYXgob3B0aW9ucy5yb3dIZWlnaHQgKiBu dW1iZXJPZlJvd3MsIHZpZXdwb3J0SCAtIHNjcm9sbGJhckRpbWVuc2lvbnMu aGVpZ2h0KTsNCisgICAgICBpZiAodGggPCBtYXhTdXBwb3J0ZWRDc3NIZWln aHQpIHsNCisgICAgICAgIC8vIGp1c3Qgb25lIHBhZ2UNCisgICAgICAgIGgg PSBwaCA9IHRoOw0KKyAgICAgICAgbiA9IDE7DQorICAgICAgICBjaiA9IDA7 DQorICAgICAgfSBlbHNlIHsNCisgICAgICAgIC8vIGJyZWFrIGludG8gcGFn ZXMNCisgICAgICAgIGggPSBtYXhTdXBwb3J0ZWRDc3NIZWlnaHQ7DQorICAg ICAgICBwaCA9IGggLyAxMDA7DQorICAgICAgICBuID0gTWF0aC5mbG9vcih0 aCAvIHBoKTsNCisgICAgICAgIGNqID0gKHRoIC0gaCkgLyAobiAtIDEpOw0K KyAgICAgIH0NCisNCisgICAgICBpZiAoaCAhPT0gb2xkSCkgew0KKyAgICAg ICAgJGNhbnZhcy5jc3MoImhlaWdodCIsIGgpOw0KKyAgICAgICAgc2Nyb2xs VG9wID0gJHZpZXdwb3J0WzBdLnNjcm9sbFRvcDsNCisgICAgICB9DQorDQor ICAgICAgdmFyIG9sZFNjcm9sbFRvcEluUmFuZ2UgPSAoc2Nyb2xsVG9wICsg b2Zmc2V0IDw9IHRoIC0gdmlld3BvcnRIKTsNCisNCisgICAgICBpZiAodGgg PT0gMCB8fCBzY3JvbGxUb3AgPT0gMCkgew0KKyAgICAgICAgcGFnZSA9IG9m ZnNldCA9IDA7DQorICAgICAgfSBlbHNlIGlmIChvbGRTY3JvbGxUb3BJblJh bmdlKSB7DQorICAgICAgICAvLyBtYWludGFpbiB2aXJ0dWFsIHBvc2l0aW9u DQorICAgICAgICBzY3JvbGxUbyhzY3JvbGxUb3AgKyBvZmZzZXQpOw0KKyAg ICAgIH0gZWxzZSB7DQorICAgICAgICAvLyBzY3JvbGwgdG8gYm90dG9tDQor ICAgICAgICBzY3JvbGxUbyh0aCAtIHZpZXdwb3J0SCk7DQorICAgICAgfQ0K Kw0KKyAgICAgIGlmIChoICE9IG9sZEggJiYgb3B0aW9ucy5hdXRvSGVpZ2h0 KSB7DQorICAgICAgICByZXNpemVDYW52YXMoKTsNCisgICAgICB9DQorDQor ICAgICAgaWYgKG9wdGlvbnMuZm9yY2VGaXRDb2x1bW5zICYmIG9sZFZpZXdw b3J0SGFzVlNjcm9sbCAhPSB2aWV3cG9ydEhhc1ZTY3JvbGwpIHsNCisgICAg ICAgIGF1dG9zaXplQ29sdW1ucygpOw0KKyAgICAgIH0NCisgICAgICB1cGRh dGVDYW52YXNXaWR0aChmYWxzZSk7DQorICAgIH0NCisNCisgICAgZnVuY3Rp b24gZ2V0VmlzaWJsZVJhbmdlKHZpZXdwb3J0VG9wLCB2aWV3cG9ydExlZnQp IHsNCisgICAgICBpZiAodmlld3BvcnRUb3AgPT0gbnVsbCkgew0KKyAgICAg ICAgdmlld3BvcnRUb3AgPSBzY3JvbGxUb3A7DQorICAgICAgfQ0KKyAgICAg IGlmICh2aWV3cG9ydExlZnQgPT0gbnVsbCkgew0KKyAgICAgICAgdmlld3Bv cnRMZWZ0ID0gc2Nyb2xsTGVmdDsNCisgICAgICB9DQorDQorICAgICAgcmV0 dXJuIHsNCisgICAgICAgIHRvcDogZ2V0Um93RnJvbVBvc2l0aW9uKHZpZXdw b3J0VG9wKSwNCisgICAgICAgIGJvdHRvbTogZ2V0Um93RnJvbVBvc2l0aW9u KHZpZXdwb3J0VG9wICsgdmlld3BvcnRIKSArIDEsDQorICAgICAgICBsZWZ0 UHg6IHZpZXdwb3J0TGVmdCwNCisgICAgICAgIHJpZ2h0UHg6IHZpZXdwb3J0 TGVmdCArIHZpZXdwb3J0Vw0KKyAgICAgIH07DQorICAgIH0NCisNCisgICAg ZnVuY3Rpb24gZ2V0UmVuZGVyZWRSYW5nZSh2aWV3cG9ydFRvcCwgdmlld3Bv cnRMZWZ0KSB7DQorICAgICAgdmFyIHJhbmdlID0gZ2V0VmlzaWJsZVJhbmdl KHZpZXdwb3J0VG9wLCB2aWV3cG9ydExlZnQpOw0KKyAgICAgIHZhciBidWZm ZXIgPSBNYXRoLnJvdW5kKHZpZXdwb3J0SCAvIG9wdGlvbnMucm93SGVpZ2h0 KTsNCisgICAgICB2YXIgbWluQnVmZmVyID0gMzsNCisNCisgICAgICBpZiAo dlNjcm9sbERpciA9PSAtMSkgew0KKyAgICAgICAgcmFuZ2UudG9wIC09IGJ1 ZmZlcjsNCisgICAgICAgIHJhbmdlLmJvdHRvbSArPSBtaW5CdWZmZXI7DQor ICAgICAgfSBlbHNlIGlmICh2U2Nyb2xsRGlyID09IDEpIHsNCisgICAgICAg IHJhbmdlLnRvcCAtPSBtaW5CdWZmZXI7DQorICAgICAgICByYW5nZS5ib3R0 b20gKz0gYnVmZmVyOw0KKyAgICAgIH0gZWxzZSB7DQorICAgICAgICByYW5n ZS50b3AgLT0gbWluQnVmZmVyOw0KKyAgICAgICAgcmFuZ2UuYm90dG9tICs9 IG1pbkJ1ZmZlcjsNCisgICAgICB9DQorDQorICAgICAgcmFuZ2UudG9wID0g TWF0aC5tYXgoMCwgcmFuZ2UudG9wKTsNCisgICAgICByYW5nZS5ib3R0b20g PSBNYXRoLm1pbihnZXREYXRhTGVuZ3RoSW5jbHVkaW5nQWRkTmV3KCkgLSAx LCByYW5nZS5ib3R0b20pOw0KKw0KKyAgICAgIHJhbmdlLmxlZnRQeCAtPSB2 aWV3cG9ydFc7DQorICAgICAgcmFuZ2UucmlnaHRQeCArPSB2aWV3cG9ydFc7 DQorDQorICAgICAgcmFuZ2UubGVmdFB4ID0gTWF0aC5tYXgoMCwgcmFuZ2Uu bGVmdFB4KTsNCisgICAgICByYW5nZS5yaWdodFB4ID0gTWF0aC5taW4oY2Fu dmFzV2lkdGgsIHJhbmdlLnJpZ2h0UHgpOw0KKw0KKyAgICAgIHJldHVybiBy YW5nZTsNCisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBlbnN1cmVDZWxsTm9k ZXNJblJvd3NDYWNoZShyb3cpIHsNCisgICAgICB2YXIgY2FjaGVFbnRyeSA9 IHJvd3NDYWNoZVtyb3ddOw0KKyAgICAgIGlmIChjYWNoZUVudHJ5KSB7DQor ICAgICAgICBpZiAoY2FjaGVFbnRyeS5jZWxsUmVuZGVyUXVldWUubGVuZ3Ro KSB7DQorICAgICAgICAgIHZhciBsYXN0Q2hpbGQgPSBjYWNoZUVudHJ5LnJv d05vZGUubGFzdENoaWxkOw0KKyAgICAgICAgICB3aGlsZSAoY2FjaGVFbnRy eS5jZWxsUmVuZGVyUXVldWUubGVuZ3RoKSB7DQorICAgICAgICAgICAgdmFy IGNvbHVtbklkeCA9IGNhY2hlRW50cnkuY2VsbFJlbmRlclF1ZXVlLnBvcCgp Ow0KKyAgICAgICAgICAgIGNhY2hlRW50cnkuY2VsbE5vZGVzQnlDb2x1bW5J ZHhbY29sdW1uSWR4XSA9IGxhc3RDaGlsZDsNCisgICAgICAgICAgICBsYXN0 Q2hpbGQgPSBsYXN0Q2hpbGQucHJldmlvdXNTaWJsaW5nOw0KKyAgICAgICAg ICB9DQorICAgICAgICB9DQorICAgICAgfQ0KKyAgICB9DQorDQorICAgIGZ1 bmN0aW9uIGNsZWFuVXBDZWxscyhyYW5nZSwgcm93KSB7DQorICAgICAgdmFy IHRvdGFsQ2VsbHNSZW1vdmVkID0gMDsNCisgICAgICB2YXIgY2FjaGVFbnRy eSA9IHJvd3NDYWNoZVtyb3ddOw0KKw0KKyAgICAgIC8vIFJlbW92ZSBjZWxs cyBvdXRzaWRlIHRoZSByYW5nZS4NCisgICAgICB2YXIgY2VsbHNUb1JlbW92 ZSA9IFtdOw0KKyAgICAgIGZvciAodmFyIGkgaW4gY2FjaGVFbnRyeS5jZWxs Tm9kZXNCeUNvbHVtbklkeCkgew0KKyAgICAgICAgLy8gSSByZWFsbHkgaGF0 ZSBpdCB3aGVuIHBlb3BsZSBtZXNzIHdpdGggQXJyYXkucHJvdG90eXBlLg0K KyAgICAgICAgaWYgKCFjYWNoZUVudHJ5LmNlbGxOb2Rlc0J5Q29sdW1uSWR4 Lmhhc093blByb3BlcnR5KGkpKSB7DQorICAgICAgICAgIGNvbnRpbnVlOw0K KyAgICAgICAgfQ0KKw0KKyAgICAgICAgLy8gVGhpcyBpcyBhIHN0cmluZywg c28gaXQgbmVlZHMgdG8gYmUgY2FzdCBiYWNrIHRvIGEgbnVtYmVyLg0KKyAg ICAgICAgaSA9IGkgfCAwOw0KKw0KKyAgICAgICAgdmFyIGNvbHNwYW4gPSBj YWNoZUVudHJ5LmNlbGxDb2xTcGFuc1tpXTsNCisgICAgICAgIGlmIChjb2x1 bW5Qb3NMZWZ0W2ldID4gcmFuZ2UucmlnaHRQeCB8fA0KKyAgICAgICAgICBj b2x1bW5Qb3NSaWdodFtNYXRoLm1pbihjb2x1bW5zLmxlbmd0aCAtIDEsIGkg KyBjb2xzcGFuIC0gMSldIDwgcmFuZ2UubGVmdFB4KSB7DQorICAgICAgICAg IGlmICghKHJvdyA9PSBhY3RpdmVSb3cgJiYgaSA9PSBhY3RpdmVDZWxsKSkg ew0KKyAgICAgICAgICAgIGNlbGxzVG9SZW1vdmUucHVzaChpKTsNCisgICAg ICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgIH0NCisNCisgICAgICB2YXIg Y2VsbFRvUmVtb3ZlLCBub2RlOw0KKyAgICAgIHBvc3RQcm9jZXNzZ3JvdXBJ ZCsrOw0KKyAgICAgIHdoaWxlICgoY2VsbFRvUmVtb3ZlID0gY2VsbHNUb1Jl bW92ZS5wb3AoKSkgIT0gbnVsbCkgew0KKyAgICAgICAgbm9kZSA9IGNhY2hl RW50cnkuY2VsbE5vZGVzQnlDb2x1bW5JZHhbY2VsbFRvUmVtb3ZlXTsNCisg ICAgICAgIGlmIChvcHRpb25zLmVuYWJsZUFzeW5jUG9zdFJlbmRlckNsZWFu dXAgJiYgcG9zdFByb2Nlc3NlZFJvd3Nbcm93XSAmJiBwb3N0UHJvY2Vzc2Vk Um93c1tyb3ddW2NlbGxUb1JlbW92ZV0pIHsNCisgICAgICAgICAgcXVldWVQ b3N0UHJvY2Vzc2VkQ2VsbEZvckNsZWFudXAobm9kZSwgY2VsbFRvUmVtb3Zl LCByb3cpOw0KKyAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgY2FjaGVF bnRyeS5yb3dOb2RlLnJlbW92ZUNoaWxkKG5vZGUpOw0KKyAgICAgICAgfQ0K Kw0KKyAgICAgICAgZGVsZXRlIGNhY2hlRW50cnkuY2VsbENvbFNwYW5zW2Nl bGxUb1JlbW92ZV07DQorICAgICAgICBkZWxldGUgY2FjaGVFbnRyeS5jZWxs Tm9kZXNCeUNvbHVtbklkeFtjZWxsVG9SZW1vdmVdOw0KKyAgICAgICAgaWYg KHBvc3RQcm9jZXNzZWRSb3dzW3Jvd10pIHsNCisgICAgICAgICAgZGVsZXRl IHBvc3RQcm9jZXNzZWRSb3dzW3Jvd11bY2VsbFRvUmVtb3ZlXTsNCisgICAg ICAgIH0NCisgICAgICAgIHRvdGFsQ2VsbHNSZW1vdmVkKys7DQorICAgICAg fQ0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIGNsZWFuVXBBbmRSZW5kZXJD ZWxscyhyYW5nZSkgew0KKyAgICAgIHZhciBjYWNoZUVudHJ5Ow0KKyAgICAg IHZhciBzdHJpbmdBcnJheSA9IFtdOw0KKyAgICAgIHZhciBwcm9jZXNzZWRS b3dzID0gW107DQorICAgICAgdmFyIGNlbGxzQWRkZWQ7DQorICAgICAgdmFy IHRvdGFsQ2VsbHNBZGRlZCA9IDA7DQorICAgICAgdmFyIGNvbHNwYW47DQor DQorICAgICAgZm9yICh2YXIgcm93ID0gcmFuZ2UudG9wLCBidG0gPSByYW5n ZS5ib3R0b207IHJvdyA8PSBidG07IHJvdysrKSB7DQorICAgICAgICBjYWNo ZUVudHJ5ID0gcm93c0NhY2hlW3Jvd107DQorICAgICAgICBpZiAoIWNhY2hl RW50cnkpIHsNCisgICAgICAgICAgY29udGludWU7DQorICAgICAgICB9DQor DQorICAgICAgICAvLyBjZWxsUmVuZGVyUXVldWUgcG9wdWxhdGVkIGluIHJl bmRlclJvd3MoKSBuZWVkcyB0byBiZSBjbGVhcmVkIGZpcnN0DQorICAgICAg ICBlbnN1cmVDZWxsTm9kZXNJblJvd3NDYWNoZShyb3cpOw0KKw0KKyAgICAg ICAgY2xlYW5VcENlbGxzKHJhbmdlLCByb3cpOw0KKw0KKyAgICAgICAgLy8g UmVuZGVyIG1pc3NpbmcgY2VsbHMuDQorICAgICAgICBjZWxsc0FkZGVkID0g MDsNCisNCisgICAgICAgIHZhciBtZXRhZGF0YSA9IGRhdGEuZ2V0SXRlbU1l dGFkYXRhICYmIGRhdGEuZ2V0SXRlbU1ldGFkYXRhKHJvdyk7DQorICAgICAg ICBtZXRhZGF0YSA9IG1ldGFkYXRhICYmIG1ldGFkYXRhLmNvbHVtbnM7DQor DQorICAgICAgICB2YXIgZCA9IGdldERhdGFJdGVtKHJvdyk7DQorDQorICAg ICAgICAvLyBUT0RPOiAgc2hvcnRlbiB0aGlzIGxvb3AgKGluZGV4PyBoZXVy aXN0aWNzPyBiaW5hcnkgc2VhcmNoPykNCisgICAgICAgIGZvciAodmFyIGkg PSAwLCBpaSA9IGNvbHVtbnMubGVuZ3RoOyBpIDwgaWk7IGkrKykgew0KKyAg ICAgICAgICAvLyBDZWxscyB0byB0aGUgcmlnaHQgYXJlIG91dHNpZGUgdGhl IHJhbmdlLg0KKyAgICAgICAgICBpZiAoY29sdW1uUG9zTGVmdFtpXSA+IHJh bmdlLnJpZ2h0UHgpIHsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAg ICAgfQ0KKw0KKyAgICAgICAgICAvLyBBbHJlYWR5IHJlbmRlcmVkLg0KKyAg ICAgICAgICBpZiAoKGNvbHNwYW4gPSBjYWNoZUVudHJ5LmNlbGxDb2xTcGFu c1tpXSkgIT0gbnVsbCkgew0KKyAgICAgICAgICAgIGkgKz0gKGNvbHNwYW4g PiAxID8gY29sc3BhbiAtIDEgOiAwKTsNCisgICAgICAgICAgICBjb250aW51 ZTsNCisgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICBjb2xzcGFuID0gMTsN CisgICAgICAgICAgaWYgKG1ldGFkYXRhKSB7DQorICAgICAgICAgICAgdmFy IGNvbHVtbkRhdGEgPSBtZXRhZGF0YVtjb2x1bW5zW2ldLmlkXSB8fCBtZXRh ZGF0YVtpXTsNCisgICAgICAgICAgICBjb2xzcGFuID0gKGNvbHVtbkRhdGEg JiYgY29sdW1uRGF0YS5jb2xzcGFuKSB8fCAxOw0KKyAgICAgICAgICAgIGlm IChjb2xzcGFuID09PSAiKiIpIHsNCisgICAgICAgICAgICAgIGNvbHNwYW4g PSBpaSAtIGk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICB9DQorDQor ICAgICAgICAgIGlmIChjb2x1bW5Qb3NSaWdodFtNYXRoLm1pbihpaSAtIDEs IGkgKyBjb2xzcGFuIC0gMSldID4gcmFuZ2UubGVmdFB4KSB7DQorICAgICAg ICAgICAgYXBwZW5kQ2VsbEh0bWwoc3RyaW5nQXJyYXksIHJvdywgaSwgY29s c3BhbiwgZCk7DQorICAgICAgICAgICAgY2VsbHNBZGRlZCsrOw0KKyAgICAg ICAgICB9DQorDQorICAgICAgICAgIGkgKz0gKGNvbHNwYW4gPiAxID8gY29s c3BhbiAtIDEgOiAwKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGlmIChj ZWxsc0FkZGVkKSB7DQorICAgICAgICAgIHRvdGFsQ2VsbHNBZGRlZCArPSBj ZWxsc0FkZGVkOw0KKyAgICAgICAgICBwcm9jZXNzZWRSb3dzLnB1c2gocm93 KTsNCisgICAgICAgIH0NCisgICAgICB9DQorDQorICAgICAgaWYgKCFzdHJp bmdBcnJheS5sZW5ndGgpIHsNCisgICAgICAgIHJldHVybjsNCisgICAgICB9 DQorDQorICAgICAgdmFyIHggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk aXYiKTsNCisgICAgICB4LmlubmVySFRNTCA9IHN0cmluZ0FycmF5LmpvaW4o IiIpOw0KKw0KKyAgICAgIHZhciBwcm9jZXNzZWRSb3c7DQorICAgICAgdmFy IG5vZGU7DQorICAgICAgd2hpbGUgKChwcm9jZXNzZWRSb3cgPSBwcm9jZXNz ZWRSb3dzLnBvcCgpKSAhPSBudWxsKSB7DQorICAgICAgICBjYWNoZUVudHJ5 ID0gcm93c0NhY2hlW3Byb2Nlc3NlZFJvd107DQorICAgICAgICB2YXIgY29s dW1uSWR4Ow0KKyAgICAgICAgd2hpbGUgKChjb2x1bW5JZHggPSBjYWNoZUVu dHJ5LmNlbGxSZW5kZXJRdWV1ZS5wb3AoKSkgIT0gbnVsbCkgew0KKyAgICAg ICAgICBub2RlID0geC5sYXN0Q2hpbGQ7DQorICAgICAgICAgIGNhY2hlRW50 cnkucm93Tm9kZS5hcHBlbmRDaGlsZChub2RlKTsNCisgICAgICAgICAgY2Fj aGVFbnRyeS5jZWxsTm9kZXNCeUNvbHVtbklkeFtjb2x1bW5JZHhdID0gbm9k ZTsNCisgICAgICAgIH0NCisgICAgICB9DQorICAgIH0NCisNCisgICAgZnVu Y3Rpb24gcmVuZGVyUm93cyhyYW5nZSkgew0KKyAgICAgIHZhciBwYXJlbnRO b2RlID0gJGNhbnZhc1swXSwNCisgICAgICAgICAgc3RyaW5nQXJyYXkgPSBb XSwNCisgICAgICAgICAgcm93cyA9IFtdLA0KKyAgICAgICAgICBuZWVkVG9S ZXNlbGVjdENlbGwgPSBmYWxzZSwNCisgICAgICAgICAgZGF0YUxlbmd0aCA9 IGdldERhdGFMZW5ndGgoKTsNCisNCisgICAgICBmb3IgKHZhciBpID0gcmFu Z2UudG9wLCBpaSA9IHJhbmdlLmJvdHRvbTsgaSA8PSBpaTsgaSsrKSB7DQor ICAgICAgICBpZiAocm93c0NhY2hlW2ldKSB7DQorICAgICAgICAgIGNvbnRp bnVlOw0KKyAgICAgICAgfQ0KKyAgICAgICAgcmVuZGVyZWRSb3dzKys7DQor ICAgICAgICByb3dzLnB1c2goaSk7DQorDQorICAgICAgICAvLyBDcmVhdGUg YW4gZW50cnkgcmlnaHQgYXdheSBzbyB0aGF0IGFwcGVuZFJvd0h0bWwoKSBj YW4NCisgICAgICAgIC8vIHN0YXJ0IHBvcHVsYXRhdGluZyBpdC4NCisgICAg ICAgIHJvd3NDYWNoZVtpXSA9IHsNCisgICAgICAgICAgInJvd05vZGUiOiBu dWxsLA0KKw0KKyAgICAgICAgICAvLyBDb2xTcGFucyBvZiByZW5kZXJlZCBj ZWxscyAoYnkgY29sdW1uIGlkeCkuDQorICAgICAgICAgIC8vIENhbiBhbHNv IGJlIHVzZWQgZm9yIGNoZWNraW5nIHdoZXRoZXIgYSBjZWxsIGhhcyBiZWVu IHJlbmRlcmVkLg0KKyAgICAgICAgICAiY2VsbENvbFNwYW5zIjogW10sDQor DQorICAgICAgICAgIC8vIENlbGwgbm9kZXMgKGJ5IGNvbHVtbiBpZHgpLiAg TGF6eS1wb3B1bGF0ZWQgYnkgZW5zdXJlQ2VsbE5vZGVzSW5Sb3dzQ2FjaGUo KS4NCisgICAgICAgICAgImNlbGxOb2Rlc0J5Q29sdW1uSWR4IjogW10sDQor DQorICAgICAgICAgIC8vIENvbHVtbiBpbmRpY2VzIG9mIGNlbGwgbm9kZXMg dGhhdCBoYXZlIGJlZW4gcmVuZGVyZWQsIGJ1dCBub3QgeWV0IGluZGV4ZWQg aW4NCisgICAgICAgICAgLy8gY2VsbE5vZGVzQnlDb2x1bW5JZHguICBUaGVz ZSBhcmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgY2VsbCBub2RlcyBhZGRlZCBh dCB0aGUNCisgICAgICAgICAgLy8gZW5kIG9mIHRoZSByb3cuDQorICAgICAg ICAgICJjZWxsUmVuZGVyUXVldWUiOiBbXQ0KKyAgICAgICAgfTsNCisNCisg ICAgICAgIGFwcGVuZFJvd0h0bWwoc3RyaW5nQXJyYXksIGksIHJhbmdlLCBk YXRhTGVuZ3RoKTsNCisgICAgICAgIGlmIChhY3RpdmVDZWxsTm9kZSAmJiBh Y3RpdmVSb3cgPT09IGkpIHsNCisgICAgICAgICAgbmVlZFRvUmVzZWxlY3RD ZWxsID0gdHJ1ZTsNCisgICAgICAgIH0NCisgICAgICAgIGNvdW50ZXJfcm93 c19yZW5kZXJlZCsrOw0KKyAgICAgIH0NCisNCisgICAgICBpZiAoIXJvd3Mu bGVuZ3RoKSB7IHJldHVybjsgfQ0KKw0KKyAgICAgIHZhciB4ID0gZG9jdW1l bnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7DQorICAgICAgeC5pbm5lckhUTUwg PSBzdHJpbmdBcnJheS5qb2luKCIiKTsNCisNCisgICAgICBmb3IgKHZhciBp ID0gMCwgaWkgPSByb3dzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsNCisgICAg ICAgIHJvd3NDYWNoZVtyb3dzW2ldXS5yb3dOb2RlID0gcGFyZW50Tm9kZS5h cHBlbmRDaGlsZCh4LmZpcnN0Q2hpbGQpOw0KKyAgICAgIH0NCisNCisgICAg ICBpZiAobmVlZFRvUmVzZWxlY3RDZWxsKSB7DQorICAgICAgICBhY3RpdmVD ZWxsTm9kZSA9IGdldENlbGxOb2RlKGFjdGl2ZVJvdywgYWN0aXZlQ2VsbCk7 DQorICAgICAgfQ0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIHN0YXJ0UG9z dFByb2Nlc3NpbmcoKSB7DQorICAgICAgaWYgKCFvcHRpb25zLmVuYWJsZUFz eW5jUG9zdFJlbmRlcikgew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICAgIH0N CisgICAgICBjbGVhclRpbWVvdXQoaF9wb3N0cmVuZGVyKTsNCisgICAgICBo X3Bvc3RyZW5kZXIgPSBzZXRUaW1lb3V0KGFzeW5jUG9zdFByb2Nlc3NSb3dz LCBvcHRpb25zLmFzeW5jUG9zdFJlbmRlckRlbGF5KTsNCisgICAgfQ0KKw0K KyAgICBmdW5jdGlvbiBzdGFydFBvc3RQcm9jZXNzaW5nQ2xlYW51cCgpIHsN CisgICAgICBpZiAoIW9wdGlvbnMuZW5hYmxlQXN5bmNQb3N0UmVuZGVyQ2xl YW51cCkgew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICAgIH0NCisgICAgICBj bGVhclRpbWVvdXQoaF9wb3N0cmVuZGVyQ2xlYW51cCk7DQorICAgICAgaF9w b3N0cmVuZGVyQ2xlYW51cCA9IHNldFRpbWVvdXQoYXN5bmNQb3N0UHJvY2Vz c0NsZWFudXBSb3dzLCBvcHRpb25zLmFzeW5jUG9zdFJlbmRlckNsZWFudXBE ZWxheSk7DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gaW52YWxpZGF0ZVBv c3RQcm9jZXNzaW5nUmVzdWx0cyhyb3cpIHsNCisgICAgICAvLyBjaGFuZ2Ug c3RhdHVzIG9mIGNvbHVtbnMgdG8gYmUgcmUtcmVuZGVyZWQNCisgICAgICBm b3IgKHZhciBjb2x1bW5JZHggaW4gcG9zdFByb2Nlc3NlZFJvd3Nbcm93XSkg ew0KKyAgICAgICAgaWYgKHBvc3RQcm9jZXNzZWRSb3dzW3Jvd10uaGFzT3du UHJvcGVydHkoY29sdW1uSWR4KSkgew0KKyAgICAgICAgICBwb3N0UHJvY2Vz c2VkUm93c1tyb3ddW2NvbHVtbklkeF0gPSAnQyc7DQorICAgICAgICB9DQor ICAgICAgfQ0KKyAgICAgIHBvc3RQcm9jZXNzRnJvbVJvdyA9IE1hdGgubWlu KHBvc3RQcm9jZXNzRnJvbVJvdywgcm93KTsNCisgICAgICBwb3N0UHJvY2Vz c1RvUm93ID0gTWF0aC5tYXgocG9zdFByb2Nlc3NUb1Jvdywgcm93KTsNCisg ICAgICBzdGFydFBvc3RQcm9jZXNzaW5nKCk7DQorICAgIH0NCisNCisgICAg ZnVuY3Rpb24gdXBkYXRlUm93UG9zaXRpb25zKCkgew0KKyAgICAgIGZvciAo dmFyIHJvdyBpbiByb3dzQ2FjaGUpIHsNCisgICAgICAgIHJvd3NDYWNoZVty b3ddLnJvd05vZGUuc3R5bGUudG9wID0gZ2V0Um93VG9wKHJvdykgKyAicHgi Ow0KKyAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiByZW5kZXIo KSB7DQorICAgICAgaWYgKCFpbml0aWFsaXplZCkgeyByZXR1cm47IH0NCisg ICAgICB2YXIgdmlzaWJsZSA9IGdldFZpc2libGVSYW5nZSgpOw0KKyAgICAg IHZhciByZW5kZXJlZCA9IGdldFJlbmRlcmVkUmFuZ2UoKTsNCisNCisgICAg ICAvLyByZW1vdmUgcm93cyBubyBsb25nZXIgaW4gdGhlIHZpZXdwb3J0DQor ICAgICAgY2xlYW51cFJvd3MocmVuZGVyZWQpOw0KKw0KKyAgICAgIC8vIGFk ZCBuZXcgcm93cyAmIG1pc3NpbmcgY2VsbHMgaW4gZXhpc3Rpbmcgcm93cw0K KyAgICAgIGlmIChsYXN0UmVuZGVyZWRTY3JvbGxMZWZ0ICE9IHNjcm9sbExl ZnQpIHsNCisgICAgICAgIGNsZWFuVXBBbmRSZW5kZXJDZWxscyhyZW5kZXJl ZCk7DQorICAgICAgfQ0KKw0KKyAgICAgIC8vIHJlbmRlciBtaXNzaW5nIHJv d3MNCisgICAgICByZW5kZXJSb3dzKHJlbmRlcmVkKTsNCisNCisgICAgICBw b3N0UHJvY2Vzc0Zyb21Sb3cgPSB2aXNpYmxlLnRvcDsNCisgICAgICBwb3N0 UHJvY2Vzc1RvUm93ID0gTWF0aC5taW4oZ2V0RGF0YUxlbmd0aEluY2x1ZGlu Z0FkZE5ldygpIC0gMSwgdmlzaWJsZS5ib3R0b20pOw0KKyAgICAgIHN0YXJ0 UG9zdFByb2Nlc3NpbmcoKTsNCisNCisgICAgICBsYXN0UmVuZGVyZWRTY3Jv bGxUb3AgPSBzY3JvbGxUb3A7DQorICAgICAgbGFzdFJlbmRlcmVkU2Nyb2xs TGVmdCA9IHNjcm9sbExlZnQ7DQorICAgICAgaF9yZW5kZXIgPSBudWxsOw0K KyAgICB9DQorDQorICAgIGZ1bmN0aW9uIGhhbmRsZUhlYWRlclJvd1Njcm9s bCgpIHsNCisgICAgICB2YXIgc2Nyb2xsTGVmdCA9ICRoZWFkZXJSb3dTY3Jv bGxlclswXS5zY3JvbGxMZWZ0Ow0KKyAgICAgIGlmIChzY3JvbGxMZWZ0ICE9 ICR2aWV3cG9ydFswXS5zY3JvbGxMZWZ0KSB7DQorICAgICAgICAkdmlld3Bv cnRbMF0uc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7DQorICAgICAgfQ0KKyAg ICB9DQorDQorICAgIGZ1bmN0aW9uIGhhbmRsZUZvb3RlclJvd1Njcm9sbCgp IHsNCisgICAgICB2YXIgc2Nyb2xsTGVmdCA9ICRmb290ZXJSb3dTY3JvbGxl clswXS5zY3JvbGxMZWZ0Ow0KKyAgICAgIGlmIChzY3JvbGxMZWZ0ICE9ICR2 aWV3cG9ydFswXS5zY3JvbGxMZWZ0KSB7DQorICAgICAgICAkdmlld3BvcnRb MF0uc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7DQorICAgICAgfQ0KKyAgICB9 DQorDQorICAgIGZ1bmN0aW9uIGhhbmRsZVNjcm9sbCgpIHsNCisgICAgICBz Y3JvbGxUb3AgPSAkdmlld3BvcnRbMF0uc2Nyb2xsVG9wOw0KKyAgICAgIHNj cm9sbExlZnQgPSAkdmlld3BvcnRbMF0uc2Nyb2xsTGVmdDsNCisgICAgICB2 YXIgdlNjcm9sbERpc3QgPSBNYXRoLmFicyhzY3JvbGxUb3AgLSBwcmV2U2Ny b2xsVG9wKTsNCisgICAgICB2YXIgaFNjcm9sbERpc3QgPSBNYXRoLmFicyhz Y3JvbGxMZWZ0IC0gcHJldlNjcm9sbExlZnQpOw0KKw0KKyAgICAgIGlmICho U2Nyb2xsRGlzdCkgew0KKyAgICAgICAgcHJldlNjcm9sbExlZnQgPSBzY3Jv bGxMZWZ0Ow0KKyAgICAgICAgJGhlYWRlclNjcm9sbGVyWzBdLnNjcm9sbExl ZnQgPSBzY3JvbGxMZWZ0Ow0KKyAgICAgICAgJHRvcFBhbmVsU2Nyb2xsZXJb MF0uc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7DQorICAgICAgICAkaGVhZGVy Um93U2Nyb2xsZXJbMF0uc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7DQorICAg ICAgICBpZiAob3B0aW9ucy5jcmVhdGVGb290ZXJSb3cpIHsNCisgICAgICAg ICAgJGZvb3RlclJvd1Njcm9sbGVyWzBdLnNjcm9sbExlZnQgPSBzY3JvbGxM ZWZ0Ow0KKyAgICAgICAgfQ0KKyAgICAgIH0NCisNCisgICAgICBpZiAodlNj cm9sbERpc3QpIHsNCisgICAgICAgIHZTY3JvbGxEaXIgPSBwcmV2U2Nyb2xs VG9wIDwgc2Nyb2xsVG9wID8gMSA6IC0xOw0KKyAgICAgICAgcHJldlNjcm9s bFRvcCA9IHNjcm9sbFRvcDsNCisNCisgICAgICAgIC8vIHN3aXRjaCB2aXJ0 dWFsIHBhZ2VzIGlmIG5lZWRlZA0KKyAgICAgICAgaWYgKHZTY3JvbGxEaXN0 IDwgdmlld3BvcnRIKSB7DQorICAgICAgICAgIHNjcm9sbFRvKHNjcm9sbFRv cCArIG9mZnNldCk7DQorICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICB2 YXIgb2xkT2Zmc2V0ID0gb2Zmc2V0Ow0KKyAgICAgICAgICBpZiAoaCA9PSB2 aWV3cG9ydEgpIHsNCisgICAgICAgICAgICBwYWdlID0gMDsNCisgICAgICAg ICAgfSBlbHNlIHsNCisgICAgICAgICAgICBwYWdlID0gTWF0aC5taW4obiAt IDEsIE1hdGguZmxvb3Ioc2Nyb2xsVG9wICogKCh0aCAtIHZpZXdwb3J0SCkg LyAoaCAtIHZpZXdwb3J0SCkpICogKDEgLyBwaCkpKTsNCisgICAgICAgICAg fQ0KKyAgICAgICAgICBvZmZzZXQgPSBNYXRoLnJvdW5kKHBhZ2UgKiBjaik7 DQorICAgICAgICAgIGlmIChvbGRPZmZzZXQgIT0gb2Zmc2V0KSB7DQorICAg ICAgICAgICAgaW52YWxpZGF0ZUFsbFJvd3MoKTsNCisgICAgICAgICAgfQ0K KyAgICAgICAgfQ0KKyAgICAgIH0NCisNCisgICAgICBpZiAoaFNjcm9sbERp c3QgfHwgdlNjcm9sbERpc3QpIHsNCisgICAgICAgIGlmIChoX3JlbmRlcikg ew0KKyAgICAgICAgICBjbGVhclRpbWVvdXQoaF9yZW5kZXIpOw0KKyAgICAg ICAgfQ0KKw0KKyAgICAgICAgaWYgKE1hdGguYWJzKGxhc3RSZW5kZXJlZFNj cm9sbFRvcCAtIHNjcm9sbFRvcCkgPiAyMCB8fA0KKyAgICAgICAgICAgIE1h dGguYWJzKGxhc3RSZW5kZXJlZFNjcm9sbExlZnQgLSBzY3JvbGxMZWZ0KSA+ IDIwKSB7DQorICAgICAgICAgIGlmIChvcHRpb25zLmZvcmNlU3luY1Njcm9s bGluZyB8fCAoDQorICAgICAgICAgICAgICBNYXRoLmFicyhsYXN0UmVuZGVy ZWRTY3JvbGxUb3AgLSBzY3JvbGxUb3ApIDwgdmlld3BvcnRIICYmDQorICAg ICAgICAgICAgICBNYXRoLmFicyhsYXN0UmVuZGVyZWRTY3JvbGxMZWZ0IC0g c2Nyb2xsTGVmdCkgPCB2aWV3cG9ydFcpKSB7DQorICAgICAgICAgICAgcmVu ZGVyKCk7DQorICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgaF9y ZW5kZXIgPSBzZXRUaW1lb3V0KHJlbmRlciwgNTApOw0KKyAgICAgICAgICB9 DQorDQorICAgICAgICAgIHRyaWdnZXIoc2VsZi5vblZpZXdwb3J0Q2hhbmdl ZCwge2dyaWQ6IHNlbGZ9KTsNCisgICAgICAgIH0NCisgICAgICB9DQorDQor ICAgICAgdHJpZ2dlcihzZWxmLm9uU2Nyb2xsLCB7c2Nyb2xsTGVmdDogc2Ny b2xsTGVmdCwgc2Nyb2xsVG9wOiBzY3JvbGxUb3AsIGdyaWQ6IHNlbGZ9KTsN CisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBhc3luY1Bvc3RQcm9jZXNzUm93 cygpIHsNCisgICAgICB2YXIgZGF0YUxlbmd0aCA9IGdldERhdGFMZW5ndGgo KTsNCisgICAgICB3aGlsZSAocG9zdFByb2Nlc3NGcm9tUm93IDw9IHBvc3RQ cm9jZXNzVG9Sb3cpIHsNCisgICAgICAgIHZhciByb3cgPSAodlNjcm9sbERp ciA+PSAwKSA/IHBvc3RQcm9jZXNzRnJvbVJvdysrIDogcG9zdFByb2Nlc3NU b1Jvdy0tOw0KKyAgICAgICAgdmFyIGNhY2hlRW50cnkgPSByb3dzQ2FjaGVb cm93XTsNCisgICAgICAgIGlmICghY2FjaGVFbnRyeSB8fCByb3cgPj0gZGF0 YUxlbmd0aCkgew0KKyAgICAgICAgICBjb250aW51ZTsNCisgICAgICAgIH0N CisNCisgICAgICAgIGlmICghcG9zdFByb2Nlc3NlZFJvd3Nbcm93XSkgew0K KyAgICAgICAgICBwb3N0UHJvY2Vzc2VkUm93c1tyb3ddID0ge307DQorICAg ICAgICB9DQorDQorICAgICAgICBlbnN1cmVDZWxsTm9kZXNJblJvd3NDYWNo ZShyb3cpOw0KKyAgICAgICAgZm9yICh2YXIgY29sdW1uSWR4IGluIGNhY2hl RW50cnkuY2VsbE5vZGVzQnlDb2x1bW5JZHgpIHsNCisgICAgICAgICAgaWYg KCFjYWNoZUVudHJ5LmNlbGxOb2Rlc0J5Q29sdW1uSWR4Lmhhc093blByb3Bl cnR5KGNvbHVtbklkeCkpIHsNCisgICAgICAgICAgICBjb250aW51ZTsNCisg ICAgICAgICAgfQ0KKw0KKyAgICAgICAgICBjb2x1bW5JZHggPSBjb2x1bW5J ZHggfCAwOw0KKw0KKyAgICAgICAgICB2YXIgbSA9IGNvbHVtbnNbY29sdW1u SWR4XTsNCisgICAgICAgICAgdmFyIHByb2Nlc3NlZFN0YXR1cyA9IHBvc3RQ cm9jZXNzZWRSb3dzW3Jvd11bY29sdW1uSWR4XTsgLy8gQz1jbGVhbnVwIGFu ZCByZS1yZW5kZXIsIFI9cmVuZGVyZWQNCisgICAgICAgICAgaWYgKG0uYXN5 bmNQb3N0UmVuZGVyICYmIHByb2Nlc3NlZFN0YXR1cyAhPT0gJ1InKSB7DQor ICAgICAgICAgICAgdmFyIG5vZGUgPSBjYWNoZUVudHJ5LmNlbGxOb2Rlc0J5 Q29sdW1uSWR4W2NvbHVtbklkeF07DQorICAgICAgICAgICAgaWYgKG5vZGUp IHsNCisgICAgICAgICAgICAgIG0uYXN5bmNQb3N0UmVuZGVyKG5vZGUsIHJv dywgZ2V0RGF0YUl0ZW0ocm93KSwgbSwgKHByb2Nlc3NlZFN0YXR1cyA9PT0g J0MnKSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIHBvc3RQcm9j ZXNzZWRSb3dzW3Jvd11bY29sdW1uSWR4XSA9ICdSJzsNCisgICAgICAgICAg fQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaF9wb3N0cmVuZGVyID0gc2V0 VGltZW91dChhc3luY1Bvc3RQcm9jZXNzUm93cywgb3B0aW9ucy5hc3luY1Bv c3RSZW5kZXJEZWxheSk7DQorICAgICAgICByZXR1cm47DQorICAgICAgfQ0K KyAgICB9DQorDQorICAgIGZ1bmN0aW9uIGFzeW5jUG9zdFByb2Nlc3NDbGVh bnVwUm93cygpIHsNCisgICAgICBpZiAocG9zdFByb2Nlc3NlZENsZWFudXBR dWV1ZS5sZW5ndGggPiAwKSB7DQorICAgICAgICB2YXIgZ3JvdXBJZCA9IHBv c3RQcm9jZXNzZWRDbGVhbnVwUXVldWVbMF0uZ3JvdXBJZDsNCisNCisgICAg ICAgIC8vIGxvb3AgdGhyb3VnaCBhbGwgcXVldWUgbWVtYmVycyB3aXRoIHRo aXMgZ3JvdXBJRA0KKyAgICAgICAgd2hpbGUgKHBvc3RQcm9jZXNzZWRDbGVh bnVwUXVldWUubGVuZ3RoID4gMCAmJiBwb3N0UHJvY2Vzc2VkQ2xlYW51cFF1 ZXVlWzBdLmdyb3VwSWQgPT0gZ3JvdXBJZCkgew0KKyAgICAgICAgICB2YXIg ZW50cnkgPSBwb3N0UHJvY2Vzc2VkQ2xlYW51cFF1ZXVlLnNoaWZ0KCk7DQor ICAgICAgICAgIGlmIChlbnRyeS5hY3Rpb25UeXBlID09ICdSJykgew0KKyAg ICAgICAgICAgICQoZW50cnkubm9kZSkucmVtb3ZlKCk7DQorICAgICAgICAg IH0NCisgICAgICAgICAgaWYgKGVudHJ5LmFjdGlvblR5cGUgPT0gJ0MnKSB7 DQorICAgICAgICAgICAgdmFyIGNvbHVtbiA9IGNvbHVtbnNbZW50cnkuY29s dW1uSWR4XTsNCisgICAgICAgICAgICBpZiAoY29sdW1uLmFzeW5jUG9zdFJl bmRlckNsZWFudXAgJiYgZW50cnkubm9kZSkgew0KKyAgICAgICAgICAgICAg Ly8gY2xlYW51cCBtdXN0IGFsc28gcmVtb3ZlIGVsZW1lbnQNCisgICAgICAg ICAgICAgIGNvbHVtbi5hc3luY1Bvc3RSZW5kZXJDbGVhbnVwKGVudHJ5Lm5v ZGUsIGVudHJ5LnJvd0lkeCwgY29sdW1uKTsNCisgICAgICAgICAgICB9DQor ICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIC8vIGNhbGwg dGhpcyBmdW5jdGlvbiBhZ2FpbiBhZnRlciB0aGUgc3BlY2lmaWVkIGRlbGF5 DQorICAgICAgICBoX3Bvc3RyZW5kZXJDbGVhbnVwID0gc2V0VGltZW91dChh c3luY1Bvc3RQcm9jZXNzQ2xlYW51cFJvd3MsIG9wdGlvbnMuYXN5bmNQb3N0 UmVuZGVyQ2xlYW51cERlbGF5KTsNCisgICAgICB9DQorICAgIH0NCisNCisg ICAgZnVuY3Rpb24gdXBkYXRlQ2VsbENzc1N0eWxlc09uUmVuZGVyZWRSb3dz KGFkZGVkSGFzaCwgcmVtb3ZlZEhhc2gpIHsNCisgICAgICB2YXIgbm9kZSwg Y29sdW1uSWQsIGFkZGVkUm93SGFzaCwgcmVtb3ZlZFJvd0hhc2g7DQorICAg ICAgZm9yICh2YXIgcm93IGluIHJvd3NDYWNoZSkgew0KKyAgICAgICAgcmVt b3ZlZFJvd0hhc2ggPSByZW1vdmVkSGFzaCAmJiByZW1vdmVkSGFzaFtyb3dd Ow0KKyAgICAgICAgYWRkZWRSb3dIYXNoID0gYWRkZWRIYXNoICYmIGFkZGVk SGFzaFtyb3ddOw0KKw0KKyAgICAgICAgaWYgKHJlbW92ZWRSb3dIYXNoKSB7 DQorICAgICAgICAgIGZvciAoY29sdW1uSWQgaW4gcmVtb3ZlZFJvd0hhc2gp IHsNCisgICAgICAgICAgICBpZiAoIWFkZGVkUm93SGFzaCB8fCByZW1vdmVk Um93SGFzaFtjb2x1bW5JZF0gIT0gYWRkZWRSb3dIYXNoW2NvbHVtbklkXSkg ew0KKyAgICAgICAgICAgICAgbm9kZSA9IGdldENlbGxOb2RlKHJvdywgZ2V0 Q29sdW1uSW5kZXgoY29sdW1uSWQpKTsNCisgICAgICAgICAgICAgIGlmIChu b2RlKSB7DQorICAgICAgICAgICAgICAgICQobm9kZSkucmVtb3ZlQ2xhc3Mo cmVtb3ZlZFJvd0hhc2hbY29sdW1uSWRdKTsNCisgICAgICAgICAgICAgIH0N CisgICAgICAgICAgICB9DQorICAgICAgICAgIH0NCisgICAgICAgIH0NCisN CisgICAgICAgIGlmIChhZGRlZFJvd0hhc2gpIHsNCisgICAgICAgICAgZm9y IChjb2x1bW5JZCBpbiBhZGRlZFJvd0hhc2gpIHsNCisgICAgICAgICAgICBp ZiAoIXJlbW92ZWRSb3dIYXNoIHx8IHJlbW92ZWRSb3dIYXNoW2NvbHVtbklk XSAhPSBhZGRlZFJvd0hhc2hbY29sdW1uSWRdKSB7DQorICAgICAgICAgICAg ICBub2RlID0gZ2V0Q2VsbE5vZGUocm93LCBnZXRDb2x1bW5JbmRleChjb2x1 bW5JZCkpOw0KKyAgICAgICAgICAgICAgaWYgKG5vZGUpIHsNCisgICAgICAg ICAgICAgICAgJChub2RlKS5hZGRDbGFzcyhhZGRlZFJvd0hhc2hbY29sdW1u SWRdKTsNCisgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAg ICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICB9DQorICAgIH0NCisNCisg ICAgZnVuY3Rpb24gYWRkQ2VsbENzc1N0eWxlcyhrZXksIGhhc2gpIHsNCisg ICAgICBpZiAoY2VsbENzc0NsYXNzZXNba2V5XSkgew0KKyAgICAgICAgdGhy b3cgbmV3IEVycm9yKCJhZGRDZWxsQ3NzU3R5bGVzOiBjZWxsIENTUyBoYXNo IHdpdGgga2V5ICciICsga2V5ICsgIicgYWxyZWFkeSBleGlzdHMuIik7DQor ICAgICAgfQ0KKw0KKyAgICAgIGNlbGxDc3NDbGFzc2VzW2tleV0gPSBoYXNo Ow0KKyAgICAgIHVwZGF0ZUNlbGxDc3NTdHlsZXNPblJlbmRlcmVkUm93cyho YXNoLCBudWxsKTsNCisNCisgICAgICB0cmlnZ2VyKHNlbGYub25DZWxsQ3Nz U3R5bGVzQ2hhbmdlZCwgeyAia2V5Ijoga2V5LCAiaGFzaCI6IGhhc2gsICJn cmlkIjogc2VsZiB9KTsNCisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiByZW1v dmVDZWxsQ3NzU3R5bGVzKGtleSkgew0KKyAgICAgIGlmICghY2VsbENzc0Ns YXNzZXNba2V5XSkgew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICAgIH0NCisN CisgICAgICB1cGRhdGVDZWxsQ3NzU3R5bGVzT25SZW5kZXJlZFJvd3MobnVs bCwgY2VsbENzc0NsYXNzZXNba2V5XSk7DQorICAgICAgZGVsZXRlIGNlbGxD c3NDbGFzc2VzW2tleV07DQorDQorICAgICAgdHJpZ2dlcihzZWxmLm9uQ2Vs bENzc1N0eWxlc0NoYW5nZWQsIHsgImtleSI6IGtleSwgImhhc2giOiBudWxs LCAiZ3JpZCI6IHNlbGYgfSk7DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24g c2V0Q2VsbENzc1N0eWxlcyhrZXksIGhhc2gpIHsNCisgICAgICB2YXIgcHJl dkhhc2ggPSBjZWxsQ3NzQ2xhc3Nlc1trZXldOw0KKw0KKyAgICAgIGNlbGxD c3NDbGFzc2VzW2tleV0gPSBoYXNoOw0KKyAgICAgIHVwZGF0ZUNlbGxDc3NT dHlsZXNPblJlbmRlcmVkUm93cyhoYXNoLCBwcmV2SGFzaCk7DQorDQorICAg ICAgdHJpZ2dlcihzZWxmLm9uQ2VsbENzc1N0eWxlc0NoYW5nZWQsIHsgImtl eSI6IGtleSwgImhhc2giOiBoYXNoLCAiZ3JpZCI6IHNlbGYgfSk7DQorICAg IH0NCisNCisgICAgZnVuY3Rpb24gZ2V0Q2VsbENzc1N0eWxlcyhrZXkpIHsN CisgICAgICByZXR1cm4gY2VsbENzc0NsYXNzZXNba2V5XTsNCisgICAgfQ0K Kw0KKyAgICBmdW5jdGlvbiBmbGFzaENlbGwocm93LCBjZWxsLCBzcGVlZCkg ew0KKyAgICAgIHNwZWVkID0gc3BlZWQgfHwgMTAwOw0KKyAgICAgIGlmIChy b3dzQ2FjaGVbcm93XSkgew0KKyAgICAgICAgdmFyICRjZWxsID0gJChnZXRD ZWxsTm9kZShyb3csIGNlbGwpKTsNCisNCisgICAgICAgIGZ1bmN0aW9uIHRv Z2dsZUNlbGxDbGFzcyh0aW1lcykgew0KKyAgICAgICAgICBpZiAoIXRpbWVz KSB7DQorICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgICB9DQorICAg ICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgew0KKyAgICAgICAgICAg ICAgICAkY2VsbC5xdWV1ZShmdW5jdGlvbiAoKSB7DQorICAgICAgICAgICAg ICAgICAgJGNlbGwudG9nZ2xlQ2xhc3Mob3B0aW9ucy5jZWxsRmxhc2hpbmdD c3NDbGFzcykuZGVxdWV1ZSgpOw0KKyAgICAgICAgICAgICAgICAgIHRvZ2ds ZUNlbGxDbGFzcyh0aW1lcyAtIDEpOw0KKyAgICAgICAgICAgICAgICB9KTsN CisgICAgICAgICAgICAgIH0sDQorICAgICAgICAgICAgICBzcGVlZCk7DQor ICAgICAgICB9DQorDQorICAgICAgICB0b2dnbGVDZWxsQ2xhc3MoNCk7DQor ICAgICAgfQ0KKyAgICB9DQorDQorICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisgICAgLy8gSW50ZXJh Y3Rpdml0eQ0KKw0KKyAgICBmdW5jdGlvbiBoYW5kbGVNb3VzZVdoZWVsKGUp IHsNCisgICAgICB2YXIgcm93Tm9kZSA9ICQoZS50YXJnZXQpLmNsb3Nlc3Qo Ii5zbGljay1yb3ciKVswXTsNCisgICAgICBpZiAocm93Tm9kZSAhPSByb3dO b2RlRnJvbUxhc3RNb3VzZVdoZWVsRXZlbnQpIHsNCisgICAgICAgIGlmICh6 b21iaWVSb3dOb2RlRnJvbUxhc3RNb3VzZVdoZWVsRXZlbnQgJiYgem9tYmll Um93Tm9kZUZyb21MYXN0TW91c2VXaGVlbEV2ZW50ICE9IHJvd05vZGUpIHsN CisgICAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlQXN5bmNQb3N0UmVuZGVy Q2xlYW51cCAmJiB6b21iaWVSb3dQb3N0UHJvY2Vzc2VkRnJvbUxhc3RNb3Vz ZVdoZWVsRXZlbnQpIHsNCisgICAgICAgICAgICBxdWV1ZVBvc3RQcm9jZXNz ZWRSb3dGb3JDbGVhbnVwKHpvbWJpZVJvd0NhY2hlRnJvbUxhc3RNb3VzZVdo ZWVsRXZlbnQsDQorICAgICAgICAgICAgICB6b21iaWVSb3dQb3N0UHJvY2Vz c2VkRnJvbUxhc3RNb3VzZVdoZWVsRXZlbnQpOw0KKyAgICAgICAgICB9IGVs c2Ugew0KKyAgICAgICAgICAgICRjYW52YXNbMF0ucmVtb3ZlQ2hpbGQoem9t YmllUm93Tm9kZUZyb21MYXN0TW91c2VXaGVlbEV2ZW50KTsNCisgICAgICAg ICAgfQ0KKyAgICAgICAgICB6b21iaWVSb3dOb2RlRnJvbUxhc3RNb3VzZVdo ZWVsRXZlbnQgPSBudWxsOw0KKyAgICAgICAgICB6b21iaWVSb3dDYWNoZUZy b21MYXN0TW91c2VXaGVlbEV2ZW50ID0gbnVsbDsNCisgICAgICAgICAgem9t YmllUm93UG9zdFByb2Nlc3NlZEZyb21MYXN0TW91c2VXaGVlbEV2ZW50ID0g bnVsbDsNCisNCisgICAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlQXN5bmNQ b3N0UmVuZGVyQ2xlYW51cCkgeyBzdGFydFBvc3RQcm9jZXNzaW5nQ2xlYW51 cCgpOyB9DQorICAgICAgICB9DQorICAgICAgICByb3dOb2RlRnJvbUxhc3RN b3VzZVdoZWVsRXZlbnQgPSByb3dOb2RlOw0KKyAgICAgIH0NCisgICAgfQ0K Kw0KKyAgICBmdW5jdGlvbiBoYW5kbGVEcmFnSW5pdChlLCBkZCkgew0KKyAg ICAgIHZhciBjZWxsID0gZ2V0Q2VsbEZyb21FdmVudChlKTsNCisgICAgICBp ZiAoIWNlbGwgfHwgIWNlbGxFeGlzdHMoY2VsbC5yb3csIGNlbGwuY2VsbCkp IHsNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICB9DQorDQorICAg ICAgdmFyIHJldHZhbCA9IHRyaWdnZXIoc2VsZi5vbkRyYWdJbml0LCBkZCwg ZSk7DQorICAgICAgaWYgKGUuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3Bw ZWQoKSkgew0KKyAgICAgICAgcmV0dXJuIHJldHZhbDsNCisgICAgICB9DQor DQorICAgICAgLy8gaWYgbm9ib2R5IGNsYWltcyB0byBiZSBoYW5kbGluZyBk cmFnJ24nZHJvcCBieSBzdG9wcGluZyBpbW1lZGlhdGUgcHJvcGFnYXRpb24s DQorICAgICAgLy8gY2FuY2VsIG91dCBvZiBpdA0KKyAgICAgIHJldHVybiBm YWxzZTsNCisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBoYW5kbGVEcmFnU3Rh cnQoZSwgZGQpIHsNCisgICAgICB2YXIgY2VsbCA9IGdldENlbGxGcm9tRXZl bnQoZSk7DQorICAgICAgaWYgKCFjZWxsIHx8ICFjZWxsRXhpc3RzKGNlbGwu cm93LCBjZWxsLmNlbGwpKSB7DQorICAgICAgICByZXR1cm4gZmFsc2U7DQor ICAgICAgfQ0KKw0KKyAgICAgIHZhciByZXR2YWwgPSB0cmlnZ2VyKHNlbGYu b25EcmFnU3RhcnQsIGRkLCBlKTsNCisgICAgICBpZiAoZS5pc0ltbWVkaWF0 ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKSB7DQorICAgICAgICByZXR1cm4gcmV0 dmFsOw0KKyAgICAgIH0NCisNCisgICAgICByZXR1cm4gZmFsc2U7DQorICAg IH0NCisNCisgICAgZnVuY3Rpb24gaGFuZGxlRHJhZyhlLCBkZCkgew0KKyAg ICAgIHJldHVybiB0cmlnZ2VyKHNlbGYub25EcmFnLCBkZCwgZSk7DQorICAg IH0NCisNCisgICAgZnVuY3Rpb24gaGFuZGxlRHJhZ0VuZChlLCBkZCkgew0K KyAgICAgIHRyaWdnZXIoc2VsZi5vbkRyYWdFbmQsIGRkLCBlKTsNCisgICAg fQ0KKw0KKyAgICBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGUpIHsNCisgICAg ICB0cmlnZ2VyKHNlbGYub25LZXlEb3duLCB7cm93OiBhY3RpdmVSb3csIGNl bGw6IGFjdGl2ZUNlbGwsIGdyaWQ6IHNlbGZ9LCBlKTsNCisgICAgICB2YXIg aGFuZGxlZCA9IGUuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKTsN CisgICAgICB2YXIga2V5Q29kZSA9IFNsaWNrLmtleUNvZGU7DQorDQorICAg ICAgaWYgKCFoYW5kbGVkKSB7DQorICAgICAgICBpZiAoIWUuc2hpZnRLZXkg JiYgIWUuYWx0S2V5ICYmICFlLmN0cmxLZXkpIHsNCisgICAgICAgICAgLy8g ZWRpdG9yIG1heSBzcGVjaWZ5IGFuIGFycmF5IG9mIGtleXMgdG8gYnViYmxl DQorICAgICAgICAgIGlmIChvcHRpb25zLmVkaXRhYmxlICYmIGN1cnJlbnRF ZGl0b3IgJiYgY3VycmVudEVkaXRvci5rZXlDYXB0dXJlTGlzdCkgew0KKyAg ICAgICAgICAgIGlmIChjdXJyZW50RWRpdG9yLmtleUNhcHR1cmVMaXN0Lmlu ZGV4T2YoIGUud2hpY2ggKSA+IC0xKSB7DQorICAgICAgICAgICAgICAgIHJl dHVybjsNCisgICAgICAgICAgICB9DQorICAgICAgICAgIH0NCisgICAgICAg ICAgaWYgKGUud2hpY2ggPT0ga2V5Q29kZS5FU0NBUEUpIHsNCisgICAgICAg ICAgICBpZiAoIWdldEVkaXRvckxvY2soKS5pc0FjdGl2ZSgpKSB7DQorICAg ICAgICAgICAgICByZXR1cm47IC8vIG5vIGVkaXRpbmcgbW9kZSB0byBjYW5j ZWwsIGFsbG93IGJ1YmJsaW5nIGFuZCBkZWZhdWx0IHByb2Nlc3NpbmcgKGV4 aXQgd2l0aG91dCBjYW5jZWxsaW5nIHRoZSBldmVudCkNCisgICAgICAgICAg ICB9DQorICAgICAgICAgICAgY2FuY2VsRWRpdEFuZFNldEZvY3VzKCk7DQor ICAgICAgICAgIH0gZWxzZSBpZiAoZS53aGljaCA9PSBrZXlDb2RlLlBBR0Vf RE9XTikgew0KKyAgICAgICAgICAgIG5hdmlnYXRlUGFnZURvd24oKTsNCisg ICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsNCisgICAgICAgICAgfSBlbHNl IGlmIChlLndoaWNoID09IGtleUNvZGUuUEFHRV9VUCkgew0KKyAgICAgICAg ICAgIG5hdmlnYXRlUGFnZVVwKCk7DQorICAgICAgICAgICAgaGFuZGxlZCA9 IHRydWU7DQorICAgICAgICAgIH0gZWxzZSBpZiAoZS53aGljaCA9PSBrZXlD b2RlLkxFRlQpIHsNCisgICAgICAgICAgICBoYW5kbGVkID0gbmF2aWdhdGVM ZWZ0KCk7DQorICAgICAgICAgIH0gZWxzZSBpZiAoZS53aGljaCA9PSBrZXlD b2RlLlJJR0hUKSB7DQorICAgICAgICAgICAgaGFuZGxlZCA9IG5hdmlnYXRl UmlnaHQoKTsNCisgICAgICAgICAgfSBlbHNlIGlmIChlLndoaWNoID09IGtl eUNvZGUuVVApIHsNCisgICAgICAgICAgICBoYW5kbGVkID0gbmF2aWdhdGVV cCgpOw0KKyAgICAgICAgICB9IGVsc2UgaWYgKGUud2hpY2ggPT0ga2V5Q29k ZS5ET1dOKSB7DQorICAgICAgICAgICAgaGFuZGxlZCA9IG5hdmlnYXRlRG93 bigpOw0KKyAgICAgICAgICB9IGVsc2UgaWYgKGUud2hpY2ggPT0ga2V5Q29k ZS5UQUIpIHsNCisgICAgICAgICAgICBoYW5kbGVkID0gbmF2aWdhdGVOZXh0 KCk7DQorICAgICAgICAgIH0gZWxzZSBpZiAoZS53aGljaCA9PSBrZXlDb2Rl LkVOVEVSKSB7DQorICAgICAgICAgICAgaWYgKG9wdGlvbnMuZWRpdGFibGUp IHsNCisgICAgICAgICAgICAgIGlmIChjdXJyZW50RWRpdG9yKSB7DQorICAg ICAgICAgICAgICAgIC8vIGFkZGluZyBuZXcgcm93DQorICAgICAgICAgICAg ICAgIGlmIChhY3RpdmVSb3cgPT09IGdldERhdGFMZW5ndGgoKSkgew0KKyAg ICAgICAgICAgICAgICAgIG5hdmlnYXRlRG93bigpOw0KKyAgICAgICAgICAg ICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgICAgIGNvbW1pdEVkaXRB bmRTZXRGb2N1cygpOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAg ICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgICBpZiAoZ2V0RWRpdG9y TG9jaygpLmNvbW1pdEN1cnJlbnRFZGl0KCkpIHsNCisgICAgICAgICAgICAg ICAgICBtYWtlQWN0aXZlQ2VsbEVkaXRhYmxlKCk7DQorICAgICAgICAgICAg ICAgIH0NCisgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAg ICAgICAgICAgaGFuZGxlZCA9IHRydWU7DQorICAgICAgICAgIH0NCisgICAg ICAgIH0gZWxzZSBpZiAoZS53aGljaCA9PSBrZXlDb2RlLlRBQiAmJiBlLnNo aWZ0S2V5ICYmICFlLmN0cmxLZXkgJiYgIWUuYWx0S2V5KSB7DQorICAgICAg ICAgIGhhbmRsZWQgPSBuYXZpZ2F0ZVByZXYoKTsNCisgICAgICAgIH0NCisg ICAgICB9DQorDQorICAgICAgaWYgKGhhbmRsZWQpIHsNCisgICAgICAgIC8v IHRoZSBldmVudCBoYXMgYmVlbiBoYW5kbGVkIHNvIGRvbid0IGxldCBwYXJl bnQgZWxlbWVudCAoYnViYmxpbmcvcHJvcGFnYXRpb24pIG9yIGJyb3dzZXIg KGRlZmF1bHQpIGhhbmRsZSBpdA0KKyAgICAgICAgZS5zdG9wUHJvcGFnYXRp b24oKTsNCisgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCisgICAgICAg IHRyeSB7DQorICAgICAgICAgIGUub3JpZ2luYWxFdmVudC5rZXlDb2RlID0g MDsgLy8gcHJldmVudCBkZWZhdWx0IGJlaGF2aW91ciBmb3Igc3BlY2lhbCBr ZXlzIGluIElFIGJyb3dzZXJzIChGMywgRjUsIGV0Yy4pDQorICAgICAgICB9 DQorICAgICAgICAvLyBpZ25vcmUgZXhjZXB0aW9ucyAtIHNldHRpbmcgdGhl IG9yaWdpbmFsIGV2ZW50J3Mga2V5Y29kZSB0aHJvd3MgYWNjZXNzIGRlbmll ZCBleGNlcHRpb24gZm9yICJDdHJsIg0KKyAgICAgICAgLy8gKGhpdHRpbmcg Y29udHJvbCBrZXkgb25seSwgbm90aGluZyBlbHNlKSwgIlNoaWZ0IiAobWF5 YmUgb3RoZXJzKQ0KKyAgICAgICAgY2F0Y2ggKGVycm9yKSB7DQorICAgICAg ICB9DQorICAgICAgfQ0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIGhhbmRs ZUNsaWNrKGUpIHsNCisgICAgICBpZiAoIWN1cnJlbnRFZGl0b3IpIHsNCisg ICAgICAgIC8vIGlmIHRoaXMgY2xpY2sgcmVzdWx0ZWQgaW4gc29tZSBjZWxs IGNoaWxkIG5vZGUgZ2V0dGluZyBmb2N1cywNCisgICAgICAgIC8vIGRvbid0 IHN0ZWFsIGl0IGJhY2sgLSBrZXlib2FyZCBldmVudHMgd2lsbCBzdGlsbCBi dWJibGUgdXANCisgICAgICAgIC8vIElFOSsgc2VlbXMgdG8gZGVmYXVsdCBE SVZzIHRvIHRhYkluZGV4PTAgaW5zdGVhZCBvZiAtMSwgc28gY2hlY2sgZm9y IGNlbGwgY2xpY2tzIGRpcmVjdGx5Lg0KKyAgICAgICAgaWYgKGUudGFyZ2V0 ICE9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgfHwgJChlLnRhcmdldCkuaGFz Q2xhc3MoInNsaWNrLWNlbGwiKSkgew0KKyAgICAgICAgICBzZXRGb2N1cygp Ow0KKyAgICAgICAgfQ0KKyAgICAgIH0NCisNCisgICAgICB2YXIgY2VsbCA9 IGdldENlbGxGcm9tRXZlbnQoZSk7DQorICAgICAgaWYgKCFjZWxsIHx8IChj dXJyZW50RWRpdG9yICE9PSBudWxsICYmIGFjdGl2ZVJvdyA9PSBjZWxsLnJv dyAmJiBhY3RpdmVDZWxsID09IGNlbGwuY2VsbCkpIHsNCisgICAgICAgIHJl dHVybjsNCisgICAgICB9DQorDQorICAgICAgdHJpZ2dlcihzZWxmLm9uQ2xp Y2ssIHtyb3c6IGNlbGwucm93LCBjZWxsOiBjZWxsLmNlbGwsIGdyaWQ6IHNl bGZ9LCBlKTsNCisgICAgICBpZiAoZS5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9u U3RvcHBlZCgpKSB7DQorICAgICAgICByZXR1cm47DQorICAgICAgfQ0KKyAg ICAgIA0KKyAgICAgIC8vIHRoaXMgb3B0aW1pc2F0aW9uIGNhdXNlcyB0cm91 YmxlIC0gTUxlaWJtYW4gIzMyOQ0KKyAgICAgIC8vaWYgKChhY3RpdmVDZWxs ICE9IGNlbGwuY2VsbCB8fCBhY3RpdmVSb3cgIT0gY2VsbC5yb3cpICYmIGNh bkNlbGxCZUFjdGl2ZShjZWxsLnJvdywgY2VsbC5jZWxsKSkgew0KKyAgICAg IGlmIChjYW5DZWxsQmVBY3RpdmUoY2VsbC5yb3csIGNlbGwuY2VsbCkpIHsN CisgICAgICAgIGlmICghZ2V0RWRpdG9yTG9jaygpLmlzQWN0aXZlKCkgfHwg Z2V0RWRpdG9yTG9jaygpLmNvbW1pdEN1cnJlbnRFZGl0KCkpIHsNCisgICAg ICAgICAgc2Nyb2xsUm93SW50b1ZpZXcoY2VsbC5yb3csIGZhbHNlKTsNCisN CisgICAgICAgICAgdmFyIHByZUNsaWNrTW9kZU9uID0gKGUudGFyZ2V0ICYm IGUudGFyZ2V0LmNsYXNzTmFtZSA9PT0gU2xpY2sucHJlQ2xpY2tDbGFzc05h bWUpOw0KKyAgICAgICAgICBzZXRBY3RpdmVDZWxsSW50ZXJuYWwoZ2V0Q2Vs bE5vZGUoY2VsbC5yb3csIGNlbGwuY2VsbCksIG51bGwsIHByZUNsaWNrTW9k ZU9uKTsNCisgICAgICAgIH0NCisgICAgICB9DQorICAgIH0NCisNCisgICAg ZnVuY3Rpb24gaGFuZGxlQ29udGV4dE1lbnUoZSkgew0KKyAgICAgIHZhciAk Y2VsbCA9ICQoZS50YXJnZXQpLmNsb3Nlc3QoIi5zbGljay1jZWxsIiwgJGNh bnZhcyk7DQorICAgICAgaWYgKCRjZWxsLmxlbmd0aCA9PT0gMCkgew0KKyAg ICAgICAgcmV0dXJuOw0KKyAgICAgIH0NCisNCisgICAgICAvLyBhcmUgd2Ug ZWRpdGluZyB0aGlzIGNlbGw/DQorICAgICAgaWYgKGFjdGl2ZUNlbGxOb2Rl ID09PSAkY2VsbFswXSAmJiBjdXJyZW50RWRpdG9yICE9PSBudWxsKSB7DQor ICAgICAgICByZXR1cm47DQorICAgICAgfQ0KKw0KKyAgICAgIHRyaWdnZXIo c2VsZi5vbkNvbnRleHRNZW51LCB7Z3JpZDogc2VsZn0sIGUpOw0KKyAgICB9 DQorDQorICAgIGZ1bmN0aW9uIGhhbmRsZURibENsaWNrKGUpIHsNCisgICAg ICB2YXIgY2VsbCA9IGdldENlbGxGcm9tRXZlbnQoZSk7DQorICAgICAgaWYg KCFjZWxsIHx8IChjdXJyZW50RWRpdG9yICE9PSBudWxsICYmIGFjdGl2ZVJv dyA9PSBjZWxsLnJvdyAmJiBhY3RpdmVDZWxsID09IGNlbGwuY2VsbCkpIHsN CisgICAgICAgIHJldHVybjsNCisgICAgICB9DQorDQorICAgICAgdHJpZ2dl cihzZWxmLm9uRGJsQ2xpY2ssIHtyb3c6IGNlbGwucm93LCBjZWxsOiBjZWxs LmNlbGwsIGdyaWQ6IHNlbGZ9LCBlKTsNCisgICAgICBpZiAoZS5pc0ltbWVk aWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKSB7DQorICAgICAgICByZXR1cm47 DQorICAgICAgfQ0KKw0KKyAgICAgIGlmIChvcHRpb25zLmVkaXRhYmxlKSB7 DQorICAgICAgICBnb3RvQ2VsbChjZWxsLnJvdywgY2VsbC5jZWxsLCB0cnVl KTsNCisgICAgICB9DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gaGFuZGxl SGVhZGVyTW91c2VFbnRlcihlKSB7DQorICAgICAgdHJpZ2dlcihzZWxmLm9u SGVhZGVyTW91c2VFbnRlciwgew0KKyAgICAgICAgImNvbHVtbiI6ICQodGhp cykuZGF0YSgiY29sdW1uIiksDQorICAgICAgICAiZ3JpZCI6IHNlbGYNCisg ICAgICB9LCBlKTsNCisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBoYW5kbGVI ZWFkZXJNb3VzZUxlYXZlKGUpIHsNCisgICAgICB0cmlnZ2VyKHNlbGYub25I ZWFkZXJNb3VzZUxlYXZlLCB7DQorICAgICAgICAiY29sdW1uIjogJCh0aGlz KS5kYXRhKCJjb2x1bW4iKSwNCisgICAgICAgICJncmlkIjogc2VsZg0KKyAg ICAgIH0sIGUpOw0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIGhhbmRsZUhl YWRlckNvbnRleHRNZW51KGUpIHsNCisgICAgICB2YXIgJGhlYWRlciA9ICQo ZS50YXJnZXQpLmNsb3Nlc3QoIi5zbGljay1oZWFkZXItY29sdW1uIiwgIi5z bGljay1oZWFkZXItY29sdW1ucyIpOw0KKyAgICAgIHZhciBjb2x1bW4gPSAk aGVhZGVyICYmICRoZWFkZXIuZGF0YSgiY29sdW1uIik7DQorICAgICAgdHJp Z2dlcihzZWxmLm9uSGVhZGVyQ29udGV4dE1lbnUsIHtjb2x1bW46IGNvbHVt biwgZ3JpZDogc2VsZn0sIGUpOw0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9u IGhhbmRsZUhlYWRlckNsaWNrKGUpIHsNCisgICAgICB2YXIgJGhlYWRlciA9 ICQoZS50YXJnZXQpLmNsb3Nlc3QoIi5zbGljay1oZWFkZXItY29sdW1uIiwg Ii5zbGljay1oZWFkZXItY29sdW1ucyIpOw0KKyAgICAgIHZhciBjb2x1bW4g PSAkaGVhZGVyICYmICRoZWFkZXIuZGF0YSgiY29sdW1uIik7DQorICAgICAg aWYgKGNvbHVtbikgew0KKyAgICAgICAgdHJpZ2dlcihzZWxmLm9uSGVhZGVy Q2xpY2ssIHtjb2x1bW46IGNvbHVtbiwgZ3JpZDogc2VsZn0sIGUpOw0KKyAg ICAgIH0NCisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBoYW5kbGVNb3VzZUVu dGVyKGUpIHsNCisgICAgICB0cmlnZ2VyKHNlbGYub25Nb3VzZUVudGVyLCB7 Z3JpZDogc2VsZn0sIGUpOw0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIGhh bmRsZU1vdXNlTGVhdmUoZSkgew0KKyAgICAgIHRyaWdnZXIoc2VsZi5vbk1v dXNlTGVhdmUsIHtncmlkOiBzZWxmfSwgZSk7DQorICAgIH0NCisNCisgICAg ZnVuY3Rpb24gY2VsbEV4aXN0cyhyb3csIGNlbGwpIHsNCisgICAgICByZXR1 cm4gIShyb3cgPCAwIHx8IHJvdyA+PSBnZXREYXRhTGVuZ3RoKCkgfHwgY2Vs bCA8IDAgfHwgY2VsbCA+PSBjb2x1bW5zLmxlbmd0aCk7DQorICAgIH0NCisN CisgICAgZnVuY3Rpb24gZ2V0Q2VsbEZyb21Qb2ludCh4LCB5KSB7DQorICAg ICAgdmFyIHJvdyA9IGdldFJvd0Zyb21Qb3NpdGlvbih5KTsNCisgICAgICB2 YXIgY2VsbCA9IDA7DQorDQorICAgICAgdmFyIHcgPSAwOw0KKyAgICAgIGZv ciAodmFyIGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGggJiYgdyA8IHg7IGkr Kykgew0KKyAgICAgICAgdyArPSBjb2x1bW5zW2ldLndpZHRoOw0KKyAgICAg ICAgY2VsbCsrOw0KKyAgICAgIH0NCisNCisgICAgICBpZiAoY2VsbCA8IDAp IHsNCisgICAgICAgIGNlbGwgPSAwOw0KKyAgICAgIH0NCisNCisgICAgICBy ZXR1cm4ge3Jvdzogcm93LCBjZWxsOiBjZWxsIC0gMX07DQorICAgIH0NCisN CisgICAgZnVuY3Rpb24gZ2V0Q2VsbEZyb21Ob2RlKGNlbGxOb2RlKSB7DQor ICAgICAgLy8gcmVhZCBjb2x1bW4gbnVtYmVyIGZyb20gLmw8Y29sdW1uTnVt YmVyPiBDU1MgY2xhc3MNCisgICAgICB2YXIgY2xzID0gL2xcZCsvLmV4ZWMo Y2VsbE5vZGUuY2xhc3NOYW1lKTsNCisgICAgICBpZiAoIWNscykgew0KKyAg ICAgICAgdGhyb3cgbmV3IEVycm9yKCJnZXRDZWxsRnJvbU5vZGU6IGNhbm5v dCBnZXQgY2VsbCAtICIgKyBjZWxsTm9kZS5jbGFzc05hbWUpOw0KKyAgICAg IH0NCisgICAgICByZXR1cm4gcGFyc2VJbnQoY2xzWzBdLnN1YnN0cigxLCBj bHNbMF0ubGVuZ3RoIC0gMSksIDEwKTsNCisgICAgfQ0KKw0KKyAgICBmdW5j dGlvbiBnZXRSb3dGcm9tTm9kZShyb3dOb2RlKSB7DQorICAgICAgZm9yICh2 YXIgcm93IGluIHJvd3NDYWNoZSkgew0KKyAgICAgICAgaWYgKHJvd3NDYWNo ZVtyb3ddLnJvd05vZGUgPT09IHJvd05vZGUpIHsNCisgICAgICAgICAgcmV0 dXJuIHJvdyB8IDA7DQorICAgICAgICB9DQorICAgICAgfQ0KKw0KKyAgICAg IHJldHVybiBudWxsOw0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIGdldENl bGxGcm9tRXZlbnQoZSkgew0KKyAgICAgIHZhciAkY2VsbCA9ICQoZS50YXJn ZXQpLmNsb3Nlc3QoIi5zbGljay1jZWxsIiwgJGNhbnZhcyk7DQorICAgICAg aWYgKCEkY2VsbC5sZW5ndGgpIHsNCisgICAgICAgIHJldHVybiBudWxsOw0K KyAgICAgIH0NCisNCisgICAgICB2YXIgcm93ID0gZ2V0Um93RnJvbU5vZGUo JGNlbGxbMF0ucGFyZW50Tm9kZSk7DQorICAgICAgdmFyIGNlbGwgPSBnZXRD ZWxsRnJvbU5vZGUoJGNlbGxbMF0pOw0KKw0KKyAgICAgIGlmIChyb3cgPT0g bnVsbCB8fCBjZWxsID09IG51bGwpIHsNCisgICAgICAgIHJldHVybiBudWxs Ow0KKyAgICAgIH0gZWxzZSB7DQorICAgICAgICByZXR1cm4gew0KKyAgICAg ICAgICAicm93Ijogcm93LA0KKyAgICAgICAgICAiY2VsbCI6IGNlbGwNCisg ICAgICAgIH07DQorICAgICAgfQ0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9u IGdldENlbGxOb2RlQm94KHJvdywgY2VsbCkgew0KKyAgICAgIGlmICghY2Vs bEV4aXN0cyhyb3csIGNlbGwpKSB7DQorICAgICAgICByZXR1cm4gbnVsbDsN CisgICAgICB9DQorDQorICAgICAgdmFyIHkxID0gZ2V0Um93VG9wKHJvdyk7 DQorICAgICAgdmFyIHkyID0geTEgKyBvcHRpb25zLnJvd0hlaWdodCAtIDE7 DQorICAgICAgdmFyIHgxID0gMDsNCisgICAgICBmb3IgKHZhciBpID0gMDsg aSA8IGNlbGw7IGkrKykgew0KKyAgICAgICAgeDEgKz0gY29sdW1uc1tpXS53 aWR0aDsNCisgICAgICB9DQorICAgICAgdmFyIHgyID0geDEgKyBjb2x1bW5z W2NlbGxdLndpZHRoOw0KKw0KKyAgICAgIHJldHVybiB7DQorICAgICAgICB0 b3A6IHkxLA0KKyAgICAgICAgbGVmdDogeDEsDQorICAgICAgICBib3R0b206 IHkyLA0KKyAgICAgICAgcmlnaHQ6IHgyDQorICAgICAgfTsNCisgICAgfQ0K Kw0KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vDQorICAgIC8vIENlbGwgc3dpdGNoaW5nDQorDQorICAg IGZ1bmN0aW9uIHJlc2V0QWN0aXZlQ2VsbCgpIHsNCisgICAgICBzZXRBY3Rp dmVDZWxsSW50ZXJuYWwobnVsbCwgZmFsc2UpOw0KKyAgICB9DQorDQorICAg IGZ1bmN0aW9uIHNldEZvY3VzKCkgew0KKyAgICAgIGlmICh0YWJiaW5nRGly ZWN0aW9uID09IC0xKSB7DQorICAgICAgICAkZm9jdXNTaW5rWzBdLmZvY3Vz KCk7DQorICAgICAgfSBlbHNlIHsNCisgICAgICAgICRmb2N1c1NpbmsyWzBd LmZvY3VzKCk7DQorICAgICAgfQ0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9u IHNjcm9sbENlbGxJbnRvVmlldyhyb3csIGNlbGwsIGRvUGFnaW5nKSB7DQor ICAgICAgc2Nyb2xsUm93SW50b1ZpZXcocm93LCBkb1BhZ2luZyk7DQorDQor ICAgICAgdmFyIGNvbHNwYW4gPSBnZXRDb2xzcGFuKHJvdywgY2VsbCk7DQor ICAgICAgdmFyIGxlZnQgPSBjb2x1bW5Qb3NMZWZ0W2NlbGxdLA0KKyAgICAg ICAgcmlnaHQgPSBjb2x1bW5Qb3NSaWdodFtjZWxsICsgKGNvbHNwYW4gPiAx ID8gY29sc3BhbiAtIDEgOiAwKV0sDQorICAgICAgICBzY3JvbGxSaWdodCA9 IHNjcm9sbExlZnQgKyB2aWV3cG9ydFc7DQorDQorICAgICAgaWYgKGxlZnQg PCBzY3JvbGxMZWZ0KSB7DQorICAgICAgICAkdmlld3BvcnQuc2Nyb2xsTGVm dChsZWZ0KTsNCisgICAgICAgIGhhbmRsZVNjcm9sbCgpOw0KKyAgICAgICAg cmVuZGVyKCk7DQorICAgICAgfSBlbHNlIGlmIChyaWdodCA+IHNjcm9sbFJp Z2h0KSB7DQorICAgICAgICAkdmlld3BvcnQuc2Nyb2xsTGVmdChNYXRoLm1p bihsZWZ0LCByaWdodCAtICR2aWV3cG9ydFswXS5jbGllbnRXaWR0aCkpOw0K KyAgICAgICAgaGFuZGxlU2Nyb2xsKCk7DQorICAgICAgICByZW5kZXIoKTsN CisgICAgICB9DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gc2V0QWN0aXZl Q2VsbEludGVybmFsKG5ld0NlbGwsIG9wdF9lZGl0TW9kZSwgcHJlQ2xpY2tN b2RlT24pIHsNCisgICAgICBpZiAoYWN0aXZlQ2VsbE5vZGUgIT09IG51bGwp IHsNCisgICAgICAgIG1ha2VBY3RpdmVDZWxsTm9ybWFsKCk7DQorICAgICAg ICAkKGFjdGl2ZUNlbGxOb2RlKS5yZW1vdmVDbGFzcygiYWN0aXZlIik7DQor ICAgICAgICBpZiAocm93c0NhY2hlW2FjdGl2ZVJvd10pIHsNCisgICAgICAg ICAgJChyb3dzQ2FjaGVbYWN0aXZlUm93XS5yb3dOb2RlKS5yZW1vdmVDbGFz cygiYWN0aXZlIik7DQorICAgICAgICB9DQorICAgICAgfQ0KKw0KKyAgICAg IHZhciBhY3RpdmVDZWxsQ2hhbmdlZCA9IChhY3RpdmVDZWxsTm9kZSAhPT0g bmV3Q2VsbCk7DQorICAgICAgYWN0aXZlQ2VsbE5vZGUgPSBuZXdDZWxsOw0K Kw0KKyAgICAgIGlmIChhY3RpdmVDZWxsTm9kZSAhPSBudWxsKSB7DQorICAg ICAgICBhY3RpdmVSb3cgPSBnZXRSb3dGcm9tTm9kZShhY3RpdmVDZWxsTm9k ZS5wYXJlbnROb2RlKTsNCisgICAgICAgIGFjdGl2ZUNlbGwgPSBhY3RpdmVQ b3NYID0gZ2V0Q2VsbEZyb21Ob2RlKGFjdGl2ZUNlbGxOb2RlKTsNCisNCisg ICAgICAgIGlmIChvcHRfZWRpdE1vZGUgPT0gbnVsbCkgew0KKyAgICAgICAg ICBvcHRfZWRpdE1vZGUgPSAoYWN0aXZlUm93ID09IGdldERhdGFMZW5ndGgo KSkgfHwgb3B0aW9ucy5hdXRvRWRpdDsNCisgICAgICAgIH0NCisNCisgICAg ICAgIGlmIChvcHRpb25zLnNob3dDZWxsU2VsZWN0aW9uKSB7DQorICAgICAg ICAkKGFjdGl2ZUNlbGxOb2RlKS5hZGRDbGFzcygiYWN0aXZlIik7DQorICAg ICAgICAkKHJvd3NDYWNoZVthY3RpdmVSb3ddLnJvd05vZGUpLmFkZENsYXNz KCJhY3RpdmUiKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGlmIChvcHRp b25zLmVkaXRhYmxlICYmIG9wdF9lZGl0TW9kZSAmJiBpc0NlbGxQb3RlbnRp YWxseUVkaXRhYmxlKGFjdGl2ZVJvdywgYWN0aXZlQ2VsbCkpIHsNCisgICAg ICAgICAgY2xlYXJUaW1lb3V0KGhfZWRpdG9yTG9hZGVyKTsNCisNCisgICAg ICAgICAgaWYgKG9wdGlvbnMuYXN5bmNFZGl0b3JMb2FkaW5nKSB7DQorICAg ICAgICAgICAgaF9lZGl0b3JMb2FkZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9u ICgpIHsNCisgICAgICAgICAgICAgIG1ha2VBY3RpdmVDZWxsRWRpdGFibGUo dW5kZWZpbmVkLCBwcmVDbGlja01vZGVPbik7DQorICAgICAgICAgICAgfSwg b3B0aW9ucy5hc3luY0VkaXRvckxvYWREZWxheSk7DQorICAgICAgICAgIH0g ZWxzZSB7DQorICAgICAgICAgICAgbWFrZUFjdGl2ZUNlbGxFZGl0YWJsZSh1 bmRlZmluZWQsIHByZUNsaWNrTW9kZU9uKTsNCisgICAgICAgICAgfQ0KKyAg ICAgICAgfQ0KKyAgICAgIH0gZWxzZSB7DQorICAgICAgICBhY3RpdmVSb3cg PSBhY3RpdmVDZWxsID0gbnVsbDsNCisgICAgICB9DQorICAgIA0KKyAgICAg IC8vIHRoaXMgb3B0aW1pc2F0aW9uIGNhdXNlcyB0cm91YmxlIC0gTUxlaWJt YW4gIzMyOQ0KKyAgICAgIC8vaWYgKGFjdGl2ZUNlbGxDaGFuZ2VkKSB7DQor ICAgICAgICB0cmlnZ2VyKHNlbGYub25BY3RpdmVDZWxsQ2hhbmdlZCwgZ2V0 QWN0aXZlQ2VsbCgpKTsNCisgICAgICAvL30NCisgICAgfQ0KKw0KKyAgICBm dW5jdGlvbiBjbGVhclRleHRTZWxlY3Rpb24oKSB7DQorICAgICAgaWYgKGRv Y3VtZW50LnNlbGVjdGlvbiAmJiBkb2N1bWVudC5zZWxlY3Rpb24uZW1wdHkp IHsNCisgICAgICAgIHRyeSB7DQorICAgICAgICAgIC8vSUUgZmFpbHMgaGVy ZSBpZiBzZWxlY3RlZCBlbGVtZW50IGlzIG5vdCBpbiBkb20NCisgICAgICAg ICAgZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KCk7DQorICAgICAgICB9IGNh dGNoIChlKSB7IH0NCisgICAgICB9IGVsc2UgaWYgKHdpbmRvdy5nZXRTZWxl Y3Rpb24pIHsNCisgICAgICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0 aW9uKCk7DQorICAgICAgICBpZiAoc2VsICYmIHNlbC5yZW1vdmVBbGxSYW5n ZXMpIHsNCisgICAgICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpOw0KKyAg ICAgICAgfQ0KKyAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBp c0NlbGxQb3RlbnRpYWxseUVkaXRhYmxlKHJvdywgY2VsbCkgew0KKyAgICAg IHZhciBkYXRhTGVuZ3RoID0gZ2V0RGF0YUxlbmd0aCgpOw0KKyAgICAgIC8v IGlzIHRoZSBkYXRhIGZvciB0aGlzIHJvdyBsb2FkZWQ/DQorICAgICAgaWYg KHJvdyA8IGRhdGFMZW5ndGggJiYgIWdldERhdGFJdGVtKHJvdykpIHsNCisg ICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICB9DQorDQorICAgICAgLy8g YXJlIHdlIGluIHRoZSBBZGQgTmV3IHJvdz8gIGNhbiB3ZSBjcmVhdGUgbmV3 IGZyb20gdGhpcyBjZWxsPw0KKyAgICAgIGlmIChjb2x1bW5zW2NlbGxdLmNh bm5vdFRyaWdnZXJJbnNlcnQgJiYgcm93ID49IGRhdGFMZW5ndGgpIHsNCisg ICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICB9DQorDQorICAgICAgLy8g ZG9lcyB0aGlzIGNlbGwgaGF2ZSBhbiBlZGl0b3I/DQorICAgICAgaWYgKCFn ZXRFZGl0b3Iocm93LCBjZWxsKSkgew0KKyAgICAgICAgcmV0dXJuIGZhbHNl Ow0KKyAgICAgIH0NCisNCisgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgfQ0K Kw0KKyAgICBmdW5jdGlvbiBtYWtlQWN0aXZlQ2VsbE5vcm1hbCgpIHsNCisg ICAgICBpZiAoIWN1cnJlbnRFZGl0b3IpIHsNCisgICAgICAgIHJldHVybjsN CisgICAgICB9DQorICAgICAgdHJpZ2dlcihzZWxmLm9uQmVmb3JlQ2VsbEVk aXRvckRlc3Ryb3ksIHtlZGl0b3I6IGN1cnJlbnRFZGl0b3IsIGdyaWQ6IHNl bGZ9KTsNCisgICAgICBjdXJyZW50RWRpdG9yLmRlc3Ryb3koKTsNCisgICAg ICBjdXJyZW50RWRpdG9yID0gbnVsbDsNCisNCisgICAgICBpZiAoYWN0aXZl Q2VsbE5vZGUpIHsNCisgICAgICAgIHZhciBkID0gZ2V0RGF0YUl0ZW0oYWN0 aXZlUm93KTsNCisgICAgICAgICQoYWN0aXZlQ2VsbE5vZGUpLnJlbW92ZUNs YXNzKCJlZGl0YWJsZSBpbnZhbGlkIik7DQorICAgICAgICBpZiAoZCkgew0K KyAgICAgICAgICB2YXIgY29sdW1uID0gY29sdW1uc1thY3RpdmVDZWxsXTsN CisgICAgICAgICAgdmFyIGZvcm1hdHRlciA9IGdldEZvcm1hdHRlcihhY3Rp dmVSb3csIGNvbHVtbik7DQorICAgICAgICAgIHZhciBmb3JtYXR0ZXJSZXN1 bHQgPSAgZm9ybWF0dGVyKGFjdGl2ZVJvdywgYWN0aXZlQ2VsbCwgZ2V0RGF0 YUl0ZW1WYWx1ZUZvckNvbHVtbihkLCBjb2x1bW4pLCBjb2x1bW4sIGQsIHNl bGYpOw0KKyAgICAgICAgICBhcHBseUZvcm1hdFJlc3VsdFRvQ2VsbE5vZGUo Zm9ybWF0dGVyUmVzdWx0LCBhY3RpdmVDZWxsTm9kZSk7DQorICAgICAgICAg IGludmFsaWRhdGVQb3N0UHJvY2Vzc2luZ1Jlc3VsdHMoYWN0aXZlUm93KTsN CisgICAgICAgIH0NCisgICAgICB9DQorICAgICAgDQorICAgICAgLy8gaWYg dGhlcmUgcHJldmlvdXNseSB3YXMgdGV4dCBzZWxlY3RlZCBvbiBhIHBhZ2Ug KHN1Y2ggYXMgc2VsZWN0ZWQgdGV4dCBpbiB0aGUgZWRpdCBjZWxsIGp1c3Qg cmVtb3ZlZCksDQorICAgICAgLy8gSUUgY2FuJ3Qgc2V0IGZvY3VzIHRvIGFu eXRoaW5nIGVsc2UgY29ycmVjdGx5DQorICAgICAgaWYgKG5hdmlnYXRvci51 c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvbXNpZS8pKSB7DQorICAg ICAgICBjbGVhclRleHRTZWxlY3Rpb24oKTsNCisgICAgICB9DQorDQorICAg ICAgZ2V0RWRpdG9yTG9jaygpLmRlYWN0aXZhdGUoZWRpdENvbnRyb2xsZXIp Ow0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIG1ha2VBY3RpdmVDZWxsRWRp dGFibGUoZWRpdG9yLCBwcmVDbGlja01vZGVPbikgew0KKyAgICAgIGlmICgh YWN0aXZlQ2VsbE5vZGUpIHsNCisgICAgICAgIHJldHVybjsNCisgICAgICB9 DQorICAgICAgaWYgKCFvcHRpb25zLmVkaXRhYmxlKSB7DQorICAgICAgICB0 aHJvdyBuZXcgRXJyb3IoIkdyaWQgOiBtYWtlQWN0aXZlQ2VsbEVkaXRhYmxl IDogc2hvdWxkIG5ldmVyIGdldCBjYWxsZWQgd2hlbiBvcHRpb25zLmVkaXRh YmxlIGlzIGZhbHNlIik7DQorICAgICAgfQ0KKw0KKyAgICAgIC8vIGNhbmNl bCBwZW5kaW5nIGFzeW5jIGNhbGwgaWYgdGhlcmUgaXMgb25lDQorICAgICAg Y2xlYXJUaW1lb3V0KGhfZWRpdG9yTG9hZGVyKTsNCisNCisgICAgICBpZiAo IWlzQ2VsbFBvdGVudGlhbGx5RWRpdGFibGUoYWN0aXZlUm93LCBhY3RpdmVD ZWxsKSkgew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICAgIH0NCisNCisgICAg ICB2YXIgY29sdW1uRGVmID0gY29sdW1uc1thY3RpdmVDZWxsXTsNCisgICAg ICB2YXIgaXRlbSA9IGdldERhdGFJdGVtKGFjdGl2ZVJvdyk7DQorDQorICAg ICAgaWYgKHRyaWdnZXIoc2VsZi5vbkJlZm9yZUVkaXRDZWxsLCB7cm93OiBh Y3RpdmVSb3csIGNlbGw6IGFjdGl2ZUNlbGwsIGl0ZW06IGl0ZW0sIGNvbHVt bjogY29sdW1uRGVmLCBncmlkOiBzZWxmfSkgPT09IGZhbHNlKSB7DQorICAg ICAgICBzZXRGb2N1cygpOw0KKyAgICAgICAgcmV0dXJuOw0KKyAgICAgIH0N CisNCisgICAgICBnZXRFZGl0b3JMb2NrKCkuYWN0aXZhdGUoZWRpdENvbnRy b2xsZXIpOw0KKyAgICAgICQoYWN0aXZlQ2VsbE5vZGUpLmFkZENsYXNzKCJl ZGl0YWJsZSIpOw0KKw0KKyAgICAgIHZhciB1c2VFZGl0b3IgPSBlZGl0b3Ig fHwgZ2V0RWRpdG9yKGFjdGl2ZVJvdywgYWN0aXZlQ2VsbCk7DQorDQorICAg ICAgLy8gZG9uJ3QgY2xlYXIgdGhlIGNlbGwgaWYgYSBjdXN0b20gZWRpdG9y IGlzIHBhc3NlZCB0aHJvdWdoDQorICAgICAgaWYgKCFlZGl0b3IgJiYgIXVz ZUVkaXRvci5zdXBwcmVzc0NsZWFyT25FZGl0KSB7DQorICAgICAgICBhY3Rp dmVDZWxsTm9kZS5pbm5lckhUTUwgPSAiIjsNCisgICAgICB9DQorDQorICAg ICAgY3VycmVudEVkaXRvciA9IG5ldyB1c2VFZGl0b3Ioew0KKyAgICAgICAg Z3JpZDogc2VsZiwNCisgICAgICAgIGdyaWRQb3NpdGlvbjogYWJzQm94KCRj b250YWluZXJbMF0pLA0KKyAgICAgICAgcG9zaXRpb246IGFic0JveChhY3Rp dmVDZWxsTm9kZSksDQorICAgICAgICBjb250YWluZXI6IGFjdGl2ZUNlbGxO b2RlLA0KKyAgICAgICAgY29sdW1uOiBjb2x1bW5EZWYsDQorICAgICAgICBp dGVtOiBpdGVtIHx8IHt9LA0KKyAgICAgICAgY29tbWl0Q2hhbmdlczogY29t bWl0RWRpdEFuZFNldEZvY3VzLA0KKyAgICAgICAgY2FuY2VsQ2hhbmdlczog Y2FuY2VsRWRpdEFuZFNldEZvY3VzDQorICAgICAgfSk7DQorDQorICAgICAg aWYgKGl0ZW0pIHsNCisgICAgICAgIGN1cnJlbnRFZGl0b3IubG9hZFZhbHVl KGl0ZW0pOw0KKyAgICAgICAgaWYgKHByZUNsaWNrTW9kZU9uICYmIGN1cnJl bnRFZGl0b3IucHJlQ2xpY2spIHsNCisgICAgICAgICAgY3VycmVudEVkaXRv ci5wcmVDbGljaygpOw0KKyAgICAgICAgfQ0KKyAgICAgIH0NCisNCisgICAg ICBzZXJpYWxpemVkRWRpdG9yVmFsdWUgPSBjdXJyZW50RWRpdG9yLnNlcmlh bGl6ZVZhbHVlKCk7DQorDQorICAgICAgaWYgKGN1cnJlbnRFZGl0b3IucG9z aXRpb24pIHsNCisgICAgICAgIGhhbmRsZUFjdGl2ZUNlbGxQb3NpdGlvbkNo YW5nZSgpOw0KKyAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBj b21taXRFZGl0QW5kU2V0Rm9jdXMoKSB7DQorICAgICAgLy8gaWYgdGhlIGNv bW1pdCBmYWlscywgaXQgd291bGQgZG8gc28gZHVlIHRvIGEgdmFsaWRhdGlv biBlcnJvcg0KKyAgICAgIC8vIGlmIHNvLCBkbyBub3Qgc3RlYWwgdGhlIGZv Y3VzIGZyb20gdGhlIGVkaXRvcg0KKyAgICAgIGlmIChnZXRFZGl0b3JMb2Nr KCkuY29tbWl0Q3VycmVudEVkaXQoKSkgew0KKyAgICAgICAgc2V0Rm9jdXMo KTsNCisgICAgICAgIGlmIChvcHRpb25zLmF1dG9FZGl0KSB7DQorICAgICAg ICAgIG5hdmlnYXRlRG93bigpOw0KKyAgICAgICAgfQ0KKyAgICAgIH0NCisg ICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBjYW5jZWxFZGl0QW5kU2V0Rm9jdXMo KSB7DQorICAgICAgaWYgKGdldEVkaXRvckxvY2soKS5jYW5jZWxDdXJyZW50 RWRpdCgpKSB7DQorICAgICAgICBzZXRGb2N1cygpOw0KKyAgICAgIH0NCisg ICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBhYnNCb3goZWxlbSkgew0KKyAgICAg IHZhciBib3ggPSB7DQorICAgICAgICB0b3A6IGVsZW0ub2Zmc2V0VG9wLA0K KyAgICAgICAgbGVmdDogZWxlbS5vZmZzZXRMZWZ0LA0KKyAgICAgICAgYm90 dG9tOiAwLA0KKyAgICAgICAgcmlnaHQ6IDAsDQorICAgICAgICB3aWR0aDog JChlbGVtKS5vdXRlcldpZHRoKCksDQorICAgICAgICBoZWlnaHQ6ICQoZWxl bSkub3V0ZXJIZWlnaHQoKSwNCisgICAgICAgIHZpc2libGU6IHRydWV9Ow0K KyAgICAgIGJveC5ib3R0b20gPSBib3gudG9wICsgYm94LmhlaWdodDsNCisg ICAgICBib3gucmlnaHQgPSBib3gubGVmdCArIGJveC53aWR0aDsNCisNCisg ICAgICAvLyB3YWxrIHVwIHRoZSB0cmVlDQorICAgICAgdmFyIG9mZnNldFBh cmVudCA9IGVsZW0ub2Zmc2V0UGFyZW50Ow0KKyAgICAgIHdoaWxlICgoZWxl bSA9IGVsZW0ucGFyZW50Tm9kZSkgIT0gZG9jdW1lbnQuYm9keSkgew0KKyAg ICAgICAgaWYgKGVsZW0gPT0gbnVsbCkgYnJlYWs7DQorDQorICAgICAgICBp ZiAoYm94LnZpc2libGUgJiYgZWxlbS5zY3JvbGxIZWlnaHQgIT0gZWxlbS5v ZmZzZXRIZWlnaHQgJiYgJChlbGVtKS5jc3MoIm92ZXJmbG93WSIpICE9ICJ2 aXNpYmxlIikgew0KKyAgICAgICAgICBib3gudmlzaWJsZSA9IGJveC5ib3R0 b20gPiBlbGVtLnNjcm9sbFRvcCAmJiBib3gudG9wIDwgZWxlbS5zY3JvbGxU b3AgKyBlbGVtLmNsaWVudEhlaWdodDsNCisgICAgICAgIH0NCisNCisgICAg ICAgIGlmIChib3gudmlzaWJsZSAmJiBlbGVtLnNjcm9sbFdpZHRoICE9IGVs ZW0ub2Zmc2V0V2lkdGggJiYgJChlbGVtKS5jc3MoIm92ZXJmbG93WCIpICE9 ICJ2aXNpYmxlIikgew0KKyAgICAgICAgICBib3gudmlzaWJsZSA9IGJveC5y aWdodCA+IGVsZW0uc2Nyb2xsTGVmdCAmJiBib3gubGVmdCA8IGVsZW0uc2Ny b2xsTGVmdCArIGVsZW0uY2xpZW50V2lkdGg7DQorICAgICAgICB9DQorDQor ICAgICAgICBib3gubGVmdCAtPSBlbGVtLnNjcm9sbExlZnQ7DQorICAgICAg ICBib3gudG9wIC09IGVsZW0uc2Nyb2xsVG9wOw0KKw0KKyAgICAgICAgaWYg KGVsZW0gPT09IG9mZnNldFBhcmVudCkgew0KKyAgICAgICAgICBib3gubGVm dCArPSBlbGVtLm9mZnNldExlZnQ7DQorICAgICAgICAgIGJveC50b3AgKz0g ZWxlbS5vZmZzZXRUb3A7DQorICAgICAgICAgIG9mZnNldFBhcmVudCA9IGVs ZW0ub2Zmc2V0UGFyZW50Ow0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgYm94 LmJvdHRvbSA9IGJveC50b3AgKyBib3guaGVpZ2h0Ow0KKyAgICAgICAgYm94 LnJpZ2h0ID0gYm94LmxlZnQgKyBib3gud2lkdGg7DQorICAgICAgfQ0KKw0K KyAgICAgIHJldHVybiBib3g7DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24g Z2V0QWN0aXZlQ2VsbFBvc2l0aW9uKCkgew0KKyAgICAgIHJldHVybiBhYnNC b3goYWN0aXZlQ2VsbE5vZGUpOw0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9u IGdldEdyaWRQb3NpdGlvbigpIHsNCisgICAgICByZXR1cm4gYWJzQm94KCRj b250YWluZXJbMF0pDQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gaGFuZGxl QWN0aXZlQ2VsbFBvc2l0aW9uQ2hhbmdlKCkgew0KKyAgICAgIGlmICghYWN0 aXZlQ2VsbE5vZGUpIHsNCisgICAgICAgIHJldHVybjsNCisgICAgICB9DQor DQorICAgICAgdHJpZ2dlcihzZWxmLm9uQWN0aXZlQ2VsbFBvc2l0aW9uQ2hh bmdlZCwge2dyaWQ6IHNlbGZ9KTsNCisNCisgICAgICBpZiAoY3VycmVudEVk aXRvcikgew0KKyAgICAgICAgdmFyIGNlbGxCb3ggPSBnZXRBY3RpdmVDZWxs UG9zaXRpb24oKTsNCisgICAgICAgIGlmIChjdXJyZW50RWRpdG9yLnNob3cg JiYgY3VycmVudEVkaXRvci5oaWRlKSB7DQorICAgICAgICAgIGlmICghY2Vs bEJveC52aXNpYmxlKSB7DQorICAgICAgICAgICAgY3VycmVudEVkaXRvci5o aWRlKCk7DQorICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgY3Vy cmVudEVkaXRvci5zaG93KCk7DQorICAgICAgICAgIH0NCisgICAgICAgIH0N CisNCisgICAgICAgIGlmIChjdXJyZW50RWRpdG9yLnBvc2l0aW9uKSB7DQor ICAgICAgICAgIGN1cnJlbnRFZGl0b3IucG9zaXRpb24oY2VsbEJveCk7DQor ICAgICAgICB9DQorICAgICAgfQ0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9u IGdldENlbGxFZGl0b3IoKSB7DQorICAgICAgcmV0dXJuIGN1cnJlbnRFZGl0 b3I7DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gZ2V0QWN0aXZlQ2VsbCgp IHsNCisgICAgICBpZiAoIWFjdGl2ZUNlbGxOb2RlKSB7DQorICAgICAgICBy ZXR1cm4gbnVsbDsNCisgICAgICB9IGVsc2Ugew0KKyAgICAgICAgcmV0dXJu IHtyb3c6IGFjdGl2ZVJvdywgY2VsbDogYWN0aXZlQ2VsbCwgZ3JpZDogc2Vs Zn07DQorICAgICAgfQ0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIGdldEFj dGl2ZUNlbGxOb2RlKCkgew0KKyAgICAgIHJldHVybiBhY3RpdmVDZWxsTm9k ZTsNCisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBzY3JvbGxSb3dJbnRvVmll dyhyb3csIGRvUGFnaW5nKSB7DQorICAgICAgdmFyIHJvd0F0VG9wID0gcm93 ICogb3B0aW9ucy5yb3dIZWlnaHQ7DQorICAgICAgdmFyIHJvd0F0Qm90dG9t ID0gKHJvdyArIDEpICogb3B0aW9ucy5yb3dIZWlnaHQgLSB2aWV3cG9ydEgg KyAodmlld3BvcnRIYXNIU2Nyb2xsID8gc2Nyb2xsYmFyRGltZW5zaW9ucy5o ZWlnaHQgOiAwKTsNCisNCisgICAgICAvLyBuZWVkIHRvIHBhZ2UgZG93bj8N CisgICAgICBpZiAoKHJvdyArIDEpICogb3B0aW9ucy5yb3dIZWlnaHQgPiBz Y3JvbGxUb3AgKyB2aWV3cG9ydEggKyBvZmZzZXQpIHsNCisgICAgICAgIHNj cm9sbFRvKGRvUGFnaW5nID8gcm93QXRUb3AgOiByb3dBdEJvdHRvbSk7DQor ICAgICAgICByZW5kZXIoKTsNCisgICAgICB9DQorICAgICAgLy8gb3IgcGFn ZSB1cD8NCisgICAgICBlbHNlIGlmIChyb3cgKiBvcHRpb25zLnJvd0hlaWdo dCA8IHNjcm9sbFRvcCArIG9mZnNldCkgew0KKyAgICAgICAgc2Nyb2xsVG8o ZG9QYWdpbmcgPyByb3dBdEJvdHRvbSA6IHJvd0F0VG9wKTsNCisgICAgICAg IHJlbmRlcigpOw0KKyAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBmdW5jdGlv biBzY3JvbGxSb3dUb1RvcChyb3cpIHsNCisgICAgICBzY3JvbGxUbyhyb3cg KiBvcHRpb25zLnJvd0hlaWdodCk7DQorICAgICAgcmVuZGVyKCk7DQorICAg IH0NCisNCisgICAgZnVuY3Rpb24gc2Nyb2xsUGFnZShkaXIpIHsNCisgICAg ICB2YXIgZGVsdGFSb3dzID0gZGlyICogbnVtVmlzaWJsZVJvd3M7DQorICAg ICAgc2Nyb2xsVG8oKGdldFJvd0Zyb21Qb3NpdGlvbihzY3JvbGxUb3ApICsg ZGVsdGFSb3dzKSAqIG9wdGlvbnMucm93SGVpZ2h0KTsNCisgICAgICByZW5k ZXIoKTsNCisNCisgICAgICBpZiAob3B0aW9ucy5lbmFibGVDZWxsTmF2aWdh dGlvbiAmJiBhY3RpdmVSb3cgIT0gbnVsbCkgew0KKyAgICAgICAgdmFyIHJv dyA9IGFjdGl2ZVJvdyArIGRlbHRhUm93czsNCisgICAgICAgIHZhciBkYXRh TGVuZ3RoSW5jbHVkaW5nQWRkTmV3ID0gZ2V0RGF0YUxlbmd0aEluY2x1ZGlu Z0FkZE5ldygpOw0KKyAgICAgICAgaWYgKHJvdyA+PSBkYXRhTGVuZ3RoSW5j bHVkaW5nQWRkTmV3KSB7DQorICAgICAgICAgIHJvdyA9IGRhdGFMZW5ndGhJ bmNsdWRpbmdBZGROZXcgLSAxOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYg KHJvdyA8IDApIHsNCisgICAgICAgICAgcm93ID0gMDsNCisgICAgICAgIH0N CisNCisgICAgICAgIHZhciBjZWxsID0gMCwgcHJldkNlbGwgPSBudWxsOw0K KyAgICAgICAgdmFyIHByZXZBY3RpdmVQb3NYID0gYWN0aXZlUG9zWDsNCisg ICAgICAgIHdoaWxlIChjZWxsIDw9IGFjdGl2ZVBvc1gpIHsNCisgICAgICAg ICAgaWYgKGNhbkNlbGxCZUFjdGl2ZShyb3csIGNlbGwpKSB7DQorICAgICAg ICAgICAgcHJldkNlbGwgPSBjZWxsOw0KKyAgICAgICAgICB9DQorICAgICAg ICAgIGNlbGwgKz0gZ2V0Q29sc3Bhbihyb3csIGNlbGwpOw0KKyAgICAgICAg fQ0KKw0KKyAgICAgICAgaWYgKHByZXZDZWxsICE9PSBudWxsKSB7DQorICAg ICAgICAgIHNldEFjdGl2ZUNlbGxJbnRlcm5hbChnZXRDZWxsTm9kZShyb3cs IHByZXZDZWxsKSk7DQorICAgICAgICAgIGFjdGl2ZVBvc1ggPSBwcmV2QWN0 aXZlUG9zWDsNCisgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgIHJlc2V0 QWN0aXZlQ2VsbCgpOw0KKyAgICAgICAgfQ0KKyAgICAgIH0NCisgICAgfQ0K Kw0KKyAgICBmdW5jdGlvbiBuYXZpZ2F0ZVBhZ2VEb3duKCkgew0KKyAgICAg IHNjcm9sbFBhZ2UoMSk7DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gbmF2 aWdhdGVQYWdlVXAoKSB7DQorICAgICAgc2Nyb2xsUGFnZSgtMSk7DQorICAg IH0NCisNCisgICAgZnVuY3Rpb24gZ2V0Q29sc3Bhbihyb3csIGNlbGwpIHsN CisgICAgICB2YXIgbWV0YWRhdGEgPSBkYXRhLmdldEl0ZW1NZXRhZGF0YSAm JiBkYXRhLmdldEl0ZW1NZXRhZGF0YShyb3cpOw0KKyAgICAgIGlmICghbWV0 YWRhdGEgfHwgIW1ldGFkYXRhLmNvbHVtbnMpIHsNCisgICAgICAgIHJldHVy biAxOw0KKyAgICAgIH0NCisNCisgICAgICB2YXIgY29sdW1uRGF0YSA9IG1l dGFkYXRhLmNvbHVtbnNbY29sdW1uc1tjZWxsXS5pZF0gfHwgbWV0YWRhdGEu Y29sdW1uc1tjZWxsXTsNCisgICAgICB2YXIgY29sc3BhbiA9IChjb2x1bW5E YXRhICYmIGNvbHVtbkRhdGEuY29sc3Bhbik7DQorICAgICAgaWYgKGNvbHNw YW4gPT09ICIqIikgew0KKyAgICAgICAgY29sc3BhbiA9IGNvbHVtbnMubGVu Z3RoIC0gY2VsbDsNCisgICAgICB9IGVsc2Ugew0KKyAgICAgICAgY29sc3Bh biA9IGNvbHNwYW4gfHwgMTsNCisgICAgICB9DQorDQorICAgICAgcmV0dXJu IGNvbHNwYW47DQorICAgIH0NCisNCisgICAgZnVuY3Rpb24gZmluZEZpcnN0 Rm9jdXNhYmxlQ2VsbChyb3cpIHsNCisgICAgICB2YXIgY2VsbCA9IDA7DQor ICAgICAgd2hpbGUgKGNlbGwgPCBjb2x1bW5zLmxlbmd0aCkgew0KKyAgICAg ICAgaWYgKGNhbkNlbGxCZUFjdGl2ZShyb3csIGNlbGwpKSB7DQorICAgICAg ICAgIHJldHVybiBjZWxsOw0KKyAgICAgICAgfQ0KKyAgICAgICAgY2VsbCAr PSBnZXRDb2xzcGFuKHJvdywgY2VsbCk7DQorICAgICAgfQ0KKyAgICAgIHJl dHVybiBudWxsOw0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIGZpbmRMYXN0 Rm9jdXNhYmxlQ2VsbChyb3cpIHsNCisgICAgICB2YXIgY2VsbCA9IDA7DQor ICAgICAgdmFyIGxhc3RGb2N1c2FibGVDZWxsID0gbnVsbDsNCisgICAgICB3 aGlsZSAoY2VsbCA8IGNvbHVtbnMubGVuZ3RoKSB7DQorICAgICAgICBpZiAo Y2FuQ2VsbEJlQWN0aXZlKHJvdywgY2VsbCkpIHsNCisgICAgICAgICAgbGFz dEZvY3VzYWJsZUNlbGwgPSBjZWxsOw0KKyAgICAgICAgfQ0KKyAgICAgICAg Y2VsbCArPSBnZXRDb2xzcGFuKHJvdywgY2VsbCk7DQorICAgICAgfQ0KKyAg ICAgIHJldHVybiBsYXN0Rm9jdXNhYmxlQ2VsbDsNCisgICAgfQ0KKw0KKyAg ICBmdW5jdGlvbiBnb3RvUmlnaHQocm93LCBjZWxsLCBwb3NYKSB7DQorICAg ICAgaWYgKGNlbGwgPj0gY29sdW1ucy5sZW5ndGgpIHsNCisgICAgICAgIHJl dHVybiBudWxsOw0KKyAgICAgIH0NCisNCisgICAgICBkbyB7DQorICAgICAg ICBjZWxsICs9IGdldENvbHNwYW4ocm93LCBjZWxsKTsNCisgICAgICB9DQor ICAgICAgd2hpbGUgKGNlbGwgPCBjb2x1bW5zLmxlbmd0aCAmJiAhY2FuQ2Vs bEJlQWN0aXZlKHJvdywgY2VsbCkpOw0KKw0KKyAgICAgIGlmIChjZWxsIDwg Y29sdW1ucy5sZW5ndGgpIHsNCisgICAgICAgIHJldHVybiB7DQorICAgICAg ICAgICJyb3ciOiByb3csDQorICAgICAgICAgICJjZWxsIjogY2VsbCwNCisg ICAgICAgICAgInBvc1giOiBjZWxsDQorICAgICAgICB9Ow0KKyAgICAgIH0N CisgICAgICByZXR1cm4gbnVsbDsNCisgICAgfQ0KKw0KKyAgICBmdW5jdGlv biBnb3RvTGVmdChyb3csIGNlbGwsIHBvc1gpIHsNCisgICAgICBpZiAoY2Vs bCA8PSAwKSB7DQorICAgICAgICByZXR1cm4gbnVsbDsNCisgICAgICB9DQor DQorICAgICAgdmFyIGZpcnN0Rm9jdXNhYmxlQ2VsbCA9IGZpbmRGaXJzdEZv Y3VzYWJsZUNlbGwocm93KTsNCisgICAgICBpZiAoZmlyc3RGb2N1c2FibGVD ZWxsID09PSBudWxsIHx8IGZpcnN0Rm9jdXNhYmxlQ2VsbCA+PSBjZWxsKSB7 DQorICAgICAgICByZXR1cm4gbnVsbDsNCisgICAgICB9DQorDQorICAgICAg dmFyIHByZXYgPSB7DQorICAgICAgICAicm93Ijogcm93LA0KKyAgICAgICAg ImNlbGwiOiBmaXJzdEZvY3VzYWJsZUNlbGwsDQorICAgICAgICAicG9zWCI6 IGZpcnN0Rm9jdXNhYmxlQ2VsbA0KKyAgICAgIH07DQorICAgICAgdmFyIHBv czsNCisgICAgICB3aGlsZSAodHJ1ZSkgew0KKyAgICAgICAgcG9zID0gZ290 b1JpZ2h0KHByZXYucm93LCBwcmV2LmNlbGwsIHByZXYucG9zWCk7DQorICAg ICAgICBpZiAoIXBvcykgew0KKyAgICAgICAgICByZXR1cm4gbnVsbDsNCisg ICAgICAgIH0NCisgICAgICAgIGlmIChwb3MuY2VsbCA+PSBjZWxsKSB7DQor ICAgICAgICAgIHJldHVybiBwcmV2Ow0KKyAgICAgICAgfQ0KKyAgICAgICAg cHJldiA9IHBvczsNCisgICAgICB9DQorICAgIH0NCisNCisgICAgZnVuY3Rp b24gZ290b0Rvd24ocm93LCBjZWxsLCBwb3NYKSB7DQorICAgICAgdmFyIHBy ZXZDZWxsOw0KKyAgICAgIHZhciBkYXRhTGVuZ3RoSW5jbHVkaW5nQWRkTmV3 ID0gZ2V0RGF0YUxlbmd0aEluY2x1ZGluZ0FkZE5ldygpOw0KKyAgICAgIHdo aWxlICh0cnVlKSB7DQorICAgICAgICBpZiAoKytyb3cgPj0gZGF0YUxlbmd0 aEluY2x1ZGluZ0FkZE5ldykgew0KKyAgICAgICAgICByZXR1cm4gbnVsbDsN CisgICAgICAgIH0NCisNCisgICAgICAgIHByZXZDZWxsID0gY2VsbCA9IDA7 DQorICAgICAgICB3aGlsZSAoY2VsbCA8PSBwb3NYKSB7DQorICAgICAgICAg IHByZXZDZWxsID0gY2VsbDsNCisgICAgICAgICAgY2VsbCArPSBnZXRDb2xz cGFuKHJvdywgY2VsbCk7DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAo Y2FuQ2VsbEJlQWN0aXZlKHJvdywgcHJldkNlbGwpKSB7DQorICAgICAgICAg IHJldHVybiB7DQorICAgICAgICAgICAgInJvdyI6IHJvdywNCisgICAgICAg ICAgICAiY2VsbCI6IHByZXZDZWxsLA0KKyAgICAgICAgICAgICJwb3NYIjog cG9zWA0KKyAgICAgICAgICB9Ow0KKyAgICAgICAgfQ0KKyAgICAgIH0NCisg ICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBnb3RvVXAocm93LCBjZWxsLCBwb3NY KSB7DQorICAgICAgdmFyIHByZXZDZWxsOw0KKyAgICAgIHdoaWxlICh0cnVl KSB7DQorICAgICAgICBpZiAoLS1yb3cgPCAwKSB7DQorICAgICAgICAgIHJl dHVybiBudWxsOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgcHJldkNlbGwg PSBjZWxsID0gMDsNCisgICAgICAgIHdoaWxlIChjZWxsIDw9IHBvc1gpIHsN CisgICAgICAgICAgcHJldkNlbGwgPSBjZWxsOw0KKyAgICAgICAgICBjZWxs ICs9IGdldENvbHNwYW4ocm93LCBjZWxsKTsNCisgICAgICAgIH0NCisNCisg ICAgICAgIGlmIChjYW5DZWxsQmVBY3RpdmUocm93LCBwcmV2Q2VsbCkpIHsN CisgICAgICAgICAgcmV0dXJuIHsNCisgICAgICAgICAgICAicm93Ijogcm93 LA0KKyAgICAgICAgICAgICJjZWxsIjogcHJldkNlbGwsDQorICAgICAgICAg ICAgInBvc1giOiBwb3NYDQorICAgICAgICAgIH07DQorICAgICAgICB9DQor ICAgICAgfQ0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIGdvdG9OZXh0KHJv dywgY2VsbCwgcG9zWCkgew0KKyAgICAgIGlmIChyb3cgPT0gbnVsbCAmJiBj ZWxsID09IG51bGwpIHsNCisgICAgICAgIHJvdyA9IGNlbGwgPSBwb3NYID0g MDsNCisgICAgICAgIGlmIChjYW5DZWxsQmVBY3RpdmUocm93LCBjZWxsKSkg ew0KKyAgICAgICAgICByZXR1cm4gew0KKyAgICAgICAgICAgICJyb3ciOiBy b3csDQorICAgICAgICAgICAgImNlbGwiOiBjZWxsLA0KKyAgICAgICAgICAg ICJwb3NYIjogY2VsbA0KKyAgICAgICAgICB9Ow0KKyAgICAgICAgfQ0KKyAg ICAgIH0NCisNCisgICAgICB2YXIgcG9zID0gZ290b1JpZ2h0KHJvdywgY2Vs bCwgcG9zWCk7DQorICAgICAgaWYgKHBvcykgew0KKyAgICAgICAgcmV0dXJu IHBvczsNCisgICAgICB9DQorDQorICAgICAgdmFyIGZpcnN0Rm9jdXNhYmxl Q2VsbCA9IG51bGw7DQorICAgICAgdmFyIGRhdGFMZW5ndGhJbmNsdWRpbmdB ZGROZXcgPSBnZXREYXRhTGVuZ3RoSW5jbHVkaW5nQWRkTmV3KCk7DQorICAg ICAgd2hpbGUgKCsrcm93IDwgZGF0YUxlbmd0aEluY2x1ZGluZ0FkZE5ldykg ew0KKyAgICAgICAgZmlyc3RGb2N1c2FibGVDZWxsID0gZmluZEZpcnN0Rm9j dXNhYmxlQ2VsbChyb3cpOw0KKyAgICAgICAgaWYgKGZpcnN0Rm9jdXNhYmxl Q2VsbCAhPT0gbnVsbCkgew0KKyAgICAgICAgICByZXR1cm4gew0KKyAgICAg ICAgICAgICJyb3ciOiByb3csDQorICAgICAgICAgICAgImNlbGwiOiBmaXJz dEZvY3VzYWJsZUNlbGwsDQorICAgICAgICAgICAgInBvc1giOiBmaXJzdEZv Y3VzYWJsZUNlbGwNCisgICAgICAgICAgfTsNCisgICAgICAgIH0NCisgICAg ICB9DQorICAgICAgcmV0dXJuIG51bGw7DQorICAgIH0NCisNCisgICAgZnVu Y3Rpb24gZ290b1ByZXYocm93LCBjZWxsLCBwb3NYKSB7DQorICAgICAgaWYg KHJvdyA9PSBudWxsICYmIGNlbGwgPT0gbnVsbCkgew0KKyAgICAgICAgcm93 ID0gZ2V0RGF0YUxlbmd0aEluY2x1ZGluZ0FkZE5ldygpIC0gMTsNCisgICAg ICAgIGNlbGwgPSBwb3NYID0gY29sdW1ucy5sZW5ndGggLSAxOw0KKyAgICAg ICAgaWYgKGNhbkNlbGxCZUFjdGl2ZShyb3csIGNlbGwpKSB7DQorICAgICAg ICAgIHJldHVybiB7DQorICAgICAgICAgICAgInJvdyI6IHJvdywNCisgICAg ICAgICAgICAiY2VsbCI6IGNlbGwsDQorICAgICAgICAgICAgInBvc1giOiBj ZWxsDQorICAgICAgICAgIH07DQorICAgICAgICB9DQorICAgICAgfQ0KKw0K KyAgICAgIHZhciBwb3M7DQorICAgICAgdmFyIGxhc3RTZWxlY3RhYmxlQ2Vs bDsNCisgICAgICB3aGlsZSAoIXBvcykgew0KKyAgICAgICAgcG9zID0gZ290 b0xlZnQocm93LCBjZWxsLCBwb3NYKTsNCisgICAgICAgIGlmIChwb3MpIHsN CisgICAgICAgICAgYnJlYWs7DQorICAgICAgICB9DQorICAgICAgICBpZiAo LS1yb3cgPCAwKSB7DQorICAgICAgICAgIHJldHVybiBudWxsOw0KKyAgICAg ICAgfQ0KKw0KKyAgICAgICAgY2VsbCA9IDA7DQorICAgICAgICBsYXN0U2Vs ZWN0YWJsZUNlbGwgPSBmaW5kTGFzdEZvY3VzYWJsZUNlbGwocm93KTsNCisg ICAgICAgIGlmIChsYXN0U2VsZWN0YWJsZUNlbGwgIT09IG51bGwpIHsNCisg ICAgICAgICAgcG9zID0gew0KKyAgICAgICAgICAgICJyb3ciOiByb3csDQor ICAgICAgICAgICAgImNlbGwiOiBsYXN0U2VsZWN0YWJsZUNlbGwsDQorICAg ICAgICAgICAgInBvc1giOiBsYXN0U2VsZWN0YWJsZUNlbGwNCisgICAgICAg ICAgfTsNCisgICAgICAgIH0NCisgICAgICB9DQorICAgICAgcmV0dXJuIHBv czsNCisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBuYXZpZ2F0ZVJpZ2h0KCkg ew0KKyAgICAgIHJldHVybiBuYXZpZ2F0ZSgicmlnaHQiKTsNCisgICAgfQ0K Kw0KKyAgICBmdW5jdGlvbiBuYXZpZ2F0ZUxlZnQoKSB7DQorICAgICAgcmV0 dXJuIG5hdmlnYXRlKCJsZWZ0Iik7DQorICAgIH0NCisNCisgICAgZnVuY3Rp b24gbmF2aWdhdGVEb3duKCkgew0KKyAgICAgIHJldHVybiBuYXZpZ2F0ZSgi ZG93biIpOw0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIG5hdmlnYXRlVXAo KSB7DQorICAgICAgcmV0dXJuIG5hdmlnYXRlKCJ1cCIpOw0KKyAgICB9DQor DQorICAgIGZ1bmN0aW9uIG5hdmlnYXRlTmV4dCgpIHsNCisgICAgICByZXR1 cm4gbmF2aWdhdGUoIm5leHQiKTsNCisgICAgfQ0KKw0KKyAgICBmdW5jdGlv biBuYXZpZ2F0ZVByZXYoKSB7DQorICAgICAgcmV0dXJuIG5hdmlnYXRlKCJw cmV2Iik7DQorICAgIH0NCisNCisgICAgLyoqDQorICAgICAqIEBwYXJhbSB7 c3RyaW5nfSBkaXIgTmF2aWdhdGlvbiBkaXJlY3Rpb24uDQorICAgICAqIEBy ZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgbmF2aWdhdGlvbiByZXN1bHRlZCBp biBhIGNoYW5nZSBvZiBhY3RpdmUgY2VsbC4NCisgICAgICovDQorICAgIGZ1 bmN0aW9uIG5hdmlnYXRlKGRpcikgew0KKyAgICAgIGlmICghb3B0aW9ucy5l bmFibGVDZWxsTmF2aWdhdGlvbikgew0KKyAgICAgICAgcmV0dXJuIGZhbHNl Ow0KKyAgICAgIH0NCisNCisgICAgICBpZiAoIWFjdGl2ZUNlbGxOb2RlICYm IGRpciAhPSAicHJldiIgJiYgZGlyICE9ICJuZXh0Iikgew0KKyAgICAgICAg cmV0dXJuIGZhbHNlOw0KKyAgICAgIH0NCisNCisgICAgICBpZiAoIWdldEVk aXRvckxvY2soKS5jb21taXRDdXJyZW50RWRpdCgpKSB7DQorICAgICAgICBy ZXR1cm4gdHJ1ZTsNCisgICAgICB9DQorICAgICAgc2V0Rm9jdXMoKTsNCisN CisgICAgICB2YXIgdGFiYmluZ0RpcmVjdGlvbnMgPSB7DQorICAgICAgICAi dXAiOiAtMSwNCisgICAgICAgICJkb3duIjogMSwNCisgICAgICAgICJsZWZ0 IjogLTEsDQorICAgICAgICAicmlnaHQiOiAxLA0KKyAgICAgICAgInByZXYi OiAtMSwNCisgICAgICAgICJuZXh0IjogMQ0KKyAgICAgIH07DQorICAgICAg dGFiYmluZ0RpcmVjdGlvbiA9IHRhYmJpbmdEaXJlY3Rpb25zW2Rpcl07DQor DQorICAgICAgdmFyIHN0ZXBGdW5jdGlvbnMgPSB7DQorICAgICAgICAidXAi OiBnb3RvVXAsDQorICAgICAgICAiZG93biI6IGdvdG9Eb3duLA0KKyAgICAg ICAgImxlZnQiOiBnb3RvTGVmdCwNCisgICAgICAgICJyaWdodCI6IGdvdG9S aWdodCwNCisgICAgICAgICJwcmV2IjogZ290b1ByZXYsDQorICAgICAgICAi bmV4dCI6IGdvdG9OZXh0DQorICAgICAgfTsNCisgICAgICB2YXIgc3RlcEZu ID0gc3RlcEZ1bmN0aW9uc1tkaXJdOw0KKyAgICAgIHZhciBwb3MgPSBzdGVw Rm4oYWN0aXZlUm93LCBhY3RpdmVDZWxsLCBhY3RpdmVQb3NYKTsNCisgICAg ICBpZiAocG9zKSB7DQorICAgICAgICB2YXIgaXNBZGROZXdSb3cgPSAocG9z LnJvdyA9PSBnZXREYXRhTGVuZ3RoKCkpOw0KKyAgICAgICAgc2Nyb2xsQ2Vs bEludG9WaWV3KHBvcy5yb3csIHBvcy5jZWxsLCAhaXNBZGROZXdSb3cpOw0K KyAgICAgICAgc2V0QWN0aXZlQ2VsbEludGVybmFsKGdldENlbGxOb2RlKHBv cy5yb3csIHBvcy5jZWxsKSk7DQorICAgICAgICBhY3RpdmVQb3NYID0gcG9z LnBvc1g7DQorICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgICB9IGVsc2Ug ew0KKyAgICAgICAgc2V0QWN0aXZlQ2VsbEludGVybmFsKGdldENlbGxOb2Rl KGFjdGl2ZVJvdywgYWN0aXZlQ2VsbCkpOw0KKyAgICAgICAgcmV0dXJuIGZh bHNlOw0KKyAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBnZXRD ZWxsTm9kZShyb3csIGNlbGwpIHsNCisgICAgICBpZiAocm93c0NhY2hlW3Jv d10pIHsNCisgICAgICAgIGVuc3VyZUNlbGxOb2Rlc0luUm93c0NhY2hlKHJv dyk7DQorICAgICAgICByZXR1cm4gcm93c0NhY2hlW3Jvd10uY2VsbE5vZGVz QnlDb2x1bW5JZHhbY2VsbF07DQorICAgICAgfQ0KKyAgICAgIHJldHVybiBu dWxsOw0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIHNldEFjdGl2ZUNlbGwo cm93LCBjZWxsKSB7DQorICAgICAgaWYgKCFpbml0aWFsaXplZCkgeyByZXR1 cm47IH0NCisgICAgICBpZiAocm93ID4gZ2V0RGF0YUxlbmd0aCgpIHx8IHJv dyA8IDAgfHwgY2VsbCA+PSBjb2x1bW5zLmxlbmd0aCB8fCBjZWxsIDwgMCkg ew0KKyAgICAgICAgcmV0dXJuOw0KKyAgICAgIH0NCisNCisgICAgICBpZiAo IW9wdGlvbnMuZW5hYmxlQ2VsbE5hdmlnYXRpb24pIHsNCisgICAgICAgIHJl dHVybjsNCisgICAgICB9DQorDQorICAgICAgc2Nyb2xsQ2VsbEludG9WaWV3 KHJvdywgY2VsbCwgZmFsc2UpOw0KKyAgICAgIHNldEFjdGl2ZUNlbGxJbnRl cm5hbChnZXRDZWxsTm9kZShyb3csIGNlbGwpLCBmYWxzZSk7DQorICAgIH0N CisNCisgICAgZnVuY3Rpb24gY2FuQ2VsbEJlQWN0aXZlKHJvdywgY2VsbCkg ew0KKyAgICAgIGlmICghb3B0aW9ucy5lbmFibGVDZWxsTmF2aWdhdGlvbiB8 fCByb3cgPj0gZ2V0RGF0YUxlbmd0aEluY2x1ZGluZ0FkZE5ldygpIHx8DQor ICAgICAgICAgIHJvdyA8IDAgfHwgY2VsbCA+PSBjb2x1bW5zLmxlbmd0aCB8 fCBjZWxsIDwgMCkgew0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAg IH0NCisNCisgICAgICB2YXIgcm93TWV0YWRhdGEgPSBkYXRhLmdldEl0ZW1N ZXRhZGF0YSAmJiBkYXRhLmdldEl0ZW1NZXRhZGF0YShyb3cpOw0KKyAgICAg IGlmIChyb3dNZXRhZGF0YSAmJiB0eXBlb2Ygcm93TWV0YWRhdGEuZm9jdXNh YmxlID09PSAiYm9vbGVhbiIpIHsNCisgICAgICAgIHJldHVybiByb3dNZXRh ZGF0YS5mb2N1c2FibGU7DQorICAgICAgfQ0KKw0KKyAgICAgIHZhciBjb2x1 bW5NZXRhZGF0YSA9IHJvd01ldGFkYXRhICYmIHJvd01ldGFkYXRhLmNvbHVt bnM7DQorICAgICAgaWYgKGNvbHVtbk1ldGFkYXRhICYmIGNvbHVtbk1ldGFk YXRhW2NvbHVtbnNbY2VsbF0uaWRdICYmIHR5cGVvZiBjb2x1bW5NZXRhZGF0 YVtjb2x1bW5zW2NlbGxdLmlkXS5mb2N1c2FibGUgPT09ICJib29sZWFuIikg ew0KKyAgICAgICAgcmV0dXJuIGNvbHVtbk1ldGFkYXRhW2NvbHVtbnNbY2Vs bF0uaWRdLmZvY3VzYWJsZTsNCisgICAgICB9DQorICAgICAgaWYgKGNvbHVt bk1ldGFkYXRhICYmIGNvbHVtbk1ldGFkYXRhW2NlbGxdICYmIHR5cGVvZiBj b2x1bW5NZXRhZGF0YVtjZWxsXS5mb2N1c2FibGUgPT09ICJib29sZWFuIikg ew0KKyAgICAgICAgcmV0dXJuIGNvbHVtbk1ldGFkYXRhW2NlbGxdLmZvY3Vz YWJsZTsNCisgICAgICB9DQorDQorICAgICAgcmV0dXJuIGNvbHVtbnNbY2Vs bF0uZm9jdXNhYmxlOw0KKyAgICB9DQorDQorICAgIGZ1bmN0aW9uIGNhbkNl bGxCZVNlbGVjdGVkKHJvdywgY2VsbCkgew0KKyAgICAgIGlmIChyb3cgPj0g Z2V0RGF0YUxlbmd0aCgpIHx8IHJvdyA8IDAgfHwgY2VsbCA+PSBjb2x1bW5z Lmxlbmd0aCB8fCBjZWxsIDwgMCkgew0KKyAgICAgICAgcmV0dXJuIGZhbHNl Ow0KKyAgICAgIH0NCisNCisgICAgICB2YXIgcm93TWV0YWRhdGEgPSBkYXRh LmdldEl0ZW1NZXRhZGF0YSAmJiBkYXRhLmdldEl0ZW1NZXRhZGF0YShyb3cp Ow0KKyAgICAgIGlmIChyb3dNZXRhZGF0YSAmJiB0eXBlb2Ygcm93TWV0YWRh dGEuc2VsZWN0YWJsZSA9PT0gImJvb2xlYW4iKSB7DQorICAgICAgICByZXR1 cm4gcm93TWV0YWRhdGEuc2VsZWN0YWJsZTsNCisgICAgICB9DQorDQorICAg ICAgdmFyIGNvbHVtbk1ldGFkYXRhID0gcm93TWV0YWRhdGEgJiYgcm93TWV0 YWRhdGEuY29sdW1ucyAmJiAocm93TWV0YWRhdGEuY29sdW1uc1tjb2x1bW5z W2NlbGxdLmlkXSB8fCByb3dNZXRhZGF0YS5jb2x1bW5zW2NlbGxdKTsNCisg ICAgICBpZiAoY29sdW1uTWV0YWRhdGEgJiYgdHlwZW9mIGNvbHVtbk1ldGFk YXRhLnNlbGVjdGFibGUgPT09ICJib29sZWFuIikgew0KKyAgICAgICAgcmV0 dXJuIGNvbHVtbk1ldGFkYXRhLnNlbGVjdGFibGU7DQorICAgICAgfQ0KKw0K KyAgICAgIHJldHVybiBjb2x1bW5zW2NlbGxdLnNlbGVjdGFibGU7DQorICAg IH0NCisNCisgICAgZnVuY3Rpb24gZ290b0NlbGwocm93LCBjZWxsLCBmb3Jj ZUVkaXQpIHsNCisgICAgICBpZiAoIWluaXRpYWxpemVkKSB7IHJldHVybjsg fQ0KKyAgICAgIGlmICghY2FuQ2VsbEJlQWN0aXZlKHJvdywgY2VsbCkpIHsN CisgICAgICAgIHJldHVybjsNCisgICAgICB9DQorDQorICAgICAgaWYgKCFn ZXRFZGl0b3JMb2NrKCkuY29tbWl0Q3VycmVudEVkaXQoKSkgew0KKyAgICAg ICAgcmV0dXJuOw0KKyAgICAgIH0NCisNCisgICAgICBzY3JvbGxDZWxsSW50 b1ZpZXcocm93LCBjZWxsLCBmYWxzZSk7DQorDQorICAgICAgdmFyIG5ld0Nl bGwgPSBnZXRDZWxsTm9kZShyb3csIGNlbGwpOw0KKw0KKyAgICAgIC8vIGlm IHNlbGVjdGluZyB0aGUgJ2FkZCBuZXcnIHJvdywgc3RhcnQgZWRpdGluZyBy aWdodCBhd2F5DQorICAgICAgc2V0QWN0aXZlQ2VsbEludGVybmFsKG5ld0Nl bGwsIGZvcmNlRWRpdCB8fCAocm93ID09PSBnZXREYXRhTGVuZ3RoKCkpIHx8 IG9wdGlvbnMuYXV0b0VkaXQpOw0KKw0KKyAgICAgIC8vIGlmIG5vIGVkaXRv ciB3YXMgY3JlYXRlZCwgc2V0IHRoZSBmb2N1cyBiYWNrIG9uIHRoZSBncmlk DQorICAgICAgaWYgKCFjdXJyZW50RWRpdG9yKSB7DQorICAgICAgICBzZXRG b2N1cygpOw0KKyAgICAgIH0NCisgICAgfQ0KKw0KKw0KKyAgICAvLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQor ICAgIC8vIElFZGl0b3IgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBlZGl0b3Ig bG9jaw0KKw0KKyAgICBmdW5jdGlvbiBjb21taXRDdXJyZW50RWRpdCgpIHsN CisgICAgICB2YXIgaXRlbSA9IGdldERhdGFJdGVtKGFjdGl2ZVJvdyk7DQor ICAgICAgdmFyIGNvbHVtbiA9IGNvbHVtbnNbYWN0aXZlQ2VsbF07DQorDQor ICAgICAgaWYgKGN1cnJlbnRFZGl0b3IpIHsNCisgICAgICAgIGlmIChjdXJy ZW50RWRpdG9yLmlzVmFsdWVDaGFuZ2VkKCkpIHsNCisgICAgICAgICAgdmFy IHZhbGlkYXRpb25SZXN1bHRzID0gY3VycmVudEVkaXRvci52YWxpZGF0ZSgp Ow0KKw0KKyAgICAgICAgICBpZiAodmFsaWRhdGlvblJlc3VsdHMudmFsaWQp IHsNCisgICAgICAgICAgICBpZiAoYWN0aXZlUm93IDwgZ2V0RGF0YUxlbmd0 aCgpKSB7DQorICAgICAgICAgICAgICB2YXIgZWRpdENvbW1hbmQgPSB7DQor ICAgICAgICAgICAgICAgIHJvdzogYWN0aXZlUm93LA0KKyAgICAgICAgICAg ICAgICBjZWxsOiBhY3RpdmVDZWxsLA0KKyAgICAgICAgICAgICAgICBlZGl0 b3I6IGN1cnJlbnRFZGl0b3IsDQorICAgICAgICAgICAgICAgIHNlcmlhbGl6 ZWRWYWx1ZTogY3VycmVudEVkaXRvci5zZXJpYWxpemVWYWx1ZSgpLA0KKyAg ICAgICAgICAgICAgICBwcmV2U2VyaWFsaXplZFZhbHVlOiBzZXJpYWxpemVk RWRpdG9yVmFsdWUsDQorICAgICAgICAgICAgICAgIGV4ZWN1dGU6IGZ1bmN0 aW9uICgpIHsNCisgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5hcHBs eVZhbHVlKGl0ZW0sIHRoaXMuc2VyaWFsaXplZFZhbHVlKTsNCisgICAgICAg ICAgICAgICAgICB1cGRhdGVSb3codGhpcy5yb3cpOw0KKyAgICAgICAgICAg ICAgICAgIHRyaWdnZXIoc2VsZi5vbkNlbGxDaGFuZ2UsIHsNCisgICAgICAg ICAgICAgICAgICAgIHJvdzogYWN0aXZlUm93LA0KKyAgICAgICAgICAgICAg ICAgICAgY2VsbDogYWN0aXZlQ2VsbCwNCisgICAgICAgICAgICAgICAgICAg IGl0ZW06IGl0ZW0sDQorICAgICAgICAgICAgICAgICAgICBncmlkOiBzZWxm DQorICAgICAgICAgICAgICAgICAgfSk7DQorICAgICAgICAgICAgICAgIH0s DQorICAgICAgICAgICAgICAgIHVuZG86IGZ1bmN0aW9uICgpIHsNCisgICAg ICAgICAgICAgICAgICB0aGlzLmVkaXRvci5hcHBseVZhbHVlKGl0ZW0sIHRo aXMucHJldlNlcmlhbGl6ZWRWYWx1ZSk7DQorICAgICAgICAgICAgICAgICAg dXBkYXRlUm93KHRoaXMucm93KTsNCisgICAgICAgICAgICAgICAgICB0cmln Z2VyKHNlbGYub25DZWxsQ2hhbmdlLCB7DQorICAgICAgICAgICAgICAgICAg ICByb3c6IGFjdGl2ZVJvdywNCisgICAgICAgICAgICAgICAgICAgIGNlbGw6 IGFjdGl2ZUNlbGwsDQorICAgICAgICAgICAgICAgICAgICBpdGVtOiBpdGVt LA0KKyAgICAgICAgICAgICAgICAgICAgZ3JpZDogc2VsZg0KKyAgICAgICAg ICAgICAgICAgIH0pOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAg ICAgICB9Ow0KKw0KKyAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZWRpdENv bW1hbmRIYW5kbGVyKSB7DQorICAgICAgICAgICAgICAgIG1ha2VBY3RpdmVD ZWxsTm9ybWFsKCk7DQorICAgICAgICAgICAgICAgIG9wdGlvbnMuZWRpdENv bW1hbmRIYW5kbGVyKGl0ZW0sIGNvbHVtbiwgZWRpdENvbW1hbmQpOw0KKyAg ICAgICAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICAgICAgZWRpdENv bW1hbmQuZXhlY3V0ZSgpOw0KKyAgICAgICAgICAgICAgICBtYWtlQWN0aXZl Q2VsbE5vcm1hbCgpOw0KKyAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAg ICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICB2YXIgbmV3SXRlbSA9IHt9 Ow0KKyAgICAgICAgICAgICAgY3VycmVudEVkaXRvci5hcHBseVZhbHVlKG5l d0l0ZW0sIGN1cnJlbnRFZGl0b3Iuc2VyaWFsaXplVmFsdWUoKSk7DQorICAg ICAgICAgICAgICBtYWtlQWN0aXZlQ2VsbE5vcm1hbCgpOw0KKyAgICAgICAg ICAgICAgdHJpZ2dlcihzZWxmLm9uQWRkTmV3Um93LCB7aXRlbTogbmV3SXRl bSwgY29sdW1uOiBjb2x1bW4sIGdyaWQ6IHNlbGZ9KTsNCisgICAgICAgICAg ICB9DQorDQorICAgICAgICAgICAgLy8gY2hlY2sgd2hldGhlciB0aGUgbG9j ayBoYXMgYmVlbiByZS1hY3F1aXJlZCBieSBldmVudCBoYW5kbGVycw0KKyAg ICAgICAgICAgIHJldHVybiAhZ2V0RWRpdG9yTG9jaygpLmlzQWN0aXZlKCk7 DQorICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgLy8gUmUtYWRk IHRoZSBDU1MgY2xhc3MgdG8gdHJpZ2dlciB0cmFuc2l0aW9ucywgaWYgYW55 Lg0KKyAgICAgICAgICAgICQoYWN0aXZlQ2VsbE5vZGUpLnJlbW92ZUNsYXNz KCJpbnZhbGlkIik7DQorICAgICAgICAgICAgJChhY3RpdmVDZWxsTm9kZSku d2lkdGgoKTsgIC8vIGZvcmNlIGxheW91dA0KKyAgICAgICAgICAgICQoYWN0 aXZlQ2VsbE5vZGUpLmFkZENsYXNzKCJpbnZhbGlkIik7DQorDQorICAgICAg ICAgICAgdHJpZ2dlcihzZWxmLm9uVmFsaWRhdGlvbkVycm9yLCB7DQorICAg ICAgICAgICAgICBlZGl0b3I6IGN1cnJlbnRFZGl0b3IsDQorICAgICAgICAg ICAgICBjZWxsTm9kZTogYWN0aXZlQ2VsbE5vZGUsDQorICAgICAgICAgICAg ICB2YWxpZGF0aW9uUmVzdWx0czogdmFsaWRhdGlvblJlc3VsdHMsDQorICAg ICAgICAgICAgICByb3c6IGFjdGl2ZVJvdywNCisgICAgICAgICAgICAgIGNl bGw6IGFjdGl2ZUNlbGwsDQorICAgICAgICAgICAgICBjb2x1bW46IGNvbHVt biwNCisgICAgICAgICAgICAgIGdyaWQ6IHNlbGYNCisgICAgICAgICAgICB9 KTsNCisNCisgICAgICAgICAgICBjdXJyZW50RWRpdG9yLmZvY3VzKCk7DQor ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgICB9DQorICAg ICAgICB9DQorDQorICAgICAgICBtYWtlQWN0aXZlQ2VsbE5vcm1hbCgpOw0K KyAgICAgIH0NCisgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgfQ0KKw0KKyAg ICBmdW5jdGlvbiBjYW5jZWxDdXJyZW50RWRpdCgpIHsNCisgICAgICBtYWtl QWN0aXZlQ2VsbE5vcm1hbCgpOw0KKyAgICAgIHJldHVybiB0cnVlOw0KKyAg ICB9DQorDQorICAgIGZ1bmN0aW9uIHJvd3NUb1Jhbmdlcyhyb3dzKSB7DQor ICAgICAgdmFyIHJhbmdlcyA9IFtdOw0KKyAgICAgIHZhciBsYXN0Q2VsbCA9 IGNvbHVtbnMubGVuZ3RoIC0gMTsNCisgICAgICBmb3IgKHZhciBpID0gMDsg aSA8IHJvd3MubGVuZ3RoOyBpKyspIHsNCisgICAgICAgIHJhbmdlcy5wdXNo KG5ldyBTbGljay5SYW5nZShyb3dzW2ldLCAwLCByb3dzW2ldLCBsYXN0Q2Vs bCkpOw0KKyAgICAgIH0NCisgICAgICByZXR1cm4gcmFuZ2VzOw0KKyAgICB9 DQorDQorICAgIGZ1bmN0aW9uIGdldFNlbGVjdGVkUm93cygpIHsNCisgICAg ICBpZiAoIXNlbGVjdGlvbk1vZGVsKSB7DQorICAgICAgICB0aHJvdyBuZXcg RXJyb3IoIlNlbGVjdGlvbiBtb2RlbCBpcyBub3Qgc2V0Iik7DQorICAgICAg fQ0KKyAgICAgIHJldHVybiBzZWxlY3RlZFJvd3M7DQorICAgIH0NCisNCisg ICAgZnVuY3Rpb24gc2V0U2VsZWN0ZWRSb3dzKHJvd3MpIHsNCisgICAgICBp ZiAoIXNlbGVjdGlvbk1vZGVsKSB7DQorICAgICAgICB0aHJvdyBuZXcgRXJy b3IoIlNlbGVjdGlvbiBtb2RlbCBpcyBub3Qgc2V0Iik7DQorICAgICAgfQ0K KyAgICAgIHNlbGVjdGlvbk1vZGVsLnNldFNlbGVjdGVkUmFuZ2VzKHJvd3NU b1Jhbmdlcyhyb3dzKSk7DQorICAgIH0NCisNCisNCisgICAgLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKyAg ICAvLyBEZWJ1Zw0KKw0KKyAgICB0aGlzLmRlYnVnID0gZnVuY3Rpb24gKCkg ew0KKyAgICAgIHZhciBzID0gIiI7DQorDQorICAgICAgcyArPSAoIlxuIiAr ICJjb3VudGVyX3Jvd3NfcmVuZGVyZWQ6ICAiICsgY291bnRlcl9yb3dzX3Jl bmRlcmVkKTsNCisgICAgICBzICs9ICgiXG4iICsgImNvdW50ZXJfcm93c19y ZW1vdmVkOiAgIiArIGNvdW50ZXJfcm93c19yZW1vdmVkKTsNCisgICAgICBz ICs9ICgiXG4iICsgInJlbmRlcmVkUm93czogICIgKyByZW5kZXJlZFJvd3Mp Ow0KKyAgICAgIHMgKz0gKCJcbiIgKyAibnVtVmlzaWJsZVJvd3M6ICAiICsg bnVtVmlzaWJsZVJvd3MpOw0KKyAgICAgIHMgKz0gKCJcbiIgKyAibWF4U3Vw cG9ydGVkQ3NzSGVpZ2h0OiAgIiArIG1heFN1cHBvcnRlZENzc0hlaWdodCk7 DQorICAgICAgcyArPSAoIlxuIiArICJuKHVtYmVyIG9mIHBhZ2VzKTogICIg KyBuKTsNCisgICAgICBzICs9ICgiXG4iICsgIihjdXJyZW50KSBwYWdlOiAg IiArIHBhZ2UpOw0KKyAgICAgIHMgKz0gKCJcbiIgKyAicGFnZSBoZWlnaHQg KHBoKTogICIgKyBwaCk7DQorICAgICAgcyArPSAoIlxuIiArICJ2U2Nyb2xs RGlyOiAgIiArIHZTY3JvbGxEaXIpOw0KKw0KKyAgICAgIGFsZXJ0KHMpOw0K KyAgICB9Ow0KKw0KKyAgICAvLyBhIGRlYnVnIGhlbHBlciB0byBiZSBhYmxl IHRvIGFjY2VzcyBwcml2YXRlIG1lbWJlcnMNCisgICAgdGhpcy5ldmFsID0g ZnVuY3Rpb24gKGV4cHIpIHsNCisgICAgICByZXR1cm4gZXZhbChleHByKTsN CisgICAgfTsNCisNCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKyAgICAvLyBQdWJsaWMgQVBJDQor DQorICAgICQuZXh0ZW5kKHRoaXMsIHsNCisgICAgICAic2xpY2tHcmlkVmVy c2lvbiI6ICIyLjMuNCIsDQorDQorICAgICAgLy8gRXZlbnRzDQorICAgICAg Im9uU2Nyb2xsIjogbmV3IFNsaWNrLkV2ZW50KCksDQorICAgICAgIm9uU29y dCI6IG5ldyBTbGljay5FdmVudCgpLA0KKyAgICAgICJvbkhlYWRlck1vdXNl RW50ZXIiOiBuZXcgU2xpY2suRXZlbnQoKSwNCisgICAgICAib25IZWFkZXJN b3VzZUxlYXZlIjogbmV3IFNsaWNrLkV2ZW50KCksDQorICAgICAgIm9uSGVh ZGVyQ29udGV4dE1lbnUiOiBuZXcgU2xpY2suRXZlbnQoKSwNCisgICAgICAi b25IZWFkZXJDbGljayI6IG5ldyBTbGljay5FdmVudCgpLA0KKyAgICAgICJv bkhlYWRlckNlbGxSZW5kZXJlZCI6IG5ldyBTbGljay5FdmVudCgpLA0KKyAg ICAgICJvbkJlZm9yZUhlYWRlckNlbGxEZXN0cm95IjogbmV3IFNsaWNrLkV2 ZW50KCksDQorICAgICAgIm9uSGVhZGVyUm93Q2VsbFJlbmRlcmVkIjogbmV3 IFNsaWNrLkV2ZW50KCksDQorICAgICAgIm9uRm9vdGVyUm93Q2VsbFJlbmRl cmVkIjogbmV3IFNsaWNrLkV2ZW50KCksDQorICAgICAgIm9uQmVmb3JlSGVh ZGVyUm93Q2VsbERlc3Ryb3kiOiBuZXcgU2xpY2suRXZlbnQoKSwNCisgICAg ICAib25CZWZvcmVGb290ZXJSb3dDZWxsRGVzdHJveSI6IG5ldyBTbGljay5F dmVudCgpLA0KKyAgICAgICJvbk1vdXNlRW50ZXIiOiBuZXcgU2xpY2suRXZl bnQoKSwNCisgICAgICAib25Nb3VzZUxlYXZlIjogbmV3IFNsaWNrLkV2ZW50 KCksDQorICAgICAgIm9uQ2xpY2siOiBuZXcgU2xpY2suRXZlbnQoKSwNCisg ICAgICAib25EYmxDbGljayI6IG5ldyBTbGljay5FdmVudCgpLA0KKyAgICAg ICJvbkNvbnRleHRNZW51IjogbmV3IFNsaWNrLkV2ZW50KCksDQorICAgICAg Im9uS2V5RG93biI6IG5ldyBTbGljay5FdmVudCgpLA0KKyAgICAgICJvbkFk ZE5ld1JvdyI6IG5ldyBTbGljay5FdmVudCgpLA0KKyAgICAgICJvbkJlZm9y ZUFwcGVuZENlbGwiOiBuZXcgU2xpY2suRXZlbnQoKSwNCisgICAgICAib25W YWxpZGF0aW9uRXJyb3IiOiBuZXcgU2xpY2suRXZlbnQoKSwNCisgICAgICAi b25WaWV3cG9ydENoYW5nZWQiOiBuZXcgU2xpY2suRXZlbnQoKSwNCisgICAg ICAib25Db2x1bW5zUmVvcmRlcmVkIjogbmV3IFNsaWNrLkV2ZW50KCksDQor ICAgICAgIm9uQ29sdW1uc1Jlc2l6ZWQiOiBuZXcgU2xpY2suRXZlbnQoKSwN CisgICAgICAib25DZWxsQ2hhbmdlIjogbmV3IFNsaWNrLkV2ZW50KCksDQor ICAgICAgIm9uQmVmb3JlRWRpdENlbGwiOiBuZXcgU2xpY2suRXZlbnQoKSwN CisgICAgICAib25CZWZvcmVDZWxsRWRpdG9yRGVzdHJveSI6IG5ldyBTbGlj ay5FdmVudCgpLA0KKyAgICAgICJvbkJlZm9yZURlc3Ryb3kiOiBuZXcgU2xp Y2suRXZlbnQoKSwNCisgICAgICAib25BY3RpdmVDZWxsQ2hhbmdlZCI6IG5l dyBTbGljay5FdmVudCgpLA0KKyAgICAgICJvbkFjdGl2ZUNlbGxQb3NpdGlv bkNoYW5nZWQiOiBuZXcgU2xpY2suRXZlbnQoKSwNCisgICAgICAib25EcmFn SW5pdCI6IG5ldyBTbGljay5FdmVudCgpLA0KKyAgICAgICJvbkRyYWdTdGFy dCI6IG5ldyBTbGljay5FdmVudCgpLA0KKyAgICAgICJvbkRyYWciOiBuZXcg U2xpY2suRXZlbnQoKSwNCisgICAgICAib25EcmFnRW5kIjogbmV3IFNsaWNr LkV2ZW50KCksDQorICAgICAgIm9uU2VsZWN0ZWRSb3dzQ2hhbmdlZCI6IG5l dyBTbGljay5FdmVudCgpLA0KKyAgICAgICJvbkNlbGxDc3NTdHlsZXNDaGFu Z2VkIjogbmV3IFNsaWNrLkV2ZW50KCksDQorDQorICAgICAgLy8gTWV0aG9k cw0KKyAgICAgICJyZWdpc3RlclBsdWdpbiI6IHJlZ2lzdGVyUGx1Z2luLA0K KyAgICAgICJ1bnJlZ2lzdGVyUGx1Z2luIjogdW5yZWdpc3RlclBsdWdpbiwN CisgICAgICAiZ2V0Q29sdW1ucyI6IGdldENvbHVtbnMsDQorICAgICAgInNl dENvbHVtbnMiOiBzZXRDb2x1bW5zLA0KKyAgICAgICJnZXRDb2x1bW5JbmRl eCI6IGdldENvbHVtbkluZGV4LA0KKyAgICAgICJ1cGRhdGVDb2x1bW5IZWFk ZXIiOiB1cGRhdGVDb2x1bW5IZWFkZXIsDQorICAgICAgInNldFNvcnRDb2x1 bW4iOiBzZXRTb3J0Q29sdW1uLA0KKyAgICAgICJzZXRTb3J0Q29sdW1ucyI6 IHNldFNvcnRDb2x1bW5zLA0KKyAgICAgICJnZXRTb3J0Q29sdW1ucyI6IGdl dFNvcnRDb2x1bW5zLA0KKyAgICAgICJhdXRvc2l6ZUNvbHVtbnMiOiBhdXRv c2l6ZUNvbHVtbnMsDQorICAgICAgImdldE9wdGlvbnMiOiBnZXRPcHRpb25z LA0KKyAgICAgICJzZXRPcHRpb25zIjogc2V0T3B0aW9ucywNCisgICAgICAi Z2V0RGF0YSI6IGdldERhdGEsDQorICAgICAgImdldERhdGFMZW5ndGgiOiBn ZXREYXRhTGVuZ3RoLA0KKyAgICAgICJnZXREYXRhSXRlbSI6IGdldERhdGFJ dGVtLA0KKyAgICAgICJzZXREYXRhIjogc2V0RGF0YSwNCisgICAgICAiZ2V0 U2VsZWN0aW9uTW9kZWwiOiBnZXRTZWxlY3Rpb25Nb2RlbCwNCisgICAgICAi c2V0U2VsZWN0aW9uTW9kZWwiOiBzZXRTZWxlY3Rpb25Nb2RlbCwNCisgICAg ICAiZ2V0U2VsZWN0ZWRSb3dzIjogZ2V0U2VsZWN0ZWRSb3dzLA0KKyAgICAg ICJzZXRTZWxlY3RlZFJvd3MiOiBzZXRTZWxlY3RlZFJvd3MsDQorICAgICAg ImdldENvbnRhaW5lck5vZGUiOiBnZXRDb250YWluZXJOb2RlLA0KKyAgICAg ICJ1cGRhdGVQYWdpbmdTdGF0dXNGcm9tVmlldyI6IHVwZGF0ZVBhZ2luZ1N0 YXR1c0Zyb21WaWV3LA0KKw0KKyAgICAgICJyZW5kZXIiOiByZW5kZXIsDQor ICAgICAgImludmFsaWRhdGUiOiBpbnZhbGlkYXRlLA0KKyAgICAgICJpbnZh bGlkYXRlUm93IjogaW52YWxpZGF0ZVJvdywNCisgICAgICAiaW52YWxpZGF0 ZVJvd3MiOiBpbnZhbGlkYXRlUm93cywNCisgICAgICAiaW52YWxpZGF0ZUFs bFJvd3MiOiBpbnZhbGlkYXRlQWxsUm93cywNCisgICAgICAidXBkYXRlQ2Vs bCI6IHVwZGF0ZUNlbGwsDQorICAgICAgInVwZGF0ZVJvdyI6IHVwZGF0ZVJv dywNCisgICAgICAiZ2V0Vmlld3BvcnQiOiBnZXRWaXNpYmxlUmFuZ2UsDQor ICAgICAgImdldFJlbmRlcmVkUmFuZ2UiOiBnZXRSZW5kZXJlZFJhbmdlLA0K KyAgICAgICJyZXNpemVDYW52YXMiOiByZXNpemVDYW52YXMsDQorICAgICAg InVwZGF0ZVJvd0NvdW50IjogdXBkYXRlUm93Q291bnQsDQorICAgICAgInNj cm9sbFJvd0ludG9WaWV3Ijogc2Nyb2xsUm93SW50b1ZpZXcsDQorICAgICAg InNjcm9sbFJvd1RvVG9wIjogc2Nyb2xsUm93VG9Ub3AsDQorICAgICAgInNj cm9sbENlbGxJbnRvVmlldyI6IHNjcm9sbENlbGxJbnRvVmlldywNCisgICAg ICAiZ2V0Q2FudmFzTm9kZSI6IGdldENhbnZhc05vZGUsDQorICAgICAgImZv Y3VzIjogc2V0Rm9jdXMsDQorDQorICAgICAgImdldENlbGxGcm9tUG9pbnQi OiBnZXRDZWxsRnJvbVBvaW50LA0KKyAgICAgICJnZXRDZWxsRnJvbUV2ZW50 IjogZ2V0Q2VsbEZyb21FdmVudCwNCisgICAgICAiZ2V0QWN0aXZlQ2VsbCI6 IGdldEFjdGl2ZUNlbGwsDQorICAgICAgInNldEFjdGl2ZUNlbGwiOiBzZXRB Y3RpdmVDZWxsLA0KKyAgICAgICJnZXRBY3RpdmVDZWxsTm9kZSI6IGdldEFj dGl2ZUNlbGxOb2RlLA0KKyAgICAgICJnZXRBY3RpdmVDZWxsUG9zaXRpb24i OiBnZXRBY3RpdmVDZWxsUG9zaXRpb24sDQorICAgICAgInJlc2V0QWN0aXZl Q2VsbCI6IHJlc2V0QWN0aXZlQ2VsbCwNCisgICAgICAiZWRpdEFjdGl2ZUNl bGwiOiBtYWtlQWN0aXZlQ2VsbEVkaXRhYmxlLA0KKyAgICAgICJnZXRDZWxs RWRpdG9yIjogZ2V0Q2VsbEVkaXRvciwNCisgICAgICAiZ2V0Q2VsbE5vZGUi OiBnZXRDZWxsTm9kZSwNCisgICAgICAiZ2V0Q2VsbE5vZGVCb3giOiBnZXRD ZWxsTm9kZUJveCwNCisgICAgICAiY2FuQ2VsbEJlU2VsZWN0ZWQiOiBjYW5D ZWxsQmVTZWxlY3RlZCwNCisgICAgICAiY2FuQ2VsbEJlQWN0aXZlIjogY2Fu Q2VsbEJlQWN0aXZlLA0KKyAgICAgICJuYXZpZ2F0ZVByZXYiOiBuYXZpZ2F0 ZVByZXYsDQorICAgICAgIm5hdmlnYXRlTmV4dCI6IG5hdmlnYXRlTmV4dCwN CisgICAgICAibmF2aWdhdGVVcCI6IG5hdmlnYXRlVXAsDQorICAgICAgIm5h dmlnYXRlRG93biI6IG5hdmlnYXRlRG93biwNCisgICAgICAibmF2aWdhdGVM ZWZ0IjogbmF2aWdhdGVMZWZ0LA0KKyAgICAgICJuYXZpZ2F0ZVJpZ2h0Ijog bmF2aWdhdGVSaWdodCwNCisgICAgICAibmF2aWdhdGVQYWdlVXAiOiBuYXZp Z2F0ZVBhZ2VVcCwNCisgICAgICAibmF2aWdhdGVQYWdlRG93biI6IG5hdmln YXRlUGFnZURvd24sDQorICAgICAgImdvdG9DZWxsIjogZ290b0NlbGwsDQor ICAgICAgImdldFRvcFBhbmVsIjogZ2V0VG9wUGFuZWwsDQorICAgICAgInNl dFRvcFBhbmVsVmlzaWJpbGl0eSI6IHNldFRvcFBhbmVsVmlzaWJpbGl0eSwN CisgICAgICAic2V0SGVhZGVyUm93VmlzaWJpbGl0eSI6IHNldEhlYWRlclJv d1Zpc2liaWxpdHksDQorICAgICAgImdldEhlYWRlclJvdyI6IGdldEhlYWRl clJvdywNCisgICAgICAiZ2V0SGVhZGVyUm93Q29sdW1uIjogZ2V0SGVhZGVy Um93Q29sdW1uLA0KKyAgICAgICJzZXRGb290ZXJSb3dWaXNpYmlsaXR5Ijog c2V0Rm9vdGVyUm93VmlzaWJpbGl0eSwNCisgICAgICAiZ2V0Rm9vdGVyUm93 IjogZ2V0Rm9vdGVyUm93LA0KKyAgICAgICJnZXRGb290ZXJSb3dDb2x1bW4i OiBnZXRGb290ZXJSb3dDb2x1bW4sDQorICAgICAgImdldEdyaWRQb3NpdGlv biI6IGdldEdyaWRQb3NpdGlvbiwNCisgICAgICAiZmxhc2hDZWxsIjogZmxh c2hDZWxsLA0KKyAgICAgICJhZGRDZWxsQ3NzU3R5bGVzIjogYWRkQ2VsbENz c1N0eWxlcywNCisgICAgICAic2V0Q2VsbENzc1N0eWxlcyI6IHNldENlbGxD c3NTdHlsZXMsDQorICAgICAgInJlbW92ZUNlbGxDc3NTdHlsZXMiOiByZW1v dmVDZWxsQ3NzU3R5bGVzLA0KKyAgICAgICJnZXRDZWxsQ3NzU3R5bGVzIjog Z2V0Q2VsbENzc1N0eWxlcywNCisNCisgICAgICAiaW5pdCI6IGZpbmlzaElu aXRpYWxpemF0aW9uLA0KKyAgICAgICJkZXN0cm95IjogZGVzdHJveSwNCisN CisgICAgICAvLyBJRWRpdG9yIGltcGxlbWVudGF0aW9uDQorICAgICAgImdl dEVkaXRvckxvY2siOiBnZXRFZGl0b3JMb2NrLA0KKyAgICAgICJnZXRFZGl0 Q29udHJvbGxlciI6IGdldEVkaXRDb250cm9sbGVyDQorICAgIH0pOw0KKw0K KyAgICBpbml0KCk7DQorICB9DQorfShqUXVlcnkpKTsNCmRpZmYgLS1naXQg YS93ZWIvcGdhZG1pbi9zdGF0aWMvdmVuZG9yL3NsaWNrZ3JpZC9zbGljay5n cm91cGl0ZW1tZXRhZGF0YXByb3ZpZGVyLmpzIGIvd2ViL3BnYWRtaW4vc3Rh dGljL3ZlbmRvci9zbGlja2dyaWQvc2xpY2suZ3JvdXBpdGVtbWV0YWRhdGFw cm92aWRlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MC4uZGUwNWM3MjEKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9z dGF0aWMvdmVuZG9yL3NsaWNrZ3JpZC9zbGljay5ncm91cGl0ZW1tZXRhZGF0 YXByb3ZpZGVyLmpzCkBAIC0wLDAgKzEsMTU4IEBACisoZnVuY3Rpb24gKCQp IHsKKyAgJC5leHRlbmQodHJ1ZSwgd2luZG93LCB7CisgICAgU2xpY2s6IHsK KyAgICAgIERhdGE6IHsKKyAgICAgICAgR3JvdXBJdGVtTWV0YWRhdGFQcm92 aWRlcjogR3JvdXBJdGVtTWV0YWRhdGFQcm92aWRlcgorICAgICAgfQorICAg IH0KKyAgfSk7CisKKworICAvKioqCisgICAqIFByb3ZpZGVzIGl0ZW0gbWV0 YWRhdGEgZm9yIGdyb3VwIChTbGljay5Hcm91cCkgYW5kIHRvdGFscyAoU2xp Y2suVG90YWxzKSByb3dzIHByb2R1Y2VkIGJ5IHRoZSBEYXRhVmlldy4KKyAg ICogVGhpcyBtZXRhZGF0YSBvdmVycmlkZXMgdGhlIGRlZmF1bHQgYmVoYXZp b3IgYW5kIGZvcm1hdHRpbmcgb2YgdGhvc2Ugcm93cyBzbyB0aGF0IHRoZXkg YXBwZWFyIGFuZCBmdW5jdGlvbgorICAgKiBjb3JyZWN0bHkgd2hlbiBwcm9j ZXNzZWQgYnkgdGhlIGdyaWQuCisgICAqCisgICAqIFRoaXMgY2xhc3MgYWxz byBhY3RzIGFzIGEgZ3JpZCBwbHVnaW4gcHJvdmlkaW5nIGV2ZW50IGhhbmRs ZXJzIHRvIGV4cGFuZCAmIGNvbGxhcHNlIGdyb3Vwcy4KKyAgICogSWYgImdy aWQucmVnaXN0ZXJQbHVnaW4oLi4uKSIgaXMgbm90IGNhbGxlZCwgZXhwYW5k ICYgY29sbGFwc2Ugd2lsbCBub3Qgd29yay4KKyAgICoKKyAgICogQGNsYXNz IEdyb3VwSXRlbU1ldGFkYXRhUHJvdmlkZXIKKyAgICogQG1vZHVsZSBEYXRh CisgICAqIEBuYW1lc3BhY2UgU2xpY2suRGF0YQorICAgKiBAY29uc3RydWN0 b3IKKyAgICogQHBhcmFtIG9wdGlvbnMKKyAgICovCisgIGZ1bmN0aW9uIEdy b3VwSXRlbU1ldGFkYXRhUHJvdmlkZXIob3B0aW9ucykgeworICAgIHZhciBf Z3JpZDsKKyAgICB2YXIgX2RlZmF1bHRzID0geworICAgICAgZ3JvdXBDc3ND bGFzczogInNsaWNrLWdyb3VwIiwKKyAgICAgIGdyb3VwVGl0bGVDc3NDbGFz czogInNsaWNrLWdyb3VwLXRpdGxlIiwKKyAgICAgIHRvdGFsc0Nzc0NsYXNz OiAic2xpY2stZ3JvdXAtdG90YWxzIiwKKyAgICAgIGdyb3VwRm9jdXNhYmxl OiB0cnVlLAorICAgICAgdG90YWxzRm9jdXNhYmxlOiBmYWxzZSwKKyAgICAg IHRvZ2dsZUNzc0NsYXNzOiAic2xpY2stZ3JvdXAtdG9nZ2xlIiwKKyAgICAg IHRvZ2dsZUV4cGFuZGVkQ3NzQ2xhc3M6ICJleHBhbmRlZCIsCisgICAgICB0 b2dnbGVDb2xsYXBzZWRDc3NDbGFzczogImNvbGxhcHNlZCIsCisgICAgICBl bmFibGVFeHBhbmRDb2xsYXBzZTogdHJ1ZSwKKyAgICAgIGdyb3VwRm9ybWF0 dGVyOiBkZWZhdWx0R3JvdXBDZWxsRm9ybWF0dGVyLAorICAgICAgdG90YWxz Rm9ybWF0dGVyOiBkZWZhdWx0VG90YWxzQ2VsbEZvcm1hdHRlcgorICAgIH07 CisKKyAgICBvcHRpb25zID0gJC5leHRlbmQodHJ1ZSwge30sIF9kZWZhdWx0 cywgb3B0aW9ucyk7CisKKworICAgIGZ1bmN0aW9uIGRlZmF1bHRHcm91cENl bGxGb3JtYXR0ZXIocm93LCBjZWxsLCB2YWx1ZSwgY29sdW1uRGVmLCBpdGVt KSB7CisgICAgICBpZiAoIW9wdGlvbnMuZW5hYmxlRXhwYW5kQ29sbGFwc2Up IHsKKyAgICAgICAgcmV0dXJuIGl0ZW0udGl0bGU7CisgICAgICB9CisKKyAg ICAgIHZhciBpbmRlbnRhdGlvbiA9IGl0ZW0ubGV2ZWwgKiAxNSArICJweCI7 CisKKyAgICAgIHJldHVybiAiPHNwYW4gY2xhc3M9JyIgKyBvcHRpb25zLnRv Z2dsZUNzc0NsYXNzICsgIiAiICsKKyAgICAgICAgICAoaXRlbS5jb2xsYXBz ZWQgPyBvcHRpb25zLnRvZ2dsZUNvbGxhcHNlZENzc0NsYXNzIDogb3B0aW9u cy50b2dnbGVFeHBhbmRlZENzc0NsYXNzKSArCisgICAgICAgICAgIicgc3R5 bGU9J21hcmdpbi1sZWZ0OiIgKyBpbmRlbnRhdGlvbiArIic+IiArCisgICAg ICAgICAgIjwvc3Bhbj4iICsKKyAgICAgICAgICAiPHNwYW4gY2xhc3M9JyIg KyBvcHRpb25zLmdyb3VwVGl0bGVDc3NDbGFzcyArICInIGxldmVsPSciICsg aXRlbS5sZXZlbCArICInPiIgKworICAgICAgICAgICAgaXRlbS50aXRsZSAr CisgICAgICAgICAgIjwvc3Bhbj4iOworICAgIH0KKworICAgIGZ1bmN0aW9u IGRlZmF1bHRUb3RhbHNDZWxsRm9ybWF0dGVyKHJvdywgY2VsbCwgdmFsdWUs IGNvbHVtbkRlZiwgaXRlbSkgeworICAgICAgcmV0dXJuIChjb2x1bW5EZWYu Z3JvdXBUb3RhbHNGb3JtYXR0ZXIgJiYgY29sdW1uRGVmLmdyb3VwVG90YWxz Rm9ybWF0dGVyKGl0ZW0sIGNvbHVtbkRlZikpIHx8ICIiOworICAgIH0KKwor CisgICAgZnVuY3Rpb24gaW5pdChncmlkKSB7CisgICAgICBfZ3JpZCA9IGdy aWQ7CisgICAgICBfZ3JpZC5vbkNsaWNrLnN1YnNjcmliZShoYW5kbGVHcmlk Q2xpY2spOworICAgICAgX2dyaWQub25LZXlEb3duLnN1YnNjcmliZShoYW5k bGVHcmlkS2V5RG93bik7CisKKyAgICB9CisKKyAgICBmdW5jdGlvbiBkZXN0 cm95KCkgeworICAgICAgaWYgKF9ncmlkKSB7CisgICAgICAgIF9ncmlkLm9u Q2xpY2sudW5zdWJzY3JpYmUoaGFuZGxlR3JpZENsaWNrKTsKKyAgICAgICAg X2dyaWQub25LZXlEb3duLnVuc3Vic2NyaWJlKGhhbmRsZUdyaWRLZXlEb3du KTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBoYW5kbGVHcmlk Q2xpY2soZSwgYXJncykgeworICAgICAgdmFyIGl0ZW0gPSB0aGlzLmdldERh dGFJdGVtKGFyZ3Mucm93KTsKKyAgICAgIGlmIChpdGVtICYmIGl0ZW0gaW5z dGFuY2VvZiBTbGljay5Hcm91cCAmJiAkKGUudGFyZ2V0KS5oYXNDbGFzcyhv cHRpb25zLnRvZ2dsZUNzc0NsYXNzKSkgeworICAgICAgICB2YXIgcmFuZ2Ug PSBfZ3JpZC5nZXRSZW5kZXJlZFJhbmdlKCk7CisgICAgICAgIHRoaXMuZ2V0 RGF0YSgpLnNldFJlZnJlc2hIaW50cyh7CisgICAgICAgICAgaWdub3JlRGlm ZnNCZWZvcmU6IHJhbmdlLnRvcCwKKyAgICAgICAgICBpZ25vcmVEaWZmc0Fm dGVyOiByYW5nZS5ib3R0b20gKyAxCisgICAgICAgIH0pOworCisgICAgICAg IGlmIChpdGVtLmNvbGxhcHNlZCkgeworICAgICAgICAgIHRoaXMuZ2V0RGF0 YSgpLmV4cGFuZEdyb3VwKGl0ZW0uZ3JvdXBpbmdLZXkpOworICAgICAgICB9 IGVsc2UgeworICAgICAgICAgIHRoaXMuZ2V0RGF0YSgpLmNvbGxhcHNlR3Jv dXAoaXRlbS5ncm91cGluZ0tleSk7CisgICAgICAgIH0KKworICAgICAgICBl LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOworICAgICAgICBlLnByZXZl bnREZWZhdWx0KCk7CisgICAgICB9CisgICAgfQorCisgICAgLy8gVE9ETzog IGFkZCAtLysgaGFuZGxpbmcKKyAgICBmdW5jdGlvbiBoYW5kbGVHcmlkS2V5 RG93bihlLCBhcmdzKSB7CisgICAgICBpZiAob3B0aW9ucy5lbmFibGVFeHBh bmRDb2xsYXBzZSAmJiAoZS53aGljaCA9PSAkLnVpLmtleUNvZGUuU1BBQ0Up KSB7CisgICAgICAgIHZhciBhY3RpdmVDZWxsID0gdGhpcy5nZXRBY3RpdmVD ZWxsKCk7CisgICAgICAgIGlmIChhY3RpdmVDZWxsKSB7CisgICAgICAgICAg dmFyIGl0ZW0gPSB0aGlzLmdldERhdGFJdGVtKGFjdGl2ZUNlbGwucm93KTsK KyAgICAgICAgICBpZiAoaXRlbSAmJiBpdGVtIGluc3RhbmNlb2YgU2xpY2su R3JvdXApIHsKKyAgICAgICAgICAgIHZhciByYW5nZSA9IF9ncmlkLmdldFJl bmRlcmVkUmFuZ2UoKTsKKyAgICAgICAgICAgIHRoaXMuZ2V0RGF0YSgpLnNl dFJlZnJlc2hIaW50cyh7CisgICAgICAgICAgICAgIGlnbm9yZURpZmZzQmVm b3JlOiByYW5nZS50b3AsCisgICAgICAgICAgICAgIGlnbm9yZURpZmZzQWZ0 ZXI6IHJhbmdlLmJvdHRvbSArIDEKKyAgICAgICAgICAgIH0pOworCisgICAg ICAgICAgICBpZiAoaXRlbS5jb2xsYXBzZWQpIHsKKyAgICAgICAgICAgICAg dGhpcy5nZXREYXRhKCkuZXhwYW5kR3JvdXAoaXRlbS5ncm91cGluZ0tleSk7 CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICB0aGlzLmdl dERhdGEoKS5jb2xsYXBzZUdyb3VwKGl0ZW0uZ3JvdXBpbmdLZXkpOworICAg ICAgICAgICAgfQorCisgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9w YWdhdGlvbigpOworICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwor ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAg IGZ1bmN0aW9uIGdldEdyb3VwUm93TWV0YWRhdGEoaXRlbSkgeworICAgICAg cmV0dXJuIHsKKyAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsCisgICAgICAg IGZvY3VzYWJsZTogb3B0aW9ucy5ncm91cEZvY3VzYWJsZSwKKyAgICAgICAg Y3NzQ2xhc3Nlczogb3B0aW9ucy5ncm91cENzc0NsYXNzLAorICAgICAgICBj b2x1bW5zOiB7CisgICAgICAgICAgMDogeworICAgICAgICAgICAgY29sc3Bh bjogIioiLAorICAgICAgICAgICAgZm9ybWF0dGVyOiBvcHRpb25zLmdyb3Vw Rm9ybWF0dGVyLAorICAgICAgICAgICAgZWRpdG9yOiBudWxsCisgICAgICAg ICAgfQorICAgICAgICB9CisgICAgICB9OworICAgIH0KKworICAgIGZ1bmN0 aW9uIGdldFRvdGFsc1Jvd01ldGFkYXRhKGl0ZW0pIHsKKyAgICAgIHJldHVy biB7CisgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLAorICAgICAgICBmb2N1 c2FibGU6IG9wdGlvbnMudG90YWxzRm9jdXNhYmxlLAorICAgICAgICBjc3ND bGFzc2VzOiBvcHRpb25zLnRvdGFsc0Nzc0NsYXNzLAorICAgICAgICBmb3Jt YXR0ZXI6IG9wdGlvbnMudG90YWxzRm9ybWF0dGVyLAorICAgICAgICBlZGl0 b3I6IG51bGwKKyAgICAgIH07CisgICAgfQorCisKKyAgICByZXR1cm4gewor ICAgICAgImluaXQiOiBpbml0LAorICAgICAgImRlc3Ryb3kiOiBkZXN0cm95 LAorICAgICAgImdldEdyb3VwUm93TWV0YWRhdGEiOiBnZXRHcm91cFJvd01l dGFkYXRhLAorICAgICAgImdldFRvdGFsc1Jvd01ldGFkYXRhIjogZ2V0VG90 YWxzUm93TWV0YWRhdGEKKyAgICB9OworICB9Cit9KShqUXVlcnkpOwpkaWZm IC0tZ2l0IGEvd2ViL3BnYWRtaW4vc3RhdGljL3ZlbmRvci9zbGlja2dyaWQv c2xpY2sucmVtb3RlbW9kZWwteWFob28uanMgYi93ZWIvcGdhZG1pbi9zdGF0 aWMvdmVuZG9yL3NsaWNrZ3JpZC9zbGljay5yZW1vdGVtb2RlbC15YWhvby5q cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uZmIxMWQ4 NWEKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9zdGF0aWMvdmVu ZG9yL3NsaWNrZ3JpZC9zbGljay5yZW1vdGVtb2RlbC15YWhvby5qcwpAQCAt MCwwICsxLDIwNiBAQAorKGZ1bmN0aW9uICgkKSB7CisgIC8qKioKKyAgICog QSBzYW1wbGUgQUpBWCBkYXRhIHN0b3JlIGltcGxlbWVudGF0aW9uLgorICAg KiBSaWdodCBub3csIGl0J3MgaG9va2VkIHVwIHRvIGxvYWQgSGFja2VybmV3 cyBzdG9yaWVzLCBidXQgY2FuCisgICAqIGVhc2lseSBiZSBleHRlbmRlZCB0 byBzdXBwb3J0IGFueSBKU09OUC1jb21wYXRpYmxlIGJhY2tlbmQgdGhhdCBh Y2NlcHRzIHBhZ2luZyBwYXJhbWV0ZXJzLgorICAgKi8KKyAgZnVuY3Rpb24g UmVtb3RlTW9kZWwoKSB7CisgICAgLy8gcHJpdmF0ZQorICAgIHZhciBQQUdF U0laRSA9IDEwOworICAgIHZhciBkYXRhID0ge2xlbmd0aDogMH07CisgICAg dmFyIGhfcmVxdWVzdCA9IG51bGw7CisgICAgdmFyIHJlcSA9IG51bGw7IC8v IGFqYXggcmVxdWVzdAorCisgICAgLy8gZXZlbnRzCisgICAgdmFyIG9uRGF0 YUxvYWRpbmcgPSBuZXcgU2xpY2suRXZlbnQoKTsKKyAgICB2YXIgb25EYXRh TG9hZGVkID0gbmV3IFNsaWNrLkV2ZW50KCk7CisKKworICAgIGZ1bmN0aW9u IGluaXQoKSB7CisgICAgfQorCisKKyAgICBmdW5jdGlvbiBpc0RhdGFMb2Fk ZWQoZnJvbSwgdG8pIHsKKyAgICAgIGZvciAodmFyIGkgPSBmcm9tOyBpIDw9 IHRvOyBpKyspIHsKKyAgICAgICAgaWYgKGRhdGFbaV0gPT0gdW5kZWZpbmVk IHx8IGRhdGFbaV0gPT0gbnVsbCkgeworICAgICAgICAgIHJldHVybiBmYWxz ZTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICByZXR1cm4gdHJ1ZTsK KyAgICB9CisKKworICAgIGZ1bmN0aW9uIGNsZWFyKCkgeworICAgICAgZm9y ICh2YXIga2V5IGluIGRhdGEpIHsKKyAgICAgICAgZGVsZXRlIGRhdGFba2V5 XTsKKyAgICAgIH0KKyAgICAgIGRhdGEubGVuZ3RoID0gMDsKKyAgICB9CisK KyAgICBmdW5jdGlvbiBlbnN1cmVEYXRhKGZyb20sIHRvKSB7CisgICAgICBp ZiAocmVxKSB7CisgICAgICAgIHJlcS5hYm9ydCgpOworICAgICAgICBmb3Ig KHZhciBpID0gcmVxLmZyb21QYWdlOyBpIDw9IHJlcS50b1BhZ2U7IGkrKykg eworICAgICAgICAgIGRhdGFbaSAqIFBBR0VTSVpFXSA9IHVuZGVmaW5lZDsK KyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoZnJvbSA8IDApIHsK KyAgICAgICAgZnJvbSA9IDA7CisgICAgICB9CisKKyAgICAgIGlmIChkYXRh Lmxlbmd0aCA+IDApIHsKKyAgICAgICAgdG8gPSBNYXRoLm1pbih0bywgZGF0 YS5sZW5ndGggLSAxKTsKKyAgICAgIH0KKworICAgICAgdmFyIGZyb21QYWdl ID0gTWF0aC5mbG9vcihmcm9tIC8gUEFHRVNJWkUpOworICAgICAgdmFyIHRv UGFnZSA9IE1hdGguZmxvb3IodG8gLyBQQUdFU0laRSk7CisKKyAgICAgIHdo aWxlIChkYXRhW2Zyb21QYWdlICogUEFHRVNJWkVdICE9PSB1bmRlZmluZWQg JiYgZnJvbVBhZ2UgPCB0b1BhZ2UpCisgICAgICAgIGZyb21QYWdlKys7CisK KyAgICAgIHdoaWxlIChkYXRhW3RvUGFnZSAqIFBBR0VTSVpFXSAhPT0gdW5k ZWZpbmVkICYmIGZyb21QYWdlIDwgdG9QYWdlKQorICAgICAgICB0b1BhZ2Ut LTsKKworICAgICAgaWYgKGZyb21QYWdlID4gdG9QYWdlIHx8ICgoZnJvbVBh Z2UgPT0gdG9QYWdlKSAmJiBkYXRhW2Zyb21QYWdlICogUEFHRVNJWkVdICE9 PSB1bmRlZmluZWQpKSB7CisgICAgICAgIC8vIFRPRE86ICBsb29rLWFoZWFk CisgICAgICAgIG9uRGF0YUxvYWRlZC5ub3RpZnkoe2Zyb206IGZyb20sIHRv OiB0b30pOworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIHZh ciByZWNTdGFydCA9IChmcm9tUGFnZSAqIFBBR0VTSVpFKTsKKyAgICAgIHZh ciByZWNDb3VudCA9ICgoKHRvUGFnZSAtIGZyb21QYWdlKSAqIFBBR0VTSVpF KSArIFBBR0VTSVpFKTsKKworICAgICAgdmFyIHVybCA9ICJodHRwczovL3F1 ZXJ5LnlhaG9vYXBpcy5jb20vdjEvcHVibGljL3lxbD9xPXNlbGVjdCUyMCol MjBmcm9tJTIwcnNzIgorICAgICAgICArICIoIiArIHJlY1N0YXJ0ICsgIiUy QyIgKyByZWNDb3VudCArICIpIgorICAgICAgICArICIlMjB3aGVyZSUyMHVy bCUzRCUyMmh0dHAlM0ElMkYlMkZyc3MubmV3cy55YWhvby5jb20lMkZyc3Ml MkZ0b3BzdG9yaWVzJTIyIgorICAgICAgICArICImZm9ybWF0PWpzb24iOwor CisgICAgICBpZiAoaF9yZXF1ZXN0ICE9IG51bGwpIHsKKyAgICAgICAgY2xl YXJUaW1lb3V0KGhfcmVxdWVzdCk7CisgICAgICB9CisKKyAgICAgIGhfcmVx dWVzdCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICBmb3Ig KHZhciBpID0gZnJvbVBhZ2U7IGkgPD0gdG9QYWdlOyBpKyspCisgICAgICAg ICAgZGF0YVtpICogUEFHRVNJWkVdID0gbnVsbDsgLy8gbnVsbCBpbmRpY2F0 ZXMgYSAncmVxdWVzdGVkIGJ1dCBub3QgYXZhaWxhYmxlIHlldCcKKworICAg ICAgICBvbkRhdGFMb2FkaW5nLm5vdGlmeSh7ZnJvbTogZnJvbSwgdG86IHRv fSk7CisKKyAgICAgICAgcmVxID0gJC5qc29ucCh7CisgICAgICAgICAgdXJs OiB1cmwsCisgICAgICAgICAgY2FsbGJhY2tQYXJhbWV0ZXI6ICJjYWxsYmFj ayIsCisgICAgICAgICAgY2FjaGU6IHRydWUsCisgICAgICAgICAgc3VjY2Vz czogZnVuY3Rpb24gKGpzb24sIHRleHRTdGF0dXMsIHhPcHRpb25zKSB7Cisg ICAgICAgICAgICBvblN1Y2Nlc3MoanNvbiwgcmVjU3RhcnQpCisgICAgICAg ICAgfSwKKyAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKCkgeworICAgICAg ICAgICAgb25FcnJvcihmcm9tUGFnZSwgdG9QYWdlKQorICAgICAgICAgIH0K KyAgICAgICAgfSk7CisKKyAgICAgICAgcmVxLmZyb21QYWdlID0gZnJvbVBh Z2U7CisgICAgICAgIHJlcS50b1BhZ2UgPSB0b1BhZ2U7CisgICAgICB9LCA1 MCk7CisgICAgfQorCisKKyAgICBmdW5jdGlvbiBvbkVycm9yKGZyb21QYWdl LCB0b1BhZ2UpIHsKKyAgICAgIGFsZXJ0KCJlcnJvciBsb2FkaW5nIHBhZ2Vz ICIgKyBmcm9tUGFnZSArICIgdG8gIiArIHRvUGFnZSk7CisgICAgfQorCisv LyBTQU1QTEUgREFUQQorLy8gICAgeworLy8gICAgICAicXVlcnkiOiB7Cisv LyAgICAgICAgImNvdW50IjogNDAsCisvLyAgICAgICAgImNyZWF0ZWQiOiAi MjAxNS0wMy0wM1QwMDozNDowMFoiLAorLy8gICAgICAgICJsYW5nIjogImVu LVVTIiwKKy8vICAgICAgICAicmVzdWx0cyI6IHsKKy8vICAgICAgICAgICJp dGVtIjogWworLy8gICAgICAgICAgICB7CisvLyAgICAgICAgICAgICAgInRp dGxlIjogIk5ldGFueWFodSBhc3NhaWxzIElyYW4gZGVhbCwgdG91dHMgVVMt SXNyYWVsIHRpZXMiLAorLy8gICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6 ICI8cD48YSBocmVmPVwiaHR0cDovL25ld3MueWFob28uY29tL25ldGFueWFo dS11cy1vZmZpY2lhbHMtZmFjZS1vZmYtaXJhbi0xMzM1MzkwMjEtLXBvbGl0 aWNzLmh0bWxcIj48aW1nIHNyYz1cImh0dHA6Ly9sMi55aW1nLmNvbS9idC9h cGkvcmVzLzEuMi80ZW9CeGJKU3RyYkdBS2JtQllPSmZnLS0vWVhCd2FXUTll VzVsZDNNN1ptazlabWxzYkR0b1BUZzJPM0U5TnpVN2R6MHhNekEtL2h0dHA6 Ly9tZWRpYS56ZW5mcy5jb20vZW5fdXMvTmV3cy9hcF93ZWJmZWVkcy8yZjNh MjBjMmQ0NmQ5ZjA5NmYwZjZhNzA2NzAwZDQzMC5qcGdcIiB3aWR0aD1cIjEz MFwiIGhlaWdodD1cIjg2XCIgYWx0PVwiSXNyYWVsaSBQcmltZSBNaW5pc3Rl ciBCZW5qYW1pbiBOZXRhbnlhaHUgYWRkcmVzc2VzIHRoZSAyMDE1IEFtZXJp Y2FuIElzcmFlbCBQdWJsaWMgQWZmYWlycyBDb21taXR0ZWUgKEFJUEFDKSBQ b2xpY3kgQ29uZmVyZW5jZSBpbiBXYXNoaW5ndG9uLCBNb25kYXksIE1hcmNo IDIsIDIwMTUuIChBUCBQaG90by9DbGlmZiBPd2VuKVwiIGFsaWduPVwibGVm dFwiIHRpdGxlPVwiSXNyYWVsaSBQcmltZSBNaW5pc3RlciBCZW5qYW1pbiBO ZXRhbnlhaHUgYWRkcmVzc2VzIHRoZSAyMDE1IEFtZXJpY2FuIElzcmFlbCBQ dWJsaWMgQWZmYWlycyBDb21taXR0ZWUgKEFJUEFDKSBQb2xpY3kgQ29uZmVy ZW5jZSBpbiBXYXNoaW5ndG9uLCBNb25kYXksIE1hcmNoIDIsIDIwMTUuIChB UCBQaG90by9DbGlmZiBPd2VuKVwiIGJvcmRlcj1cIjBcIiAvPjwvYT5XQVNI SU5HVE9OIChBUCkg4oCUIFNlZWtpbmcgdG8gbG93ZXIgdGVuc2lvbnMsIEJl bmphbWluIE5ldGFueWFodSBhbmQgVS5TLiBvZmZpY2lhbHMgY2FzdCB0aGVp ciBkaXNwdXRlIG92ZXIgSXJhbiBhcyBhIGZhbWlseSBzcXVhYmJsZSBvbiBN b25kYXksIGV2ZW4gYXMgdGhlIElzcmFlbGkgbGVhZGVyIGNsYWltZWQgUHJl c2lkZW50IEJhcmFjayBPYmFtYSBkaWQgbm90IOKAlCBhbmQgY291bGQgbm90 IOKAlCBmdWxseSB1bmRlcnN0YW5kIGhpcyBuYXRpb24mIzAzOTtzIHZpdGFs IHNlY3VyaXR5IGNvbmNlcm5zLjwvcD48YnIgY2xlYXI9XCJhbGxcIi8+IiwK Ky8vICAgICAgICAgICAgICAibGluayI6ICJodHRwOi8vbmV3cy55YWhvby5j b20vbmV0YW55YWh1LXVzLW9mZmljaWFscy1mYWNlLW9mZi1pcmFuLTEzMzUz OTAyMS0tcG9saXRpY3MuaHRtbCIsCisvLyAgICAgICAgICAgICAgInB1YkRh dGUiOiAiTW9uLCAwMiBNYXIgMjAxNSAxOToxNzozNiAtMDUwMCIsCisvLyAg ICAgICAgICAgICAgInNvdXJjZSI6IHsKKy8vICAgICAgICAgICAgICAgICJ1 cmwiOiAiaHR0cDovL3d3dy5hcC5vcmcvIiwKKy8vICAgICAgICAgICAgICAg ICJjb250ZW50IjogIkFzc29jaWF0ZWQgUHJlc3MiCisvLyAgICAgICAgICAg ICAgfSwKKy8vICAgICAgICAgICAgICAiZ3VpZCI6IHsKKy8vICAgICAgICAg ICAgICAgICJpc1Blcm1hTGluayI6ICJmYWxzZSIsCisvLyAgICAgICAgICAg ICAgICAiY29udGVudCI6ICJuZXRhbnlhaHUtdXMtb2ZmaWNpYWxzLWZhY2Ut b2ZmLWlyYW4tMTMzNTM5MDIxLS1wb2xpdGljcyIKKy8vICAgICAgICAgICAg ICB9LAorLy8gICAgICAgICAgICAgICJjb250ZW50IjogeworLy8gICAgICAg ICAgICAgICAgImhlaWdodCI6ICI4NiIsCisvLyAgICAgICAgICAgICAgICAi dHlwZSI6ICJpbWFnZS9qcGVnIiwKKy8vICAgICAgICAgICAgICAgICJ1cmwi OiAiaHR0cDovL2wyLnlpbWcuY29tL2J0L2FwaS9yZXMvMS4yLzRlb0J4YkpT dHJiR0FLYm1CWU9KZmctLS9ZWEJ3YVdROWVXNWxkM003Wm1rOVptbHNiRHRv UFRnMk8zRTlOelU3ZHoweE16QS0vaHR0cDovL21lZGlhLnplbmZzLmNvbS9l bl91cy9OZXdzL2FwX3dlYmZlZWRzLzJmM2EyMGMyZDQ2ZDlmMDk2ZjBmNmE3 MDY3MDBkNDMwLmpwZyIsCisvLyAgICAgICAgICAgICAgICAid2lkdGgiOiAi MTMwIgorLy8gICAgICAgICAgICAgIH0sCisvLyAgICAgICAgICAgICAgInRl eHQiOiB7CisvLyAgICAgICAgICAgICAgICAidHlwZSI6ICJodG1sIiwKKy8v ICAgICAgICAgICAgICAgICJjb250ZW50IjogIjxwPjxhIGhyZWY9XCJodHRw Oi8vbmV3cy55YWhvby5jb20vbmV0YW55YWh1LXVzLW9mZmljaWFscy1mYWNl LW9mZi1pcmFuLTEzMzUzOTAyMS0tcG9saXRpY3MuaHRtbFwiPjxpbWcgc3Jj PVwiaHR0cDovL2wyLnlpbWcuY29tL2J0L2FwaS9yZXMvMS4yLzRlb0J4YkpT dHJiR0FLYm1CWU9KZmctLS9ZWEJ3YVdROWVXNWxkM003Wm1rOVptbHNiRHRv UFRnMk8zRTlOelU3ZHoweE16QS0vaHR0cDovL21lZGlhLnplbmZzLmNvbS9l bl91cy9OZXdzL2FwX3dlYmZlZWRzLzJmM2EyMGMyZDQ2ZDlmMDk2ZjBmNmE3 MDY3MDBkNDMwLmpwZ1wiIHdpZHRoPVwiMTMwXCIgaGVpZ2h0PVwiODZcIiBh bHQ9XCJJc3JhZWxpIFByaW1lIE1pbmlzdGVyIEJlbmphbWluIE5ldGFueWFo dSBhZGRyZXNzZXMgdGhlIDIwMTUgQW1lcmljYW4gSXNyYWVsIFB1YmxpYyBB ZmZhaXJzIENvbW1pdHRlZSAoQUlQQUMpIFBvbGljeSBDb25mZXJlbmNlIGlu IFdhc2hpbmd0b24sIE1vbmRheSwgTWFyY2ggMiwgMjAxNS4gKEFQIFBob3Rv L0NsaWZmIE93ZW4pXCIgYWxpZ249XCJsZWZ0XCIgdGl0bGU9XCJJc3JhZWxp IFByaW1lIE1pbmlzdGVyIEJlbmphbWluIE5ldGFueWFodSBhZGRyZXNzZXMg dGhlIDIwMTUgQW1lcmljYW4gSXNyYWVsIFB1YmxpYyBBZmZhaXJzIENvbW1p dHRlZSAoQUlQQUMpIFBvbGljeSBDb25mZXJlbmNlIGluIFdhc2hpbmd0b24s IE1vbmRheSwgTWFyY2ggMiwgMjAxNS4gKEFQIFBob3RvL0NsaWZmIE93ZW4p XCIgYm9yZGVyPVwiMFwiIC8+PC9hPldBU0hJTkdUT04gKEFQKSDigJQgU2Vl a2luZyB0byBsb3dlciB0ZW5zaW9ucywgQmVuamFtaW4gTmV0YW55YWh1IGFu ZCBVLlMuIG9mZmljaWFscyBjYXN0IHRoZWlyIGRpc3B1dGUgb3ZlciBJcmFu IGFzIGEgZmFtaWx5IHNxdWFiYmxlIG9uIE1vbmRheSwgZXZlbiBhcyB0aGUg SXNyYWVsaSBsZWFkZXIgY2xhaW1lZCBQcmVzaWRlbnQgQmFyYWNrIE9iYW1h IGRpZCBub3Qg4oCUIGFuZCBjb3VsZCBub3Qg4oCUIGZ1bGx5IHVuZGVyc3Rh bmQgaGlzIG5hdGlvbiYjMDM5O3Mgdml0YWwgc2VjdXJpdHkgY29uY2VybnMu PC9wPjxiciBjbGVhcj1cImFsbFwiLz4iCisvLyAgICAgICAgICAgICAgfSwK Ky8vICAgICAgICAgICAgICAiY3JlZGl0IjogeworLy8gICAgICAgICAgICAg ICAgInJvbGUiOiAicHVibGlzaGluZyBjb21wYW55IgorLy8gICAgICAgICAg ICAgIH0KKy8vICAgICAgICAgICAgfSwKKy8vICAgICAgICAgICAgey4uLiB9 LAorLy8gICAgICAgICAgICB7Li4uIH0sCisvLyAgICAgICAgICBdCisvLyAg ICAgICAgfQorLy8gICAgICB9CisvLyAgICB9CisKKyAgICBmdW5jdGlvbiBv blN1Y2Nlc3MoanNvbiwgcmVjU3RhcnQpIHsKKyAgICAgIHZhciByZWNFbmQg PSByZWNTdGFydDsKKyAgICAgIGlmIChqc29uLnF1ZXJ5LmNvdW50ID4gMCkg eworICAgICAgICB2YXIgcmVzdWx0cyA9IGpzb24ucXVlcnkucmVzdWx0cy5p dGVtOworICAgICAgICByZWNFbmQgPSByZWNTdGFydCArIHJlc3VsdHMubGVu Z3RoOworICAgICAgICBkYXRhLmxlbmd0aCA9IDEwMDsvLyBNYXRoLm1pbihw YXJzZUludChyZXN1bHRzLmxlbmd0aCksMTAwMCk7IC8vIGxpbWl0YXRpb24g b2YgdGhlIEFQSQorCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVz dWx0cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgIHZhciBpdGVtID0gcmVz dWx0c1tpXTsKKworICAgICAgICAgIGl0ZW0ucHViRGF0ZSA9IG5ldyBEYXRl KGl0ZW0ucHViRGF0ZSk7CisKKyAgICAgICAgICBkYXRhW3JlY1N0YXJ0ICsg aV0gPSB7IGluZGV4OiByZWNTdGFydCArIGkgfTsKKyAgICAgICAgICBkYXRh W3JlY1N0YXJ0ICsgaV0ucHViRGF0ZSA9IGl0ZW0ucHViRGF0ZTsKKyAgICAg ICAgICBkYXRhW3JlY1N0YXJ0ICsgaV0udGl0bGUgPSBpdGVtLnRpdGxlOwor ICAgICAgICAgIGRhdGFbcmVjU3RhcnQgKyBpXS51cmwgPSBpdGVtLmxpbms7 CisgICAgICAgICAgZGF0YVtyZWNTdGFydCArIGldLnRleHQgPSBpdGVtLmRl c2NyaXB0aW9uOworICAgICAgICB9CisgICAgICB9CisgICAgICByZXEgPSBu dWxsOworCisgICAgICBvbkRhdGFMb2FkZWQubm90aWZ5KHtmcm9tOiByZWNT dGFydCwgdG86IHJlY0VuZH0pOworICAgIH0KKworCisgICAgZnVuY3Rpb24g cmVsb2FkRGF0YShmcm9tLCB0bykgeworICAgICAgZm9yICh2YXIgaSA9IGZy b207IGkgPD0gdG87IGkrKykKKyAgICAgICAgZGVsZXRlIGRhdGFbaV07CisK KyAgICAgIGVuc3VyZURhdGEoZnJvbSwgdG8pOworICAgIH0KKworICAgIGlu aXQoKTsKKworICAgIHJldHVybiB7CisgICAgICAvLyBwcm9wZXJ0aWVzCisg ICAgICAiZGF0YSI6IGRhdGEsCisKKyAgICAgIC8vIG1ldGhvZHMKKyAgICAg ICJjbGVhciI6IGNsZWFyLAorICAgICAgImlzRGF0YUxvYWRlZCI6IGlzRGF0 YUxvYWRlZCwKKyAgICAgICJlbnN1cmVEYXRhIjogZW5zdXJlRGF0YSwKKyAg ICAgICJyZWxvYWREYXRhIjogcmVsb2FkRGF0YSwKKworICAgICAgLy8gZXZl bnRzCisgICAgICAib25EYXRhTG9hZGluZyI6IG9uRGF0YUxvYWRpbmcsCisg ICAgICAib25EYXRhTG9hZGVkIjogb25EYXRhTG9hZGVkCisgICAgfTsKKyAg fQorCisgIC8vIFNsaWNrLkRhdGEuUmVtb3RlTW9kZWwKKyAgJC5leHRlbmQo dHJ1ZSwgd2luZG93LCB7IFNsaWNrOiB7IERhdGE6IHsgUmVtb3RlTW9kZWw6 IFJlbW90ZU1vZGVsIH19fSk7Cit9KShqUXVlcnkpOwpkaWZmIC0tZ2l0IGEv d2ViL3BnYWRtaW4vc3RhdGljL3ZlbmRvci9zbGlja2dyaWQvc2xpY2sucmVt b3RlbW9kZWwuanMgYi93ZWIvcGdhZG1pbi9zdGF0aWMvdmVuZG9yL3NsaWNr Z3JpZC9zbGljay5yZW1vdGVtb2RlbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMC4uZjgxY2EzZjQKLS0tIC9kZXYvbnVsbAorKysg Yi93ZWIvcGdhZG1pbi9zdGF0aWMvdmVuZG9yL3NsaWNrZ3JpZC9zbGljay5y ZW1vdGVtb2RlbC5qcwpAQCAtMCwwICsxLDE2OSBAQAorKGZ1bmN0aW9uICgk KSB7CisgIC8qKioKKyAgICogQSBzYW1wbGUgQUpBWCBkYXRhIHN0b3JlIGlt cGxlbWVudGF0aW9uLgorICAgKiBSaWdodCBub3csIGl0J3MgaG9va2VkIHVw IHRvIGxvYWQgc2VhcmNoIHJlc3VsdHMgZnJvbSBPY3RvcGFydCwgYnV0IGNh bgorICAgKiBlYXNpbHkgYmUgZXh0ZW5kZWQgdG8gc3VwcG9ydCBhbnkgSlNP TlAtY29tcGF0aWJsZSBiYWNrZW5kIHRoYXQgYWNjZXB0cyBwYWdpbmcgcGFy YW1ldGVycy4KKyAgICovCisgIGZ1bmN0aW9uIFJlbW90ZU1vZGVsKCkgewor ICAgIC8vIHByaXZhdGUKKyAgICB2YXIgUEFHRVNJWkUgPSA1MDsKKyAgICB2 YXIgZGF0YSA9IHtsZW5ndGg6IDB9OworICAgIHZhciBzZWFyY2hzdHIgPSAi IjsKKyAgICB2YXIgc29ydGNvbCA9IG51bGw7CisgICAgdmFyIHNvcnRkaXIg PSAxOworICAgIHZhciBoX3JlcXVlc3QgPSBudWxsOworICAgIHZhciByZXEg PSBudWxsOyAvLyBhamF4IHJlcXVlc3QKKworICAgIC8vIGV2ZW50cworICAg IHZhciBvbkRhdGFMb2FkaW5nID0gbmV3IFNsaWNrLkV2ZW50KCk7CisgICAg dmFyIG9uRGF0YUxvYWRlZCA9IG5ldyBTbGljay5FdmVudCgpOworCisKKyAg ICBmdW5jdGlvbiBpbml0KCkgeworICAgIH0KKworCisgICAgZnVuY3Rpb24g aXNEYXRhTG9hZGVkKGZyb20sIHRvKSB7CisgICAgICBmb3IgKHZhciBpID0g ZnJvbTsgaSA8PSB0bzsgaSsrKSB7CisgICAgICAgIGlmIChkYXRhW2ldID09 IHVuZGVmaW5lZCB8fCBkYXRhW2ldID09IG51bGwpIHsKKyAgICAgICAgICBy ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgcmV0 dXJuIHRydWU7CisgICAgfQorCisKKyAgICBmdW5jdGlvbiBjbGVhcigpIHsK KyAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7CisgICAgICAgIGRlbGV0 ZSBkYXRhW2tleV07CisgICAgICB9CisgICAgICBkYXRhLmxlbmd0aCA9IDA7 CisgICAgfQorCisKKyAgICBmdW5jdGlvbiBlbnN1cmVEYXRhKGZyb20sIHRv KSB7CisgICAgICBpZiAocmVxKSB7CisgICAgICAgIHJlcS5hYm9ydCgpOwor ICAgICAgICBmb3IgKHZhciBpID0gcmVxLmZyb21QYWdlOyBpIDw9IHJlcS50 b1BhZ2U7IGkrKykKKyAgICAgICAgICBkYXRhW2kgKiBQQUdFU0laRV0gPSB1 bmRlZmluZWQ7CisgICAgICB9CisKKyAgICAgIGlmIChmcm9tIDwgMCkgewor ICAgICAgICBmcm9tID0gMDsKKyAgICAgIH0KKworICAgICAgaWYgKGRhdGEu bGVuZ3RoID4gMCkgeworICAgICAgICB0byA9IE1hdGgubWluKHRvLCBkYXRh Lmxlbmd0aCAtIDEpOworICAgICAgfQorCisgICAgICB2YXIgZnJvbVBhZ2Ug PSBNYXRoLmZsb29yKGZyb20gLyBQQUdFU0laRSk7CisgICAgICB2YXIgdG9Q YWdlID0gTWF0aC5mbG9vcih0byAvIFBBR0VTSVpFKTsKKworICAgICAgd2hp bGUgKGRhdGFbZnJvbVBhZ2UgKiBQQUdFU0laRV0gIT09IHVuZGVmaW5lZCAm JiBmcm9tUGFnZSA8IHRvUGFnZSkKKyAgICAgICAgZnJvbVBhZ2UrKzsKKwor ICAgICAgd2hpbGUgKGRhdGFbdG9QYWdlICogUEFHRVNJWkVdICE9PSB1bmRl ZmluZWQgJiYgZnJvbVBhZ2UgPCB0b1BhZ2UpCisgICAgICAgIHRvUGFnZS0t OworCisgICAgICBpZiAoZnJvbVBhZ2UgPiB0b1BhZ2UgfHwgKChmcm9tUGFn ZSA9PSB0b1BhZ2UpICYmIGRhdGFbZnJvbVBhZ2UgKiBQQUdFU0laRV0gIT09 IHVuZGVmaW5lZCkpIHsKKyAgICAgICAgLy8gVE9ETzogIGxvb2stYWhlYWQK KyAgICAgICAgb25EYXRhTG9hZGVkLm5vdGlmeSh7ZnJvbTogZnJvbSwgdG86 IHRvfSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgdmFy IHVybCA9ICJodHRwOi8vb2N0b3BhcnQuY29tL2FwaS92My9wYXJ0cy9zZWFy Y2g/YXBpa2V5PTY4YjI1ZjMxJmluY2x1ZGVbXT1zaG9ydF9kZXNjcmlwdGlv biZzaG93W109dWlkJnNob3dbXT1tYW51ZmFjdHVyZXImc2hvd1tdPW1wbiZz aG93W109YnJhbmQmc2hvd1tdPW9jdG9wYXJ0X3VybCZzaG93W109c2hvcnRf ZGVzY3JpcHRpb24mcT0iICsgc2VhcmNoc3RyICsgIiZzdGFydD0iICsgKGZy b21QYWdlICogUEFHRVNJWkUpICsgIiZsaW1pdD0iICsgKCgodG9QYWdlIC0g ZnJvbVBhZ2UpICogUEFHRVNJWkUpICsgUEFHRVNJWkUpOworCisgICAgICBp ZiAoc29ydGNvbCAhPSBudWxsKSB7CisgICAgICAgIHVybCArPSAoIiZzb3J0 Ynk9IiArIHNvcnRjb2wgKyAoKHNvcnRkaXIgPiAwKSA/ICIrYXNjIiA6ICIr ZGVzYyIpKTsKKyAgICAgIH0KKworICAgICAgaWYgKGhfcmVxdWVzdCAhPSBu dWxsKSB7CisgICAgICAgIGNsZWFyVGltZW91dChoX3JlcXVlc3QpOworICAg ICAgfQorCisgICAgICBoX3JlcXVlc3QgPSBzZXRUaW1lb3V0KGZ1bmN0aW9u ICgpIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IGZyb21QYWdlOyBpIDw9IHRv UGFnZTsgaSsrKQorICAgICAgICAgIGRhdGFbaSAqIFBBR0VTSVpFXSA9IG51 bGw7IC8vIG51bGwgaW5kaWNhdGVzIGEgJ3JlcXVlc3RlZCBidXQgbm90IGF2 YWlsYWJsZSB5ZXQnCisKKyAgICAgICAgb25EYXRhTG9hZGluZy5ub3RpZnko e2Zyb206IGZyb20sIHRvOiB0b30pOworCisgICAgICAgIHJlcSA9ICQuanNv bnAoeworICAgICAgICAgIHVybDogdXJsLAorICAgICAgICAgIGNhbGxiYWNr UGFyYW1ldGVyOiAiY2FsbGJhY2siLAorICAgICAgICAgIGNhY2hlOiB0cnVl LAorICAgICAgICAgIHN1Y2Nlc3M6IG9uU3VjY2VzcywKKyAgICAgICAgICBl cnJvcjogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgb25FcnJvcihmcm9t UGFnZSwgdG9QYWdlKQorICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAg ICAgIHJlcS5mcm9tUGFnZSA9IGZyb21QYWdlOworICAgICAgICByZXEudG9Q YWdlID0gdG9QYWdlOworICAgICAgfSwgNTApOworICAgIH0KKworCisgICAg ZnVuY3Rpb24gb25FcnJvcihmcm9tUGFnZSwgdG9QYWdlKSB7CisgICAgICBh bGVydCgiZXJyb3IgbG9hZGluZyBwYWdlcyAiICsgZnJvbVBhZ2UgKyAiIHRv ICIgKyB0b1BhZ2UpOworICAgIH0KKworICAgIGZ1bmN0aW9uIG9uU3VjY2Vz cyhyZXNwKSB7CisgICAgICB2YXIgZnJvbSA9IHJlc3AucmVxdWVzdC5zdGFy dCwgdG8gPSBmcm9tICsgcmVzcC5yZXN1bHRzLmxlbmd0aDsKKyAgICAgIGRh dGEubGVuZ3RoID0gTWF0aC5taW4ocGFyc2VJbnQocmVzcC5oaXRzKSwxMDAw KTsgLy8gbGltaXRhdGlvbiBvZiB0aGUgQVBJCisKKyAgICAgIGZvciAodmFy IGkgPSAwOyBpIDwgcmVzcC5yZXN1bHRzLmxlbmd0aDsgaSsrKSB7CisgICAg ICAgIHZhciBpdGVtID0gcmVzcC5yZXN1bHRzW2ldLml0ZW07CisKKyAgICAg ICAgZGF0YVtmcm9tICsgaV0gPSBpdGVtOworICAgICAgICBkYXRhW2Zyb20g KyBpXS5pbmRleCA9IGZyb20gKyBpOworICAgICAgfQorCisgICAgICByZXEg PSBudWxsOworCisgICAgICBvbkRhdGFMb2FkZWQubm90aWZ5KHtmcm9tOiBm cm9tLCB0bzogdG99KTsKKyAgICB9CisKKworICAgIGZ1bmN0aW9uIHJlbG9h ZERhdGEoZnJvbSwgdG8pIHsKKyAgICAgIGZvciAodmFyIGkgPSBmcm9tOyBp IDw9IHRvOyBpKyspCisgICAgICAgIGRlbGV0ZSBkYXRhW2ldOworCisgICAg ICBlbnN1cmVEYXRhKGZyb20sIHRvKTsKKyAgICB9CisKKworICAgIGZ1bmN0 aW9uIHNldFNvcnQoY29sdW1uLCBkaXIpIHsKKyAgICAgIHNvcnRjb2wgPSBj b2x1bW47CisgICAgICBzb3J0ZGlyID0gZGlyOworICAgICAgY2xlYXIoKTsK KyAgICB9CisKKyAgICBmdW5jdGlvbiBzZXRTZWFyY2goc3RyKSB7CisgICAg ICBzZWFyY2hzdHIgPSBzdHI7CisgICAgICBjbGVhcigpOworICAgIH0KKwor CisgICAgaW5pdCgpOworCisgICAgcmV0dXJuIHsKKyAgICAgIC8vIHByb3Bl cnRpZXMKKyAgICAgICJkYXRhIjogZGF0YSwKKworICAgICAgLy8gbWV0aG9k cworICAgICAgImNsZWFyIjogY2xlYXIsCisgICAgICAiaXNEYXRhTG9hZGVk IjogaXNEYXRhTG9hZGVkLAorICAgICAgImVuc3VyZURhdGEiOiBlbnN1cmVE YXRhLAorICAgICAgInJlbG9hZERhdGEiOiByZWxvYWREYXRhLAorICAgICAg InNldFNvcnQiOiBzZXRTb3J0LAorICAgICAgInNldFNlYXJjaCI6IHNldFNl YXJjaCwKKworICAgICAgLy8gZXZlbnRzCisgICAgICAib25EYXRhTG9hZGlu ZyI6IG9uRGF0YUxvYWRpbmcsCisgICAgICAib25EYXRhTG9hZGVkIjogb25E YXRhTG9hZGVkCisgICAgfTsKKyAgfQorCisgIC8vIFNsaWNrLkRhdGEuUmVt b3RlTW9kZWwKKyAgJC5leHRlbmQodHJ1ZSwgd2luZG93LCB7IFNsaWNrOiB7 IERhdGE6IHsgUmVtb3RlTW9kZWw6IFJlbW90ZU1vZGVsIH19fSk7Cit9KShq UXVlcnkpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdp dCBhL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci9zdGF0aWMvY3NzL3Nx bGVkaXRvci5jc3MgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3Ivc3Rh dGljL2Nzcy9zcWxlZGl0b3IuY3NzCmluZGV4IDU3NGVmNTNhLi5iOGU5Nzlk NCAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3N0 YXRpYy9jc3Mvc3FsZWRpdG9yLmNzcworKysgYi93ZWIvcGdhZG1pbi90b29s cy9zcWxlZGl0b3Ivc3RhdGljL2Nzcy9zcWxlZGl0b3IuY3NzCkBAIC0yNzks NyArMjc5LDcgQEAgbGkgewogICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsK IH0KIAotLnNjLmNlbGwtbW92ZS1oYW5kbGUgeworLnNsaWNrLWNlbGwuY2Vs bC1tb3ZlLWhhbmRsZSB7CiAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICB0ZXh0 LWFsaWduOiByaWdodDsKICAgYm9yZGVyLXJpZ2h0OiBzb2xpZCBncmF5OwpA QCAtMjkxLDE1ICsyOTEsMTUgQEAgbGkgewogICBiYWNrZ3JvdW5kOiAjYjZi OWJkOwogfQogCi0uc3Iuc2VsZWN0ZWQgLmNlbGwtbW92ZS1oYW5kbGUgewor LnNsaWNrLXJvdy5zZWxlY3RlZCAuY2VsbC1tb3ZlLWhhbmRsZSB7CiAgIGJh Y2tncm91bmQ6ICNENURDOEQ7CiB9CiAKLS5zciAuY2VsbC1hY3Rpb25zIHsK Ky5zbGljay1yb3cgLmNlbGwtYWN0aW9ucyB7CiAgIHRleHQtYWxpZ246IGxl ZnQ7CiB9CiAKLS5zci5jb21wbGV0ZSB7Cisuc2xpY2stcm93LmNvbXBsZXRl IHsKICAgYmFja2dyb3VuZC1jb2xvcjogI0RGRDsKICAgY29sb3I6ICM1NTU7 CiB9CkBAIC0zMzIsNyArMzMyLDcgQEAgbGkgewogICBmb250LXNpemU6IDEw cHg7CiB9CiAKLS5zci5zZWxlY3RlZCAuY2VsbC1zZWxlY3Rpb24geworLnNs aWNrLXJvdy5zZWxlY3RlZCAuY2VsbC1zZWxlY3Rpb24gewogICBiYWNrZ3Jv dW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgLyogc2hvdyBkZWZhdWx0IHNlbGVj dGVkIHJvdyBiYWNrZ3JvdW5kICovCiB9CiAKQEAgLTQwMSw3ICs0MDEsNyBA QCBpbnB1dC5lZGl0b3ItY2hlY2tib3g6Zm9jdXMgewogfQogCiAvKiBPdmVy cmlkZSBzZWxlY3RlZCByb3cgY29sb3IgKi8KLS5zYy5zZWxlY3RlZCB7Cisu c2xpY2stY2VsbC5zZWxlY3RlZCB7CiAgICAgYmFja2dyb3VuZC1jb2xvcjog I0RFRThGMSAhaW1wb3J0YW50OwogfQogCkBAIC00MjEsNyArNDIxLDcgQEAg aW5wdXQuZWRpdG9yLWNoZWNrYm94OmZvY3VzIHsKIH0KIAogLyogY29sb3Ig dGhlIGZpcnN0IGNvbHVtbiAqLwotLnNyIC5zYzpmaXJzdC1jaGlsZCB7Cisu c2xpY2stcm93IC5zbGljay1jZWxsOmZpcnN0LWNoaWxkIHsKICAgICBiYWNr Z3JvdW5kLWNvbG9yOiAjMmM3NmI0OwogfQogCkBAIC00NDMsNiArNDQzLDYg QEAgaW5wdXQuZWRpdG9yLWNoZWNrYm94OmZvY3VzIHsKICAgLW1zLWJveC1z aXppbmc6IGNvbnRlbnQtYm94OwogfQogCi0uc3IudWktd2lkZ2V0LWNvbnRl bnQgeworLnNsaWNrLXJvdy51aS13aWRnZXQtY29udGVudCB7CiAgIGJvcmRl ci10b3A6IDFweCBzb2xpZCBzaWx2ZXI7CiB9CmRpZmYgLS1naXQgYS93ZWIv cmVncmVzc2lvbi9qYXZhc2NyaXB0L3NlbGVjdGlvbi9yb3dfc2VsZWN0b3Jf c3BlYy5qcyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvc2VsZWN0aW9u L3Jvd19zZWxlY3Rvcl9zcGVjLmpzCmluZGV4IDEwNjk3ZTZhLi4yZmE2MTAy OSAxMDA2NDQKLS0tIGEvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9zZWxl Y3Rpb24vcm93X3NlbGVjdG9yX3NwZWMuanMKKysrIGIvd2ViL3JlZ3Jlc3Np b24vamF2YXNjcmlwdC9zZWxlY3Rpb24vcm93X3NlbGVjdG9yX3NwZWMuanMK QEAgLTU0LDggKzU0LDggQEAgZGVmaW5lKAogICAgICAgfSk7CiAKICAgICAg IGl0KCJyZW5kZXJzIGEgY2hlY2tib3ggdGhlIGxlZnRtb3N0IGNvbHVtbiIs IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZXhwZWN0KGNvbnRhaW5lci5maW5k KCcuc3InKS5sZW5ndGgpLnRvQmUoMTEpOwotICAgICAgICBleHBlY3QoY29u dGFpbmVyLmZpbmQoJy5zciAuc2M6Zmlyc3QtY2hpbGQgaW5wdXRbdHlwZT0i Y2hlY2tib3giXScpLmxlbmd0aCkudG9CZSgxMCk7CisgICAgICAgIGV4cGVj dChjb250YWluZXIuZmluZCgnLnNsaWNrLXJvdycpLmxlbmd0aCkudG9CZSgx MCk7CisgICAgICAgIGV4cGVjdChjb250YWluZXIuZmluZCgnLnNsaWNrLXJv dyAuc2xpY2stY2VsbDpmaXJzdC1jaGlsZCBpbnB1dFt0eXBlPSJjaGVja2Jv eCJdJykubGVuZ3RoKS50b0JlKDEwKTsKICAgICAgIH0pOwogCiAgICAgICBp dCgicHJlc2VydmVzIHRoZSBvdGhlciBhdHRyaWJ1dGVzIG9mIGNvbHVtbiBk ZWZpbml0aW9ucyIsIGZ1bmN0aW9uICgpIHsKQEAgLTY2LDQwICs2Niw0MCBA QCBkZWZpbmUoCiAgICAgICBkZXNjcmliZSgic2VsZWN0aW5nIHJvd3MiLCBm dW5jdGlvbiAoKSB7CiAgICAgICAgIGRlc2NyaWJlKCJ3aGVuIHRoZSB1c2Vy IGNsaWNrcyBhIHJvdyBoZWFkZXIgY2hlY2tib3giLCBmdW5jdGlvbiAoKSB7 CiAgICAgICAgICAgaXQoInNlbGVjdHMgdGhlIHJvdyIsIGZ1bmN0aW9uICgp IHsKLSAgICAgICAgICAgIGNvbnRhaW5lci5maW5kKCcuc3IgLnNjOmZpcnN0 LWNoaWxkIGlucHV0W3R5cGU9ImNoZWNrYm94Il0nKVswXS5jbGljaygpOwor ICAgICAgICAgICAgY29udGFpbmVyLmZpbmQoJy5zbGljay1yb3cgLnNsaWNr LWNlbGw6Zmlyc3QtY2hpbGQgaW5wdXRbdHlwZT0iY2hlY2tib3giXScpWzBd LmNsaWNrKCk7CiAKICAgICAgICAgICAgIHZhciBzZWxlY3RlZFJhbmdlcyA9 IHJvd1NlbGVjdGlvbk1vZGVsLmdldFNlbGVjdGVkUmFuZ2VzKCk7CiAgICAg ICAgICAgICBleHBlY3RPbmx5VGhlRmlyc3RSb3dUb0JlU2VsZWN0ZWQoc2Vs ZWN0ZWRSYW5nZXMpOwogICAgICAgICAgIH0pOwogCiAgICAgICAgICAgaXQo ImNoZWNrcyB0aGUgY2hlY2tib3giLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAg ICAgICBjb250YWluZXIuZmluZCgnLnNyIC5zYzpmaXJzdC1jaGlsZCBpbnB1 dFt0eXBlPSJjaGVja2JveCJdJylbNV0uY2xpY2soKTsKKyAgICAgICAgICAg IGNvbnRhaW5lci5maW5kKCcuc2xpY2stcm93IC5zbGljay1jZWxsOmZpcnN0 LWNoaWxkIGlucHV0W3R5cGU9ImNoZWNrYm94Il0nKVs1XS5jbGljaygpOwog Ci0gICAgICAgICAgICBleHBlY3QoJChjb250YWluZXIuZmluZCgnLnNyIC5z YzpmaXJzdC1jaGlsZCBpbnB1dFt0eXBlPSJjaGVja2JveCJdJylbNV0pCisg ICAgICAgICAgICBleHBlY3QoJChjb250YWluZXIuZmluZCgnLnNsaWNrLXJv dyAuc2xpY2stY2VsbDpmaXJzdC1jaGlsZCBpbnB1dFt0eXBlPSJjaGVja2Jv eCJdJylbNV0pCiAgICAgICAgICAgICAgIC5pcygnOmNoZWNrZWQnKSkudG9C ZVRydXRoeSgpOwogICAgICAgICAgIH0pOwogICAgICAgICB9KTsKIAogICAg ICAgICBkZXNjcmliZSgid2hlbiB0aGUgdXNlciBjbGlja3MgYSByb3cgaGVh ZGVyIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgIGl0KCJzZWxlY3RzIHRo ZSByb3ciLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBjb250YWluZXIu ZmluZCgnLnNyIC5zYzpmaXJzdC1jaGlsZCcpWzBdLmNsaWNrKCk7CisgICAg ICAgICAgICBjb250YWluZXIuZmluZCgnLnNsaWNrLXJvdyAuc2xpY2stY2Vs bDpmaXJzdC1jaGlsZCcpWzBdLmNsaWNrKCk7CiAKICAgICAgICAgICAgIHZh ciBzZWxlY3RlZFJhbmdlcyA9IHJvd1NlbGVjdGlvbk1vZGVsLmdldFNlbGVj dGVkUmFuZ2VzKCk7CiAgICAgICAgICAgICBleHBlY3RPbmx5VGhlRmlyc3RS b3dUb0JlU2VsZWN0ZWQoc2VsZWN0ZWRSYW5nZXMpOwogICAgICAgICAgIH0p OwogCiAgICAgICAgICAgaXQoImNoZWNrcyB0aGUgY2hlY2tib3giLCBmdW5j dGlvbiAoKSB7Ci0gICAgICAgICAgICBjb250YWluZXIuZmluZCgnLnNyIC5z YzpmaXJzdC1jaGlsZCcpWzddLmNsaWNrKCk7CisgICAgICAgICAgICBjb250 YWluZXIuZmluZCgnLnNsaWNrLXJvdyAuc2xpY2stY2VsbDpmaXJzdC1jaGls ZCcpWzddLmNsaWNrKCk7CiAKLSAgICAgICAgICAgIGV4cGVjdCgkKGNvbnRh aW5lci5maW5kKCcuc3IgLnNjOmZpcnN0LWNoaWxkIGlucHV0W3R5cGU9ImNo ZWNrYm94Il0nKVs3XSkKKyAgICAgICAgICAgIGV4cGVjdCgkKGNvbnRhaW5l ci5maW5kKCcuc2xpY2stcm93IC5zbGljay1jZWxsOmZpcnN0LWNoaWxkIGlu cHV0W3R5cGU9ImNoZWNrYm94Il0nKVs3XSkKICAgICAgICAgICAgICAgLmlz KCc6Y2hlY2tlZCcpKS50b0JlVHJ1dGh5KCk7CiAgICAgICAgICAgfSk7CiAg ICAgICAgIH0pOwogCiAgICAgICAgIGRlc2NyaWJlKCJ3aGVuIHRoZSB1c2Vy IGNsaWNrcyBtdWx0aXBsZSByb3cgaGVhZGVycyIsIGZ1bmN0aW9uICgpIHsK ICAgICAgICAgICBpdCgic2VsZWN0cyBhbm90aGVyIHJvdyIsIGZ1bmN0aW9u ICgpIHsKLSAgICAgICAgICAgIGNvbnRhaW5lci5maW5kKCcuc3IgLnNjOmZp cnN0LWNoaWxkJylbNF0uY2xpY2soKTsKLSAgICAgICAgICAgIGNvbnRhaW5l ci5maW5kKCcuc3IgLnNjOmZpcnN0LWNoaWxkJylbMF0uY2xpY2soKTsKKyAg ICAgICAgICAgIGNvbnRhaW5lci5maW5kKCcuc2xpY2stcm93IC5zbGljay1j ZWxsOmZpcnN0LWNoaWxkJylbNF0uY2xpY2soKTsKKyAgICAgICAgICAgIGNv bnRhaW5lci5maW5kKCcuc2xpY2stcm93IC5zbGljay1jZWxsOmZpcnN0LWNo aWxkJylbMF0uY2xpY2soKTsKIAogICAgICAgICAgICAgdmFyIHNlbGVjdGVk UmFuZ2VzID0gcm93U2VsZWN0aW9uTW9kZWwuZ2V0U2VsZWN0ZWRSYW5nZXMo KTsKICAgICAgICAgICAgIGV4cGVjdChzZWxlY3RlZFJhbmdlcy5sZW5ndGgp LnRvRXF1YWwoMik7CkBAIC0xMjEsNyArMTIxLDcgQEAgZGVmaW5lKAogICAg ICAgICAgIH0pOwogCiAgICAgICAgICAgaXQoImRlc2VsZWN0cyB0aGUgY29s dW1uIiwgZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgY29udGFpbmVyLmZp bmQoJy5zciAuc2M6Zmlyc3QtY2hpbGQnKVswXS5jbGljaygpOworICAgICAg ICAgICAgY29udGFpbmVyLmZpbmQoJy5zbGljay1yb3cgLnNsaWNrLWNlbGw6 Zmlyc3QtY2hpbGQnKVswXS5jbGljaygpOwogICAgICAgICAgICAgdmFyIHNl bGVjdGVkUmFuZ2VzID0gcm93U2VsZWN0aW9uTW9kZWwuZ2V0U2VsZWN0ZWRS YW5nZXMoKTsKIAogICAgICAgICAgICAgZXhwZWN0T25seVRoZUZpcnN0Um93 VG9CZVNlbGVjdGVkKHNlbGVjdGVkUmFuZ2VzKTsKQEAgLTEzMCwzMCArMTMw LDMwIEBAIGRlZmluZSgKIAogICAgICAgICBkZXNjcmliZSgid2hlbiB0aGUg cm93IGlzIGRlc2VsZWN0ZWQgdGhyb3VnaCBzZXRTZWxlY3RlZFJhbmdlcyIs IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9u ICgpIHsKLSAgICAgICAgICAgIGNvbnRhaW5lci5maW5kKCcuc3IgLnNjOmZp cnN0LWNoaWxkJylbNF0uY2xpY2soKTsKKyAgICAgICAgICAgIGNvbnRhaW5l ci5maW5kKCcuc2xpY2stcm93IC5zbGljay1jZWxsOmZpcnN0LWNoaWxkJylb NF0uY2xpY2soKTsKICAgICAgICAgICB9KTsKIAogICAgICAgICAgIGl0KCJz aG91bGQgdW5jaGVjayB0aGUgY2hlY2tib3giLCBmdW5jdGlvbiAoKSB7CiAg ICAgICAgICAgICByb3dTZWxlY3Rpb25Nb2RlbC5zZXRTZWxlY3RlZFJhbmdl cyhbXSk7CiAKLSAgICAgICAgICAgIGV4cGVjdCgkKGNvbnRhaW5lci5maW5k KCcuc3IgLnNjOmZpcnN0LWNoaWxkIGlucHV0W3R5cGU9ImNoZWNrYm94Il0n KVs0XSkKKyAgICAgICAgICAgIGV4cGVjdCgkKGNvbnRhaW5lci5maW5kKCcu c2xpY2stcm93IC5zbGljay1jZWxsOmZpcnN0LWNoaWxkIGlucHV0W3R5cGU9 ImNoZWNrYm94Il0nKVs0XSkKICAgICAgICAgICAgICAgLmlzKCc6Y2hlY2tl ZCcpKS50b0JlRmFsc3koKTsKICAgICAgICAgICB9KTsKICAgICAgICAgfSk7 CiAKICAgICAgICAgZGVzY3JpYmUoImNsaWNrIGEgc2Vjb25kIHRpbWUiLCBm dW5jdGlvbiAoKSB7CiAgICAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAo KSB7Ci0gICAgICAgICAgICBjb250YWluZXIuZmluZCgnLnNyIC5zYzpmaXJz dC1jaGlsZCcpWzFdLmNsaWNrKCk7CisgICAgICAgICAgICBjb250YWluZXIu ZmluZCgnLnNsaWNrLXJvdyAuc2xpY2stY2VsbDpmaXJzdC1jaGlsZCcpWzFd LmNsaWNrKCk7CiAgICAgICAgICAgfSk7CiAKICAgICAgICAgICBpdCgidW5j aGVja3MgY2hlY2tib3giLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBj b250YWluZXIuZmluZCgnLnNyIC5zYzpmaXJzdC1jaGlsZCcpWzFdLmNsaWNr KCk7Ci0gICAgICAgICAgICBleHBlY3QoJChjb250YWluZXIuZmluZCgnLnNy IC5zYzpmaXJzdC1jaGlsZCBpbnB1dFt0eXBlPSJjaGVja2JveCJdJylbMV0p CisgICAgICAgICAgICBjb250YWluZXIuZmluZCgnLnNsaWNrLXJvdyAuc2xp Y2stY2VsbDpmaXJzdC1jaGlsZCcpWzFdLmNsaWNrKCk7CisgICAgICAgICAg ICBleHBlY3QoJChjb250YWluZXIuZmluZCgnLnNsaWNrLXJvdyAuc2xpY2st Y2VsbDpmaXJzdC1jaGlsZCBpbnB1dFt0eXBlPSJjaGVja2JveCJdJylbMV0p CiAgICAgICAgICAgICAgIC5pcygnOmNoZWNrZWQnKSkudG9CZUZhbHN5KCk7 CiAgICAgICAgICAgfSk7CiAKICAgICAgICAgICBpdCgidW5zZWxlY3RzIHRo ZSByb3ciLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBjb250YWluZXIu ZmluZCgnLnNyIC5zYzpmaXJzdC1jaGlsZCcpWzFdLmNsaWNrKCk7CisgICAg ICAgICAgICBjb250YWluZXIuZmluZCgnLnNsaWNrLXJvdyAuc2xpY2stY2Vs bDpmaXJzdC1jaGlsZCcpWzFdLmNsaWNrKCk7CiAgICAgICAgICAgICB2YXIg c2VsZWN0ZWRSYW5nZXMgPSByb3dTZWxlY3Rpb25Nb2RlbC5nZXRTZWxlY3Rl ZFJhbmdlcygpOwogCiAgICAgICAgICAgICBleHBlY3Qoc2VsZWN0ZWRSYW5n ZXMubGVuZ3RoKS50b0VxdWFsKDApOwotLSAKMi4xMi4wCgo= --f403045f7ed6be7dd4054e27e5ff 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 --f403045f7ed6be7dd4054e27e5ff--